Compare commits
	
		
			6 commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 16a0b1eab4 | ||
|  | 4056cff614 | ||
|  | fe2927049c | ||
|  | 291aa82140 | ||
|  | 8773a2ee63 | ||
|  | 5711d3bb41 | 
					 197 changed files with 643 additions and 623 deletions
				
			
		|  | @ -14,6 +14,7 @@ You should also include the user name that made the change. | |||
| ### Improvements | ||||
| - Server: Add rate limit to i/notifications @tamaina | ||||
| - Client: Improve files page of control panel @syuilo | ||||
| - Client: Switch from FontAwesome icons to Phosphor icons @ThatOneCalculator | ||||
| 
 | ||||
| ### Bugfixes | ||||
| - Server: Fix GenerateVideoThumbnail failed @mei23 | ||||
|  |  | |||
|  | @ -34,7 +34,8 @@ html | |||
| 		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/error.jpg') | ||||
| 		link(rel='stylesheet' href='/assets/fontawesome/css/all.css') | ||||
| 		//- link(rel='stylesheet' href='/assets/fontawesome/css/all.css') | ||||
| 		link(rel='stylesheet', href='https://unpkg.com/phosphor-icons@1.4.2/src/css/icons.css') | ||||
| 		link(rel='modulepreload' href=`/assets/${clientEntry.file}`) | ||||
| 
 | ||||
