Merge tag '2023.12.0-beta.6' into merge-upstream
This commit is contained in:
@@ -82,7 +82,8 @@ export function userDetailed(id = 'someuserid', username = 'miskist', host = 'mi
|
||||
birthday: '2014-06-20',
|
||||
createdAt: '2016-12-28T22:49:51.000Z',
|
||||
description: 'I am a cool user!',
|
||||
ffVisibility: 'public',
|
||||
followingVisibility: 'public',
|
||||
followersVisibility: 'public',
|
||||
roles: [],
|
||||
fields: [
|
||||
{
|
||||
|
@@ -25,7 +25,7 @@ export const commonHandlers = [
|
||||
}),
|
||||
rest.get('/twemoji/:codepoints.svg', async (req, res, ctx) => {
|
||||
const { codepoints } = req.params;
|
||||
const value = await fetch(`https://unpkg.com/@discordapp/twemoji@14.1.2/dist/svg/${codepoints}.svg`).then((response) => response.blob());
|
||||
const value = await fetch(`https://unpkg.com/@discordapp/twemoji@15.0.2/dist/svg/${codepoints}.svg`).then((response) => response.blob());
|
||||
return res(ctx.set('Content-Type', 'image/svg+xml'), ctx.body(value));
|
||||
}),
|
||||
];
|
||||
|
@@ -17,7 +17,7 @@
|
||||
"lint": "pnpm typecheck && pnpm eslint"
|
||||
},
|
||||
"dependencies": {
|
||||
"@discordapp/twemoji": "14.1.2",
|
||||
"@discordapp/twemoji": "15.0.2",
|
||||
"@github/webauthn-json": "2.1.1",
|
||||
"@rollup/plugin-json": "6.1.0",
|
||||
"@rollup/plugin-replace": "5.0.5",
|
||||
@@ -25,11 +25,12 @@
|
||||
"@rollup/pluginutils": "5.1.0",
|
||||
"@syuilo/aiscript": "0.16.0",
|
||||
"@tabler/icons-webfont": "2.44.0",
|
||||
"@twemoji/parser": "15.0.0",
|
||||
"@vitejs/plugin-vue": "4.5.2",
|
||||
"@vue/compiler-sfc": "3.3.11",
|
||||
"@vue/compiler-sfc": "3.3.12",
|
||||
"aiscript-vscode": "github:aiscript-dev/aiscript-vscode#v0.0.6",
|
||||
"astring": "1.8.6",
|
||||
"broadcast-channel": "6.0.0",
|
||||
"broadcast-channel": "7.0.0",
|
||||
"browser-image-resizer": "github:misskey-dev/browser-image-resizer#v2.2.1-misskey.3",
|
||||
"buraha": "0.0.1",
|
||||
"canvas-confetti": "1.6.1",
|
||||
@@ -51,11 +52,11 @@
|
||||
"is-file-animated": "1.0.2",
|
||||
"json5": "2.2.3",
|
||||
"matter-js": "0.19.0",
|
||||
"mfm-js": "0.23.3",
|
||||
"mfm-js": "0.24.0",
|
||||
"misskey-js": "workspace:*",
|
||||
"photoswipe": "5.4.3",
|
||||
"punycode": "2.3.1",
|
||||
"rollup": "4.9.0",
|
||||
"rollup": "4.9.1",
|
||||
"sanitize-html": "2.11.0",
|
||||
"sass": "1.69.5",
|
||||
"shiki": "0.14.7",
|
||||
@@ -66,12 +67,11 @@
|
||||
"tinycolor2": "1.6.0",
|
||||
"tsc-alias": "1.8.8",
|
||||
"tsconfig-paths": "4.2.0",
|
||||
"twemoji-parser": "14.0.0",
|
||||
"typescript": "5.3.3",
|
||||
"uuid": "9.0.1",
|
||||
"v-code-diff": "1.7.2",
|
||||
"vite": "5.0.10",
|
||||
"vue": "3.3.11",
|
||||
"vue": "3.3.12",
|
||||
"vuedraggable": "next"
|
||||
},
|
||||
"devDependencies": {
|
||||
@@ -98,7 +98,7 @@
|
||||
"@types/estree": "1.0.5",
|
||||
"@types/matter-js": "0.19.5",
|
||||
"@types/micromatch": "4.0.6",
|
||||
"@types/node": "20.10.4",
|
||||
"@types/node": "20.10.5",
|
||||
"@types/punycode": "2.1.3",
|
||||
"@types/sanitize-html": "2.9.5",
|
||||
"@types/throttle-debounce": "5.0.2",
|
||||
@@ -108,7 +108,7 @@
|
||||
"@typescript-eslint/eslint-plugin": "6.14.0",
|
||||
"@typescript-eslint/parser": "6.14.0",
|
||||
"@vitest/coverage-v8": "0.34.6",
|
||||
"@vue/runtime-core": "3.3.11",
|
||||
"@vue/runtime-core": "3.3.12",
|
||||
"acorn": "8.11.2",
|
||||
"cross-env": "7.0.3",
|
||||
"cypress": "13.6.1",
|
||||
|
@@ -3,16 +3,16 @@
|
||||
* SPDX-License-Identifier: AGPL-3.0-only
|
||||
*/
|
||||
|
||||
import { computed, createApp, watch, markRaw, version as vueVersion, defineAsyncComponent, App } from 'vue';
|
||||
import { computed, watch, version as vueVersion, App } from 'vue';
|
||||
import { compareVersions } from 'compare-versions';
|
||||
import widgets from '@/widgets/index.js';
|
||||
import directives from '@/directives/index.js';
|
||||
import components from '@/components/index.js';
|
||||
import { version, ui, lang, updateLocale, locale } from '@/config.js';
|
||||
import { version, lang, updateLocale, locale } from '@/config.js';
|
||||
import { applyTheme } from '@/scripts/theme.js';
|
||||
import { isDeviceDarkmode } from '@/scripts/is-device-darkmode.js';
|
||||
import { i18n, updateI18n } from '@/i18n.js';
|
||||
import { $i, refreshAccount, login, updateAccount, signout } from '@/account.js';
|
||||
import { updateI18n } from '@/i18n.js';
|
||||
import { $i, refreshAccount, login } from '@/account.js';
|
||||
import { defaultStore, ColdDeviceStorage } from '@/store.js';
|
||||
import { fetchInstance, instance } from '@/instance.js';
|
||||
import { deviceKind } from '@/scripts/device-kind.js';
|
||||
|
@@ -3,14 +3,14 @@
|
||||
* SPDX-License-Identifier: AGPL-3.0-only
|
||||
*/
|
||||
|
||||
import { computed, createApp, watch, markRaw, version as vueVersion, defineAsyncComponent } from 'vue';
|
||||
import { createApp, markRaw, defineAsyncComponent } from 'vue';
|
||||
import { common } from './common.js';
|
||||
import { version, ui, lang, updateLocale } from '@/config.js';
|
||||
import { i18n, updateI18n } from '@/i18n.js';
|
||||
import { ui } from '@/config.js';
|
||||
import { i18n } from '@/i18n.js';
|
||||
import { confirm, alert, post, popup, toast } from '@/os.js';
|
||||
import { useStream } from '@/stream.js';
|
||||
import * as sound from '@/scripts/sound.js';
|
||||
import { $i, refreshAccount, login, updateAccount, signout } from '@/account.js';
|
||||
import { $i, updateAccount, signout } from '@/account.js';
|
||||
import { defaultStore, ColdDeviceStorage } from '@/store.js';
|
||||
import { makeHotkey } from '@/scripts/hotkey.js';
|
||||
import { reactionPicker } from '@/scripts/reaction-picker.js';
|
||||
@@ -20,7 +20,6 @@ import { mainRouter } from '@/router.js';
|
||||
import { initializeSw } from '@/scripts/initialize-sw.js';
|
||||
import { deckStore } from '@/ui/deck/deck-store.js';
|
||||
import { emojiPicker } from '@/scripts/emoji-picker.js';
|
||||
import { SnowfallEffect } from '@/scripts/snowfall-effect.js';
|
||||
|
||||
export async function mainBoot() {
|
||||
const { isClientUpdated } = await common(() => createApp(
|
||||
@@ -79,6 +78,7 @@ export async function mainBoot() {
|
||||
if (defaultStore.state.enableSeasonalScreenEffect) {
|
||||
const month = new Date().getMonth() + 1;
|
||||
if (month === 12 || month === 1) {
|
||||
const SnowfallEffect = (await import('@/scripts/snowfall-effect.js')).SnowfallEffect;
|
||||
new SnowfallEffect().render();
|
||||
}
|
||||
}
|
||||
|
@@ -3,7 +3,7 @@
|
||||
* SPDX-License-Identifier: AGPL-3.0-only
|
||||
*/
|
||||
|
||||
import { computed, createApp, watch, markRaw, version as vueVersion, defineAsyncComponent } from 'vue';
|
||||
import { createApp, defineAsyncComponent } from 'vue';
|
||||
import { common } from './common.js';
|
||||
|
||||
export async function subBoot() {
|
||||
|
@@ -359,12 +359,25 @@ function onKeydown(event: KeyboardEvent) {
|
||||
}
|
||||
break;
|
||||
|
||||
case 'Tab':
|
||||
case 'ArrowDown':
|
||||
cancel();
|
||||
selectNext();
|
||||
break;
|
||||
|
||||
case 'Tab':
|
||||
if (event.shiftKey) {
|
||||
if (select.value !== -1) {
|
||||
cancel();
|
||||
selectPrev();
|
||||
} else {
|
||||
props.close();
|
||||
}
|
||||
} else {
|
||||
cancel();
|
||||
selectNext();
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
event.stopPropagation();
|
||||
props.textarea.focus();
|
||||
|
@@ -24,8 +24,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { onMounted, nextTick, ref, shallowRef, watch, computed, toRefs } from 'vue';
|
||||
import { i18n } from '@/i18n.js';
|
||||
import { ref, shallowRef, toRefs } from 'vue';
|
||||
|
||||
const props = defineProps<{
|
||||
modelValue: string | null;
|
||||
|
@@ -17,6 +17,7 @@ import MkButton from '@/components/MkButton.vue';
|
||||
const props = defineProps<{
|
||||
modelValue: boolean;
|
||||
text: string | null;
|
||||
renote: Misskey.entities.Note | null;
|
||||
files: Misskey.entities.DriveFile[];
|
||||
poll?: {
|
||||
expiresAt: string | null;
|
||||
@@ -41,6 +42,7 @@ const emit = defineEmits<{
|
||||
const label = computed(() => {
|
||||
return concat([
|
||||
props.text ? [i18n.t('_cw.chars', { count: props.text.length })] : [],
|
||||
props.renote ? [i18n.ts.quote] : [],
|
||||
props.files.length !== 0 ? [i18n.t('_cw.files', { count: props.files.length })] : [],
|
||||
props.poll != null ? [i18n.ts.poll] : [],
|
||||
] as string[][]).join(' / ');
|
||||
|
@@ -32,7 +32,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { onMounted, shallowRef, watch, ref } from 'vue';
|
||||
import { shallowRef, watch, ref } from 'vue';
|
||||
import * as Misskey from 'misskey-js';
|
||||
import { i18n } from '@/i18n.js';
|
||||
|
||||
|
@@ -4,7 +4,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
-->
|
||||
|
||||
<template>
|
||||
<div ref="root">
|
||||
<div>
|
||||
<XBanner v-for="media in mediaList.filter(media => !previewable(media))" :key="media.id" :media="media"/>
|
||||
<div v-if="mediaList.filter(media => previewable(media)).length > 0" :class="$style.container">
|
||||
<div
|
||||
@@ -27,41 +27,6 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
/**
|
||||
* アスペクト比算出のためにHTMLElement.clientWidthを使うが、
|
||||
* 大変重たいのでコンテナ要素とメディアリスト幅のペアをキャッシュする
|
||||
* (タイムラインごとにスクロールコンテナが存在する前提だが……)
|
||||
*/
|
||||
const widthCache = new Map<Element, number>();
|
||||
|
||||
/**
|
||||
* コンテナ要素がリサイズされたらキャッシュを削除する
|
||||
*/
|
||||
const ro = new ResizeObserver(entries => {
|
||||
for (const entry of entries) {
|
||||
widthCache.delete(entry.target);
|
||||
}
|
||||
});
|
||||
|
||||
async function getClientWidthWithCache(targetEl: HTMLElement, containerEl: HTMLElement, count = 0) {
|
||||
if (_DEV_) console.log('getClientWidthWithCache', { targetEl, containerEl, count, cache: widthCache.get(containerEl) });
|
||||
if (widthCache.has(containerEl)) return widthCache.get(containerEl)!;
|
||||
|
||||
const width = targetEl.clientWidth;
|
||||
|
||||
if (count <= 10 && width < 64) {
|
||||
// widthが64未満はおかしいのでリトライする
|
||||
await new Promise(resolve => setTimeout(resolve, 50));
|
||||
return getClientWidthWithCache(targetEl, containerEl, count + 1);
|
||||
}
|
||||
|
||||
widthCache.set(containerEl, width);
|
||||
ro.observe(containerEl);
|
||||
return width;
|
||||
}
|
||||
</script>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { computed, onMounted, onUnmounted, shallowRef } from 'vue';
|
||||
import * as Misskey from 'misskey-js';
|
||||
@@ -74,15 +39,12 @@ import XVideo from '@/components/MkMediaVideo.vue';
|
||||
import * as os from '@/os.js';
|
||||
import { FILE_TYPE_BROWSERSAFE } from '@/const';
|
||||
import { defaultStore } from '@/store.js';
|
||||
import { getScrollContainer, getBodyScrollHeight } from '@/scripts/scroll.js';
|
||||
|
||||
const props = defineProps<{
|
||||
mediaList: Misskey.entities.DriveFile[];
|
||||
raw?: boolean;
|
||||
}>();
|
||||
|
||||
const root = shallowRef<HTMLDivElement>();
|
||||
const container = shallowRef<HTMLElement | null | undefined>(undefined);
|
||||
const gallery = shallowRef<HTMLDivElement>();
|
||||
const pswpZIndex = os.claimZIndex('middle');
|
||||
document.documentElement.style.setProperty('--mk-pswp-root-z-index', pswpZIndex.toString());
|
||||
@@ -95,12 +57,8 @@ const popstateHandler = (): void => {
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* アスペクト比をmediaListWithOneImageAppearanceに基づいていい感じに調整する
|
||||
* aspect-ratioではなくheightを使う
|
||||
*/
|
||||
async function calcAspectRatio() {
|
||||
if (!gallery.value || !root.value) return;
|
||||
if (!gallery.value) return;
|
||||
|
||||
let img = props.mediaList[0];
|
||||
|
||||
@@ -109,41 +67,22 @@ async function calcAspectRatio() {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!container.value) container.value = getScrollContainer(root.value);
|
||||
const width = container.value ? await getClientWidthWithCache(root.value, container.value) : root.value.clientWidth;
|
||||
|
||||
const heightMin = (ratio: number) => {
|
||||
const imgResizeRatio = width / img.properties.width;
|
||||
const imgDrawHeight = img.properties.height * imgResizeRatio;
|
||||
const maxHeight = width * ratio;
|
||||
const height = Math.min(imgDrawHeight, maxHeight);
|
||||
if (_DEV_) console.log('Image height calculated:', { width, properties: img.properties, imgResizeRatio, imgDrawHeight, maxHeight, height });
|
||||
return `${height}px`;
|
||||
};
|
||||
const ratioMax = (ratio: number) => `${Math.max(ratio, img.properties.width / img.properties.height).toString()} / 1`;
|
||||
|
||||
switch (defaultStore.state.mediaListWithOneImageAppearance) {
|
||||
case '16_9':
|
||||
gallery.value.style.height = heightMin(9 / 16);
|
||||
gallery.value.style.aspectRatio = ratioMax(16 / 9);
|
||||
break;
|
||||
case '1_1':
|
||||
gallery.value.style.height = heightMin(1);
|
||||
gallery.value.style.aspectRatio = ratioMax(1 / 1);
|
||||
break;
|
||||
case '2_3':
|
||||
gallery.value.style.height = heightMin(3 / 2);
|
||||
gallery.value.style.aspectRatio = ratioMax(2 / 3);
|
||||
break;
|
||||
default: {
|
||||
const maxHeight = Math.max(64, (container.value ? container.value.clientHeight : getBodyScrollHeight()) * 0.5 || 360);
|
||||
if (width === 0 || !maxHeight) return;
|
||||
const imgResizeRatio = width / img.properties.width;
|
||||
const imgDrawHeight = img.properties.height * imgResizeRatio;
|
||||
gallery.value.style.height = `${Math.max(64, Math.min(imgDrawHeight, maxHeight))}px`;
|
||||
gallery.value.style.minHeight = 'initial';
|
||||
gallery.value.style.maxHeight = 'initial';
|
||||
default:
|
||||
gallery.value.style.aspectRatio = '';
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
gallery.value.style.aspectRatio = 'initial';
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
|
@@ -62,7 +62,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import { Ref, computed, defineAsyncComponent, nextTick, onBeforeUnmount, onMounted, ref, shallowRef, watch } from 'vue';
|
||||
import { computed, defineAsyncComponent, nextTick, onBeforeUnmount, onMounted, ref, shallowRef, watch } from 'vue';
|
||||
import { focusPrev, focusNext } from '@/scripts/focus.js';
|
||||
import MkSwitchButton from '@/components/MkSwitch.button.vue';
|
||||
import { MenuItem, InnerMenuItem, MenuPending, MenuAction, MenuSwitch, MenuParent } from '@/types/menu';
|
||||
|
@@ -54,7 +54,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
<div style="container-type: inline-size;">
|
||||
<p v-if="appearNote.cw != null" :class="$style.cw">
|
||||
<Mfm v-if="appearNote.cw != ''" style="margin-right: 8px;" :text="appearNote.cw" :author="appearNote.user" :nyaize="'respect'"/>
|
||||
<MkCwButton v-model="showContent" :text="appearNote.text" :files="appearNote.files" :poll="appearNote.poll" style="margin: 4px 0;"/>
|
||||
<MkCwButton v-model="showContent" :text="appearNote.text" :renote="appearNote.renote" :files="appearNote.files" :poll="appearNote.poll" style="margin: 4px 0;"/>
|
||||
</p>
|
||||
<div v-show="appearNote.cw == null || showContent" :class="[{ [$style.contentCollapsed]: collapsed }]">
|
||||
<div :class="$style.text">
|
||||
@@ -151,7 +151,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { computed, inject, onMounted, ref, shallowRef, Ref, defineAsyncComponent, watch, provide } from 'vue';
|
||||
import { computed, inject, onMounted, ref, shallowRef, Ref, watch, provide } from 'vue';
|
||||
import * as mfm from 'mfm-js';
|
||||
import * as Misskey from 'misskey-js';
|
||||
import MkNoteSub from '@/components/MkNoteSub.vue';
|
||||
@@ -228,6 +228,7 @@ if (noteViewInterruptors.length > 0) {
|
||||
const isRenote = (
|
||||
note.value.renote != null &&
|
||||
note.value.text == null &&
|
||||
note.value.cw == null &&
|
||||
note.value.fileIds.length === 0 &&
|
||||
note.value.poll == null
|
||||
);
|
||||
|
@@ -221,11 +221,10 @@ import { useNoteCapture } from '@/scripts/use-note-capture.js';
|
||||
import { deepClone } from '@/scripts/clone.js';
|
||||
import { useTooltip } from '@/scripts/use-tooltip.js';
|
||||
import { claimAchievement } from '@/scripts/achievements.js';
|
||||
import { MenuItem } from '@/types/menu.js';
|
||||
import MkRippleEffect from '@/components/MkRippleEffect.vue';
|
||||
import { showMovedDialog } from '@/scripts/show-moved-dialog.js';
|
||||
import MkUserCardMini from '@/components/MkUserCardMini.vue';
|
||||
import MkPagination, { Paging } from '@/components/MkPagination.vue';
|
||||
import MkPagination from '@/components/MkPagination.vue';
|
||||
import MkReactionIcon from '@/components/MkReactionIcon.vue';
|
||||
import MkButton from '@/components/MkButton.vue';
|
||||
|
||||
|
@@ -27,7 +27,6 @@ import * as Misskey from 'misskey-js';
|
||||
import MkNoteHeader from '@/components/MkNoteHeader.vue';
|
||||
import MkSubNoteContent from '@/components/MkSubNoteContent.vue';
|
||||
import MkCwButton from '@/components/MkCwButton.vue';
|
||||
import { $i } from '@/account.js';
|
||||
|
||||
const props = defineProps<{
|
||||
note: Misskey.entities.Note;
|
||||
|
@@ -51,7 +51,6 @@ import { i18n } from '@/i18n.js';
|
||||
import { $i } from '@/account.js';
|
||||
import { userPage } from '@/filters/user.js';
|
||||
import { checkWordMute } from '@/scripts/check-word-mute.js';
|
||||
import { defaultStore } from '@/store.js';
|
||||
|
||||
const props = withDefaults(defineProps<{
|
||||
note: Misskey.entities.Note;
|
||||
|
@@ -8,6 +8,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
<div :class="$style.head">
|
||||
<MkAvatar v-if="notification.type === 'pollEnded'" :class="$style.icon" :user="notification.note.user" link preview/>
|
||||
<MkAvatar v-else-if="notification.type === 'note'" :class="$style.icon" :user="notification.note.user" link preview/>
|
||||
<MkAvatar v-else-if="notification.type === 'roleAssigned'" :class="$style.icon" :user="$i" link preview/>
|
||||
<MkAvatar v-else-if="notification.type === 'achievementEarned'" :class="$style.icon" :user="$i" link preview/>
|
||||
<div v-else-if="notification.type === 'reaction:grouped'" :class="[$style.icon, $style.icon_reactionGroup]"><i class="ti ti-plus" style="line-height: 1;"></i></div>
|
||||
<div v-else-if="notification.type === 'renote:grouped'" :class="[$style.icon, $style.icon_renoteGroup]"><i class="ti ti-repeat" style="line-height: 1;"></i></div>
|
||||
@@ -36,6 +37,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
<i v-else-if="notification.type === 'quote'" class="ti ti-quote"></i>
|
||||
<i v-else-if="notification.type === 'pollEnded'" class="ti ti-chart-arrows"></i>
|
||||
<i v-else-if="notification.type === 'achievementEarned'" class="ti ti-medal"></i>
|
||||
<img v-else-if="notification.type === 'roleAssigned'" :src="notification.role.iconUrl" alt=""/>
|
||||
<!-- notification.reaction が null になることはまずないが、ここでoptional chaining使うと一部ブラウザで刺さるので念の為 -->
|
||||
<MkReactionIcon
|
||||
v-else-if="notification.type === 'reaction'"
|
||||
@@ -50,6 +52,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
<header :class="$style.header">
|
||||
<span v-if="notification.type === 'pollEnded'">{{ i18n.ts._notification.pollEnded }}</span>
|
||||
<span v-else-if="notification.type === 'note'">{{ i18n.ts._notification.newNote }}: <MkUserName :user="notification.note.user"/></span>
|
||||
<span v-else-if="notification.type === 'roleAssigned'">{{ i18n.ts._notification.roleAssigned }}</span>
|
||||
<span v-else-if="notification.type === 'achievementEarned'">{{ i18n.ts._notification.achievementEarned }}</span>
|
||||
<span v-else-if="notification.type === 'test'">{{ i18n.ts._notification.testNotification }}</span>
|
||||
<MkA v-else-if="notification.user" v-user-preview="notification.user.id" :class="$style.headerName" :to="userPage(notification.user)"><MkUserName :user="notification.user"/></MkA>
|
||||
@@ -86,6 +89,9 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
<Mfm :text="getNoteSummary(notification.note)" :plain="true" :nowrap="true" :author="notification.note.user"/>
|
||||
<i class="ti ti-quote" :class="$style.quote"></i>
|
||||
</MkA>
|
||||
<div v-else-if="notification.type === 'roleAssigned'" :class="$style.text">
|
||||
{{ notification.role.name }}
|
||||
</div>
|
||||
<MkA v-else-if="notification.type === 'achievementEarned'" :class="$style.text" to="/my/achievements">
|
||||
{{ i18n.ts._achievements._types['_' + notification.achievement].title }}
|
||||
</MkA>
|
||||
@@ -130,7 +136,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { ref, shallowRef } from 'vue';
|
||||
import { ref } from 'vue';
|
||||
import * as Misskey from 'misskey-js';
|
||||
import MkReactionIcon from '@/components/MkReactionIcon.vue';
|
||||
import MkFollowButton from '@/components/MkFollowButton.vue';
|
||||
|
@@ -25,12 +25,11 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { onUnmounted, onMounted, computed, shallowRef, onActivated } from 'vue';
|
||||
import MkPagination, { Paging } from '@/components/MkPagination.vue';
|
||||
import MkPagination from '@/components/MkPagination.vue';
|
||||
import XNotification from '@/components/MkNotification.vue';
|
||||
import MkDateSeparatedList from '@/components/MkDateSeparatedList.vue';
|
||||
import MkNote from '@/components/MkNote.vue';
|
||||
import { useStream } from '@/stream.js';
|
||||
import { $i } from '@/account.js';
|
||||
import { i18n } from '@/i18n.js';
|
||||
import { notificationTypes } from '@/const.js';
|
||||
import { infoImageUrl } from '@/instance.js';
|
||||
|
@@ -67,6 +67,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
<MkInfo v-if="hasNotSpecifiedMentions" warn :class="$style.hasNotSpecifiedMentions">{{ i18n.ts.notSpecifiedMentionWarning }} - <button class="_textButton" @click="addMissingMention()">{{ i18n.ts.add }}</button></MkInfo>
|
||||
<input v-show="useCw" ref="cwInputEl" v-model="cw" :class="$style.cw" :placeholder="i18n.ts.annotation" @keydown="onKeydown">
|
||||
<div :class="[$style.textOuter, { [$style.withCw]: useCw }]">
|
||||
<div v-if="channel" :class="$style.colorBar" :style="{ background: channel.color }"></div>
|
||||
<textarea ref="textareaEl" v-model="text" :class="[$style.text]" :disabled="posting || posted" :readonly="textAreaReadOnly" :placeholder="placeholder" data-cy-post-form-text @keydown="onKeydown" @paste="onPaste" @compositionupdate="onCompositionUpdate" @compositionend="onCompositionEnd"/>
|
||||
<div v-if="maxTextLength - textLength < 100" :class="['_acrylic', $style.textCount, { [$style.textOver]: textLength > maxTextLength }]">{{ maxTextLength - textLength }}</div>
|
||||
</div>
|
||||
@@ -1041,6 +1042,16 @@ defineExpose({
|
||||
}
|
||||
}
|
||||
|
||||
.colorBar {
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
left: 12px;
|
||||
width: 5px;
|
||||
height: 100% ;
|
||||
border-radius: 999px;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.submitInner {
|
||||
padding: 0 12px;
|
||||
line-height: 34px;
|
||||
@@ -1303,5 +1314,6 @@ defineExpose({
|
||||
.headerRight {
|
||||
gap: 0;
|
||||
}
|
||||
|
||||
}
|
||||
</style>
|
||||
|
@@ -80,7 +80,6 @@ import { ref, computed } from 'vue';
|
||||
import { toUnicode } from 'punycode/';
|
||||
import MkButton from './MkButton.vue';
|
||||
import MkInput from './MkInput.vue';
|
||||
import MkSwitch from './MkSwitch.vue';
|
||||
import MkCaptcha, { type Captcha } from '@/components/MkCaptcha.vue';
|
||||
import * as config from '@/config.js';
|
||||
import * as os from '@/os.js';
|
||||
|
@@ -62,7 +62,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { computed, onMounted, ref, watch } from 'vue';
|
||||
import { computed, ref } from 'vue';
|
||||
import { instance } from '@/instance.js';
|
||||
import { i18n } from '@/i18n.js';
|
||||
import MkButton from '@/components/MkButton.vue';
|
||||
|
@@ -39,7 +39,6 @@ import XSignup from '@/components/MkSignupDialog.form.vue';
|
||||
import XServerRules from '@/components/MkSignupDialog.rules.vue';
|
||||
import MkModalWindow from '@/components/MkModalWindow.vue';
|
||||
import { i18n } from '@/i18n.js';
|
||||
import { instance } from '@/instance.js';
|
||||
|
||||
const props = withDefaults(defineProps<{
|
||||
autoSet?: boolean;
|
||||
|
@@ -35,7 +35,6 @@ import * as Misskey from 'misskey-js';
|
||||
import MkMediaList from '@/components/MkMediaList.vue';
|
||||
import MkPoll from '@/components/MkPoll.vue';
|
||||
import { i18n } from '@/i18n.js';
|
||||
import { $i } from '@/account.js';
|
||||
import { shouldCollapsed } from '@/scripts/collapsed.js';
|
||||
|
||||
const props = defineProps<{
|
||||
|
@@ -22,10 +22,10 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
<div :class="$style.statusItem">
|
||||
<p :class="$style.statusItemLabel">{{ i18n.ts.notes }}</p><span :class="$style.statusItemValue">{{ number(user.notesCount) }}</span>
|
||||
</div>
|
||||
<div v-if="isFfVisibleForMe(user)" :class="$style.statusItem">
|
||||
<div v-if="isFollowingVisibleForMe(user)" :class="$style.statusItem">
|
||||
<p :class="$style.statusItemLabel">{{ i18n.ts.following }}</p><span :class="$style.statusItemValue">{{ number(user.followingCount) }}</span>
|
||||
</div>
|
||||
<div v-if="isFfVisibleForMe(user)" :class="$style.statusItem">
|
||||
<div v-if="isFollowersVisibleForMe(user)" :class="$style.statusItem">
|
||||
<p :class="$style.statusItemLabel">{{ i18n.ts.followers }}</p><span :class="$style.statusItemValue">{{ number(user.followersCount) }}</span>
|
||||
</div>
|
||||
</div>
|
||||
@@ -40,7 +40,7 @@ import number from '@/filters/number.js';
|
||||
import { userPage } from '@/filters/user.js';
|
||||
import { i18n } from '@/i18n.js';
|
||||
import { $i } from '@/account.js';
|
||||
import { isFfVisibleForMe } from '@/scripts/isFfVisibleForMe.js';
|
||||
import { isFollowingVisibleForMe, isFollowersVisibleForMe } from '@/scripts/isFfVisibleForMe.js';
|
||||
|
||||
defineProps<{
|
||||
user: Misskey.entities.UserDetailed;
|
||||
|
@@ -35,11 +35,11 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
<div :class="$style.statusItemLabel">{{ i18n.ts.notes }}</div>
|
||||
<div>{{ number(user.notesCount) }}</div>
|
||||
</div>
|
||||
<div v-if="isFfVisibleForMe(user)" :class="$style.statusItem">
|
||||
<div v-if="isFollowingVisibleForMe(user)" :class="$style.statusItem">
|
||||
<div :class="$style.statusItemLabel">{{ i18n.ts.following }}</div>
|
||||
<div>{{ number(user.followingCount) }}</div>
|
||||
</div>
|
||||
<div v-if="isFfVisibleForMe(user)" :class="$style.statusItem">
|
||||
<div v-if="isFollowersVisibleForMe(user)" :class="$style.statusItem">
|
||||
<div :class="$style.statusItemLabel">{{ i18n.ts.followers }}</div>
|
||||
<div>{{ number(user.followersCount) }}</div>
|
||||
</div>
|
||||
@@ -65,7 +65,7 @@ import number from '@/filters/number.js';
|
||||
import { i18n } from '@/i18n.js';
|
||||
import { defaultStore } from '@/store.js';
|
||||
import { $i } from '@/account.js';
|
||||
import { isFfVisibleForMe } from '@/scripts/isFfVisibleForMe.js';
|
||||
import { isFollowingVisibleForMe, isFollowersVisibleForMe } from '@/scripts/isFfVisibleForMe.js';
|
||||
|
||||
const props = defineProps<{
|
||||
showing: boolean;
|
||||
|
@@ -34,15 +34,9 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { computed, ref, watch } from 'vue';
|
||||
import { instance } from '@/instance.js';
|
||||
import { i18n } from '@/i18n.js';
|
||||
import MkButton from '@/components/MkButton.vue';
|
||||
import MkFolder from '@/components/MkFolder.vue';
|
||||
import XUser from '@/components/MkUserSetupDialog.User.vue';
|
||||
import MkInfo from '@/components/MkInfo.vue';
|
||||
import * as os from '@/os.js';
|
||||
import { $i } from '@/account.js';
|
||||
import MkPagination from '@/components/MkPagination.vue';
|
||||
|
||||
const pinnedUsers = { endpoint: 'pinned-users', noPaging: true };
|
||||
|
@@ -44,14 +44,12 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { computed, ref, watch } from 'vue';
|
||||
import { instance } from '@/instance.js';
|
||||
import { ref, watch } from 'vue';
|
||||
import { i18n } from '@/i18n.js';
|
||||
import MkSwitch from '@/components/MkSwitch.vue';
|
||||
import MkInfo from '@/components/MkInfo.vue';
|
||||
import MkFolder from '@/components/MkFolder.vue';
|
||||
import * as os from '@/os.js';
|
||||
import { $i } from '@/account.js';
|
||||
|
||||
const isLocked = ref(false);
|
||||
const hideOnlineStatus = ref(false);
|
||||
|
@@ -30,8 +30,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { computed, ref, watch } from 'vue';
|
||||
import { instance } from '@/instance.js';
|
||||
import { ref, watch } from 'vue';
|
||||
import { i18n } from '@/i18n.js';
|
||||
import MkButton from '@/components/MkButton.vue';
|
||||
import MkInput from '@/components/MkInput.vue';
|
||||
|
@@ -29,7 +29,6 @@ import * as Misskey from 'misskey-js';
|
||||
import { ref } from 'vue';
|
||||
import MkButton from '@/components/MkButton.vue';
|
||||
import { i18n } from '@/i18n.js';
|
||||
import { $i } from '@/account.js';
|
||||
import * as os from '@/os.js';
|
||||
|
||||
const props = defineProps<{
|
||||
|
@@ -53,7 +53,6 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
<script lang="ts" setup>
|
||||
import { ref } from 'vue';
|
||||
import * as Misskey from 'misskey-js';
|
||||
import XTimeline from './welcome.timeline.vue';
|
||||
import XSigninDialog from '@/components/MkSigninDialog.vue';
|
||||
import XSignupDialog from '@/components/MkSignupDialog.vue';
|
||||
import MkButton from '@/components/MkButton.vue';
|
||||
@@ -63,7 +62,6 @@ import { instanceName } from '@/config.js';
|
||||
import * as os from '@/os.js';
|
||||
import { i18n } from '@/i18n.js';
|
||||
import { instance } from '@/instance.js';
|
||||
import number from '@/filters/number.js';
|
||||
import MkNumber from '@/components/MkNumber.vue';
|
||||
import XActiveUsersChart from '@/components/MkVisitorDashboard.ActiveUsersChart.vue';
|
||||
|
||||
|
@@ -21,7 +21,6 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
<script lang="ts" setup>
|
||||
import { ref, watch } from 'vue';
|
||||
import MkButton from '@/components/MkButton.vue';
|
||||
import { defaultStore } from '@/store.js';
|
||||
import { i18n } from '@/i18n.js';
|
||||
|
||||
const props = defineProps<{
|
||||
|
@@ -14,7 +14,6 @@ import { computed } from 'vue';
|
||||
import * as os from '@/os.js';
|
||||
import copyToClipboard from '@/scripts/copy-to-clipboard.js';
|
||||
import { url } from '@/config.js';
|
||||
import { popout as popout_ } from '@/scripts/popout.js';
|
||||
import { i18n } from '@/i18n.js';
|
||||
import { useRouter } from '@/router.js';
|
||||
|
||||
|
@@ -4,11 +4,8 @@
|
||||
*/
|
||||
|
||||
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
||||
import { expect } from '@storybook/jest';
|
||||
import { userEvent, waitFor, within } from '@storybook/testing-library';
|
||||
import { StoryObj } from '@storybook/vue3';
|
||||
import MkAd from './MkAd.vue';
|
||||
import { i18n } from '@/i18n.js';
|
||||
|
||||
let lock: Promise<undefined> | undefined;
|
||||
|
||||
|
@@ -5,7 +5,6 @@
|
||||
|
||||
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
||||
import { expect } from '@storybook/jest';
|
||||
import { userEvent, within } from '@storybook/testing-library';
|
||||
import { StoryObj } from '@storybook/vue3';
|
||||
import { userDetailed } from '../../../.storybook/fakes';
|
||||
import MkUserName from './MkUserName.vue';
|
||||
|
@@ -16,7 +16,6 @@ import * as mfm from 'mfm-js';
|
||||
import * as Misskey from 'misskey-js';
|
||||
import { TextBlock } from './block.type';
|
||||
import { extractUrlFromMfm } from '@/scripts/extract-url-from-mfm.js';
|
||||
import { $i } from '@/account.js';
|
||||
|
||||
const MkUrlPreview = defineAsyncComponent(() => import('@/components/MkUrlPreview.vue'));
|
||||
|
||||
|
@@ -10,7 +10,6 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { onMounted, nextTick } from 'vue';
|
||||
import * as Misskey from 'misskey-js';
|
||||
import XBlock from './page.block.vue';
|
||||
|
||||
|
@@ -54,7 +54,21 @@ https://github.com/sindresorhus/file-type/blob/main/core.js
|
||||
https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Containers
|
||||
*/
|
||||
|
||||
export const notificationTypes = ['note', 'follow', 'mention', 'reply', 'renote', 'quote', 'reaction', 'pollEnded', 'receiveFollowRequest', 'followRequestAccepted', 'achievementEarned', 'app'] as const;
|
||||
export const notificationTypes = [
|
||||
'note',
|
||||
'follow',
|
||||
'mention',
|
||||
'reply',
|
||||
'renote',
|
||||
'quote',
|
||||
'reaction',
|
||||
'pollEnded',
|
||||
'receiveFollowRequest',
|
||||
'followRequestAccepted',
|
||||
'roleAssigned',
|
||||
'achievementEarned',
|
||||
'app',
|
||||
] as const;
|
||||
export const obsoleteNotificationTypes = ['pollVote', 'groupInvited'] as const;
|
||||
|
||||
export const ROLE_POLICIES = [
|
||||
|
@@ -103,6 +103,7 @@
|
||||
["🫥", "dotted_line_face", 0],
|
||||
["🫤", "face_with_diagonal_mouth", 0],
|
||||
["🥹", "face_holding_back_tears", 0],
|
||||
["🫨", "shaking_face", 0],
|
||||
["💩", "poop", 0],
|
||||
["😈", "smiling_imp", 0],
|
||||
["👿", "imp", 0],
|
||||
@@ -132,6 +133,8 @@
|
||||
["✊", "fist", 1],
|
||||
["🤛", "fist_left", 1],
|
||||
["🤜", "fist_right", 1],
|
||||
["🫷", "leftwards_pushing_hand", 1],
|
||||
["🫸", "rightwards_pushing_hand", 1],
|
||||
["✌", "v", 1],
|
||||
["👌", "ok_hand", 1],
|
||||
["✋", "raised_hand", 1],
|
||||
@@ -453,6 +456,7 @@
|
||||
["🐸", "frog", 2],
|
||||
["🦑", "squid", 2],
|
||||
["🐙", "octopus", 2],
|
||||
["🪼", "jellyfish", 2],
|
||||
["🦐", "shrimp", 2],
|
||||
["🐵", "monkey_face", 2],
|
||||
["🦍", "gorilla", 2],
|
||||
@@ -466,7 +470,9 @@
|
||||
["🐤", "baby_chick", 2],
|
||||
["🐣", "hatching_chick", 2],
|
||||
["🐥", "hatched_chick", 2],
|
||||
["🪿", "goose", 2],
|
||||
["🦆", "duck", 2],
|
||||
["🐦⬛", "black_bird", 2],
|
||||
["🦅", "eagle", 2],
|
||||
["🦉", "owl", 2],
|
||||
["🦇", "bat", 2],
|
||||
@@ -474,6 +480,7 @@
|
||||
["🐗", "boar", 2],
|
||||
["🐴", "horse", 2],
|
||||
["🦄", "unicorn", 2],
|
||||
["🫎", "moose", 2],
|
||||
["🐝", "honeybee", 2],
|
||||
["🐛", "bug", 2],
|
||||
["🦋", "butterfly", 2],
|
||||
@@ -516,6 +523,7 @@
|
||||
["🐐", "goat", 2],
|
||||
["🐏", "ram", 2],
|
||||
["🐑", "sheep", 2],
|
||||
["🫏", "donkey", 2],
|
||||
["🐎", "racehorse", 2],
|
||||
["🐖", "pig2", 2],
|
||||
["🐀", "rat", 2],
|
||||
@@ -546,6 +554,7 @@
|
||||
["🐻❄️", "polar_bear", 2],
|
||||
["🦤", "dodo", 2],
|
||||
["🪶", "feather", 2],
|
||||
["🪽", "wing", 2],
|
||||
["🦭", "seal", 2],
|
||||
["🐾", "paw_prints", 2],
|
||||
["🐉", "dragon", 2],
|
||||
@@ -576,6 +585,7 @@
|
||||
["🌻", "sunflower", 2],
|
||||
["🌹", "rose", 2],
|
||||
["🥀", "wilted_flower", 2],
|
||||
["🪻", "hyacinth", 2],
|
||||
["🌷", "tulip", 2],
|
||||
["🌼", "blossom", 2],
|
||||
["🌸", "cherry_blossom", 2],
|
||||
@@ -655,6 +665,7 @@
|
||||
["🥝", "kiwi_fruit", 3],
|
||||
["🥭", "mango", 3],
|
||||
["🥑", "avocado", 3],
|
||||
["🫛", "pea_pod", 3],
|
||||
["🥦", "broccoli", 3],
|
||||
["🍅", "tomato", 3],
|
||||
["🍆", "eggplant", 3],
|
||||
@@ -668,6 +679,7 @@
|
||||
["🌽", "corn", 3],
|
||||
["🥬", "leafy_greens", 3],
|
||||
["🍠", "sweet_potato", 3],
|
||||
["🫚", "ginger_root", 3],
|
||||
["🥜", "peanuts", 3],
|
||||
["🧄", "garlic", 3],
|
||||
["🧅", "onion", 3],
|
||||
@@ -850,9 +862,11 @@
|
||||
["🎧", "headphones", 4],
|
||||
["🎼", "musical_score", 4],
|
||||
["🎹", "musical_keyboard", 4],
|
||||
["🪇", "maracas", 4],
|
||||
["🥁", "drum", 4],
|
||||
["🎷", "saxophone", 4],
|
||||
["🎺", "trumpet", 4],
|
||||
["🪈", "flute", 4],
|
||||
["🎸", "guitar", 4],
|
||||
["🎻", "violin", 4],
|
||||
["🪕", "banjo", 4],
|
||||
@@ -1108,6 +1122,7 @@
|
||||
["🩹", "adhesive_bandage", 6],
|
||||
["🩺", "stethoscope", 6],
|
||||
["🪒", "razor", 6],
|
||||
["🪮", "hair_pick", 6],
|
||||
["🩻", "xray", 6],
|
||||
["🩼", "crutch", 6],
|
||||
["🧬", "dna", 6],
|
||||
@@ -1156,6 +1171,7 @@
|
||||
["🎊", "confetti_ball", 6],
|
||||
["🎉", "tada", 6],
|
||||
["🎎", "dolls", 6],
|
||||
["🪭", "folding_hand_fan", 6],
|
||||
["🎐", "wind_chime", 6],
|
||||
["🎌", "crossed_flags", 6],
|
||||
["🏮", "izakaya_lantern", 6],
|
||||
@@ -1237,14 +1253,17 @@
|
||||
["🪧", "placard", 6],
|
||||
["💯", "100", 7],
|
||||
["🔢", "1234", 7],
|
||||
["🩷", "pink_heart", 7],
|
||||
["❤️", "heart", 7],
|
||||
["🧡", "orange_heart", 7],
|
||||
["💛", "yellow_heart", 7],
|
||||
["💚", "green_heart", 7],
|
||||
["🩵", "light_blue_heart", 7],
|
||||
["💙", "blue_heart", 7],
|
||||
["💜", "purple_heart", 7],
|
||||
["🤎", "brown_heart", 7],
|
||||
["🖤", "black_heart", 7],
|
||||
["🩶", "grey_heart", 7],
|
||||
["🤍", "white_heart", 7],
|
||||
["💔", "broken_heart", 7],
|
||||
["❣", "heavy_heart_exclamation", 7],
|
||||
@@ -1263,6 +1282,7 @@
|
||||
["☪", "star_and_crescent", 7],
|
||||
["🕉", "om", 7],
|
||||
["☸", "wheel_of_dharma", 7],
|
||||
["🪯", "khanda", 7],
|
||||
["✡", "star_of_david", 7],
|
||||
["🔯", "six_pointed_star", 7],
|
||||
["🕎", "menorah", 7],
|
||||
@@ -1358,6 +1378,7 @@
|
||||
["🛃", "customs", 7],
|
||||
["🛄", "baggage_claim", 7],
|
||||
["🛅", "left_luggage", 7],
|
||||
["🛜", "wireless", 7],
|
||||
["♿", "wheelchair", 7],
|
||||
["🚭", "no_smoking", 7],
|
||||
["🚾", "wc", 7],
|
||||
|
@@ -221,12 +221,12 @@ import MkFileListForAdmin from '@/components/MkFileListForAdmin.vue';
|
||||
import MkInfo from '@/components/MkInfo.vue';
|
||||
import * as os from '@/os.js';
|
||||
import { url } from '@/config.js';
|
||||
import { userPage, acct } from '@/filters/user.js';
|
||||
import { acct } from '@/filters/user.js';
|
||||
import { definePageMetadata } from '@/scripts/page-metadata.js';
|
||||
import { i18n } from '@/i18n.js';
|
||||
import { iAmAdmin, iAmModerator, $i } from '@/account.js';
|
||||
import MkRolePreview from '@/components/MkRolePreview.vue';
|
||||
import MkPagination, { Paging } from '@/components/MkPagination.vue';
|
||||
import MkPagination from '@/components/MkPagination.vue';
|
||||
|
||||
const props = withDefaults(defineProps<{
|
||||
userId: string;
|
||||
|
@@ -97,11 +97,8 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
import { ref, computed } from 'vue';
|
||||
import JSON5 from 'json5';
|
||||
import XHeader from './_header_.vue';
|
||||
import MkSwitch from '@/components/MkSwitch.vue';
|
||||
import MkInput from '@/components/MkInput.vue';
|
||||
import MkTextarea from '@/components/MkTextarea.vue';
|
||||
import FormSection from '@/components/form/section.vue';
|
||||
import FormSplit from '@/components/form/split.vue';
|
||||
import FormSuspense from '@/components/form/suspense.vue';
|
||||
import * as os from '@/os.js';
|
||||
import { instance, fetchInstance } from '@/instance.js';
|
||||
|
@@ -69,8 +69,6 @@ import XHeader from './_header_.vue';
|
||||
import MkSwitch from '@/components/MkSwitch.vue';
|
||||
import MkInput from '@/components/MkInput.vue';
|
||||
import MkTextarea from '@/components/MkTextarea.vue';
|
||||
import FormSection from '@/components/form/section.vue';
|
||||
import FormSplit from '@/components/form/split.vue';
|
||||
import FormSuspense from '@/components/form/suspense.vue';
|
||||
import * as os from '@/os.js';
|
||||
import { fetchInstance } from '@/instance.js';
|
||||
|
@@ -123,9 +123,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
import * as Misskey from 'misskey-js';
|
||||
import { CodeDiff } from 'v-code-diff';
|
||||
import JSON5 from 'json5';
|
||||
import * as os from '@/os.js';
|
||||
import { i18n } from '@/i18n.js';
|
||||
import { dateString } from '@/filters/date.js';
|
||||
import MkFolder from '@/components/MkFolder.vue';
|
||||
|
||||
const props = defineProps<{
|
||||
|
@@ -73,7 +73,7 @@ import { useRouter } from '@/router.js';
|
||||
import MkButton from '@/components/MkButton.vue';
|
||||
import MkUserCardMini from '@/components/MkUserCardMini.vue';
|
||||
import MkInfo from '@/components/MkInfo.vue';
|
||||
import MkPagination, { Paging } from '@/components/MkPagination.vue';
|
||||
import MkPagination from '@/components/MkPagination.vue';
|
||||
import { infoImageUrl } from '@/instance.js';
|
||||
|
||||
const router = useRouter();
|
||||
|
@@ -16,8 +16,6 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { computed, watch } from 'vue';
|
||||
import * as os from '@/os.js';
|
||||
import { definePageMetadata } from '@/scripts/page-metadata.js';
|
||||
import { i18n } from '@/i18n.js';
|
||||
import { instance } from '@/instance.js';
|
||||
|
@@ -38,9 +38,6 @@ import { ref, computed } from 'vue';
|
||||
import MkButton from '@/components/MkButton.vue';
|
||||
import MkInput from '@/components/MkInput.vue';
|
||||
import MkTextarea from '@/components/MkTextarea.vue';
|
||||
import MkSwitch from '@/components/MkSwitch.vue';
|
||||
import MkRadios from '@/components/MkRadios.vue';
|
||||
import MkInfo from '@/components/MkInfo.vue';
|
||||
import * as os from '@/os.js';
|
||||
import { i18n } from '@/i18n.js';
|
||||
import { definePageMetadata } from '@/scripts/page-metadata.js';
|
||||
|
@@ -80,7 +80,7 @@ import MkInput from '@/components/MkInput.vue';
|
||||
import MkPagination from '@/components/MkPagination.vue';
|
||||
import MkSwitch from '@/components/MkSwitch.vue';
|
||||
import FormSplit from '@/components/form/split.vue';
|
||||
import { selectFile, selectFiles } from '@/scripts/select-file.js';
|
||||
import { selectFile } from '@/scripts/select-file.js';
|
||||
import * as os from '@/os.js';
|
||||
import { i18n } from '@/i18n.js';
|
||||
import { definePageMetadata } from '@/scripts/page-metadata.js';
|
||||
|
@@ -103,7 +103,7 @@ import * as os from '@/os.js';
|
||||
import { i18n } from '@/i18n.js';
|
||||
import { customEmojiCategories } from '@/custom-emojis.js';
|
||||
import MkSwitch from '@/components/MkSwitch.vue';
|
||||
import { selectFile, selectFiles } from '@/scripts/select-file.js';
|
||||
import { selectFile } from '@/scripts/select-file.js';
|
||||
import MkRolePreview from '@/components/MkRolePreview.vue';
|
||||
|
||||
const props = defineProps<{
|
||||
|
@@ -68,7 +68,7 @@ import MkInput from '@/components/MkInput.vue';
|
||||
import { userListsCache } from '@/cache.js';
|
||||
import { $i } from '@/account.js';
|
||||
import { defaultStore } from '@/store.js';
|
||||
import MkPagination, { Paging } from '@/components/MkPagination.vue';
|
||||
import MkPagination from '@/components/MkPagination.vue';
|
||||
|
||||
const {
|
||||
enableInfiniteScroll,
|
||||
|
@@ -29,7 +29,6 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { ref } from 'vue';
|
||||
import { i18n } from '@/i18n.js';
|
||||
|
||||
const props = withDefaults(defineProps<{
|
||||
expanded?: boolean;
|
||||
|
@@ -42,18 +42,14 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { computed, onMounted, ref } from 'vue';
|
||||
import { ref } from 'vue';
|
||||
import MkNotes from '@/components/MkNotes.vue';
|
||||
import MkInput from '@/components/MkInput.vue';
|
||||
import MkRadios from '@/components/MkRadios.vue';
|
||||
import MkButton from '@/components/MkButton.vue';
|
||||
import MkSwitch from '@/components/MkSwitch.vue';
|
||||
import { i18n } from '@/i18n.js';
|
||||
import * as os from '@/os.js';
|
||||
import MkFoldableSection from '@/components/MkFoldableSection.vue';
|
||||
import { $i } from '@/account.js';
|
||||
import { instance } from '@/instance.js';
|
||||
import MkInfo from '@/components/MkInfo.vue';
|
||||
import { useRouter } from '@/router.js';
|
||||
import MkFolder from '@/components/MkFolder.vue';
|
||||
|
||||
|
@@ -25,7 +25,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { computed, defineAsyncComponent, onMounted, ref } from 'vue';
|
||||
import { ref } from 'vue';
|
||||
import MkUserList from '@/components/MkUserList.vue';
|
||||
import MkInput from '@/components/MkInput.vue';
|
||||
import MkRadios from '@/components/MkRadios.vue';
|
||||
@@ -33,9 +33,6 @@ import MkButton from '@/components/MkButton.vue';
|
||||
import { i18n } from '@/i18n.js';
|
||||
import * as os from '@/os.js';
|
||||
import MkFoldableSection from '@/components/MkFoldableSection.vue';
|
||||
import { $i } from '@/account.js';
|
||||
import { instance } from '@/instance.js';
|
||||
import MkInfo from '@/components/MkInfo.vue';
|
||||
import { useRouter } from '@/router.js';
|
||||
|
||||
const router = useRouter();
|
||||
|
@@ -23,10 +23,9 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { computed, defineAsyncComponent, onMounted, ref } from 'vue';
|
||||
import { computed, defineAsyncComponent, ref } from 'vue';
|
||||
import { i18n } from '@/i18n.js';
|
||||
import { definePageMetadata } from '@/scripts/page-metadata.js';
|
||||
import * as os from '@/os.js';
|
||||
import { $i } from '@/account.js';
|
||||
import { instance } from '@/instance.js';
|
||||
import MkInfo from '@/components/MkInfo.vue';
|
||||
|
@@ -72,7 +72,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { ref, defineAsyncComponent, computed } from 'vue';
|
||||
import { defineAsyncComponent, computed } from 'vue';
|
||||
import { supported as webAuthnSupported, create as webAuthnCreate, parseCreationOptionsFromJSON } from '@github/webauthn-json/browser-ponyfill';
|
||||
import MkButton from '@/components/MkButton.vue';
|
||||
import MkInfo from '@/components/MkInfo.vue';
|
||||
|
@@ -50,9 +50,6 @@ import MkButton from '@/components/MkButton.vue';
|
||||
import MkModalWindow from '@/components/MkModalWindow.vue';
|
||||
import MkSwitch from '@/components/MkSwitch.vue';
|
||||
import { i18n } from '@/i18n.js';
|
||||
import * as os from '@/os.js';
|
||||
import MkFolder from '@/components/MkFolder.vue';
|
||||
import MkInfo from '@/components/MkInfo.vue';
|
||||
import MkRange from '@/components/MkRange.vue';
|
||||
import { $i } from '@/account.js';
|
||||
|
@@ -4,51 +4,56 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
-->
|
||||
|
||||
<template>
|
||||
<div v-if="!loading" class="_gaps">
|
||||
<MkInfo>{{ i18n.t('_profile.avatarDecorationMax', { max: $i.policies.avatarDecorationLimit }) }} ({{ i18n.t('remainingN', { n: $i.policies.avatarDecorationLimit - $i.avatarDecorations.length }) }})</MkInfo>
|
||||
<div>
|
||||
<div v-if="!loading" class="_gaps">
|
||||
<MkInfo>{{ i18n.t('_profile.avatarDecorationMax', { max: $i.policies.avatarDecorationLimit }) }} ({{ i18n.t('remainingN', { n: $i.policies.avatarDecorationLimit - $i.avatarDecorations.length }) }})</MkInfo>
|
||||
|
||||
<div v-if="$i.avatarDecorations.length > 0" v-panel :class="$style.current" class="_gaps_s">
|
||||
<div>{{ i18n.ts.inUse }}</div>
|
||||
<MkAvatar :class="$style.avatar" :user="$i" forceShowDecoration/>
|
||||
|
||||
<div v-if="$i.avatarDecorations.length > 0" v-panel :class="$style.current" class="_gaps_s">
|
||||
<div>{{ i18n.ts.inUse }}</div>
|
||||
|
||||
<div :class="$style.decorations">
|
||||
<XDecoration
|
||||
v-for="(avatarDecoration, i) in $i.avatarDecorations"
|
||||
:decoration="avatarDecorations.find(d => d.id === avatarDecoration.id)"
|
||||
:angle="avatarDecoration.angle"
|
||||
:flipH="avatarDecoration.flipH"
|
||||
:offsetX="avatarDecoration.offsetX"
|
||||
:offsetY="avatarDecoration.offsetY"
|
||||
:active="true"
|
||||
@click="openDecoration(avatarDecoration, i)"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<MkButton danger @click="detachAllDecorations">{{ i18n.ts.detachAll }}</MkButton>
|
||||
</div>
|
||||
|
||||
<div :class="$style.decorations">
|
||||
<XDecoration
|
||||
v-for="(avatarDecoration, i) in $i.avatarDecorations"
|
||||
:decoration="avatarDecorations.find(d => d.id === avatarDecoration.id)"
|
||||
:angle="avatarDecoration.angle"
|
||||
:flipH="avatarDecoration.flipH"
|
||||
:offsetX="avatarDecoration.offsetX"
|
||||
:offsetY="avatarDecoration.offsetY"
|
||||
:active="true"
|
||||
@click="openDecoration(avatarDecoration, i)"
|
||||
v-for="avatarDecoration in avatarDecorations"
|
||||
:key="avatarDecoration.id"
|
||||
:decoration="avatarDecoration"
|
||||
@click="openDecoration(avatarDecoration)"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<MkButton danger @click="detachAllDecorations">{{ i18n.ts.detachAll }}</MkButton>
|
||||
</div>
|
||||
|
||||
<div :class="$style.decorations">
|
||||
<XDecoration
|
||||
v-for="avatarDecoration in avatarDecorations"
|
||||
:key="avatarDecoration.id"
|
||||
:decoration="avatarDecoration"
|
||||
@click="openDecoration(avatarDecoration)"
|
||||
/>
|
||||
<div v-else>
|
||||
<MkLoading/>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else>
|
||||
<MkLoading/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { ref, defineAsyncComponent } from 'vue';
|
||||
import { ref, defineAsyncComponent, computed } from 'vue';
|
||||
import * as Misskey from 'misskey-js';
|
||||
import XDecoration from './profile.avatar-decoration.decoration.vue';
|
||||
import XDecoration from './avatar-decoration.decoration.vue';
|
||||
import MkButton from '@/components/MkButton.vue';
|
||||
import * as os from '@/os.js';
|
||||
import { i18n } from '@/i18n.js';
|
||||
import { $i } from '@/account.js';
|
||||
import MkInfo from '@/components/MkInfo.vue';
|
||||
import { definePageMetadata } from '@/scripts/page-metadata.js';
|
||||
|
||||
const loading = ref(true);
|
||||
const avatarDecorations = ref<Misskey.entities.GetAvatarDecorationsResponse>([]);
|
||||
@@ -59,7 +64,7 @@ os.api('get-avatar-decorations').then(_avatarDecorations => {
|
||||
});
|
||||
|
||||
function openDecoration(avatarDecoration, index?: number) {
|
||||
os.popup(defineAsyncComponent(() => import('./profile.avatar-decoration.dialog.vue')), {
|
||||
os.popup(defineAsyncComponent(() => import('./avatar-decoration.dialog.vue')), {
|
||||
decoration: avatarDecoration,
|
||||
usingIndex: index,
|
||||
}, {
|
||||
@@ -115,9 +120,25 @@ function detachAllDecorations() {
|
||||
$i.avatarDecorations = [];
|
||||
});
|
||||
}
|
||||
|
||||
const headerActions = computed(() => []);
|
||||
|
||||
const headerTabs = computed(() => []);
|
||||
|
||||
definePageMetadata({
|
||||
title: i18n.ts.avatarDecorations,
|
||||
icon: 'ti ti-sparkles',
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="scss" module>
|
||||
.avatar {
|
||||
display: inline-block;
|
||||
width: 72px;
|
||||
height: 72px;
|
||||
margin: 16px auto;
|
||||
}
|
||||
|
||||
.current {
|
||||
padding: 16px;
|
||||
border-radius: var(--radius);
|
@@ -55,7 +55,6 @@ import MkPagination from '@/components/MkPagination.vue';
|
||||
import MkDriveFileThumbnail from '@/components/MkDriveFileThumbnail.vue';
|
||||
import { i18n } from '@/i18n.js';
|
||||
import bytes from '@/filters/bytes.js';
|
||||
import { dateString } from '@/filters/date.js';
|
||||
import { definePageMetadata } from '@/scripts/page-metadata.js';
|
||||
import MkSelect from '@/components/MkSelect.vue';
|
||||
import { getDriveFileMenu } from '@/scripts/get-drive-file-menu.js';
|
||||
|
@@ -57,7 +57,6 @@ import { defaultStore } from '@/store.js';
|
||||
import { unisonReload } from '@/scripts/unison-reload.js';
|
||||
import { i18n } from '@/i18n.js';
|
||||
import { definePageMetadata } from '@/scripts/page-metadata.js';
|
||||
import { deepClone } from '@/scripts/clone.js';
|
||||
|
||||
const Sortable = defineAsyncComponent(() => import('vuedraggable').then(x => x.default));
|
||||
|
||||
|
@@ -55,7 +55,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { defineAsyncComponent, shallowRef, computed } from 'vue';
|
||||
import { shallowRef, computed } from 'vue';
|
||||
import XNotificationConfig from './notifications.notification-config.vue';
|
||||
import FormLink from '@/components/form/link.vue';
|
||||
import FormSection from '@/components/form/section.vue';
|
||||
@@ -68,7 +68,7 @@ import { definePageMetadata } from '@/scripts/page-metadata.js';
|
||||
import MkPushNotificationAllowButton from '@/components/MkPushNotificationAllowButton.vue';
|
||||
import { notificationTypes } from '@/const.js';
|
||||
|
||||
const nonConfigurableNotificationTypes = ['note'];
|
||||
const nonConfigurableNotificationTypes = ['note', 'roleAssigned', 'followRequestAccepted', 'achievementEarned'];
|
||||
|
||||
const allowButton = shallowRef<InstanceType<typeof MkPushNotificationAllowButton>>();
|
||||
const pushRegistrationInServer = computed(() => allowButton.value?.pushRegistrationInServer);
|
||||
|
@@ -13,12 +13,18 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
<template #caption>{{ i18n.ts.makeReactionsPublicDescription }}</template>
|
||||
</MkSwitch>
|
||||
|
||||
<MkSelect v-model="ffVisibility" @update:modelValue="save()">
|
||||
<template #label>{{ i18n.ts.ffVisibility }}</template>
|
||||
<MkSelect v-model="followingVisibility" @update:modelValue="save()">
|
||||
<template #label>{{ i18n.ts.followingVisibility }}</template>
|
||||
<option value="public">{{ i18n.ts._ffVisibility.public }}</option>
|
||||
<option value="followers">{{ i18n.ts._ffVisibility.followers }}</option>
|
||||
<option value="private">{{ i18n.ts._ffVisibility.private }}</option>
|
||||
</MkSelect>
|
||||
|
||||
<MkSelect v-model="followersVisibility" @update:modelValue="save()">
|
||||
<template #label>{{ i18n.ts.followersVisibility }}</template>
|
||||
<option value="public">{{ i18n.ts._ffVisibility.public }}</option>
|
||||
<option value="followers">{{ i18n.ts._ffVisibility.followers }}</option>
|
||||
<option value="private">{{ i18n.ts._ffVisibility.private }}</option>
|
||||
<template #caption>{{ i18n.ts.ffVisibilityDescription }}</template>
|
||||
</MkSelect>
|
||||
|
||||
<MkSwitch v-model="hideOnlineStatus" @update:modelValue="save()">
|
||||
@@ -84,7 +90,8 @@ const preventAiLearning = ref($i.preventAiLearning);
|
||||
const isExplorable = ref($i.isExplorable);
|
||||
const hideOnlineStatus = ref($i.hideOnlineStatus);
|
||||
const publicReactions = ref($i.publicReactions);
|
||||
const ffVisibility = ref($i.ffVisibility);
|
||||
const followingVisibility = ref($i?.followingVisibility);
|
||||
const followersVisibility = ref($i?.followersVisibility);
|
||||
|
||||
const defaultNoteVisibility = computed(defaultStore.makeGetterSetter('defaultNoteVisibility'));
|
||||
const defaultNoteLocalOnly = computed(defaultStore.makeGetterSetter('defaultNoteLocalOnly'));
|
||||
@@ -100,7 +107,8 @@ function save() {
|
||||
isExplorable: !!isExplorable.value,
|
||||
hideOnlineStatus: !!hideOnlineStatus.value,
|
||||
publicReactions: !!publicReactions.value,
|
||||
ffVisibility: ffVisibility.value,
|
||||
followingVisibility: followingVisibility.value,
|
||||
followersVisibility: followersVisibility.value,
|
||||
});
|
||||
}
|
||||
|
||||
|
@@ -5,12 +5,17 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
<template>
|
||||
<div class="_gaps_m">
|
||||
<div :class="$style.avatarAndBanner" :style="{ backgroundImage: $i.bannerUrl ? `url(${ $i.bannerUrl })` : null }">
|
||||
<div class="_panel">
|
||||
<div :class="$style.banner" :style="{ backgroundImage: $i.bannerUrl ? `url(${ $i.bannerUrl })` : null }">
|
||||
<MkButton primary rounded :class="$style.bannerEdit" @click="changeBanner">{{ i18n.ts._profile.changeBanner }}</MkButton>
|
||||
</div>
|
||||
<div :class="$style.avatarContainer">
|
||||
<MkAvatar :class="$style.avatar" :user="$i" forceShowDecoration @click="changeAvatar"/>
|
||||
<MkButton primary rounded @click="changeAvatar">{{ i18n.ts._profile.changeAvatar }}</MkButton>
|
||||
<div class="_buttonsCenter">
|
||||
<MkButton primary rounded @click="changeAvatar">{{ i18n.ts._profile.changeAvatar }}</MkButton>
|
||||
<MkButton primary rounded link to="/settings/avatar-decoration">{{ i18n.ts.decorate }} <i class="ti ti-sparkles"></i></MkButton>
|
||||
</div>
|
||||
</div>
|
||||
<MkButton primary rounded :class="$style.bannerEdit" @click="changeBanner">{{ i18n.ts._profile.changeBanner }}</MkButton>
|
||||
</div>
|
||||
|
||||
<MkInput v-model="profile.name" :max="30" manualSave :mfmAutocomplete="['emoji']">
|
||||
@@ -83,13 +88,6 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
<template #caption>{{ i18n.ts._profile.metadataDescription }}</template>
|
||||
</FormSlot>
|
||||
|
||||
<MkFolder>
|
||||
<template #icon><i class="ti ti-sparkles"></i></template>
|
||||
<template #label>{{ i18n.ts.avatarDecorations }}</template>
|
||||
|
||||
<XAvatarDecoration/>
|
||||
</MkFolder>
|
||||
|
||||
<MkFolder>
|
||||
<template #label>{{ i18n.ts.advancedSettings }}</template>
|
||||
|
||||
@@ -112,8 +110,6 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { computed, reactive, ref, watch, defineAsyncComponent } from 'vue';
|
||||
import Misskey from 'misskey-js';
|
||||
import XAvatarDecoration from './profile.avatar-decoration.vue';
|
||||
import MkButton from '@/components/MkButton.vue';
|
||||
import MkInput from '@/components/MkInput.vue';
|
||||
import MkSwitch from '@/components/MkSwitch.vue';
|
||||
@@ -264,19 +260,19 @@ definePageMetadata({
|
||||
</script>
|
||||
|
||||
<style lang="scss" module>
|
||||
.avatarAndBanner {
|
||||
.banner {
|
||||
position: relative;
|
||||
height: 130px;
|
||||
background-size: cover;
|
||||
background-position: center;
|
||||
border: solid 1px var(--divider);
|
||||
border-radius: 10px;
|
||||
border-bottom: solid 1px var(--divider);
|
||||
overflow: clip;
|
||||
}
|
||||
|
||||
.avatarContainer {
|
||||
display: inline-block;
|
||||
margin-top: -50px;
|
||||
padding-bottom: 16px;
|
||||
text-align: center;
|
||||
padding: 16px;
|
||||
}
|
||||
|
||||
.avatar {
|
||||
|
@@ -23,21 +23,12 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { computed, reactive, watch } from 'vue';
|
||||
import MkButton from '@/components/MkButton.vue';
|
||||
import MkInput from '@/components/MkInput.vue';
|
||||
import MkTextarea from '@/components/MkTextarea.vue';
|
||||
import MkSwitch from '@/components/MkSwitch.vue';
|
||||
import MkSelect from '@/components/MkSelect.vue';
|
||||
import FormSplit from '@/components/form/split.vue';
|
||||
import MkFolder from '@/components/MkFolder.vue';
|
||||
import FormSlot from '@/components/form/slot.vue';
|
||||
import { computed } from 'vue';
|
||||
import FormSection from '@/components/form/section.vue';
|
||||
import * as os from '@/os.js';
|
||||
import { i18n } from '@/i18n.js';
|
||||
import { $i } from '@/account.js';
|
||||
import { definePageMetadata } from '@/scripts/page-metadata.js';
|
||||
import { defaultStore } from '@/store.js';
|
||||
import MkRolePreview from '@/components/MkRolePreview.vue';
|
||||
|
||||
function save() {
|
||||
|
@@ -45,7 +45,6 @@ import { i18n } from '@/i18n.js';
|
||||
import { instance } from '@/instance.js';
|
||||
import { $i } from '@/account.js';
|
||||
import { definePageMetadata } from '@/scripts/page-metadata.js';
|
||||
import { miLocalStorage } from '@/local-storage.js';
|
||||
import { antennasCache, userListsCache } from '@/cache.js';
|
||||
import { deviceKind } from '@/scripts/device-kind.js';
|
||||
import { MenuItem } from '@/types/menu.js';
|
||||
|
@@ -16,8 +16,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { computed, watch } from 'vue';
|
||||
import * as os from '@/os.js';
|
||||
import { computed } from 'vue';
|
||||
import MkUserList from '@/components/MkUserList.vue';
|
||||
import { definePageMetadata } from '@/scripts/page-metadata.js';
|
||||
|
||||
|
@@ -110,11 +110,11 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
<b>{{ number(user.notesCount) }}</b>
|
||||
<span>{{ i18n.ts.notes }}</span>
|
||||
</MkA>
|
||||
<MkA v-if="isFfVisibleForMe(user)" :to="userPage(user, 'following')">
|
||||
<MkA v-if="isFollowingVisibleForMe(user)" :to="userPage(user, 'following')">
|
||||
<b>{{ number(user.followingCount) }}</b>
|
||||
<span>{{ i18n.ts.following }}</span>
|
||||
</MkA>
|
||||
<MkA v-if="isFfVisibleForMe(user)" :to="userPage(user, 'followers')">
|
||||
<MkA v-if="isFollowersVisibleForMe(user)" :to="userPage(user, 'followers')">
|
||||
<b>{{ number(user.followersCount) }}</b>
|
||||
<span>{{ i18n.ts.followers }}</span>
|
||||
</MkA>
|
||||
@@ -171,9 +171,8 @@ import { i18n } from '@/i18n.js';
|
||||
import { $i, iAmModerator } from '@/account.js';
|
||||
import { dateString } from '@/filters/date.js';
|
||||
import { confetti } from '@/scripts/confetti.js';
|
||||
import MkNotes from '@/components/MkNotes.vue';
|
||||
import { api } from '@/os.js';
|
||||
import { isFfVisibleForMe } from '@/scripts/isFfVisibleForMe.js';
|
||||
import { isFollowingVisibleForMe, isFollowersVisibleForMe } from '@/scripts/isFfVisibleForMe.js';
|
||||
|
||||
function calcAge(birthdate: string): number {
|
||||
const date = new Date(birthdate);
|
||||
|
@@ -39,13 +39,7 @@ import XTimeline from './welcome.timeline.vue';
|
||||
import MarqueeText from '@/components/MkMarquee.vue';
|
||||
import MkFeaturedPhotos from '@/components/MkFeaturedPhotos.vue';
|
||||
import misskeysvg from '/client-assets/misskey.svg';
|
||||
import MkInfo from '@/components/MkInfo.vue';
|
||||
import { instanceName } from '@/config.js';
|
||||
import * as os from '@/os.js';
|
||||
import { i18n } from '@/i18n.js';
|
||||
import { instance } from '@/instance.js';
|
||||
import number from '@/filters/number.js';
|
||||
import MkNumber from '@/components/MkNumber.vue';
|
||||
import MkVisitorDashboard from '@/components/MkVisitorDashboard.vue';
|
||||
import { getProxiedImageUrl } from '@/scripts/media-proxy.js';
|
||||
|
||||
|
@@ -34,7 +34,6 @@ import MkMediaList from '@/components/MkMediaList.vue';
|
||||
import MkPoll from '@/components/MkPoll.vue';
|
||||
import * as os from '@/os.js';
|
||||
import { getScrollContainer } from '@/scripts/scroll.js';
|
||||
import { $i } from '@/account.js';
|
||||
|
||||
const notes = ref<Misskey.entities.Note[]>([]);
|
||||
const isScrolling = ref(false);
|
||||
|
@@ -54,6 +54,10 @@ export const routes = [{
|
||||
path: '/profile',
|
||||
name: 'profile',
|
||||
component: page(() => import('./pages/settings/profile.vue')),
|
||||
}, {
|
||||
path: '/avatar-decoration',
|
||||
name: 'avatarDecoration',
|
||||
component: page(() => import('./pages/settings/avatar-decoration.vue')),
|
||||
}, {
|
||||
path: '/roles',
|
||||
name: 'roles',
|
||||
|
@@ -3,7 +3,7 @@
|
||||
* SPDX-License-Identifier: AGPL-3.0-only
|
||||
*/
|
||||
|
||||
import { defineAsyncComponent, Ref, ref, computed, ComputedRef } from 'vue';
|
||||
import { defineAsyncComponent, Ref, ref } from 'vue';
|
||||
import { popup } from '@/os.js';
|
||||
import { defaultStore } from '@/store.js';
|
||||
|
||||
|
@@ -6,11 +6,19 @@
|
||||
import * as Misskey from 'misskey-js';
|
||||
import { $i } from '@/account.js';
|
||||
|
||||
export function isFfVisibleForMe(user: Misskey.entities.UserDetailed): boolean {
|
||||
export function isFollowingVisibleForMe(user: Misskey.entities.UserDetailed): boolean {
|
||||
if ($i && $i.id === user.id) return true;
|
||||
|
||||
if (user.ffVisibility === 'private') return false;
|
||||
if (user.ffVisibility === 'followers' && !user.isFollowing) return false;
|
||||
if (user.followingVisibility === 'private') return false;
|
||||
if (user.followingVisibility === 'followers' && !user.isFollowing) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
export function isFollowersVisibleForMe(user: Misskey.entities.UserDetailed): boolean {
|
||||
if ($i && $i.id === user.id) return true;
|
||||
|
||||
if (user.followersVisibility === 'private') return false;
|
||||
if (user.followersVisibility === 'followers' && !user.isFollowing) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
File diff suppressed because one or more lines are too long
@@ -49,7 +49,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { defineAsyncComponent, onMounted, computed, watch, nextTick, ref, shallowRef } from 'vue';
|
||||
import { defineAsyncComponent, computed, watch, ref, shallowRef } from 'vue';
|
||||
import { openInstanceMenu } from './_common_/common.js';
|
||||
// import { host } from '@/config.js';
|
||||
import * as os from '@/os.js';
|
||||
|
@@ -46,7 +46,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { defineAsyncComponent, ComputedRef, onMounted, provide, ref, computed, shallowRef } from 'vue';
|
||||
import { defineAsyncComponent, onMounted, provide, ref, computed, shallowRef } from 'vue';
|
||||
import XSidebar from './classic.sidebar.vue';
|
||||
import XCommon from './_common_/common.vue';
|
||||
import { instanceName } from '@/config.js';
|
||||
|
@@ -99,7 +99,6 @@ import { deckStore, addColumn as addColumnToStore, loadDeck, getProfiles, delete
|
||||
import XSidebar from '@/ui/_common_/navbar.vue';
|
||||
import XDrawerMenu from '@/ui/_common_/navbar-for-mobile.vue';
|
||||
import MkButton from '@/components/MkButton.vue';
|
||||
import { getScrollContainer } from '@/scripts/scroll.js';
|
||||
import * as os from '@/os.js';
|
||||
import { navbarItemDef } from '@/navbar.js';
|
||||
import { $i } from '@/account.js';
|
||||
|
@@ -71,7 +71,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
<script lang="ts" setup>
|
||||
import { ComputedRef, onMounted, provide, ref, computed } from 'vue';
|
||||
import XCommon from './_common_/common.vue';
|
||||
import { host, instanceName } from '@/config.js';
|
||||
import { instanceName } from '@/config.js';
|
||||
import * as os from '@/os.js';
|
||||
import { instance } from '@/instance.js';
|
||||
import XSigninDialog from '@/components/MkSigninDialog.vue';
|
||||
|
@@ -103,6 +103,7 @@
|
||||
"🫥": ["depressed", "disappear", "hide", "introvert", "invisible", "tensen"],
|
||||
"🫤": ["disappointed", "meh", "skeptical", "unsure"],
|
||||
"🥹": ["angry", "cry", "proud", "resist", "sad"],
|
||||
"🫨": ["earthquake", "face", "shaking", "shock", "vibrate"],
|
||||
"💩": ["hankey", "shitface", "fail", "turd", "shit"],
|
||||
"😈": ["devil", "horns"],
|
||||
"👿": ["devil", "angry", "horns"],
|
||||
@@ -132,6 +133,8 @@
|
||||
"✊": ["fingers", "hand", "grasp"],
|
||||
"🤛": ["hand", "fistbump"],
|
||||
"🤜": ["hand", "fistbump"],
|
||||
"🫷": ["hand", "high_five", "leftward", "push", "refuse", "stop", "wait"],
|
||||
"🫸": ["hand", "high_five", "push", "refuse", "rightward", "stop", "wait"],
|
||||
"✌": ["fingers", "ohyeah", "hand", "peace", "victory", "two"],
|
||||
"👌": ["fingers", "limbs", "perfect", "ok", "okay"],
|
||||
"✋": ["fingers", "stop", "highfive", "palm", "ban"],
|
||||
@@ -453,6 +456,7 @@
|
||||
"🐸": ["animal", "nature", "croak", "toad"],
|
||||
"🦑": ["animal", "nature", "ocean", "sea"],
|
||||
"🐙": ["animal", "creature", "ocean", "sea", "nature", "beach"],
|
||||
"🪼": ["animal", "creature", "ocean", "sea", "nature", "beach"],
|
||||
"🦐": ["animal", "ocean", "nature", "seafood"],
|
||||
"🐵": ["animal", "nature", "circus"],
|
||||
"🦍": ["animal", "nature", "circus"],
|
||||
@@ -466,7 +470,9 @@
|
||||
"🐤": ["animal", "chicken", "bird"],
|
||||
"🐣": ["animal", "chicken", "egg", "born", "baby", "bird"],
|
||||
"🐥": ["animal", "chicken", "baby", "bird"],
|
||||
"🪿": ["animal", "nature", "bird", "fowl", "goose", "honk", "silly"],
|
||||
"🦆": ["animal", "nature", "bird", "mallard"],
|
||||
"🐦⬛": ["animal", "nature", "bird", "black", "crow", "raven", "rook"],
|
||||
"🦅": ["animal", "nature", "bird"],
|
||||
"🦉": ["animal", "nature", "bird", "hoot"],
|
||||
"🦇": ["animal", "nature", "blind", "vampire"],
|
||||
@@ -474,9 +480,11 @@
|
||||
"🐗": ["animal", "nature"],
|
||||
"🐴": ["animal", "brown", "nature"],
|
||||
"🦄": ["animal", "nature", "mystical"],
|
||||
"🫎": ["animal", "nature", "antlers", "elk", "mammal"],
|
||||
"🐝": ["animal", "insect", "nature", "bug", "spring", "honey"],
|
||||
"🐛": ["animal", "insect", "nature", "worm"],
|
||||
"🦋": ["animal", "insect", "nature", "caterpillar"],
|
||||
"🫏": ["animal", "ass", "burro", "mammal", "mule", "stubborn"],
|
||||
"🐌": ["slow", "animal", "shell"],
|
||||
"🐞": ["animal", "insect", "nature", "ladybug"],
|
||||
"🐜": ["animal", "insect", "nature", "bug"],
|
||||
@@ -546,6 +554,7 @@
|
||||
"🐻❄️": ["animal", "nature"],
|
||||
"🦤": ["animal", "nature"],
|
||||
"🪶": ["animal", "nature"],
|
||||
"🪽": ["angelic", "aviation", "bird", "flying", "mythology"],
|
||||
"🦭": ["animal", "nature"],
|
||||
"🐾": ["animal", "tracking", "footprints", "dog", "cat", "pet", "feet"],
|
||||
"🐉": ["animal", "myth", "nature", "chinese", "green"],
|
||||
@@ -576,6 +585,7 @@
|
||||
"🌻": ["nature", "plant", "fall"],
|
||||
"🌹": ["flowers", "valentines", "love", "spring"],
|
||||
"🥀": ["plant", "nature", "flower"],
|
||||
"🪻": ["plant", "nature", "flower", "bluebonnet", "lavender", "lupine", "snapdragon"],
|
||||
"🌷": ["flowers", "plant", "nature", "summer", "spring"],
|
||||
"🌼": ["nature", "flowers", "yellow"],
|
||||
"🌸": ["nature", "plant", "spring", "flower"],
|
||||
@@ -655,6 +665,7 @@
|
||||
"🥝": ["fruit", "food"],
|
||||
"🥭": ["fruit", "food", "tropical"],
|
||||
"🥑": ["fruit", "food"],
|
||||
"🫛": ["beans", "edamame", "legume", "pea", "pod", "vegetable", "food"],
|
||||
"🥦": ["fruit", "food", "vegetable"],
|
||||
"🍅": ["fruit", "vegetable", "nature", "food"],
|
||||
"🍆": ["vegetable", "nature", "food", "aubergine"],
|
||||
@@ -668,6 +679,7 @@
|
||||
"🌽": ["food", "vegetable", "plant"],
|
||||
"🥬": ["food", "vegetable", "plant", "bok choy", "cabbage", "kale", "lettuce"],
|
||||
"🍠": ["food", "nature"],
|
||||
"🫚": ["food", "nature", "beer", "root", "spice"],
|
||||
"🥜": ["food", "nut"],
|
||||
"🧄": ["food"],
|
||||
"🧅": ["food"],
|
||||
@@ -850,9 +862,11 @@
|
||||
"🎧": ["music", "score", "gadgets"],
|
||||
"🎼": ["treble", "clef", "compose"],
|
||||
"🎹": ["piano", "instrument", "compose"],
|
||||
"🪇": ["instrument", "music", "percussion", "rattle", "shake"],
|
||||
"🥁": ["music", "instrument", "drumsticks", "snare"],
|
||||
"🎷": ["music", "instrument", "jazz", "blues"],
|
||||
"🎺": ["music", "brass"],
|
||||
"🪈": ["music", "fife", "pipe", "recorder", "woodwind"],
|
||||
"🎸": ["music", "instrument"],
|
||||
"🎻": ["music", "instrument", "orchestra", "symphony"],
|
||||
"🪕": ["music", "instrument"],
|
||||
@@ -1108,6 +1122,7 @@
|
||||
"🩹": ["health", "hospital", "medicine", "needle", "doctor", "nurse"],
|
||||
"🩺": ["health", "hospital", "medicine", "needle", "doctor", "nurse"],
|
||||
"🪒": ["health"],
|
||||
"🪮": ["afro", "comb", "hair", "pick"],
|
||||
"🩻": [],
|
||||
"🩼": [],
|
||||
"🧬": ["biologist", "genetics", "life"],
|
||||
@@ -1156,6 +1171,7 @@
|
||||
"🎊": ["festival", "party", "birthday", "circus"],
|
||||
"🎉": ["party", "congratulations", "birthday", "magic", "circus", "celebration"],
|
||||
"🎎": ["japanese", "toy", "kimono"],
|
||||
"🪭": ["cooling", "dance", "fan", "flutter", "hot", "shy"],
|
||||
"🎐": ["nature", "ding", "spring", "bell"],
|
||||
"🎌": ["japanese", "nation", "country", "border"],
|
||||
"🏮": ["light", "paper", "halloween", "spooky"],
|
||||
@@ -1237,14 +1253,17 @@
|
||||
"🪧": [],
|
||||
"💯": ["score", "perfect", "numbers", "century", "exam", "quiz", "test", "pass", "hundred"],
|
||||
"🔢": ["numbers", "blue-square"],
|
||||
"🩷": ["love", "like", "affection", "valentines"],
|
||||
"❤️": ["love", "like", "affection", "valentines"],
|
||||
"🧡": ["love", "like", "affection", "valentines"],
|
||||
"💛": ["love", "like", "affection", "valentines"],
|
||||
"💚": ["love", "like", "affection", "valentines"],
|
||||
"🩵": ["love", "like", "affection", "valentines"],
|
||||
"💙": ["love", "like", "affection", "valentines"],
|
||||
"💜": ["love", "like", "affection", "valentines"],
|
||||
"🤎": ["love", "like", "affection", "valentines"],
|
||||
"🖤": ["love", "like", "affection", "valentines"],
|
||||
"🩶": ["love", "like", "affection", "valentines"],
|
||||
"🤍": ["love", "like", "affection", "valentines"],
|
||||
"💔": ["sad", "sorry", "break", "heart", "heartbreak"],
|
||||
"❣": ["decoration", "love"],
|
||||
@@ -1263,6 +1282,7 @@
|
||||
"☪": ["islam"],
|
||||
"🕉": ["hinduism", "buddhism", "sikhism", "jainism"],
|
||||
"☸": ["hinduism", "buddhism", "sikhism", "jainism"],
|
||||
"🪯": ["religion", "sikh"],
|
||||
"✡": ["judaism"],
|
||||
"🔯": ["purple-square", "religion", "jewish", "hexagram"],
|
||||
"🕎": ["hanukkah", "candles", "jewish"],
|
||||
@@ -1358,6 +1378,7 @@
|
||||
"🛃": ["passport", "border", "blue-square"],
|
||||
"🛄": ["blue-square", "airport", "transport"],
|
||||
"🛅": ["blue-square", "travel"],
|
||||
"🛜": ["blue-square", "computer", "internet", "network"],
|
||||
"♿": ["blue-square", "disabled", "a11y", "accessibility"],
|
||||
"🚭": ["cigarette", "blue-square", "smell", "smoke"],
|
||||
"🚾": ["toilet", "restroom", "blue-square"],
|
||||
@@ -1527,258 +1548,258 @@
|
||||
"🕥": ["time", "late", "early", "schedule"],
|
||||
"🕦": ["time", "late", "early", "schedule"],
|
||||
"🕧": ["time", "late", "early", "schedule"],
|
||||
"🇦🇫": ["af", "flag", "nation", "country", "banner"],
|
||||
"🇦🇽": ["Åland", "islands", "flag", "nation", "country", "banner"],
|
||||
"🇦🇱": ["al", "flag", "nation", "country", "banner"],
|
||||
"🇩🇿": ["dz", "flag", "nation", "country", "banner"],
|
||||
"🇦🇸": ["american", "ws", "flag", "nation", "country", "banner"],
|
||||
"🇦🇫": ["af", "afghanistan", "flag", "nation", "country", "banner"],
|
||||
"🇦🇽": ["ax", "Åland", "aland", "islands", "flag", "nation", "country", "banner"],
|
||||
"🇦🇱": ["al", "albania", "flag", "nation", "country", "banner"],
|
||||
"🇩🇿": ["dz", "algeria", "flag", "nation", "country", "banner"],
|
||||
"🇦🇸": ["as", "american", "samoa", "flag", "nation", "country", "banner"],
|
||||
"🇦🇩": ["ad", "flag", "nation", "country", "banner"],
|
||||
"🇦🇴": ["ao", "flag", "nation", "country", "banner"],
|
||||
"🇦🇮": ["ai", "flag", "nation", "country", "banner"],
|
||||
"🇦🇶": ["aq", "flag", "nation", "country", "banner"],
|
||||
"🇦🇬": ["antigua", "barbuda", "flag", "nation", "country", "banner"],
|
||||
"🇦🇷": ["ar", "flag", "nation", "country", "banner"],
|
||||
"🇦🇲": ["am", "flag", "nation", "country", "banner"],
|
||||
"🇦🇼": ["aw", "flag", "nation", "country", "banner"],
|
||||
"🇦🇨": ["flag", "nation", "country", "banner"],
|
||||
"🇦🇺": ["au", "flag", "nation", "country", "banner"],
|
||||
"🇦🇹": ["at", "flag", "nation", "country", "banner"],
|
||||
"🇦🇿": ["az", "flag", "nation", "country", "banner"],
|
||||
"🇧🇸": ["bs", "flag", "nation", "country", "banner"],
|
||||
"🇧🇭": ["bh", "flag", "nation", "country", "banner"],
|
||||
"🇧🇩": ["bd", "flag", "nation", "country", "banner"],
|
||||
"🇧🇧": ["bb", "flag", "nation", "country", "banner"],
|
||||
"🇧🇾": ["by", "flag", "nation", "country", "banner"],
|
||||
"🇧🇪": ["be", "flag", "nation", "country", "banner"],
|
||||
"🇧🇿": ["bz", "flag", "nation", "country", "banner"],
|
||||
"🇧🇯": ["bj", "flag", "nation", "country", "banner"],
|
||||
"🇧🇲": ["bm", "flag", "nation", "country", "banner"],
|
||||
"🇧🇹": ["bt", "flag", "nation", "country", "banner"],
|
||||
"🇧🇴": ["bo", "flag", "nation", "country", "banner"],
|
||||
"🇧🇶": ["bonaire", "flag", "nation", "country", "banner"],
|
||||
"🇧🇦": ["bosnia", "herzegovina", "flag", "nation", "country", "banner"],
|
||||
"🇧🇼": ["bw", "flag", "nation", "country", "banner"],
|
||||
"🇧🇷": ["br", "flag", "nation", "country", "banner"],
|
||||
"🇮🇴": ["british", "indian", "ocean", "territory", "flag", "nation", "country", "banner"],
|
||||
"🇻🇬": ["british", "virgin", "islands", "bvi", "flag", "nation", "country", "banner"],
|
||||
"🇧🇳": ["bn", "darussalam", "flag", "nation", "country", "banner"],
|
||||
"🇧🇬": ["bg", "flag", "nation", "country", "banner"],
|
||||
"🇧🇫": ["burkina", "faso", "flag", "nation", "country", "banner"],
|
||||
"🇧🇮": ["bi", "flag", "nation", "country", "banner"],
|
||||
"🇨🇻": ["cabo", "verde", "flag", "nation", "country", "banner"],
|
||||
"🇰🇭": ["kh", "flag", "nation", "country", "banner"],
|
||||
"🇨🇲": ["cm", "flag", "nation", "country", "banner"],
|
||||
"🇨🇦": ["ca", "flag", "nation", "country", "banner"],
|
||||
"🇮🇨": ["canary", "islands", "flag", "nation", "country", "banner"],
|
||||
"🇰🇾": ["cayman", "islands", "flag", "nation", "country", "banner"],
|
||||
"🇨🇫": ["central", "african", "republic", "flag", "nation", "country", "banner"],
|
||||
"🇹🇩": ["td", "flag", "nation", "country", "banner"],
|
||||
"🇨🇱": ["flag", "nation", "country", "banner"],
|
||||
"🇨🇳": ["china", "chinese", "prc", "flag", "country", "nation", "banner"],
|
||||
"🇨🇽": ["christmas", "island", "flag", "nation", "country", "banner"],
|
||||
"🇨🇨": ["cocos", "keeling", "islands", "flag", "nation", "country", "banner"],
|
||||
"🇨🇴": ["co", "flag", "nation", "country", "banner"],
|
||||
"🇰🇲": ["km", "flag", "nation", "country", "banner"],
|
||||
"🇨🇬": ["congo", "flag", "nation", "country", "banner"],
|
||||
"🇨🇩": ["congo", "democratic", "republic", "flag", "nation", "country", "banner"],
|
||||
"🇨🇰": ["cook", "islands", "flag", "nation", "country", "banner"],
|
||||
"🇨🇷": ["costa", "rica", "flag", "nation", "country", "banner"],
|
||||
"🇭🇷": ["hr", "flag", "nation", "country", "banner"],
|
||||
"🇨🇺": ["cu", "flag", "nation", "country", "banner"],
|
||||
"🇨🇼": ["curaçao", "flag", "nation", "country", "banner"],
|
||||
"🇨🇾": ["cy", "flag", "nation", "country", "banner"],
|
||||
"🇨🇿": ["cz", "flag", "nation", "country", "banner"],
|
||||
"🇩🇰": ["dk", "flag", "nation", "country", "banner"],
|
||||
"🇩🇯": ["dj", "flag", "nation", "country", "banner"],
|
||||
"🇩🇲": ["dm", "flag", "nation", "country", "banner"],
|
||||
"🇩🇴": ["dominican", "republic", "flag", "nation", "country", "banner"],
|
||||
"🇪🇨": ["ec", "flag", "nation", "country", "banner"],
|
||||
"🇪🇬": ["eg", "flag", "nation", "country", "banner"],
|
||||
"🇸🇻": ["el", "salvador", "flag", "nation", "country", "banner"],
|
||||
"🇬🇶": ["equatorial", "gn", "flag", "nation", "country", "banner"],
|
||||
"🇪🇷": ["er", "flag", "nation", "country", "banner"],
|
||||
"🇪🇪": ["ee", "flag", "nation", "country", "banner"],
|
||||
"🇪🇹": ["et", "flag", "nation", "country", "banner"],
|
||||
"🇪🇺": ["european", "union", "flag", "banner"],
|
||||
"🇫🇰": ["falkland", "islands", "malvinas", "flag", "nation", "country", "banner"],
|
||||
"🇫🇴": ["faroe", "islands", "flag", "nation", "country", "banner"],
|
||||
"🇫🇯": ["fj", "flag", "nation", "country", "banner"],
|
||||
"🇫🇮": ["fi", "flag", "nation", "country", "banner"],
|
||||
"🇫🇷": ["banner", "flag", "nation", "france", "french", "country"],
|
||||
"🇬🇫": ["french", "guiana", "flag", "nation", "country", "banner"],
|
||||
"🇵🇫": ["french", "polynesia", "flag", "nation", "country", "banner"],
|
||||
"🇹🇫": ["french", "southern", "territories", "flag", "nation", "country", "banner"],
|
||||
"🇬🇦": ["ga", "flag", "nation", "country", "banner"],
|
||||
"🇬🇲": ["gm", "flag", "nation", "country", "banner"],
|
||||
"🇬🇪": ["ge", "flag", "nation", "country", "banner"],
|
||||
"🇩🇪": ["german", "nation", "flag", "country", "banner"],
|
||||
"🇬🇭": ["gh", "flag", "nation", "country", "banner"],
|
||||
"🇬🇮": ["gi", "flag", "nation", "country", "banner"],
|
||||
"🇬🇷": ["gr", "flag", "nation", "country", "banner"],
|
||||
"🇬🇱": ["gl", "flag", "nation", "country", "banner"],
|
||||
"🇬🇩": ["gd", "flag", "nation", "country", "banner"],
|
||||
"🇬🇵": ["gp", "flag", "nation", "country", "banner"],
|
||||
"🇬🇺": ["gu", "flag", "nation", "country", "banner"],
|
||||
"🇬🇹": ["gt", "flag", "nation", "country", "banner"],
|
||||
"🇬🇬": ["gg", "flag", "nation", "country", "banner"],
|
||||
"🇬🇳": ["gn", "flag", "nation", "country", "banner"],
|
||||
"🇬🇼": ["gw", "bissau", "flag", "nation", "country", "banner"],
|
||||
"🇬🇾": ["gy", "flag", "nation", "country", "banner"],
|
||||
"🇭🇹": ["ht", "flag", "nation", "country", "banner"],
|
||||
"🇭🇳": ["hn", "flag", "nation", "country", "banner"],
|
||||
"🇭🇰": ["hong", "kong", "flag", "nation", "country", "banner"],
|
||||
"🇭🇺": ["hu", "flag", "nation", "country", "banner"],
|
||||
"🇮🇸": ["is", "flag", "nation", "country", "banner"],
|
||||
"🇮🇳": ["in", "flag", "nation", "country", "banner"],
|
||||
"🇮🇩": ["flag", "nation", "country", "banner"],
|
||||
"🇮🇷": ["iran, ", "islamic", "republic", "flag", "nation", "country", "banner"],
|
||||
"🇮🇶": ["iq", "flag", "nation", "country", "banner"],
|
||||
"🇮🇪": ["ie", "flag", "nation", "country", "banner"],
|
||||
"🇮🇲": ["isle", "man", "flag", "nation", "country", "banner"],
|
||||
"🇮🇱": ["il", "flag", "nation", "country", "banner"],
|
||||
"🇮🇹": ["italy", "flag", "nation", "country", "banner"],
|
||||
"🇨🇮": ["ivory", "coast", "flag", "nation", "country", "banner"],
|
||||
"🇯🇲": ["jm", "flag", "nation", "country", "banner"],
|
||||
"🇯🇵": ["japanese", "nation", "flag", "country", "banner"],
|
||||
"🇯🇪": ["je", "flag", "nation", "country", "banner"],
|
||||
"🇯🇴": ["jo", "flag", "nation", "country", "banner"],
|
||||
"🇰🇿": ["kz", "flag", "nation", "country", "banner"],
|
||||
"🇰🇪": ["ke", "flag", "nation", "country", "banner"],
|
||||
"🇰🇮": ["ki", "flag", "nation", "country", "banner"],
|
||||
"🇽🇰": ["xk", "flag", "nation", "country", "banner"],
|
||||
"🇰🇼": ["kw", "flag", "nation", "country", "banner"],
|
||||
"🇰🇬": ["kg", "flag", "nation", "country", "banner"],
|
||||
"🇱🇦": ["lao", "democratic", "republic", "flag", "nation", "country", "banner"],
|
||||
"🇱🇻": ["lv", "flag", "nation", "country", "banner"],
|
||||
"🇱🇧": ["lb", "flag", "nation", "country", "banner"],
|
||||
"🇱🇸": ["ls", "flag", "nation", "country", "banner"],
|
||||
"🇱🇷": ["lr", "flag", "nation", "country", "banner"],
|
||||
"🇱🇾": ["ly", "flag", "nation", "country", "banner"],
|
||||
"🇱🇮": ["li", "flag", "nation", "country", "banner"],
|
||||
"🇱🇹": ["lt", "flag", "nation", "country", "banner"],
|
||||
"🇱🇺": ["lu", "flag", "nation", "country", "banner"],
|
||||
"🇲🇴": ["macao", "flag", "nation", "country", "banner"],
|
||||
"🇲🇰": ["macedonia, ", "flag", "nation", "country", "banner"],
|
||||
"🇲🇬": ["mg", "flag", "nation", "country", "banner"],
|
||||
"🇲🇼": ["mw", "flag", "nation", "country", "banner"],
|
||||
"🇲🇾": ["my", "flag", "nation", "country", "banner"],
|
||||
"🇲🇻": ["mv", "flag", "nation", "country", "banner"],
|
||||
"🇲🇱": ["ml", "flag", "nation", "country", "banner"],
|
||||
"🇲🇹": ["mt", "flag", "nation", "country", "banner"],
|
||||
"🇲🇭": ["marshall", "islands", "flag", "nation", "country", "banner"],
|
||||
"🇲🇶": ["mq", "flag", "nation", "country", "banner"],
|
||||
"🇲🇷": ["mr", "flag", "nation", "country", "banner"],
|
||||
"🇲🇺": ["mu", "flag", "nation", "country", "banner"],
|
||||
"🇾🇹": ["yt", "flag", "nation", "country", "banner"],
|
||||
"🇲🇽": ["mx", "flag", "nation", "country", "banner"],
|
||||
"🇫🇲": ["micronesia, ", "federated", "states", "flag", "nation", "country", "banner"],
|
||||
"🇲🇩": ["moldova, ", "republic", "flag", "nation", "country", "banner"],
|
||||
"🇲🇨": ["mc", "flag", "nation", "country", "banner"],
|
||||
"🇲🇳": ["mn", "flag", "nation", "country", "banner"],
|
||||
"🇲🇪": ["me", "flag", "nation", "country", "banner"],
|
||||
"🇲🇸": ["ms", "flag", "nation", "country", "banner"],
|
||||
"🇲🇦": ["ma", "flag", "nation", "country", "banner"],
|
||||
"🇲🇿": ["mz", "flag", "nation", "country", "banner"],
|
||||
"🇲🇲": ["mm", "flag", "nation", "country", "banner"],
|
||||
"🇳🇦": ["na", "flag", "nation", "country", "banner"],
|
||||
"🇳🇷": ["nr", "flag", "nation", "country", "banner"],
|
||||
"🇳🇵": ["np", "flag", "nation", "country", "banner"],
|
||||
"🇳🇱": ["nl", "flag", "nation", "country", "banner"],
|
||||
"🇳🇨": ["new", "caledonia", "flag", "nation", "country", "banner"],
|
||||
"🇳🇿": ["new", "zealand", "flag", "nation", "country", "banner"],
|
||||
"🇳🇮": ["ni", "flag", "nation", "country", "banner"],
|
||||
"🇳🇪": ["ne", "flag", "nation", "country", "banner"],
|
||||
"🇳🇬": ["flag", "nation", "country", "banner"],
|
||||
"🇳🇺": ["nu", "flag", "nation", "country", "banner"],
|
||||
"🇳🇫": ["norfolk", "island", "flag", "nation", "country", "banner"],
|
||||
"🇲🇵": ["northern", "mariana", "islands", "flag", "nation", "country", "banner"],
|
||||
"🇰🇵": ["north", "korea", "nation", "flag", "country", "banner"],
|
||||
"🇳🇴": ["no", "flag", "nation", "country", "banner"],
|
||||
"🇴🇲": ["om_symbol", "flag", "nation", "country", "banner"],
|
||||
"🇵🇰": ["pk", "flag", "nation", "country", "banner"],
|
||||
"🇵🇼": ["pw", "flag", "nation", "country", "banner"],
|
||||
"🇵🇸": ["palestine", "palestinian", "territories", "flag", "nation", "country", "banner"],
|
||||
"🇵🇦": ["pa", "flag", "nation", "country", "banner"],
|
||||
"🇵🇬": ["papua", "new", "guinea", "flag", "nation", "country", "banner"],
|
||||
"🇵🇾": ["py", "flag", "nation", "country", "banner"],
|
||||
"🇵🇪": ["pe", "flag", "nation", "country", "banner"],
|
||||
"🇵🇭": ["ph", "flag", "nation", "country", "banner"],
|
||||
"🇵🇳": ["pitcairn", "flag", "nation", "country", "banner"],
|
||||
"🇵🇱": ["pl", "flag", "nation", "country", "banner"],
|
||||
"🇵🇹": ["pt", "flag", "nation", "country", "banner"],
|
||||
"🇵🇷": ["puerto", "rico", "flag", "nation", "country", "banner"],
|
||||
"🇶🇦": ["qa", "flag", "nation", "country", "banner"],
|
||||
"🇷🇪": ["réunion", "flag", "nation", "country", "banner"],
|
||||
"🇷🇴": ["ro", "flag", "nation", "country", "banner"],
|
||||
"🇷🇺": ["russian", "federation", "flag", "nation", "country", "banner"],
|
||||
"🇷🇼": ["rw", "flag", "nation", "country", "banner"],
|
||||
"🇧🇱": ["saint", "barthélemy", "flag", "nation", "country", "banner"],
|
||||
"🇸🇭": ["saint", "helena", "ascension", "tristan", "cunha", "flag", "nation", "country", "banner"],
|
||||
"🇰🇳": ["saint", "kitts", "nevis", "flag", "nation", "country", "banner"],
|
||||
"🇱🇨": ["saint", "lucia", "flag", "nation", "country", "banner"],
|
||||
"🇵🇲": ["saint", "pierre", "miquelon", "flag", "nation", "country", "banner"],
|
||||
"🇻🇨": ["saint", "vincent", "grenadines", "flag", "nation", "country", "banner"],
|
||||
"🇼🇸": ["ws", "flag", "nation", "country", "banner"],
|
||||
"🇸🇲": ["san", "marino", "flag", "nation", "country", "banner"],
|
||||
"🇸🇹": ["sao", "tome", "principe", "flag", "nation", "country", "banner"],
|
||||
"🇸🇦": ["flag", "nation", "country", "banner"],
|
||||
"🇸🇳": ["sn", "flag", "nation", "country", "banner"],
|
||||
"🇷🇸": ["rs", "flag", "nation", "country", "banner"],
|
||||
"🇸🇨": ["sc", "flag", "nation", "country", "banner"],
|
||||
"🇸🇱": ["sierra", "leone", "flag", "nation", "country", "banner"],
|
||||
"🇸🇬": ["sg", "flag", "nation", "country", "banner"],
|
||||
"🇸🇽": ["sint", "maarten", "dutch", "flag", "nation", "country", "banner"],
|
||||
"🇸🇰": ["sk", "flag", "nation", "country", "banner"],
|
||||
"🇸🇮": ["si", "flag", "nation", "country", "banner"],
|
||||
"🇸🇧": ["solomon", "islands", "flag", "nation", "country", "banner"],
|
||||
"🇸🇴": ["so", "flag", "nation", "country", "banner"],
|
||||
"🇿🇦": ["south", "africa", "flag", "nation", "country", "banner"],
|
||||
"🇬🇸": ["south", "georgia", "sandwich", "islands", "flag", "nation", "country", "banner"],
|
||||
"🇰🇷": ["south", "korea", "nation", "flag", "country", "banner"],
|
||||
"🇸🇸": ["south", "sd", "flag", "nation", "country", "banner"],
|
||||
"🇪🇸": ["spain", "flag", "nation", "country", "banner"],
|
||||
"🇱🇰": ["sri", "lanka", "flag", "nation", "country", "banner"],
|
||||
"🇸🇩": ["sd", "flag", "nation", "country", "banner"],
|
||||
"🇸🇷": ["sr", "flag", "nation", "country", "banner"],
|
||||
"🇸🇿": ["sz", "flag", "nation", "country", "banner"],
|
||||
"🇸🇪": ["se", "flag", "nation", "country", "banner"],
|
||||
"🇨🇭": ["ch", "flag", "nation", "country", "banner"],
|
||||
"🇸🇾": ["syrian", "arab", "republic", "flag", "nation", "country", "banner"],
|
||||
"🇹🇼": ["tw", "flag", "nation", "country", "banner"],
|
||||
"🇹🇯": ["tj", "flag", "nation", "country", "banner"],
|
||||
"🇹🇿": ["tanzania, ", "united", "republic", "flag", "nation", "country", "banner"],
|
||||
"🇹🇭": ["th", "flag", "nation", "country", "banner"],
|
||||
"🇹🇱": ["timor", "leste", "flag", "nation", "country", "banner"],
|
||||
"🇹🇬": ["tg", "flag", "nation", "country", "banner"],
|
||||
"🇹🇰": ["tk", "flag", "nation", "country", "banner"],
|
||||
"🇹🇴": ["to", "flag", "nation", "country", "banner"],
|
||||
"🇹🇹": ["trinidad", "tobago", "flag", "nation", "country", "banner"],
|
||||
"🇹🇦": ["flag", "nation", "country", "banner"],
|
||||
"🇹🇳": ["tn", "flag", "nation", "country", "banner"],
|
||||
"🇹🇷": ["turkey", "flag", "nation", "country", "banner"],
|
||||
"🇹🇲": ["flag", "nation", "country", "banner"],
|
||||
"🇹🇨": ["turks", "caicos", "islands", "flag", "nation", "country", "banner"],
|
||||
"🇹🇻": ["flag", "nation", "country", "banner"],
|
||||
"🇺🇬": ["ug", "flag", "nation", "country", "banner"],
|
||||
"🇺🇦": ["ua", "flag", "nation", "country", "banner"],
|
||||
"🇦🇪": ["united", "arab", "emirates", "flag", "nation", "country", "banner"],
|
||||
"🇬🇧": ["united", "kingdom", "great", "britain", "northern", "ireland", "flag", "nation", "country", "banner", "british", "UK", "english", "england", "union jack"],
|
||||
"🇦🇴": ["ao", "angola", "flag", "nation", "country", "banner"],
|
||||
"🇦🇮": ["ai", "anguilla", "flag", "nation", "country", "banner"],
|
||||
"🇦🇶": ["aq", "antarctique", "flag", "nation", "country", "banner"],
|
||||
"🇦🇬": ["ag", "antigua", "barbuda", "flag", "nation", "country", "banner"],
|
||||
"🇦🇷": ["ar", "argentina", "flag", "nation", "country", "banner"],
|
||||
"🇦🇲": ["am", "armenia", "flag", "nation", "country", "banner"],
|
||||
"🇦🇼": ["aw", "aruba", "flag", "nation", "country", "banner"],
|
||||
"🇦🇨": ["ac", "ascension", "island", "flag", "nation", "country", "banner"],
|
||||
"🇦🇺": ["au", "australia", "flag", "nation", "country", "banner"],
|
||||
"🇦🇹": ["at", "austria", "flag", "nation", "country", "banner"],
|
||||
"🇦🇿": ["az", "azerbaijan", "flag", "nation", "country", "banner"],
|
||||
"🇧🇸": ["bs", "bahamas", "flag", "nation", "country", "banner"],
|
||||
"🇧🇭": ["bh", "bahrain", "flag", "nation", "country", "banner"],
|
||||
"🇧🇩": ["bd", "bangladesh", "flag", "nation", "country", "banner"],
|
||||
"🇧🇧": ["bb", "barbados", "flag", "nation", "country", "banner"],
|
||||
"🇧🇾": ["by", "belarus", "flag", "nation", "country", "banner"],
|
||||
"🇧🇪": ["be", "belgium", "flag", "nation", "country", "banner"],
|
||||
"🇧🇿": ["bz", "belize", "flag", "nation", "country", "banner"],
|
||||
"🇧🇯": ["bj", "benin", "flag", "nation", "country", "banner"],
|
||||
"🇧🇲": ["bm", "bermuda", "flag", "nation", "country", "banner"],
|
||||
"🇧🇹": ["bt", "bhutan", "flag", "nation", "country", "banner"],
|
||||
"🇧🇴": ["bo", "bolivia", "flag", "nation", "country", "banner"],
|
||||
"🇧🇶": ["bq", "bonaire", "flag", "nation", "country", "banner"],
|
||||
"🇧🇦": ["ba", "bosnia", "herzegovina", "flag", "nation", "country", "banner"],
|
||||
"🇧🇼": ["bw", "botswana", "flag", "nation", "country", "banner"],
|
||||
"🇧🇷": ["br", "brazil", "flag", "nation", "country", "banner"],
|
||||
"🇮🇴": ["io", "british", "indian", "ocean", "territory", "flag", "nation", "country", "banner"],
|
||||
"🇻🇬": ["vg", "british", "virgin", "islands", "bvi", "flag", "nation", "country", "banner"],
|
||||
"🇧🇳": ["bn", "brunei", "darussalam", "flag", "nation", "country", "banner"],
|
||||
"🇧🇬": ["bg", "bulgaria", "flag", "nation", "country", "banner"],
|
||||
"🇧🇫": ["bf", "burkina", "faso", "flag", "nation", "country", "banner"],
|
||||
"🇧🇮": ["bi", "burundi", "flag", "nation", "country", "banner"],
|
||||
"🇨🇻": ["cv", "cabo", "verde", "flag", "nation", "country", "banner"],
|
||||
"🇰🇭": ["kh", "cambodia", "flag", "nation", "country", "banner"],
|
||||
"🇨🇲": ["cm", "cameroon", "flag", "nation", "country", "banner"],
|
||||
"🇨🇦": ["ca", "canada", "flag", "nation", "country", "banner"],
|
||||
"🇮🇨": ["ic", "canary", "islands", "flag", "nation", "country", "banner"],
|
||||
"🇰🇾": ["ky", "cayman", "islands", "flag", "nation", "country", "banner"],
|
||||
"🇨🇫": ["cf", "central", "african", "republic", "flag", "nation", "country", "banner"],
|
||||
"🇹🇩": ["td", "chad", "flag", "nation", "country", "banner"],
|
||||
"🇨🇱": ["cl", "chile", "flag", "nation", "country", "banner"],
|
||||
"🇨🇳": ["cn", "china", "chinese", "prc", "flag", "country", "nation", "banner"],
|
||||
"🇨🇽": ["cx", "christmas", "island", "flag", "nation", "country", "banner"],
|
||||
"🇨🇨": ["cc", "cocos", "keeling", "islands", "flag", "nation", "country", "banner"],
|
||||
"🇨🇴": ["co", "colombia", "flag", "nation", "country", "banner"],
|
||||
"🇰🇲": ["km", "comoros", "flag", "nation", "country", "banner"],
|
||||
"🇨🇬": ["cg", "republic", "congo", "flag", "nation", "country", "banner"],
|
||||
"🇨🇩": ["cd", "democratic", "republic", "congo", "flag", "nation", "country", "banner"],
|
||||
"🇨🇰": ["ck", "cook", "islands", "flag", "nation", "country", "banner"],
|
||||
"🇨🇷": ["cr", "costa", "rica", "flag", "nation", "country", "banner"],
|
||||
"🇭🇷": ["hr", "croatia", "flag", "nation", "country", "banner"],
|
||||
"🇨🇺": ["cu", "cuba", "flag", "nation", "country", "banner"],
|
||||
"🇨🇼": ["cw", "curacao", "curaçao", "flag", "nation", "country", "banner"],
|
||||
"🇨🇾": ["cy", "cyprus", "flag", "nation", "country", "banner"],
|
||||
"🇨🇿": ["cz", "czech", "republic", "flag", "nation", "country", "banner"],
|
||||
"🇩🇰": ["dk", "denmark", "flag", "nation", "country", "banner"],
|
||||
"🇩🇯": ["dj", "djibouti", "flag", "nation", "country", "banner"],
|
||||
"🇩🇲": ["dm", "dominica", "flag", "nation", "country", "banner"],
|
||||
"🇩🇴": ["do", "dominican", "republic", "flag", "nation", "country", "banner"],
|
||||
"🇪🇨": ["ec", "ecuador", "flag", "nation", "country", "banner"],
|
||||
"🇪🇬": ["eg", "egypt", "flag", "nation", "country", "banner"],
|
||||
"🇸🇻": ["sv", "el", "salvador", "flag", "nation", "country", "banner"],
|
||||
"🇬🇶": ["gq", "equatorial", "guinea", "flag", "nation", "country", "banner"],
|
||||
"🇪🇷": ["er", "eritrea", "flag", "nation", "country", "banner"],
|
||||
"🇪🇪": ["ee", "estonia", "flag", "nation", "country", "banner"],
|
||||
"🇪🇹": ["et", "ethiopia", "flag", "nation", "country", "banner"],
|
||||
"🇪🇺": ["eu", "european", "union", "flag", "banner"],
|
||||
"🇫🇰": ["fk", "falkland", "islands", "malvinas", "flag", "nation", "country", "banner"],
|
||||
"🇫🇴": ["fo", "faroe", "islands", "flag", "nation", "country", "banner"],
|
||||
"🇫🇯": ["fj", "fiji", "flag", "nation", "country", "banner"],
|
||||
"🇫🇮": ["fi", "finland", "flag", "nation", "country", "banner"],
|
||||
"🇫🇷": ["fr", "banner", "flag", "nation", "france", "french", "country"],
|
||||
"🇬🇫": ["gf", "french", "guiana", "flag", "nation", "country", "banner"],
|
||||
"🇵🇫": ["pf", "french", "polynesia", "flag", "nation", "country", "banner"],
|
||||
"🇹🇫": ["tf", "french", "southern", "territories", "flag", "nation", "country", "banner"],
|
||||
"🇬🇦": ["ga", "gabon", "flag", "nation", "country", "banner"],
|
||||
"🇬🇲": ["gm", "gambia", "flag", "nation", "country", "banner"],
|
||||
"🇬🇪": ["ge", "georgia", "flag", "nation", "country", "banner"],
|
||||
"🇩🇪": ["de", "deutschland", "german", "nation", "flag", "country", "banner"],
|
||||
"🇬🇭": ["gh", "ghana", "flag", "nation", "country", "banner"],
|
||||
"🇬🇮": ["gi", "gibraltar", "flag", "nation", "country", "banner"],
|
||||
"🇬🇷": ["gr", "greece", "flag", "nation", "country", "banner"],
|
||||
"🇬🇱": ["gl", "green", "land", "flag", "nation", "country", "banner"],
|
||||
"🇬🇩": ["gd", "grenada", "flag", "nation", "country", "banner"],
|
||||
"🇬🇵": ["gp", "guadeloupe", "flag", "nation", "country", "banner"],
|
||||
"🇬🇺": ["gu", "guam", "flag", "nation", "country", "banner"],
|
||||
"🇬🇹": ["gt", "guatemala", "flag", "nation", "country", "banner"],
|
||||
"🇬🇬": ["gg", "guernsey", "flag", "nation", "country", "banner"],
|
||||
"🇬🇳": ["gn", "guinea", "flag", "nation", "country", "banner"],
|
||||
"🇬🇼": ["gw", "guiana", "bissau", "flag", "nation", "country", "banner"],
|
||||
"🇬🇾": ["gy", "guyana", "flag", "nation", "country", "banner"],
|
||||
"🇭🇹": ["ht", "haiti", "flag", "nation", "country", "banner"],
|
||||
"🇭🇳": ["hn", "honduras", "flag", "nation", "country", "banner"],
|
||||
"🇭🇰": ["hk", "hong", "kong", "flag", "nation", "country", "banner"],
|
||||
"🇭🇺": ["hu", "hungary", "flag", "nation", "country", "banner"],
|
||||
"🇮🇸": ["is", "iceland", "Ísland", "flag", "nation", "country", "banner"],
|
||||
"🇮🇳": ["in", "india", "flag", "nation", "country", "banner"],
|
||||
"🇮🇩": ["id", "indonesia", "flag", "nation", "country", "banner"],
|
||||
"🇮🇷": ["ir", "iran", "islamic", "republic", "flag", "nation", "country", "banner"],
|
||||
"🇮🇶": ["iq", "iraq", "flag", "nation", "country", "banner"],
|
||||
"🇮🇪": ["ie", "ireland", "flag", "nation", "country", "banner"],
|
||||
"🇮🇲": ["im", "isle", "man", "flag", "nation", "country", "banner"],
|
||||
"🇮🇱": ["il", "israel", "flag", "nation", "country", "banner"],
|
||||
"🇮🇹": ["it", "italy", "flag", "nation", "country", "banner"],
|
||||
"🇨🇮": ["ci", "cote", "divoire", "Côte", "d'Ivoire", "ivory", "coast", "flag", "nation", "country", "banner"],
|
||||
"🇯🇲": ["jm", "jamaica", "flag", "nation", "country", "banner"],
|
||||
"🇯🇵": ["jp", "japan", "japanese", "nation", "flag", "country", "banner"],
|
||||
"🇯🇪": ["je", "jersey", "flag", "nation", "country", "banner"],
|
||||
"🇯🇴": ["jo", "jordan", "flag", "nation", "country", "banner"],
|
||||
"🇰🇿": ["kz", "kazakhstan", "flag", "nation", "country", "banner"],
|
||||
"🇰🇪": ["ke", "kenya", "flag", "nation", "country", "banner"],
|
||||
"🇰🇮": ["ki", "kiribati", "flag", "nation", "country", "banner"],
|
||||
"🇽🇰": ["xk", "kosovo", "flag", "nation", "country", "banner"],
|
||||
"🇰🇼": ["kw", "kuwait", "flag", "nation", "country", "banner"],
|
||||
"🇰🇬": ["kg", "kyrgyzstan", "kyrgyz", "flag", "nation", "country", "banner"],
|
||||
"🇱🇦": ["la", "laos", "lao", "democratic", "republic", "flag", "nation", "country", "banner"],
|
||||
"🇱🇻": ["lv", "latvia", "flag", "nation", "country", "banner"],
|
||||
"🇱🇧": ["lb", "lebanon", "flag", "nation", "country", "banner"],
|
||||
"🇱🇸": ["ls", "lesotho", "flag", "nation", "country", "banner"],
|
||||
"🇱🇷": ["lr", "liberia", "flag", "nation", "country", "banner"],
|
||||
"🇱🇾": ["ly", "libya", "flag", "nation", "country", "banner"],
|
||||
"🇱🇮": ["li", "liechtenstein", "flag", "nation", "country", "banner"],
|
||||
"🇱🇹": ["lt", "lithuania", "flag", "nation", "country", "banner"],
|
||||
"🇱🇺": ["lu", "luxembourg", "flag", "nation", "country", "banner"],
|
||||
"🇲🇴": ["mo", "macao", "macau", "flag", "nation", "country", "banner"],
|
||||
"🇲🇰": ["mk", "north", "macedonia", "flag", "nation", "country", "banner"],
|
||||
"🇲🇬": ["mg", "madagascar", "flag", "nation", "country", "banner"],
|
||||
"🇲🇼": ["mw", "malawi", "flag", "nation", "country", "banner"],
|
||||
"🇲🇾": ["my", "malaysia", "flag", "nation", "country", "banner"],
|
||||
"🇲🇻": ["mv", "maldives", "republic", "flag", "nation", "country", "banner"],
|
||||
"🇲🇱": ["ml", "mali", "flag", "nation", "country", "banner"],
|
||||
"🇲🇹": ["mt", "malta", "flag", "nation", "country", "banner"],
|
||||
"🇲🇭": ["mh", "marshall", "islands", "flag", "nation", "country", "banner"],
|
||||
"🇲🇶": ["mq", "martinique", "flag", "nation", "country", "banner"],
|
||||
"🇲🇷": ["mr", "mauritania", "flag", "nation", "country", "banner"],
|
||||
"🇲🇺": ["mu", "mauritius", "flag", "nation", "country", "banner"],
|
||||
"🇾🇹": ["yt", "mayotte", "flag", "nation", "country", "banner"],
|
||||
"🇲🇽": ["mx", "mexico", "flag", "nation", "country", "banner"],
|
||||
"🇫🇲": ["fm", "micronesia", "federated", "states", "flag", "nation", "country", "banner"],
|
||||
"🇲🇩": ["md", "moldova", "republic", "flag", "nation", "country", "banner"],
|
||||
"🇲🇨": ["mc", "monaco", "flag", "nation", "country", "banner"],
|
||||
"🇲🇳": ["mn", "mongolia", "flag", "nation", "country", "banner"],
|
||||
"🇲🇪": ["me", "montenegro", "flag", "nation", "country", "banner"],
|
||||
"🇲🇸": ["ms", "montserrat", "flag", "nation", "country", "banner"],
|
||||
"🇲🇦": ["ma", "morocco", "flag", "nation", "country", "banner"],
|
||||
"🇲🇿": ["mz", "mozambique", "flag", "nation", "country", "banner"],
|
||||
"🇲🇲": ["mm", "myanmar", "flag", "nation", "country", "banner"],
|
||||
"🇳🇦": ["na", "namibia", "flag", "nation", "country", "banner"],
|
||||
"🇳🇷": ["nr", "nauru", "flag", "nation", "country", "banner"],
|
||||
"🇳🇵": ["np", "nepal", "flag", "nation", "country", "banner"],
|
||||
"🇳🇱": ["nl", "netherlands", "flag", "nation", "country", "banner"],
|
||||
"🇳🇨": ["nc", "new", "caledonia", "flag", "nation", "country", "banner"],
|
||||
"🇳🇿": ["nz", "new", "zealand", "flag", "nation", "country", "banner"],
|
||||
"🇳🇮": ["ni", "nicaragua", "flag", "nation", "country", "banner"],
|
||||
"🇳🇪": ["ne", "niger", "flag", "nation", "country", "banner"],
|
||||
"🇳🇬": ["ng", "nigeria", "flag", "nation", "country", "banner"],
|
||||
"🇳🇺": ["nu", "niue", "flag", "nation", "country", "banner"],
|
||||
"🇳🇫": ["nf", "norfolk", "island", "flag", "nation", "country", "banner"],
|
||||
"🇲🇵": ["mp", "northern", "mariana", "islands", "flag", "nation", "country", "banner"],
|
||||
"🇰🇵": ["kp", "democratic", "people", "republic", "north", "korea", "nation", "flag", "country", "banner"],
|
||||
"🇳🇴": ["no", "norway", "flag", "nation", "country", "banner"],
|
||||
"🇴🇲": ["om", "oman", "flag", "nation", "country", "banner"],
|
||||
"🇵🇰": ["pk", "pakistan", "flag", "nation", "country", "banner"],
|
||||
"🇵🇼": ["pw", "palau", "flag", "nation", "country", "banner"],
|
||||
"🇵🇸": ["ps", "palestine", "palestinian", "territories", "flag", "nation", "country", "banner"],
|
||||
"🇵🇦": ["pa", "panama", "flag", "nation", "country", "banner"],
|
||||
"🇵🇬": ["pg", "papua", "new", "guinea", "flag", "nation", "country", "banner"],
|
||||
"🇵🇾": ["py", "paraguay", "flag", "nation", "country", "banner"],
|
||||
"🇵🇪": ["pe", "peru", "flag", "nation", "country", "banner"],
|
||||
"🇵🇭": ["ph", "philippines", "flag", "nation", "country", "banner"],
|
||||
"🇵🇳": ["pn", "pitcairn", "flag", "nation", "country", "banner"],
|
||||
"🇵🇱": ["pl", "poland", "flag", "nation", "country", "banner"],
|
||||
"🇵🇹": ["pt", "portugal", "flag", "nation", "country", "banner"],
|
||||
"🇵🇷": ["pr", "puerto", "rico", "flag", "nation", "country", "banner"],
|
||||
"🇶🇦": ["qa", "qatar", "flag", "nation", "country", "banner"],
|
||||
"🇷🇪": ["re", "reunion", "réunion", "flag", "nation", "country", "banner"],
|
||||
"🇷🇴": ["ro", "romania", "flag", "nation", "country", "banner"],
|
||||
"🇷🇺": ["ru", "russian", "federation", "flag", "nation", "country", "banner"],
|
||||
"🇷🇼": ["rw", "rwanda", "flag", "nation", "country", "banner"],
|
||||
"🇧🇱": ["bl", "saint", "barthélemy", "flag", "nation", "country", "banner"],
|
||||
"🇸🇭": ["sh", "saint", "helena", "ascension", "tristan", "cunha", "flag", "nation", "country", "banner"],
|
||||
"🇰🇳": ["kn", "saint", "kitts", "nevis", "flag", "nation", "country", "banner"],
|
||||
"🇱🇨": ["lc", "saint", "lucia", "flag", "nation", "country", "banner"],
|
||||
"🇵🇲": ["pm", "saint", "pierre", "miquelon", "flag", "nation", "country", "banner"],
|
||||
"🇻🇨": ["vc", "saint", "vincent", "grenadines", "flag", "nation", "country", "banner"],
|
||||
"🇼🇸": ["ws", "western", "samoa", "flag", "nation", "country", "banner"],
|
||||
"🇸🇲": ["sm", "san", "marino", "flag", "nation", "country", "banner"],
|
||||
"🇸🇹": ["st", "sao", "tome", "principe", "flag", "nation", "country", "banner"],
|
||||
"🇸🇦": ["saudi", "arabia", "flag", "nation", "country", "banner"],
|
||||
"🇸🇳": ["sn", "senegal", "flag", "nation", "country", "banner"],
|
||||
"🇷🇸": ["rs", "serbia", "flag", "nation", "country", "banner"],
|
||||
"🇸🇨": ["sc", "seychelles", "flag", "nation", "country", "banner"],
|
||||
"🇸🇱": ["sl", "sierra", "leone", "flag", "nation", "country", "banner"],
|
||||
"🇸🇬": ["sg", "singapore", "flag", "nation", "country", "banner"],
|
||||
"🇸🇽": ["sx", "sint", "maarten", "dutch", "flag", "nation", "country", "banner"],
|
||||
"🇸🇰": ["sk", "slovakia", "flag", "nation", "country", "banner"],
|
||||
"🇸🇮": ["si", "slovenia", "flag", "nation", "country", "banner"],
|
||||
"🇸🇧": ["sb", "solomon", "islands", "flag", "nation", "country", "banner"],
|
||||
"🇸🇴": ["so", "somalia", "flag", "nation", "country", "banner"],
|
||||
"🇿🇦": ["za", "south", "africa", "flag", "nation", "country", "banner"],
|
||||
"🇬🇸": ["gs", "south", "georgia", "sandwich", "islands", "flag", "nation", "country", "banner"],
|
||||
"🇰🇷": ["kr", "south", "korea", "nation", "flag", "country", "banner"],
|
||||
"🇸🇸": ["ss", "south", "sudan", "flag", "nation", "country", "banner"],
|
||||
"🇪🇸": ["es", "spain", "españa", "flag", "nation", "country", "banner"],
|
||||
"🇱🇰": ["lk", "sri", "lanka", "flag", "nation", "country", "banner"],
|
||||
"🇸🇩": ["sd", "sudan", "flag", "nation", "country", "banner"],
|
||||
"🇸🇷": ["sr", "suriname", "flag", "nation", "country", "banner"],
|
||||
"🇸🇿": ["sz", "eswatini", "flag", "nation", "country", "banner"],
|
||||
"🇸🇪": ["se", "sweden", "flag", "nation", "country", "banner"],
|
||||
"🇨🇭": ["ch", "switzerland", "confoederatio", "helvetica", "flag", "nation", "country", "banner"],
|
||||
"🇸🇾": ["sy", "syrian", "arab", "republic", "flag", "nation", "country", "banner"],
|
||||
"🇹🇼": ["tw", "taiwan", "flag", "nation", "country", "banner"],
|
||||
"🇹🇯": ["tj", "tajikistan", "flag", "nation", "country", "banner"],
|
||||
"🇹🇿": ["tz", "tanzania", "united", "republic", "flag", "nation", "country", "banner"],
|
||||
"🇹🇭": ["th", "thailand", "flag", "nation", "country", "banner"],
|
||||
"🇹🇱": ["tl", "timor", "leste", "flag", "nation", "country", "banner"],
|
||||
"🇹🇬": ["tg", "togo", "flag", "nation", "country", "banner"],
|
||||
"🇹🇰": ["tk", "tokelau", "flag", "nation", "country", "banner"],
|
||||
"🇹🇴": ["to", "tonga", "flag", "nation", "country", "banner"],
|
||||
"🇹🇹": ["tt", "trinidad", "tobago", "flag", "nation", "country", "banner"],
|
||||
"🇹🇦": ["ta", "tristan", "da", "cunha", "flag", "nation", "country", "banner"],
|
||||
"🇹🇳": ["tn", "tunisia", "flag", "nation", "country", "banner"],
|
||||
"🇹🇷": ["tr", "turkey", "türkiye", "flag", "nation", "country", "banner"],
|
||||
"🇹🇲": ["tm", "turkmenistan", "flag", "nation", "country", "banner"],
|
||||
"🇹🇨": ["tc", "turks", "caicos", "islands", "flag", "nation", "country", "banner"],
|
||||
"🇹🇻": ["tv", "tuvalu", "flag", "nation", "country", "banner"],
|
||||
"🇺🇬": ["ug", "uganda", "flag", "nation", "country", "banner"],
|
||||
"🇺🇦": ["ua", "ukraine", "flag", "nation", "country", "banner"],
|
||||
"🇦🇪": ["ae", "united", "arab", "emirates", "flag", "nation", "country", "banner"],
|
||||
"🇬🇧": ["gb", "united", "kingdom", "great", "britain", "northern", "ireland", "flag", "nation", "country", "banner", "british", "uk", "english", "england", "union jack"],
|
||||
"🏴": ["flag", "english"],
|
||||
"🏴": ["flag", "scottish"],
|
||||
"🏴": ["flag", "welsh"],
|
||||
"🇺🇸": ["united", "states", "america", "flag", "nation", "country", "banner"],
|
||||
"🇻🇮": ["virgin", "islands", "us", "flag", "nation", "country", "banner"],
|
||||
"🇺🇾": ["uy", "flag", "nation", "country", "banner"],
|
||||
"🇺🇿": ["uz", "flag", "nation", "country", "banner"],
|
||||
"🇻🇺": ["vu", "flag", "nation", "country", "banner"],
|
||||
"🇻🇦": ["vatican", "city", "flag", "nation", "country", "banner"],
|
||||
"🇻🇪": ["ve", "bolivarian", "republic", "flag", "nation", "country", "banner"],
|
||||
"🇻🇳": ["viet", "nam", "flag", "nation", "country", "banner"],
|
||||
"🇼🇫": ["wallis", "futuna", "flag", "nation", "country", "banner"],
|
||||
"🇪🇭": ["western", "sahara", "flag", "nation", "country", "banner"],
|
||||
"🇾🇪": ["ye", "flag", "nation", "country", "banner"],
|
||||
"🇿🇲": ["zm", "flag", "nation", "country", "banner"],
|
||||
"🇿🇼": ["zw", "flag", "nation", "country", "banner"],
|
||||
"🇺🇳": ["un", "flag", "banner"],
|
||||
"🇺🇸": ["us", "usa", "united", "states", "america", "flag", "nation", "country", "banner"],
|
||||
"🇻🇮": ["vi", "virgin", "islands", "us", "flag", "nation", "country", "banner"],
|
||||
"🇺🇾": ["uy", "uruguay", "flag", "nation", "country", "banner"],
|
||||
"🇺🇿": ["uz", "uzbekistan", "flag", "nation", "country", "banner"],
|
||||
"🇻🇺": ["vu", "vanuatu", "flag", "nation", "country", "banner"],
|
||||
"🇻🇦": ["va", "vatican", "city", "flag", "nation", "country", "banner"],
|
||||
"🇻🇪": ["ve", "venezuela", "flag", "nation", "country", "banner"],
|
||||
"🇻🇳": ["vn", "viet", "nam", "flag", "nation", "country", "banner"],
|
||||
"🇼🇫": ["wf", "wallis", "futuna", "flag", "nation", "country", "banner"],
|
||||
"🇪🇭": ["eh", "western", "sahara", "flag", "nation", "country", "banner"],
|
||||
"🇾🇪": ["ye", "yemen", "flag", "nation", "country", "banner"],
|
||||
"🇿🇲": ["zm", "zambia", "flag", "nation", "country", "banner"],
|
||||
"🇿🇼": ["zw", "zimbabwe", "flag", "nation", "country", "banner"],
|
||||
"🇺🇳": ["un", "united", "nation", "flag", "banner"],
|
||||
"🏴☠️": ["skull", "crossbones", "flag", "banner"]
|
||||
}
|
||||
|
@@ -21,7 +21,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { ref } from 'vue';
|
||||
import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||
import { useWidgetPropsManager, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||
import XCalendar from './WidgetActivity.calendar.vue';
|
||||
import XChart from './WidgetActivity.chart.vue';
|
||||
import { GetFormResultType } from '@/scripts/form.js';
|
||||
|
@@ -11,7 +11,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { onMounted, onUnmounted, shallowRef } from 'vue';
|
||||
import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||
import { useWidgetPropsManager, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||
import { GetFormResultType } from '@/scripts/form.js';
|
||||
|
||||
const name = 'ai';
|
||||
|
@@ -21,7 +21,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
<script lang="ts" setup>
|
||||
import { ref } from 'vue';
|
||||
import { Interpreter, Parser, utils } from '@syuilo/aiscript';
|
||||
import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||
import { useWidgetPropsManager, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||
import { GetFormResultType } from '@/scripts/form.js';
|
||||
import * as os from '@/os.js';
|
||||
import MkContainer from '@/components/MkContainer.vue';
|
||||
|
@@ -15,7 +15,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
<script lang="ts" setup>
|
||||
import { onMounted, Ref, ref, watch } from 'vue';
|
||||
import { Interpreter, Parser } from '@syuilo/aiscript';
|
||||
import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||
import { useWidgetPropsManager, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||
import { GetFormResultType } from '@/scripts/form.js';
|
||||
import * as os from '@/os.js';
|
||||
import { createAiScriptEnv } from '@/scripts/aiscript/api.js';
|
||||
|
@@ -13,7 +13,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { Interpreter, Parser } from '@syuilo/aiscript';
|
||||
import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||
import { useWidgetPropsManager, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||
import { GetFormResultType } from '@/scripts/form.js';
|
||||
import * as os from '@/os.js';
|
||||
import { createAiScriptEnv } from '@/scripts/aiscript/api.js';
|
||||
|
@@ -39,7 +39,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { ref } from 'vue';
|
||||
import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||
import { useWidgetPropsManager, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||
import { GetFormResultType } from '@/scripts/form.js';
|
||||
import { i18n } from '@/i18n.js';
|
||||
import { useInterval } from '@/scripts/use-interval.js';
|
||||
|
@@ -12,7 +12,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||
import { useWidgetPropsManager, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||
import { GetFormResultType } from '@/scripts/form.js';
|
||||
import MkContainer from '@/components/MkContainer.vue';
|
||||
import MkClickerGame from '@/components/MkClickerGame.vue';
|
||||
|
@@ -30,7 +30,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { computed } from 'vue';
|
||||
import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||
import { useWidgetPropsManager, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||
import { GetFormResultType } from '@/scripts/form.js';
|
||||
import MkContainer from '@/components/MkContainer.vue';
|
||||
import MkAnalogClock from '@/components/MkAnalogClock.vue';
|
||||
|
@@ -15,7 +15,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { computed } from 'vue';
|
||||
import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||
import { useWidgetPropsManager, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||
import { GetFormResultType } from '@/scripts/form.js';
|
||||
import { timezones } from '@/scripts/timezones.js';
|
||||
import MkDigitalClock from '@/components/MkDigitalClock.vue';
|
||||
|
@@ -26,7 +26,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { ref } from 'vue';
|
||||
import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||
import { useWidgetPropsManager, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||
import { GetFormResultType } from '@/scripts/form.js';
|
||||
import MkContainer from '@/components/MkContainer.vue';
|
||||
import MkMiniChart from '@/components/MkMiniChart.vue';
|
||||
|
@@ -19,7 +19,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { shallowRef } from 'vue';
|
||||
import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||
import { useWidgetPropsManager, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||
import { GetFormResultType } from '@/scripts/form.js';
|
||||
import MkContainer from '@/components/MkContainer.vue';
|
||||
import MkTagCloud from '@/components/MkTagCloud.vue';
|
||||
|
@@ -20,7 +20,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||
import { useWidgetPropsManager, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||
import { GetFormResultType } from '@/scripts/form.js';
|
||||
import { host } from '@/config.js';
|
||||
import { instance } from '@/instance.js';
|
||||
|
@@ -52,7 +52,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { onUnmounted, reactive, ref } from 'vue';
|
||||
import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||
import { useWidgetPropsManager, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||
import { GetFormResultType } from '@/scripts/form.js';
|
||||
import { useStream } from '@/stream.js';
|
||||
import number from '@/filters/number.js';
|
||||
|
@@ -17,7 +17,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { ref, watch } from 'vue';
|
||||
import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||
import { useWidgetPropsManager, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||
import { GetFormResultType } from '@/scripts/form.js';
|
||||
import MkContainer from '@/components/MkContainer.vue';
|
||||
import { defaultStore } from '@/store.js';
|
||||
|
@@ -17,7 +17,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { defineAsyncComponent } from 'vue';
|
||||
import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||
import { useWidgetPropsManager, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||
import { GetFormResultType } from '@/scripts/form.js';
|
||||
import MkContainer from '@/components/MkContainer.vue';
|
||||
import XNotifications from '@/components/MkNotifications.vue';
|
||||
|
@@ -15,7 +15,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { ref } from 'vue';
|
||||
import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||
import { useWidgetPropsManager, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||
import { GetFormResultType } from '@/scripts/form.js';
|
||||
import * as os from '@/os.js';
|
||||
import { useInterval } from '@/scripts/use-interval.js';
|
||||
|
@@ -23,7 +23,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { onUnmounted, ref } from 'vue';
|
||||
import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||
import { useWidgetPropsManager, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||
import { GetFormResultType } from '@/scripts/form.js';
|
||||
import { useStream } from '@/stream.js';
|
||||
import { getStaticImageUrl } from '@/scripts/media-proxy.js';
|
||||
|
@@ -9,7 +9,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { } from 'vue';
|
||||
import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||
import { useWidgetPropsManager, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||
import { GetFormResultType } from '@/scripts/form.js';
|
||||
import MkPostForm from '@/components/MkPostForm.vue';
|
||||
|
||||
|
@@ -22,7 +22,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||
import { useWidgetPropsManager, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||
import { GetFormResultType } from '@/scripts/form.js';
|
||||
import { $i } from '@/account.js';
|
||||
import { userPage } from '@/filters/user.js';
|
||||
|
@@ -24,7 +24,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { ref, watch, computed } from 'vue';
|
||||
import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||
import { useWidgetPropsManager, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||
import { GetFormResultType } from '@/scripts/form.js';
|
||||
import MkContainer from '@/components/MkContainer.vue';
|
||||
import { url as base } from '@/config.js';
|
||||
|
@@ -28,7 +28,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { ref, watch, computed } from 'vue';
|
||||
import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||
import { useWidgetPropsManager, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||
import MarqueeText from '@/components/MkMarquee.vue';
|
||||
import { GetFormResultType } from '@/scripts/form.js';
|
||||
import MkContainer from '@/components/MkContainer.vue';
|
||||
|
@@ -18,7 +18,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { onMounted, ref, shallowRef } from 'vue';
|
||||
import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||
import { useWidgetPropsManager, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||
import { GetFormResultType } from '@/scripts/form.js';
|
||||
import * as os from '@/os.js';
|
||||
import { useInterval } from '@/scripts/use-interval.js';
|
||||
|
@@ -35,7 +35,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { ref } from 'vue';
|
||||
import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||
import { useWidgetPropsManager, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||
import { GetFormResultType } from '@/scripts/form.js';
|
||||
import * as os from '@/os.js';
|
||||
import MkContainer from '@/components/MkContainer.vue';
|
||||
|
@@ -25,7 +25,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { ref } from 'vue';
|
||||
import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||
import { useWidgetPropsManager, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js';
|
||||
import { GetFormResultType } from '@/scripts/form.js';
|
||||
import MkContainer from '@/components/MkContainer.vue';
|
||||
import MkMiniChart from '@/components/MkMiniChart.vue';
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user