@itwin/itwinui-css 0.39.1 → 0.42.0

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.
Files changed (40) hide show
  1. package/css/all.css +607 -362
  2. package/css/breadcrumbs.css +31 -15
  3. package/css/button.css +279 -189
  4. package/css/code.css +2 -0
  5. package/css/header.css +50 -30
  6. package/css/inputs.css +26 -40
  7. package/css/side-navigation.css +27 -24
  8. package/css/table.css +34 -23
  9. package/css/tile.css +51 -40
  10. package/css/tree.css +107 -0
  11. package/css/user-icon.css +3 -1
  12. package/package.json +1 -1
  13. package/scss/breadcrumbs/breadcrumbs.scss +1 -1
  14. package/scss/button/borderless.scss +37 -39
  15. package/scss/button/button-group.scss +54 -47
  16. package/scss/button/button-icon.scss +12 -0
  17. package/scss/button/button.scss +27 -32
  18. package/scss/button/classes.scss +25 -3
  19. package/scss/button/cta.scss +31 -21
  20. package/scss/button/default.scss +40 -45
  21. package/scss/button/disabled.scss +3 -14
  22. package/scss/button/high-visibility.scss +31 -21
  23. package/scss/button/index.scss +1 -0
  24. package/scss/button/split-menu.scss +39 -20
  25. package/scss/classes.scss +1 -0
  26. package/scss/code/codeblock.scss +4 -0
  27. package/scss/header/header.scss +38 -18
  28. package/scss/index.scss +1 -0
  29. package/scss/inputs/checkbox-radio.scss +1 -3
  30. package/scss/inputs/checkbox.scss +5 -2
  31. package/scss/inputs/classes.scss +2 -2
  32. package/scss/inputs/labeled-inputs.scss +3 -3
  33. package/scss/side-navigation/side-navigation.scss +27 -22
  34. package/scss/table/paginator.scss +34 -21
  35. package/scss/table/table.scss +12 -8
  36. package/scss/tile/tile.scss +4 -2
  37. package/scss/tree/classes.scss +15 -0
  38. package/scss/tree/index.scss +3 -0
  39. package/scss/tree/tree.scss +137 -0
  40. package/scss/user-icon/user-icon.scss +3 -0
package/css/tile.css CHANGED
@@ -32,57 +32,65 @@
32
32
  border-bottom:1px solid var(--iui-color-background-4); }
33
33
  .iui-tile .iui-thumbnail > .iui-type-indicator,
34
34
  .iui-tile .iui-thumbnail > .iui-quick-action{
35
- background-color:transparent;
36
35
  border-color:transparent;
36
+ background-color:transparent;
37
37
  padding:0 8px;
38
+ height:38px;
39
+ gap:8px;
40
+ padding:0 2px;
41
+ height:27px;
42
+ gap:4px;
38
43
  position:absolute;
39
44
  border-radius:50%;
40
45
  top:6px; }
