aboutsummaryrefslogtreecommitdiff
path: root/src/components/checkbox
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/checkbox')
-rw-r--r--src/components/checkbox/checkbox.vue51
1 files changed, 39 insertions, 12 deletions
diff --git a/src/components/checkbox/checkbox.vue b/src/components/checkbox/checkbox.vue
index b6768d67..b8b77e7c 100644
--- a/src/components/checkbox/checkbox.vue
+++ b/src/components/checkbox/checkbox.vue
@@ -1,16 +1,21 @@
<template>
<label
class="checkbox"
- :class="{ disabled, indeterminate }"
+ :class="{ disabled, indeterminate, 'indeterminate-fix': indeterminateTransitionFix }"
>
<input
type="checkbox"
+ class="visible-for-screenreader-only"
:disabled="disabled"
:checked="modelValue"
:indeterminate="indeterminate"
@change="$emit('update:modelValue', $event.target.checked)"
>
- <i class="checkbox-indicator" />
+ <i
+ class="checkbox-indicator"
+ :aria-hidden="true"
+ @transitionend.capture="onTransitionEnd"
+ />
<span
v-if="!!$slots.default"
class="label"
@@ -27,12 +32,30 @@ export default {
'indeterminate',
'disabled'
],
- emits: ['update:modelValue']
+ emits: ['update:modelValue'],
+ data: (vm) => ({
+ indeterminateTransitionFix: vm.indeterminate
+ }),
+ watch: {
+ indeterminate (e) {
+ if (e) {
+ this.indeterminateTransitionFix = true
+ }
+ }
+ },
+ methods: {
+ onTransitionEnd (e) {
+ if (!this.indeterminate) {
+ this.indeterminateTransitionFix = false
+ }
+ }
+ }
}
</script>
<style lang="scss">
-@import '../../_variables.scss';
+@import "../../variables";
+@import "../../mixins";
.checkbox {
position: relative;
@@ -49,13 +72,13 @@ export default {
right: 0;
top: 0;
display: block;
- content: '✓';
+ content: "✓";
transition: color 200ms;
width: 1.1em;
height: 1.1em;
border-radius: $fallback--checkboxRadius;
border-radius: var(--checkboxRadius, $fallback--checkboxRadius);
- box-shadow: 0px 0px 2px black inset;
+ box-shadow: 0 0 2px black inset;
box-shadow: var(--inputShadow);
background-color: $fallback--fg;
background-color: var(--input, $fallback--fg);
@@ -71,32 +94,36 @@ export default {
&.disabled {
.checkbox-indicator::before,
.label {
- opacity: .5;
+ opacity: 0.5;
}
+
.label {
color: $fallback--faint;
color: var(--faint, $fallback--faint);
}
}
- input[type=checkbox] {
- display: none;
-
+ input[type="checkbox"] {
&:checked + .checkbox-indicator::before {
color: $fallback--text;
color: var(--inputText, $fallback--text);
}
&:indeterminate + .checkbox-indicator::before {
- content: '–';
+ content: "–";
color: $fallback--text;
color: var(--inputText, $fallback--text);
}
+ }
+ &.indeterminate-fix {
+ input[type="checkbox"] + .checkbox-indicator::before {
+ content: "–";
+ }
}
& > span {
- margin-left: .5em;
+ margin-left: 0.5em;
}
}
</style>