diff --git a/src/components/counter-box/counter-box.module.css b/src/components/counter-box/counter-box.module.css new file mode 100644 index 000000000..503bec8ff --- /dev/null +++ b/src/components/counter-box/counter-box.module.css @@ -0,0 +1,8 @@ +.counterBox { + background-color: token('color.background.neutral.2.background'); + border-radius: token('border.radius.circle'); + padding: token('spacing.small') token('spacing.medium'); + display: flex; + justify-content: center; + align-items: center; +} diff --git a/src/components/counter-box/index.tsx b/src/components/counter-box/index.tsx new file mode 100644 index 000000000..9e3622dd0 --- /dev/null +++ b/src/components/counter-box/index.tsx @@ -0,0 +1,26 @@ +import { type ReactNode } from 'react'; +import { Typo } from '@atb/components/typography'; +import { and } from '@atb/utils/css'; +import style from './counter-box.module.css'; + +export type CounterBoxProps = { + count: number; + notification?: ReactNode; + className?: string; +}; + +export function CounterBox({ + count, + notification, + className, +}: CounterBoxProps) { + if (count < 1) return null; + return ( + <> +
+ +{count} +
+ {notification} + + ); +} diff --git a/src/components/icon/index.tsx b/src/components/icon/index.tsx index 7bf64fd4f..3fe5f8de5 100644 --- a/src/components/icon/index.tsx +++ b/src/components/icon/index.tsx @@ -1,5 +1,6 @@ export * from './color-icon'; export * from './image'; export * from './mono-icon'; +export * from './tinted-mono-icon'; export * from './checkbox-icon'; export type * from './generated-icons'; diff --git a/src/components/icon/tinted-mono-icon.tsx b/src/components/icon/tinted-mono-icon.tsx new file mode 100644 index 000000000..6ba595099 --- /dev/null +++ b/src/components/icon/tinted-mono-icon.tsx @@ -0,0 +1,40 @@ +import { CSSProperties } from 'react'; +import { MonoIcons, icons } from './generated-icons'; +import { SizeProps, useSize } from './utils'; + +export type TintedMonoIconProps = { + icon: MonoIcons; + size?: SizeProps; + className?: string; +}; + +export function TintedMonoIcon({ + icon, + size = 'normal', + className, +}: TintedMonoIconProps) { + const wh = useSize(size); + const maskUrl = `/assets/${icons['mono'][icon].relative.replace( + 'mono/', + 'mono/dark/', + )}`; + + const maskStyle: CSSProperties = { + display: 'inline-block', + width: wh, + height: wh, + backgroundColor: 'currentColor', + WebkitMaskImage: `url("${maskUrl}")`, + maskImage: `url("${maskUrl}")`, + WebkitMaskRepeat: 'no-repeat', + maskRepeat: 'no-repeat', + WebkitMaskPosition: 'center', + maskPosition: 'center', + WebkitMaskSize: 'contain', + maskSize: 'contain', + }; + + return