Compare commits

...

4 Commits

Author SHA1 Message Date
syuilo
963a01003c wip 2022-06-12 19:41:59 +09:00
syuilo
63e13110c6 wip 2022-06-12 15:04:55 +09:00
syuilo
ad3996aca3 Merge branch 'develop' into tabler-icons 2022-06-12 14:26:15 +09:00
syuilo
89f2781791 wip 2022-06-11 18:39:50 +09:00
206 changed files with 717 additions and 710 deletions

View File

@ -34,7 +34,7 @@ html
link(rel='prefetch' href='https://xn--931a.moe/assets/info.jpg') link(rel='prefetch' href='https://xn--931a.moe/assets/info.jpg')
link(rel='prefetch' href='https://xn--931a.moe/assets/not-found.jpg') link(rel='prefetch' href='https://xn--931a.moe/assets/not-found.jpg')
link(rel='prefetch' href='https://xn--931a.moe/assets/error.jpg') link(rel='prefetch' href='https://xn--931a.moe/assets/error.jpg')
link(rel='stylesheet' href='/assets/fontawesome/css/all.css') link(rel='stylesheet' href='https://unpkg.com/@tabler/icons@1.68.0/iconfont/tabler-icons.min.css')
link(rel='modulepreload' href=`/assets/${clientEntry.file}`) link(rel='modulepreload' href=`/assets/${clientEntry.file}`)
each href in clientEntry.css each href in clientEntry.css

View File

