diff --git a/packages/storybook-ui-components/stories/2-Avatar.stories.tsx b/packages/storybook-ui-components/stories/2-Avatar.stories.tsx index 92eb406d2..fdeaecec3 100644 --- a/packages/storybook-ui-components/stories/2-Avatar.stories.tsx +++ b/packages/storybook-ui-components/stories/2-Avatar.stories.tsx @@ -136,6 +136,7 @@ export const demo = () => ( )} onClick={action("button-click")} selectable={boolean("Selectable", true)} + transformCase={select("transformCase", ["none", "uppercase"], "uppercase")} > {text("Text", "RL")} diff --git a/packages/ui-components/src/Avatar/Avatar.module.scss b/packages/ui-components/src/Avatar/Avatar.module.scss index 921e1965b..8b0f2f93f 100644 --- a/packages/ui-components/src/Avatar/Avatar.module.scss +++ b/packages/ui-components/src/Avatar/Avatar.module.scss @@ -69,6 +69,18 @@ letter-spacing: 0.1px; } +.noTransform { + text-transform: none; +} + +.transformCase-none { + text-transform: none; +} + +.transformCase-uppercase { + text-transform: uppercase; +} + .disabled { background: $crl-neutral-2; color: $crl-base-text--light; diff --git a/packages/ui-components/src/Avatar/Avatar.test.tsx b/packages/ui-components/src/Avatar/Avatar.test.tsx index 576953321..6054b6342 100644 --- a/packages/ui-components/src/Avatar/Avatar.test.tsx +++ b/packages/ui-components/src/Avatar/Avatar.test.tsx @@ -10,6 +10,7 @@ describe("Avatar", () => { const className = wrapper.prop("className"); expect(className).toContain("intent-default"); expect(className).toContain("size-l"); + expect(className).toContain("transformCase-uppercase"); expect(className).not.toContain("disabled"); expect(className).not.toContain("selectable"); }); diff --git a/packages/ui-components/src/Avatar/Avatar.tsx b/packages/ui-components/src/Avatar/Avatar.tsx index 647f7f3a3..5db76e8ef 100644 --- a/packages/ui-components/src/Avatar/Avatar.tsx +++ b/packages/ui-components/src/Avatar/Avatar.tsx @@ -11,10 +11,12 @@ export interface AvatarProps { disabled?: boolean; selectable?: boolean; onClick?: () => void; + transformCase?: AvatarCase; } export type AvatarSize = "xs" | "s" | "m" | "l"; export type AvatarIntent = "default" | "active" | "pending" | "invalid"; +export type AvatarCase = "none" | "uppercase"; const cx = classNames.bind(styles); @@ -25,15 +27,16 @@ const Avatar: React.FC = ({ disabled = false, selectable = false, onClick, + transformCase = "uppercase", }) => { const classnames = useMemo( () => - cx("avatar", objectToClassnames({ size }), { + cx("avatar", objectToClassnames({ size, transformCase }), { disabled, selectable: !disabled && selectable, [`intent-${intent}`]: !disabled, }), - [intent, size, disabled, selectable], + [intent, size, disabled, selectable, transformCase], ); const onClickHandler = useCallback(() => {