Use tabler icons (#9354)
* wip * wip * wip * Update style.scss * wip * wip * wip * wip
This commit is contained in:
		
							parent
							
								
									e3b8482891
								
							
						
					
					
						commit
						917ef465a5
					
				
					 240 changed files with 981 additions and 947 deletions
				
			
		|  | @ -19,8 +19,8 @@ gulp.task('copy:client:fonts', () => | ||||||
| 	gulp.src('./packages/client/node_modules/three/examples/fonts/**/*').pipe(gulp.dest('./built/_client_dist_/fonts/')) | 	gulp.src('./packages/client/node_modules/three/examples/fonts/**/*').pipe(gulp.dest('./built/_client_dist_/fonts/')) | ||||||
| ); | ); | ||||||
| 
 | 
 | ||||||
| gulp.task('copy:client:fontawesome', () => | gulp.task('copy:client:tabler-icons', () => | ||||||
| 	gulp.src('./packages/client/node_modules/@fortawesome/fontawesome-free/**/*').pipe(gulp.dest('./built/_client_dist_/fontawesome/')) | 	gulp.src('./packages/client/node_modules/@tabler/icons/iconfont/**/*').pipe(gulp.dest('./built/_client_dist_/tabler-icons/')) | ||||||
| ); | ); | ||||||
| 
 | 
 | ||||||