@ -201,7 +201,7 @@ export async function openAccountMenu(opts: {
to: `/@${ $i.username }`, to: `/@${ $i.username }`,
avatar: $i, avatar: $i,
}, null, ...(opts.includeCurrentAccount ? [createItem($i)] : []), ...accountItemPromises, { }, null, ...(opts.includeCurrentAccount ? [createItem($i)] : []), ...accountItemPromises, {
icon: 'fas fa-plus', icon: 'ti ti-plus',
text: i18n.ts.addAccount, text: i18n.ts.addAccount,
action: () => { action: () => {
popupMenu([{ popupMenu([{
@ -214,7 +214,7 @@ export async function openAccountMenu(opts: {
}, },
}, { }, {
type: 'link', type: 'link',
icon: 'fas fa-users', icon: 'ti ti-users',
text: i18n.ts.manageAccounts, text: i18n.ts.manageAccounts,
to: `/settings/accounts`, to: `/settings/accounts`,
}]], ev.currentTarget ?? ev.target, { }]], ev.currentTarget ?? ev.target, {

View File

@ -1,7 +1,7 @@
<template> <template>
<XWindow ref="window" :initial-width="400" :initial-height="500" :can-resize="true" @closed="emit('closed')"> <XWindow ref="window" :initial-width="400" :initial-height="500" :can-resize="true" @closed="emit('closed')">
<template #header> <template #header>
<i class="fas fa-exclamation-circle" style="margin-right: 0.5em;"></i> <i class="ti ti-alert-circle" style="margin-right: 0.5em;"></i>
<I18n :src="i18n.ts.reportAbuseOf" tag="span"> <I18n :src="i18n.ts.reportAbuseOf" tag="span">
<template #name> <template #name>
<b><MkAcct :user="user"/></b> <b><MkAcct :user="user"/></b>

View File

@ -6,14 +6,14 @@
> >
<template v-if="!wait"> <template v-if="!wait">
<template v-if="isFollowing"> <template v-if="isFollowing">
<span v-if="full">{{ i18n.ts.unfollow }}</span><i class="fas fa-minus"></i> <span v-if="full">{{ i18n.ts.unfollow }}</span><i class="ti ti-minus"></i>
</template> </template>
<template v-else> <template v-else>
<span v-if="full">{{ i18n.ts.follow }}</span><i class="fas fa-plus"></i> <span v-if="full">{{ i18n.ts.follow }}</span><i class="ti ti-plus"></i>
</template> </template>
</template> </template>
<template v-else> <template v-else>
<span v-if="full">{{ i18n.ts.processing }}</span><i class="fas fa-spinner fa-pulse fa-fw"></i> <span v-if="full">{{ i18n.ts.processing }}</span><i class="fas fa-spinner fa-pulse ti-fw"></i>
</template> </template>
</button> </button>
</template> </template>

View File

@ -2,10 +2,10 @@
<MkA :to="`/channels/${channel.id}`" class="eftoefju _panel" tabindex="-1"> <MkA :to="`/channels/${channel.id}`" class="eftoefju _panel" tabindex="-1">
<div class="banner" :style="bannerStyle"> <div class="banner" :style="bannerStyle">
<div class="fade"></div> <div class="fade"></div>
<div class="name"><i class="fas fa-satellite-dish"></i> {{ channel.name }}</div> <div class="name"><i class="ti ti-satellite-dish"></i> {{ channel.name }}</div>
<div class="status"> <div class="status">
<div> <div>
<i class="fas fa-users fa-fw"></i> <i class="ti ti-users ti-fw"></i>
<I18n :src="i18n.ts._channel.usersCount" tag="span" style="margin-left: 4px;"> <I18n :src="i18n.ts._channel.usersCount" tag="span" style="margin-left: 4px;">
<template #n> <template #n>
<b>{{ channel.usersCount }}</b> <b>{{ channel.usersCount }}</b>
@ -13,7 +13,7 @@
</I18n> </I18n>
</div> </div>
<div> <div>
<i class="fas fa-pencil-alt fa-fw"></i> <i class="ti ti-pencil ti-fw"></i>
<I18n :src="i18n.ts._channel.notesCount" tag="span" style="margin-left: 4px;"> <I18n :src="i18n.ts._channel.notesCount" tag="span" style="margin-left: 4px;">
<template #n> <template #n>
<b>{{ channel.notesCount }}</b> <b>{{ channel.notesCount }}</b>

View File

@ -5,17 +5,17 @@
<i :class="icon"></i> <i :class="icon"></i>
</div> </div>
<div v-else-if="!input && !select" class="icon" :class="type"> <div v-else-if="!input && !select" class="icon" :class="type">
<i v-if="type === 'success'" class="fas fa-check"></i> <i v-if="type === 'success'" class="ti ti-check"></i>
<i v-else-if="type === 'error'" class="fas fa-times-circle"></i> <i v-else-if="type === 'error'" class="ti ti-x-circle"></i>
<i v-else-if="type === 'warning'" class="fas fa-exclamation-triangle"></i> <i v-else-if="type === 'warning'" class="ti ti-alert-triangle"></i>
<i v-else-if="type === 'info'" class="fas fa-info-circle"></i> <i v-else-if="type === 'info'" class="ti ti-info-circle"></i>
<i v-else-if="type === 'question'" class="fas fa-question-circle"></i> <i v-else-if="type === 'question'" class="ti ti-question-mark"></i>
<i v-else-if="type === 'waiting'" class="fas fa-spinner fa-pulse"></i> <i v-else-if="type === 'waiting'" class="fas fa-spinner fa-pulse"></i>
</div> </div>
<header v-if="title"><Mfm :text="title"/></header> <header v-if="title"><Mfm :text="title"/></header>
<div v-if="text" class="body"><Mfm :text="text"/></div> <div v-if="text" class="body"><Mfm :text="text"/></div>
<MkInput v-if="input" v-model="inputValue" autofocus :type="input.type || 'text'" :placeholder="input.placeholder || undefined" @keydown="onInputKeydown"> <MkInput v-if="input" v-model="inputValue" autofocus :type="input.type || 'text'" :placeholder="input.placeholder || undefined" @keydown="onInputKeydown">
<template v-if="input.type === 'password'" #prefix><i class="fas fa-lock"></i></template> <template v-if="input.type === 'password'" #prefix><i class="ti ti-lock"></i></template>
</MkInput> </MkInput>
<MkSelect v-if="select" v-model="selectedValue" autofocus> <MkSelect v-if="select" v-model="selectedValue" autofocus>
<template v-if="select.items"> <template v-if="select.items">

View File

@ -62,30 +62,30 @@ const title = computed(() => `${props.file.name}\n${props.file.type} ${bytes(pro
function getMenu() { function getMenu() {
return [{ return [{
text: i18n.ts.rename, text: i18n.ts.rename,
icon: 'fas fa-i-cursor', icon: 'ti ti-cursor-text',
action: rename action: rename
}, { }, {
text: props.file.isSensitive ? i18n.ts.unmarkAsSensitive : i18n.ts.markAsSensitive, text: props.file.isSensitive ? i18n.ts.unmarkAsSensitive : i18n.ts.markAsSensitive,
icon: props.file.isSensitive ? 'fas fa-eye' : 'fas fa-eye-slash', icon: props.file.isSensitive ? 'ti ti-eye' : 'ti ti-eye-off',
action: toggleSensitive action: toggleSensitive
}, { }, {
text: i18n.ts.describeFile, text: i18n.ts.describeFile,
icon: 'fas fa-i-cursor', icon: 'ti ti-cursor-text',
action: describe action: describe
}, null, { }, null, {
text: i18n.ts.copyUrl, text: i18n.ts.copyUrl,
icon: 'fas fa-link', icon: 'ti ti-link',
action: copyUrl action: copyUrl
}, { }, {
type: 'a', type: 'a',
href: props.file.url, href: props.file.url,
target: '_blank', target: '_blank',
text: i18n.ts.download, text: i18n.ts.download,
icon: 'fas fa-download', icon: 'ti ti-download',
download: props.file.name download: props.file.name
}, null, { }, null, {
text: i18n.ts.delete, text: i18n.ts.delete,
icon: 'fas fa-trash-alt', icon: 'ti ti-trash',
danger: true, danger: true,
action: deleteFile action: deleteFile
}]; }];

View File

@ -15,8 +15,8 @@
@dragend="onDragend" @dragend="onDragend"
> >
<p class="name"> <p class="name">
<template v-if="hover"><i class="fas fa-folder-open fa-fw"></i></template> <template v-if="hover"><i class="fas fa-folder-open ti-fw"></i></template>
<template v-if="!hover"><i class="fas fa-folder fa-fw"></i></template> <template v-if="!hover"><i class="fas fa-folder ti-fw"></i></template>
{{ folder.name }} {{ folder.name }}
</p> </p>
<p v-if="defaultStore.state.uploadFolder == folder.id" class="upload"> <p v-if="defaultStore.state.uploadFolder == folder.id" class="upload">
@ -237,11 +237,11 @@ function onContextmenu(ev: MouseEvent) {
} }
}, null, { }, null, {
text: i18n.ts.rename, text: i18n.ts.rename,
icon: 'fas fa-i-cursor', icon: 'ti ti-cursor-text',
action: rename, action: rename,
}, null, { }, null, {
text: i18n.ts.delete, text: i18n.ts.delete,
icon: 'fas fa-trash-alt', icon: 'ti ti-trash',
danger: true, danger: true,
action: deleteFolder, action: deleteFolder,
}], ev); }], ev);

View File

@ -7,7 +7,7 @@
@dragleave="onDragleave" @dragleave="onDragleave"
@drop.stop="onDrop" @drop.stop="onDrop"
> >
<i v-if="folder == null" class="fas fa-cloud"></i> <i v-if="folder == null" class="ti ti-cloud"></i>
<span>{{ folder == null ? i18n.ts.drive : folder.name }}</span> <span>{{ folder == null ? i18n.ts.drive : folder.name }}</span>
</div> </div>
</template> </template>

View File

@ -24,7 +24,7 @@
<span v-if="folder != null" class="separator"><i class="fas fa-angle-right"></i></span> <span v-if="folder != null" class="separator"><i class="fas fa-angle-right"></i></span>
<span v-if="folder != null" class="folder current">{{ folder.name }}</span> <span v-if="folder != null" class="folder current">{{ folder.name }}</span>
</div> </div>
<button class="menu _button" @click="showMenu"><i class="fas fa-ellipsis-h"></i></button> <button class="menu _button" @click="showMenu"><i class="ti ti-dots"></i></button>
</nav> </nav>
<div ref="main" class="main" <div ref="main" class="main"
:class="{ uploading: uploadings.length > 0, fetching }" :class="{ uploading: uploadings.length > 0, fetching }"
@ -572,22 +572,22 @@ function getMenu() {
type: 'label' type: 'label'
}, { }, {
text: i18n.ts.upload, text: i18n.ts.upload,
icon: 'fas fa-upload', icon: 'ti ti-upload',
action: () => { selectLocalFile(); } action: () => { selectLocalFile(); }
}, { }, {
text: i18n.ts.fromUrl, text: i18n.ts.fromUrl,
icon: 'fas fa-link', icon: 'ti ti-link',
action: () => { urlUpload(); } action: () => { urlUpload(); }
}, null, { }, null, {
text: folder.value ? folder.value.name : i18n.ts.drive, text: folder.value ? folder.value.name : i18n.ts.drive,
type: 'label' type: 'label'
}, folder.value ? { }, folder.value ? {
text: i18n.ts.renameFolder, text: i18n.ts.renameFolder,
icon: 'fas fa-i-cursor', icon: 'ti ti-cursor-text',
action: () => { renameFolder(folder.value); } action: () => { renameFolder(folder.value); }
} : undefined, folder.value ? { } : undefined, folder.value ? {
text: i18n.ts.deleteFolder, text: i18n.ts.deleteFolder,
icon: 'fas fa-trash-alt', icon: 'ti ti-trash',
action: () => { deleteFolder(folder.value as Misskey.entities.DriveFolder); } action: () => { deleteFolder(folder.value as Misskey.entities.DriveFolder); }
} : undefined, { } : undefined, {
text: i18n.ts.createFolder, text: i18n.ts.createFolder,

View File

@ -1,7 +1,7 @@
<template> <template>
<section> <section>
<header class="_acrylic" @click="shown = !shown"> <header class="_acrylic" @click="shown = !shown">
<i class="toggle fa-fw" :class="shown ? 'fas fa-chevron-down' : 'fas fa-chevron-up'"></i> <slot></slot> ({{ emojis.length }}) <i class="toggle ti-fw" :class="shown ? 'ti ti-chevron-down' : 'ti ti-chevron-up'"></i> <slot></slot> ({{ emojis.length }})
</header> </header>
<div v-if="shown"> <div v-if="shown">
<button v-for="emoji in emojis" <button v-for="emoji in emojis"

View File

@ -43,7 +43,7 @@
</section> </section>
<section> <section>
<header class="_acrylic"><i class="far fa-clock fa-fw"></i> {{ i18n.ts.recentUsed }}</header> <header class="_acrylic"><i class="far fa-clock ti-fw"></i> {{ i18n.ts.recentUsed }}</header>
<div> <div>
<button v-for="emoji in recentlyUsedEmojis" <button v-for="emoji in recentlyUsedEmojis"
:key="emoji" :key="emoji"
@ -65,10 +65,10 @@
</div> </div>
</div> </div>
<div class="tabs"> <div class="tabs">
<button class="_button tab" :class="{ active: tab === 'index' }" @click="tab = 'index'"><i class="fas fa-asterisk fa-fw"></i></button> <button class="_button tab" :class="{ active: tab === 'index' }" @click="tab = 'index'"><i class="fas fa-asterisk ti-fw"></i></button>
<button class="_button tab" :class="{ active: tab === 'custom' }" @click="tab = 'custom'"><i class="fas fa-laugh fa-fw"></i></button> <button class="_button tab" :class="{ active: tab === 'custom' }" @click="tab = 'custom'"><i class="ti ti-mood-happy ti-fw"></i></button>
<button class="_button tab" :class="{ active: tab === 'unicode' }" @click="tab = 'unicode'"><i class="fas fa-leaf fa-fw"></i></button> <button class="_button tab" :class="{ active: tab === 'unicode' }" @click="tab = 'unicode'"><i class="fas fa-leaf ti-fw"></i></button>
<button class="_button tab" :class="{ active: tab === 'tags' }" @click="tab = 'tags'"><i class="fas fa-hashtag fa-fw"></i></button> <button class="_button tab" :class="{ active: tab === 'tags' }" @click="tab = 'tags'"><i class="ti ti-hash ti-fw"></i></button>
</div> </div>
</div> </div>
</template> </template>

View File

@ -12,17 +12,17 @@
<span v-if="full">{{ i18n.ts.processing }}</span><i class="fas fa-spinner fa-pulse"></i> <span v-if="full">{{ i18n.ts.processing }}</span><i class="fas fa-spinner fa-pulse"></i>
</template> </template>
<template v-else-if="isFollowing"> <template v-else-if="isFollowing">
<span v-if="full">{{ i18n.ts.unfollow }}</span><i class="fas fa-minus"></i> <span v-if="full">{{ i18n.ts.unfollow }}</span><i class="ti ti-minus"></i>
</template> </template>
<template v-else-if="!isFollowing && user.isLocked"> <template v-else-if="!isFollowing && user.isLocked">
<span v-if="full">{{ i18n.ts.followRequest }}</span><i class="fas fa-plus"></i> <span v-if="full">{{ i18n.ts.followRequest }}</span><i class="ti ti-plus"></i>
</template> </template>
<template v-else-if="!isFollowing && !user.isLocked"> <template v-else-if="!isFollowing && !user.isLocked">
<span v-if="full">{{ i18n.ts.follow }}</span><i class="fas fa-plus"></i> <span v-if="full">{{ i18n.ts.follow }}</span><i class="ti ti-plus"></i>
</template> </template>
</template> </template>
<template v-else> <template v-else>
<span v-if="full">{{ i18n.ts.processing }}</span><i class="fas fa-spinner fa-pulse fa-fw"></i> <span v-if="full">{{ i18n.ts.processing }}</span><i class="fas fa-spinner fa-pulse ti-fw"></i>
</template> </template>
</button> </button>
</template> </template>

View File

@ -28,7 +28,7 @@
</div> </div>
<div class="caption"><slot name="caption"></slot></div> <div class="caption"><slot name="caption"></slot></div>
<MkButton v-if="manualSave && changed" primary class="save" @click="updated"><i class="fas fa-check"></i> {{ $ts.save }}</MkButton> <MkButton v-if="manualSave && changed" primary class="save" @click="updated"><i class="ti ti-check"></i> {{ $ts.save }}</MkButton>
</div> </div>
</template> </template>

View File

@ -13,7 +13,7 @@
<span class="text"><slot></slot></span> <span class="text"><slot></slot></span>
<span class="right"> <span class="right">
<span class="text"><slot name="suffix"></slot></span> <span class="text"><slot name="suffix"></slot></span>
<i class="fas fa-chevron-right icon"></i> <i class="ti ti-chevron-right icon"></i>
</span> </span>
</MkA> </MkA>
</div> </div>

View File

@ -17,7 +17,7 @@
> >
<slot></slot> <slot></slot>
</select> </select>
<div ref="suffixEl" class="suffix"><i class="fas fa-chevron-down"></i></div> <div ref="suffixEl" class="suffix"><i class="ti ti-chevron-down"></i></div>
</div> </div>
<div class="caption"><slot name="caption"></slot></div> <div class="caption"><slot name="caption"></slot></div>

View File

@ -8,7 +8,7 @@
</div> </div>
<div v-else> <div v-else>
<div class="wszdbhzo"> <div class="wszdbhzo">
<div><i class="fas fa-exclamation-triangle"></i> {{ $ts.somethingHappened }}</div> <div><i class="ti ti-alert-triangle"></i> {{ $ts.somethingHappened }}</div>
<MkButton inline class="retry" @click="retry"><i class="fas fa-redo-alt"></i> {{ $ts.retry }}</MkButton> <MkButton inline class="retry" @click="retry"><i class="fas fa-redo-alt"></i> {{ $ts.retry }}</MkButton>
</div> </div>
</div> </div>

View File

@ -10,7 +10,7 @@
@keydown.enter="toggle" @keydown.enter="toggle"
> >
<span ref="button" v-adaptive-border v-tooltip="checked ? $ts.itsOn : $ts.itsOff" class="button" @click.prevent="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 ti ti-check"></i>
</span> </span>
<span class="label"> <span class="label">
<!-- TODO: 無名slotの方は廃止 --> <!-- TODO: 無名slotの方は廃止 -->

View File

@ -64,7 +64,7 @@ function onContextmenu(ev) {
window.open(props.to, '_blank'); window.open(props.to, '_blank');
} }
}, { }, {
icon: 'fas fa-link', icon: 'ti ti-link',
text: i18n.ts.copyLink, text: i18n.ts.copyLink,
action: () => { action: () => {
copyToClipboard(`${url}${props.to}`); copyToClipboard(`${url}${props.to}`);

View File

@ -3,7 +3,7 @@
<div v-if="!showMenu" class="main" :class="ad.place"> <div v-if="!showMenu" class="main" :class="ad.place">
<a :href="ad.url" target="_blank"> <a :href="ad.url" target="_blank">
<img :src="ad.imageUrl"> <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="ti ti-info-circle"></span></button>
</a> </a>
</div> </div>
<div v-else class="menu"> <div v-else class="menu">

View File

@ -2,7 +2,7 @@
<transition :name="$store.state.animation ? 'zoom' : ''" appear> <transition :name="$store.state.animation ? 'zoom' : ''" appear>
<div class="mjndxjcg"> <div class="mjndxjcg">
<img src="https://xn--931a.moe/assets/error.jpg" class="_ghost"/> <img src="https://xn--931a.moe/assets/error.jpg" class="_ghost"/>
<p><i class="fas fa-exclamation-triangle"></i> {{ $ts.somethingHappened }}</p> <p><i class="ti ti-alert-triangle"></i> {{ $ts.somethingHappened }}</p>
<MkButton class="button" @click="() => $emit('retry')">{{ $ts.retry }}</MkButton> <MkButton class="button" @click="() => $emit('retry')">{{ $ts.retry }}</MkButton>
</div> </div>
</transition> </transition>

View File

@ -13,7 +13,7 @@
</div> </div>
<div v-if="narrow && hasTabs" class="subtitle activeTab"> <div v-if="narrow && hasTabs" class="subtitle activeTab">
{{ info.tabs.find(tab => tab.active)?.title }} {{ info.tabs.find(tab => tab.active)?.title }}
<i class="chevron fas fa-chevron-down"></i> <i class="chevron ti ti-chevron-down"></i>
</div> </div>
</div> </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> <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>
</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="ti ti-dots"></i></button>
</div> </div>
</div> </div>
</template> </template>
@ -105,7 +105,7 @@ export default defineComponent({
if (menu.length > 0) menu.push(null); if (menu.length > 0) menu.push(null);
menu.push({ menu.push({
text: i18n.ts.share, text: i18n.ts.share,
icon: 'fas fa-share-alt', icon: 'ti ti-share',
action: share action: share
}); });
} }

View File

@ -1,7 +1,7 @@
<template> <template>
<div class="mk-google"> <div class="mk-google">
<input v-model="query" type="search" :placeholder="q"> <input v-model="query" type="search" :placeholder="q">
<button @click="search"><i class="fas fa-search"></i> {{ $ts.searchByGoogle }}</button> <button @click="search"><i class="ti ti-search"></i> {{ $ts.searchByGoogle }}</button>
</div> </div>
</template> </template>

View File

@ -17,11 +17,11 @@
</div> </div>
<div class="sub"> <div class="sub">
<a v-click-anime href="https://misskey-hub.net/help.html" target="_blank" @click.passive="close()"> <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="ti ti-question-mark icon"></i>
<div class="text">{{ $ts.help }}</div> <div class="text">{{ $ts.help }}</div>
</a> </a>
<MkA v-click-anime to="/about" @click.passive="close()"> <MkA v-click-anime to="/about" @click.passive="close()">
<i class="fas fa-info-circle icon"></i> <i class="ti ti-info-circle icon"></i>
<div class="text">{{ $t('aboutX', { x: instanceName }) }}</div> <div class="text">{{ $t('aboutX', { x: instanceName }) }}</div>
</MkA> </MkA>
<MkA v-click-anime to="/about-misskey" @click.passive="close()"> <MkA v-click-anime to="/about-misskey" @click.passive="close()">

View File

@ -1,7 +1,7 @@
<template> <template>
<div class="mk-media-banner"> <div class="mk-media-banner">
<div v-if="media.isSensitive && hide" class="sensitive" @click="hide = false"> <div v-if="media.isSensitive && hide" class="sensitive" @click="hide = false">
<span class="icon"><i class="fas fa-exclamation-triangle"></i></span> <span class="icon"><i class="ti ti-alert-triangle"></i></span>
<b>{{ $ts.sensitive }}</b> <b>{{ $ts.sensitive }}</b>
<span>{{ $ts.clickToShow }}</span> <span>{{ $ts.clickToShow }}</span>
</div> </div>
@ -19,7 +19,7 @@
:title="media.name" :title="media.name"
:download="media.name" :download="media.name"
> >
<span class="icon"><i class="fas fa-download"></i></span> <span class="icon"><i class="ti ti-download"></i></span>
<b>{{ media.name }}</b> <b>{{ media.name }}</b>
</a> </a>
</div> </div>

View File

@ -3,7 +3,7 @@
<ImgWithBlurhash class="bg" :hash="image.blurhash" :title="image.comment" :alt="image.comment"/> <ImgWithBlurhash class="bg" :hash="image.blurhash" :title="image.comment" :alt="image.comment"/>
<div class="text"> <div class="text">
<div> <div>
<b><i class="fas fa-exclamation-triangle"></i> {{ $ts.sensitive }}</b> <b><i class="ti ti-alert-triangle"></i> {{ $ts.sensitive }}</b>
<span>{{ $ts.clickToShow }}</span> <span>{{ $ts.clickToShow }}</span>
</div> </div>
</div> </div>
@ -16,7 +16,7 @@
<ImgWithBlurhash :hash="image.blurhash" :src="url" :alt="image.comment" :title="image.comment" :cover="false"/> <ImgWithBlurhash :hash="image.blurhash" :src="url" :alt="image.comment" :title="image.comment" :cover="false"/>
<div v-if="image.type === 'image/gif'" class="gif">GIF</div> <div v-if="image.type === 'image/gif'" class="gif">GIF</div>
</a> </a>
<button v-tooltip="$ts.hide" class="_button hide" @click="hide = true"><i class="fas fa-eye-slash"></i></button> <button v-tooltip="$ts.hide" class="_button hide" @click="hide = true"><i class="ti ti-eye-off"></i></button>
</div> </div>
</template> </template>

View File

@ -1,7 +1,7 @@
<template> <template>
<div v-if="hide" class="icozogqfvdetwohsdglrbswgrejoxbdj" @click="hide = false"> <div v-if="hide" class="icozogqfvdetwohsdglrbswgrejoxbdj" @click="hide = false">
<div> <div>
<b><i class="fas fa-exclamation-triangle"></i> {{ $ts.sensitive }}</b> <b><i class="ti ti-alert-triangle"></i> {{ $ts.sensitive }}</b>
<span>{{ $ts.clickToShow }}</span> <span>{{ $ts.clickToShow }}</span>
</div> </div>
</div> </div>
@ -19,7 +19,7 @@
:type="video.type" :type="video.type"
> >
</video> </video>
<i class="fas fa-eye-slash" @click="hide = true"></i> <i class="ti ti-eye-off" @click="hide = true"></i>
</div> </div>
</template> </template>

View File

@ -8,7 +8,7 @@
<i v-if="pageInfo.icon" class="icon" :class="pageInfo.icon"></i> <i v-if="pageInfo.icon" class="icon" :class="pageInfo.icon"></i>
<span>{{ pageInfo.title }}</span> <span>{{ pageInfo.title }}</span>
</span> </span>
<button class="_button" @click="$refs.modal.close()"><i class="fas fa-times"></i></button> <button class="_button" @click="$refs.modal.close()"><i class="ti ti-x"></i></button>
</div> </div>
<div class="body"> <div class="body">
<MkStickyContainer> <MkStickyContainer>
@ -114,7 +114,7 @@ export default defineComponent({
this.$refs.window.close(); this.$refs.window.close();
}, },
}, { }, {
icon: 'fas fa-link', icon: 'ti ti-link',
text: this.$ts.copyLink, text: this.$ts.copyLink,
action: () => { action: () => {
copyToClipboard(this.url); copyToClipboard(this.url);

View File

@ -13,7 +13,7 @@
<MkNoteSub v-if="appearNote.reply" :note="appearNote.reply" class="reply-to"/> <MkNoteSub v-if="appearNote.reply" :note="appearNote.reply" class="reply-to"/>
<div v-if="isRenote" class="renote"> <div v-if="isRenote" class="renote">
<MkAvatar class="avatar" :user="note.user"/> <MkAvatar class="avatar" :user="note.user"/>
<i class="fas fa-retweet"></i> <i class="ti ti-repeat"></i>
<I18n :src="$ts.renotedBy" tag="span"> <I18n :src="$ts.renotedBy" tag="span">
<template #user> <template #user>
<MkA v-user-preview="note.userId" class="name" :to="userPage(note.user)"> <MkA v-user-preview="note.userId" class="name" :to="userPage(note.user)">
@ -23,13 +23,13 @@
</I18n> </I18n>
<div class="info"> <div class="info">
<button ref="renoteTime" class="_button time" @click="showRenoteMenu()"> <button ref="renoteTime" class="_button time" @click="showRenoteMenu()">
<i v-if="isMyRenote" class="fas fa-ellipsis-h dropdownIcon"></i> <i v-if="isMyRenote" class="ti ti-dots dropdownIcon"></i>
<MkTime :time="note.createdAt"/> <MkTime :time="note.createdAt"/>
</button> </button>
<span v-if="note.visibility !== 'public'" class="visibility"> <span v-if="note.visibility !== 'public'" class="visibility">
<i v-if="note.visibility === 'home'" class="fas fa-home"></i> <i v-if="note.visibility === 'home'" class="ti ti-home-2"></i>
<i v-else-if="note.visibility === 'followers'" class="fas fa-unlock"></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="ti ti-mail"></i>
</span> </span>
<span v-if="note.localOnly" class="localOnly"><i class="fas fa-biohazard"></i></span> <span v-if="note.localOnly" class="localOnly"><i class="fas fa-biohazard"></i></span>
</div> </div>
@ -44,9 +44,9 @@
</MkA> </MkA>
<span v-if="appearNote.user.isBot" class="is-bot">bot</span> <span v-if="appearNote.user.isBot" class="is-bot">bot</span>
<span v-if="appearNote.visibility !== 'public'" class="visibility"> <span v-if="appearNote.visibility !== 'public'" class="visibility">
<i v-if="appearNote.visibility === 'home'" class="fas fa-home"></i> <i v-if="appearNote.visibility === 'home'" class="ti ti-home-2"></i>
<i v-else-if="appearNote.visibility === 'followers'" class="fas fa-unlock"></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="ti ti-mail"></i>
</span> </span>
<span v-if="appearNote.localOnly" class="localOnly"><i class="fas fa-biohazard"></i></span> <span v-if="appearNote.localOnly" class="localOnly"><i class="fas fa-biohazard"></i></span>
</div> </div>
@ -81,7 +81,7 @@
<MkUrlPreview v-for="url in urls" :key="url" :url="url" :compact="true" :detail="true" class="url-preview"/> <MkUrlPreview v-for="url in urls" :key="url" :url="url" :compact="true" :detail="true" class="url-preview"/>
<div v-if="appearNote.renote" class="renote"><XNoteSimple :note="appearNote.renote"/></div> <div v-if="appearNote.renote" class="renote"><XNoteSimple :note="appearNote.renote"/></div>
</div> </div>
<MkA v-if="appearNote.channel && !inChannel" class="channel" :to="`/channels/${appearNote.channel.id}`"><i class="fas fa-satellite-dish"></i> {{ appearNote.channel.name }}</MkA> <MkA v-if="appearNote.channel && !inChannel" class="channel" :to="`/channels/${appearNote.channel.id}`"><i class="ti ti-satellite-dish"></i> {{ appearNote.channel.name }}</MkA>
</div> </div>
<footer class="footer"> <footer class="footer">
<div class="info"> <div class="info">
@ -97,13 +97,13 @@
</button> </button>
<XRenoteButton ref="renoteButton" class="button" :note="appearNote" :count="appearNote.renoteCount"/> <XRenoteButton ref="renoteButton" class="button" :note="appearNote" :count="appearNote.renoteCount"/>
<button v-if="appearNote.myReaction == null" ref="reactButton" class="button _button" @click="react()"> <button v-if="appearNote.myReaction == null" ref="reactButton" class="button _button" @click="react()">
<i class="fas fa-plus"></i> <i class="ti ti-plus"></i>
</button> </button>
<button v-if="appearNote.myReaction != null" ref="reactButton" class="button _button reacted" @click="undoReact(appearNote)"> <button v-if="appearNote.myReaction != null" ref="reactButton" class="button _button reacted" @click="undoReact(appearNote)">
<i class="fas fa-minus"></i> <i class="ti ti-minus"></i>
</button> </button>
<button ref="menuButton" class="button _button" @click="menu()"> <button ref="menuButton" class="button _button" @click="menu()">
<i class="fas fa-ellipsis-h"></i> <i class="ti ti-dots"></i>
</button> </button>
</footer> </footer>
</div> </div>
@ -265,7 +265,7 @@ function showRenoteMenu(viaKeyboard = false): void {
if (!isMyRenote) return; if (!isMyRenote) return;
os.popupMenu([{ os.popupMenu([{
text: i18n.ts.unrenote, text: i18n.ts.unrenote,
icon: 'fas fa-trash-alt', icon: 'ti ti-trash',
danger: true, danger: true,
action: () => { action: () => {
os.api('notes/delete', { os.api('notes/delete', {

View File

@ -10,9 +10,9 @@
<MkTime :time="note.createdAt"/> <MkTime :time="note.createdAt"/>
</MkA> </MkA>
<span v-if="note.visibility !== 'public'" class="visibility"> <span v-if="note.visibility !== 'public'" class="visibility">
<i v-if="note.visibility === 'home'" class="fas fa-home"></i> <i v-if="note.visibility === 'home'" class="ti ti-home-2"></i>
<i v-else-if="note.visibility === 'followers'" class="fas fa-unlock"></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="ti ti-mail"></i>
</span> </span>
<span v-if="note.localOnly" class="localOnly"><i class="fas fa-biohazard"></i></span> <span v-if="note.localOnly" class="localOnly"><i class="fas fa-biohazard"></i></span>
</div> </div>

View File

@ -10,12 +10,12 @@
:class="{ renote: isRenote }" :class="{ renote: isRenote }"
> >
<MkNoteSub v-if="appearNote.reply" :note="appearNote.reply" class="reply-to"/> <MkNoteSub v-if="appearNote.reply" :note="appearNote.reply" class="reply-to"/>
<div v-if="pinned" class="info"><i class="fas fa-thumbtack"></i> {{ i18n.ts.pinnedNote }}</div> <div v-if="pinned" class="info"><i class="ti ti-pin"></i> {{ i18n.ts.pinnedNote }}</div>
<div v-if="appearNote._prId_" class="info"><i class="fas fa-bullhorn"></i> {{ i18n.ts.promotion }}<button class="_textButton hide" @click="readPromo()">{{ i18n.ts.hideThisNote }} <i class="fas fa-times"></i></button></div> <div v-if="appearNote._prId_" class="info"><i class="fas fa-bullhorn"></i> {{ i18n.ts.promotion }}<button class="_textButton hide" @click="readPromo()">{{ i18n.ts.hideThisNote }} <i class="ti ti-x"></i></button></div>
<div v-if="appearNote._featuredId_" class="info"><i class="fas fa-bolt"></i> {{ i18n.ts.featured }}</div> <div v-if="appearNote._featuredId_" class="info"><i class="ti ti-bolt"></i> {{ i18n.ts.featured }}</div>
<div v-if="isRenote" class="renote"> <div v-if="isRenote" class="renote">
<MkAvatar class="avatar" :user="note.user"/> <MkAvatar class="avatar" :user="note.user"/>
<i class="fas fa-retweet"></i> <i class="ti ti-repeat"></i>
<I18n :src="i18n.ts.renotedBy" tag="span"> <I18n :src="i18n.ts.renotedBy" tag="span">
<template #user> <template #user>
<MkA v-user-preview="note.userId" class="name" :to="userPage(note.user)"> <MkA v-user-preview="note.userId" class="name" :to="userPage(note.user)">
@ -25,13 +25,13 @@
</I18n> </I18n>
<div class="info"> <div class="info">
<button ref="renoteTime" class="_button time" @click="showRenoteMenu()"> <button ref="renoteTime" class="_button time" @click="showRenoteMenu()">
<i v-if="isMyRenote" class="fas fa-ellipsis-h dropdownIcon"></i> <i v-if="isMyRenote" class="ti ti-dots dropdownIcon"></i>
<MkTime :time="note.createdAt"/> <MkTime :time="note.createdAt"/>
</button> </button>
<span v-if="note.visibility !== 'public'" class="visibility"> <span v-if="note.visibility !== 'public'" class="visibility">
<i v-if="note.visibility === 'home'" class="fas fa-home"></i> <i v-if="note.visibility === 'home'" class="ti ti-home-2"></i>
<i v-else-if="note.visibility === 'followers'" class="fas fa-unlock"></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="ti ti-mail"></i>
</span> </span>
<span v-if="note.localOnly" class="localOnly"><i class="fas fa-biohazard"></i></span> <span v-if="note.localOnly" class="localOnly"><i class="fas fa-biohazard"></i></span>
</div> </div>
@ -70,24 +70,24 @@
<span>{{ i18n.ts.showMore }}</span> <span>{{ i18n.ts.showMore }}</span>
</button> </button>
</div> </div>
<MkA v-if="appearNote.channel && !inChannel" class="channel" :to="`/channels/${appearNote.channel.id}`"><i class="fas fa-satellite-dish"></i> {{ appearNote.channel.name }}</MkA> <MkA v-if="appearNote.channel && !inChannel" class="channel" :to="`/channels/${appearNote.channel.id}`"><i class="ti ti-satellite-dish"></i> {{ appearNote.channel.name }}</MkA>
</div> </div>
<footer class="footer"> <footer class="footer">
<XReactionsViewer ref="reactionsViewer" :note="appearNote"/> <XReactionsViewer ref="reactionsViewer" :note="appearNote"/>
<button class="button _button" @click="reply()"> <button class="button _button" @click="reply()">
<template v-if="appearNote.reply"><i class="fas fa-reply-all"></i></template> <template v-if="appearNote.reply"><i class="fas fa-reply-all"></i></template>
<template v-else><i class="fas fa-reply"></i></template> <template v-else><i class="ti ti-arrow-back-up"></i></template>
<p v-if="appearNote.repliesCount > 0" class="count">{{ appearNote.repliesCount }}</p> <p v-if="appearNote.repliesCount > 0" class="count">{{ appearNote.repliesCount }}</p>
</button> </button>
<XRenoteButton ref="renoteButton" class="button" :note="appearNote" :count="appearNote.renoteCount"/> <XRenoteButton ref="renoteButton" class="button" :note="appearNote" :count="appearNote.renoteCount"/>
<button v-if="appearNote.myReaction == null" ref="reactButton" class="button _button" @click="react()"> <button v-if="appearNote.myReaction == null" ref="reactButton" class="button _button" @click="react()">
<i class="fas fa-plus"></i> <i class="ti ti-plus"></i>
</button> </button>
<button v-if="appearNote.myReaction != null" ref="reactButton" class="button _button reacted" @click="undoReact(appearNote)"> <button v-if="appearNote.myReaction != null" ref="reactButton" class="button _button reacted" @click="undoReact(appearNote)">
<i class="fas fa-minus"></i> <i class="ti ti-minus"></i>
</button> </button>
<button ref="menuButton" class="button _button" @click="menu()"> <button ref="menuButton" class="button _button" @click="menu()">
<i class="fas fa-ellipsis-h"></i> <i class="ti ti-dots"></i>
</button> </button>
</footer> </footer>
</div> </div>
@ -253,7 +253,7 @@ function showRenoteMenu(viaKeyboard = false): void {
if (!isMyRenote) return; if (!isMyRenote) return;
os.popupMenu([{ os.popupMenu([{
text: i18n.ts.unrenote, text: i18n.ts.unrenote,
icon: 'fas fa-trash-alt', icon: 'ti ti-trash',
danger: true, danger: true,
action: () => { action: () => {
os.api('notes/delete', { os.api('notes/delete', {

View File

@ -5,16 +5,16 @@
<MkAvatar v-else-if="notification.user" class="icon" :user="notification.user"/> <MkAvatar v-else-if="notification.user" class="icon" :user="notification.user"/>
<img v-else-if="notification.icon" class="icon" :src="notification.icon" alt=""/> <img v-else-if="notification.icon" class="icon" :src="notification.icon" alt=""/>
<div class="sub-icon" :class="notification.type"> <div class="sub-icon" :class="notification.type">
<i v-if="notification.type === 'follow'" class="fas fa-plus"></i> <i v-if="notification.type === 'follow'" class="ti ti-plus"></i>
<i v-else-if="notification.type === 'receiveFollowRequest'" class="fas fa-clock"></i> <i v-else-if="notification.type === 'receiveFollowRequest'" class="ti ti-clock"></i>
<i v-else-if="notification.type === 'followRequestAccepted'" class="fas fa-check"></i> <i v-else-if="notification.type === 'followRequestAccepted'" class="ti ti-check"></i>
<i v-else-if="notification.type === 'groupInvited'" class="fas fa-id-card-alt"></i> <i v-else-if="notification.type === 'groupInvited'" class="fas fa-id-card-alt"></i>
<i v-else-if="notification.type === 'renote'" class="fas fa-retweet"></i> <i v-else-if="notification.type === 'renote'" class="ti ti-repeat"></i>
<i v-else-if="notification.type === 'reply'" class="fas fa-reply"></i> <i v-else-if="notification.type === 'reply'" class="fas fa-reply"></i>
<i v-else-if="notification.type === 'mention'" class="fas fa-at"></i> <i v-else-if="notification.type === 'mention'" class="ti ti-at"></i>
<i v-else-if="notification.type === 'quote'" class="fas fa-quote-left"></i> <i v-else-if="notification.type === 'quote'" class="ti ti-quote"></i>
<i v-else-if="notification.type === 'pollVote'" class="fas fa-poll-h"></i> <i v-else-if="notification.type === 'pollVote'" class="ti ti-chart-arrows"></i>
<i v-else-if="notification.type === 'pollEnded'" class="fas fa-poll-h"></i> <i v-else-if="notification.type === 'pollEnded'" class="ti ti-chart-arrows"></i>
<!-- notification.reaction null になることはまずないがここでoptional chaining使うと一部ブラウザで刺さるので念の為 --> <!-- notification.reaction null になることはまずないがここでoptional chaining使うと一部ブラウザで刺さるので念の為 -->
<XReactionIcon <XReactionIcon
v-else-if="notification.type === 'reaction'" v-else-if="notification.type === 'reaction'"
@ -33,14 +33,14 @@
<MkTime v-if="withTime" :time="notification.createdAt" class="time"/> <MkTime v-if="withTime" :time="notification.createdAt" class="time"/>
</header> </header>
<MkA v-if="notification.type === 'reaction'" class="text" :to="notePage(notification.note)" :title="getNoteSummary(notification.note)"> <MkA v-if="notification.type === 'reaction'" class="text" :to="notePage(notification.note)" :title="getNoteSummary(notification.note)">
<i class="fas fa-quote-left"></i> <i class="ti ti-quote"></i>
<Mfm :text="getNoteSummary(notification.note)" :plain="true" :nowrap="!full" :custom-emojis="notification.note.emojis"/> <Mfm :text="getNoteSummary(notification.note)" :plain="true" :nowrap="!full" :custom-emojis="notification.note.emojis"/>
<i class="fas fa-quote-right"></i> <i class="ti ti-quote"></i>
</MkA> </MkA>
<MkA v-if="notification.type === 'renote'" class="text" :to="notePage(notification.note)" :title="getNoteSummary(notification.note.renote)"> <MkA v-if="notification.type === 'renote'" class="text" :to="notePage(notification.note)" :title="getNoteSummary(notification.note.renote)">
<i class="fas fa-quote-left"></i> <i class="ti ti-quote"></i>
<Mfm :text="getNoteSummary(notification.note.renote)" :plain="true" :nowrap="!full" :custom-emojis="notification.note.renote.emojis"/> <Mfm :text="getNoteSummary(notification.note.renote)" :plain="true" :nowrap="!full" :custom-emojis="notification.note.renote.emojis"/>
<i class="fas fa-quote-right"></i> <i class="ti ti-quote"></i>
</MkA> </MkA>
<MkA v-if="notification.type === 'reply'" class="text" :to="notePage(notification.note)" :title="getNoteSummary(notification.note)"> <MkA v-if="notification.type === 'reply'" class="text" :to="notePage(notification.note)" :title="getNoteSummary(notification.note)">
<Mfm :text="getNoteSummary(notification.note)" :plain="true" :nowrap="!full" :custom-emojis="notification.note.emojis"/> <Mfm :text="getNoteSummary(notification.note)" :plain="true" :nowrap="!full" :custom-emojis="notification.note.emojis"/>
@ -52,14 +52,14 @@
<Mfm :text="getNoteSummary(notification.note)" :plain="true" :nowrap="!full" :custom-emojis="notification.note.emojis"/> <Mfm :text="getNoteSummary(notification.note)" :plain="true" :nowrap="!full" :custom-emojis="notification.note.emojis"/>
</MkA> </MkA>
<MkA v-if="notification.type === 'pollVote'" class="text" :to="notePage(notification.note)" :title="getNoteSummary(notification.note)"> <MkA v-if="notification.type === 'pollVote'" class="text" :to="notePage(notification.note)" :title="getNoteSummary(notification.note)">
<i class="fas fa-quote-left"></i> <i class="ti ti-quote"></i>
<Mfm :text="getNoteSummary(notification.note)" :plain="true" :nowrap="!full" :custom-emojis="notification.note.emojis"/> <Mfm :text="getNoteSummary(notification.note)" :plain="true" :nowrap="!full" :custom-emojis="notification.note.emojis"/>
<i class="fas fa-quote-right"></i> <i class="ti ti-quote"></i>
</MkA> </MkA>
<MkA v-if="notification.type === 'pollEnded'" class="text" :to="notePage(notification.note)" :title="getNoteSummary(notification.note)"> <MkA v-if="notification.type === 'pollEnded'" class="text" :to="notePage(notification.note)" :title="getNoteSummary(notification.note)">
<i class="fas fa-quote-left"></i> <i class="ti ti-quote"></i>
<Mfm :text="getNoteSummary(notification.note)" :plain="true" :nowrap="!full" :custom-emojis="notification.note.emojis"/> <Mfm :text="getNoteSummary(notification.note)" :plain="true" :nowrap="!full" :custom-emojis="notification.note.emojis"/>
<i class="fas fa-quote-right"></i> <i class="ti ti-quote"></i>
</MkA> </MkA>
<span v-if="notification.type === 'follow'" class="text" style="opacity: 0.6;">{{ $ts.youGotNewFollower }}<div v-if="full"><MkFollowButton :user="notification.user" :full="true"/></div></span> <span v-if="notification.type === 'follow'" class="text" style="opacity: 0.6;">{{ $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> <span v-if="notification.type === 'followRequestAccepted'" class="text" style="opacity: 0.6;">{{ $ts.followRequestAccepted }}</span>

View File

@ -19,7 +19,7 @@
<template #headerRight> <template #headerRight>
<button v-tooltip="$ts.showInPage" class="_button" @click="expand()"><i class="fas fa-expand-alt"></i></button> <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 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="ti ti-dots"></i></button>
</template> </template>
<div class="yrolvcoq" :style="{ background: pageInfo?.bg }"> <div class="yrolvcoq" :style="{ background: pageInfo?.bg }">
@ -121,7 +121,7 @@ export default defineComponent({
this.$refs.window.close(); this.$refs.window.close();
} }
}, { }, {
icon: 'fas fa-link', icon: 'ti ti-link',
text: this.$ts.copyLink, text: this.$ts.copyLink,
action: () => { action: () => {
copyToClipboard(this.url); copyToClipboard(this.url);
@ -155,7 +155,7 @@ export default defineComponent({
this.$refs.window.close(); this.$refs.window.close();
} }
}, { }, {
icon: 'fas fa-link', icon: 'ti ti-link',
text: this.$ts.copyLink, text: this.$ts.copyLink,
action: () => { action: () => {
copyToClipboard(this.url); copyToClipboard(this.url);

View File

@ -2,8 +2,8 @@
<div class="ngbfujlo"> <div class="ngbfujlo">
<MkTextarea :model-value="text" readonly style="margin: 0;"></MkTextarea> <MkTextarea :model-value="text" readonly style="margin: 0;"></MkTextarea>
<MkButton class="button" primary :disabled="posting || posted" @click="post()"> <MkButton class="button" primary :disabled="posting || posted" @click="post()">
<i v-if="posted" class="fas fa-check"></i> <i v-if="posted" class="ti ti-check"></i>
<i v-else class="fas fa-paper-plane"></i> <i v-else class="ti ti-send"></i>
</MkButton> </MkButton>
</div> </div>
</template> </template>

View File

@ -1,14 +1,14 @@
<template> <template>
<div class="zmdxowus"> <div class="zmdxowus">
<p v-if="choices.length < 2" class="caution"> <p v-if="choices.length < 2" class="caution">
<i class="fas fa-exclamation-triangle"></i>{{ $ts._poll.noOnlyOneChoice }} <i class="ti ti-alert-triangle"></i>{{ $ts._poll.noOnlyOneChoice }}
</p> </p>
<ul> <ul>
<li v-for="(choice, i) in choices" :key="i"> <li v-for="(choice, i) in choices" :key="i">
<MkInput class="input" :model-value="choice" :placeholder="$t('_poll.choiceN', { n: i + 1 })" @update:modelValue="onInput(i, $event)"> <MkInput class="input" :model-value="choice" :placeholder="$t('_poll.choiceN', { n: i + 1 })" @update:modelValue="onInput(i, $event)">
</MkInput> </MkInput>
<button class="_button" @click="remove(i)"> <button class="_button" @click="remove(i)">
<i class="fas fa-times"></i> <i class="ti ti-x"></i>
</button> </button>
</li> </li>
</ul> </ul>

View File

@ -4,7 +4,7 @@
<li v-for="(choice, i) in note.poll.choices" :key="i" :class="{ voted: choice.voted }" @click="vote(i)"> <li v-for="(choice, i) in note.poll.choices" :key="i" :class="{ voted: choice.voted }" @click="vote(i)">
<div class="backdrop" :style="{ 'width': `${showResult ? (choice.votes / total * 100) : 0}%` }"></div> <div class="backdrop" :style="{ 'width': `${showResult ? (choice.votes / total * 100) : 0}%` }"></div>
<span> <span>
<template v-if="choice.isVoted"><i class="fas fa-check"></i></template> <template v-if="choice.isVoted"><i class="ti ti-check"></i></template>
<Mfm :text="choice.text" :plain="true" :custom-emojis="note.emojis"/> <Mfm :text="choice.text" :plain="true" :custom-emojis="note.emojis"/>
<span v-if="showResult" class="votes">({{ $t('_poll.votesCount', { n: choice.votes }) }})</span> <span v-if="showResult" class="votes">({{ $t('_poll.votesCount', { n: choice.votes }) }})</span>
</span> </span>

View File

@ -5,7 +5,7 @@
<div @click="showFileMenu(element, $event)" @contextmenu.prevent="showFileMenu(element, $event)"> <div @click="showFileMenu(element, $event)" @contextmenu.prevent="showFileMenu(element, $event)">
<MkDriveFileThumbnail :data-id="element.id" class="thumbnail" :file="element" fit="cover"/> <MkDriveFileThumbnail :data-id="element.id" class="thumbnail" :file="element" fit="cover"/>
<div v-if="element.isSensitive" class="sensitive"> <div v-if="element.isSensitive" class="sensitive">
<i class="fas fa-exclamation-triangle icon"></i> <i class="ti ti-alert-triangle icon"></i>
</div> </div>
</div> </div>
</template> </template>
@ -113,19 +113,19 @@ export default defineComponent({
if (this.menu) return; if (this.menu) return;
this.menu = os.popupMenu([{ this.menu = os.popupMenu([{
text: this.$ts.renameFile, text: this.$ts.renameFile,
icon: 'fas fa-i-cursor', icon: 'ti ti-cursor-text',
action: () => { this.rename(file); } action: () => { this.rename(file); }
}, { }, {
text: file.isSensitive ? this.$ts.unmarkAsSensitive : this.$ts.markAsSensitive, text: file.isSensitive ? this.$ts.unmarkAsSensitive : this.$ts.markAsSensitive,
icon: file.isSensitive ? 'fas fa-eye-slash' : 'fas fa-eye', icon: file.isSensitive ? 'ti ti-eye-off' : 'ti ti-eye',
action: () => { this.toggleSensitive(file); } action: () => { this.toggleSensitive(file); }
}, { }, {
text: this.$ts.describeFile, text: this.$ts.describeFile,
icon: 'fas fa-i-cursor', icon: 'ti ti-cursor-text',
action: () => { this.describe(file); } action: () => { this.describe(file); }
}, { }, {
text: this.$ts.attachCancel, text: this.$ts.attachCancel,
icon: 'fas fa-times-circle', icon: 'ti ti-x-circle',
action: () => { this.detachMedia(file.id); } action: () => { this.detachMedia(file.id); }
}], ev.currentTarget ?? ev.target).then(() => this.menu = null); }], ev.currentTarget ?? ev.target).then(() => this.menu = null);
} }

View File

@ -1,5 +1,6 @@
<template> <template>
<div v-size="{ max: [310, 500] }" class="gafaadew" <div
v-size="{ max: [310, 500] }" class="gafaadew"
:class="{ modal, _popup: modal }" :class="{ modal, _popup: modal }"
@dragover.stop="onDragover" @dragover.stop="onDragover"
@dragenter="onDragenter" @dragenter="onDragenter"
@ -7,7 +8,7 @@
@drop.stop="onDrop" @drop.stop="onDrop"
> >
<header> <header>
<button v-if="!fixed" class="cancel _button" @click="cancel"><i class="fas fa-times"></i></button> <button v-if="!fixed" class="cancel _button" @click="cancel"><i class="ti ti-x"></i></button>
<button v-click-anime v-tooltip="i18n.ts.switchAccount" class="account _button" @click="openAccountMenu"> <button v-click-anime v-tooltip="i18n.ts.switchAccount" class="account _button" @click="openAccountMenu">
<MkAvatar :user="postAccount ?? $i" class="avatar"/> <MkAvatar :user="postAccount ?? $i" class="avatar"/>
</button> </button>
@ -15,27 +16,27 @@
<span class="text-count" :class="{ over: textLength > maxTextLength }">{{ maxTextLength - textLength }}</span> <span class="text-count" :class="{ over: textLength > maxTextLength }">{{ maxTextLength - textLength }}</span>
<span v-if="localOnly" class="local-only"><i class="fas fa-biohazard"></i></span> <span v-if="localOnly" class="local-only"><i class="fas fa-biohazard"></i></span>
<button ref="visibilityButton" v-tooltip="i18n.ts.visibility" class="_button visibility" :disabled="channel != null" @click="setVisibility"> <button ref="visibilityButton" v-tooltip="i18n.ts.visibility" class="_button visibility" :disabled="channel != null" @click="setVisibility">
<span v-if="visibility === 'public'"><i class="fas fa-globe"></i></span> <span v-if="visibility === 'public'"><i class="ti ti-world"></i></span>
<span v-if="visibility === 'home'"><i class="fas fa-home"></i></span> <span v-if="visibility === 'home'"><i class="ti ti-home-2"></i></span>
<span v-if="visibility === 'followers'"><i class="fas fa-unlock"></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="ti ti-mail"></i></span>
</button> </button>
<button v-tooltip="i18n.ts.previewNoteText" class="_button preview" :class="{ active: showPreview }" @click="showPreview = !showPreview"><i class="fas fa-file-code"></i></button> <button v-tooltip="i18n.ts.previewNoteText" class="_button preview" :class="{ active: showPreview }" @click="showPreview = !showPreview"><i class="ti ti-eye"></i></button>
<button class="submit _buttonGradate" :disabled="!canPost" data-cy-open-post-form-submit @click="post">{{ submitText }}<i :class="reply ? 'fas fa-reply' : renote ? 'fas fa-quote-right' : 'fas fa-paper-plane'"></i></button> <button class="submit _buttonGradate" :disabled="!canPost" data-cy-open-post-form-submit @click="post">{{ submitText }}<i :class="reply ? 'fas fa-reply' : renote ? 'ti ti-quote' : 'ti ti-send'"></i></button>
</div> </div>
</header> </header>
<div class="form" :class="{ fixed }"> <div class="form" :class="{ fixed }">
<XNoteSimple v-if="reply" class="preview" :note="reply"/> <XNoteSimple v-if="reply" class="preview" :note="reply"/>
<XNoteSimple v-if="renote" class="preview" :note="renote"/> <XNoteSimple v-if="renote" class="preview" :note="renote"/>
<div v-if="quoteId" class="with-quote"><i class="fas fa-quote-left"></i> {{ i18n.ts.quoteAttached }}<button @click="quoteId = null"><i class="fas fa-times"></i></button></div> <div v-if="quoteId" class="with-quote"><i class="ti ti-quote"></i> {{ i18n.ts.quoteAttached }}<button @click="quoteId = null"><i class="ti ti-x"></i></button></div>
<div v-if="visibility === 'specified'" class="to-specified"> <div v-if="visibility === 'specified'" class="to-specified">
<span style="margin-right: 8px;">{{ i18n.ts.recipient }}</span> <span style="margin-right: 8px;">{{ i18n.ts.recipient }}</span>
<div class="visibleUsers"> <div class="visibleUsers">
<span v-for="u in visibleUsers" :key="u.id"> <span v-for="u in visibleUsers" :key="u.id">
<MkAcct :user="u"/> <MkAcct :user="u"/>
<button class="_button" @click="removeVisibleUser(u)"><i class="fas fa-times"></i></button> <button class="_button" @click="removeVisibleUser(u)"><i class="ti ti-x"></i></button>
</span> </span>
<button class="_buttonPrimary" @click="addVisibleUser"><i class="fas fa-plus fa-fw"></i></button> <button class="_buttonPrimary" @click="addVisibleUser"><i class="ti ti-plus ti-fw"></i></button>
</div> </div>
</div> </div>
<MkInfo v-if="hasNotSpecifiedMentions" warn class="hasNotSpecifiedMentions">{{ i18n.ts.notSpecifiedMentionWarning }} - <button class="_textButton" @click="addMissingMention()">{{ i18n.ts.add }}</button></MkInfo> <MkInfo v-if="hasNotSpecifiedMentions" warn class="hasNotSpecifiedMentions">{{ i18n.ts.notSpecifiedMentionWarning }} - <button class="_textButton" @click="addMissingMention()">{{ i18n.ts.add }}</button></MkInfo>
@ -46,13 +47,13 @@
<XPollEditor v-if="poll" v-model="poll" @destroyed="poll = null"/> <XPollEditor v-if="poll" v-model="poll" @destroyed="poll = null"/>
<XNotePreview v-if="showPreview" class="preview" :text="text"/> <XNotePreview v-if="showPreview" class="preview" :text="text"/>
<footer> <footer>
<button v-tooltip="i18n.ts.attachFile" class="_button" @click="chooseFileFrom"><i class="fas fa-photo-video"></i></button> <button v-tooltip="i18n.ts.attachFile" class="_button" @click="chooseFileFrom"><i class="ti ti-photo"></i></button>
<button v-tooltip="i18n.ts.poll" class="_button" :class="{ active: poll }" @click="togglePoll"><i class="fas fa-poll-h"></i></button> <button v-tooltip="i18n.ts.poll" class="_button" :class="{ active: poll }" @click="togglePoll"><i class="ti ti-chart-arrows"></i></button>
<button v-tooltip="i18n.ts.useCw" class="_button" :class="{ active: useCw }" @click="useCw = !useCw"><i class="fas fa-eye-slash"></i></button> <button v-tooltip="i18n.ts.useCw" class="_button" :class="{ active: useCw }" @click="useCw = !useCw"><i class="ti ti-eye-off"></i></button>
<button v-tooltip="i18n.ts.mention" class="_button" @click="insertMention"><i class="fas fa-at"></i></button> <button v-tooltip="i18n.ts.mention" class="_button" @click="insertMention"><i class="ti ti-at"></i></button>
<button v-tooltip="i18n.ts.hashtags" class="_button" :class="{ active: withHashtags }" @click="withHashtags = !withHashtags"><i class="fas fa-hashtag"></i></button> <button v-tooltip="i18n.ts.hashtags" class="_button" :class="{ active: withHashtags }" @click="withHashtags = !withHashtags"><i class="ti ti-hash"></i></button>
<button v-tooltip="i18n.ts.emoji" class="_button" @click="insertEmoji"><i class="fas fa-laugh-squint"></i></button> <button v-tooltip="i18n.ts.emoji" class="_button" @click="insertEmoji"><i class="ti ti-mood-happy"></i></button>
<button v-if="postFormActions.length > 0" v-tooltip="i18n.ts.plugin" class="_button" @click="showActions"><i class="fas fa-plug"></i></button> <button v-if="postFormActions.length > 0" v-tooltip="i18n.ts.plugin" class="_button" @click="showActions"><i class="ti ti-plug"></i></button>
</footer> </footer>
<datalist id="hashtags"> <datalist id="hashtags">
<option v-for="hashtag in recentHashtags" :key="hashtag" :value="hashtag"/> <option v-for="hashtag in recentHashtags" :key="hashtag" :value="hashtag"/>
@ -68,6 +69,8 @@ import * as misskey from 'misskey-js';
import insertTextAtCursor from 'insert-text-at-cursor'; import insertTextAtCursor from 'insert-text-at-cursor';
import { length } from 'stringz'; import { length } from 'stringz';
import { toASCII } from 'punycode/'; import { toASCII } from 'punycode/';
import * as Acct from 'misskey-js/built/acct';
import { throttle } from 'throttle-debounce';
import XNoteSimple from './note-simple.vue'; import XNoteSimple from './note-simple.vue';
import XNotePreview from './note-preview.vue'; import XNotePreview from './note-preview.vue';
import XPostFormAttaches from './post-form-attaches.vue'; import XPostFormAttaches from './post-form-attaches.vue';
@ -75,14 +78,12 @@ import XPollEditor from './poll-editor.vue';
import { host, url } from '@/config'; import { host, url } from '@/config';
import { erase, unique } from '@/scripts/array'; import { erase, unique } from '@/scripts/array';
import { extractMentions } from '@/scripts/extract-mentions'; import { extractMentions } from '@/scripts/extract-mentions';
import * as Acct from 'misskey-js/built/acct';
import { formatTimeString } from '@/scripts/format-time-string'; import { formatTimeString } from '@/scripts/format-time-string';
import { Autocomplete } from '@/scripts/autocomplete'; import { Autocomplete } from '@/scripts/autocomplete';
import * as os from '@/os'; import * as os from '@/os';
import { stream } from '@/stream'; import { stream } from '@/stream';
import { selectFiles } from '@/scripts/select-file'; import { selectFiles } from '@/scripts/select-file';
import { defaultStore, notePostInterruptors, postFormActions } from '@/store'; import { defaultStore, notePostInterruptors, postFormActions } from '@/store';
import { throttle } from 'throttle-debounce';
import MkInfo from '@/components/ui/info.vue'; import MkInfo from '@/components/ui/info.vue';
import { i18n } from '@/i18n'; import { i18n } from '@/i18n';
import { instance } from '@/instance'; import { instance } from '@/instance';
@ -181,7 +182,7 @@ const placeholder = $computed((): string => {
i18n.ts._postForm._placeholders.c, i18n.ts._postForm._placeholders.c,
i18n.ts._postForm._placeholders.d, i18n.ts._postForm._placeholders.d,
i18n.ts._postForm._placeholders.e, i18n.ts._postForm._placeholders.e,
i18n.ts._postForm._placeholders.f i18n.ts._postForm._placeholders.f,
]; ];
return xs[Math.floor(Math.random() * xs.length)]; return xs[Math.floor(Math.random() * xs.length)];
} }
@ -263,7 +264,7 @@ if (props.reply && ['home', 'followers', 'specified'].includes(props.reply.visib
visibility = props.reply.visibility; visibility = props.reply.visibility;
if (props.reply.visibility === 'specified') { if (props.reply.visibility === 'specified') {
os.api('users/show', { os.api('users/show', {
userIds: props.reply.visibleUserIds.filter(uid => uid !== $i.id && uid !== props.reply.userId) userIds: props.reply.visibleUserIds.filter(uid => uid !== $i.id && uid !== props.reply.userId),
}).then(users => { }).then(users => {
users.forEach(pushVisibleUser); users.forEach(pushVisibleUser);
}); });
@ -399,7 +400,7 @@ function setVisibility() {
if (defaultStore.state.rememberNoteVisibility) { if (defaultStore.state.rememberNoteVisibility) {
defaultStore.set('localOnly', localOnly); defaultStore.set('localOnly', localOnly);
} }
} },
}, 'closed'); }, 'closed');
} }
@ -522,8 +523,8 @@ function saveDraft() {
visibility: visibility, visibility: visibility,
localOnly: localOnly, localOnly: localOnly,
files: files, files: files,
poll: poll poll: poll,
} },
}; };
localStorage.setItem('drafts', JSON.stringify(draftData)); localStorage.setItem('drafts', JSON.stringify(draftData));
@ -612,11 +613,11 @@ function showActions(ev) {
text: action.title, text: action.title,
action: () => { action: () => {
action.handler({ action.handler({
text: text text: text,
}, (key, value) => { }, (key, value) => {
if (key === 'text') { text = value; } if (key === 'text') { text = value; }
}); });
} },
})), ev.currentTarget ?? ev.target); })), ev.currentTarget ?? ev.target);
} }

View File

@ -1,5 +1,5 @@
<template> <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="ti ti-alert-triangle" style="margin-right: 8px;"></i>{{ $ts.remoteUserCaution }}<a :href="href" rel="nofollow noopener" target="_blank">{{ $ts.showOnRemote }}</a></div>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>

View File

@ -4,11 +4,11 @@
class="eddddedb _button canRenote" class="eddddedb _button canRenote"
@click="renote()" @click="renote()"
> >
<i class="fas fa-retweet"></i> <i class="ti ti-repeat"></i>
<p v-if="count > 0" class="count">{{ count }}</p> <p v-if="count > 0" class="count">{{ count }}</p>
</button> </button>
<button v-else class="eddddedb _button"> <button v-else class="eddddedb _button">
<i class="fas fa-ban"></i> <i class="ti ti-ban"></i>
</button> </button>
</template> </template>
@ -60,7 +60,7 @@ export default defineComponent({
pleaseLogin(); pleaseLogin();
os.popupMenu([{ os.popupMenu([{
text: i18n.ts.renote, text: i18n.ts.renote,
icon: 'fas fa-retweet', icon: 'ti ti-repeat',
action: () => { action: () => {
os.api('notes/create', { os.api('notes/create', {
renoteId: props.note.id renoteId: props.note.id
@ -68,7 +68,7 @@ export default defineComponent({
} }
}, { }, {
text: i18n.ts.quote, text: i18n.ts.quote,
icon: 'fas fa-quote-right', icon: 'ti ti-quote',
action: () => { action: () => {
os.post({ os.post({
renote: props.note, renote: props.note,

View File

@ -11,7 +11,7 @@
<template #suffix>@{{ host }}</template> <template #suffix>@{{ host }}</template>
</MkInput> </MkInput>
<MkInput v-if="!user || user && !user.usePasswordLessLogin" v-model="password" class="_formBlock" :placeholder="i18n.ts.password" type="password" :with-password-toggle="true" required data-cy-signin-password> <MkInput v-if="!user || user && !user.usePasswordLessLogin" v-model="password" class="_formBlock" :placeholder="i18n.ts.password" type="password" :with-password-toggle="true" required data-cy-signin-password>
<template #prefix><i class="fas fa-lock"></i></template> <template #prefix><i class="ti ti-lock"></i></template>
<template #caption><button class="_textButton" type="button" @click="resetPassword">{{ i18n.ts.forgotPassword }}</button></template> <template #caption><button class="_textButton" type="button" @click="resetPassword">{{ i18n.ts.forgotPassword }}</button></template>
</MkInput> </MkInput>
<MkButton class="_formBlock" type="submit" primary :disabled="signing" style="margin: 0 auto;">{{ signing ? i18n.ts.loggingIn : i18n.ts.login }}</MkButton> <MkButton class="_formBlock" type="submit" primary :disabled="signing" style="margin: 0 auto;">{{ signing ? i18n.ts.loggingIn : i18n.ts.login }}</MkButton>
@ -30,7 +30,7 @@
<p style="margin-bottom:0;">{{ i18n.ts.twoStepAuthentication }}</p> <p style="margin-bottom:0;">{{ i18n.ts.twoStepAuthentication }}</p>
<MkInput v-if="user && user.usePasswordLessLogin" v-model="password" type="password" :with-password-toggle="true" required> <MkInput v-if="user && user.usePasswordLessLogin" v-model="password" type="password" :with-password-toggle="true" required>
<template #label>{{ i18n.ts.password }}</template> <template #label>{{ i18n.ts.password }}</template>
<template #prefix><i class="fas fa-lock"></i></template> <template #prefix><i class="ti ti-lock"></i></template>
</MkInput> </MkInput>
<MkInput v-model="token" type="text" pattern="^[0-9]{6}$" autocomplete="off" spellcheck="false" required> <MkInput v-model="token" type="text" pattern="^[0-9]{6}$" autocomplete="off" spellcheck="false" required>
<template #label>{{ i18n.ts.token }}</template> <template #label>{{ i18n.ts.token }}</template>

View File

@ -10,45 +10,45 @@
<template #prefix>@</template> <template #prefix>@</template>
<template #suffix>@{{ host }}</template> <template #suffix>@{{ host }}</template>
<template #caption> <template #caption>
<span v-if="usernameState === 'wait'" style="color:#999"><i class="fas fa-spinner fa-pulse fa-fw"></i> {{ $ts.checking }}</span> <span v-if="usernameState === 'wait'" style="color:#999"><i class="fas fa-spinner fa-pulse ti-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 === 'ok'" style="color: var(--success)"><i class="ti ti-check ti-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 === 'unavailable'" style="color: var(--error)"><i class="ti ti-alert-triangle ti-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 === 'error'" style="color: var(--error)"><i class="ti ti-alert-triangle ti-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 === 'invalid-format'" style="color: var(--error)"><i class="ti ti-alert-triangle ti-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 === 'min-range'" style="color: var(--error)"><i class="ti ti-alert-triangle ti-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-else-if="usernameState === 'max-range'" style="color: var(--error)"><i class="ti ti-alert-triangle ti-fw"></i> {{ $ts.tooLong }}</span>
</template> </template>
</MkInput> </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"> <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 #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="ti ti-mail"></i></template>
<template #caption> <template #caption>
<span v-if="emailState === 'wait'" style="color:#999"><i class="fas fa-spinner fa-pulse fa-fw"></i> {{ $ts.checking }}</span> <span v-if="emailState === 'wait'" style="color:#999"><i class="fas fa-spinner fa-pulse ti-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 === 'ok'" style="color: var(--success)"><i class="ti ti-check ti-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:used'" style="color: var(--error)"><i class="ti ti-alert-triangle ti-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:format'" style="color: var(--error)"><i class="ti ti-alert-triangle ti-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:disposable'" style="color: var(--error)"><i class="ti ti-alert-triangle ti-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:mx'" style="color: var(--error)"><i class="ti ti-alert-triangle ti-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:smtp'" style="color: var(--error)"><i class="ti ti-alert-triangle ti-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 === 'unavailable'" style="color: var(--error)"><i class="ti ti-alert-triangle ti-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-else-if="emailState === 'error'" style="color: var(--error)"><i class="ti ti-alert-triangle ti-fw"></i> {{ $ts.error }}</span>
</template> </template>
</MkInput> </MkInput>
<MkInput v-model="password" class="_formBlock" type="password" autocomplete="new-password" required data-cy-signup-password @update:modelValue="onChangePassword"> <MkInput v-model="password" class="_formBlock" type="password" autocomplete="new-password" required data-cy-signup-password @update:modelValue="onChangePassword">
<template #label>{{ $ts.password }}</template> <template #label>{{ $ts.password }}</template>
<template #prefix><i class="fas fa-lock"></i></template> <template #prefix><i class="ti ti-lock"></i></template>
<template #caption> <template #caption>
<span v-if="passwordStrength == 'low'" style="color: var(--error)"><i class="fas fa-exclamation-triangle fa-fw"></i> {{ $ts.weakPassword }}</span> <span v-if="passwordStrength == 'low'" style="color: var(--error)"><i class="ti ti-alert-triangle ti-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 == 'medium'" style="color: var(--warn)"><i class="ti ti-check ti-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 == 'high'" style="color: var(--success)"><i class="ti ti-check ti-fw"></i> {{ $ts.strongPassword }}</span>
</template> </template>
</MkInput> </MkInput>
<MkInput v-model="retypedPassword" class="_formBlock" type="password" autocomplete="new-password" required data-cy-signup-password-retype @update:modelValue="onChangePasswordRetype"> <MkInput v-model="retypedPassword" class="_formBlock" type="password" autocomplete="new-password" required data-cy-signup-password-retype @update:modelValue="onChangePasswordRetype">
<template #label>{{ $ts.password }} ({{ $ts.retype }})</template> <template #label>{{ $ts.password }} ({{ $ts.retype }})</template>
<template #prefix><i class="fas fa-lock"></i></template> <template #prefix><i class="ti ti-lock"></i></template>
<template #caption> <template #caption>
<span v-if="passwordRetypeState == 'match'" style="color: var(--success)"><i class="fas fa-check fa-fw"></i> {{ $ts.passwordMatched }}</span> <span v-if="passwordRetypeState == 'match'" style="color: var(--success)"><i class="ti ti-check ti-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 == 'not-match'" style="color: var(--error)"><i class="ti ti-alert-triangle ti-fw"></i> {{ $ts.passwordNotMatched }}</span>
</template> </template>
</MkInput> </MkInput>
<MkSwitch v-if="meta.tosUrl" v-model="ToSAgreement" class="_formBlock tou"> <MkSwitch v-if="meta.tosUrl" v-model="ToSAgreement" class="_formBlock tou">

View File

@ -1,7 +1,7 @@
<template> <template>
<div class="fpezltsf" :class="{ warn }"> <div class="fpezltsf" :class="{ warn }">
<i v-if="warn" class="fas fa-exclamation-triangle"></i> <i v-if="warn" class="ti ti-alert-triangle"></i>
<i v-else class="fas fa-info-circle"></i> <i v-else class="ti ti-info-circle"></i>
<slot></slot> <slot></slot>
</div> </div>
</template> </template>

View File

@ -15,13 +15,13 @@
<span><MkEllipsis/></span> <span><MkEllipsis/></span>
</span> </span>
<MkA v-else-if="item.type === 'link'" :to="item.to" :tabindex="i" class="_button item" @click.passive="close()"> <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="ti-fw" :class="item.icon"></i>
<MkAvatar v-if="item.avatar" :user="item.avatar" class="avatar"/> <MkAvatar v-if="item.avatar" :user="item.avatar" class="avatar"/>
<span>{{ item.text }}</span> <span>{{ item.text }}</span>
<span v-if="item.indicate" class="indicator"><i class="fas fa-circle"></i></span> <span v-if="item.indicate" class="indicator"><i class="fas fa-circle"></i></span>
</MkA> </MkA>
<a v-else-if="item.type === 'a'" :href="item.href" :target="item.target" :download="item.download" :tabindex="i" class="_button item" @click="close()"> <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="ti-fw" :class="item.icon"></i>
<span>{{ item.text }}</span> <span>{{ item.text }}</span>
<span v-if="item.indicate" class="indicator"><i class="fas fa-circle"></i></span> <span v-if="item.indicate" class="indicator"><i class="fas fa-circle"></i></span>
</a> </a>
@ -33,7 +33,7 @@
<FormSwitch v-model="item.ref" :disabled="item.disabled" class="form-switch">{{ item.text }}</FormSwitch> <FormSwitch v-model="item.ref" :disabled="item.disabled" class="form-switch">{{ item.text }}</FormSwitch>
</span> </span>
<button v-else :tabindex="i" class="_button item" :class="{ danger: item.danger, active: item.active }" :disabled="item.active" @click="clicked(item.action, $event)"> <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="ti-fw" :class="item.icon"></i>
<MkAvatar v-if="item.avatar" :user="item.avatar" class="avatar"/> <MkAvatar v-if="item.avatar" :user="item.avatar" class="avatar"/>
<span>{{ item.text }}</span> <span>{{ item.text }}</span>
<span v-if="item.indicate" class="indicator"><i class="fas fa-circle"></i></span> <span v-if="item.indicate" class="indicator"><i class="fas fa-circle"></i></span>

View File

@ -2,12 +2,12 @@
<MkModal ref="modal" :prefer-type="'dialog'" @click="onBgClick" @closed="$emit('closed')"> <MkModal ref="modal" :prefer-type="'dialog'" @click="onBgClick" @closed="$emit('closed')">
<div ref="rootEl" class="ebkgoccj _window _narrow_" :style="{ width: `${width}px`, height: scroll ? (height ? `${height}px` : null) : (height ? `min(${height}px, 100%)` : '100%') }" @keydown="onKeydown"> <div ref="rootEl" class="ebkgoccj _window _narrow_" :style="{ width: `${width}px`, height: scroll ? (height ? `${height}px` : null) : (height ? `min(${height}px, 100%)` : '100%') }" @keydown="onKeydown">
<div ref="headerEl" class="header"> <div ref="headerEl" class="header">
<button v-if="withOkButton" class="_button" @click="$emit('close')"><i class="fas fa-times"></i></button> <button v-if="withOkButton" class="_button" @click="$emit('close')"><i class="ti ti-x"></i></button>
<span class="title"> <span class="title">
<slot name="header"></slot> <slot name="header"></slot>
</span> </span>
<button v-if="!withOkButton" class="_button" @click="$emit('close')"><i class="fas fa-times"></i></button> <button v-if="!withOkButton" class="_button" @click="$emit('close')"><i class="ti ti-x"></i></button>
<button v-if="withOkButton" class="_button" :disabled="okButtonDisabled" @click="$emit('ok')"><i class="fas fa-check"></i></button> <button v-if="withOkButton" class="_button" :disabled="okButtonDisabled" @click="$emit('ok')"><i class="ti ti-check"></i></button>
</div> </div>
<div v-if="padding" class="body"> <div v-if="padding" class="body">
<div class="_section"> <div class="_section">

View File

@ -6,15 +6,15 @@
<div class="items"> <div class="items">
<template v-for="(item, i) in group.items"> <template v-for="(item, i) in group.items">
<a v-if="item.type === 'a'" :href="item.href" :target="item.target" :tabindex="i" class="_button item" :class="{ danger: item.danger, active: item.active }"> <a v-if="item.type === 'a'" :href="item.href" :target="item.target" :tabindex="i" class="_button item" :class="{ danger: item.danger, active: item.active }">
<i v-if="item.icon" class="icon fa-fw" :class="item.icon"></i> <i v-if="item.icon" class="icon ti-fw" :class="item.icon"></i>
<span class="text">{{ item.text }}</span> <span class="text">{{ item.text }}</span>
</a> </a>
<button v-else-if="item.type === 'button'" :tabindex="i" class="_button item" :class="{ danger: item.danger, active: item.active }" :disabled="item.active" @click="ev => item.action(ev)"> <button v-else-if="item.type === 'button'" :tabindex="i" class="_button item" :class="{ danger: item.danger, active: item.active }" :disabled="item.active" @click="ev => item.action(ev)">
<i v-if="item.icon" class="icon fa-fw" :class="item.icon"></i> <i v-if="item.icon" class="icon ti-fw" :class="item.icon"></i>
<span class="text">{{ item.text }}</span> <span class="text">{{ item.text }}</span>
</button> </button>
<MkA v-else :to="item.to" :tabindex="i" class="_button item" :class="{ danger: item.danger, active: item.active }"> <MkA v-else :to="item.to" :tabindex="i" class="_button item" :class="{ danger: item.danger, active: item.active }">
<i v-if="item.icon" class="icon fa-fw" :class="item.icon"></i> <i v-if="item.icon" class="icon ti-fw" :class="item.icon"></i>
<span class="text">{{ item.text }}</span> <span class="text">{{ item.text }}</span>
</MkA> </MkA>
</template> </template>

View File

@ -11,7 +11,7 @@
</span> </span>
<span class="right"> <span class="right">
<slot name="headerRight"></slot> <slot name="headerRight"></slot>
<button v-if="closeButton" class="_button" @click="close()"><i class="fas fa-times"></i></button> <button v-if="closeButton" class="_button" @click="close()"><i class="ti ti-x"></i></button>
</span> </span>
</div> </div>
<div v-if="padding" class="body"> <div v-if="padding" class="body">

View File

@ -1,6 +1,6 @@
<template> <template>
<div v-if="playerEnabled" class="player" :style="`padding: ${(player.height || 0) / (player.width || 1) * 100}% 0 0`"> <div v-if="playerEnabled" class="player" :style="`padding: ${(player.height || 0) / (player.width || 1) * 100}% 0 0`">
<button class="disablePlayer" :title="$ts.disablePlayer" @click="playerEnabled = false"><i class="fas fa-times"></i></button> <button class="disablePlayer" :title="$ts.disablePlayer" @click="playerEnabled = false"><i class="ti ti-x"></i></button>
<iframe :src="player.url + (player.url.match(/\?/) ? '&autoplay=1&auto_play=1' : '?autoplay=1&auto_play=1')" :width="player.width || '100%'" :heigth="player.height || 250" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen /> <iframe :src="player.url + (player.url.match(/\?/) ? '&autoplay=1&auto_play=1' : '?autoplay=1&auto_play=1')" :width="player.width || '100%'" :heigth="player.height || 250" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen />
</div> </div>
<div v-else-if="tweetId && tweetExpanded" ref="twitter" class="twitter"> <div v-else-if="tweetId && tweetExpanded" ref="twitter" class="twitter">

View File

@ -2,14 +2,14 @@
<MkModal ref="modal" :z-priority="'high'" :src="src" @click="modal.close()" @closed="emit('closed')"> <MkModal ref="modal" :z-priority="'high'" :src="src" @click="modal.close()" @closed="emit('closed')">
<div class="gqyayizv _popup"> <div class="gqyayizv _popup">
<button key="public" class="_button" :class="{ active: v === 'public' }" data-index="1" @click="choose('public')"> <button key="public" class="_button" :class="{ active: v === 'public' }" data-index="1" @click="choose('public')">
<div><i class="fas fa-globe"></i></div> <div><i class="ti ti-world"></i></div>
<div> <div>
<span>{{ $ts._visibility.public }}</span> <span>{{ $ts._visibility.public }}</span>
<span>{{ $ts._visibility.publicDescription }}</span> <span>{{ $ts._visibility.publicDescription }}</span>
</div> </div>
</button> </button>
<button key="home" class="_button" :class="{ active: v === 'home' }" data-index="2" @click="choose('home')"> <button key="home" class="_button" :class="{ active: v === 'home' }" data-index="2" @click="choose('home')">
<div><i class="fas fa-home"></i></div> <div><i class="ti ti-home-2"></i></div>
<div> <div>
<span>{{ $ts._visibility.home }}</span> <span>{{ $ts._visibility.home }}</span>
<span>{{ $ts._visibility.homeDescription }}</span> <span>{{ $ts._visibility.homeDescription }}</span>
@ -23,7 +23,7 @@
</div> </div>
</button> </button>
<button key="specified" :disabled="localOnly" class="_button" :class="{ active: v === 'specified' }" data-index="4" @click="choose('specified')"> <button key="specified" :disabled="localOnly" class="_button" :class="{ active: v === 'specified' }" data-index="4" @click="choose('specified')">
<div><i class="fas fa-envelope"></i></div> <div><i class="ti ti-mail"></i></div>
<div> <div>
<span>{{ $ts._visibility.specified }}</span> <span>{{ $ts._visibility.specified }}</span>
<span>{{ $ts._visibility.specifiedDescription }}</span> <span>{{ $ts._visibility.specifiedDescription }}</span>

View File

@ -1,7 +1,7 @@
<template> <template>
<MkModal ref="modal" :prefer-type="'dialog'" :z-priority="'high'" @click="success ? done() : () => {}" @closed="emit('closed')"> <MkModal ref="modal" :prefer-type="'dialog'" :z-priority="'high'" @click="success ? done() : () => {}" @closed="emit('closed')">
<div class="iuyakobc" :class="{ iconOnly: (text == null) || success }"> <div class="iuyakobc" :class="{ iconOnly: (text == null) || success }">
<i v-if="success" class="fas fa-check icon success"></i> <i v-if="success" class="ti ti-check icon success"></i>
<i v-else class="fas fa-spinner fa-pulse icon waiting"></i> <i v-else class="fas fa-spinner fa-pulse icon waiting"></i>
<div v-if="text && !success" class="text">{{ text }}<MkEllipsis/></div> <div v-if="text && !success" class="text">{{ text }}<MkEllipsis/></div>
</div> </div>

View File

@ -6,7 +6,7 @@
<template #label>{{ $ts.selectWidget }}</template> <template #label>{{ $ts.selectWidget }}</template>
<option v-for="widget in widgetDefs" :key="widget" :value="widget">{{ $t(`_widgets.${widget}`) }}</option> <option v-for="widget in widgetDefs" :key="widget" :value="widget">{{ $t(`_widgets.${widget}`) }}</option>
</MkSelect> </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="ti ti-plus"></i> {{ $ts.add }}</MkButton>
<MkButton inline @click="$emit('exit')">{{ $ts.close }}</MkButton> <MkButton inline @click="$emit('exit')">{{ $ts.close }}</MkButton>
</header> </header>
<XDraggable <XDraggable
@ -17,8 +17,8 @@
> >
<template #item="{element}"> <template #item="{element}">
<div class="customize-container"> <div class="customize-container">
<button class="config _button" @click.prevent.stop="configWidget(element.id)"><i class="fas fa-cog"></i></button> <button class="config _button" @click.prevent.stop="configWidget(element.id)"><i class="ti ti-settings"></i></button>
<button class="remove _button" @click.prevent.stop="removeWidget(element)"><i class="fas fa-times"></i></button> <button class="remove _button" @click.prevent.stop="removeWidget(element)"><i class="ti ti-x"></i></button>
<component :is="`mkw-${element.name}`" :ref="el => widgetRefs[element.id] = el" class="handle" :widget="element" @updateProps="updateWidget(element.id, $event)"/> <component :is="`mkw-${element.name}`" :ref="el => widgetRefs[element.id] = el" class="handle" :widget="element" @updateProps="updateWidget(element.id, $event)"/>
</div> </div>
</template> </template>

View File

@ -10,39 +10,39 @@ import { router } from './router';
export const menuDef = reactive({ export const menuDef = reactive({
notifications: { notifications: {
title: 'notifications', title: 'notifications',
icon: 'fas fa-bell', icon: 'ti ti-bell-ringing-2',
show: computed(() => $i != null), show: computed(() => $i != null),
indicated: computed(() => $i != null && $i.hasUnreadNotification), indicated: computed(() => $i != null && $i.hasUnreadNotification),
to: '/my/notifications', to: '/my/notifications',
}, },
messaging: { messaging: {
title: 'messaging', title: 'messaging',
icon: 'fas fa-comments', icon: 'ti ti-messages',
show: computed(() => $i != null), show: computed(() => $i != null),
indicated: computed(() => $i != null && $i.hasUnreadMessagingMessage), indicated: computed(() => $i != null && $i.hasUnreadMessagingMessage),
to: '/my/messaging', to: '/my/messaging',
}, },
drive: { drive: {
title: 'drive', title: 'drive',
icon: 'fas fa-cloud', icon: 'ti ti-cloud',
show: computed(() => $i != null), show: computed(() => $i != null),
to: '/my/drive', to: '/my/drive',
}, },
followRequests: { followRequests: {
title: 'followRequests', title: 'followRequests',
icon: 'fas fa-user-clock', icon: 'ti ti-user-clock',
show: computed(() => $i != null && $i.isLocked), show: computed(() => $i != null && $i.isLocked),
indicated: computed(() => $i != null && $i.hasPendingReceivedFollowRequest), indicated: computed(() => $i != null && $i.hasPendingReceivedFollowRequest),
to: '/my/follow-requests', to: '/my/follow-requests',
}, },
featured: { featured: {
title: 'featured', title: 'featured',
icon: 'fas fa-fire-alt', icon: 'ti ti-flame',
to: '/featured', to: '/featured',
}, },
explore: { explore: {
title: 'explore', title: 'explore',
icon: 'fas fa-hashtag', icon: 'ti ti-hash',
to: '/explore', to: '/explore',
}, },
announcements: { announcements: {
@ -53,12 +53,12 @@ export const menuDef = reactive({
}, },
search: { search: {
title: 'search', title: 'search',
icon: 'fas fa-search', icon: 'ti ti-search',
action: () => search(), action: () => search(),
}, },
lists: { lists: {
title: 'lists', title: 'lists',
icon: 'fas fa-list-ul', icon: 'ti ti-list',
show: computed(() => $i != null), show: computed(() => $i != null),
active: computed(() => router.currentRoute.value.path.startsWith('/timeline/list/') || router.currentRoute.value.path === '/my/lists' || router.currentRoute.value.path.startsWith('/my/lists/')), active: computed(() => router.currentRoute.value.path.startsWith('/timeline/list/') || router.currentRoute.value.path === '/my/lists' || router.currentRoute.value.path.startsWith('/my/lists/')),
action: (ev) => { action: (ev) => {
@ -74,7 +74,7 @@ export const menuDef = reactive({
type: 'link', type: 'link',
to: '/my/lists', to: '/my/lists',
text: i18n.ts.manageLists, text: i18n.ts.manageLists,
icon: 'fas fa-cog', icon: 'ti ti-settings',
}]; }];
items.value = _items; items.value = _items;
}); });
@ -83,13 +83,13 @@ export const menuDef = reactive({
}, },
groups: { groups: {
title: 'groups', title: 'groups',
icon: 'fas fa-users', icon: 'ti ti-users',
show: computed(() => $i != null), show: computed(() => $i != null),
to: '/my/groups', to: '/my/groups',
}, },
antennas: { antennas: {
title: 'antennas', title: 'antennas',
icon: 'fas fa-satellite', icon: 'ti ti-satellite',
show: computed(() => $i != null), 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/')), active: computed(() => router.currentRoute.value.path.startsWith('/timeline/antenna/') || router.currentRoute.value.path === '/my/antennas' || router.currentRoute.value.path.startsWith('/my/antennas/')),
action: (ev) => { action: (ev) => {
@ -105,7 +105,7 @@ export const menuDef = reactive({
type: 'link', type: 'link',
to: '/my/antennas', to: '/my/antennas',
text: i18n.ts.manageAntennas, text: i18n.ts.manageAntennas,
icon: 'fas fa-cog', icon: 'ti ti-settings',
}]; }];
items.value = _items; items.value = _items;
}); });
@ -114,21 +114,21 @@ export const menuDef = reactive({
}, },
mentions: { mentions: {
title: 'mentions', title: 'mentions',
icon: 'fas fa-at', icon: 'ti ti-at',
show: computed(() => $i != null), show: computed(() => $i != null),
indicated: computed(() => $i != null && $i.hasUnreadMentions), indicated: computed(() => $i != null && $i.hasUnreadMentions),
to: '/my/mentions', to: '/my/mentions',
}, },
messages: { messages: {
title: 'directNotes', title: 'directNotes',
icon: 'fas fa-envelope', icon: 'ti ti-mail',
show: computed(() => $i != null), show: computed(() => $i != null),
indicated: computed(() => $i != null && $i.hasUnreadSpecifiedNotes), indicated: computed(() => $i != null && $i.hasUnreadSpecifiedNotes),
to: '/my/messages', to: '/my/messages',
}, },
favorites: { favorites: {
title: 'favorites', title: 'favorites',
icon: 'fas fa-star', icon: 'ti ti-star',
show: computed(() => $i != null), show: computed(() => $i != null),
to: '/my/favorites', to: '/my/favorites',
}, },
@ -144,23 +144,23 @@ export const menuDef = reactive({
}, },
clips: { clips: {
title: 'clip', title: 'clip',
icon: 'fas fa-paperclip', icon: 'ti ti-paperclip',
show: computed(() => $i != null), show: computed(() => $i != null),
to: '/my/clips', to: '/my/clips',
}, },
channels: { channels: {
title: 'channel', title: 'channel',
icon: 'fas fa-satellite-dish', icon: 'ti ti-satellite-dish',
to: '/channels', to: '/channels',
}, },
federation: { federation: {
title: 'federation', title: 'federation',
icon: 'fas fa-globe', icon: 'ti ti-world',
to: '/federation', to: '/federation',
}, },
emojis: { emojis: {
title: 'emojis', title: 'emojis',
icon: 'fas fa-laugh', icon: 'ti ti-mood-happy',
to: '/emojis', to: '/emojis',
}, },
scratchpad: { scratchpad: {

View File

@ -3,7 +3,7 @@
<transition :name="$store.state.animation ? 'zoom' : ''" appear> <transition :name="$store.state.animation ? 'zoom' : ''" appear>
<div v-show="loaded" class="mjndxjch"> <div v-show="loaded" class="mjndxjch">
<img src="https://xn--931a.moe/assets/error.jpg" class="_ghost"/> <img src="https://xn--931a.moe/assets/error.jpg" class="_ghost"/>
<p><b><i class="fas fa-exclamation-triangle"></i> {{ i18n.ts.pageLoadError }}</b></p> <p><b><i class="ti ti-alert-triangle"></i> {{ i18n.ts.pageLoadError }}</b></p>
<p v-if="meta && (version === meta.version)">{{ i18n.ts.pageLoadErrorDescription }}</p> <p v-if="meta && (version === meta.version)">{{ i18n.ts.pageLoadErrorDescription }}</p>
<p v-else-if="serverIsDead">{{ i18n.ts.serverIsDead }}</p> <p v-else-if="serverIsDead">{{ i18n.ts.serverIsDead }}</p>
<template v-else> <template v-else>
@ -55,7 +55,7 @@ function reload() {
defineExpose({ defineExpose({
[symbols.PAGE_INFO]: { [symbols.PAGE_INFO]: {
title: i18n.ts.error, title: i18n.ts.error,
icon: 'fas fa-exclamation-triangle', icon: 'ti ti-alert-triangle',
}, },
}); });
</script> </script>

View File

@ -23,7 +23,7 @@
<template #suffix>GitHub</template> <template #suffix>GitHub</template>
</FormLink> </FormLink>
<FormLink to="https://crowdin.com/project/misskey" external> <FormLink to="https://crowdin.com/project/misskey" external>
<template #icon><i class="fas fa-language"></i></template> <template #icon><i class="ti ti-language-hiragana"></i></template>
{{ i18n.ts._aboutMisskey.translation }} {{ i18n.ts._aboutMisskey.translation }}
<template #suffix>Crowdin</template> <template #suffix>Crowdin</template>
</FormLink> </FormLink>

View File

@ -96,7 +96,7 @@ const initStats = () => os.api('stats', {
defineExpose({ defineExpose({
[symbols.PAGE_INFO]: computed(() => ({ [symbols.PAGE_INFO]: computed(() => ({
title: i18n.ts.instanceInfo, title: i18n.ts.instanceInfo,
icon: 'fas fa-info-circle', icon: 'ti ti-info-circle',
bg: 'var(--bg)', bg: 'var(--bg)',
tabs: [{ tabs: [{
active: tab === 'overview', active: tab === 'overview',

View File

@ -77,7 +77,7 @@ function resolved(reportId) {
defineExpose({ defineExpose({
[symbols.PAGE_INFO]: { [symbols.PAGE_INFO]: {
title: i18n.ts.abuseReports, title: i18n.ts.abuseReports,
icon: 'fas fa-exclamation-circle', icon: 'ti ti-alert-circle',
bg: 'var(--bg)', bg: 'var(--bg)',
} }
}); });

View File

@ -36,7 +36,7 @@
</MkTextarea> </MkTextarea>
<div class="buttons _formBlock"> <div class="buttons _formBlock">
<MkButton class="button" inline primary style="margin-right: 12px;" @click="save(ad)"><i class="fas fa-save"></i> {{ i18n.ts.save }}</MkButton> <MkButton class="button" inline primary style="margin-right: 12px;" @click="save(ad)"><i class="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="ti ti-trash"></i> {{ i18n.ts.remove }}</MkButton>
</div> </div>
</div> </div>
</div> </div>
@ -103,11 +103,11 @@ function save(ad) {
defineExpose({ defineExpose({
[symbols.PAGE_INFO]: { [symbols.PAGE_INFO]: {
title: i18n.ts.ads, title: i18n.ts.ads,
icon: 'fas fa-audio-description', icon: 'ti ti-ad',
bg: 'var(--bg)', bg: 'var(--bg)',
actions: [{ actions: [{
asFullButton: true, asFullButton: true,
icon: 'fas fa-plus', icon: 'ti ti-plus',
text: i18n.ts.add, text: i18n.ts.add,
handler: add, handler: add,
}], }],

View File

@ -14,7 +14,7 @@
<p v-if="announcement.reads">{{ i18n.t('nUsersRead', { n: announcement.reads }) }}</p> <p v-if="announcement.reads">{{ i18n.t('nUsersRead', { n: announcement.reads }) }}</p>
<div class="buttons"> <div class="buttons">
<MkButton class="button" inline primary @click="save(announcement)"><i class="fas fa-save"></i> {{ i18n.ts.save }}</MkButton> <MkButton class="button" inline primary @click="save(announcement)"><i class="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="ti ti-trash"></i> {{ i18n.ts.remove }}</MkButton>
</div> </div>
</div> </div>
</section> </section>
@ -91,7 +91,7 @@ defineExpose({
bg: 'var(--bg)', bg: 'var(--bg)',
actions: [{ actions: [{
asFullButton: true, asFullButton: true,
icon: 'fas fa-plus', icon: 'ti ti-plus',
text: i18n.ts.add, text: i18n.ts.add,
handler: add, handler: add,
}], }],

View File

@ -105,7 +105,7 @@ function save() {
defineExpose({ defineExpose({
[symbols.PAGE_INFO]: { [symbols.PAGE_INFO]: {
title: i18n.ts.emailServer, title: i18n.ts.emailServer,
icon: 'fas fa-envelope', icon: 'ti ti-mail',
bg: 'var(--bg)', bg: 'var(--bg)',
actions: [{ actions: [{
asFullButton: true, asFullButton: true,
@ -113,7 +113,7 @@ defineExpose({
handler: testEmail, handler: testEmail,
}, { }, {
asFullButton: true, asFullButton: true,
icon: 'fas fa-check', icon: 'ti ti-check',
text: i18n.ts.save, text: i18n.ts.save,
handler: save, handler: save,
}], }],

View File

@ -21,7 +21,7 @@
<template #label>{{ $ts.tags }}</template> <template #label>{{ $ts.tags }}</template>
<template #caption>{{ $ts.setMultipleBySeparatingWithSpace }}</template> <template #caption>{{ $ts.setMultipleBySeparatingWithSpace }}</template>
</MkInput> </MkInput>
<MkButton danger @click="del()"><i class="fas fa-trash-alt"></i> {{ $ts.delete }}</MkButton> <MkButton danger @click="del()"><i class="ti ti-trash"></i> {{ $ts.delete }}</MkButton>
</div> </div>
</div> </div>
</XModalWindow> </XModalWindow>

View File

@ -3,7 +3,7 @@
<div class="ogwlenmc"> <div class="ogwlenmc">
<div v-if="tab === 'local'" class="local"> <div v-if="tab === 'local'" class="local">
<MkInput v-model="query" :debounce="true" type="search"> <MkInput v-model="query" :debounce="true" type="search">
<template #prefix><i class="fas fa-search"></i></template> <template #prefix><i class="ti ti-search"></i></template>
<template #label>{{ $ts.search }}</template> <template #label>{{ $ts.search }}</template>
</MkInput> </MkInput>
<MkSwitch v-model="selectMode" style="margin: 8px 0;"> <MkSwitch v-model="selectMode" style="margin: 8px 0;">
@ -36,7 +36,7 @@
<div v-else-if="tab === 'remote'" class="remote"> <div v-else-if="tab === 'remote'" class="remote">
<FormSplit> <FormSplit>
<MkInput v-model="queryRemote" :debounce="true" type="search"> <MkInput v-model="queryRemote" :debounce="true" type="search">
<template #prefix><i class="fas fa-search"></i></template> <template #prefix><i class="ti ti-search"></i></template>
<template #label>{{ $ts.search }}</template> <template #label>{{ $ts.search }}</template>
</MkInput> </MkInput>
<MkInput v-model="host" :debounce="true"> <MkInput v-model="host" :debounce="true">
@ -158,14 +158,14 @@ const remoteMenu = (emoji, ev: MouseEvent) => {
text: ':' + emoji.name + ':', text: ':' + emoji.name + ':',
}, { }, {
text: i18n.ts.import, text: i18n.ts.import,
icon: 'fas fa-plus', icon: 'ti ti-plus',
action: () => { im(emoji); } action: () => { im(emoji); }
}], ev.currentTarget ?? ev.target); }], ev.currentTarget ?? ev.target);
}; };
const menu = (ev: MouseEvent) => { const menu = (ev: MouseEvent) => {
os.popupMenu([{ os.popupMenu([{
icon: 'fas fa-download', icon: 'ti ti-download',
text: i18n.ts.export, text: i18n.ts.export,
action: async () => { action: async () => {
os.api('export-custom-emojis', { os.api('export-custom-emojis', {
@ -183,7 +183,7 @@ const menu = (ev: MouseEvent) => {
}); });
} }
}, { }, {
icon: 'fas fa-upload', icon: 'ti ti-upload',
text: i18n.ts.import, text: i18n.ts.import,
action: async () => { action: async () => {
const file = await selectFile(ev.currentTarget ?? ev.target); const file = await selectFile(ev.currentTarget ?? ev.target);
@ -268,15 +268,15 @@ const delBulk = async () => {
defineExpose({ defineExpose({
[symbols.PAGE_INFO]: computed(() => ({ [symbols.PAGE_INFO]: computed(() => ({
title: i18n.ts.customEmojis, title: i18n.ts.customEmojis,
icon: 'fas fa-laugh', icon: 'ti ti-mood-happy',
bg: 'var(--bg)', bg: 'var(--bg)',
actions: [{ actions: [{
asFullButton: true, asFullButton: true,
icon: 'fas fa-plus', icon: 'ti ti-plus',
text: i18n.ts.addEmoji, text: i18n.ts.addEmoji,
handler: add, handler: add,
}, { }, {
icon: 'fas fa-ellipsis-h', icon: 'ti ti-dots',
handler: menu, handler: menu,
}], }],
tabs: [{ tabs: [{

View File

@ -22,7 +22,7 @@
<div class="_section"> <div class="_section">
<div class="_content"> <div class="_content">
<MkButton full @click="showUser"><i class="fas fa-external-link-square-alt"></i> {{ $ts.user }}</MkButton> <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="ti ti-trash"></i> {{ $ts.delete }}</MkButton>
</div> </div>
</div> </div>
<div v-if="info" class="_section"> <div v-if="info" class="_section">

View File

@ -1,12 +1,12 @@
<template> <template>
<div class="xrmjdkdw"> <div class="xrmjdkdw">
<MkContainer :foldable="true" class="lookup"> <MkContainer :foldable="true" class="lookup">
<template #header><i class="fas fa-search"></i> {{ $ts.lookup }}</template> <template #header><i class="ti ti-search"></i> {{ $ts.lookup }}</template>
<div class="xrmjdkdw-lookup"> <div class="xrmjdkdw-lookup">
<MkInput v-model="q" class="item" type="text" @enter="find()"> <MkInput v-model="q" class="item" type="text" @enter="find()">
<template #label>{{ $ts.fileIdOrUrl }}</template> <template #label>{{ $ts.fileIdOrUrl }}</template>
</MkInput> </MkInput>
<MkButton primary @click="find()"><i class="fas fa-search"></i> {{ $ts.lookup }}</MkButton> <MkButton primary @click="find()"><i class="ti ti-search"></i> {{ $ts.lookup }}</MkButton>
</div> </div>
</MkContainer> </MkContainer>
@ -114,11 +114,11 @@ function find() {
defineExpose({ defineExpose({
[symbols.PAGE_INFO]: computed(() => ({ [symbols.PAGE_INFO]: computed(() => ({
title: i18n.ts.files, title: i18n.ts.files,
icon: 'fas fa-cloud', icon: 'ti ti-cloud',
bg: 'var(--bg)', bg: 'var(--bg)',
actions: [{ actions: [{
text: i18n.ts.clearCachedFiles, text: i18n.ts.clearCachedFiles,
icon: 'fas fa-trash-alt', icon: 'ti ti-trash',
handler: clear, handler: clear,
}], }],
})), })),

View File

@ -43,7 +43,7 @@ const nav = new MisskeyNavigator();
const indexInfo = { const indexInfo = {
title: i18n.ts.controlPanel, title: i18n.ts.controlPanel,
icon: 'fas fa-cog', icon: 'ti ti-settings',
bg: 'var(--bg)', bg: 'var(--bg)',
hideHeader: true, hideHeader: true,
}; };
@ -74,12 +74,12 @@ const menuDef = $computed(() => [{
title: i18n.ts.quickAction, title: i18n.ts.quickAction,
items: [{ items: [{
type: 'button', type: 'button',
icon: 'fas fa-search', icon: 'ti ti-search',
text: i18n.ts.lookup, text: i18n.ts.lookup,
action: lookup, action: lookup,
}, ...(instance.disableRegistration ? [{ }, ...(instance.disableRegistration ? [{
type: 'button', type: 'button',
icon: 'fas fa-user', icon: 'ti ti-user',
text: i18n.ts.invite, text: i18n.ts.invite,
action: invite, action: invite,
}] : [])], }] : [])],
@ -91,17 +91,17 @@ const menuDef = $computed(() => [{
to: '/admin/overview', to: '/admin/overview',
active: props.initialPage === 'overview', active: props.initialPage === 'overview',
}, { }, {
icon: 'fas fa-users', icon: 'ti ti-users',
text: i18n.ts.users, text: i18n.ts.users,
to: '/admin/users', to: '/admin/users',
active: props.initialPage === 'users', active: props.initialPage === 'users',
}, { }, {
icon: 'fas fa-laugh', icon: 'ti ti-mood-happy',
text: i18n.ts.customEmojis, text: i18n.ts.customEmojis,
to: '/admin/emojis', to: '/admin/emojis',
active: props.initialPage === 'emojis', active: props.initialPage === 'emojis',
}, { }, {
icon: 'fas fa-globe', icon: 'ti ti-world',
text: i18n.ts.federation, text: i18n.ts.federation,
to: '/admin/federation', to: '/admin/federation',
active: props.initialPage === 'federation', active: props.initialPage === 'federation',
@ -111,7 +111,7 @@ const menuDef = $computed(() => [{
to: '/admin/queue', to: '/admin/queue',
active: props.initialPage === 'queue', active: props.initialPage === 'queue',
}, { }, {
icon: 'fas fa-cloud', icon: 'ti ti-cloud',
text: i18n.ts.files, text: i18n.ts.files,
to: '/admin/files', to: '/admin/files',
active: props.initialPage === 'files', active: props.initialPage === 'files',
@ -121,12 +121,12 @@ const menuDef = $computed(() => [{
to: '/admin/announcements', to: '/admin/announcements',
active: props.initialPage === 'announcements', active: props.initialPage === 'announcements',
}, { }, {
icon: 'fas fa-audio-description', icon: 'ti ti-ad',
text: i18n.ts.ads, text: i18n.ts.ads,
to: '/admin/ads', to: '/admin/ads',
active: props.initialPage === 'ads', active: props.initialPage === 'ads',
}, { }, {
icon: 'fas fa-exclamation-circle', icon: 'ti ti-alert-circle',
text: i18n.ts.abuseReports, text: i18n.ts.abuseReports,
to: '/admin/abuses', to: '/admin/abuses',
active: props.initialPage === 'abuses', active: props.initialPage === 'abuses',
@ -134,37 +134,37 @@ const menuDef = $computed(() => [{
}, { }, {
title: i18n.ts.settings, title: i18n.ts.settings,
items: [{ items: [{
icon: 'fas fa-cog', icon: 'ti ti-settings',
text: i18n.ts.general, text: i18n.ts.general,
to: '/admin/settings', to: '/admin/settings',
active: props.initialPage === 'settings', active: props.initialPage === 'settings',
}, { }, {
icon: 'fas fa-envelope', icon: 'ti ti-mail',
text: i18n.ts.emailServer, text: i18n.ts.emailServer,
to: '/admin/email-settings', to: '/admin/email-settings',
active: props.initialPage === 'email-settings', active: props.initialPage === 'email-settings',
}, { }, {
icon: 'fas fa-cloud', icon: 'ti ti-cloud',
text: i18n.ts.objectStorage, text: i18n.ts.objectStorage,
to: '/admin/object-storage', to: '/admin/object-storage',
active: props.initialPage === 'object-storage', active: props.initialPage === 'object-storage',
}, { }, {
icon: 'fas fa-lock', icon: 'ti ti-lock',
text: i18n.ts.security, text: i18n.ts.security,
to: '/admin/security', to: '/admin/security',
active: props.initialPage === 'security', active: props.initialPage === 'security',
}, { }, {
icon: 'fas fa-globe', icon: 'ti ti-world',
text: i18n.ts.relays, text: i18n.ts.relays,
to: '/admin/relays', to: '/admin/relays',
active: props.initialPage === 'relays', active: props.initialPage === 'relays',
}, { }, {
icon: 'fas fa-share-alt', icon: 'ti ti-share',
text: i18n.ts.integration, text: i18n.ts.integration,
to: '/admin/integrations', to: '/admin/integrations',
active: props.initialPage === 'integrations', active: props.initialPage === 'integrations',
}, { }, {
icon: 'fas fa-ban', icon: 'ti ti-ban',
text: i18n.ts.instanceBlocking, text: i18n.ts.instanceBlocking,
to: '/admin/instance-block', to: '/admin/instance-block',
active: props.initialPage === 'instance-block', active: props.initialPage === 'instance-block',
@ -174,7 +174,7 @@ const menuDef = $computed(() => [{
to: '/admin/proxy-account', to: '/admin/proxy-account',
active: props.initialPage === 'proxy-account', active: props.initialPage === 'proxy-account',
}, { }, {
icon: 'fas fa-cogs', icon: 'ti ti-settingss',
text: i18n.ts.other, text: i18n.ts.other,
to: '/admin/other-settings', to: '/admin/other-settings',
active: props.initialPage === 'other-settings', active: props.initialPage === 'other-settings',
@ -276,25 +276,25 @@ const invite = () => {
const lookup = (ev) => { const lookup = (ev) => {
os.popupMenu([{ os.popupMenu([{
text: i18n.ts.user, text: i18n.ts.user,
icon: 'fas fa-user', icon: 'ti ti-user',
action: () => { action: () => {
lookupUser(); lookupUser();
} }
}, { }, {
text: i18n.ts.note, text: i18n.ts.note,
icon: 'fas fa-pencil-alt', icon: 'ti ti-pencil',
action: () => { action: () => {
alert('TODO'); alert('TODO');
} }
}, { }, {
text: i18n.ts.file, text: i18n.ts.file,
icon: 'fas fa-cloud', icon: 'ti ti-cloud',
action: () => { action: () => {
alert('TODO'); alert('TODO');
} }
}, { }, {
text: i18n.ts.instance, text: i18n.ts.instance,
icon: 'fas fa-globe', icon: 'ti ti-world',
action: () => { action: () => {
alert('TODO'); alert('TODO');
} }

View File

@ -39,7 +39,7 @@ function save() {
defineExpose({ defineExpose({
[symbols.PAGE_INFO]: { [symbols.PAGE_INFO]: {
title: i18n.ts.instanceBlocking, title: i18n.ts.instanceBlocking,
icon: 'fas fa-ban', icon: 'ti ti-ban',
bg: 'var(--bg)', bg: 'var(--bg)',
} }
}); });

View File

@ -48,7 +48,7 @@ async function init() {
defineExpose({ defineExpose({
[symbols.PAGE_INFO]: { [symbols.PAGE_INFO]: {
title: i18n.ts.integration, title: i18n.ts.integration,
icon: 'fas fa-share-alt', icon: 'ti ti-share',
bg: 'var(--bg)', bg: 'var(--bg)',
} }
}); });

View File

@ -132,11 +132,11 @@ function save() {
defineExpose({ defineExpose({
[symbols.PAGE_INFO]: { [symbols.PAGE_INFO]: {
title: i18n.ts.objectStorage, title: i18n.ts.objectStorage,
icon: 'fas fa-cloud', icon: 'ti ti-cloud',
bg: 'var(--bg)', bg: 'var(--bg)',
actions: [{ actions: [{
asFullButton: true, asFullButton: true,
icon: 'fas fa-check', icon: 'ti ti-check',
text: i18n.ts.save, text: i18n.ts.save,
handler: save, handler: save,
}], }],

View File

@ -27,11 +27,11 @@ function save() {
defineExpose({ defineExpose({
[symbols.PAGE_INFO]: { [symbols.PAGE_INFO]: {
title: i18n.ts.other, title: i18n.ts.other,
icon: 'fas fa-cogs', icon: 'ti ti-settingss',
bg: 'var(--bg)', bg: 'var(--bg)',
actions: [{ actions: [{
asFullButton: true, asFullButton: true,
icon: 'fas fa-check', icon: 'ti ti-check',
text: i18n.ts.save, text: i18n.ts.save,
handler: save, handler: save,
}], }],

View File

@ -38,7 +38,7 @@
<!--<XMetrics/>--> <!--<XMetrics/>-->
<MkFolder style="margin: var(--margin)"> <MkFolder style="margin: var(--margin)">
<template #header><i class="fas fa-info-circle"></i> {{ i18n.ts.info }}</template> <template #header><i class="ti ti-info-circle"></i> {{ i18n.ts.info }}</template>
<div class="cfcdecdf"> <div class="cfcdecdf">
<div class="number _panel"> <div class="number _panel">
<div class="label">Misskey</div> <div class="label">Misskey</div>

View File

@ -6,7 +6,7 @@
<XQueue :connection="connection" domain="deliver"> <XQueue :connection="connection" domain="deliver">
<template #title>Out</template> <template #title>Out</template>
</XQueue> </XQueue>
<MkButton danger @click="clear()"><i class="fas fa-trash-alt"></i> {{ i18n.ts.clearQueue }}</MkButton> <MkButton danger @click="clear()"><i class="ti ti-trash"></i> {{ i18n.ts.clearQueue }}</MkButton>
</MkSpacer> </MkSpacer>
</template> </template>

View File

@ -3,12 +3,12 @@
<div v-for="relay in relays" :key="relay.inbox" class="relaycxt _panel _block" style="padding: 16px;"> <div v-for="relay in relays" :key="relay.inbox" class="relaycxt _panel _block" style="padding: 16px;">
<div>{{ relay.inbox }}</div> <div>{{ relay.inbox }}</div>
<div class="status"> <div class="status">
<i v-if="relay.status === 'accepted'" class="fas fa-check icon accepted"></i> <i v-if="relay.status === 'accepted'" class="ti ti-check icon accepted"></i>
<i v-else-if="relay.status === 'rejected'" class="fas fa-ban icon rejected"></i> <i v-else-if="relay.status === 'rejected'" class="ti ti-ban icon rejected"></i>
<i v-else class="fas fa-clock icon requesting"></i> <i v-else class="ti ti-clock icon requesting"></i>
<span>{{ $t(`_relayStatus.${relay.status}`) }}</span> <span>{{ $t(`_relayStatus.${relay.status}`) }}</span>
</div> </div>
<MkButton class="button" inline danger @click="remove(relay.inbox)"><i class="fas fa-trash-alt"></i> {{ i18n.ts.remove }}</MkButton> <MkButton class="button" inline danger @click="remove(relay.inbox)"><i class="ti ti-trash"></i> {{ i18n.ts.remove }}</MkButton>
</div> </div>
</MkSpacer> </MkSpacer>
</template> </template>
@ -65,11 +65,11 @@ refresh();
defineExpose({ defineExpose({
[symbols.PAGE_INFO]: { [symbols.PAGE_INFO]: {
title: i18n.ts.relays, title: i18n.ts.relays,
icon: 'fas fa-globe', icon: 'ti ti-world',
bg: 'var(--bg)', bg: 'var(--bg)',
actions: [{ actions: [{
asFullButton: true, asFullButton: true,
icon: 'fas fa-plus', icon: 'ti ti-plus',
text: i18n.ts.addRelay, text: i18n.ts.addRelay,
handler: addRelay, handler: addRelay,
}], }],

View File

@ -17,7 +17,7 @@
<div class="_formRoot"> <div class="_formRoot">
<FormInput v-model="summalyProxy" class="_formBlock"> <FormInput v-model="summalyProxy" class="_formBlock">
<template #prefix><i class="fas fa-link"></i></template> <template #prefix><i class="ti ti-link"></i></template>
<template #label>Summaly Proxy URL</template> <template #label>Summaly Proxy URL</template>
</FormInput> </FormInput>
@ -66,7 +66,7 @@ function save() {
defineExpose({ defineExpose({
[symbols.PAGE_INFO]: { [symbols.PAGE_INFO]: {
title: i18n.ts.security, title: i18n.ts.security,
icon: 'fas fa-lock', icon: 'ti ti-lock',
bg: 'var(--bg)', bg: 'var(--bg)',
} }
}); });

View File

@ -11,7 +11,7 @@
</FormTextarea> </FormTextarea>
<FormInput v-model="tosUrl" class="_formBlock"> <FormInput v-model="tosUrl" class="_formBlock">
<template #prefix><i class="fas fa-link"></i></template> <template #prefix><i class="ti ti-link"></i></template>
<template #label>{{ i18n.ts.tosUrl }}</template> <template #label>{{ i18n.ts.tosUrl }}</template>
</FormInput> </FormInput>
@ -21,7 +21,7 @@
</FormInput> </FormInput>
<FormInput v-model="maintainerEmail" type="email" class="_formBlock"> <FormInput v-model="maintainerEmail" type="email" class="_formBlock">
<template #prefix><i class="fas fa-envelope"></i></template> <template #prefix><i class="ti ti-mail"></i></template>
<template #label>{{ i18n.ts.maintainerEmail }}</template> <template #label>{{ i18n.ts.maintainerEmail }}</template>
</FormInput> </FormInput>
</FormSplit> </FormSplit>
@ -51,22 +51,22 @@
<template #label>{{ i18n.ts.theme }}</template> <template #label>{{ i18n.ts.theme }}</template>
<FormInput v-model="iconUrl" class="_formBlock"> <FormInput v-model="iconUrl" class="_formBlock">
<template #prefix><i class="fas fa-link"></i></template> <template #prefix><i class="ti ti-link"></i></template>
<template #label>{{ i18n.ts.iconUrl }}</template> <template #label>{{ i18n.ts.iconUrl }}</template>
</FormInput> </FormInput>
<FormInput v-model="bannerUrl" class="_formBlock"> <FormInput v-model="bannerUrl" class="_formBlock">
<template #prefix><i class="fas fa-link"></i></template> <template #prefix><i class="ti ti-link"></i></template>
<template #label>{{ i18n.ts.bannerUrl }}</template> <template #label>{{ i18n.ts.bannerUrl }}</template>
</FormInput> </FormInput>
<FormInput v-model="backgroundImageUrl" class="_formBlock"> <FormInput v-model="backgroundImageUrl" class="_formBlock">
<template #prefix><i class="fas fa-link"></i></template> <template #prefix><i class="ti ti-link"></i></template>
<template #label>{{ i18n.ts.backgroundImageUrl }}</template> <template #label>{{ i18n.ts.backgroundImageUrl }}</template>
</FormInput> </FormInput>
<FormInput v-model="themeColor" class="_formBlock"> <FormInput v-model="themeColor" class="_formBlock">
<template #prefix><i class="fas fa-palette"></i></template> <template #prefix><i class="ti ti-palette"></i></template>
<template #label>{{ i18n.ts.themeColor }}</template> <template #label>{{ i18n.ts.themeColor }}</template>
<template #caption>#RRGGBB</template> <template #caption>#RRGGBB</template>
</FormInput> </FormInput>
@ -243,11 +243,11 @@ function save() {
defineExpose({ defineExpose({
[symbols.PAGE_INFO]: { [symbols.PAGE_INFO]: {
title: i18n.ts.general, title: i18n.ts.general,
icon: 'fas fa-cog', icon: 'ti ti-settings',
bg: 'var(--bg)', bg: 'var(--bg)',
actions: [{ actions: [{
asFullButton: true, asFullButton: true,
icon: 'fas fa-check', icon: 'ti ti-check',
text: i18n.ts.save, text: i18n.ts.save,
handler: save, handler: save,
}], }],

View File

@ -125,20 +125,20 @@ function show(user) {
defineExpose({ defineExpose({
[symbols.PAGE_INFO]: computed(() => ({ [symbols.PAGE_INFO]: computed(() => ({
title: i18n.ts.users, title: i18n.ts.users,
icon: 'fas fa-users', icon: 'ti ti-users',
bg: 'var(--bg)', bg: 'var(--bg)',
actions: [{ actions: [{
icon: 'fas fa-search', icon: 'ti ti-search',
text: i18n.ts.search, text: i18n.ts.search,
handler: searchUser handler: searchUser
}, { }, {
asFullButton: true, asFullButton: true,
icon: 'fas fa-plus', icon: 'ti ti-plus',
text: i18n.ts.addUser, text: i18n.ts.addUser,
handler: addUser handler: addUser
}, { }, {
asFullButton: true, asFullButton: true,
icon: 'fas fa-search', icon: 'ti ti-search',
text: i18n.ts.lookup, text: i18n.ts.lookup,
handler: lookupUser handler: lookupUser
}], }],

View File

@ -8,7 +8,7 @@
<img v-if="announcement.imageUrl" :src="announcement.imageUrl"/> <img v-if="announcement.imageUrl" :src="announcement.imageUrl"/>
</div> </div>
<div v-if="$i && !announcement.isRead" class="_footer"> <div v-if="$i && !announcement.isRead" class="_footer">
<MkButton primary @click="read(items, announcement, i)"><i class="fas fa-check"></i> {{ $ts.gotIt }}</MkButton> <MkButton primary @click="read(items, announcement, i)"><i class="ti ti-check"></i> {{ $ts.gotIt }}</MkButton>
</div> </div>
</section> </section>
</MkPagination> </MkPagination>

View File

@ -38,14 +38,14 @@ export default defineComponent({
queue: 0, queue: 0,
[symbols.PAGE_INFO]: computed(() => this.antenna ? { [symbols.PAGE_INFO]: computed(() => this.antenna ? {
title: this.antenna.name, title: this.antenna.name,
icon: 'fas fa-satellite', icon: 'ti ti-satellite',
bg: 'var(--bg)', bg: 'var(--bg)',
actions: [{ actions: [{
icon: 'fas fa-calendar-alt', icon: 'ti ti-calendar',
text: this.$ts.jumpToSpecifiedDate, text: this.$ts.jumpToSpecifiedDate,
handler: this.timetravel handler: this.timetravel
}, { }, {
icon: 'fas fa-cog', icon: 'ti ti-settings',
text: this.$ts.settings, text: this.$ts.settings,
handler: this.settings handler: this.settings
}], }],

View File

@ -13,7 +13,7 @@
</MkSwitch> </MkSwitch>
<MkButton class="_formBlock" primary :disabled="sending" @click="send"> <MkButton class="_formBlock" primary :disabled="sending" @click="send">
<template v-if="sending"><MkEllipsis/></template> <template v-if="sending"><MkEllipsis/></template>
<template v-else><i class="fas fa-paper-plane"></i> Send</template> <template v-else><i class="ti ti-send"></i> Send</template>
</MkButton> </MkButton>
</div> </div>
<div v-if="res" class="_formBlock"> <div v-if="res" class="_formBlock">

View File

@ -10,10 +10,10 @@
</MkTextarea> </MkTextarea>
<div class="banner"> <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="ti ti-plus"></i> {{ $ts._channel.setBanner }}</MkButton>
<div v-else-if="bannerUrl"> <div v-else-if="bannerUrl">
<img :src="bannerUrl" style="width: 100%;"/> <img :src="bannerUrl" style="width: 100%;"/>
<MkButton @click="removeBannerImage()"><i class="fas fa-trash-alt"></i> {{ $ts._channel.removeBanner }}</MkButton> <MkButton @click="removeBannerImage()"><i class="ti ti-trash"></i> {{ $ts._channel.removeBanner }}</MkButton>
</div> </div>
</div> </div>
<div class="_formBlock"> <div class="_formBlock">
@ -48,11 +48,11 @@ export default defineComponent({
return { return {
[symbols.PAGE_INFO]: computed(() => this.channelId ? { [symbols.PAGE_INFO]: computed(() => this.channelId ? {
title: this.$ts._channel.edit, title: this.$ts._channel.edit,
icon: 'fas fa-satellite-dish', icon: 'ti ti-satellite-dish',
bg: 'var(--bg)', bg: 'var(--bg)',
} : { } : {
title: this.$ts._channel.create, title: this.$ts._channel.create,
icon: 'fas fa-satellite-dish', icon: 'ti ti-satellite-dish',
bg: 'var(--bg)', bg: 'var(--bg)',
}), }),
channel: null, channel: null,

View File

@ -11,8 +11,8 @@
</div> </div>
<div :style="{ backgroundImage: channel.bannerUrl ? `url(${channel.bannerUrl})` : null }" class="banner"> <div :style="{ backgroundImage: channel.bannerUrl ? `url(${channel.bannerUrl})` : null }" class="banner">
<div class="status"> <div class="status">
<div><i class="fas fa-users fa-fw"></i><I18n :src="$ts._channel.usersCount" tag="span" style="margin-left: 4px;"><template #n><b>{{ channel.usersCount }}</b></template></I18n></div> <div><i class="ti ti-users ti-fw"></i><I18n :src="$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="ti ti-pencil ti-fw"></i><I18n :src="$ts._channel.notesCount" tag="span" style="margin-left: 4px;"><template #n><b>{{ channel.notesCount }}</b></template></I18n></div>
</div> </div>
<div class="fade"></div> <div class="fade"></div>
</div> </div>
@ -56,10 +56,10 @@ export default defineComponent({
return { return {
[symbols.PAGE_INFO]: computed(() => this.channel ? { [symbols.PAGE_INFO]: computed(() => this.channel ? {
title: this.channel.name, title: this.channel.name,
icon: 'fas fa-satellite-dish', icon: 'ti ti-satellite-dish',
bg: 'var(--bg)', bg: 'var(--bg)',
actions: [...(this.$i && this.$i.id === this.channel.userId ? [{ actions: [...(this.$i && this.$i.id === this.channel.userId ? [{
icon: 'fas fa-cog', icon: 'ti ti-settings',
text: this.$ts.edit, text: this.$ts.edit,
handler: this.edit, handler: this.edit,
}] : [])], }] : [])],

View File

@ -11,7 +11,7 @@
</MkPagination> </MkPagination>
</div> </div>
<div v-else-if="tab === 'owned'" class="_content grwlizim owned"> <div v-else-if="tab === 'owned'" class="_content grwlizim owned">
<MkButton class="new" @click="create()"><i class="fas fa-plus"></i></MkButton> <MkButton class="new" @click="create()"><i class="ti ti-plus"></i></MkButton>
<MkPagination v-slot="{items}" :pagination="ownedPagination"> <MkPagination v-slot="{items}" :pagination="ownedPagination">
<MkChannelPreview v-for="channel in items" :key="channel.id" class="_gap" :channel="channel"/> <MkChannelPreview v-for="channel in items" :key="channel.id" class="_gap" :channel="channel"/>
</MkPagination> </MkPagination>
@ -34,17 +34,17 @@ export default defineComponent({
return { return {
[symbols.PAGE_INFO]: computed(() => ({ [symbols.PAGE_INFO]: computed(() => ({
title: this.$ts.channel, title: this.$ts.channel,
icon: 'fas fa-satellite-dish', icon: 'ti ti-satellite-dish',
bg: 'var(--bg)', bg: 'var(--bg)',
actions: [{ actions: [{
icon: 'fas fa-plus', icon: 'ti ti-plus',
text: this.$ts.create, text: this.$ts.create,
handler: this.create, handler: this.create,
}], }],
tabs: [{ tabs: [{
active: this.tab === 'featured', active: this.tab === 'featured',
title: this.$ts._channel.featured, title: this.$ts._channel.featured,
icon: 'fas fa-fire-alt', icon: 'ti ti-flame',
onClick: () => { this.tab = 'featured'; }, onClick: () => { this.tab = 'featured'; },
}, { }, {
active: this.tab === 'following', active: this.tab === 'following',
@ -54,7 +54,7 @@ export default defineComponent({
}, { }, {
active: this.tab === 'owned', active: this.tab === 'owned',
title: this.$ts._channel.owned, title: this.$ts._channel.owned,
icon: 'fas fa-edit', icon: 'ti ti-edit',
onClick: () => { this.tab = 'owned'; }, onClick: () => { this.tab = 'owned'; },
},] },]
})), })),

View File

@ -41,10 +41,10 @@ export default defineComponent({
return { return {
[symbols.PAGE_INFO]: computed(() => this.clip ? { [symbols.PAGE_INFO]: computed(() => this.clip ? {
title: this.clip.name, title: this.clip.name,
icon: 'fas fa-paperclip', icon: 'ti ti-paperclip',
bg: 'var(--bg)', bg: 'var(--bg)',
actions: [{ actions: [{
icon: 'fas fa-ellipsis-h', icon: 'ti ti-dots',
handler: this.menu handler: this.menu
}], }],
} : null), } : null),
@ -83,7 +83,7 @@ export default defineComponent({
methods: { methods: {
menu(ev) { menu(ev) {
os.popupMenu([this.isOwned ? { os.popupMenu([this.isOwned ? {
icon: 'fas fa-pencil-alt', icon: 'ti ti-pencil',
text: this.$ts.edit, text: this.$ts.edit,
action: async () => { action: async () => {
const { canceled, result } = await os.form(this.clip.name, { const { canceled, result } = await os.form(this.clip.name, {
@ -113,7 +113,7 @@ export default defineComponent({
}); });
} }
} : undefined, this.isOwned ? { } : undefined, this.isOwned ? {
icon: 'fas fa-trash-alt', icon: 'ti ti-trash',
text: this.$ts.delete, text: this.$ts.delete,
danger: true, danger: true,
action: async () => { action: async () => {

View File

@ -16,7 +16,7 @@ let folder = $ref(null);
defineExpose({ defineExpose({
[symbols.PAGE_INFO]: computed(() => ({ [symbols.PAGE_INFO]: computed(() => ({
title: folder ? folder.name : i18n.ts.drive, title: folder ? folder.name : i18n.ts.drive,
icon: 'fas fa-cloud', icon: 'ti ti-cloud',
bg: 'var(--bg)', bg: 'var(--bg)',
hideHeader: true, hideHeader: true,
})), })),

View File

@ -2,7 +2,7 @@
<div class="driuhtrh"> <div class="driuhtrh">
<div class="query"> <div class="query">
<MkInput v-model="q" class="" :placeholder="$ts.search"> <MkInput v-model="q" class="" :placeholder="$ts.search">
<template #prefix><i class="fas fa-search"></i></template> <template #prefix><i class="ti ti-search"></i></template>
</MkInput> </MkInput>
<!-- たくさんあると邪魔 <!-- たくさんあると邪魔

View File

@ -24,7 +24,7 @@ function menu(ev) {
text: ':' + props.emoji.name + ':', text: ':' + props.emoji.name + ':',
}, { }, {
text: i18n.ts.copy, text: i18n.ts.copy,
icon: 'fas fa-copy', icon: 'ti ti-copy',
action: () => { action: () => {
copyToClipboard(`:${props.emoji.name}:`); copyToClipboard(`:${props.emoji.name}:`);
os.success(); os.success();

View File

@ -15,7 +15,7 @@ const tab = ref('category');
function menu(ev) { function menu(ev) {
os.popupMenu([{ os.popupMenu([{
icon: 'fas fa-download', icon: 'ti ti-download',
text: i18n.ts.export, text: i18n.ts.export,
action: async () => { action: async () => {
os.api('export-custom-emojis', { os.api('export-custom-emojis', {
@ -38,10 +38,10 @@ function menu(ev) {
defineExpose({ defineExpose({
[symbols.PAGE_INFO]: { [symbols.PAGE_INFO]: {
title: i18n.ts.customEmojis, title: i18n.ts.customEmojis,
icon: 'fas fa-laugh', icon: 'ti ti-mood-happy',
bg: 'var(--bg)', bg: 'var(--bg)',
actions: [{ actions: [{
icon: 'fas fa-ellipsis-h', icon: 'ti ti-dots',
handler: menu, handler: menu,
}], }],
}, },

View File

@ -10,19 +10,19 @@
<template v-if="tag == null"> <template v-if="tag == null">
<MkFolder class="_gap" persist-key="explore-pinned-users"> <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 ti-fw" style="margin-right: 0.5em;"></i>{{ $ts.pinnedUsers }}</template>
<XUserList :pagination="pinnedUsers"/> <XUserList :pagination="pinnedUsers"/>
</MkFolder> </MkFolder>
<MkFolder class="_gap" persist-key="explore-popular-users"> <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 ti-fw" style="margin-right: 0.5em;"></i>{{ $ts.popularUsers }}</template>
<XUserList :pagination="popularUsers"/> <XUserList :pagination="popularUsers"/>
</MkFolder> </MkFolder>
<MkFolder class="_gap" persist-key="explore-recently-updated-users"> <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 ti-fw" style="margin-right: 0.5em;"></i>{{ $ts.recentlyUpdatedUsers }}</template>
<XUserList :pagination="recentlyUpdatedUsers"/> <XUserList :pagination="recentlyUpdatedUsers"/>
</MkFolder> </MkFolder>
<MkFolder class="_gap" persist-key="explore-recently-registered-users"> <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="ti ti-plus ti-fw" style="margin-right: 0.5em;"></i>{{ $ts.recentlyRegisteredUsers }}</template>
<XUserList :pagination="recentlyRegisteredUsers"/> <XUserList :pagination="recentlyRegisteredUsers"/>
</MkFolder> </MkFolder>
</template> </template>
@ -33,7 +33,7 @@
</div> </div>
<MkFolder ref="tags" :foldable="true" :expanded="false" class="_gap"> <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="ti ti-hash ti-fw" style="margin-right: 0.5em;"></i>{{ $ts.popularTags }}</template>
<div class="vxjfqztj"> <div class="vxjfqztj">
<MkA v-for="tag in tagsLocal" :key="'local:' + tag.tag" :to="`/explore/tags/${tag.tag}`" class="local">{{ tag.tag }}</MkA> <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>
<MkFolder v-if="tag != null" :key="`${tag}`" class="_gap"> <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="ti ti-hash ti-fw" style="margin-right: 0.5em;"></i>{{ tag }}</template>
<XUserList :pagination="tagUsers"/> <XUserList :pagination="tagUsers"/>
</MkFolder> </MkFolder>
<template v-if="tag == null"> <template v-if="tag == null">
<MkFolder class="_gap"> <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 ti-fw" style="margin-right: 0.5em;"></i>{{ $ts.popularUsers }}</template>
<XUserList :pagination="popularUsersF"/> <XUserList :pagination="popularUsersF"/>
</MkFolder> </MkFolder>
<MkFolder class="_gap"> <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 ti-fw" style="margin-right: 0.5em;"></i>{{ $ts.recentlyUpdatedUsers }}</template>
<XUserList :pagination="recentlyUpdatedUsersF"/> <XUserList :pagination="recentlyUpdatedUsersF"/>
</MkFolder> </MkFolder>
<MkFolder class="_gap"> <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 ti-fw" style="margin-right: 0.5em;"></i>{{ $ts.recentlyDiscoveredUsers }}</template>
<XUserList :pagination="recentlyRegisteredUsersF"/> <XUserList :pagination="recentlyRegisteredUsersF"/>
</MkFolder> </MkFolder>
</template> </template>
@ -64,7 +64,7 @@
<div v-else-if="tab === 'search'"> <div v-else-if="tab === 'search'">
<div class="_isolated"> <div class="_isolated">
<MkInput v-model="searchQuery" :debounce="true" type="search"> <MkInput v-model="searchQuery" :debounce="true" type="search">
<template #prefix><i class="fas fa-search"></i></template> <template #prefix><i class="ti ti-search"></i></template>
<template #label>{{ $ts.searchUser }}</template> <template #label>{{ $ts.searchUser }}</template>
</MkInput> </MkInput>
<MkRadios v-model="searchOrigin"> <MkRadios v-model="searchOrigin">
@ -110,7 +110,7 @@ export default defineComponent({
return { return {
[symbols.PAGE_INFO]: computed(() => ({ [symbols.PAGE_INFO]: computed(() => ({
title: this.$ts.explore, title: this.$ts.explore,
icon: 'fas fa-hashtag', icon: 'ti ti-hash',
bg: 'var(--bg)', bg: 'var(--bg)',
tabs: [{ tabs: [{
active: this.tab === 'local', active: this.tab === 'local',

View File

@ -35,7 +35,7 @@ const pagingComponent = ref<InstanceType<typeof MkPagination>>();
defineExpose({ defineExpose({
[symbols.PAGE_INFO]: { [symbols.PAGE_INFO]: {
title: i18n.ts.favorites, title: i18n.ts.favorites,
icon: 'fas fa-star', icon: 'ti ti-star',
bg: 'var(--bg)', bg: 'var(--bg)',
}, },
}); });

View File

@ -18,7 +18,7 @@ const pagination = {
defineExpose({ defineExpose({
[symbols.PAGE_INFO]: { [symbols.PAGE_INFO]: {
title: i18n.ts.featured, title: i18n.ts.featured,
icon: 'fas fa-fire-alt', icon: 'ti ti-flame',
bg: 'var(--bg)', bg: 'var(--bg)',
}, },
}); });

View File

@ -3,7 +3,7 @@
<div class="taeiyria"> <div class="taeiyria">
<div class="query"> <div class="query">
<MkInput v-model="host" :debounce="true" class=""> <MkInput v-model="host" :debounce="true" class="">
<template #prefix><i class="fas fa-search"></i></template> <template #prefix><i class="ti ti-search"></i></template>
<template #label>{{ $ts.host }}</template> <template #label>{{ $ts.host }}</template>
</MkInput> </MkInput>
<FormSplit style="margin-top: var(--margin);"> <FormSplit style="margin-top: var(--margin);">
@ -132,7 +132,7 @@ function getStatus(instance) {
defineExpose({ defineExpose({
[symbols.PAGE_INFO]: { [symbols.PAGE_INFO]: {
title: i18n.ts.federation, title: i18n.ts.federation,
icon: 'fas fa-globe', icon: 'ti ti-world',
bg: 'var(--bg)', bg: 'var(--bg)',
}, },
}); });

View File

@ -20,8 +20,8 @@
<Mfm :text="req.follower.description" :is-note="false" :author="req.follower" :i="$i" :custom-emojis="req.follower.emojis" :plain="true" :nowrap="true"/> <Mfm :text="req.follower.description" :is-note="false" :author="req.follower" :i="$i" :custom-emojis="req.follower.emojis" :plain="true" :nowrap="true"/>
</div> </div>
<div class="actions"> <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="ti ti-check"></i></button>
<button class="_button" @click="reject(req.follower)"><i class="fas fa-times"></i></button> <button class="_button" @click="reject(req.follower)"><i class="ti ti-x"></i></button>
</div> </div>
</div> </div>
</div> </div>
@ -61,7 +61,7 @@ function reject(user) {
defineExpose({ defineExpose({
[symbols.PAGE_INFO]: computed(() => ({ [symbols.PAGE_INFO]: computed(() => ({
title: i18n.ts.followRequests, title: i18n.ts.followRequests,
icon: 'fas fa-user-clock', icon: 'ti ti-user-clock',
bg: 'var(--bg)', bg: 'var(--bg)',
})), })),
}); });

View File

@ -12,9 +12,9 @@
<FormGroup> <FormGroup>
<div v-for="file in files" :key="file.id" class="_formGroup wqugxsfx" :style="{ backgroundImage: file ? `url(${ file.thumbnailUrl })` : null }"> <div v-for="file in files" :key="file.id" class="_formGroup wqugxsfx" :style="{ backgroundImage: file ? `url(${ file.thumbnailUrl })` : null }">
<div class="name">{{ file.name }}</div> <div class="name">{{ file.name }}</div>
<button v-tooltip="$ts.remove" class="remove _button" @click="remove(file)"><i class="fas fa-times"></i></button> <button v-tooltip="$ts.remove" class="remove _button" @click="remove(file)"><i class="ti ti-x"></i></button>
</div> </div>
<FormButton primary @click="selectFile"><i class="fas fa-plus"></i> {{ $ts.attachFile }}</FormButton> <FormButton primary @click="selectFile"><i class="ti ti-plus"></i> {{ $ts.attachFile }}</FormButton>
</FormGroup> </FormGroup>
<FormSwitch v-model="isSensitive">{{ $ts.markAsSensitive }}</FormSwitch> <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-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-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="ti ti-trash"></i> {{ $ts.delete }}</FormButton>
</FormSuspense> </FormSuspense>
</div> </div>
</template> </template>
@ -61,10 +61,10 @@ export default defineComponent({
return { return {
[symbols.PAGE_INFO]: computed(() => this.postId ? { [symbols.PAGE_INFO]: computed(() => this.postId ? {
title: this.$ts.edit, title: this.$ts.edit,
icon: 'fas fa-pencil-alt' icon: 'ti ti-pencil'
} : { } : {
title: this.$ts.postToGallery, title: this.$ts.postToGallery,
icon: 'fas fa-pencil-alt' icon: 'ti ti-pencil'
}), }),
init: null, init: null,
files: [], files: [],

View File

@ -3,12 +3,12 @@
<MkTab v-if="$i" v-model="tab"> <MkTab v-if="$i" v-model="tab">
<option value="explore"><i class="fas fa-icons"></i> {{ $ts.gallery }}</option> <option value="explore"><i class="fas fa-icons"></i> {{ $ts.gallery }}</option>
<option value="liked"><i class="fas fa-heart"></i> {{ $ts._gallery.liked }}</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> <option value="my"><i class="ti ti-edit"></i> {{ $ts._gallery.my }}</option>
</MkTab> </MkTab>
<div v-if="tab === 'explore'"> <div v-if="tab === 'explore'">
<MkFolder class="_gap"> <MkFolder class="_gap">
<template #header><i class="fas fa-clock"></i>{{ $ts.recentPosts }}</template> <template #header><i class="ti ti-clock"></i>{{ $ts.recentPosts }}</template>
<MkPagination v-slot="{items}" :pagination="recentPostsPagination" :disable-auto-load="true"> <MkPagination v-slot="{items}" :pagination="recentPostsPagination" :disable-auto-load="true">
<div class="vfpdbgtk"> <div class="vfpdbgtk">
<MkGalleryPostPreview v-for="post in items" :key="post.id" :post="post" class="post"/> <MkGalleryPostPreview v-for="post in items" :key="post.id" :post="post" class="post"/>
@ -16,7 +16,7 @@
</MkPagination> </MkPagination>
</MkFolder> </MkFolder>
<MkFolder class="_gap"> <MkFolder class="_gap">
<template #header><i class="fas fa-fire-alt"></i>{{ $ts.popularPosts }}</template> <template #header><i class="ti ti-flame"></i>{{ $ts.popularPosts }}</template>
<MkPagination v-slot="{items}" :pagination="popularPostsPagination" :disable-auto-load="true"> <MkPagination v-slot="{items}" :pagination="popularPostsPagination" :disable-auto-load="true">
<div class="vfpdbgtk"> <div class="vfpdbgtk">
<MkGalleryPostPreview v-for="post in items" :key="post.id" :post="post" class="post"/> <MkGalleryPostPreview v-for="post in items" :key="post.id" :post="post" class="post"/>
@ -32,7 +32,7 @@
</MkPagination> </MkPagination>
</div> </div>
<div v-else-if="tab === 'my'"> <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="ti ti-plus"></i> {{ $ts.postToGallery }}</MkA>
<MkPagination v-slot="{items}" :pagination="myPostsPagination"> <MkPagination v-slot="{items}" :pagination="myPostsPagination">
<div class="vfpdbgtk"> <div class="vfpdbgtk">
<MkGalleryPostPreview v-for="post in items" :key="post.id" :post="post" class="post"/> <MkGalleryPostPreview v-for="post in items" :key="post.id" :post="post" class="post"/>

View File

@ -11,7 +11,7 @@
<div class="title">{{ post.title }}</div> <div class="title">{{ post.title }}</div>
<div class="description"><Mfm :text="post.description"/></div> <div class="description"><Mfm :text="post.description"/></div>
<div class="info"> <div class="info">
<i class="fas fa-clock"></i> <MkTime :time="post.createdAt" mode="detail"/> <i class="ti ti-clock"></i> <MkTime :time="post.createdAt" mode="detail"/>
</div> </div>
<div class="actions"> <div class="actions">
<div class="like"> <div class="like">
@ -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> <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>
<div class="other"> <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-if="$i && $i.id === post.user.id" v-tooltip="$ts.edit" v-click-anime class="_button" @click="edit"><i class="ti ti-pencil ti-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.shareWithNote" v-click-anime class="_button" @click="shareWithNote"><i class="ti ti-repeat ti-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-tooltip="$ts.share" v-click-anime class="_button" @click="share"><i class="ti ti-share ti-fw"></i></button>
</div> </div>
</div> </div>
<div class="user"> <div class="user">
@ -35,7 +35,7 @@
</div> </div>
<MkAd :prefer="['horizontal', 'horizontal-big']"/> <MkAd :prefer="['horizontal', 'horizontal-big']"/>
<MkContainer :max-height="300" :foldable="true" class="other"> <MkContainer :max-height="300" :foldable="true" class="other">
<template #header><i class="fas fa-clock"></i> {{ $ts.recentPosts }}</template> <template #header><i class="ti ti-clock"></i> {{ $ts.recentPosts }}</template>
<MkPagination v-slot="{items}" :pagination="otherPostsPagination"> <MkPagination v-slot="{items}" :pagination="otherPostsPagination">
<div class="sdrarzaf"> <div class="sdrarzaf">
<MkGalleryPostPreview v-for="post in items" :key="post.id" :post="post" class="post"/> <MkGalleryPostPreview v-for="post in items" :key="post.id" :post="post" class="post"/>
@ -87,7 +87,7 @@ export default defineComponent({
text: this.post.description, text: this.post.description,
}, },
actions: [{ actions: [{
icon: 'fas fa-pencil-alt', icon: 'ti ti-pencil',
text: this.$ts.edit, text: this.$ts.edit,
handler: this.edit handler: this.edit
}] }]

View File

@ -171,7 +171,7 @@ fetch();
defineExpose({ defineExpose({
[symbols.PAGE_INFO]: { [symbols.PAGE_INFO]: {
title: props.host, title: props.host,
icon: 'fas fa-info-circle', icon: 'ti ti-info-circle',
bg: 'var(--bg)', bg: 'var(--bg)',
actions: [{ actions: [{
text: `https://${props.host}`, text: `https://${props.host}`,

View File

@ -17,7 +17,7 @@ const pagination = {
defineExpose({ defineExpose({
[symbols.PAGE_INFO]: { [symbols.PAGE_INFO]: {
title: i18n.ts.mentions, title: i18n.ts.mentions,
icon: 'fas fa-at', icon: 'ti ti-at',
bg: 'var(--bg)', bg: 'var(--bg)',
}, },
}); });

View File

@ -20,7 +20,7 @@ const pagination = {
defineExpose({ defineExpose({
[symbols.PAGE_INFO]: { [symbols.PAGE_INFO]: {
title: i18n.ts.directNotes, title: i18n.ts.directNotes,
icon: 'fas fa-envelope', icon: 'ti ti-mail',
bg: 'var(--bg)', bg: 'var(--bg)',
}, },
}); });

View File

@ -1,7 +1,7 @@
<template> <template>
<MkSpacer :content-max="800"> <MkSpacer :content-max="800">
<div v-size="{ max: [400] }" class="yweeujhr"> <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="ti ti-plus"></i> {{ $ts.startMessaging }}</MkButton>
<div v-if="messages.length > 0" class="history"> <div v-if="messages.length > 0" class="history">
<MkA v-for="(message, i) in messages" <MkA v-for="(message, i) in messages"
@ -56,7 +56,7 @@ export default defineComponent({
return { return {
[symbols.PAGE_INFO]: { [symbols.PAGE_INFO]: {
title: this.$ts.messaging, title: this.$ts.messaging,
icon: 'fas fa-comments', icon: 'ti ti-messages',
bg: 'var(--bg)', bg: 'var(--bg)',
}, },
fetching: true, fetching: true,
@ -122,11 +122,11 @@ export default defineComponent({
start(ev) { start(ev) {
os.popupMenu([{ os.popupMenu([{
text: this.$ts.messagingWithUser, text: this.$ts.messagingWithUser,
icon: 'fas fa-user', icon: 'ti ti-user',
action: () => { this.startUser(); } action: () => { this.startUser(); }
}, { }, {
text: this.$ts.messagingWithGroup, text: this.$ts.messagingWithGroup,
icon: 'fas fa-users', icon: 'ti ti-users',
action: () => { this.startGroup(); } action: () => { this.startGroup(); }
}], ev.currentTarget ?? ev.target); }], ev.currentTarget ?? ev.target);
}, },

View File

@ -1,5 +1,6 @@
<template> <template>
<div class="pemppnzi _block" <div
class="pemppnzi _block"
@dragover.stop="onDragover" @dragover.stop="onDragover"
@drop.stop="onDrop" @drop.stop="onDrop"
> >
@ -13,10 +14,10 @@
></textarea> ></textarea>
<div v-if="file" class="file" @click="file = null">{{ file.name }}</div> <div v-if="file" class="file" @click="file = null">{{ file.name }}</div>
<button class="send _button" :disabled="!canSend || sending" :title="$ts.send" @click="send"> <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="ti ti-send"></i></template><template v-if="sending"><i class="fas fa-spinner fa-pulse ti-fw"></i></template>
</button> </button>
<button class="_button" @click="chooseFile"><i class="fas fa-photo-video"></i></button> <button class="_button" @click="chooseFile"><i class="ti ti-photo"></i></button>
<button class="_button" @click="insertEmoji"><i class="fas fa-laugh-squint"></i></button> <button class="_button" @click="insertEmoji"><i class="ti ti-mood-happy"></i></button>
<input ref="file" type="file" @change="onChangeFile"/> <input ref="file" type="file" @change="onChangeFile"/>
</div> </div>
</template> </template>
@ -25,12 +26,12 @@
import { defineComponent, defineAsyncComponent } from 'vue'; import { defineComponent, defineAsyncComponent } from 'vue';
import insertTextAtCursor from 'insert-text-at-cursor'; import insertTextAtCursor from 'insert-text-at-cursor';
import autosize from 'autosize'; import autosize from 'autosize';
import { throttle } from 'throttle-debounce';
import { formatTimeString } from '@/scripts/format-time-string'; import { formatTimeString } from '@/scripts/format-time-string';
import { selectFile } from '@/scripts/select-file'; import { selectFile } from '@/scripts/select-file';
import * as os from '@/os'; import * as os from '@/os';
import { stream } from '@/stream'; import { stream } from '@/stream';
import { Autocomplete } from '@/scripts/autocomplete'; import { Autocomplete } from '@/scripts/autocomplete';
import { throttle } from 'throttle-debounce';
import { uploadFile } from '@/scripts/upload'; import { uploadFile } from '@/scripts/upload';
export default defineComponent({ export default defineComponent({
@ -63,7 +64,7 @@ export default defineComponent({
}, },
room(): any { room(): any {
return this.$parent; return this.$parent;
} },
}, },
watch: { watch: {
text() { text() {
@ -71,7 +72,7 @@ export default defineComponent({
}, },
file() { file() {
this.saveDraft(); this.saveDraft();
} },
}, },
mounted() { mounted() {
autosize(this.$refs.text); autosize(this.$refs.text);
@ -103,7 +104,7 @@ export default defineComponent({
if (items[0].kind === 'file') { if (items[0].kind === 'file') {
os.alert({ os.alert({
type: 'error', type: 'error',
text: this.$ts.onlyOneFileCanBeAttached text: this.$ts.onlyOneFileCanBeAttached,
}); });
} }
} }
@ -128,7 +129,7 @@ export default defineComponent({
evt.preventDefault(); evt.preventDefault();
os.alert({ os.alert({
type: 'error', type: 'error',
text: this.$ts.onlyOneFileCanBeAttached text: this.$ts.onlyOneFileCanBeAttached,
}); });
return; return;
} }
@ -175,7 +176,7 @@ export default defineComponent({
userId: this.user ? this.user.id : undefined, userId: this.user ? this.user.id : undefined,
groupId: this.group ? this.group.id : undefined, groupId: this.group ? this.group.id : undefined,
text: this.text ? this.text : undefined, text: this.text ? this.text : undefined,
fileId: this.file ? this.file.id : undefined fileId: this.file ? this.file.id : undefined,
}).then(message => { }).then(message => {
this.clear(); this.clear();
}).catch(err => { }).catch(err => {
@ -198,8 +199,8 @@ export default defineComponent({
updatedAt: new Date(), updatedAt: new Date(),
data: { data: {
text: this.text, text: this.text,
file: this.file file: this.file,
} },
}; };
localStorage.setItem('message_drafts', JSON.stringify(drafts)); localStorage.setItem('message_drafts', JSON.stringify(drafts));
@ -215,8 +216,8 @@ export default defineComponent({
async insertEmoji(ev) { async insertEmoji(ev) {
os.openEmojiPicker(ev.currentTarget ?? ev.target, {}, this.$refs.text); os.openEmojiPicker(ev.currentTarget ?? ev.target, {}, this.$refs.text);
} },
} },
}); });
</script> </script>

View File

@ -29,7 +29,7 @@
<span v-if="isMe && message.isRead" class="read">{{ $ts.messageRead }}</span> <span v-if="isMe && message.isRead" class="read">{{ $ts.messageRead }}</span>
</template> </template>
<MkTime :time="message.createdAt"/> <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="ti ti-pencil"></i></template>
</footer> </footer>
</div> </div>
</div> </div>

View File

@ -6,10 +6,10 @@
<div class="_content mk-messaging-room"> <div class="_content mk-messaging-room">
<div class="body"> <div class="body">
<MkLoading v-if="fetching"/> <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="ti ti-info-circle"></i>{{ $ts.noMessagesYet }}</p>
<p v-if="!fetching && messages.length > 0 && !existMoreMessages" class="no-history"><i class="fas fa-flag"></i>{{ $ts.noMoreHistory }}</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"> <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 ti-fw"></i></template>{{ fetchingMoreMessages ? $ts.loading : $ts.loadMore }}
</button> </button>
<XList v-if="messages.length > 0" v-slot="{ item: message }" class="messages" :items="messages" direction="up" reversed> <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"/> <XMessage :key="message.id" :message="message" :is-group="group != null"/>
@ -74,14 +74,14 @@ const Component = defineComponent({
userName: this.user, userName: this.user,
avatar: this.user, avatar: this.user,
action: { action: {
icon: 'fas fa-ellipsis-h', icon: 'ti ti-dots',
handler: this.menu, handler: this.menu,
}, },
} : { } : {
title: this.group.name, title: this.group.name,
icon: 'fas fa-users', icon: 'ti ti-users',
action: { action: {
icon: 'fas fa-ellipsis-h', icon: 'ti ti-dots',
handler: this.menu, handler: this.menu,
}, },
} : null), } : null),

Some files were not shown because too many files have changed in this diff Show More