Skip to content

Commit 71d38cb

Browse files
web-padawanjouni
andauthored
refactor: update side-nav and side-nav-item base styles (#10096)
Co-authored-by: Jouni Koivuviita <jouni@vaadin.com>
1 parent 17c1322 commit 71d38cb

20 files changed

+40
-20
lines changed

dev/side-nav.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<meta charset="UTF-8" />
55
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
66
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
7-
<title>Side nav</title>
7+
<title>Side Nav</title>
88
<script type="module" src="./common.js"></script>
99
<script type="module">
1010
import '@vaadin/icon';

packages/side-nav/src/styles/vaadin-side-nav-base-styles.js

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,17 +26,35 @@ const sideNav = css`
2626
line-height: var(--vaadin-side-nav-label-line-height, inherit);
2727
border-radius: var(--vaadin-side-nav-item-border-radius, var(--vaadin-radius-m));
2828
touch-action: manipulation;
29+
min-width: 0;
30+
max-width: 100%;
31+
}
32+
33+
::slotted([slot='label']) {
34+
min-width: 0;
35+
overflow: hidden;
36+
text-overflow: ellipsis;
37+
margin: 0;
2938
}
3039
`;
3140

3241
export const sideNavStyles = [sharedStyles, sideNav];
3342

3443
export const sideNavSlotStyles = css`
35-
:where(vaadin-side-nav:has(vaadin-icon[slot='prefix'])) {
36-
--_has-prefix-icon: '';
44+
:where(vaadin-side-nav:has(> vaadin-side-nav-item > vaadin-icon[slot='prefix']))::part(children),
45+
:where(vaadin-side-nav-item:has(> vaadin-side-nav-item[slot='children'] > vaadin-icon[slot='prefix']))::part(
46+
children
47+
) {
48+
--_icon-indent: calc(var(--_icon-indent-2, 0) + 1);
49+
}
50+
51+
:where(vaadin-side-nav-item:has(> vaadin-icon[slot='prefix']))::part(content) {
52+
--_icon-indent: calc(var(--_icon-indent-2) - 1);
3753
}
3854
39-
:where(vaadin-side-nav-item:has(> vaadin-icon[slot='prefix']))::part(link) {
40-
--_has-prefix-icon:;
55+
:where(
56+
vaadin-side-nav-item:has(> vaadin-icon[slot='prefix']):has(> vaadin-side-nav-item > vaadin-icon[slot='prefix'])
57+
)::part(children) {
58+
--_level: var(--_level-2, 0);
4159
}
4260
`;

packages/side-nav/src/styles/vaadin-side-nav-item-base-styles.js

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,11 @@ const sideNavItem = css`
1212
[part='content'] {
1313
display: flex;
1414
align-items: center;
15+
min-width: 0;
16+
max-width: 100%;
1517
padding: var(--vaadin-side-nav-item-padding, var(--vaadin-padding-container));
16-
gap: var(--vaadin-side-nav-item-gap, var(--vaadin-gap-s));
18+
--_gap: var(--vaadin-side-nav-item-gap, var(--vaadin-gap-s));
19+
gap: var(--_gap);
1720
font-size: var(--vaadin-side-nav-item-font-size, 1em);
1821
font-weight: var(--vaadin-side-nav-item-font-weight, 500);
1922
line-height: var(--vaadin-side-nav-item-line-height, inherit);
@@ -69,14 +72,6 @@ const sideNavItem = css`
6972
flex: none;
7073
}
7174
72-
/* Reserved space for icon */
73-
slot[name='prefix']::before {
74-
content: var(--_has-prefix-icon);
75-
display: block;
76-
width: var(--vaadin-icon-size, 1lh);
77-
flex: none;
78-
}
79-
8075
[part='content']:not(:has([href])):has([part='toggle-button']:focus-visible),
8176
[part='content']:has(:not([part='toggle-button']):focus-visible),
8277
[part='content']:has([href]) [part='toggle-button']:focus-visible {
@@ -90,18 +85,19 @@ const sideNavItem = css`
9085
/* Hierarchy indentation */
9186
[part='content']::before {
9287
content: '';
93-
--_hierarchy-indent: calc(var(--_level, 0) * var(--vaadin-side-nav-child-indent, var(--vaadin-icon-size, 1lh)));
94-
--_icon-indent: calc(var(--_level, 0) * var(--vaadin-side-nav-item-gap, var(--vaadin-gap-s)));
95-
width: calc(var(--_hierarchy-indent) + var(--_icon-indent));
88+
width: calc(
89+
var(--vaadin-side-nav-child-indent, 1em) * var(--_level, 0) + var(--_icon-indent, 0) *
90+
(var(--vaadin-icon-size, 1lh) + var(--_gap))
91+
);
9692
flex: none;
97-
margin-inline-start: calc(var(--vaadin-side-nav-item-gap, var(--vaadin-gap-s)) * -1);
93+
margin-inline-start: calc(var(--_gap) * -1);
9894
}
9995
100-
slot[name='children'] {
96+
[part='children'] {
10197
--_level: calc(var(--_level-2, 0) + 1);
10298
}
10399
104-
slot[name='children']::slotted(*) {
100+
[part='children'] ::slotted(*) {
105101
--_level-2: var(--_level);
106102
}
107103

packages/side-nav/src/styles/vaadin-side-nav-shared-base-styles.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ export const sharedStyles = css`
1010
:host {
1111
display: flex;
1212
flex-direction: column;
13+
min-width: 0;
14+
max-width: 100%;
1315
gap: var(--vaadin-side-nav-items-gap, var(--vaadin-gap-s));
1416
cursor: default;
1517
-webkit-tap-highlight-color: transparent;
@@ -79,6 +81,10 @@ export const sharedStyles = css`
7981
gap: var(--vaadin-side-nav-items-gap, var(--vaadin-gap-s));
8082
}
8183
84+
[part='children'] slot {
85+
--_icon-indent-2: var(--_icon-indent);
86+
}
87+
8288
:focus-visible {
8389
outline: var(--vaadin-focus-ring-width) solid var(--vaadin-focus-ring-color);
8490
}
4 Bytes
Loading
6 Bytes
Loading
5 Bytes
Loading
4 Bytes
Loading
3 Bytes
Loading
5 Bytes
Loading

0 commit comments

Comments
 (0)