mirror of
				https://codeberg.org/yeentown/barkey.git
				synced 2025-11-03 23:14:13 +00:00 
			
		
		
		
	merge: develop
This commit is contained in:
		
						commit
						db29a5c2da
					
				
					 134 changed files with 282 additions and 282 deletions
				
			
		| 
						 | 
				
			
			@ -15,7 +15,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
	<MkNoteSub v-if="appearNote.reply && !renoteCollapsed" :note="appearNote.reply" :class="$style.replyTo"/>
 | 
			
		||||
	<div v-if="pinned" :class="$style.tip"><i class="ph-push-pin ph-bold ph-lg"></i> {{ i18n.ts.pinnedNote }}</div>
 | 
			
		||||
	<!--<div v-if="appearNote._prId_" class="tip"><i class="ph-megaphone ph-bold ph-lg"></i> {{ i18n.ts.promotion }}<button class="_textButton hide" @click="readPromo()">{{ i18n.ts.hideThisNote }} <i class="ph-x ph-bold ph-lg"></i></button></div>-->
 | 
			
		||||
	<!--<div v-if="appearNote._featuredId_" class="tip"><i class="ph-lightning ph-bold pg-lg"></i> {{ i18n.ts.featured }}</div>-->
 | 
			
		||||
	<!--<div v-if="appearNote._featuredId_" class="tip"><i class="ph-lightning ph-bold ph-lg"></i> {{ i18n.ts.featured }}</div>-->
 | 
			
		||||
	<div v-if="isRenote" :class="$style.renote">
 | 
			
		||||
		<div v-if="note.channel" :class="$style.colorBar" :style="{ background: note.channel.color }"></div>
 | 
			
		||||
		<MkAvatar :class="$style.renoteAvatar" :user="note.user" link preview/>
 | 
			
		||||
| 
						 | 
				
			
			@ -37,7 +37,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
				<i v-else-if="note.visibility === 'followers'" class="ph-lock ph-bold ph-lg"></i>
 | 
			
		||||
				<i v-else-if="note.visibility === 'specified'" ref="specified" class="ph-envelope ph-bold ph-lg"></i>
 | 
			
		||||
			</span>
 | 
			
		||||
			<span v-if="note.localOnly" style="margin-left: 0.5em;" :title="i18n.ts._visibility['disableFederation']"><i class="ph-rocket ph-bold pg-lg"></i></span>
 | 
			
		||||
			<span v-if="note.localOnly" style="margin-left: 0.5em;" :title="i18n.ts._visibility['disableFederation']"><i class="ph-rocket ph-bold ph-lg"></i></span>
 | 
			
		||||
			<span v-if="note.channel" style="margin-left: 0.5em;" :title="note.channel.name"><i class="ph-television ph-bold ph-lg"></i></span>
 | 
			
		||||
			<span v-if="note.updatedAt" ref="menuVersionsButton" style="margin-left: 0.5em;" title="Edited" @mousedown="menuVersions()"><i class="ph-pencil ph-bold ph-lg"></i></span>
 | 
			
		||||
		</div>
 | 
			
		||||
| 
						 | 
				
			
			@ -60,7 +60,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
				<div v-show="appearNote.cw == null || showContent" :class="[{ [$style.contentCollapsed]: collapsed }]" >
 | 
			
		||||
					<div :class="$style.text">
 | 
			
		||||
						<span v-if="appearNote.isHidden" style="opacity: 0.5">({{ i18n.ts.private }})</span>
 | 
			
		||||
						<MkA v-if="appearNote.replyId" :class="$style.replyIcon" :to="`/notes/${appearNote.replyId}`"><i class="ph-arrow-bend-left-up ph-bold pg-lg"></i></MkA>
 | 
			
		||||
						<MkA v-if="appearNote.replyId" :class="$style.replyIcon" :to="`/notes/${appearNote.replyId}`"><i class="ph-arrow-bend-left-up ph-bold ph-lg"></i></MkA>
 | 
			
		||||
						<Mfm
 | 
			
		||||
							v-if="appearNote.text"
 | 
			
		||||
							:parsedNodes="parsed"
 | 
			
		||||
| 
						 | 
				
			
			@ -101,7 +101,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
			</MkReactionsViewer>
 | 
			
		||||
			<footer :class="$style.footer">
 | 
			
		||||
				<button :class="$style.footerButton" class="_button" v-on:click.stop @click="reply()">
 | 
			
		||||
					<i class="ph-arrow-u-up-left ph-bold pg-lg"></i>
 | 
			
		||||
					<i class="ph-arrow-u-up-left ph-bold ph-lg"></i>
 | 
			
		||||
					<p v-if="appearNote.repliesCount > 0" :class="$style.footerButtonCount">{{ appearNote.repliesCount }}</p>
 | 
			
		||||
				</button>
 | 
			
		||||
				<button
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -40,7 +40,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
				<i v-else-if="note.visibility === 'followers'" class="ph-lock ph-bold ph-lg"></i>
 | 
			
		||||
				<i v-else-if="note.visibility === 'specified'" ref="specified" class="ph-envelope ph-bold ph-lg"></i>
 | 
			
		||||
			</span>
 | 
			
		||||
			<span v-if="note.localOnly" style="margin-left: 0.5em;" :title="i18n.ts._visibility['disableFederation']"><i class="ph-rocket ph-bold pg-lg"></i></span>
 | 
			
		||||
			<span v-if="note.localOnly" style="margin-left: 0.5em;" :title="i18n.ts._visibility['disableFederation']"><i class="ph-rocket ph-bold ph-lg"></i></span>
 | 
			
		||||
		</div>
 | 
			
		||||
	</div>
 | 
			
		||||
	<article :class="$style.note" @contextmenu.stop="onContextmenu">
 | 
			
		||||
| 
						 | 
				
			
			@ -59,7 +59,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
							<i v-else-if="appearNote.visibility === 'specified'" ref="specified" class="ph-envelope ph-bold ph-lg"></i>
 | 
			
		||||
						</span>
 | 
			
		||||
						<span v-if="appearNote.updatedAt" ref="menuVersionsButton" style="margin-left: 0.5em;" title="Edited" @mousedown="menuVersions()"><i class="ph-pencil ph-bold ph-lg"></i></span>
 | 
			
		||||
						<span v-if="appearNote.localOnly" style="margin-left: 0.5em;" :title="i18n.ts._visibility['disableFederation']"><i class="ph-rocket ph-bold pg-lg"></i></span>
 | 
			
		||||
						<span v-if="appearNote.localOnly" style="margin-left: 0.5em;" :title="i18n.ts._visibility['disableFederation']"><i class="ph-rocket ph-bold ph-lg"></i></span>
 | 
			
		||||
					</div>
 | 
			
		||||
				</div>
 | 
			
		||||
				<div :class="$style.noteHeaderUsername"><MkAcct :user="appearNote.user"/></div>
 | 
			
		||||
| 
						 | 
				
			
			@ -73,7 +73,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
			</p>
 | 
			
		||||
			<div v-show="appearNote.cw == null || showContent">
 | 
			
		||||
				<span v-if="appearNote.isHidden" style="opacity: 0.5">({{ i18n.ts.private }})</span>
 | 
			
		||||
				<MkA v-if="appearNote.replyId" :class="$style.noteReplyTarget" :to="`/notes/${appearNote.replyId}`"><i class="ph-arrow-bend-left-up ph-bold pg-lg"></i></MkA>
 | 
			
		||||
				<MkA v-if="appearNote.replyId" :class="$style.noteReplyTarget" :to="`/notes/${appearNote.replyId}`"><i class="ph-arrow-bend-left-up ph-bold ph-lg"></i></MkA>
 | 
			
		||||
				<Mfm
 | 
			
		||||
					v-if="appearNote.text"
 | 
			
		||||
					:parsedNodes="parsed"
 | 
			
		||||
| 
						 | 
				
			
			@ -112,7 +112,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
			</div>
 | 
			
		||||
			<MkReactionsViewer ref="reactionsViewer" :note="appearNote"/>
 | 
			
		||||
			<button class="_button" :class="$style.noteFooterButton" @click="reply()">
 | 
			
		||||
				<i class="ph-arrow-u-up-left ph-bold pg-lg"></i>
 | 
			
		||||
				<i class="ph-arrow-u-up-left ph-bold ph-lg"></i>
 | 
			
		||||
				<p v-if="appearNote.repliesCount > 0" :class="$style.noteFooterButtonCount">{{ appearNote.repliesCount }}</p>
 | 
			
		||||
			</button>
 | 
			
		||||
			<button
 | 
			
		||||
| 
						 | 
				
			
			@ -158,10 +158,10 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
		</footer>
 | 
			
		||||
	</article>
 | 
			
		||||
	<div :class="$style.tabs">
 | 
			
		||||
		<button class="_button" :class="[$style.tab, { [$style.tabActive]: tab === 'replies' }]" @click="tab = 'replies'"><i class="ph-arrow-u-up-left ph-bold pg-lg"></i> {{ i18n.ts.replies }}</button>
 | 
			
		||||
		<button class="_button" :class="[$style.tab, { [$style.tabActive]: tab === 'replies' }]" @click="tab = 'replies'"><i class="ph-arrow-u-up-left ph-bold ph-lg"></i> {{ i18n.ts.replies }}</button>
 | 
			
		||||
		<button class="_button" :class="[$style.tab, { [$style.tabActive]: tab === 'renotes' }]" @click="tab = 'renotes'"><i class="ph-rocket-launch ph-bold ph-lg"></i> {{ i18n.ts.renotes }}</button>
 | 
			
		||||
		<button class="_button" :class="[$style.tab, { [$style.tabActive]: tab === 'quotes' }]" @click="tab = 'quotes'"><i class="ph-quotes ph-bold ph-lg"></i> {{ i18n.ts._notification._types.quote }}</button>
 | 
			
		||||
		<button class="_button" :class="[$style.tab, { [$style.tabActive]: tab === 'reactions' }]" @click="tab = 'reactions'"><i class="ph-smiley ph-bold pg-lg"></i> {{ i18n.ts.reactions }}</button>
 | 
			
		||||
		<button class="_button" :class="[$style.tab, { [$style.tabActive]: tab === 'reactions' }]" @click="tab = 'reactions'"><i class="ph-smiley ph-bold ph-lg"></i> {{ i18n.ts.reactions }}</button>
 | 
			
		||||
	</div>
 | 
			
		||||
	<div>
 | 
			
		||||
		<div v-if="tab === 'replies'" :class="$style.tab_replies">
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -29,7 +29,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
			<i v-else-if="note.visibility === 'specified'" ref="specified" class="ph-envelope ph-bold ph-lg"></i>
 | 
			
		||||
		</span>
 | 
			
		||||
		<span v-if="note.updatedAt" ref="menuVersionsButton" style="margin-left: 0.5em;" title="Edited" @mousedown="menuVersions()"><i class="ph-pencil ph-bold ph-lg"></i></span>
 | 
			
		||||
		<span v-if="note.localOnly" style="margin-left: 0.5em;" :title="i18n.ts._visibility['disableFederation']"><i class="ph-rocket ph-bold pg-lg"></i></span>
 | 
			
		||||
		<span v-if="note.localOnly" style="margin-left: 0.5em;" :title="i18n.ts._visibility['disableFederation']"><i class="ph-rocket ph-bold ph-lg"></i></span>
 | 
			
		||||
		<span v-if="note.channel" style="margin-left: 0.5em;" :title="note.channel.name"><i class="ph-television ph-bold ph-lg"></i></span>
 | 
			
		||||
	</div>
 | 
			
		||||
