"My Space" Unified Achievements, Reels and Journal

This commit is contained in:
Crimekillz 2024-05-18 21:57:45 +02:00
parent 41f539ad93
commit aeef0feb99
10 changed files with 264 additions and 69 deletions

View File

@ -351,7 +351,7 @@ today: "Heute"
dayX: "{day}" dayX: "{day}"
monthX: "{month}" monthX: "{month}"
yearX: "{year}" yearX: "{year}"
pages: "Nutzer-Seiten" pages: "Journal"
integration: "Integration" integration: "Integration"
connectService: "Verbinden" connectService: "Verbinden"
disconnectService: "Trennen" disconnectService: "Trennen"
@ -372,9 +372,9 @@ basicInfo: "Grundlegende Informationen"
pinnedUsers: "Angeheftete Nutzer" pinnedUsers: "Angeheftete Nutzer"
pinnedUsersDescription: "Gib durch Leerzeichen getrennte Nutzer an, die an die \"\ pinnedUsersDescription: "Gib durch Leerzeichen getrennte Nutzer an, die an die \"\
Erkunden\"-Seite angeheftet werden sollen." Erkunden\"-Seite angeheftet werden sollen."
pinnedPages: "Angeheftete Nutzer-Seiten" pinnedPages: "Angeheftete Journal-Einträge"
pinnedPagesDescription: "Geben Sie die Dateipfade, getrennt durch Zeilenumbrüche, pinnedPagesDescription: "Geben Sie die Dateipfade, getrennt durch Zeilenumbrüche,
derjenigen Seiten ein, die Sie an die obere Seitenbegrenzung des Servers anpinnen derjenigen Journal-Einträge ein, die Sie an die obere Seitenbegrenzung des Servers anpinnen
möchten." möchten."
pinnedClipId: "ID des anzuheftenden Clips" pinnedClipId: "ID des anzuheftenden Clips"
pinnedNotes: "Angeheftete Beiträge" pinnedNotes: "Angeheftete Beiträge"
@ -582,7 +582,7 @@ scratchpadDescription: "Die Testumgebung bietet einen Bereich für AiScript-Expe
überprüfen." überprüfen."
output: "Ausgabe" output: "Ausgabe"
script: "Skript" script: "Skript"
disablePagesScript: "AiScript auf Seiten deaktivieren" disablePagesScript: "AiScript in Journal-Einträgen deaktivieren"
updateRemoteUser: "Nutzerinformationen aktualisieren" updateRemoteUser: "Nutzerinformationen aktualisieren"
deleteAllFiles: "Alle Dateien löschen" deleteAllFiles: "Alle Dateien löschen"
deleteAllFilesConfirm: "Möchtest du wirklich alle Dateien löschen?" deleteAllFilesConfirm: "Möchtest du wirklich alle Dateien löschen?"
@ -686,21 +686,21 @@ setMultipleBySeparatingWithSpace: "Trenne Elemente durch ein Leerzeichen um mehr
fileIdOrUrl: "Datei-ID oder URL" fileIdOrUrl: "Datei-ID oder URL"
behavior: "Verhalten" behavior: "Verhalten"
sample: "Beispiel" sample: "Beispiel"
abuseReports: "Meldungen" abuseReports: "Anzeigen"
reportAbuse: "Melden" reportAbuse: "Anzeigen!"
reportAbuseOf: "{name} melden" reportAbuseOf: "{name} anzeigen"
fillAbuseReportDescription: "Bitte gib zusätzliche Informationen zu dieser Meldung fillAbuseReportDescription: "Bitte gib zusätzliche Informationen zu dieser Anzeige
an. Falls es sich um einen ungewöhnlichen Beitrag handelt, gib bitte dessen URL an. Falls es sich um einen ungewöhnlichen Beitrag handelt, gib bitte dessen URL
an." an."
abuseReported: "Deine Meldung wurde versendet. Vielen Dank." abuseReported: "Deine Meldung wurde versendet. Vielen Dank."
reporter: "Melder" reporter: "Anzeiger"
reporteeOrigin: "Herkunft des Gemeldeten" reporteeOrigin: "Herkunft des Angezeigten"
reporterOrigin: "Herkunft des Meldenden" reporterOrigin: "Herkunft des Anzeigers"
forwardReport: "Meldung auch an den mit-beteiligten Server weiterleiten" forwardReport: "Anzeige auch an den mit-beteiligten Server weiterleiten"
forwardReportIsAnonymous: "Anstelle deines Nutzerkontos wird ein anonymes Systemkonto forwardReportIsAnonymous: "Anstelle deines Nutzerkontos wird ein anonymes Systemkonto
als Hinweisgeber auf dem mit-beteiligten Server angezeigt." als Hinweisgeber auf dem mit-beteiligten Server angezeigt."
send: "Senden" send: "Senden"
abuseMarkAsResolved: "Meldung als gelöst markieren" abuseMarkAsResolved: "Anzeige als gelöst markieren"
openInNewTab: "In neuem Tab öffnen" openInNewTab: "In neuem Tab öffnen"
openInSideView: "In Seitenansicht öffnen" openInSideView: "In Seitenansicht öffnen"
defaultNavigationBehaviour: "Standardnavigationsverhalten" defaultNavigationBehaviour: "Standardnavigationsverhalten"
@ -851,8 +851,8 @@ switch: "Wechseln"
noMaintainerInformationWarning: "Betreiberinformationen sind nicht konfiguriert." noMaintainerInformationWarning: "Betreiberinformationen sind nicht konfiguriert."
noBotProtectionWarning: "Schutz vor Bots ist nicht konfiguriert." noBotProtectionWarning: "Schutz vor Bots ist nicht konfiguriert."
configure: "Konfigurieren" configure: "Konfigurieren"
postToGallery: "Erstelle einen neuen Beitrag zur Bilder-Galerie" postToGallery: "Poste einen neuen Reel"
gallery: "Bilder-Galerie" gallery: "Reels"
recentPosts: "Neue Beiträge" recentPosts: "Neue Beiträge"
popularPosts: "Beliebte Beiträge" popularPosts: "Beliebte Beiträge"
shareWithNote: "Mit Beitrag teilen" shareWithNote: "Mit Beitrag teilen"
@ -947,7 +947,7 @@ file: "Datei"
recentNHours: "Die letzten {n} Stunden" recentNHours: "Die letzten {n} Stunden"
recentNDays: "Die letzten {n} Tage" recentNDays: "Die letzten {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 Anzeigen vor."
recommended: "Favoriten" recommended: "Favoriten"
check: "Kontrolle" check: "Kontrolle"
driveCapOverrideLabel: "Die Cloud-Drive-Kapazität dieses Nutzers verändern" driveCapOverrideLabel: "Die Cloud-Drive-Kapazität dieses Nutzers verändern"
@ -1052,8 +1052,8 @@ _forgotPassword:
contactAdmin: "Dieser Server unterstützt keine Verwendung von Email-Adressen. Kontaktiere contactAdmin: "Dieser Server unterstützt keine Verwendung von Email-Adressen. Kontaktiere
bitte den Server-Administrator, um dein Passwort zurücksetzen zu lassen." bitte den Server-Administrator, um dein Passwort zurücksetzen zu lassen."
_gallery: _gallery:
my: "Meine Bilder-Galerie" my: "Meine Reels"
liked: "Mit \"Gefällt mir\" markierte Beiträge" liked: "Mit \"Gefällt mir\" markierte Reels"
like: "Gefällt mir" like: "Gefällt mir"
unlike: "\"Gefällt mir\" entfernen" unlike: "\"Gefällt mir\" entfernen"
_email: _email:
@ -1614,33 +1614,33 @@ _timelines:
global: "Global-TL" global: "Global-TL"
recommended: Admin-Favoriten recommended: Admin-Favoriten
_pages: _pages:
newPage: "Neue Seite erstellen" newPage: "Journal-Eintrag erstellen"
editPage: "Seite bearbeiten" editPage: "Journal bearbeiten"
readPage: "Quelltextansicht" readPage: "Quelltextansicht"
created: "Seite erfolgreich erstellt" created: "Journal-Eintrag erfolgreich erstellt"
updated: "Seite erfolgreich aktualisiert" updated: "Journal-Eintrag erfolgreich aktualisiert"
deleted: "Seite erfolgreich gelöscht" deleted: "Journal-Eintrag erfolgreich gelöscht"
pageSetting: "Seiteneinstellungen" pageSetting: "Journal-Einstellungen"
nameAlreadyExists: "Die angegebene Seiten-URL existiert bereits" nameAlreadyExists: "Die angegebene Journal-URL existiert bereits"
invalidNameTitle: "Die angegebene Seiten-URL ist ungültig" invalidNameTitle: "Die angegebene Journal-URL ist ungültig"
invalidNameText: "Überprüfe, ob der Seitentitel nicht leer ist" invalidNameText: "Überprüfe, ob der Journaltitel nicht leer ist"
editThisPage: "Diese Seite bearbeiten" editThisPage: "Dieses Journal bearbeiten"
viewSource: "Quelltext anzeigen" viewSource: "Quelltext anzeigen"
viewPage: "Seite anschauen" viewPage: "Journal anschauen"
like: "Gefällt mir" like: "Gefällt mir"
unlike: "\"Gefällt mir\" entfernen" unlike: "\"Gefällt mir\" entfernen"
my: "Meine Nutzer-Seiten" my: "Mein Journal"
liked: "Nutzer-Seiten, die mir gefallen" liked: "Journals, die mir gefallen"
featured: "Beliebt" featured: "Beliebt"
inspector: "Inspektor" inspector: "Inspektor"
contents: "Inhalte" contents: "Inhalte"
content: "Seitenblock" content: "Journalblock"
variables: "Variablen" variables: "Variablen"
title: "Titel" title: "Titel"
url: "Nutzer-Seiten-URL" url: "Nutzer-Journal-URL"
summary: "Zusammenfassung" summary: "Zusammenfassung"
alignCenter: "Zentrieren" alignCenter: "Zentrieren"
hideTitleWhenPinned: "Nutzer-Seitentitel wenn angeheftet ausblenden" hideTitleWhenPinned: "Journaltitel wenn angeheftet ausblenden"
font: "Schriftart" font: "Schriftart"
fontSerif: "Serif" fontSerif: "Serif"
fontSansSerif: "sans-serif" fontSansSerif: "sans-serif"
@ -1902,7 +1902,7 @@ _pages:
stringArray: "Textliste" stringArray: "Textliste"
emptySlot: "Leerer Slot" emptySlot: "Leerer Slot"
enviromentVariables: "Umgebungsvariable" enviromentVariables: "Umgebungsvariable"
pageVariables: "Seitenelemente" pageVariables: "Journalelemente"
argVariables: "Eingabeslots" argVariables: "Eingabeslots"
_relayStatus: _relayStatus:
requesting: "Ausstehend" requesting: "Ausstehend"
@ -2205,6 +2205,7 @@ youHaveUnreadAnnouncements: Du hast ungelesene Bekanntmachungen
donationLink: Link zur Spendenseite donationLink: Link zur Spendenseite
neverShow: Nicht mehr anzeigen neverShow: Nicht mehr anzeigen
remindMeLater: Vielleicht später remindMeLater: Vielleicht später
space: "Space"
removeQuote: Zitat entfernen removeQuote: Zitat entfernen
removeRecipient: Empfänger entfernen removeRecipient: Empfänger entfernen
removeMember: Mitglied entfernen removeMember: Mitglied entfernen

