Remove unused fonts

Remove unused packages
Remove server logs page
Remove unused plugins
This commit is contained in:
marzban-dev
2025-09-09 12:22:46 +03:30
parent 04e70bca20
commit d52bca6613
22 changed files with 11 additions and 339 deletions
-73
View File
@@ -1,73 +0,0 @@
@layer base {
@font-face {
font-family: "Morabba";
src: url("/fonts/Morabba/Morabba-UltraLight.woff2");
font-weight: 200;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: "Morabba";
src: url("/fonts/Morabba/Morabba-Light.woff2");
font-weight: 300;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: "Morabba";
src: url("/fonts/Morabba/Morabba-Regular.woff2");
font-weight: 400;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: "Morabba";
src: url("/fonts/Morabba/Morabba-Medium.woff2");
font-weight: 500;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: "Morabba";
src: url("/fonts/Morabba/Morabba-SemiBold.woff2");
font-weight: 600;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: "Morabba";
src: url("/fonts/Morabba/Morabba-Bold.woff2");
font-weight: 700;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: "Morabba";
src: url("/fonts/Morabba/Morabba-ExtraBold.woff2");
font-weight: 800;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: "Morabba";
src: url("/fonts/Morabba/Morabba-Black.woff2");
font-weight: 900;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: "Morabba";
src: url("/fonts/Morabba/Morabba-Heavy.woff2");
font-weight: 1000;
font-style: normal;
font-display: swap;
}
}
-41
View File
@@ -1,41 +0,0 @@
@layer base {
@font-face {
font-family: "YekanBakh";
src: url("/fonts/YekanBakh/YekanBakh-Thin.woff");
font-weight: 100;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: "YekanBakh";
src: url("/fonts/YekanBakh/YekanBakh-Light.woff");
font-weight: 300;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: "YekanBakh";
src: url("/fonts/YekanBakh/YekanBakh-Regular.woff");
font-weight: 400;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: "YekanBakh";
src: url("/fonts/YekanBakh/YekanBakh-SemiBold.woff");
font-weight: 600;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: "YekanBakh";
src: url("/fonts/YekanBakh/YekanBakh-Bold.woff");
font-weight: 700;
font-style: normal;
font-display: swap;
}
}
-4
View File
@@ -6,8 +6,6 @@
@import "./button.comp.css";
@import "./input.comp.css";
@import "./fonts/iran-yekan-x.css";
@import "./fonts/morabba.css";
@import "./fonts/yekan-bakh.css";
:root {
/* CONTAINER */
@@ -117,8 +115,6 @@
--font-inter: "Inter", sans-serif;
--font-dmsans: "DM Sans", sans-serif;
--font-iran-yekan-x: "IRANYekanXVF", "sans-serif";
--font-yekan-bakh: "YekanBakh", "sans-serif";
--font-morabba: "Morabba", "sans-serif";
/* BREAKPOINTS */
--breakpoint-2xs: 400px;
+11 -11
View File
@@ -61,17 +61,17 @@ export default defineNuxtConfig({
},
modules: [
[
"@nuxtjs/google-fonts",
{
families: {
"DM Sans": "100..900",
Inter: "100..900",
download: true,
inject: false,
},
},
],
// [
// "@nuxtjs/google-fonts",
// {
// families: {
// "DM Sans": "100..900",
// Inter: "100..900",
// download: true,
// inject: false,
// },
// },
// ],
"@nuxt/icon",
"reka-ui/nuxt",
"@vueuse/nuxt",
-26
View File
@@ -25,7 +25,6 @@
"date-fns-jalali": "^4.1.0-0",
"fast-average-color": "^9.4.0",
"gsap": "^3.12.7",
"highlight.js": "^11.11.1",
"jalali-ts": "^8.0.0",
"motion-v": "^1.1.1",
"nuxt": "^3.15.4",
@@ -36,7 +35,6 @@
"vue": "latest",
"vue-image-zoomer": "^2.4.4",
"vue-router": "latest",
"vue-scrollto": "^2.20.0",
"vue-skeletor": "^1.0.6",
"vue3-marquee": "^4.2.2",
"vue3-persian-datetime-picker": "^1.2.2",
@@ -6555,12 +6553,6 @@
],
"license": "MIT"
},
"node_modules/bezier-easing": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/bezier-easing/-/bezier-easing-2.1.0.tgz",
"integrity": "sha512-gbIqZ/eslnUFC1tjEvtz0sgx+xTK20wDnYMIA27VA04R7w6xxXQPZDbibjA9DTWZRA2CXtwHykkVzlCaAJAZig==",
"license": "MIT"
},
"node_modules/bindings": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
@@ -9240,15 +9232,6 @@
"integrity": "sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==",
"license": "MIT"
},
"node_modules/highlight.js": {
"version": "11.11.1",
"resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.11.1.tgz",
"integrity": "sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==",
"license": "BSD-3-Clause",
"engines": {
"node": ">=12.0.0"
}
},
"node_modules/hookable": {
"version": "5.5.3",
"resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz",
@@ -16810,15 +16793,6 @@
"vue": "^3.2.0"
}
},
"node_modules/vue-scrollto": {
"version": "2.20.0",
"resolved": "https://registry.npmjs.org/vue-scrollto/-/vue-scrollto-2.20.0.tgz",
"integrity": "sha512-7i+AGKJTThZnMEkhIPgrZjyAX+fXV7/rGdg+CV283uZZwCxwiMXaBLTmIc5RTA4uwGnT+E6eJle3mXQfM2OD3A==",
"license": "MIT",
"dependencies": {
"bezier-easing": "2.1.0"
}
},
"node_modules/vue-skeletor": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/vue-skeletor/-/vue-skeletor-1.0.6.tgz",
-2
View File
@@ -33,7 +33,6 @@
"date-fns-jalali": "^4.1.0-0",
"fast-average-color": "^9.4.0",
"gsap": "^3.12.7",
"highlight.js": "^11.11.1",
"jalali-ts": "^8.0.0",
"motion-v": "^1.1.1",
"nuxt": "^3.15.4",
@@ -44,7 +43,6 @@
"vue": "latest",
"vue-image-zoomer": "^2.4.4",
"vue-router": "latest",
"vue-scrollto": "^2.20.0",
"vue-skeletor": "^1.0.6",
"vue3-marquee": "^4.2.2",
"vue3-persian-datetime-picker": "^1.2.2",
-173
View File
@@ -1,173 +0,0 @@
<script lang="ts" setup>
// import
import hljs from "highlight.js";
import json from "highlight.js/lib/languages/json";
import xml from "highlight.js/lib/languages/xml";
import "highlight.js/styles/atom-one-dark.css";
import LogDate from "~/components/server-logs/LogDate.vue";
import { useQuery } from "@tanstack/vue-query";
// meta
definePageMeta({
middleware: "check-is-debug",
layout: "none"
});
// state
const { $axios: axios } = useNuxtApp();
const { data: serverLogs, isFetching, suspense } = useQuery({
queryKey: ["server-logs"],
queryFn: async () => {
const response = await axios.get<AxiosLogType[]>("http://localhost:3000/api/server-logger");
return response.data.reverse();
},
refetchInterval: 5000,
staleTime: 0
});
await suspense();
// computed
const logIcon = (status: number) => {
if (status >= 200 && status < 300) return "bi:check-circle-fill";
return "bi:x-circle-fill";
};
// lifecycle
onMounted(() => {
hljs.registerLanguage("json", json);
hljs.registerLanguage("xml", xml);
hljs.highlightAll();
});
</script>
<template>
<div class="bg-neutral-900 w-full min-h-svh py-32">
<div class="fixed top-10 right-1/2 translate-x-1/2 flex-center" v-if="isFetching">
<Icon
name="svg-spinners:180-ring-with-bg"
class="size-12 mb-1 **:fill-neutral-500"
/>
</div>
<div class="w-full container flex flex-col gap-8">
<div
v-for="(log,index) in serverLogs"
:key="index"
class="border-2 p-5 rounded-xl log-item-animation"
:class="{
'bg-success-950/30 border-success-800' : log.status >= 200 && log.status < 300,
'bg-danger-950/30 border-danger-800' : log.status >= 400 && log.status < 600,
}"
>
<div class="flex items-center gap-4 mt-4">
<Icon
:name="logIcon(log.status)"
class="size-8 mb-1"
:class="{
'**:fill-success-500' : log.status >= 200 && log.status < 300,
'**:fill-danger-500' : log.status >= 400 && log.status < 600,
}"
/>
<h3 class="text-white font-medium text-3xl">
{{ log.url }}
</h3>
</div>
<div class="flex items-center gap-2 py-8">
<div
class="px-3 pb-1 pt-1.5 rounded-lg uppercase font-bold text-white"
:class="{
'bg-success-500' : log.status >= 200 && log.status < 300,
'bg-danger-500' : log.status >= 400 && log.status < 600,
}"
>
{{ log.method }}
</div>
<div
class="px-3 pb-1 pt-1.5 rounded-lg font-bold text-white"
:class="{
'bg-success-500' : log.status >= 200 && log.status < 300,
'bg-danger-500' : log.status >= 400 && log.status < 600,
}"
>
{{ log.status }}
</div>
<LogDate :date="log.date" />
</div>
<details class="text-white">
<summary class="cursor-pointer select-none">Details :</summary>
<div class="flex flex-col gap-2 mt-2 ml-4">
<details
v-if="log.response && typeof log.response === 'string' && (log.response.startsWith('<!DOCTYPE html>') || log.response.startsWith('<html>'))"
class="text-white"
>
<summary class="cursor-pointer select-none">Preview :</summary>
<iframe class="w-full h-[500px] bg-white" :srcdoc="log.response"></iframe>
</details>
<details v-if="log.response" class="text-white">
<summary class="cursor-pointer select-none">Response :</summary>
<pre style="tab-size: 2">
<code class="whitespace-pre-wrap">
{{ String(log.response) }}
</code>
</pre>
</details>
<details class="text-white">
<summary class="cursor-pointer select-none">Req Headers :</summary>
<pre style="tab-size: 2">
<code class="whitespace-pre-line">
{{ log.requestHeaders }}
</code>
</pre>
</details>
<details class="text-white">
<summary class="cursor-pointer select-none">Res Headers :</summary>
<pre style="tab-size: 2">
<code class="whitespace-pre-line">
{{ log.responseHeaders }}
</code>
</pre>
</details>
<details v-if="log.payload" class="text-white">
<summary class="cursor-pointer select-none">Payload :</summary>
<pre style="tab-size: 2">
<code class="whitespace-pre-line">
{{ log.payload }}
</code>
</pre>
</details>
</div>
</details>
</div>
</div>
</div>
</template>
<style>
.log-item-animation {
animation-name: log-fade-in;
animation-duration: 0.5s;
}
@keyframes log-fade-in {
from {
opacity: 0;
scale: 0.8;
}
to {
opacity: 1;
scale: 1;
}
}
</style>
-9
View File
@@ -1,9 +0,0 @@
import VueScrollTo from "vue-scrollto";
export default defineNuxtPlugin(() => {
return {
provide: {
vScrollTo: VueScrollTo,
},
};
});
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.