diff options
author | Volpeon <git@volpeon.ink> | 2024-06-27 11:26:15 +0200 |
---|---|---|
committer | Volpeon <git@volpeon.ink> | 2024-06-27 11:26:15 +0200 |
commit | 57e28f7fe929f275a0c516d0a702ec8a8739a810 (patch) | |
tree | fd84e604e0d19dba9c18d93097837a6b1d58199e | |
parent | Update (diff) | |
download | iro-design-57e28f7fe929f275a0c516d0a702ec8a8739a810.tar.gz iro-design-57e28f7fe929f275a0c516d0a702ec8a8739a810.tar.bz2 iro-design-57e28f7fe929f275a0c516d0a702ec8a8739a810.zip |
Add card
-rw-r--r-- | src/_utils.scss | 8 | ||||
-rw-r--r-- | src/layouts/_media.scss | 51 | ||||
-rw-r--r-- | src/objects/_card.scss | 24 | ||||
-rw-r--r-- | static/Drawing_Half.png | bin | 0 -> 535700 bytes | |||
-rwxr-xr-x | static/avatar.png | bin | 61956 -> 164866 bytes | |||
-rw-r--r-- | tpl/index.pug | 8 | ||||
-rw-r--r-- | tpl/objects/avatar.pug | 26 | ||||
-rw-r--r-- | tpl/objects/card.pug | 43 | ||||
-rw-r--r-- | tpl/objects/menu.pug | 2 | ||||
-rw-r--r-- | tpl/objects/message.pug | 2 | ||||
-rw-r--r-- | tpl/objects/side-nav.pug | 2 | ||||
-rw-r--r-- | tpl/objects/text-field.pug | 1 | ||||
-rw-r--r-- | tpl/views/card.pug | 24 | ||||
-rw-r--r-- | tpl/views/menu.pug | 2 | ||||
-rw-r--r-- | tpl/views/message-group.pug | 2 | ||||
-rw-r--r-- | tpl/views/message.pug | 2 |
16 files changed, 109 insertions, 88 deletions
diff --git a/src/_utils.scss b/src/_utils.scss index 8ba2581..a99d7ec 100644 --- a/src/_utils.scss +++ b/src/_utils.scss | |||
@@ -11,7 +11,9 @@ $dirs: ( | |||
11 | 'is': '-inline-start', | 11 | 'is': '-inline-start', |
12 | 'ie': '-inline-end', | 12 | 'ie': '-inline-end', |
13 | 'i': '-inline', | 13 | 'i': '-inline', |
14 | ); | 14 | ) !default; |
15 | |||
16 | $sizes: 0 10 50 75 100 125 200 400 700 800 !default; | ||
15 | 17 | ||
16 | @include iro.bem-utility('d-block') { | 18 | @include iro.bem-utility('d-block') { |
17 | display: block; | 19 | display: block; |
@@ -177,7 +179,7 @@ $dirs: ( | |||
177 | padding#{$suffix}: auto; | 179 | padding#{$suffix}: auto; |
178 | } | 180 | } |
179 | 181 | ||
180 | @each $size in (0 10 50 75 100 125 200 400 700 800) { | 182 | @each $size in $sizes { |
181 | @include iro.bem-utility('m#{$dir}-#{$size}') { | 183 | @include iro.bem-utility('m#{$dir}-#{$size}') { |
182 | margin#{$suffix}: fn.global-dim(--size --#{$size}); | 184 | margin#{$suffix}: fn.global-dim(--size --#{$size}); |
183 | } | 185 | } |
@@ -192,6 +194,6 @@ $dirs: ( | |||
192 | } | 194 | } |
193 | 195 | ||
194 | @include iro.bem-utility('b#{$dir}-1') { | 196 | @include iro.bem-utility('b#{$dir}-1') { |
195 | border#{$suffix}: 1px solid fn.global-color(--border); | 197 | border#{$suffix}: fn.global-dim(--border --thin) solid fn.global-color(--border); |
196 | } | 198 | } |
197 | } | 199 | } |
diff --git a/src/layouts/_media.scss b/src/layouts/_media.scss index 953c8c0..1227486 100644 --- a/src/layouts/_media.scss +++ b/src/layouts/_media.scss | |||
@@ -1,57 +1,30 @@ | |||
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: 'gapless' 'sm' 'lg' 'xl' !default; | ||
5 | |||
4 | @include iro.props-namespace('media') { | 6 | @include iro.props-namespace('media') { |
5 | @include iro.props-store(( | 7 | @include iro.props-store(( |
6 | --dims: ( | 8 | --dims: ( |
7 | --pad-x: fn.global-dim(--size --150), | 9 | --gap: fn.global-dim(--size --150), |
8 | --pad-y: fn.global-dim(--size --85), | ||
9 | |||
10 | --75: ( | ||
11 | --pad-x: fn.global-dim(--size --100), | ||
12 | --pad-y: fn.global-dim(--size --50), | ||
13 | ), | ||
14 | 10 | ||
15 | --200: ( | 11 | --gapless: 0, |
16 | --pad-x: fn.global-dim(--size --300), | 12 | --sm: fn.global-dim(--size --100), |
17 | --pad-y: fn.global-dim(--size --150), | 13 | --lg: fn.global-dim(--size --300), |
18 | ), | 14 | --xl: fn.global-dim(--size --450), |
19 | |||
20 | --300: ( | ||
21 | --pad-x: fn.global-dim(--size --450), | ||
22 | --pad-y: fn.global-dim(--size --225), | ||
23 | ) | ||
24 | ) | 15 | ) |
25 | )); | 16 | )); |
26 | 17 | ||
27 | @include iro.bem-layout(iro.props-namespace()) { | 18 | @include iro.bem-layout(iro.props-namespace()) { |
28 | display: flex; | 19 | display: flex; |
29 | align-items: center; | 20 | align-items: center; |
30 | padding: fn.dim(--pad-y) fn.dim(--pad-x); | 21 | gap: fn.dim(--gap); |
31 | gap: fn.dim(--pad-x); | ||
32 | line-height: 1.4; | 22 | line-height: 1.4; |
33 | 23 | ||
34 | @include iro.bem-modifier('75') { | 24 | @each $size in $sizes { |
35 | padding: fn.dim(--75 --pad-y) fn.dim(--75 --pad-x); | 25 | @include iro.bem-modifier($size) { |
36 | gap: fn.dim(--75 --pad-x); | 26 | gap: fn.dim(--#{$size}); |
37 | } | 27 | } |
38 | |||
39 | @include iro.bem-modifier('200') { | ||
40 | padding: fn.dim(--200 --pad-y) fn.dim(--200 --pad-x); | ||
41 | gap: fn.dim(--200 --pad-x); | ||
42 | } | ||
43 | |||
44 | @include iro.bem-modifier('300') { | ||
45 | padding: fn.dim(--300 --pad-y) fn.dim(--300 --pad-x); | ||
46 | gap: fn.dim(--300 --pad-x); | ||
47 | } | ||
48 | |||
49 | @include iro.bem-modifier('flush') { | ||
50 | padding: 0; | ||
51 | } | ||
52 | |||
53 | @include iro.bem-modifier('gapless') { | ||
54 | gap: 0; | ||
55 | } | 28 | } |
56 | 29 | ||
57 | @include iro.bem-modifier('wrap') { | 30 | @include iro.bem-modifier('wrap') { |
diff --git a/src/objects/_card.scss b/src/objects/_card.scss index 07256cb..5783ac1 100644 --- a/src/objects/_card.scss +++ b/src/objects/_card.scss | |||
@@ -53,13 +53,21 @@ | |||
53 | } | 53 | } |
54 | } | 54 | } |
55 | 55 | ||
56 | @include iro.bem-elem('thumbnail') { | 56 | @include iro.bem-elem('avatar') { |
57 | margin-block-start: fn.dim(--pad-b); | ||
58 | margin-inline-start: fn.dim(--pad-i); | ||
59 | } | ||
60 | |||
61 | @include iro.bem-elem('image') { | ||
57 | position: relative; | 62 | position: relative; |
58 | width: 100%; | 63 | width: 100%; |
59 | height: 100%; | 64 | |
65 | @include iro.bem-next-elem('avatar') { | ||
66 | margin-block-start: calc(-.7 * fn.foreign-dim(--avatar, --xl --size)); | ||
67 | } | ||
60 | } | 68 | } |
61 | 69 | ||
62 | @include iro.bem-elem('thumbnail-img') { | 70 | @include iro.bem-elem('image-img') { |
63 | display: block; | 71 | display: block; |
64 | object-fit: cover; | 72 | object-fit: cover; |
65 | width: 100%; | 73 | width: 100%; |
@@ -69,6 +77,16 @@ | |||
69 | @include iro.bem-elem('body') { | 77 | @include iro.bem-elem('body') { |
70 | padding-block: fn.dim(--pad-b); | 78 | padding-block: fn.dim(--pad-b); |
71 | padding-inline: fn.dim(--pad-i); | 79 | padding-inline: fn.dim(--pad-i); |
80 | |||
81 | &::before { | ||
82 | content: ''; | ||
83 | display: block; | ||
84 | margin-block: -100em 100em; | ||
85 | } | ||
86 | } | ||
87 | |||
88 | @include iro.bem-elem('content') { | ||
89 | margin-block-start: fn.dim(--spacing); | ||
72 | } | 90 | } |
73 | 91 | ||
74 | @include iro.bem-elem('footer') { | 92 | @include iro.bem-elem('footer') { |
diff --git a/static/Drawing_Half.png b/static/Drawing_Half.png new file mode 100644 index 0000000..09f3814 --- /dev/null +++ b/static/Drawing_Half.png | |||
Binary files differ | |||
diff --git a/static/avatar.png b/static/avatar.png index aa4345f..596ccb4 100755 --- a/static/avatar.png +++ b/static/avatar.png | |||
Binary files differ | |||
diff --git a/tpl/index.pug b/tpl/index.pug index b6af02b..a6e99dd 100644 --- a/tpl/index.pug +++ b/tpl/index.pug | |||
@@ -49,7 +49,7 @@ mixin user-card(name, hue) | |||
49 | - | 49 | - |
50 | const avaName = name.slice(0, 1) | 50 | const avaName = name.slice(0, 1) |
51 | 51 | ||
52 | .l-media.l-media--flush.l-media--75 | 52 | .l-media.l-media--sm |
53 | +avatar(block=true size='xs' class='l-media__block' hue=hue) | 53 | +avatar(block=true size='xs' class='l-media__block' hue=hue) |
54 | = avaName | 54 | = avaName |
55 | = name | 55 | = name |
@@ -134,7 +134,7 @@ html | |||
134 | +view-message | 134 | +view-message |
135 | +view-message-group | 135 | +view-message-group |
136 | 136 | ||
137 | .c-sidebar.l-overflow.t-base.u-p-75 | 137 | .c-sidebar.l-overflow.u-bie-1.u-p-100 |
138 | +menu | 138 | +side-nav |
139 | each view in views | 139 | each view in views |
140 | +menu-item(tag='a' href='#' + view.id)= view.title | 140 | +side-nav-item(tag='a' href='#' + view.id)= view.title |
diff --git a/tpl/objects/avatar.pug b/tpl/objects/avatar.pug index 19439bb..ca3de07 100644 --- a/tpl/objects/avatar.pug +++ b/tpl/objects/avatar.pug | |||
@@ -20,11 +20,21 @@ mixin avatar | |||
20 | styles['--avatar--colors--h'] = attributes.hue; | 20 | styles['--avatar--colors--h'] = attributes.hue; |
21 | } | 21 | } |
22 | 22 | ||
23 | a(class=classes style=styles href=attributes.href) | 23 | if attributes.href |
24 | if attributes.status | 24 | a(class=classes style=styles href=attributes.href) |
25 | +status-indicator(attributes.status)(class='o-avatar__status') | 25 | if attributes.status |
26 | if attributes.src | 26 | +status-indicator(attributes.status)(class='o-avatar__status') |
27 | img.o-avatar__content(src=attributes.src) | 27 | if attributes.src |
28 | else | 28 | img.o-avatar__content(src=attributes.src) |
29 | .o-avatar__content | 29 | else |
30 | block | 30 | .o-avatar__content |
31 | block | ||
32 | else | ||
33 | div(class=classes style=styles) | ||
34 | if attributes.status | ||
35 | +status-indicator(attributes.status)(class='o-avatar__status') | ||
36 | if attributes.src | ||
37 | img.o-avatar__content(src=attributes.src) | ||
38 | else | ||
39 | .o-avatar__content | ||
40 | block | ||
diff --git a/tpl/objects/card.pug b/tpl/objects/card.pug index d6516be..d61393d 100644 --- a/tpl/objects/card.pug +++ b/tpl/objects/card.pug | |||
@@ -1,29 +1,34 @@ | |||
1 | mixin card | 1 | mixin card |
2 | - const slots = {} | ||
3 | |||
4 | mixin slot(key) | ||
5 | - slots[key] = block | ||
6 | |||
7 | - | 2 | - |
8 | block ? block() : undefined | ||
9 | |||
10 | let classes = { | 3 | let classes = { |
11 | 'o-card': true, | 4 | 'o-card': true, |
12 | } | 5 | } |
13 | 6 | ||
14 | if attributes.href | 7 | if attributes.href |
15 | a(href=attributes.href class=classes) | 8 | a(href=attributes.href class=classes) |
16 | if slots.body | 9 | block |
17 | .o-card__body | ||
18 | - slots.body() | ||
19 | if slots.footer | ||
20 | .o-card__footer | ||
21 | - slots.footer() | ||
22 | else | 10 | else |
23 | div(class=classes) | 11 | div(class=classes) |
24 | if slots.body | 12 | block |
25 | .o-card__body | 13 | |
26 | - slots.body() | 14 | mixin card-image |
27 | if slots.footer | 15 | .o-card__image |
28 | .o-card__footer | 16 | img.o-card__image-img(src=attributes.src) |
29 | - slots.footer() | 17 | |
18 | mixin card-body | ||
19 | .o-card__body | ||
20 | block | ||
21 | |||
22 | mixin card-title | ||
23 | h1.o-card__title | ||
24 | block | ||
25 | |||
26 | mixin card-avatar | ||
27 | +avatar(class='o-card__avatar' src=attributes.src size='xl') | ||
28 | |||
29 | mixin card-content | ||
30 | .o-card__content | ||
31 | block | ||
32 | mixin card-footer | ||
33 | footer.o-card__footer | ||
34 | block | ||
diff --git a/tpl/objects/menu.pug b/tpl/objects/menu.pug index a8b20d7..578f9bc 100644 --- a/tpl/objects/menu.pug +++ b/tpl/objects/menu.pug | |||
@@ -19,7 +19,7 @@ mixin menu-item | |||
19 | let classes = { | 19 | let classes = { |
20 | 'o-menu__item': true, | 20 | 'o-menu__item': true, |
21 | 'l-media': true, | 21 | 'l-media': true, |
22 | 'l-media--75': true, | 22 | 'l-media--sm': true, |
23 | 'o-menu__header': attributes.header, | 23 | 'o-menu__header': attributes.header, |
24 | 'is-selected': attributes.selected, | 24 | 'is-selected': attributes.selected, |
25 | } | 25 | } |
diff --git a/tpl/objects/message.pug b/tpl/objects/message.pug index d644347..6b64a40 100644 --- a/tpl/objects/message.pug +++ b/tpl/objects/message.pug | |||
@@ -45,7 +45,7 @@ mixin message(user) | |||
45 | 45 | ||
46 | article(class=classes) | 46 | article(class=classes) |
47 | if user && attributes.avatar | 47 | if user && attributes.avatar |
48 | .l-media.l-media--flush.l-flex--align-start | 48 | .l-media.l-flex--align-start |
49 | .l-media__block.u-mt-50.u-p-sticky-top | 49 | .l-media__block.u-mt-50.u-p-sticky-top |
50 | +avatar= user.slice(0, 2) | 50 | +avatar= user.slice(0, 2) |
51 | .l-media__block.l-media__block--main | 51 | .l-media__block.l-media__block--main |
diff --git a/tpl/objects/side-nav.pug b/tpl/objects/side-nav.pug index 511f298..ccd24e4 100644 --- a/tpl/objects/side-nav.pug +++ b/tpl/objects/side-nav.pug | |||
@@ -19,7 +19,7 @@ mixin side-nav-item | |||
19 | let classes = { | 19 | let classes = { |
20 | 'o-side-nav__item': true, | 20 | 'o-side-nav__item': true, |
21 | 'l-media': true, | 21 | 'l-media': true, |
22 | 'l-media--75': true, | 22 | 'l-media--sm': true, |
23 | 'o-side-nav__header': attributes.header, | 23 | 'o-side-nav__header': attributes.header, |
24 | 'is-selected': attributes.selected, | 24 | 'is-selected': attributes.selected, |
25 | } | 25 | } |
diff --git a/tpl/objects/text-field.pug b/tpl/objects/text-field.pug index f8e5263..0342f01 100644 --- a/tpl/objects/text-field.pug +++ b/tpl/objects/text-field.pug | |||
@@ -15,7 +15,6 @@ mixin text-field | |||
15 | 'is-invalid': attributes.invalid, | 15 | 'is-invalid': attributes.invalid, |
16 | 'is-disabled': attributes.disabled, | 16 | 'is-disabled': attributes.disabled, |
17 | 'l-media': !!block, | 17 | 'l-media': !!block, |
18 | 'l-media--flush': !!block, | ||
19 | 'l-media--gapless': !!block, | 18 | 'l-media--gapless': !!block, |
20 | } | 19 | } |
21 | if (attributes.class) { | 20 | if (attributes.class) { |
diff --git a/tpl/views/card.pug b/tpl/views/card.pug index 0b88b0e..6858867 100644 --- a/tpl/views/card.pug +++ b/tpl/views/card.pug | |||
@@ -1,9 +1,23 @@ | |||
1 | mixin view-card | 1 | mixin view-card |
2 | +view('card', 'Card') | 2 | +view('card', 'Card') |
3 | .c-box | 3 | .c-box(style={ display: 'flex', 'flex-direction': 'column', gap: '1em' }) |
4 | +card(href='#') | 4 | +card(href='#') |
5 | +slot('body') | 5 | +card-image(src='Drawing_Half.png') |
6 | h1= 'XS Heading' | 6 | +card-avatar(src='avatar.png') |
7 | p= loremIpsum | 7 | +card-body |
8 | +slot('footer') | 8 | +card-title= 'XS Heading' |
9 | +card-content= loremIpsum | ||
10 | +card-footer | ||
11 | = 'Footer' | ||
12 | |||
13 | +card(href='#') | ||
14 | +card-body | ||
15 | .l-media | ||
16 | +avatar(class='l-media__block' src='avatar.png') | ||
17 | .l-media__block.l-media__block--main | ||
18 | strong.u-d-block= 'Volpeon' | ||
19 | small.u-d-block= '@volpeon@is-a.wyvern.rip' | ||
20 | +card-content= loremIpsum | ||
21 | +card-image(src='Drawing_Half.png') | ||
22 | +card-body | ||
9 | = 'Footer' | 23 | = 'Footer' |
diff --git a/tpl/views/menu.pug b/tpl/views/menu.pug index 34a15ce..7c5df03 100644 --- a/tpl/views/menu.pug +++ b/tpl/views/menu.pug | |||
@@ -5,7 +5,7 @@ mixin view-menu | |||
5 | +action-button(quiet=true selected=true)= 'Menu' | 5 | +action-button(quiet=true selected=true)= 'Menu' |
6 | +popover | 6 | +popover |
7 | +menu | 7 | +menu |
8 | +menu-slot(class='l-media l-media--flush') | 8 | +menu-slot(class='l-media') |
9 | +avatar(block=true circle=true size='100' src='avatar.png' class='l-media__block') | 9 | +avatar(block=true circle=true size='100' src='avatar.png' class='l-media__block') |
10 | .l-media__block.l-media__block--main | 10 | .l-media__block.l-media__block--main |
11 | strong.u-d-block= 'Volpeon' | 11 | strong.u-d-block= 'Volpeon' |
diff --git a/tpl/views/message-group.pug b/tpl/views/message-group.pug index 3d1166f..dc744d9 100644 --- a/tpl/views/message-group.pug +++ b/tpl/views/message-group.pug | |||
@@ -68,7 +68,7 @@ mixin view-message-group | |||
68 | +message-group('Volpeon') | 68 | +message-group('Volpeon') |
69 | +message()(theme='t-up' group=true) | 69 | +message()(theme='t-up' group=true) |
70 | +slot('header') | 70 | +slot('header') |
71 | .l-media.l-media--flush | 71 | .l-media |
72 | .l-media__block.l-media__block--main | 72 | .l-media__block.l-media__block--main |
73 | strong= 'Volpeon' | 73 | strong= 'Volpeon' |
74 | small.u-ml-100= '@volpeon@mk.vulpes.one' | 74 | small.u-ml-100= '@volpeon@mk.vulpes.one' |
diff --git a/tpl/views/message.pug b/tpl/views/message.pug index f256e41..9130537 100644 --- a/tpl/views/message.pug +++ b/tpl/views/message.pug | |||
@@ -18,7 +18,7 @@ mixin view-message | |||
18 | .c-box.l-overflow(style='resize: vertical') | 18 | .c-box.l-overflow(style='resize: vertical') |
19 | +message('Volpeon')(avatar=true theme='t-up') | 19 | +message('Volpeon')(avatar=true theme='t-up') |
20 | +slot('header') | 20 | +slot('header') |
21 | .l-media.l-media--flush | 21 | .l-media |
22 | .l-media__block.l-media__block--main | 22 | .l-media__block.l-media__block--main |
23 | strong= 'Volpeon' | 23 | strong= 'Volpeon' |
24 | small.u-ml-100= '@volpeon@mk.vulpes.one' | 24 | small.u-ml-100= '@volpeon@mk.vulpes.one' |