View File

@ -375,7 +375,7 @@ today: "Today"
dayX: "{day}" dayX: "{day}"
monthX: "{month}" monthX: "{month}"
yearX: "{year}" yearX: "{year}"
pages: "Pages" pages: "Journal"
integration: "Integrations" integration: "Integrations"
connectService: "Connect" connectService: "Connect"
disconnectService: "Disconnect" disconnectService: "Disconnect"
@ -397,8 +397,8 @@ basicInfo: "Basic info"
pinnedUsers: "Pinned users" pinnedUsers: "Pinned users"
pinnedUsersDescription: "List usernames separated by line breaks to be pinned in the pinnedUsersDescription: "List usernames separated by line breaks to be pinned in the
\"Explore\" tab." \"Explore\" tab."
pinnedPages: "Pinned Pages" pinnedPages: "Pinned Journal entries"
pinnedPagesDescription: "Enter the paths of the Pages you want to pin to the top page pinnedPagesDescription: "Enter the paths of the Journal entries you want to pin to the top page
of this server, separated by line breaks." of this server, separated by line breaks."
pinnedClipId: "ID of the clip to pin" pinnedClipId: "ID of the clip to pin"
pinnedNotes: "Pinned posts" pinnedNotes: "Pinned posts"
@ -608,7 +608,7 @@ scratchpadDescription: "The scratchpad provides an environment for AiScript expe
it." it."
output: "Output" output: "Output"
script: "Script" script: "Script"
disablePagesScript: "Disable AiScript on Pages" disablePagesScript: "Disable AiScript in Journal entries"
expandOnNoteClick: "Open post on click" expandOnNoteClick: "Open post on click"
expandOnNoteClickDesc: "If disabled, you can still open posts in the right-click menu expandOnNoteClickDesc: "If disabled, you can still open posts in the right-click menu
or by clicking the timestamp." or by clicking the timestamp."
@ -881,8 +881,8 @@ switch: "Switch"
noMaintainerInformationWarning: "Maintainer information is not configured." noMaintainerInformationWarning: "Maintainer information is not configured."
noBotProtectionWarning: "Bot protection is not configured." noBotProtectionWarning: "Bot protection is not configured."
configure: "Configure" configure: "Configure"
postToGallery: "Create new gallery post" postToGallery: "Create new reel"
gallery: "Gallery" gallery: "Reel"
recentPosts: "Recent pages" recentPosts: "Recent pages"
popularPosts: "Popular pages" popularPosts: "Popular pages"
shareWithNote: "Share with post" shareWithNote: "Share with post"
@ -1142,6 +1142,7 @@ biteBack: "Chomp back"
bittenBack: "Chomped back" bittenBack: "Chomped back"
bitYou: "chomped you" bitYou: "chomped you"
bitYouBack: "chomped you back" bitYouBack: "chomped you back"
space: "Space"
achievements: "Achievements" achievements: "Achievements"
_achievements: _achievements:
earnedAt: "Earn date and time" earnedAt: "Earn date and time"
@ -1407,8 +1408,8 @@ _forgotPassword:
contactAdmin: "This server does not support using email addresses, please contact contactAdmin: "This server does not support using email addresses, please contact
the server administrator to reset your password instead." the server administrator to reset your password instead."
_gallery: _gallery:
my: "My Gallery" my: "My Reels"
liked: "Liked Posts" liked: "Liked Reels"
like: "Like" like: "Like"
unlike: "Remove like" unlike: "Remove like"
_email: _email:
@ -2007,33 +2008,33 @@ _timelines:
social: "Social" social: "Social"
global: "Global" global: "Global"
_pages: _pages:
newPage: "Create a new Page" newPage: "Create a Journal entry"
editPage: "Edit this Page" editPage: "Edit this Journal entry"
readPage: "Viewing this Page's source" readPage: "Viewing this Journal's source"
created: "Page successfully created" created: "Journal entry successfully created"
updated: "Page successfully edited" updated: "Journal entry successfully edited"
deleted: "Page successfully deleted" deleted: "Journal entry successfully deleted"
pageSetting: "Page settings" pageSetting: "Journal settings"
nameAlreadyExists: "The specified Page URL already exists" nameAlreadyExists: "The specified Journal URL already exists"
invalidNameTitle: "The specified Page URL is invalid" invalidNameTitle: "The specified Journal URL is invalid"
invalidNameText: "Make sure the Page title is not empty" invalidNameText: "Make sure the Journal title is not empty"
editThisPage: "Edit this Page" editThisPage: "Edit this Journal entry"
viewSource: "View source" viewSource: "View source"
viewPage: "View your Pages" viewPage: "View your Journal"
like: "Like" like: "Like"
unlike: "Remove like" unlike: "Remove like"
my: "My Pages" my: "My Journal"
liked: "Liked Pages" liked: "Liked Journals"
featured: "Popular" featured: "Popular"
inspector: "Inspector" inspector: "Inspector"
contents: "Content" contents: "Content"
content: "Page block" content: "Journal block"
variables: "Variables" variables: "Variables"
title: "Title" title: "Title"
url: "Page URL" url: "Journal URL"
summary: "Page summary" summary: "Journal summary"
alignCenter: "Center elements" alignCenter: "Center elements"
hideTitleWhenPinned: "Hide Page title when pinned to profile" hideTitleWhenPinned: "Hide Journal title when pinned to profile"
font: "Font" font: "Font"
fontSerif: "Serif" fontSerif: "Serif"
fontSansSerif: "Sans Serif" fontSansSerif: "Sans Serif"
@ -2294,7 +2295,7 @@ _pages:
stringArray: "Text list" stringArray: "Text list"
emptySlot: "Empty slot" emptySlot: "Empty slot"
enviromentVariables: "Environment variables" enviromentVariables: "Environment variables"
pageVariables: "Page variables" pageVariables: "Journal variables"
argVariables: "Input slots" argVariables: "Input slots"
_relayStatus: _relayStatus:
requesting: "Pending" requesting: "Pending"

