summaryrefslogtreecommitdiff
path: root/packages/frontend-embed/src/components/EmReactionsViewer.reaction.vue
diff options
context:
space:
mode:
Diffstat (limited to 'packages/frontend-embed/src/components/EmReactionsViewer.reaction.vue')
-rw-r--r--packages/frontend-embed/src/components/EmReactionsViewer.reaction.vue99
1 files changed, 99 insertions, 0 deletions
diff --git a/packages/frontend-embed/src/components/EmReactionsViewer.reaction.vue b/packages/frontend-embed/src/components/EmReactionsViewer.reaction.vue
new file mode 100644
index 0000000000..2e43eb8d17
--- /dev/null
+++ b/packages/frontend-embed/src/components/EmReactionsViewer.reaction.vue
@@ -0,0 +1,99 @@
+<!--
+SPDX-FileCopyrightText: syuilo and misskey-project
+SPDX-License-Identifier: AGPL-3.0-only
+-->
+
+<template>
+<button
+ class="_button"
+ :class="[$style.root, { [$style.reacted]: note.myReaction == reaction }]"
+>
+ <EmReactionIcon :class="$style.limitWidth" :reaction="reaction" :emojiUrl="note.reactionEmojis[reaction.substring(1, reaction.length - 1)]"/>
+ <span :class="$style.count">{{ count }}</span>
+</button>
+</template>
+
+<script lang="ts" setup>
+import { } from 'vue';
+import * as Misskey from 'misskey-js';
+import EmReactionIcon from '@/components/EmReactionIcon.vue';
+
+const props = defineProps<{
+ reaction: string;
+ count: number;
+ isInitial: boolean;
+ note: Misskey.entities.Note;
+}>();
+</script>
+
+<style lang="scss" module>
+.root {
+ display: inline-flex;
+ height: 42px;
+ margin: 2px;
+ padding: 0 6px;
+ font-size: 1.5em;
+ border-radius: 6px;
+ align-items: center;
+ justify-content: center;
+
+ &.canToggle {
+ background: var(--buttonBg);
+
+ &:hover {
+ background: rgba(0, 0, 0, 0.1);
+ }
+ }
+
+ &:not(.canToggle) {
+ cursor: default;
+ }
+
+ &.small {
+ height: 32px;
+ font-size: 1em;
+ border-radius: 4px;
+
+ > .count {
+ font-size: 0.9em;
+ line-height: 32px;
+ }
+ }
+
+ &.large {
+ height: 52px;
+ font-size: 2em;
+ border-radius: 8px;
+
+ > .count {
+ font-size: 0.6em;
+ line-height: 52px;
+ }
+ }
+
+ &.reacted, &.reacted:hover {
+ background: var(--accentedBg);
+ color: var(--accent);
+ box-shadow: 0 0 0 1px var(--accent) inset;
+
+ > .count {
+ color: var(--accent);
+ }
+
+ > .icon {
+ filter: drop-shadow(0 0 2px rgba(0, 0, 0, 0.5));
+ }
+ }
+}
+
+.limitWidth {
+ max-width: 70px;
+ object-fit: contain;
+}
+
+.count {
+ font-size: 0.7em;
+ line-height: 42px;
+ margin: 0 0 0 4px;
+}
+</style>