summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/_config.scss3
-rw-r--r--src/objects/_action-button.scss69
-rw-r--r--src/objects/_button.scss5
-rw-r--r--tpl/objects/action-button.pug6
-rw-r--r--tpl/views/action-button.pug89
5 files changed, 125 insertions, 47 deletions
diff --git a/src/_config.scss b/src/_config.scss
index 56a74e1..f4f43fd 100644
--- a/src/_config.scss
+++ b/src/_config.scss
@@ -82,6 +82,9 @@ $semantic-colors-common: (
82 --focus-raw: --accent, 82 --focus-raw: --accent,
83 --focus-static: --accent-static, 83 --focus-static: --accent-static,
84 84
85 --light: --white-transparent,
86 --shadow: --black-transparent,
87
85 --border-mute: --base --200, 88 --border-mute: --base --200,
86 --border: --base --300, 89 --border: --base --300,
87 --border-strong: --base --400, 90 --border-strong: --base --400,
diff --git a/src/objects/_action-button.scss b/src/objects/_action-button.scss
index 6286f4e..6dbdc2f 100644
--- a/src/objects/_action-button.scss
+++ b/src/objects/_action-button.scss
@@ -1,14 +1,37 @@
1@use 'iro-sass/src/index' as iro; 1@use 'iro-sass/src/index' as iro;
2@use '../functions' as fn; 2@use '../functions' as fn;
3 3
4$sizes: 'sm' 'lg' 'xl' !default;
5
4@include iro.props-namespace('action-button') { 6@include iro.props-namespace('action-button') {
5 @include iro.props-store(( 7 @include iro.props-store((
6 --dims: ( 8 --dims: (
7 --line-height: 1.4, 9 --line-height: 1.4,
8 --pad-i: fn.global-dim(--size --100), 10 --pad-i: fn.global-dim(--size --150),
11 --pad-i-pill: fn.global-dim(--size --200),
9 --pad-b: fn.global-dim(--size --85), 12 --pad-b: fn.global-dim(--size --85),
10 --border: fn.global-dim(--border --thin), 13 --border: fn.global-dim(--border --thin),
11 --rounding: fn.global-dim(--rounding), 14 --rounding: fn.global-dim(--rounding),
15 --font-size: fn.global-dim(--font-size --100),
16
17 --sm: (
18 --pad-i: fn.global-dim(--size --100),
19 --pad-i-pill: fn.global-dim(--size --150),
20 --pad-b: fn.global-dim(--size --40),
21 --font-size: fn.global-dim(--font-size --75),
22 ),
23 --lg: (
24 --pad-i: fn.global-dim(--size --175),
25 --pad-i-pill: fn.global-dim(--size --225),
26 --pad-b: fn.global-dim(--size --115),
27 --font-size: fn.global-dim(--font-size --150),
28 ),
29 --xl: (
30 --pad-i: fn.global-dim(--size --225),
31 --pad-i-pill: fn.global-dim(--size --300),
32 --pad-b: fn.global-dim(--size --150),
33 --font-size: fn.global-dim(--font-size --200),
34 ),
12 35
13 --key-focus: ( 36 --key-focus: (
14 --border: fn.global-dim(--key-focus --border), 37 --border: fn.global-dim(--key-focus --border),
@@ -27,14 +50,14 @@
27 --border: fn.global-color(--text-mute-more), 50 --border: fn.global-color(--text-mute-more),
28 ), 51 ),
29 --active: ( 52 --active: (
30 --bg: fn.global-color(--border-mute), 53 --bg: fn.global-color(--border),
31 --label: fn.global-color(--heading), 54 --label: fn.global-color(--heading),
32 --border: fn.global-color(--text-mute-more), 55 --border: fn.global-color(--text-mute),
33 ), 56 ),
34 --disabled: ( 57 --disabled: (
35 --bg: fn.global-color(--bg-l1), 58 --bg: fn.global-color(--bg-l1),
36 --label: fn.global-color(--border-strong), 59 --label: fn.global-color(--border-strong),
37 --border: fn.global-color(--border-mute), 60 --border: fn.global-color(--border),
38 ), 61 ),
39 --selected: ( 62 --selected: (
40 --bg: fn.global-color(--text-mute), 63 --bg: fn.global-color(--text-mute),
@@ -73,7 +96,7 @@
73 --label: fn.global-color(--heading), 96 --label: fn.global-color(--heading),
74 ), 97 ),
75 --disabled: ( 98 --disabled: (
76 --label: fn.global-color(--text-disabled), 99 --label: fn.global-color(--border-strong),
77 ), 100 ),
78 ), 101 ),
79 ), 102 ),
@@ -92,7 +115,6 @@
92 text-align: center; 115 text-align: center;
93 text-decoration: none; 116 text-decoration: none;
94 text-overflow: ellipsis; 117 text-overflow: ellipsis;
95 vertical-align: top;
96 white-space: nowrap; 118 white-space: nowrap;
97 119
98 &::after { 120 &::after {
@@ -137,7 +159,6 @@
137 @include iro.bem-modifier('quiet') { 159 @include iro.bem-modifier('quiet') {
138 border-color: transparent; 160 border-color: transparent;
139 background-color: transparent; 161 background-color: transparent;
140 box-shadow: none;
141 color: fn.color(--quiet --disabled --label); 162 color: fn.color(--quiet --disabled --label);
142 163
143 &:link, 164 &:link,
@@ -145,21 +166,18 @@
145 &:enabled { 166 &:enabled {
146 border-color: transparent; 167 border-color: transparent;
147 background-color: transparent; 168 background-color: transparent;
148 box-shadow: none;
149 color: fn.color(--quiet --label); 169 color: fn.color(--quiet --label);
150 170
151 &:hover, 171 &:hover,
152 &:focus-visible { 172 &:focus-visible {
153 border-color: transparent; 173 border-color: transparent;
154 background-color: fn.color(--quiet --hover --bg); 174 background-color: fn.color(--quiet --hover --bg);
155 box-shadow: none;
156 color: fn.color(--quiet --hover --label); 175 color: fn.color(--quiet --hover --label);
157 } 176 }
158 177
159 &:active { 178 &:active {
160 border-color: transparent; 179 border-color: transparent;
161 background-color: fn.color(--quiet --active --bg); 180 background-color: fn.color(--quiet --active --bg);
162 box-shadow: none;
163 color: fn.color(--quiet --active --label); 181 color: fn.color(--quiet --active --label);
164 } 182 }
165 } 183 }
@@ -192,10 +210,37 @@
192 } 210 }
193 } 211 }
194 212
195 @include iro.bem-modifier('round') { 213 @include iro.bem-modifier('pill') {
214 padding-inline: fn.dim(--pad-i-pill);
215 border-radius: 100em;
216
217 &::after {
218 border-radius: 100em;
219 }
220 }
221
222 @each $size in $sizes {
223 @include iro.bem-modifier($size) {
224 padding-block: fn.dim(--#{$size} --pad-b);
225 padding-inline: fn.dim(--#{$size} --pad-i);
226 font-size: fn.dim(--#{$size} --font-size);
227
228 @include iro.bem-modifier('pill') {
229 padding-inline: fn.dim(--#{$size} --pad-i-pill);
230 }
231 }
232 }
233
234 @include iro.bem-modifier('icon') {
196 inline-size: calc(1em * fn.dim(--line-height) + 2 * fn.dim(--pad-b)); 235 inline-size: calc(1em * fn.dim(--line-height) + 2 * fn.dim(--pad-b));
197 padding-inline: 0; 236 padding-inline: 0;
198 border-radius: 100em; 237
238 @each $size in $sizes {
239 @include iro.bem-modifier($size) {
240 inline-size: calc(1em * fn.dim(--line-height) + 2 * fn.dim(--#{$size} --pad-b));
241 padding-inline: 0;
242 }
243 }
199 } 244 }
200 } 245 }
201} 246}
diff --git a/src/objects/_button.scss b/src/objects/_button.scss
index 1c907c0..27d3726 100644
--- a/src/objects/_button.scss
+++ b/src/objects/_button.scss
@@ -2,6 +2,7 @@
2@use 'iro-sass/src/index' as iro; 2@use 'iro-sass/src/index' as iro;
3@use '../functions' as fn; 3@use '../functions' as fn;
4 4
5$sizes: 'sm' 'lg' 'xl' !default;
5$themes: 'accent' 'negative' !default; 6$themes: 'accent' 'negative' !default;
6$static-themes: 'black' 'white' !default; 7$static-themes: 'black' 'white' !default;
7 8
@@ -54,7 +55,6 @@ $static-themes: 'black' 'white' !default;
54 @include iro.bem-modifier('outline') { 55 @include iro.bem-modifier('outline') {
55 border-color: fn.color(list.join($key, --disabled --outline-border)); 56 border-color: fn.color(list.join($key, --disabled --outline-border));
56 background-color: transparent; 57 background-color: transparent;
57 box-shadow: none;
58 } 58 }
59 59
60 @include theme(static-#{$theme}); 60 @include theme(static-#{$theme});
@@ -255,10 +255,9 @@ $static-themes: 'black' 'white' !default;
255 @include iro.bem-modifier('outline') { 255 @include iro.bem-modifier('outline') {
256 border-color: fn.color(--disabled --outline-border); 256 border-color: fn.color(--disabled --outline-border);
257 background-color: transparent; 257 background-color: transparent;
258 box-shadow: none;
259 } 258 }
260 259
261 @each $size in sm lg xl { 260 @each $size in $sizes {
262 @include iro.bem-modifier($size) { 261 @include iro.bem-modifier($size) {
263 padding-block: fn.dim(--#{$size} --pad-b); 262 padding-block: fn.dim(--#{$size} --pad-b);
264 padding-inline: fn.dim(--#{$size} --pad-i); 263 padding-inline: fn.dim(--#{$size} --pad-i);
diff --git a/tpl/objects/action-button.pug b/tpl/objects/action-button.pug
index c0d7582..976a646 100644
--- a/tpl/objects/action-button.pug
+++ b/tpl/objects/action-button.pug
@@ -6,9 +6,13 @@ mixin action-button
6 'o-action-button': true, 6 'o-action-button': true,
7 'u-d-block': attributes.block, 7 'u-d-block': attributes.block,
8 'o-action-button--quiet': attributes.quiet, 8 'o-action-button--quiet': attributes.quiet,
9 'o-action-button--round': attributes.round, 9 'o-action-button--pill': attributes.pill,
10 'o-action-button--icon': !!attributes.icon && !block,
10 'is-selected': attributes.selected 11 'is-selected': attributes.selected
11 } 12 }
13 if (attributes.size) {
14 classes['o-action-button--' + attributes.size] = true
15 }
12 if (attributes.class) { 16 if (attributes.class) {
13 classes[attributes.class] = true; 17 classes[attributes.class] = true;
14 } 18 }
diff --git a/tpl/views/action-button.pug b/tpl/views/action-button.pug
index 8fb4e58..2c94c68 100644
--- a/tpl/views/action-button.pug
+++ b/tpl/views/action-button.pug
@@ -1,31 +1,63 @@
1mixin view-action-button 1mixin view-action-button
2 +view('action-button', 'Action button') 2 +view('action-button', 'Action button')
3 .c-box 3 .c-box
4 +action-button(size='sm')= 'Idle'
5 = ' '
4 +action-button= 'Idle' 6 +action-button= 'Idle'
5 = ' ' 7 = ' '
6 +action-button(selected=true)= 'Selected' 8 +action-button(size='lg')= 'Idle'
7 = ' ' 9 = ' '
8 +action-button(disabled=true)= 'Disabled' 10 +action-button(size='xl')= 'Idle'
11
12 .c-box
13 +action-button(icon='trash' size='sm')
9 = ' ' 14 = ' '
10 +action-button(selected=true disabled=true)= 'Selected + disabled' 15 +action-button(icon='trash')
11 br 16 = ' '
12 br 17 +action-button(icon='trash' size='lg')
13 +action-button(icon='trash')= 'Idle' 18 = ' '
19 +action-button(icon='trash' size='xl')
20
21 .c-box
22 +action-button(pill=true size='sm')= 'Idle'
14 = ' ' 23 = ' '
15 +action-button(icon='trash' selected=true)= 'Selected' 24 +action-button(pill=true)= 'Idle'
16 = ' ' 25 = ' '
17 +action-button(icon='trash' disabled=true)= 'Disabled' 26 +action-button(pill=true size='lg')= 'Idle'
27 = ' '
28 +action-button(pill=true size='xl')= 'Idle'
29
30 .c-box
31 +action-button(pill=true icon='trash' size='sm')
32 = ' '
33 +action-button(pill=true icon='trash')
34 = ' '
35 +action-button(pill=true icon='trash' size='lg')
36 = ' '
37 +action-button(pill=true icon='trash' size='xl')
38
39 .c-box
40 +action-button= 'Label'
41 = ' '
42 +action-button(icon='trash')= 'Label'
18 = ' ' 43 = ' '
19 +action-button(icon='trash' selected=true disabled=true)= 'Selected + disabled'
20 br
21 br
22 +action-button(icon='trash') 44 +action-button(icon='trash')
45
46 .c-box
47 +action-button(quiet=true)= 'Label'
48 = ' '
49 +action-button(quiet=true icon='trash')= 'Label'
50 = ' '
51 +action-button(quiet=true icon='trash')
52
53 .c-box
54 +action-button= 'Idle'
23 = ' ' 55 = ' '
24 +action-button(icon='trash' selected=true) 56 +action-button(selected=true)= 'Selected'
25 = ' ' 57 = ' '
26 +action-button(icon='trash' disabled=true) 58 +action-button(disabled=true)= 'Disabled'
27 = ' ' 59 = ' '
28 +action-button(icon='trash' selected=true disabled=true) 60 +action-button(selected=true disabled=true)= 'Selected + disabled'
29 61
30 .c-box 62 .c-box
31 +action-button(quiet=true )= 'Idle' 63 +action-button(quiet=true )= 'Idle'
@@ -35,26 +67,21 @@ mixin view-action-button
35 +action-button(quiet=true disabled=true)= 'Disabled' 67 +action-button(quiet=true disabled=true)= 'Disabled'
36 = ' ' 68 = ' '
37 +action-button(quiet=true selected=true disabled=true)= 'Selected + disabled' 69 +action-button(quiet=true selected=true disabled=true)= 'Selected + disabled'
38 br 70
39 br 71 .c-box
40 +action-button(quiet=true icon='trash')= 'Idle' 72 +action-button(pill=true)= 'Idle'
41 = ' '
42 +action-button(quiet=true icon='trash' selected=true)= 'Selected'
43 = ' '
44 +action-button(quiet=true icon='trash' disabled=true)= 'Disabled'
45 = ' '
46 +action-button(quiet=true icon='trash' selected=true disabled=true)= 'Selected + disabled'
47 br
48 br
49 +action-button(quiet=true icon='trash')
50 = ' ' 73 = ' '
51 +action-button(quiet=true icon='trash' selected=true) 74 +action-button(pill=true selected=true)= 'Selected'
52 = ' ' 75 = ' '
53 +action-button(quiet=true icon='trash' disabled=true) 76 +action-button(pill=true disabled=true)= 'Disabled'
54 = ' ' 77 = ' '
55 +action-button(quiet=true icon='trash' selected=true disabled=true) 78 +action-button(pill=true selected=true disabled=true)= 'Selected + disabled'
56 79
57 .c-box 80 .c-box
58 +action-button= 'Idle' 81 +action-button(pill=true quiet=true)= 'Idle'
59 = ' ' 82 = ' '
60 +action-button(icon='trash') 83 +action-button(pill=true quiet=true selected=true)= 'Selected'
84 = ' '
85 +action-button(pill=true quiet=true disabled=true)= 'Disabled'
86 = ' '
87 +action-button(pill=true quiet=true selected=true disabled=true)= 'Selected + disabled'