Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix: Implement Custom Style Hook for Card component #33912

Merged
Merged
Changes from 1 commit
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
Prev Previous commit
Next Next commit
Story for Card Custom Styles
  • Loading branch information
terynkum committed Feb 26, 2025
commit 65d20ca92ecae04233e218960221bf89a22c5bc6
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import { type FluentProviderCustomStyleHooks } from '@fluentui/react-components';
import { useCardStyles } from './useCardStyles';

export const customStyleHooks: FluentProviderCustomStyleHooks = {
useCardStyles_unstable: useCardStyles,
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import { makeStyles, mergeClasses, tokens } from '@fluentui/react-components';
import { type CardState } from '@fluentui/react-components';

const useCardStyle = makeStyles({
root: {
backgroundColor: tokens.colorNeutralBackground3,
width: '620px',
maxWidth: '100%',
margin: 'auto',
},
});

export const useCardStyles = (state: unknown) => {
const cardStyles = useCardStyle();
const componentState = state as CardState;
componentState.root.className = mergeClasses(componentState.root.className, cardStyles.root);
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
import * as React from 'react';
import { customStyleHooks } from '../../../library/src/components/CustomHooks';
import {
Card,
CardFooter,
CardHeader,
CardPreview,
Body1,
Caption1,
Button,
FluentProvider,
} from '@fluentui/react-components';
import { ArrowReplyRegular, ShareRegular } from '@fluentui/react-icons';

const resolveAsset = (asset: string) => {
const ASSET_URL =
'https://raw.githubusercontent.com/microsoft/fluentui/master/packages/react-components/react-card/stories/src/assets/';

return `${ASSET_URL}${asset}`;
};

export const CardCustomStyles = () => {
return (
<FluentProvider customStyleHooks_unstable={customStyleHooks}>
<Card>
<CardHeader
image={<img src={resolveAsset('avatar_elvia.svg')} alt="Elvia Atkins avatar picture" />}
header={
<Body1>
<b>Elvia Atkins</b> mentioned you
</Body1>
}
description={<Caption1>5h ago · About us - Overview</Caption1>}
/>

<CardPreview logo={<img src={resolveAsset('docx.png')} alt="Microsoft Word document" />}>
<img src={resolveAsset('doc_template.png')} alt="Preview of a Word document: About Us - Overview" />
</CardPreview>

<CardFooter>
<Button icon={<ArrowReplyRegular fontSize={16} />}>Reply</Button>
<Button icon={<ShareRegular fontSize={16} />}>Share</Button>
</CardFooter>
</Card>
</FluentProvider>
);
};

// This line is necessary to ensure full source code view in storybook.
CardCustomStyles.parameters = { docs: { source: {} } };
Original file line number Diff line number Diff line change
@@ -11,6 +11,7 @@ export { SelectableIndicator } from './CardSelectableIndicator.stories';
export { WithAction } from './CardAction.stories';
export { FocusMode } from './CardFocusMode.stories';
export { Templates } from './CardTemplates.stories';
export { CardCustomStyles } from './CardCustomStyles.stories';

export default {
title: 'Components/Card/Card',
Loading
Oops, something went wrong.