Compare commits

...

3 Commits

Author SHA1 Message Date
syuilo 07bc5d790a wip 2025-04-17 17:58:43 +09:00
syuilo 3d4970c79c Update style.scss 2025-04-17 16:22:29 +09:00
syuilo 73eb8cac18 wip 2025-04-17 16:22:20 +09:00
28 changed files with 89 additions and 76 deletions

View File

@ -124,7 +124,7 @@ function onMousedown(evt: MouseEvent): void {
display: block; display: block;
min-width: 100px; min-width: 100px;
width: max-content; width: max-content;
padding: 7px 14px; padding: 9px 14px;
text-align: center; text-align: center;
font-weight: normal; font-weight: normal;
font-size: 95%; font-size: 95%;
@ -155,12 +155,12 @@ function onMousedown(evt: MouseEvent): void {
&.small { &.small {
font-size: 90%; font-size: 90%;
padding: 6px 12px; padding: 8px 12px;
} }
&.large { &.large {
font-size: 100%; font-size: 100%;
padding: 8px 16px; padding: 10px 16px;
} }
&.full { &.full {

View File

@ -26,7 +26,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<XCode :class="$style.codeEditorHighlighter" :codeEditor="true" :code="v" :lang="lang"/> <XCode :class="$style.codeEditorHighlighter" :codeEditor="true" :code="v" :lang="lang"/>
</div> </div>
</div> </div>
<div :class="$style.caption"><slot name="caption"></slot></div> <div :class="$style.caption" class="_mt"><slot name="caption"></slot></div>
<MkButton v-if="manualSave && changed" primary :class="$style.save" @click="updated"><i class="ti ti-device-floppy"></i> {{ i18n.ts.save }}</MkButton> <MkButton v-if="manualSave && changed" primary :class="$style.save" @click="updated"><i class="ti ti-device-floppy"></i> {{ i18n.ts.save }}</MkButton>
</div> </div>
</template> </template>

View File

@ -19,7 +19,7 @@ SPDX-License-Identifier: AGPL-3.0-only
@input="onInput" @input="onInput"
> >
</div> </div>
<div :class="$style.caption"><slot name="caption"></slot></div> <div :class="$style.caption" class="_mt"><slot name="caption"></slot></div>
</div> </div>
</template> </template>

View File

@ -25,8 +25,8 @@ SPDX-License-Identifier: AGPL-3.0-only
<i v-else-if="type === 'question'" :class="$style.iconInner" class="ti ti-help-circle"></i> <i v-else-if="type === 'question'" :class="$style.iconInner" class="ti ti-help-circle"></i>
<MkLoading v-else-if="type === 'waiting'" :class="$style.iconInner" :em="true"/> <MkLoading v-else-if="type === 'waiting'" :class="$style.iconInner" :em="true"/>
</div> </div>
<header v-if="title" :class="$style.title" class="_selectable"><Mfm :text="title"/></header> <header v-if="title" :class="$style.title" class="_selectable _mt"><Mfm :text="title"/></header>
<div v-if="text" :class="$style.text" class="_selectable"><Mfm :text="text"/></div> <div v-if="text" :class="$style.text" class="_selectable _mt"><Mfm :text="text"/></div>
<MkInput v-if="input" v-model="inputValue" autofocus :type="input.type || 'text'" :placeholder="input.placeholder || undefined" :autocomplete="input.autocomplete" @keydown="onInputKeydown"> <MkInput v-if="input" v-model="inputValue" autofocus :type="input.type || 'text'" :placeholder="input.placeholder || undefined" :autocomplete="input.autocomplete" @keydown="onInputKeydown">
<template v-if="input.type === 'password'" #prefix><i class="ti ti-lock"></i></template> <template v-if="input.type === 'password'" #prefix><i class="ti ti-lock"></i></template>
<template #caption> <template #caption>
@ -191,6 +191,7 @@ function onInputKeydown(evt: KeyboardEvent) {
.icon { .icon {
font-size: 24px; font-size: 24px;
padding: 4px 0;
& + .title { & + .title {
margin-top: 8px; margin-top: 8px;

View File

@ -6,7 +6,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<template> <template>
<div v-panel :class="$style.root"> <div v-panel :class="$style.root">
<img :class="$style.img" :src="icon"/> <img :class="$style.img" :src="icon"/>
<div :class="$style.text"> <div :class="$style.text" class="_mt">
<slot></slot> <slot></slot>
</div> </div>
</div> </div>

View File

@ -10,10 +10,10 @@ SPDX-License-Identifier: AGPL-3.0-only
<button :class="[$style.header, { [$style.opened]: opened }]" class="_button" role="button" data-cy-folder-header @click="toggle"> <button :class="[$style.header, { [$style.opened]: opened }]" class="_button" role="button" data-cy-folder-header @click="toggle">
<div :class="$style.headerIcon"><slot name="icon"></slot></div> <div :class="$style.headerIcon"><slot name="icon"></slot></div>
<div :class="$style.headerText"> <div :class="$style.headerText">
<div :class="$style.headerTextMain"> <div :class="$style.headerTextMain" class="_1t">
<MkCondensedLine :minScale="2 / 3"><slot name="label"></slot></MkCondensedLine> <MkCondensedLine :minScale="2 / 3"><slot name="label"></slot></MkCondensedLine>
</div> </div>
<div :class="$style.headerTextSub"> <div v-if="$slots.caption" :class="$style.headerTextSub" class="_1t">
<slot name="caption"></slot> <slot name="caption"></slot>
</div> </div>
</div> </div>
@ -143,7 +143,7 @@ onMounted(() => {
align-items: center; align-items: center;
width: 100%; width: 100%;
box-sizing: border-box; box-sizing: border-box;
padding: 9px 12px 9px 12px; padding: 11px 12px 11px 12px;
background: var(--MI_THEME-folderHeaderBg); background: var(--MI_THEME-folderHeaderBg);
-webkit-backdrop-filter: var(--MI-blur, blur(15px)); -webkit-backdrop-filter: var(--MI-blur, blur(15px));
backdrop-filter: var(--MI-blur, blur(15px)); backdrop-filter: var(--MI-blur, blur(15px));
@ -209,6 +209,7 @@ onMounted(() => {
} }
.headerTextSub { .headerTextSub {
margin-top: 4px;
color: color(from var(--MI_THEME-fg) srgb r g b / 0.75); color: color(from var(--MI_THEME-fg) srgb r g b / 0.75);
font-size: .85em; font-size: .85em;
} }

View File

@ -4,7 +4,7 @@ SPDX-License-Identifier: AGPL-3.0-only
--> -->
<template> <template>
<div :class="[$style.root, { [$style.warn]: warn }]" class="_selectable"> <div :class="[$style.root, { [$style.warn]: warn }]" class="_selectable _mt">
<i v-if="warn" class="ti ti-alert-triangle" :class="$style.i"></i> <i v-if="warn" class="ti ti-alert-triangle" :class="$style.i"></i>
<i v-else class="ti ti-info-circle" :class="$style.i"></i> <i v-else class="ti ti-info-circle" :class="$style.i"></i>
<div><slot></slot></div> <div><slot></slot></div>

View File

@ -37,7 +37,7 @@ SPDX-License-Identifier: AGPL-3.0-only
</datalist> </datalist>
<div ref="suffixEl" :class="$style.suffix"><slot name="suffix"></slot></div> <div ref="suffixEl" :class="$style.suffix"><slot name="suffix"></slot></div>
</div> </div>
<div :class="$style.caption"><slot name="caption"></slot></div> <div :class="$style.caption" class="_mt"><slot name="caption"></slot></div>
<MkButton v-if="manualSave && changed" primary :class="$style.save" @click="updated"><i class="ti ti-check"></i> {{ i18n.ts.save }}</MkButton> <MkButton v-if="manualSave && changed" primary :class="$style.save" @click="updated"><i class="ti ti-check"></i> {{ i18n.ts.save }}</MkButton>
</div> </div>

View File

@ -8,7 +8,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<div :class="$style.key"> <div :class="$style.key">
<slot name="key"></slot> <slot name="key"></slot>
</div> </div>
<div :class="$style.value" class="_selectable"> <div :class="$style.value" class="_selectable _mt">
<slot name="value"></slot> <slot name="value"></slot>
<button v-if="copy" v-tooltip="i18n.ts.copy" class="_textButton" style="margin-left: 0.5em;" @click="copy_"><i class="ti ti-copy"></i></button> <button v-if="copy" v-tooltip="i18n.ts.copy" class="_textButton" style="margin-left: 0.5em;" @click="copy_"><i class="ti ti-copy"></i></button>
</div> </div>

View File

@ -31,9 +31,9 @@ SPDX-License-Identifier: AGPL-3.0-only
<template v-for="item in (items2 ?? [])"> <template v-for="item in (items2 ?? [])">
<div v-if="item.type === 'divider'" role="separator" tabindex="-1" :class="$style.divider"></div> <div v-if="item.type === 'divider'" role="separator" tabindex="-1" :class="$style.divider"></div>
<span v-else-if="item.type === 'label'" role="menuitem" tabindex="-1" :class="[$style.label, $style.item]"> <div v-else-if="item.type === 'label'" role="menuitem" tabindex="-1" :class="[$style.label]">
<span style="opacity: 0.7;">{{ item.text }}</span> <span>{{ item.text }}</span>
</span> </div>
<span v-else-if="item.type === 'pending'" role="menuitem" tabindex="0" :class="[$style.pending, $style.item]"> <span v-else-if="item.type === 'pending'" role="menuitem" tabindex="0" :class="[$style.pending, $style.item]">
<span><MkEllipsis/></span> <span><MkEllipsis/></span>
@ -484,9 +484,9 @@ onBeforeUnmount(() => {
min-width: 230px; min-width: 230px;
> .item { > .item {
padding: 6px 20px; padding: 0 20px;
min-height: 35px;
font-size: 0.95em; font-size: 0.95em;
line-height: 24px;
} }
} }
} }
@ -541,12 +541,12 @@ onBeforeUnmount(() => {
display: flex; display: flex;
align-items: center; align-items: center;
position: relative; position: relative;
padding: 5px 16px; padding: 0 16px;
min-height: 30px;
width: 100%; width: 100%;
box-sizing: border-box; box-sizing: border-box;
white-space: nowrap; white-space: nowrap;
font-size: 0.9em; font-size: 0.9em;
line-height: 20px;
text-align: left; text-align: left;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
@ -619,12 +619,6 @@ onBeforeUnmount(() => {
--menuActiveBg: var(--MI_THEME-accentedBg); --menuActiveBg: var(--MI_THEME-accentedBg);
} }
&.label {
pointer-events: none;
font-size: 0.7em;
padding-bottom: 4px;
}
&.pending { &.pending {
pointer-events: none; pointer-events: none;
opacity: 0.7; opacity: 0.7;
@ -674,7 +668,6 @@ onBeforeUnmount(() => {
.icon { .icon {
margin-right: 8px; margin-right: 8px;
line-height: 1;
} }
.caret { .caret {
@ -699,6 +692,19 @@ onBeforeUnmount(() => {
border-top: solid 0.5px var(--MI_THEME-divider); border-top: solid 0.5px var(--MI_THEME-divider);
} }
.label {
position: relative;
padding: 6px 16px;
box-sizing: border-box;
white-space: nowrap;
font-size: 0.7em;
text-align: left;
overflow: hidden;
text-overflow: ellipsis;
opacity: 0.7;
pointer-events: none;
}
.radioIcon { .radioIcon {
display: inline-block; display: inline-block;
position: relative; position: relative;

View File

@ -47,7 +47,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<div v-if="appearNote.channel" :class="$style.colorBar" :style="{ background: appearNote.channel.color }"></div> <div v-if="appearNote.channel" :class="$style.colorBar" :style="{ background: appearNote.channel.color }"></div>
<MkAvatar :class="[$style.avatar, prefer.s.useStickyIcons ? $style.useSticky : null]" :user="appearNote.user" :link="!mock" :preview="!mock"/> <MkAvatar :class="[$style.avatar, prefer.s.useStickyIcons ? $style.useSticky : null]" :user="appearNote.user" :link="!mock" :preview="!mock"/>
<div :class="$style.main"> <div :class="$style.main">
<MkNoteHeader :note="appearNote" :mini="true"/> <MkNoteHeader :note="appearNote" :mini="true" style="margin: 4px 0;"/>
<MkInstanceTicker v-if="showTicker" :host="appearNote.user.host" :instance="appearNote.user.instance"/> <MkInstanceTicker v-if="showTicker" :host="appearNote.user.host" :instance="appearNote.user.instance"/>
<div style="container-type: inline-size;"> <div style="container-type: inline-size;">
<p v-if="appearNote.cw != null" :class="$style.cw"> <p v-if="appearNote.cw != null" :class="$style.cw">
@ -74,13 +74,13 @@ SPDX-License-Identifier: AGPL-3.0-only
:emojiUrls="appearNote.emojis" :emojiUrls="appearNote.emojis"
:enableEmojiMenu="true" :enableEmojiMenu="true"
:enableEmojiMenuReaction="true" :enableEmojiMenuReaction="true"
class="_selectable" class="_selectable _mt"
/> />
<div v-if="translating || translation" :class="$style.translation"> <div v-if="translating || translation" :class="$style.translation">
<MkLoading v-if="translating" mini/> <MkLoading v-if="translating" mini/>
<div v-else-if="translation"> <div v-else-if="translation">
<b>{{ i18n.tsx.translatedFrom({ x: translation.sourceLang }) }}: </b> <b>{{ i18n.tsx.translatedFrom({ x: translation.sourceLang }) }}: </b>
<Mfm :text="translation.text" :author="appearNote.user" :nyaize="'respect'" :emojiUrls="appearNote.emojis" class="_selectable"/> <Mfm :text="translation.text" :author="appearNote.user" :nyaize="'respect'" :emojiUrls="appearNote.emojis" class="_selectable _mt"/>
</div> </div>
</div> </div>
</div> </div>

View File

@ -97,14 +97,14 @@ SPDX-License-Identifier: AGPL-3.0-only
:emojiUrls="appearNote.emojis" :emojiUrls="appearNote.emojis"
:enableEmojiMenu="true" :enableEmojiMenu="true"
:enableEmojiMenuReaction="true" :enableEmojiMenuReaction="true"
class="_selectable" class="_selectable _mt"
/> />
<a v-if="appearNote.renote != null" :class="$style.rn">RN:</a> <a v-if="appearNote.renote != null" :class="$style.rn">RN:</a>
<div v-if="translating || translation" :class="$style.translation"> <div v-if="translating || translation" :class="$style.translation">
<MkLoading v-if="translating" mini/> <MkLoading v-if="translating" mini/>
<div v-else-if="translation"> <div v-else-if="translation">
<b>{{ i18n.tsx.translatedFrom({ x: translation.sourceLang }) }}: </b> <b>{{ i18n.tsx.translatedFrom({ x: translation.sourceLang }) }}: </b>
<Mfm :text="translation.text" :author="appearNote.user" :nyaize="'respect'" :emojiUrls="appearNote.emojis" class="_selectable"/> <Mfm :text="translation.text" :author="appearNote.user" :nyaize="'respect'" :emojiUrls="appearNote.emojis" class="_selectable _mt"/>
</div> </div>
</div> </div>
<div v-if="appearNote.files && appearNote.files.length > 0"> <div v-if="appearNote.files && appearNote.files.length > 0">

View File

@ -7,7 +7,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<div :class="$style.root"> <div :class="$style.root">
<MkAvatar :class="$style.avatar" :user="note.user" link preview/> <MkAvatar :class="$style.avatar" :user="note.user" link preview/>
<div :class="$style.main"> <div :class="$style.main">
<MkNoteHeader :class="$style.header" :note="note" :mini="true"/> <MkNoteHeader :class="$style.header" :note="note" :mini="true" style="margin: 4px 0;"/>
<div> <div>
<p v-if="note.cw != null" :class="$style.cw"> <p v-if="note.cw != null" :class="$style.cw">
<Mfm v-if="note.cw != ''" style="margin-right: 8px;" :text="note.cw" :author="note.user" :nyaize="'respect'" :emojiUrls="note.emojis"/> <Mfm v-if="note.cw != ''" style="margin-right: 8px;" :text="note.cw" :author="note.user" :nyaize="'respect'" :emojiUrls="note.emojis"/>

View File

@ -9,7 +9,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<div v-if="note.channel" :class="$style.colorBar" :style="{ background: note.channel.color }"></div> <div v-if="note.channel" :class="$style.colorBar" :style="{ background: note.channel.color }"></div>
<MkAvatar :class="$style.avatar" :user="note.user" link preview/> <MkAvatar :class="$style.avatar" :user="note.user" link preview/>
<div :class="$style.body"> <div :class="$style.body">
<MkNoteHeader :class="$style.header" :note="note" :mini="true"/> <MkNoteHeader :class="$style.header" :note="note" :mini="true" style="margin: 4px 0;"/>
<div> <div>
<p v-if="note.cw != null" :class="$style.cw"> <p v-if="note.cw != null" :class="$style.cw">
<Mfm v-if="note.cw != ''" style="margin-right: 8px;" :text="note.cw" :author="note.user" :nyaize="'respect'"/> <Mfm v-if="note.cw != ''" style="margin-right: 8px;" :text="note.cw" :author="note.user" :nyaize="'respect'"/>

View File

@ -76,7 +76,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<span v-else-if="notification.type === 'app'">{{ notification.header }}</span> <span v-else-if="notification.type === 'app'">{{ notification.header }}</span>
<MkTime v-if="withTime" :time="notification.createdAt" :class="$style.headerTime"/> <MkTime v-if="withTime" :time="notification.createdAt" :class="$style.headerTime"/>
</header> </header>
<div> <div class="_mt">
<MkA v-if="notification.type === 'reaction' || notification.type === 'reaction:grouped'" :class="$style.text" :to="notePage(notification.note)" :title="getNoteSummary(notification.note)"> <MkA v-if="notification.type === 'reaction' || notification.type === 'reaction:grouped'" :class="$style.text" :to="notePage(notification.note)" :title="getNoteSummary(notification.note)">
<i class="ti ti-quote" :class="$style.quote"></i> <i class="ti ti-quote" :class="$style.quote"></i>
<Mfm :text="getNoteSummary(notification.note)" :plain="true" :nowrap="true" :author="notification.note.user"/> <Mfm :text="getNoteSummary(notification.note)" :plain="true" :nowrap="true" :author="notification.note.user"/>
@ -296,6 +296,7 @@ function getActualReactedUsersCount(notification: Misskey.entities.Notification)
right: -2px; right: -2px;
width: 20px; width: 20px;
height: 20px; height: 20px;
line-height: 20px;
box-sizing: border-box; box-sizing: border-box;
border-radius: 100%; border-radius: 100%;
background: var(--MI_THEME-panel); background: var(--MI_THEME-panel);
@ -310,73 +311,61 @@ function getActualReactedUsersCount(notification: Misskey.entities.Notification)
} }
.t_follow, .t_followRequestAccepted, .t_receiveFollowRequest { .t_follow, .t_followRequestAccepted, .t_receiveFollowRequest {
padding: 3px;
background: var(--eventFollow); background: var(--eventFollow);
pointer-events: none; pointer-events: none;
} }
.t_renote { .t_renote {
padding: 3px;
background: var(--eventRenote); background: var(--eventRenote);
pointer-events: none; pointer-events: none;
} }
.t_quote { .t_quote {
padding: 3px;
background: var(--eventRenote); background: var(--eventRenote);
pointer-events: none; pointer-events: none;
} }
.t_reply { .t_reply {
padding: 3px;
background: var(--eventReply); background: var(--eventReply);
pointer-events: none; pointer-events: none;
} }
.t_mention { .t_mention {
padding: 3px;
background: var(--eventOther); background: var(--eventOther);
pointer-events: none; pointer-events: none;
} }
.t_pollEnded { .t_pollEnded {
padding: 3px;
background: var(--eventOther); background: var(--eventOther);
pointer-events: none; pointer-events: none;
} }
.t_achievementEarned { .t_achievementEarned {
padding: 3px;
background: var(--eventAchievement); background: var(--eventAchievement);
pointer-events: none; pointer-events: none;
} }
.t_exportCompleted { .t_exportCompleted {
padding: 3px;
background: var(--eventOther); background: var(--eventOther);
pointer-events: none; pointer-events: none;
} }
.t_roleAssigned { .t_roleAssigned {
padding: 3px;
background: var(--eventOther); background: var(--eventOther);
pointer-events: none; pointer-events: none;
} }
.t_login { .t_login {
padding: 3px;
background: var(--eventLogin); background: var(--eventLogin);
pointer-events: none; pointer-events: none;
} }
.t_createToken { .t_createToken {
padding: 3px;
background: var(--eventOther); background: var(--eventOther);
pointer-events: none; pointer-events: none;
} }
.t_chatRoomInvitationReceived { .t_chatRoomInvitationReceived {
padding: 3px;
background: var(--eventOther); background: var(--eventOther);
pointer-events: none; pointer-events: none;
} }
@ -390,6 +379,7 @@ function getActualReactedUsersCount(notification: Misskey.entities.Notification)
display: flex; display: flex;
align-items: baseline; align-items: baseline;
white-space: nowrap; white-space: nowrap;
margin: 4px 0;
} }
.headerName { .headerName {

View File

@ -35,7 +35,7 @@ SPDX-License-Identifier: AGPL-3.0-only
</div> </div>
<div ref="suffixEl" :class="$style.suffix"><i class="ti ti-chevron-down" :class="[$style.chevron, { [$style.chevronOpening]: opening }]"></i></div> <div ref="suffixEl" :class="$style.suffix"><i class="ti ti-chevron-down" :class="[$style.chevron, { [$style.chevronOpening]: opening }]"></i></div>
</div> </div>
<div :class="$style.caption"><slot name="caption"></slot></div> <div :class="$style.caption" class="_mt"><slot name="caption"></slot></div>
</div> </div>
</template> </template>

View File

@ -49,12 +49,12 @@ SPDX-License-Identifier: AGPL-3.0-only
<span v-if="item.icon" class="icon"><i :class="item.icon" class="ti-fw"></i></span> <span v-if="item.icon" class="icon"><i :class="item.icon" class="ti-fw"></i></span>
<span class="text"> <span class="text">
<template v-if="item.isRoot"> <template v-if="item.isRoot">
{{ item.label }} <span class="_mt">{{ item.label }}</span>
</template> </template>
<template v-else> <template v-else>
<span style="opacity: 0.7; font-size: 90%;">{{ item.parentLabels.join(' > ') }}</span> <span style="opacity: 0.7; font-size: 90%;" class="_mt">{{ item.parentLabels.join(' > ') }}</span>
<br> <br>
<span>{{ item.label }}</span> <span class="_mt">{{ item.label }}</span>
</template> </template>
</span> </span>
</MkA> </MkA>
@ -235,7 +235,7 @@ function searchOnKeyDown(ev: KeyboardEvent) {
align-items: center; align-items: center;
width: 100%; width: 100%;
box-sizing: border-box; box-sizing: border-box;
padding: 9px 16px 9px 8px; padding: 11px 16px 11px 8px;
border-radius: 9px; border-radius: 9px;
font-size: 0.9em; font-size: 0.9em;

View File

@ -21,7 +21,7 @@ SPDX-License-Identifier: AGPL-3.0-only
</span> </span>
<span v-if="helpText" v-tooltip:dialog="helpText" class="_button _help" :class="$style.help"><i class="ti ti-help-circle"></i></span> <span v-if="helpText" v-tooltip:dialog="helpText" class="_button _help" :class="$style.help"><i class="ti ti-help-circle"></i></span>
</span> </span>
<p :class="$style.caption"><slot name="caption"></slot></p> <p :class="$style.caption" class="_mt"><slot name="caption"></slot></p>
</span> </span>
</div> </div>
</template> </template>

View File

@ -19,13 +19,14 @@ SPDX-License-Identifier: AGPL-3.0-only
:pattern="pattern" :pattern="pattern"
:autocomplete="autocomplete" :autocomplete="autocomplete"
:spellcheck="spellcheck" :spellcheck="spellcheck"
class="_mt"
@focus="focused = true" @focus="focused = true"
@blur="focused = false" @blur="focused = false"
@keydown="onKeydown($event)" @keydown="onKeydown($event)"
@input="onInput" @input="onInput"
></textarea> ></textarea>
</div> </div>
<div :class="$style.caption"><slot name="caption"></slot></div> <div :class="$style.caption" class="_mt"><slot name="caption"></slot></div>
<button v-if="mfmPreview" style="font-size: 0.85em;" class="_textButton" type="button" @click="preview = !preview">{{ i18n.ts.preview }}</button> <button v-if="mfmPreview" style="font-size: 0.85em;" class="_textButton" type="button" @click="preview = !preview">{{ i18n.ts.preview }}</button>
<div v-if="mfmPreview" v-show="preview" v-panel :class="$style.mfmPreview"> <div v-if="mfmPreview" v-show="preview" v-panel :class="$style.mfmPreview">
<Mfm :text="v"/> <Mfm :text="v"/>
@ -177,7 +178,7 @@ onUnmounted(() => {
min-height: 130px; min-height: 130px;
margin: 0; margin: 0;
padding: 12px; padding: 12px;
font: inherit; font-family: inherit;
font-weight: normal; font-weight: normal;
font-size: 1em; font-size: 1em;
color: var(--MI_THEME-fg); color: var(--MI_THEME-fg);

View File

@ -106,8 +106,8 @@ onUnmounted(() => {
.root { .root {
position: absolute; position: absolute;
font-size: 0.8em; font-size: 80%;
padding: 8px 12px; padding: 10px 12px;
box-sizing: border-box; box-sizing: border-box;
text-align: center; text-align: center;
border-radius: 4px; border-radius: 4px;

View File

@ -11,28 +11,28 @@ SPDX-License-Identifier: AGPL-3.0-only
</div> </div>
<button key="public" :disabled="isSilenced || isReplyVisibilitySpecified" class="_button" :class="[$style.item, { [$style.active]: v === 'public' }]" data-index="1" @click="choose('public')"> <button key="public" :disabled="isSilenced || isReplyVisibilitySpecified" class="_button" :class="[$style.item, { [$style.active]: v === 'public' }]" data-index="1" @click="choose('public')">
<div :class="$style.icon"><i class="ti ti-world"></i></div> <div :class="$style.icon"><i class="ti ti-world"></i></div>
<div :class="$style.body"> <div :class="$style.body" class="_mt">
<span :class="$style.itemTitle">{{ i18n.ts._visibility.public }}</span> <span :class="$style.itemTitle">{{ i18n.ts._visibility.public }}</span>
<span :class="$style.itemDescription">{{ i18n.ts._visibility.publicDescription }}</span> <span :class="$style.itemDescription">{{ i18n.ts._visibility.publicDescription }}</span>
</div> </div>
</button> </button>
<button key="home" :disabled="isReplyVisibilitySpecified" class="_button" :class="[$style.item, { [$style.active]: v === 'home' }]" data-index="2" @click="choose('home')"> <button key="home" :disabled="isReplyVisibilitySpecified" class="_button" :class="[$style.item, { [$style.active]: v === 'home' }]" data-index="2" @click="choose('home')">
<div :class="$style.icon"><i class="ti ti-home"></i></div> <div :class="$style.icon"><i class="ti ti-home"></i></div>
<div :class="$style.body"> <div :class="$style.body" class="_mt">
<span :class="$style.itemTitle">{{ i18n.ts._visibility.home }}</span> <span :class="$style.itemTitle">{{ i18n.ts._visibility.home }}</span>
<span :class="$style.itemDescription">{{ i18n.ts._visibility.homeDescription }}</span> <span :class="$style.itemDescription">{{ i18n.ts._visibility.homeDescription }}</span>
</div> </div>
</button> </button>
<button key="followers" :disabled="isReplyVisibilitySpecified" class="_button" :class="[$style.item, { [$style.active]: v === 'followers' }]" data-index="3" @click="choose('followers')"> <button key="followers" :disabled="isReplyVisibilitySpecified" class="_button" :class="[$style.item, { [$style.active]: v === 'followers' }]" data-index="3" @click="choose('followers')">
<div :class="$style.icon"><i class="ti ti-lock"></i></div> <div :class="$style.icon"><i class="ti ti-lock"></i></div>
<div :class="$style.body"> <div :class="$style.body" class="_mt">
<span :class="$style.itemTitle">{{ i18n.ts._visibility.followers }}</span> <span :class="$style.itemTitle">{{ i18n.ts._visibility.followers }}</span>
<span :class="$style.itemDescription">{{ i18n.ts._visibility.followersDescription }}</span> <span :class="$style.itemDescription">{{ i18n.ts._visibility.followersDescription }}</span>
</div> </div>
</button> </button>
<button key="specified" :disabled="localOnly" class="_button" :class="[$style.item, { [$style.active]: v === 'specified' }]" data-index="4" @click="choose('specified')"> <button key="specified" :disabled="localOnly" class="_button" :class="[$style.item, { [$style.active]: v === 'specified' }]" data-index="4" @click="choose('specified')">
<div :class="$style.icon"><i class="ti ti-mail"></i></div> <div :class="$style.icon"><i class="ti ti-mail"></i></div>
<div :class="$style.body"> <div :class="$style.body" class="_mt">
<span :class="$style.itemTitle">{{ i18n.ts._visibility.specified }}</span> <span :class="$style.itemTitle">{{ i18n.ts._visibility.specified }}</span>
<span :class="$style.itemDescription">{{ i18n.ts._visibility.specifiedDescription }}</span> <span :class="$style.itemDescription">{{ i18n.ts._visibility.specifiedDescription }}</span>
</div> </div>

View File

@ -50,10 +50,10 @@ const props = defineProps<{
align-items: center; align-items: center;
width: 100%; width: 100%;
box-sizing: border-box; box-sizing: border-box;
padding: 10px 14px; padding: 12px 14px;
background: var(--MI_THEME-folderHeaderBg); background: var(--MI_THEME-folderHeaderBg);
border-radius: 6px; border-radius: 6px;
font-size: 0.9em; font-size: 90%;
&:hover { &:hover {
text-decoration: none; text-decoration: none;

View File

@ -9,7 +9,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<div> <div>
<slot></slot> <slot></slot>
</div> </div>
<div :class="$style.caption"><slot name="caption"></slot></div> <div :class="$style.caption" class="_mt"><slot name="caption"></slot></div>
</div> </div>
</template> </template>

View File

@ -23,10 +23,10 @@ SPDX-License-Identifier: AGPL-3.0-only
<i v-else-if="announcement.icon === 'error'" class="ti ti-circle-x" style="color: var(--MI_THEME-error);"></i> <i v-else-if="announcement.icon === 'error'" class="ti ti-circle-x" style="color: var(--MI_THEME-error);"></i>
<i v-else-if="announcement.icon === 'success'" class="ti ti-check" style="color: var(--MI_THEME-success);"></i> <i v-else-if="announcement.icon === 'success'" class="ti ti-check" style="color: var(--MI_THEME-success);"></i>
</span> </span>
<Mfm :text="announcement.title"/> <Mfm :text="announcement.title" class="_selectable _mt"/>
</div> </div>
<div :class="$style.content"> <div :class="$style.content">
<Mfm :text="announcement.text"/> <Mfm :text="announcement.text" class="_selectable _mt"/>
<img v-if="announcement.imageUrl" :src="announcement.imageUrl"/> <img v-if="announcement.imageUrl" :src="announcement.imageUrl"/>
<div style="margin-top: 8px; opacity: 0.7; font-size: 85%;"> <div style="margin-top: 8px; opacity: 0.7; font-size: 85%;">
{{ i18n.ts.createdAt }}: <MkTime :time="announcement.createdAt" mode="detail"/> {{ i18n.ts.createdAt }}: <MkTime :time="announcement.createdAt" mode="detail"/>

View File

@ -23,7 +23,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<MkA :to="`/announcements/${announcement.id}`"><span>{{ announcement.title }}</span></MkA> <MkA :to="`/announcements/${announcement.id}`"><span>{{ announcement.title }}</span></MkA>
</div> </div>
<div :class="$style.content"> <div :class="$style.content">
<Mfm :text="announcement.text"/> <Mfm :text="announcement.text" class="_selectable _mt"/>
<img v-if="announcement.imageUrl" :src="announcement.imageUrl"/> <img v-if="announcement.imageUrl" :src="announcement.imageUrl"/>
<MkA :to="`/announcements/${announcement.id}`"> <MkA :to="`/announcements/${announcement.id}`">
<div style="margin-top: 8px; opacity: 0.7; font-size: 85%;"> <div style="margin-top: 8px; opacity: 0.7; font-size: 85%;">

View File

@ -12,7 +12,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<Mfm <Mfm
v-if="message.text" v-if="message.text"
ref="text" ref="text"
class="_selectable" class="_selectable _mt"
:text="message.text" :text="message.text"
:i="$i" :i="$i"
:nyaize="'respect'" :nyaize="'respect'"

View File

@ -51,7 +51,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<div v-if="user.followedMessage != null" class="followedMessage"> <div v-if="user.followedMessage != null" class="followedMessage">
<MkFukidashi class="fukidashi" :tail="narrow ? 'none' : 'left'" negativeMargin> <MkFukidashi class="fukidashi" :tail="narrow ? 'none' : 'left'" negativeMargin>
<div class="messageHeader">{{ i18n.ts.messageToFollower }}</div> <div class="messageHeader">{{ i18n.ts.messageToFollower }}</div>
<div><MkSparkle><Mfm :plain="true" :text="user.followedMessage" :author="user"/></MkSparkle></div> <div><MkSparkle><Mfm :plain="true" :text="user.followedMessage" :author="user" class="_selectable _mt"/></MkSparkle></div>
</MkFukidashi> </MkFukidashi>
</div> </div>
<div v-if="user.roles.length > 0" class="roles"> <div v-if="user.roles.length > 0" class="roles">
@ -84,7 +84,7 @@ SPDX-License-Identifier: AGPL-3.0-only
</div> </div>
<div class="description"> <div class="description">
<MkOmit> <MkOmit>
<Mfm v-if="user.description" :text="user.description" :isNote="false" :author="user"/> <Mfm v-if="user.description" :text="user.description" :isNote="false" :author="user" class="_selectable _mt"/>
<p v-else class="empty">{{ i18n.ts.noAccountDescription }}</p> <p v-else class="empty">{{ i18n.ts.noAccountDescription }}</p>
</MkOmit> </MkOmit>
</div> </div>
@ -105,10 +105,10 @@ SPDX-License-Identifier: AGPL-3.0-only
<div v-if="user.fields.length > 0" class="fields"> <div v-if="user.fields.length > 0" class="fields">
<dl v-for="(field, i) in user.fields" :key="i" class="field"> <dl v-for="(field, i) in user.fields" :key="i" class="field">
<dt class="name"> <dt class="name">
<Mfm :text="field.name" :author="user" :plain="true" :colored="false"/> <Mfm :text="field.name" :author="user" :plain="true" :colored="false" class="_selectable"/>
</dt> </dt>
<dd class="value"> <dd class="value">
<Mfm :text="field.value" :author="user" :colored="false"/> <Mfm :text="field.value" :author="user" :colored="false" class="_selectable"/>
<i v-if="user.verifiedLinks.includes(field.value)" v-tooltip:dialog="i18n.ts.verifiedLink" class="ti ti-circle-check" :class="$style.verifiedLink"></i> <i v-if="user.verifiedLinks.includes(field.value)" v-tooltip:dialog="i18n.ts.verifiedLink" class="ti ti-circle-check" :class="$style.verifiedLink"></i>
</dd> </dd>
</dl> </dl>

View File

@ -32,7 +32,7 @@ html {
overflow-wrap: break-word; overflow-wrap: break-word;
font-family: 'Hiragino Maru Gothic Pro', "BIZ UDGothic", Roboto, HelveticaNeue, Arial, sans-serif; font-family: 'Hiragino Maru Gothic Pro', "BIZ UDGothic", Roboto, HelveticaNeue, Arial, sans-serif;
font-size: 14px; font-size: 14px;
line-height: 1.35; line-height: 1;
text-size-adjust: 100%; text-size-adjust: 100%;
tab-size: 2; tab-size: 2;
-webkit-text-size-adjust: 100%; -webkit-text-size-adjust: 100%;
@ -163,11 +163,12 @@ rt {
.ti { .ti {
width: 1.28em; width: 1.28em;
vertical-align: -12%; vertical-align: -20%;
line-height: 1em; line-height: 0.5;
&::before { &::before {
font-size: 128%; font-size: 128%;
line-height: 0.5;
} }
} }
@ -176,6 +177,19 @@ rt {
text-align: center; text-align: center;
} }
// one-line text
._t {
line-height: 1;
overflow: clip;
white-space: nowrap;
text-overflow: ellipsis;
}
// multi-line text
._mt {
line-height: 1.35;
}
._pageContainer { ._pageContainer {
container-type: size; container-type: size;
contain: strict; contain: strict;