diff --git a/packages/store-ui/src/atoms/Badge/Badge.test.tsx b/packages/store-ui/src/atoms/Badge/Badge.test.tsx new file mode 100644 index 0000000000..d892c932d9 --- /dev/null +++ b/packages/store-ui/src/atoms/Badge/Badge.test.tsx @@ -0,0 +1,14 @@ +import React from 'react' +import { render } from '@testing-library/react' + +import Badge from './Badge' + +describe('Badge', () => { + it('should have `data-store-badge` attribute', () => { + const { getByText } = render(-25%) + + const renderedBadge = getByText('-25%') + + expect(renderedBadge).toHaveAttribute('data-store-badge') + }) +}) diff --git a/packages/store-ui/src/atoms/Badge/Badge.tsx b/packages/store-ui/src/atoms/Badge/Badge.tsx new file mode 100644 index 0000000000..64cc774252 --- /dev/null +++ b/packages/store-ui/src/atoms/Badge/Badge.tsx @@ -0,0 +1,23 @@ +import type { ReactNode } from 'react' +import React, { forwardRef } from 'react' + +export interface BadgeProps { + /** + * ID to find this component in testing tools (e.g.: cypress, testing library, and jest). + */ + testId?: string + children?: ReactNode +} + +const Badge = forwardRef(function Badge( + { testId = 'store-badge', children }: BadgeProps, + ref +) { + return ( +
+ {children} +
+ ) +}) + +export default Badge diff --git a/packages/store-ui/src/atoms/Badge/index.ts b/packages/store-ui/src/atoms/Badge/index.ts new file mode 100644 index 0000000000..b6e18e76b5 --- /dev/null +++ b/packages/store-ui/src/atoms/Badge/index.ts @@ -0,0 +1,2 @@ +export { default } from './Badge' +export type { BadgeProps } from './Badge' diff --git a/packages/store-ui/src/atoms/Badge/stories/Badge.mdx b/packages/store-ui/src/atoms/Badge/stories/Badge.mdx new file mode 100644 index 0000000000..af66dd72eb --- /dev/null +++ b/packages/store-ui/src/atoms/Badge/stories/Badge.mdx @@ -0,0 +1,12 @@ +import { Story, Canvas, ArgsTable } from '@storybook/addon-docs' +import Badge from '../Badge' + +# Preview + + + + + +# Props + + diff --git a/packages/store-ui/src/atoms/Badge/stories/Badge.stories.tsx b/packages/store-ui/src/atoms/Badge/stories/Badge.stories.tsx new file mode 100644 index 0000000000..1e993458fd --- /dev/null +++ b/packages/store-ui/src/atoms/Badge/stories/Badge.stories.tsx @@ -0,0 +1,37 @@ +import type { Story } from '@storybook/react' +import React from 'react' + +import type { ComponentArgTypes } from '../../../typings/utils' +import Component from '../Badge' +import mdx from './Badge.mdx' + +interface StoryControls { + badgeText: string +} + +const BadgeTemplate: Story = ({ badgeText }) => ( + {badgeText} +) + +export const Badge = BadgeTemplate.bind({}) + +const argTypes: ComponentArgTypes = { + badgeText: { + name: 'Badge text', + control: { + type: 'text', + }, + defaultValue: '-25%', + }, +} + +export default { + title: 'Atoms/Badge', + component: Badge, + argTypes, + parameters: { + docs: { + page: mdx, + }, + }, +} diff --git a/packages/store-ui/src/deprecated/index.ts b/packages/store-ui/src/deprecated/index.ts index d1bd94b674..967f35d4cd 100644 --- a/packages/store-ui/src/deprecated/index.ts +++ b/packages/store-ui/src/deprecated/index.ts @@ -25,7 +25,7 @@ export { Progress, Donut, Avatar, - Badge, + Badge as UIBadge, Close, Alert, Divider, @@ -61,7 +61,7 @@ export type { ProgressProps, DonutProps, AvatarProps, - BadgeProps, + BadgeProps as UIBadgeProps, AlertProps, DividerProps, EmbedProps, diff --git a/packages/store-ui/src/index.ts b/packages/store-ui/src/index.ts index 8a32cd9e43..16e06ee712 100644 --- a/packages/store-ui/src/index.ts +++ b/packages/store-ui/src/index.ts @@ -29,6 +29,9 @@ export type { SelectProps } from './atoms/Select' export { default as Radio } from './atoms/Radio' export type { RadioProps } from './atoms/Radio' +export { default as Badge } from './atoms/Badge' +export type { BadgeProps } from './atoms/Badge' + // Molecules export { default as Bullets } from './molecules/Bullets' export type { BulletsProps } from './molecules/Bullets' diff --git a/themes/theme-b2c-tailwind/src/atoms/badge.css b/themes/theme-b2c-tailwind/src/atoms/badge.css new file mode 100644 index 0000000000..49852906e3 --- /dev/null +++ b/themes/theme-b2c-tailwind/src/atoms/badge.css @@ -0,0 +1,8 @@ +[data-store-badge] { + display: inline-block; + color: #ffffff; + background-color: #f71963; + padding: 0.4rem; + border-radius: 0.2rem; + font-size: 0.9rem; +} diff --git a/themes/theme-b2c-tailwind/src/atoms/index.css b/themes/theme-b2c-tailwind/src/atoms/index.css index 62ca44ecf9..72a06c5174 100644 --- a/themes/theme-b2c-tailwind/src/atoms/index.css +++ b/themes/theme-b2c-tailwind/src/atoms/index.css @@ -5,3 +5,4 @@ @import "./price.css"; @import "./textarea.css"; @import "./overlay.css"; +@import "./badge.css";