diff --git a/change/@fluentui-react-breadcrumb-preview-e423e7a3-3b7e-424d-847c-2c4f85699fde.json b/change/@fluentui-react-breadcrumb-preview-e423e7a3-3b7e-424d-847c-2c4f85699fde.json
new file mode 100644
index 00000000000000..237d9626f3d45e
--- /dev/null
+++ b/change/@fluentui-react-breadcrumb-preview-e423e7a3-3b7e-424d-847c-2c4f85699fde.json
@@ -0,0 +1,7 @@
+{
+ "type": "minor",
+ "comment": "feat: made BreadcrumbButton semantically as a link",
+ "packageName": "@fluentui/react-breadcrumb-preview",
+ "email": "vkozlova@microsoft.com",
+ "dependentChangeType": "patch"
+}
diff --git a/packages/react-components/react-breadcrumb-preview/src/components/Breadcrumb/Breadcrumb.test.tsx b/packages/react-components/react-breadcrumb-preview/src/components/Breadcrumb/Breadcrumb.test.tsx
index 6b338fed0c7ba9..972e104880e0bd 100644
--- a/packages/react-components/react-breadcrumb-preview/src/components/Breadcrumb/Breadcrumb.test.tsx
+++ b/packages/react-components/react-breadcrumb-preview/src/components/Breadcrumb/Breadcrumb.test.tsx
@@ -32,12 +32,12 @@ describe('Breadcrumb', () => {
-
+
@@ -68,9 +68,7 @@ describe('Breadcrumb', () => {
>
Link 1
diff --git a/packages/react-components/react-breadcrumb-preview/src/components/BreadcrumbButton/BreadcrumbButton.test.tsx b/packages/react-components/react-breadcrumb-preview/src/components/BreadcrumbButton/BreadcrumbButton.test.tsx
index 1e0da8c7fbdb57..a35254dea79414 100644
--- a/packages/react-components/react-breadcrumb-preview/src/components/BreadcrumbButton/BreadcrumbButton.test.tsx
+++ b/packages/react-components/react-breadcrumb-preview/src/components/BreadcrumbButton/BreadcrumbButton.test.tsx
@@ -26,12 +26,12 @@ describe('BreadcrumbButton', () => {
const result = render(Default BreadcrumbButton);
expect(result.container).toMatchInlineSnapshot(`
-
+
`);
});
@@ -42,9 +42,9 @@ describe('BreadcrumbButton', () => {
);
expect(result.container).toMatchInlineSnapshot(`
-
+
`);
});
diff --git a/packages/react-components/react-breadcrumb-preview/src/components/BreadcrumbButton/useBreadcrumbButton.ts b/packages/react-components/react-breadcrumb-preview/src/components/BreadcrumbButton/useBreadcrumbButton.ts
index 96fa711090851f..07125e03b7548e 100644
--- a/packages/react-components/react-breadcrumb-preview/src/components/BreadcrumbButton/useBreadcrumbButton.ts
+++ b/packages/react-components/react-breadcrumb-preview/src/components/BreadcrumbButton/useBreadcrumbButton.ts
@@ -1,5 +1,6 @@
import * as React from 'react';
import { useButton_unstable } from '@fluentui/react-button';
+import type { ButtonProps } from '@fluentui/react-button';
import { useBreadcrumbContext_unstable } from '../Breadcrumb/BreadcrumbContext';
import type { BreadcrumbButtonProps, BreadcrumbButtonState } from './BreadcrumbButton.types';
@@ -17,18 +18,20 @@ export const useBreadcrumbButton_unstable = (
ref: React.Ref,
): BreadcrumbButtonState => {
const { size } = useBreadcrumbContext_unstable();
- const { current = false, icon, ...rest } = props;
+ const { current = false, ...rest } = props;
return {
...useButton_unstable(
{
appearance: 'subtle',
- ...rest,
+ role: undefined,
+ type: undefined,
+ as: 'a' as const,
iconPosition: 'before',
- icon,
'aria-current': current ? props['aria-current'] ?? 'page' : undefined,
'aria-disabled': current ? props['aria-disabled'] ?? true : undefined,
- },
+ ...rest,
+ } as ButtonProps,
ref,
),
current,
diff --git a/packages/react-components/react-breadcrumb-preview/src/components/BreadcrumbButton/useBreadcrumbButtonStyles.styles.ts b/packages/react-components/react-breadcrumb-preview/src/components/BreadcrumbButton/useBreadcrumbButtonStyles.styles.ts
index d7ea77b33ba75c..788e1e4ac4af59 100644
--- a/packages/react-components/react-breadcrumb-preview/src/components/BreadcrumbButton/useBreadcrumbButtonStyles.styles.ts
+++ b/packages/react-components/react-breadcrumb-preview/src/components/BreadcrumbButton/useBreadcrumbButtonStyles.styles.ts
@@ -1,8 +1,9 @@
import { makeStyles, mergeClasses, shorthands } from '@griffel/react';
import type { BreadcrumbButtonSlots, BreadcrumbButtonState } from './BreadcrumbButton.types';
import type { SlotClassNames } from '@fluentui/react-utilities';
-import { useButtonStyles_unstable } from '@fluentui/react-button';
+import { useButtonStyles_unstable, buttonClassNames } from '@fluentui/react-button';
import { tokens, typographyStyles } from '@fluentui/react-theme';
+import { iconFilledClassName, iconRegularClassName } from '@fluentui/react-icons';
/**
* Static CSS class names used internally for the component slots.
@@ -47,6 +48,20 @@ const defaultButtonStyles = {
color: tokens.colorNeutralForeground2,
cursor: 'auto',
};
+
+const currentIconStyles = {
+ ...defaultButtonStyles,
+ [`& .${buttonClassNames.icon}`]: {
+ color: 'unset',
+ },
+ [`& .${iconFilledClassName}`]: {
+ display: 'none',
+ },
+ [`& .${iconRegularClassName}`]: {
+ display: 'inline',
+ },
+};
+
const useStyles = makeStyles({
root: {
minWidth: 'unset',
@@ -70,13 +85,13 @@ const useStyles = makeStyles({
},
current: {
':hover': {
- ...defaultButtonStyles,
+ ...currentIconStyles,
},
':hover:active': {
- ...defaultButtonStyles,
+ ...currentIconStyles,
},
':disabled': {
- ...defaultButtonStyles,
+ ...currentIconStyles,
},
},
currentSmall: {
diff --git a/packages/react-components/react-breadcrumb-preview/stories/Breadcrumb/BreadcrumbButtonWithHrefAttribute.stories.tsx b/packages/react-components/react-breadcrumb-preview/stories/Breadcrumb/BreadcrumbButtonWithHrefAttribute.stories.tsx
deleted file mode 100644
index 462ad5e0c21a69..00000000000000
--- a/packages/react-components/react-breadcrumb-preview/stories/Breadcrumb/BreadcrumbButtonWithHrefAttribute.stories.tsx
+++ /dev/null
@@ -1,80 +0,0 @@
-import * as React from 'react';
-import { Breadcrumb, BreadcrumbItem, BreadcrumbButton, BreadcrumbDivider } from '@fluentui/react-breadcrumb-preview';
-import { bundleIcon, CalendarMonth20Filled, CalendarMonth20Regular, GridDots20Regular } from '@fluentui/react-icons';
-import { ButtonProps } from '@fluentui/react-components';
-
-const CalendarMonth = bundleIcon(CalendarMonth20Filled, CalendarMonth20Regular);
-
-type Item = {
- key: number;
- item?: string;
- linkProps?: {
- 'aria-label'?: string;
- href?: string;
- icon?: ButtonProps['icon'];
- disabled?: boolean;
- };
-};
-
-const linkItems: Item[] = [
- {
- key: 0,
- item: 'Default',
- linkProps: {
- href: 'https://react.fluentui.dev/?path=/docs/preview-components-breadcrumb--default',
- },
- },
- {
- key: 1,
- item: 'Size',
- linkProps: {
- icon: ,
- 'aria-label': 'Item 1',
- href: 'https://react.fluentui.dev/?path=/docs/preview-components-breadcrumb--breadcrumb-size',
- disabled: true,
- },
- },
- {
- key: 2,
- item: 'Overflow',
- linkProps: {
- icon: ,
- href: 'https://react.fluentui.dev/?path=/docs/preview-components-breadcrumb--breadcrumb-with-overflow',
- },
- },
- {
- key: 3,
- item: 'Breadcrumb with Tooltip',
- linkProps: {
- disabled: true,
- href: 'https://react.fluentui.dev/?path=/docs/preview-components-breadcrumb--breadcrumb-with-tooltip',
- },
- },
- {
- key: 4,
- item: 'Breadcrumb focus mode',
- linkProps: {
- href: 'https://react.fluentui.dev/?path=/docs/preview-components-breadcrumb--breadcrumb-focus-mode',
- },
- },
-];
-
-function renderLink(el: Item, isLastItem: boolean = false) {
- return (
-
-
-
- {el.item}
-
-
- {!isLastItem && }
-
- );
-}
-export const BreadcrumbButtonWithHrefAttribute = () => {
- return (
-
- {linkItems.map((el, index) => renderLink(el, index === linkItems.length - 1))}
-
- );
-};
diff --git a/packages/react-components/react-breadcrumb-preview/stories/Breadcrumb/BreadcrumbDefault.stories.tsx b/packages/react-components/react-breadcrumb-preview/stories/Breadcrumb/BreadcrumbDefault.stories.tsx
index 39af6d4af9ad81..58b8598ec8dccb 100644
--- a/packages/react-components/react-breadcrumb-preview/stories/Breadcrumb/BreadcrumbDefault.stories.tsx
+++ b/packages/react-components/react-breadcrumb-preview/stories/Breadcrumb/BreadcrumbDefault.stories.tsx
@@ -9,19 +9,33 @@ export const Default = () => {
<>
- Item 1
+
+ Item 1
+
- }>Item 2
+ }
+ >
+ Item 2
+
- Item 3
+
+ Item 3
+
- Item 4
+
+ Item 4
+
>
diff --git a/packages/react-components/react-breadcrumb-preview/stories/Breadcrumb/BreadcrumbSize.stories.tsx b/packages/react-components/react-breadcrumb-preview/stories/Breadcrumb/BreadcrumbSize.stories.tsx
index 91867407fb9682..a622a3823ce325 100644
--- a/packages/react-components/react-breadcrumb-preview/stories/Breadcrumb/BreadcrumbSize.stories.tsx
+++ b/packages/react-components/react-breadcrumb-preview/stories/Breadcrumb/BreadcrumbSize.stories.tsx
@@ -54,7 +54,9 @@ export const BreadcrumbSize = () => {
- Item 4
+ } current>
+ Item 4
+
>
diff --git a/packages/react-components/react-breadcrumb-preview/stories/Breadcrumb/index.stories.tsx b/packages/react-components/react-breadcrumb-preview/stories/Breadcrumb/index.stories.tsx
index 44608200e1cd1b..35d99714ef5a3e 100644
--- a/packages/react-components/react-breadcrumb-preview/stories/Breadcrumb/index.stories.tsx
+++ b/packages/react-components/react-breadcrumb-preview/stories/Breadcrumb/index.stories.tsx
@@ -3,7 +3,6 @@ import { Breadcrumb, BreadcrumbButton, BreadcrumbItem, BreadcrumbDivider } from
import descriptionMd from './BreadcrumbDescription.md';
import bestPracticesMd from './BreadcrumbBestPractices.md';
export { Default } from './BreadcrumbDefault.stories';
-export { BreadcrumbButtonWithHrefAttribute } from './BreadcrumbButtonWithHrefAttribute.stories';
export { BreadcrumbSize } from './BreadcrumbSize.stories';
export { FocusModeArrow } from './BreadcrumbFocusMode.stories';
export { BreadcrumbWithOverflow } from './BreadcrumbWithOverflow.stories';