diff --git a/apps/scandic-web/components/TabFilters/index.tsx b/apps/scandic-web/components/TabFilters/index.tsx index f79d8d5fc..b16d93792 100644 --- a/apps/scandic-web/components/TabFilters/index.tsx +++ b/apps/scandic-web/components/TabFilters/index.tsx @@ -2,7 +2,7 @@ import { cx } from "class-variance-authority" -import { Typography } from "@scandic-hotels/design-system/Typography" +import { ChipButton } from "@scandic-hotels/design-system/ChipButton" import useScrollShadows from "@/hooks/useScrollShadows" @@ -32,29 +32,23 @@ export default function TabFilters({ return (
{categories.map((category) => ( - onFilterSelect(category.identifier)} + variant="FilterRounded" + selected={selectedFilter === category.identifier} + className={styles.filter} > - - + + {category.label} + ))}
diff --git a/apps/scandic-web/components/TabFilters/tabFilters.module.css b/apps/scandic-web/components/TabFilters/tabFilters.module.css index 126d59676..904412a16 100644 --- a/apps/scandic-web/components/TabFilters/tabFilters.module.css +++ b/apps/scandic-web/components/TabFilters/tabFilters.module.css @@ -38,25 +38,10 @@ scrollbar-width: none; position: relative; width: 100%; + padding: var(--Space-x05); } .filter { - display: flex; - align-items: center; - gap: var(--Space-x1); - background-color: transparent; - border: 1px solid var(--Border-Interactive-Selected); - border-radius: var(--Corner-radius-rounded); - padding: var(--Space-x1) var(--Space-x2); - transition: all 0.2s ease-in-out; - scroll-snap-align: start; + scroll-snap-align: center; flex-shrink: 0; - cursor: pointer; - color: var(--Text-Default); -} - -.filter.selected { - border-color: transparent; - background-color: var(--Base-Button-Tertiary-Fill-Normal); - color: var(--Text-Inverted); } diff --git a/packages/design-system/lib/components/ChipButton/ChipButton.stories.tsx b/packages/design-system/lib/components/ChipButton/ChipButton.stories.tsx index 84922bc3f..125dfc76a 100644 --- a/packages/design-system/lib/components/ChipButton/ChipButton.stories.tsx +++ b/packages/design-system/lib/components/ChipButton/ChipButton.stories.tsx @@ -51,3 +51,61 @@ export const Outlined: Story = { ), }, } + +export const FilterRoundedLarge: Story = { + args: { + variant: 'FilterRounded', + onPress: fn(), + size: 'Large', + children: ( + <> + + Button Chip + + ), + }, +} + +export const FilterRoundedLargeSelected: Story = { + args: { + variant: 'FilterRounded', + onPress: fn(), + size: 'Large', + selected: true, + children: ( + <> + + Button Chip + + ), + }, +} + +export const FilterRoundedMedium: Story = { + args: { + variant: 'FilterRounded', + onPress: fn(), + size: 'Medium', + children: ( + <> + + Button Chip + + ), + }, +} + +export const FilterRoundedMediumSelected: Story = { + args: { + variant: 'FilterRounded', + onPress: fn(), + size: 'Medium', + selected: true, + children: ( + <> + + Button Chip + + ), + }, +} diff --git a/packages/design-system/lib/components/ChipButton/ChipButton.tsx b/packages/design-system/lib/components/ChipButton/ChipButton.tsx index e05a2788b..806abfff6 100644 --- a/packages/design-system/lib/components/ChipButton/ChipButton.tsx +++ b/packages/design-system/lib/components/ChipButton/ChipButton.tsx @@ -1,24 +1,25 @@ import { Button as ButtonRAC } from 'react-aria-components' -import { Typography } from '../Typography' import { ChipButtonProps } from './types' import { variants } from './variants' export function ChipButton({ children, variant, + selected = false, + size = 'Large', className, ...props }: ChipButtonProps) { const classNames = variants({ variant, + selected, + size, }) return ( - - - {children} - - + + {children} + ) } diff --git a/packages/design-system/lib/components/ChipButton/chip-button.module.css b/packages/design-system/lib/components/ChipButton/chip-button.module.css index b16163c3c..10479a692 100644 --- a/packages/design-system/lib/components/ChipButton/chip-button.module.css +++ b/packages/design-system/lib/components/ChipButton/chip-button.module.css @@ -7,6 +7,7 @@ align-items: center; justify-content: center; cursor: pointer; + gap: var(--Space-x05); } .Default { @@ -30,8 +31,31 @@ border-color: var(--Border-Interactive-Selected); } +.FilterRounded { + background-color: transparent; + border: 1px solid var(--Border-Interactive-Selected); + border-radius: var(--Corner-radius-rounded); + padding: var(--Space-x025) var(--Space-x2); + color: var(--Text-Default); +} + +.selected { + border-color: transparent; + background-color: var(--Surface-Brand-Primary-3-Default); + color: var(--Text-Inverted); +} + +.large { + height: 40px; +} + +.medium { + height: 32px; +} + .Default:focus, -.Outlined:focus { +.Outlined:focus, +.FilterRounded:focus { outline-offset: 4px; outline-color: var(--Border-Interactive-Focus); } diff --git a/packages/design-system/lib/components/ChipButton/variants.ts b/packages/design-system/lib/components/ChipButton/variants.ts index e79d8b801..680e81cb4 100644 --- a/packages/design-system/lib/components/ChipButton/variants.ts +++ b/packages/design-system/lib/components/ChipButton/variants.ts @@ -2,24 +2,114 @@ import { cva } from 'class-variance-authority' import { deepmerge } from 'deepmerge-ts' import styles from './chip-button.module.css' +import { config as typographyConfig } from '../Typography/variants' + +const variantKeys = { + variant: { + Default: 'Default', + Outlined: 'Outlined', + FilterRounded: 'FilterRounded', + }, + style: { + Medium: 'Medium', + Large: 'Large', + }, + typography: { + Bold: 'Body/Supporting text (caption)/smBold', + Regular: 'Body/Supporting text (caption)/smRegular', + }, +} as const export const config = { variants: { variant: { - Default: styles.Default, - Outlined: styles.Outlined, + [variantKeys.variant.Default]: styles.Default, + [variantKeys.variant.Outlined]: styles.Outlined, + [variantKeys.variant.FilterRounded]: styles.FilterRounded, + }, + selected: { + true: '', + false: '', + }, + size: { + [variantKeys.style.Medium]: '', + [variantKeys.style.Large]: '', }, }, + compoundVariants: [ + { + variant: variantKeys.variant.Default, + className: [ + typographyConfig.variants.variant[ + 'Body/Supporting text (caption)/smBold' + ], + ], + }, + { + variant: variantKeys.variant.Outlined, + className: [ + typographyConfig.variants.variant[ + 'Body/Supporting text (caption)/smBold' + ], + ], + }, + { + variant: variantKeys.variant.FilterRounded, + size: variantKeys.style.Medium, + selected: true, + className: [ + typographyConfig.variants.variant[ + 'Body/Supporting text (caption)/smRegular' + ], + styles.selected, + styles.medium, + ], + }, + { + variant: variantKeys.variant.FilterRounded, + size: variantKeys.style.Medium, + selected: false, + className: [ + typographyConfig.variants.variant[ + 'Body/Supporting text (caption)/smRegular' + ], + styles.medium, + ], + }, + { + variant: variantKeys.variant.FilterRounded, + size: variantKeys.style.Large, + selected: true, + className: [ + typographyConfig.variants.variant[ + 'Body/Supporting text (caption)/smRegular' + ], + styles.selected, + styles.large, + ], + }, + { + variant: variantKeys.variant.FilterRounded, + size: variantKeys.style.Large, + selected: false, + className: [ + typographyConfig.variants.variant[ + 'Body/Supporting text (caption)/smRegular' + ], + styles.large, + ], + }, + ], defaultVariants: { - variant: 'Default', + variant: variantKeys.variant.Default, }, -} as const +} export const variants = cva(styles.chip, config) const chipConfig = { variants: { - typography: config.variants.variant, + ...config.variants, }, defaultVariants: config.defaultVariants, } as const