diff --git a/packages/ui/src/components/ToggleButton/ToggleButton.tsx b/packages/ui/src/components/ToggleButton/ToggleButton.tsx index d783681778..c827b2f88e 100644 --- a/packages/ui/src/components/ToggleButton/ToggleButton.tsx +++ b/packages/ui/src/components/ToggleButton/ToggleButton.tsx @@ -14,33 +14,27 @@ * limitations under the License. */ -import clsx from 'clsx'; import { forwardRef, Ref } from 'react'; import { ToggleButton as AriaToggleButton } from 'react-aria-components'; import type { ToggleButtonProps } from './types'; -import { useStyles } from '../../hooks/useStyles'; +import { useDefinition } from '../../hooks/useDefinition'; import { ToggleButtonDefinition } from './definition'; -import styles from './ToggleButton.module.css'; /** @public */ export const ToggleButton = forwardRef( (props: ToggleButtonProps, ref: Ref) => { - const { classNames, dataAttributes, cleanedProps } = useStyles( + const { ownProps, restProps, dataAttributes } = useDefinition( ToggleButtonDefinition, - { - size: 'small', - ...props, - }, + props, ); - - const { children, className, iconStart, iconEnd, ...rest } = cleanedProps; + const { classes, children, iconStart, iconEnd } = ownProps; return ( {renderProps => { // If children is a function, call it with render props; otherwise use children as-is @@ -48,10 +42,7 @@ export const ToggleButton = forwardRef( typeof children === 'function' ? children(renderProps) : children; return ( - + {iconStart} {renderedChildren} {iconEnd} diff --git a/packages/ui/src/components/ToggleButton/definition.ts b/packages/ui/src/components/ToggleButton/definition.ts index 98c22fef35..5137714417 100644 --- a/packages/ui/src/components/ToggleButton/definition.ts +++ b/packages/ui/src/components/ToggleButton/definition.ts @@ -14,18 +14,25 @@ * limitations under the License. */ -import type { ComponentDefinition } from '../../types'; +import { defineComponent } from '../../hooks/useDefinition'; +import type { ToggleButtonOwnProps } from './types'; +import styles from './ToggleButton.module.css'; /** * Component definition for ToggleButton * @public */ -export const ToggleButtonDefinition = { +export const ToggleButtonDefinition = defineComponent()({ + styles, classNames: { root: 'bui-ToggleButton', content: 'bui-ToggleButtonContent', }, - dataAttributes: { - size: ['small', 'medium'] as const, + propDefs: { + size: { dataAttribute: true, default: 'small' }, + iconStart: {}, + iconEnd: {}, + children: {}, + className: {}, }, -} as const satisfies ComponentDefinition; +}); diff --git a/packages/ui/src/components/ToggleButton/types.ts b/packages/ui/src/components/ToggleButton/types.ts index 2e5c5755f2..ba6569c2a2 100644 --- a/packages/ui/src/components/ToggleButton/types.ts +++ b/packages/ui/src/components/ToggleButton/types.ts @@ -18,13 +18,20 @@ import type { Breakpoint } from '../..'; import type { ReactElement } from 'react'; import type { ToggleButtonProps as AriaToggleButtonProps } from 'react-aria-components'; +/** @public */ +export type ToggleButtonOwnProps = { + size?: 'small' | 'medium' | Partial>; + iconStart?: ReactElement; + iconEnd?: ReactElement; + children?: AriaToggleButtonProps['children']; + className?: string; +}; + /** * Properties for {@link ToggleButton} * * @public */ -export interface ToggleButtonProps extends AriaToggleButtonProps { - size?: 'small' | 'medium' | Partial>; - iconStart?: ReactElement; - iconEnd?: ReactElement; -} +export interface ToggleButtonProps + extends Omit, + ToggleButtonOwnProps {}