From ec0274cb96b70f79b8f88d1137de7e44cc7a68b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E6=AC=A2?= Date: Thu, 28 May 2026 15:37:53 +0800 Subject: [PATCH 1/4] fix: refactor imports to use named exports from @rc-component/util --- src/Menu.tsx | 6 ++++-- src/MenuItem.tsx | 6 ++++-- src/MenuItemGroup.tsx | 2 +- src/SubMenu/PopupTrigger.tsx | 2 ++ src/SubMenu/index.tsx | 2 +- src/context/MenuContext.tsx | 2 ++ src/hooks/useAccessibility.ts | 2 ++ src/hooks/useKeyRecords.ts | 2 +- src/utils/commonUtil.ts | 2 +- src/utils/warnUtil.ts | 2 +- 10 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/Menu.tsx b/src/Menu.tsx index f8a1b87a..c08c233e 100644 --- a/src/Menu.tsx +++ b/src/Menu.tsx @@ -1,10 +1,12 @@ import { clsx } from 'clsx'; import type { CSSMotionProps } from '@rc-component/motion'; import Overflow from '@rc-component/overflow'; -import useControlledState from '@rc-component/util/lib/hooks/useControlledState'; +import { useControlledState } from '@rc-component/util'; +/* eslint-disable no-restricted-imports */ import useId from '@rc-component/util/lib/hooks/useId'; import isEqual from '@rc-component/util/lib/isEqual'; -import warning from '@rc-component/util/lib/warning'; + +import { warning } from '@rc-component/util'; import * as React from 'react'; import { useImperativeHandle } from 'react'; import { flushSync } from 'react-dom'; diff --git a/src/MenuItem.tsx b/src/MenuItem.tsx index 3405fae6..a6b9230d 100644 --- a/src/MenuItem.tsx +++ b/src/MenuItem.tsx @@ -1,9 +1,11 @@ import { clsx } from 'clsx'; import Overflow from '@rc-component/overflow'; +/* eslint-disable no-restricted-imports */ import KeyCode from '@rc-component/util/lib/KeyCode'; -import omit from '@rc-component/util/lib/omit'; + +import { omit } from '@rc-component/util'; import { useComposeRef } from '@rc-component/util/lib/ref'; -import warning from '@rc-component/util/lib/warning'; +import { warning } from '@rc-component/util'; import * as React from 'react'; import { useMenuId } from './context/IdContext'; import { MenuContext } from './context/MenuContext'; diff --git a/src/MenuItemGroup.tsx b/src/MenuItemGroup.tsx index 9de75f26..d6b0c5a7 100644 --- a/src/MenuItemGroup.tsx +++ b/src/MenuItemGroup.tsx @@ -1,5 +1,5 @@ import { clsx } from 'clsx'; -import omit from '@rc-component/util/lib/omit'; +import { omit } from '@rc-component/util'; import * as React from 'react'; import { MenuContext } from './context/MenuContext'; import { useFullPath, useMeasure } from './context/PathContext'; diff --git a/src/SubMenu/PopupTrigger.tsx b/src/SubMenu/PopupTrigger.tsx index a2a33946..96347436 100644 --- a/src/SubMenu/PopupTrigger.tsx +++ b/src/SubMenu/PopupTrigger.tsx @@ -1,7 +1,9 @@ import * as React from 'react'; import Trigger from '@rc-component/trigger'; import { clsx } from 'clsx'; +/* eslint-disable no-restricted-imports */ import raf from '@rc-component/util/lib/raf'; + import type { CSSMotionProps } from '@rc-component/motion'; import { MenuContext } from '../context/MenuContext'; import { placements, placementsRtl } from '../placements'; diff --git a/src/SubMenu/index.tsx b/src/SubMenu/index.tsx index 5c78e61c..f27b47c2 100644 --- a/src/SubMenu/index.tsx +++ b/src/SubMenu/index.tsx @@ -1,7 +1,7 @@ import * as React from 'react'; import { clsx } from 'clsx'; import Overflow from '@rc-component/overflow'; -import warning from '@rc-component/util/lib/warning'; +import { warning } from '@rc-component/util'; import SubMenuList from './SubMenuList'; import { parseChildren } from '../utils/commonUtil'; import type { MenuInfo, SubMenuType } from '../interface'; diff --git a/src/context/MenuContext.tsx b/src/context/MenuContext.tsx index 1de6a8ff..a971b82b 100644 --- a/src/context/MenuContext.tsx +++ b/src/context/MenuContext.tsx @@ -1,7 +1,9 @@ import * as React from 'react'; import type { CSSMotionProps } from '@rc-component/motion'; +/* eslint-disable no-restricted-imports */ import useMemo from '@rc-component/util/lib/hooks/useMemo'; import isEqual from '@rc-component/util/lib/isEqual'; + import type { BuiltinPlacements, MenuClickEventHandler, diff --git a/src/hooks/useAccessibility.ts b/src/hooks/useAccessibility.ts index 695f2860..d59e1f80 100644 --- a/src/hooks/useAccessibility.ts +++ b/src/hooks/useAccessibility.ts @@ -1,6 +1,8 @@ +/* eslint-disable no-restricted-imports */ import { getFocusNodeList } from '@rc-component/util/lib/Dom/focus'; import KeyCode from '@rc-component/util/lib/KeyCode'; import raf from '@rc-component/util/lib/raf'; + import * as React from 'react'; import { getMenuId } from '../context/IdContext'; import type { MenuMode } from '../interface'; diff --git a/src/hooks/useKeyRecords.ts b/src/hooks/useKeyRecords.ts index f9dda910..d9af87d7 100644 --- a/src/hooks/useKeyRecords.ts +++ b/src/hooks/useKeyRecords.ts @@ -1,6 +1,6 @@ import * as React from 'react'; import { useRef, useCallback } from 'react'; -import warning from '@rc-component/util/lib/warning'; +import { warning } from '@rc-component/util'; import { nextSlice } from '../utils/timeUtil'; const PATH_SPLIT = '__RC_UTIL_PATH_SPLIT__'; diff --git a/src/utils/commonUtil.ts b/src/utils/commonUtil.ts index fc09b9f4..8054c8c4 100644 --- a/src/utils/commonUtil.ts +++ b/src/utils/commonUtil.ts @@ -1,4 +1,4 @@ -import toArray from '@rc-component/util/lib/Children/toArray'; +import { toArray } from '@rc-component/util'; import * as React from 'react'; export function parseChildren(children: React.ReactNode | undefined, keyPath: string[]) { diff --git a/src/utils/warnUtil.ts b/src/utils/warnUtil.ts index 60cbdfe5..c295e1a1 100644 --- a/src/utils/warnUtil.ts +++ b/src/utils/warnUtil.ts @@ -1,4 +1,4 @@ -import warning from '@rc-component/util/lib/warning'; +import { warning } from '@rc-component/util'; /** * `onClick` event return `info.item` which point to react node directly. From ddacc5008883d477512bc2e51f8bc5b04e967200 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E6=AC=A2?= Date: Thu, 28 May 2026 15:47:53 +0800 Subject: [PATCH 2/4] fix: consolidate imports from @rc-component/util across multiple files --- src/Menu.tsx | 5 ++--- src/MenuItem.tsx | 5 ++--- src/context/MenuContext.tsx | 1 + src/hooks/useAccessibility.ts | 2 ++ 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/Menu.tsx b/src/Menu.tsx index c08c233e..92f68472 100644 --- a/src/Menu.tsx +++ b/src/Menu.tsx @@ -1,12 +1,11 @@ import { clsx } from 'clsx'; import type { CSSMotionProps } from '@rc-component/motion'; import Overflow from '@rc-component/overflow'; -import { useControlledState } from '@rc-component/util'; +import { useControlledState, warning } from '@rc-component/util'; /* eslint-disable no-restricted-imports */ import useId from '@rc-component/util/lib/hooks/useId'; +/* eslint-disable no-restricted-imports */ import isEqual from '@rc-component/util/lib/isEqual'; - -import { warning } from '@rc-component/util'; import * as React from 'react'; import { useImperativeHandle } from 'react'; import { flushSync } from 'react-dom'; diff --git a/src/MenuItem.tsx b/src/MenuItem.tsx index a6b9230d..f0a26deb 100644 --- a/src/MenuItem.tsx +++ b/src/MenuItem.tsx @@ -2,10 +2,9 @@ import { clsx } from 'clsx'; import Overflow from '@rc-component/overflow'; /* eslint-disable no-restricted-imports */ import KeyCode from '@rc-component/util/lib/KeyCode'; - -import { omit } from '@rc-component/util'; +/* eslint-disable no-restricted-imports */ import { useComposeRef } from '@rc-component/util/lib/ref'; -import { warning } from '@rc-component/util'; +import { omit, warning } from '@rc-component/util'; import * as React from 'react'; import { useMenuId } from './context/IdContext'; import { MenuContext } from './context/MenuContext'; diff --git a/src/context/MenuContext.tsx b/src/context/MenuContext.tsx index a971b82b..2fe9a1ee 100644 --- a/src/context/MenuContext.tsx +++ b/src/context/MenuContext.tsx @@ -2,6 +2,7 @@ import * as React from 'react'; import type { CSSMotionProps } from '@rc-component/motion'; /* eslint-disable no-restricted-imports */ import useMemo from '@rc-component/util/lib/hooks/useMemo'; +/* eslint-disable no-restricted-imports */ import isEqual from '@rc-component/util/lib/isEqual'; import type { diff --git a/src/hooks/useAccessibility.ts b/src/hooks/useAccessibility.ts index d59e1f80..01aab715 100644 --- a/src/hooks/useAccessibility.ts +++ b/src/hooks/useAccessibility.ts @@ -1,6 +1,8 @@ /* eslint-disable no-restricted-imports */ import { getFocusNodeList } from '@rc-component/util/lib/Dom/focus'; +/* eslint-disable no-restricted-imports */ import KeyCode from '@rc-component/util/lib/KeyCode'; +/* eslint-disable no-restricted-imports */ import raf from '@rc-component/util/lib/raf'; import * as React from 'react'; From cf65009fd5c8c2dac010010e122da685cbd790fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E6=AC=A2?= Date: Thu, 28 May 2026 15:54:05 +0800 Subject: [PATCH 3/4] fix: update eslint-disable comments to use single-line format --- src/Menu.tsx | 4 ++-- src/MenuItem.tsx | 4 ++-- src/SubMenu/PopupTrigger.tsx | 2 +- src/context/MenuContext.tsx | 4 ++-- src/hooks/useAccessibility.ts | 6 +++--- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/Menu.tsx b/src/Menu.tsx index 92f68472..f05ff64e 100644 --- a/src/Menu.tsx +++ b/src/Menu.tsx @@ -2,9 +2,9 @@ import { clsx } from 'clsx'; import type { CSSMotionProps } from '@rc-component/motion'; import Overflow from '@rc-component/overflow'; import { useControlledState, warning } from '@rc-component/util'; -/* eslint-disable no-restricted-imports */ +// eslint-disable-next-line no-restricted-imports import useId from '@rc-component/util/lib/hooks/useId'; -/* eslint-disable no-restricted-imports */ +// eslint-disable-next-line no-restricted-imports import isEqual from '@rc-component/util/lib/isEqual'; import * as React from 'react'; import { useImperativeHandle } from 'react'; diff --git a/src/MenuItem.tsx b/src/MenuItem.tsx index f0a26deb..781635ea 100644 --- a/src/MenuItem.tsx +++ b/src/MenuItem.tsx @@ -1,8 +1,8 @@ import { clsx } from 'clsx'; import Overflow from '@rc-component/overflow'; -/* eslint-disable no-restricted-imports */ +// eslint-disable-next-line no-restricted-imports import KeyCode from '@rc-component/util/lib/KeyCode'; -/* eslint-disable no-restricted-imports */ +// eslint-disable-next-line no-restricted-imports import { useComposeRef } from '@rc-component/util/lib/ref'; import { omit, warning } from '@rc-component/util'; import * as React from 'react'; diff --git a/src/SubMenu/PopupTrigger.tsx b/src/SubMenu/PopupTrigger.tsx index 96347436..d21cc677 100644 --- a/src/SubMenu/PopupTrigger.tsx +++ b/src/SubMenu/PopupTrigger.tsx @@ -1,7 +1,7 @@ import * as React from 'react'; import Trigger from '@rc-component/trigger'; import { clsx } from 'clsx'; -/* eslint-disable no-restricted-imports */ +// eslint-disable-next-line no-restricted-imports import raf from '@rc-component/util/lib/raf'; import type { CSSMotionProps } from '@rc-component/motion'; diff --git a/src/context/MenuContext.tsx b/src/context/MenuContext.tsx index 2fe9a1ee..0e2456a0 100644 --- a/src/context/MenuContext.tsx +++ b/src/context/MenuContext.tsx @@ -1,8 +1,8 @@ import * as React from 'react'; import type { CSSMotionProps } from '@rc-component/motion'; -/* eslint-disable no-restricted-imports */ +// eslint-disable-next-line no-restricted-imports import useMemo from '@rc-component/util/lib/hooks/useMemo'; -/* eslint-disable no-restricted-imports */ +// eslint-disable-next-line no-restricted-imports import isEqual from '@rc-component/util/lib/isEqual'; import type { diff --git a/src/hooks/useAccessibility.ts b/src/hooks/useAccessibility.ts index 01aab715..50be28cc 100644 --- a/src/hooks/useAccessibility.ts +++ b/src/hooks/useAccessibility.ts @@ -1,8 +1,8 @@ -/* eslint-disable no-restricted-imports */ +// eslint-disable-next-line no-restricted-imports import { getFocusNodeList } from '@rc-component/util/lib/Dom/focus'; -/* eslint-disable no-restricted-imports */ +// eslint-disable-next-line no-restricted-imports import KeyCode from '@rc-component/util/lib/KeyCode'; -/* eslint-disable no-restricted-imports */ +// eslint-disable-next-line no-restricted-imports import raf from '@rc-component/util/lib/raf'; import * as React from 'react'; From 47bc3322d865971e6094dcc6dff1e80e2005c1e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E6=AC=A2?= Date: Thu, 28 May 2026 16:45:43 +0800 Subject: [PATCH 4/4] fix: update @rc-component/util to version 1.11.1 and consolidate imports across multiple files --- package.json | 2 +- src/Menu.tsx | 6 +----- src/MenuItem.tsx | 6 +----- src/SubMenu/PopupTrigger.tsx | 4 +--- src/context/MenuContext.tsx | 6 +----- src/hooks/useAccessibility.ts | 8 +------- tests/Focus.spec.tsx | 2 +- tests/Keyboard.spec.tsx | 3 +-- tests/Menu.spec.tsx | 4 +--- tests/MenuItem.spec.tsx | 2 +- tests/Responsive.spec.tsx | 3 +-- tests/SubMenu.spec.tsx | 2 +- 12 files changed, 12 insertions(+), 36 deletions(-) diff --git a/package.json b/package.json index 6197fd25..5aabe695 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "@rc-component/motion": "^1.1.4", "@rc-component/overflow": "^1.0.0", "@rc-component/trigger": "^3.0.0", - "@rc-component/util": "^1.3.0", + "@rc-component/util": "^1.11.1", "clsx": "^2.1.1" }, "devDependencies": { diff --git a/src/Menu.tsx b/src/Menu.tsx index f05ff64e..8c701ba4 100644 --- a/src/Menu.tsx +++ b/src/Menu.tsx @@ -1,11 +1,7 @@ import { clsx } from 'clsx'; import type { CSSMotionProps } from '@rc-component/motion'; import Overflow from '@rc-component/overflow'; -import { useControlledState, warning } from '@rc-component/util'; -// eslint-disable-next-line no-restricted-imports -import useId from '@rc-component/util/lib/hooks/useId'; -// eslint-disable-next-line no-restricted-imports -import isEqual from '@rc-component/util/lib/isEqual'; +import { useControlledState, warning, useId, isEqual } from '@rc-component/util'; import * as React from 'react'; import { useImperativeHandle } from 'react'; import { flushSync } from 'react-dom'; diff --git a/src/MenuItem.tsx b/src/MenuItem.tsx index 781635ea..7c0e7da4 100644 --- a/src/MenuItem.tsx +++ b/src/MenuItem.tsx @@ -1,10 +1,6 @@ import { clsx } from 'clsx'; import Overflow from '@rc-component/overflow'; -// eslint-disable-next-line no-restricted-imports -import KeyCode from '@rc-component/util/lib/KeyCode'; -// eslint-disable-next-line no-restricted-imports -import { useComposeRef } from '@rc-component/util/lib/ref'; -import { omit, warning } from '@rc-component/util'; +import { omit, warning, KeyCode, useComposeRef } from '@rc-component/util'; import * as React from 'react'; import { useMenuId } from './context/IdContext'; import { MenuContext } from './context/MenuContext'; diff --git a/src/SubMenu/PopupTrigger.tsx b/src/SubMenu/PopupTrigger.tsx index d21cc677..0cbea7f8 100644 --- a/src/SubMenu/PopupTrigger.tsx +++ b/src/SubMenu/PopupTrigger.tsx @@ -1,9 +1,7 @@ import * as React from 'react'; import Trigger from '@rc-component/trigger'; import { clsx } from 'clsx'; -// eslint-disable-next-line no-restricted-imports -import raf from '@rc-component/util/lib/raf'; - +import { raf } from '@rc-component/util'; import type { CSSMotionProps } from '@rc-component/motion'; import { MenuContext } from '../context/MenuContext'; import { placements, placementsRtl } from '../placements'; diff --git a/src/context/MenuContext.tsx b/src/context/MenuContext.tsx index 0e2456a0..d230042c 100644 --- a/src/context/MenuContext.tsx +++ b/src/context/MenuContext.tsx @@ -1,10 +1,6 @@ import * as React from 'react'; import type { CSSMotionProps } from '@rc-component/motion'; -// eslint-disable-next-line no-restricted-imports -import useMemo from '@rc-component/util/lib/hooks/useMemo'; -// eslint-disable-next-line no-restricted-imports -import isEqual from '@rc-component/util/lib/isEqual'; - +import { useMemo, isEqual } from '@rc-component/util'; import type { BuiltinPlacements, MenuClickEventHandler, diff --git a/src/hooks/useAccessibility.ts b/src/hooks/useAccessibility.ts index 50be28cc..12ca3372 100644 --- a/src/hooks/useAccessibility.ts +++ b/src/hooks/useAccessibility.ts @@ -1,10 +1,4 @@ -// eslint-disable-next-line no-restricted-imports -import { getFocusNodeList } from '@rc-component/util/lib/Dom/focus'; -// eslint-disable-next-line no-restricted-imports -import KeyCode from '@rc-component/util/lib/KeyCode'; -// eslint-disable-next-line no-restricted-imports -import raf from '@rc-component/util/lib/raf'; - +import { KeyCode, getFocusNodeList, raf } from '@rc-component/util'; import * as React from 'react'; import { getMenuId } from '../context/IdContext'; import type { MenuMode } from '../interface'; diff --git a/tests/Focus.spec.tsx b/tests/Focus.spec.tsx index f4ac1bec..3d90507f 100644 --- a/tests/Focus.spec.tsx +++ b/tests/Focus.spec.tsx @@ -1,6 +1,6 @@ /* eslint-disable no-undef */ import { act, fireEvent, render } from '@testing-library/react'; -import { spyElementPrototypes } from '@rc-component/util/lib/test/domHook'; +import { spyElementPrototypes } from '@rc-component/util'; import React from 'react'; import Menu, { MenuItem, MenuItemGroup, MenuRef, SubMenu } from '../src'; diff --git a/tests/Keyboard.spec.tsx b/tests/Keyboard.spec.tsx index c7ac7c00..e1b89ef4 100644 --- a/tests/Keyboard.spec.tsx +++ b/tests/Keyboard.spec.tsx @@ -1,7 +1,6 @@ /* eslint-disable no-undef, react/no-multi-comp, react/jsx-curly-brace-presence, max-classes-per-file */ import { fireEvent, render } from '@testing-library/react'; -import KeyCode from '@rc-component/util/lib/KeyCode'; -import { spyElementPrototypes } from '@rc-component/util/lib/test/domHook'; +import { KeyCode, spyElementPrototypes } from '@rc-component/util'; import React from 'react'; import { act } from 'react-dom/test-utils'; import Menu, { MenuItem, SubMenu } from '../src'; diff --git a/tests/Menu.spec.tsx b/tests/Menu.spec.tsx index 3ee9bf37..3f629082 100644 --- a/tests/Menu.spec.tsx +++ b/tests/Menu.spec.tsx @@ -1,14 +1,12 @@ /* eslint-disable no-undef, react/no-multi-comp, react/jsx-curly-brace-presence, max-classes-per-file */ import type { MenuMode } from '@/interface'; import { fireEvent, render } from '@testing-library/react'; -import KeyCode from '@rc-component/util/lib/KeyCode'; -import { resetWarned } from '@rc-component/util/lib/warning'; +import { KeyCode, resetWarned, spyElementPrototypes } from '@rc-component/util'; import React from 'react'; import { act } from 'react-dom/test-utils'; import type { MenuRef } from '../src'; import Menu, { Divider, MenuItem, MenuItemGroup, SubMenu } from '../src'; import { isActive, last } from './util'; -import { spyElementPrototypes } from '@rc-component/util/lib/test/domHook'; jest.mock('@rc-component/trigger', () => { const react = require('react'); diff --git a/tests/MenuItem.spec.tsx b/tests/MenuItem.spec.tsx index 7e7e2177..2e1d0838 100644 --- a/tests/MenuItem.spec.tsx +++ b/tests/MenuItem.spec.tsx @@ -1,6 +1,6 @@ /* eslint-disable no-undef */ import { fireEvent, render } from '@testing-library/react'; -import KeyCode from '@rc-component/util/lib/KeyCode'; +import { KeyCode } from '@rc-component/util'; import React from 'react'; import Menu, { MenuItem, MenuItemGroup, SubMenu } from '../src'; diff --git a/tests/Responsive.spec.tsx b/tests/Responsive.spec.tsx index f8f454b2..96f2f9a7 100644 --- a/tests/Responsive.spec.tsx +++ b/tests/Responsive.spec.tsx @@ -1,8 +1,7 @@ /* eslint-disable no-undef, react/no-multi-comp, react/jsx-curly-brace-presence, max-classes-per-file */ import { act, fireEvent, render } from '@testing-library/react'; import ResizeObserver from '@rc-component/resize-observer'; -import KeyCode from '@rc-component/util/lib/KeyCode'; -import { spyElementPrototype } from '@rc-component/util/lib/test/domHook'; +import { KeyCode, spyElementPrototype } from '@rc-component/util'; import React from 'react'; import Menu, { MenuItem, SubMenu } from '../src'; import { OVERFLOW_KEY } from '../src/hooks/useKeyRecords'; diff --git a/tests/SubMenu.spec.tsx b/tests/SubMenu.spec.tsx index 6220117e..8f75f620 100644 --- a/tests/SubMenu.spec.tsx +++ b/tests/SubMenu.spec.tsx @@ -1,6 +1,6 @@ /* eslint-disable no-undef */ import { act, fireEvent, render } from '@testing-library/react'; -import { resetWarned } from '@rc-component/util/lib/warning'; +import { resetWarned } from '@rc-component/util'; import React from 'react'; import Menu, { MenuItem, SubMenu } from '../src'; import { isActive, last } from './util';