diff options
Diffstat (limited to 'src/objects/_button.scss')
| -rw-r--r-- | src/objects/_button.scss | 460 |
1 files changed, 230 insertions, 230 deletions
diff --git a/src/objects/_button.scss b/src/objects/_button.scss index 5ba8576..8163cf9 100644 --- a/src/objects/_button.scss +++ b/src/objects/_button.scss | |||
| @@ -10,276 +10,276 @@ | |||
| 10 | @use 'button.vars' as vars; | 10 | @use 'button.vars' as vars; |
| 11 | 11 | ||
| 12 | @mixin -apply-theme($theme, $key: ()) { | 12 | @mixin -apply-theme($theme, $key: ()) { |
| 13 | color: props.get($theme, list.join($key, --disabled --label-color)...); | 13 | color: props.get($theme, list.join($key, --disabled --label-color)...); |
| 14 | background-color: props.get($theme, list.join($key, --disabled --bg-color)...); | 14 | background-color: props.get($theme, list.join($key, --disabled --bg-color)...); |
| 15 | border-color: props.get($theme, list.join($key, --disabled --border-color)...); | 15 | border-color: props.get($theme, list.join($key, --disabled --border-color)...); |
| 16 | 16 | ||
| 17 | &::after { | 17 | &::after { |
| 18 | outline-color: props.get($theme, list.join($key, --key-focus --border-color)...); | 18 | outline-color: props.get($theme, list.join($key, --key-focus --border-color)...); |
| 19 | box-shadow: | 19 | box-shadow: |
| 20 | 0 | 20 | 0 |
| 21 | 0 | 21 | 0 |
| 22 | 0 | 22 | 0 |
| 23 | calc(props.get(vars.$key-focus--border-width) + props.get(vars.$key-focus--outline-width)) | 23 | calc(props.get(vars.$key-focus--border-width) + props.get(vars.$key-focus--outline-width)) |
| 24 | props.get($theme, list.join($key, --key-focus --outline-color)...); | 24 | props.get($theme, list.join($key, --key-focus --outline-color)...); |
| 25 | } | 25 | } |
| 26 | 26 | ||
| 27 | &:link, | 27 | &:link, |
| 28 | &:visited, | 28 | &:visited, |
| 29 | &:enabled { | 29 | &:enabled { |
| 30 | color: props.get($theme, list.join($key, --label-color)...); | 30 | color: props.get($theme, list.join($key, --label-color)...); |
| 31 | background-color: props.get($theme, list.join($key, --bg-color)...); | 31 | background-color: props.get($theme, list.join($key, --bg-color)...); |
| 32 | border-color: props.get($theme, list.join($key, --border-color)...); | 32 | border-color: props.get($theme, list.join($key, --border-color)...); |
| 33 | box-shadow: | 33 | box-shadow: |
| 34 | props.get(vars.$shadow-x) | 34 | props.get(vars.$shadow-x) |
| 35 | props.get(vars.$shadow-y) | 35 | props.get(vars.$shadow-y) |
| 36 | props.get(vars.$shadow-blur) | 36 | props.get(vars.$shadow-blur) |
| 37 | props.get(vars.$shadow-grow) | 37 | props.get(vars.$shadow-grow) |
| 38 | props.get($theme, list.join($key, --shadow-color)...); | 38 | props.get($theme, list.join($key, --shadow-color)...); |
| 39 | 39 | ||
| 40 | &:hover, | 40 | &:hover, |
| 41 | &:focus-visible { | 41 | &:focus-visible { |
| 42 | color: props.get($theme, list.join($key, --hover --label-color)...); | 42 | color: props.get($theme, list.join($key, --hover --label-color)...); |
| 43 | background-color: props.get($theme, list.join($key, --hover --bg-color)...); | 43 | background-color: props.get($theme, list.join($key, --hover --bg-color)...); |
| 44 | border-color: props.get($theme, list.join($key, --hover --border-color)...); | 44 | border-color: props.get($theme, list.join($key, --hover --border-color)...); |
| 45 | } | 45 | } |
| 46 | 46 | ||
| 47 | &:active { | 47 | &:active { |
| 48 | color: props.get($theme, list.join($key, --active --label-color)...); | 48 | color: props.get($theme, list.join($key, --active --label-color)...); |
| 49 | background-color: props.get($theme, list.join($key, --active --bg-color)...); | 49 | background-color: props.get($theme, list.join($key, --active --bg-color)...); |
| 50 | border-color: props.get($theme, list.join($key, --active --border-color)...); | 50 | border-color: props.get($theme, list.join($key, --active --border-color)...); |
| 51 | box-shadow: none; | 51 | box-shadow: none; |
| 52 | } | 52 | } |
| 53 | } | 53 | } |
| 54 | 54 | ||
| 55 | @include bem.modifier('badge') { | 55 | @include bem.modifier('badge') { |
| 56 | color: props.get($theme, list.join($key, --badge --label-color)...); | 56 | color: props.get($theme, list.join($key, --badge --label-color)...); |
| 57 | background-color: props.get($theme, list.join($key, --badge --bg-color)...); | 57 | background-color: props.get($theme, list.join($key, --badge --bg-color)...); |
| 58 | border-color: props.get($theme, list.join($key, --badge --border-color)...); | 58 | border-color: props.get($theme, list.join($key, --badge --border-color)...); |
| 59 | box-shadow: none; | 59 | box-shadow: none; |
| 60 | 60 | ||
| 61 | &:link, | 61 | &:link, |
| 62 | &:visited, | 62 | &:visited, |
| 63 | &:enabled { | 63 | &:enabled { |
| 64 | color: props.get($theme, list.join($key, --badge --label-color)...); | 64 | color: props.get($theme, list.join($key, --badge --label-color)...); |
| 65 | background-color: props.get($theme, list.join($key, --badge --bg-color)...); | 65 | background-color: props.get($theme, list.join($key, --badge --bg-color)...); |
| 66 | border-color: props.get($theme, list.join($key, --badge --border-color)...); | 66 | border-color: props.get($theme, list.join($key, --badge --border-color)...); |
| 67 | box-shadow: none; | 67 | box-shadow: none; |
| 68 | 68 | ||
| 69 | &:hover, | 69 | &:hover, |
| 70 | &:focus-visible { | 70 | &:focus-visible { |
| 71 | color: props.get($theme, list.join($key, --badge --hover --label-color)...); | 71 | color: props.get($theme, list.join($key, --badge --hover --label-color)...); |
| 72 | background-color: props.get($theme, list.join($key, --badge --hover --bg-color)...); | 72 | background-color: props.get($theme, list.join($key, --badge --hover --bg-color)...); |
| 73 | border-color: props.get($theme, list.join($key, --badge --hover --border-color)...); | 73 | border-color: props.get($theme, list.join($key, --badge --hover --border-color)...); |
| 74 | } | 74 | } |
| 75 | 75 | ||
| 76 | &:active { | 76 | &:active { |
| 77 | color: props.get($theme, list.join($key, --badge --active --label-color)...); | 77 | color: props.get($theme, list.join($key, --badge --active --label-color)...); |
| 78 | background-color: props.get($theme, list.join($key, --badge --active --bg-color)...); | 78 | background-color: props.get($theme, list.join($key, --badge --active --bg-color)...); |
| 79 | border-color: props.get($theme, list.join($key, --badge --active --border-color)...); | 79 | border-color: props.get($theme, list.join($key, --badge --active --border-color)...); |
| 80 | } | 80 | } |
| 81 | } | 81 | } |
| 82 | } | 82 | } |
| 83 | 83 | ||
| 84 | @include bem.modifier('quiet') { | 84 | @include bem.modifier('quiet') { |
| 85 | color: props.get($theme, list.join($key, --quiet --disabled --label-color)...); | 85 | color: props.get($theme, list.join($key, --quiet --disabled --label-color)...); |
| 86 | background-color: transparent; | 86 | background-color: transparent; |
| 87 | border-color: transparent; | 87 | border-color: transparent; |
| 88 | 88 | ||
| 89 | &:link, | 89 | &:link, |
| 90 | &:visited, | 90 | &:visited, |
| 91 | &:enabled { | 91 | &:enabled { |
| 92 | color: props.get($theme, list.join($key, --quiet --label-color)...); | 92 | color: props.get($theme, list.join($key, --quiet --label-color)...); |
| 93 | background-color: transparent; | 93 | background-color: transparent; |
| 94 | border-color: transparent; | 94 | border-color: transparent; |
| 95 | box-shadow: none; | 95 | box-shadow: none; |
| 96 | 96 | ||
| 97 | &:hover, | 97 | &:hover, |
| 98 | &:focus-visible { | 98 | &:focus-visible { |
| 99 | color: props.get($theme, list.join($key, --quiet --hover --label-color)...); | 99 | color: props.get($theme, list.join($key, --quiet --hover --label-color)...); |
| 100 | background-color: props.get($theme, list.join($key, --quiet --hover --bg-color)...); | 100 | background-color: props.get($theme, list.join($key, --quiet --hover --bg-color)...); |
| 101 | border-color: transparent; | 101 | border-color: transparent; |
| 102 | } | 102 | } |
| 103 | 103 | ||
| 104 | &:active { | 104 | &:active { |
| 105 | color: props.get($theme, list.join($key, --quiet --active --label-color)...); | 105 | color: props.get($theme, list.join($key, --quiet --active --label-color)...); |
| 106 | background-color: props.get($theme, list.join($key, --quiet --active --bg-color)...); | 106 | background-color: props.get($theme, list.join($key, --quiet --active --bg-color)...); |
| 107 | border-color: transparent; | 107 | border-color: transparent; |
| 108 | } | 108 | } |
| 109 | } | 109 | } |
| 110 | } | 110 | } |
| 111 | 111 | ||
| 112 | @include bem.is('highlighted') { | 112 | @include bem.is('highlighted') { |
| 113 | &:link, | 113 | &:link, |
| 114 | &:visited, | 114 | &:visited, |
| 115 | &:enabled { | 115 | &:enabled { |
| 116 | &, | 116 | &, |
| 117 | &:hover, | 117 | &:hover, |
| 118 | &:focus-visible { | 118 | &:focus-visible { |
| 119 | border-color: props.get($theme, list.join($key, --highlighted --border-color)...); | 119 | border-color: props.get($theme, list.join($key, --highlighted --border-color)...); |
| 120 | } | 120 | } |
| 121 | 121 | ||
| 122 | box-shadow: | 122 | box-shadow: |
| 123 | 0 0 0 1px props.get($theme, list.join($key, --highlighted --border-color)...), | 123 | 0 0 0 1px props.get($theme, list.join($key, --highlighted --border-color)...), |
| 124 | props.get(vars.$shadow-x) | 124 | props.get(vars.$shadow-x) |
| 125 | props.get(vars.$shadow-y) | 125 | props.get(vars.$shadow-y) |
| 126 | props.get(vars.$shadow-blur) | 126 | props.get(vars.$shadow-blur) |
| 127 | props.get(vars.$shadow-grow) | 127 | props.get(vars.$shadow-grow) |
| 128 | props.get($theme, list.join($key, --highlighted --shadow-color)...); | 128 | props.get($theme, list.join($key, --highlighted --shadow-color)...); |
| 129 | 129 | ||
| 130 | &:focus-visible { | 130 | &:focus-visible { |
| 131 | box-shadow: | 131 | box-shadow: |
| 132 | props.get(vars.$shadow-x) | 132 | props.get(vars.$shadow-x) |
| 133 | props.get(vars.$shadow-y) | 133 | props.get(vars.$shadow-y) |
| 134 | props.get(vars.$shadow-blur) | 134 | props.get(vars.$shadow-blur) |
| 135 | props.get(vars.$shadow-grow) | 135 | props.get(vars.$shadow-grow) |
| 136 | props.get($theme, list.join($key, --shadow-color)...); | 136 | props.get($theme, list.join($key, --shadow-color)...); |
| 137 | } | 137 | } |
| 138 | } | 138 | } |
| 139 | } | 139 | } |
| 140 | 140 | ||
| 141 | @include bem.is('selected') { | 141 | @include bem.is('selected') { |
| 142 | color: props.get($theme, list.join($key, --selected --disabled --label-color)...); | 142 | color: props.get($theme, list.join($key, --selected --disabled --label-color)...); |
| 143 | background-color: props.get($theme, list.join($key, --selected --disabled --bg-color)...); | 143 | background-color: props.get($theme, list.join($key, --selected --disabled --bg-color)...); |
| 144 | border-color: props.get($theme, list.join($key, --selected --disabled --border-color)...); | 144 | border-color: props.get($theme, list.join($key, --selected --disabled --border-color)...); |
| 145 | 145 | ||
| 146 | @include bem.multi('&:link, &:visited, &:enabled', 'modifier' 'badge') { | 146 | @include bem.multi('&:link, &:visited, &:enabled', 'modifier' 'badge') { |
| 147 | color: props.get($theme, list.join($key, --selected --label-color)...); | 147 | color: props.get($theme, list.join($key, --selected --label-color)...); |
| 148 | background-color: props.get($theme, list.join($key, --selected --bg-color)...); | 148 | background-color: props.get($theme, list.join($key, --selected --bg-color)...); |
| 149 | border-color: props.get($theme, list.join($key, --selected --border-color)...); | 149 | border-color: props.get($theme, list.join($key, --selected --border-color)...); |
| 150 | } | 150 | } |
| 151 | 151 | ||
| 152 | &:link, | 152 | &:link, |
| 153 | &:visited, | 153 | &:visited, |
| 154 | &:enabled { | 154 | &:enabled { |
| 155 | &:hover, | 155 | &:hover, |
| 156 | &:focus-visible { | 156 | &:focus-visible { |
| 157 | color: props.get($theme, list.join($key, --selected --hover --label-color)...); | 157 | color: props.get($theme, list.join($key, --selected --hover --label-color)...); |
| 158 | background-color: props.get($theme, list.join($key, --selected --hover --bg-color)...); | 158 | background-color: props.get($theme, list.join($key, --selected --hover --bg-color)...); |
| 159 | border-color: props.get($theme, list.join($key, --selected --hover --border-color)...); | 159 | border-color: props.get($theme, list.join($key, --selected --hover --border-color)...); |
| 160 | } | 160 | } |
| 161 | 161 | ||
| 162 | &:active { | 162 | &:active { |
| 163 | color: props.get($theme, list.join($key, --selected --active --label-color)...); | 163 | color: props.get($theme, list.join($key, --selected --active --label-color)...); |
| 164 | background-color: props.get($theme, list.join($key, --selected --active --bg-color)...); | 164 | background-color: props.get($theme, list.join($key, --selected --active --bg-color)...); |
| 165 | border-color: props.get($theme, list.join($key, --selected --active --border-color)...); | 165 | border-color: props.get($theme, list.join($key, --selected --active --border-color)...); |
| 166 | } | 166 | } |
| 167 | } | 167 | } |
| 168 | } | 168 | } |
| 169 | } | 169 | } |
| 170 | 170 | ||
| 171 | @mixin styles { | 171 | @mixin styles { |
| 172 | @include materialize-at-root(meta.module-variables('vars')); | 172 | @include materialize-at-root(meta.module-variables('vars')); |
| 173 | 173 | ||
| 174 | @include bem.object('button') { | 174 | @include bem.object('button') { |
| 175 | position: relative; | 175 | position: relative; |
| 176 | display: inline-block; | 176 | display: inline-block; |
| 177 | padding-block: props.get(vars.$pad-b); | 177 | padding-block: props.get(vars.$pad-b); |
| 178 | padding-inline: props.get(vars.$pad-i); | 178 | padding-inline: props.get(vars.$pad-i); |
| 179 | line-height: props.get(vars.$line-height); | 179 | text-overflow: ellipsis; |
| 180 | font-size: props.get(vars.$font-size); | 180 | font-size: props.get(vars.$font-size); |
| 181 | text-align: center; | 181 | line-height: props.get(vars.$line-height); |
| 182 | text-decoration: none; | 182 | text-align: center; |
| 183 | text-overflow: ellipsis; | 183 | white-space: nowrap; |
| 184 | white-space: nowrap; | 184 | text-decoration: none; |
| 185 | border: props.get(vars.$border-width) solid transparent; | 185 | border: props.get(vars.$border-width) solid transparent; |
| 186 | border-radius: props.get(vars.$rounding); | 186 | border-radius: props.get(vars.$rounding); |
| 187 | transition: color .1s, background-color .1s, border-color .1s, box-shadow .1s; | 187 | transition: color .1s, background-color .1s, border-color .1s, box-shadow .1s; |
| 188 | 188 | ||
| 189 | &::after { | 189 | &::after { |
| 190 | position: absolute; | 190 | position: absolute; |
| 191 | inset: calc(-1 * props.get(vars.$border-width) - props.get(vars.$key-focus--border-offset)); | 191 | inset: calc(-1 * props.get(vars.$border-width) - props.get(vars.$key-focus--border-offset)); |
| 192 | z-index: 1; | 192 | z-index: 1; |
| 193 | display: none; | 193 | display: none; |
| 194 | pointer-events: none; | 194 | pointer-events: none; |
| 195 | content: ''; | 195 | outline: transparent solid props.get(vars.$key-focus--border-width); |
| 196 | border-radius: calc(props.get(vars.$rounding) + props.get(vars.$key-focus--border-offset)); | 196 | content: ''; |
| 197 | outline: transparent solid props.get(vars.$key-focus--border-width); | 197 | border-radius: calc(props.get(vars.$rounding) + props.get(vars.$key-focus--border-offset)); |
| 198 | } | 198 | } |
| 199 | 199 | ||
| 200 | &:link, | 200 | &:link, |
| 201 | &:visited, | 201 | &:visited, |
| 202 | &:enabled { | 202 | &:enabled { |
| 203 | &:focus-visible { | 203 | &:focus-visible { |
| 204 | transition: none; | 204 | transition: none; |
| 205 | 205 | ||
| 206 | &::after { | 206 | &::after { |
| 207 | display: block; | 207 | display: block; |
| 208 | } | 208 | } |
| 209 | } | 209 | } |
| 210 | } | 210 | } |
| 211 | 211 | ||
| 212 | @include bem.elem('label') { | 212 | @include bem.elem('label') { |
| 213 | margin-inline: props.get(vars.$pad-i-label); | 213 | margin-inline: props.get(vars.$pad-i-label); |
| 214 | } | 214 | } |
| 215 | 215 | ||
| 216 | @include -apply-theme(vars.$default-theme); | 216 | @include -apply-theme(vars.$default-theme); |
| 217 | 217 | ||
| 218 | @each $theme in map.keys(props.get(vars.$themes)) { | 218 | @each $theme in map.keys(props.get(vars.$themes)) { |
| 219 | @include bem.modifier(string.slice($theme, 3)) { | 219 | @include bem.modifier(string.slice($theme, 3)) { |
| 220 | @include -apply-theme(vars.$themes, $theme); | 220 | @include -apply-theme(vars.$themes, $theme); |
| 221 | } | 221 | } |
| 222 | } | 222 | } |
| 223 | 223 | ||
| 224 | @include bem.modifier('pill') { | 224 | @include bem.modifier('pill') { |
| 225 | padding-inline: props.get(vars.$pad-i-pill); | 225 | padding-inline: props.get(vars.$pad-i-pill); |
| 226 | border-radius: 100em; | 226 | border-radius: 100em; |
| 227 | 227 | ||
| 228 | &::after { | 228 | &::after { |
| 229 | border-radius: 100em; | 229 | border-radius: 100em; |
| 230 | } | 230 | } |
| 231 | } | 231 | } |
| 232 | 232 | ||
| 233 | @include bem.modifier('icon') { | 233 | @include bem.modifier('icon') { |
| 234 | inline-size: calc(1em * props.get(vars.$line-height) + 2 * props.get(vars.$pad-b)); | 234 | inline-size: calc(1em * props.get(vars.$line-height) + 2 * props.get(vars.$pad-b)); |
| 235 | padding-inline: 0; | 235 | padding-inline: 0; |
| 236 | } | 236 | } |
| 237 | 237 | ||
| 238 | @each $mod, $pad-i, $pad-i-label, $pad-i-pill, $pad-b, $font-size in vars.$fixed-sizes { | 238 | @each $mod, $pad-i, $pad-i-label, $pad-i-pill, $pad-b, $font-size in vars.$fixed-sizes { |
| 239 | @include bem.modifier($mod) { | 239 | @include bem.modifier($mod) { |
| 240 | padding-block: props.get($pad-b); | 240 | padding-block: props.get($pad-b); |
| 241 | padding-inline: props.get($pad-i); | 241 | padding-inline: props.get($pad-i); |
| 242 | font-size: props.get($font-size); | 242 | font-size: props.get($font-size); |
| 243 | 243 | ||
| 244 | @include bem.elem('label') { | 244 | @include bem.elem('label') { |
| 245 | margin-inline: props.get($pad-i-label); | 245 | margin-inline: props.get($pad-i-label); |
| 246 | } | 246 | } |
| 247 | 247 | ||
| 248 | @include bem.modifier('pill') { | 248 | @include bem.modifier('pill') { |
| 249 | padding-inline: props.get($pad-i-pill); | 249 | padding-inline: props.get($pad-i-pill); |
| 250 | } | 250 | } |
| 251 | 251 | ||
| 252 | @include bem.modifier('icon') { | 252 | @include bem.modifier('icon') { |
| 253 | inline-size: calc(1em * props.get(vars.$line-height) + 2 * props.get($pad-b)); | 253 | inline-size: calc(1em * props.get(vars.$line-height) + 2 * props.get($pad-b)); |
| 254 | padding-inline: 0; | 254 | padding-inline: 0; |
| 255 | } | 255 | } |
| 256 | } | 256 | } |
| 257 | } | 257 | } |
| 258 | 258 | ||
| 259 | @include bem.modifier('align-block') { | 259 | @include bem.modifier('align-block') { |
| 260 | margin-inline: calc(-1 * props.get(vars.$pad-i) - props.get(vars.$border-width)); | 260 | margin-inline: calc(-1 * props.get(vars.$pad-i) - props.get(vars.$border-width)); |
| 261 | 261 | ||
| 262 | @include bem.modifier('pill') { | 262 | @include bem.modifier('pill') { |
| 263 | margin-inline: calc(-1 * props.get(vars.$pad-i-pill) - props.get(vars.$border-width)); | 263 | margin-inline: calc(-1 * props.get(vars.$pad-i-pill) - props.get(vars.$border-width)); |
| 264 | } | 264 | } |
| 265 | 265 | ||
| 266 | @include bem.modifier('icon') { | 266 | @include bem.modifier('icon') { |
| 267 | margin-inline: calc(-1 * props.get(vars.$pad-b) - props.get(vars.$border-width) - .5em * (props.get(vars.$line-height) - 1)); | 267 | margin-inline: calc(-1 * props.get(vars.$pad-b) - props.get(vars.$border-width) - .5em * (props.get(vars.$line-height) - 1)); |
| 268 | } | 268 | } |
| 269 | 269 | ||
| 270 | @each $mod, $pad-i, $pad-i-label, $pad-i-pill, $pad-b, $font-size in vars.$fixed-sizes { | 270 | @each $mod, $pad-i, $pad-i-label, $pad-i-pill, $pad-b, $font-size in vars.$fixed-sizes { |
| 271 | @include bem.modifier($mod) { | 271 | @include bem.modifier($mod) { |
| 272 | margin-inline: calc(-1 * props.get($pad-i) - props.get(vars.$border-width)); | 272 | margin-inline: calc(-1 * props.get($pad-i) - props.get(vars.$border-width)); |
| 273 | 273 | ||
| 274 | @include bem.modifier('pill') { | 274 | @include bem.modifier('pill') { |
| 275 | margin-inline: calc(-1 * props.get($pad-i-pill) - props.get(vars.$border-width)); | 275 | margin-inline: calc(-1 * props.get($pad-i-pill) - props.get(vars.$border-width)); |
| 276 | } | 276 | } |
| 277 | 277 | ||
| 278 | @include bem.modifier('icon') { | 278 | @include bem.modifier('icon') { |
| 279 | margin-inline: calc(-1 * props.get($pad-b) - props.get(vars.$border-width) - .5em * (props.get(vars.$line-height) - 1)); | 279 | margin-inline: calc(-1 * props.get($pad-b) - props.get(vars.$border-width) - .5em * (props.get(vars.$line-height) - 1)); |
| 280 | } | 280 | } |
| 281 | } | 281 | } |
| 282 | } | 282 | } |
| 283 | } | 283 | } |
| 284 | } | 284 | } |
| 285 | } | 285 | } |
