Migrate ToggleButtonGroup component from useStyles to useDefinition

Signed-off-by: Johan Persson <johanopersson@gmail.com>
This commit is contained in:
Johan Persson
2026-02-25 10:59:06 +01:00
parent c239966fc7
commit a4842b4ae0
3 changed files with 34 additions and 23 deletions
@@ -14,32 +14,27 @@
* limitations under the License.
*/
import clsx from 'clsx';
import { forwardRef, Ref } from 'react';
import { ToggleButtonGroup as AriaToggleButtonGroup } from 'react-aria-components';
import type { ToggleButtonGroupProps } from './types';
import { useStyles } from '../../hooks/useStyles';
import { useDefinition } from '../../hooks/useDefinition';
import { ToggleButtonGroupDefinition } from './definition';
import styles from './ToggleButtonGroup.module.css';
/** @public */
export const ToggleButtonGroup = forwardRef(
(props: ToggleButtonGroupProps, ref: Ref<HTMLDivElement>) => {
const { classNames, dataAttributes, cleanedProps } = useStyles(
const { ownProps, restProps, dataAttributes } = useDefinition(
ToggleButtonGroupDefinition,
{
...props,
},
props,
);
const { className, children, ...rest } = cleanedProps;
const { classes, children } = ownProps;
return (
<AriaToggleButtonGroup
className={clsx(classNames.root, styles[classNames.root], className)}
className={classes.root}
ref={ref}
{...dataAttributes}
{...rest}
{...restProps}
>
{children}
</AriaToggleButtonGroup>
@@ -14,17 +14,23 @@
* limitations under the License.
*/
import type { ComponentDefinition } from '../../types';
import { defineComponent } from '../../hooks/useDefinition';
import type { ToggleButtonGroupOwnProps } from './types';
import styles from './ToggleButtonGroup.module.css';
/**
* Component definition for ToggleButtonGroup
* @public
*/
export const ToggleButtonGroupDefinition = {
classNames: {
root: 'bui-ToggleButtonGroup',
},
dataAttributes: {
orientation: ['horizontal', 'vertical'] as const,
},
} as const satisfies ComponentDefinition;
export const ToggleButtonGroupDefinition =
defineComponent<ToggleButtonGroupOwnProps>()({
styles,
classNames: {
root: 'bui-ToggleButtonGroup',
},
propDefs: {
orientation: { dataAttribute: true },
className: {},
children: {},
},
});
@@ -14,10 +14,20 @@
* limitations under the License.
*/
import type { ReactNode } from 'react';
import type { ToggleButtonGroupProps as AriaToggleButtonGroupProps } from 'react-aria-components';
/** @public */
export interface ToggleButtonGroupProps
extends Omit<AriaToggleButtonGroupProps, 'orientation'> {
export type ToggleButtonGroupOwnProps = {
orientation?: NonNullable<AriaToggleButtonGroupProps['orientation']>;
}
className?: string;
children?: ReactNode;
};
/** @public */
export interface ToggleButtonGroupProps
extends Omit<
AriaToggleButtonGroupProps,
'orientation' | 'className' | 'children'
>,
ToggleButtonGroupOwnProps {}