Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 17 additions & 3 deletions packages/components/asset/README.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ status: 'stable'
slug: /components/asset/
github: 'https://github.com/contentful/forma-36/tree/main/packages/components/asset'
storybook: 'https://f36-storybook.contentful.com/?path=/story/components-asset--basic'
typescript: ./src/Asset.tsx
typescript: ./src/Asset.tsx,./src/AssetIcon/AssetIcon.tsx
---

Represent an asset visually without showing the actual asset.
Expand All @@ -15,9 +15,9 @@ Useful in a file selector, a drag-n-drop component or in lists.
## Import

```js static=true
import { Asset } from '@contentful/f36-components';
import { Asset, AssetIcon } from '@contentful/f36-components';
// or
import { Asset } from '@contentful/f36-asset';
import { Asset, AssetIcon } from '@contentful/f36-asset';
```

## Examples
Expand All @@ -44,6 +44,20 @@ If asset `status` is set to `archived`, an image icon is displayed instead of th

```

### AssetIcon

`AssetIcon` renders only the icon that represents an asset's type. It can be used independently from the `Asset` component.

```jsx file=examples/AssetIconExample.tsx

```

## Props (API reference)

### Asset

<PropsTable of="Asset" />

### AssetIcon

<PropsTable of="AssetIcon" />
21 changes: 21 additions & 0 deletions packages/components/asset/examples/AssetIconExample.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import React from 'react';
import { Flex } from '@contentful/f36-core';
import { AssetIcon } from '@contentful/f36-asset';

export default function AssetIconExample() {
return (
<Flex gap="spacingM" flexWrap="wrap">
<AssetIcon type="archive" />
<AssetIcon type="audio" />
<AssetIcon type="code" />
<AssetIcon type="image" />
<AssetIcon type="markup" />
<AssetIcon type="pdf" />
<AssetIcon type="plaintext" />
<AssetIcon type="presentation" />
<AssetIcon type="richtext" />
<AssetIcon type="spreadsheet" />
<AssetIcon type="video" />
</Flex>
);
}
3 changes: 1 addition & 2 deletions packages/components/asset/src/AssetIcon/AssetIcon.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,7 @@ import type { AssetType } from '../types';
import { cx } from '@emotion/css';
import { getAssetIconStyles } from './AssetIcon.styles';

export interface AssetIconProps
extends Omit<GeneratedIconProps, 'illustration' | 'ref'> {
export interface AssetIconProps extends GeneratedIconProps {
type?: AssetType;
}

Expand Down
44 changes: 44 additions & 0 deletions packages/components/asset/stories/AssetIcon.stories.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import React from 'react';
import type { Meta, StoryObj } from '@storybook/react-vite';
import { Flex } from '@contentful/f36-core';
import { Text } from '@contentful/f36-typography';
import { AssetIcon } from '../src/AssetIcon/AssetIcon';
import { types } from '../src/types';

import type { AssetIconProps } from '../src/AssetIcon/AssetIcon';

export default {
argTypes: {
className: { control: { disable: true } },
testId: { control: { disable: true } },
type: {
control: 'select',
options: Object.keys(types),
},
},
args: {
type: 'image',
},
component: AssetIcon,
parameters: {
propTypes: AssetIcon['__docgenInfo'],
},
title: 'Components/Asset/AssetIcon',
} as Meta;

export const Basic: StoryObj<AssetIconProps> = {
render: (args) => {
return <AssetIcon {...args} />;
},
};

export const Overview = () => (
<Flex gap="spacingM" flexWrap="wrap">
{Object.keys(types).map((type) => (
<Flex key={type} flexDirection="column" alignItems="center" gap="spacingXs">
<AssetIcon type={type as AssetIconProps['type']} />
<Text>{type}</Text>
</Flex>
))}
</Flex>
);
Loading