summaryrefslogtreecommitdiff
path: root/packages/client/src/components/form/switch.vue
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2021-12-27 22:59:14 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2021-12-27 22:59:14 +0900
commitae2d71553e92b324f59c15d2b151b2583a6e65ab (patch)
treef5a01757ee0477f21104fd59a9ec25e80e31b6eb /packages/client/src/components/form/switch.vue
parentUpdate const.ts (diff)
downloadmisskey-ae2d71553e92b324f59c15d2b151b2583a6e65ab.tar.gz
misskey-ae2d71553e92b324f59c15d2b151b2583a6e65ab.tar.bz2
misskey-ae2d71553e92b324f59c15d2b151b2583a6e65ab.zip
enhance(client): :art:
Diffstat (limited to 'packages/client/src/components/form/switch.vue')
-rw-r--r--packages/client/src/components/form/switch.vue42
1 files changed, 29 insertions, 13 deletions
diff --git a/packages/client/src/components/form/switch.vue b/packages/client/src/components/form/switch.vue
index aa28292b97..aa9b09215e 100644
--- a/packages/client/src/components/form/switch.vue
+++ b/packages/client/src/components/form/switch.vue
@@ -9,7 +9,7 @@
:disabled="disabled"
@keydown.enter="toggle"
>
- <span v-adaptive-border v-tooltip="checked ? $ts.itsOn : $ts.itsOff" class="button" @click.prevent="toggle">
+ <span ref="button" v-adaptive-border v-tooltip="checked ? $ts.itsOn : $ts.itsOff" class="button" @click.prevent="toggle">
<i class="check fas fa-check"></i>
</span>
<span class="label">
@@ -20,7 +20,9 @@
</template>
<script lang="ts">
-import { defineComponent } from 'vue';
+import { defineComponent, ref, toRefs } from 'vue';
+import * as os from '@/os';
+import Ripple from '@/components/ripple.vue';
export default defineComponent({
props: {
@@ -33,17 +35,28 @@ export default defineComponent({
default: false
}
},
- computed: {
- checked(): boolean {
- return this.modelValue;
- }
+
+ setup(props, context) {
+ const button = ref<HTMLElement>();
+ const checked = toRefs(props).modelValue;
+ const toggle = () => {
+ if (props.disabled) return;
+ context.emit('update:modelValue', !checked.value);
+
+ if (!checked.value) {
+ const rect = button.value.getBoundingClientRect();
+ const x = rect.left + (button.value.offsetWidth / 2);
+ const y = rect.top + (button.value.offsetHeight / 2);
+ os.popup(Ripple, { x, y, particle: false }, {}, 'end');
+ }
+ };
+
+ return {
+ button,
+ checked,
+ toggle,
+ };
},
- methods: {
- toggle() {
- if (this.disabled) return;
- this.$emit('update:modelValue', !this.checked);
- }
- }
});
</script>
@@ -51,7 +64,7 @@ export default defineComponent({
.ziffeoms {
position: relative;
display: flex;
- transition: all 0.2s;
+ transition: all 0.2s ease;
> * {
user-select: none;
@@ -85,6 +98,8 @@ export default defineComponent({
opacity: 0;
color: var(--fgOnAccent);
font-size: 13px;
+ transform: scale(0.5);
+ transition: all 0.2s ease;
}
}
@@ -131,6 +146,7 @@ export default defineComponent({
> .check {
opacity: 1;
+ transform: scale(1);
}
}
}