Compare commits

...

8 Commits

Author SHA1 Message Date
4704fe81e9 feat: 添加AI摘要功能并优化博客详情页布局 2026-01-27 14:51:44 +08:00
ac4f8dac82 feat: 添加NProgress加载进度条和优化UI样式
添加NProgress依赖并集成到路由中,实现页面切换时的加载进度条
优化友链页面、博客分类和文章列表的UI样式
调整登录按钮和图片懒加载的显示效果
新增标签随机颜色功能,提升视觉体验
2026-01-15 17:17:40 +08:00
d00c18d38a feat: 添加博客主题样式文件 2026-01-13 09:44:37 +08:00
8a3cc98330 feat: 实现友链页面功能并优化其他页面
添加友链页面表单和展示功能,包括申请友链和显示友链列表
优化首页搜索框自动聚焦和画廊页面图片样式
修复博客列表分页器显示条件
2026-01-07 16:06:44 +08:00
e924fcca2b feat: 添加博客分类和分页功能
为博客页面添加分类筛选功能,支持按分类查看文章
实现分页功能,优化文章列表展示
调整页面布局和样式,增加交互效果
2026-01-01 16:43:18 +08:00
a9d3854a55 移除未使用的依赖和组件,优化博客列表和详情页样式,调整菜单项和颜色配置 2026-01-01 10:20:49 +08:00
d36526b368 添加返回顶部组件,优化博客详情页布局和样式,更新Markdown编辑器配置和依赖声明 2025-12-30 21:00:01 +08:00
79192df508 添加博客模块,支持Markdown渲染和文章详情页,优化图片懒加载和瀑布流布局 2025-12-30 14:31:04 +08:00
48 changed files with 3733 additions and 116 deletions

1
auto-imports.d.ts vendored
View File

