mirror of
https://codeberg.org/yeentown/barkey.git
synced 2025-07-07 12:36:57 +00:00
Merge branch 'misskey-develop' into merge/2025-03-24
# Conflicts: # .github/workflows/api-misskey-js.yml # .github/workflows/changelog-check.yml # .github/workflows/check-misskey-js-autogen.yml # .github/workflows/get-api-diff.yml # .github/workflows/lint.yml # .github/workflows/locale.yml # .github/workflows/on-release-created.yml # .github/workflows/storybook.yml # .github/workflows/test-backend.yml # .github/workflows/test-federation.yml # .github/workflows/test-frontend.yml # .github/workflows/test-misskey-js.yml # .github/workflows/test-production.yml # .github/workflows/validate-api-json.yml # locales/index.d.ts # package.json # packages/misskey-js/generator/package.json # packages/misskey-js/package.json # pnpm-lock.yaml # scripts/changelog-checker/package-lock.json # scripts/changelog-checker/package.json
This commit is contained in:
commit
7ff15816d1
35 changed files with 716 additions and 379 deletions
|
@ -1,4 +1,4 @@
|
||||||
## 2025.3.2
|
## 2025.4.0
|
||||||
|
|
||||||
### General
|
### General
|
||||||
- Feat: チャットがリニューアルして復活しました(beta)
|
- Feat: チャットがリニューアルして復活しました(beta)
|
||||||
|
|
|
@ -1128,7 +1128,7 @@ pleaseAgreeAllToContinue: "Has d'acceptar tots els camps de dalt per poder conti
|
||||||
continue: "Continuar"
|
continue: "Continuar"
|
||||||
preservedUsernames: "Noms d'usuaris reservats"
|
preservedUsernames: "Noms d'usuaris reservats"
|
||||||
preservedUsernamesDescription: "Llistat de noms d'usuaris que no es poden fer servir separats per salts de linia. Aquests noms d'usuaris no estaran disponibles quan es creï un compte d'usuari normal, però els administradors els poden fer servir per crear comptes manualment. Per altre banda els comptes ja creats amb aquests noms d'usuari no es veure'n afectats."
|
preservedUsernamesDescription: "Llistat de noms d'usuaris que no es poden fer servir separats per salts de linia. Aquests noms d'usuaris no estaran disponibles quan es creï un compte d'usuari normal, però els administradors els poden fer servir per crear comptes manualment. Per altre banda els comptes ja creats amb aquests noms d'usuari no es veure'n afectats."
|
||||||
createNoteFromTheFile: "Compon una nota des d'aquest fitxer"
|
createNoteFromTheFile: "Escriu una nota incloent aquest fitxer"
|
||||||
archive: "Arxiu"
|
archive: "Arxiu"
|
||||||
archived: "Arxivat"
|
archived: "Arxivat"
|
||||||
unarchive: "Desarxivar"
|
unarchive: "Desarxivar"
|
||||||
|
@ -1336,6 +1336,9 @@ chat: "Xat"
|
||||||
migrateOldSettings: "Migració de la configuració antiga "
|
migrateOldSettings: "Migració de la configuració antiga "
|
||||||
migrateOldSettings_description: "Normalment això es fa automàticament, però si la transició no es fa, el procés es pot iniciar manualment. S'esborrarà la configuració actual."
|
migrateOldSettings_description: "Normalment això es fa automàticament, però si la transició no es fa, el procés es pot iniciar manualment. S'esborrarà la configuració actual."
|
||||||
compress: "Comprimir "
|
compress: "Comprimir "
|
||||||
|
right: "Dreta"
|
||||||
|
bottom: "A baix "
|
||||||
|
top: "A dalt "
|
||||||
_chat:
|
_chat:
|
||||||
noMessagesYet: "Encara no tens missatges "
|
noMessagesYet: "Encara no tens missatges "
|
||||||
newMessage: "Missatge nou"
|
newMessage: "Missatge nou"
|
||||||
|
@ -2593,6 +2596,9 @@ _notification:
|
||||||
_deck:
|
_deck:
|
||||||
alwaysShowMainColumn: "Mostrar sempre la columna principal"
|
alwaysShowMainColumn: "Mostrar sempre la columna principal"
|
||||||
columnAlign: "Alinea les columnes"
|
columnAlign: "Alinea les columnes"
|
||||||
|
columnGap: "Espai entre columnes"
|
||||||
|
deckMenuPosition: "Posició del menú del tauler"
|
||||||
|
navbarPosition: "Posició de la barra de navegació "
|
||||||
addColumn: "Afig una columna"
|
addColumn: "Afig una columna"
|
||||||
newNoteNotificationSettings: "Configuració de notificacions per a notes noves"
|
newNoteNotificationSettings: "Configuració de notificacions per a notes noves"
|
||||||
configureColumn: "Configuració de columnes"
|
configureColumn: "Configuració de columnes"
|
||||||
|
|
|
@ -962,8 +962,8 @@ cropImageAsk: "Möchtest du das Bild zuschneiden?"
|
||||||
cropYes: "Zuschneiden"
|
cropYes: "Zuschneiden"
|
||||||
cropNo: "Unbearbeitet verwenden"
|
cropNo: "Unbearbeitet verwenden"
|
||||||
file: "Datei"
|
file: "Datei"
|
||||||
recentNHours: "Letzten {n} Stunden"
|
recentNHours: "Letzte {n} Stunden"
|
||||||
recentNDays: "Letzten {n} Tage"
|
recentNDays: "Letzte {n} Tage"
|
||||||
noEmailServerWarning: "Es ist kein Email-Server konfiguriert."
|
noEmailServerWarning: "Es ist kein Email-Server konfiguriert."
|
||||||
thereIsUnresolvedAbuseReportWarning: "Es liegen ungelöste Meldungen vor."
|
thereIsUnresolvedAbuseReportWarning: "Es liegen ungelöste Meldungen vor."
|
||||||
recommended: "Empfehlung"
|
recommended: "Empfehlung"
|
||||||
|
@ -971,7 +971,7 @@ check: "Check"
|
||||||
driveCapOverrideLabel: "Die Drive-Kapazität dieses Nutzers verändern"
|
driveCapOverrideLabel: "Die Drive-Kapazität dieses Nutzers verändern"
|
||||||
driveCapOverrideCaption: "Gib einen Wert von 0 oder weniger ein, um die Kapazität auf den Standard zurückzusetzen."
|
driveCapOverrideCaption: "Gib einen Wert von 0 oder weniger ein, um die Kapazität auf den Standard zurückzusetzen."
|
||||||
requireAdminForView: "Melde dich mit einem Administratorkonto an, um dies einzusehen."
|
requireAdminForView: "Melde dich mit einem Administratorkonto an, um dies einzusehen."
|
||||||
isSystemAccount: "Ein Benutzerkonto, dass durch das System erstellt und automatisch kontrolliert wird."
|
isSystemAccount: "Ein Benutzerkonto, das durch das System erstellt und automatisch verwaltet wird."
|
||||||
typeToConfirm: "Bitte gib zur Bestätigung {x} ein"
|
typeToConfirm: "Bitte gib zur Bestätigung {x} ein"
|
||||||
deleteAccount: "Benutzerkonto löschen"
|
deleteAccount: "Benutzerkonto löschen"
|
||||||
document: "Dokumentation"
|
document: "Dokumentation"
|
||||||
|
|
|
@ -345,7 +345,7 @@ emptyDrive: "Your Drive is empty"
|
||||||
emptyFolder: "This folder is empty"
|
emptyFolder: "This folder is empty"
|
||||||
unableToDelete: "Unable to delete"
|
unableToDelete: "Unable to delete"
|
||||||
inputNewFileName: "Enter a new filename"
|
inputNewFileName: "Enter a new filename"
|
||||||
inputNewDescription: "Enter new caption"
|
inputNewDescription: "Enter new alt text"
|
||||||
inputNewFolderName: "Enter a new folder name"
|
inputNewFolderName: "Enter a new folder name"
|
||||||
circularReferenceFolder: "The destination folder is a subfolder of the folder you wish to move."
|
circularReferenceFolder: "The destination folder is a subfolder of the folder you wish to move."
|
||||||
hasChildFilesOrFolders: "Since this folder is not empty, it can not be deleted."
|
hasChildFilesOrFolders: "Since this folder is not empty, it can not be deleted."
|
||||||
|
@ -643,8 +643,8 @@ disablePlayer: "Close video player"
|
||||||
expandTweet: "Expand post"
|
expandTweet: "Expand post"
|
||||||
themeEditor: "Theme editor"
|
themeEditor: "Theme editor"
|
||||||
description: "Description"
|
description: "Description"
|
||||||
describeFile: "Add caption"
|
describeFile: "Add alt text"
|
||||||
enterFileDescription: "Enter caption"
|
enterFileDescription: "Enter alt text"
|
||||||
author: "Author"
|
author: "Author"
|
||||||
leaveConfirm: "There are unsaved changes. Do you want to discard them?"
|
leaveConfirm: "There are unsaved changes. Do you want to discard them?"
|
||||||
manage: "Management"
|
manage: "Management"
|
||||||
|
@ -1014,7 +1014,7 @@ sendPushNotificationReadMessageCaption: "This may increase the power consumption
|
||||||
windowMaximize: "Maximize"
|
windowMaximize: "Maximize"
|
||||||
windowMinimize: "Minimize"
|
windowMinimize: "Minimize"
|
||||||
windowRestore: "Restore"
|
windowRestore: "Restore"
|
||||||
caption: "Caption"
|
caption: "Alt text"
|
||||||
loggedInAsBot: "Currently logged in as bot"
|
loggedInAsBot: "Currently logged in as bot"
|
||||||
tools: "Tools"
|
tools: "Tools"
|
||||||
cannotLoad: "Unable to load"
|
cannotLoad: "Unable to load"
|
||||||
|
@ -1336,6 +1336,9 @@ chat: "Chat"
|
||||||
migrateOldSettings: "Migrate old client settings"
|
migrateOldSettings: "Migrate old client settings"
|
||||||
migrateOldSettings_description: "This should be done automatically but if for some reason the migration was not successful, you can trigger the migration process yourself manually. The current configuration information will be overwritten."
|
migrateOldSettings_description: "This should be done automatically but if for some reason the migration was not successful, you can trigger the migration process yourself manually. The current configuration information will be overwritten."
|
||||||
compress: "Compress"
|
compress: "Compress"
|
||||||
|
right: "Right"
|
||||||
|
bottom: "Bottom"
|
||||||
|
top: "Top"
|
||||||
_chat:
|
_chat:
|
||||||
noMessagesYet: "No messages yet"
|
noMessagesYet: "No messages yet"
|
||||||
newMessage: "New message"
|
newMessage: "New message"
|
||||||
|
@ -2593,6 +2596,9 @@ _notification:
|
||||||
_deck:
|
_deck:
|
||||||
alwaysShowMainColumn: "Always show main column"
|
alwaysShowMainColumn: "Always show main column"
|
||||||
columnAlign: "Align columns"
|
columnAlign: "Align columns"
|
||||||
|
columnGap: "Margin between columns"
|
||||||
|
deckMenuPosition: "Deck menu position"
|
||||||
|
navbarPosition: "Navigation bar position"
|
||||||
addColumn: "Add column"
|
addColumn: "Add column"
|
||||||
newNoteNotificationSettings: "Notification setting for new notes"
|
newNoteNotificationSettings: "Notification setting for new notes"
|
||||||
configureColumn: "Column settings"
|
configureColumn: "Column settings"
|
||||||
|
@ -2606,7 +2612,7 @@ _deck:
|
||||||
newProfile: "New profile"
|
newProfile: "New profile"
|
||||||
deleteProfile: "Delete profile"
|
deleteProfile: "Delete profile"
|
||||||
introduction: "Create the perfect interface for you by arranging columns freely!"
|
introduction: "Create the perfect interface for you by arranging columns freely!"
|
||||||
introduction2: "Click on the + on the right of the screen to add new colums whenever you want."
|
introduction2: "Click on the + on the right of the screen to add new columns whenever you want."
|
||||||
widgetsIntroduction: "Please select \"Edit widgets\" in the column menu and add a widget."
|
widgetsIntroduction: "Please select \"Edit widgets\" in the column menu and add a widget."
|
||||||
useSimpleUiForNonRootPages: "Use simple UI for navigated pages"
|
useSimpleUiForNonRootPages: "Use simple UI for navigated pages"
|
||||||
usedAsMinWidthWhenFlexible: "Minimum width will be used for this when the \"Auto-adjust width\" option is enabled"
|
usedAsMinWidthWhenFlexible: "Minimum width will be used for this when the \"Auto-adjust width\" option is enabled"
|
||||||
|
|
|
@ -1295,6 +1295,7 @@ messageToFollower: "Mensaje a seguidores"
|
||||||
target: "Para"
|
target: "Para"
|
||||||
federationSpecified: "Este servidor opera en una federación de listas blancas. No puede interactuar con otros servidores que no sean los especificados por el administrador."
|
federationSpecified: "Este servidor opera en una federación de listas blancas. No puede interactuar con otros servidores que no sean los especificados por el administrador."
|
||||||
federationDisabled: "La federación está desactivada en este servidor. No puede interactuar con usuarios de otros servidores"
|
federationDisabled: "La federación está desactivada en este servidor. No puede interactuar con usuarios de otros servidores"
|
||||||
|
preferences: "Preferencias"
|
||||||
postForm: "Formulario"
|
postForm: "Formulario"
|
||||||
information: "Información"
|
information: "Información"
|
||||||
_chat:
|
_chat:
|
||||||
|
|
24
locales/index.d.ts
vendored
24
locales/index.d.ts
vendored
|
@ -8303,23 +8303,19 @@ export interface Locale extends ILocale {
|
||||||
*/
|
*/
|
||||||
"header": string;
|
"header": string;
|
||||||
/**
|
/**
|
||||||
* サイドバーの背景
|
* ナビゲーションバーの背景
|
||||||
*/
|
*/
|
||||||
"navBg": string;
|
"navBg": string;
|
||||||
/**
|
/**
|
||||||
* サイドバーの文字
|
* ナビゲーションバーの文字
|
||||||
*/
|
*/
|
||||||
"navFg": string;
|
"navFg": string;
|
||||||
/**
|
/**
|
||||||
* サイドバー文字(ホバー)
|
* ナビゲーションバー文字(アクティブ)
|
||||||
*/
|
|
||||||
"navHoverFg": string;
|
|
||||||
/**
|
|
||||||
* サイドバー文字(アクティブ)
|
|
||||||
*/
|
*/
|
||||||
"navActive": string;
|
"navActive": string;
|
||||||
/**
|
/**
|
||||||
* サイドバーのインジケーター
|
* ナビゲーションバーのインジケーター
|
||||||
*/
|
*/
|
||||||
"navIndicator": string;
|
"navIndicator": string;
|
||||||
/**
|
/**
|
||||||
|
@ -8402,10 +8398,6 @@ export interface Locale extends ILocale {
|
||||||
* ドライブフォルダーの背景
|
* ドライブフォルダーの背景
|
||||||
*/
|
*/
|
||||||
"driveFolderBg": string;
|
"driveFolderBg": string;
|
||||||
/**
|
|
||||||
* 壁紙のオーバーレイ
|
|
||||||
*/
|
|
||||||
"wallpaperOverlay": string;
|
|
||||||
/**
|
/**
|
||||||
* バッジ
|
* バッジ
|
||||||
*/
|
*/
|
||||||
|
@ -8414,14 +8406,6 @@ export interface Locale extends ILocale {
|
||||||
* チャットの背景
|
* チャットの背景
|
||||||
*/
|
*/
|
||||||
"messageBg": string;
|
"messageBg": string;
|
||||||
/**
|
|
||||||
* アクセント (暗め)
|
|
||||||
*/
|
|
||||||
"accentDarken": string;
|
|
||||||
/**
|
|
||||||
* アクセント (明るめ)
|
|
||||||
*/
|
|
||||||
"accentLighten": string;
|
|
||||||
/**
|
/**
|
||||||
* 強調された文字
|
* 強調された文字
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -2161,16 +2161,15 @@ _theme:
|
||||||
panel: "パネル"
|
panel: "パネル"
|
||||||
shadow: "影"
|
shadow: "影"
|
||||||
header: "ヘッダー"
|
header: "ヘッダー"
|
||||||
navBg: "サイドバーの背景"
|
navBg: "ナビゲーションバーの背景"
|
||||||
navFg: "サイドバーの文字"
|
navFg: "ナビゲーションバーの文字"
|
||||||
navHoverFg: "サイドバー文字(ホバー)"
|
navActive: "ナビゲーションバー文字(アクティブ)"
|
||||||
navActive: "サイドバー文字(アクティブ)"
|
navIndicator: "ナビゲーションバーのインジケーター"
|
||||||
navIndicator: "サイドバーのインジケーター"
|
|
||||||
link: "リンク"
|
link: "リンク"
|
||||||
hashtag: "ハッシュタグ"
|
hashtag: "ハッシュタグ"
|
||||||
mention: "メンション"
|
mention: "メンション"
|
||||||
mentionMe: "あなた宛てメンション"
|
mentionMe: "あなた宛てメンション"
|
||||||
renote: "Renote"
|
renote: "リノート"
|
||||||
modalBg: "モーダルの背景"
|
modalBg: "モーダルの背景"
|
||||||
divider: "分割線"
|
divider: "分割線"
|
||||||
scrollbarHandle: "スクロールバーの取っ手"
|
scrollbarHandle: "スクロールバーの取っ手"
|
||||||
|
@ -2186,11 +2185,8 @@ _theme:
|
||||||
buttonHoverBg: "ボタンの背景 (ホバー)"
|
buttonHoverBg: "ボタンの背景 (ホバー)"
|
||||||
inputBorder: "入力ボックスの縁取り"
|
inputBorder: "入力ボックスの縁取り"
|
||||||
driveFolderBg: "ドライブフォルダーの背景"
|
driveFolderBg: "ドライブフォルダーの背景"
|
||||||
wallpaperOverlay: "壁紙のオーバーレイ"
|
|
||||||
badge: "バッジ"
|
badge: "バッジ"
|
||||||
messageBg: "チャットの背景"
|
messageBg: "チャットの背景"
|
||||||
accentDarken: "アクセント (暗め)"
|
|
||||||
accentLighten: "アクセント (明るめ)"
|
|
||||||
fgHighlighted: "強調された文字"
|
fgHighlighted: "強調された文字"
|
||||||
|
|
||||||
_sfx:
|
_sfx:
|
||||||
|
|
|
@ -1336,6 +1336,9 @@ chat: "聊天"
|
||||||
migrateOldSettings: "迁移旧设置信息"
|
migrateOldSettings: "迁移旧设置信息"
|
||||||
migrateOldSettings_description: "通常设置信息将自动迁移。但如果由于某种原因迁移不成功,则可以手动触发迁移过程。当前的配置信息将被覆盖。"
|
migrateOldSettings_description: "通常设置信息将自动迁移。但如果由于某种原因迁移不成功,则可以手动触发迁移过程。当前的配置信息将被覆盖。"
|
||||||
compress: "压缩"
|
compress: "压缩"
|
||||||
|
right: "右"
|
||||||
|
bottom: "下"
|
||||||
|
top: "上"
|
||||||
_chat:
|
_chat:
|
||||||
noMessagesYet: "还没有消息"
|
noMessagesYet: "还没有消息"
|
||||||
newMessage: "新消息"
|
newMessage: "新消息"
|
||||||
|
@ -2593,6 +2596,9 @@ _notification:
|
||||||
_deck:
|
_deck:
|
||||||
alwaysShowMainColumn: "总是显示主列"
|
alwaysShowMainColumn: "总是显示主列"
|
||||||
columnAlign: "列对齐"
|
columnAlign: "列对齐"
|
||||||
|
columnGap: "列间距"
|
||||||
|
deckMenuPosition: "Deck 菜单位置"
|
||||||
|
navbarPosition: "导航栏位置"
|
||||||
addColumn: "添加列"
|
addColumn: "添加列"
|
||||||
newNoteNotificationSettings: "新帖子通知设定"
|
newNoteNotificationSettings: "新帖子通知设定"
|
||||||
configureColumn: "列设置"
|
configureColumn: "列设置"
|
||||||
|
@ -2606,7 +2612,7 @@ _deck:
|
||||||
newProfile: "新建配置文件"
|
newProfile: "新建配置文件"
|
||||||
deleteProfile: "删除配置文件"
|
deleteProfile: "删除配置文件"
|
||||||
introduction: "将各列进行组合以创建您自己的界面!"
|
introduction: "将各列进行组合以创建您自己的界面!"
|
||||||
introduction2: "您可以随时通过屏幕右侧的 + 来添加列"
|
introduction2: "可以随时通过屏幕右侧的 + 来添加列"
|
||||||
widgetsIntroduction: "从列菜单中,选择“小工具编辑”来添加小工具"
|
widgetsIntroduction: "从列菜单中,选择“小工具编辑”来添加小工具"
|
||||||
useSimpleUiForNonRootPages: "用简易UI表示非根页面"
|
useSimpleUiForNonRootPages: "用简易UI表示非根页面"
|
||||||
usedAsMinWidthWhenFlexible: "「自适应宽度」被启用的时候,这就是最小的宽度"
|
usedAsMinWidthWhenFlexible: "「自适应宽度」被启用的时候,这就是最小的宽度"
|
||||||
|
|
|
@ -1336,6 +1336,9 @@ chat: "聊天"
|
||||||
migrateOldSettings: "遷移舊設定資訊"
|
migrateOldSettings: "遷移舊設定資訊"
|
||||||
migrateOldSettings_description: "通常情況下,這會自動進行,但若因某些原因未能順利遷移,您可以手動觸發遷移處理。請注意,當前的設定資訊將會被覆寫。"
|
migrateOldSettings_description: "通常情況下,這會自動進行,但若因某些原因未能順利遷移,您可以手動觸發遷移處理。請注意,當前的設定資訊將會被覆寫。"
|
||||||
compress: "壓縮"
|
compress: "壓縮"
|
||||||
|
right: "右"
|
||||||
|
bottom: "下"
|
||||||
|
top: "上"
|
||||||
_chat:
|
_chat:
|
||||||
noMessagesYet: "尚無訊息"
|
noMessagesYet: "尚無訊息"
|
||||||
newMessage: "新訊息"
|
newMessage: "新訊息"
|
||||||
|
@ -2593,6 +2596,9 @@ _notification:
|
||||||
_deck:
|
_deck:
|
||||||
alwaysShowMainColumn: "總是顯示主欄"
|
alwaysShowMainColumn: "總是顯示主欄"
|
||||||
columnAlign: "對齊欄位"
|
columnAlign: "對齊欄位"
|
||||||
|
columnGap: "欄與欄之間的邊距"
|
||||||
|
deckMenuPosition: "多欄模式的選單位置"
|
||||||
|
navbarPosition: "導覽列位置"
|
||||||
addColumn: "新增欄位"
|
addColumn: "新增欄位"
|
||||||
newNoteNotificationSettings: "新貼文通知的設定"
|
newNoteNotificationSettings: "新貼文通知的設定"
|
||||||
configureColumn: "欄位的設定"
|
configureColumn: "欄位的設定"
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "sharkey",
|
"name": "sharkey",
|
||||||
"version": "2025.3.2-beta.20",
|
"version": "2025.4.0-beta.0",
|
||||||
"codename": "shonk",
|
"codename": "shonk",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
|
|
|
@ -142,11 +142,6 @@
|
||||||
document.documentElement.classList.add('useSystemFont');
|
document.documentElement.classList.add('useSystemFont');
|
||||||
}
|
}
|
||||||
|
|
||||||
const wallpaper = localStorage.getItem('wallpaper');
|
|
||||||
if (wallpaper) {
|
|
||||||
document.documentElement.style.backgroundImage = `url(${wallpaper})`;
|
|
||||||
}
|
|
||||||
|
|
||||||
const customCss = localStorage.getItem('customCss');
|
const customCss = localStorage.getItem('customCss');
|
||||||
if (customCss && customCss.length > 0) {
|
if (customCss && customCss.length > 0) {
|
||||||
const style = document.createElement('style');
|
const style = document.createElement('style');
|
||||||
|
|
|
@ -34,7 +34,7 @@
|
||||||
"typescript": "5.8.2",
|
"typescript": "5.8.2",
|
||||||
"uuid": "11.1.0",
|
"uuid": "11.1.0",
|
||||||
"json5": "2.2.3",
|
"json5": "2.2.3",
|
||||||
"vite": "6.2.3",
|
"vite": "6.2.4",
|
||||||
"vue": "3.5.13"
|
"vue": "3.5.13"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|
|
@ -35,7 +35,6 @@
|
||||||
header: ':alpha<0.7<@panel',
|
header: ':alpha<0.7<@panel',
|
||||||
navBg: '@panel',
|
navBg: '@panel',
|
||||||
navFg: '@fg',
|
navFg: '@fg',
|
||||||
navHoverFg: ':lighten<17<@fg',
|
|
||||||
navActive: '@accent',
|
navActive: '@accent',
|
||||||
navIndicator: '@indicator',
|
navIndicator: '@indicator',
|
||||||
link: '#44a4c1',
|
link: '#44a4c1',
|
||||||
|
@ -65,7 +64,6 @@
|
||||||
inputBorder: 'rgba(255, 255, 255, 0.1)',
|
inputBorder: 'rgba(255, 255, 255, 0.1)',
|
||||||
inputBorderHover: 'rgba(255, 255, 255, 0.2)',
|
inputBorderHover: 'rgba(255, 255, 255, 0.2)',
|
||||||
driveFolderBg: ':alpha<0.3<@accent',
|
driveFolderBg: ':alpha<0.3<@accent',
|
||||||
wallpaperOverlay: 'rgba(0, 0, 0, 0.5)',
|
|
||||||
badge: '#31b1ce',
|
badge: '#31b1ce',
|
||||||
messageBg: '@bg',
|
messageBg: '@bg',
|
||||||
success: '#86b300',
|
success: '#86b300',
|
||||||
|
|
|
@ -35,7 +35,6 @@
|
||||||
header: ':alpha<0.7<@panel',
|
header: ':alpha<0.7<@panel',
|
||||||
navBg: '@panel',
|
navBg: '@panel',
|
||||||
navFg: '@fg',
|
navFg: '@fg',
|
||||||
navHoverFg: ':darken<17<@fg',
|
|
||||||
navActive: '@accent',
|
navActive: '@accent',
|
||||||
navIndicator: '@indicator',
|
navIndicator: '@indicator',
|
||||||
link: '#44a4c1',
|
link: '#44a4c1',
|
||||||
|
@ -65,7 +64,6 @@
|
||||||
inputBorder: 'rgba(0, 0, 0, 0.1)',
|
inputBorder: 'rgba(0, 0, 0, 0.1)',
|
||||||
inputBorderHover: 'rgba(0, 0, 0, 0.2)',
|
inputBorderHover: 'rgba(0, 0, 0, 0.2)',
|
||||||
driveFolderBg: ':alpha<0.3<@accent',
|
driveFolderBg: ':alpha<0.3<@accent',
|
||||||
wallpaperOverlay: 'rgba(255, 255, 255, 0.5)',
|
|
||||||
badge: '#31b1ce',
|
badge: '#31b1ce',
|
||||||
messageBg: '@bg',
|
messageBg: '@bg',
|
||||||
success: '#86b300',
|
success: '#86b300',
|
||||||
|
|
|
@ -31,7 +31,6 @@
|
||||||
navActive: '@accent',
|
navActive: '@accent',
|
||||||
infoWarnBg: '#42321c',
|
infoWarnBg: '#42321c',
|
||||||
infoWarnFg: '#ffbd3e',
|
infoWarnFg: '#ffbd3e',
|
||||||
navHoverFg: ':lighten<17<@fg',
|
|
||||||
dateLabelFg: '@fg',
|
dateLabelFg: '@fg',
|
||||||
inputBorder: 'rgba(255, 255, 255, 0.1)',
|
inputBorder: 'rgba(255, 255, 255, 0.1)',
|
||||||
inputBorderHover: 'rgba(255, 255, 255, 0.2)',
|
inputBorderHover: 'rgba(255, 255, 255, 0.2)',
|
||||||
|
@ -47,7 +46,6 @@
|
||||||
fgOnWhite: '@accent',
|
fgOnWhite: '@accent',
|
||||||
panelHighlight: ':lighten<3<@panel',
|
panelHighlight: ':lighten<3<@panel',
|
||||||
scrollbarHandle: 'rgba(255, 255, 255, 0.2)',
|
scrollbarHandle: 'rgba(255, 255, 255, 0.2)',
|
||||||
wallpaperOverlay: 'rgba(0, 0, 0, 0.5)',
|
|
||||||
panelHeaderDivider: 'rgba(0, 0, 0, 0)',
|
panelHeaderDivider: 'rgba(0, 0, 0, 0)',
|
||||||
scrollbarHandleHover: 'rgba(255, 255, 255, 0.4)',
|
scrollbarHandleHover: 'rgba(255, 255, 255, 0.4)',
|
||||||
},
|
},
|
||||||
|
|
|
@ -42,7 +42,6 @@
|
||||||
fgOnWhite: '@accent',
|
fgOnWhite: '@accent',
|
||||||
infoWarnBg: '#42321c',
|
infoWarnBg: '#42321c',
|
||||||
infoWarnFg: '#ffbd3e',
|
infoWarnFg: '#ffbd3e',
|
||||||
navHoverFg: ':lighten<17<@fg',
|
|
||||||
codeBoolean: '#c59eff',
|
codeBoolean: '#c59eff',
|
||||||
dateLabelFg: '@fg',
|
dateLabelFg: '@fg',
|
||||||
inputBorder: 'rgba(255, 255, 255, 0.1)',
|
inputBorder: 'rgba(255, 255, 255, 0.1)',
|
||||||
|
@ -59,7 +58,6 @@
|
||||||
panelHighlight: ':lighten<3<@panel',
|
panelHighlight: ':lighten<3<@panel',
|
||||||
scrollbarHandle: 'rgba(255, 255, 255, 0.2)',
|
scrollbarHandle: 'rgba(255, 255, 255, 0.2)',
|
||||||
inputBorderHover: 'rgba(255, 255, 255, 0.2)',
|
inputBorderHover: 'rgba(255, 255, 255, 0.2)',
|
||||||
wallpaperOverlay: 'rgba(0, 0, 0, 0.5)',
|
|
||||||
fgTransparentWeak: ':alpha<0.75<@fg',
|
fgTransparentWeak: ':alpha<0.75<@fg',
|
||||||
panelHeaderDivider: 'rgba(0, 0, 0, 0)',
|
panelHeaderDivider: 'rgba(0, 0, 0, 0)',
|
||||||
scrollbarHandleHover: 'rgba(255, 255, 255, 0.4)',
|
scrollbarHandleHover: 'rgba(255, 255, 255, 0.4)',
|
||||||
|
|
|
@ -43,7 +43,6 @@
|
||||||
fgOnWhite: '@accent',
|
fgOnWhite: '@accent',
|
||||||
infoWarnBg: '#42321c',
|
infoWarnBg: '#42321c',
|
||||||
infoWarnFg: '#ffbd3e',
|
infoWarnFg: '#ffbd3e',
|
||||||
navHoverFg: ':lighten<17<@fg',
|
|
||||||
codeBoolean: '#c59eff',
|
codeBoolean: '#c59eff',
|
||||||
dateLabelFg: '@fg',
|
dateLabelFg: '@fg',
|
||||||
inputBorder: 'rgba(255, 255, 255, 0.1)',
|
inputBorder: 'rgba(255, 255, 255, 0.1)',
|
||||||
|
@ -61,7 +60,6 @@
|
||||||
panelHighlight: ':lighten<3<@panel',
|
panelHighlight: ':lighten<3<@panel',
|
||||||
scrollbarHandle: '#74747433',
|
scrollbarHandle: '#74747433',
|
||||||
inputBorderHover: 'rgba(255, 255, 255, 0.2)',
|
inputBorderHover: 'rgba(255, 255, 255, 0.2)',
|
||||||
wallpaperOverlay: 'rgba(0, 0, 0, 0.5)',
|
|
||||||
fgTransparentWeak: ':alpha<0.75<@fg',
|
fgTransparentWeak: ':alpha<0.75<@fg',
|
||||||
panelHeaderDivider: 'rgba(0, 0, 0, 0)',
|
panelHeaderDivider: 'rgba(0, 0, 0, 0)',
|
||||||
scrollbarHandleHover: 'rgba(255, 255, 255, 0.4)',
|
scrollbarHandleHover: 'rgba(255, 255, 255, 0.4)',
|
||||||
|
|
|
@ -34,7 +34,6 @@
|
||||||
navActive: '@accent',
|
navActive: '@accent',
|
||||||
infoWarnBg: '#fff0db',
|
infoWarnBg: '#fff0db',
|
||||||
infoWarnFg: '#8f6e31',
|
infoWarnFg: '#8f6e31',
|
||||||
navHoverFg: ':darken<17<@fg',
|
|
||||||
dateLabelFg: '@fg',
|
dateLabelFg: '@fg',
|
||||||
inputBorder: 'rgba(0, 0, 0, 0.1)',
|
inputBorder: 'rgba(0, 0, 0, 0.1)',
|
||||||
inputBorderHover: 'rgba(0, 0, 0, 0.2)',
|
inputBorderHover: 'rgba(0, 0, 0, 0.2)',
|
||||||
|
@ -49,7 +48,6 @@
|
||||||
htmlThemeColor: '@bg',
|
htmlThemeColor: '@bg',
|
||||||
panelHighlight: ':darken<3<@panel',
|
panelHighlight: ':darken<3<@panel',
|
||||||
scrollbarHandle: 'rgba(0, 0, 0, 0.2)',
|
scrollbarHandle: 'rgba(0, 0, 0, 0.2)',
|
||||||
wallpaperOverlay: 'rgba(255, 255, 255, 0.5)',
|
|
||||||
fgTransparentWeak: ':alpha<0.75<@fg',
|
fgTransparentWeak: ':alpha<0.75<@fg',
|
||||||
panelHeaderDivider: '@divider',
|
panelHeaderDivider: '@divider',
|
||||||
scrollbarHandleHover: 'rgba(0, 0, 0, 0.4)',
|
scrollbarHandleHover: 'rgba(0, 0, 0, 0.4)',
|
||||||
|
|
|
@ -75,7 +75,7 @@
|
||||||
"typescript": "5.8.2",
|
"typescript": "5.8.2",
|
||||||
"uuid": "11.1.0",
|
"uuid": "11.1.0",
|
||||||
"v-code-diff": "1.13.1",
|
"v-code-diff": "1.13.1",
|
||||||
"vite": "6.2.3",
|
"vite": "6.2.4",
|
||||||
"vue": "3.5.13",
|
"vue": "3.5.13",
|
||||||
"vuedraggable": "next",
|
"vuedraggable": "next",
|
||||||
"wanakana": "5.3.1"
|
"wanakana": "5.3.1"
|
||||||
|
|
|
@ -12,11 +12,13 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||||
<path transform="scale(.26458)" d="m439.77 247.19c-43.673 0-78.832 35.157-78.832 78.83v249.98h407.06v-328.81z" :fill="themeVariables.panel"/>
|
<path transform="scale(.26458)" d="m439.77 247.19c-43.673 0-78.832 35.157-78.832 78.83v249.98h407.06v-328.81z" :fill="themeVariables.panel"/>
|
||||||
</g>
|
</g>
|
||||||
<circle cx="32" cy="83" r="21" :fill="themeVariables.accentedBg"/>
|
<circle cx="32" cy="83" r="21" :fill="themeVariables.accentedBg"/>
|
||||||
<circle cx="136" cy="106" r="23" :fill="themeVariables.fg" fill-opacity="0.5"/>
|
<g>
|
||||||
<g :fill="themeVariables.fg" fill-rule="evenodd">
|
<rect x="120" y="88" width="40" height="6" ry="3" :fill="themeVariables.fg"/>
|
||||||
<rect x="171" y="88" width="48" height="6" ry="3"/>
|
<rect x="170" y="88" width="20" height="6" ry="3" :fill="themeVariables.mention"/>
|
||||||
<rect x="171" y="108" width="48" height="6" ry="3"/>
|
<rect x="120" y="108" width="20" height="6" ry="3" :fill="themeVariables.hashtag"/>
|
||||||
<rect x="171" y="128" width="48" height="6" ry="3"/>
|
<rect x="150" y="108" width="40" height="6" ry="3" :fill="themeVariables.fg"/>
|
||||||
|
<rect x="120" y="128" width="40" height="6" ry="3" :fill="themeVariables.fg"/>
|
||||||
|
<rect x="170" y="128" width="20" height="6" ry="3" :fill="themeVariables.link"/>
|
||||||
</g>
|
</g>
|
||||||
<path d="m65.498 40.892h137.7" :stroke="themeVariables.divider" stroke-width="0.75"/>
|
<path d="m65.498 40.892h137.7" :stroke="themeVariables.divider" stroke-width="0.75"/>
|
||||||
<g transform="matrix(.60823 0 0 .60823 25.45 75.755)" fill="none" :stroke="themeVariables.accent" stroke-linecap="round" stroke-linejoin="round" stroke-width="2">
|
<g transform="matrix(.60823 0 0 .60823 25.45 75.755)" fill="none" :stroke="themeVariables.accent" stroke-linecap="round" stroke-linejoin="round" stroke-width="2">
|
||||||
|
@ -53,14 +55,23 @@ const themeVariables = ref<{
|
||||||
bg: string;
|
bg: string;
|
||||||
panel: string;
|
panel: string;
|
||||||
fg: string;
|
fg: string;
|
||||||
|
mention: string;
|
||||||
|
hashtag: string;
|
||||||
|
link: string;
|
||||||
divider: string;
|
divider: string;
|
||||||
accent: string;
|
accent: string;
|
||||||
accentedBg: string;
|
accentedBg: string;
|
||||||
navBg: string;
|
navBg: string;
|
||||||
|
success: string;
|
||||||
|
warn: string;
|
||||||
|
error: string;
|
||||||
}>({
|
}>({
|
||||||
bg: 'var(--MI_THEME-bg)',
|
bg: 'var(--MI_THEME-bg)',
|
||||||
panel: 'var(--MI_THEME-panel)',
|
panel: 'var(--MI_THEME-panel)',
|
||||||
fg: 'var(--MI_THEME-fg)',
|
fg: 'var(--MI_THEME-fg)',
|
||||||
|
mention: 'var(--MI_THEME-mention)',
|
||||||
|
hashtag: 'var(--MI_THEME-hashtag)',
|
||||||
|
link: 'var(--MI_THEME-link)',
|
||||||
divider: 'var(--MI_THEME-divider)',
|
divider: 'var(--MI_THEME-divider)',
|
||||||
accent: 'var(--MI_THEME-accent)',
|
accent: 'var(--MI_THEME-accent)',
|
||||||
accentedBg: 'var(--MI_THEME-accentedBg)',
|
accentedBg: 'var(--MI_THEME-accentedBg)',
|
||||||
|
@ -86,6 +97,9 @@ watch(() => props.theme, (theme) => {
|
||||||
bg: compiled.bg ?? 'var(--MI_THEME-bg)',
|
bg: compiled.bg ?? 'var(--MI_THEME-bg)',
|
||||||
panel: compiled.panel ?? 'var(--MI_THEME-panel)',
|
panel: compiled.panel ?? 'var(--MI_THEME-panel)',
|
||||||
fg: compiled.fg ?? 'var(--MI_THEME-fg)',
|
fg: compiled.fg ?? 'var(--MI_THEME-fg)',
|
||||||
|
mention: compiled.mention ?? 'var(--MI_THEME-mention)',
|
||||||
|
hashtag: compiled.hashtag ?? 'var(--MI_THEME-hashtag)',
|
||||||
|
link: compiled.link ?? 'var(--MI_THEME-link)',
|
||||||
divider: compiled.divider ?? 'var(--MI_THEME-divider)',
|
divider: compiled.divider ?? 'var(--MI_THEME-divider)',
|
||||||
accent: compiled.accent ?? 'var(--MI_THEME-accent)',
|
accent: compiled.accent ?? 'var(--MI_THEME-accent)',
|
||||||
accentedBg: compiled.accentedBg ?? 'var(--MI_THEME-accentedBg)',
|
accentedBg: compiled.accentedBg ?? 'var(--MI_THEME-accentedBg)',
|
||||||
|
|
|
@ -6,7 +6,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<MkAnimBg style="position: absolute;"/>
|
<MkAnimBg style="position: absolute;"/>
|
||||||
<div class="_pageScrollable" style="position: absolute; top: 0; width: 100%; height: 100%;">
|
<div class="_pageScrollable" :class="$style.body">
|
||||||
<slot></slot>
|
<slot></slot>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -17,5 +17,13 @@ import MkAnimBg from '@/components/MkAnimBg.vue';
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" module>
|
<style lang="scss" module>
|
||||||
|
.body {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
|
||||||
|
// _pageScrollable はパフォーマンス上の理由で背景色が設定されているため
|
||||||
|
background: transparent !important;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -17,7 +17,6 @@ export type Keys = (
|
||||||
'lang' |
|
'lang' |
|
||||||
'drafts' |
|
'drafts' |
|
||||||
'hashtags' |
|
'hashtags' |
|
||||||
'wallpaper' |
|
|
||||||
'colorScheme' |
|
'colorScheme' |
|
||||||
'useSystemFont' |
|
'useSystemFont' |
|
||||||
'fontSize' |
|
'fontSize' |
|
||||||
|
|
|
@ -12,6 +12,8 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||||
</MkSwitch>
|
</MkSwitch>
|
||||||
</SearchMarker>
|
</SearchMarker>
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
|
||||||
<SearchMarker :keywords="['ui', 'root', 'page']">
|
<SearchMarker :keywords="['ui', 'root', 'page']">
|
||||||
<MkPreferenceContainer k="deck.useSimpleUiForNonRootPages">
|
<MkPreferenceContainer k="deck.useSimpleUiForNonRootPages">
|
||||||
<MkSwitch v-model="useSimpleUiForNonRootPages">
|
<MkSwitch v-model="useSimpleUiForNonRootPages">
|
||||||
|
@ -74,19 +76,29 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||||
</MkRange>
|
</MkRange>
|
||||||
</MkPreferenceContainer>
|
</MkPreferenceContainer>
|
||||||
</SearchMarker>
|
</SearchMarker>
|
||||||
|
|
||||||
|
<SearchMarker :keywords="['wallpaper']">
|
||||||
|
<MkPreferenceContainer k="deck.wallpaper">
|
||||||
|
<MkButton v-if="wallpaper == null" @click="setWallpaper"><SearchLabel>{{ i18n.ts.setWallpaper }}</SearchLabel></MkButton>
|
||||||
|
<MkButton v-else @click="wallpaper = null">{{ i18n.ts.removeWallpaper }}</MkButton>
|
||||||
|
</MkPreferenceContainer>
|
||||||
|
</SearchMarker>
|
||||||
</div>
|
</div>
|
||||||
</SearchMarker>
|
</SearchMarker>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { computed, ref } from 'vue';
|
import { computed, ref, watch } from 'vue';
|
||||||
import MkSwitch from '@/components/MkSwitch.vue';
|
import MkSwitch from '@/components/MkSwitch.vue';
|
||||||
import MkRadios from '@/components/MkRadios.vue';
|
import MkRadios from '@/components/MkRadios.vue';
|
||||||
import MkRange from '@/components/MkRange.vue';
|
import MkRange from '@/components/MkRange.vue';
|
||||||
|
import MkButton from '@/components/MkButton.vue';
|
||||||
import { i18n } from '@/i18n.js';
|
import { i18n } from '@/i18n.js';
|
||||||
import { definePage } from '@/page.js';
|
import { definePage } from '@/page.js';
|
||||||
import { prefer } from '@/preferences.js';
|
import { prefer } from '@/preferences.js';
|
||||||
import MkPreferenceContainer from '@/components/MkPreferenceContainer.vue';
|
import MkPreferenceContainer from '@/components/MkPreferenceContainer.vue';
|
||||||
|
import { reloadAsk } from '@/utility/reload-ask.js';
|
||||||
|
import { selectFile } from '@/utility/select-file.js';
|
||||||
|
|
||||||
const navWindow = prefer.model('deck.navWindow');
|
const navWindow = prefer.model('deck.navWindow');
|
||||||
const useSimpleUiForNonRootPages = prefer.model('deck.useSimpleUiForNonRootPages');
|
const useSimpleUiForNonRootPages = prefer.model('deck.useSimpleUiForNonRootPages');
|
||||||
|
@ -95,6 +107,17 @@ const columnAlign = prefer.model('deck.columnAlign');
|
||||||
const columnGap = prefer.model('deck.columnGap');
|
const columnGap = prefer.model('deck.columnGap');
|
||||||
const menuPosition = prefer.model('deck.menuPosition');
|
const menuPosition = prefer.model('deck.menuPosition');
|
||||||
const navbarPosition = prefer.model('deck.navbarPosition');
|
const navbarPosition = prefer.model('deck.navbarPosition');
|
||||||
|
const wallpaper = prefer.model('deck.wallpaper');
|
||||||
|
|
||||||
|
watch(wallpaper, async () => {
|
||||||
|
await reloadAsk({ reason: i18n.ts.reloadToApplySetting, unison: true });
|
||||||
|
});
|
||||||
|
|
||||||
|
function setWallpaper(ev: MouseEvent) {
|
||||||
|
selectFile(ev.currentTarget ?? ev.target, null).then(file => {
|
||||||
|
wallpaper.value = file.url;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
const profilesSyncEnabled = ref(prefer.isSyncEnabled('deck.profiles'));
|
const profilesSyncEnabled = ref(prefer.isSyncEnabled('deck.profiles'));
|
||||||
|
|
||||||
|
|
|
@ -189,17 +189,12 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||||
<FormLink to="/theme-editor"><template #icon><i class="ti ti-paint"></i></template>{{ i18n.ts._theme.make }}</FormLink>
|
<FormLink to="/theme-editor"><template #icon><i class="ti ti-paint"></i></template>{{ i18n.ts._theme.make }}</FormLink>
|
||||||
</div>
|
</div>
|
||||||
</FormSection>
|
</FormSection>
|
||||||
|
|
||||||
<SearchMarker :keywords="['wallpaper']">
|
|
||||||
<MkButton v-if="wallpaper == null" @click="setWallpaper"><SearchLabel>{{ i18n.ts.setWallpaper }}</SearchLabel></MkButton>
|
|
||||||
<MkButton v-else @click="wallpaper = null">{{ i18n.ts.removeWallpaper }}</MkButton>
|
|
||||||
</SearchMarker>
|
|
||||||
</div>
|
</div>
|
||||||
</SearchMarker>
|
</SearchMarker>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { computed, onActivated, ref, watch } from 'vue';
|
import { computed, ref, watch } from 'vue';
|
||||||
import JSON5 from 'json5';
|
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';
|
||||||
|
@ -207,7 +202,6 @@ import type { Theme } from '@/theme.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';
|
||||||
import MkButton from '@/components/MkButton.vue';
|
|
||||||
import MkFolder from '@/components/MkFolder.vue';
|
import MkFolder from '@/components/MkFolder.vue';
|
||||||
import MkThemePreview from '@/components/MkThemePreview.vue';
|
import MkThemePreview from '@/components/MkThemePreview.vue';
|
||||||
import { getBuiltinThemesRef, getThemesRef } from '@/theme.js';
|
import { getBuiltinThemesRef, getThemesRef } from '@/theme.js';
|
||||||
|
@ -262,7 +256,6 @@ const lightThemeId = computed({
|
||||||
|
|
||||||
const darkMode = computed(store.makeGetterSetter('darkMode'));
|
const darkMode = computed(store.makeGetterSetter('darkMode'));
|
||||||
const syncDeviceDarkMode = prefer.model('syncDeviceDarkMode');
|
const syncDeviceDarkMode = prefer.model('syncDeviceDarkMode');
|
||||||
const wallpaper = ref(miLocalStorage.getItem('wallpaper'));
|
|
||||||
const themesCount = installedThemes.value.length;
|
const themesCount = installedThemes.value.length;
|
||||||
|
|
||||||
watch(syncDeviceDarkMode, () => {
|
watch(syncDeviceDarkMode, () => {
|
||||||
|
@ -271,21 +264,6 @@ watch(syncDeviceDarkMode, () => {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
watch(wallpaper, async () => {
|
|
||||||
if (wallpaper.value == null) {
|
|
||||||
miLocalStorage.removeItem('wallpaper');
|
|
||||||
} else {
|
|
||||||
miLocalStorage.setItem('wallpaper', wallpaper.value);
|
|
||||||
}
|
|
||||||
await reloadAsk({ reason: i18n.ts.reloadToApplySetting, unison: true });
|
|
||||||
});
|
|
||||||
|
|
||||||
function setWallpaper(event) {
|
|
||||||
selectFile(event.currentTarget ?? event.target, null).then(file => {
|
|
||||||
wallpaper.value = file.url;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
const headerActions = computed(() => []);
|
const headerActions = computed(() => []);
|
||||||
|
|
||||||
const headerTabs = computed(() => []);
|
const headerTabs = computed(() => []);
|
||||||
|
|
|
@ -431,6 +431,9 @@ export const PREF_DEF = {
|
||||||
'deck.navbarPosition': {
|
'deck.navbarPosition': {
|
||||||
default: 'left' as 'left' | 'top' | 'bottom',
|
default: 'left' as 'left' | 'top' | 'bottom',
|
||||||
},
|
},
|
||||||
|
'deck.wallpaper': {
|
||||||
|
default: null as string | null,
|
||||||
|
},
|
||||||
|
|
||||||
'chat.showSenderName': {
|
'chat.showSenderName': {
|
||||||
default: false,
|
default: false,
|
||||||
|
|
|
@ -228,7 +228,7 @@ function more() {
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
color: var(--MI_THEME-navHoverFg);
|
color: light-dark(hsl(from var(--MI_THEME-navFg) h s calc(l - 17)), hsl(from var(--MI_THEME-navFg) h s calc(l + 17)));
|
||||||
}
|
}
|
||||||
|
|
||||||
&.active {
|
&.active {
|
||||||
|
|
|
@ -149,7 +149,7 @@ onMounted(() => {
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
color: var(--MI_THEME-navHoverFg);
|
color: light-dark(hsl(from var(--MI_THEME-navFg) h s calc(l - 17)), hsl(from var(--MI_THEME-navFg) h s calc(l + 17)));
|
||||||
}
|
}
|
||||||
|
|
||||||
&.active {
|
&.active {
|
||||||
|
|
|
@ -463,7 +463,7 @@ function menuEdit() {
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
color: var(--MI_THEME-navHoverFg);
|
color: light-dark(hsl(from var(--MI_THEME-navFg) h s calc(l - 17)), hsl(from var(--MI_THEME-navFg) h s calc(l + 17)));
|
||||||
}
|
}
|
||||||
|
|
||||||
&.active {
|
&.active {
|
||||||
|
|
|
@ -117,13 +117,12 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { computed, defineAsyncComponent, ref, useTemplateRef, watch } from 'vue';
|
import { computed, defineAsyncComponent, ref, useTemplateRef } from 'vue';
|
||||||
import { v4 as uuid } from 'uuid';
|
import { v4 as uuid } from 'uuid';
|
||||||
import XCommon from './_common_/common.vue';
|
import XCommon from './_common_/common.vue';
|
||||||
import XSidebar from '@/ui/_common_/navbar.vue';
|
import XSidebar from '@/ui/_common_/navbar.vue';
|
||||||
import XNavbarH from '@/ui/_common_/navbar-h.vue';
|
import XNavbarH from '@/ui/_common_/navbar-h.vue';
|
||||||
import XDrawerMenu from '@/ui/_common_/navbar-for-mobile.vue';
|
import XDrawerMenu from '@/ui/_common_/navbar-for-mobile.vue';
|
||||||
import MkButton from '@/components/MkButton.vue';
|
|
||||||
import * as os from '@/os.js';
|
import * as os from '@/os.js';
|
||||||
import { navbarItemDef } from '@/navbar.js';
|
import { navbarItemDef } from '@/navbar.js';
|
||||||
import { $i } from '@/i.js';
|
import { $i } from '@/i.js';
|
||||||
|
@ -143,7 +142,6 @@ import XRoleTimelineColumn from '@/ui/deck/role-timeline-column.vue';
|
||||||
import XFollowingColumn from '@/ui/deck/following-column.vue';
|
import XFollowingColumn from '@/ui/deck/following-column.vue';
|
||||||
import { mainRouter } from '@/router.js';
|
import { mainRouter } from '@/router.js';
|
||||||
import { columns, layout, columnTypes, switchProfileMenu, addColumn as addColumnToStore, deleteProfile as deleteProfile_ } from '@/deck.js';
|
import { columns, layout, columnTypes, switchProfileMenu, addColumn as addColumnToStore, deleteProfile as deleteProfile_ } from '@/deck.js';
|
||||||
import { miLocalStorage } from '@/local-storage.js';
|
|
||||||
|
|
||||||
const XStatusBars = defineAsyncComponent(() => import('@/ui/_common_/statusbars.vue'));
|
const XStatusBars = defineAsyncComponent(() => import('@/ui/_common_/statusbars.vue'));
|
||||||
const XAnnouncements = defineAsyncComponent(() => import('@/ui/_common_/announcements.vue'));
|
const XAnnouncements = defineAsyncComponent(() => import('@/ui/_common_/announcements.vue'));
|
||||||
|
@ -178,7 +176,7 @@ window.addEventListener('resize', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
const snapScroll = deviceKind === 'smartphone' || deviceKind === 'tablet';
|
const snapScroll = deviceKind === 'smartphone' || deviceKind === 'tablet';
|
||||||
const withWallpaper = miLocalStorage.getItem('wallpaper') != null;
|
const withWallpaper = prefer.s['deck.wallpaper'] != null;
|
||||||
const drawerMenuShowing = ref(false);
|
const drawerMenuShowing = ref(false);
|
||||||
const gap = prefer.r['deck.columnGap'];
|
const gap = prefer.r['deck.columnGap'];
|
||||||
|
|
||||||
|
@ -234,9 +232,6 @@ function onWheel(ev: WheelEvent) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
window.document.documentElement.style.overflowY = 'hidden';
|
|
||||||
window.document.documentElement.style.scrollBehavior = 'auto';
|
|
||||||
|
|
||||||
async function deleteProfile() {
|
async function deleteProfile() {
|
||||||
if (prefer.s['deck.profile'] == null) return;
|
if (prefer.s['deck.profile'] == null) return;
|
||||||
|
|
||||||
|
@ -251,6 +246,12 @@ async function deleteProfile() {
|
||||||
os.success();
|
os.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
window.document.documentElement.style.overflowY = 'hidden';
|
||||||
|
window.document.documentElement.style.scrollBehavior = 'auto';
|
||||||
|
|
||||||
|
if (prefer.s['deck.wallpaper'] != null) {
|
||||||
|
window.document.documentElement.style.backgroundImage = `url(${prefer.s['deck.wallpaper']})`;
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" module>
|
<style lang="scss" module>
|
||||||
|
|
|
@ -48,13 +48,13 @@ import type { MenuItem } from '@/types/menu.js';
|
||||||
import { updateColumn, swapLeftColumn, swapRightColumn, swapUpColumn, swapDownColumn, stackLeftColumn, popRightColumn, removeColumn, swapColumn } from '@/deck.js';
|
import { updateColumn, swapLeftColumn, swapRightColumn, swapUpColumn, swapDownColumn, stackLeftColumn, popRightColumn, removeColumn, swapColumn } from '@/deck.js';
|
||||||
import * as os from '@/os.js';
|
import * as os from '@/os.js';
|
||||||
import { i18n } from '@/i18n.js';
|
import { i18n } from '@/i18n.js';
|
||||||
import { miLocalStorage } from '@/local-storage.js';
|
import { prefer } from '@/preferences.js';
|
||||||
|
|
||||||
provide('shouldHeaderThin', true);
|
provide('shouldHeaderThin', true);
|
||||||
provide('shouldOmitHeaderTitle', true);
|
provide('shouldOmitHeaderTitle', true);
|
||||||
provide('forceSpacerMin', true);
|
provide('forceSpacerMin', true);
|
||||||
|
|
||||||
const withWallpaper = miLocalStorage.getItem('wallpaper') != null;
|
const withWallpaper = prefer.s['deck.wallpaper'] != null;
|
||||||
|
|
||||||
const props = withDefaults(defineProps<{
|
const props = withDefaults(defineProps<{
|
||||||
column: Column;
|
column: Column;
|
||||||
|
|
|
@ -37,11 +37,6 @@ export const searchIndexes: SearchIndexItem[] = [
|
||||||
label: i18n.ts.themeForDarkMode,
|
label: i18n.ts.themeForDarkMode,
|
||||||
keywords: ['dark', 'theme'],
|
keywords: ['dark', 'theme'],
|
||||||
},
|
},
|
||||||
{
|
|
||||||
id: '8wcoRp76b',
|
|
||||||
label: i18n.ts.setWallpaper,
|
|
||||||
keywords: ['wallpaper'],
|
|
||||||
},
|
|
||||||
],
|
],
|
||||||
label: i18n.ts.theme,
|
label: i18n.ts.theme,
|
||||||
keywords: ['theme'],
|
keywords: ['theme'],
|
||||||
|
@ -861,40 +856,45 @@ export const searchIndexes: SearchIndexItem[] = [
|
||||||
keywords: ['sync', 'profiles', 'devices'],
|
keywords: ['sync', 'profiles', 'devices'],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'iEF0gqNAo',
|
id: 'wWH4pxMQN',
|
||||||
label: i18n.ts._deck.useSimpleUiForNonRootPages,
|
label: i18n.ts._deck.useSimpleUiForNonRootPages,
|
||||||
keywords: ['ui', 'root', 'page'],
|
keywords: ['ui', 'root', 'page'],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'BNdSeWxZn',
|
id: '3LR509BvD',
|
||||||
label: i18n.ts.defaultNavigationBehaviour,
|
label: i18n.ts.defaultNavigationBehaviour,
|
||||||
keywords: ['default', 'navigation', 'behaviour', 'window'],
|
keywords: ['default', 'navigation', 'behaviour', 'window'],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'zT9pGm8DF',
|
id: 'ybU8RLXgm',
|
||||||
label: i18n.ts._deck.alwaysShowMainColumn,
|
label: i18n.ts._deck.alwaysShowMainColumn,
|
||||||
keywords: ['always', 'show', 'main', 'column'],
|
keywords: ['always', 'show', 'main', 'column'],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: '5dk2xv1vc',
|
id: 'xRasZyAVl',
|
||||||
label: i18n.ts._deck.columnAlign,
|
label: i18n.ts._deck.columnAlign,
|
||||||
keywords: ['column', 'align'],
|
keywords: ['column', 'align'],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'gtdEA4FTa',
|
id: '6qcyPd0oJ',
|
||||||
label: i18n.ts._deck.deckMenuPosition,
|
label: i18n.ts._deck.deckMenuPosition,
|
||||||
keywords: ['menu', 'position'],
|
keywords: ['menu', 'position'],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'DHVFdPBT6',
|
id: '4zk2Now4S',
|
||||||
label: i18n.ts._deck.navbarPosition,
|
label: i18n.ts._deck.navbarPosition,
|
||||||
keywords: ['navbar', 'position'],
|
keywords: ['navbar', 'position'],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: '3UQ8rUssZ',
|
id: 'CGNtJ2I3n',
|
||||||
label: i18n.ts._deck.columnGap,
|
label: i18n.ts._deck.columnGap,
|
||||||
keywords: ['column', 'gap', 'margin'],
|
keywords: ['column', 'gap', 'margin'],
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
id: 'rxPDMo7bE',
|
||||||
|
label: i18n.ts.setWallpaper,
|
||||||
|
keywords: ['wallpaper'],
|
||||||
|
},
|
||||||
],
|
],
|
||||||
label: i18n.ts.deck,
|
label: i18n.ts.deck,
|
||||||
keywords: ['deck', 'ui'],
|
keywords: ['deck', 'ui'],
|
||||||
|
|
|
@ -82,16 +82,17 @@ export function normalizeStringWithHiragana(str: string) {
|
||||||
|
|
||||||
/** aとbが同じかどうか */
|
/** aとbが同じかどうか */
|
||||||
export function compareStringEquals(a: string, b: string) {
|
export function compareStringEquals(a: string, b: string) {
|
||||||
return (
|
if (a === b) return true; // まったく同じ場合はtrue。なお、ノーマライズ前後で文字数が変化することがあるため、文字数が違うからといってfalseにはできない
|
||||||
normalizeString(a) === normalizeString(b) ||
|
if (normalizeString(a) === normalizeString(b)) return true;
|
||||||
normalizeStringWithHiragana(a) === normalizeStringWithHiragana(b)
|
if (normalizeStringWithHiragana(a) === normalizeStringWithHiragana(b)) return true;
|
||||||
);
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** baseにqueryが含まれているかどうか */
|
/** baseにqueryが含まれているかどうか */
|
||||||
export function compareStringIncludes(base: string, query: string) {
|
export function compareStringIncludes(base: string, query: string) {
|
||||||
return (
|
if (base === query) return true; // まったく同じ場合は含まれていると考えてよいのでtrue
|
||||||
normalizeString(base).includes(normalizeString(query)) ||
|
if (base.includes(query)) return true;
|
||||||
normalizeStringWithHiragana(base).includes(normalizeStringWithHiragana(query))
|
if (normalizeString(base).includes(normalizeString(query))) return true;
|
||||||
);
|
if (normalizeStringWithHiragana(base).includes(normalizeStringWithHiragana(query))) return true;
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,9 +8,9 @@
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@readme/openapi-parser": "2.7.0",
|
"@readme/openapi-parser": "2.7.0",
|
||||||
"@types/node": "22.13.9",
|
"@types/node": "22.13.15",
|
||||||
"@typescript-eslint/eslint-plugin": "8.27.0",
|
"@typescript-eslint/eslint-plugin": "8.29.0",
|
||||||
"@typescript-eslint/parser": "8.27.0",
|
"@typescript-eslint/parser": "8.29.0",
|
||||||
"eslint": "9.22.0",
|
"eslint": "9.22.0",
|
||||||
"openapi-types": "12.1.3",
|
"openapi-types": "12.1.3",
|
||||||
"openapi-typescript": "6.7.6",
|
"openapi-typescript": "6.7.6",
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"name": "misskey-js",
|
"name": "misskey-js",
|
||||||
"version": "2025.3.2-beta.20",
|
"version": "2025.4.0-beta.0",
|
||||||
"description": "Misskey SDK for JavaScript",
|
"description": "Misskey SDK for JavaScript",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"main": "./built/index.js",
|
"main": "./built/index.js",
|
||||||
|
@ -35,12 +35,12 @@
|
||||||
"directory": "packages/misskey-js"
|
"directory": "packages/misskey-js"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@microsoft/api-extractor": "7.51.1",
|
"@microsoft/api-extractor": "7.52.2",
|
||||||
"@swc/jest": "0.2.37",
|
"@swc/jest": "0.2.37",
|
||||||
"@types/jest": "29.5.14",
|
"@types/jest": "29.5.14",
|
||||||
"@types/node": "22.13.9",
|
"@types/node": "22.13.15",
|
||||||
"@typescript-eslint/eslint-plugin": "8.27.0",
|
"@typescript-eslint/eslint-plugin": "8.29.0",
|
||||||
"@typescript-eslint/parser": "8.27.0",
|
"@typescript-eslint/parser": "8.29.0",
|
||||||
"jest": "29.7.0",
|
"jest": "29.7.0",
|
||||||
"jest-fetch-mock": "3.0.3",
|
"jest-fetch-mock": "3.0.3",
|
||||||
"jest-websocket-mock": "2.5.0",
|
"jest-websocket-mock": "2.5.0",
|
||||||
|
@ -50,7 +50,7 @@
|
||||||
"execa": "8.0.1",
|
"execa": "8.0.1",
|
||||||
"tsd": "0.31.2",
|
"tsd": "0.31.2",
|
||||||
"typescript": "5.8.2",
|
"typescript": "5.8.2",
|
||||||
"esbuild": "0.25.0",
|
"esbuild": "0.25.2",
|
||||||
"glob": "11.0.1"
|
"glob": "11.0.1"
|
||||||
},
|
},
|
||||||
"files": [
|
"files": [
|
||||||
|
|
812
pnpm-lock.yaml
generated
812
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load diff
Loading…
Add table
Reference in a new issue