diff options
Diffstat (limited to 'src/objects/_thumbnail.scss')
-rw-r--r-- | src/objects/_thumbnail.scss | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/src/objects/_thumbnail.scss b/src/objects/_thumbnail.scss new file mode 100644 index 0000000..73a8cb0 --- /dev/null +++ b/src/objects/_thumbnail.scss | |||
@@ -0,0 +1,104 @@ | |||
1 | @use 'sass:map'; | ||
2 | @use 'sass:meta'; | ||
3 | @use 'sass:string'; | ||
4 | @use 'iro-sass/src/bem'; | ||
5 | @use 'iro-sass/src/props'; | ||
6 | @use '../props' as *; | ||
7 | |||
8 | @forward 'thumbnail.vars'; | ||
9 | @use 'thumbnail.vars' as vars; | ||
10 | |||
11 | @mixin styles { | ||
12 | @include materialize-at-root(meta.module-variables('vars')); | ||
13 | |||
14 | @include bem.object('thumbnail') { | ||
15 | position: relative; | ||
16 | display: block; | ||
17 | flex: 0 0 auto; | ||
18 | inline-size: props.get(vars.$size); | ||
19 | block-size: props.get(vars.$size); | ||
20 | overflow: hidden; | ||
21 | border-radius: props.get(vars.$rounding); | ||
22 | outline: props.get(vars.$border-color) solid props.get(vars.$border-width); | ||
23 | outline-offset: calc(-1 * props.get(vars.$border-width)); | ||
24 | opacity: .75; | ||
25 | |||
26 | &:hover, | ||
27 | &:active, | ||
28 | &:focus-visible { | ||
29 | outline-color: props.get(vars.$hover--border-color); | ||
30 | opacity: 1; | ||
31 | } | ||
32 | |||
33 | @include bem.is('selected') { | ||
34 | $focus-border-offset: calc(-1 * props.get(vars.$selected--border-width)); | ||
35 | |||
36 | margin: $focus-border-offset; | ||
37 | border: props.get(vars.$selected--border-width) solid props.get(vars.$selected--border-color); | ||
38 | border-radius: calc(props.get(vars.$rounding) - $focus-border-offset); | ||
39 | outline: none; | ||
40 | opacity: 1; | ||
41 | } | ||
42 | |||
43 | @include bem.elem('image') { | ||
44 | position: absolute; | ||
45 | inset-block-start: 0; | ||
46 | inset-inline-start: 0; | ||
47 | display: block; | ||
48 | inline-size: 100%; | ||
49 | block-size: 100%; | ||
50 | object-fit: cover; | ||
51 | object-position: center center; | ||
52 | } | ||
53 | |||
54 | @include bem.elem('icon') { | ||
55 | position: absolute; | ||
56 | inset-block-start: 50%; | ||
57 | inset-inline-start: 50%; | ||
58 | transform: translate(-50%, -50%); | ||
59 | } | ||
60 | |||
61 | &:focus-visible { | ||
62 | $focus-border-offset: calc(-1 * props.get(vars.$key-focus--border-offset)); | ||
63 | |||
64 | margin: $focus-border-offset; | ||
65 | border: props.get(vars.$key-focus--border-offset) solid transparent; | ||
66 | border-radius: calc(props.get(vars.$rounding) - $focus-border-offset); | ||
67 | outline: props.get(vars.$key-focus--border-color) solid props.get(vars.$key-focus--border-width); | ||
68 | outline-offset: 0; | ||
69 | box-shadow: | ||
70 | 0 | ||
71 | 0 | ||
72 | 0 | ||
73 | calc(props.get(vars.$key-focus--outline-width) + props.get(vars.$key-focus--border-width)) | ||
74 | props.get(vars.$key-focus--outline-color); | ||
75 | } | ||
76 | |||
77 | @each $theme in map.keys(props.get(vars.$static-themes)) { | ||
78 | @include bem.modifier(string.slice($theme, 3)) { | ||
79 | outline-color: props.get(vars.$static-themes, $theme, --border); | ||
80 | |||
81 | &:hover, | ||
82 | &:active, | ||
83 | &:focus-visible { | ||
84 | outline-color: props.get(vars.$static-themes, $theme, --hover, --border); | ||
85 | } | ||
86 | |||
87 | @include bem.is('selected') { | ||
88 | border-color: props.get(vars.$static-themes, $theme, --selected, --border); | ||
89 | } | ||
90 | |||
91 | &:focus-visible { | ||
92 | border-color: transparent; | ||
93 | outline-color: props.get(vars.$static-themes, $theme, --key-focus, --border); | ||
94 | box-shadow: | ||
95 | 0 | ||
96 | 0 | ||
97 | 0 | ||
98 | calc(props.get(vars.$key-focus--outline-width) + props.get(vars.$key-focus--border-width)) | ||
99 | props.get(vars.$static-themes, $theme, --key-focus, --outline); | ||
100 | } | ||
101 | } | ||
102 | } | ||
103 | } | ||
104 | } | ||