diff options
Diffstat (limited to 'src/objects/_lightbox.scss')
| -rw-r--r-- | src/objects/_lightbox.scss | 104 |
1 files changed, 58 insertions, 46 deletions
diff --git a/src/objects/_lightbox.scss b/src/objects/_lightbox.scss index 740f4e5..66faab5 100644 --- a/src/objects/_lightbox.scss +++ b/src/objects/_lightbox.scss | |||
| @@ -1,14 +1,16 @@ | |||
| 1 | @use 'sass:map'; | ||
| 2 | @use 'sass:meta'; | ||
| 3 | @use 'sass:string'; | ||
| 1 | @use 'iro-sass/src/iro-sass' as iro; | 4 | @use 'iro-sass/src/iro-sass' as iro; |
| 2 | @use '../functions' as fn; | 5 | @use '../props'; |
| 3 | 6 | ||
| 4 | @use 'action-button'; | 7 | @forward 'lightbox.vars'; |
| 8 | @use 'lightbox.vars' as vars; | ||
| 5 | 9 | ||
| 6 | $static-themes: 'black' 'white' !default; | 10 | @mixin styles { |
| 11 | @include props.materialize(meta.module-variables('vars')); | ||
| 7 | 12 | ||
| 8 | @include iro.props-namespace('lightbox') { | 13 | @include iro.bem-object('lightbox') { |
| 9 | |||
| 10 | |||
| 11 | @include iro.bem-object(iro.props-namespace()) { | ||
| 12 | box-sizing: border-box; | 14 | box-sizing: border-box; |
| 13 | display: grid; | 15 | display: grid; |
| 14 | flex: 1 1 auto; | 16 | flex: 1 1 auto; |
| @@ -25,8 +27,8 @@ $static-themes: 'black' 'white' !default; | |||
| 25 | display: flex; | 27 | display: flex; |
| 26 | grid-area: header; | 28 | grid-area: header; |
| 27 | align-items: flex-start; | 29 | align-items: flex-start; |
| 28 | padding-block-start: fn.dim(--pad); | 30 | padding-block-start: props.get(vars.$pad); |
| 29 | padding-inline: fn.dim(--pad); | 31 | padding-inline: props.get(vars.$pad); |
| 30 | } | 32 | } |
| 31 | 33 | ||
| 32 | @include iro.bem-elem('img') { | 34 | @include iro.bem-elem('img') { |
| @@ -36,7 +38,7 @@ $static-themes: 'black' 'white' !default; | |||
| 36 | place-self: center; | 38 | place-self: center; |
| 37 | max-inline-size: 100%; | 39 | max-inline-size: 100%; |
| 38 | max-block-size: 100%; | 40 | max-block-size: 100%; |
| 39 | padding: fn.dim(--pad); | 41 | padding: props.get(vars.$pad); |
| 40 | 42 | ||
| 41 | @include iro.bem-sibling-elem('img') { | 43 | @include iro.bem-sibling-elem('img') { |
| 42 | @include iro.bem-modifier('default') { | 44 | @include iro.bem-modifier('default') { |
| @@ -82,9 +84,9 @@ $static-themes: 'black' 'white' !default; | |||
| 82 | @include iro.bem-elem('thumbnails') { | 84 | @include iro.bem-elem('thumbnails') { |
| 83 | display: flex; | 85 | display: flex; |
| 84 | grid-area: thumbnails; | 86 | grid-area: thumbnails; |
| 85 | gap: fn.dim(--thumbnail --spacing); | 87 | gap: props.get(vars.$thumbnail--spacing); |
| 86 | padding: fn.dim(--pad); | 88 | padding: props.get(vars.$pad); |
| 87 | margin-block-start: calc(-1 * fn.dim(--pad)); | 89 | margin-block-start: calc(-1 * props.get(vars.$pad)); |
| 88 | overflow: auto; | 90 | overflow: auto; |
| 89 | } | 91 | } |
| 90 | 92 | ||
| @@ -92,47 +94,52 @@ $static-themes: 'black' 'white' !default; | |||
| 92 | display: flex; | 94 | display: flex; |
| 93 | grid-area: footer; | 95 | grid-area: footer; |
| 94 | align-items: flex-start; | 96 | align-items: flex-start; |
| 95 | padding-block: 0 fn.dim(--pad); | 97 | padding-block: 0 props.get(vars.$pad); |
| 96 | padding-inline: fn.dim(--pad); | 98 | padding-inline: props.get(vars.$pad); |
| 97 | } | 99 | } |
| 98 | 100 | ||
| 99 | @include iro.bem-elem('thumbnail') { | 101 | @include iro.bem-elem('thumbnail') { |
| 100 | position: relative; | 102 | position: relative; |
| 101 | flex: 0 0 auto; | 103 | flex: 0 0 auto; |
| 102 | inline-size: fn.dim(--thumbnail --size); | 104 | inline-size: props.get(vars.$thumbnail--size); |
| 103 | block-size: fn.dim(--thumbnail --size); | 105 | block-size: props.get(vars.$thumbnail--size); |
| 104 | overflow: hidden; | 106 | overflow: hidden; |
| 105 | border-radius: fn.dim(--thumbnail --rounding); | 107 | border-radius: props.get(vars.$thumbnail--rounding); |
| 106 | outline: fn.dim(--thumbnail --border) solid fn.color(--thumbnail --border); | 108 | outline: props.get(vars.$thumbnail--border-color) solid props.get(vars.$thumbnail--border-width); |
| 107 | outline-offset: calc(-1 * fn.dim(--thumbnail --border)); | 109 | outline-offset: calc(-1 * props.get(vars.$thumbnail--border-width)); |
| 108 | opacity: .75; | 110 | opacity: .75; |
| 109 | 111 | ||
| 110 | &:hover, | 112 | &:hover, |
| 111 | &:active, | 113 | &:active, |
| 112 | &:focus-visible { | 114 | &:focus-visible { |
| 113 | outline-color: fn.color(--thumbnail --hover --border); | 115 | outline-color: props.get(vars.$thumbnail--hover--border-color); |
| 114 | opacity: 1; | 116 | opacity: 1; |
| 115 | } | 117 | } |
| 116 | 118 | ||
| 117 | @include iro.bem-is('selected') { | 119 | @include iro.bem-is('selected') { |
| 118 | $focus-border-offset: calc(-1 * fn.dim(--thumbnail --selected --border)); | 120 | $focus-border-offset: calc(-1 * props.get(vars.$thumbnail--selected--border-width)); |
| 119 | 121 | ||
| 120 | margin: $focus-border-offset; | 122 | margin: $focus-border-offset; |
| 121 | border: fn.dim(--thumbnail --selected --border) solid fn.color(--thumbnail --selected --border); | 123 | border: props.get(vars.$thumbnail--selected--border-width) solid props.get(vars.$thumbnail--selected--border-color); |
| 122 | border-radius: calc(fn.dim(--thumbnail --rounding) - $focus-border-offset); | 124 | border-radius: calc(props.get(vars.$thumbnail--rounding) - $focus-border-offset); |
| 123 | outline: none; | 125 | outline: none; |
| 124 | opacity: 1; | 126 | opacity: 1; |
| 125 | } | 127 | } |
| 126 | 128 | ||
| 127 | &:focus-visible { | 129 | &:focus-visible { |
| 128 | $focus-border-offset: calc(-1 * fn.dim(--thumbnail --key-focus --border-offset)); | 130 | $focus-border-offset: calc(-1 * props.get(vars.$thumbnail--key-focus--border-offset)); |
| 129 | 131 | ||
| 130 | margin: $focus-border-offset; | 132 | margin: $focus-border-offset; |
| 131 | border: fn.dim(--thumbnail --key-focus --border-offset) solid transparent; | 133 | border: props.get(vars.$thumbnail--key-focus--border-offset) solid transparent; |
| 132 | border-radius: calc(fn.dim(--thumbnail --rounding) - $focus-border-offset); | 134 | border-radius: calc(props.get(vars.$thumbnail--rounding) - $focus-border-offset); |
| 133 | outline: fn.dim(--thumbnail --key-focus --border) solid fn.color(--thumbnail --key-focus --border); | 135 | outline: props.get(vars.$thumbnail--key-focus--border-color) solid props.get(vars.$thumbnail--key-focus--border-width); |
| 134 | outline-offset: 0; | 136 | outline-offset: 0; |
| 135 | box-shadow: 0 0 0 calc(fn.dim(--thumbnail --key-focus --outline) + fn.dim(--thumbnail --key-focus --border)) fn.color(--thumbnail --key-focus --outline); | 137 | box-shadow: |
| 138 | 0 | ||
| 139 | 0 | ||
| 140 | 0 | ||
| 141 | calc(props.get(vars.$thumbnail--key-focus--outline-width) + props.get(vars.$thumbnail--key-focus--border-width)) | ||
| 142 | props.get(vars.$thumbnail--key-focus--outline-color); | ||
| 136 | } | 143 | } |
| 137 | } | 144 | } |
| 138 | 145 | ||
| @@ -156,9 +163,9 @@ $static-themes: 'black' 'white' !default; | |||
| 156 | 163 | ||
| 157 | @include iro.bem-elem('close-btn') { | 164 | @include iro.bem-elem('close-btn') { |
| 158 | flex: 0 0 auto; | 165 | flex: 0 0 auto; |
| 159 | margin-block-start: calc(-.5 * fn.dim(--pad)); | 166 | margin-block-start: calc(-.5 * props.get(vars.$pad)); |
| 160 | margin-inline: auto calc(-.5 * fn.dim(--pad)); | 167 | margin-inline: auto calc(-.5 * props.get(vars.$pad)); |
| 161 | font-size: fn.dim(--close-button --font-size); | 168 | font-size: props.get(vars.$close-button--font-size); |
| 162 | } | 169 | } |
| 163 | 170 | ||
| 164 | @include iro.bem-elem('nav-btn') { | 171 | @include iro.bem-elem('nav-btn') { |
| @@ -166,21 +173,21 @@ $static-themes: 'black' 'white' !default; | |||
| 166 | display: none; | 173 | display: none; |
| 167 | align-self: center; | 174 | align-self: center; |
| 168 | overflow: visible; | 175 | overflow: visible; |
| 169 | font-size: fn.dim(--nav-button --font-size); | 176 | font-size: props.get(vars.$nav-button--font-size); |
| 170 | 177 | ||
| 171 | &::before { | 178 | &::before { |
| 172 | position: absolute; | 179 | position: absolute; |
| 173 | inset-block-start: 50%; | 180 | inset-block-start: 50%; |
| 174 | display: block; | 181 | display: block; |
| 175 | inline-size: fn.dim(--nav-button --width); | 182 | inline-size: props.get(vars.$nav-button--inline-size); |
| 176 | block-size: fn.dim(--nav-button --height); | 183 | block-size: props.get(vars.$nav-button--block-size); |
| 177 | content: ''; | 184 | content: ''; |
| 178 | transform: translateY(-50%); | 185 | transform: translateY(-50%); |
| 179 | } | 186 | } |
| 180 | 187 | ||
| 181 | @include iro.bem-modifier('prev') { | 188 | @include iro.bem-modifier('prev') { |
| 182 | grid-area: prev; | 189 | grid-area: prev; |
| 183 | margin-inline: calc(.5 * fn.dim(--pad)) calc(-1 * fn.dim(--pad)); | 190 | margin-inline: calc(.5 * props.get(vars.$pad)) calc(-1 * props.get(vars.$pad)); |
| 184 | 191 | ||
| 185 | &::before { | 192 | &::before { |
| 186 | inset-inline-start: 0; | 193 | inset-inline-start: 0; |
| @@ -189,35 +196,40 @@ $static-themes: 'black' 'white' !default; | |||
| 189 | 196 | ||
| 190 | @include iro.bem-modifier('next') { | 197 | @include iro.bem-modifier('next') { |
| 191 | grid-area: next; | 198 | grid-area: next; |
| 192 | margin-inline: calc(-1 * fn.dim(--pad)) calc(.5 * fn.dim(--pad)); | 199 | margin-inline: calc(-1 * props.get(vars.$pad)) calc(.5 * props.get(vars.$pad)); |
| 193 | 200 | ||
| 194 | &::before { | 201 | &::before { |
| 195 | inset-inline-end: 0; | 202 | inset-inline-end: 0; |
| 196 | } | 203 | } |
| 197 | } | 204 | } |
| 198 | } | 205 | } |
| 199 | 206 | ||
| 200 | @each $theme in $static-themes { | 207 | @each $theme in map.keys(props.get(vars.$static-themes)) { |
| 201 | @include iro.bem-modifier(static-#{$theme}) { | 208 | @include iro.bem-modifier(string.slice($theme, 3)) { |
| 202 | color: fn.color(--static-#{$theme} --text); | 209 | color: props.get(vars.$static-themes, $theme, --text); |
| 203 | 210 | ||
| 204 | @include iro.bem-elem('thumbnail') { | 211 | @include iro.bem-elem('thumbnail') { |
| 205 | outline-color: fn.color(--static-#{$theme} --thumbnail --border); | 212 | outline-color: props.get(vars.$static-themes, $theme, --thumbnail, --border); |
| 206 | 213 | ||
| 207 | &:hover, | 214 | &:hover, |
| 208 | &:active, | 215 | &:active, |
| 209 | &:focus-visible { | 216 | &:focus-visible { |
| 210 | outline-color: fn.color(--static-#{$theme} --thumbnail --hover --border); | 217 | outline-color: props.get(vars.$static-themes, $theme, --thumbnail, --hover, --border); |
| 211 | } | 218 | } |
| 212 | 219 | ||
| 213 | @include iro.bem-is('selected') { | 220 | @include iro.bem-is('selected') { |
| 214 | border-color: fn.color(--static-#{$theme} --thumbnail --selected --border); | 221 | border-color: props.get(vars.$static-themes, $theme, --thumbnail, --selected, --border); |
| 215 | } | 222 | } |
| 216 | 223 | ||
| 217 | &:focus-visible { | 224 | &:focus-visible { |
| 218 | border-color: transparent; | 225 | border-color: transparent; |
| 219 | outline-color: fn.color(--static-#{$theme} --thumbnail --key-focus --border); | 226 | outline-color: props.get(vars.$static-themes, $theme, --thumbnail, --key-focus, --border); |
| 220 | box-shadow: 0 0 0 calc(fn.dim(--thumbnail --key-focus --outline) + fn.dim(--thumbnail --key-focus --border)) fn.color(--static-#{$theme} --thumbnail --key-focus --outline); | 227 | box-shadow: |
| 228 | 0 | ||
| 229 | 0 | ||
| 230 | 0 | ||
| 231 | calc(props.get(vars.$thumbnail--key-focus--outline-width) + props.get(vars.$thumbnail--key-focus--border-width)) | ||
| 232 | props.get(vars.$static-themes, $theme, --thumbnail, --key-focus, --outline); | ||
| 221 | } | 233 | } |
| 222 | } | 234 | } |
| 223 | } | 235 | } |