View File

@ -793,8 +793,8 @@ switch: "切り替え"
noMaintainerInformationWarning: "管理者情報が設定されていません。" noMaintainerInformationWarning: "管理者情報が設定されていません。"
noBotProtectionWarning: "Botプロテクションが設定されていません。" noBotProtectionWarning: "Botプロテクションが設定されていません。"
configure: "設定する" configure: "設定する"
postToGallery: "ギャラリーへ投稿" postToGallery: "新しい Reel を作成する"
gallery: "ギャラリー" gallery: "Reel"
recentPosts: "最近の投稿" recentPosts: "最近の投稿"
popularPosts: "人気の投稿" popularPosts: "人気の投稿"
shareWithNote: "投稿で共有" shareWithNote: "投稿で共有"
@ -988,6 +988,7 @@ showWithSparkles: "タイトルをキラキラさせる"
youHaveUnreadAnnouncements: "未読のお知らせがあります" youHaveUnreadAnnouncements: "未読のお知らせがあります"
neverShow: "今後表示しない" neverShow: "今後表示しない"
remindMeLater: "また後で" remindMeLater: "また後で"
space: "スペース"
achievements: "実績" achievements: "実績"
_achievements: _achievements:
@ -1242,8 +1243,8 @@ _forgotPassword:
ifNoEmail: "メールアドレスを登録していない場合は、管理者までお問い合わせください。" ifNoEmail: "メールアドレスを登録していない場合は、管理者までお問い合わせください。"
contactAdmin: "このインスタンスではメールアドレスの登録がサポートされていないため、パスワードリセットを行う場合は管理者までお問い合わせください。" contactAdmin: "このインスタンスではメールアドレスの登録がサポートされていないため、パスワードリセットを行う場合は管理者までお問い合わせください。"
_gallery: _gallery:
my: "自分の投稿" my: "私の Reels"
liked: "いいねした投稿" liked: "好きな Reel"
like: "いいね!" like: "いいね!"
unlike: "いいね解除" unlike: "いいね解除"
_email: _email:

