Compare commits
4 Commits
bfcb8c21e3
...
cb4364da53
| Author | SHA1 | Date |
|---|---|---|
|
|
cb4364da53 | |
|
|
58383e7a01 | |
|
|
0249454c61 | |
|
|
9a9a5431b1 |
|
|
@ -52,7 +52,6 @@
|
||||||
- Enhance: シンタックスハイライトのエンジンをJavaScriptベースのものに変更
|
- Enhance: シンタックスハイライトのエンジンをJavaScriptベースのものに変更
|
||||||
- フロントエンドの読み込みサイズを軽量化しました
|
- フロントエンドの読み込みサイズを軽量化しました
|
||||||
- ほとんどの言語のハイライトは問題なく行えますが、互換性の問題により一部の言語が正常にハイライトできなくなる可能性があります。詳しくは https://shiki.style/references/engine-js-compat をご覧ください。
|
- ほとんどの言語のハイライトは問題なく行えますが、互換性の問題により一部の言語が正常にハイライトできなくなる可能性があります。詳しくは https://shiki.style/references/engine-js-compat をご覧ください。
|
||||||
- Fix: チャットに動画ファイルを送付すると、動画の表示が崩れてしまい視聴出来ない問題を修正
|
|
||||||
- Fix: "時計"ウィジェット(Clock)において、Transparent設定が有効でも、その背景が透過されない問題を修正
|
- Fix: "時計"ウィジェット(Clock)において、Transparent設定が有効でも、その背景が透過されない問題を修正
|
||||||
- Fix: 一定時間操作がなかったら動画プレイヤーのコントロールを隠すように
|
- Fix: 一定時間操作がなかったら動画プレイヤーのコントロールを隠すように
|
||||||
- Fix: Twitchのクリップがプレイヤーで再生できない問題を修正
|
- Fix: Twitchのクリップがプレイヤーで再生できない問題を修正
|
||||||
|
|
@ -63,7 +62,6 @@
|
||||||
- Enhance: ノートのレスポンスにアンケートが添付されているかどうかを示すフラグ`hasPoll`を追加
|
- Enhance: ノートのレスポンスにアンケートが添付されているかどうかを示すフラグ`hasPoll`を追加
|
||||||
- Enhance: チャットルームのレスポンスに招待されているかどうかを示すフラグ`invitationExists`を追加
|
- Enhance: チャットルームのレスポンスに招待されているかどうかを示すフラグ`invitationExists`を追加
|
||||||
- Enhance: レートリミットの計算方法を調整 (#13997)
|
- Enhance: レートリミットの計算方法を調整 (#13997)
|
||||||
- Enhance: 外部サイトのOGPのキャッシュ期間を調整
|
|
||||||
- Fix: チャットルームが削除された場合・チャットルームから抜けた場合に、未読状態が残り続けることがあるのを修正
|
- Fix: チャットルームが削除された場合・チャットルームから抜けた場合に、未読状態が残り続けることがあるのを修正
|
||||||
- Fix: ユーザ除外アンテナをインポートできない問題を修正
|
- Fix: ユーザ除外アンテナをインポートできない問題を修正
|
||||||
- Fix: アンテナのセンシティブなチャンネルのノートを含むかどうかの情報がエクスポートされない問題を修正
|
- Fix: アンテナのセンシティブなチャンネルのノートを含むかどうかの情報がエクスポートされない問題を修正
|
||||||
|
|
|
||||||
|
|
@ -1326,10 +1326,6 @@ export interface Locale extends ILocale {
|
||||||
* デバイスのダークモードと同期する
|
* デバイスのダークモードと同期する
|
||||||
*/
|
*/
|
||||||
"syncDeviceDarkMode": string;
|
"syncDeviceDarkMode": string;
|
||||||
/**
|
|
||||||
* 「{x}」がオンになっています。同期をオフにして手動でモードを切り替えますか?
|
|
||||||
*/
|
|
||||||
"switchDarkModeManuallyWhenSyncEnabledConfirm": ParameterizedString<"x">;
|
|
||||||
/**
|
/**
|
||||||
* ドライブ
|
* ドライブ
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -327,7 +327,6 @@ dark: "ダーク"
|
||||||
lightThemes: "明るいテーマ"
|
lightThemes: "明るいテーマ"
|
||||||
darkThemes: "暗いテーマ"
|
darkThemes: "暗いテーマ"
|
||||||
syncDeviceDarkMode: "デバイスのダークモードと同期する"
|
syncDeviceDarkMode: "デバイスのダークモードと同期する"
|
||||||
switchDarkModeManuallyWhenSyncEnabledConfirm: "「{x}」がオンになっています。同期をオフにして手動でモードを切り替えますか?"
|
|
||||||
drive: "ドライブ"
|
drive: "ドライブ"
|
||||||
fileName: "ファイル名"
|
fileName: "ファイル名"
|
||||||
selectFile: "ファイルを選択"
|
selectFile: "ファイルを選択"
|
||||||
|
|
|
||||||
|
|
@ -327,7 +327,6 @@ dark: "深色"
|
||||||
lightThemes: "淺色佈景主題"
|
lightThemes: "淺色佈景主題"
|
||||||
darkThemes: "深色佈景主題"
|
darkThemes: "深色佈景主題"
|
||||||
syncDeviceDarkMode: "與裝置的深色模式同步"
|
syncDeviceDarkMode: "與裝置的深色模式同步"
|
||||||
switchDarkModeManuallyWhenSyncEnabledConfirm: "「{x}」已開啟。要關閉同步並手動切換模式嗎?\n"
|
|
||||||
drive: "雲端硬碟"
|
drive: "雲端硬碟"
|
||||||
fileName: "檔案名稱"
|
fileName: "檔案名稱"
|
||||||
selectFile: "選擇檔案"
|
selectFile: "選擇檔案"
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "misskey",
|
"name": "misskey",
|
||||||
"version": "2025.5.1-beta.5",
|
"version": "2025.5.1-beta.4",
|
||||||
"codename": "nasubi",
|
"codename": "nasubi",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
|
|
|
||||||
|
|
@ -83,7 +83,7 @@ export const DEFAULT_POLICIES: RolePolicies = {
|
||||||
canUseTranslator: true,
|
canUseTranslator: true,
|
||||||
canHideAds: false,
|
canHideAds: false,
|
||||||
driveCapacityMb: 100,
|
driveCapacityMb: 100,
|
||||||
maxFileSizeMb: 30,
|
maxFileSizeMb: 10,
|
||||||
alwaysMarkNsfw: false,
|
alwaysMarkNsfw: false,
|
||||||
canUpdateBioMedia: true,
|
canUpdateBioMedia: true,
|
||||||
pinLimit: 5,
|
pinLimit: 5,
|
||||||
|
|
|
||||||
|
|
@ -94,8 +94,8 @@ export class UrlPreviewService {
|
||||||
summary.icon = this.wrap(summary.icon);
|
summary.icon = this.wrap(summary.icon);
|
||||||
summary.thumbnail = this.wrap(summary.thumbnail);
|
summary.thumbnail = this.wrap(summary.thumbnail);
|
||||||
|
|
||||||
// Cache 1day
|
// Cache 7days
|
||||||
reply.header('Cache-Control', 'max-age=86400, immutable');
|
reply.header('Cache-Control', 'max-age=604800, immutable');
|
||||||
|
|
||||||
return summary;
|
return summary;
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
|
|
||||||
|
|
@ -10,8 +10,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||||
tail === 'left' ? $style.left : $style.right,
|
tail === 'left' ? $style.left : $style.right,
|
||||||
negativeMargin === true && $style.negativeMargin,
|
negativeMargin === true && $style.negativeMargin,
|
||||||
shadow === true && $style.shadow,
|
shadow === true && $style.shadow,
|
||||||
accented === true && $style.accented,
|
accented === true && $style.accented
|
||||||
fullWidth === true && $style.fullWidth,
|
|
||||||
]"
|
]"
|
||||||
>
|
>
|
||||||
<div :class="$style.bg">
|
<div :class="$style.bg">
|
||||||
|
|
@ -33,13 +32,11 @@ withDefaults(defineProps<{
|
||||||
negativeMargin?: boolean;
|
negativeMargin?: boolean;
|
||||||
shadow?: boolean;
|
shadow?: boolean;
|
||||||
accented?: boolean;
|
accented?: boolean;
|
||||||
fullWidth?: boolean;
|
|
||||||
}>(), {
|
}>(), {
|
||||||
tail: 'right',
|
tail: 'right',
|
||||||
negativeMargin: false,
|
negativeMargin: false,
|
||||||
shadow: false,
|
shadow: false,
|
||||||
accented: false,
|
accented: false,
|
||||||
fullWidth: false,
|
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
@ -76,14 +73,6 @@ withDefaults(defineProps<{
|
||||||
margin-right: calc(calc(var(--fukidashi-radius) * .13) * -1);
|
margin-right: calc(calc(var(--fukidashi-radius) * .13) * -1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&.fullWidth {
|
|
||||||
width: 100%;
|
|
||||||
|
|
||||||
&.content {
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.bg {
|
.bg {
|
||||||
|
|
@ -96,7 +85,6 @@ withDefaults(defineProps<{
|
||||||
.content {
|
.content {
|
||||||
position: relative;
|
position: relative;
|
||||||
padding: 10px 14px;
|
padding: 10px 14px;
|
||||||
box-sizing: border-box;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@container (max-width: 450px) {
|
@container (max-width: 450px) {
|
||||||
|
|
|
||||||
|
|
@ -6,9 +6,9 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||||
<template>
|
<template>
|
||||||
<div :class="[$style.root, { [$style.isMe]: isMe }]">
|
<div :class="[$style.root, { [$style.isMe]: isMe }]">
|
||||||
<MkAvatar :class="$style.avatar" :user="message.fromUser!" :link="!isMe" :preview="false"/>
|
<MkAvatar :class="$style.avatar" :user="message.fromUser!" :link="!isMe" :preview="false"/>
|
||||||
<div :class="[$style.body, message.file != null ? $style.fullWidth : null]" @contextmenu.stop="onContextmenu">
|
<div :class="$style.body" @contextmenu.stop="onContextmenu">
|
||||||
<div :class="$style.header"><MkUserName v-if="!isMe && prefer.s['chat.showSenderName'] && message.fromUser != null" :user="message.fromUser"/></div>
|
<div :class="$style.header"><MkUserName v-if="!isMe && prefer.s['chat.showSenderName'] && message.fromUser != null" :user="message.fromUser"/></div>
|
||||||
<MkFukidashi :class="$style.fukidashi" :tail="isMe ? 'right' : 'left'" :fullWidth="message.file != null" :accented="isMe">
|
<MkFukidashi :class="$style.fukidashi" :tail="isMe ? 'right' : 'left'" :accented="isMe">
|
||||||
<Mfm
|
<Mfm
|
||||||
v-if="message.text"
|
v-if="message.text"
|
||||||
ref="text"
|
ref="text"
|
||||||
|
|
@ -259,10 +259,6 @@ function showMenu(ev: MouseEvent, contextmenu = false) {
|
||||||
|
|
||||||
.body {
|
.body {
|
||||||
margin: 0 12px;
|
margin: 0 12px;
|
||||||
|
|
||||||
&.fullWidth {
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.header {
|
.header {
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,8 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||||
<div v-adaptive-border class="rfqxtzch _panel">
|
<div v-adaptive-border class="rfqxtzch _panel">
|
||||||
<div class="toggle">
|
<div class="toggle">
|
||||||
<div class="toggleWrapper">
|
<div class="toggleWrapper">
|
||||||
<div class="toggle" :class="store.r.darkMode.value ? 'checked' : null" @click="toggleDarkMode()">
|
<input id="dn" v-model="darkMode" type="checkbox" class="dn"/>
|
||||||
|
<label for="dn" class="toggle">
|
||||||
<span class="before">{{ i18n.ts.light }}</span>
|
<span class="before">{{ i18n.ts.light }}</span>
|
||||||
<span class="after">{{ i18n.ts.dark }}</span>
|
<span class="after">{{ i18n.ts.dark }}</span>
|
||||||
<span class="toggle__handler">
|
<span class="toggle__handler">
|
||||||
|
|
@ -23,7 +24,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||||
<span class="star star--4"></span>
|
<span class="star star--4"></span>
|
||||||
<span class="star star--5"></span>
|
<span class="star star--5"></span>
|
||||||
<span class="star star--6"></span>
|
<span class="star star--6"></span>
|
||||||
</div>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="sync">
|
<div class="sync">
|
||||||
|
|
@ -36,7 +37,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="_gaps">
|
<div class="_gaps">
|
||||||
<template v-if="!store.r.darkMode.value">
|
<template v-if="!darkMode">
|
||||||
<SearchMarker :keywords="['light', 'theme']">
|
<SearchMarker :keywords="['light', 'theme']">
|
||||||
<MkFolder :defaultOpen="true" :max-height="500">
|
<MkFolder :defaultOpen="true" :max-height="500">
|
||||||
<template #icon><i class="ti ti-sun"></i></template>
|
<template #icon><i class="ti ti-sun"></i></template>
|
||||||
|
|
@ -204,7 +205,6 @@ import JSON5 from 'json5';
|
||||||
import defaultLightTheme from '@@/themes/l-light.json5';
|
import defaultLightTheme from '@@/themes/l-light.json5';
|
||||||
import defaultDarkTheme from '@@/themes/d-green-lime.json5';
|
import defaultDarkTheme from '@@/themes/d-green-lime.json5';
|
||||||
import type { Theme } from '@/theme.js';
|
import type { Theme } from '@/theme.js';
|
||||||
import * as os from '@/os.js';
|
|
||||||
import MkSwitch from '@/components/MkSwitch.vue';
|
import MkSwitch from '@/components/MkSwitch.vue';
|
||||||
import FormSection from '@/components/form/section.vue';
|
import FormSection from '@/components/form/section.vue';
|
||||||
import FormLink from '@/components/form/link.vue';
|
import FormLink from '@/components/form/link.vue';
|
||||||
|
|
@ -257,6 +257,7 @@ const lightThemeId = computed({
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const darkMode = computed(store.makeGetterSetter('darkMode'));
|
||||||
const syncDeviceDarkMode = prefer.model('syncDeviceDarkMode');
|
const syncDeviceDarkMode = prefer.model('syncDeviceDarkMode');
|
||||||
const themesCount = installedThemes.value.length;
|
const themesCount = installedThemes.value.length;
|
||||||
|
|
||||||
|
|
@ -266,21 +267,6 @@ watch(syncDeviceDarkMode, () => {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
async function toggleDarkMode() {
|
|
||||||
const value = !store.r.darkMode.value;
|
|
||||||
if (syncDeviceDarkMode.value) {
|
|
||||||
const { canceled } = await os.confirm({
|
|
||||||
text: i18n.tsx.switchDarkModeManuallyWhenSyncEnabledConfirm({ x: i18n.ts.syncDeviceDarkMode }),
|
|
||||||
});
|
|
||||||
if (canceled) return;
|
|
||||||
|
|
||||||
syncDeviceDarkMode.value = false;
|
|
||||||
store.set('darkMode', value);
|
|
||||||
} else {
|
|
||||||
store.set('darkMode', value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const themesSyncEnabled = ref(prefer.isSyncEnabled('themes'));
|
const themesSyncEnabled = ref(prefer.isSyncEnabled('themes'));
|
||||||
|
|
||||||
function changeThemesSyncEnabled(value: boolean) {
|
function changeThemesSyncEnabled(value: boolean) {
|
||||||
|
|
@ -379,6 +365,16 @@ definePage(() => ({
|
||||||
overflow: clip;
|
overflow: clip;
|
||||||
padding: 0 100px;
|
padding: 0 100px;
|
||||||
vertical-align: bottom;
|
vertical-align: bottom;
|
||||||
|
|
||||||
|
input {
|
||||||
|
position: absolute;
|
||||||
|
left: -99em;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.dn:focus-visible ~ .toggle {
|
||||||
|
outline: 2px solid var(--MI_THEME-focus);
|
||||||
|
outline-offset: 2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.toggle {
|
.toggle {
|
||||||
|
|
@ -407,61 +403,6 @@ definePage(() => ({
|
||||||
right: -68px;
|
right: -68px;
|
||||||
color: var(--MI_THEME-fg);
|
color: var(--MI_THEME-fg);
|
||||||
}
|
}
|
||||||
|
|
||||||
&.checked {
|
|
||||||
background-color: #749DD6;
|
|
||||||
|
|
||||||
> .before {
|
|
||||||
color: var(--MI_THEME-fg);
|
|
||||||
}
|
|
||||||
|
|
||||||
> .after {
|
|
||||||
color: var(--MI_THEME-accent);
|
|
||||||
}
|
|
||||||
|
|
||||||
.toggle__handler {
|
|
||||||
background-color: #FFE5B5;
|
|
||||||
transform: translate3d(40px, 0, 0) rotate(0);
|
|
||||||
|
|
||||||
.crater { opacity: 1; }
|
|
||||||
}
|
|
||||||
|
|
||||||
.star--1 {
|
|
||||||
width: 2px;
|
|
||||||
height: 2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.star--2 {
|
|
||||||
width: 4px;
|
|
||||||
height: 4px;
|
|
||||||
transform: translate3d(-5px, 0, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
.star--3 {
|
|
||||||
width: 2px;
|
|
||||||
height: 2px;
|
|
||||||
transform: translate3d(-7px, 0, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
.star--4,
|
|
||||||
.star--5,
|
|
||||||
.star--6 {
|
|
||||||
opacity: 1;
|
|
||||||
transform: translate3d(0,0,0);
|
|
||||||
}
|
|
||||||
|
|
||||||
.star--4 {
|
|
||||||
transition: all 300ms 200ms cubic-bezier(0.445, 0.05, 0.55, 0.95) !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.star--5 {
|
|
||||||
transition: all 300ms 300ms cubic-bezier(0.445, 0.05, 0.55, 0.95) !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.star--6 {
|
|
||||||
transition: all 300ms 400ms cubic-bezier(0.445, 0.05, 0.55, 0.95) !important;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.toggle__handler {
|
.toggle__handler {
|
||||||
|
|
@ -572,6 +513,63 @@ definePage(() => ({
|
||||||
height: 2px;
|
height: 2px;
|
||||||
transform: translate3d(3px,0,0);
|
transform: translate3d(3px,0,0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
input:checked {
|
||||||
|
+ .toggle {
|
||||||
|
background-color: #749DD6;
|
||||||
|
|
||||||
|
> .before {
|
||||||
|
color: var(--MI_THEME-fg);
|
||||||
|
}
|
||||||
|
|
||||||
|
> .after {
|
||||||
|
color: var(--MI_THEME-accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
.toggle__handler {
|
||||||
|
background-color: #FFE5B5;
|
||||||
|
transform: translate3d(40px, 0, 0) rotate(0);
|
||||||
|
|
||||||
|
.crater { opacity: 1; }
|
||||||
|
}
|
||||||
|
|
||||||
|
.star--1 {
|
||||||
|
width: 2px;
|
||||||
|
height: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.star--2 {
|
||||||
|
width: 4px;
|
||||||
|
height: 4px;
|
||||||
|
transform: translate3d(-5px, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
.star--3 {
|
||||||
|
width: 2px;
|
||||||
|
height: 2px;
|
||||||
|
transform: translate3d(-7px, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
.star--4,
|
||||||
|
.star--5,
|
||||||
|
.star--6 {
|
||||||
|
opacity: 1;
|
||||||
|
transform: translate3d(0,0,0);
|
||||||
|
}
|
||||||
|
|
||||||
|
.star--4 {
|
||||||
|
transition: all 300ms 200ms cubic-bezier(0.445, 0.05, 0.55, 0.95) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.star--5 {
|
||||||
|
transition: all 300ms 300ms cubic-bezier(0.445, 0.05, 0.55, 0.95) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.star--6 {
|
||||||
|
transition: all 300ms 400ms cubic-bezier(0.445, 0.05, 0.55, 0.95) !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
> .sync {
|
> .sync {
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"name": "misskey-js",
|
"name": "misskey-js",
|
||||||
"version": "2025.5.1-beta.5",
|
"version": "2025.5.1-beta.4",
|
||||||
"description": "Misskey SDK for JavaScript",
|
"description": "Misskey SDK for JavaScript",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"main": "./built/index.js",
|
"main": "./built/index.js",
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue