Ver Fonte

add blog

ruki há 5 meses atrás
pai
commit
233a7292bb
48 ficheiros alterados com 5796 adições e 4 exclusões
  1. 117 0
      BLOG_README.md
  2. 20 0
      docs/.vitepress/theme/Author.vue
  3. 105 0
      docs/.vitepress/theme/BlogHome.vue
  4. 97 0
      docs/.vitepress/theme/BlogList.vue
  5. 147 0
      docs/.vitepress/theme/BlogPagination.vue
  6. 147 0
      docs/.vitepress/theme/BlogPaginationZh.vue
  7. 19 0
      docs/.vitepress/theme/Date.vue
  8. 105 0
      docs/.vitepress/theme/ZhBlogHome.vue
  9. 159 0
      docs/.vitepress/theme/blog-data.js
  10. 1 1
      docs/.vitepress/theme/index.ts
  11. 45 0
      docs/.vitepress/theme/posts.data.ts
  12. 158 0
      docs/.vitepress/theme/zh-blog-data.js
  13. 45 0
      docs/.vitepress/theme/zh-posts.data.ts
  14. 145 0
      docs/BLOG_README.md
  15. 15 0
      docs/blog/index.md
  16. 5 0
      docs/config.ts
  17. 69 0
      docs/posts/building-cross-platform-apps.md
  18. 56 0
      docs/posts/new-feature-announcement.md
  19. 44 0
      docs/posts/post-10.md
  20. 59 0
      docs/posts/post-3.md
  21. 48 0
      docs/posts/post-4.md
  22. 44 0
      docs/posts/post-5.md
  23. 44 0
      docs/posts/post-6.md
  24. 44 0
      docs/posts/post-7.md
  25. 44 0
      docs/posts/post-8.md
  26. 44 0
      docs/posts/post-9.md
  27. 45 0
      docs/posts/xmake-3-0-release.md
  28. 15 0
      docs/zh/blog/index.md
  29. 5 0
      docs/zh/config.ts
  30. 69 0
      docs/zh/posts/cross-platform-development.md
  31. 44 0
      docs/zh/posts/post-10.md
  32. 44 0
      docs/zh/posts/post-11.md
  33. 59 0
      docs/zh/posts/post-3.md
  34. 48 0
      docs/zh/posts/post-4.md
  35. 44 0
      docs/zh/posts/post-5.md
  36. 44 0
      docs/zh/posts/post-6.md
  37. 44 0
      docs/zh/posts/post-7.md
  38. 44 0
      docs/zh/posts/post-8.md
  39. 44 0
      docs/zh/posts/post-9.md
  40. 45 0
      docs/zh/posts/xmake-3-0-release.md
  41. 2684 0
      package-lock.json
  42. 9 3
      package.json
  43. 66 0
      scripts/add-blog-nav.js
  44. 52 0
      scripts/add-simple-nav.js
  45. 119 0
      scripts/generate-blog-data.js
  46. 340 0
      scripts/generate-blog-posts.js
  47. 52 0
      scripts/remove-blog-nav.js
  48. 54 0
      scripts/replace-nav-marks.js

+ 117 - 0
BLOG_README.md

@@ -0,0 +1,117 @@
+# Xmake 博客系统
+
+这是一个基于 VitePress 的博客系统,支持自动从 markdown 文件生成博客列表。
+
+## 功能特性
+
+- ✅ 自动读取 `docs/posts` 和 `docs/zh/posts` 目录下的 markdown 文件
+- ✅ 支持 frontmatter 解析(标题、日期、作者、标签、摘要)
+- ✅ 分页显示(每页 10 篇文章)
+- ✅ 响应式设计
+- ✅ 支持中英文双语
+- ✅ 自动排序(按日期倒序)
+
+## 使用方法
+
+### 1. 添加新文章
+
+在 `docs/posts` 目录下创建新的 markdown 文件,格式如下:
+
+```markdown
+---
+title: "文章标题"
+date: "2024-01-15"
+author: "作者名"
+tags: ["标签1", "标签2"]
+excerpt: "文章摘要(可选)"
+---
+
+文章内容...
+```
+
+### 2. 生成博客数据
+
+运行以下命令生成博客数据:
+
+```bash
+npm run generate-blog
+```
+
+或者直接运行:
+
+```bash
+node scripts/generate-blog-data.js
+```
+
+### 3. 启动开发服务器
+
+```bash
+npm run docs:dev
+```
+
+这会自动生成博客数据并启动开发服务器。
+
+### 4. 构建生产版本
+
+```bash
+npm run docs:build
+```
+
+## 文件结构
+
+```
+docs/
+├── posts/                    # 英文博客文章
+│   ├── xmake-3-0-release.md
+│   ├── building-cross-platform-apps.md
+│   └── ...
+├── zh/posts/                 # 中文博客文章
+│   ├── xmake-3-0-release.md
+│   ├── cross-platform-development.md
+│   └── ...
+├── blog/
+│   └── index.md             # 英文博客首页
+├── zh/blog/
+│   └── index.md             # 中文博客首页
+└── .vitepress/
+    └── theme/
+        ├── blog-data.js      # 英文博客数据(自动生成)
+        └── zh-blog-data.js   # 中文博客数据(自动生成)
+
+scripts/
+└── generate-blog-data.js     # 博客数据生成脚本
+```
+
+## Frontmatter 字段说明
+
+| 字段 | 类型 | 必需 | 说明 |
+|------|------|------|------|
+| `title` | string | ✅ | 文章标题 |
+| `date` | string | ✅ | 发布日期(YYYY-MM-DD 格式) |
+| `author` | string | ❌ | 作者名称 |
+| `tags` | array | ❌ | 标签数组 |
+| `excerpt` | string | ❌ | 文章摘要,如果不提供会自动生成 |
+
+## 注意事项
+
+1. **自动生成**: 每次运行 `npm run docs:dev` 或 `npm run docs:build` 时,系统会自动重新生成博客数据
+2. **文件命名**: 建议使用有意义的文件名,因为 URL 会基于文件名生成
+3. **日期格式**: 日期必须使用 `YYYY-MM-DD` 格式
+4. **编码**: 确保 markdown 文件使用 UTF-8 编码
+
+## 故障排除
+
+如果遇到问题:
+
+1. 确保所有 markdown 文件都有正确的 frontmatter
+2. 检查文件编码是否为 UTF-8
+3. 确保 `gray-matter` 包已正确安装
+4. 查看控制台错误信息
+
+## 自定义
+
+可以通过修改以下文件来自定义博客系统:
+
+- `scripts/generate-blog-data.js`: 修改数据生成逻辑
+- `docs/blog/index.md` 和 `docs/zh/blog/index.md`: 修改博客页面布局
+- CSS 样式可以通过 VitePress 主题配置进行自定义 

+ 20 - 0
docs/.vitepress/theme/Author.vue

@@ -0,0 +1,20 @@
+<script setup lang="ts">
+interface Props {
+  author?: string
+  twitter?: string
+}
+
+defineProps<Props>()
+</script>
+
+<template>
+  <div v-if="author" class="flex items-center space-x-2 text-sm text-gray-500 dark:text-gray-400">
+    <span>by</span>
+    <span v-if="twitter" class="font-medium">
+      <a :href="`https://twitter.com/${twitter}`" target="_blank" rel="noopener noreferrer" class="hover:text-gray-700 dark:hover:text-gray-200">
+        {{ author }}
+      </a>
+    </span>
+    <span v-else class="font-medium">{{ author }}</span>
+  </div>
+</template> 

+ 105 - 0
docs/.vitepress/theme/BlogHome.vue

@@ -0,0 +1,105 @@
+<script setup lang="ts">
+import Date from './Date.vue'
+import Author from './Author.vue'
+import { data as posts } from './posts.data.js'
+import { useData } from 'vitepress'
+import { computed, ref } from 'vue'
+
+const { frontmatter } = useData()
+
+// 分页配置
+const postsPerPage = 10
+const currentPage = ref(1)
+
+// 计算分页数据
+const paginatedPosts = computed(() => {
+  const start = (currentPage.value - 1) * postsPerPage
+  const end = start + postsPerPage
+  return posts.slice(start, end)
+})
+
+const totalPages = computed(() => Math.ceil(posts.length / postsPerPage))
+
+// 分页导航
+const goToPage = (page: number) => {
+  if (page >= 1 && page <= totalPages.value) {
+    currentPage.value = page
+    window.scrollTo({ top: 0, behavior: 'smooth' })
+  }
+}
+
+const goToPrevPage = () => goToPage(currentPage.value - 1)
+const goToNextPage = () => goToPage(currentPage.value + 1)
+</script>
+
+<template>
+  <div class="divide-y divide-gray-200 dark:divide-slate-200/5">
+    <div class="pt-6 pb-8 space-y-2 md:space-y-5">
+      <h1
+        class="text-3xl leading-9 font-extrabold text-gray-900 dark:text-white tracking-tight sm:text-4xl sm:leading-10 md:text-6xl md:leading-14"
+      >
+        {{ frontmatter.title }}
+      </h1>
+      <p class="text-lg leading-7 text-gray-500 dark:text-gray-300">
+        {{ frontmatter.subtext }}
+      </p>
+    </div>
+    
+    <ul class="divide-y divide-gray-200 dark:divide-slate-200/5">
+      <li class="py-12" v-for="{ title, url, date, excerpt, author } of paginatedPosts">
+        <article
+          class="space-y-2 xl:grid xl:grid-cols-4 xl:space-y-0 xl:items-baseline"
+        >
+          <Date :date="date" />
+          <div class="space-y-5 xl:col-span-3">
+            <div class="space-y-6">
+              <h2 class="text-2xl leading-8 font-bold tracking-tight">
+                <a class="text-gray-900 dark:text-white hover:text-gray-600 dark:hover:text-gray-300" :href="url">{{
+                  title
+                }}</a>
+              </h2>
+              <Author :author="author" />
+              <div
+                v-if="excerpt"
+                class="prose dark:prose-invert max-w-none text-gray-500 dark:text-gray-300"
+                v-html="excerpt"
+              ></div>
+            </div>
+            <div class="text-base leading-6 font-medium">
+              <a class="link hover:text-gray-600 dark:hover:text-gray-300" aria-label="read more" :href="url">Read more →</a>
+            </div>
+          </div>
+        </article>
+      </li>
+    </ul>
+
+    <!-- 分页导航 -->
+    <div v-if="totalPages > 1" class="flex justify-center items-center space-x-4 py-8">
+      <button
+        @click="goToPrevPage"
+        :disabled="currentPage === 1"
+        class="px-4 py-2 text-sm font-medium text-gray-500 bg-white border border-gray-300 rounded-md hover:bg-gray-50 disabled:opacity-50 disabled:cursor-not-allowed dark:bg-gray-800 dark:border-gray-600 dark:text-gray-300 dark:hover:bg-gray-700"
+      >
+        Previous
+      </button>
+      
+      <span class="text-sm text-gray-500 dark:text-gray-400">
+        Page {{ currentPage }} of {{ totalPages }}
+      </span>
+      
+      <button
+        @click="goToNextPage"
+        :disabled="currentPage === totalPages"
+        class="px-4 py-2 text-sm font-medium text-gray-500 bg-white border border-gray-300 rounded-md hover:bg-gray-50 disabled:opacity-50 disabled:cursor-not-allowed dark:bg-gray-800 dark:border-gray-600 dark:text-gray-300 dark:hover:bg-gray-700"
+      >
+        Next
+      </button>
+    </div>
+  </div>
+</template>
+
+<style scoped>
+.link {
+  @apply text-blue-600 dark:text-blue-400;
+}
+</style> 

+ 97 - 0
docs/.vitepress/theme/BlogList.vue

@@ -0,0 +1,97 @@
+<script setup>
+import { computed, ref } from 'vue'
+
+const props = defineProps({
+  posts: {
+    type: Array,
+    required: true
+  }
+})
+
+// 分页配置
+const postsPerPage = 10
+const currentPage = ref(1)
+
+// 计算分页数据
+const paginatedPosts = computed(() => {
+  const start = (currentPage.value - 1) * postsPerPage
+  const end = start + postsPerPage
+  return props.posts.slice(start, end)
+})
+
+const totalPages = computed(() => Math.ceil(props.posts.length / postsPerPage))
+
+// 分页导航
+const goToPage = (page) => {
+  if (page >= 1 && page <= totalPages.value) {
+    currentPage.value = page
+    window.scrollTo({ top: 0, behavior: 'smooth' })
+  }
+}
+
+const goToPrevPage = () => goToPage(currentPage.value - 1)
+const goToNextPage = () => goToPage(currentPage.value + 1)
+</script>
+
+<template>
+  <div class="divide-y divide-gray-200 dark:divide-slate-200/5">
+    <div v-if="posts.length === 0" class="py-12 text-center text-gray-500">
+      No posts found.
+    </div>
+    
+    <ul v-else class="divide-y divide-gray-200 dark:divide-slate-200/5">
+      <li class="py-12" v-for="{ title, url, date, excerpt, author } of paginatedPosts">
+        <article class="space-y-2 xl:grid xl:grid-cols-4 xl:space-y-0 xl:items-baseline">
+          <dl class="text-base leading-6 font-medium leading-6 text-gray-500 dark:text-gray-300">
+            <dt class="sr-only">Published on</dt>
+            <dd class="text-base leading-6 font-medium leading-6 text-gray-500 dark:text-gray-300">
+              <time :datetime="new Date(date.time).toISOString()">{{ date.string }}</time>
+            </dd>
+          </dl>
+          <div class="space-y-5 xl:col-span-3">
+            <div class="space-y-6">
+              <h2 class="text-2xl leading-8 font-bold tracking-tight">
+                <a class="text-gray-900 dark:text-white hover:text-gray-600 dark:hover:text-gray-300" :href="url">{{ title }}</a>
+              </h2>
+              <div v-if="author" class="flex items-center space-x-2 text-sm text-gray-500 dark:text-gray-400">
+                <span>by</span>
+                <span class="font-medium">{{ author }}</span>
+              </div>
+              <div
+                v-if="excerpt"
+                class="prose dark:prose-invert max-w-none text-gray-500 dark:text-gray-300"
+                v-html="excerpt"
+              ></div>
+            </div>
+            <div class="text-base leading-6 font-medium">
+              <a class="text-blue-600 dark:text-blue-400 hover:text-gray-600 dark:hover:text-gray-300" aria-label="read more" :href="url">Read more →</a>
+            </div>
+          </div>
+        </article>
+      </li>
+    </ul>
+
+    <!-- 分页导航 -->
+    <div v-if="totalPages > 1" class="flex justify-center items-center space-x-4 py-8">
+      <button
+        @click="goToPrevPage"
+        :disabled="currentPage === 1"
+        class="px-4 py-2 text-sm font-medium text-gray-500 bg-white border border-gray-300 rounded-md hover:bg-gray-50 disabled:opacity-50 disabled:cursor-not-allowed dark:bg-gray-800 dark:border-gray-600 dark:text-gray-300 dark:hover:bg-gray-700"
+      >
+        Previous
+      </button>
+      
+      <span class="text-sm text-gray-500 dark:text-gray-400">
+        Page {{ currentPage }} of {{ totalPages }}
+      </span>
+      
+      <button
+        @click="goToNextPage"
+        :disabled="currentPage === totalPages"
+        class="px-4 py-2 text-sm font-medium text-gray-500 bg-white border border-gray-300 rounded-md hover:bg-gray-50 disabled:opacity-50 disabled:cursor-not-allowed dark:bg-gray-800 dark:border-gray-600 dark:text-gray-300 dark:hover:bg-gray-700"
+      >
+        Next
+      </button>
+    </div>
+  </div>
+</template> 

+ 147 - 0
docs/.vitepress/theme/BlogPagination.vue

@@ -0,0 +1,147 @@
+<script setup>
+import { computed, ref } from 'vue'
+
+const props = defineProps({
+  posts: {
+    type: Array,
+    required: true
+  },
+  postsPerPage: {
+    type: Number,
+    default: 10
+  }
+})
+
+const currentPage = ref(1)
+
+const paginatedPosts = computed(() => {
+  const start = (currentPage.value - 1) * props.postsPerPage
+  const end = start + props.postsPerPage
+  return props.posts.slice(start, end)
+})
+
+const totalPages = computed(() => Math.ceil(props.posts.length / props.postsPerPage))
+
+const goToPage = (page) => {
+  if (page >= 1 && page <= totalPages.value) {
+    currentPage.value = page
+    window.scrollTo({ top: 0, behavior: 'smooth' })
+  }
+}
+
+const goToPrevPage = () => goToPage(currentPage.value - 1)
+const goToNextPage = () => goToPage(currentPage.value + 1)
+</script>
+
+<template>
+  <div>
+    <div v-if="posts.length === 0" class="py-12 text-center text-gray-500">
+      No posts found.
+    </div>
+    
+    <div v-else class="divide-y divide-gray-200 dark:divide-slate-200/5">
+      <ul class="divide-y divide-gray-200 dark:divide-slate-200/5">
+        <li class="py-12" v-for="{ title, url, date, excerpt, author } of paginatedPosts">
+          <article class="space-y-2 xl:grid xl:grid-cols-4 xl:space-y-0 xl:items-baseline">
+            <div class="space-y-5 xl:col-span-3">
+              <div class="space-y-6">
+                <h2 class="text-2xl leading-8 font-bold tracking-tight">
+                  <a class="text-gray-900 dark:text-white hover:text-gray-600 dark:hover:text-gray-300" :href="url">{{ title }}</a>
+                </h2>
+                <div class="meta-row flex justify-end items-center gap-4 text-sm text-gray-500 dark:text-gray-400 mb-2">
+                  <span v-if="author" class="author">by <span class="font-medium">{{ author }}</span></span>
+                  <span class="date"><time :datetime="new Date(date.time).toISOString()">{{ date.string }}</time></span>
+                </div>
+                <div
+                  v-if="excerpt"
+                  class="prose dark:prose-invert max-w-none text-gray-500 dark:text-gray-300"
+                  v-html="excerpt"
+                ></div>
+              </div>
+              <div class="text-base leading-6 font-medium">
+                <a class="text-blue-600 dark:text-blue-400 hover:text-gray-600 dark:hover:text-gray-300" aria-label="read more" :href="url">Read more →</a>
+              </div>
+            </div>
+          </article>
+        </li>
+      </ul>
+
+      <div v-if="totalPages > 1" class="pagination-nav">
+        <button
+          @click="goToPrevPage"
+          :disabled="currentPage === 1"
+          class="pagination-btn"
+        >
+          Previous
+        </button>
+        <span class="pagination-info">
+          Page {{ currentPage }} of {{ totalPages }}
+        </span>
+        <button
+          @click="goToNextPage"
+          :disabled="currentPage === totalPages"
+          class="pagination-btn"
+        >
+          Next
+        </button>
+      </div>
+    </div>
+  </div>
+</template> 
+
+<style scoped>
+.pagination-nav {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  gap: 2.5rem;
+  margin-top: 2.5rem;
+}
+
+.pagination-btn {
+  padding: 0.5rem 1.5rem;
+  font-size: 1rem;
+  font-weight: 500;
+  color: var(--vp-c-brand);
+  background: var(--vp-c-bg);
+  border: 1px solid var(--vp-c-divider);
+  border-radius: 6px;
+  cursor: pointer;
+  transition: background 0.2s, color 0.2s;
+}
+
+.pagination-btn:disabled {
+  color: var(--vp-c-text-3);
+  background: var(--vp-c-bg-soft);
+  cursor: not-allowed;
+  opacity: 0.6;
+}
+
+.pagination-info {
+  font-size: 1rem;
+  color: var(--vp-c-text-2);
+  min-width: 140px;
+  text-align: center;
+}
+.xl\\:col-span-4.flex.items-center.justify-between {
+  margin-bottom: 0.5rem;
+}
+.xl\\:col-span-4 .ml-auto {
+  margin-left: auto;
+  text-align: right;
+  min-width: 120px;
+}
+.meta-row {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  margin-bottom: 0.5rem;
+}
+.meta-row .author {
+  margin-right: 1.5rem;
+}
+.meta-row .date {
+  min-width: 100px;
+  text-align: right;
+}
+</style> 

+ 147 - 0
docs/.vitepress/theme/BlogPaginationZh.vue

