@itwin/itwinui-css 0.46.0 → 0.48.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -167,4 +167,27 @@
167
167
  margin-left: $iui-s;
168
168
  }
169
169
  }
170
+
171
+ &.iui-borderless {
172
+ &,
173
+ .iui-header,
174
+ .iui-expandable-content {
175
+ background-color: transparent;
176
+ border: initial;
177
+ }
178
+
179
+ .iui-header {
180
+ border-radius: $iui-border-radius;
181
+
182
+ &:hover {
183
+ @include themed {
184
+ background-color: rgba(t(iui-color-foreground-body-rgb), t(iui-opacity-6));
185
+ }
186
+ }
187
+ }
188
+
189
+ .iui-expandable-content > div {
190
+ padding: 0;
191
+ }
192
+ }
170
193
  }
package/scss/index.scss CHANGED
@@ -39,3 +39,4 @@
39
39
  @import './tree/index';
40
40
  @import './user-icon/index';
41
41
  @import './wizard/index';
42
+ @import './skip-to-content/index';
@@ -15,64 +15,24 @@
15
15
  color: rgba(t(iui-color-foreground-body-rgb), t(iui-opacity-2));
16
16
  }
17
17
 
18
- > input {
19
- width: 0;
20
- height: 0;
21
- appearance: none;
22
- opacity: 0;
23
- position: absolute;
24
- }
25
-
26
- &.iui-disabled {
27
- cursor: not-allowed;
28
- }
29
-
30
- .iui-checkbox-checkmark,
31
- .iui-radio-dot {
32
- width: $iui-icons-default;
33
- height: $iui-icons-default;
34
- margin: 0;
35
- display: flex;
36
- flex-shrink: 0;
37
- justify-content: center;
38
- align-items: center;
39
- position: relative;
40
- isolation: isolate;
41
- @include themed {
42
- border-color: rgba(t(iui-color-foreground-body-rgb), t(iui-opacity-4));
43
- background-color: t(iui-color-background-1);
44
- }
18
+ gap: $iui-s;
45
19
 
46
- &::after {
47
- content: '';
48
- position: absolute;
49
- inset: 0;
50
- z-index: -1;
51
- transition: border-color $iui-speed-fast ease-out;
52
- border-radius: inherit;
53
- border-style: solid;
54
- border-width: 1px;
55
- border-color: inherit;
20
+ // #region flex gap fallback
21
+ > * + * {
22
+ margin-left: $iui-s;
23
+ @supports (gap: $iui-s) {
24
+ margin-left: 0;
56
25
  }
26
+ }
27
+ // #endregion
57
28
 
58
- svg:not(.iui-radial) {
59
- width: 100%;
60
- height: 100%;
61
- @include themed {
62
- fill: t(iui-icons-color-primary);
63
- }
64
-
65
- > * {
66
- opacity: 0;
67
- @media (prefers-reduced-motion: no-preference) {
68
- transition: opacity $iui-speed-fast ease;
69
- }
70
- }
71
- }
29
+ &.iui-loading {
30
+ cursor: wait;
31
+ color: var(--iui-text-color-muted);
72
32
  }
73
33
 
74
- > .iui-label {
75
- margin-right: $iui-s;
34
+ > .iui-checkbox-label,
35
+ > .iui-radio-label {
76
36
  display: flex;
77
37
  align-items: center;
78
38
 
@@ -80,95 +40,16 @@
80
40
  width: $iui-icons-default;
81
41
  height: $iui-icons-default;
82
42
  vertical-align: middle;
83
- @include themed {
84
- fill: t(iui-icons-color-actionable);
85
- }
43
+ fill: currentColor;
86
44
  }
87
45
  }
88
46
 
89
- // For labels on the left
90
- .iui-checkbox-checkmark ~ .iui-label,
91
- .iui-radio-dot ~ .iui-label {
92
- margin-left: $iui-s;
93
- margin-right: 0;
94
- }
95
-
96
- // Adds hover to everything that is not disabled
97
- &:hover > input:enabled ~ .iui-checkbox-checkmark,
98
- &:hover > input:enabled ~ .iui-radio-dot {
99
- @include themed {
100
- border-color: rgba(t(iui-color-foreground-body-rgb), t(iui-opacity-2));
101
- }
102
- }
103
-
104
- // Selected checkboxes & radios border opacity increase
105
- input:checked ~ .iui-checkbox-checkmark,
106
- input:indeterminate ~ .iui-checkbox-checkmark,
107
- input:checked ~ .iui-radio-dot {
108
- @include themed {
109
- border-color: rgba(t(iui-color-foreground-body-rgb), t(iui-opacity-3));
110
- }
111
- }
112
-
113
- // Show check, partial, or dot depending on type
114
- input:checked ~ .iui-checkbox-checkmark .iui-check,
115
- input:indeterminate ~ .iui-checkbox-checkmark .iui-check-partial,
116
- input:checked ~ .iui-radio-dot circle {
117
- opacity: 1;
118
- @media (prefers-reduced-motion: no-preference) {
119
- transition: opacity $iui-speed-fast ease;
120
- }
121
- }
122
-
123
- // Adds focus to enabled checkbox & radio
124
- input:enabled {
125
- &:focus {
126
- ~ .iui-checkbox-checkmark,
127
- ~ .iui-radio-dot {
128
- @include themed {
129
- outline: 2px solid t(iui-color-foreground-primary);
130
- }
131
- outline-offset: -1px;
132
- }
133
- }
134
-
135
- &:focus:not(:focus-visible) {
136
- ~ .iui-checkbox-checkmark,
137
- ~ .iui-radio-dot {
138
- outline: none;
139
- }
140
- }
141
- }
142
-
143
- // Styles disabled checkbox & radio
144
- input:disabled ~ .iui-checkbox-checkmark,
145
- input:disabled ~ .iui-radio-dot {
146
- cursor: not-allowed;
147
- @include themed {
148
- background-color: t(iui-color-background-disabled);
149
- border-color: t(iui-color-background-disabled);
150
- }
151
- }
152
-
153
- // Styles disabled checks
154
- input:disabled ~ .iui-checkbox-checkmark svg,
155
- input:disabled ~ .iui-radio-dot svg {
156
- @include themed {
157
- fill: t(iui-icons-color-actionable-disabled);
158
- }
159
- }
160
-
161
- // Styles disabled labels
162
- input:disabled ~ .iui-label {
47
+ &.iui-disabled {
163
48
  cursor: not-allowed;
164
- @include themed {
165
- color: t(iui-text-color-muted);
166
- }
49
+ color: var(--iui-text-color-muted);
167
50
 
168
51
  svg {
169
- @include themed {
170
- fill: t(iui-icons-color-actionable-disabled);
171
- }
52
+ fill: var(--iui-icons-color-actionable-disabled);
172
53
  }
173
54
  }
174
55
 
@@ -4,63 +4,97 @@
4
4
  @import '../icon/index';
5
5
 
6
6
  @mixin iui-checkbox {
7
- @include iui-inputs-checkbox-radio;
7
+ &-wrapper {
8
+ @include iui-inputs-checkbox-radio;
9
+ }
10
+
11
+ --_iui-checkbox-checkmark-svg: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="m6.5 12.5-4.5-4.5 1.5-1.5 3 3 6-6 1.5 1.5z" /></svg>');
12
+ --_iui-checkbox-indeterminate-svg: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="m2.75 6.875h10.5v2.25h-10.5z" /></svg>');
13
+ --_iui-checkbox-unchecked-svg: url('data:image/svg+xml;utf8,<svg viewBox="0 0 16 16"></svg>');
14
+
15
+ --_iui-checkbox-svg-color: var(--iui-color-foreground-primary);
16
+ --_iui-checkbox-border-color: rgba(var(--iui-color-foreground-body-rgb), var(--iui-opacity-4));
17
+ --_iui-checkbox-background-color: var(--iui-color-background-1);
18
+ --_iui-checkbox-mask-image: initial;
8
19
 
9
- .iui-checkbox-checkmark {
10
- border-radius: $iui-border-radius;
20
+ appearance: none; // disable default browser styles
21
+ margin: 0;
22
+ width: $iui-icons-default;
23
+ height: $iui-icons-default;
24
+ position: relative;
25
+ border-radius: $iui-border-radius;
26
+ background-color: var(--_iui-checkbox-background-color);
27
+ cursor: pointer;
28
+
29
+ &::before {
30
+ content: '';
31
+ position: absolute;
32
+ inset: 0;
33
+ transition: border-color $iui-speed-fast ease-out;
34
+ border-radius: inherit;
35
+ border-style: solid;
36
+ border-width: 1px;
37
+ border-color: var(--_iui-checkbox-border-color);
11
38
  }
12
39
 
13
- &.iui-loading {
14
- cursor: wait;
40
+ &::after {
41
+ content: '';
42
+ position: absolute;
43
+ inset: 0;
44
+ background-color: var(--_iui-checkbox-svg-color);
45
+ mask: var(--_iui-checkbox-mask-image) no-repeat center;
46
+ }
15
47
 
16
- input ~ .iui-checkbox-checkmark {
17
- border-color: transparent;
18
- background-color: transparent;
19
- }
48
+ &:not(:checked) {
49
+ --_iui-checkbox-mask-image: var(--_iui-checkbox-unchecked-svg);
50
+ }
20
51
 
21
- input:disabled ~ .iui-checkbox-checkmark {
22
- cursor: wait;
23
- }
52
+ &:checked {
53
+ --_iui-checkbox-border-color: rgba(var(--iui-color-foreground-body-rgb), var(--iui-opacity-3));
54
+ --_iui-checkbox-mask-image: var(--_iui-checkbox-checkmark-svg);
55
+ }
24
56
 
25
- input:disabled ~ .iui-label {
26
- cursor: wait;
27
- }
57
+ &:indeterminate {
58
+ --_iui-checkbox-border-color: rgba(var(--iui-color-foreground-body-rgb), var(--iui-opacity-3));
59
+ --_iui-checkbox-mask-image: var(--_iui-checkbox-indeterminate-svg);
28
60
  }
29
61
 
30
- &-visibility {
31
- // Adds hover to everything that is not disabled
32
- &:hover > input:enabled ~ .iui-checkbox-checkmark {
33
- @include themed {
34
- background-color: rgba(t(iui-color-foreground-body-rgb), t(iui-opacity-6));
35
- }
36
- }
62
+ &:hover {
63
+ --_iui-checkbox-border-color: rgba(var(--iui-color-foreground-body-rgb), var(--iui-opacity-2));
64
+ }
37
65
 
38
- input ~ .iui-checkbox-checkmark::after,
39
- &:hover > input:enabled ~ .iui-checkbox-checkmark::after {
40
- border: none;
41
- }
66
+ @include iui-focus($thickness: 2px);
42
67
 
43
- input ~ .iui-checkbox-checkmark {
44
- background-color: transparent;
45
- }
68
+ &.iui-checkbox-visibility {
69
+ --_iui-checkbox-checkmark-svg: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="m8 2.99051a8.81883 8.81883 0 0 0 -8 4.95062 8.74664 8.74664 0 0 0 8 5.06836 8.63266 8.63266 0 0 0 8-5.06836 8.83631 8.83631 0 0 0 -8-4.95062zm-1.31445 1.86981a1.47663 1.47663 0 1 1 -1.47663 1.47668 1.47665 1.47665 0 0 1 1.47663-1.47668zm1.31445 6.64917a7.17486 7.17486 0 0 1 -6.30475-3.55237 7.4952 7.4952 0 0 1 2.81475-2.6336 3.83956 3.83956 0 1 0 6.98126.00244 7.522 7.522 0 0 1 2.81774 2.63916 7.09785 7.09785 0 0 1 -6.309 3.54437z" /></svg>');
70
+ --_iui-checkbox-indeterminate-svg: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="m8 3v7.9a4.01179 4.01179 0 0 0 4-4 6.7509 6.7509 0 0 0 -.2-1.4l.1.1a6.89429 6.89429 0 0 1 2.4 2.4 8.39088 8.39088 0 0 1 -2.3 2.3 6.89412 6.89412 0 0 1 -3.9 1.2c-.03345 0-.06653-.00677-.1-.0072v1.5072a8.90686 8.90686 0 0 0 8-5 8.90686 8.90686 0 0 0 -8-5z" opacity=".33" /><path d="m8 0a1 1 0 0 0 -1 1v2.07135a8.91637 8.91637 0 0 0 -7 4.92865 8.91637 8.91637 0 0 0 7 4.92865v2.07135a1 1 0 0 0 2 0v-14a1 1 0 0 0 -1-1zm-1.5 4.9a1.55426 1.55426 0 0 1 .5.087v2.81451a1.40746 1.40746 0 0 1 -.5.09849 1.538 1.538 0 0 1 -1.5-1.5 1.53794 1.53794 0 0 1 1.5-1.5zm-2.3 5.4a6.97279 6.97279 0 0 1 -2.5-2.3 6.89429 6.89429 0 0 1 2.4-2.4c.1 0 .1-.1.2-.1a3.194 3.194 0 0 0 -.3 1.4 4.0047 4.0047 0 0 0 3 3.857v.65289a6.37491 6.37491 0 0 1 -2.8-1.10989z" /></svg>');
71
+ --_iui-checkbox-unchecked-svg: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="m1.70671 12.879 11.17218-11.17219 1.4142 1.4142-11.17218 11.17218zm.99329-1.679 1.1-1.1a5.06317 5.06317 0 0 1 -2-2.1 7.48268 7.48268 0 0 1 6.2-3.5 4.86877 4.86877 0 0 1 1.2.1l1.3-1.3a10.07431 10.07431 0 0 0 -2.5-.3 8.84129 8.84129 0 0 0 -8 5 8.42455 8.42455 0 0 0 2.7 3.2zm10.7-6.4-1.1 1.1a7.08625 7.08625 0 0 1 2 2.1 7.50323 7.50323 0 0 1 -6.2 3.5 8.31665 8.31665 0 0 1 -1.3-.2l-1.3 1.3a8.909 8.909 0 0 0 6.4-.5 9.04344 9.04344 0 0 0 4.1-4.1 9.168 9.168 0 0 0 -2.6-3.2z" /></svg>');
46
72
 
47
- input:checked ~ .iui-checkbox-checkmark .iui-uncheck,
48
- input:indeterminate ~ .iui-checkbox-checkmark .iui-uncheck {
49
- opacity: 0;
50
- }
73
+ --_iui-checkbox-border-color: transparent;
74
+ --_iui-checkbox-background-color: transparent;
51
75
 
52
- input ~ .iui-checkbox-checkmark .iui-uncheck {
53
- opacity: 1;
54
- transition: opacity $iui-speed-fast ease;
55
- @include themed {
56
- fill: t(iui-icons-color-actionable);
57
- }
76
+ &:where(:not(:checked):not(:indeterminate)) {
77
+ --_iui-checkbox-svg-color: var(--iui-icons-color-actionable);
58
78
  }
59
79
 
60
- input:disabled ~ .iui-checkbox-checkmark .iui-uncheck {
61
- @include themed {
62
- fill: t(iui-icons-color-actionable-disabled);
63
- }
80
+ &:where(:hover) {
81
+ --_iui-checkbox-border-color: transparent;
82
+ --_iui-checkbox-background-color: rgba(var(--iui-color-foreground-body-rgb), var(--iui-opacity-6));
64
83
  }
65
84
  }
85
+
86
+ &:disabled {
87
+ --_iui-checkbox-svg-color: var(--iui-icons-color-actionable-disabled);
88
+ --_iui-checkbox-border-color: var(--iui-color-background-disabled);
89
+ --_iui-checkbox-background-color: var(--iui-color-background-disabled);
90
+ cursor: not-allowed;
91
+ }
92
+
93
+ &.iui-loading {
94
+ --_iui-checkbox-border-color: transparent;
95
+ --_iui-checkbox-background-color: transparent;
96
+ opacity: 0;
97
+ position: absolute;
98
+ cursor: wait;
99
+ }
66
100
  }
@@ -66,8 +66,8 @@
66
66
  // #endregion
67
67
 
68
68
  // Appropriate spacing even if no text label is given
69
- .iui-checkbox,
70
- .iui-radio {
69
+ .iui-checkbox-wrapper,
70
+ .iui-radio-wrapper {
71
71
  min-height: $iui-line-height;
72
72
  }
73
73
 
@@ -259,6 +259,8 @@
259
259
  margin-right: 0;
260
260
  border-top-left-radius: 0;
261
261
  border-bottom-left-radius: 0;
262
+ border-top-right-radius: inherit;
263
+ border-bottom-right-radius: inherit;
262
264
  }
263
265
 
264
266
  &.iui-actionable {
@@ -3,9 +3,20 @@
3
3
  @import '../style/index';
4
4
 
5
5
  @mixin iui-radio {
6
- @include iui-inputs-checkbox-radio;
6
+ &-wrapper {
7
+ @include iui-inputs-checkbox-radio;
8
+ }
9
+
10
+ @include iui-checkbox;
11
+
12
+ border-radius: 50%;
13
+
14
+ &:checked {
15
+ --_iui-checkbox-mask-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" ><circle cx="8" cy="8" r="4" /></svg>');
16
+ }
7
17
 
8
- .iui-radio-dot {
9
- border-radius: 50%;
18
+ &:not(:checked),
19
+ &:indeterminate {
20
+ --_iui-checkbox-mask-image: var(--_iui-checkbox-unchecked-svg);
10
21
  }
11
22
  }
@@ -4,17 +4,18 @@
4
4
 
5
5
  // tippy.js helper class to hide Popover when it is scrolled out of view
6
6
  @mixin iui-popover {
7
- &[data-reference-hidden] {
8
- visibility: hidden;
9
- pointer-events: none;
10
- }
11
-
12
- // Resets tippy.js default stylings that interfere with our own
13
7
  /* stylelint-disable-next-line selector-class-pattern */
14
8
  &.tippy-box {
9
+ &[data-reference-hidden] {
10
+ visibility: visible;
11
+ pointer-events: auto;
12
+ }
13
+
14
+ // Resets tippy.js default stylings that interfere with our own
15
15
  all: revert;
16
16
  }
17
17
 
18
+ // Resets tippy.js default stylings that interfere with our own
18
19
  /* stylelint-disable-next-line selector-class-pattern */
19
20
  .tippy-content {
20
21
  all: revert;
@@ -84,6 +84,9 @@
84
84
  overflow: hidden;
85
85
  justify-content: flex-start;
86
86
 
87
+ // Adds stripe to the left of active button
88
+ --_iui-button-active-stripe-inset: 0 calc(100% - #{$iui-xxs}) 0 0;
89
+
87
90
  &:not(.iui-expand) {
88
91
  height: $iui-baseline * 5;
89
92
  // iPhone notch support
@@ -118,12 +121,6 @@
118
121
  }
119
122
  }
120
123
 
121
- &.iui-active {
122
- @include themed {
123
- box-shadow: inset $iui-xxs 0 0 0 t(iui-icons-color-primary);
124
- }
125
- }
126
-
127
124
  &[disabled],
128
125
  &:disabled {
129
126
  @include themed {
@@ -0,0 +1,7 @@
1
+ // Copyright (c) Bentley Systems, Incorporated. All rights reserved.
2
+ // See LICENSE.md in the project root for license terms and full copyright notice.
3
+ @import './index';
4
+
5
+ .iui-skip-to-content-link {
6
+ @include iui-skip-to-content-link;
7
+ }
@@ -0,0 +1,3 @@
1
+ // Copyright (c) Bentley Systems, Incorporated. All rights reserved.
2
+ // See LICENSE.md in the project root for license terms and full copyright notice.
3
+ @import './skip-to-content';
@@ -0,0 +1,37 @@
1
+ // Copyright (c) Bentley Systems, Incorporated. All rights reserved.
2
+ // See LICENSE.md in the project root for license terms and full copyright notice.
3
+ @import '../style/index';
4
+
5
+ @mixin iui-skip-to-content-link {
6
+ @include iui-blur($opacity: 3);
7
+ @include iui-focus($offset: 2px, $thickness: 2px);
8
+ @include themed {
9
+ color: t(iui-color-foreground-accessory);
10
+ }
11
+ border-radius: $iui-border-radius-round;
12
+ text-decoration: none;
13
+ user-select: none;
14
+ padding: ($iui-baseline * 0.75) $iui-m;
15
+ position: fixed;
16
+ text-align: center;
17
+ left: 50%;
18
+ top: $iui-baseline * 2;
19
+ transform: translateX(-50%) translateY(-170%);
20
+ transition: background-color $iui-speed-fast ease-in-out;
21
+ @media (prefers-reduced-motion: no-preference) {
22
+ transition: background-color $iui-speed-fast ease-in-out, transform $iui-speed-slow ease-in-out,
23
+ box-shadow $iui-speed-fast ease-in-out;
24
+ }
25
+
26
+ &:hover {
27
+ @include iui-blur($opacity: 2);
28
+ }
29
+
30
+ &:focus {
31
+ transform: translateX(-50%) translateY(0);
32
+ box-shadow: $iui-elevation-16;
33
+ @media (prefers-reduced-motion: no-preference) {
34
+ transition: transform $iui-speed-fast ease-in-out;
35
+ }
36
+ }
37
+ }
@@ -114,10 +114,8 @@
114
114
 
115
115
  // With blur
116
116
  @supports (backdrop-filter: $iui-blur-filter) {
117
- @include themed() {
118
- background-color: rgba(0, 0, 0, t(iui-opacity-#{$opacity}));
119
- backdrop-filter: $iui-blur-filter;
120
- }
117
+ background-color: rgba(0, 0, 0, var(--iui-opacity-#{$opacity}));
118
+ backdrop-filter: $iui-blur-filter;
121
119
  }
122
120
  }
123
121
 
@@ -130,6 +128,33 @@
130
128
  padding: 0;
131
129
  }
132
130
 
131
+ /// Visually hides an element but keeps it accessible to screen readers.
132
+ /// Because it applies some potentially invasive styles, use this mixin on a wrapper element for best results.
133
+ /// If it contains a focusable element, make sure to revert/exclude these styles.
134
+ @mixin visually-hidden {
135
+ clip-path: inset(50%);
136
+ overflow: hidden;
137
+ position: absolute;
138
+ white-space: nowrap;
139
+ height: 1px;
140
+ width: 1px;
141
+ padding: 0;
142
+ margin: -1px;
143
+ border-width: 0;
144
+ }
145
+
146
+ /// Reverts visually-hidden styles, making it visible again.
147
+ @mixin visually-hidden-revert {
148
+ clip-path: revert;
149
+ overflow: visible;
150
+ position: static;
151
+ white-space: normal;
152
+ height: auto;
153
+ width: auto;
154
+ padding: 0;
155
+ margin: 0;
156
+ }
157
+
133
158
  /// Classes for react-transition-group
134
159
  /// Used for expand/collapse transitions. Needs height/width to be set in JS.
135
160
  @mixin iui-transition-group {
@@ -5,6 +5,7 @@
5
5
  @import '../icon/variables';
6
6
 
7
7
  $iui-border-radius: 3px;
8
+ $iui-border-radius-round: 9999px;
8
9
  $iui-blur-filter: blur(5px);
9
10
 
10
11
  $iui-component-offset: 3px;
@@ -63,17 +63,9 @@
63
63
  }
64
64
 
65
65
  @mixin iui-paginator-pages-group {
66
- @include iui-button-group;
66
+ display: inline-flex;
67
+ align-items: center;
67
68
  margin: 0 $iui-s;
68
-
69
- > * + * {
70
- margin-left: 0; // unset negative margin from button-group
71
- }
72
-
73
- button.iui-active::after {
74
- top: auto;
75
- bottom: $iui-xxs;
76
- }
77
69
  }
78
70
 
79
71
  @mixin iui-paginator-page-button {
@@ -81,6 +73,9 @@
81
73
  @include iui-button-borderless;
82
74
  width: $iui-component-height;
83
75
 
76
+ // Adds stripe above active button
77
+ --_iui-button-active-stripe-inset: calc(100% - #{$iui-xs}) #{$iui-xxs} #{$iui-xxs};
78
+
84
79
  &-small {
85
80
  @include iui-button-size(small);
86
81
  width: $iui-component-height-small;
@@ -33,3 +33,7 @@
33
33
  .iui-tile-content {
34
34
  @include iui-tile-content;
35
35
  }
36
+
37
+ .iui-tile-more-options {
38
+ @include iui-tile-more-options;
39
+ }
@@ -11,6 +11,7 @@
11
11
  width: $iui-3xl * 3;
12
12
  box-shadow: $iui-elevation-2;
13
13
  backface-visibility: hidden;
14
+ @include iui-focus($offset: $iui-xxs, $thickness: $iui-xxs);
14
15
  @include themed() {
15
16
  background-color: t(iui-color-background-1);
16
17
  color: t(iui-text-color);
@@ -18,12 +19,13 @@
18
19
 
19
20
  &:hover,
20
21
  &:focus-within {
21
- .iui-tile-metadata:not(:last-child) {
22
- width: calc(100% - #{$iui-xl});
22
+ .iui-tile-more-options {
23
+ @include visually-hidden-revert;
24
+ position: absolute;
23
25
  }
24
26
 
25
- .iui-tile-more-options {
26
- visibility: visible;
27
+ .iui-tile-metadata:not(:last-child) {
28
+ width: calc(100% - #{$iui-xl});
27
29
  }
28
30
 
29
31
  .iui-tile-thumbnail-picture {
@@ -39,6 +41,7 @@
39
41
  }
40
42
 
41
43
  &.iui-selected {
44
+ @include iui-focus($offset: 0, $thickness: $iui-xs);
42
45
  @include themed() {
43
46
  outline: solid 2px t(iui-color-foreground-primary);
44
47
  background: linear-gradient(
@@ -150,18 +153,6 @@
150
153
  text-overflow: ellipsis;
151
154
  }
152
155
  }
153
-
154
- .iui-tile-more-options {
155
- @include iui-button-size(small, borderless);
156
- position: absolute;
157
- bottom: $iui-baseline * 0.5;
158
- right: $iui-s;
159
- visibility: hidden;
160
-
161
- &.iui-visible {
162
- visibility: visible;
163
- }
164
- }
165
156
  }
166
157
 
167
158
  @mixin iui-tile-thumbnail {
@@ -312,3 +303,13 @@
312
303
  }
313
304
  }
314
305
  }
306
+
307
+ @mixin iui-tile-more-options {
308
+ position: absolute;
309
+ bottom: $iui-baseline * 0.5;
310
+ right: $iui-s;
311
+
312
+ &:not(.iui-visible) {
313
+ @include visually-hidden;
314
+ }
315
+ }
@@ -10,6 +10,10 @@
10
10
  @include iui-sub-tree;
11
11
  }
12
12
 
13
+ .iui-tree-item {
14
+ @include iui-tree-item;
15
+ }
16
+
13
17
  .iui-tree-node {
14
18
  @include iui-tree-node;
15
19
  }