From 7441d00fef39cdd9a72fbc98c8d12643e79a6d86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E7=86=B1?= Date: Fri, 16 May 2025 12:15:03 +0800 Subject: [PATCH] feat(design): add HoverCard component (#5211) Co-authored-by: GitHub Actions --- .../dark-mode-ci-chromium-linux.png | Bin 54721 -> 54732 bytes package.json | 2 +- packages/design/package.json | 1 + .../components/color-picker/ColorInput.tsx | 2 +- .../src/components/dropdown/Dropdown.tsx | 3 +- .../components/dropdown/PopoverPrimitive.tsx | 2 +- .../design/src/components/dropdown/index.ts | 17 ----- .../hover-card/HoverCard.stories.tsx | 70 ++++++++++++++++++ .../src/components/hover-card/HoverCard.tsx | 68 +++++++++++++++++ .../hover-card/HoverCardPrimitive.tsx | 57 ++++++++++++++ packages/design/src/index.ts | 3 +- .../ui/src/components/font-size/FontSize.tsx | 4 +- .../ui/src/views/components/ribbon/Ribbon.tsx | 10 ++- .../views/components/ribbon/ToolbarButton.tsx | 2 +- pnpm-lock.yaml | 62 ++++++++++++---- 15 files changed, 260 insertions(+), 43 deletions(-) delete mode 100644 packages/design/src/components/dropdown/index.ts create mode 100644 packages/design/src/components/hover-card/HoverCard.stories.tsx create mode 100644 packages/design/src/components/hover-card/HoverCard.tsx create mode 100644 packages/design/src/components/hover-card/HoverCardPrimitive.tsx diff --git a/e2e/visual-comparison/sheets/sheets-visual-comparison.spec.ts-snapshots/dark-mode-ci-chromium-linux.png b/e2e/visual-comparison/sheets/sheets-visual-comparison.spec.ts-snapshots/dark-mode-ci-chromium-linux.png index ce7337ca8073a37ef7fbe9b4bac712d748a00540..2114ff10bd19c2058824fd26b485f6d2f04a42d6 100644 GIT binary patch delta 18257 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 { +export interface IDropdownProps extends ComponentProps { children: ReactNode; overlay: ReactNode; disabled?: boolean; diff --git a/packages/design/src/components/dropdown/PopoverPrimitive.tsx b/packages/design/src/components/dropdown/PopoverPrimitive.tsx index da2f77275d..56a21e0b11 100644 --- a/packages/design/src/components/dropdown/PopoverPrimitive.tsx +++ b/packages/design/src/components/dropdown/PopoverPrimitive.tsx @@ -47,7 +47,7 @@ function PopoverContent({ ` univer-z-[1080] univer-max-h-[var(--radix-popper-available-height)] univer-overflow-y-auto univer-rounded-md univer-bg-white univer-text-gray-900 univer-shadow-md univer-outline-hidden - dark:!univer-bg-gray-900 dark:!univer-text-white + dark:!univer-bg-gray-900 dark:!univer-text-white dark:focus-visible:univer-border-gray-600 data-[side=bottom]:univer-slide-in-from-top-2 data-[side=left]:univer-slide-in-from-right-2 data-[side=right]:univer-slide-in-from-left-2 diff --git a/packages/design/src/components/dropdown/index.ts b/packages/design/src/components/dropdown/index.ts deleted file mode 100644 index 4889b85bb6..0000000000 --- a/packages/design/src/components/dropdown/index.ts +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Copyright 2023-present DreamNum Co., Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -export { Dropdown, type IDropdownProps } from './Dropdown'; diff --git a/packages/design/src/components/hover-card/HoverCard.stories.tsx b/packages/design/src/components/hover-card/HoverCard.stories.tsx new file mode 100644 index 0000000000..c6b3b5054d --- /dev/null +++ b/packages/design/src/components/hover-card/HoverCard.stories.tsx @@ -0,0 +1,70 @@ +/** + * Copyright 2023-present DreamNum Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import type { Meta } from '@storybook/react'; + +import { borderClassName } from '../../helper/class-utilities'; +import { clsx } from '../../helper/clsx'; +import { HoverCard } from './HoverCard'; + +const meta: Meta = { + title: 'Components / HoverCard', + component: HoverCard, + parameters: { + layout: 'centered', + }, + tags: ['autodocs'], +}; + +export default meta; + +export const Playground = { + render() { + return ( +
+ + Hello Univer + +
Nested Content
+
Nested Content
+
Nested Content
+
Nested Content
+
+ )} + > + Nested Hover Card + + + )} + > + + Click me + + + + ); + }, +}; diff --git a/packages/design/src/components/hover-card/HoverCard.tsx b/packages/design/src/components/hover-card/HoverCard.tsx new file mode 100644 index 0000000000..18e69c04c9 --- /dev/null +++ b/packages/design/src/components/hover-card/HoverCard.tsx @@ -0,0 +1,68 @@ +/** + * Copyright 2023-present DreamNum Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import type { ComponentProps, ReactNode } from 'react'; +import { useState } from 'react'; +import { HoverCardContent, HoverCardPrimitive, HoverCardTrigger } from './HoverCardPrimitive'; + +export interface IHoverCardProps extends ComponentProps { + children: ReactNode; + overlay: ReactNode; + disabled?: boolean; + /** + * Delay in milliseconds before the dropdown opens. + * @default 200 + */ + openDelay?: number; + open?: boolean; + onOpenChange?: (open: boolean) => void; +} + +export function HoverCard(props: IHoverCardProps) { + const { + children, + overlay, + disabled, + openDelay = 200, + open: controlledOpen, + onOpenChange: controlledOnOpenChange, + ...restProps + } = props; + + const [uncontrolledOpen, setUncontrolledOpen] = useState(false); + + const isControlled = controlledOpen !== undefined; + const open = isControlled ? controlledOpen : uncontrolledOpen; + + function handleChangeOpen(newOpen: boolean) { + if (disabled) return; + + if (!isControlled) { + setUncontrolledOpen(newOpen); + } + + controlledOnOpenChange?.(newOpen); + } + + return ( + + {children} + + {overlay} + + + ); +} diff --git a/packages/design/src/components/hover-card/HoverCardPrimitive.tsx b/packages/design/src/components/hover-card/HoverCardPrimitive.tsx new file mode 100644 index 0000000000..e556bd96e5 --- /dev/null +++ b/packages/design/src/components/hover-card/HoverCardPrimitive.tsx @@ -0,0 +1,57 @@ +/** + * Copyright 2023-present DreamNum Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import type { ComponentPropsWithoutRef, ElementRef } from 'react'; +import { Content, Root, Trigger } from '@radix-ui/react-hover-card'; +import { forwardRef } from 'react'; +import { borderClassName } from '../../helper/class-utilities'; +import { clsx } from '../../helper/clsx'; + +const HoverCardPrimitive = Root; + +const HoverCardTrigger = Trigger; + +const HoverCardContent = forwardRef< + ElementRef, + ComponentPropsWithoutRef +>(({ className, align = 'center', sideOffset = 4, ...props }, ref) => ( + +)); + +HoverCardContent.displayName = Content.displayName; + +export { HoverCardContent, HoverCardPrimitive, HoverCardTrigger }; diff --git a/packages/design/src/index.ts b/packages/design/src/index.ts index e22cf5f23b..391bb7d075 100644 --- a/packages/design/src/index.ts +++ b/packages/design/src/index.ts @@ -26,7 +26,8 @@ export { ColorPicker, type IColorPickerProps } from './components/color-picker/C export { ConfigContext, ConfigProvider, type IConfigProviderProps } from './components/config-provider/ConfigProvider'; export { Confirm, type IConfirmProps } from './components/confirm/Confirm'; export { Dialog, type IDialogProps } from './components/dialog/Dialog'; -export { Dropdown, type IDropdownProps } from './components/dropdown'; +export { Dropdown, type IDropdownProps } from './components/dropdown/Dropdown'; +export { HoverCard, type IHoverCardProps } from './components/hover-card/HoverCard'; export { type IInputProps, Input } from './components/input/Input'; export { type IInputNumberProps, InputNumber } from './components/input-number/InputNumber'; export { type IMessageProps, message, Messager, MessageType, removeMessage } from './components/message/Message'; diff --git a/packages/ui/src/components/font-size/FontSize.tsx b/packages/ui/src/components/font-size/FontSize.tsx index 8636657f93..12714e312d 100644 --- a/packages/ui/src/components/font-size/FontSize.tsx +++ b/packages/ui/src/components/font-size/FontSize.tsx @@ -46,8 +46,8 @@ export const FontSize = (props: IFontSizeProps) => { className={` univer-block univer-h-6 univer-border-none univer-bg-transparent univer-leading-6 [&_input:focus]:!univer-ring-0 - [&_input]:univer-h-6 [&_input]:univer-w-7 [&_input]:univer-border-none [&_input]:univer-bg-transparent - [&_input]:univer-p-0 [&_input]:univer-text-sm + [&_input]:univer-h-6 [&_input]:univer-w-7 [&_input]:univer-border-none + [&_input]:!univer-bg-transparent [&_input]:univer-p-0 [&_input]:univer-text-sm `} value={_value} controls={false} diff --git a/packages/ui/src/views/components/ribbon/Ribbon.tsx b/packages/ui/src/views/components/ribbon/Ribbon.tsx index 205af1d2b4..eb82d10829 100644 --- a/packages/ui/src/views/components/ribbon/Ribbon.tsx +++ b/packages/ui/src/views/components/ribbon/Ribbon.tsx @@ -18,7 +18,7 @@ import type { ComponentType } from 'react'; import type { Observable } from 'rxjs'; import type { IMenuSchema } from '../../../services/menu/menu-manager.service'; import { LocaleService } from '@univerjs/core'; -import { borderBottomClassName, borderClassName, clsx, divideXClassName, Dropdown } from '@univerjs/design'; +import { borderBottomClassName, borderClassName, clsx, divideXClassName, Dropdown, HoverCard } from '@univerjs/design'; import { DatabaseSingle, EyeSingle, FunctionSingle, HomeSingle, InsertSingle, MoreDownSingle, MoreFunctionSingle } from '@univerjs/icons'; import { Fragment, useCallback, useEffect, useMemo, useRef, useState } from 'react'; import { combineLatest } from 'rxjs'; @@ -253,8 +253,8 @@ export function Ribbon(props: IRibbonProps) { */} {ribbon.length > 1 && ( - - + )}
@@ -336,9 +336,11 @@ export function Ribbon(props: IRibbonProps) { ))} + {/* More functions dropdown */} {collapsedIds.length > 0 && (
=16'} - '@es-joy/jsdoccomment@0.50.0': resolution: {integrity: sha512-+zZymuVLH6zVwXPtCAtC+bDymxmEwEqDftdAK+f407IF1bnX49anIxvBhCA1AqUIfD6egj1jM1vUnSuijjNyYg==} engines: {node: '>=18'} + '@es-joy/jsdoccomment@0.50.1': + resolution: {integrity: sha512-fas3qe1hw38JJgU/0m5sDpcrbZGysBeZcMwW5Ws9brYxY64MJyWLXRZCj18keTycT1LFTrFXdSNMS+GRVaU6Hw==} + engines: {node: '>=18'} + '@esbuild/aix-ppc64@0.25.4': resolution: {integrity: sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==} engines: {node: '>=18'} @@ -4727,6 +4730,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-hover-card@1.1.13': + resolution: {integrity: sha512-Wtjvx0d/6Bgd/jAYS1mW6IPSUQ25y0hkUSOS1z5/4+U8+DJPwKroqJlM/AlVFl3LywGoruiPmcvB9Aks9mSOQw==} + peerDependencies: + '@types/react': ^19.1.3 + '@types/react-dom': ^19.1.5 + react: ^19.1.0 + react-dom: ^19.1.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-id@1.1.1': resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==} peerDependencies: @@ -7397,8 +7413,8 @@ packages: peerDependencies: eslint: ^8.57.0 || ^9.0.0 - eslint-plugin-jsdoc@50.6.14: - resolution: {integrity: sha512-JUudvooQbUx3iB8n/MzXMOV/VtaXq7xL4CeXhYryinr8osck7nV6fE2/xUXTiH3epPXcvq6TE3HQfGQuRHErTQ==} + eslint-plugin-jsdoc@50.6.17: + resolution: {integrity: sha512-hq+VQylhd12l8qjexyriDsejZhqiP33WgMTy2AmaGZ9+MrMWVqPECsM87GPxgHfQn0zw+YTuhqjUfk1f+q67aQ==} engines: {node: '>=18'} peerDependencies: eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 @@ -11344,7 +11360,7 @@ snapshots: eslint-plugin-antfu: 3.1.1(eslint@9.26.0(jiti@2.4.2)) eslint-plugin-command: 3.2.0(eslint@9.26.0(jiti@2.4.2)) eslint-plugin-import-x: 4.11.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) - eslint-plugin-jsdoc: 50.6.14(eslint@9.26.0(jiti@2.4.2)) + eslint-plugin-jsdoc: 50.6.17(eslint@9.26.0(jiti@2.4.2)) eslint-plugin-jsonc: 2.20.0(eslint@9.26.0(jiti@2.4.2)) eslint-plugin-n: 17.18.0(eslint@9.26.0(jiti@2.4.2)) eslint-plugin-no-only-tests: 3.3.0 @@ -11918,13 +11934,16 @@ snapshots: tslib: 2.8.1 optional: true - '@es-joy/jsdoccomment@0.49.0': + '@es-joy/jsdoccomment@0.50.0': dependencies: + '@types/eslint': 9.6.1 + '@types/estree': 1.0.7 + '@typescript-eslint/types': 8.32.0 comment-parser: 1.4.1 esquery: 1.6.0 jsdoc-type-pratt-parser: 4.1.0 - '@es-joy/jsdoccomment@0.50.0': + '@es-joy/jsdoccomment@0.50.1': dependencies: '@types/eslint': 9.6.1 '@types/estree': 1.0.7 @@ -12632,6 +12651,23 @@ snapshots: '@types/react': 19.1.3 '@types/react-dom': 19.1.5(@types/react@19.1.3) + '@radix-ui/react-hover-card@1.1.13(@types/react-dom@19.1.5(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.9(@types/react-dom@19.1.5(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-popper': 1.2.6(@types/react-dom@19.1.5(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-portal': 1.1.8(@types/react-dom@19.1.5(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.5(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.3)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.3 + '@types/react-dom': 19.1.5(@types/react@19.1.3) + '@radix-ui/react-id@1.1.1(@types/react@19.1.3)(react@19.1.0)': dependencies: '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.3)(react@19.1.0) @@ -15512,9 +15548,9 @@ snapshots: - supports-color - typescript - eslint-plugin-jsdoc@50.6.14(eslint@9.26.0(jiti@2.4.2)): + eslint-plugin-jsdoc@50.6.17(eslint@9.26.0(jiti@2.4.2)): dependencies: - '@es-joy/jsdoccomment': 0.49.0 + '@es-joy/jsdoccomment': 0.50.1 are-docs-informative: 0.0.2 comment-parser: 1.4.1 debug: 4.4.0