Skip to content

Commit a425a19

Browse files
dmytrokirpaclaude
andauthored
feat(react-headless-components-preview): add Image component (#36099)
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent b5cc67b commit a425a19

15 files changed

Lines changed: 209 additions & 0 deletions

File tree

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"type": "patch",
3+
"comment": "feat: add Image component",
4+
"packageName": "@fluentui/react-headless-components-preview",
5+
"email": "dmytrokirpa@microsoft.com",
6+
"dependentChangeType": "patch"
7+
}

packages/react-components/react-headless-components-preview/library/bundle-size/AllComponents.fixture.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import * as Dialog from '@fluentui/react-headless-components-preview/dialog';
99
import * as Divider from '@fluentui/react-headless-components-preview/divider';
1010
import * as Drawer from '@fluentui/react-headless-components-preview/drawer';
1111
import * as Field from '@fluentui/react-headless-components-preview/field';
12+
import * as Image from '@fluentui/react-headless-components-preview/image';
1213
import * as Input from '@fluentui/react-headless-components-preview/input';
1314
import * as Link from '@fluentui/react-headless-components-preview/link';
1415
import * as MessageBar from '@fluentui/react-headless-components-preview/message-bar';
@@ -43,6 +44,7 @@ console.log({
4344
Divider,
4445
Drawer,
4546
Field,
47+
Image,
4648
Input,
4749
Link,
4850
MessageBar,
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
## API Report File for "@fluentui/react-headless-components-preview"
2+
3+
> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/).
4+
5+
```ts
6+
7+
import type { ForwardRefComponent } from '@fluentui/react-utilities';
8+
import { ImageBaseProps as ImageProps } from '@fluentui/react-image';
9+
import { ImageSlots } from '@fluentui/react-image';
10+
import { ImageBaseState as ImageState } from '@fluentui/react-image';
11+
import { renderImage_unstable as renderImage } from '@fluentui/react-image';
12+
import { useImageBase_unstable as useImage } from '@fluentui/react-image';
13+
14+
// @public
15+
const Image_2: ForwardRefComponent<ImageProps>;
16+
export { Image_2 as Image }
17+
18+
export { ImageProps }
19+
20+
export { ImageSlots }
21+
22+
export { ImageState }
23+
24+
export { renderImage }
25+
26+
export { useImage }
27+
28+
// (No @packageDocumentation comment for this package)
29+
30+
```

packages/react-components/react-headless-components-preview/library/package.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,12 @@
135135
"import": "./lib/field.js",
136136
"require": "./lib-commonjs/field.js"
137137
},
138+
"./image": {
139+
"types": "./dist/image.d.ts",
140+
"node": "./lib-commonjs/image.js",
141+
"import": "./lib/image.js",
142+
"require": "./lib-commonjs/image.js"
143+
},
138144
"./input": {
139145
"types": "./dist/input.d.ts",
140146
"node": "./lib-commonjs/input.js",
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import * as React from 'react';
2+
import { render } from '@testing-library/react';
3+
import { isConformant } from '../../testing/isConformant';
4+
import { Image } from './Image';
5+
6+
describe('Image', () => {
7+
isConformant({
8+
Component: Image,
9+
displayName: 'Image',
10+
});
11+
12+
it('renders an image element with the correct attributes', () => {
13+
const props = {
14+
alt: 'Default Image',
15+
src: 'https://fabricweb.azureedge.net/fabric-website/assets/images/wireframe/image.png',
16+
};
17+
18+
const { getByRole } = render(<Image alt={props.alt} src={props.src} />);
19+
20+
const img = getByRole('img');
21+
expect(img).toBeInTheDocument();
22+
expect(img).toHaveAttribute('alt', props.alt);
23+
expect(img).toHaveAttribute('src', props.src);
24+
});
25+
});
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
'use client';
2+
3+
import * as React from 'react';
4+
import type { ForwardRefComponent } from '@fluentui/react-utilities';
5+
import { useImage } from './useImage';
6+
import { renderImage } from './renderImage';
7+
import type { ImageProps } from './Image.types';
8+
9+
/**
10+
* Image component - represents an image, which can be used to display a picture, icon, or other visual content.
11+
*/
12+
export const Image: ForwardRefComponent<ImageProps> = React.forwardRef((props, ref) => {
13+
const state = useImage(props, ref);
14+
15+
return renderImage(state);
16+
});
17+
18+
Image.displayName = 'Image';
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export type { ImageSlots, ImageBaseProps as ImageProps, ImageBaseState as ImageState } from '@fluentui/react-image';
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export { Image } from './Image';
2+
export type { ImageSlots, ImageProps, ImageState } from './Image.types';
3+
export { renderImage } from './renderImage';
4+
export { useImage } from './useImage';
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { renderImage_unstable as renderImage } from '@fluentui/react-image';
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { useImageBase_unstable as useImage } from '@fluentui/react-image';

0 commit comments

Comments
 (0)