From eeeead2b01ba8686e930a554c84485b5283ac8b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E8=89=B3=E5=85=B5?= Date: Fri, 22 May 2026 09:40:03 +0800 Subject: [PATCH 1/2] fix: avoid rc package deep imports --- package.json | 4 ++-- src/Menu.tsx | 5 +---- src/MenuItem.tsx | 5 +---- src/MenuItemGroup.tsx | 2 +- src/SubMenu/PopupTrigger.tsx | 2 +- src/SubMenu/index.tsx | 2 +- src/context/MenuContext.tsx | 3 +-- src/hooks/useAccessibility.ts | 4 +--- src/hooks/useKeyRecords.ts | 2 +- src/utils/commonUtil.ts | 2 +- src/utils/warnUtil.ts | 2 +- 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 +- 17 files changed, 18 insertions(+), 31 deletions(-) diff --git a/package.json b/package.json index 6197fd25..d4b172df 100644 --- a/package.json +++ b/package.json @@ -47,11 +47,11 @@ "@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": { - "@rc-component/father-plugin": "^2.0.2", + "@rc-component/father-plugin": "^2.2.0", "@rc-component/np": "^1.0.3", "@testing-library/jest-dom": "^6.1.5", "@testing-library/react": "^16.0.0", diff --git a/src/Menu.tsx b/src/Menu.tsx index f8a1b87a..5b84a0c9 100644 --- a/src/Menu.tsx +++ b/src/Menu.tsx @@ -1,10 +1,7 @@ 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 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 { isEqual, useControlledState, useId, 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..7a9a35f3 100644 --- a/src/MenuItem.tsx +++ b/src/MenuItem.tsx @@ -1,9 +1,6 @@ import { clsx } from 'clsx'; import Overflow from '@rc-component/overflow'; -import KeyCode from '@rc-component/util/lib/KeyCode'; -import omit from '@rc-component/util/lib/omit'; -import { useComposeRef } from '@rc-component/util/lib/ref'; -import warning from '@rc-component/util/lib/warning'; +import { KeyCode, omit, useComposeRef, 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..0cbea7f8 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'; -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/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..f6711598 100644 --- a/src/context/MenuContext.tsx +++ b/src/context/MenuContext.tsx @@ -1,7 +1,6 @@ import * as React from 'react'; import type { CSSMotionProps } from '@rc-component/motion'; -import useMemo from '@rc-component/util/lib/hooks/useMemo'; -import isEqual from '@rc-component/util/lib/isEqual'; +import { isEqual, useMemo } from '@rc-component/util'; import type { BuiltinPlacements, MenuClickEventHandler, diff --git a/src/hooks/useAccessibility.ts b/src/hooks/useAccessibility.ts index 695f2860..58b6dde5 100644 --- a/src/hooks/useAccessibility.ts +++ b/src/hooks/useAccessibility.ts @@ -1,6 +1,4 @@ -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 { getFocusNodeList, KeyCode, raf } from '@rc-component/util'; 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. 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'; From 99f8f13be1fd0d4d4002a35b02d2a9d443352884 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E8=89=B3=E5=85=B5?= Date: Fri, 22 May 2026 14:10:03 +0800 Subject: [PATCH 2/2] fix: expose menu item types --- src/index.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/index.ts b/src/index.ts index 5ed77059..f86eb064 100644 --- a/src/index.ts +++ b/src/index.ts @@ -8,7 +8,13 @@ import type { MenuProps } from './Menu'; import type { MenuItemProps } from './MenuItem'; import type { SubMenuProps } from './SubMenu'; import type { MenuItemGroupProps } from './MenuItemGroup'; -import type { MenuRef } from './interface'; +import type { + MenuDividerType, + MenuItemGroupType, + MenuItemType, + MenuRef, + SubMenuType, +} from './interface'; export { SubMenu, @@ -26,7 +32,11 @@ export type { SubMenuProps, MenuItemProps, MenuItemGroupProps, + MenuDividerType, + MenuItemGroupType, + MenuItemType, MenuRef, + SubMenuType, }; type MenuType = typeof Menu & {