diff --git a/canon-docs/src/app/(docs)/components/avatar/page.mdx b/canon-docs/src/app/(docs)/components/avatar/page.mdx
new file mode 100644
index 0000000000..b46caf8d62
--- /dev/null
+++ b/canon-docs/src/app/(docs)/components/avatar/page.mdx
@@ -0,0 +1,75 @@
+import { PropsTable } from '@/components/PropsTable';
+import { Snippet } from '@/components/Snippet';
+import { Tabs } from '@/components/Tabs';
+import { CodeBlock } from '@/components/CodeBlock';
+import { AvatarSnippet } from '@/snippets/stories-snippets';
+import { avatarPropDefs } from './props';
+
+# Avatar
+
+An avatar component with a fallback for initials.
+
+}
+ code={``}
+/>
+
+
+
+ Usage
+ Theming
+
+
+ `}
+ />
+
+
+ We recommend starting with our [global tokens](/theme/theming) to customize the library and align it with
+ your brand. For additional flexibility, you can use the provided class names for each element listed below.
+ - `canon-AvatarRoot`
+ - `canon-AvatarRoot[data-size='small']`
+ - `canon-AvatarRoot[data-size='medium']`
+ - `canon-AvatarRoot[data-size='large']`
+ - `canon-AvatarImage`
+ - `canon-AvatarFallback`
+
+
+
+## API reference
+
+
+
+## Examples
+
+### Sizes
+
+Avatar sizes can be set using the `size` prop.
+
+}
+ code={`
+
+
+
+ `}
+/>
+
+### Fallback
+
+If the image is not available, the avatar will show the initials of the name.
+
+}
+ code={``}
+/>
diff --git a/canon-docs/src/app/(docs)/components/avatar/props.ts b/canon-docs/src/app/(docs)/components/avatar/props.ts
new file mode 100644
index 0000000000..e86c67a41e
--- /dev/null
+++ b/canon-docs/src/app/(docs)/components/avatar/props.ts
@@ -0,0 +1,19 @@
+import { classNamePropDefs, stylePropDefs } from '@/utils/propDefs';
+import type { PropDef } from '@/utils/propDefs';
+
+export const avatarPropDefs: Record = {
+ src: {
+ type: 'string',
+ },
+ name: {
+ type: 'string',
+ },
+ size: {
+ type: 'enum',
+ values: ['small', 'medium', 'large'],
+ default: 'medium',
+ responsive: true,
+ },
+ ...classNamePropDefs,
+ ...stylePropDefs,
+};
diff --git a/canon-docs/src/snippets/stories-snippets.tsx b/canon-docs/src/snippets/stories-snippets.tsx
index 6b54f5dc4d..83cc866050 100644
--- a/canon-docs/src/snippets/stories-snippets.tsx
+++ b/canon-docs/src/snippets/stories-snippets.tsx
@@ -15,6 +15,7 @@ import * as FlexStories from '../../../packages/canon/src/components/Flex/Flex.s
import * as SelectStories from '../../../packages/canon/src/components/Select/Select.stories';
import * as MenuStories from '../../../packages/canon/src/components/Menu/Menu.stories';
import * as LinkStories from '../../../packages/canon/src/components/Link/Link.stories';
+import * as AvatarStories from '../../../packages/canon/src/components/Avatar/Avatar.stories';
export const BoxSnippet = ({ story }: { story: keyof typeof BoxStories }) => {
const stories = composeStories(BoxStories);
@@ -141,3 +142,14 @@ export const LinkSnippet = ({ story }: { story: keyof typeof LinkStories }) => {
return StoryComponent ? : null;
};
+
+export const AvatarSnippet = ({
+ story,
+}: {
+ story: keyof typeof AvatarStories;
+}) => {
+ const stories = composeStories(AvatarStories);
+ const StoryComponent = stories[story as keyof typeof stories];
+
+ return StoryComponent ? : null;
+};
diff --git a/canon-docs/src/utils/data.ts b/canon-docs/src/utils/data.ts
index 48274ea1a2..d1e9277e57 100644
--- a/canon-docs/src/utils/data.ts
+++ b/canon-docs/src/utils/data.ts
@@ -66,6 +66,11 @@ export const layoutComponents: Page[] = [
];
export const components: Page[] = [
+ {
+ title: 'Avatar',
+ slug: 'avatar',
+ status: 'alpha',
+ },
{
title: 'Button',
slug: 'button',