| 		each href in clientEntry.css | ||||
|  |  | |||
|  | @ -201,7 +201,7 @@ export async function openAccountMenu(opts: { | |||
| 			to: `/@${ $i.username }`, | ||||
| 			avatar: $i, | ||||
| 		}, null, ...(opts.includeCurrentAccount ? [createItem($i)] : []), ...accountItemPromises, { | ||||
| 			icon: 'fas fa-plus', | ||||
| 			icon: 'ph-plus', | ||||
| 			text: i18n.ts.addAccount, | ||||
| 			action: () => { | ||||
| 				popupMenu([{ | ||||
|  | @ -214,7 +214,7 @@ export async function openAccountMenu(opts: { | |||
| 			}, | ||||
| 		}, { | ||||
| 			type: 'link', | ||||
| 			icon: 'fas fa-users', | ||||
| 			icon: 'ph-users-three', | ||||
| 			text: i18n.ts.manageAccounts, | ||||
| 			to: `/settings/accounts`, | ||||
| 		}]], ev.currentTarget ?? ev.target, { | ||||
|  |  | |||
|  | @ -1,7 +1,7 @@ | |||
| <template> | ||||
| <XWindow ref="window" :initial-width="400" :initial-height="500" :can-resize="true" @closed="emit('closed')"> | ||||
| 	<template #header> | ||||
| 		<i class="fas fa-exclamation-circle" style="margin-right: 0.5em;"></i> | ||||
| 		<i class="ph-circle-wavy-warning" style="margin-right: 0.5em;"></i> | ||||
| 		<I18n :src="i18n.ts.reportAbuseOf" tag="span"> | ||||
| 			<template #name> | ||||
| 				<b><MkAcct :user="user"/></b> | ||||
|  |  | |||
|  | @ -6,14 +6,14 @@ | |||
| > | ||||
| 	<template v-if="!wait"> | ||||
| 		<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="ph-minus-circle"></i> | ||||
| 		</template> | ||||
| 		<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="ph-minus-circle"></i> | ||||
| 		</template> | ||||
| 	</template> | ||||
| 	<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="ph-circle-notch ph-fw spin-anim"></i> | ||||
| 	</template> | ||||
| </button> | ||||
| </template> | ||||
|  | @ -125,4 +125,13 @@ async function onClick() { | |||
| 		margin-right: 6px; | ||||
| 	} | ||||
| } | ||||
| .spin-anim { | ||||
| 	animation: rotate 2s ease-in-out infinite; | ||||
| } | ||||
| 
 | ||||
| @keyframes rotate { | ||||
| 	to { | ||||
| 		transform: rotate(360deg); | ||||
| 	} | ||||
| } | ||||
| </style> | ||||
|  |  | |||
|  | @ -2,10 +2,10 @@ | |||
| <MkA :to="`/channels/${channel.id}`" class="eftoefju _panel" tabindex="-1"> | ||||
| 	<div class="banner" :style="bannerStyle"> | ||||
| 		<div class="fade"></div> | ||||
| 		<div class="name"><i class="fas fa-satellite-dish"></i> {{ channel.name }}</div> | ||||
| 		<div class="name"><i class="ph-television"></i> {{ channel.name }}</div> | ||||
| 		<div class="status"> | ||||
| 			<div> | ||||
| 				<i class="fas fa-users fa-fw"></i> | ||||
| 				<i class="ph-users-three ph-fw"></i> | ||||
| 				<I18n :src="i18n.ts._channel.usersCount" tag="span" style="margin-left: 4px;"> | ||||
| 					<template #n> | ||||
| 						<b>{{ channel.usersCount }}</b> | ||||
|  | @ -13,7 +13,7 @@ | |||
| 				</I18n> | ||||
| 			</div> | ||||
| 			<div> | ||||
| 				<i class="fas fa-pencil-alt fa-fw"></i> | ||||
| 				<i class="ph-pencil ph-fw"></i> | ||||
| 				<I18n :src="i18n.ts._channel.notesCount" tag="span" style="margin-left: 4px;"> | ||||
| 					<template #n> | ||||
| 						<b>{{ channel.notesCount }}</b> | ||||
|  |  | |||
|  | @ -64,14 +64,14 @@ export default defineComponent({ | |||
| 				}, [ | ||||
| 					h('span', [ | ||||
| 						h('i', { | ||||
| 							class: 'fas fa-angle-up icon', | ||||
| 							class: 'ph-caret-up icon', | ||||
| 						}), | ||||
| 						getDateText(item.createdAt) | ||||
| 					]), | ||||
| 					h('span', [ | ||||
| 						getDateText(props.items[i + 1].createdAt), | ||||
| 						h('i', { | ||||
| 							class: 'fas fa-angle-down icon', | ||||
| 							class: 'ph-caret-down icon', | ||||
| 						}) | ||||
| 					]) | ||||
| 				])); | ||||
|  |  | |||
|  | @ -5,17 +5,17 @@ | |||
| 			<i :class="icon"></i> | ||||
| 		</div> | ||||
| 		<div v-else-if="!input && !select" class="icon" :class="type"> | ||||
| 			<i v-if="type === 'success'" class="fas fa-check"></i> | ||||
| 			<i v-else-if="type === 'error'" class="fas fa-times-circle"></i> | ||||
| 			<i v-else-if="type === 'warning'" class="fas fa-exclamation-triangle"></i> | ||||
| 			<i v-else-if="type === 'info'" class="fas fa-info-circle"></i> | ||||
| 			<i v-else-if="type === 'question'" class="fas fa-question-circle"></i> | ||||
| 			<i v-else-if="type === 'waiting'" class="fas fa-spinner fa-pulse"></i> | ||||
| 			<i v-if="type === 'success'" class="ph-check"></i> | ||||
| 			<i v-else-if="type === 'error'" class="ph-warning-circle"></i> | ||||
| 			<i v-else-if="type === 'warning'" class="ph-warning"></i> | ||||
| 			<i v-else-if="type === 'info'" class="ph-info"></i> | ||||
| 			<i v-else-if="type === 'question'" class="ph-question"></i> | ||||
| 			<i v-else-if="type === 'waiting'" class="ph-circle-notch ph-fw spin-anim"></i> | ||||
| 		</div> | ||||
| 		<header v-if="title"><Mfm :text="title"/></header> | ||||
| 		<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"> | ||||
| 			<template v-if="input.type === 'password'" #prefix><i class="fas fa-lock"></i></template> | ||||
| 			<template v-if="input.type === 'password'" #prefix><i class="ph-lock"></i></template> | ||||
| 		</MkInput> | ||||
| 		<MkSelect v-if="select" v-model="selectedValue" autofocus> | ||||
| 			<template v-if="select.items"> | ||||
|  | @ -205,4 +205,13 @@ onBeforeUnmount(() => { | |||
| 		} | ||||
| 	} | ||||
| } | ||||
| .spin-anim { | ||||
| 	animation: rotate 2s ease-in-out infinite; | ||||
| } | ||||
| 
 | ||||
| @keyframes rotate { | ||||
| 	to { | ||||
| 		transform: rotate(360deg); | ||||
| 	} | ||||
| } | ||||
| </style> | ||||
|  |  | |||
|  | @ -1,16 +1,16 @@ | |||
| <template> | ||||
| <div ref="thumbnail" class="zdjebgpv"> | ||||
| 	<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 === 'video'" class="fas fa-file-video icon"></i> | ||||
| 	<i v-else-if="is === 'audio' || is === 'midi'" class="fas fa-music icon"></i> | ||||
| 	<i v-else-if="is === 'csv'" class="fas fa-file-csv icon"></i> | ||||
| 	<i v-else-if="is === 'pdf'" class="fas fa-file-pdf icon"></i> | ||||
| 	<i v-else-if="is === 'textfile'" class="fas fa-file-alt icon"></i> | ||||
| 	<i v-else-if="is === 'archive'" class="fas fa-file-archive icon"></i> | ||||
| 	<i v-else class="fas fa-file icon"></i> | ||||
| 	<i v-else-if="is === 'image'" class="ph-file-image icon"></i> | ||||
| 	<i v-else-if="is === 'video'" class="ph-file-video icon"></i> | ||||
| 	<i v-else-if="is === 'audio' || is === 'midi'" class="ph-file-audio icon"></i> | ||||
| 	<i v-else-if="is === 'csv'" class="ph-file-csv icon"></i> | ||||
| 	<i v-else-if="is === 'pdf'" class="ph-file-pdf icon"></i> | ||||
| 	<i v-else-if="is === 'textfile'" class="ph-file-text icon"></i> | ||||
| 	<i v-else-if="is === 'archive'" class="ph-file-archive icon"></i> | ||||
| 	<i v-else class="ph-file icon"></i> | ||||
| 
 | ||||
| 	<i v-if="isThumbnailAvailable && is === 'video'" class="fas fa-film icon-sub"></i> | ||||
| 	<i v-if="isThumbnailAvailable && is === 'video'" class="ph-film-strip icon-sub"></i> | ||||
| </div> | ||||
| </template> | ||||
| 
 | ||||
|  |  | |||
|  | @ -62,30 +62,30 @@ const title = computed(() => `${props.file.name}\n${props.file.type} ${bytes(pro | |||
| function getMenu() { | ||||
| 	return [{ | ||||
| 		text: i18n.ts.rename, | ||||
| 		icon: 'fas fa-i-cursor', | ||||
| 		icon: 'ph-cursor-text', | ||||
| 		action: rename | ||||
| 	}, { | ||||
| 		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 ? 'ph-eye' : 'ph-eye-slash', | ||||
| 		action: toggleSensitive | ||||
| 	}, { | ||||
| 		text: i18n.ts.describeFile, | ||||
| 		icon: 'fas fa-i-cursor', | ||||
| 		icon: 'ph-cursor-text', | ||||
| 		action: describe | ||||
| 	}, null, { | ||||
| 		text: i18n.ts.copyUrl, | ||||
| 		icon: 'fas fa-link', | ||||
| 		icon: 'ph-link', | ||||
| 		action: copyUrl | ||||
| 	}, { | ||||
| 		type: 'a', | ||||
| 		href: props.file.url, | ||||
| 		target: '_blank', | ||||
| 		text: i18n.ts.download, | ||||
| 		icon: 'fas fa-download', | ||||
| 		icon: 'ph-download-simple', | ||||
| 		download: props.file.name | ||||
| 	}, null, { | ||||
| 		text: i18n.ts.delete, | ||||
| 		icon: 'fas fa-trash-alt', | ||||
| 		icon: 'ph-trash', | ||||
| 		danger: true, | ||||
| 		action: deleteFile | ||||
| 	}]; | ||||
|  |  | |||
|  | @ -15,8 +15,8 @@ | |||
| 	@dragend="onDragend" | ||||
| > | ||||
| 	<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 fa-fw"></i></template> | ||||
| 		<template v-if="hover"><i class="ph-folder-open ph-fw"></i></template> | ||||
| 		<template v-if="!hover"><i class="ph-folder ph-fw"></i></template> | ||||
| 		{{ folder.name }} | ||||
| 	</p> | ||||
| 	<p v-if="defaultStore.state.uploadFolder == folder.id" class="upload"> | ||||
|  | @ -228,7 +228,7 @@ function setAsUploadFolder() { | |||
| function onContextmenu(ev: MouseEvent) { | ||||
| 	os.contextMenu([{ | ||||
| 		text: i18n.ts.openInWindow, | ||||
| 		icon: 'fas fa-window-restore', | ||||
| 		icon: 'ph-cards', | ||||
| 		action: () => { | ||||
| 			os.popup(defineAsyncComponent(() => import('./drive-window.vue')), { | ||||
| 				initialFolder: props.folder | ||||
|  | @ -237,11 +237,11 @@ function onContextmenu(ev: MouseEvent) { | |||
| 		} | ||||
| 	}, null, { | ||||
| 		text: i18n.ts.rename, | ||||
| 		icon: 'fas fa-i-cursor', | ||||
| 		icon: 'ph-cursor-text', | ||||
| 		action: rename, | ||||
| 	}, null, { | ||||
| 		text: i18n.ts.delete, | ||||
| 		icon: 'fas fa-trash-alt', | ||||
| 		icon: 'ph-trash', | ||||
| 		danger: true, | ||||
| 		action: deleteFolder, | ||||
| 	}], ev); | ||||
|  |  | |||
|  | @ -7,7 +7,7 @@ | |||
| 	@dragleave="onDragleave" | ||||
| 	@drop.stop="onDrop" | ||||
| > | ||||
| 	<i v-if="folder == null" class="fas fa-cloud"></i> | ||||
| 	<i v-if="folder == null" class="ph-cloud"></i> | ||||
| 	<span>{{ folder == null ? i18n.ts.drive : folder.name }}</span> | ||||
| </div> | ||||
| </template> | ||||
|  |  | |||
|  | @ -11,7 +11,7 @@ | |||
| 				@removeFolder="removeFolder" | ||||
| 			/> | ||||
| 			<template v-for="f in hierarchyFolders"> | ||||
| 				<span class="separator"><i class="fas fa-angle-right"></i></span> | ||||
| 				<span class="separator"><i class="ph-caret-right"></i></span> | ||||
| 				<XNavFolder | ||||
| 					:folder="f" | ||||
| 					:parent-folder="folder" | ||||
|  | @ -21,10 +21,10 @@ | |||
| 					@removeFolder="removeFolder" | ||||
| 				/> | ||||
| 			</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="ph-caret-right"></i></span> | ||||
| 			<span v-if="folder != null" class="folder current">{{ folder.name }}</span> | ||||
| 		</div> | ||||
| 		<button class="menu _button" @click="showMenu"><i class="fas fa-ellipsis-h"></i></button> | ||||
| 		<button class="menu _button" @click="showMenu"><i class="ph-dots-three-outline"></i></button> | ||||
| 	</nav> | ||||
| 	<div ref="main" class="main" | ||||
| 		:class="{ uploading: uploadings.length > 0, fetching }" | ||||
|  | @ -572,26 +572,26 @@ function getMenu() { | |||
| 		type: 'label' | ||||
| 	}, { | ||||
| 		text: i18n.ts.upload, | ||||
| 		icon: 'fas fa-upload', | ||||
| 		icon: 'ph-upload-simple', | ||||
| 		action: () => { selectLocalFile(); } | ||||
| 	}, { | ||||
| 		text: i18n.ts.fromUrl, | ||||
| 		icon: 'fas fa-link', | ||||
| 		icon: 'ph-link', | ||||
| 		action: () => { urlUpload(); } | ||||
| 	}, null, { | ||||
| 		text: folder.value ? folder.value.name : i18n.ts.drive, | ||||
| 		type: 'label' | ||||
| 	}, folder.value ? { | ||||
| 		text: i18n.ts.renameFolder, | ||||
| 		icon: 'fas fa-i-cursor', | ||||
| 		icon: 'ph-cursor-text', | ||||
| 		action: () => { renameFolder(folder.value); } | ||||
| 	} : undefined, folder.value ? { | ||||
| 		text: i18n.ts.deleteFolder, | ||||
| 		icon: 'fas fa-trash-alt', | ||||
| 		icon: 'ph-trash', | ||||
| 		action: () => { deleteFolder(folder.value as Misskey.entities.DriveFolder); } | ||||
| 	} : undefined, { | ||||
| 		text: i18n.ts.createFolder, | ||||
| 		icon: 'fas fa-folder-plus', | ||||
| 		icon: 'ph-folder-plus', | ||||
| 		action: () => { createFolder(); } | ||||
| 	}]; | ||||
| } | ||||
|  |  | |||
|  | @ -1,7 +1,7 @@ | |||
| <template> | ||||
| <section> | ||||
| 	<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 ph-fw" :class="shown ? 'ph-caret-down' : 'ph-caret-up'"></i> <slot></slot> ({{ emojis.length }}) | ||||
| 	</header> | ||||
| 	<div v-if="shown"> | ||||
| 		<button v-for="emoji in emojis" | ||||
|  |  | |||
|  | @ -43,7 +43,7 @@ | |||
| 			</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 ph-fw"></i> {{ i18n.ts.recentUsed }}</header> | ||||
| 				<div> | ||||
| 					<button v-for="emoji in recentlyUsedEmojis" | ||||
| 						:key="emoji" | ||||
|  | @ -65,10 +65,10 @@ | |||
| 		</div> | ||||
| 	</div> | ||||
| 	<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 === 'custom' }" @click="tab = 'custom'"><i class="fas fa-laugh fa-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 === 'tags' }" @click="tab = 'tags'"><i class="fas fa-hashtag fa-fw"></i></button> | ||||
| 		<button class="_button tab" :class="{ active: tab === 'index' }" @click="tab = 'index'"><i class="fas fa-asterisk ph-fw"></i></button> | ||||
| 		<button class="_button tab" :class="{ active: tab === 'custom' }" @click="tab = 'custom'"><i class="ph-smiley ph-fw"></i></button> | ||||
| 		<button class="_button tab" :class="{ active: tab === 'unicode' }" @click="tab = 'unicode'"><i class="fas fa-leaf ph-fw"></i></button> | ||||
| 		<button class="_button tab" :class="{ active: tab === 'tags' }" @click="tab = 'tags'"><i class="ph-hash ph-fw"></i></button> | ||||
| 	</div> | ||||
| </div> | ||||
| </template> | ||||
|  |  | |||
|  | @ -1,6 +1,6 @@ | |||
| <template> | ||||
| <span class="mk-file-type-icon"> | ||||
| 	<template v-if="kind == 'image'"><i class="fas fa-file-image"></i></template> | ||||
| 	<template v-if="kind == 'image'"><i class="ph-file-image"></i></template> | ||||
| </span> | ||||
| </template> | ||||
| 
 | ||||
|  |  | |||
|  | @ -15,14 +15,14 @@ | |||
| 			<span v-if="full">{{ i18n.ts.unfollow }}</span><i class="fas fa-minus"></i> | ||||
| 		</template> | ||||
| 		<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="ph-plus"></i> | ||||
| 		</template> | ||||
| 		<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="ph-plus"></i> | ||||
| 		</template> | ||||
| 	</template> | ||||
| 	<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 ph-fw"></i> | ||||
| 	</template> | ||||
| </button> | ||||
| </template> | ||||
|  |  | |||
|  | @ -5,8 +5,8 @@ | |||
| 		<span class="text"><slot name="label"></slot></span> | ||||
| 		<span class="right"> | ||||
| 			<span class="text"><slot name="suffix"></slot></span> | ||||
| 			<i v-if="opened" class="fas fa-angle-up icon"></i> | ||||
| 			<i v-else class="fas fa-angle-down icon"></i> | ||||
| 			<i v-if="opened" class="ph-caret-up icon"></i> | ||||
| 			<i v-else class="ph-caret-down icon"></i> | ||||
| 		</span> | ||||
| 	</div> | ||||
| 	<keep-alive> | ||||
|  |  | |||
|  | @ -28,7 +28,7 @@ | |||
| 	</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> {{ $ts.save }}</MkButton> | ||||
| 	<MkButton v-if="manualSave && changed" primary class="save" @click="updated"><i class="ph-check"></i> {{ $ts.save }}</MkButton> | ||||
| </div> | ||||
| </template> | ||||
| 
 | ||||
|  |  | |||
|  | @ -17,7 +17,7 @@ | |||
| 		> | ||||
| 			<slot></slot> | ||||
| 		</select> | ||||
| 		<div ref="suffixEl" class="suffix"><i class="fas fa-chevron-down"></i></div> | ||||
| 		<div ref="suffixEl" class="suffix"><i class="ph-caret-down"></i></div> | ||||
| 	</div> | ||||
| 	<div class="caption"><slot name="caption"></slot></div> | ||||
| 
 | ||||
|  |  | |||
|  | @ -8,7 +8,7 @@ | |||
| 	</div> | ||||
| 	<div v-else> | ||||
| 		<div class="wszdbhzo"> | ||||
| 			<div><i class="fas fa-exclamation-triangle"></i> {{ $ts.somethingHappened }}</div> | ||||
| 			<div><i class="ph-warning"></i> {{ $ts.somethingHappened }}</div> | ||||
| 			<MkButton inline class="retry" @click="retry"><i class="fas fa-redo-alt"></i> {{ $ts.retry }}</MkButton> | ||||
| 		</div> | ||||
| 	</div> | ||||
|  |  | |||
|  | @ -10,7 +10,7 @@ | |||
| 		@keydown.enter="toggle" | ||||
| 	> | ||||
| 	<span ref="button" v-adaptive-border v-tooltip="checked ? $ts.itsOn : $ts.itsOff" class="button" @click.prevent="toggle"> | ||||
| 		<i class="check fas fa-check"></i> | ||||
| 		<i class="check ph-check"></i> | ||||
| 	</span> | ||||
| 	<span class="label"> | ||||
| 		<!-- TODO: 無名slotの方は廃止 --> | ||||
|  |  | |||
|  | @ -40,13 +40,13 @@ function onContextmenu(ev) { | |||
| 		type: 'label', | ||||
| 		text: props.to, | ||||
| 	}, { | ||||
| 		icon: 'fas fa-window-maximize', | ||||
| 		icon: 'ph-frame-corners', | ||||
| 		text: i18n.ts.openInWindow, | ||||
| 		action: () => { | ||||
| 			os.pageWindow(props.to); | ||||
| 		} | ||||
| 	}, mkNav.sideViewHook ? { | ||||
| 		icon: 'fas fa-columns', | ||||
| 		icon: 'ph-layout', | ||||
| 		text: i18n.ts.openInSideView, | ||||
| 		action: () => { | ||||
| 			if (mkNav.sideViewHook) mkNav.sideViewHook(props.to); | ||||
|  | @ -64,7 +64,7 @@ function onContextmenu(ev) { | |||
| 			window.open(props.to, '_blank'); | ||||
| 		} | ||||
| 	}, { | ||||
| 		icon: 'fas fa-link', | ||||
| 		icon: 'ph-link', | ||||
| 		text: i18n.ts.copyLink, | ||||
| 		action: () => { | ||||
| 			copyToClipboard(`${url}${props.to}`); | ||||
|  |  | |||
|  | @ -3,7 +3,7 @@ | |||
| 	<div v-if="!showMenu" class="main" :class="ad.place"> | ||||
| 		<a :href="ad.url" target="_blank"> | ||||
| 			<img :src="ad.imageUrl"> | ||||
| 			<button class="_button menu" @click.prevent.stop="toggleMenu"><span class="fas fa-info-circle"></span></button> | ||||
| 			<button class="_button menu" @click.prevent.stop="toggleMenu"><span class="ph-info"></span></button> | ||||
| 		</a> | ||||
| 	</div> | ||||
| 	<div v-else class="menu"> | ||||
|  |  | |||
|  | @ -2,7 +2,7 @@ | |||
| <transition :name="$store.state.animation ? 'zoom' : ''" appear> | ||||
| 	<div class="mjndxjcg"> | ||||
| 		<img src="https://xn--931a.moe/assets/error.jpg" class="_ghost"/> | ||||
| 		<p><i class="fas fa-exclamation-triangle"></i> {{ $ts.somethingHappened }}</p> | ||||
| 		<p><i class="ph-warning"></i> {{ $ts.somethingHappened }}</p> | ||||
| 		<MkButton class="button" @click="() => $emit('retry')">{{ $ts.retry }}</MkButton> | ||||
| 	</div> | ||||
| </transition> | ||||
|  |  | |||
|  | @ -13,7 +13,7 @@ | |||
| 				</div> | ||||
| 				<div v-if="narrow && hasTabs" class="subtitle activeTab"> | ||||
| 					{{ info.tabs.find(tab => tab.active)?.title }} | ||||
| 					<i class="chevron fas fa-chevron-down"></i> | ||||
| 					<i class="chevron ph-caret-down"></i> | ||||
| 				</div> | ||||
| 			</div> | ||||
| 		</div> | ||||
|  | @ -31,7 +31,7 @@ | |||
| 				<button v-else v-tooltip="action.text" class="_button button" :class="{ highlighted: action.highlighted }" @click.stop="action.handler" @touchstart="preventDrag"><i :class="action.icon"></i></button> | ||||
| 			</template> | ||||
| 		</template> | ||||
| 		<button v-if="shouldShowMenu" v-tooltip="$ts.menu" class="_button button" @click.stop="showMenu" @touchstart="preventDrag"><i class="fas fa-ellipsis-h"></i></button> | ||||
| 		<button v-if="shouldShowMenu" v-tooltip="$ts.menu" class="_button button" @click.stop="showMenu" @touchstart="preventDrag"><i class="ph-dots-three-outline"></i></button> | ||||
| 	</div> | ||||
| </div> | ||||
| </template> | ||||
|  |  | |||
|  | @ -1,7 +1,7 @@ | |||
| <template> | ||||
| <div class="mk-google"> | ||||
| 	<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="ph-magnifying-glass"></i> {{ $ts.searchByGoogle }}</button> | ||||
| </div> | ||||
| </template> | ||||
| 
 | ||||
|  |  | |||
|  | @ -6,22 +6,22 @@ | |||
| 				<button v-if="item.action" v-click-anime class="_button" @click="$event => { item.action($event); close(); }"> | ||||
| 					<i class="icon" :class="item.icon"></i> | ||||
| 					<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="ph-circle"></i></span> | ||||
| 				</button> | ||||
| 				<MkA v-else v-click-anime :to="item.to" @click.passive="close()"> | ||||
| 					<i class="icon" :class="item.icon"></i> | ||||
| 					<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="ph-circle"></i></span> | ||||
| 				</MkA> | ||||
| 			</template> | ||||
| 		</div> | ||||
| 		<div class="sub"> | ||||
| 			<a v-click-anime href="https://misskey-hub.net/help.html" target="_blank" @click.passive="close()"> | ||||
| 				<i class="fas fa-question-circle icon"></i> | ||||
| 				<i class="ph-question icon"></i> | ||||
| 				<div class="text">{{ $ts.help }}</div> | ||||
| 			</a> | ||||
| 			<MkA v-click-anime to="/about" @click.passive="close()"> | ||||
| 				<i class="fas fa-info-circle icon"></i> | ||||
| 				<i class="ph-info icon"></i> | ||||
| 				<div class="text">{{ $t('aboutX', { x: instanceName }) }}</div> | ||||
| 			</MkA> | ||||
| 			<MkA v-click-anime to="/about-misskey" @click.passive="close()"> | ||||
|  |  | |||
|  | @ -1,7 +1,7 @@ | |||
| <template> | ||||
| <div class="mk-media-banner"> | ||||
| 	<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="ph-warning"></i></span> | ||||
| 		<b>{{ $ts.sensitive }}</b> | ||||
| 		<span>{{ $ts.clickToShow }}</span> | ||||
| 	</div> | ||||
|  | @ -19,7 +19,7 @@ | |||
| 		:title="media.name" | ||||
| 		:download="media.name" | ||||
| 	> | ||||
| 		<span class="icon"><i class="fas fa-download"></i></span> | ||||
| 		<span class="icon"><i class="ph-download-simple"></i></span> | ||||
| 		<b>{{ media.name }}</b> | ||||
| 	</a> | ||||
| </div> | ||||
|  |  | |||
|  | @ -3,7 +3,7 @@ | |||
| 	<ImgWithBlurhash class="bg" :hash="image.blurhash" :title="image.comment" :alt="image.comment"/> | ||||
| 	<div class="text"> | ||||
| 		<div> | ||||
| 			<b><i class="fas fa-exclamation-triangle"></i> {{ $ts.sensitive }}</b> | ||||
| 			<b><i class="ph-warning"></i> {{ $ts.sensitive }}</b> | ||||
| 			<span>{{ $ts.clickToShow }}</span> | ||||
| 		</div> | ||||
| 	</div> | ||||
|  | @ -16,7 +16,7 @@ | |||
| 		<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> | ||||
| 	</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="ph-eye-slash"></i></button> | ||||
| </div> | ||||
| </template> | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,7 +1,7 @@ | |||
| <template> | ||||
| <div v-if="hide" class="icozogqfvdetwohsdglrbswgrejoxbdj" @click="hide = false"> | ||||
| 	<div> | ||||
| 		<b><i class="fas fa-exclamation-triangle"></i> {{ $ts.sensitive }}</b> | ||||
| 		<b><i class="ph-warning"></i> {{ $ts.sensitive }}</b> | ||||
| 		<span>{{ $ts.clickToShow }}</span> | ||||
| 	</div> | ||||
| </div> | ||||
|  | @ -19,7 +19,7 @@ | |||
| 			:type="video.type" | ||||
| 		> | ||||
| 	</video> | ||||
| 	<i class="fas fa-eye-slash" @click="hide = true"></i> | ||||
| 	<i class="ph-eye-slash" @click="hide = true"></i> | ||||
| </div> | ||||
| </template> | ||||
| 
 | ||||
|  |  | |||
|  | @ -96,7 +96,7 @@ export default defineComponent({ | |||
| 				text: this.$ts.showInPage, | ||||
| 				action: this.expand, | ||||
| 			}, this.sideViewHook ? { | ||||
| 				icon: 'fas fa-columns', | ||||
| 				icon: 'ph-layout', | ||||
| 				text: this.$ts.openInSideView, | ||||
| 				action: () => { | ||||
| 					this.sideViewHook(this.path); | ||||
|  | @ -114,7 +114,7 @@ export default defineComponent({ | |||
| 					this.$refs.window.close(); | ||||
| 				}, | ||||
| 			}, { | ||||
| 				icon: 'fas fa-link', | ||||
| 				icon: 'ph-link', | ||||
| 				text: this.$ts.copyLink, | ||||
| 				action: () => { | ||||
| 					copyToClipboard(this.url); | ||||
|  |  | |||
|  | @ -23,13 +23,13 @@ | |||
| 		</I18n> | ||||
| 		<div class="info"> | ||||
| 			<button ref="renoteTime" class="_button time" @click="showRenoteMenu()"> | ||||
| 				<i v-if="isMyRenote" class="fas fa-ellipsis-h dropdownIcon"></i> | ||||
| 				<i v-if="isMyRenote" class="ph-dots-three-outline dropdownIcon"></i> | ||||
| 				<MkTime :time="note.createdAt"/> | ||||
| 			</button> | ||||
| 			<span v-if="note.visibility !== 'public'" class="visibility"> | ||||
| 				<i v-if="note.visibility === 'home'" class="fas fa-home"></i> | ||||
| 				<i v-else-if="note.visibility === 'followers'" class="fas fa-unlock"></i> | ||||
| 				<i v-else-if="note.visibility === 'specified'" class="fas fa-envelope"></i> | ||||
| 				<i v-else-if="note.visibility === 'specified'" class="ph-envelope-simple"></i> | ||||
| 			</span> | ||||
| 			<span v-if="note.localOnly" class="localOnly"><i class="fas fa-biohazard"></i></span> | ||||
| 		</div> | ||||
|  | @ -46,7 +46,7 @@ | |||
| 					<span v-if="appearNote.visibility !== 'public'" class="visibility"> | ||||
| 						<i v-if="appearNote.visibility === 'home'" class="fas fa-home"></i> | ||||
| 						<i v-else-if="appearNote.visibility === 'followers'" class="fas fa-unlock"></i> | ||||
| 						<i v-else-if="appearNote.visibility === 'specified'" class="fas fa-envelope"></i> | ||||
| 						<i v-else-if="appearNote.visibility === 'specified'" class="ph-envelope-simple"></i> | ||||
| 					</span> | ||||
| 					<span v-if="appearNote.localOnly" class="localOnly"><i class="fas fa-biohazard"></i></span> | ||||
| 				</div> | ||||
|  | @ -63,7 +63,7 @@ | |||
| 				<div v-show="appearNote.cw == null || showContent" class="content"> | ||||
| 					<div class="text"> | ||||
| 						<span v-if="appearNote.isHidden" style="opacity: 0.5">({{ $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="ph-arrow-bend-up-left"></i></MkA> | ||||
| 						<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> | ||||
| 						<div v-if="translating || translation" class="translation"> | ||||
|  | @ -81,7 +81,7 @@ | |||
| 					<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> | ||||
| 				<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="ph-television"></i> {{ appearNote.channel.name }}</MkA> | ||||
| 			</div> | ||||
| 			<footer class="footer"> | ||||
| 				<div class="info"> | ||||
|  | @ -91,19 +91,19 @@ | |||
| 				</div> | ||||
| 				<XReactionsViewer ref="reactionsViewer" :note="appearNote"/> | ||||
| 				<button class="button _button" @click="reply()"> | ||||
| 					<template v-if="appearNote.reply"><i class="fas fa-reply-all"></i></template> | ||||
| 					<template v-else><i class="fas fa-reply"></i></template> | ||||
| 					<template v-if="appearNote.reply"><i class="ph-arrow-bend-double-left"></i></template> | ||||
| 					<template v-else><i class="ph-arrow-bend-up-left"></i></template> | ||||
| 					<p v-if="appearNote.repliesCount > 0" class="count">{{ appearNote.repliesCount }}</p> | ||||
| 				</button> | ||||
| 				<XRenoteButton ref="renoteButton" class="button" :note="appearNote" :count="appearNote.renoteCount"/> | ||||
| 				<button v-if="appearNote.myReaction == null" ref="reactButton" class="button _button" @click="react()"> | ||||
| 					<i class="fas fa-plus"></i> | ||||
| 					<i class="ph-plus"></i> | ||||
| 				</button> | ||||
| 				<button v-if="appearNote.myReaction != null" ref="reactButton" class="button _button reacted" @click="undoReact(appearNote)"> | ||||
| 					<i class="fas fa-minus"></i> | ||||
| 				</button> | ||||
| 				<button ref="menuButton" class="button _button" @click="menu()"> | ||||
| 					<i class="fas fa-ellipsis-h"></i> | ||||
| 					<i class="ph-dots-three-outline"></i> | ||||
| 				</button> | ||||
| 			</footer> | ||||
| 		</div> | ||||
|  | @ -265,7 +265,7 @@ function showRenoteMenu(viaKeyboard = false): void { | |||
| 	if (!isMyRenote) return; | ||||
| 	os.popupMenu([{ | ||||
| 		text: i18n.ts.unrenote, | ||||
| 		icon: 'fas fa-trash-alt', | ||||
| 		icon: 'ph-trash', | ||||
| 		danger: true, | ||||
| 		action: () => { | ||||
| 			os.api('notes/delete', { | ||||
|  |  | |||
|  | @ -12,7 +12,7 @@ | |||
| 		<span v-if="note.visibility !== 'public'" class="visibility"> | ||||
| 			<i v-if="note.visibility === 'home'" class="fas fa-home"></i> | ||||
| 			<i v-else-if="note.visibility === 'followers'" class="fas fa-unlock"></i> | ||||
| 			<i v-else-if="note.visibility === 'specified'" class="fas fa-envelope"></i> | ||||
| 			<i v-else-if="note.visibility === 'specified'" class="ph-envelope-simple"></i> | ||||
| 		</span> | ||||
| 		<span v-if="note.localOnly" class="localOnly"><i class="fas fa-biohazard"></i></span> | ||||
| 	</div> | ||||
|  |  | |||
|  | @ -25,13 +25,13 @@ | |||
| 		</I18n> | ||||
| 		<div class="info"> | ||||
| 			<button ref="renoteTime" class="_button time" @click="showRenoteMenu()"> | ||||
| 				<i v-if="isMyRenote" class="fas fa-ellipsis-h dropdownIcon"></i> | ||||
| 				<i v-if="isMyRenote" class="ph-dots-three-outline dropdownIcon"></i> | ||||
| 				<MkTime :time="note.createdAt"/> | ||||
| 			</button> | ||||
| 			<span v-if="note.visibility !== 'public'" class="visibility"> | ||||
| 				<i v-if="note.visibility === 'home'" class="fas fa-home"></i> | ||||
| 				<i v-else-if="note.visibility === 'followers'" class="fas fa-unlock"></i> | ||||
| 				<i v-else-if="note.visibility === 'specified'" class="fas fa-envelope"></i> | ||||
| 				<i v-else-if="note.visibility === 'specified'" class="ph-envelope-simple"></i> | ||||
| 			</span> | ||||
| 			<span v-if="note.localOnly" class="localOnly"><i class="fas fa-biohazard"></i></span> | ||||
| 		</div> | ||||
|  | @ -49,7 +49,7 @@ | |||
| 				<div v-show="appearNote.cw == null || showContent" class="content" :class="{ collapsed }"> | ||||
| 					<div class="text"> | ||||
| 						<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="ph-arrow-bend-up-left"></i></MkA> | ||||
| 						<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> | ||||
| 						<div v-if="translating || translation" class="translation"> | ||||
|  | @ -70,24 +70,24 @@ | |||
| 						<span>{{ i18n.ts.showMore }}</span> | ||||
| 					</button> | ||||
| 				</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="ph-television"></i> {{ appearNote.channel.name }}</MkA> | ||||
| 			</div> | ||||
| 			<footer class="footer"> | ||||
| 				<XReactionsViewer ref="reactionsViewer" :note="appearNote"/> | ||||
| 				<button class="button _button" @click="reply()"> | ||||
| 					<template v-if="appearNote.reply"><i class="fas fa-reply-all"></i></template> | ||||
| 					<template v-else><i class="fas fa-reply"></i></template> | ||||
| 					<template v-if="appearNote.reply"><i class="ph-arrow-bend-double-left"></i></template> | ||||
| 					<template v-else><i class="ph-arrow-bend-up-left"></i></template> | ||||
| 					<p v-if="appearNote.repliesCount > 0" class="count">{{ appearNote.repliesCount }}</p> | ||||
| 				</button> | ||||
| 				<XRenoteButton ref="renoteButton" class="button" :note="appearNote" :count="appearNote.renoteCount"/> | ||||
| 				<button v-if="appearNote.myReaction == null" ref="reactButton" class="button _button" @click="react()"> | ||||
| 					<i class="fas fa-plus"></i> | ||||
| 					<i class="ph-plus"></i> | ||||
| 				</button> | ||||
| 				<button v-if="appearNote.myReaction != null" ref="reactButton" class="button _button reacted" @click="undoReact(appearNote)"> | ||||
| 					<i class="fas fa-minus"></i> | ||||
| 				</button> | ||||
| 				<button ref="menuButton" class="button _button" @click="menu()"> | ||||
| 					<i class="fas fa-ellipsis-h"></i> | ||||
| 					<i class="ph-dots-three-outline"></i> | ||||
| 				</button> | ||||
| 			</footer> | ||||
| 		</div> | ||||
|  | @ -253,7 +253,7 @@ function showRenoteMenu(viaKeyboard = false): void { | |||
| 	if (!isMyRenote) return; | ||||
| 	os.popupMenu([{ | ||||
| 		text: i18n.ts.unrenote, | ||||
| 		icon: 'fas fa-trash-alt', | ||||
| 		icon: 'ph-trash', | ||||
| 		danger: true, | ||||
| 		action: () => { | ||||
| 			os.api('notes/delete', { | ||||
|  |  | |||
|  | @ -5,14 +5,14 @@ | |||
| 		<MkAvatar v-else-if="notification.user" class="icon" :user="notification.user"/> | ||||
| 		<img v-else-if="notification.icon" class="icon" :src="notification.icon" alt=""/> | ||||
| 		<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="ph-plus"></i> | ||||
| 			<i v-else-if="notification.type === 'receiveFollowRequest'" class="fas fa-clock"></i> | ||||
| 			<i v-else-if="notification.type === 'followRequestAccepted'" class="fas fa-check"></i> | ||||
| 			<i v-else-if="notification.type === 'followRequestAccepted'" class="ph-check"></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 === 'reply'" class="fas fa-reply"></i> | ||||
| 			<i v-else-if="notification.type === 'mention'" class="fas fa-at"></i> | ||||
| 			<i v-else-if="notification.type === 'quote'" class="fas fa-quote-left"></i> | ||||
| 			<i v-else-if="notification.type === 'reply'" class="ph-arrow-bend-up-left"></i> | ||||
| 			<i v-else-if="notification.type === 'mention'" class="ph-at"></i> | ||||
| 			<i v-else-if="notification.type === 'quote'" class="ph-quotesleft"></i> | ||||
| 			<i v-else-if="notification.type === 'pollVote'" class="fas fa-poll-h"></i> | ||||
| 			<i v-else-if="notification.type === 'pollEnded'" class="fas fa-poll-h"></i> | ||||
| 			<!-- notification.reaction が null になることはまずないが、ここでoptional chaining使うと一部ブラウザで刺さるので念の為 --> | ||||
|  | @ -33,14 +33,14 @@ | |||
| 			<MkTime v-if="withTime" :time="notification.createdAt" class="time"/> | ||||
| 		</header> | ||||
| 		<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="ph-quotesleft"></i> | ||||
| 			<Mfm :text="getNoteSummary(notification.note)" :plain="true" :nowrap="!full" :custom-emojis="notification.note.emojis"/> | ||||
| 			<i class="fas fa-quote-right"></i> | ||||
| 			<i class="ph-quotesright"></i> | ||||
| 		</MkA> | ||||
| 		<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="ph-quotesleft"></i> | ||||
| 			<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="ph-quotesright"></i> | ||||
| 		</MkA> | ||||
| 		<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"/> | ||||
|  | @ -52,14 +52,14 @@ | |||
| 			<Mfm :text="getNoteSummary(notification.note)" :plain="true" :nowrap="!full" :custom-emojis="notification.note.emojis"/> | ||||
| 		</MkA> | ||||
| 		<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="ph-quotesleft"></i> | ||||
| 			<Mfm :text="getNoteSummary(notification.note)" :plain="true" :nowrap="!full" :custom-emojis="notification.note.emojis"/> | ||||
| 			<i class="fas fa-quote-right"></i> | ||||
| 			<i class="ph-quotesright"></i> | ||||
| 		</MkA> | ||||
| 		<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="ph-quotesleft"></i> | ||||
| 			<Mfm :text="getNoteSummary(notification.note)" :plain="true" :nowrap="!full" :custom-emojis="notification.note.emojis"/> | ||||
| 			<i class="fas fa-quote-right"></i> | ||||
| 			<i class="ph-quotesright"></i> | ||||
| 		</MkA> | ||||
| 		<span v-if="notification.type === 'follow'" class="text" style="opacity: 0.6;">{{ $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;">{{ $ts.followRequestAccepted }}</span> | ||||
|  |  | |||
|  | @ -19,7 +19,7 @@ | |||
| 	<template #headerRight> | ||||
| 		<button v-tooltip="$ts.showInPage" class="_button" @click="expand()"><i class="fas fa-expand-alt"></i></button> | ||||
| 		<button v-tooltip="$ts.popout" class="_button" @click="popout()"><i class="fas fa-external-link-alt"></i></button> | ||||
| 		<button class="_button" @click="menu"><i class="fas fa-ellipsis-h"></i></button> | ||||
| 		<button class="_button" @click="menu"><i class="ph-dots-three-outline"></i></button> | ||||
| 	</template> | ||||
| 
 | ||||
| 	<div class="yrolvcoq" :style="{ background: pageInfo?.bg }"> | ||||
|  | @ -103,7 +103,7 @@ export default defineComponent({ | |||
| 				text: this.$ts.showInPage, | ||||
| 				action: this.expand | ||||
| 			}, this.sideViewHook ? { | ||||
| 				icon: 'fas fa-columns', | ||||
| 				icon: 'ph-layout', | ||||
| 				text: this.$ts.openInSideView, | ||||
| 				action: () => { | ||||
| 					this.sideViewHook(this.path); | ||||
|  | @ -121,7 +121,7 @@ export default defineComponent({ | |||
| 					this.$refs.window.close(); | ||||
| 				} | ||||
| 			}, { | ||||
| 				icon: 'fas fa-link', | ||||
| 				icon: 'ph-link', | ||||
| 				text: this.$ts.copyLink, | ||||
| 				action: () => { | ||||
| 					copyToClipboard(this.url); | ||||
|  | @ -155,7 +155,7 @@ export default defineComponent({ | |||
| 					this.$refs.window.close(); | ||||
| 				} | ||||
| 			}, { | ||||
| 				icon: 'fas fa-link', | ||||
| 				icon: 'ph-link', | ||||
| 				text: this.$ts.copyLink, | ||||
| 				action: () => { | ||||
| 					copyToClipboard(this.url); | ||||
|  |  | |||
|  | @ -2,7 +2,7 @@ | |||
| <div class="ngbfujlo"> | ||||
| 	<MkTextarea :model-value="text" readonly style="margin: 0;"></MkTextarea> | ||||
| 	<MkButton class="button" primary :disabled="posting || posted" @click="post()"> | ||||
| 		<i v-if="posted" class="fas fa-check"></i> | ||||
| 		<i v-if="posted" class="ph-check"></i> | ||||
| 		<i v-else class="fas fa-paper-plane"></i> | ||||
| 	</MkButton> | ||||
| </div> | ||||
|  |  | |||
|  | @ -1,7 +1,7 @@ | |||
| <template> | ||||
| <div class="zmdxowus"> | ||||
| 	<p v-if="choices.length < 2" class="caution"> | ||||
| 		<i class="fas fa-exclamation-triangle"></i>{{ $ts._poll.noOnlyOneChoice }} | ||||
| 		<i class="ph-warning"></i>{{ $ts._poll.noOnlyOneChoice }} | ||||
| 	</p> | ||||
| 	<ul> | ||||
| 		<li v-for="(choice, i) in choices" :key="i"> | ||||
|  |  | |||
|  | @ -4,7 +4,7 @@ | |||
| 		<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> | ||||
| 			<span> | ||||
| 				<template v-if="choice.isVoted"><i class="fas fa-check"></i></template> | ||||
| 				<template v-if="choice.isVoted"><i class="ph-check"></i></template> | ||||
| 				<Mfm :text="choice.text" :plain="true" :custom-emojis="note.emojis"/> | ||||
| 				<span v-if="showResult" class="votes">({{ $t('_poll.votesCount', { n: choice.votes }) }})</span> | ||||
| 			</span> | ||||
|  |  | |||
|  | @ -5,7 +5,7 @@ | |||
| 			<div @click="showFileMenu(element, $event)" @contextmenu.prevent="showFileMenu(element, $event)"> | ||||
| 				<MkDriveFileThumbnail :data-id="element.id" class="thumbnail" :file="element" fit="cover"/> | ||||
| 				<div v-if="element.isSensitive" class="sensitive"> | ||||
| 					<i class="fas fa-exclamation-triangle icon"></i> | ||||
| 					<i class="ph-warning icon"></i> | ||||
| 				</div> | ||||
| 			</div> | ||||
| 		</template> | ||||
|  | @ -113,19 +113,19 @@ export default defineComponent({ | |||
| 			if (this.menu) return; | ||||
| 			this.menu = os.popupMenu([{ | ||||
| 				text: this.$ts.renameFile, | ||||
| 				icon: 'fas fa-i-cursor', | ||||
| 				icon: 'ph-cursor-text', | ||||
| 				action: () => { this.rename(file); } | ||||
| 			}, { | ||||
| 				text: file.isSensitive ? this.$ts.unmarkAsSensitive : this.$ts.markAsSensitive, | ||||
| 				icon: file.isSensitive ? 'fas fa-eye-slash' : 'fas fa-eye', | ||||
| 				icon: file.isSensitive ? 'ph-eye-slash' : 'ph-eye', | ||||
| 				action: () => { this.toggleSensitive(file); } | ||||
| 			}, { | ||||
| 				text: this.$ts.describeFile, | ||||
| 				icon: 'fas fa-i-cursor', | ||||
| 				icon: 'ph-cursor-text', | ||||
| 				action: () => { this.describe(file); } | ||||
| 			}, { | ||||
| 				text: this.$ts.attachCancel, | ||||
| 				icon: 'fas fa-times-circle', | ||||
| 				icon: 'ph-warning-circle', | ||||
| 				action: () => { this.detachMedia(file.id); } | ||||
| 			}], ev.currentTarget ?? ev.target).then(() => this.menu = null); | ||||
| 		} | ||||
|  |  | |||
|  | @ -15,19 +15,19 @@ | |||
| 			<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> | ||||
| 			<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="ph-globe"></i></span> | ||||
| 				<span v-if="visibility === 'home'"><i class="fas fa-home"></i></span> | ||||
| 				<span v-if="visibility === 'followers'"><i class="fas fa-unlock"></i></span> | ||||
| 				<span v-if="visibility === 'specified'"><i class="fas fa-envelope"></i></span> | ||||
| 				<span v-if="visibility === 'specified'"><i class="ph-envelope-simple"></i></span> | ||||
| 			</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 v-tooltip="i18n.ts.previewNoteText" class="_button preview" :class="{ active: showPreview }" @click="showPreview = !showPreview"><i class="ph-file-code"></i></button> | ||||
| 			<button class="submit _buttonGradate" :disabled="!canPost" data-cy-open-post-form-submit @click="post">{{ submitText }}<i :class="reply ? 'ph-arrow-bend-up-left' : renote ? 'ph-quotesright' : 'fas fa-paper-plane'"></i></button> | ||||
| 		</div> | ||||
| 	</header> | ||||
| 	<div class="form" :class="{ fixed }"> | ||||
| 		<XNoteSimple v-if="reply" class="preview" :note="reply"/> | ||||
| 		<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="ph-quotesleft"></i> {{ i18n.ts.quoteAttached }}<button @click="quoteId = null"><i class="fas fa-times"></i></button></div> | ||||
| 		<div v-if="visibility === 'specified'" class="to-specified"> | ||||
| 			<span style="margin-right: 8px;">{{ i18n.ts.recipient }}</span> | ||||
| 			<div class="visibleUsers"> | ||||
|  | @ -35,7 +35,7 @@ | |||
| 					<MkAcct :user="u"/> | ||||
| 					<button class="_button" @click="removeVisibleUser(u)"><i class="fas fa-times"></i></button> | ||||
| 				</span> | ||||
| 				<button class="_buttonPrimary" @click="addVisibleUser"><i class="fas fa-plus fa-fw"></i></button> | ||||
| 				<button class="_buttonPrimary" @click="addVisibleUser"><i class="ph-plus ph-fw"></i></button> | ||||
| 			</div> | ||||
| 		</div> | ||||
| 		<MkInfo v-if="hasNotSpecifiedMentions" warn class="hasNotSpecifiedMentions">{{ i18n.ts.notSpecifiedMentionWarning }} - <button class="_textButton" @click="addMissingMention()">{{ i18n.ts.add }}</button></MkInfo> | ||||
|  | @ -48,10 +48,10 @@ | |||
| 		<footer> | ||||
| 			<button v-tooltip="i18n.ts.attachFile" class="_button" @click="chooseFileFrom"><i class="fas fa-photo-video"></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.useCw" class="_button" :class="{ active: useCw }" @click="useCw = !useCw"><i class="fas fa-eye-slash"></i></button> | ||||
| 			<button v-tooltip="i18n.ts.mention" class="_button" @click="insertMention"><i class="fas fa-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.emoji" class="_button" @click="insertEmoji"><i class="fas fa-laugh-squint"></i></button> | ||||
| 			<button v-tooltip="i18n.ts.useCw" class="_button" :class="{ active: useCw }" @click="useCw = !useCw"><i class="ph-eye-slash"></i></button> | ||||
| 			<button v-tooltip="i18n.ts.mention" class="_button" @click="insertMention"><i class="ph-at"></i></button> | ||||
| 			<button v-tooltip="i18n.ts.hashtags" class="_button" :class="{ active: withHashtags }" @click="withHashtags = !withHashtags"><i class="ph-hash"></i></button> | ||||
| 			<button v-tooltip="i18n.ts.emoji" class="_button" @click="insertEmoji"><i class="ph-smiley-squint"></i></button> | ||||
| 			<button v-if="postFormActions.length > 0" v-tooltip="i18n.ts.plugin" class="_button" @click="showActions"><i class="fas fa-plug"></i></button> | ||||
| 		</footer> | ||||
| 		<datalist id="hashtags"> | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| <template> | ||||
| <div class="jmgmzlwq _block"><i class="fas fa-exclamation-triangle" style="margin-right: 8px;"></i>{{ $ts.remoteUserCaution }}<a :href="href" rel="nofollow noopener" target="_blank">{{ $ts.showOnRemote }}</a></div> | ||||
| <div class="jmgmzlwq _block"><i class="ph-warning" style="margin-right: 8px;"></i>{{ $ts.remoteUserCaution }}<a :href="href" rel="nofollow noopener" target="_blank">{{ $ts.showOnRemote }}</a></div> | ||||
| </template> | ||||
| 
 | ||||
| <script lang="ts" setup> | ||||
|  |  | |||
|  | @ -68,7 +68,7 @@ export default defineComponent({ | |||
| 				} | ||||
| 			}, { | ||||
| 				text: i18n.ts.quote, | ||||
| 				icon: 'fas fa-quote-right', | ||||
| 				icon: 'ph-quotesright', | ||||
| 				action: () => { | ||||
| 					os.post({ | ||||
| 						renote: props.note, | ||||
|  |  | |||
|  | @ -11,7 +11,7 @@ | |||
| 				<template #suffix>@{{ host }}</template> | ||||
| 			</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> | ||||
| 				<template #prefix><i class="fas fa-lock"></i></template> | ||||
| 				<template #prefix><i class="ph-lock"></i></template> | ||||
| 				<template #caption><button class="_textButton" type="button" @click="resetPassword">{{ i18n.ts.forgotPassword }}</button></template> | ||||
| 			</MkInput> | ||||
| 			<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> | ||||
| 				<MkInput v-if="user && user.usePasswordLessLogin" v-model="password" type="password" :with-password-toggle="true" required> | ||||
| 					<template #label>{{ i18n.ts.password }}</template> | ||||
| 					<template #prefix><i class="fas fa-lock"></i></template> | ||||
| 					<template #prefix><i class="ph-lock"></i></template> | ||||
| 				</MkInput> | ||||
| 				<MkInput v-model="token" type="text" pattern="^[0-9]{6}$" autocomplete="off" spellcheck="false" required> | ||||
| 					<template #label>{{ i18n.ts.token }}</template> | ||||
|  |  | |||
|  | @ -10,45 +10,45 @@ | |||
| 			<template #prefix>@</template> | ||||
| 			<template #suffix>@{{ host }}</template> | ||||
| 			<template #caption> | ||||
| 				<span v-if="usernameState === 'wait'" style="color:#999"><i class="fas fa-spinner fa-pulse fa-fw"></i> {{ $ts.checking }}</span> | ||||
| 				<span v-else-if="usernameState === 'ok'" style="color: var(--success)"><i class="fas fa-check fa-fw"></i> {{ $ts.available }}</span> | ||||
| 				<span v-else-if="usernameState === 'unavailable'" style="color: var(--error)"><i class="fas fa-exclamation-triangle fa-fw"></i> {{ $ts.unavailable }}</span> | ||||
| 				<span v-else-if="usernameState === 'error'" style="color: var(--error)"><i class="fas fa-exclamation-triangle fa-fw"></i> {{ $ts.error }}</span> | ||||
| 				<span v-else-if="usernameState === 'invalid-format'" style="color: var(--error)"><i class="fas fa-exclamation-triangle fa-fw"></i> {{ $ts.usernameInvalidFormat }}</span> | ||||
| 				<span v-else-if="usernameState === 'min-range'" style="color: var(--error)"><i class="fas fa-exclamation-triangle fa-fw"></i> {{ $ts.tooShort }}</span> | ||||
| 				<span v-else-if="usernameState === 'max-range'" style="color: var(--error)"><i class="fas fa-exclamation-triangle fa-fw"></i> {{ $ts.tooLong }}</span> | ||||
| 				<span v-if="usernameState === 'wait'" style="color:#999"><i class="fas fa-spinner fa-pulse ph-fw"></i> {{ $ts.checking }}</span> | ||||
| 				<span v-else-if="usernameState === 'ok'" style="color: var(--success)"><i class="ph-check ph-fw"></i> {{ $ts.available }}</span> | ||||
| 				<span v-else-if="usernameState === 'unavailable'" style="color: var(--error)"><i class="ph-warning ph-fw"></i> {{ $ts.unavailable }}</span> | ||||
| 				<span v-else-if="usernameState === 'error'" style="color: var(--error)"><i class="ph-warning ph-fw"></i> {{ $ts.error }}</span> | ||||
| 				<span v-else-if="usernameState === 'invalid-format'" style="color: var(--error)"><i class="ph-warning ph-fw"></i> {{ $ts.usernameInvalidFormat }}</span> | ||||
| 				<span v-else-if="usernameState === 'min-range'" style="color: var(--error)"><i class="ph-warning ph-fw"></i> {{ $ts.tooShort }}</span> | ||||
| 				<span v-else-if="usernameState === 'max-range'" style="color: var(--error)"><i class="ph-warning ph-fw"></i> {{ $ts.tooLong }}</span> | ||||
| 			</template> | ||||
| 		</MkInput> | ||||
| 		<MkInput v-if="meta.emailRequiredForSignup" v-model="email" class="_formBlock" :debounce="true" type="email" spellcheck="false" required data-cy-signup-email @update:modelValue="onChangeEmail"> | ||||
| 			<template #label>{{ $ts.emailAddress }} <div v-tooltip:dialog="$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="ph-envelope-simple"></i></template> | ||||
| 			<template #caption> | ||||
| 				<span v-if="emailState === 'wait'" style="color:#999"><i class="fas fa-spinner fa-pulse fa-fw"></i> {{ $ts.checking }}</span> | ||||
| 				<span v-else-if="emailState === 'ok'" style="color: var(--success)"><i class="fas fa-check fa-fw"></i> {{ $ts.available }}</span> | ||||
| 				<span v-else-if="emailState === 'unavailable:used'" style="color: var(--error)"><i class="fas fa-exclamation-triangle fa-fw"></i> {{ $ts._emailUnavailable.used }}</span> | ||||
| 				<span v-else-if="emailState === 'unavailable:format'" style="color: var(--error)"><i class="fas fa-exclamation-triangle fa-fw"></i> {{ $ts._emailUnavailable.format }}</span> | ||||
| 				<span v-else-if="emailState === 'unavailable:disposable'" style="color: var(--error)"><i class="fas fa-exclamation-triangle fa-fw"></i> {{ $ts._emailUnavailable.disposable }}</span> | ||||
| 				<span v-else-if="emailState === 'unavailable:mx'" style="color: var(--error)"><i class="fas fa-exclamation-triangle fa-fw"></i> {{ $ts._emailUnavailable.mx }}</span> | ||||
| 				<span v-else-if="emailState === 'unavailable:smtp'" style="color: var(--error)"><i class="fas fa-exclamation-triangle fa-fw"></i> {{ $ts._emailUnavailable.smtp }}</span> | ||||
| 				<span v-else-if="emailState === 'unavailable'" style="color: var(--error)"><i class="fas fa-exclamation-triangle fa-fw"></i> {{ $ts.unavailable }}</span> | ||||
| 				<span v-else-if="emailState === 'error'" style="color: var(--error)"><i class="fas fa-exclamation-triangle fa-fw"></i> {{ $ts.error }}</span> | ||||
| 				<span v-if="emailState === 'wait'" style="color:#999"><i class="fas fa-spinner fa-pulse ph-fw"></i> {{ $ts.checking }}</span> | ||||
| 				<span v-else-if="emailState === 'ok'" style="color: var(--success)"><i class="ph-check ph-fw"></i> {{ $ts.available }}</span> | ||||
| 				<span v-else-if="emailState === 'unavailable:used'" style="color: var(--error)"><i class="ph-warning ph-fw"></i> {{ $ts._emailUnavailable.used }}</span> | ||||
| 				<span v-else-if="emailState === 'unavailable:format'" style="color: var(--error)"><i class="ph-warning ph-fw"></i> {{ $ts._emailUnavailable.format }}</span> | ||||
| 				<span v-else-if="emailState === 'unavailable:disposable'" style="color: var(--error)"><i class="ph-warning ph-fw"></i> {{ $ts._emailUnavailable.disposable }}</span> | ||||
| 				<span v-else-if="emailState === 'unavailable:mx'" style="color: var(--error)"><i class="ph-warning ph-fw"></i> {{ $ts._emailUnavailable.mx }}</span> | ||||
| 				<span v-else-if="emailState === 'unavailable:smtp'" style="color: var(--error)"><i class="ph-warning ph-fw"></i> {{ $ts._emailUnavailable.smtp }}</span> | ||||
| 				<span v-else-if="emailState === 'unavailable'" style="color: var(--error)"><i class="ph-warning ph-fw"></i> {{ $ts.unavailable }}</span> | ||||
| 				<span v-else-if="emailState === 'error'" style="color: var(--error)"><i class="ph-warning ph-fw"></i> {{ $ts.error }}</span> | ||||
| 			</template> | ||||
| 		</MkInput> | ||||
| 		<MkInput v-model="password" class="_formBlock" type="password" autocomplete="new-password" required data-cy-signup-password @update:modelValue="onChangePassword"> | ||||
| 			<template #label>{{ $ts.password }}</template> | ||||
| 			<template #prefix><i class="fas fa-lock"></i></template> | ||||
| 			<template #prefix><i class="ph-lock"></i></template> | ||||
| 			<template #caption> | ||||
| 				<span v-if="passwordStrength == 'low'" style="color: var(--error)"><i class="fas fa-exclamation-triangle fa-fw"></i> {{ $ts.weakPassword }}</span> | ||||
| 				<span v-if="passwordStrength == 'medium'" style="color: var(--warn)"><i class="fas fa-check fa-fw"></i> {{ $ts.normalPassword }}</span> | ||||
| 				<span v-if="passwordStrength == 'high'" style="color: var(--success)"><i class="fas fa-check fa-fw"></i> {{ $ts.strongPassword }}</span> | ||||
| 				<span v-if="passwordStrength == 'low'" style="color: var(--error)"><i class="ph-warning ph-fw"></i> {{ $ts.weakPassword }}</span> | ||||
| 				<span v-if="passwordStrength == 'medium'" style="color: var(--warn)"><i class="ph-check ph-fw"></i> {{ $ts.normalPassword }}</span> | ||||
| 				<span v-if="passwordStrength == 'high'" style="color: var(--success)"><i class="ph-check ph-fw"></i> {{ $ts.strongPassword }}</span> | ||||
| 			</template> | ||||
| 		</MkInput> | ||||
| 		<MkInput v-model="retypedPassword" class="_formBlock" type="password" autocomplete="new-password" required data-cy-signup-password-retype @update:modelValue="onChangePasswordRetype"> | ||||
| 			<template #label>{{ $ts.password }} ({{ $ts.retype }})</template> | ||||
| 			<template #prefix><i class="fas fa-lock"></i></template> | ||||
| 			<template #prefix><i class="ph-lock"></i></template> | ||||
| 			<template #caption> | ||||
| 				<span v-if="passwordRetypeState == 'match'" style="color: var(--success)"><i class="fas fa-check fa-fw"></i> {{ $ts.passwordMatched }}</span> | ||||
| 				<span v-if="passwordRetypeState == 'not-match'" style="color: var(--error)"><i class="fas fa-exclamation-triangle fa-fw"></i> {{ $ts.passwordNotMatched }}</span> | ||||
| 				<span v-if="passwordRetypeState == 'match'" style="color: var(--success)"><i class="ph-check ph-fw"></i> {{ $ts.passwordMatched }}</span> | ||||
| 				<span v-if="passwordRetypeState == 'not-match'" style="color: var(--error)"><i class="ph-warning ph-fw"></i> {{ $ts.passwordNotMatched }}</span> | ||||
| 			</template> | ||||
| 		</MkInput> | ||||
| 		<MkSwitch v-if="meta.tosUrl" v-model="ToSAgreement" class="_formBlock tou"> | ||||
|  |  | |||
|  | @ -3,7 +3,7 @@ | |||
| 	<div class="body"> | ||||
| 		<span v-if="note.isHidden" style="opacity: 0.5">({{ $ts.private }})</span> | ||||
| 		<span v-if="note.deletedAt" style="opacity: 0.5">({{ $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="ph-arrow-bend-up-left"></i></MkA> | ||||
| 		<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> | ||||
| 	</div> | ||||
|  |  | |||
|  | @ -5,8 +5,8 @@ | |||
| 		<div class="sub"> | ||||
| 			<slot name="func"></slot> | ||||
| 			<button v-if="foldable" class="_button" @click="() => showBody = !showBody"> | ||||
| 				<template v-if="showBody"><i class="fas fa-angle-up"></i></template> | ||||
| 				<template v-else><i class="fas fa-angle-down"></i></template> | ||||
| 				<template v-if="showBody"><i class="ph-caret-up"></i></template> | ||||
| 				<template v-else><i class="ph-caret-down"></i></template> | ||||
| 			</button> | ||||
| 		</div> | ||||
| 	</header> | ||||
|  |  | |||
|  | @ -4,8 +4,8 @@ | |||
| 		<div class="title"><slot name="header"></slot></div> | ||||
| 		<div class="divider"></div> | ||||
| 		<button class="_button"> | ||||
| 			<template v-if="showBody"><i class="fas fa-angle-up"></i></template> | ||||
| 			<template v-else><i class="fas fa-angle-down"></i></template> | ||||
| 			<template v-if="showBody"><i class="ph-caret-up"></i></template> | ||||
| 			<template v-else><i class="ph-caret-down"></i></template> | ||||
| 		</button> | ||||
| 	</header> | ||||
| 	<transition :name="$store.state.animation ? 'folder-toggle' : ''" | ||||
|  |  | |||
|  | @ -1,7 +1,7 @@ | |||
| <template> | ||||
| <div class="fpezltsf" :class="{ warn }"> | ||||
| 	<i v-if="warn" class="fas fa-exclamation-triangle"></i> | ||||
| 	<i v-else class="fas fa-info-circle"></i> | ||||
| 	<i v-if="warn" class="ph-warning"></i> | ||||
| 	<i v-else class="ph-info"></i> | ||||
| 	<slot></slot> | ||||
| </div> | ||||
| </template> | ||||
|  |  | |||
|  | @ -15,28 +15,28 @@ | |||
| 			<span><MkEllipsis/></span> | ||||
| 		</span> | ||||
| 		<MkA v-else-if="item.type === 'link'" :to="item.to" :tabindex="i" class="_button item" @click.passive="close()"> | ||||
| 			<i v-if="item.icon" class="fa-fw" :class="item.icon"></i> | ||||
| 			<i v-if="item.icon" class="ph-fw" :class="item.icon"></i> | ||||
| 			<MkAvatar v-if="item.avatar" :user="item.avatar" class="avatar"/> | ||||
| 			<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="ph-circle"></i></span> | ||||
| 		</MkA> | ||||
| 		<a v-else-if="item.type === 'a'" :href="item.href" :target="item.target" :download="item.download" :tabindex="i" class="_button item" @click="close()"> | ||||
| 			<i v-if="item.icon" class="fa-fw" :class="item.icon"></i> | ||||
| 			<i v-if="item.icon" class="ph-fw" :class="item.icon"></i> | ||||
| 			<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="ph-circle"></i></span> | ||||
| 		</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)"> | ||||
| 			<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="ph-circle"></i></span> | ||||
| 		</button> | ||||
| 		<span v-else-if="item.type === 'switch'" :tabindex="i" class="item"> | ||||
| 			<FormSwitch v-model="item.ref" :disabled="item.disabled" class="form-switch">{{ item.text }}</FormSwitch> | ||||
| 		</span> | ||||
| 		<button v-else :tabindex="i" class="_button item" :class="{ danger: item.danger, active: item.active }" :disabled="item.active" @click="clicked(item.action, $event)"> | ||||
| 			<i v-if="item.icon" class="fa-fw" :class="item.icon"></i> | ||||
| 			<i v-if="item.icon" class="ph-fw" :class="item.icon"></i> | ||||
| 			<MkAvatar v-if="item.avatar" :user="item.avatar" class="avatar"/> | ||||
| 			<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="ph-circle"></i></span> | ||||
| 		</button> | ||||
| 	</template> | ||||
| 	<span v-if="items2.length === 0" class="none item"> | ||||
|  |  | |||
|  | @ -7,7 +7,7 @@ | |||
| 				<slot name="header"></slot> | ||||
| 			</span> | ||||
| 			<button v-if="!withOkButton" class="_button" @click="$emit('close')"><i class="fas fa-times"></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="ph-check"></i></button> | ||||
| 		</div> | ||||
| 		<div v-if="padding" class="body"> | ||||
| 			<div class="_section"> | ||||
|  |  | |||
|  | @ -6,15 +6,15 @@ | |||
| 		<div class="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 }"> | ||||
| 					<i v-if="item.icon" class="icon fa-fw" :class="item.icon"></i> | ||||
| 					<i v-if="item.icon" class="icon ph-fw" :class="item.icon"></i> | ||||
| 					<span class="text">{{ item.text }}</span> | ||||
| 				</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)"> | ||||
| 					<i v-if="item.icon" class="icon fa-fw" :class="item.icon"></i> | ||||
| 					<i v-if="item.icon" class="icon ph-fw" :class="item.icon"></i> | ||||
| 					<span class="text">{{ item.text }}</span> | ||||
| 				</button> | ||||
| 				<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 ph-fw" :class="item.icon"></i> | ||||
| 					<span class="text">{{ item.text }}</span> | ||||
| 				</MkA> | ||||
| 			</template> | ||||
|  |  | |||
|  | @ -2,7 +2,7 @@ | |||
| <MkModal ref="modal" :z-priority="'high'" :src="src" @click="modal.close()" @closed="emit('closed')"> | ||||
| 	<div class="gqyayizv _popup"> | ||||
| 		<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="ph-globe"></i></div> | ||||
| 			<div> | ||||
| 				<span>{{ $ts._visibility.public }}</span> | ||||
| 				<span>{{ $ts._visibility.publicDescription }}</span> | ||||
|  | @ -23,7 +23,7 @@ | |||
| 			</div> | ||||
| 		</button> | ||||
| 		<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="ph-envelope-simple"></i></div> | ||||
| 			<div> | ||||
| 				<span>{{ $ts._visibility.specified }}</span> | ||||
| 				<span>{{ $ts._visibility.specifiedDescription }}</span> | ||||
|  |  | |||
|  | @ -1,7 +1,7 @@ | |||
| <template> | ||||
| <MkModal ref="modal" :prefer-type="'dialog'" :z-priority="'high'" @click="success ? done() : () => {}" @closed="emit('closed')"> | ||||
| 	<div class="iuyakobc" :class="{ iconOnly: (text == null) || success }"> | ||||
| 		<i v-if="success" class="fas fa-check icon success"></i> | ||||
| 		<i v-if="success" class="ph-check icon success"></i> | ||||
| 		<i v-else class="fas fa-spinner fa-pulse icon waiting"></i> | ||||
| 		<div v-if="text && !success" class="text">{{ text }}<MkEllipsis/></div> | ||||
| 	</div> | ||||
|  |  | |||
|  | @ -6,7 +6,7 @@ | |||
| 				<template #label>{{ $ts.selectWidget }}</template> | ||||
| 				<option v-for="widget in widgetDefs" :key="widget" :value="widget">{{ $t(`_widgets.${widget}`) }}</option> | ||||
| 			</MkSelect> | ||||
| 			<MkButton inline primary class="mk-widget-add" @click="addWidget"><i class="fas fa-plus"></i> {{ $ts.add }}</MkButton> | ||||
| 			<MkButton inline primary class="mk-widget-add" @click="addWidget"><i class="ph-plus"></i> {{ $ts.add }}</MkButton> | ||||
| 			<MkButton inline @click="$emit('exit')">{{ $ts.close }}</MkButton> | ||||
| 		</header> | ||||
| 		<XDraggable | ||||
|  | @ -17,7 +17,7 @@ | |||
| 		> | ||||
| 			<template #item="{element}"> | ||||
| 				<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="ph-gear"></i></button> | ||||
| 					<button class="remove _button" @click.prevent.stop="removeWidget(element)"><i class="fas fa-times"></i></button> | ||||
| 					<component :is="`mkw-${element.name}`" :ref="el => widgetRefs[element.id] = el" class="handle" :widget="element" @updateProps="updateWidget(element.id, $event)"/> | ||||
| 				</div> | ||||
|  |  | |||
|  | @ -10,55 +10,55 @@ import { router } from './router'; | |||
| export const menuDef = reactive({ | ||||
| 	notifications: { | ||||
| 		title: 'notifications', | ||||
| 		icon: 'fas fa-bell', | ||||
| 		icon: 'ph-bell', | ||||
| 		show: computed(() => $i != null), | ||||
| 		indicated: computed(() => $i != null && $i.hasUnreadNotification), | ||||
| 		to: '/my/notifications', | ||||
| 	}, | ||||
| 	messaging: { | ||||
| 		title: 'messaging', | ||||
| 		icon: 'fas fa-comments', | ||||
| 		icon: 'ph-chats-circle', | ||||
| 		show: computed(() => $i != null), | ||||
| 		indicated: computed(() => $i != null && $i.hasUnreadMessagingMessage), | ||||
| 		to: '/my/messaging', | ||||
| 	}, | ||||
| 	drive: { | ||||
| 		title: 'drive', | ||||
| 		icon: 'fas fa-cloud', | ||||
| 		icon: 'ph-cloud', | ||||
| 		show: computed(() => $i != null), | ||||
| 		to: '/my/drive', | ||||
| 	}, | ||||
| 	followRequests: { | ||||
| 		title: 'followRequests', | ||||
| 		icon: 'fas fa-user-clock', | ||||
| 		icon: 'ph-user-plus', | ||||
| 		show: computed(() => $i != null && $i.isLocked), | ||||
| 		indicated: computed(() => $i != null && $i.hasPendingReceivedFollowRequest), | ||||
| 		to: '/my/follow-requests', | ||||
| 	}, | ||||
| 	featured: { | ||||
| 		title: 'featured', | ||||
| 		icon: 'fas fa-fire-alt', | ||||
| 		icon: 'ph-fire', | ||||
| 		to: '/featured', | ||||
| 	}, | ||||
| 	explore: { | ||||
| 		title: 'explore', | ||||
| 		icon: 'fas fa-hashtag', | ||||
| 		icon: 'ph-hash', | ||||
| 		to: '/explore', | ||||
| 	}, | ||||
| 	announcements: { | ||||
| 		title: 'announcements', | ||||
| 		icon: 'fas fa-broadcast-tower', | ||||
| 		icon: 'ph-megaphone', | ||||
| 		indicated: computed(() => $i != null && $i.hasUnreadAnnouncement), | ||||
| 		to: '/announcements', | ||||
| 	}, | ||||
| 	search: { | ||||
| 		title: 'search', | ||||
| 		icon: 'fas fa-search', | ||||
| 		icon: 'ph-magnifying-glass', | ||||
| 		action: () => search(), | ||||
| 	}, | ||||
| 	lists: { | ||||
| 		title: 'lists', | ||||
| 		icon: 'fas fa-list-ul', | ||||
| 		icon: 'ph-list-bullets', | ||||
| 		show: computed(() => $i != null), | ||||
| 		active: computed(() => router.currentRoute.value.path.startsWith('/timeline/list/') || router.currentRoute.value.path === '/my/lists' || router.currentRoute.value.path.startsWith('/my/lists/')), | ||||
| 		action: (ev) => { | ||||
|  | @ -74,7 +74,7 @@ export const menuDef = reactive({ | |||
| 					type: 'link', | ||||
| 					to: '/my/lists', | ||||
| 					text: i18n.ts.manageLists, | ||||
| 					icon: 'fas fa-cog', | ||||
| 					icon: 'ph-gear', | ||||
| 				}]; | ||||
| 				items.value = _items; | ||||
| 			}); | ||||
|  | @ -83,13 +83,13 @@ export const menuDef = reactive({ | |||
| 	}, | ||||
| 	groups: { | ||||
| 		title: 'groups', | ||||
| 		icon: 'fas fa-users', | ||||
| 		icon: 'ph-users-three', | ||||
| 		show: computed(() => $i != null), | ||||
| 		to: '/my/groups', | ||||
| 	}, | ||||
| 	antennas: { | ||||
| 		title: 'antennas', | ||||
| 		icon: 'fas fa-satellite', | ||||
| 		icon: 'ph-cell-signal-full', | ||||
| 		show: computed(() => $i != null), | ||||
| 		active: computed(() => router.currentRoute.value.path.startsWith('/timeline/antenna/') || router.currentRoute.value.path === '/my/antennas' || router.currentRoute.value.path.startsWith('/my/antennas/')), | ||||
| 		action: (ev) => { | ||||
|  | @ -105,7 +105,7 @@ export const menuDef = reactive({ | |||
| 					type: 'link', | ||||
| 					to: '/my/antennas', | ||||
| 					text: i18n.ts.manageAntennas, | ||||
| 					icon: 'fas fa-cog', | ||||
| 					icon: 'ph-gear', | ||||
| 				}]; | ||||
| 				items.value = _items; | ||||
| 			}); | ||||
|  | @ -114,63 +114,63 @@ export const menuDef = reactive({ | |||
| 	}, | ||||
| 	mentions: { | ||||
| 		title: 'mentions', | ||||
| 		icon: 'fas fa-at', | ||||
| 		icon: 'ph-at', | ||||
| 		show: computed(() => $i != null), | ||||
| 		indicated: computed(() => $i != null && $i.hasUnreadMentions), | ||||
| 		to: '/my/mentions', | ||||
| 	}, | ||||
| 	messages: { | ||||
| 		title: 'directNotes', | ||||
| 		icon: 'fas fa-envelope', | ||||
| 		icon: 'ph-envelope-simple', | ||||
| 		show: computed(() => $i != null), | ||||
| 		indicated: computed(() => $i != null && $i.hasUnreadSpecifiedNotes), | ||||
| 		to: '/my/messages', | ||||
| 	}, | ||||
| 	favorites: { | ||||
| 		title: 'favorites', | ||||
| 		icon: 'fas fa-star', | ||||
| 		icon: 'ph-star', | ||||
| 		show: computed(() => $i != null), | ||||
| 		to: '/my/favorites', | ||||
| 	}, | ||||
| 	pages: { | ||||
| 		title: 'pages', | ||||
| 		icon: 'fas fa-file-alt', | ||||
| 		icon: 'ph-file-text', | ||||
| 		to: '/pages', | ||||
| 	}, | ||||
| 	gallery: { | ||||
| 		title: 'gallery', | ||||
| 		icon: 'fas fa-icons', | ||||
| 		icon: 'ph-image', | ||||
| 		to: '/gallery', | ||||
| 	}, | ||||
| 	clips: { | ||||
| 		title: 'clip', | ||||
| 		icon: 'fas fa-paperclip', | ||||
| 		icon: 'ph-paperclip', | ||||
| 		show: computed(() => $i != null), | ||||
| 		to: '/my/clips', | ||||
| 	}, | ||||
| 	channels: { | ||||
| 		title: 'channel', | ||||
| 		icon: 'fas fa-satellite-dish', | ||||
| 		icon: 'ph-television', | ||||
| 		to: '/channels', | ||||
| 	}, | ||||
| 	federation: { | ||||
| 		title: 'federation', | ||||
| 		icon: 'fas fa-globe', | ||||
| 		icon: 'ph-globe', | ||||
| 		to: '/federation', | ||||
| 	}, | ||||
| 	emojis: { | ||||
| 		title: 'emojis', | ||||
| 		icon: 'fas fa-laugh', | ||||
| 		icon: 'ph-smiley', | ||||
| 		to: '/emojis', | ||||
| 	}, | ||||
| 	scratchpad: { | ||||
| 		title: 'scratchpad', | ||||
| 		icon: 'fas fa-terminal', | ||||
| 		icon: 'ph-terminal', | ||||
| 		to: '/scratchpad', | ||||
| 	}, | ||||
| 	ui: { | ||||
| 		title: 'switchUi', | ||||
| 		icon: 'fas fa-columns', | ||||
| 		icon: 'ph-layout', | ||||
| 		action: (ev) => { | ||||
| 			os.popupMenu([{ | ||||
| 				text: i18n.ts.default, | ||||
|  |  | |||
|  | @ -3,7 +3,7 @@ | |||
| <transition :name="$store.state.animation ? 'zoom' : ''" appear> | ||||
| 	<div v-show="loaded" class="mjndxjch"> | ||||
| 		<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="ph-warning"></i> {{ i18n.ts.pageLoadError }}</b></p> | ||||
| 		<p v-if="meta && (version === meta.version)">{{ i18n.ts.pageLoadErrorDescription }}</p> | ||||
| 		<p v-else-if="serverIsDead">{{ i18n.ts.serverIsDead }}</p> | ||||
| 		<template v-else> | ||||
|  | @ -55,7 +55,7 @@ function reload() { | |||
| defineExpose({ | ||||
| 	[symbols.PAGE_INFO]: { | ||||
| 		title: i18n.ts.error, | ||||
| 		icon: 'fas fa-exclamation-triangle', | ||||
| 		icon: 'ph-warning', | ||||
| 	}, | ||||
| }); | ||||
| </script> | ||||
|  |  | |||
|  | @ -96,7 +96,7 @@ const initStats = () => os.api('stats', { | |||
| defineExpose({ | ||||
| 	[symbols.PAGE_INFO]: computed(() => ({ | ||||
| 		title: i18n.ts.instanceInfo, | ||||
| 		icon: 'fas fa-info-circle', | ||||
| 		icon: 'ph-info', | ||||
| 		bg: 'var(--bg)', | ||||
| 		tabs: [{ | ||||
| 			active: tab === 'overview', | ||||
|  |  | |||
|  | @ -36,7 +36,7 @@ | |||
| 			</MkTextarea> | ||||
| 			<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 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="ph-trash"></i> {{ i18n.ts.remove }}</MkButton> | ||||
| 			</div> | ||||
| 		</div> | ||||
| 	</div> | ||||
|  | @ -107,7 +107,7 @@ defineExpose({ | |||
| 		bg: 'var(--bg)', | ||||
| 		actions: [{ | ||||
| 			asFullButton: true, | ||||
| 			icon: 'fas fa-plus', | ||||
| 			icon: 'ph-plus', | ||||
| 			text: i18n.ts.add, | ||||
| 			handler: add, | ||||
| 		}], | ||||
|  |  | |||
|  | @ -14,7 +14,7 @@ | |||
| 			<p v-if="announcement.reads">{{ i18n.t('nUsersRead', { n: announcement.reads }) }}</p> | ||||
| 			<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 @click="remove(announcement)"><i class="fas fa-trash-alt"></i> {{ i18n.ts.remove }}</MkButton> | ||||
| 				<MkButton class="button" inline @click="remove(announcement)"><i class="ph-trash"></i> {{ i18n.ts.remove }}</MkButton> | ||||
| 			</div> | ||||
| 		</div> | ||||
| 	</section> | ||||
|  | @ -87,11 +87,11 @@ function save(announcement) { | |||
| defineExpose({ | ||||
| 	[symbols.PAGE_INFO]: { | ||||
| 		title: i18n.ts.announcements, | ||||
| 		icon: 'fas fa-broadcast-tower', | ||||
| 		icon: 'ph-megaphone', | ||||
| 		bg: 'var(--bg)', | ||||
| 		actions: [{ | ||||
| 			asFullButton: true, | ||||
| 			icon: 'fas fa-plus', | ||||
| 			icon: 'ph-plus', | ||||
| 			text: i18n.ts.add, | ||||
| 			handler: add, | ||||
| 		}], | ||||
|  |  | |||
|  | @ -105,7 +105,7 @@ function save() { | |||
| defineExpose({ | ||||
| 	[symbols.PAGE_INFO]: { | ||||
| 		title: i18n.ts.emailServer, | ||||
| 		icon: 'fas fa-envelope', | ||||
| 		icon: 'ph-envelope-simple', | ||||
| 		bg: 'var(--bg)', | ||||
| 		actions: [{ | ||||
| 			asFullButton: true, | ||||
|  | @ -113,7 +113,7 @@ defineExpose({ | |||
| 			handler: testEmail, | ||||
| 		}, { | ||||
| 			asFullButton: true, | ||||
| 			icon: 'fas fa-check', | ||||
| 			icon: 'ph-check', | ||||
| 			text: i18n.ts.save, | ||||
| 			handler: save, | ||||
| 		}], | ||||
|  |  | |||
|  | @ -21,7 +21,7 @@ | |||
| 				<template #label>{{ $ts.tags }}</template> | ||||
| 				<template #caption>{{ $ts.setMultipleBySeparatingWithSpace }}</template> | ||||
| 			</MkInput> | ||||
| 			<MkButton danger @click="del()"><i class="fas fa-trash-alt"></i> {{ $ts.delete }}</MkButton> | ||||
| 			<MkButton danger @click="del()"><i class="ph-trash"></i> {{ $ts.delete }}</MkButton> | ||||
| 		</div> | ||||
| 	</div> | ||||
| </XModalWindow> | ||||
|  |  | |||
|  | @ -3,7 +3,7 @@ | |||
| 	<div class="ogwlenmc"> | ||||
| 		<div v-if="tab === 'local'" class="local"> | ||||
| 			<MkInput v-model="query" :debounce="true" type="search"> | ||||
| 				<template #prefix><i class="fas fa-search"></i></template> | ||||
| 				<template #prefix><i class="ph-magnifying-glass"></i></template> | ||||
| 				<template #label>{{ $ts.search }}</template> | ||||
| 			</MkInput> | ||||
| 			<MkSwitch v-model="selectMode" style="margin: 8px 0;"> | ||||
|  | @ -36,7 +36,7 @@ | |||
| 		<div v-else-if="tab === 'remote'" class="remote"> | ||||
| 			<FormSplit> | ||||
| 				<MkInput v-model="queryRemote" :debounce="true" type="search"> | ||||
| 					<template #prefix><i class="fas fa-search"></i></template> | ||||
| 					<template #prefix><i class="ph-magnifying-glass"></i></template> | ||||
| 					<template #label>{{ $ts.search }}</template> | ||||
| 				</MkInput> | ||||
| 				<MkInput v-model="host" :debounce="true"> | ||||
|  | @ -158,14 +158,14 @@ const remoteMenu = (emoji, ev: MouseEvent) => { | |||
| 		text: ':' + emoji.name + ':', | ||||
| 	}, { | ||||
| 		text: i18n.ts.import, | ||||
| 		icon: 'fas fa-plus', | ||||
| 		icon: 'ph-plus', | ||||
| 		action: () => { im(emoji); } | ||||
| 	}], ev.currentTarget ?? ev.target); | ||||
| }; | ||||
| 
 | ||||
| const menu = (ev: MouseEvent) => { | ||||
| 	os.popupMenu([{ | ||||
| 		icon: 'fas fa-download', | ||||
| 		icon: 'ph-download-simple', | ||||
| 		text: i18n.ts.export, | ||||
| 		action: async () => { | ||||
| 			os.api('export-custom-emojis', { | ||||
|  | @ -183,7 +183,7 @@ const menu = (ev: MouseEvent) => { | |||
| 			}); | ||||
| 		} | ||||
| 	}, { | ||||
| 		icon: 'fas fa-upload', | ||||
| 		icon: 'ph-upload-simple', | ||||
| 		text: i18n.ts.import, | ||||
| 		action: async () => { | ||||
| 			const file = await selectFile(ev.currentTarget ?? ev.target); | ||||
|  | @ -268,15 +268,15 @@ const delBulk = async () => { | |||
| defineExpose({ | ||||
| 	[symbols.PAGE_INFO]: computed(() => ({ | ||||
| 		title: i18n.ts.customEmojis, | ||||
| 		icon: 'fas fa-laugh', | ||||
| 		icon: 'ph-smiley', | ||||
| 		bg: 'var(--bg)', | ||||
| 		actions: [{ | ||||
| 			asFullButton: true, | ||||
| 			icon: 'fas fa-plus', | ||||
| 			icon: 'ph-plus', | ||||
| 			text: i18n.ts.addEmoji, | ||||
| 			handler: add, | ||||
| 		}, { | ||||
| 			icon: 'fas fa-ellipsis-h', | ||||
| 			icon: 'ph-dots-three-outline', | ||||
| 			handler: menu, | ||||
| 		}], | ||||
| 		tabs: [{ | ||||
|  |  | |||
|  | @ -22,7 +22,7 @@ | |||
| 		<div class="_section"> | ||||
| 			<div class="_content"> | ||||
| 				<MkButton full @click="showUser"><i class="fas fa-external-link-square-alt"></i> {{ $ts.user }}</MkButton> | ||||
| 				<MkButton full danger @click="del"><i class="fas fa-trash-alt"></i> {{ $ts.delete }}</MkButton> | ||||
| 				<MkButton full danger @click="del"><i class="ph-trash"></i> {{ $ts.delete }}</MkButton> | ||||
| 			</div> | ||||
| 		</div> | ||||
| 		<div v-if="info" class="_section"> | ||||
|  |  | |||
|  | @ -109,15 +109,15 @@ async function find() { | |||
| defineExpose({ | ||||
| 	[symbols.PAGE_INFO]: computed(() => ({ | ||||
| 		title: i18n.ts.files, | ||||
| 		icon: 'fas fa-cloud', | ||||
| 		icon: 'ph-cloud', | ||||
| 		bg: 'var(--bg)', | ||||
| 		actions: [{ | ||||
| 			text: i18n.ts.lookup, | ||||
| 			icon: 'fas fa-search', | ||||
| 			icon: 'ph-magnifying-glass', | ||||
| 			handler: find, | ||||
| 		}, { | ||||
| 			text: i18n.ts.clearCachedFiles, | ||||
| 			icon: 'fas fa-trash-alt', | ||||
| 			icon: 'ph-trash', | ||||
| 			handler: clear, | ||||
| 		}], | ||||
| 	})), | ||||
|  |  | |||
|  | @ -43,7 +43,7 @@ const nav = new MisskeyNavigator(); | |||
| 
 | ||||
| const indexInfo = { | ||||
| 	title: i18n.ts.controlPanel, | ||||
| 	icon: 'fas fa-cog', | ||||
| 	icon: 'ph-gear', | ||||
| 	bg: 'var(--bg)', | ||||
| 	hideHeader: true, | ||||
| }; | ||||
|  | @ -74,7 +74,7 @@ const menuDef = $computed(() => [{ | |||
| 	title: i18n.ts.quickAction, | ||||
| 	items: [{ | ||||
| 		type: 'button', | ||||
| 		icon: 'fas fa-search', | ||||
| 		icon: 'ph-magnifying-glass', | ||||
| 		text: i18n.ts.lookup, | ||||
| 		action: lookup, | ||||
| 	}, ...(instance.disableRegistration ? [{ | ||||
|  | @ -91,17 +91,17 @@ const menuDef = $computed(() => [{ | |||
| 		to: '/admin/overview', | ||||
| 		active: props.initialPage === 'overview', | ||||
| 	}, { | ||||
| 		icon: 'fas fa-users', | ||||
| 		icon: 'ph-users-three', | ||||
| 		text: i18n.ts.users, | ||||
| 		to: '/admin/users', | ||||
| 		active: props.initialPage === 'users', | ||||
| 	}, { | ||||
| 		icon: 'fas fa-laugh', | ||||
| 		icon: 'ph-smiley', | ||||
| 		text: i18n.ts.customEmojis, | ||||
| 		to: '/admin/emojis', | ||||
| 		active: props.initialPage === 'emojis', | ||||
| 	}, { | ||||
| 		icon: 'fas fa-globe', | ||||
| 		icon: 'ph-globe', | ||||
| 		text: i18n.ts.federation, | ||||
| 		to: '/admin/federation', | ||||
| 		active: props.initialPage === 'federation', | ||||
|  | @ -111,12 +111,12 @@ const menuDef = $computed(() => [{ | |||
| 		to: '/admin/queue', | ||||
| 		active: props.initialPage === 'queue', | ||||
| 	}, { | ||||
| 		icon: 'fas fa-cloud', | ||||
| 		icon: 'ph-cloud', | ||||
| 		text: i18n.ts.files, | ||||
| 		to: '/admin/files', | ||||
| 		active: props.initialPage === 'files', | ||||
| 	}, { | ||||
| 		icon: 'fas fa-broadcast-tower', | ||||
| 		icon: 'ph-megaphone', | ||||
| 		text: i18n.ts.announcements, | ||||
| 		to: '/admin/announcements', | ||||
| 		active: props.initialPage === 'announcements', | ||||
|  | @ -134,27 +134,27 @@ const menuDef = $computed(() => [{ | |||
| }, { | ||||
| 	title: i18n.ts.settings, | ||||
| 	items: [{ | ||||
| 		icon: 'fas fa-cog', | ||||
| 		icon: 'ph-gear', | ||||
| 		text: i18n.ts.general, | ||||
| 		to: '/admin/settings', | ||||
| 		active: props.initialPage === 'settings', | ||||
| 	}, { | ||||
| 		icon: 'fas fa-envelope', | ||||
| 		icon: 'ph-envelope-simple', | ||||
| 		text: i18n.ts.emailServer, | ||||
| 		to: '/admin/email-settings', | ||||
| 		active: props.initialPage === 'email-settings', | ||||
| 	}, { | ||||
| 		icon: 'fas fa-cloud', | ||||
| 		icon: 'ph-cloud', | ||||
| 		text: i18n.ts.objectStorage, | ||||
| 		to: '/admin/object-storage', | ||||
| 		active: props.initialPage === 'object-storage', | ||||
| 	}, { | ||||
| 		icon: 'fas fa-lock', | ||||
| 		icon: 'ph-lock', | ||||
| 		text: i18n.ts.security, | ||||
| 		to: '/admin/security', | ||||
| 		active: props.initialPage === 'security', | ||||
| 	}, { | ||||
| 		icon: 'fas fa-globe', | ||||
| 		icon: 'ph-globe', | ||||
| 		text: i18n.ts.relays, | ||||
| 		to: '/admin/relays', | ||||
| 		active: props.initialPage === 'relays', | ||||
|  | @ -174,7 +174,7 @@ const menuDef = $computed(() => [{ | |||
| 		to: '/admin/proxy-account', | ||||
| 		active: props.initialPage === 'proxy-account', | ||||
| 	}, { | ||||
| 		icon: 'fas fa-cogs', | ||||
| 		icon: 'ph-gears', | ||||
| 		text: i18n.ts.other, | ||||
| 		to: '/admin/other-settings', | ||||
| 		active: props.initialPage === 'other-settings', | ||||
|  | @ -282,19 +282,19 @@ const lookup = (ev) => { | |||
| 		} | ||||
| 	}, { | ||||
| 		text: i18n.ts.note, | ||||
| 		icon: 'fas fa-pencil-alt', | ||||
| 		icon: 'ph-pencil', | ||||
| 		action: () => { | ||||
| 			alert('TODO'); | ||||
| 		} | ||||
| 	}, { | ||||
| 		text: i18n.ts.file, | ||||
| 		icon: 'fas fa-cloud', | ||||
| 		icon: 'ph-cloud', | ||||
| 		action: () => { | ||||
| 			alert('TODO'); | ||||
| 		} | ||||
| 	}, { | ||||
| 		text: i18n.ts.instance, | ||||
| 		icon: 'fas fa-globe', | ||||
| 		icon: 'ph-globe', | ||||
| 		action: () => { | ||||
| 			alert('TODO'); | ||||
| 		} | ||||
|  |  | |||
|  | @ -132,11 +132,11 @@ function save() { | |||
| defineExpose({ | ||||
|   [symbols.PAGE_INFO]: { | ||||
| 		title: i18n.ts.objectStorage, | ||||
| 		icon: 'fas fa-cloud', | ||||
| 		icon: 'ph-cloud', | ||||
| 		bg: 'var(--bg)', | ||||
| 		actions: [{ | ||||
| 			asFullButton: true, | ||||
| 			icon: 'fas fa-check', | ||||
| 			icon: 'ph-check', | ||||
| 			text: i18n.ts.save, | ||||
| 			handler: save, | ||||
| 		}], | ||||
|  |  | |||
|  | @ -27,11 +27,11 @@ function save() { | |||
| defineExpose({ | ||||
|   [symbols.PAGE_INFO]: { | ||||
| 		title: i18n.ts.other, | ||||
| 		icon: 'fas fa-cogs', | ||||
| 		icon: 'ph-gears', | ||||
| 		bg: 'var(--bg)', | ||||
| 		actions: [{ | ||||
| 			asFullButton: true, | ||||
| 			icon: 'fas fa-check', | ||||
| 			icon: 'ph-check', | ||||
| 			text: i18n.ts.save, | ||||
| 			handler: save, | ||||
| 		}], | ||||
|  |  | |||
|  | @ -38,7 +38,7 @@ | |||
| 		<!--<XMetrics/>--> | ||||
| 
 | ||||
| 	<MkFolder style="margin: var(--margin)"> | ||||
| 		<template #header><i class="fas fa-info-circle"></i> {{ i18n.ts.info }}</template> | ||||
| 		<template #header><i class="ph-info"></i> {{ i18n.ts.info }}</template> | ||||
| 		<div class="cfcdecdf"> | ||||
| 			<div class="number _panel"> | ||||
| 				<div class="label">Misskey</div> | ||||
|  |  | |||
|  | @ -6,7 +6,7 @@ | |||
| 	<XQueue :connection="connection" domain="deliver"> | ||||
| 		<template #title>Out</template> | ||||
| 	</XQueue> | ||||
| 	<MkButton danger @click="clear()"><i class="fas fa-trash-alt"></i> {{ i18n.ts.clearQueue }}</MkButton> | ||||
| 	<MkButton danger @click="clear()"><i class="ph-trash"></i> {{ i18n.ts.clearQueue }}</MkButton> | ||||
| </MkSpacer> | ||||
| </template> | ||||
| 
 | ||||
|  |  | |||
|  | @ -3,12 +3,12 @@ | |||
| 	<div v-for="relay in relays" :key="relay.inbox" class="relaycxt _panel _block" style="padding: 16px;"> | ||||
| 		<div>{{ relay.inbox }}</div> | ||||
| 		<div class="status"> | ||||
| 			<i v-if="relay.status === 'accepted'" class="fas fa-check icon accepted"></i> | ||||
| 			<i v-if="relay.status === 'accepted'" class="ph-check icon accepted"></i> | ||||
| 			<i v-else-if="relay.status === 'rejected'" class="fas fa-ban icon rejected"></i> | ||||
| 			<i v-else class="fas fa-clock icon requesting"></i> | ||||
| 			<span>{{ $t(`_relayStatus.${relay.status}`) }}</span> | ||||
| 		</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="ph-trash"></i> {{ i18n.ts.remove }}</MkButton> | ||||
| 	</div> | ||||
| </MkSpacer> | ||||
| </template> | ||||
|  | @ -65,11 +65,11 @@ refresh(); | |||
| defineExpose({ | ||||
| 	[symbols.PAGE_INFO]: { | ||||
| 		title: i18n.ts.relays, | ||||
| 		icon: 'fas fa-globe', | ||||
| 		icon: 'ph-globe', | ||||
| 		bg: 'var(--bg)', | ||||
| 		actions: [{ | ||||
| 			asFullButton: true, | ||||
| 			icon: 'fas fa-plus', | ||||
| 			icon: 'ph-plus', | ||||
| 			text: i18n.ts.addRelay, | ||||
| 			handler: addRelay, | ||||
| 		}], | ||||
|  |  | |||
|  | @ -17,7 +17,7 @@ | |||
| 
 | ||||
| 				<div class="_formRoot"> | ||||
| 					<FormInput v-model="summalyProxy" class="_formBlock"> | ||||
| 						<template #prefix><i class="fas fa-link"></i></template> | ||||
| 						<template #prefix><i class="ph-link"></i></template> | ||||
| 						<template #label>Summaly Proxy URL</template> | ||||
| 					</FormInput> | ||||
| 
 | ||||
|  | @ -66,7 +66,7 @@ function save() { | |||
| defineExpose({ | ||||
| 	[symbols.PAGE_INFO]: { | ||||
| 		title: i18n.ts.security, | ||||
| 		icon: 'fas fa-lock', | ||||
| 		icon: 'ph-lock', | ||||
| 		bg: 'var(--bg)', | ||||
| 	} | ||||
| }); | ||||
|  |  | |||
|  | @ -11,7 +11,7 @@ | |||
| 			</FormTextarea> | ||||
| 
 | ||||
| 			<FormInput v-model="tosUrl" class="_formBlock"> | ||||
| 				<template #prefix><i class="fas fa-link"></i></template> | ||||
| 				<template #prefix><i class="ph-link"></i></template> | ||||
| 				<template #label>{{ i18n.ts.tosUrl }}</template> | ||||
| 			</FormInput> | ||||
| 
 | ||||
|  | @ -21,7 +21,7 @@ | |||
| 				</FormInput> | ||||
| 
 | ||||
| 				<FormInput v-model="maintainerEmail" type="email" class="_formBlock"> | ||||
| 					<template #prefix><i class="fas fa-envelope"></i></template> | ||||
| 					<template #prefix><i class="ph-envelope-simple"></i></template> | ||||
| 					<template #label>{{ i18n.ts.maintainerEmail }}</template> | ||||
| 				</FormInput> | ||||
| 			</FormSplit> | ||||
|  | @ -51,17 +51,17 @@ | |||
| 				<template #label>{{ i18n.ts.theme }}</template> | ||||
| 
 | ||||
| 				<FormInput v-model="iconUrl" class="_formBlock"> | ||||
| 					<template #prefix><i class="fas fa-link"></i></template> | ||||
| 					<template #prefix><i class="ph-link"></i></template> | ||||
| 					<template #label>{{ i18n.ts.iconUrl }}</template> | ||||
| 				</FormInput> | ||||
| 
 | ||||
| 				<FormInput v-model="bannerUrl" class="_formBlock"> | ||||
| 					<template #prefix><i class="fas fa-link"></i></template> | ||||
| 					<template #prefix><i class="ph-link"></i></template> | ||||
| 					<template #label>{{ i18n.ts.bannerUrl }}</template> | ||||
| 				</FormInput> | ||||
| 
 | ||||
| 				<FormInput v-model="backgroundImageUrl" class="_formBlock"> | ||||
| 					<template #prefix><i class="fas fa-link"></i></template> | ||||
| 					<template #prefix><i class="ph-link"></i></template> | ||||
| 					<template #label>{{ i18n.ts.backgroundImageUrl }}</template> | ||||
| 				</FormInput> | ||||
| 
 | ||||
|  | @ -243,11 +243,11 @@ function save() { | |||
| defineExpose({ | ||||
| 	[symbols.PAGE_INFO]: { | ||||
| 		title: i18n.ts.general, | ||||
| 		icon: 'fas fa-cog', | ||||
| 		icon: 'ph-gear', | ||||
| 		bg: 'var(--bg)', | ||||
| 		actions: [{ | ||||
| 			asFullButton: true, | ||||
| 			icon: 'fas fa-check', | ||||
| 			icon: 'ph-check', | ||||
| 			text: i18n.ts.save, | ||||
| 			handler: save, | ||||
| 		}], | ||||
|  |  | |||
|  | @ -125,20 +125,20 @@ function show(user) { | |||
| defineExpose({ | ||||
| 	[symbols.PAGE_INFO]: computed(() => ({ | ||||
| 		title: i18n.ts.users, | ||||
| 		icon: 'fas fa-users', | ||||
| 		icon: 'ph-users-three', | ||||
| 		bg: 'var(--bg)', | ||||
| 		actions: [{ | ||||
| 			icon: 'fas fa-search', | ||||
| 			icon: 'ph-magnifying-glass', | ||||
| 			text: i18n.ts.search, | ||||
| 			handler: searchUser | ||||
| 		}, { | ||||
| 			asFullButton: true, | ||||
| 			icon: 'fas fa-plus', | ||||
| 			icon: 'ph-plus', | ||||
| 			text: i18n.ts.addUser, | ||||
| 			handler: addUser | ||||
| 		}, { | ||||
| 			asFullButton: true, | ||||
| 			icon: 'fas fa-search', | ||||
| 			icon: 'ph-magnifying-glass', | ||||
| 			text: i18n.ts.lookup, | ||||
| 			handler: lookupUser | ||||
| 		}], | ||||
|  |  | |||
|  | @ -8,7 +8,7 @@ | |||
| 				<img v-if="announcement.imageUrl" :src="announcement.imageUrl"/> | ||||
| 			</div> | ||||
| 			<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="ph-check"></i> {{ $ts.gotIt }}</MkButton> | ||||
| 			</div> | ||||
| 		</section> | ||||
| 	</MkPagination> | ||||
|  | @ -32,7 +32,7 @@ export default defineComponent({ | |||
| 		return { | ||||
| 			[symbols.PAGE_INFO]: { | ||||
| 				title: this.$ts.announcements, | ||||
| 				icon: 'fas fa-broadcast-tower', | ||||
| 				icon: 'ph-megaphone', | ||||
| 				bg: 'var(--bg)', | ||||
| 			}, | ||||
| 			pagination: { | ||||
|  |  | |||
|  | @ -38,14 +38,14 @@ export default defineComponent({ | |||
| 			queue: 0, | ||||
| 			[symbols.PAGE_INFO]: computed(() => this.antenna ? { | ||||
| 				title: this.antenna.name, | ||||
| 				icon: 'fas fa-satellite', | ||||
| 				icon: 'ph-cell-signal-full', | ||||
| 				bg: 'var(--bg)', | ||||
| 				actions: [{ | ||||
| 					icon: 'fas fa-calendar-alt', | ||||
| 					text: this.$ts.jumpToSpecifiedDate, | ||||
| 					handler: this.timetravel | ||||
| 				}, { | ||||
| 					icon: 'fas fa-cog', | ||||
| 					icon: 'ph-gear', | ||||
| 					text: this.$ts.settings, | ||||
| 					handler: this.settings | ||||
| 				}], | ||||
|  |  | |||
|  | @ -78,7 +78,7 @@ function onEndpointChange() { | |||
| defineExpose({ | ||||
| 	[symbols.PAGE_INFO]: { | ||||
| 		title: 'API console', | ||||
| 		icon: 'fas fa-terminal' | ||||
| 		icon: 'ph-terminal' | ||||
| 	}, | ||||
| }); | ||||
| </script> | ||||
|  |  | |||
|  | @ -10,10 +10,10 @@ | |||
| 		</MkTextarea> | ||||
| 
 | ||||
| 		<div class="banner"> | ||||
| 			<MkButton v-if="bannerId == null" @click="setBannerImage"><i class="fas fa-plus"></i> {{ $ts._channel.setBanner }}</MkButton> | ||||
| 			<MkButton v-if="bannerId == null" @click="setBannerImage"><i class="ph-plus"></i> {{ $ts._channel.setBanner }}</MkButton> | ||||
| 			<div v-else-if="bannerUrl"> | ||||
| 				<img :src="bannerUrl" style="width: 100%;"/> | ||||
| 				<MkButton @click="removeBannerImage()"><i class="fas fa-trash-alt"></i> {{ $ts._channel.removeBanner }}</MkButton> | ||||
| 				<MkButton @click="removeBannerImage()"><i class="ph-trash"></i> {{ $ts._channel.removeBanner }}</MkButton> | ||||
| 			</div> | ||||
| 		</div> | ||||
| 		<div class="_formBlock"> | ||||
|  | @ -48,11 +48,11 @@ export default defineComponent({ | |||
| 		return { | ||||
| 			[symbols.PAGE_INFO]: computed(() => this.channelId ? { | ||||
| 				title: this.$ts._channel.edit, | ||||
| 				icon: 'fas fa-satellite-dish', | ||||
| 				icon: 'ph-television', | ||||
| 				bg: 'var(--bg)', | ||||
| 			} : { | ||||
| 				title: this.$ts._channel.create, | ||||
| 				icon: 'fas fa-satellite-dish', | ||||
| 				icon: 'ph-television', | ||||
| 				bg: 'var(--bg)', | ||||
| 			}), | ||||
| 			channel: null, | ||||
|  |  | |||
|  | @ -4,15 +4,15 @@ | |||
| 		<div class="wpgynlbz _panel _gap" :class="{ hide: !showBanner }"> | ||||
| 			<XChannelFollowButton :channel="channel" :full="true" class="subscribe"/> | ||||
| 			<button class="_button toggle" @click="() => showBanner = !showBanner"> | ||||
| 				<template v-if="showBanner"><i class="fas fa-angle-up"></i></template> | ||||
| 				<template v-else><i class="fas fa-angle-down"></i></template> | ||||
| 				<template v-if="showBanner"><i class="ph-caret-up"></i></template> | ||||
| 				<template v-else><i class="ph-caret-down"></i></template> | ||||
| 			</button> | ||||
| 			<div v-if="!showBanner" class="hideOverlay"> | ||||
| 			</div> | ||||
| 			<div :style="{ backgroundImage: channel.bannerUrl ? `url(${channel.bannerUrl})` : null }" class="banner"> | ||||
| 				<div class="status"> | ||||
| 					<div><i class="fas fa-users fa-fw"></i><I18n :src="$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="$ts._channel.notesCount" tag="span" style="margin-left: 4px;"><template #n><b>{{ channel.notesCount }}</b></template></I18n></div> | ||||
| 					<div><i class="ph-users-three ph-fw"></i><I18n :src="$ts._channel.usersCount" tag="span" style="margin-left: 4px;"><template #n><b>{{ channel.usersCount }}</b></template></I18n></div> | ||||
| 					<div><i class="ph-pencil ph-fw"></i><I18n :src="$ts._channel.notesCount" tag="span" style="margin-left: 4px;"><template #n><b>{{ channel.notesCount }}</b></template></I18n></div> | ||||
| 				</div> | ||||
| 				<div class="fade"></div> | ||||
| 			</div> | ||||
|  | @ -56,10 +56,10 @@ export default defineComponent({ | |||
| 		return { | ||||
| 			[symbols.PAGE_INFO]: computed(() => this.channel ? { | ||||
| 				title: this.channel.name, | ||||
| 				icon: 'fas fa-satellite-dish', | ||||
| 				icon: 'ph-television', | ||||
| 				bg: 'var(--bg)', | ||||
| 				actions: [...(this.$i && this.$i.id === this.channel.userId ? [{ | ||||
| 					icon: 'fas fa-cog', | ||||
| 					icon: 'ph-gear', | ||||
| 					text: this.$ts.edit, | ||||
| 					handler: this.edit, | ||||
| 				}] : [])], | ||||
|  |  | |||
|  | @ -11,7 +11,7 @@ | |||
| 		</MkPagination> | ||||
| 	</div> | ||||
| 	<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="ph-plus"></i></MkButton> | ||||
| 		<MkPagination v-slot="{items}" :pagination="ownedPagination"> | ||||
| 			<MkChannelPreview v-for="channel in items" :key="channel.id" class="_gap" :channel="channel"/> | ||||
| 		</MkPagination> | ||||
|  | @ -34,17 +34,17 @@ export default defineComponent({ | |||
| 		return { | ||||
| 			[symbols.PAGE_INFO]: computed(() => ({ | ||||
| 				title: this.$ts.channel, | ||||
| 				icon: 'fas fa-satellite-dish', | ||||
| 				icon: 'ph-television', | ||||
| 				bg: 'var(--bg)', | ||||
| 				actions: [{ | ||||
| 					icon: 'fas fa-plus', | ||||
| 					icon: 'ph-plus', | ||||
| 					text: this.$ts.create, | ||||
| 					handler: this.create, | ||||
| 				}], | ||||
| 				tabs: [{ | ||||
| 					active: this.tab === 'featured', | ||||
| 					title: this.$ts._channel.featured, | ||||
| 					icon: 'fas fa-fire-alt', | ||||
| 					icon: 'ph-fire', | ||||
| 					onClick: () => { this.tab = 'featured'; }, | ||||
| 				}, { | ||||
| 					active: this.tab === 'following', | ||||
|  |  | |||
|  | @ -41,10 +41,10 @@ export default defineComponent({ | |||
| 		return { | ||||
| 			[symbols.PAGE_INFO]: computed(() => this.clip ? { | ||||
| 				title: this.clip.name, | ||||
| 				icon: 'fas fa-paperclip', | ||||
| 				icon: 'ph-paperclip', | ||||
| 				bg: 'var(--bg)', | ||||
| 				actions: [{ | ||||
| 					icon: 'fas fa-ellipsis-h', | ||||
| 					icon: 'ph-dots-three-outline', | ||||
| 					handler: this.menu | ||||
| 				}], | ||||
| 			} : null), | ||||
|  | @ -83,7 +83,7 @@ export default defineComponent({ | |||
| 	methods: { | ||||
| 		menu(ev) { | ||||
| 			os.popupMenu([this.isOwned ? { | ||||
| 				icon: 'fas fa-pencil-alt', | ||||
| 				icon: 'ph-pencil', | ||||
| 				text: this.$ts.edit, | ||||
| 				action: async () => { | ||||
| 					const { canceled, result } = await os.form(this.clip.name, { | ||||
|  | @ -113,7 +113,7 @@ export default defineComponent({ | |||
| 					}); | ||||
| 				} | ||||
| 			} : undefined, this.isOwned ? { | ||||
| 				icon: 'fas fa-trash-alt', | ||||
| 				icon: 'ph-trash', | ||||
| 				text: this.$ts.delete, | ||||
| 				danger: true, | ||||
| 				action: async () => { | ||||
|  |  | |||
|  | @ -16,7 +16,7 @@ let folder = $ref(null); | |||
| defineExpose({ | ||||
| 	[symbols.PAGE_INFO]: computed(() => ({ | ||||
| 		title: folder ? folder.name : i18n.ts.drive, | ||||
| 		icon: 'fas fa-cloud', | ||||
| 		icon: 'ph-cloud', | ||||
| 		bg: 'var(--bg)', | ||||
| 		hideHeader: true, | ||||
| 	})), | ||||
|  |  | |||
|  | @ -2,7 +2,7 @@ | |||
| <div class="driuhtrh"> | ||||
| 	<div class="query"> | ||||
| 		<MkInput v-model="q" class="" :placeholder="$ts.search"> | ||||
| 			<template #prefix><i class="fas fa-search"></i></template> | ||||
| 			<template #prefix><i class="ph-magnifying-glass"></i></template> | ||||
| 		</MkInput> | ||||
| 
 | ||||
| 		<!-- たくさんあると邪魔 | ||||
|  |  | |||
|  | @ -15,7 +15,7 @@ const tab = ref('category'); | |||
| 
 | ||||
| function menu(ev) { | ||||
| 	os.popupMenu([{ | ||||
| 		icon: 'fas fa-download', | ||||
| 		icon: 'ph-download-simple', | ||||
| 		text: i18n.ts.export, | ||||
| 		action: async () => { | ||||
| 			os.api('export-custom-emojis', { | ||||
|  | @ -38,10 +38,10 @@ function menu(ev) { | |||
| defineExpose({ | ||||
| 	[symbols.PAGE_INFO]: { | ||||
| 		title: i18n.ts.customEmojis, | ||||
| 		icon: 'fas fa-laugh', | ||||
| 		icon: 'ph-smiley', | ||||
| 		bg: 'var(--bg)', | ||||
| 		actions: [{ | ||||
| 			icon: 'fas fa-ellipsis-h', | ||||
| 			icon: 'ph-dots-three-outline', | ||||
| 			handler: menu, | ||||
| 		}], | ||||
| 	}, | ||||
|  |  | |||
|  | @ -10,19 +10,19 @@ | |||
| 
 | ||||
| 				<template v-if="tag == null"> | ||||
| 					<MkFolder class="_gap" persist-key="explore-pinned-users"> | ||||
| 						<template #header><i class="fas fa-bookmark fa-fw" style="margin-right: 0.5em;"></i>{{ $ts.pinnedUsers }}</template> | ||||
| 						<template #header><i class="fas fa-bookmark ph-fw" style="margin-right: 0.5em;"></i>{{ $ts.pinnedUsers }}</template> | ||||
| 						<XUserList :pagination="pinnedUsers"/> | ||||
| 					</MkFolder> | ||||
| 					<MkFolder class="_gap" persist-key="explore-popular-users"> | ||||
| 						<template #header><i class="fas fa-chart-line fa-fw" style="margin-right: 0.5em;"></i>{{ $ts.popularUsers }}</template> | ||||
| 						<template #header><i class="fas fa-chart-line ph-fw" style="margin-right: 0.5em;"></i>{{ $ts.popularUsers }}</template> | ||||
| 						<XUserList :pagination="popularUsers"/> | ||||
| 					</MkFolder> | ||||
| 					<MkFolder class="_gap" persist-key="explore-recently-updated-users"> | ||||
| 						<template #header><i class="fas fa-comment-alt fa-fw" style="margin-right: 0.5em;"></i>{{ $ts.recentlyUpdatedUsers }}</template> | ||||
| 						<template #header><i class="fas fa-comment-alt ph-fw" style="margin-right: 0.5em;"></i>{{ $ts.recentlyUpdatedUsers }}</template> | ||||
| 						<XUserList :pagination="recentlyUpdatedUsers"/> | ||||
| 					</MkFolder> | ||||
| 					<MkFolder class="_gap" persist-key="explore-recently-registered-users"> | ||||
| 						<template #header><i class="fas fa-plus fa-fw" style="margin-right: 0.5em;"></i>{{ $ts.recentlyRegisteredUsers }}</template> | ||||
| 						<template #header><i class="ph-plus ph-fw" style="margin-right: 0.5em;"></i>{{ $ts.recentlyRegisteredUsers }}</template> | ||||
| 						<XUserList :pagination="recentlyRegisteredUsers"/> | ||||
| 					</MkFolder> | ||||
| 				</template> | ||||
|  | @ -33,7 +33,7 @@ | |||
| 				</div> | ||||
| 
 | ||||
| 				<MkFolder ref="tags" :foldable="true" :expanded="false" class="_gap"> | ||||
| 					<template #header><i class="fas fa-hashtag fa-fw" style="margin-right: 0.5em;"></i>{{ $ts.popularTags }}</template> | ||||
| 					<template #header><i class="ph-hash ph-fw" style="margin-right: 0.5em;"></i>{{ $ts.popularTags }}</template> | ||||
| 
 | ||||
| 					<div class="vxjfqztj"> | ||||
| 						<MkA v-for="tag in tagsLocal" :key="'local:' + tag.tag" :to="`/explore/tags/${tag.tag}`" class="local">{{ tag.tag }}</MkA> | ||||
|  | @ -42,21 +42,21 @@ | |||
| 				</MkFolder> | ||||
| 
 | ||||
| 				<MkFolder v-if="tag != null" :key="`${tag}`" class="_gap"> | ||||
| 					<template #header><i class="fas fa-hashtag fa-fw" style="margin-right: 0.5em;"></i>{{ tag }}</template> | ||||
| 					<template #header><i class="ph-hash ph-fw" style="margin-right: 0.5em;"></i>{{ tag }}</template> | ||||
| 					<XUserList :pagination="tagUsers"/> | ||||
| 				</MkFolder> | ||||
| 
 | ||||
| 				<template v-if="tag == null"> | ||||
| 					<MkFolder class="_gap"> | ||||
| 						<template #header><i class="fas fa-chart-line fa-fw" style="margin-right: 0.5em;"></i>{{ $ts.popularUsers }}</template> | ||||
| 						<template #header><i class="fas fa-chart-line ph-fw" style="margin-right: 0.5em;"></i>{{ $ts.popularUsers }}</template> | ||||
| 						<XUserList :pagination="popularUsersF"/> | ||||
| 					</MkFolder> | ||||
| 					<MkFolder class="_gap"> | ||||
| 						<template #header><i class="fas fa-comment-alt fa-fw" style="margin-right: 0.5em;"></i>{{ $ts.recentlyUpdatedUsers }}</template> | ||||
| 						<template #header><i class="fas fa-comment-alt ph-fw" style="margin-right: 0.5em;"></i>{{ $ts.recentlyUpdatedUsers }}</template> | ||||
| 						<XUserList :pagination="recentlyUpdatedUsersF"/> | ||||
| 					</MkFolder> | ||||
| 					<MkFolder class="_gap"> | ||||
| 						<template #header><i class="fas fa-rocket fa-fw" style="margin-right: 0.5em;"></i>{{ $ts.recentlyDiscoveredUsers }}</template> | ||||
| 						<template #header><i class="fas fa-rocket ph-fw" style="margin-right: 0.5em;"></i>{{ $ts.recentlyDiscoveredUsers }}</template> | ||||
| 						<XUserList :pagination="recentlyRegisteredUsersF"/> | ||||
| 					</MkFolder> | ||||
| 				</template> | ||||
|  | @ -64,7 +64,7 @@ | |||
| 			<div v-else-if="tab === 'search'"> | ||||
| 				<div class="_isolated"> | ||||
| 					<MkInput v-model="searchQuery" :debounce="true" type="search"> | ||||
| 						<template #prefix><i class="fas fa-search"></i></template> | ||||
| 						<template #prefix><i class="ph-magnifying-glass"></i></template> | ||||
| 						<template #label>{{ $ts.searchUser }}</template> | ||||
| 					</MkInput> | ||||
| 					<MkRadios v-model="searchOrigin"> | ||||
|  | @ -110,7 +110,7 @@ export default defineComponent({ | |||
| 		return { | ||||
| 			[symbols.PAGE_INFO]: computed(() => ({ | ||||
| 				title: this.$ts.explore, | ||||
| 				icon: 'fas fa-hashtag', | ||||
| 				icon: 'ph-hash', | ||||
| 				bg: 'var(--bg)', | ||||
| 				tabs: [{ | ||||
| 					active: this.tab === 'local', | ||||
|  |  | |||
|  | @ -35,7 +35,7 @@ const pagingComponent = ref<InstanceType<typeof MkPagination>>(); | |||
| defineExpose({ | ||||
| 	[symbols.PAGE_INFO]: { | ||||
| 		title: i18n.ts.favorites, | ||||
| 		icon: 'fas fa-star', | ||||
| 		icon: 'ph-star', | ||||
| 		bg: 'var(--bg)', | ||||
| 	}, | ||||
| }); | ||||
|  |  | |||
|  | @ -18,7 +18,7 @@ const pagination = { | |||
| defineExpose({ | ||||
| 	[symbols.PAGE_INFO]: { | ||||
| 		title: i18n.ts.featured, | ||||
| 		icon: 'fas fa-fire-alt', | ||||
| 		icon: 'ph-fire', | ||||
| 		bg: 'var(--bg)', | ||||
| 	}, | ||||
| }); | ||||
|  |  | |||
|  | @ -3,7 +3,7 @@ | |||
| 	<div class="taeiyria"> | ||||
| 		<div class="query"> | ||||
| 			<MkInput v-model="host" :debounce="true" class=""> | ||||
| 				<template #prefix><i class="fas fa-search"></i></template> | ||||
| 				<template #prefix><i class="ph-magnifying-glass"></i></template> | ||||
| 				<template #label>{{ $ts.host }}</template> | ||||
| 			</MkInput> | ||||
| 			<FormSplit style="margin-top: var(--margin);"> | ||||
|  | @ -132,7 +132,7 @@ function getStatus(instance) { | |||
| defineExpose({ | ||||
| 	[symbols.PAGE_INFO]: { | ||||
| 		title: i18n.ts.federation, | ||||
| 		icon: 'fas fa-globe', | ||||
| 		icon: 'ph-globe', | ||||
| 		bg: 'var(--bg)', | ||||
| 	}, | ||||
| }); | ||||
|  |  | |||
|  | @ -20,7 +20,7 @@ | |||
| 							<Mfm :text="req.follower.description" :is-note="false" :author="req.follower" :i="$i" :custom-emojis="req.follower.emojis" :plain="true" :nowrap="true"/> | ||||
| 						</div> | ||||
| 						<div class="actions"> | ||||
| 							<button class="_button" @click="accept(req.follower)"><i class="fas fa-check"></i></button> | ||||
| 							<button class="_button" @click="accept(req.follower)"><i class="ph-check"></i></button> | ||||
| 							<button class="_button" @click="reject(req.follower)"><i class="fas fa-times"></i></button> | ||||
| 						</div> | ||||
| 					</div> | ||||
|  | @ -61,7 +61,7 @@ function reject(user) { | |||
| defineExpose({ | ||||
| 	[symbols.PAGE_INFO]: computed(() => ({ | ||||
| 		title: i18n.ts.followRequests, | ||||
| 		icon: 'fas fa-user-clock', | ||||
| 		icon: 'ph-user-plus', | ||||
| 		bg: 'var(--bg)', | ||||
| 	})), | ||||
| }); | ||||
|  |  | |||
|  | @ -14,7 +14,7 @@ | |||
| 				<div class="name">{{ file.name }}</div> | ||||
| 				<button v-tooltip="$ts.remove" class="remove _button" @click="remove(file)"><i class="fas fa-times"></i></button> | ||||
| 			</div> | ||||
| 			<FormButton primary @click="selectFile"><i class="fas fa-plus"></i> {{ $ts.attachFile }}</FormButton> | ||||
| 			<FormButton primary @click="selectFile"><i class="ph-plus"></i> {{ $ts.attachFile }}</FormButton> | ||||
| 		</FormGroup> | ||||
| 
 | ||||
| 		<FormSwitch v-model="isSensitive">{{ $ts.markAsSensitive }}</FormSwitch> | ||||
|  | @ -22,7 +22,7 @@ | |||
| 		<FormButton v-if="postId" primary @click="save"><i class="fas fa-save"></i> {{ $ts.save }}</FormButton> | ||||
| 		<FormButton v-else primary @click="save"><i class="fas fa-save"></i> {{ $ts.publish }}</FormButton> | ||||
| 
 | ||||
| 		<FormButton v-if="postId" danger @click="del"><i class="fas fa-trash-alt"></i> {{ $ts.delete }}</FormButton> | ||||
| 		<FormButton v-if="postId" danger @click="del"><i class="ph-trash"></i> {{ $ts.delete }}</FormButton> | ||||
| 	</FormSuspense> | ||||
| </div> | ||||
| </template> | ||||
|  | @ -61,10 +61,10 @@ export default defineComponent({ | |||
| 		return { | ||||
| 			[symbols.PAGE_INFO]: computed(() => this.postId ? { | ||||
| 				title: this.$ts.edit, | ||||
| 				icon: 'fas fa-pencil-alt' | ||||
| 				icon: 'ph-pencil' | ||||
| 			} : { | ||||
| 				title: this.$ts.postToGallery, | ||||
| 				icon: 'fas fa-pencil-alt' | ||||
| 				icon: 'ph-pencil' | ||||
| 			}), | ||||
| 			init: null, | ||||
| 			files: [], | ||||
|  |  | |||
|  | @ -1,7 +1,7 @@ | |||
| <template> | ||||
| <div class="xprsixdl _root"> | ||||
| 	<MkTab v-if="$i" v-model="tab"> | ||||
| 		<option value="explore"><i class="fas fa-icons"></i> {{ $ts.gallery }}</option> | ||||
| 		<option value="explore"><i class="ph-image"></i> {{ $ts.gallery }}</option> | ||||
| 		<option value="liked"><i class="fas fa-heart"></i> {{ $ts._gallery.liked }}</option> | ||||
| 		<option value="my"><i class="fas fa-edit"></i> {{ $ts._gallery.my }}</option> | ||||
| 	</MkTab> | ||||
|  | @ -16,7 +16,7 @@ | |||
| 			</MkPagination> | ||||
| 		</MkFolder> | ||||
| 		<MkFolder class="_gap"> | ||||
| 			<template #header><i class="fas fa-fire-alt"></i>{{ $ts.popularPosts }}</template> | ||||
| 			<template #header><i class="ph-fire"></i>{{ $ts.popularPosts }}</template> | ||||
| 			<MkPagination v-slot="{items}" :pagination="popularPostsPagination" :disable-auto-load="true"> | ||||
| 				<div class="vfpdbgtk"> | ||||
| 					<MkGalleryPostPreview v-for="post in items" :key="post.id" :post="post" class="post"/> | ||||
|  | @ -32,7 +32,7 @@ | |||
| 		</MkPagination> | ||||
| 	</div> | ||||
| 	<div v-else-if="tab === 'my'"> | ||||
| 		<MkA to="/gallery/new" class="_link" style="margin: 16px;"><i class="fas fa-plus"></i> {{ $ts.postToGallery }}</MkA> | ||||
| 		<MkA to="/gallery/new" class="_link" style="margin: 16px;"><i class="ph-plus"></i> {{ $ts.postToGallery }}</MkA> | ||||
| 		<MkPagination v-slot="{items}" :pagination="myPostsPagination"> | ||||
| 			<div class="vfpdbgtk"> | ||||
| 				<MkGalleryPostPreview v-for="post in items" :key="post.id" :post="post" class="post"/> | ||||
|  | @ -77,7 +77,7 @@ export default defineComponent({ | |||
| 		return { | ||||
| 			[symbols.PAGE_INFO]: { | ||||
| 				title: this.$ts.gallery, | ||||
| 				icon: 'fas fa-icons' | ||||
| 				icon: 'ph-image' | ||||
| 			}, | ||||
| 			tab: 'explore', | ||||
| 			recentPostsPagination: { | ||||
|  |  | |||
|  | @ -19,9 +19,9 @@ | |||
| 						<MkButton v-else v-tooltip="$ts._gallery.like" class="button" @click="like()"><i class="far fa-heart"></i><span v-if="post.likedCount > 0" class="count">{{ post.likedCount }}</span></MkButton> | ||||
| 					</div> | ||||
| 					<div class="other"> | ||||
| 						<button v-if="$i && $i.id === post.user.id" v-tooltip="$ts.edit" v-click-anime class="_button" @click="edit"><i class="fas fa-pencil-alt fa-fw"></i></button> | ||||
| 						<button v-tooltip="$ts.shareWithNote" v-click-anime class="_button" @click="shareWithNote"><i class="fas fa-retweet fa-fw"></i></button> | ||||
| 						<button v-tooltip="$ts.share" v-click-anime class="_button" @click="share"><i class="fas fa-share-alt fa-fw"></i></button> | ||||
| 						<button v-if="$i && $i.id === post.user.id" v-tooltip="$ts.edit" v-click-anime class="_button" @click="edit"><i class="ph-pencil ph-fw"></i></button> | ||||
| 						<button v-tooltip="$ts.shareWithNote" v-click-anime class="_button" @click="shareWithNote"><i class="fas fa-retweet ph-fw"></i></button> | ||||
| 						<button v-tooltip="$ts.share" v-click-anime class="_button" @click="share"><i class="fas fa-share-alt ph-fw"></i></button> | ||||
| 					</div> | ||||
| 				</div> | ||||
| 				<div class="user"> | ||||
|  | @ -87,7 +87,7 @@ export default defineComponent({ | |||
| 					text: this.post.description, | ||||
| 				}, | ||||
| 				actions: [{ | ||||
| 					icon: 'fas fa-pencil-alt', | ||||
| 					icon: 'ph-pencil', | ||||
| 					text: this.$ts.edit, | ||||
| 					handler: this.edit | ||||
| 				}] | ||||
|  |  | |||
|  | @ -171,7 +171,7 @@ fetch(); | |||
| defineExpose({ | ||||
| 	[symbols.PAGE_INFO]: { | ||||
| 		title: props.host, | ||||
| 		icon: 'fas fa-info-circle', | ||||
| 		icon: 'ph-info', | ||||
| 		bg: 'var(--bg)', | ||||
| 		actions: [{ | ||||
| 			text: `https://${props.host}`, | ||||
|  |  | |||
|  | @ -17,7 +17,7 @@ const pagination = { | |||
| defineExpose({ | ||||
| 	[symbols.PAGE_INFO]: { | ||||
| 		title: i18n.ts.mentions, | ||||
| 		icon: 'fas fa-at', | ||||
| 		icon: 'ph-at', | ||||
| 		bg: 'var(--bg)', | ||||
| 	}, | ||||
| }); | ||||
|  |  | |||
|  | @ -20,7 +20,7 @@ const pagination = { | |||
| defineExpose({ | ||||
| 	[symbols.PAGE_INFO]: { | ||||
| 		title: i18n.ts.directNotes, | ||||
| 		icon: 'fas fa-envelope', | ||||
| 		icon: 'ph-envelope-simple', | ||||
| 		bg: 'var(--bg)', | ||||
| 	}, | ||||
| }); | ||||
|  |  | |||
|  | @ -1,7 +1,7 @@ | |||
| <template> | ||||
| <MkSpacer :content-max="800"> | ||||
| 	<div v-size="{ max: [400] }" class="yweeujhr"> | ||||
| 		<MkButton primary class="start" @click="start"><i class="fas fa-plus"></i> {{ $ts.startMessaging }}</MkButton> | ||||
| 		<MkButton primary class="start" @click="start"><i class="ph-plus"></i> {{ $ts.startMessaging }}</MkButton> | ||||
| 
 | ||||
| 		<div v-if="messages.length > 0" class="history"> | ||||
| 			<MkA v-for="(message, i) in messages" | ||||
|  | @ -56,7 +56,7 @@ export default defineComponent({ | |||
| 		return { | ||||
| 			[symbols.PAGE_INFO]: { | ||||
| 				title: this.$ts.messaging, | ||||
| 				icon: 'fas fa-comments', | ||||
| 				icon: 'ph-chats-circle', | ||||
| 				bg: 'var(--bg)', | ||||
| 			}, | ||||
| 			fetching: true, | ||||
|  | @ -126,7 +126,7 @@ export default defineComponent({ | |||
| 				action: () => { this.startUser(); } | ||||
| 			}, { | ||||
| 				text: this.$ts.messagingWithGroup, | ||||
| 				icon: 'fas fa-users', | ||||
| 				icon: 'ph-users-three', | ||||
| 				action: () => { this.startGroup(); } | ||||
| 			}], ev.currentTarget ?? ev.target); | ||||
| 		}, | ||||
|  |  | |||
|  | @ -13,10 +13,10 @@ | |||
| 	></textarea> | ||||
| 	<div v-if="file" class="file" @click="file = null">{{ file.name }}</div> | ||||
| 	<button class="send _button" :disabled="!canSend || sending" :title="$ts.send" @click="send"> | ||||
| 		<template v-if="!sending"><i class="fas fa-paper-plane"></i></template><template v-if="sending"><i class="fas fa-spinner fa-pulse fa-fw"></i></template> | ||||
| 		<template v-if="!sending"><i class="fas fa-paper-plane"></i></template><template v-if="sending"><i class="fas fa-spinner fa-pulse ph-fw"></i></template> | ||||
| 	</button> | ||||
| 	<button class="_button" @click="chooseFile"><i class="fas fa-photo-video"></i></button> | ||||
| 	<button class="_button" @click="insertEmoji"><i class="fas fa-laugh-squint"></i></button> | ||||
| 	<button class="_button" @click="insertEmoji"><i class="ph-smiley-squint"></i></button> | ||||
| 	<input ref="file" type="file" @change="onChangeFile"/> | ||||
| </div> | ||||
| </template> | ||||
|  |  | |||
|  | @ -29,7 +29,7 @@ | |||
| 				<span v-if="isMe && message.isRead" class="read">{{ $ts.messageRead }}</span> | ||||
| 			</template> | ||||
| 			<MkTime :time="message.createdAt"/> | ||||
| 			<template v-if="message.is_edited"><i class="fas fa-pencil-alt"></i></template> | ||||
| 			<template v-if="message.is_edited"><i class="ph-pencil"></i></template> | ||||
| 		</footer> | ||||
| 	</div> | ||||
| </div> | ||||
|  |  | |||
|  | @ -6,10 +6,10 @@ | |||
| 	<div class="_content mk-messaging-room"> | ||||
| 		<div class="body"> | ||||
| 			<MkLoading v-if="fetching"/> | ||||
| 			<p v-if="!fetching && messages.length == 0" class="empty"><i class="fas fa-info-circle"></i>{{ $ts.noMessagesYet }}</p> | ||||
| 			<p v-if="!fetching && messages.length == 0" class="empty"><i class="ph-info"></i>{{ $ts.noMessagesYet }}</p> | ||||
| 			<p v-if="!fetching && messages.length > 0 && !existMoreMessages" class="no-history"><i class="fas fa-flag"></i>{{ $ts.noMoreHistory }}</p> | ||||
| 			<button v-show="existMoreMessages" ref="loadMore" class="more _button" :class="{ fetching: fetchingMoreMessages }" :disabled="fetchingMoreMessages" @click="fetchMoreMessages"> | ||||
| 				<template v-if="fetchingMoreMessages"><i class="fas fa-spinner fa-pulse fa-fw"></i></template>{{ fetchingMoreMessages ? $ts.loading : $ts.loadMore }} | ||||
| 				<template v-if="fetchingMoreMessages"><i class="fas fa-spinner fa-pulse ph-fw"></i></template>{{ fetchingMoreMessages ? $ts.loading : $ts.loadMore }} | ||||
| 			</button> | ||||
| 			<XList v-if="messages.length > 0" v-slot="{ item: message }" class="messages" :items="messages" direction="up" reversed> | ||||
| 				<XMessage :key="message.id" :message="message" :is-group="group != null"/> | ||||
|  | @ -74,14 +74,14 @@ const Component = defineComponent({ | |||
| 				userName: this.user, | ||||
| 				avatar: this.user, | ||||
| 				action: { | ||||
| 					icon: 'fas fa-ellipsis-h', | ||||
| 					icon: 'ph-dots-three-outline', | ||||
| 					handler: this.menu, | ||||
| 				}, | ||||
| 			} : { | ||||
| 				title: this.group.name, | ||||
| 				icon: 'fas fa-users', | ||||
| 				icon: 'ph-users-three', | ||||
| 				action: { | ||||
| 					icon: 'fas fa-ellipsis-h', | ||||
| 					icon: 'ph-dots-three-outline', | ||||
| 					handler: this.menu, | ||||
| 				}, | ||||
| 			} : null), | ||||
|  | @ -323,7 +323,7 @@ const Component = defineComponent({ | |||
| 
 | ||||
| 			os.popupMenu([this.inWindow ? undefined : { | ||||
| 				text: this.$ts.openInWindow, | ||||
| 				icon: 'fas fa-window-maximize', | ||||
| 				icon: 'ph-frame-corners', | ||||
| 				action: () => { | ||||
| 					os.pageWindow(path); | ||||
| 					this.$router.back(); | ||||
|  |  | |||
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