41
- .iui-tile .iui-thumbnail > .iui-type-indicator.iui-small,
42
- .iui-tile .iui-thumbnail > .iui-quick-action.iui-small{
43
- padding:0 2px; }
44
- .iui-tile .iui-thumbnail > .iui-type-indicator.iui-large,
45
- .iui-tile .iui-thumbnail > .iui-quick-action.iui-large{
46
- padding:0 12px; }
47
- .iui-tile .iui-thumbnail > .iui-type-indicator > .iui-icon:only-child,
48
- .iui-tile .iui-thumbnail > .iui-quick-action > .iui-icon:only-child{
46
+ .iui-tile .iui-thumbnail > .iui-type-indicator > .iui-button-icon:only-child,
47
+ .iui-tile .iui-thumbnail > .iui-quick-action > .iui-button-icon:only-child{
49
48
  margin-left:3px;
50
49
  margin-right:3px; }
51
- .iui-tile .iui-thumbnail > .iui-type-indicator:enabled:hover, .iui-tile .iui-thumbnail > .iui-type-indicator:enabled:active, .iui-tile .iui-thumbnail > .iui-type-indicator:focus-visible,
52
- .iui-tile .iui-thumbnail > .iui-quick-action:enabled:hover,
53
- .iui-tile .iui-thumbnail > .iui-quick-action:enabled:active,
54
- .iui-tile .iui-thumbnail > .iui-quick-action:focus-visible{
50
+ .iui-tile .iui-thumbnail > .iui-type-indicator:focus,
51
+ .iui-tile .iui-thumbnail > .iui-quick-action:focus{
52
+ background-color:rgba(0, 0, 0, 0.1);
53
+ border-color:transparent;
54
+ background-color:rgba(var(--iui-color-foreground-body-rgb), var(--iui-opacity-6));
55
+ border-color:transparent; }
56
+ .iui-tile .iui-thumbnail > .iui-type-indicator:focus:where(:not(:focus-visible)),
57
+ .iui-tile .iui-thumbnail > .iui-quick-action:focus:where(:not(:focus-visible)){
58
+ border-color:transparent;
59
+ background-color:transparent; }
60
+ .iui-tile .iui-thumbnail > .iui-type-indicator:focus:where(:not(:focus-visible)) > .iui-button-icon:only-child,
61
+ .iui-tile .iui-thumbnail > .iui-quick-action:focus:where(:not(:focus-visible)) > .iui-button-icon:only-child{
62
+ margin-left:3px;
63
+ margin-right:3px; }
64
+ .iui-tile .iui-thumbnail > .iui-type-indicator:hover,
65
+ .iui-tile .iui-thumbnail > .iui-quick-action:hover{
55
66
  background-color:rgba(0, 0, 0, 0.1);
56
67
  border-color:transparent;
57
68
  background-color:rgba(var(--iui-color-foreground-body-rgb), var(--iui-opacity-6));
58
69
  border-color:transparent; }
59
- .iui-tile .iui-thumbnail > .iui-type-indicator.iui-active:not(.iui-high-visibility):not(.iui-cta):enabled, .iui-tile .iui-thumbnail > .iui-type-indicator.iui-active:not(.iui-high-visibility):not(.iui-cta):enabled:hover, .iui-tile .iui-thumbnail > .iui-type-indicator.iui-active:not(.iui-high-visibility):not(.iui-cta):enabled:active,
60
- .iui-tile .iui-thumbnail > .iui-quick-action.iui-active:not(.iui-high-visibility):not(.iui-cta):enabled,
61
- .iui-tile .iui-thumbnail > .iui-quick-action.iui-active:not(.iui-high-visibility):not(.iui-cta):enabled:hover,
62
- .iui-tile .iui-thumbnail > .iui-quick-action.iui-active:not(.iui-high-visibility):not(.iui-cta):enabled:active{
63
- background:transparent;
70
+ .iui-tile .iui-thumbnail > .iui-type-indicator.iui-active,
71
+ .iui-tile .iui-thumbnail > .iui-quick-action.iui-active{
64
72
  background-color:rgba(0, 139, 225, 0.1);
73
+ color:#008BE1;
65
74
  background-color:rgba(var(--iui-color-foreground-primary-rgb), var(--iui-opacity-6));
75
+ color:var(--iui-color-foreground-primary);
66
76
  border-color:transparent; }
67
- .iui-tile .iui-thumbnail > .iui-type-indicator[disabled], .iui-tile .iui-thumbnail > .iui-type-indicator[disabled]:hover, .iui-tile .iui-thumbnail > .iui-type-indicator[disabled]:active, .iui-tile .iui-thumbnail > .iui-type-indicator[disabled]:focus,
77
+ .iui-tile .iui-thumbnail > .iui-type-indicator[disabled], .iui-tile .iui-thumbnail > .iui-type-indicator:disabled,
68
78
  .iui-tile .iui-thumbnail > .iui-quick-action[disabled],
69
- .iui-tile .iui-thumbnail > .iui-quick-action[disabled]:hover,
70
- .iui-tile .iui-thumbnail > .iui-quick-action[disabled]:active,
71
- .iui-tile .iui-thumbnail > .iui-quick-action[disabled]:focus{
79
+ .iui-tile .iui-thumbnail > .iui-quick-action:disabled{
80
+ cursor:not-allowed;
81
+ background:#EEF0F3;
82
+ border-color:#EEF0F3;
83
+ color:rgba(0, 0, 0, 0.2);
84
+ background:var(--iui-color-background-disabled);
85
+ border-color:var(--iui-color-background-disabled);
86
+ color:rgba(var(--iui-color-foreground-body-rgb), var(--iui-opacity-5));
87
+ background-color:transparent;
88
+ border-color:transparent;
72
89
  background-color:transparent;
73
90
  border-color:transparent; }
74
- .iui-tile .iui-thumbnail > .iui-type-indicator[disabled] > .iui-icon, .iui-tile .iui-thumbnail > .iui-type-indicator[disabled]:hover > .iui-icon, .iui-tile .iui-thumbnail > .iui-type-indicator[disabled]:active > .iui-icon, .iui-tile .iui-thumbnail > .iui-type-indicator[disabled]:focus > .iui-icon,
75
- .iui-tile .iui-thumbnail > .iui-quick-action[disabled] > .iui-icon,
76
- .iui-tile .iui-thumbnail > .iui-quick-action[disabled]:hover > .iui-icon,
77
- .iui-tile .iui-thumbnail > .iui-quick-action[disabled]:active > .iui-icon,
78
- .iui-tile .iui-thumbnail > .iui-quick-action[disabled]:focus > .iui-icon{
79
- fill:rgba(0, 0, 0, 0.2);
80
- fill:var(--iui-icons-color-actionable-disabled); }
81
- .iui-tile .iui-thumbnail > .iui-type-indicator[disabled].iui-active, .iui-tile .iui-thumbnail > .iui-type-indicator[disabled]:hover.iui-active, .iui-tile .iui-thumbnail > .iui-type-indicator[disabled]:active.iui-active, .iui-tile .iui-thumbnail > .iui-type-indicator[disabled]:focus.iui-active,
91
+ .iui-tile .iui-thumbnail > .iui-type-indicator[disabled].iui-active, .iui-tile .iui-thumbnail > .iui-type-indicator:disabled.iui-active,
82
92
  .iui-tile .iui-thumbnail > .iui-quick-action[disabled].iui-active,
83
- .iui-tile .iui-thumbnail > .iui-quick-action[disabled]:hover.iui-active,
84
- .iui-tile .iui-thumbnail > .iui-quick-action[disabled]:active.iui-active,
85
- .iui-tile .iui-thumbnail > .iui-quick-action[disabled]:focus.iui-active{
93
+ .iui-tile .iui-thumbnail > .iui-quick-action:disabled.iui-active{
86
94
  background-color:rgba(0, 0, 0, 0.05);
87
95
  background-color:rgba(var(--iui-color-foreground-body-rgb), 0.05); }
88
96
  .iui-tile .iui-thumbnail > .iui-type-indicator{
@@ -155,8 +163,8 @@
155
163
  backdrop-filter:blur(5px);
156
164
  background-color:rgba(0, 0, 0, var(--iui-opacity-5));
157
165
  backdrop-filter:blur(5px); } }
158
- .iui-tile .iui-thumbnail > .iui-picture + .iui-button:enabled > .iui-icon,
159
- .iui-tile .iui-thumbnail > .iui-picture + .iui-button + .iui-button:enabled > .iui-icon{
166
+ .iui-tile .iui-thumbnail > .iui-picture + .iui-button:enabled > .iui-button-icon,
167
+ .iui-tile .iui-thumbnail > .iui-picture + .iui-button + .iui-button:enabled > .iui-button-icon{
160
168
  fill:#FFF;
161
169
  filter:drop-shadow(0 2px 1px rgba(0, 0, 0, 0.2));
162
170
  fill:var(--iui-color-foreground-accessory);
@@ -168,11 +176,11 @@
168
176
  .iui-tile .iui-thumbnail > .iui-picture + .iui-button + .iui-button.iui-active:active{
169
177
  background-color:rgba(0, 0, 0, 0.4);
170
178
  background-color:rgba(0, 0, 0, var(--iui-opacity-4)); }
171
- .iui-tile .iui-thumbnail > .iui-picture + .iui-button:hover > .iui-icon, .iui-tile .iui-thumbnail > .iui-picture + .iui-button.iui-active:enabled > .iui-icon, .iui-tile .iui-thumbnail > .iui-picture + .iui-button.iui-active:enabled:hover > .iui-icon, .iui-tile .iui-thumbnail > .iui-picture + .iui-button.iui-active:active > .iui-icon,
172
- .iui-tile .iui-thumbnail > .iui-picture + .iui-button + .iui-button:hover > .iui-icon,
173
- .iui-tile .iui-thumbnail > .iui-picture + .iui-button + .iui-button.iui-active:enabled > .iui-icon,
174
- .iui-tile .iui-thumbnail > .iui-picture + .iui-button + .iui-button.iui-active:enabled:hover > .iui-icon,
175
- .iui-tile .iui-thumbnail > .iui-picture + .iui-button + .iui-button.iui-active:active > .iui-icon{
179
+ .iui-tile .iui-thumbnail > .iui-picture + .iui-button:hover .iui-button-icon, .iui-tile .iui-thumbnail > .iui-picture + .iui-button.iui-active:enabled .iui-button-icon, .iui-tile .iui-thumbnail > .iui-picture + .iui-button.iui-active:enabled:hover .iui-button-icon, .iui-tile .iui-thumbnail > .iui-picture + .iui-button.iui-active:active .iui-button-icon,
180
+ .iui-tile .iui-thumbnail > .iui-picture + .iui-button + .iui-button:hover .iui-button-icon,
181
+ .iui-tile .iui-thumbnail > .iui-picture + .iui-button + .iui-button.iui-active:enabled .iui-button-icon,
182
+ .iui-tile .iui-thumbnail > .iui-picture + .iui-button + .iui-button.iui-active:enabled:hover .iui-button-icon,
183
+ .iui-tile .iui-thumbnail > .iui-picture + .iui-button + .iui-button.iui-active:active .iui-button-icon{
176
184
  fill:#FFF;
177
185
  fill:var(--iui-color-foreground-accessory); }
178
186
  .iui-tile > .iui-content{
@@ -275,6 +283,9 @@
275
283
  overflow:hidden;
276
284
  text-overflow:ellipsis; }
277
285
  .iui-tile > .iui-content > .iui-more-options{
286
+ padding:0 2px;
287
+ height:27px;
288
+ gap:4px;
278
289
  position:absolute;
279
290
  bottom:5.5px;
280
291
  right:8px;
package/css/tree.css ADDED
@@ -0,0 +1,107 @@
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ .iui-tree{
6
+ margin:0;
7
+ padding:0;
8
+ border:none;
9
+ vertical-align:baseline;
10
+ list-style:none; }
11
+
12
+ .iui-sub-tree{
13
+ margin:0;
14
+ padding:0;
15
+ border:none;
16
+ vertical-align:baseline;
17
+ list-style:none; }
18
+
19
+ .iui-tree-node{
20
+ display:flex;
21
+ cursor:pointer;
22
+ padding:0 8px; }
23
+ .iui-tree-node-checkbox{
24
+ margin-right:8px; }
25
+ .iui-tree-node-content{
26
+ display:flex;
27
+ align-items:center;
28
+ box-sizing:border-box;
29
+ min-height:33px;
30
+ margin-left:calc(28px * (var(--level, 0)));
31
+ overflow:hidden;
32
+ padding-left:2px; }
33
+ .iui-tree-node-content-icon{
34
+ fill:rgba(0, 0, 0, 0.4);
35
+ fill:var(--iui-icons-color);
36
+ display:inline-flex;
37
+ width:16px;
38
+ height:16px;
39
+ padding:0 6px;
40
+ flex-shrink:0; }
41
+ .iui-tree-node-content-icon.iui-informational{
42
+ fill:#008BE1;
43
+ fill:var(--iui-icons-color-primary); }
44
+ .iui-tree-node-content-icon.iui-positive{
45
+ fill:#53A21A;
46
+ fill:var(--iui-icons-color-positive); }
47
+ .iui-tree-node-content-icon.iui-warning{
48
+ fill:#F18B12;
49
+ fill:var(--iui-icons-color-warning); }
50
+ .iui-tree-node-content-icon.iui-negative{
51
+ fill:#D30A0A;
52
+ fill:var(--iui-icons-color-negative); }
53
+ .iui-tree-node-content-icon:first-child{
54
+ margin-left:28px; }
55
+ @media (prefers-reduced-motion: no-preference){
56
+ .iui-tree-node-content-expander-icon{
57
+ transition:transform 0.2s ease-out; } }
58
+ .iui-tree-node-content-expander-icon-expanded{
59
+ transform:rotate(90deg); }
60
+ .iui-tree-node-content-label{
61
+ min-width:0;
62
+ padding-left:6px; }
63
+ .iui-tree-node-content-label:first-child{
64
+ margin-left:28px; }
65
+ .iui-tree-node-content-title, .iui-tree-node-content-caption{
66
+ white-space:nowrap;
67
+ overflow:hidden;
68
+ text-overflow:ellipsis; }
69
+ .iui-tree-node-content-title{
70
+ font-size:14px; }
71
+ .iui-tree-node-content-caption{
72
+ font-size:12px;
73
+ color:rgba(0, 0, 0, 0.4);
74
+ color:var(--iui-text-color-muted); }
75
+ .iui-tree-node:focus{
76
+ outline:thin solid rgba(0, 139, 225, 0.4);
77
+ outline-offset:-1px;
78
+ outline:thin solid rgba(var(--iui-color-foreground-primary-rgb), var(--iui-opacity-4));
79
+ outline-offset:-1px; }
80
+ .iui-tree-node:focus:not(:focus-visible){
81
+ outline-offset:-2px; }
82
+ .iui-tree-node:hover{
83
+ background-color:rgba(0, 139, 225, 0.1);
84
+ background-color:rgba(var(--iui-color-foreground-primary-rgb), var(--iui-opacity-6)); }
85
+ .iui-tree-node:hover .iui-tree-node-content-caption{
86
+ color:#000;
87
+ color:var(--iui-color-foreground-body);
88
+ transition:color 0.2s ease; }
89
+ .iui-tree-node.iui-active{
90
+ background-color:rgba(0, 139, 225, 0.2);
91
+ outline:thin solid var(--iui-color-foreground-primary);
92
+ outline-offset:-1px;
93
+ background-color:rgba(var(--iui-color-foreground-primary-rgb), var(--iui-opacity-5));
94
+ outline:thin solid var(--iui-color-foreground-primary);
95
+ outline-offset:-1px; }
96
+ .iui-tree-node.iui-active:focus{
97
+ outline-width:2px;
98
+ outline-offset:-2px; }
99
+ .iui-tree-node.iui-disabled{
100
+ cursor:not-allowed;
101
+ outline:none;
102
+ background-color:transparent;
103
+ color:rgba(0, 0, 0, 0.2);
104
+ color:var(--iui-text-color-placeholder); }
105
+ .iui-tree-node.iui-disabled .iui-tree-node-content-caption{
106
+ color:rgba(0, 0, 0, 0.2);
107
+ color:var(--iui-text-color-placeholder); }
package/css/user-icon.css CHANGED
@@ -65,7 +65,9 @@
65
65
  width:100%;
66
66
  height:100%;
67
67
  border-width:0;
68
- border-radius:50%; }
68
+ border-radius:50%;
69
+ background-color:#FFF;
70
+ background-color:var(--iui-color-background-1); }
69
71
  .iui-user-icon > .iui-status{
70
72
  display:flex;
71
73
  align-items:center;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@itwin/itwinui-css",
3
- "version": "0.39.1",
3
+ "version": "0.42.0",
4
4
  "author": "Bentley Systems",
5
5
  "license": "MIT",
6
6
  "main": "src/index.scss",
@@ -35,7 +35,7 @@
35
35
  }
36
36
 
37
37
  > *,
38
- .iui-label {
38
+ .iui-button-label {
39
39
  overflow: hidden;
40
40
  white-space: nowrap;
41
41
  text-overflow: ellipsis;
@@ -2,59 +2,40 @@
2
2
  // See LICENSE.md in the project root for license terms and full copyright notice.
3
3
  @import '../style/index';
4
4
  @import './button';
5
+ @import './disabled';
6
+ @import './button-icon';
5
7
 
6
8
  @mixin iui-button-borderless {
7
- background-color: transparent;
8
- border-color: transparent;
9
- padding: 0 $iui-s;
9
+ @include iui-button-borderless-base;
10
+ @include iui-button-size(medium, borderless);
10
11
 
11
- // Sizes
12
- &.iui-small {
13
- padding: 0 $iui-xxs;
14
- }
12
+ &:focus {
13
+ @include iui-button-borderless-hover-focus;
15
14
 
16
- &.iui-large {
17
- padding: 0 $iui-sm;
15
+ &:where(:not(:focus-visible)) {
16
+ @include iui-button-borderless-base;
17
+ }
18
18
  }
19
19
 
20
- // If icon is by itself, button takes 1:1 size ratio
21
- > .iui-icon:only-child {
22
- margin-left: $iui-component-offset;
23
- margin-right: $iui-component-offset;
20
+ &:hover {
21
+ @include iui-button-borderless-hover-focus;
24
22
  }
25
23
 
26
- &:enabled:hover,
27
- &:enabled:active,
28
- &:focus-visible {
24
+ &.iui-active {
29
25
  @include themed {
30
- background-color: rgba(t(iui-color-foreground-body-rgb), t(iui-opacity-6));
31
- border-color: transparent;
32
- }
33
- }
34
-
35
- &.iui-active:not(.iui-high-visibility):not(.iui-cta) {
36
- &:enabled,
37
- &:enabled:hover,
38
- &:enabled:active {
39
- background: transparent;
40
- @include themed {
41
- background-color: rgba(t(iui-color-foreground-primary-rgb), t(iui-opacity-6));
42
- }
43
- border-color: transparent;
26
+ background-color: rgba(t(iui-color-foreground-primary-rgb), t(iui-opacity-6));
27
+ color: t(iui-color-foreground-primary);
44
28
  }
29
+ border-color: transparent;
45
30
  }
46
31
 
47
32
  &[disabled],
48
- &[disabled]:hover,
49
- &[disabled]:active,
50
- &[disabled]:focus {
51
- background-color: transparent;
52
- border-color: transparent;
33
+ &:disabled {
34
+ @include iui-button-disabled;
53
35
 
54
- > .iui-icon {
55
- @include themed {
56
- fill: t(iui-icons-color-actionable-disabled);
57
- }
36
+ @include themed {
37
+ background-color: transparent;
38
+ border-color: transparent;
58
39
  }
59
40
 
60
41
  &.iui-active {
@@ -64,3 +45,20 @@
64
45
  }
65
46
  }
66
47
  }
48
+
49
+ @mixin iui-button-borderless-hover-focus {
50
+ @include themed {
51
+ background-color: rgba(t(iui-color-foreground-body-rgb), t(iui-opacity-6));
52
+ border-color: transparent;
53
+ }
54
+ }
55
+
56
+ @mixin iui-button-borderless-base {
57
+ border-color: transparent;
58
+ background-color: transparent;
59
+
60
+ > .iui-button-icon:only-child {
61
+ margin-left: $iui-component-offset;
62
+ margin-right: $iui-component-offset;
63
+ }
64
+ }
@@ -5,72 +5,79 @@
5
5
  @mixin iui-button-group {
6
6
  display: inline-flex;
7
7
  align-items: center;
8
+ isolation: isolate;
8
9
 
9
- > .iui-button {
10
- &:not(.iui-borderless) {
11
- border-radius: 0;
12
- }
13
-
14
- &:first-of-type:not(.iui-borderless) {
15
- border-top-left-radius: $iui-border-radius;
16
- border-bottom-left-radius: $iui-border-radius;
17
- }
10
+ $childSelector: 'input, button'; // target nested inputs and buttons
18
11
 
19
- &:last-of-type:not(.iui-borderless) {
20
- border-top-right-radius: $iui-border-radius;
21
- border-bottom-right-radius: $iui-border-radius;
22
- }
12
+ > * {
13
+ #{$childSelector} {
14
+ &:hover,
15
+ &:focus,
16
+ &:focus-within {
17
+ position: relative;
18
+ z-index: 1;
19
+ }
23
20
 
24
- &:not(.iui-borderless):not(.iui-cta):not(.iui-high-visibility):not(:last-of-type) {
25
- border-right: none;
26
- }
21
+ &:disabled {
22
+ position: relative;
23
+ z-index: -1;
24
+ }
27
25
 
28
- &:not(.iui-high-visibility):not(.iui-cta):not(.iui-borderless) {
29
- // Border trick for grouped default & disabled buttons
30
- &:enabled {
31
- + :disabled {
26
+ // Adds stripe above active button
27
+ &.iui-active {
28
+ &::after {
29
+ content: '';
30
+ position: absolute;
31
+ height: $iui-xxs;
32
+ opacity: 1;
33
+ top: $iui-xxs;
34
+ left: $iui-xxs;
35
+ width: calc(100% - #{$iui-xs});
32
36
  @include themed {
33
- border-left-color: rgba(t(iui-color-foreground-body-rgb), t(iui-opacity-4));
37
+ background-color: t(iui-color-foreground-primary);
34
38
  }
35
39
  }
36
40
 
37
- &:hover + .iui-button,
38
- &:active + .iui-button,
39
- &:focus-visible + .iui-button {
40
- @include themed {
41
- border-left-color: rgba(t(iui-color-foreground-body-rgb), t(iui-opacity-1));
41
+ &:disabled {
42
+ &::after {
43
+ @include themed {
44
+ background-color: rgba(t(iui-color-foreground-body-rgb), t(iui-opacity-5));
45
+ }
42
46
  }
43
47
  }
44
48
  }
45
49
 
46
- // Border between 2 side-by-side disabled buttons
47
- &:disabled + .iui-button:disabled {
48
- @include themed {
49
- border-left-color: t(iui-color-background-4);
50
- }
50
+ // Reset border radius only for non-borderless items
51
+ &:not(.iui-borderless) {
52
+ border-radius: 0;
51
53
  }
52
54
  }
53
- }
54
55
 
55
- // Adds stripe above active button
56
- > .iui-active {
57
- &::after {
58
- content: '';
59
- position: absolute;
60
- height: $iui-xxs;
61
- opacity: 1;
62
- top: $iui-xxs;
63
- left: $iui-xxs;
64
- width: calc(100% - #{$iui-xs});
65
- @include themed {
66
- background-color: t(iui-color-foreground-primary);
56
+ // Add rounded corners to first and last items
57
+ &:first-child {
58
+ #{$childSelector}:not(.iui-borderless) {
59
+ border-top-left-radius: $iui-border-radius;
60
+ border-bottom-left-radius: $iui-border-radius;
67
61
  }
68
62
  }
69
63
 
70
- &:disabled {
71
- &::after {
64
+ &:last-child {
65
+ #{$childSelector}:not(.iui-borderless) {
66
+ border-top-right-radius: $iui-border-radius;
67
+ border-bottom-right-radius: $iui-border-radius;
68
+ }
69
+ }
70
+
71
+ // Use negative margin to make adjacent borders overlap
72
+ &:not(:last-child) {
73
+ margin-right: -1px;
74
+ }
75
+
76
+ // Add slight border between disabled items
77
+ &:not(:first-child) {
78
+ .iui-default:disabled {
72
79
  @include themed {
73
- background-color: rgba(t(iui-color-foreground-body-rgb), t(iui-opacity-5));
80
+ border-left-color: t(iui-color-background-4);
74
81
  }
75
82
  }
76
83
  }
@@ -0,0 +1,12 @@
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
+ @import '../icon/index';
5
+
6
+ /// Mixin for button icons
7
+ @mixin iui-button-icon {
8
+ width: $iui-icons-default;
9
+ height: $iui-icons-default;
10
+ transition: fill $iui-speed-fast ease-out;
11
+ fill: currentColor;
12
+ }
@@ -2,6 +2,8 @@
2
2
  // See LICENSE.md in the project root for license terms and full copyright notice.
3
3
  @import '../style/index';
4
4
  @import '../icon/index';
5
+ @import './disabled';
6
+ @import './button-icon';
5
7
 
6
8
  $iui-button-padding: $iui-xs * 4;
7
9
  $iui-button-padding-small: $iui-xs * 2;
@@ -32,52 +34,45 @@ $iui-button-padding-large: $iui-xs * 6;
32
34
  border-color $iui-speed-fast ease-out;
33
35
  }
34
36
 
35
- > .iui-icon:not(.iui-user-icon) {
36
- width: $iui-icons-default;
37
- height: $iui-icons-default;
38
- @media (prefers-reduced-motion: no-preference) {
39
- transition: fill $iui-speed-fast ease-out;
40
- }
37
+ @include themed {
38
+ color: rgba(t(iui-color-foreground-body-rgb), t(iui-opacity-2));
41
39
  }
42
40
 
43
- &:enabled:hover {
41
+ &:hover {
44
42
  text-decoration: none;
43
+ @include themed {
44
+ color: rgba(t(iui-color-foreground-body-rgb), t(iui-opacity-1));
45
+ }
45
46
  }
46
47
 
47
48
  @include iui-focus;
48
- @include iui-button-sizes;
49
- }
50
49
 
51
- @mixin iui-button-sizes {
52
- padding: 0 $iui-button-padding;
53
- height: $iui-component-height;
50
+ &[disabled],
51
+ &:disabled {
52
+ @include iui-button-disabled;
53
+ }
54
+ }
54
55
 
55
- > .iui-icon + .iui-label,
56
- > .iui-label + .iui-icon,
57
- > .iui-icon + .iui-icon {
58
- margin-left: $iui-s;
56
+ /// Mixin for applying padding and margins to various button sizes.
57
+ /// @arg size - must be one of: small, medium, large
58
+ /// @arg styleType - must be one of: default, borderless
59
+ @mixin iui-button-size($size: medium, $styleType: default) {
60
+ @if $size == medium {
61
+ padding: if($styleType == 'borderless', 0 $iui-s, 0 $iui-button-padding);
62
+ height: $iui-component-height;
63
+ gap: $iui-s;
59
64
  }
60
65
 
61
- &.iui-small {
62
- padding: 0 $iui-button-padding-small;
66
+ @if $size == small {
67
+ padding: if($styleType == 'borderless', 0 $iui-xxs, 0 $iui-button-padding-small);
63
68
  height: $iui-component-height-small;
64
-
65
- > .iui-icon + .iui-label,
66
- > .iui-label + .iui-icon,
67
- > .iui-icon + .iui-icon {
68
- margin-left: $iui-xs;
69
- }
69
+ gap: $iui-xs;
70
70
  }
71
71
 
72
- &.iui-large {
73
- padding: 0 $iui-button-padding-large;
72
+ @if $size == large {
73
+ padding: if($styleType == 'borderless', 0 $iui-sm, 0 $iui-button-padding-large);
74
74
  height: $iui-component-height-large;
75
75
  font-size: $iui-font-size-leading;
76
-
77
- > .iui-icon + .iui-label,
78
- > .iui-label + .iui-icon,
79
- > .iui-icon + .iui-icon {
80
- margin-left: $iui-sm;
81
- }
76
+ gap: $iui-sm;
82
77
  }
83
78
  }
@@ -4,7 +4,11 @@
4
4
 
5
5
  .iui-button {
6
6
  @include iui-button;
7
- @include iui-button-default;
7
+ @include iui-button-size;
8
+
9
+ &.iui-default {
10
+ @include iui-button-default;
11
+ }
8
12
 
9
13
  &.iui-high-visibility {
10
14
  @include iui-button-high-visibility;
@@ -22,8 +26,22 @@
22
26
  @include iui-button-borderless;
23
27
  }
24
28
 
25
- &[disabled] {
26
- @include iui-button-disabled;
29
+ @include iui-button-size(medium);
30
+
31
+ &.iui-small {
32
+ @include iui-button-size(small);
33
+
34
+ &.iui-borderless {
35
+ @include iui-button-size(small, borderless);
36
+ }
37
+ }
38
+
39
+ &.iui-large {
40
+ @include iui-button-size(large);
41
+
42
+ &.iui-borderless {
43
+ @include iui-button-size(large, borderless);
44
+ }
27
45
  }
28
46
  }
29
47
 
@@ -35,3 +53,7 @@
35
53
  @include iui-button-group;
36
54
  @include iui-button-split-menu;
37
55
  }
56
+
57
+ .iui-button-icon {
58
+ @include iui-button-icon;
59
+ }