Skip to content

Commit decb1b7

Browse files
d13eamodio
authored andcommitted
Updates breadcrumb styles
- alignment updates - focus handling and styles
1 parent d4c7896 commit decb1b7

File tree

1 file changed

+88
-76
lines changed

1 file changed

+88
-76
lines changed

src/webviews/apps/shared/components/breadcrumbs.ts

Lines changed: 88 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { customElement, property, state } from 'lit/decorators.js';
33
import { classMap } from 'lit/directives/class-map.js';
44
import './code-icon';
55
import './overlays/tooltip';
6+
import { focusableBaseStyles } from './styles/lit/a11y.css';
67

78
export type CollapsibleState = 'none' | 'collapsed' | 'expanded';
89

@@ -57,81 +58,90 @@ export class GlBreadcrumbs extends LitElement {
5758

5859
@customElement('gl-breadcrumb-item')
5960
export class GlBreadcrumbItem extends LitElement {
60-
static override styles = css`
61-
* {
62-
box-sizing: border-box;
63-
}
64-
65-
:host {
66-
display: flex;
67-
flex-direction: row;
68-
align-items: center;
69-
gap: 0.4rem;
70-
white-space: nowrap;
71-
overflow: hidden;
72-
min-width: 0;
73-
flex-shrink: var(--gl-breadcrumb-item-shrink, 1);
74-
}
75-
76-
:host([icon]) {
77-
min-width: calc(24px + 0.6rem);
78-
}
79-
80-
:host(:hover) {
81-
flex-shrink: 0;
82-
}
83-
84-
.breadcrumb-item {
85-
display: flex;
86-
flex-direction: row;
87-
align-items: center;
88-
gap: 0.4rem;
89-
white-space: nowrap;
90-
overflow: hidden;
91-
min-width: 0;
92-
width: 100%;
93-
}
94-
95-
.breadcrumb-content {
96-
display: inline-flex;
97-
align-items: center;
98-
gap: 0.6rem;
99-
vertical-align: middle;
100-
}
101-
102-
.breadcrumb-icon {
103-
flex-shrink: 0;
104-
z-index: 2;
105-
}
106-
107-
.collapsible .breadcrumb-icon {
108-
cursor: pointer;
109-
}
110-
111-
.breadcrumb-label {
112-
display: inline-block;
113-
overflow: hidden;
114-
text-overflow: ellipsis;
115-
white-space: nowrap;
116-
max-width: 100vw;
117-
transition: max-width 0.3s cubic-bezier(0.25, 1, 0.5, 1);
118-
}
119-
120-
slot[name='children'] {
121-
display: flex;
122-
flex-direction: row;
123-
align-items: center;
124-
gap: 0.4rem;
125-
overflow: hidden;
126-
max-width: 100vw;
127-
transition: max-width 0.3s cubic-bezier(0.25, 1, 0.5, 1);
128-
}
129-
130-
:host([collapsed]) .breadcrumb-item:not(:hover) .breadcrumb-label,
131-
:host([collapsed]) .breadcrumb-item:not(:hover) slot[name='children'] {
132-
max-width: 0;
133-
}
134-
`;
61+
static override styles = [
62+
focusableBaseStyles,
63+
css`
64+
* {
65+
box-sizing: border-box;
66+
}
67+
68+
:host {
69+
display: flex;
70+
flex-direction: row;
71+
align-items: center;
72+
gap: 0.4rem;
73+
white-space: nowrap;
74+
overflow: hidden;
75+
min-width: 0;
76+
flex-shrink: var(--gl-breadcrumb-item-shrink, 1);
77+
}
78+
79+
:host([icon]) {
80+
min-width: calc(24px + 0.6rem);
81+
}
82+
83+
:host(:hover) {
84+
flex-shrink: 0;
85+
}
86+
87+
.breadcrumb-item {
88+
display: flex;
89+
flex-direction: row;
90+
align-items: center;
91+
gap: 0.4rem;
92+
white-space: nowrap;
93+
overflow: hidden;
94+
min-width: 0;
95+
width: 100%;
96+
}
97+
98+
.breadcrumb-content {
99+
display: inline-flex;
100+
align-items: center;
101+
gap: 0.6rem;
102+
vertical-align: middle;
103+
}
104+
105+
.breadcrumb-icon {
106+
flex-shrink: 0;
107+
z-index: 2;
108+
}
109+
110+
.collapsible .breadcrumb-icon {
111+
cursor: pointer;
112+
}
113+
114+
.breadcrumb-label {
115+
display: inline-block;
116+
overflow: hidden;
117+
text-overflow: ellipsis;
118+
white-space: nowrap;
119+
max-width: 100vw;
120+
transition: max-width 0.3s cubic-bezier(0.25, 1, 0.5, 1);
121+
}
122+
123+
.breadcrumb-tooltip {
124+
display: inline-flex;
125+
align-items: center;
126+
vertical-align: middle;
127+
}
128+
129+
slot[name='children'] {
130+
display: flex;
131+
flex-direction: row;
132+
align-items: center;
133+
gap: 0.4rem;
134+
overflow: hidden;
135+
max-width: 100vw;
136+
transition: max-width 0.3s cubic-bezier(0.25, 1, 0.5, 1);
137+
}
138+
139+
:host([collapsed]) .breadcrumb-item:not(:hover) .breadcrumb-label,
140+
:host([collapsed]) .breadcrumb-item:not(:hover) slot[name='children'] {
141+
max-width: 0;
142+
}
143+
`,
144+
];
135145

136146
@state()
137147
private _collapsed: boolean | undefined;
@@ -182,19 +192,21 @@ export class GlBreadcrumbItem extends LitElement {
182192
<code-icon
183193
class="breadcrumb-icon"
184194
icon="${this.icon}"
195+
tabindex="0"
185196
@click=${collapsible ? this.onToggleCollapse : undefined}
186197
></code-icon>
187198
</gl-tooltip>
188199
<gl-tooltip class="breadcrumb-label" content="${this.tooltip}" placement="bottom">
189200
<span><slot></slot></span>
190201
</gl-tooltip>
191202
</span>`
192-
: html`<gl-tooltip content="${this.tooltip}" placement="bottom">
203+
: html`<gl-tooltip class="breadcrumb-tooltip" content="${this.tooltip}" placement="bottom">
193204
<span class="breadcrumb-content">
194205
${this.icon
195206
? html`<code-icon
196207
class="breadcrumb-icon"
197208
icon="${this.icon}"
209+
tabindex="0"
198210
@click=${collapsible ? this.onToggleCollapse : undefined}
199211
></code-icon>`
200212
: nothing}

0 commit comments

Comments
 (0)