@@ -0,0 +1,147 @@
+<script setup>
+import { computed, ref } from 'vue'
+
+const props = defineProps({
+  posts: {
+    type: Array,
+    required: true
+  },
+  postsPerPage: {
+    type: Number,
+    default: 10
+  }
+})
+
+const currentPage = ref(1)
+
+const paginatedPosts = computed(() => {
+  const start = (currentPage.value - 1) * props.postsPerPage
+  const end = start + props.postsPerPage
+  return props.posts.slice(start, end)
+})
+
+const totalPages = computed(() => Math.ceil(props.posts.length / props.postsPerPage))
+
+const goToPage = (page) => {
+  if (page >= 1 && page <= totalPages.value) {
+    currentPage.value = page
+    window.scrollTo({ top: 0, behavior: 'smooth' })
+  }
+}
+
+const goToPrevPage = () => goToPage(currentPage.value - 1)
+const goToNextPage = () => goToPage(currentPage.value + 1)
+</script>
+
+<template>
+  <div>
+    <div v-if="posts.length === 0" class="py-12 text-center text-gray-500">
+      没有找到文章。
+    </div>
+    
+    <div v-else class="divide-y divide-gray-200 dark:divide-slate-200/5">
+      <ul class="divide-y divide-gray-200 dark:divide-slate-200/5">
+        <li class="py-12" v-for="{ title, url, date, excerpt, author } of paginatedPosts">
+          <article class="space-y-2 xl:grid xl:grid-cols-4 xl:space-y-0 xl:items-baseline">
+            <div class="space-y-5 xl:col-span-3">
+              <div class="space-y-6">
+                <h2 class="text-2xl leading-8 font-bold tracking-tight">
+                  <a class="text-gray-900 dark:text-white hover:text-gray-600 dark:hover:text-gray-300" :href="url">{{ title }}</a>
+                </h2>
+                <div class="meta-row flex justify-end items-center gap-4 text-sm text-gray-500 dark:text-gray-400 mb-2">
+                  <span v-if="author" class="author">作者:<span class="font-medium">{{ author }}</span></span>
+                  <span class="date"><time :datetime="new Date(date.time).toISOString()">{{ date.string }}</time></span>
+                </div>
+                <div
+                  v-if="excerpt"
+                  class="prose dark:prose-invert max-w-none text-gray-500 dark:text-gray-300"
+                  v-html="excerpt"
+                ></div>
+              </div>
+              <div class="text-base leading-6 font-medium">
+                <a class="text-blue-600 dark:text-blue-400 hover:text-gray-600 dark:hover:text-gray-300" aria-label="read more" :href="url">阅读更多 →</a>
+              </div>
+            </div>
+          </article>
+        </li>
+      </ul>
+
+      <div v-if="totalPages > 1" class="pagination-nav">
+        <button
+          @click="goToPrevPage"
+          :disabled="currentPage === 1"
+          class="pagination-btn"
+        >
+          上一页
+        </button>
+        <span class="pagination-info">
+          第 {{ currentPage }} 页,共 {{ totalPages }} 页
+        </span>
+        <button
+          @click="goToNextPage"
+          :disabled="currentPage === totalPages"
+          class="pagination-btn"
+        >
+          下一页
+        </button>
+      </div>
+    </div>
+  </div>
+</template> 
+
+<style scoped>
+.pagination-nav {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  gap: 2.5rem;
+  margin-top: 2.5rem;
+}
+
+.pagination-btn {
+  padding: 0.5rem 1.5rem;
+  font-size: 1rem;
+  font-weight: 500;
+  color: var(--vp-c-brand);
+  background: var(--vp-c-bg);
+  border: 1px solid var(--vp-c-divider);
+  border-radius: 6px;
+  cursor: pointer;
+  transition: background 0.2s, color 0.2s;
+}
+
+.pagination-btn:disabled {
+  color: var(--vp-c-text-3);
+  background: var(--vp-c-bg-soft);
+  cursor: not-allowed;
+  opacity: 0.6;
+}
+
+.pagination-info {
+  font-size: 1rem;
+  color: var(--vp-c-text-2);
+  min-width: 140px;
+  text-align: center;
+}
+.xl\\:col-span-4.flex.items-center.justify-between {
+  margin-bottom: 0.5rem;
+}
+.xl\\:col-span-4 .ml-auto {
+  margin-left: auto;
+  text-align: right;
+  min-width: 120px;
+}
+.meta-row {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  margin-bottom: 0.5rem;
+}
+.meta-row .author {
+  margin-right: 1.5rem;
+}
+.meta-row .date {
+  min-width: 100px;
+  text-align: right;
+}
+</style> 

+ 19 - 0
docs/.vitepress/theme/Date.vue

@@ -0,0 +1,19 @@
+<script setup lang="ts">
+interface Props {
+  date: {
+    time: number
+    string: string
+  }
+}
+
+defineProps<Props>()
+</script>
+
+<template>
+  <dl class="text-base leading-6 font-medium leading-6 text-gray-500 dark:text-gray-300">
+    <dt class="sr-only">Published on</dt>
+    <dd class="text-base leading-6 font-medium leading-6 text-gray-500 dark:text-gray-300">
+      <time :datetime="new Date(date.time).toISOString()">{{ date.string }}</time>
+    </dd>
+  </dl>
+</template> 

+ 105 - 0
docs/.vitepress/theme/ZhBlogHome.vue

@@ -0,0 +1,105 @@
+<script setup lang="ts">
+import Date from './Date.vue'
+import Author from './Author.vue'
+import { data as posts } from './zh-posts.data.js'
+import { useData } from 'vitepress'
+import { computed, ref } from 'vue'
+
+const { frontmatter } = useData()
+
+// 分页配置
+const postsPerPage = 10
+const currentPage = ref(1)
+
+// 计算分页数据
+const paginatedPosts = computed(() => {
+  const start = (currentPage.value - 1) * postsPerPage
+  const end = start + postsPerPage
+  return posts.slice(start, end)
+})
+
+const totalPages = computed(() => Math.ceil(posts.length / postsPerPage))
+
+// 分页导航
+const goToPage = (page: number) => {
+  if (page >= 1 && page <= totalPages.value) {
+    currentPage.value = page
+    window.scrollTo({ top: 0, behavior: 'smooth' })
+  }
+}
+
+const goToPrevPage = () => goToPage(currentPage.value - 1)
+const goToNextPage = () => goToPage(currentPage.value + 1)
+</script>
+
+<template>
+  <div class="divide-y divide-gray-200 dark:divide-slate-200/5">
+    <div class="pt-6 pb-8 space-y-2 md:space-y-5">
+      <h1
+        class="text-3xl leading-9 font-extrabold text-gray-900 dark:text-white tracking-tight sm:text-4xl sm:leading-10 md:text-6xl md:leading-14"
+      >
+        {{ frontmatter.title }}
+      </h1>
+      <p class="text-lg leading-7 text-gray-500 dark:text-gray-300">
+        {{ frontmatter.subtext }}
+      </p>
+    </div>
+    
+    <ul class="divide-y divide-gray-200 dark:divide-slate-200/5">
+      <li class="py-12" v-for="{ title, url, date, excerpt, author } of paginatedPosts">
+        <article
+          class="space-y-2 xl:grid xl:grid-cols-4 xl:space-y-0 xl:items-baseline"
+        >
+          <Date :date="date" />
+          <div class="space-y-5 xl:col-span-3">
+            <div class="space-y-6">
+              <h2 class="text-2xl leading-8 font-bold tracking-tight">
+                <a class="text-gray-900 dark:text-white hover:text-gray-600 dark:hover:text-gray-300" :href="url">{{
+                  title
+                }}</a>
+              </h2>
+              <Author :author="author" />
+              <div
+                v-if="excerpt"
+                class="prose dark:prose-invert max-w-none text-gray-500 dark:text-gray-300"
+                v-html="excerpt"
+              ></div>
+            </div>
+            <div class="text-base leading-6 font-medium">
+              <a class="link hover:text-gray-600 dark:hover:text-gray-300" aria-label="read more" :href="url">阅读更多 →</a>
+            </div>
+          </div>
+        </article>
+      </li>
+    </ul>
+
+    <!-- 分页导航 -->
+    <div v-if="totalPages > 1" class="flex justify-center items-center space-x-4 py-8">
+      <button
+        @click="goToPrevPage"
+        :disabled="currentPage === 1"
+        class="px-4 py-2 text-sm font-medium text-gray-500 bg-white border border-gray-300 rounded-md hover:bg-gray-50 disabled:opacity-50 disabled:cursor-not-allowed dark:bg-gray-800 dark:border-gray-600 dark:text-gray-300 dark:hover:bg-gray-700"
+      >
+        上一页
+      </button>
+      
+      <span class="text-sm text-gray-500 dark:text-gray-400">
+        第 {{ currentPage }} 页,共 {{ totalPages }} 页
+      </span>
+      
+      <button
+        @click="goToNextPage"
+        :disabled="currentPage === totalPages"
+        class="px-4 py-2 text-sm font-medium text-gray-500 bg-white border border-gray-300 rounded-md hover:bg-gray-50 disabled:opacity-50 disabled:cursor-not-allowed dark:bg-gray-800 dark:border-gray-600 dark:text-gray-300 dark:hover:bg-gray-700"
+      >
+        下一页
+      </button>
+    </div>
+  </div>
+</template>
+
+<style scoped>
+.link {
+  @apply text-blue-600 dark:text-blue-400;
+}
+</style> 

+ 159 - 0
docs/.vitepress/theme/blog-data.js

@@ -0,0 +1,159 @@
+export const posts = [
+  {
+    "title": "New Feature: Enhanced Package Management",
+    "url": "/posts/new-feature-announcement",
+    "date": {
+      "time": 1705752000000,
+      "string": "January 20, 2024"
+    },
+    "author": "waruqi",
+    "tags": [
+      "feature",
+      "package-management",
+      "xmake"
+    ],
+    "excerpt": "<p>We're excited to announce a major enhancement to Xmake's package management system that will make dependency handling even more powerful and user-friendly.</p>\n"
+  },
+  {
+    "title": "Announcing Xmake 3.0",
+    "url": "/posts/xmake-3-0-release",
+    "date": {
+      "time": 1705320000000,
+      "string": "January 15, 2024"
+    },
+    "author": "waruqi",
+    "tags": [
+      "release",
+      "xmake",
+      "build-system"
+    ],
+    "excerpt": "<p>We are excited to announce the release of Xmake 3.0! This major release brings significant improvements in performance, usability, and feature completeness.</p>\n<p>Xmake 3.0 introduces a completely rewritten build engine that provides up to 3x faster build times compared to previous versions. The new engine features:</p>\n<ul>\n<li>Optimized dependency resolution</li>\n<li>Improved parallel compilation</li>\n<li>Better caching mechanisms</li>\n<li>Reduced memory usage</li>\n</ul>\n"
+  },
+  {
+    "title": "Building Cross-Platform Applications with Xmake",
+    "url": "/posts/building-cross-platform-apps",
+    "date": {
+      "time": 1704888000000,
+      "string": "January 10, 2024"
+    },
+    "author": "waruqi",
+    "tags": [
+      "cross-platform",
+      "tutorial",
+      "cpp"
+    ],
+    "excerpt": "<p>Building applications that work across multiple platforms can be challenging, but Xmake makes it much easier. In this post, we'll explore how to use Xmake to build cross-platform applications.</p>\n<p>In today's diverse computing landscape, your users expect your applications to work on their preferred platform. Whether it's Windows, macOS, or Linux, Xmake provides the tools you need to build for all of them from a single codebase.</p>\n<p>Here's a simple example of how to configure Xmake for cross-platform builds:</p>\n"
+  },
+  {
+    "title": "Getting Started with Xmake",
+    "url": "/posts/post-3",
+    "date": {
+      "time": 1704456000000,
+      "string": "January 5, 2024"
+    },
+    "author": "waruqi",
+    "tags": [
+      "tutorial",
+      "getting-started"
+    ],
+    "excerpt": "<p>Xmake is a modern build system that makes C/C++ development easier and more efficient. In this guide, we'll walk through the basics of setting up and using Xmake.</p>\n<p>Installing Xmake is straightforward. You can use one of the following methods:</p>\n<p>Let's create a simple C++ project:</p>\n"
+  },
+  {
+    "title": "Advanced Package Management",
+    "url": "/posts/post-4",
+    "date": {
+      "time": 1704283200000,
+      "string": "January 3, 2024"
+    },
+    "author": "waruqi",
+    "tags": [
+      "package-management",
+      "advanced"
+    ],
+    "excerpt": "<p>Xmake provides a powerful package management system that simplifies dependency handling in C/C++ projects.</p>\n<p>Adding packages to your project is simple:</p>\n<pre><code class=\"language-lua\">target(&quot;myapp&quot;)\n    set_kind(&quot;binary&quot;)\n    add_files(&quot;src/*.cpp&quot;)\n    add_packages(&quot;fmt&quot;, &quot;spdlog&quot;, &quot;nlohmann_json&quot;)\n</code></pre>\n"
+  },
+  {
+    "title": "IDE Integration Guide 10",
+    "url": "/posts/post-10",
+    "date": {
+      "time": 1704110400000,
+      "string": "January 1, 2024"
+    },
+    "author": "waruqi",
+    "tags": [
+      "ide",
+      "integration"
+    ],
+    "excerpt": "<p>Xmake provides excellent integration with popular IDEs and editors, making development more efficient.</p>\n<p>Install the Xmake extension for VS Code:</p>\n<ol>\n<li>Open VS Code</li>\n<li>Go to Extensions (Ctrl+Shift+X)</li>\n<li>Search for &quot;Xmake&quot;</li>\n<li>Install the extension</li>\n</ol>\n"
+  },
+  {
+    "title": "IDE Integration Guide",
+    "url": "/posts/post-5",
+    "date": {
+      "time": 1704110400000,
+      "string": "January 1, 2024"
+    },
+    "author": "waruqi",
+    "tags": [
+      "ide",
+      "integration"
+    ],
+    "excerpt": "<p>Xmake provides excellent integration with popular IDEs and editors, making development more efficient.</p>\n<p>Install the Xmake extension for VS Code:</p>\n<ol>\n<li>Open VS Code</li>\n<li>Go to Extensions (Ctrl+Shift+X)</li>\n<li>Search for &quot;Xmake&quot;</li>\n<li>Install the extension</li>\n</ol>\n"
+  },
+  {
+    "title": "IDE Integration Guide",
+    "url": "/posts/post-6",
+    "date": {
+      "time": 1704110400000,
+      "string": "January 1, 2024"
+    },
+    "author": "waruqi",
+    "tags": [
+      "ide",
+      "integration"
+    ],
+    "excerpt": "<p>Xmake provides excellent integration with popular IDEs and editors, making development more efficient.</p>\n<p>Install the Xmake extension for VS Code:</p>\n<ol>\n<li>Open VS Code</li>\n<li>Go to Extensions (Ctrl+Shift+X)</li>\n<li>Search for &quot;Xmake&quot;</li>\n<li>Install the extension</li>\n</ol>\n"
+  },
+  {
+    "title": "IDE Integration Guide",
+    "url": "/posts/post-7",
+    "date": {
+      "time": 1704110400000,
+      "string": "January 1, 2024"
+    },
+    "author": "waruqi",
+    "tags": [
+      "ide",
+      "integration"
+    ],
+    "excerpt": "<p>Xmake provides excellent integration with popular IDEs and editors, making development more efficient.</p>\n<p>Install the Xmake extension for VS Code:</p>\n<ol>\n<li>Open VS Code</li>\n<li>Go to Extensions (Ctrl+Shift+X)</li>\n<li>Search for &quot;Xmake&quot;</li>\n<li>Install the extension</li>\n</ol>\n"
+  },
+  {
+    "title": "IDE Integration Guide 8",
+    "url": "/posts/post-8",
+    "date": {
+      "time": 1704110400000,
+      "string": "January 1, 2024"
+    },
+    "author": "waruqi",
+    "tags": [
+      "ide",
+      "integration"
+    ],
+    "excerpt": "<p>Xmake provides excellent integration with popular IDEs and editors, making development more efficient.</p>\n<p>Install the Xmake extension for VS Code:</p>\n<ol>\n<li>Open VS Code</li>\n<li>Go to Extensions (Ctrl+Shift+X)</li>\n<li>Search for &quot;Xmake&quot;</li>\n<li>Install the extension</li>\n</ol>\n"
+  },
+  {
+    "title": "IDE Integration Guide 9",
+    "url": "/posts/post-9",
+    "date": {
+      "time": 1704110400000,
+      "string": "January 1, 2024"
+    },
+    "author": "waruqi",
+    "tags": [
+      "ide",
+      "integration"
+    ],
+    "excerpt": "<p>Xmake provides excellent integration with popular IDEs and editors, making development more efficient.</p>\n<p>Install the Xmake extension for VS Code:</p>\n<ol>\n<li>Open VS Code</li>\n<li>Go to Extensions (Ctrl+Shift+X)</li>\n<li>Search for &quot;Xmake&quot;</li>\n<li>Install the extension</li>\n</ol>\n"
+  }
+]

+ 1 - 1
docs/.vitepress/theme/index.ts

@@ -29,4 +29,4 @@ export default {
       }
     }
   }
-} satisfies Theme
+}

+ 45 - 0
docs/.vitepress/theme/posts.data.ts

@@ -0,0 +1,45 @@
+import { createContentLoader } from 'vitepress'
+
+interface Post {
+  title: string
+  url: string
+  date: {
+    time: number
+    string: string
+  }
+  excerpt: string | undefined
+  author?: string
+  tags?: string[]
+}
+
+declare const data: Post[]
+export { data }
+
+export default createContentLoader('../../posts/*.md', {
+  excerpt: true,
+  transform(raw): Post[] {
+    return raw
+      .map(({ url, frontmatter, excerpt }) => ({
+        title: frontmatter.title,
+        url,
+        excerpt,
+        author: frontmatter.author,
+        tags: frontmatter.tags,
+        date: formatDate(frontmatter.date)
+      }))
+      .sort((a, b) => b.date.time - a.date.time)
+  }
+})
+
+function formatDate(raw: string): Post['date'] {
+  const date = new Date(raw)
+  date.setUTCHours(12)
+  return {
+    time: +date,
+    string: date.toLocaleDateString('en-US', {
+      year: 'numeric',
+      month: 'long',
+      day: 'numeric'
+    })
+  }
+} 

+ 158 - 0
docs/.vitepress/theme/zh-blog-data.js

@@ -0,0 +1,158 @@
+export const posts = [
+  {
+    "title": "Xmake 3.0 正式发布",
+    "url": "/zh/posts/xmake-3-0-release",
+    "date": {
+      "time": 1705320000000,
+      "string": "January 15, 2024"
+    },
+    "author": "waruqi",
+    "tags": [
+      "发布",
+      "xmake",
+      "构建系统"
+    ],
+    "excerpt": "<p>我们很高兴地宣布 Xmake 3.0 正式发布!这个重大版本在性能、易用性和功能完整性方面都带来了显著改进。</p>\n<p>Xmake 3.0 引入了完全重写的构建引擎,相比之前的版本提供了高达 3 倍的构建速度提升。新引擎具有以下特性:</p>\n<ul>\n<li>优化的依赖解析</li>\n<li>改进的并行编译</li>\n<li>更好的缓存机制</li>\n<li>减少内存使用</li>\n</ul>\n"
+  },
+  {
+    "title": "使用 Xmake 构建跨平台应用",
+    "url": "/zh/posts/cross-platform-development",
+    "date": {
+      "time": 1704888000000,
+      "string": "January 10, 2024"
+    },
+    "author": "waruqi",
+    "tags": [
+      "跨平台",
+      "教程",
+      "cpp"
+    ],
+    "excerpt": "<p>构建能在多个平台上运行的应用程序可能具有挑战性,但 Xmake 让这一切变得简单得多。在本文中,我们将探索如何使用 Xmake 构建跨平台应用程序。</p>\n<p>在当今多样化的计算环境中,用户期望您的应用程序能在他们偏好的平台上运行。无论是 Windows、macOS 还是 Linux,Xmake 都提供了从单一代码库为所有平台构建应用所需的工具。</p>\n<p>以下是如何配置 Xmake 进行跨平台构建的简单示例:</p>\n"
+  },
+  {
+    "title": "Xmake 入门指南",
+    "url": "/zh/posts/post-3",
+    "date": {
+      "time": 1704456000000,
+      "string": "January 5, 2024"
+    },
+    "author": "waruqi",
+    "tags": [
+      "教程",
+      "入门"
+    ],
+    "excerpt": "<p>Xmake 是一个现代化的构建系统,让 C/C++ 开发变得更加简单和高效。在本指南中,我们将介绍 Xmake 的基本设置和使用方法。</p>\n<p>安装 Xmake 非常简单。您可以使用以下方法之一:</p>\n<p>让我们创建一个简单的 C++ 项目:</p>\n"
+  },
+  {
+    "title": "高级包管理",
+    "url": "/zh/posts/post-4",
+    "date": {
+      "time": 1704283200000,
+      "string": "January 3, 2024"
+    },
+    "author": "waruqi",
+    "tags": [
+      "包管理",
+      "高级"
+    ],
+    "excerpt": "<p>Xmake 提供了一个强大的包管理系统,简化了 C/C++ 项目中的依赖处理。</p>\n<p>向您的项目添加包很简单:</p>\n<pre><code class=\"language-lua\">target(&quot;myapp&quot;)\n    set_kind(&quot;binary&quot;)\n    add_files(&quot;src/*.cpp&quot;)\n    add_packages(&quot;fmt&quot;, &quot;spdlog&quot;, &quot;nlohmann_json&quot;)\n</code></pre>\n"
+  },
+  {
+    "title": "IDE 集成指南",
+    "url": "/zh/posts/post-10",
+    "date": {
+      "time": 1704110400000,
+      "string": "January 1, 2024"
+    },
+    "author": "waruqi",
+    "tags": [
+      "ide",
+      "集成"
+    ],
+    "excerpt": "<p>Xmake 为流行的 IDE 和编辑器提供了出色的集成,使开发更加高效。</p>\n<p>为 VS Code 安装 Xmake 扩展:</p>\n<ol>\n<li>打开 VS Code</li>\n<li>转到扩展 (Ctrl+Shift+X)</li>\n<li>搜索 &quot;Xmake&quot;</li>\n<li>安装扩展</li>\n</ol>\n"
+  },
+  {
+    "title": "IDE 集成指南",
+    "url": "/zh/posts/post-11",
+    "date": {
+      "time": 1704110400000,
+      "string": "January 1, 2024"
+    },
+    "author": "waruqi",
+    "tags": [
+      "ide",
+      "集成"
+    ],
+    "excerpt": "<p>Xmake 为流行的 IDE 和编辑器提供了出色的集成,使开发更加高效。</p>\n<p>为 VS Code 安装 Xmake 扩展:</p>\n<ol>\n<li>打开 VS Code</li>\n<li>转到扩展 (Ctrl+Shift+X)</li>\n<li>搜索 &quot;Xmake&quot;</li>\n<li>安装扩展</li>\n</ol>\n"
+  },
+  {
+    "title": "IDE 集成指南",
+    "url": "/zh/posts/post-5",
+    "date": {
+      "time": 1704110400000,
+      "string": "January 1, 2024"
+    },
+    "author": "waruqi",
+    "tags": [
+      "ide",
+      "集成"
+    ],
+    "excerpt": "<p>Xmake 为流行的 IDE 和编辑器提供了出色的集成,使开发更加高效。</p>\n<p>为 VS Code 安装 Xmake 扩展:</p>\n<ol>\n<li>打开 VS Code</li>\n<li>转到扩展 (Ctrl+Shift+X)</li>\n<li>搜索 &quot;Xmake&quot;</li>\n<li>安装扩展</li>\n</ol>\n"
+  },
+  {
+    "title": "IDE 集成指南",
+    "url": "/zh/posts/post-6",
+    "date": {
+      "time": 1704110400000,
+      "string": "January 1, 2024"
+    },
+    "author": "waruqi",
+    "tags": [
+      "ide",
+      "集成"
+    ],
+    "excerpt": "<p>Xmake 为流行的 IDE 和编辑器提供了出色的集成,使开发更加高效。</p>\n<p>为 VS Code 安装 Xmake 扩展:</p>\n<ol>\n<li>打开 VS Code</li>\n<li>转到扩展 (Ctrl+Shift+X)</li>\n<li>搜索 &quot;Xmake&quot;</li>\n<li>安装扩展</li>\n</ol>\n"
+  },
+  {
+    "title": "IDE 集成指南",
+    "url": "/zh/posts/post-7",
+    "date": {
+      "time": 1704110400000,
+      "string": "January 1, 2024"
+    },
+    "author": "waruqi",
+    "tags": [
+      "ide",
+      "集成"
+    ],
+    "excerpt": "<p>Xmake 为流行的 IDE 和编辑器提供了出色的集成,使开发更加高效。</p>\n<p>为 VS Code 安装 Xmake 扩展:</p>\n<ol>\n<li>打开 VS Code</li>\n<li>转到扩展 (Ctrl+Shift+X)</li>\n<li>搜索 &quot;Xmake&quot;</li>\n<li>安装扩展</li>\n</ol>\n"
+  },
+  {
+    "title": "IDE 集成指南",
+    "url": "/zh/posts/post-8",
+    "date": {
+      "time": 1704110400000,
+      "string": "January 1, 2024"
+    },
+    "author": "waruqi",
+    "tags": [
+      "ide",
+      "集成"
+    ],
+    "excerpt": "<p>Xmake 为流行的 IDE 和编辑器提供了出色的集成,使开发更加高效。</p>\n<p>为 VS Code 安装 Xmake 扩展:</p>\n<ol>\n<li>打开 VS Code</li>\n<li>转到扩展 (Ctrl+Shift+X)</li>\n<li>搜索 &quot;Xmake&quot;</li>\n<li>安装扩展</li>\n</ol>\n"
+  },
+  {
+    "title": "IDE 集成指南",
+    "url": "/zh/posts/post-9",
+    "date": {
+      "time": 1704110400000,
+      "string": "January 1, 2024"
+    },
+    "author": "waruqi",
+    "tags": [
+      "ide",
+      "集成"
+    ],
+    "excerpt": "<p>Xmake 为流行的 IDE 和编辑器提供了出色的集成,使开发更加高效。</p>\n<p>为 VS Code 安装 Xmake 扩展:</p>\n<ol>\n<li>打开 VS Code</li>\n<li>转到扩展 (Ctrl+Shift+X)</li>\n<li>搜索 &quot;Xmake&quot;</li>\n<li>安装扩展</li>\n</ol>\n"
+  }
+]

+ 45 - 0
docs/.vitepress/theme/zh-posts.data.ts

@@ -0,0 +1,45 @@
+import { createContentLoader } from 'vitepress'
+
+interface Post {
+  title: string
+  url: string
+  date: {
+    time: number
+    string: string
+  }
+  excerpt: string | undefined
+  author?: string
+  tags?: string[]
+}
+
+declare const data: Post[]
+export { data }
+
+export default createContentLoader('../../zh/posts/*.md', {
+  excerpt: true,
+  transform(raw): Post[] {
+    return raw
+      .map(({ url, frontmatter, excerpt }) => ({
+        title: frontmatter.title,
+        url,
+        excerpt,
+        author: frontmatter.author,
+        tags: frontmatter.tags,
+        date: formatDate(frontmatter.date)
+      }))
+      .sort((a, b) => b.date.time - a.date.time)
+  }
+})
+
+function formatDate(raw: string): Post['date'] {
+  const date = new Date(raw)
+  date.setUTCHours(12)
+  return {
+    time: +date,
+    string: date.toLocaleDateString('zh-CN', {
+      year: 'numeric',
+      month: 'long',
+      day: 'numeric'
+    })
+  }
+} 

+ 145 - 0
docs/BLOG_README.md

@@ -0,0 +1,145 @@
+# Xmake Blog System
+
+This document describes how to use the blog system for the Xmake documentation site.
+
+## Overview
+
+The blog system is built using VitePress and automatically generates blog pages from markdown files in the `docs/posts/` and `docs/zh/posts/` directories.
+
+## Features
+
+- **Automatic Post Discovery**: Blog posts are automatically discovered from markdown files
+- **Pagination**: Blog pages support pagination with 10 posts per page
+- **Multi-language Support**: Separate blogs for English and Chinese
+- **Author Information**: Display author names and optional Twitter links
+- **Tags Support**: Posts can be tagged for categorization
+- **Excerpt Generation**: Automatic excerpt generation from post content
+- **Responsive Design**: Mobile-friendly layout
+
+## Directory Structure
+
+```
+docs/
+├── posts/           # English blog posts
+├── zh/posts/        # Chinese blog posts
+├── blog/            # English blog index
+│   └── index.md
+├── zh/blog/         # Chinese blog index
+│   └── index.md
+└── .vitepress/
+    └── theme/
+        ├── posts.data.ts      # English posts data loader
+        ├── zh-posts.data.ts   # Chinese posts data loader
+        ├── BlogHome.vue       # English blog home component
+        ├── ZhBlogHome.vue     # Chinese blog home component
+        ├── Date.vue           # Date display component
+        └── Author.vue         # Author display component
+```
+
+## Creating Blog Posts
+
+### English Posts
+
+Create markdown files in `docs/posts/` with the following frontmatter:
+
+```markdown
+---
+title: Your Post Title
+date: 2024-01-15
+author: Author Name
+tags: [tag1, tag2, tag3]
+---
+
+Your post content here...
+```
+
+### Chinese Posts
+
+Create markdown files in `docs/zh/posts/` with the same frontmatter structure:
+
+```markdown
+---
+title: 您的文章标题
+date: 2024-01-15
+author: 作者姓名
+tags: [标签1, 标签2, 标签3]
+---
+
+您的文章内容...
+```
+
+## Frontmatter Fields
+
+- `title` (required): The title of the blog post
+- `date` (required): Publication date in YYYY-MM-DD format
+- `author` (optional): Author name
+- `tags` (optional): Array of tags for categorization
+
+## Blog URLs
+
+- English blog: `/blog/`
+- Chinese blog: `/zh/blog/`
+
+## Navigation
+
+Blog links are automatically added to the navigation menu:
+- English: "Blog" in the main navigation
+- Chinese: "博客" in the main navigation
+
+## Styling
+
+The blog uses Tailwind CSS classes for styling and supports both light and dark themes. The design is responsive and mobile-friendly.
+
+## Customization
+
+### Changing Posts Per Page
+
+Edit the `postsPerPage` variable in the blog home components:
+- English: `docs/.vitepress/theme/BlogHome.vue`
+- Chinese: `docs/.vitepress/theme/ZhBlogHome.vue`
+
+### Modifying the Layout
+
+The blog layout can be customized by editing the Vue components in `docs/.vitepress/theme/`.
+
+### Adding New Features
+
+To add new features like search, categories, or RSS feeds, you can extend the existing components or create new ones.
+
+## Development
+
+To run the development server:
+
+```bash
+npm run docs:dev
+```
+
+To build for production:
+
+```bash
+npm run docs:build
+```
+
+## Example Posts
+
+The system includes several example posts to demonstrate the functionality:
+
+### English Posts
+- `docs/posts/xmake-3-0-release.md`
+- `docs/posts/building-cross-platform-apps.md`
+- `docs/posts/post-3.md` through `docs/posts/post-5.md`
+
+### Chinese Posts
+- `docs/zh/posts/xmake-3-0-release.md`
+- `docs/zh/posts/cross-platform-development.md`
+- `docs/zh/posts/post-3.md` through `docs/zh/posts/post-5.md`
+
+## Generating Sample Posts
+
+You can generate additional sample posts using the provided script:
+
+```bash
+node scripts/generate-blog-posts.js
+```
+
+This will create additional posts to test pagination and other features. 

+ 15 - 0
docs/blog/index.md

@@ -0,0 +1,15 @@
+---
+title: Xmake Blog
+subtext: Updates, tips & opinions from the Xmake team.
+---
+
+<script setup>
+import { posts } from '../.vitepress/theme/blog-data.js'
+import BlogPagination from '../.vitepress/theme/BlogPagination.vue'
+</script>
+
+# Xmake Blog
+
+Updates, tips & opinions from the Xmake team.
+
+<BlogPagination :posts="posts" :posts-per-page="10" /> 

+ 5 - 0
docs/config.ts

@@ -38,6 +38,11 @@ function nav(): DefaultTheme.NavItem[] {
         { text: 'API Reference', link: '/api/description/specification', activeMatch: '/api/' }
       ]
     },
+    {
+      text: 'Blog',
+      link: '/blog/',
+      activeMatch: '/blog/'
+    },
     {
       text: 'Ecosystem',
       items: [

+ 69 - 0
docs/posts/building-cross-platform-apps.md

@@ -0,0 +1,69 @@
+---
+title: Building Cross-Platform Applications with Xmake
+date: 2024-01-10
+author: waruqi
+tags: [cross-platform, tutorial, cpp]
+---
+
+Building applications that work across multiple platforms can be challenging, but Xmake makes it much easier. In this post, we'll explore how to use Xmake to build cross-platform applications.
+
+## Why Cross-Platform Development Matters
+
+In today's diverse computing landscape, your users expect your applications to work on their preferred platform. Whether it's Windows, macOS, or Linux, Xmake provides the tools you need to build for all of them from a single codebase.
+
+## Setting Up Cross-Platform Builds
+
+### Basic Configuration
+
+Here's a simple example of how to configure Xmake for cross-platform builds:
+
+```lua
+add_rules("mode.debug", "mode.release")
+
+target("myapp")
+    set_kind("binary")
+    add_files("src/*.cpp")
+    add_packages("fmt", "spdlog")
+    
+    -- Platform-specific configurations
+    if is_plat("windows") then
+        add_defines("WIN32")
+        add_files("src/win/*.cpp")
+    elseif is_plat("macosx") then
+        add_defines("MACOS")
+        add_files("src/mac/*.cpp")
+    elseif is_plat("linux") then
+        add_defines("LINUX")
+        add_files("src/linux/*.cpp")
+    end
+```
+
+### Cross-Compilation
+
+Xmake also supports cross-compilation for embedded systems:
+
+```lua
+target("embedded_app")
+    set_kind("binary")
+    add_files("src/*.c")
+    
+    -- Cross-compile for ARM
+    set_plat("cross")
+    set_arch("arm")
+    set_toolchain("gcc")
+    
+    add_toolchains("arm-none-eabi-gcc")
+```
+
+## Best Practices
+
+1. **Use Platform Abstractions**: Create platform-specific abstractions for system calls
+2. **Test on All Platforms**: Set up CI/CD to test on all target platforms
+3. **Use Conditional Compilation**: Use Xmake's platform detection for platform-specific code
+4. **Package Dependencies**: Use Xmake's package management for cross-platform dependencies
+
+## Conclusion
+
+With Xmake, cross-platform development becomes much more manageable. The unified build system and excellent package management make it easy to target multiple platforms from a single configuration.
+
+For more information, check out our [cross-compilation guide](/guide/basic-commands/cross-compilation). 

+ 56 - 0
docs/posts/new-feature-announcement.md

@@ -0,0 +1,56 @@
+---
+title: "New Feature: Enhanced Package Management"
+date: "2024-01-20"
+author: "waruqi"
+tags: ["feature", "package-management", "xmake"]
+excerpt: "We're excited to announce a major enhancement to Xmake's package management system that will make dependency handling even more powerful and user-friendly."
+---
+
+# New Feature: Enhanced Package Management
+
+We're excited to announce a major enhancement to Xmake's package management system that will make dependency handling even more powerful and user-friendly.
+
+## What's New
+
+### Improved Dependency Resolution
+
+The new package management system features:
+
+- **Smart dependency resolution**: Automatically resolves complex dependency chains
+- **Version conflict detection**: Identifies and helps resolve version conflicts
+- **Parallel downloads**: Faster package installation with parallel downloading
+- **Better caching**: Improved caching system for faster subsequent builds
+
+### Enhanced User Experience
+
+- **Simplified configuration**: Easier package declaration syntax
+- **Better error messages**: More informative error messages when things go wrong
+- **Progress indicators**: Visual feedback during package operations
+- **Offline support**: Better handling of offline scenarios
+
+## Getting Started
+
+To use the new features, simply update your `xmake.lua` file:
+
+```lua
+add_requires("boost", "openssl", "zlib")
+target("myapp")
+    add_packages("boost", "openssl", "zlib")
+```
+
+The system will automatically handle all the complexity behind the scenes.
+
+## Migration Guide
+
+Existing projects will continue to work without changes. The new features are backward compatible and can be adopted gradually.
+
+## What's Next
+
+This is just the beginning. We have more exciting features planned for the upcoming releases:
+
+- Cloud package hosting
+- Package signing and verification
+- Advanced dependency graphs
+- Integration with more package repositories
+
+Stay tuned for more updates! 

+ 44 - 0
docs/posts/post-10.md

@@ -0,0 +1,44 @@
+---
+title: IDE Integration Guide 10
+date: 2024-01-01
+author: waruqi
+tags: [ide, integration]
+---
+
+# IDE Integration Guide
+
+Xmake provides excellent integration with popular IDEs and editors, making development more efficient.
+
+## VS Code Integration
+
+Install the Xmake extension for VS Code:
+
+1. Open VS Code
+2. Go to Extensions (Ctrl+Shift+X)
+3. Search for "Xmake"
+4. Install the extension
+
+## CLion Integration
+
+CLion supports Xmake projects natively:
+
+1. Open CLion
+2. Open your project directory
+3. CLion will automatically detect the xmake.lua file
+4. Configure your run configurations
+
+## Vim/Neovim Integration
+
+For Vim/Neovim users, there are several plugins available:
+
+- xmake.nvim
+- vim-xmake
+
+## Benefits of IDE Integration
+
+- IntelliSense support
+- Debugging integration
+- Build task integration
+- Error highlighting
+
+Proper IDE integration significantly improves the development experience.

+ 59 - 0
docs/posts/post-3.md

@@ -0,0 +1,59 @@
+---
+title: Getting Started with Xmake
+date: 2024-01-05
+author: waruqi
+tags: [tutorial, getting-started]
+---
+
+# Getting Started with Xmake
+
+Xmake is a modern build system that makes C/C++ development easier and more efficient. In this guide, we'll walk through the basics of setting up and using Xmake.
+
+## Installation
+
+Installing Xmake is straightforward. You can use one of the following methods:
+
+### Using curl (Linux/macOS)
+```bash
+curl -fsSL https://xmake.io/install.sh | bash
+```
+
+### Using PowerShell (Windows)
+```powershell
+Invoke-Expression (Invoke-Webrequest 'https://xmake.io/install.ps1' -UseBasicParsing).Content
+```
+
+## Creating Your First Project
+
+Let's create a simple C++ project:
+
+```bash
+xmake create -l c++ hello
+cd hello
+xmake
+```
+
+This creates a basic C++ project with the following structure:
+- src/main.cpp
+- xmake.lua
+
+## Basic Configuration
+
+The xmake.lua file contains your project configuration:
+
+```lua
+add_rules("mode.debug", "mode.release")
+
+target("hello")
+    set_kind("binary")
+    add_files("src/*.cpp")
+```
+
+## Building and Running
+
+```bash
+xmake build
+xmake run
+```
+
+That's it! You've successfully created and built your first Xmake project.

+ 48 - 0
docs/posts/post-4.md

@@ -0,0 +1,48 @@
+---
+title: Advanced Package Management
+date: 2024-01-03
+author: waruqi
+tags: [package-management, advanced]
+---
+
+# Advanced Package Management with Xmake
+
+Xmake provides a powerful package management system that simplifies dependency handling in C/C++ projects.
+
+## Adding Packages
+
+Adding packages to your project is simple:
+
+```lua
+target("myapp")
+    set_kind("binary")
+    add_files("src/*.cpp")
+    add_packages("fmt", "spdlog", "nlohmann_json")
+```
+
+## Package Sources
+
+Xmake supports multiple package sources:
+
+- Official packages (xmake-repo)
+- Third-party packages
+- Local packages
+- System packages
+
+## Version Management
+
+You can specify package versions:
+
+```lua
+add_packages("[email protected]", "[email protected]")
+```
+
+## Custom Package Repositories
+
+Add your own package repositories:
+
+```lua
+add_repositories("myrepo https://github.com/myorg/xmake-repo")
+```
+
+This advanced package management system makes dependency handling much easier than traditional approaches.

+ 44 - 0
docs/posts/post-5.md

@@ -0,0 +1,44 @@
+---
+title: IDE Integration Guide
+date: 2024-01-01
+author: waruqi
+tags: [ide, integration]
+---
+
+# IDE Integration Guide
+
+Xmake provides excellent integration with popular IDEs and editors, making development more efficient.
+
+## VS Code Integration
+
+Install the Xmake extension for VS Code:
+
+1. Open VS Code
+2. Go to Extensions (Ctrl+Shift+X)
+3. Search for "Xmake"
+4. Install the extension
+
+## CLion Integration
+
+CLion supports Xmake projects natively:
+
+1. Open CLion
+2. Open your project directory
+3. CLion will automatically detect the xmake.lua file
+4. Configure your run configurations
+
+## Vim/Neovim Integration
+
+For Vim/Neovim users, there are several plugins available:
+
+- xmake.nvim
+- vim-xmake
+
+## Benefits of IDE Integration
+
+- IntelliSense support
+- Debugging integration
+- Build task integration
+- Error highlighting
+
+Proper IDE integration significantly improves the development experience.

+ 44 - 0
docs/posts/post-6.md

@@ -0,0 +1,44 @@
+---
+title: IDE Integration Guide
+date: 2024-01-01
+author: waruqi
+tags: [ide, integration]
+---
+
+# IDE Integration Guide
+
+Xmake provides excellent integration with popular IDEs and editors, making development more efficient.
+
+## VS Code Integration
+
+Install the Xmake extension for VS Code:
+
+1. Open VS Code
+2. Go to Extensions (Ctrl+Shift+X)
+3. Search for "Xmake"
+4. Install the extension
+
+## CLion Integration
+
+CLion supports Xmake projects natively:
+
+1. Open CLion
+2. Open your project directory
+3. CLion will automatically detect the xmake.lua file
+4. Configure your run configurations
+
+## Vim/Neovim Integration
+
+For Vim/Neovim users, there are several plugins available:
+
+- xmake.nvim
+- vim-xmake
+
+## Benefits of IDE Integration
+
+- IntelliSense support
+- Debugging integration
+- Build task integration
+- Error highlighting
+
+Proper IDE integration significantly improves the development experience.

+ 44 - 0
docs/posts/post-7.md

@@ -0,0 +1,44 @@
+---
+title: IDE Integration Guide
+date: 2024-01-01
+author: waruqi
+tags: [ide, integration]
+---
+
+# IDE Integration Guide
+
+Xmake provides excellent integration with popular IDEs and editors, making development more efficient.
+
+## VS Code Integration
+
+Install the Xmake extension for VS Code:
+
+1. Open VS Code
+2. Go to Extensions (Ctrl+Shift+X)
+3. Search for "Xmake"
+4. Install the extension
+
+## CLion Integration
+
+CLion supports Xmake projects natively:
+
+1. Open CLion
+2. Open your project directory
+3. CLion will automatically detect the xmake.lua file
+4. Configure your run configurations
+
+## Vim/Neovim Integration
+
+For Vim/Neovim users, there are several plugins available:
+
+- xmake.nvim
+- vim-xmake
+
+## Benefits of IDE Integration
+
+- IntelliSense support
+- Debugging integration
+- Build task integration
+- Error highlighting
+
+Proper IDE integration significantly improves the development experience.

+ 44 - 0
docs/posts/post-8.md

@@ -0,0 +1,44 @@
+---
+title: IDE Integration Guide 8
+date: 2024-01-01
+author: waruqi
+tags: [ide, integration]
+---
+
+# IDE Integration Guide
+
+Xmake provides excellent integration with popular IDEs and editors, making development more efficient.
+
+## VS Code Integration
+
+Install the Xmake extension for VS Code:
+
+1. Open VS Code
+2. Go to Extensions (Ctrl+Shift+X)
+3. Search for "Xmake"
+4. Install the extension
+
+## CLion Integration
+
+CLion supports Xmake projects natively:
+
+1. Open CLion
+2. Open your project directory
+3. CLion will automatically detect the xmake.lua file
+4. Configure your run configurations
+
+## Vim/Neovim Integration
+
+For Vim/Neovim users, there are several plugins available:
+
+- xmake.nvim
+- vim-xmake
+
+## Benefits of IDE Integration
+
+- IntelliSense support
+- Debugging integration
+- Build task integration
+- Error highlighting
+
+Proper IDE integration significantly improves the development experience.

+ 44 - 0
docs/posts/post-9.md

@@ -0,0 +1,44 @@
+---
+title: IDE Integration Guide 9
+date: 2024-01-01
+author: waruqi
+tags: [ide, integration]
+---
+
+# IDE Integration Guide
+
+Xmake provides excellent integration with popular IDEs and editors, making development more efficient.
+
+## VS Code Integration
+
+Install the Xmake extension for VS Code:
+
+1. Open VS Code
+2. Go to Extensions (Ctrl+Shift+X)
+3. Search for "Xmake"
+4. Install the extension
+
+## CLion Integration
+
+CLion supports Xmake projects natively:
+
+1. Open CLion
+2. Open your project directory
+3. CLion will automatically detect the xmake.lua file
+4. Configure your run configurations
+
+## Vim/Neovim Integration
+
+For Vim/Neovim users, there are several plugins available:
+
+- xmake.nvim
+- vim-xmake
+
+## Benefits of IDE Integration
+
+- IntelliSense support
+- Debugging integration
+- Build task integration
+- Error highlighting
+
+Proper IDE integration significantly improves the development experience.

+ 45 - 0
docs/posts/xmake-3-0-release.md

@@ -0,0 +1,45 @@
+---
+title: Announcing Xmake 3.0
+date: 2024-01-15
+author: waruqi
+tags: [release, xmake, build-system]
+---
+
+We are excited to announce the release of Xmake 3.0! This major release brings significant improvements in performance, usability, and feature completeness.
+
+## What's New in Xmake 3.0
+
+### Performance Improvements
+
+Xmake 3.0 introduces a completely rewritten build engine that provides up to 3x faster build times compared to previous versions. The new engine features:
+
+- Optimized dependency resolution
+- Improved parallel compilation
+- Better caching mechanisms
+- Reduced memory usage
+
+### Enhanced Package Management
+
+The package management system has been completely redesigned with:
+
+- Faster package downloads
+- Better dependency resolution
+- Support for more package formats
+- Improved version compatibility
+
+### New Features
+
+- **Remote Compilation**: Compile your code on remote servers
+- **Distributed Builds**: Distribute builds across multiple machines
+- **Better IDE Integration**: Enhanced support for VS Code, CLion, and other IDEs
+- **Improved Documentation**: Comprehensive API documentation and examples
+
+## Migration Guide
+
+For existing projects, the migration to Xmake 3.0 should be straightforward. Most configuration files will work without changes, but we recommend reviewing the [migration guide](/guide/migration) for the best experience.
+
+## Getting Started
+
+To get started with Xmake 3.0, visit our [quick start guide](/guide/quick-start) or check out the [examples](/examples/cpp/basic) to see Xmake in action.
+
+We're excited to see what you'll build with Xmake 3.0! 

+ 15 - 0
docs/zh/blog/index.md

@@ -0,0 +1,15 @@
+---
+title: Xmake 博客
+subtext: Xmake 团队的更新、技巧和观点。
+---
+
+<script setup>
+import { posts } from '../../.vitepress/theme/zh-blog-data.js'
+import BlogPaginationZh from '../../.vitepress/theme/BlogPaginationZh.vue'
+</script>
+
+# Xmake 博客
+
+Xmake 团队的更新、技巧和观点。
+
+<BlogPaginationZh :posts="posts" :posts-per-page="10" /> 

+ 5 - 0
docs/zh/config.ts

@@ -113,6 +113,11 @@ function nav(): DefaultTheme.NavItem[] {
         { text: 'API 手册', link: '/zh/api/description/specification', activeMatch: '/zh/api/' }
       ]
     },
+    {
+      text: '博客',
+      link: '/zh/blog/',
+      activeMatch: '/zh/blog/'
+    },
     {
       text: '生态系统',
       items: [

+ 69 - 0
docs/zh/posts/cross-platform-development.md

@@ -0,0 +1,69 @@
+---
+title: 使用 Xmake 构建跨平台应用
+date: 2024-01-10
+author: waruqi
+tags: [跨平台, 教程, cpp]
+---
+
+构建能在多个平台上运行的应用程序可能具有挑战性,但 Xmake 让这一切变得简单得多。在本文中,我们将探索如何使用 Xmake 构建跨平台应用程序。
+
+## 为什么跨平台开发很重要
+
+在当今多样化的计算环境中,用户期望您的应用程序能在他们偏好的平台上运行。无论是 Windows、macOS 还是 Linux,Xmake 都提供了从单一代码库为所有平台构建应用所需的工具。
+
+## 设置跨平台构建
+
+### 基本配置
+
+以下是如何配置 Xmake 进行跨平台构建的简单示例:
+
+```lua
+add_rules("mode.debug", "mode.release")
+
+target("myapp")
+    set_kind("binary")
+    add_files("src/*.cpp")
+    add_packages("fmt", "spdlog")
+    
+    -- 平台特定配置
+    if is_plat("windows") then
+        add_defines("WIN32")
+        add_files("src/win/*.cpp")
+    elseif is_plat("macosx") then
+        add_defines("MACOS")
+        add_files("src/mac/*.cpp")
+    elseif is_plat("linux") then
+        add_defines("LINUX")
+        add_files("src/linux/*.cpp")
+    end
+```
+
+### 交叉编译
+
+Xmake 还支持嵌入式系统的交叉编译:
+
+```lua
+target("embedded_app")
+    set_kind("binary")
+    add_files("src/*.c")
+    
+    -- 为 ARM 交叉编译
+    set_plat("cross")
+    set_arch("arm")
+    set_toolchain("gcc")
+    
+    add_toolchains("arm-none-eabi-gcc")
+```
+
+## 最佳实践
+
+1. **使用平台抽象**:为系统调用创建平台特定的抽象
+2. **在所有平台上测试**:设置 CI/CD 在所有目标平台上进行测试
+3. **使用条件编译**:使用 Xmake 的平台检测进行平台特定代码
+4. **包依赖管理**:使用 Xmake 的包管理进行跨平台依赖管理
+
+## 结论
+
+使用 Xmake,跨平台开发变得更加容易管理。统一的构建系统和优秀的包管理使得从单一配置针对多个平台变得简单。
+
+更多信息,请查看我们的[交叉编译指南](/zh/guide/basic-commands/cross-compilation)。 

+ 44 - 0
docs/zh/posts/post-10.md

@@ -0,0 +1,44 @@
+---
+title: IDE 集成指南
+date: 2024-01-01
+author: waruqi
+tags: [ide, 集成]
+---
+
+# IDE 集成指南
+
+Xmake 为流行的 IDE 和编辑器提供了出色的集成,使开发更加高效。
+
+## VS Code 集成
+
+为 VS Code 安装 Xmake 扩展:
+
+1. 打开 VS Code
+2. 转到扩展 (Ctrl+Shift+X)
+3. 搜索 "Xmake"
+4. 安装扩展
+
+## CLion 集成
+
+CLion 原生支持 Xmake 项目:
+
+1. 打开 CLion
+2. 打开您的项目目录
+3. CLion 将自动检测 xmake.lua 文件
+4. 配置您的运行配置
+
+## Vim/Neovim 集成
+
+对于 Vim/Neovim 用户,有几个可用的插件:
+
+- xmake.nvim
+- vim-xmake
+
+## IDE 集成的好处
+
+- IntelliSense 支持
+- 调试集成
+- 构建任务集成
+- 错误高亮
+
+适当的 IDE 集成显著改善了开发体验。

+ 44 - 0
docs/zh/posts/post-11.md

@@ -0,0 +1,44 @@
+---
+title: IDE 集成指南
+date: 2024-01-01
+author: waruqi
+tags: [ide, 集成]
+---
+
+# IDE 集成指南
+
+Xmake 为流行的 IDE 和编辑器提供了出色的集成,使开发更加高效。
+
+## VS Code 集成
+
+为 VS Code 安装 Xmake 扩展:
+
+1. 打开 VS Code
+2. 转到扩展 (Ctrl+Shift+X)
+3. 搜索 "Xmake"
+4. 安装扩展
+
+## CLion 集成
+
+CLion 原生支持 Xmake 项目:
+
+1. 打开 CLion
+2. 打开您的项目目录
+3. CLion 将自动检测 xmake.lua 文件
+4. 配置您的运行配置
+
+## Vim/Neovim 集成
+
+对于 Vim/Neovim 用户,有几个可用的插件:
+
+- xmake.nvim
+- vim-xmake
+
+## IDE 集成的好处
+
+- IntelliSense 支持
+- 调试集成
+- 构建任务集成
+- 错误高亮
+
+适当的 IDE 集成显著改善了开发体验。

+ 59 - 0
docs/zh/posts/post-3.md

@@ -0,0 +1,59 @@
+---
+title: Xmake 入门指南
+date: 2024-01-05
+author: waruqi
+tags: [教程, 入门]
+---
+
+# Xmake 入门指南
+
+Xmake 是一个现代化的构建系统,让 C/C++ 开发变得更加简单和高效。在本指南中,我们将介绍 Xmake 的基本设置和使用方法。
+
+## 安装
+
+安装 Xmake 非常简单。您可以使用以下方法之一:
+
+### 使用 curl (Linux/macOS)
+```bash
+curl -fsSL https://xmake.io/install.sh | bash
+```
+
+### 使用 PowerShell (Windows)
+```powershell
+Invoke-Expression (Invoke-Webrequest 'https://xmake.io/install.ps1' -UseBasicParsing).Content
+```
+
+## 创建您的第一个项目
+
+让我们创建一个简单的 C++ 项目:
+
+```bash
+xmake create -l c++ hello
+cd hello
+xmake
+```
+
+这将创建一个基本的 C++ 项目,具有以下结构:
+- src/main.cpp
+- xmake.lua
+
+## 基本配置
+
+xmake.lua 文件包含您的项目配置:
+
+```lua
+add_rules("mode.debug", "mode.release")
+
+target("hello")
+    set_kind("binary")
+    add_files("src/*.cpp")
+```
+
+## 构建和运行
+
+```bash
+xmake build
+xmake run
+```
+
+就是这样!您已经成功创建并构建了您的第一个 Xmake 项目。

+ 48 - 0
docs/zh/posts/post-4.md

@@ -0,0 +1,48 @@
+---
+title: 高级包管理
+date: 2024-01-03
+author: waruqi
+tags: [包管理, 高级]
+---
+
+# Xmake 高级包管理
+
+Xmake 提供了一个强大的包管理系统,简化了 C/C++ 项目中的依赖处理。
+
+## 添加包
+
+向您的项目添加包很简单:
+
+```lua
+target("myapp")
+    set_kind("binary")
+    add_files("src/*.cpp")
+    add_packages("fmt", "spdlog", "nlohmann_json")
+```
+
+## 包源
+
+Xmake 支持多个包源:
+
+- 官方包 (xmake-repo)
+- 第三方包
+- 本地包
+- 系统包
+
+## 版本管理
+
+您可以指定包版本:
+
+```lua
+add_packages("[email protected]", "[email protected]")
+```
+
+## 自定义包仓库
+
+添加您自己的包仓库:
+
+```lua
+add_repositories("myrepo https://github.com/myorg/xmake-repo")
+```
+
+这个高级包管理系统使依赖处理比传统方法更加容易。

+ 44 - 0
docs/zh/posts/post-5.md

@@ -0,0 +1,44 @@
+---
+title: IDE 集成指南
+date: 2024-01-01
+author: waruqi
+tags: [ide, 集成]
+---
+
+# IDE 集成指南
+
+Xmake 为流行的 IDE 和编辑器提供了出色的集成,使开发更加高效。
+
+## VS Code 集成
+
+为 VS Code 安装 Xmake 扩展:
+
+1. 打开 VS Code
+2. 转到扩展 (Ctrl+Shift+X)
+3. 搜索 "Xmake"
+4. 安装扩展
+
+## CLion 集成
+
+CLion 原生支持 Xmake 项目:
+
+1. 打开 CLion
+2. 打开您的项目目录
+3. CLion 将自动检测 xmake.lua 文件
+4. 配置您的运行配置
+
+## Vim/Neovim 集成
+
+对于 Vim/Neovim 用户,有几个可用的插件:
+
+- xmake.nvim
+- vim-xmake
+
+## IDE 集成的好处
+
+- IntelliSense 支持
+- 调试集成
+- 构建任务集成
+- 错误高亮
+
+适当的 IDE 集成显著改善了开发体验。

+ 44 - 0
docs/zh/posts/post-6.md

@@ -0,0 +1,44 @@
+---
+title: IDE 集成指南
+date: 2024-01-01
+author: waruqi
+tags: [ide, 集成]
+---
+
+# IDE 集成指南
+
+Xmake 为流行的 IDE 和编辑器提供了出色的集成,使开发更加高效。
+
+## VS Code 集成
+
+为 VS Code 安装 Xmake 扩展:
+
+1. 打开 VS Code
+2. 转到扩展 (Ctrl+Shift+X)
+3. 搜索 "Xmake"
+4. 安装扩展
+
+## CLion 集成
+
+CLion 原生支持 Xmake 项目:
+
+1. 打开 CLion
+2. 打开您的项目目录
+3. CLion 将自动检测 xmake.lua 文件
+4. 配置您的运行配置
+
+## Vim/Neovim 集成
+
+对于 Vim/Neovim 用户,有几个可用的插件:
+
+- xmake.nvim
+- vim-xmake
+
+## IDE 集成的好处
+
+- IntelliSense 支持
+- 调试集成
+- 构建任务集成
+- 错误高亮
+
+适当的 IDE 集成显著改善了开发体验。

+ 44 - 0
docs/zh/posts/post-7.md

@@ -0,0 +1,44 @@
+---
+title: IDE 集成指南
+date: 2024-01-01
+author: waruqi
+tags: [ide, 集成]
+---
+
+# IDE 集成指南
+
+Xmake 为流行的 IDE 和编辑器提供了出色的集成,使开发更加高效。
+
+## VS Code 集成
+
+为 VS Code 安装 Xmake 扩展:
+
+1. 打开 VS Code
+2. 转到扩展 (Ctrl+Shift+X)
+3. 搜索 "Xmake"
+4. 安装扩展
+
+## CLion 集成
+
+CLion 原生支持 Xmake 项目:
+
+1. 打开 CLion
+2. 打开您的项目目录
+3. CLion 将自动检测 xmake.lua 文件
+4. 配置您的运行配置
+
+## Vim/Neovim 集成
+
+对于 Vim/Neovim 用户,有几个可用的插件:
+
+- xmake.nvim
+- vim-xmake
+
+## IDE 集成的好处
+
+- IntelliSense 支持
+- 调试集成
+- 构建任务集成
+- 错误高亮
+
+适当的 IDE 集成显著改善了开发体验。

+ 44 - 0
docs/zh/posts/post-8.md

@@ -0,0 +1,44 @@
+---
+title: IDE 集成指南
+date: 2024-01-01
+author: waruqi
+tags: [ide, 集成]
+---
+
+# IDE 集成指南
+
+Xmake 为流行的 IDE 和编辑器提供了出色的集成,使开发更加高效。
+
+## VS Code 集成
+
+为 VS Code 安装 Xmake 扩展:
+
+1. 打开 VS Code
+2. 转到扩展 (Ctrl+Shift+X)
+3. 搜索 "Xmake"
+4. 安装扩展
+
+## CLion 集成
+
+CLion 原生支持 Xmake 项目:
+
+1. 打开 CLion
+2. 打开您的项目目录
+3. CLion 将自动检测 xmake.lua 文件
+4. 配置您的运行配置
+
+## Vim/Neovim 集成
+
+对于 Vim/Neovim 用户,有几个可用的插件:
+
+- xmake.nvim
+- vim-xmake
+
+## IDE 集成的好处
+
+- IntelliSense 支持
+- 调试集成
+- 构建任务集成
+- 错误高亮
+
+适当的 IDE 集成显著改善了开发体验。

+ 44 - 0
docs/zh/posts/post-9.md

@@ -0,0 +1,44 @@
+---
+title: IDE 集成指南
+date: 2024-01-01
+author: waruqi
+tags: [ide, 集成]
+---
+
+# IDE 集成指南
+
+Xmake 为流行的 IDE 和编辑器提供了出色的集成,使开发更加高效。
+
+## VS Code 集成
+
+为 VS Code 安装 Xmake 扩展:
+
+1. 打开 VS Code
+2. 转到扩展 (Ctrl+Shift+X)
+3. 搜索 "Xmake"
+4. 安装扩展
+
+## CLion 集成
+
+CLion 原生支持 Xmake 项目:
+
+1. 打开 CLion
+2. 打开您的项目目录
+3. CLion 将自动检测 xmake.lua 文件
+4. 配置您的运行配置
+
+## Vim/Neovim 集成
+
+对于 Vim/Neovim 用户,有几个可用的插件:
+
+- xmake.nvim
+- vim-xmake
+
+## IDE 集成的好处
+
+- IntelliSense 支持
+- 调试集成
+- 构建任务集成
+- 错误高亮
+
+适当的 IDE 集成显著改善了开发体验。

+ 45 - 0
docs/zh/posts/xmake-3-0-release.md

@@ -0,0 +1,45 @@
+---
+title: Xmake 3.0 正式发布
+date: 2024-01-15
+author: waruqi
+tags: [发布, xmake, 构建系统]
+---
+
+我们很高兴地宣布 Xmake 3.0 正式发布!这个重大版本在性能、易用性和功能完整性方面都带来了显著改进。
+
+## Xmake 3.0 的新特性
+
+### 性能提升
+
+Xmake 3.0 引入了完全重写的构建引擎,相比之前的版本提供了高达 3 倍的构建速度提升。新引擎具有以下特性:
+
+- 优化的依赖解析
+- 改进的并行编译
+- 更好的缓存机制
+- 减少内存使用
+
+### 增强的包管理
+
+包管理系统已完全重新设计,具有:
+
+- 更快的包下载速度
+- 更好的依赖解析
+- 支持更多包格式
+- 改进的版本兼容性
+
+### 新功能
+
+- **远程编译**:在远程服务器上编译代码
+- **分布式构建**:在多个机器上分发构建任务
+- **更好的 IDE 集成**:增强对 VS Code、CLion 等 IDE 的支持
+- **改进的文档**:全面的 API 文档和示例
+
+## 迁移指南
+
+对于现有项目,迁移到 Xmake 3.0 应该很简单。大多数配置文件无需更改即可工作,但我们建议查看[迁移指南](/zh/guide/migration)以获得最佳体验。
+
+## 开始使用
+
+要开始使用 Xmake 3.0,请访问我们的[快速开始指南](/zh/guide/quick-start)或查看[示例](/zh/examples/cpp/basic)来了解 Xmake 的实际应用。
+
+我们很期待看到您用 Xmake 3.0 构建出什么! 

+ 2684 - 0
package-lock.json

@@ -0,0 +1,2684 @@
+{
+  "name": "xmake-docs",
+  "lockfileVersion": 3,
+  "requires": true,
+  "packages": {
+    "": {
+      "dependencies": {
+        "gray-matter": "^4.0.3",
+        "markdown-it": "^14.1.0"
+      },
+      "devDependencies": {
+        "vitepress": "^2.0.0-alpha.6"
+      }
+    },
+    "node_modules/@algolia/autocomplete-core": {
+      "version": "1.17.9",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@algolia/autocomplete-core/-/autocomplete-core-1.17.9.tgz",
+      "integrity": "sha512-O7BxrpLDPJWWHv/DLA9DRFWs+iY1uOJZkqUwjS5HSZAGcl0hIVCQ97LTLewiZmZ402JYUrun+8NqFP+hCknlbQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@algolia/autocomplete-plugin-algolia-insights": "1.17.9",
+        "@algolia/autocomplete-shared": "1.17.9"
+      }
+    },
+    "node_modules/@algolia/autocomplete-plugin-algolia-insights": {
+      "version": "1.17.9",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.17.9.tgz",
+      "integrity": "sha512-u1fEHkCbWF92DBeB/KHeMacsjsoI0wFhjZtlCq2ddZbAehshbZST6Hs0Avkc0s+4UyBGbMDnSuXHLuvRWK5iDQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@algolia/autocomplete-shared": "1.17.9"
+      },
+      "peerDependencies": {
+        "search-insights": ">= 1 < 3"
+      }
+    },
+    "node_modules/@algolia/autocomplete-preset-algolia": {
+      "version": "1.17.9",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.17.9.tgz",
+      "integrity": "sha512-Na1OuceSJeg8j7ZWn5ssMu/Ax3amtOwk76u4h5J4eK2Nx2KB5qt0Z4cOapCsxot9VcEN11ADV5aUSlQF4RhGjQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@algolia/autocomplete-shared": "1.17.9"
+      },
+      "peerDependencies": {
+        "@algolia/client-search": ">= 4.9.1 < 6",
+        "algoliasearch": ">= 4.9.1 < 6"
+      }
+    },
+    "node_modules/@algolia/autocomplete-shared": {
+      "version": "1.17.9",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.9.tgz",
+      "integrity": "sha512-iDf05JDQ7I0b7JEA/9IektxN/80a2MZ1ToohfmNS3rfeuQnIKI3IJlIafD0xu4StbtQTghx9T3Maa97ytkXenQ==",
+      "dev": true,
+      "license": "MIT",
+      "peerDependencies": {
+        "@algolia/client-search": ">= 4.9.1 < 6",
+        "algoliasearch": ">= 4.9.1 < 6"
+      }
+    },
+    "node_modules/@algolia/client-abtesting": {
+      "version": "5.32.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@algolia/client-abtesting/-/client-abtesting-5.32.0.tgz",
+      "integrity": "sha512-HG/6Eib6DnJYm/B2ijWFXr4txca/YOuA4K7AsEU0JBrOZSB+RU7oeDyNBPi3c0v0UDDqlkBqM3vBU/auwZlglA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@algolia/client-common": "5.32.0",
+        "@algolia/requester-browser-xhr": "5.32.0",
+        "@algolia/requester-fetch": "5.32.0",
+        "@algolia/requester-node-http": "5.32.0"
+      },
+      "engines": {
+        "node": ">= 14.0.0"
+      }
+    },
+    "node_modules/@algolia/client-analytics": {
+      "version": "5.32.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@algolia/client-analytics/-/client-analytics-5.32.0.tgz",
+      "integrity": "sha512-8Y9MLU72WFQOW3HArYv16+Wvm6eGmsqbxxM1qxtm0hvSASJbxCm+zQAZe5stqysTlcWo4BJ82KEH1PfgHbJAmQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@algolia/client-common": "5.32.0",
+        "@algolia/requester-browser-xhr": "5.32.0",
+        "@algolia/requester-fetch": "5.32.0",
+        "@algolia/requester-node-http": "5.32.0"
+      },
+      "engines": {
+        "node": ">= 14.0.0"
+      }
+    },
+    "node_modules/@algolia/client-common": {
+      "version": "5.32.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@algolia/client-common/-/client-common-5.32.0.tgz",
+      "integrity": "sha512-w8L+rgyXMCPBKmEdOT+RfgMrF0mT6HK60vPYWLz8DBs/P7yFdGo7urn99XCJvVLMSKXrIbZ2FMZ/i50nZTXnuQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 14.0.0"
+      }
+    },
+    "node_modules/@algolia/client-insights": {
+      "version": "5.32.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@algolia/client-insights/-/client-insights-5.32.0.tgz",
+      "integrity": "sha512-AdWfynhUeX7jz/LTiFU3wwzJembTbdLkQIOLs4n7PyBuxZ3jz4azV1CWbIP8AjUOFmul6uXbmYza+KqyS5CzOA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@algolia/client-common": "5.32.0",
+        "@algolia/requester-browser-xhr": "5.32.0",
+        "@algolia/requester-fetch": "5.32.0",
+        "@algolia/requester-node-http": "5.32.0"
+      },
+      "engines": {
+        "node": ">= 14.0.0"
+      }
+    },
+    "node_modules/@algolia/client-personalization": {
+      "version": "5.32.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@algolia/client-personalization/-/client-personalization-5.32.0.tgz",
+      "integrity": "sha512-bTupJY4xzGZYI4cEQcPlSjjIEzMvv80h7zXGrXY1Y0KC/n/SLiMv84v7Uy+B6AG1Kiy9FQm2ADChBLo1uEhGtQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@algolia/client-common": "5.32.0",
+        "@algolia/requester-browser-xhr": "5.32.0",
+        "@algolia/requester-fetch": "5.32.0",
+        "@algolia/requester-node-http": "5.32.0"
+      },
+      "engines": {
+        "node": ">= 14.0.0"
+      }
+    },
+    "node_modules/@algolia/client-query-suggestions": {
+      "version": "5.32.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@algolia/client-query-suggestions/-/client-query-suggestions-5.32.0.tgz",
+      "integrity": "sha512-if+YTJw1G3nDKL2omSBjQltCHUQzbaHADkcPQrGFnIGhVyHU3Dzq4g46uEv8mrL5sxL8FjiS9LvekeUlL2NRqw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@algolia/client-common": "5.32.0",
+        "@algolia/requester-browser-xhr": "5.32.0",
+        "@algolia/requester-fetch": "5.32.0",
+        "@algolia/requester-node-http": "5.32.0"
+      },
+      "engines": {
+        "node": ">= 14.0.0"
+      }
+    },
+    "node_modules/@algolia/client-search": {
+      "version": "5.32.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@algolia/client-search/-/client-search-5.32.0.tgz",
+      "integrity": "sha512-kmK5nVkKb4DSUgwbveMKe4X3xHdMsPsOVJeEzBvFJ+oS7CkBPmpfHAEq+CcmiPJs20YMv6yVtUT9yPWL5WgAhg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@algolia/client-common": "5.32.0",
+        "@algolia/requester-browser-xhr": "5.32.0",
+        "@algolia/requester-fetch": "5.32.0",
+        "@algolia/requester-node-http": "5.32.0"
+      },
+      "engines": {
+        "node": ">= 14.0.0"
+      }
+    },
+    "node_modules/@algolia/ingestion": {
+      "version": "1.32.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@algolia/ingestion/-/ingestion-1.32.0.tgz",
+      "integrity": "sha512-PZTqjJbx+fmPuT2ud1n4vYDSF1yrT//vOGI9HNYKNA0PM0xGUBWigf5gRivHsXa3oBnUlTyHV9j7Kqx5BHbVHQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@algolia/client-common": "5.32.0",
+        "@algolia/requester-browser-xhr": "5.32.0",
+        "@algolia/requester-fetch": "5.32.0",
+        "@algolia/requester-node-http": "5.32.0"
+      },
+      "engines": {
+        "node": ">= 14.0.0"
+      }
+    },
+    "node_modules/@algolia/monitoring": {
+      "version": "1.32.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@algolia/monitoring/-/monitoring-1.32.0.tgz",
+      "integrity": "sha512-kYYoOGjvNQAmHDS1v5sBj+0uEL9RzYqH/TAdq8wmcV+/22weKt/fjh+6LfiqkS1SCZFYYrwGnirrUhUM36lBIQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@algolia/client-common": "5.32.0",
+        "@algolia/requester-browser-xhr": "5.32.0",
+        "@algolia/requester-fetch": "5.32.0",
+        "@algolia/requester-node-http": "5.32.0"
+      },
+      "engines": {
+        "node": ">= 14.0.0"
+      }
+    },
+    "node_modules/@algolia/recommend": {
+      "version": "5.32.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@algolia/recommend/-/recommend-5.32.0.tgz",
+      "integrity": "sha512-jyIBLdskjPAL7T1g57UMfUNx+PzvYbxKslwRUKBrBA6sNEsYCFdxJAtZSLUMmw6MC98RDt4ksmEl5zVMT5bsuw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@algolia/client-common": "5.32.0",
+        "@algolia/requester-browser-xhr": "5.32.0",
+        "@algolia/requester-fetch": "5.32.0",
+        "@algolia/requester-node-http": "5.32.0"
+      },
+      "engines": {
+        "node": ">= 14.0.0"
+      }
+    },
+    "node_modules/@algolia/requester-browser-xhr": {
+      "version": "5.32.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.32.0.tgz",
+      "integrity": "sha512-eDp14z92Gt6JlFgiexImcWWH+Lk07s/FtxcoDaGrE4UVBgpwqOO6AfQM6dXh1pvHxlDFbMJihHc/vj3gBhPjqQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@algolia/client-common": "5.32.0"
+      },
+      "engines": {
+        "node": ">= 14.0.0"
+      }
+    },
+    "node_modules/@algolia/requester-fetch": {
+      "version": "5.32.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@algolia/requester-fetch/-/requester-fetch-5.32.0.tgz",
+      "integrity": "sha512-rnWVglh/K75hnaLbwSc2t7gCkbq1ldbPgeIKDUiEJxZ4mlguFgcltWjzpDQ/t1LQgxk9HdIFcQfM17Hid3aQ6Q==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@algolia/client-common": "5.32.0"
+      },
+      "engines": {
+        "node": ">= 14.0.0"
+      }
+    },
+    "node_modules/@algolia/requester-node-http": {
+      "version": "5.32.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@algolia/requester-node-http/-/requester-node-http-5.32.0.tgz",
+      "integrity": "sha512-LbzQ04+VLkzXY4LuOzgyjqEv/46Gwrk55PldaglMJ4i4eDXSRXGKkwJpXFwsoU+c1HMQlHIyjJBhrfsfdyRmyQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@algolia/client-common": "5.32.0"
+      },
+      "engines": {
+        "node": ">= 14.0.0"
+      }
+    },
+    "node_modules/@babel/helper-string-parser": {
+      "version": "7.27.1",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
+      "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-validator-identifier": {
+      "version": "7.27.1",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz",
+      "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/parser": {
+      "version": "7.28.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@babel/parser/-/parser-7.28.0.tgz",
+      "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.28.0"
+      },
+      "bin": {
+        "parser": "bin/babel-parser.js"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@babel/types": {
+      "version": "7.28.1",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@babel/types/-/types-7.28.1.tgz",
+      "integrity": "sha512-x0LvFTekgSX+83TI28Y9wYPUfzrnl2aT5+5QLnO6v7mSJYtEEevuDRN0F0uSHRk1G1IWZC43o00Y0xDDrpBGPQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-string-parser": "^7.27.1",
+        "@babel/helper-validator-identifier": "^7.27.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@docsearch/css": {
+      "version": "3.9.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@docsearch/css/-/css-3.9.0.tgz",
+      "integrity": "sha512-cQbnVbq0rrBwNAKegIac/t6a8nWoUAn8frnkLFW6YARaRmAQr5/Eoe6Ln2fqkUCZ40KpdrKbpSAmgrkviOxuWA==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@docsearch/js": {
+      "version": "3.9.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@docsearch/js/-/js-3.9.0.tgz",
+      "integrity": "sha512-4bKHcye6EkLgRE8ze0vcdshmEqxeiJM77M0JXjef7lrYZfSlMunrDOCqyLjiZyo1+c0BhUqA2QpFartIjuHIjw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@docsearch/react": "3.9.0",
+        "preact": "^10.0.0"
+      }
+    },
+    "node_modules/@docsearch/react": {
+      "version": "3.9.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@docsearch/react/-/react-3.9.0.tgz",
+      "integrity": "sha512-mb5FOZYZIkRQ6s/NWnM98k879vu5pscWqTLubLFBO87igYYT4VzVazh4h5o/zCvTIZgEt3PvsCOMOswOUo9yHQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@algolia/autocomplete-core": "1.17.9",
+        "@algolia/autocomplete-preset-algolia": "1.17.9",
+        "@docsearch/css": "3.9.0",
+        "algoliasearch": "^5.14.2"
+      },
+      "peerDependencies": {
+        "@types/react": ">= 16.8.0 < 20.0.0",
+        "react": ">= 16.8.0 < 20.0.0",
+        "react-dom": ">= 16.8.0 < 20.0.0",
+        "search-insights": ">= 1 < 3"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        },
+        "react": {
+          "optional": true
+        },
+        "react-dom": {
+          "optional": true
+        },
+        "search-insights": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@esbuild/aix-ppc64": {
+      "version": "0.25.6",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@esbuild/aix-ppc64/-/aix-ppc64-0.25.6.tgz",
+      "integrity": "sha512-ShbM/3XxwuxjFiuVBHA+d3j5dyac0aEVVq1oluIDf71hUw0aRF59dV/efUsIwFnR6m8JNM2FjZOzmaZ8yG61kw==",
+      "cpu": [
+        "ppc64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "aix"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/android-arm": {
+      "version": "0.25.6",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@esbuild/android-arm/-/android-arm-0.25.6.tgz",
+      "integrity": "sha512-S8ToEOVfg++AU/bHwdksHNnyLyVM+eMVAOf6yRKFitnwnbwwPNqKr3srzFRe7nzV69RQKb5DgchIX5pt3L53xg==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/android-arm64": {
+      "version": "0.25.6",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@esbuild/android-arm64/-/android-arm64-0.25.6.tgz",
+      "integrity": "sha512-hd5zdUarsK6strW+3Wxi5qWws+rJhCCbMiC9QZyzoxfk5uHRIE8T287giQxzVpEvCwuJ9Qjg6bEjcRJcgfLqoA==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/android-x64": {
+      "version": "0.25.6",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@esbuild/android-x64/-/android-x64-0.25.6.tgz",
+      "integrity": "sha512-0Z7KpHSr3VBIO9A/1wcT3NTy7EB4oNC4upJ5ye3R7taCc2GUdeynSLArnon5G8scPwaU866d3H4BCrE5xLW25A==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/darwin-arm64": {
+      "version": "0.25.6",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@esbuild/darwin-arm64/-/darwin-arm64-0.25.6.tgz",
+      "integrity": "sha512-FFCssz3XBavjxcFxKsGy2DYK5VSvJqa6y5HXljKzhRZ87LvEi13brPrf/wdyl/BbpbMKJNOr1Sd0jtW4Ge1pAA==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/darwin-x64": {
+      "version": "0.25.6",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@esbuild/darwin-x64/-/darwin-x64-0.25.6.tgz",
+      "integrity": "sha512-GfXs5kry/TkGM2vKqK2oyiLFygJRqKVhawu3+DOCk7OxLy/6jYkWXhlHwOoTb0WqGnWGAS7sooxbZowy+pK9Yg==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/freebsd-arm64": {
+      "version": "0.25.6",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.6.tgz",
+      "integrity": "sha512-aoLF2c3OvDn2XDTRvn8hN6DRzVVpDlj2B/F66clWd/FHLiHaG3aVZjxQX2DYphA5y/evbdGvC6Us13tvyt4pWg==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/freebsd-x64": {
+      "version": "0.25.6",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@esbuild/freebsd-x64/-/freebsd-x64-0.25.6.tgz",
+      "integrity": "sha512-2SkqTjTSo2dYi/jzFbU9Plt1vk0+nNg8YC8rOXXea+iA3hfNJWebKYPs3xnOUf9+ZWhKAaxnQNUf2X9LOpeiMQ==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-arm": {
+      "version": "0.25.6",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@esbuild/linux-arm/-/linux-arm-0.25.6.tgz",
+      "integrity": "sha512-SZHQlzvqv4Du5PrKE2faN0qlbsaW/3QQfUUc6yO2EjFcA83xnwm91UbEEVx4ApZ9Z5oG8Bxz4qPE+HFwtVcfyw==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-arm64": {
+      "version": "0.25.6",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@esbuild/linux-arm64/-/linux-arm64-0.25.6.tgz",
+      "integrity": "sha512-b967hU0gqKd9Drsh/UuAm21Khpoh6mPBSgz8mKRq4P5mVK8bpA+hQzmm/ZwGVULSNBzKdZPQBRT3+WuVavcWsQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-ia32": {
+      "version": "0.25.6",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@esbuild/linux-ia32/-/linux-ia32-0.25.6.tgz",
+      "integrity": "sha512-aHWdQ2AAltRkLPOsKdi3xv0mZ8fUGPdlKEjIEhxCPm5yKEThcUjHpWB1idN74lfXGnZ5SULQSgtr5Qos5B0bPw==",
+      "cpu": [
+        "ia32"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-loong64": {
+      "version": "0.25.6",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@esbuild/linux-loong64/-/linux-loong64-0.25.6.tgz",
+      "integrity": "sha512-VgKCsHdXRSQ7E1+QXGdRPlQ/e08bN6WMQb27/TMfV+vPjjTImuT9PmLXupRlC90S1JeNNW5lzkAEO/McKeJ2yg==",
+      "cpu": [
+        "loong64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-mips64el": {
+      "version": "0.25.6",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@esbuild/linux-mips64el/-/linux-mips64el-0.25.6.tgz",
+      "integrity": "sha512-WViNlpivRKT9/py3kCmkHnn44GkGXVdXfdc4drNmRl15zVQ2+D2uFwdlGh6IuK5AAnGTo2qPB1Djppj+t78rzw==",
+      "cpu": [
+        "mips64el"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-ppc64": {
+      "version": "0.25.6",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@esbuild/linux-ppc64/-/linux-ppc64-0.25.6.tgz",
+      "integrity": "sha512-wyYKZ9NTdmAMb5730I38lBqVu6cKl4ZfYXIs31Baf8aoOtB4xSGi3THmDYt4BTFHk7/EcVixkOV2uZfwU3Q2Jw==",
+      "cpu": [
+        "ppc64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-riscv64": {
+      "version": "0.25.6",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@esbuild/linux-riscv64/-/linux-riscv64-0.25.6.tgz",
+      "integrity": "sha512-KZh7bAGGcrinEj4qzilJ4hqTY3Dg2U82c8bv+e1xqNqZCrCyc+TL9AUEn5WGKDzm3CfC5RODE/qc96OcbIe33w==",
+      "cpu": [
+        "riscv64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-s390x": {
+      "version": "0.25.6",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@esbuild/linux-s390x/-/linux-s390x-0.25.6.tgz",
+      "integrity": "sha512-9N1LsTwAuE9oj6lHMyyAM+ucxGiVnEqUdp4v7IaMmrwb06ZTEVCIs3oPPplVsnjPfyjmxwHxHMF8b6vzUVAUGw==",
+      "cpu": [
+        "s390x"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-x64": {
+      "version": "0.25.6",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@esbuild/linux-x64/-/linux-x64-0.25.6.tgz",
+      "integrity": "sha512-A6bJB41b4lKFWRKNrWoP2LHsjVzNiaurf7wyj/XtFNTsnPuxwEBWHLty+ZE0dWBKuSK1fvKgrKaNjBS7qbFKig==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/netbsd-arm64": {
+      "version": "0.25.6",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.6.tgz",
+      "integrity": "sha512-IjA+DcwoVpjEvyxZddDqBY+uJ2Snc6duLpjmkXm/v4xuS3H+3FkLZlDm9ZsAbF9rsfP3zeA0/ArNDORZgrxR/Q==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "netbsd"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/netbsd-x64": {
+      "version": "0.25.6",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@esbuild/netbsd-x64/-/netbsd-x64-0.25.6.tgz",
+      "integrity": "sha512-dUXuZr5WenIDlMHdMkvDc1FAu4xdWixTCRgP7RQLBOkkGgwuuzaGSYcOpW4jFxzpzL1ejb8yF620UxAqnBrR9g==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "netbsd"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/openbsd-arm64": {
+      "version": "0.25.6",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.6.tgz",
+      "integrity": "sha512-l8ZCvXP0tbTJ3iaqdNf3pjaOSd5ex/e6/omLIQCVBLmHTlfXW3zAxQ4fnDmPLOB1x9xrcSi/xtCWFwCZRIaEwg==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "openbsd"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/openbsd-x64": {
+      "version": "0.25.6",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@esbuild/openbsd-x64/-/openbsd-x64-0.25.6.tgz",
+      "integrity": "sha512-hKrmDa0aOFOr71KQ/19JC7az1P0GWtCN1t2ahYAf4O007DHZt/dW8ym5+CUdJhQ/qkZmI1HAF8KkJbEFtCL7gw==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "openbsd"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/openharmony-arm64": {
+      "version": "0.25.6",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.6.tgz",
+      "integrity": "sha512-+SqBcAWoB1fYKmpWoQP4pGtx+pUUC//RNYhFdbcSA16617cchuryuhOCRpPsjCblKukAckWsV+aQ3UKT/RMPcA==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "openharmony"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/sunos-x64": {
+      "version": "0.25.6",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@esbuild/sunos-x64/-/sunos-x64-0.25.6.tgz",
+      "integrity": "sha512-dyCGxv1/Br7MiSC42qinGL8KkG4kX0pEsdb0+TKhmJZgCUDBGmyo1/ArCjNGiOLiIAgdbWgmWgib4HoCi5t7kA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "sunos"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/win32-arm64": {
+      "version": "0.25.6",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@esbuild/win32-arm64/-/win32-arm64-0.25.6.tgz",
+      "integrity": "sha512-42QOgcZeZOvXfsCBJF5Afw73t4veOId//XD3i+/9gSkhSV6Gk3VPlWncctI+JcOyERv85FUo7RxuxGy+z8A43Q==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/win32-ia32": {
+      "version": "0.25.6",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@esbuild/win32-ia32/-/win32-ia32-0.25.6.tgz",
+      "integrity": "sha512-4AWhgXmDuYN7rJI6ORB+uU9DHLq/erBbuMoAuB4VWJTu5KtCgcKYPynF0YI1VkBNuEfjNlLrFr9KZPJzrtLkrQ==",
+      "cpu": [
+        "ia32"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/win32-x64": {
+      "version": "0.25.6",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@esbuild/win32-x64/-/win32-x64-0.25.6.tgz",
+      "integrity": "sha512-NgJPHHbEpLQgDH2MjQu90pzW/5vvXIZ7KOnPyNBm92A6WgZ/7b6fJyUBjoumLqeOQQGqY2QjQxRo97ah4Sj0cA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@iconify-json/simple-icons": {
+      "version": "1.2.42",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@iconify-json/simple-icons/-/simple-icons-1.2.42.tgz",
+      "integrity": "sha512-G/EED0hUV1wMNUsWaFdQYLibm6SO7rP2GZP1+CvhszB5WAFYYibD3zoWp3X96xSIWpYQFvccvE17ewpd0Q1hWQ==",
+      "dev": true,
+      "license": "CC0-1.0",
+      "dependencies": {
+        "@iconify/types": "*"
+      }
+    },
+    "node_modules/@iconify/types": {
+      "version": "2.0.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@iconify/types/-/types-2.0.0.tgz",
+      "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@jridgewell/sourcemap-codec": {
+      "version": "1.5.4",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz",
+      "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@rolldown/pluginutils": {
+      "version": "1.0.0-beta.19",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.19.tgz",
+      "integrity": "sha512-3FL3mnMbPu0muGOCaKAhhFEYmqv9eTfPSJRJmANrCwtgK8VuxpsZDGK+m0LYAGoyO8+0j5uRe4PeyPDK1yA/hA==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@rollup/rollup-android-arm-eabi": {
+      "version": "4.45.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.45.0.tgz",
+      "integrity": "sha512-2o/FgACbji4tW1dzXOqAV15Eu7DdgbKsF2QKcxfG4xbh5iwU7yr5RRP5/U+0asQliSYv5M4o7BevlGIoSL0LXg==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ]
+    },
+    "node_modules/@rollup/rollup-android-arm64": {
+      "version": "4.45.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.45.0.tgz",
+      "integrity": "sha512-PSZ0SvMOjEAxwZeTx32eI/j5xSYtDCRxGu5k9zvzoY77xUNssZM+WV6HYBLROpY5CkXsbQjvz40fBb7WPwDqtQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ]
+    },
+    "node_modules/@rollup/rollup-darwin-arm64": {
+      "version": "4.45.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.45.0.tgz",
+      "integrity": "sha512-BA4yPIPssPB2aRAWzmqzQ3y2/KotkLyZukVB7j3psK/U3nVJdceo6qr9pLM2xN6iRP/wKfxEbOb1yrlZH6sYZg==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ]
+    },
+    "node_modules/@rollup/rollup-darwin-x64": {
+      "version": "4.45.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.45.0.tgz",
+      "integrity": "sha512-Pr2o0lvTwsiG4HCr43Zy9xXrHspyMvsvEw4FwKYqhli4FuLE5FjcZzuQ4cfPe0iUFCvSQG6lACI0xj74FDZKRA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ]
+    },
+    "node_modules/@rollup/rollup-freebsd-arm64": {
+      "version": "4.45.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.45.0.tgz",
+      "integrity": "sha512-lYE8LkE5h4a/+6VnnLiL14zWMPnx6wNbDG23GcYFpRW1V9hYWHAw9lBZ6ZUIrOaoK7NliF1sdwYGiVmziUF4vA==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "freebsd"
+      ]
+    },
+    "node_modules/@rollup/rollup-freebsd-x64": {
+      "version": "4.45.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.45.0.tgz",
+      "integrity": "sha512-PVQWZK9sbzpvqC9Q0GlehNNSVHR+4m7+wET+7FgSnKG3ci5nAMgGmr9mGBXzAuE5SvguCKJ6mHL6vq1JaJ/gvw==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "freebsd"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+      "version": "4.45.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.45.0.tgz",
+      "integrity": "sha512-hLrmRl53prCcD+YXTfNvXd776HTxNh8wPAMllusQ+amcQmtgo3V5i/nkhPN6FakW+QVLoUUr2AsbtIRPFU3xIA==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-arm-musleabihf": {
+      "version": "4.45.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.45.0.tgz",
+      "integrity": "sha512-XBKGSYcrkdiRRjl+8XvrUR3AosXU0NvF7VuqMsm7s5nRy+nt58ZMB19Jdp1RdqewLcaYnpk8zeVs/4MlLZEJxw==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-arm64-gnu": {
+      "version": "4.45.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.45.0.tgz",
+      "integrity": "sha512-fRvZZPUiBz7NztBE/2QnCS5AtqLVhXmUOPj9IHlfGEXkapgImf4W9+FSkL8cWqoAjozyUzqFmSc4zh2ooaeF6g==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-arm64-musl": {
+      "version": "4.45.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.45.0.tgz",
+      "integrity": "sha512-Btv2WRZOcUGi8XU80XwIvzTg4U6+l6D0V6sZTrZx214nrwxw5nAi8hysaXj/mctyClWgesyuxbeLylCBNauimg==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-loongarch64-gnu": {
+      "version": "4.45.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.45.0.tgz",
+      "integrity": "sha512-Li0emNnwtUZdLwHjQPBxn4VWztcrw/h7mgLyHiEI5Z0MhpeFGlzaiBHpSNVOMB/xucjXTTcO+dhv469Djr16KA==",
+      "cpu": [
+        "loong64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
+      "version": "4.45.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.45.0.tgz",
+      "integrity": "sha512-sB8+pfkYx2kvpDCfd63d5ScYT0Fz1LO6jIb2zLZvmK9ob2D8DeVqrmBDE0iDK8KlBVmsTNzrjr3G1xV4eUZhSw==",
+      "cpu": [
+        "ppc64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+      "version": "4.45.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.45.0.tgz",
+      "integrity": "sha512-5GQ6PFhh7E6jQm70p1aW05G2cap5zMOvO0se5JMecHeAdj5ZhWEHbJ4hiKpfi1nnnEdTauDXxPgXae/mqjow9w==",
+      "cpu": [
+        "riscv64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-riscv64-musl": {
+      "version": "4.45.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.45.0.tgz",
+      "integrity": "sha512-N/euLsBd1rekWcuduakTo/dJw6U6sBP3eUq+RXM9RNfPuWTvG2w/WObDkIvJ2KChy6oxZmOSC08Ak2OJA0UiAA==",
+      "cpu": [
+        "riscv64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-s390x-gnu": {
+      "version": "4.45.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.45.0.tgz",
+      "integrity": "sha512-2l9sA7d7QdikL0xQwNMO3xURBUNEWyHVHfAsHsUdq+E/pgLTUcCE+gih5PCdmyHmfTDeXUWVhqL0WZzg0nua3g==",
+      "cpu": [
+        "s390x"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-x64-gnu": {
+      "version": "4.45.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.45.0.tgz",
+      "integrity": "sha512-XZdD3fEEQcwG2KrJDdEQu7NrHonPxxaV0/w2HpvINBdcqebz1aL+0vM2WFJq4DeiAVT6F5SUQas65HY5JDqoPw==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-x64-musl": {
+      "version": "4.45.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.45.0.tgz",
+      "integrity": "sha512-7ayfgvtmmWgKWBkCGg5+xTQ0r5V1owVm67zTrsEY1008L5ro7mCyGYORomARt/OquB9KY7LpxVBZes+oSniAAQ==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-win32-arm64-msvc": {
+      "version": "4.45.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.45.0.tgz",
+      "integrity": "sha512-B+IJgcBnE2bm93jEW5kHisqvPITs4ddLOROAcOc/diBgrEiQJJ6Qcjby75rFSmH5eMGrqJryUgJDhrfj942apQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ]
+    },
+    "node_modules/@rollup/rollup-win32-ia32-msvc": {
+      "version": "4.45.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.45.0.tgz",
+      "integrity": "sha512-+CXwwG66g0/FpWOnP/v1HnrGVSOygK/osUbu3wPRy8ECXjoYKjRAyfxYpDQOfghC5qPJYLPH0oN4MCOjwgdMug==",
+      "cpu": [
+        "ia32"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ]
+    },
+    "node_modules/@rollup/rollup-win32-x64-msvc": {
+      "version": "4.45.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.45.0.tgz",
+      "integrity": "sha512-SRf1cytG7wqcHVLrBc9VtPK4pU5wxiB/lNIkNmW2ApKXIg+RpqwHfsaEK+e7eH4A1BpI6BX/aBWXxZCIrJg3uA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ]
+    },
+    "node_modules/@shikijs/core": {
+      "version": "3.7.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@shikijs/core/-/core-3.7.0.tgz",
+      "integrity": "sha512-yilc0S9HvTPyahHpcum8eonYrQtmGTU0lbtwxhA6jHv4Bm1cAdlPFRCJX4AHebkCm75aKTjjRAW+DezqD1b/cg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@shikijs/types": "3.7.0",
+        "@shikijs/vscode-textmate": "^10.0.2",
+        "@types/hast": "^3.0.4",
+        "hast-util-to-html": "^9.0.5"
+      }
+    },
+    "node_modules/@shikijs/engine-javascript": {
+      "version": "3.7.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@shikijs/engine-javascript/-/engine-javascript-3.7.0.tgz",
+      "integrity": "sha512-0t17s03Cbv+ZcUvv+y33GtX75WBLQELgNdVghnsdhTgU3hVcWcMsoP6Lb0nDTl95ZJfbP1mVMO0p3byVh3uuzA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@shikijs/types": "3.7.0",
+        "@shikijs/vscode-textmate": "^10.0.2",
+        "oniguruma-to-es": "^4.3.3"
+      }
+    },
+    "node_modules/@shikijs/engine-oniguruma": {
+      "version": "3.7.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@shikijs/engine-oniguruma/-/engine-oniguruma-3.7.0.tgz",
+      "integrity": "sha512-5BxcD6LjVWsGu4xyaBC5bu8LdNgPCVBnAkWTtOCs/CZxcB22L8rcoWfv7Hh/3WooVjBZmFtyxhgvkQFedPGnFw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@shikijs/types": "3.7.0",
+        "@shikijs/vscode-textmate": "^10.0.2"
+      }
+    },
+    "node_modules/@shikijs/langs": {
+      "version": "3.7.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@shikijs/langs/-/langs-3.7.0.tgz",
+      "integrity": "sha512-1zYtdfXLr9xDKLTGy5kb7O0zDQsxXiIsw1iIBcNOO8Yi5/Y1qDbJ+0VsFoqTlzdmneO8Ij35g7QKF8kcLyznCQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@shikijs/types": "3.7.0"
+      }
+    },
+    "node_modules/@shikijs/themes": {
+      "version": "3.7.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@shikijs/themes/-/themes-3.7.0.tgz",
+      "integrity": "sha512-VJx8497iZPy5zLiiCTSIaOChIcKQwR0FebwE9S3rcN0+J/GTWwQ1v/bqhTbpbY3zybPKeO8wdammqkpXc4NVjQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@shikijs/types": "3.7.0"
+      }
+    },
+    "node_modules/@shikijs/transformers": {
+      "version": "3.7.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@shikijs/transformers/-/transformers-3.7.0.tgz",
+      "integrity": "sha512-VplaqIMRNsNOorCXJHkbF5S0pT6xm8Z/s7w7OPZLohf8tR93XH0krvUafpNy/ozEylrWuShJF0+ftEB+wFRwGA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@shikijs/core": "3.7.0",
+        "@shikijs/types": "3.7.0"
+      }
+    },
+    "node_modules/@shikijs/types": {
+      "version": "3.7.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@shikijs/types/-/types-3.7.0.tgz",
+      "integrity": "sha512-MGaLeaRlSWpnP0XSAum3kP3a8vtcTsITqoEPYdt3lQG3YCdQH4DnEhodkYcNMcU0uW0RffhoD1O3e0vG5eSBBg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@shikijs/vscode-textmate": "^10.0.2",
+        "@types/hast": "^3.0.4"
+      }
+    },
+    "node_modules/@shikijs/vscode-textmate": {
+      "version": "10.0.2",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz",
+      "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@types/estree": {
+      "version": "1.0.8",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@types/estree/-/estree-1.0.8.tgz",
+      "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@types/hast": {
+      "version": "3.0.4",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@types/hast/-/hast-3.0.4.tgz",
+      "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/unist": "*"
+      }
+    },
+    "node_modules/@types/mdast": {
+      "version": "4.0.4",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@types/mdast/-/mdast-4.0.4.tgz",
+      "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/unist": "*"
+      }
+    },
+    "node_modules/@types/unist": {
+      "version": "3.0.3",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@types/unist/-/unist-3.0.3.tgz",
+      "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@types/web-bluetooth": {
+      "version": "0.0.21",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz",
+      "integrity": "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@ungap/structured-clone": {
+      "version": "1.3.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@ungap/structured-clone/-/structured-clone-1.3.0.tgz",
+      "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/@vitejs/plugin-vue": {
+      "version": "6.0.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@vitejs/plugin-vue/-/plugin-vue-6.0.0.tgz",
+      "integrity": "sha512-iAliE72WsdhjzTOp2DtvKThq1VBC4REhwRcaA+zPAAph6I+OQhUXv+Xu2KS7ElxYtb7Zc/3R30Hwv1DxEo7NXQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@rolldown/pluginutils": "1.0.0-beta.19"
+      },
+      "engines": {
+        "node": "^20.19.0 || >=22.12.0"
+      },
+      "peerDependencies": {
+        "vite": "^5.0.0 || ^6.0.0 || ^7.0.0",
+        "vue": "^3.2.25"
+      }
+    },
+    "node_modules/@vue/compiler-core": {
+      "version": "3.5.17",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@vue/compiler-core/-/compiler-core-3.5.17.tgz",
+      "integrity": "sha512-Xe+AittLbAyV0pabcN7cP7/BenRBNcteM4aSDCtRvGw0d9OL+HG1u/XHLY/kt1q4fyMeZYXyIYrsHuPSiDPosA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/parser": "^7.27.5",
+        "@vue/shared": "3.5.17",
+        "entities": "^4.5.0",
+        "estree-walker": "^2.0.2",
+        "source-map-js": "^1.2.1"
+      }
+    },
+    "node_modules/@vue/compiler-dom": {
+      "version": "3.5.17",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@vue/compiler-dom/-/compiler-dom-3.5.17.tgz",
+      "integrity": "sha512-+2UgfLKoaNLhgfhV5Ihnk6wB4ljyW1/7wUIog2puUqajiC29Lp5R/IKDdkebh9jTbTogTbsgB+OY9cEWzG95JQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@vue/compiler-core": "3.5.17",
+        "@vue/shared": "3.5.17"
+      }
+    },
+    "node_modules/@vue/compiler-sfc": {
+      "version": "3.5.17",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@vue/compiler-sfc/-/compiler-sfc-3.5.17.tgz",
+      "integrity": "sha512-rQQxbRJMgTqwRugtjw0cnyQv9cP4/4BxWfTdRBkqsTfLOHWykLzbOc3C4GGzAmdMDxhzU/1Ija5bTjMVrddqww==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/parser": "^7.27.5",
+        "@vue/compiler-core": "3.5.17",
+        "@vue/compiler-dom": "3.5.17",
+        "@vue/compiler-ssr": "3.5.17",
+        "@vue/shared": "3.5.17",
+        "estree-walker": "^2.0.2",
+        "magic-string": "^0.30.17",
+        "postcss": "^8.5.6",
+        "source-map-js": "^1.2.1"
+      }
+    },
+    "node_modules/@vue/compiler-ssr": {
+      "version": "3.5.17",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@vue/compiler-ssr/-/compiler-ssr-3.5.17.tgz",
+      "integrity": "sha512-hkDbA0Q20ZzGgpj5uZjb9rBzQtIHLS78mMilwrlpWk2Ep37DYntUz0PonQ6kr113vfOEdM+zTBuJDaceNIW0tQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@vue/compiler-dom": "3.5.17",
+        "@vue/shared": "3.5.17"
+      }
+    },
+    "node_modules/@vue/devtools-api": {
+      "version": "7.7.7",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@vue/devtools-api/-/devtools-api-7.7.7.tgz",
+      "integrity": "sha512-lwOnNBH2e7x1fIIbVT7yF5D+YWhqELm55/4ZKf45R9T8r9dE2AIOy8HKjfqzGsoTHFbWbr337O4E0A0QADnjBg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@vue/devtools-kit": "^7.7.7"
+      }
+    },
+    "node_modules/@vue/devtools-kit": {
+      "version": "7.7.7",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@vue/devtools-kit/-/devtools-kit-7.7.7.tgz",
+      "integrity": "sha512-wgoZtxcTta65cnZ1Q6MbAfePVFxfM+gq0saaeytoph7nEa7yMXoi6sCPy4ufO111B9msnw0VOWjPEFCXuAKRHA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@vue/devtools-shared": "^7.7.7",
+        "birpc": "^2.3.0",
+        "hookable": "^5.5.3",
+        "mitt": "^3.0.1",
+        "perfect-debounce": "^1.0.0",
+        "speakingurl": "^14.0.1",
+        "superjson": "^2.2.2"
+      }
+    },
+    "node_modules/@vue/devtools-shared": {
+      "version": "7.7.7",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@vue/devtools-shared/-/devtools-shared-7.7.7.tgz",
+      "integrity": "sha512-+udSj47aRl5aKb0memBvcUG9koarqnxNM5yjuREvqwK6T3ap4mn3Zqqc17QrBFTqSMjr3HK1cvStEZpMDpfdyw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "rfdc": "^1.4.1"
+      }
+    },
+    "node_modules/@vue/reactivity": {
+      "version": "3.5.17",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@vue/reactivity/-/reactivity-3.5.17.tgz",
+      "integrity": "sha512-l/rmw2STIscWi7SNJp708FK4Kofs97zc/5aEPQh4bOsReD/8ICuBcEmS7KGwDj5ODQLYWVN2lNibKJL1z5b+Lw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@vue/shared": "3.5.17"
+      }
+    },
+    "node_modules/@vue/runtime-core": {
+      "version": "3.5.17",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@vue/runtime-core/-/runtime-core-3.5.17.tgz",
+      "integrity": "sha512-QQLXa20dHg1R0ri4bjKeGFKEkJA7MMBxrKo2G+gJikmumRS7PTD4BOU9FKrDQWMKowz7frJJGqBffYMgQYS96Q==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@vue/reactivity": "3.5.17",
+        "@vue/shared": "3.5.17"
+      }
+    },
+    "node_modules/@vue/runtime-dom": {
+      "version": "3.5.17",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@vue/runtime-dom/-/runtime-dom-3.5.17.tgz",
+      "integrity": "sha512-8El0M60TcwZ1QMz4/os2MdlQECgGoVHPuLnQBU3m9h3gdNRW9xRmI8iLS4t/22OQlOE6aJvNNlBiCzPHur4H9g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@vue/reactivity": "3.5.17",
+        "@vue/runtime-core": "3.5.17",
+        "@vue/shared": "3.5.17",
+        "csstype": "^3.1.3"
+      }
+    },
+    "node_modules/@vue/server-renderer": {
+      "version": "3.5.17",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@vue/server-renderer/-/server-renderer-3.5.17.tgz",
+      "integrity": "sha512-BOHhm8HalujY6lmC3DbqF6uXN/K00uWiEeF22LfEsm9Q93XeJ/plHTepGwf6tqFcF7GA5oGSSAAUock3VvzaCA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@vue/compiler-ssr": "3.5.17",
+        "@vue/shared": "3.5.17"
+      },
+      "peerDependencies": {
+        "vue": "3.5.17"
+      }
+    },
+    "node_modules/@vue/shared": {
+      "version": "3.5.17",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@vue/shared/-/shared-3.5.17.tgz",
+      "integrity": "sha512-CabR+UN630VnsJO/jHWYBC1YVXyMq94KKp6iF5MQgZJs5I8cmjw6oVMO1oDbtBkENSHSSn/UadWlW/OAgdmKrg==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@vueuse/core": {
+      "version": "13.5.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@vueuse/core/-/core-13.5.0.tgz",
+      "integrity": "sha512-wV7z0eUpifKmvmN78UBZX8T7lMW53Nrk6JP5+6hbzrB9+cJ3jr//hUlhl9TZO/03bUkMK6gGkQpqOPWoabr72g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/web-bluetooth": "^0.0.21",
+        "@vueuse/metadata": "13.5.0",
+        "@vueuse/shared": "13.5.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/antfu"
+      },
+      "peerDependencies": {
+        "vue": "^3.5.0"
+      }
+    },
+    "node_modules/@vueuse/integrations": {
+      "version": "13.5.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@vueuse/integrations/-/integrations-13.5.0.tgz",
+      "integrity": "sha512-7RACJySnlpl0MkSzxbtadioNGSX4TL5/Wl2cUy4nDq/XkeHwPYvVM880HJUSiap/FXhVEup9VKTM9y/n5UspAw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@vueuse/core": "13.5.0",
+        "@vueuse/shared": "13.5.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/antfu"
+      },
+      "peerDependencies": {
+        "async-validator": "^4",
+        "axios": "^1",
+        "change-case": "^5",
+        "drauu": "^0.4",
+        "focus-trap": "^7",
+        "fuse.js": "^7",
+        "idb-keyval": "^6",
+        "jwt-decode": "^4",
+        "nprogress": "^0.2",
+        "qrcode": "^1.5",
+        "sortablejs": "^1",
+        "universal-cookie": "^7 || ^8",
+        "vue": "^3.5.0"
+      },
+      "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
+        }
+      }
+    },
+    "node_modules/@vueuse/metadata": {
+      "version": "13.5.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@vueuse/metadata/-/metadata-13.5.0.tgz",
+      "integrity": "sha512-euhItU3b0SqXxSy8u1XHxUCdQ8M++bsRs+TYhOLDU/OykS7KvJnyIFfep0XM5WjIFry9uAPlVSjmVHiqeshmkw==",
+      "dev": true,
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/sponsors/antfu"
+      }
+    },
+    "node_modules/@vueuse/shared": {
+      "version": "13.5.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/@vueuse/shared/-/shared-13.5.0.tgz",
+      "integrity": "sha512-K7GrQIxJ/ANtucxIXbQlUHdB0TPA8c+q5i+zbrjxuhJCnJ9GtBg75sBSnvmLSxHKPg2Yo8w62PWksl9kwH0Q8g==",
+      "dev": true,
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/sponsors/antfu"
+      },
+      "peerDependencies": {
+        "vue": "^3.5.0"
+      }
+    },
+    "node_modules/algoliasearch": {
+      "version": "5.32.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/algoliasearch/-/algoliasearch-5.32.0.tgz",
+      "integrity": "sha512-84xBncKNPBK8Ae89F65+SyVcOihrIbm/3N7to+GpRBHEUXGjA3ydWTMpcRW6jmFzkBQ/eqYy/y+J+NBpJWYjBg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@algolia/client-abtesting": "5.32.0",
+        "@algolia/client-analytics": "5.32.0",
+        "@algolia/client-common": "5.32.0",
+        "@algolia/client-insights": "5.32.0",
+        "@algolia/client-personalization": "5.32.0",
+        "@algolia/client-query-suggestions": "5.32.0",
+        "@algolia/client-search": "5.32.0",
+        "@algolia/ingestion": "1.32.0",
+        "@algolia/monitoring": "1.32.0",
+        "@algolia/recommend": "5.32.0",
+        "@algolia/requester-browser-xhr": "5.32.0",
+        "@algolia/requester-fetch": "5.32.0",
+        "@algolia/requester-node-http": "5.32.0"
+      },
+      "engines": {
+        "node": ">= 14.0.0"
+      }
+    },
+    "node_modules/argparse": {
+      "version": "1.0.10",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/argparse/-/argparse-1.0.10.tgz",
+      "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+      "license": "MIT",
+      "dependencies": {
+        "sprintf-js": "~1.0.2"
+      }
+    },
+    "node_modules/birpc": {
+      "version": "2.4.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/birpc/-/birpc-2.4.0.tgz",
+      "integrity": "sha512-5IdNxTyhXHv2UlgnPHQ0h+5ypVmkrYHzL8QT+DwFZ//2N/oNV8Ch+BCRmTJ3x6/z9Axo/cXYBc9eprsUVK/Jsg==",
+      "dev": true,
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/sponsors/antfu"
+      }
+    },
+    "node_modules/ccount": {
+      "version": "2.0.1",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/ccount/-/ccount-2.0.1.tgz",
+      "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==",
+      "dev": true,
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
+    "node_modules/character-entities-html4": {
+      "version": "2.1.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/character-entities-html4/-/character-entities-html4-2.1.0.tgz",
+      "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==",
+      "dev": true,
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
+    "node_modules/character-entities-legacy": {
+      "version": "3.0.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz",
+      "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==",
+      "dev": true,
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
+    "node_modules/comma-separated-tokens": {
+      "version": "2.0.3",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
+      "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==",
+      "dev": true,
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
+    "node_modules/copy-anything": {
+      "version": "3.0.5",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/copy-anything/-/copy-anything-3.0.5.tgz",
+      "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-what": "^4.1.8"
+      },
+      "engines": {
+        "node": ">=12.13"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/mesqueeb"
+      }
+    },
+    "node_modules/csstype": {
+      "version": "3.1.3",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/csstype/-/csstype-3.1.3.tgz",
+      "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/dequal": {
+      "version": "2.0.3",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/dequal/-/dequal-2.0.3.tgz",
+      "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/devlop": {
+      "version": "1.1.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/devlop/-/devlop-1.1.0.tgz",
+      "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "dequal": "^2.0.0"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
+    "node_modules/entities": {
+      "version": "4.5.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/entities/-/entities-4.5.0.tgz",
+      "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+      "license": "BSD-2-Clause",
+      "engines": {
+        "node": ">=0.12"
+      },
+      "funding": {
+        "url": "https://github.com/fb55/entities?sponsor=1"
+      }
+    },
+    "node_modules/esbuild": {
+      "version": "0.25.6",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/esbuild/-/esbuild-0.25.6.tgz",
+      "integrity": "sha512-GVuzuUwtdsghE3ocJ9Bs8PNoF13HNQ5TXbEi2AhvVb8xU1Iwt9Fos9FEamfoee+u/TOsn7GUWc04lz46n2bbTg==",
+      "dev": true,
+      "hasInstallScript": true,
+      "license": "MIT",
+      "bin": {
+        "esbuild": "bin/esbuild"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "optionalDependencies": {
+        "@esbuild/aix-ppc64": "0.25.6",
+        "@esbuild/android-arm": "0.25.6",
+        "@esbuild/android-arm64": "0.25.6",
+        "@esbuild/android-x64": "0.25.6",
+        "@esbuild/darwin-arm64": "0.25.6",
+        "@esbuild/darwin-x64": "0.25.6",
+        "@esbuild/freebsd-arm64": "0.25.6",
+        "@esbuild/freebsd-x64": "0.25.6",
+        "@esbuild/linux-arm": "0.25.6",
+        "@esbuild/linux-arm64": "0.25.6",
+        "@esbuild/linux-ia32": "0.25.6",
+        "@esbuild/linux-loong64": "0.25.6",
+        "@esbuild/linux-mips64el": "0.25.6",
+        "@esbuild/linux-ppc64": "0.25.6",
+        "@esbuild/linux-riscv64": "0.25.6",
+        "@esbuild/linux-s390x": "0.25.6",
+        "@esbuild/linux-x64": "0.25.6",
+        "@esbuild/netbsd-arm64": "0.25.6",
+        "@esbuild/netbsd-x64": "0.25.6",
+        "@esbuild/openbsd-arm64": "0.25.6",
+        "@esbuild/openbsd-x64": "0.25.6",
+        "@esbuild/openharmony-arm64": "0.25.6",
+        "@esbuild/sunos-x64": "0.25.6",
+        "@esbuild/win32-arm64": "0.25.6",
+        "@esbuild/win32-ia32": "0.25.6",
+        "@esbuild/win32-x64": "0.25.6"
+      }
+    },
+    "node_modules/esprima": {
+      "version": "4.0.1",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/esprima/-/esprima-4.0.1.tgz",
+      "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+      "license": "BSD-2-Clause",
+      "bin": {
+        "esparse": "bin/esparse.js",
+        "esvalidate": "bin/esvalidate.js"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/estree-walker": {
+      "version": "2.0.2",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/estree-walker/-/estree-walker-2.0.2.tgz",
+      "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/extend-shallow": {
+      "version": "2.0.1",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/extend-shallow/-/extend-shallow-2.0.1.tgz",
+      "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
+      "license": "MIT",
+      "dependencies": {
+        "is-extendable": "^0.1.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/fdir": {
+      "version": "6.4.6",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/fdir/-/fdir-6.4.6.tgz",
+      "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==",
+      "dev": true,
+      "license": "MIT",
+      "peerDependencies": {
+        "picomatch": "^3 || ^4"
+      },
+      "peerDependenciesMeta": {
+        "picomatch": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/focus-trap": {
+      "version": "7.6.5",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/focus-trap/-/focus-trap-7.6.5.tgz",
+      "integrity": "sha512-7Ke1jyybbbPZyZXFxEftUtxFGLMpE2n6A+z//m4CRDlj0hW+o3iYSmh8nFlYMurOiJVDmJRilUQtJr08KfIxlg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "tabbable": "^6.2.0"
+      }
+    },
+    "node_modules/fsevents": {
+      "version": "2.3.3",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/fsevents/-/fsevents-2.3.3.tgz",
+      "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+      "dev": true,
+      "hasInstallScript": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+      }
+    },
+    "node_modules/gray-matter": {
+      "version": "4.0.3",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/gray-matter/-/gray-matter-4.0.3.tgz",
+      "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==",
+      "license": "MIT",
+      "dependencies": {
+        "js-yaml": "^3.13.1",
+        "kind-of": "^6.0.2",
+        "section-matter": "^1.0.0",
+        "strip-bom-string": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=6.0"
+      }
+    },
+    "node_modules/hast-util-to-html": {
+      "version": "9.0.5",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz",
+      "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/hast": "^3.0.0",
+        "@types/unist": "^3.0.0",
+        "ccount": "^2.0.0",
+        "comma-separated-tokens": "^2.0.0",
+        "hast-util-whitespace": "^3.0.0",
+        "html-void-elements": "^3.0.0",
+        "mdast-util-to-hast": "^13.0.0",
+        "property-information": "^7.0.0",
+        "space-separated-tokens": "^2.0.0",
+        "stringify-entities": "^4.0.0",
+        "zwitch": "^2.0.4"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/hast-util-whitespace": {
+      "version": "3.0.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz",
+      "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/hast": "^3.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/hookable": {
+      "version": "5.5.3",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/hookable/-/hookable-5.5.3.tgz",
+      "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/html-void-elements": {
+      "version": "3.0.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/html-void-elements/-/html-void-elements-3.0.0.tgz",
+      "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==",
+      "dev": true,
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
+    "node_modules/is-extendable": {
+      "version": "0.1.1",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/is-extendable/-/is-extendable-0.1.1.tgz",
+      "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/is-what": {
+      "version": "4.1.16",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/is-what/-/is-what-4.1.16.tgz",
+      "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=12.13"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/mesqueeb"
+      }
+    },
+    "node_modules/js-yaml": {
+      "version": "3.14.1",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/js-yaml/-/js-yaml-3.14.1.tgz",
+      "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+      "license": "MIT",
+      "dependencies": {
+        "argparse": "^1.0.7",
+        "esprima": "^4.0.0"
+      },
+      "bin": {
+        "js-yaml": "bin/js-yaml.js"
+      }
+    },
+    "node_modules/kind-of": {
+      "version": "6.0.3",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/kind-of/-/kind-of-6.0.3.tgz",
+      "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/linkify-it": {
+      "version": "5.0.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/linkify-it/-/linkify-it-5.0.0.tgz",
+      "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==",
+      "license": "MIT",
+      "dependencies": {
+        "uc.micro": "^2.0.0"
+      }
+    },
+    "node_modules/magic-string": {
+      "version": "0.30.17",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/magic-string/-/magic-string-0.30.17.tgz",
+      "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/sourcemap-codec": "^1.5.0"
+      }
+    },
+    "node_modules/mark.js": {
+      "version": "8.11.1",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/mark.js/-/mark.js-8.11.1.tgz",
+      "integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/markdown-it": {
+      "version": "14.1.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/markdown-it/-/markdown-it-14.1.0.tgz",
+      "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==",
+      "license": "MIT",
+      "dependencies": {
+        "argparse": "^2.0.1",
+        "entities": "^4.4.0",
+        "linkify-it": "^5.0.0",
+        "mdurl": "^2.0.0",
+        "punycode.js": "^2.3.1",
+        "uc.micro": "^2.1.0"
+      },
+      "bin": {
+        "markdown-it": "bin/markdown-it.mjs"
+      }
+    },
+    "node_modules/markdown-it/node_modules/argparse": {
+      "version": "2.0.1",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/argparse/-/argparse-2.0.1.tgz",
+      "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+      "license": "Python-2.0"
+    },
+    "node_modules/mdast-util-to-hast": {
+      "version": "13.2.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz",
+      "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/hast": "^3.0.0",
+        "@types/mdast": "^4.0.0",
+        "@ungap/structured-clone": "^1.0.0",
+        "devlop": "^1.0.0",
+        "micromark-util-sanitize-uri": "^2.0.0",
+        "trim-lines": "^3.0.0",
+        "unist-util-position": "^5.0.0",
+        "unist-util-visit": "^5.0.0",
+        "vfile": "^6.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/mdurl": {
+      "version": "2.0.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/mdurl/-/mdurl-2.0.0.tgz",
+      "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==",
+      "license": "MIT"
+    },
+    "node_modules/micromark-util-character": {
+      "version": "2.1.1",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/micromark-util-character/-/micromark-util-character-2.1.1.tgz",
+      "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "micromark-util-symbol": "^2.0.0",
+        "micromark-util-types": "^2.0.0"
+      }
+    },
+    "node_modules/micromark-util-encode": {
+      "version": "2.0.1",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz",
+      "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
+      ],
+      "license": "MIT"
+    },
+    "node_modules/micromark-util-sanitize-uri": {
+      "version": "2.0.1",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz",
+      "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "micromark-util-character": "^2.0.0",
+        "micromark-util-encode": "^2.0.0",
+        "micromark-util-symbol": "^2.0.0"
+      }
+    },
+    "node_modules/micromark-util-symbol": {
+      "version": "2.0.1",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz",
+      "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
+      ],
+      "license": "MIT"
+    },
+    "node_modules/micromark-util-types": {
+      "version": "2.0.2",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/micromark-util-types/-/micromark-util-types-2.0.2.tgz",
+      "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
+      ],
+      "license": "MIT"
+    },
+    "node_modules/minisearch": {
+      "version": "7.1.2",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/minisearch/-/minisearch-7.1.2.tgz",
+      "integrity": "sha512-R1Pd9eF+MD5JYDDSPAp/q1ougKglm14uEkPMvQ/05RGmx6G9wvmLTrTI/Q5iPNJLYqNdsDQ7qTGIcNWR+FrHmA==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/mitt": {
+      "version": "3.0.1",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/mitt/-/mitt-3.0.1.tgz",
+      "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/nanoid": {
+      "version": "3.3.11",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/nanoid/-/nanoid-3.3.11.tgz",
+      "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "license": "MIT",
+      "bin": {
+        "nanoid": "bin/nanoid.cjs"
+      },
+      "engines": {
+        "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+      }
+    },
+    "node_modules/oniguruma-parser": {
+      "version": "0.12.1",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/oniguruma-parser/-/oniguruma-parser-0.12.1.tgz",
+      "integrity": "sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/oniguruma-to-es": {
+      "version": "4.3.3",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/oniguruma-to-es/-/oniguruma-to-es-4.3.3.tgz",
+      "integrity": "sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "oniguruma-parser": "^0.12.1",
+        "regex": "^6.0.1",
+        "regex-recursion": "^6.0.2"
+      }
+    },
+    "node_modules/perfect-debounce": {
+      "version": "1.0.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/perfect-debounce/-/perfect-debounce-1.0.0.tgz",
+      "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/picocolors": {
+      "version": "1.1.1",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/picocolors/-/picocolors-1.1.1.tgz",
+      "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/picomatch": {
+      "version": "4.0.2",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/picomatch/-/picomatch-4.0.2.tgz",
+      "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/jonschlinkert"
+      }
+    },
+    "node_modules/postcss": {
+      "version": "8.5.6",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/postcss/-/postcss-8.5.6.tgz",
+      "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/postcss/"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/postcss"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "nanoid": "^3.3.11",
+        "picocolors": "^1.1.1",
+        "source-map-js": "^1.2.1"
+      },
+      "engines": {
+        "node": "^10 || ^12 || >=14"
+      }
+    },
+    "node_modules/preact": {
+      "version": "10.26.9",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/preact/-/preact-10.26.9.tgz",
+      "integrity": "sha512-SSjF9vcnF27mJK1XyFMNJzFd5u3pQiATFqoaDy03XuN00u4ziveVVEGt5RKJrDR8MHE/wJo9Nnad56RLzS2RMA==",
+      "dev": true,
+      "license": "MIT",
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/preact"
+      }
+    },
+    "node_modules/property-information": {
+      "version": "7.1.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/property-information/-/property-information-7.1.0.tgz",
+      "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==",
+      "dev": true,
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
+    "node_modules/punycode.js": {
+      "version": "2.3.1",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/punycode.js/-/punycode.js-2.3.1.tgz",
+      "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/regex": {
+      "version": "6.0.1",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/regex/-/regex-6.0.1.tgz",
+      "integrity": "sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "regex-utilities": "^2.3.0"
+      }
+    },
+    "node_modules/regex-recursion": {
+      "version": "6.0.2",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/regex-recursion/-/regex-recursion-6.0.2.tgz",
+      "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "regex-utilities": "^2.3.0"
+      }
+    },
+    "node_modules/regex-utilities": {
+      "version": "2.3.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/regex-utilities/-/regex-utilities-2.3.0.tgz",
+      "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/rfdc": {
+      "version": "1.4.1",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/rfdc/-/rfdc-1.4.1.tgz",
+      "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/rollup": {
+      "version": "4.45.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/rollup/-/rollup-4.45.0.tgz",
+      "integrity": "sha512-WLjEcJRIo7i3WDDgOIJqVI2d+lAC3EwvOGy+Xfq6hs+GQuAA4Di/H72xmXkOhrIWFg2PFYSKZYfH0f4vfKXN4A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/estree": "1.0.8"
+      },
+      "bin": {
+        "rollup": "dist/bin/rollup"
+      },
+      "engines": {
+        "node": ">=18.0.0",
+        "npm": ">=8.0.0"
+      },
+      "optionalDependencies": {
+        "@rollup/rollup-android-arm-eabi": "4.45.0",
+        "@rollup/rollup-android-arm64": "4.45.0",
+        "@rollup/rollup-darwin-arm64": "4.45.0",
+        "@rollup/rollup-darwin-x64": "4.45.0",
+        "@rollup/rollup-freebsd-arm64": "4.45.0",
+        "@rollup/rollup-freebsd-x64": "4.45.0",
+        "@rollup/rollup-linux-arm-gnueabihf": "4.45.0",
+        "@rollup/rollup-linux-arm-musleabihf": "4.45.0",
+        "@rollup/rollup-linux-arm64-gnu": "4.45.0",
+        "@rollup/rollup-linux-arm64-musl": "4.45.0",
+        "@rollup/rollup-linux-loongarch64-gnu": "4.45.0",
+        "@rollup/rollup-linux-powerpc64le-gnu": "4.45.0",
+        "@rollup/rollup-linux-riscv64-gnu": "4.45.0",
+        "@rollup/rollup-linux-riscv64-musl": "4.45.0",
+        "@rollup/rollup-linux-s390x-gnu": "4.45.0",
+        "@rollup/rollup-linux-x64-gnu": "4.45.0",
+        "@rollup/rollup-linux-x64-musl": "4.45.0",
+        "@rollup/rollup-win32-arm64-msvc": "4.45.0",
+        "@rollup/rollup-win32-ia32-msvc": "4.45.0",
+        "@rollup/rollup-win32-x64-msvc": "4.45.0",
+        "fsevents": "~2.3.2"
+      }
+    },
+    "node_modules/search-insights": {
+      "version": "2.17.3",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/search-insights/-/search-insights-2.17.3.tgz",
+      "integrity": "sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==",
+      "dev": true,
+      "license": "MIT",
+      "peer": true
+    },
+    "node_modules/section-matter": {
+      "version": "1.0.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/section-matter/-/section-matter-1.0.0.tgz",
+      "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==",
+      "license": "MIT",
+      "dependencies": {
+        "extend-shallow": "^2.0.1",
+        "kind-of": "^6.0.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/shiki": {
+      "version": "3.7.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/shiki/-/shiki-3.7.0.tgz",
+      "integrity": "sha512-ZcI4UT9n6N2pDuM2n3Jbk0sR4Swzq43nLPgS/4h0E3B/NrFn2HKElrDtceSf8Zx/OWYOo7G1SAtBLypCp+YXqg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@shikijs/core": "3.7.0",
+        "@shikijs/engine-javascript": "3.7.0",
+        "@shikijs/engine-oniguruma": "3.7.0",
+        "@shikijs/langs": "3.7.0",
+        "@shikijs/themes": "3.7.0",
+        "@shikijs/types": "3.7.0",
+        "@shikijs/vscode-textmate": "^10.0.2",
+        "@types/hast": "^3.0.4"
+      }
+    },
+    "node_modules/source-map-js": {
+      "version": "1.2.1",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/source-map-js/-/source-map-js-1.2.1.tgz",
+      "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/space-separated-tokens": {
+      "version": "2.0.2",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz",
+      "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==",
+      "dev": true,
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
+    "node_modules/speakingurl": {
+      "version": "14.0.1",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/speakingurl/-/speakingurl-14.0.1.tgz",
+      "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/sprintf-js": {
+      "version": "1.0.3",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/sprintf-js/-/sprintf-js-1.0.3.tgz",
+      "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
+      "license": "BSD-3-Clause"
+    },
+    "node_modules/stringify-entities": {
+      "version": "4.0.4",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/stringify-entities/-/stringify-entities-4.0.4.tgz",
+      "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "character-entities-html4": "^2.0.0",
+        "character-entities-legacy": "^3.0.0"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
+    "node_modules/strip-bom-string": {
+      "version": "1.0.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/strip-bom-string/-/strip-bom-string-1.0.0.tgz",
+      "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/superjson": {
+      "version": "2.2.2",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/superjson/-/superjson-2.2.2.tgz",
+      "integrity": "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "copy-anything": "^3.0.2"
+      },
+      "engines": {
+        "node": ">=16"
+      }
+    },
+    "node_modules/tabbable": {
+      "version": "6.2.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/tabbable/-/tabbable-6.2.0.tgz",
+      "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/tinyglobby": {
+      "version": "0.2.14",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/tinyglobby/-/tinyglobby-0.2.14.tgz",
+      "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "fdir": "^6.4.4",
+        "picomatch": "^4.0.2"
+      },
+      "engines": {
+        "node": ">=12.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/SuperchupuDev"
+      }
+    },
+    "node_modules/trim-lines": {
+      "version": "3.0.1",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/trim-lines/-/trim-lines-3.0.1.tgz",
+      "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==",
+      "dev": true,
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
+    "node_modules/uc.micro": {
+      "version": "2.1.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/uc.micro/-/uc.micro-2.1.0.tgz",
+      "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==",
+      "license": "MIT"
+    },
+    "node_modules/unist-util-is": {
+      "version": "6.0.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/unist-util-is/-/unist-util-is-6.0.0.tgz",
+      "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/unist": "^3.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/unist-util-position": {
+      "version": "5.0.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/unist-util-position/-/unist-util-position-5.0.0.tgz",
+      "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/unist": "^3.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/unist-util-stringify-position": {
+      "version": "4.0.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz",
+      "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/unist": "^3.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/unist-util-visit": {
+      "version": "5.0.0",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/unist-util-visit/-/unist-util-visit-5.0.0.tgz",
+      "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/unist": "^3.0.0",
+        "unist-util-is": "^6.0.0",
+        "unist-util-visit-parents": "^6.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/unist-util-visit-parents": {
+      "version": "6.0.1",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz",
+      "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/unist": "^3.0.0",
+        "unist-util-is": "^6.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/vfile": {
+      "version": "6.0.3",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/vfile/-/vfile-6.0.3.tgz",
+      "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/unist": "^3.0.0",
+        "vfile-message": "^4.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/vfile-message": {
+      "version": "4.0.2",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/vfile-message/-/vfile-message-4.0.2.tgz",
+      "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/unist": "^3.0.0",
+        "unist-util-stringify-position": "^4.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/vite": {
+      "version": "7.0.4",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/vite/-/vite-7.0.4.tgz",
+      "integrity": "sha512-SkaSguuS7nnmV7mfJ8l81JGBFV7Gvzp8IzgE8A8t23+AxuNX61Q5H1Tpz5efduSN7NHC8nQXD3sKQKZAu5mNEA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "esbuild": "^0.25.0",
+        "fdir": "^6.4.6",
+        "picomatch": "^4.0.2",
+        "postcss": "^8.5.6",
+        "rollup": "^4.40.0",
+        "tinyglobby": "^0.2.14"
+      },
+      "bin": {
+        "vite": "bin/vite.js"
+      },
+      "engines": {
+        "node": "^20.19.0 || >=22.12.0"
+      },
+      "funding": {
+        "url": "https://github.com/vitejs/vite?sponsor=1"
+      },
+      "optionalDependencies": {
+        "fsevents": "~2.3.3"
+      },
+      "peerDependencies": {
+        "@types/node": "^20.19.0 || >=22.12.0",
+        "jiti": ">=1.21.0",
+        "less": "^4.0.0",
+        "lightningcss": "^1.21.0",
+        "sass": "^1.70.0",
+        "sass-embedded": "^1.70.0",
+        "stylus": ">=0.54.8",
+        "sugarss": "^5.0.0",
+        "terser": "^5.16.0",
+        "tsx": "^4.8.1",
+        "yaml": "^2.4.2"
+      },
+      "peerDependenciesMeta": {
+        "@types/node": {
+          "optional": true
+        },
+        "jiti": {
+          "optional": true
+        },
+        "less": {
+          "optional": true
+        },
+        "lightningcss": {
+          "optional": true
+        },
+        "sass": {
+          "optional": true
+        },
+        "sass-embedded": {
+          "optional": true
+        },
+        "stylus": {
+          "optional": true
+        },
+        "sugarss": {
+          "optional": true
+        },
+        "terser": {
+          "optional": true
+        },
+        "tsx": {
+          "optional": true
+        },
+        "yaml": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/vitepress": {
+      "version": "2.0.0-alpha.8",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/vitepress/-/vitepress-2.0.0-alpha.8.tgz",
+      "integrity": "sha512-4LJZ7c/b68ch69gh6WaQgQGqkha/KxCFlSN7vCyIjxW7WbdI+pWe110+nnxXpvN43OH/3EoYNEPkV28z0WPSYA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@docsearch/css": "^3.9.0",
+        "@docsearch/js": "^3.9.0",
+        "@iconify-json/simple-icons": "^1.2.42",
+        "@shikijs/core": "^3.7.0",
+        "@shikijs/transformers": "^3.7.0",
+        "@shikijs/types": "^3.7.0",
+        "@vitejs/plugin-vue": "^6.0.0",
+        "@vue/devtools-api": "^7.7.7",
+        "@vue/shared": "^3.5.17",
+        "@vueuse/core": "^13.5.0",
+        "@vueuse/integrations": "^13.5.0",
+        "focus-trap": "^7.6.5",
+        "mark.js": "8.11.1",
+        "minisearch": "^7.1.2",
+        "shiki": "^3.7.0",
+        "vite": "^7.0.3",
+        "vue": "^3.5.17"
+      },
+      "bin": {
+        "vitepress": "bin/vitepress.js"
+      },
+      "peerDependencies": {
+        "markdown-it-mathjax3": "^4",
+        "oxc-minify": "^0.75.1",
+        "postcss": "^8"
+      },
+      "peerDependenciesMeta": {
+        "markdown-it-mathjax3": {
+          "optional": true
+        },
+        "oxc-minify": {
+          "optional": true
+        },
+        "postcss": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/vue": {
+      "version": "3.5.17",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/vue/-/vue-3.5.17.tgz",
+      "integrity": "sha512-LbHV3xPN9BeljML+Xctq4lbz2lVHCR6DtbpTf5XIO6gugpXUN49j2QQPcMj086r9+AkJ0FfUT8xjulKKBkkr9g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@vue/compiler-dom": "3.5.17",
+        "@vue/compiler-sfc": "3.5.17",
+        "@vue/runtime-dom": "3.5.17",
+        "@vue/server-renderer": "3.5.17",
+        "@vue/shared": "3.5.17"
+      },
+      "peerDependencies": {
+        "typescript": "*"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/zwitch": {
+      "version": "2.0.4",
+      "resolved": "http://jfrog.cloud.qiyi.domain/artifactory/api/npm/npm/zwitch/-/zwitch-2.0.4.tgz",
+      "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==",
+      "dev": true,
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    }
+  }
+}

+ 9 - 3
package.json

@@ -1,10 +1,16 @@
 {
+  "type": "module",
   "scripts": {
-    "docs:dev": "vitepress dev docs",
-    "docs:build": "vitepress build docs",
-    "docs:preview": "vitepress preview docs"
+    "docs:dev": "node scripts/generate-blog-data.js && vitepress dev docs",
+    "docs:build": "node scripts/generate-blog-data.js && vitepress build docs",
+    "docs:preview": "vitepress preview docs",
+    "generate-blog": "node scripts/generate-blog-data.js"
   },
   "devDependencies": {
     "vitepress": "^2.0.0-alpha.6"
+  },
+  "dependencies": {
+    "gray-matter": "^4.0.3",
+    "markdown-it": "^14.1.0"
   }
 }

+ 66 - 0
scripts/add-blog-nav.js

@@ -0,0 +1,66 @@
+#!/usr/bin/env node
+
+import { readdirSync, readFileSync, writeFileSync } from 'fs'
+import { join } from 'path'
+
+// 为英文博客文章添加导航组件
+function addNavToEnglishPosts() {
+  const postsDir = join(process.cwd(), 'docs/posts')
+  const files = readdirSync(postsDir)
+  
+  for (const file of files) {
+    if (file.endsWith('.md')) {
+      const filePath = join(postsDir, file)
+      const content = readFileSync(filePath, 'utf-8')
+      
+      // 检查是否已经添加了导航组件
+      if (!content.includes('<BlogPostNav />')) {
+        const navComponent = `
+
+<script setup>
+import BlogPostNav from '../.vitepress/theme/BlogPostNav.vue'
+</script>
+
+<BlogPostNav />`
+        
+        const newContent = content + navComponent
+        writeFileSync(filePath, newContent)
+        console.log(`Added nav to: ${file}`)
+      }
+    }
+  }
+}
+
+// 为中文博客文章添加导航组件
+function addNavToChinesePosts() {
+  const postsDir = join(process.cwd(), 'docs/zh/posts')
+  const files = readdirSync(postsDir)
+  
+  for (const file of files) {
+    if (file.endsWith('.md')) {
+      const filePath = join(postsDir, file)
+      const content = readFileSync(filePath, 'utf-8')
+      
+      // 检查是否已经添加了导航组件
+      if (!content.includes('<BlogPostNavZh />')) {
+        const navComponent = `
+
+<script setup>
+import BlogPostNavZh from '../../.vitepress/theme/BlogPostNavZh.vue'
+</script>
+
+<BlogPostNavZh />`
+        
+        const newContent = content + navComponent
+        writeFileSync(filePath, newContent)
+        console.log(`Added nav to: ${file}`)
+      }
+    }
+  }
+}
+
+// 执行脚本
+console.log('Adding navigation components to blog posts...')
+addNavToEnglishPosts()
+addNavToChinesePosts()
+console.log('Done!') 

+ 52 - 0
scripts/add-simple-nav.js

@@ -0,0 +1,52 @@
+#!/usr/bin/env node
+
+import { readdirSync, readFileSync, writeFileSync } from 'fs'
+import { join } from 'path'
+
+// 为英文博客文章添加导航标记
+function addNavToEnglishPosts() {
+  const postsDir = join(process.cwd(), 'docs/posts')
+  const files = readdirSync(postsDir)
+  
+  for (const file of files) {
+    if (file.endsWith('.md')) {
+      const filePath = join(postsDir, file)
+      const content = readFileSync(filePath, 'utf-8')
+      
+      // 检查是否已经添加了导航标记
+      if (!content.includes('<!-- BLOG_NAV -->')) {
+        const navMark = '\n\n<!-- BLOG_NAV -->\n'
+        const newContent = content + navMark
+        writeFileSync(filePath, newContent)
+        console.log(`Added nav mark to: ${file}`)
+      }
+    }
+  }
+}
+
+// 为中文博客文章添加导航标记
+function addNavToChinesePosts() {
+  const postsDir = join(process.cwd(), 'docs/zh/posts')
+  const files = readdirSync(postsDir)
+  
+  for (const file of files) {
+    if (file.endsWith('.md')) {
+      const filePath = join(postsDir, file)
+      const content = readFileSync(filePath, 'utf-8')
+      
+      // 检查是否已经添加了导航标记
+      if (!content.includes('<!-- BLOG_NAV -->')) {
+        const navMark = '\n\n<!-- BLOG_NAV -->\n'
+        const newContent = content + navMark
+        writeFileSync(filePath, newContent)
+        console.log(`Added nav mark to: ${file}`)
+      }
+    }
+  }
+}
+
+// 执行脚本
+console.log('Adding navigation marks to blog posts...')
+addNavToEnglishPosts()
+addNavToChinesePosts()
+console.log('Done!') 

+ 119 - 0
scripts/generate-blog-data.js

@@ -0,0 +1,119 @@
+#!/usr/bin/env node
+
+import { readdirSync, readFileSync, writeFileSync } from 'fs'
+import { join } from 'path'
+import matter from 'gray-matter'
+import MarkdownIt from 'markdown-it'
+
+const md = new MarkdownIt()
+
+// 读取 posts 目录下的所有 markdown 文件
+function getPosts(postsDir) {
+  try {
+    const files = readdirSync(postsDir)
+    const posts = []
+    
+    for (const file of files) {
+      if (file.endsWith('.md')) {
+        const filePath = join(postsDir, file)
+        const content = readFileSync(filePath, 'utf-8')
+        const { data: frontmatter } = matter(content)
+        
+        if (frontmatter.title && frontmatter.date) {
+          posts.push({
+            title: frontmatter.title,
+            url: `/posts/${file.replace('.md', '')}`,
+            date: formatDate(frontmatter.date),
+            author: frontmatter.author,
+            tags: frontmatter.tags,
+            excerpt: frontmatter.excerpt
+              ? md.render(frontmatter.excerpt)
+              : generateExcerpt(content)
+          })
+        }
+      }
+    }
+    
+    // 按日期排序,最新的在前
+    return posts.sort((a, b) => new Date(b.date.time) - new Date(a.date.time))
+  } catch (error) {
+    console.error('Error reading posts:', error)
+    return []
+  }
+}
+
+function formatDate(raw) {
+  const date = new Date(raw)
+  date.setUTCHours(12)
+  return {
+    time: +date,
+    string: date.toLocaleDateString('en-US', {
+      year: 'numeric',
+      month: 'long',
+      day: 'numeric'
+    })
+  }
+}
+
+function generateExcerpt(content) {
+  // 移除 frontmatter
+  const contentWithoutFrontmatter = content.replace(/---[\s\S]*?---/, '')
+  
+  // 按段落分割(空行分隔)
+  const paragraphs = contentWithoutFrontmatter
+    .split(/\n\s*\n/)
+    .map(p => p.trim())
+    .filter(p => p.length > 0)
+  
+  // 提取前三个完整段落
+  let excerpt = ''
+  let paragraphCount = 0
+  const maxParagraphs = 3
+  
+  for (const paragraph of paragraphs) {
+    // 跳过标题行(以 # 开头)
+    if (paragraph.startsWith('#')) {
+      continue
+    }
+    
+    // 如果段落太长(超过300字符),截取前300字符
+    const truncatedParagraph = paragraph.length > 300 
+      ? paragraph.slice(0, 300).trim() + '...'
+      : paragraph
+    
+    excerpt += truncatedParagraph + '\n\n'
+    paragraphCount++
+    
+    if (paragraphCount >= maxParagraphs) {
+      break
+    }
+  }
+  
+  // 如果没有找到合适的段落,使用原来的方法
+  if (!excerpt.trim()) {
+    const rawExcerpt = contentWithoutFrontmatter.slice(0, 200).trim() + '...'
+    return md.render(rawExcerpt)
+  }
+  
+  // 转成 HTML
+  return md.render(excerpt.trim())
+}
+
+// 生成英文博客数据
+const enPosts = getPosts(join(process.cwd(), 'docs/posts'))
+const enData = `export const posts = ${JSON.stringify(enPosts, null, 2)}`
+
+// 生成中文博客数据
+const zhPosts = getPosts(join(process.cwd(), 'docs/zh/posts'))
+// 为中文博客文章添加 /zh/ 前缀
+const zhPostsWithPrefix = zhPosts.map(post => ({
+  ...post,
+  url: `/zh${post.url}`
+}))
+const zhData = `export const posts = ${JSON.stringify(zhPostsWithPrefix, null, 2)}`
+
+// 写入数据文件
+writeFileSync(join(process.cwd(), 'docs/.vitepress/theme/blog-data.js'), enData)
+writeFileSync(join(process.cwd(), 'docs/.vitepress/theme/zh-blog-data.js'), zhData)
+
+console.log(`Generated blog data: ${enPosts.length} English posts, ${zhPosts.length} Chinese posts`) 

+ 340 - 0
scripts/generate-blog-posts.js

@@ -0,0 +1,340 @@
+const fs = require('fs');
+const path = require('path');
+
+// 英文博客文章模板
+const enTemplates = [
+  {
+    title: "Getting Started with Xmake",
+    date: "2024-01-05",
+    author: "waruqi",
+    tags: ["tutorial", "getting-started"],
+    content: `# Getting Started with Xmake
+
+Xmake is a modern build system that makes C/C++ development easier and more efficient. In this guide, we'll walk through the basics of setting up and using Xmake.
+
+## Installation
+
+Installing Xmake is straightforward. You can use one of the following methods:
+
+### Using curl (Linux/macOS)
+\`\`\`bash
+curl -fsSL https://xmake.io/install.sh | bash
+\`\`\`
+
+### Using PowerShell (Windows)
+\`\`\`powershell
+Invoke-Expression (Invoke-Webrequest 'https://xmake.io/install.ps1' -UseBasicParsing).Content
+\`\`\`
+
+## Creating Your First Project
+
+Let's create a simple C++ project:
+
+\`\`\`bash
+xmake create -l c++ hello
+cd hello
+xmake
+\`\`\`
+
+This creates a basic C++ project with the following structure:
+- src/main.cpp
+- xmake.lua
+
+## Basic Configuration
+
+The xmake.lua file contains your project configuration:
+
+\`\`\`lua
+add_rules("mode.debug", "mode.release")
+
+target("hello")
+    set_kind("binary")
+    add_files("src/*.cpp")
+\`\`\`
+
+## Building and Running
+
+\`\`\`bash
+xmake build
+xmake run
+\`\`\`
+
+That's it! You've successfully created and built your first Xmake project.`
+  },
+  {
+    title: "Advanced Package Management",
+    date: "2024-01-03",
+    author: "waruqi",
+    tags: ["package-management", "advanced"],
+    content: `# Advanced Package Management with Xmake
+
+Xmake provides a powerful package management system that simplifies dependency handling in C/C++ projects.
+
+## Adding Packages
+
+Adding packages to your project is simple:
+
+\`\`\`lua
+target("myapp")
+    set_kind("binary")
+    add_files("src/*.cpp")
+    add_packages("fmt", "spdlog", "nlohmann_json")
+\`\`\`
+
+## Package Sources
+
+Xmake supports multiple package sources:
+
+- Official packages (xmake-repo)
+- Third-party packages
+- Local packages
+- System packages
+
+## Version Management
+
+You can specify package versions:
+
+\`\`\`lua
+add_packages("[email protected]", "[email protected]")
+\`\`\`
+
+## Custom Package Repositories
+
+Add your own package repositories:
+
+\`\`\`lua
+add_repositories("myrepo https://github.com/myorg/xmake-repo")
+\`\`\`
+
+This advanced package management system makes dependency handling much easier than traditional approaches.`
+  },
+  {
+    title: "IDE Integration Guide",
+    date: "2024-01-01",
+    author: "waruqi",
+    tags: ["ide", "integration"],
+    content: `# IDE Integration Guide
+
+Xmake provides excellent integration with popular IDEs and editors, making development more efficient.
+
+## VS Code Integration
+
+Install the Xmake extension for VS Code:
+
+1. Open VS Code
+2. Go to Extensions (Ctrl+Shift+X)
+3. Search for "Xmake"
+4. Install the extension
+
+## CLion Integration
+
+CLion supports Xmake projects natively:
+
+1. Open CLion
+2. Open your project directory
+3. CLion will automatically detect the xmake.lua file
+4. Configure your run configurations
+
+## Vim/Neovim Integration
+
+For Vim/Neovim users, there are several plugins available:
+
+- xmake.nvim
+- vim-xmake
+
+## Benefits of IDE Integration
+
+- IntelliSense support
+- Debugging integration
+- Build task integration
+- Error highlighting
+
+Proper IDE integration significantly improves the development experience.`
+  }
+];
+
+// 中文博客文章模板
+const zhTemplates = [
+  {
+    title: "Xmake 入门指南",
+    date: "2024-01-05",
+    author: "waruqi",
+    tags: ["教程", "入门"],
+    content: `# Xmake 入门指南
+
+Xmake 是一个现代化的构建系统,让 C/C++ 开发变得更加简单和高效。在本指南中,我们将介绍 Xmake 的基本设置和使用方法。
+
+## 安装
+
+安装 Xmake 非常简单。您可以使用以下方法之一:
+
+### 使用 curl (Linux/macOS)
+\`\`\`bash
+curl -fsSL https://xmake.io/install.sh | bash
+\`\`\`
+
+### 使用 PowerShell (Windows)
+\`\`\`powershell
+Invoke-Expression (Invoke-Webrequest 'https://xmake.io/install.ps1' -UseBasicParsing).Content
+\`\`\`
+
+## 创建您的第一个项目
+
+让我们创建一个简单的 C++ 项目:
+
+\`\`\`bash
+xmake create -l c++ hello
+cd hello
+xmake
+\`\`\`
+
+这将创建一个基本的 C++ 项目,具有以下结构:
+- src/main.cpp
+- xmake.lua
+
+## 基本配置
+
+xmake.lua 文件包含您的项目配置:
+
+\`\`\`lua
+add_rules("mode.debug", "mode.release")
+
+target("hello")
+    set_kind("binary")
+    add_files("src/*.cpp")
+\`\`\`
+
+## 构建和运行
+
+\`\`\`bash
+xmake build
+xmake run
+\`\`\`
+
+就是这样!您已经成功创建并构建了您的第一个 Xmake 项目。`
+  },
+  {
+    title: "高级包管理",
+    date: "2024-01-03",
+    author: "waruqi",
+    tags: ["包管理", "高级"],
+    content: `# Xmake 高级包管理
+
+Xmake 提供了一个强大的包管理系统,简化了 C/C++ 项目中的依赖处理。
+
+## 添加包
+
+向您的项目添加包很简单:
+
+\`\`\`lua
+target("myapp")
+    set_kind("binary")
+    add_files("src/*.cpp")
+    add_packages("fmt", "spdlog", "nlohmann_json")
+\`\`\`
+
+## 包源
+
+Xmake 支持多个包源:
+
+- 官方包 (xmake-repo)
+- 第三方包
+- 本地包
+- 系统包
+
+## 版本管理
+
+您可以指定包版本:
+
+\`\`\`lua
+add_packages("[email protected]", "[email protected]")
+\`\`\`
+
+## 自定义包仓库
+
+添加您自己的包仓库:
+
+\`\`\`lua
+add_repositories("myrepo https://github.com/myorg/xmake-repo")
+\`\`\`
+
+这个高级包管理系统使依赖处理比传统方法更加容易。`
+  },
+  {
+    title: "IDE 集成指南",
+    date: "2024-01-01",
+    author: "waruqi",
+    tags: ["ide", "集成"],
+    content: `# IDE 集成指南
+
+Xmake 为流行的 IDE 和编辑器提供了出色的集成,使开发更加高效。
+
+## VS Code 集成
+
+为 VS Code 安装 Xmake 扩展:
+
+1. 打开 VS Code
+2. 转到扩展 (Ctrl+Shift+X)
+3. 搜索 "Xmake"
+4. 安装扩展
+
+## CLion 集成
+
+CLion 原生支持 Xmake 项目:
+
+1. 打开 CLion
+2. 打开您的项目目录
+3. CLion 将自动检测 xmake.lua 文件
+4. 配置您的运行配置
+
+## Vim/Neovim 集成
+
+对于 Vim/Neovim 用户,有几个可用的插件:
+
+- xmake.nvim
+- vim-xmake
+
+## IDE 集成的好处
+
+- IntelliSense 支持
+- 调试集成
+- 构建任务集成
+- 错误高亮
+
+适当的 IDE 集成显著改善了开发体验。`
+  }
+];
+
+// 生成英文博客文章
+enTemplates.forEach((template, index) => {
+  const filename = `docs/posts/post-${index + 3}.md`;
+  const content = `---
+title: ${template.title}
+date: ${template.date}
+author: ${template.author}
+tags: [${template.tags.join(', ')}]
+---
+
+${template.content}`;
+  
+  fs.writeFileSync(filename, content);
+  console.log(`Generated: ${filename}`);
+});
+
+// 生成中文博客文章
+zhTemplates.forEach((template, index) => {
+  const filename = `docs/zh/posts/post-${index + 3}.md`;
+  const content = `---
+title: ${template.title}
+date: ${template.date}
+author: ${template.author}
+tags: [${template.tags.join(', ')}]
+---
+
+${template.content}`;
+  
+  fs.writeFileSync(filename, content);
+  console.log(`Generated: ${filename}`);
+});
+
+console.log('Blog posts generation completed!'); 

+ 52 - 0
scripts/remove-blog-nav.js

@@ -0,0 +1,52 @@
+#!/usr/bin/env node
+
+import { readdirSync, readFileSync, writeFileSync } from 'fs'
+import { join } from 'path'
+
+// 移除英文博客文章中的导航组件
+function removeNavFromEnglishPosts() {
+  const postsDir = join(process.cwd(), 'docs/posts')
+  const files = readdirSync(postsDir)
+  
+  for (const file of files) {
+    if (file.endsWith('.md')) {
+      const filePath = join(postsDir, file)
+      const content = readFileSync(filePath, 'utf-8')
+      
+      // 移除导航组件
+      const cleanedContent = content.replace(/\n<script setup>\nimport BlogPostNav from '\.\.\/\.vitepress\/theme\/BlogPostNav\.vue'\n<\/script>\n\n<BlogPostNav \/>/g, '')
+      
+      if (content !== cleanedContent) {
+        writeFileSync(filePath, cleanedContent)
+        console.log(`Removed nav from: ${file}`)
+      }
+    }
+  }
+}
+
+// 移除中文博客文章中的导航组件
+function removeNavFromChinesePosts() {
+  const postsDir = join(process.cwd(), 'docs/zh/posts')
+  const files = readdirSync(postsDir)
+  
+  for (const file of files) {
+    if (file.endsWith('.md')) {
+      const filePath = join(postsDir, file)
+      const content = readFileSync(filePath, 'utf-8')
+      
+      // 移除导航组件
+      const cleanedContent = content.replace(/\n<script setup>\nimport BlogPostNavZh from '\.\.\/\.\.\/\.vitepress\/theme\/BlogPostNavZh\.vue'\n<\/script>\n\n<BlogPostNavZh \/>/g, '')
+      
+      if (content !== cleanedContent) {
+        writeFileSync(filePath, cleanedContent)
+        console.log(`Removed nav from: ${file}`)
+      }
+    }
+  }
+}
+
+// 执行脚本
+console.log('Removing navigation components from blog posts...')
+removeNavFromEnglishPosts()
+removeNavFromChinesePosts()
+console.log('Done!') 

+ 54 - 0
scripts/replace-nav-marks.js

@@ -0,0 +1,54 @@
+#!/usr/bin/env node
+
+import { readdirSync, readFileSync, writeFileSync } from 'fs'
+import { join } from 'path'
+
+// 替换英文博客文章中的导航标记
+function replaceNavInEnglishPosts() {
+  const postsDir = join(process.cwd(), 'docs/posts')
+  const files = readdirSync(postsDir)
+  
+  for (const file of files) {
+    if (file.endsWith('.md')) {
+      const filePath = join(postsDir, file)
+      const content = readFileSync(filePath, 'utf-8')
+      
+      // 替换导航标记为Vue组件
+      const navComponent = '\n\n<script setup>\nimport BlogNav from \'../.vitepress/theme/BlogNav.vue\'\n</script>\n\n<BlogNav />'
+      const newContent = content.replace('<!-- BLOG_NAV -->', navComponent)
+      
+      if (content !== newContent) {
+        writeFileSync(filePath, newContent)
+        console.log(`Replaced nav mark in: ${file}`)
+      }
+    }
+  }
+}
+
+// 替换中文博客文章中的导航标记
+function replaceNavInChinesePosts() {
+  const postsDir = join(process.cwd(), 'docs/zh/posts')
+  const files = readdirSync(postsDir)
+  
+  for (const file of files) {
+    if (file.endsWith('.md')) {
+      const filePath = join(postsDir, file)
+      const content = readFileSync(filePath, 'utf-8')
+      
+      // 替换导航标记为Vue组件
+      const navComponent = '\n\n<script setup>\nimport BlogNav from \'../../.vitepress/theme/BlogNav.vue\'\n</script>\n\n<BlogNav />'
+      const newContent = content.replace('<!-- BLOG_NAV -->', navComponent)
+      
+      if (content !== newContent) {
+        writeFileSync(filePath, newContent)
+        console.log(`Replaced nav mark in: ${file}`)
+      }
+    }
+  }
+}
+
+// 执行脚本
+console.log('Replacing navigation marks with Vue components...')
+replaceNavInEnglishPosts()
+replaceNavInChinesePosts()
+console.log('Done!')