diff --git a/CHANGELOG.md b/CHANGELOG.md
index 13ad3a350..a5e1f27b7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -20,6 +20,7 @@
### Client
- Feat: 新しいゲームを追加
+- Feat: 絵文字の詳細ダイアログを追加
- Enhance: ハッシュタグ入力時に、本文の末尾の行に何も書かれていない場合は新たにスペースを追加しないように
- Enhance: チャンネルノートのピン留めをノートのメニューからできるように
- Enhance: 管理者の場合はAPI tokenの発行画面で管理機能に関する権限を付与できるように
diff --git a/packages/frontend/src/components/MkCustomEmojiDetailedDialog.vue b/packages/frontend/src/components/MkCustomEmojiDetailedDialog.vue
new file mode 100644
index 000000000..c53bbca37
--- /dev/null
+++ b/packages/frontend/src/components/MkCustomEmojiDetailedDialog.vue
@@ -0,0 +1,102 @@
+
+
+
+
+ :{{ emoji.name }}:
+
+
+
+
+
+
+
+ {{ i18n.ts.name }}
+ {{ emoji.name }}
+
+
+ {{ i18n.ts.tags }}
+
+ {{ i18n.ts.none }}
+
+
+ {{ alias }}
+
+
+
+
+
+ {{ i18n.ts.category }}
+ {{ emoji.category ?? i18n.ts.none }}
+
+
+ {{ i18n.ts.sensitive }}
+ {{ emoji.isSensitive ? i18n.ts.yes : i18n.ts.no }}
+
+
+ {{ i18n.ts.localOnly }}
+ {{ emoji.localOnly ? i18n.ts.yes : i18n.ts.no }}
+
+
+ {{ i18n.ts.license }}
+ {{ emoji.license ?? i18n.ts.none }}
+
+
+ {{ i18n.ts.emojiUrl }}
+
+ {{ emoji.url }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/frontend/src/components/MkReactionsViewer.reaction.vue b/packages/frontend/src/components/MkReactionsViewer.reaction.vue
index 5ca09fa82..330e54f08 100644
--- a/packages/frontend/src/components/MkReactionsViewer.reaction.vue
+++ b/packages/frontend/src/components/MkReactionsViewer.reaction.vue
@@ -10,6 +10,7 @@ SPDX-License-Identifier: AGPL-3.0-only
class="_button"
:class="[$style.root, { [$style.reacted]: note.myReaction == reaction, [$style.canToggle]: canToggle, [$style.small]: defaultStore.state.reactionsDisplaySize === 'small', [$style.large]: defaultStore.state.reactionsDisplaySize === 'large' }]"
@click="toggleReaction()"
+ @contextmenu.prevent.stop="menu"
>
{{ count }}
@@ -21,6 +22,7 @@ import { computed, inject, onMounted, shallowRef, watch } from 'vue';
import * as Misskey from 'misskey-js';
import XDetails from '@/components/MkReactionsViewer.details.vue';
import MkReactionIcon from '@/components/MkReactionIcon.vue';
+import MkCustomEmojiDetailedDialog from './MkCustomEmojiDetailedDialog.vue';
import * as os from '@/os.js';
import { misskeyApi, misskeyApiGet } from '@/scripts/misskey-api.js';
import { useTooltip } from '@/scripts/use-tooltip.js';
@@ -98,6 +100,22 @@ async function toggleReaction() {
}
}
+async function menu(ev) {
+ if (!canToggle.value) return;
+ if (!props.reaction.includes(":")) return;
+ os.popupMenu([{
+ text: i18n.ts.info,
+ icon: 'ti ti-info-circle',
+ action: async () => {
+ os.popup(MkCustomEmojiDetailedDialog, {
+ emoji: await misskeyApiGet('emoji', {
+ name: props.reaction.replace(/:/g, '').replace(/@\./, ''),
+ }),
+ });
+ },
+ }], ev.currentTarget ?? ev.target);
+}
+
function anime() {
if (document.hidden) return;
if (!defaultStore.state.animation) return;
diff --git a/packages/frontend/src/components/global/MkCustomEmoji.vue b/packages/frontend/src/components/global/MkCustomEmoji.vue
index dd3fe7725..b384e8afc 100644
--- a/packages/frontend/src/components/global/MkCustomEmoji.vue
+++ b/packages/frontend/src/components/global/MkCustomEmoji.vue
@@ -24,9 +24,11 @@ import { getProxiedImageUrl, getStaticImageUrl } from '@/scripts/media-proxy.js'
import { defaultStore } from '@/store.js';
import { customEmojisMap } from '@/custom-emojis.js';
import * as os from '@/os.js';
+import { misskeyApiGet } from '@/scripts/misskey-api.js';
import copyToClipboard from '@/scripts/copy-to-clipboard.js';
import * as sound from '@/scripts/sound.js';
import { i18n } from '@/i18n.js';
+import MkCustomEmojiDetailedDialog from '@/components/MkCustomEmojiDetailedDialog.vue';
const props = defineProps<{
name: string;
@@ -93,7 +95,19 @@ function onClick(ev: MouseEvent) {
react(`:${props.name}:`);
sound.playMisskeySfx('reaction');
},
- }] : [])], ev.currentTarget ?? ev.target);
+ }] : []), {
+ text: i18n.ts.info,
+ icon: 'ti ti-info-circle',
+ action: async () => {
+ os.popup(MkCustomEmojiDetailedDialog, {
+ emoji: await misskeyApiGet('emoji', {
+ name: customEmojiName.value,
+ }),
+ }, {
+ anchor: ev.target,
+ });
+ },
+ }], ev.currentTarget ?? ev.target);
}
}
diff --git a/packages/frontend/src/pages/emojis.emoji.vue b/packages/frontend/src/pages/emojis.emoji.vue
index ea6947bbb..faa7acdcb 100644
--- a/packages/frontend/src/pages/emojis.emoji.vue
+++ b/packages/frontend/src/pages/emojis.emoji.vue
@@ -14,19 +14,15 @@ SPDX-License-Identifier: AGPL-3.0-only