From 9c3e9310b60ede069336f30337787cf252036f28 Mon Sep 17 00:00:00 2001 From: Jandiasnow <88074479@qq.com> Date: Thu, 23 May 2024 15:42:51 +0800 Subject: [PATCH] feat: add basic --- .dumirc.ts | 3 +- .github/workflows/deploy-ghpages.yml | 2 +- README.md | 5 + docs/index.md | 12 +- package.json | 1 + packages/annotate-text/README.md | 4 +- packages/annotate-text/index.md | 8 +- packages/antv-ava/README.md | 4 +- packages/antv-ava/index.md | 12 +- packages/basic/.fatherrc.ts | 23 ++ packages/basic/.gitignore | 3 + packages/basic/README.md | 20 ++ packages/basic/docs/react/Profiler.tsx | 25 ++ packages/basic/docs/react/StrictMode.tsx | 35 ++ packages/basic/docs/react/Suspense.tsx | 13 + packages/basic/docs/react/createPortal.tsx | 31 ++ packages/basic/docs/react/flushSync.tsx | 21 ++ packages/basic/docs/react/lazy.tsx | 28 ++ packages/basic/docs/react/lazyComponent.tsx | 3 + packages/basic/docs/react/memo.tsx | 23 ++ packages/basic/docs/react/use.tsx | 26 ++ packages/basic/docs/react/useContext.tsx | 19 + .../basic/docs/react/useContextReducer.tsx | 71 ++++ .../basic/docs/react/useDeferredValue.tsx | 20 ++ packages/basic/docs/react/useEffectEvent.tsx | 58 +++ .../basic/docs/react/useEffectEventHook.tsx | 21 ++ packages/basic/docs/react/useId.tsx | 7 + packages/basic/docs/react/useLayoutEffect.tsx | 19 + packages/basic/docs/react/useOptimistic.tsx | 54 +++ packages/basic/docs/react/useReducer.tsx | 39 +++ packages/basic/docs/react/useReducerImmer.tsx | 35 ++ packages/basic/docs/react/useRef.tsx | 17 + packages/basic/docs/react/useRefChild.tsx | 36 ++ packages/basic/docs/react/useRefList.tsx | 43 +++ .../docs/react/useStateDebounceUpdate.tsx | 41 +++ .../docs/react/useStateMultipleUpdate.tsx | 21 ++ .../docs/react/useStateNestedObjectUpdate.tsx | 25 ++ .../basic/docs/react/useSyncExternalStore.tsx | 25 ++ packages/basic/docs/react/useTransition.tsx | 25 ++ packages/basic/index.md | 252 ++++++++++++++ packages/basic/index.tsx | 1 + packages/basic/package.json | 29 ++ packages/basic/src/index.ts | 1 + packages/basic/src/index.tsx | 1 + pnpm-lock.yaml | 329 +++++++++++++++--- 45 files changed, 1425 insertions(+), 66 deletions(-) create mode 100644 packages/basic/.fatherrc.ts create mode 100644 packages/basic/.gitignore create mode 100644 packages/basic/README.md create mode 100644 packages/basic/docs/react/Profiler.tsx create mode 100644 packages/basic/docs/react/StrictMode.tsx create mode 100644 packages/basic/docs/react/Suspense.tsx create mode 100644 packages/basic/docs/react/createPortal.tsx create mode 100644 packages/basic/docs/react/flushSync.tsx create mode 100644 packages/basic/docs/react/lazy.tsx create mode 100644 packages/basic/docs/react/lazyComponent.tsx create mode 100644 packages/basic/docs/react/memo.tsx create mode 100644 packages/basic/docs/react/use.tsx create mode 100644 packages/basic/docs/react/useContext.tsx create mode 100644 packages/basic/docs/react/useContextReducer.tsx create mode 100644 packages/basic/docs/react/useDeferredValue.tsx create mode 100644 packages/basic/docs/react/useEffectEvent.tsx create mode 100644 packages/basic/docs/react/useEffectEventHook.tsx create mode 100644 packages/basic/docs/react/useId.tsx create mode 100644 packages/basic/docs/react/useLayoutEffect.tsx create mode 100644 packages/basic/docs/react/useOptimistic.tsx create mode 100644 packages/basic/docs/react/useReducer.tsx create mode 100644 packages/basic/docs/react/useReducerImmer.tsx create mode 100644 packages/basic/docs/react/useRef.tsx create mode 100644 packages/basic/docs/react/useRefChild.tsx create mode 100644 packages/basic/docs/react/useRefList.tsx create mode 100644 packages/basic/docs/react/useStateDebounceUpdate.tsx create mode 100644 packages/basic/docs/react/useStateMultipleUpdate.tsx create mode 100644 packages/basic/docs/react/useStateNestedObjectUpdate.tsx create mode 100644 packages/basic/docs/react/useSyncExternalStore.tsx create mode 100644 packages/basic/docs/react/useTransition.tsx create mode 100644 packages/basic/index.md create mode 100644 packages/basic/index.tsx create mode 100644 packages/basic/package.json create mode 100644 packages/basic/src/index.ts create mode 100644 packages/basic/src/index.tsx diff --git a/.dumirc.ts b/.dumirc.ts index bbb077f..555a258 100644 --- a/.dumirc.ts +++ b/.dumirc.ts @@ -2,7 +2,7 @@ import { defineConfig } from 'dumi'; import { readdirSync } from 'fs'; import { join } from 'path'; -const PUBLIC_PATH = '/'; +const PUBLIC_PATH = '/frontend/'; const isProduction = process.env.NODE_ENV === 'production'; const headPkgList: string[] = []; @@ -12,6 +12,7 @@ const pkgDirList = readdirSync(join(__dirname, 'packages')).filter( const pkgs = { 'antv-ava': 'antv-ava', 'annotate-text': 'annotate-text', + 'basic': 'basic', }; export const alias = pkgDirList.reduce((pre, name) => { pre[`@jandia/${pkgs[name]}`] = join(__dirname, 'packages', name, 'src'); diff --git a/.github/workflows/deploy-ghpages.yml b/.github/workflows/deploy-ghpages.yml index 6057752..9dff678 100644 --- a/.github/workflows/deploy-ghpages.yml +++ b/.github/workflows/deploy-ghpages.yml @@ -43,4 +43,4 @@ jobs: uses: peaceiris/actions-gh-pages@v3 with: github_token: ${{ secrets.GH_TOKEN }} - publish_dir: ./dist/FrontEnd + publish_dir: ./dist/frontend diff --git a/README.md b/README.md index 0aacdda..9cb5c5e 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,7 @@ $ pnpm run build | ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | --------------------------- | | [@jandiasnow/antv-ava][antv-ava-url] | [packages/antv-ava][antv-ava-github] | [![][antv-ava-shield]][antv-ava-url] | ![][antv-ava-download] | | [@jandiasnow/annotate-text][annotate-text-url] | [packages/annotate-text][annotate-text-github] | [![][annotate-text-shield]][annotate-text-url] | ![][annotate-text-download] | +| [@jandiasnow/basic][basic-url] | [packages/basic][basic-github] | [![][basic-shield]][basic-url] | ![][basic-download] | ## LICENSE @@ -34,3 +35,7 @@ MIT [antv-ava-github]: https://github.com/jandiasnow/frontend/tree/master/packages/antv-ava/README.md [antv-ava-shield]: https://img.shields.io/npm/v/@jandiasnow/antv-ava?color=369eff&labelColor=black&logo=npm&logoColor=white&style=flat-square [antv-ava-url]: https://www.npmjs.com/package/@jandiasnow/antv-ava +[basic-download]: https://img.shields.io/npm/dt/@jandiasnow/basic?labelColor=black&style=flat-square +[basic-github]: https://github.com/jandiasnow/frontend/tree/master/packages/basic/README.md +[basic-shield]: https://img.shields.io/npm/v/@jandiasnow/basic?color=369eff&labelColor=black&logo=npm&logoColor=white&style=flat-square +[basic-url]: https://www.npmjs.com/package/@jandiasnow/basic diff --git a/docs/index.md b/docs/index.md index c464875..e8bb5a8 100644 --- a/docs/index.md +++ b/docs/index.md @@ -9,12 +9,16 @@ hero: - text: Github link: https://github.com/Jandiasnow/FrontEnd features: + - title: basic + emoji: 🧩 + link: /packages/basic + description: Basic warehouse of frontend - title: AVA - emoji: 💎 + emoji: 🚀 link: /packages/antv-ava - description: Intelligent visualization + description: antv-ava demos - title: annotate-text - emoji: 💎 + emoji: 📜 link: /packages/annotate-text - description: Intelligent visualization + description: annotate-text warehouse comparison and use examples --- diff --git a/package.json b/package.json index cec2ff8..48647e0 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "dev": "dumi dev", "dev:annotate-text": "concurrently \"pnpm --filter 'annotate-text' dev\" \"npm run dev\"", "dev:antv-ava": "concurrently \"pnpm --filter 'antv-ava' dev\" \"npm run dev\"", + "dev:basic": "concurrently \"pnpm --filter 'basic' dev\" \"npm run dev\"", "docs:build": "dumi build", "lint": "npm run lint:es && npm run lint:style && npm run lint:md", "lint-fix": "npm run lint-fix:es && npm run lint-fix:style", diff --git a/packages/annotate-text/README.md b/packages/annotate-text/README.md index 4978106..3b298df 100644 --- a/packages/annotate-text/README.md +++ b/packages/annotate-text/README.md @@ -1,6 +1,6 @@ -# @jadiasnow/annotate-text +# @jandiasnow/annotate-text -🌐 [@jadiasnow/annotate-text](https://www.npmjs.com/package/@jandiasnow/annotate-text) is an demo examples for +📜 [@jandiasnow/annotate-text](https://www.npmjs.com/package/@jandiasnow/annotate-text) is an demo examples for [react-text-annotate-blend](https://github.com/smhaley/react-text-annotate-blend), [react-nlp-annotate](https://github.com/UniversalDataTool/react-nlp-annotate), [@recogito/react-text-annotator](https://github.com/recogito/text-annotator-js/blob/main/packages/text-annotator-react/package.json), diff --git a/packages/annotate-text/index.md b/packages/annotate-text/index.md index 65e8e57..d9d5e01 100644 --- a/packages/annotate-text/index.md +++ b/packages/annotate-text/index.md @@ -9,7 +9,7 @@ order: 0

Annotate Text

-🌐 [@jadiasnow/annotate-text](https://www.npmjs.com/package/@jandiasnow/annotate-text) is an demo examples for +📜 [@jandiasnow/annotate-text](https://www.npmjs.com/package/@jandiasnow/annotate-text) is an demo examples for [react-text-annotate-blend](https://github.com/smhaley/react-text-annotate-blend), [react-nlp-annotate](https://github.com/UniversalDataTool/react-nlp-annotate), [@recogito/react-text-annotator](https://github.com/recogito/text-annotator-js/blob/main/packages/text-annotator-react/package.json), @@ -18,13 +18,13 @@ order: 0 -### website +## 🔗 website -## Warehouse comparison +## 🆚 Warehouse comparison | name | website repo | advantage | defect | used | | ------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | @@ -34,7 +34,7 @@ order: 0 | [@recogito/recogito-js](https://github.com/recogito/recogito-js) | - | 1. 最近一年有更新
2. 支持 html 类型标记
3. 支持标签关系标记 | 1. 没有 react 版本
2. 样式不好调整,点击事件不好添加 | 页面功能复杂可考虑 | | [annotato](https://github.com/YusufCelik/annotato) | - | 1. react 版本,代码简单,二次开发比较容易
2. 支持点击事件、样式自定义
3. 支持 html
4. 使用简单 | 1. 最近更新 3 年前
2. 不支持 html 类型
3. 不支持标签关系标记 | 页面功能简单可使用 | -## 🌐 Usage +## 📝 Usage ### react-text-annotate-blend diff --git a/packages/antv-ava/README.md b/packages/antv-ava/README.md index dff47d9..f0dd706 100644 --- a/packages/antv-ava/README.md +++ b/packages/antv-ava/README.md @@ -1,6 +1,6 @@ -# @jadiasnow/antv-ava +# @jandiasnow/antv-ava -🌐 [@jadiasnow/antv-ava](https://www.npmjs.com/package/@jandiasnow/ava) is an demo examples for [@antv/ava](https://ava.antv.antgroup.com/guide/intro). +🚀 [@jandiasnow/antv-ava](https://www.npmjs.com/package/@jandiasnow/ava) is an demo examples for [@antv/ava](https://ava.antv.antgroup.com/guide/intro). ## Development diff --git a/packages/antv-ava/index.md b/packages/antv-ava/index.md index 92b7a00..49fcc34 100644 --- a/packages/antv-ava/index.md +++ b/packages/antv-ava/index.md @@ -9,19 +9,11 @@ order: 0

Antv Ava

-🌐 [@jadiasnow/antv-ava](https://www.npmjs.com/package/@jandiasnow/ava) is an demo examples for [@antv/ava](https://ava.antv.antgroup.com/guide/intro). +🚀 [@jandiasnow/antv-ava](https://www.npmjs.com/package/@jandiasnow/ava) is an demo examples for [@antv/ava](https://ava.antv.antgroup.com/guide/intro). -## 📦 Installation - -To install @, run the following command: - -```bash - -``` - -## 🌐 Usage +## 📝 Usage ### 图表知识库(ckb) diff --git a/packages/basic/.fatherrc.ts b/packages/basic/.fatherrc.ts new file mode 100644 index 0000000..ea98c7d --- /dev/null +++ b/packages/basic/.fatherrc.ts @@ -0,0 +1,23 @@ +import { defineConfig } from 'father'; + +const library = 'JandiasnowBasic'; + +const externals = {}; + +export default defineConfig({ + extends: '../../.fatherrc.base.ts', + cjs: { + input: 'src', // 默认编译目录 + platform: 'node', // 默认构建为 Node.js 环境的产物 + transformer: 'esbuild', // 默认使用 esbuild 以获得更快的构建速度 + }, + umd: { + entry: { + 'src/index.ts': { + name: library, + sourcemap: true, + externals, + }, + }, + }, +}); diff --git a/packages/basic/.gitignore b/packages/basic/.gitignore new file mode 100644 index 0000000..a5a9814 --- /dev/null +++ b/packages/basic/.gitignore @@ -0,0 +1,3 @@ +node_modules +dist +.dumi \ No newline at end of file diff --git a/packages/basic/README.md b/packages/basic/README.md new file mode 100644 index 0000000..1a39ae2 --- /dev/null +++ b/packages/basic/README.md @@ -0,0 +1,20 @@ +# @jandiasnow/basic + +🧩 [@jandiasnow/basic](https://www.npmjs.com/package/@jandiasnow/basic) is an warehouse of frontend basic + +## Development + +```bash +# install dependencies +$ pnpm install + +# start dev server +$ pnpm start + +# build docs +$ pnpm run build +``` + +## LICENSE + +MIT diff --git a/packages/basic/docs/react/Profiler.tsx b/packages/basic/docs/react/Profiler.tsx new file mode 100644 index 0000000..f8a4331 --- /dev/null +++ b/packages/basic/docs/react/Profiler.tsx @@ -0,0 +1,25 @@ +import { Tabs } from 'antd'; +import React, { Profiler, useState } from 'react'; + +export default () => { + const [tab, setTab] = useState('key1'); + return ( + { + console.warn(':', params); + }} + > + { + setTab(v); + }} + /> + + ); +}; diff --git a/packages/basic/docs/react/StrictMode.tsx b/packages/basic/docs/react/StrictMode.tsx new file mode 100644 index 0000000..57cecdf --- /dev/null +++ b/packages/basic/docs/react/StrictMode.tsx @@ -0,0 +1,35 @@ +import { Space } from 'antd'; +import React, { StrictMode, useState } from 'react'; + +let initialStories = [ + { id: 0, label: "Ankit's Story" }, + { id: 1, label: "Taylor's Story" }, +]; + +export default function App() { + let [stories] = useState(initialStories); + const [isHover, setIsHover] = useState(false); + const items = stories as any; + items.push({ id: 'create', label: 'Create Story' }); + + return ( + + setIsHover(true)} + onPointerLeave={() => setIsHover(false)} + style={{ + backgroundColor: isHover ? '#ddd' : '#fff', + }} + > + {items.map(story => ( +
  • + {story.label} +
  • + ))} +
    +
    + ); +} diff --git a/packages/basic/docs/react/Suspense.tsx b/packages/basic/docs/react/Suspense.tsx new file mode 100644 index 0000000..39e3d19 --- /dev/null +++ b/packages/basic/docs/react/Suspense.tsx @@ -0,0 +1,13 @@ +import { Space, Spin } from 'antd'; +import React, { Suspense } from 'react'; + +export default () => { + return ( + loading}> + + wrapper + loading1}>info + + + ); +}; diff --git a/packages/basic/docs/react/createPortal.tsx b/packages/basic/docs/react/createPortal.tsx new file mode 100644 index 0000000..c2d7325 --- /dev/null +++ b/packages/basic/docs/react/createPortal.tsx @@ -0,0 +1,31 @@ +import { Button, Space, Typography } from 'antd'; +import React, { useId, useState } from 'react'; +import { createPortal } from 'react-dom'; + +const ModalContent = ({ onClose }) => { + return ( + + modal content + + + ); +}; + +export default () => { + const [showModal, setShowModal] = useState(false); + const domId = useId(); + + return ( + + + +
    + + {showModal && + createPortal( + setShowModal(false)} />, + document.querySelector("[id=':r3:']") as any + )} +
    + ); +}; diff --git a/packages/basic/docs/react/flushSync.tsx b/packages/basic/docs/react/flushSync.tsx new file mode 100644 index 0000000..1bd007a --- /dev/null +++ b/packages/basic/docs/react/flushSync.tsx @@ -0,0 +1,21 @@ +import { Button, Input, Space } from 'antd'; +import React, { useState } from 'react'; +import { flushSync } from 'react-dom'; + +export default () => { + const [text, setText] = useState('init'); + + const handleChange = () => { + flushSync(() => { + setText('change'); + }); + }; + + return ( + + {text} + + setText(e.target.value)} value={text} /> + + ); +}; diff --git a/packages/basic/docs/react/lazy.tsx b/packages/basic/docs/react/lazy.tsx new file mode 100644 index 0000000..5a3b1d7 --- /dev/null +++ b/packages/basic/docs/react/lazy.tsx @@ -0,0 +1,28 @@ +import { Checkbox, Space, Spin } from 'antd'; +import { Suspense, lazy, useState } from 'react'; + +const delayForDemo = promise => { + return new Promise(resolve => { + setTimeout(resolve, 2000); + }).then(() => promise); +}; + +const LazyComponent = lazy(() => delayForDemo(import('./lazyComponent.tsx'))); + +export default () => { + const [showPreview, setShowPreview] = useState(false); + + return ( + + setShowPreview(e.target.checked)} value={showPreview}> + Show preview + + {showPreview && ( + }> + Preview: + + + )} + + ); +}; diff --git a/packages/basic/docs/react/lazyComponent.tsx b/packages/basic/docs/react/lazyComponent.tsx new file mode 100644 index 0000000..6cd4e84 --- /dev/null +++ b/packages/basic/docs/react/lazyComponent.tsx @@ -0,0 +1,3 @@ +export default () => { + return 'lazyComponent'; +}; diff --git a/packages/basic/docs/react/memo.tsx b/packages/basic/docs/react/memo.tsx new file mode 100644 index 0000000..83297a8 --- /dev/null +++ b/packages/basic/docs/react/memo.tsx @@ -0,0 +1,23 @@ +import { Input, Space } from 'antd'; +import { memo, useState } from 'react'; + +const MemoComponent = memo(({ name }) => { + console.warn('Greeting was rendered at', new Date().toLocaleTimeString()); + return ( + + {new Date().toLocaleTimeString()}: {name || '-'} + + ); +}); + +export default function MyApp() { + const [name, setName] = useState(''); + const [address, setAddress] = useState(''); + return ( + + setName(e.target.value)} placeholder="Name" value={name} /> + setAddress(e.target.value)} placeholder="Address" value={address} /> + + + ); +} diff --git a/packages/basic/docs/react/use.tsx b/packages/basic/docs/react/use.tsx new file mode 100644 index 0000000..ccb9952 --- /dev/null +++ b/packages/basic/docs/react/use.tsx @@ -0,0 +1,26 @@ +import { Button, Space } from 'antd'; +import { createContext, use, useState } from 'react'; + +const ThemeContext = createContext('theme'); + +const Content = () => { + const [show, setShow] = useState(); + let theme = 'default'; + if (show) { + theme = use(ThemeContext); + } + return ( + + {theme} + + + ); +}; + +export default () => { + return ( + + + + ); +}; diff --git a/packages/basic/docs/react/useContext.tsx b/packages/basic/docs/react/useContext.tsx new file mode 100644 index 0000000..8e266f3 --- /dev/null +++ b/packages/basic/docs/react/useContext.tsx @@ -0,0 +1,19 @@ +import React, { createContext, useContext } from 'react'; + +// create +export const LevelContext = createContext(''); + +const Child = () => { + // use + const level = useContext(LevelContext); + return <>{level}; +}; + +export default () => { + // use + return ( + + + + ); +}; diff --git a/packages/basic/docs/react/useContextReducer.tsx b/packages/basic/docs/react/useContextReducer.tsx new file mode 100644 index 0000000..35f74a4 --- /dev/null +++ b/packages/basic/docs/react/useContextReducer.tsx @@ -0,0 +1,71 @@ +import { Button, Space } from 'antd'; +import React, { createContext, useContext, useReducer } from 'react'; + +// use reducer create context +const initialTasks = [{ id: 0, text: 'Philosopher’s Path', done: true }]; + +type Dispatch = React.Dispatch<{ type: 'changed'; task: (typeof initialTasks)[0] }>; + +const TasksContext = createContext(initialTasks); +const TasksDispatchContext = createContext(null!); + +const tasksReducer = (tasks, action: { type: 'changed'; task: any }) => { + switch (action.type) { + case 'changed': { + return tasks.map(t => { + return t.id === action.task.id + ? { ...action.task, change: (action.task.change || 0) + 1 } + : t; + }); + } + default: { + throw new Error('Unknown action: ' + action.type); + } + } +}; + +export const TasksProvider = ({ children }) => { + const [tasks, dispatch] = useReducer(tasksReducer, initialTasks); + + return ( + + {children} + + ); +}; + +// use func +export const useTasks = () => { + return useContext(TasksContext); +}; +export const useTasksDispatch = () => { + return useContext(TasksDispatchContext); +}; + +// use +const Child = () => { + const dispatch = useTasksDispatch(); + const tasks = useTasks(); + return ( + + + {JSON.stringify(tasks)} + + ); +}; +export default () => { + return ( + + + + ); +}; diff --git a/packages/basic/docs/react/useDeferredValue.tsx b/packages/basic/docs/react/useDeferredValue.tsx new file mode 100644 index 0000000..cba9f5e --- /dev/null +++ b/packages/basic/docs/react/useDeferredValue.tsx @@ -0,0 +1,20 @@ +import { Input, Space, Typography } from 'antd'; +import React, { useDeferredValue, useState } from 'react'; + +export default () => { + const [query, setQuery] = useState(''); + const deferredQuery = useDeferredValue(query); + const isStale = query !== deferredQuery; + return ( + + setQuery(e.target.value)} value={query} /> + + {deferredQuery} + + + ); +}; diff --git a/packages/basic/docs/react/useEffectEvent.tsx b/packages/basic/docs/react/useEffectEvent.tsx new file mode 100644 index 0000000..e6fab1a --- /dev/null +++ b/packages/basic/docs/react/useEffectEvent.tsx @@ -0,0 +1,58 @@ +// import React, { useState, useEffect } from 'react'; +// import { Button, Typography, Space } from 'antd' + +// // import { experimental_useEffectEvent as useEffectEvent } from 'react'; +// // import { createConnection } from './chat.js'; + +// const serverUrl = 'https://localhost:1234'; + +// function ChatRoom({ roomId, theme }) { +// // const onConnected = useEffectEvent(() => { +// // showNotification('Connected!', theme); +// // }); + +// // useEffect(() => { +// // const connection = createConnection(serverUrl, roomId); +// // connection.on('connected', () => { +// // onConnected(); +// // }); +// // connection.connect(); +// // return () => connection.disconnect(); +// // }, [roomId]); + +// return

    Welcome to the {roomId} room!

    +// } + +// export default () => { +// const [roomId, setRoomId] = useState('general'); +// const [isDark, setIsDark] = useState(false); +// return ( +// <> +// +// +//
    +// +// +// ); +// } +export default () => 1; diff --git a/packages/basic/docs/react/useEffectEventHook.tsx b/packages/basic/docs/react/useEffectEventHook.tsx new file mode 100644 index 0000000..413abfa --- /dev/null +++ b/packages/basic/docs/react/useEffectEventHook.tsx @@ -0,0 +1,21 @@ +// //7. useEffectEvent hook +// import { useEffect, useEffectEvent } from 'react'; +// // ... + +// export function useChatRoom({ serverUrl, roomId, onReceiveMessage }) { +// const onMessage = useEffectEvent(onReceiveMessage); + +// useEffect(() => { +// const options = { +// serverUrl: serverUrl, +// roomId: roomId +// }; +// const connection = createConnection(options); +// connection.connect(); +// connection.on('message', (msg) => { +// onMessage(msg); +// }); +// return () => connection.disconnect(); +// }, [roomId, serverUrl]); // ✅ All dependencies declared +// } +export default () => 1; diff --git a/packages/basic/docs/react/useId.tsx b/packages/basic/docs/react/useId.tsx new file mode 100644 index 0000000..6e84752 --- /dev/null +++ b/packages/basic/docs/react/useId.tsx @@ -0,0 +1,7 @@ +import { Typography } from 'antd'; +import React, { useId } from 'react'; + +export default () => { + const id = useId(); + return {id}; +}; diff --git a/packages/basic/docs/react/useLayoutEffect.tsx b/packages/basic/docs/react/useLayoutEffect.tsx new file mode 100644 index 0000000..be906b5 --- /dev/null +++ b/packages/basic/docs/react/useLayoutEffect.tsx @@ -0,0 +1,19 @@ +import { Space, Typography } from 'antd'; +import React, { useLayoutEffect, useRef, useState } from 'react'; + +export default () => { + const ref = useRef(null!); + const [rect, setRect] = useState(); + + useLayoutEffect(() => { + const r = ref.current.getBoundingClientRect(); + setRect(r); + }, []); + + return ( + + height: {rect?.height} + width: {rect?.width} + + ); +}; diff --git a/packages/basic/docs/react/useOptimistic.tsx b/packages/basic/docs/react/useOptimistic.tsx new file mode 100644 index 0000000..5b614fe --- /dev/null +++ b/packages/basic/docs/react/useOptimistic.tsx @@ -0,0 +1,54 @@ +import { useOptimistic, useRef, useState } from 'react'; + +const deliverMessage = async message => { + await new Promise(resolve => { + setTimeout(() => { + resolve(true); + }, 1000); + }); + return message; +}; + +export default () => { + const formRef = useRef(null!); + + const [messages, setMessages] = useState< + { + text: string; + sending?: boolean; + key?: number; + }[] + >([{ text: 'Hello there!', sending: false, key: 1 }]) as any; + + const [optimisticMessages, addOptimisticMessage] = useOptimistic( + messages, + (state, newMessage) => [ + ...state, + { + text: newMessage, + sending: true, + }, + ] + ); + async function formAction(formData) { + addOptimisticMessage(formData.get('message')); + formRef.current.reset(); + const sentMessage = await deliverMessage(formData.get('message')); + setMessages(messages => [...messages, { text: sentMessage }]); + } + + return ( + <> + {optimisticMessages.map((message, index) => ( +
    + {message.text} + {!!message.sending && (Sending...)} +
    + ))} +
    + + +
    + + ); +}; diff --git a/packages/basic/docs/react/useReducer.tsx b/packages/basic/docs/react/useReducer.tsx new file mode 100644 index 0000000..8fc8873 --- /dev/null +++ b/packages/basic/docs/react/useReducer.tsx @@ -0,0 +1,39 @@ +import { Button, Space } from 'antd'; +import React, { useReducer } from 'react'; + +// use +const tasksReducer = (tasks, action: { type: 'changed'; task: any }) => { + switch (action.type) { + case 'changed': { + return tasks.map(t => { + return t.id === action.task.id + ? { ...action.task, change: (action.task.change || 0) + 1 } + : t; + }); + } + default: { + throw new Error('Unknown action: ' + action.type); + } + } +}; +const initData = [{ id: 0, text: 'Visit Kafka Museum', done: true }]; + +export default () => { + const [tasks, dispatch] = useReducer(tasksReducer, initData); + return ( + + + {JSON.stringify(tasks)} + + ); +}; diff --git a/packages/basic/docs/react/useReducerImmer.tsx b/packages/basic/docs/react/useReducerImmer.tsx new file mode 100644 index 0000000..374eb71 --- /dev/null +++ b/packages/basic/docs/react/useReducerImmer.tsx @@ -0,0 +1,35 @@ +import { Button, Space } from 'antd'; +import React from 'react'; +import { useImmerReducer } from 'use-immer'; + +const tasksReducer = (draft, action: { type: 'changed' }) => { + switch (action.type) { + case 'changed': { + // use + draft[0].id = draft[0].id + 1; + break; + } + default: { + throw new Error('Unknown action: ' + action.type); + } + } +}; +const initData = [{ id: 0, text: 'Visit Kafka Museum', done: true }]; + +export default () => { + const [tasks, dispatch] = useImmerReducer(tasksReducer, initData); + return ( + + + {JSON.stringify(tasks)} + + ); +}; diff --git a/packages/basic/docs/react/useRef.tsx b/packages/basic/docs/react/useRef.tsx new file mode 100644 index 0000000..1662c62 --- /dev/null +++ b/packages/basic/docs/react/useRef.tsx @@ -0,0 +1,17 @@ +import { Button, Input, InputRef, Space } from 'antd'; +import React, { useRef } from 'react'; + +export default () => { + const inputRef = useRef(null!); + + const handleClick = () => { + inputRef?.current?.focus(); + }; + + return ( + + + + + ); +}; diff --git a/packages/basic/docs/react/useRefChild.tsx b/packages/basic/docs/react/useRefChild.tsx new file mode 100644 index 0000000..d672f41 --- /dev/null +++ b/packages/basic/docs/react/useRefChild.tsx @@ -0,0 +1,36 @@ +import { Button, Input, InputRef, Space } from 'antd'; +import React, { forwardRef, useImperativeHandle, useRef } from 'react'; + +// create +interface MyInputRef { + focus: () => void; +} +interface MyInputProps { + test?: string; +} +const MyInput = forwardRef((props, ref) => { + const realInputRef = useRef(null!); + useImperativeHandle(ref, () => ({ + // Only expose focus and nothing else + focus() { + realInputRef.current.focus(); + }, + })); + return ; +}); + +// use +export default () => { + const inputRef = useRef(null!); + + function handleClick() { + inputRef.current.focus(); + } + + return ( + + + + + ); +}; diff --git a/packages/basic/docs/react/useRefList.tsx b/packages/basic/docs/react/useRefList.tsx new file mode 100644 index 0000000..118ffd7 --- /dev/null +++ b/packages/basic/docs/react/useRefList.tsx @@ -0,0 +1,43 @@ +import { Button, Input, Space } from 'antd'; +import React, { useRef, useState } from 'react'; + +export default () => { + const itemsRef = useRef>(null); + const [catList] = useState([1, 2, 3]); + + const getMap = () => { + if (!itemsRef.current) { + // Initialize the Map on first usage. + return (itemsRef.current = new Map()); + } + return itemsRef.current; + }; + + const getRefNode = cat => { + const map = getMap(); + const node = map.get(cat); + node.focus(); + }; + + return ( + + + {catList.map(cat => ( + { + const map = getMap(); + map.set(cat, node); + + return () => { + map.delete(cat); + }; + }} + > + ))} + + + + ); +}; diff --git a/packages/basic/docs/react/useStateDebounceUpdate.tsx b/packages/basic/docs/react/useStateDebounceUpdate.tsx new file mode 100644 index 0000000..f572e7b --- /dev/null +++ b/packages/basic/docs/react/useStateDebounceUpdate.tsx @@ -0,0 +1,41 @@ +import { Button, Space } from 'antd'; +import React, { useEffect, useState } from 'react'; + +export default () => { + const [results, setResults] = useState([]); + const [page, setPage] = useState(1); + + const fetchResults = page => { + return new Promise(resolve => { + setTimeout(() => { + resolve(page); + }, 1000); + }); + }; + + // use + useEffect(() => { + let ignore = false; + fetchResults(page).then((json: any) => { + if (!ignore) { + setResults(json); + } + }); + return () => { + ignore = true; + }; + }, [page]); + + return ( + + {page}:{results} + + + ); +}; diff --git a/packages/basic/docs/react/useStateMultipleUpdate.tsx b/packages/basic/docs/react/useStateMultipleUpdate.tsx new file mode 100644 index 0000000..416be4f --- /dev/null +++ b/packages/basic/docs/react/useStateMultipleUpdate.tsx @@ -0,0 +1,21 @@ +import { Button, Space, Typography } from 'antd'; +import React, { useState } from 'react'; + +export default () => { + const [number, setNumber] = useState(0); + return ( + + {number} + + + ); +}; diff --git a/packages/basic/docs/react/useStateNestedObjectUpdate.tsx b/packages/basic/docs/react/useStateNestedObjectUpdate.tsx new file mode 100644 index 0000000..455f2ba --- /dev/null +++ b/packages/basic/docs/react/useStateNestedObjectUpdate.tsx @@ -0,0 +1,25 @@ +import { Input, Space } from 'antd'; +import React from 'react'; +import { useImmer } from 'use-immer'; + +export default () => { + const [person, updatePerson] = useImmer({ + meta: { + name: 'Niki de Saint Phalle', + }, + }); + + function handleNameChange(e) { + updatePerson(draft => { + // use + draft.meta.name = e.target.value; + }); + } + + return ( + + +

    {person.meta.name}

    +
    + ); +}; diff --git a/packages/basic/docs/react/useSyncExternalStore.tsx b/packages/basic/docs/react/useSyncExternalStore.tsx new file mode 100644 index 0000000..7c44753 --- /dev/null +++ b/packages/basic/docs/react/useSyncExternalStore.tsx @@ -0,0 +1,25 @@ +import { Space } from 'antd'; +import React, { useSyncExternalStore } from 'react'; + +const subscribe = callback => { + window.addEventListener('online', callback); + window.addEventListener('offline', callback); + return () => { + window.removeEventListener('online', callback); + window.removeEventListener('offline', callback); + }; +}; + +const useOnlineStatus = () => { + // ✅ Good: Subscribing to an external store with a built-in Hook + return useSyncExternalStore( + subscribe, // React won't resubscribe for as long as you pass the same function + () => navigator.onLine, // How to get the value on the client + () => true // How to get the value on the server + ); +}; + +export default () => { + const isOnline = useOnlineStatus(); + return {isOnline && isOnline.toString()}; +}; diff --git a/packages/basic/docs/react/useTransition.tsx b/packages/basic/docs/react/useTransition.tsx new file mode 100644 index 0000000..bbf676d --- /dev/null +++ b/packages/basic/docs/react/useTransition.tsx @@ -0,0 +1,25 @@ +import { Tabs } from 'antd'; +import React, { useState, useTransition } from 'react'; + +export default () => { + const [isPending, startTransition] = useTransition(); + const [tab, setTab] = useState('key1'); + + return ( + <> + {isPending?.toString()} + { + startTransition(() => { + setTab(v); + }); + }} + /> + + ); +}; diff --git a/packages/basic/index.md b/packages/basic/index.md new file mode 100644 index 0000000..1361d56 --- /dev/null +++ b/packages/basic/index.md @@ -0,0 +1,252 @@ +--- +title: basic +order: 0 +--- + + + +
    + +

    Basic warehouse

    + +🧩 [@jandiasnow/basic](https://www.npmjs.com/package/@jandiasnow/basic) is an warehouse of frontend basic. + +
    + +## 🆚 Compare react versions 16, 17, 18, 19 [参考](https://blog.csdn.net/m0_46486849/article/details/128631509) + +| version | release | feature | +| ----------------------------------------------------------------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [v16.0.0](https://github.com/facebook/react/releases/tag/v16.0.0) | 2017 | 1. Fiber 架构:重写了 `React` 的核心算法。
    2. Error Boundaries:通过 `componentDidCatch` 方法捕获子组件错误。
    3. Fragment:使用 `` 或 `<>` 创建组合组件。
    4. Portals:使用 `ReactDOM.createPortal` 在父组件 DOM 层次之外渲染组件。
    5. 自定义 DOM 属性:支持传递未知的 `HTML` 属性到 `DOM`。
    6. 更好的服务端渲染:通过 `ReactDOMServer.renderToNodeStream `支持流式渲染。
    7. Context API:完全重写的新上下文 API
    `React.createContext` | +| [v17.0.0](https://github.com/facebook/react/releases/tag/v17.0.0) | 2020 | 1. 事件委托的改变:将事件处理程序的委托方式从 `document` 更改为 `React` 根节点。
    2. 新的 JSX 转换:引入了新的 `JSX` 转换逻辑,可以在不引入 `React` 的情况下使用 `JSX`。
    3. 主要专注于内部改进和为未来版本做准备。
    | +| [v18.0.0](https://github.com/facebook/react/releases/tag/v18.0.0) | 2022 | 1. 并发模式(Concurrent Mode):通过 `React.createRoot` 启用新的并发功能。
    2. 自动批处理:对 `setState` 的调用现在在事件处理中自动批处理。
    3. 新的挂起(Suspense)功能:扩展了 `Suspense` 组件的能力,用于数据加载。
    4. 服务端渲染的改进:包括流式渲染和服务端 `Suspense` 支持。
    5. 新的钩子(Hooks):例如 `useId`,用于生成稳定的唯一标识符。
    | +| [v19.0.0](https://19.react.dev/reference/react) | 2024 | 1. 支持标签 link,meta, script,style,title 等标签,自动添加到头部 | + +## 🪄 hooks + +`v16.8.0 引入 hooks`: 把面向生命周期编程变成了面向业务逻辑编程。业务组件的封装方式可以修改成 `Hooks + UI Component`。 + +#### 1. 优点: + +- 解决嵌套问题,简洁,代码量更少:解决了 `HOC` 和 `Render Props` 的嵌套问题,更加简洁 +- 解耦:可以更方便地把 UI 和状态分离,做到更彻底的解耦 +- 组合:可以引用另外的 Hooks 形成新的 Hooks, 组合变化万千 +- 解决类组件的 3 个问题: React Hooks 为函数组件而生,从而解决了类组件的几大问题: + > - this 指向容易错误; + > - 业务逻辑被分割在不同声明周期中,使得代码难以理解和维护; + > - 代码复用成本高(高阶组件容易使代码量剧增); + +#### 2. 缺点 + +- 还有两个类组件的生命周期函数不能用 hooks 替代:getSnapshotBeforeUpdate 和 componentDidCatch +- 写法上有限制: + > - 因为 hook 是一个 链式的数据结构 而不是数组,所以不能嵌套,不能在条件判断、循环中使用,会破坏链式结构; + > - 只能在函数顶层使用,增加了重构旧代码的成本; + > - react hook 需要利用调用顺序来更新状态和调用钩子函数,放到循环或条件分支中,可能导致调用顺序不一致,导致奇怪的 bug; +- 使用 useState 时,数组对象,使用 push、pop、splice 直接更新,无效: + > - 比如 let \[nums, setNums] = useState (\[0,1,2]); + > - nums.push (1) 无效,必须使用 nums=\[…nums, 1],再 setNums (nums); + > - 类组件中直接 push 是没问题的; +- 不能使用装饰器 +- 额外的学习成本 +- 破坏了 PureComponent、React.memo 浅比较的性能优化效果;为了取最新的 props 和 state,每次 render () 都要重新创建事件处理函数; +- 在闭包场景可能会引用到旧的 state、props 值: + > 解决方法 + > + > - 不要在 useEffect 里面写太多的依赖项,划分这些依赖项成多个单一功能的 useEffect。“单一职责模式” + > - 如果你碰到状态不同步的问题,可以考虑下手动传递参数到函数,而不是取父级作用域的值; + > - 使用 useRef,保证同一个引用; + +## 📝 Usage + +### useState + +##### `setState(n => n + 1)`: update some state multiple times + + + +##### `useImmer`: updating a nested object or objects inside arrays + + + +### useEffect + +##### `debounce`: set only the last data received to avoid on-screen data flickering by use ignore + + + + + + + + + +### useReducer + +##### `useReducer` + + + +##### `useImmerReducer` + + + +### useContext + +##### `useContext` + + + +##### `useContext&useReducer`: use useReducer create useContext + + + +### useRef + +> When to use refs +> +> - Storing `timeout` IDs +> - Storing and manipulating `DOM elements`, which we cover on the next page +> - Storing other `objects` that aren’t necessary to calculate the JSX. +> - If your component needs to store `some value`, but it doesn’t impact the rendering logic, choose refs. + +##### `useRef`: useRef doesn’t require a re-render + + + +##### `new Map()`: use Map store useRef list + + + +##### `useImperativeHandle`: use useImperativeHandle get child func or value + + + + + +### useTransition + +##### `useTransition`: update the state without blocking the UI. + + + +### useLayoutEffect + +##### `useLayoutEffect`: fires before the browser repaints the screen + + + +### useId + +##### `useId`: generating unique IDs that can be passed to accessibility attributes + + + +### useDeferredValue + +##### `useDeferredValue`: defer updating a part of the UI + + + + + + + + + +### useSyncExternalStore + +##### `useSyncExternalStore`: subscribing to an external store with a built-in Hook + + + +### flushSync + +##### `flushSync`: use flushSync force update dom + + + +### \Profiler + +##### ` {}} >`: measure rendering performance of a React tree + + + +### \StrictMode + +##### ``: lets you find common bugs in your components early during development. + + + +### \Suspense + +##### `}>`: lets you display a fallback until its children have finished loading. + + + +### cache (server) + +##### `cache`: only for use with React Server Components ; lets you cache the result of a data fetch or computation. + +``` +const func = cache(calculateFunc); + + +import {cache} from 'react'; + +const calculateNorm = cache((x, y, z) => { + // ... +}); + +function MapMarker(props) { + // ✅ Good: Pass primitives to memoized function + const length = calculateNorm(props.x, props.y, props.z); + // ... +} + +function App() { + return ( + <> + + + + ); +} + +``` + +### lazy + +##### `lazy`: defer loading component’s code until it is rendered for the first time. + + + +### memo + +##### `memo`: skip re-rendering a component when its props are unchanged (when its parent component is re-rendered). + + + +### use + +##### `use`: read the value of a resource like a Promise or context.(can be called within loops and conditional statements like if) + + + +### createPortal + +##### `createPortal`: render some children into a different part of the DOM. + + + +
    + +[![][back-to-top]](#readme-top) + +
    + +[back-to-top]: https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square diff --git a/packages/basic/index.tsx b/packages/basic/index.tsx new file mode 100644 index 0000000..2d1ec23 --- /dev/null +++ b/packages/basic/index.tsx @@ -0,0 +1 @@ +export default () => {}; diff --git a/packages/basic/package.json b/packages/basic/package.json new file mode 100644 index 0000000..42d4f05 --- /dev/null +++ b/packages/basic/package.json @@ -0,0 +1,29 @@ +{ + "name": "@jandiasnow/basic", + "version": "0.0.1", + "description": "Basic warehouse of frontend", + "license": "MIT", + "scripts": { + "build": "father build", + "build:deps": "father prebundle", + "dev": "cross-env NODE_ENV=development father dev", + "docs:build": "dumi build", + "prepublishOnly": "father doctor && npm run build", + "start": "npm run dev" + }, + "devDependencies": { + "@types/react": "npm:types-react@rc", + "@types/react-dom": "npm:types-react-dom@rc", + "react": "rc", + "react-dom": "rc", + "typescript": "^5.4.5", + "use-immer": "latest" + }, + "authors": [ + "88074479@qq.com" + ], + "overrides": { + "@types/react": "npm:types-react@rc", + "@types/react-dom": "npm:types-react-dom@rc" + } +} diff --git a/packages/basic/src/index.ts b/packages/basic/src/index.ts new file mode 100644 index 0000000..ff8b4c5 --- /dev/null +++ b/packages/basic/src/index.ts @@ -0,0 +1 @@ +export default {}; diff --git a/packages/basic/src/index.tsx b/packages/basic/src/index.tsx new file mode 100644 index 0000000..2d1ec23 --- /dev/null +++ b/packages/basic/src/index.tsx @@ -0,0 +1 @@ +export default () => {}; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f2f040e..34f0714 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -104,11 +104,32 @@ importers: version: 3.4.1(@antv/g2plot@2.4.31)(@antv/g6@4.8.24) '@antv/ava-react': specifier: ^3.3.1 - version: 3.3.1(@ant-design/icons@5.3.6)(@antv/g2plot@2.4.31)(@antv/g6@4.8.24)(@babel/core@7.24.4)(antd@5.17.0)(react-dom@18.3.0)(react-is@18.3.0)(react@18.3.0) + version: 3.3.1(@ant-design/icons@5.3.7)(@antv/g2plot@2.4.31)(@antv/g6@4.8.24)(@babel/core@7.24.4)(antd@5.17.3)(react-dom@18.3.0)(react-is@18.3.0)(react@18.3.0) '@antv/g2': specifier: ^5.1.19 version: 5.1.19 + packages/basic: + devDependencies: + '@types/react': + specifier: npm:types-react@rc + version: /types-react@19.0.0-rc.0 + '@types/react-dom': + specifier: npm:types-react-dom@rc + version: /types-react-dom@19.0.0-rc.0 + react: + specifier: rc + version: 19.0.0-rc-f994737d14-20240522 + react-dom: + specifier: rc + version: 19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-f994737d14-20240522) + typescript: + specifier: ^5.4.5 + version: 5.4.5 + use-immer: + specifier: latest + version: 0.9.0(immer@10.1.1)(react@19.0.0-rc-f994737d14-20240522) + packages: /@aashutoshrathi/word-wrap@1.2.6: @@ -249,6 +270,22 @@ packages: react-dom: 18.3.0(react@18.3.0) dev: true + /@ant-design/icons@5.3.7(react-dom@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-bCPXTAg66f5bdccM4TT21SQBDO1Ek2gho9h3nO9DAKXJP4sq+5VBjrQMSxMVXSB3HyEz+cUbHQ5+6ogxCOpaew==} + engines: {node: '>=8'} + peerDependencies: + react: '>=16.0.0' + react-dom: '>=16.0.0' + dependencies: + '@ant-design/colors': 7.0.2 + '@ant-design/icons-svg': 4.4.2 + '@babel/runtime': 7.24.5 + classnames: 2.5.1 + rc-util: 5.41.0(react-dom@18.3.0)(react@18.3.0) + react: 18.3.0 + react-dom: 18.3.0(react@18.3.0) + dev: true + /@ant-design/react-slick@1.1.2(react@18.3.0): resolution: {integrity: sha512-EzlvzE6xQUBrZuuhSAFTdsr4P2bBBHGZwKFemEfq8gIGyIQCxalYfZW/T2ORbtQx5rU69o+WycP3exY/7T1hGA==} peerDependencies: @@ -306,7 +343,7 @@ packages: tslib: 2.6.2 dev: true - /@antv/ava-react@3.3.1(@ant-design/icons@5.3.6)(@antv/g2plot@2.4.31)(@antv/g6@4.8.24)(@babel/core@7.24.4)(antd@5.17.0)(react-dom@18.3.0)(react-is@18.3.0)(react@18.3.0): + /@antv/ava-react@3.3.1(@ant-design/icons@5.3.7)(@antv/g2plot@2.4.31)(@antv/g6@4.8.24)(@babel/core@7.24.4)(antd@5.17.3)(react-dom@18.3.0)(react-is@18.3.0)(react@18.3.0): resolution: {integrity: sha512-vokdEFLuWvAm3TUPAYmw32AF2FUf09PEbaZhuozddx2hNuhioSL2PqAFGOxJGExHteRJfv/mkQNNP97ByXr/vA==} peerDependencies: '@ant-design/icons': '>=4.7.0' @@ -314,10 +351,10 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@ant-design/icons': 5.3.6(react-dom@18.3.0)(react@18.3.0) + '@ant-design/icons': 5.3.7(react-dom@18.3.0)(react@18.3.0) '@antv/ava': 3.4.1(@antv/g2plot@2.4.31)(@antv/g6@4.8.24) '@antv/g2': 5.1.19 - antd: 5.17.0(react-dom@18.3.0)(react@18.3.0) + antd: 5.17.3(react-dom@18.3.0)(react@18.3.0) canvg: 4.0.2 classnames: 2.5.1 katex: 0.16.10 @@ -3989,6 +4026,22 @@ packages: react-dom: 18.3.0(react@18.3.0) dev: true + /@rc-component/tour@1.15.0(react-dom@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-h6hyILDwL+In9GAgRobwRWihLqqsD7Uft3fZGrJ7L4EiyCoxbnNYwzPXDfz7vNDhWeVyvAWQJj9fJCzpI4+b4g==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + dependencies: + '@babel/runtime': 7.24.5 + '@rc-component/portal': 1.1.2(react-dom@18.3.0)(react@18.3.0) + '@rc-component/trigger': 2.1.1(react-dom@18.3.0)(react@18.3.0) + classnames: 2.5.1 + rc-util: 5.41.0(react-dom@18.3.0)(react@18.3.0) + react: 18.3.0 + react-dom: 18.3.0(react@18.3.0) + dev: true + /@rc-component/trigger@1.18.3(react-dom@18.3.0)(react@18.3.0): resolution: {integrity: sha512-Ksr25pXreYe1gX6ayZ1jLrOrl9OAUHUqnuhEx6MeHnNa1zVM5Y2Aj3Q35UrER0ns8D2cJYtmJtVli+i+4eKrvA==} engines: {node: '>=8.x'} @@ -6220,39 +6273,39 @@ packages: - moment dev: true - /antd@5.17.0(react-dom@18.3.0)(react@18.3.0): - resolution: {integrity: sha512-jrzMIcaTJIy12/GJ2PfgchgZGuAlDodlaOKd05/TxEtFilRHnv8oaf0qfqNGG3slvvuy4J/57xn21jM4cLl7Hw==} + /antd@5.17.3(react-dom@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-U99hyy7t8dOQtNHzHifmwAXJLgmPMadavFBsd2mnfICD6m8l7u/NvCefRhd2jOf/SBNE2579YhwCEwTUiX2GnQ==} peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: '@ant-design/colors': 7.0.2 '@ant-design/cssinjs': 1.20.0(react-dom@18.3.0)(react@18.3.0) - '@ant-design/icons': 5.3.6(react-dom@18.3.0)(react@18.3.0) + '@ant-design/icons': 5.3.7(react-dom@18.3.0)(react@18.3.0) '@ant-design/react-slick': 1.1.2(react@18.3.0) '@babel/runtime': 7.24.5 '@ctrl/tinycolor': 3.6.1 '@rc-component/color-picker': 1.5.3(react-dom@18.3.0)(react@18.3.0) '@rc-component/mutate-observer': 1.1.0(react-dom@18.3.0)(react@18.3.0) - '@rc-component/tour': 1.14.2(react-dom@18.3.0)(react@18.3.0) + '@rc-component/tour': 1.15.0(react-dom@18.3.0)(react@18.3.0) '@rc-component/trigger': 2.1.1(react-dom@18.3.0)(react@18.3.0) classnames: 2.5.1 copy-to-clipboard: 3.3.3 dayjs: 1.11.10 qrcode.react: 3.1.0(react@18.3.0) - rc-cascader: 3.25.0(react-dom@18.3.0)(react@18.3.0) - rc-checkbox: 3.2.0(react-dom@18.3.0)(react@18.3.0) + rc-cascader: 3.26.0(react-dom@18.3.0)(react@18.3.0) + rc-checkbox: 3.3.0(react-dom@18.3.0)(react@18.3.0) rc-collapse: 3.7.3(react-dom@18.3.0)(react@18.3.0) rc-dialog: 9.4.0(react-dom@18.3.0)(react@18.3.0) rc-drawer: 7.1.0(react-dom@18.3.0)(react@18.3.0) rc-dropdown: 4.2.0(react-dom@18.3.0)(react@18.3.0) rc-field-form: 2.0.1(react-dom@18.3.0)(react@18.3.0) rc-image: 7.6.0(react-dom@18.3.0)(react@18.3.0) - rc-input: 1.4.5(react-dom@18.3.0)(react@18.3.0) - rc-input-number: 9.0.0(react-dom@18.3.0)(react@18.3.0) - rc-mentions: 2.11.1(react-dom@18.3.0)(react@18.3.0) - rc-menu: 9.13.0(react-dom@18.3.0)(react@18.3.0) - rc-motion: 2.9.0(react-dom@18.3.0)(react@18.3.0) + rc-input: 1.5.1(react-dom@18.3.0)(react@18.3.0) + rc-input-number: 9.1.0(react-dom@18.3.0)(react@18.3.0) + rc-mentions: 2.13.1(react-dom@18.3.0)(react@18.3.0) + rc-menu: 9.14.0(react-dom@18.3.0)(react@18.3.0) + rc-motion: 2.9.1(react-dom@18.3.0)(react@18.3.0) rc-notification: 5.4.0(react-dom@18.3.0)(react@18.3.0) rc-pagination: 4.0.4(react-dom@18.3.0)(react@18.3.0) rc-picker: 4.5.0(dayjs@1.11.10)(react-dom@18.3.0)(react@18.3.0) @@ -6260,18 +6313,18 @@ packages: rc-rate: 2.12.0(react-dom@18.3.0)(react@18.3.0) rc-resize-observer: 1.4.0(react-dom@18.3.0)(react@18.3.0) rc-segmented: 2.3.0(react-dom@18.3.0)(react@18.3.0) - rc-select: 14.13.1(react-dom@18.3.0)(react@18.3.0) + rc-select: 14.14.0(react-dom@18.3.0)(react@18.3.0) rc-slider: 10.6.2(react-dom@18.3.0)(react@18.3.0) rc-steps: 6.0.1(react-dom@18.3.0)(react@18.3.0) rc-switch: 4.1.0(react-dom@18.3.0)(react@18.3.0) - rc-table: 7.45.5(react-dom@18.3.0)(react@18.3.0) - rc-tabs: 15.0.0(react-dom@18.3.0)(react@18.3.0) - rc-textarea: 1.6.3(react-dom@18.3.0)(react@18.3.0) + rc-table: 7.45.6(react-dom@18.3.0)(react@18.3.0) + rc-tabs: 15.1.0(react-dom@18.3.0)(react@18.3.0) + rc-textarea: 1.7.0(react-dom@18.3.0)(react@18.3.0) rc-tooltip: 6.2.0(react-dom@18.3.0)(react@18.3.0) - rc-tree: 5.8.5(react-dom@18.3.0)(react@18.3.0) - rc-tree-select: 5.20.0(react-dom@18.3.0)(react@18.3.0) + rc-tree: 5.8.7(react-dom@18.3.0)(react@18.3.0) + rc-tree-select: 5.21.0(react-dom@18.3.0)(react@18.3.0) rc-upload: 4.5.2(react-dom@18.3.0)(react@18.3.0) - rc-util: 5.39.1(react-dom@18.3.0)(react@18.3.0) + rc-util: 5.41.0(react-dom@18.3.0)(react@18.3.0) react: 18.3.0 react-dom: 18.3.0(react@18.3.0) scroll-into-view-if-needed: 3.1.0 @@ -11011,6 +11064,10 @@ packages: queue: 6.0.1 dev: true + /immer@10.1.1: + resolution: {integrity: sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw==} + dev: true + /immutable@4.3.5: resolution: {integrity: sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==} dev: true @@ -15506,8 +15563,8 @@ packages: react-dom: 18.3.0(react@18.3.0) dev: true - /rc-cascader@3.25.0(react-dom@18.3.0)(react@18.3.0): - resolution: {integrity: sha512-mBY6/CykOvzAYnIye0rpt5JkMAXJaX8zZawOwSndbKuFakYE+leqBQWIZoN9HIgAptPpTi2Aty3RvbaBmk8SKQ==} + /rc-cascader@3.26.0(react-dom@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-L1dml383TPSJD1I11YwxuVbmqaJY64psZqFp1ETlgl3LEOwDu76Cyl11fw5dmjJhMlUWwM5dECQfqJgfebhUjg==} peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' @@ -15515,9 +15572,9 @@ packages: '@babel/runtime': 7.24.5 array-tree-filter: 2.1.0 classnames: 2.5.1 - rc-select: 14.13.1(react-dom@18.3.0)(react@18.3.0) - rc-tree: 5.8.5(react-dom@18.3.0)(react@18.3.0) - rc-util: 5.39.1(react-dom@18.3.0)(react@18.3.0) + rc-select: 14.14.0(react-dom@18.3.0)(react@18.3.0) + rc-tree: 5.8.7(react-dom@18.3.0)(react@18.3.0) + rc-util: 5.41.0(react-dom@18.3.0)(react@18.3.0) react: 18.3.0 react-dom: 18.3.0(react@18.3.0) dev: true @@ -15535,6 +15592,19 @@ packages: react-dom: 18.3.0(react@18.3.0) dev: true + /rc-checkbox@3.3.0(react-dom@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-Ih3ZaAcoAiFKJjifzwsGiT/f/quIkxJoklW4yKGho14Olulwn8gN7hOBve0/WGDg5o/l/5mL0w7ff7/YGvefVw==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + dependencies: + '@babel/runtime': 7.24.5 + classnames: 2.5.1 + rc-util: 5.41.0(react-dom@18.3.0)(react@18.3.0) + react: 18.3.0 + react-dom: 18.3.0(react@18.3.0) + dev: true + /rc-collapse@3.7.3(react-dom@18.3.0)(react@18.3.0): resolution: {integrity: sha512-60FJcdTRn0X5sELF18TANwtVi7FtModq649H11mYF1jh83DniMoM4MqY627sEKRCTm4+WXfGDcB7hY5oW6xhyw==} peerDependencies: @@ -15630,7 +15700,7 @@ packages: dependencies: '@babel/runtime': 7.24.5 '@rc-component/async-validator': 5.0.3 - rc-util: 5.39.1(react-dom@18.3.0)(react@18.3.0) + rc-util: 5.41.0(react-dom@18.3.0)(react@18.3.0) react: 18.3.0 react-dom: 18.3.0(react@18.3.0) dev: true @@ -15666,6 +15736,21 @@ packages: react-dom: 18.3.0(react@18.3.0) dev: true + /rc-input-number@9.1.0(react-dom@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-NqJ6i25Xn/AgYfVxynlevIhX3FuKlMwIFpucGG1h98SlK32wQwDK0zhN9VY32McOmuaqzftduNYWWooWz8pXQA==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + dependencies: + '@babel/runtime': 7.24.5 + '@rc-component/mini-decimal': 1.1.0 + classnames: 2.5.1 + rc-input: 1.5.1(react-dom@18.3.0)(react@18.3.0) + rc-util: 5.41.0(react-dom@18.3.0)(react@18.3.0) + react: 18.3.0 + react-dom: 18.3.0(react@18.3.0) + dev: true + /rc-input@1.4.5(react-dom@18.3.0)(react@18.3.0): resolution: {integrity: sha512-AjzykhwnwYTRSwwgCu70CGKBIAv6bP2nqnFptnNTprph/TF1BAs0Qxl91mie/BR6n827WIJB6ZjaRf9iiMwAfw==} peerDependencies: @@ -15679,6 +15764,19 @@ packages: react-dom: 18.3.0(react@18.3.0) dev: true + /rc-input@1.5.1(react-dom@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-+nOzQJDeIfIpNP/SgY45LXSKbuMlp4Yap2y8c+ZpU7XbLmNzUd6+d5/S75sA/52jsVE6S/AkhkkDEAOjIu7i6g==} + peerDependencies: + react: '>=16.0.0' + react-dom: '>=16.0.0' + dependencies: + '@babel/runtime': 7.24.5 + classnames: 2.5.1 + rc-util: 5.41.0(react-dom@18.3.0)(react@18.3.0) + react: 18.3.0 + react-dom: 18.3.0(react@18.3.0) + dev: true + /rc-mentions@2.11.1(react-dom@18.3.0)(react@18.3.0): resolution: {integrity: sha512-upb4AK1SRFql7qGnbLEvJqLMugVVIyjmwBJW9L0eLoN9po4JmJZaBzmKA4089fNtsU8k6l/tdZiVafyooeKnLw==} peerDependencies: @@ -15696,6 +15794,23 @@ packages: react-dom: 18.3.0(react@18.3.0) dev: true + /rc-mentions@2.13.1(react-dom@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-DSyUDq/PPCleUX1eghIn371lTSRQsIuCs1N7xR9nZcHP9R1NkE7JjpWUP8Gy4EGVPu0JN0qIcokxYJaoGPnofg==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + dependencies: + '@babel/runtime': 7.24.5 + '@rc-component/trigger': 2.1.1(react-dom@18.3.0)(react@18.3.0) + classnames: 2.5.1 + rc-input: 1.5.1(react-dom@18.3.0)(react@18.3.0) + rc-menu: 9.14.0(react-dom@18.3.0)(react@18.3.0) + rc-textarea: 1.7.0(react-dom@18.3.0)(react@18.3.0) + rc-util: 5.41.0(react-dom@18.3.0)(react@18.3.0) + react: 18.3.0 + react-dom: 18.3.0(react@18.3.0) + dev: true + /rc-menu@9.12.4(react-dom@18.3.0)(react@18.3.0): resolution: {integrity: sha512-t2NcvPLV1mFJzw4F21ojOoRVofK2rWhpKPx69q2raUsiHPDP6DDevsBILEYdsIegqBeSXoWs2bf6CueBKg3BFg==} peerDependencies: @@ -15728,6 +15843,22 @@ packages: react-dom: 18.3.0(react@18.3.0) dev: true + /rc-menu@9.14.0(react-dom@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-La3LBCDMLMs9Q/8mTGbnscb+ZeJ26ebkLz9xJFHd2SD8vfsCKl1Z/k3mwbxyKL01lB40fel1s9Nn9LAv/nmVJQ==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + dependencies: + '@babel/runtime': 7.24.5 + '@rc-component/trigger': 2.1.1(react-dom@18.3.0)(react@18.3.0) + classnames: 2.5.1 + rc-motion: 2.9.1(react-dom@18.3.0)(react@18.3.0) + rc-overflow: 1.3.2(react-dom@18.3.0)(react@18.3.0) + rc-util: 5.41.0(react-dom@18.3.0)(react@18.3.0) + react: 18.3.0 + react-dom: 18.3.0(react@18.3.0) + dev: true + /rc-motion@2.9.0(react-dom@18.3.0)(react@18.3.0): resolution: {integrity: sha512-XIU2+xLkdIr1/h6ohPZXyPBMvOmuyFZQ/T0xnawz+Rh+gh4FINcnZmMT5UTIj6hgI0VLDjTaPeRd+smJeSPqiQ==} peerDependencies: @@ -15741,6 +15872,19 @@ packages: react-dom: 18.3.0(react@18.3.0) dev: true + /rc-motion@2.9.1(react-dom@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-QD4bUqByjVQs7PhUT1d4bNxvtTcK9ETwtg7psbDfo6TmYalH/1hhjj4r2hbhW7g5OOEqYHhfwfj4noIvuOVRtQ==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + dependencies: + '@babel/runtime': 7.24.5 + classnames: 2.5.1 + rc-util: 5.41.0(react-dom@18.3.0)(react@18.3.0) + react: 18.3.0 + react-dom: 18.3.0(react@18.3.0) + dev: true + /rc-notification@5.4.0(react-dom@18.3.0)(react@18.3.0): resolution: {integrity: sha512-li19y9RoYJciF3WRFvD+DvWS70jdL8Fr+Gfb/OshK+iY6iTkwzoigmSIp76/kWh5tF5i/i9im12X3nsF85GYdA==} engines: {node: '>=8.x'} @@ -15840,7 +15984,7 @@ packages: dayjs: 1.11.10 rc-overflow: 1.3.2(react-dom@18.3.0)(react@18.3.0) rc-resize-observer: 1.4.0(react-dom@18.3.0)(react@18.3.0) - rc-util: 5.39.1(react-dom@18.3.0)(react@18.3.0) + rc-util: 5.41.0(react-dom@18.3.0)(react@18.3.0) react: 18.3.0 react-dom: 18.3.0(react@18.3.0) dev: true @@ -15918,6 +16062,24 @@ packages: react-dom: 18.3.0(react@18.3.0) dev: true + /rc-select@14.14.0(react-dom@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-Uo2wulrjoPPRLCPd7zlK4ZFVJxlTN//yp1xWP/U+TUOQCyXrT+Duvq/Si5OzVcmQyWAUSbsplc2OwNNhvbOeKQ==} + engines: {node: '>=8.x'} + peerDependencies: + react: '*' + react-dom: '*' + dependencies: + '@babel/runtime': 7.24.5 + '@rc-component/trigger': 2.1.1(react-dom@18.3.0)(react@18.3.0) + classnames: 2.5.1 + rc-motion: 2.9.1(react-dom@18.3.0)(react@18.3.0) + rc-overflow: 1.3.2(react-dom@18.3.0)(react@18.3.0) + rc-util: 5.41.0(react-dom@18.3.0)(react@18.3.0) + rc-virtual-list: 3.11.5(react-dom@18.3.0)(react@18.3.0) + react: 18.3.0 + react-dom: 18.3.0(react@18.3.0) + dev: true + /rc-slider@10.6.2(react-dom@18.3.0)(react@18.3.0): resolution: {integrity: sha512-FjkoFjyvUQWcBo1F3RgSglky3ar0+qHLM41PlFVYB4Bj3RD8E/Mv7kqMouLFBU+3aFglMzzctAIWRwajEuueSw==} engines: {node: '>=8.x'} @@ -15976,8 +16138,8 @@ packages: react-dom: 18.3.0(react@18.3.0) dev: true - /rc-table@7.45.5(react-dom@18.3.0)(react@18.3.0): - resolution: {integrity: sha512-R5sOfToOk7CalSkebZpqM8lkKWOJR7uXPGEhjjTSoj5egyHBwMxaACoPj2oI+6qLSll9yZrG5K+8HTN57b2Ahg==} + /rc-table@7.45.6(react-dom@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-FYsTya3RQzLYct+o3fqHIZQIwrmsvrvhTg/I6hzlJZ1XoVAGoTmgkN1mMilVlYgksZTey9BCNYh94c6yhdjTXQ==} engines: {node: '>=8.x'} peerDependencies: react: '>=16.9.0' @@ -15987,7 +16149,7 @@ packages: '@rc-component/context': 1.4.0(react-dom@18.3.0)(react@18.3.0) classnames: 2.5.1 rc-resize-observer: 1.4.0(react-dom@18.3.0)(react@18.3.0) - rc-util: 5.39.1(react-dom@18.3.0)(react@18.3.0) + rc-util: 5.41.0(react-dom@18.3.0)(react@18.3.0) rc-virtual-list: 3.11.5(react-dom@18.3.0)(react@18.3.0) react: 18.3.0 react-dom: 18.3.0(react@18.3.0) @@ -16029,8 +16191,8 @@ packages: react-dom: 18.3.0(react@18.3.0) dev: true - /rc-tabs@15.0.0(react-dom@18.3.0)(react@18.3.0): - resolution: {integrity: sha512-7m541VcEiJSpHZmosMZNMIhemxtIN+f0WDhZNyXQ1/cZ40aaWsknlbj0FH6HryLoKEQvBnCI89hgQuT7MBSOBA==} + /rc-tabs@15.1.0(react-dom@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-xTNz4Km1025emtkv1q7xKhjPwAtXr/wycuXVTAcFJg+DKhnPDDbnwbA9KRW0SawAVOGvVEj8ZrBlU0u0FGLrbg==} engines: {node: '>=8.x'} peerDependencies: react: '>=16.9.0' @@ -16039,10 +16201,10 @@ packages: '@babel/runtime': 7.24.5 classnames: 2.5.1 rc-dropdown: 4.2.0(react-dom@18.3.0)(react@18.3.0) - rc-menu: 9.13.0(react-dom@18.3.0)(react@18.3.0) - rc-motion: 2.9.0(react-dom@18.3.0)(react@18.3.0) + rc-menu: 9.14.0(react-dom@18.3.0)(react@18.3.0) + rc-motion: 2.9.1(react-dom@18.3.0)(react@18.3.0) rc-resize-observer: 1.4.0(react-dom@18.3.0)(react@18.3.0) - rc-util: 5.39.1(react-dom@18.3.0)(react@18.3.0) + rc-util: 5.41.0(react-dom@18.3.0)(react@18.3.0) react: 18.3.0 react-dom: 18.3.0(react@18.3.0) dev: true @@ -16062,6 +16224,21 @@ packages: react-dom: 18.3.0(react@18.3.0) dev: true + /rc-textarea@1.7.0(react-dom@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-UxizYJkWkmxP3zofXgc487QiGyDmhhheDLLjIWbFtDmiru1ls30KpO8odDaPyqNUIy9ugj5djxTEuezIn6t3Jg==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + dependencies: + '@babel/runtime': 7.24.5 + classnames: 2.5.1 + rc-input: 1.5.1(react-dom@18.3.0)(react@18.3.0) + rc-resize-observer: 1.4.0(react-dom@18.3.0)(react@18.3.0) + rc-util: 5.41.0(react-dom@18.3.0)(react@18.3.0) + react: 18.3.0 + react-dom: 18.3.0(react@18.3.0) + dev: true + /rc-tooltip@6.2.0(react-dom@18.3.0)(react@18.3.0): resolution: {integrity: sha512-iS/3iOAvtDh9GIx1ulY7EFUXUtktFccNLsARo3NPgLf0QW9oT0w3dA9cYWlhqAKmD+uriEwdWz1kH0Qs4zk2Aw==} peerDependencies: @@ -16090,17 +16267,17 @@ packages: react-dom: 18.3.0(react@18.3.0) dev: true - /rc-tree-select@5.20.0(react-dom@18.3.0)(react@18.3.0): - resolution: {integrity: sha512-zFtkHx5/6PnXSi3oSbBSFbIPiJJQdpSU3qz/joLe75URgvxmTHi989O8MtMgpwyZwrCMOJpGi6L1uy+13uzZPw==} + /rc-tree-select@5.21.0(react-dom@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-w+9qEu6zh0G3wt9N/hzWNSnqYH1i9mH1Nqxo0caxLRRFXF5yZWYmpCDoDTMdQM1Y4z3Q5yj08qyrPH/d4AtumA==} peerDependencies: react: '*' react-dom: '*' dependencies: '@babel/runtime': 7.24.5 classnames: 2.5.1 - rc-select: 14.13.1(react-dom@18.3.0)(react@18.3.0) - rc-tree: 5.8.5(react-dom@18.3.0)(react@18.3.0) - rc-util: 5.39.1(react-dom@18.3.0)(react@18.3.0) + rc-select: 14.14.0(react-dom@18.3.0)(react@18.3.0) + rc-tree: 5.8.7(react-dom@18.3.0)(react@18.3.0) + rc-util: 5.41.0(react-dom@18.3.0)(react@18.3.0) react: 18.3.0 react-dom: 18.3.0(react@18.3.0) dev: true @@ -16121,6 +16298,22 @@ packages: react-dom: 18.3.0(react@18.3.0) dev: true + /rc-tree@5.8.7(react-dom@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-cpsIQZ4nNYwpj6cqPRt52e/69URuNdgQF9wZ10InmEf8W3+i0A41OVmZWwHuX9gegQSqj+DPmaDkZFKQZ+ZV1w==} + engines: {node: '>=10.x'} + peerDependencies: + react: '*' + react-dom: '*' + dependencies: + '@babel/runtime': 7.24.5 + classnames: 2.5.1 + rc-motion: 2.9.1(react-dom@18.3.0)(react@18.3.0) + rc-util: 5.41.0(react-dom@18.3.0)(react@18.3.0) + rc-virtual-list: 3.11.5(react-dom@18.3.0)(react@18.3.0) + react: 18.3.0 + react-dom: 18.3.0(react@18.3.0) + dev: true + /rc-upload@4.5.2(react-dom@18.3.0)(react@18.3.0): resolution: {integrity: sha512-QO3ne77DwnAPKFn0bA5qJM81QBjQi0e0NHdkvpFyY73Bea2NfITiotqJqVjHgeYPOJu5lLVR32TNGP084aSoXA==} peerDependencies: @@ -16146,6 +16339,18 @@ packages: react-is: 18.3.0 dev: true + /rc-util@5.41.0(react-dom@18.3.0)(react@18.3.0): + resolution: {integrity: sha512-xtlCim9RpmVv0Ar2Nnc3WfJCxjQkTf3xHPWoFdjp1fSs2NirQwqiQrfqdU9HUe0kdfb168M/T8Dq0IaX50xeKg==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + dependencies: + '@babel/runtime': 7.24.5 + react: 18.3.0 + react-dom: 18.3.0(react@18.3.0) + react-is: 18.3.0 + dev: true + /rc-virtual-list@3.11.5(react-dom@18.3.0)(react@18.3.0): resolution: {integrity: sha512-iZRW99m5jAxtwKNPLwUrPryurcnKpXBdTyhuBp6ythf7kg/otKO5cCiIvL55GQwU0QGSlouQS0tnkciRMJUwRQ==} engines: {node: '>=8.x'} @@ -16226,6 +16431,15 @@ packages: scheduler: 0.23.1 dev: true + /react-dom@19.0.0-rc-f994737d14-20240522(react@19.0.0-rc-f994737d14-20240522): + resolution: {integrity: sha512-J4CsfTSptPKkhaPbaR6n/KohQiHZTrRZ8GL4H8rbAqN/Qpy69g2MIoLBr5/PUX21ye6JxC1ZRWJFna7Xdg1pdA==} + peerDependencies: + react: 19.0.0-rc-f994737d14-20240522 + dependencies: + react: 19.0.0-rc-f994737d14-20240522 + scheduler: 0.25.0-rc-f994737d14-20240522 + dev: true + /react-draggable@4.4.6(react-dom@16.8.0)(react@16.8.0): resolution: {integrity: sha512-LtY5Xw1zTPqHkVmtM3X8MUOxNDOUhv/khTgBgrUvwaS064bwVvxT+q5El0uUFNx5IEPKXuRejr7UqLwBIg5pdw==} peerDependencies: @@ -16580,6 +16794,11 @@ packages: loose-envify: 1.4.0 dev: true + /react@19.0.0-rc-f994737d14-20240522: + resolution: {integrity: sha512-SeU2v5Xy6FotVhKz0pMS2gvYP7HlkF0qgTskj3JzA1vlxcb3dQjxlm9t0ZlJqcgoyI3VFAw7bomuDMdgy1nBuw==} + engines: {node: '>=0.10.0'} + dev: true + /read-package-json-fast@3.0.2: resolution: {integrity: sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -18077,6 +18296,10 @@ packages: loose-envify: 1.4.0 dev: true + /scheduler@0.25.0-rc-f994737d14-20240522: + resolution: {integrity: sha512-qS+xGFF7AljP2APO2iJe8zESNsK20k25MACz+WGOXPybUsRdi1ssvaoF93im2nSX2q/XT3wKkjdz6RQfbmaxdw==} + dev: true + /schema-utils@3.3.0: resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} engines: {node: '>= 10.13.0'} @@ -19694,6 +19917,18 @@ packages: ts-toolbelt: 9.6.0 dev: true + /types-react-dom@19.0.0-rc.0: + resolution: {integrity: sha512-wGlQSD6H6EeCxhH+dSip1cPcCU7nNTOwHEr29rjiNtGkUPlmEofOizoQaPMEqQH2V76ME3NLvBDLGajRu3xZOw==} + dependencies: + '@types/react': 18.3.0 + dev: true + + /types-react@19.0.0-rc.0: + resolution: {integrity: sha512-JFd3qtgXZ+EdHht8WXMPSF231brd6Bu4yLKqyo0JjpzhmjYxJptT6TBh/xFqOhx+ee2Nagj7Ttkh5F/jc49TVQ==} + dependencies: + csstype: 3.1.3 + dev: true + /typescript-transform-paths@3.4.6(typescript@5.3.3): resolution: {integrity: sha512-qdgpCk9oRHkIBhznxaHAapCFapJt5e4FbFik7Y4qdqtp6VyC3smAIPoDEIkjZ2eiF7x5+QxUPYNwJAtw0thsTw==} peerDependencies: @@ -20181,6 +20416,16 @@ packages: react: 16.8.0 dev: true + /use-immer@0.9.0(immer@10.1.1)(react@19.0.0-rc-f994737d14-20240522): + resolution: {integrity: sha512-/L+enLi0nvuZ6j4WlyK0US9/ECUtV5v9RUbtxnn5+WbtaXYUaOBoKHDNL9I5AETdurQ4rIFIj/s+Z5X80ATyKw==} + peerDependencies: + immer: '>=2.0.0' + react: ^16.8.0 || ^17.0.1 || ^18.0.0 + dependencies: + immer: 10.1.1 + react: 19.0.0-rc-f994737d14-20240522 + dev: true + /use-isomorphic-layout-effect@1.1.2(@types/react@18.3.0)(react@18.1.0): resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==} peerDependencies: