From 0978615de54cda874e9afd1ff947ff799fc7b70d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BA=A2=E8=A1=80=E7=90=83AE3803?= <2544390577@qq.com> Date: Sun, 8 Dec 2024 18:43:06 +0900 Subject: [PATCH] Initial commit --- .editorconfig | 14 + .github/workflows/deploy.yml | 65 + .gitignore | 32 + .husky/commit-msg | 4 + .husky/pre-commit | 4 + .npmrc | 6 + .prettierignore | 20 + LICENSE | 21 + README.md | 88 + docs/.vitepress/config.ts | 83 + docs/.vitepress/configs/head.ts | 11 + docs/.vitepress/configs/index.ts | 3 + docs/.vitepress/configs/nav.ts | 15 + docs/.vitepress/configs/sidebar.ts | 3 + .../theme/components/MDocFooter.vue | 67 + docs/.vitepress/theme/components/MLayout.vue | 111 + docs/.vitepress/theme/components/MNavLink.vue | 135 + .../.vitepress/theme/components/MNavLinks.vue | 60 + .../theme/components/MNavVisitor.vue | 29 + docs/.vitepress/theme/composables/index.ts | 3 + .../theme/composables/useFormatPath.ts | 12 + .../theme/composables/useMediumZoom.ts | 49 + .../.vitepress/theme/composables/usePageId.ts | 14 + docs/.vitepress/theme/index.ts | 78 + docs/.vitepress/theme/styles/index.scss | 5 + docs/.vitepress/theme/styles/medium-zoom.scss | 14 + docs/.vitepress/theme/styles/rainbow.scss | 679 +++++ docs/.vitepress/theme/styles/tailwind.scss | 3 + docs/.vitepress/theme/styles/vars.scss | 103 + docs/.vitepress/theme/styles/vitepress.scss | 94 + docs/.vitepress/theme/types.ts | 10 + docs/index.md | 71 + docs/nav/data.ts | 606 ++++ docs/nav/index.md | 19 + docs/nav/index.scss | 36 + docs/public/favicon.ico | Bin 0 -> 4286 bytes docs/public/icons/chatgpt.png | Bin 0 -> 4159 bytes docs/public/icons/cnblogs.svg | 1 + docs/public/icons/es6.svg | 1 + docs/public/icons/jquery.svg | 1 + docs/public/icons/json-cn.ico | Bin 0 -> 16958 bytes docs/public/icons/koa.svg | 1 + docs/public/icons/nodejs.svg | 1 + docs/public/icons/pixiv.png | Bin 0 -> 975 bytes docs/public/icons/taro.svg | 1 + docs/public/icons/twitter.svg | 1 + docs/public/logo.png | Bin 0 -> 95858 bytes docs/test.md | 13 + env.d.ts | 32 + guide.md | 194 ++ netlify.toml | 6 + package.json | 55 + .../vite-plugin-markdown-preview@1.1.1.patch | 32 + pnpm-lock.yaml | 2662 +++++++++++++++++ postcss.config.js | 6 + tailwind.config.js | 7 + tsconfig.json | 14 + vercel.json | 7 + 58 files changed, 5602 insertions(+) create mode 100644 .editorconfig create mode 100644 .github/workflows/deploy.yml create mode 100644 .gitignore create mode 100755 .husky/commit-msg create mode 100755 .husky/pre-commit create mode 100644 .npmrc create mode 100644 .prettierignore create mode 100644 LICENSE create mode 100644 README.md create mode 100644 docs/.vitepress/config.ts create mode 100644 docs/.vitepress/configs/head.ts create mode 100644 docs/.vitepress/configs/index.ts create mode 100644 docs/.vitepress/configs/nav.ts create mode 100644 docs/.vitepress/configs/sidebar.ts create mode 100644 docs/.vitepress/theme/components/MDocFooter.vue create mode 100644 docs/.vitepress/theme/components/MLayout.vue create mode 100644 docs/.vitepress/theme/components/MNavLink.vue create mode 100644 docs/.vitepress/theme/components/MNavLinks.vue create mode 100644 docs/.vitepress/theme/components/MNavVisitor.vue create mode 100644 docs/.vitepress/theme/composables/index.ts create mode 100644 docs/.vitepress/theme/composables/useFormatPath.ts create mode 100644 docs/.vitepress/theme/composables/useMediumZoom.ts create mode 100644 docs/.vitepress/theme/composables/usePageId.ts create mode 100644 docs/.vitepress/theme/index.ts create mode 100644 docs/.vitepress/theme/styles/index.scss create mode 100644 docs/.vitepress/theme/styles/medium-zoom.scss create mode 100644 docs/.vitepress/theme/styles/rainbow.scss create mode 100644 docs/.vitepress/theme/styles/tailwind.scss create mode 100644 docs/.vitepress/theme/styles/vars.scss create mode 100644 docs/.vitepress/theme/styles/vitepress.scss create mode 100644 docs/.vitepress/theme/types.ts create mode 100644 docs/index.md create mode 100644 docs/nav/data.ts create mode 100644 docs/nav/index.md create mode 100644 docs/nav/index.scss create mode 100644 docs/public/favicon.ico create mode 100644 docs/public/icons/chatgpt.png create mode 100644 docs/public/icons/cnblogs.svg create mode 100644 docs/public/icons/es6.svg create mode 100644 docs/public/icons/jquery.svg create mode 100644 docs/public/icons/json-cn.ico create mode 100644 docs/public/icons/koa.svg create mode 100644 docs/public/icons/nodejs.svg create mode 100644 docs/public/icons/pixiv.png create mode 100644 docs/public/icons/taro.svg create mode 100644 docs/public/icons/twitter.svg create mode 100644 docs/public/logo.png create mode 100644 docs/test.md create mode 100644 env.d.ts create mode 100644 guide.md create mode 100644 netlify.toml create mode 100644 package.json create mode 100644 patches/vite-plugin-markdown-preview@1.1.1.patch create mode 100644 pnpm-lock.yaml create mode 100644 postcss.config.js create mode 100644 tailwind.config.js create mode 100644 tsconfig.json create mode 100644 vercel.json diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..c197a87 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,14 @@ +# http://editorconfig.org + +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_size = 2 +indent_style = space +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +trim_trailing_whitespace = false diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..764ec48 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,65 @@ +name: GitHub Actions Build and Deploy + +# 触发条件 +on: + # 手动触发 + workflow_dispatch: + # push 到指定分支 + push: + branches: + - main + # 只在下列路径变更时触发 + paths: + - 'docs/**' + - 'package.json' + +# 设置权限 +permissions: + contents: write + +# 设置上海时区 +env: + TZ: Asia/Shanghai + +# 任务 +jobs: + build-and-deploy: + # 服务器环境:最新版 ubuntu + runs-on: ubuntu-latest + strategy: + matrix: + node-version: [20] + steps: + # 拉取代码 + - name: Checkout + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + # 安装 pnpm + - name: Install pnpm + uses: pnpm/action-setup@v3 + with: + version: 8 + + # 设置 node 版本 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node-version }} + cache: 'pnpm' + + # 打包静态文件 + - name: Build + env: + APP_BASE_PATH: /${{ github.repository }} + run: pnpm install && pnpm run build + + # 部署 + - name: Deploy + uses: JamesIves/github-pages-deploy-action@v4 + with: + # GitHub Pages 读取的分支 + branch: gh-pages + # 静态文件所在目录 + folder: dist diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..42ad749 --- /dev/null +++ b/.gitignore @@ -0,0 +1,32 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# editor directories and files +.idea +.vscode + +# dependencies +node_modules + +# compiled output +dist +dist-dev +build +cache +.cache +.temp +.tmp +.turbo + +# log and lock files +*.log +yarn.lock +package-lock.json + +# local env files +.env.local +.env.*.local + +# misc +.DS_Store + +# user-specific files diff --git a/.husky/commit-msg b/.husky/commit-msg new file mode 100755 index 0000000..c3c6f55 --- /dev/null +++ b/.husky/commit-msg @@ -0,0 +1,4 @@ +#!/usr/bin/env sh +. "$(dirname -- "$0")/_/husky.sh" + +npx femm-verify-commit $1 diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100755 index 0000000..5f1a273 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,4 @@ +#!/usr/bin/env sh +. "$(dirname -- "$0")/_/husky.sh" + +npx lint-staged --quiet diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..20723e4 --- /dev/null +++ b/.npmrc @@ -0,0 +1,6 @@ +# https://docs.npmjs.com/cli/configuring-npm/npmrc/ +# https://pnpm.io/npmrc + +auto-install-peers=true + +registry=https://registry.npmmirror.com diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..bb5e06a --- /dev/null +++ b/.prettierignore @@ -0,0 +1,20 @@ +# See https://github.com/prettier/prettier/blob/main/docs/ignore.md + +# dependencies +node_modules + +# compiled output +dist +dist-dev +build +cache +.cache +.temp +.tmp + +# lock files +pnpm-lock.yaml +package-lock.json +yarn.lock + +# user-specific files diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..27fe280 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 maomao + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..386298d --- /dev/null +++ b/README.md @@ -0,0 +1,88 @@ +# vitepress-nav-template + +

+ home +

+

基于 VitePress 的个人前端导航页面模板

+

基础教程 | 作者博客

+ +--- + +## 预览地址 + +- +- + +## 功能 + +- 新增 `layout-class` 方便更好的自定义样式 +- 默认中文 +- 自带前端导航模块 +- 支持访客统计 +- 支持 [giscus 评论](https://giscus.app/zh-CN) +- 支持日夜颜色模式自适应切换 +- 支持 Github Pages 直接部署上线 + - 1. 开启 github actions + - 2. 配置 Pages 为 `gh-pages` 分支 + - 3. 访问地址为 `https://.github.io//` +- 支持 [tailwindcss](https://github.com/tailwindlabs/tailwindcss) +- 支持查看 vue 示例组件源码(使用 [vite-plugin-markdown-preview](https://github.com/jaskang/vite-plugin-markdown-preview)) + +### 开启访客统计 + +需在 `docs/.vitepress/config.ts` 中配置 `themeConfig.visitor` + +```ts +export default defineConfig({ + themeConfig: { + /* 访客统计 */ + visitor: { + /** 统计 id(单独页面的统计会作为前缀使用)*/ + badgeId: 'maomao1996.vitepress-nav-template', + }, + }, +}) +``` + +### 开启 giscus 评论 + +需在 `docs/.vitepress/config.ts` 中配置 `themeConfig.comment` + +```ts +export default defineConfig({ + themeConfig: { + /** + * giscus 评论配置 + * 请根据 https://giscus.app/zh-CN 生成内容填写 + */ + comment: { + /** github 仓库地址 */ + repo: '', + /** giscus 仓库 ID */ + repoId: '', + /** Discussion 分类 */ + category: '', + /** giscus 分类 ID */ + categoryId: '', + }, + }, +}) +``` + +#### 在指定页面关闭评论 + +需在指定页面的 `markdown` 文件中添加如下 `frontmatter` 配置 + +```md +--- +comment: false +--- + +# 功能测试页 +``` + +docs: 更新 README + +## 说明 + +前端导航模块由 [茂茂 | maomao](https://github.com/maomao1996) 开发,如有引用、借鉴的请保留版权声明: diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts new file mode 100644 index 0000000..41c873b --- /dev/null +++ b/docs/.vitepress/config.ts @@ -0,0 +1,83 @@ +import { basename } from 'node:path' +import { defineConfig } from 'vitepress' +import MarkdownPreview from 'vite-plugin-markdown-preview' + +import { head, nav, sidebar } from './configs' + +const APP_BASE_PATH = basename(process.env.GITHUB_REPOSITORY || '') + +export default defineConfig({ + outDir: '../dist', + base: APP_BASE_PATH ? `/${APP_BASE_PATH}/` : '/', + + lang: 'zh-CN', + title: '茂茂物语', + description: '茂茂的成长之路,包含前端常用知识、源码阅读笔记、各种奇淫技巧、日常提效工具等', + head, + + lastUpdated: true, + cleanUrls: true, + + /* markdown 配置 */ + markdown: { + lineNumbers: true, + }, + + /* 主题配置 */ + themeConfig: { + i18nRouting: false, + + logo: '/logo.png', + + nav, + sidebar, + + /* 右侧大纲配置 */ + outline: { + level: 'deep', + label: '目录', + }, + + socialLinks: [{ icon: 'github', link: 'https://github.com/maomao1996/vitepress-nav-template' }], + + footer: { + message: '如有转载或 CV 的请标注本站原文地址', + copyright: 'Copyright © 2019-present maomao', + }, + + lastUpdated: { + text: '最后更新于', + formatOptions: { + dateStyle: 'short', + timeStyle: 'medium', + }, + }, + + docFooter: { + prev: '上一篇', + next: '下一篇', + }, + + returnToTopLabel: '回到顶部', + sidebarMenuLabel: '菜单', + darkModeSwitchLabel: '主题', + lightModeSwitchTitle: '切换到浅色模式', + darkModeSwitchTitle: '切换到深色模式', + + /*** 自定义配置 ***/ + visitor: { + badgeId: 'maomao1996.vitepress-nav-template', + }, + + comment: { + repo: 'maomao1996/vitepress-nav-template', + repoId: 'R_kgDOJC09Jg', + category: 'Announcements', + categoryId: 'DIC_kwDOJC09Js4Cekn0', + }, + }, + + vite: { + plugins: [MarkdownPreview()], + }, +}) diff --git a/docs/.vitepress/configs/head.ts b/docs/.vitepress/configs/head.ts new file mode 100644 index 0000000..f5d75df --- /dev/null +++ b/docs/.vitepress/configs/head.ts @@ -0,0 +1,11 @@ +import type { HeadConfig } from 'vitepress' + +export const head: HeadConfig[] = [ + ['meta', { name: 'theme-color', content: '#3eaf7c' }], + ['meta', { name: 'apple-mobile-web-app-capable', content: 'yes' }], + ['meta', { name: 'apple-mobile-web-app-status-bar-style', content: 'black' }], + ['link', { rel: 'apple-touch-icon', href: '/favicon.ico' }], + ['link', { rel: 'mask-icon', href: '/favicon.ico', color: '#3eaf7c' }], + ['meta', { name: 'msapplication-TileImage', content: '/favicon.ico' }], + ['meta', { name: 'msapplication-TileColor', content: '#000000' }], +] diff --git a/docs/.vitepress/configs/index.ts b/docs/.vitepress/configs/index.ts new file mode 100644 index 0000000..8b8cdea --- /dev/null +++ b/docs/.vitepress/configs/index.ts @@ -0,0 +1,3 @@ +export * from './head' +export * from './nav' +export * from './sidebar' diff --git a/docs/.vitepress/configs/nav.ts b/docs/.vitepress/configs/nav.ts new file mode 100644 index 0000000..a3b395f --- /dev/null +++ b/docs/.vitepress/configs/nav.ts @@ -0,0 +1,15 @@ +import type { DefaultTheme } from 'vitepress' + +export const nav: DefaultTheme.Config['nav'] = [ + { text: '前端导航', link: '/nav/' }, + { text: '茂茂主页', link: 'https://fe-mm.com' }, + { + text: '茂茂物语', + link: 'https://notes.fe-mm.com', + }, + { text: 'mmPlayer', link: 'https://netease-music.fe-mm.com' }, + { + text: '油猴脚本', + link: 'https://github.com/maomao1996/tampermonkey-scripts', + }, +] diff --git a/docs/.vitepress/configs/sidebar.ts b/docs/.vitepress/configs/sidebar.ts new file mode 100644 index 0000000..f34a66e --- /dev/null +++ b/docs/.vitepress/configs/sidebar.ts @@ -0,0 +1,3 @@ +import type { DefaultTheme } from 'vitepress' + +export const sidebar: DefaultTheme.Config['sidebar'] = {} diff --git a/docs/.vitepress/theme/components/MDocFooter.vue b/docs/.vitepress/theme/components/MDocFooter.vue new file mode 100644 index 0000000..52b8e06 --- /dev/null +++ b/docs/.vitepress/theme/components/MDocFooter.vue @@ -0,0 +1,67 @@ + + + + + diff --git a/docs/.vitepress/theme/components/MLayout.vue b/docs/.vitepress/theme/components/MLayout.vue new file mode 100644 index 0000000..460cb67 --- /dev/null +++ b/docs/.vitepress/theme/components/MLayout.vue @@ -0,0 +1,111 @@ + + + + + diff --git a/docs/.vitepress/theme/components/MNavLink.vue b/docs/.vitepress/theme/components/MNavLink.vue new file mode 100644 index 0000000..5b52c48 --- /dev/null +++ b/docs/.vitepress/theme/components/MNavLink.vue @@ -0,0 +1,135 @@ + + + + + diff --git a/docs/.vitepress/theme/components/MNavLinks.vue b/docs/.vitepress/theme/components/MNavLinks.vue new file mode 100644 index 0000000..ee56fc4 --- /dev/null +++ b/docs/.vitepress/theme/components/MNavLinks.vue @@ -0,0 +1,60 @@ + + + + + diff --git a/docs/.vitepress/theme/components/MNavVisitor.vue b/docs/.vitepress/theme/components/MNavVisitor.vue new file mode 100644 index 0000000..fe28065 --- /dev/null +++ b/docs/.vitepress/theme/components/MNavVisitor.vue @@ -0,0 +1,29 @@ + + + + + diff --git a/docs/.vitepress/theme/composables/index.ts b/docs/.vitepress/theme/composables/index.ts new file mode 100644 index 0000000..9e6f916 --- /dev/null +++ b/docs/.vitepress/theme/composables/index.ts @@ -0,0 +1,3 @@ +export * from './useFormatPath' +export * from './useMediumZoom' +export * from './usePageId' diff --git a/docs/.vitepress/theme/composables/useFormatPath.ts b/docs/.vitepress/theme/composables/useFormatPath.ts new file mode 100644 index 0000000..76a8882 --- /dev/null +++ b/docs/.vitepress/theme/composables/useFormatPath.ts @@ -0,0 +1,12 @@ +import { useData, useRoute } from 'vitepress' +import { computed } from 'vue' + +/** + * 对 route.path 进行格式化,统一 github pages 和其他部署平台的 route.path + */ +export function useFormatPath() { + const { site } = useData() + const route = useRoute() + + return computed(() => route.path.replace(site.value.base.replace(/\/$/, ''), '')) +} diff --git a/docs/.vitepress/theme/composables/useMediumZoom.ts b/docs/.vitepress/theme/composables/useMediumZoom.ts new file mode 100644 index 0000000..e53f2b8 --- /dev/null +++ b/docs/.vitepress/theme/composables/useMediumZoom.ts @@ -0,0 +1,49 @@ +import type { Router } from 'vitepress' +import type { App, InjectionKey } from 'vue' +import type { Zoom } from 'medium-zoom' + +import { inject, watch } from 'vue' +import mediumZoom from 'medium-zoom' + +declare module 'medium-zoom' { + interface Zoom { + refresh: (selector?: string) => void + } +} + +const defaultSelector = ':not(a) > img:not(.image-src, .visitor, .vp-sponsor-grid-image)' + +export const mediumZoomSymbol: InjectionKey = Symbol('medium-zoom') + +export const createMediumZoomProvider = (app: App, router: Router) => { + if (import.meta.env.SSR) { + return + } + + const zoom = mediumZoom() + // 扩展 zoom.refresh 方法 + zoom.refresh = (selector = defaultSelector) => { + zoom.detach() + zoom.attach(selector) + } + + app.provide(mediumZoomSymbol, zoom) + + watch( + () => router.route.path, + // 使用 nextTick 时在 dev 环境下第一次进入页面无法触发 + () => setTimeout(() => zoom.refresh()), + ) +} + +export function useMediumZoom(): Zoom | null { + if (import.meta.env.SSR) { + return null + } + + const zoom = inject(mediumZoomSymbol) + if (!zoom) { + throw new Error('useMediumZoom() is called without provider.') + } + return zoom +} diff --git a/docs/.vitepress/theme/composables/usePageId.ts b/docs/.vitepress/theme/composables/usePageId.ts new file mode 100644 index 0000000..f6380c1 --- /dev/null +++ b/docs/.vitepress/theme/composables/usePageId.ts @@ -0,0 +1,14 @@ +import { computed } from 'vue' +import { useData } from 'vitepress' + +import { useFormatPath } from '../composables' + +/** + * 获取当前页面的 pageId 用于页面统计和评论(默认为 route.path) + */ +export function usePageId() { + const { frontmatter } = useData() + const formatPath = useFormatPath() + + return computed(() => frontmatter.value.pageId || formatPath.value) +} diff --git a/docs/.vitepress/theme/index.ts b/docs/.vitepress/theme/index.ts new file mode 100644 index 0000000..7de93bb --- /dev/null +++ b/docs/.vitepress/theme/index.ts @@ -0,0 +1,78 @@ +import { h, watch } from 'vue' +import { useData, EnhanceAppContext } from 'vitepress' +import DefaultTheme from 'vitepress/theme' + +import { createMediumZoomProvider } from './composables/useMediumZoom' + +import MLayout from './components/MLayout.vue' +import MNavLinks from './components/MNavLinks.vue' + +import './styles/index.scss' + +let homePageStyle: HTMLStyleElement | undefined + +export default { + extends: DefaultTheme, + Layout: () => { + const props: Record = {} + // 获取 frontmatter + const { frontmatter } = useData() + + /* 添加自定义 class */ + if (frontmatter.value?.layoutClass) { + props.class = frontmatter.value.layoutClass + } + + return h(MLayout, props) + }, + enhanceApp({ app, router }: EnhanceAppContext) { + createMediumZoomProvider(app, router) + + app.provide('DEV', process.env.NODE_ENV === 'development') + + app.component('MNavLinks', MNavLinks) + + if (typeof window !== 'undefined') { + watch( + () => router.route.data.relativePath, + () => + updateHomePageStyle( + /* /vitepress-nav-template/ 是为了兼容 GitHub Pages */ + location.pathname === '/' || location.pathname === '/vitepress-nav-template/', + ), + { immediate: true }, + ) + } + }, +} + +if (typeof window !== 'undefined') { + // detect browser, add to class for conditional styling + const browser = navigator.userAgent.toLowerCase() + if (browser.includes('chrome')) { + document.documentElement.classList.add('browser-chrome') + } else if (browser.includes('firefox')) { + document.documentElement.classList.add('browser-firefox') + } else if (browser.includes('safari')) { + document.documentElement.classList.add('browser-safari') + } +} + +// Speed up the rainbow animation on home page +function updateHomePageStyle(value: boolean) { + if (value) { + if (homePageStyle) return + + homePageStyle = document.createElement('style') + homePageStyle.innerHTML = ` + :root { + animation: rainbow 12s linear infinite; + }` + document.body.appendChild(homePageStyle) + } else { + if (!homePageStyle) return + + homePageStyle.remove() + homePageStyle = undefined + } +} diff --git a/docs/.vitepress/theme/styles/index.scss b/docs/.vitepress/theme/styles/index.scss new file mode 100644 index 0000000..df2c8ed --- /dev/null +++ b/docs/.vitepress/theme/styles/index.scss @@ -0,0 +1,5 @@ +@import './rainbow.scss'; +@import './vars.scss'; +@import './vitepress.scss'; +@import './medium-zoom.scss'; +@import './tailwind.scss'; diff --git a/docs/.vitepress/theme/styles/medium-zoom.scss b/docs/.vitepress/theme/styles/medium-zoom.scss new file mode 100644 index 0000000..6eacad1 --- /dev/null +++ b/docs/.vitepress/theme/styles/medium-zoom.scss @@ -0,0 +1,14 @@ +:root { + --medium-zoom-z-index: 100; + --medium-zoom-c-bg: var(--vp-c-bg); +} + +.medium-zoom-overlay { + /* override element style set by medium-zoom script */ + z-index: var(--medium-zoom-z-index); + background-color: var(--medium-zoom-c-bg) !important; +} + +.medium-zoom-overlay ~ img { + z-index: calc(var(--medium-zoom-z-index) + 1); +} diff --git a/docs/.vitepress/theme/styles/rainbow.scss b/docs/.vitepress/theme/styles/rainbow.scss new file mode 100644 index 0000000..b847265 --- /dev/null +++ b/docs/.vitepress/theme/styles/rainbow.scss @@ -0,0 +1,679 @@ +/** + * 来源于 unocss + * https://github.com/unocss/unocss/blob/f3bf5218294928f48f5745cd8686261334a7c78d/docs/.vitepress/theme/rainbow.css + */ + +@keyframes rainbow { + 0% { + --vp-c-brand-1: #00a98e; + --vp-c-brand-light: #4ad1b4; + --vp-c-brand-lighter: #78fadc; + --vp-c-brand-dark: #008269; + --vp-c-brand-darker: #005d47; + --vp-c-brand-next: #009ff7; + } + 1.25% { + --vp-c-brand-1: #00a996; + --vp-c-brand-light: #4bd1bd; + --vp-c-brand-lighter: #79fbe5; + --vp-c-brand-dark: #008371; + --vp-c-brand-darker: #005e4f; + --vp-c-brand-next: #009dfa; + } + 2.5% { + --vp-c-brand-1: #00a99f; + --vp-c-brand-light: #4cd1c6; + --vp-c-brand-lighter: #7afbee; + --vp-c-brand-dark: #00837a; + --vp-c-brand-darker: #005e56; + --vp-c-brand-next: #009bfc; + } + 3.75% { + --vp-c-brand-1: #00a9a7; + --vp-c-brand-light: #4dd1cf; + --vp-c-brand-lighter: #7bfbf8; + --vp-c-brand-dark: #008382; + --vp-c-brand-darker: #005e5e; + --vp-c-brand-next: #0098fd; + } + 5% { + --vp-c-brand-1: #00a9b0; + --vp-c-brand-light: #4ed1d7; + --vp-c-brand-lighter: #7dfaff; + --vp-c-brand-dark: #00838a; + --vp-c-brand-darker: #005e65; + --vp-c-brand-next: #0096fd; + } + 6.25% { + --vp-c-brand-1: #00a9b8; + --vp-c-brand-light: #4fd1e0; + --vp-c-brand-lighter: #7efaff; + --vp-c-brand-dark: #008391; + --vp-c-brand-darker: #005e6d; + --vp-c-brand-next: #0093fd; + } + 7.5% { + --vp-c-brand-1: #00a9c0; + --vp-c-brand-light: #50d0e8; + --vp-c-brand-lighter: #7ffaff; + --vp-c-brand-dark: #008399; + --vp-c-brand-darker: #005e74; + --vp-c-brand-next: #2e90fc; + } + 8.75% { + --vp-c-brand-1: #00a8c7; + --vp-c-brand-light: #51d0f0; + --vp-c-brand-lighter: #81f9ff; + --vp-c-brand-dark: #0082a0; + --vp-c-brand-darker: #005e7b; + --vp-c-brand-next: #4d8dfa; + } + 10% { + --vp-c-brand-1: #00a8cf; + --vp-c-brand-light: #52cff7; + --vp-c-brand-lighter: #82f8ff; + --vp-c-brand-dark: #0082a7; + --vp-c-brand-darker: #005e81; + --vp-c-brand-next: #638af8; + } + 11.25% { + --vp-c-brand-1: #00a7d5; + --vp-c-brand-light: #53cfff; + --vp-c-brand-lighter: #84f8ff; + --vp-c-brand-dark: #0081ae; + --vp-c-brand-darker: #005d87; + --vp-c-brand-next: #7587f5; + } + 12.5% { + --vp-c-brand-1: #00a6dc; + --vp-c-brand-light: #55ceff; + --vp-c-brand-lighter: #85f7ff; + --vp-c-brand-dark: #0081b4; + --vp-c-brand-darker: #005d8d; + --vp-c-brand-next: #8583f1; + } + 13.75% { + --vp-c-brand-1: #00a6e2; + --vp-c-brand-light: #56cdff; + --vp-c-brand-lighter: #87f6ff; + --vp-c-brand-dark: #0080b9; + --vp-c-brand-darker: #005c93; + --vp-c-brand-next: #9280ed; + } + 15% { + --vp-c-brand-1: #00a4e7; + --vp-c-brand-light: #57ccff; + --vp-c-brand-lighter: #88f4ff; + --vp-c-brand-dark: #007fbf; + --vp-c-brand-darker: #005b98; + --vp-c-brand-next: #9f7ce9; + } + 16.25% { + --vp-c-brand-1: #00a3ec; + --vp-c-brand-light: #58caff; + --vp-c-brand-lighter: #89f3ff; + --vp-c-brand-dark: #007ec3; + --vp-c-brand-darker: #005b9c; + --vp-c-brand-next: #aa78e3; + } + 17.5% { + --vp-c-brand-1: #00a2f1; + --vp-c-brand-light: #58c9ff; + --vp-c-brand-lighter: #8af1ff; + --vp-c-brand-dark: #007dc8; + --vp-c-brand-darker: #0059a0; + --vp-c-brand-next: #b574dd; + } + 18.75% { + --vp-c-brand-1: #00a0f4; + --vp-c-brand-light: #59c7ff; + --vp-c-brand-lighter: #8bf0ff; + --vp-c-brand-dark: #007bcb; + --vp-c-brand-darker: #0058a3; + --vp-c-brand-next: #be71d7; + } + 20% { + --vp-c-brand-1: #009ff7; + --vp-c-brand-light: #5ac5ff; + --vp-c-brand-lighter: #8ceeff; + --vp-c-brand-dark: #007ace; + --vp-c-brand-darker: #0057a6; + --vp-c-brand-next: #c76dd1; + } + 21.25% { + --vp-c-brand-1: #009dfa; + --vp-c-brand-light: #5ac3ff; + --vp-c-brand-lighter: #8decff; + --vp-c-brand-dark: #0078d0; + --vp-c-brand-darker: #0055a8; + --vp-c-brand-next: #cf69c9; + } + 22.5% { + --vp-c-brand-1: #009bfc; + --vp-c-brand-light: #5bc1ff; + --vp-c-brand-lighter: #8de9ff; + --vp-c-brand-dark: #0076d2; + --vp-c-brand-darker: #0053aa; + --vp-c-brand-next: #d566c2; + } + 23.75% { + --vp-c-brand-1: #0098fd; + --vp-c-brand-light: #5bbfff; + --vp-c-brand-lighter: #8ee7ff; + --vp-c-brand-dark: #0074d3; + --vp-c-brand-darker: #0051ab; + --vp-c-brand-next: #dc63ba; + } + 25% { + --vp-c-brand-1: #0096fd; + --vp-c-brand-light: #5bbcff; + --vp-c-brand-lighter: #8ee4ff; + --vp-c-brand-dark: #0071d4; + --vp-c-brand-darker: #004fab; + --vp-c-brand-next: #e160b3; + } + 26.25% { + --vp-c-brand-1: #0093fd; + --vp-c-brand-light: #5bb9ff; + --vp-c-brand-lighter: #8ee1ff; + --vp-c-brand-dark: #006fd3; + --vp-c-brand-darker: #004dab; + --vp-c-brand-next: #e65eab; + } + 27.5% { + --vp-c-brand-1: #2e90fc; + --vp-c-brand-light: #69b6ff; + --vp-c-brand-lighter: #99deff; + --vp-c-brand-dark: #006cd2; + --vp-c-brand-darker: #004baa; + --vp-c-brand-next: #e95ca2; + } + 28.75% { + --vp-c-brand-1: #4d8dfa; + --vp-c-brand-light: #7eb3ff; + --vp-c-brand-lighter: #abdbff; + --vp-c-brand-dark: #0069d1; + --vp-c-brand-darker: #0048a9; + --vp-c-brand-next: #ed5a9a; + } + 30% { + --vp-c-brand-1: #638af8; + --vp-c-brand-light: #8fb0ff; + --vp-c-brand-lighter: #bbd7ff; + --vp-c-brand-dark: #3066cf; + --vp-c-brand-darker: #0045a7; + --vp-c-brand-next: #ef5992; + } + 31.25% { + --vp-c-brand-1: #7587f5; + --vp-c-brand-light: #9fadff; + --vp-c-brand-lighter: #cad4ff; + --vp-c-brand-dark: #4963cc; + --vp-c-brand-darker: #0941a4; + --vp-c-brand-next: #f15989; + } + 32.5% { + --vp-c-brand-1: #8583f1; + --vp-c-brand-light: #aea9ff; + --vp-c-brand-lighter: #d8d1ff; + --vp-c-brand-dark: #5b5fc8; + --vp-c-brand-darker: #2e3ea1; + --vp-c-brand-next: #f25981; + } + 33.75% { + --vp-c-brand-1: #9280ed; + --vp-c-brand-light: #bca6ff; + --vp-c-brand-lighter: #e6cdff; + --vp-c-brand-dark: #6a5cc4; + --vp-c-brand-darker: #413a9d; + --vp-c-brand-next: #f25a79; + } + 35% { + --vp-c-brand-1: #9f7ce9; + --vp-c-brand-light: #c8a2ff; + --vp-c-brand-lighter: #f2c9ff; + --vp-c-brand-dark: #7758c0; + --vp-c-brand-darker: #503598; + --vp-c-brand-next: #f25c71; + } + 36.25% { + --vp-c-brand-1: #aa78e3; + --vp-c-brand-light: #d39eff; + --vp-c-brand-lighter: #fec6ff; + --vp-c-brand-dark: #8354bb; + --vp-c-brand-darker: #5c3193; + --vp-c-brand-next: #f15e69; + } + 37.5% { + --vp-c-brand-1: #b574dd; + --vp-c-brand-light: #de9bff; + --vp-c-brand-lighter: #ffc2ff; + --vp-c-brand-dark: #8d50b5; + --vp-c-brand-darker: #662c8e; + --vp-c-brand-next: #ef6061; + } + 38.75% { + --vp-c-brand-1: #be71d7; + --vp-c-brand-light: #e897ff; + --vp-c-brand-lighter: #ffbfff; + --vp-c-brand-dark: #964baf; + --vp-c-brand-darker: #6f2688; + --vp-c-brand-next: #ed635a; + } + 40% { + --vp-c-brand-1: #c76dd1; + --vp-c-brand-light: #f194fa; + --vp-c-brand-lighter: #ffbcff; + --vp-c-brand-dark: #9e47a9; + --vp-c-brand-darker: #772082; + --vp-c-brand-next: #eb6552; + } + 41.25% { + --vp-c-brand-1: #cf69c9; + --vp-c-brand-light: #f991f2; + --vp-c-brand-lighter: #ffb9ff; + --vp-c-brand-dark: #a643a2; + --vp-c-brand-darker: #7e197c; + --vp-c-brand-next: #e8694b; + } + 42.5% { + --vp-c-brand-1: #d566c2; + --vp-c-brand-light: #ff8deb; + --vp-c-brand-lighter: #ffb6ff; + --vp-c-brand-dark: #ac3f9b; + --vp-c-brand-darker: #841075; + --vp-c-brand-next: #e46c44; + } + 43.75% { + --vp-c-brand-1: #dc63ba; + --vp-c-brand-light: #ff8be3; + --vp-c-brand-lighter: #ffb3ff; + --vp-c-brand-dark: #b23b94; + --vp-c-brand-darker: #89046f; + --vp-c-brand-next: #e06f3d; + } + 45% { + --vp-c-brand-1: #e160b3; + --vp-c-brand-light: #ff88db; + --vp-c-brand-lighter: #ffb1ff; + --vp-c-brand-dark: #b7378c; + --vp-c-brand-darker: #8d0068; + --vp-c-brand-next: #db7336; + } + 46.25% { + --vp-c-brand-1: #e65eab; + --vp-c-brand-light: #ff86d2; + --vp-c-brand-lighter: #ffaffb; + --vp-c-brand-dark: #bb3485; + --vp-c-brand-darker: #910060; + --vp-c-brand-next: #d77630; + } + 47.5% { + --vp-c-brand-1: #e95ca2; + --vp-c-brand-light: #ff84ca; + --vp-c-brand-lighter: #ffadf2; + --vp-c-brand-dark: #be317d; + --vp-c-brand-darker: #940059; + --vp-c-brand-next: #d17a2a; + } + 48.75% { + --vp-c-brand-1: #ed5a9a; + --vp-c-brand-light: #ff83c1; + --vp-c-brand-lighter: #fface9; + --vp-c-brand-dark: #c12f75; + --vp-c-brand-darker: #970052; + --vp-c-brand-next: #cc7d24; + } + 50% { + --vp-c-brand-1: #ef5992; + --vp-c-brand-light: #ff82b8; + --vp-c-brand-lighter: #ffabe0; + --vp-c-brand-dark: #c32d6d; + --vp-c-brand-darker: #98004b; + --vp-c-brand-next: #c6811e; + } + 51.25% { + --vp-c-brand-1: #f15989; + --vp-c-brand-light: #ff82af; + --vp-c-brand-lighter: #ffabd7; + --vp-c-brand-dark: #c52d65; + --vp-c-brand-darker: #9a0043; + --vp-c-brand-next: #bf8418; + } + 52.5% { + --vp-c-brand-1: #f25981; + --vp-c-brand-light: #ff82a7; + --vp-c-brand-lighter: #ffabce; + --vp-c-brand-dark: #c52e5e; + --vp-c-brand-darker: #9a003c; + --vp-c-brand-next: #b98713; + } + 53.75% { + --vp-c-brand-1: #f25a79; + --vp-c-brand-light: #ff839e; + --vp-c-brand-lighter: #ffacc5; + --vp-c-brand-dark: #c62f56; + --vp-c-brand-darker: #9a0035; + --vp-c-brand-next: #b28a0f; + } + 55% { + --vp-c-brand-1: #f25c71; + --vp-c-brand-light: #ff8496; + --vp-c-brand-lighter: #ffadbc; + --vp-c-brand-dark: #c5314e; + --vp-c-brand-darker: #99002e; + --vp-c-brand-next: #ab8d0c; + } + 56.25% { + --vp-c-brand-1: #f15e69; + --vp-c-brand-light: #ff868d; + --vp-c-brand-lighter: #ffaeb4; + --vp-c-brand-dark: #c43447; + --vp-c-brand-darker: #980027; + --vp-c-brand-next: #a3900b; + } + 57.5% { + --vp-c-brand-1: #ef6061; + --vp-c-brand-light: #ff8885; + --vp-c-brand-lighter: #ffb0ab; + --vp-c-brand-dark: #c3373f; + --vp-c-brand-darker: #970020; + --vp-c-brand-next: #9c920d; + } + 58.75% { + --vp-c-brand-1: #ed635a; + --vp-c-brand-light: #ff8a7d; + --vp-c-brand-lighter: #ffb2a3; + --vp-c-brand-dark: #c13b38; + --vp-c-brand-darker: #940619; + --vp-c-brand-next: #949510; + } + 60% { + --vp-c-brand-1: #eb6552; + --vp-c-brand-light: #ff8d76; + --vp-c-brand-lighter: #ffb59b; + --vp-c-brand-dark: #be3e31; + --vp-c-brand-darker: #921111; + --vp-c-brand-next: #8b9715; + } + 61.25% { + --vp-c-brand-1: #e8694b; + --vp-c-brand-light: #ff8f6e; + --vp-c-brand-lighter: #ffb794; + --vp-c-brand-dark: #bb4229; + --vp-c-brand-darker: #8f1908; + --vp-c-brand-next: #83991b; + } + 62.5% { + --vp-c-brand-1: #e46c44; + --vp-c-brand-light: #ff9367; + --vp-c-brand-lighter: #ffba8c; + --vp-c-brand-dark: #b74622; + --vp-c-brand-darker: #8c1f00; + --vp-c-brand-next: #7a9b21; + } + 63.75% { + --vp-c-brand-1: #e06f3d; + --vp-c-brand-light: #ff9661; + --vp-c-brand-lighter: #ffbd86; + --vp-c-brand-dark: #b44a1a; + --vp-c-brand-darker: #882500; + --vp-c-brand-next: #719d27; + } + 65% { + --vp-c-brand-1: #db7336; + --vp-c-brand-light: #ff995a; + --vp-c-brand-lighter: #ffc17f; + --vp-c-brand-dark: #af4e11; + --vp-c-brand-darker: #842a00; + --vp-c-brand-next: #679e2e; + } + 66.25% { + --vp-c-brand-1: #d77630; + --vp-c-brand-light: #ff9c54; + --vp-c-brand-lighter: #ffc47a; + --vp-c-brand-dark: #ab5206; + --vp-c-brand-darker: #802f00; + --vp-c-brand-next: #5da035; + } + 67.5% { + --vp-c-brand-1: #d17a2a; + --vp-c-brand-light: #fea04f; + --vp-c-brand-lighter: #ffc774; + --vp-c-brand-dark: #a55600; + --vp-c-brand-darker: #7b3300; + --vp-c-brand-next: #51a13c; + } + 68.75% { + --vp-c-brand-1: #cc7d24; + --vp-c-brand-light: #f8a34a; + --vp-c-brand-lighter: #ffca70; + --vp-c-brand-dark: #a05900; + --vp-c-brand-darker: #773700; + --vp-c-brand-next: #44a244; + } + 70% { + --vp-c-brand-1: #c6811e; + --vp-c-brand-light: #f2a646; + --vp-c-brand-lighter: #ffce6c; + --vp-c-brand-dark: #9b5d00; + --vp-c-brand-darker: #713b00; + --vp-c-brand-next: #34a44b; + } + 71.25% { + --vp-c-brand-1: #bf8418; + --vp-c-brand-light: #ebaa42; + --vp-c-brand-lighter: #ffd168; + --vp-c-brand-dark: #956000; + --vp-c-brand-darker: #6c3e00; + --vp-c-brand-next: #1ba553; + } + 72.5% { + --vp-c-brand-1: #b98713; + --vp-c-brand-light: #e4ad3f; + --vp-c-brand-lighter: #ffd466; + --vp-c-brand-dark: #8e6300; + --vp-c-brand-darker: #674100; + --vp-c-brand-next: #00a65b; + } + 73.75% { + --vp-c-brand-1: #b28a0f; + --vp-c-brand-light: #ddb03d; + --vp-c-brand-lighter: #ffd764; + --vp-c-brand-dark: #886600; + --vp-c-brand-darker: #614400; + --vp-c-brand-next: #00a663; + } + 75% { + --vp-c-brand-1: #ab8d0c; + --vp-c-brand-light: #d5b33c; + --vp-c-brand-lighter: #ffda63; + --vp-c-brand-dark: #816900; + --vp-c-brand-darker: #5b4700; + --vp-c-brand-next: #00a76c; + } + 76.25% { + --vp-c-brand-1: #a3900b; + --vp-c-brand-light: #cdb63c; + --vp-c-brand-lighter: #f8dd63; + --vp-c-brand-dark: #7a6b00; + --vp-c-brand-darker: #554900; + --vp-c-brand-next: #00a874; + } + 77.5% { + --vp-c-brand-1: #9c920d; + --vp-c-brand-light: #c5b83d; + --vp-c-brand-lighter: #f0e064; + --vp-c-brand-dark: #736e00; + --vp-c-brand-darker: #4e4b00; + --vp-c-brand-next: #00a87d; + } + 78.75% { + --vp-c-brand-1: #949510; + --vp-c-brand-light: #bdbb3e; + --vp-c-brand-lighter: #e7e366; + --vp-c-brand-dark: #6c7000; + --vp-c-brand-darker: #474d00; + --vp-c-brand-next: #00a985; + } + 80% { + --vp-c-brand-1: #8b9715; + --vp-c-brand-light: #b4bd41; + --vp-c-brand-lighter: #dee668; + --vp-c-brand-dark: #647200; + --vp-c-brand-darker: #404f00; + --vp-c-brand-next: #00a98e; + } + 81.25% { + --vp-c-brand-1: #83991b; + --vp-c-brand-light: #abc045; + --vp-c-brand-lighter: #d4e86c; + --vp-c-brand-dark: #5c7400; + --vp-c-brand-darker: #385100; + --vp-c-brand-next: #00a996; + } + 82.5% { + --vp-c-brand-1: #7a9b21; + --vp-c-brand-light: #a2c249; + --vp-c-brand-lighter: #cbea70; + --vp-c-brand-dark: #537600; + --vp-c-brand-darker: #2f5200; + --vp-c-brand-next: #00a99f; + } + 83.75% { + --vp-c-brand-1: #719d27; + --vp-c-brand-light: #98c44e; + --vp-c-brand-lighter: #c1ec75; + --vp-c-brand-dark: #4a7700; + --vp-c-brand-darker: #255300; + --vp-c-brand-next: #00a9a7; + } + 85% { + --vp-c-brand-1: #679e2e; + --vp-c-brand-light: #8ec654; + --vp-c-brand-lighter: #b7ee7a; + --vp-c-brand-dark: #407900; + --vp-c-brand-darker: #185500; + --vp-c-brand-next: #00a9b0; + } + 86.25% { + --vp-c-brand-1: #5da035; + --vp-c-brand-light: #84c75a; + --vp-c-brand-lighter: #acf080; + --vp-c-brand-dark: #357a0a; + --vp-c-brand-darker: #015600; + --vp-c-brand-next: #00a9b8; + } + 87.5% { + --vp-c-brand-1: #51a13c; + --vp-c-brand-light: #79c961; + --vp-c-brand-lighter: #a1f287; + --vp-c-brand-dark: #277b16; + --vp-c-brand-darker: #005700; + --vp-c-brand-next: #00a9c0; + } + 88.75% { + --vp-c-brand-1: #44a244; + --vp-c-brand-light: #6dca68; + --vp-c-brand-lighter: #96f48e; + --vp-c-brand-dark: #117c1f; + --vp-c-brand-darker: #005700; + --vp-c-brand-next: #00a8c7; + } + 90% { + --vp-c-brand-1: #34a44b; + --vp-c-brand-light: #60cc70; + --vp-c-brand-lighter: #89f595; + --vp-c-brand-dark: #007d28; + --vp-c-brand-darker: #005801; + --vp-c-brand-next: #00a8cf; + } + 91.25% { + --vp-c-brand-1: #1ba553; + --vp-c-brand-light: #51cd77; + --vp-c-brand-lighter: #7cf69d; + --vp-c-brand-dark: #007e30; + --vp-c-brand-darker: #00590d; + --vp-c-brand-next: #00a7d5; + } + 92.5% { + --vp-c-brand-1: #00a65b; + --vp-c-brand-light: #48ce80; + --vp-c-brand-lighter: #75f7a6; + --vp-c-brand-dark: #007f38; + --vp-c-brand-darker: #005917; + --vp-c-brand-next: #00a6dc; + } + 93.75% { + --vp-c-brand-1: #00a663; + --vp-c-brand-light: #48cf88; + --vp-c-brand-lighter: #75f8ae; + --vp-c-brand-dark: #008040; + --vp-c-brand-darker: #005a20; + --vp-c-brand-next: #00a6e2; + } + 95% { + --vp-c-brand-1: #00a76c; + --vp-c-brand-light: #49cf91; + --vp-c-brand-lighter: #76f9b7; + --vp-c-brand-dark: #008049; + --vp-c-brand-darker: #005b28; + --vp-c-brand-next: #00a4e7; + } + 96.25% { + --vp-c-brand-1: #00a874; + --vp-c-brand-light: #49d099; + --vp-c-brand-lighter: #76f9c0; + --vp-c-brand-dark: #008151; + --vp-c-brand-darker: #005c30; + --vp-c-brand-next: #00a3ec; + } + 97.5% { + --vp-c-brand-1: #00a87d; + --vp-c-brand-light: #49d0a2; + --vp-c-brand-lighter: #77fac9; + --vp-c-brand-dark: #008159; + --vp-c-brand-darker: #005c37; + --vp-c-brand-next: #00a2f1; + } + 98.75% { + --vp-c-brand-1: #00a985; + --vp-c-brand-light: #4ad1ab; + --vp-c-brand-lighter: #77fad3; + --vp-c-brand-dark: #008261; + --vp-c-brand-darker: #005d3f; + --vp-c-brand-next: #00a0f4; + } + 100% { + --vp-c-brand-1: #00a98e; + --vp-c-brand-light: #4ad1b4; + --vp-c-brand-lighter: #78fadc; + --vp-c-brand-dark: #008269; + --vp-c-brand-darker: #005d47; + --vp-c-brand-next: #009ff7; + } +} + +:root { + --vp-c-brand-1: #00a98e; + --vp-c-brand-light: #4ad1b4; + --vp-c-brand-lighter: #78fadc; + --vp-c-brand-dark: #008269; + --vp-c-brand-darker: #005d47; + --vp-c-brand-next: #009ff7; + + --vp-c-brand-2: var(--vp-c-brand-darker); + + // 一共 82 种颜色,颜色过度时间为 3s + animation: rainbow 246s linear infinite; +} + +:root.dark { + --vp-c-brand-2: var(--vp-c-brand-light); +} + +@media (prefers-reduced-motion: reduce) { + :root { + animation: none !important; + } +} diff --git a/docs/.vitepress/theme/styles/tailwind.scss b/docs/.vitepress/theme/styles/tailwind.scss new file mode 100644 index 0000000..b5c61c9 --- /dev/null +++ b/docs/.vitepress/theme/styles/tailwind.scss @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; diff --git a/docs/.vitepress/theme/styles/vars.scss b/docs/.vitepress/theme/styles/vars.scss new file mode 100644 index 0000000..6714a9a --- /dev/null +++ b/docs/.vitepress/theme/styles/vars.scss @@ -0,0 +1,103 @@ +/** + * Customize default theme styling by overriding CSS variables: + * https://github.com/vuejs/vitepress/blob/main/src/client/theme-default/styles/vars.css + */ + +/** + * Colors + * -------------------------------------------------------------------------- */ +:root { + --vp-c-gutter: var(--vp-c-divider); + --vp-code-block-bg: rgba(125, 125, 125, 0.04); + --vp-code-tab-divider: var(--vp-c-divider); + --vp-code-copy-code-bg: rgba(125, 125, 125, 0.1); + --vp-code-copy-code-hover-bg: rgba(125, 125, 125, 0.2); + --vp-c-disabled-bg: rgba(125, 125, 125, 0.2); + --vp-code-tab-text-color: var(--vp-c-text-2); + --vp-code-tab-active-text-color: var(--vp-c-text-1); + --vp-code-tab-hover-text-color: var(--vp-c-text-1); + --vp-code-copy-code-active-text: var(--vp-c-text-2); + --vp-c-text-dark-3: rgba(56, 56, 56, 0.8); + --vp-c-brand-lightest: var(--vp-c-brand-1); + + --vp-c-highlight-bg: var(--vp-c-brand-light); + --vp-c-highlight-text: var(--vp-c-bg); +} + +.dark { + --vp-code-block-bg: rgba(0, 0, 0, 0.2); + --vp-c-text-code: #c0cec0; +} + +/** + * Component: Button + * -------------------------------------------------------------------------- */ +:root { + --vp-button-brand-border: var(--vp-c-brand-light); + --vp-button-brand-text: var(--vp-c-white); + --vp-button-brand-bg: var(--vp-c-brand-1); + --vp-button-brand-hover-border: var(--vp-c-brand-light); + --vp-button-brand-hover-text: var(--vp-c-white); + --vp-button-brand-hover-bg: var(--vp-c-brand-light); + --vp-button-brand-active-border: var(--vp-c-brand-light); + --vp-button-brand-active-text: var(--vp-c-white); + --vp-button-brand-active-bg: var(--vp-button-brand-bg); +} + +/** + * Component: Home + * -------------------------------------------------------------------------- */ +:root { + --vp-home-hero-name-color: transparent; + --vp-home-hero-name-background: -webkit-linear-gradient( + 120deg, + var(--vp-c-brand-1) 30%, + var(--vp-c-brand-next) + ); + --vp-home-hero-image-background-image: linear-gradient( + -45deg, + var(--vp-c-brand-1) 30%, + var(--vp-c-brand-next) + ); + --vp-home-hero-image-filter: blur(80px); +} + +@media (min-width: 640px) { + :root { + --vp-home-hero-image-filter: blur(120px); + } +} + +@media (min-width: 960px) { + :root { + --vp-home-hero-image-filter: blur(120px); + } +} + +/* Safari has a very bad performance on gradient and filter */ +.browser-safari, +.browser-firefox { + --vp-home-hero-image-background-image: transparent; + --vp-home-hero-image-filter: ''; +} + +/** + * Component: Custom Block + * -------------------------------------------------------------------------- */ +:root { + --vp-custom-block-tip-border: var(--vp-c-brand-1); + --vp-custom-block-tip-text: var(--vp-c-brand-darker); + --vp-custom-block-tip-bg: var(--vp-c-brand-dimm); +} +.dark { + --vp-custom-block-tip-border: var(--vp-c-brand-1); + --vp-custom-block-tip-text: var(--vp-c-brand-lightest); + --vp-custom-block-tip-bg: var(--vp-c-brand-dimm); +} + +/** + * Component: Algolia + * -------------------------------------------------------------------------- */ +.DocSearch { + --docsearch-primary-color: var(--vp-c-brand-1) !important; +} diff --git a/docs/.vitepress/theme/styles/vitepress.scss b/docs/.vitepress/theme/styles/vitepress.scss new file mode 100644 index 0000000..c947c80 --- /dev/null +++ b/docs/.vitepress/theme/styles/vitepress.scss @@ -0,0 +1,94 @@ +/***** vitepress 样式优化 ******/ + +/* 大屏大一点 */ +@media (min-width: 1440px) { + .VPDoc.has-aside .content-container.content-container { + max-width: 100%; + } +} + +/* nav 换行问题(6 个还是有点小多,后面看看怎么优化) */ +@media (max-width: 960px) { + .VPNav { + .VPNavBarMenuLink, + .VPNavBarMenuGroup .button { + padding-left: 10px; + padding-right: 10px; + } + } +} + +/* 首页样式修改 */ +.VPHero { + .image-bg { + opacity: 0.8; + transition: opacity 1s ease; + } + .image-container:hover .image-bg { + opacity: 0.4; + } +} + +/* 自定义块样式 */ +.custom-block .custom-block-title { + font-size: 16px; +} +.custom-block.tip .custom-block-title { + color: var(--vp-c-brand-1); +} + +/* code-group 样式 */ +.vp-code-group .tabs label { + background-color: transparent; +} + +/* table 样式 */ +table { + width: 100% !important; + display: table !important; +} + +/** + * VitePress: Custom fix + * -------------------------------------------------------------------------- */ + +/* + Use lighter colors for links in dark mode for a11y. + Also specify some classes twice to have higher specificity + over scoped class data attribute. +*/ + +.link.active, +.link.active span, +.VPNavBarMenuLink:hover span, +.VPSidebarItem.is-active .link, +.VPSidebar .link:hover { + color: var(--vp-c-brand-1); +} + +.vp-doc a:hover, +.vp-doc a > code:hover { + color: var(--vp-c-brand-2); +} + +/* Transition by color instead of opacity */ +.dark .vp-doc .custom-block a { + transition: color 0.25s; +} + +/* dark/light radial transition */ +::view-transition-old(root), +::view-transition-new(root) { + animation: none; + mix-blend-mode: normal; +} + +::view-transition-old(root), +.dark::view-transition-new(root) { + z-index: 1; +} + +::view-transition-new(root), +.dark::view-transition-old(root) { + z-index: 9999; +} diff --git a/docs/.vitepress/theme/types.ts b/docs/.vitepress/theme/types.ts new file mode 100644 index 0000000..1e83a00 --- /dev/null +++ b/docs/.vitepress/theme/types.ts @@ -0,0 +1,10 @@ +export interface NavLink { + /** 站点图标 */ + icon?: string | { svg: string } + /** 站点名称 */ + title: string + /** 站点名称 */ + desc?: string + /** 站点链接 */ + link: string +} diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..b31741b --- /dev/null +++ b/docs/index.md @@ -0,0 +1,71 @@ +--- +layout: home +layoutClass: 'm-home-layout' + +hero: + name: 茂茂的 + text: 前端导航模板 + tagline: 基于 VitePress 的个人前端导航页面模板 + image: + src: /logo.png + alt: 茂茂物语 + actions: + - text: 茂茂物语 + link: https://notes.fe-mm.com + - text: 前端导航 + link: /nav/ + theme: alt + - text: mmPlayer + link: https://netease-music.fe-mm.com + - text: 测试页 + link: /test + theme: alt +features: + - icon: 📖 + title: 前端物语 + details: 整理前端常用知识点(面试八股文)
如有异议按你的理解为主,不接受反驳 + link: https://notes.fe-mm.com/fe/javascript/types + linkText: 前端常用知识 + - icon: 📘 + title: 源码阅读 + details: 了解各种库的实现原理
学习其中的小技巧和冷知识 + link: https://notes.fe-mm.com/analysis/utils/only-allow + linkText: 源码阅读 + - icon: 💡 + title: Workflow + details: 在工作中学到的一切(常用库/工具/奇淫技巧等)
配合 CV 大法来更好的摸鱼 + link: https://notes.fe-mm.com/workflow/utils/library + linkText: 常用工具库 + - icon: 🧰 + title: 提效工具 + details: 工欲善其事,必先利其器
记录开发和日常使用中所用到的软件、插件、扩展等 + link: https://notes.fe-mm.com/efficiency/online-tools + linkText: 提效工具 + - icon: 🐞 + title: 踩坑记录 + details: 那些年我们踩过的坑
总有一些让你意想不到的问题 + link: https://notes.fe-mm.com/pit/npm + linkText: 踩坑记录 + - icon: 💯 + title: 吾志所向,一往无前。 + details: '一个想躺平的小开发' + link: https://notes.fe-mm.com/mao +--- + + diff --git a/docs/nav/data.ts b/docs/nav/data.ts new file mode 100644 index 0000000..5928b34 --- /dev/null +++ b/docs/nav/data.ts @@ -0,0 +1,606 @@ +import type { NavLink } from '../.vitepress/theme/types' + +type NavData = { + title: string + items: NavLink[] +} + +export const NAV_DATA: NavData[] = [ + { + title: '常用工具', + items: [ + { + icon: 'https://caniuse.com/img/favicon-128.png', + title: 'Can I use', + desc: '前端 API 兼容性查询', + link: 'https://caniuse.com', + }, + { + icon: 'https://tinypng.com/images/apple-touch-icon.png', + title: 'TinyPNG', + desc: '在线图片压缩工具', + link: 'https://tinypng.com', + }, + { + icon: 'https://devtool.tech/logo.svg', + title: '开发者武器库', + desc: '开发者武器库,做开发者最专业最好用的专业工具箱', + link: 'https://devtool.tech', + }, + { + icon: 'https://tool.lu/favicon.ico', + title: '在线工具', + desc: '开发人员的工具箱', + link: 'https://tool.lu', + }, + { + icon: '/icons/json-cn.ico', + title: 'Json 中文网', + desc: 'JSON 在线解析及格式化验证', + link: 'https://www.json.cn', + }, + ], + }, + { + title: 'AI 导航', + items: [ + { + icon: '/icons/chatgpt.png', + title: 'ChatGPT(最强)', + link: 'https://chat.openai.com/chat', + }, + { + icon: 'https://www.notion.so/images/logo-ios.png', + title: 'Notion AI(笔记)', + link: 'https://www.notion.so', + }, + { + icon: 'https://www.midjourney.com/apple-touch-icon.png', + title: 'Midjourney(绘画)', + link: 'https://www.midjourney.com', + }, + { + icon: 'https://global-uploads.webflow.com/59deb588800ae30001ec19c9/5d4891e0e260e3c1bc37b100_beautiful%20ai%20favicon%20%20blue%20square.png', + title: 'Beautiful.ai(PPT)', + link: 'https://www.beautiful.ai', + }, + ], + }, + { + title: '茂茂的站点导航', + items: [ + { + icon: '/logo.png', + title: '前端日常笔记', + desc: '日常笔记记录(零零散散啥都记系列)', + link: 'https://github.com/maomao1996/daily-notes', + }, + { + icon: '/logo.png', + title: '前端思维导图', + desc: '用思维导图的方式总结个人所学知识', + link: 'https://mindmap.fe-mm.com', + }, + { + icon: 'https://qwerty.fe-mm.com/apple-touch-icon.png', + title: 'Qwerty Learner', + desc: '为键盘工作者设计的单词记忆与英语肌肉记忆锻炼软件', + link: 'https://qwerty.fe-mm.com', + }, + { + icon: '/logo.png', + title: 'mmPlayer', + desc: 'mmPlayer 在线音乐播放器', + link: 'https://netease-music.fe-mm.com', + }, + ], + }, + { + title: 'React 生态', + items: [ + { + icon: 'https://zh-hans.reactjs.org/favicon.ico', + title: 'React', + desc: '用于构建用户界面的 JavaScript 库', + link: 'https://zh-hans.reactjs.org', + }, + { + icon: 'https://reactrouter.com/favicon-light.png', + title: 'React Router', + desc: 'React 的声明式路由', + link: 'https://reactrouter.com', + }, + { + icon: 'https://nextjs.org/static/favicon/safari-pinned-tab.svg', + title: 'Next.js', + desc: '一个用于 Web 的 React 框架', + link: 'https://nextjs.org', + }, + { + icon: 'https://img.alicdn.com/tfs/TB1YHEpwUT1gK0jSZFhXXaAtVXa-28-27.svg', + title: 'UmiJS', + desc: '插件化的企业级前端应用框架', + link: 'https://umijs.org', + }, + { + icon: 'https://gw.alipayobjects.com/zos/rmsportal/rlpTLlbMzTNYuZGGCVYM.png', + title: 'Ant Design', + desc: '一套企业级 UI 设计语言和 React 组件库', + link: 'https://ant.design', + }, + { + icon: 'https://gw.alipayobjects.com/zos/bmw-prod/69a27fcc-ce52-4f27-83f1-c44541e9b65d.svg', + title: 'Ant Design Mobile', + desc: '构建移动 WEB 应用程序的 React 组件库', + link: 'https://mobile.ant.design', + }, + { + icon: 'https://docs.pmnd.rs/apple-touch-icon.png', + title: 'Zustand', + desc: '一个小型、快速、可扩展的 React 状态管理解决方案', + link: 'https://docs.pmnd.rs/zustand/getting-started/introduction', + }, + { + icon: 'https://valtio.pmnd.rs/favicon.ico', + title: 'Valtio', + desc: 'makes proxy-state simple for React and Vanilla', + link: 'https://valtio.pmnd.rs', + }, + { + icon: 'https://jotai.org/favicon.svg', + title: 'Jotai', + desc: 'primitive and flexible state management for React', + link: 'https://jotai.org', + }, + { + icon: 'https://cn.redux.js.org/img/redux.svg', + title: 'Redux', + desc: 'JavaScript 应用的状态容器,提供可预测的状态管理', + link: 'https://cn.redux.js.org', + }, + { + icon: 'https://zh.mobx.js.org/assets/mobx.png', + title: 'MobX', + desc: '一个小型、快速、可扩展的 React 状态管理解决方案', + link: 'https://zh.mobx.js.org', + }, + { + icon: 'https://ahooks.js.org/simple-logo.svg', + title: 'ahooks', + desc: '一套高质量可靠的 React Hooks 库', + link: 'https://ahooks.js.org/zh-CN', + }, + ], + }, + { + title: 'Vue 生态', + items: [ + { + icon: 'https://cn.vuejs.org/logo.svg', + title: 'Vue 3', + desc: '渐进式 JavaScript 框架', + link: 'https://cn.vuejs.org', + }, + { + icon: 'https://cn.vuejs.org/logo.svg', + title: 'Vue 2', + desc: '渐进式 JavaScript 框架', + link: 'https://v2.cn.vuejs.org', + }, + { + icon: 'https://cn.vuejs.org/logo.svg', + title: 'Vue Router', + desc: 'Vue.js 的官方路由\n为 Vue.js 提供富有表现力、可配置的、方便的路由', + link: 'https://router.vuejs.org/zh', + }, + { + icon: 'https://pinia.vuejs.org/logo.svg', + title: 'Pinia', + desc: '符合直觉的 Vue.js 状态管理库', + link: 'https://pinia.vuejs.org/zh', + }, + { + icon: 'https://nuxt.com/icon.png', + title: 'Nuxt.js', + desc: '一个基于 Vue.js 的通用应用框架', + link: 'https://nuxt.com', + }, + { + icon: 'https://vueuse.org/favicon.svg', + title: 'VueUse', + desc: 'Vue Composition API 的常用工具集', + link: 'https://vueuse.org', + }, + { + icon: 'https://element-plus.org/images/element-plus-logo-small.svg', + title: 'Element Plus', + desc: '基于 Vue 3,面向设计师和开发者的组件库', + link: 'https://element-plus.org', + }, + { + icon: 'https://www.antdv.com/assets/logo.1ef800a8.svg', + title: 'Ant Design Vue', + desc: 'Ant Design 的 Vue 实现,开发和服务于企业级后台产品', + link: 'https://antdv.com', + }, + { + icon: 'https://fastly.jsdelivr.net/npm/@vant/assets/logo.png', + title: 'Vant', + desc: '轻量、可定制的移动端 Vue 组件库', + link: 'https://vant-ui.github.io/vant', + }, + { + icon: 'https://webapp.didistatic.com/static/webapp/shield/Cube-UI_logo.ico', + title: 'Cube UI', + desc: '基于 Vue.js 实现的精致移动端组件库', + link: 'https://didi.github.io/cube-ui', + }, + { + icon: 'https://img14.360buyimg.com/imagetools/jfs/t1/167902/2/8762/791358/603742d7E9b4275e3/e09d8f9a8bf4c0ef.png', + title: 'NutUI', + desc: '京东风格的轻量级移动端组件库', + link: 'https://nutui.jd.com', + }, + ], + }, + { + title: 'JavaScript 框架类库', + items: [ + { + icon: 'https://svelte.dev/svelte-logo-horizontal.svg', + title: 'Svelte', + desc: '将声明性组件转换为精准高效更新 DOM 的 JavaScript 代码', + link: 'https://svelte.dev', + }, + { + // icon: 'https://simpleicons.org/icons/jquery.svg', + icon: '/icons/jquery.svg', + title: 'jQuery API 中文文档', + desc: '一个兼容多浏览器的 JavaScript 框架', + link: 'https://jquery.cuishifeng.cn', + }, + ], + }, + { + title: 'CSS 相关', + items: [ + { + icon: 'https://postcss.org/assets/logo-3e39b0aa.svg', + title: 'PostCSS', + desc: '一个用 JavaScript 转换 CSS 的工具', + link: 'https://postcss.org', + }, + { + icon: 'https://sass-lang.com/assets/img/logos/logo-b6e1ef6e.svg', + title: 'Sass', + desc: '一个成熟,稳定,功能强大的专业级 CSS 扩展语言', + link: 'https://sass-lang.com', + }, + { + icon: 'https://www.tailwindcss.cn/apple-touch-icon.png', + title: 'TailwindCSS 中文网', + desc: '一个功能类优先的 CSS 框架', + link: 'https://www.tailwindcss.cn', + }, + ], + }, + { + title: '小程序相关', + items: [ + { + icon: 'https://res.wx.qq.com/a/wx_fed/assets/res/OTE0YTAw.png', + title: '微信小程序文档', + desc: '微信小程序官方开发者文档', + link: 'https://developers.weixin.qq.com/miniprogram/dev/framework/', + }, + { + icon: '/icons/taro.svg', + title: 'Taro', + desc: '多端统一开发解决方案', + link: 'https://taro.jd.com', + }, + { + icon: 'https://web-assets.dcloud.net.cn/unidoc/zh/icon.png', + title: 'uni-app', + desc: '一个使用 Vue.js 开发所有前端应用的框架', + link: 'https://uniapp.dcloud.net.cn', + }, + { + icon: 'https://mpxjs.cn/favicon.ico', + title: 'Mpx', + desc: '增强型跨端小程序框架', + link: 'https://mpxjs.cn', + }, + ], + }, + { + title: 'Node 相关', + items: [ + { + icon: '/icons/nodejs.svg', + title: 'Node.js', + desc: 'Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境', + link: 'https://nodejs.org/zh-cn', + }, + { + icon: 'https://expressjs.com/images/favicon.png', + title: 'Express', + desc: '基于 Node.js 平台,快速、开放、极简的 Web 开发框架', + link: 'https://expressjs.com', + }, + { + icon: '/icons/koa.svg', + title: 'Koa', + desc: '基于 Node.js 平台的下一代 web 开发框架', + link: 'https://koajs.com', + }, + { + icon: 'https://www.eggjs.org/favicon.png', + title: 'Egg', + desc: '为企业级框架和应用而生', + link: 'https://www.eggjs.org/zh-CN', + }, + { + icon: 'https://d33wubrfki0l68.cloudfront.net/e937e774cbbe23635999615ad5d7732decad182a/26072/logo-small.ede75a6b.svg', + title: 'Nest.js 中文文档', + desc: '用于构建高效且可伸缩的服务端应用程序的渐进式 Node.js 框架', + link: 'https://docs.nestjs.cn', + }, + ], + }, + { + title: '可视化', + items: [ + { + icon: 'https://echarts.apache.org/zh/images/favicon.png', + title: 'ECharts', + desc: '一个基于 JavaScript 的开源可视化图表库', + link: 'https://echarts.apache.org/zh/index.html', + }, + { + icon: 'https://antv.vision/icons/icon-72x72.png', + title: 'AntV', + desc: '蚂蚁集团全新一代数据可视化解决方案,致力于提供一套简单方便、专业可靠、无限可能的数据可视化最佳实践。', + link: 'https://antv.vision/zh/', + }, + { + icon: 'https://d3js.org/favicon.png', + title: 'D3.js', + desc: '一个遵循 Web 标准用于可视化数据的 JavaScript 库', + link: 'https://d3js.org', + }, + { + icon: 'https://www.chartjs.org/favicon.ico', + title: 'Chart.js', + desc: '一个简单而灵活的 JavaScript 图表库', + link: 'https://www.chartjs.org', + }, + { + icon: 'https://threejs.org/files/favicon.ico', + // icon: 'https://threejs.org/files/favicon_white.ico', + title: 'Three.js', + desc: 'JavaScript 3d 库', + link: 'https://threejs.org', + }, + ], + }, + { + title: '编译&构建&打包', + items: [ + { + icon: 'https://www.webpackjs.com/icon_180x180.png', + title: 'Webpack 中文网', + desc: '一个用于现代 JavaScript 应用程序的静态模块打包工具', + link: 'https://www.webpackjs.com', + }, + { + icon: 'https://cn.vitejs.dev/logo.svg', + title: 'Vite 中文文档', + desc: '下一代前端工具链', + link: 'https://cn.vitejs.dev', + }, + { + icon: 'https://www.rollupjs.com/img/favicon.png', + title: 'Rollup', + desc: 'Rollup 是一个 JavaScript 模块打包器', + link: 'https://www.rollupjs.com', + }, + { + icon: 'https://turbo.build/images/favicon-dark/apple-touch-icon.png', + title: 'Turbo', + desc: 'Turbo is an incremental bundler and build system optimized for JavaScript and TypeScript, written in Rust', + link: 'https://turbo.build', + }, + { + icon: 'https://www.babeljs.cn/img/favicon.png', + title: 'Babel', + desc: 'Babel 是一个 JavaScript 编译器', + link: 'https://www.babeljs.cn', + }, + { + icon: 'https://esbuild.github.io/favicon.svg', + title: 'esbuild', + desc: 'An extremely fast bundler for the web', + link: 'https://esbuild.github.io', + }, + { + icon: 'https://swc.rs/favicon/apple-touch-icon.png', + title: 'SWC', + desc: 'Rust-based platform for the Web', + link: 'https://swc.rs', + }, + ], + }, + { + title: '站点生成器', + items: [ + { + icon: 'https://astro.build/favicon.svg', + title: 'Astro', + desc: '一个现代化的轻量级静态站点生成器', + link: 'https://astro.build', + }, + { + icon: 'https://cn.vuejs.org/logo.svg', + title: 'VitePress', + desc: '由 Vite 和 Vue 驱动的静态网站生成器', + link: 'https://vitepress.dev', + }, + { + icon: 'https://cn.vuejs.org/logo.svg', + title: 'VuePress', + desc: 'Vue 驱动的静态网站生成器', + link: 'https://vuepress.vuejs.org/zh', + }, + { + icon: 'https://gw.alipayobjects.com/zos/bmw-prod/d3e3eb39-1cd7-4aa5-827c-877deced6b7e/lalxt4g3_w256_h256.png', + title: 'dumi', + desc: '基于 Umi 为组件研发而生的静态站点框架', + link: 'https://d.umijs.org', + }, + { + icon: 'https://docusaurus.io/zh-CN/img/docusaurus.ico', + title: 'Docusaurus', + desc: '基于 React 的静态网站生成器', + link: 'https://docusaurus.io/zh-CN', + }, + ], + }, + { + title: '图标库', + items: [ + { + icon: 'https://img.alicdn.com/imgextra/i4/O1CN01Z5paLz1O0zuCC7osS_!!6000000001644-55-tps-83-82.svg', + title: 'iconfont', + desc: '国内功能很强大且图标内容很丰富的矢量图标库,提供矢量图标下载、在线存储、格式转换等功能', + link: 'https://www.iconfont.cn', + }, + { + icon: 'https://lf1-cdn2-tos.bytegoofy.com/bydesign/iconparksite/logo.svg', + title: 'IconPark 图标库', + desc: 'IconPark图标库是一个通过技术驱动矢量图标样式的开源图标库,可以实现根据单一 SVG 源文件变换出多种主题, 具备丰富的分类、更轻量的代码和更灵活的使用场景;致力于构建高质量、统一化、可定义的图标资源,让大多数人都能够选择适合自己的风格图标', + link: 'https://iconpark.oceanengine.com/official', + }, + { + icon: 'https://emoji.muan.co/appicon.png', + title: 'Emoji searcher', + desc: 'Emoji 表情大全', + link: '', + }, + ], + }, + { + title: '前端学习资料', + items: [ + { + icon: 'https://developer.mozilla.org/apple-touch-icon.6803c6f0.png', + title: 'MDN | Web 开发者指南', + desc: 'Mozilla 的开发者平台,提供了大量关于 HTML、CSS 和 JavaScript 的详细文档以及广泛的 Web API 参考资', + link: 'https://developer.mozilla.org/zh-CN', + }, + { + icon: 'https://static.runoob.com/images/favicon.ico', + title: '菜鸟教程', + desc: '学的不仅是技术,更是梦想!', + link: 'https://www.runoob.com', + }, + { + icon: '/icons/es6.svg', + title: 'ES6 入门教程', + desc: '阮一峰的网络日志', + link: 'http://es6.ruanyifeng.com', + }, + ], + }, + { + title: '社区', + items: [ + { + title: 'Github', + icon: { + svg: 'GitHub', + }, + desc: '一个面向开源及私有软件项目的托管平台', + link: 'https://github.com', + }, + { + icon: 'https://cdn.sstatic.net/Sites/stackoverflow/Img/apple-touch-icon.png?v=c78bd457575a', + title: 'Stack Overflow', + desc: '全球最大的技术问答网站', + link: 'https://stackoverflow.com', + }, + { + title: '稀土掘金', + icon: 'https://lf3-cdn-tos.bytescm.com/obj/static/xitu_juejin_web//static/favicons/apple-touch-icon.png', + desc: '面向全球中文开发者的技术内容分享与交流平台', + link: 'https://juejin.cn', + }, + { + title: 'V2EX', + icon: 'https://www.v2ex.com/static/icon-192.png', + desc: '一个关于分享和探索的地方', + link: 'https://www.v2ex.com', + }, + { + title: 'SegmentFault 思否', + icon: 'https://static.segmentfault.com/main_site_next/0dc4bace/touch-icon.png', + desc: '技术问答开发者社区', + link: 'https://segmentfault.com', + }, + { + title: '博客园', + // icon: 'https://common.cnblogs.com/favicon.ico', + icon: '/icons/cnblogs.svg', + desc: '博客园是一个面向开发者的知识分享社区', + link: 'https://www.cnblogs.com', + }, + { + title: '知乎', + icon: 'https://static.zhihu.com/heifetz/assets/apple-touch-icon-60.362a8eac.png', + desc: '中文互联网高质量的问答社区和创作者聚集的原创内容平台', + link: 'https://juejin.cn', + }, + ], + }, + { + title: '摸鱼专用', + items: [ + { + icon: 'https://momoyu.cc/icon-192.png', + title: '摸摸鱼热榜', + // desc: '聚合每日热门、搞笑、有趣、适合摸鱼的资讯', + link: 'https://momoyu.cc', + }, + { + icon: 'https://v.qq.com/favicon.ico', + title: '腾讯视频', + // desc: '中国领先的在线视频媒体平台,海量高清视频在线观看', + link: 'https://v.qq.com', + }, + { + icon: 'https://static.hdslb.com/mobile/img/512.png', + title: '哔哩哔哩', + // desc: '', + link: 'https://www.bilibili.com', + }, + { + icon: 'https://www.youtube.com/s/desktop/014dbbed/img/favicon_48x48.png', + title: 'YouTube', + // desc: '', + link: 'https://www.youtube.com', + }, + { + icon: '/icons/twitter.svg', + title: 'Twitter', + // desc: '', + link: 'https://twitter.com', + }, + { + icon: '/icons/pixiv.png', + title: 'Pixiv', + // desc: '', + link: 'https://www.pixiv.net', + }, + ], + }, +] diff --git a/docs/nav/index.md b/docs/nav/index.md new file mode 100644 index 0000000..d02d459 --- /dev/null +++ b/docs/nav/index.md @@ -0,0 +1,19 @@ +--- +layoutClass: m-nav-layout +outline: [2, 3, 4] +--- + + + + +# 前端导航 + + + +
+ +::: tip +该导航由 [maomao](https://github.com/maomao1996) 开发,如有引用、借鉴的请保留版权声明: +::: diff --git a/docs/nav/index.scss b/docs/nav/index.scss new file mode 100644 index 0000000..849eadb --- /dev/null +++ b/docs/nav/index.scss @@ -0,0 +1,36 @@ +.m-nav-layout { + /* 覆盖全局的 vp-layout-max-width(仅当前页面使用) */ + --vp-layout-max-width: 1660px; + + /* layout 样式 */ + .container { + max-width: var(--vp-layout-max-width) !important; + } + .content-container, + .content { + max-width: 100% !important; + } + + /* aside 样式 */ + .aside { + padding-left: 0; + max-width: 224px; + } + + /* custom-block */ + .custom-block { + .custom-block-title { + font-size: var(--vp-custom-block-font-size); + } + ul { + margin: 8px 0; + } + li { + margin: 0; + } + } + + .vp-doc h2 { + margin-top: 24px; + } +} diff --git a/docs/public/favicon.ico b/docs/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..d478e5a123359f92e2f8399435ea72194d180084 GIT binary patch literal 4286 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 literal 0 HcmV?d00001 diff --git a/docs/public/icons/chatgpt.png b/docs/public/icons/chatgpt.png new file mode 100644 index 0000000000000000000000000000000000000000..befcee868bd3a24c2aa97c1a368e81aec383944e GIT binary patch literal 4159 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 \ No newline at end of file diff --git a/docs/public/icons/es6.svg b/docs/public/icons/es6.svg new file mode 100644 index 0000000..8449438 --- /dev/null +++ b/docs/public/icons/es6.svg @@ -0,0 +1 @@ +ES6 diff --git a/docs/public/icons/jquery.svg b/docs/public/icons/jquery.svg new file mode 100644 index 0000000..aefbbdf --- /dev/null +++ b/docs/public/icons/jquery.svg @@ -0,0 +1 @@ +jQuery diff --git a/docs/public/icons/json-cn.ico b/docs/public/icons/json-cn.ico new file mode 100644 index 0000000000000000000000000000000000000000..39288374ee22a6f9492052b45644fc7bde7febc0 GIT binary patch literal 16958 zcmeHNu}&L75ItncZX#Hk$Wfx$B_-)7qG06%qI^N*55ShoR0R4ch%Oz<7esskK@@51 zSaj(KP0FBjE>JG>c5l3Ud%K5y*!VDe=x%(wGqdyF%6h?8C#-U>H&Cleo&10tRbc{vulkamnPjT+_#alg&AkLM4 zj8A8e^-Nv0rqFm$7wiN6*oN}A&zzv0eJkn5PySBWA7t9@_V`VISVwV;6z`$g=lTrn zDkjzyS8NZyY#VR^eH`g^xF0{~Rga}HoBml(d3RrZ_2u$|e3|X8&pf8ir`n5w1K&EE zIA|j}(lPd79{kC=9^;e`e>T_r`~ahiFWJ@?$DAGFIGG3B_{W%y{f*Br=YoB^x2OUWM(T4?pSnR2#;DZ}j6>B!1wwd8XLM^Mr~}^Wlp%t7qfa zwMFy9aT)Mat`0bENXpBm&Yzl-xIaC&W#=o_)Anin)ZT-RSr2UEzmT_catBp zhRt`7tVhpx#vFrbn;l17a7={rT=kpyQ~mO}f)3kc{V9HVY}Rwh!uXSX0K0EqM_h!b zjdAt+Ae(#C2FIqcDE!Df`+(H_3&(#mE`?ve-v?s6ell@zp3?XC+or{yebZ`51~B}?O7B~#z)V9T0?G*b>*H$?3(dq=SPhn{$0-){NZ4{wlw`K z&Fr-(evE~B2YU;-{+s(ksHD$ z_e<#-*0B`PWt*b%uJ9L)Z{Btf9Y5wFen#@-yz{Uq|9P0rKAK;g-$5-Z?pchB`N+hW z_Zjo@EXFL84`9l}Z1>T-+qpI?6Q;>y(fb7(r|*7}b-?7~XWx5wX*s#t$r&(%tf%~*^p2CFC722bAsF-J^%m! literal 0 HcmV?d00001 diff --git a/docs/public/icons/koa.svg b/docs/public/icons/koa.svg new file mode 100644 index 0000000..77551f3 --- /dev/null +++ b/docs/public/icons/koa.svg @@ -0,0 +1 @@ +Koa diff --git a/docs/public/icons/nodejs.svg b/docs/public/icons/nodejs.svg new file mode 100644 index 0000000..67fca09 --- /dev/null +++ b/docs/public/icons/nodejs.svg @@ -0,0 +1 @@ +Node.js \ No newline at end of file diff --git a/docs/public/icons/pixiv.png b/docs/public/icons/pixiv.png new file mode 100644 index 0000000000000000000000000000000000000000..8d71f75128486291b39d838fefddb82c93bb6ffa GIT binary patch literal 975 zcmV;=12FuFP)21#|6jaz zvcR?$<-`$(wih!+k(VMlR;iKXa2x_fQ4~c{6h%=KMNt$*Q4~c{XRF0UY58sK2CS)6 z$@%e9S!yZilJIT8{SCWOt|eX!SRNm#USz~us*fX*ayEDTbci?OeIj!DhWJ(B<*Y%@ zj|rWDJsjlK;L^*XSF2tvaP*hXMUwJhj-_~{^2N^sn_3sL@4`+0*Lc;4hAf|~8|uZn z47O4jxyG3bPA5!1IrgDNac!*0)mh~AO_b{fE|JB^w2B|KGD7vs&x&1TX9#txmNTdy z00ec^oO!~mngexF*RvUi?Wrrgnx~;dz*48tW^N9;W!x&$%5ZZzxd2D&H{7W`yU$3S zT_ap$bK0IBm% z1ax~?)yF@)62Q=g{t;E%gg_U&yNaVh4mEAM zKYf~Yc7QfLbtR|rD5gh6adD3xdg{>Cws)T~&*E=9@p$~_z&k5LWpu;mXemEX{ zAis!#ewl;h1H|5$aUFW!)efgx{h*(v5>p+HxzrNRd7QvLba+8Mv*L^7si$qnGoOC& z2Kt&JG@%JiXhIX3(1a%R?(LTCvs;{xO<$BqJ!+Qnw!qCIVIFu{b x$8zMW+D{7 \ No newline at end of file diff --git a/docs/public/icons/twitter.svg b/docs/public/icons/twitter.svg new file mode 100644 index 0000000..27f226e --- /dev/null +++ b/docs/public/icons/twitter.svg @@ -0,0 +1 @@ + diff --git a/docs/public/logo.png b/docs/public/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..903a7fa44aa681c20208d2c9b52d7692f074f4dc GIT binary patch literal 95858 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

|_GtKH-I6RK$De^F=r51L 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 z

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 FV1kpK^gsXr literal 0 HcmV?d00001 diff --git a/docs/test.md b/docs/test.md new file mode 100644 index 0000000..136c2a5 --- /dev/null +++ b/docs/test.md @@ -0,0 +1,13 @@ +# 功能测试页 + +## medium-zoom + +![medium-zoom](/logo.png) + +## vite-plugin-markdown-preview + +```vue preview + +``` diff --git a/env.d.ts b/env.d.ts new file mode 100644 index 0000000..97326e4 --- /dev/null +++ b/env.d.ts @@ -0,0 +1,32 @@ +/// + +import { DefaultTheme } from 'vitepress' + +declare module 'vitepress' { + export namespace DefaultTheme { + export interface Config { + /** + * 访客统计配置 + */ + visitor?: { + /** 统计 id(单独页面的统计会作为前缀使用)*/ + badgeId: string + } + + /** + * giscus 评论配置 + * 请根据 https://giscus.app/zh-CN 生成内容填写 + */ + comment?: { + /** github 仓库地址 */ + repo: `${string}/${string}` + /** giscus 仓库 ID */ + repoId: string + /** Discussion 分类 */ + category: string + /** giscus 分类 ID */ + categoryId: string + } + } + } +} diff --git a/guide.md b/guide.md new file mode 100644 index 0000000..d4c20f1 --- /dev/null +++ b/guide.md @@ -0,0 +1,194 @@ +# 自定义基础指引 + +面向对 Vitepress 了解不多、仅想套用模板做站点的定制化指引。 +(注:本文内容目标:达成基本的样式套用,深入修改请参照 Vue 文档等) +(请在贵站中标注本项目仓库地址等信息) + +## 一、首页配置 + +这里指前端导航页访问的初始页面。 + +![首页](https://raw.githubusercontent.com/maomao1996/picture/main/vitepress-nav-template/home.webp) + +### 1.主体部分 + +修改位置:/docs/index.md + +范例: + +```ts +hero: + name: 茂茂的 //左侧第一行 + text: 个人前端导航 //左侧第二行 + tagline: 使用 VitePress 打造个人前端导航 //第三行小注内容 + image: + src: /logo.png //页面大图地址(图像最好切圆后使用) + alt: 茂茂物语 + actions: //跳转按钮,可按需增减 + - text: 茂茂物语 + link: https://notes.fe-mm.com + - text: 前端导航 + link: /nav/ + theme: alt //此行代表跳转至新标签页显示 + - text: mmPlayer + link: https://netease-music.fe-mm.com + theme: alt +features: + - icon: 📖 //图标(输入法的表情icon即可) + title: 前端物语 //小标题 + details: 整理前端常用知识点
如有异议按你的理解为主,不接受反驳 //注释 +``` + +### 2.导航栏与页脚 + +**2.1 导航栏**: + +修改位置:/docs/.vitepress/configs/nav.ts + +范例(按需增减): + +```ts +export const nav: DefaultTheme.Config['nav'] = [ + { text: '个人主页', link: 'https://fe-mm.com' }, //切行无影响 + { + text: '茂茂物语', //显示文本 + link: 'https://notes.fe-mm.com', //链接 + }, +] +``` + +**2.2 社交链接&页脚**: + +修改位置:/docs/nav/index.md + +```ts +export default defineConfig({ + --- + socialLinks: [{ icon: 'github', link: 'https://github.com/maomao1996/vitepress-nav-template' }], //社交链接 + + footer: { + message: '如有转载或 CV 的请标注本站原文地址', + copyright: 'Copyright © 2019-present maomao' + }, //页脚,可按Vue支持格式修改 +}) +``` + +## 二、站点列表页 + +一般对应 `https://域名(ip)/nav/` + +![站点列表页](https://raw.githubusercontent.com/maomao1996/picture/main/vitepress-nav-template/nav.webp) + +### 1.站点列表数据 + +修改文件: /docs/nav/data.js + +此处的站点信息涉及四个属性: +|属性值|作用| +|:--|--| +|icon|图标地址(可填绝对/相对路径)| +|title|站点标题| +|desc|站点描述| +|link|链接地址(必填)| + +除 link 外,其余属性可按需填入。 + +基本结构如下: + +```ts +export const NAV_ATA: NavData[] = [ + { + title: '类别1' //分类标题 + items: [ + { + icon: '', + title: '', + desc: '', + link: '' + } + ] + }, + { + title: '' //分类标题 + items: [ + { + icon: '', + title: '', + desc: '', + link: '' + }, + { + icon: '', + title: '', + desc: '', + link: '' + } + ] + } +] +``` + +### 2.页面自定义 + +**2.1 添加其他元素**: + +修改位置:/docs/nav/index.md + +Nav 页本身属于 MD 文件渲染,因此除引用的 data 文件用于数据列表显示,还可以添加其他内容。 + +例如以下范例: + +```ts +# 前端导航 //标题 + + //引用data.ts文件显示站点列表 + +
+ +::: tip +该导航由 [maomao](https://github.com/maomao1996) 开发,如有引用、借鉴的请保留版权声明: +::: //引用Notes提示块 +``` + +**2.2 其他部分**: + +修改位置:/docs/.vitepress/config.ts + +## 三、站点属性配置 + +**3.1 站点图标(favicon)**: + +修改位置:/docs/.vitepress/configs/head.ts +在对应位置更改即可。 + +**3.2 站点标题与图标**: + +修改位置:/docs/.vitepress/config.ts + +站点标题: + +```ts +export default defineConfig({ + --- + lang: 'zh-CN', //语言,建议中文(zh-CN) + title: '', //站点标题 + description: '', //简介 + head, +}) +``` + +站点图标: + +```ts +export default defineConfig({ + --- + /* 主题配置 */ + themeConfig: { + i18nRouting: false, + + logo: '/logo.png', //更改此处 +``` + +--- + +(本文档作者:[@轻虹空雨](https://github.com/MuFeng086)) diff --git a/netlify.toml b/netlify.toml new file mode 100644 index 0000000..59d3702 --- /dev/null +++ b/netlify.toml @@ -0,0 +1,6 @@ +[build.environment] + NODE_VERSION = "20" + +[build] + publish = "dist" + command = "pnpm build" diff --git a/package.json b/package.json new file mode 100644 index 0000000..1ee9b1a --- /dev/null +++ b/package.json @@ -0,0 +1,55 @@ +{ + "name": "vitepress-nav-template", + "type": "module", + "version": "1.0.0", + "description": "基于 VitePress 打造个人前端导航网站", + "private": true, + "scripts": { + "dev": "vitepress dev docs --port=8732", + "build": "vitepress build docs", + "preview": "vitepress preview docs --port 8730", + "prepare": "husky install", + "format": "prettier --write ." + }, + "repository": { + "type": "git", + "url": "git+https://github.com/maomao1996/vitepress-nav-template.git" + }, + "author": "maomao1996 <1714487678@qq.com>", + "license": "MIT", + "bugs": { + "url": "https://github.com/maomao1996/vitepress-nav-template/issues" + }, + "homepage": "https://github.com/maomao1996/vitepress-nav-template#readme", + "devDependencies": { + "@femm/prettier": "^1.1.0", + "@femm/tailwind-config": "^1.0.0", + "@femm/verify-commit": "^1.0.1", + "@giscus/vue": "^3.0.0", + "@mdit-vue/shared": "^0.12.1", + "@types/node": "^18.18.6", + "autoprefixer": "^10.4.17", + "cross-env": "^7.0.3", + "husky": "^8.0.3", + "lint-staged": "^13.3.0", + "medium-zoom": "^1.0.8", + "postcss": "^8.4.33", + "prettier": "^2.8.8", + "sass": "^1.69.4", + "tailwindcss": "^3.4.1", + "vite-plugin-markdown-preview": "^1.1.1", + "vitepress": "^1.0.1", + "vue": "^3.4.21" + }, + "prettier": "@femm/prettier", + "lint-staged": { + "*.{js,jsx,tsx,vue,css,scss,less,md,json}": [ + "prettier --write" + ] + }, + "pnpm": { + "patchedDependencies": { + "vite-plugin-markdown-preview@1.1.1": "patches/vite-plugin-markdown-preview@1.1.1.patch" + } + } +} diff --git a/patches/vite-plugin-markdown-preview@1.1.1.patch b/patches/vite-plugin-markdown-preview@1.1.1.patch new file mode 100644 index 0000000..1b3003c --- /dev/null +++ b/patches/vite-plugin-markdown-preview@1.1.1.patch @@ -0,0 +1,32 @@ +diff --git a/dist/index.js b/dist/index.js +index 5c354f7fc1239f8c5ff92d91ef87afd0eca78bdb..e374d9a8144cafb2a7564480aadc468bbb0111e3 100644 +--- a/dist/index.js ++++ b/dist/index.js +@@ -13,6 +13,7 @@ import { createHash } from "node:crypto"; + import { fromMarkdown } from "mdast-util-from-markdown"; + import { frontmatterFromMarkdown, frontmatterToMarkdown } from "mdast-util-frontmatter"; + import { toMarkdown } from "mdast-util-to-markdown"; ++import { frontmatter } from 'micromark-extension-frontmatter'; + import { visit } from "unist-util-visit"; + function getHash(text) { + return createHash("sha256").update(text).digest("hex").substring(0, 8); +@@ -28,6 +29,7 @@ function praseMeta(meta) { + } + function remarkDemoBlock(id, code, config) { + const tree = fromMarkdown(code, { ++ extensions: [frontmatter(['yaml', 'toml'])], + mdastExtensions: [frontmatterFromMarkdown(["yaml", "toml"])] + }); + const blocks = {}; +diff --git a/package.json b/package.json +index 31fcc5521e2e41ad0faf49359e173eec3ecb62ee..d123b492b36675a1c83bb277805c471878bcea43 100644 +--- a/package.json ++++ b/package.json +@@ -45,6 +45,7 @@ + "mdast-util-from-markdown": "^1.2.0", + "mdast-util-frontmatter": "^1.0.0", + "mdast-util-to-markdown": "^1.5.0", ++ "micromark-extension-frontmatter": "^1.1.1", + "unist-util-visit": "^4.1.1" + }, + "devDependencies": { \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..708cab5 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,2662 @@ +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +patchedDependencies: + vite-plugin-markdown-preview@1.1.1: + hash: snjgw2bn6xfqmbtsng4ppakymi + path: patches/vite-plugin-markdown-preview@1.1.1.patch + +devDependencies: + '@femm/prettier': + specifier: ^1.1.0 + version: 1.1.0 + '@femm/tailwind-config': + specifier: ^1.0.0 + version: 1.0.0(tailwindcss@3.4.1) + '@femm/verify-commit': + specifier: ^1.0.1 + version: 1.0.1 + '@giscus/vue': + specifier: ^3.0.0 + version: 3.0.0(vue@3.4.21) + '@mdit-vue/shared': + specifier: ^0.12.1 + version: 0.12.1 + '@types/node': + specifier: ^18.18.6 + version: 18.18.6 + autoprefixer: + specifier: ^10.4.17 + version: 10.4.17(postcss@8.4.33) + cross-env: + specifier: ^7.0.3 + version: 7.0.3 + husky: + specifier: ^8.0.3 + version: 8.0.3 + lint-staged: + specifier: ^13.3.0 + version: 13.3.0 + medium-zoom: + specifier: ^1.0.8 + version: 1.0.8 + postcss: + specifier: ^8.4.33 + version: 8.4.33 + prettier: + specifier: ^2.8.8 + version: 2.8.8 + sass: + specifier: ^1.69.4 + version: 1.69.4 + tailwindcss: + specifier: ^3.4.1 + version: 3.4.1 + vite-plugin-markdown-preview: + specifier: ^1.1.1 + version: 1.1.1(patch_hash=snjgw2bn6xfqmbtsng4ppakymi) + vitepress: + specifier: ^1.0.1 + version: 1.0.1(@algolia/client-search@4.20.0)(@types/node@18.18.6)(postcss@8.4.33)(sass@1.69.4)(search-insights@2.9.0) + vue: + specifier: ^3.4.21 + version: 3.4.21 + +packages: + + /@algolia/autocomplete-core@1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0)(search-insights@2.9.0): + resolution: {integrity: sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==} + dependencies: + '@algolia/autocomplete-plugin-algolia-insights': 1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0)(search-insights@2.9.0) + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0) + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + - search-insights + dev: true + + /@algolia/autocomplete-plugin-algolia-insights@1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0)(search-insights@2.9.0): + resolution: {integrity: sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==} + peerDependencies: + search-insights: '>= 1 < 3' + dependencies: + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0) + search-insights: 2.9.0 + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + dev: true + + /@algolia/autocomplete-preset-algolia@1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0): + resolution: {integrity: sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==} + peerDependencies: + '@algolia/client-search': '>= 4.9.1 < 6' + algoliasearch: '>= 4.9.1 < 6' + dependencies: + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0) + '@algolia/client-search': 4.20.0 + algoliasearch: 4.20.0 + dev: true + + /@algolia/autocomplete-shared@1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0): + resolution: {integrity: sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==} + peerDependencies: + '@algolia/client-search': '>= 4.9.1 < 6' + algoliasearch: '>= 4.9.1 < 6' + dependencies: + '@algolia/client-search': 4.20.0 + algoliasearch: 4.20.0 + dev: true + + /@algolia/cache-browser-local-storage@4.20.0: + resolution: {integrity: sha512-uujahcBt4DxduBTvYdwO3sBfHuJvJokiC3BP1+O70fglmE1ShkH8lpXqZBac1rrU3FnNYSUs4pL9lBdTKeRPOQ==} + dependencies: + '@algolia/cache-common': 4.20.0 + dev: true + + /@algolia/cache-common@4.20.0: + resolution: {integrity: sha512-vCfxauaZutL3NImzB2G9LjLt36vKAckc6DhMp05An14kVo8F1Yofb6SIl6U3SaEz8pG2QOB9ptwM5c+zGevwIQ==} + dev: true + + /@algolia/cache-in-memory@4.20.0: + resolution: {integrity: sha512-Wm9ak/IaacAZXS4mB3+qF/KCoVSBV6aLgIGFEtQtJwjv64g4ePMapORGmCyulCFwfePaRAtcaTbMcJF+voc/bg==} + dependencies: + '@algolia/cache-common': 4.20.0 + dev: true + + /@algolia/client-account@4.20.0: + resolution: {integrity: sha512-GGToLQvrwo7am4zVkZTnKa72pheQeez/16sURDWm7Seyz+HUxKi3BM6fthVVPUEBhtJ0reyVtuK9ArmnaKl10Q==} + dependencies: + '@algolia/client-common': 4.20.0 + '@algolia/client-search': 4.20.0 + '@algolia/transporter': 4.20.0 + dev: true + + /@algolia/client-analytics@4.20.0: + resolution: {integrity: sha512-EIr+PdFMOallRdBTHHdKI3CstslgLORQG7844Mq84ib5oVFRVASuuPmG4bXBgiDbcsMLUeOC6zRVJhv1KWI0ug==} + dependencies: + '@algolia/client-common': 4.20.0 + '@algolia/client-search': 4.20.0 + '@algolia/requester-common': 4.20.0 + '@algolia/transporter': 4.20.0 + dev: true + + /@algolia/client-common@4.20.0: + resolution: {integrity: sha512-P3WgMdEss915p+knMMSd/fwiHRHKvDu4DYRrCRaBrsfFw7EQHon+EbRSm4QisS9NYdxbS04kcvNoavVGthyfqQ==} + dependencies: + '@algolia/requester-common': 4.20.0 + '@algolia/transporter': 4.20.0 + dev: true + + /@algolia/client-personalization@4.20.0: + resolution: {integrity: sha512-N9+zx0tWOQsLc3K4PVRDV8GUeOLAY0i445En79Pr3zWB+m67V+n/8w4Kw1C5LlbHDDJcyhMMIlqezh6BEk7xAQ==} + dependencies: + '@algolia/client-common': 4.20.0 + '@algolia/requester-common': 4.20.0 + '@algolia/transporter': 4.20.0 + dev: true + + /@algolia/client-search@4.20.0: + resolution: {integrity: sha512-zgwqnMvhWLdpzKTpd3sGmMlr4c+iS7eyyLGiaO51zDZWGMkpgoNVmltkzdBwxOVXz0RsFMznIxB9zuarUv4TZg==} + dependencies: + '@algolia/client-common': 4.20.0 + '@algolia/requester-common': 4.20.0 + '@algolia/transporter': 4.20.0 + dev: true + + /@algolia/logger-common@4.20.0: + resolution: {integrity: sha512-xouigCMB5WJYEwvoWW5XDv7Z9f0A8VoXJc3VKwlHJw/je+3p2RcDXfksLI4G4lIVncFUYMZx30tP/rsdlvvzHQ==} + dev: true + + /@algolia/logger-console@4.20.0: + resolution: {integrity: sha512-THlIGG1g/FS63z0StQqDhT6bprUczBI8wnLT3JWvfAQDZX5P6fCg7dG+pIrUBpDIHGszgkqYEqECaKKsdNKOUA==} + dependencies: + '@algolia/logger-common': 4.20.0 + dev: true + + /@algolia/requester-browser-xhr@4.20.0: + resolution: {integrity: sha512-HbzoSjcjuUmYOkcHECkVTwAelmvTlgs48N6Owt4FnTOQdwn0b8pdht9eMgishvk8+F8bal354nhx/xOoTfwiAw==} + dependencies: + '@algolia/requester-common': 4.20.0 + dev: true + + /@algolia/requester-common@4.20.0: + resolution: {integrity: sha512-9h6ye6RY/BkfmeJp7Z8gyyeMrmmWsMOCRBXQDs4mZKKsyVlfIVICpcSibbeYcuUdurLhIlrOUkH3rQEgZzonng==} + dev: true + + /@algolia/requester-node-http@4.20.0: + resolution: {integrity: sha512-ocJ66L60ABSSTRFnCHIEZpNHv6qTxsBwJEPfYaSBsLQodm0F9ptvalFkHMpvj5DfE22oZrcrLbOYM2bdPJRHng==} + dependencies: + '@algolia/requester-common': 4.20.0 + dev: true + + /@algolia/transporter@4.20.0: + resolution: {integrity: sha512-Lsii1pGWOAISbzeyuf+r/GPhvHMPHSPrTDWNcIzOE1SG1inlJHICaVe2ikuoRjcpgxZNU54Jl+if15SUCsaTUg==} + dependencies: + '@algolia/cache-common': 4.20.0 + '@algolia/logger-common': 4.20.0 + '@algolia/requester-common': 4.20.0 + dev: true + + /@alloc/quick-lru@5.2.0: + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + dev: true + + /@babel/helper-string-parser@7.22.5: + resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-validator-identifier@7.22.20: + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/parser@7.24.1: + resolution: {integrity: sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.23.0 + dev: true + + /@babel/types@7.23.0: + resolution: {integrity: sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.22.5 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 + dev: true + + /@docsearch/css@3.6.0: + resolution: {integrity: sha512-+sbxb71sWre+PwDK7X2T8+bhS6clcVMLwBPznX45Qu6opJcgRjAp7gYSDzVFp187J+feSj5dNBN1mJoi6ckkUQ==} + dev: true + + /@docsearch/js@3.6.0(@algolia/client-search@4.20.0)(search-insights@2.9.0): + resolution: {integrity: sha512-QujhqINEElrkIfKwyyyTfbsfMAYCkylInLYMRqHy7PHc8xTBQCow73tlo/Kc7oIwBrCLf0P3YhjlOeV4v8hevQ==} + dependencies: + '@docsearch/react': 3.6.0(@algolia/client-search@4.20.0)(search-insights@2.9.0) + preact: 10.13.0 + transitivePeerDependencies: + - '@algolia/client-search' + - '@types/react' + - react + - react-dom + - search-insights + dev: true + + /@docsearch/react@3.6.0(@algolia/client-search@4.20.0)(search-insights@2.9.0): + resolution: {integrity: sha512-HUFut4ztcVNmqy9gp/wxNbC7pTOHhgVVkHVGCACTuLhUKUhKAF9KYHJtMiLUJxEqiFLQiuri1fWF8zqwM/cu1w==} + peerDependencies: + '@types/react': '>= 16.8.0 < 19.0.0' + react: '>= 16.8.0 < 19.0.0' + react-dom: '>= 16.8.0 < 19.0.0' + search-insights: '>= 1 < 3' + peerDependenciesMeta: + '@types/react': + optional: true + react: + optional: true + react-dom: + optional: true + search-insights: + optional: true + dependencies: + '@algolia/autocomplete-core': 1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0)(search-insights@2.9.0) + '@algolia/autocomplete-preset-algolia': 1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0) + '@docsearch/css': 3.6.0 + algoliasearch: 4.20.0 + search-insights: 2.9.0 + transitivePeerDependencies: + - '@algolia/client-search' + dev: true + + /@esbuild/aix-ppc64@0.20.2: + resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm64@0.20.2: + resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm@0.20.2: + resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-x64@0.20.2: + resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-arm64@0.20.2: + resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-x64@0.20.2: + resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-arm64@0.20.2: + resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-x64@0.20.2: + resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm64@0.20.2: + resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm@0.20.2: + resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ia32@0.20.2: + resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64@0.20.2: + resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-mips64el@0.20.2: + resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ppc64@0.20.2: + resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-riscv64@0.20.2: + resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-s390x@0.20.2: + resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-x64@0.20.2: + resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/netbsd-x64@0.20.2: + resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-x64@0.20.2: + resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/sunos-x64@0.20.2: + resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-arm64@0.20.2: + resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-ia32@0.20.2: + resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-x64@0.20.2: + resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@femm/prettier@1.1.0: + resolution: {integrity: sha512-9QljKnVUl9DlDdPO4hF7PuY5bhoHsgOapClB3td7XaMltSR/b9osSC6R/OF/TUAkn+GMRAnoJgua+qFRESRXcg==} + dev: true + + /@femm/tailwind-config@1.0.0(tailwindcss@3.4.1): + resolution: {integrity: sha512-T3semVlcu87zyQT+2dhOOek4UBQY0bQKyc8zP5mlFt8drw5jDBshHxYiqDSW5HV6Qnariry4SsZwtbAXCVsIKg==} + peerDependencies: + tailwindcss: '>=3.0.0' + dependencies: + tailwindcss: 3.4.1 + dev: true + + /@femm/verify-commit@1.0.1: + resolution: {integrity: sha512-fJTeJwCkQQfPJXs56Oj9VUIC40fvyeggnYk0bk9PutOg6nzCytQlhmDRGl+i58jIrpFhVaJnoPo2wCAjoJEhag==} + hasBin: true + dependencies: + picocolors: 1.0.0 + terminal-link: 3.0.0 + dev: true + + /@giscus/vue@3.0.0(vue@3.4.21): + resolution: {integrity: sha512-ZoSUmlc3ee2a+kdumCaXFDZaB4h9b1BYWzsmmRP7zoGEQKYopdAnzGvJK7RdvrYGAzNqZtGUxI0NnBl8/UA6bQ==} + peerDependencies: + vue: '>=3.2.0' + dependencies: + giscus: 1.5.0 + vue: 3.4.21 + dev: true + + /@isaacs/cliui@8.0.2: + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + dependencies: + string-width: 5.1.2 + string-width-cjs: /string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: /strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: /wrap-ansi@7.0.0 + dev: true + + /@jridgewell/gen-mapping@0.3.3: + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.22 + dev: true + + /@jridgewell/resolve-uri@3.1.1: + resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/set-array@1.1.2: + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/sourcemap-codec@1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + dev: true + + /@jridgewell/trace-mapping@0.3.22: + resolution: {integrity: sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==} + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + + /@lit-labs/ssr-dom-shim@1.2.0: + resolution: {integrity: sha512-yWJKmpGE6lUURKAaIltoPIE/wrbY3TEkqQt+X0m+7fQNnAv0keydnYvbiJFP1PnMhizmIWRWOG5KLhYyc/xl+g==} + dev: true + + /@lit/reactive-element@2.0.4: + resolution: {integrity: sha512-GFn91inaUa2oHLak8awSIigYz0cU0Payr1rcFsrkf5OJ5eSPxElyZfKh0f2p9FsTiZWXQdWGJeXZICEfXXYSXQ==} + dependencies: + '@lit-labs/ssr-dom-shim': 1.2.0 + dev: true + + /@mdit-vue/shared@0.12.1: + resolution: {integrity: sha512-bXgd0KThe4jC2leCFDFsyrudXIckvTwV4WnQK/rRMrXq0/BAuVdSNdIv1LGCWZxD5+oDyPyEPd0lalTIFwqsmg==} + dependencies: + '@mdit-vue/types': 0.12.0 + '@types/markdown-it': 13.0.3 + markdown-it: 13.0.1 + dev: true + + /@mdit-vue/types@0.12.0: + resolution: {integrity: sha512-mrC4y8n88BYvgcgzq9bvTlDgFyi2zuvzmPilRvRc3Uz1iIvq8mDhxJ0rHKFUNzPEScpDvJdIujqiDrulMqiudA==} + dev: true + + /@nodelib/fs.scandir@2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + dev: true + + /@nodelib/fs.stat@2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + dev: true + + /@nodelib/fs.walk@1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.16.0 + dev: true + + /@pkgjs/parseargs@0.11.0: + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-android-arm-eabi@4.13.0: + resolution: {integrity: sha512-5ZYPOuaAqEH/W3gYsRkxQATBW3Ii1MfaT4EQstTnLKViLi2gLSQmlmtTpGucNP3sXEpOiI5tdGhjdE111ekyEg==} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-android-arm64@4.13.0: + resolution: {integrity: sha512-BSbaCmn8ZadK3UAQdlauSvtaJjhlDEjS5hEVVIN3A4bbl3X+otyf/kOJV08bYiRxfejP3DXFzO2jz3G20107+Q==} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-darwin-arm64@4.13.0: + resolution: {integrity: sha512-Ovf2evVaP6sW5Ut0GHyUSOqA6tVKfrTHddtmxGQc1CTQa1Cw3/KMCDEEICZBbyppcwnhMwcDce9ZRxdWRpVd6g==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-darwin-x64@4.13.0: + resolution: {integrity: sha512-U+Jcxm89UTK592vZ2J9st9ajRv/hrwHdnvyuJpa5A2ngGSVHypigidkQJP+YiGL6JODiUeMzkqQzbCG3At81Gg==} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm-gnueabihf@4.13.0: + resolution: {integrity: sha512-8wZidaUJUTIR5T4vRS22VkSMOVooG0F4N+JSwQXWSRiC6yfEsFMLTYRFHvby5mFFuExHa/yAp9juSphQQJAijQ==} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm64-gnu@4.13.0: + resolution: {integrity: sha512-Iu0Kno1vrD7zHQDxOmvweqLkAzjxEVqNhUIXBsZ8hu8Oak7/5VTPrxOEZXYC1nmrBVJp0ZcL2E7lSuuOVaE3+w==} + cpu: [arm64] + os: [linux] + libc: [glibc] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm64-musl@4.13.0: + resolution: {integrity: sha512-C31QrW47llgVyrRjIwiOwsHFcaIwmkKi3PCroQY5aVq4H0A5v/vVVAtFsI1nfBngtoRpeREvZOkIhmRwUKkAdw==} + cpu: [arm64] + os: [linux] + libc: [musl] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-riscv64-gnu@4.13.0: + resolution: {integrity: sha512-Oq90dtMHvthFOPMl7pt7KmxzX7E71AfyIhh+cPhLY9oko97Zf2C9tt/XJD4RgxhaGeAraAXDtqxvKE1y/j35lA==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-x64-gnu@4.13.0: + resolution: {integrity: sha512-yUD/8wMffnTKuiIsl6xU+4IA8UNhQ/f1sAnQebmE/lyQ8abjsVyDkyRkWop0kdMhKMprpNIhPmYlCxgHrPoXoA==} + cpu: [x64] + os: [linux] + libc: [glibc] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-x64-musl@4.13.0: + resolution: {integrity: sha512-9RyNqoFNdF0vu/qqX63fKotBh43fJQeYC98hCaf89DYQpv+xu0D8QFSOS0biA7cGuqJFOc1bJ+m2rhhsKcw1hw==} + cpu: [x64] + os: [linux] + libc: [musl] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-arm64-msvc@4.13.0: + resolution: {integrity: sha512-46ue8ymtm/5PUU6pCvjlic0z82qWkxv54GTJZgHrQUuZnVH+tvvSP0LsozIDsCBFO4VjJ13N68wqrKSeScUKdA==} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-ia32-msvc@4.13.0: + resolution: {integrity: sha512-P5/MqLdLSlqxbeuJ3YDeX37srC8mCflSyTrUsgbU1c/U9j6l2g2GiIdYaGD9QjdMQPMSgYm7hgg0551wHyIluw==} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-x64-msvc@4.13.0: + resolution: {integrity: sha512-UKXUQNbO3DOhzLRwHSpa0HnhhCgNODvfoPWv2FCXme8N/ANFfhIPMGuOT+QuKd16+B5yxZ0HdpNlqPvTMS1qfw==} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@shikijs/core@1.2.0: + resolution: {integrity: sha512-OlFvx+nyr5C8zpcMBnSGir0YPD6K11uYhouqhNmm1qLiis4GA7SsGtu07r9gKS9omks8RtQqHrJL4S+lqWK01A==} + dev: true + + /@shikijs/transformers@1.2.0: + resolution: {integrity: sha512-xKn7DtA65DQV4FOfYsrvqM80xOy2xuXnxWWKsZmHv1VII/IOuDUDsWDu3KnpeLH6wqNJWp1GRoNUsHR1aw/VhQ==} + dependencies: + shiki: 1.2.0 + dev: true + + /@types/debug@4.1.12: + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + dependencies: + '@types/ms': 0.7.34 + dev: true + + /@types/estree@1.0.5: + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + dev: true + + /@types/linkify-it@3.0.4: + resolution: {integrity: sha512-hPpIeeHb/2UuCw06kSNAOVWgehBLXEo0/fUs0mw3W2qhqX89PI2yvok83MnuctYGCPrabGIoi0fFso4DQ+sNUQ==} + dev: true + + /@types/markdown-it@13.0.3: + resolution: {integrity: sha512-5XXD3Bl9+UzneLlI7rQnDYzGT5+Z3XSzSyEwJK36lHmwDBKfjylsalyGxRTCXgFrX0gb++h7/UPPbwumhTKvBQ==} + dependencies: + '@types/linkify-it': 3.0.4 + '@types/mdurl': 1.0.4 + dev: true + + /@types/markdown-it@13.0.7: + resolution: {integrity: sha512-U/CBi2YUUcTHBt5tjO2r5QV/x0Po6nsYwQU4Y04fBS6vfoImaiZ6f8bi3CjTCxBPQSO1LMyUqkByzi8AidyxfA==} + dependencies: + '@types/linkify-it': 3.0.4 + '@types/mdurl': 1.0.4 + dev: true + + /@types/mdast@3.0.15: + resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} + dependencies: + '@types/unist': 2.0.10 + dev: true + + /@types/mdurl@1.0.4: + resolution: {integrity: sha512-ARVxjAEX5TARFRzpDRVC6cEk0hUIXCCwaMhz8y7S1/PxU6zZS1UMjyobz7q4w/D/R552r4++EhwmXK1N2rAy0A==} + dev: true + + /@types/ms@0.7.34: + resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} + dev: true + + /@types/node@18.18.6: + resolution: {integrity: sha512-wf3Vz+jCmOQ2HV1YUJuCWdL64adYxumkrxtc+H1VUQlnQI04+5HtH+qZCOE21lBE7gIrt+CwX2Wv8Acrw5Ak6w==} + dev: true + + /@types/trusted-types@2.0.7: + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + dev: true + + /@types/unist@2.0.10: + resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==} + dev: true + + /@types/web-bluetooth@0.0.20: + resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} + dev: true + + /@vitejs/plugin-vue@5.0.4(vite@5.2.6)(vue@3.4.21): + resolution: {integrity: sha512-WS3hevEszI6CEVEx28F8RjTX97k3KsrcY6kvTg7+Whm5y3oYvcqzVeGCU3hxSAn4uY2CLCkeokkGKpoctccilQ==} + engines: {node: ^18.0.0 || >=20.0.0} + peerDependencies: + vite: ^5.0.0 + vue: ^3.2.25 + dependencies: + vite: 5.2.6(@types/node@18.18.6)(sass@1.69.4) + vue: 3.4.21 + dev: true + + /@vue/compiler-core@3.4.21: + resolution: {integrity: sha512-MjXawxZf2SbZszLPYxaFCjxfibYrzr3eYbKxwpLR9EQN+oaziSu3qKVbwBERj1IFIB8OLUewxB5m/BFzi613og==} + dependencies: + '@babel/parser': 7.24.1 + '@vue/shared': 3.4.21 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.0.2 + dev: true + + /@vue/compiler-dom@3.4.21: + resolution: {integrity: sha512-IZC6FKowtT1sl0CR5DpXSiEB5ayw75oT2bma1BEhV7RRR1+cfwLrxc2Z8Zq/RGFzJ8w5r9QtCOvTjQgdn0IKmA==} + dependencies: + '@vue/compiler-core': 3.4.21 + '@vue/shared': 3.4.21 + dev: true + + /@vue/compiler-sfc@3.4.21: + resolution: {integrity: sha512-me7epoTxYlY+2CUM7hy9PCDdpMPfIwrOvAXud2Upk10g4YLv9UBW7kL798TvMeDhPthkZ0CONNrK2GoeI1ODiQ==} + dependencies: + '@babel/parser': 7.24.1 + '@vue/compiler-core': 3.4.21 + '@vue/compiler-dom': 3.4.21 + '@vue/compiler-ssr': 3.4.21 + '@vue/shared': 3.4.21 + estree-walker: 2.0.2 + magic-string: 0.30.8 + postcss: 8.4.38 + source-map-js: 1.0.2 + dev: true + + /@vue/compiler-ssr@3.4.21: + resolution: {integrity: sha512-M5+9nI2lPpAsgXOGQobnIueVqc9sisBFexh5yMIMRAPYLa7+5wEJs8iqOZc1WAa9WQbx9GR2twgznU8LTIiZ4Q==} + dependencies: + '@vue/compiler-dom': 3.4.21 + '@vue/shared': 3.4.21 + dev: true + + /@vue/devtools-api@7.0.21(vue@3.4.21): + resolution: {integrity: sha512-hIkqpU3I9BM/qNUGhb/RAfEkRtFZTM4QFrBBH5gxGYubBIRctqgQk4ukLAkhaW+VmOw5DAPxQHXH4W6Oh36L6g==} + dependencies: + '@vue/devtools-kit': 7.0.21(vue@3.4.21) + transitivePeerDependencies: + - vue + dev: true + + /@vue/devtools-kit@7.0.21(vue@3.4.21): + resolution: {integrity: sha512-tNDtcQkPHfLDH1wtZuSZ2ZfE+r/aGswkBmKmXjwfpZTsOTk/YXsgrMnBKtHOL6dpsG3GyP09gIgNkCkA5lBIPQ==} + peerDependencies: + vue: ^3.0.0 + dependencies: + '@vue/devtools-shared': 7.0.21 + hookable: 5.5.3 + mitt: 3.0.1 + perfect-debounce: 1.0.0 + speakingurl: 14.0.1 + vue: 3.4.21 + dev: true + + /@vue/devtools-shared@7.0.21: + resolution: {integrity: sha512-wuIakRkSqwsk9+Y4z5QTdsmhTJRAt4aX0ROXyOOEPL+ROrN26YsPbXyqlzroU5uoOoAvx81iObIlmwZWtZztgw==} + dependencies: + rfdc: 1.3.1 + dev: true + + /@vue/reactivity@3.4.21: + resolution: {integrity: sha512-UhenImdc0L0/4ahGCyEzc/pZNwVgcglGy9HVzJ1Bq2Mm9qXOpP8RyNTjookw/gOCUlXSEtuZ2fUg5nrHcoqJcw==} + dependencies: + '@vue/shared': 3.4.21 + dev: true + + /@vue/runtime-core@3.4.21: + resolution: {integrity: sha512-pQthsuYzE1XcGZznTKn73G0s14eCJcjaLvp3/DKeYWoFacD9glJoqlNBxt3W2c5S40t6CCcpPf+jG01N3ULyrA==} + dependencies: + '@vue/reactivity': 3.4.21 + '@vue/shared': 3.4.21 + dev: true + + /@vue/runtime-dom@3.4.21: + resolution: {integrity: sha512-gvf+C9cFpevsQxbkRBS1NpU8CqxKw0ebqMvLwcGQrNpx6gqRDodqKqA+A2VZZpQ9RpK2f9yfg8VbW/EpdFUOJw==} + dependencies: + '@vue/runtime-core': 3.4.21 + '@vue/shared': 3.4.21 + csstype: 3.1.3 + dev: true + + /@vue/server-renderer@3.4.21(vue@3.4.21): + resolution: {integrity: sha512-aV1gXyKSN6Rz+6kZ6kr5+Ll14YzmIbeuWe7ryJl5muJ4uwSwY/aStXTixx76TwkZFJLm1aAlA/HSWEJ4EyiMkg==} + peerDependencies: + vue: 3.4.21 + dependencies: + '@vue/compiler-ssr': 3.4.21 + '@vue/shared': 3.4.21 + vue: 3.4.21 + dev: true + + /@vue/shared@3.4.21: + resolution: {integrity: sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==} + dev: true + + /@vueuse/core@10.9.0(vue@3.4.21): + resolution: {integrity: sha512-/1vjTol8SXnx6xewDEKfS0Ra//ncg4Hb0DaZiwKf7drgfMsKFExQ+FnnENcN6efPen+1kIzhLQoGSy0eDUVOMg==} + dependencies: + '@types/web-bluetooth': 0.0.20 + '@vueuse/metadata': 10.9.0 + '@vueuse/shared': 10.9.0(vue@3.4.21) + vue-demi: 0.14.7(vue@3.4.21) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + dev: true + + /@vueuse/integrations@10.9.0(focus-trap@7.5.4)(vue@3.4.21): + resolution: {integrity: sha512-acK+A01AYdWSvL4BZmCoJAcyHJ6EqhmkQEXbQLwev1MY7NBnS+hcEMx/BzVoR9zKI+UqEPMD9u6PsyAuiTRT4Q==} + peerDependencies: + async-validator: '*' + axios: '*' + change-case: '*' + drauu: '*' + focus-trap: '*' + fuse.js: '*' + idb-keyval: '*' + jwt-decode: '*' + nprogress: '*' + qrcode: '*' + sortablejs: '*' + universal-cookie: '*' + peerDependenciesMeta: + async-validator: + optional: true + axios: + optional: true + change-case: + optional: true + drauu: + optional: true + focus-trap: + optional: true + fuse.js: + optional: true + idb-keyval: + optional: true + jwt-decode: + optional: true + nprogress: + optional: true + qrcode: + optional: true + sortablejs: + optional: true + universal-cookie: + optional: true + dependencies: + '@vueuse/core': 10.9.0(vue@3.4.21) + '@vueuse/shared': 10.9.0(vue@3.4.21) + focus-trap: 7.5.4 + vue-demi: 0.14.7(vue@3.4.21) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + dev: true + + /@vueuse/metadata@10.9.0: + resolution: {integrity: sha512-iddNbg3yZM0X7qFY2sAotomgdHK7YJ6sKUvQqbvwnf7TmaVPxS4EJydcNsVejNdS8iWCtDk+fYXr7E32nyTnGA==} + dev: true + + /@vueuse/shared@10.9.0(vue@3.4.21): + resolution: {integrity: sha512-Uud2IWncmAfJvRaFYzv5OHDli+FbOzxiVEQdLCKQKLyhz94PIyFC3CHcH7EDMwIn8NPtD06+PNbC/PiO0LGLtw==} + dependencies: + vue-demi: 0.14.7(vue@3.4.21) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + dev: true + + /algoliasearch@4.20.0: + resolution: {integrity: sha512-y+UHEjnOItoNy0bYO+WWmLWBlPwDjKHW6mNHrPi0NkuhpQOOEbrkwQH/wgKFDLh7qlKjzoKeiRtlpewDPDG23g==} + dependencies: + '@algolia/cache-browser-local-storage': 4.20.0 + '@algolia/cache-common': 4.20.0 + '@algolia/cache-in-memory': 4.20.0 + '@algolia/client-account': 4.20.0 + '@algolia/client-analytics': 4.20.0 + '@algolia/client-common': 4.20.0 + '@algolia/client-personalization': 4.20.0 + '@algolia/client-search': 4.20.0 + '@algolia/logger-common': 4.20.0 + '@algolia/logger-console': 4.20.0 + '@algolia/requester-browser-xhr': 4.20.0 + '@algolia/requester-common': 4.20.0 + '@algolia/requester-node-http': 4.20.0 + '@algolia/transporter': 4.20.0 + dev: true + + /ansi-escapes@5.0.0: + resolution: {integrity: sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==} + engines: {node: '>=12'} + dependencies: + type-fest: 1.4.0 + dev: true + + /ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + dev: true + + /ansi-regex@6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + dev: true + + /ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + dev: true + + /ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + dev: true + + /any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + dev: true + + /anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + dev: true + + /arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + dev: true + + /argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: true + + /autoprefixer@10.4.17(postcss@8.4.33): + resolution: {integrity: sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + dependencies: + browserslist: 4.22.2 + caniuse-lite: 1.0.30001580 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.0.0 + postcss: 8.4.33 + postcss-value-parser: 4.2.0 + dev: true + + /balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: true + + /binary-extensions@2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + dev: true + + /brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + dependencies: + balanced-match: 1.0.2 + dev: true + + /braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + dev: true + + /browserslist@4.22.2: + resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001580 + electron-to-chromium: 1.4.647 + node-releases: 2.0.14 + update-browserslist-db: 1.0.13(browserslist@4.22.2) + dev: true + + /camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + dev: true + + /caniuse-lite@1.0.30001580: + resolution: {integrity: sha512-mtj5ur2FFPZcCEpXFy8ADXbDACuNFXg6mxVDqp7tqooX6l3zwm+d8EPoeOSIFRDvHs8qu7/SLFOGniULkcH2iA==} + dev: true + + /chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + dev: true + + /character-entities@2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + dev: true + + /chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /cli-cursor@4.0.0: + resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + restore-cursor: 4.0.0 + dev: true + + /cli-truncate@3.1.0: + resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + slice-ansi: 5.0.0 + string-width: 5.1.2 + dev: true + + /color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + dev: true + + /color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + dev: true + + /colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + dev: true + + /commander@11.0.0: + resolution: {integrity: sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==} + engines: {node: '>=16'} + dev: true + + /commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + dev: true + + /cross-env@7.0.3: + resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} + engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} + hasBin: true + dependencies: + cross-spawn: 7.0.3 + dev: true + + /cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + dev: true + + /cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + dev: true + + /debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + dev: true + + /decode-named-character-reference@1.0.2: + resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} + dependencies: + character-entities: 2.0.2 + dev: true + + /dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + dev: true + + /didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + dev: true + + /diff@5.1.0: + resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==} + engines: {node: '>=0.3.1'} + dev: true + + /dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + dev: true + + /eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + dev: true + + /electron-to-chromium@1.4.647: + resolution: {integrity: sha512-Z/fTNGwc45WrYQhPaEcz5tAJuZZ8G7S/DBnhS6Kgp4BxnS40Z/HqlJ0hHg3Z79IGVzuVartIlTcjw/cQbPLgOw==} + dev: true + + /emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: true + + /emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + dev: true + + /entities@3.0.1: + resolution: {integrity: sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==} + engines: {node: '>=0.12'} + dev: true + + /entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + dev: true + + /esbuild@0.20.2: + resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/aix-ppc64': 0.20.2 + '@esbuild/android-arm': 0.20.2 + '@esbuild/android-arm64': 0.20.2 + '@esbuild/android-x64': 0.20.2 + '@esbuild/darwin-arm64': 0.20.2 + '@esbuild/darwin-x64': 0.20.2 + '@esbuild/freebsd-arm64': 0.20.2 + '@esbuild/freebsd-x64': 0.20.2 + '@esbuild/linux-arm': 0.20.2 + '@esbuild/linux-arm64': 0.20.2 + '@esbuild/linux-ia32': 0.20.2 + '@esbuild/linux-loong64': 0.20.2 + '@esbuild/linux-mips64el': 0.20.2 + '@esbuild/linux-ppc64': 0.20.2 + '@esbuild/linux-riscv64': 0.20.2 + '@esbuild/linux-s390x': 0.20.2 + '@esbuild/linux-x64': 0.20.2 + '@esbuild/netbsd-x64': 0.20.2 + '@esbuild/openbsd-x64': 0.20.2 + '@esbuild/sunos-x64': 0.20.2 + '@esbuild/win32-arm64': 0.20.2 + '@esbuild/win32-ia32': 0.20.2 + '@esbuild/win32-x64': 0.20.2 + dev: true + + /escalade@3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + dev: true + + /estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + dev: true + + /eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + dev: true + + /execa@7.2.0: + resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} + engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 4.3.1 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.1.0 + onetime: 6.0.0 + signal-exit: 3.0.7 + strip-final-newline: 3.0.0 + dev: true + + /fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + dev: true + + /fastq@1.16.0: + resolution: {integrity: sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==} + dependencies: + reusify: 1.0.4 + dev: true + + /fault@2.0.1: + resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==} + dependencies: + format: 0.2.2 + dev: true + + /fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + dev: true + + /focus-trap@7.5.4: + resolution: {integrity: sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==} + dependencies: + tabbable: 6.2.0 + dev: true + + /foreground-child@3.1.1: + resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} + engines: {node: '>=14'} + dependencies: + cross-spawn: 7.0.3 + signal-exit: 4.1.0 + dev: true + + /format@0.2.2: + resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} + engines: {node: '>=0.4.x'} + dev: true + + /fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + dev: true + + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + dev: true + + /get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + dev: true + + /giscus@1.5.0: + resolution: {integrity: sha512-t3LL0qbSO3JXq3uyQeKpF5CegstGfKX/0gI6eDe1cmnI7D56R7j52yLdzw4pdKrg3VnufwCgCM3FDz7G1Qr6lg==} + dependencies: + lit: 3.1.2 + dev: true + + /glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob@10.3.10: + resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + dependencies: + foreground-child: 3.1.1 + jackspeak: 2.3.6 + minimatch: 9.0.3 + minipass: 7.0.4 + path-scurry: 1.10.1 + dev: true + + /has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + dev: true + + /hasown@2.0.0: + resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + dev: true + + /hookable@5.5.3: + resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + dev: true + + /human-signals@4.3.1: + resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} + engines: {node: '>=14.18.0'} + dev: true + + /husky@8.0.3: + resolution: {integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==} + engines: {node: '>=14'} + hasBin: true + dev: true + + /immutable@4.2.4: + resolution: {integrity: sha512-WDxL3Hheb1JkRN3sQkyujNlL/xRjAo3rJtaU5xeufUauG66JdMr32bLj4gF+vWl84DIA3Zxw7tiAjneYzRRw+w==} + dev: true + + /is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.2.0 + dev: true + + /is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + dependencies: + hasown: 2.0.0 + dev: true + + /is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + dev: true + + /is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + dev: true + + /is-fullwidth-code-point@4.0.0: + resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} + engines: {node: '>=12'} + dev: true + + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: true + + /is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + dev: true + + /is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: true + + /jackspeak@2.3.6: + resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} + engines: {node: '>=14'} + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + dev: true + + /jiti@1.21.0: + resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} + hasBin: true + dev: true + + /kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + dev: true + + /lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + dev: true + + /lilconfig@3.0.0: + resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==} + engines: {node: '>=14'} + dev: true + + /lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + dev: true + + /linkify-it@4.0.1: + resolution: {integrity: sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==} + dependencies: + uc.micro: 1.0.6 + dev: true + + /lint-staged@13.3.0: + resolution: {integrity: sha512-mPRtrYnipYYv1FEE134ufbWpeggNTo+O/UPzngoaKzbzHAthvR55am+8GfHTnqNRQVRRrYQLGW9ZyUoD7DsBHQ==} + engines: {node: ^16.14.0 || >=18.0.0} + hasBin: true + dependencies: + chalk: 5.3.0 + commander: 11.0.0 + debug: 4.3.4 + execa: 7.2.0 + lilconfig: 2.1.0 + listr2: 6.6.1 + micromatch: 4.0.5 + pidtree: 0.6.0 + string-argv: 0.3.2 + yaml: 2.3.1 + transitivePeerDependencies: + - enquirer + - supports-color + dev: true + + /listr2@6.6.1: + resolution: {integrity: sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg==} + engines: {node: '>=16.0.0'} + peerDependencies: + enquirer: '>= 2.3.0 < 3' + peerDependenciesMeta: + enquirer: + optional: true + dependencies: + cli-truncate: 3.1.0 + colorette: 2.0.20 + eventemitter3: 5.0.1 + log-update: 5.0.1 + rfdc: 1.3.0 + wrap-ansi: 8.1.0 + dev: true + + /lit-element@4.0.4: + resolution: {integrity: sha512-98CvgulX6eCPs6TyAIQoJZBCQPo80rgXR+dVBs61cstJXqtI+USQZAbA4gFHh6L/mxBx9MrgPLHLsUgDUHAcCQ==} + dependencies: + '@lit-labs/ssr-dom-shim': 1.2.0 + '@lit/reactive-element': 2.0.4 + lit-html: 3.1.2 + dev: true + + /lit-html@3.1.2: + resolution: {integrity: sha512-3OBZSUrPnAHoKJ9AMjRL/m01YJxQMf+TMHanNtTHG68ubjnZxK0RFl102DPzsw4mWnHibfZIBJm3LWCZ/LmMvg==} + dependencies: + '@types/trusted-types': 2.0.7 + dev: true + + /lit@3.1.2: + resolution: {integrity: sha512-VZx5iAyMtX7CV4K8iTLdCkMaYZ7ipjJZ0JcSdJ0zIdGxxyurjIn7yuuSxNBD7QmjvcNJwr0JS4cAdAtsy7gZ6w==} + dependencies: + '@lit/reactive-element': 2.0.4 + lit-element: 4.0.4 + lit-html: 3.1.2 + dev: true + + /log-update@5.0.1: + resolution: {integrity: sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + ansi-escapes: 5.0.0 + cli-cursor: 4.0.0 + slice-ansi: 5.0.0 + strip-ansi: 7.1.0 + wrap-ansi: 8.1.0 + dev: true + + /longest-streak@3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + dev: true + + /lru-cache@10.2.0: + resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} + engines: {node: 14 || >=16.14} + dev: true + + /magic-string@0.30.8: + resolution: {integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + + /mark.js@8.11.1: + resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==} + dev: true + + /markdown-it@13.0.1: + resolution: {integrity: sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==} + hasBin: true + dependencies: + argparse: 2.0.1 + entities: 3.0.1 + linkify-it: 4.0.1 + mdurl: 1.0.1 + uc.micro: 1.0.6 + dev: true + + /mdast-util-from-markdown@1.3.1: + resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==} + dependencies: + '@types/mdast': 3.0.15 + '@types/unist': 2.0.10 + decode-named-character-reference: 1.0.2 + mdast-util-to-string: 3.2.0 + micromark: 3.2.0 + micromark-util-decode-numeric-character-reference: 1.1.0 + micromark-util-decode-string: 1.1.0 + micromark-util-normalize-identifier: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + unist-util-stringify-position: 3.0.3 + uvu: 0.5.6 + transitivePeerDependencies: + - supports-color + dev: true + + /mdast-util-frontmatter@1.0.1: + resolution: {integrity: sha512-JjA2OjxRqAa8wEG8hloD0uTU0kdn8kbtOWpPP94NBkfAlbxn4S8gCGf/9DwFtEeGPXrDcNXdiDjVaRdUFqYokw==} + dependencies: + '@types/mdast': 3.0.15 + mdast-util-to-markdown: 1.5.0 + micromark-extension-frontmatter: 1.1.1 + dev: true + + /mdast-util-phrasing@3.0.1: + resolution: {integrity: sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==} + dependencies: + '@types/mdast': 3.0.15 + unist-util-is: 5.2.1 + dev: true + + /mdast-util-to-markdown@1.5.0: + resolution: {integrity: sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==} + dependencies: + '@types/mdast': 3.0.15 + '@types/unist': 2.0.10 + longest-streak: 3.1.0 + mdast-util-phrasing: 3.0.1 + mdast-util-to-string: 3.2.0 + micromark-util-decode-string: 1.1.0 + unist-util-visit: 4.1.2 + zwitch: 2.0.4 + dev: true + + /mdast-util-to-string@3.2.0: + resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==} + dependencies: + '@types/mdast': 3.0.15 + dev: true + + /mdurl@1.0.1: + resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==} + dev: true + + /medium-zoom@1.0.8: + resolution: {integrity: sha512-CjFVuFq/IfrdqesAXfg+hzlDKu6A2n80ZIq0Kl9kWjoHh9j1N9Uvk5X0/MmN0hOfm5F9YBswlClhcwnmtwz7gA==} + dev: true + + /merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + dev: true + + /merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + dev: true + + /micromark-core-commonmark@1.1.0: + resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==} + dependencies: + decode-named-character-reference: 1.0.2 + micromark-factory-destination: 1.1.0 + micromark-factory-label: 1.1.0 + micromark-factory-space: 1.1.0 + micromark-factory-title: 1.1.0 + micromark-factory-whitespace: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-chunked: 1.1.0 + micromark-util-classify-character: 1.1.0 + micromark-util-html-tag-name: 1.2.0 + micromark-util-normalize-identifier: 1.1.0 + micromark-util-resolve-all: 1.1.0 + micromark-util-subtokenize: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + dev: true + + /micromark-extension-frontmatter@1.1.1: + resolution: {integrity: sha512-m2UH9a7n3W8VAH9JO9y01APpPKmNNNs71P0RbknEmYSaZU5Ghogv38BYO94AI5Xw6OYfxZRdHZZ2nYjs/Z+SZQ==} + dependencies: + fault: 2.0.1 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + dev: true + + /micromark-factory-destination@1.1.0: + resolution: {integrity: sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==} + dependencies: + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + dev: true + + /micromark-factory-label@1.1.0: + resolution: {integrity: sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==} + dependencies: + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + dev: true + + /micromark-factory-space@1.1.0: + resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==} + dependencies: + micromark-util-character: 1.2.0 + micromark-util-types: 1.1.0 + dev: true + + /micromark-factory-title@1.1.0: + resolution: {integrity: sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==} + dependencies: + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + dev: true + + /micromark-factory-whitespace@1.1.0: + resolution: {integrity: sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==} + dependencies: + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + dev: true + + /micromark-util-character@1.2.0: + resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==} + dependencies: + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + dev: true + + /micromark-util-chunked@1.1.0: + resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==} + dependencies: + micromark-util-symbol: 1.1.0 + dev: true + + /micromark-util-classify-character@1.1.0: + resolution: {integrity: sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==} + dependencies: + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + dev: true + + /micromark-util-combine-extensions@1.1.0: + resolution: {integrity: sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==} + dependencies: + micromark-util-chunked: 1.1.0 + micromark-util-types: 1.1.0 + dev: true + + /micromark-util-decode-numeric-character-reference@1.1.0: + resolution: {integrity: sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==} + dependencies: + micromark-util-symbol: 1.1.0 + dev: true + + /micromark-util-decode-string@1.1.0: + resolution: {integrity: sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==} + dependencies: + decode-named-character-reference: 1.0.2 + micromark-util-character: 1.2.0 + micromark-util-decode-numeric-character-reference: 1.1.0 + micromark-util-symbol: 1.1.0 + dev: true + + /micromark-util-encode@1.1.0: + resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==} + dev: true + + /micromark-util-html-tag-name@1.2.0: + resolution: {integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==} + dev: true + + /micromark-util-normalize-identifier@1.1.0: + resolution: {integrity: sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==} + dependencies: + micromark-util-symbol: 1.1.0 + dev: true + + /micromark-util-resolve-all@1.1.0: + resolution: {integrity: sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==} + dependencies: + micromark-util-types: 1.1.0 + dev: true + + /micromark-util-sanitize-uri@1.2.0: + resolution: {integrity: sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==} + dependencies: + micromark-util-character: 1.2.0 + micromark-util-encode: 1.1.0 + micromark-util-symbol: 1.1.0 + dev: true + + /micromark-util-subtokenize@1.1.0: + resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==} + dependencies: + micromark-util-chunked: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + dev: true + + /micromark-util-symbol@1.1.0: + resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==} + dev: true + + /micromark-util-types@1.1.0: + resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==} + dev: true + + /micromark@3.2.0: + resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==} + dependencies: + '@types/debug': 4.1.12 + debug: 4.3.4 + decode-named-character-reference: 1.0.2 + micromark-core-commonmark: 1.1.0 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-chunked: 1.1.0 + micromark-util-combine-extensions: 1.1.0 + micromark-util-decode-numeric-character-reference: 1.1.0 + micromark-util-encode: 1.1.0 + micromark-util-normalize-identifier: 1.1.0 + micromark-util-resolve-all: 1.1.0 + micromark-util-sanitize-uri: 1.2.0 + micromark-util-subtokenize: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + transitivePeerDependencies: + - supports-color + dev: true + + /micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + dev: true + + /mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + dev: true + + /mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + dev: true + + /minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + dev: true + + /minipass@7.0.4: + resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} + engines: {node: '>=16 || 14 >=14.17'} + dev: true + + /minisearch@6.3.0: + resolution: {integrity: sha512-ihFnidEeU8iXzcVHy74dhkxh/dn8Dc08ERl0xwoMMGqp4+LvRSCgicb+zGqWthVokQKvCSxITlh3P08OzdTYCQ==} + dev: true + + /mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + dev: true + + /mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + dev: true + + /ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: true + + /mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + dev: true + + /nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + dev: true + + /node-releases@2.0.14: + resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + dev: true + + /normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: true + + /normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + dev: true + + /npm-run-path@5.1.0: + resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + path-key: 4.0.0 + dev: true + + /object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + dev: true + + /object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + dev: true + + /onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + dependencies: + mimic-fn: 2.1.0 + dev: true + + /onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + dependencies: + mimic-fn: 4.0.0 + dev: true + + /path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + dev: true + + /path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + dev: true + + /path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: true + + /path-scurry@1.10.1: + resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + lru-cache: 10.2.0 + minipass: 7.0.4 + dev: true + + /perfect-debounce@1.0.0: + resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} + dev: true + + /picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + dev: true + + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + dev: true + + /pidtree@0.6.0: + resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} + engines: {node: '>=0.10'} + hasBin: true + dev: true + + /pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + dev: true + + /pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + dev: true + + /postcss-import@15.1.0(postcss@8.4.33): + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + dependencies: + postcss: 8.4.33 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.8 + dev: true + + /postcss-js@4.0.1(postcss@8.4.33): + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + dependencies: + camelcase-css: 2.0.1 + postcss: 8.4.33 + dev: true + + /postcss-load-config@4.0.2(postcss@8.4.33): + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + dependencies: + lilconfig: 3.0.0 + postcss: 8.4.33 + yaml: 2.3.4 + dev: true + + /postcss-nested@6.0.1(postcss@8.4.33): + resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + dependencies: + postcss: 8.4.33 + postcss-selector-parser: 6.0.15 + dev: true + + /postcss-selector-parser@6.0.15: + resolution: {integrity: sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + dev: true + + /postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + dev: true + + /postcss@8.4.33: + resolution: {integrity: sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: true + + /postcss@8.4.38: + resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.2.0 + dev: true + + /preact@10.13.0: + resolution: {integrity: sha512-ERdIdUpR6doqdaSIh80hvzebHB7O6JxycOhyzAeLEchqOq/4yueslQbfnPwXaNhAYacFTyCclhwkEbOumT0tHw==} + dev: true + + /prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + dev: true + + /queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + dev: true + + /read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + dependencies: + pify: 2.3.0 + dev: true + + /readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + dev: true + + /resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + + /restore-cursor@4.0.0: + resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + dev: true + + /reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: true + + /rfdc@1.3.0: + resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} + dev: true + + /rfdc@1.3.1: + resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==} + dev: true + + /rollup@4.13.0: + resolution: {integrity: sha512-3YegKemjoQnYKmsBlOHfMLVPPA5xLkQ8MHLLSw/fBrFaVkEayL51DilPpNNLq1exr98F2B1TzrV0FUlN3gWRPg==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + dependencies: + '@types/estree': 1.0.5 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.13.0 + '@rollup/rollup-android-arm64': 4.13.0 + '@rollup/rollup-darwin-arm64': 4.13.0 + '@rollup/rollup-darwin-x64': 4.13.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.13.0 + '@rollup/rollup-linux-arm64-gnu': 4.13.0 + '@rollup/rollup-linux-arm64-musl': 4.13.0 + '@rollup/rollup-linux-riscv64-gnu': 4.13.0 + '@rollup/rollup-linux-x64-gnu': 4.13.0 + '@rollup/rollup-linux-x64-musl': 4.13.0 + '@rollup/rollup-win32-arm64-msvc': 4.13.0 + '@rollup/rollup-win32-ia32-msvc': 4.13.0 + '@rollup/rollup-win32-x64-msvc': 4.13.0 + fsevents: 2.3.3 + dev: true + + /run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + dev: true + + /sade@1.8.1: + resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} + engines: {node: '>=6'} + dependencies: + mri: 1.2.0 + dev: true + + /sass@1.69.4: + resolution: {integrity: sha512-+qEreVhqAy8o++aQfCJwp0sklr2xyEzkm9Pp/Igu9wNPoe7EZEQ8X/MBvvXggI2ql607cxKg/RKOwDj6pp2XDA==} + engines: {node: '>=14.0.0'} + hasBin: true + dependencies: + chokidar: 3.5.3 + immutable: 4.2.4 + source-map-js: 1.0.2 + dev: true + + /search-insights@2.9.0: + resolution: {integrity: sha512-bkWW9nIHOFkLwjQ1xqVaMbjjO5vhP26ERsH9Y3pKr8imthofEFIxlnOabkmGcw6ksRj9jWidcI65vvjJH/nTGg==} + dev: true + + /shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + dependencies: + shebang-regex: 3.0.0 + dev: true + + /shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + dev: true + + /shiki@1.2.0: + resolution: {integrity: sha512-xLhiTMOIUXCv5DqJ4I70GgQCtdlzsTqFLZWcMHHG3TAieBUbvEGthdrlPDlX4mL/Wszx9C6rEcxU6kMlg4YlxA==} + dependencies: + '@shikijs/core': 1.2.0 + dev: true + + /signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + dev: true + + /signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + dev: true + + /slice-ansi@5.0.0: + resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} + engines: {node: '>=12'} + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 4.0.0 + dev: true + + /source-map-js@1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + dev: true + + /source-map-js@1.2.0: + resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} + engines: {node: '>=0.10.0'} + dev: true + + /speakingurl@14.0.1: + resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} + engines: {node: '>=0.10.0'} + dev: true + + /string-argv@0.3.2: + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} + engines: {node: '>=0.6.19'} + dev: true + + /string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + dev: true + + /string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + dev: true + + /strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + dev: true + + /strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + dependencies: + ansi-regex: 6.0.1 + dev: true + + /strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + dev: true + + /sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + commander: 4.1.1 + glob: 10.3.10 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.6 + ts-interface-checker: 0.1.13 + dev: true + + /supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + dev: true + + /supports-hyperlinks@2.3.0: + resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + supports-color: 7.2.0 + dev: true + + /supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + dev: true + + /tabbable@6.2.0: + resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} + dev: true + + /tailwindcss@3.4.1: + resolution: {integrity: sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==} + engines: {node: '>=14.0.0'} + hasBin: true + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.5.3 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.2 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.21.0 + lilconfig: 2.1.0 + micromatch: 4.0.5 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.0.0 + postcss: 8.4.33 + postcss-import: 15.1.0(postcss@8.4.33) + postcss-js: 4.0.1(postcss@8.4.33) + postcss-load-config: 4.0.2(postcss@8.4.33) + postcss-nested: 6.0.1(postcss@8.4.33) + postcss-selector-parser: 6.0.15 + resolve: 1.22.8 + sucrase: 3.35.0 + transitivePeerDependencies: + - ts-node + dev: true + + /terminal-link@3.0.0: + resolution: {integrity: sha512-flFL3m4wuixmf6IfhFJd1YPiLiMuxEc8uHRM1buzIeZPm22Au2pDqBJQgdo7n1WfPU1ONFGv7YDwpFBmHGF6lg==} + engines: {node: '>=12'} + dependencies: + ansi-escapes: 5.0.0 + supports-hyperlinks: 2.3.0 + dev: true + + /thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + dependencies: + thenify: 3.3.1 + dev: true + + /thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + dependencies: + any-promise: 1.3.0 + dev: true + + /to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + dev: true + + /to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + dev: true + + /ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + dev: true + + /type-fest@1.4.0: + resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} + engines: {node: '>=10'} + dev: true + + /uc.micro@1.0.6: + resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==} + dev: true + + /unist-util-is@5.2.1: + resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==} + dependencies: + '@types/unist': 2.0.10 + dev: true + + /unist-util-stringify-position@3.0.3: + resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==} + dependencies: + '@types/unist': 2.0.10 + dev: true + + /unist-util-visit-parents@5.1.3: + resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==} + dependencies: + '@types/unist': 2.0.10 + unist-util-is: 5.2.1 + dev: true + + /unist-util-visit@4.1.2: + resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==} + dependencies: + '@types/unist': 2.0.10 + unist-util-is: 5.2.1 + unist-util-visit-parents: 5.1.3 + dev: true + + /update-browserslist-db@1.0.13(browserslist@4.22.2): + resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.22.2 + escalade: 3.1.1 + picocolors: 1.0.0 + dev: true + + /util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + dev: true + + /uvu@0.5.6: + resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} + engines: {node: '>=8'} + hasBin: true + dependencies: + dequal: 2.0.3 + diff: 5.1.0 + kleur: 4.1.5 + sade: 1.8.1 + dev: true + + /vite-plugin-markdown-preview@1.1.1(patch_hash=snjgw2bn6xfqmbtsng4ppakymi): + resolution: {integrity: sha512-IEGw1il2hNvvRbLQBOFNTM9mfOVxsez2fQqz0rwdw7lWsLvvkzraONsp3Fuzb33VNcH5zdKxEKLebVSVbBZiTQ==} + engines: {node: ^14.18.0 || >=16.0.0} + dependencies: + debug: 4.3.4 + mdast-util-from-markdown: 1.3.1 + mdast-util-frontmatter: 1.0.1 + mdast-util-to-markdown: 1.5.0 + unist-util-visit: 4.1.2 + transitivePeerDependencies: + - supports-color + dev: true + patched: true + + /vite@5.2.6(@types/node@18.18.6)(sass@1.69.4): + resolution: {integrity: sha512-FPtnxFlSIKYjZ2eosBQamz4CbyrTizbZ3hnGJlh/wMtCrlp1Hah6AzBLjGI5I2urTfNnpovpHdrL6YRuBOPnCA==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + '@types/node': 18.18.6 + esbuild: 0.20.2 + postcss: 8.4.38 + rollup: 4.13.0 + sass: 1.69.4 + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /vitepress@1.0.1(@algolia/client-search@4.20.0)(@types/node@18.18.6)(postcss@8.4.33)(sass@1.69.4)(search-insights@2.9.0): + resolution: {integrity: sha512-eNr5pOBppYUUjEhv8S0S2t9Tv95LQ6mMeHj6ivaGwfHxpov70Vduuwl/QQMDRznKDSaP0WKV7a82Pb4JVOaqEw==} + hasBin: true + peerDependencies: + markdown-it-mathjax3: ^4 + postcss: ^8 + peerDependenciesMeta: + markdown-it-mathjax3: + optional: true + postcss: + optional: true + dependencies: + '@docsearch/css': 3.6.0 + '@docsearch/js': 3.6.0(@algolia/client-search@4.20.0)(search-insights@2.9.0) + '@shikijs/core': 1.2.0 + '@shikijs/transformers': 1.2.0 + '@types/markdown-it': 13.0.7 + '@vitejs/plugin-vue': 5.0.4(vite@5.2.6)(vue@3.4.21) + '@vue/devtools-api': 7.0.21(vue@3.4.21) + '@vueuse/core': 10.9.0(vue@3.4.21) + '@vueuse/integrations': 10.9.0(focus-trap@7.5.4)(vue@3.4.21) + focus-trap: 7.5.4 + mark.js: 8.11.1 + minisearch: 6.3.0 + postcss: 8.4.33 + shiki: 1.2.0 + vite: 5.2.6(@types/node@18.18.6)(sass@1.69.4) + vue: 3.4.21 + transitivePeerDependencies: + - '@algolia/client-search' + - '@types/node' + - '@types/react' + - '@vue/composition-api' + - async-validator + - axios + - change-case + - drauu + - fuse.js + - idb-keyval + - jwt-decode + - less + - lightningcss + - nprogress + - qrcode + - react + - react-dom + - sass + - search-insights + - sortablejs + - stylus + - sugarss + - terser + - typescript + - universal-cookie + dev: true + + /vue-demi@0.14.7(vue@3.4.21): + resolution: {integrity: sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^3.0.0-0 || ^2.6.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + dependencies: + vue: 3.4.21 + dev: true + + /vue@3.4.21: + resolution: {integrity: sha512-5hjyV/jLEIKD/jYl4cavMcnzKwjMKohureP8ejn3hhEjwhWIhWeuzL2kJAjzl/WyVsgPY56Sy4Z40C3lVshxXA==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@vue/compiler-dom': 3.4.21 + '@vue/compiler-sfc': 3.4.21 + '@vue/runtime-dom': 3.4.21 + '@vue/server-renderer': 3.4.21(vue@3.4.21) + '@vue/shared': 3.4.21 + dev: true + + /which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + + /wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + + /wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + dev: true + + /yaml@2.3.1: + resolution: {integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==} + engines: {node: '>= 14'} + dev: true + + /yaml@2.3.4: + resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} + engines: {node: '>= 14'} + dev: true + + /zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + dev: true diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..2e7af2b --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..118529a --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,7 @@ +import tailwindConfig from '@femm/tailwind-config' + +/** @type {import('tailwindcss').Config} */ +export default { + presets: [tailwindConfig], + content: ['./docs/**/*.{js,ts,md,vue}'], +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..3d38ac3 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "outDir": "dist", + "target": "esnext", + "module": "esnext", + "moduleResolution": "node", + "esModuleInterop": true, + "resolveJsonModule": true, + "allowJs": true, + "strict": true, + "jsx": "preserve" + }, + "include": ["env.d.ts", "**/.vitepress/**/*"] +} diff --git a/vercel.json b/vercel.json new file mode 100644 index 0000000..e686f30 --- /dev/null +++ b/vercel.json @@ -0,0 +1,7 @@ +{ + "git": { + "deploymentEnabled": { + "gh-pages": false + } + } +}