From 437ae1943d983ec4da7616eff5ff612256be6a94 Mon Sep 17 00:00:00 2001 From: Johan Persson Date: Wed, 25 Feb 2026 18:06:00 +0100 Subject: [PATCH] Migrate HeaderPage component from useStyles to useDefinition Signed-off-by: Johan Persson --- packages/ui/report.api.md | 15 ++++++++- .../src/components/HeaderPage/HeaderPage.tsx | 32 +++++-------------- .../src/components/HeaderPage/definition.ts | 16 ++++++++-- .../ui/src/components/HeaderPage/index.tsx | 6 +++- .../ui/src/components/HeaderPage/types.ts | 11 +++++-- 5 files changed, 49 insertions(+), 31 deletions(-) diff --git a/packages/ui/report.api.md b/packages/ui/report.api.md index 4fe0181e1a..8d2347e341 100644 --- a/packages/ui/report.api.md +++ b/packages/ui/report.api.md @@ -1321,6 +1321,9 @@ export interface HeaderPageBreadcrumb { // @public export const HeaderPageDefinition: { + readonly styles: { + readonly [key: string]: string; + }; readonly classNames: { readonly root: 'bui-HeaderPage'; readonly content: 'bui-HeaderPageContent'; @@ -1328,10 +1331,17 @@ export const HeaderPageDefinition: { readonly tabsWrapper: 'bui-HeaderPageTabsWrapper'; readonly controls: 'bui-HeaderPageControls'; }; + readonly propDefs: { + readonly title: {}; + readonly customActions: {}; + readonly tabs: {}; + readonly breadcrumbs: {}; + readonly className: {}; + }; }; // @public -export interface HeaderPageProps { +export interface HeaderPageOwnProps { // (undocumented) breadcrumbs?: HeaderPageBreadcrumb[]; // (undocumented) @@ -1344,6 +1354,9 @@ export interface HeaderPageProps { title?: string; } +// @public +export interface HeaderPageProps extends HeaderPageOwnProps {} + // @public export interface HeaderTab { // (undocumented) diff --git a/packages/ui/src/components/HeaderPage/HeaderPage.tsx b/packages/ui/src/components/HeaderPage/HeaderPage.tsx index 8b1ef31874..d1cd146567 100644 --- a/packages/ui/src/components/HeaderPage/HeaderPage.tsx +++ b/packages/ui/src/components/HeaderPage/HeaderPage.tsx @@ -18,13 +18,11 @@ import type { HeaderPageProps } from './types'; import { Text } from '../Text'; import { RiArrowRightSLine } from '@remixicon/react'; import { Tabs, TabList, Tab } from '../Tabs'; -import { useStyles } from '../../hooks/useStyles'; +import { useDefinition } from '../../hooks/useDefinition'; import { HeaderPageDefinition } from './definition'; import { Container } from '../Container'; import { Link } from '../Link'; import { Fragment } from 'react/jsx-runtime'; -import styles from './HeaderPage.module.css'; -import clsx from 'clsx'; /** * A component that renders a header page. @@ -32,20 +30,13 @@ import clsx from 'clsx'; * @public */ export const HeaderPage = (props: HeaderPageProps) => { - const { classNames, cleanedProps } = useStyles(HeaderPageDefinition, props); - const { className, title, tabs, customActions, breadcrumbs } = cleanedProps; + const { ownProps } = useDefinition(HeaderPageDefinition, props); + const { classes, title, tabs, customActions, breadcrumbs } = ownProps; return ( - -
-
+ +
+
{breadcrumbs && breadcrumbs.map(breadcrumb => ( @@ -67,17 +58,10 @@ export const HeaderPage = (props: HeaderPageProps) => { {title}
-
- {customActions} -
+
{customActions}
{tabs && ( -
+
{tabs.map(tab => ( diff --git a/packages/ui/src/components/HeaderPage/definition.ts b/packages/ui/src/components/HeaderPage/definition.ts index be93aaae6a..16fc5c9c67 100644 --- a/packages/ui/src/components/HeaderPage/definition.ts +++ b/packages/ui/src/components/HeaderPage/definition.ts @@ -14,13 +14,16 @@ * limitations under the License. */ -import type { ComponentDefinition } from '../../types'; +import { defineComponent } from '../../hooks/useDefinition'; +import type { HeaderPageOwnProps } from './types'; +import styles from './HeaderPage.module.css'; /** * Component definition for HeaderPage * @public */ -export const HeaderPageDefinition = { +export const HeaderPageDefinition = defineComponent()({ + styles, classNames: { root: 'bui-HeaderPage', content: 'bui-HeaderPageContent', @@ -28,4 +31,11 @@ export const HeaderPageDefinition = { tabsWrapper: 'bui-HeaderPageTabsWrapper', controls: 'bui-HeaderPageControls', }, -} as const satisfies ComponentDefinition; + propDefs: { + title: {}, + customActions: {}, + tabs: {}, + breadcrumbs: {}, + className: {}, + }, +}); diff --git a/packages/ui/src/components/HeaderPage/index.tsx b/packages/ui/src/components/HeaderPage/index.tsx index 7b277149f1..781a061a83 100644 --- a/packages/ui/src/components/HeaderPage/index.tsx +++ b/packages/ui/src/components/HeaderPage/index.tsx @@ -16,4 +16,8 @@ export { HeaderPage } from './HeaderPage'; export { HeaderPageDefinition } from './definition'; -export type { HeaderPageProps, HeaderPageBreadcrumb } from './types'; +export type { + HeaderPageOwnProps, + HeaderPageProps, + HeaderPageBreadcrumb, +} from './types'; diff --git a/packages/ui/src/components/HeaderPage/types.ts b/packages/ui/src/components/HeaderPage/types.ts index 72d365968e..b603cb7084 100644 --- a/packages/ui/src/components/HeaderPage/types.ts +++ b/packages/ui/src/components/HeaderPage/types.ts @@ -17,11 +17,11 @@ import type { HeaderTab } from '../PluginHeader/types'; /** - * Props for the main HeaderPage component. + * Own props for the HeaderPage component. * * @public */ -export interface HeaderPageProps { +export interface HeaderPageOwnProps { title?: string; customActions?: React.ReactNode; tabs?: HeaderTab[]; @@ -29,6 +29,13 @@ export interface HeaderPageProps { className?: string; } +/** + * Props for the main HeaderPage component. + * + * @public + */ +export interface HeaderPageProps extends HeaderPageOwnProps {} + /** * Represents a breadcrumb item in the header. *