summaryrefslogtreecommitdiff
path: root/packages/client/src/components/global/loading.vue
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2021-11-12 02:02:25 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2021-11-12 02:02:25 +0900
commit0e4a111f81cceed275d9bec2695f6e401fb654d8 (patch)
tree40874799472fa07416f17b50a398ac33b7771905 /packages/client/src/components/global/loading.vue
parentupdate deps (diff)
downloadmisskey-0e4a111f81cceed275d9bec2695f6e401fb654d8.tar.gz
misskey-0e4a111f81cceed275d9bec2695f6e401fb654d8.tar.bz2
misskey-0e4a111f81cceed275d9bec2695f6e401fb654d8.zip
refactoring
Resolve #7779
Diffstat (limited to 'packages/client/src/components/global/loading.vue')
-rw-r--r--packages/client/src/components/global/loading.vue92
1 files changed, 92 insertions, 0 deletions
diff --git a/packages/client/src/components/global/loading.vue b/packages/client/src/components/global/loading.vue
new file mode 100644
index 0000000000..7bde53c12e
--- /dev/null
+++ b/packages/client/src/components/global/loading.vue
@@ -0,0 +1,92 @@
+<template>
+<div class="yxspomdl" :class="{ inline, colored, mini }">
+ <div class="ring"></div>
+</div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+
+export default defineComponent({
+ props: {
+ inline: {
+ type: Boolean,
+ required: false,
+ default: false
+ },
+ colored: {
+ type: Boolean,
+ required: false,
+ default: true
+ },
+ mini: {
+ type: Boolean,
+ required: false,
+ default: false
+ },
+ }
+});
+</script>
+
+<style lang="scss" scoped>
+@keyframes ring {
+ 0% {
+ transform: rotate(0deg);
+ }
+ 100% {
+ transform: rotate(360deg);
+ }
+}
+
+.yxspomdl {
+ padding: 32px;
+ text-align: center;
+ cursor: wait;
+
+ --size: 48px;
+
+ &.colored {
+ color: var(--accent);
+ }
+
+ &.inline {
+ display: inline;
+ padding: 0;
+ --size: 32px;
+ }
+
+ &.mini {
+ padding: 16px;
+ --size: 32px;
+ }
+
+ > .ring {
+ position: relative;
+ display: inline-block;
+ vertical-align: middle;
+
+ &:before,
+ &:after {
+ content: " ";
+ display: block;
+ box-sizing: border-box;
+ width: var(--size);
+ height: var(--size);
+ border-radius: 50%;
+ border: solid 4px;
+ }
+
+ &:before {
+ border-color: currentColor;
+ opacity: 0.3;
+ }
+
+ &:after {
+ position: absolute;
+ top: 0;
+ border-color: currentColor transparent transparent transparent;
+ animation: ring 0.5s linear infinite;
+ }
+ }
+}
+</style>