View File

@ -37,7 +37,7 @@
import { userName } from "@/filters/user"; import { userName } from "@/filters/user";
import { ui } from "@/config"; import { ui } from "@/config";
defineProps<{ const props = defineProps<{
page: any; page: any;
}>(); }>();
</script> </script>

View File

@ -71,6 +71,12 @@ export const navbarItemDef = reactive({
show: computed(() => $i != null), show: computed(() => $i != null),
to: "/my/achievements", to: "/my/achievements",
}, },
space: {
title: "space",
icon: "ph-rocket-launch ph-bold ph-lg",
show: computed(() => $i != null),
to: "/my/space",
},
ui: { ui: {
title: "switchUi", title: "switchUi",
icon: "ph-layout ph-bold ph-lg", icon: "ph-layout ph-bold ph-lg",

View File

@ -127,7 +127,7 @@ async function del() {
await os.apiWithDialog("gallery/posts/delete", { await os.apiWithDialog("gallery/posts/delete", {
postId: props.postId, postId: props.postId,
}); });
router.push("/gallery"); router.push("/my/space");
} }
watch( watch(

View File

@ -0,0 +1,180 @@
<template>
<MkStickyContainer>
<template #header>
<MkPageHeader
v-model:tab="tab"
:actions="headerActions"
:tabs="headerTabs" />
</template>
<div>
<MkSpacer :content-max="1200">
<swiper
:round-lengths="true"
:touch-angle="25"
:threshold="10"
:centeredSlides="true"
:modules="[Virtual]"
:space-between="20"
:virtual="true"
:allow-touch-move="
defaultStore.state.swipeOnMobile &&
(deviceKind !== 'desktop' ||
defaultStore.state.swipeOnDesktop)
"
@swiper="setSwiperRef"
@slide-change="onSlideChange"
>
<swiper-slide>
<div class="_content yweeujhr achievements">
<XAchievements v-if="tab === 'achievements'" :user="$i"/>
</div>
</swiper-slide>
<swiper-slide>
<div class="_content yweeujhr reels">
<div class="buttoncontainer">
<MkButton class="new primary" @click="createReel()"
><i class="ph-plus ph-bold ph-lg"></i>
{{ i18n.ts.postToGallery }}</MkButton
>
</div>
<XGallery v-if="tab === 'reels'" :user="$i" />
</div>
</swiper-slide>
<swiper-slide>
<div class="_content yweeujhr journal">
<div class="buttoncontainer">
<MkButton class="new primary" @click="createJournal()"
><i class="ph-plus ph-bold ph-lg"></i>
{{ i18n.ts._pages.newPage }}</MkButton
>
</div>
<XPages v-if="tab === 'journal'" :user="$i" />
</div>
</swiper-slide>
</swiper>
</MkSpacer>
</div>
</MkStickyContainer>
</template>
<script lang="ts" setup>
import { defineAsyncComponent, ref, onMounted, onActivated, watch } from 'vue';
import { Virtual } from "swiper/modules";
import { Swiper, SwiperSlide } from "swiper/vue";
import MkButton from "@/components/MkButton.vue";
import { useRouter } from "@/router";
import { i18n } from '@/i18n';
import { definePageMetadata } from '@/scripts/page-metadata';
import { $i } from "@/account";
import { deviceKind } from "@/scripts/device-kind";
import { defaultStore } from "@/store";
import "swiper/scss";
import "swiper/scss/virtual";
definePageMetadata({
title: i18n.ts.space,
icon: 'ph-rocket-launch ph-bold ph-lg',
});
const router = useRouter();
const XAchievements = defineAsyncComponent(() => import('../user/achievements.vue'));
const XPages = defineAsyncComponent(() => import("../user/pages.vue"));
const XGallery = defineAsyncComponent(() => import("../user/gallery.vue"));
const tabs = ["achievements", "reels", "journal"];
let tab = $ref(tabs[0]);
watch($$(tab), () => syncSlide(tabs.indexOf(tab)));
const MOBILE_THRESHOLD = 500;
const isMobile = ref(
deviceKind === "smartphone" || window.innerWidth <= MOBILE_THRESHOLD,
);
window.addEventListener("resize", () => {
isMobile.value =
deviceKind === "smartphone" || window.innerWidth <= MOBILE_THRESHOLD;
});
const headerActions = $computed(() => []);
const headerTabs = $computed(() => [
{
key: "achievements",
title: i18n.ts.achievements,
icon: "ph-medal-military ph-bold ph-lg",
},
{
key: "reels",
title: i18n.ts._gallery.my,
icon: "ph-film-strip ph-bold ph-lg",
},
{
key: "journal",
title: i18n.ts._pages.my,
icon: "ph-file-text ph-bold ph-lg",
},
]);
let swiperRef = null;
function setSwiperRef(swiper) {
swiperRef = swiper;
syncSlide(tabs.indexOf(tab));
}
function onSlideChange() {
tab = tabs[swiperRef.activeIndex];
}
function syncSlide(index) {
swiperRef.slideTo(index);
}
onMounted(() => {
syncSlide(tabs.indexOf(swiperRef.activeIndex));
});
onActivated(() => {
syncSlide(tabs.indexOf(tab));
});
function createJournal() {
router.push("/pages/new");
}
function createReel() {
router.push("/gallery/new");
}
</script>
<style lang="scss" scoped>
.yweeujhr {
> .buttoncontainer {
display: grid;
justify-content: center;
margin-bottom: 1rem;
}
&.my .ckltabjg:first-child {
margin-top: 16px;
}
.ckltabjg:not(:last-child) {
margin-bottom: 8px;
}
@media (min-width: 500px) {
.ckltabjg:not(:last-child) {
margin-bottom: 16px;
}
}
.vfpdbgtk {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
grid-gap: 12px;
margin: 0 var(--margin);
}
}
</style>

View File

@ -5,6 +5,7 @@
v-model:tab="tab" v-model:tab="tab"
:actions="headerActions" :actions="headerActions"
:tabs="headerTabs" :tabs="headerTabs"
:display-back-button="true"
/></template> /></template>
<MkSpacer :content-max="700"> <MkSpacer :content-max="700">
<div class="jqqmcavi"> <div class="jqqmcavi">

View File

@ -655,6 +655,11 @@ export const routes = [
component: page(() => import("./pages/my-antennas/edit.vue")), component: page(() => import("./pages/my-antennas/edit.vue")),
loginRequired: true, loginRequired: true,
}, },
{
path: "/my/space",
component: page(() => import("./pages/my-space/index.vue")),
loginRequired: true,
},
{ {
path: "/news", path: "/news",
component: page(() => import("./pages/news.vue")), component: page(() => import("./pages/news.vue")),

View File

@ -17,7 +17,7 @@ const menuOptions = [
"news", "news",
"discover", "discover",
"-", "-",
"achievements", "space",
"drive" "drive"
]; ];