| gulp.task('copy:client:locales', cb => { | gulp.task('copy:client:locales', cb => { | ||||||
|  | @ -53,7 +53,7 @@ gulp.task('build:backend:style', () => { | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| gulp.task('build', gulp.parallel( | gulp.task('build', gulp.parallel( | ||||||
| 	'copy:client:locales', 'copy:backend:views', 'build:backend:script', 'build:backend:style', 'copy:client:fonts', 'copy:client:fontawesome' | 	'copy:client:locales', 'copy:backend:views', 'build:backend:script', 'build:backend:style', 'copy:client:fonts', 'copy:client:tabler-icons' | ||||||
| )); | )); | ||||||
| 
 | 
 | ||||||
| gulp.task('default', gulp.task('build')); | gulp.task('default', gulp.task('build')); | ||||||
|  |  | ||||||
|  | @ -34,7 +34,7 @@ html | ||||||
| 		link(rel='prefetch' href='https://xn--931a.moe/assets/info.jpg') | 		link(rel='prefetch' href='https://xn--931a.moe/assets/info.jpg') | ||||||
| 		link(rel='prefetch' href='https://xn--931a.moe/assets/not-found.jpg') | 		link(rel='prefetch' href='https://xn--931a.moe/assets/not-found.jpg') | ||||||
| 		link(rel='prefetch' href='https://xn--931a.moe/assets/error.jpg') | 		link(rel='prefetch' href='https://xn--931a.moe/assets/error.jpg') | ||||||
| 		link(rel='stylesheet' href='/assets/fontawesome/css/all.css') | 		link(rel='stylesheet' href='/assets/tabler-icons/tabler-icons.css') | ||||||
| 		link(rel='modulepreload' href=`/assets/${clientEntry.file}`) | 		link(rel='modulepreload' href=`/assets/${clientEntry.file}`) | ||||||
| 
 | 
 | ||||||
| 		if Array.isArray(clientEntry.css) | 		if Array.isArray(clientEntry.css) | ||||||
|  |  | ||||||
|  | @ -8,11 +8,11 @@ | ||||||
| 	}, | 	}, | ||||||
| 	"dependencies": { | 	"dependencies": { | ||||||
| 		"@discordapp/twemoji": "14.0.2", | 		"@discordapp/twemoji": "14.0.2", | ||||||
| 		"@fortawesome/fontawesome-free": "6.1.2", |  | ||||||
| 		"@rollup/plugin-alias": "4.0.2", | 		"@rollup/plugin-alias": "4.0.2", | ||||||
| 		"@rollup/plugin-json": "6.0.0", | 		"@rollup/plugin-json": "6.0.0", | ||||||
| 		"@rollup/pluginutils": "5.0.2", | 		"@rollup/pluginutils": "5.0.2", | ||||||
| 		"@syuilo/aiscript": "0.11.1", | 		"@syuilo/aiscript": "0.11.1", | ||||||
|  | 		"@tabler/icons": "^1.117.0", | ||||||
| 		"@vitejs/plugin-vue": "4.0.0", | 		"@vitejs/plugin-vue": "4.0.0", | ||||||
| 		"@vue/compiler-sfc": "3.2.45", | 		"@vue/compiler-sfc": "3.2.45", | ||||||
| 		"autobind-decorator": "2.4.0", | 		"autobind-decorator": "2.4.0", | ||||||
|  |  | ||||||
|  | @ -213,7 +213,7 @@ export async function openAccountMenu(opts: { | ||||||
| 			avatar: $i, | 			avatar: $i, | ||||||
| 		}, null, ...(opts.includeCurrentAccount ? [createItem($i)] : []), ...accountItemPromises, { | 		}, null, ...(opts.includeCurrentAccount ? [createItem($i)] : []), ...accountItemPromises, { | ||||||
| 			type: 'parent', | 			type: 'parent', | ||||||
| 			icon: 'fas fa-plus', | 			icon: 'ti ti-plus', | ||||||
| 			text: i18n.ts.addAccount, | 			text: i18n.ts.addAccount, | ||||||
| 			children: [{ | 			children: [{ | ||||||
| 				text: i18n.ts.existingAccount, | 				text: i18n.ts.existingAccount, | ||||||
|  | @ -224,7 +224,7 @@ export async function openAccountMenu(opts: { | ||||||
| 			}], | 			}], | ||||||
| 		}, { | 		}, { | ||||||
| 			type: 'link', | 			type: 'link', | ||||||
| 			icon: 'fas fa-users', | 			icon: 'ti ti-users', | ||||||
| 			text: i18n.ts.manageAccounts, | 			text: i18n.ts.manageAccounts, | ||||||
| 			to: '/settings/accounts', | 			to: '/settings/accounts', | ||||||
| 		}]], ev.currentTarget ?? ev.target, { | 		}]], ev.currentTarget ?? ev.target, { | ||||||
|  |  | ||||||
|  | @ -1,7 +1,7 @@ | ||||||
| <template> | <template> | ||||||
| <XWindow ref="uiWindow" :initial-width="400" :initial-height="500" :can-resize="true" @closed="emit('closed')"> | <XWindow ref="uiWindow" :initial-width="400" :initial-height="500" :can-resize="true" @closed="emit('closed')"> | ||||||
| 	<template #header> | 	<template #header> | ||||||
| 		<i class="fas fa-exclamation-circle" style="margin-right: 0.5em;"></i> | 		<i class="ti ti-exclamation-circle" style="margin-right: 0.5em;"></i> | ||||||
| 		<I18n :src="i18n.ts.reportAbuseOf" tag="span"> | 		<I18n :src="i18n.ts.reportAbuseOf" tag="span"> | ||||||
| 			<template #name> | 			<template #name> | ||||||
| 				<b><MkAcct :user="user"/></b> | 				<b><MkAcct :user="user"/></b> | ||||||
|  |  | ||||||
|  | @ -108,7 +108,7 @@ function onMousedown(evt: MouseEvent): void { | ||||||
| 	padding: 8px 16px; | 	padding: 8px 16px; | ||||||
| 	text-align: center; | 	text-align: center; | ||||||
| 	font-weight: normal; | 	font-weight: normal; | ||||||
| 	font-size: 1em; | 	font-size: 90%; | ||||||
| 	box-shadow: none; | 	box-shadow: none; | ||||||
| 	text-decoration: none; | 	text-decoration: none; | ||||||
| 	background: var(--buttonBg); | 	background: var(--buttonBg); | ||||||
|  |  | ||||||
|  | @ -6,14 +6,14 @@ | ||||||
| > | > | ||||||
| 	<template v-if="!wait"> | 	<template v-if="!wait"> | ||||||
| 		<template v-if="isFollowing"> | 		<template v-if="isFollowing"> | ||||||
| 			<span v-if="full">{{ i18n.ts.unfollow }}</span><i class="fas fa-minus"></i> | 			<span v-if="full">{{ i18n.ts.unfollow }}</span><i class="ti ti-minus"></i> | ||||||
| 		</template> | 		</template> | ||||||
| 		<template v-else> | 		<template v-else> | ||||||
| 			<span v-if="full">{{ i18n.ts.follow }}</span><i class="fas fa-plus"></i> | 			<span v-if="full">{{ i18n.ts.follow }}</span><i class="ti ti-plus"></i> | ||||||
| 		</template> | 		</template> | ||||||
| 	</template> | 	</template> | ||||||
| 	<template v-else> | 	<template v-else> | ||||||
| 		<span v-if="full">{{ i18n.ts.processing }}</span><i class="fas fa-spinner fa-pulse fa-fw"></i> | 		<span v-if="full">{{ i18n.ts.processing }}</span><i class="fas fa-spinner fa-pulse ti-fw"></i> | ||||||
| 	</template> | 	</template> | ||||||
| </button> | </button> | ||||||
| </template> | </template> | ||||||
|  |  | ||||||
|  | @ -2,10 +2,10 @@ | ||||||
| <MkA :to="`/channels/${channel.id}`" class="eftoefju _panel" tabindex="-1"> | <MkA :to="`/channels/${channel.id}`" class="eftoefju _panel" tabindex="-1"> | ||||||
| 	<div class="banner" :style="bannerStyle"> | 	<div class="banner" :style="bannerStyle"> | ||||||
| 		<div class="fade"></div> | 		<div class="fade"></div> | ||||||
| 		<div class="name"><i class="fas fa-satellite-dish"></i> {{ channel.name }}</div> | 		<div class="name"><i class="ti ti-device-tv"></i> {{ channel.name }}</div> | ||||||
| 		<div class="status"> | 		<div class="status"> | ||||||
| 			<div> | 			<div> | ||||||
| 				<i class="fas fa-users fa-fw"></i> | 				<i class="ti ti-users ti-fw"></i> | ||||||
| 				<I18n :src="i18n.ts._channel.usersCount" tag="span" style="margin-left: 4px;"> | 				<I18n :src="i18n.ts._channel.usersCount" tag="span" style="margin-left: 4px;"> | ||||||
| 					<template #n> | 					<template #n> | ||||||
| 						<b>{{ channel.usersCount }}</b> | 						<b>{{ channel.usersCount }}</b> | ||||||
|  | @ -13,7 +13,7 @@ | ||||||
| 				</I18n> | 				</I18n> | ||||||
| 			</div> | 			</div> | ||||||
| 			<div> | 			<div> | ||||||
| 				<i class="fas fa-pencil-alt fa-fw"></i> | 				<i class="ti ti-pencil ti-fw"></i> | ||||||
| 				<I18n :src="i18n.ts._channel.notesCount" tag="span" style="margin-left: 4px;"> | 				<I18n :src="i18n.ts._channel.notesCount" tag="span" style="margin-left: 4px;"> | ||||||
| 					<template #n> | 					<template #n> | ||||||
| 						<b>{{ channel.notesCount }}</b> | 						<b>{{ channel.notesCount }}</b> | ||||||
|  |  | ||||||
|  | @ -5,8 +5,8 @@ | ||||||
| 		<div class="sub"> | 		<div class="sub"> | ||||||
| 			<slot name="func"></slot> | 			<slot name="func"></slot> | ||||||
| 			<button v-if="foldable" class="_button" @click="() => showBody = !showBody"> | 			<button v-if="foldable" class="_button" @click="() => showBody = !showBody"> | ||||||
| 				<template v-if="showBody"><i class="fas fa-angle-up"></i></template> | 				<template v-if="showBody"><i class="ti ti-chevron-up"></i></template> | ||||||
| 				<template v-else><i class="fas fa-angle-down"></i></template> | 				<template v-else><i class="ti ti-chevron-down"></i></template> | ||||||
| 			</button> | 			</button> | ||||||
| 		</div> | 		</div> | ||||||
| 	</header> | 	</header> | ||||||
|  |  | ||||||
|  | @ -64,14 +64,14 @@ export default defineComponent({ | ||||||
| 				}, [ | 				}, [ | ||||||
| 					h('span', [ | 					h('span', [ | ||||||
| 						h('i', { | 						h('i', { | ||||||
| 							class: 'fas fa-angle-up icon', | 							class: 'ti ti-chevron-up icon', | ||||||
| 						}), | 						}), | ||||||
| 						getDateText(item.createdAt), | 						getDateText(item.createdAt), | ||||||
| 					]), | 					]), | ||||||
| 					h('span', [ | 					h('span', [ | ||||||
| 						getDateText(props.items[i + 1].createdAt), | 						getDateText(props.items[i + 1].createdAt), | ||||||
| 						h('i', { | 						h('i', { | ||||||
| 							class: 'fas fa-angle-down icon', | 							class: 'ti ti-chevron-down icon', | ||||||
| 						}), | 						}), | ||||||
| 					]), | 					]), | ||||||
| 				])); | 				])); | ||||||
|  |  | ||||||
|  | @ -5,17 +5,17 @@ | ||||||
| 			<i :class="icon"></i> | 			<i :class="icon"></i> | ||||||
| 		</div> | 		</div> | ||||||
| 		<div v-else-if="!input && !select" class="icon" :class="type"> | 		<div v-else-if="!input && !select" class="icon" :class="type"> | ||||||
| 			<i v-if="type === 'success'" class="fas fa-check"></i> | 			<i v-if="type === 'success'" class="ti ti-check"></i> | ||||||
| 			<i v-else-if="type === 'error'" class="fas fa-times-circle"></i> | 			<i v-else-if="type === 'error'" class="ti ti-circle-x"></i> | ||||||
| 			<i v-else-if="type === 'warning'" class="fas fa-exclamation-triangle"></i> | 			<i v-else-if="type === 'warning'" class="ti ti-alert-triangle"></i> | ||||||
| 			<i v-else-if="type === 'info'" class="fas fa-info-circle"></i> | 			<i v-else-if="type === 'info'" class="ti ti-info-circle"></i> | ||||||
| 			<i v-else-if="type === 'question'" class="fas fa-question-circle"></i> | 			<i v-else-if="type === 'question'" class="ti ti-question-circle"></i> | ||||||
| 			<i v-else-if="type === 'waiting'" class="fas fa-spinner fa-pulse"></i> | 			<i v-else-if="type === 'waiting'" class="fas fa-spinner fa-pulse"></i> | ||||||
| 		</div> | 		</div> | ||||||
| 		<header v-if="title"><Mfm :text="title"/></header> | 		<header v-if="title"><Mfm :text="title"/></header> | ||||||
| 		<div v-if="text" class="body"><Mfm :text="text"/></div> | 		<div v-if="text" class="body"><Mfm :text="text"/></div> | ||||||
| 		<MkInput v-if="input" v-model="inputValue" autofocus :type="input.type || 'text'" :placeholder="input.placeholder || undefined" @keydown="onInputKeydown"> | 		<MkInput v-if="input" v-model="inputValue" autofocus :type="input.type || 'text'" :placeholder="input.placeholder || undefined" @keydown="onInputKeydown"> | ||||||
| 			<template v-if="input.type === 'password'" #prefix><i class="fas fa-lock"></i></template> | 			<template v-if="input.type === 'password'" #prefix><i class="ti ti-lock"></i></template> | ||||||
| 		</MkInput> | 		</MkInput> | ||||||
| 		<MkSelect v-if="select" v-model="selectedValue" autofocus> | 		<MkSelect v-if="select" v-model="selectedValue" autofocus> | ||||||
| 			<template v-if="select.items"> | 			<template v-if="select.items"> | ||||||
|  | @ -155,7 +155,7 @@ onBeforeUnmount(() => { | ||||||
| 	border-radius: var(--radius); | 	border-radius: var(--radius); | ||||||
| 
 | 
 | ||||||
| 	> .icon { | 	> .icon { | ||||||
| 		font-size: 32px; | 		font-size: 24px; | ||||||
| 
 | 
 | ||||||
| 		&.info { | 		&.info { | ||||||
| 			color: #55c4dd; | 			color: #55c4dd; | ||||||
|  |  | ||||||
|  | @ -63,30 +63,30 @@ const title = computed(() => `${props.file.name}\n${props.file.type} ${bytes(pro | ||||||
| function getMenu() { | function getMenu() { | ||||||
| 	return [{ | 	return [{ | ||||||
| 		text: i18n.ts.rename, | 		text: i18n.ts.rename, | ||||||
| 		icon: 'fas fa-i-cursor', | 		icon: 'ti ti-cursor-text', | ||||||
| 		action: rename, | 		action: rename, | ||||||
| 	}, { | 	}, { | ||||||
| 		text: props.file.isSensitive ? i18n.ts.unmarkAsSensitive : i18n.ts.markAsSensitive, | 		text: props.file.isSensitive ? i18n.ts.unmarkAsSensitive : i18n.ts.markAsSensitive, | ||||||
| 		icon: props.file.isSensitive ? 'fas fa-eye' : 'fas fa-eye-slash', | 		icon: props.file.isSensitive ? 'ti ti-eye' : 'ti ti-eye-off', | ||||||
| 		action: toggleSensitive, | 		action: toggleSensitive, | ||||||
| 	}, { | 	}, { | ||||||
| 		text: i18n.ts.describeFile, | 		text: i18n.ts.describeFile, | ||||||
| 		icon: 'fas fa-i-cursor', | 		icon: 'ti ti-cursor-text', | ||||||
| 		action: describe, | 		action: describe, | ||||||
| 	}, null, { | 	}, null, { | ||||||
| 		text: i18n.ts.copyUrl, | 		text: i18n.ts.copyUrl, | ||||||
| 		icon: 'fas fa-link', | 		icon: 'ti ti-link', | ||||||
| 		action: copyUrl, | 		action: copyUrl, | ||||||
| 	}, { | 	}, { | ||||||
| 		type: 'a', | 		type: 'a', | ||||||
| 		href: props.file.url, | 		href: props.file.url, | ||||||
| 		target: '_blank', | 		target: '_blank', | ||||||
| 		text: i18n.ts.download, | 		text: i18n.ts.download, | ||||||
| 		icon: 'fas fa-download', | 		icon: 'ti ti-download', | ||||||
| 		download: props.file.name, | 		download: props.file.name, | ||||||
| 	}, null, { | 	}, null, { | ||||||
| 		text: i18n.ts.delete, | 		text: i18n.ts.delete, | ||||||
| 		icon: 'fas fa-trash-alt', | 		icon: 'ti ti-trash', | ||||||
| 		danger: true, | 		danger: true, | ||||||
| 		action: deleteFile, | 		action: deleteFile, | ||||||
| 	}]; | 	}]; | ||||||
|  |  | ||||||
|  | @ -16,8 +16,8 @@ | ||||||
| 	@dragend="onDragend" | 	@dragend="onDragend" | ||||||
| > | > | ||||||
| 	<p class="name"> | 	<p class="name"> | ||||||
| 		<template v-if="hover"><i class="fas fa-folder-open fa-fw"></i></template> | 		<template v-if="hover"><i class="fas fa-folder-open ti-fw"></i></template> | ||||||
| 		<template v-if="!hover"><i class="fas fa-folder fa-fw"></i></template> | 		<template v-if="!hover"><i class="fas fa-folder ti-fw"></i></template> | ||||||
| 		{{ folder.name }} | 		{{ folder.name }} | ||||||
| 	</p> | 	</p> | ||||||
| 	<p v-if="defaultStore.state.uploadFolder == folder.id" class="upload"> | 	<p v-if="defaultStore.state.uploadFolder == folder.id" class="upload"> | ||||||
|  | @ -253,11 +253,11 @@ function onContextmenu(ev: MouseEvent) { | ||||||
| 		}, | 		}, | ||||||
| 	}, null, { | 	}, null, { | ||||||
| 		text: i18n.ts.rename, | 		text: i18n.ts.rename, | ||||||
| 		icon: 'fas fa-i-cursor', | 		icon: 'ti ti-cursor-text', | ||||||
| 		action: rename, | 		action: rename, | ||||||
| 	}, null, { | 	}, null, { | ||||||
| 		text: i18n.ts.delete, | 		text: i18n.ts.delete, | ||||||
| 		icon: 'fas fa-trash-alt', | 		icon: 'ti ti-trash', | ||||||
| 		danger: true, | 		danger: true, | ||||||
| 		action: deleteFolder, | 		action: deleteFolder, | ||||||
| 	}], ev); | 	}], ev); | ||||||
|  |  | ||||||
|  | @ -7,7 +7,7 @@ | ||||||
| 	@dragleave="onDragleave" | 	@dragleave="onDragleave" | ||||||
| 	@drop.stop="onDrop" | 	@drop.stop="onDrop" | ||||||
| > | > | ||||||
| 	<i v-if="folder == null" class="fas fa-cloud"></i> | 	<i v-if="folder == null" class="ti ti-cloud"></i> | ||||||
| 	<span>{{ folder == null ? i18n.ts.drive : folder.name }}</span> | 	<span>{{ folder == null ? i18n.ts.drive : folder.name }}</span> | ||||||
| </div> | </div> | ||||||
| </template> | </template> | ||||||
|  |  | ||||||
|  | @ -11,7 +11,7 @@ | ||||||
| 				@removeFolder="removeFolder" | 				@removeFolder="removeFolder" | ||||||
| 			/> | 			/> | ||||||
| 			<template v-for="f in hierarchyFolders"> | 			<template v-for="f in hierarchyFolders"> | ||||||
| 				<span class="separator"><i class="fas fa-angle-right"></i></span> | 				<span class="separator"><i class="ti ti-chevron-right"></i></span> | ||||||
| 				<XNavFolder | 				<XNavFolder | ||||||
| 					:folder="f" | 					:folder="f" | ||||||
| 					:parent-folder="folder" | 					:parent-folder="folder" | ||||||
|  | @ -21,10 +21,10 @@ | ||||||
| 					@removeFolder="removeFolder" | 					@removeFolder="removeFolder" | ||||||
| 				/> | 				/> | ||||||
| 			</template> | 			</template> | ||||||
| 			<span v-if="folder != null" class="separator"><i class="fas fa-angle-right"></i></span> | 			<span v-if="folder != null" class="separator"><i class="ti ti-chevron-right"></i></span> | ||||||
| 			<span v-if="folder != null" class="folder current">{{ folder.name }}</span> | 			<span v-if="folder != null" class="folder current">{{ folder.name }}</span> | ||||||
| 		</div> | 		</div> | ||||||
| 		<button class="menu _button" @click="showMenu"><i class="fas fa-ellipsis-h"></i></button> | 		<button class="menu _button" @click="showMenu"><i class="ti ti-dots"></i></button> | ||||||
| 	</nav> | 	</nav> | ||||||
| 	<div | 	<div | ||||||
| 		ref="main" class="main" | 		ref="main" class="main" | ||||||
|  | @ -588,22 +588,22 @@ function getMenu() { | ||||||
| 		type: 'label', | 		type: 'label', | ||||||
| 	}, { | 	}, { | ||||||
| 		text: i18n.ts.upload, | 		text: i18n.ts.upload, | ||||||
| 		icon: 'fas fa-upload', | 		icon: 'ti ti-upload', | ||||||
| 		action: () => { selectLocalFile(); }, | 		action: () => { selectLocalFile(); }, | ||||||
| 	}, { | 	}, { | ||||||
| 		text: i18n.ts.fromUrl, | 		text: i18n.ts.fromUrl, | ||||||
| 		icon: 'fas fa-link', | 		icon: 'ti ti-link', | ||||||
| 		action: () => { urlUpload(); }, | 		action: () => { urlUpload(); }, | ||||||
| 	}, null, { | 	}, null, { | ||||||
| 		text: folder.value ? folder.value.name : i18n.ts.drive, | 		text: folder.value ? folder.value.name : i18n.ts.drive, | ||||||
| 		type: 'label', | 		type: 'label', | ||||||
| 	}, folder.value ? { | 	}, folder.value ? { | ||||||
| 		text: i18n.ts.renameFolder, | 		text: i18n.ts.renameFolder, | ||||||
| 		icon: 'fas fa-i-cursor', | 		icon: 'ti ti-cursor-text', | ||||||
| 		action: () => { renameFolder(folder.value); }, | 		action: () => { renameFolder(folder.value); }, | ||||||
| 	} : undefined, folder.value ? { | 	} : undefined, folder.value ? { | ||||||
| 		text: i18n.ts.deleteFolder, | 		text: i18n.ts.deleteFolder, | ||||||
| 		icon: 'fas fa-trash-alt', | 		icon: 'ti ti-trash', | ||||||
| 		action: () => { deleteFolder(folder.value as Misskey.entities.DriveFolder); }, | 		action: () => { deleteFolder(folder.value as Misskey.entities.DriveFolder); }, | ||||||
| 	} : undefined, { | 	} : undefined, { | ||||||
| 		text: i18n.ts.createFolder, | 		text: i18n.ts.createFolder, | ||||||
|  |  | ||||||
|  | @ -1,16 +1,16 @@ | ||||||
| <template> | <template> | ||||||
| <div ref="thumbnail" class="zdjebgpv"> | <div ref="thumbnail" class="zdjebgpv"> | ||||||
| 	<ImgWithBlurhash v-if="isThumbnailAvailable" :hash="file.blurhash" :src="file.thumbnailUrl" :alt="file.name" :title="file.name" :cover="fit !== 'contain'"/> | 	<ImgWithBlurhash v-if="isThumbnailAvailable" :hash="file.blurhash" :src="file.thumbnailUrl" :alt="file.name" :title="file.name" :cover="fit !== 'contain'"/> | ||||||
| 	<i v-else-if="is === 'image'" class="fas fa-file-image icon"></i> | 	<i v-else-if="is === 'image'" class="ti ti-photo icon"></i> | ||||||
| 	<i v-else-if="is === 'video'" class="fas fa-file-video icon"></i> | 	<i v-else-if="is === 'video'" class="ti ti-video icon"></i> | ||||||
| 	<i v-else-if="is === 'audio' || is === 'midi'" class="fas fa-music icon"></i> | 	<i v-else-if="is === 'audio' || is === 'midi'" class="ti ti-file-music icon"></i> | ||||||
| 	<i v-else-if="is === 'csv'" class="fas fa-file-csv icon"></i> | 	<i v-else-if="is === 'csv'" class="ti ti-file-text icon"></i> | ||||||
| 	<i v-else-if="is === 'pdf'" class="fas fa-file-pdf icon"></i> | 	<i v-else-if="is === 'pdf'" class="ti ti-file-text icon"></i> | ||||||
| 	<i v-else-if="is === 'textfile'" class="fas fa-file-alt icon"></i> | 	<i v-else-if="is === 'textfile'" class="ti ti-file-text icon"></i> | ||||||
| 	<i v-else-if="is === 'archive'" class="fas fa-file-archive icon"></i> | 	<i v-else-if="is === 'archive'" class="ti ti-file-zip icon"></i> | ||||||
| 	<i v-else class="fas fa-file icon"></i> | 	<i v-else class="ti ti-file icon"></i> | ||||||
| 
 | 
 | ||||||
| 	<i v-if="isThumbnailAvailable && is === 'video'" class="fas fa-film icon-sub"></i> | 	<i v-if="isThumbnailAvailable && is === 'video'" class="ti ti-video icon-sub"></i> | ||||||
| </div> | </div> | ||||||
| </template> | </template> | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -2,7 +2,7 @@ | ||||||
| <!-- このコンポーネントの要素のclassは親から利用されるのでむやみに弄らないこと --> | <!-- このコンポーネントの要素のclassは親から利用されるのでむやみに弄らないこと --> | ||||||
| <section> | <section> | ||||||
| 	<header class="_acrylic" @click="shown = !shown"> | 	<header class="_acrylic" @click="shown = !shown"> | ||||||
| 		<i class="toggle fa-fw" :class="shown ? 'fas fa-chevron-down' : 'fas fa-chevron-up'"></i> <slot></slot> ({{ emojis.length }}) | 		<i class="toggle ti-fw" :class="shown ? 'ti ti-chevron-down' : 'ti ti-chevron-up'"></i> <slot></slot> ({{ emojis.length }}) | ||||||
| 	</header> | 	</header> | ||||||
| 	<div v-if="shown" class="body"> | 	<div v-if="shown" class="body"> | ||||||
| 		<button | 		<button | ||||||
|  |  | ||||||
|  | @ -46,7 +46,7 @@ | ||||||
| 			</section> | 			</section> | ||||||
| 
 | 
 | ||||||
| 			<section> | 			<section> | ||||||
| 				<header class="_acrylic"><i class="far fa-clock fa-fw"></i> {{ i18n.ts.recentUsed }}</header> | 				<header class="_acrylic"><i class="far fa-clock ti-fw"></i> {{ i18n.ts.recentUsed }}</header> | ||||||
| 				<div class="body"> | 				<div class="body"> | ||||||
| 					<button | 					<button | ||||||
| 						v-for="emoji in recentlyUsedEmojis" | 						v-for="emoji in recentlyUsedEmojis" | ||||||
|  | @ -69,10 +69,10 @@ | ||||||
| 		</div> | 		</div> | ||||||
| 	</div> | 	</div> | ||||||
| 	<div class="tabs"> | 	<div class="tabs"> | ||||||
| 		<button class="_button tab" :class="{ active: tab === 'index' }" @click="tab = 'index'"><i class="fas fa-asterisk fa-fw"></i></button> | 		<button class="_button tab" :class="{ active: tab === 'index' }" @click="tab = 'index'"><i class="fas fa-asterisk ti-fw"></i></button> | ||||||
| 		<button class="_button tab" :class="{ active: tab === 'custom' }" @click="tab = 'custom'"><i class="fas fa-laugh fa-fw"></i></button> | 		<button class="_button tab" :class="{ active: tab === 'custom' }" @click="tab = 'custom'"><i class="ti ti-mood-happy ti-fw"></i></button> | ||||||
| 		<button class="_button tab" :class="{ active: tab === 'unicode' }" @click="tab = 'unicode'"><i class="fas fa-leaf fa-fw"></i></button> | 		<button class="_button tab" :class="{ active: tab === 'unicode' }" @click="tab = 'unicode'"><i class="fas fa-leaf ti-fw"></i></button> | ||||||
| 		<button class="_button tab" :class="{ active: tab === 'tags' }" @click="tab = 'tags'"><i class="fas fa-hashtag fa-fw"></i></button> | 		<button class="_button tab" :class="{ active: tab === 'tags' }" @click="tab = 'tags'"><i class="ti ti-hash ti-fw"></i></button> | ||||||
| 	</div> | 	</div> | ||||||
| </div> | </div> | ||||||
| </template> | </template> | ||||||
|  |  | ||||||
|  | @ -4,8 +4,8 @@ | ||||||
| 		<div class="title"><slot name="header"></slot></div> | 		<div class="title"><slot name="header"></slot></div> | ||||||
| 		<div class="divider"></div> | 		<div class="divider"></div> | ||||||
| 		<button class="_button"> | 		<button class="_button"> | ||||||
| 			<template v-if="showBody"><i class="fas fa-angle-up"></i></template> | 			<template v-if="showBody"><i class="ti ti-chevron-up"></i></template> | ||||||
| 			<template v-else><i class="fas fa-angle-down"></i></template> | 			<template v-else><i class="ti ti-chevron-down"></i></template> | ||||||
| 		</button> | 		</button> | ||||||
| 	</header> | 	</header> | ||||||
| 	<transition :name="$store.state.animation ? 'folder-toggle' : ''" | 	<transition :name="$store.state.animation ? 'folder-toggle' : ''" | ||||||
|  |  | ||||||
|  | @ -12,17 +12,17 @@ | ||||||
| 			<span v-if="full">{{ i18n.ts.processing }}</span><i class="fas fa-spinner fa-pulse"></i> | 			<span v-if="full">{{ i18n.ts.processing }}</span><i class="fas fa-spinner fa-pulse"></i> | ||||||
| 		</template> | 		</template> | ||||||
| 		<template v-else-if="isFollowing"> | 		<template v-else-if="isFollowing"> | ||||||
| 			<span v-if="full">{{ i18n.ts.unfollow }}</span><i class="fas fa-minus"></i> | 			<span v-if="full">{{ i18n.ts.unfollow }}</span><i class="ti ti-minus"></i> | ||||||
| 		</template> | 		</template> | ||||||
| 		<template v-else-if="!isFollowing && user.isLocked"> | 		<template v-else-if="!isFollowing && user.isLocked"> | ||||||
| 			<span v-if="full">{{ i18n.ts.followRequest }}</span><i class="fas fa-plus"></i> | 			<span v-if="full">{{ i18n.ts.followRequest }}</span><i class="ti ti-plus"></i> | ||||||
| 		</template> | 		</template> | ||||||
| 		<template v-else-if="!isFollowing && !user.isLocked"> | 		<template v-else-if="!isFollowing && !user.isLocked"> | ||||||
| 			<span v-if="full">{{ i18n.ts.follow }}</span><i class="fas fa-plus"></i> | 			<span v-if="full">{{ i18n.ts.follow }}</span><i class="ti ti-plus"></i> | ||||||
| 		</template> | 		</template> | ||||||
| 	</template> | 	</template> | ||||||
| 	<template v-else> | 	<template v-else> | ||||||
| 		<span v-if="full">{{ i18n.ts.processing }}</span><i class="fas fa-spinner fa-pulse fa-fw"></i> | 		<span v-if="full">{{ i18n.ts.processing }}</span><i class="fas fa-spinner fa-pulse ti-fw"></i> | ||||||
| 	</template> | 	</template> | ||||||
| </button> | </button> | ||||||
| </template> | </template> | ||||||
|  |  | ||||||
|  | @ -1,7 +1,7 @@ | ||||||
| <template> | <template> | ||||||
| <div class="mk-google"> | <div class="mk-google"> | ||||||
| 	<input v-model="query" type="search" :placeholder="q"> | 	<input v-model="query" type="search" :placeholder="q"> | ||||||
| 	<button @click="search"><i class="fas fa-search"></i> {{ $ts.searchByGoogle }}</button> | 	<button @click="search"><i class="ti ti-search"></i> {{ $ts.searchByGoogle }}</button> | ||||||
| </div> | </div> | ||||||
| </template> | </template> | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,7 +1,7 @@ | ||||||
| <template> | <template> | ||||||
| <div class="fpezltsf" :class="{ warn }"> | <div class="fpezltsf" :class="{ warn }"> | ||||||
| 	<i v-if="warn" class="fas fa-exclamation-triangle"></i> | 	<i v-if="warn" class="ti ti-alert-triangle"></i> | ||||||
| 	<i v-else class="fas fa-info-circle"></i> | 	<i v-else class="ti ti-info-circle"></i> | ||||||
| 	<slot></slot> | 	<slot></slot> | ||||||
| </div> | </div> | ||||||
| </template> | </template> | ||||||
|  |  | ||||||
|  | @ -6,12 +6,12 @@ | ||||||
| 				<button v-if="item.action" v-click-anime class="_button" @click="$event => { item.action($event); close(); }"> | 				<button v-if="item.action" v-click-anime class="_button" @click="$event => { item.action($event); close(); }"> | ||||||
| 					<i class="icon" :class="item.icon"></i> | 					<i class="icon" :class="item.icon"></i> | ||||||
| 					<div class="text">{{ item.text }}</div> | 					<div class="text">{{ item.text }}</div> | ||||||
| 					<span v-if="item.indicate" class="indicator"><i class="fas fa-circle"></i></span> | 					<span v-if="item.indicate" class="indicator"><i class="_indicatorCircle"></i></span> | ||||||
| 				</button> | 				</button> | ||||||
| 				<MkA v-else v-click-anime :to="item.to" @click.passive="close()"> | 				<MkA v-else v-click-anime :to="item.to" @click.passive="close()"> | ||||||
| 					<i class="icon" :class="item.icon"></i> | 					<i class="icon" :class="item.icon"></i> | ||||||
| 					<div class="text">{{ item.text }}</div> | 					<div class="text">{{ item.text }}</div> | ||||||
| 					<span v-if="item.indicate" class="indicator"><i class="fas fa-circle"></i></span> | 					<span v-if="item.indicate" class="indicator"><i class="_indicatorCircle"></i></span> | ||||||
| 				</MkA> | 				</MkA> | ||||||
| 			</template> | 			</template> | ||||||
| 		</div> | 		</div> | ||||||
|  |  | ||||||
|  | @ -1,9 +1,10 @@ | ||||||
| <template> | <template> | ||||||
| <component :is="self ? 'MkA' : 'a'" ref="el" class="xlcxczvw _link" :[attr]="self ? url.substr(local.length) : url" :rel="rel" :target="target" | <component | ||||||
|  | 	:is="self ? 'MkA' : 'a'" ref="el" class="xlcxczvw _link" :[attr]="self ? url.substr(local.length) : url" :rel="rel" :target="target" | ||||||
| 	:title="url" | 	:title="url" | ||||||
| > | > | ||||||
| 	<slot></slot> | 	<slot></slot> | ||||||
| 	<i v-if="target === '_blank'" class="fas fa-external-link-square-alt icon"></i> | 	<i v-if="target === '_blank'" class="ti ti-external-link icon"></i> | ||||||
| </component> | </component> | ||||||
| </template> | </template> | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,25 +1,28 @@ | ||||||
| <template> | <template> | ||||||
| <div class="mk-media-banner"> | <div class="mk-media-banner"> | ||||||
| 	<div v-if="media.isSensitive && hide" class="sensitive" @click="hide = false"> | 	<div v-if="media.isSensitive && hide" class="sensitive" @click="hide = false"> | ||||||
| 		<span class="icon"><i class="fas fa-exclamation-triangle"></i></span> | 		<span class="icon"><i class="ti ti-alert-triangle"></i></span> | ||||||
| 		<b>{{ $ts.sensitive }}</b> | 		<b>{{ $ts.sensitive }}</b> | ||||||
| 		<span>{{ $ts.clickToShow }}</span> | 		<span>{{ $ts.clickToShow }}</span> | ||||||
| 	</div> | 	</div> | ||||||
| 	<div v-else-if="media.type.startsWith('audio') && media.type !== 'audio/midi'" class="audio"> | 	<div v-else-if="media.type.startsWith('audio') && media.type !== 'audio/midi'" class="audio"> | ||||||
| 		<audio ref="audioEl" | 		<audio | ||||||
|  | 			ref="audioEl" | ||||||
| 			class="audio" | 			class="audio" | ||||||
| 			:src="media.url" | 			:src="media.url" | ||||||
| 			:title="media.name" | 			:title="media.name" | ||||||
| 			controls | 			controls | ||||||
| 			preload="metadata" | 			preload="metadata" | ||||||
| 			@volumechange="volumechange" /> | 			@volumechange="volumechange" | ||||||
|  | 		/> | ||||||
| 	</div> | 	</div> | ||||||
| 	<a v-else class="download" | 	<a | ||||||
|  | 		v-else class="download" | ||||||
| 		:href="media.url" | 		:href="media.url" | ||||||
| 		:title="media.name" | 		:title="media.name" | ||||||
| 		:download="media.name" | 		:download="media.name" | ||||||
| 	> | 	> | ||||||
| 		<span class="icon"><i class="fas fa-download"></i></span> | 		<span class="icon"><i class="ti ti-download"></i></span> | ||||||
| 		<b>{{ media.name }}</b> | 		<b>{{ media.name }}</b> | ||||||
| 	</a> | 	</a> | ||||||
| </div> | </div> | ||||||
|  |  | ||||||
|  | @ -3,7 +3,7 @@ | ||||||
| 	<ImgWithBlurhash class="bg" :hash="image.blurhash" :title="image.comment" :alt="image.comment"/> | 	<ImgWithBlurhash class="bg" :hash="image.blurhash" :title="image.comment" :alt="image.comment"/> | ||||||
| 	<div class="text"> | 	<div class="text"> | ||||||
| 		<div class="wrapper"> | 		<div class="wrapper"> | ||||||
| 			<b style="display: block;"><i class="fas fa-exclamation-triangle"></i> {{ $ts.sensitive }}</b> | 			<b style="display: block;"><i class="ti ti-alert-triangle"></i> {{ $ts.sensitive }}</b> | ||||||
| 			<span style="display: block;">{{ $ts.clickToShow }}</span> | 			<span style="display: block;">{{ $ts.clickToShow }}</span> | ||||||
| 		</div> | 		</div> | ||||||
| 	</div> | 	</div> | ||||||
|  | @ -16,7 +16,7 @@ | ||||||
| 		<ImgWithBlurhash :hash="image.blurhash" :src="url" :alt="image.comment" :title="image.comment" :cover="false"/> | 		<ImgWithBlurhash :hash="image.blurhash" :src="url" :alt="image.comment" :title="image.comment" :cover="false"/> | ||||||
| 		<div v-if="image.type === 'image/gif'" class="gif">GIF</div> | 		<div v-if="image.type === 'image/gif'" class="gif">GIF</div> | ||||||
| 	</a> | 	</a> | ||||||
| 	<button v-tooltip="$ts.hide" class="_button hide" @click="hide = true"><i class="fas fa-eye-slash"></i></button> | 	<button v-tooltip="$ts.hide" class="_button hide" @click="hide = true"><i class="ti ti-eye-off"></i></button> | ||||||
| </div> | </div> | ||||||
| </template> | </template> | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,7 +1,7 @@ | ||||||
| <template> | <template> | ||||||
| <div v-if="hide" class="icozogqfvdetwohsdglrbswgrejoxbdj" @click="hide = false"> | <div v-if="hide" class="icozogqfvdetwohsdglrbswgrejoxbdj" @click="hide = false"> | ||||||
| 	<div> | 	<div> | ||||||
| 		<b><i class="fas fa-exclamation-triangle"></i> {{ $ts.sensitive }}</b> | 		<b><i class="ti ti-alert-triangle"></i> {{ $ts.sensitive }}</b> | ||||||
| 		<span>{{ $ts.clickToShow }}</span> | 		<span>{{ $ts.clickToShow }}</span> | ||||||
| 	</div> | 	</div> | ||||||
| </div> | </div> | ||||||
|  | @ -19,7 +19,7 @@ | ||||||
| 			:type="video.type" | 			:type="video.type" | ||||||
| 		> | 		> | ||||||
| 	</video> | 	</video> | ||||||
| 	<i class="fas fa-eye-slash" @click="hide = true"></i> | 	<i class="ti ti-eye-off" @click="hide = true"></i> | ||||||
| </div> | </div> | ||||||
| </template> | </template> | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -16,33 +16,33 @@ | ||||||
| 				<span><MkEllipsis/></span> | 				<span><MkEllipsis/></span> | ||||||
| 			</span> | 			</span> | ||||||
| 			<MkA v-else-if="item.type === 'link'" :to="item.to" :tabindex="i" class="_button item" @click.passive="close(true)" @mouseenter.passive="onItemMouseEnter(item)" @mouseleave.passive="onItemMouseLeave(item)"> | 			<MkA v-else-if="item.type === 'link'" :to="item.to" :tabindex="i" class="_button item" @click.passive="close(true)" @mouseenter.passive="onItemMouseEnter(item)" @mouseleave.passive="onItemMouseLeave(item)"> | ||||||
| 				<i v-if="item.icon" class="fa-fw" :class="item.icon"></i> | 				<i v-if="item.icon" class="ti-fw" :class="item.icon"></i> | ||||||
| 				<MkAvatar v-if="item.avatar" :user="item.avatar" class="avatar"/> | 				<MkAvatar v-if="item.avatar" :user="item.avatar" class="avatar"/> | ||||||
| 				<span>{{ item.text }}</span> | 				<span>{{ item.text }}</span> | ||||||
| 				<span v-if="item.indicate" class="indicator"><i class="fas fa-circle"></i></span> | 				<span v-if="item.indicate" class="indicator"><i class="_indicatorCircle"></i></span> | ||||||
| 			</MkA> | 			</MkA> | ||||||
| 			<a v-else-if="item.type === 'a'" :href="item.href" :target="item.target" :download="item.download" :tabindex="i" class="_button item" @click="close(true)" @mouseenter.passive="onItemMouseEnter(item)" @mouseleave.passive="onItemMouseLeave(item)"> | 			<a v-else-if="item.type === 'a'" :href="item.href" :target="item.target" :download="item.download" :tabindex="i" class="_button item" @click="close(true)" @mouseenter.passive="onItemMouseEnter(item)" @mouseleave.passive="onItemMouseLeave(item)"> | ||||||
| 				<i v-if="item.icon" class="fa-fw" :class="item.icon"></i> | 				<i v-if="item.icon" class="ti-fw" :class="item.icon"></i> | ||||||
| 				<span>{{ item.text }}</span> | 				<span>{{ item.text }}</span> | ||||||
| 				<span v-if="item.indicate" class="indicator"><i class="fas fa-circle"></i></span> | 				<span v-if="item.indicate" class="indicator"><i class="_indicatorCircle"></i></span> | ||||||
| 			</a> | 			</a> | ||||||
| 			<button v-else-if="item.type === 'user'" :tabindex="i" class="_button item" :class="{ active: item.active }" :disabled="item.active" @click="clicked(item.action, $event)" @mouseenter.passive="onItemMouseEnter(item)" @mouseleave.passive="onItemMouseLeave(item)"> | 			<button v-else-if="item.type === 'user'" :tabindex="i" class="_button item" :class="{ active: item.active }" :disabled="item.active" @click="clicked(item.action, $event)" @mouseenter.passive="onItemMouseEnter(item)" @mouseleave.passive="onItemMouseLeave(item)"> | ||||||
| 				<MkAvatar :user="item.user" class="avatar"/><MkUserName :user="item.user"/> | 				<MkAvatar :user="item.user" class="avatar"/><MkUserName :user="item.user"/> | ||||||
| 				<span v-if="item.indicate" class="indicator"><i class="fas fa-circle"></i></span> | 				<span v-if="item.indicate" class="indicator"><i class="_indicatorCircle"></i></span> | ||||||
| 			</button> | 			</button> | ||||||
| 			<span v-else-if="item.type === 'switch'" :tabindex="i" class="item" @mouseenter.passive="onItemMouseEnter(item)" @mouseleave.passive="onItemMouseLeave(item)"> | 			<span v-else-if="item.type === 'switch'" :tabindex="i" class="item" @mouseenter.passive="onItemMouseEnter(item)" @mouseleave.passive="onItemMouseLeave(item)"> | ||||||
| 				<FormSwitch v-model="item.ref" :disabled="item.disabled" class="form-switch">{{ item.text }}</FormSwitch> | 				<FormSwitch v-model="item.ref" :disabled="item.disabled" class="form-switch">{{ item.text }}</FormSwitch> | ||||||
| 			</span> | 			</span> | ||||||
| 			<button v-else-if="item.type === 'parent'" :tabindex="i" class="_button item parent" :class="{ childShowing: childShowingItem === item }" @mouseenter="showChildren(item, $event)"> | 			<button v-else-if="item.type === 'parent'" :tabindex="i" class="_button item parent" :class="{ childShowing: childShowingItem === item }" @mouseenter="showChildren(item, $event)"> | ||||||
| 				<i v-if="item.icon" class="fa-fw" :class="item.icon"></i> | 				<i v-if="item.icon" class="ti-fw" :class="item.icon"></i> | ||||||
| 				<span>{{ item.text }}</span> | 				<span>{{ item.text }}</span> | ||||||
| 				<span class="caret"><i class="fas fa-caret-right fa-fw"></i></span> | 				<span class="caret"><i class="ti ti-caret-right ti-fw"></i></span> | ||||||
| 			</button> | 			</button> | ||||||
| 			<button v-else :tabindex="i" class="_button item" :class="{ danger: item.danger, active: item.active }" :disabled="item.active" @click="clicked(item.action, $event)" @mouseenter.passive="onItemMouseEnter(item)" @mouseleave.passive="onItemMouseLeave(item)"> | 			<button v-else :tabindex="i" class="_button item" :class="{ danger: item.danger, active: item.active }" :disabled="item.active" @click="clicked(item.action, $event)" @mouseenter.passive="onItemMouseEnter(item)" @mouseleave.passive="onItemMouseLeave(item)"> | ||||||
| 				<i v-if="item.icon" class="fa-fw" :class="item.icon"></i> | 				<i v-if="item.icon" class="ti-fw" :class="item.icon"></i> | ||||||
| 				<MkAvatar v-if="item.avatar" :user="item.avatar" class="avatar"/> | 				<MkAvatar v-if="item.avatar" :user="item.avatar" class="avatar"/> | ||||||
| 				<span>{{ item.text }}</span> | 				<span>{{ item.text }}</span> | ||||||
| 				<span v-if="item.indicate" class="indicator"><i class="fas fa-circle"></i></span> | 				<span v-if="item.indicate" class="indicator"><i class="_indicatorCircle"></i></span> | ||||||
| 			</button> | 			</button> | ||||||
| 		</template> | 		</template> | ||||||
| 		<span v-if="items2.length === 0" class="none item"> | 		<span v-if="items2.length === 0" class="none item"> | ||||||
|  |  | ||||||
|  | @ -2,13 +2,13 @@ | ||||||
| <MkModal ref="modal" @click="$emit('click')" @closed="$emit('closed')"> | <MkModal ref="modal" @click="$emit('click')" @closed="$emit('closed')"> | ||||||
| 	<div ref="rootEl" class="hrmcaedk _narrow_" :style="{ width: `${width}px`, height: (height ? `min(${height}px, 100%)` : '100%') }"> | 	<div ref="rootEl" class="hrmcaedk _narrow_" :style="{ width: `${width}px`, height: (height ? `min(${height}px, 100%)` : '100%') }"> | ||||||
| 		<div class="header" @contextmenu="onContextmenu"> | 		<div class="header" @contextmenu="onContextmenu"> | ||||||
| 			<button v-if="history.length > 0" v-tooltip="$ts.goBack" class="_button" @click="back()"><i class="fas fa-arrow-left"></i></button> | 			<button v-if="history.length > 0" v-tooltip="$ts.goBack" class="_button" @click="back()"><i class="ti ti-arrow-left"></i></button> | ||||||
| 			<span v-else style="display: inline-block; width: 20px"></span> | 			<span v-else style="display: inline-block; width: 20px"></span> | ||||||
| 			<span v-if="pageMetadata?.value" class="title"> | 			<span v-if="pageMetadata?.value" class="title"> | ||||||
| 				<i v-if="pageMetadata?.value.icon" class="icon" :class="pageMetadata?.value.icon"></i> | 				<i v-if="pageMetadata?.value.icon" class="icon" :class="pageMetadata?.value.icon"></i> | ||||||
| 				<span>{{ pageMetadata?.value.title }}</span> | 				<span>{{ pageMetadata?.value.title }}</span> | ||||||
| 			</span> | 			</span> | ||||||
| 			<button class="_button" @click="$refs.modal.close()"><i class="fas fa-times"></i></button> | 			<button class="_button" @click="$refs.modal.close()"><i class="ti ti-x"></i></button> | ||||||
| 		</div> | 		</div> | ||||||
| 		<div class="body"> | 		<div class="body"> | ||||||
| 			<MkStickyContainer> | 			<MkStickyContainer> | ||||||
|  | @ -68,22 +68,22 @@ const contextmenu = $computed(() => { | ||||||
| 		type: 'label', | 		type: 'label', | ||||||
| 		text: path, | 		text: path, | ||||||
| 	}, { | 	}, { | ||||||
| 		icon: 'fas fa-expand-alt', | 		icon: 'ti ti-arrows-maximize', | ||||||
| 		text: i18n.ts.showInPage, | 		text: i18n.ts.showInPage, | ||||||
| 		action: expand, | 		action: expand, | ||||||
| 	}, { | 	}, { | ||||||
| 		icon: 'fas fa-external-link-alt', | 		icon: 'ti ti-external-link', | ||||||
| 		text: i18n.ts.popout, | 		text: i18n.ts.popout, | ||||||
| 		action: popout, | 		action: popout, | ||||||
| 	}, null, { | 	}, null, { | ||||||
| 		icon: 'fas fa-external-link-alt', | 		icon: 'ti ti-external-link', | ||||||
| 		text: i18n.ts.openInNewTab, | 		text: i18n.ts.openInNewTab, | ||||||
| 		action: () => { | 		action: () => { | ||||||
| 			window.open(pageUrl, '_blank'); | 			window.open(pageUrl, '_blank'); | ||||||
| 			modal.close(); | 			modal.close(); | ||||||
| 		}, | 		}, | ||||||
| 	}, { | 	}, { | ||||||
| 		icon: 'fas fa-link', | 		icon: 'ti ti-link', | ||||||
| 		text: i18n.ts.copyLink, | 		text: i18n.ts.copyLink, | ||||||
| 		action: () => { | 		action: () => { | ||||||
| 			copyToClipboard(pageUrl); | 			copyToClipboard(pageUrl); | ||||||
|  |  | ||||||
|  | @ -2,12 +2,12 @@ | ||||||
| <MkModal ref="modal" :prefer-type="'dialog'" @click="onBgClick" @closed="$emit('closed')"> | <MkModal ref="modal" :prefer-type="'dialog'" @click="onBgClick" @closed="$emit('closed')"> | ||||||
| 	<div ref="rootEl" class="ebkgoccj _narrow_" :style="{ width: `${width}px`, height: scroll ? (height ? `${height}px` : null) : (height ? `min(${height}px, 100%)` : '100%') }" @keydown="onKeydown"> | 	<div ref="rootEl" class="ebkgoccj _narrow_" :style="{ width: `${width}px`, height: scroll ? (height ? `${height}px` : null) : (height ? `min(${height}px, 100%)` : '100%') }" @keydown="onKeydown"> | ||||||
| 		<div ref="headerEl" class="header"> | 		<div ref="headerEl" class="header"> | ||||||
| 			<button v-if="withOkButton" class="_button" @click="$emit('close')"><i class="fas fa-times"></i></button> | 			<button v-if="withOkButton" class="_button" @click="$emit('close')"><i class="ti ti-x"></i></button> | ||||||
| 			<span class="title"> | 			<span class="title"> | ||||||
| 				<slot name="header"></slot> | 				<slot name="header"></slot> | ||||||
| 			</span> | 			</span> | ||||||
| 			<button v-if="!withOkButton" class="_button" @click="$emit('close')"><i class="fas fa-times"></i></button> | 			<button v-if="!withOkButton" class="_button" @click="$emit('close')"><i class="ti ti-x"></i></button> | ||||||
| 			<button v-if="withOkButton" class="_button" :disabled="okButtonDisabled" @click="$emit('ok')"><i class="fas fa-check"></i></button> | 			<button v-if="withOkButton" class="_button" :disabled="okButtonDisabled" @click="$emit('ok')"><i class="ti ti-check"></i></button> | ||||||
| 		</div> | 		</div> | ||||||
| 		<div class="body"> | 		<div class="body"> | ||||||
| 			<slot :width="bodyWidth" :height="bodyHeight"></slot> | 			<slot :width="bodyWidth" :height="bodyHeight"></slot> | ||||||
|  |  | ||||||
|  | @ -10,12 +10,12 @@ | ||||||
| 	:class="{ renote: isRenote }" | 	:class="{ renote: isRenote }" | ||||||
| > | > | ||||||
| 	<MkNoteSub v-if="appearNote.reply" :note="appearNote.reply" class="reply-to"/> | 	<MkNoteSub v-if="appearNote.reply" :note="appearNote.reply" class="reply-to"/> | ||||||
| 	<div v-if="pinned" class="info"><i class="fas fa-thumbtack"></i> {{ i18n.ts.pinnedNote }}</div> | 	<div v-if="pinned" class="info"><i class="ti ti-pin"></i> {{ i18n.ts.pinnedNote }}</div> | ||||||
| 	<div v-if="appearNote._prId_" class="info"><i class="fas fa-bullhorn"></i> {{ i18n.ts.promotion }}<button class="_textButton hide" @click="readPromo()">{{ i18n.ts.hideThisNote }} <i class="fas fa-times"></i></button></div> | 	<div v-if="appearNote._prId_" class="info"><i class="fas fa-bullhorn"></i> {{ i18n.ts.promotion }}<button class="_textButton hide" @click="readPromo()">{{ i18n.ts.hideThisNote }} <i class="ti ti-x"></i></button></div> | ||||||
| 	<div v-if="appearNote._featuredId_" class="info"><i class="fas fa-bolt"></i> {{ i18n.ts.featured }}</div> | 	<div v-if="appearNote._featuredId_" class="info"><i class="ti ti-bolt"></i> {{ i18n.ts.featured }}</div> | ||||||
| 	<div v-if="isRenote" class="renote"> | 	<div v-if="isRenote" class="renote"> | ||||||
| 		<MkAvatar class="avatar" :user="note.user"/> | 		<MkAvatar class="avatar" :user="note.user"/> | ||||||
| 		<i class="fas fa-retweet"></i> | 		<i class="ti ti-repeat"></i> | ||||||
| 		<I18n :src="i18n.ts.renotedBy" tag="span"> | 		<I18n :src="i18n.ts.renotedBy" tag="span"> | ||||||
| 			<template #user> | 			<template #user> | ||||||
| 				<MkA v-user-preview="note.userId" class="name" :to="userPage(note.user)"> | 				<MkA v-user-preview="note.userId" class="name" :to="userPage(note.user)"> | ||||||
|  | @ -25,7 +25,7 @@ | ||||||
| 		</I18n> | 		</I18n> | ||||||
| 		<div class="info"> | 		<div class="info"> | ||||||
| 			<button ref="renoteTime" class="_button time" @click="showRenoteMenu()"> | 			<button ref="renoteTime" class="_button time" @click="showRenoteMenu()"> | ||||||
| 				<i v-if="isMyRenote" class="fas fa-ellipsis-h dropdownIcon"></i> | 				<i v-if="isMyRenote" class="ti ti-dots dropdownIcon"></i> | ||||||
| 				<MkTime :time="note.createdAt"/> | 				<MkTime :time="note.createdAt"/> | ||||||
| 			</button> | 			</button> | ||||||
| 			<MkVisibility :note="note"/> | 			<MkVisibility :note="note"/> | ||||||
|  | @ -44,7 +44,7 @@ | ||||||
| 				<div v-show="appearNote.cw == null || showContent" class="content" :class="{ collapsed, isLong }"> | 				<div v-show="appearNote.cw == null || showContent" class="content" :class="{ collapsed, isLong }"> | ||||||
| 					<div class="text"> | 					<div class="text"> | ||||||
| 						<span v-if="appearNote.isHidden" style="opacity: 0.5">({{ i18n.ts.private }})</span> | 						<span v-if="appearNote.isHidden" style="opacity: 0.5">({{ i18n.ts.private }})</span> | ||||||
| 						<MkA v-if="appearNote.replyId" class="reply" :to="`/notes/${appearNote.replyId}`"><i class="fas fa-reply"></i></MkA> | 						<MkA v-if="appearNote.replyId" class="reply" :to="`/notes/${appearNote.replyId}`"><i class="ti ti-arrow-back-up"></i></MkA> | ||||||
| 						<Mfm v-if="appearNote.text" :text="appearNote.text" :author="appearNote.user" :i="$i" :custom-emojis="appearNote.emojis"/> | 						<Mfm v-if="appearNote.text" :text="appearNote.text" :author="appearNote.user" :i="$i" :custom-emojis="appearNote.emojis"/> | ||||||
| 						<a v-if="appearNote.renote != null" class="rp">RN:</a> | 						<a v-if="appearNote.renote != null" class="rp">RN:</a> | ||||||
| 						<div v-if="translating || translation" class="translation"> | 						<div v-if="translating || translation" class="translation"> | ||||||
|  | @ -68,24 +68,24 @@ | ||||||
| 						<span>{{ i18n.ts.showLess }}</span> | 						<span>{{ i18n.ts.showLess }}</span> | ||||||
| 					</button> | 					</button> | ||||||
| 				</div> | 				</div> | ||||||
| 				<MkA v-if="appearNote.channel && !inChannel" class="channel" :to="`/channels/${appearNote.channel.id}`"><i class="fas fa-satellite-dish"></i> {{ appearNote.channel.name }}</MkA> | 				<MkA v-if="appearNote.channel && !inChannel" class="channel" :to="`/channels/${appearNote.channel.id}`"><i class="ti ti-device-tv"></i> {{ appearNote.channel.name }}</MkA> | ||||||
| 			</div> | 			</div> | ||||||
| 			<footer class="footer"> | 			<footer class="footer"> | ||||||
| 				<XReactionsViewer ref="reactionsViewer" :note="appearNote"/> | 				<XReactionsViewer ref="reactionsViewer" :note="appearNote"/> | ||||||
| 				<button class="button _button" @click="reply()"> | 				<button class="button _button" @click="reply()"> | ||||||
| 					<template v-if="appearNote.reply"><i class="fas fa-reply-all"></i></template> | 					<template v-if="appearNote.reply"><i class="ti ti-arrow-back-up-all"></i></template> | ||||||
| 					<template v-else><i class="fas fa-reply"></i></template> | 					<template v-else><i class="ti ti-arrow-back-up"></i></template> | ||||||
| 					<p v-if="appearNote.repliesCount > 0" class="count">{{ appearNote.repliesCount }}</p> | 					<p v-if="appearNote.repliesCount > 0" class="count">{{ appearNote.repliesCount }}</p> | ||||||
| 				</button> | 				</button> | ||||||
| 				<XRenoteButton ref="renoteButton" class="button" :note="appearNote" :count="appearNote.renoteCount"/> | 				<XRenoteButton ref="renoteButton" class="button" :note="appearNote" :count="appearNote.renoteCount"/> | ||||||
| 				<button v-if="appearNote.myReaction == null" ref="reactButton" class="button _button" @click="react()"> | 				<button v-if="appearNote.myReaction == null" ref="reactButton" class="button _button" @click="react()"> | ||||||
| 					<i class="fas fa-plus"></i> | 					<i class="ti ti-plus"></i> | ||||||
| 				</button> | 				</button> | ||||||
| 				<button v-if="appearNote.myReaction != null" ref="reactButton" class="button _button reacted" @click="undoReact(appearNote)"> | 				<button v-if="appearNote.myReaction != null" ref="reactButton" class="button _button reacted" @click="undoReact(appearNote)"> | ||||||
| 					<i class="fas fa-minus"></i> | 					<i class="ti ti-minus"></i> | ||||||
| 				</button> | 				</button> | ||||||
| 				<button ref="menuButton" class="button _button" @click="menu()"> | 				<button ref="menuButton" class="button _button" @click="menu()"> | ||||||
| 					<i class="fas fa-ellipsis-h"></i> | 					<i class="ti ti-dots"></i> | ||||||
| 				</button> | 				</button> | ||||||
| 			</footer> | 			</footer> | ||||||
| 		</div> | 		</div> | ||||||
|  | @ -256,7 +256,7 @@ function showRenoteMenu(viaKeyboard = false): void { | ||||||
| 	if (!isMyRenote) return; | 	if (!isMyRenote) return; | ||||||
| 	os.popupMenu([{ | 	os.popupMenu([{ | ||||||
| 		text: i18n.ts.unrenote, | 		text: i18n.ts.unrenote, | ||||||
| 		icon: 'fas fa-trash-alt', | 		icon: 'ti ti-trash', | ||||||
| 		danger: true, | 		danger: true, | ||||||
| 		action: () => { | 		action: () => { | ||||||
| 			os.api('notes/delete', { | 			os.api('notes/delete', { | ||||||
|  |  | ||||||
|  | @ -13,7 +13,7 @@ | ||||||
| 	<MkNoteSub v-if="appearNote.reply" :note="appearNote.reply" class="reply-to"/> | 	<MkNoteSub v-if="appearNote.reply" :note="appearNote.reply" class="reply-to"/> | ||||||
| 	<div v-if="isRenote" class="renote"> | 	<div v-if="isRenote" class="renote"> | ||||||
| 		<MkAvatar class="avatar" :user="note.user"/> | 		<MkAvatar class="avatar" :user="note.user"/> | ||||||
| 		<i class="fas fa-retweet"></i> | 		<i class="ti ti-repeat"></i> | ||||||
| 		<I18n :src="i18n.ts.renotedBy" tag="span"> | 		<I18n :src="i18n.ts.renotedBy" tag="span"> | ||||||
| 			<template #user> | 			<template #user> | ||||||
| 				<MkA v-user-preview="note.userId" class="name" :to="userPage(note.user)"> | 				<MkA v-user-preview="note.userId" class="name" :to="userPage(note.user)"> | ||||||
|  | @ -23,7 +23,7 @@ | ||||||
| 		</I18n> | 		</I18n> | ||||||
| 		<div class="info"> | 		<div class="info"> | ||||||
| 			<button ref="renoteTime" class="_button time" @click="showRenoteMenu()"> | 			<button ref="renoteTime" class="_button time" @click="showRenoteMenu()"> | ||||||
| 				<i v-if="isMyRenote" class="fas fa-ellipsis-h dropdownIcon"></i> | 				<i v-if="isMyRenote" class="ti ti-dots dropdownIcon"></i> | ||||||
| 				<MkTime :time="note.createdAt"/> | 				<MkTime :time="note.createdAt"/> | ||||||
| 			</button> | 			</button> | ||||||
| 			<MkVisibility :note="note"/> | 			<MkVisibility :note="note"/> | ||||||
|  | @ -55,7 +55,7 @@ | ||||||
| 				<div v-show="appearNote.cw == null || showContent" class="content"> | 				<div v-show="appearNote.cw == null || showContent" class="content"> | ||||||
| 					<div class="text"> | 					<div class="text"> | ||||||
| 						<span v-if="appearNote.isHidden" style="opacity: 0.5">({{ i18n.ts.private }})</span> | 						<span v-if="appearNote.isHidden" style="opacity: 0.5">({{ i18n.ts.private }})</span> | ||||||
| 						<MkA v-if="appearNote.replyId" class="reply" :to="`/notes/${appearNote.replyId}`"><i class="fas fa-reply"></i></MkA> | 						<MkA v-if="appearNote.replyId" class="reply" :to="`/notes/${appearNote.replyId}`"><i class="ti ti-arrow-back-up"></i></MkA> | ||||||
| 						<Mfm v-if="appearNote.text" :text="appearNote.text" :author="appearNote.user" :i="$i" :custom-emojis="appearNote.emojis"/> | 						<Mfm v-if="appearNote.text" :text="appearNote.text" :author="appearNote.user" :i="$i" :custom-emojis="appearNote.emojis"/> | ||||||
| 						<a v-if="appearNote.renote != null" class="rp">RN:</a> | 						<a v-if="appearNote.renote != null" class="rp">RN:</a> | ||||||
| 						<div v-if="translating || translation" class="translation"> | 						<div v-if="translating || translation" class="translation"> | ||||||
|  | @ -73,7 +73,7 @@ | ||||||
| 					<MkUrlPreview v-for="url in urls" :key="url" :url="url" :compact="true" :detail="true" class="url-preview"/> | 					<MkUrlPreview v-for="url in urls" :key="url" :url="url" :compact="true" :detail="true" class="url-preview"/> | ||||||
| 					<div v-if="appearNote.renote" class="renote"><XNoteSimple :note="appearNote.renote"/></div> | 					<div v-if="appearNote.renote" class="renote"><XNoteSimple :note="appearNote.renote"/></div> | ||||||
| 				</div> | 				</div> | ||||||
| 				<MkA v-if="appearNote.channel && !inChannel" class="channel" :to="`/channels/${appearNote.channel.id}`"><i class="fas fa-satellite-dish"></i> {{ appearNote.channel.name }}</MkA> | 				<MkA v-if="appearNote.channel && !inChannel" class="channel" :to="`/channels/${appearNote.channel.id}`"><i class="ti ti-device-tv"></i> {{ appearNote.channel.name }}</MkA> | ||||||
| 			</div> | 			</div> | ||||||
| 			<footer class="footer"> | 			<footer class="footer"> | ||||||
| 				<div class="info"> | 				<div class="info"> | ||||||
|  | @ -83,19 +83,19 @@ | ||||||
| 				</div> | 				</div> | ||||||
| 				<XReactionsViewer ref="reactionsViewer" :note="appearNote"/> | 				<XReactionsViewer ref="reactionsViewer" :note="appearNote"/> | ||||||
| 				<button class="button _button" @click="reply()"> | 				<button class="button _button" @click="reply()"> | ||||||
| 					<template v-if="appearNote.reply"><i class="fas fa-reply-all"></i></template> | 					<template v-if="appearNote.reply"><i class="ti ti-arrow-back-up-all"></i></template> | ||||||
| 					<template v-else><i class="fas fa-reply"></i></template> | 					<template v-else><i class="ti ti-arrow-back-up"></i></template> | ||||||
| 					<p v-if="appearNote.repliesCount > 0" class="count">{{ appearNote.repliesCount }}</p> | 					<p v-if="appearNote.repliesCount > 0" class="count">{{ appearNote.repliesCount }}</p> | ||||||
| 				</button> | 				</button> | ||||||
| 				<XRenoteButton ref="renoteButton" class="button" :note="appearNote" :count="appearNote.renoteCount"/> | 				<XRenoteButton ref="renoteButton" class="button" :note="appearNote" :count="appearNote.renoteCount"/> | ||||||
| 				<button v-if="appearNote.myReaction == null" ref="reactButton" class="button _button" @click="react()"> | 				<button v-if="appearNote.myReaction == null" ref="reactButton" class="button _button" @click="react()"> | ||||||
| 					<i class="fas fa-plus"></i> | 					<i class="ti ti-plus"></i> | ||||||
| 				</button> | 				</button> | ||||||
| 				<button v-if="appearNote.myReaction != null" ref="reactButton" class="button _button reacted" @click="undoReact(appearNote)"> | 				<button v-if="appearNote.myReaction != null" ref="reactButton" class="button _button reacted" @click="undoReact(appearNote)"> | ||||||
| 					<i class="fas fa-minus"></i> | 					<i class="ti ti-minus"></i> | ||||||
| 				</button> | 				</button> | ||||||
| 				<button ref="menuButton" class="button _button" @click="menu()"> | 				<button ref="menuButton" class="button _button" @click="menu()"> | ||||||
| 					<i class="fas fa-ellipsis-h"></i> | 					<i class="ti ti-dots"></i> | ||||||
| 				</button> | 				</button> | ||||||
| 			</footer> | 			</footer> | ||||||
| 		</div> | 		</div> | ||||||
|  | @ -259,7 +259,7 @@ function showRenoteMenu(viaKeyboard = false): void { | ||||||
| 	if (!isMyRenote) return; | 	if (!isMyRenote) return; | ||||||
| 	os.popupMenu([{ | 	os.popupMenu([{ | ||||||
| 		text: i18n.ts.unrenote, | 		text: i18n.ts.unrenote, | ||||||
| 		icon: 'fas fa-trash-alt', | 		icon: 'ti ti-trash', | ||||||
| 		danger: true, | 		danger: true, | ||||||
| 		action: () => { | 		action: () => { | ||||||
| 			os.api('notes/delete', { | 			os.api('notes/delete', { | ||||||
|  |  | ||||||
|  | @ -19,7 +19,7 @@ | ||||||
| 		<MkNoteSub v-for="reply in replies" :key="reply.id" :note="reply" class="reply" :detail="true" :depth="depth + 1"/> | 		<MkNoteSub v-for="reply in replies" :key="reply.id" :note="reply" class="reply" :detail="true" :depth="depth + 1"/> | ||||||
| 	</template> | 	</template> | ||||||
| 	<div v-else class="more"> | 	<div v-else class="more"> | ||||||
| 		<MkA class="text _link" :to="notePage(note)">{{ i18n.ts.continueThread }} <i class="fas fa-angle-double-right"></i></MkA> | 		<MkA class="text _link" :to="notePage(note)">{{ i18n.ts.continueThread }} <i class="ti ti-chevron-double-right"></i></MkA> | ||||||
| 	</div> | 	</div> | ||||||
| </div> | </div> | ||||||
| </template> | </template> | ||||||
|  |  | ||||||
|  | @ -5,16 +5,16 @@ | ||||||
| 		<MkAvatar v-else-if="notification.user" class="icon" :user="notification.user"/> | 		<MkAvatar v-else-if="notification.user" class="icon" :user="notification.user"/> | ||||||
| 		<img v-else-if="notification.icon" class="icon" :src="notification.icon" alt=""/> | 		<img v-else-if="notification.icon" class="icon" :src="notification.icon" alt=""/> | ||||||
| 		<div class="sub-icon" :class="notification.type"> | 		<div class="sub-icon" :class="notification.type"> | ||||||
| 			<i v-if="notification.type === 'follow'" class="fas fa-plus"></i> | 			<i v-if="notification.type === 'follow'" class="ti ti-plus"></i> | ||||||
| 			<i v-else-if="notification.type === 'receiveFollowRequest'" class="fas fa-clock"></i> | 			<i v-else-if="notification.type === 'receiveFollowRequest'" class="ti ti-clock"></i> | ||||||
| 			<i v-else-if="notification.type === 'followRequestAccepted'" class="fas fa-check"></i> | 			<i v-else-if="notification.type === 'followRequestAccepted'" class="ti ti-check"></i> | ||||||
| 			<i v-else-if="notification.type === 'groupInvited'" class="fas fa-id-card-alt"></i> | 			<i v-else-if="notification.type === 'groupInvited'" class="fas fa-id-card-alt"></i> | ||||||
| 			<i v-else-if="notification.type === 'renote'" class="fas fa-retweet"></i> | 			<i v-else-if="notification.type === 'renote'" class="ti ti-repeat"></i> | ||||||
| 			<i v-else-if="notification.type === 'reply'" class="fas fa-reply"></i> | 			<i v-else-if="notification.type === 'reply'" class="ti ti-arrow-back-up"></i> | ||||||
| 			<i v-else-if="notification.type === 'mention'" class="fas fa-at"></i> | 			<i v-else-if="notification.type === 'mention'" class="ti ti-at"></i> | ||||||
| 			<i v-else-if="notification.type === 'quote'" class="fas fa-quote-left"></i> | 			<i v-else-if="notification.type === 'quote'" class="ti ti-quote"></i> | ||||||
| 			<i v-else-if="notification.type === 'pollVote'" class="fas fa-poll-h"></i> | 			<i v-else-if="notification.type === 'pollVote'" class="ti ti-chart-arrows"></i> | ||||||
| 			<i v-else-if="notification.type === 'pollEnded'" class="fas fa-poll-h"></i> | 			<i v-else-if="notification.type === 'pollEnded'" class="ti ti-chart-arrows"></i> | ||||||
| 			<!-- notification.reaction が null になることはまずないが、ここでoptional chaining使うと一部ブラウザで刺さるので念の為 --> | 			<!-- notification.reaction が null になることはまずないが、ここでoptional chaining使うと一部ブラウザで刺さるので念の為 --> | ||||||
| 			<XReactionIcon | 			<XReactionIcon | ||||||
| 				v-else-if="notification.type === 'reaction'" | 				v-else-if="notification.type === 'reaction'" | ||||||
|  | @ -33,14 +33,14 @@ | ||||||
| 			<MkTime v-if="withTime" :time="notification.createdAt" class="time"/> | 			<MkTime v-if="withTime" :time="notification.createdAt" class="time"/> | ||||||
| 		</header> | 		</header> | ||||||
| 		<MkA v-if="notification.type === 'reaction'" class="text" :to="notePage(notification.note)" :title="getNoteSummary(notification.note)"> | 		<MkA v-if="notification.type === 'reaction'" class="text" :to="notePage(notification.note)" :title="getNoteSummary(notification.note)"> | ||||||
| 			<i class="fas fa-quote-left"></i> | 			<i class="ti ti-quote"></i> | ||||||
| 			<Mfm :text="getNoteSummary(notification.note)" :plain="true" :nowrap="!full" :custom-emojis="notification.note.emojis"/> | 			<Mfm :text="getNoteSummary(notification.note)" :plain="true" :nowrap="!full" :custom-emojis="notification.note.emojis"/> | ||||||
| 			<i class="fas fa-quote-right"></i> | 			<i class="ti ti-quote"></i> | ||||||
| 		</MkA> | 		</MkA> | ||||||
| 		<MkA v-if="notification.type === 'renote'" class="text" :to="notePage(notification.note)" :title="getNoteSummary(notification.note.renote)"> | 		<MkA v-if="notification.type === 'renote'" class="text" :to="notePage(notification.note)" :title="getNoteSummary(notification.note.renote)"> | ||||||
| 			<i class="fas fa-quote-left"></i> | 			<i class="ti ti-quote"></i> | ||||||
| 			<Mfm :text="getNoteSummary(notification.note.renote)" :plain="true" :nowrap="!full" :custom-emojis="notification.note.renote.emojis"/> | 			<Mfm :text="getNoteSummary(notification.note.renote)" :plain="true" :nowrap="!full" :custom-emojis="notification.note.renote.emojis"/> | ||||||
| 			<i class="fas fa-quote-right"></i> | 			<i class="ti ti-quote"></i> | ||||||
| 		</MkA> | 		</MkA> | ||||||
| 		<MkA v-if="notification.type === 'reply'" class="text" :to="notePage(notification.note)" :title="getNoteSummary(notification.note)"> | 		<MkA v-if="notification.type === 'reply'" class="text" :to="notePage(notification.note)" :title="getNoteSummary(notification.note)"> | ||||||
| 			<Mfm :text="getNoteSummary(notification.note)" :plain="true" :nowrap="!full" :custom-emojis="notification.note.emojis"/> | 			<Mfm :text="getNoteSummary(notification.note)" :plain="true" :nowrap="!full" :custom-emojis="notification.note.emojis"/> | ||||||
|  | @ -52,14 +52,14 @@ | ||||||
| 			<Mfm :text="getNoteSummary(notification.note)" :plain="true" :nowrap="!full" :custom-emojis="notification.note.emojis"/> | 			<Mfm :text="getNoteSummary(notification.note)" :plain="true" :nowrap="!full" :custom-emojis="notification.note.emojis"/> | ||||||
| 		</MkA> | 		</MkA> | ||||||
| 		<MkA v-if="notification.type === 'pollVote'" class="text" :to="notePage(notification.note)" :title="getNoteSummary(notification.note)"> | 		<MkA v-if="notification.type === 'pollVote'" class="text" :to="notePage(notification.note)" :title="getNoteSummary(notification.note)"> | ||||||
| 			<i class="fas fa-quote-left"></i> | 			<i class="ti ti-quote"></i> | ||||||
| 			<Mfm :text="getNoteSummary(notification.note)" :plain="true" :nowrap="!full" :custom-emojis="notification.note.emojis"/> | 			<Mfm :text="getNoteSummary(notification.note)" :plain="true" :nowrap="!full" :custom-emojis="notification.note.emojis"/> | ||||||
| 			<i class="fas fa-quote-right"></i> | 			<i class="ti ti-quote"></i> | ||||||
| 		</MkA> | 		</MkA> | ||||||
| 		<MkA v-if="notification.type === 'pollEnded'" class="text" :to="notePage(notification.note)" :title="getNoteSummary(notification.note)"> | 		<MkA v-if="notification.type === 'pollEnded'" class="text" :to="notePage(notification.note)" :title="getNoteSummary(notification.note)"> | ||||||
| 			<i class="fas fa-quote-left"></i> | 			<i class="ti ti-quote"></i> | ||||||
| 			<Mfm :text="getNoteSummary(notification.note)" :plain="true" :nowrap="!full" :custom-emojis="notification.note.emojis"/> | 			<Mfm :text="getNoteSummary(notification.note)" :plain="true" :nowrap="!full" :custom-emojis="notification.note.emojis"/> | ||||||
| 			<i class="fas fa-quote-right"></i> | 			<i class="ti ti-quote"></i> | ||||||
| 		</MkA> | 		</MkA> | ||||||
| 		<span v-if="notification.type === 'follow'" class="text" style="opacity: 0.6;">{{ i18n.ts.youGotNewFollower }}<div v-if="full"><MkFollowButton :user="notification.user" :full="true"/></div></span> | 		<span v-if="notification.type === 'follow'" class="text" style="opacity: 0.6;">{{ i18n.ts.youGotNewFollower }}<div v-if="full"><MkFollowButton :user="notification.user" :full="true"/></div></span> | ||||||
| 		<span v-if="notification.type === 'followRequestAccepted'" class="text" style="opacity: 0.6;">{{ i18n.ts.followRequestAccepted }}</span> | 		<span v-if="notification.type === 'followRequestAccepted'" class="text" style="opacity: 0.6;">{{ i18n.ts.followRequestAccepted }}</span> | ||||||
|  |  | ||||||
|  | @ -57,7 +57,7 @@ const buttonsLeft = $computed(() => { | ||||||
| 
 | 
 | ||||||
| 	if (history.length > 1) { | 	if (history.length > 1) { | ||||||
| 		buttons.push({ | 		buttons.push({ | ||||||
| 			icon: 'fas fa-arrow-left', | 			icon: 'ti ti-arrow-left', | ||||||
| 			onClick: back, | 			onClick: back, | ||||||
| 		}); | 		}); | ||||||
| 	} | 	} | ||||||
|  | @ -66,7 +66,7 @@ const buttonsLeft = $computed(() => { | ||||||
| }); | }); | ||||||
| const buttonsRight = $computed(() => { | const buttonsRight = $computed(() => { | ||||||
| 	const buttons = [{ | 	const buttons = [{ | ||||||
| 		icon: 'fas fa-expand-alt', | 		icon: 'ti ti-arrows-maximize', | ||||||
| 		title: i18n.ts.showInPage, | 		title: i18n.ts.showInPage, | ||||||
| 		onClick: expand, | 		onClick: expand, | ||||||
| 	}]; | 	}]; | ||||||
|  | @ -86,22 +86,22 @@ provide('shouldOmitHeaderTitle', true); | ||||||
| provide('shouldHeaderThin', true); | provide('shouldHeaderThin', true); | ||||||
| 
 | 
 | ||||||
| const contextmenu = $computed(() => ([{ | const contextmenu = $computed(() => ([{ | ||||||
| 	icon: 'fas fa-expand-alt', | 	icon: 'ti ti-arrows-maximize', | ||||||
| 	text: i18n.ts.showInPage, | 	text: i18n.ts.showInPage, | ||||||
| 	action: expand, | 	action: expand, | ||||||
| }, { | }, { | ||||||
| 	icon: 'fas fa-external-link-alt', | 	icon: 'ti ti-external-link', | ||||||
| 	text: i18n.ts.popout, | 	text: i18n.ts.popout, | ||||||
| 	action: popout, | 	action: popout, | ||||||
| }, { | }, { | ||||||
| 	icon: 'fas fa-external-link-alt', | 	icon: 'ti ti-external-link', | ||||||
| 	text: i18n.ts.openInNewTab, | 	text: i18n.ts.openInNewTab, | ||||||
| 	action: () => { | 	action: () => { | ||||||
| 		window.open(url + router.getCurrentPath(), '_blank'); | 		window.open(url + router.getCurrentPath(), '_blank'); | ||||||
| 		windowEl.close(); | 		windowEl.close(); | ||||||
| 	}, | 	}, | ||||||
| }, { | }, { | ||||||
| 	icon: 'fas fa-link', | 	icon: 'ti ti-link', | ||||||
| 	text: i18n.ts.copyLink, | 	text: i18n.ts.copyLink, | ||||||
| 	action: () => { | 	action: () => { | ||||||
| 		copyToClipboard(url + router.getCurrentPath()); | 		copyToClipboard(url + router.getCurrentPath()); | ||||||
|  |  | ||||||
|  | @ -4,7 +4,7 @@ | ||||||
| 		<li v-for="(choice, i) in note.poll.choices" :key="i" :class="{ voted: choice.voted }" @click="vote(i)"> | 		<li v-for="(choice, i) in note.poll.choices" :key="i" :class="{ voted: choice.voted }" @click="vote(i)"> | ||||||
| 			<div class="backdrop" :style="{ 'width': `${showResult ? (choice.votes / total * 100) : 0}%` }"></div> | 			<div class="backdrop" :style="{ 'width': `${showResult ? (choice.votes / total * 100) : 0}%` }"></div> | ||||||
| 			<span> | 			<span> | ||||||
| 				<template v-if="choice.isVoted"><i class="fas fa-check"></i></template> | 				<template v-if="choice.isVoted"><i class="ti ti-check"></i></template> | ||||||
| 				<Mfm :text="choice.text" :plain="true" :custom-emojis="note.emojis"/> | 				<Mfm :text="choice.text" :plain="true" :custom-emojis="note.emojis"/> | ||||||
| 				<span v-if="showResult" class="votes">({{ $t('_poll.votesCount', { n: choice.votes }) }})</span> | 				<span v-if="showResult" class="votes">({{ $t('_poll.votesCount', { n: choice.votes }) }})</span> | ||||||
| 			</span> | 			</span> | ||||||
|  |  | ||||||
|  | @ -1,14 +1,14 @@ | ||||||
| <template> | <template> | ||||||
| <div class="zmdxowus"> | <div class="zmdxowus"> | ||||||
| 	<p v-if="choices.length < 2" class="caution"> | 	<p v-if="choices.length < 2" class="caution"> | ||||||
| 		<i class="fas fa-exclamation-triangle"></i>{{ i18n.ts._poll.noOnlyOneChoice }} | 		<i class="ti ti-alert-triangle"></i>{{ i18n.ts._poll.noOnlyOneChoice }} | ||||||
| 	</p> | 	</p> | ||||||
| 	<ul> | 	<ul> | ||||||
| 		<li v-for="(choice, i) in choices" :key="i"> | 		<li v-for="(choice, i) in choices" :key="i"> | ||||||
| 			<MkInput class="input" small :model-value="choice" :placeholder="$t('_poll.choiceN', { n: i + 1 })" @update:modelValue="onInput(i, $event)"> | 			<MkInput class="input" small :model-value="choice" :placeholder="$t('_poll.choiceN', { n: i + 1 })" @update:modelValue="onInput(i, $event)"> | ||||||
| 			</MkInput> | 			</MkInput> | ||||||
| 			<button class="_button" @click="remove(i)"> | 			<button class="_button" @click="remove(i)"> | ||||||
| 				<i class="fas fa-times"></i> | 				<i class="ti ti-x"></i> | ||||||
| 			</button> | 			</button> | ||||||
| 		</li> | 		</li> | ||||||
| 	</ul> | 	</ul> | ||||||
|  |  | ||||||
|  | @ -8,35 +8,35 @@ | ||||||
| 	@drop.stop="onDrop" | 	@drop.stop="onDrop" | ||||||
| > | > | ||||||
| 	<header> | 	<header> | ||||||
| 		<button v-if="!fixed" class="cancel _button" @click="cancel"><i class="fas fa-times"></i></button> | 		<button v-if="!fixed" class="cancel _button" @click="cancel"><i class="ti ti-x"></i></button> | ||||||
| 		<button v-click-anime v-tooltip="i18n.ts.switchAccount" class="account _button" @click="openAccountMenu"> | 		<button v-click-anime v-tooltip="i18n.ts.switchAccount" class="account _button" @click="openAccountMenu"> | ||||||
| 			<MkAvatar :user="postAccount ?? $i" class="avatar"/> | 			<MkAvatar :user="postAccount ?? $i" class="avatar"/> | ||||||
| 		</button> | 		</button> | ||||||
| 		<div class="right"> | 		<div class="right"> | ||||||
| 			<span class="text-count" :class="{ over: textLength > maxTextLength }">{{ maxTextLength - textLength }}</span> | 			<span class="text-count" :class="{ over: textLength > maxTextLength }">{{ maxTextLength - textLength }}</span> | ||||||
| 			<span v-if="localOnly" class="local-only"><i class="fas fa-biohazard"></i></span> | 			<span v-if="localOnly" class="local-only"><i class="ti ti-world-off"></i></span> | ||||||
| 			<button ref="visibilityButton" v-tooltip="i18n.ts.visibility" class="_button visibility" :disabled="channel != null" @click="setVisibility"> | 			<button ref="visibilityButton" v-tooltip="i18n.ts.visibility" class="_button visibility" :disabled="channel != null" @click="setVisibility"> | ||||||
| 				<span v-if="visibility === 'public'"><i class="fas fa-globe"></i></span> | 				<span v-if="visibility === 'public'"><i class="ti ti-world"></i></span> | ||||||
| 				<span v-if="visibility === 'home'"><i class="fas fa-home"></i></span> | 				<span v-if="visibility === 'home'"><i class="ti ti-home"></i></span> | ||||||
| 				<span v-if="visibility === 'followers'"><i class="fas fa-unlock"></i></span> | 				<span v-if="visibility === 'followers'"><i class="ti ti-lock-open"></i></span> | ||||||
| 				<span v-if="visibility === 'specified'"><i class="fas fa-envelope"></i></span> | 				<span v-if="visibility === 'specified'"><i class="ti ti-mail"></i></span> | ||||||
| 			</button> | 			</button> | ||||||
| 			<button v-tooltip="i18n.ts.previewNoteText" class="_button preview" :class="{ active: showPreview }" @click="showPreview = !showPreview"><i class="fas fa-file-code"></i></button> | 			<button v-tooltip="i18n.ts.previewNoteText" class="_button preview" :class="{ active: showPreview }" @click="showPreview = !showPreview"><i class="fas fa-file-code"></i></button> | ||||||
| 			<button class="submit _buttonGradate" :disabled="!canPost" data-cy-open-post-form-submit @click="post">{{ submitText }}<i :class="reply ? 'fas fa-reply' : renote ? 'fas fa-quote-right' : 'fas fa-paper-plane'"></i></button> | 			<button class="submit _buttonGradate" :disabled="!canPost" data-cy-open-post-form-submit @click="post">{{ submitText }}<i :class="reply ? 'ti ti-arrow-back-up' : renote ? 'ti ti-quote' : 'ti ti-send'"></i></button> | ||||||
| 		</div> | 		</div> | ||||||
| 	</header> | 	</header> | ||||||
| 	<div class="form" :class="{ fixed }"> | 	<div class="form" :class="{ fixed }"> | ||||||
| 		<XNoteSimple v-if="reply" class="preview" :note="reply"/> | 		<XNoteSimple v-if="reply" class="preview" :note="reply"/> | ||||||
| 		<XNoteSimple v-if="renote" class="preview" :note="renote"/> | 		<XNoteSimple v-if="renote" class="preview" :note="renote"/> | ||||||
| 		<div v-if="quoteId" class="with-quote"><i class="fas fa-quote-left"></i> {{ i18n.ts.quoteAttached }}<button @click="quoteId = null"><i class="fas fa-times"></i></button></div> | 		<div v-if="quoteId" class="with-quote"><i class="ti ti-quote"></i> {{ i18n.ts.quoteAttached }}<button @click="quoteId = null"><i class="ti ti-x"></i></button></div> | ||||||
| 		<div v-if="visibility === 'specified'" class="to-specified"> | 		<div v-if="visibility === 'specified'" class="to-specified"> | ||||||
| 			<span style="margin-right: 8px;">{{ i18n.ts.recipient }}</span> | 			<span style="margin-right: 8px;">{{ i18n.ts.recipient }}</span> | ||||||
| 			<div class="visibleUsers"> | 			<div class="visibleUsers"> | ||||||
| 				<span v-for="u in visibleUsers" :key="u.id"> | 				<span v-for="u in visibleUsers" :key="u.id"> | ||||||
| 					<MkAcct :user="u"/> | 					<MkAcct :user="u"/> | ||||||
| 					<button class="_button" @click="removeVisibleUser(u)"><i class="fas fa-times"></i></button> | 					<button class="_button" @click="removeVisibleUser(u)"><i class="ti ti-x"></i></button> | ||||||
| 				</span> | 				</span> | ||||||
| 				<button class="_buttonPrimary" @click="addVisibleUser"><i class="fas fa-plus fa-fw"></i></button> | 				<button class="_buttonPrimary" @click="addVisibleUser"><i class="ti ti-plus ti-fw"></i></button> | ||||||
| 			</div> | 			</div> | ||||||
| 		</div> | 		</div> | ||||||
| 		<MkInfo v-if="hasNotSpecifiedMentions" warn class="hasNotSpecifiedMentions">{{ i18n.ts.notSpecifiedMentionWarning }} - <button class="_textButton" @click="addMissingMention()">{{ i18n.ts.add }}</button></MkInfo> | 		<MkInfo v-if="hasNotSpecifiedMentions" warn class="hasNotSpecifiedMentions">{{ i18n.ts.notSpecifiedMentionWarning }} - <button class="_textButton" @click="addMissingMention()">{{ i18n.ts.add }}</button></MkInfo> | ||||||
|  | @ -47,13 +47,13 @@ | ||||||
| 		<XPollEditor v-if="poll" v-model="poll" @destroyed="poll = null"/> | 		<XPollEditor v-if="poll" v-model="poll" @destroyed="poll = null"/> | ||||||
| 		<XNotePreview v-if="showPreview" class="preview" :text="text"/> | 		<XNotePreview v-if="showPreview" class="preview" :text="text"/> | ||||||
| 		<footer> | 		<footer> | ||||||
| 			<button v-tooltip="i18n.ts.attachFile" class="_button" @click="chooseFileFrom"><i class="fas fa-photo-video"></i></button> | 			<button v-tooltip="i18n.ts.attachFile" class="_button" @click="chooseFileFrom"><i class="ti ti-photo-plus"></i></button> | ||||||
| 			<button v-tooltip="i18n.ts.poll" class="_button" :class="{ active: poll }" @click="togglePoll"><i class="fas fa-poll-h"></i></button> | 			<button v-tooltip="i18n.ts.poll" class="_button" :class="{ active: poll }" @click="togglePoll"><i class="ti ti-chart-arrows"></i></button> | ||||||
| 			<button v-tooltip="i18n.ts.useCw" class="_button" :class="{ active: useCw }" @click="useCw = !useCw"><i class="fas fa-eye-slash"></i></button> | 			<button v-tooltip="i18n.ts.useCw" class="_button" :class="{ active: useCw }" @click="useCw = !useCw"><i class="ti ti-eye-off"></i></button> | ||||||
| 			<button v-tooltip="i18n.ts.mention" class="_button" @click="insertMention"><i class="fas fa-at"></i></button> | 			<button v-tooltip="i18n.ts.mention" class="_button" @click="insertMention"><i class="ti ti-at"></i></button> | ||||||
| 			<button v-tooltip="i18n.ts.hashtags" class="_button" :class="{ active: withHashtags }" @click="withHashtags = !withHashtags"><i class="fas fa-hashtag"></i></button> | 			<button v-tooltip="i18n.ts.hashtags" class="_button" :class="{ active: withHashtags }" @click="withHashtags = !withHashtags"><i class="ti ti-hash"></i></button> | ||||||
| 			<button v-tooltip="i18n.ts.emoji" class="_button" @click="insertEmoji"><i class="fas fa-laugh-squint"></i></button> | 			<button v-tooltip="i18n.ts.emoji" class="_button" @click="insertEmoji"><i class="ti ti-mood-happy"></i></button> | ||||||
| 			<button v-if="postFormActions.length > 0" v-tooltip="i18n.ts.plugin" class="_button" @click="showActions"><i class="fas fa-plug"></i></button> | 			<button v-if="postFormActions.length > 0" v-tooltip="i18n.ts.plugin" class="_button" @click="showActions"><i class="ti ti-plug"></i></button> | ||||||
| 		</footer> | 		</footer> | ||||||
| 		<datalist id="hashtags"> | 		<datalist id="hashtags"> | ||||||
| 			<option v-for="hashtag in recentHashtags" :key="hashtag" :value="hashtag"/> | 			<option v-for="hashtag in recentHashtags" :key="hashtag" :value="hashtag"/> | ||||||
|  | @ -734,7 +734,7 @@ onMounted(() => { | ||||||
| 
 | 
 | ||||||
| 		> .cancel { | 		> .cancel { | ||||||
| 			padding: 0; | 			padding: 0; | ||||||
| 			font-size: 20px; | 			font-size: 1em; | ||||||
| 			width: 64px; | 			width: 64px; | ||||||
| 			line-height: 66px; | 			line-height: 66px; | ||||||
| 		} | 		} | ||||||
|  | @ -925,9 +925,9 @@ onMounted(() => { | ||||||
| 				display: inline-block; | 				display: inline-block; | ||||||
| 				padding: 0; | 				padding: 0; | ||||||
| 				margin: 0; | 				margin: 0; | ||||||
| 				font-size: 16px; | 				font-size: 1em; | ||||||
| 				width: 48px; | 				width: 46px; | ||||||
| 				height: 48px; | 				height: 46px; | ||||||
| 				border-radius: 6px; | 				border-radius: 6px; | ||||||
| 
 | 
 | ||||||
| 				&:hover { | 				&:hover { | ||||||
|  |  | ||||||
|  | @ -5,7 +5,7 @@ | ||||||
| 			<div class="file" @click="showFileMenu(element, $event)" @contextmenu.prevent="showFileMenu(element, $event)"> | 			<div class="file" @click="showFileMenu(element, $event)" @contextmenu.prevent="showFileMenu(element, $event)"> | ||||||
| 				<MkDriveFileThumbnail :data-id="element.id" class="thumbnail" :file="element" fit="cover"/> | 				<MkDriveFileThumbnail :data-id="element.id" class="thumbnail" :file="element" fit="cover"/> | ||||||
| 				<div v-if="element.isSensitive" class="sensitive"> | 				<div v-if="element.isSensitive" class="sensitive"> | ||||||
| 					<i class="fas fa-exclamation-triangle icon"></i> | 					<i class="ti ti-alert-triangle icon"></i> | ||||||
| 				</div> | 				</div> | ||||||
| 			</div> | 			</div> | ||||||
| 		</template> | 		</template> | ||||||
|  | @ -113,19 +113,19 @@ export default defineComponent({ | ||||||
| 			if (this.menu) return; | 			if (this.menu) return; | ||||||
| 			this.menu = os.popupMenu([{ | 			this.menu = os.popupMenu([{ | ||||||
| 				text: this.$ts.renameFile, | 				text: this.$ts.renameFile, | ||||||
| 				icon: 'fas fa-i-cursor', | 				icon: 'ti ti-cursor-text', | ||||||
| 				action: () => { this.rename(file); }, | 				action: () => { this.rename(file); }, | ||||||
| 			}, { | 			}, { | ||||||
| 				text: file.isSensitive ? this.$ts.unmarkAsSensitive : this.$ts.markAsSensitive, | 				text: file.isSensitive ? this.$ts.unmarkAsSensitive : this.$ts.markAsSensitive, | ||||||
| 				icon: file.isSensitive ? 'fas fa-eye-slash' : 'fas fa-eye', | 				icon: file.isSensitive ? 'ti ti-eye-off' : 'ti ti-eye', | ||||||
| 				action: () => { this.toggleSensitive(file); }, | 				action: () => { this.toggleSensitive(file); }, | ||||||
| 			}, { | 			}, { | ||||||
| 				text: this.$ts.describeFile, | 				text: this.$ts.describeFile, | ||||||
| 				icon: 'fas fa-i-cursor', | 				icon: 'ti ti-cursor-text', | ||||||
| 				action: () => { this.describe(file); }, | 				action: () => { this.describe(file); }, | ||||||
| 			}, { | 			}, { | ||||||
| 				text: this.$ts.attachCancel, | 				text: this.$ts.attachCancel, | ||||||
| 				icon: 'fas fa-times-circle', | 				icon: 'ti ti-circle-x', | ||||||
| 				action: () => { this.detachMedia(file.id); }, | 				action: () => { this.detachMedia(file.id); }, | ||||||
| 			}], ev.currentTarget ?? ev.target).then(() => this.menu = null); | 			}], ev.currentTarget ?? ev.target).then(() => this.menu = null); | ||||||
| 		}, | 		}, | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| <template> | <template> | ||||||
| <div class="jmgmzlwq _block"><i class="fas fa-exclamation-triangle" style="margin-right: 8px;"></i>{{ i18n.ts.remoteUserCaution }}<a class="link" :href="href" rel="nofollow noopener" target="_blank">{{ i18n.ts.showOnRemote }}</a></div> | <div class="jmgmzlwq _block"><i class="ti ti-alert-triangle" style="margin-right: 8px;"></i>{{ i18n.ts.remoteUserCaution }}<a class="link" :href="href" rel="nofollow noopener" target="_blank">{{ i18n.ts.showOnRemote }}</a></div> | ||||||
| </template> | </template> | ||||||
| 
 | 
 | ||||||
| <script lang="ts" setup> | <script lang="ts" setup> | ||||||
|  |  | ||||||
|  | @ -5,11 +5,11 @@ | ||||||
| 	class="eddddedb _button canRenote" | 	class="eddddedb _button canRenote" | ||||||
| 	@click="renote()" | 	@click="renote()" | ||||||
| > | > | ||||||
| 	<i class="fas fa-retweet"></i> | 	<i class="ti ti-repeat"></i> | ||||||
| 	<p v-if="count > 0" class="count">{{ count }}</p> | 	<p v-if="count > 0" class="count">{{ count }}</p> | ||||||
| </button> | </button> | ||||||
| <button v-else class="eddddedb _button"> | <button v-else class="eddddedb _button"> | ||||||
| 	<i class="fas fa-ban"></i> | 	<i class="ti ti-ban"></i> | ||||||
| </button> | </button> | ||||||
| </template> | </template> | ||||||
| 
 | 
 | ||||||
|  | @ -54,7 +54,7 @@ const renote = (viaKeyboard = false) => { | ||||||
| 	pleaseLogin(); | 	pleaseLogin(); | ||||||
| 	os.popupMenu([{ | 	os.popupMenu([{ | ||||||
| 		text: i18n.ts.renote, | 		text: i18n.ts.renote, | ||||||
| 		icon: 'fas fa-retweet', | 		icon: 'ti ti-repeat', | ||||||
| 		action: () => { | 		action: () => { | ||||||
| 			os.api('notes/create', { | 			os.api('notes/create', { | ||||||
| 				renoteId: props.note.id, | 				renoteId: props.note.id, | ||||||
|  | @ -62,7 +62,7 @@ const renote = (viaKeyboard = false) => { | ||||||
| 		}, | 		}, | ||||||
| 	}, { | 	}, { | ||||||
| 		text: i18n.ts.quote, | 		text: i18n.ts.quote, | ||||||
| 		icon: 'fas fa-quote-right', | 		icon: 'ti ti-quote', | ||||||
| 		action: () => { | 		action: () => { | ||||||
| 			os.post({ | 			os.post({ | ||||||
| 				renote: props.note, | 				renote: props.note, | ||||||
|  |  | ||||||
|  | @ -11,7 +11,7 @@ | ||||||
| 				<template #suffix>@{{ host }}</template> | 				<template #suffix>@{{ host }}</template> | ||||||
| 			</MkInput> | 			</MkInput> | ||||||
| 			<MkInput v-if="!user || user && !user.usePasswordLessLogin" v-model="password" class="_formBlock" :placeholder="i18n.ts.password" type="password" :with-password-toggle="true" required data-cy-signin-password> | 			<MkInput v-if="!user || user && !user.usePasswordLessLogin" v-model="password" class="_formBlock" :placeholder="i18n.ts.password" type="password" :with-password-toggle="true" required data-cy-signin-password> | ||||||
| 				<template #prefix><i class="fas fa-lock"></i></template> | 				<template #prefix><i class="ti ti-lock"></i></template> | ||||||
| 				<template #caption><button class="_textButton" type="button" @click="resetPassword">{{ i18n.ts.forgotPassword }}</button></template> | 				<template #caption><button class="_textButton" type="button" @click="resetPassword">{{ i18n.ts.forgotPassword }}</button></template> | ||||||
| 			</MkInput> | 			</MkInput> | ||||||
| 			<MkButton class="_formBlock" type="submit" primary :disabled="signing" style="margin: 0 auto;">{{ signing ? i18n.ts.loggingIn : i18n.ts.login }}</MkButton> | 			<MkButton class="_formBlock" type="submit" primary :disabled="signing" style="margin: 0 auto;">{{ signing ? i18n.ts.loggingIn : i18n.ts.login }}</MkButton> | ||||||
|  | @ -30,7 +30,7 @@ | ||||||
| 				<p style="margin-bottom:0;">{{ i18n.ts.twoStepAuthentication }}</p> | 				<p style="margin-bottom:0;">{{ i18n.ts.twoStepAuthentication }}</p> | ||||||
| 				<MkInput v-if="user && user.usePasswordLessLogin" v-model="password" type="password" :with-password-toggle="true" required> | 				<MkInput v-if="user && user.usePasswordLessLogin" v-model="password" type="password" :with-password-toggle="true" required> | ||||||
| 					<template #label>{{ i18n.ts.password }}</template> | 					<template #label>{{ i18n.ts.password }}</template> | ||||||
| 					<template #prefix><i class="fas fa-lock"></i></template> | 					<template #prefix><i class="ti ti-lock"></i></template> | ||||||
| 				</MkInput> | 				</MkInput> | ||||||
| 				<MkInput v-model="token" type="text" pattern="^[0-9]{6}$" autocomplete="off" :spellcheck="false" required> | 				<MkInput v-model="token" type="text" pattern="^[0-9]{6}$" autocomplete="off" :spellcheck="false" required> | ||||||
| 					<template #label>{{ i18n.ts.token }}</template> | 					<template #label>{{ i18n.ts.token }}</template> | ||||||
|  |  | ||||||
|  | @ -2,52 +2,52 @@ | ||||||
| <form class="qlvuhzng _formRoot" autocomplete="new-password" @submit.prevent="onSubmit"> | <form class="qlvuhzng _formRoot" autocomplete="new-password" @submit.prevent="onSubmit"> | ||||||
| 	<MkInput v-if="instance.disableRegistration" v-model="invitationCode" class="_formBlock" type="text" :spellcheck="false" required> | 	<MkInput v-if="instance.disableRegistration" v-model="invitationCode" class="_formBlock" type="text" :spellcheck="false" required> | ||||||
| 		<template #label>{{ i18n.ts.invitationCode }}</template> | 		<template #label>{{ i18n.ts.invitationCode }}</template> | ||||||
| 		<template #prefix><i class="fas fa-key"></i></template> | 		<template #prefix><i class="ti ti-key"></i></template> | ||||||
| 	</MkInput> | 	</MkInput> | ||||||
| 	<MkInput v-model="username" class="_formBlock" type="text" pattern="^[a-zA-Z0-9_]{1,20}$" :spellcheck="false" required data-cy-signup-username @update:modelValue="onChangeUsername"> | 	<MkInput v-model="username" class="_formBlock" type="text" pattern="^[a-zA-Z0-9_]{1,20}$" :spellcheck="false" required data-cy-signup-username @update:modelValue="onChangeUsername"> | ||||||
| 		<template #label>{{ i18n.ts.username }} <div v-tooltip:dialog="i18n.ts.usernameInfo" class="_button _help"><i class="far fa-question-circle"></i></div></template> | 		<template #label>{{ i18n.ts.username }} <div v-tooltip:dialog="i18n.ts.usernameInfo" class="_button _help"><i class="far fa-question-circle"></i></div></template> | ||||||
| 		<template #prefix>@</template> | 		<template #prefix>@</template> | ||||||
| 		<template #suffix>@{{ host }}</template> | 		<template #suffix>@{{ host }}</template> | ||||||
| 		<template #caption> | 		<template #caption> | ||||||
| 			<span v-if="usernameState === 'wait'" style="color:#999"><i class="fas fa-spinner fa-pulse fa-fw"></i> {{ i18n.ts.checking }}</span> | 			<span v-if="usernameState === 'wait'" style="color:#999"><i class="fas fa-spinner fa-pulse ti-fw"></i> {{ i18n.ts.checking }}</span> | ||||||
| 			<span v-else-if="usernameState === 'ok'" style="color: var(--success)"><i class="fas fa-check fa-fw"></i> {{ i18n.ts.available }}</span> | 			<span v-else-if="usernameState === 'ok'" style="color: var(--success)"><i class="ti ti-check ti-fw"></i> {{ i18n.ts.available }}</span> | ||||||
| 			<span v-else-if="usernameState === 'unavailable'" style="color: var(--error)"><i class="fas fa-exclamation-triangle fa-fw"></i> {{ i18n.ts.unavailable }}</span> | 			<span v-else-if="usernameState === 'unavailable'" style="color: var(--error)"><i class="ti ti-alert-triangle ti-fw"></i> {{ i18n.ts.unavailable }}</span> | ||||||
| 			<span v-else-if="usernameState === 'error'" style="color: var(--error)"><i class="fas fa-exclamation-triangle fa-fw"></i> {{ i18n.ts.error }}</span> | 			<span v-else-if="usernameState === 'error'" style="color: var(--error)"><i class="ti ti-alert-triangle ti-fw"></i> {{ i18n.ts.error }}</span> | ||||||
| 			<span v-else-if="usernameState === 'invalid-format'" style="color: var(--error)"><i class="fas fa-exclamation-triangle fa-fw"></i> {{ i18n.ts.usernameInvalidFormat }}</span> | 			<span v-else-if="usernameState === 'invalid-format'" style="color: var(--error)"><i class="ti ti-alert-triangle ti-fw"></i> {{ i18n.ts.usernameInvalidFormat }}</span> | ||||||
| 			<span v-else-if="usernameState === 'min-range'" style="color: var(--error)"><i class="fas fa-exclamation-triangle fa-fw"></i> {{ i18n.ts.tooShort }}</span> | 			<span v-else-if="usernameState === 'min-range'" style="color: var(--error)"><i class="ti ti-alert-triangle ti-fw"></i> {{ i18n.ts.tooShort }}</span> | ||||||
| 			<span v-else-if="usernameState === 'max-range'" style="color: var(--error)"><i class="fas fa-exclamation-triangle fa-fw"></i> {{ i18n.ts.tooLong }}</span> | 			<span v-else-if="usernameState === 'max-range'" style="color: var(--error)"><i class="ti ti-alert-triangle ti-fw"></i> {{ i18n.ts.tooLong }}</span> | ||||||
| 		</template> | 		</template> | ||||||
| 	</MkInput> | 	</MkInput> | ||||||
| 	<MkInput v-if="instance.emailRequiredForSignup" v-model="email" class="_formBlock" :debounce="true" type="email" :spellcheck="false" required data-cy-signup-email @update:modelValue="onChangeEmail"> | 	<MkInput v-if="instance.emailRequiredForSignup" v-model="email" class="_formBlock" :debounce="true" type="email" :spellcheck="false" required data-cy-signup-email @update:modelValue="onChangeEmail"> | ||||||
| 		<template #label>{{ i18n.ts.emailAddress }} <div v-tooltip:dialog="i18n.ts._signup.emailAddressInfo" class="_button _help"><i class="far fa-question-circle"></i></div></template> | 		<template #label>{{ i18n.ts.emailAddress }} <div v-tooltip:dialog="i18n.ts._signup.emailAddressInfo" class="_button _help"><i class="far fa-question-circle"></i></div></template> | ||||||
| 		<template #prefix><i class="fas fa-envelope"></i></template> | 		<template #prefix><i class="ti ti-mail"></i></template> | ||||||
| 		<template #caption> | 		<template #caption> | ||||||
| 			<span v-if="emailState === 'wait'" style="color:#999"><i class="fas fa-spinner fa-pulse fa-fw"></i> {{ i18n.ts.checking }}</span> | 			<span v-if="emailState === 'wait'" style="color:#999"><i class="fas fa-spinner fa-pulse ti-fw"></i> {{ i18n.ts.checking }}</span> | ||||||
| 			<span v-else-if="emailState === 'ok'" style="color: var(--success)"><i class="fas fa-check fa-fw"></i> {{ i18n.ts.available }}</span> | 			<span v-else-if="emailState === 'ok'" style="color: var(--success)"><i class="ti ti-check ti-fw"></i> {{ i18n.ts.available }}</span> | ||||||
| 			<span v-else-if="emailState === 'unavailable:used'" style="color: var(--error)"><i class="fas fa-exclamation-triangle fa-fw"></i> {{ i18n.ts._emailUnavailable.used }}</span> | 			<span v-else-if="emailState === 'unavailable:used'" style="color: var(--error)"><i class="ti ti-alert-triangle ti-fw"></i> {{ i18n.ts._emailUnavailable.used }}</span> | ||||||
| 			<span v-else-if="emailState === 'unavailable:format'" style="color: var(--error)"><i class="fas fa-exclamation-triangle fa-fw"></i> {{ i18n.ts._emailUnavailable.format }}</span> | 			<span v-else-if="emailState === 'unavailable:format'" style="color: var(--error)"><i class="ti ti-alert-triangle ti-fw"></i> {{ i18n.ts._emailUnavailable.format }}</span> | ||||||
| 			<span v-else-if="emailState === 'unavailable:disposable'" style="color: var(--error)"><i class="fas fa-exclamation-triangle fa-fw"></i> {{ i18n.ts._emailUnavailable.disposable }}</span> | 			<span v-else-if="emailState === 'unavailable:disposable'" style="color: var(--error)"><i class="ti ti-alert-triangle ti-fw"></i> {{ i18n.ts._emailUnavailable.disposable }}</span> | ||||||
| 			<span v-else-if="emailState === 'unavailable:mx'" style="color: var(--error)"><i class="fas fa-exclamation-triangle fa-fw"></i> {{ i18n.ts._emailUnavailable.mx }}</span> | 			<span v-else-if="emailState === 'unavailable:mx'" style="color: var(--error)"><i class="ti ti-alert-triangle ti-fw"></i> {{ i18n.ts._emailUnavailable.mx }}</span> | ||||||
| 			<span v-else-if="emailState === 'unavailable:smtp'" style="color: var(--error)"><i class="fas fa-exclamation-triangle fa-fw"></i> {{ i18n.ts._emailUnavailable.smtp }}</span> | 			<span v-else-if="emailState === 'unavailable:smtp'" style="color: var(--error)"><i class="ti ti-alert-triangle ti-fw"></i> {{ i18n.ts._emailUnavailable.smtp }}</span> | ||||||
| 			<span v-else-if="emailState === 'unavailable'" style="color: var(--error)"><i class="fas fa-exclamation-triangle fa-fw"></i> {{ i18n.ts.unavailable }}</span> | 			<span v-else-if="emailState === 'unavailable'" style="color: var(--error)"><i class="ti ti-alert-triangle ti-fw"></i> {{ i18n.ts.unavailable }}</span> | ||||||
| 			<span v-else-if="emailState === 'error'" style="color: var(--error)"><i class="fas fa-exclamation-triangle fa-fw"></i> {{ i18n.ts.error }}</span> | 			<span v-else-if="emailState === 'error'" style="color: var(--error)"><i class="ti ti-alert-triangle ti-fw"></i> {{ i18n.ts.error }}</span> | ||||||
| 		</template> | 		</template> | ||||||
| 	</MkInput> | 	</MkInput> | ||||||
| 	<MkInput v-model="password" class="_formBlock" type="password" autocomplete="new-password" required data-cy-signup-password @update:modelValue="onChangePassword"> | 	<MkInput v-model="password" class="_formBlock" type="password" autocomplete="new-password" required data-cy-signup-password @update:modelValue="onChangePassword"> | ||||||
| 		<template #label>{{ i18n.ts.password }}</template> | 		<template #label>{{ i18n.ts.password }}</template> | ||||||
| 		<template #prefix><i class="fas fa-lock"></i></template> | 		<template #prefix><i class="ti ti-lock"></i></template> | ||||||
| 		<template #caption> | 		<template #caption> | ||||||
| 			<span v-if="passwordStrength == 'low'" style="color: var(--error)"><i class="fas fa-exclamation-triangle fa-fw"></i> {{ i18n.ts.weakPassword }}</span> | 			<span v-if="passwordStrength == 'low'" style="color: var(--error)"><i class="ti ti-alert-triangle ti-fw"></i> {{ i18n.ts.weakPassword }}</span> | ||||||
| 			<span v-if="passwordStrength == 'medium'" style="color: var(--warn)"><i class="fas fa-check fa-fw"></i> {{ i18n.ts.normalPassword }}</span> | 			<span v-if="passwordStrength == 'medium'" style="color: var(--warn)"><i class="ti ti-check ti-fw"></i> {{ i18n.ts.normalPassword }}</span> | ||||||
| 			<span v-if="passwordStrength == 'high'" style="color: var(--success)"><i class="fas fa-check fa-fw"></i> {{ i18n.ts.strongPassword }}</span> | 			<span v-if="passwordStrength == 'high'" style="color: var(--success)"><i class="ti ti-check ti-fw"></i> {{ i18n.ts.strongPassword }}</span> | ||||||
| 		</template> | 		</template> | ||||||
| 	</MkInput> | 	</MkInput> | ||||||
| 	<MkInput v-model="retypedPassword" class="_formBlock" type="password" autocomplete="new-password" required data-cy-signup-password-retype @update:modelValue="onChangePasswordRetype"> | 	<MkInput v-model="retypedPassword" class="_formBlock" type="password" autocomplete="new-password" required data-cy-signup-password-retype @update:modelValue="onChangePasswordRetype"> | ||||||
| 		<template #label>{{ i18n.ts.password }} ({{ i18n.ts.retype }})</template> | 		<template #label>{{ i18n.ts.password }} ({{ i18n.ts.retype }})</template> | ||||||
| 		<template #prefix><i class="fas fa-lock"></i></template> | 		<template #prefix><i class="ti ti-lock"></i></template> | ||||||
| 		<template #caption> | 		<template #caption> | ||||||
| 			<span v-if="passwordRetypeState == 'match'" style="color: var(--success)"><i class="fas fa-check fa-fw"></i> {{ i18n.ts.passwordMatched }}</span> | 			<span v-if="passwordRetypeState == 'match'" style="color: var(--success)"><i class="ti ti-check ti-fw"></i> {{ i18n.ts.passwordMatched }}</span> | ||||||
| 			<span v-if="passwordRetypeState == 'not-match'" style="color: var(--error)"><i class="fas fa-exclamation-triangle fa-fw"></i> {{ i18n.ts.passwordNotMatched }}</span> | 			<span v-if="passwordRetypeState == 'not-match'" style="color: var(--error)"><i class="ti ti-alert-triangle ti-fw"></i> {{ i18n.ts.passwordNotMatched }}</span> | ||||||
| 		</template> | 		</template> | ||||||
| 	</MkInput> | 	</MkInput> | ||||||
| 	<MkSwitch v-if="instance.tosUrl" v-model="ToSAgreement" class="_formBlock tou"> | 	<MkSwitch v-if="instance.tosUrl" v-model="ToSAgreement" class="_formBlock tou"> | ||||||
|  |  | ||||||
|  | @ -3,7 +3,7 @@ | ||||||
| 	<div class="body"> | 	<div class="body"> | ||||||
| 		<span v-if="note.isHidden" style="opacity: 0.5">({{ i18n.ts.private }})</span> | 		<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> | 		<span v-if="note.deletedAt" style="opacity: 0.5">({{ i18n.ts.deleted }})</span> | ||||||
| 		<MkA v-if="note.replyId" class="reply" :to="`/notes/${note.replyId}`"><i class="fas fa-reply"></i></MkA> | 		<MkA v-if="note.replyId" class="reply" :to="`/notes/${note.replyId}`"><i class="ti ti-arrow-back-up"></i></MkA> | ||||||
| 		<Mfm v-if="note.text" :text="note.text" :author="note.user" :i="$i" :custom-emojis="note.emojis"/> | 		<Mfm v-if="note.text" :text="note.text" :author="note.user" :i="$i" :custom-emojis="note.emojis"/> | ||||||
| 		<MkA v-if="note.renoteId" class="rp" :to="`/notes/${note.renoteId}`">RN: ...</MkA> | 		<MkA v-if="note.renoteId" class="rp" :to="`/notes/${note.renoteId}`">RN: ...</MkA> | ||||||
| 	</div> | 	</div> | ||||||
|  |  | ||||||
|  | @ -6,15 +6,15 @@ | ||||||
| 		<div class="items"> | 		<div class="items"> | ||||||
| 			<template v-for="(item, i) in group.items"> | 			<template v-for="(item, i) in group.items"> | ||||||
| 				<a v-if="item.type === 'a'" :href="item.href" :target="item.target" :tabindex="i" class="_button item" :class="{ danger: item.danger, active: item.active }"> | 				<a v-if="item.type === 'a'" :href="item.href" :target="item.target" :tabindex="i" class="_button item" :class="{ danger: item.danger, active: item.active }"> | ||||||
| 					<i v-if="item.icon" class="icon fa-fw" :class="item.icon"></i> | 					<i v-if="item.icon" class="icon ti-fw" :class="item.icon"></i> | ||||||
| 					<span class="text">{{ item.text }}</span> | 					<span class="text">{{ item.text }}</span> | ||||||
| 				</a> | 				</a> | ||||||
| 				<button v-else-if="item.type === 'button'" :tabindex="i" class="_button item" :class="{ danger: item.danger, active: item.active }" :disabled="item.active" @click="ev => item.action(ev)"> | 				<button v-else-if="item.type === 'button'" :tabindex="i" class="_button item" :class="{ danger: item.danger, active: item.active }" :disabled="item.active" @click="ev => item.action(ev)"> | ||||||
| 					<i v-if="item.icon" class="icon fa-fw" :class="item.icon"></i> | 					<i v-if="item.icon" class="icon ti-fw" :class="item.icon"></i> | ||||||
| 					<span class="text">{{ item.text }}</span> | 					<span class="text">{{ item.text }}</span> | ||||||
| 				</button> | 				</button> | ||||||
| 				<MkA v-else :to="item.to" :tabindex="i" class="_button item" :class="{ danger: item.danger, active: item.active }"> | 				<MkA v-else :to="item.to" :tabindex="i" class="_button item" :class="{ danger: item.danger, active: item.active }"> | ||||||
| 					<i v-if="item.icon" class="icon fa-fw" :class="item.icon"></i> | 					<i v-if="item.icon" class="icon ti-fw" :class="item.icon"></i> | ||||||
| 					<span class="text">{{ item.text }}</span> | 					<span class="text">{{ item.text }}</span> | ||||||
| 				</MkA> | 				</MkA> | ||||||
| 			</template> | 			</template> | ||||||
|  |  | ||||||
|  | @ -1,6 +1,6 @@ | ||||||
| <template> | <template> | ||||||
| <div v-if="playerEnabled" class="player" :style="`padding: ${(player.height || 0) / (player.width || 1) * 100}% 0 0`"> | <div v-if="playerEnabled" class="player" :style="`padding: ${(player.height || 0) / (player.width || 1) * 100}% 0 0`"> | ||||||
| 	<button class="disablePlayer" :title="i18n.ts.disablePlayer" @click="playerEnabled = false"><i class="fas fa-times"></i></button> | 	<button class="disablePlayer" :title="i18n.ts.disablePlayer" @click="playerEnabled = false"><i class="ti ti-x"></i></button> | ||||||
| 	<iframe :src="player.url + (player.url.match(/\?/) ? '&autoplay=1&auto_play=1' : '?autoplay=1&auto_play=1')" :width="player.width || '100%'" :heigth="player.height || 250" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen/> | 	<iframe :src="player.url + (player.url.match(/\?/) ? '&autoplay=1&auto_play=1' : '?autoplay=1&auto_play=1')" :width="player.width || '100%'" :heigth="player.height || 250" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen/> | ||||||
| </div> | </div> | ||||||
| <div v-else-if="tweetId && tweetExpanded" ref="twitter" class="twitter"> | <div v-else-if="tweetId && tweetExpanded" ref="twitter" class="twitter"> | ||||||
|  |  | ||||||
|  | @ -1,10 +1,10 @@ | ||||||
| <template> | <template> | ||||||
| <span v-if="note.visibility !== 'public'" :class="$style.visibility" :title="i18n.ts._visibility[note.visibility]"> | <span v-if="note.visibility !== 'public'" :class="$style.visibility" :title="i18n.ts._visibility[note.visibility]"> | ||||||
| 	<i v-if="note.visibility === 'home'" class="fas fa-home"></i> | 	<i v-if="note.visibility === 'home'" class="ti ti-home"></i> | ||||||
| 	<i v-else-if="note.visibility === 'followers'" class="fas fa-unlock"></i> | 	<i v-else-if="note.visibility === 'followers'" class="ti ti-lock-open"></i> | ||||||
| 	<i v-else-if="note.visibility === 'specified'" ref="specified" class="fas fa-envelope"></i> | 	<i v-else-if="note.visibility === 'specified'" ref="specified" class="ti ti-mail"></i> | ||||||
| </span> | </span> | ||||||
| <span v-if="note.localOnly" :class="$style.localOnly" :title="i18n.ts._visibility['localOnly']"><i class="fas fa-biohazard"></i></span> | <span v-if="note.localOnly" :class="$style.localOnly" :title="i18n.ts._visibility['localOnly']"><i class="ti ti-world-off"></i></span> | ||||||
| </template> | </template> | ||||||
| 
 | 
 | ||||||
| <script lang="ts" setup> | <script lang="ts" setup> | ||||||
|  |  | ||||||
|  | @ -2,28 +2,28 @@ | ||||||
| <MkModal ref="modal" :z-priority="'high'" :src="src" @click="modal.close()" @closed="emit('closed')"> | <MkModal ref="modal" :z-priority="'high'" :src="src" @click="modal.close()" @closed="emit('closed')"> | ||||||
| 	<div class="gqyayizv _popup"> | 	<div class="gqyayizv _popup"> | ||||||
| 		<button key="public" class="_button" :class="{ active: v === 'public' }" data-index="1" @click="choose('public')"> | 		<button key="public" class="_button" :class="{ active: v === 'public' }" data-index="1" @click="choose('public')"> | ||||||
| 			<div><i class="fas fa-globe"></i></div> | 			<div><i class="ti ti-world"></i></div> | ||||||
| 			<div> | 			<div> | ||||||
| 				<span>{{ i18n.ts._visibility.public }}</span> | 				<span>{{ i18n.ts._visibility.public }}</span> | ||||||
| 				<span>{{ i18n.ts._visibility.publicDescription }}</span> | 				<span>{{ i18n.ts._visibility.publicDescription }}</span> | ||||||
| 			</div> | 			</div> | ||||||
| 		</button> | 		</button> | ||||||
| 		<button key="home" class="_button" :class="{ active: v === 'home' }" data-index="2" @click="choose('home')"> | 		<button key="home" class="_button" :class="{ active: v === 'home' }" data-index="2" @click="choose('home')"> | ||||||
| 			<div><i class="fas fa-home"></i></div> | 			<div><i class="ti ti-home"></i></div> | ||||||
| 			<div> | 			<div> | ||||||
| 				<span>{{ i18n.ts._visibility.home }}</span> | 				<span>{{ i18n.ts._visibility.home }}</span> | ||||||
| 				<span>{{ i18n.ts._visibility.homeDescription }}</span> | 				<span>{{ i18n.ts._visibility.homeDescription }}</span> | ||||||
| 			</div> | 			</div> | ||||||
| 		</button> | 		</button> | ||||||
| 		<button key="followers" class="_button" :class="{ active: v === 'followers' }" data-index="3" @click="choose('followers')"> | 		<button key="followers" class="_button" :class="{ active: v === 'followers' }" data-index="3" @click="choose('followers')"> | ||||||
| 			<div><i class="fas fa-unlock"></i></div> | 			<div><i class="ti ti-lock-open"></i></div> | ||||||
| 			<div> | 			<div> | ||||||
| 				<span>{{ i18n.ts._visibility.followers }}</span> | 				<span>{{ i18n.ts._visibility.followers }}</span> | ||||||
| 				<span>{{ i18n.ts._visibility.followersDescription }}</span> | 				<span>{{ i18n.ts._visibility.followersDescription }}</span> | ||||||
| 			</div> | 			</div> | ||||||
| 		</button> | 		</button> | ||||||
| 		<button key="specified" :disabled="localOnly" class="_button" :class="{ active: v === 'specified' }" data-index="4" @click="choose('specified')"> | 		<button key="specified" :disabled="localOnly" class="_button" :class="{ active: v === 'specified' }" data-index="4" @click="choose('specified')"> | ||||||
| 			<div><i class="fas fa-envelope"></i></div> | 			<div><i class="ti ti-mail"></i></div> | ||||||
| 			<div> | 			<div> | ||||||
| 				<span>{{ i18n.ts._visibility.specified }}</span> | 				<span>{{ i18n.ts._visibility.specified }}</span> | ||||||
| 				<span>{{ i18n.ts._visibility.specifiedDescription }}</span> | 				<span>{{ i18n.ts._visibility.specifiedDescription }}</span> | ||||||
|  | @ -31,12 +31,12 @@ | ||||||
| 		</button> | 		</button> | ||||||
| 		<div class="divider"></div> | 		<div class="divider"></div> | ||||||
| 		<button key="localOnly" class="_button localOnly" :class="{ active: localOnly }" data-index="5" @click="localOnly = !localOnly"> | 		<button key="localOnly" class="_button localOnly" :class="{ active: localOnly }" data-index="5" @click="localOnly = !localOnly"> | ||||||
| 			<div><i class="fas fa-biohazard"></i></div> | 			<div><i class="ti ti-world-off"></i></div> | ||||||
| 			<div> | 			<div> | ||||||
| 				<span>{{ i18n.ts._visibility.localOnly }}</span> | 				<span>{{ i18n.ts._visibility.localOnly }}</span> | ||||||
| 				<span>{{ i18n.ts._visibility.localOnlyDescription }}</span> | 				<span>{{ i18n.ts._visibility.localOnlyDescription }}</span> | ||||||
| 			</div> | 			</div> | ||||||
| 			<div><i :class="localOnly ? 'fas fa-toggle-on' : 'fas fa-toggle-off'"></i></div> | 			<div><i :class="localOnly ? 'ti ti-toggle-right' : 'ti ti-toggle-left'"></i></div> | ||||||
| 		</button> | 		</button> | ||||||
| 	</div> | 	</div> | ||||||
| </MkModal> | </MkModal> | ||||||
|  |  | ||||||
|  | @ -1,7 +1,7 @@ | ||||||
| <template> | <template> | ||||||
| <MkModal ref="modal" :prefer-type="'dialog'" :z-priority="'high'" @click="success ? done() : () => {}" @closed="emit('closed')"> | <MkModal ref="modal" :prefer-type="'dialog'" :z-priority="'high'" @click="success ? done() : () => {}" @closed="emit('closed')"> | ||||||
| 	<div class="iuyakobc" :class="{ iconOnly: (text == null) || success }"> | 	<div class="iuyakobc" :class="{ iconOnly: (text == null) || success }"> | ||||||
| 		<i v-if="success" class="fas fa-check icon success"></i> | 		<i v-if="success" class="ti ti-check icon success"></i> | ||||||
| 		<i v-else class="fas fa-spinner fa-pulse icon waiting"></i> | 		<i v-else class="fas fa-spinner fa-pulse icon waiting"></i> | ||||||
| 		<div v-if="text && !success" class="text">{{ text }}<MkEllipsis/></div> | 		<div v-if="text && !success" class="text">{{ text }}<MkEllipsis/></div> | ||||||
| 	</div> | 	</div> | ||||||
|  |  | ||||||
|  | @ -6,7 +6,7 @@ | ||||||
| 				<template #label>{{ i18n.ts.selectWidget }}</template> | 				<template #label>{{ i18n.ts.selectWidget }}</template> | ||||||
| 				<option v-for="widget in widgetDefs" :key="widget" :value="widget">{{ i18n.t(`_widgets.${widget}`) }}</option> | 				<option v-for="widget in widgetDefs" :key="widget" :value="widget">{{ i18n.t(`_widgets.${widget}`) }}</option> | ||||||
| 			</MkSelect> | 			</MkSelect> | ||||||
| 			<MkButton inline primary class="mk-widget-add" @click="addWidget"><i class="fas fa-plus"></i> {{ i18n.ts.add }}</MkButton> | 			<MkButton inline primary class="mk-widget-add" @click="addWidget"><i class="ti ti-plus"></i> {{ i18n.ts.add }}</MkButton> | ||||||
| 			<MkButton inline @click="$emit('exit')">{{ i18n.ts.close }}</MkButton> | 			<MkButton inline @click="$emit('exit')">{{ i18n.ts.close }}</MkButton> | ||||||
| 		</header> | 		</header> | ||||||
| 		<XDraggable | 		<XDraggable | ||||||
|  | @ -17,8 +17,8 @@ | ||||||
| 		> | 		> | ||||||
| 			<template #item="{element}"> | 			<template #item="{element}"> | ||||||
| 				<div class="customize-container"> | 				<div class="customize-container"> | ||||||
| 					<button class="config _button" @click.prevent.stop="configWidget(element.id)"><i class="fas fa-cog"></i></button> | 					<button class="config _button" @click.prevent.stop="configWidget(element.id)"><i class="ti ti-settings"></i></button> | ||||||
| 					<button class="remove _button" @click.prevent.stop="removeWidget(element)"><i class="fas fa-times"></i></button> | 					<button class="remove _button" @click.prevent.stop="removeWidget(element)"><i class="ti ti-x"></i></button> | ||||||
| 					<div class="handle"> | 					<div class="handle"> | ||||||
| 						<component :is="`mkw-${element.name}`" :ref="el => widgetRefs[element.id] = el" class="widget" :widget="element" @updateProps="updateWidget(element.id, $event)"/> | 						<component :is="`mkw-${element.name}`" :ref="el => widgetRefs[element.id] = el" class="widget" :widget="element" @updateProps="updateWidget(element.id, $event)"/> | ||||||
| 					</div> | 					</div> | ||||||
|  | @ -104,7 +104,7 @@ function onContextmenu(widget: Widget, ev: MouseEvent) { | ||||||
| 		type: 'label', | 		type: 'label', | ||||||
| 		text: i18n.t(`_widgets.${widget.name}`), | 		text: i18n.t(`_widgets.${widget.name}`), | ||||||
| 	}, { | 	}, { | ||||||
| 		icon: 'fas fa-cog', | 		icon: 'ti ti-settings', | ||||||
| 		text: i18n.ts.settings, | 		text: i18n.ts.settings, | ||||||
| 		action: () => { | 		action: () => { | ||||||
| 			configWidget(widget.id); | 			configWidget(widget.id); | ||||||
|  |  | ||||||
|  | @ -13,7 +13,7 @@ | ||||||
| 					<button v-for="button in buttonsRight" v-tooltip="button.title" class="button _button" :class="{ highlighted: button.highlighted }" @click="button.onClick"><i :class="button.icon"></i></button> | 					<button v-for="button in buttonsRight" v-tooltip="button.title" class="button _button" :class="{ highlighted: button.highlighted }" @click="button.onClick"><i :class="button.icon"></i></button> | ||||||
| 					<button v-if="canResize && maximized" class="button _button" @click="unMaximize()"><i class="fas fa-window-restore"></i></button> | 					<button v-if="canResize && maximized" class="button _button" @click="unMaximize()"><i class="fas fa-window-restore"></i></button> | ||||||
| 					<button v-else-if="canResize && !maximized" class="button _button" @click="maximize()"><i class="fas fa-window-maximize"></i></button> | 					<button v-else-if="canResize && !maximized" class="button _button" @click="maximize()"><i class="fas fa-window-maximize"></i></button> | ||||||
| 					<button v-if="closeButton" class="button _button" @click="close()"><i class="fas fa-times"></i></button> | 					<button v-if="closeButton" class="button _button" @click="close()"><i class="ti ti-x"></i></button> | ||||||
| 				</span> | 				</span> | ||||||
| 			</div> | 			</div> | ||||||
| 			<div class="body"> | 			<div class="body"> | ||||||
|  |  | ||||||
|  | @ -10,7 +10,7 @@ | ||||||
| 		@keydown.enter="toggle" | 		@keydown.enter="toggle" | ||||||
| 	> | 	> | ||||||
| 	<span ref="button" v-adaptive-border v-tooltip="checked ? i18n.ts.itsOn : i18n.ts.itsOff" class="button" @click.prevent="toggle"> | 	<span ref="button" v-adaptive-border v-tooltip="checked ? i18n.ts.itsOn : i18n.ts.itsOff" class="button" @click.prevent="toggle"> | ||||||
| 		<i class="check fas fa-check"></i> | 		<i class="check ti ti-check"></i> | ||||||
| 	</span> | 	</span> | ||||||
| 	<span class="label"> | 	<span class="label"> | ||||||
| 		<!-- TODO: 無名slotの方は廃止 --> | 		<!-- TODO: 無名slotの方は廃止 --> | ||||||
|  |  | ||||||
|  | @ -5,8 +5,8 @@ | ||||||
| 		<span class="text"><slot name="label"></slot></span> | 		<span class="text"><slot name="label"></slot></span> | ||||||
| 		<span class="right"> | 		<span class="right"> | ||||||
| 			<span class="text"><slot name="suffix"></slot></span> | 			<span class="text"><slot name="suffix"></slot></span> | ||||||
| 			<i v-if="opened" class="fas fa-angle-up icon"></i> | 			<i v-if="opened" class="ti ti-chevron-up icon"></i> | ||||||
| 			<i v-else class="fas fa-angle-down icon"></i> | 			<i v-else class="ti ti-chevron-down icon"></i> | ||||||
| 		</span> | 		</span> | ||||||
| 	</div> | 	</div> | ||||||
| 	<KeepAlive> | 	<KeepAlive> | ||||||
|  | @ -23,7 +23,7 @@ | ||||||
| const props = withDefaults(defineProps<{ | const props = withDefaults(defineProps<{ | ||||||
| 	defaultOpen: boolean; | 	defaultOpen: boolean; | ||||||
| }>(), { | }>(), { | ||||||
|   defaultOpen: false, | 	defaultOpen: false, | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| let opened = $ref(props.defaultOpen); | let opened = $ref(props.defaultOpen); | ||||||
|  | @ -46,7 +46,7 @@ const toggle = () => { | ||||||
| 		align-items: center; | 		align-items: center; | ||||||
| 		width: 100%; | 		width: 100%; | ||||||
| 		box-sizing: border-box; | 		box-sizing: border-box; | ||||||
| 		padding: 12px 14px 12px 14px; | 		padding: 10px 14px 10px 14px; | ||||||
| 		background: var(--buttonBg); | 		background: var(--buttonBg); | ||||||
| 		border-radius: 6px; | 		border-radius: 6px; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -29,7 +29,7 @@ | ||||||
| 	</div> | 	</div> | ||||||
| 	<div class="caption"><slot name="caption"></slot></div> | 	<div class="caption"><slot name="caption"></slot></div> | ||||||
| 
 | 
 | ||||||
| 	<MkButton v-if="manualSave && changed" primary class="save" @click="updated"><i class="fas fa-check"></i> {{ i18n.ts.save }}</MkButton> | 	<MkButton v-if="manualSave && changed" primary class="save" @click="updated"><i class="ti ti-check"></i> {{ i18n.ts.save }}</MkButton> | ||||||
| </div> | </div> | ||||||
| </template> | </template> | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -5,7 +5,7 @@ | ||||||
| 		<span class="text"><slot></slot></span> | 		<span class="text"><slot></slot></span> | ||||||
| 		<span class="right"> | 		<span class="right"> | ||||||
| 			<span class="text"><slot name="suffix"></slot></span> | 			<span class="text"><slot name="suffix"></slot></span> | ||||||
| 			<i class="fas fa-external-link-alt icon"></i> | 			<i class="ti ti-external-link icon"></i> | ||||||
| 		</span> | 		</span> | ||||||
| 	</a> | 	</a> | ||||||
| 	<MkA v-else class="main _button" :class="{ active }" :to="to" :behavior="behavior"> | 	<MkA v-else class="main _button" :class="{ active }" :to="to" :behavior="behavior"> | ||||||
|  | @ -13,7 +13,7 @@ | ||||||
| 		<span class="text"><slot></slot></span> | 		<span class="text"><slot></slot></span> | ||||||
| 		<span class="right"> | 		<span class="right"> | ||||||
| 			<span class="text"><slot name="suffix"></slot></span> | 			<span class="text"><slot name="suffix"></slot></span> | ||||||
| 			<i class="fas fa-chevron-right icon"></i> | 			<i class="ti ti-chevron-right icon"></i> | ||||||
| 		</span> | 		</span> | ||||||
| 	</MkA> | 	</MkA> | ||||||
| </div> | </div> | ||||||
|  |  | ||||||
|  | @ -45,12 +45,13 @@ function toggle(): void { | ||||||
| 	display: inline-block; | 	display: inline-block; | ||||||
| 	text-align: left; | 	text-align: left; | ||||||
| 	cursor: pointer; | 	cursor: pointer; | ||||||
| 	padding: 8px 10px; | 	padding: 7px 10px; | ||||||
| 	min-width: 60px; | 	min-width: 60px; | ||||||
| 	background-color: var(--panel); | 	background-color: var(--panel); | ||||||
| 	background-clip: padding-box !important; | 	background-clip: padding-box !important; | ||||||
| 	border: solid 1px var(--panel); | 	border: solid 1px var(--panel); | ||||||
| 	border-radius: 6px; | 	border-radius: 6px; | ||||||
|  | 	font-size: 90%; | ||||||
| 	transition: all 0.2s; | 	transition: all 0.2s; | ||||||
| 
 | 
 | ||||||
| 	> * { | 	> * { | ||||||
|  |  | ||||||
|  | @ -18,11 +18,11 @@ | ||||||
| 		> | 		> | ||||||
| 			<slot></slot> | 			<slot></slot> | ||||||
| 		</select> | 		</select> | ||||||
| 		<div ref="suffixEl" class="suffix"><i class="fas fa-chevron-down"></i></div> | 		<div ref="suffixEl" class="suffix"><i class="ti ti-chevron-down"></i></div> | ||||||
| 	</div> | 	</div> | ||||||
| 	<div class="caption"><slot name="caption"></slot></div> | 	<div class="caption"><slot name="caption"></slot></div> | ||||||
| 
 | 
 | ||||||
| 	<MkButton v-if="manualSave && changed" primary @click="updated"><i class="fas fa-save"></i> {{ i18n.ts.save }}</MkButton> | 	<MkButton v-if="manualSave && changed" primary @click="updated"><i class="ti ti-device-floppy"></i> {{ i18n.ts.save }}</MkButton> | ||||||
| </div> | </div> | ||||||
| </template> | </template> | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -8,7 +8,7 @@ | ||||||
| 	</div> | 	</div> | ||||||
| 	<div v-else> | 	<div v-else> | ||||||
| 		<div class="wszdbhzo"> | 		<div class="wszdbhzo"> | ||||||
| 			<div><i class="fas fa-exclamation-triangle"></i> {{ $ts.somethingHappened }}</div> | 			<div><i class="ti ti-alert-triangle"></i> {{ $ts.somethingHappened }}</div> | ||||||
| 			<MkButton inline class="retry" @click="retry"><i class="fas fa-redo-alt"></i> {{ $ts.retry }}</MkButton> | 			<MkButton inline class="retry" @click="retry"><i class="fas fa-redo-alt"></i> {{ $ts.retry }}</MkButton> | ||||||
| 		</div> | 		</div> | ||||||
| 	</div> | 	</div> | ||||||
|  |  | ||||||
|  | @ -22,7 +22,7 @@ | ||||||
| 	</div> | 	</div> | ||||||
| 	<div class="caption"><slot name="caption"></slot></div> | 	<div class="caption"><slot name="caption"></slot></div> | ||||||
| 
 | 
 | ||||||
| 	<MkButton v-if="manualSave && changed" primary class="save" @click="updated"><i class="fas fa-save"></i> {{ i18n.ts.save }}</MkButton> | 	<MkButton v-if="manualSave && changed" primary class="save" @click="updated"><i class="ti ti-device-floppy"></i> {{ i18n.ts.save }}</MkButton> | ||||||
| </div> | </div> | ||||||
| </template> | </template> | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -41,25 +41,25 @@ function onContextmenu(ev) { | ||||||
| 		type: 'label', | 		type: 'label', | ||||||
| 		text: props.to, | 		text: props.to, | ||||||
| 	}, { | 	}, { | ||||||
| 		icon: 'fas fa-window-maximize', | 		icon: 'ti ti-window-maximize', | ||||||
| 		text: i18n.ts.openInWindow, | 		text: i18n.ts.openInWindow, | ||||||
| 		action: () => { | 		action: () => { | ||||||
| 			os.pageWindow(props.to); | 			os.pageWindow(props.to); | ||||||
| 		}, | 		}, | ||||||
| 	}, { | 	}, { | ||||||
| 		icon: 'fas fa-expand-alt', | 		icon: 'ti ti-arrows-maximize', | ||||||
| 		text: i18n.ts.showInPage, | 		text: i18n.ts.showInPage, | ||||||
| 		action: () => { | 		action: () => { | ||||||
| 			router.push(props.to, 'forcePage'); | 			router.push(props.to, 'forcePage'); | ||||||
| 		}, | 		}, | ||||||
| 	}, null, { | 	}, null, { | ||||||
| 		icon: 'fas fa-external-link-alt', | 		icon: 'ti ti-external-link', | ||||||
| 		text: i18n.ts.openInNewTab, | 		text: i18n.ts.openInNewTab, | ||||||
| 		action: () => { | 		action: () => { | ||||||
| 			window.open(props.to, '_blank'); | 			window.open(props.to, '_blank'); | ||||||
| 		}, | 		}, | ||||||
| 	}, { | 	}, { | ||||||
| 		icon: 'fas fa-link', | 		icon: 'ti ti-link', | ||||||
| 		text: i18n.ts.copyLink, | 		text: i18n.ts.copyLink, | ||||||
| 		action: () => { | 		action: () => { | ||||||
| 			copyToClipboard(`${url}${props.to}`); | 			copyToClipboard(`${url}${props.to}`); | ||||||
|  |  | ||||||
|  | @ -3,7 +3,7 @@ | ||||||
| 	<div v-if="!showMenu" class="main" :class="chosen.place"> | 	<div v-if="!showMenu" class="main" :class="chosen.place"> | ||||||
| 		<a :href="chosen.url" target="_blank"> | 		<a :href="chosen.url" target="_blank"> | ||||||
| 			<img :src="chosen.imageUrl"> | 			<img :src="chosen.imageUrl"> | ||||||
| 			<button class="_button menu" @click.prevent.stop="toggleMenu"><span class="fas fa-info-circle info-circle"></span></button> | 			<button class="_button menu" @click.prevent.stop="toggleMenu"><span class="ti ti-info-circle info-circle"></span></button> | ||||||
| 		</a> | 		</a> | ||||||
| 	</div> | 	</div> | ||||||
| 	<div v-else class="menu"> | 	<div v-else class="menu"> | ||||||
|  |  | ||||||
|  | @ -2,7 +2,7 @@ | ||||||
| <transition :name="$store.state.animation ? 'zoom' : ''" appear> | <transition :name="$store.state.animation ? 'zoom' : ''" appear> | ||||||
| 	<div class="mjndxjcg"> | 	<div class="mjndxjcg"> | ||||||
| 		<img src="https://xn--931a.moe/assets/error.jpg" class="_ghost"/> | 		<img src="https://xn--931a.moe/assets/error.jpg" class="_ghost"/> | ||||||
| 		<p><i class="fas fa-exclamation-triangle"></i> {{ i18n.ts.somethingHappened }}</p> | 		<p><i class="ti ti-alert-triangle"></i> {{ i18n.ts.somethingHappened }}</p> | ||||||
| 		<MkButton class="button" @click="() => $emit('retry')">{{ i18n.ts.retry }}</MkButton> | 		<MkButton class="button" @click="() => $emit('retry')">{{ i18n.ts.retry }}</MkButton> | ||||||
| 	</div> | 	</div> | ||||||
| </transition> | </transition> | ||||||
|  |  | ||||||
|  | @ -16,7 +16,7 @@ | ||||||
| 				</div> | 				</div> | ||||||
| 				<div v-if="narrow && hasTabs" class="subtitle activeTab"> | 				<div v-if="narrow && hasTabs" class="subtitle activeTab"> | ||||||
| 					{{ tabs.find(tab => tab.key === props.tab)?.title }} | 					{{ tabs.find(tab => tab.key === props.tab)?.title }} | ||||||
| 					<i class="chevron fas fa-chevron-down"></i> | 					<i class="chevron ti ti-chevron-down"></i> | ||||||
| 				</div> | 				</div> | ||||||
| 			</div> | 			</div> | ||||||
| 		</div> | 		</div> | ||||||
|  |  | ||||||
|  | @ -14,7 +14,7 @@ | ||||||
| 	<span v-if="pathname != ''" class="pathname">{{ self ? pathname.substring(1) : pathname }}</span> | 	<span v-if="pathname != ''" class="pathname">{{ self ? pathname.substring(1) : pathname }}</span> | ||||||
| 	<span class="query">{{ query }}</span> | 	<span class="query">{{ query }}</span> | ||||||
| 	<span class="hash">{{ hash }}</span> | 	<span class="hash">{{ hash }}</span> | ||||||
| 	<i v-if="target === '_blank'" class="fas fa-external-link-square-alt icon"></i> | 	<i v-if="target === '_blank'" class="ti ti-external-link icon"></i> | ||||||
| </component> | </component> | ||||||
| </template> | </template> | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -2,8 +2,8 @@ | ||||||
| <div class="ngbfujlo"> | <div class="ngbfujlo"> | ||||||
| 	<MkTextarea :model-value="text" readonly style="margin: 0;"></MkTextarea> | 	<MkTextarea :model-value="text" readonly style="margin: 0;"></MkTextarea> | ||||||
| 	<MkButton class="button" primary :disabled="posting || posted" @click="post()"> | 	<MkButton class="button" primary :disabled="posting || posted" @click="post()"> | ||||||
| 		<i v-if="posted" class="fas fa-check"></i> | 		<i v-if="posted" class="ti ti-check"></i> | ||||||
| 		<i v-else class="fas fa-paper-plane"></i> | 		<i v-else class="ti ti-send"></i> | ||||||
| 	</MkButton> | 	</MkButton> | ||||||
| </div> | </div> | ||||||
| </template> | </template> | ||||||
|  |  | ||||||
|  | @ -9,70 +9,70 @@ import { unisonReload } from '@/scripts/unison-reload'; | ||||||
| export const navbarItemDef = reactive({ | export const navbarItemDef = reactive({ | ||||||
| 	notifications: { | 	notifications: { | ||||||
| 		title: 'notifications', | 		title: 'notifications', | ||||||
| 		icon: 'fas fa-bell', | 		icon: 'ti ti-bell', | ||||||
| 		show: computed(() => $i != null), | 		show: computed(() => $i != null), | ||||||
| 		indicated: computed(() => $i != null && $i.hasUnreadNotification), | 		indicated: computed(() => $i != null && $i.hasUnreadNotification), | ||||||
| 		to: '/my/notifications', | 		to: '/my/notifications', | ||||||
| 	}, | 	}, | ||||||
| 	messaging: { | 	messaging: { | ||||||
| 		title: 'messaging', | 		title: 'messaging', | ||||||
| 		icon: 'fas fa-comments', | 		icon: 'ti ti-messages', | ||||||
| 		show: computed(() => $i != null), | 		show: computed(() => $i != null), | ||||||
| 		indicated: computed(() => $i != null && $i.hasUnreadMessagingMessage), | 		indicated: computed(() => $i != null && $i.hasUnreadMessagingMessage), | ||||||
| 		to: '/my/messaging', | 		to: '/my/messaging', | ||||||
| 	}, | 	}, | ||||||
| 	drive: { | 	drive: { | ||||||
| 		title: 'drive', | 		title: 'drive', | ||||||
| 		icon: 'fas fa-cloud', | 		icon: 'ti ti-cloud', | ||||||
| 		show: computed(() => $i != null), | 		show: computed(() => $i != null), | ||||||
| 		to: '/my/drive', | 		to: '/my/drive', | ||||||
| 	}, | 	}, | ||||||
| 	followRequests: { | 	followRequests: { | ||||||
| 		title: 'followRequests', | 		title: 'followRequests', | ||||||
| 		icon: 'fas fa-user-clock', | 		icon: 'ti ti-user-clock', | ||||||
| 		show: computed(() => $i != null && $i.isLocked), | 		show: computed(() => $i != null && $i.isLocked), | ||||||
| 		indicated: computed(() => $i != null && $i.hasPendingReceivedFollowRequest), | 		indicated: computed(() => $i != null && $i.hasPendingReceivedFollowRequest), | ||||||
| 		to: '/my/follow-requests', | 		to: '/my/follow-requests', | ||||||
| 	}, | 	}, | ||||||
| 	explore: { | 	explore: { | ||||||
| 		title: 'explore', | 		title: 'explore', | ||||||
| 		icon: 'fas fa-hashtag', | 		icon: 'ti ti-hash', | ||||||
| 		to: '/explore', | 		to: '/explore', | ||||||
| 	}, | 	}, | ||||||
| 	announcements: { | 	announcements: { | ||||||
| 		title: 'announcements', | 		title: 'announcements', | ||||||
| 		icon: 'fas fa-broadcast-tower', | 		icon: 'ti ti-speakerphone', | ||||||
| 		indicated: computed(() => $i != null && $i.hasUnreadAnnouncement), | 		indicated: computed(() => $i != null && $i.hasUnreadAnnouncement), | ||||||
| 		to: '/announcements', | 		to: '/announcements', | ||||||
| 	}, | 	}, | ||||||
| 	search: { | 	search: { | ||||||
| 		title: 'search', | 		title: 'search', | ||||||
| 		icon: 'fas fa-search', | 		icon: 'ti ti-search', | ||||||
| 		action: () => search(), | 		action: () => search(), | ||||||
| 	}, | 	}, | ||||||
| 	lists: { | 	lists: { | ||||||
| 		title: 'lists', | 		title: 'lists', | ||||||
| 		icon: 'fas fa-list-ul', | 		icon: 'ti ti-list', | ||||||
| 		show: computed(() => $i != null), | 		show: computed(() => $i != null), | ||||||
| 		to: '/my/lists', | 		to: '/my/lists', | ||||||
| 	}, | 	}, | ||||||
| 	/* | 	/* | ||||||
| 	groups: { | 	groups: { | ||||||
| 		title: 'groups', | 		title: 'groups', | ||||||
| 		icon: 'fas fa-users', | 		icon: 'ti ti-users', | ||||||
| 		show: computed(() => $i != null), | 		show: computed(() => $i != null), | ||||||
| 		to: '/my/groups', | 		to: '/my/groups', | ||||||
| 	}, | 	}, | ||||||
| 	*/ | 	*/ | ||||||
| 	antennas: { | 	antennas: { | ||||||
| 		title: 'antennas', | 		title: 'antennas', | ||||||
| 		icon: 'fas fa-satellite', | 		icon: 'ti ti-antenna', | ||||||
| 		show: computed(() => $i != null), | 		show: computed(() => $i != null), | ||||||
| 		to: '/my/antennas', | 		to: '/my/antennas', | ||||||
| 	}, | 	}, | ||||||
| 	favorites: { | 	favorites: { | ||||||
| 		title: 'favorites', | 		title: 'favorites', | ||||||
| 		icon: 'fas fa-star', | 		icon: 'ti ti-star', | ||||||
| 		show: computed(() => $i != null), | 		show: computed(() => $i != null), | ||||||
| 		to: '/my/favorites', | 		to: '/my/favorites', | ||||||
| 	}, | 	}, | ||||||
|  | @ -83,23 +83,23 @@ export const navbarItemDef = reactive({ | ||||||
| 	}, | 	}, | ||||||
| 	gallery: { | 	gallery: { | ||||||
| 		title: 'gallery', | 		title: 'gallery', | ||||||
| 		icon: 'fas fa-icons', | 		icon: 'ti ti-icons', | ||||||
| 		to: '/gallery', | 		to: '/gallery', | ||||||
| 	}, | 	}, | ||||||
| 	clips: { | 	clips: { | ||||||
| 		title: 'clip', | 		title: 'clip', | ||||||
| 		icon: 'fas fa-paperclip', | 		icon: 'ti ti-paperclip', | ||||||
| 		show: computed(() => $i != null), | 		show: computed(() => $i != null), | ||||||
| 		to: '/my/clips', | 		to: '/my/clips', | ||||||
| 	}, | 	}, | ||||||
| 	channels: { | 	channels: { | ||||||
| 		title: 'channel', | 		title: 'channel', | ||||||
| 		icon: 'fas fa-satellite-dish', | 		icon: 'ti ti-device-tv', | ||||||
| 		to: '/channels', | 		to: '/channels', | ||||||
| 	}, | 	}, | ||||||
| 	ui: { | 	ui: { | ||||||
| 		title: 'switchUi', | 		title: 'switchUi', | ||||||
| 		icon: 'fas fa-columns', | 		icon: 'ti ti-columns', | ||||||
| 		action: (ev) => { | 		action: (ev) => { | ||||||
| 			os.popupMenu([{ | 			os.popupMenu([{ | ||||||
| 				text: i18n.ts.default, | 				text: i18n.ts.default, | ||||||
|  | @ -127,7 +127,7 @@ export const navbarItemDef = reactive({ | ||||||
| 	}, | 	}, | ||||||
| 	reload: { | 	reload: { | ||||||
| 		title: 'reload', | 		title: 'reload', | ||||||
| 		icon: 'fas fa-refresh', | 		icon: 'ti ti-refresh', | ||||||
| 		action: (ev) => { | 		action: (ev) => { | ||||||
| 			location.reload(); | 			location.reload(); | ||||||
| 		}, | 		}, | ||||||
|  |  | ||||||
|  | @ -3,7 +3,7 @@ | ||||||
| <transition :name="$store.state.animation ? 'zoom' : ''" appear> | <transition :name="$store.state.animation ? 'zoom' : ''" appear> | ||||||
| 	<div v-show="loaded" class="mjndxjch"> | 	<div v-show="loaded" class="mjndxjch"> | ||||||
| 		<img src="https://xn--931a.moe/assets/error.jpg" class="_ghost"/> | 		<img src="https://xn--931a.moe/assets/error.jpg" class="_ghost"/> | ||||||
| 		<p><b><i class="fas fa-exclamation-triangle"></i> {{ i18n.ts.pageLoadError }}</b></p> | 		<p><b><i class="ti ti-alert-triangle"></i> {{ i18n.ts.pageLoadError }}</b></p> | ||||||
| 		<p v-if="meta && (version === meta.version)">{{ i18n.ts.pageLoadErrorDescription }}</p> | 		<p v-if="meta && (version === meta.version)">{{ i18n.ts.pageLoadErrorDescription }}</p> | ||||||
| 		<p v-else-if="serverIsDead">{{ i18n.ts.serverIsDead }}</p> | 		<p v-else-if="serverIsDead">{{ i18n.ts.serverIsDead }}</p> | ||||||
| 		<template v-else> | 		<template v-else> | ||||||
|  | @ -58,7 +58,7 @@ const headerTabs = $computed(() => []); | ||||||
| 
 | 
 | ||||||
| definePageMetadata({ | definePageMetadata({ | ||||||
| 	title: i18n.ts.error, | 	title: i18n.ts.error, | ||||||
| 	icon: 'fas fa-exclamation-triangle', | 	icon: 'ti ti-alert-triangle', | ||||||
| }); | }); | ||||||
| </script> | </script> | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -20,17 +20,17 @@ | ||||||
| 				<FormSection> | 				<FormSection> | ||||||
| 					<div class="_formLinks"> | 					<div class="_formLinks"> | ||||||
| 						<FormLink to="https://github.com/misskey-dev/misskey" external> | 						<FormLink to="https://github.com/misskey-dev/misskey" external> | ||||||
| 							<template #icon><i class="fas fa-code"></i></template> | 							<template #icon><i class="ti ti-code"></i></template> | ||||||
| 							{{ i18n.ts._aboutMisskey.source }} | 							{{ i18n.ts._aboutMisskey.source }} | ||||||
| 							<template #suffix>GitHub</template> | 							<template #suffix>GitHub</template> | ||||||
| 						</FormLink> | 						</FormLink> | ||||||
| 						<FormLink to="https://crowdin.com/project/misskey" external> | 						<FormLink to="https://crowdin.com/project/misskey" external> | ||||||
| 							<template #icon><i class="fas fa-language"></i></template> | 							<template #icon><i class="ti ti-language-hiragana"></i></template> | ||||||
| 							{{ i18n.ts._aboutMisskey.translation }} | 							{{ i18n.ts._aboutMisskey.translation }} | ||||||
| 							<template #suffix>Crowdin</template> | 							<template #suffix>Crowdin</template> | ||||||
| 						</FormLink> | 						</FormLink> | ||||||
| 						<FormLink to="https://www.patreon.com/syuilo" external> | 						<FormLink to="https://www.patreon.com/syuilo" external> | ||||||
| 							<template #icon><i class="fas fa-hand-holding-medical"></i></template> | 							<template #icon><i class="ti ti-pig-money"></i></template> | ||||||
| 							{{ i18n.ts._aboutMisskey.donate }} | 							{{ i18n.ts._aboutMisskey.donate }} | ||||||
| 							<template #suffix>Patreon</template> | 							<template #suffix>Patreon</template> | ||||||
| 						</FormLink> | 						</FormLink> | ||||||
|  |  | ||||||
|  | @ -2,7 +2,7 @@ | ||||||
| <div class="driuhtrh"> | <div class="driuhtrh"> | ||||||
| 	<div class="query"> | 	<div class="query"> | ||||||
| 		<MkInput v-model="q" class="" :placeholder="$ts.search"> | 		<MkInput v-model="q" class="" :placeholder="$ts.search"> | ||||||
| 			<template #prefix><i class="fas fa-search"></i></template> | 			<template #prefix><i class="ti ti-search"></i></template> | ||||||
| 		</MkInput> | 		</MkInput> | ||||||
| 
 | 
 | ||||||
| 		<!-- たくさんあると邪魔 | 		<!-- たくさんあると邪魔 | ||||||
|  |  | ||||||
|  | @ -2,7 +2,7 @@ | ||||||
| <div class="taeiyria"> | <div class="taeiyria"> | ||||||
| 	<div class="query"> | 	<div class="query"> | ||||||
| 		<MkInput v-model="host" :debounce="true" class=""> | 		<MkInput v-model="host" :debounce="true" class=""> | ||||||
| 			<template #prefix><i class="fas fa-search"></i></template> | 			<template #prefix><i class="ti ti-search"></i></template> | ||||||
| 			<template #label>{{ i18n.ts.host }}</template> | 			<template #label>{{ i18n.ts.host }}</template> | ||||||
| 		</MkInput> | 		</MkInput> | ||||||
| 		<FormSplit style="margin-top: var(--margin);"> | 		<FormSplit style="margin-top: var(--margin);"> | ||||||
|  |  | ||||||
|  | @ -119,20 +119,20 @@ const headerTabs = $computed(() => [{ | ||||||
| }, { | }, { | ||||||
| 	key: 'emojis', | 	key: 'emojis', | ||||||
| 	title: i18n.ts.customEmojis, | 	title: i18n.ts.customEmojis, | ||||||
| 	icon: 'fas fa-laugh', | 	icon: 'ti ti-mood-happy', | ||||||
| }, { | }, { | ||||||
| 	key: 'federation', | 	key: 'federation', | ||||||
| 	title: i18n.ts.federation, | 	title: i18n.ts.federation, | ||||||
| 	icon: 'fas fa-globe', | 	icon: 'ti ti-whirl', | ||||||
| }, { | }, { | ||||||
| 	key: 'charts', | 	key: 'charts', | ||||||
| 	title: i18n.ts.charts, | 	title: i18n.ts.charts, | ||||||
| 	icon: 'fas fa-chart-simple', | 	icon: 'ti ti-chart-line', | ||||||
| }]); | }]); | ||||||
| 
 | 
 | ||||||
| definePageMetadata(computed(() => ({ | definePageMetadata(computed(() => ({ | ||||||
| 	title: i18n.ts.instanceInfo, | 	title: i18n.ts.instanceInfo, | ||||||
| 	icon: 'fas fa-info-circle', | 	icon: 'ti ti-info-circle', | ||||||
| }))); | }))); | ||||||
| </script> | </script> | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -36,7 +36,7 @@ | ||||||
| 			</div> | 			</div> | ||||||
| 
 | 
 | ||||||
| 			<div class="_formBlock"> | 			<div class="_formBlock"> | ||||||
| 				<MkButton danger @click="del"><i class="fas fa-trash-alt"></i> {{ i18n.ts.delete }}</MkButton> | 				<MkButton danger @click="del"><i class="ti ti-trash"></i> {{ i18n.ts.delete }}</MkButton> | ||||||
| 			</div> | 			</div> | ||||||
| 		</div> | 		</div> | ||||||
| 		<div v-else-if="tab === 'ip' && info" class="_formRoot"> | 		<div v-else-if="tab === 'ip' && info" class="_formRoot"> | ||||||
|  | @ -114,7 +114,7 @@ async function toggleIsSensitive(v) { | ||||||
| 
 | 
 | ||||||
| const headerActions = $computed(() => [{ | const headerActions = $computed(() => [{ | ||||||
| 	text: i18n.ts.openInNewTab, | 	text: i18n.ts.openInNewTab, | ||||||
| 	icon: 'fas fa-external-link-alt', | 	icon: 'ti ti-external-link', | ||||||
| 	handler: () => { | 	handler: () => { | ||||||
| 		window.open(file.url, '_blank'); | 		window.open(file.url, '_blank'); | ||||||
| 	}, | 	}, | ||||||
|  | @ -123,15 +123,15 @@ const headerActions = $computed(() => [{ | ||||||
| const headerTabs = $computed(() => [{ | const headerTabs = $computed(() => [{ | ||||||
| 	key: 'overview', | 	key: 'overview', | ||||||
| 	title: i18n.ts.overview, | 	title: i18n.ts.overview, | ||||||
| 	icon: 'fas fa-info-circle', | 	icon: 'ti ti-info-circle', | ||||||
| }, iAmModerator ? { | }, iAmModerator ? { | ||||||
| 	key: 'ip', | 	key: 'ip', | ||||||
| 	title: 'IP', | 	title: 'IP', | ||||||
| 	icon: 'fas fa-bars-staggered', | 	icon: 'ti ti-password', | ||||||
| } : null, { | } : null, { | ||||||
| 	key: 'raw', | 	key: 'raw', | ||||||
| 	title: 'Raw data', | 	title: 'Raw data', | ||||||
| 	icon: 'fas fa-code', | 	icon: 'ti ti-code', | ||||||
| }]); | }]); | ||||||
| 
 | 
 | ||||||
| definePageMetadata(computed(() => ({ | definePageMetadata(computed(() => ({ | ||||||
|  |  | ||||||
|  | @ -86,7 +86,7 @@ const headerTabs = $computed(() => []); | ||||||
| 
 | 
 | ||||||
| definePageMetadata({ | definePageMetadata({ | ||||||
| 	title: i18n.ts.abuseReports, | 	title: i18n.ts.abuseReports, | ||||||
| 	icon: 'fas fa-exclamation-circle', | 	icon: 'ti ti-exclamation-circle', | ||||||
| }); | }); | ||||||
| </script> | </script> | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -37,8 +37,8 @@ | ||||||
| 					<template #label>{{ i18n.ts.memo }}</template> | 					<template #label>{{ i18n.ts.memo }}</template> | ||||||
| 				</MkTextarea> | 				</MkTextarea> | ||||||
| 				<div class="buttons _formBlock"> | 				<div class="buttons _formBlock"> | ||||||
| 					<MkButton class="button" inline primary style="margin-right: 12px;" @click="save(ad)"><i class="fas fa-save"></i> {{ i18n.ts.save }}</MkButton> | 					<MkButton class="button" inline primary style="margin-right: 12px;" @click="save(ad)"><i class="ti ti-device-floppy"></i> {{ i18n.ts.save }}</MkButton> | ||||||
| 					<MkButton class="button" inline danger @click="remove(ad)"><i class="fas fa-trash-alt"></i> {{ i18n.ts.remove }}</MkButton> | 					<MkButton class="button" inline danger @click="remove(ad)"><i class="ti ti-trash"></i> {{ i18n.ts.remove }}</MkButton> | ||||||
| 				</div> | 				</div> | ||||||
| 			</div> | 			</div> | ||||||
| 		</div> | 		</div> | ||||||
|  | @ -106,7 +106,7 @@ function save(ad) { | ||||||
| 
 | 
 | ||||||
| const headerActions = $computed(() => [{ | const headerActions = $computed(() => [{ | ||||||
| 	asFullButton: true, | 	asFullButton: true, | ||||||
| 	icon: 'fas fa-plus', | 	icon: 'ti ti-plus', | ||||||
| 	text: i18n.ts.add, | 	text: i18n.ts.add, | ||||||
| 	handler: add, | 	handler: add, | ||||||
| }]); | }]); | ||||||
|  | @ -115,7 +115,7 @@ const headerTabs = $computed(() => []); | ||||||
| 
 | 
 | ||||||
| definePageMetadata({ | definePageMetadata({ | ||||||
| 	title: i18n.ts.ads, | 	title: i18n.ts.ads, | ||||||
| 	icon: 'fas fa-audio-description', | 	icon: 'ti ti-ad', | ||||||
| }); | }); | ||||||
| </script> | </script> | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -16,8 +16,8 @@ | ||||||
| 					</MkInput> | 					</MkInput> | ||||||
| 					<p v-if="announcement.reads">{{ i18n.t('nUsersRead', { n: announcement.reads }) }}</p> | 					<p v-if="announcement.reads">{{ i18n.t('nUsersRead', { n: announcement.reads }) }}</p> | ||||||
| 					<div class="buttons"> | 					<div class="buttons"> | ||||||
| 						<MkButton class="button" inline primary @click="save(announcement)"><i class="fas fa-save"></i> {{ i18n.ts.save }}</MkButton> | 						<MkButton class="button" inline primary @click="save(announcement)"><i class="ti ti-device-floppy"></i> {{ i18n.ts.save }}</MkButton> | ||||||
| 						<MkButton class="button" inline @click="remove(announcement)"><i class="fas fa-trash-alt"></i> {{ i18n.ts.remove }}</MkButton> | 						<MkButton class="button" inline @click="remove(announcement)"><i class="ti ti-trash"></i> {{ i18n.ts.remove }}</MkButton> | ||||||
| 					</div> | 					</div> | ||||||
| 				</div> | 				</div> | ||||||
| 			</section> | 			</section> | ||||||
|  | @ -92,7 +92,7 @@ function save(announcement) { | ||||||
| 
 | 
 | ||||||
| const headerActions = $computed(() => [{ | const headerActions = $computed(() => [{ | ||||||
| 	asFullButton: true, | 	asFullButton: true, | ||||||
| 	icon: 'fas fa-plus', | 	icon: 'ti ti-plus', | ||||||
| 	text: i18n.ts.add, | 	text: i18n.ts.add, | ||||||
| 	handler: add, | 	handler: add, | ||||||
| }]); | }]); | ||||||
|  | @ -101,7 +101,7 @@ const headerTabs = $computed(() => []); | ||||||
| 
 | 
 | ||||||
| definePageMetadata({ | definePageMetadata({ | ||||||
| 	title: i18n.ts.announcements, | 	title: i18n.ts.announcements, | ||||||
| 	icon: 'fas fa-broadcast-tower', | 	icon: 'ti ti-speakerphone', | ||||||
| }); | }); | ||||||
| </script> | </script> | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -11,11 +11,11 @@ | ||||||
| 
 | 
 | ||||||
| 			<template v-if="provider === 'hcaptcha'"> | 			<template v-if="provider === 'hcaptcha'"> | ||||||
| 				<FormInput v-model="hcaptchaSiteKey" class="_formBlock"> | 				<FormInput v-model="hcaptchaSiteKey" class="_formBlock"> | ||||||
| 					<template #prefix><i class="fas fa-key"></i></template> | 					<template #prefix><i class="ti ti-key"></i></template> | ||||||
| 					<template #label>{{ i18n.ts.hcaptchaSiteKey }}</template> | 					<template #label>{{ i18n.ts.hcaptchaSiteKey }}</template> | ||||||
| 				</FormInput> | 				</FormInput> | ||||||
| 				<FormInput v-model="hcaptchaSecretKey" class="_formBlock"> | 				<FormInput v-model="hcaptchaSecretKey" class="_formBlock"> | ||||||
| 					<template #prefix><i class="fas fa-key"></i></template> | 					<template #prefix><i class="ti ti-key"></i></template> | ||||||
| 					<template #label>{{ i18n.ts.hcaptchaSecretKey }}</template> | 					<template #label>{{ i18n.ts.hcaptchaSecretKey }}</template> | ||||||
| 				</FormInput> | 				</FormInput> | ||||||
| 				<FormSlot class="_formBlock"> | 				<FormSlot class="_formBlock"> | ||||||
|  | @ -25,11 +25,11 @@ | ||||||
| 			</template> | 			</template> | ||||||
| 			<template v-else-if="provider === 'recaptcha'"> | 			<template v-else-if="provider === 'recaptcha'"> | ||||||
| 				<FormInput v-model="recaptchaSiteKey" class="_formBlock"> | 				<FormInput v-model="recaptchaSiteKey" class="_formBlock"> | ||||||
| 					<template #prefix><i class="fas fa-key"></i></template> | 					<template #prefix><i class="ti ti-key"></i></template> | ||||||
| 					<template #label>{{ i18n.ts.recaptchaSiteKey }}</template> | 					<template #label>{{ i18n.ts.recaptchaSiteKey }}</template> | ||||||
| 				</FormInput> | 				</FormInput> | ||||||
| 				<FormInput v-model="recaptchaSecretKey" class="_formBlock"> | 				<FormInput v-model="recaptchaSecretKey" class="_formBlock"> | ||||||
| 					<template #prefix><i class="fas fa-key"></i></template> | 					<template #prefix><i class="ti ti-key"></i></template> | ||||||
| 					<template #label>{{ i18n.ts.recaptchaSecretKey }}</template> | 					<template #label>{{ i18n.ts.recaptchaSecretKey }}</template> | ||||||
| 				</FormInput> | 				</FormInput> | ||||||
| 				<FormSlot v-if="recaptchaSiteKey" class="_formBlock"> | 				<FormSlot v-if="recaptchaSiteKey" class="_formBlock"> | ||||||
|  | @ -39,11 +39,11 @@ | ||||||
| 			</template> | 			</template> | ||||||
| 			<template v-else-if="provider === 'turnstile'"> | 			<template v-else-if="provider === 'turnstile'"> | ||||||
| 				<FormInput v-model="turnstileSiteKey" class="_formBlock"> | 				<FormInput v-model="turnstileSiteKey" class="_formBlock"> | ||||||
| 					<template #prefix><i class="fas fa-key"></i></template> | 					<template #prefix><i class="ti ti-key"></i></template> | ||||||
| 					<template #label>{{ i18n.ts.turnstileSiteKey }}</template> | 					<template #label>{{ i18n.ts.turnstileSiteKey }}</template> | ||||||
| 				</FormInput> | 				</FormInput> | ||||||
| 				<FormInput v-model="turnstileSecretKey" class="_formBlock"> | 				<FormInput v-model="turnstileSecretKey" class="_formBlock"> | ||||||
| 					<template #prefix><i class="fas fa-key"></i></template> | 					<template #prefix><i class="ti ti-key"></i></template> | ||||||
| 					<template #label>{{ i18n.ts.turnstileSecretKey }}</template> | 					<template #label>{{ i18n.ts.turnstileSecretKey }}</template> | ||||||
| 				</FormInput> | 				</FormInput> | ||||||
| 				<FormSlot class="_formBlock"> | 				<FormSlot class="_formBlock"> | ||||||
|  | @ -52,7 +52,7 @@ | ||||||
| 				</FormSlot> | 				</FormSlot> | ||||||
| 			</template> | 			</template> | ||||||
| 
 | 
 | ||||||
| 			<FormButton primary @click="save"><i class="fas fa-save"></i> {{ i18n.ts.save }}</FormButton> | 			<FormButton primary @click="save"><i class="ti ti-device-floppy"></i> {{ i18n.ts.save }}</FormButton> | ||||||
| 		</div> | 		</div> | ||||||
| 	</FormSuspense> | 	</FormSuspense> | ||||||
| </div> | </div> | ||||||
|  |  | ||||||
|  | @ -1,13 +1,15 @@ | ||||||
| <template><MkStickyContainer> | <template> | ||||||
|  | <MkStickyContainer> | ||||||
| 	<template #header><MkPageHeader :actions="headerActions" :tabs="headerTabs"/></template> | 	<template #header><MkPageHeader :actions="headerActions" :tabs="headerTabs"/></template> | ||||||
| 		<MkSpacer :content-max="800" :margin-min="16" :margin-max="32"> | 	<MkSpacer :content-max="800" :margin-min="16" :margin-max="32"> | ||||||
| 	<FormSuspense v-slot="{ result: database }" :p="databasePromiseFactory"> | 		<FormSuspense v-slot="{ result: database }" :p="databasePromiseFactory"> | ||||||
| 		<MkKeyValue v-for="table in database" :key="table[0]" oneline style="margin: 1em 0;"> | 			<MkKeyValue v-for="table in database" :key="table[0]" oneline style="margin: 1em 0;"> | ||||||
| 			<template #key>{{ table[0] }}</template> | 				<template #key>{{ table[0] }}</template> | ||||||
| 			<template #value>{{ bytes(table[1].size) }} ({{ number(table[1].count) }} recs)</template> | 				<template #value>{{ bytes(table[1].size) }} ({{ number(table[1].count) }} recs)</template> | ||||||
| 		</MkKeyValue> | 			</MkKeyValue> | ||||||
| 	</FormSuspense> | 		</FormSuspense> | ||||||
| </MkSpacer></MkStickyContainer> | 	</MkSpacer> | ||||||
|  | </MkStickyContainer> | ||||||
| </template> | </template> | ||||||
| 
 | 
 | ||||||
| <script lang="ts" setup> | <script lang="ts" setup> | ||||||
|  | @ -28,6 +30,6 @@ const headerTabs = $computed(() => []); | ||||||
| 
 | 
 | ||||||
| definePageMetadata({ | definePageMetadata({ | ||||||
| 	title: i18n.ts.database, | 	title: i18n.ts.database, | ||||||
| 	icon: 'fas fa-database', | 	icon: 'ti ti-database', | ||||||
| }); | }); | ||||||
| </script> | </script> | ||||||
|  |  | ||||||
|  | @ -112,7 +112,7 @@ const headerActions = $computed(() => [{ | ||||||
| 	handler: testEmail, | 	handler: testEmail, | ||||||
| }, { | }, { | ||||||
| 	asFullButton: true, | 	asFullButton: true, | ||||||
| 	icon: 'fas fa-check', | 	icon: 'ti ti-check', | ||||||
| 	text: i18n.ts.save, | 	text: i18n.ts.save, | ||||||
| 	handler: save, | 	handler: save, | ||||||
| }]); | }]); | ||||||
|  | @ -121,6 +121,6 @@ const headerTabs = $computed(() => []); | ||||||
| 
 | 
 | ||||||
| definePageMetadata({ | definePageMetadata({ | ||||||
| 	title: i18n.ts.emailServer, | 	title: i18n.ts.emailServer, | ||||||
| 	icon: 'fas fa-envelope', | 	icon: 'ti ti-mail', | ||||||
| }); | }); | ||||||
| </script> | </script> | ||||||
|  |  | ||||||
|  | @ -22,7 +22,7 @@ | ||||||
| 				<template #label>{{ i18n.ts.tags }}</template> | 				<template #label>{{ i18n.ts.tags }}</template> | ||||||
| 				<template #caption>{{ i18n.ts.setMultipleBySeparatingWithSpace }}</template> | 				<template #caption>{{ i18n.ts.setMultipleBySeparatingWithSpace }}</template> | ||||||
| 			</MkInput> | 			</MkInput> | ||||||
| 			<MkButton danger @click="del()"><i class="fas fa-trash-alt"></i> {{ i18n.ts.delete }}</MkButton> | 			<MkButton danger @click="del()"><i class="ti ti-trash"></i> {{ i18n.ts.delete }}</MkButton> | ||||||
| 		</div> | 		</div> | ||||||
| 	</div> | 	</div> | ||||||
| </XModalWindow> | </XModalWindow> | ||||||
|  |  | ||||||
|  | @ -6,7 +6,7 @@ | ||||||
| 			<div class="ogwlenmc"> | 			<div class="ogwlenmc"> | ||||||
| 				<div v-if="tab === 'local'" class="local"> | 				<div v-if="tab === 'local'" class="local"> | ||||||
| 					<MkInput v-model="query" :debounce="true" type="search"> | 					<MkInput v-model="query" :debounce="true" type="search"> | ||||||
| 						<template #prefix><i class="fas fa-search"></i></template> | 						<template #prefix><i class="ti ti-search"></i></template> | ||||||
| 						<template #label>{{ i18n.ts.search }}</template> | 						<template #label>{{ i18n.ts.search }}</template> | ||||||
| 					</MkInput> | 					</MkInput> | ||||||
| 					<MkSwitch v-model="selectMode" style="margin: 8px 0;"> | 					<MkSwitch v-model="selectMode" style="margin: 8px 0;"> | ||||||
|  | @ -39,7 +39,7 @@ | ||||||
| 				<div v-else-if="tab === 'remote'" class="remote"> | 				<div v-else-if="tab === 'remote'" class="remote"> | ||||||
| 					<FormSplit> | 					<FormSplit> | ||||||
| 						<MkInput v-model="queryRemote" :debounce="true" type="search"> | 						<MkInput v-model="queryRemote" :debounce="true" type="search"> | ||||||
| 							<template #prefix><i class="fas fa-search"></i></template> | 							<template #prefix><i class="ti ti-search"></i></template> | ||||||
| 							<template #label>{{ i18n.ts.search }}</template> | 							<template #label>{{ i18n.ts.search }}</template> | ||||||
| 						</MkInput> | 						</MkInput> | ||||||
| 						<MkInput v-model="host" :debounce="true"> | 						<MkInput v-model="host" :debounce="true"> | ||||||
|  | @ -164,49 +164,49 @@ const remoteMenu = (emoji, ev: MouseEvent) => { | ||||||
| 		text: ':' + emoji.name + ':', | 		text: ':' + emoji.name + ':', | ||||||
| 	}, { | 	}, { | ||||||
| 		text: i18n.ts.import, | 		text: i18n.ts.import, | ||||||
| 		icon: 'fas fa-plus', | 		icon: 'ti ti-plus', | ||||||
| 		action: () => { im(emoji); }, | 		action: () => { im(emoji); }, | ||||||
| 	}], ev.currentTarget ?? ev.target); | 	}], ev.currentTarget ?? ev.target); | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| const menu = (ev: MouseEvent) => { | const menu = (ev: MouseEvent) => { | ||||||
| 	os.popupMenu([{ | 	os.popupMenu([{ | ||||||
| 		icon: 'fas fa-download', | 		icon: 'ti ti-download', | ||||||
| 		text: i18n.ts.export, | 		text: i18n.ts.export, | ||||||
| 		action: async () => { | 		action: async () => { | ||||||
| 			os.api('export-custom-emojis', { | 			os.api('export-custom-emojis', { | ||||||
| 			}) | 			}) | ||||||
| 			.then(() => { | 				.then(() => { | ||||||
| 				os.alert({ | 					os.alert({ | ||||||
| 					type: 'info', | 						type: 'info', | ||||||
| 					text: i18n.ts.exportRequested, | 						text: i18n.ts.exportRequested, | ||||||
|  | 					}); | ||||||
|  | 				}).catch((err) => { | ||||||
|  | 					os.alert({ | ||||||
|  | 						type: 'error', | ||||||
|  | 						text: err.message, | ||||||
|  | 					}); | ||||||
| 				}); | 				}); | ||||||
| 			}).catch((err) => { |  | ||||||
| 				os.alert({ |  | ||||||
| 					type: 'error', |  | ||||||
| 					text: err.message, |  | ||||||
| 				}); |  | ||||||
| 			}); |  | ||||||
| 		}, | 		}, | ||||||
| 	}, { | 	}, { | ||||||
| 		icon: 'fas fa-upload', | 		icon: 'ti ti-upload', | ||||||
| 		text: i18n.ts.import, | 		text: i18n.ts.import, | ||||||
| 		action: async () => { | 		action: async () => { | ||||||
| 			const file = await selectFile(ev.currentTarget ?? ev.target); | 			const file = await selectFile(ev.currentTarget ?? ev.target); | ||||||
| 			os.api('admin/emoji/import-zip', { | 			os.api('admin/emoji/import-zip', { | ||||||
| 				fileId: file.id, | 				fileId: file.id, | ||||||
| 			}) | 			}) | ||||||
| 			.then(() => { | 				.then(() => { | ||||||
| 				os.alert({ | 					os.alert({ | ||||||
| 					type: 'info', | 						type: 'info', | ||||||
| 					text: i18n.ts.importRequested, | 						text: i18n.ts.importRequested, | ||||||
|  | 					}); | ||||||
|  | 				}).catch((err) => { | ||||||
|  | 					os.alert({ | ||||||
|  | 						type: 'error', | ||||||
|  | 						text: err.message, | ||||||
|  | 					}); | ||||||
| 				}); | 				}); | ||||||
| 			}).catch((err) => { |  | ||||||
| 				os.alert({ |  | ||||||
| 					type: 'error', |  | ||||||
| 					text: err.message, |  | ||||||
| 				}); |  | ||||||
| 			}); |  | ||||||
| 		}, | 		}, | ||||||
| 	}], ev.currentTarget ?? ev.target); | 	}], ev.currentTarget ?? ev.target); | ||||||
| }; | }; | ||||||
|  | @ -273,11 +273,11 @@ const delBulk = async () => { | ||||||
| 
 | 
 | ||||||
| const headerActions = $computed(() => [{ | const headerActions = $computed(() => [{ | ||||||
| 	asFullButton: true, | 	asFullButton: true, | ||||||
| 	icon: 'fas fa-plus', | 	icon: 'ti ti-plus', | ||||||
| 	text: i18n.ts.addEmoji, | 	text: i18n.ts.addEmoji, | ||||||
| 	handler: add, | 	handler: add, | ||||||
| }, { | }, { | ||||||
| 	icon: 'fas fa-ellipsis-h', | 	icon: 'ti ti-dots', | ||||||
| 	handler: menu, | 	handler: menu, | ||||||
| }]); | }]); | ||||||
| 
 | 
 | ||||||
|  | @ -291,7 +291,7 @@ const headerTabs = $computed(() => [{ | ||||||
| 
 | 
 | ||||||
| definePageMetadata(computed(() => ({ | definePageMetadata(computed(() => ({ | ||||||
| 	title: i18n.ts.customEmojis, | 	title: i18n.ts.customEmojis, | ||||||
| 	icon: 'fas fa-laugh', | 	icon: 'ti ti-mood-happy', | ||||||
| }))); | }))); | ||||||
| </script> | </script> | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -97,11 +97,11 @@ async function find() { | ||||||
| 
 | 
 | ||||||
| const headerActions = $computed(() => [{ | const headerActions = $computed(() => [{ | ||||||
| 	text: i18n.ts.lookup, | 	text: i18n.ts.lookup, | ||||||
| 	icon: 'fas fa-search', | 	icon: 'ti ti-search', | ||||||
| 	handler: find, | 	handler: find, | ||||||
| }, { | }, { | ||||||
| 	text: i18n.ts.clearCachedFiles, | 	text: i18n.ts.clearCachedFiles, | ||||||
| 	icon: 'fas fa-trash-alt', | 	icon: 'ti ti-trash', | ||||||
| 	handler: clear, | 	handler: clear, | ||||||
| }]); | }]); | ||||||
| 
 | 
 | ||||||
|  | @ -109,7 +109,7 @@ const headerTabs = $computed(() => []); | ||||||
| 
 | 
 | ||||||
| definePageMetadata(computed(() => ({ | definePageMetadata(computed(() => ({ | ||||||
| 	title: i18n.ts.files, | 	title: i18n.ts.files, | ||||||
| 	icon: 'fas fa-cloud', | 	icon: 'ti ti-cloud', | ||||||
| }))); | }))); | ||||||
| </script> | </script> | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -40,7 +40,7 @@ const router = useRouter(); | ||||||
| 
 | 
 | ||||||
| const indexInfo = { | const indexInfo = { | ||||||
| 	title: i18n.ts.controlPanel, | 	title: i18n.ts.controlPanel, | ||||||
| 	icon: 'fas fa-cog', | 	icon: 'ti ti-settings', | ||||||
| 	hideHeader: true, | 	hideHeader: true, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | @ -75,34 +75,34 @@ const menuDef = $computed(() => [{ | ||||||
| 	title: i18n.ts.quickAction, | 	title: i18n.ts.quickAction, | ||||||
| 	items: [{ | 	items: [{ | ||||||
| 		type: 'button', | 		type: 'button', | ||||||
| 		icon: 'fas fa-search', | 		icon: 'ti ti-search', | ||||||
| 		text: i18n.ts.lookup, | 		text: i18n.ts.lookup, | ||||||
| 		action: lookup, | 		action: lookup, | ||||||
| 	}, ...(instance.disableRegistration ? [{ | 	}, ...(instance.disableRegistration ? [{ | ||||||
| 		type: 'button', | 		type: 'button', | ||||||
| 		icon: 'fas fa-user', | 		icon: 'ti ti-user', | ||||||
| 		text: i18n.ts.invite, | 		text: i18n.ts.invite, | ||||||
| 		action: invite, | 		action: invite, | ||||||
| 	}] : [])], | 	}] : [])], | ||||||
| }, { | }, { | ||||||
| 	title: i18n.ts.administration, | 	title: i18n.ts.administration, | ||||||
| 	items: [{ | 	items: [{ | ||||||
| 		icon: 'fas fa-tachometer-alt', | 		icon: 'ti ti-dashboard', | ||||||
| 		text: i18n.ts.dashboard, | 		text: i18n.ts.dashboard, | ||||||
| 		to: '/admin/overview', | 		to: '/admin/overview', | ||||||
| 		active: currentPage?.route.name === 'overview', | 		active: currentPage?.route.name === 'overview', | ||||||
| 	}, { | 	}, { | ||||||
| 		icon: 'fas fa-users', | 		icon: 'ti ti-users', | ||||||
| 		text: i18n.ts.users, | 		text: i18n.ts.users, | ||||||
| 		to: '/admin/users', | 		to: '/admin/users', | ||||||
| 		active: currentPage?.route.name === 'users', | 		active: currentPage?.route.name === 'users', | ||||||
| 	}, { | 	}, { | ||||||
| 		icon: 'fas fa-laugh', | 		icon: 'ti ti-mood-happy', | ||||||
| 		text: i18n.ts.customEmojis, | 		text: i18n.ts.customEmojis, | ||||||
| 		to: '/admin/emojis', | 		to: '/admin/emojis', | ||||||
| 		active: currentPage?.route.name === 'emojis', | 		active: currentPage?.route.name === 'emojis', | ||||||
| 	}, { | 	}, { | ||||||
| 		icon: 'fas fa-globe', | 		icon: 'ti ti-whirl', | ||||||
| 		text: i18n.ts.federation, | 		text: i18n.ts.federation, | ||||||
| 		to: '/about#federation', | 		to: '/about#federation', | ||||||
| 		active: currentPage?.route.name === 'federation', | 		active: currentPage?.route.name === 'federation', | ||||||
|  | @ -112,22 +112,22 @@ const menuDef = $computed(() => [{ | ||||||
| 		to: '/admin/queue', | 		to: '/admin/queue', | ||||||
| 		active: currentPage?.route.name === 'queue', | 		active: currentPage?.route.name === 'queue', | ||||||
| 	}, { | 	}, { | ||||||
| 		icon: 'fas fa-cloud', | 		icon: 'ti ti-cloud', | ||||||
| 		text: i18n.ts.files, | 		text: i18n.ts.files, | ||||||
| 		to: '/admin/files', | 		to: '/admin/files', | ||||||
| 		active: currentPage?.route.name === 'files', | 		active: currentPage?.route.name === 'files', | ||||||
| 	}, { | 	}, { | ||||||
| 		icon: 'fas fa-broadcast-tower', | 		icon: 'ti ti-speakerphone', | ||||||
| 		text: i18n.ts.announcements, | 		text: i18n.ts.announcements, | ||||||
| 		to: '/admin/announcements', | 		to: '/admin/announcements', | ||||||
| 		active: currentPage?.route.name === 'announcements', | 		active: currentPage?.route.name === 'announcements', | ||||||
| 	}, { | 	}, { | ||||||
| 		icon: 'fas fa-audio-description', | 		icon: 'ti ti-ad', | ||||||
| 		text: i18n.ts.ads, | 		text: i18n.ts.ads, | ||||||
| 		to: '/admin/ads', | 		to: '/admin/ads', | ||||||
| 		active: currentPage?.route.name === 'ads', | 		active: currentPage?.route.name === 'ads', | ||||||
| 	}, { | 	}, { | ||||||
| 		icon: 'fas fa-exclamation-circle', | 		icon: 'ti ti-exclamation-circle', | ||||||
| 		text: i18n.ts.abuseReports, | 		text: i18n.ts.abuseReports, | ||||||
| 		to: '/admin/abuses', | 		to: '/admin/abuses', | ||||||
| 		active: currentPage?.route.name === 'abuses', | 		active: currentPage?.route.name === 'abuses', | ||||||
|  | @ -135,37 +135,37 @@ const menuDef = $computed(() => [{ | ||||||
| }, { | }, { | ||||||
| 	title: i18n.ts.settings, | 	title: i18n.ts.settings, | ||||||
| 	items: [{ | 	items: [{ | ||||||
| 		icon: 'fas fa-cog', | 		icon: 'ti ti-settings', | ||||||
| 		text: i18n.ts.general, | 		text: i18n.ts.general, | ||||||
| 		to: '/admin/settings', | 		to: '/admin/settings', | ||||||
| 		active: currentPage?.route.name === 'settings', | 		active: currentPage?.route.name === 'settings', | ||||||
| 	}, { | 	}, { | ||||||
| 		icon: 'fas fa-envelope', | 		icon: 'ti ti-mail', | ||||||
| 		text: i18n.ts.emailServer, | 		text: i18n.ts.emailServer, | ||||||
| 		to: '/admin/email-settings', | 		to: '/admin/email-settings', | ||||||
| 		active: currentPage?.route.name === 'email-settings', | 		active: currentPage?.route.name === 'email-settings', | ||||||
| 	}, { | 	}, { | ||||||
| 		icon: 'fas fa-cloud', | 		icon: 'ti ti-cloud', | ||||||
| 		text: i18n.ts.objectStorage, | 		text: i18n.ts.objectStorage, | ||||||
| 		to: '/admin/object-storage', | 		to: '/admin/object-storage', | ||||||
| 		active: currentPage?.route.name === 'object-storage', | 		active: currentPage?.route.name === 'object-storage', | ||||||
| 	}, { | 	}, { | ||||||
| 		icon: 'fas fa-lock', | 		icon: 'ti ti-lock', | ||||||
| 		text: i18n.ts.security, | 		text: i18n.ts.security, | ||||||
| 		to: '/admin/security', | 		to: '/admin/security', | ||||||
| 		active: currentPage?.route.name === 'security', | 		active: currentPage?.route.name === 'security', | ||||||
| 	}, { | 	}, { | ||||||
| 		icon: 'fas fa-globe', | 		icon: 'ti ti-planet', | ||||||
| 		text: i18n.ts.relays, | 		text: i18n.ts.relays, | ||||||
| 		to: '/admin/relays', | 		to: '/admin/relays', | ||||||
| 		active: currentPage?.route.name === 'relays', | 		active: currentPage?.route.name === 'relays', | ||||||
| 	}, { | 	}, { | ||||||
| 		icon: 'fas fa-share-alt', | 		icon: 'ti ti-share', | ||||||
| 		text: i18n.ts.integration, | 		text: i18n.ts.integration, | ||||||
| 		to: '/admin/integrations', | 		to: '/admin/integrations', | ||||||
| 		active: currentPage?.route.name === 'integrations', | 		active: currentPage?.route.name === 'integrations', | ||||||
| 	}, { | 	}, { | ||||||
| 		icon: 'fas fa-ban', | 		icon: 'ti ti-ban', | ||||||
| 		text: i18n.ts.instanceBlocking, | 		text: i18n.ts.instanceBlocking, | ||||||
| 		to: '/admin/instance-block', | 		to: '/admin/instance-block', | ||||||
| 		active: currentPage?.route.name === 'instance-block', | 		active: currentPage?.route.name === 'instance-block', | ||||||
|  | @ -175,7 +175,7 @@ const menuDef = $computed(() => [{ | ||||||
| 		to: '/admin/proxy-account', | 		to: '/admin/proxy-account', | ||||||
| 		active: currentPage?.route.name === 'proxy-account', | 		active: currentPage?.route.name === 'proxy-account', | ||||||
| 	}, { | 	}, { | ||||||
| 		icon: 'fas fa-cogs', | 		icon: 'ti ti-adjustments', | ||||||
| 		text: i18n.ts.other, | 		text: i18n.ts.other, | ||||||
| 		to: '/admin/other-settings', | 		to: '/admin/other-settings', | ||||||
| 		active: currentPage?.route.name === 'other-settings', | 		active: currentPage?.route.name === 'other-settings', | ||||||
|  | @ -183,7 +183,7 @@ const menuDef = $computed(() => [{ | ||||||
| }, { | }, { | ||||||
| 	title: i18n.ts.info, | 	title: i18n.ts.info, | ||||||
| 	items: [{ | 	items: [{ | ||||||
| 		icon: 'fas fa-database', | 		icon: 'ti ti-database', | ||||||
| 		text: i18n.ts.database, | 		text: i18n.ts.database, | ||||||
| 		to: '/admin/database', | 		to: '/admin/database', | ||||||
| 		active: currentPage?.route.name === 'database', | 		active: currentPage?.route.name === 'database', | ||||||
|  | @ -234,25 +234,25 @@ const invite = () => { | ||||||
| const lookup = (ev) => { | const lookup = (ev) => { | ||||||
| 	os.popupMenu([{ | 	os.popupMenu([{ | ||||||
| 		text: i18n.ts.user, | 		text: i18n.ts.user, | ||||||
| 		icon: 'fas fa-user', | 		icon: 'ti ti-user', | ||||||
| 		action: () => { | 		action: () => { | ||||||
| 			lookupUser(); | 			lookupUser(); | ||||||
| 		}, | 		}, | ||||||
| 	}, { | 	}, { | ||||||
| 		text: i18n.ts.note, | 		text: i18n.ts.note, | ||||||
| 		icon: 'fas fa-pencil-alt', | 		icon: 'ti ti-pencil', | ||||||
| 		action: () => { | 		action: () => { | ||||||
| 			alert('TODO'); | 			alert('TODO'); | ||||||
| 		}, | 		}, | ||||||
| 	}, { | 	}, { | ||||||
| 		text: i18n.ts.file, | 		text: i18n.ts.file, | ||||||
| 		icon: 'fas fa-cloud', | 		icon: 'ti ti-cloud', | ||||||
| 		action: () => { | 		action: () => { | ||||||
| 			alert('TODO'); | 			alert('TODO'); | ||||||
| 		}, | 		}, | ||||||
| 	}, { | 	}, { | ||||||
| 		text: i18n.ts.instance, | 		text: i18n.ts.instance, | ||||||
| 		icon: 'fas fa-globe', | 		icon: 'ti ti-planet', | ||||||
| 		action: () => { | 		action: () => { | ||||||
| 			alert('TODO'); | 			alert('TODO'); | ||||||
| 		}, | 		}, | ||||||
|  |  | ||||||
|  | @ -8,7 +8,7 @@ | ||||||
| 				<template #caption>{{ i18n.ts.blockedInstancesDescription }}</template> | 				<template #caption>{{ i18n.ts.blockedInstancesDescription }}</template> | ||||||
| 			</FormTextarea> | 			</FormTextarea> | ||||||
| 
 | 
 | ||||||
| 			<FormButton primary class="_formBlock" @click="save"><i class="fas fa-save"></i> {{ i18n.ts.save }}</FormButton> | 			<FormButton primary class="_formBlock" @click="save"><i class="ti ti-device-floppy"></i> {{ i18n.ts.save }}</FormButton> | ||||||
| 		</FormSuspense> | 		</FormSuspense> | ||||||
| 	</MkSpacer> | 	</MkSpacer> | ||||||
| </MkStickyContainer> | </MkStickyContainer> | ||||||
|  | @ -46,6 +46,6 @@ const headerTabs = $computed(() => []); | ||||||
| 
 | 
 | ||||||
| definePageMetadata({ | definePageMetadata({ | ||||||
| 	title: i18n.ts.instanceBlocking, | 	title: i18n.ts.instanceBlocking, | ||||||
| 	icon: 'fas fa-ban', | 	icon: 'ti ti-ban', | ||||||
| }); | }); | ||||||
| </script> | </script> | ||||||
|  |  | ||||||
|  | @ -9,17 +9,17 @@ | ||||||
| 			<FormInfo class="_formBlock">Callback URL: {{ `${uri}/api/dc/cb` }}</FormInfo> | 			<FormInfo class="_formBlock">Callback URL: {{ `${uri}/api/dc/cb` }}</FormInfo> | ||||||
| 		 | 		 | ||||||
| 			<FormInput v-model="discordClientId" class="_formBlock"> | 			<FormInput v-model="discordClientId" class="_formBlock"> | ||||||
| 				<template #prefix><i class="fas fa-key"></i></template> | 				<template #prefix><i class="ti ti-key"></i></template> | ||||||
| 				<template #label>Client ID</template> | 				<template #label>Client ID</template> | ||||||
| 			</FormInput> | 			</FormInput> | ||||||
| 
 | 
 | ||||||
| 			<FormInput v-model="discordClientSecret" class="_formBlock"> | 			<FormInput v-model="discordClientSecret" class="_formBlock"> | ||||||
| 				<template #prefix><i class="fas fa-key"></i></template> | 				<template #prefix><i class="ti ti-key"></i></template> | ||||||
| 				<template #label>Client Secret</template> | 				<template #label>Client Secret</template> | ||||||
| 			</FormInput> | 			</FormInput> | ||||||
| 		</template> | 		</template> | ||||||
| 
 | 
 | ||||||
| 		<FormButton primary class="_formBlock" @click="save"><i class="fas fa-save"></i> {{ i18n.ts.save }}</FormButton> | 		<FormButton primary class="_formBlock" @click="save"><i class="ti ti-device-floppy"></i> {{ i18n.ts.save }}</FormButton> | ||||||
| 	</div> | 	</div> | ||||||
| </FormSuspense> | </FormSuspense> | ||||||
| </template> | </template> | ||||||
|  |  | ||||||
|  | @ -9,17 +9,17 @@ | ||||||
| 			<FormInfo class="_formBlock">Callback URL: {{ `${uri}/api/gh/cb` }}</FormInfo> | 			<FormInfo class="_formBlock">Callback URL: {{ `${uri}/api/gh/cb` }}</FormInfo> | ||||||
| 		 | 		 | ||||||
| 			<FormInput v-model="githubClientId" class="_formBlock"> | 			<FormInput v-model="githubClientId" class="_formBlock"> | ||||||
| 				<template #prefix><i class="fas fa-key"></i></template> | 				<template #prefix><i class="ti ti-key"></i></template> | ||||||
| 				<template #label>Client ID</template> | 				<template #label>Client ID</template> | ||||||
| 			</FormInput> | 			</FormInput> | ||||||
| 
 | 
 | ||||||
| 			<FormInput v-model="githubClientSecret" class="_formBlock"> | 			<FormInput v-model="githubClientSecret" class="_formBlock"> | ||||||
| 				<template #prefix><i class="fas fa-key"></i></template> | 				<template #prefix><i class="ti ti-key"></i></template> | ||||||
| 				<template #label>Client Secret</template> | 				<template #label>Client Secret</template> | ||||||
| 			</FormInput> | 			</FormInput> | ||||||
| 		</template> | 		</template> | ||||||
| 
 | 
 | ||||||
| 		<FormButton primary class="_formBlock" @click="save"><i class="fas fa-save"></i> {{ i18n.ts.save }}</FormButton> | 		<FormButton primary class="_formBlock" @click="save"><i class="ti ti-device-floppy"></i> {{ i18n.ts.save }}</FormButton> | ||||||
| 	</div> | 	</div> | ||||||
| </FormSuspense> | </FormSuspense> | ||||||
| </template> | </template> | ||||||
|  |  | ||||||
|  | @ -9,17 +9,17 @@ | ||||||
| 			<FormInfo class="_formBlock">Callback URL: {{ `${uri}/api/tw/cb` }}</FormInfo> | 			<FormInfo class="_formBlock">Callback URL: {{ `${uri}/api/tw/cb` }}</FormInfo> | ||||||
| 		 | 		 | ||||||
| 			<FormInput v-model="twitterConsumerKey" class="_formBlock"> | 			<FormInput v-model="twitterConsumerKey" class="_formBlock"> | ||||||
| 				<template #prefix><i class="fas fa-key"></i></template> | 				<template #prefix><i class="ti ti-key"></i></template> | ||||||
| 				<template #label>Consumer Key</template> | 				<template #label>Consumer Key</template> | ||||||
| 			</FormInput> | 			</FormInput> | ||||||
| 
 | 
 | ||||||
| 			<FormInput v-model="twitterConsumerSecret" class="_formBlock"> | 			<FormInput v-model="twitterConsumerSecret" class="_formBlock"> | ||||||
| 				<template #prefix><i class="fas fa-key"></i></template> | 				<template #prefix><i class="ti ti-key"></i></template> | ||||||
| 				<template #label>Consumer Secret</template> | 				<template #label>Consumer Secret</template> | ||||||
| 			</FormInput> | 			</FormInput> | ||||||
| 		</template> | 		</template> | ||||||
| 
 | 
 | ||||||
| 		<FormButton primary class="_formBlock" @click="save"><i class="fas fa-save"></i> {{ i18n.ts.save }}</FormButton> | 		<FormButton primary class="_formBlock" @click="save"><i class="ti ti-device-floppy"></i> {{ i18n.ts.save }}</FormButton> | ||||||
| 	</div> | 	</div> | ||||||
| </FormSuspense> | </FormSuspense> | ||||||
| </template> | </template> | ||||||
|  |  | ||||||
|  | @ -52,6 +52,6 @@ const headerTabs = $computed(() => []); | ||||||
| 
 | 
 | ||||||
| definePageMetadata({ | definePageMetadata({ | ||||||
| 	title: i18n.ts.integration, | 	title: i18n.ts.integration, | ||||||
| 	icon: 'fas fa-share-alt', | 	icon: 'ti ti-share', | ||||||
| }); | }); | ||||||
| </script> | </script> | ||||||
|  |  | ||||||
|  | @ -34,12 +34,12 @@ | ||||||
| 
 | 
 | ||||||
| 					<FormSplit :min-width="280"> | 					<FormSplit :min-width="280"> | ||||||
| 						<FormInput v-model="objectStorageAccessKey" class="_formBlock"> | 						<FormInput v-model="objectStorageAccessKey" class="_formBlock"> | ||||||
| 							<template #prefix><i class="fas fa-key"></i></template> | 							<template #prefix><i class="ti ti-key"></i></template> | ||||||
| 							<template #label>Access key</template> | 							<template #label>Access key</template> | ||||||
| 						</FormInput> | 						</FormInput> | ||||||
| 
 | 
 | ||||||
| 						<FormInput v-model="objectStorageSecretKey" class="_formBlock"> | 						<FormInput v-model="objectStorageSecretKey" class="_formBlock"> | ||||||
| 							<template #prefix><i class="fas fa-key"></i></template> | 							<template #prefix><i class="ti ti-key"></i></template> | ||||||
| 							<template #label>Secret key</template> | 							<template #label>Secret key</template> | ||||||
| 						</FormInput> | 						</FormInput> | ||||||
| 					</FormSplit> | 					</FormSplit> | ||||||
|  | @ -134,7 +134,7 @@ function save() { | ||||||
| 
 | 
 | ||||||
| const headerActions = $computed(() => [{ | const headerActions = $computed(() => [{ | ||||||
| 	asFullButton: true, | 	asFullButton: true, | ||||||
| 	icon: 'fas fa-check', | 	icon: 'ti ti-check', | ||||||
| 	text: i18n.ts.save, | 	text: i18n.ts.save, | ||||||
| 	handler: save, | 	handler: save, | ||||||
| }]); | }]); | ||||||
|  | @ -143,6 +143,6 @@ const headerTabs = $computed(() => []); | ||||||
| 
 | 
 | ||||||
| definePageMetadata({ | definePageMetadata({ | ||||||
| 	title: i18n.ts.objectStorage, | 	title: i18n.ts.objectStorage, | ||||||
| 	icon: 'fas fa-cloud', | 	icon: 'ti ti-cloud', | ||||||
| }); | }); | ||||||
| </script> | </script> | ||||||
|  |  | ||||||
|  | @ -30,7 +30,7 @@ function save() { | ||||||
| 
 | 
 | ||||||
| const headerActions = $computed(() => [{ | const headerActions = $computed(() => [{ | ||||||
| 	asFullButton: true, | 	asFullButton: true, | ||||||
| 	icon: 'fas fa-check', | 	icon: 'ti ti-check', | ||||||
| 	text: i18n.ts.save, | 	text: i18n.ts.save, | ||||||
| 	handler: save, | 	handler: save, | ||||||
| }]); | }]); | ||||||
|  | @ -39,6 +39,6 @@ const headerTabs = $computed(() => []); | ||||||
| 
 | 
 | ||||||
| definePageMetadata({ | definePageMetadata({ | ||||||
| 	title: i18n.ts.other, | 	title: i18n.ts.other, | ||||||
| 	icon: 'fas fa-cogs', | 	icon: 'ti ti-adjustments', | ||||||
| }); | }); | ||||||
| </script> | </script> | ||||||
|  |  | ||||||
|  | @ -467,7 +467,7 @@ const headerTabs = $computed(() => []); | ||||||
| 
 | 
 | ||||||
| definePageMetadata({ | definePageMetadata({ | ||||||
| 	title: i18n.ts.dashboard, | 	title: i18n.ts.dashboard, | ||||||
| 	icon: 'fas fa-tachometer-alt', | 	icon: 'ti ti-dashboard', | ||||||
| }); | }); | ||||||
| </script> | </script> | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -5,12 +5,12 @@ | ||||||
| 		<div v-for="relay in relays" :key="relay.inbox" class="relaycxt _panel _block" style="padding: 16px;"> | 		<div v-for="relay in relays" :key="relay.inbox" class="relaycxt _panel _block" style="padding: 16px;"> | ||||||
| 			<div>{{ relay.inbox }}</div> | 			<div>{{ relay.inbox }}</div> | ||||||
| 			<div class="status"> | 			<div class="status"> | ||||||
| 				<i v-if="relay.status === 'accepted'" class="fas fa-check icon accepted"></i> | 				<i v-if="relay.status === 'accepted'" class="ti ti-check icon accepted"></i> | ||||||
| 				<i v-else-if="relay.status === 'rejected'" class="fas fa-ban icon rejected"></i> | 				<i v-else-if="relay.status === 'rejected'" class="ti ti-ban icon rejected"></i> | ||||||
| 				<i v-else class="fas fa-clock icon requesting"></i> | 				<i v-else class="ti ti-clock icon requesting"></i> | ||||||
| 				<span>{{ $t(`_relayStatus.${relay.status}`) }}</span> | 				<span>{{ $t(`_relayStatus.${relay.status}`) }}</span> | ||||||
| 			</div> | 			</div> | ||||||
| 			<MkButton class="button" inline danger @click="remove(relay.inbox)"><i class="fas fa-trash-alt"></i> {{ i18n.ts.remove }}</MkButton> | 			<MkButton class="button" inline danger @click="remove(relay.inbox)"><i class="ti ti-trash"></i> {{ i18n.ts.remove }}</MkButton> | ||||||
| 		</div> | 		</div> | ||||||
| 	</MkSpacer> | 	</MkSpacer> | ||||||
| </MkStickyContainer> | </MkStickyContainer> | ||||||
|  | @ -68,7 +68,7 @@ refresh(); | ||||||
| 
 | 
 | ||||||
| const headerActions = $computed(() => [{ | const headerActions = $computed(() => [{ | ||||||
| 	asFullButton: true, | 	asFullButton: true, | ||||||
| 	icon: 'fas fa-plus', | 	icon: 'ti ti-plus', | ||||||
| 	text: i18n.ts.addRelay, | 	text: i18n.ts.addRelay, | ||||||
| 	handler: addRelay, | 	handler: addRelay, | ||||||
| }]); | }]); | ||||||
|  | @ -77,7 +77,7 @@ const headerTabs = $computed(() => []); | ||||||
| 
 | 
 | ||||||
| definePageMetadata({ | definePageMetadata({ | ||||||
| 	title: i18n.ts.relays, | 	title: i18n.ts.relays, | ||||||
| 	icon: 'fas fa-globe', | 	icon: 'ti ti-planet', | ||||||
| }); | }); | ||||||
| </script> | </script> | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -5,7 +5,7 @@ | ||||||
| 		<FormSuspense :p="init"> | 		<FormSuspense :p="init"> | ||||||
| 			<div class="_formRoot"> | 			<div class="_formRoot"> | ||||||
| 				<FormFolder class="_formBlock"> | 				<FormFolder class="_formBlock"> | ||||||
| 					<template #icon><i class="fas fa-shield-alt"></i></template> | 					<template #icon><i class="ti ti-shield"></i></template> | ||||||
| 					<template #label>{{ i18n.ts.botProtection }}</template> | 					<template #label>{{ i18n.ts.botProtection }}</template> | ||||||
| 					<template v-if="enableHcaptcha" #suffix>hCaptcha</template> | 					<template v-if="enableHcaptcha" #suffix>hCaptcha</template> | ||||||
| 					<template v-else-if="enableRecaptcha" #suffix>reCAPTCHA</template> | 					<template v-else-if="enableRecaptcha" #suffix>reCAPTCHA</template> | ||||||
|  | @ -16,7 +16,7 @@ | ||||||
| 				</FormFolder> | 				</FormFolder> | ||||||
| 
 | 
 | ||||||
| 				<FormFolder class="_formBlock"> | 				<FormFolder class="_formBlock"> | ||||||
| 					<template #icon><i class="fas fa-eye-slash"></i></template> | 					<template #icon><i class="ti ti-eye-off"></i></template> | ||||||
| 					<template #label>{{ i18n.ts.sensitiveMediaDetection }}</template> | 					<template #label>{{ i18n.ts.sensitiveMediaDetection }}</template> | ||||||
| 					<template v-if="sensitiveMediaDetection === 'all'" #suffix>{{ i18n.ts.all }}</template> | 					<template v-if="sensitiveMediaDetection === 'all'" #suffix>{{ i18n.ts.all }}</template> | ||||||
| 					<template v-else-if="sensitiveMediaDetection === 'local'" #suffix>{{ i18n.ts.localOnly }}</template> | 					<template v-else-if="sensitiveMediaDetection === 'local'" #suffix>{{ i18n.ts.localOnly }}</template> | ||||||
|  | @ -54,7 +54,7 @@ | ||||||
| 						</FormSwitch> | 						</FormSwitch> | ||||||
| 						--> | 						--> | ||||||
| 
 | 
 | ||||||
| 						<FormButton primary class="_formBlock" @click="save"><i class="fas fa-save"></i> {{ i18n.ts.save }}</FormButton> | 						<FormButton primary class="_formBlock" @click="save"><i class="ti ti-device-floppy"></i> {{ i18n.ts.save }}</FormButton> | ||||||
| 					</div> | 					</div> | ||||||
| 				</FormFolder> | 				</FormFolder> | ||||||
| 
 | 
 | ||||||
|  | @ -88,11 +88,11 @@ | ||||||
| 
 | 
 | ||||||
| 					<div class="_formRoot"> | 					<div class="_formRoot"> | ||||||
| 						<FormInput v-model="summalyProxy" class="_formBlock"> | 						<FormInput v-model="summalyProxy" class="_formBlock"> | ||||||
| 							<template #prefix><i class="fas fa-link"></i></template> | 							<template #prefix><i class="ti ti-link"></i></template> | ||||||
| 							<template #label>Summaly Proxy URL</template> | 							<template #label>Summaly Proxy URL</template> | ||||||
| 						</FormInput> | 						</FormInput> | ||||||
| 
 | 
 | ||||||
| 						<FormButton primary class="_formBlock" @click="save"><i class="fas fa-save"></i> {{ i18n.ts.save }}</FormButton> | 						<FormButton primary class="_formBlock" @click="save"><i class="ti ti-device-floppy"></i> {{ i18n.ts.save }}</FormButton> | ||||||
| 					</div> | 					</div> | ||||||
| 				</FormFolder> | 				</FormFolder> | ||||||
| 			</div> | 			</div> | ||||||
|  | @ -174,6 +174,6 @@ const headerTabs = $computed(() => []); | ||||||
| 
 | 
 | ||||||
| definePageMetadata({ | definePageMetadata({ | ||||||
| 	title: i18n.ts.security, | 	title: i18n.ts.security, | ||||||
| 	icon: 'fas fa-lock', | 	icon: 'ti ti-lock', | ||||||
| }); | }); | ||||||
| </script> | </script> | ||||||
|  |  | ||||||
|  | @ -14,7 +14,7 @@ | ||||||
| 					</FormTextarea> | 					</FormTextarea> | ||||||
| 
 | 
 | ||||||
| 					<FormInput v-model="tosUrl" class="_formBlock"> | 					<FormInput v-model="tosUrl" class="_formBlock"> | ||||||
| 						<template #prefix><i class="fas fa-link"></i></template> | 						<template #prefix><i class="ti ti-link"></i></template> | ||||||
| 						<template #label>{{ i18n.ts.tosUrl }}</template> | 						<template #label>{{ i18n.ts.tosUrl }}</template> | ||||||
| 					</FormInput> | 					</FormInput> | ||||||
| 
 | 
 | ||||||
|  | @ -24,7 +24,7 @@ | ||||||
| 						</FormInput> | 						</FormInput> | ||||||
| 
 | 
 | ||||||
| 						<FormInput v-model="maintainerEmail" type="email" class="_formBlock"> | 						<FormInput v-model="maintainerEmail" type="email" class="_formBlock"> | ||||||
| 							<template #prefix><i class="fas fa-envelope"></i></template> | 							<template #prefix><i class="ti ti-mail"></i></template> | ||||||
| 							<template #label>{{ i18n.ts.maintainerEmail }}</template> | 							<template #label>{{ i18n.ts.maintainerEmail }}</template> | ||||||
| 						</FormInput> | 						</FormInput> | ||||||
| 					</FormSplit> | 					</FormSplit> | ||||||
|  | @ -54,22 +54,22 @@ | ||||||
| 						<template #label>{{ i18n.ts.theme }}</template> | 						<template #label>{{ i18n.ts.theme }}</template> | ||||||
| 
 | 
 | ||||||
| 						<FormInput v-model="iconUrl" class="_formBlock"> | 						<FormInput v-model="iconUrl" class="_formBlock"> | ||||||
| 							<template #prefix><i class="fas fa-link"></i></template> | 							<template #prefix><i class="ti ti-link"></i></template> | ||||||
| 							<template #label>{{ i18n.ts.iconUrl }}</template> | 							<template #label>{{ i18n.ts.iconUrl }}</template> | ||||||
| 						</FormInput> | 						</FormInput> | ||||||
| 
 | 
 | ||||||
| 						<FormInput v-model="bannerUrl" class="_formBlock"> | 						<FormInput v-model="bannerUrl" class="_formBlock"> | ||||||
| 							<template #prefix><i class="fas fa-link"></i></template> | 							<template #prefix><i class="ti ti-link"></i></template> | ||||||
| 							<template #label>{{ i18n.ts.bannerUrl }}</template> | 							<template #label>{{ i18n.ts.bannerUrl }}</template> | ||||||
| 						</FormInput> | 						</FormInput> | ||||||
| 
 | 
 | ||||||
| 						<FormInput v-model="backgroundImageUrl" class="_formBlock"> | 						<FormInput v-model="backgroundImageUrl" class="_formBlock"> | ||||||
| 							<template #prefix><i class="fas fa-link"></i></template> | 							<template #prefix><i class="ti ti-link"></i></template> | ||||||
| 							<template #label>{{ i18n.ts.backgroundImageUrl }}</template> | 							<template #label>{{ i18n.ts.backgroundImageUrl }}</template> | ||||||
| 						</FormInput> | 						</FormInput> | ||||||
| 
 | 
 | ||||||
| 						<FormInput v-model="themeColor" class="_formBlock"> | 						<FormInput v-model="themeColor" class="_formBlock"> | ||||||
| 							<template #prefix><i class="fas fa-palette"></i></template> | 							<template #prefix><i class="ti ti-palette"></i></template> | ||||||
| 							<template #label>{{ i18n.ts.themeColor }}</template> | 							<template #label>{{ i18n.ts.themeColor }}</template> | ||||||
| 							<template #caption>#RRGGBB</template> | 							<template #caption>#RRGGBB</template> | ||||||
| 						</FormInput> | 						</FormInput> | ||||||
|  | @ -118,12 +118,12 @@ | ||||||
| 
 | 
 | ||||||
| 						<template v-if="enableServiceWorker"> | 						<template v-if="enableServiceWorker"> | ||||||
| 							<FormInput v-model="swPublicKey" class="_formBlock"> | 							<FormInput v-model="swPublicKey" class="_formBlock"> | ||||||
| 								<template #prefix><i class="fas fa-key"></i></template> | 								<template #prefix><i class="ti ti-key"></i></template> | ||||||
| 								<template #label>Public key</template> | 								<template #label>Public key</template> | ||||||
| 							</FormInput> | 							</FormInput> | ||||||
| 
 | 
 | ||||||
| 							<FormInput v-model="swPrivateKey" class="_formBlock"> | 							<FormInput v-model="swPrivateKey" class="_formBlock"> | ||||||
| 								<template #prefix><i class="fas fa-key"></i></template> | 								<template #prefix><i class="ti ti-key"></i></template> | ||||||
| 								<template #label>Private key</template> | 								<template #label>Private key</template> | ||||||
| 							</FormInput> | 							</FormInput> | ||||||
| 						</template> | 						</template> | ||||||
|  | @ -133,7 +133,7 @@ | ||||||
| 						<template #label>DeepL Translation</template> | 						<template #label>DeepL Translation</template> | ||||||
| 
 | 
 | ||||||
| 						<FormInput v-model="deeplAuthKey" class="_formBlock"> | 						<FormInput v-model="deeplAuthKey" class="_formBlock"> | ||||||
| 							<template #prefix><i class="fas fa-key"></i></template> | 							<template #prefix><i class="ti ti-key"></i></template> | ||||||
| 							<template #label>DeepL Auth Key</template> | 							<template #label>DeepL Auth Key</template> | ||||||
| 						</FormInput> | 						</FormInput> | ||||||
| 						<FormSwitch v-model="deeplIsPro" class="_formBlock"> | 						<FormSwitch v-model="deeplIsPro" class="_formBlock"> | ||||||
|  | @ -248,7 +248,7 @@ function save() { | ||||||
| 
 | 
 | ||||||
| const headerActions = $computed(() => [{ | const headerActions = $computed(() => [{ | ||||||
| 	asFullButton: true, | 	asFullButton: true, | ||||||
| 	icon: 'fas fa-check', | 	icon: 'ti ti-check', | ||||||
| 	text: i18n.ts.save, | 	text: i18n.ts.save, | ||||||
| 	handler: save, | 	handler: save, | ||||||
| }]); | }]); | ||||||
|  | @ -257,6 +257,6 @@ const headerTabs = $computed(() => []); | ||||||
| 
 | 
 | ||||||
| definePageMetadata({ | definePageMetadata({ | ||||||
| 	title: i18n.ts.general, | 	title: i18n.ts.general, | ||||||
| 	icon: 'fas fa-cog', | 	icon: 'ti ti-settings', | ||||||
| }); | }); | ||||||
| </script> | </script> | ||||||
|  |  | ||||||
|  | @ -115,17 +115,17 @@ function show(user) { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| const headerActions = $computed(() => [{ | const headerActions = $computed(() => [{ | ||||||
| 	icon: 'fas fa-search', | 	icon: 'ti ti-search', | ||||||
| 	text: i18n.ts.search, | 	text: i18n.ts.search, | ||||||
| 	handler: searchUser, | 	handler: searchUser, | ||||||
| }, { | }, { | ||||||
| 	asFullButton: true, | 	asFullButton: true, | ||||||
| 	icon: 'fas fa-plus', | 	icon: 'ti ti-plus', | ||||||
| 	text: i18n.ts.addUser, | 	text: i18n.ts.addUser, | ||||||
| 	handler: addUser, | 	handler: addUser, | ||||||
| }, { | }, { | ||||||
| 	asFullButton: true, | 	asFullButton: true, | ||||||
| 	icon: 'fas fa-search', | 	icon: 'ti ti-search', | ||||||
| 	text: i18n.ts.lookup, | 	text: i18n.ts.lookup, | ||||||
| 	handler: lookupUser, | 	handler: lookupUser, | ||||||
| }]); | }]); | ||||||
|  | @ -134,7 +134,7 @@ const headerTabs = $computed(() => []); | ||||||
| 
 | 
 | ||||||
| definePageMetadata(computed(() => ({ | definePageMetadata(computed(() => ({ | ||||||
| 	title: i18n.ts.users, | 	title: i18n.ts.users, | ||||||
| 	icon: 'fas fa-users', | 	icon: 'ti ti-users', | ||||||
| }))); | }))); | ||||||
| </script> | </script> | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -10,7 +10,7 @@ | ||||||
| 					<img v-if="announcement.imageUrl" :src="announcement.imageUrl"/> | 					<img v-if="announcement.imageUrl" :src="announcement.imageUrl"/> | ||||||
| 				</div> | 				</div> | ||||||
| 				<div v-if="$i && !announcement.isRead" class="_footer"> | 				<div v-if="$i && !announcement.isRead" class="_footer"> | ||||||
| 					<MkButton primary @click="read(items, announcement, i)"><i class="fas fa-check"></i> {{ $ts.gotIt }}</MkButton> | 					<MkButton primary @click="read(items, announcement, i)"><i class="ti ti-check"></i> {{ $ts.gotIt }}</MkButton> | ||||||
| 				</div> | 				</div> | ||||||
| 			</section> | 			</section> | ||||||
| 		</MkPagination> | 		</MkPagination> | ||||||
|  | @ -46,7 +46,7 @@ const headerTabs = $computed(() => []); | ||||||
| 
 | 
 | ||||||
| definePageMetadata({ | definePageMetadata({ | ||||||
| 	title: i18n.ts.announcements, | 	title: i18n.ts.announcements, | ||||||
| 	icon: 'fas fa-broadcast-tower', | 	icon: 'ti ti-speakerphone', | ||||||
| }); | }); | ||||||
| </script> | </script> | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -76,7 +76,7 @@ const headerActions = $computed(() => antenna ? [{ | ||||||
| 	text: i18n.ts.jumpToSpecifiedDate, | 	text: i18n.ts.jumpToSpecifiedDate, | ||||||
| 	handler: timetravel, | 	handler: timetravel, | ||||||
| }, { | }, { | ||||||
| 	icon: 'fas fa-cog', | 	icon: 'ti ti-settings', | ||||||
| 	text: i18n.ts.settings, | 	text: i18n.ts.settings, | ||||||
| 	handler: settings, | 	handler: settings, | ||||||
| }] : []); | }] : []); | ||||||
|  | @ -85,7 +85,7 @@ const headerTabs = $computed(() => []); | ||||||
| 
 | 
 | ||||||
| definePageMetadata(computed(() => antenna ? { | definePageMetadata(computed(() => antenna ? { | ||||||
| 	title: antenna.name, | 	title: antenna.name, | ||||||
| 	icon: 'fas fa-satellite', | 	icon: 'ti ti-antenna', | ||||||
| } : null)); | } : null)); | ||||||
| </script> | </script> | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -15,7 +15,7 @@ | ||||||
| 				</MkSwitch> | 				</MkSwitch> | ||||||
| 				<MkButton class="_formBlock" primary :disabled="sending" @click="send"> | 				<MkButton class="_formBlock" primary :disabled="sending" @click="send"> | ||||||
| 					<template v-if="sending"><MkEllipsis/></template> | 					<template v-if="sending"><MkEllipsis/></template> | ||||||
| 					<template v-else><i class="fas fa-paper-plane"></i> Send</template> | 					<template v-else><i class="ti ti-send"></i> Send</template> | ||||||
| 				</MkButton> | 				</MkButton> | ||||||
| 			</div> | 			</div> | ||||||
| 			<div v-if="res" class="_formBlock"> | 			<div v-if="res" class="_formBlock"> | ||||||
|  | @ -84,6 +84,6 @@ const headerTabs = $computed(() => []); | ||||||
| 
 | 
 | ||||||
| definePageMetadata({ | definePageMetadata({ | ||||||
| 	title: 'API console', | 	title: 'API console', | ||||||
| 	icon: 'fas fa-terminal', | 	icon: 'ti ti-terminal-2', | ||||||
| }); | }); | ||||||
| </script> | </script> | ||||||
|  |  | ||||||
|  | @ -12,14 +12,14 @@ | ||||||
| 			</MkTextarea> | 			</MkTextarea> | ||||||
| 
 | 
 | ||||||
| 			<div class="banner"> | 			<div class="banner"> | ||||||
| 				<MkButton v-if="bannerId == null" @click="setBannerImage"><i class="fas fa-plus"></i> {{ i18n.ts._channel.setBanner }}</MkButton> | 				<MkButton v-if="bannerId == null" @click="setBannerImage"><i class="ti ti-plus"></i> {{ i18n.ts._channel.setBanner }}</MkButton> | ||||||
| 				<div v-else-if="bannerUrl"> | 				<div v-else-if="bannerUrl"> | ||||||
| 					<img :src="bannerUrl" style="width: 100%;"/> | 					<img :src="bannerUrl" style="width: 100%;"/> | ||||||
| 					<MkButton @click="removeBannerImage()"><i class="fas fa-trash-alt"></i> {{ i18n.ts._channel.removeBanner }}</MkButton> | 					<MkButton @click="removeBannerImage()"><i class="ti ti-trash"></i> {{ i18n.ts._channel.removeBanner }}</MkButton> | ||||||
| 				</div> | 				</div> | ||||||
| 			</div> | 			</div> | ||||||
| 			<div class="_formBlock"> | 			<div class="_formBlock"> | ||||||
| 				<MkButton primary @click="save()"><i class="fas fa-save"></i> {{ channelId ? i18n.ts.save : i18n.ts.create }}</MkButton> | 				<MkButton primary @click="save()"><i class="ti ti-device-floppy"></i> {{ channelId ? i18n.ts.save : i18n.ts.create }}</MkButton> | ||||||
| 			</div> | 			</div> | ||||||
| 		</div> | 		</div> | ||||||
| 	</MkSpacer> | 	</MkSpacer> | ||||||
|  | @ -110,10 +110,10 @@ const headerTabs = $computed(() => []); | ||||||
| 
 | 
 | ||||||
| definePageMetadata(computed(() => props.channelId ? { | definePageMetadata(computed(() => props.channelId ? { | ||||||
| 	title: i18n.ts._channel.edit, | 	title: i18n.ts._channel.edit, | ||||||
| 	icon: 'fas fa-satellite-dish', | 	icon: 'ti ti-device-tv', | ||||||
| } : { | } : { | ||||||
| 	title: i18n.ts._channel.create, | 	title: i18n.ts._channel.create, | ||||||
| 	icon: 'fas fa-satellite-dish', | 	icon: 'ti ti-device-tv', | ||||||
| })); | })); | ||||||
| </script> | </script> | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -6,15 +6,15 @@ | ||||||
| 			<div class="wpgynlbz _panel _gap" :class="{ hide: !showBanner }"> | 			<div class="wpgynlbz _panel _gap" :class="{ hide: !showBanner }"> | ||||||
| 				<XChannelFollowButton :channel="channel" :full="true" class="subscribe"/> | 				<XChannelFollowButton :channel="channel" :full="true" class="subscribe"/> | ||||||
| 				<button class="_button toggle" @click="() => showBanner = !showBanner"> | 				<button class="_button toggle" @click="() => showBanner = !showBanner"> | ||||||
| 					<template v-if="showBanner"><i class="fas fa-angle-up"></i></template> | 					<template v-if="showBanner"><i class="ti ti-chevron-up"></i></template> | ||||||
| 					<template v-else><i class="fas fa-angle-down"></i></template> | 					<template v-else><i class="ti ti-chevron-down"></i></template> | ||||||
| 				</button> | 				</button> | ||||||
| 				<div v-if="!showBanner" class="hideOverlay"> | 				<div v-if="!showBanner" class="hideOverlay"> | ||||||
| 				</div> | 				</div> | ||||||
| 				<div :style="{ backgroundImage: channel.bannerUrl ? `url(${channel.bannerUrl})` : null }" class="banner"> | 				<div :style="{ backgroundImage: channel.bannerUrl ? `url(${channel.bannerUrl})` : null }" class="banner"> | ||||||
| 					<div class="status"> | 					<div class="status"> | ||||||
| 						<div><i class="fas fa-users fa-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="ti ti-users 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="fas fa-pencil-alt fa-fw"></i><I18n :src="i18n.ts._channel.notesCount" tag="span" style="margin-left: 4px;"><template #n><b>{{ channel.notesCount }}</b></template></I18n></div> | 						<div><i class="ti ti-pencil 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> | ||||||
| 					<div class="fade"></div> | 					<div class="fade"></div> | ||||||
| 				</div> | 				</div> | ||||||
|  | @ -70,7 +70,7 @@ function edit() { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| const headerActions = $computed(() => channel && channel.userId ? [{ | const headerActions = $computed(() => channel && channel.userId ? [{ | ||||||
| 	icon: 'fas fa-cog', | 	icon: 'ti ti-settings', | ||||||
| 	text: i18n.ts.edit, | 	text: i18n.ts.edit, | ||||||
| 	handler: edit, | 	handler: edit, | ||||||
| }] : null); | }] : null); | ||||||
|  | @ -79,7 +79,7 @@ const headerTabs = $computed(() => []); | ||||||
| 
 | 
 | ||||||
| definePageMetadata(computed(() => channel ? { | definePageMetadata(computed(() => channel ? { | ||||||
| 	title: channel.name, | 	title: channel.name, | ||||||
| 	icon: 'fas fa-satellite-dish', | 	icon: 'ti ti-device-tv', | ||||||
| } : null)); | } : null)); | ||||||
| </script> | </script> | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -13,7 +13,7 @@ | ||||||
| 			</MkPagination> | 			</MkPagination> | ||||||
| 		</div> | 		</div> | ||||||
| 		<div v-else-if="tab === 'owned'" class="_content grwlizim owned"> | 		<div v-else-if="tab === 'owned'" class="_content grwlizim owned"> | ||||||
| 			<MkButton class="new" @click="create()"><i class="fas fa-plus"></i></MkButton> | 			<MkButton class="new" @click="create()"><i class="ti ti-plus"></i></MkButton> | ||||||
| 			<MkPagination v-slot="{items}" :pagination="ownedPagination"> | 			<MkPagination v-slot="{items}" :pagination="ownedPagination"> | ||||||
| 				<MkChannelPreview v-for="channel in items" :key="channel.id" class="_gap" :channel="channel"/> | 				<MkChannelPreview v-for="channel in items" :key="channel.id" class="_gap" :channel="channel"/> | ||||||
| 			</MkPagination> | 			</MkPagination> | ||||||
|  | @ -53,7 +53,7 @@ function create() { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| const headerActions = $computed(() => [{ | const headerActions = $computed(() => [{ | ||||||
| 	icon: 'fas fa-plus', | 	icon: 'ti ti-plus', | ||||||
| 	text: i18n.ts.create, | 	text: i18n.ts.create, | ||||||
| 	handler: create, | 	handler: create, | ||||||
| }]); | }]); | ||||||
|  | @ -65,15 +65,15 @@ const headerTabs = $computed(() => [{ | ||||||
| }, { | }, { | ||||||
| 	key: 'following', | 	key: 'following', | ||||||
| 	title: i18n.ts._channel.following, | 	title: i18n.ts._channel.following, | ||||||
| 	icon: 'fas fa-heart', | 	icon: 'ti ti-heart', | ||||||
| }, { | }, { | ||||||
| 	key: 'owned', | 	key: 'owned', | ||||||
| 	title: i18n.ts._channel.owned, | 	title: i18n.ts._channel.owned, | ||||||
| 	icon: 'fas fa-edit', | 	icon: 'ti ti-edit', | ||||||
| }]); | }]); | ||||||
| 
 | 
 | ||||||
| definePageMetadata(computed(() => ({ | definePageMetadata(computed(() => ({ | ||||||
| 	title: i18n.ts.channel, | 	title: i18n.ts.channel, | ||||||
| 	icon: 'fas fa-satellite-dish', | 	icon: 'ti ti-device-tv', | ||||||
| }))); | }))); | ||||||
| </script> | </script> | ||||||
|  |  | ||||||
Some files were not shown because too many files have changed in this diff Show more
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue