diff --git a/src/layout/Breadcrumbs/Breadcrumbs.story.tsx b/src/layout/Breadcrumbs/Breadcrumbs.story.tsx new file mode 100644 index 00000000..aa4ceb24 --- /dev/null +++ b/src/layout/Breadcrumbs/Breadcrumbs.story.tsx @@ -0,0 +1,33 @@ +import { Breadcrumbs } from './Breadcrumbs'; + +export default { + title: 'Components/Layout/Breadcrumbs', + component: Breadcrumbs +}; + +export const Basic = () => ( + +); + +export const WithCustomSeparator = () => ( + +); diff --git a/src/layout/Breadcrumbs/Breadcrumbs.tsx b/src/layout/Breadcrumbs/Breadcrumbs.tsx new file mode 100644 index 00000000..b79f7892 --- /dev/null +++ b/src/layout/Breadcrumbs/Breadcrumbs.tsx @@ -0,0 +1,65 @@ +import { cn, useComponentTheme } from '@/utils'; +import React, { FC } from 'react'; +import { BreadcrumbsTheme } from './BreadcrumbsTheme'; + +export interface BreadcrumbsProps extends React.HTMLAttributes { + breadcrumbs: { label: string; href: string }[]; + seperator?: React.ReactNode; + theme?: BreadcrumbsTheme; +} + +const Chevron = () => ( + + + +); + +export const Breadcrumbs: FC = ({ + breadcrumbs, + seperator = , + theme: customTheme, + ...rest +}) => { + const theme = useComponentTheme('breadcrumbs', customTheme); + + return ( + + ); +}; diff --git a/src/layout/Breadcrumbs/BreadcrumbsTheme.ts b/src/layout/Breadcrumbs/BreadcrumbsTheme.ts new file mode 100644 index 00000000..eb65c93e --- /dev/null +++ b/src/layout/Breadcrumbs/BreadcrumbsTheme.ts @@ -0,0 +1,14 @@ +export interface BreadcrumbsTheme { + base: string; + breadcrumb: string; + activeBreadcrumb: string; +} + +export const breadcrumbsTheme: BreadcrumbsTheme = { + base: 'flex gap-2 items-center', + breadcrumb: + 'hover:text-panel-content text-panel-secondary-content transition-colors', + activeBreadcrumb: 'text-primary pointer-events-none' +}; + +export const legacyBreadcrumbTheme: BreadcrumbsTheme = breadcrumbsTheme; diff --git a/src/layout/Breadcrumbs/index.ts b/src/layout/Breadcrumbs/index.ts new file mode 100644 index 00000000..d9888f1e --- /dev/null +++ b/src/layout/Breadcrumbs/index.ts @@ -0,0 +1,2 @@ +export * from './Breadcrumbs'; +export * from './BreadcrumbsTheme'; diff --git a/src/layout/index.ts b/src/layout/index.ts index ce38e960..5f9f2ec7 100644 --- a/src/layout/index.ts +++ b/src/layout/index.ts @@ -8,3 +8,4 @@ export * from './Stack'; export * from './Tree'; export * from './VerticalSpacer'; export * from './Tabs'; +export * from './Breadcrumbs'; diff --git a/src/utils/Theme/themes/theme.ts b/src/utils/Theme/themes/theme.ts index 039978c2..9aed6b56 100644 --- a/src/utils/Theme/themes/theme.ts +++ b/src/utils/Theme/themes/theme.ts @@ -112,7 +112,10 @@ import { legacyDividerTheme, JsonTreeTheme, jsonTreeTheme, - legacyJsonTreeTheme + legacyJsonTreeTheme, + breadcrumbsTheme, + BreadcrumbsTheme, + legacyBreadcrumbTheme } from '@/layout'; import { @@ -182,6 +185,7 @@ export interface ReablocksTheme { popover: PopoverTheme; pager: PagerTheme; tabs: TabsTheme; + breadcrumbs: BreadcrumbsTheme; }; } @@ -227,7 +231,8 @@ export const theme: ReablocksTheme = { popover: popoverTheme, pager: pagerTheme, tabs: tabsTheme, - jsonTree: jsonTreeTheme + jsonTree: jsonTreeTheme, + breadcrumbs: breadcrumbsTheme } }; @@ -273,6 +278,7 @@ export const legacyThemeVars: ReablocksTheme = { popover: legacyPopoverTheme, pager: legacyPagerTheme, tabs: legacyTabsTheme, - jsonTree: legacyJsonTreeTheme + jsonTree: legacyJsonTreeTheme, + breadcrumbs: legacyBreadcrumbTheme } };