@ -70,7 +70,6 @@ declare global {
const useCssVars: typeof import('vue')['useCssVars'] const useCssVars: typeof import('vue')['useCssVars']
const useDialog: typeof import('naive-ui')['useDialog'] const useDialog: typeof import('naive-ui')['useDialog']
const useId: typeof import('vue')['useId'] const useId: typeof import('vue')['useId']
const useLink: typeof import('vue-router')['useLink']
const useLoadingBar: typeof import('naive-ui')['useLoadingBar'] const useLoadingBar: typeof import('naive-ui')['useLoadingBar']
const useMessage: typeof import('naive-ui')['useMessage'] const useMessage: typeof import('naive-ui')['useMessage']
const useModel: typeof import('vue')['useModel'] const useModel: typeof import('vue')['useModel']

7
components.d.ts vendored
View File

@ -9,6 +9,7 @@ export {}
declare module 'vue' { declare module 'vue' {
export interface GlobalComponents { export interface GlobalComponents {
Aplayer: typeof import('./src/components/aplayer.vue')['default'] Aplayer: typeof import('./src/components/aplayer.vue')['default']
BackTop: typeof import('./src/components/backTop.vue')['default']
ContextMenu: typeof import('./src/components/contextMenu.vue')['default'] ContextMenu: typeof import('./src/components/contextMenu.vue')['default']
Gallery: typeof import('./src/components/Gallery.vue')['default'] Gallery: typeof import('./src/components/Gallery.vue')['default']
HomeSide: typeof import('./src/components/homeSide.vue')['default'] HomeSide: typeof import('./src/components/homeSide.vue')['default']
@ -16,8 +17,12 @@ declare module 'vue' {
Mask: typeof import('./src/components/mask.vue')['default'] Mask: typeof import('./src/components/mask.vue')['default']
MenuH: typeof import('./src/components/menuH.vue')['default'] MenuH: typeof import('./src/components/menuH.vue')['default']
NAvatar: typeof import('naive-ui')['NAvatar'] NAvatar: typeof import('naive-ui')['NAvatar']
NBreadcrumb: typeof import('naive-ui')['NBreadcrumb']
NBreadcrumbItem: typeof import('naive-ui')['NBreadcrumbItem']
NButton: typeof import('naive-ui')['NButton'] NButton: typeof import('naive-ui')['NButton']
NCard: typeof import('naive-ui')['NCard'] NCard: typeof import('naive-ui')['NCard']
NCollapse: typeof import('naive-ui')['NCollapse']
NCollapseItem: typeof import('naive-ui')['NCollapseItem']
NConfigProvider: typeof import('naive-ui')['NConfigProvider'] NConfigProvider: typeof import('naive-ui')['NConfigProvider']
NDialogProvider: typeof import('naive-ui')['NDialogProvider'] NDialogProvider: typeof import('naive-ui')['NDialogProvider']
NDropdown: typeof import('naive-ui')['NDropdown'] NDropdown: typeof import('naive-ui')['NDropdown']
@ -32,10 +37,12 @@ declare module 'vue' {
NLayoutFooter: typeof import('naive-ui')['NLayoutFooter'] NLayoutFooter: typeof import('naive-ui')['NLayoutFooter']
NLayoutHeader: typeof import('naive-ui')['NLayoutHeader'] NLayoutHeader: typeof import('naive-ui')['NLayoutHeader']
NLayoutSider: typeof import('naive-ui')['NLayoutSider'] NLayoutSider: typeof import('naive-ui')['NLayoutSider']
NLoadingBarProvider: typeof import('naive-ui')['NLoadingBarProvider']
NMenu: typeof import('naive-ui')['NMenu'] NMenu: typeof import('naive-ui')['NMenu']
NMessageProvider: typeof import('naive-ui')['NMessageProvider'] NMessageProvider: typeof import('naive-ui')['NMessageProvider']
NModal: typeof import('naive-ui')['NModal'] NModal: typeof import('naive-ui')['NModal']
NModalProvider: typeof import('naive-ui')['NModalProvider'] NModalProvider: typeof import('naive-ui')['NModalProvider']
NPagination: typeof import('naive-ui')['NPagination']
NScrollbar: typeof import('naive-ui')['NScrollbar'] NScrollbar: typeof import('naive-ui')['NScrollbar']
NSelect: typeof import('naive-ui')['NSelect'] NSelect: typeof import('naive-ui')['NSelect']
NTabPane: typeof import('naive-ui')['NTabPane'] NTabPane: typeof import('naive-ui')['NTabPane']

3
extra.d.ts vendored
View File

@ -3,4 +3,5 @@ declare module "vue3-video-play";
declare module "vue3-masonry-plus"; declare module "vue3-masonry-plus";
declare module "vite"; declare module "vite";
declare module "vue-devui/tag"; declare module "vue-devui/tag";
declare module "vue-infinite-scroll"; declare module "es-toolkit";
declare module "nprogress";

View File

@ -5,7 +5,7 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<link rel="icon" href="/favicon.ico"> <link rel="icon" href="/favicon.ico">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="这是柚子的网站,做一些分享类的功能"/> <meta name="description" content="这是柚子的网站,做一些分享类的功能"/>
<title>柚子の网站</title> <title>柚子の网站</title>
</head> </head>
@ -17,8 +17,6 @@
<script type="text/javascript"> <script type="text/javascript">
! function (e, t, a) { ! function (e, t, a) {
function r() { function r() {
for (var e = 0; e < s.length; e++) s[e].alpha <= 0 ? (t.body.removeChild(s[e].el), s.splice(e, 1)) : (s[ for (var e = 0; e < s.length; e++) s[e].alpha <= 0 ? (t.body.removeChild(s[e].el), s.splice(e, 1)) : (s[
e].y--, s[e].scale += .004, s[e].alpha -= .013, s[e].el.style.cssText = "left:" + s[e].x + e].y--, s[e].scale += .004, s[e].alpha -= .013, s[e].el.style.cssText = "left:" + s[e].x +

View File

@ -8,7 +8,7 @@
}, },
"scripts": { "scripts": {
"dev": "vite", "dev": "vite",
"build": "run-p type-check \"build-only {@}\" --", "b": "run-p type-check \"build-only {@}\" --",
"preview": "vite preview", "preview": "vite preview",
"build-only": "vite build", "build-only": "vite build",
"type-check": "vue-tsc --build" "type-check": "vue-tsc --build"
@ -21,18 +21,17 @@
"axios": "^1.11.0", "axios": "^1.11.0",
"es-toolkit": "^1.39.8", "es-toolkit": "^1.39.8",
"less": "^4.4.0", "less": "^4.4.0",
"md-editor-v3": "^6.3.0",
"pinia": "^3.0.3", "pinia": "^3.0.3",
"qweather-icons": "^1.7.0", "qweather-icons": "^1.7.0",
"unocss": "^66.3.3", "unocss": "^66.3.3",
"unplugin-auto-import": "^19.3.0", "unplugin-auto-import": "^19.3.0",
"unplugin-vue-components": "^28.8.0", "unplugin-vue-components": "^28.8.0",
"unplugin-vue-router": "^0.15.0", "unplugin-vue-router": "^0.15.0",
"v-infinite-scroll": "^1.0.4",
"vite-svg-loader": "^5.1.0", "vite-svg-loader": "^5.1.0",
"vue": "^3.6.0-alpha.2", "vue": "^3.6.0-alpha.2",
"vue-router": "^4.5.1", "vue-router": "^4.5.1",
"vue3-cookies": "^1.0.6", "vue3-cookies": "^1.0.6"
"vue3-video-play": "^1.3.2"
}, },
"devDependencies": { "devDependencies": {
"@tsconfig/node22": "^22.0.2", "@tsconfig/node22": "^22.0.2",
@ -41,7 +40,8 @@
"@vue/tsconfig": "^0.7.0", "@vue/tsconfig": "^0.7.0",
"naive-ui": "^2.43.2", "naive-ui": "^2.43.2",
"npm-run-all2": "^8.0.4", "npm-run-all2": "^8.0.4",
"typescript": "~5.8.0", "nprogress": "^0.2.0",
"typescript": "^5.9.3",
"vfonts": "^0.0.3", "vfonts": "^0.0.3",
"vite": "^7.0.6", "vite": "^7.0.6",
"vite-plugin-vue-devtools": "^8.0.0", "vite-plugin-vue-devtools": "^8.0.0",

View File

@ -1,5 +1,6 @@
<template> <template>
<n-config-provider :theme-overrides="themeOverrides"> <n-config-provider :theme-overrides="themeOverrides">
<n-loading-bar-provider>
<n-message-provider> <n-message-provider>
<n-dialog-provider> <n-dialog-provider>
<n-modal-provider> <n-modal-provider>
@ -9,19 +10,23 @@
</n-modal-provider> </n-modal-provider>
</n-dialog-provider> </n-dialog-provider>
</n-message-provider> </n-message-provider>
</n-config-provider> </n-loading-bar-provider>
</n-config-provider>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import themeOverrides from '@/util/theme.ts'; import themeOverrides from '@/util/theme.ts';
import layIndex from './Index.vue'; import layIndex from './Index.vue';
// 空白项目入口 // 空白项目入口
const logStatus = $store.log.useLogStore() const logStatus = $store.log.useLogStore()
// 全局禁用右键菜单 // 全局禁用右键菜单
document.oncontextmenu = function () { document.oncontextmenu = function () {
return false; return false;
}; };
onMounted(() => { onMounted(() => {
if ($cookies.get('userinfo')) logStatus.setIsLogin(true) if ($cookies.get('userinfo')) logStatus.setIsLogin(true)
}) })
</script> </script>

View File

@ -32,6 +32,7 @@
</n-modal> </n-modal>
<back-top />
</template> </template>
<script setup lang="ts"> <script setup lang="ts">

24
src/api/blog/index.ts Normal file
View File

@ -0,0 +1,24 @@
import request from "@/util/request";
//getBlogList
export function getBlogList(params: any) {
return request({
url: "/art",
method: "get",
params
});
}
//getBlogDetail
export function getBlogDetail(id: string) {
return request({
url: `/art/${id}`,
method: "get",
});
}
//getCateList
export function getCateList() {
return request({
url: `/art/category`,
method: "get",
});
}

View File

@ -24,3 +24,4 @@ export function putShare(data: Record<string, string>) {
data, data,
}); });
} }

17
src/api/plink/index.ts Normal file
View File

@ -0,0 +1,17 @@
import request from "@/util/request";
// getPlinkList
export function getPlinkList() {
return request({
url: "/plink?sh=1",
method: "get",
});
}
// addPlink
export function addPlink(data: any) {
return request({
url: "/plink",
method: "post",
data
});
}

View File

@ -10,3 +10,13 @@
.n-scrollbar-rail__scrollbar { .n-scrollbar-rail__scrollbar {
background-color: #f6cbe770 !important; background-color: #f6cbe770 !important;
} }
/* 添加渐变背景色 */
#nprogress .bar {
background: linear-gradient(to right, #ec66ab, #f78c6c, #7ed6df);
}
/* 添加平滑过渡效果 */
#nprogress .bar {
transition: width 0.2s ease-in-out;
}

View File

@ -1,2 +1,5 @@
@import "./base.less";
@import "qweather-icons/font/qweather-icons.css"; @import "qweather-icons/font/qweather-icons.css";
@import 'md-editor-v3/lib/preview.css';
@import "nprogress/nprogress.css";
@import "./base.less";

2118
src/assets/myblog.less Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,60 @@
<template>
<div id="goTop">
<div class="icons" v-show="visiable" @click="handleScrollTop">
<n-icon>
<icon-backtop width="60" height="60" />
</n-icon>
</div>
</div>
</template>
<script setup lang="ts">
import { throttle } from 'es-toolkit/function';
const scrollTop: any = ref(null)
const visiable = ref(false)
const scrollElement: any = document.querySelector('.n-scrollbar .n-scrollbar-container')
const handleScroll = throttle(() => {
scrollTop.value = scrollElement.scrollTop
visiable.value = scrollTop.value > 200;
},1000)
function handleScrollTop() {
let timer: any = null;
cancelAnimationFrame(timer);
timer = requestAnimationFrame(function fn() {
if (scrollTop.value > 0) {
scrollTop.value -= 50;
scrollElement.scrollTop = document.documentElement.scrollTop = scrollTop.value;
timer = requestAnimationFrame(fn);
} else {
cancelAnimationFrame(timer);
visiable.value = false;
}
});
}
onMounted(() => {
scrollElement?.addEventListener('scroll', handleScroll);
})
onBeforeMount(() => {
window.removeEventListener('scroll', handleScroll);
})
</script>
<style scoped lang="less">
.icons {
position: fixed;
right: 60px;
bottom: 40px;
border-radius: 50%;
z-index: 9999999;
}
:deep(.n-icon svg) {
width: 30px;
height: 30px;
}
</style>

View File

@ -4,7 +4,7 @@
<!-- <div class="dt-card mt-10 bg-white"> --> <!-- <div class="dt-card mt-10 bg-white"> -->
<template #header> <template #header>
<div class="flex items-center"> <div class="flex items-center">
<icon-time class="w-5 mr-2"></icon-time> <icon-time class="w-5 mr-2 text-primary"></icon-time>
时间日期 时间日期
</div> </div>
</template> </template>
@ -24,7 +24,7 @@
<n-card embedded class="mt-4 shadow"> <n-card embedded class="mt-4 shadow">
<template #header> <template #header>
<div class="flex items-center"> <div class="flex items-center">
<icon-news class="w-5 mr-2"></icon-news> <icon-news class="w-5 mr-2 text-primary"></icon-news>
百度新闻 百度新闻
</div> </div>
</template> </template>
@ -54,7 +54,7 @@
<n-card embedded class="mt-4 shadow"> <n-card embedded class="mt-4 shadow">
<template #header> <template #header>
<div class="flex items-center"> <div class="flex items-center">
<icon-date class="w-5 mr-2"></icon-date> <icon-date class="w-5 mr-2 h-[20px]" ></icon-date>
农历节气 农历节气
<div class="ml-12 text-[#ec66ab] font-500">{{ jq.yearTips }} {{ jq.lunarCalendar }}</div> <div class="ml-12 text-[#ec66ab] font-500">{{ jq.yearTips }} {{ jq.lunarCalendar }}</div>
</div> </div>

View File

@ -1,15 +1,15 @@
<template> <template>
<div ref="nav" class="main-nav hidden lg:flex justify-between bg-white"> <div ref="nav" class="main-nav hidden lg:flex justify-between bg-white">
<!-- 网站Logo --> <!-- 网站Logo -->
<div class="px-5 items-centerflex" slot="brand" @click="goHome"> <div class="px-5 items-centerflex cursor-pointer w-1/5" slot="brand" @click="goHome">
<img :src="logo" alt="柚子的网站" class="h-9 align-middle" /> <img :src="logo" alt="柚子的网站" class="h-9 align-middle" />
</div> </div>
<!-- 主导航菜单 --> <!-- 主导航菜单 -->
<div> <div class="w-2/5">
<n-menu :icon-size="12" v-model:value="activeKey" class="" mode="horizontal" :options="menuOptions" /> <n-menu :icon-size="12" v-model:value="activeKey" class="" mode="horizontal" :options="menuOptions" />
</div> </div>
<!-- 用户区域 --> <!-- 用户区域 -->
<div class="!text-[#ec66ab] flex items-center" @click="gotoHf"> <div class="!text-[#ec66ab] flex items-center cursor-pointer" @click="gotoHf">
<span class="flex items-center location-info truncate"> <span class="flex items-center location-info truncate">
<n-icon class="mr-1"> <n-icon class="mr-1">
<icon-loc class="w-[26px] h-[26px]"></icon-loc> <icon-loc class="w-[26px] h-[26px]"></icon-loc>
@ -22,7 +22,7 @@
<span class="weather-info ml-4">{{ temp }}°C</span> <span class="weather-info ml-4">{{ temp }}°C</span>
</div> </div>
<div class="flex items-center mr-8"> <div class="flex items-center justify-end mr-8 w-1/20">
<n-dropdown class="cursor-pointer w-[100px]" v-if="userinfo" :options="oprOp" @select="handleSelect" <n-dropdown class="cursor-pointer w-[100px]" v-if="userinfo" :options="oprOp" @select="handleSelect"
trigger="hover"> trigger="hover">
<div class="flex items-center"> <div class="flex items-center">
@ -31,8 +31,7 @@
</div> </div>
</n-dropdown> </n-dropdown>
<div v-else class="flex items-center" @click="toLogin"> <div v-else class="flex items-center" @click="toLogin">
<n-avatar round class="cursor-pointer"></n-avatar> <n-button size="small" type="primary" @click="toLogin">登录</n-button>
<div class="cursor-pointer ml-2 text-gray text-sm">登录</div>
</div> </div>
</div> </div>
<!-- 登录弹窗 --> <!-- 登录弹窗 -->
@ -51,8 +50,10 @@
<div class="cursor-pointer ml-2 text-gray text-sm">{{ userinfo.nickname }}</div> <div class="cursor-pointer ml-2 text-gray text-sm">{{ userinfo.nickname }}</div>
</div> </div>
<div v-else class="flex items-center"> <div v-else class="flex items-center">
<n-avatar round class="cursor-pointer" @click="toLogin"></n-avatar> <!-- <n-avatar round class="cursor-pointer" @click="toLogin"></n-avatar>
<div class="cursor-pointer ml-2 text-gray text-sm" @click="toLogin">登录</div> <div class="cursor-pointer ml-2 text-gray text-sm" @click="toLogin">登录</div> -->
<n-button type="primary" size="small" @click="toLogin">登录</n-button>
</div> </div>
</div> </div>
</div> </div>
@ -81,11 +82,11 @@
// 从@/icon/menu引入所有的svg文件 // 从@/icon/menu引入所有的svg文件
import logo from '@/assets/images/logo.png'; import logo from '@/assets/images/logo.png';
import artiSvg from '@/icon/menu/arti.svg'; import artiSvg from '@/icon/menu/arti.svg';
import downSvg from '@/icon/menu/download.svg'; // import downSvg from '@/icon/menu/download.svg';
import homeSvg from '@/icon/menu/home.svg'; import homeSvg from '@/icon/menu/home.svg';
import linkSvg from '@/icon/menu/link.svg'; import linkSvg from '@/icon/menu/link.svg';
import picSvg from '@/icon/menu/pic.svg'; import picSvg from '@/icon/menu/pic.svg';
import settingSvg from '@/icon/menu/setting.svg'; // import settingSvg from '@/icon/menu/setting.svg';
import loginModal from '@/components/Login.vue' import loginModal from '@/components/Login.vue'
import masked from '@/components/mask.vue' import masked from '@/components/mask.vue'
import type { UploadFileInfo } from 'naive-ui' import type { UploadFileInfo } from 'naive-ui'
@ -124,16 +125,16 @@ const menuOptions = ref([
key: "blog", key: "blog",
icon: () => h(artiSvg) icon: () => h(artiSvg)
}, },
{ // {
label: () => h(RouterLink, { to: '/widget', class: 'flex items-center justify-center' }, { default: () => '工具' }), // label: () => h(RouterLink, { to: '/widget', class: 'flex items-center justify-center' }, { default: () => '工具' }),
key: "widget", // key: "widget",
icon: () => h(downSvg) // icon: () => h(downSvg)
}, // },
{ // {
label: () => h(RouterLink, { to: '/apps', class: 'flex items-center justify-center' }, { default: () => '软件' }), // label: () => h(RouterLink, { to: '/apps', class: 'flex items-center justify-center' }, { default: () => '软件' }),
key: "apps", // key: "apps",
icon: () => h(settingSvg) // icon: () => h(settingSvg)
}, // },
{ {
label: () => h(RouterLink, { to: '/plink', class: 'flex items-center justify-center' }, { default: () => '友链' }), label: () => h(RouterLink, { to: '/plink', class: 'flex items-center justify-center' }, { default: () => '友链' }),
key: "plink", key: "plink",

4
src/icon/arti.svg Normal file
View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" class="size-6">
<path fill-rule="evenodd" d="M5.625 1.5c-1.036 0-1.875.84-1.875 1.875v17.25c0 1.035.84 1.875 1.875 1.875h12.75c1.035 0 1.875-.84 1.875-1.875V12.75A3.75 3.75 0 0 0 16.5 9h-1.875a1.875 1.875 0 0 1-1.875-1.875V5.25A3.75 3.75 0 0 0 9 1.5H5.625ZM7.5 15a.75.75 0 0 1 .75-.75h7.5a.75.75 0 0 1 0 1.5h-7.5A.75.75 0 0 1 7.5 15Zm.75 2.25a.75.75 0 0 0 0 1.5H12a.75.75 0 0 0 0-1.5H8.25Z" clip-rule="evenodd" />
<path d="M12.971 1.816A5.23 5.23 0 0 1 14.25 5.25v1.875c0 .207.168.375.375.375H16.5a5.23 5.23 0 0 1 3.434 1.279 9.768 9.768 0 0 0-6.963-6.963Z" />
</svg>

After

Width:  |  Height:  |  Size: 652 B

1
src/icon/author.svg Normal file
View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1767228361426" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="9819" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M789.504 890.368H319.488c-18.432 0-33.28 14.848-33.28 33.28s14.848 33.28 33.28 33.28h470.016c18.432 0 33.28-14.848 33.28-33.28s-14.848-33.28-33.28-33.28z" fill="#ec66ab" p-id="9820"></path><path d="M731.648 392.192c68.096-118.272 79.36-283.136 79.872-289.792 1.024-12.288-5.632-24.576-16.384-30.72-10.752-6.144-24.064-6.144-34.816 0.512-24.576 15.872-241.152 156.16-287.744 235.52-68.096 114.688-235.52 420.864-237.056 423.936-1.536 2.56-2.048 5.12-3.072 7.68l-91.648 158.72c-9.216 15.872-3.584 36.352 12.288 45.568 5.12 3.072 10.752 4.608 16.384 4.608 11.264 0 22.528-6.144 28.672-16.896L291.84 769.536c58.368-39.936 371.2-258.048 439.808-377.344z m-201.728-51.2c23.04-39.424 122.368-115.2 206.336-173.056-9.216 54.272-27.648 130.56-61.952 190.976-39.936 68.608-190.976 189.952-310.272 278.016 54.272-98.816 126.464-229.376 165.888-295.936z" fill="#ec66ab" p-id="9821"></path></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

1
src/icon/backtop.svg Normal file
View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1767098232410" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11412" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M552.96 875.229867c0 37.034667-40.96 94.685867-40.96 94.685866s-40.96-61.44-40.96-94.685866a41.915733 41.915733 0 1 1 81.92-18.3808 43.349333 43.349333 0 0 1 0 18.3808m14.609067-441.326934a82.3808 82.3808 0 1 0-116.258134-5.256533l0.1024 0.1024a82.5344 82.5344 0 0 0 116.155734 5.12M799.914667 743.406933v15.36l-177.493334-35.9424c-11.434667 38.3488-57.326933 67.822933-111.018666 67.822934s-99.6352-29.474133-111.121067-69.051734L224.085333 756.053333v-15.36c0-87.04 24.2688-149.589333 79.172267-202.0864C284.125867 290.56 395.144533 133.12 504.951467 69.188267l6.3488-3.7376 6.3488 3.7376C627.5584 133.12 737.1776 290.56 719.325867 538.7776c56.32 52.394667 80.4864 115.080533 80.5888 204.629333" p-id="11413" fill="#ec66ab"></path></svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -1,3 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-6"> <?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1767228343993" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8778" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M810.666667 170.666667h-134.4V149.333333c0-12.8-8.533333-21.333333-21.333334-21.333333h-42.666666c-12.8 0-21.333333 8.533333-21.333334 21.333333v21.333334h-170.666666V149.333333c0-12.8-8.533333-21.333333-21.333334-21.333333h-42.666666c-12.8 0-21.333333 8.533333-21.333334 21.333333v21.333334H213.333333c-46.933333 0-85.333333 38.4-85.333333 85.333333v554.666667c0 46.933333 38.4 85.333333 85.333333 85.333333h597.333334c46.933333 0 85.333333-38.4 85.333333-85.333333V256c0-46.933333-38.4-85.333333-85.333333-85.333333z m0 597.333333c0 23.466667-19.2 42.666667-42.666667 42.666667H256c-23.466667 0-42.666667-19.2-42.666667-42.666667V469.333333c0-23.466667 19.2-42.666667 42.666667-42.666666h512c23.466667 0 42.666667 19.2 42.666667 42.666666v298.666667z m0-448c0 12.8-8.533333 21.333333-21.333334 21.333333H234.666667c-12.8 0-21.333333-8.533333-21.333334-21.333333v-42.666667c0-12.8 8.533333-21.333333 21.333334-21.333333h100.266666v21.333333c0 12.8 8.533333 21.333333 21.333334 21.333334h42.666666c12.8 0 21.333333-8.533333 21.333334-21.333334v-21.333333h170.666666v21.333333c0 12.8 8.533333 21.333333 21.333334 21.333334h42.666666c12.8 0 21.333333-8.533333 21.333334-21.333334v-21.333333H789.333333c12.8 0 21.333333 8.533333 21.333334 21.333333v42.666667z" fill="#ec66ab" p-id="8779"></path><path d="M298.666667 503.466667h42.666666c12.8 0 21.333333 10.666667 21.333334 21.333333v42.666667c0 12.8-10.666667 21.333333-21.333334 21.333333h-42.666666c-12.8 0-21.333333-10.666667-21.333334-21.333333v-42.666667c0-10.666667 10.666667-21.333333 21.333334-21.333333z" fill="#ec66ab" p-id="8780"></path><path d="M298.666667 648.533333h42.666666c12.8 0 21.333333 10.666667 21.333334 21.333334v42.666666c0 12.8-10.666667 21.333333-21.333334 21.333334h-42.666666c-12.8 0-21.333333-10.666667-21.333334-21.333334v-42.666666c0-10.666667 10.666667-21.333333 21.333334-21.333334zM426.666667 503.466667h42.666666c12.8 0 21.333333 10.666667 21.333334 21.333333v42.666667c0 12.8-10.666667 21.333333-21.333334 21.333333h-42.666666c-12.8 0-21.333333-10.666667-21.333334-21.333333v-42.666667c0-10.666667 10.666667-21.333333 21.333334-21.333333z" fill="#ec66ab" p-id="8781"></path><path d="M554.666667 503.466667h42.666666c12.8 0 21.333333 10.666667 21.333334 21.333333v42.666667c0 12.8-10.666667 21.333333-21.333334 21.333333h-42.666666c-12.8 0-21.333333-10.666667-21.333334-21.333333v-42.666667c0-10.666667 10.666667-21.333333 21.333334-21.333333z" fill="#ec66ab" p-id="8782"></path><path d="M682.666667 503.466667h42.666666c12.8 0 21.333333 10.666667 21.333334 21.333333v42.666667c0 12.8-10.666667 21.333333-21.333334 21.333333h-42.666666c-12.8 0-21.333333-10.666667-21.333334-21.333333v-42.666667c0-10.666667 10.666667-21.333333 21.333334-21.333333z" fill="#ec66ab" p-id="8783"></path><path d="M426.666667 648.533333h42.666666c12.8 0 21.333333 10.666667 21.333334 21.333334v42.666666c0 12.8-10.666667 21.333333-21.333334 21.333334h-42.666666c-12.8 0-21.333333-10.666667-21.333334-21.333334v-42.666666c0-10.666667 10.666667-21.333333 21.333334-21.333334z" fill="#ec66ab" p-id="8784"></path><path d="M554.666667 648.533333h42.666666c12.8 0 21.333333 10.666667 21.333334 21.333334v42.666666c0 12.8-10.666667 21.333333-21.333334 21.333334h-42.666666c-12.8 0-21.333333-10.666667-21.333334-21.333334v-42.666666c0-10.666667 10.666667-21.333333 21.333334-21.333334z" fill="#ec66ab" p-id="8785"></path><path d="M682.666667 648.533333h42.666666c12.8 0 21.333333 10.666667 21.333334 21.333334v42.666666c0 12.8-10.666667 21.333333-21.333334 21.333334h-42.666666c-12.8 0-21.333333-10.666667-21.333334-21.333334v-42.666666c0-10.666667 10.666667-21.333333 21.333334-21.333334z" fill="#ec66ab" p-id="8786"></path></svg>
<path stroke-linecap="round" stroke-linejoin="round" d="M6.75 3v2.25M17.25 3v2.25M3 18.75V7.5a2.25 2.25 0 0 1 2.25-2.25h13.5A2.25 2.25 0 0 1 21 7.5v11.25m-18 0A2.25 2.25 0 0 0 5.25 21h13.5A2.25 2.25 0 0 0 21 18.75m-18 0v-7.5A2.25 2.25 0 0 1 5.25 9h13.5A2.25 2.25 0 0 1 21 11.25v7.5m-9-6h.008v.008H12v-.008ZM12 15h.008v.008H12V15Zm0 2.25h.008v.008H12v-.008ZM9.75 15h.008v.008H9.75V15Zm0 2.25h.008v.008H9.75v-.008ZM7.5 15h.008v.008H7.5V15Zm0 2.25h.008v.008H7.5v-.008Zm6.75-4.5h.008v.008h-.008v-.008Zm0 2.25h.008v.008h-.008V15Zm0 2.25h.008v.008h-.008v-.008Zm2.25-4.5h.008v.008H16.5v-.008Zm0 2.25h.008v.008H16.5V15Z" />
</svg>

Before

Width:  |  Height:  |  Size: 754 B

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

@ -2,3 +2,4 @@
<path fill-rule="evenodd" d="M9.75 6.75h-3a3 3 0 0 0-3 3v7.5a3 3 0 0 0 3 3h7.5a3 3 0 0 0 3-3v-7.5a3 3 0 0 0-3-3h-3V1.5a.75.75 0 0 0-1.5 0v5.25Zm0 0h1.5v5.69l1.72-1.72a.75.75 0 1 1 1.06 1.06l-3 3a.75.75 0 0 1-1.06 0l-3-3a.75.75 0 1 1 1.06-1.06l1.72 1.72V6.75Z" clip-rule="evenodd" /> <path fill-rule="evenodd" d="M9.75 6.75h-3a3 3 0 0 0-3 3v7.5a3 3 0 0 0 3 3h7.5a3 3 0 0 0 3-3v-7.5a3 3 0 0 0-3-3h-3V1.5a.75.75 0 0 0-1.5 0v5.25Zm0 0h1.5v5.69l1.72-1.72a.75.75 0 1 1 1.06 1.06l-3 3a.75.75 0 0 1-1.06 0l-3-3a.75.75 0 1 1 1.06-1.06l1.72 1.72V6.75Z" clip-rule="evenodd" />
<path d="M7.151 21.75a2.999 2.999 0 0 0 2.599 1.5h7.5a3 3 0 0 0 3-3v-7.5c0-1.11-.603-2.08-1.5-2.599v7.099a4.5 4.5 0 0 1-4.5 4.5H7.151Z" /> <path d="M7.151 21.75a2.999 2.999 0 0 0 2.599 1.5h7.5a3 3 0 0 0 3-3v-7.5c0-1.11-.603-2.08-1.5-2.599v7.099a4.5 4.5 0 0 1-4.5 4.5H7.151Z" />
</svg> </svg>

Before

Width:  |  Height:  |  Size: 529 B

After

Width:  |  Height:  |  Size: 530 B

17
src/icon/loading.svg Normal file
View File

@ -0,0 +1,17 @@
<svg class="mx-1 size-5 animate-spin text-[#FFC0CB] duration-10000" viewBox="0 0 512 512" fill="currentColor"><g><path fill="currentColor" d="M330.555,101.873c0-34.164-13.767-65.108-36.047-87.622c-2.432-2.465-9.63-4.349-14.212,3.466
c-4.589,7.808-17.205,27.431-17.205,27.431c-1.534,2.438-4.219,3.918-7.089,3.918c-2.883,0-5.555-1.48-7.089-3.918
c0,0-12.623-19.623-17.205-27.431c-4.582-7.815-11.781-5.931-14.219-3.466c-22.274,22.514-36.04,53.458-36.04,87.622
c0,51.02,30.663,94.847,74.553,114.142C299.892,196.72,330.555,152.892,330.555,101.873z"></path><path fill="currentColor" d="M204.51,253.425c-4.78-47.705-36.998-90.409-85.518-106.176c-32.492-10.554-66.177-7.027-94.47,7.205
c-3.096,1.555-7.117,7.822-1.096,14.589c6.007,6.774,20.766,24.842,20.766,24.842c1.849,2.212,2.432,5.22,1.542,7.952
c-0.891,2.74-3.13,4.829-5.918,5.528c0,0-22.562,5.945-31.404,7.89c-8.849,1.945-9.281,9.37-7.692,12.445
c14.527,28.144,39.698,50.801,72.197,61.362C121.436,304.828,172.6,289.212,204.51,253.425z"></path><path fill="currentColor" d="M96.772,362.484c-20.082,27.643-27.136,60.766-22.342,92.074c0.527,3.424,5.233,9.178,13.527,5.554
c8.308-3.63,30.054-12.088,30.054-12.088c2.672-1.062,5.698-0.692,8.041,1c2.329,1.692,3.623,4.466,3.418,7.335
c0,0-1.308,23.294-2.199,32.315c-0.883,9.006,6.048,11.712,9.466,11.15c31.252-5.116,60.581-22.054,80.662-49.704
c29.993-41.266,30.944-94.758,6.781-136.155C177.332,303.773,126.758,321.204,96.772,362.484z"></path><path fill="currentColor" d="M287.824,313.964c-24.165,41.397-23.212,94.888,6.78,136.155c20.082,27.65,49.41,44.588,80.663,49.704
c3.418,0.562,10.349-2.144,9.466-11.15c-0.89-9.021-2.205-32.315-2.205-32.315c-0.198-2.869,1.102-5.643,3.431-7.335
c2.322-1.692,5.363-2.062,8.034-1c0,0,21.746,8.458,30.047,12.088c8.294,3.623,13.007-2.13,13.534-5.554
c4.787-31.308-2.254-64.43-22.342-92.074C385.246,321.204,334.672,303.766,287.824,313.964z"></path><path fill="currentColor" d="M503.6,215.254c-8.849-1.945-31.41-7.89-31.41-7.89c-2.795-0.706-5.027-2.788-5.918-5.528
c-0.89-2.732-0.308-5.74,1.534-7.952c0,0,14.76-18.068,20.78-24.842c6.014-6.766,1.993-13.034-1.096-14.589
c-28.301-14.232-61.978-17.76-94.485-7.205c-48.519,15.767-80.731,58.472-85.512,106.176
c31.91,35.787,83.067,51.403,131.593,35.636c32.492-10.561,57.67-33.218,72.191-61.362
C512.867,224.624,512.449,217.199,503.6,215.254z"></path></g></svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

1
src/icon/pen.svg Normal file
View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1767229323466" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11396" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M531.4 114.8L414.1 365l97.9 70.1L627.2 512l87.2-68.3L826 313.4z" fill="#ec66ab" p-id="11397"></path><path d="M831 282.1L565.1 98.7c-10.7-7.4-24.1-9.6-36.7-5.9-12.6 3.7-22.7 12.7-27.8 24.7L381.8 399.6c-4.3 10.1-10.9 19.2-19.3 26.2l-87 73.2c-28.7 24.2-44.9 60.9-43.2 98.4l9.2 209.4-37.6 54.4c-11.7 2.2-22.4 10.2-27.3 23.1-4.8 12.6-1.7 27.5 7.6 37.2 6.6 6.9 14.9 10.4 23.2 11.2v0.3h448.4v-51.5H252.4l31.4-45.5 199-65.7c35.6-11.8 64.3-39.9 76.7-75.4L597 587.6c3.6-10.3 9.7-19.7 17.6-27.3l221.6-211.2c9.5-9 14.3-21.7 13.3-34.7-1-13.1-7.8-24.8-18.5-32.3zM548.4 570.6L510.9 678c-7.1 20.4-23.7 36.7-44.2 43.5l-134.4 44.4 131.8-191c11.7-2.2 22.4-10.2 27.3-23.1 4.8-12.6 1.7-27.5-7.6-37.2-16.5-17.3-43.5-14.4-56.3 4.2-5.6 8.2-7.4 17.8-5.8 26.9l-131.8 191-6.2-141.4c-0.9-21.6 8.4-42.8 24.9-56.8l87-73.2c14.6-12.3 26.2-28 33.6-45.6l4.8-11.5 151.5 108.7-6.5 6.2c-13.7 13.1-24.3 29.5-30.6 47.5z m75.1-89.9L454.6 359.5l89.6-212.7 249.2 172-169.9 161.9z" fill="#ec66ab" p-id="11398"></path></svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

11
src/icon/plink/ava.svg Normal file
View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8" ?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
<defs>
<clipPath id="clipPath9237879253">
<path d="M0 0L16 0L16 16L0 16L0 0Z" fill-rule="nonzero" transform="matrix(1 0 0 1 0 0)"/>
</clipPath>
</defs>
<g clip-path="url(#clipPath9237879253)">
<path d="M12 0L2 0C1.44797 0.000602881 0.976774 0.196078 0.586426 0.586426C0.196078 0.976774 0.000602802 1.44797 0 2L0 10C0.000602802 10.552 0.196078 11.0232 0.586426 11.4136C0.976774 11.8039 1.44797 11.9994 2 12L12 12C12.552 11.9994 13.0232 11.8039 13.4136 11.4136C13.8039 11.0232 13.9994 10.552 14 10L14 2C13.9994 1.44796 13.8039 0.976774 13.4136 0.586426C13.0232 0.196078 12.552 0.000602563 12 0ZM9.5 2C9.91421 2 10.2678 2.14645 10.5607 2.43934C10.8536 2.73223 11 3.08579 11 3.5C11 3.91421 10.8536 4.26777 10.5607 4.56066C10.2678 4.85355 9.91421 5 9.5 5C9.08579 5 8.73223 4.85355 8.43934 4.56066C8.14645 4.26777 8 3.91421 8 3.5C8.00043 3.08596 8.14703 2.73256 8.4398 2.4398C8.73256 2.14703 9.08596 2.00043 9.5 2ZM2 11C1.72386 11 1.48816 10.9024 1.29289 10.7071C1.09763 10.5118 1 10.2761 1 10L1 7.88656L3.96375 5.25219C4.26051 4.98899 4.60714 4.86312 5.00364 4.87457C5.40013 4.88602 5.73892 5.03168 6.02 5.31156L8.04969 7.33687L4.38656 11L2 11ZM13 10C13 10.2761 12.9024 10.5118 12.7071 10.7071C12.5118 10.9024 12.2761 11 12 11L5.80094 11L9.59531 7.20563C9.87268 6.96975 10.1934 6.85133 10.5575 6.85039C10.9216 6.84944 11.243 6.96619 11.5216 7.20063L13 8.4325L13 10Z" fill-rule="nonzero" transform="matrix(1 0 0 1 1 2)" fill="rgb(55, 65, 81)"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

12
src/icon/plink/desc.svg Normal file
View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8" ?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
<defs>
<clipPath id="clipPath9650034066">
<path d="M0 0L16 0L16 16L0 16L0 0Z" fill-rule="nonzero" transform="matrix(1 0 0 1 0 0)"/>
</clipPath>
</defs>
<g clip-path="url(#clipPath9650034066)">
<path d="M10.875 6L6.5 6C6.08579 6 5.73223 5.85355 5.43934 5.56066C5.14645 5.26777 5 4.91421 5 4.5L5 0.125C5 0.0904822 4.9878 0.0610193 4.96339 0.0366116C4.93898 0.0122039 4.90952 0 4.875 0L2 0C1.44772 0 0.976311 0.195262 0.585786 0.585786C0.195262 0.976311 0 1.44772 0 2L0 12C0 12.5523 0.195262 13.0237 0.585786 13.4142C0.976311 13.8047 1.44772 14 2 14L9 14C9.55228 14 10.0237 13.8047 10.4142 13.4142C10.8047 13.0237 11 12.5523 11 12L11 6.125C11 6.09048 10.9878 6.06102 10.9634 6.03661C10.939 6.0122 10.9095 6 10.875 6ZM8 11L3 11C2.86193 11 2.74408 10.9512 2.64645 10.8536C2.54882 10.7559 2.5 10.6381 2.5 10.5C2.5 10.3619 2.54882 10.2441 2.64645 10.1464C2.74408 10.0488 2.86193 10 3 10L8 10C8.13807 10 8.25592 10.0488 8.35355 10.1464C8.45118 10.2441 8.5 10.3619 8.5 10.5C8.5 10.6381 8.45118 10.7559 8.35355 10.8536C8.25592 10.9512 8.13807 11 8 11ZM8 8.5L3 8.5C2.86193 8.5 2.74408 8.45118 2.64645 8.35355C2.54882 8.25592 2.5 8.13807 2.5 8C2.5 7.86193 2.54882 7.74408 2.64645 7.64645C2.74408 7.54882 2.86193 7.5 3 7.5L8 7.5C8.13807 7.5 8.25592 7.54882 8.35355 7.64645C8.45118 7.74408 8.5 7.86193 8.5 8C8.5 8.13807 8.45118 8.25592 8.35355 8.35355C8.25592 8.45118 8.13807 8.5 8 8.5Z" fill-rule="nonzero" transform="matrix(1 0 0 1 2.5 1)" fill="rgb(55, 65, 81)"/>
<path d="M4.60063 4.51228L0.106563 0.0182223C0.097628 0.00934013 0.0869808 0.00367733 0.0746212 0.00123394C0.0622616 -0.00120946 0.0502605 -2.40803e-05 0.0386181 0.00479007C0.0269756 0.00960422 0.017642 0.0172406 0.0106173 0.0276991C0.00359249 0.0381577 5.34058e-05 0.0496862 0 0.0622848L0 4.11885C0 4.25692 0.0488154 4.37477 0.146446 4.4724C0.244077 4.57003 0.361928 4.61885 0.5 4.61885L4.55656 4.61885C4.56916 4.61879 4.58069 4.61526 4.59115 4.60823C4.60161 4.60121 4.60924 4.59187 4.61406 4.58023C4.61887 4.56859 4.62006 4.55659 4.61761 4.54423C4.61517 4.53187 4.60951 4.52122 4.60063 4.51228Z" fill-rule="nonzero" transform="matrix(1 0 0 1 8.5 1.38115)" fill="rgb(55, 65, 81)"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

12
src/icon/plink/site.svg Normal file
View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8" ?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
<defs>
<clipPath id="clipPath4437362061">
<path d="M0 0L16 0L16 16L0 16L0 0Z" fill-rule="nonzero" transform="matrix(1 0 0 1 0 0)"/>
</clipPath>
</defs>
<g clip-path="url(#clipPath4437362061)">
<path d="M10.875 6L6.5 6C6.08579 6 5.73223 5.85355 5.43934 5.56066C5.14645 5.26777 5 4.91421 5 4.5L5 0.125C5 0.0904822 4.9878 0.0610193 4.96339 0.0366116C4.93898 0.0122039 4.90952 0 4.875 0L2 0C1.44772 0 0.976311 0.195262 0.585786 0.585786C0.195262 0.976311 0 1.44772 0 2L0 12C0 12.5523 0.195262 13.0237 0.585786 13.4142C0.976311 13.8047 1.44772 14 2 14L9 14C9.55228 14 10.0237 13.8047 10.4142 13.4142C10.8047 13.0237 11 12.5523 11 12L11 6.125C11 6.09048 10.9878 6.06102 10.9634 6.03661C10.939 6.0122 10.9095 6 10.875 6ZM8 11L3 11C2.86193 11 2.74408 10.9512 2.64645 10.8536C2.54882 10.7559 2.5 10.6381 2.5 10.5C2.5 10.3619 2.54882 10.2441 2.64645 10.1464C2.74408 10.0488 2.86193 10 3 10L8 10C8.13807 10 8.25592 10.0488 8.35355 10.1464C8.45118 10.2441 8.5 10.3619 8.5 10.5C8.5 10.6381 8.45118 10.7559 8.35355 10.8536C8.25592 10.9512 8.13807 11 8 11ZM8 8.5L3 8.5C2.86193 8.5 2.74408 8.45118 2.64645 8.35355C2.54882 8.25592 2.5 8.13807 2.5 8C2.5 7.86193 2.54882 7.74408 2.64645 7.64645C2.74408 7.54882 2.86193 7.5 3 7.5L8 7.5C8.13807 7.5 8.25592 7.54882 8.35355 7.64645C8.45118 7.74408 8.5 7.86193 8.5 8C8.5 8.13807 8.45118 8.25592 8.35355 8.35355C8.25592 8.45118 8.13807 8.5 8 8.5Z" fill-rule="nonzero" transform="matrix(1 0 0 1 2.5 1)" fill="rgb(55, 65, 81)"/>
<path d="M4.60063 4.51228L0.106563 0.0182223C0.097628 0.00934013 0.0869808 0.00367733 0.0746212 0.00123394C0.0622616 -0.00120946 0.0502605 -2.40803e-05 0.0386181 0.00479007C0.0269756 0.00960422 0.017642 0.0172406 0.0106173 0.0276991C0.00359249 0.0381577 5.34058e-05 0.0496862 0 0.0622848L0 4.11885C0 4.25692 0.0488154 4.37477 0.146446 4.4724C0.244077 4.57003 0.361928 4.61885 0.5 4.61885L4.55656 4.61885C4.56916 4.61879 4.58069 4.61526 4.59115 4.60823C4.60161 4.60121 4.60924 4.59187 4.61406 4.58023C4.61887 4.56859 4.62006 4.55659 4.61761 4.54423C4.61517 4.53187 4.60951 4.52122 4.60063 4.51228Z" fill-rule="nonzero" transform="matrix(1 0 0 1 8.5 1.38115)" fill="rgb(55, 65, 81)"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

11
src/icon/plink/tag.svg Normal file
View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8" ?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
<defs>
<clipPath id="clipPath5101496573">
<path d="M0 0L16 0L16 16L0 16L0 0Z" fill-rule="nonzero" transform="matrix(1 0 0 1 0 0)"/>
</clipPath>
</defs>
<g clip-path="url(#clipPath5101496573)">
<path d="M13.5939 0.412504C13.4631 0.280143 13.3117 0.178199 13.1399 0.106672C12.9681 0.0351444 12.7891 -0.00041159 12.603 3.57628e-06L8.76141 3.57628e-06C8.63541 0.000238498 8.51418 0.0244096 8.39773 0.0725168C8.28128 0.120624 8.17834 0.189057 8.08891 0.277816L0.409219 7.95594C0.136406 8.22931 0 8.55911 0 8.94532C0 9.33153 0.136406 9.66132 0.409219 9.93469L4.06547 13.5909C4.33891 13.8639 4.66881 14.0003 5.05516 14.0003C5.4415 14.0003 5.7714 13.8639 6.04484 13.5909L13.7214 5.91594C13.8103 5.82666 13.8789 5.72381 13.9272 5.6074C13.9755 5.49099 13.9998 5.36977 14.0002 5.24375L14.0002 1.4C14.0013 1.21486 13.9667 1.03667 13.8962 0.865449C13.8258 0.694224 13.725 0.543242 13.5939 0.412504ZM11.0002 4C10.724 4 10.4883 3.90237 10.293 3.70711C10.0978 3.51185 10.0002 3.27615 10.0002 3C10.0002 2.72386 10.0978 2.48816 10.293 2.2929C10.4883 2.09763 10.724 2 11.0002 2C11.2763 2 11.512 2.09763 11.7073 2.2929C11.9025 2.48816 12.0002 2.72386 12.0002 3C12.0002 3.27615 11.9025 3.51185 11.7073 3.70711C11.512 3.90237 11.2763 4 11.0002 4Z" fill-rule="nonzero" transform="matrix(1 0 0 1 0.999844 0.999996)" fill="rgb(55, 65, 81)"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

12
src/icon/plink/uri.svg Normal file
View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8" ?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
<defs>
<clipPath id="clipPath6925244028">
<path d="M0 0L16 0L16 16L0 16L0 0Z" fill-rule="nonzero" transform="matrix(1 0 0 1 0 0)"/>
</clipPath>
</defs>
<g clip-path="url(#clipPath6925244028)">
<path d="M5.64616 8.58154C5.83085 7.93467 5.95303 7.1831 5.9996 6.46154C6.00177 6.42172 5.98905 6.38742 5.96145 6.35864C5.93384 6.32985 5.9001 6.31572 5.86022 6.31623L3.6396 6.31623C3.60137 6.31588 3.56861 6.3291 3.54134 6.35589C3.51406 6.38268 3.50025 6.41519 3.49991 6.45342L3.49991 8.18154C3.50031 8.21774 3.51295 8.24899 3.53781 8.27529C3.56268 8.3016 3.59317 8.31598 3.62928 8.31842C3.94218 8.3437 4.25274 8.3861 4.56096 8.4456C4.86919 8.5051 5.17321 8.58136 5.47303 8.67436C5.50975 8.6854 5.545 8.68186 5.57879 8.66374C5.61258 8.64563 5.63503 8.61823 5.64616 8.58154ZM5.10959 9.60717C4.87173 9.53772 4.63118 9.47927 4.38797 9.43183C4.14475 9.38439 3.89988 9.34815 3.65334 9.3231C3.61305 9.3186 3.57764 9.32969 3.54711 9.35636C3.51659 9.38303 3.50085 9.41664 3.49991 9.45717L3.49991 11.4959C3.50155 11.5492 3.52573 11.5886 3.57246 11.6142C3.61919 11.6397 3.66542 11.6389 3.71116 11.6115C4.20803 11.3219 4.61741 10.8353 4.98741 10.1919C5.04803 10.0869 5.14022 9.90592 5.19585 9.79529C5.21426 9.75735 5.21468 9.71922 5.1971 9.68088C5.17953 9.64255 5.15036 9.61797 5.10959 9.60717ZM2.35053 9.32873C2.1043 9.35215 1.85968 9.38688 1.61666 9.43292C1.37364 9.47895 1.13327 9.5361 0.895532 9.60435C0.813032 9.62811 0.778344 9.74185 0.815844 9.81654C0.871781 9.92779 0.940844 10.07 0.999907 10.1762C1.40616 10.895 1.83866 11.3481 2.28866 11.6115C2.33439 11.6389 2.38062 11.6397 2.42735 11.6142C2.47408 11.5886 2.49827 11.5492 2.49991 11.4959L2.49991 9.45623C2.49959 9.41669 2.48439 9.38408 2.45431 9.3584C2.42423 9.33273 2.38964 9.32283 2.35053 9.32873ZM2.36022 6.31623L0.139594 6.31623C0.0997814 6.31572 0.0660791 6.32982 0.0384874 6.35853C0.0108951 6.38723 -0.0018611 6.42147 0.000218868 6.46123C0.0464687 7.18186 0.168031 7.93498 0.352094 8.58123C0.363079 8.61845 0.385668 8.64623 0.419861 8.66458C0.454054 8.68293 0.489694 8.6864 0.526781 8.67498C0.826582 8.58198 1.1306 8.5058 1.43883 8.44645C1.74706 8.3871 2.05763 8.34495 2.37053 8.31998C2.40671 8.31761 2.43726 8.30327 2.4622 8.27696C2.48713 8.25064 2.49981 8.21936 2.50022 8.18311L2.50022 6.45373C2.49996 6.41538 2.48615 6.38277 2.45879 6.35589C2.43143 6.32902 2.39857 6.3158 2.36022 6.31623ZM3.65397 2.30935C3.90034 2.28627 4.14492 2.25086 4.38773 2.20314C4.63053 2.15542 4.87032 2.09561 5.1071 2.02373C5.14758 2.01279 5.17658 1.98826 5.19411 1.95017C5.21163 1.91207 5.21138 1.87409 5.19335 1.83623C5.13741 1.72467 5.05991 1.56498 5.00053 1.45842C4.61647 0.770917 4.18366 0.29123 3.71178 0.0209172C3.66604 -0.00616765 3.61986 -0.00694919 3.57323 0.0185726C3.5266 0.0440942 3.50237 0.0834173 3.50053 0.136542L3.50053 2.17498C3.50148 2.21553 3.51721 2.24916 3.54773 2.27588C3.57824 2.3026 3.61365 2.31376 3.65397 2.30935ZM3.6396 5.31623L5.86022 5.31623C5.89972 5.3169 5.93326 5.30308 5.96082 5.27477C5.98839 5.24647 6.00131 5.21258 5.9996 5.1731C5.95334 4.46154 5.83491 3.67935 5.65085 3.04123C5.63952 3.00433 5.61679 2.97687 5.58265 2.95885C5.54851 2.94083 5.51301 2.93756 5.47616 2.94904C4.88241 3.12842 4.26397 3.27498 3.6296 3.32404C3.59364 3.32608 3.56318 3.34009 3.53823 3.36606C3.51328 3.39204 3.5005 3.42303 3.49991 3.45904L3.49991 5.18123C3.50059 5.21914 3.51457 5.25127 3.54183 5.27762C3.56909 5.30397 3.60168 5.31684 3.6396 5.31623ZM2.28866 0.0212295C1.80678 0.289042 1.37709 0.784667 0.99272 1.47029C0.933032 1.57685 0.861782 1.72373 0.80522 1.83498C0.787316 1.87284 0.787115 1.91079 0.804617 1.94884C0.82212 1.98689 0.85107 2.01144 0.89147 2.02248C1.12815 2.09568 1.36803 2.15623 1.6111 2.20412C1.85417 2.25202 2.09908 2.28699 2.34584 2.30904C2.3861 2.31344 2.42148 2.30232 2.45198 2.27568C2.48247 2.24903 2.49824 2.21546 2.49928 2.17498L2.49928 0.136855C2.49712 0.0840894 2.4729 0.0450005 2.42661 0.0195878C2.38031 -0.00582512 2.33433 -0.00527803 2.28866 0.0212295ZM2.37022 3.32435C1.73584 3.27592 1.11678 3.12935 0.523657 2.94935C0.486801 2.93788 0.451304 2.94114 0.417164 2.95916C0.383024 2.97718 0.360293 3.00464 0.34897 3.04154C0.164907 3.67967 0.0464697 4.46185 0.000219822 5.17342C-0.00149584 5.21289 0.0114285 5.24678 0.0389929 5.27508C0.0665569 5.30339 0.100091 5.31721 0.139595 5.31654L2.36022 5.31654C2.39825 5.31715 2.43091 5.30421 2.4582 5.27771C2.48549 5.25121 2.49939 5.21895 2.49991 5.18092L2.49991 3.45935C2.49931 3.42334 2.48654 3.39235 2.46159 3.36638C2.43663 3.3404 2.40618 3.3264 2.37022 3.32435Z" fill-rule="nonzero" transform="matrix(1 0 0 1 5.00228 2.18377)" fill="rgb(55, 65, 81)"/>
<path d="M11.9739 2.07454C10.6091 0.696278 8.95682 0.00477179 7.01714 2.45571e-05C5.07745 -0.00472267 3.42182 0.678688 2.05026 2.05026C0.678688 3.42182 -0.00472267 5.07745 2.45571e-05 7.01714C0.00477179 8.95682 0.696278 10.6091 2.07454 11.9739C3.43938 13.3522 5.09164 14.0437 7.03133 14.0484C8.97101 14.0532 10.6266 13.3698 11.9982 11.9982C13.3698 10.6266 14.0532 8.97101 14.0484 7.03133C14.0437 5.09164 13.3522 3.43938 11.9739 2.07454ZM4.54298 12.4883C4.47258 12.3894 4.40486 12.2888 4.33981 12.1863C4.27477 12.0838 4.21249 11.9797 4.15298 11.8739C4.09048 11.7586 4.00173 11.5845 3.94267 11.4636C3.91402 11.4029 3.86759 11.3627 3.8034 11.343C3.73921 11.3233 3.67824 11.3306 3.62048 11.3649C3.48611 11.4402 3.30798 11.5436 3.17892 11.6283C3.04359 11.5254 2.91436 11.4154 2.79122 11.2982C2.66809 11.181 2.5518 11.0574 2.44236 10.9274C2.59371 10.8205 2.74867 10.7192 2.90726 10.6235C3.06585 10.5278 3.22765 10.4378 3.39267 10.3536C3.45079 10.3224 3.47923 10.2867 3.46079 10.223C3.33989 9.80453 3.24263 9.38066 3.16902 8.95135C3.0954 8.52205 3.04589 8.08999 3.02048 7.65517C3.01891 7.61907 3.00515 7.58844 2.97921 7.56328C2.95327 7.53813 2.92224 7.52532 2.88611 7.52486L1.11298 7.52486C1.0974 7.52503 1.08367 7.52007 1.0718 7.50998C1.05992 7.49989 1.05282 7.48714 1.05048 7.47173C1.04066 7.39757 1.03356 7.32314 1.02918 7.24846C1.0248 7.17378 1.02315 7.09903 1.02423 7.02423C1.02316 6.94957 1.02487 6.87498 1.02936 6.80045C1.03384 6.72592 1.04109 6.65166 1.05111 6.57767C1.05344 6.56226 1.06055 6.54951 1.07242 6.53942C1.0843 6.52933 1.09802 6.52437 1.11361 6.52454L2.88673 6.52454C2.95829 6.52454 3.01704 6.48329 3.02079 6.41111C3.04587 5.97809 3.09498 5.54782 3.16812 5.12029C3.24127 4.69276 3.33799 4.27064 3.45829 3.85392C3.46754 3.82254 3.46571 3.79182 3.45283 3.76175C3.43994 3.73169 3.41895 3.70918 3.38986 3.69423C3.22838 3.61149 3.06985 3.52346 2.91426 3.43012C2.75867 3.33679 2.60637 3.23837 2.45736 3.13486C2.56622 3.00483 2.68104 2.8803 2.80184 2.76128C2.92264 2.64225 3.04885 2.52928 3.18048 2.42236C3.30798 2.50611 3.47423 2.60079 3.60736 2.67579C3.66932 2.71102 3.73434 2.71805 3.8024 2.69689C3.87047 2.67573 3.92004 2.63307 3.95111 2.56892C4.00986 2.44798 4.07611 2.31329 4.14048 2.19767C4.20025 2.09058 4.26281 1.98515 4.32817 1.88138C4.39353 1.77761 4.46159 1.67564 4.53236 1.57548C4.92195 1.39194 5.327 1.25366 5.7475 1.16064C6.16799 1.06761 6.59357 1.02215 7.02423 1.02423C7.92861 1.02423 8.77111 1.24298 9.54079 1.60111C9.60875 1.69651 9.674 1.79373 9.73655 1.89277C9.7991 1.9918 9.85884 2.0925 9.91579 2.19486C9.99673 2.34048 10.0827 2.51892 10.1552 2.67361C10.1716 2.70837 10.1981 2.73174 10.2346 2.74372C10.2712 2.75569 10.3063 2.75253 10.3402 2.73423C10.5083 2.64329 10.6905 2.53861 10.8508 2.43329C10.9828 2.54127 11.1094 2.65529 11.2305 2.77535C11.3516 2.89542 11.4667 3.02098 11.5758 3.15204C11.4309 3.25256 11.2826 3.34795 11.1311 3.43821C10.9795 3.52847 10.8251 3.6134 10.6677 3.69298C10.6385 3.70795 10.6175 3.73051 10.6047 3.76066C10.5918 3.79082 10.5901 3.82159 10.5995 3.85298C10.7218 4.26687 10.8191 4.68654 10.8915 5.112C10.9639 5.53745 11.0109 5.9657 11.0324 6.39673C11.0341 6.43263 11.0479 6.46301 11.0739 6.48787C11.0998 6.51274 11.1308 6.52527 11.1667 6.52548L12.9361 6.52329C12.9517 6.52312 12.9654 6.52807 12.9773 6.53817C12.9892 6.54826 12.9963 6.56101 12.9986 6.57642C13.0168 6.72492 13.0259 6.87399 13.0259 7.02361C13.0259 7.17323 13.0168 7.32229 12.9986 7.47079C12.9964 7.48632 12.9894 7.49921 12.9775 7.50943C12.9656 7.51966 12.9518 7.5247 12.9361 7.52454L11.1652 7.52454C11.129 7.52493 11.0979 7.53771 11.072 7.56289C11.046 7.58806 11.0323 7.61872 11.0308 7.65486C11.0065 8.08508 10.9581 8.51259 10.8856 8.93737C10.8131 9.36215 10.717 9.78152 10.5974 10.1955C10.588 10.2272 10.5898 10.2583 10.6026 10.2888C10.6155 10.3193 10.6366 10.3422 10.6658 10.3577C10.822 10.4386 10.9961 10.5289 11.1461 10.6208C11.2961 10.7127 11.4445 10.8108 11.5877 10.9127C11.4794 11.0431 11.3652 11.1682 11.2452 11.2879C11.1251 11.4076 10.9997 11.5214 10.8689 11.6292C10.7927 11.5789 10.702 11.5217 10.6239 11.4749C10.5702 11.4436 10.4711 11.3883 10.4161 11.3574C10.2967 11.2905 10.1699 11.3405 10.1102 11.4636C10.0505 11.5867 9.95923 11.7633 9.89548 11.8777C9.83674 11.9828 9.77519 12.0863 9.71082 12.1881C9.64645 12.2899 9.57936 12.3898 9.50954 12.488C8.74017 12.8483 7.92861 13.0242 7.02423 13.0242C6.11986 13.0242 5.31267 12.8483 4.54298 12.4883Z" fill-rule="nonzero" transform="matrix(1 0 0 1 0.975769 0.975769)" fill="rgb(55, 65, 81)"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 9.0 KiB

11
src/icon/plink/user.svg Normal file
View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8" ?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
<defs>
<clipPath id="clipPath7820171251">
<path d="M0 0L16 0L16 16L0 16L0 0Z" fill-rule="nonzero" transform="matrix(1 0 0 1 0 0)"/>
</clipPath>
</defs>
<g clip-path="url(#clipPath7820171251)">
<path d="M8.89518 1.01813C8.28705 0.361562 7.43768 0 6.50018 0C5.55768 0 4.70549 0.359375 4.10018 1.01188C3.4883 1.67156 3.19018 2.56813 3.26018 3.53625C3.39893 5.44625 4.85237 7 6.50018 7C8.14799 7 9.59893 5.44656 9.73987 3.53687C9.8108 2.5775 9.5108 1.68281 8.89518 1.01813ZM12.0002 14L1.00018 14C0.854387 14.0019 0.715258 13.9724 0.582793 13.9115C0.450327 13.8505 0.337372 13.7641 0.243929 13.6522C0.0408037 13.4094 -0.0410713 13.0778 0.0195537 12.7425C0.283304 11.2794 1.10643 10.0503 2.40018 9.1875C3.54955 8.42156 5.00549 8 6.50018 8C7.99487 8 9.4508 8.42188 10.6002 9.1875C11.8939 10.05 12.7171 11.2791 12.9808 12.7422C13.0414 13.0775 12.9596 13.4091 12.7564 13.6519C12.663 13.7639 12.5501 13.8503 12.4176 13.9113C12.2851 13.9723 12.146 14.0019 12.0002 14Z" fill-rule="nonzero" transform="matrix(1 0 0 1 1.49982 1)" fill="rgb(55, 65, 81)"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

3
src/icon/star.svg Normal file
View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" class="size-6">
<path fill-rule="evenodd" d="M9 4.5a.75.75 0 0 1 .721.544l.813 2.846a3.75 3.75 0 0 0 2.576 2.576l2.846.813a.75.75 0 0 1 0 1.442l-2.846.813a3.75 3.75 0 0 0-2.576 2.576l-.813 2.846a.75.75 0 0 1-1.442 0l-.813-2.846a3.75 3.75 0 0 0-2.576-2.576l-2.846-.813a.75.75 0 0 1 0-1.442l2.846-.813A3.75 3.75 0 0 0 7.466 7.89l.813-2.846A.75.75 0 0 1 9 4.5ZM18 1.5a.75.75 0 0 1 .728.568l.258 1.036c.236.94.97 1.674 1.91 1.91l1.036.258a.75.75 0 0 1 0 1.456l-1.036.258c-.94.236-1.674.97-1.91 1.91l-.258 1.036a.75.75 0 0 1-1.456 0l-.258-1.036a2.625 2.625 0 0 0-1.91-1.91l-1.036-.258a.75.75 0 0 1 0-1.456l1.036-.258a2.625 2.625 0 0 0 1.91-1.91l.258-1.036A.75.75 0 0 1 18 1.5ZM16.5 15a.75.75 0 0 1 .712.513l.394 1.183c.15.447.5.799.948.948l1.183.395a.75.75 0 0 1 0 1.422l-1.183.395c-.447.15-.799.5-.948.948l-.395 1.183a.75.75 0 0 1-1.422 0l-.395-1.183a1.5 1.5 0 0 0-.948-.948l-1.183-.395a.75.75 0 0 1 0-1.422l1.183-.395c.447-.15.799-.5.948-.948l.395-1.183A.75.75 0 0 1 16.5 15Z" clip-rule="evenodd" />
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

1
src/icon/tag.svg Normal file
View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1767094212200" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5845" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M788.48 629.418667c0-17.066667-5.802667-31.744-17.749333-44.714667L421.205333 235.861333c-12.288-12.288-29.354667-22.869333-49.834667-31.744-21.162667-8.874667-39.936-12.970667-57.002667-12.970667L110.933333 191.146667c-17.066667 0-31.744 6.485333-44.032 18.773333-12.288 12.288-18.773333 26.965333-18.773333 44.032l0 202.752c0 17.066667 4.096 36.522667 12.970667 57.002667 8.874667 21.162667 18.773333 37.546667 31.744 49.834667l349.525333 349.525333c12.288 12.288 26.965333 17.749333 44.032 17.749333 17.066667 0 31.744-5.802667 44.714667-17.749333l239.616-239.616C781.994667 661.162667 788.48 646.485333 788.48 629.418667L788.48 629.418667 788.48 629.418667zM248.490667 392.192c-12.288 12.288-26.965333 18.090667-44.032 18.090667-17.066667 0-31.744-5.802667-44.032-18.090667-12.288-12.288-18.090667-26.965333-18.090667-44.032 0-17.066667 5.802667-31.744 18.090667-44.032 12.288-12.288 26.965333-18.090667 44.032-18.090667 17.066667 0 31.744 5.802667 44.032 18.090667C260.778667 316.416 266.24 331.093333 266.24 348.16 267.264 365.568 260.778667 379.904 248.490667 392.192L248.490667 392.192 248.490667 392.192zM958.122667 584.362667 608.597333 235.861333c-12.288-12.288-29.354667-22.869333-49.834667-31.744C537.6 195.242667 518.826667 191.146667 501.76 191.146667l-109.909333 0c17.066667 0 36.522667 4.096 57.002667 12.970667 21.162667 8.874667 37.546667 18.773333 49.834667 31.744l349.525333 348.501333c12.288 12.970667 18.090667 27.648 18.090667 44.714667s-5.802667 31.744-18.090667 44.032l-229.034667 229.717333c9.898667 9.898667 18.773333 17.066667 25.941333 21.845333 7.168 4.778667 17.066667 6.485333 28.672 6.485333 17.066667 0 31.744-5.802667 44.714667-18.090667l239.616-240.298667c12.288-12.288 17.749333-26.965333 17.749333-44.032S970.069333 597.674667 958.122667 584.362667L958.122667 584.362667 958.122667 584.362667zM958.122667 584.362667" fill="#ec66ab" p-id="5846"></path></svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

3
src/icon/tag2.svg Normal file
View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" class="size-6">
<path fill-rule="evenodd" d="M5.25 2.25a3 3 0 0 0-3 3v4.318a3 3 0 0 0 .879 2.121l9.58 9.581c.92.92 2.39 1.186 3.548.428a18.849 18.849 0 0 0 5.441-5.44c.758-1.16.492-2.629-.428-3.548l-9.58-9.581a3 3 0 0 0-2.122-.879H5.25ZM6.375 7.5a1.125 1.125 0 1 0 0-2.25 1.125 1.125 0 0 0 0 2.25Z" clip-rule="evenodd" />
</svg>

After

Width:  |  Height:  |  Size: 411 B

View File

@ -1,8 +1,8 @@
<template> <template>
<div class="image-container flex justify-center items-center"> <div class="image-container flex w-full">
<n-image ref="lazyRef" class="lazy__img" :src="url" @load="handleLoad" @error="handleError"> <n-image ref="lazyRef" class="lazy__img" :src="url" @load="handleLoad" @error="handleError">
<template #placeholder> <template #placeholder>
<img width="400" :src="loading" alt="loading" /> <icon-loading class="zhuan text-primary w-12 h-12" />
</template> </template>
<template #error> <template #error>
<img :src="errorImg" alt="error" /> <img :src="errorImg" alt="error" />
@ -60,12 +60,35 @@ onMounted(() => {
/* object-fit: cover; */ /* object-fit: cover; */
} }
.lazy__img {
width: 100%;
display: flex;
justify-content: center;
align-items: center;
}
.lazy__img img[alt="loading"], .lazy__img img[alt="loading"],
.lazy__img img[alt="error"] { .lazy__img img[alt="error"] {
width: 80px; width: 100%;
height: 80px; height: auto;
padding: 1em; padding: 1em;
margin: 0 auto; margin: 0 auto;
display: block; }
@keyframes spin {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
.zhuan {
animation: spin 1.5s linear infinite;
} }
</style> </style>

View File

@ -1,7 +1,7 @@
<template> <template>
<div ref="waterfallWrapper" class="waterfall-list" :style="{ height: `${wrapperHeight}px` }"> <div ref="waterfallWrapper" class="waterfall-list" :style="{ height: `${wrapperHeight}px` }">
<div v-for="(item, index) in list" :key="getKey(item, index)" class="waterfall-item"> <div v-for="(item, index) in list" :key="getKey(item, index)" :style="{height:`${colWidth * item.height / item.width}px`}" class="waterfall-item">
<div class="waterfall-card"> <div class="waterfall-card h-full">
<slot name="item" :item="item" :index="index" :url="getRenderURL(item)" /> <slot name="item" :item="item" :index="index" :url="getRenderURL(item)" />
</div> </div>
</div> </div>

View File

@ -7,17 +7,22 @@ import 'vue-devui/tag/style.css';
import App from "./App.vue"; import App from "./App.vue";
import router from "./router"; import router from "./router";
// 自定义主题配置 - 设置主色和二级色\ // 自定义主题配置 - 设置主色和二级色\
import backTop from '@/components/backTop.vue';
import 'md-editor-v3/lib/style.css';
import "vfonts/FiraCode.css"; import "vfonts/FiraCode.css";
import Tag from 'vue-devui/tag'; import Tag from 'vue-devui/tag';
const app = createApp(App);
const app = createApp(App);
app.use(Tag) app.use(Tag)
app.use(createPinia()); app.use(createPinia());
app.use(router); app.use(router);
// app.use(VMdPreview)
useConfig(); useConfig();
for (const key in icon) { for (const key in icon) {
// console.log(key, icon[key]); // console.log(key, icon[key]);
app.component("icon-" + key, icon[key] as any); app.component("icon-" + key, icon[key] as any);
} }
app.component("back-top", backTop);
app.mount("#app"); app.mount("#app");

View File

@ -1,6 +1,6 @@
import NProgress from 'nprogress';
import { createRouter, createWebHistory } from "vue-router"; import { createRouter, createWebHistory } from "vue-router";
import { routes } from 'vue-router/auto-routes'; import { routes } from "vue-router/auto-routes";
routes.unshift({ routes.unshift({
path: "/", path: "/",
redirect: "/home", redirect: "/home",
@ -8,7 +8,17 @@ routes.unshift({
const router = createRouter({ const router = createRouter({
history: createWebHistory(import.meta.env.BASE_URL), history: createWebHistory(import.meta.env.BASE_URL),
routes:routes as any routes: routes as any,
});
// 前置守卫
router.beforeEach((to, from, next) => {
NProgress.start()
next();
});
// 后置守卫
router.afterEach(() => {
NProgress.done()
}); });
export default router; export default router;

View File

@ -98,7 +98,7 @@ export function deepclone<T>(obj: T): T {
* @example * @example
* formatTimeBydate(new Date(), 'yyyy-MM-dd HH:mm:ss'); * formatTimeBydate(new Date(), 'yyyy-MM-dd HH:mm:ss');
*/ */
export function formatTimeBydate(this: Date, f: string): string | undefined { export function formatTimeBydate(this: string, f: string): string | undefined {
return formatTime(this, f); return formatTime(this, f);
} }

View File

@ -1,18 +0,0 @@
<template>
<div class="article-page">
<h1>文章页</h1>
</div>
</template>
<script setup lang="ts">
definePage({
name: 'blog',
meta: {
title: '文章',
}
})
</script>
<style scoped>
/* 文章页样式 */
</style>

View File

@ -14,9 +14,9 @@
backgroundColor="transparent"> > backgroundColor="transparent"> >
<template #item="{ item }"> <template #item="{ item }">
<div <div
class="card rounded-md shadow-lg overflow-hidden group transition-transform duration-300 box-border hover:-translate-y-1.5"> class="card h-full flex items-center justify-center rounded-md shadow-lg overflow-hidden group transition-transform duration-300 box-border hover:-translate-y-1.5">
<!-- <div class="image-wrapper"> --> <!-- <div class="image-wrapper"> -->
<LazyImg class="rounded-md shadow overflow-hidden" :url="item.filepath" /> <LazyImg class="rounded-md overflow-hidden" :Pwidth="item.width" :Pheight="item.height" :url="item.filepath" />
<!-- </div> --> <!-- </div> -->
<div <div
class="hidden truncate group-hover:block absolute rounded-md z-10 truncate top-0 text-center w-full bg-[#00000070] text-white"> class="hidden truncate group-hover:block absolute rounded-md z-10 truncate top-0 text-center w-full bg-[#00000070] text-white">
@ -25,8 +25,8 @@
<div <div
class="absolute rounded-md flex px-2 z-10 truncate bottom-0 w-full bg-[#00000070] text-white justify-between items-center"> class="absolute rounded-md flex px-2 z-10 truncate bottom-0 w-full bg-[#00000070] text-white justify-between items-center">
<div> <span class="text-[#f1d9db] font-600">{{ item.nickname }}</span> 分享</div> <div> <span class="text-[#f1d9db] font-600">{{ item.nickname }}</span> 分享</div>
<div class="text-sm cursor-pointer text-primary" @click="downloadFile(item.filepath)"> <div class="text-sm cursor-pointer text-[#f6cbe7] flex items-center" @click="downloadFile(item.filepath)">
<icon-download class="w-4 h-4" /> <icon-download class="w-5 h-5" />
下载 下载
</div> </div>
</div> </div>
@ -81,6 +81,7 @@ async function getFileList() {
page_num: pn.value, page_num: pn.value,
page_size: ps.value, page_size: ps.value,
}); });
// console.log('>>> --> getFileList --> res:', res); // console.log('>>> --> getFileList --> res:', res);
if (res.data.length < ps.value) { if (res.data.length < ps.value) {
isLoadAll.value = true; isLoadAll.value = true;
@ -102,6 +103,8 @@ async function getFileList() {
} }
// 监听滚动事件 // 监听滚动事件
const handleScroll: any = throttle((e: any) => { const handleScroll: any = throttle((e: any) => {
// console.log('>>> --> handleScroll --> loading:', e) // console.log('>>> --> handleScroll --> loading:', e)

View File

@ -6,7 +6,7 @@
<n-input-group class="shadow "> <n-input-group class="shadow ">
<n-select class="w-24" size="large" v-model:value="broswer" :options="options" <n-select class="w-24" size="large" v-model:value="broswer" :options="options"
@click="cancelSbox"></n-select> @click="cancelSbox"></n-select>
<n-input class="flex-1" size="large" v-model:value="searchWord" @blur="cancelSbox" placeholder="请输入"> <n-input class="flex-1" size="large" autofocus v-model:value="searchWord" @blur="cancelSbox" placeholder="请输入">
<template #suffix> <template #suffix>
<n-icon size="large"> <n-icon size="large">
<icon-search /> <icon-search />
@ -635,7 +635,6 @@ function handdleMenuItem(type: number) {
} }
const navHeight: any = ref(0) const navHeight: any = ref(0)
onMounted(() => { onMounted(() => {
console.log("&&&&&&&&&&&&&&", nav.navH);
contentStyle.value = { contentStyle.value = {
height: `${window.innerHeight - nav.navH}px)` height: `${window.innerHeight - nav.navH}px)`
} }

View File

@ -1,20 +1,243 @@
<template> <template>
<div class="plink-page"> <div class="plink-page pt-4 flex justify-between" :style="boxStyle">
<h1>友链页</h1> <div class="left ml-4 ">
<!-- 友链内容 --> <n-card class="card w-100 shadow">
<template #header>
<div class="flex items-center gap-4 text-primary text-xl font-bold">
<icon-loading class="zhuan text-primary w-6 h-6" />
申请友链
</div>
</template>
<div>
<n-form :model="plinkData" ref="formRef" :rules="rules" label-width="80" :inline="false"
feedback-style="font-size: 12px">
<n-form-item path="name">
<template #label>
<div class="flex items-center gap-1 text-sm text-gray-500">
<user-icon></user-icon>
昵称
</div>
</template>
<n-input v-model:value="plinkData.name" placeholder="请输入你的昵称" />
</n-form-item>
<n-form-item path="title">
<template #label>
<div class="flex items-center gap-1 text-sm text-gray-500">
<site-icon></site-icon>
网站名称
</div>
</template>
<n-input v-model:value="plinkData.title" placeholder="请输入你的网站名称" />
</n-form-item>
<n-form-item path="url">
<template #label>
<div class="flex items-center gap-1 text-sm text-gray-500">
<url-icon></url-icon>
站点地址
</div>
</template>
<n-input v-model:value="plinkData.url" placeholder="请输入你的网站地址" />
</n-form-item>
<n-form-item path="avater">
<template #label>
<div class="flex items-center gap-1 text-sm text-gray-500">
<ava-icon></ava-icon>
头像链接
</div>
</template>
<n-input v-model:value="plinkData.avater" placeholder="请输入你的头像链接" />
</n-form-item>
<n-form-item path="desc">
<template #label>
<div class="flex items-center gap-1 text-sm text-gray-500">
<desc-icon></desc-icon>
站点介绍
</div>
</template>
<n-input type="textarea" :autosize="{ minRows: 2, maxRows: 3 }" maxlength="50"
v-model:value="plinkData.desc" placeholder="请用一句话简短的描述你的站点" />
</n-form-item>
<n-form-item path="tagname">
<template #label>
<div class="flex items-center gap-1 text-sm text-gray-500">
<tag-icon></tag-icon>
标签
</div>
</template>
<n-input type="textarea" :autosize="{ minRows: 2, maxRows: 3 }" maxlength="50"
v-model:value="plinkData.tagname" placeholder="输入你的标签用逗号隔开注意每个标签最多3个字符且只显示前3个标签哦~" />
</n-form-item>
<n-form-item>
<n-button class="w-full" type="primary" @click="submitPut">申请友链</n-button>
</n-form-item>
</n-form>
</div>
</n-card>
<div class="mt-4 text-right text-primary text-sm font-italic">申请完不显示是因为需要审核奥~~</div>
</div>
<n-scrollbar class="h-full">
<div class="right h-full grid grid-cols-3 gap-5 flex-1 px-12">
<div
class="rounded-lg bg-white shadow flex flex-col items-center justify-center p-4 cursor-pointer transition-transform duration-300 box-border hover:-translate-y-1.5"
v-for="p in pList" :key="p.pid" @click="gotoWebsite(p.url)">
<div class="ava">
<n-avatar round size="large" :src="p.avater"></n-avatar>
</div>
<em class="bg-[#fbf2e3] px-4 rounded-full text-sm text-primary mb-4">{{ p.name }}</em>
<div class="font-bold text-xl text-gray-700 mb-1">
{{ p.title }}
</div>
<div class="flex gap-1 truncate mb-1 text-sm">
<div v-for="i in getTags(p.tagname)" :key="i.tid"
:style="{ backgroundColor: getDictValue(tagColorList, 'tag', i, 'color') }"
class="flex items-center gap-1 cursor-pointer text-sm text-white rounded-full px-3">
<icon-tag2 class="w-3 h-3 " />{{ i }}
</div>
</div>
<div class="truncate w-full text-gray-400 text-sm text-center">
{{ p.desc }}
</div>
</div>
</div>
</n-scrollbar>
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import avaIcon from '@/icon/plink/ava.svg';
import descIcon from '@/icon/plink/desc.svg';
import siteIcon from '@/icon/plink/site.svg';
import tagIcon from '@/icon/plink/tag.svg';
import urlIcon from '@/icon/plink/uri.svg';
import userIcon from '@/icon/plink/user.svg';
import { getDictValue } from '@/util';
definePage({ definePage({
name:'plink', name: 'plink',
meta: { meta: {
title: '友链', title: '友链',
} }
}) })
// 友链页逻辑 // 友链页逻辑
const boxStyle: any = ref({})
const nav: any = $store.nav.useNavStore()
const plinkData = reactive<any>({
name: '',
title: '',
avater: '',
url: '',
desc: '',
tagname: '',
});
const rules: any = {
name: [{ required: true, message: '昵称不能为空~~', trigger: ['blur'] }],
title: [{ required: true, message: '网站名称不能为空~~', trigger: ['blur'] }],
url: [{ required: true, message: '站点地址不能为空~~', trigger: ['blur'] }],
avater: [{ required: true, message: '头像链接不能为空~~', trigger: ['blur'] }],
desc: [{ required: true, message: '站点介绍不能为空~~', trigger: ['blur'] }],
tagname: [{ required: true, message: '标签不能为空~~', trigger: ['blur'] }],
}
const pList = ref<any>([])
const formRef = ref<any>(null)
const tagColorList: any = ref([])
async function getPlinkList() {
const res = await $http.plink.getPlinkList()
const list: Array<string> = []
// 对res.data.tags进行去重
res.data.forEach((i: any) => {
const t = getTags(i.tagname)
t.forEach((ii: string) => {
if (!list.includes(ii)) list.push(ii)
})
});
tagColorList.value = list.map((i: string) => {
return {
tag: i,
color: getRandomFromPalette()
}
})
pList.value = res.data
}
function getTags(str: any) {
str = str.replaceAll('', ',')
let tags = str.split(',').slice(0, 3)
tags.forEach((tag: any, idx: number) => {
tags[idx] = tag.trim().slice(0, 4)
});
return tags
}
function gotoWebsite(url: string) {
window.open(url, '_blank')
}
function submitPut() {
formRef.value?.validate(async (valid: boolean) => {
if (valid) {
$msg.error('请完善表单~~')
} else {
const res = await $http.plink.addPlink(plinkData)
if (res?.code !== 200) {
$msg.error(res.msg)
return
}
$msg.success(res.msg)
plinkData.name = ''
plinkData.title = ''
plinkData.avater = ''
plinkData.url = ''
plinkData.desc = ''
plinkData.tagname = ''
getPlinkList()
}
})
}
// 生成一个随机的鲜艳颜色,和白色能对比
function getRandomFromPalette(): string {
const hue = Math.floor(Math.random() * 360);
return hslToHex(hue, 80, 50);
}
function hslToHex(h: number, s: number, l: number): any {
l /= 100;
const a = s * Math.min(l, 1 - l) / 100;
const f = (n: number) => {
const k = (n + h / 30) % 12;
const color = l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);
return Math.round(255 * color).toString(16).padStart(2, '0');
}
return `#${f(0)}${f(8)}${f(4)}`;
}
onMounted(() => {
boxStyle.value = {
height: window.innerHeight - nav.navH - 1 + 'px',
}
getPlinkList()
})
</script> </script>
<style scoped> <style scoped>
/* 友链页样式 */ /* 无限旋转动画 */
@keyframes spin {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
.zhuan {
animation: spin 1.5s linear infinite;
}
:deep(.n-form-item-feedback__line) {
text-align: right;
font-size: 12px !important;
}
</style> </style>

221
src/views/blog/[bid].vue Normal file
View File

@ -0,0 +1,221 @@
<template>
<div class="flex justify-between">
<div class="left w-[20%] shadow">
<div class="fixed top-20 left-8">
<div class="text-center text-3xl text-bold mb-2">目录</div>
<MdCatalog :editorId="blogData.aid" class="my-cata" :scrollElement="scrollElement" />
</div>
</div>
<div class="flex-1">
<n-breadcrumb class="m-2" separator="|">
<n-breadcrumb-item href="/blog/blog">
文章
</n-breadcrumb-item>
<n-breadcrumb-item>
{{ blogData.title }}
</n-breadcrumb-item>
</n-breadcrumb>
<div class="w-full px-1/20">
<!-- <div class="text-center text-[40px] font-bold text-black` mt-10">{{ blogData.title }}</div> -->
<div class="my-4 bg-white shadow-lg p-4 rounded-md">
<n-collapse @item-header-click="AISum" arrow-placement="right">
<n-collapse-item>
<template #arrow>
<div class=" text-primary ml-2">
<!-- <icon-star class="w-6" /> -->
</div>
</template>
<template #header>
<div class="text-primary flex">
<icon-star class="w-6 mx-2" />
<div class="text-center text-[20px] font-bold">AI 摘要</div>
</div>
</template>
<template #header-extra>
<div class="text-primary flex">
<icon-star class="w-6 mx-2" />
</div>
</template>
<div class="indent-lg text-gray-500">
{{ msg.replaceAll('\\n', '<br>') }}
</div>
</n-collapse-item>
</n-collapse>
</div>
<div class="flex gap-2 justify-center my-4">
<em class="text-primary">
{{ blogData.nickname }}</em>
<em class="time">{{ formatTime(blogData.updated_at, "YYYY年MM月DD日hh时") }}</em>
</div>
<div class="flex flex-wrap gap-4 justify-center my-4">
<div v-for="item in tags" :key="item.tid" class="flex items-center gap-1 text-primary cursor-pointer">
<n-icon><icon-tag /></n-icon>
{{ item }}
</div>
</div>
<MdPreview ref="mdp" theme="light" class="relative " :editorId="blogData.aid" previewTheme="my"
:modelValue="markdown" />
</div>
</div>
</div>
</template>
<script setup lang="ts">
definePage({
name: 'blog/:bid',
path: '/blog/:bid',
meta: {
title: '文章详情',
}
})
import { formatTime } from '@/util';
import type { ExposeParam } from 'md-editor-v3';
import { MdCatalog, MdPreview } from 'md-editor-v3';
const editorRef = ref<ExposeParam>();
const scrollElement: HTMLElement = document.querySelector('.n-scrollbar .n-scrollbar-container') as HTMLElement;
const tags = ref<any[]>([])
const route: any = useRoute()
const msg = ref<any>('...')
const aimask = ref(false)
const markdown = ref('');
const blogData = ref<any>({
aid: 'preview-only',
updated_at: Date.now()
})
async function getBlogDetail() {
const bid: any = route.params?.bid || 0
// console.log('>>> --> getBlogDetail --> bid:', route, bid)
const res = await $http.blog.getBlogDetail(bid)
console.log('>>> --> getBlogDetail --> res:', res.data)
blogData.value = res.data
let ts = res.data.tags
ts = ts.replaceAll('', ',')
tags.value = ts.split(',')
editorRef.value?.toggleCatalog(true)
markdown.value = res.data.cont
// AISum()
}
// ai总结
async function AISum() {
console.log('>>> --> AISum --> AISum:', AISum)
if (aimask.value) return
const response = await fetch('https://api.siliconflow.cn/v1/chat/completions', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: 'Bearer sk-jwwmhmxsjtseyekknqmamlvzmrkmwfvuacnssbwfufogrkdg'
},
body: JSON.stringify({
model: "Qwen/Qwen3-8B",
messages: [{ role: 'user', content: "用一段话对以下内容做一个摘要(语气可爱带表情):" + blogData.value.cont }],
stream: true
})
})
console.log('>>> --> AISum --> response:', response)
const reader = response.body?.getReader()
const decoder = new TextDecoder('utf-8')
if (!reader) return
msg.value = ''
let done = false
while (!done) {
const { value, done: doneReading } = await reader.read()
done = doneReading
const chunk = decoder.decode(value)
const match = chunk.match(/"content":"(.*?)"/)
if (match && match[1]) {
msg.value += match[1]
aimask.value = true
}
}
// const data = await response.json()
// console.log('>>> --> AISum --> data:', data)
}
onMounted(() => {
getBlogDetail()
})
</script>
<style lang="less">
@import "@/assets/myblog.less";
.my-cata {
* {
cursor: pointer;
}
.md-editor-catalog-indicator {
display: none;
}
.md-editor-catalog-active>span {
padding: 5px 15px !important;
border-radius: 30px;
color: white;
background-color: @primary;
position: relative;
&::after {
content: "✦";
position: static !important;
transform: none !important;
margin-left: 12px !important;
flex-shrink: 0;
display: inline-block !important;
line-height: 1;
font-size: 14px;
// font-family: Arial, sans-serif;
color: rgba(255, 255, 255, 0.9);
z-index: 10;
animation: outline-twinkle 1.5s infinite alternate;
}
}
.md-editor-catalog-link {
padding-block: 1px !important;
}
.md-editor-catalog-wrapper span {
padding: 5px 15px !important;
transition: all 0.6s ease-in-out;
&:hover {
padding: 5px 15px !important;
border-radius: 30px;
color: white;
background-color: @primary;
}
}
}
</style>
<style scoped lang="less">
/* 文章页样式 */
// :deep(.md img) {
// width: auto !important;
// height: 200px !important;
// }
// :deep(.md-editor-catalog-active>span) {
// color: @primary;
// }
// :deep(.md-editor-catalog-indicator) {
// background-color: @primary;
// }
// :deep(.md-editor-catalog-link span):hover {
// color: @primary;
// }</style>

184
src/views/blog/index.vue Normal file
View File

@ -0,0 +1,184 @@
<template>
<div class="article-page w-full flex" :style="boxStyle">
<div class="w-1/4 shadow relative">
<div class="card w-2/3 absolute top-16 left-1/6">
<div @click="clickCate(i, idx)" v-for="(i, idx) in cateList" :key="i.cid"
:class="{ '!bg-primary text-white': idx == currentCateIdx }"
class="relative cate flex my-6 py-6 px-8 justify-between text-xl font-bold bg-white shadow rounded cursor-pointer">
<div class="flex items-center">
<icon-arti class="w-5 h-5 text-primary mr-3" :class="{ 'text-white': idx == currentCateIdx }"></icon-arti>
<span>{{ i.name }}</span>
</div>
<div class="bg-primary px-4 rounded-full text-white ext-sm flex items-center gap-2">
{{ i.total || 0 }}
</div>
</div>
</div>
</div>
<div class="blog-list w-3/4 mt-10">
<div v-show="blogList.length == 0" class="ml-50 text-gray-500 mt-20">
什么都没有呢~ ~
</div>
<div v-for="item in blogList" :key="item.aid" class="rounded-lg p-4 w-[80%] ml-1/10 my-8 shadow cursor-pointer"
@click="$router.push(`/blog/${item.aid}`)">
<div class="flex justify-right gap-4 mb-2 text-gray-600">
<em class="flex items-center gap-1 text-sm">
<n-icon><icon-date /></n-icon>
{{ formatTime(item.updated_at, 'YYYY年MM月DD日') }}
</em>
<em class="flex items-center gap-1 text-sm">
<n-icon><icon-pen /></n-icon>
{{ getSize(item.cont) }}
</em>
<em class="flex items-center gap-1 text-sm ">
<n-icon><icon-author /></n-icon>
{{ item.nickname }}</em>
</div>
<div class="text-xl font-bold text-primary mb-2">{{ item.title }}</div>
<div class="text-sm text-gray-500 mb-4 line-clamp-3">{{ item.pro }}</div>
<div class="flex gap-4">
<div v-for="i in getTags(item.tags)" :key="i.tid"
:style="{ backgroundColor: getDictValue(tagColorList, 'tag', i, 'color') }"
class="flex items-center gap-1 cursor-pointer text-white rounded-full px-3">
<icon-tag2 class="w-4 h-4" />{{ i }}
</div>
</div>
</div>
<div v-show="blogList.length > page_size" class="mt-20 w-[80%] ml-1/10 cursor-pointer flex justify-center">
<n-pagination v-model:page="page_num" :page-count="total" :page-slot="5" @update:page="getBlogList" />
</div>
</div>
</div>
</template>
<script setup lang="ts">
import { formatTime, getDictValue } from '@/util'
definePage({
name: 'blog',
meta: {
title: '文章',
}
})
const blogList = ref<any[]>([])
const boxStyle = ref({})
const nav: any = $store.nav.useNavStore()
const cateList = ref<any[]>([])
const currentCateIdx = ref(-1)
const page_size = ref(5)
const page_num = ref(1)
const total = ref(0)
const category = ref('')
const tagColorList: any = ref([])
function clickCate(item: any, idx: number) {
if (currentCateIdx.value == idx) {
currentCateIdx.value = -1
category.value = ''
getBlogList()
total.value = cateList.value.reduce((acc: any, cur: any) => acc + cur.total, 0)
return
}
currentCateIdx.value = idx
category.value = item.cid
getBlogList()
total.value = item.total
console.log('>>> --> clickCate --> total.value:', total.value)
}
async function getBlogList() {
const res = await $http.blog.getBlogList({
category: category.value, page_size: page_size.value, page_num: page_num.value
})
const list: Array<string> = []
// 对res.data.tags进行去重
res.data.forEach((i: any) => {
const t = getTags(i.tags)
t.forEach((ii: string) => {
if (!list.includes(ii)) list.push(ii)
})
});
tagColorList.value = list.map((i: string) => {
return {
tag: i,
color: getRandomFromPalette()
}
})
blogList.value = res.data
}
// 计算markdown的文字数量
function getSize(str: string) {
const reg = /[\u0000-\u0009\u000B-\u001F\u007F-\u009F\u00AD\u0600-\u0604\u070F\u17B4\u17B5\u200B-\u200D\u3000]/g;
return str.replace(reg, '').length;
}
// 生成一个随机的鲜艳颜色,和白色能对比
function getRandomFromPalette(): string {
const hue = Math.floor(Math.random() * 360);
return hslToHex(hue, 80, 50);
}
function hslToHex(h: number, s: number, l: number): any {
l /= 100;
const a = s * Math.min(l, 1 - l) / 100;
const f = (n: number) => {
const k = (n + h / 30) % 12;
const color = l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);
return Math.round(255 * color).toString(16).padStart(2, '0');
}
return `#${f(0)}${f(8)}${f(4)}`;
}
function getTags(str: any) {
str = str.replaceAll('', ',')
let tags = str.split(',').slice(0, 5)
tags.forEach((tag: any, idx: number) => {
tags[idx] = tag.trim().slice(0, 4)
});
return tags
}
async function getCateList() {
const res = await $http.blog.getCateList()
console.log('>>> --> getCateList --> res:', res.data)
cateList.value = res.data
total.value = cateList.value.reduce((acc: any, cur: any) => acc + cur.total, 0)
}
onMounted(() => {
boxStyle.value = {
height: `calc(100vh - ${nav.navH + 1}px)`,
}
getBlogList()
getCateList()
})
</script>
<style scoped>
/* 文章页样式 */
@keyframes fangda {
0% {
transform: scale(1);
}
50% {
transform: scale(1.1);
}
100% {
transform: scale(1);
}
}
.cate:hover {
animation: fangda 01s ease-in-out 1;
}
</style>

View File

@ -11,6 +11,7 @@
], ],
"exclude": ["src/**/__tests__/*"], "exclude": ["src/**/__tests__/*"],
"compilerOptions": { "compilerOptions": {
"target": "es2021",
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
"types":["unplugin-vue-router/client"], "types":["unplugin-vue-router/client"],
"paths": { "paths": {

View File

@ -11,7 +11,8 @@
"compilerOptions": { "compilerOptions": {
"noEmit": true, "noEmit": true,
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
"target": "es2021",
"lib": ["es2021.string", "dom"],
"module": "ESNext", "module": "ESNext",
"moduleResolution": "Bundler", "moduleResolution": "Bundler",
"types": ["node"] "types": ["node"]

9
typed-router.d.ts vendored
View File

@ -19,7 +19,8 @@ declare module 'vue-router/auto-routes' {
*/ */
export interface RouteNamedMap { export interface RouteNamedMap {
'apps': RouteRecordInfo<'apps', '/Apps', Record<never, never>, Record<never, never>>, 'apps': RouteRecordInfo<'apps', '/Apps', Record<never, never>, Record<never, never>>,
'blog': RouteRecordInfo<'blog', '/Blog', Record<never, never>, Record<never, never>>, 'blog': RouteRecordInfo<'blog', '/blog', Record<never, never>, Record<never, never>>,
'blog/:bid': RouteRecordInfo<'blog/:bid', '/blog/:bid', { bid: ParamValue<true> }, { bid: ParamValue<false> }>,
'gallery': RouteRecordInfo<'gallery', '/Gallery', Record<never, never>, Record<never, never>>, 'gallery': RouteRecordInfo<'gallery', '/Gallery', Record<never, never>, Record<never, never>>,
'home': RouteRecordInfo<'home', '/Home', Record<never, never>, Record<never, never>>, 'home': RouteRecordInfo<'home', '/Home', Record<never, never>, Record<never, never>>,
'404': RouteRecordInfo<'404', '/NotFound', Record<never, never>, Record<never, never>>, '404': RouteRecordInfo<'404', '/NotFound', Record<never, never>, Record<never, never>>,
@ -42,10 +43,14 @@ declare module 'vue-router/auto-routes' {
routes: 'apps' routes: 'apps'
views: never views: never
} }
'src/views/Blog.vue': { 'src/views/blog/index.vue': {
routes: 'blog' routes: 'blog'
views: never views: never
} }
'src/views/blog/[bid].vue': {
routes: 'blog/:bid'
views: never
}
'src/views/Gallery.vue': { 'src/views/Gallery.vue': {
routes: 'gallery' routes: 'gallery'
views: never views: never

View File

@ -5,6 +5,7 @@ export default defineConfig({
theme: { theme: {
colors: { colors: {
primary: "#ec66ab", primary: "#ec66ab",
deepp: "#a7415d"
}, },
}, },
}); });

677
yarn.lock
View File

@ -293,6 +293,344 @@
resolved "https://registry.npmmirror.com/@braintree/sanitize-url/-/sanitize-url-6.0.4.tgz#923ca57e173c6b232bbbb07347b1be982f03e783" resolved "https://registry.npmmirror.com/@braintree/sanitize-url/-/sanitize-url-6.0.4.tgz#923ca57e173c6b232bbbb07347b1be982f03e783"
integrity sha512-s3jaWicZd0pkP0jf5ysyHUI/RE7MHos6qlToFcGWXVp+ykHOy77OUMrfbgJ9it2C5bow7OIQwYYaHjk9XlBQ2A== integrity sha512-s3jaWicZd0pkP0jf5ysyHUI/RE7MHos6qlToFcGWXVp+ykHOy77OUMrfbgJ9it2C5bow7OIQwYYaHjk9XlBQ2A==
"@codemirror/autocomplete@^6.0.0", "@codemirror/autocomplete@^6.18.7", "@codemirror/autocomplete@^6.3.2", "@codemirror/autocomplete@^6.7.1":
version "6.20.0"
resolved "https://registry.npmmirror.com/@codemirror/autocomplete/-/autocomplete-6.20.0.tgz#db818c12dce892a93fb8abadc2426febb002f8c1"
integrity sha512-bOwvTOIJcG5FVo5gUUupiwYh8MioPLQ4UcqbcRf7UQ98X90tCa9E1kZ3Z7tqwpZxYyOvh1YTYbmZE9RTfTp5hg==
dependencies:
"@codemirror/language" "^6.0.0"
"@codemirror/state" "^6.0.0"
"@codemirror/view" "^6.17.0"
"@lezer/common" "^1.0.0"
"@codemirror/commands@^6.0.0", "@codemirror/commands@^6.8.1":
version "6.10.1"
resolved "https://registry.npmmirror.com/@codemirror/commands/-/commands-6.10.1.tgz#a17a48f846947f48150b9670a3de8c4352b69256"
integrity sha512-uWDWFypNdQmz2y1LaNJzK7fL7TYKLeUAU0npEC685OKTF3KcQ2Vu3klIM78D7I6wGhktme0lh3CuQLv0ZCrD9Q==
dependencies:
"@codemirror/language" "^6.0.0"
"@codemirror/state" "^6.4.0"
"@codemirror/view" "^6.27.0"
"@lezer/common" "^1.1.0"
"@codemirror/lang-angular@^0.1.0":
version "0.1.4"
resolved "https://registry.npmmirror.com/@codemirror/lang-angular/-/lang-angular-0.1.4.tgz#5b9e940786ba201a9a42eab6db9501fa3fe2292a"
integrity sha512-oap+gsltb/fzdlTQWD6BFF4bSLKcDnlxDsLdePiJpCVNKWXSTAbiiQeYI3UmES+BLAdkmIC1WjyztC1pi/bX4g==
dependencies:
"@codemirror/lang-html" "^6.0.0"
"@codemirror/lang-javascript" "^6.1.2"
"@codemirror/language" "^6.0.0"
"@lezer/common" "^1.2.0"
"@lezer/highlight" "^1.0.0"
"@lezer/lr" "^1.3.3"
"@codemirror/lang-cpp@^6.0.0":
version "6.0.3"
resolved "https://registry.npmmirror.com/@codemirror/lang-cpp/-/lang-cpp-6.0.3.tgz#b175b59fcde8dd6e563b7feee8bbed81963a9491"
integrity sha512-URM26M3vunFFn9/sm6rzqrBzDgfWuDixp85uTY49wKudToc2jTHUrKIGGKs+QWND+YLofNNZpxcNGRynFJfvgA==
dependencies:
"@codemirror/language" "^6.0.0"
"@lezer/cpp" "^1.0.0"
"@codemirror/lang-css@^6.0.0", "@codemirror/lang-css@^6.2.0":
version "6.3.1"
resolved "https://registry.npmmirror.com/@codemirror/lang-css/-/lang-css-6.3.1.tgz#763ca41aee81bb2431be55e3cfcc7cc8e91421a3"
integrity sha512-kr5fwBGiGtmz6l0LSJIbno9QrifNMUusivHbnA1H6Dmqy4HZFte3UAICix1VuKo0lMPKQr2rqB+0BkKi/S3Ejg==
dependencies:
"@codemirror/autocomplete" "^6.0.0"
"@codemirror/language" "^6.0.0"
"@codemirror/state" "^6.0.0"
"@lezer/common" "^1.0.2"
"@lezer/css" "^1.1.7"
"@codemirror/lang-go@^6.0.0":
version "6.0.1"
resolved "https://registry.npmmirror.com/@codemirror/lang-go/-/lang-go-6.0.1.tgz#598222c90f56eae28d11069c612ca64d0306b057"
integrity sha512-7fNvbyNylvqCphW9HD6WFnRpcDjr+KXX/FgqXy5H5ZS0eC5edDljukm/yNgYkwTsgp2busdod50AOTIy6Jikfg==
dependencies:
"@codemirror/autocomplete" "^6.0.0"
"@codemirror/language" "^6.6.0"
"@codemirror/state" "^6.0.0"
"@lezer/common" "^1.0.0"
"@lezer/go" "^1.0.0"
"@codemirror/lang-html@^6.0.0":
version "6.4.11"
resolved "https://registry.npmmirror.com/@codemirror/lang-html/-/lang-html-6.4.11.tgz#c46ba46ae642fd567cf05c4129005d2913ac248d"
integrity sha512-9NsXp7Nwp891pQchI7gPdTwBuSuT3K65NGTHWHNJ55HjYcHLllr0rbIZNdOzas9ztc1EUVBlHou85FFZS4BNnw==
dependencies:
"@codemirror/autocomplete" "^6.0.0"
"@codemirror/lang-css" "^6.0.0"
"@codemirror/lang-javascript" "^6.0.0"
"@codemirror/language" "^6.4.0"
"@codemirror/state" "^6.0.0"
"@codemirror/view" "^6.17.0"
"@lezer/common" "^1.0.0"
"@lezer/css" "^1.1.0"
"@lezer/html" "^1.3.12"
"@codemirror/lang-java@^6.0.0":
version "6.0.2"
resolved "https://registry.npmmirror.com/@codemirror/lang-java/-/lang-java-6.0.2.tgz#601d5b3d774a4a997d11647ccb6c05702c54bd5b"
integrity sha512-m5Nt1mQ/cznJY7tMfQTJchmrjdjQ71IDs+55d1GAa8DGaB8JXWsVCkVT284C3RTASaY43YknrK2X3hPO/J3MOQ==
dependencies:
"@codemirror/language" "^6.0.0"
"@lezer/java" "^1.0.0"
"@codemirror/lang-javascript@^6.0.0", "@codemirror/lang-javascript@^6.1.2":
version "6.2.4"
resolved "https://registry.npmmirror.com/@codemirror/lang-javascript/-/lang-javascript-6.2.4.tgz#eef2227d1892aae762f3a0f212f72bec868a02c5"
integrity sha512-0WVmhp1QOqZ4Rt6GlVGwKJN3KW7Xh4H2q8ZZNGZaP6lRdxXJzmjm4FqvmOojVj6khWJHIb9sp7U/72W7xQgqAA==
dependencies:
"@codemirror/autocomplete" "^6.0.0"
"@codemirror/language" "^6.6.0"
"@codemirror/lint" "^6.0.0"
"@codemirror/state" "^6.0.0"
"@codemirror/view" "^6.17.0"
"@lezer/common" "^1.0.0"
"@lezer/javascript" "^1.0.0"
"@codemirror/lang-jinja@^6.0.0":
version "6.0.0"
resolved "https://registry.npmmirror.com/@codemirror/lang-jinja/-/lang-jinja-6.0.0.tgz#cc02cd1e45d1fed1226e3c3b44615503f794c904"
integrity sha512-47MFmRcR8UAxd8DReVgj7WJN1WSAMT7OJnewwugZM4XiHWkOjgJQqvEM1NpMj9ALMPyxmlziEI1opH9IaEvmaw==
dependencies:
"@codemirror/lang-html" "^6.0.0"
"@codemirror/language" "^6.0.0"
"@lezer/common" "^1.2.0"
"@lezer/highlight" "^1.2.0"
"@lezer/lr" "^1.4.0"
"@codemirror/lang-json@^6.0.0":
version "6.0.2"
resolved "https://registry.npmmirror.com/@codemirror/lang-json/-/lang-json-6.0.2.tgz#054b160671306667e25d80385286049841836179"
integrity sha512-x2OtO+AvwEHrEwR0FyyPtfDUiloG3rnVTSZV1W8UteaLL8/MajQd8DpvUb2YVzC+/T18aSDv0H9mu+xw0EStoQ==
dependencies:
"@codemirror/language" "^6.0.0"
"@lezer/json" "^1.0.0"
"@codemirror/lang-less@^6.0.0":
version "6.0.2"
resolved "https://registry.npmmirror.com/@codemirror/lang-less/-/lang-less-6.0.2.tgz#2e3d82a3ddb8710e6409689cd4a28c66558d0cb8"
integrity sha512-EYdQTG22V+KUUk8Qq582g7FMnCZeEHsyuOJisHRft/mQ+ZSZ2w51NupvDUHiqtsOy7It5cHLPGfHQLpMh9bqpQ==
dependencies:
"@codemirror/lang-css" "^6.2.0"
"@codemirror/language" "^6.0.0"
"@lezer/common" "^1.2.0"
"@lezer/highlight" "^1.0.0"
"@lezer/lr" "^1.0.0"
"@codemirror/lang-liquid@^6.0.0":
version "6.3.1"
resolved "https://registry.npmmirror.com/@codemirror/lang-liquid/-/lang-liquid-6.3.1.tgz#3cf26003a1b3f4233eafd2a287cf64eb4a12dbc1"
integrity sha512-S/jE/D7iij2Pu70AC65ME6AYWxOOcX20cSJvaPgY5w7m2sfxsArAcUAuUgm/CZCVmqoi9KiOlS7gj/gyLipABw==
dependencies:
"@codemirror/autocomplete" "^6.0.0"
"@codemirror/lang-html" "^6.0.0"
"@codemirror/language" "^6.0.0"
"@codemirror/state" "^6.0.0"
"@codemirror/view" "^6.0.0"
"@lezer/common" "^1.0.0"
"@lezer/highlight" "^1.0.0"
"@lezer/lr" "^1.3.1"
"@codemirror/lang-markdown@^6.0.0", "@codemirror/lang-markdown@^6.3.4":
version "6.5.0"
resolved "https://registry.npmmirror.com/@codemirror/lang-markdown/-/lang-markdown-6.5.0.tgz#29df87310a555b007beba8e12893363956a26e8e"
integrity sha512-0K40bZ35jpHya6FriukbgaleaqzBLZfOh7HuzqbMxBXkbYMJDxfF39c23xOgxFezR+3G+tR2/Mup+Xk865OMvw==
dependencies:
"@codemirror/autocomplete" "^6.7.1"
"@codemirror/lang-html" "^6.0.0"
"@codemirror/language" "^6.3.0"
"@codemirror/state" "^6.0.0"
"@codemirror/view" "^6.0.0"
"@lezer/common" "^1.2.1"
"@lezer/markdown" "^1.0.0"
"@codemirror/lang-php@^6.0.0":
version "6.0.2"
resolved "https://registry.npmmirror.com/@codemirror/lang-php/-/lang-php-6.0.2.tgz#bdc439d195c8e73513bc5b971a99a57b5c99ee55"
integrity sha512-ZKy2v1n8Fc8oEXj0Th0PUMXzQJ0AIR6TaZU+PbDHExFwdu+guzOA4jmCHS1Nz4vbFezwD7LyBdDnddSJeScMCA==
dependencies:
"@codemirror/lang-html" "^6.0.0"
"@codemirror/language" "^6.0.0"
"@codemirror/state" "^6.0.0"
"@lezer/common" "^1.0.0"
"@lezer/php" "^1.0.0"
"@codemirror/lang-python@^6.0.0":
version "6.2.1"
resolved "https://registry.npmmirror.com/@codemirror/lang-python/-/lang-python-6.2.1.tgz#37c9930716110156865a95c548aa0eef5552863a"
integrity sha512-IRjC8RUBhn9mGR9ywecNhB51yePWCGgvHfY1lWN/Mrp3cKuHr0isDKia+9HnvhiWNnMpbGhWrkhuWOc09exRyw==
dependencies:
"@codemirror/autocomplete" "^6.3.2"
"@codemirror/language" "^6.8.0"
"@codemirror/state" "^6.0.0"
"@lezer/common" "^1.2.1"
"@lezer/python" "^1.1.4"
"@codemirror/lang-rust@^6.0.0":
version "6.0.2"
resolved "https://registry.npmmirror.com/@codemirror/lang-rust/-/lang-rust-6.0.2.tgz#69146e6b3e8f961ef149059aecb9e07bfd7bf3bd"
integrity sha512-EZaGjCUegtiU7kSMvOfEZpaCReowEf3yNidYu7+vfuGTm9ow4mthAparY5hisJqOHmJowVH3Upu+eJlUji6qqA==
dependencies:
"@codemirror/language" "^6.0.0"
"@lezer/rust" "^1.0.0"
"@codemirror/lang-sass@^6.0.0":
version "6.0.2"
resolved "https://registry.npmmirror.com/@codemirror/lang-sass/-/lang-sass-6.0.2.tgz#38c1b0a1326cc9f5cb2741d2cd51cfbcd7abc0b2"
integrity sha512-l/bdzIABvnTo1nzdY6U+kPAC51czYQcOErfzQ9zSm9D8GmNPD0WTW8st/CJwBTPLO8jlrbyvlSEcN20dc4iL0Q==
dependencies:
"@codemirror/lang-css" "^6.2.0"
"@codemirror/language" "^6.0.0"
"@codemirror/state" "^6.0.0"
"@lezer/common" "^1.0.2"
"@lezer/sass" "^1.0.0"
"@codemirror/lang-sql@^6.0.0":
version "6.10.0"
resolved "https://registry.npmmirror.com/@codemirror/lang-sql/-/lang-sql-6.10.0.tgz#49bfbf6cf31516a99e674da9a399f4426101a95a"
integrity sha512-6ayPkEd/yRw0XKBx5uAiToSgGECo/GY2NoJIHXIIQh1EVwLuKoU8BP/qK0qH5NLXAbtJRLuT73hx7P9X34iO4w==
dependencies:
"@codemirror/autocomplete" "^6.0.0"
"@codemirror/language" "^6.0.0"
"@codemirror/state" "^6.0.0"
"@lezer/common" "^1.2.0"
"@lezer/highlight" "^1.0.0"
"@lezer/lr" "^1.0.0"
"@codemirror/lang-vue@^0.1.1":
version "0.1.3"
resolved "https://registry.npmmirror.com/@codemirror/lang-vue/-/lang-vue-0.1.3.tgz#bf79b9152cc18b4903d64c1f67e186ae045c8a97"
integrity sha512-QSKdtYTDRhEHCfo5zOShzxCmqKJvgGrZwDQSdbvCRJ5pRLWBS7pD/8e/tH44aVQT6FKm0t6RVNoSUWHOI5vNug==
dependencies:
"@codemirror/lang-html" "^6.0.0"
"@codemirror/lang-javascript" "^6.1.2"
"@codemirror/language" "^6.0.0"
"@lezer/common" "^1.2.0"
"@lezer/highlight" "^1.0.0"
"@lezer/lr" "^1.3.1"
"@codemirror/lang-wast@^6.0.0":
version "6.0.2"
resolved "https://registry.npmmirror.com/@codemirror/lang-wast/-/lang-wast-6.0.2.tgz#d2b14175e5e80d7878cbbb29e20ec90dc12d3a2b"
integrity sha512-Imi2KTpVGm7TKuUkqyJ5NRmeFWF7aMpNiwHnLQe0x9kmrxElndyH0K6H/gXtWwY6UshMRAhpENsgfpSwsgmC6Q==
dependencies:
"@codemirror/language" "^6.0.0"
"@lezer/common" "^1.2.0"
"@lezer/highlight" "^1.0.0"
"@lezer/lr" "^1.0.0"
"@codemirror/lang-xml@^6.0.0":
version "6.1.0"
resolved "https://registry.npmmirror.com/@codemirror/lang-xml/-/lang-xml-6.1.0.tgz#e3e786e1a89fdc9520efe75c1d6d3de1c40eb91c"
integrity sha512-3z0blhicHLfwi2UgkZYRPioSgVTo9PV5GP5ducFH6FaHy0IAJRg+ixj5gTR1gnT/glAIC8xv4w2VL1LoZfs+Jg==
dependencies:
"@codemirror/autocomplete" "^6.0.0"
"@codemirror/language" "^6.4.0"
"@codemirror/state" "^6.0.0"
"@codemirror/view" "^6.0.0"
"@lezer/common" "^1.0.0"
"@lezer/xml" "^1.0.0"
"@codemirror/lang-yaml@^6.0.0":
version "6.1.2"
resolved "https://registry.npmmirror.com/@codemirror/lang-yaml/-/lang-yaml-6.1.2.tgz#c84280c68fa7af456a355d91183b5e537e9b7038"
integrity sha512-dxrfG8w5Ce/QbT7YID7mWZFKhdhsaTNOYjOkSIMt1qmC4VQnXSDSYVHHHn8k6kJUfIhtLo8t1JJgltlxWdsITw==
dependencies:
"@codemirror/autocomplete" "^6.0.0"
"@codemirror/language" "^6.0.0"
"@codemirror/state" "^6.0.0"
"@lezer/common" "^1.2.0"
"@lezer/highlight" "^1.2.0"
"@lezer/lr" "^1.0.0"
"@lezer/yaml" "^1.0.0"
"@codemirror/language-data@^6.5.1":
version "6.5.2"
resolved "https://registry.npmmirror.com/@codemirror/language-data/-/language-data-6.5.2.tgz#404dc3d50a80d0f76bc8f81f93cc1d82e322417c"
integrity sha512-CPkWBKrNS8stYbEU5kwBwTf3JB1kghlbh4FSAwzGW2TEscdeHHH4FGysREW86Mqnj3Qn09s0/6Ea/TutmoTobg==
dependencies:
"@codemirror/lang-angular" "^0.1.0"
"@codemirror/lang-cpp" "^6.0.0"
"@codemirror/lang-css" "^6.0.0"
"@codemirror/lang-go" "^6.0.0"
"@codemirror/lang-html" "^6.0.0"
"@codemirror/lang-java" "^6.0.0"
"@codemirror/lang-javascript" "^6.0.0"
"@codemirror/lang-jinja" "^6.0.0"
"@codemirror/lang-json" "^6.0.0"
"@codemirror/lang-less" "^6.0.0"
"@codemirror/lang-liquid" "^6.0.0"
"@codemirror/lang-markdown" "^6.0.0"
"@codemirror/lang-php" "^6.0.0"
"@codemirror/lang-python" "^6.0.0"
"@codemirror/lang-rust" "^6.0.0"
"@codemirror/lang-sass" "^6.0.0"
"@codemirror/lang-sql" "^6.0.0"
"@codemirror/lang-vue" "^0.1.1"
"@codemirror/lang-wast" "^6.0.0"
"@codemirror/lang-xml" "^6.0.0"
"@codemirror/lang-yaml" "^6.0.0"
"@codemirror/language" "^6.0.0"
"@codemirror/legacy-modes" "^6.4.0"
"@codemirror/language@^6.0.0", "@codemirror/language@^6.11.3", "@codemirror/language@^6.3.0", "@codemirror/language@^6.4.0", "@codemirror/language@^6.6.0", "@codemirror/language@^6.8.0":
version "6.12.1"
resolved "https://registry.npmmirror.com/@codemirror/language/-/language-6.12.1.tgz#d615f7b099a39248312feaaf0bfafce4418aac1b"
integrity sha512-Fa6xkSiuGKc8XC8Cn96T+TQHYj4ZZ7RdFmXA3i9xe/3hLHfwPZdM+dqfX0Cp0zQklBKhVD8Yzc8LS45rkqcwpQ==
dependencies:
"@codemirror/state" "^6.0.0"
"@codemirror/view" "^6.23.0"
"@lezer/common" "^1.5.0"
"@lezer/highlight" "^1.0.0"
"@lezer/lr" "^1.0.0"
style-mod "^4.0.0"
"@codemirror/legacy-modes@^6.4.0":
version "6.5.2"
resolved "https://registry.npmmirror.com/@codemirror/legacy-modes/-/legacy-modes-6.5.2.tgz#7e2976c79007cd3fa9ed8a1d690892184a7f5ecf"
integrity sha512-/jJbwSTazlQEDOQw2FJ8LEEKVS72pU0lx6oM54kGpL8t/NJ2Jda3CZ4pcltiKTdqYSRk3ug1B3pil1gsjA6+8Q==
dependencies:
"@codemirror/language" "^6.0.0"
"@codemirror/lint@^6.0.0":
version "6.9.2"
resolved "https://registry.npmmirror.com/@codemirror/lint/-/lint-6.9.2.tgz#09ed0aedec13381c9e36e1ac5d126027740c3ef4"
integrity sha512-sv3DylBiIyi+xKwRCJAAsBZZZWo82shJ/RTMymLabAdtbkV5cSKwWDeCgtUq3v8flTaXS2y1kKkICuRYtUswyQ==
dependencies:
"@codemirror/state" "^6.0.0"
"@codemirror/view" "^6.35.0"
crelt "^1.0.5"
"@codemirror/search@^6.0.0", "@codemirror/search@^6.5.11":
version "6.5.11"
resolved "https://registry.npmmirror.com/@codemirror/search/-/search-6.5.11.tgz#a324ffee36e032b7f67aa31c4fb9f3e6f9f3ed63"
integrity sha512-KmWepDE6jUdL6n8cAAqIpRmLPBZ5ZKnicE8oGU/s3QrAVID+0VhLFrzUucVKHG5035/BSykhExDL/Xm7dHthiA==
dependencies:
"@codemirror/state" "^6.0.0"
"@codemirror/view" "^6.0.0"
crelt "^1.0.5"
"@codemirror/state@^6.0.0", "@codemirror/state@^6.4.0", "@codemirror/state@^6.5.0", "@codemirror/state@^6.5.2":
version "6.5.3"
resolved "https://registry.npmmirror.com/@codemirror/state/-/state-6.5.3.tgz#256e256d466f49ed0879d462031de8bd541e1403"
integrity sha512-MerMzJzlXogk2fxWFU1nKp36bY5orBG59HnPiz0G9nLRebWa0zXuv2siH6PLIHBvv5TH8CkQRqjBs0MlxCZu+A==
dependencies:
"@marijn/find-cluster-break" "^1.0.0"
"@codemirror/view@^6.0.0", "@codemirror/view@^6.17.0", "@codemirror/view@^6.23.0", "@codemirror/view@^6.27.0", "@codemirror/view@^6.35.0", "@codemirror/view@^6.38.2":
version "6.39.7"
resolved "https://registry.npmmirror.com/@codemirror/view/-/view-6.39.7.tgz#8d4efa74b02d284696a18588d2e39883e45559e4"
integrity sha512-3Vif9hnNHJnl2YgOtkR/wzGzhYcQ8gy3LGdUhkLUU8xSBbgsTxrE8he/CMTpeINm5TgxLe2FmzvF6IYQL/BSAg==
dependencies:
"@codemirror/state" "^6.5.0"
crelt "^1.0.6"
style-mod "^4.1.0"
w3c-keyname "^2.2.4"
"@css-render/plugin-bem@^0.15.14": "@css-render/plugin-bem@^0.15.14":
version "0.15.14" version "0.15.14"
resolved "https://registry.npmmirror.com/@css-render/plugin-bem/-/plugin-bem-0.15.14.tgz#de13fc9f59299c2b646119851763dfa08929b3c1" resolved "https://registry.npmmirror.com/@css-render/plugin-bem/-/plugin-bem-0.15.14.tgz#de13fc9f59299c2b646119851763dfa08929b3c1"
@ -534,6 +872,155 @@
resolved "https://registry.npmmirror.com/@juggle/resize-observer/-/resize-observer-3.4.0.tgz#08d6c5e20cf7e4cc02fd181c4b0c225cd31dbb60" resolved "https://registry.npmmirror.com/@juggle/resize-observer/-/resize-observer-3.4.0.tgz#08d6c5e20cf7e4cc02fd181c4b0c225cd31dbb60"
integrity sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA== integrity sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==
"@lezer/common@^1.0.0", "@lezer/common@^1.0.2", "@lezer/common@^1.1.0", "@lezer/common@^1.2.0", "@lezer/common@^1.2.1", "@lezer/common@^1.3.0", "@lezer/common@^1.5.0":
version "1.5.0"
resolved "https://registry.npmmirror.com/@lezer/common/-/common-1.5.0.tgz#db227b596260189b67ba286387d9dc81fb07c70b"
integrity sha512-PNGcolp9hr4PJdXR4ix7XtixDrClScvtSCYW3rQG106oVMOOI+jFb+0+J3mbeL/53g1Zd6s0kJzaw6Ri68GmAA==
"@lezer/cpp@^1.0.0":
version "1.1.4"
resolved "https://registry.npmmirror.com/@lezer/cpp/-/cpp-1.1.4.tgz#4c5c60a6f2f5d01314abd1d8a06c48a2cdc11cbc"
integrity sha512-aYSdZyUueeTgnfXQntiGUqKNW5WujlAsIbbHzkfJDneSZoyjPg8ObmWG3bzDPVYMC/Kf4l43WJLCunPnYFfQ0g==
dependencies:
"@lezer/common" "^1.2.0"
"@lezer/highlight" "^1.0.0"
"@lezer/lr" "^1.0.0"
"@lezer/css@^1.1.0", "@lezer/css@^1.1.7":
version "1.3.0"
resolved "https://registry.npmmirror.com/@lezer/css/-/css-1.3.0.tgz#296f298814782c2fad42a936f3510042cdcd2034"
integrity sha512-pBL7hup88KbI7hXnZV3PQsn43DHy6TWyzuyk2AO9UyoXcDltvIdqWKE1dLL/45JVZ+YZkHe1WVHqO6wugZZWcw==
dependencies:
"@lezer/common" "^1.2.0"
"@lezer/highlight" "^1.0.0"
"@lezer/lr" "^1.3.0"
"@lezer/go@^1.0.0":
version "1.0.1"
resolved "https://registry.npmmirror.com/@lezer/go/-/go-1.0.1.tgz#3004b54f5e4c9719edcba98653f380baf8c0d1a2"
integrity sha512-xToRsYxwsgJNHTgNdStpcvmbVuKxTapV0dM0wey1geMMRc9aggoVyKgzYp41D2/vVOx+Ii4hmE206kvxIXBVXQ==
dependencies:
"@lezer/common" "^1.2.0"
"@lezer/highlight" "^1.0.0"
"@lezer/lr" "^1.3.0"
"@lezer/highlight@^1.0.0", "@lezer/highlight@^1.1.3", "@lezer/highlight@^1.2.0", "@lezer/highlight@^1.2.1":
version "1.2.3"
resolved "https://registry.npmmirror.com/@lezer/highlight/-/highlight-1.2.3.tgz#a20f324b71148a2ea9ba6ff42e58bbfaec702857"
integrity sha512-qXdH7UqTvGfdVBINrgKhDsVTJTxactNNxLk7+UMwZhU13lMHaOBlJe9Vqp907ya56Y3+ed2tlqzys7jDkTmW0g==
dependencies:
"@lezer/common" "^1.3.0"
"@lezer/html@^1.3.12":
version "1.3.13"
resolved "https://registry.npmmirror.com/@lezer/html/-/html-1.3.13.tgz#6a1305ae3bd2c9c01f877f8a8dc1e15ec652d01c"
integrity sha512-oI7n6NJml729m7pjm9lvLvmXbdoMoi2f+1pwSDJkl9d68zGr7a9Btz8NdHTGQZtW2DA25ybeuv/SyDb9D5tseg==
dependencies:
"@lezer/common" "^1.2.0"
"@lezer/highlight" "^1.0.0"
"@lezer/lr" "^1.0.0"
"@lezer/java@^1.0.0":
version "1.1.3"
resolved "https://registry.npmmirror.com/@lezer/java/-/java-1.1.3.tgz#9efd6a29b4142d07f211076a6fb5e8061c85e147"
integrity sha512-yHquUfujwg6Yu4Fd1GNHCvidIvJwi/1Xu2DaKl/pfWIA2c1oXkVvawH3NyXhCaFx4OdlYBVX5wvz2f7Aoa/4Xw==
dependencies:
"@lezer/common" "^1.2.0"
"@lezer/highlight" "^1.0.0"
"@lezer/lr" "^1.0.0"
"@lezer/javascript@^1.0.0":
version "1.5.4"
resolved "https://registry.npmmirror.com/@lezer/javascript/-/javascript-1.5.4.tgz#11746955f957d33c0933f17d7594db54a8b4beea"
integrity sha512-vvYx3MhWqeZtGPwDStM2dwgljd5smolYD2lR2UyFcHfxbBQebqx8yjmFmxtJ/E6nN6u1D9srOiVWm3Rb4tmcUA==
dependencies:
"@lezer/common" "^1.2.0"
"@lezer/highlight" "^1.1.3"
"@lezer/lr" "^1.3.0"
"@lezer/json@^1.0.0":
version "1.0.3"
resolved "https://registry.npmmirror.com/@lezer/json/-/json-1.0.3.tgz#e773a012ad0088fbf07ce49cfba875cc9e5bc05f"
integrity sha512-BP9KzdF9Y35PDpv04r0VeSTKDeox5vVr3efE7eBbx3r4s3oNLfunchejZhjArmeieBH+nVOpgIiBJpEAv8ilqQ==
dependencies:
"@lezer/common" "^1.2.0"
"@lezer/highlight" "^1.0.0"
"@lezer/lr" "^1.0.0"
"@lezer/lr@^1.0.0", "@lezer/lr@^1.1.0", "@lezer/lr@^1.3.0", "@lezer/lr@^1.3.1", "@lezer/lr@^1.3.3", "@lezer/lr@^1.4.0":
version "1.4.5"
resolved "https://registry.npmmirror.com/@lezer/lr/-/lr-1.4.5.tgz#a0a7f505d96593f0f06708d50fb85962e33686c1"
integrity sha512-/YTRKP5yPPSo1xImYQk7AZZMAgap0kegzqCSYHjAL9x1AZ0ZQW+IpcEzMKagCsbTsLnVeWkxYrCNeXG8xEPrjg==
dependencies:
"@lezer/common" "^1.0.0"
"@lezer/markdown@^1.0.0":
version "1.6.2"
resolved "https://registry.npmmirror.com/@lezer/markdown/-/markdown-1.6.2.tgz#f3448a890b28ef521531ef48519b78cbacb5e225"
integrity sha512-iNSdKrIK0FfOjVPVpV0fu7OykdncYpEzf4vkG9szFf60ql/ObZShoVbM9u1tgkogDOmubms1CyoNS2/unOXWNw==
dependencies:
"@lezer/common" "^1.5.0"
"@lezer/highlight" "^1.0.0"
"@lezer/php@^1.0.0":
version "1.0.5"
resolved "https://registry.npmmirror.com/@lezer/php/-/php-1.0.5.tgz#4e6b79daa97b98f0ba300f592e6916661339e661"
integrity sha512-W7asp9DhM6q0W6DYNwIkLSKOvxlXRrif+UXBMxzsJUuqmhE7oVU+gS3THO4S/Puh7Xzgm858UNaFi6dxTP8dJA==
dependencies:
"@lezer/common" "^1.2.0"
"@lezer/highlight" "^1.0.0"
"@lezer/lr" "^1.1.0"
"@lezer/python@^1.1.4":
version "1.1.18"
resolved "https://registry.npmmirror.com/@lezer/python/-/python-1.1.18.tgz#fa02fbf492741c82dc2dc98a0a042bd0d4d7f1d3"
integrity sha512-31FiUrU7z9+d/ElGQLJFXl+dKOdx0jALlP3KEOsGTex8mvj+SoE1FgItcHWK/axkxCHGUSpqIHt6JAWfWu9Rhg==
dependencies:
"@lezer/common" "^1.2.0"
"@lezer/highlight" "^1.0.0"
"@lezer/lr" "^1.0.0"
"@lezer/rust@^1.0.0":
version "1.0.2"
resolved "https://registry.npmmirror.com/@lezer/rust/-/rust-1.0.2.tgz#cc9a75605d67182a0e799ac40b1965a61dcc6ef0"
integrity sha512-Lz5sIPBdF2FUXcWeCu1//ojFAZqzTQNRga0aYv6dYXqJqPfMdCAI0NzajWUd4Xijj1IKJLtjoXRPMvTKWBcqKg==
dependencies:
"@lezer/common" "^1.2.0"
"@lezer/highlight" "^1.0.0"
"@lezer/lr" "^1.0.0"
"@lezer/sass@^1.0.0":
version "1.1.0"
resolved "https://registry.npmmirror.com/@lezer/sass/-/sass-1.1.0.tgz#c82e660aa5b39303d1de763923aef979fef1d3a4"
integrity sha512-3mMGdCTUZ/84ArHOuXWQr37pnf7f+Nw9ycPUeKX+wu19b7pSMcZGLbaXwvD2APMBDOGxPmpK/O6S1v1EvLoqgQ==
dependencies:
"@lezer/common" "^1.2.0"
"@lezer/highlight" "^1.0.0"
"@lezer/lr" "^1.0.0"
"@lezer/xml@^1.0.0":
version "1.0.6"
resolved "https://registry.npmmirror.com/@lezer/xml/-/xml-1.0.6.tgz#908c203923288f854eb8e2f4d9b06c437e8610b9"
integrity sha512-CdDwirL0OEaStFue/66ZmFSeppuL6Dwjlk8qk153mSQwiSH/Dlri4GNymrNWnUmPl2Um7QfV1FO9KFUyX3Twww==
dependencies:
"@lezer/common" "^1.2.0"
"@lezer/highlight" "^1.0.0"
"@lezer/lr" "^1.0.0"
"@lezer/yaml@^1.0.0":
version "1.0.3"
resolved "https://registry.npmmirror.com/@lezer/yaml/-/yaml-1.0.3.tgz#b23770ab42b390056da6b187d861b998fd60b1ff"
integrity sha512-GuBLekbw9jDBDhGur82nuwkxKQ+a3W5H0GfaAthDXcAu+XdpS43VlnxA9E9hllkpSP5ellRDKjLLj7Lu9Wr6xA==
dependencies:
"@lezer/common" "^1.2.0"
"@lezer/highlight" "^1.0.0"
"@lezer/lr" "^1.4.0"
"@marijn/find-cluster-break@^1.0.0":
version "1.0.2"
resolved "https://registry.npmmirror.com/@marijn/find-cluster-break/-/find-cluster-break-1.0.2.tgz#775374306116d51c0c500b8c4face0f9a04752d8"
integrity sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==
"@meting/core@^1.5.13": "@meting/core@^1.5.13":
version "1.6.0" version "1.6.0"
resolved "https://registry.npmmirror.com/@meting/core/-/core-1.6.0.tgz#588a68959c5602326ec0c7796d62165ff8d5af2e" resolved "https://registry.npmmirror.com/@meting/core/-/core-1.6.0.tgz#588a68959c5602326ec0c7796d62165ff8d5af2e"
@ -693,6 +1180,11 @@
resolved "https://registry.npmmirror.com/@types/katex/-/katex-0.16.7.tgz#03ab680ab4fa4fbc6cb46ecf987ecad5d8019868" resolved "https://registry.npmmirror.com/@types/katex/-/katex-0.16.7.tgz#03ab680ab4fa4fbc6cb46ecf987ecad5d8019868"
integrity sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ== integrity sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==
"@types/linkify-it@^5":
version "5.0.0"
resolved "https://registry.npmmirror.com/@types/linkify-it/-/linkify-it-5.0.0.tgz#21413001973106cda1c3a9b91eedd4ccd5469d76"
integrity sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==
"@types/lodash-es@^4.17.12", "@types/lodash-es@^4.17.4": "@types/lodash-es@^4.17.12", "@types/lodash-es@^4.17.4":
version "4.17.12" version "4.17.12"
resolved "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.12.tgz#65f6d1e5f80539aa7cfbfc962de5def0cf4f341b" resolved "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.12.tgz#65f6d1e5f80539aa7cfbfc962de5def0cf4f341b"
@ -705,6 +1197,19 @@
resolved "https://registry.npmmirror.com/@types/lodash/-/lodash-4.17.21.tgz#b806831543d696b14f8112db600ea9d3a1df6ea4" resolved "https://registry.npmmirror.com/@types/lodash/-/lodash-4.17.21.tgz#b806831543d696b14f8112db600ea9d3a1df6ea4"
integrity sha512-FOvQ0YPD5NOfPgMzJihoT+Za5pdkDJWcbpuj1DjaKZIr/gxodQjY/uWEFlTNqW2ugXHUiL8lRQgw63dzKHZdeQ== integrity sha512-FOvQ0YPD5NOfPgMzJihoT+Za5pdkDJWcbpuj1DjaKZIr/gxodQjY/uWEFlTNqW2ugXHUiL8lRQgw63dzKHZdeQ==
"@types/markdown-it@^14.0.1":
version "14.1.2"
resolved "https://registry.npmmirror.com/@types/markdown-it/-/markdown-it-14.1.2.tgz#57f2532a0800067d9b934f3521429a2e8bfb4c61"
integrity sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==
dependencies:
"@types/linkify-it" "^5"
"@types/mdurl" "^2"
"@types/mdurl@^2":
version "2.0.0"
resolved "https://registry.npmmirror.com/@types/mdurl/-/mdurl-2.0.0.tgz#d43878b5b20222682163ae6f897b20447233bdfd"
integrity sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==
"@types/node@^22.16.5": "@types/node@^22.16.5":
version "22.19.3" version "22.19.3"
resolved "https://registry.npmmirror.com/@types/node/-/node-22.19.3.tgz#8dfde7630d7a8528dc9b34db23d34f764467c02c" resolved "https://registry.npmmirror.com/@types/node/-/node-22.19.3.tgz#8dfde7630d7a8528dc9b34db23d34f764467c02c"
@ -938,6 +1443,16 @@
tinyglobby "^0.2.15" tinyglobby "^0.2.15"
unplugin-utils "^0.3.1" unplugin-utils "^0.3.1"
"@vavt/copy2clipboard@^1.0.1":
version "1.0.3"
resolved "https://registry.npmmirror.com/@vavt/copy2clipboard/-/copy2clipboard-1.0.3.tgz#eae77af8e83835cae5d932c3dc025e8838bb4c12"
integrity sha512-HtG48r2FBYp9eRvGB3QGmtRBH1zzRRAVvFbGgFstOwz4/DDaNiX0uZc3YVKPydqgOav26pibr9MtoCaWxn7aeA==
"@vavt/util@^2.1.0":
version "2.1.1"
resolved "https://registry.npmmirror.com/@vavt/util/-/util-2.1.1.tgz#5e7b04d57e44d679cbaa37502d9e996176bed5a0"
integrity sha512-QYn/B2qiQhAGZVBoe5/6pPcA3NiGcxIm9htpVBjcdIOZQaWe+8kE/akEgLPrHxv5dbQQawnyHBokadW1d1z1tw==
"@vitejs/plugin-vue@^6.0.1": "@vitejs/plugin-vue@^6.0.1":
version "6.0.3" version "6.0.3"
resolved "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-6.0.3.tgz#b857c5dcbc5cfb30bf5d7f9d6e274afcca2d46d1" resolved "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-6.0.3.tgz#b857c5dcbc5cfb30bf5d7f9d6e274afcca2d46d1"
@ -1490,6 +2005,19 @@ codemirror@5.63.3:
resolved "https://registry.npmmirror.com/codemirror/-/codemirror-5.63.3.tgz#97042a242027fe0c87c09b36bc01931d37b76527" resolved "https://registry.npmmirror.com/codemirror/-/codemirror-5.63.3.tgz#97042a242027fe0c87c09b36bc01931d37b76527"
integrity sha512-1C+LELr+5grgJYqwZKqxrcbPsHFHapVaVAloBsFBASbpLnQqLw1U8yXJ3gT5D+rhxIiSpo+kTqN+hQ+9ialIXw== integrity sha512-1C+LELr+5grgJYqwZKqxrcbPsHFHapVaVAloBsFBASbpLnQqLw1U8yXJ3gT5D+rhxIiSpo+kTqN+hQ+9ialIXw==
codemirror@^6.0.2:
version "6.0.2"
resolved "https://registry.npmmirror.com/codemirror/-/codemirror-6.0.2.tgz#4d3fea1ad60b6753f97ca835f2f48c6936a8946e"
integrity sha512-VhydHotNW5w1UGK0Qj96BwSk/Zqbp9WbnyK2W/eVMv4QyF41INRGpjUhFJY7/uDNuudSc33a/PKr4iDqRduvHw==
dependencies:
"@codemirror/autocomplete" "^6.0.0"
"@codemirror/commands" "^6.0.0"
"@codemirror/language" "^6.0.0"
"@codemirror/lint" "^6.0.0"
"@codemirror/search" "^6.0.0"
"@codemirror/state" "^6.0.0"
"@codemirror/view" "^6.0.0"
colorette@^2.0.20: colorette@^2.0.20:
version "2.0.20" version "2.0.20"
resolved "https://registry.npmmirror.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" resolved "https://registry.npmmirror.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a"
@ -1546,6 +2074,11 @@ copy-anything@^4:
dependencies: dependencies:
is-what "^5.2.0" is-what "^5.2.0"
crelt@^1.0.5, crelt@^1.0.6:
version "1.0.6"
resolved "https://registry.npmmirror.com/crelt/-/crelt-1.0.6.tgz#7cc898ea74e190fb6ef9dae57f8f81cf7302df72"
integrity sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==
cross-spawn@^7.0.6: cross-spawn@^7.0.6:
version "7.0.6" version "7.0.6"
resolved "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" resolved "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f"
@ -2284,7 +2817,7 @@ electron-to-chromium@^1.5.263:
resolved "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz#5d84f2df8cdb6bfe7e873706bb21bd4bfb574dc7" resolved "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz#5d84f2df8cdb6bfe7e873706bb21bd4bfb574dc7"
integrity sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw== integrity sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==
entities@^4.2.0: entities@^4.2.0, entities@^4.4.0:
version "4.5.0" version "4.5.0"
resolved "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" resolved "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48"
integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==
@ -2555,11 +3088,6 @@ highlight.js@^11.6.0, highlight.js@^11.8.0:
resolved "https://registry.npmmirror.com/highlight.js/-/highlight.js-11.11.1.tgz#fca06fa0e5aeecf6c4d437239135fabc15213585" resolved "https://registry.npmmirror.com/highlight.js/-/highlight.js-11.11.1.tgz#fca06fa0e5aeecf6c4d437239135fabc15213585"
integrity sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w== integrity sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==
hls.js@^1.0.10:
version "1.6.15"
resolved "https://registry.npmmirror.com/hls.js/-/hls.js-1.6.15.tgz#9ce13080d143a9bc9b903fb43f081e335b8321e5"
integrity sha512-E3a5VwgXimGHwpRGV+WxRTKeSp2DW5DI5MWv34ulL3t5UNmyJWCQ1KmLEHbYzcfThfXG8amBL+fCYPneGHC4VA==
hogan.js@3.0.2: hogan.js@3.0.2:
version "3.0.2" version "3.0.2"
resolved "https://registry.npmmirror.com/hogan.js/-/hogan.js-3.0.2.tgz#4cd9e1abd4294146e7679e41d7898732b02c7bfd" resolved "https://registry.npmmirror.com/hogan.js/-/hogan.js-3.0.2.tgz#4cd9e1abd4294146e7679e41d7898732b02c7bfd"
@ -2740,6 +3268,13 @@ linkify-it@^3.0.1:
dependencies: dependencies:
uc.micro "^1.0.1" uc.micro "^1.0.1"
linkify-it@^5.0.0:
version "5.0.0"
resolved "https://registry.npmmirror.com/linkify-it/-/linkify-it-5.0.0.tgz#9ef238bfa6dc70bd8e7f9572b52d369af569b421"
integrity sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==
dependencies:
uc.micro "^2.0.0"
local-pkg@^1.1.1: local-pkg@^1.1.1:
version "1.1.2" version "1.1.2"
resolved "https://registry.npmmirror.com/local-pkg/-/local-pkg-1.1.2.tgz#c03d208787126445303f8161619dc701afa4abb5" resolved "https://registry.npmmirror.com/local-pkg/-/local-pkg-1.1.2.tgz#c03d208787126445303f8161619dc701afa4abb5"
@ -2759,6 +3294,11 @@ lodash@^4.17.15, lodash@^4.17.21:
resolved "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" resolved "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
lru-cache@^11.2.1:
version "11.2.4"
resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-11.2.4.tgz#ecb523ebb0e6f4d837c807ad1abaea8e0619770d"
integrity sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==
lru-cache@^5.1.1: lru-cache@^5.1.1:
version "5.1.1" version "5.1.1"
resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
@ -2766,6 +3306,11 @@ lru-cache@^5.1.1:
dependencies: dependencies:
yallist "^3.0.2" yallist "^3.0.2"
lucide-vue-next@^0.543.0:
version "0.543.0"
resolved "https://registry.npmmirror.com/lucide-vue-next/-/lucide-vue-next-0.543.0.tgz#3ac7f63ec60ed485730372513c7fe41e95250d4f"
integrity sha512-Az5kpNm/koKAwSNIKjsZ4uHV2tVfmlQlcHwFBygQ8gc5/jFg7An9OrxgDy/aE5m+HLx7VfLYqDxLr8gWecZbQA==
magic-string-ast@^1.0.0: magic-string-ast@^1.0.0:
version "1.0.3" version "1.0.3"
resolved "https://registry.npmmirror.com/magic-string-ast/-/magic-string-ast-1.0.3.tgz#51ef7832fd5c70a0188fb94627caa3b8c74ff9bf" resolved "https://registry.npmmirror.com/magic-string-ast/-/magic-string-ast-1.0.3.tgz#51ef7832fd5c70a0188fb94627caa3b8c74ff9bf"
@ -2793,11 +3338,26 @@ markdown-it-emoji@^3.0.0:
resolved "https://registry.npmmirror.com/markdown-it-emoji/-/markdown-it-emoji-3.0.0.tgz#8475a04d671d7c93f931b76fb90c582768b7f0b5" resolved "https://registry.npmmirror.com/markdown-it-emoji/-/markdown-it-emoji-3.0.0.tgz#8475a04d671d7c93f931b76fb90c582768b7f0b5"
integrity sha512-+rUD93bXHubA4arpEZO3q80so0qgoFJEKRkRbjKX8RTdca89v2kfyF+xR3i2sQTwql9tpPZPOQN5B+PunspXRg== integrity sha512-+rUD93bXHubA4arpEZO3q80so0qgoFJEKRkRbjKX8RTdca89v2kfyF+xR3i2sQTwql9tpPZPOQN5B+PunspXRg==
markdown-it-image-figures@^2.1.1:
version "2.1.1"
resolved "https://registry.npmmirror.com/markdown-it-image-figures/-/markdown-it-image-figures-2.1.1.tgz#fd32a2d0cec60ed8c3916d74fea70d5f9b56e4c7"
integrity sha512-mwXSQ2nPeVUzCMIE3HlLvjRioopiqyJLNph0pyx38yf9mpqFDhNGnMpAXF9/A2Xv0oiF2cVyg9xwfF0HNAz05g==
markdown-it-plantuml@^1.4.1: markdown-it-plantuml@^1.4.1:
version "1.4.1" version "1.4.1"
resolved "https://registry.npmmirror.com/markdown-it-plantuml/-/markdown-it-plantuml-1.4.1.tgz#3bd5e7d92eaa5c6c68eb29802f7b46a8e05ca998" resolved "https://registry.npmmirror.com/markdown-it-plantuml/-/markdown-it-plantuml-1.4.1.tgz#3bd5e7d92eaa5c6c68eb29802f7b46a8e05ca998"
integrity sha512-13KgnZaGYTHBp4iUmGofzZSBz+Zj6cyqfR0SXUIc9wgWTto5Xhn7NjaXYxY0z7uBeTUMlc9LMQq5uP4OM5xCHg== integrity sha512-13KgnZaGYTHBp4iUmGofzZSBz+Zj6cyqfR0SXUIc9wgWTto5Xhn7NjaXYxY0z7uBeTUMlc9LMQq5uP4OM5xCHg==
markdown-it-sub@^2.0.0:
version "2.0.0"
resolved "https://registry.npmmirror.com/markdown-it-sub/-/markdown-it-sub-2.0.0.tgz#10f6c7bbf2faacf71ae1a64c75009c40ef9b2c94"
integrity sha512-iCBKgwCkfQBRg2vApy9vx1C1Tu6D8XYo8NvevI3OlwzBRmiMtsJ2sXupBgEA7PPxiDwNni3qIUkhZ6j5wofDUA==
markdown-it-sup@^2.0.0:
version "2.0.0"
resolved "https://registry.npmmirror.com/markdown-it-sup/-/markdown-it-sup-2.0.0.tgz#683b9390929f3024fcd5291799c466ce3d367f44"
integrity sha512-5VgmdKlkBd8sgXuoDoxMpiU+BiEt3I49GItBzzw7Mxq9CxvnhE/k09HFli09zgfFDRixDQDfDxi0mgBCXtaTvA==
markdown-it@12.2.0: markdown-it@12.2.0:
version "12.2.0" version "12.2.0"
resolved "https://registry.npmmirror.com/markdown-it/-/markdown-it-12.2.0.tgz#091f720fd5db206f80de7a8d1f1a7035fd0d38db" resolved "https://registry.npmmirror.com/markdown-it/-/markdown-it-12.2.0.tgz#091f720fd5db206f80de7a8d1f1a7035fd0d38db"
@ -2809,11 +3369,50 @@ markdown-it@12.2.0:
mdurl "^1.0.1" mdurl "^1.0.1"
uc.micro "^1.0.5" uc.micro "^1.0.5"
markdown-it@^14.0.0:
version "14.1.0"
resolved "https://registry.npmmirror.com/markdown-it/-/markdown-it-14.1.0.tgz#3c3c5992883c633db4714ccb4d7b5935d98b7d45"
integrity sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==
dependencies:
argparse "^2.0.1"
entities "^4.4.0"
linkify-it "^5.0.0"
mdurl "^2.0.0"
punycode.js "^2.3.1"
uc.micro "^2.1.0"
math-intrinsics@^1.1.0: math-intrinsics@^1.1.0:
version "1.1.0" version "1.1.0"
resolved "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" resolved "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9"
integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==
md-editor-v3@^6.3.0:
version "6.3.0"
resolved "https://registry.npmmirror.com/md-editor-v3/-/md-editor-v3-6.3.0.tgz#ff310cd49785a6acbf66238642085e8265c0a90a"
integrity sha512-KvrxFA7YZbrTQ5JH6nTPNnAhfDVAV1uOVUGziyds0+wyCeWL5lbuTXjFmL8/2sILPw2v0VPxCEw7SMTlUQmvzg==
dependencies:
"@codemirror/autocomplete" "^6.18.7"
"@codemirror/commands" "^6.8.1"
"@codemirror/lang-markdown" "^6.3.4"
"@codemirror/language" "^6.11.3"
"@codemirror/language-data" "^6.5.1"
"@codemirror/search" "^6.5.11"
"@codemirror/state" "^6.5.2"
"@codemirror/view" "^6.38.2"
"@lezer/highlight" "^1.2.1"
"@types/markdown-it" "^14.0.1"
"@vavt/copy2clipboard" "^1.0.1"
"@vavt/util" "^2.1.0"
codemirror "^6.0.2"
lru-cache "^11.2.1"
lucide-vue-next "^0.543.0"
markdown-it "^14.0.0"
markdown-it-image-figures "^2.1.1"
markdown-it-sub "^2.0.0"
markdown-it-sup "^2.0.0"
medium-zoom "^1.1.0"
xss "^1.0.15"
mdn-data@2.0.28: mdn-data@2.0.28:
version "2.0.28" version "2.0.28"
resolved "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.28.tgz#5ec48e7bef120654539069e1ae4ddc81ca490eba" resolved "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.28.tgz#5ec48e7bef120654539069e1ae4ddc81ca490eba"
@ -2834,6 +3433,16 @@ mdurl@^1.0.1:
resolved "https://registry.npmmirror.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" resolved "https://registry.npmmirror.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e"
integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g== integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==
mdurl@^2.0.0:
version "2.0.0"
resolved "https://registry.npmmirror.com/mdurl/-/mdurl-2.0.0.tgz#80676ec0433025dd3e17ee983d0fe8de5a2237e0"
integrity sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==
medium-zoom@^1.1.0:
version "1.1.0"
resolved "https://registry.npmmirror.com/medium-zoom/-/medium-zoom-1.1.0.tgz#6efb6bbda861a02064ee71a2617a8dc4381ecc71"
integrity sha512-ewyDsp7k4InCUp3jRmwHBRFGyjBimKps/AJLjRSox+2q/2H4p/PNpQf+pwONWlJiOudkBXtbdmVbFjqyybfTmQ==
memorystream@^0.3.1: memorystream@^0.3.1:
version "0.3.1" version "0.3.1"
resolved "https://registry.npmmirror.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" resolved "https://registry.npmmirror.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2"
@ -3000,6 +3609,11 @@ npm-run-all2@^8.0.4:
shell-quote "^1.7.3" shell-quote "^1.7.3"
which "^5.0.0" which "^5.0.0"
nprogress@^0.2.0:
version "0.2.0"
resolved "https://registry.npmmirror.com/nprogress/-/nprogress-0.2.0.tgz#cb8f34c53213d895723fcbab907e9422adbcafb1"
integrity sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==
nth-check@^2.0.1: nth-check@^2.0.1:
version "2.1.1" version "2.1.1"
resolved "https://registry.npmmirror.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" resolved "https://registry.npmmirror.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d"
@ -3140,6 +3754,11 @@ prr@~1.0.1:
resolved "https://registry.npmmirror.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" resolved "https://registry.npmmirror.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==
punycode.js@^2.3.1:
version "2.3.1"
resolved "https://registry.npmmirror.com/punycode.js/-/punycode.js-2.3.1.tgz#6b53e56ad75588234e79f4affa90972c7dd8cdb7"
integrity sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==
quansync@^0.2.11: quansync@^0.2.11:
version "0.2.11" version "0.2.11"
resolved "https://registry.npmmirror.com/quansync/-/quansync-0.2.11.tgz#f9c3adda2e1272e4f8cf3f1457b04cbdb4ee692a" resolved "https://registry.npmmirror.com/quansync/-/quansync-0.2.11.tgz#f9c3adda2e1272e4f8cf3f1457b04cbdb4ee692a"
@ -3326,6 +3945,11 @@ strip-literal@^3.0.0:
dependencies: dependencies:
js-tokens "^9.0.1" js-tokens "^9.0.1"
style-mod@^4.0.0, style-mod@^4.1.0:
version "4.1.3"
resolved "https://registry.npmmirror.com/style-mod/-/style-mod-4.1.3.tgz#6e9012255bb799bdac37e288f7671b5d71bf9f73"
integrity sha512-i/n8VsZydrugj3Iuzll8+x/00GH2vnYsk1eomD8QiRrSAeW6ItbCQDtfXCeJHd0iwiNagqjQkvpvREEPtW3IoQ==
stylis@^4.0.10: stylis@^4.0.10:
version "4.3.6" version "4.3.6"
resolved "https://registry.npmmirror.com/stylis/-/stylis-4.3.6.tgz#7c7b97191cb4f195f03ecab7d52f7902ed378320" resolved "https://registry.npmmirror.com/stylis/-/stylis-4.3.6.tgz#7c7b97191cb4f195f03ecab7d52f7902ed378320"
@ -3351,11 +3975,6 @@ svgo@^3.0.2:
csso "^5.0.5" csso "^5.0.5"
picocolors "^1.0.0" picocolors "^1.0.0"
throttle-debounce@^3.0.1:
version "3.0.1"
resolved "https://registry.npmmirror.com/throttle-debounce/-/throttle-debounce-3.0.1.tgz#32f94d84dfa894f786c9a1f290e7a645b6a19abb"
integrity sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==
tiny-emitter@^2.0.0: tiny-emitter@^2.0.0:
version "2.1.0" version "2.1.0"
resolved "https://registry.npmmirror.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423" resolved "https://registry.npmmirror.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423"
@ -3401,16 +4020,21 @@ tslib@^2.1.0, tslib@^2.3.0:
resolved "https://registry.npmmirror.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" resolved "https://registry.npmmirror.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f"
integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==
typescript@~5.8.0: typescript@^5.9.3:
version "5.8.3" version "5.9.3"
resolved "https://registry.npmmirror.com/typescript/-/typescript-5.8.3.tgz#92f8a3e5e3cf497356f4178c34cd65a7f5e8440e" resolved "https://registry.npmmirror.com/typescript/-/typescript-5.9.3.tgz#5b4f59e15310ab17a216f5d6cf53ee476ede670f"
integrity sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ== integrity sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==
uc.micro@^1.0.1, uc.micro@^1.0.5: uc.micro@^1.0.1, uc.micro@^1.0.5:
version "1.0.6" version "1.0.6"
resolved "https://registry.npmmirror.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" resolved "https://registry.npmmirror.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac"
integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==
uc.micro@^2.0.0, uc.micro@^2.1.0:
version "2.1.0"
resolved "https://registry.npmmirror.com/uc.micro/-/uc.micro-2.1.0.tgz#f8d3f7d0ec4c3dea35a7e3c8efa4cb8b45c9e7ee"
integrity sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==
ufo@^1.6.1: ufo@^1.6.1:
version "1.6.1" version "1.6.1"
resolved "https://registry.npmmirror.com/ufo/-/ufo-1.6.1.tgz#ac2db1d54614d1b22c1d603e3aef44a85d8f146b" resolved "https://registry.npmmirror.com/ufo/-/ufo-1.6.1.tgz#ac2db1d54614d1b22c1d603e3aef44a85d8f146b"
@ -3577,11 +4201,6 @@ uuid@^9.0.1:
resolved "https://registry.npmmirror.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" resolved "https://registry.npmmirror.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30"
integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==
v-infinite-scroll@^1.0.4:
version "1.0.4"
resolved "https://registry.npmmirror.com/v-infinite-scroll/-/v-infinite-scroll-1.0.4.tgz#56aad33b3d89759abd23702d7960763aeb8e0fc7"
integrity sha512-o2PeC0LNh3nSpsak+tcJEPRj9ENWWZTFvp1JdsraOom/d7lEbj7QfsJuF56AyrkqdSszaAwiVq2h4xTayl3RtQ==
vdirs@^0.1.4, vdirs@^0.1.8: vdirs@^0.1.4, vdirs@^0.1.8:
version "0.1.8" version "0.1.8"
resolved "https://registry.npmmirror.com/vdirs/-/vdirs-0.1.8.tgz#a103bc43baca738f8dea912a7e9737154a19dbc2" resolved "https://registry.npmmirror.com/vdirs/-/vdirs-0.1.8.tgz#a103bc43baca738f8dea912a7e9737154a19dbc2"
@ -3751,16 +4370,7 @@ vue3-cookies@^1.0.6:
dependencies: dependencies:
vue "^3.0.0" vue "^3.0.0"
vue3-video-play@^1.3.2: vue@^3.0.0:
version "1.3.2"
resolved "https://registry.npmmirror.com/vue3-video-play/-/vue3-video-play-1.3.2.tgz#72a80a4cde2bb423b04f44a8ad4b692ec6ce281b"
integrity sha512-eEwCJ0NIkfVQgTj0I3Kf9b1E/04Qne8mQQiE8r77BocblHsZ2T6af3q8l8Zzs/OvjlpQAQvkN/ACVUOJC3RSXg==
dependencies:
hls.js "^1.0.10"
throttle-debounce "^3.0.1"
vue "^3.2.2"
vue@^3.0.0, vue@^3.2.2:
version "3.5.26" version "3.5.26"
resolved "https://registry.npmmirror.com/vue/-/vue-3.5.26.tgz#03a0b17311e0e593d34b9358fa249b85e3a6d9fb" resolved "https://registry.npmmirror.com/vue/-/vue-3.5.26.tgz#03a0b17311e0e593d34b9358fa249b85e3a6d9fb"
integrity sha512-SJ/NTccVyAoNUJmkM9KUqPcYlY+u8OVL1X5EW9RIs3ch5H2uERxyyIUI4MRxVCSOiEcupX9xNGde1tL9ZKpimA== integrity sha512-SJ/NTccVyAoNUJmkM9KUqPcYlY+u8OVL1X5EW9RIs3ch5H2uERxyyIUI4MRxVCSOiEcupX9xNGde1tL9ZKpimA==
@ -3796,6 +4406,11 @@ vueuc@^0.4.65:
vdirs "^0.1.4" vdirs "^0.1.4"
vooks "^0.2.4" vooks "^0.2.4"
w3c-keyname@^2.2.4:
version "2.2.8"
resolved "https://registry.npmmirror.com/w3c-keyname/-/w3c-keyname-2.2.8.tgz#7b17c8c6883d4e8b86ac8aba79d39e880f8869c5"
integrity sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==
webpack-virtual-modules@^0.6.2: webpack-virtual-modules@^0.6.2:
version "0.6.2" version "0.6.2"
resolved "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz#057faa9065c8acf48f24cb57ac0e77739ab9a7e8" resolved "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz#057faa9065c8acf48f24cb57ac0e77739ab9a7e8"
@ -3822,7 +4437,7 @@ wsl-utils@^0.1.0:
dependencies: dependencies:
is-wsl "^3.1.0" is-wsl "^3.1.0"
xss@^1.0.14: xss@^1.0.14, xss@^1.0.15:
version "1.0.15" version "1.0.15"
resolved "https://registry.npmmirror.com/xss/-/xss-1.0.15.tgz#96a0e13886f0661063028b410ed1b18670f4e59a" resolved "https://registry.npmmirror.com/xss/-/xss-1.0.15.tgz#96a0e13886f0661063028b410ed1b18670f4e59a"
integrity sha512-FVdlVVC67WOIPvfOwhoMETV72f6GbW7aOabBC3WxN/oUdoEMDyLz4OgRv5/gck2ZeNqEQu+Tb0kloovXOfpYVg== integrity sha512-FVdlVVC67WOIPvfOwhoMETV72f6GbW7aOabBC3WxN/oUdoEMDyLz4OgRv5/gck2ZeNqEQu+Tb0kloovXOfpYVg==