Merge branch 'develop' into fix-dev-enviroment
This commit is contained in:
commit
d1efcd1247
34 changed files with 501 additions and 876 deletions
|
@ -1 +1 @@
|
||||||
v16.15.0
|
v18.16.0
|
||||||
|
|
|
@ -76,10 +76,10 @@ If you have access to a server that supports one of the sources below, I recomme
|
||||||
|
|
||||||
## 🧑💻 Dependencies
|
## 🧑💻 Dependencies
|
||||||
|
|
||||||
- 🐢 At least [NodeJS](https://nodejs.org/en/) v18.12.1 (v19 recommended)
|
- 🐢 At least [NodeJS](https://nodejs.org/en/) v18.16.0 (v20 recommended)
|
||||||
- Install with [nvm](https://github.com/nvm-sh/nvm)
|
- Install with [nvm](https://github.com/nvm-sh/nvm)
|
||||||
- 🐘 At least [PostgreSQL](https://www.postgresql.org/) v12
|
- 🐘 At least [PostgreSQL](https://www.postgresql.org/) v12 (v14 recommended)
|
||||||
- 🍱 At least [Redis](https://redis.io/) v6 (v7 recommend)
|
- 🍱 At least [Redis](https://redis.io/) v6 (v7 recommended)
|
||||||
- Web Proxy (one of the following)
|
- Web Proxy (one of the following)
|
||||||
- 🍀 Nginx (recommended)
|
- 🍀 Nginx (recommended)
|
||||||
- 🦦 Caddy
|
- 🦦 Caddy
|
||||||
|
@ -104,7 +104,7 @@ If you have access to a server that supports one of the sources below, I recomme
|
||||||
## 👀 Get folder ready
|
## 👀 Get folder ready
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
git clone --depth 1 https://codeberg.org/calckey/calckey.git
|
git clone https://codeberg.org/calckey/calckey.git
|
||||||
cd calckey/
|
cd calckey/
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -1802,8 +1802,8 @@ pushNotificationNotSupported: El vostre navegador o servidor no admet notificaci
|
||||||
push
|
push
|
||||||
license: Llicència
|
license: Llicència
|
||||||
indexPosts: Índex de notes
|
indexPosts: Índex de notes
|
||||||
indexFrom: Índex a partir de l'ID de Publicacions (deixeu en blanc per indexar cada
|
indexFrom: Índex a partir de l'ID de Publicacions
|
||||||
publicació)
|
indexFromDescription: Deixeu en blanc per indexar cada publicació
|
||||||
indexNotice: Ara indexant. Això probablement trigarà una estona, si us plau, no reinicieu
|
indexNotice: Ara indexant. Això probablement trigarà una estona, si us plau, no reinicieu
|
||||||
el servidor durant almenys una hora.
|
el servidor durant almenys una hora.
|
||||||
_instanceTicker:
|
_instanceTicker:
|
||||||
|
|
|
@ -83,6 +83,7 @@ exportRequested: "You've requested an export. This may take a while. It will be
|
||||||
\ to your Drive once completed."
|
\ to your Drive once completed."
|
||||||
importRequested: "You've requested an import. This may take a while."
|
importRequested: "You've requested an import. This may take a while."
|
||||||
lists: "Lists"
|
lists: "Lists"
|
||||||
|
listsDesc: "Lists let you create timelines with specified users. They can be accessed from the timelines page."
|
||||||
noLists: "You don't have any lists"
|
noLists: "You don't have any lists"
|
||||||
note: "Post"
|
note: "Post"
|
||||||
notes: "Posts"
|
notes: "Posts"
|
||||||
|
@ -405,6 +406,7 @@ avoidMultiCaptchaConfirm: "Using multiple Captcha systems may cause interference
|
||||||
\ them. Would you like to disable the other Captcha systems currently active? If\
|
\ them. Would you like to disable the other Captcha systems currently active? If\
|
||||||
\ you would like them to stay enabled, press cancel."
|
\ you would like them to stay enabled, press cancel."
|
||||||
antennas: "Antennas"
|
antennas: "Antennas"
|
||||||
|
antennasDesc: "Antennas display new posts matching the criteria you set!\n They can be accessed from the timelines page."
|
||||||
manageAntennas: "Manage Antennas"
|
manageAntennas: "Manage Antennas"
|
||||||
name: "Name"
|
name: "Name"
|
||||||
antennaSource: "Antenna source"
|
antennaSource: "Antenna source"
|
||||||
|
@ -686,6 +688,7 @@ logs: "Logs"
|
||||||
delayed: "Delayed"
|
delayed: "Delayed"
|
||||||
database: "Database"
|
database: "Database"
|
||||||
channel: "Channels"
|
channel: "Channels"
|
||||||
|
channelFederationWarn: "Channels do not yet federate to other servers"
|
||||||
create: "Create"
|
create: "Create"
|
||||||
notificationSetting: "Notification settings"
|
notificationSetting: "Notification settings"
|
||||||
notificationSettingDesc: "Select the types of notification to display."
|
notificationSettingDesc: "Select the types of notification to display."
|
||||||
|
@ -771,6 +774,7 @@ pageLikedCount: "Number of received Page likes"
|
||||||
contact: "Contact"
|
contact: "Contact"
|
||||||
useSystemFont: "Use the system's default font"
|
useSystemFont: "Use the system's default font"
|
||||||
clips: "Clips"
|
clips: "Clips"
|
||||||
|
clipsDesc: "Clips are like share-able categorized bookmarks. You can create clips from the menu of individual posts."
|
||||||
experimentalFeatures: "Experimental features"
|
experimentalFeatures: "Experimental features"
|
||||||
developer: "Developer"
|
developer: "Developer"
|
||||||
makeExplorable: "Make account visible in \"Explore\""
|
makeExplorable: "Make account visible in \"Explore\""
|
||||||
|
@ -1065,7 +1069,8 @@ migrationConfirm: "Are you absolutely sure you want to migrate your account to {
|
||||||
defaultReaction: "Default emoji reaction for outgoing and incoming posts"
|
defaultReaction: "Default emoji reaction for outgoing and incoming posts"
|
||||||
license: "License"
|
license: "License"
|
||||||
indexPosts: "Index Posts"
|
indexPosts: "Index Posts"
|
||||||
indexFrom: "Index from Post ID onwards (leave blank to index every post)"
|
indexFrom: "Index from Post ID onwards"
|
||||||
|
indexFromDescription: "Leave blank to index every post"
|
||||||
indexNotice: "Now indexing. This will probably take a while, please don't restart\
|
indexNotice: "Now indexing. This will probably take a while, please don't restart\
|
||||||
\ your server for at least an hour."
|
\ your server for at least an hour."
|
||||||
customKaTeXMacro: "Custom KaTeX macros"
|
customKaTeXMacro: "Custom KaTeX macros"
|
||||||
|
@ -1446,7 +1451,7 @@ _tutorial:
|
||||||
\ you follow."
|
\ you follow."
|
||||||
step5_4: "The Local {icon} timeline is where you can see posts from everyone else on this server."
|
step5_4: "The Local {icon} timeline is where you can see posts from everyone else on this server."
|
||||||
step5_5: "The Social {icon} timeline is a combination of the Home and Local timelines."
|
step5_5: "The Social {icon} timeline is a combination of the Home and Local timelines."
|
||||||
step5_6: "The Recommended {icon} timeline is where you can see posts from server\
|
step5_6: "The Recommended {icon} timeline is where you can see posts from servers\
|
||||||
\ the admins recommend."
|
\ the admins recommend."
|
||||||
step5_7: "The Global {icon} timeline is where you can see posts from every other\
|
step5_7: "The Global {icon} timeline is where you can see posts from every other\
|
||||||
\ connected server."
|
\ connected server."
|
||||||
|
|
|
@ -966,7 +966,8 @@ migrationConfirm: "本当にこのアカウントを {account} に引っ越し
|
||||||
defaultReaction: "リモートとローカルの投稿に対するデフォルトの絵文字リアクション"
|
defaultReaction: "リモートとローカルの投稿に対するデフォルトの絵文字リアクション"
|
||||||
license: "ライセンス"
|
license: "ライセンス"
|
||||||
indexPosts: "投稿をインデックス"
|
indexPosts: "投稿をインデックス"
|
||||||
indexFrom: "この投稿ID以降をインデックスする(空白で全ての投稿を指定します)"
|
indexFrom: "この投稿ID以降をインデックスする"
|
||||||
|
indexFromDescription: "空白で全ての投稿を指定します"
|
||||||
indexNotice: "インデックスを開始しました。完了まで時間がかかる場合があるため、少なくとも1時間はサーバーを再起動しないでください。"
|
indexNotice: "インデックスを開始しました。完了まで時間がかかる場合があるため、少なくとも1時間はサーバーを再起動しないでください。"
|
||||||
customKaTeXMacro: "カスタムKaTeXマクロ"
|
customKaTeXMacro: "カスタムKaTeXマクロ"
|
||||||
customKaTeXMacroDescription: "数式入力を楽にするためのマクロを設定しましょう!記法はLaTeXにおけるコマンドの定義と同様に \\newcommand{\\\
|
customKaTeXMacroDescription: "数式入力を楽にするためのマクロを設定しましょう!記法はLaTeXにおけるコマンドの定義と同様に \\newcommand{\\\
|
||||||
|
|
|
@ -1898,7 +1898,8 @@ sendPushNotificationReadMessageCaption: Powiadomienie zawierające tekst "{empty
|
||||||
defaultReaction: Domyślna reakcja emoji dla wychodzących i przychodzących wpisów
|
defaultReaction: Domyślna reakcja emoji dla wychodzących i przychodzących wpisów
|
||||||
license: Licencja
|
license: Licencja
|
||||||
indexPosts: Indeksuj wpisy
|
indexPosts: Indeksuj wpisy
|
||||||
indexFrom: Indeksuj wpisy od ID (zostaw puste dla indeksowania wszystkich wpisów)
|
indexFrom: Indeksuj wpisy od ID
|
||||||
|
indexFromDescription: Zostaw puste dla indeksowania wszystkich wpisów
|
||||||
indexNotice: Indeksuję. Zapewne zajmie to chwilę, nie restartuj serwera przez co najmniej
|
indexNotice: Indeksuję. Zapewne zajmie to chwilę, nie restartuj serwera przez co najmniej
|
||||||
godzinę.
|
godzinę.
|
||||||
customKaTeXMacro: Niestandardowe makra KaTeX
|
customKaTeXMacro: Niestandardowe makra KaTeX
|
||||||
|
|
|
@ -1909,8 +1909,8 @@ recommendedInstances: Рекомендованные инстансы
|
||||||
defaultReaction: Эмодзи реакция по умолчанию для выходящих и исходящих постов
|
defaultReaction: Эмодзи реакция по умолчанию для выходящих и исходящих постов
|
||||||
license: Лицензия
|
license: Лицензия
|
||||||
indexPosts: Индексировать посты
|
indexPosts: Индексировать посты
|
||||||
indexFrom: Индексировать начиная с идентификатора поста и далее (оставьте пустым для
|
indexFrom: Индексировать начиная с идентификатора поста и далее
|
||||||
индексации каждого поста)
|
indexFromDescription: оставьте пустым для индексации каждого поста
|
||||||
indexNotice: Теперь индексирование. Вероятно, это займет некоторое время, пожалуйста,
|
indexNotice: Теперь индексирование. Вероятно, это займет некоторое время, пожалуйста,
|
||||||
не перезагружайте свой сервер по крайней мере в течение часа.
|
не перезагружайте свой сервер по крайней мере в течение часа.
|
||||||
customKaTeXMacro: Кастомные KaTex макросы
|
customKaTeXMacro: Кастомные KaTex макросы
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "calckey",
|
"name": "calckey",
|
||||||
"version": "14.0.0-dev32",
|
"version": "14.0.0-dev35",
|
||||||
"codename": "aqua",
|
"codename": "aqua",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
|
@ -36,8 +36,8 @@
|
||||||
"chokidar": "^3.3.1"
|
"chokidar": "^3.3.1"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@bull-board/api": "^4.10.2",
|
"@bull-board/api": "5.2.0",
|
||||||
"@bull-board/ui": "^4.10.2",
|
"@bull-board/ui": "5.2.0",
|
||||||
"@napi-rs/cli": "^2.15.0",
|
"@napi-rs/cli": "^2.15.0",
|
||||||
"@tensorflow/tfjs": "^3.21.0",
|
"@tensorflow/tfjs": "^3.21.0",
|
||||||
"focus-trap": "^7.2.0",
|
"focus-trap": "^7.2.0",
|
||||||
|
|
|
@ -23,9 +23,9 @@
|
||||||
"@tensorflow/tfjs-node": "3.21.1"
|
"@tensorflow/tfjs-node": "3.21.1"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@bull-board/api": "^4.6.4",
|
"@bull-board/api": "5.2.0",
|
||||||
"@bull-board/koa": "^4.6.4",
|
"@bull-board/koa": "5.2.0",
|
||||||
"@bull-board/ui": "^4.6.4",
|
"@bull-board/ui": "5.2.0",
|
||||||
"@calckey/megalodon": "5.2.0",
|
"@calckey/megalodon": "5.2.0",
|
||||||
"@discordapp/twemoji": "14.0.2",
|
"@discordapp/twemoji": "14.0.2",
|
||||||
"@elastic/elasticsearch": "7.17.0",
|
"@elastic/elasticsearch": "7.17.0",
|
||||||
|
@ -68,7 +68,7 @@
|
||||||
"fluent-ffmpeg": "2.1.2",
|
"fluent-ffmpeg": "2.1.2",
|
||||||
"got": "12.5.3",
|
"got": "12.5.3",
|
||||||
"hpagent": "0.1.2",
|
"hpagent": "0.1.2",
|
||||||
"ioredis": "5.2.4",
|
"ioredis": "5.3.2",
|
||||||
"ip-cidr": "3.0.11",
|
"ip-cidr": "3.0.11",
|
||||||
"is-svg": "4.3.2",
|
"is-svg": "4.3.2",
|
||||||
"js-yaml": "4.1.0",
|
"js-yaml": "4.1.0",
|
||||||
|
|
|
@ -1,21 +1,48 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="fpezltsf" :class="{ warn }">
|
<div v-if="visible" class="info" :class="{ warn, card }">
|
||||||
<i v-if="warn" class="ph-warning ph-bold ph-lg"></i>
|
<i v-if="warn" class="ph-warning ph-bold ph-lg"></i>
|
||||||
<i v-else class="ph-info ph-bold ph-lg"></i>
|
<i
|
||||||
|
v-else
|
||||||
|
class="ph-bold ph-lg"
|
||||||
|
:class="icon ? `ph-${icon}` : 'ph-info'"
|
||||||
|
></i>
|
||||||
<slot></slot>
|
<slot></slot>
|
||||||
|
<button
|
||||||
|
v-if="closeable"
|
||||||
|
v-tooltip="i18n.ts.close"
|
||||||
|
class="_button close"
|
||||||
|
@click.stop="close"
|
||||||
|
>
|
||||||
|
<i class="ph-x ph-bold ph-lg"></i>
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import {} from "vue";
|
import { ref } from "vue";
|
||||||
|
import { i18n } from "@/i18n";
|
||||||
|
|
||||||
|
const visible = ref(true);
|
||||||
|
|
||||||
defineProps<{
|
defineProps<{
|
||||||
|
icon?: string;
|
||||||
warn?: boolean;
|
warn?: boolean;
|
||||||
|
card?: boolean;
|
||||||
|
closeable?: boolean;
|
||||||
}>();
|
}>();
|
||||||
|
|
||||||
|
const emit = defineEmits<{
|
||||||
|
(ev: "close"): void;
|
||||||
|
}>();
|
||||||
|
|
||||||
|
function close() {
|
||||||
|
visible.value = false;
|
||||||
|
emit("close");
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.fpezltsf {
|
.info {
|
||||||
padding: 16px;
|
padding: 16px;
|
||||||
font-size: 90%;
|
font-size: 90%;
|
||||||
background: var(--infoBg);
|
background: var(--infoBg);
|
||||||
|
@ -27,8 +54,34 @@ defineProps<{
|
||||||
color: var(--infoWarnFg);
|
color: var(--infoWarnFg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&.card {
|
||||||
|
background: var(--panel);
|
||||||
|
color: var(--fg);
|
||||||
|
padding: 48px;
|
||||||
|
font-size: 1em;
|
||||||
|
text-align: center;
|
||||||
|
> i {
|
||||||
|
display: block;
|
||||||
|
font-size: 4em;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
> :deep(*) {
|
||||||
|
margin-inline: auto;
|
||||||
|
}
|
||||||
|
> :deep(:not(:last-child)) {
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
> :deep(p) {
|
||||||
|
max-width: 30em;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
> i {
|
> i {
|
||||||
margin-right: 4px;
|
margin-right: 4px;
|
||||||
}
|
}
|
||||||
|
> .close {
|
||||||
|
margin-left: auto;
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
</slot>
|
</slot>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div v-else ref="rootEl">
|
<div v-else ref="rootEl" class="list">
|
||||||
<div
|
<div
|
||||||
v-show="pagination.reversed && more"
|
v-show="pagination.reversed && more"
|
||||||
key="_more_"
|
key="_more_"
|
||||||
|
@ -487,4 +487,11 @@ defineExpose({
|
||||||
margin-right: auto;
|
margin-right: auto;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.list > :deep(._button) {
|
||||||
|
margin-inline: auto;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
&:last-of-type:not(:first-child) {
|
||||||
|
margin-top: 16px;
|
||||||
|
}
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -1030,6 +1030,8 @@ onMounted(() => {
|
||||||
}
|
}
|
||||||
|
|
||||||
> header {
|
> header {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
z-index: 1000;
|
z-index: 1000;
|
||||||
height: 66px;
|
height: 66px;
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,14 @@
|
||||||
<template>
|
<template>
|
||||||
|
<MkInfo
|
||||||
|
v-if="tlHint && !tlHintClosed"
|
||||||
|
:closeable="true"
|
||||||
|
class="_gap"
|
||||||
|
@close="closeHint"
|
||||||
|
>
|
||||||
|
<I18n :src="tlHint">
|
||||||
|
<template #icon></template>
|
||||||
|
</I18n>
|
||||||
|
</MkInfo>
|
||||||
<XNotes
|
<XNotes
|
||||||
ref="tlComponent"
|
ref="tlComponent"
|
||||||
:no-gap="!$store.state.showGapBetweenNotesInTimeline"
|
:no-gap="!$store.state.showGapBetweenNotesInTimeline"
|
||||||
|
@ -10,10 +20,13 @@
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { ref, computed, provide, onUnmounted } from "vue";
|
import { ref, computed, provide, onUnmounted } from "vue";
|
||||||
import XNotes from "@/components/MkNotes.vue";
|
import XNotes from "@/components/MkNotes.vue";
|
||||||
|
import MkInfo from "@/components/MkInfo.vue";
|
||||||
import * as os from "@/os";
|
import * as os from "@/os";
|
||||||
import { stream } from "@/stream";
|
import { stream } from "@/stream";
|
||||||
import * as sound from "@/scripts/sound";
|
import * as sound from "@/scripts/sound";
|
||||||
import { $i } from "@/account";
|
import { $i } from "@/account";
|
||||||
|
import { i18n } from "@/i18n";
|
||||||
|
import { defaultStore } from "@/store";
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
src: string;
|
src: string;
|
||||||
|
@ -64,6 +77,9 @@ let query;
|
||||||
let connection;
|
let connection;
|
||||||
let connection2;
|
let connection2;
|
||||||
|
|
||||||
|
let tlHint;
|
||||||
|
let tlHintClosed;
|
||||||
|
|
||||||
if (props.src === "antenna") {
|
if (props.src === "antenna") {
|
||||||
endpoint = "antennas/notes";
|
endpoint = "antennas/notes";
|
||||||
query = {
|
query = {
|
||||||
|
@ -81,22 +97,37 @@ if (props.src === "antenna") {
|
||||||
connection2 = stream.useChannel("main");
|
connection2 = stream.useChannel("main");
|
||||||
connection2.on("follow", onChangeFollowing);
|
connection2.on("follow", onChangeFollowing);
|
||||||
connection2.on("unfollow", onChangeFollowing);
|
connection2.on("unfollow", onChangeFollowing);
|
||||||
|
|
||||||
|
tlHint = i18n.ts._tutorial.step5_3;
|
||||||
|
tlHintClosed = defaultStore.state.tlHomeHintClosed;
|
||||||
} else if (props.src === "local") {
|
} else if (props.src === "local") {
|
||||||
endpoint = "notes/local-timeline";
|
endpoint = "notes/local-timeline";
|
||||||
connection = stream.useChannel("localTimeline");
|
connection = stream.useChannel("localTimeline");
|
||||||
connection.on("note", prepend);
|
connection.on("note", prepend);
|
||||||
|
|
||||||
|
tlHint = i18n.ts._tutorial.step5_4;
|
||||||
|
tlHintClosed = defaultStore.state.tlLocalHintClosed;
|
||||||
} else if (props.src === "recommended") {
|
} else if (props.src === "recommended") {
|
||||||
endpoint = "notes/recommended-timeline";
|
endpoint = "notes/recommended-timeline";
|
||||||
connection = stream.useChannel("recommendedTimeline");
|
connection = stream.useChannel("recommendedTimeline");
|
||||||
connection.on("note", prepend);
|
connection.on("note", prepend);
|
||||||
|
|
||||||
|
tlHint = i18n.ts._tutorial.step5_6;
|
||||||
|
tlHintClosed = defaultStore.state.tlRecommendedHintClosed;
|
||||||
} else if (props.src === "social") {
|
} else if (props.src === "social") {
|
||||||
endpoint = "notes/hybrid-timeline";
|
endpoint = "notes/hybrid-timeline";
|
||||||
connection = stream.useChannel("hybridTimeline");
|
connection = stream.useChannel("hybridTimeline");
|
||||||
connection.on("note", prepend);
|
connection.on("note", prepend);
|
||||||
|
|
||||||
|
tlHint = i18n.ts._tutorial.step5_5;
|
||||||
|
tlHintClosed = defaultStore.state.tlSocialHintClosed;
|
||||||
} else if (props.src === "global") {
|
} else if (props.src === "global") {
|
||||||
endpoint = "notes/global-timeline";
|
endpoint = "notes/global-timeline";
|
||||||
connection = stream.useChannel("globalTimeline");
|
connection = stream.useChannel("globalTimeline");
|
||||||
connection.on("note", prepend);
|
connection.on("note", prepend);
|
||||||
|
|
||||||
|
tlHint = i18n.ts._tutorial.step5_7;
|
||||||
|
tlHintClosed = defaultStore.state.tlGlobalHintClosed;
|
||||||
} else if (props.src === "mentions") {
|
} else if (props.src === "mentions") {
|
||||||
endpoint = "notes/mentions";
|
endpoint = "notes/mentions";
|
||||||
connection = stream.useChannel("main");
|
connection = stream.useChannel("main");
|
||||||
|
@ -135,6 +166,26 @@ if (props.src === "antenna") {
|
||||||
connection.on("note", prepend);
|
connection.on("note", prepend);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function closeHint() {
|
||||||
|
switch (props.src) {
|
||||||
|
case "home":
|
||||||
|
defaultStore.set("tlHomeHintClosed", true);
|
||||||
|
break;
|
||||||
|
case "local":
|
||||||
|
defaultStore.set("tlLocalHintClosed", true);
|
||||||
|
break;
|
||||||
|
case "recommended":
|
||||||
|
defaultStore.set("tlRecommendedHintClosed", true);
|
||||||
|
break;
|
||||||
|
case "social":
|
||||||
|
defaultStore.set("tlSocialHintClosed", true);
|
||||||
|
break;
|
||||||
|
case "global":
|
||||||
|
defaultStore.set("tlGlobalHintClosed", true);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const pagination = {
|
const pagination = {
|
||||||
endpoint: endpoint,
|
endpoint: endpoint,
|
||||||
limit: 10,
|
limit: 10,
|
||||||
|
|
|
@ -227,7 +227,7 @@ onUnmounted(() => {
|
||||||
|
|
||||||
.mk-url-preview {
|
.mk-url-preview {
|
||||||
> .expand-tweet {
|
> .expand-tweet {
|
||||||
margin-top: 1rem;
|
margin-top: 0.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.max-width_400px {
|
&.max-width_400px {
|
||||||
|
|
|
@ -1,554 +0,0 @@
|
||||||
<template>
|
|
||||||
<div class="_debobigegoItem">
|
|
||||||
<div class="_debobigegoLabel">
|
|
||||||
<i class="ph-microchip ph-bold ph-lg"></i>
|
|
||||||
{{ i18n.ts.cpuAndMemory }}
|
|
||||||
</div>
|
|
||||||
<div class="_debobigegoPanel xhexznfu">
|
|
||||||
<div>
|
|
||||||
<canvas :ref="cpumem"></canvas>
|
|
||||||
</div>
|
|
||||||
<div v-if="serverInfo">
|
|
||||||
<div class="_table">
|
|
||||||
<div class="_row">
|
|
||||||
<div class="_cell">
|
|
||||||
<div class="_label">MEM total</div>
|
|
||||||
{{ bytes(serverInfo.mem.total) }}
|
|
||||||
</div>
|
|
||||||
<div class="_cell">
|
|
||||||
<div class="_label">MEM used</div>
|
|
||||||
{{ bytes(memUsage) }} ({{
|
|
||||||
(
|
|
||||||
(memUsage / serverInfo.mem.total) *
|
|
||||||
100
|
|
||||||
).toFixed(0)
|
|
||||||
}}%)
|
|
||||||
</div>
|
|
||||||
<div class="_cell">
|
|
||||||
<div class="_label">MEM free</div>
|
|
||||||
{{ bytes(serverInfo.mem.total - memUsage) }} ({{
|
|
||||||
(
|
|
||||||
((serverInfo.mem.total - memUsage) /
|
|
||||||
serverInfo.mem.total) *
|
|
||||||
100
|
|
||||||
).toFixed(0)
|
|
||||||
}}%)
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="_debobigegoItem">
|
|
||||||
<div class="_debobigegoLabel">
|
|
||||||
<i class="ph-hard-drives ph-bold ph-lg"></i> {{ i18n.ts.disk }}
|
|
||||||
</div>
|
|
||||||
<div class="_debobigegoPanel xhexznfu">
|
|
||||||
<div>
|
|
||||||
<canvas :ref="disk"></canvas>
|
|
||||||
</div>
|
|
||||||
<div v-if="serverInfo">
|
|
||||||
<div class="_table">
|
|
||||||
<div class="_row">
|
|
||||||
<div class="_cell">
|
|
||||||
<div class="_label">Disk total</div>
|
|
||||||
{{ bytes(serverInfo.fs.total) }}
|
|
||||||
</div>
|
|
||||||
<div class="_cell">
|
|
||||||
<div class="_label">Disk used</div>
|
|
||||||
{{ bytes(serverInfo.fs.used) }} ({{
|
|
||||||
(
|
|
||||||
(serverInfo.fs.used / serverInfo.fs.total) *
|
|
||||||
100
|
|
||||||
).toFixed(0)
|
|
||||||
}}%)
|
|
||||||
</div>
|
|
||||||
<div class="_cell">
|
|
||||||
<div class="_label">Disk free</div>
|
|
||||||
{{
|
|
||||||
bytes(serverInfo.fs.total - serverInfo.fs.used)
|
|
||||||
}}
|
|
||||||
({{
|
|
||||||
(
|
|
||||||
((serverInfo.fs.total -
|
|
||||||
serverInfo.fs.used) /
|
|
||||||
serverInfo.fs.total) *
|
|
||||||
100
|
|
||||||
).toFixed(0)
|
|
||||||
}}%)
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="_debobigegoItem">
|
|
||||||
<div class="_debobigegoLabel">
|
|
||||||
<i class="ph-swap ph-bold ph-lg"></i> {{ i18n.ts.network }}
|
|
||||||
</div>
|
|
||||||
<div class="_debobigegoPanel xhexznfu">
|
|
||||||
<div>
|
|
||||||
<canvas :ref="net"></canvas>
|
|
||||||
</div>
|
|
||||||
<div v-if="serverInfo">
|
|
||||||
<div class="_table">
|
|
||||||
<div class="_row">
|
|
||||||
<div class="_cell">
|
|
||||||
<div class="_label">Interface</div>
|
|
||||||
{{ serverInfo.net.interface }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script lang="ts">
|
|
||||||
import { defineComponent, markRaw } from "vue";
|
|
||||||
import {
|
|
||||||
Chart,
|
|
||||||
ArcElement,
|
|
||||||
LineElement,
|
|
||||||
BarElement,
|
|
||||||
PointElement,
|
|
||||||
BarController,
|
|
||||||
LineController,
|
|
||||||
CategoryScale,
|
|
||||||
LinearScale,
|
|
||||||
Legend,
|
|
||||||
Title,
|
|
||||||
Tooltip,
|
|
||||||
SubTitle,
|
|
||||||
} from "chart.js";
|
|
||||||
import MkwFederation from "../../widgets/federation.vue";
|
|
||||||
import MkButton from "@/components/MkButton.vue";
|
|
||||||
import MkSelect from "@/components/form/select.vue";
|
|
||||||
import MkInput from "@/components/form/input.vue";
|
|
||||||
import MkContainer from "@/components/MkContainer.vue";
|
|
||||||
import MkFolder from "@/components/MkFolder.vue";
|
|
||||||
import { version, url } from "@/config";
|
|
||||||
import bytes from "@/filters/bytes";
|
|
||||||
import number from "@/filters/number";
|
|
||||||
import { i18n } from "@/i18n";
|
|
||||||
|
|
||||||
Chart.register(
|
|
||||||
ArcElement,
|
|
||||||
LineElement,
|
|
||||||
BarElement,
|
|
||||||
PointElement,
|
|
||||||
BarController,
|
|
||||||
LineController,
|
|
||||||
CategoryScale,
|
|
||||||
LinearScale,
|
|
||||||
Legend,
|
|
||||||
Title,
|
|
||||||
Tooltip,
|
|
||||||
SubTitle
|
|
||||||
);
|
|
||||||
|
|
||||||
const alpha = (hex, a) => {
|
|
||||||
const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex)!;
|
|
||||||
const r = parseInt(result[1], 16);
|
|
||||||
const g = parseInt(result[2], 16);
|
|
||||||
const b = parseInt(result[3], 16);
|
|
||||||
return `rgba(${r}, ${g}, ${b}, ${a})`;
|
|
||||||
};
|
|
||||||
import * as os from "@/os";
|
|
||||||
import { stream } from "@/stream";
|
|
||||||
|
|
||||||
export default defineComponent({
|
|
||||||
components: {
|
|
||||||
MkButton,
|
|
||||||
MkSelect,
|
|
||||||
MkInput,
|
|
||||||
MkContainer,
|
|
||||||
MkFolder,
|
|
||||||
MkwFederation,
|
|
||||||
},
|
|
||||||
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
version,
|
|
||||||
url,
|
|
||||||
stats: null,
|
|
||||||
serverInfo: null,
|
|
||||||
connection: null,
|
|
||||||
queueConnection: markRaw(stream.useChannel("queueStats")),
|
|
||||||
memUsage: 0,
|
|
||||||
chartCpuMem: null,
|
|
||||||
chartNet: null,
|
|
||||||
jobs: [],
|
|
||||||
logs: [],
|
|
||||||
logLevel: "all",
|
|
||||||
logDomain: "",
|
|
||||||
modLogs: [],
|
|
||||||
dbInfo: null,
|
|
||||||
overviewHeight: "1fr",
|
|
||||||
queueHeight: "1fr",
|
|
||||||
paused: false,
|
|
||||||
i18n,
|
|
||||||
};
|
|
||||||
},
|
|
||||||
|
|
||||||
computed: {
|
|
||||||
gridColor() {
|
|
||||||
// TODO: var(--panel)の色が暗いか明るいかで判定する
|
|
||||||
return this.$store.state.darkMode
|
|
||||||
? "rgba(255, 255, 255, 0.1)"
|
|
||||||
: "rgba(0, 0, 0, 0.1)";
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
mounted() {
|
|
||||||
this.fetchJobs();
|
|
||||||
|
|
||||||
Chart.defaults.color = getComputedStyle(
|
|
||||||
document.documentElement
|
|
||||||
).getPropertyValue("--fg");
|
|
||||||
|
|
||||||
os.api("admin/server-info", {}).then((res) => {
|
|
||||||
this.serverInfo = res;
|
|
||||||
|
|
||||||
this.connection = markRaw(stream.useChannel("serverStats"));
|
|
||||||
this.connection.on("stats", this.onStats);
|
|
||||||
this.connection.on("statsLog", this.onStatsLog);
|
|
||||||
this.connection.send("requestLog", {
|
|
||||||
id: Math.random().toString().substr(2, 8),
|
|
||||||
length: 150,
|
|
||||||
});
|
|
||||||
|
|
||||||
this.$nextTick(() => {
|
|
||||||
this.queueConnection.send("requestLog", {
|
|
||||||
id: Math.random().toString().substr(2, 8),
|
|
||||||
length: 200,
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
beforeUnmount() {
|
|
||||||
if (this.connection) {
|
|
||||||
this.connection.off("stats", this.onStats);
|
|
||||||
this.connection.off("statsLog", this.onStatsLog);
|
|
||||||
this.connection.dispose();
|
|
||||||
}
|
|
||||||
this.queueConnection.dispose();
|
|
||||||
},
|
|
||||||
|
|
||||||
methods: {
|
|
||||||
cpumem(el) {
|
|
||||||
if (this.chartCpuMem != null) return;
|
|
||||||
this.chartCpuMem = markRaw(
|
|
||||||
new Chart(el, {
|
|
||||||
type: "line",
|
|
||||||
data: {
|
|
||||||
labels: [],
|
|
||||||
datasets: [
|
|
||||||
{
|
|
||||||
label: "CPU",
|
|
||||||
pointRadius: 0,
|
|
||||||
tension: 0,
|
|
||||||
borderWidth: 2,
|
|
||||||
borderColor: "#31748f",
|
|
||||||
backgroundColor: alpha("#31748f", 0.1),
|
|
||||||
data: [],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: "MEM (active)",
|
|
||||||
pointRadius: 0,
|
|
||||||
tension: 0,
|
|
||||||
borderWidth: 2,
|
|
||||||
borderColor: "#c4a7e7",
|
|
||||||
backgroundColor: alpha("#c4a7e7", 0.02),
|
|
||||||
data: [],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: "MEM (used)",
|
|
||||||
pointRadius: 0,
|
|
||||||
tension: 0,
|
|
||||||
borderWidth: 2,
|
|
||||||
borderColor: "#ebbcba",
|
|
||||||
borderDash: [5, 5],
|
|
||||||
fill: false,
|
|
||||||
data: [],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
options: {
|
|
||||||
aspectRatio: 3,
|
|
||||||
layout: {
|
|
||||||
padding: {
|
|
||||||
left: 16,
|
|
||||||
right: 16,
|
|
||||||
top: 16,
|
|
||||||
bottom: 0,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
legend: {
|
|
||||||
position: "bottom",
|
|
||||||
labels: {
|
|
||||||
boxWidth: 16,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
scales: {
|
|
||||||
x: {
|
|
||||||
gridLines: {
|
|
||||||
display: false,
|
|
||||||
color: this.gridColor,
|
|
||||||
zeroLineColor: this.gridColor,
|
|
||||||
},
|
|
||||||
ticks: {
|
|
||||||
display: false,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
y: {
|
|
||||||
position: "right",
|
|
||||||
gridLines: {
|
|
||||||
display: true,
|
|
||||||
color: this.gridColor,
|
|
||||||
zeroLineColor: this.gridColor,
|
|
||||||
},
|
|
||||||
ticks: {
|
|
||||||
display: false,
|
|
||||||
max: 100,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
tooltips: {
|
|
||||||
intersect: false,
|
|
||||||
mode: "index",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
);
|
|
||||||
},
|
|
||||||
|
|
||||||
net(el) {
|
|
||||||
if (this.chartNet != null) return;
|
|
||||||
this.chartNet = markRaw(
|
|
||||||
new Chart(el, {
|
|
||||||
type: "line",
|
|
||||||
data: {
|
|
||||||
labels: [],
|
|
||||||
datasets: [
|
|
||||||
{
|
|
||||||
label: "In",
|
|
||||||
pointRadius: 0,
|
|
||||||
tension: 0,
|
|
||||||
borderWidth: 2,
|
|
||||||
borderColor: "#94a029",
|
|
||||||
backgroundColor: alpha("#94a029", 0.1),
|
|
||||||
data: [],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: "Out",
|
|
||||||
pointRadius: 0,
|
|
||||||
tension: 0,
|
|
||||||
borderWidth: 2,
|
|
||||||
borderColor: "#ff9156",
|
|
||||||
backgroundColor: alpha("#ff9156", 0.1),
|
|
||||||
data: [],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
options: {
|
|
||||||
aspectRatio: 3,
|
|
||||||
layout: {
|
|
||||||
padding: {
|
|
||||||
left: 16,
|
|
||||||
right: 16,
|
|
||||||
top: 16,
|
|
||||||
bottom: 0,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
legend: {
|
|
||||||
position: "bottom",
|
|
||||||
labels: {
|
|
||||||
boxWidth: 16,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
scales: {
|
|
||||||
x: {
|
|
||||||
gridLines: {
|
|
||||||
display: false,
|
|
||||||
color: this.gridColor,
|
|
||||||
zeroLineColor: this.gridColor,
|
|
||||||
},
|
|
||||||
ticks: {
|
|
||||||
display: false,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
y: {
|
|
||||||
position: "right",
|
|
||||||
gridLines: {
|
|
||||||
display: true,
|
|
||||||
color: this.gridColor,
|
|
||||||
zeroLineColor: this.gridColor,
|
|
||||||
},
|
|
||||||
ticks: {
|
|
||||||
display: false,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
tooltips: {
|
|
||||||
intersect: false,
|
|
||||||
mode: "index",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
);
|
|
||||||
},
|
|
||||||
|
|
||||||
disk(el) {
|
|
||||||
if (this.chartDisk != null) return;
|
|
||||||
this.chartDisk = markRaw(
|
|
||||||
new Chart(el, {
|
|
||||||
type: "line",
|
|
||||||
data: {
|
|
||||||
labels: [],
|
|
||||||
datasets: [
|
|
||||||
{
|
|
||||||
label: "Read",
|
|
||||||
pointRadius: 0,
|
|
||||||
tension: 0,
|
|
||||||
borderWidth: 2,
|
|
||||||
borderColor: "#94a029",
|
|
||||||
backgroundColor: alpha("#94a029", 0.1),
|
|
||||||
data: [],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: "Write",
|
|
||||||
pointRadius: 0,
|
|
||||||
tension: 0,
|
|
||||||
borderWidth: 2,
|
|
||||||
borderColor: "#ff9156",
|
|
||||||
backgroundColor: alpha("#ff9156", 0.1),
|
|
||||||
data: [],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
options: {
|
|
||||||
aspectRatio: 3,
|
|
||||||
layout: {
|
|
||||||
padding: {
|
|
||||||
left: 16,
|
|
||||||
right: 16,
|
|
||||||
top: 16,
|
|
||||||
bottom: 0,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
legend: {
|
|
||||||
position: "bottom",
|
|
||||||
labels: {
|
|
||||||
boxWidth: 16,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
scales: {
|
|
||||||
x: {
|
|
||||||
gridLines: {
|
|
||||||
display: false,
|
|
||||||
color: this.gridColor,
|
|
||||||
zeroLineColor: this.gridColor,
|
|
||||||
},
|
|
||||||
ticks: {
|
|
||||||
display: false,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
y: {
|
|
||||||
position: "right",
|
|
||||||
gridLines: {
|
|
||||||
display: true,
|
|
||||||
color: this.gridColor,
|
|
||||||
zeroLineColor: this.gridColor,
|
|
||||||
},
|
|
||||||
ticks: {
|
|
||||||
display: false,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
tooltips: {
|
|
||||||
intersect: false,
|
|
||||||
mode: "index",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
);
|
|
||||||
},
|
|
||||||
|
|
||||||
fetchJobs() {
|
|
||||||
os.api("admin/queue/deliver-delayed", {}).then((jobs) => {
|
|
||||||
this.jobs = jobs;
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
onStats(stats) {
|
|
||||||
if (this.paused) return;
|
|
||||||
|
|
||||||
const cpu = (stats.cpu * 100).toFixed(0);
|
|
||||||
const memActive = (
|
|
||||||
(stats.mem.active / this.serverInfo.mem.total) *
|
|
||||||
100
|
|
||||||
).toFixed(0);
|
|
||||||
const memUsed = (
|
|
||||||
(stats.mem.used / this.serverInfo.mem.total) *
|
|
||||||
100
|
|
||||||
).toFixed(0);
|
|
||||||
this.memUsage = stats.mem.active;
|
|
||||||
|
|
||||||
this.chartCpuMem.data.labels.push("");
|
|
||||||
this.chartCpuMem.data.datasets[0].data.push(cpu);
|
|
||||||
this.chartCpuMem.data.datasets[1].data.push(memActive);
|
|
||||||
this.chartCpuMem.data.datasets[2].data.push(memUsed);
|
|
||||||
this.chartNet.data.labels.push("");
|
|
||||||
this.chartNet.data.datasets[0].data.push(stats.net.rx);
|
|
||||||
this.chartNet.data.datasets[1].data.push(stats.net.tx);
|
|
||||||
this.chartDisk.data.labels.push("");
|
|
||||||
this.chartDisk.data.datasets[0].data.push(stats.fs.r);
|
|
||||||
this.chartDisk.data.datasets[1].data.push(stats.fs.w);
|
|
||||||
if (this.chartCpuMem.data.datasets[0].data.length > 150) {
|
|
||||||
this.chartCpuMem.data.labels.shift();
|
|
||||||
this.chartCpuMem.data.datasets[0].data.shift();
|
|
||||||
this.chartCpuMem.data.datasets[1].data.shift();
|
|
||||||
this.chartCpuMem.data.datasets[2].data.shift();
|
|
||||||
this.chartNet.data.labels.shift();
|
|
||||||
this.chartNet.data.datasets[0].data.shift();
|
|
||||||
this.chartNet.data.datasets[1].data.shift();
|
|
||||||
this.chartDisk.data.labels.shift();
|
|
||||||
this.chartDisk.data.datasets[0].data.shift();
|
|
||||||
this.chartDisk.data.datasets[1].data.shift();
|
|
||||||
}
|
|
||||||
this.chartCpuMem.update();
|
|
||||||
this.chartNet.update();
|
|
||||||
this.chartDisk.update();
|
|
||||||
},
|
|
||||||
|
|
||||||
onStatsLog(statsLog) {
|
|
||||||
for (const stats of [...statsLog].reverse()) {
|
|
||||||
this.onStats(stats);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
bytes,
|
|
||||||
|
|
||||||
number,
|
|
||||||
|
|
||||||
pause() {
|
|
||||||
this.paused = true;
|
|
||||||
},
|
|
||||||
|
|
||||||
resume() {
|
|
||||||
this.paused = false;
|
|
||||||
},
|
|
||||||
},
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
|
||||||
.xhexznfu {
|
|
||||||
> div:nth-child(2) {
|
|
||||||
padding: 16px;
|
|
||||||
border-top: solid 0.5px var(--divider);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
145
packages/client/src/pages/admin/overview.metrics.vue
Normal file
145
packages/client/src/pages/admin/overview.metrics.vue
Normal file
|
@ -0,0 +1,145 @@
|
||||||
|
<template>
|
||||||
|
<div class="_panel" :class="$style.root">
|
||||||
|
<div class="ntjkdlsfk">
|
||||||
|
<div class="_panel">
|
||||||
|
<XPie class="pie" :value="cpuUsage" />
|
||||||
|
<div>
|
||||||
|
<p><i class="ph-cpu ph-bold ph-lg"></i>CPU</p>
|
||||||
|
<p>{{ meta.cpu.cores }} Logical cores</p>
|
||||||
|
<p>{{ meta.cpu.model }}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="_panel">
|
||||||
|
<XPie class="pie" :value="memUsage" />
|
||||||
|
<div>
|
||||||
|
<p><i class="ph-microchip ph-bold ph-lg"></i>RAM</p>
|
||||||
|
<p>Total: {{ bytes(memTotal, 1) }}</p>
|
||||||
|
<p>Used: {{ bytes(memUsed, 1) }}</p>
|
||||||
|
<p>Free: {{ bytes(memFree, 1) }}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="_panel">
|
||||||
|
<XPie class="pie" :value="diskUsage" />
|
||||||
|
<div>
|
||||||
|
<p><i class="ph-hard-drives ph-bold ph-lg"></i>Disk</p>
|
||||||
|
<p>Total: {{ bytes(diskTotal, 1) }}</p>
|
||||||
|
<p>Free: {{ bytes(diskAvailable, 1) }}</p>
|
||||||
|
<p>Used: {{ bytes(diskUsed, 1) }}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="_panel">
|
||||||
|
<XPie class="pie" :value="meiliProgress" />
|
||||||
|
<div>
|
||||||
|
<p>
|
||||||
|
<i class="ph-file-search ph-bold ph-lg"></i>MeiliSearch
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
{{ i18n.ts._widgets.meiliStatus }}: {{ meiliAvailable }}
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
{{ i18n.ts._widgets.meiliSize }}:
|
||||||
|
{{ bytes(meiliTotalSize, 1) }}
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
{{ i18n.ts._widgets.meiliIndexCount }}:
|
||||||
|
{{ meiliIndexCount }}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { onMounted, onUnmounted } from "vue";
|
||||||
|
import XPie from "../../widgets/server-metric/pie.vue";
|
||||||
|
import bytes from "@/filters/bytes";
|
||||||
|
import { stream } from "@/stream";
|
||||||
|
import * as os from "@/os";
|
||||||
|
import { i18n } from "@/i18n";
|
||||||
|
|
||||||
|
const meta = await os.api("server-info", {});
|
||||||
|
const serverStats = await os.api("stats");
|
||||||
|
|
||||||
|
let cpuUsage: number = $ref(0);
|
||||||
|
|
||||||
|
let memUsage: number = $ref(0);
|
||||||
|
let memTotal: number = $ref(0);
|
||||||
|
let memUsed: number = $ref(0);
|
||||||
|
let memFree: number = $ref(0);
|
||||||
|
|
||||||
|
let meiliProgress: number = $ref(0);
|
||||||
|
let meiliTotalSize: number = $ref(0);
|
||||||
|
let meiliIndexCount: number = $ref(0);
|
||||||
|
let meiliAvailable: string = $ref("unavailable");
|
||||||
|
|
||||||
|
const diskUsage = $computed(() => meta.fs.used / meta.fs.total);
|
||||||
|
const diskTotal = $computed(() => meta.fs.total);
|
||||||
|
const diskUsed = $computed(() => meta.fs.used);
|
||||||
|
const diskAvailable = $computed(() => meta.fs.total - meta.fs.used);
|
||||||
|
|
||||||
|
function onStats(stats) {
|
||||||
|
cpuUsage = stats.cpu;
|
||||||
|
|
||||||
|
memUsage = stats.mem.active / meta.mem.total;
|
||||||
|
memTotal = meta.mem.total;
|
||||||
|
memUsed = stats.mem.active;
|
||||||
|
memFree = memTotal - memUsed;
|
||||||
|
|
||||||
|
meiliTotalSize = stats.meilisearch.size;
|
||||||
|
meiliIndexCount = stats.meilisearch.indexed_count;
|
||||||
|
meiliAvailable = stats.meilisearch.health;
|
||||||
|
meiliProgress = meiliIndexCount / serverStats.notesCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
const connection = stream.useChannel("serverStats");
|
||||||
|
onMounted(() => {
|
||||||
|
connection.on("stats", onStats);
|
||||||
|
connection.dispose();
|
||||||
|
});
|
||||||
|
|
||||||
|
onUnmounted(() => {
|
||||||
|
connection.off("stats", onStats);
|
||||||
|
connection.dispose();
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" module>
|
||||||
|
.root {
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ntjkdlsfk {
|
||||||
|
display: flex;
|
||||||
|
padding: 16px;
|
||||||
|
|
||||||
|
> ._panel {
|
||||||
|
> .pie {
|
||||||
|
height: 82px;
|
||||||
|
flex-shrink: 0;
|
||||||
|
margin-right: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
> div {
|
||||||
|
flex: 1;
|
||||||
|
|
||||||
|
> p {
|
||||||
|
margin: 0;
|
||||||
|
font-size: 0.8em;
|
||||||
|
|
||||||
|
&:first-child {
|
||||||
|
font-weight: bold;
|
||||||
|
margin-bottom: 4px;
|
||||||
|
|
||||||
|
> i {
|
||||||
|
margin-right: 4px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -50,6 +50,11 @@
|
||||||
<template #header>Inbox queue</template>
|
<template #header>Inbox queue</template>
|
||||||
<XQueue domain="inbox" />
|
<XQueue domain="inbox" />
|
||||||
</MkFolder>
|
</MkFolder>
|
||||||
|
|
||||||
|
<MkFolder class="item">
|
||||||
|
<template #header>Server metrics</template>
|
||||||
|
<XMetrics domain="inbox" />
|
||||||
|
</MkFolder>
|
||||||
</div>
|
</div>
|
||||||
</MkSpacer>
|
</MkSpacer>
|
||||||
</template>
|
</template>
|
||||||
|
@ -71,6 +76,7 @@ import XActiveUsers from "./overview.active-users.vue";
|
||||||
import XStats from "./overview.stats.vue";
|
import XStats from "./overview.stats.vue";
|
||||||
import XModerators from "./overview.moderators.vue";
|
import XModerators from "./overview.moderators.vue";
|
||||||
import XHeatmap from "./overview.heatmap.vue";
|
import XHeatmap from "./overview.heatmap.vue";
|
||||||
|
import XMetrics from "./overview.metrics.vue";
|
||||||
import MkTagCloud from "@/components/MkTagCloud.vue";
|
import MkTagCloud from "@/components/MkTagCloud.vue";
|
||||||
import { version, url } from "@/config";
|
import { version, url } from "@/config";
|
||||||
import * as os from "@/os";
|
import * as os from "@/os";
|
||||||
|
|
|
@ -7,6 +7,9 @@
|
||||||
:tabs="headerTabs"
|
:tabs="headerTabs"
|
||||||
/></template>
|
/></template>
|
||||||
<MkSpacer :content-max="700">
|
<MkSpacer :content-max="700">
|
||||||
|
<MkInfo class="_gap" :warn="true">{{
|
||||||
|
i18n.ts.channelFederationWarn
|
||||||
|
}}</MkInfo>
|
||||||
<swiper
|
<swiper
|
||||||
:round-lengths="true"
|
:round-lengths="true"
|
||||||
:touch-angle="25"
|
:touch-angle="25"
|
||||||
|
@ -119,6 +122,7 @@ import MkInput from "@/components/form/input.vue";
|
||||||
import MkRadios from "@/components/form/radios.vue";
|
import MkRadios from "@/components/form/radios.vue";
|
||||||
import MkButton from "@/components/MkButton.vue";
|
import MkButton from "@/components/MkButton.vue";
|
||||||
import MkFolder from "@/components/MkFolder.vue";
|
import MkFolder from "@/components/MkFolder.vue";
|
||||||
|
import MkInfo from "@/components/MkInfo.vue";
|
||||||
import { useRouter } from "@/router";
|
import { useRouter } from "@/router";
|
||||||
import { definePageMetadata } from "@/scripts/page-metadata";
|
import { definePageMetadata } from "@/scripts/page-metadata";
|
||||||
import { deviceKind } from "@/scripts/device-kind";
|
import { deviceKind } from "@/scripts/device-kind";
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
<template>
|
<template>
|
||||||
|
<MkSpacer :content-max="700">
|
||||||
<div class="geegznzt">
|
<div class="geegznzt">
|
||||||
<XAntenna :antenna="draft" @created="onAntennaCreated" />
|
<XAntenna :antenna="draft" @created="onAntennaCreated" />
|
||||||
</div>
|
</div>
|
||||||
|
</MkSpacer>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
|
|
|
@ -8,6 +8,8 @@
|
||||||
/></template>
|
/></template>
|
||||||
<MkSpacer :content-max="700">
|
<MkSpacer :content-max="700">
|
||||||
<div class="ieepwinx">
|
<div class="ieepwinx">
|
||||||
|
<MkInfo class="_gap" :icon="'flying-saucer'" :card="true">
|
||||||
|
<p>{{ i18n.ts.antennasDesc }}</p>
|
||||||
<MkButton
|
<MkButton
|
||||||
:link="true"
|
:link="true"
|
||||||
to="/my/antennas/create"
|
to="/my/antennas/create"
|
||||||
|
@ -16,20 +18,19 @@
|
||||||
><i class="ph-plus ph-bold ph-lg"></i>
|
><i class="ph-plus ph-bold ph-lg"></i>
|
||||||
{{ i18n.ts.add }}</MkButton
|
{{ i18n.ts.add }}</MkButton
|
||||||
>
|
>
|
||||||
|
</MkInfo>
|
||||||
<div class="">
|
<div class="">
|
||||||
<MkPagination
|
<MkPagination ref="list" :pagination="pagination">
|
||||||
v-slot="{ items }"
|
<template #default="{ items }">
|
||||||
ref="list"
|
|
||||||
:pagination="pagination"
|
|
||||||
>
|
|
||||||
<div v-for="antenna in items" :key="antenna.id">
|
<div v-for="antenna in items" :key="antenna.id">
|
||||||
<MkA
|
<MkA
|
||||||
class="uopelskx"
|
class="uopelskx"
|
||||||
:link="true"
|
:link="true"
|
||||||
:to="`/timeline/antenna/${antenna.id}`"
|
:to="`/timeline/antenna/${antenna.id}`"
|
||||||
>
|
>
|
||||||
<i class="ph-flying-saucer ph-bold ph-lg"></i
|
<i
|
||||||
|
class="ph-flying-saucer ph-bold ph-lg"
|
||||||
|
></i
|
||||||
><i
|
><i
|
||||||
:class="`${
|
:class="`${
|
||||||
antenna.hasUnreadNote
|
antenna.hasUnreadNote
|
||||||
|
@ -45,6 +46,7 @@
|
||||||
<div class="name">{{ antenna.name }}</div>
|
<div class="name">{{ antenna.name }}</div>
|
||||||
</MkA>
|
</MkA>
|
||||||
</div>
|
</div>
|
||||||
|
</template>
|
||||||
</MkPagination>
|
</MkPagination>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -56,6 +58,7 @@
|
||||||
import { onActivated, onDeactivated, ref } from "vue";
|
import { onActivated, onDeactivated, ref } from "vue";
|
||||||
import MkPagination from "@/components/MkPagination.vue";
|
import MkPagination from "@/components/MkPagination.vue";
|
||||||
import MkButton from "@/components/MkButton.vue";
|
import MkButton from "@/components/MkButton.vue";
|
||||||
|
import MkInfo from "@/components/MkInfo.vue";
|
||||||
import { i18n } from "@/i18n";
|
import { i18n } from "@/i18n";
|
||||||
import { definePageMetadata } from "@/scripts/page-metadata";
|
import { definePageMetadata } from "@/scripts/page-metadata";
|
||||||
|
|
||||||
|
@ -101,10 +104,6 @@ definePageMetadata({
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.ieepwinx {
|
.ieepwinx {
|
||||||
> .add {
|
|
||||||
margin: 0 auto 16px auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.uopelskx {
|
.uopelskx {
|
||||||
float: left;
|
float: left;
|
||||||
min-width: 25px;
|
min-width: 25px;
|
||||||
|
|
|
@ -8,17 +8,17 @@
|
||||||
/></template>
|
/></template>
|
||||||
<MkSpacer :content-max="700">
|
<MkSpacer :content-max="700">
|
||||||
<div class="qtcaoidl">
|
<div class="qtcaoidl">
|
||||||
<MkButton primary class="add" @click="create"
|
|
||||||
><i class="ph-plus ph-bold ph-lg"></i>
|
|
||||||
{{ i18n.ts.add }}</MkButton
|
|
||||||
>
|
|
||||||
|
|
||||||
<MkPagination
|
<MkPagination
|
||||||
v-slot="{ items }"
|
|
||||||
ref="pagingComponent"
|
ref="pagingComponent"
|
||||||
:pagination="pagination"
|
:pagination="pagination"
|
||||||
class="list"
|
class="list"
|
||||||
>
|
>
|
||||||
|
<template #empty>
|
||||||
|
<MkInfo :icon="'paperclip'" :card="true">
|
||||||
|
<p>{{ i18n.ts.clipsDesc }}</p>
|
||||||
|
</MkInfo>
|
||||||
|
</template>
|
||||||
|
<template #default="{ items }">
|
||||||
<MkA
|
<MkA
|
||||||
v-for="item in items"
|
v-for="item in items"
|
||||||
:key="item.id"
|
:key="item.id"
|
||||||
|
@ -30,6 +30,7 @@
|
||||||
{{ item.description }}
|
{{ item.description }}
|
||||||
</div>
|
</div>
|
||||||
</MkA>
|
</MkA>
|
||||||
|
</template>
|
||||||
</MkPagination>
|
</MkPagination>
|
||||||
</div>
|
</div>
|
||||||
</MkSpacer>
|
</MkSpacer>
|
||||||
|
@ -40,6 +41,7 @@
|
||||||
import {} from "vue";
|
import {} from "vue";
|
||||||
import MkPagination from "@/components/MkPagination.vue";
|
import MkPagination from "@/components/MkPagination.vue";
|
||||||
import MkButton from "@/components/MkButton.vue";
|
import MkButton from "@/components/MkButton.vue";
|
||||||
|
import MkInfo from "@/components/MkInfo.vue";
|
||||||
import * as os from "@/os";
|
import * as os from "@/os";
|
||||||
import { i18n } from "@/i18n";
|
import { i18n } from "@/i18n";
|
||||||
import { definePageMetadata } from "@/scripts/page-metadata";
|
import { definePageMetadata } from "@/scripts/page-metadata";
|
||||||
|
@ -100,10 +102,6 @@ definePageMetadata({
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.qtcaoidl {
|
.qtcaoidl {
|
||||||
> .add {
|
|
||||||
margin: 0 auto 16px auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
> .list {
|
> .list {
|
||||||
> .item {
|
> .item {
|
||||||
display: block;
|
display: block;
|
||||||
|
|
|
@ -111,6 +111,10 @@ async function leave(group) {
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
._fullinfo {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
._card {
|
._card {
|
||||||
margin-bottom: 1rem;
|
margin-bottom: 1rem;
|
||||||
._title {
|
._title {
|
||||||
|
|
|
@ -8,16 +8,13 @@
|
||||||
/></template>
|
/></template>
|
||||||
<MkSpacer :content-max="700">
|
<MkSpacer :content-max="700">
|
||||||
<div class="qkcjvfiv">
|
<div class="qkcjvfiv">
|
||||||
<div class="buttonWrapper">
|
<MkInfo class="_gap" :icon="'list-bullets'" :card="true">
|
||||||
|
<p>{{ i18n.ts.listsDesc }}</p>
|
||||||
<MkButton primary class="add" @click="create"
|
<MkButton primary class="add" @click="create"
|
||||||
><i class="ph-plus ph-bold ph-lg"></i>
|
><i class="ph-plus ph-bold ph-lg"></i>
|
||||||
{{ i18n.ts.createList }}</MkButton
|
{{ i18n.ts.createList }}</MkButton
|
||||||
>
|
>
|
||||||
<MkButton @click="deleteAll"
|
</MkInfo>
|
||||||
><i class="ph-trash ph-bold ph-lg"></i>
|
|
||||||
{{ i18n.ts.deleteAll }}</MkButton
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<MkPagination
|
<MkPagination
|
||||||
v-slot="{ items }"
|
v-slot="{ items }"
|
||||||
|
@ -34,6 +31,10 @@
|
||||||
<div class="name">{{ list.name }}</div>
|
<div class="name">{{ list.name }}</div>
|
||||||
<MkAvatars :user-ids="list.userIds" />
|
<MkAvatars :user-ids="list.userIds" />
|
||||||
</MkA>
|
</MkA>
|
||||||
|
<MkButton @click="deleteAll"
|
||||||
|
><i class="ph-trash ph-bold ph-lg"></i>
|
||||||
|
{{ i18n.ts.deleteAll }}</MkButton
|
||||||
|
>
|
||||||
</MkPagination>
|
</MkPagination>
|
||||||
</div>
|
</div>
|
||||||
</MkSpacer>
|
</MkSpacer>
|
||||||
|
@ -45,6 +46,7 @@ import {} from "vue";
|
||||||
import MkPagination from "@/components/MkPagination.vue";
|
import MkPagination from "@/components/MkPagination.vue";
|
||||||
import MkButton from "@/components/MkButton.vue";
|
import MkButton from "@/components/MkButton.vue";
|
||||||
import MkAvatars from "@/components/MkAvatars.vue";
|
import MkAvatars from "@/components/MkAvatars.vue";
|
||||||
|
import MkInfo from "@/components/MkInfo.vue";
|
||||||
import * as os from "@/os";
|
import * as os from "@/os";
|
||||||
import { i18n } from "@/i18n";
|
import { i18n } from "@/i18n";
|
||||||
import { definePageMetadata } from "@/scripts/page-metadata";
|
import { definePageMetadata } from "@/scripts/page-metadata";
|
||||||
|
@ -92,15 +94,6 @@ definePageMetadata({
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.qkcjvfiv {
|
.qkcjvfiv {
|
||||||
> .buttonWrapper {
|
|
||||||
display: grid;
|
|
||||||
justify-content: center;
|
|
||||||
|
|
||||||
> .add {
|
|
||||||
margin: 0 auto var(--margin) auto;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
> .lists {
|
> .lists {
|
||||||
> .list {
|
> .list {
|
||||||
display: block;
|
display: block;
|
||||||
|
|
|
@ -4,6 +4,7 @@ import * as os from "@/os";
|
||||||
export async function indexPosts() {
|
export async function indexPosts() {
|
||||||
const { canceled, result: index } = await os.inputText({
|
const { canceled, result: index } = await os.inputText({
|
||||||
title: i18n.ts.indexFrom,
|
title: i18n.ts.indexFrom,
|
||||||
|
text: i18n.ts.indexFromDescription,
|
||||||
});
|
});
|
||||||
if (canceled) return;
|
if (canceled) return;
|
||||||
|
|
||||||
|
|
|
@ -3,30 +3,21 @@ import { i18n } from "@/i18n";
|
||||||
import { mainRouter } from "@/router";
|
import { mainRouter } from "@/router";
|
||||||
|
|
||||||
export async function search() {
|
export async function search() {
|
||||||
let searchOptions = "";
|
// const searchOptions =
|
||||||
|
// "Advanced search operators\n" +
|
||||||
|
// "from:user => filter by user\n" +
|
||||||
|
// "has:image/video/audio/text/file => filter by attachment types\n" +
|
||||||
|
// "domain:domain.com => filter by domain\n" +
|
||||||
|
// "before:Date => show posts made before Date\n" +
|
||||||
|
// "after:Date => show posts made after Date\n" +
|
||||||
|
// '"text" => get posts with exact text between quotes\n' +
|
||||||
|
// "filter:following => show results only from users you follow\n" +
|
||||||
|
// "filter:followers => show results only from followers\n";
|
||||||
|
|
||||||
let meta = null;
|
|
||||||
|
|
||||||
os.api("server-info", {}).then((res) => {
|
|
||||||
meta = res;
|
|
||||||
});
|
|
||||||
|
|
||||||
if (meta.meilisearch.health === "available") {
|
|
||||||
searchOptions =
|
|
||||||
"Advanced search operators\n" +
|
|
||||||
"from:user => filter by user\n" +
|
|
||||||
"has:image/video/audio/text/file => filter by attachment types\n" +
|
|
||||||
"domain:domain.com => filter by domain\n" +
|
|
||||||
"before:Date => show posts made before Date\n" +
|
|
||||||
"after:Date => show posts made after Date\n" +
|
|
||||||
'"text" => get posts with exact text between quotes\n' +
|
|
||||||
"filter:following => show results only from users you follow\n" +
|
|
||||||
"filter:followers => show results only from followers\n";
|
|
||||||
}
|
|
||||||
const { canceled, result: query } = await os.inputText({
|
const { canceled, result: query } = await os.inputText({
|
||||||
title: i18n.ts.search,
|
title: i18n.ts.search,
|
||||||
placeholder: i18n.ts.searchPlaceholder,
|
placeholder: i18n.ts.searchPlaceholder,
|
||||||
text: searchOptions,
|
// text: searchOptions,
|
||||||
});
|
});
|
||||||
if (canceled || query == null || query === "") return;
|
if (canceled || query == null || query === "") return;
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,26 @@ export const defaultStore = markRaw(
|
||||||
where: "account",
|
where: "account",
|
||||||
default: 0,
|
default: 0,
|
||||||
},
|
},
|
||||||
|
tlHomeHintClosed: {
|
||||||
|
where: "device",
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
tlLocalHintClosed: {
|
||||||
|
where: "device",
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
tlRecommendedHintClosed: {
|
||||||
|
where: "device",
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
tlSocialHintClosed: {
|
||||||
|
where: "device",
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
tlGlobalHintClosed: {
|
||||||
|
where: "device",
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
keepCw: {
|
keepCw: {
|
||||||
where: "account",
|
where: "account",
|
||||||
default: true,
|
default: true,
|
||||||
|
|
|
@ -114,7 +114,7 @@ html, body {
|
||||||
}
|
}
|
||||||
|
|
||||||
.swiper-slide {
|
.swiper-slide {
|
||||||
height: unset !important;
|
min-height: 100vh;
|
||||||
}
|
}
|
||||||
|
|
||||||
a {
|
a {
|
||||||
|
@ -303,6 +303,9 @@ hr {
|
||||||
|
|
||||||
._gap {
|
._gap {
|
||||||
margin: var(--margin) 0;
|
margin: var(--margin) 0;
|
||||||
|
&:first-child {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: 廃止
|
// TODO: 廃止
|
||||||
|
|
|
@ -252,6 +252,9 @@ function more(ev: MouseEvent) {
|
||||||
#calckey_app > :not(.wallpaper) & {
|
#calckey_app > :not(.wallpaper) & {
|
||||||
background: var(--navBg);
|
background: var(--navBg);
|
||||||
}
|
}
|
||||||
|
#calckey_app > .wallpaper:not(.centered) & {
|
||||||
|
border-right: 1px solid var(--divider);
|
||||||
|
}
|
||||||
contain: strict;
|
contain: strict;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
|
|
@ -3,19 +3,17 @@
|
||||||
<div
|
<div
|
||||||
:class="$style.container"
|
:class="$style.container"
|
||||||
:style="{
|
:style="{
|
||||||
backgroundImage: $instance.bannerUrl
|
backgroundImage: `url(${$instance.bannerUrl})`,
|
||||||
? `url(${$instance.bannerUrl})`
|
|
||||||
: null,
|
|
||||||
}"
|
}"
|
||||||
>
|
>
|
||||||
<div :class="$style.iconContainer">
|
<div :class="$style.iconContainer">
|
||||||
<img
|
<img
|
||||||
:src="
|
:src="
|
||||||
$instance.iconUrl ??
|
$instance.iconUrl ||
|
||||||
$instance.faviconUrl ??
|
$instance.faviconUrl ||
|
||||||
'/favicon.ico'
|
'/favicon.ico'
|
||||||
"
|
"
|
||||||
alt=""
|
alt="Instance logo"
|
||||||
:class="$style.icon"
|
:class="$style.icon"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
@ -107,7 +105,7 @@ defineExpose<WidgetComponentExpose>({
|
||||||
-1px 1px 0 var(--bg), 1px 1px 0 var(--bg);
|
-1px 1px 0 var(--bg), 1px 1px 0 var(--bg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.host {
|
.name {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<div class="vrvdvrys">
|
<div class="vrvdvrys">
|
||||||
<XPie class="pie" :value="usage" />
|
<XPie class="pie" :value="usage" />
|
||||||
<div>
|
<div>
|
||||||
<p><i class="ph-microchip ph-bold ph-lg"></i>CPU</p>
|
<p><i class="ph-cpu ph-bold ph-lg"></i>CPU</p>
|
||||||
<p>{{ meta.cpu.cores }} Logical cores</p>
|
<p>{{ meta.cpu.cores }} Logical cores</p>
|
||||||
<p>{{ meta.cpu.model }}</p>
|
<p>{{ meta.cpu.model }}</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,11 +1,15 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="verusivbr">
|
<div class="verusivbr">
|
||||||
<XPie class="pie" :value="progress" />
|
<XPie
|
||||||
|
v-tooltip="i18n.ts.meiliIndexCount"
|
||||||
|
class="pie"
|
||||||
|
:value="progress"
|
||||||
|
/>
|
||||||
<div>
|
<div>
|
||||||
<p><i class="ph-file-search ph-bold ph-lg"></i>MeiliSearch</p>
|
<p><i class="ph-file-search ph-bold ph-lg"></i>MeiliSearch</p>
|
||||||
<p>{{ i18n.ts._widgets.meiliStatus }}: {{ available }}</p>
|
<p>{{ i18n.ts._widgets.meiliStatus }}: {{ available }}</p>
|
||||||
<p>{{ i18n.ts._widgets.meiliSize }}: {{ bytes(total_size, 2) }}</p>
|
<p>{{ i18n.ts._widgets.meiliSize }}: {{ bytes(totalSize, 1) }}</p>
|
||||||
<p>{{ i18n.ts._widgets.meiliIndexCount }}: {{ index_count }}</p>
|
<p>{{ i18n.ts._widgets.meiliIndexCount }}: {{ indexCount }}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<br />
|
<br />
|
||||||
|
@ -25,15 +29,15 @@ const props = defineProps<{
|
||||||
|
|
||||||
let progress: number = $ref(0);
|
let progress: number = $ref(0);
|
||||||
let serverStats = $ref(null);
|
let serverStats = $ref(null);
|
||||||
let total_size: number = $ref(0);
|
let totalSize: number = $ref(0);
|
||||||
let index_count: number = $ref(0);
|
let indexCount: number = $ref(0);
|
||||||
let available: string = $ref("unavailable");
|
let available: string = $ref("unavailable");
|
||||||
|
|
||||||
function onStats(stats) {
|
function onStats(stats) {
|
||||||
total_size = stats.meilisearch.size;
|
totalSize = stats.meilisearch.size;
|
||||||
index_count = stats.meilisearch.indexed_count;
|
indexCount = stats.meilisearch.indexed_count;
|
||||||
available = stats.meilisearch.health;
|
available = stats.meilisearch.health;
|
||||||
progress = index_count / serverStats.notesCount;
|
progress = indexCount / serverStats.notesCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<div class="zlxnikvl">
|
<div class="zlxnikvl">
|
||||||
<XPie class="pie" :value="usage" />
|
<XPie class="pie" :value="usage" />
|
||||||
<div>
|
<div>
|
||||||
<p><i class="ph-cpu ph-bold ph-lg"></i>RAM</p>
|
<p><i class="ph-microchip ph-bold ph-lg"></i>RAM</p>
|
||||||
<p>Total: {{ bytes(total, 1) }}</p>
|
<p>Total: {{ bytes(total, 1) }}</p>
|
||||||
<p>Used: {{ bytes(used, 1) }}</p>
|
<p>Used: {{ bytes(used, 1) }}</p>
|
||||||
<p>Free: {{ bytes(free, 1) }}</p>
|
<p>Free: {{ bytes(free, 1) }}</p>
|
||||||
|
|
218
pnpm-lock.yaml
218
pnpm-lock.yaml
|
@ -12,11 +12,11 @@ importers:
|
||||||
.:
|
.:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@bull-board/api':
|
'@bull-board/api':
|
||||||
specifier: ^4.10.2
|
specifier: 5.2.0
|
||||||
version: 4.10.2
|
version: 5.2.0(@bull-board/ui@5.2.0)
|
||||||
'@bull-board/ui':
|
'@bull-board/ui':
|
||||||
specifier: ^4.10.2
|
specifier: 5.2.0
|
||||||
version: 4.10.2
|
version: 5.2.0
|
||||||
'@napi-rs/cli':
|
'@napi-rs/cli':
|
||||||
specifier: ^2.15.0
|
specifier: ^2.15.0
|
||||||
version: 2.15.0
|
version: 2.15.0
|
||||||
|
@ -28,7 +28,7 @@ importers:
|
||||||
version: 7.2.0
|
version: 7.2.0
|
||||||
focus-trap-vue:
|
focus-trap-vue:
|
||||||
specifier: ^4.0.1
|
specifier: ^4.0.1
|
||||||
version: 4.0.1(focus-trap@7.2.0)(vue@3.3.4)
|
version: 4.0.1(focus-trap@7.2.0)(vue@3.2.45)
|
||||||
js-yaml:
|
js-yaml:
|
||||||
specifier: 4.1.0
|
specifier: 4.1.0
|
||||||
version: 4.1.0
|
version: 4.1.0
|
||||||
|
@ -82,14 +82,14 @@ importers:
|
||||||
packages/backend:
|
packages/backend:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@bull-board/api':
|
'@bull-board/api':
|
||||||
specifier: ^4.6.4
|
specifier: 5.2.0
|
||||||
version: 4.10.2
|
version: 5.2.0(@bull-board/ui@5.2.0)
|
||||||
'@bull-board/koa':
|
'@bull-board/koa':
|
||||||
specifier: ^4.6.4
|
specifier: 5.2.0
|
||||||
version: 4.10.2(@types/koa@2.13.5)(pug@3.0.2)
|
version: 5.2.0(@types/koa@2.13.5)(pug@3.0.2)
|
||||||
'@bull-board/ui':
|
'@bull-board/ui':
|
||||||
specifier: ^4.6.4
|
specifier: 5.2.0
|
||||||
version: 4.10.2
|
version: 5.2.0
|
||||||
'@calckey/megalodon':
|
'@calckey/megalodon':
|
||||||
specifier: 5.2.0
|
specifier: 5.2.0
|
||||||
version: 5.2.0
|
version: 5.2.0
|
||||||
|
@ -217,8 +217,8 @@ importers:
|
||||||
specifier: 0.1.2
|
specifier: 0.1.2
|
||||||
version: 0.1.2
|
version: 0.1.2
|
||||||
ioredis:
|
ioredis:
|
||||||
specifier: 5.2.4
|
specifier: 5.3.2
|
||||||
version: 5.2.4
|
version: 5.3.2
|
||||||
ip-cidr:
|
ip-cidr:
|
||||||
specifier: 3.0.11
|
specifier: 3.0.11
|
||||||
version: 3.0.11
|
version: 3.0.11
|
||||||
|
@ -398,7 +398,7 @@ importers:
|
||||||
version: 14.0.0
|
version: 14.0.0
|
||||||
typeorm:
|
typeorm:
|
||||||
specifier: 0.3.11
|
specifier: 0.3.11
|
||||||
version: 0.3.11(ioredis@5.2.4)(pg@8.8.0)(ts-node@10.9.1)
|
version: 0.3.11(ioredis@5.3.2)(pg@8.8.0)(ts-node@10.9.1)
|
||||||
ulid:
|
ulid:
|
||||||
specifier: 2.3.0
|
specifier: 2.3.0
|
||||||
version: 2.3.0
|
version: 2.3.0
|
||||||
|
@ -1087,11 +1087,6 @@ packages:
|
||||||
resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==}
|
resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==}
|
||||||
engines: {node: '>=6.9.0'}
|
engines: {node: '>=6.9.0'}
|
||||||
|
|
||||||
/@babel/helper-string-parser@7.21.5:
|
|
||||||
resolution: {integrity: sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==}
|
|
||||||
engines: {node: '>=6.9.0'}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/@babel/helper-validator-identifier@7.19.1:
|
/@babel/helper-validator-identifier@7.19.1:
|
||||||
resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==}
|
resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==}
|
||||||
engines: {node: '>=6.9.0'}
|
engines: {node: '>=6.9.0'}
|
||||||
|
@ -1135,14 +1130,6 @@ packages:
|
||||||
'@babel/types': 7.21.4
|
'@babel/types': 7.21.4
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@babel/parser@7.22.3:
|
|
||||||
resolution: {integrity: sha512-vrukxyW/ep8UD1UDzOYpTKQ6abgjFoeG6L+4ar9+c5TN9QnlqiOi6QK7LSR5ewm/ERyGkT/Ai6VboNrxhbr9Uw==}
|
|
||||||
engines: {node: '>=6.0.0'}
|
|
||||||
hasBin: true
|
|
||||||
dependencies:
|
|
||||||
'@babel/types': 7.22.3
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.21.4):
|
/@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.21.4):
|
||||||
resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==}
|
resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
|
@ -1329,30 +1316,24 @@ packages:
|
||||||
to-fast-properties: 2.0.0
|
to-fast-properties: 2.0.0
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@babel/types@7.22.3:
|
|
||||||
resolution: {integrity: sha512-P3na3xIQHTKY4L0YOG7pM8M8uoUIB910WQaSiiMCZUC2Cy8XFEQONGABFnHWBa2gpGKODTAJcNhi5Zk0sLRrzg==}
|
|
||||||
engines: {node: '>=6.9.0'}
|
|
||||||
dependencies:
|
|
||||||
'@babel/helper-string-parser': 7.21.5
|
|
||||||
'@babel/helper-validator-identifier': 7.19.1
|
|
||||||
to-fast-properties: 2.0.0
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/@bcoe/v8-coverage@0.2.3:
|
/@bcoe/v8-coverage@0.2.3:
|
||||||
resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
|
resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@bull-board/api@4.10.2:
|
/@bull-board/api@5.2.0(@bull-board/ui@5.2.0):
|
||||||
resolution: {integrity: sha512-lRHo0A7hsz71aOx1ZN0SmLLWfSuvKdL6EZ4imlgo5SuXGozybvlRc5KPIJU2/E1w5meoUGi+nFezBwp1gT/SMw==}
|
resolution: {integrity: sha512-1HGF2EF/4zI3+Cj414nQzwFprLXOJTlVdqXUf5UEBS4HtYafWv93mGIwkrD8S4Bpz4VSvM87adF6tQPJ7Ewt+w==}
|
||||||
|
peerDependencies:
|
||||||
|
'@bull-board/ui': 5.2.0
|
||||||
dependencies:
|
dependencies:
|
||||||
|
'@bull-board/ui': 5.2.0
|
||||||
redis-info: 3.1.0
|
redis-info: 3.1.0
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/@bull-board/koa@4.10.2(@types/koa@2.13.5)(pug@3.0.2):
|
/@bull-board/koa@5.2.0(@types/koa@2.13.5)(pug@3.0.2):
|
||||||
resolution: {integrity: sha512-gabPtsMOt2SQHkS5VcY1q/FCpbBRFiFrbWbcouZ7zWKg413J8nG+yErz3pc0rbmp23kbKX6wTG/diWKhE7EWbA==}
|
resolution: {integrity: sha512-jntDAl/POouD0PS/iiKXBNl26SuUf7Y5uL3EgpDN7isvwFcpKhvdk0VdBypjrkRHN6rPaEJJPkEtK30qv01XYw==}
|
||||||
dependencies:
|
dependencies:
|
||||||
'@bull-board/api': 4.10.2
|
'@bull-board/api': 5.2.0(@bull-board/ui@5.2.0)
|
||||||
'@bull-board/ui': 4.10.2
|
'@bull-board/ui': 5.2.0
|
||||||
ejs: 3.1.8
|
ejs: 3.1.8
|
||||||
koa: 2.13.4
|
koa: 2.13.4
|
||||||
koa-mount: 4.0.0
|
koa-mount: 4.0.0
|
||||||
|
@ -1416,10 +1397,10 @@ packages:
|
||||||
- whiskers
|
- whiskers
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/@bull-board/ui@4.10.2:
|
/@bull-board/ui@5.2.0:
|
||||||
resolution: {integrity: sha512-vaHGojG5D3xjnaed3nwOaLy4Y06RgDJdYRaFR5E06SjZ0vOvjVYGD6s4cykK512Aw/ElFhKDPwzhf8BvpwAtDQ==}
|
resolution: {integrity: sha512-f2sgs7AjOVch7tFhbmlVCkhZjJWboxwNxWEfAsIUd1WidUC+Ef5J02tpQvu7apzRtu5zcn8IiJtI5HFO6oKaCA==}
|
||||||
dependencies:
|
dependencies:
|
||||||
'@bull-board/api': 4.10.2
|
'@bull-board/api': 5.2.0(@bull-board/ui@5.2.0)
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/@calckey/megalodon@5.2.0:
|
/@calckey/megalodon@5.2.0:
|
||||||
|
@ -2120,10 +2101,6 @@ packages:
|
||||||
/@jridgewell/sourcemap-codec@1.4.14:
|
/@jridgewell/sourcemap-codec@1.4.14:
|
||||||
resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==}
|
resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==}
|
||||||
|
|
||||||
/@jridgewell/sourcemap-codec@1.4.15:
|
|
||||||
resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/@jridgewell/trace-mapping@0.3.17:
|
/@jridgewell/trace-mapping@0.3.17:
|
||||||
resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==}
|
resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==}
|
||||||
dependencies:
|
dependencies:
|
||||||
|
@ -3240,7 +3217,7 @@ packages:
|
||||||
resolution: {integrity: sha512-zJbJ3FVE17CNl5KXzdeSPtdltc4tMT3TzC6fxQS0sQngkbFZ6h+0uTafsRqu+eSLIugf6Yb0Ea0SUuRr42Nk9g==}
|
resolution: {integrity: sha512-zJbJ3FVE17CNl5KXzdeSPtdltc4tMT3TzC6fxQS0sQngkbFZ6h+0uTafsRqu+eSLIugf6Yb0Ea0SUuRr42Nk9g==}
|
||||||
deprecated: This is a stub types definition. ioredis provides its own type definitions, so you do not need this installed.
|
deprecated: This is a stub types definition. ioredis provides its own type definitions, so you do not need this installed.
|
||||||
dependencies:
|
dependencies:
|
||||||
ioredis: 5.2.4
|
ioredis: 5.3.2
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
dev: true
|
dev: true
|
||||||
|
@ -3852,30 +3829,12 @@ packages:
|
||||||
'@vue/shared': 3.2.45
|
'@vue/shared': 3.2.45
|
||||||
estree-walker: 2.0.2
|
estree-walker: 2.0.2
|
||||||
source-map: 0.6.1
|
source-map: 0.6.1
|
||||||
dev: true
|
|
||||||
|
|
||||||
/@vue/compiler-core@3.3.4:
|
|
||||||
resolution: {integrity: sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==}
|
|
||||||
dependencies:
|
|
||||||
'@babel/parser': 7.22.3
|
|
||||||
'@vue/shared': 3.3.4
|
|
||||||
estree-walker: 2.0.2
|
|
||||||
source-map-js: 1.0.2
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/@vue/compiler-dom@3.2.45:
|
/@vue/compiler-dom@3.2.45:
|
||||||
resolution: {integrity: sha512-tyYeUEuKqqZO137WrZkpwfPCdiiIeXYCcJ8L4gWz9vqaxzIQRccTSwSWZ/Axx5YR2z+LvpUbmPNXxuBU45lyRw==}
|
resolution: {integrity: sha512-tyYeUEuKqqZO137WrZkpwfPCdiiIeXYCcJ8L4gWz9vqaxzIQRccTSwSWZ/Axx5YR2z+LvpUbmPNXxuBU45lyRw==}
|
||||||
dependencies:
|
dependencies:
|
||||||
'@vue/compiler-core': 3.2.45
|
'@vue/compiler-core': 3.2.45
|
||||||
'@vue/shared': 3.2.45
|
'@vue/shared': 3.2.45
|
||||||
dev: true
|
|
||||||
|
|
||||||
/@vue/compiler-dom@3.3.4:
|
|
||||||
resolution: {integrity: sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==}
|
|
||||||
dependencies:
|
|
||||||
'@vue/compiler-core': 3.3.4
|
|
||||||
'@vue/shared': 3.3.4
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/@vue/compiler-sfc@2.7.14:
|
/@vue/compiler-sfc@2.7.14:
|
||||||
resolution: {integrity: sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA==}
|
resolution: {integrity: sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA==}
|
||||||
|
@ -3898,36 +3857,12 @@ packages:
|
||||||
magic-string: 0.25.9
|
magic-string: 0.25.9
|
||||||
postcss: 8.4.21
|
postcss: 8.4.21
|
||||||
source-map: 0.6.1
|
source-map: 0.6.1
|
||||||
dev: true
|
|
||||||
|
|
||||||
/@vue/compiler-sfc@3.3.4:
|
|
||||||
resolution: {integrity: sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==}
|
|
||||||
dependencies:
|
|
||||||
'@babel/parser': 7.22.3
|
|
||||||
'@vue/compiler-core': 3.3.4
|
|
||||||
'@vue/compiler-dom': 3.3.4
|
|
||||||
'@vue/compiler-ssr': 3.3.4
|
|
||||||
'@vue/reactivity-transform': 3.3.4
|
|
||||||
'@vue/shared': 3.3.4
|
|
||||||
estree-walker: 2.0.2
|
|
||||||
magic-string: 0.30.0
|
|
||||||
postcss: 8.4.24
|
|
||||||
source-map-js: 1.0.2
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/@vue/compiler-ssr@3.2.45:
|
/@vue/compiler-ssr@3.2.45:
|
||||||
resolution: {integrity: sha512-6BRaggEGqhWht3lt24CrIbQSRD5O07MTmd+LjAn5fJj568+R9eUD2F7wMQJjX859seSlrYog7sUtrZSd7feqrQ==}
|
resolution: {integrity: sha512-6BRaggEGqhWht3lt24CrIbQSRD5O07MTmd+LjAn5fJj568+R9eUD2F7wMQJjX859seSlrYog7sUtrZSd7feqrQ==}
|
||||||
dependencies:
|
dependencies:
|
||||||
'@vue/compiler-dom': 3.2.45
|
'@vue/compiler-dom': 3.2.45
|
||||||
'@vue/shared': 3.2.45
|
'@vue/shared': 3.2.45
|
||||||
dev: true
|
|
||||||
|
|
||||||
/@vue/compiler-ssr@3.3.4:
|
|
||||||
resolution: {integrity: sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==}
|
|
||||||
dependencies:
|
|
||||||
'@vue/compiler-dom': 3.3.4
|
|
||||||
'@vue/shared': 3.3.4
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/@vue/reactivity-transform@3.2.45:
|
/@vue/reactivity-transform@3.2.45:
|
||||||
resolution: {integrity: sha512-BHVmzYAvM7vcU5WmuYqXpwaBHjsS8T63jlKGWVtHxAHIoMIlmaMyurUSEs1Zcg46M4AYT5MtB1U274/2aNzjJQ==}
|
resolution: {integrity: sha512-BHVmzYAvM7vcU5WmuYqXpwaBHjsS8T63jlKGWVtHxAHIoMIlmaMyurUSEs1Zcg46M4AYT5MtB1U274/2aNzjJQ==}
|
||||||
|
@ -3937,43 +3872,17 @@ packages:
|
||||||
'@vue/shared': 3.2.45
|
'@vue/shared': 3.2.45
|
||||||
estree-walker: 2.0.2
|
estree-walker: 2.0.2
|
||||||
magic-string: 0.25.9
|
magic-string: 0.25.9
|
||||||
dev: true
|
|
||||||
|
|
||||||
/@vue/reactivity-transform@3.3.4:
|
|
||||||
resolution: {integrity: sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==}
|
|
||||||
dependencies:
|
|
||||||
'@babel/parser': 7.22.3
|
|
||||||
'@vue/compiler-core': 3.3.4
|
|
||||||
'@vue/shared': 3.3.4
|
|
||||||
estree-walker: 2.0.2
|
|
||||||
magic-string: 0.30.0
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/@vue/reactivity@3.2.45:
|
/@vue/reactivity@3.2.45:
|
||||||
resolution: {integrity: sha512-PRvhCcQcyEVohW0P8iQ7HDcIOXRjZfAsOds3N99X/Dzewy8TVhTCT4uXpAHfoKjVTJRA0O0K+6QNkDIZAxNi3A==}
|
resolution: {integrity: sha512-PRvhCcQcyEVohW0P8iQ7HDcIOXRjZfAsOds3N99X/Dzewy8TVhTCT4uXpAHfoKjVTJRA0O0K+6QNkDIZAxNi3A==}
|
||||||
dependencies:
|
dependencies:
|
||||||
'@vue/shared': 3.2.45
|
'@vue/shared': 3.2.45
|
||||||
dev: true
|
|
||||||
|
|
||||||
/@vue/reactivity@3.3.4:
|
|
||||||
resolution: {integrity: sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==}
|
|
||||||
dependencies:
|
|
||||||
'@vue/shared': 3.3.4
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/@vue/runtime-core@3.2.45:
|
/@vue/runtime-core@3.2.45:
|
||||||
resolution: {integrity: sha512-gzJiTA3f74cgARptqzYswmoQx0fIA+gGYBfokYVhF8YSXjWTUA2SngRzZRku2HbGbjzB6LBYSbKGIaK8IW+s0A==}
|
resolution: {integrity: sha512-gzJiTA3f74cgARptqzYswmoQx0fIA+gGYBfokYVhF8YSXjWTUA2SngRzZRku2HbGbjzB6LBYSbKGIaK8IW+s0A==}
|
||||||
dependencies:
|
dependencies:
|
||||||
'@vue/reactivity': 3.2.45
|
'@vue/reactivity': 3.2.45
|
||||||
'@vue/shared': 3.2.45
|
'@vue/shared': 3.2.45
|
||||||
dev: true
|
|
||||||
|
|
||||||
/@vue/runtime-core@3.3.4:
|
|
||||||
resolution: {integrity: sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==}
|
|
||||||
dependencies:
|
|
||||||
'@vue/reactivity': 3.3.4
|
|
||||||
'@vue/shared': 3.3.4
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/@vue/runtime-dom@3.2.45:
|
/@vue/runtime-dom@3.2.45:
|
||||||
resolution: {integrity: sha512-cy88YpfP5Ue2bDBbj75Cb4bIEZUMM/mAkDMfqDTpUYVgTf/kuQ2VQ8LebuZ8k6EudgH8pYhsGWHlY0lcxlvTwA==}
|
resolution: {integrity: sha512-cy88YpfP5Ue2bDBbj75Cb4bIEZUMM/mAkDMfqDTpUYVgTf/kuQ2VQ8LebuZ8k6EudgH8pYhsGWHlY0lcxlvTwA==}
|
||||||
|
@ -3981,15 +3890,6 @@ packages:
|
||||||
'@vue/runtime-core': 3.2.45
|
'@vue/runtime-core': 3.2.45
|
||||||
'@vue/shared': 3.2.45
|
'@vue/shared': 3.2.45
|
||||||
csstype: 2.6.21
|
csstype: 2.6.21
|
||||||
dev: true
|
|
||||||
|
|
||||||
/@vue/runtime-dom@3.3.4:
|
|
||||||
resolution: {integrity: sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==}
|
|
||||||
dependencies:
|
|
||||||
'@vue/runtime-core': 3.3.4
|
|
||||||
'@vue/shared': 3.3.4
|
|
||||||
csstype: 3.1.2
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/@vue/server-renderer@3.2.45(vue@3.2.45):
|
/@vue/server-renderer@3.2.45(vue@3.2.45):
|
||||||
resolution: {integrity: sha512-ebiMq7q24WBU1D6uhPK//2OTR1iRIyxjF5iVq/1a5I1SDMDyDu4Ts6fJaMnjrvD3MqnaiFkKQj+LKAgz5WIK3g==}
|
resolution: {integrity: sha512-ebiMq7q24WBU1D6uhPK//2OTR1iRIyxjF5iVq/1a5I1SDMDyDu4Ts6fJaMnjrvD3MqnaiFkKQj+LKAgz5WIK3g==}
|
||||||
|
@ -3999,25 +3899,9 @@ packages:
|
||||||
'@vue/compiler-ssr': 3.2.45
|
'@vue/compiler-ssr': 3.2.45
|
||||||
'@vue/shared': 3.2.45
|
'@vue/shared': 3.2.45
|
||||||
vue: 3.2.45
|
vue: 3.2.45
|
||||||
dev: true
|
|
||||||
|
|
||||||
/@vue/server-renderer@3.3.4(vue@3.3.4):
|
|
||||||
resolution: {integrity: sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==}
|
|
||||||
peerDependencies:
|
|
||||||
vue: 3.3.4
|
|
||||||
dependencies:
|
|
||||||
'@vue/compiler-ssr': 3.3.4
|
|
||||||
'@vue/shared': 3.3.4
|
|
||||||
vue: 3.3.4
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/@vue/shared@3.2.45:
|
/@vue/shared@3.2.45:
|
||||||
resolution: {integrity: sha512-Ewzq5Yhimg7pSztDV+RH1UDKBzmtqieXQlpTVm2AwraoRL/Rks96mvd8Vgi7Lj+h+TH8dv7mXD3FRZR3TUvbSg==}
|
resolution: {integrity: sha512-Ewzq5Yhimg7pSztDV+RH1UDKBzmtqieXQlpTVm2AwraoRL/Rks96mvd8Vgi7Lj+h+TH8dv7mXD3FRZR3TUvbSg==}
|
||||||
dev: true
|
|
||||||
|
|
||||||
/@vue/shared@3.3.4:
|
|
||||||
resolution: {integrity: sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/@webassemblyjs/ast@1.11.1:
|
/@webassemblyjs/ast@1.11.1:
|
||||||
resolution: {integrity: sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==}
|
resolution: {integrity: sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==}
|
||||||
|
@ -5106,7 +4990,7 @@ packages:
|
||||||
cron-parser: 4.7.1
|
cron-parser: 4.7.1
|
||||||
debuglog: 1.0.1
|
debuglog: 1.0.1
|
||||||
get-port: 5.1.1
|
get-port: 5.1.1
|
||||||
ioredis: 5.2.4
|
ioredis: 5.3.2
|
||||||
lodash: 4.17.21
|
lodash: 4.17.21
|
||||||
msgpackr: 1.8.1
|
msgpackr: 1.8.1
|
||||||
p-timeout: 3.2.0
|
p-timeout: 3.2.0
|
||||||
|
@ -6187,16 +6071,11 @@ packages:
|
||||||
|
|
||||||
/csstype@2.6.21:
|
/csstype@2.6.21:
|
||||||
resolution: {integrity: sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==}
|
resolution: {integrity: sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==}
|
||||||
dev: true
|
|
||||||
|
|
||||||
/csstype@3.1.1:
|
/csstype@3.1.1:
|
||||||
resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==}
|
resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/csstype@3.1.2:
|
|
||||||
resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/custom-event-polyfill@1.0.7:
|
/custom-event-polyfill@1.0.7:
|
||||||
resolution: {integrity: sha512-TDDkd5DkaZxZFM8p+1I3yAlvM3rSr1wbrOliG4yJiwinMZN8z/iGL7BTlDkrJcYTmgUSb4ywVCc3ZaUtOtC76w==}
|
resolution: {integrity: sha512-TDDkd5DkaZxZFM8p+1I3yAlvM3rSr1wbrOliG4yJiwinMZN8z/iGL7BTlDkrJcYTmgUSb4ywVCc3ZaUtOtC76w==}
|
||||||
dev: true
|
dev: true
|
||||||
|
@ -7549,14 +7428,14 @@ packages:
|
||||||
readable-stream: 2.3.7
|
readable-stream: 2.3.7
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/focus-trap-vue@4.0.1(focus-trap@7.2.0)(vue@3.3.4):
|
/focus-trap-vue@4.0.1(focus-trap@7.2.0)(vue@3.2.45):
|
||||||
resolution: {integrity: sha512-2iqOeoSvgq7Um6aL+255a/wXPskj6waLq2oKCa4gOnMORPo15JX7wN6J5bl1SMhMlTlkHXGSrQ9uJPJLPZDl5w==}
|
resolution: {integrity: sha512-2iqOeoSvgq7Um6aL+255a/wXPskj6waLq2oKCa4gOnMORPo15JX7wN6J5bl1SMhMlTlkHXGSrQ9uJPJLPZDl5w==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
focus-trap: ^7.0.0
|
focus-trap: ^7.0.0
|
||||||
vue: ^3.0.0
|
vue: ^3.0.0
|
||||||
dependencies:
|
dependencies:
|
||||||
focus-trap: 7.2.0
|
focus-trap: 7.2.0
|
||||||
vue: 3.3.4
|
vue: 3.2.45
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/focus-trap@7.2.0:
|
/focus-trap@7.2.0:
|
||||||
|
@ -7716,7 +7595,7 @@ packages:
|
||||||
resolution: {integrity: sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ==}
|
resolution: {integrity: sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ==}
|
||||||
engines: {node: '>= 0.10'}
|
engines: {node: '>= 0.10'}
|
||||||
dependencies:
|
dependencies:
|
||||||
graceful-fs: 4.2.10
|
graceful-fs: 4.2.11
|
||||||
through2: 2.0.5
|
through2: 2.0.5
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
@ -8621,8 +8500,8 @@ packages:
|
||||||
engines: {node: '>=0.10.0'}
|
engines: {node: '>=0.10.0'}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/ioredis@5.2.4:
|
/ioredis@5.3.2:
|
||||||
resolution: {integrity: sha512-qIpuAEt32lZJQ0XyrloCRdlEdUUNGG9i0UOk6zgzK6igyudNWqEBxfH6OlbnOOoBBvr1WB02mm8fR55CnikRng==}
|
resolution: {integrity: sha512-1DKMMzlIHM02eBBVOFQ1+AolGjs6+xEcM4PDL7NqOS6szq7H9jSaEkIUH6/a5Hl241LzW6JLSiAbNvTQjUupUA==}
|
||||||
engines: {node: '>=12.22.0'}
|
engines: {node: '>=12.22.0'}
|
||||||
dependencies:
|
dependencies:
|
||||||
'@ioredis/commands': 1.2.0
|
'@ioredis/commands': 1.2.0
|
||||||
|
@ -9795,7 +9674,7 @@ packages:
|
||||||
/jsonfile@4.0.0:
|
/jsonfile@4.0.0:
|
||||||
resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==}
|
resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==}
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
graceful-fs: 4.2.10
|
graceful-fs: 4.2.11
|
||||||
|
|
||||||
/jsonfile@5.0.0:
|
/jsonfile@5.0.0:
|
||||||
resolution: {integrity: sha512-NQRZ5CRo74MhMMC3/3r5g2k4fjodJ/wh8MxjFbCViWKFjxrnudWSY5vomh+23ZaXzAS7J3fBZIR2dV6WbmfM0w==}
|
resolution: {integrity: sha512-NQRZ5CRo74MhMMC3/3r5g2k4fjodJ/wh8MxjFbCViWKFjxrnudWSY5vomh+23ZaXzAS7J3fBZIR2dV6WbmfM0w==}
|
||||||
|
@ -9809,7 +9688,7 @@ packages:
|
||||||
dependencies:
|
dependencies:
|
||||||
universalify: 2.0.0
|
universalify: 2.0.0
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
graceful-fs: 4.2.10
|
graceful-fs: 4.2.11
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/jsonld@6.0.0:
|
/jsonld@6.0.0:
|
||||||
|
@ -10435,14 +10314,6 @@ packages:
|
||||||
resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==}
|
resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==}
|
||||||
dependencies:
|
dependencies:
|
||||||
sourcemap-codec: 1.4.8
|
sourcemap-codec: 1.4.8
|
||||||
dev: true
|
|
||||||
|
|
||||||
/magic-string@0.30.0:
|
|
||||||
resolution: {integrity: sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==}
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
dependencies:
|
|
||||||
'@jridgewell/sourcemap-codec': 1.4.15
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/mailcheck@1.1.1:
|
/mailcheck@1.1.1:
|
||||||
resolution: {integrity: sha512-3WjL8+ZDouZwKlyJBMp/4LeziLFXgleOdsYu87piGcMLqhBzCsy2QFdbtAwv757TFC/rtqd738fgJw1tFQCSgA==}
|
resolution: {integrity: sha512-3WjL8+ZDouZwKlyJBMp/4LeziLFXgleOdsYu87piGcMLqhBzCsy2QFdbtAwv757TFC/rtqd738fgJw1tFQCSgA==}
|
||||||
|
@ -12056,6 +11927,7 @@ packages:
|
||||||
nanoid: 3.3.6
|
nanoid: 3.3.6
|
||||||
picocolors: 1.0.0
|
picocolors: 1.0.0
|
||||||
source-map-js: 1.0.2
|
source-map-js: 1.0.2
|
||||||
|
dev: true
|
||||||
|
|
||||||
/postgres-array@2.0.0:
|
/postgres-array@2.0.0:
|
||||||
resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==}
|
resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==}
|
||||||
|
@ -13381,7 +13253,6 @@ packages:
|
||||||
/sourcemap-codec@1.4.8:
|
/sourcemap-codec@1.4.8:
|
||||||
resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
|
resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
|
||||||
deprecated: Please use @jridgewell/sourcemap-codec instead
|
deprecated: Please use @jridgewell/sourcemap-codec instead
|
||||||
dev: true
|
|
||||||
|
|
||||||
/sparkles@1.0.1:
|
/sparkles@1.0.1:
|
||||||
resolution: {integrity: sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==}
|
resolution: {integrity: sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==}
|
||||||
|
@ -14375,7 +14246,7 @@ packages:
|
||||||
/typedarray@0.0.6:
|
/typedarray@0.0.6:
|
||||||
resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==}
|
resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==}
|
||||||
|
|
||||||
/typeorm@0.3.11(ioredis@5.2.4)(pg@8.8.0)(ts-node@10.9.1):
|
/typeorm@0.3.11(ioredis@5.3.2)(pg@8.8.0)(ts-node@10.9.1):
|
||||||
resolution: {integrity: sha512-pzdOyWbVuz/z8Ww6gqvBW4nylsM0KLdUCDExr2gR20/x1khGSVxQkjNV/3YqliG90jrWzrknYbYscpk8yxFJVg==}
|
resolution: {integrity: sha512-pzdOyWbVuz/z8Ww6gqvBW4nylsM0KLdUCDExr2gR20/x1khGSVxQkjNV/3YqliG90jrWzrknYbYscpk8yxFJVg==}
|
||||||
engines: {node: '>= 12.9.0'}
|
engines: {node: '>= 12.9.0'}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
|
@ -14442,7 +14313,7 @@ packages:
|
||||||
debug: 4.3.4(supports-color@8.1.1)
|
debug: 4.3.4(supports-color@8.1.1)
|
||||||
dotenv: 16.0.3
|
dotenv: 16.0.3
|
||||||
glob: 7.2.3
|
glob: 7.2.3
|
||||||
ioredis: 5.2.4
|
ioredis: 5.3.2
|
||||||
js-yaml: 4.1.0
|
js-yaml: 4.1.0
|
||||||
mkdirp: 1.0.4
|
mkdirp: 1.0.4
|
||||||
pg: 8.8.0
|
pg: 8.8.0
|
||||||
|
@ -14760,7 +14631,7 @@ packages:
|
||||||
dependencies:
|
dependencies:
|
||||||
append-buffer: 1.0.2
|
append-buffer: 1.0.2
|
||||||
convert-source-map: 1.9.0
|
convert-source-map: 1.9.0
|
||||||
graceful-fs: 4.2.10
|
graceful-fs: 4.2.11
|
||||||
normalize-path: 2.1.1
|
normalize-path: 2.1.1
|
||||||
now-and-later: 2.0.1
|
now-and-later: 2.0.1
|
||||||
remove-bom-buffer: 3.0.0
|
remove-bom-buffer: 3.0.0
|
||||||
|
@ -14872,17 +14743,6 @@ packages:
|
||||||
'@vue/runtime-dom': 3.2.45
|
'@vue/runtime-dom': 3.2.45
|
||||||
'@vue/server-renderer': 3.2.45(vue@3.2.45)
|
'@vue/server-renderer': 3.2.45(vue@3.2.45)
|
||||||
'@vue/shared': 3.2.45
|
'@vue/shared': 3.2.45
|
||||||
dev: true
|
|
||||||
|
|
||||||
/vue@3.3.4:
|
|
||||||
resolution: {integrity: sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==}
|
|
||||||
dependencies:
|
|
||||||
'@vue/compiler-dom': 3.3.4
|
|
||||||
'@vue/compiler-sfc': 3.3.4
|
|
||||||
'@vue/runtime-dom': 3.3.4
|
|
||||||
'@vue/server-renderer': 3.3.4(vue@3.3.4)
|
|
||||||
'@vue/shared': 3.3.4
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/vuedraggable@4.1.0(vue@3.2.45):
|
/vuedraggable@4.1.0(vue@3.2.45):
|
||||||
resolution: {integrity: sha512-FU5HCWBmsf20GpP3eudURW3WdWTKIbEIQxh9/8GE806hydR9qZqRRxRE3RjqX7PkuLuMQG/A7n3cfj9rCEchww==}
|
resolution: {integrity: sha512-FU5HCWBmsf20GpP3eudURW3WdWTKIbEIQxh9/8GE806hydR9qZqRRxRE3RjqX7PkuLuMQG/A7n3cfj9rCEchww==}
|
||||||
|
|
28
pull_request_template.yml
Normal file
28
pull_request_template.yml
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
name: Pull Request
|
||||||
|
about: Create a pull request
|
||||||
|
title: "[PR]: "
|
||||||
|
body:
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: |
|
||||||
|
Thanks for taking the time to make Calckey better!
|
||||||
|
- type: textarea
|
||||||
|
id: about
|
||||||
|
attributes:
|
||||||
|
label: What does this PR do?
|
||||||
|
description: Please give us a brief description of what this PR does.
|
||||||
|
placeholder: Makes Calckey so amazing by...
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: checkboxes
|
||||||
|
id: terms
|
||||||
|
attributes:
|
||||||
|
label: Contribution Guidelines
|
||||||
|
description: By submitting this issue, you agree to follow our [Contribution Guidelines](https://codeberg.org/calckey/calckey/src/branch/develop/CONTRIBUTING.md)
|
||||||
|
options:
|
||||||
|
- label: I agree to follow this project's Contribution Guidelines
|
||||||
|
required: true
|
||||||
|
- label: I have made sure to test this pull request
|
||||||
|
required: true
|
||||||
|
- label: I have made sure to run `pnpm run format` before submitting this pull request
|
||||||
|
required: true
|
Loading…
Reference in a new issue