</header>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -22,7 +22,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
			<footer :class="$style.footer">
 | 
			
		||||
				<MkReactionsViewer ref="reactionsViewer" :note="note"/>
 | 
			
		||||
				<button class="_button" :class="$style.noteFooterButton" @click="reply()">
 | 
			
		||||
					<i class="ph-arrow-u-up-left ph-bold pg-lg"></i>
 | 
			
		||||
					<i class="ph-arrow-u-up-left ph-bold ph-lg"></i>
 | 
			
		||||
					<p v-if="note.repliesCount > 0" :class="$style.noteFooterButtonCount">{{ note.repliesCount }}</p>
 | 
			
		||||
				</button>
 | 
			
		||||
				<button
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -31,10 +31,10 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
			<i v-else-if="notification.type === 'receiveFollowRequest'" class="ph-clock ph-bold ph-lg"></i>
 | 
			
		||||
			<i v-else-if="notification.type === 'followRequestAccepted'" class="ph-check ph-bold ph-lg"></i>
 | 
			
		||||
			<i v-else-if="notification.type === 'renote'" class="ph-rocket-launch ph-bold ph-lg"></i>
 | 
			
		||||
			<i v-else-if="notification.type === 'reply'" class="ph-arrow-u-up-left ph-bold pg-lg"></i>
 | 
			
		||||
			<i v-else-if="notification.type === 'reply'" class="ph-arrow-u-up-left ph-bold ph-lg"></i>
 | 
			
		||||
			<i v-else-if="notification.type === 'mention'" class="ph-at ph-bold ph-lg"></i>
 | 
			
		||||
			<i v-else-if="notification.type === 'quote'" class="ph-quotes ph-bold ph-lg"></i>
 | 
			
		||||
			<i v-else-if="notification.type === 'pollEnded'" class="ph-chart-bar-horizontal ph-bold pg-lg"></i>
 | 
			
		||||
			<i v-else-if="notification.type === 'pollEnded'" class="ph-chart-bar-horizontal ph-bold ph-lg"></i>
 | 
			
		||||
			<i v-else-if="notification.type === 'achievementEarned'" class="ph-trophy ph-bold ph-lg"></i>
 | 
			
		||||
			<!-- notification.reaction が null になることはまずないが、ここでoptional chaining使うと一部ブラウザで刺さるので念の為 -->
 | 
			
		||||
			<MkReactionIcon
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -66,7 +66,7 @@ const buttonsLeft = $computed(() => {
 | 
			
		|||
 | 
			
		||||
	if (history.length > 1) {
 | 
			
		||||
		buttons.push({
 | 
			
		||||
			icon: 'ph-arrow-left ph-bold pg-lg',
 | 
			
		||||
			icon: 'ph-arrow-left ph-bold ph-lg',
 | 
			
		||||
			onClick: back,
 | 
			
		||||
		});
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -79,7 +79,7 @@ const buttonsRight = $computed(() => {
 | 
			
		|||
		title: i18n.ts.reload,
 | 
			
		||||
		onClick: reload,
 | 
			
		||||
	}, {
 | 
			
		||||
		icon: 'ph-eject ph-bold pg-lg',
 | 
			
		||||
		icon: 'ph-eject ph-bold ph-lg',
 | 
			
		||||
		title: i18n.ts.showInPage,
 | 
			
		||||
		onClick: expand,
 | 
			
		||||
	}];
 | 
			
		||||
| 
						 | 
				
			
			@ -101,7 +101,7 @@ provide('shouldHeaderThin', true);
 | 
			
		|||
provide('forceSpacerMin', true);
 | 
			
		||||
 | 
			
		||||
const contextmenu = $computed(() => ([{
 | 
			
		||||
	icon: 'ph-eject ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-eject ph-bold ph-lg',
 | 
			
		||||
	text: i18n.ts.showInPage,
 | 
			
		||||
	action: expand,
 | 
			
		||||
}, {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -26,7 +26,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
 | 
			
		||||
			<MkInput v-if="$i.twoFactorEnabled" v-model="token" type="text" pattern="^([0-9]{6}|[A-Z0-9]{32})$" autocomplete="one-time-code" :spellcheck="false">
 | 
			
		||||
				<template #label>{{ i18n.ts.token }} ({{ i18n.ts['2fa'] }})</template>
 | 
			
		||||
				<template #prefix><i class="ph-keyhole ph-bold pg-lg"></i></template>
 | 
			
		||||
				<template #prefix><i class="ph-keyhole ph-bold ph-lg"></i></template>
 | 
			
		||||
			</MkInput>
 | 
			
		||||
 | 
			
		||||
			<MkButton :disabled="(password ?? '') == '' || ($i.twoFactorEnabled && (token ?? '') == '')" primary rounded style="margin: 0 auto;" @click="done"><i class="ph-lock ph-bold ph-lg-open"></i> {{ i18n.ts.continue }}</MkButton>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -33,20 +33,20 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
				</button>
 | 
			
		||||
			</template>
 | 
			
		||||
			<button v-click-anime v-tooltip="i18n.ts._visibility.disableFederation" class="_button" :class="[$style.headerRightItem, { [$style.danger]: localOnly }]" :disabled="channel != null || visibility === 'specified'" @click="toggleLocalOnly">
 | 
			
		||||
				<span v-if="!localOnly"><i class="ph-rocket-launch ph-bold pg-lg"></i></span>
 | 
			
		||||
				<span v-else><i class="ph-rocket ph-bold pg-lg"></i></span>
 | 
			
		||||
				<span v-if="!localOnly"><i class="ph-rocket-launch ph-bold ph-lg"></i></span>
 | 
			
		||||
				<span v-else><i class="ph-rocket ph-bold ph-lg"></i></span>
 | 
			
		||||
			</button>
 | 
			
		||||
			<button v-click-anime v-tooltip="i18n.ts.reactionAcceptance" class="_button" :class="[$style.headerRightItem, { [$style.danger]: reactionAcceptance === 'likeOnly' }]" @click="toggleReactionAcceptance">
 | 
			
		||||
				<span v-if="reactionAcceptance === 'likeOnly'"><i class="ph-heart ph-bold ph-lg"></i></span>
 | 
			
		||||
				<span v-else-if="reactionAcceptance === 'likeOnlyForRemote'"><i class="ph-heart ph-bold ph-lg"></i></span>
 | 
			
		||||
				<span v-else><i class="ph-smiley ph-bold pg-lg"></i></span>
 | 
			
		||||
				<span v-else><i class="ph-smiley ph-bold ph-lg"></i></span>
 | 
			
		||||
			</button>
 | 
			
		||||
			<button v-click-anime class="_button" :class="$style.submit" :disabled="!canPost" data-cy-open-post-form-submit @click="post">
 | 
			
		||||
				<div :class="$style.submitInner">
 | 
			
		||||
					<template v-if="posted"></template>
 | 
			
		||||
					<template v-else-if="posting"><MkEllipsis/></template>
 | 
			
		||||
					<template v-else>{{ submitText }}</template>
 | 
			
		||||
					<i style="margin-left: 6px;" :class="posted ? 'ph-check ph-bold ph-lg' : reply ? 'ph-arrow-u-up-left ph-bold pg-lg' : renote ? 'ph-quotes ph-bold ph-lg' : 'ph-paper-plane-tilt ph-bold ph-lg'"></i>
 | 
			
		||||
					<i style="margin-left: 6px;" :class="posted ? 'ph-check ph-bold ph-lg' : reply ? 'ph-arrow-u-up-left ph-bold ph-lg' : renote ? 'ph-quotes ph-bold ph-lg' : 'ph-paper-plane-tilt ph-bold ph-lg'"></i>
 | 
			
		||||
				</div>
 | 
			
		||||
			</button>
 | 
			
		||||
		</div>
 | 
			
		||||
| 
						 | 
				
			
			@ -79,7 +79,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
	<footer :class="$style.footer">
 | 
			
		||||
		<div :class="$style.footerLeft">
 | 
			
		||||
			<button v-tooltip="i18n.ts.attachFile" class="_button" :class="$style.footerButton" @click="chooseFileFrom"><i class="ph-image-square ph-bold ph-lg-plus"></i></button>
 | 
			
		||||
			<button v-tooltip="i18n.ts.poll" class="_button" :class="[$style.footerButton, { [$style.footerButtonActive]: poll }]" @click="togglePoll"><i class="ph-chart-bar-horizontal ph-bold pg-lg"></i></button>
 | 
			
		||||
			<button v-tooltip="i18n.ts.poll" class="_button" :class="[$style.footerButton, { [$style.footerButtonActive]: poll }]" @click="togglePoll"><i class="ph-chart-bar-horizontal ph-bold ph-lg"></i></button>
 | 
			
		||||
			<button v-tooltip="i18n.ts.useCw" class="_button" :class="[$style.footerButton, { [$style.footerButtonActive]: useCw }]" @click="useCw = !useCw"><i class="ph-eye-slash ph-bold ph-lg"></i></button>
 | 
			
		||||
			<button v-tooltip="i18n.ts.mention" class="_button" :class="$style.footerButton" @click="insertMention"><i class="ph-at ph-bold ph-lg"></i></button>
 | 
			
		||||
			<button v-tooltip="i18n.ts.hashtags" class="_button" :class="[$style.footerButton, { [$style.footerButtonActive]: withHashtags }]" @click="withHashtags = !withHashtags"><i class="ph-hash ph-bold ph-lg"></i></button>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,7 +8,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
	<div v-if="isPullStart" :class="$style.frame" :style="`--frame-min-height: ${pullDistance / (PULL_BRAKE_BASE + (pullDistance / PULL_BRAKE_FACTOR))}px;`">
 | 
			
		||||
		<div :class="$style.frameContent">
 | 
			
		||||
			<MkLoading v-if="isRefreshing" :class="$style.loader" :em="true"/>
 | 
			
		||||
			<i v-else class="ph-arrow-line-down ph-bold pg-lg" :class="[$style.icon, { [$style.refresh]: isPullEnd }]"></i>
 | 
			
		||||
			<i v-else class="ph-arrow-line-down ph-bold ph-lg" :class="[$style.icon, { [$style.refresh]: isPullEnd }]"></i>
 | 
			
		||||
			<div :class="$style.text">
 | 
			
		||||
				<template v-if="isPullEnd">{{ i18n.ts.releaseToRefresh }}</template>
 | 
			
		||||
				<template v-else-if="isRefreshing">{{ i18n.ts.refreshing }}</template>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -27,7 +27,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
	</div>
 | 
			
		||||
	<div :class="$style.caption"><slot name="caption"></slot></div>
 | 
			
		||||
 | 
			
		||||
	<MkButton v-if="manualSave && changed" primary @click="updated"><i class="ph-floppy-disk ph-bold pg-lg"></i> {{ i18n.ts.save }}</MkButton>
 | 
			
		||||
	<MkButton v-if="manualSave && changed" primary @click="updated"><i class="ph-floppy-disk ph-bold ph-lg"></i> {{ i18n.ts.save }}</MkButton>
 | 
			
		||||
</div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -39,7 +39,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
				</MkInput>
 | 
			
		||||
				<MkInput v-model="token" type="text" pattern="^([0-9]{6}|[A-Z0-9]{32})$" autocomplete="one-time-code" :spellcheck="false" required>
 | 
			
		||||
					<template #label>{{ i18n.ts.token }}</template>
 | 
			
		||||
					<template #prefix><i class="ph-keyhole ph-bold pg-lg"></i></template>
 | 
			
		||||
					<template #prefix><i class="ph-keyhole ph-bold ph-lg"></i></template>
 | 
			
		||||
				</MkInput>
 | 
			
		||||
				<MkButton type="submit" :disabled="signing" large primary rounded style="margin: 0 auto;">{{ signing ? i18n.ts.loggingIn : i18n.ts.login }}</MkButton>
 | 
			
		||||
			</div>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -32,7 +32,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
 | 
			
		||||
			<MkFolder v-if="availableTos || availablePrivacyPolicy" :defaultOpen="true">
 | 
			
		||||
				<template #label>{{ tosPrivacyPolicyLabel }}</template>
 | 
			
		||||
				<template #suffix><i v-if="agreeTosAndPrivacyPolicy" class="ph-check ph-bold pg-lg" style="color: var(--success)"></i></template>
 | 
			
		||||
				<template #suffix><i v-if="agreeTosAndPrivacyPolicy" class="ph-check ph-bold ph-lg" style="color: var(--success)"></i></template>
 | 
			
		||||
				<div class="_gaps_s">
 | 
			
		||||
					<div v-if="availableTos"><a :href="instance.tosUrl" class="_link" target="_blank">{{ i18n.ts.termsOfService }} <i class="ph-arrow-square-out ph-bold ph-lg"></i></a></div>
 | 
			
		||||
					<div v-if="availablePrivacyPolicy"><a :href="instance.privacyPolicyUrl" class="_link" target="_blank">{{ i18n.ts.privacyPolicy }} <i class="ph-arrow-square-out ph-bold ph-lg"></i></a></div>
 | 
			
		||||
| 
						 | 
				
			
			@ -54,7 +54,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
 | 
			
		||||
			<div class="_buttonsCenter">
 | 
			
		||||
				<MkButton inline rounded @click="emit('cancel')">{{ i18n.ts.cancel }}</MkButton>
 | 
			
		||||
				<MkButton inline primary rounded gradate :disabled="!agreed" data-cy-signup-rules-continue @click="emit('done')">{{ i18n.ts.continue }} <i class="ph-arrow-right ph-bold pg-lg"></i></MkButton>
 | 
			
		||||
				<MkButton inline primary rounded gradate :disabled="!agreed" data-cy-signup-rules-continue @click="emit('done')">{{ i18n.ts.continue }} <i class="ph-arrow-right ph-bold ph-lg"></i></MkButton>
 | 
			
		||||
			</div>
 | 
			
		||||
		</div>
 | 
			
		||||
	</MkSpacer>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,7 +8,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
	<div :class="{ [$style.clickToOpen]: defaultStore.state.clickToOpen }" @click="defaultStore.state.clickToOpen ? noteclick(note.id) : undefined">
 | 
			
		||||
		<span v-if="note.isHidden" style="opacity: 0.5">({{ i18n.ts.private }})</span>
 | 
			
		||||
		<span v-if="note.deletedAt" style="opacity: 0.5">({{ i18n.ts.deleted }})</span>
 | 
			
		||||
		<MkA v-if="note.replyId" :class="$style.reply" :to="`/notes/${note.replyId}`" v-on:click.stop><i class="ph-arrow-bend-left-up ph-bold pg-lg"></i></MkA>
 | 
			
		||||
		<MkA v-if="note.replyId" :class="$style.reply" :to="`/notes/${note.replyId}`" v-on:click.stop><i class="ph-arrow-bend-left-up ph-bold ph-lg"></i></MkA>
 | 
			
		||||
		<Mfm v-if="note.text" :text="note.text" :author="note.user" :nyaize="'account'" :emojiUrls="note.emojis"/>
 | 
			
		||||
		<div v-if="note.text && translating || note.text && translation" :class="$style.translation">
 | 
			
		||||
			<MkLoading v-if="translating" mini/>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -27,7 +27,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
	</div>
 | 
			
		||||
	<div :class="$style.caption"><slot name="caption"></slot></div>
 | 
			
		||||
 | 
			
		||||
	<MkButton v-if="manualSave && changed" primary :class="$style.save" @click="updated"><i class="ph-floppy-disk ph-bold pg-lg"></i> {{ i18n.ts.save }}</MkButton>
 | 
			
		||||
	<MkButton v-if="manualSave && changed" primary :class="$style.save" @click="updated"><i class="ph-floppy-disk ph-bold ph-lg"></i> {{ i18n.ts.save }}</MkButton>
 | 
			
		||||
</div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -72,7 +72,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
		</div>
 | 
			
		||||
		<div v-if="!playerEnabled && player.url" :class="$style.action">
 | 
			
		||||
			<MkButton :small="true" inline @click="playerEnabled = true">
 | 
			
		||||
				<i class="ph-play ph-bold pg-lg"></i> {{ i18n.ts.enablePlayer }}
 | 
			
		||||
				<i class="ph-play ph-bold ph-lg"></i> {{ i18n.ts.enablePlayer }}
 | 
			
		||||
			</MkButton>
 | 
			
		||||
			<MkButton v-if="!isMobile" :small="true" inline @click="openPlayer()">
 | 
			
		||||
				<i class="ph-picture-in-picture ph-bold ph-lg"></i> {{ i18n.ts.openInWindow }}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,7 +15,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
	<template v-if="page === 1" #header><i class="ph-user-list ph-bold ph-lg"></i> {{ i18n.ts._initialAccountSetting.profileSetting }}</template>
 | 
			
		||||
	<template v-else-if="page === 2" #header><i class="ph-lock ph-bold ph-lg"></i> {{ i18n.ts._initialAccountSetting.privacySetting }}</template>
 | 
			
		||||
	<template v-else-if="page === 3" #header><i class="ph-user-plus ph-bold ph-lg"></i> {{ i18n.ts.follow }}</template>
 | 
			
		||||
	<template v-else-if="page === 4" #header><i class="ph-bell-ringing ph-bold pg-lg"></i> {{ i18n.ts.pushNotification }}</template>
 | 
			
		||||
	<template v-else-if="page === 4" #header><i class="ph-bell-ringing ph-bold ph-lg"></i> {{ i18n.ts.pushNotification }}</template>
 | 
			
		||||
	<template v-else-if="page === 5" #header>{{ i18n.ts.done }}</template>
 | 
			
		||||
	<template v-else #header>{{ i18n.ts.initialAccountSetting }}</template>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -38,7 +38,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
							<i class="ph-confetti ph-bold ph-lg" style="display: block; margin: auto; font-size: 3em; color: var(--accent);"></i>
 | 
			
		||||
							<div style="font-size: 120%;">{{ i18n.ts._initialAccountSetting.accountCreated }}</div>
 | 
			
		||||
							<div>{{ i18n.ts._initialAccountSetting.letsStartAccountSetup }}</div>
 | 
			
		||||
							<MkButton primary rounded gradate style="margin: 16px auto 0 auto;" data-cy-user-setup-continue @click="page++">{{ i18n.ts._initialAccountSetting.profileSetting }} <i class="ph-arrow-right ph-bold pg-lg"></i></MkButton>
 | 
			
		||||
							<MkButton primary rounded gradate style="margin: 16px auto 0 auto;" data-cy-user-setup-continue @click="page++">{{ i18n.ts._initialAccountSetting.profileSetting }} <i class="ph-arrow-right ph-bold ph-lg"></i></MkButton>
 | 
			
		||||
							<MkButton style="margin: 0 auto;" transparent rounded @click="later(true)">{{ i18n.ts.later }}</MkButton>
 | 
			
		||||
						</div>
 | 
			
		||||
					</MkSpacer>
 | 
			
		||||
| 
						 | 
				
			
			@ -52,8 +52,8 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
						</MkSpacer>
 | 
			
		||||
						<div :class="$style.pageFooter">
 | 
			
		||||
							<div class="_buttonsCenter">
 | 
			
		||||
								<MkButton rounded data-cy-user-setup-back @click="page--"><i class="ph-arrow-left ph-bold pg-lg"></i> {{ i18n.ts.goBack }}</MkButton>
 | 
			
		||||
								<MkButton primary rounded gradate data-cy-user-setup-continue @click="page++">{{ i18n.ts.continue }} <i class="ph-arrow-right ph-bold pg-lg"></i></MkButton>
 | 
			
		||||
								<MkButton rounded data-cy-user-setup-back @click="page--"><i class="ph-arrow-left ph-bold ph-lg"></i> {{ i18n.ts.goBack }}</MkButton>
 | 
			
		||||
								<MkButton primary rounded gradate data-cy-user-setup-continue @click="page++">{{ i18n.ts.continue }} <i class="ph-arrow-right ph-bold ph-lg"></i></MkButton>
 | 
			
		||||
							</div>
 | 
			
		||||
						</div>
 | 
			
		||||
					</div>
 | 
			
		||||
| 
						 | 
				
			
			@ -67,8 +67,8 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
						</MkSpacer>
 | 
			
		||||
						<div :class="$style.pageFooter">
 | 
			
		||||
							<div class="_buttonsCenter">
 | 
			
		||||
								<MkButton rounded data-cy-user-setup-back @click="page--"><i class="ph-arrow-left ph-bold pg-lg"></i> {{ i18n.ts.goBack }}</MkButton>
 | 
			
		||||
								<MkButton primary rounded gradate data-cy-user-setup-continue @click="page++">{{ i18n.ts.continue }} <i class="ph-arrow-right ph-bold pg-lg"></i></MkButton>
 | 
			
		||||
								<MkButton rounded data-cy-user-setup-back @click="page--"><i class="ph-arrow-left ph-bold ph-lg"></i> {{ i18n.ts.goBack }}</MkButton>
 | 
			
		||||
								<MkButton primary rounded gradate data-cy-user-setup-continue @click="page++">{{ i18n.ts.continue }} <i class="ph-arrow-right ph-bold ph-lg"></i></MkButton>
 | 
			
		||||
							</div>
 | 
			
		||||
						</div>
 | 
			
		||||
					</div>
 | 
			
		||||
| 
						 | 
				
			
			@ -81,8 +81,8 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
					</MkSpacer>
 | 
			
		||||
					<div :class="$style.pageFooter">
 | 
			
		||||
						<div class="_buttonsCenter">
 | 
			
		||||
							<MkButton rounded data-cy-user-setup-back @click="page--"><i class="ph-arrow-left ph-bold pg-lg"></i> {{ i18n.ts.goBack }}</MkButton>
 | 
			
		||||
							<MkButton primary rounded gradate style="" data-cy-user-setup-continue @click="page++">{{ i18n.ts.continue }} <i class="ph-arrow-right ph-bold pg-lg"></i></MkButton>
 | 
			
		||||
							<MkButton rounded data-cy-user-setup-back @click="page--"><i class="ph-arrow-left ph-bold ph-lg"></i> {{ i18n.ts.goBack }}</MkButton>
 | 
			
		||||
							<MkButton primary rounded gradate style="" data-cy-user-setup-continue @click="page++">{{ i18n.ts.continue }} <i class="ph-arrow-right ph-bold ph-lg"></i></MkButton>
 | 
			
		||||
						</div>
 | 
			
		||||
					</div>
 | 
			
		||||
				</div>
 | 
			
		||||
| 
						 | 
				
			
			@ -91,13 +91,13 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
				<div :class="$style.centerPage">
 | 
			
		||||
					<MkSpacer :marginMin="20" :marginMax="28">
 | 
			
		||||
						<div class="_gaps" style="text-align: center;">
 | 
			
		||||
							<i class="ph-bell-ringing ph-bold pg-lg" style="display: block; margin: auto; font-size: 3em; color: var(--accent);"></i>
 | 
			
		||||
							<i class="ph-bell-ringing ph-bold ph-lg" style="display: block; margin: auto; font-size: 3em; color: var(--accent);"></i>
 | 
			
		||||
							<div style="font-size: 120%;">{{ i18n.ts.pushNotification }}</div>
 | 
			
		||||
							<div style="padding: 0 16px;">{{ i18n.t('_initialAccountSetting.pushNotificationDescription', { name: instance.name ?? host }) }}</div>
 | 
			
		||||
							<MkPushNotificationAllowButton primary showOnlyToRegister style="margin: 0 auto;"/>
 | 
			
		||||
							<div class="_buttonsCenter" style="margin-top: 16px;">
 | 
			
		||||
								<MkButton rounded data-cy-user-setup-back @click="page--"><i class="ph-arrow-left ph-bold pg-lg"></i> {{ i18n.ts.goBack }}</MkButton>
 | 
			
		||||
								<MkButton primary rounded gradate data-cy-user-setup-continue @click="page++">{{ i18n.ts.continue }} <i class="ph-arrow-right ph-bold pg-lg"></i></MkButton>
 | 
			
		||||
								<MkButton rounded data-cy-user-setup-back @click="page--"><i class="ph-arrow-left ph-bold ph-lg"></i> {{ i18n.ts.goBack }}</MkButton>
 | 
			
		||||
								<MkButton primary rounded gradate data-cy-user-setup-continue @click="page++">{{ i18n.ts.continue }} <i class="ph-arrow-right ph-bold ph-lg"></i></MkButton>
 | 
			
		||||
							</div>
 | 
			
		||||
						</div>
 | 
			
		||||
					</MkSpacer>
 | 
			
		||||
| 
						 | 
				
			
			@ -112,10 +112,10 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
							<div style="font-size: 120%;">{{ i18n.ts._initialAccountSetting.initialAccountSettingCompleted }}</div>
 | 
			
		||||
							<div>{{ i18n.t('_initialAccountSetting.youCanContinueTutorial', { name: instance.name ?? host }) }}</div>
 | 
			
		||||
							<div class="_buttonsCenter" style="margin-top: 16px;">
 | 
			
		||||
								<MkButton rounded primary gradate data-cy-user-setup-continue @click="launchTutorial()">{{ i18n.ts._initialAccountSetting.startTutorial }} <i class="ph-arrow-right ph-bold pg-lg"></i></MkButton>
 | 
			
		||||
								<MkButton rounded primary gradate data-cy-user-setup-continue @click="launchTutorial()">{{ i18n.ts._initialAccountSetting.startTutorial }} <i class="ph-arrow-right ph-bold ph-lg"></i></MkButton>
 | 
			
		||||
							</div>
 | 
			
		||||
							<div class="_buttonsCenter">
 | 
			
		||||
								<MkButton rounded data-cy-user-setup-back @click="page--"><i class="ph-arrow-left ph-bold pg-lg"></i> {{ i18n.ts.goBack }}</MkButton>
 | 
			
		||||
								<MkButton rounded data-cy-user-setup-back @click="page--"><i class="ph-arrow-left ph-bold ph-lg"></i> {{ i18n.ts.goBack }}</MkButton>
 | 
			
		||||
								<MkButton rounded primary data-cy-user-setup-continue @click="setupComplete()">{{ i18n.ts.close }}</MkButton>
 | 
			
		||||
							</div>
 | 
			
		||||
						</div>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -109,19 +109,19 @@ function showMenu(ev) {
 | 
			
		|||
		},
 | 
			
		||||
	}, null, (instance.impressumUrl) ? {
 | 
			
		||||
		text: i18n.ts.impressum,
 | 
			
		||||
		icon: 'ph-newspaper-clipping ph-bold pg-lg',
 | 
			
		||||
		icon: 'ph-newspaper-clipping ph-bold ph-lg',
 | 
			
		||||
		action: () => {
 | 
			
		||||
			window.open(instance.impressumUrl, '_blank');
 | 
			
		||||
		},
 | 
			
		||||
	} : undefined, (instance.tosUrl) ? {
 | 
			
		||||
		text: i18n.ts.termsOfService,
 | 
			
		||||
		icon: 'ph-notebook ph-bold pg-lg',
 | 
			
		||||
		icon: 'ph-notebook ph-bold ph-lg',
 | 
			
		||||
		action: () => {
 | 
			
		||||
			window.open(instance.tosUrl, '_blank');
 | 
			
		||||
		},
 | 
			
		||||
	} : undefined, (instance.privacyPolicyUrl) ? {
 | 
			
		||||
		text: i18n.ts.privacyPolicy,
 | 
			
		||||
		icon: 'ph-shield ph-bold pg-lg',
 | 
			
		||||
		icon: 'ph-shield ph-bold ph-lg',
 | 
			
		||||
		action: () => {
 | 
			
		||||
			window.open(instance.privacyPolicyUrl, '_blank');
 | 
			
		||||
		},
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -25,7 +25,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
		>
 | 
			
		||||
			<template #item="{element}">
 | 
			
		||||
				<div :class="[$style.widget, $style.customizeContainer]" data-cy-customize-container>
 | 
			
		||||
					<button :class="$style.customizeContainerConfig" class="_button" @click.prevent.stop="configWidget(element.id)"><i class="ph-gear ph-bold pg-lg"></i></button>
 | 
			
		||||
					<button :class="$style.customizeContainerConfig" class="_button" @click.prevent.stop="configWidget(element.id)"><i class="ph-gear ph-bold ph-lg"></i></button>
 | 
			
		||||
					<button :class="$style.customizeContainerRemove" data-cy-customize-container-remove class="_button" @click.prevent.stop="removeWidget(element)"><i class="ph-x ph-bold ph-lg"></i></button>
 | 
			
		||||
					<div class="handle">
 | 
			
		||||
						<component :is="`widget-${element.name}`" :ref="el => widgetRefs[element.id] = el" class="widget" :class="$style.customizeContainerHandleWidget" :widget="element" @updateProps="updateWidget(element.id, $event)"/>
 | 
			
		||||
| 
						 | 
				
			
			@ -111,7 +111,7 @@ function onContextmenu(widget: Widget, ev: MouseEvent) {
 | 
			
		|||
		type: 'label',
 | 
			
		||||
		text: i18n.t(`_widgets.${widget.name}`),
 | 
			
		||||
	}, {
 | 
			
		||||
		icon: 'ph-gear ph-bold pg-lg',
 | 
			
		||||
		icon: 'ph-gear ph-bold ph-lg',
 | 
			
		||||
		text: i18n.ts.settings,
 | 
			
		||||
		action: () => {
 | 
			
		||||
			configWidget(widget.id);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -20,7 +20,7 @@
 | 
			
		|||
								<i v-else-if="appearNote.visibility === 'followers'" class="ph-lock ph-bold ph-lg"></i>
 | 
			
		||||
								<i v-else-if="appearNote.visibility === 'specified'" ref="specified" class="ph-envelope ph-bold ph-lg"></i>
 | 
			
		||||
							</span>
 | 
			
		||||
							<span v-if="appearNote.localOnly" style="margin-left: 0.5em;" :title="i18n.ts._visibility['disableFederation']"><i class="ph-rocket ph-bold pg-lg"></i></span>
 | 
			
		||||
							<span v-if="appearNote.localOnly" style="margin-left: 0.5em;" :title="i18n.ts._visibility['disableFederation']"><i class="ph-rocket ph-bold ph-lg"></i></span>
 | 
			
		||||
						</div>
 | 
			
		||||
					</div>
 | 
			
		||||
					<div :class="$style.noteHeaderUsername"><MkAcct :user="appearNote.user"/></div>
 | 
			
		||||
| 
						 | 
				
			
			@ -34,7 +34,7 @@
 | 
			
		|||
				</p>
 | 
			
		||||
				<div v-show="appearNote.cw == null || showContent">
 | 
			
		||||
					<span v-if="appearNote.isHidden" style="opacity: 0.5">({{ i18n.ts.private }})</span>
 | 
			
		||||
					<MkA v-if="appearNote.replyId" :class="$style.noteReplyTarget" :to="`/notes/${appearNote.replyId}`"><i class="ph-arrow-bend-left-up ph-bold pg-lg"></i></MkA>
 | 
			
		||||
					<MkA v-if="appearNote.replyId" :class="$style.noteReplyTarget" :to="`/notes/${appearNote.replyId}`"><i class="ph-arrow-bend-left-up ph-bold ph-lg"></i></MkA>
 | 
			
		||||
					<Mfm v-if="appearNote.text" :text="appearNote.text" :author="appearNote.user" :nyaize="'account'" :emojiUrls="appearNote.emojis"/>
 | 
			
		||||
					<a v-if="appearNote.renote != null" :class="$style.rn">RN:</a>
 | 
			
		||||
					<div v-if="translating || translation" :class="$style.translation">
 | 
			
		||||
| 
						 | 
				
			
			@ -58,7 +58,7 @@
 | 
			
		|||
					<MkTime :time="appearNote.createdAt" mode="detail"/>
 | 
			
		||||
				</div>
 | 
			
		||||
				<button class="_button" :class="$style.noteFooterButton">
 | 
			
		||||
					<i class="ph-arrow-u-up-left ph-bold pg-lg"></i>
 | 
			
		||||
					<i class="ph-arrow-u-up-left ph-bold ph-lg"></i>
 | 
			
		||||
				</button>
 | 
			
		||||
				<button class="_button" :class="$style.noteFooterButton">
 | 
			
		||||
					<i class="ph-rocket-launch ph-bold ph-lg"></i>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -51,7 +51,7 @@ function onContextmenu(ev) {
 | 
			
		|||
			os.pageWindow(props.to);
 | 
			
		||||
		},
 | 
			
		||||
	}, {
 | 
			
		||||
		icon: 'ph-eject ph-bold pg-lg',
 | 
			
		||||
		icon: 'ph-eject ph-bold ph-lg',
 | 
			
		||||
		text: i18n.ts.showInPage,
 | 
			
		||||
		action: () => {
 | 
			
		||||
			router.push(props.to, 'forcePage');
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -92,12 +92,12 @@ export const SomeTabs = {
 | 
			
		|||
			{
 | 
			
		||||
				key: 'fairy',
 | 
			
		||||
				title: 'Fairy',
 | 
			
		||||
				icon: 'ph-snowflake ph-bold pg-lg',
 | 
			
		||||
				icon: 'ph-snowflake ph-bold ph-lg',
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				key: 'angel',
 | 
			
		||||
				title: 'Angel',
 | 
			
		||||
				icon: 'ph-feather ph-bold pg-lg',
 | 
			
		||||
				icon: 'ph-feather ph-bold ph-lg',
 | 
			
		||||
			},
 | 
			
		||||
		],
 | 
			
		||||
	},
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -81,7 +81,7 @@ export const navbarItemDef = reactive({
 | 
			
		|||
	},
 | 
			
		||||
	favorites: {
 | 
			
		||||
		title: i18n.ts.favorites,
 | 
			
		||||
		icon: 'ph-bookmark ph-bold ph-lg',
 | 
			
		||||
		icon: 'ph-star ph-bold ph-lg',
 | 
			
		||||
		show: computed(() => $i != null),
 | 
			
		||||
		to: '/my/favorites',
 | 
			
		||||
	},
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,12 +30,12 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
				<FormSection>
 | 
			
		||||
					<div class="_gaps_s">
 | 
			
		||||
						<FormLink to="https://github.com/transfem-org/Sharkey" external>
 | 
			
		||||
							<template #icon><i class="ph-code ph-bold pg-lg"></i></template>
 | 
			
		||||
							<template #icon><i class="ph-code ph-bold ph-lg"></i></template>
 | 
			
		||||
							{{ i18n.ts._aboutMisskey.source }}
 | 
			
		||||
							<template #suffix>GitHub</template>
 | 
			
		||||
						</FormLink>
 | 
			
		||||
						<FormLink to="https://ko-fi.com/transfem" external>
 | 
			
		||||
							<template #icon><i class="ph-piggy-bank ph-bold pg-lg"></i></template>
 | 
			
		||||
							<template #icon><i class="ph-piggy-bank ph-bold ph-lg"></i></template>
 | 
			
		||||
							{{ i18n.ts._aboutMisskey.donate }}
 | 
			
		||||
							<template #suffix>Ko-Fi</template>
 | 
			
		||||
						</FormLink>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -148,7 +148,7 @@ const headerTabs = $computed(() => [{
 | 
			
		|||
}, {
 | 
			
		||||
	key: 'emojis',
 | 
			
		||||
	title: i18n.ts.customEmojis,
 | 
			
		||||
	icon: 'ph-smiley ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-smiley ph-bold ph-lg',
 | 
			
		||||
}, {
 | 
			
		||||
	key: 'federation',
 | 
			
		||||
	title: i18n.ts.federation,
 | 
			
		||||
| 
						 | 
				
			
			@ -156,7 +156,7 @@ const headerTabs = $computed(() => [{
 | 
			
		|||
}, {
 | 
			
		||||
	key: 'charts',
 | 
			
		||||
	title: i18n.ts.charts,
 | 
			
		||||
	icon: 'ph-chart-line ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-chart-line ph-bold ph-lg',
 | 
			
		||||
}]);
 | 
			
		||||
 | 
			
		||||
definePageMetadata(computed(() => ({
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -135,7 +135,7 @@ const headerTabs = $computed(() => [{
 | 
			
		|||
} : null, {
 | 
			
		||||
	key: 'raw',
 | 
			
		||||
	title: 'Raw data',
 | 
			
		||||
	icon: 'ph-code ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-code ph-bold ph-lg',
 | 
			
		||||
}]);
 | 
			
		||||
 | 
			
		||||
definePageMetadata(computed(() => ({
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -72,7 +72,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
							</MkKeyValue>
 | 
			
		||||
						</div>
 | 
			
		||||
 | 
			
		||||
						<MkButton @click="updateRemoteUser"><i class="ph-arrows-counter-clockwise ph-bold pg-lg"></i> {{ i18n.ts.updateRemoteUser }}</MkButton>
 | 
			
		||||
						<MkButton @click="updateRemoteUser"><i class="ph-arrows-counter-clockwise ph-bold ph-lg"></i> {{ i18n.ts.updateRemoteUser }}</MkButton>
 | 
			
		||||
					</div>
 | 
			
		||||
				</FormSection>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -474,7 +474,7 @@ const headerTabs = $computed(() => [{
 | 
			
		|||
}, {
 | 
			
		||||
	key: 'roles',
 | 
			
		||||
	title: i18n.ts.roles,
 | 
			
		||||
	icon: 'ph-seal-check ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-seal-check ph-bold ph-lg',
 | 
			
		||||
}, {
 | 
			
		||||
	key: 'announcements',
 | 
			
		||||
	title: i18n.ts.announcements,
 | 
			
		||||
| 
						 | 
				
			
			@ -486,11 +486,11 @@ const headerTabs = $computed(() => [{
 | 
			
		|||
}, {
 | 
			
		||||
	key: 'chart',
 | 
			
		||||
	title: i18n.ts.charts,
 | 
			
		||||
	icon: 'ph-chart-line ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-chart-line ph-bold ph-lg',
 | 
			
		||||
}, {
 | 
			
		||||
	key: 'raw',
 | 
			
		||||
	title: 'Raw',
 | 
			
		||||
	icon: 'ph-code ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-code ph-bold ph-lg',
 | 
			
		||||
}]);
 | 
			
		||||
 | 
			
		||||
definePageMetadata(computed(() => ({
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -65,7 +65,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
				<div class="buttons">
 | 
			
		||||
					<MkButton class="button" inline primary style="margin-right: 12px;" @click="save(ad)">
 | 
			
		||||
						<i
 | 
			
		||||
							class="ph-floppy-disk ph-bold pg-lg"
 | 
			
		||||
							class="ph-floppy-disk ph-bold ph-lg"
 | 
			
		||||
						></i> {{ i18n.ts.save }}
 | 
			
		||||
					</MkButton>
 | 
			
		||||
					<MkButton class="button" inline danger @click="remove(ad)">
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -53,7 +53,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
					</MkSwitch>
 | 
			
		||||
					<p v-if="announcement.reads">{{ i18n.t('nUsersRead', { n: announcement.reads }) }}</p>
 | 
			
		||||
					<div class="buttons _buttons">
 | 
			
		||||
						<MkButton class="button" inline primary @click="save(announcement)"><i class="ph-floppy-disk ph-bold pg-lg"></i> {{ i18n.ts.save }}</MkButton>
 | 
			
		||||
						<MkButton class="button" inline primary @click="save(announcement)"><i class="ph-floppy-disk ph-bold ph-lg"></i> {{ i18n.ts.save }}</MkButton>
 | 
			
		||||
						<MkButton v-if="announcement.id != null" class="button" inline @click="archive(announcement)"><i class="ph-check ph-bold ph-lg"></i> {{ i18n.ts._announcement.end }} ({{ i18n.ts.archive }})</MkButton>
 | 
			
		||||
						<MkButton v-if="announcement.id != null" class="button" inline danger @click="del(announcement)"><i class="ph-trash ph-bold ph-lg"></i> {{ i18n.ts.delete }}</MkButton>
 | 
			
		||||
					</div>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -50,7 +50,7 @@ const headerTabs = $computed(() => []);
 | 
			
		|||
 | 
			
		||||
definePageMetadata(computed(() => ({
 | 
			
		||||
	title: i18n.ts.approvals,
 | 
			
		||||
	icon: 'ph-chalkboard-teacher ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-chalkboard-teacher ph-bold ph-lg',
 | 
			
		||||
})));
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -57,7 +57,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
				</FormSlot>
 | 
			
		||||
			</template>
 | 
			
		||||
 | 
			
		||||
			<MkButton primary @click="save"><i class="ph-floppy-disk ph-bold pg-lg"></i> {{ i18n.ts.save }}</MkButton>
 | 
			
		||||
			<MkButton primary @click="save"><i class="ph-floppy-disk ph-bold ph-lg"></i> {{ i18n.ts.save }}</MkButton>
 | 
			
		||||
		</div>
 | 
			
		||||
	</FormSuspense>
 | 
			
		||||
</div>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -35,6 +35,6 @@ const headerTabs = $computed(() => []);
 | 
			
		|||
 | 
			
		||||
definePageMetadata({
 | 
			
		||||
	title: i18n.ts.database,
 | 
			
		||||
	icon: 'ph-database ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-database ph-bold ph-lg',
 | 
			
		||||
});
 | 
			
		||||
</script>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -45,7 +45,7 @@ const router = useRouter();
 | 
			
		|||
 | 
			
		||||
const indexInfo = {
 | 
			
		||||
	title: i18n.ts.controlPanel,
 | 
			
		||||
	icon: 'ph-gear ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-gear ph-bold ph-lg',
 | 
			
		||||
	hideHeader: true,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -101,12 +101,12 @@ const menuDef = $computed(() => [{
 | 
			
		|||
}, {
 | 
			
		||||
	title: i18n.ts.administration,
 | 
			
		||||
	items: [{
 | 
			
		||||
		icon: 'ph-gauge ph-bold pg-lg',
 | 
			
		||||
		icon: 'ph-gauge ph-bold ph-lg',
 | 
			
		||||
		text: i18n.ts.dashboard,
 | 
			
		||||
		to: '/admin/overview',
 | 
			
		||||
		active: currentPage?.route.name === 'overview',
 | 
			
		||||
	}, {
 | 
			
		||||
		icon: 'ph-users ph-bold pg-lg',
 | 
			
		||||
		icon: 'ph-users ph-bold ph-lg',
 | 
			
		||||
		text: i18n.ts.users,
 | 
			
		||||
		to: '/admin/users',
 | 
			
		||||
		active: currentPage?.route.name === 'users',
 | 
			
		||||
| 
						 | 
				
			
			@ -121,12 +121,12 @@ const menuDef = $computed(() => [{
 | 
			
		|||
		to: '/admin/approvals',
 | 
			
		||||
		active: currentPage?.route.name === 'approvals',
 | 
			
		||||
	}, {
 | 
			
		||||
		icon: 'ph-seal-check ph-bold pg-lg',
 | 
			
		||||
		icon: 'ph-seal-check ph-bold ph-lg',
 | 
			
		||||
		text: i18n.ts.roles,
 | 
			
		||||
		to: '/admin/roles',
 | 
			
		||||
		active: currentPage?.route.name === 'roles',
 | 
			
		||||
	}, {
 | 
			
		||||
		icon: 'ph-smiley ph-bold pg-lg',
 | 
			
		||||
		icon: 'ph-smiley ph-bold ph-lg',
 | 
			
		||||
		text: i18n.ts.customEmojis,
 | 
			
		||||
		to: '/admin/emojis',
 | 
			
		||||
		active: currentPage?.route.name === 'emojis',
 | 
			
		||||
| 
						 | 
				
			
			@ -166,7 +166,7 @@ const menuDef = $computed(() => [{
 | 
			
		|||
		to: '/admin/abuses',
 | 
			
		||||
		active: currentPage?.route.name === 'abuses',
 | 
			
		||||
	}, {
 | 
			
		||||
		icon: 'ph-list ph-bold pg-lg-search',
 | 
			
		||||
		icon: 'ph-list ph-bold ph-lg-search',
 | 
			
		||||
		text: i18n.ts.moderationLogs,
 | 
			
		||||
		to: '/admin/modlog',
 | 
			
		||||
		active: currentPage?.route.name === 'modlog',
 | 
			
		||||
| 
						 | 
				
			
			@ -174,7 +174,7 @@ const menuDef = $computed(() => [{
 | 
			
		|||
}, {
 | 
			
		||||
	title: i18n.ts.settings,
 | 
			
		||||
	items: [{
 | 
			
		||||
		icon: 'ph-gear ph-bold pg-lg',
 | 
			
		||||
		icon: 'ph-gear ph-bold ph-lg',
 | 
			
		||||
		text: i18n.ts.general,
 | 
			
		||||
		to: '/admin/settings',
 | 
			
		||||
		active: currentPage?.route.name === 'settings',
 | 
			
		||||
| 
						 | 
				
			
			@ -204,7 +204,7 @@ const menuDef = $computed(() => [{
 | 
			
		|||
		to: '/admin/security',
 | 
			
		||||
		active: currentPage?.route.name === 'security',
 | 
			
		||||
	}, {
 | 
			
		||||
		icon: 'ph-planet ph-bold pg-lg',
 | 
			
		||||
		icon: 'ph-planet ph-bold ph-lg',
 | 
			
		||||
		text: i18n.ts.relays,
 | 
			
		||||
		to: '/admin/relays',
 | 
			
		||||
		active: currentPage?.route.name === 'relays',
 | 
			
		||||
| 
						 | 
				
			
			@ -219,7 +219,7 @@ const menuDef = $computed(() => [{
 | 
			
		|||
		to: '/admin/proxy-account',
 | 
			
		||||
		active: currentPage?.route.name === 'proxy-account',
 | 
			
		||||
	}, {
 | 
			
		||||
		icon: 'ph-arrow-square-out ph-bold pg-lg',
 | 
			
		||||
		icon: 'ph-arrow-square-out ph-bold ph-lg',
 | 
			
		||||
		text: i18n.ts.externalServices,
 | 
			
		||||
		to: '/admin/external-services',
 | 
			
		||||
		active: currentPage?.route.name === 'external-services',
 | 
			
		||||
| 
						 | 
				
			
			@ -232,7 +232,7 @@ const menuDef = $computed(() => [{
 | 
			
		|||
}, {
 | 
			
		||||
	title: i18n.ts.info,
 | 
			
		||||
	items: [{
 | 
			
		||||
		icon: 'ph-database ph-bold pg-lg',
 | 
			
		||||
		icon: 'ph-database ph-bold ph-lg',
 | 
			
		||||
		text: i18n.ts.database,
 | 
			
		||||
		to: '/admin/database',
 | 
			
		||||
		active: currentPage?.route.name === 'database',
 | 
			
		||||
| 
						 | 
				
			
			@ -314,7 +314,7 @@ const lookup = (ev) => {
 | 
			
		|||
		},
 | 
			
		||||
	}, {
 | 
			
		||||
		text: i18n.ts.instance,
 | 
			
		||||
		icon: 'ph-planet ph-bold pg-lg',
 | 
			
		||||
		icon: 'ph-planet ph-bold ph-lg',
 | 
			
		||||
		action: () => {
 | 
			
		||||
			alert('TODO');
 | 
			
		||||
		},
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,7 +16,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
				<span>{{ i18n.ts.silencedInstances }}</span>
 | 
			
		||||
				<template #caption>{{ i18n.ts.silencedInstancesDescription }}</template>
 | 
			
		||||
			</MkTextarea>
 | 
			
		||||
			<MkButton primary @click="save"><i class="ph-floppy-disk ph-bold pg-lg"></i> {{ i18n.ts.save }}</MkButton>
 | 
			
		||||
			<MkButton primary @click="save"><i class="ph-floppy-disk ph-bold ph-lg"></i> {{ i18n.ts.save }}</MkButton>
 | 
			
		||||
		</FormSuspense>
 | 
			
		||||
	</MkSpacer>
 | 
			
		||||
</MkStickyContainer>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -62,6 +62,6 @@ const headerTabs = $computed(() => []);
 | 
			
		|||
 | 
			
		||||
definePageMetadata({
 | 
			
		||||
	title: i18n.ts.moderationLogs,
 | 
			
		||||
	icon: 'ph-list ph-bold pg-lg-search',
 | 
			
		||||
	icon: 'ph-list ph-bold ph-lg-search',
 | 
			
		||||
});
 | 
			
		||||
</script>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,7 +9,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
		<MkLoading v-if="fetching"/>
 | 
			
		||||
		<div v-else :class="$style.root">
 | 
			
		||||
			<div class="item _panel users">
 | 
			
		||||
				<div class="icon"><i class="ph-users ph-bold pg-lg"></i></div>
 | 
			
		||||
				<div class="icon"><i class="ph-users ph-bold ph-lg"></i></div>
 | 
			
		||||
				<div class="body">
 | 
			
		||||
					<div class="value">
 | 
			
		||||
						<MkNumber :value="stats.originalUsersCount" style="margin-right: 0.5em;"/>
 | 
			
		||||
| 
						 | 
				
			
			@ -29,7 +29,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
				</div>
 | 
			
		||||
			</div>
 | 
			
		||||
			<div class="item _panel instances">
 | 
			
		||||
				<div class="icon"><i class="ph-planet ph-bold pg-lg"></i></div>
 | 
			
		||||
				<div class="icon"><i class="ph-planet ph-bold ph-lg"></i></div>
 | 
			
		||||
				<div class="body">
 | 
			
		||||
					<div class="value">
 | 
			
		||||
						<MkNumber :value="stats.instances" style="margin-right: 0.5em;"/>
 | 
			
		||||
| 
						 | 
				
			
			@ -38,7 +38,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
				</div>
 | 
			
		||||
			</div>
 | 
			
		||||
			<div class="item _panel emojis">
 | 
			
		||||
				<div class="icon"><i class="ph-smiley ph-bold pg-lg"></i></div>
 | 
			
		||||
				<div class="icon"><i class="ph-smiley ph-bold ph-lg"></i></div>
 | 
			
		||||
				<div class="body">
 | 
			
		||||
					<div class="value">
 | 
			
		||||
						<MkNumber :value="customEmojis.length" style="margin-right: 0.5em;"/>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -177,7 +177,7 @@ const headerTabs = $computed(() => []);
 | 
			
		|||
 | 
			
		||||
definePageMetadata({
 | 
			
		||||
	title: i18n.ts.dashboard,
 | 
			
		||||
	icon: 'ph-gauge ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-gauge ph-bold ph-lg',
 | 
			
		||||
});
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -84,7 +84,7 @@ const headerTabs = $computed(() => []);
 | 
			
		|||
 | 
			
		||||
definePageMetadata({
 | 
			
		||||
	title: i18n.ts.relays,
 | 
			
		||||
	icon: 'ph-planet ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-planet ph-bold ph-lg',
 | 
			
		||||
});
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -87,10 +87,10 @@ const headerTabs = $computed(() => []);
 | 
			
		|||
 | 
			
		||||
definePageMetadata(computed(() => role ? {
 | 
			
		||||
	title: i18n.ts._role.edit + ': ' + role.name,
 | 
			
		||||
	icon: 'ph-seal-check ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-seal-check ph-bold ph-lg',
 | 
			
		||||
} : {
 | 
			
		||||
	title: i18n.ts._role.new,
 | 
			
		||||
	icon: 'ph-seal-check ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-seal-check ph-bold ph-lg',
 | 
			
		||||
}));
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -39,7 +39,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
	</MkSelect>
 | 
			
		||||
 | 
			
		||||
	<MkSelect v-model="role.target" :readonly="readonly">
 | 
			
		||||
		<template #label><i class="ph-users ph-bold pg-lg"></i> {{ i18n.ts._role.assignTarget }}</template>
 | 
			
		||||
		<template #label><i class="ph-users ph-bold ph-lg"></i> {{ i18n.ts._role.assignTarget }}</template>
 | 
			
		||||
		<template #caption><div v-html="i18n.ts._role.descriptionOfAssignTarget.replaceAll('\n', '<br>')"></div></template>
 | 
			
		||||
		<option value="manual">{{ i18n.ts._role.manual }}</option>
 | 
			
		||||
		<option value="conditional">{{ i18n.ts._role.conditional }}</option>
 | 
			
		||||
| 
						 | 
				
			
			@ -588,7 +588,7 @@ let q = $ref('');
 | 
			
		|||
function getPriorityIcon(option) {
 | 
			
		||||
	if (option.priority === 2) return 'ph-arrow-up ph-bold ph-lg';
 | 
			
		||||
	if (option.priority === 1) return 'ph-arrow-up ph-bold ph-lg';
 | 
			
		||||
	return 'ph-circle ph-bold pg-lg';
 | 
			
		||||
	return 'ph-circle ph-bold ph-lg';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function matchQuery(keywords: string[]): boolean {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -19,7 +19,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
					<XEditor :modelValue="role" readonly/>
 | 
			
		||||
				</MkFolder>
 | 
			
		||||
				<MkFolder v-if="role.target === 'manual'" defaultOpen>
 | 
			
		||||
					<template #icon><i class="ph-users ph-bold pg-lg"></i></template>
 | 
			
		||||
					<template #icon><i class="ph-users ph-bold ph-lg"></i></template>
 | 
			
		||||
					<template #label>{{ i18n.ts.users }}</template>
 | 
			
		||||
					<template #suffix>{{ role.usersCount }}</template>
 | 
			
		||||
					<div class="_gaps">
 | 
			
		||||
| 
						 | 
				
			
			@ -173,7 +173,7 @@ const headerTabs = $computed(() => []);
 | 
			
		|||
 | 
			
		||||
definePageMetadata(computed(() => ({
 | 
			
		||||
	title: i18n.ts.role + ': ' + role.name,
 | 
			
		||||
	icon: 'ph-seal-check ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-seal-check ph-bold ph-lg',
 | 
			
		||||
})));
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -264,7 +264,7 @@ const headerTabs = $computed(() => []);
 | 
			
		|||
 | 
			
		||||
definePageMetadata(computed(() => ({
 | 
			
		||||
	title: i18n.ts.roles,
 | 
			
		||||
	icon: 'ph-seal-check ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-seal-check ph-bold ph-lg',
 | 
			
		||||
})));
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -59,7 +59,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
						</MkSwitch>
 | 
			
		||||
						-->
 | 
			
		||||
 | 
			
		||||
						<MkButton primary @click="save"><i class="ph-floppy-disk ph-bold pg-lg"></i> {{ i18n.ts.save }}</MkButton>
 | 
			
		||||
						<MkButton primary @click="save"><i class="ph-floppy-disk ph-bold ph-lg"></i> {{ i18n.ts.save }}</MkButton>
 | 
			
		||||
					</div>
 | 
			
		||||
				</MkFolder>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -97,7 +97,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
							<template #label>Summaly Proxy URL</template>
 | 
			
		||||
						</MkInput>
 | 
			
		||||
 | 
			
		||||
						<MkButton primary @click="save"><i class="ph-floppy-disk ph-bold pg-lg"></i> {{ i18n.ts.save }}</MkButton>
 | 
			
		||||
						<MkButton primary @click="save"><i class="ph-floppy-disk ph-bold ph-lg"></i> {{ i18n.ts.save }}</MkButton>
 | 
			
		||||
					</div>
 | 
			
		||||
				</MkFolder>
 | 
			
		||||
			</div>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -228,7 +228,7 @@ const headerTabs = $computed(() => []);
 | 
			
		|||
 | 
			
		||||
definePageMetadata({
 | 
			
		||||
	title: i18n.ts.general,
 | 
			
		||||
	icon: 'ph-gear ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-gear ph-bold ph-lg',
 | 
			
		||||
});
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -140,7 +140,7 @@ const headerTabs = $computed(() => []);
 | 
			
		|||
 | 
			
		||||
definePageMetadata(computed(() => ({
 | 
			
		||||
	title: i18n.ts.users,
 | 
			
		||||
	icon: 'ph-users ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-users ph-bold ph-lg',
 | 
			
		||||
})));
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -95,11 +95,11 @@ const headerActions = $computed(() => []);
 | 
			
		|||
const headerTabs = $computed(() => [{
 | 
			
		||||
	key: 'current',
 | 
			
		||||
	title: i18n.ts.currentAnnouncements,
 | 
			
		||||
	icon: 'ph-fire ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-fire ph-bold ph-lg',
 | 
			
		||||
}, {
 | 
			
		||||
	key: 'past',
 | 
			
		||||
	title: i18n.ts.pastAnnouncements,
 | 
			
		||||
	icon: 'ph-circle ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-circle ph-bold ph-lg',
 | 
			
		||||
}]);
 | 
			
		||||
 | 
			
		||||
definePageMetadata({
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -82,7 +82,7 @@ const headerActions = $computed(() => antenna ? [{
 | 
			
		|||
	text: i18n.ts.jumpToSpecifiedDate,
 | 
			
		||||
	handler: timetravel,
 | 
			
		||||
}, {
 | 
			
		||||
	icon: 'ph-gear ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-gear ph-bold ph-lg',
 | 
			
		||||
	text: i18n.ts.settings,
 | 
			
		||||
	handler: settings,
 | 
			
		||||
}] : []);
 | 
			
		||||
| 
						 | 
				
			
			@ -91,7 +91,7 @@ const headerTabs = $computed(() => []);
 | 
			
		|||
 | 
			
		||||
definePageMetadata(computed(() => antenna ? {
 | 
			
		||||
	title: antenna.name,
 | 
			
		||||
	icon: 'ph-flying-saucer ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-flying-saucer ph-bold ph-lg',
 | 
			
		||||
} : null));
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -120,7 +120,7 @@ const headerTabs = $computed(() => []);
 | 
			
		|||
 | 
			
		||||
definePageMetadata({
 | 
			
		||||
	title: i18n.ts._auth.shareAccessTitle,
 | 
			
		||||
	icon: 'ph-squares-four ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-squares-four ph-bold ph-lg',
 | 
			
		||||
});
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -60,7 +60,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
			</MkFolder>
 | 
			
		||||
 | 
			
		||||
			<div class="_buttons">
 | 
			
		||||
				<MkButton primary @click="save()"><i class="ph-floppy-disk ph-bold pg-lg"></i> {{ channelId ? i18n.ts.save : i18n.ts.create }}</MkButton>
 | 
			
		||||
				<MkButton primary @click="save()"><i class="ph-floppy-disk ph-bold ph-lg"></i> {{ channelId ? i18n.ts.save : i18n.ts.create }}</MkButton>
 | 
			
		||||
				<MkButton v-if="channelId" danger @click="archive()"><i class="ph-trash ph-bold ph-lg"></i> {{ i18n.ts.archive }}</MkButton>
 | 
			
		||||
			</div>
 | 
			
		||||
		</div>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,11 +10,11 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
		<div v-if="channel && tab === 'overview'" class="_gaps">
 | 
			
		||||
			<div class="_panel" :class="$style.bannerContainer">
 | 
			
		||||
				<XChannelFollowButton :channel="channel" :full="true" :class="$style.subscribe"/>
 | 
			
		||||
				<MkButton v-if="favorited" v-tooltip="i18n.ts.unfavorite" asLike class="button" rounded primary :class="$style.favorite" @click="unfavorite()"><i class="ph-star ph-bold pg-lg"></i></MkButton>
 | 
			
		||||
				<MkButton v-else v-tooltip="i18n.ts.favorite" asLike class="button" rounded :class="$style.favorite" @click="favorite()"><i class="ph-star ph-bold pg-lg"></i></MkButton>
 | 
			
		||||
				<MkButton v-if="favorited" v-tooltip="i18n.ts.unfavorite" asLike class="button" rounded primary :class="$style.favorite" @click="unfavorite()"><i class="ph-star ph-bold ph-lg"></i></MkButton>
 | 
			
		||||
				<MkButton v-else v-tooltip="i18n.ts.favorite" asLike class="button" rounded :class="$style.favorite" @click="favorite()"><i class="ph-star ph-bold ph-lg"></i></MkButton>
 | 
			
		||||
				<div :style="{ backgroundImage: channel.bannerUrl ? `url(${channel.bannerUrl})` : null }" :class="$style.banner">
 | 
			
		||||
					<div :class="$style.bannerStatus">
 | 
			
		||||
						<div><i class="ph-users ph-bold pg-lg ti-fw"></i><I18n :src="i18n.ts._channel.usersCount" tag="span" style="margin-left: 4px;"><template #n><b>{{ channel.usersCount }}</b></template></I18n></div>
 | 
			
		||||
						<div><i class="ph-users ph-bold ph-lg ti-fw"></i><I18n :src="i18n.ts._channel.usersCount" tag="span" style="margin-left: 4px;"><template #n><b>{{ channel.usersCount }}</b></template></I18n></div>
 | 
			
		||||
						<div><i class="ph-pencil ph-bold ph-lg ti-fw"></i><I18n :src="i18n.ts._channel.notesCount" tag="span" style="margin-left: 4px;"><template #n><b>{{ channel.notesCount }}</b></template></I18n></div>
 | 
			
		||||
					</div>
 | 
			
		||||
					<div v-if="channel.isSensitive" :class="$style.sensitiveIndicator">{{ i18n.ts.sensitive }}</div>
 | 
			
		||||
| 
						 | 
				
			
			@ -168,7 +168,7 @@ async function search() {
 | 
			
		|||
const headerActions = $computed(() => {
 | 
			
		||||
	if (channel && channel.userId) {
 | 
			
		||||
		const share = {
 | 
			
		||||
			icon: 'ph-share-network ph-bold pg-lg',
 | 
			
		||||
			icon: 'ph-share-network ph-bold ph-lg',
 | 
			
		||||
			text: i18n.ts.share,
 | 
			
		||||
			handler: async (): Promise<void> => {
 | 
			
		||||
				navigator.share({
 | 
			
		||||
| 
						 | 
				
			
			@ -181,7 +181,7 @@ const headerActions = $computed(() => {
 | 
			
		|||
 | 
			
		||||
		const canEdit = ($i && $i.id === channel.userId) || iAmModerator;
 | 
			
		||||
		return canEdit ? [share, {
 | 
			
		||||
			icon: 'ph-gear ph-bold pg-lg',
 | 
			
		||||
			icon: 'ph-gear ph-bold ph-lg',
 | 
			
		||||
			text: i18n.ts.edit,
 | 
			
		||||
			handler: edit,
 | 
			
		||||
		}] : [share];
 | 
			
		||||
| 
						 | 
				
			
			@ -201,7 +201,7 @@ const headerTabs = $computed(() => [{
 | 
			
		|||
}, {
 | 
			
		||||
	key: 'featured',
 | 
			
		||||
	title: i18n.ts.featured,
 | 
			
		||||
	icon: 'ph-lightning ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-lightning ph-bold ph-lg',
 | 
			
		||||
}, {
 | 
			
		||||
	key: 'search',
 | 
			
		||||
	title: i18n.ts.search,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -138,7 +138,7 @@ const headerTabs = $computed(() => [{
 | 
			
		|||
}, {
 | 
			
		||||
	key: 'favorites',
 | 
			
		||||
	title: i18n.ts.favorites,
 | 
			
		||||
	icon: 'ph-star ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-star ph-bold ph-lg',
 | 
			
		||||
}, {
 | 
			
		||||
	key: 'following',
 | 
			
		||||
	title: i18n.ts._channel.following,
 | 
			
		||||
| 
						 | 
				
			
			@ -146,7 +146,7 @@ const headerTabs = $computed(() => [{
 | 
			
		|||
}, {
 | 
			
		||||
	key: 'owned',
 | 
			
		||||
	title: i18n.ts._channel.owned,
 | 
			
		||||
	icon: 'ph-pencil-line ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-pencil-line ph-bold ph-lg',
 | 
			
		||||
}]);
 | 
			
		||||
 | 
			
		||||
definePageMetadata(computed(() => ({
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,7 +18,7 @@ import { definePageMetadata } from '@/scripts/page-metadata.js';
 | 
			
		|||
 | 
			
		||||
definePageMetadata({
 | 
			
		||||
	title: '🍪👈',
 | 
			
		||||
	icon: 'ph-cookie ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-cookie ph-bold ph-lg',
 | 
			
		||||
});
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -118,7 +118,7 @@ const headerActions = $computed(() => clip && isOwned ? [{
 | 
			
		|||
		clipsCache.delete();
 | 
			
		||||
	},
 | 
			
		||||
}, ...(clip.isPublic ? [{
 | 
			
		||||
	icon: 'ph-share-network ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-share-network ph-bold ph-lg',
 | 
			
		||||
	text: i18n.ts.share,
 | 
			
		||||
	handler: async (): Promise<void> => {
 | 
			
		||||
		navigator.share({
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -316,7 +316,7 @@ const headerTabs = $computed(() => [{
 | 
			
		|||
 | 
			
		||||
definePageMetadata(computed(() => ({
 | 
			
		||||
	title: i18n.ts.customEmojis,
 | 
			
		||||
	icon: 'ph-smiley ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-smiley ph-bold ph-lg',
 | 
			
		||||
})));
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,7 +16,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
				<MkUserList :pagination="pinnedUsers"/>
 | 
			
		||||
			</MkFoldableSection>
 | 
			
		||||
			<MkFoldableSection class="_margin" persistKey="explore-popular-users">
 | 
			
		||||
				<template #header><i class="ph-chart-line ph-bold pg-lg ti-fw" style="margin-right: 0.5em;"></i>{{ i18n.ts.popularUsers }}</template>
 | 
			
		||||
				<template #header><i class="ph-chart-line ph-bold ph-lg ti-fw" style="margin-right: 0.5em;"></i>{{ i18n.ts.popularUsers }}</template>
 | 
			
		||||
				<MkUserList :pagination="popularUsers"/>
 | 
			
		||||
			</MkFoldableSection>
 | 
			
		||||
			<MkFoldableSection class="_margin" persistKey="explore-recently-updated-users">
 | 
			
		||||
| 
						 | 
				
			
			@ -46,7 +46,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
 | 
			
		||||
		<template v-if="tag == null">
 | 
			
		||||
			<MkFoldableSection class="_margin">
 | 
			
		||||
				<template #header><i class="ph-chart-line ph-bold pg-lg ti-fw" style="margin-right: 0.5em;"></i>{{ i18n.ts.popularUsers }}</template>
 | 
			
		||||
				<template #header><i class="ph-chart-line ph-bold ph-lg ti-fw" style="margin-right: 0.5em;"></i>{{ i18n.ts.popularUsers }}</template>
 | 
			
		||||
				<MkUserList :pagination="popularUsersF"/>
 | 
			
		||||
			</MkFoldableSection>
 | 
			
		||||
			<MkFoldableSection class="_margin">
 | 
			
		||||
| 
						 | 
				
			
			@ -54,7 +54,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
				<MkUserList :pagination="recentlyUpdatedUsersF"/>
 | 
			
		||||
			</MkFoldableSection>
 | 
			
		||||
			<MkFoldableSection class="_margin">
 | 
			
		||||
				<template #header><i class="ph-rocket-launch ph-bold pg-lg ti-fw" style="margin-right: 0.5em;"></i>{{ i18n.ts.recentlyDiscoveredUsers }}</template>
 | 
			
		||||
				<template #header><i class="ph-rocket-launch ph-bold ph-lg ti-fw" style="margin-right: 0.5em;"></i>{{ i18n.ts.recentlyDiscoveredUsers }}</template>
 | 
			
		||||
				<MkUserList :pagination="recentlyRegisteredUsersF"/>
 | 
			
		||||
			</MkFoldableSection>
 | 
			
		||||
		</template>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -47,15 +47,15 @@ const headerActions = $computed(() => []);
 | 
			
		|||
 | 
			
		||||
const headerTabs = $computed(() => [{
 | 
			
		||||
	key: 'featured',
 | 
			
		||||
	icon: 'ph-lightning ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-lightning ph-bold ph-lg',
 | 
			
		||||
	title: i18n.ts.featured,
 | 
			
		||||
}, {
 | 
			
		||||
	key: 'users',
 | 
			
		||||
	icon: 'ph-users ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-users ph-bold ph-lg',
 | 
			
		||||
	title: i18n.ts.users,
 | 
			
		||||
}, {
 | 
			
		||||
	key: 'roles',
 | 
			
		||||
	icon: 'ph-seal-check ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-seal-check ph-bold ph-lg',
 | 
			
		||||
	title: i18n.ts.roles,
 | 
			
		||||
}]);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -40,7 +40,7 @@ const pagination = {
 | 
			
		|||
 | 
			
		||||
definePageMetadata({
 | 
			
		||||
	title: i18n.ts.favorites,
 | 
			
		||||
	icon: 'ph-star ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-star ph-bold ph-lg',
 | 
			
		||||
});
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -76,11 +76,11 @@ const headerActions = $computed(() => [{
 | 
			
		|||
const headerTabs = $computed(() => [{
 | 
			
		||||
	key: 'featured',
 | 
			
		||||
	title: i18n.ts._play.featured,
 | 
			
		||||
	icon: 'ph-fire ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-fire ph-bold ph-lg',
 | 
			
		||||
}, {
 | 
			
		||||
	key: 'my',
 | 
			
		||||
	title: i18n.ts._play.my,
 | 
			
		||||
	icon: 'ph-pencil-line ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-pencil-line ph-bold ph-lg',
 | 
			
		||||
}, {
 | 
			
		||||
	key: 'liked',
 | 
			
		||||
	title: i18n.ts._play.liked,
 | 
			
		||||
| 
						 | 
				
			
			@ -89,6 +89,6 @@ const headerTabs = $computed(() => [{
 | 
			
		|||
 | 
			
		||||
definePageMetadata(computed(() => ({
 | 
			
		||||
	title: 'Play',
 | 
			
		||||
	icon: 'ph-play ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-play ph-bold ph-lg',
 | 
			
		||||
})));
 | 
			
		||||
</script>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,7 +18,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
							<MkButton v-if="flash.isLiked" v-tooltip="i18n.ts.unlike" asLike class="button" rounded primary @click="unlike()"><i class="ph-heart ph-bold ph-lg"></i><span v-if="flash.likedCount > 0" style="margin-left: 6px;">{{ flash.likedCount }}</span></MkButton>
 | 
			
		||||
							<MkButton v-else v-tooltip="i18n.ts.like" asLike class="button" rounded @click="like()"><i class="ph-heart ph-bold ph-lg"></i><span v-if="flash.likedCount > 0" style="margin-left: 6px;">{{ flash.likedCount }}</span></MkButton>
 | 
			
		||||
							<MkButton v-tooltip="i18n.ts.shareWithNote" class="button" rounded @click="shareWithNote"><i class="ph-repeat ph-bold ph-lg ti-fw"></i></MkButton>
 | 
			
		||||
							<MkButton v-tooltip="i18n.ts.share" class="button" rounded @click="share"><i class="ph-share-network ph-bold pg-lg ti-fw"></i></MkButton>
 | 
			
		||||
							<MkButton v-tooltip="i18n.ts.share" class="button" rounded @click="share"><i class="ph-share-network ph-bold ph-lg ti-fw"></i></MkButton>
 | 
			
		||||
						</div>
 | 
			
		||||
					</div>
 | 
			
		||||
					<div v-else :class="$style.ready">
 | 
			
		||||
| 
						 | 
				
			
			@ -33,7 +33,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
					</div>
 | 
			
		||||
				</Transition>
 | 
			
		||||
				<MkFolder :defaultOpen="false" :max-height="280" class="_margin">
 | 
			
		||||
					<template #icon><i class="ph-code ph-bold pg-lg"></i></template>
 | 
			
		||||
					<template #icon><i class="ph-code ph-bold ph-lg"></i></template>
 | 
			
		||||
					<template #label>{{ i18n.ts._play.viewSource }}</template>
 | 
			
		||||
 | 
			
		||||
					<MkCode :code="flash.script" lang="is" :inline="false" class="_monospace"/>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -27,8 +27,8 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
			<MkSwitch v-model="isSensitive">{{ i18n.ts.markAsSensitive }}</MkSwitch>
 | 
			
		||||
 | 
			
		||||
			<div class="_buttons">
 | 
			
		||||
				<MkButton v-if="postId" primary @click="save"><i class="ph-floppy-disk ph-bold pg-lg"></i> {{ i18n.ts.save }}</MkButton>
 | 
			
		||||
				<MkButton v-else primary @click="save"><i class="ph-floppy-disk ph-bold pg-lg"></i> {{ i18n.ts.publish }}</MkButton>
 | 
			
		||||
				<MkButton v-if="postId" primary @click="save"><i class="ph-floppy-disk ph-bold ph-lg"></i> {{ i18n.ts.save }}</MkButton>
 | 
			
		||||
				<MkButton v-else primary @click="save"><i class="ph-floppy-disk ph-bold ph-lg"></i> {{ i18n.ts.publish }}</MkButton>
 | 
			
		||||
 | 
			
		||||
				<MkButton v-if="postId" danger @click="del"><i class="ph-trash ph-bold ph-lg"></i> {{ i18n.ts.delete }}</MkButton>
 | 
			
		||||
			</div>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -107,7 +107,7 @@ const headerActions = $computed(() => [{
 | 
			
		|||
const headerTabs = $computed(() => [{
 | 
			
		||||
	key: 'explore',
 | 
			
		||||
	title: i18n.ts.gallery,
 | 
			
		||||
	icon: 'ph-images-square ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-images-square ph-bold ph-lg',
 | 
			
		||||
}, {
 | 
			
		||||
	key: 'liked',
 | 
			
		||||
	title: i18n.ts._gallery.liked,
 | 
			
		||||
| 
						 | 
				
			
			@ -115,12 +115,12 @@ const headerTabs = $computed(() => [{
 | 
			
		|||
}, {
 | 
			
		||||
	key: 'my',
 | 
			
		||||
	title: i18n.ts._gallery.my,
 | 
			
		||||
	icon: 'ph-pencil-line ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-pencil-line ph-bold ph-lg',
 | 
			
		||||
}]);
 | 
			
		||||
 | 
			
		||||
definePageMetadata({
 | 
			
		||||
	title: i18n.ts.gallery,
 | 
			
		||||
	icon: 'ph-images-square ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-images-square ph-bold ph-lg',
 | 
			
		||||
});
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -29,7 +29,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
							<div class="other">
 | 
			
		||||
								<button v-if="$i && $i.id === post.user.id" v-tooltip="i18n.ts.edit" v-click-anime class="_button" @click="edit"><i class="ph-pencil ph-bold ph-lg ti-fw"></i></button>
 | 
			
		||||
								<button v-tooltip="i18n.ts.shareWithNote" v-click-anime class="_button" @click="shareWithNote"><i class="ph-repeat ph-bold ph-lg ti-fw"></i></button>
 | 
			
		||||
								<button v-tooltip="i18n.ts.share" v-click-anime class="_button" @click="share"><i class="ph-share-network ph-bold pg-lg ti-fw"></i></button>
 | 
			
		||||
								<button v-tooltip="i18n.ts.share" v-click-anime class="_button" @click="share"><i class="ph-share-network ph-bold ph-lg ti-fw"></i></button>
 | 
			
		||||
							</div>
 | 
			
		||||
						</div>
 | 
			
		||||
						<div class="user">
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -37,7 +37,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
					<MkSwitch v-model="suspended" :disabled="!instance" @update:modelValue="toggleSuspend">{{ i18n.ts.stopActivityDelivery }}</MkSwitch>
 | 
			
		||||
					<MkSwitch v-model="isBlocked" :disabled="!meta || !instance" @update:modelValue="toggleBlock">{{ i18n.ts.blockThisInstance }}</MkSwitch>
 | 
			
		||||
					<MkSwitch v-model="isSilenced" :disabled="!meta || !instance" @update:modelValue="toggleSilenced">{{ i18n.ts.silenceThisInstance }}</MkSwitch>
 | 
			
		||||
					<MkButton @click="refreshMetadata"><i class="ph-arrows-counter-clockwise ph-bold pg-lg"></i> Refresh metadata</MkButton>
 | 
			
		||||
					<MkButton @click="refreshMetadata"><i class="ph-arrows-counter-clockwise ph-bold ph-lg"></i> Refresh metadata</MkButton>
 | 
			
		||||
				</div>
 | 
			
		||||
			</FormSection>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -228,15 +228,15 @@ const headerTabs = $computed(() => [{
 | 
			
		|||
}, {
 | 
			
		||||
	key: 'chart',
 | 
			
		||||
	title: i18n.ts.charts,
 | 
			
		||||
	icon: 'ph-chart-line ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-chart-line ph-bold ph-lg',
 | 
			
		||||
}, {
 | 
			
		||||
	key: 'users',
 | 
			
		||||
	title: i18n.ts.users,
 | 
			
		||||
	icon: 'ph-users ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-users ph-bold ph-lg',
 | 
			
		||||
}, {
 | 
			
		||||
	key: 'raw',
 | 
			
		||||
	title: 'Raw',
 | 
			
		||||
	icon: 'ph-code ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-code ph-bold ph-lg',
 | 
			
		||||
}]);
 | 
			
		||||
 | 
			
		||||
definePageMetadata({
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -101,7 +101,7 @@ const headerTabs = $computed(() => []);
 | 
			
		|||
 | 
			
		||||
definePageMetadata(computed(() => list ? {
 | 
			
		||||
	title: list.name,
 | 
			
		||||
	icon: 'ph-list ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-list ph-bold ph-lg',
 | 
			
		||||
} : null));
 | 
			
		||||
</script>
 | 
			
		||||
<style lang="scss" module>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -95,7 +95,7 @@ const headerTabs = $computed(() => []);
 | 
			
		|||
 | 
			
		||||
definePageMetadata({
 | 
			
		||||
	title: 'MiAuth',
 | 
			
		||||
	icon: 'ph-squares-four ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-squares-four ph-bold ph-lg',
 | 
			
		||||
});
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -39,6 +39,6 @@ function onAntennaCreated() {
 | 
			
		|||
 | 
			
		||||
definePageMetadata({
 | 
			
		||||
	title: i18n.ts.manageAntennas,
 | 
			
		||||
	icon: 'ph-flying-saucer ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-flying-saucer ph-bold ph-lg',
 | 
			
		||||
});
 | 
			
		||||
</script>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -36,6 +36,6 @@ os.api('antennas/show', { antennaId: props.antennaId }).then((antennaResponse) =
 | 
			
		|||
 | 
			
		||||
definePageMetadata({
 | 
			
		||||
	title: i18n.ts.manageAntennas,
 | 
			
		||||
	icon: 'ph-flying-saucer ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-flying-saucer ph-bold ph-lg',
 | 
			
		||||
});
 | 
			
		||||
</script>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -41,7 +41,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
			<MkSwitch v-model="notify">{{ i18n.ts.notifyAntenna }}</MkSwitch>
 | 
			
		||||
		</div>
 | 
			
		||||
		<div :class="$style.actions">
 | 
			
		||||
			<MkButton inline primary @click="saveAntenna()"><i class="ph-floppy-disk ph-bold pg-lg"></i> {{ i18n.ts.save }}</MkButton>
 | 
			
		||||
			<MkButton inline primary @click="saveAntenna()"><i class="ph-floppy-disk ph-bold ph-lg"></i> {{ i18n.ts.save }}</MkButton>
 | 
			
		||||
			<MkButton v-if="antenna.id != null" inline danger @click="deleteAntenna()"><i class="ph-trash ph-bold ph-lg"></i> {{ i18n.ts.delete }}</MkButton>
 | 
			
		||||
		</div>
 | 
			
		||||
	</div>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -45,7 +45,7 @@ fetch();
 | 
			
		|||
 | 
			
		||||
const headerActions = $computed(() => [{
 | 
			
		||||
	asFullButton: true,
 | 
			
		||||
	icon: 'ph-arrows-counter-clockwise ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-arrows-counter-clockwise ph-bold ph-lg',
 | 
			
		||||
	text: i18n.ts.reload,
 | 
			
		||||
	handler: () => {
 | 
			
		||||
		antennasCache.delete();
 | 
			
		||||
| 
						 | 
				
			
			@ -57,7 +57,7 @@ const headerTabs = $computed(() => []);
 | 
			
		|||
 | 
			
		||||
definePageMetadata({
 | 
			
		||||
	title: i18n.ts.manageAntennas,
 | 
			
		||||
	icon: 'ph-flying-saucer ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-flying-saucer ph-bold ph-lg',
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
onActivated(() => {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -59,7 +59,7 @@ async function create() {
 | 
			
		|||
 | 
			
		||||
const headerActions = $computed(() => [{
 | 
			
		||||
	asFullButton: true,
 | 
			
		||||
	icon: 'ph-arrows-counter-clockwise ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-arrows-counter-clockwise ph-bold ph-lg',
 | 
			
		||||
	text: i18n.ts.reload,
 | 
			
		||||
	handler: () => {
 | 
			
		||||
		userListsCache.delete();
 | 
			
		||||
| 
						 | 
				
			
			@ -71,7 +71,7 @@ const headerTabs = $computed(() => []);
 | 
			
		|||
 | 
			
		||||
definePageMetadata({
 | 
			
		||||
	title: i18n.ts.manageLists,
 | 
			
		||||
	icon: 'ph-list ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-list ph-bold ph-lg',
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
onActivated(() => {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -185,7 +185,7 @@ const headerTabs = $computed(() => []);
 | 
			
		|||
 | 
			
		||||
definePageMetadata(computed(() => list ? {
 | 
			
		||||
	title: list.name,
 | 
			
		||||
	icon: 'ph-list ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-list ph-bold ph-lg',
 | 
			
		||||
} : null));
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -80,7 +80,7 @@ const headerActions = $computed(() => [tab === 'all' ? {
 | 
			
		|||
const headerTabs = $computed(() => [{
 | 
			
		||||
	key: 'all',
 | 
			
		||||
	title: i18n.ts.all,
 | 
			
		||||
	icon: 'ph-circle ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-circle ph-bold ph-lg',
 | 
			
		||||
}, {
 | 
			
		||||
	key: 'mentions',
 | 
			
		||||
	title: i18n.ts.mentions,
 | 
			
		||||
| 
						 | 
				
			
			@ -93,6 +93,6 @@ const headerTabs = $computed(() => [{
 | 
			
		|||
 | 
			
		||||
definePageMetadata(computed(() => ({
 | 
			
		||||
	title: i18n.ts.notifications,
 | 
			
		||||
	icon: 'ph-bell ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-bell ph-bold ph-lg',
 | 
			
		||||
})));
 | 
			
		||||
</script>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -53,7 +53,7 @@ function onLogin(res): void {
 | 
			
		|||
 | 
			
		||||
definePageMetadata({
 | 
			
		||||
	title: 'OAuth',
 | 
			
		||||
	icon: 'ph-squares-four ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-squares-four ph-bold ph-lg',
 | 
			
		||||
});
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,7 +9,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
	<MkSpacer :contentMax="700">
 | 
			
		||||
		<div class="jqqmcavi">
 | 
			
		||||
			<MkButton v-if="pageId" class="button" inline link :to="`/@${ author.username }/pages/${ currentName }`"><i class="ph-arrow-square-out ph-bold ph-lg"></i> {{ i18n.ts._pages.viewPage }}</MkButton>
 | 
			
		||||
			<MkButton v-if="!readonly" inline primary class="button" @click="save"><i class="ph-floppy-disk ph-bold pg-lg"></i> {{ i18n.ts.save }}</MkButton>
 | 
			
		||||
			<MkButton v-if="!readonly" inline primary class="button" @click="save"><i class="ph-floppy-disk ph-bold ph-lg"></i> {{ i18n.ts.save }}</MkButton>
 | 
			
		||||
			<MkButton v-if="pageId" inline class="button" @click="duplicate"><i class="ph-copy ph-bold ph-lg"></i> {{ i18n.ts.duplicate }}</MkButton>
 | 
			
		||||
			<MkButton v-if="pageId && !readonly" inline class="button" danger @click="del"><i class="ph-trash ph-bold ph-lg"></i> {{ i18n.ts.delete }}</MkButton>
 | 
			
		||||
		</div>
 | 
			
		||||
| 
						 | 
				
			
			@ -275,7 +275,7 @@ const headerActions = $computed(() => []);
 | 
			
		|||
const headerTabs = $computed(() => [{
 | 
			
		||||
	key: 'settings',
 | 
			
		||||
	title: i18n.ts._pages.pageSetting,
 | 
			
		||||
	icon: 'ph-gear ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-gear ph-bold ph-lg',
 | 
			
		||||
}, {
 | 
			
		||||
	key: 'contents',
 | 
			
		||||
	title: i18n.ts._pages.contents,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -34,7 +34,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
						</div>
 | 
			
		||||
						<div class="other">
 | 
			
		||||
							<button v-tooltip="i18n.ts.shareWithNote" v-click-anime class="_button" @click="shareWithNote"><i class="ph-rocket-launch ph-bold ph-lg ti-fw"></i></button>
 | 
			
		||||
							<button v-tooltip="i18n.ts.share" v-click-anime class="_button" @click="share"><i class="ph-share-network ph-bold pg-lg ti-fw"></i></button>
 | 
			
		||||
							<button v-tooltip="i18n.ts.share" v-click-anime class="_button" @click="share"><i class="ph-share-network ph-bold ph-lg ti-fw"></i></button>
 | 
			
		||||
						</div>
 | 
			
		||||
					</div>
 | 
			
		||||
					<div class="user">
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -74,11 +74,11 @@ const headerActions = $computed(() => [{
 | 
			
		|||
const headerTabs = $computed(() => [{
 | 
			
		||||
	key: 'featured',
 | 
			
		||||
	title: i18n.ts._pages.featured,
 | 
			
		||||
	icon: 'ph-fire ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-fire ph-bold ph-lg',
 | 
			
		||||
}, {
 | 
			
		||||
	key: 'my',
 | 
			
		||||
	title: i18n.ts._pages.my,
 | 
			
		||||
	icon: 'ph-pencil-line ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-pencil-line ph-bold ph-lg',
 | 
			
		||||
}, {
 | 
			
		||||
	key: 'liked',
 | 
			
		||||
	title: i18n.ts._pages.liked,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,7 +30,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
					<template #label>{{ i18n.ts.value }} (JSON)</template>
 | 
			
		||||
				</MkTextarea>
 | 
			
		||||
 | 
			
		||||
				<MkButton primary @click="save"><i class="ph-floppy-disk ph-bold pg-lg"></i> {{ i18n.ts.save }}</MkButton>
 | 
			
		||||
				<MkButton primary @click="save"><i class="ph-floppy-disk ph-bold ph-lg"></i> {{ i18n.ts.save }}</MkButton>
 | 
			
		||||
 | 
			
		||||
				<MkKeyValue>
 | 
			
		||||
					<template #key>{{ i18n.ts.updatedAt }}</template>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -74,7 +74,7 @@ const users = $computed(() => ({
 | 
			
		|||
 | 
			
		||||
const headerTabs = $computed(() => [{
 | 
			
		||||
	key: 'users',
 | 
			
		||||
	icon: 'ph-users ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-users ph-bold ph-lg',
 | 
			
		||||
	title: i18n.ts.users,
 | 
			
		||||
}, {
 | 
			
		||||
	key: 'timeline',
 | 
			
		||||
| 
						 | 
				
			
			@ -84,7 +84,7 @@ const headerTabs = $computed(() => [{
 | 
			
		|||
 | 
			
		||||
definePageMetadata(computed(() => ({
 | 
			
		||||
	title: role?.name,
 | 
			
		||||
	icon: 'ph-seal-check ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-seal-check ph-bold ph-lg',
 | 
			
		||||
})));
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -47,7 +47,7 @@ const headerTabs = $computed(() => [{
 | 
			
		|||
}, {
 | 
			
		||||
	key: 'user',
 | 
			
		||||
	title: i18n.ts.users,
 | 
			
		||||
	icon: 'ph-users ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-users ph-bold ph-lg',
 | 
			
		||||
}]);
 | 
			
		||||
 | 
			
		||||
definePageMetadata(computed(() => ({
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -42,7 +42,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
						</div>
 | 
			
		||||
						<div class="_buttonsCenter" style="margin-top: 16px;">
 | 
			
		||||
							<MkButton rounded @click="cancel">{{ i18n.ts.cancel }}</MkButton>
 | 
			
		||||
							<MkButton primary rounded gradate @click="page++">{{ i18n.ts.continue }} <i class="ph-arrow-right ph-bold pg-lg"></i></MkButton>
 | 
			
		||||
							<MkButton primary rounded gradate @click="page++">{{ i18n.ts.continue }} <i class="ph-arrow-right ph-bold ph-lg"></i></MkButton>
 | 
			
		||||
						</div>
 | 
			
		||||
					</MkSpacer>
 | 
			
		||||
				</div>
 | 
			
		||||
| 
						 | 
				
			
			@ -56,8 +56,8 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
							<div>{{ i18n.ts._2fa.step3 }}</div>
 | 
			
		||||
						</div>
 | 
			
		||||
						<div class="_buttonsCenter" style="margin-top: 16px;">
 | 
			
		||||
							<MkButton rounded @click="page--"><i class="ph-arrow-left ph-bold pg-lg"></i> {{ i18n.ts.goBack }}</MkButton>
 | 
			
		||||
							<MkButton primary rounded gradate @click="tokenDone">{{ i18n.ts.continue }} <i class="ph-arrow-right ph-bold pg-lg"></i></MkButton>
 | 
			
		||||
							<MkButton rounded @click="page--"><i class="ph-arrow-left ph-bold ph-lg"></i> {{ i18n.ts.goBack }}</MkButton>
 | 
			
		||||
							<MkButton primary rounded gradate @click="tokenDone">{{ i18n.ts.continue }} <i class="ph-arrow-right ph-bold ph-lg"></i></MkButton>
 | 
			
		||||
						</div>
 | 
			
		||||
					</MkSpacer>
 | 
			
		||||
				</div>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,7 +9,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
		<div class="_gaps">
 | 
			
		||||
			<div class="_buttons">
 | 
			
		||||
				<MkButton primary @click="addAccount"><i class="ph-plus ph-bold ph-lg"></i> {{ i18n.ts.addAccount }}</MkButton>
 | 
			
		||||
				<MkButton @click="init"><i class="ph-arrows-counter-clockwise ph-bold pg-lg"></i> {{ i18n.ts.reloadAccountsList }}</MkButton>
 | 
			
		||||
				<MkButton @click="init"><i class="ph-arrows-counter-clockwise ph-bold ph-lg"></i> {{ i18n.ts.reloadAccountsList }}</MkButton>
 | 
			
		||||
			</div>
 | 
			
		||||
 | 
			
		||||
			<MkUserCardMini v-for="user in accounts" :key="user.id" :user="user" :class="$style.user" @click.prevent="menu(user, $event)"/>
 | 
			
		||||
| 
						 | 
				
			
			@ -107,7 +107,7 @@ const headerTabs = $computed(() => []);
 | 
			
		|||
 | 
			
		||||
definePageMetadata({
 | 
			
		||||
	title: i18n.ts.accounts,
 | 
			
		||||
	icon: 'ph-users ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-users ph-bold ph-lg',
 | 
			
		||||
});
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -46,6 +46,6 @@ const headerTabs = $computed(() => []);
 | 
			
		|||
 | 
			
		||||
definePageMetadata({
 | 
			
		||||
	title: 'API',
 | 
			
		||||
	icon: 'ph-webhooks-logo ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-webhooks-logo ph-bold ph-lg',
 | 
			
		||||
});
 | 
			
		||||
</script>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -47,6 +47,6 @@ const headerTabs = $computed(() => []);
 | 
			
		|||
 | 
			
		||||
definePageMetadata({
 | 
			
		||||
	title: i18n.ts.customCss,
 | 
			
		||||
	icon: 'ph-code ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-code ph-bold ph-lg',
 | 
			
		||||
});
 | 
			
		||||
</script>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -189,7 +189,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
				</div>
 | 
			
		||||
			</MkFolder>
 | 
			
		||||
			<FormLink to="/settings/deck">{{ i18n.ts.deck }}</FormLink>
 | 
			
		||||
			<FormLink to="/settings/custom-css"><template #icon><i class="ph-code ph-bold pg-lg"></i></template>{{ i18n.ts.customCss }}</FormLink>
 | 
			
		||||
			<FormLink to="/settings/custom-css"><template #icon><i class="ph-code ph-bold ph-lg"></i></template>{{ i18n.ts.customCss }}</FormLink>
 | 
			
		||||
		</div>
 | 
			
		||||
	</FormSection>
 | 
			
		||||
</div>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,7 +14,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
		</MkFolder>
 | 
			
		||||
	</FormSection>
 | 
			
		||||
	<FormSection>
 | 
			
		||||
		<template #label><i class="ph-star ph-bold pg-lg"></i> {{ i18n.ts._exportOrImport.favoritedNotes }}</template>
 | 
			
		||||
		<template #label><i class="ph-star ph-bold ph-lg"></i> {{ i18n.ts._exportOrImport.favoritedNotes }}</template>
 | 
			
		||||
		<MkFolder>
 | 
			
		||||
			<template #label>{{ i18n.ts.export }}</template>
 | 
			
		||||
			<template #icon><i class="ph-download ph-bold ph-lg"></i></template>
 | 
			
		||||
| 
						 | 
				
			
			@ -22,7 +22,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
		</MkFolder>
 | 
			
		||||
	</FormSection>
 | 
			
		||||
	<FormSection>
 | 
			
		||||
		<template #label><i class="ph-users ph-bold pg-lg"></i> {{ i18n.ts._exportOrImport.followingList }}</template>
 | 
			
		||||
		<template #label><i class="ph-users ph-bold ph-lg"></i> {{ i18n.ts._exportOrImport.followingList }}</template>
 | 
			
		||||
		<div class="_gaps_s">
 | 
			
		||||
			<MkFolder>
 | 
			
		||||
				<template #label>{{ i18n.ts.export }}</template>
 | 
			
		||||
| 
						 | 
				
			
			@ -48,7 +48,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
		</div>
 | 
			
		||||
	</FormSection>
 | 
			
		||||
	<FormSection>
 | 
			
		||||
		<template #label><i class="ph-users ph-bold pg-lg"></i> {{ i18n.ts._exportOrImport.userLists }}</template>
 | 
			
		||||
		<template #label><i class="ph-users ph-bold ph-lg"></i> {{ i18n.ts._exportOrImport.userLists }}</template>
 | 
			
		||||
		<div class="_gaps_s">
 | 
			
		||||
			<MkFolder>
 | 
			
		||||
				<template #label>{{ i18n.ts.export }}</template>
 | 
			
		||||
| 
						 | 
				
			
			@ -93,7 +93,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
		</div>
 | 
			
		||||
	</FormSection>
 | 
			
		||||
	<FormSection>
 | 
			
		||||
		<template #label><i class="ph-flying-saucer ph-bold pg-lg"></i> {{ i18n.ts.antennas }}</template>
 | 
			
		||||
		<template #label><i class="ph-flying-saucer ph-bold ph-lg"></i> {{ i18n.ts.antennas }}</template>
 | 
			
		||||
		<div class="_gaps_s">
 | 
			
		||||
			<MkFolder>
 | 
			
		||||
				<template #label>{{ i18n.ts.export }}</template>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -42,7 +42,7 @@ import { fetchCustomEmojis } from '@/custom-emojis.js';
 | 
			
		|||
 | 
			
		||||
const indexInfo = {
 | 
			
		||||
	title: i18n.ts.settings,
 | 
			
		||||
	icon: 'ph-gear ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-gear ph-bold ph-lg',
 | 
			
		||||
	hideHeader: true,
 | 
			
		||||
};
 | 
			
		||||
const INFO = ref(indexInfo);
 | 
			
		||||
| 
						 | 
				
			
			@ -84,7 +84,7 @@ const menuDef = computed(() => [{
 | 
			
		|||
		to: '/settings/drive',
 | 
			
		||||
		active: currentPage?.route.name === 'drive',
 | 
			
		||||
	}, {
 | 
			
		||||
		icon: 'ph-bell ph-bold pg-lg',
 | 
			
		||||
		icon: 'ph-bell ph-bold ph-lg',
 | 
			
		||||
		text: i18n.ts.notifications,
 | 
			
		||||
		to: '/settings/notifications',
 | 
			
		||||
		active: currentPage?.route.name === 'notifications',
 | 
			
		||||
| 
						 | 
				
			
			@ -122,7 +122,7 @@ const menuDef = computed(() => [{
 | 
			
		|||
		to: '/settings/statusbar',
 | 
			
		||||
		active: currentPage?.route.name === 'statusbar',
 | 
			
		||||
	}, {
 | 
			
		||||
		icon: 'ph-music-notes ph-bold pg-lg',
 | 
			
		||||
		icon: 'ph-music-notes ph-bold ph-lg',
 | 
			
		||||
		text: i18n.ts.sounds,
 | 
			
		||||
		to: '/settings/sounds',
 | 
			
		||||
		active: currentPage?.route.name === 'sounds',
 | 
			
		||||
| 
						 | 
				
			
			@ -135,7 +135,7 @@ const menuDef = computed(() => [{
 | 
			
		|||
}, {
 | 
			
		||||
	title: i18n.ts.otherSettings,
 | 
			
		||||
	items: [{
 | 
			
		||||
		icon: 'ph-seal-check ph-bold pg-lg',
 | 
			
		||||
		icon: 'ph-seal-check ph-bold ph-lg',
 | 
			
		||||
		text: i18n.ts.roles,
 | 
			
		||||
		to: '/settings/roles',
 | 
			
		||||
		active: currentPage?.route.name === 'roles',
 | 
			
		||||
| 
						 | 
				
			
			@ -145,7 +145,7 @@ const menuDef = computed(() => [{
 | 
			
		|||
		to: '/settings/mute-block',
 | 
			
		||||
		active: currentPage?.route.name === 'mute-block',
 | 
			
		||||
	}, {
 | 
			
		||||
		icon: 'ph-key ph-bold pg-lg',
 | 
			
		||||
		icon: 'ph-key ph-bold ph-lg',
 | 
			
		||||
		text: 'API',
 | 
			
		||||
		to: '/settings/api',
 | 
			
		||||
		active: currentPage?.route.name === 'api',
 | 
			
		||||
| 
						 | 
				
			
			@ -172,7 +172,7 @@ const menuDef = computed(() => [{
 | 
			
		|||
	}],
 | 
			
		||||
}, {
 | 
			
		||||
	items: [{
 | 
			
		||||
		icon: 'ph-floppy-disk ph-bold pg-lg',
 | 
			
		||||
		icon: 'ph-floppy-disk ph-bold ph-lg',
 | 
			
		||||
		text: i18n.ts.preferencesBackups,
 | 
			
		||||
		to: '/settings/preferences-backups',
 | 
			
		||||
		active: currentPage?.route.name === 'preferences-backups',
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,7 +10,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
		<template #label>{{ i18n.ts._instanceMute.heading }}</template>
 | 
			
		||||
		<template #caption>{{ i18n.ts._instanceMute.instanceMuteDescription }}<br>{{ i18n.ts._instanceMute.instanceMuteDescription2 }}</template>
 | 
			
		||||
	</MkTextarea>
 | 
			
		||||
	<MkButton primary :disabled="!changed" @click="save()"><i class="ph-floppy-disk ph-bold pg-lg"></i> {{ i18n.ts.save }}</MkButton>
 | 
			
		||||
	<MkButton primary :disabled="!changed" @click="save()"><i class="ph-floppy-disk ph-bold ph-lg"></i> {{ i18n.ts.save }}</MkButton>
 | 
			
		||||
</div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,7 +11,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
			<template #caption>{{ i18n.ts._wordMute.muteWordsDescription }}<br>{{ i18n.ts._wordMute.muteWordsDescription2 }}</template>
 | 
			
		||||
		</MkTextarea>
 | 
			
		||||
	</div>
 | 
			
		||||
	<MkButton primary inline :disabled="!changed" @click="save()"><i class="ph-floppy-disk ph-bold pg-lg"></i> {{ i18n.ts.save }}</MkButton>
 | 
			
		||||
	<MkButton primary inline :disabled="!changed" @click="save()"><i class="ph-floppy-disk ph-bold ph-lg"></i> {{ i18n.ts.save }}</MkButton>
 | 
			
		||||
</div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -32,7 +32,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
	<div class="_buttons">
 | 
			
		||||
		<MkButton @click="addItem"><i class="ph-plus ph-bold ph-lg"></i> {{ i18n.ts.addItem }}</MkButton>
 | 
			
		||||
		<MkButton danger @click="reset"><i class="ph-arrow-clockwise ph-bold ph-lg"></i> {{ i18n.ts.default }}</MkButton>
 | 
			
		||||
		<MkButton primary class="save" @click="save"><i class="ph-floppy-disk ph-bold pg-lg"></i> {{ i18n.ts.save }}</MkButton>
 | 
			
		||||
		<MkButton primary class="save" @click="save"><i class="ph-floppy-disk ph-bold ph-lg"></i> {{ i18n.ts.save }}</MkButton>
 | 
			
		||||
	</div>
 | 
			
		||||
 | 
			
		||||
	<MkRadios v-model="menuDisplay">
 | 
			
		||||
| 
						 | 
				
			
			@ -121,7 +121,7 @@ const headerTabs = $computed(() => []);
 | 
			
		|||
 | 
			
		||||
definePageMetadata({
 | 
			
		||||
	title: i18n.ts.navbar,
 | 
			
		||||
	icon: 'ph-list ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-list ph-bold ph-lg',
 | 
			
		||||
});
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -114,6 +114,6 @@ const headerTabs = $computed(() => []);
 | 
			
		|||
 | 
			
		||||
definePageMetadata({
 | 
			
		||||
	title: i18n.ts.notifications,
 | 
			
		||||
	icon: 'ph-bell ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-bell ph-bold ph-lg',
 | 
			
		||||
});
 | 
			
		||||
</script>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -58,7 +58,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
			</MkFolder>
 | 
			
		||||
 | 
			
		||||
			<MkFolder>
 | 
			
		||||
				<template #icon><i class="ph-code ph-bold pg-lg"></i></template>
 | 
			
		||||
				<template #icon><i class="ph-code ph-bold ph-lg"></i></template>
 | 
			
		||||
				<template #label>{{ i18n.ts.developer }}</template>
 | 
			
		||||
 | 
			
		||||
				<div class="_gaps_m">
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -37,12 +37,12 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
				</div>
 | 
			
		||||
 | 
			
		||||
				<div class="_buttons">
 | 
			
		||||
					<MkButton v-if="plugin.config" inline @click="config(plugin)"><i class="ph-gear ph-bold pg-lg"></i> {{ i18n.ts.settings }}</MkButton>
 | 
			
		||||
					<MkButton v-if="plugin.config" inline @click="config(plugin)"><i class="ph-gear ph-bold ph-lg"></i> {{ i18n.ts.settings }}</MkButton>
 | 
			
		||||
					<MkButton inline danger @click="uninstall(plugin)"><i class="ph-trash ph-bold ph-lg"></i> {{ i18n.ts.uninstall }}</MkButton>
 | 
			
		||||
				</div>
 | 
			
		||||
 | 
			
		||||
				<MkFolder>
 | 
			
		||||
					<template #icon><i class="ph-code ph-bold pg-lg"></i></template>
 | 
			
		||||
					<template #icon><i class="ph-code ph-bold ph-lg"></i></template>
 | 
			
		||||
					<template #label>{{ i18n.ts._plugin.viewSource }}</template>
 | 
			
		||||
 | 
			
		||||
					<div class="_gaps_s">
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -400,7 +400,7 @@ function menu(ev: MouseEvent, profileId: string) {
 | 
			
		|||
		action: () => rename(profileId),
 | 
			
		||||
	}, {
 | 
			
		||||
		text: ts._preferencesBackups.save,
 | 
			
		||||
		icon: 'ph-floppy-disk ph-bold pg-lg',
 | 
			
		||||
		icon: 'ph-floppy-disk ph-bold ph-lg',
 | 
			
		||||
		action: () => save(profileId),
 | 
			
		||||
	}, null, {
 | 
			
		||||
		text: ts.delete,
 | 
			
		||||
| 
						 | 
				
			
			@ -426,7 +426,7 @@ onUnmounted(() => {
 | 
			
		|||
 | 
			
		||||
definePageMetadata(computed(() => ({
 | 
			
		||||
	title: ts.preferencesBackups,
 | 
			
		||||
	icon: 'ph-floppy-disk ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-floppy-disk ph-bold ph-lg',
 | 
			
		||||
})));
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -45,7 +45,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
 | 
			
		||||
	<FormSlot>
 | 
			
		||||
		<MkFolder>
 | 
			
		||||
			<template #icon><i class="ph-list ph-bold pg-lg"></i></template>
 | 
			
		||||
			<template #icon><i class="ph-list ph-bold ph-lg"></i></template>
 | 
			
		||||
			<template #label>{{ i18n.ts._profile.metadataEdit }}</template>
 | 
			
		||||
 | 
			
		||||
			<div :class="$style.metadataRoot">
 | 
			
		||||
| 
						 | 
				
			
			@ -90,7 +90,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
	</FormSlot>
 | 
			
		||||
 | 
			
		||||
	<MkFolder>
 | 
			
		||||
		<template #icon><i class="ph-sparkle ph-bold pg-lg"></i></template>
 | 
			
		||||
		<template #icon><i class="ph-sparkle ph-bold ph-lg"></i></template>
 | 
			
		||||
		<template #label>{{ i18n.ts.avatarDecorations }}</template>
 | 
			
		||||
 | 
			
		||||
		<div style="display: grid; grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); grid-gap: 12px;">
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -52,7 +52,7 @@ const headerTabs = $computed(() => []);
 | 
			
		|||
 | 
			
		||||
definePageMetadata({
 | 
			
		||||
	title: i18n.ts.roles,
 | 
			
		||||
	icon: 'ph-seal-check ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-seal-check ph-bold ph-lg',
 | 
			
		||||
});
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -32,7 +32,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
 | 
			
		||||
	<FormSection>
 | 
			
		||||
		<FormSlot>
 | 
			
		||||
			<MkButton danger @click="regenerateToken"><i class="ph-arrows-counter-clockwise ph-bold pg-lg"></i> {{ i18n.ts.regenerateLoginToken }}</MkButton>
 | 
			
		||||
			<MkButton danger @click="regenerateToken"><i class="ph-arrows-counter-clockwise ph-bold ph-lg"></i> {{ i18n.ts.regenerateLoginToken }}</MkButton>
 | 
			
		||||
			<template #caption>{{ i18n.ts.regenerateLoginTokenDescription }}</template>
 | 
			
		||||
		</FormSlot>
 | 
			
		||||
	</FormSection>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,7 +14,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
	</MkRange>
 | 
			
		||||
 | 
			
		||||
	<div class="_buttons">
 | 
			
		||||
		<MkButton inline @click="listen"><i class="ph-play ph-bold pg-lg"></i> {{ i18n.ts.listen }}</MkButton>
 | 
			
		||||
		<MkButton inline @click="listen"><i class="ph-play ph-bold ph-lg"></i> {{ i18n.ts.listen }}</MkButton>
 | 
			
		||||
		<MkButton inline primary @click="save"><i class="ph-check ph-bold ph-lg"></i> {{ i18n.ts.save }}</MkButton>
 | 
			
		||||
	</div>
 | 
			
		||||
</div>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -72,6 +72,6 @@ const headerTabs = $computed(() => []);
 | 
			
		|||
 | 
			
		||||
definePageMetadata({
 | 
			
		||||
	title: i18n.ts.sounds,
 | 
			
		||||
	icon: 'ph-music-notes ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-music-notes ph-bold ph-lg',
 | 
			
		||||
});
 | 
			
		||||
</script>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -51,6 +51,6 @@ const headerTabs = $computed(() => []);
 | 
			
		|||
 | 
			
		||||
definePageMetadata({
 | 
			
		||||
	title: i18n.ts.statusbar,
 | 
			
		||||
	icon: 'ph-list ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-list ph-bold ph-lg',
 | 
			
		||||
});
 | 
			
		||||
</script>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -168,6 +168,6 @@ const headerTabs = $computed(() => []);
 | 
			
		|||
 | 
			
		||||
definePageMetadata({
 | 
			
		||||
	title: i18n.ts.share,
 | 
			
		||||
	icon: 'ph-share-network ph-bold pg-lg',
 | 
			
		||||
	icon: 'ph-share-network ph-bold ph-lg',
 | 
			
		||||
});
 | 
			
		||||
</script>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -47,7 +47,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		|||
			</MkFolder>
 | 
			
		||||
 | 
			
		||||
			<MkFolder :defaultOpen="false">
 | 
			
		||||
				<template #icon><i class="ph-code ph-bold pg-lg"></i></template>
 | 
			
		||||
				<template #icon><i class="ph-code ph-bold ph-lg"></i></template>
 | 
			
		||||
				<template #label>{{ i18n.ts.editCode }}</template>
 | 
			
		||||
 | 
			
		||||
				<div class="_gaps_m">
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
Some files were not shown because too many files have changed in this diff Show more
		Loading…
	
	Add table
		
		Reference in a new issue