|
@@ -59,10 +59,13 @@ function BreadcrumbItem({
|
|
|
<BreadcrumbIcon type={crumb.type} />
|
|
|
</IconWrapper>
|
|
|
<CrumbDetails>
|
|
|
- <Title>{title}</Title>
|
|
|
+ <TitleContainer>
|
|
|
+ <Title>{title}</Title>
|
|
|
+ <PlayerRelativeTime relativeTime={startTimestamp} timestamp={crumb.timestamp} />
|
|
|
+ </TitleContainer>
|
|
|
+
|
|
|
<Description title={description}>{description}</Description>
|
|
|
</CrumbDetails>
|
|
|
- <PlayerRelativeTime relativeTime={startTimestamp} timestamp={crumb.timestamp} />
|
|
|
</CrumbItem>
|
|
|
);
|
|
|
}
|
|
@@ -71,19 +74,28 @@ const CrumbDetails = styled('div')`
|
|
|
display: flex;
|
|
|
flex-direction: column;
|
|
|
overflow: hidden;
|
|
|
- line-height: 1.2;
|
|
|
- padding: ${space(1)} 0;
|
|
|
+`;
|
|
|
+
|
|
|
+const TitleContainer = styled('div')`
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ gap: ${space(1)};
|
|
|
`;
|
|
|
|
|
|
const Title = styled('span')`
|
|
|
${p => p.theme.overflowEllipsis};
|
|
|
text-transform: capitalize;
|
|
|
+ font-weight: 600;
|
|
|
+ color: ${p => p.theme.gray400};
|
|
|
+ line-height: ${p => p.theme.text.lineHeightBody};
|
|
|
`;
|
|
|
|
|
|
const Description = styled('span')`
|
|
|
${p => p.theme.overflowEllipsis};
|
|
|
font-size: 0.7rem;
|
|
|
font-variant-numeric: tabular-nums;
|
|
|
+ line-height: ${p => p.theme.text.lineHeightBody};
|
|
|
+ color: ${p => p.theme.subText};
|
|
|
`;
|
|
|
|
|
|
type CrumbItemProps = {
|
|
@@ -93,32 +105,39 @@ type CrumbItemProps = {
|
|
|
|
|
|
const CrumbItem = styled(PanelItem)<CrumbItemProps>`
|
|
|
display: grid;
|
|
|
- grid-template-columns: max-content max-content auto max-content;
|
|
|
- align-items: center;
|
|
|
+ grid-template-columns: max-content auto;
|
|
|
+ align-items: flex-start;
|
|
|
gap: ${space(1)};
|
|
|
width: 100%;
|
|
|
|
|
|
font-size: ${p => p.theme.fontSizeMedium};
|
|
|
background: transparent;
|
|
|
- padding: 0;
|
|
|
- padding-right: ${space(1)};
|
|
|
+ padding: ${space(1)};
|
|
|
text-align: left;
|
|
|
-
|
|
|
border: none;
|
|
|
- border-bottom: 1px solid ${p => p.theme.innerBorder};
|
|
|
- ${p => p.isHovered && `background: ${p.theme.surface400};`}
|
|
|
-
|
|
|
- /* overrides PanelItem css */
|
|
|
- &:last-child {
|
|
|
- border-bottom: 1px solid ${p => p.theme.innerBorder};
|
|
|
- }
|
|
|
+ position: relative;
|
|
|
+ ${p => p.isSelected && `background-color: ${p.theme.purple100};`}
|
|
|
+ ${p => p.isHovered && `background-color: ${p.theme.surface100};`}
|
|
|
+ border-radius: ${p => p.theme.borderRadius};
|
|
|
|
|
|
- /* Selected state */
|
|
|
- ::before {
|
|
|
+ /* Draw a vertical line behind the breadcrumb icon. The line connects each row together, but is truncated for the first and last items */
|
|
|
+ &::after {
|
|
|
content: '';
|
|
|
- width: 4px;
|
|
|
+ position: absolute;
|
|
|
+ left: 19.5px;
|
|
|
+ width: 1px;
|
|
|
+ background: ${p => p.theme.gray200};
|
|
|
height: 100%;
|
|
|
- ${p => p.isSelected && `background-color: ${p.theme.purple300};`}
|
|
|
+ }
|
|
|
+
|
|
|
+ &:first-of-type::after {
|
|
|
+ top: ${space(1)};
|
|
|
+ bottom: 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ &:last-of-type::after {
|
|
|
+ top: 0;
|
|
|
+ height: ${space(1)};
|
|
|
}
|
|
|
`;
|
|
|
|
|
@@ -129,13 +148,14 @@ const IconWrapper = styled('div')<Required<Pick<SVGIconProps, 'color'>>>`
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
justify-content: center;
|
|
|
- width: 22px;
|
|
|
- height: 22px;
|
|
|
+ width: 24px;
|
|
|
+ height: 24px;
|
|
|
border-radius: 50%;
|
|
|
color: ${p => p.theme.white};
|
|
|
background: ${p => p.theme[p.color] ?? p.color};
|
|
|
box-shadow: ${p => p.theme.dropShadowLightest};
|
|
|
position: relative;
|
|
|
+ z-index: ${p => p.theme.zIndex.initial};
|
|
|
`;
|
|
|
|
|
|
const MemoizedBreadcrumbItem = memo(BreadcrumbItem);
|