From 2503843d6e84df360502f74c994add4afd0eaccc Mon Sep 17 00:00:00 2001 From: Johan Persson Date: Tue, 24 Feb 2026 17:44:33 +0100 Subject: [PATCH] Migrate Popover component from useStyles to useDefinition Signed-off-by: Johan Persson --- packages/ui/report.api.md | 22 ++++++++++++++---- .../ui/src/components/Popover/Popover.tsx | 23 +++++-------------- .../ui/src/components/Popover/definition.ts | 14 ++++++++--- packages/ui/src/components/Popover/index.ts | 2 +- packages/ui/src/components/Popover/types.ts | 21 +++++++++++------ .../ui/src/components/Tooltip/Tooltip.tsx | 2 +- 6 files changed, 51 insertions(+), 33 deletions(-) diff --git a/packages/ui/report.api.md b/packages/ui/report.api.md index 2b19c0423e..9b48c8cff6 100644 --- a/packages/ui/report.api.md +++ b/packages/ui/report.api.md @@ -1647,18 +1647,32 @@ export const Popover: ForwardRefExoticComponent< // @public export const PopoverDefinition: { + readonly styles: { + readonly [key: string]: string; + }; readonly classNames: { readonly root: 'bui-Popover'; readonly arrow: 'bui-PopoverArrow'; readonly content: 'bui-PopoverContent'; }; + readonly propDefs: { + readonly children: {}; + readonly hideArrow: {}; + readonly className: {}; + }; +}; + +// @public (undocumented) +export type PopoverOwnProps = { + children: React.ReactNode; + hideArrow?: boolean; + className?: string; }; // @public -export interface PopoverProps extends Omit { - children: React.ReactNode; - hideArrow?: boolean; -} +export interface PopoverProps + extends Omit, + PopoverOwnProps {} // @public export type ProviderBg = 'neutral' | 'danger' | 'warning' | 'success'; diff --git a/packages/ui/src/components/Popover/Popover.tsx b/packages/ui/src/components/Popover/Popover.tsx index ed13328a94..4b1f0e8d59 100644 --- a/packages/ui/src/components/Popover/Popover.tsx +++ b/packages/ui/src/components/Popover/Popover.tsx @@ -17,11 +17,9 @@ import { forwardRef } from 'react'; import { useId } from 'react-aria'; import { OverlayArrow, Popover as AriaPopover } from 'react-aria-components'; -import clsx from 'clsx'; import { PopoverProps } from './types'; -import { useStyles } from '../../hooks/useStyles'; +import { useDefinition } from '../../hooks/useDefinition'; import { PopoverDefinition } from './definition'; -import styles from './Popover.module.css'; import { Box } from '../Box'; import { BgReset } from '../../hooks/useBg'; @@ -62,24 +60,18 @@ import { BgReset } from '../../hooks/useBg'; */ export const Popover = forwardRef( (props, ref) => { - const { classNames, cleanedProps } = useStyles(PopoverDefinition, props); - const { className, children, hideArrow, ...rest } = cleanedProps; + const { ownProps, restProps } = useDefinition(PopoverDefinition, props); + const { classes, children, hideArrow } = ownProps; const svgPathId = useId(); return ( - + {({ trigger }) => ( <> {!hideArrow && trigger !== 'MenuTrigger' && trigger !== 'SubmenuTrigger' && ( - + ( )} - + {children} diff --git a/packages/ui/src/components/Popover/definition.ts b/packages/ui/src/components/Popover/definition.ts index 1361d4bbcc..dd28456091 100644 --- a/packages/ui/src/components/Popover/definition.ts +++ b/packages/ui/src/components/Popover/definition.ts @@ -14,16 +14,24 @@ * limitations under the License. */ -import type { ComponentDefinition } from '../../types'; +import { defineComponent } from '../../hooks/useDefinition'; +import type { PopoverOwnProps } from './types'; +import styles from './Popover.module.css'; /** * Component definition for Popover * @public */ -export const PopoverDefinition = { +export const PopoverDefinition = defineComponent()({ + styles, classNames: { root: 'bui-Popover', arrow: 'bui-PopoverArrow', content: 'bui-PopoverContent', }, -} as const satisfies ComponentDefinition; + propDefs: { + children: {}, + hideArrow: {}, + className: {}, + }, +}); diff --git a/packages/ui/src/components/Popover/index.ts b/packages/ui/src/components/Popover/index.ts index e97be21931..9221769c42 100644 --- a/packages/ui/src/components/Popover/index.ts +++ b/packages/ui/src/components/Popover/index.ts @@ -15,5 +15,5 @@ */ export { Popover } from './Popover'; -export type { PopoverProps } from './types'; +export type { PopoverOwnProps, PopoverProps } from './types'; export { PopoverDefinition } from './definition'; diff --git a/packages/ui/src/components/Popover/types.ts b/packages/ui/src/components/Popover/types.ts index fd04eef321..24c9b187cb 100644 --- a/packages/ui/src/components/Popover/types.ts +++ b/packages/ui/src/components/Popover/types.ts @@ -16,12 +16,8 @@ import { PopoverProps as AriaPopoverProps } from 'react-aria-components'; -/** - * Properties for {@link Popover} - * - * @public - */ -export interface PopoverProps extends Omit { +/** @public */ +export type PopoverOwnProps = { /** * The content to display inside the popover. * Content is automatically wrapped with padding and scroll behavior. @@ -35,4 +31,15 @@ export interface PopoverProps extends Omit { * @defaultValue false */ hideArrow?: boolean; -} + + className?: string; +}; + +/** + * Properties for {@link Popover} + * + * @public + */ +export interface PopoverProps + extends Omit, + PopoverOwnProps {} diff --git a/packages/ui/src/components/Tooltip/Tooltip.tsx b/packages/ui/src/components/Tooltip/Tooltip.tsx index 6793a698f3..1d88fd0b41 100644 --- a/packages/ui/src/components/Tooltip/Tooltip.tsx +++ b/packages/ui/src/components/Tooltip/Tooltip.tsx @@ -61,7 +61,7 @@ export const Tooltip = forwardRef( - + {children}