diff options
author | Volpeon <git@volpeon.ink> | 2022-02-06 20:23:11 +0100 |
---|---|---|
committer | Volpeon <git@volpeon.ink> | 2022-02-06 20:23:11 +0100 |
commit | 9691ccf48f64dd0fac669ae51943907cc8da9b78 (patch) | |
tree | 01fa18eee29ec1266bbe3d276a8dac6f54390f16 | |
parent | Fixes (diff) | |
download | iro-design-9691ccf48f64dd0fac669ae51943907cc8da9b78.tar.gz iro-design-9691ccf48f64dd0fac669ae51943907cc8da9b78.tar.bz2 iro-design-9691ccf48f64dd0fac669ae51943907cc8da9b78.zip |
Added status indicator and avatar
-rw-r--r-- | src/_functions.scss | 20 | ||||
-rw-r--r-- | src/index.scss | 3 | ||||
-rw-r--r-- | src/layouts/_card.scss | 12 | ||||
-rw-r--r-- | src/layouts/_container.scss | 12 | ||||
-rw-r--r-- | src/objects/_action-button.scss | 8 | ||||
-rw-r--r-- | src/objects/_avatar.scss | 89 | ||||
-rw-r--r-- | src/objects/_button.scss | 8 | ||||
-rw-r--r-- | src/objects/_checkbox.scss | 10 | ||||
-rw-r--r-- | src/objects/_radio.scss | 10 | ||||
-rw-r--r-- | src/objects/_status-indicator.scss | 33 | ||||
-rw-r--r-- | src/objects/_switch.scss | 10 | ||||
-rw-r--r-- | src/objects/_text-field.scss | 8 | ||||
-rwxr-xr-x | static/avatar.png | bin | 0 -> 61956 bytes | |||
-rw-r--r-- | tpl/index.pug | 72 | ||||
-rw-r--r-- | tpl/objects/avatar.pug | 26 | ||||
-rw-r--r-- | tpl/objects/status-indicator.pug | 8 |
16 files changed, 286 insertions, 43 deletions
diff --git a/src/_functions.scss b/src/_functions.scss index a649cc2..a11d5f4 100644 --- a/src/_functions.scss +++ b/src/_functions.scss | |||
@@ -1,19 +1,31 @@ | |||
1 | @use 'iro-sass/src/index' as iro; | 1 | @use 'iro-sass/src/index' as iro; |
2 | 2 | ||
3 | @function color($key, $tree: 'colors', $default: null, $global: false) { | 3 | @function color($key, $tree: 'colors', $default: null, $global: false) { |
4 | $new-key: iro.fn-list-prepend($key, --colors); | 4 | $key: iro.fn-list-prepend($key, --colors); |
5 | @return iro.props-get($new-key, $tree, $default, $global); | 5 | @return iro.props-get($key, $tree, $default, $global); |
6 | } | 6 | } |
7 | 7 | ||
8 | @function global-color($key, $tree: 'colors', $default: null, $global: true) { | 8 | @function global-color($key, $tree: 'colors', $default: null, $global: true) { |
9 | @return color($key, $tree, $default, $global); | 9 | @return color($key, $tree, $default, $global); |
10 | } | 10 | } |
11 | 11 | ||
12 | @function foreign-color($foreign-key, $key, $tree: 'colors', $default: null, $global: true) { | ||
13 | $key: iro.fn-list-prepend($key, --colors); | ||
14 | $key: iro.fn-list-prepend($key, $foreign-key); | ||
15 | @return iro.props-get($key, $tree, $default, $global); | ||
16 | } | ||
17 | |||
12 | @function dim($key, $tree: 'dims', $default: null, $global: false) { | 18 | @function dim($key, $tree: 'dims', $default: null, $global: false) { |
13 | $new-key: iro.fn-list-prepend($key, --dims); | 19 | $key: iro.fn-list-prepend($key, --dims); |
14 | @return iro.props-get($new-key, $tree, $default, $global); | 20 | @return iro.props-get($key, $tree, $default, $global); |
15 | } | 21 | } |
16 | 22 | ||
17 | @function global-dim($key, $tree: 'dims', $default: null, $global: true) { | 23 | @function global-dim($key, $tree: 'dims', $default: null, $global: true) { |
18 | @return dim($key, $tree, $default, $global); | 24 | @return dim($key, $tree, $default, $global); |
19 | } | 25 | } |
26 | |||
27 | @function foreign-dim($foreign-key, $key, $tree: 'dims', $default: null, $global: true) { | ||
28 | $key: iro.fn-list-prepend($key, --dims); | ||
29 | $key: iro.fn-list-prepend($key, $foreign-key); | ||
30 | @return iro.props-get($key, $tree, $default, $global); | ||
31 | } | ||
diff --git a/src/index.scss b/src/index.scss index 63124ed..813764c 100644 --- a/src/index.scss +++ b/src/index.scss | |||
@@ -4,6 +4,7 @@ | |||
4 | @import 'vars'; | 4 | @import 'vars'; |
5 | @import 'general'; | 5 | @import 'general'; |
6 | 6 | ||
7 | @import 'layouts/card'; | ||
7 | @import 'layouts/container'; | 8 | @import 'layouts/container'; |
8 | 9 | ||
9 | @import 'objects/icon'; | 10 | @import 'objects/icon'; |
@@ -16,6 +17,8 @@ | |||
16 | @import 'objects/checkbox'; | 17 | @import 'objects/checkbox'; |
17 | @import 'objects/switch'; | 18 | @import 'objects/switch'; |
18 | @import 'objects/action-button'; | 19 | @import 'objects/action-button'; |
20 | @import 'objects/status-indicator'; | ||
21 | @import 'objects/avatar'; | ||
19 | 22 | ||
20 | @import 'layouts/form'; | 23 | @import 'layouts/form'; |
21 | 24 | ||
diff --git a/src/layouts/_card.scss b/src/layouts/_card.scss index 5db1a6a..a5b9028 100644 --- a/src/layouts/_card.scss +++ b/src/layouts/_card.scss | |||
@@ -5,11 +5,11 @@ | |||
5 | @include iro.props-namespace('card') { | 5 | @include iro.props-namespace('card') { |
6 | @include iro.props-store(( | 6 | @include iro.props-store(( |
7 | --dims: ( | 7 | --dims: ( |
8 | --pad-x: iro.fn-px-to-rem(11px), | 8 | --pad-x: .6rem, |
9 | --pad-y: iro.fn-px-to-rem(8px), | 9 | --pad-y: .4rem, |
10 | --lg: ( | 10 | --lg: ( |
11 | --pad-x: iro.fn-px-to-rem(14px), | 11 | --pad-x: .9rem, |
12 | --pad-y: iro.fn-px-to-rem(11px), | 12 | --pad-y: .7rem, |
13 | ) | 13 | ) |
14 | ) | 14 | ) |
15 | ), 'dims'); | 15 | ), 'dims'); |
@@ -34,8 +34,8 @@ | |||
34 | flex: 0 0 auto; | 34 | flex: 0 0 auto; |
35 | 35 | ||
36 | @include iro.bem-modifier('main') { | 36 | @include iro.bem-modifier('main') { |
37 | flex-shrink: 1; | 37 | width: 100%; |
38 | width: 100%; | 38 | min-width: 0; |
39 | } | 39 | } |
40 | } | 40 | } |
41 | } | 41 | } |
diff --git a/src/layouts/_container.scss b/src/layouts/_container.scss index 40e8ab6..7f13a8b 100644 --- a/src/layouts/_container.scss +++ b/src/layouts/_container.scss | |||
@@ -7,8 +7,8 @@ | |||
7 | --dims: ( | 7 | --dims: ( |
8 | --content-width: iro.fn-px-to-rem(700px), | 8 | --content-width: iro.fn-px-to-rem(700px), |
9 | --sm-content-width: iro.fn-px-to-rem(360px), | 9 | --sm-content-width: iro.fn-px-to-rem(360px), |
10 | --padding-x: 3rem, | 10 | --pad-x: 3rem, |
11 | --padding-y: 3rem, | 11 | --pad-y: 3rem, |
12 | --in-page-spacing-y: fn.global-dim(--spacing --y --xl), | 12 | --in-page-spacing-y: fn.global-dim(--spacing --y --xl), |
13 | ) | 13 | ) |
14 | ), 'dims'); | 14 | ), 'dims'); |
@@ -38,13 +38,13 @@ | |||
38 | } | 38 | } |
39 | 39 | ||
40 | @include iro.bem-modifier('pad-x') { | 40 | @include iro.bem-modifier('pad-x') { |
41 | padding-right: fn.dim(--padding-x); | 41 | padding-right: fn.dim(--pad-x); |
42 | padding-left: fn.dim(--padding-x); | 42 | padding-left: fn.dim(--pad-x); |
43 | } | 43 | } |
44 | 44 | ||
45 | @include iro.bem-modifier('pad-y') { | 45 | @include iro.bem-modifier('pad-y') { |
46 | padding-top: fn.dim(--padding-y); | 46 | padding-top: fn.dim(--pad-y); |
47 | padding-bottom: fn.dim(--padding-y); | 47 | padding-bottom: fn.dim(--pad-y); |
48 | } | 48 | } |
49 | 49 | ||
50 | @include iro.bem-modifier('narrow') { | 50 | @include iro.bem-modifier('narrow') { |
diff --git a/src/objects/_action-button.scss b/src/objects/_action-button.scss index dd5cea7..86c7089 100644 --- a/src/objects/_action-button.scss +++ b/src/objects/_action-button.scss | |||
@@ -4,9 +4,9 @@ | |||
4 | @include iro.props-namespace('action-button') { | 4 | @include iro.props-namespace('action-button') { |
5 | @include iro.props-store(( | 5 | @include iro.props-store(( |
6 | --dims: ( | 6 | --dims: ( |
7 | --padding-x: .6rem, | 7 | --pad-x: .6rem, |
8 | --padding-y: .6rem, | 8 | --pad-y: .6rem, |
9 | --rounding: 3px, | 9 | --rounding: 3px, |
10 | ), | 10 | ), |
11 | ), 'dims'); | 11 | ), 'dims'); |
12 | 12 | ||
@@ -93,7 +93,7 @@ | |||
93 | 93 | ||
94 | @include iro.bem-object(iro.props-namespace()) { | 94 | @include iro.bem-object(iro.props-namespace()) { |
95 | display: inline-block; | 95 | display: inline-block; |
96 | padding: fn.dim(--padding-y) fn.dim(--padding-x); | 96 | padding: fn.dim(--pad-y) fn.dim(--pad-x); |
97 | border: 1px solid fn.color(--border); | 97 | border: 1px solid fn.color(--border); |
98 | border-radius: fn.dim(--rounding); | 98 | border-radius: fn.dim(--rounding); |
99 | background-color: fn.color(--bg); | 99 | background-color: fn.color(--bg); |
diff --git a/src/objects/_avatar.scss b/src/objects/_avatar.scss new file mode 100644 index 0000000..3bdfddc --- /dev/null +++ b/src/objects/_avatar.scss | |||
@@ -0,0 +1,89 @@ | |||
1 | @use 'iro-sass/src/index' as iro; | ||
2 | @use '../functions' as fn; | ||
3 | |||
4 | @include iro.props-namespace('avatar') { | ||
5 | @include iro.props-store(( | ||
6 | --dims: ( | ||
7 | --size: iro.fn-px-to-rem(40px), | ||
8 | --size-sm: iro.fn-px-to-rem(30px), | ||
9 | --size-xs: iro.fn-px-to-rem(20px), | ||
10 | --indicator-size: fn.foreign-dim(--status-indicator, --size), | ||
11 | --indicator-spacing: iro.fn-px-to-rem(3px), | ||
12 | --rounding: 25%, | ||
13 | ), | ||
14 | ), 'dims'); | ||
15 | |||
16 | @include iro.props-store(( | ||
17 | --colors: ( | ||
18 | --h: 354, | ||
19 | --s: 44%, | ||
20 | --l: 45%, | ||
21 | ), | ||
22 | ), 'colors'); | ||
23 | |||
24 | @include iro.bem-object(iro.props-namespace()) { | ||
25 | display: inline-block; | ||
26 | position: relative; | ||
27 | font-size: 1rem; | ||
28 | font-style: normal; | ||
29 | |||
30 | @include iro.bem-elem('status') { | ||
31 | position: absolute; | ||
32 | right: 0; | ||
33 | bottom: 0; | ||
34 | |||
35 | @include iro.bem-next-elem('content') { | ||
36 | mask-image: radial-gradient( | ||
37 | circle calc(.5 * fn.dim(--indicator-size) + fn.dim(--indicator-spacing)) at | ||
38 | calc(100% - .5 * fn.dim(--indicator-size)) | ||
39 | calc(100% - .5 * fn.dim(--indicator-size)), | ||
40 | transparent 95%, | ||
41 | #fff | ||
42 | ); | ||
43 | } | ||
44 | } | ||
45 | |||
46 | @include iro.bem-elem('content') { | ||
47 | display: block; | ||
48 | width: fn.dim(--size); | ||
49 | height: fn.dim(--size); | ||
50 | border-radius: fn.dim(--rounding); | ||
51 | background-color: hsl(fn.color(--h), fn.color(--s), fn.color(--l)); | ||
52 | color: #fff; | ||
53 | line-height: fn.dim(--size); | ||
54 | text-align: center; | ||
55 | } | ||
56 | |||
57 | @include iro.bem-modifier('circle') { | ||
58 | @include iro.bem-elem('content') { | ||
59 | border-radius: 100%; | ||
60 | } | ||
61 | } | ||
62 | |||
63 | @include iro.bem-modifier('placeholder') { | ||
64 | @include iro.bem-elem('content') { | ||
65 | background-color: hsl(0, 0%, fn.color(--l)); | ||
66 | } | ||
67 | } | ||
68 | |||
69 | @include iro.bem-modifier('sm') { | ||
70 | font-size: iro.fn-px-to-rem(13px); | ||
71 | |||
72 | @include iro.bem-elem('content') { | ||
73 | width: fn.dim(--size-sm); | ||
74 | height: fn.dim(--size-sm); | ||
75 | line-height: fn.dim(--size-sm); | ||
76 | } | ||
77 | } | ||
78 | |||
79 | @include iro.bem-modifier('xs') { | ||
80 | font-size: iro.fn-px-to-rem(12px); | ||
81 | |||
82 | @include iro.bem-elem('content') { | ||
83 | width: fn.dim(--size-xs); | ||
84 | height: fn.dim(--size-xs); | ||
85 | line-height: fn.dim(--size-xs); | ||
86 | } | ||
87 | } | ||
88 | } | ||
89 | } | ||
diff --git a/src/objects/_button.scss b/src/objects/_button.scss index 57c49e8..f158176 100644 --- a/src/objects/_button.scss +++ b/src/objects/_button.scss | |||
@@ -35,9 +35,9 @@ | |||
35 | @include iro.props-namespace('button') { | 35 | @include iro.props-namespace('button') { |
36 | @include iro.props-store(( | 36 | @include iro.props-store(( |
37 | --dims: ( | 37 | --dims: ( |
38 | --padding-x: 1.2rem, | 38 | --pad-x: 1.2rem, |
39 | --padding-y: .5rem, | 39 | --pad-y: .5rem, |
40 | --rounding: 10em, | 40 | --rounding: 10em, |
41 | ), | 41 | ), |
42 | ), 'dims'); | 42 | ), 'dims'); |
43 | 43 | ||
@@ -114,7 +114,7 @@ | |||
114 | @include typography.set-font(vars.$font--main, (weight: 500)); | 114 | @include typography.set-font(vars.$font--main, (weight: 500)); |
115 | 115 | ||
116 | display: inline-block; | 116 | display: inline-block; |
117 | padding: fn.dim(--padding-y) fn.dim(--padding-x); | 117 | padding: fn.dim(--pad-y) fn.dim(--pad-x); |
118 | border: 2px solid transparent; | 118 | border: 2px solid transparent; |
119 | border-radius: fn.dim(--rounding); | 119 | border-radius: fn.dim(--rounding); |
120 | line-height: 1; | 120 | line-height: 1; |
diff --git a/src/objects/_checkbox.scss b/src/objects/_checkbox.scss index 377b002..3bda5e7 100644 --- a/src/objects/_checkbox.scss +++ b/src/objects/_checkbox.scss | |||
@@ -7,8 +7,8 @@ | |||
7 | --size: iro.fn-px-to-rem(14px), | 7 | --size: iro.fn-px-to-rem(14px), |
8 | --label-gap: .6rem, | 8 | --label-gap: .6rem, |
9 | --border-width: fn.global-dim(--border-width --medium), | 9 | --border-width: fn.global-dim(--border-width --medium), |
10 | --padding-x: .3rem, | 10 | --pad-x: .3rem, |
11 | --padding-y: .3rem, | 11 | --pad-y: .3rem, |
12 | --margin-right: fn.global-dim(--spacing --x --md), | 12 | --margin-right: fn.global-dim(--spacing --x --md), |
13 | ), | 13 | ), |
14 | ), 'dims'); | 14 | ), 'dims'); |
@@ -46,9 +46,9 @@ | |||
46 | display: inline-flex; | 46 | display: inline-flex; |
47 | position: relative; | 47 | position: relative; |
48 | align-items: flex-start; | 48 | align-items: flex-start; |
49 | margin-right: calc(-1 * fn.dim(--padding-x) + fn.dim(--margin-right)); | 49 | margin-right: calc(-1 * fn.dim(--pad-x) + fn.dim(--margin-right)); |
50 | margin-left: calc(-1 * fn.dim(--padding-x)); | 50 | margin-left: calc(-1 * fn.dim(--pad-x)); |
51 | padding: fn.dim(--padding-y) fn.dim(--padding-x); | 51 | padding: fn.dim(--pad-y) fn.dim(--pad-x); |
52 | 52 | ||
53 | @include iro.bem-elem('box') { | 53 | @include iro.bem-elem('box') { |
54 | display: block; | 54 | display: block; |
diff --git a/src/objects/_radio.scss b/src/objects/_radio.scss index 51bfcd8..26e8c31 100644 --- a/src/objects/_radio.scss +++ b/src/objects/_radio.scss | |||
@@ -7,8 +7,8 @@ | |||
7 | --diameter: iro.fn-px-to-rem(15px), | 7 | --diameter: iro.fn-px-to-rem(15px), |
8 | --label-gap: .6rem, | 8 | --label-gap: .6rem, |
9 | --border-width: fn.global-dim(--border-width --medium), | 9 | --border-width: fn.global-dim(--border-width --medium), |
10 | --padding-x: .3rem, | 10 | --pad-x: .3rem, |
11 | --padding-y: .3rem, | 11 | --pad-y: .3rem, |
12 | --margin-right: fn.global-dim(--spacing --x --md), | 12 | --margin-right: fn.global-dim(--spacing --x --md), |
13 | ), | 13 | ), |
14 | ), 'dims'); | 14 | ), 'dims'); |
@@ -46,9 +46,9 @@ | |||
46 | display: inline-flex; | 46 | display: inline-flex; |
47 | position: relative; | 47 | position: relative; |
48 | align-items: flex-start; | 48 | align-items: flex-start; |
49 | margin-right: calc(-1 * fn.dim(--padding-x) + fn.dim(--margin-right)); | 49 | margin-right: calc(-1 * fn.dim(--pad-x) + fn.dim(--margin-right)); |
50 | margin-left: calc(-1 * fn.dim(--padding-x)); | 50 | margin-left: calc(-1 * fn.dim(--pad-x)); |
51 | padding: fn.dim(--padding-y) fn.dim(--padding-x); | 51 | padding: fn.dim(--pad-y) fn.dim(--pad-x); |
52 | 52 | ||
53 | @include iro.bem-elem('circle') { | 53 | @include iro.bem-elem('circle') { |
54 | display: block; | 54 | display: block; |
diff --git a/src/objects/_status-indicator.scss b/src/objects/_status-indicator.scss new file mode 100644 index 0000000..18d6f81 --- /dev/null +++ b/src/objects/_status-indicator.scss | |||
@@ -0,0 +1,33 @@ | |||
1 | @use 'iro-sass/src/index' as iro; | ||
2 | @use '../functions' as fn; | ||
3 | |||
4 | @include iro.props-namespace('status-indicator') { | ||
5 | @include iro.props-store(( | ||
6 | --dims: ( | ||
7 | --size: iro.fn-px-to-rem(10px), | ||
8 | ), | ||
9 | ), 'dims'); | ||
10 | |||
11 | @include iro.props-store(( | ||
12 | --colors: ( | ||
13 | --default: fn.global-color(--obj-lo), | ||
14 | --green: scale-color(hsl(113, 49.8%, 49.6%), $lightness: 15%), | ||
15 | --yellow: scale-color(hsl(50, 59.8%, 58.4%), $lightness: 15%), | ||
16 | --red: scale-color(hsl(352, 69.8%, 58.4%), $lightness: 15%), | ||
17 | ), | ||
18 | ), 'colors'); | ||
19 | |||
20 | @include iro.bem-object(iro.props-namespace()) { | ||
21 | display: inline-block; | ||
22 | width: fn.dim(--size); | ||
23 | height: fn.dim(--size); | ||
24 | border-radius: fn.dim(--size); | ||
25 | background-color: fn.color(--default); | ||
26 | |||
27 | @each $color in 'green' 'yellow' 'red' { | ||
28 | @include iro.bem-is($color) { | ||
29 | background-color: fn.color(--#{$color}); | ||
30 | } | ||
31 | } | ||
32 | } | ||
33 | } | ||
diff --git a/src/objects/_switch.scss b/src/objects/_switch.scss index 85aa782..2d70844 100644 --- a/src/objects/_switch.scss +++ b/src/objects/_switch.scss | |||
@@ -8,8 +8,8 @@ | |||
8 | --height: iro.fn-px-to-rem(15px), | 8 | --height: iro.fn-px-to-rem(15px), |
9 | --label-gap: .6rem, | 9 | --label-gap: .6rem, |
10 | --border-width: fn.global-dim(--border-width --medium), | 10 | --border-width: fn.global-dim(--border-width --medium), |
11 | --padding-x: .3rem, | 11 | --pad-x: .3rem, |
12 | --padding-y: .3rem, | 12 | --pad-y: .3rem, |
13 | --margin-right: fn.global-dim(--spacing --x --md), | 13 | --margin-right: fn.global-dim(--spacing --x --md), |
14 | ), | 14 | ), |
15 | ), 'dims'); | 15 | ), 'dims'); |
@@ -50,9 +50,9 @@ | |||
50 | display: inline-flex; | 50 | display: inline-flex; |
51 | position: relative; | 51 | position: relative; |
52 | align-items: flex-start; | 52 | align-items: flex-start; |
53 | margin-right: calc(-1 * fn.dim(--padding-x) + fn.dim(--margin-right)); | 53 | margin-right: calc(-1 * fn.dim(--pad-x) + fn.dim(--margin-right)); |
54 | margin-left: calc(-1 * fn.dim(--padding-x)); | 54 | margin-left: calc(-1 * fn.dim(--pad-x)); |
55 | padding: fn.dim(--padding-y) fn.dim(--padding-x); | 55 | padding: fn.dim(--pad-y) fn.dim(--pad-x); |
56 | 56 | ||
57 | @include iro.bem-elem('indicator') { | 57 | @include iro.bem-elem('indicator') { |
58 | display: block; | 58 | display: block; |
diff --git a/src/objects/_text-field.scss b/src/objects/_text-field.scss index ca0eb5b..90d4b11 100644 --- a/src/objects/_text-field.scss +++ b/src/objects/_text-field.scss | |||
@@ -34,8 +34,8 @@ | |||
34 | @include iro.props-namespace('text-field') { | 34 | @include iro.props-namespace('text-field') { |
35 | @include iro.props-store(( | 35 | @include iro.props-store(( |
36 | --dims: ( | 36 | --dims: ( |
37 | --padding-x: .6rem, | 37 | --pad-x: .6rem, |
38 | --padding-y: .5rem, | 38 | --pad-y: .5rem, |
39 | --border-width: fn.global-dim(--border-width --thin), | 39 | --border-width: fn.global-dim(--border-width --thin), |
40 | --border-radius: 2px, | 40 | --border-radius: 2px, |
41 | 41 | ||
@@ -91,7 +91,7 @@ | |||
91 | @include iro.bem-object(iro.props-namespace()) { | 91 | @include iro.bem-object(iro.props-namespace()) { |
92 | position: relative; | 92 | position: relative; |
93 | min-width: 0; | 93 | min-width: 0; |
94 | padding: fn.dim(--padding-y) fn.dim(--padding-x); | 94 | padding: fn.dim(--pad-y) fn.dim(--pad-x); |
95 | background-color: fn.color(--bg); | 95 | background-color: fn.color(--bg); |
96 | 96 | ||
97 | @include iro.bem-elem('bg') { | 97 | @include iro.bem-elem('bg') { |
@@ -176,7 +176,7 @@ | |||
176 | 176 | ||
177 | @include iro.bem-elem('native') { | 177 | @include iro.bem-elem('native') { |
178 | box-sizing: border-box; | 178 | box-sizing: border-box; |
179 | padding: fn.dim(--padding-y) fn.dim(--padding-x); | 179 | padding: fn.dim(--pad-y) fn.dim(--pad-x); |
180 | } | 180 | } |
181 | } | 181 | } |
182 | 182 | ||
diff --git a/static/avatar.png b/static/avatar.png new file mode 100755 index 0000000..aa4345f --- /dev/null +++ b/static/avatar.png | |||
Binary files differ | |||
diff --git a/tpl/index.pug b/tpl/index.pug index 2980016..206e40b 100644 --- a/tpl/index.pug +++ b/tpl/index.pug | |||
@@ -13,6 +13,8 @@ include objects/checkbox.pug | |||
13 | include objects/switch.pug | 13 | include objects/switch.pug |
14 | include objects/form.pug | 14 | include objects/form.pug |
15 | include objects/action-button.pug | 15 | include objects/action-button.pug |
16 | include objects/status-indicator.pug | ||
17 | include objects/avatar.pug | ||
16 | 18 | ||
17 | mixin box | 19 | mixin box |
18 | +container(padX=true padY=true inPage=true theme="raised") | 20 | +container(padX=true padY=true inPage=true theme="raised") |
@@ -363,3 +365,73 @@ html | |||
363 | = ' ' | 365 | = ' ' |
364 | +action-button(quiet=true icon='trash' selected=true disabled=true) | 366 | +action-button(quiet=true icon='trash' selected=true disabled=true) |
365 | 367 | ||
368 | //----------------------------------------- | ||
369 | |||
370 | +h1-heading(level='xl')= 'Status indicator' | ||
371 | +rule(level='medium') | ||
372 | |||
373 | +box | ||
374 | +status-indicator | ||
375 | = ' ' | ||
376 | +status-indicator('green') | ||
377 | = ' ' | ||
378 | +status-indicator('yellow') | ||
379 | = ' ' | ||
380 | +status-indicator('red') | ||
381 | |||
382 | //----------------------------------------- | ||
383 | |||
384 | +h1-heading(level='xl')= 'Avatar' | ||
385 | +rule(level='medium') | ||
386 | |||
387 | +box | ||
388 | div(style={ display: 'flex', gap: '.3em' }) | ||
389 | +avatar | ||
390 | = 'Vo' | ||
391 | +avatar(status='green' hue=45) | ||
392 | = 'lp' | ||
393 | +avatar(src='avatar.png') | ||
394 | +avatar(src='avatar.png' status='red') | ||
395 | br | ||
396 | br | ||
397 | div(style={ display: 'flex', gap: '.3em' }) | ||
398 | +avatar(size='sm' hue=90) | ||
399 | = 'eo' | ||
400 | +avatar(size='sm' status='green' hue=135) | ||
401 | = 'n' | ||
402 | +avatar(size='sm' src='avatar.png') | ||
403 | +avatar(size='sm' src='avatar.png' status='red') | ||
404 | br | ||
405 | br | ||
406 | div(style={ display: 'flex', gap: '.3em' }) | ||
407 | +avatar(size='xs' hue=180) | ||
408 | = 'V' | ||
409 | +avatar(size='xs' hue=225) | ||
410 | = 'o' | ||
411 | +avatar(size='xs' src='avatar.png') | ||
412 | |||
413 | +box | ||
414 | div(style={ display: 'flex', gap: '.3em' }) | ||
415 | +avatar(circle=true) | ||
416 | = 'Vo' | ||
417 | +avatar(circle=true status='green' hue=45) | ||
418 | = 'lp' | ||
419 | +avatar(circle=true src='avatar.png') | ||
420 | +avatar(circle=true src='avatar.png' status='red') | ||
421 | br | ||
422 | br | ||
423 | div(style={ display: 'flex', gap: '.3em' }) | ||
424 | +avatar(circle=true size='sm' hue=90) | ||
425 | = 'eo' | ||
426 | +avatar(circle=true size='sm' status='green' hue=135) | ||
427 | = 'n' | ||
428 | +avatar(circle=true size='sm' src='avatar.png') | ||
429 | +avatar(circle=true size='sm' src='avatar.png' status='red') | ||
430 | br | ||
431 | br | ||
432 | div(style={ display: 'flex', gap: '.3em' }) | ||
433 | +avatar(circle=true size='xs' hue=180) | ||
434 | = 'V' | ||
435 | +avatar(circle=true size='xs' hue=225) | ||
436 | = 'o' | ||
437 | +avatar(circle=true size='xs' src='avatar.png') | ||
diff --git a/tpl/objects/avatar.pug b/tpl/objects/avatar.pug new file mode 100644 index 0000000..83c0f7c --- /dev/null +++ b/tpl/objects/avatar.pug | |||
@@ -0,0 +1,26 @@ | |||
1 | include ../objects/status-indicator.pug | ||
2 | |||
3 | mixin avatar | ||
4 | - | ||
5 | let classes = { | ||
6 | 'o-avatar': true, | ||
7 | 'o-avatar--circle': attributes.circle | ||
8 | } | ||
9 | |||
10 | if (attributes.size) { | ||
11 | classes['o-avatar--' + attributes.size] = true; | ||
12 | } | ||
13 | |||
14 | let styles = {} | ||
15 | if (attributes.hue) { | ||
16 | styles['--avatar--colors--h'] = attributes.hue; | ||
17 | } | ||
18 | |||
19 | div(class=classes style=styles) | ||
20 | if attributes.status | ||
21 | +status-indicator(attributes.status)(class='o-avatar__status') | ||
22 | if attributes.src | ||
23 | img.o-avatar__content(src=attributes.src) | ||
24 | else | ||
25 | .o-avatar__content | ||
26 | block | ||
diff --git a/tpl/objects/status-indicator.pug b/tpl/objects/status-indicator.pug new file mode 100644 index 0000000..9b240e1 --- /dev/null +++ b/tpl/objects/status-indicator.pug | |||
@@ -0,0 +1,8 @@ | |||
1 | mixin status-indicator(status) | ||
2 | - | ||
3 | let classes = { | ||
4 | 'o-status-indicator': true, | ||
5 | } | ||
6 | classes['is-' + status] = true | ||
7 | |||
8 | div(class=classes)&attributes(attributes) | ||