diff --git a/.eslintrc.js b/.eslintrc.js index fe75bf1c08..0940038f38 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -12,7 +12,6 @@ module.exports = { '@typescript-eslint/ban-ts-ignore': 'off', '@typescript-eslint/no-object-literal-type-assertion': 'off', '@typescript-eslint/no-parameter-properties': 'off', - 'consistent-return': 'off', 'import/no-useless-path-segments': 'off', 'no-unused-expressions': 'off', 'react-hooks/rules-of-hooks': 'error', diff --git a/.github/workflows/node-ci.yml b/.github/workflows/node-ci.yml index 4251b97960..4e2d7adeb7 100644 --- a/.github/workflows/node-ci.yml +++ b/.github/workflows/node-ci.yml @@ -15,15 +15,13 @@ jobs: - name: Install pnpm uses: pnpm/action-setup@v2.2.4 - with: - version: 7 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} - - name: pnpm run intall, build + - name: pnpm run install, build run: | pnpm run init env: diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 233897b3c3..18eeb7bbe4 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -16,13 +16,11 @@ jobs: - name: Install pnpm uses: pnpm/action-setup@v2.2.4 - with: - version: 7 - name: Get pnpm store directory id: pnpm-cache run: | - echo "::set-output name=pnpm_cache_dir::$(pnpm store path)" + echo "pnpm_cache_dir=$(pnpm store path)" >> "$GITHUB_OUTPUT" - name: Setup pnpm cache uses: actions/cache@v3 @@ -37,7 +35,7 @@ jobs: with: node-version: ${{ matrix.node-version }} - - name: pnpm run intall, build + - name: pnpm run install, build run: | pnpm run init diff --git a/.husky/pre-commit b/.husky/pre-commit index 47646a694b..7e83bacc99 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,4 +1,4 @@ #!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh" -npm run pretty +npm run pretty \ No newline at end of file diff --git a/LICENSE b/LICENSE index 35d401d35a..aebeda7fec 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2020 ahooks +Copyright (c) 2019-present ahooks Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index b8921490c3..220ae1d84c 100644 --- a/README.md +++ b/README.md @@ -44,6 +44,8 @@ $ npm install --save ahooks $ yarn add ahooks # or $ pnpm add ahooks +# or +$ bun add ahooks ``` ## 🔨 Usage @@ -77,7 +79,7 @@ Thanks to all the contributors: ## 👥 Discuss - + [1]: https://www.npmjs.com/package/ahooks [2]: https://npmjs.org/package/ahooks diff --git a/README.zh-CN.md b/README.zh-CN.md index 35baf4c71e..9c2363c4ed 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -44,6 +44,8 @@ $ npm install --save ahooks $ yarn add ahooks # or $ pnpm add ahooks +# or +$ bun add ahooks ``` ## 🔨 使用 @@ -77,7 +79,7 @@ $ pnpm start ## 👥 交流讨论 - + [1]: https://www.npmjs.com/package/ahooks [2]: https://npmjs.org/package/ahooks diff --git a/config/config.ts b/config/config.ts index b2cf6c1405..10f59bbdc1 100644 --- a/config/config.ts +++ b/config/config.ts @@ -9,6 +9,8 @@ export default { type: 'none', exclude: [], }, + // https://github.com/alibaba/hooks/issues/2155 + extraBabelIncludes: ['filter-obj'], extraBabelPlugins: [ [ 'babel-plugin-import', @@ -180,20 +182,27 @@ export default { scripts: [ 'https://s4.cnzz.com/z_stat.php?id=1278992092&web_id=1278992092', ` - const insertVersion = function(){ + const insertVersion = function() { + const logo = document.querySelector('.__dumi-default-navbar-logo'); + if (!logo) return; const dom = document.createElement('span'); dom.id = 'logo-version'; dom.innerHTML = '${packages.version}'; - const logo = document.querySelector('.__dumi-default-navbar-logo'); - if(logo){ - logo.parentNode.insertBefore(dom, logo.nextSibling); - }else{ - setTimeout(()=>{ - insertVersion(); - }, 1000) + logo.parentNode.insertBefore(dom, logo.nextSibling); + }; + const observer = new MutationObserver((mutationsList, observer) => { + for (const mutation of mutationsList) { + if (mutation.type === 'childList') { + const logoVersion = document.querySelector('#logo-version'); + if (logoVersion) { + observer.disconnect(); + } else { + insertVersion(); + } + } } - } - insertVersion(); + }); + observer.observe(document.body, { childList: true, subtree: true }); `, ], }; diff --git a/docs/guide/index.en-US.md b/docs/guide/index.en-US.md index 41f2a45e60..77b03a4dff 100644 --- a/docs/guide/index.en-US.md +++ b/docs/guide/index.en-US.md @@ -19,6 +19,8 @@ $ npm install --save ahooks $ yarn add ahooks # or $ pnpm add ahooks +# or +$ bun add ahooks ``` ## Usage diff --git a/docs/guide/index.zh-CN.md b/docs/guide/index.zh-CN.md index 27ff40b100..520f2f1a55 100644 --- a/docs/guide/index.zh-CN.md +++ b/docs/guide/index.zh-CN.md @@ -19,6 +19,8 @@ $ npm install --save ahooks $ yarn add ahooks # or $ pnpm add ahooks +# or +$ bun add ahooks ``` ## 使用 diff --git a/docs/guide/upgrade.en-US.md b/docs/guide/upgrade.en-US.md index 991704f02b..1cb2f30922 100644 --- a/docs/guide/upgrade.en-US.md +++ b/docs/guide/upgrade.en-US.md @@ -36,7 +36,7 @@ useRequest has been rewritten: - Removed `pagination` related options, it is recommended to use `usePagination` or `useAntdTable` to achieve paging ability. - Removed `loadMore` related options, it is recommended to use `useInfiniteScroll` to achieve unlimited loading ability. - Removed `fetchKey`, that is, deleted concurrent request. -- Removed `formatResult`, `initialData`, and `thrownError`. +- Removed `formatResult`, `initialData`, and `throwOnError`. - The request library is no longer integrated by default, and `service` no longer supports string or object. - Added `runAsync` and `refreshAsync`, the original `run` no longer returns Promise. - Added error retry ability. diff --git a/docs/guide/upgrade.zh-CN.md b/docs/guide/upgrade.zh-CN.md index ab37a65a0f..56234df363 100644 --- a/docs/guide/upgrade.zh-CN.md +++ b/docs/guide/upgrade.zh-CN.md @@ -36,7 +36,7 @@ useRequest 完全进行了重写: - 删除了 `pagination` 相关属性,建议使用 `usePagination` 或 `useAntdTable` 来实现分页能力。 - 删除了 `loadMore` 相关属性,建议使用 `useInfiniteScroll` 来实现无限加载能力。 - 删除了 `fetchKey`,也就是删除了并行能力。 -- 删除了 `formatResult`、`initialData`、`thrownError`。 +- 删除了 `formatResult`、`initialData`、`throwOnError`。 - 不再默认集成请求库,`service` 不再支持字符或对象。 - 新增了 `runAsync` 和 `refreshAsync`,原来的 `run` 不再返回 Promise。 - 新增了错误重试能力。 diff --git a/docs/index.en-US.md b/docs/index.en-US.md index a68cc49944..3141b26eb5 100644 --- a/docs/index.en-US.md +++ b/docs/index.en-US.md @@ -38,6 +38,8 @@ $ npm install --save ahooks $ yarn add ahooks # or $ pnpm add ahooks +# or +$ bun add ahooks ``` ## 🔨 Usage @@ -71,7 +73,7 @@ Thanks to all the contributors: ## 👥 Discuss - + [1]: https://www.npmjs.com/package/ahooks [2]: https://npmjs.org/package/ahooks diff --git a/docs/index.zh-CN.md b/docs/index.zh-CN.md index 8b7cfd4b73..e55fd7ec3f 100644 --- a/docs/index.zh-CN.md +++ b/docs/index.zh-CN.md @@ -36,6 +36,10 @@ footer: Open-source MIT Licensed | Copyright © 2019-present
Powered by [du $ npm install --save ahooks # or $ yarn add ahooks +# or +$ pnpm add ahooks +# or +$ bun add ahooks ``` ## 🔨 使用 @@ -69,7 +73,7 @@ $ pnpm start ## 👥 交流讨论 - + [1]: https://www.npmjs.com/package/ahooks [2]: https://npmjs.org/package/ahooks diff --git a/example/basic/package.json b/example/basic/package.json index d92e917f2d..8f46f6d3f3 100644 --- a/example/basic/package.json +++ b/example/basic/package.json @@ -29,7 +29,7 @@ "@types/react-dom": "^17.0.0", "@umijs/test": "^3.4.20", "lint-staged": "^10.0.7", - "prettier": "^2.2.0", + "prettier": "^3.2.2", "react": "17.x", "react-dom": "17.x", "typescript": "^5.1.3", diff --git a/jest.config.js b/jest.config.js index ba78636bd6..23c1d38339 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,3 +1,12 @@ +/** esm modules to transform */ +const esmModules = [ + // `query-string` and its related dependencies + 'query-string', + 'decode-uri-component', + 'split-on-first', + 'filter-obj', +]; + module.exports = { preset: 'ts-jest/presets/js-with-ts', testEnvironment: 'jsdom', @@ -18,8 +27,5 @@ module.exports = { '!**/lib/**', '!**/dist/**', ], - transformIgnorePatterns: ['^.+\\.js$'], - moduleNameMapper: { - 'lodash-es': 'lodash', - }, + transformIgnorePatterns: [`node_modules/(?!(?:.pnpm/)?(${esmModules.join('|')}))`], }; diff --git a/package.json b/package.json index aaa09798ea..63f6a08ceb 100755 --- a/package.json +++ b/package.json @@ -1,6 +1,10 @@ { "name": "ahooks", "private": true, + "packageManager": "pnpm@7.33.6", + "engines": { + "pnpm": ">=7 <8" + }, "repository": { "type": "git", "url": "git+https://github.com/alibaba/hooks.git" @@ -18,7 +22,7 @@ "pretty": "pretty-quick --staged", "build:doc": "dumi build", "pub:doc-surge": "surge ./dist --domain ahooks.js.org", - "pub:doc-gitee": "cd ./dist && rm -rf .git && touch .spa && touch .nojekyll && git init && git remote add origin git@gitee.com:ahooks/ahooks.git && git add -A && git commit -m \"publish docs\" && git push origin master -f && echo https://gitee.com/ahooks/ahooks/pages", + "pub:doc-gitee": "cd ./dist && rm -rf .git && touch .spa && touch .nojekyll && git init && git remote add origin git@gitee.com:ahooks/ahooks.git && git add -A && git commit -m \"publish docs\" && git push origin main -f && echo https://gitee.com/ahooks/ahooks/pages", "pub:doc": "pnpm run build:doc && pnpm run pub:doc-surge && pnpm run pub:doc-gitee", "pub": "pnpm run build && pnpm -r --filter=./packages/* publish", "pub:beta": "pnpm run build && pnpm -r --filter=./packages/* publish --tag beta", @@ -27,7 +31,7 @@ "test:strict": "cross-env REACT_MODE=strict jest" }, "devDependencies": { - "@ant-design/icons": "^5.0.1", + "@ant-design/icons": "^5.3.0", "@babel/cli": "^7.10.1", "@babel/core": "^7.10.2", "@babel/plugin-transform-runtime": "^7.19.6", @@ -36,24 +40,17 @@ "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^13.4.0", "@types/jest": "^29.4.0", - "@types/lodash.debounce": "^4.0.6", - "@types/lodash.isequal": "^4.5.5", - "@types/lodash.throttle": "^4.1.6", "@types/mockjs": "^1.0.7", "@types/react-router": "^5.1.19", "@umijs/fabric": "^2.1.0", - "@umijs/plugin-sass": "^1.1.1", - "antd": "^5.2.1", - "babel-loader": "^8.1.0", + "antd": "^5.14.2", "babel-plugin-import": "^1.12.0", - "babel-plugin-transform-async-to-promises": "^0.8.15", "coveralls": "^3.1.1", "cross-env": "^7.0.3", "del": "^5.1.0", "dumi": "^1.1.48", - "enzyme": "^3.10.0", - "eslint": "^7.2.0", - "eslint-plugin-react-hooks": "^4.0.8", + "eslint": "^8.56.0", + "eslint-plugin-react-hooks": "^4.6.0", "fast-glob": "^3.2.11", "fs-extra": "^10.0.1", "gray-matter": "^4.0.3", @@ -63,11 +60,10 @@ "husky": "^8.0.0", "jest": "^29.4.1", "jest-environment-jsdom": "^29.4.1", - "jest-fetch-mock": "^3.0.3", "jest-localstorage-mock": "^2.4.18", "mockjs": "^1.1.0", - "prettier": "^2.0.5", - "pretty-quick": "^3.1.3", + "prettier": "^3.2.5", + "pretty-quick": "^4.0.0", "react": "^18.2.0", "react-dom": "^18.2.0", "react-drag-listview": "^0.1.6", @@ -75,11 +71,10 @@ "react-shadow": "^19.0.3", "rimraf": "^3.0.2", "surge": "^0.21.3", - "ts-jest": "^29.0.5", + "ts-jest": "^29.1.1", "typescript": "^5.1.3", - "umi-request": "^1.2.18", - "webpack": "^4.43.0", - "webpack-cli": "^3.3.10", + "webpack": "^5.90.3", + "webpack-cli": "^5.1.4", "webpack-merge": "^4.2.2" }, "commitlint": { diff --git a/packages/hooks/package.json b/packages/hooks/package.json index ec824e8379..639f666d50 100644 --- a/packages/hooks/package.json +++ b/packages/hooks/package.json @@ -1,6 +1,6 @@ { "name": "ahooks", - "version": "3.7.8", + "version": "3.8.0", "description": "react hooks library", "keywords": [ "ahooks", @@ -34,12 +34,11 @@ ], "dependencies": { "@babel/runtime": "^7.21.0", - "@types/js-cookie": "^2.x.x", - "ahooks-v3-count": "^1.0.0", "dayjs": "^1.9.1", "intersection-observer": "^0.12.0", "js-cookie": "^2.x.x", - "lodash-es": "^4.17.21", + "lodash": "^4.17.21", + "react-fast-compare": "^3.2.2", "resize-observer-polyfill": "^1.5.1", "screenfull": "^5.0.0", "tslib": "^2.4.1" @@ -50,11 +49,10 @@ "devDependencies": { "@alifd/next": "^1.20.6", "@ant-design/icons": "^5.0.1", - "@types/enzyme": "^3.10.5", + "@types/js-cookie": "^2.x.x", + "@types/lodash": "^4.14.202", "antd": "^5.2.1", - "enzyme-adapter-react-16": "^1.15.4", "jest-websocket-mock": "^2.1.0", - "mock-socket": "^9.0.3", "mockjs": "^1.1.0", "react-drag-listview": "^0.1.6", "react-json-view": "^1.21.3" diff --git a/packages/hooks/src/createDeepCompareEffect/index.ts b/packages/hooks/src/createDeepCompareEffect/index.ts index eefdd6b39b..5bbaff74ed 100644 --- a/packages/hooks/src/createDeepCompareEffect/index.ts +++ b/packages/hooks/src/createDeepCompareEffect/index.ts @@ -10,9 +10,9 @@ export const createDeepCompareEffect: CreateUpdateEffect = (hook) => (effect, de const signalRef = useRef(0); if (deps === undefined || !depsEqual(deps, ref.current)) { - ref.current = deps; signalRef.current += 1; } + ref.current = deps; hook(effect, [signalRef.current]); }; diff --git a/packages/hooks/src/createUseStorageState/__tests__/index.test.ts b/packages/hooks/src/createUseStorageState/__tests__/index.test.ts index 152769b019..c115b3424f 100644 --- a/packages/hooks/src/createUseStorageState/__tests__/index.test.ts +++ b/packages/hooks/src/createUseStorageState/__tests__/index.test.ts @@ -1,5 +1,5 @@ import { act, renderHook } from '@testing-library/react'; -import type { IFuncUpdater } from '../index'; +import type { Options } from '../index'; import { createUseStorageState } from '../index'; class TestStorage implements Storage { @@ -41,9 +41,8 @@ class TestStorage implements Storage { } } -interface StorageStateProps { +interface StorageStateProps extends Pick, 'defaultValue'> { key: string; - defaultValue?: T | IFuncUpdater; } describe('useStorageState', () => { diff --git a/packages/hooks/src/createUseStorageState/index.ts b/packages/hooks/src/createUseStorageState/index.ts index 4253cc936d..70a3e2cd9e 100644 --- a/packages/hooks/src/createUseStorageState/index.ts +++ b/packages/hooks/src/createUseStorageState/index.ts @@ -1,20 +1,18 @@ -/* eslint-disable no-empty */ import { useState } from 'react'; +import useEventListener from '../useEventListener'; import useMemoizedFn from '../useMemoizedFn'; import useUpdateEffect from '../useUpdateEffect'; import { isFunction, isUndef } from '../utils'; -export interface IFuncUpdater { - (previousState?: T): T; -} -export interface IFuncStorage { - (): Storage; -} +export const SYNC_STORAGE_EVENT_NAME = 'AHOOKS_SYNC_STORAGE_EVENT_NAME'; + +export type SetState = S | ((prevState?: S) => S); export interface Options { + defaultValue?: T | (() => T); + listenStorageChange?: boolean; serializer?: (value: T) => string; deserializer?: (value: string) => T; - defaultValue?: T | IFuncUpdater; onError?: (error: unknown) => void; } @@ -22,6 +20,7 @@ export function createUseStorageState(getStorage: () => Storage | undefined) { function useStorageState(key: string, options: Options = {}) { let storage: Storage | undefined; const { + listenStorageChange = false, onError = (e) => { console.error(e); }, @@ -63,28 +62,73 @@ export function createUseStorageState(getStorage: () => Storage | undefined) { return options.defaultValue; } - const [state, setState] = useState(() => getStoredValue()); + const [state, setState] = useState(getStoredValue); useUpdateEffect(() => { setState(getStoredValue()); }, [key]); - const updateState = (value?: T | IFuncUpdater) => { + const updateState = (value?: SetState) => { const currentState = isFunction(value) ? value(state) : value; - setState(currentState); - - if (isUndef(currentState)) { - storage?.removeItem(key); - } else { - try { - storage?.setItem(key, serializer(currentState)); - } catch (e) { - console.error(e); + + if (!listenStorageChange) { + setState(currentState); + } + + try { + let newValue: string | null; + const oldValue = storage?.getItem(key); + + if (isUndef(currentState)) { + newValue = null; + storage?.removeItem(key); + } else { + newValue = serializer(currentState); + storage?.setItem(key, newValue); } + + dispatchEvent( + // send custom event to communicate within same page + // importantly this should not be a StorageEvent since those cannot + // be constructed with a non-built-in storage area + new CustomEvent(SYNC_STORAGE_EVENT_NAME, { + detail: { + key, + newValue, + oldValue, + storageArea: storage, + }, + }), + ); + } catch (e) { + onError(e); } }; + const syncState = (event: StorageEvent) => { + if (event.key !== key || event.storageArea !== storage) { + return; + } + + setState(getStoredValue()); + }; + + const syncStateFromCustomEvent = (event: CustomEvent) => { + syncState(event.detail); + }; + + // from another document + useEventListener('storage', syncState, { + enable: listenStorageChange, + }); + + // from the same document but different hooks + useEventListener(SYNC_STORAGE_EVENT_NAME, syncStateFromCustomEvent, { + enable: listenStorageChange, + }); + return [state, useMemoizedFn(updateState)] as const; } + return useStorageState; } diff --git a/packages/hooks/src/index.ts b/packages/hooks/src/index.ts index 58cefd9c79..f977e5ff86 100644 --- a/packages/hooks/src/index.ts +++ b/packages/hooks/src/index.ts @@ -50,7 +50,7 @@ import useRafTimeout from './useRafTimeout'; import useReactive from './useReactive'; import useRequest, { clearCache } from './useRequest'; import useResetState from './useResetState'; -import { configResponsive, useResponsive } from './useResponsive'; +import useResponsive, { configResponsive } from './useResponsive'; import useSafeState from './useSafeState'; import useScroll from './useScroll'; import useSelections from './useSelections'; diff --git a/packages/hooks/src/useAntdTable/__tests__/index.test.ts b/packages/hooks/src/useAntdTable/__tests__/index.test.ts index e2ba06887e..17e77f45ff 100644 --- a/packages/hooks/src/useAntdTable/__tests__/index.test.ts +++ b/packages/hooks/src/useAntdTable/__tests__/index.test.ts @@ -230,7 +230,7 @@ describe('useAntdTable', () => { }); await waitFor(() => expect(queryArgs.current).toBe(1)); expect(queryArgs.current).toBe(1); - expect(queryArgs.pageSize).toBe(5); + // expect(queryArgs.pageSize).toBe(5); expect(queryArgs.name).toBe('change name'); }); @@ -320,4 +320,31 @@ describe('useAntdTable', () => { expect(queryArgs.pageSize).toBe(20); }); }); + + it('search submit use default params', async () => { + queryArgs = undefined; + form.resetFields(); + act(() => { + hook = setUp(asyncFn, { + form, + defaultParams: [ + { + current: 2, + pageSize: 100, + }, + ], + }); + }); + + const { search } = hook.result.current; + + act(() => { + search.submit(); + }); + + await waitFor(() => { + expect(queryArgs.current).toBe(2); + expect(queryArgs.pageSize).toBe(100); + }); + }); }); diff --git a/packages/hooks/src/useAntdTable/demo/cache.tsx b/packages/hooks/src/useAntdTable/demo/cache.tsx index 833441af1f..6aa68f859d 100644 --- a/packages/hooks/src/useAntdTable/demo/cache.tsx +++ b/packages/hooks/src/useAntdTable/demo/cache.tsx @@ -136,7 +136,7 @@ const UserList = () => { return (
{type === 'simple' ? searchForm : advanceSearchForm} - +

Current Table:

diff --git a/packages/hooks/src/useAntdTable/demo/form.tsx b/packages/hooks/src/useAntdTable/demo/form.tsx index 5dfd639308..417b28ea58 100644 --- a/packages/hooks/src/useAntdTable/demo/form.tsx +++ b/packages/hooks/src/useAntdTable/demo/form.tsx @@ -122,7 +122,7 @@ export default () => { return (
{type === 'simple' ? searchForm : advanceSearchForm} -
+

Current Table:

diff --git a/packages/hooks/src/useAntdTable/demo/init.tsx b/packages/hooks/src/useAntdTable/demo/init.tsx index afa6171c36..2c537f730f 100644 --- a/packages/hooks/src/useAntdTable/demo/init.tsx +++ b/packages/hooks/src/useAntdTable/demo/init.tsx @@ -126,7 +126,7 @@ export default () => { return (
{type === 'simple' ? searchForm : advanceSearchForm} -
+

Current Table:

diff --git a/packages/hooks/src/useAntdTable/demo/ready.tsx b/packages/hooks/src/useAntdTable/demo/ready.tsx index f30484bb4a..0ca3b8ec8d 100644 --- a/packages/hooks/src/useAntdTable/demo/ready.tsx +++ b/packages/hooks/src/useAntdTable/demo/ready.tsx @@ -131,7 +131,7 @@ export default () => {
{type === 'simple' ? searchForm : advanceSearchForm} -
+

Current Table:

diff --git a/packages/hooks/src/useAntdTable/demo/table.tsx b/packages/hooks/src/useAntdTable/demo/table.tsx index ecfa26698d..e2fe72438d 100644 --- a/packages/hooks/src/useAntdTable/demo/table.tsx +++ b/packages/hooks/src/useAntdTable/demo/table.tsx @@ -49,5 +49,5 @@ export default () => { }, ]; - return
; + return
; }; diff --git a/packages/hooks/src/useAntdTable/demo/validate.tsx b/packages/hooks/src/useAntdTable/demo/validate.tsx index a5a9c03ada..416158267b 100644 --- a/packages/hooks/src/useAntdTable/demo/validate.tsx +++ b/packages/hooks/src/useAntdTable/demo/validate.tsx @@ -88,7 +88,7 @@ export default () => { return (
{searchForm} -
+

Current Table:

diff --git a/packages/hooks/src/useAntdTable/index.en-US.md b/packages/hooks/src/useAntdTable/index.en-US.md index a703e74fd0..5b2ae41fbc 100644 --- a/packages/hooks/src/useAntdTable/index.en-US.md +++ b/packages/hooks/src/useAntdTable/index.en-US.md @@ -72,7 +72,7 @@ All parameters and returned results of `useRequest` are applicable to `useAntdTa ```typescript type Data = { total: number; list: any[] }; -type Params = [{ current: number; pageSize: number, filter?: any, sorter?: any, extra?: any }, { [key: string]: any }]; +type Params = [{ current: number; pageSize: number, filters?: any, sorter?: any, extra?: any }, { [key: string]: any }]; const { ..., diff --git a/packages/hooks/src/useAntdTable/index.tsx b/packages/hooks/src/useAntdTable/index.tsx index 241e422a3f..9ae143dc59 100644 --- a/packages/hooks/src/useAntdTable/index.tsx +++ b/packages/hooks/src/useAntdTable/index.tsx @@ -27,8 +27,14 @@ const useAntdTable = ( } = options; const result = usePagination(service, { + ready, manual: true, ...rest, + onSuccess(...args) { + // eslint-disable-next-line @typescript-eslint/no-use-before-define + runSuccessRef.current = true; + rest.onSuccess?.(...args); + }, }); const { params = [], run } = result; @@ -39,6 +45,7 @@ const useAntdTable = ( const allFormDataRef = useRef>({}); const defaultDataSourceRef = useRef([]); + const runSuccessRef = useRef(false); const isAntdV4 = !!form?.getInternalHooks; @@ -164,7 +171,15 @@ const useAntdTable = ( const submit = (e?: any) => { e?.preventDefault?.(); - _submit(); + _submit( + runSuccessRef.current + ? undefined + : { + pageSize: options.defaultPageSize || options.defaultParams?.[0]?.pageSize || 10, + current: 1, + ...(defaultParams?.[0] || {}), + }, + ); }; const onTableChange = (pagination: any, filters: any, sorter: any, extra: any) => { diff --git a/packages/hooks/src/useAntdTable/index.zh-CN.md b/packages/hooks/src/useAntdTable/index.zh-CN.md index 23443252f3..6f18abceb8 100644 --- a/packages/hooks/src/useAntdTable/index.zh-CN.md +++ b/packages/hooks/src/useAntdTable/index.zh-CN.md @@ -73,7 +73,7 @@ nav: ```typescript type Data = { total: number; list: any[] }; -type Params = [{ current: number; pageSize: number, filter?: any, sorter?: any, extra?: any }, { [key: string]: any }]; +type Params = [{ current: number; pageSize: number, filters?: any, sorter?: any, extra?: any }, { [key: string]: any }]; const { ..., diff --git a/packages/hooks/src/useAntdTable/types.ts b/packages/hooks/src/useAntdTable/types.ts index caf7db660f..4f4a9e5a7e 100644 --- a/packages/hooks/src/useAntdTable/types.ts +++ b/packages/hooks/src/useAntdTable/types.ts @@ -7,7 +7,7 @@ export type Params = [ current: number; pageSize: number; sorter?: any; - filter?: any; + filters?: any; extra?: any; [key: string]: any; }, diff --git a/packages/hooks/src/useCountDown/__tests__/index.test.ts b/packages/hooks/src/useCountDown/__tests__/index.test.ts index 57b527bdef..5a8365d37a 100644 --- a/packages/hooks/src/useCountDown/__tests__/index.test.ts +++ b/packages/hooks/src/useCountDown/__tests__/index.test.ts @@ -1,5 +1,6 @@ import { act, renderHook } from '@testing-library/react'; -import useCountDown, { Options } from '../index'; +import type { Options } from '../index'; +import useCountDown from '../index'; const setup = (options: Options = {}) => renderHook((props: Options = options) => useCountDown(props)); @@ -235,4 +236,30 @@ describe('useCountDown', () => { const { result } = setup({ leftTime: -5 * 1000 }); expect(result.current[0]).toBe(0); }); + + it('run with timeLeft should not be reset after targetDate changed', async () => { + let targetDate = Date.now() + 8000; + + const { result, rerender } = setup({ + leftTime: 6000, + targetDate, + }); + expect(result.current[0]).toBe(6000); + + act(() => { + jest.advanceTimersByTime(2000); + }); + rerender({ + leftTime: 6000, + targetDate: targetDate, + }); + expect(result.current[0]).toBe(4000); + + targetDate = Date.now() + 9000; + rerender({ + leftTime: 6000, + targetDate: targetDate, + }); + expect(result.current[0]).toBe(4000); + }); }); diff --git a/packages/hooks/src/useCountDown/index.ts b/packages/hooks/src/useCountDown/index.ts index 6f64a9711f..bcb8866b76 100644 --- a/packages/hooks/src/useCountDown/index.ts +++ b/packages/hooks/src/useCountDown/index.ts @@ -42,13 +42,11 @@ const parseMs = (milliseconds: number): FormattedRes => { const useCountdown = (options: Options = {}) => { const { leftTime, targetDate, interval = 1000, onEnd } = options || {}; - const target = useMemo(() => { - if ('leftTime' in options) { - return isNumber(leftTime) && leftTime > 0 ? Date.now() + leftTime : undefined; - } else { - return targetDate; - } - }, [leftTime, targetDate]); + const memoLeftTime = useMemo(() => { + return isNumber(leftTime) && leftTime > 0 ? Date.now() + leftTime : undefined; + }, [leftTime]); + + const target = 'leftTime' in options ? memoLeftTime : targetDate; const [timeLeft, setTimeLeft] = useState(() => calcLeft(target)); diff --git a/packages/hooks/src/useCreation/index.zh-CN.md b/packages/hooks/src/useCreation/index.zh-CN.md index 437119cb80..5359eb662c 100644 --- a/packages/hooks/src/useCreation/index.zh-CN.md +++ b/packages/hooks/src/useCreation/index.zh-CN.md @@ -7,7 +7,7 @@ nav: `useCreation` 是 `useMemo` 或 `useRef` 的替代品。 -因为 `useMemo` 不能保证被 memo 的值一定不会被重计算,而 `useCreation` 可以保证这一点。以下为 React 官方文档中的介绍: +因为 `useMemo` 不能保证被 memo 的值一定不会被重新计算,而 `useCreation` 可以保证这一点。以下为 React 官方文档中的介绍: > **You may rely on useMemo as a performance optimization, not as a semantic guarantee.** In the future, React may choose to “forget” some previously memoized values and recalculate them on next render, e.g. to free memory for offscreen components. Write your code so that it still works without `useMemo` — and then add it to optimize performance. diff --git a/packages/hooks/src/useDeepCompareEffect/__tests__/index.test.ts b/packages/hooks/src/useDeepCompareEffect/__tests__/index.test.ts index de9429094a..d3fbecdcdf 100644 --- a/packages/hooks/src/useDeepCompareEffect/__tests__/index.test.ts +++ b/packages/hooks/src/useDeepCompareEffect/__tests__/index.test.ts @@ -8,7 +8,7 @@ describe('useDeepCompareEffect', () => { const [x, setX] = useState(0); const [y, setY] = useState({}); useDeepCompareEffect(() => { - setX((x) => x + 1); + setX((prevState) => prevState + 1); }, [y]); return { x, setY }; }); diff --git a/packages/hooks/src/useDeepCompareEffect/index.en-US.md b/packages/hooks/src/useDeepCompareEffect/index.en-US.md index b8a8ad4047..28e9d3898d 100644 --- a/packages/hooks/src/useDeepCompareEffect/index.en-US.md +++ b/packages/hooks/src/useDeepCompareEffect/index.en-US.md @@ -5,7 +5,7 @@ nav: # useDeepCompareEffect -Usage is the same as `useEffect`, but deps are compared with [lodash.isEqual](https://lodash.com/docs/4.17.15#isEqual). +Usage is the same as `useEffect`, but deps are compared with [react-fast-compare](https://www.npmjs.com/package/react-fast-compare). ## Examples diff --git a/packages/hooks/src/useDeepCompareEffect/index.zh-CN.md b/packages/hooks/src/useDeepCompareEffect/index.zh-CN.md index 056a2be0dd..d96fe9f218 100644 --- a/packages/hooks/src/useDeepCompareEffect/index.zh-CN.md +++ b/packages/hooks/src/useDeepCompareEffect/index.zh-CN.md @@ -5,7 +5,7 @@ nav: # useDeepCompareEffect -用法与 useEffect 一致,但 deps 通过 [lodash isEqual](https://lodash.com/docs/4.17.15#isEqual) 进行深比较。 +用法与 useEffect 一致,但 deps 通过 [react-fast-compare](https://www.npmjs.com/package/react-fast-compare) 进行深比较。 ## 代码演示 diff --git a/packages/hooks/src/useDeepCompareLayoutEffect/index.en-US.md b/packages/hooks/src/useDeepCompareLayoutEffect/index.en-US.md index 03d25e7b96..0b1e8cd48b 100644 --- a/packages/hooks/src/useDeepCompareLayoutEffect/index.en-US.md +++ b/packages/hooks/src/useDeepCompareLayoutEffect/index.en-US.md @@ -5,7 +5,7 @@ nav: # useDeepCompareLayoutEffect -Usage is the same as `useLayoutEffect`, but deps are compared with [lodash.isEqual](https://lodash.com/docs/4.17.15#isEqual). +Usage is the same as `useLayoutEffect`, but deps are compared with [react-fast-compare](https://www.npmjs.com/package/react-fast-compare). ## Examples diff --git a/packages/hooks/src/useDeepCompareLayoutEffect/index.zh-CN.md b/packages/hooks/src/useDeepCompareLayoutEffect/index.zh-CN.md index 1816813a25..3d5fb32cef 100644 --- a/packages/hooks/src/useDeepCompareLayoutEffect/index.zh-CN.md +++ b/packages/hooks/src/useDeepCompareLayoutEffect/index.zh-CN.md @@ -5,7 +5,7 @@ nav: # useDeepCompareLayoutEffect -用法与 useLayoutEffect 一致,但 deps 通过 [lodash isEqual](https://lodash.com/docs/4.17.15#isEqual) 进行深比较。 +用法与 useLayoutEffect 一致,但 deps 通过 [react-fast-compare](https://www.npmjs.com/package/react-fast-compare) 进行深比较。 ## 代码演示 diff --git a/packages/hooks/src/useDocumentVisibility/index.ts b/packages/hooks/src/useDocumentVisibility/index.ts index e5f294c969..d8fea6302b 100644 --- a/packages/hooks/src/useDocumentVisibility/index.ts +++ b/packages/hooks/src/useDocumentVisibility/index.ts @@ -12,7 +12,7 @@ const getVisibility = () => { }; function useDocumentVisibility(): VisibilityState { - const [documentVisibility, setDocumentVisibility] = useState(() => getVisibility()); + const [documentVisibility, setDocumentVisibility] = useState(getVisibility); useEventListener( 'visibilitychange', diff --git a/packages/hooks/src/useDocumentVisibility/index.zh-CN.md b/packages/hooks/src/useDocumentVisibility/index.zh-CN.md index e38ef7be72..349930a52e 100644 --- a/packages/hooks/src/useDocumentVisibility/index.zh-CN.md +++ b/packages/hooks/src/useDocumentVisibility/index.zh-CN.md @@ -21,6 +21,6 @@ const documentVisibility = useDocumentVisibility(); ### Result -| 参数 | 说明 | 类型 | -| ------------------ | ------------------------------------ | -------------------------------------------------- | +| 参数 | 说明 | 类型 | +| ------------------ | ------------------------------ | -------------------------------------------------- | | documentVisibility | 判断 document 是否处于可见状态 | `visible`\| `hidden` \| `prerender` \| `undefined` | diff --git a/packages/hooks/src/useDrag/index.ts b/packages/hooks/src/useDrag/index.ts index 28301e5f68..bff76608bc 100644 --- a/packages/hooks/src/useDrag/index.ts +++ b/packages/hooks/src/useDrag/index.ts @@ -1,4 +1,7 @@ +import { useRef } from 'react'; import useLatest from '../useLatest'; +import useMount from '../useMount'; +import { isString } from '../utils'; import type { BasicTarget } from '../utils/domTarget'; import { getTargetElement } from '../utils/domTarget'; import useEffectWithTarget from '../utils/useEffectWithTarget'; @@ -6,11 +9,35 @@ import useEffectWithTarget from '../utils/useEffectWithTarget'; export interface Options { onDragStart?: (event: React.DragEvent) => void; onDragEnd?: (event: React.DragEvent) => void; + dragImage?: { + image: string | Element; + offsetX?: number; + offsetY?: number; + }; } const useDrag = (data: T, target: BasicTarget, options: Options = {}) => { const optionsRef = useLatest(options); const dataRef = useLatest(data); + const imageElementRef = useRef(); + + const { dragImage } = optionsRef.current; + + useMount(() => { + if (dragImage?.image) { + const { image } = dragImage; + + if (isString(image)) { + const imageElement = new Image(); + + imageElement.src = image; + imageElementRef.current = imageElement; + } else { + imageElementRef.current = image; + } + } + }); + useEffectWithTarget( () => { const targetElement = getTargetElement(target); @@ -21,6 +48,12 @@ const useDrag = (data: T, target: BasicTarget, options: Options = {}) => { const onDragStart = (event: React.DragEvent) => { optionsRef.current.onDragStart?.(event); event.dataTransfer.setData('custom', JSON.stringify(dataRef.current)); + + if (dragImage?.image && imageElementRef.current) { + const { offsetX = 0, offsetY = 0 } = dragImage; + + event.dataTransfer.setDragImage(imageElementRef.current, offsetX, offsetY); + } }; const onDragEnd = (event: React.DragEvent) => { diff --git a/packages/hooks/src/useDrop/demo/demo1.tsx b/packages/hooks/src/useDrop/demo/demo1.tsx index bcbf2032b7..a8a68c05dd 100644 --- a/packages/hooks/src/useDrop/demo/demo1.tsx +++ b/packages/hooks/src/useDrop/demo/demo1.tsx @@ -70,8 +70,8 @@ export default () => { {isHovering ? 'release here' : 'drop here'}
-
- {['1', '2', '3', '4', '5'].map((e, i) => ( +
+ {['1', '2', '3', '4', '5'].map((e) => ( ))}
diff --git a/packages/hooks/src/useDrop/demo/demo2.tsx b/packages/hooks/src/useDrop/demo/demo2.tsx new file mode 100644 index 0000000000..7052275dc7 --- /dev/null +++ b/packages/hooks/src/useDrop/demo/demo2.tsx @@ -0,0 +1,36 @@ +/** + * title: Customize Image + * desc: Customize image that follow the mouse pointer during dragging. + * + * title.zh-CN: 自定义拖拽图像 + * desc.zh-CN: 自定义拖拽过程中跟随鼠标指针的图像。 + */ + +import React, { useRef } from 'react'; +import { useDrag } from 'ahooks'; + +const COMMON_STYLE: React.CSSProperties = { + border: '1px solid #e8e8e8', + height: '50px', + lineHeight: '50px', + padding: '16px', + textAlign: 'center', + marginRight: '16px', +}; + +export default () => { + const dragRef = useRef(null); + + useDrag('', dragRef, { + dragImage: { + image: '/logo.svg', + }, + }); + + return ( +
+ +
drag me
+
+ ); +}; diff --git a/packages/hooks/src/useDrop/index.en-US.md b/packages/hooks/src/useDrop/index.en-US.md index c56a93fd45..a6755c292c 100644 --- a/packages/hooks/src/useDrop/index.en-US.md +++ b/packages/hooks/src/useDrop/index.en-US.md @@ -19,6 +19,10 @@ A pair of hooks to help you manage data transfer between drag and drop +### Customize Image + + + ## API ### useDrag @@ -41,10 +45,19 @@ useDrag( #### DragOptions -| Property | Description | Type | Default | -| ----------- | ---------------------- | ------------------------------ | ------- | -| onDragStart | On drag start callback | `(e: React.DragEvent) => void` | - | -| onDragEnd | On drag end callback | `(e: React.DragEvent) => void` | - | +| Property | Description | Type | Default | +| ----------- | ------------------------------------------------------------- | ------------------------------ | ------- | +| onDragStart | On drag start callback | `(e: React.DragEvent) => void` | - | +| onDragEnd | On drag end callback | `(e: React.DragEvent) => void` | - | +| dragImage | Customize image that follow the mouse pointer during dragging | `DragImageOptions` | - | + +#### DragImageOptions + +| 参数 | 说明 | 类型 | 默认值 | +| ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------- | ------ | +| image | An image Element element to use for the drag feedback image. The image will typically be an [``](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img) element but it can also be a [``](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/canvas) or any other visible element | `string \| Element` | - | +| offsetX | the horizontal offset within the image | `number` | 0 | +| offsetY | the vertical offset within the image | `number` | 0 | ### useDrop diff --git a/packages/hooks/src/useDrop/index.zh-CN.md b/packages/hooks/src/useDrop/index.zh-CN.md index c0a422cac5..c1dc96d4ae 100644 --- a/packages/hooks/src/useDrop/index.zh-CN.md +++ b/packages/hooks/src/useDrop/index.zh-CN.md @@ -19,6 +19,10 @@ nav: +### 自定义拖拽图像 + + + ## API ### useDrag @@ -41,10 +45,19 @@ useDrag( #### DragOptions -| 参数 | 说明 | 类型 | 默认值 | -| ----------- | -------------- | ------------------------------ | ------ | -| onDragStart | 开始拖拽的回调 | `(e: React.DragEvent) => void` | - | -| onDragEnd | 结束拖拽的回调 | `(e: React.DragEvent) => void` | - | +| 参数 | 说明 | 类型 | 默认值 | +| ----------- | ---------------------------------- | ------------------------------ | ------ | +| onDragStart | 开始拖拽的回调 | `(e: React.DragEvent) => void` | - | +| onDragEnd | 结束拖拽的回调 | `(e: React.DragEvent) => void` | - | +| dragImage | 自定义拖拽过程中跟随鼠标指针的图像 | `DragImageOptions` | - | + +#### DragImageOptions + +| 参数 | 说明 | 类型 | 默认值 | +| ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------- | ------ | +| image | 拖拽过程中跟随鼠标指针的图像。图像通常是一个 [``](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img) 元素,但也可以是 [``](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/canvas) 或任何其他图像元素。 | `string \| Element` | - | +| offsetX | 水平偏移 | `number` | 0 | +| offsetY | 垂直偏移 | `number` | 0 | ### useDrop diff --git a/packages/hooks/src/useDynamicList/__tests__/index.test.ts b/packages/hooks/src/useDynamicList/__tests__/index.test.ts index 2da76fa026..e6509cfb1d 100644 --- a/packages/hooks/src/useDynamicList/__tests__/index.test.ts +++ b/packages/hooks/src/useDynamicList/__tests__/index.test.ts @@ -3,6 +3,15 @@ import useDynamicList from '../index'; describe('useDynamicList', () => { const setUp = (props: any): any => renderHook(() => useDynamicList(props)); + const warnSpy = jest.spyOn(console, 'error').mockImplementation(() => {}); + + afterEach(() => { + warnSpy.mockReset(); + }); + + afterAll(() => { + warnSpy.mockRestore(); + }); it('getKey should work', () => { const hook = setUp([1, 2, 3]); @@ -97,6 +106,18 @@ describe('useDynamicList', () => { hook.result.current.remove(7); }); expect(hook.result.current.list.length).toBe(7); + + // batch remove + act(() => { + hook.result.current.batchRemove(1); + }); + expect(warnSpy).toHaveBeenCalledWith( + '`indexes` parameter of `batchRemove` function expected to be an array, but got "number".', + ); + act(() => { + hook.result.current.batchRemove([0, 1, 2]); + }); + expect(hook.result.current.list.length).toBe(4); }); it('same items should have different keys', () => { diff --git a/packages/hooks/src/useDynamicList/demo/demo1.tsx b/packages/hooks/src/useDynamicList/demo/demo1.tsx index e7045a086c..ba137e2e1f 100644 --- a/packages/hooks/src/useDynamicList/demo/demo1.tsx +++ b/packages/hooks/src/useDynamicList/demo/demo1.tsx @@ -8,11 +8,12 @@ import { MinusCircleOutlined, PlusCircleOutlined } from '@ant-design/icons'; import { useDynamicList } from 'ahooks'; -import { Input } from 'antd'; +import { Button, Input, Space } from 'antd'; import React from 'react'; export default () => { - const { list, remove, getKey, insert, replace } = useDynamicList(['David', 'Jack']); + const { list, remove, batchRemove, getKey, insert, replace } = useDynamicList(['David', 'Jack']); + const listIndexes = list.map((item, index) => index); const Row = (index: number, item: any) => (
@@ -44,6 +45,23 @@ export default () => { <> {list.map((ele, index) => Row(index, ele))} + + + + +
{JSON.stringify([list])}
); diff --git a/packages/hooks/src/useDynamicList/demo/demo4.tsx b/packages/hooks/src/useDynamicList/demo/demo4.tsx index ef09146e67..ca0f37cea6 100644 --- a/packages/hooks/src/useDynamicList/demo/demo4.tsx +++ b/packages/hooks/src/useDynamicList/demo/demo4.tsx @@ -84,6 +84,7 @@ export default () => { dataSource={list} rowKey={(r: Item, index: number) => getKey(index).toString()} pagination={false} + style={{ overflow: 'auto' }} /> diff --git a/packages/hooks/src/useDynamicList/index.ts b/packages/hooks/src/useDynamicList/index.ts index 1bcdd162cf..32d4987266 100644 --- a/packages/hooks/src/useDynamicList/index.ts +++ b/packages/hooks/src/useDynamicList/index.ts @@ -1,4 +1,5 @@ import { useCallback, useRef, useState } from 'react'; +import isDev from '../utils/isDev'; const useDynamicList = (initialList: T[] = []) => { const counterRef = useRef(-1); @@ -77,6 +78,37 @@ const useDynamicList = (initialList: T[] = []) => { }); }, []); + const batchRemove = useCallback((indexes: number[]) => { + if (!Array.isArray(indexes)) { + if (isDev) { + console.error( + `\`indexes\` parameter of \`batchRemove\` function expected to be an array, but got "${typeof indexes}".`, + ); + } + return; + } + if (!indexes.length) { + return; + } + + setList((prevList) => { + const newKeyList: number[] = []; + const newList = prevList.filter((item, index) => { + const shouldKeep = !indexes.includes(index); + + if (shouldKeep) { + newKeyList.push(getKey(index)); + } + + return shouldKeep; + }); + + keyList.current = newKeyList; + + return newList; + }); + }, []); + const move = useCallback((oldIndex: number, newIndex: number) => { if (oldIndex === newIndex) { return; @@ -150,6 +182,7 @@ const useDynamicList = (initialList: T[] = []) => { merge, replace, remove, + batchRemove, getKey, getIndex, move, diff --git a/packages/hooks/src/useEventListener/__tests__/index.test.ts b/packages/hooks/src/useEventListener/__tests__/index.test.ts index ae7cc9c08a..57094df80b 100644 --- a/packages/hooks/src/useEventListener/__tests__/index.test.ts +++ b/packages/hooks/src/useEventListener/__tests__/index.test.ts @@ -31,4 +31,24 @@ describe('useEventListener', () => { document.body.click(); expect(state).toBe(1); }); + + it('test "enable" parameter', () => { + let state = 0; + let enable = true; + const onClick = () => state++; + const { rerender, unmount } = renderHook(() => + useEventListener('click', onClick, { target: () => container, enable }), + ); + + document.body.click(); + expect(state).toBe(0); + container.click(); + expect(state).toBe(1); + + enable = false; + rerender(); + container.click(); + expect(state).toBe(1); + unmount(); + }); }); diff --git a/packages/hooks/src/useEventListener/index.en-US.md b/packages/hooks/src/useEventListener/index.en-US.md index 2e89dd2404..20b3520a2f 100644 --- a/packages/hooks/src/useEventListener/index.en-US.md +++ b/packages/hooks/src/useEventListener/index.en-US.md @@ -43,3 +43,4 @@ useEventListener( | capture | Optional, a Boolean indicating that events of this type will be dispatched to the registered listener before being dispatched to any EventTarget beneath it in the DOM tree. | `boolean` | `false` | | once | Optional, A Boolean indicating that the listener should be invoked at most once after being added. If true, the listener would be automatically removed when invoked. | `boolean` | `false` | | passive | Optional, A Boolean which, if true, indicates that the function specified by listener will never call preventDefault(). If a passive listener does call preventDefault(), the user agent will do nothing other than generate a console warning. | `boolean` | `false` | +| enable | Optional, Whether to enable listening. | `boolean` | `true` | diff --git a/packages/hooks/src/useEventListener/index.ts b/packages/hooks/src/useEventListener/index.ts index 12a8eb60b1..b066846722 100644 --- a/packages/hooks/src/useEventListener/index.ts +++ b/packages/hooks/src/useEventListener/index.ts @@ -12,6 +12,7 @@ type Options = { capture?: boolean; once?: boolean; passive?: boolean; + enable?: boolean; }; function useEventListener( @@ -34,13 +35,24 @@ function useEventListener( handler: (ev: WindowEventMap[K]) => void, options?: Options, ): void; +function useEventListener( + eventName: string, + handler: (event: Event) => void, + options?: Options, +): void; function useEventListener(eventName: string, handler: noop, options: Options): void; function useEventListener(eventName: string, handler: noop, options: Options = {}) { + const { enable = true } = options; + const handlerRef = useLatest(handler); useEffectWithTarget( () => { + if (!enable) { + return; + } + const targetElement = getTargetElement(options.target, window); if (!targetElement?.addEventListener) { return; @@ -62,7 +74,7 @@ function useEventListener(eventName: string, handler: noop, options: Options = { }); }; }, - [eventName, options.capture, options.once, options.passive], + [eventName, options.capture, options.once, options.passive, enable], options.target, ); } diff --git a/packages/hooks/src/useEventListener/index.zh-CN.md b/packages/hooks/src/useEventListener/index.zh-CN.md index 35af05bcce..b3606f1046 100644 --- a/packages/hooks/src/useEventListener/index.zh-CN.md +++ b/packages/hooks/src/useEventListener/index.zh-CN.md @@ -43,3 +43,4 @@ useEventListener( | capture | 可选项,listener 会在该类型的事件捕获阶段传播到该 EventTarget 时触发。 | `boolean` | `false` | | once | 可选项,listener 在添加之后最多只调用一次。如果是 true,listener 会在其被调用之后自动移除。 | `boolean` | `false` | | passive | 可选项,设置为 true 时,表示 listener 永远不会调用 preventDefault() 。如果 listener 仍然调用了这个函数,客户端将会忽略它并抛出一个控制台警告。 | `boolean` | `false` | +| enable | 可选项,是否开启监听。 | `boolean` | `true` | diff --git a/packages/hooks/src/useExternal/demo/demo2.tsx b/packages/hooks/src/useExternal/demo/demo2.tsx index 785179ef71..5172b9cf1d 100644 --- a/packages/hooks/src/useExternal/demo/demo2.tsx +++ b/packages/hooks/src/useExternal/demo/demo2.tsx @@ -19,7 +19,7 @@ export default () => {

Status: {status}

-
+
Primary Secondary Success diff --git a/packages/hooks/src/useExternal/index.ts b/packages/hooks/src/useExternal/index.ts index 610793953d..6336b11ec0 100644 --- a/packages/hooks/src/useExternal/index.ts +++ b/packages/hooks/src/useExternal/index.ts @@ -27,12 +27,14 @@ const EXTERNAL_USED_COUNT: Record = {}; export type Status = 'unset' | 'loading' | 'ready' | 'error'; -interface loadResult { +interface LoadResult { ref: Element; status: Status; } -const loadScript = (path: string, props = {}): loadResult => { +type LoadExternal = (path: string, props?: Partial) => LoadResult; + +const loadScript: LoadExternal = (path, props = {}) => { const script = document.querySelector(`script[src="${path}"]`); if (!script) { @@ -58,7 +60,7 @@ const loadScript = (path: string, props = {}): loadResult => { }; }; -const loadCss = (path: string, props = {}): loadResult => { +const loadCss: LoadExternal = (path, props = {}) => { const css = document.querySelector(`link[href="${path}"]`); if (!css) { const newCss = document.createElement('link'); diff --git a/packages/hooks/src/useFullscreen/__tests__/index.test.ts b/packages/hooks/src/useFullscreen/__tests__/index.test.ts index 96345e25a3..c453317175 100644 --- a/packages/hooks/src/useFullscreen/__tests__/index.test.ts +++ b/packages/hooks/src/useFullscreen/__tests__/index.test.ts @@ -3,17 +3,20 @@ import useFullscreen from '../index'; import type { Options } from '../index'; import type { BasicTarget } from '../../utils/domTarget'; -const targetEl = document.createElement('div'); +let globalHook: any; +let targetEl: any; const events = { fullscreenchange: new Set(), fullscreenerror: new Set(), }; - -const setup = (target: BasicTarget, options?: Options) => - renderHook(() => useFullscreen(target, options)); +const setup = (target: BasicTarget, options?: Options) => { + globalHook = renderHook(() => useFullscreen(target, options)); + return globalHook; +}; describe('useFullscreen', () => { beforeEach(() => { + targetEl = document.createElement('div'); document.body.appendChild(targetEl); jest.spyOn(HTMLElement.prototype, 'requestFullscreen').mockImplementation(() => { Object.defineProperty(document, 'fullscreenElement', { @@ -42,6 +45,7 @@ describe('useFullscreen', () => { afterEach(() => { document.body.removeChild(targetEl); events.fullscreenchange.clear(); + globalHook?.unmount(); }); afterAll(() => { @@ -163,10 +167,11 @@ describe('useFullscreen', () => { }); it('enterFullscreen should not work when target is not element', () => { - const { result } = setup(null); + const onEnter = jest.fn(); + const { result } = setup(null, { onEnter }); const { enterFullscreen } = result.current[1]; enterFullscreen(); - expect(events.fullscreenchange.size).toBe(0); + expect(onEnter).not.toBeCalled(); }); it('should remove event listener when unmount', () => { diff --git a/packages/hooks/src/useFullscreen/demo/demo4.tsx b/packages/hooks/src/useFullscreen/demo/demo4.tsx new file mode 100644 index 0000000000..bdcb12884a --- /dev/null +++ b/packages/hooks/src/useFullscreen/demo/demo4.tsx @@ -0,0 +1,39 @@ +/** + * title: Coexist with other full screen operations + * desc: The element's full screen may be modified by other scripts, don't worry, ahooks can work with them. + * + * title.zh-CN: 与其它全屏操作共存 + * desc.zh-CN: 元素的全屏情况可能被其它脚本修改,不用担心,ahooks 可以与它们共存。 + */ + +import React, { useRef } from 'react'; +import { useFullscreen } from 'ahooks'; + +function vanillaToggleFullscreen(element) { + const isFullscreen = !!document.fullscreenElement; + + if (isFullscreen) { + document.exitFullscreen(); + } else { + element.requestFullscreen(); + } +} + +export default () => { + const ref = useRef(null); + const [isFullscreen, { toggleFullscreen }] = useFullscreen(ref); + + return ( +
+
{isFullscreen ? 'Fullscreen' : 'Not fullscreen'}
+
+ + +
+
+ ); +}; diff --git a/packages/hooks/src/useFullscreen/index.en-US.md b/packages/hooks/src/useFullscreen/index.en-US.md index da8b251720..b7d03bc517 100644 --- a/packages/hooks/src/useFullscreen/index.en-US.md +++ b/packages/hooks/src/useFullscreen/index.en-US.md @@ -21,6 +21,10 @@ manages DOM full screen. +### Coexist with other full screen operations + + + ## API ```typescript diff --git a/packages/hooks/src/useFullscreen/index.ts b/packages/hooks/src/useFullscreen/index.ts index 942a7998bf..3220ca8fb1 100644 --- a/packages/hooks/src/useFullscreen/index.ts +++ b/packages/hooks/src/useFullscreen/index.ts @@ -1,8 +1,7 @@ -import { useState } from 'react'; +import { useEffect, useState, useRef } from 'react'; import screenfull from 'screenfull'; import useLatest from '../useLatest'; import useMemoizedFn from '../useMemoizedFn'; -import useUnmount from '../useUnmount'; import type { BasicTarget } from '../utils/domTarget'; import { getTargetElement } from '../utils/domTarget'; import { isBoolean } from '../utils'; @@ -26,7 +25,18 @@ const useFullscreen = (target: BasicTarget, options?: Options) => { const onExitRef = useLatest(onExit); const onEnterRef = useLatest(onEnter); - const [state, setState] = useState(false); + // The state of full screen may be changed by other scripts/components, + // so the initial value needs to be computed dynamically. + const [state, setState] = useState(getIsFullscreen); + const stateRef = useRef(getIsFullscreen()); + + function getIsFullscreen() { + return ( + screenfull.isEnabled && + !!screenfull.element && + screenfull.element === getTargetElement(target) + ); + } const invokeCallback = (fullscreen: boolean) => { if (fullscreen) { @@ -36,23 +46,20 @@ const useFullscreen = (target: BasicTarget, options?: Options) => { } }; - // Memoized, otherwise it will be listened multiple times. - const onScreenfullChange = useMemoizedFn(() => { - if (screenfull.isEnabled) { - const el = getTargetElement(target); + const updateFullscreenState = (fullscreen: boolean) => { + // Prevent repeated calls when the state is not changed. + if (stateRef.current !== fullscreen) { + invokeCallback(fullscreen); + setState(fullscreen); + stateRef.current = fullscreen; + } + }; - if (!screenfull.element) { - invokeCallback(false); - setState(false); - screenfull.off('change', onScreenfullChange); - } else { - const isFullscreen = screenfull.element === el; + const onScreenfullChange = () => { + const fullscreen = getIsFullscreen(); - invokeCallback(isFullscreen); - setState(isFullscreen); - } - } - }); + updateFullscreenState(fullscreen); + }; const togglePageFullscreen = (fullscreen: boolean) => { const el = getTargetElement(target); @@ -84,11 +91,7 @@ const useFullscreen = (target: BasicTarget, options?: Options) => { } } - // Prevent repeated calls when the state is not changed. - if (state !== fullscreen) { - invokeCallback(fullscreen); - setState(fullscreen); - } + updateFullscreenState(fullscreen); }; const enterFullscreen = () => { @@ -104,7 +107,6 @@ const useFullscreen = (target: BasicTarget, options?: Options) => { if (screenfull.isEnabled) { try { screenfull.request(el); - screenfull.on('change', onScreenfullChange); } catch (error) { console.error(error); } @@ -134,11 +136,17 @@ const useFullscreen = (target: BasicTarget, options?: Options) => { } }; - useUnmount(() => { - if (screenfull.isEnabled && !pageFullscreen) { - screenfull.off('change', onScreenfullChange); + useEffect(() => { + if (!screenfull.isEnabled || pageFullscreen) { + return; } - }); + + screenfull.on('change', onScreenfullChange); + + return () => { + screenfull.off('change', onScreenfullChange); + }; + }, []); return [ state, diff --git a/packages/hooks/src/useFullscreen/index.zh-CN.md b/packages/hooks/src/useFullscreen/index.zh-CN.md index fae61633b1..503bd58007 100644 --- a/packages/hooks/src/useFullscreen/index.zh-CN.md +++ b/packages/hooks/src/useFullscreen/index.zh-CN.md @@ -21,6 +21,10 @@ nav: +### 与其它全屏操作共存 + + + ## API ```typescript diff --git a/packages/hooks/src/useGetState/index.ts b/packages/hooks/src/useGetState/index.ts index 51f76c61aa..f1799ac031 100644 --- a/packages/hooks/src/useGetState/index.ts +++ b/packages/hooks/src/useGetState/index.ts @@ -1,5 +1,6 @@ import type { Dispatch, SetStateAction } from 'react'; -import { useState, useRef, useCallback } from 'react'; +import { useState, useCallback } from 'react'; +import useLatest from '../useLatest'; type GetStateAction = () => S; @@ -13,8 +14,7 @@ function useGetState(): [ ]; function useGetState(initialState?: S) { const [state, setState] = useState(initialState); - const stateRef = useRef(state); - stateRef.current = state; + const stateRef = useLatest(state); const getState = useCallback(() => stateRef.current, []); diff --git a/packages/hooks/src/useInViewport/__tests__/index.test.ts b/packages/hooks/src/useInViewport/__tests__/index.test.ts index 415df2f964..97aa9c6bbd 100644 --- a/packages/hooks/src/useInViewport/__tests__/index.test.ts +++ b/packages/hooks/src/useInViewport/__tests__/index.test.ts @@ -1,12 +1,15 @@ +import { act, renderHook } from '@testing-library/react'; import useInViewport from '../index'; -import { renderHook, act } from '@testing-library/react'; const targetEl = document.createElement('div'); document.body.appendChild(targetEl); +const observe = jest.fn(); +const disconnect = jest.fn(); + const mockIntersectionObserver = jest.fn().mockReturnValue({ - observe: () => null, - disconnect: () => null, + observe, + disconnect, }); window.IntersectionObserver = mockIntersectionObserver; @@ -32,6 +35,34 @@ describe('useInViewport', () => { expect(ratio).toBe(0.5); }); + it('should work when target array is in viewport and has a callback', async () => { + const targetEls: HTMLDivElement[] = []; + const callback = jest.fn(); + for (let i = 0; i < 2; i++) { + const target = document.createElement('div'); + document.body.appendChild(target); + targetEls.push(target); + } + + const getValue = (isIntersecting, intersectionRatio) => ({ isIntersecting, intersectionRatio }); + + const { result } = renderHook(() => useInViewport(targetEls, { callback })); + const calls = mockIntersectionObserver.mock.calls; + const [observerCallback] = calls[calls.length - 1]; + + const target = getValue(false, 0); + act(() => observerCallback([target])); + expect(callback).toHaveBeenCalledWith(target); + expect(result.current[0]).toBe(false); + expect(result.current[1]).toBe(0); + + const target1 = getValue(true, 0.5); + act(() => observerCallback([target1])); + expect(callback).toHaveBeenCalledWith(target1); + expect(result.current[0]).toBe(true); + expect(result.current[1]).toBe(0.5); + }); + it('should not work when target is null', async () => { renderHook(() => useInViewport(null)); const calls = mockIntersectionObserver.mock.calls; @@ -39,7 +70,6 @@ describe('useInViewport', () => { }); it('should disconnect when unmount', async () => { - const disconnect = jest.fn(); mockIntersectionObserver.mockReturnValue({ observe: () => null, disconnect, diff --git a/packages/hooks/src/useInViewport/demo/demo3.tsx b/packages/hooks/src/useInViewport/demo/demo3.tsx new file mode 100644 index 0000000000..8df73e125e --- /dev/null +++ b/packages/hooks/src/useInViewport/demo/demo3.tsx @@ -0,0 +1,92 @@ +/** + * title: Listening content scrolling selection menu + * desc: Pass the `callback` that is triggered when the callback of `IntersectionObserver` is called, so you can do some customization. + * + * title.zh-CN: 监听内容滚动选中菜单 + * desc.zh-CN: 传入 `callback`, 使得 `IntersectionObserver` 的回调被调用时,用户可以做一些自定义操作。 + */ +import { useInViewport, useMemoizedFn } from 'ahooks'; +import React, { useRef, useState } from 'react'; + +const menus = ['menu-1', 'menu-2', 'menu-3']; +const content = { + 'menu-1': 'Content for menus 1', + 'menu-2': 'Content for menus 2', + 'menu-3': 'Content for menus 3', +}; + +export default () => { + const menuRef = useRef([]); + + const [activeMenu, setActiveMenu] = useState(menus[0]); + + const callback = useMemoizedFn((entry) => { + if (entry.isIntersecting) { + const active = entry.target.getAttribute('id') || ''; + setActiveMenu(active); + } + }); + + const handleMenuClick = (index) => { + const contentEl = document.getElementById('content-scroll'); + const top = menuRef.current[index]?.offsetTop; + + contentEl?.scrollTo({ + top, + behavior: 'smooth', + }); + }; + + useInViewport(menuRef.current, { + callback, + root: () => document.getElementById('parent-scroll'), + rootMargin: '-50% 0px -50% 0px', + }); + + return ( +
+
+
    + {menus.map((menu, index) => ( +
  • handleMenuClick(index)} + style={{ + padding: '10px', + cursor: 'pointer', + textAlign: 'center', + transition: 'background-color 0.2s ease-in-out', + backgroundColor: activeMenu === menu ? '#e0e0e0' : '', + }} + > + {menu} +
  • + ))} +
+
+
+ {menus.map((menu, index) => ( +
{ + menuRef.current[index] = el; + }} + key={menu} + id={menu} + style={{ + display: 'flex', + justifyContent: 'center', + alignItems: 'center', + height: '100%', + fontSize: 16, + }} + > + {content[menu]} +
+ ))} +
+
+ ); +}; diff --git a/packages/hooks/src/useInViewport/index.en-US.md b/packages/hooks/src/useInViewport/index.en-US.md index 6024dd8e1b..0c2d4ae8d5 100644 --- a/packages/hooks/src/useInViewport/index.en-US.md +++ b/packages/hooks/src/useInViewport/index.en-US.md @@ -17,21 +17,27 @@ Observe whether the element is in the visible area, and the visible area ratio o +### Listening content scrolling selection menu + + + ## API ```typescript +type Target = Element | (() => Element) | React.MutableRefObject; + const [inViewport, ratio] = useInViewport( - target, + target: Target | Target[], options?: Options ); ``` ### Params -| Property | Description | Type | Default | -| -------- | ------------------ | ----------------------------------------------------------- | ------- | -| target | DOM element or ref | `Element` \| `() => Element` \| `MutableRefObject` | - | -| options | Setting | `Options` | - | +| Property | Description | Type | Default | +| -------- | ---------------------------------- | ------------------------ | ------- | +| target | DOM elements or Ref, support array | `Target` \| `Target[]` | - | +| options | Setting | `Options` \| `undefined` | - | ### Options @@ -42,6 +48,7 @@ More information refer to [Intersection Observer API](https://developer.mozilla. | threshold | Either a single number or an array of numbers which indicate at what percentage of the target's visibility the ratio should be executed | `number` \| `number[]` | - | | rootMargin | Margin around the root | `string` | - | | root | The element that is used as the viewport for checking visibility of the target. Must be the ancestor of the target. Defaults to the browser viewport if not specified or if null. | `Element` \| `Document` \| `() => (Element/Document)` \| `MutableRefObject` | - | +| callback | Triggered when the callback of `IntersectionObserver` is called | `(entry: IntersectionObserverEntry) => void` | - | ### Result diff --git a/packages/hooks/src/useInViewport/index.ts b/packages/hooks/src/useInViewport/index.ts index ad72a272b6..dbddf13688 100644 --- a/packages/hooks/src/useInViewport/index.ts +++ b/packages/hooks/src/useInViewport/index.ts @@ -4,20 +4,27 @@ import type { BasicTarget } from '../utils/domTarget'; import { getTargetElement } from '../utils/domTarget'; import useEffectWithTarget from '../utils/useEffectWithTarget'; +type CallbackType = (entry: IntersectionObserverEntry) => void; + export interface Options { rootMargin?: string; threshold?: number | number[]; root?: BasicTarget; + callback?: CallbackType; } -function useInViewport(target: BasicTarget, options?: Options) { +function useInViewport(target: BasicTarget | BasicTarget[], options?: Options) { + const { callback, ...option } = options || {}; + const [state, setState] = useState(); const [ratio, setRatio] = useState(); useEffectWithTarget( () => { - const el = getTargetElement(target); - if (!el) { + const targets = Array.isArray(target) ? target : [target]; + const els = targets.map((element) => getTargetElement(element)).filter(Boolean); + + if (!els.length) { return; } @@ -26,21 +33,22 @@ function useInViewport(target: BasicTarget, options?: Options) { for (const entry of entries) { setRatio(entry.intersectionRatio); setState(entry.isIntersecting); + callback?.(entry); } }, { - ...options, + ...option, root: getTargetElement(options?.root), }, ); - observer.observe(el); + els.forEach((el) => observer.observe(el!)); return () => { observer.disconnect(); }; }, - [options?.rootMargin, options?.threshold], + [options?.rootMargin, options?.threshold, callback], target, ); diff --git a/packages/hooks/src/useInViewport/index.zh-CN.md b/packages/hooks/src/useInViewport/index.zh-CN.md index bc06a6992b..3ed14dc2c1 100644 --- a/packages/hooks/src/useInViewport/index.zh-CN.md +++ b/packages/hooks/src/useInViewport/index.zh-CN.md @@ -17,21 +17,27 @@ nav: +### 监听内容滚动选中菜单 + + + ## API ```typescript +type Target = Element | (() => Element) | React.MutableRefObject; + const [inViewport, ratio] = useInViewport( - target, + target: Target | Target[], options?: Options ); ``` ### Params -| 参数 | 说明 | 类型 | 默认值 | -| ------- | ---------------- | ----------------------------------------------------------- | ------ | -| target | DOM 节点或者 ref | `Element` \| `() => Element` \| `MutableRefObject` | - | -| options | 设置 | `Options` | - | +| 参数 | 说明 | 类型 | 默认值 | +| ------- | -------------------------- | ------------------------ | ------ | +| target | DOM 节点或者 Ref,支持数组 | `Target` \| `Target[]` | - | +| options | 设置 | `Options` \| `undefined` | - | ### Options @@ -42,6 +48,7 @@ const [inViewport, ratio] = useInViewport( | threshold | 可以是单一的 number 也可以是 number 数组,target 元素和 root 元素相交程度达到该值的时候 ratio 会被更新 | `number` \| `number[]` | - | | rootMargin | 根(root)元素的外边距 | `string` | - | | root | 指定根(root)元素,用于检查目标的可见性。必须是目标元素的父级元素,如果未指定或者为 null,则默认为浏览器视窗。 | `Element` \| `Document` \| `() => (Element/Document)` \| `MutableRefObject` | - | +| callback | `IntersectionObserver` 的回调被调用时触发 | `(entry: IntersectionObserverEntry) => void` | - | ### Result diff --git a/packages/hooks/src/useInfiniteScroll/__tests__/index.test.ts b/packages/hooks/src/useInfiniteScroll/__tests__/index.test.ts index c6cfd6cdfd..12d0c8654b 100644 --- a/packages/hooks/src/useInfiniteScroll/__tests__/index.test.ts +++ b/packages/hooks/src/useInfiniteScroll/__tests__/index.test.ts @@ -348,4 +348,15 @@ describe('useInfiniteScroll', () => { loadMore(); }); }); + + it('error result', async () => { + const { result } = setup(async () => { + throw new Error('error message'); + }); + await act(async () => { + jest.advanceTimersByTime(1000); + }); + + expect(result.current.error?.message).toBe('error message'); + }); }); diff --git a/packages/hooks/src/useInfiniteScroll/index.en-US.md b/packages/hooks/src/useInfiniteScroll/index.en-US.md index 47dc398ac8..b26f5f1f46 100644 --- a/packages/hooks/src/useInfiniteScroll/index.en-US.md +++ b/packages/hooks/src/useInfiniteScroll/index.en-US.md @@ -69,6 +69,7 @@ const { data: TData; loading: boolean; loadingMore: boolean; + error?: Error; noMore: boolean; loadMore: () => void; loadMoreAsync: () => Promise; @@ -100,6 +101,7 @@ const { | loading | Is the first request in progress | `boolean` | | loadingMore | Is more data request in progress | `boolean` | | noMore | Whether there is no more data, it will take effect after configuring `options.isNoMore` | `boolean` | +| error | Request error message | `Error` | | loadMore | Load more data, it will automatically catch the exception, and handle it through `options.onError` | `() => void` | | loadMoreAsync | Load more data, which is consistent with the behavior of `loadMore`, but returns Promise, so you need to handle the exception yourself | `() => Promise` | | reload | Load the first page of data, it will automatically catch the exception, and handle it through `options.onError` | `() => void` | diff --git a/packages/hooks/src/useInfiniteScroll/index.tsx b/packages/hooks/src/useInfiniteScroll/index.tsx index 27eac28293..a559c562d1 100644 --- a/packages/hooks/src/useInfiniteScroll/index.tsx +++ b/packages/hooks/src/useInfiniteScroll/index.tsx @@ -31,7 +31,7 @@ const useInfiniteScroll = ( return isNoMore(finalData); }, [finalData]); - const { loading, run, runAsync, cancel } = useRequest( + const { loading, error, run, runAsync, cancel } = useRequest( async (lastData?: TData) => { const currentData = await service(lastData); if (!lastData) { @@ -122,6 +122,7 @@ const useInfiniteScroll = ( return { data: finalData, loading: !loadingMore && loading, + error, loadingMore, noMore, diff --git a/packages/hooks/src/useInfiniteScroll/index.zh-CN.md b/packages/hooks/src/useInfiniteScroll/index.zh-CN.md index 8797c9bd44..f9483407e2 100644 --- a/packages/hooks/src/useInfiniteScroll/index.zh-CN.md +++ b/packages/hooks/src/useInfiniteScroll/index.zh-CN.md @@ -69,6 +69,7 @@ const { data: TData; loading: boolean; loadingMore: boolean; + error?: Error; noMore: boolean; loadMore: () => void; loadMoreAsync: () => Promise; @@ -100,6 +101,7 @@ const { | loading | 是否正在进行首次请求 | `boolean` | | loadingMore | 是否正在进行更多数据请求 | `boolean` | | noMore | 是否没有更多数据了,配置 `options.isNoMore` 后生效 | `boolean` | +| error | 请求错误消息 | `Error` | | loadMore | 加载更多数据,会自动捕获异常,通过 `options.onError` 处理 | `() => void` | | loadMoreAsync | 加载更多数据,与 `loadMore` 行为一致,但返回的是 Promise,需要自行处理异常 | `() => Promise` | | reload | 加载第一页数据,会自动捕获异常,通过 `options.onError` 处理 | `() => void` | diff --git a/packages/hooks/src/useInfiniteScroll/types.ts b/packages/hooks/src/useInfiniteScroll/types.ts index 7687e6ff60..cc17a688e4 100644 --- a/packages/hooks/src/useInfiniteScroll/types.ts +++ b/packages/hooks/src/useInfiniteScroll/types.ts @@ -9,6 +9,7 @@ export interface InfiniteScrollResult { data: TData; loading: boolean; loadingMore: boolean; + error?: Error; noMore: boolean; loadMore: () => void; diff --git a/packages/hooks/src/useInterval/index.ts b/packages/hooks/src/useInterval/index.ts index 8bf9d8d12f..2b3c0cc6f7 100644 --- a/packages/hooks/src/useInterval/index.ts +++ b/packages/hooks/src/useInterval/index.ts @@ -4,7 +4,7 @@ import { isNumber } from '../utils'; const useInterval = (fn: () => void, delay?: number, options: { immediate?: boolean } = {}) => { const timerCallback = useMemoizedFn(fn); - const timerRef = useRef(null); + const timerRef = useRef | null>(null); const clear = useCallback(() => { if (timerRef.current) { diff --git a/packages/hooks/src/useLatest/__tests__/index.test.ts b/packages/hooks/src/useLatest/__tests__/index.test.ts index 74044703ed..04ad36c4ec 100644 --- a/packages/hooks/src/useLatest/__tests__/index.test.ts +++ b/packages/hooks/src/useLatest/__tests__/index.test.ts @@ -18,11 +18,13 @@ describe('useLatest', () => { }); it('useLatest with reference variable should work', async () => { - const { result, rerender } = setUp({}); + const val1 = {}; + const { result, rerender } = setUp(val1); - expect(result.current.current).toEqual({}); + expect(result.current.current).toBe(val1); - rerender([]); - expect(result.current.current).toEqual([]); + const val2 = []; + rerender(val2); + expect(result.current.current).toBe(val2); }); }); diff --git a/packages/hooks/src/useLatest/demo/demo1.tsx b/packages/hooks/src/useLatest/demo/demo1.tsx index 1d9f6ed2a3..ad1ee3275d 100644 --- a/packages/hooks/src/useLatest/demo/demo1.tsx +++ b/packages/hooks/src/useLatest/demo/demo1.tsx @@ -11,6 +11,7 @@ import { useLatest } from 'ahooks'; export default () => { const [count, setCount] = useState(0); + const [count2, setCount2] = useState(0); const latestCountRef = useLatest(count); @@ -21,9 +22,17 @@ export default () => { return () => clearInterval(interval); }, []); + useEffect(() => { + const interval = setInterval(() => { + setCount2(count2 + 1); + }, 1000); + return () => clearInterval(interval); + }, []); + return ( <> -

count: {count}

+

count(useLatest): {count}

+

count(defult): {count2}

); }; diff --git a/packages/hooks/src/useLocalStorageState/__tests__/index.test.ts b/packages/hooks/src/useLocalStorageState/__tests__/index.test.ts index d7151a52ce..1368ebe922 100644 --- a/packages/hooks/src/useLocalStorageState/__tests__/index.test.ts +++ b/packages/hooks/src/useLocalStorageState/__tests__/index.test.ts @@ -1,10 +1,14 @@ import { renderHook, act } from '@testing-library/react'; +import type { Options } from '../../createUseStorageState'; import useLocalStorageState from '../index'; describe('useLocalStorageState', () => { - const setUp = (key: string, value: T) => + const setUp = (key: string, value: T, options?: Options) => renderHook(() => { - const [state, setState] = useLocalStorageState(key, { defaultValue: value }); + const [state, setState] = useLocalStorageState(key, { + defaultValue: value, + ...options, + }); return { state, setState, @@ -106,4 +110,21 @@ describe('useLocalStorageState', () => { }); expect(hook.result.current.state).toBe('hello world, zhangsan'); }); + + it('should sync state when changes', async () => { + const LOCAL_STORAGE_KEY = 'test-sync-state'; + const hook = setUp(LOCAL_STORAGE_KEY, 'foo', { listenStorageChange: true }); + const anotherHook = setUp(LOCAL_STORAGE_KEY, 'bar', { listenStorageChange: true }); + + expect(hook.result.current.state).toBe('foo'); + expect(anotherHook.result.current.state).toBe('bar'); + + act(() => hook.result.current.setState('baz')); + expect(hook.result.current.state).toBe('baz'); + expect(anotherHook.result.current.state).toBe('baz'); + + act(() => anotherHook.result.current.setState('qux')); + expect(hook.result.current.state).toBe('qux'); + expect(anotherHook.result.current.state).toBe('qux'); + }); }); diff --git a/packages/hooks/src/useLocalStorageState/demo/demo4.tsx b/packages/hooks/src/useLocalStorageState/demo/demo4.tsx new file mode 100644 index 0000000000..8acae72d72 --- /dev/null +++ b/packages/hooks/src/useLocalStorageState/demo/demo4.tsx @@ -0,0 +1,35 @@ +/** + * title: Sync state with localStorage + * desc: When the stored value changes, all `useLocalStorageState` with the same `key` will synchronize their states, including different tabs of the same browser (try to open two tabs of this page, clicking a button on one page will automatically update the "count" on the other page). + * + * title.zh-CN: 将 state 与 localStorage 保持同步 + * desc.zh-CN: 存储值变化时,所有 `key` 相同的 `useLocalStorageState` 会同步状态,包括同一浏览器不同 tab 之间(尝试打开两个此页面,点击其中一个页面的按钮,另一个页面的 count 会自动更新) + */ + +import React from 'react'; +import { useLocalStorageState } from 'ahooks'; + +export default function () { + return ( + <> + + + + ); +} + +function Counter() { + const [count, setCount] = useLocalStorageState('use-local-storage-state-demo4', { + defaultValue: 0, + listenStorageChange: true, + }); + + return ( +
+ + +
+ ); +} diff --git a/packages/hooks/src/useLocalStorageState/index.en-US.md b/packages/hooks/src/useLocalStorageState/index.en-US.md index 2ba8778b8f..f0001eaacf 100644 --- a/packages/hooks/src/useLocalStorageState/index.en-US.md +++ b/packages/hooks/src/useLocalStorageState/index.en-US.md @@ -21,31 +21,46 @@ A Hook that store state into localStorage. +### Sync state with localStorage + + + ## API If you want to delete this record from localStorage, you can use `setState()` or `setState(undefined)`. ```typescript +type SetState = S | ((prevState?: S) => S); + interface Options { defaultValue?: T | (() => T); serializer?: (value: T) => string; deserializer?: (value: string) => T; + onError?: (error: unknown) => void; } const [state, setState] = useLocalStorageState( key: string, options: Options -): [T?, (value?: T | ((previousState: T) => T)) => void]; +): [T?, (value?: SetState) => void]; ``` +### Result + +| Property | Description | Type | +| -------- | --------------------------- | ------------------------------- | +| state | Local `localStorage` value | `T` | +| setState | Update `localStorage` value | `(value?: SetState) => void` | + ### Options -| Property | Description | Type | Default | -| ------------ | ----------------------------- | -------------------------- | ----------------------------- | -| defaultValue | Default value | `any \| (() => any)` | - | -| serializer | Custom serialization method | `(value: any) => string` | `JSON.stringify` | -| deserializer | Custom deserialization method | `(value: string) => any` | `JSON.parse` | -| onError | On error callback | `(error: unknown) => void` | `(e) => { console.error(e) }` | +| Property | Description | Type | Default | +| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------- | ----------------------------- | +| defaultValue | Default value | `any \| (() => any)` | - | +| listenStorageChange | Whether to listen storage changes. If `true`, when the stored value changes, all `useLocalStorageState` with the same `key` will synchronize their states, including different tabs of the same browser | `boolean` | `false` | +| serializer | Custom serialization method | `(value: any) => string` | `JSON.stringify` | +| deserializer | Custom deserialization method | `(value: string) => any` | `JSON.parse` | +| onError | On error callback | `(error: unknown) => void` | `(e) => { console.error(e) }` | ## Remark diff --git a/packages/hooks/src/useLocalStorageState/index.zh-CN.md b/packages/hooks/src/useLocalStorageState/index.zh-CN.md index 55efed2589..a9b84ba3f0 100644 --- a/packages/hooks/src/useLocalStorageState/index.zh-CN.md +++ b/packages/hooks/src/useLocalStorageState/index.zh-CN.md @@ -21,31 +21,46 @@ nav: +### 将 state 与 localStorage 保持同步 + + + ## API 如果想从 localStorage 中删除这条数据,可以使用 `setState()` 或 `setState(undefined)` 。 ```typescript +type SetState = S | ((prevState?: S) => S); + interface Options { defaultValue?: T | (() => T); serializer?: (value: T) => string; deserializer?: (value: string) => T; + onError?: (error: unknown) => void; } const [state, setState] = useLocalStorageState( key: string, options: Options -): [T?, (value?: T | ((previousState: T) => T)) => void]; +): [T?, (value?: SetState) => void]; ``` +### Result + +| 参数 | 说明 | 类型 | +| -------- | ---------------------- | ------------------------------- | +| state | 本地 `localStorage` 值 | `T` | +| setState | 设置 `localStorage` 值 | `(value?: SetState) => void` | + ### Options -| 参数 | 说明 | 类型 | 默认值 | -| ------------ | ------------------ | -------------------------- | ----------------------------- | -| defaultValue | 默认值 | `any \| (() => any)` | - | -| serializer | 自定义序列化方法 | `(value: any) => string` | `JSON.stringify` | -| deserializer | 自定义反序列化方法 | `(value: string) => any` | `JSON.parse` | -| onError | 错误回调函数 | `(error: unknown) => void` | `(e) => { console.error(e) }` | +| 参数 | 说明 | 类型 | 默认值 | +| ------------------- | --------------------------------------------------------------------------------------------------------------------------------- | -------------------------- | ----------------------------- | +| defaultValue | 默认值 | `any \| (() => any)` | - | +| listenStorageChange | 是否监听存储变化。如果是 `true`,当存储值变化时,所有 `key` 相同的 `useLocalStorageState` 会同步状态,包括同一浏览器不同 tab 之间 | `boolean` | `false` | +| serializer | 自定义序列化方法 | `(value: any) => string` | `JSON.stringify` | +| deserializer | 自定义反序列化方法 | `(value: string) => any` | `JSON.parse` | +| onError | 错误回调函数 | `(error: unknown) => void` | `(e) => { console.error(e) }` | ## 备注 diff --git a/packages/hooks/src/useLockFn/index.en-US.md b/packages/hooks/src/useLockFn/index.en-US.md index c570cc4d72..2275287de3 100644 --- a/packages/hooks/src/useLockFn/index.en-US.md +++ b/packages/hooks/src/useLockFn/index.en-US.md @@ -16,7 +16,7 @@ Add lock to an async function to prevent parallel executions. ## API ```typescript -function useLockFn

( +function useLockFn

( fn: (...args: P) => Promise ): fn: (...args: P) => Promise; ``` diff --git a/packages/hooks/src/useLockFn/index.ts b/packages/hooks/src/useLockFn/index.ts index 5ce96fba40..5569a65a1a 100644 --- a/packages/hooks/src/useLockFn/index.ts +++ b/packages/hooks/src/useLockFn/index.ts @@ -1,6 +1,6 @@ import { useRef, useCallback } from 'react'; -function useLockFn

(fn: (...args: P) => Promise) { +function useLockFn

(fn: (...args: P) => Promise) { const lockRef = useRef(false); return useCallback( @@ -9,11 +9,11 @@ function useLockFn

(fn: (...args: P lockRef.current = true; try { const ret = await fn(...args); - lockRef.current = false; return ret; } catch (e) { - lockRef.current = false; throw e; + } finally { + lockRef.current = false; } }, [fn], diff --git a/packages/hooks/src/useLockFn/index.zh-CN.md b/packages/hooks/src/useLockFn/index.zh-CN.md index 61ace21a64..60c48f2759 100644 --- a/packages/hooks/src/useLockFn/index.zh-CN.md +++ b/packages/hooks/src/useLockFn/index.zh-CN.md @@ -16,7 +16,7 @@ nav: ## API ```typescript -function useLockFn

( +function useLockFn

( fn: (...args: P) => Promise ): fn: (...args: P) => Promise; ``` diff --git a/packages/hooks/src/useLongPress/index.en-US.md b/packages/hooks/src/useLongPress/index.en-US.md index ea1163581f..fc7e6aa2a3 100644 --- a/packages/hooks/src/useLongPress/index.en-US.md +++ b/packages/hooks/src/useLongPress/index.en-US.md @@ -27,7 +27,7 @@ Listen for the long press event of the target element. useLongPress( onLongPress: (event: MouseEvent | TouchEvent) => void, target: Target, - options?: { + options: { delay?: number; moveThreshold?: { x?: number; y?: number }; onClick?: (event: MouseEvent | TouchEvent) => void; @@ -42,7 +42,7 @@ useLongPress( | ----------- | ---------------------------- | ----------------------------------------------------------- | ------- | | onLongPress | Trigger function | `(event: MouseEvent \| TouchEvent) => void` | - | | target | DOM node or Ref | `Element` \| `() => Element` \| `MutableRefObject` | - | -| options | Optional configuration items | `Options` | - | +| options | Optional configuration items | `Options` | `{}` | ### Options diff --git a/packages/hooks/src/useLongPress/index.ts b/packages/hooks/src/useLongPress/index.ts index df3f8be751..a676bcef90 100644 --- a/packages/hooks/src/useLongPress/index.ts +++ b/packages/hooks/src/useLongPress/index.ts @@ -87,7 +87,7 @@ function useLongPress( const onMove = (event: TouchEvent) => { if (timerRef.current && overThreshold(event)) { - clearInterval(timerRef.current); + clearTimeout(timerRef.current); timerRef.current = undefined; } }; diff --git a/packages/hooks/src/useLongPress/index.zh-CN.md b/packages/hooks/src/useLongPress/index.zh-CN.md index d1cedd91c3..a3683ca2cf 100644 --- a/packages/hooks/src/useLongPress/index.zh-CN.md +++ b/packages/hooks/src/useLongPress/index.zh-CN.md @@ -27,7 +27,7 @@ nav: useLongPress( onLongPress: (event: MouseEvent | TouchEvent) => void, target: Target, - options?: { + options: { delay?: number; moveThreshold?: { x?: number; y?: number }; onClick?: (event: MouseEvent | TouchEvent) => void; @@ -42,7 +42,7 @@ useLongPress( | ----------- | ---------------- | ----------------------------------------------------------- | ------ | | onLongPress | 触发函数 | `(event: MouseEvent \| TouchEvent) => void` | - | | target | DOM 节点或者 Ref | `Element` \| `() => Element` \| `MutableRefObject` | - | -| options | 可选配置项 | `Options` | - | +| options | 可选配置项 | `Options` | `{}` | ### Options diff --git a/packages/hooks/src/useMemoizedFn/index.en-US.md b/packages/hooks/src/useMemoizedFn/index.en-US.md index 4a42b52724..291837f115 100644 --- a/packages/hooks/src/useMemoizedFn/index.en-US.md +++ b/packages/hooks/src/useMemoizedFn/index.en-US.md @@ -5,7 +5,7 @@ nav: # useMemoizedFn -Hooks for persistent functions. In theory, useMemoizedFn can be used instead of useCallback. +Hooks for persistent functions. In general, useMemoizedFn can be used instead of useCallback. See [FAQ](#faq) for special cases. In some scenarios, we need to use useCallback to cache a function, but when the second parameter deps changes, the function will be regenerated, causing the function reference to change. @@ -42,17 +42,25 @@ const func = useMemoizedFn(() => { ## API ```typescript -const fn = useMemoizedFn(fn: T): T; +const memoizedFn = useMemoizedFn(fn: T): T; ``` ### Result -| Property | Description | Type | -| -------- | -------------------------------------- | ------------------------- | -| fn | Fn the reference address never changes | `(...args: any[]) => any` | +| Property | Description | Type | +| ---------- | ------------------------------------------------- | ------------------------- | +| memoizedFn | Function that the reference address never changes | `(...args: any[]) => any` | ### Params | Property | Description | Type | Default | | -------- | --------------------------------- | ------------------------- | ------- | | fn | Function that require persistence | `(...args: any[]) => any` | - | + +## FAQ + +### The function returned by `useMemoizedFn` will not inherit properties from fn itself? + +The function returned by `useMemoizedFn` is entirely different from the reference of the passed `fn`, and it does not inherit any properties from `fn` itself. If you want to preserve the properties of the function itself after memoization, `useMemoizedFn` currently does not fulfill that requirement. In this case, consider downgrading to using `useCallback` or `useMemo` instead. + +Related issues: [2273](https://github.com/alibaba/hooks/issues/2273) diff --git a/packages/hooks/src/useMemoizedFn/index.ts b/packages/hooks/src/useMemoizedFn/index.ts index fdd2d3cbc9..b297013f55 100644 --- a/packages/hooks/src/useMemoizedFn/index.ts +++ b/packages/hooks/src/useMemoizedFn/index.ts @@ -20,7 +20,7 @@ function useMemoizedFn(fn: T) { // why not write `fnRef.current = fn`? // https://github.com/alibaba/hooks/issues/728 - fnRef.current = useMemo(() => fn, [fn]); + fnRef.current = useMemo(() => fn, [fn]); const memoizedFn = useRef>(); if (!memoizedFn.current) { diff --git a/packages/hooks/src/useMemoizedFn/index.zh-CN.md b/packages/hooks/src/useMemoizedFn/index.zh-CN.md index 0bf7c8bed0..a3017c9846 100644 --- a/packages/hooks/src/useMemoizedFn/index.zh-CN.md +++ b/packages/hooks/src/useMemoizedFn/index.zh-CN.md @@ -5,7 +5,7 @@ nav: # useMemoizedFn -持久化 function 的 Hook,理论上,可以使用 useMemoizedFn 完全代替 useCallback。 +持久化 function 的 Hook,一般情况下,可以使用 useMemoizedFn 完全代替 useCallback,特殊情况见 [FAQ](#faq)。 在某些场景中,我们需要使用 useCallback 来记住一个函数,但是在第二个参数 deps 变化时,会重新生成函数,导致函数地址变化。 @@ -42,17 +42,25 @@ const func = useMemoizedFn(() => { ## API ```typescript -const fn = useMemoizedFn(fn: T): T; +const memoizedFn = useMemoizedFn(fn: T): T; ``` ### Result -| 参数 | 说明 | 类型 | -| ---- | ------------------------- | ------------------------- | -| fn | 引用地址永远不会变化的 fn | `(...args: any[]) => any` | +| 参数 | 说明 | 类型 | +| ---------- | -------------------------- | ------------------------- | +| memoizedFn | 引用地址永远不会变化的函数 | `(...args: any[]) => any` | ### Params | 参数 | 说明 | 类型 | 默认值 | | ---- | ---------------- | ------------------------- | ------ | | fn | 需要持久化的函数 | `(...args: any[]) => any` | - | + +## FAQ + +### `useMemoizedFn` 返回的函数没有继承 fn 自身的属性? + +`useMemoizedFn` 返回的函数与传入的 fn 的引用完全不同,且没有继承 fn 自身的属性。如果想要持久化后函数自身的属性不丢失,目前 `useMemoizedFn` 满足不了,请降级使用 `useCallback`、`useMemo`。 + +Related issues: [2273](https://github.com/alibaba/hooks/issues/2273) diff --git a/packages/hooks/src/useRafInterval/index.ts b/packages/hooks/src/useRafInterval/index.ts index ecdab92cfa..15ad94226c 100644 --- a/packages/hooks/src/useRafInterval/index.ts +++ b/packages/hooks/src/useRafInterval/index.ts @@ -3,7 +3,7 @@ import useLatest from '../useLatest'; import { isNumber } from '../utils'; interface Handle { - id: number | NodeJS.Timer; + id: number | ReturnType; } const setRafInterval = function (callback: () => void, delay: number = 0): Handle { @@ -12,15 +12,15 @@ const setRafInterval = function (callback: () => void, delay: number = 0): Handl id: setInterval(callback, delay), }; } - let start = new Date().getTime(); + let start = Date.now(); const handle: Handle = { id: 0, }; const loop = () => { - const current = new Date().getTime(); + const current = Date.now(); if (current - start >= delay) { callback(); - start = new Date().getTime(); + start = Date.now(); } handle.id = requestAnimationFrame(loop); }; @@ -28,7 +28,7 @@ const setRafInterval = function (callback: () => void, delay: number = 0): Handl return handle; }; -function cancelAnimationFrameIsNotDefined(t: any): t is NodeJS.Timer { +function cancelAnimationFrameIsNotDefined(t: any): t is ReturnType { return typeof cancelAnimationFrame === typeof undefined; } @@ -51,27 +51,25 @@ function useRafInterval( const fnRef = useLatest(fn); const timerRef = useRef(); + const clear = useCallback(() => { + if (timerRef.current) { + clearRafInterval(timerRef.current); + } + }, []); + useEffect(() => { - if (!isNumber(delay) || delay < 0) return; + if (!isNumber(delay) || delay < 0) { + return; + } if (immediate) { fnRef.current(); } timerRef.current = setRafInterval(() => { fnRef.current(); }, delay); - return () => { - if (timerRef.current) { - clearRafInterval(timerRef.current); - } - }; + return clear; }, [delay]); - const clear = useCallback(() => { - if (timerRef.current) { - clearRafInterval(timerRef.current); - } - }, []); - return clear; } diff --git a/packages/hooks/src/useRafTimeout/index.ts b/packages/hooks/src/useRafTimeout/index.ts index a0a5cd3af4..e9b6ed12eb 100644 --- a/packages/hooks/src/useRafTimeout/index.ts +++ b/packages/hooks/src/useRafTimeout/index.ts @@ -46,24 +46,20 @@ function useRafTimeout(fn: () => void, delay: number | undefined) { const fnRef = useLatest(fn); const timerRef = useRef(); + const clear = useCallback(() => { + if (timerRef.current) { + clearRafTimeout(timerRef.current); + } + }, []); + useEffect(() => { if (!isNumber(delay) || delay < 0) return; timerRef.current = setRafTimeout(() => { fnRef.current(); }, delay); - return () => { - if (timerRef.current) { - clearRafTimeout(timerRef.current); - } - }; + return clear; }, [delay]); - const clear = useCallback(() => { - if (timerRef.current) { - clearRafTimeout(timerRef.current); - } - }, []); - return clear; } diff --git a/packages/hooks/src/useReactive/__tests__/index.test.tsx b/packages/hooks/src/useReactive/__tests__/index.test.tsx index c261658709..954d3b71ec 100644 --- a/packages/hooks/src/useReactive/__tests__/index.test.tsx +++ b/packages/hooks/src/useReactive/__tests__/index.test.tsx @@ -195,6 +195,36 @@ describe('test useReactive feature', () => { expect(() => result.current.v.Module).not.toThrowError(); }); + it('test JSX element', () => { + const hook = renderHook(() => useReactive({ html:

foo
})); + const proxy = hook.result.current; + const wrap = render(proxy.html); + const html = wrap.getByRole('id'); + + expect(html.textContent).toBe('foo'); + act(() => { + proxy.html =
bar
; + wrap.rerender(proxy.html); + }); + expect(html.textContent).toBe('bar'); + hook.unmount(); + }); + + it('test read-only and non-configurable data property', () => { + const obj = {} as { user: { name: string } }; + Reflect.defineProperty(obj, 'user', { + value: { name: 'foo' }, + writable: false, + configurable: false, + }); + + const hook = renderHook(() => useReactive(obj)); + const proxy = hook.result.current; + + expect(() => proxy.user.name).not.toThrowError(); + hook.unmount(); + }); + it('test input1', () => { const wrap = render(); diff --git a/packages/hooks/src/useReactive/index.ts b/packages/hooks/src/useReactive/index.ts index 1543e9b3aa..48b04fda2b 100644 --- a/packages/hooks/src/useReactive/index.ts +++ b/packages/hooks/src/useReactive/index.ts @@ -1,5 +1,5 @@ import { useRef } from 'react'; -import { isPlainObject } from 'lodash-es'; +import isPlainObject from 'lodash/isPlainObject'; import useCreation from '../useCreation'; import useUpdate from '../useUpdate'; @@ -26,6 +26,12 @@ function observer>(initialVal: T, cb: () => void): get(target, key, receiver) { const res = Reflect.get(target, key, receiver); + // https://github.com/alibaba/hooks/issues/1317 + const descriptor = Reflect.getOwnPropertyDescriptor(target, key); + if (!descriptor?.configurable && !descriptor?.writable) { + return res; + } + // Only proxy plain object or array, // otherwise it will cause: https://github.com/alibaba/hooks/issues/2080 return isPlainObject(res) || Array.isArray(res) ? observer(res, cb) : res; diff --git a/packages/hooks/src/useRequest/__tests__/useLoadingDelayPlugin.test.ts b/packages/hooks/src/useRequest/__tests__/useLoadingDelayPlugin.test.ts index 35765f90da..cd58c81e25 100644 --- a/packages/hooks/src/useRequest/__tests__/useLoadingDelayPlugin.test.ts +++ b/packages/hooks/src/useRequest/__tests__/useLoadingDelayPlugin.test.ts @@ -1,4 +1,5 @@ import { act, renderHook, waitFor } from '@testing-library/react'; +import type { RenderHookResult } from '@testing-library/react'; import useRequest from '../index'; import { request } from '../../utils/testingHelpers'; @@ -6,8 +7,12 @@ describe('useLoadingDelayPlugin', () => { jest.useFakeTimers(); const setUp = (service, options) => renderHook((o) => useRequest(service, o || options)); + let hook: RenderHookResult, any>; + + afterEach(() => { + hook.unmount(); + }); - let hook; it('useLoadingDelayPlugin should work', async () => { act(() => { hook = setUp(request, { @@ -53,7 +58,7 @@ describe('useLoadingDelayPlugin', () => { jest.advanceTimersByTime(3000); }); - expect(hook.result.current.loading).toBe(false); + await waitFor(() => expect(hook.result.current.loading).toBe(false)); }); it('useLoadingDelayPlugin should update loading when ready is undefined', async () => { @@ -68,6 +73,6 @@ describe('useLoadingDelayPlugin', () => { jest.advanceTimersByTime(3000); }); - expect(hook.result.current.loading).toBe(true); + await waitFor(() => expect(hook.result.current.loading).toBe(true)); }); }); diff --git a/packages/hooks/src/useRequest/doc/cache/cache.en-US.md b/packages/hooks/src/useRequest/doc/cache/cache.en-US.md index d521283d6f..58dce1b057 100644 --- a/packages/hooks/src/useRequest/doc/cache/cache.en-US.md +++ b/packages/hooks/src/useRequest/doc/cache/cache.en-US.md @@ -29,10 +29,12 @@ By setting `staleTime`, we can specify the data retention time, during which tim ### Data sharing -The content of the same `cacheKey` is shared globally, which will bring the following features +> Note: If no new request is issued, the "Data sharing" will not be triggered. `cacheTime` and `staleTime` parameters will invalidate "Data sharing". [#2313](https://github.com/alibaba/hooks/issues/2313) -- Sharing request `Promise`, only one of the same `cacheKey` will initiate a request at the same time, and the subsequent ones will share the same request `Promise`. -- Data synchronization. At any time, when we change the content of one of the `cacheKey`, the content of the other `cacheKey` will be synchronized. +The content of the same `cacheKey` is shared globally, which will bring the following features: + +- Sharing request `Promise`: Only one of the same `cacheKey` will initiate a request at the same time, and the subsequent ones will share the same request `Promise`. +- Data synchronization: When a request is made by one `cacheKey`, the contents of other identical `cacheKey` will be synchronized accordingly. In the following example, the two components will only initiate one request during initialization. And the content of the two articles is always synchronized. @@ -77,7 +79,7 @@ interface CachedData { | Property | Description | Type | Default | | --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------- | -------- | -| cacheKey | A unique ID of the request. If `cacheKey` is set, we will enable the caching mechanism. The data of the same `cacheKey` is globally synchronized. | `string` | - | +| cacheKey | A unique ID of the request. Data of the same `cacheKey` will synchronized globally (`cacheTime` and `staleTime` parameters will invalidate this mechanism, see demo: [Data sharing](#data-sharing)) | `string` | - | | cacheTime |
  • Set the cache time. By default, the cached data will be cleared after 5 minutes.
  • If set to `-1`, the cached data will never expire
| `number` | `300000` | | staleTime |
  • Time to consider the cached data is fresh. Within this time interval, the request will not be re-initiated
  • If set to `-1`, it means that the data is always fresh
| `number` | `0` | | setCache |
  • Custom set cache
  • `setCache` and `getCache` need to be used together
  • In the custom cache mode, `cacheTime` and `clearCache` are useless, please implement it yourself according to the actual situation.
| `(data: CachedData) => void;` | - | diff --git a/packages/hooks/src/useRequest/doc/cache/cache.zh-CN.md b/packages/hooks/src/useRequest/doc/cache/cache.zh-CN.md index d5bfc547ca..4ec3444abf 100644 --- a/packages/hooks/src/useRequest/doc/cache/cache.zh-CN.md +++ b/packages/hooks/src/useRequest/doc/cache/cache.zh-CN.md @@ -29,10 +29,12 @@ group: ### 数据共享 -同一个 `cacheKey` 的内容,在全局是共享的,这会带来以下几个特性 +> 注意:如果没有发起新请求,不会触发数据共享。`cacheTime`、`staleTime` 参数会使数据共享失效。[#2313](https://github.com/alibaba/hooks/issues/2313) -- 请求 `Promise` 共享,相同的 `cacheKey` 同时只会有一个在发起请求,后发起的会共用同一个请求 `Promise` -- 数据同步,任何时候,当我们改变其中某个 `cacheKey` 的内容时,其它相同 `cacheKey` 的内容均会同步 +同一个 `cacheKey` 的内容,在全局是共享的,这会带来以下几个特性: + +- 请求 `Promise` 共享:相同的 `cacheKey` 同时只会有一个在发起请求,后发起的会共用同一个请求 `Promise` +- 数据同步:当某个 `cacheKey` 发起请求时,其它相同 `cacheKey` 的内容均会随之同步 下面的示例中,初始化时,两个组件只会发起一个请求。并且两篇文章的内容永远是同步的。 @@ -77,7 +79,7 @@ interface CachedData { | 参数 | 说明 | 类型 | 默认值 | | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------- | -------- | -| cacheKey | 请求唯一标识。如果设置了 `cacheKey`,我们会启用缓存机制。同一个 `cacheKey` 的数据全局同步。 | `string` | - | +| cacheKey | 请求的唯一标识。相同 `cacheKey` 的数据全局同步(`cacheTime`、`staleTime` 参数会使该机制失效,见示例:[数据共享](#数据共享))。 | `string` | - | | cacheTime |
  • 设置缓存数据回收时间。默认缓存数据 5 分钟后回收
  • 如果设置为 `-1`, 则表示缓存数据永不过期
| `number` | `300000` | | staleTime |
  • 缓存数据保持新鲜时间。在该时间间隔内,认为数据是新鲜的,不会重新发请求
  • 如果设置为 `-1`,则表示数据永远新鲜
| `number` | `0` | | setCache |
  • 自定义设置缓存
  • `setCache` 和 `getCache` 需要配套使用
  • 在自定义缓存模式下,`cacheTime` 和 `clearCache` 不会生效,请根据实际情况自行实现。
| `(data: CachedData) => void;` | - | diff --git a/packages/hooks/src/useRequest/doc/polling/polling.en-US.md b/packages/hooks/src/useRequest/doc/polling/polling.en-US.md index 495b46706c..56c69db578 100644 --- a/packages/hooks/src/useRequest/doc/polling/polling.en-US.md +++ b/packages/hooks/src/useRequest/doc/polling/polling.en-US.md @@ -58,4 +58,5 @@ You can experience the effect through the following example. - `options.pollingInterval`, `options.pollingWhenHidden` support dynamic changes. - If you set `options.manual = true`, the initialization will not start polling, you need start it by `run/runAsync`. +- If the `pollingInterval` changes from 0 to a value greater than 0, polling will not start automatically, and you need start it by `run/runAsync`. - The polling logic is to wait for `pollingInterval` time after each request is completed, and then initiate the next request. diff --git a/packages/hooks/src/useRequest/doc/polling/polling.zh-CN.md b/packages/hooks/src/useRequest/doc/polling/polling.zh-CN.md index b043adf048..b124f49d02 100644 --- a/packages/hooks/src/useRequest/doc/polling/polling.zh-CN.md +++ b/packages/hooks/src/useRequest/doc/polling/polling.zh-CN.md @@ -50,7 +50,7 @@ const { data, run, cancel } = useRequest(getUsername, { | 参数 | 说明 | 类型 | 默认值 | | ---------------------- | ------------------------------------------------------------------------------------------------------ | --------- | ------ | -| pollingInterval | 轮询间隔,单位为毫秒。如果值大于 0,则启动轮询模式。 | `number` | `0` | +| pollingInterval | 轮询间隔,单位为毫秒。如果值大于 0,则处于轮询模式。 | `number` | `0` | | pollingWhenHidden | 在页面隐藏时,是否继续轮询。如果设置为 false,在页面隐藏时会暂时停止轮询,页面重新显示时继续上次轮询。 | `boolean` | `true` | | pollingErrorRetryCount | 轮询错误重试次数。如果设置为 -1,则无限次 | `number` | `-1` | @@ -58,4 +58,5 @@ const { data, run, cancel } = useRequest(getUsername, { - `options.pollingInterval`、`options.pollingWhenHidden` 支持动态变化。 - 如果设置 `options.manual = true`,则初始化不会启动轮询,需要通过 `run/runAsync` 触发开始。 +- 如果设置 `pollingInterval` 由 `0` 变成 `大于 0` 的值,不会启动轮询,需要通过 `run/runAsync` 触发开始。 - 轮询原理是在每次请求完成后,等待 `pollingInterval` 时间,发起下一次请求。 diff --git a/packages/hooks/src/useRequest/doc/ready/ready.en-US.md b/packages/hooks/src/useRequest/doc/ready/ready.en-US.md index 6baac8b28d..0e3d6b0caa 100644 --- a/packages/hooks/src/useRequest/doc/ready/ready.en-US.md +++ b/packages/hooks/src/useRequest/doc/ready/ready.en-US.md @@ -7,7 +7,7 @@ group: # Ready -useRequest provides an `options.ready`, when its value is `false`, the request will never be sent. +By setting `options.ready`, you can control whether a request is sent. When its value is `false`, the request will never be sent. The specific behavior is as follows: diff --git a/packages/hooks/src/useRequest/doc/ready/ready.zh-CN.md b/packages/hooks/src/useRequest/doc/ready/ready.zh-CN.md index b2f5c802a9..9b04d6e705 100644 --- a/packages/hooks/src/useRequest/doc/ready/ready.zh-CN.md +++ b/packages/hooks/src/useRequest/doc/ready/ready.zh-CN.md @@ -7,7 +7,7 @@ group: # Ready -useRequest 提供了一个 `options.ready` 参数,当其值为 `false` 时,请求永远都不会发出。 +通过设置 `options.ready`,可以控制请求是否发出。当其值为 `false` 时,请求永远都不会发出。 其具体行为如下: diff --git a/packages/hooks/src/useRequest/doc/refreshDeps/demo/refreshDeps.tsx b/packages/hooks/src/useRequest/doc/refreshDeps/demo/refreshDeps.tsx index 531407e769..a9cb3020fd 100644 --- a/packages/hooks/src/useRequest/doc/refreshDeps/demo/refreshDeps.tsx +++ b/packages/hooks/src/useRequest/doc/refreshDeps/demo/refreshDeps.tsx @@ -1,45 +1,37 @@ +/** + * title: Repeat last request + * desc: When the dependency array changes, use the previous parameters to make the request again. + * + * title.zh-CN: 重复上一次请求 + * desc.zh-CN: 依赖数组变化时,使用上一次的参数重新发起请求。 + */ + import React, { useState } from 'react'; +import Mock from 'mockjs'; +import { Space, Button } from 'antd'; import { useRequest } from 'ahooks'; -const userSchool = (id: string) => { - switch (id) { - case '1': - return 'Tsinghua University'; - case '2': - return 'Beijing University'; - case '3': - return 'Zhejiang University'; - default: - return ''; - } -}; +function getUsername(id: number): Promise { + console.log('getUsername id:', id); -async function getUserSchool(userId: string): Promise { return new Promise((resolve) => { setTimeout(() => { - resolve(userSchool(userId)); + resolve(Mock.mock('@name')); }, 1000); }); } export default () => { - const [userId, setUserId] = useState('1'); - const { data, loading } = useRequest(() => getUserSchool(userId), { + const [userId, setUserId] = useState(); + const { data, loading, run } = useRequest((id: number) => getUsername(id), { refreshDeps: [userId], }); return ( -
- -

School: {loading ? 'Loading' : data}

-
+ +

Username: {loading ? 'loading...' : data}

+ + +
); }; diff --git a/packages/hooks/src/useRequest/doc/refreshDeps/demo/refreshDepsAction.tsx b/packages/hooks/src/useRequest/doc/refreshDeps/demo/refreshDepsAction.tsx new file mode 100644 index 0000000000..63007e9181 --- /dev/null +++ b/packages/hooks/src/useRequest/doc/refreshDeps/demo/refreshDepsAction.tsx @@ -0,0 +1,50 @@ +/** + * title: Custom refresh + * desc: This example shows that when the dependency array changes, it checks the parameters' validity first and then makes a new request. + * + * title.zh-CN: 自定义刷新行为 + * desc.zh-CN: 该示例展示了当依赖数组变化时,首先校验参数合法性,然后发起新的请求。 + */ + +import React, { useState } from 'react'; +import Mock from 'mockjs'; +import isNumber from 'lodash/isNumber'; +import { Button, Space } from 'antd'; +import { useRequest } from 'ahooks'; + +function getUsername(id: number): Promise { + console.log('getUsername id:', id); + + return new Promise((resolve) => { + setTimeout(() => { + resolve(Mock.mock('@name')); + }, 1000); + }); +} + +export default () => { + const [userId, setUserId] = useState(); + const { data, loading, run } = useRequest((id: number) => getUsername(id), { + refreshDeps: [userId], + refreshDepsAction: () => { + if (!isNumber(userId)) { + console.log( + `parameter "userId" expected to be a number, but got ${typeof userId}.`, + userId, + ); + return; + } + run(userId); + }, + }); + + return ( + +

Username: {loading ? 'loading...' : data}

+ + +
+ ); +}; diff --git a/packages/hooks/src/useRequest/doc/refreshDeps/refresyDeps.en-US.md b/packages/hooks/src/useRequest/doc/refreshDeps/refresyDeps.en-US.md index 3e4e85e0e3..f1263e2e22 100644 --- a/packages/hooks/src/useRequest/doc/refreshDeps/refresyDeps.en-US.md +++ b/packages/hooks/src/useRequest/doc/refreshDeps/refresyDeps.en-US.md @@ -7,11 +7,10 @@ group: # RefreshDeps -useRequest provides an `options.refreshDeps`, which will trigger the request refresh when its value changes. +By setting `options.refreshDeps`, `useRequest` will run [refresh](https://ahooks.js.org/hooks/use-request/basic/#result) automatically when dependencies change, achieving the effect of [Refresh (repeat the last request)](https://ahooks.js.org/hooks/use-request/basic/#refresh-repeat-the-last-request). ```tsx | pure const [userId, setUserId] = useState('1'); - const { data, run } = useRequest(() => getUserSchool(userId), { refreshDeps: [userId], }); @@ -23,7 +22,6 @@ It is exactly the same with the following implementation ```tsx | pure const [userId, setUserId] = useState('1'); - const { data, refresh } = useRequest(() => getUserSchool(userId)); useEffect(() => { @@ -31,14 +29,23 @@ useEffect(() => { }, [userId]); ``` -You can experience the effect through the following example +### Repeat last request +### Custom refresh + + + ## API ### Options -| Property | Description | Type | Default | -| ----------- | ------------------------------------------------------- | ---------------------- | ------- | -| refreshDeps | When the content of the array changes, trigger refresh. | `React.DependencyList` | `[]` | +| Property | Description | Type | Default | +| ----------------- | ------------------------------------------------------------------------------------------------------------- | ---------------------- | ------- | +| refreshDeps | When the content of the array changes, trigger refresh. | `React.DependencyList` | `[]` | +| refreshDepsAction | Customize the request behavior during dependency refresh; this parameter is invoked when dependencies change. | `() => void` | - | + +## Remark + +- If you set `options.manual = true`, both `refreshDeps` and `refreshDepsAction` are no longer effective, you need to trigger the request by `run/runAsync`. diff --git a/packages/hooks/src/useRequest/doc/refreshDeps/refresyDeps.zh-CN.md b/packages/hooks/src/useRequest/doc/refreshDeps/refresyDeps.zh-CN.md index 4dfe7c3de9..aff568171a 100644 --- a/packages/hooks/src/useRequest/doc/refreshDeps/refresyDeps.zh-CN.md +++ b/packages/hooks/src/useRequest/doc/refreshDeps/refresyDeps.zh-CN.md @@ -7,11 +7,10 @@ group: # 依赖刷新 -useRequest 提供了一个 `options.refreshDeps` 参数,当它的值变化后,会重新触发请求。 +通过设置 `options.refreshDeps`,在依赖变化时, `useRequest` 会自动调用 [refresh](https://ahooks.js.org/zh-CN/hooks/use-request/basic/#result) 方法,实现[刷新(重复上一次请求)](https://ahooks.js.org/zh-CN/hooks/use-request/basic/#刷新重复上一次请求)的效果。 ```tsx | pure const [userId, setUserId] = useState('1'); - const { data, run } = useRequest(() => getUserSchool(userId), { refreshDeps: [userId], }); @@ -23,7 +22,6 @@ const { data, run } = useRequest(() => getUserSchool(userId), { ```tsx | pure const [userId, setUserId] = useState('1'); - const { data, refresh } = useRequest(() => getUserSchool(userId)); useEffect(() => { @@ -31,14 +29,23 @@ useEffect(() => { }, [userId]); ``` -你可以通过下面示例来体验效果 +### 重复上一次请求 +### 自定义刷新行为 + + + ## API ### Options -| 参数 | 说明 | 类型 | 默认值 | -| ----------- | ------------------------------------------------------------------- | ------- | ------ | -| refreshDeps | 依赖数组,当数组内容变化后,发起请求。同 `useEffect` 的第二个参数。 | `any[]` | `[]` | +| 参数 | 说明 | 类型 | 默认值 | +| ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | ------ | +| refreshDeps | 依赖数组。当数组内容变化后[刷新(重复上一次请求)](https://ahooks.js.org/zh-CN/hooks/use-request/basic/#刷新重复上一次请求)。同 `useEffect` 的第二个参数。 | `any[]` | `[]` | +| refreshDepsAction | 自定义依赖数组变化时的请求行为。 | `() => void` | - | + +## 备注 + +- 如果设置 `options.manual = true`,则 `refreshDeps`, `refreshDepsAction` 都不再生效,需要通过 `run/runAsync` 手动触发请求。 diff --git a/packages/hooks/src/useRequest/src/plugins/useDebouncePlugin.ts b/packages/hooks/src/useRequest/src/plugins/useDebouncePlugin.ts index e6e264e029..84c548d287 100644 --- a/packages/hooks/src/useRequest/src/plugins/useDebouncePlugin.ts +++ b/packages/hooks/src/useRequest/src/plugins/useDebouncePlugin.ts @@ -1,5 +1,5 @@ -import type { DebouncedFunc, DebounceSettings } from 'lodash-es'; -import { debounce } from 'lodash-es'; +import type { DebouncedFunc, DebounceSettings } from 'lodash'; +import debounce from 'lodash/debounce'; import { useEffect, useMemo, useRef } from 'react'; import type { Plugin } from '../types'; diff --git a/packages/hooks/src/useRequest/src/plugins/useThrottlePlugin.ts b/packages/hooks/src/useRequest/src/plugins/useThrottlePlugin.ts index 6f2fc2c386..955c331d41 100644 --- a/packages/hooks/src/useRequest/src/plugins/useThrottlePlugin.ts +++ b/packages/hooks/src/useRequest/src/plugins/useThrottlePlugin.ts @@ -1,5 +1,5 @@ -import type { DebouncedFunc, ThrottleSettings } from 'lodash-es'; -import { throttle } from 'lodash-es'; +import type { DebouncedFunc, ThrottleSettings } from 'lodash'; +import throttle from 'lodash/throttle'; import { useEffect, useRef } from 'react'; import type { Plugin } from '../types'; diff --git a/packages/hooks/src/useResetState/__tests__/index.test.ts b/packages/hooks/src/useResetState/__tests__/index.test.ts index 8728302445..b4fa76640b 100644 --- a/packages/hooks/src/useResetState/__tests__/index.test.ts +++ b/packages/hooks/src/useResetState/__tests__/index.test.ts @@ -2,9 +2,9 @@ import { act, renderHook } from '@testing-library/react'; import useResetState from '../index'; describe('useResetState', () => { - const setUp = (initialState: S) => + const setUp = (initialState) => renderHook(() => { - const [state, setState, resetState] = useResetState(initialState); + const [state, setState, resetState] = useResetState(initialState); return { state, @@ -20,6 +20,13 @@ describe('useResetState', () => { expect(hook.result.current.state).toEqual({ hello: 'world' }); }); + it('should support functional initialValue', () => { + const hook = setUp(() => ({ + hello: 'world', + })); + expect(hook.result.current.state).toEqual({ hello: 'world' }); + }); + it('should reset state', () => { const hook = setUp({ hello: '', @@ -49,4 +56,38 @@ describe('useResetState', () => { }); expect(hook.result.current.state).toEqual({ count: 1 }); }); + + it('should keep random initial state', () => { + const random = Math.random(); + const hook = setUp({ + count: random, + }); + + act(() => { + hook.result.current.setState({ count: Math.random() }); + }); + + act(() => { + hook.result.current.resetState(); + }); + + expect(hook.result.current.state).toEqual({ count: random }); + }); + + it('should support random functional initialValue', () => { + const random = Math.random(); + const hook = setUp(() => ({ + count: random, + })); + + act(() => { + hook.result.current.setState({ count: Math.random() }); + }); + + act(() => { + hook.result.current.resetState(); + }); + + expect(hook.result.current.state).toEqual({ count: random }); + }); }); diff --git a/packages/hooks/src/useResetState/demo/demo1.tsx b/packages/hooks/src/useResetState/demo/demo1.tsx index 5a98c7f876..d77bd29ecf 100644 --- a/packages/hooks/src/useResetState/demo/demo1.tsx +++ b/packages/hooks/src/useResetState/demo/demo1.tsx @@ -1,33 +1,37 @@ -import React from 'react'; +import React, { useMemo } from 'react'; +import { Button, Space } from 'antd'; import { useResetState } from 'ahooks'; -interface State { - hello: string; - count: number; -} - export default () => { - const [state, setState, resetState] = useResetState({ + const initialValue = { hello: '', - count: 0, - }); + value: Math.random(), + }; + const initialValueMemo = useMemo(() => { + return initialValue; + }, []); + + const [state, setState, resetState] = useResetState(initialValue); return (
+
initial state:
+
{JSON.stringify(initialValueMemo, null, 2)}
+
current state:
{JSON.stringify(state, null, 2)}
-

- - - -

+ set hello and value + + +
); }; diff --git a/packages/hooks/src/useResetState/index.ts b/packages/hooks/src/useResetState/index.ts index bcff86c842..eaa7d6000e 100644 --- a/packages/hooks/src/useResetState/index.ts +++ b/packages/hooks/src/useResetState/index.ts @@ -1,16 +1,25 @@ -import { useState } from 'react'; +import { useRef, useState } from 'react'; import type { Dispatch, SetStateAction } from 'react'; +import { isFunction } from '../utils'; import useMemoizedFn from '../useMemoizedFn'; +import useCreation from '../useCreation'; type ResetState = () => void; const useResetState = ( initialState: S | (() => S), ): [S, Dispatch>, ResetState] => { - const [state, setState] = useState(initialState); + const initialStateRef = useRef(initialState); + const initialStateMemo = useCreation( + () => + isFunction(initialStateRef.current) ? initialStateRef.current() : initialStateRef.current, + [], + ); + + const [state, setState] = useState(initialStateMemo); const resetState = useMemoizedFn(() => { - setState(initialState); + setState(initialStateMemo); }); return [state, setState, resetState]; diff --git a/packages/hooks/src/useResponsive/__tests__/index.test.ts b/packages/hooks/src/useResponsive/__tests__/index.test.ts index f3fd4ccc45..0ece26a151 100644 --- a/packages/hooks/src/useResponsive/__tests__/index.test.ts +++ b/packages/hooks/src/useResponsive/__tests__/index.test.ts @@ -1,5 +1,5 @@ import { renderHook, act } from '../../utils/tests'; -import { useResponsive } from '../'; +import useResponsive from '../'; describe('useResponsive', () => { function changeWidth(width: number) { diff --git a/packages/hooks/src/useResponsive/index.ts b/packages/hooks/src/useResponsive/index.ts index 406a161ff6..117d8a43af 100644 --- a/packages/hooks/src/useResponsive/index.ts +++ b/packages/hooks/src/useResponsive/index.ts @@ -49,7 +49,7 @@ export function configResponsive(config: ResponsiveConfig) { if (info) calculate(); } -export function useResponsive() { +function useResponsive() { if (isBrowser && !listening) { info = {}; calculate(); @@ -83,3 +83,5 @@ export function useResponsive() { return state; } + +export default useResponsive; diff --git a/packages/hooks/src/useSelections/__tests__/index.test.ts b/packages/hooks/src/useSelections/__tests__/index.test.ts index ea943f0f90..07088485f0 100644 --- a/packages/hooks/src/useSelections/__tests__/index.test.ts +++ b/packages/hooks/src/useSelections/__tests__/index.test.ts @@ -1,125 +1,244 @@ import { act, renderHook } from '@testing-library/react'; +import { useState } from 'react'; import useSelections from '../index'; +import type { Options } from '../index'; -const data = [1, 2, 3]; +const _data = [1, 2, 3]; +const _selected = [1]; +const _selectedItem = 1; -const setup = (items: T[], defaultSelected?: T[]) => { - return renderHook(() => useSelections(items, defaultSelected)); +const _dataObj = [{ id: 1 }, { id: 2 }, { id: 3 }]; +const _selectedObj = [{ id: 1 }]; +const _selectedItemObj = { id: 1 }; + +const setup = (items: T[], options?: T[] | Options) => { + return renderHook(() => useSelections(items, options)); +}; + +interface CaseCallback { + (data: T[], selected: T[], selectedItem: T): void; +} + +const runCaseCallback = ( + dataCallback: CaseCallback, + objDataCallback: CaseCallback, +) => { + dataCallback(_data, _selected, _selectedItem); + objDataCallback(_dataObj, _selectedObj, _selectedItemObj); }; describe('useSelections', () => { it('defaultSelected should work correct', () => { - const { result } = setup(data, [1]); - expect(result.current.selected).toEqual([1]); - expect(result.current.isSelected(1)).toBe(true); + const caseCallback: CaseCallback = (data, selected, selectedItem) => { + const { result } = setup(data, { + defaultSelected: selected, + itemKey: 'id', + }); + + expect(result.current.selected).toEqual(selected); + expect(result.current.isSelected(selectedItem)).toBe(true); + }; + + runCaseCallback(caseCallback, caseCallback); }); it('select and unSelect should work correct', () => { - const { result } = setup(data, [1]); - const { unSelect, select } = result.current; - act(() => { - unSelect(1); - }); - expect(result.current.selected).toEqual([]); - expect(result.current.isSelected(1)).toBe(false); - expect(result.current.allSelected).toBe(false); - act(() => { - select(1); - }); - expect(result.current.selected).toEqual([1]); - expect(result.current.isSelected(1)).toBe(true); - expect(result.current.allSelected).toBe(false); + const caseCallback: CaseCallback = (data, selected, selectedItem) => { + const { result } = setup(data, { + defaultSelected: selected, + itemKey: 'id', + }); + const { unSelect, select } = result.current; + + act(() => { + unSelect(selectedItem); + }); + expect(result.current.selected).toEqual([]); + expect(result.current.isSelected(selectedItem)).toBe(false); + expect(result.current.allSelected).toBe(false); + + act(() => { + select(selectedItem); + }); + expect(result.current.selected).toEqual(selected); + expect(result.current.isSelected(selectedItem)).toBe(true); + expect(result.current.allSelected).toBe(false); + }; + + runCaseCallback(caseCallback, caseCallback); }); it('toggle should work correct', () => { - const { result } = setup(data); - const { toggle } = result.current; - act(() => { - toggle(1); - }); - expect(result.current.selected).toEqual([1]); - expect(result.current.isSelected(1)).toBe(true); - expect(result.current.allSelected).toBe(false); - act(() => { - toggle(1); - }); - expect(result.current.selected).toEqual([]); - expect(result.current.isSelected(1)).toBe(false); - expect(result.current.allSelected).toBe(false); + const caseCallback: CaseCallback = (data, selected, selectedItem) => { + const { result } = setup(data, { + itemKey: 'id', + }); + const { toggle } = result.current; + + act(() => { + toggle(selectedItem); + }); + expect(result.current.selected).toEqual(selected); + expect(result.current.isSelected(selectedItem)).toBe(true); + expect(result.current.allSelected).toBe(false); + + act(() => { + toggle(selectedItem); + }); + expect(result.current.selected).toEqual([]); + expect(result.current.isSelected(selectedItem)).toBe(false); + expect(result.current.allSelected).toBe(false); + }; + + runCaseCallback(caseCallback, caseCallback); }); it('selectAll and unSelectAll should work correct', async () => { - const { result } = setup(data); - const { selectAll, unSelectAll } = result.current; - - expect(result.current.noneSelected).toBe(true); - act(() => { - selectAll(); - }); - expect(result.current.selected).toEqual([1, 2, 3]); - expect(result.current.allSelected).toBe(true); - expect(result.current.noneSelected).toBe(false); - expect(result.current.partiallySelected).toBe(false); - - act(() => { - unSelectAll(); - }); - expect(result.current.selected).toEqual([]); - expect(result.current.allSelected).toBe(false); - expect(result.current.noneSelected).toBe(true); - expect(result.current.partiallySelected).toBe(false); + const caseCallback: CaseCallback = (data) => { + const { result } = setup(data, { + itemKey: 'id', + }); + const { selectAll, unSelectAll } = result.current; + + expect(result.current.noneSelected).toBe(true); + act(() => { + selectAll(); + }); + expect(result.current.selected).toEqual(data); + expect(result.current.allSelected).toBe(true); + expect(result.current.noneSelected).toBe(false); + expect(result.current.partiallySelected).toBe(false); + + act(() => { + unSelectAll(); + }); + expect(result.current.selected).toEqual([]); + expect(result.current.allSelected).toBe(false); + expect(result.current.noneSelected).toBe(true); + expect(result.current.partiallySelected).toBe(false); + }; + + runCaseCallback(caseCallback, caseCallback); }); it('toggleAll should work correct', async () => { - const { result } = setup(data); - const { toggleAll } = result.current; - expect(result.current.noneSelected).toBe(true); - act(() => { - toggleAll(); - }); - expect(result.current.selected).toEqual([1, 2, 3]); - expect(result.current.allSelected).toBe(true); - expect(result.current.noneSelected).toBe(false); - expect(result.current.partiallySelected).toBe(false); - - act(() => { - toggleAll(); - }); - expect(result.current.selected).toEqual([]); - expect(result.current.allSelected).toBe(false); - expect(result.current.noneSelected).toBe(true); - expect(result.current.partiallySelected).toBe(false); + const caseCallback: CaseCallback = (data) => { + const { result } = setup(data, { + itemKey: 'id', + }); + const { toggleAll } = result.current; + + expect(result.current.noneSelected).toBe(true); + act(() => { + toggleAll(); + }); + expect(result.current.selected).toEqual(data); + expect(result.current.allSelected).toBe(true); + expect(result.current.noneSelected).toBe(false); + expect(result.current.partiallySelected).toBe(false); + + act(() => { + toggleAll(); + }); + expect(result.current.selected).toEqual([]); + expect(result.current.allSelected).toBe(false); + expect(result.current.noneSelected).toBe(true); + expect(result.current.partiallySelected).toBe(false); + }; + + runCaseCallback(caseCallback, caseCallback); }); it('setSelected should work correct', async () => { - const { result } = setup(data); - const { setSelected } = result.current; - expect(result.current.noneSelected).toBe(true); - act(() => { - setSelected([1]); - }); - expect(result.current.selected).toEqual([1]); - expect(result.current.isSelected(1)).toBe(true); - expect(result.current.noneSelected).toBe(false); - expect(result.current.allSelected).toBe(false); - expect(result.current.partiallySelected).toBe(true); - - act(() => { - setSelected([]); - }); - expect(result.current.selected).toEqual([]); - expect(result.current.isSelected(1)).toBe(false); - expect(result.current.noneSelected).toBe(true); - expect(result.current.allSelected).toBe(false); - expect(result.current.partiallySelected).toBe(false); - - act(() => { - setSelected([1, 2, 3]); - }); - expect(result.current.selected).toEqual([1, 2, 3]); - expect(result.current.isSelected(1)).toBe(true); - expect(result.current.noneSelected).toBe(false); - expect(result.current.allSelected).toBe(true); - expect(result.current.partiallySelected).toBe(false); + const caseCallback: CaseCallback = (data, selected, selectedItem) => { + const { result } = setup(data, { + itemKey: 'id', + }); + const { setSelected } = result.current; + + expect(result.current.noneSelected).toBe(true); + act(() => { + setSelected(selected); + }); + expect(result.current.selected).toEqual(selected); + expect(result.current.isSelected(selectedItem)).toBe(true); + expect(result.current.noneSelected).toBe(false); + expect(result.current.allSelected).toBe(false); + expect(result.current.partiallySelected).toBe(true); + + act(() => { + setSelected([]); + }); + expect(result.current.selected).toEqual([]); + expect(result.current.isSelected(selectedItem)).toBe(false); + expect(result.current.noneSelected).toBe(true); + expect(result.current.allSelected).toBe(false); + expect(result.current.partiallySelected).toBe(false); + + act(() => { + setSelected(data); + }); + expect(result.current.selected).toEqual(data); + expect(result.current.isSelected(selectedItem)).toBe(true); + expect(result.current.noneSelected).toBe(false); + expect(result.current.allSelected).toBe(true); + expect(result.current.partiallySelected).toBe(false); + + // Keep compatible with older versions. + act(() => { + expect(() => setSelected(undefined!)).not.toThrowError(); + expect(() => setSelected(null!)).not.toThrowError(); + }); + }; + + runCaseCallback(caseCallback, caseCallback); + }); + + it('legacy parameter should work in <4.0', async () => { + const { result } = setup(_data, _selected); + + expect(result.current.selected).toEqual(_selected); + expect(result.current.isSelected(_selectedItem)).toBe(true); + }); + + it('clearAll should work correct', async () => { + const runCase = (data, newData, remainData) => { + const { result } = renderHook(() => { + const [list, setList] = useState(data); + const hook = useSelections(list, { + itemKey: 'id', + }); + + return { setList, hook }; + }); + const { setSelected, unSelectAll, clearAll } = result.current.hook; + + act(() => { + setSelected(data); + }); + expect(result.current.hook.selected).toEqual(data); + expect(result.current.hook.allSelected).toBe(true); + + act(() => { + result.current.setList(newData); + }); + expect(result.current.hook.allSelected).toBe(false); + + act(() => { + unSelectAll(); + }); + expect(result.current.hook.selected).toEqual(remainData); + + act(() => { + clearAll(); + }); + expect(result.current.hook.selected).toEqual([]); + expect(result.current.hook.allSelected).toEqual(false); + expect(result.current.hook.noneSelected).toBe(true); + expect(result.current.hook.partiallySelected).toBe(false); + }; + + runCase(_data, [3, 4, 5], [1, 2]); + runCase(_dataObj, [{ id: 3 }, { id: 4 }, { id: 5 }], [{ id: 1 }, { id: 2 }]); }); }); diff --git a/packages/hooks/src/useSelections/demo/demo1.tsx b/packages/hooks/src/useSelections/demo/demo1.tsx index 2390f9ecba..cdd3c173fb 100644 --- a/packages/hooks/src/useSelections/demo/demo1.tsx +++ b/packages/hooks/src/useSelections/demo/demo1.tsx @@ -21,12 +21,14 @@ export default () => { const { selected, allSelected, isSelected, toggle, toggleAll, partiallySelected } = useSelections( list, - [1], + { + defaultSelected: [1], + }, ); return (
-
Selected : {selected.join(',')}
+
Selected: {selected.join(',')}
Check all diff --git a/packages/hooks/src/useSelections/demo/demo2.tsx b/packages/hooks/src/useSelections/demo/demo2.tsx new file mode 100644 index 0000000000..521e0f3b74 --- /dev/null +++ b/packages/hooks/src/useSelections/demo/demo2.tsx @@ -0,0 +1,52 @@ +/** + * title: Object array + * desc: When array items are object, you need to specify the field name for the unique key. + * + * title.zh-CN: 对象数组 + * desc.zh-CN: 数组项是对象时,需要指定唯一 key 的字段名称。 + */ + +import { Checkbox, Col, Row } from 'antd'; +import React, { useMemo, useState } from 'react'; +import { useSelections } from 'ahooks'; + +export default () => { + const [hideOdd, setHideOdd] = useState(false); + const list = useMemo(() => { + if (hideOdd) { + return [2, 4, 6, 8].map((id) => ({ id })); + } + return [1, 2, 3, 4, 5, 6, 7, 8].map((id) => ({ id })); + }, [hideOdd]); + + const { selected, allSelected, isSelected, toggle, toggleAll, partiallySelected } = useSelections( + list, + { + defaultSelected: [{ id: 1 }], + itemKey: 'id', + }, + ); + + return ( +
+
Selected: {JSON.stringify(selected)}
+
+ + Check all + + setHideOdd((v) => !v)}> + Hide Odd + +
+ + {list.map((item) => ( +
+ toggle(item)}> + {item.id} + + + ))} + + + ); +}; diff --git a/packages/hooks/src/useSelections/demo/demo3.tsx b/packages/hooks/src/useSelections/demo/demo3.tsx new file mode 100644 index 0000000000..48dd7cb253 --- /dev/null +++ b/packages/hooks/src/useSelections/demo/demo3.tsx @@ -0,0 +1,130 @@ +/** + * title: Pagination + * desc: Load data with pagination and enable cross-page selection. + * + * title.zh-CN: 分页多选 + * desc.zh-CN: 分页加载数据,并跨页选择。 + */ + +import { Checkbox, Divider, Pagination, Spin } from 'antd'; +import React, { useEffect, useState } from 'react'; +import { useSelections } from 'ahooks'; + +interface DataType { + id: number; + title: string; +} + +interface PaginationType { + current: number; + pageSize: number; + total?: number; +} + +const dataSource = Array.from({ length: 50 }, (item, index) => ({ + id: index, + title: `title ${index}`, +})); + +const getDataFromServer = (props: PaginationType) => { + const { current, pageSize } = props; + const data = dataSource.slice((current - 1) * pageSize, current * pageSize); + + return new Promise<{ + data: DataType[]; + total: PaginationType['total']; + }>((resolve) => { + setTimeout( + () => + resolve({ + data, + total: dataSource.length, + }), + 500, + ); + }); +}; + +export default () => { + const [dataList, setDataList] = useState([]); + const [loading, setLoading] = useState(false); + const [pagination, setPagination] = useState({ + current: 1, + pageSize: 10, + total: 0, + }); + + const getData = async (params: PaginationType) => { + setLoading(true); + + const { data, total } = await getDataFromServer(params); + + setLoading(false); + setDataList(data); + setPagination({ ...params, total }); + }; + + useEffect(() => { + getData(pagination); + }, []); + + const { selected, allSelected, isSelected, toggle, toggleAll, partiallySelected } = useSelections( + dataList, + { + itemKey: 'id', + }, + ); + + return ( + + {dataList.map((item) => { + const { id, title } = item; + + return ( +
+ toggle(item)} + checked={isSelected(item)} + > + {title} + +
+ ); + })} + { + getData({ + current: page, + pageSize: size, + }); + }} + /> +
+ + Check all + + Selected: {selected.length} +
+ {!!selected.length && ( + <> + + {JSON.stringify(selected)} + + )} +
+ ); +}; diff --git a/packages/hooks/src/useSelections/index.en-US.md b/packages/hooks/src/useSelections/index.en-US.md index 991ae315bc..8cf96832f5 100644 --- a/packages/hooks/src/useSelections/index.en-US.md +++ b/packages/hooks/src/useSelections/index.en-US.md @@ -13,17 +13,50 @@ This hook is used for Checkbox group, supports multiple selection, single select +### Object array + + + +### Pagination + + + ## API ```typescript +interface Options { + defaultSelected?: T[]; + itemKey?: string | ((item: T) => Key); +} + +// works when >=3.8.0, recommended ✅ +const result: Result = useSelections(items: T[], options?: Options); + +// works when <4.0.0, will be removed in ahooks 4.0 🙅🏻‍♀️ const result: Result = useSelections(items: T[], defaultSelected?: T[]); ``` +### Params + + +| Property | Description | Type | Default | +| --- | --- | --- | --- | +| items | Data items | `T[]` | - | +| options | Optional configuration | `Options` | - | + +### Options + + +| Property | Description | Type | Default | +| --- | --- | --- | --- | +| defaultSelected | Default selected data | `T[]` | `[]` | +| itemKey | The unique key of data item. Typically, this parameter needs to be specified when the data source is an array of object | `string` \| `(item: T) => React.Key` | - | + ### Result | Property | Description | Type | | ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- | -| selected | Selected Items | `T[]` | +| selected | Selected items | `T[]` | | allSelected | Is all items selected | `boolean` | | noneSelected | Is no item selected | `boolean` | | partiallySelected | Is partially items selected | `boolean` | @@ -35,3 +68,4 @@ const result: Result = useSelections(items: T[], defaultSelected?: T[]); | selectAll | Select all items | `() => void` | | unSelectAll | UnSelect all items | `() => void` | | toggleAll | Toggle select all items | `() => void` | +| clearAll | Clear all selected (In general, `clearAll` is equivalent to `unSelectAll`. If the items is dynamic, `clearAll` will clear "all selected data", while `unSelectAll` will only clear "the currently selected data in the items") | `() => void` | diff --git a/packages/hooks/src/useSelections/index.ts b/packages/hooks/src/useSelections/index.ts index e9b5b4e9a5..a8ddc2056e 100644 --- a/packages/hooks/src/useSelections/index.ts +++ b/packages/hooks/src/useSelections/index.ts @@ -1,21 +1,62 @@ import { useMemo, useState } from 'react'; +import type { Key } from 'react'; +import isPlainObject from 'lodash/isPlainObject'; import useMemoizedFn from '../useMemoizedFn'; +import { isFunction, isString } from '../utils'; + +export interface Options { + defaultSelected?: T[]; + itemKey?: string | ((item: T) => Key); +} + +export default function useSelections(items: T[], options?: T[] | Options) { + let defaultSelected: T[] = []; + let itemKey: Options['itemKey']; + + if (Array.isArray(options)) { + defaultSelected = options; + } else if (isPlainObject(options)) { + defaultSelected = options?.defaultSelected ?? defaultSelected; + itemKey = options?.itemKey ?? itemKey; + } + + const getKey = (item: T): Key => { + if (isFunction(itemKey)) { + return itemKey(item); + } + if (isString(itemKey) && isPlainObject(item)) { + return item[itemKey]; + } + + return item as Key; + }; -export default function useSelections(items: T[], defaultSelected: T[] = []) { const [selected, setSelected] = useState(defaultSelected); - const selectedSet = useMemo(() => new Set(selected), [selected]); + const selectedMap = useMemo(() => { + const keyToItemMap = new Map(); - const isSelected = (item: T) => selectedSet.has(item); + if (!Array.isArray(selected)) { + return keyToItemMap; + } + + selected.forEach((item) => { + keyToItemMap.set(getKey(item), item); + }); + + return keyToItemMap; + }, [selected]); + + const isSelected = (item: T) => selectedMap.has(getKey(item)); const select = (item: T) => { - selectedSet.add(item); - return setSelected(Array.from(selectedSet)); + selectedMap.set(getKey(item), item); + setSelected(Array.from(selectedMap.values())); }; const unSelect = (item: T) => { - selectedSet.delete(item); - return setSelected(Array.from(selectedSet)); + selectedMap.delete(getKey(item)); + setSelected(Array.from(selectedMap.values())); }; const toggle = (item: T) => { @@ -27,24 +68,27 @@ export default function useSelections(items: T[], defaultSelected: T[] = []) }; const selectAll = () => { - items.forEach((o) => { - selectedSet.add(o); + items.forEach((item) => { + selectedMap.set(getKey(item), item); }); - setSelected(Array.from(selectedSet)); + setSelected(Array.from(selectedMap.values())); }; const unSelectAll = () => { - items.forEach((o) => { - selectedSet.delete(o); + items.forEach((item) => { + selectedMap.delete(getKey(item)); }); - setSelected(Array.from(selectedSet)); + setSelected(Array.from(selectedMap.values())); }; - const noneSelected = useMemo(() => items.every((o) => !selectedSet.has(o)), [items, selectedSet]); + const noneSelected = useMemo( + () => items.every((item) => !selectedMap.has(getKey(item))), + [items, selectedMap], + ); const allSelected = useMemo( - () => items.every((o) => selectedSet.has(o)) && !noneSelected, - [items, selectedSet, noneSelected], + () => items.every((item) => selectedMap.has(getKey(item))) && !noneSelected, + [items, selectedMap, noneSelected], ); const partiallySelected = useMemo( @@ -54,6 +98,11 @@ export default function useSelections(items: T[], defaultSelected: T[] = []) const toggleAll = () => (allSelected ? unSelectAll() : selectAll()); + const clearAll = () => { + selectedMap.clear(); + setSelected([]); + }; + return { selected, noneSelected, @@ -66,6 +115,7 @@ export default function useSelections(items: T[], defaultSelected: T[] = []) toggle: useMemoizedFn(toggle), selectAll: useMemoizedFn(selectAll), unSelectAll: useMemoizedFn(unSelectAll), + clearAll: useMemoizedFn(clearAll), toggleAll: useMemoizedFn(toggleAll), } as const; } diff --git a/packages/hooks/src/useSelections/index.zh-CN.md b/packages/hooks/src/useSelections/index.zh-CN.md index 084fbeb933..022216b965 100644 --- a/packages/hooks/src/useSelections/index.zh-CN.md +++ b/packages/hooks/src/useSelections/index.zh-CN.md @@ -13,25 +13,59 @@ nav: +### 对象数组 + + + +### 分页多选 + + + ## API ```typescript +interface Options { + defaultSelected?: T[]; + itemKey?: string | ((item: T) => Key); +} + +// >=3.8.0 可用,推荐的写法 ✅ +const result: Result = useSelections(items: T[], options?: Options); + +// <4.0.0 可用,将会在 ahooks 4.0 中移除 🙅🏻‍♀️ const result: Result = useSelections(items: T[], defaultSelected?: T[]); ``` +### Params + + +| 参数 | 说明 | 类型 | 默认值 | +| --- | --- | --- | --- | +| items | 元素列表 | `T[]` | - | +| options | 可选配置项 | `Options` | - | + +### Options + + +| 参数 | 说明 | 类型 | 默认值 | +| --- | --- | --- | --- | +| defaultSelected | 默认选择的数据 | `T[]` | `[]` | +| itemKey | 数据项的唯一 key。一般来说,数据源是对象数组时,才需要指定该参数 | `string` \| `(item: T) => React.Key` | - | + ### Result -| 参数 | 说明 | 类型 | -| ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- | -| selected | 已经选择的元素 | `T[]` | -| allSelected | 是否全选 | `boolean` | -| noneSelected | 是否一个都没有选择 | `boolean` | -| partiallySelected | 是否半选 | `boolean` | -| isSelected | 是否被选择 | `(value: T) => boolean` | -| setSelected | 选择多个元素。多次执行时,后面的返回值会覆盖前面的,因此如果希望合并多次操作的结果,需要手动处理:`setSelected((oldArray) => oldArray.concat(newArray))` | `(value: T[]) => void \| (value: (prevState: T[]) => T[]) => void` | -| select | 选择单个元素 | `(value: T) => void` | -| unSelect | 取消选择单个元素 | `(value: T) => void` | -| toggle | 反选单个元素 | `(value: T) => void` | -| selectAll | 选择全部元素 | `() => void` | -| unSelectAll | 取消选择全部元素 | `() => void` | -| toggleAll | 反选全部元素 | `() => void` | +| 参数 | 说明 | 类型 | +| ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- | +| selected | 已经选择的元素 | `T[]` | +| allSelected | 是否全选 | `boolean` | +| noneSelected | 是否一个都没有选择 | `boolean` | +| partiallySelected | 是否半选 | `boolean` | +| isSelected | 是否被选择 | `(value: T) => boolean` | +| setSelected | 选择多个元素。多次执行时,后面的返回值会覆盖前面的,因此如果希望合并多次操作的结果,需要手动处理:`setSelected((oldArray) => oldArray.concat(newArray))` | `(value: T[]) => void \| (value: (prevState: T[]) => T[]) => void` | +| select | 选择单个元素 | `(value: T) => void` | +| unSelect | 取消选择单个元素 | `(value: T) => void` | +| toggle | 反选单个元素 | `(value: T) => void` | +| selectAll | 选择全部元素 | `() => void` | +| unSelectAll | 取消选择全部元素 | `() => void` | +| toggleAll | 反选全部元素 | `() => void` | +| clearAll | 清除所有选中元素(一般情况下,`clearAll` 等价于 `unSelectAll`。如果元素列表是动态的,则 `clearAll` 会清除掉“所有选中过的元素”,而 `unSelectAll` 只会清除掉“当前元素列表里选中的元素”) | `() => void` | diff --git a/packages/hooks/src/useThrottleFn/index.ts b/packages/hooks/src/useThrottleFn/index.ts index 00192b86d5..4575b32cf8 100644 --- a/packages/hooks/src/useThrottleFn/index.ts +++ b/packages/hooks/src/useThrottleFn/index.ts @@ -1,4 +1,4 @@ -import { throttle } from 'lodash-es'; +import throttle from 'lodash/throttle'; import { useMemo } from 'react'; import useLatest from '../useLatest'; import type { ThrottleOptions } from '../useThrottle/throttleOptions'; diff --git a/packages/hooks/src/useTimeout/index.en-US.md b/packages/hooks/src/useTimeout/index.en-US.md index 6cab1fb859..2fbe0fb123 100644 --- a/packages/hooks/src/useTimeout/index.en-US.md +++ b/packages/hooks/src/useTimeout/index.en-US.md @@ -19,7 +19,7 @@ A hook that handles the `setTimeout` timer function. ```typescript useTimeout( fn: () => void, - delay?: number | null + delay?: number | undefined ): fn: () => void; ``` diff --git a/packages/hooks/src/useTimeout/index.ts b/packages/hooks/src/useTimeout/index.ts index 7285fdb06e..e3f901a66c 100644 --- a/packages/hooks/src/useTimeout/index.ts +++ b/packages/hooks/src/useTimeout/index.ts @@ -4,7 +4,7 @@ import { isNumber } from '../utils'; const useTimeout = (fn: () => void, delay?: number) => { const timerCallback = useMemoizedFn(fn); - const timerRef = useRef(null); + const timerRef = useRef | null>(null); const clear = useCallback(() => { if (timerRef.current) { diff --git a/packages/hooks/src/useTimeout/index.zh-CN.md b/packages/hooks/src/useTimeout/index.zh-CN.md index 875f1547b2..a1a0b45210 100644 --- a/packages/hooks/src/useTimeout/index.zh-CN.md +++ b/packages/hooks/src/useTimeout/index.zh-CN.md @@ -19,7 +19,7 @@ nav: ```typescript useTimeout( fn: () => void, - delay?: number | null + delay?: number | undefined ): fn: () => void; ``` diff --git a/packages/hooks/src/useToggle/__tests__/index.test.ts b/packages/hooks/src/useToggle/__tests__/index.test.ts index c2004e2c39..ba196142b1 100644 --- a/packages/hooks/src/useToggle/__tests__/index.test.ts +++ b/packages/hooks/src/useToggle/__tests__/index.test.ts @@ -16,9 +16,7 @@ describe('useToggle', () => { it('test on methods', async () => { const hook = renderHook(() => useToggle('Hello')); expect(hook.result.current[0]).toBe('Hello'); - act(() => { - hook.result.current[1].toggle(); - }); + callToggle(hook); expect(hook.result.current[0]).toBeFalsy(); act(() => { hook.result.current[1].setLeft(); diff --git a/packages/hooks/src/useVirtualList/__tests__/index.test.ts b/packages/hooks/src/useVirtualList/__tests__/index.test.ts index d8916c602b..86a9bf3b14 100644 --- a/packages/hooks/src/useVirtualList/__tests__/index.test.ts +++ b/packages/hooks/src/useVirtualList/__tests__/index.test.ts @@ -61,6 +61,8 @@ describe('useVirtualList', () => { expect(hook.result.current[0].length).toBe(10); expect(container.scrollTop).toBe(20 * 30); + expect(hook.result.current[0][0].data).toBe(20); + expect(hook.result.current[0][0].index).toBe(20); }); it('test with dynamic height', async () => { diff --git a/packages/hooks/src/useVirtualList/index.en-US.md b/packages/hooks/src/useVirtualList/index.en-US.md index 5f69fe4000..7129c8c367 100644 --- a/packages/hooks/src/useVirtualList/index.en-US.md +++ b/packages/hooks/src/useVirtualList/index.en-US.md @@ -33,10 +33,10 @@ const [list, scrollTo] = useVirtualList( ### Params -| Property | Description | Type | Default | -| ------------ | ----------------------------------------------------- | --------- | ------- | -| originalList | The original list that contains a lot of data entries | `T[]` | `[]` | -| options | config | `Options` | - | +| Property | Description | Type | Default | +| ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | --------- | ------- | +| originalList | The original list that contains a lot of data entries. **Attention: must undergo useMemo processing or never change, otherwise there will be a dead loop** | `T[]` | `[]` | +| options | config | `Options` | - | ### Options diff --git a/packages/hooks/src/useVirtualList/index.ts b/packages/hooks/src/useVirtualList/index.ts index 65e069f6d0..e20f4d7985 100644 --- a/packages/hooks/src/useVirtualList/index.ts +++ b/packages/hooks/src/useVirtualList/index.ts @@ -51,7 +51,7 @@ const useVirtualList = (list: T[], options: Options) => { const getOffset = (scrollTop: number) => { if (isNumber(itemHeightRef.current)) { - return Math.floor(scrollTop / itemHeightRef.current) + 1; + return Math.floor(scrollTop / itemHeightRef.current); } let sum = 0; let offset = 0; diff --git a/packages/hooks/src/useVirtualList/index.zh-CN.md b/packages/hooks/src/useVirtualList/index.zh-CN.md index b3a6799e6d..62e2082b12 100644 --- a/packages/hooks/src/useVirtualList/index.zh-CN.md +++ b/packages/hooks/src/useVirtualList/index.zh-CN.md @@ -33,10 +33,10 @@ const [list, scrollTo] = useVirtualList( ### Params -| 参数 | 说明 | 类型 | 默认值 | -| ------------ | ------------------ | --------- | ------ | -| originalList | 包含大量数据的列表 | `T[]` | `[]` | -| options | 配置项 | `Options` | - | +| 参数 | 说明 | 类型 | 默认值 | +| ------------ | ------------------------------------------------------------------------------ | --------- | ------ | +| originalList | 包含大量数据的列表。 **注意:必须经过 useMemo 处理或者永不变化,否则会死循环** | `T[]` | `[]` | +| options | 配置项 | `Options` | - | ### Options diff --git a/packages/hooks/src/utils/createEffectWithTarget.ts b/packages/hooks/src/utils/createEffectWithTarget.ts index 4b82b66437..9600cfcc38 100644 --- a/packages/hooks/src/utils/createEffectWithTarget.ts +++ b/packages/hooks/src/utils/createEffectWithTarget.ts @@ -40,8 +40,8 @@ const createEffectWithTarget = (useEffectType: typeof useEffect | typeof useLayo if ( els.length !== lastElementRef.current.length || - !depsAreSame(els, lastElementRef.current) || - !depsAreSame(deps, lastDepsRef.current) + !depsAreSame(lastElementRef.current, els) || + !depsAreSame(lastDepsRef.current, deps) ) { unLoadRef.current?.(); diff --git a/packages/hooks/src/utils/depsEqual.ts b/packages/hooks/src/utils/depsEqual.ts index b40ebfa1e2..7a76ccc514 100644 --- a/packages/hooks/src/utils/depsEqual.ts +++ b/packages/hooks/src/utils/depsEqual.ts @@ -1,5 +1,5 @@ import type { DependencyList } from 'react'; -import { isEqual } from 'lodash-es'; +import isEqual from 'react-fast-compare'; export const depsEqual = (aDeps: DependencyList = [], bDeps: DependencyList = []) => isEqual(aDeps, bDeps); diff --git a/packages/hooks/src/utils/getDocumentOrShadow.ts b/packages/hooks/src/utils/getDocumentOrShadow.ts index f4b6f21f18..6b5b844377 100644 --- a/packages/hooks/src/utils/getDocumentOrShadow.ts +++ b/packages/hooks/src/utils/getDocumentOrShadow.ts @@ -8,6 +8,7 @@ const checkIfAllInShadow = (targets: BasicTarget[]): boolean => { const targetElement = getTargetElement(item); if (!targetElement) return false; if (targetElement.getRootNode() instanceof ShadowRoot) return true; + return false; }); }; diff --git a/packages/hooks/src/utils/lodash-polyfill.ts b/packages/hooks/src/utils/lodash-polyfill.ts index 677c34cac9..a02dd2a563 100644 --- a/packages/hooks/src/utils/lodash-polyfill.ts +++ b/packages/hooks/src/utils/lodash-polyfill.ts @@ -1,4 +1,4 @@ -import { debounce } from 'lodash-es'; +import debounce from 'lodash/debounce'; function isNodeOrWeb() { const freeGlobal = diff --git a/packages/hooks/src/utils/rect.ts b/packages/hooks/src/utils/rect.ts index 8397762974..4affdf8e66 100644 --- a/packages/hooks/src/utils/rect.ts +++ b/packages/hooks/src/utils/rect.ts @@ -1,5 +1,5 @@ const getScrollTop = (el: Document | Element) => { - if (el === document || el === document.body) { + if (el === document || el === document.documentElement || el === document.body) { return Math.max( window.pageYOffset, document.documentElement.scrollTop, diff --git a/packages/hooks/src/utils/useDeepCompareWithTarget.ts b/packages/hooks/src/utils/useDeepCompareWithTarget.ts index 89d685b4dd..2c84ff4e96 100644 --- a/packages/hooks/src/utils/useDeepCompareWithTarget.ts +++ b/packages/hooks/src/utils/useDeepCompareWithTarget.ts @@ -13,9 +13,9 @@ const useDeepCompareEffectWithTarget = ( const signalRef = useRef(0); if (!depsEqual(deps, ref.current)) { - ref.current = deps; signalRef.current += 1; } + ref.current = deps; useEffectWithTarget(effect, [signalRef.current], target); }; diff --git a/packages/hooks/tsconfig.json b/packages/hooks/tsconfig.json index 35cc81c1ab..04dc211e11 100644 --- a/packages/hooks/tsconfig.json +++ b/packages/hooks/tsconfig.json @@ -3,6 +3,8 @@ "compilerOptions": { "rootDir": "src", "outDir": "lib", - "composite": true - } + "composite": true, + "declaration": true + }, + "include": ["src"] } diff --git a/packages/use-url-state/README.md b/packages/use-url-state/README.md index eb9a9e9d94..a190001770 100644 --- a/packages/use-url-state/README.md +++ b/packages/use-url-state/README.md @@ -22,6 +22,12 @@ Or with pnpm pnpm add @ahooksjs/use-url-state ``` +Or with Bun + +```bash +bun add @ahooksjs/use-url-state +``` + ## Example ```javascript diff --git a/packages/use-url-state/package.json b/packages/use-url-state/package.json index fa45745570..4f7486088e 100644 --- a/packages/use-url-state/package.json +++ b/packages/use-url-state/package.json @@ -34,7 +34,7 @@ "dependencies": { "@babel/runtime": "^7.21.0", "ahooks": "^3.4.1", - "query-string": "^6.9.0", + "query-string": "^8.1.0", "tslib": "^2.4.1" }, "gitHead": "11f6ad571bd365c95ecb9409ca3050cbbfc9b34a" diff --git a/packages/use-url-state/src/index.ts b/packages/use-url-state/src/index.ts index 093dd9b52c..d2c7f3c3e8 100644 --- a/packages/use-url-state/src/index.ts +++ b/packages/use-url-state/src/index.ts @@ -1,5 +1,5 @@ import { useMemoizedFn, useUpdate } from 'ahooks'; -import { parse, stringify } from 'query-string'; +import qs from 'query-string'; import type { ParseOptions, StringifyOptions } from 'query-string'; import { useMemo, useRef } from 'react'; import type * as React from 'react'; @@ -50,7 +50,7 @@ const useUrlState = ( ); const queryFromUrl = useMemo(() => { - return parse(location.search, mergedParseOptions); + return qs.parse(location.search, mergedParseOptions); }, [location.search]); const targetQuery: State = useMemo( @@ -71,7 +71,7 @@ const useUrlState = ( history[navigateMode]( { hash: location.hash, - search: stringify({ ...queryFromUrl, ...newQuery }, mergedStringifyOptions) || '?', + search: qs.stringify({ ...queryFromUrl, ...newQuery }, mergedStringifyOptions) || '?', }, location.state, ); @@ -80,7 +80,7 @@ const useUrlState = ( navigate( { hash: location.hash, - search: stringify({ ...queryFromUrl, ...newQuery }, mergedStringifyOptions) || '?', + search: qs.stringify({ ...queryFromUrl, ...newQuery }, mergedStringifyOptions) || '?', }, { replace: navigateMode === 'replace', diff --git a/packages/use-url-state/tsconfig.json b/packages/use-url-state/tsconfig.json index 3176325368..1dac9cf65d 100644 --- a/packages/use-url-state/tsconfig.json +++ b/packages/use-url-state/tsconfig.json @@ -2,5 +2,6 @@ "extends": "../../tsconfig.json", "compilerOptions": { "rootDir": "src" - } + }, + "include": ["src"] } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5e8c149f83..0551ec1ab2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -3,7 +3,7 @@ lockfileVersion: 5.4 importers: .: specifiers: - '@ant-design/icons': ^5.0.1 + '@ant-design/icons': ^5.3.0 '@babel/cli': ^7.10.1 '@babel/core': ^7.10.2 '@babel/plugin-transform-runtime': ^7.19.6 @@ -12,24 +12,17 @@ importers: '@testing-library/jest-dom': ^5.16.5 '@testing-library/react': ^13.4.0 '@types/jest': ^29.4.0 - '@types/lodash.debounce': ^4.0.6 - '@types/lodash.isequal': ^4.5.5 - '@types/lodash.throttle': ^4.1.6 '@types/mockjs': ^1.0.7 '@types/react-router': ^5.1.19 '@umijs/fabric': ^2.1.0 - '@umijs/plugin-sass': ^1.1.1 - antd: ^5.2.1 - babel-loader: ^8.1.0 + antd: ^5.14.2 babel-plugin-import: ^1.12.0 - babel-plugin-transform-async-to-promises: ^0.8.15 coveralls: ^3.1.1 cross-env: ^7.0.3 del: ^5.1.0 dumi: ^1.1.48 - enzyme: ^3.10.0 - eslint: ^7.2.0 - eslint-plugin-react-hooks: ^4.0.8 + eslint: ^8.56.0 + eslint-plugin-react-hooks: ^4.6.0 fast-glob: ^3.2.11 fs-extra: ^10.0.1 gray-matter: ^4.0.3 @@ -39,11 +32,10 @@ importers: husky: ^8.0.0 jest: ^29.4.1 jest-environment-jsdom: ^29.4.1 - jest-fetch-mock: ^3.0.3 jest-localstorage-mock: ^2.4.18 mockjs: ^1.1.0 - prettier: ^2.0.5 - pretty-quick: ^3.1.3 + prettier: ^3.2.5 + pretty-quick: ^4.0.0 react: ^18.2.0 react-dom: ^18.2.0 react-drag-listview: ^0.1.6 @@ -51,14 +43,13 @@ importers: react-shadow: ^19.0.3 rimraf: ^3.0.2 surge: ^0.21.3 - ts-jest: ^29.0.5 + ts-jest: ^29.1.1 typescript: ^5.1.3 - umi-request: ^1.2.18 - webpack: ^4.43.0 - webpack-cli: ^3.3.10 + webpack: ^5.90.3 + webpack-cli: ^5.1.4 webpack-merge: ^4.2.2 devDependencies: - '@ant-design/icons': 5.0.1_biqbaboplfbrettd7655fr4n2y + '@ant-design/icons': 5.3.0_biqbaboplfbrettd7655fr4n2y '@babel/cli': 7.21.0_@babel+core@7.21.0 '@babel/core': 7.21.0 '@babel/plugin-transform-runtime': 7.21.0_@babel+core@7.21.0 @@ -67,24 +58,17 @@ importers: '@testing-library/jest-dom': 5.16.5 '@testing-library/react': 13.4.0_biqbaboplfbrettd7655fr4n2y '@types/jest': 29.4.0 - '@types/lodash.debounce': 4.0.7 - '@types/lodash.isequal': 4.5.6 - '@types/lodash.throttle': 4.1.7 '@types/mockjs': 1.0.7 '@types/react-router': 5.1.20 '@umijs/fabric': 2.14.1 - '@umijs/plugin-sass': 1.1.1_umi@3.5.38+webpack@4.46.0 - antd: 5.3.0_biqbaboplfbrettd7655fr4n2y - babel-loader: 8.3.0_idmflsbzmivcz6fnnmcaipezqe + antd: 5.14.2_biqbaboplfbrettd7655fr4n2y babel-plugin-import: 1.13.6 - babel-plugin-transform-async-to-promises: 0.8.18 coveralls: 3.1.1 cross-env: 7.0.3 del: 5.1.0 dumi: 1.1.50_23ggkg76n7muqojfq7htundxji - enzyme: 3.11.0 - eslint: 7.32.0 - eslint-plugin-react-hooks: 4.6.0_eslint@7.32.0 + eslint: 8.57.0 + eslint-plugin-react-hooks: 4.6.0_eslint@8.57.0 fast-glob: 3.2.12 fs-extra: 10.1.0 gray-matter: 4.0.3 @@ -94,11 +78,10 @@ importers: husky: 8.0.3 jest: 29.4.3_nvadb4ngcuh2lyv22apfdo6nc4 jest-environment-jsdom: 29.4.3 - jest-fetch-mock: 3.0.3 jest-localstorage-mock: 2.4.26 mockjs: 1.1.0 - prettier: 2.8.4 - pretty-quick: 3.1.3_prettier@2.8.4 + prettier: 3.2.5 + pretty-quick: 4.0.0_prettier@3.2.5 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 react-drag-listview: 0.1.9 @@ -106,11 +89,10 @@ importers: react-shadow: 19.1.0_v2m5e27vhdewzwhryxwfaorcca rimraf: 3.0.2 surge: 0.21.7 - ts-jest: 29.0.5_qxnzkgjgfs7tsedreuy2cieazm + ts-jest: 29.1.1_qxnzkgjgfs7tsedreuy2cieazm typescript: 5.1.3 - umi-request: 1.4.0 - webpack: 4.46.0_webpack-cli@3.3.12 - webpack-cli: 3.3.12_webpack@4.46.0 + webpack: 5.90.3_webpack-cli@5.1.4 + webpack-cli: 5.1.4_webpack@5.90.3 webpack-merge: 4.2.2 packages/hooks: @@ -118,44 +100,40 @@ importers: '@alifd/next': ^1.20.6 '@ant-design/icons': ^5.0.1 '@babel/runtime': ^7.21.0 - '@types/enzyme': ^3.10.5 '@types/js-cookie': ^2.x.x - ahooks-v3-count: ^1.0.0 + '@types/lodash': ^4.14.202 antd: ^5.2.1 dayjs: ^1.9.1 - enzyme-adapter-react-16: ^1.15.4 intersection-observer: ^0.12.0 jest-websocket-mock: ^2.1.0 js-cookie: ^2.x.x - lodash-es: ^4.17.21 - mock-socket: ^9.0.3 + lodash: ^4.17.21 mockjs: ^1.1.0 react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-drag-listview: ^0.1.6 + react-fast-compare: ^3.2.2 react-json-view: ^1.21.3 resize-observer-polyfill: ^1.5.1 screenfull: ^5.0.0 tslib: ^2.4.1 dependencies: '@babel/runtime': 7.21.0 - '@types/js-cookie': 2.2.7 - ahooks-v3-count: 1.0.0 dayjs: 1.11.7 intersection-observer: 0.12.2 js-cookie: 2.2.1 - lodash-es: 4.17.21 + lodash: 4.17.21 react: 18.2.0 + react-fast-compare: 3.2.2 resize-observer-polyfill: 1.5.1 screenfull: 5.2.0 tslib: 2.5.0 devDependencies: '@alifd/next': 1.26.14_had4yde6lwbrvmr3cmz4zgsj4q '@ant-design/icons': 5.0.1_jnbmergxldlwssobus342vza4q - '@types/enzyme': 3.10.12 + '@types/js-cookie': 2.2.7 + '@types/lodash': 4.14.202 antd: 5.3.0_saedcmlbgft4vq6gn57wqgylhq - enzyme-adapter-react-16: 1.15.7_i6jb26zkukcjdnnkhpb37sx774 jest-websocket-mock: 2.4.0 - mock-socket: 9.2.1 mockjs: 1.1.0 react-drag-listview: 0.1.9 react-json-view: 1.21.3_jnbmergxldlwssobus342vza4q @@ -164,19 +142,27 @@ importers: specifiers: '@babel/runtime': ^7.21.0 ahooks: ^3.4.1 - query-string: ^6.9.0 + query-string: ^8.1.0 react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-router: ^5.0.0 || ^6.0.0 tslib: ^2.4.1 dependencies: '@babel/runtime': 7.21.0 ahooks: link:../hooks - query-string: 6.14.1 + query-string: 8.1.0 react: 18.2.0 react-router: 6.8.2_react@18.2.0 tslib: 2.5.0 packages: + /@aashutoshrathi/word-wrap/1.2.6: + resolution: + { + integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==, + } + engines: { node: '>=0.10.0' } + dev: true + /@adobe/css-tools/4.2.0: resolution: { @@ -333,24 +319,33 @@ packages: '@ctrl/tinycolor': 3.6.0 dev: true - /@ant-design/cssinjs/1.6.1_biqbaboplfbrettd7655fr4n2y: + /@ant-design/colors/7.0.2: resolution: { - integrity: sha512-35+1e5h1HzPt7d7NjXTG5yg/OQY85YcOIpb3peB3/eKri7+0mW9c+WZB3In7yMscBzvxQREOR5pxNDbqMcI42w==, + integrity: sha512-7KJkhTiPiLHSu+LmMJnehfJ6242OCxSlR3xHVBecYxnMW8MS/878NXct1GqYARyL59fyeFdKRxXTfvR9SnDgJg==, + } + dependencies: + '@ctrl/tinycolor': 3.6.1 + dev: true + + /@ant-design/cssinjs/1.18.4_biqbaboplfbrettd7655fr4n2y: + resolution: + { + integrity: sha512-IrUAOj5TYuMG556C9gdbFuOrigyhzhU5ZYpWb3gYTxAwymVqRbvLzFCZg6OsjLBR6GhzcxYF3AhxKmjB+rA2xA==, } peerDependencies: react: '>=16.0.0' react-dom: '>=16.0.0' dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.23.9 '@emotion/hash': 0.8.0 '@emotion/unitless': 0.7.5 - classnames: 2.3.2 - csstype: 3.1.1 - rc-util: 5.28.0_biqbaboplfbrettd7655fr4n2y + classnames: 2.5.1 + csstype: 3.1.3 + rc-util: 5.38.2_biqbaboplfbrettd7655fr4n2y react: 18.2.0 react-dom: 18.2.0_react@18.2.0 - stylis: 4.1.3 + stylis: 4.3.1 dev: true /@ant-design/cssinjs/1.6.1_jnbmergxldlwssobus342vza4q: @@ -380,7 +375,14 @@ packages: } dev: true - /@ant-design/icons/5.0.1_biqbaboplfbrettd7655fr4n2y: + /@ant-design/icons-svg/4.4.2: + resolution: + { + integrity: sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA==, + } + dev: true + + /@ant-design/icons/5.0.1_jnbmergxldlwssobus342vza4q: resolution: { integrity: sha512-ZyF4ksXCcdtwA/1PLlnFLcF/q8/MhwxXhKHh4oCHDA4Ip+ZzAHoICtyp4wZWfiCVDP0yuz3HsjyvuldHFb3wjA==, @@ -394,15 +396,15 @@ packages: '@ant-design/icons-svg': 4.2.1 '@babel/runtime': 7.21.0 classnames: 2.3.2 - rc-util: 5.28.0_biqbaboplfbrettd7655fr4n2y + rc-util: 5.28.0_jnbmergxldlwssobus342vza4q react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 + react-dom: 16.14.0_react@18.2.0 dev: true - /@ant-design/icons/5.0.1_jnbmergxldlwssobus342vza4q: + /@ant-design/icons/5.3.0_biqbaboplfbrettd7655fr4n2y: resolution: { - integrity: sha512-ZyF4ksXCcdtwA/1PLlnFLcF/q8/MhwxXhKHh4oCHDA4Ip+ZzAHoICtyp4wZWfiCVDP0yuz3HsjyvuldHFb3wjA==, + integrity: sha512-69FgBsIkeCjw72ZU3fJpqjhmLCPrzKGEllbrAZK7MUdt1BrKsyG6A8YDCBPKea27UQ0tRXi33PcjR4tp/tEXMg==, } engines: { node: '>=8' } peerDependencies: @@ -410,12 +412,12 @@ packages: react-dom: '>=16.0.0' dependencies: '@ant-design/colors': 7.0.0 - '@ant-design/icons-svg': 4.2.1 + '@ant-design/icons-svg': 4.4.2 '@babel/runtime': 7.21.0 classnames: 2.3.2 - rc-util: 5.28.0_jnbmergxldlwssobus342vza4q + rc-util: 5.38.2_biqbaboplfbrettd7655fr4n2y react: 18.2.0 - react-dom: 16.14.0_react@18.2.0 + react-dom: 18.2.0_react@18.2.0 dev: true /@ant-design/react-slick/1.0.0_react@18.2.0: @@ -434,6 +436,22 @@ packages: throttle-debounce: 5.0.0 dev: true + /@ant-design/react-slick/1.0.2_react@18.2.0: + resolution: + { + integrity: sha512-Wj8onxL/T8KQLFFiCA4t8eIRGpRR+UPgOdac2sYzonv+i0n3kXHmvHLLiOYL655DQx2Umii9Y9nNgL7ssu5haQ==, + } + peerDependencies: + react: '>=16.9.0' + dependencies: + '@babel/runtime': 7.23.9 + classnames: 2.5.1 + json2mq: 0.2.0 + react: 18.2.0 + resize-observer-polyfill: 1.5.1 + throttle-debounce: 5.0.0 + dev: true + /@babel/cli/7.21.0_@babel+core@7.21.0: resolution: { @@ -454,7 +472,7 @@ packages: slash: 2.0.0 optionalDependencies: '@nicolo-ribaudo/chokidar-2': 2.1.8-no-fsevents.3 - chokidar: 3.5.3 + chokidar: 3.6.0 dev: true /@babel/code-frame/7.12.11: @@ -2110,6 +2128,16 @@ packages: dependencies: regenerator-runtime: 0.13.11 + /@babel/runtime/7.23.9: + resolution: + { + integrity: sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==, + } + engines: { node: '>=6.9.0' } + dependencies: + regenerator-runtime: 0.14.1 + dev: true + /@babel/template/7.20.7: resolution: { @@ -2414,6 +2442,22 @@ packages: engines: { node: '>=10' } dev: true + /@ctrl/tinycolor/3.6.1: + resolution: + { + integrity: sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==, + } + engines: { node: '>=10' } + dev: true + + /@discoveryjs/json-ext/0.5.7: + resolution: + { + integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==, + } + engines: { node: '>=10.0.0' } + dev: true + /@emotion/hash/0.8.0: resolution: { @@ -2428,6 +2472,27 @@ packages: } dev: true + /@eslint-community/eslint-utils/4.4.0_eslint@8.57.0: + resolution: + { + integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==, + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.57.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@eslint-community/regexpp/4.10.0: + resolution: + { + integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==, + } + engines: { node: ^12.0.0 || ^14.0.0 || >=16.0.0 } + dev: true + /@eslint/eslintrc/0.4.3: resolution: { @@ -2448,6 +2513,34 @@ packages: - supports-color dev: true + /@eslint/eslintrc/2.1.4: + resolution: + { + integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==, + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.1 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@eslint/js/8.57.0: + resolution: + { + integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==, + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + dev: true + /@gcanvas/core/1.0.0: resolution: { @@ -2455,6 +2548,20 @@ packages: } dev: true + /@humanwhocodes/config-array/0.11.14: + resolution: + { + integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==, + } + engines: { node: '>=10.10.0' } + dependencies: + '@humanwhocodes/object-schema': 2.0.2 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: true + /@humanwhocodes/config-array/0.5.0: resolution: { @@ -2469,6 +2576,14 @@ packages: - supports-color dev: true + /@humanwhocodes/module-importer/1.0.1: + resolution: + { + integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==, + } + engines: { node: '>=12.22' } + dev: true + /@humanwhocodes/object-schema/1.2.1: resolution: { @@ -2476,6 +2591,13 @@ packages: } dev: true + /@humanwhocodes/object-schema/2.0.2: + resolution: + { + integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==, + } + dev: true + /@istanbuljs/load-nyc-config/1.1.0: resolution: { @@ -2641,13 +2763,13 @@ packages: '@jest/test-result': 29.4.3 '@jest/transform': 29.4.3 '@jest/types': 29.4.3 - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/trace-mapping': 0.3.23 '@types/node': 18.14.6 chalk: 4.1.2 collect-v8-coverage: 1.0.1 exit: 0.1.2 glob: 7.2.3 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 istanbul-lib-coverage: 3.2.0 istanbul-lib-instrument: 5.2.1 istanbul-lib-report: 3.0.0 @@ -2655,7 +2777,7 @@ packages: istanbul-reports: 3.1.5 jest-message-util: 29.4.3 jest-util: 29.4.3 - jest-worker: 29.4.3 + jest-worker: 29.7.0 slash: 3.0.0 string-length: 4.0.2 strip-ansi: 6.0.1 @@ -2684,6 +2806,16 @@ packages: '@sinclair/typebox': 0.25.24 dev: true + /@jest/schemas/29.6.3: + resolution: + { + integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + dependencies: + '@sinclair/typebox': 0.27.8 + dev: true + /@jest/source-map/29.4.3: resolution: { @@ -2691,9 +2823,9 @@ packages: } engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } dependencies: - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/trace-mapping': 0.3.23 callsites: 3.1.0 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 dev: true /@jest/test-result/29.4.3: @@ -2717,7 +2849,7 @@ packages: engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } dependencies: '@jest/test-result': 29.4.3 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jest-haste-map: 29.4.3 slash: 3.0.0 dev: true @@ -2731,12 +2863,12 @@ packages: dependencies: '@babel/core': 7.21.0 '@jest/types': 29.4.3 - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/trace-mapping': 0.3.23 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 convert-source-map: 2.0.0 fast-json-stable-stringify: 2.1.0 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jest-haste-map: 29.4.3 jest-regex-util: 29.4.3 jest-util: 29.4.3 @@ -2763,6 +2895,21 @@ packages: chalk: 4.1.2 dev: true + /@jest/types/29.6.3: + resolution: + { + integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + dependencies: + '@jest/schemas': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.4 + '@types/istanbul-reports': 3.0.1 + '@types/node': 20.6.0 + '@types/yargs': 17.0.24 + chalk: 4.1.2 + dev: true + /@jridgewell/gen-mapping/0.1.1: resolution: { @@ -2771,7 +2918,7 @@ packages: engines: { node: '>=6.0.0' } dependencies: '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.14 + '@jridgewell/sourcemap-codec': 1.4.15 dev: true /@jridgewell/gen-mapping/0.3.2: @@ -2782,10 +2929,22 @@ packages: engines: { node: '>=6.0.0' } dependencies: '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.14 + '@jridgewell/sourcemap-codec': 1.4.15 '@jridgewell/trace-mapping': 0.3.17 dev: true + /@jridgewell/gen-mapping/0.3.4: + resolution: + { + integrity: sha512-Oud2QPM5dHviZNn4y/WhhYKSXksv+1xLEIsNrAbGcFzUN3ubqWRFT5gwPchNc5NuzILOU4tPBDTZ4VwhL8Y7cw==, + } + engines: { node: '>=6.0.0' } + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.23 + dev: true + /@jridgewell/resolve-uri/3.1.0: resolution: { @@ -2794,6 +2953,14 @@ packages: engines: { node: '>=6.0.0' } dev: true + /@jridgewell/resolve-uri/3.1.2: + resolution: + { + integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==, + } + engines: { node: '>=6.0.0' } + dev: true + /@jridgewell/set-array/1.1.2: resolution: { @@ -2808,8 +2975,18 @@ packages: integrity: sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==, } dependencies: - '@jridgewell/gen-mapping': 0.3.2 - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/gen-mapping': 0.3.4 + '@jridgewell/trace-mapping': 0.3.23 + dev: true + + /@jridgewell/source-map/0.3.5: + resolution: + { + integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==, + } + dependencies: + '@jridgewell/gen-mapping': 0.3.4 + '@jridgewell/trace-mapping': 0.3.23 dev: true /@jridgewell/sourcemap-codec/1.4.14: @@ -2819,6 +2996,13 @@ packages: } dev: true + /@jridgewell/sourcemap-codec/1.4.15: + resolution: + { + integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==, + } + dev: true + /@jridgewell/trace-mapping/0.3.17: resolution: { @@ -2829,14 +3013,24 @@ packages: '@jridgewell/sourcemap-codec': 1.4.14 dev: true + /@jridgewell/trace-mapping/0.3.23: + resolution: + { + integrity: sha512-9/4foRoUKp8s96tSkh8DlAAc5A0Ty8vLXld+l9gjKKY6ckwI8G15f0hskGmuLZu78ZlGa1vtsfOa+lnB4vG6Jg==, + } + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + /@jridgewell/trace-mapping/0.3.9: resolution: { integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==, } dependencies: - '@jridgewell/resolve-uri': 3.1.0 - '@jridgewell/sourcemap-codec': 1.4.14 + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 dev: true /@mapbox/hast-util-to-jsx/1.0.0: @@ -2903,17 +3097,19 @@ packages: fastq: 1.15.0 dev: true - /@rc-component/context/1.3.0_biqbaboplfbrettd7655fr4n2y: + /@rc-component/color-picker/1.5.2_biqbaboplfbrettd7655fr4n2y: resolution: { - integrity: sha512-6QdaCJ7Wn5UZLJs15IEfqy4Ru3OaL5ctqpQYWd5rlfV9wwzrzdt6+kgAQZV/qdB0MUPN4nhyBfRembQCIvBf+w==, + integrity: sha512-YJXujYzYFAEtlXJXy0yJUhwzUWPTcniBZto+wZ/vnACmFnUTNR7dH+NOeqSwMMsssh74e9H5Jfpr5LAH2PYqUw==, } peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.21.0 - rc-util: 5.28.0_biqbaboplfbrettd7655fr4n2y + '@babel/runtime': 7.23.9 + '@ctrl/tinycolor': 3.6.1 + classnames: 2.5.1 + rc-util: 5.38.2_biqbaboplfbrettd7655fr4n2y react: 18.2.0 react-dom: 18.2.0_react@18.2.0 dev: true @@ -2933,6 +3129,21 @@ packages: react-dom: 16.14.0_react@18.2.0 dev: true + /@rc-component/context/1.4.0_biqbaboplfbrettd7655fr4n2y: + resolution: + { + integrity: sha512-kFcNxg9oLRMoL3qki0OMxK+7g5mypjgaaJp/pkOis/6rVxma9nJBF/8kCIuTYHUQNr0ii7MxqE33wirPZLJQ2w==, + } + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + dependencies: + '@babel/runtime': 7.23.9 + rc-util: 5.38.2_biqbaboplfbrettd7655fr4n2y + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + dev: true + /@rc-component/mini-decimal/1.0.1: resolution: { @@ -2943,21 +3154,14 @@ packages: '@babel/runtime': 7.21.0 dev: true - /@rc-component/mutate-observer/1.0.0_biqbaboplfbrettd7655fr4n2y: + /@rc-component/mini-decimal/1.1.0: resolution: { - integrity: sha512-okqRJSfNisXdI6CUeOLZC5ukBW/8kir2Ii4PJiKpUt+3+uS7dxwJUMxsUZquxA1rQuL8YcEmKVp/TCnR+yUdZA==, + integrity: sha512-jS4E7T9Li2GuYwI6PyiVXmxTiM6b07rlD9Ge8uGZSCz3WlzcG5ZK7g5bbuKNeZ9pgUuPK/5guV781ujdVpm4HQ==, } engines: { node: '>=8.x' } - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.21.0 - classnames: 2.3.2 - rc-util: 5.28.0_biqbaboplfbrettd7655fr4n2y - react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 + '@babel/runtime': 7.23.9 dev: true /@rc-component/mutate-observer/1.0.0_jnbmergxldlwssobus342vza4q: @@ -2977,19 +3181,19 @@ packages: react-dom: 16.14.0_react@18.2.0 dev: true - /@rc-component/portal/1.1.0_biqbaboplfbrettd7655fr4n2y: + /@rc-component/mutate-observer/1.1.0_biqbaboplfbrettd7655fr4n2y: resolution: { - integrity: sha512-tbXM9SB1r5FOuZjRCljERFByFiEUcMmCWMXLog/NmgCzlAzreXyf23Vei3ZpSMxSMavzPnhCovfZjZdmxS3d1w==, + integrity: sha512-QjrOsDXQusNwGZPf4/qRQasg7UFEj06XiCJ8iuiq/Io7CrHrgVi6Uuetw60WAMG1799v+aM8kyc+1L/GBbHSlw==, } engines: { node: '>=8.x' } peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.21.0 - classnames: 2.3.2 - rc-util: 5.28.0_biqbaboplfbrettd7655fr4n2y + '@babel/runtime': 7.23.9 + classnames: 2.5.1 + rc-util: 5.38.2_biqbaboplfbrettd7655fr4n2y react: 18.2.0 react-dom: 18.2.0_react@18.2.0 dev: true @@ -3011,21 +3215,38 @@ packages: react-dom: 16.14.0_react@18.2.0 dev: true - /@rc-component/tour/1.8.0_biqbaboplfbrettd7655fr4n2y: + /@rc-component/portal/1.1.2_biqbaboplfbrettd7655fr4n2y: resolution: { - integrity: sha512-rrRGioHTLQlGca27G2+lw7QpRb3uuMYCUIJjj31/B44VCJS0P2tqYhOgtzvWQmaLMlWH3ZlpzotkKX13NT4XEA==, + integrity: sha512-6f813C0IsasTZms08kfA8kPAGxbbkYToa8ALaiDIGGECU4i9hj8Plgbx0sNJDrey3EtHO30hmdaxtT0138xZcg==, } engines: { node: '>=8.x' } peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.21.0 - '@rc-component/portal': 1.1.0_biqbaboplfbrettd7655fr4n2y - '@rc-component/trigger': 1.5.0_biqbaboplfbrettd7655fr4n2y - classnames: 2.3.2 - rc-util: 5.28.0_biqbaboplfbrettd7655fr4n2y + '@babel/runtime': 7.23.9 + classnames: 2.5.1 + rc-util: 5.38.2_biqbaboplfbrettd7655fr4n2y + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + dev: true + + /@rc-component/tour/1.12.3_biqbaboplfbrettd7655fr4n2y: + resolution: + { + integrity: sha512-U4mf1FiUxGCwrX4ed8op77Y8VKur+8Y/61ylxtqGbcSoh1EBC7bWd/DkLu0ClTUrKZInqEi1FL7YgFtnT90vHA==, + } + engines: { node: '>=8.x' } + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + dependencies: + '@babel/runtime': 7.23.9 + '@rc-component/portal': 1.1.2_biqbaboplfbrettd7655fr4n2y + '@rc-component/trigger': 1.18.3_biqbaboplfbrettd7655fr4n2y + classnames: 2.5.1 + rc-util: 5.38.2_biqbaboplfbrettd7655fr4n2y react: 18.2.0 react-dom: 18.2.0_react@18.2.0 dev: true @@ -3049,23 +3270,22 @@ packages: react-dom: 16.14.0_react@18.2.0 dev: true - /@rc-component/trigger/1.5.0_biqbaboplfbrettd7655fr4n2y: + /@rc-component/trigger/1.18.3_biqbaboplfbrettd7655fr4n2y: resolution: { - integrity: sha512-uF5H7FjRbSDaCIWe+aASk/vdTJtmhZvAIcH5IbO/jBXdEbLz9OYoY7QfHWfmUwNGaEX640+z8mAawiVBQGOwFw==, + integrity: sha512-Ksr25pXreYe1gX6ayZ1jLrOrl9OAUHUqnuhEx6MeHnNa1zVM5Y2Aj3Q35UrER0ns8D2cJYtmJtVli+i+4eKrvA==, } engines: { node: '>=8.x' } peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.21.0 - '@rc-component/portal': 1.1.0_biqbaboplfbrettd7655fr4n2y - classnames: 2.3.2 - rc-align: 4.0.15_biqbaboplfbrettd7655fr4n2y - rc-motion: 2.6.3_biqbaboplfbrettd7655fr4n2y - rc-resize-observer: 1.3.1_biqbaboplfbrettd7655fr4n2y - rc-util: 5.28.0_biqbaboplfbrettd7655fr4n2y + '@babel/runtime': 7.23.9 + '@rc-component/portal': 1.1.2_biqbaboplfbrettd7655fr4n2y + classnames: 2.5.1 + rc-motion: 2.9.0_biqbaboplfbrettd7655fr4n2y + rc-resize-observer: 1.4.0_biqbaboplfbrettd7655fr4n2y + rc-util: 5.38.2_biqbaboplfbrettd7655fr4n2y react: 18.2.0 react-dom: 18.2.0_react@18.2.0 dev: true @@ -3112,6 +3332,13 @@ packages: } dev: true + /@sinclair/typebox/0.27.8: + resolution: + { + integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==, + } + dev: true + /@sinonjs/commons/2.0.0: resolution: { @@ -3309,39 +3536,40 @@ packages: '@babel/types': 7.21.2 dev: true - /@types/cheerio/0.22.31: + /@types/eslint-scope/3.7.4: resolution: { - integrity: sha512-Kt7Cdjjdi2XWSfrZ53v4Of0wG3ZcmaegFXjMmz9tfNrZSkzzo36G0AL1YqSdcIA78Etjt6E609pt5h1xnQkPUw==, + integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==, } dependencies: - '@types/node': 18.14.6 + '@types/eslint': 8.44.2 + '@types/estree': 1.0.5 dev: true - /@types/enzyme/3.10.12: + /@types/eslint/7.29.0: resolution: { - integrity: sha512-xryQlOEIe1TduDWAOphR0ihfebKFSWOXpIsk+70JskCfRfW+xALdnJ0r1ZOTo85F9Qsjk6vtlU7edTYHbls9tA==, + integrity: sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng==, } dependencies: - '@types/cheerio': 0.22.31 - '@types/react': 18.0.28 + '@types/estree': 1.0.5 + '@types/json-schema': 7.0.11 dev: true - /@types/eslint/7.29.0: + /@types/eslint/8.44.2: resolution: { - integrity: sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng==, + integrity: sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg==, } dependencies: - '@types/estree': 1.0.0 - '@types/json-schema': 7.0.11 + '@types/estree': 1.0.5 + '@types/json-schema': 7.0.12 dev: true - /@types/estree/1.0.0: + /@types/estree/1.0.5: resolution: { - integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==, + integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==, } dev: true @@ -3437,7 +3665,7 @@ packages: { integrity: sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA==, } - dev: false + dev: true /@types/jsdom/20.0.1: resolution: @@ -3457,50 +3685,30 @@ packages: } dev: true - /@types/keyv/3.1.4: + /@types/json-schema/7.0.12: resolution: { - integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==, + integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==, } - dependencies: - '@types/node': 18.14.6 dev: true - /@types/lodash.debounce/4.0.7: + /@types/keyv/3.1.4: resolution: { - integrity: sha512-X1T4wMZ+gT000M2/91SYj0d/7JfeNZ9PeeOldSNoE/lunLeQXKvkmIumI29IaKMotU/ln/McOIvgzZcQ/3TrSA==, + integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==, } dependencies: - '@types/lodash': 4.14.191 + '@types/node': 20.11.20 dev: true - /@types/lodash.isequal/4.5.6: + /@types/lodash/4.14.202: resolution: { - integrity: sha512-Ww4UGSe3DmtvLLJm2F16hDwEQSv7U0Rr8SujLUA2wHI2D2dm8kPu6Et+/y303LfjTIwSBKXB/YTUcAKpem/XEg==, + integrity: sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==, } - dependencies: - '@types/lodash': 4.14.191 dev: true - /@types/lodash.throttle/4.1.7: - resolution: - { - integrity: sha512-znwGDpjCHQ4FpLLx19w4OXDqq8+OvREa05H89obtSyXyOFKL3dDjCslsmfBz0T2FU8dmf5Wx1QvogbINiGIu9g==, - } - dependencies: - '@types/lodash': 4.14.191 - dev: true - - /@types/lodash/4.14.191: - resolution: - { - integrity: sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==, - } - dev: true - - /@types/mathjax/0.0.36: + /@types/mathjax/0.0.36: resolution: { integrity: sha512-TqDJc2GWuTqd/m+G/FbNkN+/TF2OCCHvcawmhIrUaZkdVquMdNZmNiNUkupNg9qctorXXkVLVSogZv1DhmgLmg==, @@ -3516,13 +3724,6 @@ packages: '@types/unist': 2.0.6 dev: true - /@types/minimatch/3.0.5: - resolution: - { - integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==, - } - dev: true - /@types/minimatch/5.1.2: resolution: { @@ -3558,6 +3759,22 @@ packages: } dev: true + /@types/node/20.11.20: + resolution: + { + integrity: sha512-7/rR21OS+fq8IyHTgtLkDK949uzsa6n8BkziAKtPVpugIkO6D+/ooXMvzXxDnZrmtXVfjb1bKQafYpb8s89LOg==, + } + dependencies: + undici-types: 5.26.5 + dev: true + + /@types/node/20.6.0: + resolution: + { + integrity: sha512-najjVq5KN2vsH2U/xyh2opaSEz6cZMR2SetLIlxlj08nOcmPOemJmUK2o4kUzfLqfrWE0PIrNeE16XhYDd3nqg==, + } + dev: true + /@types/normalize-package-data/2.4.1: resolution: { @@ -3661,7 +3878,7 @@ packages: dependencies: '@types/prop-types': 15.7.5 '@types/scheduler': 0.16.2 - csstype: 3.1.1 + csstype: 3.1.3 dev: true /@types/react/18.0.28: @@ -3681,7 +3898,7 @@ packages: integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==, } dependencies: - '@types/node': 18.14.6 + '@types/node': 20.11.20 dev: true /@types/sax/1.2.4: @@ -3753,6 +3970,15 @@ packages: '@types/yargs-parser': 21.0.0 dev: true + /@types/yargs/17.0.24: + resolution: + { + integrity: sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==, + } + dependencies: + '@types/yargs-parser': 21.0.0 + dev: true + /@typescript-eslint/eslint-plugin/5.54.0_upfp7q3y5merkkqzbm2yvqbijq: resolution: { @@ -3767,7 +3993,7 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/parser': 5.54.0_nydeehezxge4zglz7xgffbdlvu + '@typescript-eslint/parser': 5.54.0_b7tisbpcguunpryxdryrb3yucu '@typescript-eslint/scope-manager': 5.54.0 '@typescript-eslint/type-utils': 5.54.0_jofidmxrjzhj7l6vknpw5ecvfe '@typescript-eslint/utils': 5.54.0_jofidmxrjzhj7l6vknpw5ecvfe @@ -3805,7 +4031,7 @@ packages: - typescript dev: true - /@typescript-eslint/parser/5.54.0_nydeehezxge4zglz7xgffbdlvu: + /@typescript-eslint/parser/5.54.0_b7tisbpcguunpryxdryrb3yucu: resolution: { integrity: sha512-aAVL3Mu2qTi+h/r04WI/5PfNWvO6pdhpeMRWk9R7rEV4mwJNzoWf5CCU5vDKBsPIFQFjEq1xg7XBI2rjiMXQbQ==, @@ -3822,7 +4048,7 @@ packages: '@typescript-eslint/types': 5.54.0 '@typescript-eslint/typescript-estree': 5.54.0_typescript@5.1.3 debug: 4.3.4 - eslint: 7.32.0 + eslint: 8.57.0 typescript: 5.1.3 transitivePeerDependencies: - supports-color @@ -4003,7 +4229,7 @@ packages: engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } dependencies: '@typescript-eslint/types': 5.54.0 - eslint-visitor-keys: 3.3.0 + eslint-visitor-keys: 3.4.3 dev: true /@umijs/ast/3.5.37: @@ -4015,15 +4241,6 @@ packages: '@umijs/utils': 3.5.37 dev: true - /@umijs/ast/3.5.38: - resolution: - { - integrity: sha512-BqRu6DjHFD7Re6ZDXC4ke0vMEHB0i4LbSxnpHSHg6Dj2qbkjAnNlYcvxHrKYzXuGEcn15SjtbWIBcqGrZTpN7g==, - } - dependencies: - '@umijs/utils': 3.5.38 - dev: true - /@umijs/babel-plugin-auto-css-modules/3.5.37: resolution: { @@ -4033,15 +4250,6 @@ packages: '@umijs/utils': 3.5.37 dev: true - /@umijs/babel-plugin-auto-css-modules/3.5.38: - resolution: - { - integrity: sha512-dAzqyrlVXC3L1SQoL6pb95qzXgWRNta7LWS3o0jFleCpK+NyHpXLNEignuy0+Ekyz+wEUXlUCYfR1IEVXeovpQ==, - } - dependencies: - '@umijs/utils': 3.5.38 - dev: true - /@umijs/babel-plugin-import-to-await-require/3.5.37: resolution: { @@ -4051,15 +4259,6 @@ packages: '@umijs/utils': 3.5.37 dev: true - /@umijs/babel-plugin-import-to-await-require/3.5.38: - resolution: - { - integrity: sha512-WcYl+HcfFbX5woFWm7iqlFfJsEOG3a+T6lCdGTgrIDhgjmZonPe8oGORB24URZnpADEJ8Zhd6rvoA625SIvMsQ==, - } - dependencies: - '@umijs/utils': 3.5.38 - dev: true - /@umijs/babel-plugin-lock-core-js-3/3.5.37: resolution: { @@ -4070,16 +4269,6 @@ packages: core-js: 3.6.5 dev: true - /@umijs/babel-plugin-lock-core-js-3/3.5.38: - resolution: - { - integrity: sha512-JGZC7jKq67s6+xOSQWQoRtHabo9wa4Pf+cMw50a0PMT6QKDVDNvW+wcQ0mC4vRQwO+wR9A749croUtyqAjXL5w==, - } - dependencies: - '@umijs/utils': 3.5.38 - core-js: 3.6.5 - dev: true - /@umijs/babel-plugin-no-anonymous-default-export/3.5.37: resolution: { @@ -4089,15 +4278,6 @@ packages: '@umijs/utils': 3.5.37 dev: true - /@umijs/babel-plugin-no-anonymous-default-export/3.5.38: - resolution: - { - integrity: sha512-5RfKt+5UDaqOZASeHM1jLlUS2uBh/6Fzbfh9X2dE9Mo906AqC5dPN6NWWeQi+POLZr3LtWfE8RBBGxo44xUQLQ==, - } - dependencies: - '@umijs/utils': 3.5.38 - dev: true - /@umijs/babel-preset-umi/3.5.37: resolution: { @@ -4113,21 +4293,6 @@ packages: '@umijs/utils': 3.5.37 dev: true - /@umijs/babel-preset-umi/3.5.38: - resolution: - { - integrity: sha512-96NcgMnCzjZ6LhMH9BbQmk/7hXgsKe4WHeoiTvt0GibZf/gd0DAW+It38OnOnJuyJ/iXeTiN0haYe4HxRw3BRg==, - } - dependencies: - '@babel/runtime': 7.18.6 - '@umijs/babel-plugin-auto-css-modules': 3.5.38 - '@umijs/babel-plugin-import-to-await-require': 3.5.38 - '@umijs/babel-plugin-lock-core-js-3': 3.5.38 - '@umijs/babel-plugin-no-anonymous-default-export': 3.5.38 - '@umijs/deps': 3.5.38 - '@umijs/utils': 3.5.38 - dev: true - /@umijs/bundler-utils/3.5.37_263kk2d5tiuyg32yuu7rrhuyze: resolution: { @@ -4158,36 +4323,6 @@ packages: - react-router dev: true - /@umijs/bundler-utils/3.5.38_263kk2d5tiuyg32yuu7rrhuyze: - resolution: - { - integrity: sha512-1EmuejpnR9U05IFT9bLhb29frf4yXZaXimFdAlpZhBlc40IKVb62TbbI1+pJ+hrquhvYfoKhD9ID8lVw8kkFYw==, - } - dependencies: - '@umijs/babel-preset-umi': 3.5.38 - '@umijs/types': 3.5.38_263kk2d5tiuyg32yuu7rrhuyze - '@umijs/utils': 3.5.38 - transitivePeerDependencies: - - react - - react-dom - - react-router - dev: true - - /@umijs/bundler-utils/3.5.38_hflg5r6ml7trnjm7sh3tgaza54: - resolution: - { - integrity: sha512-1EmuejpnR9U05IFT9bLhb29frf4yXZaXimFdAlpZhBlc40IKVb62TbbI1+pJ+hrquhvYfoKhD9ID8lVw8kkFYw==, - } - dependencies: - '@umijs/babel-preset-umi': 3.5.38 - '@umijs/types': 3.5.38_hflg5r6ml7trnjm7sh3tgaza54 - '@umijs/utils': 3.5.38 - transitivePeerDependencies: - - react - - react-dom - - react-router - dev: true - /@umijs/bundler-webpack/3.5.37_263kk2d5tiuyg32yuu7rrhuyze: resolution: { @@ -4244,62 +4379,6 @@ packages: - react-router dev: true - /@umijs/bundler-webpack/3.5.38_263kk2d5tiuyg32yuu7rrhuyze: - resolution: - { - integrity: sha512-ywc0Vi9HB0oXS9lBnB4CJ5GwE3JF7ZbjnB4UJ14cpLq1fb0C3p52Z3SlSYI6AU3Jz770bZR6G/j3KsvXOojAzA==, - } - hasBin: true - dependencies: - '@umijs/bundler-utils': 3.5.38_263kk2d5tiuyg32yuu7rrhuyze - '@umijs/case-sensitive-paths-webpack-plugin': 1.0.1 - '@umijs/deps': 3.5.38 - '@umijs/types': 3.5.38_263kk2d5tiuyg32yuu7rrhuyze - '@umijs/utils': 3.5.38 - jest-worker: 26.6.2 - node-libs-browser: 2.2.1 - normalize-url: 1.9.1 - postcss: 7.0.32 - postcss-flexbugs-fixes: 4.2.1 - postcss-loader: 3.0.0 - postcss-preset-env: 6.7.0 - postcss-safe-parser: 4.0.2 - terser: 5.14.2 - webpack-chain: 6.5.1 - transitivePeerDependencies: - - react - - react-dom - - react-router - dev: true - - /@umijs/bundler-webpack/3.5.38_hflg5r6ml7trnjm7sh3tgaza54: - resolution: - { - integrity: sha512-ywc0Vi9HB0oXS9lBnB4CJ5GwE3JF7ZbjnB4UJ14cpLq1fb0C3p52Z3SlSYI6AU3Jz770bZR6G/j3KsvXOojAzA==, - } - hasBin: true - dependencies: - '@umijs/bundler-utils': 3.5.38_hflg5r6ml7trnjm7sh3tgaza54 - '@umijs/case-sensitive-paths-webpack-plugin': 1.0.1 - '@umijs/deps': 3.5.38 - '@umijs/types': 3.5.38_hflg5r6ml7trnjm7sh3tgaza54 - '@umijs/utils': 3.5.38 - jest-worker: 26.6.2 - node-libs-browser: 2.2.1 - normalize-url: 1.9.1 - postcss: 7.0.32 - postcss-flexbugs-fixes: 4.2.1 - postcss-loader: 3.0.0 - postcss-preset-env: 6.7.0 - postcss-safe-parser: 4.0.2 - terser: 5.14.2 - webpack-chain: 6.5.1 - transitivePeerDependencies: - - react - - react-dom - - react-router - dev: true - /@umijs/case-sensitive-paths-webpack-plugin/1.0.1: resolution: { @@ -4319,18 +4398,6 @@ packages: '@umijs/utils': 3.5.37 dev: true - /@umijs/core/3.5.38: - resolution: - { - integrity: sha512-Bz7gsd2OPmD3GTq7lDk2q12D/N5ZY4EQyY6+mJaWiuzIwhKpWJpC1x1BV7QB2MeIEJPp3YHuMp+EXds4uWynBQ==, - } - dependencies: - '@umijs/ast': 3.5.38 - '@umijs/babel-preset-umi': 3.5.38 - '@umijs/deps': 3.5.38 - '@umijs/utils': 3.5.38 - dev: true - /@umijs/deps/3.5.37: resolution: { @@ -4346,21 +4413,6 @@ packages: regenerate-unicode-properties: 10.0.1 dev: true - /@umijs/deps/3.5.38: - resolution: - { - integrity: sha512-y/b87W6CjOpDinBtk1z8ndGlh1l1uYVgrBlORZDiq1OjYS88sY2SmP5y3xGO9SiZGXyHSmRqJaxFfT8VvjQN1Q==, - } - dependencies: - '@bloomberg/record-tuple-polyfill': 0.0.3 - chokidar: 3.5.1 - clipboardy: 2.3.0 - esbuild: 0.12.15 - jest-worker: 24.9.0 - prettier: 2.2.1 - regenerate-unicode-properties: 10.0.1 - dev: true - /@umijs/fabric/2.14.1: resolution: { @@ -4376,7 +4428,7 @@ packages: '@babel/preset-react': 7.18.6_@babel+core@7.21.0 '@babel/preset-typescript': 7.21.0_@babel+core@7.21.0 '@typescript-eslint/eslint-plugin': 5.54.0_upfp7q3y5merkkqzbm2yvqbijq - '@typescript-eslint/parser': 5.54.0_nydeehezxge4zglz7xgffbdlvu + '@typescript-eslint/parser': 5.54.0_b7tisbpcguunpryxdryrb3yucu chalk: 4.1.2 eslint: 7.32.0 eslint-config-prettier: 8.7.0_eslint@7.32.0 @@ -4389,9 +4441,9 @@ packages: eslint-plugin-unicorn: 20.1.0_eslint@7.32.0 fast-glob: 3.2.12 os-locale: 5.0.0 - prettier: 2.8.4 - prettier-plugin-packagejson: 2.3.0_prettier@2.8.4 - prettier-plugin-two-style-order: 1.0.1_prettier@2.8.4 + prettier: 2.8.8 + prettier-plugin-packagejson: 2.3.0_prettier@2.8.8 + prettier-plugin-two-style-order: 1.0.1_prettier@2.8.8 stylelint: 13.13.1 stylelint-config-css-modules: 2.3.0_stylelint@13.13.1 stylelint-config-prettier: 8.0.2_stylelint@13.13.1 @@ -4404,7 +4456,7 @@ packages: - supports-color dev: true - /@umijs/plugin-analytics/0.2.3_umi@3.5.38: + /@umijs/plugin-analytics/0.2.3_umi@3.5.37: resolution: { integrity: sha512-6Fj+EOzd2vXe1YHjK1aqhHlITWBXcnhPd6pxAEjeGu3vAxDcfp1yM3PoRr//baBXk8CYF2krWDQGYy+OlRXM4A==, @@ -4412,24 +4464,7 @@ packages: peerDependencies: umi: 3.x dependencies: - umi: 3.5.38_react-router@6.8.2 - dev: true - - /@umijs/plugin-sass/1.1.1_umi@3.5.38+webpack@4.46.0: - resolution: - { - integrity: sha512-z9Gyn/pasXLD/URjErBuMH41DPGd669kmeDUUDnYQMbazNAa2+hiWKsVbHhLM0In27GE/ElQZ+bk/9M9dgH88A==, - } - peerDependencies: - umi: 3.x - dependencies: - sass: 1.58.3 - sass-loader: 8.0.2_sass@1.58.3+webpack@4.46.0 - umi: 3.5.38_react-router@6.8.2 - transitivePeerDependencies: - - fibers - - node-sass - - webpack + umi: 3.5.37_react-router@6.8.2 dev: true /@umijs/preset-built-in/3.5.37_wcqkhtmu7mswc6yz4uyexck3ty: @@ -4471,46 +4506,7 @@ packages: - react-dom dev: true - /@umijs/preset-built-in/3.5.38_wcqkhtmu7mswc6yz4uyexck3ty: - resolution: - { - integrity: sha512-QoXHMmZm0S3zKCbJ1DDfaage0QF4zjnCjNIBzULFpFDUN7tZ4E69LXkqjFu4po9f+FokBxj1tn9ZB9wcpJwDRg==, - } - peerDependencies: - react: 16.x || 17.x - dependencies: - '@types/react-router-config': 5.0.2 - '@umijs/babel-preset-umi': 3.5.38 - '@umijs/bundler-webpack': 3.5.38_hflg5r6ml7trnjm7sh3tgaza54 - '@umijs/core': 3.5.38 - '@umijs/deps': 3.5.38 - '@umijs/renderer-mpa': 3.5.38_wcqkhtmu7mswc6yz4uyexck3ty - '@umijs/renderer-react': 3.5.38_hflg5r6ml7trnjm7sh3tgaza54 - '@umijs/runtime': 3.5.38_react@16.14.0 - '@umijs/server': 3.5.38 - '@umijs/types': 3.5.38_hflg5r6ml7trnjm7sh3tgaza54 - '@umijs/utils': 3.5.38 - ansi-html: 0.0.9 - core-js: 3.6.5 - core-js-pure: 3.29.1 - error-stack-parser: 2.1.4 - es-module-lexer: 0.7.1 - es5-imcompatible-versions: 0.1.81 - history-with-query: 4.10.4 - html-entities: 2.3.3 - mime: 1.4.1 - react: 16.14.0 - react-refresh: 0.10.0 - react-router: 5.2.0_react@16.14.0 - react-router-config: 5.1.1_6flbfkch6crntn4ac2g723iqde - react-router-dom: 5.2.0_react@16.14.0 - regenerator-runtime: 0.13.5 - schema-utils: 3.1.1 - transitivePeerDependencies: - - react-dom - dev: true - - /@umijs/preset-dumi/1.1.50_uqfskxwgvxz7pnpzy3ggws2zlu: + /@umijs/preset-dumi/1.1.50_hybve2zuw5q64fgjm73h46xefu: resolution: { integrity: sha512-HhKMGct5DEd+ZZxBLbCUvXxnMh4MYlMeFIQXf2Ei9tVaKCeNri4I+BYb93swAmEl2v+2PxrKHCCzXNv07C+9Uw==, @@ -4526,7 +4522,7 @@ packages: '@mapbox/hast-util-to-jsx': 1.0.0 '@umijs/babel-preset-umi': 3.5.37 '@umijs/core': 3.5.37 - '@umijs/plugin-analytics': 0.2.3_umi@3.5.38 + '@umijs/plugin-analytics': 0.2.3_umi@3.5.37 '@umijs/runtime': 3.5.37_react@18.2.0 '@umijs/types': 3.5.37_dcrkjks5ndmrrgy72rhd72hmq4 '@umijs/utils': 3.5.37 @@ -4561,7 +4557,7 @@ packages: sitemap: 6.4.0 slash2: 2.0.0 terser: 5.16.5 - umi: 3.5.38_react-router@6.8.2 + umi: 3.5.37_react-router@6.8.2 unified: 8.4.2 unist-util-visit: 2.0.3 unist-util-visit-parents: 3.1.1 @@ -4592,22 +4588,6 @@ packages: react-dom: 16.14.0_react@16.14.0 dev: true - /@umijs/renderer-mpa/3.5.38_wcqkhtmu7mswc6yz4uyexck3ty: - resolution: - { - integrity: sha512-zYnl4HdUdYCZZ9glHT6a234egr5fN6J3WSkiWrs+GBGEP+u3EAdyfaKeJ8rk/RxNMIEp37SsrTnsgRFwmwZnsg==, - } - peerDependencies: - react: 16.x || 17.x - react-dom: 16.x || 17.x - dependencies: - '@types/react': 16.14.35 - '@types/react-dom': 16.9.18 - '@umijs/runtime': 3.5.38_react@16.14.0 - react: 16.14.0 - react-dom: 16.14.0_react@16.14.0 - dev: true - /@umijs/renderer-react/3.5.37_263kk2d5tiuyg32yuu7rrhuyze: resolution: { @@ -4668,46 +4648,6 @@ packages: - react-router dev: true - /@umijs/renderer-react/3.5.38_263kk2d5tiuyg32yuu7rrhuyze: - resolution: - { - integrity: sha512-bsBYphb5h2X0M876YEvHPcGMQroU/AxcotUji0BmILXOEmugX/2LCb9EQcWv/oSzED+J646e1HZ+3dU8I8oMPA==, - } - peerDependencies: - react: 16.x || 17.x - react-dom: 16.x || 17.x - dependencies: - '@types/react': 16.14.35 - '@types/react-dom': 16.9.18 - '@types/react-router-config': 5.0.2 - '@umijs/runtime': 3.5.38_react@16.14.0 - react: 16.14.0 - react-dom: 16.14.0_react@16.14.0 - react-router-config: 5.1.1_w3pku2rfskdxqtbs66joerxk6y - transitivePeerDependencies: - - react-router - dev: true - - /@umijs/renderer-react/3.5.38_hflg5r6ml7trnjm7sh3tgaza54: - resolution: - { - integrity: sha512-bsBYphb5h2X0M876YEvHPcGMQroU/AxcotUji0BmILXOEmugX/2LCb9EQcWv/oSzED+J646e1HZ+3dU8I8oMPA==, - } - peerDependencies: - react: 16.x || 17.x - react-dom: 16.x || 17.x - dependencies: - '@types/react': 16.14.35 - '@types/react-dom': 16.9.18 - '@types/react-router-config': 5.0.2 - '@umijs/runtime': 3.5.38_react@16.14.0 - react: 16.14.0 - react-dom: 16.14.0_react@16.14.0 - react-router-config: 5.1.1_6flbfkch6crntn4ac2g723iqde - transitivePeerDependencies: - - react-router - dev: true - /@umijs/runtime/3.5.37_react@16.14.0: resolution: { @@ -4742,23 +4682,6 @@ packages: use-subscription: 1.5.1_react@18.2.0 dev: true - /@umijs/runtime/3.5.38_react@16.14.0: - resolution: - { - integrity: sha512-zulgJehVnZ9QJVRRMdyZ/8Ga2IOuEjiLxFEQTJ885dTWC9GjOL2zCB7NfLt/93McWQeDP/6OjSTRQxMFWr2aRQ==, - } - peerDependencies: - react: 16.x || 17.x - dependencies: - '@types/react-router': 5.1.12 - '@types/react-router-dom': 5.1.7 - history-with-query: 4.10.4 - react: 16.14.0 - react-router: 5.2.0_react@16.14.0 - react-router-dom: 5.2.0_react@16.14.0 - use-subscription: 1.5.1_react@16.14.0 - dev: true - /@umijs/server/3.5.37: resolution: { @@ -4770,17 +4693,6 @@ packages: '@umijs/utils': 3.5.37 dev: true - /@umijs/server/3.5.38: - resolution: - { - integrity: sha512-rPfFwG6//bzupMBc5Mab3zqwA5X0pfngcv2CUv6iv8e8aRMVBILurXtXx2f6E1B6apaWDIrHlEiR4StEMJgcIA==, - } - dependencies: - '@umijs/core': 3.5.38 - '@umijs/deps': 3.5.38 - '@umijs/utils': 3.5.38 - dev: true - /@umijs/types/3.5.37_263kk2d5tiuyg32yuu7rrhuyze: resolution: { @@ -4838,44 +4750,6 @@ packages: - react-router dev: true - /@umijs/types/3.5.38_263kk2d5tiuyg32yuu7rrhuyze: - resolution: - { - integrity: sha512-r0uMJUs7/zZsgcyZtuGGeloeCZLNw6DTC894nQoXAgLwJQl9cWQzUu/3JamHupc6OFgsecOo6hu+pWyOdbyg7w==, - } - dependencies: - '@umijs/babel-preset-umi': 3.5.38 - '@umijs/core': 3.5.38 - '@umijs/deps': 3.5.38 - '@umijs/renderer-react': 3.5.38_263kk2d5tiuyg32yuu7rrhuyze - '@umijs/server': 3.5.38 - '@umijs/utils': 3.5.38 - webpack-chain: 6.5.1 - transitivePeerDependencies: - - react - - react-dom - - react-router - dev: true - - /@umijs/types/3.5.38_hflg5r6ml7trnjm7sh3tgaza54: - resolution: - { - integrity: sha512-r0uMJUs7/zZsgcyZtuGGeloeCZLNw6DTC894nQoXAgLwJQl9cWQzUu/3JamHupc6OFgsecOo6hu+pWyOdbyg7w==, - } - dependencies: - '@umijs/babel-preset-umi': 3.5.38 - '@umijs/core': 3.5.38 - '@umijs/deps': 3.5.38 - '@umijs/renderer-react': 3.5.38_hflg5r6ml7trnjm7sh3tgaza54 - '@umijs/server': 3.5.38 - '@umijs/utils': 3.5.38 - webpack-chain: 6.5.1 - transitivePeerDependencies: - - react - - react-dom - - react-router - dev: true - /@umijs/utils/3.5.37: resolution: { @@ -4886,20 +4760,17 @@ packages: '@umijs/deps': 3.5.37 dev: true - /@umijs/utils/3.5.38: + /@ungap/promise-all-settled/1.1.2: resolution: { - integrity: sha512-+FTHqPAd/oDLe3G4h7JEb3sQwzHBTgkC6q3PIxesoedkxFG6a5KWbW9A23TjUHYZ+oKo7wYAuYDVj09ns3D+hw==, + integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==, } - dependencies: - '@umijs/babel-preset-umi': 3.5.38 - '@umijs/deps': 3.5.38 dev: true - /@ungap/promise-all-settled/1.1.2: + /@ungap/structured-clone/1.2.0: resolution: { - integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==, + integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==, } dev: true @@ -4982,185 +4853,201 @@ packages: '@uni/action-sheet': 1.0.7 dev: true - /@webassemblyjs/ast/1.9.0: + /@webassemblyjs/ast/1.11.6: resolution: { - integrity: sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==, + integrity: sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==, } dependencies: - '@webassemblyjs/helper-module-context': 1.9.0 - '@webassemblyjs/helper-wasm-bytecode': 1.9.0 - '@webassemblyjs/wast-parser': 1.9.0 + '@webassemblyjs/helper-numbers': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 dev: true - /@webassemblyjs/floating-point-hex-parser/1.9.0: + /@webassemblyjs/floating-point-hex-parser/1.11.6: resolution: { - integrity: sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==, + integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==, } dev: true - /@webassemblyjs/helper-api-error/1.9.0: + /@webassemblyjs/helper-api-error/1.11.6: resolution: { - integrity: sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==, + integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==, } dev: true - /@webassemblyjs/helper-buffer/1.9.0: + /@webassemblyjs/helper-buffer/1.11.6: resolution: { - integrity: sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==, + integrity: sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==, } dev: true - /@webassemblyjs/helper-code-frame/1.9.0: + /@webassemblyjs/helper-numbers/1.11.6: resolution: { - integrity: sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==, + integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==, } dependencies: - '@webassemblyjs/wast-printer': 1.9.0 + '@webassemblyjs/floating-point-hex-parser': 1.11.6 + '@webassemblyjs/helper-api-error': 1.11.6 + '@xtuc/long': 4.2.2 dev: true - /@webassemblyjs/helper-fsm/1.9.0: + /@webassemblyjs/helper-wasm-bytecode/1.11.6: resolution: { - integrity: sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==, + integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==, } dev: true - /@webassemblyjs/helper-module-context/1.9.0: + /@webassemblyjs/helper-wasm-section/1.11.6: resolution: { - integrity: sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==, + integrity: sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==, } dependencies: - '@webassemblyjs/ast': 1.9.0 + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-buffer': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/wasm-gen': 1.11.6 dev: true - /@webassemblyjs/helper-wasm-bytecode/1.9.0: + /@webassemblyjs/ieee754/1.11.6: resolution: { - integrity: sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==, + integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==, } + dependencies: + '@xtuc/ieee754': 1.2.0 dev: true - /@webassemblyjs/helper-wasm-section/1.9.0: + /@webassemblyjs/leb128/1.11.6: resolution: { - integrity: sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==, + integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==, } dependencies: - '@webassemblyjs/ast': 1.9.0 - '@webassemblyjs/helper-buffer': 1.9.0 - '@webassemblyjs/helper-wasm-bytecode': 1.9.0 - '@webassemblyjs/wasm-gen': 1.9.0 + '@xtuc/long': 4.2.2 dev: true - /@webassemblyjs/ieee754/1.9.0: + /@webassemblyjs/utf8/1.11.6: resolution: { - integrity: sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==, + integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==, } - dependencies: - '@xtuc/ieee754': 1.2.0 dev: true - /@webassemblyjs/leb128/1.9.0: + /@webassemblyjs/wasm-edit/1.11.6: resolution: { - integrity: sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==, + integrity: sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==, } dependencies: - '@xtuc/long': 4.2.2 + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-buffer': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/helper-wasm-section': 1.11.6 + '@webassemblyjs/wasm-gen': 1.11.6 + '@webassemblyjs/wasm-opt': 1.11.6 + '@webassemblyjs/wasm-parser': 1.11.6 + '@webassemblyjs/wast-printer': 1.11.6 dev: true - /@webassemblyjs/utf8/1.9.0: + /@webassemblyjs/wasm-gen/1.11.6: resolution: { - integrity: sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==, + integrity: sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==, } + dependencies: + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/ieee754': 1.11.6 + '@webassemblyjs/leb128': 1.11.6 + '@webassemblyjs/utf8': 1.11.6 dev: true - /@webassemblyjs/wasm-edit/1.9.0: + /@webassemblyjs/wasm-opt/1.11.6: resolution: { - integrity: sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==, + integrity: sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==, } dependencies: - '@webassemblyjs/ast': 1.9.0 - '@webassemblyjs/helper-buffer': 1.9.0 - '@webassemblyjs/helper-wasm-bytecode': 1.9.0 - '@webassemblyjs/helper-wasm-section': 1.9.0 - '@webassemblyjs/wasm-gen': 1.9.0 - '@webassemblyjs/wasm-opt': 1.9.0 - '@webassemblyjs/wasm-parser': 1.9.0 - '@webassemblyjs/wast-printer': 1.9.0 + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-buffer': 1.11.6 + '@webassemblyjs/wasm-gen': 1.11.6 + '@webassemblyjs/wasm-parser': 1.11.6 dev: true - /@webassemblyjs/wasm-gen/1.9.0: + /@webassemblyjs/wasm-parser/1.11.6: resolution: { - integrity: sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==, + integrity: sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==, } dependencies: - '@webassemblyjs/ast': 1.9.0 - '@webassemblyjs/helper-wasm-bytecode': 1.9.0 - '@webassemblyjs/ieee754': 1.9.0 - '@webassemblyjs/leb128': 1.9.0 - '@webassemblyjs/utf8': 1.9.0 + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-api-error': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/ieee754': 1.11.6 + '@webassemblyjs/leb128': 1.11.6 + '@webassemblyjs/utf8': 1.11.6 dev: true - /@webassemblyjs/wasm-opt/1.9.0: + /@webassemblyjs/wast-printer/1.11.6: resolution: { - integrity: sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==, + integrity: sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==, } dependencies: - '@webassemblyjs/ast': 1.9.0 - '@webassemblyjs/helper-buffer': 1.9.0 - '@webassemblyjs/wasm-gen': 1.9.0 - '@webassemblyjs/wasm-parser': 1.9.0 + '@webassemblyjs/ast': 1.11.6 + '@xtuc/long': 4.2.2 dev: true - /@webassemblyjs/wasm-parser/1.9.0: + /@webpack-cli/configtest/2.1.1_hnl4swsiqcfi2tanzermfafqya: resolution: { - integrity: sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==, + integrity: sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==, } + engines: { node: '>=14.15.0' } + peerDependencies: + webpack: 5.x.x + webpack-cli: 5.x.x dependencies: - '@webassemblyjs/ast': 1.9.0 - '@webassemblyjs/helper-api-error': 1.9.0 - '@webassemblyjs/helper-wasm-bytecode': 1.9.0 - '@webassemblyjs/ieee754': 1.9.0 - '@webassemblyjs/leb128': 1.9.0 - '@webassemblyjs/utf8': 1.9.0 + webpack: 5.90.3_webpack-cli@5.1.4 + webpack-cli: 5.1.4_webpack@5.90.3 dev: true - /@webassemblyjs/wast-parser/1.9.0: + /@webpack-cli/info/2.0.2_hnl4swsiqcfi2tanzermfafqya: resolution: { - integrity: sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==, + integrity: sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==, } + engines: { node: '>=14.15.0' } + peerDependencies: + webpack: 5.x.x + webpack-cli: 5.x.x dependencies: - '@webassemblyjs/ast': 1.9.0 - '@webassemblyjs/floating-point-hex-parser': 1.9.0 - '@webassemblyjs/helper-api-error': 1.9.0 - '@webassemblyjs/helper-code-frame': 1.9.0 - '@webassemblyjs/helper-fsm': 1.9.0 - '@xtuc/long': 4.2.2 + webpack: 5.90.3_webpack-cli@5.1.4 + webpack-cli: 5.1.4_webpack@5.90.3 dev: true - /@webassemblyjs/wast-printer/1.9.0: + /@webpack-cli/serve/2.0.5_hnl4swsiqcfi2tanzermfafqya: resolution: { - integrity: sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==, + integrity: sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==, } + engines: { node: '>=14.15.0' } + peerDependencies: + webpack: 5.x.x + webpack-cli: 5.x.x + webpack-dev-server: '*' + peerDependenciesMeta: + webpack-dev-server: + optional: true dependencies: - '@webassemblyjs/ast': 1.9.0 - '@webassemblyjs/wast-parser': 1.9.0 - '@xtuc/long': 4.2.2 + webpack: 5.90.3_webpack-cli@5.1.4 + webpack-cli: 5.1.4_webpack@5.90.3 dev: true /@xobotyi/scrollbar-width/1.9.5: @@ -5222,6 +5109,17 @@ packages: acorn-walk: 8.2.0 dev: true + /acorn-import-assertions/1.9.0_acorn@8.10.0: + resolution: + { + integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==, + } + peerDependencies: + acorn: ^8 + dependencies: + acorn: 8.10.0 + dev: true + /acorn-jsx/5.3.2_acorn@7.4.1: resolution: { @@ -5233,6 +5131,17 @@ packages: acorn: 7.4.1 dev: true + /acorn-jsx/5.3.2_acorn@8.11.3: + resolution: + { + integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==, + } + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.11.3 + dev: true + /acorn-walk/7.2.0: resolution: { @@ -5249,19 +5158,28 @@ packages: engines: { node: '>=0.4.0' } dev: true - /acorn/6.4.2: + /acorn/7.4.1: resolution: { - integrity: sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==, + integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==, } engines: { node: '>=0.4.0' } hasBin: true dev: true - /acorn/7.4.1: + /acorn/8.10.0: resolution: { - integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==, + integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==, + } + engines: { node: '>=0.4.0' } + hasBin: true + dev: true + + /acorn/8.11.3: + resolution: + { + integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==, } engines: { node: '>=0.4.0' } hasBin: true @@ -5319,33 +5237,6 @@ packages: indent-string: 4.0.0 dev: true - /ahooks-v3-count/1.0.0: - resolution: - { - integrity: sha512-V7uUvAwnimu6eh/PED4mCDjE7tokeZQLKlxg9lCTMPhN+NjsSbtdacByVlR1oluXQzD3MOw55wylDmQo4+S9ZQ==, - } - dev: false - - /airbnb-prop-types/2.16.0_react@18.2.0: - resolution: - { - integrity: sha512-7WHOFolP/6cS96PhKNrslCLMYAI8yB1Pp6u6XmxozQOiZbsI5ycglZr5cHhBFfuRcQQjzCMith5ZPZdYiJCxUg==, - } - peerDependencies: - react: ^0.14 || ^15.0.0 || ^16.0.0-alpha - dependencies: - array.prototype.find: 2.2.1 - function.prototype.name: 1.1.5 - is-regex: 1.1.4 - object-is: 1.1.5 - object.assign: 4.1.4 - object.entries: 1.1.6 - prop-types: 15.8.1 - prop-types-exact: 1.2.0 - react: 18.2.0 - react-is: 16.13.1 - dev: true - /ajv-errors/1.0.1_ajv@6.12.6: resolution: { @@ -5532,67 +5423,67 @@ packages: engines: { node: '>=0.10.0' } dev: true - /antd/5.3.0_biqbaboplfbrettd7655fr4n2y: + /antd/5.14.2_biqbaboplfbrettd7655fr4n2y: resolution: { - integrity: sha512-+l8K2AQ+yvIOq9hzWtha3nG3ydFfwN6+fUmSGCqyThFrLPI2Y3IUPXdAXP4aQcYAnu1Q0sLwsTgHRvE2AXfZUw==, + integrity: sha512-ur0oBI9U7hAeON4ZRs1cAF1suIpTR+uj3YliTZacWkiVxNTZYPaaTdnLuAZDRMT9P2IZ007dCQTqxn5t1Z+Dxw==, } peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@ant-design/colors': 7.0.0 - '@ant-design/cssinjs': 1.6.1_biqbaboplfbrettd7655fr4n2y - '@ant-design/icons': 5.0.1_biqbaboplfbrettd7655fr4n2y - '@ant-design/react-slick': 1.0.0_react@18.2.0 - '@babel/runtime': 7.21.0 - '@ctrl/tinycolor': 3.6.0 - '@rc-component/mutate-observer': 1.0.0_biqbaboplfbrettd7655fr4n2y - '@rc-component/tour': 1.8.0_biqbaboplfbrettd7655fr4n2y - '@rc-component/trigger': 1.5.0_biqbaboplfbrettd7655fr4n2y - classnames: 2.3.2 + '@ant-design/colors': 7.0.2 + '@ant-design/cssinjs': 1.18.4_biqbaboplfbrettd7655fr4n2y + '@ant-design/icons': 5.3.0_biqbaboplfbrettd7655fr4n2y + '@ant-design/react-slick': 1.0.2_react@18.2.0 + '@ctrl/tinycolor': 3.6.1 + '@rc-component/color-picker': 1.5.2_biqbaboplfbrettd7655fr4n2y + '@rc-component/mutate-observer': 1.1.0_biqbaboplfbrettd7655fr4n2y + '@rc-component/tour': 1.12.3_biqbaboplfbrettd7655fr4n2y + '@rc-component/trigger': 1.18.3_biqbaboplfbrettd7655fr4n2y + classnames: 2.5.1 copy-to-clipboard: 3.3.3 - dayjs: 1.11.7 + dayjs: 1.11.10 qrcode.react: 3.1.0_react@18.2.0 - rc-cascader: 3.9.0_biqbaboplfbrettd7655fr4n2y - rc-checkbox: 2.3.2_biqbaboplfbrettd7655fr4n2y - rc-collapse: 3.5.2_biqbaboplfbrettd7655fr4n2y - rc-dialog: 9.0.2_biqbaboplfbrettd7655fr4n2y - rc-drawer: 6.1.3_biqbaboplfbrettd7655fr4n2y - rc-dropdown: 4.0.1_biqbaboplfbrettd7655fr4n2y - rc-field-form: 1.27.4_biqbaboplfbrettd7655fr4n2y - rc-image: 5.15.2_biqbaboplfbrettd7655fr4n2y - rc-input: 0.2.2_biqbaboplfbrettd7655fr4n2y - rc-input-number: 7.4.2_biqbaboplfbrettd7655fr4n2y - rc-mentions: 2.0.0_biqbaboplfbrettd7655fr4n2y - rc-menu: 9.8.2_biqbaboplfbrettd7655fr4n2y - rc-motion: 2.6.3_biqbaboplfbrettd7655fr4n2y - rc-notification: 5.0.2_biqbaboplfbrettd7655fr4n2y - rc-pagination: 3.2.0_biqbaboplfbrettd7655fr4n2y - rc-picker: 3.2.4_mlnkrlbros4rghcauwy625gk7y - rc-progress: 3.4.1_biqbaboplfbrettd7655fr4n2y - rc-rate: 2.9.2_biqbaboplfbrettd7655fr4n2y - rc-resize-observer: 1.3.1_biqbaboplfbrettd7655fr4n2y - rc-segmented: 2.1.2_biqbaboplfbrettd7655fr4n2y - rc-select: 14.3.0_biqbaboplfbrettd7655fr4n2y - rc-slider: 10.1.1_biqbaboplfbrettd7655fr4n2y - rc-steps: 6.0.0_biqbaboplfbrettd7655fr4n2y - rc-switch: 4.0.0_biqbaboplfbrettd7655fr4n2y - rc-table: 7.31.0_biqbaboplfbrettd7655fr4n2y - rc-tabs: 12.5.7_biqbaboplfbrettd7655fr4n2y - rc-textarea: 1.0.1_biqbaboplfbrettd7655fr4n2y - rc-tooltip: 6.0.1_biqbaboplfbrettd7655fr4n2y - rc-tree: 5.7.2_biqbaboplfbrettd7655fr4n2y - rc-tree-select: 5.7.0_biqbaboplfbrettd7655fr4n2y - rc-trigger: 5.3.4_biqbaboplfbrettd7655fr4n2y - rc-upload: 4.3.4_biqbaboplfbrettd7655fr4n2y - rc-util: 5.28.0_biqbaboplfbrettd7655fr4n2y + rc-cascader: 3.21.2_biqbaboplfbrettd7655fr4n2y + rc-checkbox: 3.1.0_biqbaboplfbrettd7655fr4n2y + rc-collapse: 3.7.2_biqbaboplfbrettd7655fr4n2y + rc-dialog: 9.3.4_biqbaboplfbrettd7655fr4n2y + rc-drawer: 7.0.0_biqbaboplfbrettd7655fr4n2y + rc-dropdown: 4.1.0_biqbaboplfbrettd7655fr4n2y + rc-field-form: 1.41.0_biqbaboplfbrettd7655fr4n2y + rc-image: 7.5.1_biqbaboplfbrettd7655fr4n2y + rc-input: 1.4.3_biqbaboplfbrettd7655fr4n2y + rc-input-number: 9.0.0_biqbaboplfbrettd7655fr4n2y + rc-mentions: 2.10.1_biqbaboplfbrettd7655fr4n2y + rc-menu: 9.12.4_biqbaboplfbrettd7655fr4n2y + rc-motion: 2.9.0_biqbaboplfbrettd7655fr4n2y + rc-notification: 5.3.0_biqbaboplfbrettd7655fr4n2y + rc-pagination: 4.0.4_biqbaboplfbrettd7655fr4n2y + rc-picker: 4.1.4_pedp7nuen4qe3hor44k523wkfi + rc-progress: 3.5.1_biqbaboplfbrettd7655fr4n2y + rc-rate: 2.12.0_biqbaboplfbrettd7655fr4n2y + rc-resize-observer: 1.4.0_biqbaboplfbrettd7655fr4n2y + rc-segmented: 2.3.0_biqbaboplfbrettd7655fr4n2y + rc-select: 14.11.0_biqbaboplfbrettd7655fr4n2y + rc-slider: 10.5.0_biqbaboplfbrettd7655fr4n2y + rc-steps: 6.0.1_biqbaboplfbrettd7655fr4n2y + rc-switch: 4.1.0_biqbaboplfbrettd7655fr4n2y + rc-table: 7.39.0_biqbaboplfbrettd7655fr4n2y + rc-tabs: 14.0.0_biqbaboplfbrettd7655fr4n2y + rc-textarea: 1.6.3_biqbaboplfbrettd7655fr4n2y + rc-tooltip: 6.1.3_biqbaboplfbrettd7655fr4n2y + rc-tree: 5.8.5_biqbaboplfbrettd7655fr4n2y + rc-tree-select: 5.17.0_biqbaboplfbrettd7655fr4n2y + rc-upload: 4.5.2_biqbaboplfbrettd7655fr4n2y + rc-util: 5.38.2_biqbaboplfbrettd7655fr4n2y react: 18.2.0 react-dom: 18.2.0_react@18.2.0 - scroll-into-view-if-needed: 3.0.6 + scroll-into-view-if-needed: 3.1.0 throttle-debounce: 5.0.0 transitivePeerDependencies: - date-fns + - luxon - moment dev: true @@ -5797,14 +5688,6 @@ packages: engines: { node: '>=0.10.0' } dev: true - /array-differ/3.0.0: - resolution: - { - integrity: sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==, - } - engines: { node: '>=8' } - dev: true - /array-each/1.0.1: resolution: { @@ -5887,54 +5770,15 @@ packages: { integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==, } - engines: { node: '>=8' } - dev: true - - /array-unique/0.3.2: - resolution: - { - integrity: sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==, - } - engines: { node: '>=0.10.0' } - dev: true - - /array.prototype.filter/1.0.2: - resolution: - { - integrity: sha512-us+UrmGOilqttSOgoWZTpOvHu68vZT2YCjc/H4vhu56vzZpaDFBhB+Se2UwqWzMKbDv7Myq5M5pcZLAtUvTQdQ==, - } - engines: { node: '>= 0.4' } - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.21.1 - es-array-method-boxes-properly: 1.0.0 - is-string: 1.0.7 - dev: true - - /array.prototype.find/2.2.1: - resolution: - { - integrity: sha512-I2ri5Z9uMpMvnsNrHre9l3PaX+z9D0/z6F7Yt2u15q7wt0I62g5kX6xUKR1SJiefgG+u2/gJUmM8B47XRvQR6w==, - } - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.21.1 - es-shim-unscopables: 1.0.0 + engines: { node: '>=8' } dev: true - /array.prototype.flat/1.3.1: + /array-unique/0.3.2: resolution: { - integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==, + integrity: sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==, } - engines: { node: '>= 0.4' } - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.21.1 - es-shim-unscopables: 1.0.0 + engines: { node: '>=0.10.0' } dev: true /array.prototype.flatmap/1.3.1: @@ -5971,14 +5815,6 @@ packages: engines: { node: '>=0.10.0' } dev: true - /arrify/2.0.1: - resolution: - { - integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==, - } - engines: { node: '>=8' } - dev: true - /asap/2.0.6: resolution: { @@ -6160,30 +5996,12 @@ packages: babel-plugin-istanbul: 6.1.1 babel-preset-jest: 29.4.3_@babel+core@7.21.0 chalk: 4.1.2 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 slash: 3.0.0 transitivePeerDependencies: - supports-color dev: true - /babel-loader/8.3.0_idmflsbzmivcz6fnnmcaipezqe: - resolution: - { - integrity: sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==, - } - engines: { node: '>= 8.9' } - peerDependencies: - '@babel/core': ^7.0.0 - webpack: '>=2' - dependencies: - '@babel/core': 7.21.0 - find-cache-dir: 3.3.2 - loader-utils: 2.0.4 - make-dir: 3.1.0 - schema-utils: 2.7.1 - webpack: 4.46.0_webpack-cli@3.3.12 - dev: true - /babel-plugin-import/1.13.6: resolution: { @@ -6267,13 +6085,6 @@ packages: - supports-color dev: true - /babel-plugin-transform-async-to-promises/0.8.18: - resolution: - { - integrity: sha512-WpOrF76nUHijnNn10eBGOHZmXQC8JYRME9rOLxStOga7Av2VO53ehVFvVNImMksVtQuL2/7ZNxEgxnx7oo/3Hw==, - } - dev: true - /babel-preset-current-node-syntax/1.0.1_@babel+core@7.21.0: resolution: { @@ -6451,6 +6262,7 @@ packages: { integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==, } + requiresBuild: true dependencies: file-uri-to-path: 1.0.0 dev: true @@ -6497,13 +6309,6 @@ packages: } dev: true - /boolbase/1.0.0: - resolution: - { - integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==, - } - dev: true - /boxen/1.3.0: resolution: { @@ -6551,27 +6356,6 @@ packages: - supports-color dev: true - /braces/2.3.2_supports-color@6.1.0: - resolution: - { - integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==, - } - engines: { node: '>=0.10.0' } - dependencies: - arr-flatten: 1.1.0 - array-unique: 0.3.2 - extend-shallow: 2.0.1 - fill-range: 4.0.0 - isobject: 3.0.1 - repeat-element: 1.1.4 - snapdragon: 0.8.2_supports-color@6.1.0 - snapdragon-node: 2.1.1 - split-string: 3.1.0 - to-regex: 3.0.2 - transitivePeerDependencies: - - supports-color - dev: true - /braces/3.0.2: resolution: { @@ -6676,6 +6460,20 @@ packages: pako: 1.0.11 dev: true + /browserslist/4.21.10: + resolution: + { + integrity: sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==, + } + engines: { node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7 } + hasBin: true + dependencies: + caniuse-lite: 1.0.30001532 + electron-to-chromium: 1.4.513 + node-releases: 2.0.13 + update-browserslist-db: 1.0.11_browserslist@4.21.10 + dev: true + /browserslist/4.21.5: resolution: { @@ -6789,7 +6587,7 @@ packages: bluebird: 3.7.2 chownr: 1.1.4 glob: 7.2.3 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 lru-cache: 4.1.5 mississippi: 2.0.0 mkdirp: 0.5.6 @@ -6801,29 +6599,6 @@ packages: y18n: 4.0.3 dev: true - /cacache/12.0.4: - resolution: - { - integrity: sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==, - } - dependencies: - bluebird: 3.7.2 - chownr: 1.1.4 - figgy-pudding: 3.5.2 - glob: 7.2.3 - graceful-fs: 4.2.10 - infer-owner: 1.0.4 - lru-cache: 5.1.1 - mississippi: 3.0.0 - mkdirp: 0.5.6 - move-concurrently: 1.0.1 - promise-inflight: 1.0.1_bluebird@3.7.2 - rimraf: 2.7.1 - ssri: 6.0.2 - unique-filename: 1.1.1 - y18n: 4.0.3 - dev: true - /cacache/9.3.0: resolution: { @@ -6833,7 +6608,7 @@ packages: bluebird: 3.7.2 chownr: 1.1.4 glob: 7.2.3 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 lru-cache: 4.1.5 mississippi: 1.3.1 mkdirp: 0.5.6 @@ -6968,6 +6743,13 @@ packages: } dev: true + /caniuse-lite/1.0.30001532: + resolution: + { + integrity: sha512-FbDFnNat3nMnrROzqrsg314zhqN5LGQ1kyyMk2opcrwGbVGpHRhgCWtAgD5YJUqNAiQ+dklreil/c3Qf1dfCTw==, + } + dev: true + /capture-stack-trace/1.0.2: resolution: { @@ -7067,36 +6849,6 @@ packages: } dev: true - /cheerio-select/2.1.0: - resolution: - { - integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==, - } - dependencies: - boolbase: 1.0.0 - css-select: 5.1.0 - css-what: 6.1.0 - domelementtype: 2.3.0 - domhandler: 5.0.3 - domutils: 3.0.1 - dev: true - - /cheerio/1.0.0-rc.12: - resolution: - { - integrity: sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==, - } - engines: { node: '>= 6' } - dependencies: - cheerio-select: 2.1.0 - dom-serializer: 2.0.0 - domhandler: 5.0.3 - domutils: 3.0.1 - htmlparser2: 8.0.1 - parse5: 7.1.2 - parse5-htmlparser2-tree-adapter: 7.0.0 - dev: true - /chokidar/2.1.8: resolution: { @@ -7136,15 +6888,16 @@ packages: normalize-path: 3.0.0 readdirp: 3.5.0 optionalDependencies: - fsevents: 2.3.2 + fsevents: 2.3.3 dev: true - /chokidar/3.5.3: + /chokidar/3.6.0: resolution: { - integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==, + integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==, } engines: { node: '>= 8.10.0' } + requiresBuild: true dependencies: anymatch: 3.1.3 braces: 3.0.2 @@ -7154,8 +6907,9 @@ packages: normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: 2.3.2 + fsevents: 2.3.3 dev: true + optional: true /chownr/1.1.4: resolution: @@ -7238,6 +6992,13 @@ packages: } dev: true + /classnames/2.5.1: + resolution: + { + integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==, + } + dev: true + /clean-regexp/1.0.0: resolution: { @@ -7325,17 +7086,6 @@ packages: wrap-ansi: 2.1.0 dev: true - /cliui/5.0.0: - resolution: - { - integrity: sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==, - } - dependencies: - string-width: 3.1.0 - strip-ansi: 5.2.0 - wrap-ansi: 5.1.0 - dev: true - /cliui/7.0.4: resolution: { @@ -7552,6 +7302,13 @@ packages: hasBin: true dev: true + /colorette/2.0.20: + resolution: + { + integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==, + } + dev: true + /colors/1.4.0: resolution: { @@ -7585,6 +7342,14 @@ packages: engines: { node: '>=14' } dev: true + /commander/10.0.1: + resolution: + { + integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==, + } + engines: { node: '>=14' } + dev: true + /commander/2.20.3: resolution: { @@ -7608,13 +7373,6 @@ packages: engines: { node: ^12.20.0 || >=14 } dev: true - /commondir/1.0.1: - resolution: - { - integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==, - } - dev: true - /compare-func/2.0.0: resolution: { @@ -7639,6 +7397,13 @@ packages: } dev: true + /compute-scroll-into-view/3.1.0: + resolution: + { + integrity: sha512-rj8l8pD4bJ1nx+dAkMhV1xB5RuZEyVysfxJqB1pRchh1KVvwOv9b7CGB8ZfjTImVv2oF+sYMUkMZq6Na5Ftmbg==, + } + dev: true + /concat-map/0.0.1: resolution: { @@ -7667,7 +7432,7 @@ packages: engines: { node: '>=4' } dependencies: dot-prop: 4.2.1 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 make-dir: 1.3.0 unique-string: 1.0.0 write-file-atomic: 2.4.3 @@ -7807,14 +7572,6 @@ packages: requiresBuild: true dev: true - /core-js-pure/3.29.1: - resolution: - { - integrity: sha512-4En6zYVi0i0XlXHVz/bi6l1XDjCqkKRq765NXuX+SnaIatlE96Odt5lMLjdxUiNI1v9OXI5DSLWYPlmTfkTktg==, - } - requiresBuild: true - dev: true - /core-js/2.6.12: resolution: { @@ -8103,19 +7860,6 @@ packages: postcss: 7.0.32 dev: true - /css-select/5.1.0: - resolution: - { - integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==, - } - dependencies: - boolbase: 1.0.0 - css-what: 6.1.0 - domhandler: 5.0.3 - domutils: 3.0.1 - nth-check: 2.1.1 - dev: true - /css-tree/1.1.3: resolution: { @@ -8127,14 +7871,6 @@ packages: source-map: 0.6.1 dev: true - /css-what/6.1.0: - resolution: - { - integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==, - } - engines: { node: '>= 6' } - dev: true - /css.escape/1.5.1: resolution: { @@ -8205,6 +7941,13 @@ packages: } dev: true + /csstype/3.1.3: + resolution: + { + integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==, + } + dev: true + /cwd/0.9.1: resolution: { @@ -8285,27 +8028,20 @@ packages: mimer: 1.1.0 dev: true - /dayjs/1.11.7: + /dayjs/1.11.10: resolution: { - integrity: sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==, + integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==, } + dev: true - /debug/2.6.9: + /dayjs/1.11.7: resolution: { - integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==, + integrity: sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==, } - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.0.0 - dev: true - /debug/2.6.9_supports-color@6.1.0: + /debug/2.6.9: resolution: { integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==, @@ -8317,7 +8053,6 @@ packages: optional: true dependencies: ms: 2.0.0 - supports-color: 6.1.0 dev: true /debug/3.1.0: @@ -8419,6 +8154,15 @@ packages: integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==, } engines: { node: '>=0.10' } + dev: true + + /decode-uri-component/0.4.1: + resolution: + { + integrity: sha512-+8VxcR21HhTy8nOt6jf20w0c9CADrw1O8d+VZ/YzzCt4bJ3uBjw+D1q2osAB8RnpwwaeYBxy0HyKQxD5JBMuuQ==, + } + engines: { node: '>=14.16' } + dev: false /dedent/0.7.0: resolution: @@ -8655,13 +8399,6 @@ packages: path-type: 4.0.0 dev: true - /discontinuous-range/1.0.0: - resolution: - { - integrity: sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ==, - } - dev: true - /doctrine/2.1.0: resolution: { @@ -8715,17 +8452,6 @@ packages: entities: 2.2.0 dev: true - /dom-serializer/2.0.0: - resolution: - { - integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==, - } - dependencies: - domelementtype: 2.3.0 - domhandler: 5.0.3 - entities: 4.4.0 - dev: true - /dom7/3.0.0: resolution: { @@ -8786,16 +8512,6 @@ packages: domelementtype: 1.3.1 dev: true - /domhandler/5.0.3: - resolution: - { - integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==, - } - engines: { node: '>= 4' } - dependencies: - domelementtype: 2.3.0 - dev: true - /domutils/1.7.0: resolution: { @@ -8806,17 +8522,6 @@ packages: domelementtype: 1.3.1 dev: true - /domutils/3.0.1: - resolution: - { - integrity: sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==, - } - dependencies: - dom-serializer: 2.0.0 - domelementtype: 2.3.0 - domhandler: 5.0.3 - dev: true - /dot-prop/4.2.1: resolution: { @@ -8891,7 +8596,7 @@ packages: '@umijs/preset-dumi': 1.x react: ^16.13.1 || ^17.0.0 dependencies: - '@umijs/preset-dumi': 1.1.50_uqfskxwgvxz7pnpzy3ggws2zlu + '@umijs/preset-dumi': 1.1.50_hybve2zuw5q64fgjm73h46xefu lodash.throttle: 4.1.1 prism-react-renderer: 1.3.5_react@18.2.0 prismjs: 1.29.0 @@ -8911,7 +8616,7 @@ packages: } hasBin: true dependencies: - '@umijs/preset-dumi': 1.1.50_uqfskxwgvxz7pnpzy3ggws2zlu + '@umijs/preset-dumi': 1.1.50_hybve2zuw5q64fgjm73h46xefu umi: 3.5.37_react-router@6.8.2 transitivePeerDependencies: - bufferutil @@ -8981,6 +8686,13 @@ packages: } dev: true + /electron-to-chromium/1.4.513: + resolution: + { + integrity: sha512-cOB0xcInjm+E5qIssHeXJ29BaUyWpMyFKT5RB3bsLENDheCja0wMkHJyiPl0NBE/VzDI7JDuNEQWhe6RitEUcw==, + } + dev: true + /elliptic/6.5.4: resolution: { @@ -9004,13 +8716,6 @@ packages: engines: { node: '>=12' } dev: true - /emoji-regex/7.0.3: - resolution: - { - integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==, - } - dev: true - /emoji-regex/8.0.0: resolution: { @@ -9051,123 +8756,61 @@ packages: } engines: { node: '>=6.9.0' } dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 memory-fs: 0.5.0 tapable: 1.1.3 dev: true - /enquirer/2.3.6: + /enhanced-resolve/5.15.0: resolution: { - integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==, + integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==, } - engines: { node: '>=8.6' } + engines: { node: '>=10.13.0' } dependencies: - ansi-colors: 4.1.3 - dev: true - - /entities/1.1.2: - resolution: - { - integrity: sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==, - } - dev: true - - /entities/2.2.0: - resolution: - { - integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==, - } + graceful-fs: 4.2.11 + tapable: 2.2.1 dev: true - /entities/4.4.0: + /enquirer/2.3.6: resolution: { - integrity: sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==, + integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==, } - engines: { node: '>=0.12' } + engines: { node: '>=8.6' } + dependencies: + ansi-colors: 4.1.3 dev: true - /enzyme-adapter-react-16/1.15.7_i6jb26zkukcjdnnkhpb37sx774: + /entities/1.1.2: resolution: { - integrity: sha512-LtjKgvlTc/H7adyQcj+aq0P0H07LDL480WQl1gU512IUyaDo/sbOaNDdZsJXYW2XaoPqrLLE9KbZS+X2z6BASw==, + integrity: sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==, } - peerDependencies: - enzyme: ^3.0.0 - react: ^16.0.0-0 - react-dom: ^16.0.0-0 - dependencies: - enzyme: 3.11.0 - enzyme-adapter-utils: 1.14.1_react@18.2.0 - enzyme-shallow-equal: 1.0.5 - has: 1.0.3 - object.assign: 4.1.4 - object.values: 1.1.6 - prop-types: 15.8.1 - react: 18.2.0 - react-dom: 16.14.0_react@18.2.0 - react-is: 16.13.1 - react-test-renderer: 16.14.0_react@18.2.0 - semver: 5.7.1 dev: true - /enzyme-adapter-utils/1.14.1_react@18.2.0: + /entities/2.2.0: resolution: { - integrity: sha512-JZgMPF1QOI7IzBj24EZoDpaeG/p8Os7WeBZWTJydpsH7JRStc7jYbHE4CmNQaLqazaGFyLM8ALWA3IIZvxW3PQ==, + integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==, } - peerDependencies: - react: 0.13.x || 0.14.x || ^15.0.0-0 || ^16.0.0-0 - dependencies: - airbnb-prop-types: 2.16.0_react@18.2.0 - function.prototype.name: 1.1.5 - has: 1.0.3 - object.assign: 4.1.4 - object.fromentries: 2.0.6 - prop-types: 15.8.1 - react: 18.2.0 - semver: 5.7.1 dev: true - /enzyme-shallow-equal/1.0.5: + /entities/4.4.0: resolution: { - integrity: sha512-i6cwm7hN630JXenxxJFBKzgLC3hMTafFQXflvzHgPmDhOBhxUWDe8AeRv1qp2/uWJ2Y8z5yLWMzmAfkTOiOCZg==, + integrity: sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==, } - dependencies: - has: 1.0.3 - object-is: 1.1.5 + engines: { node: '>=0.12' } dev: true - /enzyme/3.11.0: + /envinfo/7.10.0: resolution: { - integrity: sha512-Dw8/Gs4vRjxY6/6i9wU0V+utmQO9kvh9XLnz3LIudviOnVYDEe2ec+0k+NQoMamn1VrjKgCUOWj5jG/5M5M0Qw==, + integrity: sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==, } - dependencies: - array.prototype.flat: 1.3.1 - cheerio: 1.0.0-rc.12 - enzyme-shallow-equal: 1.0.5 - function.prototype.name: 1.1.5 - has: 1.0.3 - html-element-map: 1.3.1 - is-boolean-object: 1.1.2 - is-callable: 1.2.7 - is-number-object: 1.0.7 - is-regex: 1.1.4 - is-string: 1.0.7 - is-subset: 0.1.1 - lodash.escape: 4.0.1 - lodash.isequal: 4.5.0 - object-inspect: 1.12.3 - object-is: 1.1.5 - object.assign: 4.1.4 - object.entries: 1.1.6 - object.values: 1.1.6 - raf: 3.4.1 - rst-selector-parser: 2.2.3 - string.prototype.trim: 1.2.7 + engines: { node: '>=4' } + hasBin: true dev: true /err-code/1.1.2: @@ -9255,13 +8898,6 @@ packages: which-typed-array: 1.1.9 dev: true - /es-array-method-boxes-properly/1.0.0: - resolution: - { - integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==, - } - dev: true - /es-get-iterator/1.1.3: resolution: { @@ -9286,6 +8922,13 @@ packages: } dev: true + /es-module-lexer/1.3.0: + resolution: + { + integrity: sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==, + } + dev: true + /es-set-tostringtag/2.0.1: resolution: { @@ -9339,13 +8982,6 @@ packages: } dev: true - /es5-imcompatible-versions/0.1.81: - resolution: - { - integrity: sha512-tZhNVWOMR8wiRbjZjNsnfNhDXOu7vH6zpMroArhpC/r3vAAjR4L8FESdc2hcvkk0LIgB66hz+ExhshfDCa2yrQ==, - } - dev: true - /es6-iterator/2.0.3: resolution: { @@ -9550,6 +9186,18 @@ packages: eslint: 7.32.0 dev: true + /eslint-plugin-react-hooks/4.6.0_eslint@8.57.0: + resolution: + { + integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==, + } + engines: { node: '>=10' } + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + dependencies: + eslint: 8.57.0 + dev: true + /eslint-plugin-react/7.32.2_eslint@7.32.0: resolution: { @@ -9619,26 +9267,26 @@ packages: } dev: true - /eslint-scope/4.0.3: + /eslint-scope/5.1.1: resolution: { - integrity: sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==, + integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==, } - engines: { node: '>=4.0.0' } + engines: { node: '>=8.0.0' } dependencies: esrecurse: 4.3.0 estraverse: 4.3.0 dev: true - /eslint-scope/5.1.1: + /eslint-scope/7.2.2: resolution: { - integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==, + integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==, } - engines: { node: '>=8.0.0' } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } dependencies: esrecurse: 4.3.0 - estraverse: 4.3.0 + estraverse: 5.3.0 dev: true /eslint-template-visitor/2.3.2_eslint@7.32.0: @@ -9698,10 +9346,10 @@ packages: engines: { node: '>=10' } dev: true - /eslint-visitor-keys/3.3.0: + /eslint-visitor-keys/3.4.3: resolution: { - integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==, + integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==, } engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } dev: true @@ -9758,6 +9406,56 @@ packages: - supports-color dev: true + /eslint/8.57.0: + resolution: + { + integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==, + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + hasBin: true + dependencies: + '@eslint-community/eslint-utils': 4.4.0_eslint@8.57.0 + '@eslint-community/regexpp': 4.10.0 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.57.0 + '@humanwhocodes/config-array': 0.11.14 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.24.0 + graphemer: 1.4.0 + ignore: 5.3.1 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.3 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + dev: true + /esm/3.2.25: resolution: { @@ -9778,6 +9476,18 @@ packages: eslint-visitor-keys: 1.3.0 dev: true + /espree/9.6.1: + resolution: + { + integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==, + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + dependencies: + acorn: 8.11.3 + acorn-jsx: 5.3.2_acorn@8.11.3 + eslint-visitor-keys: 3.4.3 + dev: true + /esprima/4.0.1: resolution: { @@ -9953,24 +9663,6 @@ packages: - supports-color dev: true - /expand-brackets/2.1.4_supports-color@6.1.0: - resolution: - { - integrity: sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==, - } - engines: { node: '>=0.10.0' } - dependencies: - debug: 2.6.9_supports-color@6.1.0 - define-property: 0.2.5 - extend-shallow: 2.0.1 - posix-character-classes: 0.1.1 - regex-not: 1.0.2 - snapdragon: 0.8.2_supports-color@6.1.0 - to-regex: 3.0.2 - transitivePeerDependencies: - - supports-color - dev: true - /expand-tilde/1.2.2: resolution: { @@ -10073,25 +9765,6 @@ packages: - supports-color dev: true - /extglob/2.0.4_supports-color@6.1.0: - resolution: - { - integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==, - } - engines: { node: '>=0.10.0' } - dependencies: - array-unique: 0.3.2 - define-property: 1.0.0 - expand-brackets: 2.1.4_supports-color@6.1.0 - extend-shallow: 2.0.1 - fragment-cache: 0.2.1 - regex-not: 1.0.2 - snapdragon: 0.8.2_supports-color@6.1.0 - to-regex: 3.0.2 - transitivePeerDependencies: - - supports-color - dev: true - /extsprintf/1.3.0: resolution: { @@ -10246,13 +9919,6 @@ packages: - encoding dev: true - /figgy-pudding/3.5.2: - resolution: - { - integrity: sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==, - } - dev: true - /figures/2.0.0: resolution: { @@ -10270,7 +9936,7 @@ packages: } engines: { node: ^10.12.0 || >=12.0.0 } dependencies: - flat-cache: 3.0.4 + flat-cache: 3.2.0 dev: true /file-name/0.1.0: @@ -10286,6 +9952,7 @@ packages: { integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==, } + requiresBuild: true dev: true optional: true @@ -10326,30 +9993,15 @@ packages: integrity: sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==, } engines: { node: '>=0.10.0' } - - /find-cache-dir/2.1.0: - resolution: - { - integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==, - } - engines: { node: '>=6' } - dependencies: - commondir: 1.0.1 - make-dir: 2.1.0 - pkg-dir: 3.0.0 dev: true - /find-cache-dir/3.3.2: + /filter-obj/5.1.0: resolution: { - integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==, + integrity: sha512-qWeTREPoT7I0bifpPUXtxkZJ1XJzxWtfoWWkdVGqa+eCr3SHW/Ocp89o8vLvbUuQnadybJpjOKu4V+RwO6sGng==, } - engines: { node: '>=8' } - dependencies: - commondir: 1.0.1 - make-dir: 3.1.0 - pkg-dir: 4.2.0 - dev: true + engines: { node: '>=14.16' } + dev: false /find-file-up/0.1.3: resolution: @@ -10383,16 +10035,6 @@ packages: pinkie-promise: 2.0.1 dev: true - /find-up/3.0.0: - resolution: - { - integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==, - } - engines: { node: '>=6' } - dependencies: - locate-path: 3.0.0 - dev: true - /find-up/4.1.0: resolution: { @@ -10445,21 +10087,6 @@ packages: - supports-color dev: true - /findup-sync/3.0.0_supports-color@6.1.0: - resolution: - { - integrity: sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==, - } - engines: { node: '>= 0.10' } - dependencies: - detect-file: 1.0.0 - is-glob: 4.0.3 - micromatch: 3.1.10_supports-color@6.1.0 - resolve-dir: 1.0.1 - transitivePeerDependencies: - - supports-color - dev: true - /fined/1.2.0: resolution: { @@ -10482,14 +10109,15 @@ packages: engines: { node: '>= 0.10' } dev: true - /flat-cache/3.0.4: + /flat-cache/3.2.0: resolution: { - integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==, + integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==, } engines: { node: ^10.12.0 || >=12.0.0 } dependencies: - flatted: 3.2.7 + flatted: 3.3.1 + keyv: 4.5.4 rimraf: 3.0.2 dev: true @@ -10501,10 +10129,10 @@ packages: hasBin: true dev: true - /flatted/3.2.7: + /flatted/3.3.1: resolution: { - integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==, + integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==, } dev: true @@ -10685,7 +10313,7 @@ packages: } engines: { node: '>=14.14' } dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.0 dev: true @@ -10696,7 +10324,7 @@ packages: integrity: sha512-V3Z3WZWVUYd8hoCL5xfXJCaHWYzmtwW5XWYSlLgERi8PWd8bx1kUHUk8L1BT57e49oKnDDD180mjfrHc1yA9rg==, } dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jsonfile: 3.0.1 universalify: 0.1.2 dev: true @@ -10708,7 +10336,7 @@ packages: } engines: { node: '>= 0.10' } dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 through2: 2.0.5 dev: true @@ -10725,7 +10353,7 @@ packages: integrity: sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==, } dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 iferr: 0.1.5 imurmurhash: 0.1.4 readable-stream: 2.3.8 @@ -10749,14 +10377,14 @@ packages: requiresBuild: true dependencies: bindings: 1.5.0 - nan: 2.17.0 + nan: 2.18.0 dev: true optional: true - /fsevents/2.3.2: + /fsevents/2.3.3: resolution: { - integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==, + integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==, } engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 } os: [darwin] @@ -10771,7 +10399,7 @@ packages: } engines: { node: '>=0.6' } dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 inherits: 2.0.4 mkdirp: 0.5.6 rimraf: 2.7.1 @@ -11031,6 +10659,16 @@ packages: is-glob: 4.0.3 dev: true + /glob-parent/6.0.2: + resolution: + { + integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==, + } + engines: { node: '>=10.13.0' } + dependencies: + is-glob: 4.0.3 + dev: true + /glob-stream/6.1.0: resolution: { @@ -11050,6 +10688,13 @@ packages: unique-stream: 2.3.1 dev: true + /glob-to-regexp/0.4.1: + resolution: + { + integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==, + } + dev: true + /glob-watcher/5.0.5: resolution: { @@ -11196,6 +10841,16 @@ packages: type-fest: 0.20.2 dev: true + /globals/13.24.0: + resolution: + { + integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==, + } + engines: { node: '>=8' } + dependencies: + type-fest: 0.20.2 + dev: true + /globalthis/1.0.3: resolution: { @@ -11218,7 +10873,7 @@ packages: dir-glob: 3.0.1 fast-glob: 3.2.12 glob: 7.2.3 - ignore: 5.2.4 + ignore: 5.3.1 merge2: 1.4.1 slash: 3.0.0 dev: true @@ -11250,7 +10905,7 @@ packages: array-union: 2.1.0 dir-glob: 3.0.1 fast-glob: 3.2.12 - ignore: 5.2.4 + ignore: 5.3.1 merge2: 1.4.1 slash: 3.0.0 dev: true @@ -11321,6 +10976,13 @@ packages: } dev: true + /graceful-fs/4.2.11: + resolution: + { + integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==, + } + dev: true + /grapheme-splitter/1.0.4: resolution: { @@ -11328,6 +10990,13 @@ packages: } dev: true + /graphemer/1.4.0: + resolution: + { + integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==, + } + dev: true + /gray-matter/4.0.3: resolution: { @@ -11769,7 +11438,7 @@ packages: integrity: sha512-JnskQK8X+PbRFHSdDAExhoJyhLnlLZL+UuHQuQhys+Se9/ukRDRBWU4JVTjsiIfbv1fcEmR3oqKW56OYmk5M5w==, } dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.23.9 loose-envify: 1.4.0 query-string: 6.14.1 resolve-pathname: 3.0.0 @@ -11784,7 +11453,7 @@ packages: integrity: sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==, } dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.23.9 loose-envify: 1.4.0 resolve-pathname: 3.0.0 tiny-invariant: 1.3.1 @@ -11798,7 +11467,7 @@ packages: integrity: sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==, } dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.23.9 dev: true /hmac-drbg/1.0.1: @@ -11858,16 +11527,6 @@ packages: lru-cache: 6.0.0 dev: true - /html-element-map/1.3.1: - resolution: - { - integrity: sha512-6XMlxrAFX4UEEGxctfFnmrFaaZFNf9i5fNuV5wZ3WWQ4FVaNP1aX1LkX9j2mfEx1NpjeE/rL3nmgEn23GdFmrg==, - } - dependencies: - array.prototype.filter: 1.0.2 - call-bind: 1.0.2 - dev: true - /html-encoding-sniffer/2.0.1: resolution: { @@ -11931,18 +11590,6 @@ packages: readable-stream: 3.6.1 dev: true - /htmlparser2/8.0.1: - resolution: - { - integrity: sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==, - } - dependencies: - domelementtype: 2.3.0 - domhandler: 5.0.3 - domutils: 3.0.1 - entities: 4.4.0 - dev: true - /http-cache-semantics/3.8.1: resolution: { @@ -12134,22 +11781,23 @@ packages: engines: { node: '>= 4' } dev: true - /image-size/0.8.3: + /ignore/5.3.1: resolution: { - integrity: sha512-SMtq1AJ+aqHB45c3FsB4ERK0UCiA2d3H1uq8s+8T0Pf8A3W4teyBQyaFaktH6xvZqh+npwlKU7i4fJo0r7TYTg==, + integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==, } - engines: { node: '>=6.9.0' } - hasBin: true - dependencies: - queue: 6.0.1 + engines: { node: '>= 4' } dev: true - /immutable/4.2.4: + /image-size/0.8.3: resolution: { - integrity: sha512-WDxL3Hheb1JkRN3sQkyujNlL/xRjAo3rJtaU5xeufUauG66JdMr32bLj4gF+vWl84DIA3Zxw7tiAjneYzRRw+w==, + integrity: sha512-SMtq1AJ+aqHB45c3FsB4ERK0UCiA2d3H1uq8s+8T0Pf8A3W4teyBQyaFaktH6xvZqh+npwlKU7i4fJo0r7TYTg==, } + engines: { node: '>=6.9.0' } + hasBin: true + dependencies: + queue: 6.0.1 dev: true /import-cwd/2.1.0: @@ -12210,18 +11858,6 @@ packages: engines: { node: '>=8' } dev: true - /import-local/2.0.0: - resolution: - { - integrity: sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==, - } - engines: { node: '>=6' } - hasBin: true - dependencies: - pkg-dir: 3.0.0 - resolve-cwd: 2.0.0 - dev: true - /import-local/3.1.0: resolution: { @@ -12265,13 +11901,6 @@ packages: } dev: true - /infer-owner/1.0.4: - resolution: - { - integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==, - } - dev: true - /inflight/1.0.6: resolution: { @@ -12369,6 +11998,14 @@ packages: engines: { node: '>= 0.10' } dev: true + /interpret/3.1.1: + resolution: + { + integrity: sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==, + } + engines: { node: '>=10.13.0' } + dev: true + /intersection-observer/0.12.2: resolution: { @@ -12566,6 +12203,15 @@ packages: has: 1.0.3 dev: true + /is-core-module/2.13.0: + resolution: + { + integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==, + } + dependencies: + has: 1.0.3 + dev: true + /is-data-descriptor/0.1.4: resolution: { @@ -12994,13 +12640,6 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-subset/0.1.1: - resolution: - { - integrity: sha512-6Ybun0IkarhmEqxXCNw/C0bna6Zb/TkfUX9UbwJtK6ObwAVCxmAP308WWTHviM/zAqXk05cdhYsUsZeGQh99iw==, - } - dev: true - /is-symbol/1.0.4: resolution: { @@ -13181,16 +12820,6 @@ packages: engines: { node: '>=0.10.0' } dev: true - /isomorphic-fetch/2.2.1: - resolution: - { - integrity: sha512-9c4TNAKYXM5PRyVcwUZrF3W09nQ+sO7+jydgs4ZGW9dhsLG2VOlISJABombdQqQRXCwuYG3sYV/puGf5rp0qmA==, - } - dependencies: - node-fetch: 1.7.3 - whatwg-fetch: 3.6.2 - dev: true - /isstream/0.1.2: resolution: { @@ -13374,7 +13003,7 @@ packages: ci-info: 3.8.0 deepmerge: 4.3.0 glob: 7.2.3 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jest-circus: 29.4.3 jest-environment-node: 29.4.3 jest-get-type: 29.4.3 @@ -13484,18 +13113,6 @@ packages: jest-util: 29.4.3 dev: true - /jest-fetch-mock/3.0.3: - resolution: - { - integrity: sha512-Ux1nWprtLrdrH4XwE7O7InRY6psIi3GOsqNESJgMJ+M5cv4A8Lh7SN9d2V2kKRZ8ebAfcd1LNyZguAOb6JiDqw==, - } - dependencies: - cross-fetch: 3.1.5 - promise-polyfill: 8.3.0 - transitivePeerDependencies: - - encoding - dev: true - /jest-get-type/28.0.2: resolution: { @@ -13524,14 +13141,14 @@ packages: '@types/node': 18.14.6 anymatch: 3.1.3 fb-watchman: 2.0.2 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jest-regex-util: 29.4.3 jest-util: 29.4.3 - jest-worker: 29.4.3 + jest-worker: 29.7.0 micromatch: 4.0.5 walker: 1.0.8 optionalDependencies: - fsevents: 2.3.2 + fsevents: 2.3.3 dev: true /jest-leak-detector/29.4.3: @@ -13577,7 +13194,7 @@ packages: '@jest/types': 29.4.3 '@types/stack-utils': 2.0.1 chalk: 4.1.2 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 micromatch: 4.0.5 pretty-format: 29.4.3 slash: 3.0.0 @@ -13640,7 +13257,7 @@ packages: engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } dependencies: chalk: 4.1.2 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jest-haste-map: 29.4.3 jest-pnp-resolver: 1.2.3_jest-resolve@29.4.3 jest-util: 29.4.3 @@ -13665,7 +13282,7 @@ packages: '@types/node': 18.14.6 chalk: 4.1.2 emittery: 0.13.1 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jest-docblock: 29.4.3 jest-environment-node: 29.4.3 jest-haste-map: 29.4.3 @@ -13675,7 +13292,7 @@ packages: jest-runtime: 29.4.3 jest-util: 29.4.3 jest-watcher: 29.4.3 - jest-worker: 29.4.3 + jest-worker: 29.7.0 p-limit: 3.1.0 source-map-support: 0.5.13 transitivePeerDependencies: @@ -13701,7 +13318,7 @@ packages: cjs-module-lexer: 1.2.2 collect-v8-coverage: 1.0.1 glob: 7.2.3 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jest-haste-map: 29.4.3 jest-message-util: 29.4.3 jest-mock: 29.4.3 @@ -13736,7 +13353,7 @@ packages: babel-preset-current-node-syntax: 1.0.1_@babel+core@7.21.0 chalk: 4.1.2 expect: 29.4.3 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jest-diff: 29.4.3 jest-get-type: 29.4.3 jest-haste-map: 29.4.3 @@ -13761,7 +13378,37 @@ packages: '@types/node': 18.14.6 chalk: 4.1.2 ci-info: 3.8.0 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 + picomatch: 2.3.1 + dev: true + + /jest-util/29.6.3: + resolution: + { + integrity: sha512-QUjna/xSy4B32fzcKTSz1w7YYzgiHrjjJjevdRf61HYk998R5vVMMNmrHESYZVDS5DSWs+1srPLPKxXPkeSDOA==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + dependencies: + '@jest/types': 29.6.3 + '@types/node': 20.6.0 + chalk: 4.1.2 + ci-info: 3.8.0 + graceful-fs: 4.2.11 + picomatch: 2.3.1 + dev: true + + /jest-util/29.7.0: + resolution: + { + integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + dependencies: + '@jest/types': 29.6.3 + '@types/node': 18.14.6 + chalk: 4.1.2 + ci-info: 3.8.0 + graceful-fs: 4.2.11 picomatch: 2.3.1 dev: true @@ -13825,20 +13472,32 @@ packages: } engines: { node: '>= 10.13.0' } dependencies: - '@types/node': 18.14.6 + '@types/node': 20.11.20 merge-stream: 2.0.0 supports-color: 7.2.0 dev: true - /jest-worker/29.4.3: + /jest-worker/27.5.1: + resolution: + { + integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==, + } + engines: { node: '>= 10.13.0' } + dependencies: + '@types/node': 20.11.20 + merge-stream: 2.0.0 + supports-color: 8.1.1 + dev: true + + /jest-worker/29.7.0: resolution: { - integrity: sha512-GLHN/GTAAMEy5BFdvpUfzr9Dr80zQqBrh0fz1mtRMe05hqP45+HfQltu7oTBfduD0UeZs09d+maFtFYAXFWvAA==, + integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==, } engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } dependencies: '@types/node': 18.14.6 - jest-util: 29.4.3 + jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true @@ -13929,7 +13588,7 @@ packages: optional: true dependencies: abab: 2.0.6 - acorn: 8.8.2 + acorn: 8.11.3 acorn-globals: 6.0.0 cssom: 0.4.4 cssstyle: 2.3.0 @@ -14022,6 +13681,13 @@ packages: hasBin: true dev: true + /json-buffer/3.0.1: + resolution: + { + integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==, + } + dev: true + /json-parse-better-errors/1.0.2: resolution: { @@ -14105,7 +13771,7 @@ packages: integrity: sha512-oBko6ZHlubVB5mRFkur5vgYR1UyqX+S6Y/oCfLhqNdcc2fYFlDpIoNc7AfKS1KOGcnNAkvsr0grLck9ANM815w==, } optionalDependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 dev: true /jsonfile/6.1.0: @@ -14116,7 +13782,7 @@ packages: dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 dev: true /jsonparse/1.3.1: @@ -14175,6 +13841,15 @@ packages: } dev: true + /keyv/4.5.4: + resolution: + { + integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==, + } + dependencies: + json-buffer: 3.0.1 + dev: true + /kind-of/3.2.2: resolution: { @@ -14366,19 +14041,19 @@ packages: } engines: { node: '>=0.10.0' } dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 parse-json: 2.2.0 pify: 2.3.0 pinkie-promise: 2.0.1 strip-bom: 2.0.0 dev: true - /loader-runner/2.4.0: + /loader-runner/4.3.0: resolution: { - integrity: sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==, + integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==, } - engines: { node: '>=4.3.0 <5.0.0 || >=5.10' } + engines: { node: '>=6.11.5' } dev: true /loader-utils/1.4.2: @@ -14393,29 +14068,6 @@ packages: json5: 1.0.2 dev: true - /loader-utils/2.0.4: - resolution: - { - integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==, - } - engines: { node: '>=8.9.0' } - dependencies: - big.js: 5.2.2 - emojis-list: 3.0.0 - json5: 2.2.3 - dev: true - - /locate-path/3.0.0: - resolution: - { - integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==, - } - engines: { node: '>=6' } - dependencies: - p-locate: 3.0.0 - path-exists: 3.0.0 - dev: true - /locate-path/5.0.0: resolution: { @@ -14436,13 +14088,6 @@ packages: p-locate: 5.0.0 dev: true - /lodash-es/4.17.21: - resolution: - { - integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==, - } - dev: false - /lodash.camelcase/4.3.0: resolution: { @@ -14471,20 +14116,6 @@ packages: } dev: true - /lodash.escape/4.0.1: - resolution: - { - integrity: sha512-nXEOnb/jK9g0DYMr1/Xvq6l5xMD7GDG55+GSYIYmS0G4tBk/hURD4JR9WCavs04t33WmJx9kCyp9vJ+mr4BOUw==, - } - dev: true - - /lodash.flattendeep/4.4.0: - resolution: - { - integrity: sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==, - } - dev: true - /lodash.flow/3.5.0: resolution: { @@ -14499,13 +14130,6 @@ packages: } dev: true - /lodash.isequal/4.5.0: - resolution: - { - integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==, - } - dev: true - /lodash.isfunction/3.0.9: resolution: { @@ -14602,7 +14226,6 @@ packages: { integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==, } - dev: true /log-driver/1.2.7: resolution: @@ -15054,16 +14677,6 @@ packages: p-is-promise: 2.1.0 dev: true - /memory-fs/0.4.1: - resolution: - { - integrity: sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==, - } - dependencies: - errno: 0.1.8 - readable-stream: 2.3.8 - dev: true - /memory-fs/0.5.0: resolution: { @@ -15262,30 +14875,6 @@ packages: - supports-color dev: true - /micromatch/3.1.10_supports-color@6.1.0: - resolution: - { - integrity: sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==, - } - engines: { node: '>=0.10.0' } - dependencies: - arr-diff: 4.0.0 - array-unique: 0.3.2 - braces: 2.3.2_supports-color@6.1.0 - define-property: 2.0.2 - extend-shallow: 3.0.2 - extglob: 2.0.4_supports-color@6.1.0 - fragment-cache: 0.2.1 - kind-of: 6.0.3 - nanomatch: 1.2.13_supports-color@6.1.0 - object.pick: 1.3.0 - regex-not: 1.0.2 - snapdragon: 0.8.2_supports-color@6.1.0 - to-regex: 3.0.2 - transitivePeerDependencies: - - supports-color - dev: true - /micromatch/4.0.5: resolution: { @@ -15377,7 +14966,7 @@ packages: prop-types: ^15.0.0 react: ^0.14.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.23.9 prop-types: 15.8.1 react: 16.14.0 tiny-warning: 1.0.3 @@ -15393,7 +14982,7 @@ packages: prop-types: ^15.0.0 react: ^0.14.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.23.9 prop-types: 15.8.1 react: 18.2.0 tiny-warning: 1.0.3 @@ -15494,25 +15083,6 @@ packages: through2: 2.0.5 dev: true - /mississippi/3.0.0: - resolution: - { - integrity: sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==, - } - engines: { node: '>=4.0.0' } - dependencies: - concat-stream: 1.6.2 - duplexify: 3.7.1 - end-of-stream: 1.4.4 - flush-write-stream: 1.1.1 - from2: 2.3.0 - parallel-transform: 1.2.0 - pump: 3.0.0 - pumpify: 1.5.1 - stream-each: 1.2.3 - through2: 2.0.5 - dev: true - /mixin-deep/1.3.2: resolution: { @@ -15608,13 +15178,6 @@ packages: } dev: true - /moo/0.5.2: - resolution: - { - integrity: sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==, - } - dev: true - /move-concurrently/1.0.1: resolution: { @@ -15665,20 +15228,6 @@ packages: } dev: true - /multimatch/4.0.0: - resolution: - { - integrity: sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==, - } - engines: { node: '>=8' } - dependencies: - '@types/minimatch': 3.0.5 - array-differ: 3.0.0 - array-union: 2.1.0 - arrify: 2.0.1 - minimatch: 3.1.2 - dev: true - /mute-stdout/1.0.1: resolution: { @@ -15701,11 +15250,12 @@ packages: } dev: true - /nan/2.17.0: + /nan/2.18.0: resolution: { - integrity: sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==, + integrity: sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==, } + requiresBuild: true dev: true optional: true @@ -15777,28 +15327,6 @@ packages: - supports-color dev: true - /nanomatch/1.2.13_supports-color@6.1.0: - resolution: - { - integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==, - } - engines: { node: '>=0.10.0' } - dependencies: - arr-diff: 4.0.0 - array-unique: 0.3.2 - define-property: 2.0.2 - extend-shallow: 3.0.2 - fragment-cache: 0.2.1 - is-windows: 1.0.2 - kind-of: 6.0.3 - object.pick: 1.3.0 - regex-not: 1.0.2 - snapdragon: 0.8.2_supports-color@6.1.0 - to-regex: 3.0.2 - transitivePeerDependencies: - - supports-color - dev: true - /natural-compare-lite/1.4.0: resolution: { @@ -15813,19 +15341,6 @@ packages: } dev: true - /nearley/2.20.1: - resolution: - { - integrity: sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ==, - } - hasBin: true - dependencies: - commander: 2.20.3 - moo: 0.5.2 - railroad-diagrams: 1.0.0 - randexp: 0.4.6 - dev: true - /neo-async/2.6.2: resolution: { @@ -15867,16 +15382,6 @@ packages: safe-buffer: 5.2.1 dev: true - /node-fetch/1.7.3: - resolution: - { - integrity: sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==, - } - dependencies: - encoding: 0.1.13 - is-stream: 1.1.0 - dev: true - /node-fetch/2.6.7: resolution: { @@ -15937,6 +15442,13 @@ packages: } dev: true + /node-releases/2.0.13: + resolution: + { + integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==, + } + dev: true + /normalize-package-data/2.5.0: resolution: { @@ -16047,26 +15559,17 @@ packages: } engines: { node: '>=4' } dependencies: - path-key: 2.0.1 - dev: true - - /npm-run-path/4.0.1: - resolution: - { - integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==, - } - engines: { node: '>=8' } - dependencies: - path-key: 3.1.1 + path-key: 2.0.1 dev: true - /nth-check/2.1.1: + /npm-run-path/4.0.1: resolution: { - integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==, + integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==, } + engines: { node: '>=8' } dependencies: - boolbase: 1.0.0 + path-key: 3.1.1 dev: true /num2fraction/1.2.2: @@ -16334,6 +15837,21 @@ packages: word-wrap: 1.2.3 dev: true + /optionator/0.9.3: + resolution: + { + integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==, + } + engines: { node: '>= 0.8.0' } + dependencies: + '@aashutoshrathi/word-wrap': 1.2.6 + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + /ora/1.4.0: resolution: { @@ -16455,16 +15973,6 @@ packages: yocto-queue: 0.1.0 dev: true - /p-locate/3.0.0: - resolution: - { - integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==, - } - engines: { node: '>=6' } - dependencies: - p-limit: 2.3.0 - dev: true - /p-locate/4.1.0: resolution: { @@ -16687,16 +16195,6 @@ packages: engines: { node: '>=0.10.0' } dev: true - /parse5-htmlparser2-tree-adapter/7.0.0: - resolution: - { - integrity: sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==, - } - dependencies: - domhandler: 5.0.3 - parse5: 7.1.2 - dev: true - /parse5/6.0.1: resolution: { @@ -16745,14 +16243,6 @@ packages: pinkie-promise: 2.0.1 dev: true - /path-exists/3.0.0: - resolution: - { - integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==, - } - engines: { node: '>=4' } - dev: true - /path-exists/4.0.0: resolution: { @@ -16833,7 +16323,7 @@ packages: } engines: { node: '>=0.10.0' } dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 pify: 2.3.0 pinkie-promise: 2.0.1 dev: true @@ -16889,6 +16379,14 @@ packages: engines: { node: '>=8.6' } dev: true + /picomatch/3.0.1: + resolution: + { + integrity: sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==, + } + engines: { node: '>=10' } + dev: true + /pify/2.3.0: resolution: { @@ -16939,16 +16437,6 @@ packages: engines: { node: '>= 6' } dev: true - /pkg-dir/3.0.0: - resolution: - { - integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==, - } - engines: { node: '>=6' } - dependencies: - find-up: 3.0.0 - dev: true - /pkg-dir/4.2.0: resolution: { @@ -17608,7 +17096,7 @@ packages: engines: { node: '>=0.10.0' } dev: true - /prettier-plugin-packagejson/2.3.0_prettier@2.8.4: + /prettier-plugin-packagejson/2.3.0_prettier@2.8.8: resolution: { integrity: sha512-2SAPMMk1UDkqsB7DifWKcwCm6VC52JXMrzLHfbcQHJRWhRCj9zziOy+s+2XOyPBeyqFqS+A/1IKzOrxKFTo6pw==, @@ -17619,11 +17107,11 @@ packages: prettier: optional: true dependencies: - prettier: 2.8.4 + prettier: 2.8.8 sort-package-json: 1.57.0 dev: true - /prettier-plugin-two-style-order/1.0.1_prettier@2.8.4: + /prettier-plugin-two-style-order/1.0.1_prettier@2.8.8: resolution: { integrity: sha512-ETltO2FRR/Pxc7bsgz2XwuzWSPwafl7/v5+5Rria4S579CTas7dya+xsmbkix0q1tYQiuRjVVdfGnCKlH/aOuQ==, @@ -17634,7 +17122,7 @@ packages: postcss: 8.4.21 postcss-less: 4.0.1 postcss-sorting: 6.0.0_postcss@8.4.21 - prettier: 2.8.4 + prettier: 2.8.8 dev: true /prettier/2.2.1: @@ -17646,15 +17134,24 @@ packages: hasBin: true dev: true - /prettier/2.8.4: + /prettier/2.8.8: resolution: { - integrity: sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==, + integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==, } engines: { node: '>=10.13.0' } hasBin: true dev: true + /prettier/3.2.5: + resolution: + { + integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==, + } + engines: { node: '>=14' } + hasBin: true + dev: true + /pretty-format/27.5.1: resolution: { @@ -17700,23 +17197,24 @@ packages: engines: { node: '>= 0.8' } dev: true - /pretty-quick/3.1.3_prettier@2.8.4: + /pretty-quick/4.0.0_prettier@3.2.5: resolution: { - integrity: sha512-kOCi2FJabvuh1as9enxYmrnBC6tVMoVOenMaBqRfsvBHB0cbpYHjdQEpSglpASDFEXVwplpcGR4CLEaisYAFcA==, + integrity: sha512-M+2MmeufXb/M7Xw3Afh1gxcYpj+sK0AxEfnfF958ktFeAyi5MsKY5brymVURQLgPLV1QaF5P4pb2oFJ54H3yzQ==, } - engines: { node: '>=10.13' } + engines: { node: '>=14' } hasBin: true peerDependencies: - prettier: '>=2.0.0' + prettier: ^3.0.0 dependencies: - chalk: 3.0.0 - execa: 4.1.0 - find-up: 4.1.0 - ignore: 5.2.4 + execa: 5.1.1 + find-up: 5.0.0 + ignore: 5.3.1 mri: 1.2.0 - multimatch: 4.0.0 - prettier: 2.8.4 + picocolors: 1.0.0 + picomatch: 3.0.1 + prettier: 3.2.5 + tslib: 2.6.2 dev: true /prism-react-renderer/1.3.5_react@18.2.0: @@ -17783,13 +17281,6 @@ packages: bluebird: 3.7.2 dev: true - /promise-polyfill/8.3.0: - resolution: - { - integrity: sha512-H5oELycFml5yto/atYqmjyigJoAo3+OXwolYiH7OfQuYlAqhxNvTfiNMbV9hsC6Yp83yE5r2KTVmtrG6R9i6Pg==, - } - dev: true - /promise-retry/1.1.1: resolution: { @@ -17821,17 +17312,6 @@ packages: sisteransi: 1.0.5 dev: true - /prop-types-exact/1.2.0: - resolution: - { - integrity: sha512-K+Tk3Kd9V0odiXFP9fwDHUYRyvK3Nun3GVyPapSIs5OBkITAm15W0CPFD/YKTkMUAbc0b9CUwRQp2ybiBIq+eA==, - } - dependencies: - has: 1.0.3 - object.assign: 4.1.4 - reflect.ownkeys: 0.2.0 - dev: true - /prop-types/15.8.1: resolution: { @@ -17959,6 +17439,14 @@ packages: engines: { node: '>=6' } dev: true + /punycode/2.3.1: + resolution: + { + integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==, + } + engines: { node: '>=6' } + dev: true + /pure-color/1.3.0: resolution: { @@ -17985,16 +17473,6 @@ packages: react: 18.2.0 dev: true - /qs/6.11.0: - resolution: - { - integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==, - } - engines: { node: '>=0.6' } - dependencies: - side-channel: 1.0.4 - dev: true - /qs/6.5.3: resolution: { @@ -18025,6 +17503,19 @@ packages: filter-obj: 1.1.0 split-on-first: 1.1.0 strict-uri-encode: 2.0.0 + dev: true + + /query-string/8.1.0: + resolution: + { + integrity: sha512-BFQeWxJOZxZGix7y+SByG3F36dA0AbTy9o6pSmKFcFz7DAj0re9Frkty3saBn3nHo3D0oZJ/+rx3r8H8r8Jbpw==, + } + engines: { node: '>=14.16' } + dependencies: + decode-uri-component: 0.4.1 + filter-obj: 5.1.0 + split-on-first: 3.0.0 + dev: false /querystring-es3/0.2.1: resolution: @@ -18074,33 +17565,6 @@ packages: engines: { node: '>=8' } dev: true - /raf/3.4.1: - resolution: - { - integrity: sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==, - } - dependencies: - performance-now: 2.1.0 - dev: true - - /railroad-diagrams/1.0.0: - resolution: - { - integrity: sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A==, - } - dev: true - - /randexp/0.4.6: - resolution: - { - integrity: sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==, - } - engines: { node: '>=0.12' } - dependencies: - discontinuous-range: 1.0.0 - ret: 0.1.15 - dev: true - /randombytes/2.1.0: resolution: { @@ -18189,10 +17653,10 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.21.0 - classnames: 2.3.2 + '@babel/runtime': 7.23.9 + classnames: 2.5.1 dom-align: 1.12.4 - rc-util: 5.28.0_biqbaboplfbrettd7655fr4n2y + rc-util: 5.38.2_biqbaboplfbrettd7655fr4n2y react: 18.2.0 react-dom: 18.2.0_react@18.2.0 resize-observer-polyfill: 1.5.1 @@ -18216,21 +17680,21 @@ packages: resize-observer-polyfill: 1.5.1 dev: true - /rc-cascader/3.9.0_biqbaboplfbrettd7655fr4n2y: + /rc-cascader/3.21.2_biqbaboplfbrettd7655fr4n2y: resolution: { - integrity: sha512-XppS7Vd11l4oqgkIQX2RHAbsR9j+UR7IpjzWhK5wUmweY4w5OsF5RdFlxAb8oC9JsIbK4lBeGLmDWYxfi9S37g==, + integrity: sha512-J7GozpgsLaOtzfIHFJFuh4oFY0ePb1w10twqK6is3pAkqHkca/PsokbDr822KIRZ8/CK8CqevxohuPDVZ1RO/A==, } peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.23.9 array-tree-filter: 2.1.0 - classnames: 2.3.2 - rc-select: 14.3.0_biqbaboplfbrettd7655fr4n2y - rc-tree: 5.7.2_biqbaboplfbrettd7655fr4n2y - rc-util: 5.28.0_biqbaboplfbrettd7655fr4n2y + classnames: 2.5.1 + rc-select: 14.11.0_biqbaboplfbrettd7655fr4n2y + rc-tree: 5.8.5_biqbaboplfbrettd7655fr4n2y + rc-util: 5.38.2_biqbaboplfbrettd7655fr4n2y react: 18.2.0 react-dom: 18.2.0_react@18.2.0 dev: true @@ -18254,21 +17718,6 @@ packages: react-dom: 16.14.0_react@18.2.0 dev: true - /rc-checkbox/2.3.2_biqbaboplfbrettd7655fr4n2y: - resolution: - { - integrity: sha512-afVi1FYiGv1U0JlpNH/UaEXdh6WUJjcWokj/nUN2TgG80bfG+MDdbfHKlLcNNba94mbjy2/SXJ1HDgrOkXGAjg==, - } - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - dependencies: - '@babel/runtime': 7.21.0 - classnames: 2.3.2 - react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 - dev: true - /rc-checkbox/2.3.2_jnbmergxldlwssobus342vza4q: resolution: { @@ -18284,19 +17733,18 @@ packages: react-dom: 16.14.0_react@18.2.0 dev: true - /rc-collapse/3.5.2_biqbaboplfbrettd7655fr4n2y: + /rc-checkbox/3.1.0_biqbaboplfbrettd7655fr4n2y: resolution: { - integrity: sha512-/TNiT3DW1t3sUCiVD/DPUYooJZ3BLA93/2rZsB3eM2bGJCCla2X9D2E4tgm7LGMQGy5Atb2lMUn2FQuvQNvavQ==, + integrity: sha512-PAwpJFnBa3Ei+5pyqMMXdcKYKNBMS+TvSDiLdDnARnMJHC8ESxwPfm4Ao1gJiKtWLdmGfigascnCpwrHFgoOBQ==, } peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.21.0 - classnames: 2.3.2 - rc-motion: 2.6.3_biqbaboplfbrettd7655fr4n2y - rc-util: 5.28.0_biqbaboplfbrettd7655fr4n2y + '@babel/runtime': 7.23.9 + classnames: 2.5.1 + rc-util: 5.38.2_biqbaboplfbrettd7655fr4n2y react: 18.2.0 react-dom: 18.2.0_react@18.2.0 dev: true @@ -18318,20 +17766,19 @@ packages: react-dom: 16.14.0_react@18.2.0 dev: true - /rc-dialog/9.0.2_biqbaboplfbrettd7655fr4n2y: + /rc-collapse/3.7.2_biqbaboplfbrettd7655fr4n2y: resolution: { - integrity: sha512-s3U+24xWUuB6Bn2Lk/Qt6rufy+uT+QvWkiFhNBcO9APLxcFFczWamaq7x9h8SCuhfc1nHcW4y8NbMsnAjNnWyg==, + integrity: sha512-ZRw6ipDyOnfLFySxAiCMdbHtb5ePAsB9mT17PA6y1mRD/W6KHRaZeb5qK/X9xDV1CqgyxMpzw0VdS74PCcUk4A==, } peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.21.0 - '@rc-component/portal': 1.1.0_biqbaboplfbrettd7655fr4n2y - classnames: 2.3.2 - rc-motion: 2.6.3_biqbaboplfbrettd7655fr4n2y - rc-util: 5.28.0_biqbaboplfbrettd7655fr4n2y + '@babel/runtime': 7.23.9 + classnames: 2.5.1 + rc-motion: 2.9.0_biqbaboplfbrettd7655fr4n2y + rc-util: 5.38.2_biqbaboplfbrettd7655fr4n2y react: 18.2.0 react-dom: 18.2.0_react@18.2.0 dev: true @@ -18354,20 +17801,20 @@ packages: react-dom: 16.14.0_react@18.2.0 dev: true - /rc-drawer/6.1.3_biqbaboplfbrettd7655fr4n2y: + /rc-dialog/9.3.4_biqbaboplfbrettd7655fr4n2y: resolution: { - integrity: sha512-AvHisO90A+xMLMKBw2zs89HxjWxusM2BUABlgK60RhweIHF8W/wk0hSOrxBlUXoA9r1F+10na3g6GZ97y1qDZA==, + integrity: sha512-975X3018GhR+EjZFbxA2Z57SX5rnu0G0/OxFgMMvZK4/hQWEm3MHaNvP4wXpxYDoJsp+xUvVW+GB9CMMCm81jA==, } peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.21.0 - '@rc-component/portal': 1.1.0_biqbaboplfbrettd7655fr4n2y - classnames: 2.3.2 - rc-motion: 2.6.3_biqbaboplfbrettd7655fr4n2y - rc-util: 5.28.0_biqbaboplfbrettd7655fr4n2y + '@babel/runtime': 7.23.9 + '@rc-component/portal': 1.1.2_biqbaboplfbrettd7655fr4n2y + classnames: 2.5.1 + rc-motion: 2.9.0_biqbaboplfbrettd7655fr4n2y + rc-util: 5.38.2_biqbaboplfbrettd7655fr4n2y react: 18.2.0 react-dom: 18.2.0_react@18.2.0 dev: true @@ -18390,6 +17837,24 @@ packages: react-dom: 16.14.0_react@18.2.0 dev: true + /rc-drawer/7.0.0_biqbaboplfbrettd7655fr4n2y: + resolution: + { + integrity: sha512-ePcS4KtQnn57bCbVXazHN2iC8nTPCXlWEIA/Pft87Pd9U7ZeDkdRzG47jWG2/TAFXFlFltRAMcslqmUM8NPCGA==, + } + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + dependencies: + '@babel/runtime': 7.23.9 + '@rc-component/portal': 1.1.2_biqbaboplfbrettd7655fr4n2y + classnames: 2.5.1 + rc-motion: 2.9.0_biqbaboplfbrettd7655fr4n2y + rc-util: 5.38.2_biqbaboplfbrettd7655fr4n2y + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + dev: true + /rc-dropdown/4.0.1_biqbaboplfbrettd7655fr4n2y: resolution: { @@ -18399,10 +17864,10 @@ packages: react: '>=16.11.0' react-dom: '>=16.11.0' dependencies: - '@babel/runtime': 7.21.0 - classnames: 2.3.2 + '@babel/runtime': 7.23.9 + classnames: 2.5.1 rc-trigger: 5.3.4_biqbaboplfbrettd7655fr4n2y - rc-util: 5.28.0_biqbaboplfbrettd7655fr4n2y + rc-util: 5.38.2_biqbaboplfbrettd7655fr4n2y react: 18.2.0 react-dom: 18.2.0_react@18.2.0 dev: true @@ -18424,19 +17889,19 @@ packages: react-dom: 16.14.0_react@18.2.0 dev: true - /rc-field-form/1.27.4_biqbaboplfbrettd7655fr4n2y: + /rc-dropdown/4.1.0_biqbaboplfbrettd7655fr4n2y: resolution: { - integrity: sha512-PQColQnZimGKArnOh8V2907+VzDCXcqtFvHgevDLtqWc/P7YASb/FqntSmdS8q3VND5SHX3Y1vgMIzY22/f/0Q==, + integrity: sha512-VZjMunpBdlVzYpEdJSaV7WM7O0jf8uyDjirxXLZRNZ+tAC+NzD3PXPEtliFwGzVwBBdCmGuSqiS9DWcOLxQ9tw==, } - engines: { node: '>=8.x' } peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' + react: '>=16.11.0' + react-dom: '>=16.11.0' dependencies: - '@babel/runtime': 7.21.0 - async-validator: 4.2.5 - rc-util: 5.28.0_biqbaboplfbrettd7655fr4n2y + '@babel/runtime': 7.23.9 + '@rc-component/trigger': 1.18.3_biqbaboplfbrettd7655fr4n2y + classnames: 2.5.1 + rc-util: 5.38.2_biqbaboplfbrettd7655fr4n2y react: 18.2.0 react-dom: 18.2.0_react@18.2.0 dev: true @@ -18458,21 +17923,19 @@ packages: react-dom: 16.14.0_react@18.2.0 dev: true - /rc-image/5.15.2_biqbaboplfbrettd7655fr4n2y: + /rc-field-form/1.41.0_biqbaboplfbrettd7655fr4n2y: resolution: { - integrity: sha512-QaeWP20v51eGyrkl24PyusTmbMk42A3vGPl7hEa15jcQjECOX36tLtvLk5sjl3vaLQpMskB8BbwiqPsN7I7aow==, + integrity: sha512-k9AS0wmxfJfusWDP/YXWTpteDNaQ4isJx9UKxx4/e8Dub4spFeZ54/EuN2sYrMRID/+hUznPgVZeg+Gf7XSYCw==, } + engines: { node: '>=8.x' } peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.21.0 - '@rc-component/portal': 1.1.0_biqbaboplfbrettd7655fr4n2y - classnames: 2.3.2 - rc-dialog: 9.0.2_biqbaboplfbrettd7655fr4n2y - rc-motion: 2.6.3_biqbaboplfbrettd7655fr4n2y - rc-util: 5.28.0_biqbaboplfbrettd7655fr4n2y + '@babel/runtime': 7.23.9 + async-validator: 4.2.5 + rc-util: 5.38.2_biqbaboplfbrettd7655fr4n2y react: 18.2.0 react-dom: 18.2.0_react@18.2.0 dev: true @@ -18496,19 +17959,21 @@ packages: react-dom: 16.14.0_react@18.2.0 dev: true - /rc-input-number/7.4.2_biqbaboplfbrettd7655fr4n2y: + /rc-image/7.5.1_biqbaboplfbrettd7655fr4n2y: resolution: { - integrity: sha512-yGturTw7WGP+M1GbJ+UTAO7L4buxeW6oilhL9Sq3DezsRS8/9qec4UiXUbeoiX9bzvRXH11JvgskBtxSp4YSNg==, + integrity: sha512-Z9loECh92SQp0nSipc0MBuf5+yVC05H/pzC+Nf8xw1BKDFUJzUeehYBjaWlxly8VGBZJcTHYri61Fz9ng1G3Ag==, } peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.21.0 - '@rc-component/mini-decimal': 1.0.1 - classnames: 2.3.2 - rc-util: 5.28.0_biqbaboplfbrettd7655fr4n2y + '@babel/runtime': 7.23.9 + '@rc-component/portal': 1.1.2_biqbaboplfbrettd7655fr4n2y + classnames: 2.5.1 + rc-dialog: 9.3.4_biqbaboplfbrettd7655fr4n2y + rc-motion: 2.9.0_biqbaboplfbrettd7655fr4n2y + rc-util: 5.38.2_biqbaboplfbrettd7655fr4n2y react: 18.2.0 react-dom: 18.2.0_react@18.2.0 dev: true @@ -18530,18 +17995,20 @@ packages: react-dom: 16.14.0_react@18.2.0 dev: true - /rc-input/0.2.2_biqbaboplfbrettd7655fr4n2y: + /rc-input-number/9.0.0_biqbaboplfbrettd7655fr4n2y: resolution: { - integrity: sha512-xgkVcFgtRO0Hl9hmvslZhObNyxbSpTmy3nR1Tk4XrjjZ9lFJ7GcJBy6ss30Pdb0oX36cHzLN8I7VCjBGeRNB9A==, + integrity: sha512-RfcDBDdWFFetouWFXBA+WPEC8LzBXyngr9b+yTLVIygfFu7HiLRGn/s/v9wwno94X7KFvnb28FNynMGj9XJlDQ==, } peerDependencies: - react: '>=16.0.0' - react-dom: '>=16.0.0' + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.21.0 - classnames: 2.3.2 - rc-util: 5.28.0_biqbaboplfbrettd7655fr4n2y + '@babel/runtime': 7.23.9 + '@rc-component/mini-decimal': 1.1.0 + classnames: 2.5.1 + rc-input: 1.4.3_biqbaboplfbrettd7655fr4n2y + rc-util: 5.38.2_biqbaboplfbrettd7655fr4n2y react: 18.2.0 react-dom: 18.2.0_react@18.2.0 dev: true @@ -18562,22 +18029,18 @@ packages: react-dom: 16.14.0_react@18.2.0 dev: true - /rc-mentions/2.0.0_biqbaboplfbrettd7655fr4n2y: + /rc-input/1.4.3_biqbaboplfbrettd7655fr4n2y: resolution: { - integrity: sha512-58NSeM6R5MrgYAhR2TH27JgAN7ivp3iBTmty3q6gvrrGHelPMdGxpJ5aH7AIlodCrPWLAm1lT4XoiuI4s9snXA==, + integrity: sha512-aHyQUAIRmTlOnvk5EcNqEpJ+XMtfMpYRAJayIlJfsvvH9cAKUWboh4egm23vgMA7E+c/qm4BZcnrDcA960GC1w==, } peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' + react: '>=16.0.0' + react-dom: '>=16.0.0' dependencies: - '@babel/runtime': 7.21.0 - classnames: 2.3.2 - rc-input: 0.2.2_biqbaboplfbrettd7655fr4n2y - rc-menu: 9.8.2_biqbaboplfbrettd7655fr4n2y - rc-textarea: 1.0.1_biqbaboplfbrettd7655fr4n2y - rc-trigger: 5.3.4_biqbaboplfbrettd7655fr4n2y - rc-util: 5.28.0_biqbaboplfbrettd7655fr4n2y + '@babel/runtime': 7.23.9 + classnames: 2.5.1 + rc-util: 5.38.2_biqbaboplfbrettd7655fr4n2y react: 18.2.0 react-dom: 18.2.0_react@18.2.0 dev: true @@ -18602,43 +18065,63 @@ packages: react-dom: 16.14.0_react@18.2.0 dev: true - /rc-menu/9.6.4_biqbaboplfbrettd7655fr4n2y: + /rc-mentions/2.10.1_biqbaboplfbrettd7655fr4n2y: resolution: { - integrity: sha512-6DiNAjxjVIPLZXHffXxxcyE15d4isRL7iQ1ru4MqYDH2Cqc5bW96wZOdMydFtGLyDdnmEQ9jVvdCE9yliGvzkw==, + integrity: sha512-72qsEcr/7su+a07ndJ1j8rI9n0Ka/ngWOLYnWMMv0p2mi/5zPwPrEDTt6Uqpe8FWjWhueDJx/vzunL6IdKDYMg==, } peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.21.0 - classnames: 2.3.2 - rc-motion: 2.6.3_biqbaboplfbrettd7655fr4n2y - rc-overflow: 1.2.8_biqbaboplfbrettd7655fr4n2y - rc-trigger: 5.3.4_biqbaboplfbrettd7655fr4n2y - rc-util: 5.28.0_biqbaboplfbrettd7655fr4n2y + '@babel/runtime': 7.23.9 + '@rc-component/trigger': 1.18.3_biqbaboplfbrettd7655fr4n2y + classnames: 2.5.1 + rc-input: 1.4.3_biqbaboplfbrettd7655fr4n2y + rc-menu: 9.12.4_biqbaboplfbrettd7655fr4n2y + rc-textarea: 1.6.3_biqbaboplfbrettd7655fr4n2y + rc-util: 5.38.2_biqbaboplfbrettd7655fr4n2y react: 18.2.0 react-dom: 18.2.0_react@18.2.0 - shallowequal: 1.1.0 dev: true - /rc-menu/9.8.2_biqbaboplfbrettd7655fr4n2y: + /rc-menu/9.12.4_biqbaboplfbrettd7655fr4n2y: resolution: { - integrity: sha512-EahOJVjLuEnJsThoPN+mGnVm431RzVzDLZWHRS/YnXTQULa7OsgdJa/Y7qXxc3Z5sz8mgT6xYtgpmBXLxrZFaQ==, + integrity: sha512-t2NcvPLV1mFJzw4F21ojOoRVofK2rWhpKPx69q2raUsiHPDP6DDevsBILEYdsIegqBeSXoWs2bf6CueBKg3BFg==, } peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.21.0 - classnames: 2.3.2 + '@babel/runtime': 7.23.9 + '@rc-component/trigger': 1.18.3_biqbaboplfbrettd7655fr4n2y + classnames: 2.5.1 + rc-motion: 2.9.0_biqbaboplfbrettd7655fr4n2y + rc-overflow: 1.3.2_biqbaboplfbrettd7655fr4n2y + rc-util: 5.38.2_biqbaboplfbrettd7655fr4n2y + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + dev: true + + /rc-menu/9.6.4_biqbaboplfbrettd7655fr4n2y: + resolution: + { + integrity: sha512-6DiNAjxjVIPLZXHffXxxcyE15d4isRL7iQ1ru4MqYDH2Cqc5bW96wZOdMydFtGLyDdnmEQ9jVvdCE9yliGvzkw==, + } + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + dependencies: + '@babel/runtime': 7.23.9 + classnames: 2.5.1 rc-motion: 2.6.3_biqbaboplfbrettd7655fr4n2y - rc-overflow: 1.2.8_biqbaboplfbrettd7655fr4n2y + rc-overflow: 1.3.2_biqbaboplfbrettd7655fr4n2y rc-trigger: 5.3.4_biqbaboplfbrettd7655fr4n2y - rc-util: 5.28.0_biqbaboplfbrettd7655fr4n2y + rc-util: 5.38.2_biqbaboplfbrettd7655fr4n2y react: 18.2.0 react-dom: 18.2.0_react@18.2.0 + shallowequal: 1.1.0 dev: true /rc-menu/9.8.2_jnbmergxldlwssobus342vza4q: @@ -18669,9 +18152,9 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.21.0 - classnames: 2.3.2 - rc-util: 5.28.0_biqbaboplfbrettd7655fr4n2y + '@babel/runtime': 7.23.9 + classnames: 2.5.1 + rc-util: 5.38.2_biqbaboplfbrettd7655fr4n2y react: 18.2.0 react-dom: 18.2.0_react@18.2.0 dev: true @@ -18692,20 +18175,18 @@ packages: react-dom: 16.14.0_react@18.2.0 dev: true - /rc-notification/5.0.2_biqbaboplfbrettd7655fr4n2y: + /rc-motion/2.9.0_biqbaboplfbrettd7655fr4n2y: resolution: { - integrity: sha512-74wUFiLlyr6lRGEY1m1BaTiDp+0lIT4FRAblMnh9FApyK2JGdsSLbrQ/1rgM7d2N/IX5UIr8kLLW3TdXxFt/jQ==, + integrity: sha512-XIU2+xLkdIr1/h6ohPZXyPBMvOmuyFZQ/T0xnawz+Rh+gh4FINcnZmMT5UTIj6hgI0VLDjTaPeRd+smJeSPqiQ==, } - engines: { node: '>=8.x' } peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.21.0 - classnames: 2.3.2 - rc-motion: 2.6.3_biqbaboplfbrettd7655fr4n2y - rc-util: 5.28.0_biqbaboplfbrettd7655fr4n2y + '@babel/runtime': 7.23.9 + classnames: 2.5.1 + rc-util: 5.38.2_biqbaboplfbrettd7655fr4n2y react: 18.2.0 react-dom: 18.2.0_react@18.2.0 dev: true @@ -18728,19 +18209,20 @@ packages: react-dom: 16.14.0_react@18.2.0 dev: true - /rc-overflow/1.2.8_biqbaboplfbrettd7655fr4n2y: + /rc-notification/5.3.0_biqbaboplfbrettd7655fr4n2y: resolution: { - integrity: sha512-QJ0UItckWPQ37ZL1dMEBAdY1dhfTXFL9k6oTTcyydVwoUNMnMqCGqnRNA98axSr/OeDKqR6DVFyi8eA5RQI/uQ==, + integrity: sha512-WCf0uCOkZ3HGfF0p1H4Sgt7aWfipxORWTPp7o6prA3vxwtWhtug3GfpYls1pnBp4WA+j8vGIi5c2/hQRpGzPcQ==, } + engines: { node: '>=8.x' } peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.21.0 - classnames: 2.3.2 - rc-resize-observer: 1.3.1_biqbaboplfbrettd7655fr4n2y - rc-util: 5.28.0_biqbaboplfbrettd7655fr4n2y + '@babel/runtime': 7.23.9 + classnames: 2.5.1 + rc-motion: 2.9.0_biqbaboplfbrettd7655fr4n2y + rc-util: 5.38.2_biqbaboplfbrettd7655fr4n2y react: 18.2.0 react-dom: 18.2.0_react@18.2.0 dev: true @@ -18762,17 +18244,19 @@ packages: react-dom: 16.14.0_react@18.2.0 dev: true - /rc-pagination/3.2.0_biqbaboplfbrettd7655fr4n2y: + /rc-overflow/1.3.2_biqbaboplfbrettd7655fr4n2y: resolution: { - integrity: sha512-5tIXjB670WwwcAJzAqp2J+cOBS9W3cH/WU1EiYwXljuZ4vtZXKlY2Idq8FZrnYBz8KhN3vwPo9CoV/SJS6SL1w==, + integrity: sha512-nsUm78jkYAoPygDAcGZeC2VwIg/IBGSodtOY3pMof4W3M9qRJgqaDYm03ZayHlde3I6ipliAxbN0RUcGf5KOzw==, } peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.21.0 - classnames: 2.3.2 + '@babel/runtime': 7.23.9 + classnames: 2.5.1 + rc-resize-observer: 1.4.0_biqbaboplfbrettd7655fr4n2y + rc-util: 5.38.2_biqbaboplfbrettd7655fr4n2y react: 18.2.0 react-dom: 18.2.0_react@18.2.0 dev: true @@ -18792,6 +18276,22 @@ packages: react-dom: 16.14.0_react@18.2.0 dev: true + /rc-pagination/4.0.4_biqbaboplfbrettd7655fr4n2y: + resolution: + { + integrity: sha512-GGrLT4NgG6wgJpT/hHIpL9nELv27A1XbSZzECIuQBQTVSf4xGKxWr6I/jhpRPauYEWEbWVw22ObG6tJQqwJqWQ==, + } + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + dependencies: + '@babel/runtime': 7.23.9 + classnames: 2.5.1 + rc-util: 5.38.2_biqbaboplfbrettd7655fr4n2y + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + dev: true + /rc-picker/3.2.4_azmwleljspi7rzweyxp57ndfle: resolution: { @@ -18822,15 +18322,16 @@ packages: react-dom: 16.14.0_react@18.2.0 dev: true - /rc-picker/3.2.4_mlnkrlbros4rghcauwy625gk7y: + /rc-picker/4.1.4_pedp7nuen4qe3hor44k523wkfi: resolution: { - integrity: sha512-AydqPVS12u+46P6DwF0iMi4p5UAAnb64drcA/zUgNXkkB6rQhUwtYP7E75YM0WylT54F3sLhe+WttZynxtsU+Q==, + integrity: sha512-sAdgj1kW9wvuoS5p2Zw3pT52iUYxidYaqXVLooaKxTqgYbhe8cG8Ld3b8cgwYfKrIkm/j+qp9nDQlrFPSl16lQ==, } 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' @@ -18839,19 +18340,23 @@ packages: optional: true dayjs: optional: true + luxon: + optional: true moment: optional: true dependencies: - '@babel/runtime': 7.21.0 - classnames: 2.3.2 - dayjs: 1.11.7 - rc-trigger: 5.3.4_biqbaboplfbrettd7655fr4n2y - rc-util: 5.28.0_biqbaboplfbrettd7655fr4n2y + '@babel/runtime': 7.23.9 + '@rc-component/trigger': 1.18.3_biqbaboplfbrettd7655fr4n2y + classnames: 2.5.1 + dayjs: 1.11.10 + rc-overflow: 1.3.2_biqbaboplfbrettd7655fr4n2y + rc-resize-observer: 1.4.0_biqbaboplfbrettd7655fr4n2y + rc-util: 5.38.2_biqbaboplfbrettd7655fr4n2y react: 18.2.0 react-dom: 18.2.0_react@18.2.0 dev: true - /rc-progress/3.4.1_biqbaboplfbrettd7655fr4n2y: + /rc-progress/3.4.1_jnbmergxldlwssobus342vza4q: resolution: { integrity: sha512-eAFDHXlk8aWpoXl0llrenPMt9qKHQXphxcVsnKs0FHC6eCSk1ebJtyaVjJUzKe0233ogiLDeEFK1Uihz3s67hw==, @@ -18862,40 +18367,40 @@ packages: dependencies: '@babel/runtime': 7.21.0 classnames: 2.3.2 - rc-util: 5.28.0_biqbaboplfbrettd7655fr4n2y + rc-util: 5.28.0_jnbmergxldlwssobus342vza4q react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 + react-dom: 16.14.0_react@18.2.0 dev: true - /rc-progress/3.4.1_jnbmergxldlwssobus342vza4q: + /rc-progress/3.5.1_biqbaboplfbrettd7655fr4n2y: resolution: { - integrity: sha512-eAFDHXlk8aWpoXl0llrenPMt9qKHQXphxcVsnKs0FHC6eCSk1ebJtyaVjJUzKe0233ogiLDeEFK1Uihz3s67hw==, + integrity: sha512-V6Amx6SbLRwPin/oD+k1vbPrO8+9Qf8zW1T8A7o83HdNafEVvAxPV5YsgtKFP+Ud5HghLj33zKOcEHrcrUGkfw==, } peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.21.0 - classnames: 2.3.2 - rc-util: 5.28.0_jnbmergxldlwssobus342vza4q + '@babel/runtime': 7.23.9 + classnames: 2.5.1 + rc-util: 5.38.2_biqbaboplfbrettd7655fr4n2y react: 18.2.0 - react-dom: 16.14.0_react@18.2.0 + react-dom: 18.2.0_react@18.2.0 dev: true - /rc-rate/2.9.2_biqbaboplfbrettd7655fr4n2y: + /rc-rate/2.12.0_biqbaboplfbrettd7655fr4n2y: resolution: { - integrity: sha512-SaiZFyN8pe0Fgphv8t3+kidlej+cq/EALkAJAc3A0w0XcPaH2L1aggM8bhe1u6GAGuQNAoFvTLjw4qLPGRKV5g==, + integrity: sha512-g092v5iZCdVzbjdn28FzvWebK2IutoVoiTeqoLTj9WM7SjA/gOJIw5/JFZMRyJYYVe1jLAU2UhAfstIpCNRozg==, } engines: { node: '>=8.x' } peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.21.0 - classnames: 2.3.2 - rc-util: 5.28.0_biqbaboplfbrettd7655fr4n2y + '@babel/runtime': 7.23.9 + classnames: 2.5.1 + rc-util: 5.38.2_biqbaboplfbrettd7655fr4n2y react: 18.2.0 react-dom: 18.2.0_react@18.2.0 dev: true @@ -18917,7 +18422,7 @@ packages: react-dom: 16.14.0_react@18.2.0 dev: true - /rc-resize-observer/1.3.1_biqbaboplfbrettd7655fr4n2y: + /rc-resize-observer/1.3.1_jnbmergxldlwssobus342vza4q: resolution: { integrity: sha512-iFUdt3NNhflbY3mwySv5CA1TC06zdJ+pfo0oc27xpf4PIOvfZwZGtD9Kz41wGYqC4SLio93RVAirSSpYlV/uYg==, @@ -18928,30 +18433,30 @@ packages: dependencies: '@babel/runtime': 7.21.0 classnames: 2.3.2 - rc-util: 5.28.0_biqbaboplfbrettd7655fr4n2y + rc-util: 5.28.0_jnbmergxldlwssobus342vza4q react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 + react-dom: 16.14.0_react@18.2.0 resize-observer-polyfill: 1.5.1 dev: true - /rc-resize-observer/1.3.1_jnbmergxldlwssobus342vza4q: + /rc-resize-observer/1.4.0_biqbaboplfbrettd7655fr4n2y: resolution: { - integrity: sha512-iFUdt3NNhflbY3mwySv5CA1TC06zdJ+pfo0oc27xpf4PIOvfZwZGtD9Kz41wGYqC4SLio93RVAirSSpYlV/uYg==, + integrity: sha512-PnMVyRid9JLxFavTjeDXEXo65HCRqbmLBw9xX9gfC4BZiSzbLXKzW3jPz+J0P71pLbD5tBMTT+mkstV5gD0c9Q==, } peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.21.0 - classnames: 2.3.2 - rc-util: 5.28.0_jnbmergxldlwssobus342vza4q + '@babel/runtime': 7.23.9 + classnames: 2.5.1 + rc-util: 5.38.2_biqbaboplfbrettd7655fr4n2y react: 18.2.0 - react-dom: 16.14.0_react@18.2.0 + react-dom: 18.2.0_react@18.2.0 resize-observer-polyfill: 1.5.1 dev: true - /rc-segmented/2.1.2_biqbaboplfbrettd7655fr4n2y: + /rc-segmented/2.1.2_jnbmergxldlwssobus342vza4q: resolution: { integrity: sha512-qGo1bCr83ESXpXVOCXjFe1QJlCAQXyi9KCiy8eX3rIMYlTeJr/ftySIaTnYsitL18SvWf5ZEHsfqIWoX0EMfFQ==, @@ -18962,46 +18467,46 @@ packages: dependencies: '@babel/runtime': 7.21.0 classnames: 2.3.2 - rc-motion: 2.6.3_biqbaboplfbrettd7655fr4n2y - rc-util: 5.28.0_biqbaboplfbrettd7655fr4n2y + rc-motion: 2.6.3_jnbmergxldlwssobus342vza4q + rc-util: 5.28.0_jnbmergxldlwssobus342vza4q react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 + react-dom: 16.14.0_react@18.2.0 dev: true - /rc-segmented/2.1.2_jnbmergxldlwssobus342vza4q: + /rc-segmented/2.3.0_biqbaboplfbrettd7655fr4n2y: resolution: { - integrity: sha512-qGo1bCr83ESXpXVOCXjFe1QJlCAQXyi9KCiy8eX3rIMYlTeJr/ftySIaTnYsitL18SvWf5ZEHsfqIWoX0EMfFQ==, + integrity: sha512-I3FtM5Smua/ESXutFfb8gJ8ZPcvFR+qUgeeGFQHBOvRiRKyAk4aBE5nfqrxXx+h8/vn60DQjOt6i4RNtrbOobg==, } peerDependencies: react: '>=16.0.0' react-dom: '>=16.0.0' dependencies: - '@babel/runtime': 7.21.0 - classnames: 2.3.2 - rc-motion: 2.6.3_jnbmergxldlwssobus342vza4q - rc-util: 5.28.0_jnbmergxldlwssobus342vza4q + '@babel/runtime': 7.23.9 + classnames: 2.5.1 + rc-motion: 2.9.0_biqbaboplfbrettd7655fr4n2y + rc-util: 5.38.2_biqbaboplfbrettd7655fr4n2y react: 18.2.0 - react-dom: 16.14.0_react@18.2.0 + react-dom: 18.2.0_react@18.2.0 dev: true - /rc-select/14.3.0_biqbaboplfbrettd7655fr4n2y: + /rc-select/14.11.0_biqbaboplfbrettd7655fr4n2y: resolution: { - integrity: sha512-y+TeAKvAvfAS7WXn4nFU8xtWJ1kLC7SVBvX3UQYtfU+N3BYNpNzHw/3F1Gu34rN2YWTG4hwspwFvDuRtGXytlQ==, + integrity: sha512-8J8G/7duaGjFiTXCBLWfh5P+KDWyA3KTlZDfV3xj/asMPqB2cmxfM+lH50wRiPIRsCQ6EbkCFBccPuaje3DHIg==, } engines: { node: '>=8.x' } peerDependencies: react: '*' react-dom: '*' dependencies: - '@babel/runtime': 7.21.0 - '@rc-component/trigger': 1.5.0_biqbaboplfbrettd7655fr4n2y - classnames: 2.3.2 - rc-motion: 2.6.3_biqbaboplfbrettd7655fr4n2y - rc-overflow: 1.2.8_biqbaboplfbrettd7655fr4n2y - rc-util: 5.28.0_biqbaboplfbrettd7655fr4n2y - rc-virtual-list: 3.4.13_biqbaboplfbrettd7655fr4n2y + '@babel/runtime': 7.23.9 + '@rc-component/trigger': 1.18.3_biqbaboplfbrettd7655fr4n2y + classnames: 2.5.1 + rc-motion: 2.9.0_biqbaboplfbrettd7655fr4n2y + rc-overflow: 1.3.2_biqbaboplfbrettd7655fr4n2y + rc-util: 5.38.2_biqbaboplfbrettd7655fr4n2y + rc-virtual-list: 3.11.4_biqbaboplfbrettd7655fr4n2y react: 18.2.0 react-dom: 18.2.0_react@18.2.0 dev: true @@ -19027,23 +18532,6 @@ packages: react-dom: 16.14.0_react@18.2.0 dev: true - /rc-slider/10.1.1_biqbaboplfbrettd7655fr4n2y: - resolution: - { - integrity: sha512-gn8oXazZISEhnmRinI89Z/JD/joAaM35jp+gDtIVSTD/JJMCCBqThqLk1SVJmvtfeiEF/kKaFY0+qt4SDHFUDw==, - } - engines: { node: '>=8.x' } - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - dependencies: - '@babel/runtime': 7.21.0 - classnames: 2.3.2 - rc-util: 5.28.0_biqbaboplfbrettd7655fr4n2y - react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 - dev: true - /rc-slider/10.1.1_jnbmergxldlwssobus342vza4q: resolution: { @@ -19061,19 +18549,19 @@ packages: react-dom: 16.14.0_react@18.2.0 dev: true - /rc-steps/6.0.0_biqbaboplfbrettd7655fr4n2y: + /rc-slider/10.5.0_biqbaboplfbrettd7655fr4n2y: resolution: { - integrity: sha512-+KfMZIty40mYCQSDvYbZ1jwnuObLauTiIskT1hL4FFOBHP6ZOr8LK0m143yD3kEN5XKHSEX1DIwCj3AYZpoeNQ==, + integrity: sha512-xiYght50cvoODZYI43v3Ylsqiw14+D7ELsgzR40boDZaya1HFa1Etnv9MDkQE8X/UrXAffwv2AcNAhslgYuDTw==, } engines: { node: '>=8.x' } peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.21.0 - classnames: 2.3.2 - rc-util: 5.28.0_biqbaboplfbrettd7655fr4n2y + '@babel/runtime': 7.23.9 + classnames: 2.5.1 + rc-util: 5.38.2_biqbaboplfbrettd7655fr4n2y react: 18.2.0 react-dom: 18.2.0_react@18.2.0 dev: true @@ -19095,18 +18583,19 @@ packages: react-dom: 16.14.0_react@18.2.0 dev: true - /rc-switch/4.0.0_biqbaboplfbrettd7655fr4n2y: + /rc-steps/6.0.1_biqbaboplfbrettd7655fr4n2y: resolution: { - integrity: sha512-IfrYC99vN0gKaTyjQdqYuADU0eH00SAFHg3jOp8HrmUpJruhV1SohJzrCbPqPraZeX/6X/QKkdLfkdnUub05WA==, + integrity: sha512-lKHL+Sny0SeHkQKKDJlAjV5oZ8DwCdS2hFhAkIjuQt1/pB81M0cA0ErVFdHq9+jmPmFw1vJB2F5NBzFXLJxV+g==, } + engines: { node: '>=8.x' } peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.21.0 - classnames: 2.3.2 - rc-util: 5.28.0_biqbaboplfbrettd7655fr4n2y + '@babel/runtime': 7.23.9 + classnames: 2.5.1 + rc-util: 5.38.2_biqbaboplfbrettd7655fr4n2y react: 18.2.0 react-dom: 18.2.0_react@18.2.0 dev: true @@ -19127,21 +18616,18 @@ packages: react-dom: 16.14.0_react@18.2.0 dev: true - /rc-table/7.31.0_biqbaboplfbrettd7655fr4n2y: + /rc-switch/4.1.0_biqbaboplfbrettd7655fr4n2y: resolution: { - integrity: sha512-TiWonax1f0B/WBh4yyA0q9GyGdKluvC1z39cPoTuRDf+zsBFDyla4T8xCK8Hzx4EugPE9f9a9fCa/i7N9+SSyA==, + integrity: sha512-TI8ufP2Az9oEbvyCeVE4+90PDSljGyuwix3fV58p7HV2o4wBnVToEyomJRVyTaZeqNPAp+vqeo4Wnj5u0ZZQBg==, } - engines: { node: '>=8.x' } peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.21.0 - '@rc-component/context': 1.3.0_biqbaboplfbrettd7655fr4n2y - classnames: 2.3.2 - rc-resize-observer: 1.3.1_biqbaboplfbrettd7655fr4n2y - rc-util: 5.28.0_biqbaboplfbrettd7655fr4n2y + '@babel/runtime': 7.23.9 + classnames: 2.5.1 + rc-util: 5.38.2_biqbaboplfbrettd7655fr4n2y react: 18.2.0 react-dom: 18.2.0_react@18.2.0 dev: true @@ -19165,43 +18651,42 @@ packages: react-dom: 16.14.0_react@18.2.0 dev: true - /rc-tabs/11.16.1_biqbaboplfbrettd7655fr4n2y: + /rc-table/7.39.0_biqbaboplfbrettd7655fr4n2y: resolution: { - integrity: sha512-bR7Dap23YyfzZQwtKomhiFEFzZuE7WaKWo+ypNRSGB9PDKSc6tM12VP8LWYkvmmQHthgwP0WRN8nFbSJWuqLYw==, + integrity: sha512-7fHLMNsm/2DlGwyIMkdH2xIeRzb5I69bLsFaEVtX+gqmGhByy0wtOAgHkiOew3PtXozSJyh+iXifjLgQzWdczw==, } engines: { node: '>=8.x' } peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.21.0 - classnames: 2.3.2 - rc-dropdown: 4.0.1_biqbaboplfbrettd7655fr4n2y - rc-menu: 9.6.4_biqbaboplfbrettd7655fr4n2y - rc-resize-observer: 1.3.1_biqbaboplfbrettd7655fr4n2y - rc-util: 5.28.0_biqbaboplfbrettd7655fr4n2y + '@babel/runtime': 7.23.9 + '@rc-component/context': 1.4.0_biqbaboplfbrettd7655fr4n2y + classnames: 2.5.1 + rc-resize-observer: 1.4.0_biqbaboplfbrettd7655fr4n2y + rc-util: 5.38.2_biqbaboplfbrettd7655fr4n2y + rc-virtual-list: 3.11.4_biqbaboplfbrettd7655fr4n2y react: 18.2.0 react-dom: 18.2.0_react@18.2.0 dev: true - /rc-tabs/12.5.7_biqbaboplfbrettd7655fr4n2y: + /rc-tabs/11.16.1_biqbaboplfbrettd7655fr4n2y: resolution: { - integrity: sha512-i9gY2TcwCNmBM+bXCDDTvb6mnRYIDkkNm+UGoIqrLOFnRRbAqjsSf+tgyvzhBvbK8XcSrMhzKKLaOMbGyND8YA==, + integrity: sha512-bR7Dap23YyfzZQwtKomhiFEFzZuE7WaKWo+ypNRSGB9PDKSc6tM12VP8LWYkvmmQHthgwP0WRN8nFbSJWuqLYw==, } engines: { node: '>=8.x' } peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.21.0 - classnames: 2.3.2 + '@babel/runtime': 7.23.9 + classnames: 2.5.1 rc-dropdown: 4.0.1_biqbaboplfbrettd7655fr4n2y - rc-menu: 9.8.2_biqbaboplfbrettd7655fr4n2y - rc-motion: 2.6.3_biqbaboplfbrettd7655fr4n2y - rc-resize-observer: 1.3.1_biqbaboplfbrettd7655fr4n2y - rc-util: 5.28.0_biqbaboplfbrettd7655fr4n2y + rc-menu: 9.6.4_biqbaboplfbrettd7655fr4n2y + rc-resize-observer: 1.4.0_biqbaboplfbrettd7655fr4n2y + rc-util: 5.38.2_biqbaboplfbrettd7655fr4n2y react: 18.2.0 react-dom: 18.2.0_react@18.2.0 dev: true @@ -19227,20 +18712,23 @@ packages: react-dom: 16.14.0_react@18.2.0 dev: true - /rc-textarea/1.0.1_biqbaboplfbrettd7655fr4n2y: + /rc-tabs/14.0.0_biqbaboplfbrettd7655fr4n2y: resolution: { - integrity: sha512-dtIm96apjJpCUcCeTtbnLGJaVlqbOqVgN0P9z+bqMSi7rcV5QVeUtBnG+jQTGk/uD183Z7jbhc8Dx7G3luDCwg==, + integrity: sha512-lp1YWkaPnjlyhOZCPrAWxK6/P6nMGX/BAZcAC3nuVwKz0Byfp+vNnQKK8BRCP2g/fzu+SeB5dm9aUigRu3tRkQ==, } + engines: { node: '>=8.x' } peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.21.0 - classnames: 2.3.2 - rc-input: 0.2.2_biqbaboplfbrettd7655fr4n2y - rc-resize-observer: 1.3.1_biqbaboplfbrettd7655fr4n2y - rc-util: 5.28.0_biqbaboplfbrettd7655fr4n2y + '@babel/runtime': 7.23.9 + classnames: 2.5.1 + rc-dropdown: 4.1.0_biqbaboplfbrettd7655fr4n2y + rc-menu: 9.12.4_biqbaboplfbrettd7655fr4n2y + rc-motion: 2.9.0_biqbaboplfbrettd7655fr4n2y + rc-resize-observer: 1.4.0_biqbaboplfbrettd7655fr4n2y + rc-util: 5.38.2_biqbaboplfbrettd7655fr4n2y react: 18.2.0 react-dom: 18.2.0_react@18.2.0 dev: true @@ -19263,18 +18751,20 @@ packages: react-dom: 16.14.0_react@18.2.0 dev: true - /rc-tooltip/6.0.1_biqbaboplfbrettd7655fr4n2y: + /rc-textarea/1.6.3_biqbaboplfbrettd7655fr4n2y: resolution: { - integrity: sha512-MdvPlsD1fDSxKp9+HjXrc/CxLmA/s11QYIh1R7aExxfodKP7CZA++DG1AjrW80F8IUdHYcR43HAm0Y2BYPelHA==, + integrity: sha512-8k7+8Y2GJ/cQLiClFMg8kUXOOdvcFQrnGeSchOvI2ZMIVvX5a3zQpLxoODL0HTrvU63fPkRmMuqaEcOF9dQemA==, } peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.21.0 - '@rc-component/trigger': 1.5.0_biqbaboplfbrettd7655fr4n2y - classnames: 2.3.2 + '@babel/runtime': 7.23.9 + classnames: 2.5.1 + rc-input: 1.4.3_biqbaboplfbrettd7655fr4n2y + rc-resize-observer: 1.4.0_biqbaboplfbrettd7655fr4n2y + rc-util: 5.38.2_biqbaboplfbrettd7655fr4n2y react: 18.2.0 react-dom: 18.2.0_react@18.2.0 dev: true @@ -19295,20 +18785,36 @@ packages: react-dom: 16.14.0_react@18.2.0 dev: true - /rc-tree-select/5.7.0_biqbaboplfbrettd7655fr4n2y: + /rc-tooltip/6.1.3_biqbaboplfbrettd7655fr4n2y: resolution: { - integrity: sha512-YGMpBFK9qBkgng2ZhOw7yFiL9VnjHij+uNvP+tiU/QZGdf2XcO8LHXQNUZRGAEzx4PT5lUs6d7kIfkQ9a74bqg==, + integrity: sha512-HMSbSs5oieZ7XddtINUddBLSVgsnlaSb3bZrzzGWjXa7/B7nNedmsuz72s7EWFEro9mNa7RyF3gOXKYqvJiTcQ==, + } + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + dependencies: + '@babel/runtime': 7.23.9 + '@rc-component/trigger': 1.18.3_biqbaboplfbrettd7655fr4n2y + classnames: 2.5.1 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + dev: true + + /rc-tree-select/5.17.0_biqbaboplfbrettd7655fr4n2y: + resolution: + { + integrity: sha512-7sRGafswBhf7n6IuHyCEFCildwQIgyKiV8zfYyUoWfZEFdhuk7lCH+DN0aHt+oJrdiY9+6Io/LDXloGe01O8XQ==, } peerDependencies: react: '*' react-dom: '*' dependencies: - '@babel/runtime': 7.21.0 - classnames: 2.3.2 - rc-select: 14.3.0_biqbaboplfbrettd7655fr4n2y - rc-tree: 5.7.2_biqbaboplfbrettd7655fr4n2y - rc-util: 5.28.0_biqbaboplfbrettd7655fr4n2y + '@babel/runtime': 7.23.9 + classnames: 2.5.1 + rc-select: 14.11.0_biqbaboplfbrettd7655fr4n2y + rc-tree: 5.8.5_biqbaboplfbrettd7655fr4n2y + rc-util: 5.38.2_biqbaboplfbrettd7655fr4n2y react: 18.2.0 react-dom: 18.2.0_react@18.2.0 dev: true @@ -19341,11 +18847,11 @@ packages: react: '*' react-dom: '*' dependencies: - '@babel/runtime': 7.21.0 - classnames: 2.3.2 + '@babel/runtime': 7.23.9 + classnames: 2.5.1 rc-motion: 2.6.3_biqbaboplfbrettd7655fr4n2y - rc-util: 5.28.0_biqbaboplfbrettd7655fr4n2y - rc-virtual-list: 3.4.13_biqbaboplfbrettd7655fr4n2y + rc-util: 5.38.2_biqbaboplfbrettd7655fr4n2y + rc-virtual-list: 3.11.4_biqbaboplfbrettd7655fr4n2y react: 18.2.0 react-dom: 18.2.0_react@18.2.0 dev: true @@ -19369,6 +18875,25 @@ packages: react-dom: 16.14.0_react@18.2.0 dev: true + /rc-tree/5.8.5_biqbaboplfbrettd7655fr4n2y: + resolution: + { + integrity: sha512-PRfcZtVDNkR7oh26RuNe1hpw11c1wfgzwmPFL0lnxGnYefe9lDAO6cg5wJKIAwyXFVt5zHgpjYmaz0CPy1ZtKg==, + } + engines: { node: '>=10.x' } + peerDependencies: + react: '*' + react-dom: '*' + dependencies: + '@babel/runtime': 7.23.9 + classnames: 2.5.1 + rc-motion: 2.9.0_biqbaboplfbrettd7655fr4n2y + rc-util: 5.38.2_biqbaboplfbrettd7655fr4n2y + rc-virtual-list: 3.11.4_biqbaboplfbrettd7655fr4n2y + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + dev: true + /rc-trigger/5.3.4_biqbaboplfbrettd7655fr4n2y: resolution: { @@ -19379,11 +18904,11 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.21.0 - classnames: 2.3.2 + '@babel/runtime': 7.23.9 + classnames: 2.5.1 rc-align: 4.0.15_biqbaboplfbrettd7655fr4n2y rc-motion: 2.6.3_biqbaboplfbrettd7655fr4n2y - rc-util: 5.28.0_biqbaboplfbrettd7655fr4n2y + rc-util: 5.38.2_biqbaboplfbrettd7655fr4n2y react: 18.2.0 react-dom: 18.2.0_react@18.2.0 dev: true @@ -19407,7 +18932,7 @@ packages: react-dom: 16.14.0_react@18.2.0 dev: true - /rc-upload/4.3.4_biqbaboplfbrettd7655fr4n2y: + /rc-upload/4.3.4_jnbmergxldlwssobus342vza4q: resolution: { integrity: sha512-uVbtHFGNjHG/RyAfm9fluXB6pvArAGyAx8z7XzXXyorEgVIWj6mOlriuDm0XowDHYz4ycNK0nE0oP3cbFnzxiQ==, @@ -19418,28 +18943,28 @@ packages: dependencies: '@babel/runtime': 7.21.0 classnames: 2.3.2 - rc-util: 5.28.0_biqbaboplfbrettd7655fr4n2y + rc-util: 5.28.0_jnbmergxldlwssobus342vza4q react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 + react-dom: 16.14.0_react@18.2.0 dev: true - /rc-upload/4.3.4_jnbmergxldlwssobus342vza4q: + /rc-upload/4.5.2_biqbaboplfbrettd7655fr4n2y: resolution: { - integrity: sha512-uVbtHFGNjHG/RyAfm9fluXB6pvArAGyAx8z7XzXXyorEgVIWj6mOlriuDm0XowDHYz4ycNK0nE0oP3cbFnzxiQ==, + integrity: sha512-QO3ne77DwnAPKFn0bA5qJM81QBjQi0e0NHdkvpFyY73Bea2NfITiotqJqVjHgeYPOJu5lLVR32TNGP084aSoXA==, } peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.21.0 - classnames: 2.3.2 - rc-util: 5.28.0_jnbmergxldlwssobus342vza4q + '@babel/runtime': 7.23.9 + classnames: 2.5.1 + rc-util: 5.38.2_biqbaboplfbrettd7655fr4n2y react: 18.2.0 - react-dom: 16.14.0_react@18.2.0 + react-dom: 18.2.0_react@18.2.0 dev: true - /rc-util/5.28.0_biqbaboplfbrettd7655fr4n2y: + /rc-util/5.28.0_jnbmergxldlwssobus342vza4q: resolution: { integrity: sha512-KYDjhGodswVj29v0TRciKTqRPgumIFvFDndbCD227pitQ+0Cei196rxk+OXb/blu6V8zdTRK5RjCJn+WmHLvBA==, @@ -19450,14 +18975,14 @@ packages: dependencies: '@babel/runtime': 7.21.0 react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 + react-dom: 16.14.0_react@18.2.0 react-is: 16.13.1 dev: true - /rc-util/5.28.0_jnbmergxldlwssobus342vza4q: + /rc-util/5.38.2_biqbaboplfbrettd7655fr4n2y: resolution: { - integrity: sha512-KYDjhGodswVj29v0TRciKTqRPgumIFvFDndbCD227pitQ+0Cei196rxk+OXb/blu6V8zdTRK5RjCJn+WmHLvBA==, + integrity: sha512-yRGRPKyi84H7NkRSP6FzEIYBdUt4ufdsmXUZ7qM2H5qoByPax70NnGPkfo36N+UKUnUBj2f2Q2eUbwYMuAsIOQ==, } peerDependencies: react: '>=16.9.0' @@ -19465,24 +18990,24 @@ packages: dependencies: '@babel/runtime': 7.21.0 react: 18.2.0 - react-dom: 16.14.0_react@18.2.0 - react-is: 16.13.1 + react-dom: 18.2.0_react@18.2.0 + react-is: 18.2.0 dev: true - /rc-virtual-list/3.4.13_biqbaboplfbrettd7655fr4n2y: + /rc-virtual-list/3.11.4_biqbaboplfbrettd7655fr4n2y: resolution: { - integrity: sha512-cPOVDmcNM7rH6ANotanMDilW/55XnFPw0Jh/GQYtrzZSy3AmWvCnqVNyNC/pgg3lfVmX2994dlzAhuUrd4jG7w==, + integrity: sha512-NbBi0fvyIu26gP69nQBiWgUMTPX3mr4FcuBQiVqagU0BnuX8WQkiivnMs105JROeuUIFczLrlgUhLQwTWV1XDA==, } engines: { node: '>=8.x' } peerDependencies: - react: '*' - react-dom: '*' + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.21.0 - classnames: 2.3.2 - rc-resize-observer: 1.3.1_biqbaboplfbrettd7655fr4n2y - rc-util: 5.28.0_biqbaboplfbrettd7655fr4n2y + '@babel/runtime': 7.23.9 + classnames: 2.5.1 + rc-resize-observer: 1.4.0_biqbaboplfbrettd7655fr4n2y + rc-util: 5.38.2_biqbaboplfbrettd7655fr4n2y react: 18.2.0 react-dom: 18.2.0_react@18.2.0 dev: true @@ -19610,10 +19135,17 @@ packages: peerDependencies: react: '>=16.13.1' dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.23.9 react: 18.2.0 dev: true + /react-fast-compare/3.2.2: + resolution: + { + integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==, + } + dev: false + /react-is/16.13.1: resolution: { @@ -19679,7 +19211,7 @@ packages: react: '>=15' react-router: '>=5' dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.23.9 react: 16.14.0 react-router: 5.2.0_react@16.14.0 dev: true @@ -19693,7 +19225,7 @@ packages: react: '>=15' react-router: '>=5' dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.23.9 react: 18.2.0 react-router: 6.8.2_react@18.2.0 dev: true @@ -19707,7 +19239,7 @@ packages: react: '>=15' react-router: '>=5' dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.23.9 react: 16.14.0 react-router: 6.8.2_react@18.2.0 dev: true @@ -19720,7 +19252,7 @@ packages: peerDependencies: react: '>=15' dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.23.9 history: 4.10.1 loose-envify: 1.4.0 prop-types: 15.8.1 @@ -19738,7 +19270,7 @@ packages: peerDependencies: react: '>=15' dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.23.9 history: 4.10.1 loose-envify: 1.4.0 prop-types: 15.8.1 @@ -19756,7 +19288,7 @@ packages: peerDependencies: react: '>=15' dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.23.9 history: 4.10.1 hoist-non-react-statics: 3.3.2 loose-envify: 1.4.0 @@ -19777,7 +19309,7 @@ packages: peerDependencies: react: '>=15' dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.23.9 history: 4.10.1 hoist-non-react-statics: 3.3.2 loose-envify: 1.4.0 @@ -19819,21 +19351,6 @@ packages: react-use: 15.3.8_biqbaboplfbrettd7655fr4n2y dev: true - /react-test-renderer/16.14.0_react@18.2.0: - resolution: - { - integrity: sha512-L8yPjqPE5CZO6rKsKXRO/rVPiaCOy0tQQJbC+UjPNlobl5mad59lvPjwFsQHTvL03caVDIVr9x9/OSgDe6I5Eg==, - } - peerDependencies: - react: ^16.14.0 - dependencies: - object-assign: 4.1.1 - prop-types: 15.8.1 - react: 18.2.0 - react-is: 16.13.1 - scheduler: 0.19.1 - dev: true - /react-textarea-autosize/8.4.0_react@18.2.0: resolution: { @@ -20018,7 +19535,7 @@ packages: } engines: { node: '>=0.10' } dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 micromatch: 3.1.10 readable-stream: 2.3.8 transitivePeerDependencies: @@ -20044,6 +19561,7 @@ packages: dependencies: picomatch: 2.3.1 dev: true + optional: true /rechoir/0.6.2: resolution: @@ -20055,22 +19573,25 @@ packages: resolve: 1.22.1 dev: true - /redent/3.0.0: + /rechoir/0.8.0: resolution: { - integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==, + integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==, } - engines: { node: '>=8' } + engines: { node: '>= 10.13.0' } dependencies: - indent-string: 4.0.0 - strip-indent: 3.0.0 + resolve: 1.22.4 dev: true - /reflect.ownkeys/0.2.0: + /redent/3.0.0: resolution: { - integrity: sha512-qOLsBKHCpSOFKK1NUOCGC5VyeufB6lEsFe92AL2bhIJsacZS1qdoOZSbPk3MYKuT2cFlRDnulKXuuElIrMjGUg==, + integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==, } + engines: { node: '>=8' } + dependencies: + indent-string: 4.0.0 + strip-indent: 3.0.0 dev: true /regenerate-unicode-properties/10.0.1: @@ -20120,13 +19641,20 @@ packages: } dev: true + /regenerator-runtime/0.14.1: + resolution: + { + integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==, + } + dev: true + /regenerator-transform/0.15.1: resolution: { integrity: sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==, } dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.23.9 dev: true /regex-not/1.0.2: @@ -20478,13 +20006,6 @@ packages: } dev: true - /require-main-filename/2.0.0: - resolution: - { - integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==, - } - dev: true - /requires-port/1.0.0: resolution: { @@ -20505,16 +20026,6 @@ packages: integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==, } - /resolve-cwd/2.0.0: - resolution: - { - integrity: sha512-ccu8zQTrzVr954472aUVPLEcB3YpKSYR3cg/3lo1okzobPBM+1INXBbBZlDbnI/hbEocnf8j0QVo43hQKrbchg==, - } - engines: { node: '>=4' } - dependencies: - resolve-from: 3.0.0 - dev: true - /resolve-cwd/3.0.0: resolution: { @@ -20626,6 +20137,18 @@ packages: supports-preserve-symlinks-flag: 1.0.0 dev: true + /resolve/1.22.4: + resolution: + { + integrity: sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==, + } + hasBin: true + dependencies: + is-core-module: 2.13.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + /resolve/2.0.0-next.4: resolution: { @@ -20702,23 +20225,13 @@ packages: inherits: 2.0.4 dev: true - /rst-selector-parser/2.2.3: - resolution: - { - integrity: sha512-nDG1rZeP6oFTLN6yNDV/uiAvs1+FS/KlrEwh7+y7dpuApDBy6bI2HTBcc0/V8lv9OTqfyD34eF7au2pm8aBbhA==, - } - dependencies: - lodash.flattendeep: 4.4.0 - nearley: 2.20.1 - dev: true - /rtl-css-js/1.16.1: resolution: { integrity: sha512-lRQgou1mu19e+Ya0LsTvKrVJ5TYUbqCVPAiImX3UfLTenarvPUl1QFdvu5Z3PYmHT9RCcwIfbjRQBntExyj3Zg==, } dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.23.9 dev: true /run-async/2.4.1: @@ -20807,47 +20320,6 @@ packages: } dev: true - /sass-loader/8.0.2_sass@1.58.3+webpack@4.46.0: - resolution: - { - integrity: sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ==, - } - engines: { node: '>= 8.9.0' } - peerDependencies: - fibers: '>= 3.1.0' - node-sass: ^4.0.0 - sass: ^1.3.0 - webpack: ^4.36.0 || ^5.0.0 - peerDependenciesMeta: - fibers: - optional: true - node-sass: - optional: true - sass: - optional: true - dependencies: - clone-deep: 4.0.1 - loader-utils: 1.4.2 - neo-async: 2.6.2 - sass: 1.58.3 - schema-utils: 2.7.1 - semver: 6.3.0 - webpack: 4.46.0_webpack-cli@3.3.12 - dev: true - - /sass/1.58.3: - resolution: - { - integrity: sha512-Q7RaEtYf6BflYrQ+buPudKR26/lH+10EmO9bBqbmPh/KeLqv8bjpTNqxe71ocONqXq+jYiCbpPUmQMS+JJPk4A==, - } - engines: { node: '>=12.0.0' } - hasBin: true - dependencies: - chokidar: 3.5.3 - immutable: 4.2.4 - source-map-js: 1.0.2 - dev: true - /sax/1.2.4: resolution: { @@ -20906,26 +20378,26 @@ packages: ajv-keywords: 3.5.2_ajv@6.12.6 dev: true - /schema-utils/2.7.1: + /schema-utils/3.1.1: resolution: { - integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==, + integrity: sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==, } - engines: { node: '>= 8.9.0' } + engines: { node: '>= 10.13.0' } dependencies: '@types/json-schema': 7.0.11 ajv: 6.12.6 ajv-keywords: 3.5.2_ajv@6.12.6 dev: true - /schema-utils/3.1.1: + /schema-utils/3.3.0: resolution: { - integrity: sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==, + integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==, } engines: { node: '>= 10.13.0' } dependencies: - '@types/json-schema': 7.0.11 + '@types/json-schema': 7.0.12 ajv: 6.12.6 ajv-keywords: 3.5.2_ajv@6.12.6 dev: true @@ -20943,7 +20415,16 @@ packages: integrity: sha512-x+CW0kOzlFNOnseF0DBr0AJ5m+TgGmSOdEZwyiZW0gV87XBvxQKw5A8DvFFgabznA68XqLgVX+PwPX8OzsFvRA==, } dependencies: - compute-scroll-into-view: 3.0.0 + compute-scroll-into-view: 3.0.0 + dev: true + + /scroll-into-view-if-needed/3.1.0: + resolution: + { + integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==, + } + dependencies: + compute-scroll-into-view: 3.1.0 dev: true /section-matter/1.0.0: @@ -21004,13 +20485,15 @@ packages: lru-cache: 6.0.0 dev: true - /serialize-javascript/4.0.0: + /semver/7.5.4: resolution: { - integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==, + integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==, } + engines: { node: '>=10' } + hasBin: true dependencies: - randombytes: 2.1.0 + lru-cache: 6.0.0 dev: true /serialize-javascript/5.0.1: @@ -21022,6 +20505,15 @@ packages: randombytes: 2.1.0 dev: true + /serialize-javascript/6.0.2: + resolution: + { + integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==, + } + dependencies: + randombytes: 2.1.0 + dev: true + /set-blocking/2.0.0: resolution: { @@ -21263,25 +20755,6 @@ packages: - supports-color dev: true - /snapdragon/0.8.2_supports-color@6.1.0: - resolution: - { - integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==, - } - engines: { node: '>=0.10.0' } - dependencies: - base: 0.11.2 - debug: 2.6.9_supports-color@6.1.0 - define-property: 0.2.5 - extend-shallow: 2.0.1 - map-cache: 0.2.2 - source-map: 0.5.7 - source-map-resolve: 0.5.3 - use: 3.1.1 - transitivePeerDependencies: - - supports-color - dev: true - /socks-proxy-agent/3.0.1: resolution: { @@ -21336,13 +20809,6 @@ packages: sort-object-keys: 1.1.3 dev: true - /source-list-map/2.0.1: - resolution: - { - integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==, - } - dev: true - /source-map-js/1.0.2: resolution: { @@ -21508,6 +20974,15 @@ packages: integrity: sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==, } engines: { node: '>=6' } + dev: true + + /split-on-first/3.0.0: + resolution: + { + integrity: sha512-qxQJTx2ryR0Dw0ITYyekNQWpz6f8dGd7vffGNflQQ3Iqj9NJ6qiZ7ELpZsJ/QBhIVAiDfXdag3+Gp8RvWa62AA==, + } + engines: { node: '>=12' } + dev: false /split-string/3.1.0: resolution: @@ -21585,15 +21060,6 @@ packages: safe-buffer: 5.2.1 dev: true - /ssri/6.0.2: - resolution: - { - integrity: sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==, - } - dependencies: - figgy-pudding: 3.5.2 - dev: true - /stack-generator/2.0.10: resolution: { @@ -21727,6 +21193,7 @@ packages: integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==, } engines: { node: '>=4' } + dev: true /string-convert/0.2.1: resolution: @@ -21769,18 +21236,6 @@ packages: strip-ansi: 4.0.0 dev: true - /string-width/3.1.0: - resolution: - { - integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==, - } - engines: { node: '>=6' } - dependencies: - emoji-regex: 7.0.3 - is-fullwidth-code-point: 2.0.0 - strip-ansi: 5.2.0 - dev: true - /string-width/4.2.3: resolution: { @@ -21809,18 +21264,6 @@ packages: side-channel: 1.0.4 dev: true - /string.prototype.trim/1.2.7: - resolution: - { - integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==, - } - engines: { node: '>= 0.4' } - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.21.1 - dev: true - /string.prototype.trimend/1.0.6: resolution: { @@ -22162,6 +21605,13 @@ packages: } dev: true + /stylis/4.3.1: + resolution: + { + integrity: sha512-EQepAV+wMsIaGVGX1RECzgrcqRRU/0sYOHkeLsZ3fzHaHXZy4DaOOX0vOlGQdlsjkh3mFHAIlVimpwAs4dslyQ==, + } + dev: true + /sugarss/2.0.0: resolution: { @@ -22327,6 +21777,14 @@ packages: engines: { node: '>=6' } dev: true + /tapable/2.2.1: + resolution: + { + integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==, + } + engines: { node: '>=6' } + dev: true + /tar-fs/1.16.3: resolution: { @@ -22376,45 +21834,51 @@ packages: execa: 0.7.0 dev: true - /terser-webpack-plugin/1.4.5_webpack@4.46.0: + /terser-webpack-plugin/5.3.10_webpack@5.90.3: resolution: { - integrity: sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==, + integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==, } - engines: { node: '>= 6.9.0' } + engines: { node: '>= 10.13.0' } peerDependencies: - webpack: ^4.0.0 + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true dependencies: - cacache: 12.0.4 - find-cache-dir: 2.1.0 - is-wsl: 1.1.0 - schema-utils: 1.0.0 - serialize-javascript: 4.0.0 - source-map: 0.6.1 - terser: 4.8.1 - webpack: 4.46.0_webpack-cli@3.3.12 - webpack-sources: 1.4.3 - worker-farm: 1.7.0 + '@jridgewell/trace-mapping': 0.3.23 + jest-worker: 27.5.1 + schema-utils: 3.3.0 + serialize-javascript: 6.0.2 + terser: 5.28.1 + webpack: 5.90.3_webpack-cli@5.1.4 dev: true - /terser/4.8.1: + /terser/5.14.2: resolution: { - integrity: sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==, + integrity: sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==, } - engines: { node: '>=6.0.0' } + engines: { node: '>=10' } hasBin: true dependencies: - acorn: 8.8.2 + '@jridgewell/source-map': 0.3.5 + acorn: 8.11.3 commander: 2.20.3 - source-map: 0.6.1 source-map-support: 0.5.21 dev: true - /terser/5.14.2: + /terser/5.16.5: resolution: { - integrity: sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==, + integrity: sha512-qcwfg4+RZa3YvlFh0qjifnzBHjKGNbtDo9yivMqMFDy9Q6FSaQWSB/j1xKhsoUFJIqDOM3TsN6D5xbrMrFcHbg==, } engines: { node: '>=10' } hasBin: true @@ -22425,16 +21889,16 @@ packages: source-map-support: 0.5.21 dev: true - /terser/5.16.5: + /terser/5.28.1: resolution: { - integrity: sha512-qcwfg4+RZa3YvlFh0qjifnzBHjKGNbtDo9yivMqMFDy9Q6FSaQWSB/j1xKhsoUFJIqDOM3TsN6D5xbrMrFcHbg==, + integrity: sha512-wM+bZp54v/E9eRRGXb5ZFDvinrJIOaTapx3WUokyVGZu5ucVCK55zEgGd5Dl2fSr3jUo5sDiERErUWLY6QPFyA==, } engines: { node: '>=10' } hasBin: true dependencies: - '@jridgewell/source-map': 0.3.2 - acorn: 8.8.2 + '@jridgewell/source-map': 0.3.5 + acorn: 8.10.0 commander: 2.20.3 source-map-support: 0.5.21 dev: true @@ -22725,7 +22189,7 @@ packages: } engines: { node: '>=8' } dependencies: - punycode: 2.3.0 + punycode: 2.3.1 dev: true /tr46/3.0.0: @@ -22735,7 +22199,7 @@ packages: } engines: { node: '>=12' } dependencies: - punycode: 2.3.0 + punycode: 2.3.1 dev: true /trim-newlines/3.0.1: @@ -22760,10 +22224,10 @@ packages: } dev: true - /ts-jest/29.0.5_qxnzkgjgfs7tsedreuy2cieazm: + /ts-jest/29.1.1_qxnzkgjgfs7tsedreuy2cieazm: resolution: { - integrity: sha512-PL3UciSgIpQ7f6XjVOmbi96vmDHUqAyqDr8YxzopDqX3kfgYtX1cuNeBjP+L9sFXi6nzsGGA6R3fP3DDDJyrxA==, + integrity: sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==, } engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } hasBin: true @@ -22773,7 +22237,7 @@ packages: babel-jest: ^29.0.0 esbuild: '*' jest: ^29.0.0 - typescript: '>=4.3' + typescript: '>=4.3 <6' peerDependenciesMeta: '@babel/core': optional: true @@ -22788,11 +22252,11 @@ packages: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 jest: 29.4.3_nvadb4ngcuh2lyv22apfdo6nc4 - jest-util: 29.4.3 + jest-util: 29.6.3 json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 - semver: 7.3.8 + semver: 7.5.4 typescript: 5.1.3 yargs-parser: 21.1.1 dev: true @@ -22844,6 +22308,13 @@ packages: integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==, } + /tslib/2.6.2: + resolution: + { + integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==, + } + dev: true + /tsutils/3.21.0_typescript@4.9.5: resolution: { @@ -23024,16 +22495,6 @@ packages: } dev: true - /umi-request/1.4.0: - resolution: - { - integrity: sha512-OknwtQZddZHi0Ggi+Vr/olJ7HNMx4AzlywyK0W3NZBT7B0stjeZ9lcztA85dBgdAj3KVk8uPJPZSnGaDjELhrA==, - } - dependencies: - isomorphic-fetch: 2.2.1 - qs: 6.11.0 - dev: true - /umi/3.5.37_react-router@6.8.2: resolution: { @@ -23055,27 +22516,6 @@ packages: - react-router dev: true - /umi/3.5.38_react-router@6.8.2: - resolution: - { - integrity: sha512-Fmf4EdyDMtjs1RvXGwLeZ3vkS5ebQpYspddgZbVMSz2eXl3zfMYWKz1JlsXupyoOrmLq44ueHr1WQVCdxvoyVA==, - } - hasBin: true - dependencies: - '@umijs/bundler-webpack': 3.5.38_263kk2d5tiuyg32yuu7rrhuyze - '@umijs/core': 3.5.38 - '@umijs/deps': 3.5.38 - '@umijs/preset-built-in': 3.5.38_wcqkhtmu7mswc6yz4uyexck3ty - '@umijs/runtime': 3.5.38_react@16.14.0 - '@umijs/types': 3.5.38_263kk2d5tiuyg32yuu7rrhuyze - '@umijs/utils': 3.5.38 - react: 16.14.0 - react-dom: 16.14.0_react@16.14.0 - v8-compile-cache: 2.3.0 - transitivePeerDependencies: - - react-router - dev: true - /unbox-primitive/1.0.2: resolution: { @@ -23123,6 +22563,13 @@ packages: undertaker-registry: 1.0.1 dev: true + /undici-types/5.26.5: + resolution: + { + integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==, + } + dev: true + /unicode-canonical-property-names-ecmascript/2.0.0: resolution: { @@ -23502,6 +22949,20 @@ packages: picocolors: 1.0.0 dev: true + /update-browserslist-db/1.0.11_browserslist@4.21.10: + resolution: + { + integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==, + } + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.21.10 + escalade: 3.1.1 + picocolors: 1.0.0 + dev: true + /update-notifier/2.5.0: resolution: { @@ -23527,7 +22988,7 @@ packages: integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==, } dependencies: - punycode: 2.3.0 + punycode: 2.3.1 dev: true /urix/0.1.0: @@ -23701,7 +23162,7 @@ packages: } engines: { node: '>=10.12.0' } dependencies: - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/trace-mapping': 0.3.23 '@types/istanbul-lib-coverage': 2.0.4 convert-source-map: 1.9.0 dev: true @@ -23823,7 +23284,7 @@ packages: dependencies: append-buffer: 1.0.2 convert-source-map: 1.9.0 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 normalize-path: 2.1.1 now-and-later: 2.0.1 remove-bom-buffer: 3.0.0 @@ -23900,32 +23361,15 @@ packages: makeerror: 1.0.12 dev: true - /watchpack-chokidar2/2.0.1: - resolution: - { - integrity: sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==, - } - requiresBuild: true - dependencies: - chokidar: 2.1.8 - transitivePeerDependencies: - - supports-color - dev: true - optional: true - - /watchpack/1.7.5: + /watchpack/2.4.0: resolution: { - integrity: sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==, + integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==, } + engines: { node: '>=10.13.0' } dependencies: - graceful-fs: 4.2.10 - neo-async: 2.6.2 - optionalDependencies: - chokidar: 3.5.3 - watchpack-chokidar2: 2.0.1 - transitivePeerDependencies: - - supports-color + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 dev: true /web-namespaces/1.1.4: @@ -23977,28 +23421,40 @@ packages: javascript-stringify: 2.1.0 dev: true - /webpack-cli/3.3.12_webpack@4.46.0: + /webpack-cli/5.1.4_webpack@5.90.3: resolution: { - integrity: sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag==, + integrity: sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==, } - engines: { node: '>=6.11.5' } + engines: { node: '>=14.15.0' } hasBin: true peerDependencies: - webpack: 4.x.x + '@webpack-cli/generators': '*' + webpack: 5.x.x + webpack-bundle-analyzer: '*' + webpack-dev-server: '*' + peerDependenciesMeta: + '@webpack-cli/generators': + optional: true + webpack-bundle-analyzer: + optional: true + webpack-dev-server: + optional: true dependencies: - chalk: 2.4.2 - cross-spawn: 6.0.5 - enhanced-resolve: 4.5.0 - findup-sync: 3.0.0_supports-color@6.1.0 - global-modules: 2.0.0 - import-local: 2.0.0 - interpret: 1.4.0 - loader-utils: 1.4.2 - supports-color: 6.1.0 - v8-compile-cache: 2.3.0 - webpack: 4.46.0_webpack-cli@3.3.12 - yargs: 13.3.2 + '@discoveryjs/json-ext': 0.5.7 + '@webpack-cli/configtest': 2.1.1_hnl4swsiqcfi2tanzermfafqya + '@webpack-cli/info': 2.0.2_hnl4swsiqcfi2tanzermfafqya + '@webpack-cli/serve': 2.0.5_hnl4swsiqcfi2tanzermfafqya + colorette: 2.0.20 + commander: 10.0.1 + cross-spawn: 7.0.3 + envinfo: 7.10.0 + fastest-levenshtein: 1.0.16 + import-local: 3.1.0 + interpret: 3.1.1 + rechoir: 0.8.0 + webpack: 5.90.3_webpack-cli@5.1.4 + webpack-merge: 5.9.0 dev: true /webpack-merge/4.2.2: @@ -24010,58 +23466,67 @@ packages: lodash: 4.17.21 dev: true - /webpack-sources/1.4.3: + /webpack-merge/5.9.0: resolution: { - integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==, + integrity: sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==, } + engines: { node: '>=10.0.0' } dependencies: - source-list-map: 2.0.1 - source-map: 0.6.1 + clone-deep: 4.0.1 + wildcard: 2.0.1 dev: true - /webpack/4.46.0_webpack-cli@3.3.12: + /webpack-sources/3.2.3: resolution: { - integrity: sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==, + integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==, } - engines: { node: '>=6.11.5' } + engines: { node: '>=10.13.0' } + dev: true + + /webpack/5.90.3_webpack-cli@5.1.4: + resolution: + { + integrity: sha512-h6uDYlWCctQRuXBs1oYpVe6sFcWedl0dpcVaTf/YF67J9bKvwJajFulMVSYKHrksMB3I/pIagRzDxwxkebuzKA==, + } + engines: { node: '>=10.13.0' } hasBin: true peerDependencies: webpack-cli: '*' - webpack-command: '*' peerDependenciesMeta: webpack-cli: optional: true - webpack-command: - optional: true dependencies: - '@webassemblyjs/ast': 1.9.0 - '@webassemblyjs/helper-module-context': 1.9.0 - '@webassemblyjs/wasm-edit': 1.9.0 - '@webassemblyjs/wasm-parser': 1.9.0 - acorn: 6.4.2 - ajv: 6.12.6 - ajv-keywords: 3.5.2_ajv@6.12.6 + '@types/eslint-scope': 3.7.4 + '@types/estree': 1.0.5 + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/wasm-edit': 1.11.6 + '@webassemblyjs/wasm-parser': 1.11.6 + acorn: 8.10.0 + acorn-import-assertions: 1.9.0_acorn@8.10.0 + browserslist: 4.21.10 chrome-trace-event: 1.0.3 - enhanced-resolve: 4.5.0 - eslint-scope: 4.0.3 - json-parse-better-errors: 1.0.2 - loader-runner: 2.4.0 - loader-utils: 1.4.2 - memory-fs: 0.4.1 - micromatch: 3.1.10 - mkdirp: 0.5.6 + enhanced-resolve: 5.15.0 + es-module-lexer: 1.3.0 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 + mime-types: 2.1.35 neo-async: 2.6.2 - node-libs-browser: 2.2.1 - schema-utils: 1.0.0 - tapable: 1.1.3 - terser-webpack-plugin: 1.4.5_webpack@4.46.0 - watchpack: 1.7.5 - webpack-cli: 3.3.12_webpack@4.46.0 - webpack-sources: 1.4.3 + schema-utils: 3.3.0 + tapable: 2.2.1 + terser-webpack-plugin: 5.3.10_webpack@5.90.3 + watchpack: 2.4.0 + webpack-cli: 5.1.4_webpack@5.90.3 + webpack-sources: 3.2.3 transitivePeerDependencies: - - supports-color + - '@swc/core' + - esbuild + - uglify-js dev: true /whatwg-encoding/1.0.5: @@ -24083,13 +23548,6 @@ packages: iconv-lite: 0.6.3 dev: true - /whatwg-fetch/3.6.2: - resolution: - { - integrity: sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==, - } - dev: true - /whatwg-mimetype/2.3.0: resolution: { @@ -24170,13 +23628,6 @@ packages: } dev: true - /which-module/2.0.0: - resolution: - { - integrity: sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==, - } - dev: true - /which-typed-array/1.1.9: resolution: { @@ -24236,21 +23687,19 @@ packages: string-width: 2.1.1 dev: true - /word-wrap/1.2.3: + /wildcard/2.0.1: resolution: { - integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==, + integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==, } - engines: { node: '>=0.10.0' } dev: true - /worker-farm/1.7.0: + /word-wrap/1.2.3: resolution: { - integrity: sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==, + integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==, } - dependencies: - errno: 0.1.8 + engines: { node: '>=0.10.0' } dev: true /workerpool/6.1.0: @@ -24271,18 +23720,6 @@ packages: strip-ansi: 3.0.1 dev: true - /wrap-ansi/5.1.0: - resolution: - { - integrity: sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==, - } - engines: { node: '>=6' } - dependencies: - ansi-styles: 3.2.1 - string-width: 3.1.0 - strip-ansi: 5.2.0 - dev: true - /wrap-ansi/7.0.0: resolution: { @@ -24308,7 +23745,7 @@ packages: integrity: sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==, } dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 imurmurhash: 0.1.4 signal-exit: 3.0.7 dev: true @@ -24465,16 +23902,6 @@ packages: engines: { node: '>= 6' } dev: true - /yargs-parser/13.1.2: - resolution: - { - integrity: sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==, - } - dependencies: - camelcase: 5.3.1 - decamelize: 1.2.0 - dev: true - /yargs-parser/20.2.4: resolution: { @@ -24522,24 +23949,6 @@ packages: is-plain-obj: 2.1.0 dev: true - /yargs/13.3.2: - resolution: - { - integrity: sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==, - } - dependencies: - cliui: 5.0.0 - find-up: 3.0.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - require-main-filename: 2.0.0 - set-blocking: 2.0.0 - string-width: 3.1.0 - which-module: 2.0.0 - y18n: 4.0.3 - yargs-parser: 13.1.2 - dev: true - /yargs/16.2.0: resolution: { diff --git a/tsconfig.json b/tsconfig.json index d8c6842baf..aa3fa97d3c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -9,10 +9,9 @@ "baseUrl": ".", "paths": { "@/*": ["src/*"], - "ahooks": ["./packages/hooks/src/index.ts"], - "ahooks/lib/*": ["./packages/hooks/src/*"], "@ahooksjs/use-url-state": ["./packages/use-url-state/src/index.ts"] }, + "allowJs": true, "allowSyntheticDefaultImports": true, "skipLibCheck": true, "declaration": false,