Halo 文档
++ Halo 是一款强大易用的开源建站工具,可以通过丰富的主题和插件搭建任何类型的网站。这里汇集了安装、使用和开发 + Halo 所需的全部文档。 +
+ + 快速开始 + + +
+ diff --git a/.agents/skills/rspress-best-practices/SKILL.md b/.agents/skills/rspress-best-practices/SKILL.md new file mode 100644 index 00000000..af0370b9 --- /dev/null +++ b/.agents/skills/rspress-best-practices/SKILL.md @@ -0,0 +1,82 @@ +--- +name: rspress-best-practices +description: Rspress best practices for config, CLI workflow, content organization, frontmatter, MDX, themes, i18n, search, static assets, deployment, and debugging. Use when writing, reviewing, or troubleshooting Rspress documentation sites. +--- + +# Rspress Best Practices + +Apply these rules when writing or reviewing Rspress (v2) sites. + +## Configuration + +- Use `rspress.config.ts` and `defineConfig` from `@rspress/core` +- Set `root` explicitly when docs are not under the default `docs/` directory +- Keep site-wide settings such as `title`, `description`, `icon`, `logo`, `base`, and `lang` in config instead of repeating them in page files +- Prefer first-class Rspress options before custom theme code or low-level bundler overrides +- Keep custom theme code in a top-level `theme/` directory and import original theme pieces from `@rspress/core/theme-original` + +## CLI + +- Use `rspress dev` for local development +- Use `rspress build` for production output +- Use `rspress preview` only for local preview of the built site +- Use `rspress eject` only when CSS variables, class overrides, or layout wrapping cannot solve the customization + +## Docs Structure And Navigation + +- Keep docs content under one clear docs root and group pages by topic or workflow, not by team ownership +- Use `_meta.json` or `_nav.json` to control sidebar and navigation labels/order instead of encoding order in filenames +- Put reusable MDX snippets or shared components in shared files instead of duplicating them across pages +- Keep landing pages concise and link to deeper task-oriented guides from them + +## Writing And Frontmatter + +- Add clear `title` and `description` frontmatter, and set `sidebar`, `outline`, `navbar`, or `footer` only when page defaults are not enough +- Use `pageType: home`, `doc`, `doc-wide`, `custom`, or `blank` intentionally based on layout needs +- Write task-first headings and short intros; avoid marketing-heavy copy in technical docs +- Prefer one topic per page and split overly long pages by workflow or feature area +- Keep code examples minimal, runnable, and version-accurate + +## MDX And Components + +- Use MDX for interactive docs and embedded components, but keep the main narrative understandable as plain markdown +- Prefer documented Rspress theme/runtime APIs over importing from internal source paths +- For app-wide UI or providers, use `globalUIComponents` or theme overrides instead of repeating imports in each page + +## Theme And Styling + +- Prefer CSS variables for brand colors, spacing, and surface styling +- Prefer BEM class overrides or `Layout` slots before ejecting built-in components +- In `theme/` files, keep `export * from '@rspress/core/theme-original'` unless intentionally replacing a named export +- Avoid full component ejection unless config, CSS, and wrapping cannot meet the requirement + +## I18n, Search, And AI + +- For multilingual sites, organize locale content under per-language directories and keep navigation mirrored where practical +- Keep descriptions and other frontmatter text in the same language as the page content +- Configure search intentionally: use local search for small or medium sites, and hosted search when scale or cross-version indexing requires it +- Enable `llms` or `ssgMd` only when the site benefits from machine-readable outputs, and keep descriptions accurate because those outputs surface page summaries + +## Assets And Public Files + +- Import source-managed images and components from docs/theme source when they belong to the content +- Use `public/` only for assets that must keep stable URL paths, such as favicons, social images, or download files +- Reference public assets by absolute site path and make sure they still work when `base` is set + +## Plugins And Integration + +- Prefer official Rspress plugins for search, preview, and API-doc scenarios before building custom solutions +- For component or library docs, use `@rspress/plugin-preview` and `@rspress/plugin-api-docgen` when interactive demos or API tables are needed +- Keep plugin usage explicit in config and remove unused plugins to reduce maintenance cost + +## Build, Deploy, And Debugging + +- Validate both `rspress dev` and `rspress build`; a page that works in dev can still fail during static generation +- Verify broken links, missing assets, and wrong `base` handling before deployment +- Keep generated output out of source control unless the hosting workflow explicitly requires committed artifacts +- When debugging content issues, inspect the resolved docs root, frontmatter, and theme overrides before assuming a bundler problem + +## Documentation + +- For the latest Rspress docs, read https://rspress.rs/llms.txt +- Use the config and API docs when checking exact option names or current behavior diff --git a/.agents/skills/rspress-custom-theme/SKILL.md b/.agents/skills/rspress-custom-theme/SKILL.md new file mode 100644 index 00000000..2ee763cf --- /dev/null +++ b/.agents/skills/rspress-custom-theme/SKILL.md @@ -0,0 +1,242 @@ +--- +name: rspress-custom-theme +description: Customize Rspress themes using CSS variables, Layout slots, component wrapping, or component ejection. Use when a user wants to change the look and feel of an Rspress site, override theme components, add custom navigation/sidebar/footer content, inject global providers, or modify the default Rspress theme in any way. Also use when a user mentions theme/index.tsx, Layout slots, BEM class overrides, or rspress eject. +--- + +# Rspress Custom Theme + +Guide for customizing Rspress (v2) themes. Rspress offers four levels of customization, from lightest to heaviest. Always prefer the lightest approach that meets the requirement — lighter approaches are more maintainable and survive Rspress upgrades. + +## Workflow + +1. **Understand the user's goal** — what do they want to change? (colors, layout, inject content, replace a component entirely?) +2. **Pick the right level** using the decision flow below +3. **Set up `theme/index.tsx`** if needed (Levels 1A, 3, 4 all need it) +4. **Implement** following the patterns in this skill and reference files +5. **Verify** the user's Rspress version is v2 (imports use `@rspress/core/*` not `rspress/*`) + +## Decision Flow + +| User wants to... | Level | Approach | +| ---------------------------------------------------------------- | ----- | --------------------------- | +| Change brand colors, fonts, spacing, shadows | 1 | CSS variables | +| Adjust a specific component's style (borders, padding, etc.) | 2 | BEM class overrides | +| Add content around existing components (banners, footers, logos) | 3 | Layout slots (wrap) | +| Override MDX rendering (custom `
`, etc.) | 3 | `components` slot |
+| Wrap the app in a provider (state, analytics, auth) | 4 | Eject `Root` |
+| Replace built-in icons (logo, GitHub, search, etc.) | — | Icon re-export |
+| Completely replace a built-in component | 4 | Eject that component |
+| Add a global floating component (back-to-top, chat widget) | — | `globalUIComponents` config |
+| Control page layout structure (hide sidebar, blank page) | — | Frontmatter `pageType` |
+
+---
+
+## theme/index.tsx — The Entry Point
+
+Levels 1A, 3, and 4 all require a `theme/index.tsx` file in the project root (sibling to `docs/`). This is the single entry point for all theme customizations:
+
+```text
+project/
+├── docs/
+├── theme/
+│ ├── index.tsx # Theme entry — re-exports + overrides
+│ ├── index.css # CSS variable / BEM overrides (optional)
+│ └── components/ # Ejected components (Level 4)
+└── rspress.config.ts
+```
+
+Minimal setup:
+
+```tsx
+// theme/index.tsx
+import './index.css'; // optional
+export * from '@rspress/core/theme-original';
+```
+
+**Critical import rule**: Inside `theme/` files, always import from `@rspress/core/theme-original`. The path `@rspress/core/theme` resolves to your own `theme/index.tsx`, which causes circular imports. (In `docs/` MDX files, `@rspress/core/theme` is fine — it correctly points to your custom theme.)
+
+---
+
+## Level 1: CSS Variables
+
+Override CSS custom properties for brand colors, backgrounds, text, code blocks, and more.
+
+**Option A** — `theme/index.css` (use when you also have component overrides in `theme/index.tsx`):
+
+```css
+/* theme/index.css */
+:root {
+ --rp-c-brand: #7c3aed;
+ --rp-c-brand-light: #8b5cf6;
+ --rp-c-brand-dark: #6d28d9;
+}
+.dark {
+ --rp-c-brand: #a78bfa;
+}
+```
+
+**Option B** — `globalStyles` (use when you only need CSS changes, no component overrides):
+
+```ts
+// rspress.config.ts
+export default defineConfig({
+ globalStyles: path.join(__dirname, 'styles/custom.css'),
+});
+```
+
+> **Full variable list**: Read `references/css-variables.md` for all available CSS variables with light/dark defaults.
+
+---
+
+## Level 2: BEM Class Overrides
+
+All built-in components follow BEM naming: `.rp-[component]__[element]--[modifier]`.
+
+Common targets: `.rp-nav`, `.rp-link`, `.rp-tabs`, `.rp-codeblock`, `.rp-codeblock__title`, `.rp-nav-menu__item--active`.
+
+Use these in your CSS file for targeted style changes when CSS variables aren't granular enough.
+
+---
+
+## Level 3: Wrap (Layout Slots)
+
+Inject content at specific positions in the layout without replacing built-in components. Override `Layout` in `theme/index.tsx`:
+
+```tsx
+// theme/index.tsx
+import { Layout as OriginalLayout } from '@rspress/core/theme-original';
+export * from '@rspress/core/theme-original';
+
+export function Layout() {
+ return (
+ } bottom={ } />
+ );
+}
+```
+
+Use runtime hooks inside slot components — import from `@rspress/core/runtime`: `useDark()`, `useLang()`, `useVersion()`, `usePage()`, `useSite()`, `useFrontmatter()`, `useI18n()`.
+
+> **All slots & examples**: Read `references/layout-slots.md` for the complete slot list and usage patterns including i18n and MDX component overrides.
+
+---
+
+## Level 4: Eject
+
+Copy a built-in component's source for full replacement. Only use when wrap/slots cannot achieve the customization.
+
+```bash
+rspress eject # list available components
+rspress eject DocFooter # eject to theme/components/DocFooter/
+```
+
+Then re-export in `theme/index.tsx` (named export takes precedence over the wildcard):
+
+```tsx
+export * from '@rspress/core/theme-original';
+export { DocFooter } from './components/DocFooter';
+```
+
+> **Component list & patterns**: Read `references/eject-components.md` for available components, workflow, and common patterns.
+
+---
+
+## Custom Icons
+
+Rspress has 27 built-in icons used across the UI. You can replace any of them by re-exporting your own icon component with the same name — no ejection needed. This uses the same `theme/index.tsx` mechanism: your named export takes precedence over the wildcard re-export.
+
+**Icon type**: Each icon is a React component or a URL string:
+
+```ts
+import type { FC, SVGProps } from 'react';
+type Icon = FC> | string;
+```
+
+**Example 1** — Replace an icon with a custom SVG component:
+
+```tsx
+// theme/index.tsx
+export * from '@rspress/core/theme-original';
+
+// Named export overrides the wildcard — replaces the GitHub icon site-wide
+export const IconGithub = (props: React.SVGProps) => (
+
+);
+```
+
+**Example 2** — Use an SVGR import:
+
+```tsx
+// theme/index.tsx
+export * from '@rspress/core/theme-original';
+
+import CustomGithubIcon from './icons/github.svg?react';
+export const IconGithub = CustomGithubIcon;
+```
+
+**Using `SvgWrapper` in MDX or custom components**:
+
+```mdx
+import { SvgWrapper, IconGithub } from '@rspress/core/theme';
+
+
+```
+
+**Available icons**: `IconArrowDown`, `IconArrowRight`, `IconClose`, `IconCopy`, `IconDeprecated`, `IconDown`, `IconEdit`, `IconEmpty`, `IconExperimental`, `IconExternalLink`, `IconFile`, `IconGithub`, `IconGitlab`, `IconHeader`, `IconJump`, `IconLink`, `IconLoading`, `IconMenu`, `IconMoon`, `IconScrollToTop`, `IconSearch`, `IconSmallMenu`, `IconSuccess`, `IconSun`, `IconTitle`, `IconWrap`, `IconWrapped`.
+
+> **Source**: See the [icons source](https://github.com/web-infra-dev/rspress/blob/main/packages/core/src/theme/icons.ts) for default implementations.
+
+---
+
+## Global UI Components
+
+For components that should render on every page without theme overrides:
+
+```ts
+// rspress.config.ts
+export default defineConfig({
+ globalUIComponents: [
+ path.join(__dirname, 'components', 'BackToTop.tsx'),
+ [
+ path.join(__dirname, 'components', 'Analytics.tsx'),
+ { trackingId: '...' },
+ ],
+ ],
+});
+```
+
+---
+
+## Page Types
+
+Control layout per page via frontmatter `pageType`:
+
+| Value | Description |
+| ---------- | ------------------------------------- |
+| `home` | Home page with navbar |
+| `doc` | Standard doc with sidebar and outline |
+| `doc-wide` | Doc without sidebar/outline |
+| `custom` | Custom content with navbar only |
+| `blank` | Custom content without navbar |
+| `404` | 404 error page |
+
+Fine-grained: set `navbar: false`, `sidebar: false`, `outline: false`, `footer: false` individually.
+
+---
+
+## Common Pitfalls
+
+- **Circular import**: Using `@rspress/core/theme` instead of `@rspress/core/theme-original` in `theme/` files — causes infinite loop.
+- **Eject over-use**: Ejecting when a Layout slot or CSS variable would suffice — creates upgrade burden.
+- **Missing re-export**: Forgetting `export * from '@rspress/core/theme-original'` in `theme/index.tsx` — breaks all un-overridden components.
+- **v1 imports**: Using `rspress/theme` or `@rspress/theme-default` — these are v1 paths. v2 uses `@rspress/core/theme-original`.
+
+## Reference
+
+- Custom theme guide:
+- CSS variables:
+- Layout component:
+- Built-in icons:
+- Built-in hooks:
+- CLI commands (eject):
diff --git a/.agents/skills/rspress-custom-theme/references/css-variables.md b/.agents/skills/rspress-custom-theme/references/css-variables.md
new file mode 100644
index 00000000..a06573c0
--- /dev/null
+++ b/.agents/skills/rspress-custom-theme/references/css-variables.md
@@ -0,0 +1,177 @@
+# CSS Variables Reference
+
+Complete list of CSS variables exposed by Rspress for theme customization.
+
+- **Override location**: `theme/index.css` or `globalStyles` in `rspress.config.ts`
+- **Dark mode selector**: `.dark { ... }`
+- **Official docs**:
+
+---
+
+## Brand Colors (shared)
+
+```css
+:root {
+ --rp-c-brand: #0095ff;
+ --rp-c-brand-light: #33adff;
+ --rp-c-brand-lighter: #c6e0fd;
+ --rp-c-brand-dark: #0077ff;
+ --rp-c-brand-darker: #005fcc;
+ --rp-c-brand-tint: rgba(127, 163, 255, 0.16);
+}
+```
+
+## Base Variables
+
+| Variable | Light | Dark |
+| ---------------------- | --------------------- | ------------------------ |
+| `--rp-c-bg` | `#ffffff` | `#121212` |
+| `--rp-c-bg-soft` | `#f8f8f9` | `#292e37` |
+| `--rp-c-bg-mute` | `#f1f1f1` | `#343a46` |
+| `--rp-c-bg-alt` | `#fff` | `#000` |
+| `--rp-c-divider` | `rgba(0, 0, 0, 0.25)` | `rgba(84, 84, 84, 0.65)` |
+| `--rp-c-divider-light` | `rgba(0, 0, 0, 0.12)` | `rgba(84, 84, 84, 0.48)` |
+
+## Text Colors
+
+| Variable | Light | Dark |
+| --------------- | ------------------------ | --------------------------- |
+| `--rp-c-text-0` | `#000000` | `#ffffff` |
+| `--rp-c-text-1` | `#242424` | `rgba(255, 255, 245, 0.93)` |
+| `--rp-c-text-2` | `rgba(0, 0, 0, 0.7)` | `rgba(255, 255, 245, 0.65)` |
+| `--rp-c-text-3` | `rgba(60, 60, 60, 0.33)` | `rgba(235, 235, 235, 0.38)` |
+| `--rp-c-text-4` | `rgba(60, 60, 60, 0.18)` | `rgba(235, 235, 235, 0.18)` |
+| `--rp-c-link` | `var(--rp-c-brand-dark)` | `var(--rp-c-brand-light)` |
+
+## Inline Code
+
+| Variable | Light | Dark |
+| ------------------------- | --------------------------- | --------------------------- |
+| `--rp-c-text-code` | `#476582` | `#c9def1` |
+| `--rp-c-text-code-bg` | `rgba(153, 161, 179, 0.06)` | `rgba(255, 255, 255, 0.06)` |
+| `--rp-c-text-code-border` | `rgba(0, 0, 0, 0.035)` | `rgba(255, 255, 255, 0.04)` |
+
+## Code Blocks
+
+| Variable | Light | Dark |
+| ------------------------ | ------------------------------------- | ------------------------------------- |
+| `--rp-code-font-size` | `0.875rem` | `0.875rem` |
+| `--rp-code-title-bg` | `#f8f8f9` | `#191919` |
+| `--rp-code-block-color` | `rgb(46, 52, 64)` | `rgb(229, 231, 235)` |
+| `--rp-code-block-bg` | `var(--rp-c-bg)` | `var(--rp-c-bg)` |
+| `--rp-code-block-border` | `1px solid var(--rp-c-divider-light)` | `1px solid var(--rp-c-divider-light)` |
+| `--rp-code-block-shadow` | `none` | `none` |
+
+## Shiki Syntax Highlighting
+
+Rspress uses `.dark` on `html` as the public dark-mode toggle for general theme overrides. The Shiki token blocks below target `html:not(.rp-dark)` and `html.rp-dark`, which Rspress uses internally for syntax highlighting variables.
+
+### Light
+
+```css
+html:not(.rp-dark) {
+ --shiki-foreground: inherit;
+ --shiki-background: transparent;
+ --shiki-token-constant: #1976d2;
+ --shiki-token-string: #31a94d;
+ --shiki-token-comment: rgb(182, 180, 180);
+ --shiki-token-keyword: #cf2727;
+ --shiki-token-parameter: #f59403;
+ --shiki-token-function: #7041c8;
+ --shiki-token-string-expression: #218438;
+ --shiki-token-punctuation: #242323;
+ --shiki-token-link: #22863a;
+ --shiki-token-deleted: #d32828;
+ --shiki-token-inserted: #22863a;
+}
+```
+
+### Dark
+
+```css
+html.rp-dark {
+ --shiki-foreground: inherit;
+ --shiki-background: transparent;
+ --shiki-token-constant: #6fb0fa;
+ --shiki-token-string: #f9a86e;
+ --shiki-token-comment: #6a727b;
+ --shiki-token-keyword: #f47481;
+ --shiki-token-parameter: #ff9800;
+ --shiki-token-function: #ae8eeb;
+ --shiki-token-string-expression: #4fb74d;
+ --shiki-token-punctuation: #bbbbbb;
+ --shiki-token-link: #f9a76d;
+ --shiki-token-deleted: #ee6d7a;
+ --shiki-token-inserted: #36c47f;
+}
+```
+
+## Grays (shared)
+
+```css
+:root {
+ --rp-c-gray: #8e8e8e;
+ --rp-c-gray-light-1: #aeaeae;
+ --rp-c-gray-light-2: #c7c7c7;
+ --rp-c-gray-light-3: #d1d1d1;
+ --rp-c-gray-light-4: #e5e5e5;
+ --rp-c-gray-light-5: #f2f2f2;
+}
+```
+
+## Shadows (shared)
+
+```css
+:root {
+ --rp-shadow-1: 0 1px 2px rgba(0, 0, 0, 0.02), 0 1px 0 rgba(0, 0, 0, 0.06);
+ --rp-shadow-2: 0 3px 12px rgba(0, 0, 0, 0.06), 0 1px 4px rgba(0, 0, 0, 0.07);
+ --rp-shadow-3: 0 12px 32px rgba(0, 0, 0, 0.1), 0 2px 6px rgba(0, 0, 0, 0.08);
+ --rp-shadow-4: 0 14px 44px rgba(0, 0, 0, 0.12), 0 3px 9px rgba(0, 0, 0, 0.12);
+ --rp-shadow-5:
+ 0 18px 56px rgba(0, 0, 0, 0.16), 0 4px 12px rgba(0, 0, 0, 0.16);
+}
+```
+
+## Radius (shared)
+
+```css
+:root {
+ --rp-radius: 1rem;
+ --rp-radius-small: 0.5rem;
+ --rp-radius-large: 1.5rem;
+}
+```
+
+## Home Page
+
+Note: `...` in gradient values marks omitted gradient parameters, not literal CSS. See the official docs link above for complete values.
+
+| Variable | Light | Dark |
+| -------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- |
+| `--rp-home-hero-secondary-color` | `#a673ff` | `#a673ff` |
+| `--rp-home-hero-title-color` | `transparent` | `transparent` |
+| `--rp-home-hero-title-bg` | `linear-gradient(90deg, var(--rp-c-brand-dark) 0%, var(--rp-c-brand-dark) 30%, var(--rp-home-hero-secondary-color) 100%)` | (same) |
+| `--rp-home-background-bg` | `radial-gradient(...), radial-gradient(...), radial-gradient(...), #fff` | `radial-gradient(...), radial-gradient(...), radial-gradient(...), #121212` |
+| `--rp-home-feature-bg` | `linear-gradient(135deg, #fff, #f9f9f980)` | `linear-gradient(135deg, #ffffff00, #ffffff08)` |
+
+## Quick Start
+
+```css
+/* Example brand color overrides for the custom theme scaffold. */
+/* For more CSS variables, see https://rspress.rs/ui/vars. */
+:root {
+ --rp-c-brand: #ff5e00;
+ --rp-c-brand-dark: #ff704d;
+ --rp-c-brand-darker: #ff704d;
+ --rp-c-brand-light: #ff7524;
+ --rp-c-brand-lighter: #ff7524;
+ --rp-c-brand-tint: rgba(255, 94, 0, 0.07);
+
+ --rp-home-hero-secondary-color: #ff5e00;
+}
+
+.dark {
+ --rp-c-brand: #ff8c4d;
+ --rp-home-hero-secondary-color: #ff8c4d;
+}
+```
diff --git a/.agents/skills/rspress-custom-theme/references/eject-components.md b/.agents/skills/rspress-custom-theme/references/eject-components.md
new file mode 100644
index 00000000..235800fe
--- /dev/null
+++ b/.agents/skills/rspress-custom-theme/references/eject-components.md
@@ -0,0 +1,154 @@
+# Eject Components Reference
+
+Eject copies a built-in component's source code into your project for full customization. This is the heaviest approach — ejected components do not receive automatic updates when Rspress upgrades. Prefer CSS variables, BEM overrides, or Layout slots whenever possible.
+
+Official reference:
+
+---
+
+## Eject Command
+
+```bash
+# List all available components
+rspress eject
+
+# Eject a specific component
+rspress eject
+```
+
+Ejected source is placed in `theme/components//`.
+
+## Available Components
+
+| Component | Description | Consider wrapping first? |
+| ---------------- | ----------------------------------------- | ------------------------------------------------ |
+| `Layout` | Main layout container with all slot props | Yes — use Layout slots instead |
+| `Root` | Application root wrapper | Only eject for global providers |
+| `Banner` | Notification banner at top of page | Check `top` slot first |
+| `NavTitle` | Navigation logo and title | Check `navTitle` / `beforeNavTitle` slots |
+| `HomeLayout` | Complete home page layout | Check home page slots first |
+| `HomeHero` | Hero section on home page | Check `beforeHero` / `afterHero` slots |
+| `HomeFeature` | Feature grid cards | Check `beforeFeatures` / `afterFeatures` slots |
+| `HomeBackground` | Home page background effects | Try CSS variables first |
+| `HomeFooter` | Home page footer | Check `bottom` slot first |
+| `DocFooter` | Documentation page footer | Check `beforeDocFooter` / `afterDocFooter` slots |
+| `EditLink` | "Edit this page" link | Configure via `themeConfig.editLink` |
+| `LastUpdated` | Last updated timestamp | Usually config is enough |
+| `PrevNextPage` | Previous/next page navigation | Check `beforeDocFooter` slot |
+| `OverviewGroup` | Overview page group cards | — |
+| `Tag` | Tag/label component | — |
+
+## Step-by-Step Eject Workflow
+
+1. **Eject the component:**
+
+ ```bash
+ rspress eject DocFooter
+ ```
+
+2. **Re-export in theme/index.tsx:**
+
+ ```tsx
+ // theme/index.tsx
+ export * from '@rspress/core/theme-original';
+ export { DocFooter } from './components/DocFooter';
+ ```
+
+ The named export takes precedence over the wildcard re-export, so Rspress uses your custom version.
+
+3. **Modify the ejected source** in `theme/components/DocFooter/`.
+
+## Common Pattern: Root for Global Providers
+
+The most common eject use case is wrapping the entire app in a context provider (state management, analytics, auth, etc.):
+
+```tsx
+// theme/components/Root/index.tsx
+import type { RootProps } from '@rspress/core/theme';
+
+export function Root({ children }: RootProps) {
+ return (
+
+ {children}
+
+ );
+}
+```
+
+```tsx
+// theme/index.tsx
+export * from '@rspress/core/theme-original';
+export { Root } from './components/Root';
+```
+
+## Common Pattern: Custom Home Page (HomeLayout)
+
+When the default home page structure (Hero + Features) doesn't meet the design requirements — for example, you need a completely different landing page with custom sections, animations, or a non-standard layout — write a custom `HomeLayout` component and re-export it directly:
+
+```tsx
+// theme/components/HomeLayout/index.tsx
+import { useSite, useLang } from '@rspress/core/runtime';
+
+export function HomeLayout() {
+ const site = useSite();
+ const lang = useLang();
+ const { title, description } = site.siteData;
+
+ return (
+
+
+ {title}
+ {description}
+
+
+ Get Started
+
+
+ GitHub
+
+
+
+
+
+ {/* Custom content: testimonials, stats, demos, etc. */}
+
+
+ );
+}
+```
+
+```tsx
+// theme/index.tsx
+export * from '@rspress/core/theme-original';
+export { HomeLayout } from './components/HomeLayout';
+```
+
+The named export overrides the built-in `HomeLayout` from the wildcard re-export — no need to eject first.
+
+If you only need to add content before/after the Hero or Features sections (without replacing the entire home page), prefer Layout slots (`beforeHero`, `afterHero`, `beforeFeatures`, `afterFeatures`) instead — see `references/layout-slots.md`.
+
+## Common Pattern: Custom Doc Footer
+
+```tsx
+// theme/components/DocFooter/index.tsx
+import { useFrontmatter } from '@rspress/core/runtime';
+
+export function DocFooter() {
+ const frontmatter = useFrontmatter();
+ return (
+
+ );
+}
+```
+
+## Important Notes
+
+- Always import from `@rspress/core/theme-original` in `theme/` files, never from `@rspress/core/theme` (the latter resolves to your own `theme/index.tsx`, causing circular imports).
+- After ejecting, you own that component. Track Rspress changelogs for upstream changes you might want to incorporate manually.
+- Run `rspress eject` (no args) to see the up-to-date list of available components — the list above may change between Rspress versions.
diff --git a/.agents/skills/rspress-custom-theme/references/layout-slots.md b/.agents/skills/rspress-custom-theme/references/layout-slots.md
new file mode 100644
index 00000000..1774218c
--- /dev/null
+++ b/.agents/skills/rspress-custom-theme/references/layout-slots.md
@@ -0,0 +1,153 @@
+# Layout Slots Reference
+
+The `Layout` component accepts slot props (`React.ReactNode`) for injecting content at specific positions without replacing built-in components. This is the recommended way to extend Rspress before considering eject.
+
+Official reference:
+
+---
+
+## All Available Slots
+
+### Navigation Bar
+
+| Slot | Position |
+| ---------------- | ------------------------------------ |
+| `beforeNav` | Before the entire navigation bar |
+| `afterNav` | After the entire navigation bar |
+| `beforeNavTitle` | Before the nav title/logo (top-left) |
+| `navTitle` | Replaces the nav title content |
+| `afterNavTitle` | After the nav title/logo |
+| `beforeNavMenu` | Before the nav menu items |
+| `afterNavMenu` | After the nav menu items |
+
+### Sidebar & Outline
+
+| Slot | Position |
+| --------------- | ----------------------------------- |
+| `beforeSidebar` | Above the left sidebar |
+| `afterSidebar` | Below the left sidebar |
+| `beforeOutline` | Above the right outline (TOC) panel |
+| `afterOutline` | Below the right outline panel |
+
+### Home Page
+
+| Slot | Position |
+| ---------------- | ------------------------ |
+| `beforeHero` | Before the Hero section |
+| `afterHero` | After the Hero section |
+| `beforeFeatures` | Before the Features grid |
+| `afterFeatures` | After the Features grid |
+
+### Doc Page
+
+| Slot | Position |
+| ------------------ | ------------------------------------- |
+| `beforeDoc` | At the very beginning of the doc page |
+| `afterDoc` | At the very end of the doc page |
+| `beforeDocContent` | Before the document content area |
+| `afterDocContent` | After the document content area |
+| `beforeDocFooter` | Before the doc footer (prev/next nav) |
+| `afterDocFooter` | After the doc footer |
+
+### Global
+
+| Slot | Position |
+| ------------ | ---------------------------------------------------------------------- |
+| `top` | At the very top of the entire page |
+| `bottom` | At the very bottom of the entire page |
+| `components` | Custom MDX component overrides (`Record`) |
+
+---
+
+## Usage Pattern
+
+All examples below follow the same structure in `theme/index.tsx`. The key parts:
+
+- Import `Layout` from `@rspress/core/theme-original` (not `@rspress/core/theme` — that causes circular imports)
+- Re-export everything: `export * from '@rspress/core/theme-original'`
+- Export your custom `Layout` that wraps the original with slot props
+
+### Basic — Single Slot
+
+```tsx
+// theme/index.tsx
+import { Layout as OriginalLayout } from '@rspress/core/theme-original';
+export * from '@rspress/core/theme-original';
+
+export function Layout() {
+ return } />;
+}
+```
+
+### Multiple Slots
+
+```tsx
+// theme/index.tsx
+import { Layout as OriginalLayout } from '@rspress/core/theme-original';
+export * from '@rspress/core/theme-original';
+
+export function Layout() {
+ return (
+ New version released!}
+ bottom={}
+ afterOutline={Related resources}
+ />
+ );
+}
+```
+
+### With i18n Hooks
+
+```tsx
+// theme/index.tsx
+import { Layout as OriginalLayout } from '@rspress/core/theme-original';
+import { useLang } from '@rspress/core/runtime';
+export * from '@rspress/core/theme-original';
+
+function LocalizedBanner() {
+ const lang = useLang();
+ return {lang === 'zh' ? '欢迎' : 'Welcome'};
+}
+
+export function Layout() {
+ return } />;
+}
+```
+
+### Override MDX Components
+
+The `components` slot accepts a `Record` to override how MDX elements render:
+
+```tsx
+// theme/index.tsx
+import { Layout as OriginalLayout } from '@rspress/core/theme-original';
+export * from '@rspress/core/theme-original';
+
+function CustomH1({ children }: { children: React.ReactNode }) {
+ return (
+ {children}
+ );
+}
+
+export function Layout() {
+ return ;
+}
+```
+
+---
+
+## Available Hooks
+
+Use these hooks inside slot components. Import from `@rspress/core/runtime`.
+
+| Hook | Purpose |
+| ------------------ | ----------------------------------- |
+| `useDark()` | Returns whether dark mode is active |
+| `useLang()` | Returns current language code |
+| `useVersion()` | Returns current doc version |
+| `usePage()` | Returns current page metadata |
+| `usePages()` | Returns all pages metadata |
+| `useSite()` | Returns site-level configuration |
+| `useFrontmatter()` | Returns current page frontmatter |
+| `useI18n()` | Returns i18n translation function |
diff --git a/.agents/skills/rspress-description-generator/SKILL.md b/.agents/skills/rspress-description-generator/SKILL.md
new file mode 100644
index 00000000..5c5f760c
--- /dev/null
+++ b/.agents/skills/rspress-description-generator/SKILL.md
@@ -0,0 +1,118 @@
+---
+name: rspress-description-generator
+description: Generate and maintain description frontmatter for Rspress documentation files (.md/.mdx). Use when a user wants to add SEO descriptions, improve search engine snippets, generate llms.txt metadata, prepare docs for AI summarization, or batch-update frontmatter across an Rspress doc site. Also use when adding new documentation pages to an Rspress project — every new doc file needs a description.
+---
+
+# Rspress Description Generator
+
+The `description` field in Rspress frontmatter generates `` tags, which are used for search engine snippets, social media previews, and AI-oriented formats like llms.txt.
+
+## Step 1 — Locate the docs root
+
+1. Find the Rspress config file. Search for `rspress.config.ts`, `.js`, `.mjs`, or `.cjs`. It may be at the project root or inside a subdirectory like `website/`.
+2. Read the config and extract the `root` option.
+ - The value might be a plain string (`root: 'docs'`) or a JS expression (`root: path.join(__dirname, 'docs')`). In either case, determine the resolved directory path.
+ - If `root` is set, resolve it relative to the config file's directory.
+ - If `root` is not set, default to `docs` relative to the config file's directory.
+3. Confirm the directory exists. If neither `docs` nor the configured root exists, check for `doc` as a fallback.
+
+## Step 2 — Detect i18n structure
+
+Rspress i18n projects place language subdirectories (e.g., `en/`, `zh/`) directly under the docs root:
+
+```
+docs/
+├── en/
+│ ├── guide/
+│ └── index.md
+└── zh/
+ ├── guide/
+ └── index.md
+```
+
+Check if the docs root contains language subdirectories (two-letter codes like `en`, `zh`, `ja`, `ko`, etc.). If so, process each language directory separately — the description language should match the content language.
+
+If there are no language subdirectories, treat the entire docs root as a single-language site.
+
+## Step 3 — Scan and process files
+
+Glob for `**/*.md` and `**/*.mdx` under the docs root. Exclude:
+
+- `node_modules`, build output (`doc_build`, `.rspress`, `dist`)
+- `_meta.json` / `_nav.json` (sidebar/nav config files, not doc pages)
+- `**/shared/**` directories (reusable snippets included via `@import`, not standalone pages)
+
+For each file:
+
+1. **Read the file.**
+2. **Check for existing `description` in frontmatter.** If it exists and is non-empty, skip.
+3. **Check `pageType` in frontmatter.** For `home` pages, derive the description from the `hero.text` / `hero.tagline` fields or the features list, not from body content.
+4. **Generate a description** following the writing guidelines below.
+5. **Insert `description` into frontmatter:**
+ - If the file has frontmatter with a `title` field, insert `description` on the line after `title`.
+ - If the file has frontmatter without `title`, insert `description` as the first field.
+ - If the file has no frontmatter block, add one:
+
+ ```yaml
+ ---
+ description: Your generated description here
+ ---
+ ```
+
+### YAML formatting
+
+Most descriptions can be bare YAML strings:
+
+```yaml
+description: Step-by-step guide to setting up your first Rspress site
+```
+
+If the description contains colons, quotes, or other special YAML characters, wrap in double quotes:
+
+```yaml
+description: 'API reference for Rspress configuration: plugins, themes, and build options'
+```
+
+## Step 4 — Batch processing
+
+For sites with many files, use parallel agent calls to process independent files simultaneously. Group by directory (e.g., all files in `guide/`, then all in `api/`) to maintain focus and consistency within each section.
+
+After processing all files, do a quick scan to ensure no files were missed — re-glob and check for any remaining files without `description`.
+
+## Description Writing Guidelines
+
+The description serves three audiences: search engines (Google snippet), AI systems (llms.txt, summarization), and humans (scanning search results). A good description helps all three.
+
+### Rules
+
+- **Length**: 50–160 characters. Under 50 is too vague for search engines; over 160 gets truncated in snippets.
+- **Language**: Match the document content. Chinese docs get Chinese descriptions, English docs get English descriptions.
+- **Be direct**: State what the page covers. Avoid starting with "This document", "This page", "Learn about" — jump straight to the substance.
+- **Be specific**: Mention concrete technologies, APIs, or concepts the page covers. "Configure Rspress plugins for search, analytics, and internationalization" beats "How to use plugins."
+- **No markdown**: Plain text only, no formatting syntax.
+
+### Examples
+
+**Good:**
+
+| Content | Description |
+| -------------------------- | ---------------------------------------------------------------------------- |
+| Plugin development guide | Create custom Rspress plugins using the Node.js plugin API and runtime hooks |
+| MDX component usage | Import and use React components in MDX documentation files |
+| Rspress 快速开始 | 从安装到本地预览,搭建 Rspress 文档站点的完整流程 |
+| 主题配置 | 自定义 Rspress 主题的导航栏、侧边栏、页脚和暗色模式 |
+| Home page (pageType: home) | Rspress documentation framework — fast, MDX-powered static site generator |
+
+**Bad:**
+
+| Description | Why |
+| ------------------------------------------------------- | ------------------------------------------------ |
+| "About plugins" | Too vague — which plugins? what about them? |
+| "This page explains how to configure the Rspress theme" | Wastes characters on "This page explains how to" |
+| "Learn everything about Rspress!" | Marketing fluff, says nothing specific |
+
+## Documentation
+
+- Frontmatter fields:
+- Basic config (`root` option):
+- Full Rspress docs:
diff --git a/.claude/skills/rspress-best-practices b/.claude/skills/rspress-best-practices
new file mode 120000
index 00000000..0785fd57
--- /dev/null
+++ b/.claude/skills/rspress-best-practices
@@ -0,0 +1 @@
+../../.agents/skills/rspress-best-practices
\ No newline at end of file
diff --git a/.claude/skills/rspress-custom-theme b/.claude/skills/rspress-custom-theme
new file mode 120000
index 00000000..5e838133
--- /dev/null
+++ b/.claude/skills/rspress-custom-theme
@@ -0,0 +1 @@
+../../.agents/skills/rspress-custom-theme
\ No newline at end of file
diff --git a/.claude/skills/rspress-description-generator b/.claude/skills/rspress-description-generator
new file mode 120000
index 00000000..142a0156
--- /dev/null
+++ b/.claude/skills/rspress-description-generator
@@ -0,0 +1 @@
+../../.agents/skills/rspress-description-generator
\ No newline at end of file
diff --git a/.editorconfig b/.editorconfig
deleted file mode 100644
index 45b5839a..00000000
--- a/.editorconfig
+++ /dev/null
@@ -1,9 +0,0 @@
-root = true
-
-[*.md]
-indent_style = space
-indent_size = 2
-end_of_line = lf
-charset = utf-8
-trim_trailing_whitespace = false
-insert_final_newline = true
\ No newline at end of file
diff --git a/.github/workflows/node.js.yml b/.github/workflows/node.js.yml
index d7ba4b0a..c2775e57 100644
--- a/.github/workflows/node.js.yml
+++ b/.github/workflows/node.js.yml
@@ -20,15 +20,15 @@ jobs:
- uses: pnpm/action-setup@v3
with:
- version: 10
+ version: 11
- uses: actions/setup-node@v4
with:
- node-version: "20"
+ node-version: "24"
cache: "pnpm"
- name: Install dependencies
run: pnpm install
- name: Lint
- run: pnpm lint
\ No newline at end of file
+ run: pnpm check:ci
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index f167dfd3..35f8d286 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,24 +1,15 @@
-# Dependencies
-/node_modules
-
-# Production
-/build
-
-# Generated files
-.docusaurus
-.cache-loader
-
-# Misc
+# Local
.DS_Store
-.env.local
-.env.development.local
-.env.test.local
-.env.production.local
-
-# Editor
-
-.idea
-
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
+*.local
+*.log*
+
+# Dist
+node_modules
+dist/
+doc_build/
+build/
+
+# IDE
+.vscode/*
+!.vscode/extensions.json
+.idea
\ No newline at end of file
diff --git a/.husky/pre-commit b/.husky/pre-commit
deleted file mode 100755
index 2c3af062..00000000
--- a/.husky/pre-commit
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-. "$(dirname "$0")/_/husky.sh"
-
-pnpm lint
diff --git a/.markdownlint.json b/.markdownlint.json
deleted file mode 100644
index 9860909a..00000000
--- a/.markdownlint.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "MD033": false,
- "MD024": false,
- "MD029": false,
- "MD041": false,
- "MD010": {
- "code_blocks": true,
- "spaces_per_tab": 4
- },
- "MD046": false,
- "line-length": false,
- "fix": true
-}
\ No newline at end of file
diff --git a/.npmrc b/.npmrc
deleted file mode 100644
index bf2e7648..00000000
--- a/.npmrc
+++ /dev/null
@@ -1 +0,0 @@
-shamefully-hoist=true
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
deleted file mode 100644
index f75b997f..00000000
--- a/.vscode/extensions.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "recommendations": ["davidanson.vscode-markdownlint"]
-}
diff --git a/.vscode/settings.json b/.vscode/settings.json
index ad67b6c8..2a2d6066 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,8 +1,13 @@
{
- "[markdown]": {
- "editor.defaultFormatter": "yzhang.markdown-all-in-one"
- },
- "i18n-ally.localesPaths": [
- "i18n"
- ]
-}
+ "json.schemas": [
+ {
+ "fileMatch": ["**/_meta.json"],
+ "url": "./node_modules/@rspress/core/meta-json-schema.json"
+ },
+ {
+ "fileMatch": ["**/_nav.json"],
+ "url": "./node_modules/@rspress/core/nav-json-schema.json"
+ }
+ ],
+ "editor.defaultFormatter": "biomejs.biome"
+}
\ No newline at end of file
diff --git a/AGENTS.md b/AGENTS.md
new file mode 100644
index 00000000..2d1aab0a
--- /dev/null
+++ b/AGENTS.md
@@ -0,0 +1,30 @@
+# Repository Guidelines
+
+## Project Structure & Module Organization
+
+This repository contains the Halo documentation site built with Rspress. Author documentation in `docs/`: user guides live under `docs/guide/`, developer material under `docs/developer-guide/`, and stable static assets under `docs/public/`. Use `_nav.json` and `_meta.json` files to control navigation labels and ordering. Site configuration belongs in `rspress.config.ts`; shared styling belongs in `styles/index.css`. The `build/` directory is generated output and must not be edited.
+
+## Build, Test, and Development Commands
+
+Use pnpm 11.24.0, as declared in `package.json`.
+
+- `pnpm install` installs dependencies.
+- `pnpm dev` starts the local Rspress development server.
+- `pnpm build` creates the production site in `build/` and checks static rendering and dead links.
+- `pnpm preview` serves the latest production build locally.
+- `pnpm check` runs Biome checks and applies safe fixes.
+- `pnpm format` formats supported files with Biome.
+
+Do not hand-edit `pnpm-lock.yaml` or other generated artifacts.
+
+## Coding Style & Naming Conventions
+
+Biome is the source of truth for TypeScript, JavaScript, JSON, and CSS formatting. Use spaces for indentation and single quotes in JavaScript/TypeScript. Keep configuration in TypeScript and prefer existing Rspress options over custom components. Name documentation files in lowercase kebab-case, such as `migrate-from-1.x.md`. Use MDX only when a page needs components; otherwise prefer Markdown. Keep headings task-oriented and code samples minimal and runnable.
+
+## Testing Guidelines
+
+There is no dedicated automated test suite or coverage threshold. Treat `pnpm build` as the required validation for documentation changes. Before submitting, open affected pages with `pnpm dev` or `pnpm preview` and verify navigation, links, code blocks, and images. For visual changes, check both desktop and narrow viewport layouts.
+
+## Commit & Pull Request Guidelines
+
+The current history contains only generic `init` commits, so it does not establish a useful convention. Write short, imperative subjects that describe the change, for example `Document offline installation`. Keep each pull request focused on one topic, explain the user-facing impact, link the relevant issue when one exists, and include screenshots for layout or styling changes. Run `pnpm check` and `pnpm build` before requesting review; avoid force-pushing after review begins.
diff --git a/OWNERS b/OWNERS
deleted file mode 100644
index ef70b5ef..00000000
--- a/OWNERS
+++ /dev/null
@@ -1,10 +0,0 @@
-reviewers:
-- ruibaby
-- guqing
-- JohnNiang
-- wan92hen
-
-approvers:
-- ruibaby
-- guqing
-- JohnNiang
diff --git a/README.md b/README.md
index ccbcf87c..96418faf 100644
--- a/README.md
+++ b/README.md
@@ -1,11 +1,11 @@
# The open-source repo for [docs.halo.run](https://docs.halo.run)
-This website is built using [Docusaurus 2](https://docusaurus.io/), a modern static website generator.
+This website is built using [Rspress](https://rspress.rs/), a modern static website generator.
### Installation
```
-$ pnpm install
+pnpm install
```
> If you don’t have pnpm installed, you can install it with the following command:
@@ -17,7 +17,7 @@ npm install -g pnpm
### Local Development
```
-$ pnpm start
+pnpm start
```
This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server.
@@ -25,7 +25,7 @@ This command starts a local development server and opens up a browser window. Mo
### Build
```
-$ pnpm build
+pnpm build
```
This command generates static content into the `build` directory and can be served using any static contents hosting service.
diff --git a/biome.json b/biome.json
new file mode 100644
index 00000000..6799733e
--- /dev/null
+++ b/biome.json
@@ -0,0 +1,37 @@
+{
+ "$schema": "./node_modules/@biomejs/biome/configuration_schema.json",
+ "assist": {
+ "actions": {
+ "source": {
+ "organizeImports": "on"
+ }
+ }
+ },
+ "vcs": {
+ "enabled": true,
+ "clientKind": "git",
+ "useIgnoreFile": true
+ },
+ "formatter": {
+ "indentStyle": "space"
+ },
+ "javascript": {
+ "formatter": {
+ "quoteStyle": "single"
+ }
+ },
+ "css": {
+ "parser": {
+ "cssModules": true
+ }
+ },
+ "linter": {
+ "enabled": true,
+ "rules": {
+ "preset": "recommended",
+ "a11y": {
+ "noSvgWithoutTitle": "off"
+ }
+ }
+ }
+}
diff --git a/context7.json b/context7.json
index fac45d77..0c9dd139 100644
--- a/context7.json
+++ b/context7.json
@@ -1,4 +1,4 @@
{
"url": "https://context7.com/halo-dev/docs",
"public_key": "pk_9qoEjMaOs3nLQ4cT00vyN"
-}
\ No newline at end of file
+}
diff --git a/docs/_nav.json b/docs/_nav.json
new file mode 100644
index 00000000..95cbe1cd
--- /dev/null
+++ b/docs/_nav.json
@@ -0,0 +1,39 @@
+[
+ {
+ "text": "使用指南",
+ "link": "/guide/",
+ "activeMatch": "/guide/",
+ "position": "left"
+ },
+ {
+ "text": "开发者指南",
+ "link": "/developer-guide/",
+ "activeMatch": "/developer-guide/",
+ "position": "left"
+ },
+ {
+ "text": "版本",
+ "items": [
+ {
+ "text": "历史版本",
+ "link": "https://github.com/halo-dev/docs/branches"
+ },
+ {
+ "text": "已归档版本",
+ "link": "https://v2.archive-docs.halo.run/"
+ }
+ ]
+ },
+ {
+ "text": "官网",
+ "link": "https://www.halo.run/"
+ },
+ {
+ "text": "论坛",
+ "link": "https://bbs.halo.run"
+ },
+ {
+ "text": "版本对比",
+ "link": "https://www.lxware.cn/halo?code=mcYhwMkn"
+ }
+]
diff --git a/docs/about.md b/docs/about.md
deleted file mode 100644
index d0eb7313..00000000
--- a/docs/about.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-title: 关于文档
-description: 关于本文档站点的一些说明
----
-
-:::note
-此文档使用 [Docusaurus](https://docusaurus.io/) 搭建,感谢 [Docusaurus](https://github.com/facebook/docusaurus) 社区所做的贡献。
-:::
-
-## 参与贡献
-
-:::tip
-如果你发现文档中有不正确或者需要添加的内容,非常欢迎参与到文档编辑当中。
-:::
-
-当前文档的仓库地址为 [halo-dev/docs](https://github.com/halo-dev/docs) ,所以你可以 fork 此仓库,修改之后提交 `Pull request` 等待我们合并即可。
diff --git a/docs/contribution/issue.md b/docs/contribution/issue.md
deleted file mode 100644
index 26d52fb1..00000000
--- a/docs/contribution/issue.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-title: 问题反馈
-description: 问题反馈渠道及指南
----
-
-:::info
-如果您在使用过程中遇到了什么问题,您可以通过下面的方式反馈,但请尽量按照要求提出反馈。
-:::
-
-## GitHub
-
-- [https://github.com/halo-dev/halo/issues](https://github.com/halo-dev/halo/issues)
-- [https://github.com/orgs/lxware-dev/discussions](https://github.com/orgs/lxware-dev/discussions):Halo 付费版或者付费应用的问题可以在这里进行反馈。
-
-如果你在使用过程中,遇到了一些 bug 或者需要添加某些新特性,请尽量在 GitHub 进行反馈,这非常有助于我们跟踪解决此问题,您也可以很方便的接收到处理状态。
-
-建议步骤:
-
-1. 在 GitHub 搜索相关问题,看看是否有其他人已经提到了此问题。
-2. 如果当前还没有人遇到您类似的问题,可以创建新的 Issue 或者 Discussion。
-3. 选择正确的反馈类型。
-4. 请尽可能详细的按照模板填写内容。
-5. 提交反馈。
-
-## Halo 官方社区
-
-链接:[https://bbs.halo.run](https://bbs.halo.run)
-
-此平台主要目的用于与其他 Halo 用户进行交流。但如果您对 GitHub 不是很熟悉或者没有账号,您也可以在此平台进行反馈。
diff --git a/docs/contribution/pr.md b/docs/contribution/pr.md
deleted file mode 100644
index 5f3b7e8a..00000000
--- a/docs/contribution/pr.md
+++ /dev/null
@@ -1,110 +0,0 @@
----
-title: 代码贡献
-description: 代码贡献指南
----
-
-欢迎关注并有想法参与 Halo 的开发,以下是关于如何参与到 Halo 项目的指南,仅供参考。
-
-## 发现 Issue
-
-所有的代码尽可能都有依据(Issue),不是凭空产生。
-
-### 寻找一个 Good First Issue
-
-> 这个步骤非常适合首次贡献者。
-
-在 [halo-dev](https://github.com/halo-dev) 和 [halo-sigs](https://github.com/halo-sigs) 组织下,有非常多的仓库。每个仓库下都有可能包含一些“首次贡献者”友好的 Issue,主要是为了给贡献者提供一个友好的体验。该类 Issue
-一般会用 `good-first-issue` 标签标记。标签 `good-first-issue` 表示该 Issue 不需要对 Halo 有深入的理解也能够参与。
-
-请点击:[good-first-issue](https://github.com/issues?q=org%3Ahalo-dev+is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22+no%3Aassignee+)
-查看关于 Halo 的 Good First Issue。
-
-### 认领 Issue
-
-若对任何一个 Issue 感兴趣,请尝试在 Issue 进行回复,讨论解决 Issue 的思路。确定后可直接通过 `/assign` 或者 `/assign @GitHub 用户名` 认领这个
-Issue。这样可避免两位贡献者在同一个问题上花时间。
-
-## 代码贡献步骤
-
-1. Fork 此仓库
-
- 点击 Halo 仓库主页右上角的 `Fork` 按钮即可。
-
-2. Clone 仓库到本地
-
- ```bash
- git clone https://github.com/{YOUR_USERNAME}/halo --recursive
- # 或者 git clone git@github.com:{YOUR_USERNAME}/halo.git --recursive
- ```
-
-3. 添加主仓库
-
- 添加主仓库方便未来同步主仓库最新的 commits 以及创建新的分支。
-
- ```bash
- git remote add upstream https://github.com/halo-dev/halo.git
- # 或者 git remote add upstream git@github.com:halo-dev/halo.git
- git fetch upstream main
- ```
-
-4. 创建新的开发分支
-
- 我们需要从主仓库的主分支创建一个新的开发分支。
-
- ```bash
- git checkout upstream/main
- git checkout -b {BRANCH_NAME}
- ```
-
-5. 提交代码
-
- ```bash
- git add .
- git commit -s -m "Fix a bug king"
- git push origin {BRANCH_NAME}
- ```
-
-6. 合并主分支
-
- 在提交 Pull Request 之前,尽量保证当前分支和主分支的代码尽可能同步,这时需要我们手动操作。示例:
-
- ```bash
- git fetch upstream/main
- git merge upstream/main
- git push origin {BRANCH_NAME}
- ```
-
-## Pull Request
-
-进入此阶段说明已经完成了代码的编写,测试和自测,并且准备好接受 Code Review。
-
-### 创建 Pull Request
-
-回到自己的仓库页面,选择 `New pull request` 按钮,创建 `Pull request` 到原仓库的 `main` 分支。
-然后等待我们 Review 即可,如有 `Change Request`,再本地修改之后再次提交即可。
-
-提交 Pull Request 的注意事项:
-
-- 提交 Pull Request 请充分自测。
-- 每个 Pull Request 尽量只解决一个 Issue,特殊情况除外。
-- 应尽可能多的添加单元测试,其他测试(集成测试和 E2E 测试)可看情况添加。
-- 不论需要解决的 Issue 发生在哪个版本,提交 Pull Request 的时候,请将主仓库的主分支设置为 `main`。例如:即使某个 Bug 于 Halo 2.0.x 被发现,但是提交 Pull Request 仍只针对
- `main` 分支,等待 Pull Request 合并之后,我们会通过 `/cherrypick release-2.0` 或者 `/cherry-pick release-2.1` 指令将此 Pull Request
- 的修改应用到 `release-2.0` 和 `release-2.1` 分支上。
-
-### 更新 commits
-
-Code Review 阶段可能需要 Pull Request 作者重新修改代码,请直接在当前分支 commit 并 push 即可,无需关闭并重新提交 Pull Request。示例:
-
-```bash
-git add .
-git commit -s -m "Refactor some code according code review"
-git push origin bug/king
-```
-
-同时,若已经进入 Code Review 阶段,请不要强制推送 commits 到当前分支。否则 Reviewers 需要从头开始 Code Review。
-
-### 开发规范
-
-请参考 [https://docs.halo.run/developer-guide/core/code-style](https://docs.halo.run/developer-guide/core/code-style)
-,请确保所有代码格式化之后再提交。
diff --git a/docs/developer-guide/_meta.json b/docs/developer-guide/_meta.json
new file mode 100644
index 00000000..353dabe7
--- /dev/null
+++ b/docs/developer-guide/_meta.json
@@ -0,0 +1,39 @@
+[
+ {
+ "type": "file",
+ "name": "index",
+ "label": "概览"
+ },
+ {
+ "type": "dir",
+ "name": "core",
+ "label": "系统开发",
+ "collapsed": true
+ },
+ {
+ "type": "dir",
+ "name": "plugin",
+ "label": "插件开发",
+ "collapsed": true
+ },
+ {
+ "type": "dir",
+ "name": "theme",
+ "label": "主题开发",
+ "collapsed": true
+ },
+ {
+ "type": "dir",
+ "name": "restful-api",
+ "label": "RESTful API",
+ "collapsed": true
+ },
+ {
+ "type": "dir",
+ "name": "app-store",
+ "label": "应用市场",
+ "collapsed": true
+ },
+ "form-schema",
+ "annotations-form"
+]
diff --git a/docs/developer-guide/annotations-form.md b/docs/developer-guide/annotations-form.md
index 89899eaa..299e0aae 100644
--- a/docs/developer-guide/annotations-form.md
+++ b/docs/developer-guide/annotations-form.md
@@ -1,12 +1,13 @@
---
title: 元数据表单定义
+description: 介绍 Halo AnnotationSetting 资源与 FormKit Schema 的定义方式,为文章、页面、分类、标签、菜单项和用户配置可编辑的字符串元数据字段。
---
在 Halo 2.0,所有的模型都包含了 `metadata.annotations` 字段,用于存储元数据信息。元数据信息可以用于存储一些自定义的信息,可以等同于扩展字段。此文档主要介绍如何在 Halo 中为具体的模型定义元数据编辑表单,至于如何在插件或者主题模板中使用,请看插件或者主题的文档。
定义元数据编辑表单同样使用 `FormKit Schema`,但和主题或插件的定义方式稍有不同,其中输入组件类型可参考 [表单定义](./form-schema.md)。
-:::info[提示]
+:::info annotations 表单值必须为字符串
因为 `metadata.annotations` 是一个键值都为字符串类型的对象,所以表单项的值必须为字符串类型。这就意味着,FormKit 的 `number`、`group`、`repeater` 等类型的输入组件都不能使用。`checkbox` 类型的输入组件应通过 `on-value` 和 `off-value` 指定字符串值,以替代默认的布尔值。
:::
diff --git a/docs/developer-guide/app-store/_meta.json b/docs/developer-guide/app-store/_meta.json
new file mode 100644
index 00000000..c76f5f2f
--- /dev/null
+++ b/docs/developer-guide/app-store/_meta.json
@@ -0,0 +1 @@
+["publish-app", "app-review-guidelines"]
diff --git a/docs/developer-guide/app-store/index.md b/docs/developer-guide/app-store/index.md
new file mode 100644
index 00000000..8977b1d4
--- /dev/null
+++ b/docs/developer-guide/app-store/index.md
@@ -0,0 +1,5 @@
+---
+title: 应用市场
+description: 介绍 Halo 插件与主题在应用市场的发布流程、上架资料准备、首次审核规则、版本制品要求及发布后的应用维护方式。
+overview: true
+---
diff --git a/docs/developer-guide/core/_meta.json b/docs/developer-guide/core/_meta.json
new file mode 100644
index 00000000..165a8336
--- /dev/null
+++ b/docs/developer-guide/core/_meta.json
@@ -0,0 +1 @@
+["prepare", "run", "build", "framework"]
diff --git a/docs/developer-guide/core/build.md b/docs/developer-guide/core/build.md
index e98c0d9a..c49661bb 100644
--- a/docs/developer-guide/core/build.md
+++ b/docs/developer-guide/core/build.md
@@ -3,7 +3,7 @@ title: 构建
description: 构建为可执行 JAR 和 Docker 镜像的文档
---
-:::info
+:::info 构建前准备
在此之前,我们推荐你先阅读[《准备工作》](./prepare),检查本地环境是否满足要求。
:::
@@ -61,7 +61,7 @@ cd path/to/halo
构建完成之后,在 Halo 项目下产生的 `application/build/libs/halo-${version}.jar` 即为构建完成的文件。
-最终部署文档可参考:[使用 JAR 文件部署](../../getting-started/install/jar-file.md)。
+最终部署文档可参考:[使用 JAR 文件部署](../../guide/install/jar-file.md)。
## 构建 Docker 镜像
@@ -81,4 +81,4 @@ docker build -t halo-dev/halo:${tag_name} .
docker images | grep halo
```
-最终部署文档可参考:[使用 Docker Compose 部署](../../getting-started/install/docker-compose.md)。
+最终部署文档可参考:[使用 Docker Compose 部署](../../guide/install/docker-compose.mdx)。
diff --git a/docs/developer-guide/core/code-style.md b/docs/developer-guide/core/code-style.md
index c23fbc01..ef73e095 100644
--- a/docs/developer-guide/core/code-style.md
+++ b/docs/developer-guide/core/code-style.md
@@ -1,6 +1,6 @@
---
title: 代码风格
-description: 代码风格的相关配置说明
+description: 配置 Halo 项目的 Java 代码风格检查,涵盖安装 CheckStyle-IDEA 插件、导入 checkstyle.xml,并在 IntelliJ IDEA 中启用项目规则。
---
Halo 添加了 checkstyle 插件,来保证每位提交者代码的风格保持一致,减少无效代码的修改。本篇文章主要讲解如何在 IDEA 中添加 CheckStyle 插件,并引入项目所提供的 checkstyle.xml 配置。
diff --git a/docs/developer-guide/core/framework.md b/docs/developer-guide/core/framework.md
index 8196c276..93a6506a 100644
--- a/docs/developer-guide/core/framework.md
+++ b/docs/developer-guide/core/framework.md
@@ -1,6 +1,6 @@
---
title: Halo 架构概览
-description: Halo 架构概览
+description: 概览 Halo 基于 Spring Boot、WebFlux、Reactor 和 R2DBC 的响应式架构,以及 Extension、Controller、资源生命周期、配置模型与 RBAC 等核心概念。
---
Halo 是一个基于 Spring Boot 的 Java Web 应用,Web 层不再使用 Servlet 技术,而是充分向异步和非阻塞的反应式编程靠拢,使用 Netty 作为 Web 服务器,使用 [Reactor](https://projectreactor.io/) 作为异步编程框架,使用 R2DBC 作为数据库访问框架,使用 WebFlux 作为 Web 层框架。
diff --git a/docs/developer-guide/core/index.md b/docs/developer-guide/core/index.md
new file mode 100644
index 00000000..23a5a4ab
--- /dev/null
+++ b/docs/developer-guide/core/index.md
@@ -0,0 +1,5 @@
+---
+title: 系统开发
+description: 涵盖 Halo 核心系统的开发环境准备、本地运行、可执行 JAR 与 Docker 镜像构建,以及基于 Spring Boot、WebFlux 和 Extension 的架构概念。
+overview: true
+---
diff --git a/docs/developer-guide/core/prepare.md b/docs/developer-guide/core/prepare.md
index 6e765f2c..e8a5f6e3 100644
--- a/docs/developer-guide/core/prepare.md
+++ b/docs/developer-guide/core/prepare.md
@@ -1,6 +1,6 @@
---
title: 准备工作
-description: 开发环境的准备工作
+description: 准备 Halo 核心开发环境,列出 OpenJDK、Node.js、pnpm、IntelliJ IDEA、Git 等工具要求,并说明工作目录及数据、主题、插件、附件和日志结构。
---
## 环境要求
diff --git a/docs/developer-guide/core/run.md b/docs/developer-guide/core/run.md
index 46fb143e..a04d08b8 100644
--- a/docs/developer-guide/core/run.md
+++ b/docs/developer-guide/core/run.md
@@ -1,9 +1,9 @@
---
title: 开发环境运行
-description: 开发环境运行的指南
+description: 在本地完整运行 Halo 开发环境,涵盖克隆仓库、安装并启动 Console 与 UC 前端、配置 IntelliJ IDEA Profile,以及使用 Gradle 启动后端。
---
-:::info
+:::info 运行前准备
在此之前,我们推荐你先阅读[《准备工作》](./prepare),检查本地环境是否满足要求。
:::
@@ -15,7 +15,7 @@ description: 开发环境运行的指南
2. UI,包括 Console 控制台和 UC 个人中心(托管在 Halo 主项目)
3. 主题(Halo 主项目内已包含默认主题)
-:::info[说明]
+:::info UI 需要单独运行
从 Halo 2.11 开始,Halo 项目的 `ui` 目录同时包含了 Console(管理控制台)和 UC(个人中心),以下统称为 UI。
当前 Halo 主项目并不会将 UI 的构建资源托管到 Git 版本控制,所以在开发环境是需要同时运行 UI 项目的。当然,在我们的最终发布版本的时候会在 CI 中自动构建 UI 到 Halo 主项目。
@@ -56,7 +56,7 @@ VITE v8.0.0 ready in 805 ms
➜ Network: http://192.168.1.7:3000/
```
-:::info[提示]
+:::info 通过 Halo 代理访问 UI
请不要直接使用 UI 的运行端口 3000 访问,会因为跨域问题导致无法正常登录,建议按照后续的步骤以 dev 的配置文件运行 Halo,在 dev 的配置文件中,我们默认代理了 UI 页面的访问地址,所以后续访问 UI 页面使用 `http://localhost:8090/console` 和 `http://localhost:8090/uc` 访问即可,代理的相关配置:
```yaml
diff --git a/docs/developer-guide/core/structure.md b/docs/developer-guide/core/structure.md
index 66084b07..2a1e96e3 100644
--- a/docs/developer-guide/core/structure.md
+++ b/docs/developer-guide/core/structure.md
@@ -1,6 +1,6 @@
---
title: 系统结构
-description: Halo 项目的构成
+description: 介绍 Halo 服务、管理界面、评论插件和主题项目的系统构成,并说明 Spring Boot 配置目录的覆盖优先级与开发环境自定义配置方式。
---
[Halo](https://github.com/halo-dev/halo) 博客系统分为以下四个部分:
@@ -31,6 +31,6 @@ description: Halo 项目的构成
在开发的时候,希望大家能够在 `~/halo-dev/application.yml` 中进行添加自定义配置。当然后面也会讲到如何用`运行参数` 和 `VM options` 进行控制配置,届时可根据具体情况进行选择。
-:::warning
+:::warning 不要修改源码配置文件
开发的时候,我们不建议直接更改`项目源码`中的所包含的`配置文件`,包括 `application.yml`、`application-dev.yml`、`application-test.yml` 和 `application-user.yml`。
:::
diff --git a/docs/developer-guide/form-schema.md b/docs/developer-guide/form-schema.md
index 7cd619e5..634fbbd9 100644
--- a/docs/developer-guide/form-schema.md
+++ b/docs/developer-guide/form-schema.md
@@ -1,5 +1,6 @@
---
title: 表单定义
+description: 介绍 Halo Setting 资源中的 FormKit Schema 表单规范,以及 select 等扩展输入组件的参数、静态与远程数据源和 YAML 配置示例。
---
在 Halo 2.0,在 Console 端的所有表单我们都使用了 [FormKit](https://github.com/formkit/formkit) 的方案。FormKit 不仅支持使用 Vue 组件的形式来构建表单,同时支持使用 Schema 的形式来构建。因此,我们的 [Setting](https://github.com/halo-dev/halo/blob/87ccd61ae5cd35a38324c30502d4e9c0ced41c6a/src/main/java/run/halo/app/core/extension/Setting.java#L20) 资源中的表单定义,都是使用 FormKit Schema 来定义的,最常用的场景即主题和插件的设置表单定义。当然,如果要在 Halo 2.0 的插件中使用,也可以参考 FormKit 的文档使用 Vue 组件的形式使用,但不需要在插件中引入 FormKit。
@@ -11,7 +12,7 @@ FormKit 相关文档:
- Form Schema: [https://formkit.com/essentials/schema](https://formkit.com/essentials/schema)
- FormKit Inputs: [https://formkit.com/inputs](https://formkit.com/inputs)
-:::tip
+:::tip 组件支持范围
目前不支持 FormKit Pro 中的输入组件,但 Halo 额外提供了部分输入组件,将在下面文档列出。
:::
@@ -54,7 +55,7 @@ spec:
value: ""
```
-:::tip
+:::tip YAML 与 JSON 格式转换
需要注意的是,FormKit Schema 本身应该是 JSON 格式的,但目前我们定义一个表单所使用的是 YAML,可能在参考 FormKit 写法时需要手动转换一下。
:::
@@ -225,7 +226,7 @@ spec:
fieldSelectorKey: metadata.name
```
-:::tip
+:::tip 分页数据的默认选项
当远程数据具有分页时,可能会出现默认选项不在第一页的情况,此时 Select 组件将会发送另一个查询请求,以获取默认选项的数据。此接口会携带如下参数:
```ts
@@ -241,7 +242,7 @@ fieldSelector: `${requestOption.fieldSelectorKey}=(value1,value2,value3)`
列表类型的输入组件,支持动态添加、删除数据项。
-:::tip
+:::tip list 与 array 的区别
`list` 组件与 [array](#array) 组件功能类似,但它们的用途不同。`list` 组件适合展示基本类型的数据,而 `array` 组件更适合于展示复杂类型的数据。
:::
@@ -273,7 +274,7 @@ fieldSelector: `${requestOption.fieldSelectorKey}=(value1,value2,value3)`
validation: required
```
-:::tip
+:::tip list 子节点限制
`list` 组件有且只有一个子节点,并且必须为子节点传递 `index` 属性。若想提供多个字段组成对象,则建议改为使用 [array](#array) 组件。
:::
@@ -317,7 +318,7 @@ fieldSelector: `${requestOption.fieldSelectorKey}=(value1,value2,value3)`
validation: required
```
-:::tip
+:::tip verificationForm 不改变数据结构
尽管 `verificationForm` 本身是一个输入组件,但与其他输入组件不同的是,它仅仅用于包装待验证的数据,所以并不会破坏原始数据的格式。例如上述示例中的值在保存后为:
```json
@@ -367,7 +368,7 @@ UI 效果:
### ~~repeater~~(已过时)
-:::warning
+:::warning 请使用 array 组件
`repeater` 组件已不再推荐使用,请使用 [array](#array) 组件代替。
:::
@@ -418,7 +419,7 @@ UI 效果:
value: ""
```
-:::tip
+:::tip 设置 repeater 默认值
使用 `repeater` 类型时,一定要设置默认值,如果不需要默认有任何元素,可以设置为 `[]`。
:::
@@ -443,7 +444,7 @@ UI 效果:
#### 描述
-:::info
+:::info Halo 2.22 的 attachment 类型变更
在 Halo 2.22 中,我们重构了原有的 attachment 表单类型,支持了预览和直接上传文件,并将旧版的表单类型更名为了 [attachmentInput](#attachmentinput)。
:::
@@ -531,7 +532,7 @@ UI 效果:
value: []
```
-:::info
+:::info menuSelect 兼容 select 参数
menuSelect 基于 select,并兼容 select 的[参数](#select-params)。
:::
@@ -733,7 +734,7 @@ UI 效果:
- `emptyText`: 当数组为空时显示的文本
- `itemLabels`: 列表元素上显示的内容,数据类型为 `{ type: "image" | "text" | "iconify"; label: string }[]`
-:::tip
+:::tip 建议设置 itemLabels
强烈建议为 `array` 设置 `itemLabels` 属性,以便于更直观的展示元素内容,设置的元素内容将按照设置顺序展示在列表元素上。
在 `itemLabels` 中定义 `label` 时,可以使用 `$value` 来指向当前项的值。
@@ -768,7 +769,7 @@ UI 效果:
value: ""
```
-:::warning
+:::warning itemLabels 的条件限制
由于目前无法通过单个 `itemLabels` 定义涵盖所有子项变动的情况,因此在 `itemLabels` 中使用 `$value` ,无法获取到具有 `if` 属性的组件值。
例如:
@@ -877,7 +878,7 @@ UI 效果:
密钥输入组件,用于选择一个密钥资源。
-:::note
+:::note 使用 Secret 存储敏感数据
在 Halo 中,我们提供了一种更加安全的数据存储模型,即 Secret,通常我们使用 Secret 来存储敏感数据,比如密码、token、密钥等。
主要注意的是,此表单类型通常与后端配合使用,需要在后端查询密钥资源。
diff --git a/docs/developer-guide/index.md b/docs/developer-guide/index.md
new file mode 100644
index 00000000..b7dc0130
--- /dev/null
+++ b/docs/developer-guide/index.md
@@ -0,0 +1,5 @@
+---
+title: 开发者指南
+description: Halo 开发者指南入口,涵盖核心系统、插件与主题开发、RESTful API、应用市场发布,以及 FormKit 表单和模型元数据扩展。
+overview: true
+---
diff --git a/docs/developer-guide/plugin/_meta.json b/docs/developer-guide/plugin/_meta.json
new file mode 100644
index 00000000..8b79433c
--- /dev/null
+++ b/docs/developer-guide/plugin/_meta.json
@@ -0,0 +1,43 @@
+[
+ "introduction",
+ "prepare",
+ "ai",
+ "hello-world",
+ {
+ "type": "dir",
+ "name": "basics",
+ "label": "基础",
+ "collapsed": true
+ },
+ {
+ "type": "dir",
+ "name": "api-reference",
+ "label": "API 参考",
+ "collapsed": true
+ },
+ {
+ "type": "dir",
+ "name": "extension-points",
+ "label": "扩展点和定制化",
+ "collapsed": true
+ },
+ {
+ "type": "dir",
+ "name": "interaction",
+ "label": "与其他插件交互",
+ "collapsed": true
+ },
+ {
+ "type": "dir",
+ "name": "security",
+ "label": "安全和权限管理",
+ "collapsed": true
+ },
+ {
+ "type": "dir",
+ "name": "examples",
+ "label": "案例和最佳实践",
+ "collapsed": true
+ },
+ "api-changelog"
+]
diff --git a/docs/developer-guide/plugin/ai.md b/docs/developer-guide/plugin/ai.md
new file mode 100644
index 00000000..9e23151c
--- /dev/null
+++ b/docs/developer-guide/plugin/ai.md
@@ -0,0 +1,48 @@
+---
+title: AI 辅助
+description: 向 AI 提供 Halo 插件开发文档,或安装官方 Agent Skill,获取插件结构、后端、前端、权限、DevTools 与 OpenAPI 开发上下文
+---
+
+为了帮助 AI 更全面地了解 Halo 插件的结构、开发流程与最佳实践,从而在插件开发和问题排查过程中提供更准确的帮助,可以向 AI 提供 Halo 开发文档,或安装面向插件开发的 Agent Skill。
+
+## 提供文档上下文
+
+如果 AI 工具支持读取网页,可以在提示词中提供以下地址:
+
+```text title='适合需要查阅多个文档时使用'
+https://docs.halo.run/llms.txt
+```
+
+```text title='适合专注于插件开发时使用'
+https://docs.halo.run/developer-guide/plugin/index.md
+```
+
+## Agent Skill
+
+Agent Skill 是可安装到 AI 开发工具中的领域知识包,能够让 AI 在特定场景下更准确地给出建议或执行操作。
+
+[halo-dev/dev-skills](https://github.com/halo-dev/dev-skills) 仓库提供了 `halo-plugin-dev` Skill,包含以下内容:
+
+- 插件目录结构与 `plugin.yaml` 配置
+- Java 后端、扩展点与自定义 API 开发
+- RBAC 权限管理
+- Vue 3 前端与 Console、用户中心路由开发
+- DevTools 开发流程与 OpenAPI 客户端生成
+
+### 安装
+
+在 Cursor、Claude Code、Codex 等支持 Agent Skills 的 AI 开发工具中,可以通过 [Skills CLI](https://skills.sh/) 安装:
+
+```bash
+# 全局安装,可在所有项目中使用
+npx skills add halo-dev/dev-skills@halo-plugin-dev -g
+
+# 或仅安装到当前项目
+npx skills add halo-dev/dev-skills@halo-plugin-dev
+```
+
+### 使用
+
+安装完成后,通常在开发 Halo 插件时,Agent 会根据当前项目和任务自动识别并调用 `halo-plugin-dev` Skill,无需在提示词中显式指定。如果 Agent 未自动调用,可以在提示词中明确要求使用该 Skill。
+
+AI 生成的代码仍需经过代码审查和功能验证后再用于生产环境。
diff --git a/docs/developer-guide/plugin/api-reference/_meta.json b/docs/developer-guide/plugin/api-reference/_meta.json
new file mode 100644
index 00000000..ce18bcb4
--- /dev/null
+++ b/docs/developer-guide/plugin/api-reference/_meta.json
@@ -0,0 +1,14 @@
+[
+ {
+ "type": "dir",
+ "name": "server",
+ "label": "服务端",
+ "collapsed": true
+ },
+ {
+ "type": "dir",
+ "name": "ui",
+ "label": "UI",
+ "collapsed": true
+ }
+]
diff --git a/docs/developer-guide/plugin/api-reference/index.md b/docs/developer-guide/plugin/api-reference/index.md
new file mode 100644
index 00000000..4f8eb778
--- /dev/null
+++ b/docs/developer-guide/plugin/api-reference/index.md
@@ -0,0 +1,5 @@
+---
+title: API 参考
+description: 汇总 Halo 插件服务端与管理端 UI API,涵盖自定义模型、控制器、配置读取、路由、请求工具及通用组件的使用方式
+overview: true
+---
diff --git a/docs/developer-guide/plugin/api-reference/server/_meta.json b/docs/developer-guide/plugin/api-reference/server/_meta.json
new file mode 100644
index 00000000..5e099afa
--- /dev/null
+++ b/docs/developer-guide/plugin/api-reference/server/_meta.json
@@ -0,0 +1,13 @@
+[
+ "extension",
+ "reconciler",
+ "extension-client",
+ "setting-fetcher",
+ "reverseproxy",
+ "notification",
+ "finder-for-theme",
+ "template-for-theme",
+ "websocket",
+ "login-handler-enhancer",
+ "extension-getter"
+]
diff --git a/docs/developer-guide/plugin/api-reference/server/extension-client.md b/docs/developer-guide/plugin/api-reference/server/extension-client.md
index bc50b131..a9f91c52 100644
--- a/docs/developer-guide/plugin/api-reference/server/extension-client.md
+++ b/docs/developer-guide/plugin/api-reference/server/extension-client.md
@@ -1,6 +1,6 @@
---
title: 与自定义模型交互
-description: 了解如何通过代码的方式操作数据
+description: 使用 ExtensionClient 和 ReactiveExtensionClient 增删改查自定义模型,并通过 ListOptions、Queries、Sort 和 PageRequest 构建查询、排序与分页条件
---
Halo 提供了两个类用于与自定义模型对象交互 `ExtensionClient` 和 `ReactiveExtensionClient`。
@@ -160,7 +160,7 @@ ListOptions.builder()
在 `FieldSelector` 中使用的所有字段都必须添加为索引,否则会抛出异常表示不支持该字段。关于如何使用索引请参考 [自定义模型使用索引](./extension.md#using-indexes)。
-:::note
+:::note 使用 Queries 构建查询
从 2.22.0 开始,`QueryFactory` 已过时,请使用 `Queries` 创建查询条件。取反查询可以通过 `Queries.not(condition)` 或 `condition.not()` 构建。
diff --git a/docs/developer-guide/plugin/api-reference/server/extension-getter.md b/docs/developer-guide/plugin/api-reference/server/extension-getter.md
index 80f0e348..d0fad1f7 100644
--- a/docs/developer-guide/plugin/api-reference/server/extension-getter.md
+++ b/docs/developer-guide/plugin/api-reference/server/extension-getter.md
@@ -1,6 +1,6 @@
---
title: 获取扩展
-description: 了解如何在插件中使用 `ExtensionGetter` 获取扩展
+description: 使用 ExtensionGetter 按扩展点类型获取单实例、多实例或全部扩展,并理解系统配置、Halo 默认实现与已启用插件实现之间的选择规则
---
`ExtensionGetter` 用于获取和管理 Halo 或其他插件提供的扩展。它提供了多种方法来根据扩展点获取扩展,确保插件能够灵活地集成和使用各种扩展功能。
@@ -47,7 +47,7 @@ public interface ExtensionGetter {
2. `getEnabledExtensions(Class extensionPoint)`: 根据传入的扩展点类获取所有已启用扩展。如果没有在扩展设置页面配置过则会返回所有可用的扩展。
3. `getExtensions(Class extensionPointClass)`: 获取所有与扩展点类相关的扩展,无论是否在扩展设置中启用它。
-:::tip
+:::tip 根据扩展点类型选择方法
使用 `getEnabledExtension` 方法或者 `getEnabledExtensions` 方法取决于扩展点声明的 `type` 是 `SINGLETON` 还是 `MULTI_INSTANCE`。
通过使用 `ExtensionGetter`,开发者可以轻松地在插件中访问和管理各种扩展点,提升插件的功能和灵活性。
diff --git a/docs/developer-guide/plugin/api-reference/server/extension.md b/docs/developer-guide/plugin/api-reference/server/extension.md
index 5e14d759..0d06883c 100644
--- a/docs/developer-guide/plugin/api-reference/server/extension.md
+++ b/docs/developer-guide/plugin/api-reference/server/extension.md
@@ -1,6 +1,6 @@
---
title: 自定义模型
-description: 了解什么是自定义模型及如何创建
+description: 定义并注册遵循 OpenAPI v3 的 Halo 自定义模型,配置字段校验与索引,并使用自动生成或自定义的 API 完成资源查询和业务扩展
---
## 概述
@@ -206,7 +206,7 @@ public void start() {
- keyType:索引值类型,必须实现 `Comparable`,例如 `String`、`Boolean`、`Integer`、`Long`、`Instant` 等。
- indexFunc:索引函数,用于获取索引值,接收当前自定义模型对象。单值索引返回一个 `keyType` 类型的值,可以返回 `null`;多值索引返回 `Set`。
-:::note
+:::note 使用新版索引 API
从 2.22.0 开始,`IndexAttributeFactory.simpleAttribute()`、`IndexAttributeFactory.multiValueAttribute()` 和直接创建 `new IndexSpec()` 的写法已过时,请优先使用 `IndexSpecs.single()` 和 `IndexSpecs.multi()`。
@@ -223,7 +223,7 @@ Halo 默认会为每个自定义模型建立以下几个索引,因此不需要
创建了索引的字段可以在查询时使用 `fieldSelector` 参数来查询,参考 [自定义模型 API](#extension-apis)。
-:::tip
+:::tip 为查询字段创建索引
- 索引是一种存储数据结构,可提供对数据集中字段的高效查找。
- 索引将自定义模型中的字段映射到数据库行,以便在查询特定字段时不需要完整的扫描。
diff --git a/docs/developer-guide/plugin/api-reference/server/index.md b/docs/developer-guide/plugin/api-reference/server/index.md
new file mode 100644
index 00000000..3b7b57d0
--- /dev/null
+++ b/docs/developer-guide/plugin/api-reference/server/index.md
@@ -0,0 +1,5 @@
+---
+title: 服务端 API 参考
+description: 查阅 Halo 插件服务端 API,掌握自定义模型与控制器、ExtensionClient、插件配置、通知、WebSocket 和主题数据扩展
+overview: true
+---
diff --git a/docs/developer-guide/plugin/api-reference/server/login-handler-enhancer.md b/docs/developer-guide/plugin/api-reference/server/login-handler-enhancer.md
index c06fe5e8..0c01b243 100644
--- a/docs/developer-guide/plugin/api-reference/server/login-handler-enhancer.md
+++ b/docs/developer-guide/plugin/api-reference/server/login-handler-enhancer.md
@@ -1,6 +1,6 @@
---
title: 登录增强
-description: 了解如何在登录时如何允许 Halo 做登录逻辑的增强切入。
+description: 在插件的认证流程中调用 LoginHandlerEnhancer,将登录成功与失败事件交给 Halo 统一处理记住我、设备管理和登录日志等安全逻辑
---
## 背景
diff --git a/docs/developer-guide/plugin/api-reference/server/notification.md b/docs/developer-guide/plugin/api-reference/server/notification.md
index a401de08..fe29829b 100644
--- a/docs/developer-guide/plugin/api-reference/server/notification.md
+++ b/docs/developer-guide/plugin/api-reference/server/notification.md
@@ -1,6 +1,6 @@
---
title: 发送和订阅通知
-description: 了解如何在插件中发送和订阅通知。
+description: 使用 ReasonType、Reason 和 NotificationTemplate 定义通知事件与模板,通过 NotificationReasonEmitter 触发事件并用 NotificationCenter 管理订阅
---
Halo 的通知功能提供了事件驱动的消息提醒机制,让用户能够及时获取系统内的关键事件。
diff --git a/docs/developer-guide/plugin/api-reference/server/reconciler.md b/docs/developer-guide/plugin/api-reference/server/reconciler.md
index b708fdb9..5228c68c 100644
--- a/docs/developer-guide/plugin/api-reference/server/reconciler.md
+++ b/docs/developer-guide/plugin/api-reference/server/reconciler.md
@@ -1,6 +1,6 @@
---
title: 编写控制器
-description: 了解如何为自定义模型编写控制器
+description: 实现 Reconciler 和 ControllerBuilder,为自定义模型构建幂等调谐循环,配置事件匹配、启动同步、重试策略、状态回写与 Finalizers 清理逻辑
---
控制器是 Halo 的关键组件,它们负责对每个自定义模型对象进行操作,协调所需状态和当前状态,参考: [控制器概述](../../../core/framework.md#controller)。
diff --git a/docs/developer-guide/plugin/api-reference/server/template-for-theme.md b/docs/developer-guide/plugin/api-reference/server/template-for-theme.md
index d6a1af88..1ccafbbe 100644
--- a/docs/developer-guide/plugin/api-reference/server/template-for-theme.md
+++ b/docs/developer-guide/plugin/api-reference/server/template-for-theme.md
@@ -1,6 +1,6 @@
---
title: 在插件中提供主题模板
-description: 了解如何为主题扩充模板。
+description: 在 Halo 插件中提供主题可覆盖的 Thymeleaf 模板与路由,复用当前主题页面布局,并通过插件模板路径组织和引用公共模板片段
---
当你在插件中创建了自己的自定义模型后,你可能需要在主题端提供一个模板来展示这些数据,这一般有两种方式:
@@ -12,7 +12,7 @@ description: 了解如何为主题扩充模板。
首先,你需要在插件的 `resources` 目录下创建一个 `templates` 目录,然后在 `templates` 目录下提供你的模板,例如:
-```text
+```tree
├── templates
│ ├── moment.html
```
diff --git a/docs/developer-guide/plugin/api-reference/ui/_meta.json b/docs/developer-guide/plugin/api-reference/ui/_meta.json
new file mode 100644
index 00000000..c3bc4804
--- /dev/null
+++ b/docs/developer-guide/plugin/api-reference/ui/_meta.json
@@ -0,0 +1,12 @@
+[
+ "route",
+ "api-request",
+ "formkit",
+ "shared",
+ {
+ "type": "dir",
+ "name": "components",
+ "label": "组件",
+ "collapsed": true
+ }
+]
diff --git a/docs/developer-guide/plugin/api-reference/ui/api-request.md b/docs/developer-guide/plugin/api-reference/ui/api-request.md
index 22ed281d..5c8384f4 100644
--- a/docs/developer-guide/plugin/api-reference/ui/api-request.md
+++ b/docs/developer-guide/plugin/api-reference/ui/api-request.md
@@ -67,6 +67,6 @@ axiosInstance.get("/apis/foo.halo.run/v1alpha1/bar").then(response => {
直接从 `axios` 导入的是共享的标准 Axios 模块,不包含 Halo 的认证配置。请勿修改它的全局 defaults 或 interceptors;需要独立配置时使用 `axios.create()`。`@halo-dev/api-client` 导出的 `axiosInstance` 是另一个带有 Halo 认证和统一错误处理的实例,也不应修改它的 defaults 或 interceptors。
-:::info[提醒]
+:::info 同步提高 Halo 版本要求
如果插件中使用了 `@halo-dev/api-client@2.17.0` 和 `@halo-dev/ui-plugin-bundler-kit@2.17.0`,需要提升 `plugin.yaml` 中的 `spec.requires` 版本为 `>=2.17.0`。
:::
diff --git a/docs/developer-guide/plugin/api-reference/ui/components/_meta.json b/docs/developer-guide/plugin/api-reference/ui/components/_meta.json
new file mode 100644
index 00000000..22c2258d
--- /dev/null
+++ b/docs/developer-guide/plugin/api-reference/ui/components/_meta.json
@@ -0,0 +1,14 @@
+[
+ "uppy-upload",
+ "filter-dropdown",
+ "filter-clean-button",
+ "annotations-form",
+ "attachment-file-type-icon",
+ "attachment-selector-modal",
+ "has-permission",
+ "search-input",
+ "plugin-detail-modal",
+ "v-codemirror",
+ "v-tooltip",
+ "v-permission"
+]
diff --git a/docs/developer-guide/plugin/api-reference/ui/components/annotations-form.md b/docs/developer-guide/plugin/api-reference/ui/components/annotations-form.md
index c2790da6..4b3f41e2 100644
--- a/docs/developer-guide/plugin/api-reference/ui/components/annotations-form.md
+++ b/docs/developer-guide/plugin/api-reference/ui/components/annotations-form.md
@@ -1,6 +1,6 @@
---
title: AnnotationsForm
-description: 元数据表单组件
+description: 使用 AnnotationsForm 根据自定义模型的 group 和 kind 自动渲染元数据表单,提交并校验自定义注解与规范表单数据后合并结果
---
此组件用于提供统一的 [Annotations 表单](../../../../annotations-form.md),可以根据 `group` 和 `kind` 属性自动渲染对应的表单项。
diff --git a/docs/developer-guide/plugin/api-reference/ui/components/attachment-file-type-icon.md b/docs/developer-guide/plugin/api-reference/ui/components/attachment-file-type-icon.md
index 608d99f4..07752ec9 100644
--- a/docs/developer-guide/plugin/api-reference/ui/components/attachment-file-type-icon.md
+++ b/docs/developer-guide/plugin/api-reference/ui/components/attachment-file-type-icon.md
@@ -1,6 +1,6 @@
---
title: AttachmentFileTypeIcon
-description: 附件文件类型图标组件
+description: 使用 AttachmentFileTypeIcon 根据附件文件名显示对应的类型图标,可通过 displayExt 控制扩展名展示并设置图标宽度和高度
---
此组件用于根据文件名显示文件类型图标。
diff --git a/docs/developer-guide/plugin/api-reference/ui/components/attachment-selector-modal.md b/docs/developer-guide/plugin/api-reference/ui/components/attachment-selector-modal.md
index 50f1ba9a..a6e18fbe 100644
--- a/docs/developer-guide/plugin/api-reference/ui/components/attachment-selector-modal.md
+++ b/docs/developer-guide/plugin/api-reference/ui/components/attachment-selector-modal.md
@@ -1,11 +1,11 @@
---
title: AttachmentSelectorModal
-description: 附件选择组件
+description: 在 Halo Console 中使用 AttachmentSelectorModal 打开附件选择器,限制可接受的文件类型与选择数量,并处理可见状态、关闭和选择事件
---
此组件用于调出附件选择器,以供用户选择附件。
-:::info[注意]
+:::info 仅支持 Console
此组件当前仅在 Console 中可用。
:::
diff --git a/docs/developer-guide/plugin/api-reference/ui/components/filter-clean-button.md b/docs/developer-guide/plugin/api-reference/ui/components/filter-clean-button.md
index 590a4a42..6c711161 100644
--- a/docs/developer-guide/plugin/api-reference/ui/components/filter-clean-button.md
+++ b/docs/developer-guide/plugin/api-reference/ui/components/filter-clean-button.md
@@ -1,6 +1,6 @@
---
title: FilterCleanButton
-description: 过滤器清除按钮组件
+description: 使用 FilterCleanButton 为 Halo 插件的筛选界面提供统一的清除操作入口,并通过点击事件重置当前页面已经应用的过滤条件
---
## 使用示例
diff --git a/docs/developer-guide/plugin/api-reference/ui/components/filter-dropdown.md b/docs/developer-guide/plugin/api-reference/ui/components/filter-dropdown.md
index b61e7be3..0a8d1e2b 100644
--- a/docs/developer-guide/plugin/api-reference/ui/components/filter-dropdown.md
+++ b/docs/developer-guide/plugin/api-reference/ui/components/filter-dropdown.md
@@ -1,6 +1,6 @@
---
title: FilterDropdown
-description: 过滤器下拉组件
+description: 使用 FilterDropdown 构建通用下拉筛选器,通过包含标签和值的选项列表渲染菜单,并使用 v-model 读取和更新当前筛选值
---
此组件为通用的下拉筛选组件,可以接收一个对象数组作为选项,并使用 `v-model` 绑定选择的值。
diff --git a/docs/developer-guide/plugin/api-reference/ui/components/has-permission.md b/docs/developer-guide/plugin/api-reference/ui/components/has-permission.md
index 99d4f02a..b5f5b538 100644
--- a/docs/developer-guide/plugin/api-reference/ui/components/has-permission.md
+++ b/docs/developer-guide/plugin/api-reference/ui/components/has-permission.md
@@ -1,6 +1,6 @@
---
title: HasPermission
-description: 权限判断组件
+description: 使用 HasPermission 组件声明界面元素所需的权限列表,仅向具备相应 UI 权限的当前用户渲染按钮、菜单或其他插槽内容
---
此组件用于根据权限控制元素的显示与隐藏。
diff --git a/docs/developer-guide/plugin/api-reference/ui/components/index.md b/docs/developer-guide/plugin/api-reference/ui/components/index.md
index 57741de2..fb453250 100644
--- a/docs/developer-guide/plugin/api-reference/ui/components/index.md
+++ b/docs/developer-guide/plugin/api-reference/ui/components/index.md
@@ -1,6 +1,7 @@
---
title: 组件
-description: 在 Halo UI 中可使用的组件。
+description: 在 Halo 插件 UI 中安装并使用基础组件库,以及直接调用 Console 和 UC 全局注册的业务组件与指令来扩展管理界面功能
+overview: true
---
此文档将介绍所有在插件中可用的组件,以及它们的使用方法和区别。
@@ -34,9 +35,3 @@ import { VButton } from "@halo-dev/components";
除了基础组件库,我们还为 Halo 的前端封装了一些业务组件和指令,这些组件已经在全局注册,你可以直接在插件中使用这些组件和指令。
以下是所有可用的业务组件和指令:
-
-```mdx-code-block
-import DocCardList from '@theme/DocCardList';
-
-
-```
diff --git a/docs/developer-guide/plugin/api-reference/ui/components/plugin-detail-modal.md b/docs/developer-guide/plugin/api-reference/ui/components/plugin-detail-modal.md
index afc78c23..fe870364 100644
--- a/docs/developer-guide/plugin/api-reference/ui/components/plugin-detail-modal.md
+++ b/docs/developer-guide/plugin/api-reference/ui/components/plugin-detail-modal.md
@@ -1,6 +1,6 @@
---
title: PluginDetailModal
-description: 插件详情弹窗组件
+description: 使用 PluginDetailModal 在当前操作流程中打开指定插件的详情与设置弹窗,通过 plugin.yaml 中的插件名称定位内容并处理关闭事件
---
此组件可以在 UI 部分的任意组件中打开插件的详情和设置弹窗,可以用于实现在不打断正常操作流程的情况下让用户查看和修改插件的详细信息。
diff --git a/docs/developer-guide/plugin/api-reference/ui/components/search-input.md b/docs/developer-guide/plugin/api-reference/ui/components/search-input.md
index 41dc624d..f3c6d9ea 100644
--- a/docs/developer-guide/plugin/api-reference/ui/components/search-input.md
+++ b/docs/developer-guide/plugin/api-reference/ui/components/search-input.md
@@ -1,6 +1,6 @@
---
title: SearchInput
-description: 搜索输入框组件
+description: 使用 SearchInput 为 Halo 插件页面提供关键词搜索输入框,通过 v-model 绑定查询文本,并在用户按下回车后再触发搜索以减少无效请求
---
此组件适用于关键词搜索场景,输入数据的过程中不会触发搜索,只有在输入完成后,点击回车才会触发搜索。
diff --git a/docs/developer-guide/plugin/api-reference/ui/components/uppy-upload.md b/docs/developer-guide/plugin/api-reference/ui/components/uppy-upload.md
index e68fb5de..e6f72614 100644
--- a/docs/developer-guide/plugin/api-reference/ui/components/uppy-upload.md
+++ b/docs/developer-guide/plugin/api-reference/ui/components/uppy-upload.md
@@ -1,6 +1,6 @@
---
title: UppyUpload
-description: 文件上传组件
+description: 使用 UppyUpload 向指定 API 端点上传文件,配置请求方法、元数据、文件限制和弹窗尺寸,并处理上传成功与错误事件
---
## 使用方式
diff --git a/docs/developer-guide/plugin/api-reference/ui/components/v-codemirror.md b/docs/developer-guide/plugin/api-reference/ui/components/v-codemirror.md
index 00d2ab71..01705521 100644
--- a/docs/developer-guide/plugin/api-reference/ui/components/v-codemirror.md
+++ b/docs/developer-guide/plugin/api-reference/ui/components/v-codemirror.md
@@ -1,6 +1,6 @@
---
title: VCodemirror
-description: 代码编辑器组件
+description: 使用 VCodemirror 在 Halo 插件界面嵌入代码编辑器,通过 v-model 管理内容,并配置编辑语言、高度、扩展和变更事件
---
此组件封装了 Codemirror 代码编辑器,适用于一些需要编辑代码的场景。
diff --git a/docs/developer-guide/plugin/api-reference/ui/components/v-permission.md b/docs/developer-guide/plugin/api-reference/ui/components/v-permission.md
index 633ca4b0..6521e443 100644
--- a/docs/developer-guide/plugin/api-reference/ui/components/v-permission.md
+++ b/docs/developer-guide/plugin/api-reference/ui/components/v-permission.md
@@ -1,6 +1,6 @@
---
title: v-permission
-description: 权限指令
+description: 使用 v-permission 指令为单个界面元素声明所需权限列表,根据当前用户的 UI 权限自动控制按钮或其他操作元素的显示与隐藏
---
与 [HasPermission](./has-permission.md) 组件相同,此指令也是用于根据权限控制元素的显示与隐藏。
diff --git a/docs/developer-guide/plugin/api-reference/ui/components/v-tooltip.md b/docs/developer-guide/plugin/api-reference/ui/components/v-tooltip.md
index a5470b4d..b4ed6e64 100644
--- a/docs/developer-guide/plugin/api-reference/ui/components/v-tooltip.md
+++ b/docs/developer-guide/plugin/api-reference/ui/components/v-tooltip.md
@@ -1,6 +1,6 @@
---
title: v-tooltip
-description: Tooltip 指令
+description: 使用 v-tooltip 指令为 Halo 插件界面中的任意元素添加简短提示文字,在用户悬停或聚焦图标、按钮等控件时说明其用途
---
此指令用于在任何元素上添加一个提示框。
diff --git a/docs/developer-guide/plugin/api-reference/ui/index.md b/docs/developer-guide/plugin/api-reference/ui/index.md
new file mode 100644
index 00000000..a4896bfc
--- /dev/null
+++ b/docs/developer-guide/plugin/api-reference/ui/index.md
@@ -0,0 +1,5 @@
+---
+title: UI API 参考
+description: 查阅 Halo 插件管理端 UI API,掌握路由注册、API 请求、FormKit 扩展、共享工具库及常用控制台组件的用法
+overview: true
+---
diff --git a/docs/developer-guide/plugin/api-reference/ui/route.md b/docs/developer-guide/plugin/api-reference/ui/route.md
index ce75f607..33f3184f 100644
--- a/docs/developer-guide/plugin/api-reference/ui/route.md
+++ b/docs/developer-guide/plugin/api-reference/ui/route.md
@@ -94,7 +94,7 @@ export interface RouteRecordAppend {
- `PostsRoot`(文章)
- `NotificationsRoot`(消息)
-:::info[提示]
+:::info RouteRecordRaw 类型来源
`RouteRecordRaw` 来自 Vue Router,详见 [API 文档 | Vue Router](https://router.vuejs.org/zh/api/#Type-Aliases-RouteRecordRaw)
:::
diff --git a/docs/developer-guide/plugin/appendices.md b/docs/developer-guide/plugin/appendices.md
deleted file mode 100644
index 463f84a4..00000000
--- a/docs/developer-guide/plugin/appendices.md
+++ /dev/null
@@ -1,4 +0,0 @@
----
-title: 附录
-description: 附录
----
\ No newline at end of file
diff --git a/docs/developer-guide/plugin/basics/_meta.json b/docs/developer-guide/plugin/basics/_meta.json
new file mode 100644
index 00000000..281d9711
--- /dev/null
+++ b/docs/developer-guide/plugin/basics/_meta.json
@@ -0,0 +1,17 @@
+[
+ "structure",
+ "manifest",
+ "devtools",
+ {
+ "type": "dir",
+ "name": "server",
+ "label": "服务端",
+ "collapsed": true
+ },
+ {
+ "type": "dir",
+ "name": "ui",
+ "label": "UI",
+ "collapsed": true
+ }
+]
diff --git a/docs/developer-guide/plugin/basics/devtools.md b/docs/developer-guide/plugin/basics/devtools.md
index 22386f56..f5798332 100644
--- a/docs/developer-guide/plugin/basics/devtools.md
+++ b/docs/developer-guide/plugin/basics/devtools.md
@@ -93,7 +93,7 @@ halo {
- `debugPort`:调试模式下的调试端口号,默认是自动分配端口号,你可以修改此配置来固定调试端口号。
- `suspend`:是否在启动时挂起,如果开启则会在启动时挂起直到有调试器连接到 Halo 服务。
-:::warning
+:::warning Halo 2.20 版本兼容性
由于 Halo 2.20.0 版本更改了初始化和登录流程,如果 `halo.version` 指定 `2.20.x` 版本需要将 `run.halo.plugin.devtools` 版本升级到 `0.2.0` 及以上。
:::
@@ -123,7 +123,7 @@ logging:
run.halo.app: DEBUG
```
-更多配置项请参考 [Halo 配置列表](../../../getting-started/install/config.md#配置列表)。
+更多配置项请参考 [Halo 配置列表](../../../guide/install/config.md#配置列表)。
### haloServer 任务
@@ -357,12 +357,12 @@ const { data } = await momentsConsoleApiClient.moment.listTags({
});
```
-:::tip
+:::tip API 客户端生成流程
它会先执行 `generateOpenApiDocs` 任务根据配置访问 `/v3/api-docs/extensionApis` 获取 OpenAPI 文档,
并将 OpenAPI 的 Schema 文件保存到 `openApi.outputDir` 目录下,然后再由 `generateApiClient` 任务根据 Schema 文件生成 API 客户端代码到 `openApi.generator.outputDir` 目录下。
:::
-:::warning
+:::warning 避免误删生成目录
执行 `generateApiClient` 任务时会先删除 `openApi.generator.outputDir` 下的所有文件,因此建议将 API client 的输出目录设置为一个独立的目录,以避免误删其他文件。
执行 `generateApiClient` 前建议注释掉你所配置的 `build` 任务对应的 `dependsOn` 任务,以避免因依赖前端构建任务可能无法生成 API Client 的问题。
diff --git a/docs/developer-guide/plugin/basics/index.md b/docs/developer-guide/plugin/basics/index.md
new file mode 100644
index 00000000..afd884d1
--- /dev/null
+++ b/docs/developer-guide/plugin/basics/index.md
@@ -0,0 +1,5 @@
+---
+title: 基础
+description: 掌握 Halo 插件项目结构、清单注册、开发工具,以及服务端生命周期、对象管理和管理端 UI 的入口与构建流程
+overview: true
+---
diff --git a/docs/developer-guide/plugin/basics/manifest.md b/docs/developer-guide/plugin/basics/manifest.md
index 2683243b..41945f9c 100644
--- a/docs/developer-guide/plugin/basics/manifest.md
+++ b/docs/developer-guide/plugin/basics/manifest.md
@@ -50,7 +50,7 @@ spec:
| `spec.description` | 插件的简短描述,用于说明插件的用途。 |
| `spec.license` | 插件的许可协议,包含协议名称和链接。参考:[Software License](https://en.wikipedia.org/wiki/Software_license)。 |
-:::tip
+:::tip settingName 需要对应资源
如果你在 plugin.yaml 中配置了 `settingName` 但确没有对应的 `Setting` 自定义模型资源文件,会导致插件无法启动,原因是 `Setting` 模型 `metadata.name` 为你配置的 `settingName` 的资源无法找到。
:::
@@ -100,7 +100,7 @@ halo:
- C:\path\to\halo-plugin-hello-world
```
-:::tip
+:::tip development 模式的插件加载方式
1. `development` 开发模式下,既可以运行 `fixed-plugin-path` 下的插件,也可以运行通过 `Console` 管理端安装的 JAR 格式的插件。
2. 如果使用 [DevTools 运行方式](../hello-world.md#run-with-devtools) 来开发插件,则不需要配置 `runtime-mode` 和 `fixed-plugin-path`。
diff --git a/docs/developer-guide/plugin/basics/server/_meta.json b/docs/developer-guide/plugin/basics/server/_meta.json
new file mode 100644
index 00000000..327b21f4
--- /dev/null
+++ b/docs/developer-guide/plugin/basics/server/_meta.json
@@ -0,0 +1 @@
+["lifecycle", "object-management"]
diff --git a/docs/developer-guide/plugin/basics/server/index.md b/docs/developer-guide/plugin/basics/server/index.md
new file mode 100644
index 00000000..806895e8
--- /dev/null
+++ b/docs/developer-guide/plugin/basics/server/index.md
@@ -0,0 +1,5 @@
+---
+title: 服务端基础
+description: 理解 Halo 插件服务端的生命周期与对象管理方式,正确注册、获取和销毁 Spring Bean 等插件运行期对象
+overview: true
+---
diff --git a/docs/developer-guide/plugin/basics/server/lifecycle.md b/docs/developer-guide/plugin/basics/server/lifecycle.md
index 7aea5326..f0c24c2a 100644
--- a/docs/developer-guide/plugin/basics/server/lifecycle.md
+++ b/docs/developer-guide/plugin/basics/server/lifecycle.md
@@ -1,6 +1,6 @@
---
title: 生命周期
-description: 了解插件从启动到卸载的过程
+description: 理解 Halo 插件安装后的启动、停止和删除生命周期,在 BasePlugin 对应方法中初始化资源、清理自定义模型并处理卸载任务
---
根据[插件项目文件结构](../../basics/structure.md)所展示的 `StarterPlugin.java` 中,具有如下方法:
@@ -27,7 +27,7 @@ public void delete() {
1. 继承 `run.halo.app.plugin.BasePlugin` 类后,你可以重写这些方法来干预插件的生命周期,例如在插件启动时初始化一些资源,在插件停止时清理掉这些资源。
2. 一个插件项目只允许有一个类继承 `BasePlugin` 类且标记为 Bean,此时这个类将被作为插件的后端入口,如果有多个类继承了 `BasePlugin` 会导致插件无法启动或生命周期方法无法被调用。
-:::tip
+:::tip 将 BasePlugin 注册为 Bean
如果一个类继承了 `BasePlugin` 类但没有标记为 Bean,那么它将不会被 Halo 识别到,其中的生命周期方法也不会被调用。
:::
diff --git a/docs/developer-guide/plugin/basics/server/object-management.md b/docs/developer-guide/plugin/basics/server/object-management.md
index 8f4a7ea2..230535ff 100644
--- a/docs/developer-guide/plugin/basics/server/object-management.md
+++ b/docs/developer-guide/plugin/basics/server/object-management.md
@@ -1,6 +1,6 @@
---
title: 插件中的对象管理
-description: 了解如何在创建中创建对象和管理对象依赖
+description: 使用 Spring Bean 与依赖注入管理 Halo 插件对象,并调用自定义模型、用户、通知、内容、认证、限流和系统信息等共享服务
---
在插件中你可以使用 [Spring Framework](https://spring.io/projects/spring-framework/) 提供的常用 Bean 注解来标注一个类,然后就能使用依赖注入功能注入其他类的对象。这省去了使用工厂创建类和维护的过程,你可以像开发一个常规的 Spring 项目一样来开发插件,目前支持以下 Spring Framework 的特性:
diff --git a/docs/developer-guide/plugin/basics/structure.md b/docs/developer-guide/plugin/basics/structure.md
index 3195528f..37b16c90 100644
--- a/docs/developer-guide/plugin/basics/structure.md
+++ b/docs/developer-guide/plugin/basics/structure.md
@@ -1,11 +1,11 @@
---
title: 插件项目结构
-description: 了解插件项目的文件结构
+description: 认识 Halo 插件项目的 Java 后端、Vue 前端、plugin.yaml 描述文件与 Gradle 构建结构,明确源码、静态资源和 UI 构建产物的存放位置
---
当你创建一个新的插件项目时,典型的目录结构如下所示:
-```text
+```tree
├── ui
│ ├── src
│ │ ├── assets
@@ -50,7 +50,7 @@ description: 了解插件项目的文件结构
- `plugin.yaml`:这是插件的描述文件,位于 `src/main/resources` 目录下。该文件是必须的,包含插件的基本信息,如插件名称、版本、作者、描述以及依赖等内容。
- `resources/ui`:插件 JAR 中的推荐 UI 资源目录。Gradle 会将 `ui/build/dist` 的完整构建产物复制到 `build/resources/main/ui` 后打包,其中可能包含 `ui-plugin.json`、入口、样式、异步分块和其他静态资源。如果插件不包含 UI 部分,此目录可以忽略。
-:::warning[注意]
+:::warning 优先使用 resources/ui
从 2.11 开始,Halo 支持了 UC 个人中心,且个人中心和 Console 的插件机制共享,因此推荐使用 `resources/ui`。Halo 2.x 仍兼容旧项目使用的 `resources/console`,并优先读取 `ui`。
:::
diff --git a/docs/developer-guide/plugin/basics/ui/_meta.json b/docs/developer-guide/plugin/basics/ui/_meta.json
new file mode 100644
index 00000000..3afd53f4
--- /dev/null
+++ b/docs/developer-guide/plugin/basics/ui/_meta.json
@@ -0,0 +1 @@
+["intro", "entry", "build"]
diff --git a/docs/developer-guide/plugin/basics/ui/build.md b/docs/developer-guide/plugin/basics/ui/build.md
index 2e10700c..8783a5de 100644
--- a/docs/developer-guide/plugin/basics/ui/build.md
+++ b/docs/developer-guide/plugin/basics/ui/build.md
@@ -1,6 +1,6 @@
---
title: 构建
-description: UI 部分的构建说明
+description: 使用 ui-plugin-bundler-kit 的 Vite 或 Rsbuild 预配置构建 Halo 插件 UI,选择 ESM 或 IIFE 输出并正确打包共享依赖、清单和异步资源
---
在 [halo-dev/create-halo-plugin](https://github.com/halo-dev/create-halo-plugin) 工具中,我们已经配置好了 UI 的构建工具和流程,此文档主要说明一些构建细节以及其他可能的构建选项。
@@ -269,7 +269,7 @@ export default viteConfig({
成功的 ESM 构建会额外生成保留文件 `ui-plugin.json`,并可能包含异步 JavaScript、CSS 和其他静态资源。以下目录仅作示意,实际入口和启动样式路径以 `ui-plugin.json` 为准:
-```text
+```tree
build/dist/
├── ui-plugin.json
├── main..js # 默认 ESM 入口
diff --git a/docs/developer-guide/plugin/basics/ui/entry.md b/docs/developer-guide/plugin/basics/ui/entry.md
index 936bfd9f..b1a2e2ed 100644
--- a/docs/developer-guide/plugin/basics/ui/entry.md
+++ b/docs/developer-guide/plugin/basics/ui/entry.md
@@ -1,6 +1,6 @@
---
title: 入口文件
-description: UI 扩展部分的入口文件
+description: 使用 definePlugin 编写 Halo 插件唯一的 UI 源码入口,通过 PluginModule 注册 FormKit 输入、全局组件、Console 与 UC 路由和扩展点
---
入口文件用于定义 Halo 核心需要加载的 `PluginModule`,每个插件有且只有一个源码入口。使用 `@halo-dev/ui-plugin-bundler-kit` 构建时,IIFE 和 ESM 都会生成一个主入口;ESM 还可以包含异步 JavaScript、CSS 和其他静态资源分块。构建和打包方式请参考 [构建](./build.md)。
diff --git a/docs/developer-guide/plugin/basics/ui/index.md b/docs/developer-guide/plugin/basics/ui/index.md
new file mode 100644
index 00000000..cd3f6004
--- /dev/null
+++ b/docs/developer-guide/plugin/basics/ui/index.md
@@ -0,0 +1,5 @@
+---
+title: UI 基础
+description: 搭建 Halo 插件管理端 UI,了解前端项目结构、入口文件注册机制、依赖配置及生产构建和资源打包流程
+overview: true
+---
diff --git a/docs/developer-guide/plugin/basics/ui/intro.md b/docs/developer-guide/plugin/basics/ui/intro.md
index d72b6a25..2a569a4b 100644
--- a/docs/developer-guide/plugin/basics/ui/intro.md
+++ b/docs/developer-guide/plugin/basics/ui/intro.md
@@ -1,6 +1,6 @@
---
title: 介绍
-description: 介绍插件 UI 部分的基础知识。
+description: 认识 Halo 插件 UI 的用途与开发基础,使用 Vue 3、TypeScript、Node.js 和 pnpm 为 Console 控制台及 UC 个人中心添加页面和功能扩展
---
Halo 插件体系的 UI 部分可以让开发者在 Console 控制台和 UC 个人中心添加新的页面或者扩展已有的功能。
diff --git a/docs/developer-guide/plugin/examples/index.md b/docs/developer-guide/plugin/examples/index.md
new file mode 100644
index 00000000..12b07f7d
--- /dev/null
+++ b/docs/developer-guide/plugin/examples/index.md
@@ -0,0 +1,5 @@
+---
+title: 案例和最佳实践
+description: 通过 Todo List 完整案例串联 Halo 插件的自定义模型、控制器、服务端逻辑与管理端 UI 开发,并总结可复用的最佳实践
+overview: true
+---
diff --git a/docs/developer-guide/plugin/extension-points/_meta.json b/docs/developer-guide/plugin/extension-points/_meta.json
new file mode 100644
index 00000000..ce18bcb4
--- /dev/null
+++ b/docs/developer-guide/plugin/extension-points/_meta.json
@@ -0,0 +1,14 @@
+[
+ {
+ "type": "dir",
+ "name": "server",
+ "label": "服务端",
+ "collapsed": true
+ },
+ {
+ "type": "dir",
+ "name": "ui",
+ "label": "UI",
+ "collapsed": true
+ }
+]
diff --git a/docs/developer-guide/plugin/extension-points/index.md b/docs/developer-guide/plugin/extension-points/index.md
new file mode 100644
index 00000000..64302c65
--- /dev/null
+++ b/docs/developer-guide/plugin/extension-points/index.md
@@ -0,0 +1,5 @@
+---
+title: 扩展点和定制化
+description: 查阅 Halo 插件服务端与管理端 UI 扩展点,定制认证、存储、搜索、通知、主题处理及控制台页面和操作入口
+overview: true
+---
diff --git a/docs/developer-guide/plugin/extension-points/server/_meta.json b/docs/developer-guide/plugin/extension-points/server/_meta.json
new file mode 100644
index 00000000..705a68a6
--- /dev/null
+++ b/docs/developer-guide/plugin/extension-points/server/_meta.json
@@ -0,0 +1,18 @@
+[
+ "additional-webfilter",
+ "authentication-webfilter",
+ "attachment",
+ "comment-subject",
+ "comment-widget",
+ "element-tag-post-processor",
+ "excerpt-generator",
+ "halo-documents-provider",
+ "notifier",
+ "search-engine",
+ "template-head-processor",
+ "template-footer-processor",
+ "post-content",
+ "singlepage-content",
+ "user-creating-handler",
+ "username-password-authentication-manager"
+]
diff --git a/docs/developer-guide/plugin/extension-points/server/halo-documents-provider.md b/docs/developer-guide/plugin/extension-points/server/halo-documents-provider.md
index c6eb4e67..50f5ec3c 100644
--- a/docs/developer-guide/plugin/extension-points/server/halo-documents-provider.md
+++ b/docs/developer-guide/plugin/extension-points/server/halo-documents-provider.md
@@ -1,6 +1,6 @@
---
title: 搜索文档提供者
-description: 为搜索引擎提供可索引文档数据的扩展点。
+description: 实现 HaloDocumentsProvider 扩展点,为 Halo 搜索引擎返回文章、页面等可索引文档及类型标识,并注册对应的多实例扩展定义
---
搜索文档提供者扩展点用于为 Halo 搜索引擎提供可索引的文档数据,例如:文章、页面等。当重建搜索索引时,Halo 会收集所有启用的文档提供者,获取它们提供的文档数据并写入搜索引擎。
diff --git a/docs/developer-guide/plugin/extension-points/server/index.md b/docs/developer-guide/plugin/extension-points/server/index.md
index 45cb79ec..78f2d5d8 100644
--- a/docs/developer-guide/plugin/extension-points/server/index.md
+++ b/docs/developer-guide/plugin/extension-points/server/index.md
@@ -1,6 +1,7 @@
---
-title: 扩展点
-description: Halo 服务端为插件提供的扩展点接口
+title: 服务端扩展点
+description: 理解 Halo 服务端扩展点与扩展的关系,通过实现接口、注册 Spring Bean 并声明 ExtensionDefinition 资源接入可组合的后端能力
+overview: true
---
术语:
@@ -48,7 +49,7 @@ spec:
description: "Support sending notifications to users via email"
```
-:::tip
+:::tip 声明扩展点资源
单实例或多实例的扩展点需要声明对应的 `ExtensionPointDefinition` 自定义模型对象被称之为扩展点定义,用于描述该扩展点的信息,例如:扩展点的名称、描述、扩展点的类型等。
单实例或多实例扩展点的实现也必须声明一个对应的 `ExtensionDefinition` 自定义模型对象被称之为扩展定义,用于描述该扩展的信息,例如:扩展的名称、描述、对应扩展点的对象名称等。
@@ -57,9 +58,3 @@ spec:
关于如何在插件中声明自定义模型对象请参考:[自定义模型](../../api-reference/server/extension.md#declare-extension-object)
以下是目前已支持的扩展点列表:
-
-```mdx-code-block
-import DocCardList from '@theme/DocCardList';
-
-
-```
diff --git a/docs/developer-guide/plugin/extension-points/server/username-password-authentication-manager.md b/docs/developer-guide/plugin/extension-points/server/username-password-authentication-manager.md
index 94087043..790a7387 100644
--- a/docs/developer-guide/plugin/extension-points/server/username-password-authentication-manager.md
+++ b/docs/developer-guide/plugin/extension-points/server/username-password-authentication-manager.md
@@ -1,6 +1,6 @@
---
title: 用户名密码认证管理器
-description: 提供扩展用户名密码的身份验证的方法
+description: 实现 UsernamePasswordAuthenticationManager 单实例扩展点,用 LDAP 等第三方身份验证服务替换 Halo 默认的用户名密码认证逻辑
---
用户名密码认证管理器扩展点用于替换 Halo 默认的用户名密码认证管理器实现,例如:使用第三方的身份验证服务,一个例子是 LDAP。
diff --git a/docs/developer-guide/plugin/extension-points/ui/_meta.json b/docs/developer-guide/plugin/extension-points/ui/_meta.json
new file mode 100644
index 00000000..d58cf590
--- /dev/null
+++ b/docs/developer-guide/plugin/extension-points/ui/_meta.json
@@ -0,0 +1,24 @@
+[
+ "attachment-selector-create",
+ "editor-create",
+ "plugin-self-tabs-create",
+ "default-editor-extension-create",
+ "comment-subject-ref-create",
+ "backup-tabs-create",
+ "plugin-installation-tabs-create",
+ "theme-list-tabs-create",
+ "post-list-item-operation-create",
+ "single-page-list-item-operation-create",
+ "comment-list-item-operation-create",
+ "reply-list-item-operation-create",
+ "plugin-list-item-operation-create",
+ "backup-list-item-operation-create",
+ "attachment-list-item-operation-create",
+ "theme-list-item-operation-create",
+ "plugin-list-item-field-create",
+ "post-list-item-field-create",
+ "single-page-list-item-field-create",
+ "user-detail-tabs-create",
+ "uc-user-profile-tabs-create",
+ "dashboard-widgets"
+]
diff --git a/docs/developer-guide/plugin/extension-points/ui/attachment-list-item-operation-create.md b/docs/developer-guide/plugin/extension-points/ui/attachment-list-item-operation-create.md
deleted file mode 100644
index 441f69d6..00000000
--- a/docs/developer-guide/plugin/extension-points/ui/attachment-list-item-operation-create.md
+++ /dev/null
@@ -1,98 +0,0 @@
----
-title: 附件数据列表操作菜单
-description: 扩展附件数据列表操作菜单 - attachment:list-item:operation:create
----
-
-此扩展点用于扩展附件数据列表的操作菜单项。
-
-
-
-## 定义方式
-
-```ts
-export default definePlugin({
- extensionPoints: {
- "attachment:list-item:operation:create": (
- attachment: Ref
- ): OperationItem[] | Promise[]> => {
- return [
- {
- priority: 10,
- component: markRaw(VDropdownItem),
- props: {},
- action: (item?: Attachment) => {
- // do something
- },
- label: "foo",
- hidden: false,
- permissions: [],
- children: [],
- },
- ];
- },
- },
-});
-```
-
-```mdx-code-block
-import OperationItem from "./interface/OperationItem.md";
-
-
-```
-
-## 示例
-
-此示例将实现一个下载附件到本地的操作菜单项。
-
-```ts
-import { definePlugin, type OperationItem } from "@halo-dev/ui-shared";
-import { Toast, VDropdownItem } from "@halo-dev/components";
-import { markRaw, type Ref } from "vue";
-import type { Attachment } from "@halo-dev/api-client";
-
-export default definePlugin({
- extensionPoints: {
- "attachment:list-item:operation:create": (
- attachment: Ref
- ): OperationItem[] | Promise[]> => {
- return [
- {
- priority: 10,
- component: markRaw(VDropdownItem),
- props: {},
- action: (item?: Attachment) => {
- if (!item?.status?.permalink) {
- Toast.error("该附件没有下载地址");
- return;
- }
-
- const a = document.createElement("a");
- a.href = item.status.permalink;
- a.download = item?.spec.displayName || item.metadata.name;
- a.click();
- },
- label: "下载",
- hidden: false,
- permissions: [],
- children: [],
- },
- ];
- },
- },
-});
-
-```
-
-## 实现案例
-
-- [https://github.com/halo-dev/plugin-s3](https://github.com/halo-dev/plugin-s3)
-
-## 类型定义
-
-### Attachment
-
-```mdx-code-block
-import Attachment from "./interface/Attachment.md";
-
-
-```
diff --git a/docs/developer-guide/plugin/extension-points/ui/attachment-list-item-operation-create.mdx b/docs/developer-guide/plugin/extension-points/ui/attachment-list-item-operation-create.mdx
new file mode 100644
index 00000000..63eedf12
--- /dev/null
+++ b/docs/developer-guide/plugin/extension-points/ui/attachment-list-item-operation-create.mdx
@@ -0,0 +1,94 @@
+---
+title: 附件数据列表操作菜单
+description: 扩展附件数据列表操作菜单 - attachment:list-item:operation:create
+---
+
+此扩展点用于扩展附件数据列表的操作菜单项。
+
+
+
+## 定义方式
+
+```ts
+export default definePlugin({
+ extensionPoints: {
+ "attachment:list-item:operation:create": (
+ attachment: Ref
+ ): OperationItem[] | Promise[]> => {
+ return [
+ {
+ priority: 10,
+ component: markRaw(VDropdownItem),
+ props: {},
+ action: (item?: Attachment) => {
+ // do something
+ },
+ label: "foo",
+ hidden: false,
+ permissions: [],
+ children: [],
+ },
+ ];
+ },
+ },
+});
+```
+
+import OperationItem from "./interface/OperationItem.md";
+
+
+
+## 示例
+
+此示例将实现一个下载附件到本地的操作菜单项。
+
+```ts
+import { definePlugin, type OperationItem } from "@halo-dev/ui-shared";
+import { Toast, VDropdownItem } from "@halo-dev/components";
+import { markRaw, type Ref } from "vue";
+import type { Attachment } from "@halo-dev/api-client";
+
+export default definePlugin({
+ extensionPoints: {
+ "attachment:list-item:operation:create": (
+ attachment: Ref
+ ): OperationItem[] | Promise[]> => {
+ return [
+ {
+ priority: 10,
+ component: markRaw(VDropdownItem),
+ props: {},
+ action: (item?: Attachment) => {
+ if (!item?.status?.permalink) {
+ Toast.error("该附件没有下载地址");
+ return;
+ }
+
+ const a = document.createElement("a");
+ a.href = item.status.permalink;
+ a.download = item?.spec.displayName || item.metadata.name;
+ a.click();
+ },
+ label: "下载",
+ hidden: false,
+ permissions: [],
+ children: [],
+ },
+ ];
+ },
+ },
+});
+
+```
+
+## 实现案例
+
+- [https://github.com/halo-dev/plugin-s3](https://github.com/halo-dev/plugin-s3)
+
+## 类型定义
+
+### Attachment
+
+import Attachment from "./interface/Attachment.md";
+
+
diff --git a/docs/developer-guide/plugin/extension-points/ui/backup-list-item-operation-create.md b/docs/developer-guide/plugin/extension-points/ui/backup-list-item-operation-create.md
deleted file mode 100644
index c545d7d4..00000000
--- a/docs/developer-guide/plugin/extension-points/ui/backup-list-item-operation-create.md
+++ /dev/null
@@ -1,41 +0,0 @@
----
-title: 备份数据列表操作菜单
-description: 扩展备份数据列表操作菜单 - backup:list-item:operation:create
----
-
-此扩展点用于扩展备份数据列表的操作菜单项。
-
-
-
-## 定义方式
-
-```ts
-export default definePlugin({
- extensionPoints: {
- "backup:list-item:operation:create": (
- backup: Ref
- ): OperationItem[] | Promise[]> => {
- return [
- {
- priority: 10,
- component: markRaw(VDropdownItem),
- props: {},
- action: (item?: Backup) => {
- // do something
- },
- label: "foo",
- hidden: false,
- permissions: [],
- children: [],
- },
- ];
- },
- },
-});
-```
-
-```mdx-code-block
-import OperationItem from "./interface/OperationItem.md";
-
-
-```
diff --git a/docs/developer-guide/plugin/extension-points/ui/backup-list-item-operation-create.mdx b/docs/developer-guide/plugin/extension-points/ui/backup-list-item-operation-create.mdx
new file mode 100644
index 00000000..66d7dc24
--- /dev/null
+++ b/docs/developer-guide/plugin/extension-points/ui/backup-list-item-operation-create.mdx
@@ -0,0 +1,39 @@
+---
+title: 备份数据列表操作菜单
+description: 扩展备份数据列表操作菜单 - backup:list-item:operation:create
+---
+
+此扩展点用于扩展备份数据列表的操作菜单项。
+
+
+
+## 定义方式
+
+```ts
+export default definePlugin({
+ extensionPoints: {
+ "backup:list-item:operation:create": (
+ backup: Ref
+ ): OperationItem[] | Promise[]> => {
+ return [
+ {
+ priority: 10,
+ component: markRaw(VDropdownItem),
+ props: {},
+ action: (item?: Backup) => {
+ // do something
+ },
+ label: "foo",
+ hidden: false,
+ permissions: [],
+ children: [],
+ },
+ ];
+ },
+ },
+});
+```
+
+import OperationItem from "./interface/OperationItem.md";
+
+
diff --git a/docs/developer-guide/plugin/extension-points/ui/comment-list-item-operation-create.md b/docs/developer-guide/plugin/extension-points/ui/comment-list-item-operation-create.md
deleted file mode 100644
index edcd1b01..00000000
--- a/docs/developer-guide/plugin/extension-points/ui/comment-list-item-operation-create.md
+++ /dev/null
@@ -1,81 +0,0 @@
----
-title: 评论数据列表操作菜单
-description: 扩展评论数据列表操作菜单 - comment:list-item:operation:create
----
-
-此扩展点用于扩展评论数据列表的操作菜单项。
-
-
-
-## 定义方式
-
-```ts
-export default definePlugin({
- extensionPoints: {
- "comment:list-item:operation:create": (
- comment: Ref
- ): OperationItem[] | Promise[]> => {
- return [
- {
- priority: 10,
- component: markRaw(VDropdownItem),
- props: {},
- action: (item?: ListedComment) => {
- // do something
- },
- label: "foo",
- hidden: false,
- permissions: [],
- children: [],
- },
- ];
- },
- },
-});
-```
-
-```mdx-code-block
-import OperationItem from "./interface/OperationItem.md";
-
-
-```
-
-## 示例
-
-此示例将实现一个操作菜单项。
-
-```ts
-import type { ListedComment } from "@halo-dev/api-client";
-import { VDropdownItem } from "@halo-dev/components";
-import { definePlugin } from "@halo-dev/ui-shared";
-import { markRaw } from "vue";
-
-export default definePlugin({
- extensionPoints: {
- "comment:list-item:operation:create": () => {
- return [
- {
- priority: 21,
- component: markRaw(VDropdownItem),
- label: "测试评论菜单",
- visible: true,
- permissions: [],
- action: async (comment: ListedComment) => {
- console.log(comment)
- },
- },
- ];
- },
- },
-});
-```
-
-## 类型定义
-
-### ListedComment
-
-```mdx-code-block
-import ListedComment from "./interface/ListedComment.md";
-
-
-```
diff --git a/docs/developer-guide/plugin/extension-points/ui/comment-list-item-operation-create.mdx b/docs/developer-guide/plugin/extension-points/ui/comment-list-item-operation-create.mdx
new file mode 100644
index 00000000..7fec7f4b
--- /dev/null
+++ b/docs/developer-guide/plugin/extension-points/ui/comment-list-item-operation-create.mdx
@@ -0,0 +1,77 @@
+---
+title: 评论数据列表操作菜单
+description: 扩展评论数据列表操作菜单 - comment:list-item:operation:create
+---
+
+此扩展点用于扩展评论数据列表的操作菜单项。
+
+
+
+## 定义方式
+
+```ts
+export default definePlugin({
+ extensionPoints: {
+ "comment:list-item:operation:create": (
+ comment: Ref
+ ): OperationItem[] | Promise[]> => {
+ return [
+ {
+ priority: 10,
+ component: markRaw(VDropdownItem),
+ props: {},
+ action: (item?: ListedComment) => {
+ // do something
+ },
+ label: "foo",
+ hidden: false,
+ permissions: [],
+ children: [],
+ },
+ ];
+ },
+ },
+});
+```
+
+import OperationItem from "./interface/OperationItem.md";
+
+
+
+## 示例
+
+此示例将实现一个操作菜单项。
+
+```ts
+import type { ListedComment } from "@halo-dev/api-client";
+import { VDropdownItem } from "@halo-dev/components";
+import { definePlugin } from "@halo-dev/ui-shared";
+import { markRaw } from "vue";
+
+export default definePlugin({
+ extensionPoints: {
+ "comment:list-item:operation:create": () => {
+ return [
+ {
+ priority: 21,
+ component: markRaw(VDropdownItem),
+ label: "测试评论菜单",
+ visible: true,
+ permissions: [],
+ action: async (comment: ListedComment) => {
+ console.log(comment)
+ },
+ },
+ ];
+ },
+ },
+});
+```
+
+## 类型定义
+
+### ListedComment
+
+import ListedComment from "./interface/ListedComment.md";
+
+
diff --git a/docs/developer-guide/plugin/extension-points/ui/comment-subject-ref-create.md b/docs/developer-guide/plugin/extension-points/ui/comment-subject-ref-create.md
index 6c9e51c4..a8f70099 100644
--- a/docs/developer-guide/plugin/extension-points/ui/comment-subject-ref-create.md
+++ b/docs/developer-guide/plugin/extension-points/ui/comment-subject-ref-create.md
@@ -5,7 +5,7 @@ description: 扩展评论来源显示 - comment:subject-ref:create
Console 的评论管理列表的评论来源默认仅支持显示来自文章和页面的评论,如果其他插件中的业务模块也使用了评论,那么就可以通过该拓展点来扩展评论来源的显示。
-:::info[提示]
+:::info 需要后端扩展点配合
此扩展点需要后端配合使用,请参考 [评论主体展示](../server/comment-subject.md)。
:::
diff --git a/docs/developer-guide/plugin/extension-points/ui/default-editor-extension-create.md b/docs/developer-guide/plugin/extension-points/ui/default-editor-extension-create.md
index 7b3935f8..ae13f046 100644
--- a/docs/developer-guide/plugin/extension-points/ui/default-editor-extension-create.md
+++ b/docs/developer-guide/plugin/extension-points/ui/default-editor-extension-create.md
@@ -17,7 +17,7 @@ export default definePlugin({
});
```
-:::info[提示]
+:::info 扩展类型与 Tiptap 一致
AnyExtension 类型来自 [Tiptap](https://github.com/ueberdosis/tiptap),这意味着 Halo 默认编辑器的扩展点返回类型与 Tiptap 的扩展完全一致,Tiptap 的扩展文档可参考:[https://tiptap.dev/docs/editor/api/extensions](https://tiptap.dev/docs/editor/api/extensions)。此外,Halo 也为默认编辑器的扩展提供了一些独有的参数,用于实现工具栏、指令等扩展。
:::
diff --git a/docs/developer-guide/plugin/extension-points/ui/index.md b/docs/developer-guide/plugin/extension-points/ui/index.md
deleted file mode 100644
index 8d6b594c..00000000
--- a/docs/developer-guide/plugin/extension-points/ui/index.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: 扩展点
-description: Halo UI 为插件提供的扩展点接口
----
-
-UI 扩展点是用于扩展 Console 和 UC 的界面的接口,通过实现扩展点接口,插件可以在 Console 和 UC 中扩展功能。
-
-以下是目前已支持的扩展点列表:
-
-```mdx-code-block
-import DocCardList from '@theme/DocCardList';
-
-
-```
diff --git a/docs/developer-guide/plugin/extension-points/ui/index.mdx b/docs/developer-guide/plugin/extension-points/ui/index.mdx
new file mode 100644
index 00000000..e501fc20
--- /dev/null
+++ b/docs/developer-guide/plugin/extension-points/ui/index.mdx
@@ -0,0 +1,9 @@
+---
+title: UI 扩展点
+description: 使用 Halo UI 扩展点在 Console 控制台和 UC 个人中心接入插件功能,定位可用的界面扩展接口并选择对应实现方式
+overview: true
+---
+
+UI 扩展点是用于扩展 Console 和 UC 的界面的接口,通过实现扩展点接口,插件可以在 Console 和 UC 中扩展功能。
+
+以下是目前已支持的扩展点列表:
diff --git a/docs/developer-guide/plugin/extension-points/ui/plugin-list-item-field-create.md b/docs/developer-guide/plugin/extension-points/ui/plugin-list-item-field-create.md
deleted file mode 100644
index 508d08c7..00000000
--- a/docs/developer-guide/plugin/extension-points/ui/plugin-list-item-field-create.md
+++ /dev/null
@@ -1,84 +0,0 @@
----
-title: 插件数据列表显示字段
-description: 扩展插件数据列表显示字段 - plugin:list-item:field:create
----
-
-此扩展点用于扩展插件数据列表的显示字段。
-
-
-
-## 定义方式
-
-```ts
-export default definePlugin({
- extensionPoints: {
- "plugin:list-item:field:create": (plugin: Ref): EntityFieldItem[] | Promise => {
- return [
- {
- priority: 0,
- position: "start",
- component: markRaw(FooComponent),
- props: {},
- permissions: [],
- hidden: false,
- }
- ];
- },
- },
-});
-```
-
-```ts title="EntityFieldItem"
-export interface EntityFieldItem {
- priority: number;
- position: "start" | "end";
- component: Raw;
- props?: Record\;
- permissions?: string[];
- hidden?: boolean;
-}
-```
-
-## 示例
-
-此示例将添加一个显示插件 requires(版本要求)的字段。
-
-```ts
-import { definePlugin } from "@halo-dev/ui-shared";
-import { markRaw, type Ref } from "vue";
-import type { Plugin } from "@halo-dev/api-client";
-import { VEntityField } from "@halo-dev/components";
-
-export default definePlugin({
- extensionPoints: {
- "plugin:list-item:field:create": (plugin: Ref) => {
- return [
- {
- priority: 0,
- position: "end",
- component: markRaw(VEntityField),
- props: {
- description: plugin.value.spec.requires,
- },
- permissions: [],
- hidden: false,
- },
- ];
- },
- },
-});
-```
-
-## 实现案例
-
-- [https://github.com/halo-dev/plugin-app-store](https://github.com/halo-dev/plugin-app-store)
-
-## 类型定义
-
-### Plugin
-
-```mdx-code-block
-import Plugin from "./interface/Plugin.md";
-
-
-```
diff --git a/docs/developer-guide/plugin/extension-points/ui/plugin-list-item-field-create.mdx b/docs/developer-guide/plugin/extension-points/ui/plugin-list-item-field-create.mdx
new file mode 100644
index 00000000..17845bbb
--- /dev/null
+++ b/docs/developer-guide/plugin/extension-points/ui/plugin-list-item-field-create.mdx
@@ -0,0 +1,82 @@
+---
+title: 插件数据列表显示字段
+description: 扩展插件数据列表显示字段 - plugin:list-item:field:create
+---
+
+此扩展点用于扩展插件数据列表的显示字段。
+
+
+
+## 定义方式
+
+```ts
+export default definePlugin({
+ extensionPoints: {
+ "plugin:list-item:field:create": (plugin: Ref): EntityFieldItem[] | Promise => {
+ return [
+ {
+ priority: 0,
+ position: "start",
+ component: markRaw(FooComponent),
+ props: {},
+ permissions: [],
+ hidden: false,
+ }
+ ];
+ },
+ },
+});
+```
+
+```ts title="EntityFieldItem"
+export interface EntityFieldItem {
+ priority: number;
+ position: "start" | "end";
+ component: Raw;
+ props?: Record\;
+ permissions?: string[];
+ hidden?: boolean;
+}
+```
+
+## 示例
+
+此示例将添加一个显示插件 requires(版本要求)的字段。
+
+```ts
+import { definePlugin } from "@halo-dev/ui-shared";
+import { markRaw, type Ref } from "vue";
+import type { Plugin } from "@halo-dev/api-client";
+import { VEntityField } from "@halo-dev/components";
+
+export default definePlugin({
+ extensionPoints: {
+ "plugin:list-item:field:create": (plugin: Ref) => {
+ return [
+ {
+ priority: 0,
+ position: "end",
+ component: markRaw(VEntityField),
+ props: {
+ description: plugin.value.spec.requires,
+ },
+ permissions: [],
+ hidden: false,
+ },
+ ];
+ },
+ },
+});
+```
+
+## 实现案例
+
+- [https://github.com/halo-dev/plugin-app-store](https://github.com/halo-dev/plugin-app-store)
+
+## 类型定义
+
+### Plugin
+
+import Plugin from "./interface/Plugin.md";
+
+
diff --git a/docs/developer-guide/plugin/extension-points/ui/plugin-list-item-operation-create.md b/docs/developer-guide/plugin/extension-points/ui/plugin-list-item-operation-create.md
deleted file mode 100644
index 1c7e31de..00000000
--- a/docs/developer-guide/plugin/extension-points/ui/plugin-list-item-operation-create.md
+++ /dev/null
@@ -1,55 +0,0 @@
----
-title: 插件数据列表操作菜单
-description: 扩展插件数据列表操作菜单 - plugin:list-item:operation:create
----
-
-此扩展点用于扩展插件数据列表的操作菜单项。
-
-
-
-## 定义方式
-
-```ts
-export default definePlugin({
- extensionPoints: {
- "plugin:list-item:operation:create": (
- plugin: Ref
- ): OperationItem[] | Promise[]> => {
- return [
- {
- priority: 10,
- component: markRaw(VDropdownItem),
- props: {},
- action: (item?: Plugin) => {
- // do something
- },
- label: "foo",
- hidden: false,
- permissions: [],
- children: [],
- },
- ];
- },
- },
-});
-```
-
-```mdx-code-block
-import OperationItem from "./interface/OperationItem.md";
-
-
-```
-
-## 实现案例
-
-- [https://github.com/halo-dev/plugin-app-store](https://github.com/halo-dev/plugin-app-store)
-
-## 类型定义
-
-### Plugin
-
-```mdx-code-block
-import Plugin from "./interface/Plugin.md";
-
-
-```
diff --git a/docs/developer-guide/plugin/extension-points/ui/plugin-list-item-operation-create.mdx b/docs/developer-guide/plugin/extension-points/ui/plugin-list-item-operation-create.mdx
new file mode 100644
index 00000000..508181da
--- /dev/null
+++ b/docs/developer-guide/plugin/extension-points/ui/plugin-list-item-operation-create.mdx
@@ -0,0 +1,51 @@
+---
+title: 插件数据列表操作菜单
+description: 扩展插件数据列表操作菜单 - plugin:list-item:operation:create
+---
+
+此扩展点用于扩展插件数据列表的操作菜单项。
+
+
+
+## 定义方式
+
+```ts
+export default definePlugin({
+ extensionPoints: {
+ "plugin:list-item:operation:create": (
+ plugin: Ref
+ ): OperationItem[] | Promise[]> => {
+ return [
+ {
+ priority: 10,
+ component: markRaw(VDropdownItem),
+ props: {},
+ action: (item?: Plugin) => {
+ // do something
+ },
+ label: "foo",
+ hidden: false,
+ permissions: [],
+ children: [],
+ },
+ ];
+ },
+ },
+});
+```
+
+import OperationItem from "./interface/OperationItem.md";
+
+
+
+## 实现案例
+
+- [https://github.com/halo-dev/plugin-app-store](https://github.com/halo-dev/plugin-app-store)
+
+## 类型定义
+
+### Plugin
+
+import Plugin from "./interface/Plugin.md";
+
+
diff --git a/docs/developer-guide/plugin/extension-points/ui/plugin-self-tabs-create.md b/docs/developer-guide/plugin/extension-points/ui/plugin-self-tabs-create.md
deleted file mode 100644
index 88b5d54f..00000000
--- a/docs/developer-guide/plugin/extension-points/ui/plugin-self-tabs-create.md
+++ /dev/null
@@ -1,90 +0,0 @@
----
-title: 插件详情选项卡
-description: 扩展当前插件的详情选项卡 - plugin:self:tabs:create
----
-
-此扩展点用于在 Console 的插件详情页面中添加自定义选项卡,可以用于自定义插件的配置页面。
-
-
-
-## 定义方式
-
-```ts
-export default definePlugin({
- extensionPoints: {
- "plugin:self:tabs:create": (): PluginTab[] | Promise => {
- return [
- {
- id: "foo",
- label: "foo",
- component: markRaw(FooComponent),
- permissions: [],
- },
- ];
- },
- },
-});
-```
-
-```ts title="PluginTab"
-export interface PluginTab {
- id: string; // 选项卡 ID,不能与设置表单的 group 重复
- label: string; // 选项卡标题
- component: Raw; // 选项卡面板组件
- permissions?: string[]; // 选项卡权限
-}
-```
-
-其中,`component` 组件可以注入(inject)以下属性:
-
-- `plugin`:当前插件对象,类型为 Ref\<[Plugin](#plugin)\>。
-
-## 示例
-
-此示例实现了一个自定义选项卡,用于获取插件的数据并显示名称。
-
-```ts
-import { definePlugin, PluginTab } from "@halo-dev/ui-shared";
-import MyComponent from "./views/my-component.vue";
-import { markRaw } from "vue";
-export default definePlugin({
- components: {},
- routes: [],
- extensionPoints: {
- "plugin:self:tabs:create": () : PluginTab[] => {
- return [
- {
- id: "my-tab-panel",
- label: "My Tab Panel",
- component: markRaw(MyComponent),
- permissions: []
- },
- ];
- },
- },
-});
-```
-
-```vue title="./views/my-component.vue"
-
-
-
- {{ plugin?.spec.displayName }}
-
-```
-
-## 实现案例
-
-- [https://github.com/halo-dev/plugin-app-store](https://github.com/halo-dev/plugin-app-store)
-
-## 类型定义
-
-### Plugin
-
-```mdx-code-block
-import Plugin from "./interface/Plugin.md";
-
-
-```
diff --git a/docs/developer-guide/plugin/extension-points/ui/plugin-self-tabs-create.mdx b/docs/developer-guide/plugin/extension-points/ui/plugin-self-tabs-create.mdx
new file mode 100644
index 00000000..7a4a2177
--- /dev/null
+++ b/docs/developer-guide/plugin/extension-points/ui/plugin-self-tabs-create.mdx
@@ -0,0 +1,88 @@
+---
+title: 插件详情选项卡
+description: 扩展当前插件的详情选项卡 - plugin:self:tabs:create
+---
+
+此扩展点用于在 Console 的插件详情页面中添加自定义选项卡,可以用于自定义插件的配置页面。
+
+
+
+## 定义方式
+
+```ts
+export default definePlugin({
+ extensionPoints: {
+ "plugin:self:tabs:create": (): PluginTab[] | Promise => {
+ return [
+ {
+ id: "foo",
+ label: "foo",
+ component: markRaw(FooComponent),
+ permissions: [],
+ },
+ ];
+ },
+ },
+});
+```
+
+```ts title="PluginTab"
+export interface PluginTab {
+ id: string; // 选项卡 ID,不能与设置表单的 group 重复
+ label: string; // 选项卡标题
+ component: Raw; // 选项卡面板组件
+ permissions?: string[]; // 选项卡权限
+}
+```
+
+其中,`component` 组件可以注入(inject)以下属性:
+
+- `plugin`:当前插件对象,类型为 Ref\<[Plugin](#plugin)\>。
+
+## 示例
+
+此示例实现了一个自定义选项卡,用于获取插件的数据并显示名称。
+
+```ts
+import { definePlugin, PluginTab } from "@halo-dev/ui-shared";
+import MyComponent from "./views/my-component.vue";
+import { markRaw } from "vue";
+export default definePlugin({
+ components: {},
+ routes: [],
+ extensionPoints: {
+ "plugin:self:tabs:create": () : PluginTab[] => {
+ return [
+ {
+ id: "my-tab-panel",
+ label: "My Tab Panel",
+ component: markRaw(MyComponent),
+ permissions: []
+ },
+ ];
+ },
+ },
+});
+```
+
+```vue title="./views/my-component.vue"
+
+
+
+ {{ plugin?.spec.displayName }}
+
+```
+
+## 实现案例
+
+- [https://github.com/halo-dev/plugin-app-store](https://github.com/halo-dev/plugin-app-store)
+
+## 类型定义
+
+### Plugin
+
+import Plugin from "./interface/Plugin.md";
+
+
diff --git a/docs/developer-guide/plugin/extension-points/ui/post-list-item-field-create.md b/docs/developer-guide/plugin/extension-points/ui/post-list-item-field-create.md
deleted file mode 100644
index 277a13af..00000000
--- a/docs/developer-guide/plugin/extension-points/ui/post-list-item-field-create.md
+++ /dev/null
@@ -1,80 +0,0 @@
----
-title: 文章数据列表显示字段
-description: 扩展文章数据列表显示字段 - post:list-item:field:create
----
-
-此扩展点用于扩展文章数据列表的显示字段。
-
-
-
-## 定义方式
-
-```ts
-export default definePlugin({
- extensionPoints: {
- "post:list-item:field:create": (post: Ref): EntityFieldItem[] | Promise => {
- return [
- {
- priority: 0,
- position: "start",
- component: markRaw(FooComponent),
- props: {},
- permissions: [],
- hidden: false,
- }
- ];
- },
- },
-});
-```
-
-```ts title="EntityFieldItem"
-export interface EntityFieldItem {
- priority: number;
- position: "start" | "end";
- component: Raw;
- props?: Record\;
- permissions?: string[];
- hidden?: boolean;
-}
-```
-
-## 示例
-
-此示例将添加一个显示文章 slug(别名)的字段。
-
-```ts
-import { definePlugin } from "@halo-dev/ui-shared";
-import { markRaw, type Ref } from "vue";
-import type { ListedPost } from "@halo-dev/api-client";
-import { VEntityField } from "@halo-dev/components";
-
-export default definePlugin({
- extensionPoints: {
- "post:list-item:field:create": (post: Ref) => {
- return [
- {
- priority: 0,
- position: "end",
- component: markRaw(VEntityField),
- props: {
- description: post.value.post.spec.slug,
- },
- permissions: [],
- hidden: false,
- },
- ];
- },
- },
-});
-```
-
-## 类型定义
-
-### ListedPost
-
-```mdx-code-block
-import ListedPost from "./interface/ListedPost.md";
-
-
-```
diff --git a/docs/developer-guide/plugin/extension-points/ui/post-list-item-field-create.mdx b/docs/developer-guide/plugin/extension-points/ui/post-list-item-field-create.mdx
new file mode 100644
index 00000000..d324c603
--- /dev/null
+++ b/docs/developer-guide/plugin/extension-points/ui/post-list-item-field-create.mdx
@@ -0,0 +1,78 @@
+---
+title: 文章数据列表显示字段
+description: 扩展文章数据列表显示字段 - post:list-item:field:create
+---
+
+此扩展点用于扩展文章数据列表的显示字段。
+
+
+
+## 定义方式
+
+```ts
+export default definePlugin({
+ extensionPoints: {
+ "post:list-item:field:create": (post: Ref): EntityFieldItem[] | Promise => {
+ return [
+ {
+ priority: 0,
+ position: "start",
+ component: markRaw(FooComponent),
+ props: {},
+ permissions: [],
+ hidden: false,
+ }
+ ];
+ },
+ },
+});
+```
+
+```ts title="EntityFieldItem"
+export interface EntityFieldItem {
+ priority: number;
+ position: "start" | "end";
+ component: Raw;
+ props?: Record\;
+ permissions?: string[];
+ hidden?: boolean;
+}
+```
+
+## 示例
+
+此示例将添加一个显示文章 slug(别名)的字段。
+
+```ts
+import { definePlugin } from "@halo-dev/ui-shared";
+import { markRaw, type Ref } from "vue";
+import type { ListedPost } from "@halo-dev/api-client";
+import { VEntityField } from "@halo-dev/components";
+
+export default definePlugin({
+ extensionPoints: {
+ "post:list-item:field:create": (post: Ref) => {
+ return [
+ {
+ priority: 0,
+ position: "end",
+ component: markRaw(VEntityField),
+ props: {
+ description: post.value.post.spec.slug,
+ },
+ permissions: [],
+ hidden: false,
+ },
+ ];
+ },
+ },
+});
+```
+
+## 类型定义
+
+### ListedPost
+
+import ListedPost from "./interface/ListedPost.md";
+
+
diff --git a/docs/developer-guide/plugin/extension-points/ui/post-list-item-operation-create.md b/docs/developer-guide/plugin/extension-points/ui/post-list-item-operation-create.md
deleted file mode 100644
index d686e185..00000000
--- a/docs/developer-guide/plugin/extension-points/ui/post-list-item-operation-create.md
+++ /dev/null
@@ -1,92 +0,0 @@
----
-title: 文章数据列表操作菜单
-description: 扩展文章数据列表操作菜单 - post:list-item:operation:create
----
-
-此扩展点用于扩展文章数据列表的操作菜单项。
-
-
-
-## 定义方式
-
-```ts
-export default definePlugin({
- extensionPoints: {
- "post:list-item:operation:create": (
- post: Ref
- ): OperationItem[] | Promise[]> => {
- return [
- {
- priority: 10,
- component: markRaw(VDropdownItem),
- props: {},
- action: (item?: ListedPost) => {
- // do something
- },
- label: "foo",
- hidden: false,
- permissions: [],
- children: [],
- },
- ];
- },
- },
-});
-```
-
-```mdx-code-block
-import OperationItem from "./interface/OperationItem.md";
-
-
-```
-
-## 示例
-
-此示例将实现一个操作菜单项,点击后会将文章内容作为文件下载到本地。
-
-```ts
-import type { ListedPost } from "@halo-dev/api-client";
-import { VDropdownItem } from "@halo-dev/components";
-import { definePlugin } from "@halo-dev/ui-shared";
-import axios from "axios";
-import { markRaw } from "vue";
-
-export default definePlugin({
- extensionPoints: {
- "post:list-item:operation:create": () => {
- return [
- {
- priority: 21,
- component: markRaw(VDropdownItem),
- label: "下载到本地",
- visible: true,
- permissions: [],
- action: async (post: ListedPost) => {
- const { data } = await axios.get(
- `/apis/api.console.halo.run/v1alpha1/posts/${post.post.metadata.name}/head-content`
- );
- const blob = new Blob([data.raw], {
- type: "text/plain;charset=utf-8",
- });
- const url = window.URL.createObjectURL(blob);
- const link = document.createElement("a");
- link.href = url;
- link.download = `${post.post.spec.title}.${data.rawType}`;
- link.click();
- },
- },
- ];
- },
- },
-});
-```
-
-## 类型定义
-
-### ListedPost
-
-```mdx-code-block
-import ListedPost from "./interface/ListedPost.md";
-
-
-```
diff --git a/docs/developer-guide/plugin/extension-points/ui/post-list-item-operation-create.mdx b/docs/developer-guide/plugin/extension-points/ui/post-list-item-operation-create.mdx
new file mode 100644
index 00000000..c0055000
--- /dev/null
+++ b/docs/developer-guide/plugin/extension-points/ui/post-list-item-operation-create.mdx
@@ -0,0 +1,88 @@
+---
+title: 文章数据列表操作菜单
+description: 扩展文章数据列表操作菜单 - post:list-item:operation:create
+---
+
+此扩展点用于扩展文章数据列表的操作菜单项。
+
+
+
+## 定义方式
+
+```ts
+export default definePlugin({
+ extensionPoints: {
+ "post:list-item:operation:create": (
+ post: Ref
+ ): OperationItem[] | Promise[]> => {
+ return [
+ {
+ priority: 10,
+ component: markRaw(VDropdownItem),
+ props: {},
+ action: (item?: ListedPost) => {
+ // do something
+ },
+ label: "foo",
+ hidden: false,
+ permissions: [],
+ children: [],
+ },
+ ];
+ },
+ },
+});
+```
+
+import OperationItem from "./interface/OperationItem.md";
+
+
+
+## 示例
+
+此示例将实现一个操作菜单项,点击后会将文章内容作为文件下载到本地。
+
+```ts
+import type { ListedPost } from "@halo-dev/api-client";
+import { VDropdownItem } from "@halo-dev/components";
+import { definePlugin } from "@halo-dev/ui-shared";
+import axios from "axios";
+import { markRaw } from "vue";
+
+export default definePlugin({
+ extensionPoints: {
+ "post:list-item:operation:create": () => {
+ return [
+ {
+ priority: 21,
+ component: markRaw(VDropdownItem),
+ label: "下载到本地",
+ visible: true,
+ permissions: [],
+ action: async (post: ListedPost) => {
+ const { data } = await axios.get(
+ `/apis/api.console.halo.run/v1alpha1/posts/${post.post.metadata.name}/head-content`
+ );
+ const blob = new Blob([data.raw], {
+ type: "text/plain;charset=utf-8",
+ });
+ const url = window.URL.createObjectURL(blob);
+ const link = document.createElement("a");
+ link.href = url;
+ link.download = `${post.post.spec.title}.${data.rawType}`;
+ link.click();
+ },
+ },
+ ];
+ },
+ },
+});
+```
+
+## 类型定义
+
+### ListedPost
+
+import ListedPost from "./interface/ListedPost.md";
+
+
diff --git a/docs/developer-guide/plugin/extension-points/ui/reply-list-item-operation-create.md b/docs/developer-guide/plugin/extension-points/ui/reply-list-item-operation-create.md
deleted file mode 100644
index ccbe7bf7..00000000
--- a/docs/developer-guide/plugin/extension-points/ui/reply-list-item-operation-create.md
+++ /dev/null
@@ -1,81 +0,0 @@
----
-title: 回复数据列表操作菜单
-description: 扩展回复数据列表操作菜单 - reply:list-item:operation:create
----
-
-此扩展点用于扩展回复数据列表的操作菜单项。
-
-
-
-## 定义方式
-
-```ts
-export default definePlugin({
- extensionPoints: {
- "reply:list-item:operation:create": (
- reply: Ref
- ): OperationItem[] | Promise[]> => {
- return [
- {
- priority: 10,
- component: markRaw(VDropdownItem),
- props: {},
- action: (item?: ListedReply) => {
- // do something
- },
- label: "foo",
- hidden: false,
- permissions: [],
- children: [],
- },
- ];
- },
- },
-});
-```
-
-```mdx-code-block
-import OperationItem from "./interface/OperationItem.md";
-
-
-```
-
-## 示例
-
-此示例将实现一个操作菜单项。
-
-```ts
-import type { ListedReply } from "@halo-dev/api-client";
-import { VDropdownItem } from "@halo-dev/components";
-import { definePlugin } from "@halo-dev/ui-shared";
-import { markRaw } from "vue";
-
-export default definePlugin({
- extensionPoints: {
- "reply:list-item:operation:create": () => {
- return [
- {
- priority: 21,
- component: markRaw(VDropdownItem),
- label: "测试回复菜单",
- visible: true,
- permissions: [],
- action: async (reply: ListedReply) => {
- console.log(reply)
- },
- },
- ];
- },
- },
-});
-```
-
-## 类型定义
-
-### ListedReply
-
-```mdx-code-block
-import ListedReply from "./interface/ListedReply.md";
-
-
-```
diff --git a/docs/developer-guide/plugin/extension-points/ui/reply-list-item-operation-create.mdx b/docs/developer-guide/plugin/extension-points/ui/reply-list-item-operation-create.mdx
new file mode 100644
index 00000000..d17752f4
--- /dev/null
+++ b/docs/developer-guide/plugin/extension-points/ui/reply-list-item-operation-create.mdx
@@ -0,0 +1,77 @@
+---
+title: 回复数据列表操作菜单
+description: 扩展回复数据列表操作菜单 - reply:list-item:operation:create
+---
+
+此扩展点用于扩展回复数据列表的操作菜单项。
+
+
+
+## 定义方式
+
+```ts
+export default definePlugin({
+ extensionPoints: {
+ "reply:list-item:operation:create": (
+ reply: Ref
+ ): OperationItem[] | Promise[]> => {
+ return [
+ {
+ priority: 10,
+ component: markRaw(VDropdownItem),
+ props: {},
+ action: (item?: ListedReply) => {
+ // do something
+ },
+ label: "foo",
+ hidden: false,
+ permissions: [],
+ children: [],
+ },
+ ];
+ },
+ },
+});
+```
+
+import OperationItem from "./interface/OperationItem.md";
+
+
+
+## 示例
+
+此示例将实现一个操作菜单项。
+
+```ts
+import type { ListedReply } from "@halo-dev/api-client";
+import { VDropdownItem } from "@halo-dev/components";
+import { definePlugin } from "@halo-dev/ui-shared";
+import { markRaw } from "vue";
+
+export default definePlugin({
+ extensionPoints: {
+ "reply:list-item:operation:create": () => {
+ return [
+ {
+ priority: 21,
+ component: markRaw(VDropdownItem),
+ label: "测试回复菜单",
+ visible: true,
+ permissions: [],
+ action: async (reply: ListedReply) => {
+ console.log(reply)
+ },
+ },
+ ];
+ },
+ },
+});
+```
+
+## 类型定义
+
+### ListedReply
+
+import ListedReply from "./interface/ListedReply.md";
+
+
diff --git a/docs/developer-guide/plugin/extension-points/ui/single-page-list-item-field-create.md b/docs/developer-guide/plugin/extension-points/ui/single-page-list-item-field-create.md
deleted file mode 100644
index 23c90c97..00000000
--- a/docs/developer-guide/plugin/extension-points/ui/single-page-list-item-field-create.md
+++ /dev/null
@@ -1,80 +0,0 @@
----
-title: 页面数据列表显示字段
-description: 扩展页面数据列表显示字段 - single-page:list-item:field:create
----
-
-此扩展点用于扩展页面数据列表的显示字段。
-
-
-
-## 定义方式
-
-```ts
-export default definePlugin({
- extensionPoints: {
- "single-page:list-item:field:create": (singlePage: Ref): EntityFieldItem[] | Promise => {
- return [
- {
- priority: 0,
- position: "start",
- component: markRaw(FooComponent),
- props: {},
- permissions: [],
- hidden: false,
- }
- ];
- },
- },
-});
-```
-
-```ts title="EntityFieldItem"
-export interface EntityFieldItem {
- priority: number;
- position: "start" | "end";
- component: Raw;
- props?: Record\;
- permissions?: string[];
- hidden?: boolean;
-}
-```
-
-## 示例
-
-此示例将添加一个显示页面 slug(别名)的字段。
-
-```ts
-import { definePlugin } from "@halo-dev/ui-shared";
-import { markRaw, type Ref } from "vue";
-import type { ListedSinglePage } from "@halo-dev/api-client";
-import { VEntityField } from "@halo-dev/components";
-
-export default definePlugin({
- extensionPoints: {
- "single-page:list-item:field:create": (singlePage: Ref) => {
- return [
- {
- priority: 0,
- position: "end",
- component: markRaw(VEntityField),
- props: {
- description: singlePage.value.page.spec.slug,
- },
- permissions: [],
- hidden: false,
- },
- ];
- },
- },
-});
-```
-
-## 类型定义
-
-### ListedSinglePage
-
-```mdx-code-block
-import ListedSinglePage from "./interface/ListedSinglePage.md";
-
-
-```
diff --git a/docs/developer-guide/plugin/extension-points/ui/single-page-list-item-field-create.mdx b/docs/developer-guide/plugin/extension-points/ui/single-page-list-item-field-create.mdx
new file mode 100644
index 00000000..1058ea55
--- /dev/null
+++ b/docs/developer-guide/plugin/extension-points/ui/single-page-list-item-field-create.mdx
@@ -0,0 +1,78 @@
+---
+title: 页面数据列表显示字段
+description: 扩展页面数据列表显示字段 - single-page:list-item:field:create
+---
+
+此扩展点用于扩展页面数据列表的显示字段。
+
+
+
+## 定义方式
+
+```ts
+export default definePlugin({
+ extensionPoints: {
+ "single-page:list-item:field:create": (singlePage: Ref): EntityFieldItem[] | Promise => {
+ return [
+ {
+ priority: 0,
+ position: "start",
+ component: markRaw(FooComponent),
+ props: {},
+ permissions: [],
+ hidden: false,
+ }
+ ];
+ },
+ },
+});
+```
+
+```ts title="EntityFieldItem"
+export interface EntityFieldItem {
+ priority: number;
+ position: "start" | "end";
+ component: Raw;
+ props?: Record\;
+ permissions?: string[];
+ hidden?: boolean;
+}
+```
+
+## 示例
+
+此示例将添加一个显示页面 slug(别名)的字段。
+
+```ts
+import { definePlugin } from "@halo-dev/ui-shared";
+import { markRaw, type Ref } from "vue";
+import type { ListedSinglePage } from "@halo-dev/api-client";
+import { VEntityField } from "@halo-dev/components";
+
+export default definePlugin({
+ extensionPoints: {
+ "single-page:list-item:field:create": (singlePage: Ref) => {
+ return [
+ {
+ priority: 0,
+ position: "end",
+ component: markRaw(VEntityField),
+ props: {
+ description: singlePage.value.page.spec.slug,
+ },
+ permissions: [],
+ hidden: false,
+ },
+ ];
+ },
+ },
+});
+```
+
+## 类型定义
+
+### ListedSinglePage
+
+import ListedSinglePage from "./interface/ListedSinglePage.md";
+
+
diff --git a/docs/developer-guide/plugin/extension-points/ui/single-page-list-item-operation-create.md b/docs/developer-guide/plugin/extension-points/ui/single-page-list-item-operation-create.md
deleted file mode 100644
index 890901fe..00000000
--- a/docs/developer-guide/plugin/extension-points/ui/single-page-list-item-operation-create.md
+++ /dev/null
@@ -1,92 +0,0 @@
----
-title: 页面数据列表操作菜单
-description: 扩展页面数据列表操作菜单 - single-page:list-item:operation:create
----
-
-此扩展点用于扩展页面数据列表的操作菜单项。
-
-
-
-## 定义方式
-
-```ts
-export default definePlugin({
- extensionPoints: {
- "single-page:list-item:operation:create": (
- singlePage: Ref
- ): OperationItem[] | Promise[]> => {
- return [
- {
- priority: 10,
- component: markRaw(VDropdownItem),
- props: {},
- action: (item?: ListedSinglePage) => {
- // do something
- },
- label: "foo",
- hidden: false,
- permissions: [],
- children: [],
- },
- ];
- },
- },
-});
-```
-
-```mdx-code-block
-import OperationItem from "./interface/OperationItem.md";
-
-
-```
-
-## 示例
-
-此示例将实现一个操作菜单项,点击后会将页面内容作为文件下载到本地。
-
-```ts
-import type { ListedSinglePage } from "@halo-dev/api-client";
-import { VDropdownItem } from "@halo-dev/components";
-import { definePlugin } from "@halo-dev/ui-shared";
-import axios from "axios";
-import { markRaw } from "vue";
-
-export default definePlugin({
- extensionPoints: {
- "single-page:list-item:operation:create": () => {
- return [
- {
- priority: 21,
- component: markRaw(VDropdownItem),
- label: "下载到本地",
- visible: true,
- permissions: [],
- action: async (singlePage: ListedSinglePage) => {
- const { data } = await axios.get(
- `/apis/api.console.halo.run/v1alpha1/single-pages/${singlePage.page.metadata.name}/head-content`
- );
- const blob = new Blob([data.raw], {
- type: "text/plain;charset=utf-8",
- });
- const url = window.URL.createObjectURL(blob);
- const link = document.createElement("a");
- link.href = url;
- link.download = `${singlePage.page.spec.title}.${data.rawType}`;
- link.click();
- },
- },
- ];
- },
- },
-});
-```
-
-## 类型定义
-
-### ListedSinglePage
-
-```mdx-code-block
-import ListedSinglePage from "./interface/ListedSinglePage.md";
-
-
-```
diff --git a/docs/developer-guide/plugin/extension-points/ui/single-page-list-item-operation-create.mdx b/docs/developer-guide/plugin/extension-points/ui/single-page-list-item-operation-create.mdx
new file mode 100644
index 00000000..4c1c3256
--- /dev/null
+++ b/docs/developer-guide/plugin/extension-points/ui/single-page-list-item-operation-create.mdx
@@ -0,0 +1,88 @@
+---
+title: 页面数据列表操作菜单
+description: 扩展页面数据列表操作菜单 - single-page:list-item:operation:create
+---
+
+此扩展点用于扩展页面数据列表的操作菜单项。
+
+
+
+## 定义方式
+
+```ts
+export default definePlugin({
+ extensionPoints: {
+ "single-page:list-item:operation:create": (
+ singlePage: Ref
+ ): OperationItem[] | Promise[]> => {
+ return [
+ {
+ priority: 10,
+ component: markRaw(VDropdownItem),
+ props: {},
+ action: (item?: ListedSinglePage) => {
+ // do something
+ },
+ label: "foo",
+ hidden: false,
+ permissions: [],
+ children: [],
+ },
+ ];
+ },
+ },
+});
+```
+
+import OperationItem from "./interface/OperationItem.md";
+
+
+
+## 示例
+
+此示例将实现一个操作菜单项,点击后会将页面内容作为文件下载到本地。
+
+```ts
+import type { ListedSinglePage } from "@halo-dev/api-client";
+import { VDropdownItem } from "@halo-dev/components";
+import { definePlugin } from "@halo-dev/ui-shared";
+import axios from "axios";
+import { markRaw } from "vue";
+
+export default definePlugin({
+ extensionPoints: {
+ "single-page:list-item:operation:create": () => {
+ return [
+ {
+ priority: 21,
+ component: markRaw(VDropdownItem),
+ label: "下载到本地",
+ visible: true,
+ permissions: [],
+ action: async (singlePage: ListedSinglePage) => {
+ const { data } = await axios.get(
+ `/apis/api.console.halo.run/v1alpha1/single-pages/${singlePage.page.metadata.name}/head-content`
+ );
+ const blob = new Blob([data.raw], {
+ type: "text/plain;charset=utf-8",
+ });
+ const url = window.URL.createObjectURL(blob);
+ const link = document.createElement("a");
+ link.href = url;
+ link.download = `${singlePage.page.spec.title}.${data.rawType}`;
+ link.click();
+ },
+ },
+ ];
+ },
+ },
+});
+```
+
+## 类型定义
+
+### ListedSinglePage
+
+import ListedSinglePage from "./interface/ListedSinglePage.md";
+
+
diff --git a/docs/developer-guide/plugin/extension-points/ui/theme-list-item-operation-create.md b/docs/developer-guide/plugin/extension-points/ui/theme-list-item-operation-create.md
deleted file mode 100644
index 8d4f1696..00000000
--- a/docs/developer-guide/plugin/extension-points/ui/theme-list-item-operation-create.md
+++ /dev/null
@@ -1,91 +0,0 @@
----
-title: 主题数据列表操作菜单
-description: 扩展主题数据列表操作菜单 - theme:list-item:operation:create
----
-
-此扩展点用于扩展主题数据列表的操作菜单项。
-
-
-
-## 定义方式
-
-```ts
-export default definePlugin({
- extensionPoints: {
- "theme:list-item:operation:create": (
- theme: Ref
- ): OperationItem[] | Promise[]> => {
- return [
- {
- priority: 10,
- component: markRaw(VDropdownItem),
- props: {},
- action: (item?: Theme) => {
- // do something
- },
- label: "foo",
- hidden: false,
- permissions: [],
- children: [],
- },
- ];
- },
- },
-});
-```
-
-```mdx-code-block
-import OperationItem from "./interface/OperationItem.md";
-
-
-```
-
-## 示例
-
-此示例将实现一个跳转到前台预览主题的操作菜单项。
-
-```ts
-import { definePlugin, type OperationItem } from "@halo-dev/ui-shared";
-import { VButton } from "@halo-dev/components";
-import { markRaw, type Ref } from "vue";
-import type { Theme } from "@halo-dev/api-client";
-
-export default definePlugin({
- extensionPoints: {
- "theme:list-item:operation:create": (
- theme: Ref
- ): OperationItem[] | Promise[]> => {
- return [
- {
- priority: 10,
- component: markRaw(VButton),
- props: {
- size: "sm",
- },
- action: (item?: Theme) => {
- window.open(`/?preview-theme=${item?.metadata.name}`);
- },
- label: "前台预览",
- hidden: false,
- permissions: [],
- children: [],
- },
- ];
- },
- },
-});
-```
-
-## 实现案例
-
-- [https://github.com/halo-dev/plugin-app-store](https://github.com/halo-dev/plugin-app-store)
-
-## 类型定义
-
-### Theme
-
-```mdx-code-block
-import Theme from "./interface/Theme.md";
-
-
-```
diff --git a/docs/developer-guide/plugin/extension-points/ui/theme-list-item-operation-create.mdx b/docs/developer-guide/plugin/extension-points/ui/theme-list-item-operation-create.mdx
new file mode 100644
index 00000000..0a86de83
--- /dev/null
+++ b/docs/developer-guide/plugin/extension-points/ui/theme-list-item-operation-create.mdx
@@ -0,0 +1,87 @@
+---
+title: 主题数据列表操作菜单
+description: 扩展主题数据列表操作菜单 - theme:list-item:operation:create
+---
+
+此扩展点用于扩展主题数据列表的操作菜单项。
+
+
+
+## 定义方式
+
+```ts
+export default definePlugin({
+ extensionPoints: {
+ "theme:list-item:operation:create": (
+ theme: Ref
+ ): OperationItem[] | Promise[]> => {
+ return [
+ {
+ priority: 10,
+ component: markRaw(VDropdownItem),
+ props: {},
+ action: (item?: Theme) => {
+ // do something
+ },
+ label: "foo",
+ hidden: false,
+ permissions: [],
+ children: [],
+ },
+ ];
+ },
+ },
+});
+```
+
+import OperationItem from "./interface/OperationItem.md";
+
+
+
+## 示例
+
+此示例将实现一个跳转到前台预览主题的操作菜单项。
+
+```ts
+import { definePlugin, type OperationItem } from "@halo-dev/ui-shared";
+import { VButton } from "@halo-dev/components";
+import { markRaw, type Ref } from "vue";
+import type { Theme } from "@halo-dev/api-client";
+
+export default definePlugin({
+ extensionPoints: {
+ "theme:list-item:operation:create": (
+ theme: Ref
+ ): OperationItem[] | Promise[]> => {
+ return [
+ {
+ priority: 10,
+ component: markRaw(VButton),
+ props: {
+ size: "sm",
+ },
+ action: (item?: Theme) => {
+ window.open(`/?preview-theme=${item?.metadata.name}`);
+ },
+ label: "前台预览",
+ hidden: false,
+ permissions: [],
+ children: [],
+ },
+ ];
+ },
+ },
+});
+```
+
+## 实现案例
+
+- [https://github.com/halo-dev/plugin-app-store](https://github.com/halo-dev/plugin-app-store)
+
+## 类型定义
+
+### Theme
+
+import Theme from "./interface/Theme.md";
+
+
diff --git a/docs/developer-guide/plugin/index.md b/docs/developer-guide/plugin/index.md
new file mode 100644
index 00000000..e08ab273
--- /dev/null
+++ b/docs/developer-guide/plugin/index.md
@@ -0,0 +1,5 @@
+---
+title: 插件开发
+description: 系统了解 Halo 插件开发流程,从环境准备、项目结构和基础 API 到扩展点、插件交互、安全权限及完整案例实践
+overview: true
+---
diff --git a/docs/developer-guide/plugin/interaction/_meta.json b/docs/developer-guide/plugin/interaction/_meta.json
new file mode 100644
index 00000000..c493e2cb
--- /dev/null
+++ b/docs/developer-guide/plugin/interaction/_meta.json
@@ -0,0 +1 @@
+["dependency", "shared-events", "making-plugin-extensible"]
diff --git a/docs/developer-guide/plugin/interaction/dependency.md b/docs/developer-guide/plugin/interaction/dependency.md
index b16b9e6d..23427e85 100644
--- a/docs/developer-guide/plugin/interaction/dependency.md
+++ b/docs/developer-guide/plugin/interaction/dependency.md
@@ -94,7 +94,7 @@ Halo 插件系统支持在 `plugin.yaml` 文件中通过 `pluginDependencies`
在 Gradle 项目中,推荐使用标准的项目结构,以便于插件代码的管理和依赖的声明。以下是一个典型的 Halo 插件项目结构示例:
-```plaintext
+```tree
my-halo-plugin/
├── build.gradle # 项目的构建配置
├── settings.gradle # Gradle 设置文件
@@ -117,7 +117,7 @@ my-halo-plugin/
以下是一个优化后的项目结构示例,包含 `api` 和 `plugin` 模块:
-```plaintext
+```tree
my-halo-plugin/
├── build.gradle # 根项目构建配置文件
├── settings.gradle # 设置文件,声明子模块
diff --git a/docs/developer-guide/plugin/interaction/index.md b/docs/developer-guide/plugin/interaction/index.md
new file mode 100644
index 00000000..433bac64
--- /dev/null
+++ b/docs/developer-guide/plugin/interaction/index.md
@@ -0,0 +1,5 @@
+---
+title: 与其他插件交互
+description: 实现 Halo 插件之间的协作,配置插件依赖、通过事件总线共享数据,并设计可供其他插件接入的稳定扩展点与接口
+overview: true
+---
diff --git a/docs/developer-guide/plugin/interaction/shared-events.md b/docs/developer-guide/plugin/interaction/shared-events.md
index e72662a8..f7a7e7ab 100644
--- a/docs/developer-guide/plugin/interaction/shared-events.md
+++ b/docs/developer-guide/plugin/interaction/shared-events.md
@@ -130,7 +130,7 @@ public class CustomEventPublisher {
3. 配置插件 B 的 `plugin.yaml` 中的 `pluginDependencies` 依赖插件 A,参考 [插件依赖声明](dependency.md#依赖声明方式)
-:::info
+:::info 将依赖插件 API 声明为 compileOnly
关于为什么必须将插件 A 的 `plugin-a-api` 声明为 `compileOnly`?
插件类加载的顺序是:
diff --git a/docs/developer-guide/plugin/introduction.md b/docs/developer-guide/plugin/introduction.md
index 1bcaee82..fc43a1c4 100644
--- a/docs/developer-guide/plugin/introduction.md
+++ b/docs/developer-guide/plugin/introduction.md
@@ -1,6 +1,6 @@
---
title: 介绍
-description: Halo 插件机制的简介
+description: 认识 Halo 的可插拔架构、按需安装与卸载机制以及插件开发接口,了解插件如何以低耦合方式扩展系统功能并保持模块可维护性
---
Halo 采用可插拔架构,功能模块之间耦合度低、灵活性提高,支持用户按需安装、卸载插件,操作便捷。同时提供插件开发接口以确保较高扩展性和可维护性,这个系列的文档将帮助你了解如何开发 Halo 插件。
diff --git a/docs/developer-guide/plugin/prepare.md b/docs/developer-guide/plugin/prepare.md
index de624924..67ee9ad7 100644
--- a/docs/developer-guide/plugin/prepare.md
+++ b/docs/developer-guide/plugin/prepare.md
@@ -1,13 +1,13 @@
---
title: 准备工作
-description: 插件开发的准备工作
+description: 准备 Halo 插件开发所需的 Java、Spring Boot、Vue、TypeScript、Node.js、包管理器与 Git 环境
---
在 Halo 中,插件是使用 Java 和 JavaScript / TypeScript 编写的,UI 使用 [Vuejs](https://vuejs.org) 编写。
在创建你的第一个插件之前,请确保你具备以下条件:
-- 你能通过 [Docker 运行 Halo](../../getting-started/install/docker) 或在[开发环境运行 Halo](../core/run.md)。
+- 你能通过 [Docker 运行 Halo](../../guide/install/docker.mdx) 或在[开发环境运行 Halo](../core/run.md)。
- 你熟悉 Java Web 开发并掌握 [Spring Boot](https://spring.io/projects/spring-boot/) 框架。
- 你需要在计算机上安装最新的 LTS 版本的 Node.js,如果你还没有 Node.js 安装,你可以在这里下载 [Node.js 18 LTS](https://nodejs.org/)。
- 你熟悉 Vue 和 TypeScript。
@@ -15,15 +15,3 @@ description: 插件开发的准备工作
- Git 是一个版本控制系统,用于跟踪代码的更改,您需要 Git 来下载示例插件并发布插件。
同时需要先阅读 [Halo 架构概览](../core/framework.md) 以了解 Halo 的核心概念和技术栈。
-
-## AI 辅助开发
-
-Halo 官方为插件开发者提供了 Agent Skills,支持在 Cursor、Claude Code、Codex 等 AI 开发工具中使用,以获得 Halo 插件开发的深度上下文和辅助能力。
-
-- [halo-dev/dev-skills](https://github.com/halo-dev/dev-skills) - 包含 `halo-plugin-dev` Skill,涵盖插件目录结构、Java 后端开发、Vue 3 前端开发、RBAC 权限管理、DevTools 工作流、OpenAPI 客户端生成等内容。
-
-安装方式:
-
-```bash
-npx skills add halo-dev/dev-skills@halo-plugin-dev -g
-```
diff --git a/docs/developer-guide/plugin/security/index.md b/docs/developer-guide/plugin/security/index.md
new file mode 100644
index 00000000..8ca5c9a7
--- /dev/null
+++ b/docs/developer-guide/plugin/security/index.md
@@ -0,0 +1,5 @@
+---
+title: 安全和权限管理
+description: 为 Halo 插件配置安全与权限管理,使用 RBAC、角色模板和 UI 权限控制保护服务端 API 与管理端功能入口
+overview: true
+---
diff --git a/docs/developer-guide/plugin/security/role-template.md b/docs/developer-guide/plugin/security/role-template.md
index 60ee69d6..3de75e42 100644
--- a/docs/developer-guide/plugin/security/role-template.md
+++ b/docs/developer-guide/plugin/security/role-template.md
@@ -46,7 +46,7 @@ rules:
- 以 `/api` 开头,且以 `/api//[//]` 规则组成 APIs,最少路径层级为 3 即 `/api//`,最多路径层级为 5 即包含 `` 和 ``,例如 `/api/v1/posts`。
- 以 `/apis///[//]` 规则组成的 APIs,最少路径层级为 4 即 `/apis///`,最多路径层级为 6 即包含 `` 和 ``,例如 `/apis/my-plugin.halo.run/v1alpha1/persons`。
-:::info[注意]
+:::info API 路径限制
`[]`包裹的部分表示可选,`/api` 前缀被 Halo 保留,不允许插件定义以 `/api` 开头的资源型 APIs,所以插件的资源型 APIs 都是以 `/apis` 开头的。
:::
diff --git a/docs/developer-guide/plugin/security/ui-permission.md b/docs/developer-guide/plugin/security/ui-permission.md
index 8bb6faa8..335d0da0 100644
--- a/docs/developer-guide/plugin/security/ui-permission.md
+++ b/docs/developer-guide/plugin/security/ui-permission.md
@@ -1,6 +1,6 @@
---
title: UI 权限控制
-description: 了解如何控制用户界面的操作权限。
+description: 通过角色模板的 ui-permissions 注解声明 Halo 插件前端权限,并在路由、菜单和组件中使用 permissions 或 HasPermission 控制界面可见操作
---
UI(用户界面)权限控制是指在应用程序中,通过用户角色或身份的不同,控制用户界面上可见和可操作的元素。
这种权限控制的目的是根据用户的权限等级和角色,动态调整他们在应用中的操作权限,从而确保系统的安全性和功能的正确使用。
diff --git a/docs/developer-guide/restful-api/_meta.json b/docs/developer-guide/restful-api/_meta.json
new file mode 100644
index 00000000..8b0c4b38
--- /dev/null
+++ b/docs/developer-guide/restful-api/_meta.json
@@ -0,0 +1 @@
+["introduction", "api-client"]
diff --git a/docs/developer-guide/restful-api/api-client.md b/docs/developer-guide/restful-api/api-client.md
index 1e1a236f..d40780fb 100644
--- a/docs/developer-guide/restful-api/api-client.md
+++ b/docs/developer-guide/restful-api/api-client.md
@@ -13,7 +13,7 @@ description: 介绍使用 API Client 请求库发起 API 请求的方式
pnpm install @halo-dev/api-client axios
```
-:::info[提示]
+:::info 推荐使用 TypeScript
推荐在项目中引入 TypeScript,可以获得更好的类型提示。
:::
@@ -107,6 +107,6 @@ coreApiClient.content.post.listPost().then(response => {
})
```
-:::info[提示]
+:::info 查看认证方式
认证方式的说明请参考:[认证方式](./introduction.md#认证方式)
:::
diff --git a/docs/developer-guide/restful-api/index.md b/docs/developer-guide/restful-api/index.md
new file mode 100644
index 00000000..535beafd
--- /dev/null
+++ b/docs/developer-guide/restful-api/index.md
@@ -0,0 +1,5 @@
+---
+title: RESTful API
+description: 介绍 Halo RESTful API 的认证与调用方式,以及使用 @halo-dev/api-client 访问 Core、Console、UC 和 Public API 的方法。
+overview: true
+---
diff --git a/docs/developer-guide/restful-api/introduction.md b/docs/developer-guide/restful-api/introduction.md
index 90da9a77..de86b5e8 100644
--- a/docs/developer-guide/restful-api/introduction.md
+++ b/docs/developer-guide/restful-api/introduction.md
@@ -27,7 +27,7 @@ Halo 提供了 RESTful 风格的 API,Halo 的前端(主要为 Console 和 UC
个人令牌是一种用于访问 Halo API 的安全凭证,你可以使用个人令牌代替您的 Halo 账户密码进行身份验证。
-在个人中心的**个人令牌**页面中,可以根据当前用户已有的权限创建个人令牌,创建方式可参考:[个人中心 / 个人令牌](../../user-guide/user-center.md#个人令牌)
+在个人中心的**个人令牌**页面中,可以根据当前用户已有的权限创建个人令牌,创建方式可参考:[个人中心 / 个人令牌](../../guide/use/user-center.md#个人令牌)
创建成功后,将会得到一个 `pat_` 开头的字符串,接下来在所需请求的请求头中添加 `Authorization` 字段,值为 `Bearer ` 即可。
@@ -59,10 +59,10 @@ axios.get('https://demo.halo.run/apis/content.halo.run/v1alpha1/posts', {
### Basic Auth
-:::warning
+:::warning Basic Auth 默认关闭
Basic Auth 认证方式已经在 Halo 2.20 默认关闭,需要手动添加 `halo.security.basic-auth.disabled=false` 启动参数来开启。
-配置详情可见:[配置列表](../../getting-started/install/config.md#halo-独有配置)
+配置详情可见:[配置列表](../../guide/install/config.md#halo-独有配置)
:::
Basic Auth 是一种通过用户名和密码进行身份验证的方式,你可以使用 Halo 账户的用户名和密码进行身份验证。
diff --git a/docs/developer-guide/theme/_meta.json b/docs/developer-guide/theme/_meta.json
new file mode 100644
index 00000000..02e1b7ea
--- /dev/null
+++ b/docs/developer-guide/theme/_meta.json
@@ -0,0 +1,28 @@
+[
+ "prepare",
+ "ai",
+ "config",
+ "structure",
+ "ui-plugin",
+ "page-layout",
+ "static-resources",
+ "settings",
+ "annotations",
+ {
+ "type": "dir",
+ "name": "template-variables",
+ "label": "模板编写",
+ "collapsed": true
+ },
+ {
+ "type": "dir",
+ "name": "finder-apis",
+ "label": "Finder API",
+ "collapsed": true
+ },
+ "image-optimization",
+ "global-variables",
+ "template-tag",
+ "code-snippets",
+ "api-changelog"
+]
diff --git a/docs/developer-guide/theme/ai.md b/docs/developer-guide/theme/ai.md
new file mode 100644
index 00000000..bb6f71a6
--- /dev/null
+++ b/docs/developer-guide/theme/ai.md
@@ -0,0 +1,49 @@
+---
+title: AI 辅助
+description: 向 AI 提供 Halo 主题开发文档,或安装官方 Agent Skill,获取主题结构、Thymeleaf、Finder API、静态资源与设置表单开发上下文
+---
+
+为了帮助 AI 更全面地了解 Halo 主题的结构、开发流程与最佳实践,从而在主题开发和问题排查过程中提供更准确的帮助,可以向 AI 提供 Halo 开发文档,或安装面向主题开发的 Agent Skill。
+
+## 提供文档上下文
+
+如果 AI 工具支持读取网页,可以在提示词中提供以下地址:
+
+```text title='适合需要查阅多个文档时使用'
+https://docs.halo.run/llms.txt
+```
+
+```text title='适合专注于主题开发时使用'
+https://docs.halo.run/developer-guide/theme/index.md
+```
+
+## Agent Skill
+
+Agent Skill 是可安装到 AI 开发工具中的领域知识包,能够让 AI 在特定场景下更准确地给出建议或执行操作。
+
+[halo-dev/dev-skills](https://github.com/halo-dev/dev-skills) 仓库提供了 `halo-theme-dev` Skill,包含以下内容:
+
+- 主题目录结构与 `theme.yaml`、`settings.yaml` 配置
+- Thymeleaf 页面模板、布局片段与模板路由
+- 模板变量与 Finder API
+- 静态资源管理与 Vite 集成
+- 主题设置表单与模型元数据
+- 最小主题和 Vite 主题初始模板
+
+### 安装
+
+在 Cursor、Claude Code、Codex 等支持 Agent Skills 的 AI 开发工具中,可以通过 [Skills CLI](https://skills.sh/) 安装:
+
+```bash
+# 全局安装,可在所有项目中使用
+npx skills add halo-dev/dev-skills@halo-theme-dev -g
+
+# 或仅安装到当前项目
+npx skills add halo-dev/dev-skills@halo-theme-dev
+```
+
+### 使用
+
+安装完成后,通常在开发 Halo 主题时,Agent 会根据当前项目和任务自动识别并调用 `halo-theme-dev` Skill,无需在提示词中显式指定。如果 Agent 未自动调用,可以在提示词中明确要求使用该 Skill。
+
+AI 生成的代码仍需经过代码审查和功能验证后再用于生产环境。
diff --git a/docs/developer-guide/theme/annotations.md b/docs/developer-guide/theme/annotations.md
index 53a7cebf..aeb12427 100644
--- a/docs/developer-guide/theme/annotations.md
+++ b/docs/developer-guide/theme/annotations.md
@@ -1,5 +1,6 @@
---
title: 模型元数据
+description: 介绍 Halo 主题模板的 annotations 表达式对象,演示获取模型元数据、设置默认值及判断 annotations 字段是否存在。
---
在 [元数据表单定义](../annotations-form.md) 我们介绍了如何为模型添加元数据表单,此文档将介绍如何在主题模板中使用元数据。
diff --git a/docs/developer-guide/theme/config.md b/docs/developer-guide/theme/config.md
index db14bcda..5cbbe012 100644
--- a/docs/developer-guide/theme/config.md
+++ b/docs/developer-guide/theme/config.md
@@ -1,6 +1,6 @@
---
title: 配置文件
-description: 关于主题配置文件的文档。
+description: 配置 Halo 主题的 theme.yaml,说明主题标识、作者、版本、兼容要求、设置项、自定义模板与许可证等字段,并介绍重载和旧版迁移方法
---
目前 Halo 2.0 的主题必须在根目录包含 `theme.yaml`,用于配置主题的基本信息,如主题名称、版本、作者等。
@@ -90,6 +90,6 @@ npx @halo-dev/convert-theme-config-to-next theme
执行完成之后即可看到主题目录下生成了 `theme.2.0.yaml` 文件,重命名为 `theme.yaml` 即可。
-:::tip
+:::tip 修改转换后的资源名称
转换完成之后需要修改 `metadata.name`、`spec.settingName` 和 `spec.configMapName`。
:::
diff --git a/docs/developer-guide/theme/finder-apis.md b/docs/developer-guide/theme/finder-apis.md
deleted file mode 100644
index fc4522f3..00000000
--- a/docs/developer-guide/theme/finder-apis.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-title: Finder API
-description: 本文档介绍 Finder API 的使用方法。
----
-
-import DocCardList from '@theme/DocCardList';
-
-目前在主题模板中获取数据可以使用对应路由提供的 [模板变量](./template-variables),但为了满足在任意位置获取数据的需求,我们提供了 Finder API。
-
-
diff --git a/docs/developer-guide/theme/finder-apis/_meta.json b/docs/developer-guide/theme/finder-apis/_meta.json
new file mode 100644
index 00000000..6f44f5be
--- /dev/null
+++ b/docs/developer-guide/theme/finder-apis/_meta.json
@@ -0,0 +1,12 @@
+[
+ "category",
+ "tag",
+ "post",
+ "single-page",
+ "comment",
+ "contributor",
+ "menu",
+ "site-stats",
+ "theme",
+ "plugin"
+]
diff --git a/docs/developer-guide/theme/finder-apis/category.md b/docs/developer-guide/theme/finder-apis/category.md
deleted file mode 100644
index 4ecef87a..00000000
--- a/docs/developer-guide/theme/finder-apis/category.md
+++ /dev/null
@@ -1,224 +0,0 @@
----
-title: 文章分类
-description: 文章分类 - CategoryFinder
----
-
-import CategoryVo from "../vo/_CategoryVo.md"
-import CategoryTreeVo from "../vo/_CategoryTreeVo.md"
-
-## getByName(name)
-
-```js
-categoryFinder.getByName(name)
-```
-
-:::info[提示]
-通常建议配合 [主题设置](../settings.md) 和 [分类选择器](../../form-schema.md#categoryselect) 使用,让用户自行选择所需的分类。
-:::
-
-### 描述
-
-根据 `metadata.name` 获取文章分类。
-
-### 参数
-
-1. `name:string` - 分类的唯一标识 `metadata.name`。
-
-### 返回值
-
-[#CategoryVo](#categoryvo)
-
-### 示例
-
-```html
-
-```
-
-## getByNames(names)
-
-```js
-categoryFinder.getByNames(names)
-```
-
-:::info[提示]
-通常建议配合 [主题设置](../settings.md) 和 [分类选择器](../../form-schema.md#categoryselect) 使用,让用户自行选择所需的分类。
-:::
-
-### 描述
-
-根据一组 `metadata.name` 获取文章分类。
-
-### 参数
-
-1. `names:List` - 分类的唯一标识 `metadata.name` 的集合。
-
-### 返回值
-
-List\<[#CategoryVo](#categoryvo)\>
-
-### 示例
-
-```html
-
-```
-
-## list(page,size)
-
-```js
-categoryFinder.list(page,size)
-```
-
-### 描述
-
-根据分页参数获取分类列表。
-
-### 参数
-
-1. `page:int` - 分页页码,从 1 开始
-2. `size:int` - 分页条数
-
-### 返回值
-
-[#ListResult\](#listresultcategoryvo)
-
-### 示例
-
-```html
-
-```
-
-## listAll()
-
-```js
-categoryFinder.listAll()
-```
-
-### 描述
-
-获取所有文章分类。
-
-### 参数
-
-无
-
-### 返回值
-
-List\<[#CategoryVo](#categoryvo)\>
-
-### 示例
-
-```html
-
-```
-
-## listAsTree()
-
-```js
-categoryFinder.listAsTree()
-```
-
-### 描述
-
-获取所有文章分类的多层级结构。
-
-### 参数
-
-无
-
-### 返回值
-
-List\<[#CategoryTreeVo](#categorytreevo)\>
-
-### 示例
-
-```html
-
-
-
-
-
-```
-
-```html title="/templates/category-tree.html"
-
- -
-
-
-
-
-
-
-
-
-```
-
-## getBreadcrumbs(name)
-
-```js
-categoryFinder.getBreadcrumbs('category-foo')
-```
-
-### 描述
-
-获取分类树结构的路径节点,可以通过此方法来构建面包屑导航。
-
-### 参数
-
-- `name:string` - 分类的唯一标识 `metadata.name`,必填。
-
-### 返回值
-
-List\<[#CategoryVo](#categoryvo)\>
-
-### 示例
-
-```html
-
-```
-
-## 类型定义
-
-### CategoryVo
-
-
-
-### ListResult\
-
-```json title="ListResult"
-{
- "page": 0, // 当前页码
- "size": 0, // 每页条数
- "total": 0, // 总条数
- "items": "List<#CategoryVo>", // 分类列表数据
- "first": true, // 是否为第一页
- "last": true, // 是否为最后一页
- "hasNext": true, // 是否有下一页
- "hasPrevious": true, // 是否有上一页
- "totalPages": 0 // 总页数
-}
-```
-
-- [#CategoryVo](#categoryvo)
-
-### CategoryTreeVo
-
-
-
-- [#CategoryTreeVo](#categorytreevo)
diff --git a/docs/developer-guide/theme/finder-apis/category.mdx b/docs/developer-guide/theme/finder-apis/category.mdx
new file mode 100644
index 00000000..a3002b2a
--- /dev/null
+++ b/docs/developer-guide/theme/finder-apis/category.mdx
@@ -0,0 +1,224 @@
+---
+title: 文章分类
+description: 文章分类 - CategoryFinder
+---
+
+import CategoryVo from "../vo/_CategoryVo.md"
+import CategoryTreeVo from "../vo/_CategoryTreeVo.md"
+
+## getByName(name)
+
+```js
+categoryFinder.getByName(name)
+```
+
+:::info 配合分类选择器使用
+通常建议配合 [主题设置](../settings.md) 和 [分类选择器](../../form-schema.md#categoryselect) 使用,让用户自行选择所需的分类。
+:::
+
+### 描述
+
+根据 `metadata.name` 获取文章分类。
+
+### 参数
+
+1. `name:string` - 分类的唯一标识 `metadata.name`。
+
+### 返回值
+
+[#CategoryVo](#categoryvo)
+
+### 示例
+
+```html
+
+```
+
+## getByNames(names)
+
+```js
+categoryFinder.getByNames(names)
+```
+
+:::info 配合分类选择器使用
+通常建议配合 [主题设置](../settings.md) 和 [分类选择器](../../form-schema.md#categoryselect) 使用,让用户自行选择所需的分类。
+:::
+
+### 描述
+
+根据一组 `metadata.name` 获取文章分类。
+
+### 参数
+
+1. `names:List` - 分类的唯一标识 `metadata.name` 的集合。
+
+### 返回值
+
+List\<[#CategoryVo](#categoryvo)\>
+
+### 示例
+
+```html
+
+```
+
+## list(page,size)
+
+```js
+categoryFinder.list(page,size)
+```
+
+### 描述
+
+根据分页参数获取分类列表。
+
+### 参数
+
+1. `page:int` - 分页页码,从 1 开始
+2. `size:int` - 分页条数
+
+### 返回值
+
+[#ListResult\](#listresultcategoryvo)
+
+### 示例
+
+```html
+
+```
+
+## listAll()
+
+```js
+categoryFinder.listAll()
+```
+
+### 描述
+
+获取所有文章分类。
+
+### 参数
+
+无
+
+### 返回值
+
+List\<[#CategoryVo](#categoryvo)\>
+
+### 示例
+
+```html
+
+```
+
+## listAsTree()
+
+```js
+categoryFinder.listAsTree()
+```
+
+### 描述
+
+获取所有文章分类的多层级结构。
+
+### 参数
+
+无
+
+### 返回值
+
+List\<[#CategoryTreeVo](#categorytreevo)\>
+
+### 示例
+
+```html
+
+
+
+
+
+```
+
+```html title="/templates/category-tree.html"
+
+ -
+
+
+
+
+
+
+
+
+```
+
+## getBreadcrumbs(name)
+
+```js
+categoryFinder.getBreadcrumbs('category-foo')
+```
+
+### 描述
+
+获取分类树结构的路径节点,可以通过此方法来构建面包屑导航。
+
+### 参数
+
+- `name:string` - 分类的唯一标识 `metadata.name`,必填。
+
+### 返回值
+
+List\<[#CategoryVo](#categoryvo)\>
+
+### 示例
+
+```html
+
+```
+
+## 类型定义
+
+### CategoryVo
+
+
+
+### ListResult\
+
+```json title="ListResult"
+{
+ "page": 0, // 当前页码
+ "size": 0, // 每页条数
+ "total": 0, // 总条数
+ "items": "List<#CategoryVo>", // 分类列表数据
+ "first": true, // 是否为第一页
+ "last": true, // 是否为最后一页
+ "hasNext": true, // 是否有下一页
+ "hasPrevious": true, // 是否有上一页
+ "totalPages": 0 // 总页数
+}
+```
+
+- [#CategoryVo](#categoryvo)
+
+### CategoryTreeVo
+
+
+
+- [#CategoryTreeVo](#categorytreevo)
diff --git a/docs/developer-guide/theme/finder-apis/comment.md b/docs/developer-guide/theme/finder-apis/comment.md
deleted file mode 100644
index 9e42f8bd..00000000
--- a/docs/developer-guide/theme/finder-apis/comment.md
+++ /dev/null
@@ -1,155 +0,0 @@
----
-title: 评论
-description: 评论 - CommentFinder
----
-
-import CommentVo from "../vo/_CommentVo.md"
-import ReplyVo from "../vo/_ReplyVo.md"
-
-## getByName(name)
-
-```js
-commentFinder.getByName(name)
-```
-
-### 描述
-
-根据 `metadata.name` 获取评论。
-
-### 参数
-
-1. `name:string` - 评论的唯一标识 `metadata.name`。
-
-### 返回值
-
-[#CommentVo](#commentvo)
-
-### 示例
-
-```html
-
-
-
-
-```
-
-## list(ref,page,size)
-
-```js
-commentFinder.list(ref,page,size)
-```
-
-### 描述
-
-根据评论的 `metadata.name` 和分页参数获取回复列表。
-
-### 参数
-
-1. `ref:#Ref` - 评论的唯一标识 `metadata.name`。
-2. `page:int` - 分页页码,从 1 开始
-3. `size:int` - 分页条数
-
-- [#Ref](#ref)
-
-### 返回值
-
-[#ListResult\](#listresultcommentvo)
-
-### 示例
-
-```html
-
- -
-
-
-
-
-```
-
-## listReply(commentName,page,size)
-
-```js
-commentFinder.listReply(commentName,page,size)
-```
-
-### 描述
-
-根据评论的 `metadata.name` 和分页参数获取回复列表。
-
-### 参数
-
-1. `commentName:string` - 评论的唯一标识 `metadata.name`。
-1. `page:int` - 分页页码,从 1 开始
-2. `size:int` - 分页条数
-
-### 返回值
-
-[#ListResult\](#listresultreplyvo)
-
-### 示例
-
-```html
-
- -
-
-
-
-
-```
-
-## 类型定义
-
-### CommentVo
-
-
-
-### ListResult\
-
-```json title="ListResult"
-{
- "page": 0, // 当前页码
- "size": 0, // 每页条数
- "total": 0, // 总条数
- "items": "List<#CommentVo>", // 评论列表数据
- "first": true, // 是否为第一页
- "last": true, // 是否为最后一页
- "hasNext": true, // 是否有下一页
- "hasPrevious": true, // 是否有上一页
- "totalPages": 0 // 总页数
-}
-```
-
-- [#CommentVo](#commentvo)
-
-### ReplyVo
-
-
-
-### ListResult\
-
-```json title="ListResult"
-{
- "page": 0, // 当前页码
- "size": 0, // 每页条数
- "total": 0, // 总条数
- "items": "List<#ReplyVo>", // 回复列表数据
- "first": true, // 是否为第一页
- "last": true, // 是否为最后一页
- "hasNext": true, // 是否有下一页
- "hasPrevious": true, // 是否有上一页
- "totalPages": 0 // 总页数
-}
-```
-
-- [#ReplyVo](#replyvo)
-
-### Ref
-
-```json title="Ref"
-{
- "group": "string",
- "kind": "string",
- "version": "string",
- "name": "string"
-}
-```
diff --git a/docs/developer-guide/theme/finder-apis/comment.mdx b/docs/developer-guide/theme/finder-apis/comment.mdx
new file mode 100644
index 00000000..2c1019a8
--- /dev/null
+++ b/docs/developer-guide/theme/finder-apis/comment.mdx
@@ -0,0 +1,155 @@
+---
+title: 评论
+description: 使用 CommentFinder 按名称查询评论、按内容引用分页获取评论列表,并查询指定评论的回复,包含 CommentVo、ReplyVo 和 Ref 类型定义
+---
+
+import CommentVo from "../vo/_CommentVo.md"
+import ReplyVo from "../vo/_ReplyVo.md"
+
+## getByName(name)
+
+```js
+commentFinder.getByName(name)
+```
+
+### 描述
+
+根据 `metadata.name` 获取评论。
+
+### 参数
+
+1. `name:string` - 评论的唯一标识 `metadata.name`。
+
+### 返回值
+
+[#CommentVo](#commentvo)
+
+### 示例
+
+```html
+
+
+
+
+```
+
+## list(ref,page,size)
+
+```js
+commentFinder.list(ref,page,size)
+```
+
+### 描述
+
+根据评论的 `metadata.name` 和分页参数获取回复列表。
+
+### 参数
+
+1. `ref:#Ref` - 评论的唯一标识 `metadata.name`。
+2. `page:int` - 分页页码,从 1 开始
+3. `size:int` - 分页条数
+
+- [#Ref](#ref)
+
+### 返回值
+
+[#ListResult\](#listresultcommentvo)
+
+### 示例
+
+```html
+
+ -
+
+
+
+
+```
+
+## listReply(commentName,page,size)
+
+```js
+commentFinder.listReply(commentName,page,size)
+```
+
+### 描述
+
+根据评论的 `metadata.name` 和分页参数获取回复列表。
+
+### 参数
+
+1. `commentName:string` - 评论的唯一标识 `metadata.name`。
+1. `page:int` - 分页页码,从 1 开始
+2. `size:int` - 分页条数
+
+### 返回值
+
+[#ListResult\](#listresultreplyvo)
+
+### 示例
+
+```html
+
+ -
+
+
+
+
+```
+
+## 类型定义
+
+### CommentVo
+
+
+
+### ListResult\
+
+```json title="ListResult"
+{
+ "page": 0, // 当前页码
+ "size": 0, // 每页条数
+ "total": 0, // 总条数
+ "items": "List<#CommentVo>", // 评论列表数据
+ "first": true, // 是否为第一页
+ "last": true, // 是否为最后一页
+ "hasNext": true, // 是否有下一页
+ "hasPrevious": true, // 是否有上一页
+ "totalPages": 0 // 总页数
+}
+```
+
+- [#CommentVo](#commentvo)
+
+### ReplyVo
+
+
+
+### ListResult\
+
+```json title="ListResult"
+{
+ "page": 0, // 当前页码
+ "size": 0, // 每页条数
+ "total": 0, // 总条数
+ "items": "List<#ReplyVo>", // 回复列表数据
+ "first": true, // 是否为第一页
+ "last": true, // 是否为最后一页
+ "hasNext": true, // 是否有下一页
+ "hasPrevious": true, // 是否有上一页
+ "totalPages": 0 // 总页数
+}
+```
+
+- [#ReplyVo](#replyvo)
+
+### Ref
+
+```json title="Ref"
+{
+ "group": "string",
+ "kind": "string",
+ "version": "string",
+ "name": "string"
+}
+```
diff --git a/docs/developer-guide/theme/finder-apis/contributor.md b/docs/developer-guide/theme/finder-apis/contributor.mdx
similarity index 100%
rename from docs/developer-guide/theme/finder-apis/contributor.md
rename to docs/developer-guide/theme/finder-apis/contributor.mdx
diff --git a/docs/developer-guide/theme/finder-apis/index.md b/docs/developer-guide/theme/finder-apis/index.md
new file mode 100644
index 00000000..24d272b5
--- /dev/null
+++ b/docs/developer-guide/theme/finder-apis/index.md
@@ -0,0 +1,7 @@
+---
+title: Finder API
+description: 本文档介绍 Finder API 的使用方法。
+overview: true
+---
+
+目前在主题模板中获取数据可以使用对应路由提供的 [模板变量](../template-variables/index.md),但为了满足在任意位置获取数据的需求,我们提供了 Finder API。
diff --git a/docs/developer-guide/theme/finder-apis/menu.md b/docs/developer-guide/theme/finder-apis/menu.md
deleted file mode 100644
index f1ed29bb..00000000
--- a/docs/developer-guide/theme/finder-apis/menu.md
+++ /dev/null
@@ -1,87 +0,0 @@
----
-title: 导航菜单
-description: 导航菜单 - MenuFinder
----
-
-import MenuItemVo from "../vo/_MenuItemVo.md"
-import MenuVo from "../vo/_MenuVo.md"
-
-## getByName(name)
-
-```js
-menuFinder.getByName(name)
-```
-
-### 描述
-
-根据 `metadata.name` 获取菜单。
-
-### 参数
-
-1. `name:string` - 菜单的唯一标识 `metadata.name`。
-
-### 返回值
-
-[#MenuVo](#menuvo)
-
-### 示例
-
-```html
-
-
- -
-
-
-
-
-
-```
-
-## getPrimary()
-
-```js
-menuFinder.getPrimary()
-```
-
-### 描述
-
-获取主菜单。
-
-### 参数
-
-无
-
-### 返回值
-
-[#MenuVo](#menuvo)
-
-### 示例
-
-```html
-
-
- -
-
-
-
-
-
-```
-
-## 类型定义
-
-### MenuVo
-
-
-
-### MenuItemVo
-
-
diff --git a/docs/developer-guide/theme/finder-apis/menu.mdx b/docs/developer-guide/theme/finder-apis/menu.mdx
new file mode 100644
index 00000000..b0ecd7ca
--- /dev/null
+++ b/docs/developer-guide/theme/finder-apis/menu.mdx
@@ -0,0 +1,87 @@
+---
+title: 导航菜单
+description: 使用 MenuFinder 按唯一标识查询导航菜单或获取站点主菜单,并通过 Thymeleaf 遍历 MenuVo 与 MenuItemVo 渲染菜单链接
+---
+
+import MenuItemVo from "../vo/_MenuItemVo.md"
+import MenuVo from "../vo/_MenuVo.md"
+
+## getByName(name)
+
+```js
+menuFinder.getByName(name)
+```
+
+### 描述
+
+根据 `metadata.name` 获取菜单。
+
+### 参数
+
+1. `name:string` - 菜单的唯一标识 `metadata.name`。
+
+### 返回值
+
+[#MenuVo](#menuvo)
+
+### 示例
+
+```html
+
+
+ -
+
+
+
+
+
+```
+
+## getPrimary()
+
+```js
+menuFinder.getPrimary()
+```
+
+### 描述
+
+获取主菜单。
+
+### 参数
+
+无
+
+### 返回值
+
+[#MenuVo](#menuvo)
+
+### 示例
+
+```html
+
+
+ -
+
+
+
+
+
+```
+
+## 类型定义
+
+### MenuVo
+
+
+
+### MenuItemVo
+
+
diff --git a/docs/developer-guide/theme/finder-apis/plugin.md b/docs/developer-guide/theme/finder-apis/plugin.md
index 8585e584..7aa33128 100644
--- a/docs/developer-guide/theme/finder-apis/plugin.md
+++ b/docs/developer-guide/theme/finder-apis/plugin.md
@@ -1,6 +1,6 @@
---
title: 插件
-description: 插件 - PluginFinder
+description: 使用 PluginFinder 检查指定 Halo 插件是否已安装并启用,或进一步按 Semantic Version 版本范围判断插件是否可用
---
## available(pluginName)
diff --git a/docs/developer-guide/theme/finder-apis/post.md b/docs/developer-guide/theme/finder-apis/post.md
deleted file mode 100644
index 2d63b606..00000000
--- a/docs/developer-guide/theme/finder-apis/post.md
+++ /dev/null
@@ -1,600 +0,0 @@
----
-title: 文章
-description: 文章 - PostFinder
----
-
-import CategoryVo from "../vo/_CategoryVo.md";
-import TagVo from "../vo/_TagVo.md";
-import PostVo from "../vo/_PostVo.md";
-import ContentVo from "../vo/_ContentVo.md"
-import ContributorVo from "../vo/_ContributorVo.md"
-import ListedPostVo from "../vo/_ListedPostVo.md"
-
-## getByName(postName)
-
-```js
-postFinder.getByName(postName);
-```
-
-### 描述
-
-根据 `metadata.name` 获取文章。
-
-### 参数
-
-1. `postName:string` - 文章的唯一标识 `metadata.name`。
-
-### 返回值
-
-[#PostVo](#postvo)
-
-### 示例
-
-```html
-
-```
-
-## content(postName)
-
-```js
-postFinder.content(postName);
-```
-
-### 描述
-
-根据文章的 `metadata.name` 单独获取文章内容。
-
-### 参数
-
-1. `postName:string` - 文章的唯一标识 `metadata.name`。
-
-### 返回值
-
-[#ContentVo](#contentvo)
-
-### 示例
-
-```html
-
-
-
-```
-
-## cursor(postName)
-
-```js
-postFinder.cursor(postName);
-```
-
-### 描述
-
-根据文章的 `metadata.name` 获取相邻的文章(上一篇 / 下一篇)。
-
-:::info[提示]
-上一篇文章是指发布时间较当前文章更早的文章,下一篇文章是指发布时间较当前文章更新的文章。
-:::
-
-### 参数
-
-1. `postName:string` - 文章的唯一标识 `metadata.name`。
-
-### 返回值
-
-[#NavigationPostVo](#navigationpostvo)
-
-### 示例
-
-```html title="/templates/post.html"
-
-```
-
-## cursorByCategory(postName)
-
-```js
-postFinder.cursorByCategory(postName);
-```
-
-### 描述
-
-根据文章的 `metadata.name` 获取同一主分类下相邻的文章(上一篇 / 下一篇)。
-
-主分类为文章 `spec.categories` 中的第一个分类。此方法只匹配同一分类下的文章,不会包含子分类中的文章。如果当前文章没有分类、未发布或者不存在,将返回空的导航结果。
-
-:::info[提示]
-上一篇文章是指发布时间较当前文章更早的文章,下一篇文章是指发布时间较当前文章更新的文章。
-:::
-
-对应的 Public API 为:
-
-```bash
-GET /apis/api.content.halo.run/v1alpha1/posts/{name}/navigation?scope=category
-```
-
-### 参数
-
-1. `postName:string` - 文章的唯一标识 `metadata.name`。
-
-### 返回值
-
-[#NavigationPostVo](#navigationpostvo)
-
-### 示例
-
-```html title="/templates/post.html"
-
-```
-
-## listAll()
-
-```js
-postFinder.listAll();
-```
-
-### 描述
-
-获取所有文章。
-
-### 参数
-
-无
-
-### 返回值
-
-List\<[#ListedPostVo](#listedpostvo)\>
-
-### 示例
-
-```html
-
-```
-
-## random(maxSize)
-
-```js
-postFinder.random(maxSize);
-```
-
-### 描述
-
-随机获取文章列表。
-
-### 参数
-
-1. `maxSize:int` - 获取文章的最大数量,取值范围为 1 到 100。
-
-### 返回值
-
-List\<[#ListedPostVo](#listedpostvo)\>
-
-### 示例
-
-```html
-
-```
-
-## `list({...})`
-
-```js
-postFinder.list({
- page: 1,
- size: 10,
- tagName: 'fake-tag',
- categoryName: 'fake-category',
- ownerName: 'fake-owner',
- pinned: true,
- sort: {'spec.publishTime,desc', 'metadata.creationTimestamp,asc'}
-});
-```
-
-### 描述
-
-统一参数的文章列表查询方法,支持分页、标签、分类、创建者、置顶状态、排序等参数,且均为可选参数。
-
-可以使用此方法来代替 `list(page, size)`、`listByCategory(page, size, categoryName)`、`listByTag(page, size, tag)`、`listByOwner(page, size, owner)` 方法。
-
-### 参数
-
-1. `page:int` - 分页页码,从 1 开始
-2. `size:int` - 分页条数
-3. `tagName:string` - 标签唯一标识 `metadata.name`
-4. `categoryName:string` - 分类唯一标识 `metadata.name`
-5. `ownerName:string` - 创建者用户名 `name`
-6. `pinned:boolean` - 置顶状态,`true` 仅返回置顶文章,`false` 仅返回非置顶文章;不传时不按置顶状态筛选
-7. `sort:string[]` - 排序字段,格式为 `字段名,排序方式`,排序方式可选值为 `asc` 或 `desc`,如 `spec.publishTime,desc`,传递时需要使用 `{}` 形式并用逗号分隔表示数组。
-
-### 返回值
-
-[#ListResult\](#listresultlistedpostvo)
-
-### 示例
-
-```html
-
-```
-
-## list(page,size)
-
-```js
-postFinder.list(page, size);
-```
-
-### 描述
-
-根据分页参数获取文章列表。
-
-**已过时**: 请使用 `list({...})` 方法代替。
-
-### 参数
-
-1. `page:int` - 分页页码,从 1 开始
-2. `size:int` - 分页条数
-
-### 返回值
-
-[#ListResult\](#listresultlistedpostvo)
-
-### 示例
-
-```html
-
-```
-
-## listByCategory(page,size,categoryName)
-
-```js
-postFinder.listByCategory(page, size, categoryName);
-```
-
-### 描述
-
-根据分类标识和分页参数获取文章列表。
-
-**已过时**: 请使用 `list({...})` 方法代替。
-
-### 参数
-
-1. `page:int` - 分页页码,从 1 开始
-2. `size:int` - 分页条数
-3. `categoryName:string` - 文章分类唯一标识 `metadata.name`
-
-### 返回值
-
-[#ListResult\](#listresultlistedpostvo)
-
-### 示例
-
-```html
-
-```
-
-## listByTag(page,size,tag)
-
-```js
-postFinder.listByTag(page, size, tag);
-```
-
-### 描述
-
-根据标签标识和分页参数获取文章列表。
-
-**已过时**: 请使用 `list({...})` 方法代替。
-
-### 参数
-
-1. `page:int` - 分页页码,从 1 开始
-2. `size:int` - 分页条数
-3. `tag:string` - 文章分类唯一标识 `metadata.name`
-
-### 返回值
-
-[#ListResult\](#listresultlistedpostvo)
-
-### 示例
-
-```html
-
-```
-
-## listByOwner(page,size,owner)
-
-```js
-postFinder.listByOwner(page, size, owner);
-```
-
-### 描述
-
-根据创建者用户名和分页参数获取文章列表。
-
-**已过时**: 请使用 `list({...})` 方法代替。
-
-### 参数
-
-1. `page:int` - 分页页码,从 1 开始
-2. `size:int` - 分页条数
-3. `owner:string` - 创建者用户名 `name`
-
-### 返回值
-
-[#ListResult\](#listresultlistedpostvo)
-
-### 示例
-
-```html
-
-```
-
-## archives(page,size)
-
-```js
-postFinder.archives(page, size);
-```
-
-### 描述
-
-根据分页参数获取文章归档列表。
-
-### 参数
-
-1. `page:int` - 分页页码,从 1 开始
-2. `size:int` - 分页条数
-
-### 返回值
-
-[#ListResult\](#listresultpostarchivevo)
-
-### 示例
-
-```html
-
-
-
-
-
- -
-
-
-
-
-
-
-
-```
-
-## archives(page,size,year)
-
-```js
-postFinder.archives(page, size, year);
-```
-
-### 描述
-
-根据年份和分页参数获取文章归档列表。
-
-### 参数
-
-1. `page:int` - 分页页码,从 1 开始
-2. `size:int` - 分页条数
-3. `year:string` - 年份
-
-### 返回值
-
-[#ListResult\](#listresultpostarchivevo)
-
-### 示例
-
-```html
-
-
-
-
-
- -
-
-
-
-
-
-
-
-```
-
-## archives(page,size,year,month)
-
-```js
-postFinder.archives(page, size, year, month);
-```
-
-### 描述
-
-根据年月和分页参数获取文章归档列表。
-
-### 参数
-
-1. `page:int` - 分页页码,从 1 开始
-2. `size:int` - 分页条数
-3. `year:string` - 年份
-4. `month:string` - 月份
-
-### 返回值
-
-[#ListResult\](#listresultpostarchivevo)
-
-### 示例
-
-```html
-
-
-
-
-
- -
-
-
-
-
-
-
-
-```
-
-## 类型定义
-
-### CategoryVo
-
-
-
-### TagVo
-
-
-
-### ContributorVo
-
-
-
-### PostVo
-
-
-
-- [#CategoryVo](#categoryvo)
-- [#TagVo](#tagvo)
-- [#ContributorVo](#contributorvo)
-- [#ContentVo](#contentvo)
-
-### ContentVo
-
-
-
-### NavigationPostVo
-
-```json title="NavigationPostVo"
-{
- "previous": "#ListedPostVo", // 上一篇文章,发布时间较当前文章更早的文章
- "next": "#ListedPostVo" // 下一篇文章,发布时间较当前文章更新的文章
-}
-```
-
-- [#PostVo](#postvo)
-
-### ListedPostVo
-
-
-
-- [#CategoryVo](#categoryvo)
-- [#TagVo](#tagvo)
-- [#ContributorVo](#contributorvo)
-
-### ListResult\
-
-```json title="ListResult"
-{
- "page": 0, // 当前页码
- "size": 0, // 每页条数
- "total": 0, // 总条数
- "items": "List<#ListedPostVo>", // 文章列表数据
- "first": true, // 是否为第一页
- "last": true, // 是否为最后一页
- "hasNext": true, // 是否有下一页
- "hasPrevious": true, // 是否有上一页
- "totalPages": 0 // 总页数
-}
-```
-
-- [#ListedPostVo](#listedpostvo)
-
-### PostArchiveVo
-
-```json title="PostArchiveVo"
-{
- "year": "string",
- "months": [
- {
- "month": "string",
- "posts": "#ListedPostVo"
- }
- ]
-}
-```
-
-- [#ListedPostVo](#listedpostvo)
-
-### ListResult\
-
-```json title="ListResult"
-{
- "page": 0, // 当前页码
- "size": 0, // 每页条数
- "total": 0, // 总条数
- "items": "List<#PostArchiveVo>", // 文章归档数据
- "first": true, // 是否为第一页
- "last": true, // 是否为最后一页
- "hasNext": true, // 是否有下一页
- "hasPrevious": true, // 是否有上一页
- "totalPages": 0 // 总页数
-}
-```
-
-- [#PostArchiveVo](#postarchivevo)
diff --git a/docs/developer-guide/theme/finder-apis/post.mdx b/docs/developer-guide/theme/finder-apis/post.mdx
new file mode 100644
index 00000000..56378370
--- /dev/null
+++ b/docs/developer-guide/theme/finder-apis/post.mdx
@@ -0,0 +1,600 @@
+---
+title: 文章
+description: 使用 PostFinder 查询文章、正文、上下篇导航、随机文章和分页列表,按分类、标签、作者与置顶状态筛选,并获取按年月组织的文章归档
+---
+
+import CategoryVo from "../vo/_CategoryVo.md";
+import TagVo from "../vo/_TagVo.md";
+import PostVo from "../vo/_PostVo.md";
+import ContentVo from "../vo/_ContentVo.md"
+import ContributorVo from "../vo/_ContributorVo.md"
+import ListedPostVo from "../vo/_ListedPostVo.md"
+
+## getByName(postName)
+
+```js
+postFinder.getByName(postName);
+```
+
+### 描述
+
+根据 `metadata.name` 获取文章。
+
+### 参数
+
+1. `postName:string` - 文章的唯一标识 `metadata.name`。
+
+### 返回值
+
+[#PostVo](#postvo)
+
+### 示例
+
+```html
+
+```
+
+## content(postName)
+
+```js
+postFinder.content(postName);
+```
+
+### 描述
+
+根据文章的 `metadata.name` 单独获取文章内容。
+
+### 参数
+
+1. `postName:string` - 文章的唯一标识 `metadata.name`。
+
+### 返回值
+
+[#ContentVo](#contentvo)
+
+### 示例
+
+```html
+
+
+
+```
+
+## cursor(postName)
+
+```js
+postFinder.cursor(postName);
+```
+
+### 描述
+
+根据文章的 `metadata.name` 获取相邻的文章(上一篇 / 下一篇)。
+
+:::info 上一篇与下一篇的定义
+上一篇文章是指发布时间较当前文章更早的文章,下一篇文章是指发布时间较当前文章更新的文章。
+:::
+
+### 参数
+
+1. `postName:string` - 文章的唯一标识 `metadata.name`。
+
+### 返回值
+
+[#NavigationPostVo](#navigationpostvo)
+
+### 示例
+
+```html title="/templates/post.html"
+
+```
+
+## cursorByCategory(postName)
+
+```js
+postFinder.cursorByCategory(postName);
+```
+
+### 描述
+
+根据文章的 `metadata.name` 获取同一主分类下相邻的文章(上一篇 / 下一篇)。
+
+主分类为文章 `spec.categories` 中的第一个分类。此方法只匹配同一分类下的文章,不会包含子分类中的文章。如果当前文章没有分类、未发布或者不存在,将返回空的导航结果。
+
+:::info 上一篇与下一篇的定义
+上一篇文章是指发布时间较当前文章更早的文章,下一篇文章是指发布时间较当前文章更新的文章。
+:::
+
+对应的 Public API 为:
+
+```bash
+GET /apis/api.content.halo.run/v1alpha1/posts/{name}/navigation?scope=category
+```
+
+### 参数
+
+1. `postName:string` - 文章的唯一标识 `metadata.name`。
+
+### 返回值
+
+[#NavigationPostVo](#navigationpostvo)
+
+### 示例
+
+```html title="/templates/post.html"
+
+```
+
+## listAll()
+
+```js
+postFinder.listAll();
+```
+
+### 描述
+
+获取所有文章。
+
+### 参数
+
+无
+
+### 返回值
+
+List\<[#ListedPostVo](#listedpostvo)\>
+
+### 示例
+
+```html
+
+```
+
+## random(maxSize)
+
+```js
+postFinder.random(maxSize);
+```
+
+### 描述
+
+随机获取文章列表。
+
+### 参数
+
+1. `maxSize:int` - 获取文章的最大数量,取值范围为 1 到 100。
+
+### 返回值
+
+List\<[#ListedPostVo](#listedpostvo)\>
+
+### 示例
+
+```html
+
+```
+
+## `list({...})`
+
+```js
+postFinder.list({
+ page: 1,
+ size: 10,
+ tagName: 'fake-tag',
+ categoryName: 'fake-category',
+ ownerName: 'fake-owner',
+ pinned: true,
+ sort: {'spec.publishTime,desc', 'metadata.creationTimestamp,asc'}
+});
+```
+
+### 描述
+
+统一参数的文章列表查询方法,支持分页、标签、分类、创建者、置顶状态、排序等参数,且均为可选参数。
+
+可以使用此方法来代替 `list(page, size)`、`listByCategory(page, size, categoryName)`、`listByTag(page, size, tag)`、`listByOwner(page, size, owner)` 方法。
+
+### 参数
+
+1. `page:int` - 分页页码,从 1 开始
+2. `size:int` - 分页条数
+3. `tagName:string` - 标签唯一标识 `metadata.name`
+4. `categoryName:string` - 分类唯一标识 `metadata.name`
+5. `ownerName:string` - 创建者用户名 `name`
+6. `pinned:boolean` - 置顶状态,`true` 仅返回置顶文章,`false` 仅返回非置顶文章;不传时不按置顶状态筛选
+7. `sort:string[]` - 排序字段,格式为 `字段名,排序方式`,排序方式可选值为 `asc` 或 `desc`,如 `spec.publishTime,desc`,传递时需要使用 `{}` 形式并用逗号分隔表示数组。
+
+### 返回值
+
+[#ListResult\](#listresultlistedpostvo)
+
+### 示例
+
+```html
+
+```
+
+## list(page,size)
+
+```js
+postFinder.list(page, size);
+```
+
+### 描述
+
+根据分页参数获取文章列表。
+
+**已过时**: 请使用 `list({...})` 方法代替。
+
+### 参数
+
+1. `page:int` - 分页页码,从 1 开始
+2. `size:int` - 分页条数
+
+### 返回值
+
+[#ListResult\](#listresultlistedpostvo)
+
+### 示例
+
+```html
+
+```
+
+## listByCategory(page,size,categoryName)
+
+```js
+postFinder.listByCategory(page, size, categoryName);
+```
+
+### 描述
+
+根据分类标识和分页参数获取文章列表。
+
+**已过时**: 请使用 `list({...})` 方法代替。
+
+### 参数
+
+1. `page:int` - 分页页码,从 1 开始
+2. `size:int` - 分页条数
+3. `categoryName:string` - 文章分类唯一标识 `metadata.name`
+
+### 返回值
+
+[#ListResult\](#listresultlistedpostvo)
+
+### 示例
+
+```html
+
+```
+
+## listByTag(page,size,tag)
+
+```js
+postFinder.listByTag(page, size, tag);
+```
+
+### 描述
+
+根据标签标识和分页参数获取文章列表。
+
+**已过时**: 请使用 `list({...})` 方法代替。
+
+### 参数
+
+1. `page:int` - 分页页码,从 1 开始
+2. `size:int` - 分页条数
+3. `tag:string` - 文章分类唯一标识 `metadata.name`
+
+### 返回值
+
+[#ListResult\](#listresultlistedpostvo)
+
+### 示例
+
+```html
+
+```
+
+## listByOwner(page,size,owner)
+
+```js
+postFinder.listByOwner(page, size, owner);
+```
+
+### 描述
+
+根据创建者用户名和分页参数获取文章列表。
+
+**已过时**: 请使用 `list({...})` 方法代替。
+
+### 参数
+
+1. `page:int` - 分页页码,从 1 开始
+2. `size:int` - 分页条数
+3. `owner:string` - 创建者用户名 `name`
+
+### 返回值
+
+[#ListResult\](#listresultlistedpostvo)
+
+### 示例
+
+```html
+
+```
+
+## archives(page,size)
+
+```js
+postFinder.archives(page, size);
+```
+
+### 描述
+
+根据分页参数获取文章归档列表。
+
+### 参数
+
+1. `page:int` - 分页页码,从 1 开始
+2. `size:int` - 分页条数
+
+### 返回值
+
+[#ListResult\](#listresultpostarchivevo)
+
+### 示例
+
+```html
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+```
+
+## archives(page,size,year)
+
+```js
+postFinder.archives(page, size, year);
+```
+
+### 描述
+
+根据年份和分页参数获取文章归档列表。
+
+### 参数
+
+1. `page:int` - 分页页码,从 1 开始
+2. `size:int` - 分页条数
+3. `year:string` - 年份
+
+### 返回值
+
+[#ListResult\](#listresultpostarchivevo)
+
+### 示例
+
+```html
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+```
+
+## archives(page,size,year,month)
+
+```js
+postFinder.archives(page, size, year, month);
+```
+
+### 描述
+
+根据年月和分页参数获取文章归档列表。
+
+### 参数
+
+1. `page:int` - 分页页码,从 1 开始
+2. `size:int` - 分页条数
+3. `year:string` - 年份
+4. `month:string` - 月份
+
+### 返回值
+
+[#ListResult\](#listresultpostarchivevo)
+
+### 示例
+
+```html
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+```
+
+## 类型定义
+
+### CategoryVo
+
+
+
+### TagVo
+
+
+
+### ContributorVo
+
+
+
+### PostVo
+
+
+
+- [#CategoryVo](#categoryvo)
+- [#TagVo](#tagvo)
+- [#ContributorVo](#contributorvo)
+- [#ContentVo](#contentvo)
+
+### ContentVo
+
+
+
+### NavigationPostVo
+
+```json title="NavigationPostVo"
+{
+ "previous": "#ListedPostVo", // 上一篇文章,发布时间较当前文章更早的文章
+ "next": "#ListedPostVo" // 下一篇文章,发布时间较当前文章更新的文章
+}
+```
+
+- [#PostVo](#postvo)
+
+### ListedPostVo
+
+
+
+- [#CategoryVo](#categoryvo)
+- [#TagVo](#tagvo)
+- [#ContributorVo](#contributorvo)
+
+### ListResult\
+
+```json title="ListResult"
+{
+ "page": 0, // 当前页码
+ "size": 0, // 每页条数
+ "total": 0, // 总条数
+ "items": "List<#ListedPostVo>", // 文章列表数据
+ "first": true, // 是否为第一页
+ "last": true, // 是否为最后一页
+ "hasNext": true, // 是否有下一页
+ "hasPrevious": true, // 是否有上一页
+ "totalPages": 0 // 总页数
+}
+```
+
+- [#ListedPostVo](#listedpostvo)
+
+### PostArchiveVo
+
+```json title="PostArchiveVo"
+{
+ "year": "string",
+ "months": [
+ {
+ "month": "string",
+ "posts": "#ListedPostVo"
+ }
+ ]
+}
+```
+
+- [#ListedPostVo](#listedpostvo)
+
+### ListResult\
+
+```json title="ListResult"
+{
+ "page": 0, // 当前页码
+ "size": 0, // 每页条数
+ "total": 0, // 总条数
+ "items": "List<#PostArchiveVo>", // 文章归档数据
+ "first": true, // 是否为第一页
+ "last": true, // 是否为最后一页
+ "hasNext": true, // 是否有下一页
+ "hasPrevious": true, // 是否有上一页
+ "totalPages": 0 // 总页数
+}
+```
+
+- [#PostArchiveVo](#postarchivevo)
diff --git a/docs/developer-guide/theme/finder-apis/single-page.md b/docs/developer-guide/theme/finder-apis/single-page.mdx
similarity index 100%
rename from docs/developer-guide/theme/finder-apis/single-page.md
rename to docs/developer-guide/theme/finder-apis/single-page.mdx
diff --git a/docs/developer-guide/theme/finder-apis/tag.md b/docs/developer-guide/theme/finder-apis/tag.md
deleted file mode 100644
index 0e8a4c5d..00000000
--- a/docs/developer-guide/theme/finder-apis/tag.md
+++ /dev/null
@@ -1,147 +0,0 @@
----
-title: 文章标签
-description: 文章标签 - TagFinder
----
-
-import TagVo from "../vo/_TagVo.md"
-
-## getByName(name)
-
-```js
-tagFinder.getByName(name)
-```
-
-:::info[提示]
-通常建议配合 [主题设置](../settings.md) 和 [标签选择器](../../form-schema.md#tagselect) 使用,让用户自行选择所需的标签。
-:::
-
-### 描述
-
-根据 `metadata.name` 获取标签。
-
-### 参数
-
-1. `name:string` - 标签的唯一标识 `metadata.name`。
-
-### 返回值
-
-[#TagVo](#tagvo)
-
-### 示例
-
-```html
-
-```
-
-## getByNames(names)
-
-```js
-tagFinder.getByNames(names)
-```
-
-:::info[提示]
-通常建议配合 [主题设置](../settings.md) 和 [标签选择器](../../form-schema.md#tagselect) 使用,让用户自行选择所需的标签。
-:::
-
-### 描述
-
-根据一组 `metadata.name` 获取标签。
-
-### 参数
-
-1. `names:List` - 标签的唯一标识 `metadata.name` 的集合。
-
-### 返回值
-
-List\<[#TagVo](#tagvo)\>
-
-### 示例
-
-```html
-
-```
-
-## list(page,size)
-
-```js
-tagFinder.list(page,size)
-```
-
-### 描述
-
-根据分页参数获取标签列表。
-
-### 参数
-
-1. `page:int` - 分页页码,从 1 开始
-2. `size:int` - 分页条数
-
-### 返回值
-
-[#ListResult\](#listresulttagvo)
-
-### 示例
-
-```html
-
-```
-
-## listAll()
-
-```js
-tagFinder.listAll()
-```
-
-### 描述
-
-获取所有文章标签。
-
-### 参数
-
-无
-
-### 返回值
-
-List\<[#TagVo](#tagvo)\>
-
-### 示例
-
-```html
-
-```
-
-## 类型定义
-
-### TagVo
-
-
-
-### ListResult\
-
-```json title="ListResult"
-{
- "page": 0, // 当前页码
- "size": 0, // 每页条数
- "total": 0, // 总条数
- "items": "List<#TagVo>", // 标签列表数据
- "first": true, // 是否为第一页
- "last": true, // 是否为最后一页
- "hasNext": true, // 是否有下一页
- "hasPrevious": true, // 是否有上一页
- "totalPages": 0 // 总页数
-}
-```
-
-- [#TagVo](#tagvo)
diff --git a/docs/developer-guide/theme/finder-apis/tag.mdx b/docs/developer-guide/theme/finder-apis/tag.mdx
new file mode 100644
index 00000000..456b7b70
--- /dev/null
+++ b/docs/developer-guide/theme/finder-apis/tag.mdx
@@ -0,0 +1,147 @@
+---
+title: 文章标签
+description: 使用 TagFinder 按唯一标识批量查询文章标签、分页获取标签列表或读取全部标签,并在 Thymeleaf 模板中渲染标签链接
+---
+
+import TagVo from "../vo/_TagVo.md"
+
+## getByName(name)
+
+```js
+tagFinder.getByName(name)
+```
+
+:::info 配合标签选择器使用
+通常建议配合 [主题设置](../settings.md) 和 [标签选择器](../../form-schema.md#tagselect) 使用,让用户自行选择所需的标签。
+:::
+
+### 描述
+
+根据 `metadata.name` 获取标签。
+
+### 参数
+
+1. `name:string` - 标签的唯一标识 `metadata.name`。
+
+### 返回值
+
+[#TagVo](#tagvo)
+
+### 示例
+
+```html
+
+```
+
+## getByNames(names)
+
+```js
+tagFinder.getByNames(names)
+```
+
+:::info 配合标签选择器使用
+通常建议配合 [主题设置](../settings.md) 和 [标签选择器](../../form-schema.md#tagselect) 使用,让用户自行选择所需的标签。
+:::
+
+### 描述
+
+根据一组 `metadata.name` 获取标签。
+
+### 参数
+
+1. `names:List` - 标签的唯一标识 `metadata.name` 的集合。
+
+### 返回值
+
+List\<[#TagVo](#tagvo)\>
+
+### 示例
+
+```html
+
+```
+
+## list(page,size)
+
+```js
+tagFinder.list(page,size)
+```
+
+### 描述
+
+根据分页参数获取标签列表。
+
+### 参数
+
+1. `page:int` - 分页页码,从 1 开始
+2. `size:int` - 分页条数
+
+### 返回值
+
+[#ListResult\](#listresulttagvo)
+
+### 示例
+
+```html
+
+```
+
+## listAll()
+
+```js
+tagFinder.listAll()
+```
+
+### 描述
+
+获取所有文章标签。
+
+### 参数
+
+无
+
+### 返回值
+
+List\<[#TagVo](#tagvo)\>
+
+### 示例
+
+```html
+
+```
+
+## 类型定义
+
+### TagVo
+
+
+
+### ListResult\
+
+```json title="ListResult"
+{
+ "page": 0, // 当前页码
+ "size": 0, // 每页条数
+ "total": 0, // 总条数
+ "items": "List<#TagVo>", // 标签列表数据
+ "first": true, // 是否为第一页
+ "last": true, // 是否为最后一页
+ "hasNext": true, // 是否有下一页
+ "hasPrevious": true, // 是否有上一页
+ "totalPages": 0 // 总页数
+}
+```
+
+- [#TagVo](#tagvo)
diff --git a/docs/developer-guide/theme/finder-apis/theme.md b/docs/developer-guide/theme/finder-apis/theme.md
index 172ba3f8..8d8c3aa3 100644
--- a/docs/developer-guide/theme/finder-apis/theme.md
+++ b/docs/developer-guide/theme/finder-apis/theme.md
@@ -1,6 +1,6 @@
---
title: 主题
-description: 主题 - ThemeFinder
+description: 使用 ThemeFinder 获取当前启用的 Halo 主题或按唯一标识查询主题,并读取主题版本、作者、设置、自定义模板等 ThemeVo 信息
---
## activation()
diff --git a/docs/developer-guide/theme/global-variables.md b/docs/developer-guide/theme/global-variables.md
deleted file mode 100644
index 3ed501a6..00000000
--- a/docs/developer-guide/theme/global-variables.md
+++ /dev/null
@@ -1,94 +0,0 @@
----
-title: 全局变量
-description: 本文档介绍 Halo 为模板引擎提供的专有全局变量。
----
-
-import SiteSettingVo from "./vo/_SiteSettingVo.md"
-import ThemeVo from "./vo/_ThemeVo.md"
-
-Halo 目前为模板引擎在全局提供了一些变量,本文档将列出已提供的变量以及介绍这些变量的使用方法。
-
-## site
-
-### 描述
-
-提供了部分可公开的系统相关的设置项,其中所有参数均来自于 Console 的系统设置。
-
-### 类型
-
-
-
-### 示例
-
-显示站点标题:
-
-```html
-
-```
-
-显示站点 Logo:
-
-```html
-
-```
-
-显示当前 Halo 版本:
-
-```html
-
-```
-
-## #halo.matchVersion(constraint)
-
-### 描述
-
-用于判断当前运行的 Halo 版本是否满足指定的语义化版本范围,适合在主题模板中为依赖新版 Halo 能力的片段添加兼容判断。
-
-版本范围格式遵循 [Semantic Range Expressions](https://github.com/zafarkhaja/jsemver#range-expressions),例如 `>=2.25.0`、`>2.0.0 & <3.0.0` 等。
-
-:::tip
-开发版本 `0.0.0` 会始终返回 `true`,以便在本地开发环境中调试主题模板。
-:::
-
-### 示例
-
-仅在 Halo 版本满足要求时渲染模板片段:
-
-```html
-
-
-
-```
-
-判断一个版本范围:
-
-```html
-
-
-
-```
-
-## theme
-
-### 描述
-
-关于当前激活主题的信息。
-
-### 类型
-
-
-
-### 示例
-
-显示主题名称:
-
-```html
-
-```
-
-在静态资源加入版本号参数,以防止升级之后的缓存问题:
-
-```html
-
-
-```
diff --git a/docs/developer-guide/theme/global-variables.mdx b/docs/developer-guide/theme/global-variables.mdx
new file mode 100644
index 00000000..59ae1f86
--- /dev/null
+++ b/docs/developer-guide/theme/global-variables.mdx
@@ -0,0 +1,94 @@
+---
+title: 全局变量
+description: 本文档介绍 Halo 为模板引擎提供的专有全局变量。
+---
+
+import SiteSettingVo from "./vo/_SiteSettingVo.md"
+import ThemeVo from "./vo/_ThemeVo.md"
+
+Halo 目前为模板引擎在全局提供了一些变量,本文档将列出已提供的变量以及介绍这些变量的使用方法。
+
+## site
+
+### 描述
+
+提供了部分可公开的系统相关的设置项,其中所有参数均来自于 Console 的系统设置。
+
+### 类型
+
+
+
+### 示例
+
+显示站点标题:
+
+```html
+
+```
+
+显示站点 Logo:
+
+```html
+
+```
+
+显示当前 Halo 版本:
+
+```html
+
+```
+
+## #halo.matchVersion(constraint)
+
+### 描述
+
+用于判断当前运行的 Halo 版本是否满足指定的语义化版本范围,适合在主题模板中为依赖新版 Halo 能力的片段添加兼容判断。
+
+版本范围格式遵循 [Semantic Range Expressions](https://github.com/zafarkhaja/jsemver#range-expressions),例如 `>=2.25.0`、`>2.0.0 & <3.0.0` 等。
+
+:::tip 开发版本行为
+开发版本 `0.0.0` 会始终返回 `true`,以便在本地开发环境中调试主题模板。
+:::
+
+### 示例
+
+仅在 Halo 版本满足要求时渲染模板片段:
+
+```html
+
+
+
+```
+
+判断一个版本范围:
+
+```html
+
+
+
+```
+
+## theme
+
+### 描述
+
+关于当前激活主题的信息。
+
+### 类型
+
+
+
+### 示例
+
+显示主题名称:
+
+```html
+
+```
+
+在静态资源加入版本号参数,以防止升级之后的缓存问题:
+
+```html
+
+
+```
diff --git a/docs/developer-guide/theme/image-optimization.md b/docs/developer-guide/theme/image-optimization.md
index 83eac94e..c4227753 100644
--- a/docs/developer-guide/theme/image-optimization.md
+++ b/docs/developer-guide/theme/image-optimization.md
@@ -13,13 +13,13 @@ description: 本文档介绍如何使用 Halo 的缩略图特性来优化图片
- 提升加载性能:通过为图片提供多个尺寸的缩略图,浏览器可以选择最适合当前视窗的图片进行加载,从而减少不必要的带宽使用,提升页面加载速度,改善用户体验。
- 兼容性好:响应式图片是基于 HTML 标准的实现,不需要额外的 JavaScript 或 CSS,因此兼容性非常好。
-:::info
+:::info 了解响应式图片
建议阅读 [响应式图片](https://developer.mozilla.org/zh-CN/docs/Learn/HTML/Multimedia_and_embedding/Responsive_images) 文档,以了解更多关于响应式图片的知识,以及如何在不同场景下使用。
:::
## Finder API
-:::info
+:::info Halo 2.22 自动添加响应式属性
从 Halo 2.22 开始,Halo 会自动为页面上的所有图片添加响应式图片的相关属性,无需主题主动适配,如果你的主题需要手动为部分图片自定义属性,可以使用下方的 `Finder API`。
:::
diff --git a/docs/developer-guide/theme/index.md b/docs/developer-guide/theme/index.md
new file mode 100644
index 00000000..cdb2bbdb
--- /dev/null
+++ b/docs/developer-guide/theme/index.md
@@ -0,0 +1,5 @@
+---
+title: 主题开发
+description: 涵盖 Halo 主题开发的环境准备、配置与目录结构、页面布局、静态资源、设置表单、模板变量、Finder API、图片优化和 UI 扩展。
+overview: true
+---
diff --git a/docs/developer-guide/theme/prepare.md b/docs/developer-guide/theme/prepare.md
index 02a1d7d8..a6ba5988 100644
--- a/docs/developer-guide/theme/prepare.md
+++ b/docs/developer-guide/theme/prepare.md
@@ -1,15 +1,15 @@
---
title: 准备工作
-description: 主题开发所需的准备工作和基本的项目搭建
+description: 搭建 Halo 主题本地开发环境,从模板创建包含 theme.yaml 和 Thymeleaf 页面模板的项目,安装并启用主题以预览页面效果
---
此文档将讲解 Halo 2.0 主题开发的基本流程,从创建主题项目到最终预览主题效果。
## 搭建开发环境
-Halo 在本地开发环境的运行可参考[开发环境运行](../core/run.md),或者使用 [Docker](../../getting-started/install/docker.md) 运行。
+Halo 在本地开发环境的运行可参考[开发环境运行](../core/run.md),或者使用 [Docker](../../guide/install/docker.mdx) 运行。
-:::tip
+:::tip 启用主题实时更新
为了保证在开发时,主题代码可以实时生效,需要注意以下事项:
- 使用 Halo 源码运行时,需要在配置文件中包含如下配置:
@@ -53,11 +53,11 @@ spec:
url: "https://github.com/halo-sigs/theme-foo/blob/main/LICENSE"
```
-:::info[提示]
+:::info 查看主题配置文档
主题的配置文件详细文档请参考 [配置文件](./config.md)。
:::
-:::info[提示]
+:::info 查看主题目录结构
主题项目的目录结构请参考 [主题目录结构](./structure.md)。
:::
@@ -69,24 +69,12 @@ spec:
- [halo-sigs/theme-vite-starter](https://github.com/halo-dev/theme-vite-starter) - 与 Vite 集成的主题模板,由 Vite 负责资源构建。
- [halo-sigs/theme-astro-starter](https://github.com/halo-sigs/theme-astro-starter) - 以 Astro 作为预渲染框架的主题模板。
-:::info[提示]
+:::info 从模板仓库创建主题
以上 GitHub 都被设置为了模板仓库(Template repository),点击仓库主页的 `Use this template` 按钮即可通过此模板创建一个新的仓库。
创建新的主题仓库并克隆到本地开发环境之后,需要确保主题文件夹名称和 `theme.yaml` 中的 `metadata.name` 字段一致,否则可能导致部分资源无法正常加载。
:::
-## AI 辅助开发
-
-Halo 官方为主题开发者提供了 Agent Skills,支持在 Cursor、Claude Code、Codex 等 AI 开发工具中使用,以获得 Halo 主题开发的深度上下文和辅助能力。
-
-- [halo-dev/dev-skills](https://github.com/halo-dev/dev-skills) - 包含 `halo-theme-dev` Skill,涵盖主题目录结构、Thymeleaf 模板、Finder API、静态资源管理、主题设置表单等内容,并提供了最小主题和 Vite 主题的初始模板。
-
-安装方式:
-
-```bash
-npx skills add halo-dev/dev-skills@halo-theme-dev -g
-```
-
## 创建第一个页面模板
Halo 使用 [Thymeleaf](https://www.thymeleaf.org/) 作为后端模板引擎,后缀为 `.html`,与单纯编写 HTML 一致。在 Halo 的主题中,主题的模板文件存放于 `templates` 目录下,例如 `~/halo2-dev/themes/theme-foo/templates`。为了此文档方便演示,我们先在 `templates` 创建一个首页的模板文件 `index.html`:
diff --git a/docs/developer-guide/theme/settings.md b/docs/developer-guide/theme/settings.md
index 3e2639de..5ec5b34d 100644
--- a/docs/developer-guide/theme/settings.md
+++ b/docs/developer-guide/theme/settings.md
@@ -1,11 +1,11 @@
---
title: 设置选项
-description: 介绍主题如何定义以及使用设置选项。
+description: 通过 settings.yaml 和 FormKit 表单定义 Halo 主题设置项,关联 Setting 与 ConfigMap,并在 Thymeleaf 模板中读取配置和重载更新
---
此文档将讲解如何在主题中定义和使用设置项,如 [表单定义](../form-schema) 中所说,目前 Halo 的 Console 端的所有表单都使用了 [FormKit](https://github.com/formkit/formkit) 的方案。
-:::tip
+:::tip 先了解 FormKit 表单定义
有关 FormKit 定义表单的更多信息,请参考 [表单定义](../form-schema),此文档仅针对主题中的设置项进行讲解。
:::
@@ -39,7 +39,7 @@ spec:
url: "https://github.com/halo-sigs/theme-foo/blob/main/LICENSE"
```
-:::tip
+:::tip 保持配置名称一致
`settingName` 和 `configMapName` 必须同时配置,且可以自定义名称,但是 `settingName` 必须和 Setting 的 `metadata.name` 一致。
:::
@@ -82,7 +82,7 @@ spec:
value: "double"
```
-:::tip
+:::tip 保持 Setting 名称一致
Setting 资源的 `metadata.name` 必须和 `theme.yaml` 中的 `spec.settingName` 一致。
:::
@@ -134,6 +134,6 @@ npx @halo-dev/convert-theme-config-to-next settings
执行完成之后即可看到主题目录下生成了 `settings.2.0.yaml` 文件,重命名为 `settings.yaml` 即可。
-:::tip
+:::tip 修改转换后的资源名称
转换完成之后需要修改 `metadata.name` 字段。
:::
diff --git a/docs/developer-guide/theme/static-resources.md b/docs/developer-guide/theme/static-resources.md
index 7bd22609..40ad07d4 100644
--- a/docs/developer-guide/theme/static-resources.md
+++ b/docs/developer-guide/theme/static-resources.md
@@ -1,6 +1,6 @@
---
title: 静态资源
-description: 本文档介绍主题的静态资源的引用方法。
+description: 在 Halo 主题中通过 Thymeleaf 资源链接和 theme.assets() API 引用 templates/assets 下的样式、脚本与图片
---
通过 [目录结构](./structure.md) 的讲解我们可以知道,目前主题的静态资源统一托管在 `/templates/assets/` 目录下,下面讲解一下如何在模板中使用,大致会分为两种引入方式。
@@ -24,7 +24,7 @@ description: 本文档介绍主题的静态资源的引用方法。
以上方式仅支持在 HTML 标签中使用,且必须使用 `@{}` 包裹才能渲染为正确的路径。如果需要在非 HTML 标签中得到正确的路径,我们提供了 `#theme.assets()` API。
-:::info[注意]
+:::info 资源地址无需包含 /assets/
需要注意的是,调用 `#theme.assets()` 的时候,资源地址不需要添加 `/assets/`。
:::
@@ -50,6 +50,6 @@ function loadScript(url) {
```
-:::info[提示]
+:::info 在 JavaScript 中使用 Thymeleaf
关于在 JavaScript 中使用 Thymeleaf 语法可以参考 Thymeleaf 官方文档:[JavaScript inlining](https://www.thymeleaf.org/doc/tutorials/3.1/usingthymeleaf.html#javascript-inlining)
:::
diff --git a/docs/developer-guide/theme/structure.md b/docs/developer-guide/theme/structure.md
index 1b2a7a6a..321312d0 100644
--- a/docs/developer-guide/theme/structure.md
+++ b/docs/developer-guide/theme/structure.md
@@ -1,11 +1,11 @@
---
title: 目录结构
-description: 主题的目录结构介绍
+description: 了解 Halo 主题项目的标准目录结构,以及模板、静态资源、主题配置、设置表单、预览图和 Console、用户中心 UI 扩展各自的存放位置
---
Halo 2.0 的主题基本目录结构如下:
-```bash title="~/halo2-dev/themes/my-theme"
+```tree title="~/halo2-dev/themes/my-theme"
my-theme
├── templates/
│ ├── assets/
diff --git a/docs/developer-guide/theme/template-route-mapping.md b/docs/developer-guide/theme/template-route-mapping.md
index f72852ff..b9cb11fe 100644
--- a/docs/developer-guide/theme/template-route-mapping.md
+++ b/docs/developer-guide/theme/template-route-mapping.md
@@ -79,7 +79,7 @@ customTemplates:
最终使用者即可在文章设置、独立页面设置、分类设置中选择自定义模板。
-:::info[提示]
+:::info 自定义模板要求
1. 自定义模板与默认模板的功能相同,区别仅在于可以让使用者选择不同于默认模板风格的模板。
2. 自定义模板的文件名需要以 `.html` 结尾,且需要在 `/templates/` 目录下创建。
diff --git a/docs/developer-guide/theme/template-tag.md b/docs/developer-guide/theme/template-tag.md
index 0394a7fe..84613065 100644
--- a/docs/developer-guide/theme/template-tag.md
+++ b/docs/developer-guide/theme/template-tag.md
@@ -51,6 +51,6 @@ Halo 为满足部分代码注入和模板扩展点的需求,提供了一些专
```
-:::info[注意]
+:::info 建议实现完整标签
为了保证 Halo 的功能完整性,建议主题开发者尽可能在主题中实现此标签。
:::
diff --git a/docs/developer-guide/theme/template-variables.md b/docs/developer-guide/theme/template-variables.md
deleted file mode 100644
index 48dd15c6..00000000
--- a/docs/developer-guide/theme/template-variables.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-title: 模板编写
----
-
-此章节我们将详细介绍如何在主题中编写页面的模板,以下是 Halo 核心中支持的所有模板:
-
-```mdx-code-block
-import DocCardList from '@theme/DocCardList';
-
-
-```
diff --git a/docs/developer-guide/theme/template-variables/_meta.json b/docs/developer-guide/theme/template-variables/_meta.json
new file mode 100644
index 00000000..a8c2bca3
--- /dev/null
+++ b/docs/developer-guide/theme/template-variables/_meta.json
@@ -0,0 +1,13 @@
+[
+ "index_",
+ "post",
+ "page",
+ "archives",
+ "tags",
+ "tag",
+ "categories",
+ "category",
+ "author",
+ "auth",
+ "error"
+]
diff --git a/docs/developer-guide/theme/template-variables/archives.md b/docs/developer-guide/theme/template-variables/archives.mdx
similarity index 100%
rename from docs/developer-guide/theme/template-variables/archives.md
rename to docs/developer-guide/theme/template-variables/archives.mdx
diff --git a/docs/developer-guide/theme/template-variables/auth.md b/docs/developer-guide/theme/template-variables/auth.md
index ad5c3680..127eae5d 100644
--- a/docs/developer-guide/theme/template-variables/auth.md
+++ b/docs/developer-guide/theme/template-variables/auth.md
@@ -1,6 +1,6 @@
---
title: 认证页面
-description: 自定义登录、注册等页面
+description: 通过覆盖 Halo 内置 Thymeleaf 模板,自定义登录、注册、退出、密码重置与两步验证页面,并复用认证流程的布局、脚本和基础资源
---
Halo 2.20 重构了登录、注册等页面,现在支持通过主题自定义认证相关的页面。
@@ -13,7 +13,7 @@ Halo 2.20 重构了登录、注册等页面,现在支持通过主题自定义
要实现自定义登录、注册等模板,只需要在主题的 `templates` 目录中新建与 Halo 源码中 `application/src/main/resources/templates` 同名的模板文件即可,下面是 Halo 源码中的目录结构:
-```bash
+```tree
├── challenges
│ └── two-factor
│ ├── totp.html 两步验证页面
diff --git a/docs/developer-guide/theme/template-variables/author.md b/docs/developer-guide/theme/template-variables/author.mdx
similarity index 100%
rename from docs/developer-guide/theme/template-variables/author.md
rename to docs/developer-guide/theme/template-variables/author.mdx
diff --git a/docs/developer-guide/theme/template-variables/categories.md b/docs/developer-guide/theme/template-variables/categories.mdx
similarity index 100%
rename from docs/developer-guide/theme/template-variables/categories.md
rename to docs/developer-guide/theme/template-variables/categories.mdx
diff --git a/docs/developer-guide/theme/template-variables/category.md b/docs/developer-guide/theme/template-variables/category.md
deleted file mode 100644
index 2a775540..00000000
--- a/docs/developer-guide/theme/template-variables/category.md
+++ /dev/null
@@ -1,146 +0,0 @@
----
-title: 分类归档
-description: category.html - /categories/:slug
----
-
-import CategoryVo from "../vo/_CategoryVo.md"
-import TagVo from "../vo/_TagVo.md"
-import ContributorVo from "../vo/_ContributorVo.md";
-import ListedPostVo from "../vo/_ListedPostVo.md"
-
-用于根据分类列出所有文章的页面。
-
-## 路由信息
-
-- 模板路径:`/templates/category.html`
-- 访问路径:`/categories/:slug`
-
-### 自定义模板
-
-除了上面提到的 `category.html`,主题作者还可以添加多种形式的额外渲染模板,提供给用户选择,可以通过这个功能实现将网站上的文章内容进行领域划分,比如网站上同时存在新闻、文档、博客等分区,那么就可以利用这个功能提供多个模板,同时 Halo 还支持为分类设置文章渲染模板,详情可见[新建文章分类](../../../user-guide/posts.md#新建文章分类)。
-
-定义方式为:
-
-```yaml title="theme.yaml"
-customTemplates:
- category:
- - name: {name}
- description: {description}
- screenshot: {screenshot}
- file: {file}.html
-```
-
-- `name`:模板名称
-- `description`:模板描述
-- `screenshot`:模板预览图
-- `file`:模板文件名,需要在 `/templates/` 目录下创建
-
-示例:
-
-```yaml title="theme.yaml"
-customTemplates:
- category:
- - name: 新闻
- description: 用于展示新闻分类下的文章
- screenshot:
- file: category_news.html
- - name: 博客
- description: 用于展示博客分类下的文章
- screenshot:
- file: category_blog.html
-```
-
-:::info
-需要注意,修改 theme.yaml 需要[重载主题配置](../../../user-guide/themes.md#重载主题配置)。
-:::
-
-## 变量
-
-### category
-
-#### 变量类型
-
-[#CategoryVo](#categoryvo)
-
-### posts
-
-#### 变量类型
-
-[#UrlContextListResult\](#urlcontextlistresultlistedpostvo)
-
-#### 示例
-
-```html title="/templates/category.html"
-
-```
-
-### _templateId
-
-#### 变量值
-
-`category`
-
-## 类型定义
-
-### CategoryVo
-
-
-
-### TagVo
-
-
-
-### ContributorVo
-
-
-
-### ListedPostVo
-
-
-
-- [#CategoryVo](#categoryvo)
-- [#TagVo](#tagvo)
-- [#ContributorVo](#contributorvo)
-
-### UrlContextListResult\
-
-```json title="UrlContextListResult"
-{
- "page": 0, // 当前页码
- "size": 0, // 每页条数
- "total": 0, // 总条数
- "items": "List<#ListedPostVo>", // 文章列表数据
- "first": true, // 是否为第一页
- "last": true, // 是否为最后一页
- "hasNext": true, // 是否有下一页
- "hasPrevious": true, // 是否有上一页
- "totalPages": 0, // 总页数
- "nextUrl": "string", // 下一页链接
- "prevUrl": "string" // 上一页链接
-}
-```
-
-- [#ListedPostVo](#listedpostvo)
diff --git a/docs/developer-guide/theme/template-variables/category.mdx b/docs/developer-guide/theme/template-variables/category.mdx
new file mode 100644
index 00000000..2e6aaeec
--- /dev/null
+++ b/docs/developer-guide/theme/template-variables/category.mdx
@@ -0,0 +1,146 @@
+---
+title: 分类归档
+description: category.html - /categories/:slug
+---
+
+import CategoryVo from "../vo/_CategoryVo.md"
+import TagVo from "../vo/_TagVo.md"
+import ContributorVo from "../vo/_ContributorVo.md";
+import ListedPostVo from "../vo/_ListedPostVo.md"
+
+用于根据分类列出所有文章的页面。
+
+## 路由信息
+
+- 模板路径:`/templates/category.html`
+- 访问路径:`/categories/:slug`
+
+### 自定义模板
+
+除了上面提到的 `category.html`,主题作者还可以添加多种形式的额外渲染模板,提供给用户选择,可以通过这个功能实现将网站上的文章内容进行领域划分,比如网站上同时存在新闻、文档、博客等分区,那么就可以利用这个功能提供多个模板,同时 Halo 还支持为分类设置文章渲染模板,详情可见[新建文章分类](../../../guide/use/posts.md#新建文章分类)。
+
+定义方式为:
+
+```yaml title="theme.yaml"
+customTemplates:
+ category:
+ - name: {name}
+ description: {description}
+ screenshot: {screenshot}
+ file: {file}.html
+```
+
+- `name`:模板名称
+- `description`:模板描述
+- `screenshot`:模板预览图
+- `file`:模板文件名,需要在 `/templates/` 目录下创建
+
+示例:
+
+```yaml title="theme.yaml"
+customTemplates:
+ category:
+ - name: 新闻
+ description: 用于展示新闻分类下的文章
+ screenshot:
+ file: category_news.html
+ - name: 博客
+ description: 用于展示博客分类下的文章
+ screenshot:
+ file: category_blog.html
+```
+
+:::info 修改 theme.yaml 后重载配置
+需要注意,修改 theme.yaml 需要[重载主题配置](../../../guide/use/themes.md#重载主题配置)。
+:::
+
+## 变量
+
+### category
+
+#### 变量类型
+
+[#CategoryVo](#categoryvo)
+
+### posts
+
+#### 变量类型
+
+[#UrlContextListResult\](#urlcontextlistresultlistedpostvo)
+
+#### 示例
+
+```html title="/templates/category.html"
+
+```
+
+### _templateId
+
+#### 变量值
+
+`category`
+
+## 类型定义
+
+### CategoryVo
+
+
+
+### TagVo
+
+
+
+### ContributorVo
+
+
+
+### ListedPostVo
+
+
+
+- [#CategoryVo](#categoryvo)
+- [#TagVo](#tagvo)
+- [#ContributorVo](#contributorvo)
+
+### UrlContextListResult\
+
+```json title="UrlContextListResult"
+{
+ "page": 0, // 当前页码
+ "size": 0, // 每页条数
+ "total": 0, // 总条数
+ "items": "List<#ListedPostVo>", // 文章列表数据
+ "first": true, // 是否为第一页
+ "last": true, // 是否为最后一页
+ "hasNext": true, // 是否有下一页
+ "hasPrevious": true, // 是否有上一页
+ "totalPages": 0, // 总页数
+ "nextUrl": "string", // 下一页链接
+ "prevUrl": "string" // 上一页链接
+}
+```
+
+- [#ListedPostVo](#listedpostvo)
diff --git a/docs/developer-guide/theme/template-variables/error.md b/docs/developer-guide/theme/template-variables/error.md
index d5211ece..45576585 100644
--- a/docs/developer-guide/theme/template-variables/error.md
+++ b/docs/developer-guide/theme/template-variables/error.md
@@ -1,6 +1,6 @@
---
title: 错误页面
-description: 关于错误页面的模板变量
+description: 配置 Halo 主题的 404、4xx、500、5xx 与默认错误模板,了解状态码对应的模板匹配顺序及 error 变量字段和渲染方式
---
## 路由信息
@@ -8,7 +8,7 @@ description: 关于错误页面的模板变量
- 模板路径:`/templates/error/{404,4xx,500,5xx,error}.html`
- 访问路径:无固定访问路径,由异常决定
-:::info[提示]
+:::info 错误模板匹配顺序
错误页面的可使用模板由状态码决定,例如 404 状态码对应的模板为 `/templates/error/404.html` 或者 `/templates/error/4xx.html`。也可以使用 `/templates/error/error.html` 作为默认模板。
识别顺序如下:
diff --git a/docs/developer-guide/theme/template-variables/index.md b/docs/developer-guide/theme/template-variables/index.md
new file mode 100644
index 00000000..4f1bdecf
--- /dev/null
+++ b/docs/developer-guide/theme/template-variables/index.md
@@ -0,0 +1,7 @@
+---
+title: 模板编写
+description: 介绍 Halo 主题中首页、文章、单页面、归档、分类、标签、作者、认证和错误页面的模板路径、访问路由、可用变量及渲染示例。
+overview: true
+---
+
+此章节我们将详细介绍如何在主题中编写页面的模板,以下是 Halo 核心中支持的所有模板:
diff --git a/docs/developer-guide/theme/template-variables/index_.md b/docs/developer-guide/theme/template-variables/index_.md
deleted file mode 100644
index 0cbe8141..00000000
--- a/docs/developer-guide/theme/template-variables/index_.md
+++ /dev/null
@@ -1,100 +0,0 @@
----
-title: 首页
-description: index.html - /
----
-
-import CategoryVo from "../vo/_CategoryVo.md"
-import TagVo from "../vo/_TagVo.md"
-import ContributorVo from "../vo/_ContributorVo.md";
-import ListedPostVo from "../vo/_ListedPostVo.md"
-
-网站的首页模板,在这个模板中默认设置了最新文章列表的变量,也可以通过调用 [Finder API](../finder-apis.md) 和 [主题设置](../settings.md) 来展示其他数据。
-
-## 路由信息
-
-- 模板路径:`/templates/index.html`
-- 访问路径:`/`
-
-## 变量
-
-### posts
-
-#### 变量类型
-
-[#UrlContextListResult\](#urlcontextlistresultlistedpostvo)
-
-#### 示例
-
-```html title="/templates/index.html"
-
-```
-
-### _templateId
-
-#### 变量值
-
-`index`
-
-## 类型定义
-
-### CategoryVo
-
-
-
-### TagVo
-
-
-
-### ContributorVo
-
-
-
-### ListedPostVo
-
-
-
-- [#CategoryVo](#categoryvo)
-- [#TagVo](#tagvo)
-- [#ContributorVo](#contributorvo)
-
-### UrlContextListResult\
-
-```json title="UrlContextListResult"
-{
- "page": 0, // 当前页码
- "size": 0, // 每页条数
- "total": 0, // 总条数
- "items": "List<#ListedPostVo>", // 文章列表数据
- "first": true, // 是否为第一页
- "last": true, // 是否为最后一页
- "hasNext": true, // 是否有下一页
- "hasPrevious": true, // 是否有上一页
- "totalPages": 0, // 总页数
- "nextUrl": "string", // 下一页链接
- "prevUrl": "string" // 上一页链接
-}
-```
-
-- [#ListedPostVo](#listedpostvo)
diff --git a/docs/developer-guide/theme/template-variables/index_.mdx b/docs/developer-guide/theme/template-variables/index_.mdx
new file mode 100644
index 00000000..2ee97d9a
--- /dev/null
+++ b/docs/developer-guide/theme/template-variables/index_.mdx
@@ -0,0 +1,100 @@
+---
+title: 首页
+description: 编写 Halo 主题的 index.html 首页模板,使用 posts 分页变量渲染最新文章列表、上下页链接,并了解首页路由与模板标识
+---
+
+import CategoryVo from "../vo/_CategoryVo.md"
+import TagVo from "../vo/_TagVo.md"
+import ContributorVo from "../vo/_ContributorVo.md";
+import ListedPostVo from "../vo/_ListedPostVo.md"
+
+网站的首页模板,在这个模板中默认设置了最新文章列表的变量,也可以通过调用 [Finder API](../finder-apis.md) 和 [主题设置](../settings.md) 来展示其他数据。
+
+## 路由信息
+
+- 模板路径:`/templates/index.html`
+- 访问路径:`/`
+
+## 变量
+
+### posts
+
+#### 变量类型
+
+[#UrlContextListResult\](#urlcontextlistresultlistedpostvo)
+
+#### 示例
+
+```html title="/templates/index.html"
+
+```
+
+### _templateId
+
+#### 变量值
+
+`index`
+
+## 类型定义
+
+### CategoryVo
+
+
+
+### TagVo
+
+
+
+### ContributorVo
+
+
+
+### ListedPostVo
+
+
+
+- [#CategoryVo](#categoryvo)
+- [#TagVo](#tagvo)
+- [#ContributorVo](#contributorvo)
+
+### UrlContextListResult\
+
+```json title="UrlContextListResult"
+{
+ "page": 0, // 当前页码
+ "size": 0, // 每页条数
+ "total": 0, // 总条数
+ "items": "List<#ListedPostVo>", // 文章列表数据
+ "first": true, // 是否为第一页
+ "last": true, // 是否为最后一页
+ "hasNext": true, // 是否有下一页
+ "hasPrevious": true, // 是否有上一页
+ "totalPages": 0, // 总页数
+ "nextUrl": "string", // 下一页链接
+ "prevUrl": "string" // 上一页链接
+}
+```
+
+- [#ListedPostVo](#listedpostvo)
diff --git a/docs/developer-guide/theme/template-variables/page.md b/docs/developer-guide/theme/template-variables/page.md
deleted file mode 100644
index 56cac963..00000000
--- a/docs/developer-guide/theme/template-variables/page.md
+++ /dev/null
@@ -1,90 +0,0 @@
----
-title: 单页面
-description: page.html - /:slug
----
-
-import SinglePageVo from "../vo/_SinglePageVo.md"
-import ContributorVo from "../vo/_ContributorVo.md"
-import ContentVo from "../vo/_ContentVo.md"
-
-页面与文章类似,同样包含页面标题和富文本形式的页面内容。与文章不同的是页面无法设置所属分类和标签信息,一般用于站点中单一展示功能的页面,例如常见的站点关于页面、联系我们页面等。
-
-## 路由信息
-
-- 模板路径:`/templates/page.html`
-- 访问路径:`/:slug`
-
-### 自定义模板
-
-除了上面提到的 `page.html`,主题作者还可以添加多种形式的额外渲染模板,提供给用户选择,此举可以丰富网站的使用类型。
-
-定义方式为:
-
-```yaml title="theme.yaml"
-customTemplates:
- page:
- - name: {name}
- description: {description}
- screenshot: {screenshot}
- file: {file}.html
-```
-
-- `name`:模板名称
-- `description`:模板描述
-- `screenshot`:模板预览图
-- `file`:模板文件名,需要在 `/templates/` 目录下创建
-
-示例:
-
-```yaml title="theme.yaml"
-customTemplates:
- page:
- - name: 关于公司
- description: 用于展示公司的一些信息
- screenshot:
- file: page_about.html
-```
-
-:::info
-需要注意,修改 theme.yaml 需要[重载主题配置](../../../user-guide/themes.md#重载主题配置)。
-:::
-
-## 变量
-
-### singlePage
-
-#### 变量类型
-
-[#SinglePageVo](#singlepagevo)
-
-#### 示例
-
-```html title="/templates/page.html"
-
-
-
-
-```
-
-### _templateId
-
-#### 变量值
-
-`page`
-
-## 类型定义
-
-### SinglePageVo
-
-
-
-- [#ContentVo](#contentvo)
-- [#ContributorVo](#contributorvo)
-
-### ContentVo
-
-
-
-### ContributorVo
-
-
diff --git a/docs/developer-guide/theme/template-variables/page.mdx b/docs/developer-guide/theme/template-variables/page.mdx
new file mode 100644
index 00000000..7402b73d
--- /dev/null
+++ b/docs/developer-guide/theme/template-variables/page.mdx
@@ -0,0 +1,90 @@
+---
+title: 单页面
+description: 编写 Halo 主题的 page.html 单页面模板,使用 singlePage 变量渲染标题和正文,并通过 theme.yaml 定义可供用户选择的自定义页面模板
+---
+
+import SinglePageVo from "../vo/_SinglePageVo.md"
+import ContributorVo from "../vo/_ContributorVo.md"
+import ContentVo from "../vo/_ContentVo.md"
+
+页面与文章类似,同样包含页面标题和富文本形式的页面内容。与文章不同的是页面无法设置所属分类和标签信息,一般用于站点中单一展示功能的页面,例如常见的站点关于页面、联系我们页面等。
+
+## 路由信息
+
+- 模板路径:`/templates/page.html`
+- 访问路径:`/:slug`
+
+### 自定义模板
+
+除了上面提到的 `page.html`,主题作者还可以添加多种形式的额外渲染模板,提供给用户选择,此举可以丰富网站的使用类型。
+
+定义方式为:
+
+```yaml title="theme.yaml"
+customTemplates:
+ page:
+ - name: {name}
+ description: {description}
+ screenshot: {screenshot}
+ file: {file}.html
+```
+
+- `name`:模板名称
+- `description`:模板描述
+- `screenshot`:模板预览图
+- `file`:模板文件名,需要在 `/templates/` 目录下创建
+
+示例:
+
+```yaml title="theme.yaml"
+customTemplates:
+ page:
+ - name: 关于公司
+ description: 用于展示公司的一些信息
+ screenshot:
+ file: page_about.html
+```
+
+:::info 修改 theme.yaml 后重载配置
+需要注意,修改 theme.yaml 需要[重载主题配置](../../../guide/use/themes.md#重载主题配置)。
+:::
+
+## 变量
+
+### singlePage
+
+#### 变量类型
+
+[#SinglePageVo](#singlepagevo)
+
+#### 示例
+
+```html title="/templates/page.html"
+
+
+
+
+```
+
+### _templateId
+
+#### 变量值
+
+`page`
+
+## 类型定义
+
+### SinglePageVo
+
+
+
+- [#ContentVo](#contentvo)
+- [#ContributorVo](#contributorvo)
+
+### ContentVo
+
+
+
+### ContributorVo
+
+
diff --git a/docs/developer-guide/theme/template-variables/post.md b/docs/developer-guide/theme/template-variables/post.md
deleted file mode 100644
index 0be11f4c..00000000
--- a/docs/developer-guide/theme/template-variables/post.md
+++ /dev/null
@@ -1,97 +0,0 @@
----
-title: 文章
-description: post.html - /archives/:slug
----
-
-import CategoryVo from "../vo/_CategoryVo.md"
-import TagVo from "../vo/_TagVo.md"
-import ContentVo from "../vo/_ContentVo.md"
-import ContributorVo from "../vo/_ContributorVo.md"
-import PostVo from "../vo/_PostVo.md"
-
-文章详情页面的模板。
-
-## 路由信息
-
-- 模板路径:`/templates/post.html`
-- 访问路径:默认为 `/archives/:slug`,用户可手动更改为其他路由形式,可参考:[主题路由设置](../../../user-guide/settings.md#主题路由设置)
-
-### 自定义模板
-
-除了上面提到的 `post.html`,主题作者还可以添加多种形式的额外渲染模板,提供给用户选择,此举可以丰富网站的使用类型,用户设置方式可参考 [文章设置](../../../user-guide/posts.md#文章设置)。
-
-定义方式为:
-
-```yaml title="theme.yaml"
-customTemplates:
- post:
- - name: {name}
- description: {description}
- screenshot: {screenshot}
- file: {file}.html
-```
-
-- `name`:模板名称
-- `description`:模板描述
-- `screenshot`:模板预览图
-- `file`:模板文件名,需要在 `/templates/` 目录下创建
-
-示例:
-
-```yaml title="theme.yaml"
-customTemplates:
- post:
- - name: 文档
- description: 文档类型的文章
- screenshot:
- file: post_documentation.html
-```
-
-:::info
-需要注意,修改 theme.yaml 需要[重载主题配置](../../../user-guide/themes.md#重载主题配置)。
-:::
-
-## 变量
-
-### post
-
-#### 变量类型
-
-[#PostVo](#postvo)
-
-#### 示例
-
-```html title="/templates/post.html"
-
-
-
-
-```
-
-### _templateId
-
-#### 变量值
-
-`post`
-
-## 类型定义
-
-### CategoryVo
-
-
-
-### TagVo
-
-
-
-### ContributorVo
-
-
-
-### ContentVo
-
-
-
-### PostVo
-
-
diff --git a/docs/developer-guide/theme/template-variables/post.mdx b/docs/developer-guide/theme/template-variables/post.mdx
new file mode 100644
index 00000000..cf293487
--- /dev/null
+++ b/docs/developer-guide/theme/template-variables/post.mdx
@@ -0,0 +1,97 @@
+---
+title: 文章
+description: post.html - /archives/:slug
+---
+
+import CategoryVo from "../vo/_CategoryVo.md"
+import TagVo from "../vo/_TagVo.md"
+import ContentVo from "../vo/_ContentVo.md"
+import ContributorVo from "../vo/_ContributorVo.md"
+import PostVo from "../vo/_PostVo.md"
+
+文章详情页面的模板。
+
+## 路由信息
+
+- 模板路径:`/templates/post.html`
+- 访问路径:默认为 `/archives/:slug`,用户可手动更改为其他路由形式,可参考:[主题路由设置](../../../guide/use/settings.md#主题路由设置)
+
+### 自定义模板
+
+除了上面提到的 `post.html`,主题作者还可以添加多种形式的额外渲染模板,提供给用户选择,此举可以丰富网站的使用类型,用户设置方式可参考 [文章设置](../../../guide/use/posts.md#文章设置)。
+
+定义方式为:
+
+```yaml title="theme.yaml"
+customTemplates:
+ post:
+ - name: {name}
+ description: {description}
+ screenshot: {screenshot}
+ file: {file}.html
+```
+
+- `name`:模板名称
+- `description`:模板描述
+- `screenshot`:模板预览图
+- `file`:模板文件名,需要在 `/templates/` 目录下创建
+
+示例:
+
+```yaml title="theme.yaml"
+customTemplates:
+ post:
+ - name: 文档
+ description: 文档类型的文章
+ screenshot:
+ file: post_documentation.html
+```
+
+:::info 修改 theme.yaml 后重载配置
+需要注意,修改 theme.yaml 需要[重载主题配置](../../../guide/use/themes.md#重载主题配置)。
+:::
+
+## 变量
+
+### post
+
+#### 变量类型
+
+[#PostVo](#postvo)
+
+#### 示例
+
+```html title="/templates/post.html"
+
+
+
+
+```
+
+### _templateId
+
+#### 变量值
+
+`post`
+
+## 类型定义
+
+### CategoryVo
+
+
+
+### TagVo
+
+
+
+### ContributorVo
+
+
+
+### ContentVo
+
+
+
+### PostVo
+
+
diff --git a/docs/developer-guide/theme/template-variables/tag.md b/docs/developer-guide/theme/template-variables/tag.mdx
similarity index 100%
rename from docs/developer-guide/theme/template-variables/tag.md
rename to docs/developer-guide/theme/template-variables/tag.mdx
diff --git a/docs/developer-guide/theme/template-variables/tags.md b/docs/developer-guide/theme/template-variables/tags.md
deleted file mode 100644
index dad701f6..00000000
--- a/docs/developer-guide/theme/template-variables/tags.md
+++ /dev/null
@@ -1,41 +0,0 @@
----
-title: 文章标签集合
-description: tags.html - /tags
----
-
-import TagVo from '../vo/_TagVo.md'
-
-用于列出所有文章标签的页面,可以用于实现标签墙等功能。
-
-## 路由信息
-
-- 模板路径:`/templates/tags.html`
-- 访问路径:`/tags`
-
-## 变量
-
-### tags
-
-#### 变量类型
-
-List\<[#TagVo](#tagvo)\>
-
-#### 示例
-
-```html title="/templates/tags.html"
-
-
-
-```
-
-### _templateId
-
-#### 变量值
-
-`tags`
-
-## 类型定义
-
-### TagVo
-
-
diff --git a/docs/developer-guide/theme/template-variables/tags.mdx b/docs/developer-guide/theme/template-variables/tags.mdx
new file mode 100644
index 00000000..26e29214
--- /dev/null
+++ b/docs/developer-guide/theme/template-variables/tags.mdx
@@ -0,0 +1,41 @@
+---
+title: 文章标签集合
+description: 编写 Halo 主题的 tags.html 标签集合模板,使用 tags 变量读取全部文章标签并渲染标签墙,同时了解页面路由和模板标识
+---
+
+import TagVo from '../vo/_TagVo.md'
+
+用于列出所有文章标签的页面,可以用于实现标签墙等功能。
+
+## 路由信息
+
+- 模板路径:`/templates/tags.html`
+- 访问路径:`/tags`
+
+## 变量
+
+### tags
+
+#### 变量类型
+
+List\<[#TagVo](#tagvo)\>
+
+#### 示例
+
+```html title="/templates/tags.html"
+
+
+
+```
+
+### _templateId
+
+#### 变量值
+
+`tags`
+
+## 类型定义
+
+### TagVo
+
+
diff --git a/docs/developer-guide/theme/ui-plugin.md b/docs/developer-guide/theme/ui-plugin.md
index d03657fb..0299aa85 100644
--- a/docs/developer-guide/theme/ui-plugin.md
+++ b/docs/developer-guide/theme/ui-plugin.md
@@ -11,7 +11,7 @@ description: 通过主题扩展 Console 和 UC 界面
将 UI 项目放在主题根目录的 `ui-plugin` 目录中:
-```text
+```tree
theme-root/
├── templates/
├── theme.yaml
diff --git a/docs/getting-started/first-post.md b/docs/getting-started/first-post.md
deleted file mode 100644
index 3c370d91..00000000
--- a/docs/getting-started/first-post.md
+++ /dev/null
@@ -1,32 +0,0 @@
----
-title: 第一篇文章
-description: Halo 安装后写第一篇文章:进入控制台、编辑发布、分类标签与前台访问。
----
-
-
-
-
-## 登录管理端
-
-浏览器访问 `/console` 即可进入 Halo 管理端。
-
-## 新建文章
-
-Halo 安装完成后,默认初始化了一篇 `Hello Halo` 文章,接下来我们将创建并发布一篇自己的文章。
-
-1. 在 Halo 管理端,点击仪表盘页面中的 `创建文章` 快捷入口,即可进入到文章编辑页面。
-2. 在文章编辑器中,你可以尽情写下你想展现的内容。
-3. 当内容编辑完成后,点击右上角的 `发布` 按钮,给文章设置一个合适的标题和别名,同时可以设置文章所属分类、标签及其他一些高级设置。
-4. 确认无误后,点击弹框下方的 `发布` 按钮,我们的第一篇文章就成功发布了。
-
-:::info
-关于文章相关其他功能及文章各种设置项的说明,请参考《[用户指南 - 文章](../user-guide/posts.md)》章节
-:::
-
-## 查看文章
-
-文章发布成功后,就可以在主题端查看到我们刚刚创建的文章了。
-
-浏览器访问域名进入站点首页,站点展示的内容及样式由当前启用的主题所决定。
-
-接下来,选一款喜欢的主题,尽情体验 Halo 吧!
diff --git a/docs/getting-started/install/1panel.md b/docs/getting-started/install/1panel.md
deleted file mode 100644
index 38febad7..00000000
--- a/docs/getting-started/install/1panel.md
+++ /dev/null
@@ -1,95 +0,0 @@
----
-title: 使用 1Panel 部署
-description: 通过 1Panel 安装 Halo:应用商店或容器方式部署与访问说明。
----
-
-import DockerArgs from "./slots/_docker-args.md"
-
-:::info
-在继续操作之前,我们推荐您先阅读[《写在前面》](../prepare),这可以快速帮助你了解 Halo。
-:::
-
-## 1Panel 简介
-
-[1Panel](https://1panel.cn) 是一个现代化、开源的 Linux 服务器运维管理面板。
-
-
-
-### 功能
-
-- **快速建站**:深度集成 WordPress 和 Halo,域名绑定、SSL 证书配置等一键搞定。
-- **高效管理**:通过 Web 端轻松管理 Linux 服务器,包括应用管理、主机监控、文件管理、数据库管理、容器管理等。
-- **安全可靠**:最小漏洞暴露面,提供防火墙和安全审计等功能。
-- **一键备份**:支持一键备份和恢复,备份数据云端存储,永不丢失。
-
-### 安装
-
-关于 1Panel 的安装部署与基础功能介绍,请参考 [1Panel 官方文档](https://1panel.cn/docs/installation/online_installation/)。此处假设你已经完成了 1Panel 的安装部署,并对其功能有了基础了解。
-
-### 安装基础软件
-
-在安装 Halo 之前,我们需要先在 1Panel 上安装好所需的软件,包括 OpenResty 和数据库(MySQL、PostgreSQL、MariaDB 都可以)。在接下来的文档中,我们会默认你已经安装好了这两个软件,并不再赘述。
-
-
-
-## 安装 Halo 应用
-
-进入应用商店应用列表,选择其中的 Halo 应用进行安装。
-
-
-
-在应用详情页选择最新的 Halo 版本进行安装。
-
-
-
-参数说明:
-
-- **名称**:要创建的 Halo 应用的名称。
-- **版本**:选择最新的版本即可。
-- **数据库服务**:Halo 应用使用的数据库应用,支持下拉选择已安装的数据库应用,1Panel 会自动配置 Halo 使用该数据库。
-- **数据库名**:Halo 应用使用的数据库名称,1Panel 会在选中的数据库中自动创建这个数据库。
-- **数据库用户**:Halo 应用使用的数据库用户名,1Panel 会在选中的数据库中自动创建这个用户,并添加对应的数据库授权。
-- **数据库用户密码**:Halo 应用使用的数据库用户密码,1Panel 会在选中的数据库中自动为上一步创建的用户配置该密码。
-- **外部访问地址**:Halo 应用的最终访问地址,如果有为 Halo 规划域名,需要配置为域名格式,例如 `http://halo.example.com`。否则配置为 `http://服务器IP:PORT`,例如 `http://192.168.1.1:8090`。
-- **端口**:Halo 应用的服务端口。
-
-开始安装后页面自动跳转到已安装应用列表,等待刚刚安装的 Halo 应用变为已启动状态。
-
-
-
-## 创建网站
-
-完成 Halo 应用的安装后,此时并不会自动创建一个网站,我们需要手动创建一个网站,然后将 Halo 应用绑定到这个网站上才能使用域名访问。
-
-点击 1Panel 菜单的 **网站**,进入网站列表页,点击 **创建网站** 按钮。
-
-
-
-1. 在已装应用中选择我们刚刚新建的 Halo 应用。
-2. 正确填写主域名,需要注意的是需要提前解析好域名到服务器 IP。
-
-最后,点击确认按钮,等待网站创建完成即可访问网站进行 [初始化](../setup.md)。
-
-
-
-## 升级 Halo
-
-:::info[提示]
-当 Halo 发布新版本之后,并不会在 1Panel 的应用商店中实时查看到新版本,通常需要等待一段时间才会显示,这取决于 1Panel 的应用商店更新频率。
-:::
-
-:::warning[注意]
-目前 1Panel 不支持在升级应用的时候查看应用的更新日志,所以建议在升级前前往 [Halo 版本发布](https://releases.halo.run/) 查看对应版本的更新日志,了解新版本的变化。
-:::
-
-当 Halo 在 1Panel 的应用商店有更新时,可以在 **应用商店** 的 **可升级** 选项卡中看到 Halo 应用的升级按钮。
-
-
-
-点击 **升级** 按钮后,可以在升级界面中选择最新的 Halo 版本,最后点击 **确认** 按钮即可完成升级。
-
-
-
-## 激活许可证
-
-可以参考 [许可证激活](../../user-guide/activate.md) 进行激活,社区版无需此步骤。
diff --git a/docs/getting-started/install/bt-panel.md b/docs/getting-started/install/bt-panel.md
deleted file mode 100644
index 38f960b3..00000000
--- a/docs/getting-started/install/bt-panel.md
+++ /dev/null
@@ -1,92 +0,0 @@
----
-title: 使用宝塔面板部署
-description: 通过宝塔面板部署 Halo:环境要求、站点与反向代理配置说明。
----
-
-::::info
-在继续操作之前,我们推荐您先阅读[《写在前面》](../prepare),这可以快速帮助你了解 Halo。
-::::
-
-## 宝塔面板简介
-
-宝塔面板是一个常见的 Linux 服务器运维面板,提供网站、数据库、SSL、Docker 等可视化管理能力。通过宝塔面板的 Docker 模块和应用商店,可以比较方便地完成 Halo 的安装、运行和升级。
-
-
-
-### 准备工作
-
-在开始之前,需要确保你已经完成以下准备:
-
-- 已安装并可以正常登录宝塔面板。
-- 已在服务器上安装宝塔的 Docker 模块。
-- 已放行服务器的 `80` 和 `443` 端口。
-- 如果计划使用域名访问 Halo,需要提前将域名解析到当前服务器。
-
-## 安装 Halo 应用
-
-进入宝塔面板左侧的 **Docker**,在 **应用商店** 中搜索 `Halo`,然后点击 **安装**。
-
-
-
-在安装配置页面中,按照实际情况填写参数:
-
-
-
-参数说明:
-
-- **名称**:当前 Halo 应用的名称。
-- **版本选择**:建议优先选择最新的稳定版本。
-- **域名**:Halo 对外访问使用的域名,建议填写已经完成解析的域名。
-- **允许外部访问**:如果希望直接通过 `IP:端口` 访问,可以启用此选项;如果只打算通过域名访问,通常不需要开启。
-- **端口**:Halo 容器暴露的服务端口。
-- **外部访问地址**:Halo 的最终访问地址,建议与实际访问地址保持一致,例如 `https://www.example.com`。
-- **CPU 核心数限制**、**内存限制**:按服务器资源情况选填,不限制可以保持默认值。
-- **编辑模板**:默认模板通常即可满足使用需求;如果需要调整镜像、挂载目录或其他编排参数,可以切换到自定义模板。
-
-宝塔提供的 Halo 应用模板会自动创建 Halo 运行所需的容器。确认参数无误后,点击 **确定** 开始安装。
-
-如果需要查看或调整底层的 Docker Compose 配置,可以切换到 **自定义** 模板模式:
-
-:::info
-宝塔的 Docker 应用商店的 Halo 版本可能会滞后于官方最新版本,通常建议自定义镜像版本,查看最新版本请前往 [Halo 版本发布](https://releases.halo.run/)。
-
-此外,宝塔的默认编排是 Halo 社区版本,如果你想安装 Halo 专业版或者商城版,将镜像修改为 `registry.fit2cloud.com/halo/halo-pro` 即可。
-:::
-
-
-
-安装完成后,进入 **Docker** 的 **已安装** 列表,等待 Halo 应用变为运行中状态。
-
-
-
-## 配置网站和 SSL
-
-如果你在安装 Halo 时填写了域名,宝塔通常会同步创建对应的网站配置。你可以在已安装应用卡片中点击 **管理网站**,或者直接进入左侧菜单的 **网站** 查看站点状态。
-
-
-
-如果站点的 **SSL 证书** 一栏显示未部署,可以进入站点管理页面,在 **SSL** 标签页中申请证书。
-
-
-
-证书申请成功后,即可通过你配置的域名使用 `https` 访问 Halo。首次访问时,根据页面提示完成 Halo 的[初始化](../setup.md)即可。
-
-::::info
-如果证书申请失败,建议优先检查域名解析是否生效,以及服务器的 `80`、`443` 端口是否已经正确放行。
-::::
-
-## 升级 Halo
-
-当需要升级 Halo 时,可以进入 **Docker** 的 **容器编排**,找到当前的 Halo 项目,修改镜像版本为最新版本,然后点击 **确定** 按钮即可完成升级。
-
-:::info
-查看最新版本请前往 [Halo 版本发布](https://releases.halo.run/)。
-:::
-
-
-
-更新完成后,宝塔会重新拉取镜像并重建相关容器。建议升级前先备份 Halo 数据目录和数据库,并前往 [Halo 版本发布](https://releases.halo.run/) 查看对应版本的更新说明。
-
-## 激活许可证
-
-可以参考 [许可证激活](../../user-guide/activate.md) 进行激活,社区版无需此步骤。
diff --git a/docs/getting-started/install/cloud/alibaba-cloud-market.md b/docs/getting-started/install/cloud/alibaba-cloud-market.md
deleted file mode 100644
index 1bb61fea..00000000
--- a/docs/getting-started/install/cloud/alibaba-cloud-market.md
+++ /dev/null
@@ -1,59 +0,0 @@
----
-title: 阿里云云市场部署
-description: 使用阿里云云市场 Halo 镜像快速创建实例与初始化说明。
----
-
-阿里云云市场提供围绕云计算产品的软件应用及服务,包括数据与 API、专业服务、基础软件、建站小程序、企业应用、安全、AI 与大数据计算、开发与运维、解决方案以及 IoT 十大类目市场,商品数量达上万种。
-
-Halo 目前已上架至阿里云云市场,助力用户打造高效便捷的建站体验!本指南将介绍如何通过阿里云云市场购买、部署和使用 **Halo** 镜像,并提供购买服务器的优惠链接。
-
-阿里云的 Halo 镜像不仅包括了已经部署好的 Halo 服务,还集成了 [1Panel](https://1panel.cn/) Linux 管理面板,可以更加方便地升级 Halo 和配置网站。
-
-## 购买服务器
-
-### 通过优惠链接
-
-目前阿里云针对 Halo 用户推出了 5.5 折优惠,您可以通过以下链接购买服务器:[专属阿里云特价链接 5.5 折优惠](https://market.aliyun.com/common/dashi/halo?userCode=kmemb8jp)
-
-
-
-
-
-### 创建 ECS 时选择 Halo 镜像
-
-您也可以自行购买[阿里云服务器](https://ecs-buy.aliyun.com/ecs?userCode=kmemb8jp),并在选择镜像时选择云市场镜像并搜索 **Halo**,即可快速选择镜像进行部署。
-
-
-
-
-
-服务器初始化完成之后,进入 ECS 控制台即可看到服务器信息,如下图所示:
-
-
-
-## 访问 Halo
-
-首先需要在服务器的安全组开放 80 端口,然后就可以通过服务器的公网 IP 访问 Halo 了。
-
-
-
-首次访问会进入 Halo 初始化页面,填写初始化信息即可完成 Halo 的安装。
-
-:::info[提示]
-Halo 初始化文档可查阅:[初始化](../../setup.md)
-:::
-
-## 管理 Halo
-
-该镜像的 Halo 使用 Docker Compose 方式部署,相关文件位于 `/opt/halo` 目录中。
-
-### 查看服务状态
-
-```bash
-cd /opt/halo
-docker compose ps
-```
-
-### 升级 Halo
-
-修改 `/opt/halo/docker-compose.yml` 中 Halo 容器使用的镜像标签为对应版本后,执行 `docker compose up -d` 命令即可进行升级。
diff --git a/docs/getting-started/install/cloud/tencent-cloud-lighthouse.md b/docs/getting-started/install/cloud/tencent-cloud-lighthouse.md
deleted file mode 100644
index 6da784eb..00000000
--- a/docs/getting-started/install/cloud/tencent-cloud-lighthouse.md
+++ /dev/null
@@ -1,71 +0,0 @@
----
-title: 腾讯云轻量应用模板
-description: 腾讯云轻量应用服务器应用模板一键部署 Halo 的步骤说明。
----
-
-腾讯云目前已经在轻量应用服务器的应用模板中添加了 Halo 的模板镜像,选择应用模板购买服务器之后就预装了 Halo 和 [1Panel](https://1panel.cn/)。
-
-## 购买轻量应用服务器
-
-购买地址:[轻量应用服务器](https://buy.cloud.tencent.com/lighthouse?blueprintType=APP_OS&blueprintOfficialId=lhbp-pjoqcja2®ionId=8&zone=ap-beijing-3&bundleId=bundle_starter_mc_med2_01&loginSet=AUTO&from=lh-console)
-
-然后在应用模板中选择 Halo,然后选择所需地域、可用区、套餐等,点击立即购买即可。
-
-
-
-## 应用管理
-
-
-
-服务器初始化完成之后,进入应用 **管理页面** 即可看到 Halo 和 1Panel 的相关信息。
-
-## 访问 Halo
-
-在 **应用管理** 页面中点击 **管理员登录地址** 即可进入 Halo 初始化页面,填写初始化信息即可完成 Halo 的安装。
-
-
-
-## 1Panel 管理
-
-1. 在 **应用管理** 页面中可以看到预装的 1Panel 信息,首先需要将 1Panel 的端口开放,进入防火墙页面添加默认端口 8090 即可:
-
- 
-2. 登录到实例获取 1Panel 初始用户名和密码:
-
- 
-3. 然后就可以通过 `http://ip:8090/tencentcloud` 进入 1Panel 的管理后台:
-
- 
- 
-
-## 查看预装应用
-
-为了保证 Halo 的正常运行,1Panel 中预装了 Halo 所需的环境,可以在 **应用商店** 的 **已安装** 选项卡中查看:
-
-
-
-关于应用商店,可查阅 [1Panel 文档](https://1panel.cn/docs/user_manual/appstore/appstore/)。
-
-## 升级 Halo
-
-在 **应用商店** 的 **可升级** 选项卡中检查 Halo 是否有更新,如果有新的版本,点击应用卡片的 **升级** 按钮即可。
-
-
-
-## 绑定域名
-
-:::info
-该操作要求用户有一个可用的域名,并在 DNS 服务商处添加对应的解析记录。
-:::
-
-在 **网站** 页面中,此镜像默认添加了一个关联 Halo 应用的网站,你可以点击配置按钮然后添加自己的域名。
-
-
-
-
-
-除此之外,在绑定域名之后,还需要修改一下 Halo 的 **外部访问地址** 参数为实际的网站访问地址(如:[https://demo.halo.run](https://demo.halo.run)),否则 Halo 的部分功能或者插件可能会出现使用问题,只需要按照下图所示修改应用的参数然后点击确认即可。
-
-
-
-关于网站管理,可查阅 [1Panel 文档](https://1panel.cn/docs/user_manual/websites/websites/)。
diff --git a/docs/getting-started/install/config.md b/docs/getting-started/install/config.md
deleted file mode 100644
index 69202564..00000000
--- a/docs/getting-started/install/config.md
+++ /dev/null
@@ -1,245 +0,0 @@
----
-title: 配置说明
-description: Halo 运行时配置:环境变量、端口、数据库连接与工作目录等说明。
----
-
-在前面的部署文档中,为了保证部署流程的简洁,只说明了运行所必须的配置,但除了运行之外,Halo 还提供了不少其他的配置以及我们所使用的 Web 框架的配置,这个文档我们将详细介绍 Halo 的完整配置。
-
-## 配置方式
-
-Halo 支持通过多种方式进行配置,目前 [Docker Compose 部署文档](./docker-compose.md) 的示例是通过运行参数配置,[JAR 文件部署方式](./jar-file.md) 是通过配置文件进行配置。
-
-### 通过运行参数
-
-通常我们在使用 Docker Compose 部署的时候推荐使用这种方式进行配置,配置方式为在 Docker Compose 配置文件的 `command` 添加对应的配置条目即可,比如:
-
-```yaml {5-10}
-services:
- halo:
- image: registry.fit2cloud.com/halo/halo-pro:2.26
- ...
- command:
- - --spring.r2dbc.url=r2dbc:pool:postgresql://halodb/halo
- - --spring.r2dbc.username=halo
- - --spring.r2dbc.password=openpostgresql
- - --spring.sql.init.platform=postgresql
- - --halo.external-url=http://localhost:8090/
-```
-
-### 通过配置文件
-
-通常我们在使用 JAR 文件部署的时候更推荐使用这种方式进行配置,配置文件名称为 `application.yaml`,并且需要在运行的时候通过 `--spring.config.additional-location` 参数指定配置文件存放的目录,运行示例:
-
-```bash
-java -jar halo.jar --spring.config.additional-location=optional:file:$HOME/.halo2/
-```
-
-配置示例:
-
-```yaml title="~/.halo2/application.yaml"
-spring:
- r2dbc:
- url: r2dbc:h2:file:///${halo.work-dir}/db/halo-next?MODE=MySQL&DB_CLOSE_ON_EXIT=FALSE
- username: admin
- password: 123456
- sql:
- init:
- mode: always
- platform: h2
-```
-
-:::info
-完整的 JAR 文件部署文档可查阅:[使用 JAR 文件部署](./jar-file.md)
-:::
-
-当然,使用 Docker Compose 部署同样支持通过这种方式配置,只需要将 `application.yaml` 放在工作目录的挂载目录即可,示例:
-
-```bash
-❯ tree
-.
-├── docker-compose.yaml
-└── halo2
- └── application.yaml
-
-2 directories, 2 files
-```
-
-其中,`docker-compose.yaml` 的 Halo 服务的 `volumes` 应该包含 `./halo2:/root/.halo2`。
-
-## 配置列表
-
-### Halo 独有配置
-
-通常用于生产环境的配置:
-
-| 配置路径 | 说明 | 生产环境默认值 |
-| -------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------- |
-| `halo.work-dir` | Halo [工作目录](../prepare.md#工作目录),通常不建议修改 | `${user.home}/.halo2` |
-| `halo.external-url` | 网站的实际访问地址,如:`https://www.halo.run` | `http://localhost:8090` |
-| `halo.use-absolute-permalink` | 永久链接是否生成为绝对地址,设置为 `true` 时,请确保正确配置了 `halo.external-url` | `false` |
-| `halo.security.frame-options.disabled` | 是否禁止网站通过 iframe 嵌入 | `false` |
-| `halo.security.frame-options.mode` | iframe 嵌入模式,默认为同源,可设置的值为 `DENY`、`SAMEORIGIN` | `SAMEORIGIN` |
-| `halo.security.referrer-options.policy` | Referrer-Policy 是一个 HTTP 头部字段,用于控制浏览器在发送请求时如何处理 Referer 信息,可设置的值请参考 [https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Referrer-Policy](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Referrer-Policy) | `strict-origin-when-cross-origin` |
-| `halo.security.remember-me.token-validity` | 保持登录会话的有效期,默认为 14 天(14d) | `14d` |
-| `halo.security.basic-auth.disabled` | 是否禁用 API 的 Basic Auth 认证 | `true` |
-| `halo.security.two-factor-auth.disabled` | 是否禁用系统全局的两步验证 | `false` |
-| `halo.attachment.resource-mappings[0].pathPattern` | 附件资源代理匹配规则,这个设置通常适用于从其他平台迁移的场景 | `/upload/**` |
-| `halo.attachment.resource-mappings[0].locations` | 附件资源代理目录,只能放置在[工作目录](../prepare.md#工作目录)的 `attachments` 目录 | `migrate-from-1.x` |
-| `halo.attachment.thumbnail.disabled` | 是否禁用附件缩略图功能,如果不需要此功能,可以选择禁用 | false |
-| `halo.attachment.thumbnail.concurrent-threads` | 生成附件缩略图的并发数 | 1 |
-| `halo.attachment.thumbnail.quality` | 附件缩略图的生成质量,数值为 0-1 之间 | - |
-
-通常用于开发环境的配置:
-
-| 配置路径 | 说明 | 默认值 |
-| ----------------------------- | --------------------------- | ------ |
-| `halo.ui.proxy.endpoint` | 开发环境的 UI 代理地址 | -- |
-| `halo.ui.proxy.enabled` | 是否启用 UI 代理地址 | -- |
-| `halo.plugin.runtime-mode` | 插件的运行模式 | -- |
-
-### Web 框架本身的配置
-
-Halo 使用了 [Spring Boot](https://docs.spring.io/spring-boot/) 和 [Spring WebFlux](https://docs.spring.io/spring-framework/reference/web/webflux.html),完整的配置可查阅:[Common Application Properties](https://docs.spring.io/spring-boot/appendix/application-properties/index.html#appendix.application-properties.core),以下将列出关于 Halo 常用的配置:
-
-Web 服务相关:
-
-| 配置路径 | 说明 | 默认值 |
-| ----------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | ------- |
-| `server.port` | Web 服务端口 | `8090` |
-| `server.compression.enabled` | 是否开启 gzip 压缩 | `true` |
-| `spring.web.resources.cache.cachecontrol.max-age` | 设置静态资源的缓存存储的最大周期,超过这个时间缓存被认为过期 | `365d` |
-| `spring.web.resources.cache.cachecontrol.no-cache` | 设置静态资源响应头的 `Cache-Control` 为 `no-cache`,在发布缓存副本之前,强制要求缓存把请求提交给原始服务器进行验证(协商缓存验证) | `false` |
-| `spring.web.resources.cache.cachecontrol.use-last-modified` | 是否为静态资源添加 Last-Modified 响应头,Last-Modified 表示服务器上资源的最后修改时间。当浏览器第一次请求资源时,服务器会在响应头中包含这个字段 | `true` |
-| `spring.thymeleaf.cache` | 是否开启模版引擎缓存 | `true` |
-
-数据库相关:
-
-| 配置路径 | 说明 | 默认值 |
-| -------------------------- | --------------------------------------------------------------------- | ------ |
-| `spring.r2dbc.url` | 数据库连接地址,详细可查阅下方的 `数据库配置` | -- |
-| `spring.r2dbc.username` | 数据库用户名 | -- |
-| `spring.r2dbc.password` | 数据库密码 | -- |
-| `spring.sql.init.platform` | 数据库平台名称,支持 `postgresql`、`mysql`、`mariadb`、`h2` | -- |
-
-数据库配置:
-
-| 链接方式 | 链接地址格式 | `spring.sql.init.platform` |
-| ---------------- | ---------------------------------------------------------------------------------- | -------------------------- |
-| PostgreSQL | `r2dbc:pool:postgresql://{HOST}:{PORT}/{DATABASE}` | postgresql |
-| MySQL | `r2dbc:pool:mysql://{HOST}:{PORT}/{DATABASE}` | mysql |
-| MariaDB | `r2dbc:pool:mariadb://{HOST}:{PORT}/{DATABASE}` | mariadb |
-| H2 Database | `r2dbc:h2:file:///${halo.work-dir}/db/halo-next?MODE=MySQL&DB_CLOSE_ON_EXIT=FALSE` | h2 |
-
-## Redis 集成
-
-:::note
-限 [Halo 付费版](../prepare.md#发行版本) 可用。
-:::
-
-Halo 付费版在 2.16 中新增了集成 Redis 的功能,目前提供将用户登录 Session 存入 Redis 的支持。
-
-### 配置方式
-
-如果使用 Docker 或者 Docker Compose 部署,需要添加以下启动参数:
-
-```properties
-- --spring.data.redis.host=localhost # Redis 服务地址
-- --spring.data.redis.port=6379 # Redis 服务端口
-- --spring.data.redis.database=0 # Redis 数据库
-- --spring.data.redis.password= # Redis 密码
-- --halo.session.store-type=redis # 声明 session 存储方式为 redis,默认不配置则为 in-memory
-- --halo.redis.enabled=true # 启用 Redis 服务
-```
-
-:::info
-请特别注意 `spring.data.redis.host` 的指向,在 Docker 容器中,可能并不是 localhost,需要确保 Halo 容器中能够正常访问到你的 Redis 服务。
-:::
-
-Docker Compose 配置片段如下:
-
-```yaml {25-32}
-version: "3"
-
-services:
- halo:
- image: registry.fit2cloud.com/halo/halo-pro:2.26
- restart: on-failure:3
- depends_on:
- halodb:
- condition: service_healthy
- networks:
- halo_network:
- volumes:
- - ./halo2:/root/.halo2
- ports:
- - "8090:8090"
- healthcheck:
- test: ["CMD", "curl", "-f", "http://localhost:8090/actuator/health/readiness"]
- interval: 30s
- timeout: 5s
- retries: 5
- start_period: 30s
- command:
- ...
-
- # Redis 相关配置开始
- - --spring.data.redis.host=localhost # Redis 服务地址
- - --spring.data.redis.port=6379 # Redis 服务端口
- - --spring.data.redis.database=0 # Redis 数据库
- - --spring.data.redis.password= # Redis 密码
- - --halo.session.store-type=redis # 声明 session 存储方式为 redis,默认不配置则为 in-memory
- - --halo.redis.enabled=true
- # Redis 相关配置结束
-networks:
- halo_network:
-```
-
-如果你是使用的 Docker Compose 部署 Halo,并且希望将 Redis 服务编排在一起,以下是配置示例:
-
-```yaml {25-32,36-43}
-version: "3"
-
-services:
- halo:
- image: registry.fit2cloud.com/halo/halo-pro:2.26
- restart: on-failure:3
- depends_on:
- halodb:
- condition: service_healthy
- networks:
- halo_network:
- volumes:
- - ./halo2:/root/.halo2
- ports:
- - "8090:8090"
- healthcheck:
- test: ["CMD", "curl", "-f", "http://localhost:8090/actuator/health/readiness"]
- interval: 30s
- timeout: 5s
- retries: 5
- start_period: 30s
- command:
- # ...
-
- # Redis 相关配置开始
- - --spring.data.redis.host=redis # Redis 服务地址
- - --spring.data.redis.port=6379 # Redis 服务端口
- - --spring.data.redis.database=0 # Redis 数据库
- - --spring.data.redis.password= # Redis 密码
- - --halo.session.store-type=redis # 声明 session 存储方式为 redis,默认不配置则为 in-memory
- - --halo.redis.enabled=true
- # Redis 相关配置结束
-
- # ...
-
- # 新增的 Redis 编排
- redis:
- image: redis:7.2.5
- networks:
- halo_network:
- volumes:
- - ./redis-data:/data
- restart: always
-networks:
- halo_network:
-```
diff --git a/docs/getting-started/install/docker-compose.md b/docs/getting-started/install/docker-compose.md
deleted file mode 100644
index 27d2c67a..00000000
--- a/docs/getting-started/install/docker-compose.md
+++ /dev/null
@@ -1,345 +0,0 @@
----
-title: 使用 Docker Compose 部署
-description: 使用 Docker Compose 部署 Halo:推荐方式、compose 配置与持久化卷说明。
----
-
-```mdx-code-block
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-import DockerArgs from "./slots/_docker-args.md"
-import DockerRegistryList from "./slots/_docker-registry-list.md"
-```
-
-:::info
-在继续操作之前,我们推荐您先阅读[《写在前面》](../prepare.md),这可以快速帮助你了解 Halo。
-:::
-
-## 环境搭建
-
-- Docker 安装文档:[https://docs.docker.com/engine/install/](https://docs.docker.com/engine/install/)
-- Docker Compose 安装文档:[https://docs.docker.com/compose/install/](https://docs.docker.com/compose/install/)
-
-## 部署 Halo
-
-### 镜像说明
-
-
-
-### 创建容器
-
-1. 在系统任意位置创建一个文件夹,此文档以 `~/halo` 为例。
-
- ```bash
- mkdir ~/halo && cd ~/halo
- ```
-
- :::info
- 注意:后续操作中,Halo 产生的所有数据都会保存在这个目录,请妥善保存。
- :::
-
-2. 创建 `docker-compose.yaml`
-
- 此文档提供几种场景的 Docker Compose 配置文件,请根据你的需要**选择一种**。
-
-
-
- ```yaml {24-30,44} title="~/halo/docker-compose.yaml"
- services:
- halo:
- image: registry.fit2cloud.com/halo/halo-pro:2.26
- restart: on-failure:3
- depends_on:
- halodb:
- condition: service_healthy
- networks:
- halo_network:
- volumes:
- - ./halo2:/root/.halo2
- ports:
- - "8090:8090"
- healthcheck:
- test: ["CMD", "curl", "-f", "http://localhost:8090/actuator/health/readiness"]
- interval: 30s
- timeout: 5s
- retries: 5
- start_period: 30s
- environment:
- # JVM 参数,默认为 -Xmx256m -Xms256m,可以根据实际情况做调整,置空表示不添加 JVM 参数
- - JVM_OPTS=-Xmx256m -Xms256m
- command:
- - --spring.r2dbc.url=r2dbc:pool:postgresql://halodb/halo
- - --spring.r2dbc.username=halo
- # PostgreSQL 的密码,请保证与下方 POSTGRES_PASSWORD 的变量值一致。
- - --spring.r2dbc.password=openpostgresql
- - --spring.sql.init.platform=postgresql
- # 外部访问地址,请根据实际需要修改
- - --halo.external-url=http://localhost:8090/
- halodb:
- image: postgres:15.4
- restart: on-failure:3
- networks:
- halo_network:
- volumes:
- - ./db:/var/lib/postgresql/data
- healthcheck:
- test: [ "CMD", "pg_isready" ]
- interval: 10s
- timeout: 5s
- retries: 5
- environment:
- - POSTGRES_PASSWORD=openpostgresql
- - POSTGRES_USER=halo
- - POSTGRES_DB=halo
- - PGUSER=halo
-
- networks:
- halo_network:
- ```
- :::info
- 此示例的 PostgreSQL 数据库容器默认没有设置端口映射,如果需要在容器外部访问数据库,可以自行在 `halodb` 服务中添加端口映射,PostgreSQL 的端口为 `5432`。
- :::
-
-
- ```yaml {24-30,52} title="~/halo/docker-compose.yaml"
- services:
- halo:
- image: registry.fit2cloud.com/halo/halo-pro:2.26
- restart: on-failure:3
- depends_on:
- halodb:
- condition: service_healthy
- networks:
- halo_network:
- volumes:
- - ./halo2:/root/.halo2
- ports:
- - "8090:8090"
- healthcheck:
- test: ["CMD", "curl", "-f", "http://localhost:8090/actuator/health/readiness"]
- interval: 30s
- timeout: 5s
- retries: 5
- start_period: 30s
- environment:
- # JVM 参数,默认为 -Xmx256m -Xms256m,可以根据实际情况做调整,置空表示不添加 JVM 参数
- - JVM_OPTS=-Xmx256m -Xms256m
- command:
- - --spring.r2dbc.url=r2dbc:pool:mysql://halodb:3306/halo
- - --spring.r2dbc.username=root
- # MySQL 的密码,请保证与下方 MYSQL_ROOT_PASSWORD 的变量值一致。
- - --spring.r2dbc.password=o#DwN&JSa56
- - --spring.sql.init.platform=mysql
- # 外部访问地址,请根据实际需要修改
- - --halo.external-url=http://localhost:8090/
-
- halodb:
- image: mysql:8.1.0
- restart: on-failure:3
- networks:
- halo_network:
- command:
- - --default-authentication-plugin=caching_sha2_password
- - --character-set-server=utf8mb4
- - --collation-server=utf8mb4_general_ci
- - --explicit_defaults_for_timestamp=true
- volumes:
- - ./mysql:/var/lib/mysql
- - ./mysqlBackup:/data/mysqlBackup
- healthcheck:
- test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "--silent"]
- interval: 3s
- retries: 5
- start_period: 30s
- environment:
- # 请修改此密码,并对应修改上方 Halo 服务的 SPRING_R2DBC_PASSWORD 变量值
- - MYSQL_ROOT_PASSWORD=o#DwN&JSa56
- - MYSQL_DATABASE=halo
-
- networks:
- halo_network:
- ```
-
- :::info
- 此示例的 MySQL 数据库容器默认没有设置端口映射,如果需要在容器外部访问数据库,可以自行在 `halodb` 服务中添加端口映射,MySQL 的端口为 `3306`。
- :::
-
-
- :::warning
- 不推荐在生产环境使用默认的 H2 数据库,这可能因为操作不当导致数据文件损坏。如果因为某些原因(如内存不足以运行独立数据库)必须要使用,建议按时[备份数据](../../user-guide/backup.md)。
- :::
-
- ```yaml {20} title="~/halo/docker-compose.yaml"
- services:
- halo:
- image: registry.fit2cloud.com/halo/halo-pro:2.26
- restart: on-failure:3
- volumes:
- - ./halo2:/root/.halo2
- ports:
- - "8090:8090"
- healthcheck:
- test: ["CMD", "curl", "-f", "http://localhost:8090/actuator/health/readiness"]
- interval: 30s
- timeout: 5s
- retries: 5
- start_period: 30s
- environment:
- # JVM 参数,默认为 -Xmx256m -Xms256m,可以根据实际情况做调整,置空表示不添加 JVM 参数
- - JVM_OPTS=-Xmx256m -Xms256m
- command:
- # 外部访问地址,请根据实际需要修改
- - --halo.external-url=http://localhost:8090/
- ```
-
-
- ```yaml {5,13-20} title="~/halo/docker-compose.yaml"
- services:
- halo:
- image: registry.fit2cloud.com/halo/halo-pro:2.26
- restart: on-failure:3
- network_mode: "host"
- volumes:
- - ./halo2:/root/.halo2
- environment:
- # JVM 参数,默认为 -Xmx256m -Xms256m,可以根据实际情况做调整,置空表示不添加 JVM 参数
- - JVM_OPTS=-Xmx256m -Xms256m
- command:
- # 修改为自己已有的 MySQL 配置
- - --spring.r2dbc.url=r2dbc:pool:mysql://localhost:3306/halo
- - --spring.r2dbc.username=root
- - --spring.r2dbc.password=
- - --spring.sql.init.platform=mysql
- # 外部访问地址,请根据实际需要修改
- - --halo.external-url=http://localhost:8090/
- # 端口号 默认8090
- - --server.port=8090
- ```
-
- :::info
- 使用外部数据库时,需要提前手动创建好数据库,以 MySQL 为例:
-
- ```sql
- create database halo character set utf8mb4 collate utf8mb4_bin;
- ```
- :::
-
-
-
- 运行参数详解:
-
-
-
- :::info
- 为了保持部署流程的简洁,此文档仅提供了必要的配置示例,完整的配置选项列表可查阅:[配置说明](./config.md)
- :::
-
-3. 启动 Halo 服务
-
- ```bash
- docker compose up -d
- ```
-
- 实时查看日志:
-
- ```bash
- docker-compose logs -f
- ```
-
-4. 用浏览器访问 /console 即可进入 Halo 管理页面,首次启动会进入初始化页面。
-
- :::tip
- 如果需要配置域名访问,建议先配置好反向代理以及域名解析再进行初始化。如果通过 `http://ip:端口号` 的形式无法访问,请到服务器厂商后台将运行的端口号添加到安全组,如果服务器使用了 Linux 面板,请检查此 Linux 面板是否有还有安全组配置,需要同样将端口号添加到安全组。
- :::
-
-5. 激活许可证,可以参考 [许可证激活](../../user-guide/activate.md) 进行激活,社区版无需此步骤。
-
-## 升级 Halo
-
-1. 备份数据,可以参考 [备份与恢复](../../user-guide/backup.md) 进行完整备份(可选,但推荐备份)。
-2. 更新 Halo 服务
-
- 修改 `docker-compose.yaml` 中配置的镜像版本。
-
- ```yaml {3}
- services:
- halo:
- image: registry.fit2cloud.com/halo/halo-pro:2.26
- ```
-
- ```bash
- docker compose up -d
- ```
-
-## 反向代理
-
-你可以在下面的反向代理软件中任选一项,我们假设你已经安装好了其中一项,并对其的基本操作有一定了解。如果你对它们没有任何了解,可以参考我们更为详细的反向代理文档:
-
-1. 使用 [Nginx Proxy Manager](../install/other/nginxproxymanager.md)
-2. 使用 [Traefik](../install/other/traefik.md)
-
-### Nginx
-
-```nginx {2,7,10}
-upstream halo {
- server 127.0.0.1:8090;
-}
-server {
- listen 80;
- listen [::]:80;
- server_name www.yourdomain.com;
- client_max_body_size 1024m;
- location / {
- proxy_pass http://halo;
- proxy_set_header HOST $host;
- proxy_set_header X-Forwarded-Proto $scheme;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- }
-}
-```
-
-### Caddy 2
-
-```txt {1,5}
-www.yourdomain.com
-
-encode gzip
-
-reverse_proxy 127.0.0.1:8090
-```
-
-### Traefik
-
-更新 halo 容器组的配置
-
-1. `networks` 中引入已存在的网络 `traefik`(此网络需要 [提前创建](../install/other/traefik.md#创建-traefik))
-2. `services.halo.networks` 中添加网络 `traefik`
-3. 修改外部地址为你的域名
-4. 声明路由规则、开启 TLS
-
-```yaml {2-3,14,18,23-29}
-networks:
- traefik:
- external: true
- halo:
-
-services:
- halo:
- image: registry.fit2cloud.com/halo/halo-pro:2.26
- restart: on-failure:3
- volumes:
- - ./halo2:/root/.halo2
- networks:
- - traefik
- - halo
- command:
- # 外部访问地址,请根据实际需要修改
- - --halo.external-url=https://yourdomain.com
- labels:
- traefik.enable: "true"
- traefik.docker.network: traefik
- traefik.http.routers.halo.rule: Host(`yourdomain.com`)
- traefik.http.routers.halo.tls: "true"
- traefik.http.routers.halo.tls.certresolver: myresolver
- traefik.http.services.halo.loadbalancer.server.port: 8090
-```
diff --git a/docs/getting-started/install/docker.md b/docs/getting-started/install/docker.md
deleted file mode 100644
index 51b12915..00000000
--- a/docs/getting-started/install/docker.md
+++ /dev/null
@@ -1,85 +0,0 @@
----
-title: 使用 Docker 部署
-description: 使用 Docker 单容器运行 Halo:镜像、端口映射与数据目录挂载要点。
----
-
-import DockerArgs from "./slots/_docker-args.md"
-import DockerRegistryList from "./slots/_docker-registry-list.md"
-
-:::info
-在继续操作之前,我们推荐您先阅读[《写在前面》](../prepare),这可以快速帮助你了解 Halo。
-:::
-
-:::warning
-此文档仅提供使用默认 H2 数据库的 Docker 运行方式,主要用于体验和测试,在生产环境我们不推荐使用 H2 数据库,这可能因为操作不当导致数据文件损坏。如果因为某些原因(如内存不足以运行独立数据库)必须要使用,建议按时[备份数据](../../user-guide/backup.md)。
-
-如果需要使用其他数据库部署,我们推荐使用 Docker Compose 部署:[使用 Docker Compose 部署](./docker-compose)
-:::
-
-## 环境搭建
-
-- Docker 安装文档:[https://docs.docker.com/engine/install/](https://docs.docker.com/engine/install/)
-
-## 部署 Halo
-
-### 镜像说明
-
-
-
-### 创建容器
-
-1. 创建容器
-
- ```bash
- docker run -it -d --name halo -p 8090:8090 -v ~/.halo2:/root/.halo2 -e JVM_OPTS="-Xmx256m -Xms256m" registry.fit2cloud.com/halo/halo-pro:2.26
- ```
-
- :::info
- 注意:此命令默认使用自带的 H2 Database 数据库。如需使用 PostgreSQL,请参考:[使用 Docker Compose 部署](./docker-compose)
- :::
-
- - **-it**:开启输入功能并连接伪终端
- - **-d**:后台运行容器
- - **--name**:为容器指定一个名称
- - **-p**:端口映射,格式为 `主机(宿主)端口:容器端口` ,可在 `application.yaml` 配置。
- - **-v**:工作目录映射。形式为:`-v 宿主机路径:/root/.halo2`,后者不能修改。
-
- 运行参数详解:
-
-
-
- :::info
- 为了保持部署流程的简洁,此文档仅提供了必要的配置示例,完整的配置选项列表可查阅:[配置说明](./config.md)
- :::
-
-2. 用浏览器访问 `/console` 即可进入 Halo 管理页面,首次启动会进入初始化页面。
-
- :::tip
- 如果需要配置域名访问,建议先配置好反向代理以及域名解析再进行初始化。如果通过 `http://ip:端口号` 的形式无法访问,请到服务器厂商后台将运行的端口号添加到安全组,如果服务器使用了 Linux 面板,请检查此 Linux 面板是否有还有安全组配置,需要同样将端口号添加到安全组。
- :::
-
-3. 激活许可证,可以参考 [许可证激活](../../user-guide/activate.md) 进行激活,社区版无需此步骤。
-
-## 升级 Halo
-
-1. 备份数据,可以参考 [备份与恢复](../../user-guide/backup.md) 进行完整备份(可选,但推荐备份)。
-2. 拉取新版本镜像
-
- ```bash
- docker pull registry.fit2cloud.com/halo/halo-pro:2.26
- ```
-
-3. 停止运行中的容器
-
- ```bash
- docker stop halo
- docker rm halo
- ```
-
-4. 更新 Halo
-
- 修改版本号后,按照最初安装的方式,重新创建容器即可。
-
- ```bash
- docker run -it -d --name halo -p 8090:8090 -v ~/.halo2:/root/.halo2 registry.fit2cloud.com/halo/halo-pro:2.26
- ```
diff --git a/docs/getting-started/install/helm.md b/docs/getting-started/install/helm.md
deleted file mode 100644
index d412b061..00000000
--- a/docs/getting-started/install/helm.md
+++ /dev/null
@@ -1,142 +0,0 @@
----
-title: 使用 Helm 部署
-description: 使用 Helm Chart 在 Kubernetes 集群中安装与升级 Halo 的说明。
----
-
-import DockerArgs from "./slots/_docker-args.md"
-
-:::info
-在继续操作之前,我们推荐您先阅读[《写在前面》](../prepare.md),这可以快速帮助你了解 Halo。
-:::
-
-## 先决条件
-
-1. 拥有可用的 1.19 或更高版本的 Kubernetes 集群
-2. 安装有 Helm 客户端 3.2 或更高的版本
-3. 指定 StorageClass 自动创建存储卷时需要底层存储驱动支持
-4. 用户对 Kubernetes 及 Helm 相关概念及如何使用有基本了解
-
-## 快速部署
-
-通过以下命令可以使用默认安装参数快速部署 Halo。默认参数下该 Chart 会自动部署 PostgreSQL 数据库给 Halo 使用,同时 Halo 工作目录及 PostgreSQL 数据目录通过指定 StorageClass 的方式自动创建存储卷进行持久化。
-
-```bash
-# 添加 Halo 项目的 Helm Charts 仓库
-helm repo add halo https://halo-sigs.github.io/charts/
-# 从 chart 仓库中更新本地可用chart的信息
-helm repo update
-# 使用默认参数,在当前的 Kubernetes namespace 中安装 Halo
-helm install halo halo/halo
-```
-
-命令执行成功后会返回类似下文中的提示,通过提示中的命令可以获取到 NodePort 方式的 Halo 访问地址及默认的控制台管理员用户名和密码。
-
-```bash
-NAME: halo
-LAST DEPLOYED: Sun Jun 25 15:49:53 2023
-NAMESPACE: halo
-STATUS: deployed
-REVISION: 1
-TEST SUITE: None
-NOTES:
-CHART NAME: halo
-CHART VERSION: 1.1.0
-APP VERSION: 2.6.1
-
-** Please be patient while the chart is being deployed **
-
-Your Halo site can be accessed through the following DNS name from within your cluster:
-
- halo.halo.svc.cluster.local (port 80)
-
-To access your Halo site from outside the cluster follow the steps below:
-
-1. Get the Halo URL by running these commands:
-
- export NODE_PORT=$(kubectl get --namespace halo -o jsonpath="{.spec.ports[0].nodePort}" services halo)
- export NODE_IP=$(kubectl get nodes --namespace halo -o jsonpath="{.items[0].status.addresses[0].address}")
- echo "Halo URL: http://$NODE_IP:$NODE_PORT/"
- echo "Halo Console URL: http://$NODE_IP:$NODE_PORT/console"
-
-2. Open a browser and access Halo using the obtained URL.
-
-3. Login with the following credentials below to see your site:
-
- echo Username: admin
- echo Password: $(kubectl get secret --namespace halo halo -o jsonpath="{.data.halo-password}" | base64 -d)
-```
-
-:::info[参数说明]
-
-- 使用 Halo Helm Chart 仓库中 [values.yaml](https://github.com/halo-sigs/charts/blob/main/charts/halo/values.yaml) 文件中的默认参数进行安装;
-- 关于 PostgreSQL 数据库的更多参数说明,请参考 [Bitnami PostgreSQL Chart](https://github.com/bitnami/charts/tree/main/bitnami/postgresql#parameters),在原有参数格式上增加 `postgresql.` 前缀即可。
-:::
-
-## 卸载
-
-使用命令 `helm uninstall halo` 可卸载已安装的 Halo 应用,其中 `halo` 为安装时指定的 Halo 应用名称。
-
-:::warning
-卸载应用前请确认数据库及 Halo 工作空间中的文件已进行备份或不再需要。
-:::
-
-## 使用 MySQL 数据库
-
-当用户希望使用 MySQL 数据库而非默认的 PostgreSQL 数据库时,可以参考以下命令进行部署。
-
-```bash
-helm install halo halo/halo --set mysql.enabled=true --set postgresql.enabled=false
-```
-
-:::info[参数说明]
-
-- `mysql.enabled=true`:自动安装 MySQL 数据库;
-- `postgresql.enabled=false`:不自动安装 PostgreSQL 数据库;
-- 关于 mysql 的更多参数说明,请参考 [Bitnami MySQL Chart](https://github.com/bitnami/charts/tree/main/bitnami/mysql#parameters),在原有参数格式上增加 `mysql.` 前缀即可。
-:::
-
-## 使用已有的数据库
-
-当用户希望使用已有的数据库而非自动安装新数据库时,可以参考以下命令进行部署。
-
-```bash
-helm install halo halo/halo \
- --set mysql.enabled=false \
- --set postgresql.enabled=false \
- --set externalDatabase.platform=mysql \
- --set externalDatabase.host=mysql \
- --set externalDatabase.port=3306 \
- --set externalDatabase.user=halo \
- --set externalDatabase.password=0P0gJrCyzz \
- --set externalDatabase.database=halo
-```
-
-:::info[参数说明]
-
-- `mysql.enabled=true`:不自动安装 MySQL 数据库;
-- `postgresql.enabled=false`:不自动安装 PostgreSQL 数据库;
-- `externalDatabase.platform=mysql`:外部数据库类型,例如 `postgresql`、`mysql`;
-- `externalDatabase.host=mysql`:外部数据库连接地址;
-- `externalDatabase.port=3306`:外部数据库连接端口;
-- `externalDatabase.user=halo`:外部数据库用户名;
-- `externalDatabase.password=0P0gJrCyzz`:外部数据库密码;
-- `externalDatabase.database=halo`:外部数据库库名;
-:::
-
-## 创建 Ingress
-
-当用户希望通过 Ingress 将 Halo 应用暴露到 Kubernetes 集群外进行访问时,可以参考以下安装参数。
-
-```bash
-helm install halo halo/halo --set ingress.enabled=true --set ingress.hostname=demo.halo.run
-```
-
-对于已有的 Halo 应用,可以通过如下命令更新应用参数,为 Halo 应用创建 Ingress。
-
-```bash
-helm upgrade halo halo/halo --set ingress.enabled=true --set ingress.hostname=demo.halo.run
-```
-
-## 其他参数
-
-完整参数列表请参考 Halo 项目的 [Helm Chart 仓库](https://github.com/halo-sigs/charts#parameters)。
diff --git a/docs/getting-started/install/jar-file.md b/docs/getting-started/install/jar-file.md
deleted file mode 100644
index be633501..00000000
--- a/docs/getting-started/install/jar-file.md
+++ /dev/null
@@ -1,312 +0,0 @@
----
-title: 使用 JAR 文件部署
-description: 使用 JAR 与 Java 运行 Halo:数据库要求、启动参数与生产环境建议。
----
-
-:::info
-在继续操作之前,我们推荐您先阅读[《写在前面》](../prepare.md),这可以快速帮助你了解 Halo。
-:::
-
-## 依赖检查
-
-在开始之前,需要确保服务器已经满足以下条件:
-
-1. [Java](https://openjdk.org) 环境,版本要求:
- - 2.21 以上版本:**JRE 21**
- - 2.20 及以下版本:**JRE 17**
-2. 数据库(任一)
- - [MySQL 5.7+](https://www.mysql.com)
- - [MariaDB](https://mariadb.org)
- - [PostgreSQL](https://www.postgresql.org)
-
-由于 Linux 发行版本的差异以及包管理器的不同,此文档不会涉及到如何安装 Java 环境以及数据库,建议查阅对应依赖的官方文档进行安装。
-
-## 安装
-
-1. 创建新的系统用户
-
- :::info
- 我们不推荐直接使用系统 root 用户来运行 Halo。如果你需要直接使用 root 用户,请跳过这一步。
- :::
-
- 创建一个名为 halo 的用户(名字可以随意)
-
- ```bash
- useradd -m halo
- ```
-
- 为 halo 用户创建密码
-
- ```bash
- passwd halo
- ```
-
- 登录到 halo 账户
-
- ```bash
- su - halo
- ```
-
-2. 创建存放运行包的目录,这里以 `~/app` 为例
-
- ```bash
- mkdir ~/app && cd ~/app
- ```
-
-3. 下载运行包
-
- :::info
- Halo 主要区分为[社区版和付费版](../prepare.md#发行版本),这两个版本使用不同的 JAR 文件,以下是 JAR 文件下载地址:
- 1. [https://download.halo.run](https://download.halo.run)
- 2. [GitHub Releases(社区版)](https://github.com/halo-dev/halo/releases)
-
- 后续文档将使用 `halo-pro-.jar` 为例,如果需要使用社区版,将 `halo-pro` 改为 `halo` 即可。
- :::
-
- ```bash
- wget https://dl.halo.run/release/halo-pro-2.26.0.jar -O halo.jar
- ```
-
-4. 创建 [工作目录](../prepare#工作目录)
-
- ```bash
- mkdir ~/.halo2 && cd ~/.halo2
- ```
-
-5. 创建 Halo 配置文件
-
- ```bash
- vim application.yaml
- ```
-
- 将以下内容复制到 `application.yaml` 中,根据下面的配置说明进行配置。
-
- ```yaml title="application.yaml"
- server:
- # 运行端口
- port: 8090
- spring:
- # 数据库配置,支持 MySQL、MariaDB、PostgreSQL、H2 Database,具体配置方式可以参考下面的数据库配置
- r2dbc:
- url: r2dbc:h2:file:///${halo.work-dir}/db/halo-next?MODE=MySQL&DB_CLOSE_ON_EXIT=FALSE
- username: admin
- password: 123456
- sql:
- init:
- mode: always
- # 需要配合 r2dbc 的配置进行改动
- platform: h2
- halo:
- # 工作目录位置
- work-dir: ${user.home}/.halo2
- # 外部访问地址
- external-url: http://localhost:8090
- # 附件映射配置,通常用于迁移场景
- attachment:
- resource-mappings:
- - pathPattern: /upload/**
- locations:
- - migrate-from-1.x
- ```
-
- 数据库配置说明:
-
- | 参数名 | 描述 |
- | -------------------------- | --------------------------------------------------------------------- |
- | `spring.r2dbc.url` | 数据库连接地址,详细可查阅下方的 `配置对应关系` |
- | `spring.r2dbc.username` | 数据库用户名 |
- | `spring.r2dbc.password` | 数据库密码 |
- | `spring.sql.init.platform` | 数据库平台名称,支持 `postgresql`、`mysql`、`mariadb`、`h2` |
-
- 配置对应关系:
-
- | 链接方式 | 链接地址格式 | `spring.sql.init.platform` |
- | ------------------ | ---------------------------------------------------------------------------------- | -------------------------- |
- | PostgreSQL(推荐) | `r2dbc:pool:postgresql://{HOST}:{PORT}/{DATABASE}` | postgresql |
- | MySQL | `r2dbc:pool:mysql://{HOST}:{PORT}/{DATABASE}` | mysql |
- | MariaDB | `r2dbc:pool:mariadb://{HOST}:{PORT}/{DATABASE}` | mariadb |
- | H2 Database | `r2dbc:h2:file:///${halo.work-dir}/db/halo-next?MODE=MySQL&DB_CLOSE_ON_EXIT=FALSE` | h2 |
-
- :::info
- - HOST:数据库服务地址,如 `localhost`
- - PORT:数据库服务端口,如 `3306`
- - DATABASE:数据库名称,如 `halo`,需要提前创建,以 MySQL 为例:
-
- ```sql
- create database halo character set utf8mb4 collate utf8mb4_bin;
- ```
-
- :::
-
- :::warning
- 不推荐在生产环境使用默认的 H2 数据库,这可能因为操作不当导致数据文件损坏。如果因为某些原因(如内存不足以运行独立数据库)必须要使用,建议按时[备份数据](../../user-guide/backup.md)。
- :::
-
- :::info
- 为了保持部署流程的简洁,此文档仅提供了必要的配置示例,完整的配置选项列表可查阅:[配置说明](./config.md)
- :::
-
- 配置完成之后,保存即可。
-
-6. 测试运行 Halo
-
- ```bash
- cd ~/app && java -Dfile.encoding=UTF-8 -jar halo.jar --spring.config.additional-location=optional:file:$HOME/.halo2/
- ```
-
- :::tip
- 如果指定了其他工作目录,请将 `$HOME/.halo2/` 替换为相应的绝对路径,并确保路径末尾带有 `/`。
- :::
-
-7. 如果没有观察到异常日志,即可尝试访问 Halo
-
- 打开 `http://ip:端口号` 即可跳转到初始化页面。
-
- :::info
- 如测试启动正常,请继续看[作为服务运行](#作为服务运行)部分,第 8 步仅仅作为测试。当你关闭 ssh 连接之后,服务会停止。你可使用 CTRL+C 停止运行测试进程。
- :::
-
- :::tip
- 如果需要配置域名访问,建议先配置好反向代理以及域名解析再进行初始化。如果通过 `http://ip:端口号` 的形式无法访问,请到服务器厂商后台将运行的端口号添加到安全组,如果服务器使用了 Linux 面板,请检查此 Linux 面板是否有还有安全组配置,需要同样将端口号添加到安全组。
- :::
-
-8. 激活许可证,可以参考 [许可证激活](../../user-guide/activate.md) 进行激活,社区版无需此步骤。
-
-## 作为服务运行
-
-下面将介绍如何将 Halo 作为服务运行,以实现在关闭 ssh 连接后,Halo 仍然可以正常运行。
-
-此文档以 Systemd 为例,也可以参考:[Installing Spring Boot Applications](https://docs.spring.io/spring-boot/docs/current/reference/html/deployment.html#deployment.installing)
-
-1. 退出 halo 账户,登录到 root 账户
-
- > 如果当前就是 root 账户,请略过此步骤。
-
- ```bash
- exit
- ```
-
-2. 创建 halo.service 文件
-
- ```bash
- vim /etc/systemd/system/halo.service
- ```
-
- 将以下内容复制到 `halo.service` 中,根据下面的配置说明进行配置。
-
- ```ini {9,10} title="/etc/systemd/system/halo.service"
- [Unit]
- Description=Halo Service
- Documentation=https://docs.halo.run
- After=network-online.target
- Wants=network-online.target
-
- [Service]
- Type=simple
- User=USER
- ExecStart=/usr/bin/java -Dfile.encoding=UTF-8 -server -Xms256m -Xmx256m -jar JAR_PATH --spring.config.additional-location=optional:file:/home/halo/.halo2/
- ExecStop=/bin/kill -s QUIT $MAINPID
- Restart=always
- StandardOutput=syslog
- StandardError=inherit
-
- [Install]
- WantedBy=multi-user.target
- ```
-
- - **JAR_PATH**:Halo 运行包的绝对路径,例如 `/home/halo/app/halo.jar`,注意:此路径不支持 `~` 符号。
- - **USER**:运行 Halo 的系统用户,如果有按照上方教程创建新的用户来运行 Halo,修改为你创建的用户名称即可。反之请删除 `User=USER`。
-
- :::tip
- 请确保 `/usr/bin/java` 是正确无误的。建议将 `ExecStart` 中的命令复制出来运行一下,保证命令有效。如果指定了其他工作目录,请像上面一样改动。
- :::
-
- 配置完成之后,保存即可。
-
-3. 重新加载 systemd
-
- ```bash
- systemctl daemon-reload
- ```
-
-4. 运行服务
-
- ```bash
- systemctl start halo
- ```
-
-5. 在系统启动时启动服务
-
- ```bash
- systemctl enable halo
- ```
-
-最后,你可以通过下面的命令查看服务日志:
-
-```bash
-journalctl -n 20 -u halo
-```
-
-## 版本升级
-
-1. 备份数据,可以参考 [备份与恢复](../../user-guide/backup.md) 进行完整备份(可选,但推荐备份)。
-2. 停止 Halo 服务
-
- ```bash
- service halo stop
- ```
-
-3. 下载新版本的 Halo 运行包,覆盖原有的运行包
-
- ```bash
- wget https://dl.halo.run/release/halo-pro-2.26.0.jar -O /home/halo/app/halo.jar
- ```
-
- :::info
- 以下是官方维护的下载地址:
- 1. [https://download.halo.run](https://download.halo.run)
- 2. [GitHub Releases(社区版)](https://github.com/halo-dev/halo/releases)
- :::
-
-4. 启动 Halo 服务
-
- ```bash
- service halo start
- ```
-
-## 反向代理
-
-你可以在下面的反向代理软件中任选一项,我们假设你已经安装好了其中一项,并对其的基本操作有一定了解。如果你对它们没有任何了解,可以参考我们更为详细的反向代理文档:
-
-1. 使用 [Nginx Proxy Manager](../install/other/nginxproxymanager.md)
-
-### Nginx
-
-```nginx {2,7,10}
-upstream halo {
- server 127.0.0.1:8090;
-}
-server {
- listen 80;
- listen [::]:80;
- server_name www.yourdomain.com;
- client_max_body_size 1024m;
- location / {
- proxy_pass http://halo;
- proxy_set_header HOST $host;
- proxy_set_header X-Forwarded-Proto $scheme;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- }
-}
-```
-
-### Caddy 2
-
-```txt {1,5}
-www.yourdomain.com
-
-encode gzip
-
-reverse_proxy 127.0.0.1:8090
-```
diff --git a/docs/getting-started/install/offline.md b/docs/getting-started/install/offline.md
deleted file mode 100644
index 8780c1ab..00000000
--- a/docs/getting-started/install/offline.md
+++ /dev/null
@@ -1,106 +0,0 @@
----
-title: 使用离线包部署
-description: 在无公网或受限网络环境使用离线包部署 Halo 的步骤说明。
----
-
-import DockerArgs from "./slots/_docker-args.md"
-import DockerRegistryList from "./slots/_docker-registry-list.md"
-
-:::info
-在继续操作之前,我们推荐您先阅读[《写在前面》](../prepare.md),这可以快速帮助你了解 Halo。
-:::
-
-Halo 离线安装包使用 Docker + Docker Compose 的方式部署 Halo 及其他服务,安装包中内置了 Docker 程序和容器镜像文件,可以帮助用户在无法访问互联网的服务器上,完成 Halo 的安装部署。
-
-## 下载安装包
-
-请自行前往[飞致云开源社区](https://community.fit2cloud.com/#/products/halo/downloads)下载 Halo 最新版本的安装包,并复制到目标机器的 /tmp 目录下。
-
-## 安装部署
-
-### 解压安装包
-
-以 root 用户 ssh 登录到目标机器,并执行如下命令:
-
-```bash
-cd /tmp
-# 解压安装包(halo-offline-installer-v2.17.0-amd64.tar.gz 为示例安装包名称,操作时可根据实际安装包名称替换)
-tar zxvf halo-offline-installer-v2.17.0-amd64.tar.gz
-```
-
-:::info
-安装包目录说明
-
-```bash
-[root@localhost halo-offline-installer-v2.17.0-amd64]# tree
-.
-├── docker # 离线安装 Docker 使用到的文件
-│ ├── bin
-│ │ ├── containerd
-│ │ ├── containerd-shim-runc-v2
-│ │ ├── ctr
-│ │ ├── docker
-│ │ ├── docker-compose
-│ │ ├── dockerd
-│ │ ├── docker-init
-│ │ ├── docker-proxy
-│ │ └── runc
-│ └── service
-│ └── docker.service
-├── docker-compose.yaml # 包含 Halo 及数据库服务的 Docker Compose 文件
-├── .env # Docker Compose 文件使用的变量声明文件,部分参数从该文件中读取
-├── images # Halo 及数据库的容器镜像文件
-│ ├── halo.tar.gz
-│ ├── mysql.tar.gz
-│ └── postgres.tar.gz
-├── install.sh # 安装脚本
-├── LICENSE
-└── README.md
-```
-
-:::
-
-### 执行安装脚本
-
-```bash
-# 进入安装包目录(halo-offline-installer-v2.17.0-amd64 为示例安装包目录名称,操作时可根据实际安装包名称替换)
-cd halo-offline-installer-v2.17.0-amd64
-
-# 运行安装脚本
-/bin/bash install.sh
-```
-
-根据脚本给出的提示,输入安装目录、服务端口、数据库信息等相关配置信息,等待脚本执行完成。
-
-:::info
-假设采用默认安装位置 /opt/halo 完成安装,安装目录的文件结构如下:
-
-```bash
-[root@meter-prototype halo]# tree
-.
-├── data # 数据存储目录
-│ ├── db # 数据库数据存储目录,挂载至数据库容器
-│ └── halo # Halo 数据存储目录,挂载至 Halo 容器
-│ ├── indices
-│ ├── keys
-│ ├── logs
-│ ├── plugins
-│ └── themes
-├── docker-compose.yaml # Docker Compose 文件
-├── .env # Docker Compose 文件使用的变量声明文件,部分参数从该文件中读取
-├── install.log # 安装脚本日志文件
-├── LICENSE
-└── README.md
-```
-
-安装完成后,可以直接进入 /opt/halo 目录,使用 docker-compose 命令完成后续维护操作,也可以修改 docker-compose.yaml 中的相关配置满足不同需求。
-
-运行参数详解:
-
-
-
-:::
-
-### 登录访问
-
-用浏览器访问 /console 即可进入 Halo 管理页面,首次启动会进入初始化页面。
diff --git a/docs/getting-started/install/other/nginxproxymanager.md b/docs/getting-started/install/other/nginxproxymanager.md
deleted file mode 100644
index 046dceff..00000000
--- a/docs/getting-started/install/other/nginxproxymanager.md
+++ /dev/null
@@ -1,244 +0,0 @@
----
-title: Nginx Proxy Manager 反向代理
-description: 使用 Nginx Proxy Manager 为 Halo 配置域名转发与 SSL 证书说明。
----
-
-## Halo 部署
-
-参见 [使用 Docker Compose 部署](../docker-compose)
-
-:::info
-`「反向代理」` 部分不进行操作,保证 Halo 服务运行无误即可。
-:::
-
-## 简介
-
-Nginx Proxy Manager 是一个可视化的 Nginx 反向代理管理器,支持在 Web UI 上管理反向代理的网站,支持申请免费的 SSL 证书并自动续签。
-
-接下来会介绍如何使用 Nginx Proxy Manager 来反向代理 Halo,以下的 Nginx 安装方式均来自于 [Nginx Proxy Manager 官方文档](https://nginxproxymanager.com/guide/)。在开始之前,建议先阅读一遍官方文档,需要对其有一定的了解。
-
-## 说明
-
-- 此文档需要对 Docker 和 Docker Compose 有一定的熟悉程度,并且已经提前在服务器上安装
-- 在安装 Nginx Proxy Manager 之前,需要确保服务器没有其他占用了 80 和 443 端口的服务
-- 需要对 Vim 有一定的熟悉程度
-- 下文使用 NPM 简称 Nginx Proxy Manager
-
-## 安装 Nginx Proxy Manager
-
-首先,我们创建一个文件夹来存放 NPM 的 `docker-compose.yml` 文件:
-
-```bash
-mkdir npm && cd npm
-vim docker-compose.yml
-```
-
-将下面的内容复制到 `docker-compose.yml` 文件:
-
-```yaml
-services:
- npm:
- image: 'jc21/nginx-proxy-manager:latest'
- networks:
- - npm
- restart: unless-stopped
- ports:
- - '80:80' # Nginx 的 80 端口
- - '443:443' # Nginx 的 443 端口
- - '81:81' # Nginx Proxy Manager 的管理端口
- volumes:
- - ./data:/data
- - ./letsencrypt:/etc/letsencrypt
-
-# 定义网络以便 NPM 与其他容器通信
-networks:
- npm:
- name: npm
- attachable: true
-```
-
-:::info
-配置中提到的 80、443、81 端口需要提前在服务器提供商开放端口。
-:::
-
-启动 NPM:
-
-```bash
-docker compose up -d
-```
-
-在服务正常启动的情况下,现在已经可以通过 `http://{服务器公网 IP}:81` 访问 NPM 的网页端了。
-
-:::info
-如果无法通过端口访问到 NPM,可以检查是否在服务器提供商开放了 `81` 端口。
-:::
-
-
-
-首次进入页面会提示创建管理员账户,需要注意的是:**邮箱一定要是合法邮箱,后续涉及到 SSL 证书签发**。
-
-至此,我们已经完成了 Nginx Proxy Manager 的搭建,之后就可以用它给我们的 Halo 或者其他 Web 应用做反向代理了。
-
-## 配置 Halo 的反向代理
-
-1. 配置 Halo 的 Docker 编排,需要将 `npm` 的网络加入到 Halo 的容器,之后就可以使用 Halo 的服务名作为 `hostname` 在 NPM 的内部进行反向代理了。
-
- ```yaml {3-5,16-17}
- # 省略
- networks:
- # 加入 npm 网络
- npm:
- external: true
- halo:
-
- services:
- halo:
- image: registry.fit2cloud.com/halo/halo-pro:2.26
- container_name: halo
- restart: on-failure:3
- volumes:
- - ./halo2:/root/.halo2
- networks:
- # 加入 npm 网络
- - npm
- - halo
- # 省略
- ```
-
- 配置完成之后,需要使用 `docker compose up -d` 命令重建 Halo 容器。
-2. 进入 NPM 仪表盘,点击代理服务进入代理服务配置页面。
-
- 
-3. 添加代理配置
-
- 
-
- 1. **域名**:配置想要代理到 Halo 的域名,需要提前在域名服务商解析到当前服务器
- 2. **协议**:选择 http
- 3. **转发主机名 / IP**:填写 Halo 容器的服务名,比如上方示例中的 `halo`
- 4. **转发端口**:8090
-
- 以上配置为必须修改,界面中的其他配置可以按需选择,但其中的**缓存资源**不建议打开,可能不会完全遵守 Halo 的缓存策略。
-
- 配置完成之后,就可以尝试访问域名。
-4. 配置 SSL,点击 SSL 选项卡,勾选 **申请新证书** 之后保存即可,同时建议勾选 **强制 SSL**,这样在访问 http 协议的地址时会自动跳转到 https 协议的地址。
-
- 
-
-至此,我们已经完成了在 Nginx Proxy Manager 配置 Halo 反向代理并添加 SSL 证书的全过程。
-
-## 进阶配置:性能与安全(可选)
-
-前文已完成基础反向代理与 SSL,对大多数博客已经够用。本节介绍在 NPM 中追加性能优化与安全响应头配置,两个目标:
-
-- **性能**:让 JavaScript、字体、JSON 等静态资源也参与 gzip 压缩;调大 proxy buffer 避免响应落盘
-- **安全**:补齐 [securityheaders.com](https://securityheaders.com) 认可的安全响应头,默认可拿到 A 评级
-
-:::info
-本节所有配置均为反代层通用优化,与具体主题无关,适用于任何 Halo 实例。
-:::
-
-### 在 NPM 中找到自定义配置入口
-
-1. 进入 NPM 仪表盘,在 Hosts → Proxy Hosts 点开 Halo 的代理记录进行编辑
-2. 切换到 **Advanced** 标签页
-3. 把下面的内容粘贴到 **Custom Nginx Configuration** 文本框
-4. 保存后 NPM 会自动 reload nginx,无需重建容器
-
-### 推荐的自定义配置
-
-```nginx
-# ---- gzip 压缩:补齐 NPM 默认未覆盖的 JS、字体、JSON 等 MIME 类型 ----
-gzip on;
-gzip_vary on;
-gzip_proxied any;
-gzip_comp_level 6;
-gzip_min_length 1024;
-gzip_types
- text/css
- text/javascript
- application/javascript
- application/x-javascript
- application/json
- application/xml
- application/rss+xml
- application/atom+xml
- image/svg+xml
- font/ttf
- font/otf
- font/woff
- font/woff2;
-# 若目录下存在 .gz 预压缩文件则优先使用
-gzip_static on;
-
-# ---- proxy buffer:避免较大响应被临时写入磁盘 ----
-proxy_buffers 16 32k;
-proxy_buffer_size 64k;
-proxy_busy_buffers_size 128k;
-
-# ---- 安全响应头:加 always 确保错误页也会返回 ----
-add_header X-Content-Type-Options "nosniff" always;
-add_header X-Frame-Options "SAMEORIGIN" always;
-add_header X-XSS-Protection "1; mode=block" always;
-add_header Referrer-Policy "strict-origin-when-cross-origin" always;
-add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;
-# HSTS 请在确认 HTTPS 稳定运行后再启用,见下文说明
-# add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
-
-# ---- RSS 路径别名:Halo 默认 RSS 为 /rss.xml ----
-rewrite ^/rss$ /rss.xml permanent;
-rewrite ^/feed$ /rss.xml permanent;
-```
-
-:::tip
-`gzip_types` 不要再列 `text/html`,nginx 默认已经对其启用 gzip,重复声明会产生 `duplicate MIME type` 警告。
-:::
-
-### 关于 HSTS
-
-`Strict-Transport-Security` 会告诉浏览器未来只能通过 HTTPS 访问当前域名。一旦启用且 `max-age` 较长,浏览器会缓存该策略直到过期,期间无法回退到 HTTP。因此建议:
-
-- 在 HTTPS 证书可正常续签、基础设施稳定运行 1–2 周后再启用
-- 先从 `max-age=300`(5 分钟)起步验证,确认无误再逐步调大到 `63072000`(2 年)
-- `preload` 表示提交到浏览器内置 HSTS 列表,**提交后撤销非常困难**,确有必要再加
-
-### 验证配置是否生效
-
-```bash
-# 查看安全响应头
-curl -I https://your-halo-domain.example.com/ \
- | grep -iE "x-content-type|x-frame|x-xss|referrer-policy|permissions-policy"
-
-# 检查 JavaScript 是否启用了 gzip
-curl -IH "Accept-Encoding: gzip" \
- https://your-halo-domain.example.com/themes//source/main.js \
- | grep -i content-encoding
-```
-
-浏览器侧也可以在 DevTools → Network → Response Headers 中确认。
-
-### 常见问题
-
-#### 能拿到 securityheaders.com A+ 吗?
-
-上面的配置能稳定拿到 **A 评级**。追求 **A+** 的硬指标是配置 `Content-Security-Policy`(CSP),在博客场景下收益较低:
-
-- 多数 Halo 主题依赖若干第三方 CDN(字体、评论系统、统计、表情等),每个都需要加入 CSP 白名单
-- 主题模板中常见内联脚本,需使用 `'unsafe-inline'`(会明显削弱 CSP 的价值)或改造为 nonce 模式
-- 管理后台「代码注入」功能注入的脚本同样受 CSP 约束,白名单收敛难度较高
-
-如确有 A+ 需求,建议按以下路径落地:
-
-1. 先使用 `Content-Security-Policy-Report-Only`,不阻断页面,仅在浏览器控制台打印违规
-2. 观察 1–2 周,根据 violation 报告收敛白名单
-3. 白名单稳定后再转为生产 `Content-Security-Policy`
-
-作为参考,GitHub 本身的 securityheaders.com 评级也是 A,对博客类站点而言 A 已足够。
-
-#### NPM 界面中的「缓存资源」开关要开启吗?
-
-建议保持关闭。Halo 自身已通过 `ETag`、`Last-Modified` 等机制对静态资源提供合理的缓存策略,NPM 层再叠一层缓存可能导致主题升级或资源替换后不能立即生效。性能提升主要来自本节的 gzip 与 proxy buffer 优化。
-
-#### 为什么要调大 proxy buffer?
-
-NPM 默认的 proxy buffer 较小,当 Halo 返回的响应体超过 buffer 总量时,nginx 会把剩余数据临时写入磁盘后再转发。调大到 `16 32k`(共 512 KB)能覆盖绝大多数 HTML/JSON 响应,避免磁盘 I/O 成为瓶颈。
diff --git a/docs/getting-started/install/other/traefik.md b/docs/getting-started/install/other/traefik.md
deleted file mode 100644
index 912b74b4..00000000
--- a/docs/getting-started/install/other/traefik.md
+++ /dev/null
@@ -1,117 +0,0 @@
----
-title: Traefik 反向代理
-description: Traefik 为 Halo 提供反向代理与 HTTPS 的路由与证书配置说明。
----
-
-## Halo 部署
-
-参见 [使用 Docker Compose 部署](../docker-compose.md)
-
-:::info
-`「反向代理」` 部分不进行操作,保证 Halo 服务运行无误即可。
-:::
-
-## 简介
-
-[Traefik](https://traefik.io/traefik/) 是一款开源的反向代理与负载均衡工具,它监听后端的变化并自动更新服务配置。
-
-它与传统反向代理最大的区别,是支持声明式的动态路由规则,大大简化网关规则的配置。而且还有诸多实用特性,例如:健康检查、多实例负载均衡、能够实现 Let's Encrypt 证书的自动签发、验证与续期等等。
-
-## 创建 Traefik
-
-下面的配置中,创建了 Traefik 实例。并且做了基础的几项配置:
-
-1. 监听了宿主机的 80、443 端口,并自动将 80 端口的请求重定向到 443 端口。[文档](https://doc.traefik.io/traefik/routing/entrypoints/)
-2. 开启 Docker 服务发现,监听检测 Docker 容器声明的服务关系。[文档](https://doc.traefik.io/traefik/providers/docker/#provider-configuration)
-3. 开启 Traefik Dashboard,建议使用二级域名的形式(示例:`traefik.yourdomain.com`)。[文档](https://doc.traefik.io/traefik/operations/dashboard/#dashboard-router-rule)
-4. 开启证书自动生成,通过 ACME 自动管理 TLS 证书的申请、校验与续期。[文档](https://doc.traefik.io/traefik/https/acme/)
-
-:::warning
-ACME 证书 (`/acme.json`) 一定要 [持久化](https://doc.traefik.io/traefik/https/acme/#storage),否则每次重启 Traefik 服务,都会去申请签发证书。可能会触发 Let's
-Encrypt 的 [速率限制](https://letsencrypt.org/zh-cn/docs/rate-limits/),导致签名的域名一段时间内无法签发新的证书。
-:::
-
-```yaml {19,31,35,41} showLineNumbers
-version: "3.8"
-
-networks:
- traefik:
- name: traefik
- attachable: true
-
-services:
- traefik:
- image: traefik:v2.9
- container_name: traefik
- networks:
- - traefik
- ports:
- - "80:80"
- - "443:443"
- volumes:
- - /var/run/docker.sock:/var/run/docker.sock
- - ./acme.json:/acme.json
- command: >
- --api.dashboard=true
- --entrypoints.web.address=:80
- --entrypoints.websecure.address=:443
- --entrypoints.web.http.redirections.entrypoint.to=websecure
- --entrypoints.web.http.redirections.entrypoint.scheme=https
- --providers.docker=true
- --providers.docker.endpoint=unix:///var/run/docker.sock
- --providers.docker.watch=true
- --providers.docker.exposedByDefault=false
- --certificatesResolvers.myresolver.acme.httpChallenge.entryPoint=web
- --certificatesresolvers.myresolver.acme.email=your-mail@mail.com
- labels:
- traefik.enable: "true"
- traefik.docker.network: traefik
- traefik.http.routers.dashboard.rule: Host(`traefik.yourdomain.com`)
- traefik.http.routers.dashboard.tls: "true"
- traefik.http.routers.dashboard.tls.certresolver: myresolver
- traefik.http.routers.dashboard.service: "api@internal"
- traefik.http.routers.dashboard.middlewares: auth
- # 账号密码 admin/P@88w0rd 生成 echo $(htpasswd -nb user password) | sed -e s/\\$/\\$\\$/g
- traefik.http.middlewares.auth.basicauth.users: "admin:$$apr1$$q8q0qpzT$$lvzMP7VYd9EUcG/wkIsAN."
-```
-
-## 配置 Halo 的反向代理
-
-这里以最简配置(h2 数据库)Halo 服务的 Docker 配置举例。只需做以下调整:
-
-1. 顶层 `networks` 中添加了外部网络 `traefik`
-2. `services.halo.networks` 中添加了 `traefik` 网络
-3. `services.halo.labels` 中声明了 Traefik 配置
- 1. 路由规则为 `yourdomain.com`
- 2. 开启 TLS
- 3. 指定了服务端口为 8090
-
-```yaml {4-5,16,20,25-31} showLineNumbers
-version: "3.8"
-
-networks:
- traefik:
- external: true
- halo:
-
-services:
- halo:
- image: registry.fit2cloud.com/halo/halo-pro:2.26
- container_name: halo
- restart: on-failure:3
- volumes:
- - ./halo2:/root/.halo2
- networks:
- - traefik
- - halo
- command:
- # 外部访问地址,请根据实际需要修改
- - --halo.external-url=https://yourdomain.com
- labels:
- traefik.enable: "true"
- traefik.docker.network: traefik
- traefik.http.routers.halo.rule: Host(`yourdomain.com`)
- traefik.http.routers.halo.tls: "true"
- traefik.http.routers.halo.tls.certresolver: myresolver
- traefik.http.services.halo.loadbalancer.server.port: 8090
-```
diff --git a/docs/getting-started/install/podman.md b/docs/getting-started/install/podman.md
deleted file mode 100644
index 975e3f1f..00000000
--- a/docs/getting-started/install/podman.md
+++ /dev/null
@@ -1,234 +0,0 @@
----
-title: 使用 Podman 部署
-description: 使用 Podman 运行 Halo:与 Docker 类似的容器部署与持久化说明。
----
-
-import DockerArgs from "./slots/_docker-args.md"
-import DockerRegistryList from "./slots/_docker-registry-list.md"
-
-## 前言
-
-:::info
-在继续操作之前,我们推荐您先阅读[《写在前面》](../prepare),这可以快速帮助你了解 Halo。
-:::
-
-:::info
-什么是 Podman ?
-
-Podman(全称 POD 管理器)是一款用于在 Linux® 系统上开发、管理和运行容器的开源工具。Podman 最初由红帽® 工程师联合开源社区一同开发,它可利用 lipod 库来管理整个容器生态系统。
-Podman 采用无守护进程的包容性架构,因此可以更安全、更简单地进行容器管理,再加上 Buildah 和 Skopeo 等与之配套的工具和功能,开发人员能够按照自身需求来量身定制容器环境。
-
-为什么选择 Podman 而不是 Docker ?
-
-这个需要视情况而定,如果您的主机配置不是很高,您使用 Docker 时,因为 Docker 自带的守护进程可能会雪上加霜,它会大量占用您的资源。
-而 Podman 采用无守护进程架构,而且容器是无根模式,您可以在占用资源极小的情况下运行镜像,并且获得很高的安全性。
-而且 Podman 与 Docker 高度兼容,您不需要做特别配置即可将 Docker 容器运行在 Podman 上。
-
-[什么是 Podman?](https://www.redhat.com/zh/topics/containers/what-is-podman)
-
-[Podman ArchWiki](https://wiki.archlinux.org/title/Podman)
-
-[Podman 官网](https://podman.io/)
-:::
-
-:::tip
-此文档提供使用默认 H2 数据库和 Postgresql 数据库的 Podman 运行示例,在生产环境我们不推荐使用 H2 数据库。
-:::
-
-## 环境搭建
-
-- Podman 安装文档:[https://podman.io/docs/installation](https://podman.io/docs/installation)
-
-:::tip
-我们推荐您先阅读 Podman 官方文档对 Podman 有了相关了解后,再考虑通过 Linux 包管理系统安装 Podman 或者使用文档中指定的方式安装。
-:::
-
-## 部署 Halo
-
-:::tip
-为什么是 Docker 镜像?
-
-通过[前言](#前言)我们已经了解了 Podman,其中提到 ***Podman 与 Docker 高度兼容*** ,正是因为 Podman 完全是为了替代 Docker 而诞生,所以原本的 Docker 生态中的镜像我们可以无需更改直接使用。
-:::
-
-### 镜像说明
-
-
-
-### 创建容器
-
-1. 创建容器
-
- ```bash
- mkdir -p ~/.halo2
- podman run -it -d --name halo -p 8090:8090 -v ~/.halo2:/root/.halo2 registry.fit2cloud.com/halo/halo-pro:2.26
- ```
-
- :::info
- 注意:此命令默认使用自带的 H2 Database 数据库。如需使用 PostgreSQL,请参考:[使用 Docker Compose 部署](./docker-compose)
- :::
-
- - **-it**:开启输入功能并连接伪终端
- - **-d**:后台运行容器
- - **--name**:为容器指定一个名称
- - **-p**:端口映射,格式为 `主机(宿主)端口:容器端口` ,可在 `application.yaml` 配置。
- - **-v**:工作目录映射。形式为:`-v 宿主机路径:/root/.halo2`,后者不能修改。
-
- 运行参数详解:
-
-
-
- :::info
- 为了保持部署流程的简洁,此文档仅提供了必要的配置示例,完整的配置选项列表可查阅:[配置说明](./config.md)
- :::
-
-2. 用浏览器访问 `/console` 即可进入 Halo 管理页面,首次启动会进入初始化页面。
-
- :::tip
- 如果需要配置域名访问,建议先配置好反向代理以及域名解析再进行初始化。如果通过 `http://ip:端口号` 的形式无法访问,请到服务器厂商后台将运行的端口号添加到安全组,如果服务器使用了 Linux 面板,请检查此 Linux 面板是否有还有安全组配置,需要同样将端口号添加到安全组。
- :::
-
-3. 激活许可证,可以参考 [许可证激活](../../user-guide/activate.md) 进行激活,社区版无需此步骤。
-
-## 升级 Halo
-
-1. 备份数据,可以参考 [备份与恢复](../../user-guide/backup.md) 进行完整备份(可选,但推荐备份)。
-2. 拉取新版本镜像
-
- ```bash
- podman pull registry.fit2cloud.com/halo/halo-pro:2.26
- ```
-
-3. 停止运行中的容器
-
- ```bash
- podman stop halo
- podman rm halo
- ```
-
-4. 更新 Halo
-
- 修改版本号后,按照最初安装的方式,重新创建容器即可。
-
- ```bash
- podman run -it -d --name halo -p 8090:8090 -v ~/.halo2:/root/.halo2 registry.fit2cloud.com/halo/halo-pro:2.26
- ```
-
-## 使用 [Podman Quadlet](https://docs.podman.io/en/latest/markdown/podman-systemd.unit.5.html)
-
-:::tip
-Podman 没有和 Docker 类似的管理进程,在低配置的主机上更友好。
-但是使用 Podman 想要开机后自动启动,官方推荐一种和 systemd 服务类似的语法文件,即 Podman Quadlet。
-:::
-
-下面是一个使用 Podstgresql 数据库的示例:
-
-```bash
-mkdir -p /opt/podman-data/halo
-mkdir -p /etc/containers/systemd
-vim /etc/containers/systemd/halo.container
-```
-
-```ini
-[Unit]
-Description=The halo container
-Wants=network-online.target
-After=network-online.target
-
-[Container]
-AutoUpdate=registry
-ContainerName=halo
-User=60000
-Group=60000
-UserNS=keep-id:uid=60000,gid=60000
-Environment=JVM_OPTS="-Xmx512m -Xms256m"
-Environment=HALO_WORK_DIR="/.halo"
-Environment=SPRING_CONFIG_LOCATION="optional:classpath:/;optional:file:/.halo/"
-Environment=TZ=Asia/Shanghai
-Volume=/opt/podman-data/halo:/.halo
-PublishPort=127.0.0.1:8090:8090
-Image=ghcr.io/halo-dev/halo:2.26
-Exec=--halo.external-url=https://localhost:8090 --spring.sql.init.platform=postgresql --spring.r2dbc.url=r2dbc:pool:postgresql://127.0.0.1:5432/my-db --spring.r2dbc.username=my-user --spring.r2dbc.password=my-password
-
-[Service]
-Restart=always
-RestartSec=30s
-StartLimitInterval=30
-TimeoutStartSec=900
-TimeoutStopSec=70
-
-[Install]
-WantedBy=multi-user.target default.target
-```
-
-```bash
-systemctl daemon-reload
-systemctl start halo
-# 只需要systemctl start halo.
-# 之后重启会自动启动不需要enable服务.
-```
-
-Podman Quadlet 解析:
-
-`[Unit]` 部分:
-
-- Wants 和 After 字段指定了 Halo 在什么服务后启动。
-
-`[Container]` 部分:
-
-- `AutoUpdate=registry`指定了自动拉取容器。假设后续 Halo 镜像支持了`latest`标签,你需要`systemctl enable --now podman-auto-update.timer`以启用容器自动更新。本文示例`ghcr.io/halo-dev/halo:2.26`,将会自动更新适用与`2.26`版本的 patch,例如您创建容器时是`2.26.1`,在官方发布`2.26.2`版本时,容器会自动更新到`2.26.2`。
-- `ContainerName=`指定了 systemd 将生成的服务名称。
-- `User=60000 Group=60000 UserNS=keep-id:uid=60000,gid=60000` 限制容器以 id 60000 的用户运行,提高安全性。注意这个 id 60000 请根据你实际想要运行的用户名来修改,可通过`id user`获得你的用户的 id.
-- `Environment=`字段指定了容器的环境变量,其中你需要注意的是`Environment=HALO_WORK_DIR="/.halo"` `Environment=SPRING_CONFIG_LOCATION="optional:classpath:/;optional:file:/.halo/"`这两个变量中的`/.halo`路径。
-- `Volume=`字段指定挂载到容器储存 Halo 配置文件的路径,请仔细观察`/opt/podman-data/halo:/.halo`其中的`/.halo`要与上面需要注意的环境变量路径要一致。
-- `PublishPort=`和 docker -p 命令一致,即需要映射的端口。
-- `Image=ghcr.io/halo-dev/halo` 即 Docker 镜像的地址,注意要完整的。比如`ghcr.io`这个路径就不能少,如果你没有配置 Podman 的 registries 文件,此路径就必不可少,建议写全。
-- `Exec=` 即附加到 Halo 容器的 Command,具体变量参考上方的 DockerArgs。多个变量以空格分开。
-
-`[Service]` 部分:
-即原生 systemd 语法
-
-- `Restart` 指定遇到错误后总是重启容器
-- `RestartSec` 重启的间隔时间
-- `StartLimitInterval` 重启的次数,超过这个次数将不再重启。
-- `TimeoutStartSec` 启动容器的超时时间,建议不要修改,因为每次开机后 Podman 将自动拉取容器,这时也许耗时会很长,这些时间是算在启动时间中的。如果定义太小的时间,可能将导致 Podman 无法拉取容器镜像。
-- `TimeoutStopSec` 停止容器时的超时时间,`systemctl stop halo` 假设使用这个命令,如果停止时间超过了`TimeoutStopSec`定义的时间,将会被系统 Kill.
-
-`[Install]` 部分:
-
-此部分请查看 systemd 文档,不建议修改。
-
-使用默认的 root 用户运行时无需定义 `User=60000 Group=60000 UserNS=keep-id:uid=60000,gid=60000` 与 `Environment=HALO_WORK_DIR="/.halo"` `Environment=SPRING_CONFIG_LOCATION="optional:classpath:/;optional:file:/.halo/"`,
-示例:
-
-```bash
-mkdir -p /opt/podman-data/halo
-mkdir -p /etc/containers/systemd
-vim /etc/containers/systemd/halo.container
-```
-
-```ini
-# /etc/containers/systemd/halo.container
-[Unit]
-Description=The halo container
-Wants=network-online.target
-After=network-online.target
-
-[Container]
-AutoUpdate=registry
-ContainerName=halo
-Volume=/opt/podman-data/halo:/root/.halo
-PublishPort=127.0.0.1:8090:8090
-Image=ghcr.io/halo-dev/halo:2.26
-Exec=--halo.external-url=https://localhost:8090 --spring.sql.init.platform=postgresql --spring.r2dbc.url=r2dbc:pool:postgresql://127.0.0.1:5432/my-db --spring.r2dbc.username=my-user --spring.r2dbc.password=my-password
-
-[Service]
-Restart=always
-RestartSec=30s
-StartLimitInterval=30
-TimeoutStartSec=900
-TimeoutStopSec=70
-
-[Install]
-WantedBy=multi-user.target default.target
-```
diff --git a/docs/getting-started/migrate-from-1.x.md b/docs/getting-started/migrate-from-1.x.md
deleted file mode 100644
index ea85b932..00000000
--- a/docs/getting-started/migrate-from-1.x.md
+++ /dev/null
@@ -1,82 +0,0 @@
----
-title: 从 Halo 1.x 迁移
-description: Halo 1.5/1.6 迁移至 2.x:官方迁移插件、主题兼容与数据备份注意事项。
----
-
-因为 Halo 2.0 的底层架构变动,无法兼容 1.x 的数据,导致无法平滑升级,所以需要进行数据迁移。为此,我们提供了从 Halo 1.5 / 1.6 版本迁移的插件。在进行迁移之前,**有几点注意事项和要求,如果你目前无法满足,建议先暂缓迁移。**
-
-- Halo 版本必须为 1.5.x 或 1.6.x。如果不满足,需要先升级到 1.5.x 或 1.6.x 版本。
-- Halo 2.0 不兼容 1.x 的主题,建议在升级前先查询你正在使用的主题是否已经支持 2.0。你可以访问 [halo-sigs/awesome-halo](https://github.com/halo-sigs/awesome-halo) 或 [应用市场](https://www.halo.run/store/apps?type=THEME) 查阅目前支持的主题。
-- Halo 2.0 目前没有内置 Markdown 编辑器,如果需要重新编辑迁移后的文章,需要额外安装 Markdown 编辑器插件,可以在应用市场找到合适的 Markdown 插件:[https://www.halo.run/store/apps?tag=editor](https://www.halo.run/store/apps?tag=editor)
-- Halo 2.0 不再内置友情链接、日志、图库等模块,需要安装额外的插件,目前官方已提供:
- - 链接管理:[https://www.halo.run/store/apps/app-hfbQg](https://www.halo.run/store/apps/app-hfbQg)
- - 图库:[https://www.halo.run/store/apps/app-BmQJW](https://www.halo.run/store/apps/app-BmQJW)
- - 瞬间(原日志):[https://www.halo.run/store/apps/app-SnwWD](https://www.halo.run/store/apps/app-SnwWD)
-- Halo 2.0 不再内置外部云存储的支持。需要安装额外的插件,目前官方已提供:
- - S3(兼容国内主流的云存储):[https://www.halo.run/store/apps/app-Qxhpp](https://www.halo.run/store/apps/app-Qxhpp)
-- 在迁移过程中不会保留旧版本的用户数据,迁移完成之后,关于文章等数据的关联都将改为 Halo 2.0 的新用户。
-- 为了防止直接升级 2.0 导致 1.x 的数据受到破坏,我们已经将工作目录由 `~/.halo` 变更为 `~/.halo2`。
-- 可以考虑先在本地运行一个 Halo 2.0,模拟一下导入,检查导入后是否满足要求。
-
-如果遇到了迁移过程中的问题,也可以向我们提交 Issue: [https://github.com/halo-dev/halo/issues/new/choose](https://github.com/halo-dev/halo/issues/new/choose),以上暂不支持的功能我们也会陆续完善。
-
-## 备份数据
-
-在进行迁移操作之前,我们强烈建议先**完整备份所有数据**,可以参考 [备份迁移](https://v1.legacy-docs.halo.run/user-guide/backup-migration) 进行整站备份。
-
-## 导出数据文件
-
-在 Halo 1.5.x / 1.6.x 后台的小工具中提供了数据导出的功能,将最新的数据进行备份,然后下载即可。这个数据文件包含了数据库所有的数据,后续我们在 2.0 的导入插件中就是通过这个文件进行数据导入。
-
-
-
-## 部署 Halo 2.0
-
-可以参考以下文档进行部署:
-
-- [使用 Docker 部署](./install/docker.md)
-- [使用 Docker Compose 部署](./install/docker-compose.md)
-- [使用 JAR 文件部署](./install/jar-file.md)
-
-:::tip
-可以考虑暂时保留旧版本的 Halo,等到迁移完成之后再移除。如果需要保留旧版本的 Halo,请注意在部署 Halo 2.0 的时候使用其他端口,然后在反向代理(Nginx)中修改为 Halo 2.0 的运行端口即可。
-:::
-
-## 移动附件
-
-- 本地存储的附件,只需要将 1.x 工作目录的 `upload` 目录里面的所有文件夹移动到 2.0 工作目录下的 `attachments/migrate-from-1.x` 文件夹即可。
-- 云存储的附件迁移会在迁移插件中进行。
-
-## 安装插件
-
-在迁移过程中,需要提前安装必要的插件:
-
-- 站点迁移:[https://www.halo.run/store/apps/app-TlUBt](https://www.halo.run/store/apps/app-TlUBt)
-- 链接管理:[https://www.halo.run/store/apps/app-hfbQg](https://www.halo.run/store/apps/app-hfbQg)
-- 图库:[https://www.halo.run/store/apps/app-BmQJW](https://www.halo.run/store/apps/app-BmQJW)
-- 瞬间(原日志):[https://www.halo.run/store/apps/app-SnwWD](https://www.halo.run/store/apps/app-SnwWD)
-- S3(如果需要迁移存在云存储的附件,需要安装):[https://www.halo.run/store/apps/app-Qxhpp](https://www.halo.run/store/apps/app-Qxhpp)
-
-## 配置存储策略
-
-> 如果在 Halo 1.x 中未使用云存储,可以跳过此步骤。
-
-1. 安装 S3 插件。
-2. 进入附件管理页面。
-3. 点击页面右上角的 **存储策略** 按钮。
-4. 创建存储策略,选择 **S3 对象存储**。
-5. 填写相关配置,点击 **保存** 即可。
-
-## 迁移
-
-
-
-
-
-
-
-1. 点击左侧菜单的迁移进入迁移页面。
-2. 选择 **Halo 1.5 / 1.6 数据迁移**。
-3. 点击 **选择文件** 按钮,选择在 Halo 1.5.x / 1.6.x 导出的数据文件(JSON 格式)。
-4. 如果在 1.x 中使用了云存储,会弹出选择云存储的对话框,选择之前创建的存储策略即可。
-5. 最后点击页面下方的 **执行导入** 即可。
diff --git a/docs/getting-started/prepare.md b/docs/getting-started/prepare.md
deleted file mode 100644
index c6415ae9..00000000
--- a/docs/getting-started/prepare.md
+++ /dev/null
@@ -1,136 +0,0 @@
----
-title: 写在前面
-description: Halo 部署前必读:社区版与付费版、软硬件环境、域名与 HTTPS 等准备事项。
----
-
-## 发行版本
-
-Halo 的发行版本主要区分为两个大类别,即 **Halo 社区版** 和 **Halo 付费版**。
-
-Halo 付费版包括专业版和商城版,是[凌霞软件](https://www.lxware.cn?code=mcYhwMkn)旗下的商业产品,为企业/团体/或进阶个人使用者提供了诸多定制化和特定场景的功能支持。
-
-版本区别可查阅 [方案对比](https://www.lxware.cn/halo?code=mcYhwMkn)
-
-在后续的文档中,使用付费版统称 Halo 专业版 和 Halo 商城版,除非特别说明。
-
-## 环境要求
-
-这里将讲述运行 Halo 所要求的一些软硬件的配置,我们建议你在运行或者部署之前先浏览一遍此页面。
-
-### 硬件配置
-
-:::tip
-如果你要使用服务器进行部署 Halo,需要注意的是,Halo 目前不支持市面上的云虚拟主机,请使用云服务器或者 VPS。
-:::
-
-#### CPU
-
-无特别要求。目前我们的 [Docker 镜像](https://hub.docker.com/r/halohub/halo) 也已经支持多平台。
-
-#### 内存
-
-为了获得更好的体验,我们建议至少配置 1G 的 RAM。
-
-#### 磁盘
-
-无特别要求,理论上如果不大量在服务器上传附件,Halo 对磁盘的容量要求并不是很高。但我们推荐最好使用 SSD 硬盘的服务器,能更快的运行 Halo。
-
-#### 网络
-
-无特别要求,Halo 目前可以在无公网环境下使用,但部分主题由于使用了第三方资源,可能需要公网环境。
-
-### 软件环境
-
-Halo 理论上可以运行在任何支持 Docker 及 Java 的平台。
-
-#### Docker(可选)
-
-我们主要推荐使用 Docker 运行 Halo,这可以避免一些环境配置相关的问题,文档可参考:
-
-- [使用 Docker Compose 部署](./install/docker-compose.md)
-- [使用 Docker 部署](./install/docker.md)
-
-#### JRE(可选)
-
-如果使用 Docker 镜像部署,那么无需在服务器上安装 JRE。但目前我们也提供了 jar 文件部署的方式,文档可参考:
-
-- [使用 JAR 文件部署](./install/jar-file.md)
-
-:::info
-版本要求:
-
-- 2.21 以上版本:**JRE 21**
-- 2.20 及以下版本:**JRE 17**
-
-:::
-
-#### 数据库
-
-Halo 目前支持以下数据库:
-
-- PostgreSQL
-- MySQL
-- MariaDB
-- H2
-
-其中,H2 不需要单独运行,其他数据库需要单独安装并配置。一般情况下,推荐按照 [使用 Docker Compose 部署](./install/docker-compose.md) 文档将 Halo 和数据库容器编排在一起。
-
-:::warning
-不推荐在生产环境使用默认的 H2 数据库,这可能因为操作不当导致数据文件损坏。如果因为某些原因(如内存不足以运行独立数据库)必须要使用,建议按时[备份数据](../user-guide/backup.md)。
-:::
-
-#### Web 服务器(可选)
-
-如果你部署在生产环境,那么你很可能需要进行域名绑定,这时候我们推荐使用诸如 [Nginx](http://nginx.org/)、[Caddy](https://caddyserver.com/) 之类的 Web 服务器进行反向代理。但需要注意的是,目前 Halo 不支持代理到子目录(如:halo.run/blog)。
-
-#### Wget(可选)
-
-后续的文档中,我们会使用 wget 为例,用于下载所需要的文件,所以请确保服务器已经安装好了这个软件包。当然,下载文件不限制工具,如果你对其他工具熟悉,可以忽略。
-
-#### Vim(可选)
-
-后续的文档中,我们会使用 Vim 为例,用于修改一些必要的配置文件,所以同样请确保服务器已经安装了这个软件包。当然,修改文档也不限制工具,如果你对其他编辑软件熟悉,也可以忽略。
-
-## 浏览器支持
-
-1. 用户前台:视主题所支持的情况而定。
-2. 管理后台(Console 和个人中心):支持目前常见的现代浏览器,具体视 [Vue](https://vuejs.org/about/faq#what-browsers-does-vue-support) 框架的支持情况而定。
-
-## 名词解释
-
-这里将列出后续文档中一些和 Halo 相关的名词含义。
-
-### ~(符号)
-
-代表当前系统下的 [用户目录](https://zh.wikipedia.org/wiki/%E5%AE%B6%E7%9B%AE%E5%BD%95)。
-
-### 镜像
-
-指 Halo 构建所产生的 [Docker 镜像](https://docs.docker.com/engine/reference/commandline/images/)。用户通过该镜像启动 Halo 应用。
-
-### 工作目录
-
-指 Halo 所依赖的工作目录,在 Halo 运行的时候会在系统当前用户目录下产生一个 `.halo2` 的文件夹,绝对路径为 `~/.halo2`。里面通常包含下列目录或文件:
-
-1. `db`:存放 H2 Database 的物理文件,如果你使用其他数据库,那么不会存在这个目录。
-2. `themes`:里面包含用户所安装的主题。
-2. `plugins`:里面包含用户所安装的插件。
-5. `attachments`:附件目录。
-4. `logs`:运行日志目录。
-6. `application.yaml`:配置文件(可选),具体配置方式可查阅 [配置说明](./install/config.md)。
-7. `backups`:备份文件目录。
-8. `static`:虚拟的根文件目录,需要手动创建。
-
-> 如果你使用的 Docker 部署,请不要忽略 `~/.halo2` 的目录映射。
-
-### 主题
-
-包含了各种站点页面模板的资源包。用户访问 Halo 站点浏览到的内容及样式,由 Halo 管理端所配置使用的主题所决定。
-
-相关使用文档:[主题管理相关功能说明](../user-guide/themes.md)
-
-### 插件
-
-用于扩展 Halo 功能的软件包。插件独立于 Halo 核心应用,可以单独安装、升级、卸载。
-
-相关使用文档:[插件管理相关功能说明](../user-guide/plugins.md)
diff --git a/docs/guide/_meta.json b/docs/guide/_meta.json
new file mode 100644
index 00000000..6b42367a
--- /dev/null
+++ b/docs/guide/_meta.json
@@ -0,0 +1,46 @@
+[
+ {
+ "type": "file",
+ "name": "index",
+ "label": "概览"
+ },
+ {
+ "type": "section-header",
+ "label": "入门"
+ },
+ "prepare",
+ {
+ "type": "dir",
+ "name": "install",
+ "label": "安装",
+ "collapsed": true
+ },
+ {
+ "type": "section-header",
+ "label": "开始使用"
+ },
+ "setup",
+ "first-post",
+ {
+ "type": "dir",
+ "name": "use",
+ "label": "功能文档",
+ "collapsed": true
+ },
+ {
+ "type": "dir-section-header",
+ "name": "contribution",
+ "label": "参与贡献",
+ "collapsed": true
+ },
+ {
+ "type": "section-header",
+ "label": "其他"
+ },
+ "migrate-from-1.x",
+ {
+ "type": "custom-link",
+ "label": "更新日志",
+ "link": "https://releases.halo.run/"
+ }
+]
diff --git a/docs/guide/contribution/_meta.json b/docs/guide/contribution/_meta.json
new file mode 100644
index 00000000..d6e02dc6
--- /dev/null
+++ b/docs/guide/contribution/_meta.json
@@ -0,0 +1 @@
+["issue", "pr"]
diff --git a/docs/guide/contribution/index.md b/docs/guide/contribution/index.md
new file mode 100644
index 00000000..ff8eda0b
--- /dev/null
+++ b/docs/guide/contribution/index.md
@@ -0,0 +1,5 @@
+---
+title: 参与贡献
+description: 参与 Halo 开源项目的完整指南,涵盖通过 GitHub 提交问题反馈、寻找适合的 Issue、编写代码并发起 Pull Request 的流程与规范。
+overview: true
+---
diff --git a/docs/guide/contribution/issue.md b/docs/guide/contribution/issue.md
new file mode 100644
index 00000000..76f6581f
--- /dev/null
+++ b/docs/guide/contribution/issue.md
@@ -0,0 +1,29 @@
+---
+title: 问题反馈
+description: 通过 GitHub Issue、Discussion 或 Halo 官方社区反馈使用问题、缺陷和功能需求,包含提交前搜索、选择类型及填写模板等建议。
+---
+
+:::info 提交问题前请阅读
+如果您在使用过程中遇到了什么问题,您可以通过下面的方式反馈,但请尽量按照要求提出反馈。
+:::
+
+## GitHub
+
+- [https://github.com/halo-dev/halo/issues](https://github.com/halo-dev/halo/issues)
+- [https://github.com/orgs/lxware-dev/discussions](https://github.com/orgs/lxware-dev/discussions):Halo 付费版或者付费应用的问题可以在这里进行反馈。
+
+如果你在使用过程中,遇到了一些 bug 或者需要添加某些新特性,请尽量在 GitHub 进行反馈,这非常有助于我们跟踪解决此问题,您也可以很方便的接收到处理状态。
+
+建议步骤:
+
+1. 在 GitHub 搜索相关问题,看看是否有其他人已经提到了此问题。
+2. 如果当前还没有人遇到您类似的问题,可以创建新的 Issue 或者 Discussion。
+3. 选择正确的反馈类型。
+4. 请尽可能详细的按照模板填写内容。
+5. 提交反馈。
+
+## Halo 官方社区
+
+链接:[https://bbs.halo.run](https://bbs.halo.run)
+
+此平台主要目的用于与其他 Halo 用户进行交流。但如果您对 GitHub 不是很熟悉或者没有账号,您也可以在此平台进行反馈。
diff --git a/docs/guide/contribution/pr.md b/docs/guide/contribution/pr.md
new file mode 100644
index 00000000..8f09d5f5
--- /dev/null
+++ b/docs/guide/contribution/pr.md
@@ -0,0 +1,110 @@
+---
+title: 代码贡献
+description: 参与 Halo 代码贡献的完整流程,涵盖查找并认领 Good First Issue、Fork 与同步仓库、创建分支、提交代码、发起及更新 Pull Request。
+---
+
+欢迎关注并有想法参与 Halo 的开发,以下是关于如何参与到 Halo 项目的指南,仅供参考。
+
+## 发现 Issue
+
+所有的代码尽可能都有依据(Issue),不是凭空产生。
+
+### 寻找一个 Good First Issue
+
+> 这个步骤非常适合首次贡献者。
+
+在 [halo-dev](https://github.com/halo-dev) 和 [halo-sigs](https://github.com/halo-sigs) 组织下,有非常多的仓库。每个仓库下都有可能包含一些“首次贡献者”友好的 Issue,主要是为了给贡献者提供一个友好的体验。该类 Issue
+一般会用 `good-first-issue` 标签标记。标签 `good-first-issue` 表示该 Issue 不需要对 Halo 有深入的理解也能够参与。
+
+请点击:[good-first-issue](https://github.com/issues?q=org%3Ahalo-dev+is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22+no%3Aassignee+)
+查看关于 Halo 的 Good First Issue。
+
+### 认领 Issue
+
+若对任何一个 Issue 感兴趣,请尝试在 Issue 进行回复,讨论解决 Issue 的思路。确定后可直接通过 `/assign` 或者 `/assign @GitHub 用户名` 认领这个
+Issue。这样可避免两位贡献者在同一个问题上花时间。
+
+## 代码贡献步骤
+
+1. Fork 此仓库
+
+ 点击 Halo 仓库主页右上角的 `Fork` 按钮即可。
+
+2. Clone 仓库到本地
+
+ ```bash
+ git clone https://github.com/{YOUR_USERNAME}/halo --recursive
+ # 或者 git clone git@github.com:{YOUR_USERNAME}/halo.git --recursive
+ ```
+
+3. 添加主仓库
+
+ 添加主仓库方便未来同步主仓库最新的 commits 以及创建新的分支。
+
+ ```bash
+ git remote add upstream https://github.com/halo-dev/halo.git
+ # 或者 git remote add upstream git@github.com:halo-dev/halo.git
+ git fetch upstream main
+ ```
+
+4. 创建新的开发分支
+
+ 我们需要从主仓库的主分支创建一个新的开发分支。
+
+ ```bash
+ git checkout upstream/main
+ git checkout -b {BRANCH_NAME}
+ ```
+
+5. 提交代码
+
+ ```bash
+ git add .
+ git commit -s -m "Fix a bug king"
+ git push origin {BRANCH_NAME}
+ ```
+
+6. 合并主分支
+
+ 在提交 Pull Request 之前,尽量保证当前分支和主分支的代码尽可能同步,这时需要我们手动操作。示例:
+
+ ```bash
+ git fetch upstream/main
+ git merge upstream/main
+ git push origin {BRANCH_NAME}
+ ```
+
+## Pull Request
+
+进入此阶段说明已经完成了代码的编写,测试和自测,并且准备好接受 Code Review。
+
+### 创建 Pull Request
+
+回到自己的仓库页面,选择 `New pull request` 按钮,创建 `Pull request` 到原仓库的 `main` 分支。
+然后等待我们 Review 即可,如有 `Change Request`,再本地修改之后再次提交即可。
+
+提交 Pull Request 的注意事项:
+
+- 提交 Pull Request 请充分自测。
+- 每个 Pull Request 尽量只解决一个 Issue,特殊情况除外。
+- 应尽可能多的添加单元测试,其他测试(集成测试和 E2E 测试)可看情况添加。
+- 不论需要解决的 Issue 发生在哪个版本,提交 Pull Request 的时候,请将主仓库的主分支设置为 `main`。例如:即使某个 Bug 于 Halo 2.0.x 被发现,但是提交 Pull Request 仍只针对
+ `main` 分支,等待 Pull Request 合并之后,我们会通过 `/cherrypick release-2.0` 或者 `/cherry-pick release-2.1` 指令将此 Pull Request
+ 的修改应用到 `release-2.0` 和 `release-2.1` 分支上。
+
+### 更新 commits
+
+Code Review 阶段可能需要 Pull Request 作者重新修改代码,请直接在当前分支 commit 并 push 即可,无需关闭并重新提交 Pull Request。示例:
+
+```bash
+git add .
+git commit -s -m "Refactor some code according code review"
+git push origin bug/king
+```
+
+同时,若已经进入 Code Review 阶段,请不要强制推送 commits 到当前分支。否则 Reviewers 需要从头开始 Code Review。
+
+### 开发规范
+
+请参考 [https://docs.halo.run/developer-guide/core/code-style](https://docs.halo.run/developer-guide/core/code-style)
+,请确保所有代码格式化之后再提交。
diff --git a/docs/guide/first-post.mdx b/docs/guide/first-post.mdx
new file mode 100644
index 00000000..e29baa01
--- /dev/null
+++ b/docs/guide/first-post.mdx
@@ -0,0 +1,31 @@
+---
+title: 第一篇文章
+description: Halo 安装后写第一篇文章:进入控制台、编辑发布、分类标签与前台访问。
+---
+
+
+
+## 登录管理端
+
+浏览器访问 `/console` 即可进入 Halo 管理端。
+
+## 新建文章
+
+Halo 安装完成后,默认初始化了一篇 `Hello Halo` 文章,接下来我们将创建并发布一篇自己的文章。
+
+1. 在 Halo 管理端,点击仪表盘页面中的 `创建文章` 快捷入口,即可进入到文章编辑页面。
+2. 在文章编辑器中,你可以尽情写下你想展现的内容。
+3. 当内容编辑完成后,点击右上角的 `发布` 按钮,给文章设置一个合适的标题和别名,同时可以设置文章所属分类、标签及其他一些高级设置。
+4. 确认无误后,点击弹框下方的 `发布` 按钮,我们的第一篇文章就成功发布了。
+
+:::info 查看文章使用指南
+关于文章相关其他功能及文章各种设置项的说明,请参考《[用户指南 - 文章](./use/posts.md)》章节
+:::
+
+## 查看文章
+
+文章发布成功后,就可以在主题端查看到我们刚刚创建的文章了。
+
+浏览器访问域名进入站点首页,站点展示的内容及样式由当前启用的主题所决定。
+
+接下来,选一款喜欢的主题,尽情体验 Halo 吧!
diff --git a/docs/guide/index.md b/docs/guide/index.md
new file mode 100644
index 00000000..a6dd56e2
--- /dev/null
+++ b/docs/guide/index.md
@@ -0,0 +1,5 @@
+---
+title: 使用指南
+description: Halo 使用指南总览,涵盖部署前准备、多种安装方式、首次初始化、文章发布、站点功能配置、问题反馈以及从 Halo 1.x 迁移等内容。
+overview: true
+---
diff --git a/docs/guide/install/1panel.mdx b/docs/guide/install/1panel.mdx
new file mode 100644
index 00000000..a8d3b150
--- /dev/null
+++ b/docs/guide/install/1panel.mdx
@@ -0,0 +1,95 @@
+---
+title: 使用 1Panel 部署
+description: 通过 1Panel 安装 Halo:应用商店或容器方式部署与访问说明。
+---
+
+import DockerArgs from "./slots/_docker-args.md"
+
+:::info 先阅读《写在前面》
+在继续操作之前,我们推荐您先阅读[《写在前面》](../prepare),这可以快速帮助你了解 Halo。
+:::
+
+## 1Panel 简介
+
+[1Panel](https://1panel.cn) 是一个现代化、开源的 Linux 服务器运维管理面板。
+
+
+
+### 功能
+
+- **快速建站**:深度集成 WordPress 和 Halo,域名绑定、SSL 证书配置等一键搞定。
+- **高效管理**:通过 Web 端轻松管理 Linux 服务器,包括应用管理、主机监控、文件管理、数据库管理、容器管理等。
+- **安全可靠**:最小漏洞暴露面,提供防火墙和安全审计等功能。
+- **一键备份**:支持一键备份和恢复,备份数据云端存储,永不丢失。
+
+### 安装
+
+关于 1Panel 的安装部署与基础功能介绍,请参考 [1Panel 官方文档](https://1panel.cn/docs/installation/online_installation/)。此处假设你已经完成了 1Panel 的安装部署,并对其功能有了基础了解。
+
+### 安装基础软件
+
+在安装 Halo 之前,我们需要先在 1Panel 上安装好所需的软件,包括 OpenResty 和数据库(MySQL、PostgreSQL、MariaDB 都可以)。在接下来的文档中,我们会默认你已经安装好了这两个软件,并不再赘述。
+
+
+
+## 安装 Halo 应用
+
+进入应用商店应用列表,选择其中的 Halo 应用进行安装。
+
+
+
+在应用详情页选择最新的 Halo 版本进行安装。
+
+
+
+参数说明:
+
+- **名称**:要创建的 Halo 应用的名称。
+- **版本**:选择最新的版本即可。
+- **数据库服务**:Halo 应用使用的数据库应用,支持下拉选择已安装的数据库应用,1Panel 会自动配置 Halo 使用该数据库。
+- **数据库名**:Halo 应用使用的数据库名称,1Panel 会在选中的数据库中自动创建这个数据库。
+- **数据库用户**:Halo 应用使用的数据库用户名,1Panel 会在选中的数据库中自动创建这个用户,并添加对应的数据库授权。
+- **数据库用户密码**:Halo 应用使用的数据库用户密码,1Panel 会在选中的数据库中自动为上一步创建的用户配置该密码。
+- **外部访问地址**:Halo 应用的最终访问地址,如果有为 Halo 规划域名,需要配置为域名格式,例如 `http://halo.example.com`。否则配置为 `http://服务器IP:PORT`,例如 `http://192.168.1.1:8090`。
+- **端口**:Halo 应用的服务端口。
+
+开始安装后页面自动跳转到已安装应用列表,等待刚刚安装的 Halo 应用变为已启动状态。
+
+
+
+## 创建网站
+
+完成 Halo 应用的安装后,此时并不会自动创建一个网站,我们需要手动创建一个网站,然后将 Halo 应用绑定到这个网站上才能使用域名访问。
+
+点击 1Panel 菜单的 **网站**,进入网站列表页,点击 **创建网站** 按钮。
+
+
+
+1. 在已装应用中选择我们刚刚新建的 Halo 应用。
+2. 正确填写主域名,需要注意的是需要提前解析好域名到服务器 IP。
+
+最后,点击确认按钮,等待网站创建完成即可访问网站进行 [初始化](../setup.md)。
+
+
+
+## 升级 Halo
+
+:::info 新版本上架有延迟
+当 Halo 发布新版本之后,并不会在 1Panel 的应用商店中实时查看到新版本,通常需要等待一段时间才会显示,这取决于 1Panel 的应用商店更新频率。
+:::
+
+:::warning 升级前查看更新日志
+目前 1Panel 不支持在升级应用的时候查看应用的更新日志,所以建议在升级前前往 [Halo 版本发布](https://releases.halo.run/) 查看对应版本的更新日志,了解新版本的变化。
+:::
+
+当 Halo 在 1Panel 的应用商店有更新时,可以在 **应用商店** 的 **可升级** 选项卡中看到 Halo 应用的升级按钮。
+
+
+
+点击 **升级** 按钮后,可以在升级界面中选择最新的 Halo 版本,最后点击 **确认** 按钮即可完成升级。
+
+
+
+## 激活许可证
+
+可以参考 [许可证激活](../use/activate.md) 进行激活,社区版无需此步骤。
diff --git a/docs/guide/install/_meta.json b/docs/guide/install/_meta.json
new file mode 100644
index 00000000..bdd1e4c5
--- /dev/null
+++ b/docs/guide/install/_meta.json
@@ -0,0 +1,23 @@
+[
+ "docker-compose",
+ "docker",
+ "1panel",
+ "bt-panel",
+ "helm",
+ "podman",
+ "jar-file",
+ "offline",
+ "config",
+ {
+ "type": "dir",
+ "name": "cloud",
+ "label": "云平台",
+ "collapsed": true
+ },
+ {
+ "type": "dir",
+ "name": "other",
+ "label": "其他指南",
+ "collapsed": true
+ }
+]
diff --git a/docs/guide/install/bt-panel.md b/docs/guide/install/bt-panel.md
new file mode 100644
index 00000000..7793e0e6
--- /dev/null
+++ b/docs/guide/install/bt-panel.md
@@ -0,0 +1,92 @@
+---
+title: 使用宝塔面板部署
+description: 通过宝塔面板部署 Halo:环境要求、站点与反向代理配置说明。
+---
+
+:::info 先阅读《写在前面》
+在继续操作之前,我们推荐您先阅读[《写在前面》](../prepare),这可以快速帮助你了解 Halo。
+:::
+
+## 宝塔面板简介
+
+宝塔面板是一个常见的 Linux 服务器运维面板,提供网站、数据库、SSL、Docker 等可视化管理能力。通过宝塔面板的 Docker 模块和应用商店,可以比较方便地完成 Halo 的安装、运行和升级。
+
+
+
+### 准备工作
+
+在开始之前,需要确保你已经完成以下准备:
+
+- 已安装并可以正常登录宝塔面板。
+- 已在服务器上安装宝塔的 Docker 模块。
+- 已放行服务器的 `80` 和 `443` 端口。
+- 如果计划使用域名访问 Halo,需要提前将域名解析到当前服务器。
+
+## 安装 Halo 应用
+
+进入宝塔面板左侧的 **Docker**,在 **应用商店** 中搜索 `Halo`,然后点击 **安装**。
+
+
+
+在安装配置页面中,按照实际情况填写参数:
+
+
+
+参数说明:
+
+- **名称**:当前 Halo 应用的名称。
+- **版本选择**:建议优先选择最新的稳定版本。
+- **域名**:Halo 对外访问使用的域名,建议填写已经完成解析的域名。
+- **允许外部访问**:如果希望直接通过 `IP:端口` 访问,可以启用此选项;如果只打算通过域名访问,通常不需要开启。
+- **端口**:Halo 容器暴露的服务端口。
+- **外部访问地址**:Halo 的最终访问地址,建议与实际访问地址保持一致,例如 `https://www.example.com`。
+- **CPU 核心数限制**、**内存限制**:按服务器资源情况选填,不限制可以保持默认值。
+- **编辑模板**:默认模板通常即可满足使用需求;如果需要调整镜像、挂载目录或其他编排参数,可以切换到自定义模板。
+
+宝塔提供的 Halo 应用模板会自动创建 Halo 运行所需的容器。确认参数无误后,点击 **确定** 开始安装。
+
+如果需要查看或调整底层的 Docker Compose 配置,可以切换到 **自定义** 模板模式:
+
+:::info 选择合适的镜像版本
+宝塔的 Docker 应用商店的 Halo 版本可能会滞后于官方最新版本,通常建议自定义镜像版本,查看最新版本请前往 [Halo 版本发布](https://releases.halo.run/)。
+
+此外,宝塔的默认编排是 Halo 社区版本,如果你想安装 Halo 专业版或者商城版,将镜像修改为 `registry.fit2cloud.com/halo/halo-pro` 即可。
+:::
+
+
+
+安装完成后,进入 **Docker** 的 **已安装** 列表,等待 Halo 应用变为运行中状态。
+
+
+
+## 配置网站和 SSL
+
+如果你在安装 Halo 时填写了域名,宝塔通常会同步创建对应的网站配置。你可以在已安装应用卡片中点击 **管理网站**,或者直接进入左侧菜单的 **网站** 查看站点状态。
+
+
+
+如果站点的 **SSL 证书** 一栏显示未部署,可以进入站点管理页面,在 **SSL** 标签页中申请证书。
+
+
+
+证书申请成功后,即可通过你配置的域名使用 `https` 访问 Halo。首次访问时,根据页面提示完成 Halo 的[初始化](../setup.md)即可。
+
+:::info 证书申请失败时的检查项
+如果证书申请失败,建议优先检查域名解析是否生效,以及服务器的 `80`、`443` 端口是否已经正确放行。
+:::
+
+## 升级 Halo
+
+当需要升级 Halo 时,可以进入 **Docker** 的 **容器编排**,找到当前的 Halo 项目,修改镜像版本为最新版本,然后点击 **确定** 按钮即可完成升级。
+
+:::info 查看 Halo 最新版本
+查看最新版本请前往 [Halo 版本发布](https://releases.halo.run/)。
+:::
+
+
+
+更新完成后,宝塔会重新拉取镜像并重建相关容器。建议升级前先备份 Halo 数据目录和数据库,并前往 [Halo 版本发布](https://releases.halo.run/) 查看对应版本的更新说明。
+
+## 激活许可证
+
+可以参考 [许可证激活](../use/activate.md) 进行激活,社区版无需此步骤。
diff --git a/docs/getting-started/install/cloud/alibaba-cloud-computenest.md b/docs/guide/install/cloud/alibaba-cloud-computenest.md
similarity index 100%
rename from docs/getting-started/install/cloud/alibaba-cloud-computenest.md
rename to docs/guide/install/cloud/alibaba-cloud-computenest.md
diff --git a/docs/guide/install/cloud/alibaba-cloud-market.md b/docs/guide/install/cloud/alibaba-cloud-market.md
new file mode 100644
index 00000000..5ba62048
--- /dev/null
+++ b/docs/guide/install/cloud/alibaba-cloud-market.md
@@ -0,0 +1,59 @@
+---
+title: 阿里云云市场部署
+description: 使用阿里云云市场 Halo 镜像快速创建实例与初始化说明。
+---
+
+阿里云云市场提供围绕云计算产品的软件应用及服务,包括数据与 API、专业服务、基础软件、建站小程序、企业应用、安全、AI 与大数据计算、开发与运维、解决方案以及 IoT 十大类目市场,商品数量达上万种。
+
+Halo 目前已上架至阿里云云市场,助力用户打造高效便捷的建站体验!本指南将介绍如何通过阿里云云市场购买、部署和使用 **Halo** 镜像,并提供购买服务器的优惠链接。
+
+阿里云的 Halo 镜像不仅包括了已经部署好的 Halo 服务,还集成了 [1Panel](https://1panel.cn/) Linux 管理面板,可以更加方便地升级 Halo 和配置网站。
+
+## 购买服务器
+
+### 通过优惠链接
+
+目前阿里云针对 Halo 用户推出了 5.5 折优惠,您可以通过以下链接购买服务器:[专属阿里云特价链接 5.5 折优惠](https://market.aliyun.com/common/dashi/halo?userCode=kmemb8jp)
+
+
+
+
+
+### 创建 ECS 时选择 Halo 镜像
+
+您也可以自行购买[阿里云服务器](https://ecs-buy.aliyun.com/ecs?userCode=kmemb8jp),并在选择镜像时选择云市场镜像并搜索 **Halo**,即可快速选择镜像进行部署。
+
+
+
+
+
+服务器初始化完成之后,进入 ECS 控制台即可看到服务器信息,如下图所示:
+
+
+
+## 访问 Halo
+
+首先需要在服务器的安全组开放 80 端口,然后就可以通过服务器的公网 IP 访问 Halo 了。
+
+
+
+首次访问会进入 Halo 初始化页面,填写初始化信息即可完成 Halo 的安装。
+
+:::info 完成 Halo 初始化
+Halo 初始化文档可查阅:[初始化](../../setup.md)
+:::
+
+## 管理 Halo
+
+该镜像的 Halo 使用 Docker Compose 方式部署,相关文件位于 `/opt/halo` 目录中。
+
+### 查看服务状态
+
+```bash
+cd /opt/halo
+docker compose ps
+```
+
+### 升级 Halo
+
+修改 `/opt/halo/docker-compose.yml` 中 Halo 容器使用的镜像标签为对应版本后,执行 `docker compose up -d` 命令即可进行升级。
diff --git a/docs/guide/install/cloud/index.md b/docs/guide/install/cloud/index.md
new file mode 100644
index 00000000..7bd7af13
--- /dev/null
+++ b/docs/guide/install/cloud/index.md
@@ -0,0 +1,5 @@
+---
+title: 云平台
+description: 通过阿里云云市场、阿里云计算巢和腾讯云轻量应用服务器快速部署 Halo,了解各云平台镜像、实例购买、初始化与访问流程。
+overview: true
+---
diff --git a/docs/guide/install/cloud/tencent-cloud-lighthouse.md b/docs/guide/install/cloud/tencent-cloud-lighthouse.md
new file mode 100644
index 00000000..080cfd6a
--- /dev/null
+++ b/docs/guide/install/cloud/tencent-cloud-lighthouse.md
@@ -0,0 +1,71 @@
+---
+title: 腾讯云轻量应用模板
+description: 腾讯云轻量应用服务器应用模板一键部署 Halo 的步骤说明。
+---
+
+腾讯云目前已经在轻量应用服务器的应用模板中添加了 Halo 的模板镜像,选择应用模板购买服务器之后就预装了 Halo 和 [1Panel](https://1panel.cn/)。
+
+## 购买轻量应用服务器
+
+购买地址:[轻量应用服务器](https://buy.cloud.tencent.com/lighthouse?blueprintType=APP_OS&blueprintOfficialId=lhbp-pjoqcja2®ionId=8&zone=ap-beijing-3&bundleId=bundle_starter_mc_med2_01&loginSet=AUTO&from=lh-console)
+
+然后在应用模板中选择 Halo,然后选择所需地域、可用区、套餐等,点击立即购买即可。
+
+
+
+## 应用管理
+
+
+
+服务器初始化完成之后,进入应用 **管理页面** 即可看到 Halo 和 1Panel 的相关信息。
+
+## 访问 Halo
+
+在 **应用管理** 页面中点击 **管理员登录地址** 即可进入 Halo 初始化页面,填写初始化信息即可完成 Halo 的安装。
+
+
+
+## 1Panel 管理
+
+1. 在 **应用管理** 页面中可以看到预装的 1Panel 信息,首先需要将 1Panel 的端口开放,进入防火墙页面添加默认端口 8090 即可:
+
+ 
+2. 登录到实例获取 1Panel 初始用户名和密码:
+
+ 
+3. 然后就可以通过 `http://ip:8090/tencentcloud` 进入 1Panel 的管理后台:
+
+ 
+ 
+
+## 查看预装应用
+
+为了保证 Halo 的正常运行,1Panel 中预装了 Halo 所需的环境,可以在 **应用商店** 的 **已安装** 选项卡中查看:
+
+
+
+关于应用商店,可查阅 [1Panel 文档](https://1panel.cn/docs/user_manual/appstore/appstore/)。
+
+## 升级 Halo
+
+在 **应用商店** 的 **可升级** 选项卡中检查 Halo 是否有更新,如果有新的版本,点击应用卡片的 **升级** 按钮即可。
+
+
+
+## 绑定域名
+
+:::info 准备可用域名
+该操作要求用户有一个可用的域名,并在 DNS 服务商处添加对应的解析记录。
+:::
+
+在 **网站** 页面中,此镜像默认添加了一个关联 Halo 应用的网站,你可以点击配置按钮然后添加自己的域名。
+
+
+
+
+
+除此之外,在绑定域名之后,还需要修改一下 Halo 的 **外部访问地址** 参数为实际的网站访问地址(如:[https://demo.halo.run](https://demo.halo.run)),否则 Halo 的部分功能或者插件可能会出现使用问题,只需要按照下图所示修改应用的参数然后点击确认即可。
+
+
+
+关于网站管理,可查阅 [1Panel 文档](https://1panel.cn/docs/user_manual/websites/websites/)。
diff --git a/docs/guide/install/config.md b/docs/guide/install/config.md
new file mode 100644
index 00000000..e5fdf270
--- /dev/null
+++ b/docs/guide/install/config.md
@@ -0,0 +1,241 @@
+---
+title: 配置说明
+description: Halo 运行时配置:环境变量、端口、数据库连接与工作目录等说明。
+---
+
+在前面的部署文档中,为了保证部署流程的简洁,只说明了运行所必须的配置,但除了运行之外,Halo 还提供了不少其他的配置以及我们所使用的 Web 框架的配置,这个文档我们将详细介绍 Halo 的完整配置。
+
+## 配置方式
+
+Halo 支持通过多种方式进行配置,目前 [Docker Compose 部署文档](./docker-compose.md) 的示例是通过运行参数配置,[JAR 文件部署方式](./jar-file.md) 是通过配置文件进行配置。
+
+### 通过运行参数
+
+通常我们在使用 Docker Compose 部署的时候推荐使用这种方式进行配置,配置方式为在 Docker Compose 配置文件的 `command` 添加对应的配置条目即可,比如:
+
+```yaml {5-10}
+services:
+ halo:
+ image: registry.fit2cloud.com/halo/halo-pro:2.26
+ ...
+ command:
+ - --spring.r2dbc.url=r2dbc:pool:postgresql://halodb/halo
+ - --spring.r2dbc.username=halo
+ - --spring.r2dbc.password=openpostgresql
+ - --spring.sql.init.platform=postgresql
+ - --halo.external-url=http://localhost:8090/
+```
+
+### 通过配置文件
+
+通常我们在使用 JAR 文件部署的时候更推荐使用这种方式进行配置,配置文件名称为 `application.yaml`,并且需要在运行的时候通过 `--spring.config.additional-location` 参数指定配置文件存放的目录,运行示例:
+
+```bash
+java -jar halo.jar --spring.config.additional-location=optional:file:$HOME/.halo2/
+```
+
+配置示例:
+
+```yaml title="~/.halo2/application.yaml"
+spring:
+ r2dbc:
+ url: r2dbc:h2:file:///${halo.work-dir}/db/halo-next?MODE=MySQL&DB_CLOSE_ON_EXIT=FALSE
+ username: admin
+ password: 123456
+ sql:
+ init:
+ mode: always
+ platform: h2
+```
+
+:::info 查看 JAR 文件部署步骤
+完整的 JAR 文件部署文档可查阅:[使用 JAR 文件部署](./jar-file.md)
+:::
+
+当然,使用 Docker Compose 部署同样支持通过这种方式配置,只需要将 `application.yaml` 放在工作目录的挂载目录即可,示例:
+
+```tree
+├── docker-compose.yaml
+└── halo2
+ └── application.yaml
+```
+
+其中,`docker-compose.yaml` 的 Halo 服务的 `volumes` 应该包含 `./halo2:/root/.halo2`。
+
+## 配置列表
+
+### Halo 独有配置
+
+通常用于生产环境的配置:
+
+| 配置路径 | 说明 | 生产环境默认值 |
+| -------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------- |
+| `halo.work-dir` | Halo [工作目录](../prepare.md#工作目录),通常不建议修改 | `${user.home}/.halo2` |
+| `halo.external-url` | 网站的实际访问地址,如:`https://www.halo.run` | `http://localhost:8090` |
+| `halo.use-absolute-permalink` | 永久链接是否生成为绝对地址,设置为 `true` 时,请确保正确配置了 `halo.external-url` | `false` |
+| `halo.security.frame-options.disabled` | 是否禁止网站通过 iframe 嵌入 | `false` |
+| `halo.security.frame-options.mode` | iframe 嵌入模式,默认为同源,可设置的值为 `DENY`、`SAMEORIGIN` | `SAMEORIGIN` |
+| `halo.security.referrer-options.policy` | Referrer-Policy 是一个 HTTP 头部字段,用于控制浏览器在发送请求时如何处理 Referer 信息,可设置的值请参考 [https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Referrer-Policy](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Referrer-Policy) | `strict-origin-when-cross-origin` |
+| `halo.security.remember-me.token-validity` | 保持登录会话的有效期,默认为 14 天(14d) | `14d` |
+| `halo.security.basic-auth.disabled` | 是否禁用 API 的 Basic Auth 认证 | `true` |
+| `halo.security.two-factor-auth.disabled` | 是否禁用系统全局的两步验证 | `false` |
+| `halo.attachment.resource-mappings[0].pathPattern` | 附件资源代理匹配规则,这个设置通常适用于从其他平台迁移的场景 | `/upload/**` |
+| `halo.attachment.resource-mappings[0].locations` | 附件资源代理目录,只能放置在[工作目录](../prepare.md#工作目录)的 `attachments` 目录 | `migrate-from-1.x` |
+| `halo.attachment.thumbnail.disabled` | 是否禁用附件缩略图功能,如果不需要此功能,可以选择禁用 | false |
+| `halo.attachment.thumbnail.concurrent-threads` | 生成附件缩略图的并发数 | 1 |
+| `halo.attachment.thumbnail.quality` | 附件缩略图的生成质量,数值为 0-1 之间 | - |
+
+通常用于开发环境的配置:
+
+| 配置路径 | 说明 | 默认值 |
+| ----------------------------- | --------------------------- | ------ |
+| `halo.ui.proxy.endpoint` | 开发环境的 UI 代理地址 | -- |
+| `halo.ui.proxy.enabled` | 是否启用 UI 代理地址 | -- |
+| `halo.plugin.runtime-mode` | 插件的运行模式 | -- |
+
+### Web 框架本身的配置
+
+Halo 使用了 [Spring Boot](https://docs.spring.io/spring-boot/) 和 [Spring WebFlux](https://docs.spring.io/spring-framework/reference/web/webflux.html),完整的配置可查阅:[Common Application Properties](https://docs.spring.io/spring-boot/appendix/application-properties/index.html#appendix.application-properties.core),以下将列出关于 Halo 常用的配置:
+
+Web 服务相关:
+
+| 配置路径 | 说明 | 默认值 |
+| ----------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | ------- |
+| `server.port` | Web 服务端口 | `8090` |
+| `server.compression.enabled` | 是否开启 gzip 压缩 | `true` |
+| `spring.web.resources.cache.cachecontrol.max-age` | 设置静态资源的缓存存储的最大周期,超过这个时间缓存被认为过期 | `365d` |
+| `spring.web.resources.cache.cachecontrol.no-cache` | 设置静态资源响应头的 `Cache-Control` 为 `no-cache`,在发布缓存副本之前,强制要求缓存把请求提交给原始服务器进行验证(协商缓存验证) | `false` |
+| `spring.web.resources.cache.cachecontrol.use-last-modified` | 是否为静态资源添加 Last-Modified 响应头,Last-Modified 表示服务器上资源的最后修改时间。当浏览器第一次请求资源时,服务器会在响应头中包含这个字段 | `true` |
+| `spring.thymeleaf.cache` | 是否开启模版引擎缓存 | `true` |
+
+数据库相关:
+
+| 配置路径 | 说明 | 默认值 |
+| -------------------------- | --------------------------------------------------------------------- | ------ |
+| `spring.r2dbc.url` | 数据库连接地址,详细可查阅下方的 `数据库配置` | -- |
+| `spring.r2dbc.username` | 数据库用户名 | -- |
+| `spring.r2dbc.password` | 数据库密码 | -- |
+| `spring.sql.init.platform` | 数据库平台名称,支持 `postgresql`、`mysql`、`mariadb`、`h2` | -- |
+
+数据库配置:
+
+| 链接方式 | 链接地址格式 | `spring.sql.init.platform` |
+| ---------------- | ---------------------------------------------------------------------------------- | -------------------------- |
+| PostgreSQL | `r2dbc:pool:postgresql://{HOST}:{PORT}/{DATABASE}` | postgresql |
+| MySQL | `r2dbc:pool:mysql://{HOST}:{PORT}/{DATABASE}` | mysql |
+| MariaDB | `r2dbc:pool:mariadb://{HOST}:{PORT}/{DATABASE}` | mariadb |
+| H2 Database | `r2dbc:h2:file:///${halo.work-dir}/db/halo-next?MODE=MySQL&DB_CLOSE_ON_EXIT=FALSE` | h2 |
+
+## Redis 集成
+
+:::note 仅限 Halo 付费版
+限 [Halo 付费版](../prepare.md#发行版本) 可用。
+:::
+
+Halo 付费版在 2.16 中新增了集成 Redis 的功能,目前提供将用户登录 Session 存入 Redis 的支持。
+
+### 配置方式
+
+如果使用 Docker 或者 Docker Compose 部署,需要添加以下启动参数:
+
+```properties
+- --spring.data.redis.host=localhost # Redis 服务地址
+- --spring.data.redis.port=6379 # Redis 服务端口
+- --spring.data.redis.database=0 # Redis 数据库
+- --spring.data.redis.password= # Redis 密码
+- --halo.session.store-type=redis # 声明 session 存储方式为 redis,默认不配置则为 in-memory
+- --halo.redis.enabled=true # 启用 Redis 服务
+```
+
+:::info 确认 Redis 主机地址
+请特别注意 `spring.data.redis.host` 的指向,在 Docker 容器中,可能并不是 localhost,需要确保 Halo 容器中能够正常访问到你的 Redis 服务。
+:::
+
+Docker Compose 配置片段如下:
+
+```yaml {25-32}
+version: "3"
+
+services:
+ halo:
+ image: registry.fit2cloud.com/halo/halo-pro:2.26
+ restart: on-failure:3
+ depends_on:
+ halodb:
+ condition: service_healthy
+ networks:
+ halo_network:
+ volumes:
+ - ./halo2:/root/.halo2
+ ports:
+ - "8090:8090"
+ healthcheck:
+ test: ["CMD", "curl", "-f", "http://localhost:8090/actuator/health/readiness"]
+ interval: 30s
+ timeout: 5s
+ retries: 5
+ start_period: 30s
+ command:
+ ...
+
+ # Redis 相关配置开始
+ - --spring.data.redis.host=localhost # Redis 服务地址
+ - --spring.data.redis.port=6379 # Redis 服务端口
+ - --spring.data.redis.database=0 # Redis 数据库
+ - --spring.data.redis.password= # Redis 密码
+ - --halo.session.store-type=redis # 声明 session 存储方式为 redis,默认不配置则为 in-memory
+ - --halo.redis.enabled=true
+ # Redis 相关配置结束
+networks:
+ halo_network:
+```
+
+如果你是使用的 Docker Compose 部署 Halo,并且希望将 Redis 服务编排在一起,以下是配置示例:
+
+```yaml {25-32,36-43}
+version: "3"
+
+services:
+ halo:
+ image: registry.fit2cloud.com/halo/halo-pro:2.26
+ restart: on-failure:3
+ depends_on:
+ halodb:
+ condition: service_healthy
+ networks:
+ halo_network:
+ volumes:
+ - ./halo2:/root/.halo2
+ ports:
+ - "8090:8090"
+ healthcheck:
+ test: ["CMD", "curl", "-f", "http://localhost:8090/actuator/health/readiness"]
+ interval: 30s
+ timeout: 5s
+ retries: 5
+ start_period: 30s
+ command:
+ # ...
+
+ # Redis 相关配置开始
+ - --spring.data.redis.host=redis # Redis 服务地址
+ - --spring.data.redis.port=6379 # Redis 服务端口
+ - --spring.data.redis.database=0 # Redis 数据库
+ - --spring.data.redis.password= # Redis 密码
+ - --halo.session.store-type=redis # 声明 session 存储方式为 redis,默认不配置则为 in-memory
+ - --halo.redis.enabled=true
+ # Redis 相关配置结束
+
+ # ...
+
+ # 新增的 Redis 编排
+ redis:
+ image: redis:7.2.5
+ networks:
+ halo_network:
+ volumes:
+ - ./redis-data:/data
+ restart: always
+networks:
+ halo_network:
+```
diff --git a/docs/guide/install/docker-compose.mdx b/docs/guide/install/docker-compose.mdx
new file mode 100644
index 00000000..5ffeb286
--- /dev/null
+++ b/docs/guide/install/docker-compose.mdx
@@ -0,0 +1,359 @@
+---
+title: 使用 Docker Compose 部署
+description: 使用 Docker Compose 部署 Halo:推荐方式、compose 配置与持久化卷说明。
+---
+
+import { Steps } from '@rspress/core/theme';
+import { Tab, Tabs } from '@rspress/core/theme';
+import DockerArgs from "./slots/_docker-args.md"
+import DockerRegistryList from "./slots/_docker-registry-list.md"
+
+:::info 先阅读《写在前面》
+在继续操作之前,我们推荐您先阅读[《写在前面》](../prepare.md),这可以快速帮助你了解 Halo。
+:::
+
+## 环境搭建
+
+- Docker 安装文档:[https://docs.docker.com/engine/install/](https://docs.docker.com/engine/install/)
+- Docker Compose 安装文档:[https://docs.docker.com/compose/install/](https://docs.docker.com/compose/install/)
+
+## 部署 Halo
+
+### 镜像说明
+
+
+
+### 开始搭建
+
+
+
+### 创建目录
+
+在系统任意位置创建一个文件夹,此文档以 `~/halo` 为例。
+
+```bash
+mkdir ~/halo && cd ~/halo
+```
+
+:::info 妥善保存数据目录
+注意:后续操作中,Halo 产生的所有数据都会保存在这个目录,请妥善保存。
+:::
+
+### 创建 `docker-compose.yaml`
+
+此文档提供几种场景的 Docker Compose 配置文件,请根据你的需要**选择一种**。
+
+
+
+```yaml {24-30,44} title="~/halo/docker-compose.yaml"
+services:
+ halo:
+ image: registry.fit2cloud.com/halo/halo-pro:2.26
+ restart: on-failure:3
+ depends_on:
+ halodb:
+ condition: service_healthy
+ networks:
+ halo_network:
+ volumes:
+ - ./halo2:/root/.halo2
+ ports:
+ - "8090:8090"
+ healthcheck:
+ test: ["CMD", "curl", "-f", "http://localhost:8090/actuator/health/readiness"]
+ interval: 30s
+ timeout: 5s
+ retries: 5
+ start_period: 30s
+ environment:
+ # JVM 参数,默认为 -Xmx256m -Xms256m,可以根据实际情况做调整,置空表示不添加 JVM 参数
+ - JVM_OPTS=-Xmx256m -Xms256m
+ command:
+ - --spring.r2dbc.url=r2dbc:pool:postgresql://halodb/halo
+ - --spring.r2dbc.username=halo
+ # PostgreSQL 的密码,请保证与下方 POSTGRES_PASSWORD 的变量值一致。
+ - --spring.r2dbc.password=openpostgresql
+ - --spring.sql.init.platform=postgresql
+ # 外部访问地址,请根据实际需要修改
+ - --halo.external-url=http://localhost:8090/
+ halodb:
+ image: postgres:15.4
+ restart: on-failure:3
+ networks:
+ halo_network:
+ volumes:
+ - ./db:/var/lib/postgresql/data
+ healthcheck:
+ test: [ "CMD", "pg_isready" ]
+ interval: 10s
+ timeout: 5s
+ retries: 5
+ environment:
+ - POSTGRES_PASSWORD=openpostgresql
+ - POSTGRES_USER=halo
+ - POSTGRES_DB=halo
+ - PGUSER=halo
+
+networks:
+ halo_network:
+```
+:::info PostgreSQL 容器端口
+此示例的 PostgreSQL 数据库容器默认没有设置端口映射,如果需要在容器外部访问数据库,可以自行在 `halodb` 服务中添加端口映射,PostgreSQL 的端口为 `5432`。
+:::
+
+
+ ```yaml {24-30,52} title="~/halo/docker-compose.yaml"
+ services:
+ halo:
+ image: registry.fit2cloud.com/halo/halo-pro:2.26
+ restart: on-failure:3
+ depends_on:
+ halodb:
+ condition: service_healthy
+ networks:
+ halo_network:
+ volumes:
+ - ./halo2:/root/.halo2
+ ports:
+ - "8090:8090"
+ healthcheck:
+ test: ["CMD", "curl", "-f", "http://localhost:8090/actuator/health/readiness"]
+ interval: 30s
+ timeout: 5s
+ retries: 5
+ start_period: 30s
+ environment:
+ # JVM 参数,默认为 -Xmx256m -Xms256m,可以根据实际情况做调整,置空表示不添加 JVM 参数
+ - JVM_OPTS=-Xmx256m -Xms256m
+ command:
+ - --spring.r2dbc.url=r2dbc:pool:mysql://halodb:3306/halo
+ - --spring.r2dbc.username=root
+ # MySQL 的密码,请保证与下方 MYSQL_ROOT_PASSWORD 的变量值一致。
+ - --spring.r2dbc.password=o#DwN&JSa56
+ - --spring.sql.init.platform=mysql
+ # 外部访问地址,请根据实际需要修改
+ - --halo.external-url=http://localhost:8090/
+
+ halodb:
+ image: mysql:8.1.0
+ restart: on-failure:3
+ networks:
+ halo_network:
+ command:
+ - --default-authentication-plugin=caching_sha2_password
+ - --character-set-server=utf8mb4
+ - --collation-server=utf8mb4_general_ci
+ - --explicit_defaults_for_timestamp=true
+ volumes:
+ - ./mysql:/var/lib/mysql
+ - ./mysqlBackup:/data/mysqlBackup
+ healthcheck:
+ test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "--silent"]
+ interval: 3s
+ retries: 5
+ start_period: 30s
+ environment:
+ # 请修改此密码,并对应修改上方 Halo 服务的 SPRING_R2DBC_PASSWORD 变量值
+ - MYSQL_ROOT_PASSWORD=o#DwN&JSa56
+ - MYSQL_DATABASE=halo
+
+ networks:
+ halo_network:
+ ```
+
+:::info MySQL 容器端口
+此示例的 MySQL 数据库容器默认没有设置端口映射,如果需要在容器外部访问数据库,可以自行在 `halodb` 服务中添加端口映射,MySQL 的端口为 `3306`。
+:::
+
+
+:::warning 不建议在生产环境使用 H2
+不推荐在生产环境使用默认的 H2 数据库,这可能因为操作不当导致数据文件损坏。如果因为某些原因(如内存不足以运行独立数据库)必须要使用,建议按时[备份数据](../../guide/use/backup.md)。
+:::
+
+```yaml {20} title="~/halo/docker-compose.yaml"
+services:
+ halo:
+ image: registry.fit2cloud.com/halo/halo-pro:2.26
+ restart: on-failure:3
+ volumes:
+ - ./halo2:/root/.halo2
+ ports:
+ - "8090:8090"
+ healthcheck:
+ test: ["CMD", "curl", "-f", "http://localhost:8090/actuator/health/readiness"]
+ interval: 30s
+ timeout: 5s
+ retries: 5
+ start_period: 30s
+ environment:
+ # JVM 参数,默认为 -Xmx256m -Xms256m,可以根据实际情况做调整,置空表示不添加 JVM 参数
+ - JVM_OPTS=-Xmx256m -Xms256m
+ command:
+ # 外部访问地址,请根据实际需要修改
+ - --halo.external-url=http://localhost:8090/
+```
+
+
+```yaml {5,13-20} title="~/halo/docker-compose.yaml"
+services:
+ halo:
+ image: registry.fit2cloud.com/halo/halo-pro:2.26
+ restart: on-failure:3
+ network_mode: "host"
+ volumes:
+ - ./halo2:/root/.halo2
+ environment:
+ # JVM 参数,默认为 -Xmx256m -Xms256m,可以根据实际情况做调整,置空表示不添加 JVM 参数
+ - JVM_OPTS=-Xmx256m -Xms256m
+ command:
+ # 修改为自己已有的 MySQL 配置
+ - --spring.r2dbc.url=r2dbc:pool:mysql://localhost:3306/halo
+ - --spring.r2dbc.username=root
+ - --spring.r2dbc.password=
+ - --spring.sql.init.platform=mysql
+ # 外部访问地址,请根据实际需要修改
+ - --halo.external-url=http://localhost:8090/
+ # 端口号 默认8090
+ - --server.port=8090
+```
+
+:::info 外部数据库需预先创建
+使用外部数据库时,需要提前手动创建好数据库,以 MySQL 为例:
+
+```sql
+create database halo character set utf8mb4 collate utf8mb4_bin;
+```
+:::
+
+
+
+运行参数详解:
+
+
+
+:::info 查看完整配置
+为了保持部署流程的简洁,此文档仅提供了必要的配置示例,完整的配置选项列表可查阅:[配置说明](./config.md)
+:::
+
+### 启动 Halo 服务
+
+```bash
+docker compose up -d
+```
+
+实时查看日志:
+
+```bash
+docker compose logs -f
+```
+
+### 测试访问
+
+用浏览器访问 /console 即可进入 Halo 管理页面,首次启动会进入初始化页面。
+
+:::tip 配置域名访问
+如果需要配置域名访问,建议先配置好反向代理以及域名解析再进行初始化。如果通过 `http://ip:端口号` 的形式无法访问,请到服务器厂商后台将运行的端口号添加到安全组,如果服务器使用了 Linux 面板,请检查此 Linux 面板是否有还有安全组配置,需要同样将端口号添加到安全组。
+:::
+
+### 激活许可证
+
+可以参考 [许可证激活](../use/activate.md) 进行激活,社区版无需此步骤。
+
+
+
+## 升级 Halo
+
+
+
+### 备份数据
+
+可以参考 [备份与恢复](../use/backup.md) 进行完整备份(可选,但推荐备份)。
+
+### 更新 Halo 服务
+
+修改 `docker-compose.yaml` 中配置的镜像版本。
+
+```yaml {3}
+services:
+ halo:
+ image: registry.fit2cloud.com/halo/halo-pro:2.26
+```
+
+```bash
+docker compose up -d
+```
+
+
+## 反向代理
+
+你可以在下面的反向代理软件中任选一项,我们假设你已经安装好了其中一项,并对其的基本操作有一定了解。如果你对它们没有任何了解,可以参考我们更为详细的反向代理文档:
+
+1. 使用 [Nginx Proxy Manager](../install/other/nginxproxymanager.md)
+2. 使用 [Traefik](../install/other/traefik.md)
+
+### Nginx
+
+```nginx {2,7,10}
+upstream halo {
+ server 127.0.0.1:8090;
+}
+server {
+ listen 80;
+ listen [::]:80;
+ server_name www.yourdomain.com;
+ client_max_body_size 1024m;
+ location / {
+ proxy_pass http://halo;
+ proxy_set_header HOST $host;
+ proxy_set_header X-Forwarded-Proto $scheme;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ }
+}
+```
+
+### Caddy 2
+
+```txt {1,5}
+www.yourdomain.com
+
+encode gzip
+
+reverse_proxy 127.0.0.1:8090
+```
+
+### Traefik
+
+更新 halo 容器组的配置
+
+1. `networks` 中引入已存在的网络 `traefik`(此网络需要 [提前创建](../install/other/traefik.md#创建-traefik))
+2. `services.halo.networks` 中添加网络 `traefik`
+3. 修改外部地址为你的域名
+4. 声明路由规则、开启 TLS
+
+```yaml {2-3,14,18,23-29}
+networks:
+ traefik:
+ external: true
+ halo:
+
+services:
+ halo:
+ image: registry.fit2cloud.com/halo/halo-pro:2.26
+ restart: on-failure:3
+ volumes:
+ - ./halo2:/root/.halo2
+ networks:
+ - traefik
+ - halo
+ command:
+ # 外部访问地址,请根据实际需要修改
+ - --halo.external-url=https://yourdomain.com
+ labels:
+ traefik.enable: "true"
+ traefik.docker.network: traefik
+ traefik.http.routers.halo.rule: Host(`yourdomain.com`)
+ traefik.http.routers.halo.tls: "true"
+ traefik.http.routers.halo.tls.certresolver: myresolver
+ traefik.http.services.halo.loadbalancer.server.port: 8090
+```
diff --git a/docs/guide/install/docker.mdx b/docs/guide/install/docker.mdx
new file mode 100644
index 00000000..506f61d6
--- /dev/null
+++ b/docs/guide/install/docker.mdx
@@ -0,0 +1,99 @@
+---
+title: 使用 Docker 部署
+description: 使用 Docker 单容器运行 Halo:镜像、端口映射与数据目录挂载要点。
+---
+
+import { Steps } from '@rspress/core/theme';
+import DockerArgs from "./slots/_docker-args.md"
+import DockerRegistryList from "./slots/_docker-registry-list.md"
+
+:::info 先阅读《写在前面》
+在继续操作之前,我们推荐您先阅读[《写在前面》](../prepare.md),这可以快速帮助你了解 Halo。
+:::
+
+:::warning 仅适合体验和测试
+此文档仅提供使用默认 H2 数据库的 Docker 运行方式,主要用于体验和测试,在生产环境我们不推荐使用 H2 数据库,这可能因为操作不当导致数据文件损坏。如果因为某些原因(如内存不足以运行独立数据库)必须要使用,建议按时[备份数据](../../guide/use/backup.md)。
+
+如果需要使用其他数据库部署,我们推荐使用 Docker Compose 部署:[使用 Docker Compose 部署](./docker-compose.mdx)
+:::
+
+## 环境搭建
+
+- Docker 安装文档:[https://docs.docker.com/engine/install/](https://docs.docker.com/engine/install/)
+
+## 部署 Halo
+
+### 镜像说明
+
+
+
+
+
+### 创建容器
+
+```bash
+docker run -it -d --name halo -p 8090:8090 -v ~/.halo2:/root/.halo2 -e JVM_OPTS="-Xmx256m -Xms256m" registry.fit2cloud.com/halo/halo-pro:2.26
+```
+
+:::info 默认使用 H2 数据库
+注意:此命令默认使用自带的 H2 Database 数据库。如需使用 PostgreSQL,请参考:[使用 Docker Compose 部署](./docker-compose.mdx)
+:::
+
+- **-it**:开启输入功能并连接伪终端
+- **-d**:后台运行容器
+- **--name**:为容器指定一个名称
+- **-p**:端口映射,格式为 `主机(宿主)端口:容器端口` ,可在 `application.yaml` 配置。
+- **-v**:工作目录映射。形式为:`-v 宿主机路径:/root/.halo2`,后者不能修改。
+
+运行参数详解:
+
+
+
+:::info 查看完整配置
+为了保持部署流程的简洁,此文档仅提供了必要的配置示例,完整的配置选项列表可查阅:[配置说明](./config.md)
+:::
+
+### 测试访问
+
+用浏览器访问 `/console` 即可进入 Halo 管理页面,首次启动会进入初始化页面。
+
+:::tip 初始化前配置访问地址
+如果需要配置域名访问,建议先配置好反向代理以及域名解析再进行初始化。如果通过 `http://ip:端口号` 的形式无法访问,请到服务器厂商后台将运行的端口号添加到安全组,如果服务器使用了 Linux 面板,请检查此 Linux 面板是否有还有安全组配置,需要同样将端口号添加到安全组。
+:::
+
+### 激活许可证
+
+可以参考 [许可证激活](../use/activate.md) 进行激活,社区版无需此步骤。
+
+
+
+## 升级 Halo
+
+
+
+### 备份数据
+
+可以参考 [备份与恢复](../use/backup.md) 进行完整备份(可选,但推荐备份)。
+
+### 拉取新版本镜像
+
+```bash
+docker pull registry.fit2cloud.com/halo/halo-pro:2.26
+```
+
+### 停止运行中的容器
+
+```bash
+docker stop halo
+docker rm halo
+```
+
+### 更新 Halo
+
+修改版本号后,按照最初安装的方式,重新创建容器即可。
+
+```bash
+docker run -it -d --name halo -p 8090:8090 -v ~/.halo2:/root/.halo2 -e JVM_OPTS="-Xmx256m -Xms256m" registry.fit2cloud.com/halo/halo-pro:2.26
+```
+
+
diff --git a/docs/guide/install/helm.mdx b/docs/guide/install/helm.mdx
new file mode 100644
index 00000000..e0519e15
--- /dev/null
+++ b/docs/guide/install/helm.mdx
@@ -0,0 +1,142 @@
+---
+title: 使用 Helm 部署
+description: 使用 Helm Chart 在 Kubernetes 集群中安装与升级 Halo 的说明。
+---
+
+import DockerArgs from "./slots/_docker-args.md"
+
+:::info 先阅读《写在前面》
+在继续操作之前,我们推荐您先阅读[《写在前面》](../prepare.md),这可以快速帮助你了解 Halo。
+:::
+
+## 先决条件
+
+1. 拥有可用的 1.19 或更高版本的 Kubernetes 集群
+2. 安装有 Helm 客户端 3.2 或更高的版本
+3. 指定 StorageClass 自动创建存储卷时需要底层存储驱动支持
+4. 用户对 Kubernetes 及 Helm 相关概念及如何使用有基本了解
+
+## 快速部署
+
+通过以下命令可以使用默认安装参数快速部署 Halo。默认参数下该 Chart 会自动部署 PostgreSQL 数据库给 Halo 使用,同时 Halo 工作目录及 PostgreSQL 数据目录通过指定 StorageClass 的方式自动创建存储卷进行持久化。
+
+```bash
+# 添加 Halo 项目的 Helm Charts 仓库
+helm repo add halo https://halo-sigs.github.io/charts/
+# 从 chart 仓库中更新本地可用chart的信息
+helm repo update
+# 使用默认参数,在当前的 Kubernetes namespace 中安装 Halo
+helm install halo halo/halo
+```
+
+命令执行成功后会返回类似下文中的提示,通过提示中的命令可以获取到 NodePort 方式的 Halo 访问地址及默认的控制台管理员用户名和密码。
+
+```text
+NAME: halo
+LAST DEPLOYED: Sun Jun 25 15:49:53 2023
+NAMESPACE: halo
+STATUS: deployed
+REVISION: 1
+TEST SUITE: None
+NOTES:
+CHART NAME: halo
+CHART VERSION: 1.1.0
+APP VERSION: 2.6.1
+
+** Please be patient while the chart is being deployed **
+
+Your Halo site can be accessed through the following DNS name from within your cluster:
+
+ halo.halo.svc.cluster.local (port 80)
+
+To access your Halo site from outside the cluster follow the steps below:
+
+1. Get the Halo URL by running these commands:
+
+ export NODE_PORT=$(kubectl get --namespace halo -o jsonpath="{.spec.ports[0].nodePort}" services halo)
+ export NODE_IP=$(kubectl get nodes --namespace halo -o jsonpath="{.items[0].status.addresses[0].address}")
+ echo "Halo URL: http://$NODE_IP:$NODE_PORT/"
+ echo "Halo Console URL: http://$NODE_IP:$NODE_PORT/console"
+
+2. Open a browser and access Halo using the obtained URL.
+
+3. Login with the following credentials below to see your site:
+
+ echo Username: admin
+ echo Password: $(kubectl get secret --namespace halo halo -o jsonpath="{.data.halo-password}" | base64 -d)
+```
+
+:::info 默认 PostgreSQL 参数
+- 使用 Halo Helm Chart 仓库中 [values.yaml](https://github.com/halo-sigs/charts/blob/main/charts/halo/values.yaml) 文件中的默认参数进行安装;
+- 关于 PostgreSQL 数据库的更多参数说明,请参考 [Bitnami PostgreSQL Chart](https://github.com/bitnami/charts/tree/main/bitnami/postgresql#parameters),在原有参数格式上增加 `postgresql.` 前缀即可。
+
+:::
+
+## 卸载
+
+使用命令 `helm uninstall halo` 可卸载已安装的 Halo 应用,其中 `halo` 为安装时指定的 Halo 应用名称。
+
+:::warning 卸载前备份数据
+卸载应用前请确认数据库及 Halo 工作空间中的文件已进行备份或不再需要。
+:::
+
+## 使用 MySQL 数据库
+
+当用户希望使用 MySQL 数据库而非默认的 PostgreSQL 数据库时,可以参考以下命令进行部署。
+
+```bash
+helm install halo halo/halo --set mysql.enabled=true --set postgresql.enabled=false
+```
+
+:::info 自动安装 MySQL 参数
+- `mysql.enabled=true`:自动安装 MySQL 数据库;
+- `postgresql.enabled=false`:不自动安装 PostgreSQL 数据库;
+- 关于 mysql 的更多参数说明,请参考 [Bitnami MySQL Chart](https://github.com/bitnami/charts/tree/main/bitnami/mysql#parameters),在原有参数格式上增加 `mysql.` 前缀即可。
+
+:::
+
+## 使用已有的数据库
+
+当用户希望使用已有的数据库而非自动安装新数据库时,可以参考以下命令进行部署。
+
+```bash
+helm install halo halo/halo \
+ --set mysql.enabled=false \
+ --set postgresql.enabled=false \
+ --set externalDatabase.platform=mysql \
+ --set externalDatabase.host=mysql \
+ --set externalDatabase.port=3306 \
+ --set externalDatabase.user=halo \
+ --set externalDatabase.password=0P0gJrCyzz \
+ --set externalDatabase.database=halo
+```
+
+:::info 外部数据库参数
+- `mysql.enabled=false`:不自动安装 MySQL 数据库;
+- `postgresql.enabled=false`:不自动安装 PostgreSQL 数据库;
+- `externalDatabase.platform=mysql`:外部数据库类型,例如 `postgresql`、`mysql`;
+- `externalDatabase.host=mysql`:外部数据库连接地址;
+- `externalDatabase.port=3306`:外部数据库连接端口;
+- `externalDatabase.user=halo`:外部数据库用户名;
+- `externalDatabase.password=0P0gJrCyzz`:外部数据库密码;
+- `externalDatabase.database=halo`:外部数据库库名;
+
+:::
+
+## 创建 Ingress
+
+当用户希望通过 Ingress 将 Halo 应用暴露到 Kubernetes 集群外进行访问时,可以参考以下安装参数。
+
+```bash
+helm install halo halo/halo --set ingress.enabled=true --set ingress.hostname=demo.halo.run
+```
+
+对于已有的 Halo 应用,可以通过如下命令更新应用参数,为 Halo 应用创建 Ingress。
+
+```bash
+helm upgrade halo halo/halo --set ingress.enabled=true --set ingress.hostname=demo.halo.run
+```
+
+## 其他参数
+
+完整参数列表请参考 Halo 项目的 [Helm Chart 仓库](https://github.com/halo-sigs/charts#parameters)。
diff --git a/docs/guide/install/index.md b/docs/guide/install/index.md
new file mode 100644
index 00000000..e65bd838
--- /dev/null
+++ b/docs/guide/install/index.md
@@ -0,0 +1,5 @@
+---
+title: 安装 Halo
+description: 在 Docker、Docker Compose、1Panel、宝塔面板、Helm、Podman 或 JAR 环境中部署 Halo,并完成数据库、反向代理和运行参数配置。
+overview: true
+---
diff --git a/docs/guide/install/jar-file.mdx b/docs/guide/install/jar-file.mdx
new file mode 100644
index 00000000..9bfe4123
--- /dev/null
+++ b/docs/guide/install/jar-file.mdx
@@ -0,0 +1,340 @@
+---
+title: 使用 JAR 文件部署
+description: 使用 JAR 与 Java 运行 Halo:数据库要求、启动参数与生产环境建议。
+---
+
+import { Steps } from '@rspress/core/theme';
+
+:::info 先阅读《写在前面》
+在继续操作之前,我们推荐您先阅读[《写在前面》](../prepare.md),这可以快速帮助你了解 Halo。
+:::
+
+## 依赖检查
+
+在开始之前,需要确保服务器已经满足以下条件:
+
+1. [Java](https://openjdk.org) 环境,版本要求:
+ - 2.21 以上版本:**JRE 21**
+ - 2.20 及以下版本:**JRE 17**
+2. 数据库(任一)
+ - [MySQL 5.7+](https://www.mysql.com)
+ - [MariaDB](https://mariadb.org)
+ - [PostgreSQL](https://www.postgresql.org)
+
+由于 Linux 发行版本的差异以及包管理器的不同,此文档不会涉及到如何安装 Java 环境以及数据库,建议查阅对应依赖的官方文档进行安装。
+
+## 安装
+
+
+
+### 创建新的系统用户
+
+:::info 不建议使用 root 用户运行
+我们不推荐直接使用系统 root 用户来运行 Halo。如果你需要直接使用 root 用户,请跳过这一步。
+:::
+
+创建一个名为 halo 的用户(名字可以随意)
+
+```bash
+useradd -m halo
+```
+
+为 halo 用户创建密码
+
+```bash
+passwd halo
+```
+
+登录到 halo 账户
+
+```bash
+su - halo
+```
+
+### 创建存放运行包的目录
+
+> 这里以 `~/app` 为例
+
+```bash
+mkdir ~/app && cd ~/app
+```
+
+### 下载运行包
+
+:::info 选择对应版本的 JAR 文件
+Halo 主要区分为[社区版和付费版](../prepare.md#发行版本),这两个版本使用不同的 JAR 文件,以下是 JAR 文件下载地址:
+1. [https://download.halo.run](https://download.halo.run)
+2. [GitHub Releases(社区版)](https://github.com/halo-dev/halo/releases)
+
+后续文档将使用 `halo-pro-.jar` 为例,如果需要使用社区版,将 `halo-pro` 改为 `halo` 即可。
+:::
+
+```bash
+wget https://dl.halo.run/release/halo-pro-2.26.0.jar -O halo.jar
+```
+
+### 创建 [工作目录](../prepare#工作目录)
+
+```bash
+mkdir ~/.halo2 && cd ~/.halo2
+```
+
+### 创建 Halo 配置文件
+
+```bash
+vim application.yaml
+```
+
+将以下内容复制到 `application.yaml` 中,根据下面的配置说明进行配置。
+
+```yaml title="application.yaml"
+server:
+ # 运行端口
+ port: 8090
+spring:
+ # 数据库配置,支持 MySQL、MariaDB、PostgreSQL、H2 Database,具体配置方式可以参考下面的数据库配置
+ r2dbc:
+ url: r2dbc:h2:file:///${halo.work-dir}/db/halo-next?MODE=MySQL&DB_CLOSE_ON_EXIT=FALSE
+ username: admin
+ password: 123456
+ sql:
+ init:
+ mode: always
+ # 需要配合 r2dbc 的配置进行改动
+ platform: h2
+halo:
+ # 工作目录位置
+ work-dir: ${user.home}/.halo2
+ # 外部访问地址
+ external-url: http://localhost:8090
+ # 附件映射配置,通常用于迁移场景
+ attachment:
+ resource-mappings:
+ - pathPattern: /upload/**
+ locations:
+ - migrate-from-1.x
+```
+
+数据库配置说明:
+
+| 参数名 | 描述 |
+| -------------------------- | --------------------------------------------------------------------- |
+| `spring.r2dbc.url` | 数据库连接地址,详细可查阅下方的 `配置对应关系` |
+| `spring.r2dbc.username` | 数据库用户名 |
+| `spring.r2dbc.password` | 数据库密码 |
+| `spring.sql.init.platform` | 数据库平台名称,支持 `postgresql`、`mysql`、`mariadb`、`h2` |
+
+配置对应关系:
+
+| 链接方式 | 链接地址格式 | `spring.sql.init.platform` |
+| ------------------ | ---------------------------------------------------------------------------------- | -------------------------- |
+| PostgreSQL(推荐) | `r2dbc:pool:postgresql://{HOST}:{PORT}/{DATABASE}` | postgresql |
+| MySQL | `r2dbc:pool:mysql://{HOST}:{PORT}/{DATABASE}` | mysql |
+| MariaDB | `r2dbc:pool:mariadb://{HOST}:{PORT}/{DATABASE}` | mariadb |
+| H2 Database | `r2dbc:h2:file:///${halo.work-dir}/db/halo-next?MODE=MySQL&DB_CLOSE_ON_EXIT=FALSE` | h2 |
+
+:::info 数据库连接参数
+- HOST:数据库服务地址,如 `localhost`
+- PORT:数据库服务端口,如 `3306`
+- DATABASE:数据库名称,如 `halo`,需要提前创建,以 MySQL 为例:
+
+ ```sql
+ create database halo character set utf8mb4 collate utf8mb4_bin;
+ ```
+
+:::
+
+:::warning 不建议在生产环境使用 H2
+不推荐在生产环境使用默认的 H2 数据库,这可能因为操作不当导致数据文件损坏。如果因为某些原因(如内存不足以运行独立数据库)必须要使用,建议按时[备份数据](../../guide/use/backup.md)。
+:::
+
+:::info 查看完整配置
+为了保持部署流程的简洁,此文档仅提供了必要的配置示例,完整的配置选项列表可查阅:[配置说明](./config.md)
+:::
+
+配置完成之后,保存即可。
+
+### 测试运行 Halo
+
+```bash
+cd ~/app && java -Dfile.encoding=UTF-8 -jar halo.jar --spring.config.additional-location=optional:file:$HOME/.halo2/
+```
+
+:::tip 自定义工作目录
+如果指定了其他工作目录,请将 `$HOME/.halo2/` 替换为相应的绝对路径,并确保路径末尾带有 `/`。
+:::
+
+### 测试访问
+
+如果没有观察到异常日志,即可尝试访问 Halo
+
+打开 `http://ip:端口号` 即可跳转到初始化页面。
+
+:::info 测试运行不会持续
+如测试启动正常,请继续看[作为服务运行](#作为服务运行)部分,第 8 步仅仅作为测试。当你关闭 ssh 连接之后,服务会停止。你可使用 CTRL+C 停止运行测试进程。
+:::
+
+:::tip 初始化前配置访问地址
+如果需要配置域名访问,建议先配置好反向代理以及域名解析再进行初始化。如果通过 `http://ip:端口号` 的形式无法访问,请到服务器厂商后台将运行的端口号添加到安全组,如果服务器使用了 Linux 面板,请检查此 Linux 面板是否有还有安全组配置,需要同样将端口号添加到安全组。
+:::
+
+### 激活许可证
+
+可以参考 [许可证激活](../../guide/use/activate.md) 进行激活,社区版无需此步骤。
+
+
+
+## 作为服务运行
+
+下面将介绍如何将 Halo 作为服务运行,以实现在关闭 ssh 连接后,Halo 仍然可以正常运行。
+
+此文档以 Systemd 为例,也可以参考:[Installing Spring Boot Applications](https://docs.spring.io/spring-boot/docs/current/reference/html/deployment.html#deployment.installing)
+
+
+
+### 切换账户
+
+退出 halo 账户,登录到 root 账户
+
+> 如果当前就是 root 账户,请略过此步骤。
+
+```bash
+exit
+```
+
+### 创建 halo.service 文件
+
+```bash
+vim /etc/systemd/system/halo.service
+```
+
+将以下内容复制到 `halo.service` 中,根据下面的配置说明进行配置。
+
+```ini {9,10} title="/etc/systemd/system/halo.service"
+[Unit]
+Description=Halo Service
+Documentation=https://docs.halo.run
+After=network-online.target
+Wants=network-online.target
+
+[Service]
+Type=simple
+User=USER
+ExecStart=/usr/bin/java -Dfile.encoding=UTF-8 -server -Xms256m -Xmx256m -jar JAR_PATH --spring.config.additional-location=optional:file:/home/halo/.halo2/
+ExecStop=/bin/kill -s QUIT $MAINPID
+Restart=always
+StandardOutput=syslog
+StandardError=inherit
+
+[Install]
+WantedBy=multi-user.target
+```
+
+- **JAR_PATH**:Halo 运行包的绝对路径,例如 `/home/halo/app/halo.jar`,注意:此路径不支持 `~` 符号。
+- **USER**:运行 Halo 的系统用户,如果有按照上方教程创建新的用户来运行 Halo,修改为你创建的用户名称即可。反之请删除 `User=USER`。
+
+:::tip 确认 Java 路径与启动命令
+请确保 `/usr/bin/java` 是正确无误的。建议将 `ExecStart` 中的命令复制出来运行一下,保证命令有效。如果指定了其他工作目录,请像上面一样改动。
+:::
+
+配置完成之后,保存即可。
+
+### 重新加载 systemd
+
+```bash
+systemctl daemon-reload
+```
+
+### 运行服务
+
+```bash
+systemctl start halo
+```
+
+### 在系统启动时启动服务
+
+```bash
+systemctl enable halo
+```
+
+最后,你可以通过下面的命令查看服务日志:
+
+```bash
+journalctl -n 20 -u halo
+```
+
+
+
+## 版本升级
+
+
+
+### 备份数据
+
+可以参考 [备份与恢复](../../guide/use/backup.md) 进行完整备份(可选,但推荐备份)。
+
+### 停止 Halo 服务
+
+```bash
+service halo stop
+```
+
+### 下载新版本
+
+下载新版本的 Halo 运行包,覆盖原有的运行包
+
+```bash
+wget https://dl.halo.run/release/halo-pro-2.26.0.jar -O /home/halo/app/halo.jar
+```
+
+:::info Halo 运行包下载地址
+以下是官方维护的下载地址:
+1. [https://download.halo.run](https://download.halo.run)
+2. [GitHub Releases(社区版)](https://github.com/halo-dev/halo/releases)
+
+:::
+
+### 启动 Halo 服务
+
+```bash
+service halo start
+```
+
+
+
+## 反向代理
+
+你可以在下面的反向代理软件中任选一项,我们假设你已经安装好了其中一项,并对其的基本操作有一定了解。如果你对它们没有任何了解,可以参考我们更为详细的反向代理文档:
+
+1. 使用 [Nginx Proxy Manager](../install/other/nginxproxymanager.md)
+
+### Nginx
+
+```nginx {2,7,10}
+upstream halo {
+ server 127.0.0.1:8090;
+}
+server {
+ listen 80;
+ listen [::]:80;
+ server_name www.yourdomain.com;
+ client_max_body_size 1024m;
+ location / {
+ proxy_pass http://halo;
+ proxy_set_header HOST $host;
+ proxy_set_header X-Forwarded-Proto $scheme;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ }
+}
+```
+
+### Caddy 2
+
+```txt {1,5}
+www.yourdomain.com
+
+encode gzip
+
+reverse_proxy 127.0.0.1:8090
+```
diff --git a/docs/guide/install/offline.mdx b/docs/guide/install/offline.mdx
new file mode 100644
index 00000000..6983ebc8
--- /dev/null
+++ b/docs/guide/install/offline.mdx
@@ -0,0 +1,102 @@
+---
+title: 使用离线包部署
+description: 在无公网或受限网络环境使用离线包部署 Halo 的步骤说明。
+---
+
+import DockerArgs from "./slots/_docker-args.md"
+import DockerRegistryList from "./slots/_docker-registry-list.md"
+
+:::info 先阅读《写在前面》
+在继续操作之前,我们推荐您先阅读[《写在前面》](../prepare.md),这可以快速帮助你了解 Halo。
+:::
+
+Halo 离线安装包使用 Docker + Docker Compose 的方式部署 Halo 及其他服务,安装包中内置了 Docker 程序和容器镜像文件,可以帮助用户在无法访问互联网的服务器上,完成 Halo 的安装部署。
+
+## 下载安装包
+
+请自行前往[飞致云开源社区](https://community.fit2cloud.com/#/products/halo/downloads)下载 Halo 最新版本的安装包,并复制到目标机器的 /tmp 目录下。
+
+## 安装部署
+
+### 解压安装包
+
+以 root 用户 ssh 登录到目标机器,并执行如下命令:
+
+```bash
+cd /tmp
+# 解压安装包(halo-offline-installer-v2.17.0-amd64.tar.gz 为示例安装包名称,操作时可根据实际安装包名称替换)
+tar zxvf halo-offline-installer-v2.17.0-amd64.tar.gz
+```
+
+:::info 离线安装包目录结构
+安装包目录说明
+
+```tree
+├── docker # 离线安装 Docker 使用到的文件
+│ ├── bin
+│ │ ├── containerd
+│ │ ├── containerd-shim-runc-v2
+│ │ ├── ctr
+│ │ ├── docker
+│ │ ├── docker-compose
+│ │ ├── dockerd
+│ │ ├── docker-init
+│ │ ├── docker-proxy
+│ │ └── runc
+│ └── service
+│ └── docker.service
+├── docker-compose.yaml # 包含 Halo 及数据库服务的 Docker Compose 文件
+├── .env # Docker Compose 文件使用的变量声明文件,部分参数从该文件中读取
+├── images # Halo 及数据库的容器镜像文件
+│ ├── halo.tar.gz
+│ ├── mysql.tar.gz
+│ └── postgres.tar.gz
+├── install.sh # 安装脚本
+├── LICENSE
+└── README.md
+```
+
+:::
+
+### 执行安装脚本
+
+```bash
+# 进入安装包目录(halo-offline-installer-v2.17.0-amd64 为示例安装包目录名称,操作时可根据实际安装包名称替换)
+cd halo-offline-installer-v2.17.0-amd64
+
+# 运行安装脚本
+/bin/bash install.sh
+```
+
+根据脚本给出的提示,输入安装目录、服务端口、数据库信息等相关配置信息,等待脚本执行完成。
+
+:::info 默认安装目录结构
+假设采用默认安装位置 /opt/halo 完成安装,安装目录的文件结构如下:
+
+```tree
+├── data # 数据存储目录
+│ ├── db # 数据库数据存储目录,挂载至数据库容器
+│ └── halo # Halo 数据存储目录,挂载至 Halo 容器
+│ ├── indices
+│ ├── keys
+│ ├── logs
+│ ├── plugins
+│ └── themes
+├── docker-compose.yaml # Docker Compose 文件
+├── .env # Docker Compose 文件使用的变量声明文件,部分参数从该文件中读取
+├── install.log # 安装脚本日志文件
+├── LICENSE
+└── README.md
+```
+
+安装完成后,可以直接进入 /opt/halo 目录,使用 docker-compose 命令完成后续维护操作,也可以修改 docker-compose.yaml 中的相关配置满足不同需求。
+
+运行参数详解:
+
+
+
+:::
+
+### 登录访问
+
+用浏览器访问 /console 即可进入 Halo 管理页面,首次启动会进入初始化页面。
diff --git a/docs/guide/install/other/index.md b/docs/guide/install/other/index.md
new file mode 100644
index 00000000..399bfcf4
--- /dev/null
+++ b/docs/guide/install/other/index.md
@@ -0,0 +1,5 @@
+---
+title: 其他指南
+description: 为已部署的 Halo 配置 Traefik 或 Nginx Proxy Manager 反向代理,完成域名转发、HTTPS 路由与 SSL 证书管理。
+overview: true
+---
diff --git a/docs/guide/install/other/nginxproxymanager.md b/docs/guide/install/other/nginxproxymanager.md
new file mode 100644
index 00000000..a080f15a
--- /dev/null
+++ b/docs/guide/install/other/nginxproxymanager.md
@@ -0,0 +1,244 @@
+---
+title: Nginx Proxy Manager 反向代理
+description: 使用 Nginx Proxy Manager 为 Halo 配置域名转发与 SSL 证书说明。
+---
+
+## Halo 部署
+
+参见 [使用 Docker Compose 部署](../docker-compose.mdx)
+
+:::info 跳过 Halo 反向代理配置
+`「反向代理」` 部分不进行操作,保证 Halo 服务运行无误即可。
+:::
+
+## 简介
+
+Nginx Proxy Manager 是一个可视化的 Nginx 反向代理管理器,支持在 Web UI 上管理反向代理的网站,支持申请免费的 SSL 证书并自动续签。
+
+接下来会介绍如何使用 Nginx Proxy Manager 来反向代理 Halo,以下的 Nginx 安装方式均来自于 [Nginx Proxy Manager 官方文档](https://nginxproxymanager.com/guide/)。在开始之前,建议先阅读一遍官方文档,需要对其有一定的了解。
+
+## 说明
+
+- 此文档需要对 Docker 和 Docker Compose 有一定的熟悉程度,并且已经提前在服务器上安装
+- 在安装 Nginx Proxy Manager 之前,需要确保服务器没有其他占用了 80 和 443 端口的服务
+- 需要对 Vim 有一定的熟悉程度
+- 下文使用 NPM 简称 Nginx Proxy Manager
+
+## 安装 Nginx Proxy Manager
+
+首先,我们创建一个文件夹来存放 NPM 的 `docker-compose.yml` 文件:
+
+```bash
+mkdir npm && cd npm
+vim docker-compose.yml
+```
+
+将下面的内容复制到 `docker-compose.yml` 文件:
+
+```yaml
+services:
+ npm:
+ image: 'jc21/nginx-proxy-manager:latest'
+ networks:
+ - npm
+ restart: unless-stopped
+ ports:
+ - '80:80' # Nginx 的 80 端口
+ - '443:443' # Nginx 的 443 端口
+ - '81:81' # Nginx Proxy Manager 的管理端口
+ volumes:
+ - ./data:/data
+ - ./letsencrypt:/etc/letsencrypt
+
+# 定义网络以便 NPM 与其他容器通信
+networks:
+ npm:
+ name: npm
+ attachable: true
+```
+
+:::info 提前开放所需端口
+配置中提到的 80、443、81 端口需要提前在服务器提供商开放端口。
+:::
+
+启动 NPM:
+
+```bash
+docker compose up -d
+```
+
+在服务正常启动的情况下,现在已经可以通过 `http://{服务器公网 IP}:81` 访问 NPM 的网页端了。
+
+:::info 无法访问时检查 81 端口
+如果无法通过端口访问到 NPM,可以检查是否在服务器提供商开放了 `81` 端口。
+:::
+
+
+
+首次进入页面会提示创建管理员账户,需要注意的是:**邮箱一定要是合法邮箱,后续涉及到 SSL 证书签发**。
+
+至此,我们已经完成了 Nginx Proxy Manager 的搭建,之后就可以用它给我们的 Halo 或者其他 Web 应用做反向代理了。
+
+## 配置 Halo 的反向代理
+
+1. 配置 Halo 的 Docker 编排,需要将 `npm` 的网络加入到 Halo 的容器,之后就可以使用 Halo 的服务名作为 `hostname` 在 NPM 的内部进行反向代理了。
+
+ ```yaml {3-5,16-17}
+ # 省略
+ networks:
+ # 加入 npm 网络
+ npm:
+ external: true
+ halo:
+
+ services:
+ halo:
+ image: registry.fit2cloud.com/halo/halo-pro:2.26
+ container_name: halo
+ restart: on-failure:3
+ volumes:
+ - ./halo2:/root/.halo2
+ networks:
+ # 加入 npm 网络
+ - npm
+ - halo
+ # 省略
+ ```
+
+ 配置完成之后,需要使用 `docker compose up -d` 命令重建 Halo 容器。
+2. 进入 NPM 仪表盘,点击代理服务进入代理服务配置页面。
+
+ 
+3. 添加代理配置
+
+ 
+
+ 1. **域名**:配置想要代理到 Halo 的域名,需要提前在域名服务商解析到当前服务器
+ 2. **协议**:选择 http
+ 3. **转发主机名 / IP**:填写 Halo 容器的服务名,比如上方示例中的 `halo`
+ 4. **转发端口**:8090
+
+ 以上配置为必须修改,界面中的其他配置可以按需选择,但其中的**缓存资源**不建议打开,可能不会完全遵守 Halo 的缓存策略。
+
+ 配置完成之后,就可以尝试访问域名。
+4. 配置 SSL,点击 SSL 选项卡,勾选 **申请新证书** 之后保存即可,同时建议勾选 **强制 SSL**,这样在访问 http 协议的地址时会自动跳转到 https 协议的地址。
+
+ 
+
+至此,我们已经完成了在 Nginx Proxy Manager 配置 Halo 反向代理并添加 SSL 证书的全过程。
+
+## 进阶配置:性能与安全(可选)
+
+前文已完成基础反向代理与 SSL,对大多数博客已经够用。本节介绍在 NPM 中追加性能优化与安全响应头配置,两个目标:
+
+- **性能**:让 JavaScript、字体、JSON 等静态资源也参与 gzip 压缩;调大 proxy buffer 避免响应落盘
+- **安全**:补齐 [securityheaders.com](https://securityheaders.com) 认可的安全响应头,默认可拿到 A 评级
+
+:::info 通用反向代理优化
+本节所有配置均为反代层通用优化,与具体主题无关,适用于任何 Halo 实例。
+:::
+
+### 在 NPM 中找到自定义配置入口
+
+1. 进入 NPM 仪表盘,在 Hosts → Proxy Hosts 点开 Halo 的代理记录进行编辑
+2. 切换到 **Advanced** 标签页
+3. 把下面的内容粘贴到 **Custom Nginx Configuration** 文本框
+4. 保存后 NPM 会自动 reload nginx,无需重建容器
+
+### 推荐的自定义配置
+
+```nginx
+# ---- gzip 压缩:补齐 NPM 默认未覆盖的 JS、字体、JSON 等 MIME 类型 ----
+gzip on;
+gzip_vary on;
+gzip_proxied any;
+gzip_comp_level 6;
+gzip_min_length 1024;
+gzip_types
+ text/css
+ text/javascript
+ application/javascript
+ application/x-javascript
+ application/json
+ application/xml
+ application/rss+xml
+ application/atom+xml
+ image/svg+xml
+ font/ttf
+ font/otf
+ font/woff
+ font/woff2;
+# 若目录下存在 .gz 预压缩文件则优先使用
+gzip_static on;
+
+# ---- proxy buffer:避免较大响应被临时写入磁盘 ----
+proxy_buffers 16 32k;
+proxy_buffer_size 64k;
+proxy_busy_buffers_size 128k;
+
+# ---- 安全响应头:加 always 确保错误页也会返回 ----
+add_header X-Content-Type-Options "nosniff" always;
+add_header X-Frame-Options "SAMEORIGIN" always;
+add_header X-XSS-Protection "1; mode=block" always;
+add_header Referrer-Policy "strict-origin-when-cross-origin" always;
+add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;
+# HSTS 请在确认 HTTPS 稳定运行后再启用,见下文说明
+# add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
+
+# ---- RSS 路径别名:Halo 默认 RSS 为 /rss.xml ----
+rewrite ^/rss$ /rss.xml permanent;
+rewrite ^/feed$ /rss.xml permanent;
+```
+
+:::tip 避免重复声明 text/html
+`gzip_types` 不要再列 `text/html`,nginx 默认已经对其启用 gzip,重复声明会产生 `duplicate MIME type` 警告。
+:::
+
+### 关于 HSTS
+
+`Strict-Transport-Security` 会告诉浏览器未来只能通过 HTTPS 访问当前域名。一旦启用且 `max-age` 较长,浏览器会缓存该策略直到过期,期间无法回退到 HTTP。因此建议:
+
+- 在 HTTPS 证书可正常续签、基础设施稳定运行 1–2 周后再启用
+- 先从 `max-age=300`(5 分钟)起步验证,确认无误再逐步调大到 `63072000`(2 年)
+- `preload` 表示提交到浏览器内置 HSTS 列表,**提交后撤销非常困难**,确有必要再加
+
+### 验证配置是否生效
+
+```bash
+# 查看安全响应头
+curl -I https://your-halo-domain.example.com/ \
+ | grep -iE "x-content-type|x-frame|x-xss|referrer-policy|permissions-policy"
+
+# 检查 JavaScript 是否启用了 gzip
+curl -IH "Accept-Encoding: gzip" \
+ https://your-halo-domain.example.com/themes//source/main.js \
+ | grep -i content-encoding
+```
+
+浏览器侧也可以在 DevTools → Network → Response Headers 中确认。
+
+### 常见问题
+
+#### 能拿到 securityheaders.com A+ 吗?
+
+上面的配置能稳定拿到 **A 评级**。追求 **A+** 的硬指标是配置 `Content-Security-Policy`(CSP),在博客场景下收益较低:
+
+- 多数 Halo 主题依赖若干第三方 CDN(字体、评论系统、统计、表情等),每个都需要加入 CSP 白名单
+- 主题模板中常见内联脚本,需使用 `'unsafe-inline'`(会明显削弱 CSP 的价值)或改造为 nonce 模式
+- 管理后台「代码注入」功能注入的脚本同样受 CSP 约束,白名单收敛难度较高
+
+如确有 A+ 需求,建议按以下路径落地:
+
+1. 先使用 `Content-Security-Policy-Report-Only`,不阻断页面,仅在浏览器控制台打印违规
+2. 观察 1–2 周,根据 violation 报告收敛白名单
+3. 白名单稳定后再转为生产 `Content-Security-Policy`
+
+作为参考,GitHub 本身的 securityheaders.com 评级也是 A,对博客类站点而言 A 已足够。
+
+#### NPM 界面中的「缓存资源」开关要开启吗?
+
+建议保持关闭。Halo 自身已通过 `ETag`、`Last-Modified` 等机制对静态资源提供合理的缓存策略,NPM 层再叠一层缓存可能导致主题升级或资源替换后不能立即生效。性能提升主要来自本节的 gzip 与 proxy buffer 优化。
+
+#### 为什么要调大 proxy buffer?
+
+NPM 默认的 proxy buffer 较小,当 Halo 返回的响应体超过 buffer 总量时,nginx 会把剩余数据临时写入磁盘后再转发。调大到 `16 32k`(共 512 KB)能覆盖绝大多数 HTML/JSON 响应,避免磁盘 I/O 成为瓶颈。
diff --git a/docs/guide/install/other/traefik.md b/docs/guide/install/other/traefik.md
new file mode 100644
index 00000000..df5fa85a
--- /dev/null
+++ b/docs/guide/install/other/traefik.md
@@ -0,0 +1,128 @@
+---
+title: Traefik 反向代理
+description: Traefik 为 Halo 提供反向代理与 HTTPS 的路由与证书配置说明。
+---
+
+## Halo 部署
+
+参见 [使用 Docker Compose 部署](../docker-compose.mdx)
+
+:::info 跳过 Halo 反向代理配置
+`「反向代理」` 部分不进行操作,保证 Halo 服务运行无误即可。
+:::
+
+## 简介
+
+[Traefik](https://traefik.io/traefik/) 是一款开源的反向代理与负载均衡工具,它监听后端的变化并自动更新服务配置。
+
+它与传统反向代理最大的区别,是支持声明式的动态路由规则,大大简化网关规则的配置。而且还有诸多实用特性,例如:健康检查、多实例负载均衡、能够实现 Let's Encrypt 证书的自动签发、验证与续期等等。
+
+## 创建 Traefik
+
+下面的配置中,创建了 Traefik 实例。并且做了基础的几项配置:
+
+1. 监听了宿主机的 80、443 端口,并自动将 80 端口的请求重定向到 443 端口。[文档](https://doc.traefik.io/traefik/routing/entrypoints/)
+2. 开启 Docker 服务发现,监听检测 Docker 容器声明的服务关系。[文档](https://doc.traefik.io/traefik/providers/docker/#provider-configuration)
+3. 开启 Traefik Dashboard,建议使用二级域名的形式(示例:`traefik.yourdomain.com`)。[文档](https://doc.traefik.io/traefik/operations/dashboard/#dashboard-router-rule)
+4. 开启证书自动生成,通过 ACME 自动管理 TLS 证书的申请、校验与续期。[文档](https://doc.traefik.io/traefik/https/acme/)
+
+:::warning 持久化 ACME 证书
+ACME 证书 (`/acme.json`) 一定要 [持久化](https://doc.traefik.io/traefik/https/acme/#storage),否则每次重启 Traefik 服务,都会去申请签发证书。可能会触发 Let's
+Encrypt 的 [速率限制](https://letsencrypt.org/zh-cn/docs/rate-limits/),导致签名的域名一段时间内无法签发新的证书。
+:::
+
+创建工作目录、Compose 文件和 ACME 证书存储文件:
+
+```bash
+mkdir -p ~/traefik && cd ~/traefik
+touch acme.json && chmod 600 acme.json
+vim docker-compose.yaml
+```
+
+```yaml {17,28-30,34,40} showLineNumbers
+networks:
+ traefik:
+ name: traefik
+ attachable: true
+
+services:
+ traefik:
+ image: traefik:v2.9
+ container_name: traefik
+ networks:
+ - traefik
+ ports:
+ - "80:80"
+ - "443:443"
+ volumes:
+ - /var/run/docker.sock:/var/run/docker.sock
+ - ./acme.json:/acme.json
+ command: >
+ --api.dashboard=true
+ --entrypoints.web.address=:80
+ --entrypoints.websecure.address=:443
+ --entrypoints.web.http.redirections.entrypoint.to=websecure
+ --entrypoints.web.http.redirections.entrypoint.scheme=https
+ --providers.docker=true
+ --providers.docker.endpoint=unix:///var/run/docker.sock
+ --providers.docker.watch=true
+ --providers.docker.exposedByDefault=false
+ --certificatesResolvers.myresolver.acme.httpChallenge.entryPoint=web
+ --certificatesresolvers.myresolver.acme.email=your-mail@mail.com
+ --certificatesresolvers.myresolver.acme.storage=/acme.json
+ labels:
+ traefik.enable: "true"
+ traefik.docker.network: traefik
+ traefik.http.routers.dashboard.rule: Host(`traefik.yourdomain.com`)
+ traefik.http.routers.dashboard.tls: "true"
+ traefik.http.routers.dashboard.tls.certresolver: myresolver
+ traefik.http.routers.dashboard.service: "api@internal"
+ traefik.http.routers.dashboard.middlewares: auth
+ # 账号密码 admin/P@88w0rd 生成 echo $(htpasswd -nb user password) | sed -e s/\\$/\\$\\$/g
+ traefik.http.middlewares.auth.basicauth.users: "admin:$$apr1$$q8q0qpzT$$lvzMP7VYd9EUcG/wkIsAN."
+```
+
+保存配置后启动 Traefik:
+
+```bash
+docker compose up -d
+```
+
+## 配置 Halo 的反向代理
+
+这里以最简配置(h2 数据库)Halo 服务的 Docker 配置举例。只需做以下调整:
+
+1. 顶层 `networks` 中添加了外部网络 `traefik`
+2. `services.halo.networks` 中添加了 `traefik` 网络
+3. `services.halo.labels` 中声明了 Traefik 配置
+ 1. 路由规则为 `yourdomain.com`
+ 2. 开启 TLS
+ 3. 指定了服务端口为 8090
+
+```yaml {2-3,13-15,18,20-25} showLineNumbers
+networks:
+ traefik:
+ external: true
+ halo:
+
+services:
+ halo:
+ image: registry.fit2cloud.com/halo/halo-pro:2.26
+ container_name: halo
+ restart: on-failure:3
+ volumes:
+ - ./halo2:/root/.halo2
+ networks:
+ - traefik
+ - halo
+ command:
+ # 外部访问地址,请根据实际需要修改
+ - --halo.external-url=https://yourdomain.com
+ labels:
+ traefik.enable: "true"
+ traefik.docker.network: traefik
+ traefik.http.routers.halo.rule: Host(`yourdomain.com`)
+ traefik.http.routers.halo.tls: "true"
+ traefik.http.routers.halo.tls.certresolver: myresolver
+ traefik.http.services.halo.loadbalancer.server.port: 8090
+```
diff --git a/docs/guide/install/podman.mdx b/docs/guide/install/podman.mdx
new file mode 100644
index 00000000..fd8385a9
--- /dev/null
+++ b/docs/guide/install/podman.mdx
@@ -0,0 +1,231 @@
+---
+title: 使用 Podman 部署
+description: 使用 Podman 运行 Halo:与 Docker 类似的容器部署与持久化说明。
+---
+
+import DockerArgs from "./slots/_docker-args.md"
+import DockerRegistryList from "./slots/_docker-registry-list.md"
+
+## 前言
+
+:::info 先阅读《写在前面》
+在继续操作之前,我们推荐您先阅读[《写在前面》](../prepare),这可以快速帮助你了解 Halo。
+:::
+
+:::info Podman 简介与适用场景
+什么是 Podman ?
+
+Podman(全称 POD 管理器)是一款用于在 Linux® 系统上开发、管理和运行容器的开源工具。Podman 最初由红帽® 工程师联合开源社区一同开发,它可利用 lipod 库来管理整个容器生态系统。
+Podman 采用无守护进程的包容性架构,因此可以更安全、更简单地进行容器管理,再加上 Buildah 和 Skopeo 等与之配套的工具和功能,开发人员能够按照自身需求来量身定制容器环境。
+
+为什么选择 Podman 而不是 Docker ?
+
+这个需要视情况而定,如果您的主机配置不是很高,您使用 Docker 时,因为 Docker 自带的守护进程可能会雪上加霜,它会大量占用您的资源。
+而 Podman 采用无守护进程架构,而且容器是无根模式,您可以在占用资源极小的情况下运行镜像,并且获得很高的安全性。
+而且 Podman 与 Docker 高度兼容,您不需要做特别配置即可将 Docker 容器运行在 Podman 上。
+
+[什么是 Podman?](https://www.redhat.com/zh/topics/containers/what-is-podman)
+
+[Podman ArchWiki](https://wiki.archlinux.org/title/Podman)
+
+[Podman 官网](https://podman.io/)
+:::
+
+:::tip 不建议在生产环境使用 H2
+此文档提供使用默认 H2 数据库和 Postgresql 数据库的 Podman 运行示例,在生产环境我们不推荐使用 H2 数据库。
+:::
+
+## 环境搭建
+
+- Podman 安装文档:[https://podman.io/docs/installation](https://podman.io/docs/installation)
+
+:::tip 先阅读 Podman 官方文档
+我们推荐您先阅读 Podman 官方文档对 Podman 有了相关了解后,再考虑通过 Linux 包管理系统安装 Podman 或者使用文档中指定的方式安装。
+:::
+
+## 部署 Halo
+
+:::tip Podman 可直接使用 Docker 镜像
+为什么是 Docker 镜像?
+
+通过[前言](#前言)我们已经了解了 Podman,其中提到 ***Podman 与 Docker 高度兼容*** ,正是因为 Podman 完全是为了替代 Docker 而诞生,所以原本的 Docker 生态中的镜像我们可以无需更改直接使用。
+:::
+
+### 镜像说明
+
+
+
+### 创建容器
+
+1. 创建容器
+
+ ```bash
+ mkdir -p ~/.halo2
+ podman run -it -d --name halo -p 8090:8090 -v ~/.halo2:/root/.halo2:Z registry.fit2cloud.com/halo/halo-pro:2.26
+ ```
+
+ :::info 默认使用 H2 数据库
+ 注意:此命令默认使用自带的 H2 Database 数据库。如需使用 PostgreSQL,请参考:[使用 Docker Compose 部署](./docker-compose.mdx)
+ :::
+
+ - **-it**:开启输入功能并连接伪终端
+ - **-d**:后台运行容器
+ - **--name**:为容器指定一个名称
+ - **-p**:端口映射,格式为 `主机(宿主)端口:容器端口` ,可在 `application.yaml` 配置。
+ - **-v**:工作目录映射。形式为:`-v 宿主机路径:/root/.halo2`,后者不能修改。
+
+ 运行参数详解:
+
+
+
+ :::info 查看完整配置
+ 为了保持部署流程的简洁,此文档仅提供了必要的配置示例,完整的配置选项列表可查阅:[配置说明](./config.md)
+ :::
+
+2. 用浏览器访问 `/console` 即可进入 Halo 管理页面,首次启动会进入初始化页面。
+
+ :::tip 初始化前配置访问地址
+ 如果需要配置域名访问,建议先配置好反向代理以及域名解析再进行初始化。如果通过 `http://ip:端口号` 的形式无法访问,请到服务器厂商后台将运行的端口号添加到安全组,如果服务器使用了 Linux 面板,请检查此 Linux 面板是否有还有安全组配置,需要同样将端口号添加到安全组。
+ :::
+
+3. 激活许可证,可以参考 [许可证激活](../use/activate.md) 进行激活,社区版无需此步骤。
+
+## 升级 Halo
+
+1. 备份数据,可以参考 [备份与恢复](../use/backup.md) 进行完整备份(可选,但推荐备份)。
+2. 拉取新版本镜像
+
+ ```bash
+ podman pull registry.fit2cloud.com/halo/halo-pro:2.26
+ ```
+
+3. 停止运行中的容器
+
+ ```bash
+ podman stop halo
+ podman rm halo
+ ```
+
+4. 更新 Halo
+
+ 修改版本号后,按照最初安装的方式,重新创建容器即可。
+
+ ```bash
+ podman run -it -d --name halo -p 8090:8090 -v ~/.halo2:/root/.halo2:Z registry.fit2cloud.com/halo/halo-pro:2.26
+ ```
+
+## 使用 [Podman Quadlet](https://docs.podman.io/en/latest/markdown/podman-systemd.unit.5.html)
+
+:::tip 使用 Quadlet 实现开机启动
+Podman 没有和 Docker 类似的管理进程,在低配置的主机上更友好。
+但是使用 Podman 想要开机后自动启动,官方推荐一种和 systemd 服务类似的语法文件,即 Podman Quadlet。
+:::
+
+下面是一个使用 Podstgresql 数据库的示例:
+
+```bash
+mkdir -p /opt/podman-data/halo
+mkdir -p /etc/containers/systemd
+vim /etc/containers/systemd/halo.container
+```
+
+```ini
+[Unit]
+Description=The halo container
+Wants=network-online.target
+After=network-online.target
+
+[Container]
+AutoUpdate=registry
+ContainerName=halo
+User=60000
+Group=60000
+UserNS=keep-id:uid=60000,gid=60000
+Environment=JVM_OPTS="-Xmx512m -Xms256m"
+Environment=HALO_WORK_DIR="/.halo"
+Environment=SPRING_CONFIG_LOCATION="optional:classpath:/;optional:file:/.halo/"
+Environment=TZ=Asia/Shanghai
+Volume=/opt/podman-data/halo:/.halo:Z
+PublishPort=127.0.0.1:8090:8090
+Image=ghcr.io/halo-dev/halo:2.26
+Exec=--halo.external-url=https://localhost:8090 --spring.sql.init.platform=postgresql --spring.r2dbc.url=r2dbc:pool:postgresql://host.containers.internal:5432/my-db --spring.r2dbc.username=my-user --spring.r2dbc.password=my-password
+
+[Service]
+Restart=always
+RestartSec=30s
+TimeoutStartSec=900
+TimeoutStopSec=70
+
+[Install]
+WantedBy=multi-user.target default.target
+```
+
+```bash
+systemctl daemon-reload
+systemctl start halo
+# 只需要systemctl start halo.
+# 之后重启会自动启动不需要enable服务.
+```
+
+Podman Quadlet 解析:
+
+`[Unit]` 部分:
+
+- Wants 和 After 字段指定了 Halo 在什么服务后启动。
+
+`[Container]` 部分:
+
+- `AutoUpdate=registry`指定了自动拉取容器。假设后续 Halo 镜像支持了`latest`标签,你需要`systemctl enable --now podman-auto-update.timer`以启用容器自动更新。本文示例`ghcr.io/halo-dev/halo:2.26`,将会自动更新适用与`2.26`版本的 patch,例如您创建容器时是`2.26.1`,在官方发布`2.26.2`版本时,容器会自动更新到`2.26.2`。
+- `ContainerName=`指定了 systemd 将生成的服务名称。
+- `User=60000 Group=60000 UserNS=keep-id:uid=60000,gid=60000` 限制容器以 id 60000 的用户运行,提高安全性。注意这个 id 60000 请根据你实际想要运行的用户名来修改,可通过`id user`获得你的用户的 id.
+- `Environment=`字段指定了容器的环境变量,其中你需要注意的是`Environment=HALO_WORK_DIR="/.halo"` `Environment=SPRING_CONFIG_LOCATION="optional:classpath:/;optional:file:/.halo/"`这两个变量中的`/.halo`路径。
+- `Volume=`字段指定挂载到容器储存 Halo 配置文件的路径,请仔细观察`/opt/podman-data/halo:/.halo:Z`其中的`/.halo`要与上面需要注意的环境变量路径要一致,`:Z` 用于为挂载目录设置 SELinux 标签。
+- `PublishPort=`和 docker -p 命令一致,即需要映射的端口。
+- `Image=ghcr.io/halo-dev/halo` 即 Docker 镜像的地址,注意要完整的。比如`ghcr.io`这个路径就不能少,如果你没有配置 Podman 的 registries 文件,此路径就必不可少,建议写全。
+- `Exec=` 即附加到 Halo 容器的 Command,具体变量参考上方的 DockerArgs。多个变量以空格分开。示例中的 `host.containers.internal` 指向宿主机,如果数据库位于其他主机,请替换为实际地址。
+
+`[Service]` 部分:
+即原生 systemd 语法
+
+- `Restart` 指定遇到错误后总是重启容器
+- `RestartSec` 重启的间隔时间
+- `TimeoutStartSec` 启动容器的超时时间,建议不要修改,因为每次开机后 Podman 将自动拉取容器,这时也许耗时会很长,这些时间是算在启动时间中的。如果定义太小的时间,可能将导致 Podman 无法拉取容器镜像。
+- `TimeoutStopSec` 停止容器时的超时时间,`systemctl stop halo` 假设使用这个命令,如果停止时间超过了`TimeoutStopSec`定义的时间,将会被系统 Kill.
+
+`[Install]` 部分:
+
+此部分请查看 systemd 文档,不建议修改。
+
+使用默认的 root 用户运行时无需定义 `User=60000 Group=60000 UserNS=keep-id:uid=60000,gid=60000` 与 `Environment=HALO_WORK_DIR="/.halo"` `Environment=SPRING_CONFIG_LOCATION="optional:classpath:/;optional:file:/.halo/"`,
+示例:
+
+```bash
+mkdir -p /opt/podman-data/halo
+mkdir -p /etc/containers/systemd
+vim /etc/containers/systemd/halo.container
+```
+
+```ini
+# /etc/containers/systemd/halo.container
+[Unit]
+Description=The halo container
+Wants=network-online.target
+After=network-online.target
+
+[Container]
+AutoUpdate=registry
+ContainerName=halo
+Volume=/opt/podman-data/halo:/root/.halo2:Z
+PublishPort=127.0.0.1:8090:8090
+Image=ghcr.io/halo-dev/halo:2.26
+Exec=--halo.external-url=https://localhost:8090 --spring.sql.init.platform=postgresql --spring.r2dbc.url=r2dbc:pool:postgresql://host.containers.internal:5432/my-db --spring.r2dbc.username=my-user --spring.r2dbc.password=my-password
+
+[Service]
+Restart=always
+RestartSec=30s
+TimeoutStartSec=900
+TimeoutStopSec=70
+
+[Install]
+WantedBy=multi-user.target default.target
+```
diff --git a/docs/getting-started/install/slots/_docker-args.md b/docs/guide/install/slots/_docker-args.md
similarity index 100%
rename from docs/getting-started/install/slots/_docker-args.md
rename to docs/guide/install/slots/_docker-args.md
diff --git a/docs/getting-started/install/slots/_docker-registry-list.md b/docs/guide/install/slots/_docker-registry-list.md
similarity index 100%
rename from docs/getting-started/install/slots/_docker-registry-list.md
rename to docs/guide/install/slots/_docker-registry-list.md
diff --git a/docs/guide/migrate-from-1.x.md b/docs/guide/migrate-from-1.x.md
new file mode 100644
index 00000000..567e4ff1
--- /dev/null
+++ b/docs/guide/migrate-from-1.x.md
@@ -0,0 +1,82 @@
+---
+title: 从 Halo 1.x 迁移
+description: Halo 1.5/1.6 迁移至 2.x:官方迁移插件、主题兼容与数据备份注意事项。
+---
+
+因为 Halo 2.0 的底层架构变动,无法兼容 1.x 的数据,导致无法平滑升级,所以需要进行数据迁移。为此,我们提供了从 Halo 1.5 / 1.6 版本迁移的插件。在进行迁移之前,**有几点注意事项和要求,如果你目前无法满足,建议先暂缓迁移。**
+
+- Halo 版本必须为 1.5.x 或 1.6.x。如果不满足,需要先升级到 1.5.x 或 1.6.x 版本。
+- Halo 2.0 不兼容 1.x 的主题,建议在升级前先查询你正在使用的主题是否已经支持 2.0。你可以访问 [halo-sigs/awesome-halo](https://github.com/halo-sigs/awesome-halo) 或 [应用市场](https://www.halo.run/store/apps?type=THEME) 查阅目前支持的主题。
+- Halo 2.0 目前没有内置 Markdown 编辑器,如果需要重新编辑迁移后的文章,需要额外安装 Markdown 编辑器插件,可以在应用市场找到合适的 Markdown 插件:[https://www.halo.run/store/apps?tag=editor](https://www.halo.run/store/apps?tag=editor)
+- Halo 2.0 不再内置友情链接、日志、图库等模块,需要安装额外的插件,目前官方已提供:
+ - 链接管理:[https://www.halo.run/store/apps/app-hfbQg](https://www.halo.run/store/apps/app-hfbQg)
+ - 图库:[https://www.halo.run/store/apps/app-BmQJW](https://www.halo.run/store/apps/app-BmQJW)
+ - 瞬间(原日志):[https://www.halo.run/store/apps/app-SnwWD](https://www.halo.run/store/apps/app-SnwWD)
+- Halo 2.0 不再内置外部云存储的支持。需要安装额外的插件,目前官方已提供:
+ - S3(兼容国内主流的云存储):[https://www.halo.run/store/apps/app-Qxhpp](https://www.halo.run/store/apps/app-Qxhpp)
+- 在迁移过程中不会保留旧版本的用户数据,迁移完成之后,关于文章等数据的关联都将改为 Halo 2.0 的新用户。
+- 为了防止直接升级 2.0 导致 1.x 的数据受到破坏,我们已经将工作目录由 `~/.halo` 变更为 `~/.halo2`。
+- 可以考虑先在本地运行一个 Halo 2.0,模拟一下导入,检查导入后是否满足要求。
+
+如果遇到了迁移过程中的问题,也可以向我们提交 Issue: [https://github.com/halo-dev/halo/issues/new/choose](https://github.com/halo-dev/halo/issues/new/choose),以上暂不支持的功能我们也会陆续完善。
+
+## 备份数据
+
+在进行迁移操作之前,我们强烈建议先**完整备份所有数据**,可以参考 [备份迁移](https://v1.legacy-docs.halo.run/user-guide/backup-migration) 进行整站备份。
+
+## 导出数据文件
+
+在 Halo 1.5.x / 1.6.x 后台的小工具中提供了数据导出的功能,将最新的数据进行备份,然后下载即可。这个数据文件包含了数据库所有的数据,后续我们在 2.0 的导入插件中就是通过这个文件进行数据导入。
+
+
+
+## 部署 Halo 2.0
+
+可以参考以下文档进行部署:
+
+- [使用 Docker 部署](./install/docker.mdx)
+- [使用 Docker Compose 部署](./install/docker-compose.mdx)
+- [使用 JAR 文件部署](./install/jar-file.md)
+
+:::tip 保留旧版本时更换端口
+可以考虑暂时保留旧版本的 Halo,等到迁移完成之后再移除。如果需要保留旧版本的 Halo,请注意在部署 Halo 2.0 的时候使用其他端口,然后在反向代理(Nginx)中修改为 Halo 2.0 的运行端口即可。
+:::
+
+## 移动附件
+
+- 本地存储的附件,只需要将 1.x 工作目录的 `upload` 目录里面的所有文件夹移动到 2.0 工作目录下的 `attachments/migrate-from-1.x` 文件夹即可。
+- 云存储的附件迁移会在迁移插件中进行。
+
+## 安装插件
+
+在迁移过程中,需要提前安装必要的插件:
+
+- 站点迁移:[https://www.halo.run/store/apps/app-TlUBt](https://www.halo.run/store/apps/app-TlUBt)
+- 链接管理:[https://www.halo.run/store/apps/app-hfbQg](https://www.halo.run/store/apps/app-hfbQg)
+- 图库:[https://www.halo.run/store/apps/app-BmQJW](https://www.halo.run/store/apps/app-BmQJW)
+- 瞬间(原日志):[https://www.halo.run/store/apps/app-SnwWD](https://www.halo.run/store/apps/app-SnwWD)
+- S3(如果需要迁移存在云存储的附件,需要安装):[https://www.halo.run/store/apps/app-Qxhpp](https://www.halo.run/store/apps/app-Qxhpp)
+
+## 配置存储策略
+
+> 如果在 Halo 1.x 中未使用云存储,可以跳过此步骤。
+
+1. 安装 S3 插件。
+2. 进入附件管理页面。
+3. 点击页面右上角的 **存储策略** 按钮。
+4. 创建存储策略,选择 **S3 对象存储**。
+5. 填写相关配置,点击 **保存** 即可。
+
+## 迁移
+
+
+
+
+
+
+
+1. 点击左侧菜单的迁移进入迁移页面。
+2. 选择 **Halo 1.5 / 1.6 数据迁移**。
+3. 点击 **选择文件** 按钮,选择在 Halo 1.5.x / 1.6.x 导出的数据文件(JSON 格式)。
+4. 如果在 1.x 中使用了云存储,会弹出选择云存储的对话框,选择之前创建的存储策略即可。
+5. 最后点击页面下方的 **执行导入** 即可。
diff --git a/docs/guide/prepare.md b/docs/guide/prepare.md
new file mode 100644
index 00000000..190bb51d
--- /dev/null
+++ b/docs/guide/prepare.md
@@ -0,0 +1,136 @@
+---
+title: 写在前面
+description: Halo 部署前必读:社区版与付费版、软硬件环境、域名与 HTTPS 等准备事项。
+---
+
+## 发行版本
+
+Halo 的发行版本主要区分为两个大类别,即 **Halo 社区版** 和 **Halo 付费版**。
+
+Halo 付费版包括专业版和商城版,是[凌霞软件](https://www.lxware.cn?code=mcYhwMkn)旗下的商业产品,为企业/团体/或进阶个人使用者提供了诸多定制化和特定场景的功能支持。
+
+版本区别可查阅 [方案对比](https://www.lxware.cn/halo?code=mcYhwMkn)
+
+在后续的文档中,使用付费版统称 Halo 专业版 和 Halo 商城版,除非特别说明。
+
+## 环境要求
+
+这里将讲述运行 Halo 所要求的一些软硬件的配置,我们建议你在运行或者部署之前先浏览一遍此页面。
+
+### 硬件配置
+
+:::tip 云服务器要求
+如果你要使用服务器进行部署 Halo,需要注意的是,Halo 目前不支持市面上的云虚拟主机,请使用云服务器或者 VPS。
+:::
+
+#### CPU
+
+无特别要求。目前我们的 [Docker 镜像](https://hub.docker.com/r/halohub/halo) 也已经支持多平台。
+
+#### 内存
+
+为了获得更好的体验,我们建议至少配置 1G 的 RAM。
+
+#### 磁盘
+
+无特别要求,理论上如果不大量在服务器上传附件,Halo 对磁盘的容量要求并不是很高。但我们推荐最好使用 SSD 硬盘的服务器,能更快的运行 Halo。
+
+#### 网络
+
+无特别要求,Halo 目前可以在无公网环境下使用,但部分主题由于使用了第三方资源,可能需要公网环境。
+
+### 软件环境
+
+Halo 理论上可以运行在任何支持 Docker 及 Java 的平台。
+
+#### Docker(可选)
+
+我们主要推荐使用 Docker 运行 Halo,这可以避免一些环境配置相关的问题,文档可参考:
+
+- [使用 Docker Compose 部署](./install/docker-compose.mdx)
+- [使用 Docker 部署](./install/docker.mdx)
+
+#### JRE(可选)
+
+如果使用 Docker 镜像部署,那么无需在服务器上安装 JRE。但目前我们也提供了 jar 文件部署的方式,文档可参考:
+
+- [使用 JAR 文件部署](./install/jar-file.md)
+
+:::info Java 版本要求
+版本要求:
+
+- 2.21 以上版本:**JRE 21**
+- 2.20 及以下版本:**JRE 17**
+
+:::
+
+#### 数据库
+
+Halo 目前支持以下数据库:
+
+- PostgreSQL
+- MySQL
+- MariaDB
+- H2
+
+其中,H2 不需要单独运行,其他数据库需要单独安装并配置。一般情况下,推荐按照 [使用 Docker Compose 部署](./install/docker-compose.md) 文档将 Halo 和数据库容器编排在一起。
+
+:::warning 不建议在生产环境使用 H2
+不推荐在生产环境使用默认的 H2 数据库,这可能因为操作不当导致数据文件损坏。如果因为某些原因(如内存不足以运行独立数据库)必须要使用,建议按时[备份数据](../guide/use/backup.md)。
+:::
+
+#### Web 服务器(可选)
+
+如果你部署在生产环境,那么你很可能需要进行域名绑定,这时候我们推荐使用诸如 [Nginx](http://nginx.org/)、[Caddy](https://caddyserver.com/) 之类的 Web 服务器进行反向代理。但需要注意的是,目前 Halo 不支持代理到子目录(如:halo.run/blog)。
+
+#### Wget(可选)
+
+后续的文档中,我们会使用 wget 为例,用于下载所需要的文件,所以请确保服务器已经安装好了这个软件包。当然,下载文件不限制工具,如果你对其他工具熟悉,可以忽略。
+
+#### Vim(可选)
+
+后续的文档中,我们会使用 Vim 为例,用于修改一些必要的配置文件,所以同样请确保服务器已经安装了这个软件包。当然,修改文档也不限制工具,如果你对其他编辑软件熟悉,也可以忽略。
+
+## 浏览器支持
+
+1. 用户前台:视主题所支持的情况而定。
+2. 管理后台(Console 和个人中心):支持目前常见的现代浏览器,具体视 [Vue](https://vuejs.org/about/faq#what-browsers-does-vue-support) 框架的支持情况而定。
+
+## 名词解释
+
+这里将列出后续文档中一些和 Halo 相关的名词含义。
+
+### ~(符号)
+
+代表当前系统下的 [用户目录](https://zh.wikipedia.org/wiki/%E5%AE%B6%E7%9B%AE%E5%BD%95)。
+
+### 镜像
+
+指 Halo 构建所产生的 [Docker 镜像](https://docs.docker.com/engine/reference/commandline/images/)。用户通过该镜像启动 Halo 应用。
+
+### 工作目录
+
+指 Halo 所依赖的工作目录,在 Halo 运行的时候会在系统当前用户目录下产生一个 `.halo2` 的文件夹,绝对路径为 `~/.halo2`。里面通常包含下列目录或文件:
+
+1. `db`:存放 H2 Database 的物理文件,如果你使用其他数据库,那么不会存在这个目录。
+2. `themes`:里面包含用户所安装的主题。
+2. `plugins`:里面包含用户所安装的插件。
+5. `attachments`:附件目录。
+4. `logs`:运行日志目录。
+6. `application.yaml`:配置文件(可选),具体配置方式可查阅 [配置说明](./install/config.md)。
+7. `backups`:备份文件目录。
+8. `static`:虚拟的根文件目录,需要手动创建。
+
+> 如果你使用的 Docker 部署,请不要忽略 `~/.halo2` 的目录映射。
+
+### 主题
+
+包含了各种站点页面模板的资源包。用户访问 Halo 站点浏览到的内容及样式,由 Halo 管理端所配置使用的主题所决定。
+
+相关使用文档:[主题管理相关功能说明](../guide/use/themes.md)
+
+### 插件
+
+用于扩展 Halo 功能的软件包。插件独立于 Halo 核心应用,可以单独安装、升级、卸载。
+
+相关使用文档:[插件管理相关功能说明](../guide/use/plugins.md)
diff --git a/docs/getting-started/setup.md b/docs/guide/setup.md
similarity index 100%
rename from docs/getting-started/setup.md
rename to docs/guide/setup.md
diff --git a/docs/guide/use/_meta.json b/docs/guide/use/_meta.json
new file mode 100644
index 00000000..c79d48d6
--- /dev/null
+++ b/docs/guide/use/_meta.json
@@ -0,0 +1,22 @@
+[
+ "common",
+ "activate",
+ "user-center",
+ "posts",
+ "pages",
+ "attachments",
+ "menus",
+ "themes",
+ "plugins",
+ "app-store",
+ "users",
+ "settings",
+ "backup",
+ {
+ "type": "dir",
+ "name": "shop",
+ "label": "商城",
+ "collapsed": true
+ },
+ "faq"
+]
diff --git a/docs/guide/use/activate.md b/docs/guide/use/activate.md
new file mode 100644
index 00000000..565d3591
--- /dev/null
+++ b/docs/guide/use/activate.md
@@ -0,0 +1,95 @@
+---
+title: 许可证激活
+description: Halo 付费版许可证购买、部署与激活流程,含专业版与商城版说明。
+---
+
+:::note 仅适用于 Halo 付费版
+此文档仅适用于 **[Halo 付费版](../prepare.md#发行版本)**(专业版 / 商城版),在开始之前需要确保已经成功部署了 Halo 付费版。
+
+社区版无需进行许可证激活。
+:::
+
+## 购买许可证
+
+你可以在[凌霞软件](https://www.lxware.cn/halo?code=mcYhwMkn)官网购买 Halo 付费版的许可证,目前分为 Halo 专业版和 Halo 商城版,支持按月/按年订阅或者版本买断。
+
+在凌霞官网购买产品后,可以在 `个人中心` > `我的许可证` ,统一管理当前账户下的全部已购产品的许可证。
+
+
+
+## 部署 Halo 付费版
+
+可以查阅:
+
+- [使用 Docker Compose 部署](../install/docker-compose.mdx)
+- [使用 1Panel 部署](../install/1panel.mdx)
+- [使用 JAR 文件部署](../install/jar-file.md)
+
+## 查看产品版本信息
+
+部署成功后,访问 `控制台` > `概览`,可以查看 Halo 版本信息,目前还处于未激活状态,需要按照后续步骤进行激活。
+
+
+
+## 查看已购产品许可证
+
+登录到凌霞官网的 [订单列表](https://lxware.cn/uc/cloud/order),点击已完成订单条目右侧的更多按钮,点击「许可证列表」,即可跳转至 `我的许可证` 列表,可以查看该订单所购产品的许可证。
+
+
+
+## 下载许可证
+
+在 `我的许可证`列表,点击许可证条目右侧的更多按钮,点击「详情」;
+
+
+
+在详情页下载许可证文件,同时支持兑换包含在产品许可证内的免赠权益。
+
+
+
+## 激活许可证
+
+进入 `控制台` > `概览`,导入下载的许可证文件。
+
+
+
+导入完成后,可以查看到更新的版本信息。许可证显示为「有效」即为激活成功,到此即可正常使用 Halo 付费版。
+
+
+
+## 取消激活许可证
+
+你可以随时在当前应用中取消激活许可证,取消后付费版功能将会受限。在许可证有效期内,许可证可被重新激活至其他设备中。
+
+
+
+## 使用增值权益
+
+> 随着 Halo 付费版订阅制的上线(2024-11-12),我们更新了获取增值权益即官方付费应用的方式。目前,用户可以直接通过 Halo 付费版许可证激活付费的插件和主题。
+> 此外,从 2024-11-28 开始,通过付费版激活应用将开放给全部 Halo 付费版用户,你可以重新在凌霞官网下载许可证并激活,然后就可以通过付费版许可证激活所有官方付费应用。需要保证 Halo 付费版版本为 2.20.4 以上,应用市场插件的版本为 1.9.0 以上。相关阅读:[Halo 付费版永久授权增值权益的升级说明](https://www.lxware.cn/archives/benefits-upgrade)
+
+在进行下面的步骤之前,请确保已经正常激活 Halo 付费版。
+
+### 查看和下载付费应用
+
+使用 Halo 付费版许可证激活后,就可以在内置的应用市场中查看所有可下载的付费应用。
+
+
+
+### 激活付费应用
+
+下载付费应用之后,即可在许可证管理中使用 Halo 付费版许可证进行激活。
+
+
+
+:::info 激活后重启插件
+如果你在激活前就启动了插件,那么在激活后可能需要重启插件才会生效。
+:::
+
+### Halo 付费版增值权益内容
+
+所有付费版可以在许可证有效期内使用所有 Halo 官方发行的付费应用,包括在许可证有效期内新增的付费应用,[点击查看最新官方付费应用列表](https://www.halo.run/store/apps?price-mode=ONE_TIME&sort=creationTimestamp%2Cdesc&tag=official)。
+
+查看当前许可证包含的付费应用可以在 `个人中心` > `我的许可证` 中进入具体 Halo 许可证的详情页面中查看,如下图:
+
+
diff --git a/docs/guide/use/app-store.md b/docs/guide/use/app-store.md
new file mode 100644
index 00000000..ae41386a
--- /dev/null
+++ b/docs/guide/use/app-store.md
@@ -0,0 +1,102 @@
+---
+title: 应用市场
+description: 在 Console 内置应用市场安装 Halo 主题与插件,含账号绑定与更新说明。
+---
+
+为了方便使用者安装应用市场的主题和插件,我们提供了一个内置到 Console 的应用市场插件,可以更加方便在 Console 直接安装主题和插件。并且此插件从 Halo 2.10 开始已经预设到 Halo 中,无需手动安装。
+
+如果你使用了旧版本的 Halo,并且当前未安装应用市场插件,可以访问 [https://www.halo.run/store/apps/app-VYJbF](https://www.halo.run/store/apps/app-VYJbF) 手动下载并在 Console 的插件管理中安装。
+
+:::info 可安全停用应用市场插件
+这是目前唯一由 Halo 官方提供的服务,如果你当前的 Halo 网站处于无法访问公网的环境或者不需要此功能,你可以卸载或者停用此插件,不会影响网站的正常使用。
+:::
+
+## 应用市场页面
+
+这是一个为 Console 提供的独立的应用市场页面,此页面基本和 [https://www.halo.run/store/apps](https://www.halo.run/store/apps) 保持一致,但有所不同的是,你可以直接在这里查看所有的主题和插件并安装到你的 Halo 站点中。
+
+
+
+## 绑定 Halo 官网账号
+
+
+
+绑定方式:
+
+1. 进入应用市场插件的设置页面,切换到 **账号绑定** 选项卡。
+2. 根据提示访问 Halo 官网并注册账号,然后在 Halo 官网的[个人中心](https://www.halo.run/uc/profile?tab=pat)生成一个个人令牌并填写到下方的 **个人令牌** 输入框即可。
+
+## 安装/更新插件
+
+此插件还扩展了插件安装的界面,可以在安装插件时直接从应用市场获取。
+
+
+
+此外,如果插件是从应用市场安装的,后续插件更新之后也可以及时收到更新信息,并一键更新。
+
+
+
+## 安装/更新主题
+
+与插件一样,在主题管理中也可以直接从应用市场中获取,以及接收主题更新提示。
+
+
+
+
+
+## 付费应用激活
+
+部分付费主题和插件需要许可证激活才能够正常使用,在购买付费应用之后就会自动为你的 Halo 官网账号中生成对应的应用许可证,目前支持在线激活和离线激活两种方式。
+
+### 在线激活
+
+:::info 在线激活方式
+目前在线激活支持两种方式:
+
+1. 通过 [Halo 官网账户](https://www.halo.run/):如果你是在 Halo 官网购买的付费应用,需要通过这种方式,并提前[绑定 Halo 官网账号](#绑定-halo-官网账号)
+2. 通过 [Halo 专业版/商城版许可证](../prepare.md#发行版本):如果你购买了 [Halo 付费版](../prepare.md#发行版本),可以选择这个选项来激活应用
+
+关于 Halo 专业版/商城版许可证的更多信息可查阅:[许可证激活 / 查看和下载付费应用](../use/activate.md#查看和下载付费应用)
+:::
+
+在安装好需要许可证的付费插件或主题后,列表会显示一个许可证状态的图标,点击即可打开许可证激活的对话框,选择 **Halo 官网账户** 或 **Halo 专业版/商城版许可证** 并点击激活即可。
+
+
+
+
+
+除此之外,你也可以在 **许可证管理** 页面查看所有应用的许可证,并管理它们的状态。
+
+
+
+### 离线激活
+
+如果你的 Halo 网站无法访问公网,你可以选择离线激活的方式。
+
+1. 同样点击许可证状态的图标,打开许可证激活的对话框。
+
+ 
+
+2. 激活方式选择许可证。
+
+ 
+
+3. 点击 **复制离线许可证凭证** 按钮,然后点击 **去生成** 按钮,然后会跳转到 Halo 官网去生成离线激活码。
+4. 找到对应的许可证,选择 **生成离线许可证**。
+
+ 
+
+5. 在 **生成离线许可证** 的对话框中,粘贴刚刚复制的离线许可证凭证,然后点击 **生成并复制** 按钮,然后会打开 **查看离线许可证** 对话框,你可以选择下载文件或者复制许可证。
+
+ 
+
+ 
+
+6. 回到 Halo 网站,粘贴刚刚复制的离线许可证,然后点击 **激活** 按钮即可。
+
+ 
+
+其他注意事项:
+
+1. 目前同一个账号的许可证在同一时间只能在一个站点中使用,使用 Halo 配置中的 **外部访问地址(halo.external-url)** 和设备 id 做判定。
+2. 取消激活会删除许可证使用记录。
diff --git a/docs/guide/use/attachments.md b/docs/guide/use/attachments.md
new file mode 100644
index 00000000..c7acb990
--- /dev/null
+++ b/docs/guide/use/attachments.md
@@ -0,0 +1,107 @@
+---
+title: 附件
+description: Halo 附件与存储策略:本地上传、策略管理及对象存储等扩展方式。
+---
+
+## 存储策略
+
+为了能够更加灵活地管理附件的存储位置,Halo 提供了存储策略的概念。
+
+Halo 默认提供了本地的存储策略类型,你还可以通过安装插件的方式扩展其他的存储策略类型。一个存储策略包含了存储提供者,具体存储位置等使用该类型存储所必要的各种信息。
+
+:::info 扩展存储方式
+目前除了 Halo 内置的本地存储,在应用市场中也有三方的存储插件:[https://www.halo.run/store/apps?tag=storage](https://www.halo.run/store/apps?tag=storage)
+
+此外,如果你期望对接类似于阿里云、腾讯云的对象存储,可以考虑使用 [对象存储(Amazon S3 协议)](https://www.halo.run/store/apps/app-Qxhpp) 插件,此插件兼容市面上所有支持 S3 协议的对象存储厂商。
+:::
+
+你可以点击附件页面右上角的 `存储策略` 按钮对存储策略进行管理。
+
+### 新建存储策略
+
+点击存储策略列表右上方的 `+` 添加按钮即可新建一个存储策略。
+
+
+
+添加时首先需要选择一种存储策略类型,系统内置的存储策略为本地存储,图中的 `S3 对象存储` 由[对象存储(Amazon S3 协议)](https://www.halo.run/store/apps/app-Qxhpp)提供,此文档以本地存储为例。
+
+
+
+添加一个本地存储时,你需要输入名称及存储位置信息。其中的存储位置决定了使用该存储策略的附件,在服务器上的实际存储路径,路径规则为 `{Halo 工作目录}/attachments/{存储位置}`,其中的 Halo 工作目录由安装时指定的参数决定,默认为 `~/.halo2`。
+:::info Docker 附件存储位置
+默认的 Docker 部署方式,实际存储位置由挂载到 Halo 容器工作目录的服务器目录所决定。
+:::
+
+### 管理存储策略
+
+点击存储策略列表指定存储所在行后方的 `···` 更多操作按钮即可对该存储策略进行编辑或删除。
+
+
+
+:::info 删除存储策略前先清空附件
+为了保护附件安全避免用户误操作,当存储策略下存在附件时,该存储策略不允许删除。如果确定要删除某个存储策略及该存储策略中的所有附件,可以先按照存储策略对附件进行筛选,先批量删除存储策略下的所有附件,再删除存储策略。
+:::
+
+## 附件分组
+
+通过附件分组功能可以方便地将同一类型、同一用途的附件划分到一个分组中,方便后续附件的管理和插件。
+
+附件所使用的存储策略决定了附件的实际存储位置和 URL 规则,而附件分组功能仅是逻辑上的归类划分,不会影响附件的存储位置及 URL。
+
+### 新建分组
+
+点击附件列表上方的 `添加分组` 按钮即可新建一个分组。
+
+
+
+### 删除分组
+
+点击附件列表上方指定分组上的 `···` 更多按钮,可以对分组进行重命名或删除操作。
+
+Halo 目前提供了两种分组删除策略:
+
+1. **删除并将附件移动至未分组**:分组被删将被删除,分组下的附件移动到未分组中。
+2. **删除并同时删除附件**:先删除下的所有附件后,再删除该分组。
+
+ :::warning 删除的附件不可恢复
+ 当使用 `删除并同时删除附件` 方式时,分组下的所有附件会被同时删除且不可恢复、无法找回,请谨慎进行该操作。
+ :::
+
+## 上传附件
+
+点击附件列表右上方的 `上传` 按钮即可上传新的附件到 Halo。
+
+
+
+1. **存储策略选择**:你可以选择需要使用的存储策略,为了方便,选择之后会在浏览器记住这个选项。
+2. **分组选择**:你可以选择需要上传到的分组,为了方便,选择之后会在浏览器记住这个选项。
+3. **上传区域**:同时支持拖拽文件、点击上传区域选择文件、粘贴文件。
+
+## 查看附件
+
+点击附件列表中的某一个附件即可查看该附件的详细信息。
+
+
+
+1. **预览区域**:目前支持图片、视频、音频的预览。
+2. **链接**:目前可以显示并复制链接、HTML 格式代码、Markdown 格式代码。
+
+## 删除附件
+
+目前有两种删除附件的方式,你可以选中一些附件进行批量删除或者点击指定附件所在行后方的 `···` 更多按钮,对单个附件进行删除操作。
+
+
+
+:::warning 删除附件不可恢复
+附件删除后不可恢复、无法找回,请谨慎进行该操作。
+:::
+
+## 移动附件
+
+
+
+与批量删除操作类似,你可以选中多个附件后在上方的批量操作按钮中选择 `移动` 操作,将所选附件移动到指定的分组中。
+
+:::info 仅支持移动附件分组
+需要注意的是,目前移动附件只支持移动分组,不支持存储策略的移动。
+:::
diff --git a/docs/guide/use/backup.md b/docs/guide/use/backup.md
new file mode 100644
index 00000000..683ec308
--- /dev/null
+++ b/docs/guide/use/backup.md
@@ -0,0 +1,78 @@
+---
+title: 备份与恢复
+description: Halo 控制台一键备份与恢复全站数据,含异步任务与商城版注意事项。
+---
+
+从 Halo 2.8 开始,Halo 内置了备份和恢复的功能,可以在 Console 中一键备份和恢复完整的数据。
+
+## 备份
+
+:::warning 商城数据不包含在备份中
+因为商城相关的功能数据存储结构不同,所以备份和恢复功能暂不支持商城相关的数据,建议直接备份数据库。
+
+所以如果你使用了 Halo 商城版的商城功能,备份文件不会包含商城相关的数据。
+:::
+
+在 Console 中,点击左侧菜单的 `备份`,进入备份页面。
+
+点击右上角的 `创建备份` 按钮,即可创建一个新的备份请求,需要注意的是,创建备份请求并不会立即开始备份,而是会在后台异步执行,因此需要等待一段时间才能看到备份的结果。
+
+
+
+备份中:
+
+
+
+备份完成:
+
+
+
+## 自动备份与同步
+
+为了保障数据的安全,Halo 提供了自动备份和同步的[备份增强插件](https://www.halo.run/store/apps/app-dHakX),可以定期将数据备份到本地并同步到云端。
+
+:::note 仅限 Halo 付费版
+此插件目前为 [Halo 付费版](../prepare.md#发行版本) 专享插件。
+:::
+
+
+
+## 恢复
+
+:::info 恢复备份前须知
+1. 恢复不限制部署方式,也不限制数据库,也就是说新站点的部署方式和数据库类型可以和备份的站点不同。
+2. 恢复过程可能会持续较长时间,期间请勿刷新页面。
+3. 在恢复的过程中,虽然已有的数据不会被清理掉,但如果有冲突的数据将被覆盖。
+4. 恢复完成之后会提示停止运行 Halo,停止之后可能需要手动运行。
+
+:::
+
+在 Console 中,点击左侧菜单的 `备份`,进入备份页面,然后点击 `恢复` 选项卡即可进入恢复界面,阅读完注意事项之后点击 `开始恢复` 按钮即可显示备份文件上传界面。
+
+
+
+
+
+Halo 支持三种恢复方式:
+
+1. 上传备份文件:上传已有的备份文件进行恢复。
+2. 远程恢复:从远程 URL 下载备份文件进行恢复。
+3. 从备份文件恢复:支持从 [工作目录](../prepare.md#工作目录) 的 backups 目录扫描备份文件,并选择文件进行恢复。
+
+:::info 大文件建议从服务器恢复
+如果你的备份文件较大,推荐提前将备份文件上传到服务器,然后选择 `从备份文件恢复` 方式进行恢复,避免因为网络原因导致上传失败。
+:::
+
+使用 `上传备份文件` 方式进行恢复的操作示例:
+
+选择备份文件后,点击 `上传` 按钮即可开始上传备份文件,上传完成后会自动开始恢复。
+
+
+
+恢复完成,会提示重启 Halo,点击 `确定` 按钮即可重启 Halo。
+
+
+
+
+
+最后,建议去服务器检查 Halo 的运行状态,如果没有设置自动重启,需要手动重启。
diff --git a/docs/guide/use/common.md b/docs/guide/use/common.md
new file mode 100644
index 00000000..44a2b2b9
--- /dev/null
+++ b/docs/guide/use/common.md
@@ -0,0 +1,73 @@
+---
+title: 基础说明
+description: Halo 建站入门:登录注册、控制台、角色分类与站点基础概念说明。
+---
+Halo 作为一款好用又强大的开源建站工具,配合上不同的模板与插件,可以很好地帮助你构建你心中的理想站点。它可以是你公司的官方网站,可以是你的个人博客,也可以是团队共享的知识库,甚至可以是一个论坛、一个商城。
+
+为了更好地发挥出 Halo 的价值,这里有一些基本概念需要你进行了解。
+
+## 登录
+
+Halo 的统一登录入口为 `/login`。
+
+
+
+## 注册
+
+Halo 的注册地址为 `/signup`,需要注意的是,Halo 默认不会开启注册功能,需要在设置页面的 [用户设置](./settings.md#用户设置) 中手动开启。
+
+
+
+## 控制台
+
+Console 控制台是一个 Halo 站点的后台管理系统,只有具有权限的登录用户才可以正常使用控制台功能。你可以在控制台中管理站点中的文章、页面、附件等各种内容,调整站点使用的主题或各种设置,访问地址为 `/console`。
+
+
+
+1. **全局搜索框**:点击或通过快捷键 `Ctrl+K` 可以呼出全局搜索框,输入关键字可以在所有文章、页面、附件、用户及设置项等所有内容中进行全局搜索。
+2. **侧边导航栏**:对控制台提供的功能进行导航,点击导航栏条目会在页面右侧显示对应功能页面。安装某些插件可能会扩展导航栏条目。
+3. **用户信息展示及操作**:展示当前登录用户的头像、名称及角色等信息,`···` 中提供更多用户相关操作。
+4. **功能页面标题**:当前所在的功能页面标题。
+5. **功能页面操作区域**:当前所在功能页面提供的功能操作按钮。
+6. **功能页面主体**:当前所在功能页面的主体显示区域,显示内容及形式视具体页面功能而定。
+
+## 个人中心
+
+从 Halo 2.11 开始,除了 Console 管理控制台,我们新增加了个人中心,用于管理和用户相关的所有功能。有了个人中心之后,也可以让网站有更多的使用和开发场景,个人中心独立访问入口为 `/uc`。
+
+## 文章
+
+文章是 Halo 中的核心概念之一。一篇文章主要由纯文本的文章标题和富文本的文章内容构成,除此之外你还可以为文章设置所属分类、添加标签、设置封面图等。
+
+在不同的站点类型不同的应用场景中,文章的实际含义也会有所区别,它可以代表一则公司新闻、一篇博客或者产品文档中的某一章节。
+
+## 页面
+
+页面与文章类似,同样包含页面标题和富文本形式的页面内容。与文章不同的是页面无法设置所属分类和标签信息,一般用于站点中单一展示功能的页面,例如常见的站点关于页面、联系我们页面等。
+
+## 分类
+
+通过分类可以更好地组织管理文章。分类之间存在层级关系,一个父分类下可包含多个子分类。一篇文章可以同时属于多个分类。
+
+## 标签
+
+标签可以用于为文章添加特定标记,与分类不同的是标签之间没有层级关系。一篇文章也可以同时添加多个标签。
+
+## 附件
+
+由用户上传的,供文章、主题设置等各个地方引用的文件。多用于文章配图、主题配图、用户头像等场景。
+
+## 主题
+
+包含了各种站点页面模板的资源包。用户访问 Halo 站点浏览到的内容及样式,由 Halo 管理端所配置使用的主题所决定。
+
+## 插件
+
+用于扩展 Halo 功能的软件包。插件独立于 Halo 核心应用,可以单独安装、升级、卸载。
+
+:::info 主题和插件获取渠道
+目前有两个官方渠道可以获取主题和插件:
+
+- 应用市场:[https://www.halo.run/store/apps](https://www.halo.run/store/apps)
+- Awesome Halo:[https://github.com/halo-sigs/awesome-halo](https://github.com/halo-sigs/awesome-halo)
+:::
diff --git a/docs/guide/use/faq.md b/docs/guide/use/faq.md
new file mode 100644
index 00000000..09d7c7a0
--- /dev/null
+++ b/docs/guide/use/faq.md
@@ -0,0 +1,139 @@
+---
+title: 常见问题
+description: Halo 使用常见问题:产品定位、数据库结构、找回密码与故障排查。
+---
+
+### Halo 是什么?
+
+**Halo** [ˈheɪloʊ],是一款好用又强大的[开源建站工具](https://github.com/halo-dev/halo),配合上不同的模板与插件,可以很好地帮助你构建你心中的理想站点。它可以是你公司的官方网站,可以是你的个人博客,也可以是团队共享的知识库,甚至可以是一个论坛、一个商城。
+
+### 为什么 Halo 启动之后,数据库只有一张表?
+
+从 Halo 2.0 开始,为了方便插件扩展,能够方便的持久化数据,我们设计了一种自定义模型的方案,详情可参考 RFC:[自定义模型设计
+](https://github.com/halo-dev/rfcs/tree/main/extension)
+
+### 忘记密码怎么办?
+
+1. 站点管理员已经配置好邮件通知,并且用户已完成电子邮箱验证时,可以点击登录页面的 `找回密码` 链接,填写邮箱后,系统将向该邮箱发送密码重置链接,用户可通过该链接重置密码;
+2. 如果不满足上述条件,或者密码重置邮件不能发送成功,请直接联系具有用户管理权限的管理员进行密码重置操作,管理员可参考文档[修改用户密码](./users#修改用户密码)部分修改指定用户的密码;
+3. 如果系统没有任何一个能够正常登录控制台且具有用户管理权限的管理员账号,则用户需要通过更新数据库记录的方式重置指定用户的密码。
+
+ :::info 参考 SQL 语句
+
+ 通过以下 SQL 语句,可以将 `admin` 用户的密码重置为 `password`,密码重置后请尽快修改为更加安全的密码。
+
+ **PostgreSQL** 数据库
+
+ ```sql
+ UPDATE
+ extensions
+ SET
+ data = convert_to(
+ jsonb_set(
+ convert_from(data, 'UTF-8') :: jsonb,
+ '{spec,password}',
+ '"{bcrypt}$2a$10$7tBEL1sNQSr/uWtLZHLmCeA9IGx0I9/Jz//3Uwo/anIm9xdxv.xrO"'
+ ) :: text,
+ 'UTF-8'
+ )
+ WHERE
+ name LIKE '/registry/users/admin';
+ ```
+
+ **MySQL** 数据库
+
+ ```sql
+ UPDATE
+ extensions
+ SET
+ data = JSON_SET(
+ CONVERT(data USING utf8mb4),
+ '$.spec.password',
+ '{bcrypt}$2a$10$7tBEL1sNQSr/uWtLZHLmCeA9IGx0I9/Jz//3Uwo/anIm9xdxv.xrO'
+ )
+ WHERE
+ name LIKE '/registry/users/admin';
+ ```
+
+ :::
+
+### 附件上传提示 `413 Request Entity Too Large` 如何解决?
+
+这可能是由于 Nginx 的上传大小限制所导致的。可以在 Nginx 的配置文件下的 server 节点加入 `client_max_body_size 1024m;` 即可解决,如果 1024m 还不够,请自行断定,详细配置参考如下:
+
+```nginx {4}
+server {
+ listen 80;
+ server_name localhost;
+ client_max_body_size 1024m;
+}
+```
+
+### 网站加载速度慢,是什么问题导致的?
+
+导致网站加载速度慢的原因有很多,建议打开浏览器的 Developer Tools 查看具体是哪个请求时间过长,然后进行针对性的优化。这里提供一些可能的原因:
+
+1. 服务器带宽过小,很多厂商提供的最低带宽一般是 1M。
+2. 服务器地区过远,这个需要自行取舍。
+3. 网站上的图片过多或者体积过大,可以尝试压缩图片,或者参考 [优雅的让 Halo 支持 webp 图片输出](https://www.halo.run/archives/halo-and-webp) 的教程配置一个 Webp 图片的服务。
+4. 部分主题的静态资源可能是由公共 CDN 提供的,当这个 CDN 不稳定的时候可能会导致加载变慢。
+
+一些提升网站加载速度的建议:
+
+1. 尽量不要选择 1M 带宽的服务器,可以根据自己的预算适当提升带宽。一般 3M 以上即可。
+2. 尽量购买网络质量较好的服务器,或者较近区域的服务器。
+3. 如果一定需要放大量的图片,建议先无损压缩一下再使用。
+4. 如上所说,可以自行搭建一个 Webp 图片转换的服务,参考 [优雅的让 Halo 支持 webp 图片输出](https://www.halo.run/archives/halo-and-webp)。
+5. 如果网站的静态资源加载慢是由三方 CDN 导致的,可以自行修改主题。
+6. 可以使用全站 CDN 加速的方案。
+
+### 如何在一台服务器上部署多个站点?
+
+使用 Docker 创建多个容器,因为使用 Docker 可以将内部的工作目录映射到宿主机的任何目录,可以参考以下创建容器的方式:
+
+ ```bash
+ # 第一个 Halo 容器
+ docker run \
+ -it -d \
+ --name halo-1 \
+ -p 8090:8090 \
+ -v ~/.halo2:/root/.halo2 \
+ registry.fit2cloud.com/halo/halo-pro:2.26 \
+
+ # 第二个 Halo 容器
+ docker run \
+ -it -d \
+ --name halo-2 \
+ -p 8091:8090 \
+ -v ~/.halo2_2:/root/.halo2 \
+ registry.fit2cloud.com/halo/halo-pro:2.26 \
+ ```
+
+更多 Docker 相关的教程请参考:[使用 Docker 部署 Halo](../install/docker.mdx)
+
+### 如何查看运行日志?
+
+1. 可以在 Console 端的概览页面下载最近的日志文件。
+2. 使用 docker logs 命令进行查看。
+
+ ```bash
+ # '-f' 滚动更新日志
+ # '-n 200' 从倒数第 200 行开始查看
+ # 更多帮助可以查看 'docker logs --help'
+ docker logs -f halo -n 200
+ ```
+
+### 前台样式丢失,如何解决?
+
+前台样式不正常或者丢失有很多种问题的可能,最快捷定位问题的方式就是打开浏览器控制台查看具体请求的错误,以下列出了部分导致出现该问题的常见原因:
+
+1. `外部访问地址` 与实际访问地址不一致。也可能是开启了 https 之后,无法正常加载 http 资源,将 [外部访问地址](../install/config.md#halo-独有配置) 改为 https 协议即可。
+2. Nginx 配置了静态资源缓存,但没有设置 `proxy_pass`,参考如下:
+
+ ```nginx
+ location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
+ proxy_pass http://halo;
+ expires 30d;
+ access_log off;
+ }
+ ```
diff --git a/docs/guide/use/index.md b/docs/guide/use/index.md
new file mode 100644
index 00000000..948f4194
--- /dev/null
+++ b/docs/guide/use/index.md
@@ -0,0 +1,5 @@
+---
+title: 功能文档
+description: Halo 功能操作总览,涵盖文章、页面、附件、菜单、主题、插件、应用市场、用户权限、站点设置、备份恢复及商城管理。
+overview: true
+---
diff --git a/docs/user-guide/menus.md b/docs/guide/use/menus.md
similarity index 100%
rename from docs/user-guide/menus.md
rename to docs/guide/use/menus.md
diff --git a/docs/guide/use/pages.md b/docs/guide/use/pages.md
new file mode 100644
index 00000000..f6b389f2
--- /dev/null
+++ b/docs/guide/use/pages.md
@@ -0,0 +1,20 @@
+---
+title: 页面
+description: Halo 自定义页面:关于页、联系页等独立页面与别名 URL 访问说明。
+---
+
+页面与文章类似,同样包含页面标题和富文本形式的页面内容。与文章不同的是页面无法设置所属分类和标签信息,一般用于站点中单一展示功能的页面,例如常见的站点关于页面、联系我们页面等。
+
+自定义页面的访问链接为 `/{slug}` 其中 `slug` 为自定义页面的别名。
+
+对于如下的关于页面,便可以通过 `/about` 地址进行访问。
+
+
+
+:::info 自定义页面模板
+自定义页面默认使用主题端的 `page.html` 模板进行渲染,如果主题中提供了针对自定义页面的其他模板,用户可以通过修改自定义页面高级设置中的自定义模板设置进行使用。
+:::
+
+#### 页面操作
+
+对于页面的新建、设置、发布及删除等操作,与文章操作基本一致,具体操作请参考[《用户指南 - 文章》](./posts.md)章节,此处不再赘述。
diff --git a/docs/guide/use/plugins.md b/docs/guide/use/plugins.md
new file mode 100644
index 00000000..e4208765
--- /dev/null
+++ b/docs/guide/use/plugins.md
@@ -0,0 +1,103 @@
+---
+title: 插件
+description: Halo 插件安装、启用与卸载,及应用市场等获取渠道的管理指南。
+---
+
+插件是用于扩展 Halo 功能的软件包。插件独立于 Halo 核心应用,可以单独安装、升级、卸载。
+
+本文档仅对插件的基本管理功能进行说明,关于插件的详细使用说明请参考对应插件的文档。
+
+:::info 插件获取渠道
+目前有两个官方渠道可以获取插件:
+
+- 应用市场:[https://www.halo.run/store/apps](https://www.halo.run/store/apps)
+- Awesome Halo:[https://github.com/halo-sigs/awesome-halo](https://github.com/halo-sigs/awesome-halo)
+
+:::
+
+## 安装插件
+
+进入插件管理页面,点击右上角的 `安装` 按钮即可打开插件安装的对话框。
+
+### 从内置应用市场安装(推荐)
+
+从 Halo 2.10 开始,内置了应用市场插件,可以更加方便在 Console 直接安装应用市场的插件。
+
+
+
+:::info 查看内置应用市场指南
+更多关于内置应用市场的使用说明可查阅:[应用市场](./app-store.md)
+:::
+
+### 本地上传安装
+
+
+
+插件安装成功后,便会出现在插件管理的列表中。
+
+:::info 注意第三方插件安全
+从非 Halo 官网应用市场安装插件时,请务必注意其安全性。
+:::
+
+### 远程下载安装
+
+同样,在安装插件的对话框中,切换到远程下载选项卡,输入插件的下载地址,点击 `下载` 按钮即可开始下载插件。
+
+:::info 注意第三方插件安全
+从非 Halo 官网应用市场安装插件时,请务必注意其安全性。
+:::
+
+## 插件设置
+
+点击插件列表中的某个插件进入插件详情页面。与主题设置类似,插件详情页面默认显示出了当前插件的详细信息,在详细信息标签页后方的标签页,即为插件提供的相关设置。不同的插件提供的设置项各不相同,设置项的详细说明请参考对应插件的文档。
+
+
+
+此处以 `Umami` 插件为例。
+
+:::info 重置插件设置
+你可以点击插件列表指定插件所在行后方的 `···` 更多操作按钮,选择其中的 `重置` 选项将插件提供的设置项恢复为默认值。
+:::
+
+## 启用/禁用插件
+
+点击插件列表或插件详情页中的启用/禁用开关,即可切换插件的启用禁用状态。
+
+
+
+## 升级插件
+
+如果当前使用了内置的应用市场插件,在插件更新后会在插件列表中显示更新提示,点击 **立即更新** 按钮即可。
+
+手动升级可以点击具体插件的 `···` 更多操作按钮,选择其中的 `升级` 选项即可打开升级插件的对话框。
+
+## 重置
+
+如果你需要清空所有插件配置并重新配置插件,你可以通过 `···` 更多操作中的 `重置` 选项将主题提供的设置项恢复为默认值。
+
+## 卸载插件
+
+点击插件列表指定插件所在行后方的 `···` 更多操作按钮,选择其中的 `卸载` 选项即可对当前插件进行卸载。
+
+
+
+:::info 卸载方式的区别
+目前提供了 `卸载` 及 `卸载并删除配置` 两种卸载方式。
+仅卸载插件时插件的配置信息会进行保留,当重新安装插件后还可以使用之前已保存的配置。
+:::
+
+## 扩展配置
+
+在 Halo 的插件机制中,我们使用扩展点来实现插件与 Halo 核心应用的交互,插件可以通过扩展点来扩展 Halo 的功能。这就意味着插件可能会实现和 Halo 或者其他插件相同的扩展点,这时候就需要对扩展点进行管理。
+
+以搜索引擎为例,Halo 默认提供了 `Lucence` 搜索引擎和对应的扩展点,那么用户在安装了其他搜索引擎插件之后就需要在这里进行选择,否则 Halo 无法确定使用哪个搜索引擎。
+
+
+
+进入插件管理,点击右上角的 `扩展配置` 按钮即可进入扩展配置页面。
+
+
+
+这里以搜索引擎为例,安装了 `Meilisearch` 插件之后就可以在这里选择启用这个插件的搜索引擎。
+
+更多关于扩展点的说明可以查阅:[插件开发 / 扩展点和定制化 / 扩展点](../../developer-guide/plugin/extension-points/server/index.md)
diff --git a/docs/guide/use/posts.md b/docs/guide/use/posts.md
new file mode 100644
index 00000000..4b670680
--- /dev/null
+++ b/docs/guide/use/posts.md
@@ -0,0 +1,140 @@
+---
+title: 文章
+description: Halo 文章编辑发布:编辑器、分类标签、定时发布与回收站等操作。
+---
+## 新建文章
+
+目前你可以通过以下两种方式新建一篇文章:
+
+1. 点击仪表盘快捷访问组件中的创建文章
+2. 通过左侧导航栏进入文章页面,点击右上角的新建按钮
+
+进入到如下页面后,你就可以开始编辑自己的文章内容了:
+
+
+
+1. **编辑器切换**:如果安装了其他的编辑器插件,那么就可以在这个位置选择所需的编辑器。
+2. **预览**:点击预览按钮可以在未发布的时候预览文章的渲染效果。
+3. **保存**:仅保存文章内容,但是不发布。
+4. **发布**:保存并发布文章内容。
+
+:::info 获取其他文章编辑器
+Halo 支持通过插件来拓展文章编辑器,目前除了 Halo 内置的编辑器,应用市场中还有其他的编辑器可用:[https://www.halo.run/store/apps?tag=editor](https://www.halo.run/store/apps?tag=editor)
+:::
+
+## 文章设置
+
+当你想修改一篇文章的标题、所属分类等信息时,你可以通过以下方式进行操作:
+
+1. 点击文章列表指定文章所在行的 `···` 更多操作按钮,选择设置。
+2. 在文章列表点击指定文章的标题进入文章编辑页面,点击页面右上角的设置按钮。
+
+
+
+### 设置说明
+
+- **标题**:用于在主题端显示的文章标题。
+- **别名**:通常用于生成文章访问地址,如:`/archives/{slug}`。
+- **分类目录**:文章所属分类,方便用户区分文章类型进行针对性浏览,一篇文章可以属于多个分类。
+- **标签**:文章添加的标签,方便用户更进一步标识文章信息,一篇文章可以添加多个标签。
+- **自动生成摘要**:文章摘要是对文章内容的概括性描述。
+ - **是**:系统根据文章内容,自动生成一段摘要。
+ - **否**:用户自行输入文章摘要文本。
+- **自定义摘要**:用户自行输入的文章摘要文本,仅当 `自动生成摘要` 为否时生效。
+- **允许评论**:是否允许用户在主题端浏览文章时对该文章发起评论。
+- **是否置顶**:文章是否排序在文章列表的最顶部。
+- **可见性**:访问站点主题端时,哪些人可以看到这篇文章。
+ - **公开**:所有用户均可看到这篇文章,包括未登录用户。
+ - **私有**:仅文章作者可以看到这篇文章。
+- **发表时间**:手动指定文章的发表时间,未指定时以实际发布时间为准。
+- **自定义模板**:自定义文章的渲染模板,由主题提供支持。
+- **封面图**:文章封面图设置,需要主题支持该功能。
+- **元数据**:供主题、插件使用的额外数据信息。比如主题在文章页面提供了一个下载按钮,那么就可以通过元数据来指定下载地址。
+
+## 发布及取消发布
+
+对于已发布的文章,默认可以通过站点地址进行公开访问,用户可以在文章高级设置中修改可见性。
+
+你可以在上文介绍的文章设置对话框中,修改文章的发布状态。
+
+在文章设置对话框中,若文章当前处于已发布状态,下方会显示取消发布按钮。若文章处于未发布状态,下方则不会显示发布按钮。
+
+## 删除文章
+
+当你不再需要一篇文章时,你可以通过以下方式删除该文章:
+
+1. 点击文章列表指定文章所在行的 `···` 更多操作按钮,选择删除。
+2. 勾选文章列表中的全选/多选框,选中一篇或多篇文章进行批量删除。
+
+文章删除后会进入回收站中,点击右上角的回收站按钮进入回收站。在回收站中,你可以永久删除或恢复指定的文章。
+
+:::warning 永久删除不可恢复
+文章永久删除后将从数据库删除该记录,后续无法再恢复找回。
+:::
+
+## 文章分类管理
+
+通过分类可以更好地组织管理文章。分类之间存在层级关系,一个父分类下可包含多个子分类。一篇文章可以同时属于多个分类。
+
+在文章管理页面,点击页面右上角的 `分类` 按钮即可进入分类管理页面。
+
+### 新建文章分类
+
+点击分类管理页面右上角的 `新建` 按钮即可新建一个分类。
+
+
+
+
+#### 设置说明
+
+- **名称**:用于在主题端显示的分类名称。
+- **别名**:通常用于生成分类归档页面的访问地址。默认路径规则为 `/categories/{slug}`,其中 `slug` 为分类别名,访问该地址即可浏览该分类下的所有文章。分类页路由前缀可[在设置中修改](./settings#主题路由设置)。
+- **自定义模板**:自定义分类归档页面的渲染模板,由主题提供支持。
+- **自定义文章模板**:自定义当前分类下所有文章的渲染模板,由主题提供支持。
+- **封面图**:分类封面图设置,需要主题支持该功能。
+- **在列表中隐藏**:开启此选项后,此分类和其下子分类,以及其下文章将不会显示在前台的列表中,需要主动访问分类归档页面,此功能仅对第一级目录生效。
+- **阻止文章级联查询**:阻止父级分类在级联文章查询中包含此分类及其子分类。
+- **描述**:关于该文章分类的更多描述信息。
+- **元数据**:供主题、插件使用的额外数据信息。例如部分主题期望使用不同的颜色对分类进行区分,便可以使用该功能为分类增加颜色相关的元数据。
+
+### 调整分类层级
+
+分类之间存在层级关系,一个父分类下可包含多个子分类。
+
+你可以按住分类前的图标,通过拖拽来调整分类间的层级关系和顺序。
+
+
+
+### 修改/删除分类
+
+点击指定分类所在行后方的 `···` 更多操作按钮,可以对文章分类进行修改或删除。
+
+:::warning 删除分类的影响
+文章分类删除后,对应文章的关联将被解除,且该操作不可恢复,请谨慎进行该操作。
+:::
+
+## 文章标签管理
+
+标签可以用于为文章添加特定标记,与分类不同的是标签之间没有层级关系。一篇文章也可以同时添加多个标签。
+
+### 新建文章标签
+
+点击文章标签页面右上角的 `新建` 按钮即可新建一个标签。
+
+
+
+#### 设置说明
+
+- **名称**:用于在主题端显示的标签名称。
+- **别名**:通常用于生成标签归档页面的访问地址。默认路径规则为 `/tags/{slug}`,其中 `slug` 为标签别名,访问该地址即可浏览具有该标签的所有文章。标签页路由前缀可[在设置中修改](./settings#主题路由设置)。
+- **颜色**:用于在控制台及主题端显示的标签颜色,主题端显示颜色需要主题支持该功能。
+- **封面图**:标签封面图设置,需要主题支持该功能。
+- **元数据**:供主题、插件使用的额外数据信息。
+
+### 修改/删除标签
+
+在列表模式下,点击指定标签所在行后方的 `···` 更多操作按钮,可以对文章标签进行修改或删除。
+
+:::warning 删除标签的影响
+文章标签删除后,对应文章的关联将被解除,且该操作不可恢复,请谨慎进行该操作。
+:::
diff --git a/docs/guide/use/settings.md b/docs/guide/use/settings.md
new file mode 100644
index 00000000..d7b38a84
--- /dev/null
+++ b/docs/guide/use/settings.md
@@ -0,0 +1,241 @@
+---
+title: 站点设置
+description: Halo 站点设置:基本信息、文章展示、评论、用户与 SEO 等控制台项。
+---
+
+## 基本设置
+
+Halo 提供了以下站点基本信息设置:
+
+- **站点标题**
+- **站点副标题**
+- **Logo**
+- **Favicon**
+- **首选语言**
+
+在控制台设置完成后,主题端可以通过特定的表达式获取到这些信息并且在对应的位置进行展示。具体是否读取使用这些配置、在哪些位置显示这些信息由使用的不同主题而决定。
+
+以 Halo 2.0 的[默认主题 Earth](https://github.com/halo-dev/theme-earth) 为例,这些设置信息将在如下位置进行展示。
+
+
+
+## 文章设置
+
+针对主题端的文章展示,Halo 提供了以下设置项:
+
+- **文章列表显示条数**:首页的文章显示条数。
+- **归档页文章显示条数**:归档页面(\/archives)的文章显示条数。
+- **分类页文章显示条数**:分类归档页面(\/categories\/\{slug\})的文章显示条数。
+- **标签页文章显示条数**:标签归档页面(\/tags\/\{slug\})的文章显示条数。
+- **别名生成策略**:
+ - 根据标题:自动根据文章标题生成,比如文章标题为 `Hello Halo`,那么别名将生成为 `hello-halo`
+ - 时间戳:使用当前时间的时间戳作为标题
+ - Short UUID:生成类似于 `BT5kIgrb` 的别名
+ - UUID:生成类似于 `4f662408-ed90-470b-9ed1-7fdc0283631b` 的别名
+- **附件存储策略**:在编辑器中上传图片时的附件存储策略
+ - 已经在 Halo 2.22 中标记为过时,后续请使用 [附件设置](#附件设置) 代替
+- **附件存储组**:在编辑器中上传图片时的附件分组
+ - 已经在 Halo 2.22 中标记为过时,后续请使用 [附件设置](#附件设置) 代替
+
+## SEO 设置
+
+针对站点的 SEO(搜索引擎优化)需求,Halo 提供了以下设置项:
+
+- **屏蔽搜索引擎**:配置后会在所有页面 HTML 源码的 head 部分添加:
+
+ ```html
+
+ ```
+
+ :::info 提示
+ 需要注意的是,并不是所有搜索引擎都会遵守这个规则。
+ :::
+
+- **站点关键词**:格式为以 `,` 分隔的关键词列表,配置后会在所有页面 HTML 源码的 head 部分添加:
+
+ ```html
+
+ ```
+
+ :::warning 注意
+ 目前主流的搜索引擎(如 Google、Bing、百度搜索等)已经不再使用该标签作为关键词的参考,因此该设置项的作用已经不大,未来我们也可能会移除该设置项。
+ :::
+
+- **站点描述**:配置后会在所有页面 HTML 源码的 head 部分添加:
+
+ ```html
+
+ ```
+
+## 用户设置
+
+- **开放注册**:是否允许访客注册,勾选之后在登录页面会显示注册入口。
+- **注册需验证邮箱**:开启之后,用户注册时必须要经过邮箱验证,需要配置好 [邮件通知](#通知设置)。
+- **保留用户名**:设置之后这些用户名将无法被其他用户注册。
+- **默认角色**:新注册用户的默认角色。
+- **注册时所需协议**:选择注册时需要用户阅读并同意的自定义页面,例如用户协议、隐私政策等。
+- **头像存储位置**:用户上传头像的存储策略。
+ - 已经在 Halo 2.22 中标记为过时,后续请使用 [附件设置](#附件设置) 代替
+- **个人中心附件存储位置**:用户在个人中心端上传附件时的默认存储策略,需要用户包含上传附件的权限。
+ - 已经在 Halo 2.22 中标记为过时,后续请使用 [附件设置](#附件设置) 代替
+
+### 注册协议页面
+
+开启 **开放注册** 后,可以通过 **注册时所需协议** 选择一个或多个自定义页面作为注册协议。保存后,注册页面会显示 `我已阅读并同意` 勾选项,并将已选择的页面显示为可点击链接。用户必须勾选同意后才能提交注册。
+
+从 Halo 2.25.0 开始,新安装站点会在初始化时自动创建 **用户协议** 和 **隐私政策** 两个自定义页面,并默认将它们配置为注册时所需协议。
+
+:::warning 开放注册前替换协议内容
+自动创建的协议页面只包含占位内容。正式开放注册前,请进入 [页面](./pages.md) 管理并替换为你站点实际使用的用户协议、隐私政策或其他合规说明。
+:::
+
+如果不需要在注册时要求用户同意协议,可以清空 **注册时所需协议** 并保存设置。
+
+## 附件设置
+
+- **管理端附件配置**:为管理端设置附件上传默认的存储策略和分组,通常用于直接上传附件的场景,比如在文章编辑器中粘贴上传。
+- **个人中心附件配置**:为个人中心设置附件上传默认的存储策略和分组,如果你的网站允许部分用户在个人中心创建文章,**那么建议单独创建一个专门的存储策略,并限制文件格式和大小**。
+- **头像附件配置**:用户上传头像的存储策略配置,**建议单独创建存储策略并限制仅允许上传图片**。
+
+## 评论设置
+
+针对站点的评论功能,Halo 提供了以下设置项:
+
+- **启用评论**:全局评论功能开关配置,修改后影响所有文章、页面的评论功能。
+- **新评论审核**:新增的评论是否需要在控制台进行审核,审核通过后其他访问者才能看到该条评论。
+- **仅允许注册用户评论**:开启后只有登录用户才能添加评论,关闭后匿名(未登录)的访客也可以通过自行填写昵称、邮箱、网址等信息进行评论。
+
+## 主题路由设置
+
+针对访问站点各种类型页面的 URL 生成规则,Halo 提供了以下主题路由设置项:
+
+- **分类页路由前缀**:定位到分类列表页面以及分类归档页面。
+ - 默认的分类列表页面 URL 规则前缀为 `/categories`
+ - 默认的分类归档页面 URL 规则前缀为 `/categories/{slug}`
+- **标签页路由前缀**:定位到标签列表页面以及标签归档页面。
+ - 默认的标签列表页面 URL 规则前缀为 `/tags`
+ - 默认的标签归档页面 URL 规则前缀为 `/tags/{slug}`
+- **归档页路由前缀**:定位到文章归档页面的 URL 规则前缀,默认为 `/archives`。
+- **文章详情页访问规则**:定位到具体文章详情页面的 URL 规则前缀,默认为 `/archives/{slug}` ,用户可从以下路径规则进行选择:
+ - `/archives/{slug}`
+ - `/archives/{name}`
+ - `/?p={name}`
+ - `/?p={slug}`
+ - `/?p={slug}`
+ - `/{year}/{slug}`
+ - `/{year}/{month}/{slug}`
+ - `/{year}/{month}/{day}/{slug}`
+
+ :::info 变量说明
+ - `slug`:文章别名
+ - `name`:文章 `metadata.name` 字段值
+ - `year`:四位数格式的文章发布年份
+ - `month`:两位数格式的文章发布月份
+ - `day`:两位数格式的文章发布日
+
+ :::
+
+## 代码注入
+
+你可以使用代码注入功能,在特定类型的页面中注入额外的代码。你可以通过该功能覆盖或补充部分主题 CSS 样式,或者引入额外的 JavaScript 脚本扩展主题端功能。
+
+- **全局 head 标签**:该代码将会被注入到所有页面的 head 标签中。
+- **内容页 head 标签**:该代码将会被注入到文章、页面详情页的 head 标签中。
+- **页脚**:该代码将会被注入到所有页面的页脚中。
+
+## 品牌信息
+
+:::note 仅限 Halo 付费版
+限 [Halo 付费版](../prepare.md#发行版本) 可用。
+:::
+
+
+
+
+
+- **登录页 Logo**:登录、注册等页面的 Logo 设置,如果不填写将默认使用 Halo 的标志。
+- **登录页 Logo 大小**:用于调整登录页面的 Logo 大小。
+- **控制台 Logo**:Console 控制台、UC 个人中心的 Logo 设置,如果不填写将默认使用 Halo 的标志。
+- **控制台 Logo 大小**:用于调整控制台的 Logo 大小。
+- **显示控制台页脚信息**:是否显示 Console 控制台和 UC 个人中心底部的版权信息。
+- **自定义页脚信息**:如果勾选了 **显示控制台页脚信息**,可以自定义底部的版权信息,支持 HTML,如果不填写将使用默认的 Halo 版权信息。
+
+## 通知设置
+
+从 2.10.0 版本开始,Halo 提供了 **通知** 功能,当有新的评论、留言、回复等事件发生时,Halo 会通过配置的方式通知站长或者相关用户。同时,个人中心配置的电子邮箱也会作为通知的接收邮箱。
+
+### 邮件通知
+
+- **启用邮件通知器**:开启后,当有新的评论、留言、回复等事件发生时,Halo 会通过 **邮件** 的方式通知站长或者相关用户。
+- **用户名**:你需要在此处填写你的 **邮箱账号**。
+- **密码**:你需要在此处填写你的 **邮箱密码** 或相关的 **授权码**,具体请参考你所使用邮箱的相关说明。
+- **显示名称**:你需要在此处填写你的 **邮箱显示名称**,该名称将会作为邮件发送者的名称显示。
+- **SMTP 服务器地址**:你需要在此处填写你的 **SMTP 服务器地址**,具体请参考你所使用邮箱的相关说明。
+- **端口号**:你需要在此处填写你的 **SMTP 服务器端口号**,具体请参考你所使用邮箱的相关说明。
+- **加密方式**:你需要在此处选择你的 **SMTP 服务器加密方式**,具体请参考你所使用邮箱的相关说明。
+
+> 常见邮箱服务商的文档如下:
+>
+> - [QQ 邮箱](https://service.mail.qq.com/detail/0/310)
+> - [163 邮箱](https://help.mail.163.com/faqDetail.do?code=d7a5dc8471cd0c0e8b4b8f4f8e49998b374173cfe9171305fa1ce630d7f67ac2a5feb28b66796d3b)
+> - [Gmail](https://support.google.com/mail/answer/7104828?hl=zh-Hans)
+> - [阿里云企业邮箱](https://help.aliyun.com/document_detail/36687.html)
+> - [腾讯企业邮箱](https://open.work.weixin.qq.com/help2/pc/19870)
+
+### 短信通知
+
+:::note 仅限 Halo 付费版
+限 [Halo 付费版](../prepare.md#发行版本) 可用。
+:::
+
+目前短信通知在 Halo 中基本只作为用户登录时发送验证码使用,以下是配置说明:
+
+- 提供商 (腾讯云/阿里云/UCloud):目前仅支持腾讯云、阿里云、UCloud 短信服务中的国内短信服务,即仅能向中国大陆手机号码发送短信
+- 超时时间:短信在系统中记录的超时时间,超过当前时间后系统会判断已到期
+- 验证码长度:发送验证码到手机商的长度,一般为 6 位
+- 提供商具体配置:不同的提供商需要提供的参数不一致,具体提供商的具体参数说明请参考后续文档
+- 测试短信:提供检测机制测试当前的配置是否有效。点击测试短信会发送短信给当前操作用户,所以当前的用户在个人信息中配置正确的手机号码
+
+#### 腾讯云短信服务配置说明
+
+在 Halo 中进行以下设置之前,需要先在腾讯云开通短信服务,并创建可用的签名、模板及应用等内容。
+
+- [腾讯云短信服务控制台地址](https://console.cloud.tencent.com/smsv2)
+- [腾讯云短信服务文档地址](https://cloud.tencent.com/document/product/382/37745)
+
+1. SecretId:用于调用腾讯云接口的 API 密钥的 SecretId,可以在腾讯云控制台 [API密钥管理页面](https://console.cloud.tencent.com/cam/capi) 创建
+2. SecretKey:用于调用腾讯云接口的 API 密钥的 SecretKey,可以在腾讯云控制台 [API密钥管理页面](https://console.cloud.tencent.com/cam/capi) 创建
+3. 地域:腾讯云接口要求的必传参数,可选的地域列表可以查看 [腾讯云文档](https://cloud.tencent.com/document/api/382/52071#.E5.9C.B0.E5.9F.9F.E5.88.97.E8.A1.A8)
+4. 应用 ID:在腾讯云短信服务 [应用管理菜单](https://console.cloud.tencent.com/smsv2/app-manage) 中创建的应用的 `SDK AppID`
+5. 签名内容:在腾讯云短信服务 [签名管理菜单](https://console.cloud.tencent.com/smsv2/csms-sign) 中创建的签名的 `签名内容`
+6. 模板 ID:在腾讯云短信服务 [正文模板管理菜单](https://console.cloud.tencent.com/smsv2/csms-template) 中创建的正文模板的 `ID`
+
+#### 阿里云短信服务配置说明
+
+在 Halo 中进行以下设置之前,需要先在阿里云开通短信服务,并创建可用的签名、模板等内容。
+
+- [阿里云短信服务控制台地址](https://dysms.console.aliyun.com/overview)
+- [阿里云短信服务文档地址](https://help.aliyun.com/zh/sms/)
+
+1. AccessKey ID:用于调用阿里云接口的 API 密钥的 AccessKey ID,可以在阿里云控制台 [AccessKey管理页面](https://ram.console.aliyun.com/manage/ak) 创建
+2. AccessKey Secret:用于调用阿里云接口的 API 密钥的 AccessKey Secret,可以在阿里云控制台 [AccessKey管理页面](https://ram.console.aliyun.com/manage/ak) 创建
+3. 地域:阿里云接口要求的必传参数,可选的地域列表可以查看 [阿里云文档](https://help.aliyun.com/zh/sms/developer-reference/api-dysmsapi-2017-05-25-endpoint?spm=a2c4g.11174283.0.0.13d64994r9G5rN)
+4. 短信签名:在阿里云短信服务 [签名管理菜单](https://dysms.console.aliyun.com/domestic/text/sign) 中创建的签名的 `签名名称`
+5. 短信模板:在阿里云短信服务 [模板管理菜单](https://dysms.console.aliyun.com/domestic/text/template) 中创建的模板的 `模板CODE`
+
+#### UCloud 短信服务配置说明
+
+在 Halo 中进行以下设置之前,需要先在 UCloud 开通短信服务,并创建可用的签名、模板等内容。
+
+- [UCloud 短信服务控制台地址](https://console.ucloud.cn/usms)
+- [UCloud 短信服务文档地址](https://docs.ucloud.cn/usms/README)
+
+> 目前仅支持国内短信且短信模版仅支持一个变量的验证码类型短信模版如:**你的验证码为{1},该验证码5分钟内有效,如非本人操作,请忽略本短信!**
+
+1. 公钥:用于调用 UCloud 接口的 API 密钥的 公钥,可以在 UCloud 控制台 [API密钥](https://console.ucloud.cn/uaccount/api_manage) 创建
+2. 私钥:用于调用 UCloud 接口的 API 密钥的 私钥,可以在 UCloud 控制台 [API密钥](https://console.ucloud.cn/uaccount/api_manage) 创建
+3. 项目 ID:UCloud 接口要求的必传参数,可选的项目列表可以查看 [项目管理](https://console.ucloud.cn/uaccount/iam/project_manage) 中的`项目ID`
+4. 模版 ID:在 UCloud 短信服务 [短信模板](https://console.ucloud.cn/usms/domestic) 中创建的签名的 `模板ID`
+5. 签名内容:在 UCloud 短信服务 [短信签名](https://console.ucloud.cn/usms/domestic) 中创建的签名的 `签名内容`
+
+配置完成之后,可以在 [身份认证](../use/users.md#身份认证) 中开启手机号登录。
diff --git a/docs/guide/use/shop/_meta.json b/docs/guide/use/shop/_meta.json
new file mode 100644
index 00000000..746bb2c0
--- /dev/null
+++ b/docs/guide/use/shop/_meta.json
@@ -0,0 +1,11 @@
+[
+ "prepare",
+ "console-home",
+ "payments",
+ "sales-channels",
+ "products",
+ "orders",
+ "virtual-delivery",
+ "theme-dev",
+ "mp"
+]
diff --git a/docs/user-guide/shop/console-home.mdx b/docs/guide/use/shop/console-home.mdx
similarity index 100%
rename from docs/user-guide/shop/console-home.mdx
rename to docs/guide/use/shop/console-home.mdx
diff --git a/docs/guide/use/shop/index.mdx b/docs/guide/use/shop/index.mdx
new file mode 100644
index 00000000..6869d73d
--- /dev/null
+++ b/docs/guide/use/shop/index.mdx
@@ -0,0 +1,23 @@
+---
+title: 商城
+description: Halo 商城版功能概览:开店、商品、支付发货与前台路由等用户指南索引。
+overview: true
+---
+
+import { Tab, Tabs } from '@rspress/core/theme';
+
+
+:::note 仅限 Halo 商城版
+限 [Halo 商城版](../../prepare.md#发行版本) 可用。
+:::
+
+商城模块是 Halo 商城版的一项功能,支持用户基于 Halo 站点创建店铺,上架多种类型的货品,配置商品支付和发货方式。为实体商品、虚拟商品、链接商品等销售场景提供完备的电商解决方案。
+
+
+
+ 
+
+
+ 
+
+
diff --git a/docs/guide/use/shop/mp.mdx b/docs/guide/use/shop/mp.mdx
new file mode 100644
index 00000000..cf6cd388
--- /dev/null
+++ b/docs/guide/use/shop/mp.mdx
@@ -0,0 +1,27 @@
+---
+title: 小程序
+description: Halo 商城小程序的获取、配置与发布说明。
+---
+
+自 Halo 2.24 起,Halo 商城支持以微信小程序作为销售终端。相较于 Web 端,小程序在国内拥有更高的用户渗透率,更适合承载移动端购物场景。
+
+
+
+## 获取方式
+
+Halo 官方目前以源码形式提供小程序模板,你需要自行编译,并通过微信开发者工具完成发布。
+
+- 源码仓库:[lxware-dev/halo-shop-miniprogram](https://github.com/lxware-dev/halo-shop-miniprogram)
+- 在线文档:[小程序配置与发布文档](https://github.com/lxware-dev/halo-shop-miniprogram/tree/main/docs)
+
+## 使用流程
+
+:::info Fork 后再修改
+为了便于后续同步官方更新,建议先将仓库 Fork 到自己的 GitHub 账户,再克隆到本地进行配置、编译和发布。
+:::
+
+```bash
+git clone https://github.com/{your-github-username}/halo-shop-miniprogram.git
+```
+
+克隆完成后,请阅读源码仓库中的 `docs` 目录,其中包含完整的小程序配置、编译与发布说明,可按文档完成后续操作。
diff --git a/docs/guide/use/shop/orders.mdx b/docs/guide/use/shop/orders.mdx
new file mode 100644
index 00000000..ac8ad3d2
--- /dev/null
+++ b/docs/guide/use/shop/orders.mdx
@@ -0,0 +1,28 @@
+---
+title: 订单管理
+description: Halo 商城订单:查看详情、填写物流发货与订单处理操作说明。
+---
+
+
+
+## 查看订单详情
+
+我们可以点击订单标题进入订单详情页面,或者点击订单标题右侧的图标按钮预览订单详情。
+
+
+
+
+
+## 发货
+
+收到用户订单之后,可以在订单详情页面的 **发货信息** 区域点击 **发货** 按钮,打开发货界面:
+
+
+
+在这个界面我们需要勾选需要发货的产品以及物流信息,然后点击 **确认发货** 按钮,即可完成发货。
+
+:::info 物流与虚拟产品发货
+1. 目前仅支持填写物流单号等信息,目前没有对接物流查询平台,所以需要用户手动根据物流单号查询物流信息。
+2. 虚拟产品发货可参考:[虚拟交付](./virtual-delivery.mdx)
+
+:::
diff --git a/docs/guide/use/shop/payments.mdx b/docs/guide/use/shop/payments.mdx
new file mode 100644
index 00000000..c35293d5
--- /dev/null
+++ b/docs/guide/use/shop/payments.mdx
@@ -0,0 +1,292 @@
+---
+title: 支付方式
+description: Halo 商城支付:支付宝、微信、Stripe、易支付及手动收款等方式配置。
+---
+
+import { Tab, Tabs } from '@rspress/core/theme';
+
+
+在正式运营商城之前,我们需要配置至少一个可用的支付方式,目前商城支持的支付方式包括:
+
+- 支付宝
+- 微信支付
+- 易支付
+- Stripe
+- 银行转账(手动)
+- 收款码支付(手动)
+
+首先登录到 Halo 控制台,进入 **商店 -> 设置 -> 支付方式** 页面,点击右上角的新建按钮。
+
+
+
+ 
+
+
+ 
+
+
+
+:::note 先创建测试产品
+在配置支付方式之前,建议先创建一个测试产品,方便在配置完成后进行测试。
+:::
+
+## 支付宝
+
+### 创建支付宝应用
+
+支付宝支付使用官方接口,买家交易的资金将直接进入商家的支付宝账户,无第三方平台介入。
+
+在创建支付宝支付方式之前,需要先在支付宝商家平台和支付宝开放平台完成注册。
+
+- [支付宝商家平台](https://b.alipay.com/)
+- [支付宝开放平台](https://open.alipay.com/)
+
+注册完成后,进入支付宝 [开放平台 -> 控制台](https://open.alipay.com/develop/manage),点击 **创建网页/移动应用** 按钮:
+
+
+
+其中 **应用类型** 选择网页应用,其他参数按照实际情况填写即可。
+
+### 获取支付宝配置信息
+
+创建应用后,进入应用详情页面:
+
+
+
+- 1️⃣:应用 ID
+- 2️⃣:设置接口加签方式
+ - 加签方式选择 **密钥**
+ - 其他流程按照支付宝的指引进行操作
+ - 最后下载 **支付宝公钥证书** 到本地,后续配置时需要
+- 3️⃣:接口内容加密方式,点击 **生成加密方式** 并复制密文
+
+### 在 Halo 中配置
+
+打开新建支付方式的界面,支付提供商选择 **支付宝支付**,并填写以下信息:
+
+- 启用:勾选
+- 名称:给用户展示的支付方式名称
+- 场景:选择 **PC 网页支付**
+- 网关地址:`https://openapi.alipay.com`
+- 支付宝账号 ID:进入支付宝开放平台的账户中心,复制 **账号 ID**
+- 应用 ID:上一步中获取的应用 ID
+- 商户私钥:上一步在工具中生成的密钥文件
+- 支付宝公钥:上一步中下载的 `alipayCertPublicKey_RSA2.crt` 文件内容
+- 加密密钥:上一步中生成的加密密钥
+
+配置完成之后,还需要在 [销售渠道](./sales-channels.mdx) 中绑定该支付方式。
+
+支付预览:
+
+
+
+### 沙箱环境
+
+访问 [沙箱应用 - 开放平台](https://open.alipay.com/develop/sandbox/app),按照页面上的信息在 Halo 中配置即可。
+
+## 微信支付
+
+### 申请微信支付商户号
+
+微信支付使用官方接口,买家交易的资金将直接进入商家的微信支付商户账户,无第三方平台介入。
+
+在配置微信支付之前,需要先在微信支付商户平台申请商户号。
+
+- [微信支付商户平台](https://pay.weixin.qq.com/)
+- [微信支付开发文档](https://pay.weixin.qq.com/doc/v3/merchant/4012791874)
+
+注册并完成商户认证后,进入 [微信支付商户平台](https://pay.weixin.qq.com/),开通 **Native 支付**。
+
+### 获取微信支付配置信息
+
+登录微信支付商户平台后,需要获取以下配置信息:
+
+#### 获取商户号
+
+进入商户平台的 **账户中心 -> 商户信息**,查看您的微信支付商户号(Mch ID)。
+
+#### 设置 API 密钥
+
+1. 进入 **账户中心 -> API 安全 -> API v3 密钥**
+2. 点击 **设置密钥** 按钮,按照提示设置 API v3 密钥(32 位字符串)
+3. 请妥善保管该密钥,后续在 Halo 中配置时需要使用
+
+#### 申请 API 证书
+
+1. 进入 **账户中心 -> API 安全 -> 验证商户身份 -> 商户 API 证书**
+2. 点击 **申请 API 证书** 或 **管理证书**
+3. 按照页面指引完成操作后,下载证书文件(包含 `apiclient_cert.pem` 和 `apiclient_key.pem`)
+4. 在证书管理页面可以查看到证书序列号,记录下来以便配置
+
+#### 获取微信 AppID
+
+1. 进入 **产品中心 -> AppID 账号管理**
+2. 关联您的微信公众号、小程序或企业微信
+3. 记录下对应的 AppID
+
+### 在 Halo 中配置
+
+打开新建支付方式的界面,支付提供商选择 **微信支付**,并填写以下信息:
+
+- 启用:勾选
+- 名称:给用户展示的支付方式名称
+- 场景:选择 **PC 网页支付**
+- 应用 ID:上一步获取的微信 AppID
+- 商户号:上一步获取的商户号(Mch ID)
+- 商户私钥:上一步下载的 `apiclient_key.pem` 文件内容
+- 商户证书序列号:上一步获取的证书序列号
+- API v3 密钥:上一步设置的 API v3 密钥
+
+配置完成之后,还需要在 [销售渠道](./sales-channels.mdx) 中绑定该支付方式。
+
+支付预览:
+
+
+
+## 易支付
+
+### 注册易支付
+
+访问 [易支付官网](https://z-pay.cn),注册并登录账号。
+
+### 开通支付渠道
+
+访问 [易支付 -> 我的支付渠道](https://member.z-pay.cn/member/channel.html),新增支付宝或者微信渠道,根据平台的要求填写相关信息。
+
+开通成功之后,需要记录 **渠道 ID**,后续在 Halo 中配置时可能需要使用。
+
+
+
+### 获取 API 信息
+
+访问 [易支付 -> API 安全](https://member.z-pay.cn/member/myapi.html),记录 **网关**、**商户 ID(PID)** 和 **商户密钥(KEY)**,后续在 Halo 中配置时需要使用。
+
+
+
+### 在 Halo 中配置
+
+打开新建支付方式的界面,支付提供商选择 **易支付**,并填写以下信息:
+
+- 启用:勾选
+- 名称:给用户展示的支付方式名称
+- 场景:选择 **PC 网页支付**
+- 自定义图标:由于易支付同时支持微信和支付宝,推荐自定义图标来区分
+- 网关地址:上一步中记录的 **网关**
+- 商户号:上一步中记录的 **商户 ID(PID)**
+- 商户私钥:上一步中记录的 **商户密钥(KEY)**
+- 支付方式:选择 **微信** 或 **支付宝**,需要确保已经在易支付开通对应的渠道
+- 支付渠道 ID:上一步中记录的 **渠道 ID**,支持填写多个,使用英文逗号, 隔开,如果不填则随机调用
+
+配置完成之后,还需要在 [销售渠道](./sales-channels.mdx) 中绑定该支付方式。
+
+支付预览:
+
+
+
+## Stripe
+
+### 登录或者注册 Stripe
+
+访问 [Stripe 官网](https://stripe.com),登录或者注册账号,并且需要完成必要的信息填写,确保可以正常使用 Stripe 的支付功能。
+
+### 获取 API 信息
+
+登录到 [Stripe 控制台](https://dashboard.stripe.com),进入设置 -> 开发人员 -> 管理 API 密钥,复制 **密钥** 即可,后续在 Halo 中配置时需要使用。
+
+### 创建 WebHook
+
+1. 打开工作台
+
+ 
+
+2. 切换到 WebHook 选项卡,并点击 **添加接收端**
+
+ 
+
+3. 在事件中选择 `checkout.session.completed`
+
+ 
+
+4. 接收端类型选择 **Webhook 端点**
+
+ 
+
+5. 填写端点 URL
+
+ :::note 端点 URL 格式
+ 端点 URL 的格式为:
+
+ ```bash
+ https://your-domain.com/apis/api.ecommerce.halo.run/v1alpha1/payment-providers/stripe/callback
+ ```
+
+ 其中 `your-domain.com` 需要替换为你的域名,并且需要确保该域名可以访问。
+ :::
+
+ 
+
+ 最后点击 **创建** 按钮即可。
+
+6. 获取签名密钥
+
+ 创建完成之后可以在页面的 **签名密钥** 部分复制 **签名密钥**,后续在 Halo 中配置时需要使用。
+
+ 
+
+
+### 在 Halo 中配置
+
+打开新建支付方式的界面,支付提供商选择 **Stripe**,并填写以下信息:
+
+- 启用:勾选
+- 名称:给用户展示的支付方式名称
+- 场景:选择 **PC 网页支付**
+- API Key:上一步中获取的 **密钥**
+- WebHook Secret:上一步中获取的 **签名密钥**
+
+配置完成之后,还需要在 [销售渠道](./sales-channels.mdx) 中绑定该支付方式。
+
+支付预览:
+
+
+
+
+
+## 银行转账
+
+银行转账支付方式不经过 Halo 的支付系统,仅仅是在支付的时候显示商家的银行收款信息,让买家转账到商家的银行账户,后续再通过人工审核的方式确认订单。
+
+打开新建支付方式的界面,支付提供商选择 **银行转账**,并填写以下信息:
+
+- 启用:勾选
+- 名称:给用户展示的支付方式名称
+- 场景:选择 **PC 网页支付**
+- 收款银行:银行名称
+- 银行支行地址:开户行地址
+- 收款账户名:收款账户名称
+- 收款账号:收款银行账号
+- 付款说明:为用户说明转账时需要注意的事项
+
+配置完成之后,还需要在 [销售渠道](./sales-channels.mdx) 中绑定该支付方式。
+
+支付预览:
+
+
+
+## 收款码支付
+
+收款码支付方式不经过 Halo 的支付系统,仅仅是在支付的时候显示商家的收款码,让买家扫码支付,后续再通过人工审核的方式确认订单。
+
+打开新建支付方式的界面,支付提供商选择 **收款码支付**,并填写以下信息:
+
+- 启用:勾选
+- 名称:给用户展示的支付方式名称
+- 场景:选择 **PC 网页支付**
+- 收款码二维码图片链接
+- 付款说明:为用户说明扫码时需要注意的事项
+
+配置完成之后,还需要在 [销售渠道](./sales-channels.mdx) 中绑定该支付方式。
+
+支付预览:
+
+
diff --git a/docs/guide/use/shop/prepare.mdx b/docs/guide/use/shop/prepare.mdx
new file mode 100644
index 00000000..9403677c
--- /dev/null
+++ b/docs/guide/use/shop/prepare.mdx
@@ -0,0 +1,32 @@
+---
+title: 写在前面
+description: 启用 Halo 商城前:商城版安装激活、合规资质与支付宝/微信支付准备。
+---
+
+## 前提条件
+
+在开始使用商城功能之前,需要先确定以下条件是否已满足:
+
+- 正常安装 [Halo 商城版](../../install/index.md)
+- 激活 [Halo 商城版许可证](../activate.md)
+- 根据当地法律法规,满足开设网络商店的资质与要求
+- 开通支付平台账户,目前支持:
+ - [支付宝官方接口](https://open.alipay.com/)
+ - [微信支付官方接口](https://pay.weixin.qq.com/)
+
+## 前台路由
+
+目前商城包含以下前台路由:
+
+- `/shop`:商城首页,目前会重定向到商品列表页面
+- `/shop/products`:商品列表页面
+- `/shop/products/:id`:商品详情页面
+- `/shop/cart`:购物车页面
+- `/shop/checkout/:id`:结算页面
+- `/shop/order/:code/payments`:支付页面
+
+:::note 系统内置页面模板
+这些页面无需主题提供对应的模板文件即可访问,使用的是系统内置的模板文件。如果当前激活的主题提供了对应的模板文件,则会优先使用主题提供的模板文件。
+:::
+
+你可以根据需求,将这些页面路径添加到[网站菜单](../menus.md)中。
diff --git a/docs/guide/use/shop/products.mdx b/docs/guide/use/shop/products.mdx
new file mode 100644
index 00000000..fbb58d13
--- /dev/null
+++ b/docs/guide/use/shop/products.mdx
@@ -0,0 +1,96 @@
+---
+title: 产品管理
+description: Halo 商城产品:创建实体/虚拟商品、定价库存、图片与描述等配置说明。
+---
+
+
+
+## 创建产品
+
+首先登录到 Halo 控制台,进入 **商店 -> 产品** 页面,点击右上角的新建按钮。
+
+
+
+### 基本信息
+
+- 名称:产品名称
+- 简短描述:产品的简短描述
+- 描述:产品的详细描述,使用富文本编辑器
+- 图片:产品图片,可以直接上传或者从附件库中选择,第一张图片会作为封面图
+
+### 产品数据
+
+这里主要配置产品的类型、属性、规格、价格等数据。
+
+产品类型目前支持三种:
+
+1. 实体:需要配送的产品类型
+2. 虚拟:不需要实体配送,使用线上发货的产品类型
+3. 链接:直接跳转到第三方链接的产品类型
+
+:::info 虚拟产品交付方式
+虚拟产品支持文件资源下载、卡密发货,可参考 [虚拟交付](./virtual-delivery.mdx) 进行发货配置。
+:::
+
+#### 属性配置
+
+属性的作用是为产品添加一些额外的信息,比如颜色、尺寸、型号等,同时也可以用于生成产品规格。
+
+
+
+- 名称:属性名称,比如颜色、尺寸
+- 属性值:支持多个属性值,比如颜色可以有红色、蓝色、绿色等,尺寸可以有小、中、大等,同时也可以为不同的属性值设置图片,用于展示给用户
+- 用于生成产品规格:勾选后,支持在配置产品规格时根据多个属性生成不同的产品规格
+
+#### 规格配置
+
+规格即产品的具体规格,比如颜色为红色、尺寸为小,型号为1234567890,可以根据属性值生成不同的规格,并单独设置价格、库存等信息,最终用户购买时,可以选择属性值来确定购买的产品规格。
+
+:::note 规格也称 SKU
+这里的规格也可以称之为 **变体** 或者 **SKU**。
+:::
+
+
+
+当我们设置好 [属性](#属性配置) 之后,可以点击 **生成规格** 按钮来批量生成所有可能产生的规格。
+
+
+
+然后可以点击具体的规格项,展开规格配置表单:
+
+
+
+- 图片:为规格设置图片,用于在购物车,订单等页面展示,如果不设置,会使用属性值中配置的图片或者产品封面
+- 状态:支持 **草稿**、**已发布**、**已归档** 三种状态
+- SKU 编号:规格的唯一标识
+- 条形码:产品规格的条形码,也可用于表示 GTIN、UPC、EAN 或 ISBN 等
+- 价格:规格的真实价格
+- 划线价:规格的划线价,用于表示原价
+- 管理库存
+ - 否:不管理库存,用户可以无限购买
+ - 是:管理库存,用户购买时,库存会减少
+- 库存:规格的库存数量,当库存为0时,用户无法购买
+- 重量:规格的重量
+- 长度:规格的长度
+- 宽度:规格的宽度
+- 高度:规格的高度
+
+:::note 尺寸信息仅用于实物产品
+重量、长度、宽度、高度用于后续发货相关的业务,如果产品类型为虚拟,则不需要配置。
+:::
+
+除了为单个规格设置上述配置之外,也可以点击上方的批量设置按钮,用于为所有规格设置相同的配置。
+
+
+
+### 分类配置
+
+分类配置用于将产品分类,比如手机、电脑、服装、数码等,支持多级分类。
+
+
+
+### 发布
+
+配置完产品信息之后,就可以将产品状态改为 **发布**,并保存产品,最终就可以在商城前台中展示。
+
+
diff --git a/docs/guide/use/shop/sales-channels.mdx b/docs/guide/use/shop/sales-channels.mdx
new file mode 100644
index 00000000..1394d3ef
--- /dev/null
+++ b/docs/guide/use/shop/sales-channels.mdx
@@ -0,0 +1,32 @@
+---
+title: 销售渠道
+description: Halo 商城销售渠道:区分终端与支付绑定,创建与管理渠道说明。
+---
+
+import { Tab, Tabs } from '@rspress/core/theme';
+
+为了区分不同平台(PC 端、小程序等)的支付方式以及后续追踪订单来源,系统提供了销售渠道功能。
+
+:::info 仅需 PC 端销售渠道
+由于目前商城仅支持 PC 端,暂未支持小程序等平台,所以仅需要创建一个 PC 端销售渠道并绑定所需的支付方式。
+:::
+
+## 创建销售渠道
+
+首先登录到 Halo 控制台,进入 **商店 -> 设置 -> 销售渠道** 页面,点击右上角的新建按钮。
+
+
+
+ 
+
+
+ 
+
+
+
+- 是否启用:勾选
+- 名称:可任意填写
+- 编码:目前商城仅支持 PC 端,所以编码选择 **PC 端商城(MALL_PC)**
+- 支付方式:选择已创建的支付方式,创建方式可参考:[支付方式](./payments.mdx)
+
+到这里,已经完成了支付方式和销售渠道的配置,现在可以正常使用商城功能了。
diff --git a/docs/user-guide/shop/theme-dev.mdx b/docs/guide/use/shop/theme-dev.mdx
similarity index 100%
rename from docs/user-guide/shop/theme-dev.mdx
rename to docs/guide/use/shop/theme-dev.mdx
diff --git a/docs/guide/use/shop/virtual-delivery.mdx b/docs/guide/use/shop/virtual-delivery.mdx
new file mode 100644
index 00000000..e1c6fb69
--- /dev/null
+++ b/docs/guide/use/shop/virtual-delivery.mdx
@@ -0,0 +1,260 @@
+---
+title: 虚拟交付
+description: Halo 商城虚拟商品:文件下载与卡密交付的配置及发货流程说明。
+---
+
+在 Halo 2.23 中,我们完善了虚拟产品的发货功能,目前支持文件资源下载、卡密发货。
+
+## 创建产品
+
+完整的创建产品流程可参考 [产品管理](./products.mdx) 文档,需要注意的是,如果产品要支持虚拟交付,需要在产品类型中选择 **虚拟** 产品类型。
+
+
+
+## 设置文件资源下载
+
+创建完产品之后,我们需要进入 **产品 -> 虚拟交付** 页面,然后选择刚刚创建的产品。
+
+
+
+进入设置页面之后,就可以看到 **资源下载** 的设置页面,我们可以点击右上方的 **添加** 按钮来添加文件。
+
+
+
+- 资源类型:支持附件和静态 URL
+- 资源名称:为客户显示的文件名称
+- 资源描述:可以填写文件的描述信息
+- 附件(当类型为附件时):可以点击 `+` 按钮选择已上传的附件或者上传新的附件
+- 资源地址(当类型为静态 URL 时):可以填写文件的 URL 地址
+
+填写完成之后,点击 **保存** 按钮即可。
+
+当文件添加完成之后,我们还需要手动启用自动发货,点击右上角的 **发货配置** 按钮,勾选启用即可。
+
+
+
+## 设置卡密发货
+
+进入虚拟交付设置页面之后,选择 **卡密资产** 选项卡,就可以看到 **卡密资产** 的设置页面。
+
+
+
+我们可以点击右上方的 **添加** 按钮来添加卡密。
+
+
+
+- 卡密:卡密内容,支持批量添加,一行一个
+- 过期时间:卡密过期时间
+- 备注:可以填写卡密的备注信息
+
+填写完成之后点击 **添加** 按钮即可。
+
+当卡密添加完成之后,我们还需要手动启用自动发货,点击右上角的 **发货配置** 按钮,勾选启用即可。
+
+
+
+此外,在卡密发货配置界面中,还支持配置 **远程调用配置**,支持通过三方 API 来补货或者动态生成卡密并发货。
+
+定义:
+
+- 预获取:优先从卡密列表中选择并发货,在库存不足时才调用 API 进行补货
+- 动态获取:每次发货时都调用 API 获取卡密并发货
+
+配置说明:
+
+- 类型:支持 **预获取** 和 **动态获取**
+ - 补货配置(当类型为预获取时)
+ - API 地址:补货 API 地址
+ - 认证 Token:补货 API 认证 Token,用于对 API 请求进行认证
+ - 阈值:可用卡密数量低于此值时触发补货
+ - 每次获取的卡密数量:每次调用 API 获取的卡密数量
+ - 服务器配置(当类型为动态获取时)
+ - API 地址:远程生成 API 地址
+ - 认证 Token:API 认证 Token,用于对 API 请求进行认证
+
+需要注意的是,API 需要自行实现并适配 Halo 的接口标准,可以参考下方的 [API 规范](#api-规范)。
+
+## 订单相关
+
+为产品配置好虚拟交付之后,当客户下单并支付时,系统会自动为订单进行发货流程,可以在控制台的订单详情中看到发货状态。
+
+
+
+客户也可以在订单页面看到已发货的虚拟物品。
+
+
+
+
+
+## API 规范
+
+### 卡密远程生成 API 规范
+
+用户下单后,Halo 会向配置的远程地址发起请求,由你的服务实时生成或分配卡密。
+
+#### 请求
+
+```
+POST <你配置的远程生成地址>
+Content-Type: application/json
+Authorization: Bearer // 配置了 token 时附带
+```
+
+**请求体**
+
+```json
+{
+ "orderItem": {
+ "id": 10001,
+ "orderId": 90001,
+ "productId": 80001,
+ "quantity": 2,
+ "itemTitle": "年度会员兑换码",
+ "productVariantSnapshot": {
+ "id": 123,
+ "name": "默认规格"
+ }
+ },
+ "dryRun": false
+}
+```
+
+| 字段 | 类型 | 必填 | 说明 |
+| ---------------------------------- | ------- | ---- | ------------------------- |
+| `orderItem.id` | long | 是 | 订单项 ID(可用作幂等键) |
+| `orderItem.orderId` | long | 是 | 订单 ID |
+| `orderItem.productId` | long | 是 | 商品 ID |
+| `orderItem.quantity` | int | 是 | 需要发放的卡密数量 |
+| `orderItem.itemTitle` | string | 否 | 订单项标题 |
+| `orderItem.productVariantSnapshot` | object | 否 | 规格快照 |
+| `dryRun` | boolean | 是 | 当前固定为 `false` |
+
+#### 响应
+
+返回卡密列表,所有卡密的 `capacity` 之和须不小于 `orderItem.quantity`。
+
+```json
+[
+ {
+ "code": "ABCD-EFGH-IJKL",
+ "secret": "S3cr3t-1",
+ "expireAt": "2026-12-31T23:59:59Z",
+ "capacity": 1
+ }
+]
+```
+
+| 字段 | 类型 | 必填 | 说明 |
+| ---------- | ------ | ---- | ------------------------- |
+| `code` | string | 是 | 卡密(同一响应内唯一) |
+| `secret` | string | 否 | 附加验证信息 |
+| `expireAt` | string | 否 | 过期时间(UTC,ISO-8601) |
+| `capacity` | int | 否 | 可用次数,默认为 `1` |
+
+:::warning 发放响应必须非空且幂等
+响应不可为空列表,否则触发卡密发放失败。建议以 `orderItem.id` 作为幂等键,避免重复请求导致重复发放。
+:::
+
+#### 错误码
+
+建议使用非 `2xx` 状态码表达失败,并返回结构化错误:
+
+```json
+{
+ "code": "CDK_OUT_OF_STOCK",
+ "message": "No enough CDKs available",
+ "requestId": "f38db1c2-2f7a-4dc3-b5a8-2d0012345678"
+}
+```
+
+推荐错误码:
+
+| HTTP 状态码 | 错误码 | 含义 | 是否可重试 |
+| ----------- | --------------------- | ---------------------- | ---------- |
+| `400` | `INVALID_REQUEST` | 请求字段不合法 | 否 |
+| `401` | `UNAUTHORIZED` | 鉴权失败 | 否 |
+| `403` | `FORBIDDEN` | 调用被拒绝 | 否 |
+| `404` | `NOT_FOUND` | 路由不存在 | 否 |
+| `409` | `IDEMPOTENT_CONFLICT` | 幂等键冲突且参数不一致 | 否 |
+| `422` | `CDK_OUT_OF_STOCK` | 库存不足 | 视业务而定 |
+| `429` | `RATE_LIMITED` | 触发限流 | 是 |
+| `500` | `INTERNAL_ERROR` | 远程服务内部错误 | 是 |
+| `503` | `SERVICE_UNAVAILABLE` | 服务不可用 | 是 |
+
+### 卡密自动补货 API 规范
+
+当密钥库存低于阈值时,Halo 会自动向配置的补货地址发起补货请求。
+
+#### 请求
+
+```
+POST <你配置的补货地址>
+Content-Type: application/json
+Authorization: Bearer // 配置了 token 时附带
+```
+
+**请求体**
+
+```json
+{
+ "productVariantId": 123,
+ "quantity": 50
+}
+```
+
+| 字段 | 类型 | 必填 | 说明 |
+| ------------------ | ---- | ---- | --------------------- |
+| `productVariantId` | long | 是 | 需要补货的商品规格 ID |
+| `quantity` | int | 是 | 请求补充的卡密数量 |
+
+#### 响应
+
+返回卡密列表,实际返回数量可与请求数量不一致。
+
+```json
+[
+ {
+ "code": "ABCD-EFGH-IJKL",
+ "secret": "S3cr3t-1",
+ "expireAt": "2026-12-31T23:59:59Z",
+ "capacity": 1
+ }
+]
+```
+
+| 字段 | 类型 | 必填 | 说明 |
+| ---------- | ------ | ---- | ------------------------- |
+| `code` | string | 是 | 卡密(同一响应内唯一) |
+| `secret` | string | 否 | 附加验证信息 |
+| `expireAt` | string | 否 | 过期时间(UTC,ISO-8601) |
+| `capacity` | int | 否 | 可用次数,默认为 `1` |
+
+:::warning 补货响应不可为空
+响应不可为空列表,否则视为补货失败。补货失败不影响当前订单的卡密发放。
+:::
+
+#### 错误码
+
+建议使用非 `2xx` 状态码表达失败,并返回结构化错误:
+
+```json
+{
+ "code": "CDK_OUT_OF_STOCK",
+ "message": "No enough CDKs available",
+ "requestId": "f38db1c2-2f7a-4dc3-b5a8-2d0012345678"
+}
+```
+
+推荐错误码:
+
+| HTTP 状态码 | 错误码 | 含义 | 是否可重试 |
+| ----------- | --------------------- | ---------------------- | ---------- |
+| `400` | `INVALID_REQUEST` | 请求字段不合法 | 否 |
+| `401` | `UNAUTHORIZED` | 鉴权失败 | 否 |
+| `403` | `FORBIDDEN` | 调用被拒绝 | 否 |
+| `404` | `NOT_FOUND` | 路由不存在 | 否 |
+| `409` | `IDEMPOTENT_CONFLICT` | 幂等键冲突且参数不一致 | 否 |
+| `422` | `CDK_OUT_OF_STOCK` | 库存不足 | 视业务而定 |
+| `429` | `RATE_LIMITED` | 触发限流 | 是 |
+| `500` | `INTERNAL_ERROR` | 远程服务内部错误 | 是 |
+| `503` | `SERVICE_UNAVAILABLE` | 服务不可用 | 是 |
diff --git a/docs/guide/use/themes.md b/docs/guide/use/themes.md
new file mode 100644
index 00000000..65aeb59e
--- /dev/null
+++ b/docs/guide/use/themes.md
@@ -0,0 +1,98 @@
+---
+title: 主题
+description: Halo 主题安装与切换、应用市场获取及模板与站点变量配置说明。
+---
+
+主题包含了各种站点页面模板的资源包。用户访问 Halo 站点浏览到的内容及样式,由 Halo 管理端所配置使用的主题所决定。
+
+:::info 主题获取渠道
+目前有两个官方渠道可以获取主题:
+
+- 应用市场:[https://www.halo.run/store/apps](https://www.halo.run/store/apps)
+- Awesome Halo:[https://github.com/halo-sigs/awesome-halo](https://github.com/halo-sigs/awesome-halo)
+
+:::
+
+## 安装主题
+
+点击主题页面右上方的 `主题管理` 按钮即可弹出主题管理对话框。
+
+### 从内置应用市场安装(推荐)
+
+从 Halo 2.10 开始,内置了应用市场插件,可以更加方便在 Console 直接安装应用市场的主题。
+
+
+
+:::info 查看内置应用市场指南
+更多关于内置应用市场的使用说明可查阅:[应用市场](./app-store.md)
+:::
+
+### 本地上传安装
+
+你可以点击主题管理对话框下方的 `安装主题` 按钮,在弹出的安装主题对话框中上传主题压缩包。
+
+
+
+### 远程下载安装
+
+同样,在安装主题的对话框中,切换到远程下载选项卡,输入主题的下载地址,点击 `下载` 按钮即可开始下载主题。
+
+## 切换主题
+
+同样点击主题页面右上方的 `主题管理` 按钮弹出主题管理对话框。
+
+在弹框中点击选中要切换的目标主题,此时页面返回到主题详情页,点击右上角的 `启用` 按钮即可将当前主题切换为实际使用的主题。
+
+:::info 选中主题不会自动启用
+仅选中主题不点击右上角的 `启用` 按钮时,不会影响当前实际使用的主题。
+:::
+
+你也可以在已安装主题列表中,通过后方 `···` 的更多操作中的启用选项直接启用指定的主题。
+
+## 修改主题设置
+
+主题页面默认显示出了当前主题的详细信息,在详细信息标签页后方的标签页,即为主题提供的相关设置。不同的主题提供的设置项各不相同,设置项的详细说明请参考对应主题的文档。
+
+
+
+以 Halo 的默认主题 Earth 为例,该主题提供了布局、样式、侧边栏、页脚及备案设置共五组配置项。
+
+:::info 重置主题设置
+你可以点击主题列表指定主题所在行后方的 `···` 更多操作按钮,选择其中的 `重置` 选项将主题提供的设置项恢复为默认值。
+:::
+
+## 预览主题
+
+通过预览功能,你可以在不更改当前启用主题的情况下查看不同主题的效果。点击主题详情页面右上角的 `预览` 按钮预览当前主题,或者进入已安装主题列表,通过后方 `···` 的更多操作中的预览选项预览指定的主题。
+
+在主题预览页面你可以切换不同分辨率的设备,模拟主题在不同终端下的显示效果。也可以通过右上角的功能菜单切换预览的主题,或者调整当前主题的设置,查看不同设置下主题所展现的区别。
+
+演示视频:
+
+
+
+
+## 升级主题
+
+如果当前使用了内置的应用市场插件,在主题更新后会在主题列表中显示更新提示,点击 **立即更新** 按钮即可。
+
+手动升级可以点击主题详情页右上角的 `···` 更多操作按钮,选择其中的 `升级` 选项即可打开升级主题的对话框。
+
+## 重载主题配置
+
+如果当前主题提供的设置项发生变化,可以通过 `···` 更多操作中的 `重载主题配置` 选项对主题配置项进行更新。
+
+## 重置
+
+如果你需要清空所有主题配置并重新配置主题,你可以通过 `···` 更多操作中的 `重置` 选项将主题提供的设置项恢复为默认值。
+
+## 卸载主题
+
+进入已安装主题列表,点击指定主题所在行后方的 `···` 更多操作按钮,选择其中的 `卸载` 选项即可对当前主题进行卸载。
+
+
+
+:::info 卸载方式的区别
+目前提供了 `卸载` 及 `卸载并删除配置` 两种卸载方式。
+仅卸载主题时主题的配置信息会进行保留,当重新安装主题后还可以使用之前已保存的配置。
+:::
diff --git a/docs/guide/use/user-center.md b/docs/guide/use/user-center.md
new file mode 100644
index 00000000..13e1fd61
--- /dev/null
+++ b/docs/guide/use/user-center.md
@@ -0,0 +1,75 @@
+---
+title: 个人中心
+description: Halo 个人中心(/uc):资料、认证方式与会话及与 Console 的入口说明。
+---
+
+从 Halo 2.11 开始,除了 Console 管理控制台,我们新增加了个人中心,用于管理和用户相关的所有功能。有了个人中心之后,也可以让网站有更多的使用和开发场景。
+
+## 进入个人中心
+
+你可以通过点击 Console 左下角的个人中心图标进入个人中心,也可以直接访问 `/uc` 进入个人中心。
+
+:::info Console 入口显示条件
+此外,如果用户拥有进入 Console 的权限,也会在个人中心的左侧导航栏中看到 Console 的入口。
+
+详情可见:[创建角色](./users.md#创建角色)
+:::
+
+
+
+## 个人资料
+
+这个页面会显示和用户相关的一些信息。
+
+
+
+## 通知配置
+
+这个页面可以配置用户的通知偏好,可以选择接收哪些类型的通知。
+
+
+
+## 个人令牌
+
+个人令牌是一种用于访问 Halo API 的凭证,可以通过个人令牌访问 Halo 的 RESTful API,而无需通过用户名和密码授权,使用方式可查阅:[RESTful API 介绍](../../developer-guide/restful-api/introduction.md)
+
+
+
+创建新的个人令牌:
+
+
+
+- **名称**:个人令牌的名称。
+- **过期时间**:个人令牌的过期时间,不选择则表示永不过期。
+- **描述**:个人令牌的描述信息,用于描述个人令牌的用途。
+- **权限**:个人令牌的权限,可以选择多个权限。
+
+创建好的个人令牌:
+
+
+
+## 两步验证
+
+在这个选项卡中,我们可以配置登录之后两步验证方式,目前支持 TOTP 验证器。
+
+
+
+
+
+## 登录设备
+
+在这里可以看到当前账号的所有登录设备,你也可以在更多按钮中撤销任意设备。
+
+
+
+## 消息
+
+此页面用于显示用户收到的站内消息。
+
+
+
+## 我的文章
+
+Halo 默认为个人中心提供了管理个人文章的功能,每个用户都可以在个人中心创建、编辑自己的文章。当然,也可以通过配置角色权限,自行决定是否开放此功能,可查阅[创建角色](./users.md#创建角色)。
+
+
diff --git a/docs/guide/use/users.md b/docs/guide/use/users.md
new file mode 100644
index 00000000..b61aaa4a
--- /dev/null
+++ b/docs/guide/use/users.md
@@ -0,0 +1,124 @@
+---
+title: 用户与权限
+description: Halo 用户与 RBAC:多用户、角色权限、密码与会话等管理说明。
+---
+
+## 概览
+
+Halo 2.0 版本采用了基于角色的权限控制(RBAC)体系。不同于之前 1.x 版本的单用户设计,现在你可以创建多个用户并且通过赋予不同用户不同角色的方式,为他们分配不同的权限。
+
+## 用户
+
+点击左侧导航栏的 `用户` 条目进入用户管理页面。
+
+### 创建用户
+
+在用户管理页面,点击右上角的 `添加用户` 按钮即可弹出新建用户对话框。
+
+
+
+目前支持配置的用户属性有:
+
+- **用户名**:用户登录 Halo 控制台使用的用户名,不可与已有的用户名重复;
+- **显示名称**:用于显示文章作者等用户信息时使用的,更友好的用户名称;
+- **电子邮箱**:用户的电子邮箱;
+- **新密码**:用户的初始密码;
+- **角色**:用户的初始角色;
+- **描述**:可以用于为用户添加备注。
+
+### 其他操作
+
+点击用户列表中的 `···` 更多操作按钮,可以对指定用户进行修改资料、修改密码等其他更多操作。
+
+
+
+#### 修改用户资料
+
+你可以修改除用户名以外的所有资料,具有用户管理相关权限的用户,也可对其他用户的资料进行修改。
+
+#### 修改用户密码
+
+对于已有的用户,你可以在 `···` 更多操作中修改指定用户的登录密码。
+
+#### 分配角色
+
+对于已有的用户,你可以在 `···` 更多操作中为该用户分配角色,分配角色后该用户具有角色所对应的权限。
+
+:::info 修改角色会影响权限
+修改用户分配的角色会影响用户所拥有的权限,可能影响用户使用。
+:::
+
+#### 删除用户
+
+对于已有的用户,你可以在 `···` 更多操作中删除该用户。
+
+:::warning 删除用户的影响
+删除用户后,该用户之前创建的文章、页面等内容的作者信息将会丢失,可能影响站点内容浏览。此操作不可恢复。
+:::
+
+## 角色
+
+如下图所示,在用户管理页面,点击右上角红色区域的 `角色管理` 按钮,即可进入到角色管理页面。
+
+
+
+### 创建角色
+
+Halo 提供了全新创建和基于已有角色创建两种角色创建方式。
+
+#### 全新创建
+
+点击角色管理页面右上角的 `新建角色` 按钮即可弹出新建角色对话框,通过这种方式创建的角色默认未勾选任何权限,你需要在对话框中点击切换到权限标签页,为该角色勾选需要的权限。
+
+#### 基于已有角色创建
+
+
+
+当系统中已经存在一些基础角色时,你可以点击某个角色所在行中的 `···` 更多操作按钮,选择 `基于此角色创建` 来创建一个新的角色。通过这种方式创建的角色默认继承了原有角色的权限,但你同样可以对新角色的权限进行进一步调整。
+
+
+
+- **名称**:角色的名称。
+- **禁止访问 Console**:勾选后,该角色的用户将无法进入 Console 管理控制台,只能访问个人中心(/uc)。
+- **权限**:角色的权限,可以选择多个权限。
+
+### 修改角色信息
+
+对于已有的角色,你可以在 `···` 更多操作中修改指定角色的名称和该角色所拥有的权限。
+
+### 其他操作
+
+对于已有的角色,你可以在 `···` 更多操作中删除指定角色。
+
+:::warning 删除角色的影响
+删除角色后,分配了该角色的用户会丧失对应的权限,影响用户使用。此操作不可恢复。
+:::
+
+## 身份认证
+
+目前 Halo 默认仅支持本地身份认证,但可以通过插件的方式拓展其他三方的身份认证方式。
+
+:::info 官方身份认证插件
+目前 Halo 官方提供的身份认证插件:
+
+- [OAuth2 认证](https://www.halo.run/store/apps/app-ESVDK)
+- [社交 IAM 认证(包含在 Halo 付费版)](https://www.halo.run/store/apps/app-IXZkJ)
+- [LDAP 认证(包含在 Halo 付费版)](https://www.halo.run/store/apps/app-vrSqF)
+
+:::
+
+你可以在用户管理界面的右上角点击 `身份认证` 按钮,进入身份认证管理页面。
+
+
+
+进入身份认证管理页面之后,如果你已经安装了提供身份认证方式的插件,你就可以在列表中看到对应的身份认证方式,你可以对其进行设置并启用。
+
+
+
+### 手机验证码登录
+
+:::note 仅限 Halo 付费版
+限 [Halo 付费版](../prepare.md#发行版本) 可用。
+:::
+
+在 [短信通知](../use/settings.md#短信通知) 中配置好短信通知后,就可以在身份认证管理页面中开启手机验证码登录,也可以通过拖拽的方式调整默认登录方式。
diff --git a/docs/index.mdx b/docs/index.mdx
new file mode 100644
index 00000000..cf94ca72
--- /dev/null
+++ b/docs/index.mdx
@@ -0,0 +1,132 @@
+---
+pageType: custom
+title: Halo 文档
+description: Halo 开源建站工具的完整文档入口,涵盖 Docker 等安装方式、站点初始化、内容管理、主题与插件使用,以及核心、主题、插件和 RESTful API 开发。
+---
+
+import SimpleIcons1Panel from '~icons/simple-icons/1panel';
+import SimpleIconsDocker from '~icons/simple-icons/docker';
+import BtPanelIcon from "~icons/custom/bt-panel";
+import PhArticleDuotone from '~icons/ph/article-duotone';
+import PhBracketsCurlyDuotone from '~icons/ph/brackets-curly-duotone';
+import PhCodeDuotone from '~icons/ph/code-duotone';
+import PhDesktopTower from '~icons/ph/desktop-tower';
+import PhDotsThreeBold from '~icons/ph/dots-three-bold';
+import PhGearDuotone from '~icons/ph/gear-duotone';
+import PhListChecksDuotone from '~icons/ph/list-checks-duotone';
+import PhPaintBrushBroadDuotone from '~icons/ph/paint-brush-broad-duotone';
+import PhPaletteDuotone from '~icons/ph/palette-duotone';
+import PhPaperclipDuotone from '~icons/ph/paperclip-duotone';
+import PhPuzzlePieceDuotone from '~icons/ph/puzzle-piece-duotone';
+import PhQuestionDuotone from '~icons/ph/question-duotone';
+import PhStorefrontDuotone from '~icons/ph/storefront-duotone';
+import PhTerminalDuotone from '~icons/ph/terminal-duotone';
+
+
+
+
+ Halo 文档
+
+ Halo 是一款强大易用的开源建站工具,可以通过丰富的主题和插件搭建任何类型的网站。这里汇集了安装、使用和开发
+ Halo 所需的全部文档。
+
+
+ 快速开始
+
+
+
+
+
+
+
+
+ 快速开始
+ 查看使用指南
+
+
+
+
+
+
+
+ 按主题浏览
+
+
+
+
+
+
+
diff --git a/docs/intro.md b/docs/intro.md
deleted file mode 100644
index 36491008..00000000
--- a/docs/intro.md
+++ /dev/null
@@ -1,105 +0,0 @@
----
-id: intro
-sidebar_label: 简介
-title: ''
-sidebar_position: 1
-hide_title: true
-slug: /
----
-
-
-
-
-
-
-
-Halo [ˈheɪloʊ],强大易用的开源建站工具。
-
-
-
-
-官网
-文档
-社区
-Gitee
-Telegram 频道
-
-
-[](https://www.bilibili.com/video/BV15x4y1U7RU/?share_source=copy_web&vd_source=0ab6cf86ca512a363f04f18b86f55b86)
-
-------------------------------
-
-## Halo 是什么?
-
-Halo 是一款强大易用的开源建站工具,从个人博客、知识库,到企业官网、在线商城,Halo 都能助您轻松实现,一站式满足您的多样化建站需求。
-
-## 快速开始
-
-如果你的设备有 Docker 环境,可以使用以下命令快速启动一个 Halo 的体验环境:
-
-```bash
-docker run -d --name halo -p 8090:8090 -v ~/.halo2:/root/.halo2 halohub/halo:2.26
-```
-
-**以上方式仅作为体验使用,推荐使用开源 Linux 服务器运维管理面板 [1Panel](https://github.com/1Panel-dev/1Panel) 进行部署([查看文档](https://docs.halo.run/getting-started/install/1panel)),轻松搞定反向代理、SSL 证书及升级备份任务。更多部署方式,请[查看文档](https://docs.halo.run/category/%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97)。**
-
-## 在线体验
-
-- 环境地址:[https://demo.halocms.site](https://demo.halocms.site)
-- 后台地址:[https://demo.halocms.site/console](https://demo.halocms.site/console)
-- 用户名:`demo`
-- 密码:`P@ssw0rd123..`
-
-## 版本对比
-
-**Halo 社区版**:开源免费, 遵循 GPLv3 协议
-
-- [x] 适合个人开发者、技术爱好者、开源项目
-- [x] 零成本搭建博客、作品集、技术文档站
-- [x] 超过 100 款免费主题和插件
-
-**Halo 专业版**:在社区版基础上,集成 10+ 高价值功能
-
-- [x] 移动端 APP:随时随地管理内容
-- [x] AI 智能建站:快速生成专业站点
-- [x] 手机号验证登录:提升安全与用户体验
-- [x] 全站私有化部署:保障数据主权
-- [x] 付费主题/插件市场:专享精品主题和 SEO 优化、付费阅读、AI 助手等 10 款付费插件
-
-**Halo 商城版**:在专业版基础上,集成在线商城重磅功能
-
-- [x] 一体化在线商城:商品管理、订单处理、支付对接全流程
-- [x] 为中国商家定制:无缝集成微信支付、支付宝等本土生态
-- [x] 品牌官网 + CMS + 线上店铺一站式落地,助力生意高效增长
-
-关于三个版本的详细对比,请参考[版本对比](https://www.lxware.cn/halo)。
-
-## 应用生态
-
-- **应用市场**:提供丰富的站点主题与功能插件,[立即访问](https://www.halo.run/store/apps)
-- **成为开发者**:支持自主发布并管理应用,[了解详情](https://www.halo.run/archives/halo-app-store-developer-onboarding-app-creation)
-- [halo-sigs/awesome-halo](https://github.com/halo-sigs/awesome-halo)
-
-## 许可证
-
-[](https://github.com/halo-dev/halo/blob/master/LICENSE)
-
-Halo 使用 GPL-v3.0 协议开源,请遵守开源协议。
-
-## 贡献
-
-参考 [CONTRIBUTING](https://github.com/halo-dev/halo/blob/main/CONTRIBUTING.md)。
-
-
-
-## 状态
-
-
diff --git a/static/img/annotation-setting/annotation-setting-preview.png b/docs/public/img/annotation-setting/annotation-setting-preview.png
similarity index 100%
rename from static/img/annotation-setting/annotation-setting-preview.png
rename to docs/public/img/annotation-setting/annotation-setting-preview.png
diff --git a/static/img/developer-guide/plugin/basic/server/post-content-version-generation.png b/docs/public/img/developer-guide/plugin/basic/server/post-content-version-generation.png
similarity index 100%
rename from static/img/developer-guide/plugin/basic/server/post-content-version-generation.png
rename to docs/public/img/developer-guide/plugin/basic/server/post-content-version-generation.png
diff --git a/static/img/developer-guide/plugin/extension-points/ui/attachment-list-item-operation-create.png b/docs/public/img/developer-guide/plugin/extension-points/ui/attachment-list-item-operation-create.png
similarity index 100%
rename from static/img/developer-guide/plugin/extension-points/ui/attachment-list-item-operation-create.png
rename to docs/public/img/developer-guide/plugin/extension-points/ui/attachment-list-item-operation-create.png
diff --git a/static/img/developer-guide/plugin/extension-points/ui/attachment-selector-create.png b/docs/public/img/developer-guide/plugin/extension-points/ui/attachment-selector-create.png
similarity index 100%
rename from static/img/developer-guide/plugin/extension-points/ui/attachment-selector-create.png
rename to docs/public/img/developer-guide/plugin/extension-points/ui/attachment-selector-create.png
diff --git a/static/img/developer-guide/plugin/extension-points/ui/backup-list-item-operation-create.png b/docs/public/img/developer-guide/plugin/extension-points/ui/backup-list-item-operation-create.png
similarity index 100%
rename from static/img/developer-guide/plugin/extension-points/ui/backup-list-item-operation-create.png
rename to docs/public/img/developer-guide/plugin/extension-points/ui/backup-list-item-operation-create.png
diff --git a/static/img/developer-guide/plugin/extension-points/ui/backup-tabs-create.png b/docs/public/img/developer-guide/plugin/extension-points/ui/backup-tabs-create.png
similarity index 100%
rename from static/img/developer-guide/plugin/extension-points/ui/backup-tabs-create.png
rename to docs/public/img/developer-guide/plugin/extension-points/ui/backup-tabs-create.png
diff --git a/static/img/developer-guide/plugin/extension-points/ui/comment-list-item-operation-create.png b/docs/public/img/developer-guide/plugin/extension-points/ui/comment-list-item-operation-create.png
similarity index 100%
rename from static/img/developer-guide/plugin/extension-points/ui/comment-list-item-operation-create.png
rename to docs/public/img/developer-guide/plugin/extension-points/ui/comment-list-item-operation-create.png
diff --git a/static/img/developer-guide/plugin/extension-points/ui/comment-subject-ref-create.png b/docs/public/img/developer-guide/plugin/extension-points/ui/comment-subject-ref-create.png
similarity index 100%
rename from static/img/developer-guide/plugin/extension-points/ui/comment-subject-ref-create.png
rename to docs/public/img/developer-guide/plugin/extension-points/ui/comment-subject-ref-create.png
diff --git a/static/img/developer-guide/plugin/extension-points/ui/dashboard-widgets.png b/docs/public/img/developer-guide/plugin/extension-points/ui/dashboard-widgets.png
similarity index 100%
rename from static/img/developer-guide/plugin/extension-points/ui/dashboard-widgets.png
rename to docs/public/img/developer-guide/plugin/extension-points/ui/dashboard-widgets.png
diff --git a/static/img/developer-guide/plugin/extension-points/ui/default-editor-extension-bubble-menu.png b/docs/public/img/developer-guide/plugin/extension-points/ui/default-editor-extension-bubble-menu.png
similarity index 100%
rename from static/img/developer-guide/plugin/extension-points/ui/default-editor-extension-bubble-menu.png
rename to docs/public/img/developer-guide/plugin/extension-points/ui/default-editor-extension-bubble-menu.png
diff --git a/static/img/developer-guide/plugin/extension-points/ui/default-editor-extension-slash-command.png b/docs/public/img/developer-guide/plugin/extension-points/ui/default-editor-extension-slash-command.png
similarity index 100%
rename from static/img/developer-guide/plugin/extension-points/ui/default-editor-extension-slash-command.png
rename to docs/public/img/developer-guide/plugin/extension-points/ui/default-editor-extension-slash-command.png
diff --git a/static/img/developer-guide/plugin/extension-points/ui/default-editor-extension-toolbar.png b/docs/public/img/developer-guide/plugin/extension-points/ui/default-editor-extension-toolbar.png
similarity index 100%
rename from static/img/developer-guide/plugin/extension-points/ui/default-editor-extension-toolbar.png
rename to docs/public/img/developer-guide/plugin/extension-points/ui/default-editor-extension-toolbar.png
diff --git a/static/img/developer-guide/plugin/extension-points/ui/default-editor-extension-toolbox.png b/docs/public/img/developer-guide/plugin/extension-points/ui/default-editor-extension-toolbox.png
similarity index 100%
rename from static/img/developer-guide/plugin/extension-points/ui/default-editor-extension-toolbox.png
rename to docs/public/img/developer-guide/plugin/extension-points/ui/default-editor-extension-toolbox.png
diff --git a/static/img/developer-guide/plugin/extension-points/ui/editor-create.png b/docs/public/img/developer-guide/plugin/extension-points/ui/editor-create.png
similarity index 100%
rename from static/img/developer-guide/plugin/extension-points/ui/editor-create.png
rename to docs/public/img/developer-guide/plugin/extension-points/ui/editor-create.png
diff --git a/static/img/developer-guide/plugin/extension-points/ui/plugin-installation-tabs-create.png b/docs/public/img/developer-guide/plugin/extension-points/ui/plugin-installation-tabs-create.png
similarity index 100%
rename from static/img/developer-guide/plugin/extension-points/ui/plugin-installation-tabs-create.png
rename to docs/public/img/developer-guide/plugin/extension-points/ui/plugin-installation-tabs-create.png
diff --git a/static/img/developer-guide/plugin/extension-points/ui/plugin-list-item-field-create.png b/docs/public/img/developer-guide/plugin/extension-points/ui/plugin-list-item-field-create.png
similarity index 100%
rename from static/img/developer-guide/plugin/extension-points/ui/plugin-list-item-field-create.png
rename to docs/public/img/developer-guide/plugin/extension-points/ui/plugin-list-item-field-create.png
diff --git a/static/img/developer-guide/plugin/extension-points/ui/plugin-list-item-operation-create.png b/docs/public/img/developer-guide/plugin/extension-points/ui/plugin-list-item-operation-create.png
similarity index 100%
rename from static/img/developer-guide/plugin/extension-points/ui/plugin-list-item-operation-create.png
rename to docs/public/img/developer-guide/plugin/extension-points/ui/plugin-list-item-operation-create.png
diff --git a/static/img/developer-guide/plugin/extension-points/ui/plugin-self-tabs-create.png b/docs/public/img/developer-guide/plugin/extension-points/ui/plugin-self-tabs-create.png
similarity index 100%
rename from static/img/developer-guide/plugin/extension-points/ui/plugin-self-tabs-create.png
rename to docs/public/img/developer-guide/plugin/extension-points/ui/plugin-self-tabs-create.png
diff --git a/static/img/developer-guide/plugin/extension-points/ui/post-list-item-field-create.png b/docs/public/img/developer-guide/plugin/extension-points/ui/post-list-item-field-create.png
similarity index 100%
rename from static/img/developer-guide/plugin/extension-points/ui/post-list-item-field-create.png
rename to docs/public/img/developer-guide/plugin/extension-points/ui/post-list-item-field-create.png
diff --git a/static/img/developer-guide/plugin/extension-points/ui/post-list-item-operation-create.png b/docs/public/img/developer-guide/plugin/extension-points/ui/post-list-item-operation-create.png
similarity index 100%
rename from static/img/developer-guide/plugin/extension-points/ui/post-list-item-operation-create.png
rename to docs/public/img/developer-guide/plugin/extension-points/ui/post-list-item-operation-create.png
diff --git a/static/img/developer-guide/plugin/extension-points/ui/reply-list-item-operation-create.png b/docs/public/img/developer-guide/plugin/extension-points/ui/reply-list-item-operation-create.png
similarity index 100%
rename from static/img/developer-guide/plugin/extension-points/ui/reply-list-item-operation-create.png
rename to docs/public/img/developer-guide/plugin/extension-points/ui/reply-list-item-operation-create.png
diff --git a/static/img/developer-guide/plugin/extension-points/ui/single-page-list-item-field-create.png b/docs/public/img/developer-guide/plugin/extension-points/ui/single-page-list-item-field-create.png
similarity index 100%
rename from static/img/developer-guide/plugin/extension-points/ui/single-page-list-item-field-create.png
rename to docs/public/img/developer-guide/plugin/extension-points/ui/single-page-list-item-field-create.png
diff --git a/static/img/developer-guide/plugin/extension-points/ui/single-page-list-item-operation-create.png b/docs/public/img/developer-guide/plugin/extension-points/ui/single-page-list-item-operation-create.png
similarity index 100%
rename from static/img/developer-guide/plugin/extension-points/ui/single-page-list-item-operation-create.png
rename to docs/public/img/developer-guide/plugin/extension-points/ui/single-page-list-item-operation-create.png
diff --git a/static/img/developer-guide/plugin/extension-points/ui/theme-list-item-operation-create.png b/docs/public/img/developer-guide/plugin/extension-points/ui/theme-list-item-operation-create.png
similarity index 100%
rename from static/img/developer-guide/plugin/extension-points/ui/theme-list-item-operation-create.png
rename to docs/public/img/developer-guide/plugin/extension-points/ui/theme-list-item-operation-create.png
diff --git a/static/img/developer-guide/plugin/extension-points/ui/theme-list-tabs-create.png b/docs/public/img/developer-guide/plugin/extension-points/ui/theme-list-tabs-create.png
similarity index 100%
rename from static/img/developer-guide/plugin/extension-points/ui/theme-list-tabs-create.png
rename to docs/public/img/developer-guide/plugin/extension-points/ui/theme-list-tabs-create.png
diff --git a/static/img/developer-guide/plugin/extension-points/ui/uc-user-profile-tabs-create.png b/docs/public/img/developer-guide/plugin/extension-points/ui/uc-user-profile-tabs-create.png
similarity index 100%
rename from static/img/developer-guide/plugin/extension-points/ui/uc-user-profile-tabs-create.png
rename to docs/public/img/developer-guide/plugin/extension-points/ui/uc-user-profile-tabs-create.png
diff --git a/static/img/developer-guide/plugin/extension-points/ui/user-detail-tabs-create.png b/docs/public/img/developer-guide/plugin/extension-points/ui/user-detail-tabs-create.png
similarity index 100%
rename from static/img/developer-guide/plugin/extension-points/ui/user-detail-tabs-create.png
rename to docs/public/img/developer-guide/plugin/extension-points/ui/user-detail-tabs-create.png
diff --git a/static/img/developer-guide/plugin/use-devtools.png b/docs/public/img/developer-guide/plugin/use-devtools.png
similarity index 100%
rename from static/img/developer-guide/plugin/use-devtools.png
rename to docs/public/img/developer-guide/plugin/use-devtools.png
diff --git a/static/img/developer-guide/rest-api/swagger-ui-overview.png b/docs/public/img/developer-guide/rest-api/swagger-ui-overview.png
similarity index 100%
rename from static/img/developer-guide/rest-api/swagger-ui-overview.png
rename to docs/public/img/developer-guide/rest-api/swagger-ui-overview.png
diff --git a/static/img/developer-guide/theme/custom-login-layout.png b/docs/public/img/developer-guide/theme/custom-login-layout.png
similarity index 100%
rename from static/img/developer-guide/theme/custom-login-layout.png
rename to docs/public/img/developer-guide/theme/custom-login-layout.png
diff --git a/static/img/developer-guide/theme/custom-signup-layout.png b/docs/public/img/developer-guide/theme/custom-signup-layout.png
similarity index 100%
rename from static/img/developer-guide/theme/custom-signup-layout.png
rename to docs/public/img/developer-guide/theme/custom-signup-layout.png
diff --git a/static/img/developer-run/IntelliJ-IDEA-Profiles-Win.png b/docs/public/img/developer-run/IntelliJ-IDEA-Profiles-Win.png
similarity index 100%
rename from static/img/developer-run/IntelliJ-IDEA-Profiles-Win.png
rename to docs/public/img/developer-run/IntelliJ-IDEA-Profiles-Win.png
diff --git a/static/img/developer-run/IntelliJ-IDEA-Profiles-macOS.png b/docs/public/img/developer-run/IntelliJ-IDEA-Profiles-macOS.png
similarity index 100%
rename from static/img/developer-run/IntelliJ-IDEA-Profiles-macOS.png
rename to docs/public/img/developer-run/IntelliJ-IDEA-Profiles-macOS.png
diff --git a/static/img/favicon-96x96.png b/docs/public/img/favicon-96x96.png
similarity index 100%
rename from static/img/favicon-96x96.png
rename to docs/public/img/favicon-96x96.png
diff --git a/static/img/formkit/formkit-iconify.png b/docs/public/img/formkit/formkit-iconify.png
similarity index 100%
rename from static/img/formkit/formkit-iconify.png
rename to docs/public/img/formkit/formkit-iconify.png
diff --git a/static/img/formkit/formkit-repeater.png b/docs/public/img/formkit/formkit-repeater.png
similarity index 100%
rename from static/img/formkit/formkit-repeater.png
rename to docs/public/img/formkit/formkit-repeater.png
diff --git a/static/img/formkit/formkit-toggle.png b/docs/public/img/formkit/formkit-toggle.png
similarity index 100%
rename from static/img/formkit/formkit-toggle.png
rename to docs/public/img/formkit/formkit-toggle.png
diff --git a/static/img/formkit/formkit-verify-form.png b/docs/public/img/formkit/formkit-verify-form.png
similarity index 100%
rename from static/img/formkit/formkit-verify-form.png
rename to docs/public/img/formkit/formkit-verify-form.png
diff --git a/static/img/halo-plugin-hello-world-todo-swagger-api.png b/docs/public/img/halo-plugin-hello-world-todo-swagger-api.png
similarity index 100%
rename from static/img/halo-plugin-hello-world-todo-swagger-api.png
rename to docs/public/img/halo-plugin-hello-world-todo-swagger-api.png
diff --git a/docs/public/img/home/preview.png b/docs/public/img/home/preview.png
new file mode 100644
index 00000000..ed9f52ac
Binary files /dev/null and b/docs/public/img/home/preview.png differ
diff --git a/static/img/install/1panel/1panel.png b/docs/public/img/install/1panel/1panel.png
similarity index 100%
rename from static/img/install/1panel/1panel.png
rename to docs/public/img/install/1panel/1panel.png
diff --git a/static/img/install/1panel/app-store-halo.png b/docs/public/img/install/1panel/app-store-halo.png
similarity index 100%
rename from static/img/install/1panel/app-store-halo.png
rename to docs/public/img/install/1panel/app-store-halo.png
diff --git a/static/img/install/1panel/halo-status.png b/docs/public/img/install/1panel/halo-status.png
similarity index 100%
rename from static/img/install/1panel/halo-status.png
rename to docs/public/img/install/1panel/halo-status.png
diff --git a/static/img/install/1panel/install-halo.png b/docs/public/img/install/1panel/install-halo.png
similarity index 100%
rename from static/img/install/1panel/install-halo.png
rename to docs/public/img/install/1panel/install-halo.png
diff --git a/static/img/install/1panel/new-site.png b/docs/public/img/install/1panel/new-site.png
similarity index 100%
rename from static/img/install/1panel/new-site.png
rename to docs/public/img/install/1panel/new-site.png
diff --git a/static/img/install/1panel/openresty-mysql.png b/docs/public/img/install/1panel/openresty-mysql.png
similarity index 100%
rename from static/img/install/1panel/openresty-mysql.png
rename to docs/public/img/install/1panel/openresty-mysql.png
diff --git a/static/img/install/1panel/site.png b/docs/public/img/install/1panel/site.png
similarity index 100%
rename from static/img/install/1panel/site.png
rename to docs/public/img/install/1panel/site.png
diff --git a/static/img/install/1panel/upgrade-2.png b/docs/public/img/install/1panel/upgrade-2.png
similarity index 100%
rename from static/img/install/1panel/upgrade-2.png
rename to docs/public/img/install/1panel/upgrade-2.png
diff --git a/static/img/install/1panel/upgrade.png b/docs/public/img/install/1panel/upgrade.png
similarity index 100%
rename from static/img/install/1panel/upgrade.png
rename to docs/public/img/install/1panel/upgrade.png
diff --git a/static/img/install/alibab-cloud-computenest/deploy_1.jpg b/docs/public/img/install/alibab-cloud-computenest/deploy_1.jpg
similarity index 100%
rename from static/img/install/alibab-cloud-computenest/deploy_1.jpg
rename to docs/public/img/install/alibab-cloud-computenest/deploy_1.jpg
diff --git a/static/img/install/alibab-cloud-computenest/deploy_2.jpg b/docs/public/img/install/alibab-cloud-computenest/deploy_2.jpg
similarity index 100%
rename from static/img/install/alibab-cloud-computenest/deploy_2.jpg
rename to docs/public/img/install/alibab-cloud-computenest/deploy_2.jpg
diff --git a/static/img/install/alibab-cloud-computenest/halo-setup.jpg b/docs/public/img/install/alibab-cloud-computenest/halo-setup.jpg
similarity index 100%
rename from static/img/install/alibab-cloud-computenest/halo-setup.jpg
rename to docs/public/img/install/alibab-cloud-computenest/halo-setup.jpg
diff --git a/static/img/install/alibaba-cloud-market/buy-1.png b/docs/public/img/install/alibaba-cloud-market/buy-1.png
similarity index 100%
rename from static/img/install/alibaba-cloud-market/buy-1.png
rename to docs/public/img/install/alibaba-cloud-market/buy-1.png
diff --git a/static/img/install/alibaba-cloud-market/buy-2.png b/docs/public/img/install/alibaba-cloud-market/buy-2.png
similarity index 100%
rename from static/img/install/alibaba-cloud-market/buy-2.png
rename to docs/public/img/install/alibaba-cloud-market/buy-2.png
diff --git a/static/img/install/alibaba-cloud-market/buy-3.jpeg b/docs/public/img/install/alibaba-cloud-market/buy-3.jpeg
similarity index 100%
rename from static/img/install/alibaba-cloud-market/buy-3.jpeg
rename to docs/public/img/install/alibaba-cloud-market/buy-3.jpeg
diff --git a/static/img/install/alibaba-cloud-market/buy-4.jpeg b/docs/public/img/install/alibaba-cloud-market/buy-4.jpeg
similarity index 100%
rename from static/img/install/alibaba-cloud-market/buy-4.jpeg
rename to docs/public/img/install/alibaba-cloud-market/buy-4.jpeg
diff --git a/static/img/install/alibaba-cloud-market/instance.png b/docs/public/img/install/alibaba-cloud-market/instance.png
similarity index 100%
rename from static/img/install/alibaba-cloud-market/instance.png
rename to docs/public/img/install/alibaba-cloud-market/instance.png
diff --git a/static/img/install/alibaba-cloud-market/iptables-http.jpeg b/docs/public/img/install/alibaba-cloud-market/iptables-http.jpeg
similarity index 100%
rename from static/img/install/alibaba-cloud-market/iptables-http.jpeg
rename to docs/public/img/install/alibaba-cloud-market/iptables-http.jpeg
diff --git a/static/img/install/bt-panel/custom-compose.png b/docs/public/img/install/bt-panel/custom-compose.png
similarity index 100%
rename from static/img/install/bt-panel/custom-compose.png
rename to docs/public/img/install/bt-panel/custom-compose.png
diff --git a/static/img/install/bt-panel/docker.png b/docs/public/img/install/bt-panel/docker.png
similarity index 100%
rename from static/img/install/bt-panel/docker.png
rename to docs/public/img/install/bt-panel/docker.png
diff --git a/static/img/install/bt-panel/halo-app.png b/docs/public/img/install/bt-panel/halo-app.png
similarity index 100%
rename from static/img/install/bt-panel/halo-app.png
rename to docs/public/img/install/bt-panel/halo-app.png
diff --git a/static/img/install/bt-panel/install-halo.png b/docs/public/img/install/bt-panel/install-halo.png
similarity index 100%
rename from static/img/install/bt-panel/install-halo.png
rename to docs/public/img/install/bt-panel/install-halo.png
diff --git a/static/img/install/bt-panel/installed.png b/docs/public/img/install/bt-panel/installed.png
similarity index 100%
rename from static/img/install/bt-panel/installed.png
rename to docs/public/img/install/bt-panel/installed.png
diff --git a/static/img/install/bt-panel/request-ssl.png b/docs/public/img/install/bt-panel/request-ssl.png
similarity index 100%
rename from static/img/install/bt-panel/request-ssl.png
rename to docs/public/img/install/bt-panel/request-ssl.png
diff --git a/static/img/install/bt-panel/ssl-status.png b/docs/public/img/install/bt-panel/ssl-status.png
similarity index 100%
rename from static/img/install/bt-panel/ssl-status.png
rename to docs/public/img/install/bt-panel/ssl-status.png
diff --git a/static/img/install/bt-panel/update.png b/docs/public/img/install/bt-panel/update.png
similarity index 100%
rename from static/img/install/bt-panel/update.png
rename to docs/public/img/install/bt-panel/update.png
diff --git a/static/img/install/tencent-cloud-lighthouse/1panel-info.png b/docs/public/img/install/tencent-cloud-lighthouse/1panel-info.png
similarity index 100%
rename from static/img/install/tencent-cloud-lighthouse/1panel-info.png
rename to docs/public/img/install/tencent-cloud-lighthouse/1panel-info.png
diff --git a/static/img/install/tencent-cloud-lighthouse/1panel-login.png b/docs/public/img/install/tencent-cloud-lighthouse/1panel-login.png
similarity index 100%
rename from static/img/install/tencent-cloud-lighthouse/1panel-login.png
rename to docs/public/img/install/tencent-cloud-lighthouse/1panel-login.png
diff --git a/static/img/install/tencent-cloud-lighthouse/1panel-overview.png b/docs/public/img/install/tencent-cloud-lighthouse/1panel-overview.png
similarity index 100%
rename from static/img/install/tencent-cloud-lighthouse/1panel-overview.png
rename to docs/public/img/install/tencent-cloud-lighthouse/1panel-overview.png
diff --git a/static/img/install/tencent-cloud-lighthouse/application.png b/docs/public/img/install/tencent-cloud-lighthouse/application.png
similarity index 100%
rename from static/img/install/tencent-cloud-lighthouse/application.png
rename to docs/public/img/install/tencent-cloud-lighthouse/application.png
diff --git a/static/img/install/tencent-cloud-lighthouse/buy.png b/docs/public/img/install/tencent-cloud-lighthouse/buy.png
similarity index 100%
rename from static/img/install/tencent-cloud-lighthouse/buy.png
rename to docs/public/img/install/tencent-cloud-lighthouse/buy.png
diff --git a/static/img/install/tencent-cloud-lighthouse/domain.png b/docs/public/img/install/tencent-cloud-lighthouse/domain.png
similarity index 100%
rename from static/img/install/tencent-cloud-lighthouse/domain.png
rename to docs/public/img/install/tencent-cloud-lighthouse/domain.png
diff --git a/static/img/install/tencent-cloud-lighthouse/external-url.png b/docs/public/img/install/tencent-cloud-lighthouse/external-url.png
similarity index 100%
rename from static/img/install/tencent-cloud-lighthouse/external-url.png
rename to docs/public/img/install/tencent-cloud-lighthouse/external-url.png
diff --git a/static/img/install/tencent-cloud-lighthouse/firewall.png b/docs/public/img/install/tencent-cloud-lighthouse/firewall.png
similarity index 100%
rename from static/img/install/tencent-cloud-lighthouse/firewall.png
rename to docs/public/img/install/tencent-cloud-lighthouse/firewall.png
diff --git a/static/img/install/tencent-cloud-lighthouse/halo-setup.png b/docs/public/img/install/tencent-cloud-lighthouse/halo-setup.png
similarity index 100%
rename from static/img/install/tencent-cloud-lighthouse/halo-setup.png
rename to docs/public/img/install/tencent-cloud-lighthouse/halo-setup.png
diff --git a/static/img/install/tencent-cloud-lighthouse/installed-apps.png b/docs/public/img/install/tencent-cloud-lighthouse/installed-apps.png
similarity index 100%
rename from static/img/install/tencent-cloud-lighthouse/installed-apps.png
rename to docs/public/img/install/tencent-cloud-lighthouse/installed-apps.png
diff --git a/static/img/install/tencent-cloud-lighthouse/upgrade.png b/docs/public/img/install/tencent-cloud-lighthouse/upgrade.png
similarity index 100%
rename from static/img/install/tencent-cloud-lighthouse/upgrade.png
rename to docs/public/img/install/tencent-cloud-lighthouse/upgrade.png
diff --git a/static/img/install/tencent-cloud-lighthouse/websites.png b/docs/public/img/install/tencent-cloud-lighthouse/websites.png
similarity index 100%
rename from static/img/install/tencent-cloud-lighthouse/websites.png
rename to docs/public/img/install/tencent-cloud-lighthouse/websites.png
diff --git a/static/img/migrate/halo1.6-export.png b/docs/public/img/migrate/halo1.6-export.png
similarity index 100%
rename from static/img/migrate/halo1.6-export.png
rename to docs/public/img/migrate/halo1.6-export.png
diff --git a/static/img/migrate/halo2.0-migrate-plugin-1.png b/docs/public/img/migrate/halo2.0-migrate-plugin-1.png
similarity index 100%
rename from static/img/migrate/halo2.0-migrate-plugin-1.png
rename to docs/public/img/migrate/halo2.0-migrate-plugin-1.png
diff --git a/static/img/migrate/halo2.0-migrate-plugin-2.png b/docs/public/img/migrate/halo2.0-migrate-plugin-2.png
similarity index 100%
rename from static/img/migrate/halo2.0-migrate-plugin-2.png
rename to docs/public/img/migrate/halo2.0-migrate-plugin-2.png
diff --git a/static/img/migrate/halo2.0-migrate-plugin-3.png b/docs/public/img/migrate/halo2.0-migrate-plugin-3.png
similarity index 100%
rename from static/img/migrate/halo2.0-migrate-plugin-3.png
rename to docs/public/img/migrate/halo2.0-migrate-plugin-3.png
diff --git a/static/img/nginx-proxy-manager/npm-add-proxy.png b/docs/public/img/nginx-proxy-manager/npm-add-proxy.png
similarity index 100%
rename from static/img/nginx-proxy-manager/npm-add-proxy.png
rename to docs/public/img/nginx-proxy-manager/npm-add-proxy.png
diff --git a/static/img/nginx-proxy-manager/npm-dashboard.png b/docs/public/img/nginx-proxy-manager/npm-dashboard.png
similarity index 100%
rename from static/img/nginx-proxy-manager/npm-dashboard.png
rename to docs/public/img/nginx-proxy-manager/npm-dashboard.png
diff --git a/static/img/nginx-proxy-manager/npm-ssl.png b/docs/public/img/nginx-proxy-manager/npm-ssl.png
similarity index 100%
rename from static/img/nginx-proxy-manager/npm-ssl.png
rename to docs/public/img/nginx-proxy-manager/npm-ssl.png
diff --git a/static/img/nginx-proxy-manager/npm-welcome.png b/docs/public/img/nginx-proxy-manager/npm-welcome.png
similarity index 100%
rename from static/img/nginx-proxy-manager/npm-welcome.png
rename to docs/public/img/nginx-proxy-manager/npm-welcome.png
diff --git a/static/img/plugin-hello-world.png b/docs/public/img/plugin-hello-world.png
similarity index 100%
rename from static/img/plugin-hello-world.png
rename to docs/public/img/plugin-hello-world.png
diff --git a/static/img/setup/setup-2.20.png b/docs/public/img/setup/setup-2.20.png
similarity index 100%
rename from static/img/setup/setup-2.20.png
rename to docs/public/img/setup/setup-2.20.png
diff --git a/static/img/theme/reload-theme-config.png b/docs/public/img/theme/reload-theme-config.png
similarity index 100%
rename from static/img/theme/reload-theme-config.png
rename to docs/public/img/theme/reload-theme-config.png
diff --git a/static/img/todo-ui.png b/docs/public/img/todo-ui.png
similarity index 100%
rename from static/img/todo-ui.png
rename to docs/public/img/todo-ui.png
diff --git a/static/img/todolist-in-list.png b/docs/public/img/todolist-in-list.png
similarity index 100%
rename from static/img/todolist-in-list.png
rename to docs/public/img/todolist-in-list.png
diff --git a/static/img/uc/totp-config.png b/docs/public/img/uc/totp-config.png
similarity index 100%
rename from static/img/uc/totp-config.png
rename to docs/public/img/uc/totp-config.png
diff --git a/static/img/uc/totp.png b/docs/public/img/uc/totp.png
similarity index 100%
rename from static/img/uc/totp.png
rename to docs/public/img/uc/totp.png
diff --git a/static/img/uc/uc-entry.png b/docs/public/img/uc/uc-entry.png
similarity index 100%
rename from static/img/uc/uc-entry.png
rename to docs/public/img/uc/uc-entry.png
diff --git a/static/img/uc/uc-notification-preferences.png b/docs/public/img/uc/uc-notification-preferences.png
similarity index 100%
rename from static/img/uc/uc-notification-preferences.png
rename to docs/public/img/uc/uc-notification-preferences.png
diff --git a/static/img/uc/uc-notifications.png b/docs/public/img/uc/uc-notifications.png
similarity index 100%
rename from static/img/uc/uc-notifications.png
rename to docs/public/img/uc/uc-notifications.png
diff --git a/static/img/uc/uc-pat-creation.png b/docs/public/img/uc/uc-pat-creation.png
similarity index 100%
rename from static/img/uc/uc-pat-creation.png
rename to docs/public/img/uc/uc-pat-creation.png
diff --git a/static/img/uc/uc-pat-token.png b/docs/public/img/uc/uc-pat-token.png
similarity index 100%
rename from static/img/uc/uc-pat-token.png
rename to docs/public/img/uc/uc-pat-token.png
diff --git a/static/img/uc/uc-pat.png b/docs/public/img/uc/uc-pat.png
similarity index 100%
rename from static/img/uc/uc-pat.png
rename to docs/public/img/uc/uc-pat.png
diff --git a/static/img/uc/uc-posts.png b/docs/public/img/uc/uc-posts.png
similarity index 100%
rename from static/img/uc/uc-posts.png
rename to docs/public/img/uc/uc-posts.png
diff --git a/static/img/uc/uc-profile.png b/docs/public/img/uc/uc-profile.png
similarity index 100%
rename from static/img/uc/uc-profile.png
rename to docs/public/img/uc/uc-profile.png
diff --git a/static/img/uc/user-devices.png b/docs/public/img/uc/user-devices.png
similarity index 100%
rename from static/img/uc/user-devices.png
rename to docs/public/img/uc/user-devices.png
diff --git a/static/img/user-guide/activate/app-activate.png b/docs/public/img/user-guide/activate/app-activate.png
similarity index 100%
rename from static/img/user-guide/activate/app-activate.png
rename to docs/public/img/user-guide/activate/app-activate.png
diff --git a/static/img/user-guide/activate/app-store.png b/docs/public/img/user-guide/activate/app-store.png
similarity index 100%
rename from static/img/user-guide/activate/app-store.png
rename to docs/public/img/user-guide/activate/app-store.png
diff --git a/static/img/user-guide/activate/lxware-license-detail-apps.png b/docs/public/img/user-guide/activate/lxware-license-detail-apps.png
similarity index 100%
rename from static/img/user-guide/activate/lxware-license-detail-apps.png
rename to docs/public/img/user-guide/activate/lxware-license-detail-apps.png
diff --git a/static/img/user-guide/activate/lxware-license-detail.png b/docs/public/img/user-guide/activate/lxware-license-detail.png
similarity index 100%
rename from static/img/user-guide/activate/lxware-license-detail.png
rename to docs/public/img/user-guide/activate/lxware-license-detail.png
diff --git a/static/img/user-guide/activate/lxware-licenses-operation-detail.png b/docs/public/img/user-guide/activate/lxware-licenses-operation-detail.png
similarity index 100%
rename from static/img/user-guide/activate/lxware-licenses-operation-detail.png
rename to docs/public/img/user-guide/activate/lxware-licenses-operation-detail.png
diff --git a/static/img/user-guide/activate/lxware-licenses.png b/docs/public/img/user-guide/activate/lxware-licenses.png
similarity index 100%
rename from static/img/user-guide/activate/lxware-licenses.png
rename to docs/public/img/user-guide/activate/lxware-licenses.png
diff --git a/static/img/user-guide/activate/overview-activate.png b/docs/public/img/user-guide/activate/overview-activate.png
similarity index 100%
rename from static/img/user-guide/activate/overview-activate.png
rename to docs/public/img/user-guide/activate/overview-activate.png
diff --git a/static/img/user-guide/activate/overview-activated.png b/docs/public/img/user-guide/activate/overview-activated.png
similarity index 100%
rename from static/img/user-guide/activate/overview-activated.png
rename to docs/public/img/user-guide/activate/overview-activated.png
diff --git a/static/img/user-guide/activate/overview-deactivate.png b/docs/public/img/user-guide/activate/overview-deactivate.png
similarity index 100%
rename from static/img/user-guide/activate/overview-deactivate.png
rename to docs/public/img/user-guide/activate/overview-deactivate.png
diff --git a/static/img/user-guide/activate/overview-import-license.png b/docs/public/img/user-guide/activate/overview-import-license.png
similarity index 100%
rename from static/img/user-guide/activate/overview-import-license.png
rename to docs/public/img/user-guide/activate/overview-import-license.png
diff --git a/static/img/user-guide/app-store/app-store-license-generate-license-1.png b/docs/public/img/user-guide/app-store/app-store-license-generate-license-1.png
similarity index 100%
rename from static/img/user-guide/app-store/app-store-license-generate-license-1.png
rename to docs/public/img/user-guide/app-store/app-store-license-generate-license-1.png
diff --git a/static/img/user-guide/app-store/app-store-license-generate-license-2.png b/docs/public/img/user-guide/app-store/app-store-license-generate-license-2.png
similarity index 100%
rename from static/img/user-guide/app-store/app-store-license-generate-license-2.png
rename to docs/public/img/user-guide/app-store/app-store-license-generate-license-2.png
diff --git a/static/img/user-guide/app-store/app-store-license-generate-license-3.png b/docs/public/img/user-guide/app-store/app-store-license-generate-license-3.png
similarity index 100%
rename from static/img/user-guide/app-store/app-store-license-generate-license-3.png
rename to docs/public/img/user-guide/app-store/app-store-license-generate-license-3.png
diff --git a/static/img/user-guide/app-store/app-store-license-manage-2.22.png b/docs/public/img/user-guide/app-store/app-store-license-manage-2.22.png
similarity index 100%
rename from static/img/user-guide/app-store/app-store-license-manage-2.22.png
rename to docs/public/img/user-guide/app-store/app-store-license-manage-2.22.png
diff --git a/static/img/user-guide/app-store/app-store-license-offline-option.png b/docs/public/img/user-guide/app-store/app-store-license-offline-option.png
similarity index 100%
rename from static/img/user-guide/app-store/app-store-license-offline-option.png
rename to docs/public/img/user-guide/app-store/app-store-license-offline-option.png
diff --git a/static/img/user-guide/app-store/app-store-license-offline.png b/docs/public/img/user-guide/app-store/app-store-license-offline.png
similarity index 100%
rename from static/img/user-guide/app-store/app-store-license-offline.png
rename to docs/public/img/user-guide/app-store/app-store-license-offline.png
diff --git a/static/img/user-guide/app-store/app-store-license-status-2.22.png b/docs/public/img/user-guide/app-store/app-store-license-status-2.22.png
similarity index 100%
rename from static/img/user-guide/app-store/app-store-license-status-2.22.png
rename to docs/public/img/user-guide/app-store/app-store-license-status-2.22.png
diff --git a/static/img/user-guide/app-store/app-store-license-status.png b/docs/public/img/user-guide/app-store/app-store-license-status.png
similarity index 100%
rename from static/img/user-guide/app-store/app-store-license-status.png
rename to docs/public/img/user-guide/app-store/app-store-license-status.png
diff --git a/static/img/user-guide/app-store/app-store-page.png b/docs/public/img/user-guide/app-store/app-store-page.png
similarity index 100%
rename from static/img/user-guide/app-store/app-store-page.png
rename to docs/public/img/user-guide/app-store/app-store-page.png
diff --git a/static/img/user-guide/app-store/app-store-pat.png b/docs/public/img/user-guide/app-store/app-store-pat.png
similarity index 100%
rename from static/img/user-guide/app-store/app-store-pat.png
rename to docs/public/img/user-guide/app-store/app-store-pat.png
diff --git a/static/img/user-guide/app-store/app-store-plugin-license-2.22.png b/docs/public/img/user-guide/app-store/app-store-plugin-license-2.22.png
similarity index 100%
rename from static/img/user-guide/app-store/app-store-plugin-license-2.22.png
rename to docs/public/img/user-guide/app-store/app-store-plugin-license-2.22.png
diff --git a/static/img/user-guide/app-store/app-store-plugins.png b/docs/public/img/user-guide/app-store/app-store-plugins.png
similarity index 100%
rename from static/img/user-guide/app-store/app-store-plugins.png
rename to docs/public/img/user-guide/app-store/app-store-plugins.png
diff --git a/static/img/user-guide/app-store/app-store-themes.png b/docs/public/img/user-guide/app-store/app-store-themes.png
similarity index 100%
rename from static/img/user-guide/app-store/app-store-themes.png
rename to docs/public/img/user-guide/app-store/app-store-themes.png
diff --git a/static/img/user-guide/app-store/app-store-upgrade-plugin.png b/docs/public/img/user-guide/app-store/app-store-upgrade-plugin.png
similarity index 100%
rename from static/img/user-guide/app-store/app-store-upgrade-plugin.png
rename to docs/public/img/user-guide/app-store/app-store-upgrade-plugin.png
diff --git a/static/img/user-guide/app-store/app-store-upgrade-theme.png b/docs/public/img/user-guide/app-store/app-store-upgrade-theme.png
similarity index 100%
rename from static/img/user-guide/app-store/app-store-upgrade-theme.png
rename to docs/public/img/user-guide/app-store/app-store-upgrade-theme.png
diff --git a/static/img/user-guide/attachments/attachment-batch-operate.png b/docs/public/img/user-guide/attachments/attachment-batch-operate.png
similarity index 100%
rename from static/img/user-guide/attachments/attachment-batch-operate.png
rename to docs/public/img/user-guide/attachments/attachment-batch-operate.png
diff --git a/static/img/user-guide/attachments/attachment-detail.png b/docs/public/img/user-guide/attachments/attachment-detail.png
similarity index 100%
rename from static/img/user-guide/attachments/attachment-detail.png
rename to docs/public/img/user-guide/attachments/attachment-detail.png
diff --git a/static/img/user-guide/attachments/attachment-group-add.png b/docs/public/img/user-guide/attachments/attachment-group-add.png
similarity index 100%
rename from static/img/user-guide/attachments/attachment-group-add.png
rename to docs/public/img/user-guide/attachments/attachment-group-add.png
diff --git a/static/img/user-guide/attachments/attachment-move.png b/docs/public/img/user-guide/attachments/attachment-move.png
similarity index 100%
rename from static/img/user-guide/attachments/attachment-move.png
rename to docs/public/img/user-guide/attachments/attachment-move.png
diff --git a/static/img/user-guide/attachments/attachment-policy-add-local.png b/docs/public/img/user-guide/attachments/attachment-policy-add-local.png
similarity index 100%
rename from static/img/user-guide/attachments/attachment-policy-add-local.png
rename to docs/public/img/user-guide/attachments/attachment-policy-add-local.png
diff --git a/static/img/user-guide/attachments/attachment-policy-add.png b/docs/public/img/user-guide/attachments/attachment-policy-add.png
similarity index 100%
rename from static/img/user-guide/attachments/attachment-policy-add.png
rename to docs/public/img/user-guide/attachments/attachment-policy-add.png
diff --git a/static/img/user-guide/attachments/attachment-policy-operate.png b/docs/public/img/user-guide/attachments/attachment-policy-operate.png
similarity index 100%
rename from static/img/user-guide/attachments/attachment-policy-operate.png
rename to docs/public/img/user-guide/attachments/attachment-policy-operate.png
diff --git a/static/img/user-guide/attachments/attachment-upload.png b/docs/public/img/user-guide/attachments/attachment-upload.png
similarity index 100%
rename from static/img/user-guide/attachments/attachment-upload.png
rename to docs/public/img/user-guide/attachments/attachment-upload.png
diff --git a/static/img/user-guide/backup/auto-backup.png b/docs/public/img/user-guide/backup/auto-backup.png
similarity index 100%
rename from static/img/user-guide/backup/auto-backup.png
rename to docs/public/img/user-guide/backup/auto-backup.png
diff --git a/static/img/user-guide/backup/backup-complete.png b/docs/public/img/user-guide/backup/backup-complete.png
similarity index 100%
rename from static/img/user-guide/backup/backup-complete.png
rename to docs/public/img/user-guide/backup/backup-complete.png
diff --git a/static/img/user-guide/backup/backup-running.png b/docs/public/img/user-guide/backup/backup-running.png
similarity index 100%
rename from static/img/user-guide/backup/backup-running.png
rename to docs/public/img/user-guide/backup/backup-running.png
diff --git a/static/img/user-guide/backup/before-restore.png b/docs/public/img/user-guide/backup/before-restore.png
similarity index 100%
rename from static/img/user-guide/backup/before-restore.png
rename to docs/public/img/user-guide/backup/before-restore.png
diff --git a/static/img/user-guide/backup/create-backup.png b/docs/public/img/user-guide/backup/create-backup.png
similarity index 100%
rename from static/img/user-guide/backup/create-backup.png
rename to docs/public/img/user-guide/backup/create-backup.png
diff --git a/static/img/user-guide/backup/restore-complete.png b/docs/public/img/user-guide/backup/restore-complete.png
similarity index 100%
rename from static/img/user-guide/backup/restore-complete.png
rename to docs/public/img/user-guide/backup/restore-complete.png
diff --git a/static/img/user-guide/backup/restore-upload.png b/docs/public/img/user-guide/backup/restore-upload.png
similarity index 100%
rename from static/img/user-guide/backup/restore-upload.png
rename to docs/public/img/user-guide/backup/restore-upload.png
diff --git a/static/img/user-guide/backup/restore.png b/docs/public/img/user-guide/backup/restore.png
similarity index 100%
rename from static/img/user-guide/backup/restore.png
rename to docs/public/img/user-guide/backup/restore.png
diff --git a/static/img/user-guide/backup/waiting-restart.png b/docs/public/img/user-guide/backup/waiting-restart.png
similarity index 100%
rename from static/img/user-guide/backup/waiting-restart.png
rename to docs/public/img/user-guide/backup/waiting-restart.png
diff --git a/static/img/user-guide/common/login.png b/docs/public/img/user-guide/common/login.png
similarity index 100%
rename from static/img/user-guide/common/login.png
rename to docs/public/img/user-guide/common/login.png
diff --git a/static/img/user-guide/common/signup.png b/docs/public/img/user-guide/common/signup.png
similarity index 100%
rename from static/img/user-guide/common/signup.png
rename to docs/public/img/user-guide/common/signup.png
diff --git "a/static/img/user-guide/common/\346\216\247\345\210\266\345\217\260\347\225\214\351\235\242\350\257\264\346\230\216.png" "b/docs/public/img/user-guide/common/\346\216\247\345\210\266\345\217\260\347\225\214\351\235\242\350\257\264\346\230\216.png"
similarity index 100%
rename from "static/img/user-guide/common/\346\216\247\345\210\266\345\217\260\347\225\214\351\235\242\350\257\264\346\230\216.png"
rename to "docs/public/img/user-guide/common/\346\216\247\345\210\266\345\217\260\347\225\214\351\235\242\350\257\264\346\230\216.png"
diff --git a/static/img/user-guide/menus/create-menu-item-2.png b/docs/public/img/user-guide/menus/create-menu-item-2.png
similarity index 100%
rename from static/img/user-guide/menus/create-menu-item-2.png
rename to docs/public/img/user-guide/menus/create-menu-item-2.png
diff --git a/static/img/user-guide/menus/create-menu-item.png b/docs/public/img/user-guide/menus/create-menu-item.png
similarity index 100%
rename from static/img/user-guide/menus/create-menu-item.png
rename to docs/public/img/user-guide/menus/create-menu-item.png
diff --git a/static/img/user-guide/menus/create-menu.png b/docs/public/img/user-guide/menus/create-menu.png
similarity index 100%
rename from static/img/user-guide/menus/create-menu.png
rename to docs/public/img/user-guide/menus/create-menu.png
diff --git a/static/img/user-guide/menus/menu-item-operation.png b/docs/public/img/user-guide/menus/menu-item-operation.png
similarity index 100%
rename from static/img/user-guide/menus/menu-item-operation.png
rename to docs/public/img/user-guide/menus/menu-item-operation.png
diff --git a/static/img/user-guide/menus/menu-operation.png b/docs/public/img/user-guide/menus/menu-operation.png
similarity index 100%
rename from static/img/user-guide/menus/menu-operation.png
rename to docs/public/img/user-guide/menus/menu-operation.png
diff --git a/static/img/user-guide/menus/menus.png b/docs/public/img/user-guide/menus/menus.png
similarity index 100%
rename from static/img/user-guide/menus/menus.png
rename to docs/public/img/user-guide/menus/menus.png
diff --git a/static/img/user-guide/menus/sort.gif b/docs/public/img/user-guide/menus/sort.gif
similarity index 100%
rename from static/img/user-guide/menus/sort.gif
rename to docs/public/img/user-guide/menus/sort.gif
diff --git a/static/img/user-guide/pages/page-about.png b/docs/public/img/user-guide/pages/page-about.png
similarity index 100%
rename from static/img/user-guide/pages/page-about.png
rename to docs/public/img/user-guide/pages/page-about.png
diff --git a/static/img/user-guide/plugins/extension-point-settings-entry.png b/docs/public/img/user-guide/plugins/extension-point-settings-entry.png
similarity index 100%
rename from static/img/user-guide/plugins/extension-point-settings-entry.png
rename to docs/public/img/user-guide/plugins/extension-point-settings-entry.png
diff --git a/static/img/user-guide/plugins/extension-point-settings.png b/docs/public/img/user-guide/plugins/extension-point-settings.png
similarity index 100%
rename from static/img/user-guide/plugins/extension-point-settings.png
rename to docs/public/img/user-guide/plugins/extension-point-settings.png
diff --git a/static/img/user-guide/plugins/plugin-install.png b/docs/public/img/user-guide/plugins/plugin-install.png
similarity index 100%
rename from static/img/user-guide/plugins/plugin-install.png
rename to docs/public/img/user-guide/plugins/plugin-install.png
diff --git a/static/img/user-guide/plugins/plugin-setting.png b/docs/public/img/user-guide/plugins/plugin-setting.png
similarity index 100%
rename from static/img/user-guide/plugins/plugin-setting.png
rename to docs/public/img/user-guide/plugins/plugin-setting.png
diff --git a/static/img/user-guide/plugins/plugin-switch.png b/docs/public/img/user-guide/plugins/plugin-switch.png
similarity index 100%
rename from static/img/user-guide/plugins/plugin-switch.png
rename to docs/public/img/user-guide/plugins/plugin-switch.png
diff --git a/static/img/user-guide/plugins/plugin-uninstall.png b/docs/public/img/user-guide/plugins/plugin-uninstall.png
similarity index 100%
rename from static/img/user-guide/plugins/plugin-uninstall.png
rename to docs/public/img/user-guide/plugins/plugin-uninstall.png
diff --git a/static/img/user-guide/posts/category-create-2.png b/docs/public/img/user-guide/posts/category-create-2.png
similarity index 100%
rename from static/img/user-guide/posts/category-create-2.png
rename to docs/public/img/user-guide/posts/category-create-2.png
diff --git a/static/img/user-guide/posts/category-create.png b/docs/public/img/user-guide/posts/category-create.png
similarity index 100%
rename from static/img/user-guide/posts/category-create.png
rename to docs/public/img/user-guide/posts/category-create.png
diff --git a/static/img/user-guide/posts/category-move.gif b/docs/public/img/user-guide/posts/category-move.gif
similarity index 100%
rename from static/img/user-guide/posts/category-move.gif
rename to docs/public/img/user-guide/posts/category-move.gif
diff --git a/static/img/user-guide/posts/post-edit.png b/docs/public/img/user-guide/posts/post-edit.png
similarity index 100%
rename from static/img/user-guide/posts/post-edit.png
rename to docs/public/img/user-guide/posts/post-edit.png
diff --git a/static/img/user-guide/posts/post-setting.png b/docs/public/img/user-guide/posts/post-setting.png
similarity index 100%
rename from static/img/user-guide/posts/post-setting.png
rename to docs/public/img/user-guide/posts/post-setting.png
diff --git a/static/img/user-guide/posts/tag-create.png b/docs/public/img/user-guide/posts/tag-create.png
similarity index 100%
rename from static/img/user-guide/posts/tag-create.png
rename to docs/public/img/user-guide/posts/tag-create.png
diff --git a/static/img/user-guide/settings/brand.png b/docs/public/img/user-guide/settings/brand.png
similarity index 100%
rename from static/img/user-guide/settings/brand.png
rename to docs/public/img/user-guide/settings/brand.png
diff --git a/static/img/user-guide/settings/setting-basic.png b/docs/public/img/user-guide/settings/setting-basic.png
similarity index 100%
rename from static/img/user-guide/settings/setting-basic.png
rename to docs/public/img/user-guide/settings/setting-basic.png
diff --git a/static/img/user-guide/shop/mp-preview.png b/docs/public/img/user-guide/shop/mp-preview.png
similarity index 100%
rename from static/img/user-guide/shop/mp-preview.png
rename to docs/public/img/user-guide/shop/mp-preview.png
diff --git a/static/img/user-guide/shop/preview-console-home-1.png b/docs/public/img/user-guide/shop/preview-console-home-1.png
similarity index 100%
rename from static/img/user-guide/shop/preview-console-home-1.png
rename to docs/public/img/user-guide/shop/preview-console-home-1.png
diff --git a/static/img/user-guide/shop/preview-console-home-2.png b/docs/public/img/user-guide/shop/preview-console-home-2.png
similarity index 100%
rename from static/img/user-guide/shop/preview-console-home-2.png
rename to docs/public/img/user-guide/shop/preview-console-home-2.png
diff --git a/static/img/user-guide/shop/preview-console-home-3.png b/docs/public/img/user-guide/shop/preview-console-home-3.png
similarity index 100%
rename from static/img/user-guide/shop/preview-console-home-3.png
rename to docs/public/img/user-guide/shop/preview-console-home-3.png
diff --git a/static/img/user-guide/shop/preview-console-order-detail.png b/docs/public/img/user-guide/shop/preview-console-order-detail.png
similarity index 100%
rename from static/img/user-guide/shop/preview-console-order-detail.png
rename to docs/public/img/user-guide/shop/preview-console-order-detail.png
diff --git a/static/img/user-guide/shop/preview-console-order-modal.png b/docs/public/img/user-guide/shop/preview-console-order-modal.png
similarity index 100%
rename from static/img/user-guide/shop/preview-console-order-modal.png
rename to docs/public/img/user-guide/shop/preview-console-order-modal.png
diff --git a/static/img/user-guide/shop/preview-console-order-request-fulfillment.png b/docs/public/img/user-guide/shop/preview-console-order-request-fulfillment.png
similarity index 100%
rename from static/img/user-guide/shop/preview-console-order-request-fulfillment.png
rename to docs/public/img/user-guide/shop/preview-console-order-request-fulfillment.png
diff --git a/static/img/user-guide/shop/preview-console-orders.png b/docs/public/img/user-guide/shop/preview-console-orders.png
similarity index 100%
rename from static/img/user-guide/shop/preview-console-orders.png
rename to docs/public/img/user-guide/shop/preview-console-orders.png
diff --git a/static/img/user-guide/shop/preview-console-products.png b/docs/public/img/user-guide/shop/preview-console-products.png
similarity index 100%
rename from static/img/user-guide/shop/preview-console-products.png
rename to docs/public/img/user-guide/shop/preview-console-products.png
diff --git a/static/img/user-guide/shop/preview-payments-alipay.png b/docs/public/img/user-guide/shop/preview-payments-alipay.png
similarity index 100%
rename from static/img/user-guide/shop/preview-payments-alipay.png
rename to docs/public/img/user-guide/shop/preview-payments-alipay.png
diff --git a/static/img/user-guide/shop/preview-payments-bank-transfer.png b/docs/public/img/user-guide/shop/preview-payments-bank-transfer.png
similarity index 100%
rename from static/img/user-guide/shop/preview-payments-bank-transfer.png
rename to docs/public/img/user-guide/shop/preview-payments-bank-transfer.png
diff --git a/static/img/user-guide/shop/preview-payments-qrcode.png b/docs/public/img/user-guide/shop/preview-payments-qrcode.png
similarity index 100%
rename from static/img/user-guide/shop/preview-payments-qrcode.png
rename to docs/public/img/user-guide/shop/preview-payments-qrcode.png
diff --git a/static/img/user-guide/shop/preview-payments-stripe-2.png b/docs/public/img/user-guide/shop/preview-payments-stripe-2.png
similarity index 100%
rename from static/img/user-guide/shop/preview-payments-stripe-2.png
rename to docs/public/img/user-guide/shop/preview-payments-stripe-2.png
diff --git a/static/img/user-guide/shop/preview-payments-stripe.png b/docs/public/img/user-guide/shop/preview-payments-stripe.png
similarity index 100%
rename from static/img/user-guide/shop/preview-payments-stripe.png
rename to docs/public/img/user-guide/shop/preview-payments-stripe.png
diff --git a/static/img/user-guide/shop/preview-payments-wechat.png b/docs/public/img/user-guide/shop/preview-payments-wechat.png
similarity index 100%
rename from static/img/user-guide/shop/preview-payments-wechat.png
rename to docs/public/img/user-guide/shop/preview-payments-wechat.png
diff --git a/static/img/user-guide/shop/preview-payments-zpayz.png b/docs/public/img/user-guide/shop/preview-payments-zpayz.png
similarity index 100%
rename from static/img/user-guide/shop/preview-payments-zpayz.png
rename to docs/public/img/user-guide/shop/preview-payments-zpayz.png
diff --git a/static/img/user-guide/shop/preview-product.png b/docs/public/img/user-guide/shop/preview-product.png
similarity index 100%
rename from static/img/user-guide/shop/preview-product.png
rename to docs/public/img/user-guide/shop/preview-product.png
diff --git a/static/img/user-guide/shop/products-category-selector.png b/docs/public/img/user-guide/shop/products-category-selector.png
similarity index 100%
rename from static/img/user-guide/shop/products-category-selector.png
rename to docs/public/img/user-guide/shop/products-category-selector.png
diff --git a/static/img/user-guide/shop/products-create-virtual.png b/docs/public/img/user-guide/shop/products-create-virtual.png
similarity index 100%
rename from static/img/user-guide/shop/products-create-virtual.png
rename to docs/public/img/user-guide/shop/products-create-virtual.png
diff --git a/static/img/user-guide/shop/products-create.png b/docs/public/img/user-guide/shop/products-create.png
similarity index 100%
rename from static/img/user-guide/shop/products-create.png
rename to docs/public/img/user-guide/shop/products-create.png
diff --git a/static/img/user-guide/shop/products-spec-form.png b/docs/public/img/user-guide/shop/products-spec-form.png
similarity index 100%
rename from static/img/user-guide/shop/products-spec-form.png
rename to docs/public/img/user-guide/shop/products-spec-form.png
diff --git a/static/img/user-guide/shop/products-variants-0.png b/docs/public/img/user-guide/shop/products-variants-0.png
similarity index 100%
rename from static/img/user-guide/shop/products-variants-0.png
rename to docs/public/img/user-guide/shop/products-variants-0.png
diff --git a/static/img/user-guide/shop/products-variants-batch.png b/docs/public/img/user-guide/shop/products-variants-batch.png
similarity index 100%
rename from static/img/user-guide/shop/products-variants-batch.png
rename to docs/public/img/user-guide/shop/products-variants-batch.png
diff --git a/static/img/user-guide/shop/products-variants-form.png b/docs/public/img/user-guide/shop/products-variants-form.png
similarity index 100%
rename from static/img/user-guide/shop/products-variants-form.png
rename to docs/public/img/user-guide/shop/products-variants-form.png
diff --git a/static/img/user-guide/shop/products-variants.png b/docs/public/img/user-guide/shop/products-variants.png
similarity index 100%
rename from static/img/user-guide/shop/products-variants.png
rename to docs/public/img/user-guide/shop/products-variants.png
diff --git a/static/img/user-guide/shop/settings-payments-alipay-app-detail.png b/docs/public/img/user-guide/shop/settings-payments-alipay-app-detail.png
similarity index 100%
rename from static/img/user-guide/shop/settings-payments-alipay-app-detail.png
rename to docs/public/img/user-guide/shop/settings-payments-alipay-app-detail.png
diff --git a/static/img/user-guide/shop/settings-payments-alipay-create-app.png b/docs/public/img/user-guide/shop/settings-payments-alipay-create-app.png
similarity index 100%
rename from static/img/user-guide/shop/settings-payments-alipay-create-app.png
rename to docs/public/img/user-guide/shop/settings-payments-alipay-create-app.png
diff --git a/static/img/user-guide/shop/settings-payments-create-2.23.png b/docs/public/img/user-guide/shop/settings-payments-create-2.23.png
similarity index 100%
rename from static/img/user-guide/shop/settings-payments-create-2.23.png
rename to docs/public/img/user-guide/shop/settings-payments-create-2.23.png
diff --git a/static/img/user-guide/shop/settings-payments-stripe-1.png b/docs/public/img/user-guide/shop/settings-payments-stripe-1.png
similarity index 100%
rename from static/img/user-guide/shop/settings-payments-stripe-1.png
rename to docs/public/img/user-guide/shop/settings-payments-stripe-1.png
diff --git a/static/img/user-guide/shop/settings-payments-stripe-2.png b/docs/public/img/user-guide/shop/settings-payments-stripe-2.png
similarity index 100%
rename from static/img/user-guide/shop/settings-payments-stripe-2.png
rename to docs/public/img/user-guide/shop/settings-payments-stripe-2.png
diff --git a/static/img/user-guide/shop/settings-payments-stripe-3.png b/docs/public/img/user-guide/shop/settings-payments-stripe-3.png
similarity index 100%
rename from static/img/user-guide/shop/settings-payments-stripe-3.png
rename to docs/public/img/user-guide/shop/settings-payments-stripe-3.png
diff --git a/static/img/user-guide/shop/settings-payments-stripe-4.png b/docs/public/img/user-guide/shop/settings-payments-stripe-4.png
similarity index 100%
rename from static/img/user-guide/shop/settings-payments-stripe-4.png
rename to docs/public/img/user-guide/shop/settings-payments-stripe-4.png
diff --git a/static/img/user-guide/shop/settings-payments-stripe-5.png b/docs/public/img/user-guide/shop/settings-payments-stripe-5.png
similarity index 100%
rename from static/img/user-guide/shop/settings-payments-stripe-5.png
rename to docs/public/img/user-guide/shop/settings-payments-stripe-5.png
diff --git a/static/img/user-guide/shop/settings-payments-stripe-6.png b/docs/public/img/user-guide/shop/settings-payments-stripe-6.png
similarity index 100%
rename from static/img/user-guide/shop/settings-payments-stripe-6.png
rename to docs/public/img/user-guide/shop/settings-payments-stripe-6.png
diff --git a/static/img/user-guide/shop/settings-payments-zpayz-api.png b/docs/public/img/user-guide/shop/settings-payments-zpayz-api.png
similarity index 100%
rename from static/img/user-guide/shop/settings-payments-zpayz-api.png
rename to docs/public/img/user-guide/shop/settings-payments-zpayz-api.png
diff --git a/static/img/user-guide/shop/settings-payments-zpayz-channels.png b/docs/public/img/user-guide/shop/settings-payments-zpayz-channels.png
similarity index 100%
rename from static/img/user-guide/shop/settings-payments-zpayz-channels.png
rename to docs/public/img/user-guide/shop/settings-payments-zpayz-channels.png
diff --git a/static/img/user-guide/shop/settings-payments.png b/docs/public/img/user-guide/shop/settings-payments.png
similarity index 100%
rename from static/img/user-guide/shop/settings-payments.png
rename to docs/public/img/user-guide/shop/settings-payments.png
diff --git a/static/img/user-guide/shop/settings-sales-channels-create.png b/docs/public/img/user-guide/shop/settings-sales-channels-create.png
similarity index 100%
rename from static/img/user-guide/shop/settings-sales-channels-create.png
rename to docs/public/img/user-guide/shop/settings-sales-channels-create.png
diff --git a/static/img/user-guide/shop/settings-sales-channels.png b/docs/public/img/user-guide/shop/settings-sales-channels.png
similarity index 100%
rename from static/img/user-guide/shop/settings-sales-channels.png
rename to docs/public/img/user-guide/shop/settings-sales-channels.png
diff --git a/static/img/user-guide/shop/virtual-delivery-cdk-add.png b/docs/public/img/user-guide/shop/virtual-delivery-cdk-add.png
similarity index 100%
rename from static/img/user-guide/shop/virtual-delivery-cdk-add.png
rename to docs/public/img/user-guide/shop/virtual-delivery-cdk-add.png
diff --git a/static/img/user-guide/shop/virtual-delivery-cdk-config.png b/docs/public/img/user-guide/shop/virtual-delivery-cdk-config.png
similarity index 100%
rename from static/img/user-guide/shop/virtual-delivery-cdk-config.png
rename to docs/public/img/user-guide/shop/virtual-delivery-cdk-config.png
diff --git a/static/img/user-guide/shop/virtual-delivery-cdks.png b/docs/public/img/user-guide/shop/virtual-delivery-cdks.png
similarity index 100%
rename from static/img/user-guide/shop/virtual-delivery-cdks.png
rename to docs/public/img/user-guide/shop/virtual-delivery-cdks.png
diff --git a/static/img/user-guide/shop/virtual-delivery-console-order.png b/docs/public/img/user-guide/shop/virtual-delivery-console-order.png
similarity index 100%
rename from static/img/user-guide/shop/virtual-delivery-console-order.png
rename to docs/public/img/user-guide/shop/virtual-delivery-console-order.png
diff --git a/static/img/user-guide/shop/virtual-delivery-products.png b/docs/public/img/user-guide/shop/virtual-delivery-products.png
similarity index 100%
rename from static/img/user-guide/shop/virtual-delivery-products.png
rename to docs/public/img/user-guide/shop/virtual-delivery-products.png
diff --git a/static/img/user-guide/shop/virtual-delivery-resource-add.png b/docs/public/img/user-guide/shop/virtual-delivery-resource-add.png
similarity index 100%
rename from static/img/user-guide/shop/virtual-delivery-resource-add.png
rename to docs/public/img/user-guide/shop/virtual-delivery-resource-add.png
diff --git a/static/img/user-guide/shop/virtual-delivery-resource-config.png b/docs/public/img/user-guide/shop/virtual-delivery-resource-config.png
similarity index 100%
rename from static/img/user-guide/shop/virtual-delivery-resource-config.png
rename to docs/public/img/user-guide/shop/virtual-delivery-resource-config.png
diff --git a/static/img/user-guide/shop/virtual-delivery-uc-order-1.png b/docs/public/img/user-guide/shop/virtual-delivery-uc-order-1.png
similarity index 100%
rename from static/img/user-guide/shop/virtual-delivery-uc-order-1.png
rename to docs/public/img/user-guide/shop/virtual-delivery-uc-order-1.png
diff --git a/static/img/user-guide/shop/virtual-delivery-uc-order-2.png b/docs/public/img/user-guide/shop/virtual-delivery-uc-order-2.png
similarity index 100%
rename from static/img/user-guide/shop/virtual-delivery-uc-order-2.png
rename to docs/public/img/user-guide/shop/virtual-delivery-uc-order-2.png
diff --git a/static/img/user-guide/themes/theme-install.png b/docs/public/img/user-guide/themes/theme-install.png
similarity index 100%
rename from static/img/user-guide/themes/theme-install.png
rename to docs/public/img/user-guide/themes/theme-install.png
diff --git a/static/img/user-guide/themes/theme-setting.png b/docs/public/img/user-guide/themes/theme-setting.png
similarity index 100%
rename from static/img/user-guide/themes/theme-setting.png
rename to docs/public/img/user-guide/themes/theme-setting.png
diff --git a/static/img/user-guide/themes/theme-uninstall.png b/docs/public/img/user-guide/themes/theme-uninstall.png
similarity index 100%
rename from static/img/user-guide/themes/theme-uninstall.png
rename to docs/public/img/user-guide/themes/theme-uninstall.png
diff --git a/static/img/user-guide/users/auth-providers-2.22+.png b/docs/public/img/user-guide/users/auth-providers-2.22+.png
similarity index 100%
rename from static/img/user-guide/users/auth-providers-2.22+.png
rename to docs/public/img/user-guide/users/auth-providers-2.22+.png
diff --git a/static/img/user-guide/users/auth-providers-entry.png b/docs/public/img/user-guide/users/auth-providers-entry.png
similarity index 100%
rename from static/img/user-guide/users/auth-providers-entry.png
rename to docs/public/img/user-guide/users/auth-providers-entry.png
diff --git a/static/img/user-guide/users/role-creation.png b/docs/public/img/user-guide/users/role-creation.png
similarity index 100%
rename from static/img/user-guide/users/role-creation.png
rename to docs/public/img/user-guide/users/role-creation.png
diff --git a/static/img/user-guide/users/role-fork.png b/docs/public/img/user-guide/users/role-fork.png
similarity index 100%
rename from static/img/user-guide/users/role-fork.png
rename to docs/public/img/user-guide/users/role-fork.png
diff --git a/static/img/user-guide/users/role-management.png b/docs/public/img/user-guide/users/role-management.png
similarity index 100%
rename from static/img/user-guide/users/role-management.png
rename to docs/public/img/user-guide/users/role-management.png
diff --git a/static/img/user-guide/users/user-operate.png b/docs/public/img/user-guide/users/user-operate.png
similarity index 100%
rename from static/img/user-guide/users/user-operate.png
rename to docs/public/img/user-guide/users/user-operate.png
diff --git a/static/img/user-guide/users/user-setting-2.20+.png b/docs/public/img/user-guide/users/user-setting-2.20+.png
similarity index 100%
rename from static/img/user-guide/users/user-setting-2.20+.png
rename to docs/public/img/user-guide/users/user-setting-2.20+.png
diff --git a/docs/public/robots.txt b/docs/public/robots.txt
new file mode 100644
index 00000000..ef570dfd
--- /dev/null
+++ b/docs/public/robots.txt
@@ -0,0 +1,4 @@
+User-agent: *
+Allow: /
+
+Sitemap: https://docs.halo.run/sitemap.xml
\ No newline at end of file
diff --git a/docs/user-guide/activate.md b/docs/user-guide/activate.md
deleted file mode 100644
index bbefa883..00000000
--- a/docs/user-guide/activate.md
+++ /dev/null
@@ -1,95 +0,0 @@
----
-title: 许可证激活
-description: Halo 付费版许可证购买、部署与激活流程,含专业版与商城版说明。
----
-
-:::note
-此文档仅适用于 **[Halo 付费版](../getting-started/prepare.md#发行版本)**(专业版 / 商城版),在开始之前需要确保已经成功部署了 Halo 付费版。
-
-社区版无需进行许可证激活。
-:::
-
-## 购买许可证
-
-你可以在[凌霞软件](https://www.lxware.cn/halo?code=mcYhwMkn)官网购买 Halo 付费版的许可证,目前分为 Halo 专业版和 Halo 商城版,支持按月/按年订阅或者版本买断。
-
-在凌霞官网购买产品后,可以在 `个人中心` > `我的许可证` ,统一管理当前账户下的全部已购产品的许可证。
-
-
-
-## 部署 Halo 付费版
-
-可以查阅:
-
-- [使用 Docker Compose 部署](../getting-started/install/docker-compose.md)
-- [使用 1Panel 部署](../getting-started/install/1panel.md)
-- [使用 JAR 文件部署](../getting-started/install/jar-file.md)
-
-## 查看产品版本信息
-
-部署成功后,访问 `控制台` > `概览`,可以查看 Halo 版本信息,目前还处于未激活状态,需要按照后续步骤进行激活。
-
-
-
-## 查看已购产品许可证
-
-登录到凌霞官网的 [订单列表](https://lxware.cn/uc/cloud/order),点击已完成订单条目右侧的更多按钮,点击「许可证列表」,即可跳转至 `我的许可证` 列表,可以查看该订单所购产品的许可证。
-
-
-
-## 下载许可证
-
-在 `我的许可证`列表,点击许可证条目右侧的更多按钮,点击「详情」;
-
-
-
-在详情页下载许可证文件,同时支持兑换包含在产品许可证内的免赠权益。
-
-
-
-## 激活许可证
-
-进入 `控制台` > `概览`,导入下载的许可证文件。
-
-
-
-导入完成后,可以查看到更新的版本信息。许可证显示为「有效」即为激活成功,到此即可正常使用 Halo 付费版。
-
-
-
-## 取消激活许可证
-
-你可以随时在当前应用中取消激活许可证,取消后付费版功能将会受限。在许可证有效期内,许可证可被重新激活至其他设备中。
-
-
-
-## 使用增值权益
-
-> 随着 Halo 付费版订阅制的上线(2024-11-12),我们更新了获取增值权益即官方付费应用的方式。目前,用户可以直接通过 Halo 付费版许可证激活付费的插件和主题。
-> 此外,从 2024-11-28 开始,通过付费版激活应用将开放给全部 Halo 付费版用户,你可以重新在凌霞官网下载许可证并激活,然后就可以通过付费版许可证激活所有官方付费应用。需要保证 Halo 付费版版本为 2.20.4 以上,应用市场插件的版本为 1.9.0 以上。相关阅读:[Halo 付费版永久授权增值权益的升级说明](https://www.lxware.cn/archives/benefits-upgrade)
-
-在进行下面的步骤之前,请确保已经正常激活 Halo 付费版。
-
-### 查看和下载付费应用
-
-使用 Halo 付费版许可证激活后,就可以在内置的应用市场中查看所有可下载的付费应用。
-
-
-
-### 激活付费应用
-
-下载付费应用之后,即可在许可证管理中使用 Halo 付费版许可证进行激活。
-
-
-
-:::info[提示]
-如果你在激活前就启动了插件,那么在激活后可能需要重启插件才会生效。
-:::
-
-### Halo 付费版增值权益内容
-
-所有付费版可以在许可证有效期内使用所有 Halo 官方发行的付费应用,包括在许可证有效期内新增的付费应用,[点击查看最新官方付费应用列表](https://www.halo.run/store/apps?price-mode=ONE_TIME&sort=creationTimestamp%2Cdesc&tag=official)。
-
-查看当前许可证包含的付费应用可以在 `个人中心` > `我的许可证` 中进入具体 Halo 许可证的详情页面中查看,如下图:
-
-
diff --git a/docs/user-guide/app-store.md b/docs/user-guide/app-store.md
deleted file mode 100644
index 1f8c489b..00000000
--- a/docs/user-guide/app-store.md
+++ /dev/null
@@ -1,102 +0,0 @@
----
-title: 应用市场
-description: 在 Console 内置应用市场安装 Halo 主题与插件,含账号绑定与更新说明。
----
-
-为了方便使用者安装应用市场的主题和插件,我们提供了一个内置到 Console 的应用市场插件,可以更加方便在 Console 直接安装主题和插件。并且此插件从 Halo 2.10 开始已经预设到 Halo 中,无需手动安装。
-
-如果你使用了旧版本的 Halo,并且当前未安装应用市场插件,可以访问 [https://www.halo.run/store/apps/app-VYJbF](https://www.halo.run/store/apps/app-VYJbF) 手动下载并在 Console 的插件管理中安装。
-
-:::info[提示]
-这是目前唯一由 Halo 官方提供的服务,如果你当前的 Halo 网站处于无法访问公网的环境或者不需要此功能,你可以卸载或者停用此插件,不会影响网站的正常使用。
-:::
-
-## 应用市场页面
-
-这是一个为 Console 提供的独立的应用市场页面,此页面基本和 [https://www.halo.run/store/apps](https://www.halo.run/store/apps) 保持一致,但有所不同的是,你可以直接在这里查看所有的主题和插件并安装到你的 Halo 站点中。
-
-
-
-## 绑定 Halo 官网账号
-
-
-
-绑定方式:
-
-1. 进入应用市场插件的设置页面,切换到 **账号绑定** 选项卡。
-2. 根据提示访问 Halo 官网并注册账号,然后在 Halo 官网的[个人中心](https://www.halo.run/uc/profile?tab=pat)生成一个个人令牌并填写到下方的 **个人令牌** 输入框即可。
-
-## 安装/更新插件
-
-此插件还扩展了插件安装的界面,可以在安装插件时直接从应用市场获取。
-
-
-
-此外,如果插件是从应用市场安装的,后续插件更新之后也可以及时收到更新信息,并一键更新。
-
-
-
-## 安装/更新主题
-
-与插件一样,在主题管理中也可以直接从应用市场中获取,以及接收主题更新提示。
-
-
-
-
-
-## 付费应用激活
-
-部分付费主题和插件需要许可证激活才能够正常使用,在购买付费应用之后就会自动为你的 Halo 官网账号中生成对应的应用许可证,目前支持在线激活和离线激活两种方式。
-
-### 在线激活
-
-:::info
-目前在线激活支持两种方式:
-
-1. 通过 [Halo 官网账户](https://www.halo.run/):如果你是在 Halo 官网购买的付费应用,需要通过这种方式,并提前[绑定 Halo 官网账号](#绑定-halo-官网账号)
-2. 通过 [Halo 专业版/商城版许可证](../getting-started/prepare.md#发行版本):如果你购买了 [Halo 付费版](../getting-started/prepare.md#发行版本),可以选择这个选项来激活应用
-
-关于 Halo 专业版/商城版许可证的更多信息可查阅:[许可证激活 / 查看和下载付费应用](../user-guide/activate.md#查看和下载付费应用)
-:::
-
-在安装好需要许可证的付费插件或主题后,列表会显示一个许可证状态的图标,点击即可打开许可证激活的对话框,选择 **Halo 官网账户** 或 **Halo 专业版/商城版许可证** 并点击激活即可。
-
-
-
-
-
-除此之外,你也可以在 **许可证管理** 页面查看所有应用的许可证,并管理它们的状态。
-
-
-
-### 离线激活
-
-如果你的 Halo 网站无法访问公网,你可以选择离线激活的方式。
-
-1. 同样点击许可证状态的图标,打开许可证激活的对话框。
-
- 
-
-2. 激活方式选择许可证。
-
- 
-
-3. 点击 **复制离线许可证凭证** 按钮,然后点击 **去生成** 按钮,然后会跳转到 Halo 官网去生成离线激活码。
-4. 找到对应的许可证,选择 **生成离线许可证**。
-
- 
-
-5. 在 **生成离线许可证** 的对话框中,粘贴刚刚复制的离线许可证凭证,然后点击 **生成并复制** 按钮,然后会打开 **查看离线许可证** 对话框,你可以选择下载文件或者复制许可证。
-
- 
-
- 
-
-6. 回到 Halo 网站,粘贴刚刚复制的离线许可证,然后点击 **激活** 按钮即可。
-
- 
-
-其他注意事项:
-
-1. 目前同一个账号的许可证在同一时间只能在一个站点中使用,使用 Halo 配置中的 **外部访问地址(halo.external-url)** 和设备 id 做判定。
-2. 取消激活会删除许可证使用记录。
diff --git a/docs/user-guide/attachments.md b/docs/user-guide/attachments.md
deleted file mode 100644
index 51aaf8ef..00000000
--- a/docs/user-guide/attachments.md
+++ /dev/null
@@ -1,107 +0,0 @@
----
-title: 附件
-description: Halo 附件与存储策略:本地上传、策略管理及对象存储等扩展方式。
----
-
-## 存储策略
-
-为了能够更加灵活地管理附件的存储位置,Halo 提供了存储策略的概念。
-
-Halo 默认提供了本地的存储策略类型,你还可以通过安装插件的方式扩展其他的存储策略类型。一个存储策略包含了存储提供者,具体存储位置等使用该类型存储所必要的各种信息。
-
-:::info
-目前除了 Halo 内置的本地存储,在应用市场中也有三方的存储插件:[https://www.halo.run/store/apps?tag=storage](https://www.halo.run/store/apps?tag=storage)
-
-此外,如果你期望对接类似于阿里云、腾讯云的对象存储,可以考虑使用 [对象存储(Amazon S3 协议)](https://www.halo.run/store/apps/app-Qxhpp) 插件,此插件兼容市面上所有支持 S3 协议的对象存储厂商。
-:::
-
-你可以点击附件页面右上角的 `存储策略` 按钮对存储策略进行管理。
-
-### 新建存储策略
-
-点击存储策略列表右上方的 `+` 添加按钮即可新建一个存储策略。
-
-
-
-添加时首先需要选择一种存储策略类型,系统内置的存储策略为本地存储,图中的 `S3 对象存储` 由[对象存储(Amazon S3 协议)](https://www.halo.run/store/apps/app-Qxhpp)提供,此文档以本地存储为例。
-
-
-
-添加一个本地存储时,你需要输入名称及存储位置信息。其中的存储位置决定了使用该存储策略的附件,在服务器上的实际存储路径,路径规则为 `{Halo 工作目录}/attachments/{存储位置}`,其中的 Halo 工作目录由安装时指定的参数决定,默认为 `~/.halo2`。
-:::info
-默认的 Docker 部署方式,实际存储位置由挂载到 Halo 容器工作目录的服务器目录所决定。
-:::
-
-### 管理存储策略
-
-点击存储策略列表指定存储所在行后方的 `···` 更多操作按钮即可对该存储策略进行编辑或删除。
-
-
-
-:::info
-为了保护附件安全避免用户误操作,当存储策略下存在附件时,该存储策略不允许删除。如果确定要删除某个存储策略及该存储策略中的所有附件,可以先按照存储策略对附件进行筛选,先批量删除存储策略下的所有附件,再删除存储策略。
-:::
-
-## 附件分组
-
-通过附件分组功能可以方便地将同一类型、同一用途的附件划分到一个分组中,方便后续附件的管理和插件。
-
-附件所使用的存储策略决定了附件的实际存储位置和 URL 规则,而附件分组功能仅是逻辑上的归类划分,不会影响附件的存储位置及 URL。
-
-### 新建分组
-
-点击附件列表上方的 `添加分组` 按钮即可新建一个分组。
-
-
-
-### 删除分组
-
-点击附件列表上方指定分组上的 `···` 更多按钮,可以对分组进行重命名或删除操作。
-
-Halo 目前提供了两种分组删除策略:
-
-1. **删除并将附件移动至未分组**:分组被删将被删除,分组下的附件移动到未分组中。
-2. **删除并同时删除附件**:先删除下的所有附件后,再删除该分组。
-
- :::warning
- 当使用 `删除并同时删除附件` 方式时,分组下的所有附件会被同时删除且不可恢复、无法找回,请谨慎进行该操作。
- :::
-
-## 上传附件
-
-点击附件列表右上方的 `上传` 按钮即可上传新的附件到 Halo。
-
-
-
-1. **存储策略选择**:你可以选择需要使用的存储策略,为了方便,选择之后会在浏览器记住这个选项。
-2. **分组选择**:你可以选择需要上传到的分组,为了方便,选择之后会在浏览器记住这个选项。
-3. **上传区域**:同时支持拖拽文件、点击上传区域选择文件、粘贴文件。
-
-## 查看附件
-
-点击附件列表中的某一个附件即可查看该附件的详细信息。
-
-
-
-1. **预览区域**:目前支持图片、视频、音频的预览。
-2. **链接**:目前可以显示并复制链接、HTML 格式代码、Markdown 格式代码。
-
-## 删除附件
-
-目前有两种删除附件的方式,你可以选中一些附件进行批量删除或者点击指定附件所在行后方的 `···` 更多按钮,对单个附件进行删除操作。
-
-
-
-:::warning
-附件删除后不可恢复、无法找回,请谨慎进行该操作。
-:::
-
-## 移动附件
-
-
-
-与批量删除操作类似,你可以选中多个附件后在上方的批量操作按钮中选择 `移动` 操作,将所选附件移动到指定的分组中。
-
-:::info
-需要注意的是,目前移动附件只支持移动分组,不支持存储策略的移动。
-:::
diff --git a/docs/user-guide/backup.md b/docs/user-guide/backup.md
deleted file mode 100644
index ff50ee4f..00000000
--- a/docs/user-guide/backup.md
+++ /dev/null
@@ -1,78 +0,0 @@
----
-title: 备份与恢复
-description: Halo 控制台一键备份与恢复全站数据,含异步任务与商城版注意事项。
----
-
-从 Halo 2.8 开始,Halo 内置了备份和恢复的功能,可以在 Console 中一键备份和恢复完整的数据。
-
-## 备份
-
-:::warning[商城版注意事项]
-因为商城相关的功能数据存储结构不同,所以备份和恢复功能暂不支持商城相关的数据,建议直接备份数据库。
-
-所以如果你使用了 Halo 商城版的商城功能,备份文件不会包含商城相关的数据。
-:::
-
-在 Console 中,点击左侧菜单的 `备份`,进入备份页面。
-
-点击右上角的 `创建备份` 按钮,即可创建一个新的备份请求,需要注意的是,创建备份请求并不会立即开始备份,而是会在后台异步执行,因此需要等待一段时间才能看到备份的结果。
-
-
-
-备份中:
-
-
-
-备份完成:
-
-
-
-## 自动备份与同步
-
-为了保障数据的安全,Halo 提供了自动备份和同步的[备份增强插件](https://www.halo.run/store/apps/app-dHakX),可以定期将数据备份到本地并同步到云端。
-
-:::note
-此插件目前为 [Halo 付费版](../getting-started/prepare.md#发行版本) 专享插件。
-:::
-
-
-
-## 恢复
-
-:::info[在恢复前,需要了解以下几点:]
-
-1. 恢复不限制部署方式,也不限制数据库,也就是说新站点的部署方式和数据库类型可以和备份的站点不同。
-2. 恢复过程可能会持续较长时间,期间请勿刷新页面。
-3. 在恢复的过程中,虽然已有的数据不会被清理掉,但如果有冲突的数据将被覆盖。
-4. 恢复完成之后会提示停止运行 Halo,停止之后可能需要手动运行。
-:::
-
-在 Console 中,点击左侧菜单的 `备份`,进入备份页面,然后点击 `恢复` 选项卡即可进入恢复界面,阅读完注意事项之后点击 `开始恢复` 按钮即可显示备份文件上传界面。
-
-
-
-
-
-Halo 支持三种恢复方式:
-
-1. 上传备份文件:上传已有的备份文件进行恢复。
-2. 远程恢复:从远程 URL 下载备份文件进行恢复。
-3. 从备份文件恢复:支持从 [工作目录](../getting-started/prepare.md#工作目录) 的 backups 目录扫描备份文件,并选择文件进行恢复。
-
-:::info[提示]
-如果你的备份文件较大,推荐提前将备份文件上传到服务器,然后选择 `从备份文件恢复` 方式进行恢复,避免因为网络原因导致上传失败。
-:::
-
-使用 `上传备份文件` 方式进行恢复的操作示例:
-
-选择备份文件后,点击 `上传` 按钮即可开始上传备份文件,上传完成后会自动开始恢复。
-
-
-
-恢复完成,会提示重启 Halo,点击 `确定` 按钮即可重启 Halo。
-
-
-
-
-
-最后,建议去服务器检查 Halo 的运行状态,如果没有设置自动重启,需要手动重启。
diff --git a/docs/user-guide/common.md b/docs/user-guide/common.md
deleted file mode 100644
index 089d66b7..00000000
--- a/docs/user-guide/common.md
+++ /dev/null
@@ -1,73 +0,0 @@
----
-title: 基础说明
-description: Halo 建站入门:登录注册、控制台、角色分类与站点基础概念说明。
----
-Halo 作为一款好用又强大的开源建站工具,配合上不同的模板与插件,可以很好地帮助你构建你心中的理想站点。它可以是你公司的官方网站,可以是你的个人博客,也可以是团队共享的知识库,甚至可以是一个论坛、一个商城。
-
-为了更好地发挥出 Halo 的价值,这里有一些基本概念需要你进行了解。
-
-## 登录
-
-Halo 的统一登录入口为 `/login`。
-
-
-
-## 注册
-
-Halo 的注册地址为 `/signup`,需要注意的是,Halo 默认不会开启注册功能,需要在设置页面的 [用户设置](./settings.md#用户设置) 中手动开启。
-
-
-
-## 控制台
-
-Console 控制台是一个 Halo 站点的后台管理系统,只有具有权限的登录用户才可以正常使用控制台功能。你可以在控制台中管理站点中的文章、页面、附件等各种内容,调整站点使用的主题或各种设置,访问地址为 `/console`。
-
-
-
-1. **全局搜索框**:点击或通过快捷键 `Ctrl+K` 可以呼出全局搜索框,输入关键字可以在所有文章、页面、附件、用户及设置项等所有内容中进行全局搜索。
-2. **侧边导航栏**:对控制台提供的功能进行导航,点击导航栏条目会在页面右侧显示对应功能页面。安装某些插件可能会扩展导航栏条目。
-3. **用户信息展示及操作**:展示当前登录用户的头像、名称及角色等信息,`···` 中提供更多用户相关操作。
-4. **功能页面标题**:当前所在的功能页面标题。
-5. **功能页面操作区域**:当前所在功能页面提供的功能操作按钮。
-6. **功能页面主体**:当前所在功能页面的主体显示区域,显示内容及形式视具体页面功能而定。
-
-## 个人中心
-
-从 Halo 2.11 开始,除了 Console 管理控制台,我们新增加了个人中心,用于管理和用户相关的所有功能。有了个人中心之后,也可以让网站有更多的使用和开发场景,个人中心独立访问入口为 `/uc`。
-
-## 文章
-
-文章是 Halo 中的核心概念之一。一篇文章主要由纯文本的文章标题和富文本的文章内容构成,除此之外你还可以为文章设置所属分类、添加标签、设置封面图等。
-
-在不同的站点类型不同的应用场景中,文章的实际含义也会有所区别,它可以代表一则公司新闻、一篇博客或者产品文档中的某一章节。
-
-## 页面
-
-页面与文章类似,同样包含页面标题和富文本形式的页面内容。与文章不同的是页面无法设置所属分类和标签信息,一般用于站点中单一展示功能的页面,例如常见的站点关于页面、联系我们页面等。
-
-## 分类
-
-通过分类可以更好地组织管理文章。分类之间存在层级关系,一个父分类下可包含多个子分类。一篇文章可以同时属于多个分类。
-
-## 标签
-
-标签可以用于为文章添加特定标记,与分类不同的是标签之间没有层级关系。一篇文章也可以同时添加多个标签。
-
-## 附件
-
-由用户上传的,供文章、主题设置等各个地方引用的文件。多用于文章配图、主题配图、用户头像等场景。
-
-## 主题
-
-包含了各种站点页面模板的资源包。用户访问 Halo 站点浏览到的内容及样式,由 Halo 管理端所配置使用的主题所决定。
-
-## 插件
-
-用于扩展 Halo 功能的软件包。插件独立于 Halo 核心应用,可以单独安装、升级、卸载。
-
-:::info
-目前有两个官方渠道可以获取主题和插件:
-
-- 应用市场:[https://www.halo.run/store/apps](https://www.halo.run/store/apps)
-- Awesome Halo:[https://github.com/halo-sigs/awesome-halo](https://github.com/halo-sigs/awesome-halo)
-:::
diff --git a/docs/user-guide/faq.md b/docs/user-guide/faq.md
deleted file mode 100644
index b4c431db..00000000
--- a/docs/user-guide/faq.md
+++ /dev/null
@@ -1,139 +0,0 @@
----
-title: 常见问题
-description: Halo 使用常见问题:产品定位、数据库结构、找回密码与故障排查。
----
-
-### Halo 是什么?
-
-**Halo** [ˈheɪloʊ],是一款好用又强大的[开源建站工具](https://github.com/halo-dev/halo),配合上不同的模板与插件,可以很好地帮助你构建你心中的理想站点。它可以是你公司的官方网站,可以是你的个人博客,也可以是团队共享的知识库,甚至可以是一个论坛、一个商城。
-
-### 为什么 Halo 启动之后,数据库只有一张表?
-
-从 Halo 2.0 开始,为了方便插件扩展,能够方便的持久化数据,我们设计了一种自定义模型的方案,详情可参考 RFC:[自定义模型设计
-](https://github.com/halo-dev/rfcs/tree/main/extension)
-
-### 忘记密码怎么办?
-
-1. 站点管理员已经配置好邮件通知,并且用户已完成电子邮箱验证时,可以点击登录页面的 `找回密码` 链接,填写邮箱后,系统将向该邮箱发送密码重置链接,用户可通过该链接重置密码;
-2. 如果不满足上述条件,或者密码重置邮件不能发送成功,请直接联系具有用户管理权限的管理员进行密码重置操作,管理员可参考文档[修改用户密码](./users#修改用户密码)部分修改指定用户的密码;
-3. 如果系统没有任何一个能够正常登录控制台且具有用户管理权限的管理员账号,则用户需要通过更新数据库记录的方式重置指定用户的密码。
-
- :::info[参考 SQL 语句]
-
- 通过以下 SQL 语句,可以将 `admin` 用户的密码重置为 `password`,密码重置后请尽快修改为更加安全的密码。
-
- **PostgreSQL** 数据库
-
- ```sql
- UPDATE
- extensions
- SET
- data = convert_to(
- jsonb_set(
- convert_from(data, 'UTF-8') :: jsonb,
- '{spec,password}',
- '"{bcrypt}$2a$10$7tBEL1sNQSr/uWtLZHLmCeA9IGx0I9/Jz//3Uwo/anIm9xdxv.xrO"'
- ) :: text,
- 'UTF-8'
- )
- WHERE
- name LIKE '/registry/users/admin';
- ```
-
- **MySQL** 数据库
-
- ```sql
- UPDATE
- extensions
- SET
- data = JSON_SET(
- CONVERT(data USING utf8mb4),
- '$.spec.password',
- '{bcrypt}$2a$10$7tBEL1sNQSr/uWtLZHLmCeA9IGx0I9/Jz//3Uwo/anIm9xdxv.xrO'
- )
- WHERE
- name LIKE '/registry/users/admin';
- ```
-
- :::
-
-### 附件上传提示 `413 Request Entity Too Large` 如何解决?
-
-这可能是由于 Nginx 的上传大小限制所导致的。可以在 Nginx 的配置文件下的 server 节点加入 `client_max_body_size 1024m;` 即可解决,如果 1024m 还不够,请自行断定,详细配置参考如下:
-
-```nginx {4}
-server {
- listen 80;
- server_name localhost;
- client_max_body_size 1024m;
-}
-```
-
-### 网站加载速度慢,是什么问题导致的?
-
-导致网站加载速度慢的原因有很多,建议打开浏览器的 Developer Tools 查看具体是哪个请求时间过长,然后进行针对性的优化。这里提供一些可能的原因:
-
-1. 服务器带宽过小,很多厂商提供的最低带宽一般是 1M。
-2. 服务器地区过远,这个需要自行取舍。
-3. 网站上的图片过多或者体积过大,可以尝试压缩图片,或者参考 [优雅的让 Halo 支持 webp 图片输出](https://www.halo.run/archives/halo-and-webp) 的教程配置一个 Webp 图片的服务。
-4. 部分主题的静态资源可能是由公共 CDN 提供的,当这个 CDN 不稳定的时候可能会导致加载变慢。
-
-一些提升网站加载速度的建议:
-
-1. 尽量不要选择 1M 带宽的服务器,可以根据自己的预算适当提升带宽。一般 3M 以上即可。
-2. 尽量购买网络质量较好的服务器,或者较近区域的服务器。
-3. 如果一定需要放大量的图片,建议先无损压缩一下再使用。
-4. 如上所说,可以自行搭建一个 Webp 图片转换的服务,参考 [优雅的让 Halo 支持 webp 图片输出](https://www.halo.run/archives/halo-and-webp)。
-5. 如果网站的静态资源加载慢是由三方 CDN 导致的,可以自行修改主题。
-6. 可以使用全站 CDN 加速的方案。
-
-### 如何在一台服务器上部署多个站点?
-
-使用 Docker 创建多个容器,因为使用 Docker 可以将内部的工作目录映射到宿主机的任何目录,可以参考以下创建容器的方式:
-
- ```bash
- # 第一个 Halo 容器
- docker run \
- -it -d \
- --name halo-1 \
- -p 8090:8090 \
- -v ~/.halo2:/root/.halo2 \
- registry.fit2cloud.com/halo/halo-pro:2.26 \
-
- # 第二个 Halo 容器
- docker run \
- -it -d \
- --name halo-2 \
- -p 8091:8090 \
- -v ~/.halo2_2:/root/.halo2 \
- registry.fit2cloud.com/halo/halo-pro:2.26 \
- ```
-
-更多 Docker 相关的教程请参考:[使用 Docker 部署 Halo](../getting-started/install/docker.md)
-
-### 如何查看运行日志?
-
-1. 可以在 Console 端的概览页面下载最近的日志文件。
-2. 使用 docker logs 命令进行查看。
-
- ```bash
- # '-f' 滚动更新日志
- # '-n 200' 从倒数第 200 行开始查看
- # 更多帮助可以查看 'docker logs --help'
- docker logs -f halo -n 200
- ```
-
-### 前台样式丢失,如何解决?
-
-前台样式不正常或者丢失有很多种问题的可能,最快捷定位问题的方式就是打开浏览器控制台查看具体请求的错误,以下列出了部分导致出现该问题的常见原因:
-
-1. `外部访问地址` 与实际访问地址不一致。也可能是开启了 https 之后,无法正常加载 http 资源,将 [外部访问地址](../getting-started/install/config.md#halo-独有配置) 改为 https 协议即可。
-2. Nginx 配置了静态资源缓存,但没有设置 `proxy_pass`,参考如下:
-
- ```nginx
- location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
- proxy_pass http://halo;
- expires 30d;
- access_log off;
- }
- ```
diff --git a/docs/user-guide/pages.md b/docs/user-guide/pages.md
deleted file mode 100644
index ebca3dbe..00000000
--- a/docs/user-guide/pages.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-title: 页面
-description: Halo 自定义页面:关于页、联系页等独立页面与别名 URL 访问说明。
----
-
-页面与文章类似,同样包含页面标题和富文本形式的页面内容。与文章不同的是页面无法设置所属分类和标签信息,一般用于站点中单一展示功能的页面,例如常见的站点关于页面、联系我们页面等。
-
-自定义页面的访问链接为 `/{slug}` 其中 `slug` 为自定义页面的别名。
-
-对于如下的关于页面,便可以通过 `/about` 地址进行访问。
-
-
-
-:::info
-自定义页面默认使用主题端的 `page.html` 模板进行渲染,如果主题中提供了针对自定义页面的其他模板,用户可以通过修改自定义页面高级设置中的自定义模板设置进行使用。
-:::
-
-#### 页面操作
-
-对于页面的新建、设置、发布及删除等操作,与文章操作基本一致,具体操作请参考[《用户指南 - 文章》](./posts.md)章节,此处不再赘述。
diff --git a/docs/user-guide/plugins.md b/docs/user-guide/plugins.md
deleted file mode 100644
index 31c8c2b9..00000000
--- a/docs/user-guide/plugins.md
+++ /dev/null
@@ -1,103 +0,0 @@
----
-title: 插件
-description: Halo 插件安装、启用与卸载,及应用市场等获取渠道的管理指南。
----
-
-插件是用于扩展 Halo 功能的软件包。插件独立于 Halo 核心应用,可以单独安装、升级、卸载。
-
-本文档仅对插件的基本管理功能进行说明,关于插件的详细使用说明请参考对应插件的文档。
-
-:::info
-目前有两个官方渠道可以获取插件:
-
-- 应用市场:[https://www.halo.run/store/apps](https://www.halo.run/store/apps)
-- Awesome Halo:[https://github.com/halo-sigs/awesome-halo](https://github.com/halo-sigs/awesome-halo)
-
-:::
-
-## 安装插件
-
-进入插件管理页面,点击右上角的 `安装` 按钮即可打开插件安装的对话框。
-
-### 从内置应用市场安装(推荐)
-
-从 Halo 2.10 开始,内置了应用市场插件,可以更加方便在 Console 直接安装应用市场的插件。
-
-
-
-:::info
-更多关于内置应用市场的使用说明可查阅:[应用市场](./app-store.md)
-:::
-
-### 本地上传安装
-
-
-
-插件安装成功后,便会出现在插件管理的列表中。
-
-:::info[注意]
-从非 Halo 官网应用市场安装插件时,请务必注意其安全性。
-:::
-
-### 远程下载安装
-
-同样,在安装插件的对话框中,切换到远程下载选项卡,输入插件的下载地址,点击 `下载` 按钮即可开始下载插件。
-
-:::info[注意]
-从非 Halo 官网应用市场安装插件时,请务必注意其安全性。
-:::
-
-## 插件设置
-
-点击插件列表中的某个插件进入插件详情页面。与主题设置类似,插件详情页面默认显示出了当前插件的详细信息,在详细信息标签页后方的标签页,即为插件提供的相关设置。不同的插件提供的设置项各不相同,设置项的详细说明请参考对应插件的文档。
-
-
-
-此处以 `Umami` 插件为例。
-
-:::info
-你可以点击插件列表指定插件所在行后方的 `···` 更多操作按钮,选择其中的 `重置` 选项将插件提供的设置项恢复为默认值。
-:::
-
-## 启用/禁用插件
-
-点击插件列表或插件详情页中的启用/禁用开关,即可切换插件的启用禁用状态。
-
-
-
-## 升级插件
-
-如果当前使用了内置的应用市场插件,在插件更新后会在插件列表中显示更新提示,点击 **立即更新** 按钮即可。
-
-手动升级可以点击具体插件的 `···` 更多操作按钮,选择其中的 `升级` 选项即可打开升级插件的对话框。
-
-## 重置
-
-如果你需要清空所有插件配置并重新配置插件,你可以通过 `···` 更多操作中的 `重置` 选项将主题提供的设置项恢复为默认值。
-
-## 卸载插件
-
-点击插件列表指定插件所在行后方的 `···` 更多操作按钮,选择其中的 `卸载` 选项即可对当前插件进行卸载。
-
-
-
-:::info
-目前提供了 `卸载` 及 `卸载并删除配置` 两种卸载方式。
-仅卸载插件时插件的配置信息会进行保留,当重新安装插件后还可以使用之前已保存的配置。
-:::
-
-## 扩展配置
-
-在 Halo 的插件机制中,我们使用扩展点来实现插件与 Halo 核心应用的交互,插件可以通过扩展点来扩展 Halo 的功能。这就意味着插件可能会实现和 Halo 或者其他插件相同的扩展点,这时候就需要对扩展点进行管理。
-
-以搜索引擎为例,Halo 默认提供了 `Lucence` 搜索引擎和对应的扩展点,那么用户在安装了其他搜索引擎插件之后就需要在这里进行选择,否则 Halo 无法确定使用哪个搜索引擎。
-
-
-
-进入插件管理,点击右上角的 `扩展配置` 按钮即可进入扩展配置页面。
-
-
-
-这里以搜索引擎为例,安装了 `Meilisearch` 插件之后就可以在这里选择启用这个插件的搜索引擎。
-
-更多关于扩展点的说明可以查阅:[插件开发 / 扩展点和定制化 / 扩展点](../developer-guide/plugin/extension-points/server/index.md)
diff --git a/docs/user-guide/posts.md b/docs/user-guide/posts.md
deleted file mode 100644
index f8110d41..00000000
--- a/docs/user-guide/posts.md
+++ /dev/null
@@ -1,140 +0,0 @@
----
-title: 文章
-description: Halo 文章编辑发布:编辑器、分类标签、定时发布与回收站等操作。
----
-## 新建文章
-
-目前你可以通过以下两种方式新建一篇文章:
-
-1. 点击仪表盘快捷访问组件中的创建文章
-2. 通过左侧导航栏进入文章页面,点击右上角的新建按钮
-
-进入到如下页面后,你就可以开始编辑自己的文章内容了:
-
-
-
-1. **编辑器切换**:如果安装了其他的编辑器插件,那么就可以在这个位置选择所需的编辑器。
-2. **预览**:点击预览按钮可以在未发布的时候预览文章的渲染效果。
-3. **保存**:仅保存文章内容,但是不发布。
-4. **发布**:保存并发布文章内容。
-
-:::info
-Halo 支持通过插件来拓展文章编辑器,目前除了 Halo 内置的编辑器,应用市场中还有其他的编辑器可用:[https://www.halo.run/store/apps?tag=editor](https://www.halo.run/store/apps?tag=editor)
-:::
-
-## 文章设置
-
-当你想修改一篇文章的标题、所属分类等信息时,你可以通过以下方式进行操作:
-
-1. 点击文章列表指定文章所在行的 `···` 更多操作按钮,选择设置。
-2. 在文章列表点击指定文章的标题进入文章编辑页面,点击页面右上角的设置按钮。
-
-
-
-### 设置说明
-
-- **标题**:用于在主题端显示的文章标题。
-- **别名**:通常用于生成文章访问地址,如:`/archives/{slug}`。
-- **分类目录**:文章所属分类,方便用户区分文章类型进行针对性浏览,一篇文章可以属于多个分类。
-- **标签**:文章添加的标签,方便用户更进一步标识文章信息,一篇文章可以添加多个标签。
-- **自动生成摘要**:文章摘要是对文章内容的概括性描述。
- - **是**:系统根据文章内容,自动生成一段摘要。
- - **否**:用户自行输入文章摘要文本。
-- **自定义摘要**:用户自行输入的文章摘要文本,仅当 `自动生成摘要` 为否时生效。
-- **允许评论**:是否允许用户在主题端浏览文章时对该文章发起评论。
-- **是否置顶**:文章是否排序在文章列表的最顶部。
-- **可见性**:访问站点主题端时,哪些人可以看到这篇文章。
- - **公开**:所有用户均可看到这篇文章,包括未登录用户。
- - **私有**:仅文章作者可以看到这篇文章。
-- **发表时间**:手动指定文章的发表时间,未指定时以实际发布时间为准。
-- **自定义模板**:自定义文章的渲染模板,由主题提供支持。
-- **封面图**:文章封面图设置,需要主题支持该功能。
-- **元数据**:供主题、插件使用的额外数据信息。比如主题在文章页面提供了一个下载按钮,那么就可以通过元数据来指定下载地址。
-
-## 发布及取消发布
-
-对于已发布的文章,默认可以通过站点地址进行公开访问,用户可以在文章高级设置中修改可见性。
-
-你可以在上文介绍的文章设置对话框中,修改文章的发布状态。
-
-在文章设置对话框中,若文章当前处于已发布状态,下方会显示取消发布按钮。若文章处于未发布状态,下方则不会显示发布按钮。
-
-## 删除文章
-
-当你不再需要一篇文章时,你可以通过以下方式删除该文章:
-
-1. 点击文章列表指定文章所在行的 `···` 更多操作按钮,选择删除。
-2. 勾选文章列表中的全选/多选框,选中一篇或多篇文章进行批量删除。
-
-文章删除后会进入回收站中,点击右上角的回收站按钮进入回收站。在回收站中,你可以永久删除或恢复指定的文章。
-
-:::warning
-文章永久删除后将从数据库删除该记录,后续无法再恢复找回。
-:::
-
-## 文章分类管理
-
-通过分类可以更好地组织管理文章。分类之间存在层级关系,一个父分类下可包含多个子分类。一篇文章可以同时属于多个分类。
-
-在文章管理页面,点击页面右上角的 `分类` 按钮即可进入分类管理页面。
-
-### 新建文章分类
-
-点击分类管理页面右上角的 `新建` 按钮即可新建一个分类。
-
-
-
-
-#### 设置说明
-
-- **名称**:用于在主题端显示的分类名称。
-- **别名**:通常用于生成分类归档页面的访问地址。默认路径规则为 `/categories/{slug}`,其中 `slug` 为分类别名,访问该地址即可浏览该分类下的所有文章。分类页路由前缀可[在设置中修改](./settings#主题路由设置)。
-- **自定义模板**:自定义分类归档页面的渲染模板,由主题提供支持。
-- **自定义文章模板**:自定义当前分类下所有文章的渲染模板,由主题提供支持。
-- **封面图**:分类封面图设置,需要主题支持该功能。
-- **在列表中隐藏**:开启此选项后,此分类和其下子分类,以及其下文章将不会显示在前台的列表中,需要主动访问分类归档页面,此功能仅对第一级目录生效。
-- **阻止文章级联查询**:阻止父级分类在级联文章查询中包含此分类及其子分类。
-- **描述**:关于该文章分类的更多描述信息。
-- **元数据**:供主题、插件使用的额外数据信息。例如部分主题期望使用不同的颜色对分类进行区分,便可以使用该功能为分类增加颜色相关的元数据。
-
-### 调整分类层级
-
-分类之间存在层级关系,一个父分类下可包含多个子分类。
-
-你可以按住分类前的图标,通过拖拽来调整分类间的层级关系和顺序。
-
-
-
-### 修改/删除分类
-
-点击指定分类所在行后方的 `···` 更多操作按钮,可以对文章分类进行修改或删除。
-
-:::warning
-文章分类删除后,对应文章的关联将被解除,且该操作不可恢复,请谨慎进行该操作。
-:::
-
-## 文章标签管理
-
-标签可以用于为文章添加特定标记,与分类不同的是标签之间没有层级关系。一篇文章也可以同时添加多个标签。
-
-### 新建文章标签
-
-点击文章标签页面右上角的 `新建` 按钮即可新建一个标签。
-
-
-
-#### 设置说明
-
-- **名称**:用于在主题端显示的标签名称。
-- **别名**:通常用于生成标签归档页面的访问地址。默认路径规则为 `/tags/{slug}`,其中 `slug` 为标签别名,访问该地址即可浏览具有该标签的所有文章。标签页路由前缀可[在设置中修改](./settings#主题路由设置)。
-- **颜色**:用于在控制台及主题端显示的标签颜色,主题端显示颜色需要主题支持该功能。
-- **封面图**:标签封面图设置,需要主题支持该功能。
-- **元数据**:供主题、插件使用的额外数据信息。
-
-### 修改/删除标签
-
-在列表模式下,点击指定标签所在行后方的 `···` 更多操作按钮,可以对文章标签进行修改或删除。
-
-:::warning
-文章标签删除后,对应文章的关联将被解除,且该操作不可恢复,请谨慎进行该操作。
-:::
diff --git a/docs/user-guide/settings.md b/docs/user-guide/settings.md
deleted file mode 100644
index 5ee9c46e..00000000
--- a/docs/user-guide/settings.md
+++ /dev/null
@@ -1,240 +0,0 @@
----
-title: 站点设置
-description: Halo 站点设置:基本信息、文章展示、评论、用户与 SEO 等控制台项。
----
-
-## 基本设置
-
-Halo 提供了以下站点基本信息设置:
-
-- **站点标题**
-- **站点副标题**
-- **Logo**
-- **Favicon**
-- **首选语言**
-
-在控制台设置完成后,主题端可以通过特定的表达式获取到这些信息并且在对应的位置进行展示。具体是否读取使用这些配置、在哪些位置显示这些信息由使用的不同主题而决定。
-
-以 Halo 2.0 的[默认主题 Earth](https://github.com/halo-dev/theme-earth) 为例,这些设置信息将在如下位置进行展示。
-
-
-
-## 文章设置
-
-针对主题端的文章展示,Halo 提供了以下设置项:
-
-- **文章列表显示条数**:首页的文章显示条数。
-- **归档页文章显示条数**:归档页面(\/archives)的文章显示条数。
-- **分类页文章显示条数**:分类归档页面(\/categories\/\{slug\})的文章显示条数。
-- **标签页文章显示条数**:标签归档页面(\/tags\/\{slug\})的文章显示条数。
-- **别名生成策略**:
- - 根据标题:自动根据文章标题生成,比如文章标题为 `Hello Halo`,那么别名将生成为 `hello-halo`
- - 时间戳:使用当前时间的时间戳作为标题
- - Short UUID:生成类似于 `BT5kIgrb` 的别名
- - UUID:生成类似于 `4f662408-ed90-470b-9ed1-7fdc0283631b` 的别名
-- **附件存储策略**:在编辑器中上传图片时的附件存储策略
- - 已经在 Halo 2.22 中标记为过时,后续请使用 [附件设置](#附件设置) 代替
-- **附件存储组**:在编辑器中上传图片时的附件分组
- - 已经在 Halo 2.22 中标记为过时,后续请使用 [附件设置](#附件设置) 代替
-
-## SEO 设置
-
-针对站点的 SEO(搜索引擎优化)需求,Halo 提供了以下设置项:
-
-- **屏蔽搜索引擎**:配置后会在所有页面 HTML 源码的 head 部分添加:
-
- ```html
-
- ```
-
- :::info
- 需要注意的是,并不是所有搜索引擎都会遵守这个规则。
- :::
-
-- **站点关键词**:格式为以 `,` 分隔的关键词列表,配置后会在所有页面 HTML 源码的 head 部分添加:
-
- ```html
-
- ```
-
- :::warning[注意]
- 目前主流的搜索引擎(如 Google、Bing、百度搜索等)已经不再使用该标签作为关键词的参考,因此该设置项的作用已经不大,未来我们也可能会移除该设置项。
- :::
-
-- **站点描述**:配置后会在所有页面 HTML 源码的 head 部分添加:
-
- ```html
-
- ```
-
-## 用户设置
-
-- **开放注册**:是否允许访客注册,勾选之后在登录页面会显示注册入口。
-- **注册需验证邮箱**:开启之后,用户注册时必须要经过邮箱验证,需要配置好 [邮件通知](#通知设置)。
-- **保留用户名**:设置之后这些用户名将无法被其他用户注册。
-- **默认角色**:新注册用户的默认角色。
-- **注册时所需协议**:选择注册时需要用户阅读并同意的自定义页面,例如用户协议、隐私政策等。
-- **头像存储位置**:用户上传头像的存储策略。
- - 已经在 Halo 2.22 中标记为过时,后续请使用 [附件设置](#附件设置) 代替
-- **个人中心附件存储位置**:用户在个人中心端上传附件时的默认存储策略,需要用户包含上传附件的权限。
- - 已经在 Halo 2.22 中标记为过时,后续请使用 [附件设置](#附件设置) 代替
-
-### 注册协议页面
-
-开启 **开放注册** 后,可以通过 **注册时所需协议** 选择一个或多个自定义页面作为注册协议。保存后,注册页面会显示 `我已阅读并同意` 勾选项,并将已选择的页面显示为可点击链接。用户必须勾选同意后才能提交注册。
-
-从 Halo 2.25.0 开始,新安装站点会在初始化时自动创建 **用户协议** 和 **隐私政策** 两个自定义页面,并默认将它们配置为注册时所需协议。
-
-:::warning[注意]
-自动创建的协议页面只包含占位内容。正式开放注册前,请进入 [页面](./pages.md) 管理并替换为你站点实际使用的用户协议、隐私政策或其他合规说明。
-:::
-
-如果不需要在注册时要求用户同意协议,可以清空 **注册时所需协议** 并保存设置。
-
-## 附件设置
-
-- **管理端附件配置**:为管理端设置附件上传默认的存储策略和分组,通常用于直接上传附件的场景,比如在文章编辑器中粘贴上传。
-- **个人中心附件配置**:为个人中心设置附件上传默认的存储策略和分组,如果你的网站允许部分用户在个人中心创建文章,**那么建议单独创建一个专门的存储策略,并限制文件格式和大小**。
-- **头像附件配置**:用户上传头像的存储策略配置,**建议单独创建存储策略并限制仅允许上传图片**。
-
-## 评论设置
-
-针对站点的评论功能,Halo 提供了以下设置项:
-
-- **启用评论**:全局评论功能开关配置,修改后影响所有文章、页面的评论功能。
-- **新评论审核**:新增的评论是否需要在控制台进行审核,审核通过后其他访问者才能看到该条评论。
-- **仅允许注册用户评论**:开启后只有登录用户才能添加评论,关闭后匿名(未登录)的访客也可以通过自行填写昵称、邮箱、网址等信息进行评论。
-
-## 主题路由设置
-
-针对访问站点各种类型页面的 URL 生成规则,Halo 提供了以下主题路由设置项:
-
-- **分类页路由前缀**:定位到分类列表页面以及分类归档页面。
- - 默认的分类列表页面 URL 规则前缀为 `/categories`
- - 默认的分类归档页面 URL 规则前缀为 `/categories/{slug}`
-- **标签页路由前缀**:定位到标签列表页面以及标签归档页面。
- - 默认的标签列表页面 URL 规则前缀为 `/tags`
- - 默认的标签归档页面 URL 规则前缀为 `/tags/{slug}`
-- **归档页路由前缀**:定位到文章归档页面的 URL 规则前缀,默认为 `/archives`。
-- **文章详情页访问规则**:定位到具体文章详情页面的 URL 规则前缀,默认为 `/archives/{slug}` ,用户可从以下路径规则进行选择:
- - `/archives/{slug}`
- - `/archives/{name}`
- - `/?p={name}`
- - `/?p={slug}`
- - `/?p={slug}`
- - `/{year}/{slug}`
- - `/{year}/{month}/{slug}`
- - `/{year}/{month}/{day}/{slug}`
-
- :::info[变量说明]
- - `slug`:文章别名
- - `name`:文章 `metadata.name` 字段值
- - `year`:四位数格式的文章发布年份
- - `month`:两位数格式的文章发布月份
- - `day`:两位数格式的文章发布日
- :::
-
-## 代码注入
-
-你可以使用代码注入功能,在特定类型的页面中注入额外的代码。你可以通过该功能覆盖或补充部分主题 CSS 样式,或者引入额外的 JavaScript 脚本扩展主题端功能。
-
-- **全局 head 标签**:该代码将会被注入到所有页面的 head 标签中。
-- **内容页 head 标签**:该代码将会被注入到文章、页面详情页的 head 标签中。
-- **页脚**:该代码将会被注入到所有页面的页脚中。
-
-## 品牌信息
-
-:::note
-限 [Halo 付费版](../getting-started/prepare.md#发行版本) 可用。
-:::
-
-
-
-
-
-- **登录页 Logo**:登录、注册等页面的 Logo 设置,如果不填写将默认使用 Halo 的标志。
-- **登录页 Logo 大小**:用于调整登录页面的 Logo 大小。
-- **控制台 Logo**:Console 控制台、UC 个人中心的 Logo 设置,如果不填写将默认使用 Halo 的标志。
-- **控制台 Logo 大小**:用于调整控制台的 Logo 大小。
-- **显示控制台页脚信息**:是否显示 Console 控制台和 UC 个人中心底部的版权信息。
-- **自定义页脚信息**:如果勾选了 **显示控制台页脚信息**,可以自定义底部的版权信息,支持 HTML,如果不填写将使用默认的 Halo 版权信息。
-
-## 通知设置
-
-从 2.10.0 版本开始,Halo 提供了 **通知** 功能,当有新的评论、留言、回复等事件发生时,Halo 会通过配置的方式通知站长或者相关用户。同时,个人中心配置的电子邮箱也会作为通知的接收邮箱。
-
-### 邮件通知
-
-- **启用邮件通知器**:开启后,当有新的评论、留言、回复等事件发生时,Halo 会通过 **邮件** 的方式通知站长或者相关用户。
-- **用户名**:你需要在此处填写你的 **邮箱账号**。
-- **密码**:你需要在此处填写你的 **邮箱密码** 或相关的 **授权码**,具体请参考你所使用邮箱的相关说明。
-- **显示名称**:你需要在此处填写你的 **邮箱显示名称**,该名称将会作为邮件发送者的名称显示。
-- **SMTP 服务器地址**:你需要在此处填写你的 **SMTP 服务器地址**,具体请参考你所使用邮箱的相关说明。
-- **端口号**:你需要在此处填写你的 **SMTP 服务器端口号**,具体请参考你所使用邮箱的相关说明。
-- **加密方式**:你需要在此处选择你的 **SMTP 服务器加密方式**,具体请参考你所使用邮箱的相关说明。
-
-> 常见邮箱服务商的文档如下:
->
-> - [QQ 邮箱](https://service.mail.qq.com/detail/0/310)
-> - [163 邮箱](https://help.mail.163.com/faqDetail.do?code=d7a5dc8471cd0c0e8b4b8f4f8e49998b374173cfe9171305fa1ce630d7f67ac2a5feb28b66796d3b)
-> - [Gmail](https://support.google.com/mail/answer/7104828?hl=zh-Hans)
-> - [阿里云企业邮箱](https://help.aliyun.com/document_detail/36687.html)
-> - [腾讯企业邮箱](https://open.work.weixin.qq.com/help2/pc/19870)
-
-### 短信通知
-
-:::note
-限 [Halo 付费版](../getting-started/prepare.md#发行版本) 可用。
-:::
-
-目前短信通知在 Halo 中基本只作为用户登录时发送验证码使用,以下是配置说明:
-
-- 提供商 (腾讯云/阿里云/UCloud):目前仅支持腾讯云、阿里云、UCloud 短信服务中的国内短信服务,即仅能向中国大陆手机号码发送短信
-- 超时时间:短信在系统中记录的超时时间,超过当前时间后系统会判断已到期
-- 验证码长度:发送验证码到手机商的长度,一般为 6 位
-- 提供商具体配置:不同的提供商需要提供的参数不一致,具体提供商的具体参数说明请参考后续文档
-- 测试短信:提供检测机制测试当前的配置是否有效。点击测试短信会发送短信给当前操作用户,所以当前的用户在个人信息中配置正确的手机号码
-
-#### 腾讯云短信服务配置说明
-
-在 Halo 中进行以下设置之前,需要先在腾讯云开通短信服务,并创建可用的签名、模板及应用等内容。
-
-- [腾讯云短信服务控制台地址](https://console.cloud.tencent.com/smsv2)
-- [腾讯云短信服务文档地址](https://cloud.tencent.com/document/product/382/37745)
-
-1. SecretId:用于调用腾讯云接口的 API 密钥的 SecretId,可以在腾讯云控制台 [API密钥管理页面](https://console.cloud.tencent.com/cam/capi) 创建
-2. SecretKey:用于调用腾讯云接口的 API 密钥的 SecretKey,可以在腾讯云控制台 [API密钥管理页面](https://console.cloud.tencent.com/cam/capi) 创建
-3. 地域:腾讯云接口要求的必传参数,可选的地域列表可以查看 [腾讯云文档](https://cloud.tencent.com/document/api/382/52071#.E5.9C.B0.E5.9F.9F.E5.88.97.E8.A1.A8)
-4. 应用 ID:在腾讯云短信服务 [应用管理菜单](https://console.cloud.tencent.com/smsv2/app-manage) 中创建的应用的 `SDK AppID`
-5. 签名内容:在腾讯云短信服务 [签名管理菜单](https://console.cloud.tencent.com/smsv2/csms-sign) 中创建的签名的 `签名内容`
-6. 模板 ID:在腾讯云短信服务 [正文模板管理菜单](https://console.cloud.tencent.com/smsv2/csms-template) 中创建的正文模板的 `ID`
-
-#### 阿里云短信服务配置说明
-
-在 Halo 中进行以下设置之前,需要先在阿里云开通短信服务,并创建可用的签名、模板等内容。
-
-- [阿里云短信服务控制台地址](https://dysms.console.aliyun.com/overview)
-- [阿里云短信服务文档地址](https://help.aliyun.com/zh/sms/)
-
-1. AccessKey ID:用于调用阿里云接口的 API 密钥的 AccessKey ID,可以在阿里云控制台 [AccessKey管理页面](https://ram.console.aliyun.com/manage/ak) 创建
-2. AccessKey Secret:用于调用阿里云接口的 API 密钥的 AccessKey Secret,可以在阿里云控制台 [AccessKey管理页面](https://ram.console.aliyun.com/manage/ak) 创建
-3. 地域:阿里云接口要求的必传参数,可选的地域列表可以查看 [阿里云文档](https://help.aliyun.com/zh/sms/developer-reference/api-dysmsapi-2017-05-25-endpoint?spm=a2c4g.11174283.0.0.13d64994r9G5rN)
-4. 短信签名:在阿里云短信服务 [签名管理菜单](https://dysms.console.aliyun.com/domestic/text/sign) 中创建的签名的 `签名名称`
-5. 短信模板:在阿里云短信服务 [模板管理菜单](https://dysms.console.aliyun.com/domestic/text/template) 中创建的模板的 `模板CODE`
-
-#### UCloud 短信服务配置说明
-
-在 Halo 中进行以下设置之前,需要先在 UCloud 开通短信服务,并创建可用的签名、模板等内容。
-
-- [UCloud 短信服务控制台地址](https://console.ucloud.cn/usms)
-- [UCloud 短信服务文档地址](https://docs.ucloud.cn/usms/README)
-
-> 目前仅支持国内短信且短信模版仅支持一个变量的验证码类型短信模版如:**你的验证码为{1},该验证码5分钟内有效,如非本人操作,请忽略本短信!**
-
-1. 公钥:用于调用 UCloud 接口的 API 密钥的 公钥,可以在 UCloud 控制台 [API密钥](https://console.ucloud.cn/uaccount/api_manage) 创建
-2. 私钥:用于调用 UCloud 接口的 API 密钥的 私钥,可以在 UCloud 控制台 [API密钥](https://console.ucloud.cn/uaccount/api_manage) 创建
-3. 项目 ID:UCloud 接口要求的必传参数,可选的项目列表可以查看 [项目管理](https://console.ucloud.cn/uaccount/iam/project_manage) 中的`项目ID`
-4. 模版 ID:在 UCloud 短信服务 [短信模板](https://console.ucloud.cn/usms/domestic) 中创建的签名的 `模板ID`
-5. 签名内容:在 UCloud 短信服务 [短信签名](https://console.ucloud.cn/usms/domestic) 中创建的签名的 `签名内容`
-
-配置完成之后,可以在 [身份认证](../user-guide/users.md#身份认证) 中开启手机号登录。
diff --git a/docs/user-guide/shop/index.mdx b/docs/user-guide/shop/index.mdx
deleted file mode 100644
index e0b10abf..00000000
--- a/docs/user-guide/shop/index.mdx
+++ /dev/null
@@ -1,28 +0,0 @@
----
-title: 商城
-description: Halo 商城版功能概览:开店、商品、支付发货与前台路由等用户指南索引。
----
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-:::note
-限 [Halo 商城版](../../getting-started/prepare.md#发行版本) 可用。
-:::
-
-商城模块是 Halo 商城版的一项功能,支持用户基于 Halo 站点创建店铺,上架多种类型的货品,配置商品支付和发货方式。为实体商品、虚拟商品、链接商品等销售场景提供完备的电商解决方案。
-
-
-
- 
-
-
- 
-
-
-
-```mdx-code-block
-import DocCardList from '@theme/DocCardList';
-
-
-```
diff --git a/docs/user-guide/shop/mp.mdx b/docs/user-guide/shop/mp.mdx
deleted file mode 100644
index 67def2a1..00000000
--- a/docs/user-guide/shop/mp.mdx
+++ /dev/null
@@ -1,27 +0,0 @@
----
-title: 小程序
-description: Halo 商城小程序的获取、配置与发布说明。
----
-
-自 Halo 2.24 起,Halo 商城支持以微信小程序作为销售终端。相较于 Web 端,小程序在国内拥有更高的用户渗透率,更适合承载移动端购物场景。
-
-
-
-## 获取方式
-
-Halo 官方目前以源码形式提供小程序模板,你需要自行编译,并通过微信开发者工具完成发布。
-
-- 源码仓库:[lxware-dev/halo-shop-miniprogram](https://github.com/lxware-dev/halo-shop-miniprogram)
-- 在线文档:[小程序配置与发布文档](https://github.com/lxware-dev/halo-shop-miniprogram/tree/main/docs)
-
-## 使用流程
-
-:::info
-为了便于后续同步官方更新,建议先将仓库 Fork 到自己的 GitHub 账户,再克隆到本地进行配置、编译和发布。
-:::
-
-```bash
-git clone https://github.com/{your-github-username}/halo-shop-miniprogram.git
-```
-
-克隆完成后,请阅读源码仓库中的 `docs` 目录,其中包含完整的小程序配置、编译与发布说明,可按文档完成后续操作。
diff --git a/docs/user-guide/shop/orders.mdx b/docs/user-guide/shop/orders.mdx
deleted file mode 100644
index 0436ba57..00000000
--- a/docs/user-guide/shop/orders.mdx
+++ /dev/null
@@ -1,27 +0,0 @@
----
-title: 订单管理
-description: Halo 商城订单:查看详情、填写物流发货与订单处理操作说明。
----
-
-
-
-## 查看订单详情
-
-我们可以点击订单标题进入订单详情页面,或者点击订单标题右侧的图标按钮预览订单详情。
-
-
-
-
-
-## 发货
-
-收到用户订单之后,可以在订单详情页面的 **发货信息** 区域点击 **发货** 按钮,打开发货界面:
-
-
-
-在这个界面我们需要勾选需要发货的产品以及物流信息,然后点击 **确认发货** 按钮,即可完成发货。
-
-:::info[提示]
-1. 目前仅支持填写物流单号等信息,目前没有对接物流查询平台,所以需要用户手动根据物流单号查询物流信息。
-2. 虚拟产品发货可参考:[虚拟交付](./virtual-delivery.mdx)
-:::
\ No newline at end of file
diff --git a/docs/user-guide/shop/payments.mdx b/docs/user-guide/shop/payments.mdx
deleted file mode 100644
index 2c67bca2..00000000
--- a/docs/user-guide/shop/payments.mdx
+++ /dev/null
@@ -1,292 +0,0 @@
----
-title: 支付方式
-description: Halo 商城支付:支付宝、微信、Stripe、易支付及手动收款等方式配置。
----
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-在正式运营商城之前,我们需要配置至少一个可用的支付方式,目前商城支持的支付方式包括:
-
-- 支付宝
-- 微信支付
-- 易支付
-- Stripe
-- 银行转账(手动)
-- 收款码支付(手动)
-
-首先登录到 Halo 控制台,进入 **商店 -> 设置 -> 支付方式** 页面,点击右上角的新建按钮。
-
-
-
- 
-
-
- 
-
-
-
-:::note
-在配置支付方式之前,建议先创建一个测试产品,方便在配置完成后进行测试。
-:::
-
-## 支付宝
-
-### 创建支付宝应用
-
-支付宝支付使用官方接口,买家交易的资金将直接进入商家的支付宝账户,无第三方平台介入。
-
-在创建支付宝支付方式之前,需要先在支付宝商家平台和支付宝开放平台完成注册。
-
-- [支付宝商家平台](https://b.alipay.com/)
-- [支付宝开放平台](https://open.alipay.com/)
-
-注册完成后,进入支付宝 [开放平台 -> 控制台](https://open.alipay.com/develop/manage),点击 **创建网页/移动应用** 按钮:
-
-
-
-其中 **应用类型** 选择网页应用,其他参数按照实际情况填写即可。
-
-### 获取支付宝配置信息
-
-创建应用后,进入应用详情页面:
-
-
-
-- 1️⃣:应用 ID
-- 2️⃣:设置接口加签方式
- - 加签方式选择 **密钥**
- - 其他流程按照支付宝的指引进行操作
- - 最后下载 **支付宝公钥证书** 到本地,后续配置时需要
-- 3️⃣:接口内容加密方式,点击 **生成加密方式** 并复制密文
-
-### 在 Halo 中配置
-
-打开新建支付方式的界面,支付提供商选择 **支付宝支付**,并填写以下信息:
-
-- 启用:勾选
-- 名称:给用户展示的支付方式名称
-- 场景:选择 **PC 网页支付**
-- 网关地址:`https://openapi.alipay.com`
-- 支付宝账号 ID:进入支付宝开放平台的账户中心,复制 **账号 ID**
-- 应用 ID:上一步中获取的应用 ID
-- 商户私钥:上一步在工具中生成的密钥文件
-- 支付宝公钥:上一步中下载的 `alipayCertPublicKey_RSA2.crt` 文件内容
-- 加密密钥:上一步中生成的加密密钥
-
-配置完成之后,还需要在 [销售渠道](./sales-channels.mdx) 中绑定该支付方式。
-
-支付预览:
-
-
-
-### 沙箱环境
-
-访问 [沙箱应用 - 开放平台](https://open.alipay.com/develop/sandbox/app),按照页面上的信息在 Halo 中配置即可。
-
-## 微信支付
-
-### 申请微信支付商户号
-
-微信支付使用官方接口,买家交易的资金将直接进入商家的微信支付商户账户,无第三方平台介入。
-
-在配置微信支付之前,需要先在微信支付商户平台申请商户号。
-
-- [微信支付商户平台](https://pay.weixin.qq.com/)
-- [微信支付开发文档](https://pay.weixin.qq.com/doc/v3/merchant/4012791874)
-
-注册并完成商户认证后,进入 [微信支付商户平台](https://pay.weixin.qq.com/),开通 **Native 支付**。
-
-### 获取微信支付配置信息
-
-登录微信支付商户平台后,需要获取以下配置信息:
-
-#### 获取商户号
-
-进入商户平台的 **账户中心 -> 商户信息**,查看您的微信支付商户号(Mch ID)。
-
-#### 设置 API 密钥
-
-1. 进入 **账户中心 -> API 安全 -> API v3 密钥**
-2. 点击 **设置密钥** 按钮,按照提示设置 API v3 密钥(32 位字符串)
-3. 请妥善保管该密钥,后续在 Halo 中配置时需要使用
-
-#### 申请 API 证书
-
-1. 进入 **账户中心 -> API 安全 -> 验证商户身份 -> 商户 API 证书**
-2. 点击 **申请 API 证书** 或 **管理证书**
-3. 按照页面指引完成操作后,下载证书文件(包含 `apiclient_cert.pem` 和 `apiclient_key.pem`)
-4. 在证书管理页面可以查看到证书序列号,记录下来以便配置
-
-#### 获取微信 AppID
-
-1. 进入 **产品中心 -> AppID 账号管理**
-2. 关联您的微信公众号、小程序或企业微信
-3. 记录下对应的 AppID
-
-### 在 Halo 中配置
-
-打开新建支付方式的界面,支付提供商选择 **微信支付**,并填写以下信息:
-
-- 启用:勾选
-- 名称:给用户展示的支付方式名称
-- 场景:选择 **PC 网页支付**
-- 应用 ID:上一步获取的微信 AppID
-- 商户号:上一步获取的商户号(Mch ID)
-- 商户私钥:上一步下载的 `apiclient_key.pem` 文件内容
-- 商户证书序列号:上一步获取的证书序列号
-- API v3 密钥:上一步设置的 API v3 密钥
-
-配置完成之后,还需要在 [销售渠道](./sales-channels.mdx) 中绑定该支付方式。
-
-支付预览:
-
-
-
-## 易支付
-
-### 注册易支付
-
-访问 [易支付官网](https://z-pay.cn),注册并登录账号。
-
-### 开通支付渠道
-
-访问 [易支付 -> 我的支付渠道](https://member.z-pay.cn/member/channel.html),新增支付宝或者微信渠道,根据平台的要求填写相关信息。
-
-开通成功之后,需要记录 **渠道 ID**,后续在 Halo 中配置时可能需要使用。
-
-
-
-### 获取 API 信息
-
-访问 [易支付 -> API 安全](https://member.z-pay.cn/member/myapi.html),记录 **网关**、**商户 ID(PID)** 和 **商户密钥(KEY)**,后续在 Halo 中配置时需要使用。
-
-
-
-### 在 Halo 中配置
-
-打开新建支付方式的界面,支付提供商选择 **易支付**,并填写以下信息:
-
-- 启用:勾选
-- 名称:给用户展示的支付方式名称
-- 场景:选择 **PC 网页支付**
-- 自定义图标:由于易支付同时支持微信和支付宝,推荐自定义图标来区分
-- 网关地址:上一步中记录的 **网关**
-- 商户号:上一步中记录的 **商户 ID(PID)**
-- 商户私钥:上一步中记录的 **商户密钥(KEY)**
-- 支付方式:选择 **微信** 或 **支付宝**,需要确保已经在易支付开通对应的渠道
-- 支付渠道 ID:上一步中记录的 **渠道 ID**,支持填写多个,使用英文逗号, 隔开,如果不填则随机调用
-
-配置完成之后,还需要在 [销售渠道](./sales-channels.mdx) 中绑定该支付方式。
-
-支付预览:
-
-
-
-## Stripe
-
-### 登录或者注册 Stripe
-
-访问 [Stripe 官网](https://stripe.com),登录或者注册账号,并且需要完成必要的信息填写,确保可以正常使用 Stripe 的支付功能。
-
-### 获取 API 信息
-
-登录到 [Stripe 控制台](https://dashboard.stripe.com),进入设置 -> 开发人员 -> 管理 API 密钥,复制 **密钥** 即可,后续在 Halo 中配置时需要使用。
-
-### 创建 WebHook
-
-1. 打开工作台
-
- 
-
-2. 切换到 WebHook 选项卡,并点击 **添加接收端**
-
- 
-
-3. 在事件中选择 `checkout.session.completed`
-
- 
-
-4. 接收端类型选择 **Webhook 端点**
-
- 
-
-5. 填写端点 URL
-
- :::note
- 端点 URL 的格式为:
-
- ```bash
- https://your-domain.com/apis/api.ecommerce.halo.run/v1alpha1/payment-providers/stripe/callback
- ```
-
- 其中 `your-domain.com` 需要替换为你的域名,并且需要确保该域名可以访问。
- :::
-
- 
-
- 最后点击 **创建** 按钮即可。
-
-6. 获取签名密钥
-
- 创建完成之后可以在页面的 **签名密钥** 部分复制 **签名密钥**,后续在 Halo 中配置时需要使用。
-
- 
-
-
-### 在 Halo 中配置
-
-打开新建支付方式的界面,支付提供商选择 **Stripe**,并填写以下信息:
-
-- 启用:勾选
-- 名称:给用户展示的支付方式名称
-- 场景:选择 **PC 网页支付**
-- API Key:上一步中获取的 **密钥**
-- WebHook Secret:上一步中获取的 **签名密钥**
-
-配置完成之后,还需要在 [销售渠道](./sales-channels.mdx) 中绑定该支付方式。
-
-支付预览:
-
-
-
-
-
-## 银行转账
-
-银行转账支付方式不经过 Halo 的支付系统,仅仅是在支付的时候显示商家的银行收款信息,让买家转账到商家的银行账户,后续再通过人工审核的方式确认订单。
-
-打开新建支付方式的界面,支付提供商选择 **银行转账**,并填写以下信息:
-
-- 启用:勾选
-- 名称:给用户展示的支付方式名称
-- 场景:选择 **PC 网页支付**
-- 收款银行:银行名称
-- 银行支行地址:开户行地址
-- 收款账户名:收款账户名称
-- 收款账号:收款银行账号
-- 付款说明:为用户说明转账时需要注意的事项
-
-配置完成之后,还需要在 [销售渠道](./sales-channels.mdx) 中绑定该支付方式。
-
-支付预览:
-
-
-
-## 收款码支付
-
-收款码支付方式不经过 Halo 的支付系统,仅仅是在支付的时候显示商家的收款码,让买家扫码支付,后续再通过人工审核的方式确认订单。
-
-打开新建支付方式的界面,支付提供商选择 **收款码支付**,并填写以下信息:
-
-- 启用:勾选
-- 名称:给用户展示的支付方式名称
-- 场景:选择 **PC 网页支付**
-- 收款码二维码图片链接
-- 付款说明:为用户说明扫码时需要注意的事项
-
-配置完成之后,还需要在 [销售渠道](./sales-channels.mdx) 中绑定该支付方式。
-
-支付预览:
-
-
\ No newline at end of file
diff --git a/docs/user-guide/shop/prepare.mdx b/docs/user-guide/shop/prepare.mdx
deleted file mode 100644
index 4f8c984d..00000000
--- a/docs/user-guide/shop/prepare.mdx
+++ /dev/null
@@ -1,32 +0,0 @@
----
-title: 写在前面
-description: 启用 Halo 商城前:商城版安装激活、合规资质与支付宝/微信支付准备。
----
-
-## 前提条件
-
-在开始使用商城功能之前,需要先确定以下条件是否已满足:
-
-- 正常安装 [Halo 商城版](../../getting-started/install/docker-compose.md)
-- 激活 [Halo 商城版许可证](../../user-guide/activate.md)
-- 根据当地法律法规,满足开设网络商店的资质与要求
-- 开通支付平台账户,目前支持:
- - [支付宝官方接口](https://open.alipay.com/)
- - [微信支付官方接口](https://pay.weixin.qq.com/)
-
-## 前台路由
-
-目前商城包含以下前台路由:
-
-- `/shop`:商城首页,目前会重定向到商品列表页面
-- `/shop/products`:商品列表页面
-- `/shop/products/:id`:商品详情页面
-- `/shop/cart`:购物车页面
-- `/shop/checkout/:id`:结算页面
-- `/shop/order/:code/payments`:支付页面
-
-:::note
-这些页面无需主题提供对应的模板文件即可访问,使用的是系统内置的模板文件。如果当前激活的主题提供了对应的模板文件,则会优先使用主题提供的模板文件。
-:::
-
-你可以根据需求,将这些页面路径添加到[网站菜单](../menus.md)中。
\ No newline at end of file
diff --git a/docs/user-guide/shop/products.mdx b/docs/user-guide/shop/products.mdx
deleted file mode 100644
index 501fbb77..00000000
--- a/docs/user-guide/shop/products.mdx
+++ /dev/null
@@ -1,99 +0,0 @@
----
-title: 产品管理
-description: Halo 商城产品:创建实体/虚拟商品、定价库存、图片与描述等配置说明。
----
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-
-
-## 创建产品
-
-首先登录到 Halo 控制台,进入 **商店 -> 产品** 页面,点击右上角的新建按钮。
-
-
-
-### 基本信息
-
-- 名称:产品名称
-- 简短描述:产品的简短描述
-- 描述:产品的详细描述,使用富文本编辑器
-- 图片:产品图片,可以直接上传或者从附件库中选择,第一张图片会作为封面图
-
-### 产品数据
-
-这里主要配置产品的类型、属性、规格、价格等数据。
-
-产品类型目前支持三种:
-
-1. 实体:需要配送的产品类型
-2. 虚拟:不需要实体配送,使用线上发货的产品类型
-3. 链接:直接跳转到第三方链接的产品类型
-
-:::info[提示]
-虚拟产品支持文件资源下载、卡密发货,可参考 [虚拟交付](./virtual-delivery.mdx) 进行发货配置。
-:::
-
-#### 属性配置
-
-属性的作用是为产品添加一些额外的信息,比如颜色、尺寸、型号等,同时也可以用于生成产品规格。
-
-
-
-- 名称:属性名称,比如颜色、尺寸
-- 属性值:支持多个属性值,比如颜色可以有红色、蓝色、绿色等,尺寸可以有小、中、大等,同时也可以为不同的属性值设置图片,用于展示给用户
-- 用于生成产品规格:勾选后,支持在配置产品规格时根据多个属性生成不同的产品规格
-
-#### 规格配置
-
-规格即产品的具体规格,比如颜色为红色、尺寸为小,型号为1234567890,可以根据属性值生成不同的规格,并单独设置价格、库存等信息,最终用户购买时,可以选择属性值来确定购买的产品规格。
-
-:::note
-这里的规格也可以称之为 **变体** 或者 **SKU**。
-:::
-
-
-
-当我们设置好 [属性](#属性配置) 之后,可以点击 **生成规格** 按钮来批量生成所有可能产生的规格。
-
-
-
-然后可以点击具体的规格项,展开规格配置表单:
-
-
-
-- 图片:为规格设置图片,用于在购物车,订单等页面展示,如果不设置,会使用属性值中配置的图片或者产品封面
-- 状态:支持 **草稿**、**已发布**、**已归档** 三种状态
-- SKU 编号:规格的唯一标识
-- 条形码:产品规格的条形码,也可用于表示 GTIN、UPC、EAN 或 ISBN 等
-- 价格:规格的真实价格
-- 划线价:规格的划线价,用于表示原价
-- 管理库存
- - 否:不管理库存,用户可以无限购买
- - 是:管理库存,用户购买时,库存会减少
-- 库存:规格的库存数量,当库存为0时,用户无法购买
-- 重量:规格的重量
-- 长度:规格的长度
-- 宽度:规格的宽度
-- 高度:规格的高度
-
-:::note
-重量、长度、宽度、高度用于后续发货相关的业务,如果产品类型为虚拟,则不需要配置。
-:::
-
-除了为单个规格设置上述配置之外,也可以点击上方的批量设置按钮,用于为所有规格设置相同的配置。
-
-
-
-### 分类配置
-
-分类配置用于将产品分类,比如手机、电脑、服装、数码等,支持多级分类。
-
-
-
-### 发布
-
-配置完产品信息之后,就可以将产品状态改为 **发布**,并保存产品,最终就可以在商城前台中展示。
-
-
\ No newline at end of file
diff --git a/docs/user-guide/shop/sales-channels.mdx b/docs/user-guide/shop/sales-channels.mdx
deleted file mode 100644
index 8312ec31..00000000
--- a/docs/user-guide/shop/sales-channels.mdx
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: 销售渠道
-description: Halo 商城销售渠道:区分终端与支付绑定,创建与管理渠道说明。
----
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-为了区分不同平台(PC 端、小程序等)的支付方式以及后续追踪订单来源,系统提供了销售渠道功能。
-
-:::info
-由于目前商城仅支持 PC 端,暂未支持小程序等平台,所以仅需要创建一个 PC 端销售渠道并绑定所需的支付方式。
-:::
-
-## 创建销售渠道
-
-首先登录到 Halo 控制台,进入 **商店 -> 设置 -> 销售渠道** 页面,点击右上角的新建按钮。
-
-
-
- 
-
-
- 
-
-
-
-- 是否启用:勾选
-- 名称:可任意填写
-- 编码:目前商城仅支持 PC 端,所以编码选择 **PC 端商城(MALL_PC)**
-- 支付方式:选择已创建的支付方式,创建方式可参考:[支付方式](./payments.mdx)
-
-到这里,已经完成了支付方式和销售渠道的配置,现在可以正常使用商城功能了。
\ No newline at end of file
diff --git a/docs/user-guide/shop/virtual-delivery.mdx b/docs/user-guide/shop/virtual-delivery.mdx
deleted file mode 100644
index e839f090..00000000
--- a/docs/user-guide/shop/virtual-delivery.mdx
+++ /dev/null
@@ -1,260 +0,0 @@
----
-title: 虚拟交付
-description: Halo 商城虚拟商品:文件下载与卡密交付的配置及发货流程说明。
----
-
-在 Halo 2.23 中,我们完善了虚拟产品的发货功能,目前支持文件资源下载、卡密发货。
-
-## 创建产品
-
-完整的创建产品流程可参考 [产品管理](./products.mdx) 文档,需要注意的是,如果产品要支持虚拟交付,需要在产品类型中选择 **虚拟** 产品类型。
-
-
-
-## 设置文件资源下载
-
-创建完产品之后,我们需要进入 **产品 -> 虚拟交付** 页面,然后选择刚刚创建的产品。
-
-
-
-进入设置页面之后,就可以看到 **资源下载** 的设置页面,我们可以点击右上方的 **添加** 按钮来添加文件。
-
-
-
-- 资源类型:支持附件和静态 URL
-- 资源名称:为客户显示的文件名称
-- 资源描述:可以填写文件的描述信息
-- 附件(当类型为附件时):可以点击 `+` 按钮选择已上传的附件或者上传新的附件
-- 资源地址(当类型为静态 URL 时):可以填写文件的 URL 地址
-
-填写完成之后,点击 **保存** 按钮即可。
-
-当文件添加完成之后,我们还需要手动启用自动发货,点击右上角的 **发货配置** 按钮,勾选启用即可。
-
-
-
-## 设置卡密发货
-
-进入虚拟交付设置页面之后,选择 **卡密资产** 选项卡,就可以看到 **卡密资产** 的设置页面。
-
-
-
-我们可以点击右上方的 **添加** 按钮来添加卡密。
-
-
-
-- 卡密:卡密内容,支持批量添加,一行一个
-- 过期时间:卡密过期时间
-- 备注:可以填写卡密的备注信息
-
-填写完成之后点击 **添加** 按钮即可。
-
-当卡密添加完成之后,我们还需要手动启用自动发货,点击右上角的 **发货配置** 按钮,勾选启用即可。
-
-
-
-此外,在卡密发货配置界面中,还支持配置 **远程调用配置**,支持通过三方 API 来补货或者动态生成卡密并发货。
-
-定义:
-
-- 预获取:优先从卡密列表中选择并发货,在库存不足时才调用 API 进行补货
-- 动态获取:每次发货时都调用 API 获取卡密并发货
-
-配置说明:
-
-- 类型:支持 **预获取** 和 **动态获取**
- - 补货配置(当类型为预获取时)
- - API 地址:补货 API 地址
- - 认证 Token:补货 API 认证 Token,用于对 API 请求进行认证
- - 阈值:可用卡密数量低于此值时触发补货
- - 每次获取的卡密数量:每次调用 API 获取的卡密数量
- - 服务器配置(当类型为动态获取时)
- - API 地址:远程生成 API 地址
- - 认证 Token:API 认证 Token,用于对 API 请求进行认证
-
-需要注意的是,API 需要自行实现并适配 Halo 的接口标准,可以参考下方的 [API 规范](#api-规范)。
-
-## 订单相关
-
-为产品配置好虚拟交付之后,当客户下单并支付时,系统会自动为订单进行发货流程,可以在控制台的订单详情中看到发货状态。
-
-
-
-客户也可以在订单页面看到已发货的虚拟物品。
-
-
-
-
-
-## API 规范
-
-### 卡密远程生成 API 规范
-
-用户下单后,Halo 会向配置的远程地址发起请求,由你的服务实时生成或分配卡密。
-
-#### 请求
-
-```
-POST <你配置的远程生成地址>
-Content-Type: application/json
-Authorization: Bearer // 配置了 token 时附带
-```
-
-**请求体**
-
-```json
-{
- "orderItem": {
- "id": 10001,
- "orderId": 90001,
- "productId": 80001,
- "quantity": 2,
- "itemTitle": "年度会员兑换码",
- "productVariantSnapshot": {
- "id": 123,
- "name": "默认规格"
- }
- },
- "dryRun": false
-}
-```
-
-| 字段 | 类型 | 必填 | 说明 |
-| ---------------------------------- | ------- | ---- | ------------------------- |
-| `orderItem.id` | long | 是 | 订单项 ID(可用作幂等键) |
-| `orderItem.orderId` | long | 是 | 订单 ID |
-| `orderItem.productId` | long | 是 | 商品 ID |
-| `orderItem.quantity` | int | 是 | 需要发放的卡密数量 |
-| `orderItem.itemTitle` | string | 否 | 订单项标题 |
-| `orderItem.productVariantSnapshot` | object | 否 | 规格快照 |
-| `dryRun` | boolean | 是 | 当前固定为 `false` |
-
-#### 响应
-
-返回卡密列表,所有卡密的 `capacity` 之和须不小于 `orderItem.quantity`。
-
-```json
-[
- {
- "code": "ABCD-EFGH-IJKL",
- "secret": "S3cr3t-1",
- "expireAt": "2026-12-31T23:59:59Z",
- "capacity": 1
- }
-]
-```
-
-| 字段 | 类型 | 必填 | 说明 |
-| ---------- | ------ | ---- | ------------------------- |
-| `code` | string | 是 | 卡密(同一响应内唯一) |
-| `secret` | string | 否 | 附加验证信息 |
-| `expireAt` | string | 否 | 过期时间(UTC,ISO-8601) |
-| `capacity` | int | 否 | 可用次数,默认为 `1` |
-
-:::warning[注意]
-响应不可为空列表,否则触发卡密发放失败。建议以 `orderItem.id` 作为幂等键,避免重复请求导致重复发放。
-:::
-
-#### 错误码
-
-建议使用非 `2xx` 状态码表达失败,并返回结构化错误:
-
-```json
-{
- "code": "CDK_OUT_OF_STOCK",
- "message": "No enough CDKs available",
- "requestId": "f38db1c2-2f7a-4dc3-b5a8-2d0012345678"
-}
-```
-
-推荐错误码:
-
-| HTTP 状态码 | 错误码 | 含义 | 是否可重试 |
-| ----------- | --------------------- | ---------------------- | ---------- |
-| `400` | `INVALID_REQUEST` | 请求字段不合法 | 否 |
-| `401` | `UNAUTHORIZED` | 鉴权失败 | 否 |
-| `403` | `FORBIDDEN` | 调用被拒绝 | 否 |
-| `404` | `NOT_FOUND` | 路由不存在 | 否 |
-| `409` | `IDEMPOTENT_CONFLICT` | 幂等键冲突且参数不一致 | 否 |
-| `422` | `CDK_OUT_OF_STOCK` | 库存不足 | 视业务而定 |
-| `429` | `RATE_LIMITED` | 触发限流 | 是 |
-| `500` | `INTERNAL_ERROR` | 远程服务内部错误 | 是 |
-| `503` | `SERVICE_UNAVAILABLE` | 服务不可用 | 是 |
-
-### 卡密自动补货 API 规范
-
-当密钥库存低于阈值时,Halo 会自动向配置的补货地址发起补货请求。
-
-#### 请求
-
-```
-POST <你配置的补货地址>
-Content-Type: application/json
-Authorization: Bearer // 配置了 token 时附带
-```
-
-**请求体**
-
-```json
-{
- "productVariantId": 123,
- "quantity": 50
-}
-```
-
-| 字段 | 类型 | 必填 | 说明 |
-| ------------------ | ---- | ---- | --------------------- |
-| `productVariantId` | long | 是 | 需要补货的商品规格 ID |
-| `quantity` | int | 是 | 请求补充的卡密数量 |
-
-#### 响应
-
-返回卡密列表,实际返回数量可与请求数量不一致。
-
-```json
-[
- {
- "code": "ABCD-EFGH-IJKL",
- "secret": "S3cr3t-1",
- "expireAt": "2026-12-31T23:59:59Z",
- "capacity": 1
- }
-]
-```
-
-| 字段 | 类型 | 必填 | 说明 |
-| ---------- | ------ | ---- | ------------------------- |
-| `code` | string | 是 | 卡密(同一响应内唯一) |
-| `secret` | string | 否 | 附加验证信息 |
-| `expireAt` | string | 否 | 过期时间(UTC,ISO-8601) |
-| `capacity` | int | 否 | 可用次数,默认为 `1` |
-
-:::warning[注意]
-响应不可为空列表,否则视为补货失败。补货失败不影响当前订单的卡密发放。
-:::
-
-#### 错误码
-
-建议使用非 `2xx` 状态码表达失败,并返回结构化错误:
-
-```json
-{
- "code": "CDK_OUT_OF_STOCK",
- "message": "No enough CDKs available",
- "requestId": "f38db1c2-2f7a-4dc3-b5a8-2d0012345678"
-}
-```
-
-推荐错误码:
-
-| HTTP 状态码 | 错误码 | 含义 | 是否可重试 |
-| ----------- | --------------------- | ---------------------- | ---------- |
-| `400` | `INVALID_REQUEST` | 请求字段不合法 | 否 |
-| `401` | `UNAUTHORIZED` | 鉴权失败 | 否 |
-| `403` | `FORBIDDEN` | 调用被拒绝 | 否 |
-| `404` | `NOT_FOUND` | 路由不存在 | 否 |
-| `409` | `IDEMPOTENT_CONFLICT` | 幂等键冲突且参数不一致 | 否 |
-| `422` | `CDK_OUT_OF_STOCK` | 库存不足 | 视业务而定 |
-| `429` | `RATE_LIMITED` | 触发限流 | 是 |
-| `500` | `INTERNAL_ERROR` | 远程服务内部错误 | 是 |
-| `503` | `SERVICE_UNAVAILABLE` | 服务不可用 | 是 |
\ No newline at end of file
diff --git a/docs/user-guide/themes.md b/docs/user-guide/themes.md
deleted file mode 100644
index 73352dca..00000000
--- a/docs/user-guide/themes.md
+++ /dev/null
@@ -1,98 +0,0 @@
----
-title: 主题
-description: Halo 主题安装与切换、应用市场获取及模板与站点变量配置说明。
----
-
-主题包含了各种站点页面模板的资源包。用户访问 Halo 站点浏览到的内容及样式,由 Halo 管理端所配置使用的主题所决定。
-
-:::info
-目前有两个官方渠道可以获取主题:
-
-- 应用市场:[https://www.halo.run/store/apps](https://www.halo.run/store/apps)
-- Awesome Halo:[https://github.com/halo-sigs/awesome-halo](https://github.com/halo-sigs/awesome-halo)
-
-:::
-
-## 安装主题
-
-点击主题页面右上方的 `主题管理` 按钮即可弹出主题管理对话框。
-
-### 从内置应用市场安装(推荐)
-
-从 Halo 2.10 开始,内置了应用市场插件,可以更加方便在 Console 直接安装应用市场的主题。
-
-
-
-:::info
-更多关于内置应用市场的使用说明可查阅:[应用市场](./app-store.md)
-:::
-
-### 本地上传安装
-
-你可以点击主题管理对话框下方的 `安装主题` 按钮,在弹出的安装主题对话框中上传主题压缩包。
-
-
-
-### 远程下载安装
-
-同样,在安装主题的对话框中,切换到远程下载选项卡,输入主题的下载地址,点击 `下载` 按钮即可开始下载主题。
-
-## 切换主题
-
-同样点击主题页面右上方的 `主题管理` 按钮弹出主题管理对话框。
-
-在弹框中点击选中要切换的目标主题,此时页面返回到主题详情页,点击右上角的 `启用` 按钮即可将当前主题切换为实际使用的主题。
-
-:::info
-仅选中主题不点击右上角的 `启用` 按钮时,不会影响当前实际使用的主题。
-:::
-
-你也可以在已安装主题列表中,通过后方 `···` 的更多操作中的启用选项直接启用指定的主题。
-
-## 修改主题设置
-
-主题页面默认显示出了当前主题的详细信息,在详细信息标签页后方的标签页,即为主题提供的相关设置。不同的主题提供的设置项各不相同,设置项的详细说明请参考对应主题的文档。
-
-
-
-以 Halo 的默认主题 Earth 为例,该主题提供了布局、样式、侧边栏、页脚及备案设置共五组配置项。
-
-:::info
-你可以点击主题列表指定主题所在行后方的 `···` 更多操作按钮,选择其中的 `重置` 选项将主题提供的设置项恢复为默认值。
-:::
-
-## 预览主题
-
-通过预览功能,你可以在不更改当前启用主题的情况下查看不同主题的效果。点击主题详情页面右上角的 `预览` 按钮预览当前主题,或者进入已安装主题列表,通过后方 `···` 的更多操作中的预览选项预览指定的主题。
-
-在主题预览页面你可以切换不同分辨率的设备,模拟主题在不同终端下的显示效果。也可以通过右上角的功能菜单切换预览的主题,或者调整当前主题的设置,查看不同设置下主题所展现的区别。
-
-演示视频:
-
-
-
-
-## 升级主题
-
-如果当前使用了内置的应用市场插件,在主题更新后会在主题列表中显示更新提示,点击 **立即更新** 按钮即可。
-
-手动升级可以点击主题详情页右上角的 `···` 更多操作按钮,选择其中的 `升级` 选项即可打开升级主题的对话框。
-
-## 重载主题配置
-
-如果当前主题提供的设置项发生变化,可以通过 `···` 更多操作中的 `重载主题配置` 选项对主题配置项进行更新。
-
-## 重置
-
-如果你需要清空所有主题配置并重新配置主题,你可以通过 `···` 更多操作中的 `重置` 选项将主题提供的设置项恢复为默认值。
-
-## 卸载主题
-
-进入已安装主题列表,点击指定主题所在行后方的 `···` 更多操作按钮,选择其中的 `卸载` 选项即可对当前主题进行卸载。
-
-
-
-:::info
-目前提供了 `卸载` 及 `卸载并删除配置` 两种卸载方式。
-仅卸载主题时主题的配置信息会进行保留,当重新安装主题后还可以使用之前已保存的配置。
-:::
diff --git a/docs/user-guide/user-center.md b/docs/user-guide/user-center.md
deleted file mode 100644
index 510d542a..00000000
--- a/docs/user-guide/user-center.md
+++ /dev/null
@@ -1,75 +0,0 @@
----
-title: 个人中心
-description: Halo 个人中心(/uc):资料、认证方式与会话及与 Console 的入口说明。
----
-
-从 Halo 2.11 开始,除了 Console 管理控制台,我们新增加了个人中心,用于管理和用户相关的所有功能。有了个人中心之后,也可以让网站有更多的使用和开发场景。
-
-## 进入个人中心
-
-你可以通过点击 Console 左下角的个人中心图标进入个人中心,也可以直接访问 `/uc` 进入个人中心。
-
-:::info[提示]
-此外,如果用户拥有进入 Console 的权限,也会在个人中心的左侧导航栏中看到 Console 的入口。
-
-详情可见:[创建角色](./users.md#创建角色)
-:::
-
-
-
-## 个人资料
-
-这个页面会显示和用户相关的一些信息。
-
-
-
-## 通知配置
-
-这个页面可以配置用户的通知偏好,可以选择接收哪些类型的通知。
-
-
-
-## 个人令牌
-
-个人令牌是一种用于访问 Halo API 的凭证,可以通过个人令牌访问 Halo 的 RESTful API,而无需通过用户名和密码授权,使用方式可查阅:[RESTful API 介绍](../developer-guide/restful-api/introduction.md)
-
-
-
-创建新的个人令牌:
-
-
-
-- **名称**:个人令牌的名称。
-- **过期时间**:个人令牌的过期时间,不选择则表示永不过期。
-- **描述**:个人令牌的描述信息,用于描述个人令牌的用途。
-- **权限**:个人令牌的权限,可以选择多个权限。
-
-创建好的个人令牌:
-
-
-
-## 两步验证
-
-在这个选项卡中,我们可以配置登录之后两步验证方式,目前支持 TOTP 验证器。
-
-
-
-
-
-## 登录设备
-
-在这里可以看到当前账号的所有登录设备,你也可以在更多按钮中撤销任意设备。
-
-
-
-## 消息
-
-此页面用于显示用户收到的站内消息。
-
-
-
-## 我的文章
-
-Halo 默认为个人中心提供了管理个人文章的功能,每个用户都可以在个人中心创建、编辑自己的文章。当然,也可以通过配置角色权限,自行决定是否开放此功能,可查阅[创建角色](./users.md#创建角色)。
-
-
diff --git a/docs/user-guide/users.md b/docs/user-guide/users.md
deleted file mode 100644
index 914c14f4..00000000
--- a/docs/user-guide/users.md
+++ /dev/null
@@ -1,124 +0,0 @@
----
-title: 用户与权限
-description: Halo 用户与 RBAC:多用户、角色权限、密码与会话等管理说明。
----
-
-## 概览
-
-Halo 2.0 版本采用了基于角色的权限控制(RBAC)体系。不同于之前 1.x 版本的单用户设计,现在你可以创建多个用户并且通过赋予不同用户不同角色的方式,为他们分配不同的权限。
-
-## 用户
-
-点击左侧导航栏的 `用户` 条目进入用户管理页面。
-
-### 创建用户
-
-在用户管理页面,点击右上角的 `添加用户` 按钮即可弹出新建用户对话框。
-
-
-
-目前支持配置的用户属性有:
-
-- **用户名**:用户登录 Halo 控制台使用的用户名,不可与已有的用户名重复;
-- **显示名称**:用于显示文章作者等用户信息时使用的,更友好的用户名称;
-- **电子邮箱**:用户的电子邮箱;
-- **新密码**:用户的初始密码;
-- **角色**:用户的初始角色;
-- **描述**:可以用于为用户添加备注。
-
-### 其他操作
-
-点击用户列表中的 `···` 更多操作按钮,可以对指定用户进行修改资料、修改密码等其他更多操作。
-
-
-
-#### 修改用户资料
-
-你可以修改除用户名以外的所有资料,具有用户管理相关权限的用户,也可对其他用户的资料进行修改。
-
-#### 修改用户密码
-
-对于已有的用户,你可以在 `···` 更多操作中修改指定用户的登录密码。
-
-#### 分配角色
-
-对于已有的用户,你可以在 `···` 更多操作中为该用户分配角色,分配角色后该用户具有角色所对应的权限。
-
-:::info
-修改用户分配的角色会影响用户所拥有的权限,可能影响用户使用。
-:::
-
-#### 删除用户
-
-对于已有的用户,你可以在 `···` 更多操作中删除该用户。
-
-:::warning
-删除用户后,该用户之前创建的文章、页面等内容的作者信息将会丢失,可能影响站点内容浏览。此操作不可恢复。
-:::
-
-## 角色
-
-如下图所示,在用户管理页面,点击右上角红色区域的 `角色管理` 按钮,即可进入到角色管理页面。
-
-
-
-### 创建角色
-
-Halo 提供了全新创建和基于已有角色创建两种角色创建方式。
-
-#### 全新创建
-
-点击角色管理页面右上角的 `新建角色` 按钮即可弹出新建角色对话框,通过这种方式创建的角色默认未勾选任何权限,你需要在对话框中点击切换到权限标签页,为该角色勾选需要的权限。
-
-#### 基于已有角色创建
-
-
-
-当系统中已经存在一些基础角色时,你可以点击某个角色所在行中的 `···` 更多操作按钮,选择 `基于此角色创建` 来创建一个新的角色。通过这种方式创建的角色默认继承了原有角色的权限,但你同样可以对新角色的权限进行进一步调整。
-
-
-
-- **名称**:角色的名称。
-- **禁止访问 Console**:勾选后,该角色的用户将无法进入 Console 管理控制台,只能访问个人中心(/uc)。
-- **权限**:角色的权限,可以选择多个权限。
-
-### 修改角色信息
-
-对于已有的角色,你可以在 `···` 更多操作中修改指定角色的名称和该角色所拥有的权限。
-
-### 其他操作
-
-对于已有的角色,你可以在 `···` 更多操作中删除指定角色。
-
-:::warning
-删除角色后,分配了该角色的用户会丧失对应的权限,影响用户使用。此操作不可恢复。
-:::
-
-## 身份认证
-
-目前 Halo 默认仅支持本地身份认证,但可以通过插件的方式拓展其他三方的身份认证方式。
-
-:::info
-目前 Halo 官方提供的身份认证插件:
-
-- [OAuth2 认证](https://www.halo.run/store/apps/app-ESVDK)
-- [社交 IAM 认证(包含在 Halo 付费版)](https://www.halo.run/store/apps/app-IXZkJ)
-- [LDAP 认证(包含在 Halo 付费版)](https://www.halo.run/store/apps/app-vrSqF)
-
-:::
-
-你可以在用户管理界面的右上角点击 `身份认证` 按钮,进入身份认证管理页面。
-
-
-
-进入身份认证管理页面之后,如果你已经安装了提供身份认证方式的插件,你就可以在列表中看到对应的身份认证方式,你可以对其进行设置并启用。
-
-
-
-### 手机验证码登录
-
-:::note
-限 [Halo 付费版](../getting-started/prepare.md#发行版本) 可用。
-:::
-
-在 [短信通知](../user-guide/settings.md#短信通知) 中配置好短信通知后,就可以在身份认证管理页面中开启手机验证码登录,也可以通过拖拽的方式调整默认登录方式。
diff --git a/docusaurus.config.js b/docusaurus.config.js
deleted file mode 100644
index 7c0505f0..00000000
--- a/docusaurus.config.js
+++ /dev/null
@@ -1,265 +0,0 @@
-const { bundledLanguages } = require("shiki");
-const VersionsArchived = require("./versionsArchived.json");
-const { default: rehypeShiki } = require("@shikijs/rehype");
-const { transformerMetaHighlight } = require("@shikijs/transformers");
-const { transformerNotationDiff } = require("@shikijs/transformers");
-const { transformerNotationFocus } = require("@shikijs/transformers");
-const { transformerNotationErrorLevel } = require("@shikijs/transformers");
-const { transformerAddMeta } = require("./src/shiki/meta-transformer");
-
-/** @type {import('@docusaurus/types').Config} */
-const config = {
- title: "Halo 文档",
- tagline: "Halo 的文档站点",
- url: "https://docs.halo.run",
- baseUrl: "/",
- favicon: "img/favicon-96x96.png",
- i18n: {
- defaultLocale: "zh-Hans",
- locales: ["zh-Hans"],
- },
- organizationName: "halo-dev", // Usually your GitHub org/user name.
- projectName: "halo", // Usually your repo name.
- markdown: {
- mermaid: true,
- },
- themes: ["@docusaurus/theme-mermaid"],
- future: {
- faster: true,
- v4: true,
- },
- markdown: {
- mdx1Compat: {
- headingIds: true,
- comments: true,
- },
- },
- presets: [
- [
- "classic",
- /** @type {import('@docusaurus/preset-classic').Options} */
- ({
- docs: {
- sidebarPath: require.resolve("./sidebars.js"),
- // Please change this to your repo.
- editUrl: "https://github.com/halo-dev/docs/edit/main/",
- routeBasePath: "/",
- showLastUpdateTime: true,
- showLastUpdateAuthor: true,
- lastVersion: "2.26",
- versions: {
- current: {
- label: "next",
- path: "next",
- },
- },
- beforeDefaultRehypePlugins: [
- [
- rehypeShiki,
- {
- theme: "catppuccin-mocha",
- langs: Object.keys(bundledLanguages),
- transformers: [
- transformerMetaHighlight(),
- transformerNotationDiff(),
- transformerNotationFocus(),
- transformerNotationErrorLevel(),
- transformerAddMeta(),
- ],
- },
- ],
- ],
- },
- blog: false,
- theme: {
- customCss: [
- require.resolve("./src/css/custom.css"),
- require.resolve("./src/css/shiki.scss"),
- ],
- },
- sitemap: {
- changefreq: "weekly",
- priority: null,
- changefreq: null,
- ignorePatterns: [
- "/next/**",
- "/2.22/**",
- "/2.23/**",
- "/2.24/**",
- "/2.25/**",
- ],
- },
- googleAnalytics: {
- trackingID: "UA-110780416-7",
- },
- gtag: {
- trackingID: "UA-110780416-7",
- },
- }),
- ],
- ],
-
- themeConfig:
- /** @type {import('@docusaurus/preset-classic').ThemeConfig} */
- ({
- docs: {
- sidebar: {
- autoCollapseCategories: true,
- },
- },
- navbar: {
- title: "Halo 文档",
- logo: {
- alt: "Halo Logo",
- src: "https://www.halo.run/upload/2021/03/Adaptive256-463ca9b92e2d40268431018c07735842.png",
- },
- items: [
- {
- type: "docSidebar",
- position: "left",
- sidebarId: "tutorial",
- label: "使用指南",
- },
- {
- type: "docSidebar",
- position: "left",
- sidebarId: "developer",
- label: "开发者指南",
- },
- {
- type: "docsVersionDropdown",
- position: "right",
- dropdownActiveClassDisabled: true,
- dropdownItemsAfter: [
- {
- type: "html",
- value: '
',
- },
- {
- type: "html",
- className: "dropdown-archived-versions",
- value: "Archived versions",
- },
- ...Object.entries(VersionsArchived).map(
- ([versionName, versionUrl]) => ({
- label: versionName,
- href: versionUrl,
- }),
- ),
- {
- to: "/versions",
- label: "All versions",
- },
- ],
- },
- {
- href: "https://www.halo.run",
- label: "官网",
- position: "right",
- },
- {
- href: "https://bbs.halo.run",
- label: "论坛",
- position: "right",
- },
- {
- href: "https://www.lxware.cn/halo?code=mcYhwMkn",
- label: "版本对比",
- position: "right",
- },
- {
- href: "https://github.com/halo-dev/halo",
- label: "GitHub",
- position: "right",
- },
- ],
- },
- footer: {
- style: "dark",
- copyright: `Copyright © 2026 凌霞软件. Built with Docusaurus.`,
- links: [
- {
- title: "关于",
- items: [
- {
- label: "官网",
- href: "https://www.halo.run",
- },
- {
- label: "应用市场",
- href: "https://www.halo.run/store/apps",
- },
- {
- label: "GitHub 组织",
- href: "https://github.com/halo-dev",
- },
- {
- label: "Gitee 组织",
- href: "https://gitee.com/halo-dev",
- },
- {
- label: "版本发布",
- href: "https://releases.halo.run",
- },
- {
- label: "Server Status",
- href: "https://status.halo.run",
- },
- ],
- },
- {
- title: "社区",
- items: [
- {
- label: "官方论坛",
- href: "https://bbs.halo.run",
- },
- {
- label: "微信公众号",
- href: "https://www.halo.run/upload/2021/03/B3C27F16-4890-4633-81CC-20BA4B28F94F-2415126255c749b290312ca22d9bdeb0.jpeg",
- },
- {
- label: "GitHub Issues",
- href: "https://github.com/halo-dev/halo/issues",
- },
- {
- label: "Telegram Channel",
- href: "https://t.me/halo_dev",
- },
- {
- label: "Telegram Group",
- href: "https://t.me/HaloBlog",
- },
- ],
- },
- ],
- },
- zoom: {
- selector: ".markdown :not(a) > img",
- },
- }),
- plugins: [
- require.resolve("docusaurus-plugin-image-zoom"),
- require.resolve("docusaurus-plugin-sass"),
- [
- require.resolve("@docusaurus/plugin-client-redirects"),
- {
- redirects: [
- {
- from: "/developer-guide/appendix/publish-app",
- to: "/developer-guide/app-store/publish-app",
- },
- ],
- },
- ],
- ],
- scripts: [
- {
- src: "https://track.halo.run/api/script.js",
- defer: true,
- "data-site-id": "3",
- },
- ],
-};
-
-module.exports = config;
diff --git a/edgeone.json b/edgeone.json
new file mode 100644
index 00000000..e141abb4
--- /dev/null
+++ b/edgeone.json
@@ -0,0 +1,163 @@
+{
+ "installCommand": "pnpm install",
+ "buildCommand": "pnpm build",
+ "outputDirectory": "./build",
+ "nodeVersion": "24.18.0",
+ "redirects": [
+ {
+ "source": "/next/getting-started/install/*",
+ "destination": "/guide/install/:splat",
+ "statusCode": 301
+ },
+ {
+ "source": "/next/getting-started/*",
+ "destination": "/guide/:splat",
+ "statusCode": 301
+ },
+ {
+ "source": "/next/user-guide/*",
+ "destination": "/guide/use/:splat",
+ "statusCode": 301
+ },
+ {
+ "source": "/next/contribution/*",
+ "destination": "/guide/contribution/:splat",
+ "statusCode": 301
+ },
+ {
+ "source": "/next",
+ "destination": "/",
+ "statusCode": 301
+ },
+ {
+ "source": "/next/*",
+ "destination": "/:splat",
+ "statusCode": 301
+ },
+ {
+ "source": "/getting-started/install/*",
+ "destination": "/guide/install/:splat",
+ "statusCode": 301
+ },
+ {
+ "source": "/getting-started/*",
+ "destination": "/guide/:splat",
+ "statusCode": 301
+ },
+ {
+ "source": "/user-guide/*",
+ "destination": "/guide/use/:splat",
+ "statusCode": 301
+ },
+ {
+ "source": "/contribution/*",
+ "destination": "/guide/contribution/:splat",
+ "statusCode": 301
+ },
+ {
+ "source": "/developer-guide/appendix/publish-app",
+ "destination": "/developer-guide/app-store/publish-app",
+ "statusCode": 301
+ },
+ {
+ "source": "/about",
+ "destination": "/guide/contribution/pr",
+ "statusCode": 301
+ },
+ {
+ "source": "/versions",
+ "destination": "https://v2.archive-docs.halo.run/versions/",
+ "statusCode": 301
+ },
+ {
+ "source": "/category/%E5%85%A5%E9%97%A8",
+ "destination": "/guide/",
+ "statusCode": 301
+ },
+ {
+ "source": "/category/%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97",
+ "destination": "/guide/install/",
+ "statusCode": 301
+ },
+ {
+ "source": "/category/%E4%BA%91%E5%B9%B3%E5%8F%B0",
+ "destination": "/guide/install/cloud/",
+ "statusCode": 301
+ },
+ {
+ "source": "/category/%E5%85%B6%E4%BB%96%E6%8C%87%E5%8D%97",
+ "destination": "/guide/install/other/",
+ "statusCode": 301
+ },
+ {
+ "source": "/category/%E7%94%A8%E6%88%B7%E6%8C%87%E5%8D%97",
+ "destination": "/guide/use/",
+ "statusCode": 301
+ },
+ {
+ "source": "/category/%E5%8F%82%E4%B8%8E%E8%B4%A1%E7%8C%AE",
+ "destination": "/guide/contribution/issue",
+ "statusCode": 301
+ },
+ {
+ "source": "/category/%E7%B3%BB%E7%BB%9F%E5%BC%80%E5%8F%91",
+ "destination": "/developer-guide/core/",
+ "statusCode": 301
+ },
+ {
+ "source": "/category/%E6%8F%92%E4%BB%B6%E5%BC%80%E5%8F%91",
+ "destination": "/developer-guide/plugin/",
+ "statusCode": 301
+ },
+ {
+ "source": "/category/%E5%9F%BA%E7%A1%80",
+ "destination": "/developer-guide/plugin/basics/",
+ "statusCode": 301
+ },
+ {
+ "source": "/category/%E6%9C%8D%E5%8A%A1%E7%AB%AF",
+ "destination": "/developer-guide/plugin/basics/server/",
+ "statusCode": 301
+ },
+ {
+ "source": "/category/ui",
+ "destination": "/developer-guide/plugin/basics/ui/",
+ "statusCode": 301
+ },
+ {
+ "source": "/category/api-%E5%8F%82%E8%80%83",
+ "destination": "/developer-guide/plugin/api-reference/",
+ "statusCode": 301
+ },
+ {
+ "source": "/category/%E6%9C%8D%E5%8A%A1%E7%AB%AF-1",
+ "destination": "/developer-guide/plugin/api-reference/server/",
+ "statusCode": 301
+ },
+ {
+ "source": "/category/ui-1",
+ "destination": "/developer-guide/plugin/api-reference/ui/",
+ "statusCode": 301
+ },
+ {
+ "source": "/category/%E6%A1%88%E4%BE%8B%E5%92%8C%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5",
+ "destination": "/developer-guide/plugin/examples/",
+ "statusCode": 301
+ },
+ {
+ "source": "/category/restful-api",
+ "destination": "/developer-guide/restful-api/",
+ "statusCode": 301
+ },
+ {
+ "source": "/category/%E4%B8%BB%E9%A2%98%E5%BC%80%E5%8F%91",
+ "destination": "/developer-guide/theme/",
+ "statusCode": 301
+ },
+ {
+ "source": "/category/%E5%BA%94%E7%94%A8%E5%B8%82%E5%9C%BA",
+ "destination": "/developer-guide/app-store/",
+ "statusCode": 301
+ }
+ ]
+}
diff --git a/i18n/zh-Hans/code.json b/i18n/zh-Hans/code.json
deleted file mode 100644
index ff7039d6..00000000
--- a/i18n/zh-Hans/code.json
+++ /dev/null
@@ -1,335 +0,0 @@
-{
- "versionsPage.versionEntry.link": {
- "message": "Documentation"
- },
- "versionsPage.versionEntry.releaseNotes": {
- "message": "Release Notes"
- },
- "theme.ErrorPageContent.title": {
- "message": "页面已崩溃。",
- "description": "The title of the fallback page when the page crashed"
- },
- "theme.BackToTopButton.buttonAriaLabel": {
- "message": "回到顶部",
- "description": "The ARIA label for the back to top button"
- },
- "theme.blog.archive.title": {
- "message": "历史博文",
- "description": "The page & hero title of the blog archive page"
- },
- "theme.blog.archive.description": {
- "message": "历史博文",
- "description": "The page & hero description of the blog archive page"
- },
- "theme.blog.paginator.navAriaLabel": {
- "message": "博文列表分页导航",
- "description": "The ARIA label for the blog pagination"
- },
- "theme.blog.paginator.newerEntries": {
- "message": "较新的博文",
- "description": "The label used to navigate to the newer blog posts page (previous page)"
- },
- "theme.blog.paginator.olderEntries": {
- "message": "较旧的博文",
- "description": "The label used to navigate to the older blog posts page (next page)"
- },
- "theme.blog.post.paginator.navAriaLabel": {
- "message": "博文分页导航",
- "description": "The ARIA label for the blog posts pagination"
- },
- "theme.blog.post.paginator.newerPost": {
- "message": "较新一篇",
- "description": "The blog post button label to navigate to the newer/previous post"
- },
- "theme.blog.post.paginator.olderPost": {
- "message": "较旧一篇",
- "description": "The blog post button label to navigate to the older/next post"
- },
- "theme.tags.tagsPageLink": {
- "message": "查看所有标签",
- "description": "The label of the link targeting the tag list page"
- },
- "theme.colorToggle.ariaLabel.mode.system": {
- "message": "system mode",
- "description": "The name for the system color mode"
- },
- "theme.colorToggle.ariaLabel.mode.light": {
- "message": "浅色模式",
- "description": "The name for the light color mode"
- },
- "theme.colorToggle.ariaLabel.mode.dark": {
- "message": "暗黑模式",
- "description": "The name for the dark color mode"
- },
- "theme.colorToggle.ariaLabel": {
- "message": "切换浅色/暗黑模式(当前为{mode})",
- "description": "The ARIA label for the color mode toggle"
- },
- "theme.docs.breadcrumbs.navAriaLabel": {
- "message": "页面路径",
- "description": "The ARIA label for the breadcrumbs"
- },
- "theme.docs.paginator.navAriaLabel": {
- "message": "文件选项卡",
- "description": "The ARIA label for the docs pagination"
- },
- "theme.docs.paginator.previous": {
- "message": "上一页",
- "description": "The label used to navigate to the previous doc"
- },
- "theme.docs.paginator.next": {
- "message": "下一页",
- "description": "The label used to navigate to the next doc"
- },
- "theme.docs.tagDocListPageTitle.nDocsTagged": {
- "message": "{count} 篇文档带有标签",
- "description": "Pluralized label for \"{count} docs tagged\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)"
- },
- "theme.docs.tagDocListPageTitle": {
- "message": "{nDocsTagged}「{tagName}」",
- "description": "The title of the page for a docs tag"
- },
- "theme.docs.versionBadge.label": {
- "message": "版本:{versionLabel}"
- },
- "theme.docs.versions.unreleasedVersionLabel": {
- "message": "此为 {siteTitle} {versionLabel} 版尚未发行的文档。",
- "description": "The label used to tell the user that he's browsing an unreleased doc version"
- },
- "theme.docs.versions.unmaintainedVersionLabel": {
- "message": "此为 {siteTitle} {versionLabel} 版的文档,现已不再积极维护。",
- "description": "The label used to tell the user that he's browsing an unmaintained doc version"
- },
- "theme.docs.versions.latestVersionSuggestionLabel": {
- "message": "最新的文档请参阅 {latestVersionLink} ({versionLabel})。",
- "description": "The label used to tell the user to check the latest version"
- },
- "theme.docs.versions.latestVersionLinkLabel": {
- "message": "最新版本",
- "description": "The label used for the latest version suggestion link label"
- },
- "theme.common.editThisPage": {
- "message": "编辑此页",
- "description": "The link label to edit the current page"
- },
- "theme.common.headingLinkTitle": {
- "message": "{heading}的直接链接",
- "description": "Title for link to heading"
- },
- "theme.lastUpdated.atDate": {
- "message": "于 {date} ",
- "description": "The words used to describe on which date a page has been last updated"
- },
- "theme.lastUpdated.byUser": {
- "message": "由 {user} ",
- "description": "The words used to describe by who the page has been last updated"
- },
- "theme.lastUpdated.lastUpdatedAtBy": {
- "message": "最后{byUser}{atDate}更新",
- "description": "The sentence used to display when a page has been last updated, and by who"
- },
- "theme.NotFound.title": {
- "message": "找不到页面",
- "description": "The title of the 404 page"
- },
- "theme.navbar.mobileVersionsDropdown.label": {
- "message": "选择版本",
- "description": "The label for the navbar versions dropdown on mobile view"
- },
- "theme.tags.tagsListLabel": {
- "message": "标签:",
- "description": "The label alongside a tag list"
- },
- "theme.AnnouncementBar.closeButtonAriaLabel": {
- "message": "关闭",
- "description": "The ARIA label for close button of announcement bar"
- },
- "theme.admonition.caution": {
- "message": "警告",
- "description": "The default label used for the Caution admonition (:::caution)"
- },
- "theme.admonition.danger": {
- "message": "危险",
- "description": "The default label used for the Danger admonition (:::danger)"
- },
- "theme.admonition.info": {
- "message": "信息",
- "description": "The default label used for the Info admonition (:::info)"
- },
- "theme.admonition.note": {
- "message": "备注",
- "description": "The default label used for the Note admonition (:::note)"
- },
- "theme.admonition.tip": {
- "message": "提示",
- "description": "The default label used for the Tip admonition (:::tip)"
- },
- "theme.admonition.warning": {
- "message": "注意",
- "description": "The default label used for the Warning admonition (:::warning)"
- },
- "theme.blog.sidebar.navAriaLabel": {
- "message": "最近博文导航",
- "description": "The ARIA label for recent posts in the blog sidebar"
- },
- "theme.DocSidebarItem.expandCategoryAriaLabel": {
- "message": "展开侧边栏分类 '{label}'",
- "description": "The ARIA label to expand the sidebar category"
- },
- "theme.DocSidebarItem.collapseCategoryAriaLabel": {
- "message": "折叠侧边栏分类 '{label}'",
- "description": "The ARIA label to collapse the sidebar category"
- },
- "theme.IconExternalLink.ariaLabel": {
- "message": "(opens in new tab)",
- "description": "The ARIA label for the external link icon"
- },
- "theme.NavBar.navAriaLabel": {
- "message": "主导航",
- "description": "The ARIA label for the main navigation"
- },
- "theme.NotFound.p1": {
- "message": "我们找不到您要找的页面。",
- "description": "The first paragraph of the 404 page"
- },
- "theme.NotFound.p2": {
- "message": "请联系原始链接来源网站的所有者,并告知他们链接已损坏。",
- "description": "The 2nd paragraph of the 404 page"
- },
- "theme.navbar.mobileLanguageDropdown.label": {
- "message": "选择语言",
- "description": "The label for the mobile language switcher dropdown"
- },
- "theme.TOCCollapsible.toggleButtonLabel": {
- "message": "本页总览",
- "description": "The label used by the button on the collapsible TOC component"
- },
- "theme.blog.post.readMore": {
- "message": "阅读更多",
- "description": "The label used in blog post item excerpts to link to full blog posts"
- },
- "theme.blog.post.readMoreLabel": {
- "message": "阅读 {title} 的全文",
- "description": "The ARIA label for the link to full blog posts from excerpts"
- },
- "theme.blog.post.readingTime.plurals": {
- "message": "阅读需 {readingTime} 分钟",
- "description": "Pluralized label for \"{readingTime} min read\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)"
- },
- "theme.CodeBlock.copy": {
- "message": "复制",
- "description": "The copy button label on code blocks"
- },
- "theme.CodeBlock.copied": {
- "message": "复制成功",
- "description": "The copied button label on code blocks"
- },
- "theme.CodeBlock.copyButtonAriaLabel": {
- "message": "复制代码到剪贴板",
- "description": "The ARIA label for copy code blocks button"
- },
- "theme.docs.breadcrumbs.home": {
- "message": "主页面",
- "description": "The ARIA label for the home page in the breadcrumbs"
- },
- "theme.CodeBlock.wordWrapToggle": {
- "message": "切换自动换行",
- "description": "The title attribute for toggle word wrapping button of code block lines"
- },
- "theme.docs.sidebar.collapseButtonTitle": {
- "message": "收起侧边栏",
- "description": "The title attribute for collapse button of doc sidebar"
- },
- "theme.docs.sidebar.collapseButtonAriaLabel": {
- "message": "收起侧边栏",
- "description": "The title attribute for collapse button of doc sidebar"
- },
- "theme.docs.sidebar.navAriaLabel": {
- "message": "文档侧边栏",
- "description": "The ARIA label for the sidebar navigation"
- },
- "theme.docs.sidebar.closeSidebarButtonAriaLabel": {
- "message": "关闭导航栏",
- "description": "The ARIA label for close button of mobile sidebar"
- },
- "theme.docs.sidebar.toggleSidebarButtonAriaLabel": {
- "message": "切换导航栏",
- "description": "The ARIA label for hamburger menu button of mobile navigation"
- },
- "theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel": {
- "message": "← 回到主菜单",
- "description": "The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"
- },
- "theme.docs.sidebar.expandButtonTitle": {
- "message": "展开侧边栏",
- "description": "The ARIA label and title attribute for expand button of doc sidebar"
- },
- "theme.docs.sidebar.expandButtonAriaLabel": {
- "message": "展开侧边栏",
- "description": "The ARIA label and title attribute for expand button of doc sidebar"
- },
- "theme.navbar.mobileDropdown.collapseButton.expandAriaLabel": {
- "message": "Expand the dropdown",
- "description": "The ARIA label of the button to expand the mobile dropdown navbar item"
- },
- "theme.navbar.mobileDropdown.collapseButton.collapseAriaLabel": {
- "message": "Collapse the dropdown",
- "description": "The ARIA label of the button to collapse the mobile dropdown navbar item"
- },
- "theme.blog.post.plurals": {
- "message": "{count} 篇博文",
- "description": "Pluralized label for \"{count} posts\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)"
- },
- "theme.blog.tagTitle": {
- "message": "{nPosts} 含有标签「{tagName}」",
- "description": "The title of the page for a blog tag"
- },
- "theme.blog.author.pageTitle": {
- "message": "{authorName} - {nPosts}",
- "description": "The title of the page for a blog author"
- },
- "theme.blog.authorsList.pageTitle": {
- "message": "作者",
- "description": "The title of the authors page"
- },
- "theme.blog.authorsList.viewAll": {
- "message": "查看所有作者",
- "description": "The label of the link targeting the blog authors page"
- },
- "theme.blog.author.noPosts": {
- "message": "该作者尚未撰写任何文章。",
- "description": "The text for authors with 0 blog post"
- },
- "theme.contentVisibility.unlistedBanner.title": {
- "message": "未列出页",
- "description": "The unlisted content banner title"
- },
- "theme.contentVisibility.unlistedBanner.message": {
- "message": "此页面未列出。搜索引擎不会对其索引,只有拥有直接链接的用户才能访问。",
- "description": "The unlisted content banner message"
- },
- "theme.contentVisibility.draftBanner.title": {
- "message": "草稿页",
- "description": "The draft content banner title"
- },
- "theme.contentVisibility.draftBanner.message": {
- "message": "此页面是草稿,仅在开发环境中可见,不会包含在正式版本中。",
- "description": "The draft content banner message"
- },
- "theme.docs.DocCard.categoryDescription.plurals": {
- "message": "{count} 个项目",
- "description": "The default description for a category card in the generated index about how many items this category includes"
- },
- "theme.ErrorPageContent.tryAgain": {
- "message": "重试",
- "description": "The label of the button to try again rendering when the React error boundary captures an error"
- },
- "theme.common.skipToMainContent": {
- "message": "跳到主要内容",
- "description": "The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation"
- },
- "theme.tags.tagsPageTitle": {
- "message": "标签",
- "description": "The title of the tag list page"
- }
-}
diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current.json b/i18n/zh-Hans/docusaurus-plugin-content-docs/current.json
deleted file mode 100644
index f8152b8d..00000000
--- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current.json
+++ /dev/null
@@ -1,130 +0,0 @@
-{
- "version.label": {
- "message": "next",
- "description": "The label for version current"
- },
- "sidebar.tutorial.category.入门": {
- "message": "入门",
- "description": "The label for category '入门' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.category.安装指南": {
- "message": "安装指南",
- "description": "The label for category '安装指南' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.category.云平台": {
- "message": "云平台",
- "description": "The label for category '云平台' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.category.其他指南": {
- "message": "其他指南",
- "description": "The label for category '其他指南' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.category.用户指南": {
- "message": "用户指南",
- "description": "The label for category '用户指南' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.category.商城": {
- "message": "商城",
- "description": "The label for category '商城' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.category.参与贡献": {
- "message": "参与贡献",
- "description": "The label for category '参与贡献' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.link.Zeabur 一键部署": {
- "message": "Zeabur 一键部署",
- "description": "The label for link 'Zeabur 一键部署' in sidebar 'tutorial', linking to 'https://zeabur.com/docs/zh-CN/marketplace/halo'"
- },
- "sidebar.tutorial.link.Rainbond 一键部署": {
- "message": "Rainbond 一键部署",
- "description": "The label for link 'Rainbond 一键部署' in sidebar 'tutorial', linking to 'https://hub.grapps.cn/marketplace/apps/1255'"
- },
- "sidebar.tutorial.link.更新日志": {
- "message": "更新日志",
- "description": "The label for link '更新日志' in sidebar 'tutorial', linking to 'https://releases.halo.run/changelog'"
- },
- "sidebar.developer.category.系统开发": {
- "message": "系统开发",
- "description": "The label for category '系统开发' in sidebar 'developer'"
- },
- "sidebar.developer.category.插件开发": {
- "message": "插件开发",
- "description": "The label for category '插件开发' in sidebar 'developer'"
- },
- "sidebar.developer.category.基础": {
- "message": "基础",
- "description": "The label for category '基础' in sidebar 'developer'"
- },
- "sidebar.developer.category.basics-server": {
- "message": "服务端",
- "description": "The label for category '服务端' in sidebar 'developer'"
- },
- "sidebar.developer.category.basics-ui": {
- "message": "UI",
- "description": "The label for category 'UI' in sidebar 'developer'"
- },
- "sidebar.developer.category.API 参考": {
- "message": "API 参考",
- "description": "The label for category 'API 参考' in sidebar 'developer'"
- },
- "sidebar.developer.category.api-reference-server": {
- "message": "服务端",
- "description": "The label for category '服务端' in sidebar 'developer'"
- },
- "sidebar.developer.category.api-reference-ui": {
- "message": "UI",
- "description": "The label for category 'UI' in sidebar 'developer'"
- },
- "sidebar.developer.category.组件": {
- "message": "组件",
- "description": "The label for category '组件' in sidebar 'developer'"
- },
- "sidebar.developer.category.扩展点和定制化": {
- "message": "扩展点和定制化",
- "description": "The label for category '扩展点和定制化' in sidebar 'developer'"
- },
- "sidebar.developer.category.extension-points-server": {
- "message": "服务端",
- "description": "The label for category '服务端' in sidebar 'developer'"
- },
- "sidebar.developer.category.extension-points-ui": {
- "message": "UI",
- "description": "The label for category 'UI' in sidebar 'developer'"
- },
- "sidebar.developer.category.与其他插件交互": {
- "message": "与其他插件交互",
- "description": "The label for category '与其他插件交互' in sidebar 'developer'"
- },
- "sidebar.developer.category.安全和权限管理": {
- "message": "安全和权限管理",
- "description": "The label for category '安全和权限管理' in sidebar 'developer'"
- },
- "sidebar.developer.category.案例和最佳实践": {
- "message": "案例和最佳实践",
- "description": "The label for category '案例和最佳实践' in sidebar 'developer'"
- },
- "sidebar.developer.category.主题开发": {
- "message": "主题开发",
- "description": "The label for category '主题开发' in sidebar 'developer'"
- },
- "sidebar.developer.category.模板编写": {
- "message": "模板编写",
- "description": "The label for category '模板编写' in sidebar 'developer'"
- },
- "sidebar.developer.category.Finder API": {
- "message": "Finder API",
- "description": "The label for category 'Finder API' in sidebar 'developer'"
- },
- "sidebar.developer.category.RESTful API": {
- "message": "RESTful API",
- "description": "The label for category 'RESTful API' in sidebar 'developer'"
- },
- "sidebar.developer.category.应用市场": {
- "message": "应用市场",
- "description": "The label for category '应用市场' in sidebar 'developer'"
- },
- "sidebar.developer.category.附录": {
- "message": "附录",
- "description": "The label for category '附录' in sidebar 'developer'"
- }
-}
diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-2.20.json b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-2.20.json
deleted file mode 100644
index 85fca1b9..00000000
--- a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-2.20.json
+++ /dev/null
@@ -1,114 +0,0 @@
-{
- "version.label": {
- "message": "2.20",
- "description": "The label for version 2.20"
- },
- "sidebar.tutorial.category.入门": {
- "message": "入门",
- "description": "The label for category '入门' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.category.安装指南": {
- "message": "安装指南",
- "description": "The label for category '安装指南' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.category.云平台": {
- "message": "云平台",
- "description": "The label for category '云平台' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.category.其他指南": {
- "message": "其他指南",
- "description": "The label for category '其他指南' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.category.用户指南": {
- "message": "用户指南",
- "description": "The label for category '用户指南' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.category.参与贡献": {
- "message": "参与贡献",
- "description": "The label for category '参与贡献' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.link.Zeabur 一键部署": {
- "message": "Zeabur 一键部署",
- "description": "The label for link 'Zeabur 一键部署' in sidebar 'tutorial', linking to 'https://zeabur.com/docs/zh-CN/marketplace/halo'"
- },
- "sidebar.tutorial.link.Rainbond 一键部署": {
- "message": "Rainbond 一键部署",
- "description": "The label for link 'Rainbond 一键部署' in sidebar 'tutorial', linking to 'https://hub.grapps.cn/marketplace/apps/1255'"
- },
- "sidebar.developer.category.系统开发": {
- "message": "系统开发",
- "description": "The label for category '系统开发' in sidebar 'developer'"
- },
- "sidebar.developer.category.插件开发": {
- "message": "插件开发",
- "description": "The label for category '插件开发' in sidebar 'developer'"
- },
- "sidebar.developer.category.基础": {
- "message": "基础",
- "description": "The label for category '基础' in sidebar 'developer'"
- },
- "sidebar.developer.category.basics-server": {
- "message": "服务端",
- "description": "The label for category '服务端' in sidebar 'developer'"
- },
- "sidebar.developer.category.basics-ui": {
- "message": "UI",
- "description": "The label for category 'UI' in sidebar 'developer'"
- },
- "sidebar.developer.category.API 参考": {
- "message": "API 参考",
- "description": "The label for category 'API 参考' in sidebar 'developer'"
- },
- "sidebar.developer.category.api-reference-server": {
- "message": "服务端",
- "description": "The label for category '服务端' in sidebar 'developer'"
- },
- "sidebar.developer.category.api-reference-ui": {
- "message": "UI",
- "description": "The label for category 'UI' in sidebar 'developer'"
- },
- "sidebar.developer.category.组件": {
- "message": "组件",
- "description": "The label for category '组件' in sidebar 'developer'"
- },
- "sidebar.developer.category.扩展点和定制化": {
- "message": "扩展点和定制化",
- "description": "The label for category '扩展点和定制化' in sidebar 'developer'"
- },
- "sidebar.developer.category.extension-points-server": {
- "message": "服务端",
- "description": "The label for category '服务端' in sidebar 'developer'"
- },
- "sidebar.developer.category.extension-points-ui": {
- "message": "UI",
- "description": "The label for category 'UI' in sidebar 'developer'"
- },
- "sidebar.developer.category.与其他插件交互": {
- "message": "与其他插件交互",
- "description": "The label for category '与其他插件交互' in sidebar 'developer'"
- },
- "sidebar.developer.category.安全和权限管理": {
- "message": "安全和权限管理",
- "description": "The label for category '安全和权限管理' in sidebar 'developer'"
- },
- "sidebar.developer.category.案例和最佳实践": {
- "message": "案例和最佳实践",
- "description": "The label for category '案例和最佳实践' in sidebar 'developer'"
- },
- "sidebar.developer.category.主题开发": {
- "message": "主题开发",
- "description": "The label for category '主题开发' in sidebar 'developer'"
- },
- "sidebar.developer.category.模板编写": {
- "message": "模板编写",
- "description": "The label for category '模板编写' in sidebar 'developer'"
- },
- "sidebar.developer.category.Finder API": {
- "message": "Finder API",
- "description": "The label for category 'Finder API' in sidebar 'developer'"
- },
- "sidebar.developer.category.RESTful API": {
- "message": "RESTful API",
- "description": "The label for category 'RESTful API' in sidebar 'developer'"
- }
-}
diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-2.21.json b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-2.21.json
deleted file mode 100644
index fe9c0c4b..00000000
--- a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-2.21.json
+++ /dev/null
@@ -1,118 +0,0 @@
-{
- "version.label": {
- "message": "2.21",
- "description": "The label for version 2.21"
- },
- "sidebar.tutorial.category.入门": {
- "message": "入门",
- "description": "The label for category '入门' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.category.安装指南": {
- "message": "安装指南",
- "description": "The label for category '安装指南' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.category.云平台": {
- "message": "云平台",
- "description": "The label for category '云平台' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.category.其他指南": {
- "message": "其他指南",
- "description": "The label for category '其他指南' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.category.用户指南": {
- "message": "用户指南",
- "description": "The label for category '用户指南' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.category.参与贡献": {
- "message": "参与贡献",
- "description": "The label for category '参与贡献' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.link.Zeabur 一键部署": {
- "message": "Zeabur 一键部署",
- "description": "The label for link 'Zeabur 一键部署' in sidebar 'tutorial', linking to 'https://zeabur.com/docs/zh-CN/marketplace/halo'"
- },
- "sidebar.tutorial.link.Rainbond 一键部署": {
- "message": "Rainbond 一键部署",
- "description": "The label for link 'Rainbond 一键部署' in sidebar 'tutorial', linking to 'https://hub.grapps.cn/marketplace/apps/1255'"
- },
- "sidebar.developer.category.系统开发": {
- "message": "系统开发",
- "description": "The label for category '系统开发' in sidebar 'developer'"
- },
- "sidebar.developer.category.插件开发": {
- "message": "插件开发",
- "description": "The label for category '插件开发' in sidebar 'developer'"
- },
- "sidebar.developer.category.基础": {
- "message": "基础",
- "description": "The label for category '基础' in sidebar 'developer'"
- },
- "sidebar.developer.category.basics-server": {
- "message": "服务端",
- "description": "The label for category '服务端' in sidebar 'developer'"
- },
- "sidebar.developer.category.basics-ui": {
- "message": "UI",
- "description": "The label for category 'UI' in sidebar 'developer'"
- },
- "sidebar.developer.category.API 参考": {
- "message": "API 参考",
- "description": "The label for category 'API 参考' in sidebar 'developer'"
- },
- "sidebar.developer.category.api-reference-server": {
- "message": "服务端",
- "description": "The label for category '服务端' in sidebar 'developer'"
- },
- "sidebar.developer.category.api-reference-ui": {
- "message": "UI",
- "description": "The label for category 'UI' in sidebar 'developer'"
- },
- "sidebar.developer.category.组件": {
- "message": "组件",
- "description": "The label for category '组件' in sidebar 'developer'"
- },
- "sidebar.developer.category.扩展点和定制化": {
- "message": "扩展点和定制化",
- "description": "The label for category '扩展点和定制化' in sidebar 'developer'"
- },
- "sidebar.developer.category.extension-points-server": {
- "message": "服务端",
- "description": "The label for category '服务端' in sidebar 'developer'"
- },
- "sidebar.developer.category.extension-points-ui": {
- "message": "UI",
- "description": "The label for category 'UI' in sidebar 'developer'"
- },
- "sidebar.developer.category.与其他插件交互": {
- "message": "与其他插件交互",
- "description": "The label for category '与其他插件交互' in sidebar 'developer'"
- },
- "sidebar.developer.category.安全和权限管理": {
- "message": "安全和权限管理",
- "description": "The label for category '安全和权限管理' in sidebar 'developer'"
- },
- "sidebar.developer.category.案例和最佳实践": {
- "message": "案例和最佳实践",
- "description": "The label for category '案例和最佳实践' in sidebar 'developer'"
- },
- "sidebar.developer.category.主题开发": {
- "message": "主题开发",
- "description": "The label for category '主题开发' in sidebar 'developer'"
- },
- "sidebar.developer.category.模板编写": {
- "message": "模板编写",
- "description": "The label for category '模板编写' in sidebar 'developer'"
- },
- "sidebar.developer.category.Finder API": {
- "message": "Finder API",
- "description": "The label for category 'Finder API' in sidebar 'developer'"
- },
- "sidebar.developer.category.RESTful API": {
- "message": "RESTful API",
- "description": "The label for category 'RESTful API' in sidebar 'developer'"
- },
- "sidebar.developer.category.附录": {
- "message": "附录",
- "description": "The label for category '附录' in sidebar 'developer'"
- }
-}
diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-2.22.json b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-2.22.json
deleted file mode 100644
index 7319b2a9..00000000
--- a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-2.22.json
+++ /dev/null
@@ -1,122 +0,0 @@
-{
- "version.label": {
- "message": "2.22",
- "description": "The label for version 2.22"
- },
- "sidebar.tutorial.category.入门": {
- "message": "入门",
- "description": "The label for category '入门' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.category.安装指南": {
- "message": "安装指南",
- "description": "The label for category '安装指南' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.category.云平台": {
- "message": "云平台",
- "description": "The label for category '云平台' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.category.其他指南": {
- "message": "其他指南",
- "description": "The label for category '其他指南' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.category.用户指南": {
- "message": "用户指南",
- "description": "The label for category '用户指南' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.category.商城": {
- "message": "商城",
- "description": "The label for category '商城' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.category.参与贡献": {
- "message": "参与贡献",
- "description": "The label for category '参与贡献' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.link.Zeabur 一键部署": {
- "message": "Zeabur 一键部署",
- "description": "The label for link 'Zeabur 一键部署' in sidebar 'tutorial', linking to 'https://zeabur.com/docs/zh-CN/marketplace/halo'"
- },
- "sidebar.tutorial.link.Rainbond 一键部署": {
- "message": "Rainbond 一键部署",
- "description": "The label for link 'Rainbond 一键部署' in sidebar 'tutorial', linking to 'https://hub.grapps.cn/marketplace/apps/1255'"
- },
- "sidebar.developer.category.系统开发": {
- "message": "系统开发",
- "description": "The label for category '系统开发' in sidebar 'developer'"
- },
- "sidebar.developer.category.插件开发": {
- "message": "插件开发",
- "description": "The label for category '插件开发' in sidebar 'developer'"
- },
- "sidebar.developer.category.基础": {
- "message": "基础",
- "description": "The label for category '基础' in sidebar 'developer'"
- },
- "sidebar.developer.category.basics-server": {
- "message": "服务端",
- "description": "The label for category '服务端' in sidebar 'developer'"
- },
- "sidebar.developer.category.basics-ui": {
- "message": "UI",
- "description": "The label for category 'UI' in sidebar 'developer'"
- },
- "sidebar.developer.category.API 参考": {
- "message": "API 参考",
- "description": "The label for category 'API 参考' in sidebar 'developer'"
- },
- "sidebar.developer.category.api-reference-server": {
- "message": "服务端",
- "description": "The label for category '服务端' in sidebar 'developer'"
- },
- "sidebar.developer.category.api-reference-ui": {
- "message": "UI",
- "description": "The label for category 'UI' in sidebar 'developer'"
- },
- "sidebar.developer.category.组件": {
- "message": "组件",
- "description": "The label for category '组件' in sidebar 'developer'"
- },
- "sidebar.developer.category.扩展点和定制化": {
- "message": "扩展点和定制化",
- "description": "The label for category '扩展点和定制化' in sidebar 'developer'"
- },
- "sidebar.developer.category.extension-points-server": {
- "message": "服务端",
- "description": "The label for category '服务端' in sidebar 'developer'"
- },
- "sidebar.developer.category.extension-points-ui": {
- "message": "UI",
- "description": "The label for category 'UI' in sidebar 'developer'"
- },
- "sidebar.developer.category.与其他插件交互": {
- "message": "与其他插件交互",
- "description": "The label for category '与其他插件交互' in sidebar 'developer'"
- },
- "sidebar.developer.category.安全和权限管理": {
- "message": "安全和权限管理",
- "description": "The label for category '安全和权限管理' in sidebar 'developer'"
- },
- "sidebar.developer.category.案例和最佳实践": {
- "message": "案例和最佳实践",
- "description": "The label for category '案例和最佳实践' in sidebar 'developer'"
- },
- "sidebar.developer.category.主题开发": {
- "message": "主题开发",
- "description": "The label for category '主题开发' in sidebar 'developer'"
- },
- "sidebar.developer.category.模板编写": {
- "message": "模板编写",
- "description": "The label for category '模板编写' in sidebar 'developer'"
- },
- "sidebar.developer.category.Finder API": {
- "message": "Finder API",
- "description": "The label for category 'Finder API' in sidebar 'developer'"
- },
- "sidebar.developer.category.RESTful API": {
- "message": "RESTful API",
- "description": "The label for category 'RESTful API' in sidebar 'developer'"
- },
- "sidebar.developer.category.附录": {
- "message": "附录",
- "description": "The label for category '附录' in sidebar 'developer'"
- }
-}
diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-2.23.json b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-2.23.json
deleted file mode 100644
index 5c844584..00000000
--- a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-2.23.json
+++ /dev/null
@@ -1,126 +0,0 @@
-{
- "version.label": {
- "message": "2.23",
- "description": "The label for version 2.23"
- },
- "sidebar.tutorial.category.入门": {
- "message": "入门",
- "description": "The label for category '入门' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.category.安装指南": {
- "message": "安装指南",
- "description": "The label for category '安装指南' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.category.云平台": {
- "message": "云平台",
- "description": "The label for category '云平台' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.category.其他指南": {
- "message": "其他指南",
- "description": "The label for category '其他指南' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.category.用户指南": {
- "message": "用户指南",
- "description": "The label for category '用户指南' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.category.商城": {
- "message": "商城",
- "description": "The label for category '商城' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.category.参与贡献": {
- "message": "参与贡献",
- "description": "The label for category '参与贡献' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.link.Zeabur 一键部署": {
- "message": "Zeabur 一键部署",
- "description": "The label for link 'Zeabur 一键部署' in sidebar 'tutorial', linking to 'https://zeabur.com/docs/zh-CN/marketplace/halo'"
- },
- "sidebar.tutorial.link.Rainbond 一键部署": {
- "message": "Rainbond 一键部署",
- "description": "The label for link 'Rainbond 一键部署' in sidebar 'tutorial', linking to 'https://hub.grapps.cn/marketplace/apps/1255'"
- },
- "sidebar.tutorial.link.更新日志": {
- "message": "更新日志",
- "description": "The label for link '更新日志' in sidebar 'tutorial', linking to 'https://releases.halo.run/changelog'"
- },
- "sidebar.developer.category.系统开发": {
- "message": "系统开发",
- "description": "The label for category '系统开发' in sidebar 'developer'"
- },
- "sidebar.developer.category.插件开发": {
- "message": "插件开发",
- "description": "The label for category '插件开发' in sidebar 'developer'"
- },
- "sidebar.developer.category.基础": {
- "message": "基础",
- "description": "The label for category '基础' in sidebar 'developer'"
- },
- "sidebar.developer.category.basics-server": {
- "message": "服务端",
- "description": "The label for category '服务端' in sidebar 'developer'"
- },
- "sidebar.developer.category.basics-ui": {
- "message": "UI",
- "description": "The label for category 'UI' in sidebar 'developer'"
- },
- "sidebar.developer.category.API 参考": {
- "message": "API 参考",
- "description": "The label for category 'API 参考' in sidebar 'developer'"
- },
- "sidebar.developer.category.api-reference-server": {
- "message": "服务端",
- "description": "The label for category '服务端' in sidebar 'developer'"
- },
- "sidebar.developer.category.api-reference-ui": {
- "message": "UI",
- "description": "The label for category 'UI' in sidebar 'developer'"
- },
- "sidebar.developer.category.组件": {
- "message": "组件",
- "description": "The label for category '组件' in sidebar 'developer'"
- },
- "sidebar.developer.category.扩展点和定制化": {
- "message": "扩展点和定制化",
- "description": "The label for category '扩展点和定制化' in sidebar 'developer'"
- },
- "sidebar.developer.category.extension-points-server": {
- "message": "服务端",
- "description": "The label for category '服务端' in sidebar 'developer'"
- },
- "sidebar.developer.category.extension-points-ui": {
- "message": "UI",
- "description": "The label for category 'UI' in sidebar 'developer'"
- },
- "sidebar.developer.category.与其他插件交互": {
- "message": "与其他插件交互",
- "description": "The label for category '与其他插件交互' in sidebar 'developer'"
- },
- "sidebar.developer.category.安全和权限管理": {
- "message": "安全和权限管理",
- "description": "The label for category '安全和权限管理' in sidebar 'developer'"
- },
- "sidebar.developer.category.案例和最佳实践": {
- "message": "案例和最佳实践",
- "description": "The label for category '案例和最佳实践' in sidebar 'developer'"
- },
- "sidebar.developer.category.主题开发": {
- "message": "主题开发",
- "description": "The label for category '主题开发' in sidebar 'developer'"
- },
- "sidebar.developer.category.模板编写": {
- "message": "模板编写",
- "description": "The label for category '模板编写' in sidebar 'developer'"
- },
- "sidebar.developer.category.Finder API": {
- "message": "Finder API",
- "description": "The label for category 'Finder API' in sidebar 'developer'"
- },
- "sidebar.developer.category.RESTful API": {
- "message": "RESTful API",
- "description": "The label for category 'RESTful API' in sidebar 'developer'"
- },
- "sidebar.developer.category.附录": {
- "message": "附录",
- "description": "The label for category '附录' in sidebar 'developer'"
- }
-}
diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-2.24.json b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-2.24.json
deleted file mode 100644
index 19907142..00000000
--- a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-2.24.json
+++ /dev/null
@@ -1,130 +0,0 @@
-{
- "version.label": {
- "message": "2.24",
- "description": "The label for version 2.24"
- },
- "sidebar.tutorial.category.入门": {
- "message": "入门",
- "description": "The label for category '入门' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.category.安装指南": {
- "message": "安装指南",
- "description": "The label for category '安装指南' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.category.云平台": {
- "message": "云平台",
- "description": "The label for category '云平台' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.category.其他指南": {
- "message": "其他指南",
- "description": "The label for category '其他指南' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.category.用户指南": {
- "message": "用户指南",
- "description": "The label for category '用户指南' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.category.商城": {
- "message": "商城",
- "description": "The label for category '商城' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.category.参与贡献": {
- "message": "参与贡献",
- "description": "The label for category '参与贡献' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.link.Zeabur 一键部署": {
- "message": "Zeabur 一键部署",
- "description": "The label for link 'Zeabur 一键部署' in sidebar 'tutorial', linking to 'https://zeabur.com/docs/zh-CN/marketplace/halo'"
- },
- "sidebar.tutorial.link.Rainbond 一键部署": {
- "message": "Rainbond 一键部署",
- "description": "The label for link 'Rainbond 一键部署' in sidebar 'tutorial', linking to 'https://hub.grapps.cn/marketplace/apps/1255'"
- },
- "sidebar.tutorial.link.更新日志": {
- "message": "更新日志",
- "description": "The label for link '更新日志' in sidebar 'tutorial', linking to 'https://releases.halo.run/changelog'"
- },
- "sidebar.developer.category.系统开发": {
- "message": "系统开发",
- "description": "The label for category '系统开发' in sidebar 'developer'"
- },
- "sidebar.developer.category.插件开发": {
- "message": "插件开发",
- "description": "The label for category '插件开发' in sidebar 'developer'"
- },
- "sidebar.developer.category.基础": {
- "message": "基础",
- "description": "The label for category '基础' in sidebar 'developer'"
- },
- "sidebar.developer.category.basics-server": {
- "message": "服务端",
- "description": "The label for category '服务端' in sidebar 'developer'"
- },
- "sidebar.developer.category.basics-ui": {
- "message": "UI",
- "description": "The label for category 'UI' in sidebar 'developer'"
- },
- "sidebar.developer.category.API 参考": {
- "message": "API 参考",
- "description": "The label for category 'API 参考' in sidebar 'developer'"
- },
- "sidebar.developer.category.api-reference-server": {
- "message": "服务端",
- "description": "The label for category '服务端' in sidebar 'developer'"
- },
- "sidebar.developer.category.api-reference-ui": {
- "message": "UI",
- "description": "The label for category 'UI' in sidebar 'developer'"
- },
- "sidebar.developer.category.组件": {
- "message": "组件",
- "description": "The label for category '组件' in sidebar 'developer'"
- },
- "sidebar.developer.category.扩展点和定制化": {
- "message": "扩展点和定制化",
- "description": "The label for category '扩展点和定制化' in sidebar 'developer'"
- },
- "sidebar.developer.category.extension-points-server": {
- "message": "服务端",
- "description": "The label for category '服务端' in sidebar 'developer'"
- },
- "sidebar.developer.category.extension-points-ui": {
- "message": "UI",
- "description": "The label for category 'UI' in sidebar 'developer'"
- },
- "sidebar.developer.category.与其他插件交互": {
- "message": "与其他插件交互",
- "description": "The label for category '与其他插件交互' in sidebar 'developer'"
- },
- "sidebar.developer.category.安全和权限管理": {
- "message": "安全和权限管理",
- "description": "The label for category '安全和权限管理' in sidebar 'developer'"
- },
- "sidebar.developer.category.案例和最佳实践": {
- "message": "案例和最佳实践",
- "description": "The label for category '案例和最佳实践' in sidebar 'developer'"
- },
- "sidebar.developer.category.主题开发": {
- "message": "主题开发",
- "description": "The label for category '主题开发' in sidebar 'developer'"
- },
- "sidebar.developer.category.模板编写": {
- "message": "模板编写",
- "description": "The label for category '模板编写' in sidebar 'developer'"
- },
- "sidebar.developer.category.Finder API": {
- "message": "Finder API",
- "description": "The label for category 'Finder API' in sidebar 'developer'"
- },
- "sidebar.developer.category.RESTful API": {
- "message": "RESTful API",
- "description": "The label for category 'RESTful API' in sidebar 'developer'"
- },
- "sidebar.developer.category.应用市场": {
- "message": "应用市场",
- "description": "The label for category '应用市场' in sidebar 'developer'"
- },
- "sidebar.developer.category.附录": {
- "message": "附录",
- "description": "The label for category '附录' in sidebar 'developer'"
- }
-}
diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-2.25.json b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-2.25.json
deleted file mode 100644
index 6b876033..00000000
--- a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-2.25.json
+++ /dev/null
@@ -1,130 +0,0 @@
-{
- "version.label": {
- "message": "2.25",
- "description": "The label for version 2.25"
- },
- "sidebar.tutorial.category.入门": {
- "message": "入门",
- "description": "The label for category '入门' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.category.安装指南": {
- "message": "安装指南",
- "description": "The label for category '安装指南' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.category.云平台": {
- "message": "云平台",
- "description": "The label for category '云平台' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.category.其他指南": {
- "message": "其他指南",
- "description": "The label for category '其他指南' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.category.用户指南": {
- "message": "用户指南",
- "description": "The label for category '用户指南' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.category.商城": {
- "message": "商城",
- "description": "The label for category '商城' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.category.参与贡献": {
- "message": "参与贡献",
- "description": "The label for category '参与贡献' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.link.Zeabur 一键部署": {
- "message": "Zeabur 一键部署",
- "description": "The label for link 'Zeabur 一键部署' in sidebar 'tutorial', linking to 'https://zeabur.com/docs/zh-CN/marketplace/halo'"
- },
- "sidebar.tutorial.link.Rainbond 一键部署": {
- "message": "Rainbond 一键部署",
- "description": "The label for link 'Rainbond 一键部署' in sidebar 'tutorial', linking to 'https://hub.grapps.cn/marketplace/apps/1255'"
- },
- "sidebar.tutorial.link.更新日志": {
- "message": "更新日志",
- "description": "The label for link '更新日志' in sidebar 'tutorial', linking to 'https://releases.halo.run/changelog'"
- },
- "sidebar.developer.category.系统开发": {
- "message": "系统开发",
- "description": "The label for category '系统开发' in sidebar 'developer'"
- },
- "sidebar.developer.category.插件开发": {
- "message": "插件开发",
- "description": "The label for category '插件开发' in sidebar 'developer'"
- },
- "sidebar.developer.category.基础": {
- "message": "基础",
- "description": "The label for category '基础' in sidebar 'developer'"
- },
- "sidebar.developer.category.basics-server": {
- "message": "服务端",
- "description": "The label for category '服务端' in sidebar 'developer'"
- },
- "sidebar.developer.category.basics-ui": {
- "message": "UI",
- "description": "The label for category 'UI' in sidebar 'developer'"
- },
- "sidebar.developer.category.API 参考": {
- "message": "API 参考",
- "description": "The label for category 'API 参考' in sidebar 'developer'"
- },
- "sidebar.developer.category.api-reference-server": {
- "message": "服务端",
- "description": "The label for category '服务端' in sidebar 'developer'"
- },
- "sidebar.developer.category.api-reference-ui": {
- "message": "UI",
- "description": "The label for category 'UI' in sidebar 'developer'"
- },
- "sidebar.developer.category.组件": {
- "message": "组件",
- "description": "The label for category '组件' in sidebar 'developer'"
- },
- "sidebar.developer.category.扩展点和定制化": {
- "message": "扩展点和定制化",
- "description": "The label for category '扩展点和定制化' in sidebar 'developer'"
- },
- "sidebar.developer.category.extension-points-server": {
- "message": "服务端",
- "description": "The label for category '服务端' in sidebar 'developer'"
- },
- "sidebar.developer.category.extension-points-ui": {
- "message": "UI",
- "description": "The label for category 'UI' in sidebar 'developer'"
- },
- "sidebar.developer.category.与其他插件交互": {
- "message": "与其他插件交互",
- "description": "The label for category '与其他插件交互' in sidebar 'developer'"
- },
- "sidebar.developer.category.安全和权限管理": {
- "message": "安全和权限管理",
- "description": "The label for category '安全和权限管理' in sidebar 'developer'"
- },
- "sidebar.developer.category.案例和最佳实践": {
- "message": "案例和最佳实践",
- "description": "The label for category '案例和最佳实践' in sidebar 'developer'"
- },
- "sidebar.developer.category.主题开发": {
- "message": "主题开发",
- "description": "The label for category '主题开发' in sidebar 'developer'"
- },
- "sidebar.developer.category.模板编写": {
- "message": "模板编写",
- "description": "The label for category '模板编写' in sidebar 'developer'"
- },
- "sidebar.developer.category.Finder API": {
- "message": "Finder API",
- "description": "The label for category 'Finder API' in sidebar 'developer'"
- },
- "sidebar.developer.category.RESTful API": {
- "message": "RESTful API",
- "description": "The label for category 'RESTful API' in sidebar 'developer'"
- },
- "sidebar.developer.category.应用市场": {
- "message": "应用市场",
- "description": "The label for category '应用市场' in sidebar 'developer'"
- },
- "sidebar.developer.category.附录": {
- "message": "附录",
- "description": "The label for category '附录' in sidebar 'developer'"
- }
-}
diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-2.26.json b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-2.26.json
deleted file mode 100644
index 6402cd69..00000000
--- a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-2.26.json
+++ /dev/null
@@ -1,126 +0,0 @@
-{
- "version.label": {
- "message": "2.26",
- "description": "The label for version 2.26"
- },
- "sidebar.tutorial.category.入门": {
- "message": "入门",
- "description": "The label for category '入门' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.category.安装指南": {
- "message": "安装指南",
- "description": "The label for category '安装指南' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.category.云平台": {
- "message": "云平台",
- "description": "The label for category '云平台' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.category.其他指南": {
- "message": "其他指南",
- "description": "The label for category '其他指南' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.category.用户指南": {
- "message": "用户指南",
- "description": "The label for category '用户指南' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.category.商城": {
- "message": "商城",
- "description": "The label for category '商城' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.category.参与贡献": {
- "message": "参与贡献",
- "description": "The label for category '参与贡献' in sidebar 'tutorial'"
- },
- "sidebar.tutorial.link.Zeabur 一键部署": {
- "message": "Zeabur 一键部署",
- "description": "The label for link 'Zeabur 一键部署' in sidebar 'tutorial', linking to 'https://zeabur.com/docs/zh-CN/marketplace/halo'"
- },
- "sidebar.tutorial.link.Rainbond 一键部署": {
- "message": "Rainbond 一键部署",
- "description": "The label for link 'Rainbond 一键部署' in sidebar 'tutorial', linking to 'https://hub.grapps.cn/marketplace/apps/1255'"
- },
- "sidebar.tutorial.link.更新日志": {
- "message": "更新日志",
- "description": "The label for link '更新日志' in sidebar 'tutorial', linking to 'https://releases.halo.run/changelog'"
- },
- "sidebar.developer.category.系统开发": {
- "message": "系统开发",
- "description": "The label for category '系统开发' in sidebar 'developer'"
- },
- "sidebar.developer.category.插件开发": {
- "message": "插件开发",
- "description": "The label for category '插件开发' in sidebar 'developer'"
- },
- "sidebar.developer.category.基础": {
- "message": "基础",
- "description": "The label for category '基础' in sidebar 'developer'"
- },
- "sidebar.developer.category.basics-server": {
- "message": "服务端",
- "description": "The label for category '服务端' in sidebar 'developer'"
- },
- "sidebar.developer.category.basics-ui": {
- "message": "UI",
- "description": "The label for category 'UI' in sidebar 'developer'"
- },
- "sidebar.developer.category.API 参考": {
- "message": "API 参考",
- "description": "The label for category 'API 参考' in sidebar 'developer'"
- },
- "sidebar.developer.category.api-reference-server": {
- "message": "服务端",
- "description": "The label for category '服务端' in sidebar 'developer'"
- },
- "sidebar.developer.category.api-reference-ui": {
- "message": "UI",
- "description": "The label for category 'UI' in sidebar 'developer'"
- },
- "sidebar.developer.category.组件": {
- "message": "组件",
- "description": "The label for category '组件' in sidebar 'developer'"
- },
- "sidebar.developer.category.扩展点和定制化": {
- "message": "扩展点和定制化",
- "description": "The label for category '扩展点和定制化' in sidebar 'developer'"
- },
- "sidebar.developer.category.extension-points-server": {
- "message": "服务端",
- "description": "The label for category '服务端' in sidebar 'developer'"
- },
- "sidebar.developer.category.extension-points-ui": {
- "message": "UI",
- "description": "The label for category 'UI' in sidebar 'developer'"
- },
- "sidebar.developer.category.与其他插件交互": {
- "message": "与其他插件交互",
- "description": "The label for category '与其他插件交互' in sidebar 'developer'"
- },
- "sidebar.developer.category.安全和权限管理": {
- "message": "安全和权限管理",
- "description": "The label for category '安全和权限管理' in sidebar 'developer'"
- },
- "sidebar.developer.category.案例和最佳实践": {
- "message": "案例和最佳实践",
- "description": "The label for category '案例和最佳实践' in sidebar 'developer'"
- },
- "sidebar.developer.category.主题开发": {
- "message": "主题开发",
- "description": "The label for category '主题开发' in sidebar 'developer'"
- },
- "sidebar.developer.category.模板编写": {
- "message": "模板编写",
- "description": "The label for category '模板编写' in sidebar 'developer'"
- },
- "sidebar.developer.category.Finder API": {
- "message": "Finder API",
- "description": "The label for category 'Finder API' in sidebar 'developer'"
- },
- "sidebar.developer.category.RESTful API": {
- "message": "RESTful API",
- "description": "The label for category 'RESTful API' in sidebar 'developer'"
- },
- "sidebar.developer.category.应用市场": {
- "message": "应用市场",
- "description": "The label for category '应用市场' in sidebar 'developer'"
- }
-}
diff --git a/i18n/zh-Hans/docusaurus-theme-classic/footer.json b/i18n/zh-Hans/docusaurus-theme-classic/footer.json
deleted file mode 100644
index 14c896d9..00000000
--- a/i18n/zh-Hans/docusaurus-theme-classic/footer.json
+++ /dev/null
@@ -1,58 +0,0 @@
-{
- "link.title.关于": {
- "message": "关于",
- "description": "The title of the footer links column with title=关于 in the footer"
- },
- "link.title.社区": {
- "message": "社区",
- "description": "The title of the footer links column with title=社区 in the footer"
- },
- "link.item.label.官网": {
- "message": "官网",
- "description": "The label of footer link with label=官网 linking to https://www.halo.run"
- },
- "link.item.label.应用市场": {
- "message": "应用市场",
- "description": "The label of footer link with label=应用市场 linking to https://www.halo.run/store/apps"
- },
- "link.item.label.GitHub 组织": {
- "message": "GitHub 组织",
- "description": "The label of footer link with label=GitHub 组织 linking to https://github.com/halo-dev"
- },
- "link.item.label.Gitee 组织": {
- "message": "Gitee 组织",
- "description": "The label of footer link with label=Gitee 组织 linking to https://gitee.com/halo-dev"
- },
- "link.item.label.版本发布": {
- "message": "版本发布",
- "description": "The label of footer link with label=版本发布 linking to https://releases.halo.run"
- },
- "link.item.label.Server Status": {
- "message": "Server Status",
- "description": "The label of footer link with label=Server Status linking to https://status.halo.run"
- },
- "link.item.label.官方论坛": {
- "message": "官方论坛",
- "description": "The label of footer link with label=官方论坛 linking to https://bbs.halo.run"
- },
- "link.item.label.微信公众号": {
- "message": "微信公众号",
- "description": "The label of footer link with label=微信公众号 linking to https://www.halo.run/upload/2021/03/B3C27F16-4890-4633-81CC-20BA4B28F94F-2415126255c749b290312ca22d9bdeb0.jpeg"
- },
- "link.item.label.GitHub Issues": {
- "message": "GitHub Issues",
- "description": "The label of footer link with label=GitHub Issues linking to https://github.com/halo-dev/halo/issues"
- },
- "link.item.label.Telegram Channel": {
- "message": "Telegram Channel",
- "description": "The label of footer link with label=Telegram Channel linking to https://t.me/halo_dev"
- },
- "link.item.label.Telegram Group": {
- "message": "Telegram Group",
- "description": "The label of footer link with label=Telegram Group linking to https://t.me/HaloBlog"
- },
- "copyright": {
- "message": "Copyright © 2026 凌霞软件. Built with Docusaurus.",
- "description": "The footer copyright"
- }
-}
diff --git a/i18n/zh-Hans/docusaurus-theme-classic/navbar.json b/i18n/zh-Hans/docusaurus-theme-classic/navbar.json
deleted file mode 100644
index ab26e3bf..00000000
--- a/i18n/zh-Hans/docusaurus-theme-classic/navbar.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
- "title": {
- "message": "Halo 文档",
- "description": "The title in the navbar"
- },
- "logo.alt": {
- "message": "Halo Logo",
- "description": "The alt text of navbar logo"
- },
- "item.label.使用指南": {
- "message": "使用指南",
- "description": "Navbar item with label 使用指南"
- },
- "item.label.开发者指南": {
- "message": "开发者指南",
- "description": "Navbar item with label 开发者指南"
- },
- "item.label.官网": {
- "message": "官网",
- "description": "Navbar item with label 官网"
- },
- "item.label.论坛": {
- "message": "论坛",
- "description": "Navbar item with label 论坛"
- },
- "item.label.版本对比": {
- "message": "版本对比",
- "description": "Navbar item with label 版本对比"
- },
- "item.label.GitHub": {
- "message": "GitHub",
- "description": "Navbar item with label GitHub"
- }
-}
diff --git a/netlify.toml b/netlify.toml
deleted file mode 100644
index 2ff3ab0f..00000000
--- a/netlify.toml
+++ /dev/null
@@ -1,7 +0,0 @@
-[build.environment]
- NODE_VERSION = "16"
- NPM_FLAGS = "--version"
-
-[build]
- publish = "build"
- command = "npx pnpm install --store=node_modules/.pnpm-store && npx pnpm build"
\ No newline at end of file
diff --git a/package.json b/package.json
index 679e2476..6da61343 100644
--- a/package.json
+++ b/package.json
@@ -1,65 +1,42 @@
{
- "name": "@halo-dev/docs",
- "version": "0.0.0",
"private": true,
+ "type": "module",
"scripts": {
- "build": "docusaurus build",
- "clear": "docusaurus clear",
- "deploy": "docusaurus deploy",
- "docusaurus": "docusaurus",
- "lint": "markdownlint-cli2 \"./docs/**/*.md\" \"./versioned_docs/**/*.md\"",
- "prepare": "husky install",
- "serve": "docusaurus serve",
- "start": "docusaurus start",
- "swizzle": "docusaurus swizzle",
- "write-heading-ids": "docusaurus write-heading-ids",
- "write-translations": "docusaurus write-translations"
- },
- "browserslist": {
- "production": [
- ">0.5%",
- "not dead",
- "not op_mini all"
- ],
- "development": [
- "last 1 chrome version",
- "last 1 firefox version",
- "last 1 safari version"
- ]
+ "build": "rspress build",
+ "check": "biome check --write",
+ "check:ci": "biome ci",
+ "dev": "rspress dev",
+ "format": "biome format --write",
+ "preview": "rspress preview"
},
"dependencies": {
- "@docusaurus/core": "3.10.2",
- "@docusaurus/faster": "3.10.2",
- "@docusaurus/plugin-client-redirects": "3.10.2",
- "@docusaurus/preset-classic": "3.10.2",
- "@docusaurus/theme-classic": "3.10.2",
- "@docusaurus/theme-common": "3.10.2",
- "@docusaurus/theme-mermaid": "3.10.2",
- "@mdx-js/react": "^3.1.1",
- "@shikijs/rehype": "^4.4.3",
- "@shikijs/transformers": "^4.4.3",
- "@svgr/webpack": "^5.5.0",
- "clsx": "^1.2.1",
- "docusaurus-plugin-image-zoom": "^3.0.1",
- "file-loader": "^6.2.0",
- "hast-util-is-element": "1.1.0",
- "meilisearch-docsearch": "^0.8.0",
- "prism-react-renderer": "^2.4.1",
- "react": "^19.2.8",
- "react-dom": "^19.2.8",
- "shiki": "^4.4.3",
- "url-loader": "^4.1.1"
+ "@rspress/core": "^2.0.21",
+ "rspress-plugin-file-tree": "^1.0.5",
+ "rspress-plugin-google-analytics": "^1.0.0",
+ "rspress-plugin-mermaid": "^1.0.1"
},
"devDependencies": {
- "@docusaurus/module-type-aliases": "3.10.2",
- "docusaurus-plugin-sass": "^0.2.6",
- "husky": "^7.0.4",
- "markdownlint": "^0.25.1",
- "markdownlint-cli2": "^0.4.0",
- "sass-embedded": "^1.102.0"
- },
- "engines": {
- "node": ">=18.0"
+ "@biomejs/biome": "2.5.8",
+ "@iconify-json/mingcute": "^1.2.8",
+ "@iconify-json/ph": "^1.2.2",
+ "@iconify-json/simple-icons": "^1.2.93",
+ "@rsbuild/plugin-sass": "^2.0.1",
+ "@rspress/plugin-sitemap": "^2.0.21",
+ "@svgr/core": "^8.1.0",
+ "@svgr/plugin-jsx": "^8.1.0",
+ "@types/node": "^22.20.1",
+ "@types/react": "^19.2.18",
+ "@types/react-dom": "^19.2.5",
+ "react": "^19.2.8",
+ "react-dom": "^19.2.8",
+ "typescript": "^6.0.3",
+ "unplugin-icons": "^23.0.1"
},
- "packageManager": "pnpm@10.34.5"
+ "devEngines": {
+ "packageManager": {
+ "name": "pnpm",
+ "version": "11.24.0",
+ "onFail": "download"
+ }
+ }
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 25d68597..888006bf 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -1,13599 +1,4447 @@
+---
lockfileVersion: '9.0'
-settings:
- autoInstallPeers: true
- excludeLinksFromLockfile: false
-
importers:
.:
- dependencies:
- '@docusaurus/core':
- specifier: 3.10.2
- version: 3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)
- '@docusaurus/faster':
- specifier: 3.10.2
- version: 3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))
- '@docusaurus/plugin-client-redirects':
- specifier: 3.10.2
- version: 3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)
- '@docusaurus/preset-classic':
- specifier: 3.10.2
- version: 3.10.2(@algolia/client-search@5.46.2)(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(@types/react@18.3.12)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(search-insights@2.17.1)(typescript@5.6.3)
- '@docusaurus/theme-classic':
- specifier: 3.10.2
- version: 3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@rspack/core@1.7.11)(@swc/core@1.16.0)(@types/react@18.3.12)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)
- '@docusaurus/theme-common':
- specifier: 3.10.2
- version: 3.10.2(@docusaurus/plugin-content-docs@3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3))(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@docusaurus/theme-mermaid':
- specifier: 3.10.2
- version: 3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@docusaurus/plugin-content-docs@3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)
- '@mdx-js/react':
- specifier: ^3.1.1
- version: 3.1.1(@types/react@18.3.12)(react@19.2.8)
- '@shikijs/rehype':
- specifier: ^4.4.3
- version: 4.4.3
- '@shikijs/transformers':
- specifier: ^4.4.3
- version: 4.4.3
- '@svgr/webpack':
- specifier: ^5.5.0
- version: 5.5.0
- clsx:
- specifier: ^1.2.1
- version: 1.2.1
- docusaurus-plugin-image-zoom:
- specifier: ^3.0.1
- version: 3.0.1(@docusaurus/theme-classic@3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@rspack/core@1.7.11)(@swc/core@1.16.0)(@types/react@18.3.12)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3))
- file-loader:
- specifier: ^6.2.0
- version: 6.2.0(webpack@5.95.0(@swc/core@1.16.0))
- hast-util-is-element:
- specifier: 1.1.0
- version: 1.1.0
- meilisearch-docsearch:
- specifier: ^0.8.0
- version: 0.8.0
- prism-react-renderer:
- specifier: ^2.4.1
- version: 2.4.1(react@19.2.8)
- react:
- specifier: ^19.2.8
- version: 19.2.8
- react-dom:
- specifier: ^19.2.8
- version: 19.2.8(react@19.2.8)
- shiki:
- specifier: ^4.4.3
- version: 4.4.3
- url-loader:
- specifier: ^4.1.1
- version: 4.1.1(file-loader@6.2.0(webpack@5.95.0(@swc/core@1.16.0)))(webpack@5.95.0(@swc/core@1.16.0))
- devDependencies:
- '@docusaurus/module-type-aliases':
- specifier: 3.10.2
- version: 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- docusaurus-plugin-sass:
- specifier: ^0.2.6
- version: 0.2.6(@docusaurus/core@3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3))(@rspack/core@1.7.11)(sass-embedded@1.102.0)(sass@1.102.0)(webpack@5.95.0(@swc/core@1.16.0))
- husky:
- specifier: ^7.0.4
- version: 7.0.4
- markdownlint:
- specifier: ^0.25.1
- version: 0.25.1
- markdownlint-cli2:
- specifier: ^0.4.0
- version: 0.4.0
- sass-embedded:
- specifier: ^1.102.0
- version: 1.102.0
+ configDependencies: {}
+ packageManagerDependencies:
+ '@pnpm/exe':
+ specifier: 11.24.0
+ version: 11.24.0
+ pnpm:
+ specifier: 11.24.0
+ version: 11.24.0
packages:
- '@11ty/gray-matter@1.0.0':
- resolution: {integrity: sha512-7mJJl+wf1AByoT0PknQiQfOPnVNT4fevGrUBVWO4HXsnYn1aQPyRyrELYrNUFleUBM++KzMKN6QaxHPk0t/6/g==}
- engines: {node: '>=11'}
+ '@pnpm/exe@11.24.0':
+ resolution: {integrity: sha512-yCZWlhNOB3GS0I2uZC/CggwGZ+TLVLbOuBcMbVWXKFYJOg/0gnQw8eIN6YZLA+eeSvfHEvS79IDdbwu5CMQR0g==}
+ hasBin: true
- '@algolia/abtesting@1.12.2':
- resolution: {integrity: sha512-oWknd6wpfNrmRcH0vzed3UPX0i17o4kYLM5OMITyMVM2xLgaRbIafoxL0e8mcrNNb0iORCJA0evnNDKRYth5WQ==}
- engines: {node: '>= 14.0.0'}
+ '@pnpm/linux-arm64@11.24.0':
+ resolution: {integrity: sha512-wgAF82SnMfWU8/xb0VLszKJYqL+MDHMMGz42s4jW+GIFUGYna/xG5VXUxgcv2FaZhJ2GbyZVUf2f/UJs6nb+zA==}
+ cpu: [arm64]
+ os: [linux]
- '@algolia/autocomplete-core@1.17.9':
- resolution: {integrity: sha512-O7BxrpLDPJWWHv/DLA9DRFWs+iY1uOJZkqUwjS5HSZAGcl0hIVCQ97LTLewiZmZ402JYUrun+8NqFP+hCknlbQ==}
+ '@pnpm/linux-x64@11.24.0':
+ resolution: {integrity: sha512-94e4GRvFB5hEwr9subLHLF2q3+DduKFPh2FE0+F7fgqt1Bs86gDxjJ7bbQCpTX2X4j6cUTA5Hc0HFzMz4xKnaA==}
+ cpu: [x64]
+ os: [linux]
- '@algolia/autocomplete-core@1.19.8':
- resolution: {integrity: sha512-3YEorYg44niXcm7gkft3nXYItHd44e8tmh4D33CTszPgP0QWkaLEaFywiNyJBo7UL/mqObA/G9RYuU7R8tN1IA==}
+ '@pnpm/linuxstatic-arm64@11.24.0':
+ resolution: {integrity: sha512-1Vwk+M5fzjg364SDZfrtaZfthsy1THS9eSdH7dpBaG0l3HbLusQrh8labRlpMmK8KyQXcI1FvYLzPZVuAGGPng==}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
- '@algolia/autocomplete-plugin-algolia-insights@1.17.9':
- resolution: {integrity: sha512-u1fEHkCbWF92DBeB/KHeMacsjsoI0wFhjZtlCq2ddZbAehshbZST6Hs0Avkc0s+4UyBGbMDnSuXHLuvRWK5iDQ==}
- peerDependencies:
- search-insights: '>= 1 < 3'
+ '@pnpm/linuxstatic-x64@11.24.0':
+ resolution: {integrity: sha512-oyPChWYdJpJMDnwtCFNzupD+GEO4G6DDMARuZfBrCUgqRm1h2KDcVCqk9IbfFBfxWdK+bVHJpA9Qp3nlL6/thw==}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
- '@algolia/autocomplete-plugin-algolia-insights@1.19.8':
- resolution: {integrity: sha512-ZvJWO8ZZJDpc1LNM2TTBdmQsZBLMR4rU5iNR2OYvEeFBiaf/0ESnRSSLQbryarJY4SVxtoz6A2ZtDMNM+iQEAA==}
- peerDependencies:
- search-insights: '>= 1 < 3'
+ '@pnpm/macos-arm64@11.24.0':
+ resolution: {integrity: sha512-nBzaOkR4D7HiuJRwlpk1aqaA/Wai11/zuCZjH5ZUe6fq86UWsqME0u3/F5K0j7yN8X2h7iKiApAaVmbfYMIc6A==}
+ cpu: [arm64]
+ os: [darwin]
- '@algolia/autocomplete-preset-algolia@1.17.9':
- resolution: {integrity: sha512-Na1OuceSJeg8j7ZWn5ssMu/Ax3amtOwk76u4h5J4eK2Nx2KB5qt0Z4cOapCsxot9VcEN11ADV5aUSlQF4RhGjQ==}
- peerDependencies:
- '@algolia/client-search': '>= 4.9.1 < 6'
- algoliasearch: '>= 4.9.1 < 6'
+ '@pnpm/win-arm64@11.24.0':
+ resolution: {integrity: sha512-ECLc0U/5cnXRkBrpO/dW+x1Y+a2CCqS4l171H7+YOQNcSaCAWlezP3YNvuO+5awwGWHIW7KEXbBruu5n50zVuA==}
+ cpu: [arm64]
+ os: [win32]
- '@algolia/autocomplete-shared@1.17.9':
- resolution: {integrity: sha512-iDf05JDQ7I0b7JEA/9IektxN/80a2MZ1ToohfmNS3rfeuQnIKI3IJlIafD0xu4StbtQTghx9T3Maa97ytkXenQ==}
- peerDependencies:
- '@algolia/client-search': '>= 4.9.1 < 6'
- algoliasearch: '>= 4.9.1 < 6'
+ '@pnpm/win-x64@11.24.0':
+ resolution: {integrity: sha512-2wgDrs2SiyBoU6Yw1A8QLLqBABWHwuMMQOU85k7ZMut/W94u/oizrDQiyfJyW9XzYCz4Dn2iw7OHx+3R2x7mEQ==}
+ cpu: [x64]
+ os: [win32]
- '@algolia/autocomplete-shared@1.19.8':
- resolution: {integrity: sha512-h5hf2t8ejF6vlOgvLaZzQbWs5SyH2z4PAWygNAvvD/2RI29hdQ54ldUGwqVuj9Srs+n8XUKTPUqb7fvhBhQrnQ==}
- peerDependencies:
- '@algolia/client-search': '>= 4.9.1 < 6'
- algoliasearch: '>= 4.9.1 < 6'
+ '@reflink/reflink-darwin-arm64@0.1.19':
+ resolution: {integrity: sha512-ruy44Lpepdk1FqDz38vExBY/PVUsjxZA+chd9wozjUH9JjuDT/HEaQYA6wYN9mf041l0yLVar6BCZuWABJvHSA==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
- '@algolia/client-abtesting@5.46.2':
- resolution: {integrity: sha512-oRSUHbylGIuxrlzdPA8FPJuwrLLRavOhAmFGgdAvMcX47XsyM+IOGa9tc7/K5SPvBqn4nhppOCEz7BrzOPWc4A==}
- engines: {node: '>= 14.0.0'}
+ '@reflink/reflink-darwin-x64@0.1.19':
+ resolution: {integrity: sha512-By85MSWrMZa+c26TcnAy8SDk0sTUkYlNnwknSchkhHpGXOtjNDUOxJE9oByBnGbeuIE1PiQsxDG3Ud+IVV9yuA==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
- '@algolia/client-analytics@5.46.2':
- resolution: {integrity: sha512-EPBN2Oruw0maWOF4OgGPfioTvd+gmiNwx0HmD9IgmlS+l75DatcBkKOPNJN+0z3wBQWUO5oq602ATxIfmTQ8bA==}
- engines: {node: '>= 14.0.0'}
+ '@reflink/reflink-linux-arm64-gnu@0.1.19':
+ resolution: {integrity: sha512-7P+er8+rP9iNeN+bfmccM4hTAaLP6PQJPKWSA4iSk2bNvo6KU6RyPgYeHxXmzNKzPVRcypZQTpFgstHam6maVg==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
- '@algolia/client-common@5.46.2':
- resolution: {integrity: sha512-Hj8gswSJNKZ0oyd0wWissqyasm+wTz1oIsv5ZmLarzOZAp3vFEda8bpDQ8PUhO+DfkbiLyVnAxsPe4cGzWtqkg==}
- engines: {node: '>= 14.0.0'}
+ '@reflink/reflink-linux-arm64-musl@0.1.19':
+ resolution: {integrity: sha512-37iO/Dp6m5DDaC2sf3zPtx/hl9FV3Xze4xoYidrxxS9bgP3S8ALroxRK6xBG/1TtfXKTvolvp+IjrUU6ujIGmA==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
- '@algolia/client-insights@5.46.2':
- resolution: {integrity: sha512-6dBZko2jt8FmQcHCbmNLB0kCV079Mx/DJcySTL3wirgDBUH7xhY1pOuUTLMiGkqM5D8moVZTvTdRKZUJRkrwBA==}
- engines: {node: '>= 14.0.0'}
+ '@reflink/reflink-linux-x64-gnu@0.1.19':
+ resolution: {integrity: sha512-jbI8jvuYCaA3MVUdu8vLoLAFqC+iNMpiSuLbxlAgg7x3K5bsS8nOpTRnkLF7vISJ+rVR8W+7ThXlXlUQ93ulkw==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
- '@algolia/client-personalization@5.46.2':
- resolution: {integrity: sha512-1waE2Uqh/PHNeDXGn/PM/WrmYOBiUGSVxAWqiJIj73jqPqvfzZgzdakHscIVaDl6Cp+j5dwjsZ5LCgaUr6DtmA==}
- engines: {node: '>= 14.0.0'}
+ '@reflink/reflink-linux-x64-musl@0.1.19':
+ resolution: {integrity: sha512-e9FBWDe+lv7QKAwtKOt6A2W/fyy/aEEfr0g6j/hWzvQcrzHCsz07BNQYlNOjTfeytrtLU7k449H1PI95jA4OjQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
- '@algolia/client-query-suggestions@5.46.2':
- resolution: {integrity: sha512-EgOzTZkyDcNL6DV0V/24+oBJ+hKo0wNgyrOX/mePBM9bc9huHxIY2352sXmoZ648JXXY2x//V1kropF/Spx83w==}
- engines: {node: '>= 14.0.0'}
+ '@reflink/reflink-win32-arm64-msvc@0.1.19':
+ resolution: {integrity: sha512-09PxnVIQcd+UOn4WAW73WU6PXL7DwGS6wPlkMhMg2zlHHG65F3vHepOw06HFCq+N42qkaNAc8AKIabWvtk6cIQ==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [win32]
- '@algolia/client-search@5.46.2':
- resolution: {integrity: sha512-ZsOJqu4HOG5BlvIFnMU0YKjQ9ZI6r3C31dg2jk5kMWPSdhJpYL9xa5hEe7aieE+707dXeMI4ej3diy6mXdZpgA==}
- engines: {node: '>= 14.0.0'}
+ '@reflink/reflink-win32-x64-msvc@0.1.19':
+ resolution: {integrity: sha512-E//yT4ni2SyhwP8JRjVGWr3cbnhWDiPLgnQ66qqaanjjnMiu3O/2tjCPQXlcGc/DEYofpDc9fvhv6tALQsMV9w==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [win32]
- '@algolia/events@4.0.1':
- resolution: {integrity: sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==}
+ '@reflink/reflink@0.1.19':
+ resolution: {integrity: sha512-DmCG8GzysnCZ15bres3N5AHCmwBwYgp0As6xjhQ47rAUTUXxJiK+lLUxaGsX3hd/30qUpVElh05PbGuxRPgJwA==}
+ engines: {node: '>= 10'}
- '@algolia/ingestion@1.46.2':
- resolution: {integrity: sha512-1Uw2OslTWiOFDtt83y0bGiErJYy5MizadV0nHnOoHFWMoDqWW0kQoMFI65pXqRSkVvit5zjXSLik2xMiyQJDWQ==}
- engines: {node: '>= 14.0.0'}
+ detect-libc@2.1.2:
+ resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
+ engines: {node: '>=8'}
- '@algolia/monitoring@1.46.2':
- resolution: {integrity: sha512-xk9f+DPtNcddWN6E7n1hyNNsATBCHIqAvVGG2EAGHJc4AFYL18uM/kMTiOKXE/LKDPyy1JhIerrh9oYb7RBrgw==}
- engines: {node: '>= 14.0.0'}
+ pnpm@11.24.0:
+ resolution: {integrity: sha512-vSfjRel23LC+C3oSKCF7BJqBfiGx81XJDb59xGZxiVqLwebQbCRVRQXqk+oLRfSJon7Bv7yN5qlln8oPFvoAAA==}
+ engines: {node: '>=22.13'}
+ hasBin: true
- '@algolia/recommend@5.46.2':
- resolution: {integrity: sha512-NApbTPj9LxGzNw4dYnZmj2BoXiAc8NmbbH6qBNzQgXklGklt/xldTvu+FACN6ltFsTzoNU6j2mWNlHQTKGC5+Q==}
- engines: {node: '>= 14.0.0'}
+snapshots:
- '@algolia/requester-browser-xhr@5.46.2':
- resolution: {integrity: sha512-ekotpCwpSp033DIIrsTpYlGUCF6momkgupRV/FA3m62SreTSZUKjgK6VTNyG7TtYfq9YFm/pnh65bATP/ZWJEg==}
- engines: {node: '>= 14.0.0'}
+ '@pnpm/exe@11.24.0':
+ dependencies:
+ '@reflink/reflink': 0.1.19
+ detect-libc: 2.1.2
+ optionalDependencies:
+ '@pnpm/linux-arm64': 11.24.0
+ '@pnpm/linux-x64': 11.24.0
+ '@pnpm/linuxstatic-arm64': 11.24.0
+ '@pnpm/linuxstatic-x64': 11.24.0
+ '@pnpm/macos-arm64': 11.24.0
+ '@pnpm/win-arm64': 11.24.0
+ '@pnpm/win-x64': 11.24.0
+
+ '@pnpm/linux-arm64@11.24.0':
+ optional: true
- '@algolia/requester-fetch@5.46.2':
- resolution: {integrity: sha512-gKE+ZFi/6y7saTr34wS0SqYFDcjHW4Wminv8PDZEi0/mE99+hSrbKgJWxo2ztb5eqGirQTgIh1AMVacGGWM1iw==}
- engines: {node: '>= 14.0.0'}
+ '@pnpm/linux-x64@11.24.0':
+ optional: true
- '@algolia/requester-node-http@5.46.2':
- resolution: {integrity: sha512-ciPihkletp7ttweJ8Zt+GukSVLp2ANJHU+9ttiSxsJZThXc4Y2yJ8HGVWesW5jN1zrsZsezN71KrMx/iZsOYpg==}
- engines: {node: '>= 14.0.0'}
+ '@pnpm/linuxstatic-arm64@11.24.0':
+ optional: true
- '@ampproject/remapping@2.3.0':
- resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
- engines: {node: '>=6.0.0'}
+ '@pnpm/linuxstatic-x64@11.24.0':
+ optional: true
- '@antfu/install-pkg@0.4.1':
- resolution: {integrity: sha512-T7yB5QNG29afhWVkVq7XeIMBa5U/vs9mX69YqayXypPRmYzUmzwnYltplHmPtZ4HPCn+sQKeXW8I47wCbuBOjw==}
+ '@pnpm/macos-arm64@11.24.0':
+ optional: true
- '@antfu/utils@0.7.10':
- resolution: {integrity: sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==}
+ '@pnpm/win-arm64@11.24.0':
+ optional: true
- '@babel/code-frame@7.26.0':
- resolution: {integrity: sha512-INCKxTtbXtcNbUZ3YXutwMpEleqttcswhAdee7dhuoVrD2cnuc3PqtERBtxkX5nziX9vnBL8WXmSGwv8CuPV6g==}
- engines: {node: '>=6.9.0'}
+ '@pnpm/win-x64@11.24.0':
+ optional: true
- '@babel/compat-data@7.26.0':
- resolution: {integrity: sha512-qETICbZSLe7uXv9VE8T/RWOdIE5qqyTucOt4zLYMafj2MRO271VGgLd4RACJMeBO37UPWhXiKMBk7YlJ0fOzQA==}
- engines: {node: '>=6.9.0'}
+ '@reflink/reflink-darwin-arm64@0.1.19':
+ optional: true
- '@babel/core@7.26.0':
- resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==}
- engines: {node: '>=6.9.0'}
+ '@reflink/reflink-darwin-x64@0.1.19':
+ optional: true
- '@babel/generator@7.26.0':
- resolution: {integrity: sha512-/AIkAmInnWwgEAJGQr9vY0c66Mj6kjkE2ZPB1PurTRaRAh3U+J45sAQMjQDJdh4WbR3l0x5xkimXBKyBXXAu2w==}
- engines: {node: '>=6.9.0'}
+ '@reflink/reflink-linux-arm64-gnu@0.1.19':
+ optional: true
- '@babel/helper-annotate-as-pure@7.25.9':
- resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==}
- engines: {node: '>=6.9.0'}
+ '@reflink/reflink-linux-arm64-musl@0.1.19':
+ optional: true
- '@babel/helper-builder-binary-assignment-operator-visitor@7.25.9':
- resolution: {integrity: sha512-C47lC7LIDCnz0h4vai/tpNOI95tCd5ZT3iBt/DBH5lXKHZsyNQv18yf1wIIg2ntiQNgmAvA+DgZ82iW8Qdym8g==}
- engines: {node: '>=6.9.0'}
+ '@reflink/reflink-linux-x64-gnu@0.1.19':
+ optional: true
- '@babel/helper-compilation-targets@7.25.9':
- resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==}
- engines: {node: '>=6.9.0'}
+ '@reflink/reflink-linux-x64-musl@0.1.19':
+ optional: true
- '@babel/helper-create-class-features-plugin@7.25.9':
- resolution: {integrity: sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
+ '@reflink/reflink-win32-arm64-msvc@0.1.19':
+ optional: true
- '@babel/helper-create-regexp-features-plugin@7.25.9':
- resolution: {integrity: sha512-ORPNZ3h6ZRkOyAa/SaHU+XsLZr0UQzRwuDQ0cczIA17nAzZ+85G5cVkOJIj7QavLZGSe8QXUmNFxSZzjcZF9bw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
+ '@reflink/reflink-win32-x64-msvc@0.1.19':
+ optional: true
- '@babel/helper-define-polyfill-provider@0.6.2':
- resolution: {integrity: sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==}
- peerDependencies:
- '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+ '@reflink/reflink@0.1.19':
+ optionalDependencies:
+ '@reflink/reflink-darwin-arm64': 0.1.19
+ '@reflink/reflink-darwin-x64': 0.1.19
+ '@reflink/reflink-linux-arm64-gnu': 0.1.19
+ '@reflink/reflink-linux-arm64-musl': 0.1.19
+ '@reflink/reflink-linux-x64-gnu': 0.1.19
+ '@reflink/reflink-linux-x64-musl': 0.1.19
+ '@reflink/reflink-win32-arm64-msvc': 0.1.19
+ '@reflink/reflink-win32-x64-msvc': 0.1.19
- '@babel/helper-member-expression-to-functions@7.25.9':
- resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==}
- engines: {node: '>=6.9.0'}
+ detect-libc@2.1.2: {}
- '@babel/helper-module-imports@7.25.9':
- resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==}
- engines: {node: '>=6.9.0'}
+ pnpm@11.24.0: {}
- '@babel/helper-module-transforms@7.26.0':
- resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
+---
+lockfileVersion: '9.0'
- '@babel/helper-optimise-call-expression@7.25.9':
- resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==}
- engines: {node: '>=6.9.0'}
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
- '@babel/helper-plugin-utils@7.25.9':
- resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==}
- engines: {node: '>=6.9.0'}
+importers:
- '@babel/helper-remap-async-to-generator@7.25.9':
- resolution: {integrity: sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
+ .:
+ dependencies:
+ '@rspress/core':
+ specifier: ^2.0.21
+ version: 2.0.21(@rspack/core@2.1.10(@swc/helpers@0.5.23))(micromark-util-types@2.0.2)(micromark@4.0.2(supports-color@9.4.0))(supports-color@9.4.0)
+ rspress-plugin-file-tree:
+ specifier: ^1.0.5
+ version: 1.0.5(@rspress/core@2.0.21(@rspack/core@2.1.10(@swc/helpers@0.5.23))(micromark-util-types@2.0.2)(micromark@4.0.2(supports-color@9.4.0))(supports-color@9.4.0))(supports-color@9.4.0)
+ rspress-plugin-google-analytics:
+ specifier: ^1.0.0
+ version: 1.0.0(@rspress/core@2.0.21(@rspack/core@2.1.10(@swc/helpers@0.5.23))(micromark-util-types@2.0.2)(micromark@4.0.2(supports-color@9.4.0))(supports-color@9.4.0))(supports-color@9.4.0)
+ rspress-plugin-mermaid:
+ specifier: ^1.0.1
+ version: 1.0.1(@rspress/core@2.0.21(@rspack/core@2.1.10(@swc/helpers@0.5.23))(micromark-util-types@2.0.2)(micromark@4.0.2(supports-color@9.4.0))(supports-color@9.4.0))(supports-color@9.4.0)
+ devDependencies:
+ '@biomejs/biome':
+ specifier: 2.5.8
+ version: 2.5.8
+ '@iconify-json/mingcute':
+ specifier: ^1.2.8
+ version: 1.2.8
+ '@iconify-json/ph':
+ specifier: ^1.2.2
+ version: 1.2.2
+ '@iconify-json/simple-icons':
+ specifier: ^1.2.93
+ version: 1.2.93
+ '@rsbuild/plugin-sass':
+ specifier: ^2.0.1
+ version: 2.0.1(@rsbuild/core@2.1.13)
+ '@rspress/plugin-sitemap':
+ specifier: ^2.0.21
+ version: 2.0.21(@rspress/core@2.0.21(@rspack/core@2.1.10(@swc/helpers@0.5.23))(micromark-util-types@2.0.2)(micromark@4.0.2(supports-color@9.4.0))(supports-color@9.4.0))
+ '@svgr/core':
+ specifier: ^8.1.0
+ version: 8.1.0(supports-color@9.4.0)(typescript@6.0.3)
+ '@svgr/plugin-jsx':
+ specifier: ^8.1.0
+ version: 8.1.0(@svgr/core@8.1.0(supports-color@9.4.0)(typescript@6.0.3))(supports-color@9.4.0)
+ '@types/node':
+ specifier: ^22.20.1
+ version: 22.20.1
+ '@types/react':
+ specifier: ^19.2.18
+ version: 19.2.18
+ '@types/react-dom':
+ specifier: ^19.2.5
+ version: 19.2.5(@types/react@19.2.18)
+ react:
+ specifier: ^19.2.8
+ version: 19.2.8
+ react-dom:
+ specifier: ^19.2.8
+ version: 19.2.8(react@19.2.8)
+ typescript:
+ specifier: ^6.0.3
+ version: 6.0.3
+ unplugin-icons:
+ specifier: ^23.0.1
+ version: 23.0.1(@svgr/core@8.1.0(supports-color@9.4.0)(typescript@6.0.3))
- '@babel/helper-replace-supers@7.25.9':
- resolution: {integrity: sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
+packages:
- '@babel/helper-simple-access@7.25.9':
- resolution: {integrity: sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q==}
- engines: {node: '>=6.9.0'}
+ '@antfu/install-pkg@1.1.0':
+ resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==}
- '@babel/helper-skip-transparent-expression-wrappers@7.25.9':
- resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==}
+ '@babel/code-frame@7.29.7':
+ resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==}
engines: {node: '>=6.9.0'}
- '@babel/helper-string-parser@7.25.9':
- resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==}
+ '@babel/compat-data@7.29.7':
+ resolution: {integrity: sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==}
engines: {node: '>=6.9.0'}
- '@babel/helper-validator-identifier@7.25.9':
- resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==}
+ '@babel/core@7.29.7':
+ resolution: {integrity: sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==}
engines: {node: '>=6.9.0'}
- '@babel/helper-validator-option@7.25.9':
- resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==}
+ '@babel/generator@7.29.8':
+ resolution: {integrity: sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==}
engines: {node: '>=6.9.0'}
- '@babel/helper-wrap-function@7.25.9':
- resolution: {integrity: sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==}
+ '@babel/helper-compilation-targets@7.29.7':
+ resolution: {integrity: sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==}
engines: {node: '>=6.9.0'}
- '@babel/helpers@7.26.0':
- resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==}
+ '@babel/helper-globals@7.29.7':
+ resolution: {integrity: sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==}
engines: {node: '>=6.9.0'}
- '@babel/parser@7.26.1':
- resolution: {integrity: sha512-reoQYNiAJreZNsJzyrDNzFQ+IQ5JFiIzAHJg9bn94S3l+4++J7RsIhNMoB+lgP/9tpmiAQqspv+xfdxTSzREOw==}
- engines: {node: '>=6.0.0'}
- hasBin: true
-
- '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9':
- resolution: {integrity: sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==}
+ '@babel/helper-module-imports@7.29.7':
+ resolution: {integrity: sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==}
engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
- '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9':
- resolution: {integrity: sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==}
+ '@babel/helper-module-transforms@7.29.7':
+ resolution: {integrity: sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
- '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9':
- resolution: {integrity: sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==}
+ '@babel/helper-string-parser@7.29.7':
+ resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==}
engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
- '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9':
- resolution: {integrity: sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==}
+ '@babel/helper-validator-identifier@7.29.7':
+ resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==}
engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.13.0
- '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9':
- resolution: {integrity: sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==}
+ '@babel/helper-validator-option@7.29.7':
+ resolution: {integrity: sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==}
engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
- '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2':
- resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==}
+ '@babel/helpers@7.29.7':
+ resolution: {integrity: sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==}
engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- '@babel/plugin-syntax-dynamic-import@7.8.3':
- resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@babel/parser@7.29.8':
+ resolution: {integrity: sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
- '@babel/plugin-syntax-import-assertions@7.25.9':
- resolution: {integrity: sha512-4GHX5uzr5QMOOuzV0an9MFju4hKlm0OyePl/lHhcsTVae5t/IKVHnb8W67Vr6FuLlk5lPqLB7n7O+K5R46emYg==}
+ '@babel/template@7.29.7':
+ resolution: {integrity: sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==}
engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- '@babel/plugin-syntax-import-attributes@7.25.9':
- resolution: {integrity: sha512-u3EN9ub8LyYvgTnrgp8gboElouayiwPdnM7x5tcnW3iSt09/lQYPwMNK40I9IUxo7QOZhAsPHCmmuO7EPdruqg==}
+ '@babel/traverse@7.29.8':
+ resolution: {integrity: sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==}
engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- '@babel/plugin-syntax-jsx@7.25.9':
- resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==}
+ '@babel/types@7.29.8':
+ resolution: {integrity: sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==}
engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- '@babel/plugin-syntax-typescript@7.25.9':
- resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@biomejs/biome@2.5.8':
+ resolution: {integrity: sha512-aeAeeJB9fSDc7Gq+2GqpQxA0qBj6gj1k2R6L1cYqGePKP/baIq1WX8y6B+D+nRsO5ViQL22K/8IwbqERW0q1nw==}
+ engines: {node: '>=14.21.3'}
+ hasBin: true
- '@babel/plugin-syntax-unicode-sets-regex@7.18.6':
- resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
+ '@biomejs/cli-darwin-arm64@2.5.8':
+ resolution: {integrity: sha512-mk1QON9PHllvvLN5gU3f4rMxeh4syK5p9OvKyWH6/W8ueh04uaC8TUXXByhGufWf/y5mQc03ZLM45zU+cmqMjA==}
+ engines: {node: '>=14.21.3'}
+ cpu: [arm64]
+ os: [darwin]
- '@babel/plugin-transform-arrow-functions@7.25.9':
- resolution: {integrity: sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@biomejs/cli-darwin-x64@2.5.8':
+ resolution: {integrity: sha512-bsGwFMBNyHPyiLSsQcZJxdoRrg1V4JL+d7wEsvUBczlP9U9lwM+7mzQHxI4o1mhBsTmdOBbAb6fHU3Z3snN45w==}
+ engines: {node: '>=14.21.3'}
+ cpu: [x64]
+ os: [darwin]
- '@babel/plugin-transform-async-generator-functions@7.25.9':
- resolution: {integrity: sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@biomejs/cli-linux-arm64-musl@2.5.8':
+ resolution: {integrity: sha512-VcJNbstduTHx83NGAdhp78/JOcP45BZHXL7yNsfI1uGzdUgegAz2s+mSoT7wK6PBNzLoqG0zDOXaz/RQYVtSiw==}
+ engines: {node: '>=14.21.3'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
- '@babel/plugin-transform-async-to-generator@7.25.9':
- resolution: {integrity: sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@biomejs/cli-linux-arm64@2.5.8':
+ resolution: {integrity: sha512-XmFiA0WPYFC+uiUDC8WRFzAIH9bo7vwQLav38Uoq4ETC+T/+uBi0TsYGJECkugY3r8USl3jc+Ae2/irAF6F2lQ==}
+ engines: {node: '>=14.21.3'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
- '@babel/plugin-transform-block-scoped-functions@7.25.9':
- resolution: {integrity: sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@biomejs/cli-linux-x64-musl@2.5.8':
+ resolution: {integrity: sha512-kKmiyokeISRGq2FLwvr+TzsgBusfxaZ0FZNLcOYOpCK/78tRrEjeEBLvq3xLZMpqbANgJdRPI7vZX8ZL37u9/w==}
+ engines: {node: '>=14.21.3'}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
- '@babel/plugin-transform-block-scoping@7.25.9':
- resolution: {integrity: sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@biomejs/cli-linux-x64@2.5.8':
+ resolution: {integrity: sha512-S5wcm9OBDvLHodD4PUaN488hCpco9QD/9ZxuYJiw4euWtr/oQvLR72z2ixItH8Wd5BCm6FZaeb+YNvOoM1xHtQ==}
+ engines: {node: '>=14.21.3'}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
- '@babel/plugin-transform-class-properties@7.25.9':
- resolution: {integrity: sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@biomejs/cli-win32-arm64@2.5.8':
+ resolution: {integrity: sha512-nILH0mzm3Hi3iEdd7o7GpB8kBR/mSQwfQG/tyBqyNrY2GFtcgwfV9nV8xLmbtUpMNY/Oi0Ml1XgfR4flOdq+AA==}
+ engines: {node: '>=14.21.3'}
+ cpu: [arm64]
+ os: [win32]
- '@babel/plugin-transform-class-static-block@7.25.9':
- resolution: {integrity: sha512-UIf+72C7YJ+PJ685/PpATbCz00XqiFEzHX5iysRwfvNT0Ko+FaXSvRgLytFSp8xUItrG9pFM/KoBBZDrY/cYyg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.12.0
+ '@biomejs/cli-win32-x64@2.5.8':
+ resolution: {integrity: sha512-I2czzXTY61f3nFJxXoMDq80t7MivxDEnCjE+8sDKoFfcKMaoQdkqhIFQ3KyY0XLzeSpUBYeNAXgD+iOV/BU0VA==}
+ engines: {node: '>=14.21.3'}
+ cpu: [x64]
+ os: [win32]
- '@babel/plugin-transform-classes@7.25.9':
- resolution: {integrity: sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@braintree/sanitize-url@6.0.4':
+ resolution: {integrity: sha512-s3jaWicZd0pkP0jf5ysyHUI/RE7MHos6qlToFcGWXVp+ykHOy77OUMrfbgJ9it2C5bow7OIQwYYaHjk9XlBQ2A==}
- '@babel/plugin-transform-computed-properties@7.25.9':
- resolution: {integrity: sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@bufbuild/protobuf@2.14.0':
+ resolution: {integrity: sha512-C3UGsiCwSprE2NKIIFA3hCDlpXTMCAXRZuEVp88L1GY36Y41+rYL5fryE+nOFhp4p4JPQvdV8PQ4DWgHgeTE+w==}
- '@babel/plugin-transform-destructuring@7.25.9':
- resolution: {integrity: sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@emnapi/core@1.11.3':
+ resolution: {integrity: sha512-zLpS5asjEb7lq8jYLq37N6XKaE41DIexlY1rF/z4/tIl3wo13Sqm28fRyfIsKZD+NZ8mM5RoKkpW/rBcuoSZSg==}
- '@babel/plugin-transform-dotall-regex@7.25.9':
- resolution: {integrity: sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@emnapi/runtime@1.11.3':
+ resolution: {integrity: sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==}
- '@babel/plugin-transform-duplicate-keys@7.25.9':
- resolution: {integrity: sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@emnapi/wasi-threads@1.2.3':
+ resolution: {integrity: sha512-ELEBe8PsLvvJ6QMr0zLt8ffvOHW/dc1m3CEzNMg7aJUv3bMaoDtw2TXyDAwkYBuroxxuHEwhRTLJSe5sya547g==}
- '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9':
- resolution: {integrity: sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
+ '@iconify-json/mingcute@1.2.8':
+ resolution: {integrity: sha512-J8VXpRwTpx5yzOzyhx3T4IXnfXIKTWFl3rZ9okcW4c+NMMuwkLvdmM4rkjB83tnYIhg5+kkeMpmw8tvSnxd4rQ==}
- '@babel/plugin-transform-dynamic-import@7.25.9':
- resolution: {integrity: sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@iconify-json/ph@1.2.2':
+ resolution: {integrity: sha512-PgkEZNtqa8hBGjHXQa4pMwZa93hmfu8FUSjs/nv4oUU6yLsgv+gh9nu28Kqi8Fz9CCVu4hj1MZs9/60J57IzFw==}
- '@babel/plugin-transform-exponentiation-operator@7.25.9':
- resolution: {integrity: sha512-KRhdhlVk2nObA5AYa7QMgTMTVJdfHprfpAk4DjZVtllqRg9qarilstTKEhpVjyt+Npi8ThRyiV8176Am3CodPA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@iconify-json/simple-icons@1.2.93':
+ resolution: {integrity: sha512-/XhANjfGYOuqvSR3TmUnkQkINvQ4GVjVuukvymRbxtVFBvIq/yiXJqCDycKcQPT401OYT9H2vIY6ihAlz1QIAw==}
- '@babel/plugin-transform-export-namespace-from@7.25.9':
- resolution: {integrity: sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@iconify/types@2.0.0':
+ resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
- '@babel/plugin-transform-for-of@7.25.9':
- resolution: {integrity: sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@iconify/utils@3.1.4':
+ resolution: {integrity: sha512-b1S7B1k9ohZ+iNTi2ATxbRYG9fTrJmUT0rc46bvVnNxqNRGW7dyo/vRREwyniI5IRN2RSJHDcm+s3BjWrSAjHw==}
- '@babel/plugin-transform-function-name@7.25.9':
- resolution: {integrity: sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@jridgewell/gen-mapping@0.3.13':
+ resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
- '@babel/plugin-transform-json-strings@7.25.9':
- resolution: {integrity: sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@jridgewell/remapping@2.3.5':
+ resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
- '@babel/plugin-transform-literals@7.25.9':
- resolution: {integrity: sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@jridgewell/resolve-uri@3.1.2':
+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
+ engines: {node: '>=6.0.0'}
- '@babel/plugin-transform-logical-assignment-operators@7.25.9':
- resolution: {integrity: sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@jridgewell/sourcemap-codec@1.5.5':
+ resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
- '@babel/plugin-transform-member-expression-literals@7.25.9':
- resolution: {integrity: sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-modules-amd@7.25.9':
- resolution: {integrity: sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-modules-commonjs@7.25.9':
- resolution: {integrity: sha512-dwh2Ol1jWwL2MgkCzUSOvfmKElqQcuswAZypBSUsScMXvgdT8Ekq5YA6TtqpTVWH+4903NmboMuH1o9i8Rxlyg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-modules-systemjs@7.25.9':
- resolution: {integrity: sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-modules-umd@7.25.9':
- resolution: {integrity: sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-named-capturing-groups-regex@7.25.9':
- resolution: {integrity: sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
-
- '@babel/plugin-transform-new-target@7.25.9':
- resolution: {integrity: sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-nullish-coalescing-operator@7.25.9':
- resolution: {integrity: sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-numeric-separator@7.25.9':
- resolution: {integrity: sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-object-rest-spread@7.25.9':
- resolution: {integrity: sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-object-super@7.25.9':
- resolution: {integrity: sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-optional-catch-binding@7.25.9':
- resolution: {integrity: sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-optional-chaining@7.25.9':
- resolution: {integrity: sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-parameters@7.25.9':
- resolution: {integrity: sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-private-methods@7.25.9':
- resolution: {integrity: sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-private-property-in-object@7.25.9':
- resolution: {integrity: sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-property-literals@7.25.9':
- resolution: {integrity: sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@jridgewell/trace-mapping@0.3.31':
+ resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
- '@babel/plugin-transform-react-constant-elements@7.25.7':
- resolution: {integrity: sha512-/qXt69Em8HgsjCLu7G3zdIQn7A2QwmYND7Wa0LTp09Na+Zn8L5d0A7wSXrKi18TJRc/Q5S1i1De/SU1LzVkSvA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@mdx-js/mdx@3.1.1':
+ resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==}
- '@babel/plugin-transform-react-display-name@7.25.9':
- resolution: {integrity: sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==}
- engines: {node: '>=6.9.0'}
+ '@mdx-js/react@3.1.1':
+ resolution: {integrity: sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==}
peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@types/react': '>=16'
+ react: '>=16'
- '@babel/plugin-transform-react-jsx-development@7.25.9':
- resolution: {integrity: sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==}
- engines: {node: '>=6.9.0'}
+ '@napi-rs/wasm-runtime@1.1.6':
+ resolution: {integrity: sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==}
peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@emnapi/core': ^1.7.1
+ '@emnapi/runtime': ^1.7.1
- '@babel/plugin-transform-react-jsx@7.25.9':
- resolution: {integrity: sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@parcel/watcher-android-arm64@2.6.0':
+ resolution: {integrity: sha512-trgpLSCKRC/huFjXX/Smh+0sWe4+YtKfktIToiMl59ghz7z+qkH6kMvNnUbLyRs9N11t8l4svSCs1+5B3rOAhA==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [android]
- '@babel/plugin-transform-react-pure-annotations@7.25.9':
- resolution: {integrity: sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@parcel/watcher-darwin-arm64@2.6.0':
+ resolution: {integrity: sha512-Y3QV0gl7Q1zbfueunkWIERICbEojQFCgpyG7YqOGNFLsckXyI1xu9mAIUpKY9QBYzBtSkN8dBPwd3yiAO9ovMw==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [darwin]
- '@babel/plugin-transform-regenerator@7.25.9':
- resolution: {integrity: sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@parcel/watcher-darwin-x64@2.6.0':
+ resolution: {integrity: sha512-Ohv6OpzhUfKYD7Beb8kDvG0jbIxORCYY1JRdZnaBtnjjkJxgD7ZVL0nw2sCYd0yTMKTvz3nnTnOF3cDifK+kvw==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [darwin]
- '@babel/plugin-transform-reserved-words@7.25.9':
- resolution: {integrity: sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@parcel/watcher-freebsd-x64@2.6.0':
+ resolution: {integrity: sha512-5HmXvDgs8VK+74jF9y9/2FE3/OnlcKmc56tjmSrEuZjpSZOGL+fvAu+HKJBdPs9uwoP2hE6TlSUpXZ/C5jUFmQ==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [freebsd]
- '@babel/plugin-transform-runtime@7.25.9':
- resolution: {integrity: sha512-nZp7GlEl+yULJrClz0SwHPqir3lc0zsPrDHQUcxGspSL7AKrexNSEfTbfqnDNJUO13bgKyfuOLMF8Xqtu8j3YQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@parcel/watcher-linux-arm-glibc@2.6.0':
+ resolution: {integrity: sha512-Ps/hui3A+vMbjdqlqAowK2ZL8+BO8dBjxeWXj6npTBs3jx4wWmbPpaLuqwrQrSqIVMCnpWo238bJ1U37GhQOYg==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm]
+ os: [linux]
+ libc: [glibc]
- '@babel/plugin-transform-shorthand-properties@7.25.9':
- resolution: {integrity: sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@parcel/watcher-linux-arm-musl@2.6.0':
+ resolution: {integrity: sha512-9c6AUHgHoG+IY88MRIHupztQiQnrbqHYQjkM2btA+Bf/wQnQMuiD0Wfk1EVv3TlNT3x41uU71rn6E4xh/+zvkw==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm]
+ os: [linux]
+ libc: [musl]
- '@babel/plugin-transform-spread@7.25.9':
- resolution: {integrity: sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@parcel/watcher-linux-arm64-glibc@2.6.0':
+ resolution: {integrity: sha512-yHRqS2owEXe6Hic9z6Mh1ECsCd+ODVOGvZDyciqRd21+v+o+DnXMOrw50DSpIG2sb8GPEaPPmfeCAWKPJdq46g==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
- '@babel/plugin-transform-sticky-regex@7.25.9':
- resolution: {integrity: sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@parcel/watcher-linux-arm64-musl@2.6.0':
+ resolution: {integrity: sha512-WhB2e/V7rqdHHWZusBSPuy5Ei8S6lSz6FE5TKKQz5h3a0O+C+mhY7vxU9b/stqvMb8beLnPY82ZrFTLKs+SrKA==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
- '@babel/plugin-transform-template-literals@7.25.9':
- resolution: {integrity: sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@parcel/watcher-linux-x64-glibc@2.6.0':
+ resolution: {integrity: sha512-ulGE6x6Oz6iAwg75T8YQSoguBWasniIbX+QWpaYPcCnDOpdWX3k+4xbEYPZVLxOuoJI+svJJPD3sEj8G7lrQ3A==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
- '@babel/plugin-transform-typeof-symbol@7.25.9':
- resolution: {integrity: sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@parcel/watcher-linux-x64-musl@2.6.0':
+ resolution: {integrity: sha512-tkBYKt7YQrjIJWYDnto2YgO8MRkjlMTSNoRHzsXinBqbLdeOM3L32wPZJvIZxqaLMfSlS/4sUjH/6STVP/XDLw==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
- '@babel/plugin-transform-typescript@7.25.9':
- resolution: {integrity: sha512-7PbZQZP50tzv2KGGnhh82GSyMB01yKY9scIjf1a+GfZCtInOWqUH5+1EBU4t9fyR5Oykkkc9vFTs4OHrhHXljQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@parcel/watcher-win32-arm64@2.6.0':
+ resolution: {integrity: sha512-gIZAP23jaHjGWasY/TY6yL7NHFClf0Ga7FN+iINvk+KN94rhm94lYZhFsbYFNcA04/onvGD9kKmiJLJB2HbNwQ==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [win32]
- '@babel/plugin-transform-unicode-escapes@7.25.9':
- resolution: {integrity: sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@parcel/watcher-win32-x64@2.6.0':
+ resolution: {integrity: sha512-cA+/pXV2YkfxlIcXOQ5fSWqAzzPyD78/x5qbK/I0vUkrlYHA8TIz+MXjAbGouguKVSI4bOmkTSJ1/poVSsgt+A==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [win32]
- '@babel/plugin-transform-unicode-property-regex@7.25.9':
- resolution: {integrity: sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@parcel/watcher@2.6.0':
+ resolution: {integrity: sha512-7FNeNl8NCE7aINx7WXiKQrPYZWC/hvrTsmk6zmxbI7LTXE7hVek/n8AfVgpe2y82zl3w0HvCHN0bVKMBoJcC0w==}
+ engines: {node: '>= 10.0.0'}
- '@babel/plugin-transform-unicode-regex@7.25.9':
- resolution: {integrity: sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==}
- engines: {node: '>=6.9.0'}
+ '@rsbuild/core@2.1.13':
+ resolution: {integrity: sha512-Z+6MzmjOio4+bFZQ24k+7ge/oNCOdXIunAssrswTNE8AIf6mcyXpJZevRXRiOEMZasRPA8VNyh+9JngQLg729Q==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
peerDependencies:
- '@babel/core': ^7.0.0-0
+ core-js: '>= 3.0.0'
+ peerDependenciesMeta:
+ core-js:
+ optional: true
- '@babel/plugin-transform-unicode-sets-regex@7.25.9':
- resolution: {integrity: sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==}
- engines: {node: '>=6.9.0'}
+ '@rsbuild/plugin-react@2.1.0':
+ resolution: {integrity: sha512-RQTIAWB/CwPjoWt9iAl+8HixeQVgZ7kEIBrWPCixfITyHdiD84h0YpUTpEUuz6kGHw1KXT9mHZ3Rwy6WG7aRDA==}
peerDependencies:
- '@babel/core': ^7.0.0
+ '@rsbuild/core': ^2.0.0
+ peerDependenciesMeta:
+ '@rsbuild/core':
+ optional: true
- '@babel/preset-env@7.25.9':
- resolution: {integrity: sha512-XqDEt+hfsQukahSX9JOBDHhpUHDhj2zGSxoqWQFCMajOSBnbhBdgON/bU/5PkBA1yX5tqW6tTzuIPVsZTQ7h5Q==}
- engines: {node: '>=6.9.0'}
+ '@rsbuild/plugin-sass@2.0.1':
+ resolution: {integrity: sha512-BZRpVTZW+za+sv84nYYdIjR7XwVqyS8+1wAha/7BvQ1igdzlmT6xPd6h4jTWfNzdHuzIHZsuWY7kPS/ybzcndA==}
peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@rsbuild/core': ^2.0.0
+ peerDependenciesMeta:
+ '@rsbuild/core':
+ optional: true
- '@babel/preset-modules@0.1.6-no-external-plugins':
- resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==}
- peerDependencies:
- '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0
+ '@rspack/binding-darwin-arm64@2.1.10':
+ resolution: {integrity: sha512-DZlcTpbIb2mjeS1aSG4k01UH33Zj7T+k8ZylPK6HmsKs4JvK4wgpWFC78WVv3p/Aj3MZS6DwtDLwpZ2Ihj/fpg==}
+ cpu: [arm64]
+ os: [darwin]
- '@babel/preset-react@7.25.9':
- resolution: {integrity: sha512-D3to0uSPiWE7rBrdIICCd0tJSIGpLaaGptna2+w7Pft5xMqLpA1sz99DK5TZ1TjGbdQ/VI1eCSZ06dv3lT4JOw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@rspack/binding-darwin-x64@2.1.10':
+ resolution: {integrity: sha512-my/0h2LwxCRT6cg3oDDC2e0ZOxQLVajAdIcv0fqnQk5JRNvVuL89PuTutitnSqie1A0/JSL8OQz5XHwmoS3kow==}
+ cpu: [x64]
+ os: [darwin]
- '@babel/preset-typescript@7.26.0':
- resolution: {integrity: sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@rspack/binding-linux-arm64-gnu@2.1.10':
+ resolution: {integrity: sha512-laevn9g+E5PAUEGqiKe6Ju5KApsuQYp+bPI17XS3Lkl8eqL5pS/BmHYU7QMlst4GzV8+wlruVTMh//+st6Vqzg==}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
- '@babel/runtime@7.26.0':
- resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==}
- engines: {node: '>=6.9.0'}
+ '@rspack/binding-linux-arm64-musl@2.1.10':
+ resolution: {integrity: sha512-V71+Qz5G72+ROZXrJn5zxOszdG1AEbO8pcC/itXXtf4yRR6a3bVHKNKGhipBNxb8eI6cnD/01FH1h3ZG655jLw==}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
- '@babel/template@7.25.9':
- resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==}
- engines: {node: '>=6.9.0'}
+ '@rspack/binding-linux-ppc64-gnu@2.1.10':
+ resolution: {integrity: sha512-U7HlNzHcDtZ+LYOtOJmtx67kHEybZzUUAaP7aEXjGYO5WTCgh/176sW2UYP0rmZLrgUNFUuzn+B98RLaClNaVg==}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [glibc]
- '@babel/traverse@7.25.9':
- resolution: {integrity: sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==}
- engines: {node: '>=6.9.0'}
+ '@rspack/binding-linux-riscv64-gnu@2.1.10':
+ resolution: {integrity: sha512-GMGTJpy9/ecE+5F5IfxZH4bXv0Wx/b2TiehTlCbTksbL+pKpLHYy0rwGdjWDKbmBkhxMMqPiC7PDnn9LbdnnLA==}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [glibc]
- '@babel/types@7.26.0':
- resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==}
- engines: {node: '>=6.9.0'}
+ '@rspack/binding-linux-riscv64-musl@2.1.10':
+ resolution: {integrity: sha512-rkurnAWc04vIbzG1QCrPBWSJadZvaOt1mazFH3EdiJO8VUiu0I1T9zdiwuDOPrd50lOKIZlcTXbd5aaAkWEnvQ==}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [musl]
- '@braintree/sanitize-url@7.1.0':
- resolution: {integrity: sha512-o+UlMLt49RvtCASlOMW0AkHnabN9wR9rwCCherxO0yG4Npy34GkvrAqdXQvrhNs+jh+gkK8gB8Lf05qL/O7KWg==}
+ '@rspack/binding-linux-s390x-gnu@2.1.10':
+ resolution: {integrity: sha512-X+DyxkriZEAF/wihI7ERDv+CAS0mbMv36aEuQ+vXzTlvS6cSmpou/r29AHbvIF3NlG1UeAbDVlOs9QrMBZjpUQ==}
+ cpu: [s390x]
+ os: [linux]
+ libc: [glibc]
- '@bufbuild/protobuf@2.10.2':
- resolution: {integrity: sha512-uFsRXwIGyu+r6AMdz+XijIIZJYpoWeYzILt5yZ2d3mCjQrWUTVpVD9WL/jZAbvp+Ed04rOhrsk7FiTcEDseB5A==}
+ '@rspack/binding-linux-x64-gnu@2.1.10':
+ resolution: {integrity: sha512-Fat09V6jUuyo9qG7Wyj9cQ31VDfLmokXyBtGqKxY5OvSWHereB7QUub5btbPXHwbp6Iq4aAQyUbbLTzvR1YaBw==}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
- '@chevrotain/cst-dts-gen@11.0.3':
- resolution: {integrity: sha512-BvIKpRLeS/8UbfxXxgC33xOumsacaeCKAjAeLyOn7Pcp95HiRbrpl14S+9vaZLolnbssPIUuiUd8IvgkRyt6NQ==}
+ '@rspack/binding-linux-x64-musl@2.1.10':
+ resolution: {integrity: sha512-lhHOnIJ4ClpIlA1f1L8aoxEZivYLjnjq5A6jKKz7BKsm+cHK8kqqEm6lO5KqA5xQT0Lonq1o28bmKHEj6JHInw==}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
- '@chevrotain/gast@11.0.3':
- resolution: {integrity: sha512-+qNfcoNk70PyS/uxmj3li5NiECO+2YKZZQMbmjTqRI3Qchu8Hig/Q9vgkHpI3alNjr7M+a2St5pw5w5F6NL5/Q==}
+ '@rspack/binding-wasm32-wasi@2.1.10':
+ resolution: {integrity: sha512-KY5YbWbuvYcoaLXnV+vzZOvGRCeb6jt4EpVpKdph1h1IJjwX/ju15EQ+GOe3iecZEdf0OttQcNVcwBkLkFT9ag==}
+ cpu: [wasm32]
- '@chevrotain/regexp-to-ast@11.0.3':
- resolution: {integrity: sha512-1fMHaBZxLFvWI067AVbGJav1eRY7N8DDvYCTwGBiE/ytKBgP8azTdgyrKyWZ9Mfh09eHWb5PgTSO8wi7U824RA==}
+ '@rspack/binding-win32-arm64-msvc@2.1.10':
+ resolution: {integrity: sha512-z4GWzMLofaDGpAt9Z+MlN88LlUBDm+zM6R2GdOOPM6/4g/h3/+47OP7casmSL3AwTGYBEJqogwt08sRSosB6Cg==}
+ cpu: [arm64]
+ os: [win32]
- '@chevrotain/types@11.0.3':
- resolution: {integrity: sha512-gsiM3G8b58kZC2HaWR50gu6Y1440cHiJ+i3JUvcp/35JchYejb2+5MVeJK0iKThYpAa/P2PYFV4hoi44HD+aHQ==}
+ '@rspack/binding-win32-ia32-msvc@2.1.10':
+ resolution: {integrity: sha512-7qcWdsZ+GuGtzKjqgy7wTN7Dso/ezIY8yhx1r2yIbcczdmXj4FhaEampMDp/25HwtKwIGBBoh6HHSt3JWxpTUg==}
+ cpu: [ia32]
+ os: [win32]
- '@chevrotain/utils@11.0.3':
- resolution: {integrity: sha512-YslZMgtJUyuMbZ+aKvfF3x1f5liK4mWNxghFRv7jqRR9C3R3fAOGTTKvxXDa2Y1s9zSbcpuO0cAxDYsc9SrXoQ==}
+ '@rspack/binding-win32-x64-msvc@2.1.10':
+ resolution: {integrity: sha512-pgp23pLrzfhGnKycxzr7ifP17lAbWZEfnx1bX8gXtYrnpJ66DRNyTKSzxB6sa/HBWjS1L8PX5TjMZ44WfPydqQ==}
+ cpu: [x64]
+ os: [win32]
- '@colors/colors@1.5.0':
- resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==}
- engines: {node: '>=0.1.90'}
+ '@rspack/binding@2.1.10':
+ resolution: {integrity: sha512-vnu/UP5HnrND15lO9+VeG6eUrbTyycHNQNQ3XEiRiFojuoiGZkIZC3Hbzr8qQH44C6vScPODEPvvIVvLcO2LpQ==}
- '@csstools/cascade-layer-name-parser@2.0.5':
- resolution: {integrity: sha512-p1ko5eHgV+MgXFVa4STPKpvPxr6ReS8oS2jzTukjR74i5zJNyWO1ZM1m8YKBXnzDKWfBN1ztLYlHxbVemDD88A==}
- engines: {node: '>=18'}
+ '@rspack/core@2.1.10':
+ resolution: {integrity: sha512-YSS2/Xxz8uiG/KXDkqOoA3dTetNo/vysk7bAexQOrU8iuq7JuzDTTAwLKvWZnwmvME8M8m5wcM4YvfIwYmidHA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
peerDependencies:
- '@csstools/css-parser-algorithms': ^3.0.5
- '@csstools/css-tokenizer': ^3.0.4
-
- '@csstools/color-helpers@5.1.0':
- resolution: {integrity: sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==}
- engines: {node: '>=18'}
+ '@module-federation/runtime-tools': ^0.24.1 || ^2.0.0
+ '@swc/helpers': ^0.5.23
+ peerDependenciesMeta:
+ '@module-federation/runtime-tools':
+ optional: true
+ '@swc/helpers':
+ optional: true
- '@csstools/css-calc@2.1.4':
- resolution: {integrity: sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==}
- engines: {node: '>=18'}
+ '@rspack/plugin-react-refresh@2.0.2':
+ resolution: {integrity: sha512-dGNZiCxQxgAUI9sah7gd8u+O7OJZRCmqtEJNDOd8xW5RqcieC86F7p5qcShyw6onH5pKf57evpr2VjGbaFGkZg==}
peerDependencies:
- '@csstools/css-parser-algorithms': ^3.0.5
- '@csstools/css-tokenizer': ^3.0.4
+ '@rspack/core': ^2.0.0
+ react-refresh: '>=0.10.0 <1.0.0'
+ peerDependenciesMeta:
+ '@rspack/core':
+ optional: true
- '@csstools/css-color-parser@3.1.0':
- resolution: {integrity: sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==}
- engines: {node: '>=18'}
- peerDependencies:
- '@csstools/css-parser-algorithms': ^3.0.5
- '@csstools/css-tokenizer': ^3.0.4
+ '@rspress/core@2.0.21':
+ resolution: {integrity: sha512-QxhVqhHhN4guA24MlvlsFTb96pE/X8gBd5RBfp4j1kn5tAu1nJ7A9itKcRAuEw0WYJHcsWtI+WUnd7JPioHtlw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
- '@csstools/css-parser-algorithms@3.0.5':
- resolution: {integrity: sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==}
- engines: {node: '>=18'}
+ '@rspress/plugin-sitemap@2.0.21':
+ resolution: {integrity: sha512-PldjjLDFqtQZ3yPHHsWxmxGNlmoNH7nSx76ww7QkPzkO9rPrlr71sBLZR3MMc1s6cd5Csyd+gHjfIJiP7o77XQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
peerDependencies:
- '@csstools/css-tokenizer': ^3.0.4
+ '@rspress/core': ^2.0.10
- '@csstools/css-tokenizer@3.0.4':
- resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==}
- engines: {node: '>=18'}
+ '@rspress/shared@2.0.21':
+ resolution: {integrity: sha512-siCWkv1a4n6y7JdVRII+fwCRZGZtG5KGFfKi2w/Tt33UnIgh4XGqozZ5F/K0iZ/QUwg0wi93SoVdOQm2Q+wf8w==}
- '@csstools/media-query-list-parser@4.0.3':
- resolution: {integrity: sha512-HAYH7d3TLRHDOUQK4mZKf9k9Ph/m8Akstg66ywKR4SFAigjs3yBiUeZtFxywiTm5moZMAp/5W/ZuFnNXXYLuuQ==}
- engines: {node: '>=18'}
- peerDependencies:
- '@csstools/css-parser-algorithms': ^3.0.5
- '@csstools/css-tokenizer': ^3.0.4
+ '@shikijs/core@4.4.3':
+ resolution: {integrity: sha512-QCR4q2ZO/ILJEuwiBMel4wdcTDb1JGwfjKTxPDF6x8ixOaluPrVqIn06C99AcRPhmYlBR56d/Fb+GN58GzExpg==}
+ engines: {node: '>=20'}
- '@csstools/postcss-alpha-function@1.0.1':
- resolution: {integrity: sha512-isfLLwksH3yHkFXfCI2Gcaqg7wGGHZZwunoJzEZk0yKYIokgre6hYVFibKL3SYAoR1kBXova8LB+JoO5vZzi9w==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
+ '@shikijs/engine-javascript@4.4.3':
+ resolution: {integrity: sha512-FbOjFJp9VLdo1Wevs10BBtVxiTWwNLqZh5Gkhjgda/ioL15YOgeSl9n+6XMa3qRlPQzfhFNe641SrynFHYG0nQ==}
+ engines: {node: '>=20'}
- '@csstools/postcss-cascade-layers@5.0.2':
- resolution: {integrity: sha512-nWBE08nhO8uWl6kSAeCx4im7QfVko3zLrtgWZY4/bP87zrSPpSyN/3W3TDqz1jJuH+kbKOHXg5rJnK+ZVYcFFg==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
+ '@shikijs/engine-oniguruma@4.4.3':
+ resolution: {integrity: sha512-EcOQkxdxGQrc1Row/cC2c96/v1dbZqGnEVu1qTuT/MJmp6+cXCvQussowVmCv5Tqr3KuY3c7IbM6HTW3LJ1k9w==}
+ engines: {node: '>=20'}
- '@csstools/postcss-color-function-display-p3-linear@1.0.1':
- resolution: {integrity: sha512-E5qusdzhlmO1TztYzDIi8XPdPoYOjoTY6HBYBCYSj+Gn4gQRBlvjgPQXzfzuPQqt8EhkC/SzPKObg4Mbn8/xMg==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- '@csstools/postcss-color-function@4.0.12':
- resolution: {integrity: sha512-yx3cljQKRaSBc2hfh8rMZFZzChaFgwmO2JfFgFr1vMcF3C/uyy5I4RFIBOIWGq1D+XbKCG789CGkG6zzkLpagA==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- '@csstools/postcss-color-mix-function@3.0.12':
- resolution: {integrity: sha512-4STERZfCP5Jcs13P1U5pTvI9SkgLgfMUMhdXW8IlJWkzOOOqhZIjcNhWtNJZes2nkBDsIKJ0CJtFtuaZ00moag==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- '@csstools/postcss-color-mix-variadic-function-arguments@1.0.2':
- resolution: {integrity: sha512-rM67Gp9lRAkTo+X31DUqMEq+iK+EFqsidfecmhrteErxJZb6tUoJBVQca1Vn1GpDql1s1rD1pKcuYzMsg7Z1KQ==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- '@csstools/postcss-content-alt-text@2.0.8':
- resolution: {integrity: sha512-9SfEW9QCxEpTlNMnpSqFaHyzsiRpZ5J5+KqCu1u5/eEJAWsMhzT40qf0FIbeeglEvrGRMdDzAxMIz3wqoGSb+Q==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- '@csstools/postcss-contrast-color-function@2.0.12':
- resolution: {integrity: sha512-YbwWckjK3qwKjeYz/CijgcS7WDUCtKTd8ShLztm3/i5dhh4NaqzsbYnhm4bjrpFpnLZ31jVcbK8YL77z3GBPzA==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- '@csstools/postcss-exponential-functions@2.0.9':
- resolution: {integrity: sha512-abg2W/PI3HXwS/CZshSa79kNWNZHdJPMBXeZNyPQFbbj8sKO3jXxOt/wF7juJVjyDTc6JrvaUZYFcSBZBhaxjw==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- '@csstools/postcss-font-format-keywords@4.0.0':
- resolution: {integrity: sha512-usBzw9aCRDvchpok6C+4TXC57btc4bJtmKQWOHQxOVKen1ZfVqBUuCZ/wuqdX5GHsD0NRSr9XTP+5ID1ZZQBXw==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- '@csstools/postcss-gamut-mapping@2.0.11':
- resolution: {integrity: sha512-fCpCUgZNE2piVJKC76zFsgVW1apF6dpYsqGyH8SIeCcM4pTEsRTWTLCaJIMKFEundsCKwY1rwfhtrio04RJ4Dw==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- '@csstools/postcss-gradients-interpolation-method@5.0.12':
- resolution: {integrity: sha512-jugzjwkUY0wtNrZlFeyXzimUL3hN4xMvoPnIXxoZqxDvjZRiSh+itgHcVUWzJ2VwD/VAMEgCLvtaJHX+4Vj3Ow==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- '@csstools/postcss-hwb-function@4.0.12':
- resolution: {integrity: sha512-mL/+88Z53KrE4JdePYFJAQWFrcADEqsLprExCM04GDNgHIztwFzj0Mbhd/yxMBngq0NIlz58VVxjt5abNs1VhA==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- '@csstools/postcss-ic-unit@4.0.4':
- resolution: {integrity: sha512-yQ4VmossuOAql65sCPppVO1yfb7hDscf4GseF0VCA/DTDaBc0Wtf8MTqVPfjGYlT5+2buokG0Gp7y0atYZpwjg==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- '@csstools/postcss-initial@2.0.1':
- resolution: {integrity: sha512-L1wLVMSAZ4wovznquK0xmC7QSctzO4D0Is590bxpGqhqjboLXYA16dWZpfwImkdOgACdQ9PqXsuRroW6qPlEsg==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- '@csstools/postcss-is-pseudo-class@5.0.3':
- resolution: {integrity: sha512-jS/TY4SpG4gszAtIg7Qnf3AS2pjcUM5SzxpApOrlndMeGhIbaTzWBzzP/IApXoNWEW7OhcjkRT48jnAUIFXhAQ==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- '@csstools/postcss-light-dark-function@2.0.11':
- resolution: {integrity: sha512-fNJcKXJdPM3Lyrbmgw2OBbaioU7yuKZtiXClf4sGdQttitijYlZMD5K7HrC/eF83VRWRrYq6OZ0Lx92leV2LFA==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- '@csstools/postcss-logical-float-and-clear@3.0.0':
- resolution: {integrity: sha512-SEmaHMszwakI2rqKRJgE+8rpotFfne1ZS6bZqBoQIicFyV+xT1UF42eORPxJkVJVrH9C0ctUgwMSn3BLOIZldQ==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- '@csstools/postcss-logical-overflow@2.0.0':
- resolution: {integrity: sha512-spzR1MInxPuXKEX2csMamshR4LRaSZ3UXVaRGjeQxl70ySxOhMpP2252RAFsg8QyyBXBzuVOOdx1+bVO5bPIzA==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- '@csstools/postcss-logical-overscroll-behavior@2.0.0':
- resolution: {integrity: sha512-e/webMjoGOSYfqLunyzByZj5KKe5oyVg/YSbie99VEaSDE2kimFm0q1f6t/6Jo+VVCQ/jbe2Xy+uX+C4xzWs4w==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- '@csstools/postcss-logical-resize@3.0.0':
- resolution: {integrity: sha512-DFbHQOFW/+I+MY4Ycd/QN6Dg4Hcbb50elIJCfnwkRTCX05G11SwViI5BbBlg9iHRl4ytB7pmY5ieAFk3ws7yyg==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- '@csstools/postcss-logical-viewport-units@3.0.4':
- resolution: {integrity: sha512-q+eHV1haXA4w9xBwZLKjVKAWn3W2CMqmpNpZUk5kRprvSiBEGMgrNH3/sJZ8UA3JgyHaOt3jwT9uFa4wLX4EqQ==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- '@csstools/postcss-media-minmax@2.0.9':
- resolution: {integrity: sha512-af9Qw3uS3JhYLnCbqtZ9crTvvkR+0Se+bBqSr7ykAnl9yKhk6895z9rf+2F4dClIDJWxgn0iZZ1PSdkhrbs2ig==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- '@csstools/postcss-media-queries-aspect-ratio-number-values@3.0.5':
- resolution: {integrity: sha512-zhAe31xaaXOY2Px8IYfoVTB3wglbJUVigGphFLj6exb7cjZRH9A6adyE22XfFK3P2PzwRk0VDeTJmaxpluyrDg==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- '@csstools/postcss-nested-calc@4.0.0':
- resolution: {integrity: sha512-jMYDdqrQQxE7k9+KjstC3NbsmC063n1FTPLCgCRS2/qHUbHM0mNy9pIn4QIiQGs9I/Bg98vMqw7mJXBxa0N88A==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- '@csstools/postcss-normalize-display-values@4.0.0':
- resolution: {integrity: sha512-HlEoG0IDRoHXzXnkV4in47dzsxdsjdz6+j7MLjaACABX2NfvjFS6XVAnpaDyGesz9gK2SC7MbNwdCHusObKJ9Q==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- '@csstools/postcss-oklab-function@4.0.12':
- resolution: {integrity: sha512-HhlSmnE1NKBhXsTnNGjxvhryKtO7tJd1w42DKOGFD6jSHtYOrsJTQDKPMwvOfrzUAk8t7GcpIfRyM7ssqHpFjg==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- '@csstools/postcss-position-area-property@1.0.0':
- resolution: {integrity: sha512-fUP6KR8qV2NuUZV3Cw8itx0Ep90aRjAZxAEzC3vrl6yjFv+pFsQbR18UuQctEKmA72K9O27CoYiKEgXxkqjg8Q==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- '@csstools/postcss-progressive-custom-properties@4.2.1':
- resolution: {integrity: sha512-uPiiXf7IEKtUQXsxu6uWtOlRMXd2QWWy5fhxHDnPdXKCQckPP3E34ZgDoZ62r2iT+UOgWsSbM4NvHE5m3mAEdw==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- '@csstools/postcss-random-function@2.0.1':
- resolution: {integrity: sha512-q+FQaNiRBhnoSNo+GzqGOIBKoHQ43lYz0ICrV+UudfWnEF6ksS6DsBIJSISKQT2Bvu3g4k6r7t0zYrk5pDlo8w==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- '@csstools/postcss-relative-color-syntax@3.0.12':
- resolution: {integrity: sha512-0RLIeONxu/mtxRtf3o41Lq2ghLimw0w9ByLWnnEVuy89exmEEq8bynveBxNW3nyHqLAFEeNtVEmC1QK9MZ8Huw==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- '@csstools/postcss-scope-pseudo-class@4.0.1':
- resolution: {integrity: sha512-IMi9FwtH6LMNuLea1bjVMQAsUhFxJnyLSgOp/cpv5hrzWmrUYU5fm0EguNDIIOHUqzXode8F/1qkC/tEo/qN8Q==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- '@csstools/postcss-sign-functions@1.1.4':
- resolution: {integrity: sha512-P97h1XqRPcfcJndFdG95Gv/6ZzxUBBISem0IDqPZ7WMvc/wlO+yU0c5D/OCpZ5TJoTt63Ok3knGk64N+o6L2Pg==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- '@csstools/postcss-stepped-value-functions@4.0.9':
- resolution: {integrity: sha512-h9btycWrsex4dNLeQfyU3y3w40LMQooJWFMm/SK9lrKguHDcFl4VMkncKKoXi2z5rM9YGWbUQABI8BT2UydIcA==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- '@csstools/postcss-system-ui-font-family@1.0.0':
- resolution: {integrity: sha512-s3xdBvfWYfoPSBsikDXbuorcMG1nN1M6GdU0qBsGfcmNR0A/qhloQZpTxjA3Xsyrk1VJvwb2pOfiOT3at/DuIQ==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- '@csstools/postcss-text-decoration-shorthand@4.0.3':
- resolution: {integrity: sha512-KSkGgZfx0kQjRIYnpsD7X2Om9BUXX/Kii77VBifQW9Ih929hK0KNjVngHDH0bFB9GmfWcR9vJYJJRvw/NQjkrA==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- '@csstools/postcss-trigonometric-functions@4.0.9':
- resolution: {integrity: sha512-Hnh5zJUdpNrJqK9v1/E3BbrQhaDTj5YiX7P61TOvUhoDHnUmsNNxcDAgkQ32RrcWx9GVUvfUNPcUkn8R3vIX6A==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- '@csstools/postcss-unset-value@4.0.0':
- resolution: {integrity: sha512-cBz3tOCI5Fw6NIFEwU3RiwK6mn3nKegjpJuzCndoGq3BZPkUjnsq7uQmIeMNeMbMk7YD2MfKcgCpZwX5jyXqCA==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- '@csstools/selector-resolve-nested@3.1.0':
- resolution: {integrity: sha512-mf1LEW0tJLKfWyvn5KdDrhpxHyuxpbNwTIwOYLIvsTffeyOf85j5oIzfG0yosxDgx/sswlqBnESYUcQH0vgZ0g==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss-selector-parser: ^7.0.0
-
- '@csstools/selector-specificity@5.0.0':
- resolution: {integrity: sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss-selector-parser: ^7.0.0
-
- '@csstools/utilities@2.0.0':
- resolution: {integrity: sha512-5VdOr0Z71u+Yp3ozOx8T11N703wIFGVRgOWbOZMKgglPJsWA54MRIoMNVMa7shUToIhx5J8vX4sOZgD2XiihiQ==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- '@discoveryjs/json-ext@0.5.7':
- resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==}
- engines: {node: '>=10.0.0'}
-
- '@docsearch/css@3.9.0':
- resolution: {integrity: sha512-cQbnVbq0rrBwNAKegIac/t6a8nWoUAn8frnkLFW6YARaRmAQr5/Eoe6Ln2fqkUCZ40KpdrKbpSAmgrkviOxuWA==}
-
- '@docsearch/react@3.9.0':
- resolution: {integrity: sha512-mb5FOZYZIkRQ6s/NWnM98k879vu5pscWqTLubLFBO87igYYT4VzVazh4h5o/zCvTIZgEt3PvsCOMOswOUo9yHQ==}
- 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
-
- '@docusaurus/babel@3.10.2':
- resolution: {integrity: sha512-aJ1hpGyvfkte3dDAfNbWM4biW4yWZBVz7TIGLZP+v+tWOBgxX3e0N5ZIXHIvmfNNXTI77pcHUx3KmtOk05Ze3Q==}
- engines: {node: '>=20.0'}
-
- '@docusaurus/bundler@3.10.2':
- resolution: {integrity: sha512-i0ZNcy0f0WhaOlYVgzLsWhIoEXO9kS3HRoKPtgE6vQtZUq7arKZaYdNBudr3mqCmd+TyOkwtwfHgs1ENj07r5g==}
- engines: {node: '>=20.0'}
- peerDependencies:
- '@docusaurus/faster': '*'
- peerDependenciesMeta:
- '@docusaurus/faster':
- optional: true
-
- '@docusaurus/core@3.10.2':
- resolution: {integrity: sha512-EYByj6nk+aD9KeVxV6Hmo2/nAAT79P21Y82ycTBOBtrmqilloIbIEhgL2/8Xpt2Jz/pgNqHAwyusOGwmbKeJmA==}
- engines: {node: '>=20.0'}
- hasBin: true
- peerDependencies:
- '@docusaurus/faster': '*'
- '@mdx-js/react': ^3.0.0
- react: ^18.0.0 || ^19.0.0
- react-dom: ^18.0.0 || ^19.0.0
- peerDependenciesMeta:
- '@docusaurus/faster':
- optional: true
-
- '@docusaurus/cssnano-preset@3.10.2':
- resolution: {integrity: sha512-4gCnHRbJLTloiwfvFAa92tgb2gI4KYhvjfQVYnEaiMO/EgvWfCo1LwytHXen+1oZAN0VAlS0JAPxp3MsvKDa3A==}
- engines: {node: '>=20.0'}
-
- '@docusaurus/faster@3.10.2':
- resolution: {integrity: sha512-p/5E5/RyHv+QWusJMPN5i3OMJTqTgkhuwzVbB1AReDWTUHXQCmf5mlTFzGiDrWeQWIDOKsuOPn1jJh0s9LUOHA==}
- engines: {node: '>=20.0'}
- peerDependencies:
- '@docusaurus/types': '*'
-
- '@docusaurus/logger@3.10.2':
- resolution: {integrity: sha512-gSEwqtPfCAnC3ZSJY6xL7tcIfgg0vFD39jbv93eakuweyvO2864xR0K+kmKwBhkTCtWRNjuGGnb5rdmkD/ndqw==}
- engines: {node: '>=20.0'}
-
- '@docusaurus/mdx-loader@3.10.2':
- resolution: {integrity: sha512-9Fd4V/SFjfrVQ0JH5EN0+iPWyFunvTeQE3gfyFeetqPaXMP0OylIjOw16dCuXG4NZJrYdBqwzjh18/h3gRi47w==}
- engines: {node: '>=20.0'}
- peerDependencies:
- react: ^18.0.0 || ^19.0.0
- react-dom: ^18.0.0 || ^19.0.0
-
- '@docusaurus/module-type-aliases@3.10.2':
- resolution: {integrity: sha512-h/I5e4jaAhDHW4vaLENi1i2hnOEnXY1t9R+nnRTbgUl7ymVRzN/HF7dDfj8rKYGj8gfIge+Ef+iYRAMtbGvsrQ==}
- peerDependencies:
- react: '*'
- react-dom: '*'
-
- '@docusaurus/plugin-client-redirects@3.10.2':
- resolution: {integrity: sha512-z5I5ttCXw+8y2gHVZvqAMmUw4Rb0ZzKA5eCPk87SfM/jCKOTvE24yDpPAwwipvug96ij7mOwEHXWw8G4LlWdGA==}
- engines: {node: '>=20.0'}
- peerDependencies:
- react: ^18.0.0 || ^19.0.0
- react-dom: ^18.0.0 || ^19.0.0
-
- '@docusaurus/plugin-content-blog@3.10.2':
- resolution: {integrity: sha512-0cbEnNKf0InmLkhj/+nVRmqEnWEoOE8Mh+2x1qOXI0qYpCnphq4RXknVJ8BvybKRXqYVvbmdMfiJSup+k4tm5w==}
- engines: {node: '>=20.0'}
- peerDependencies:
- '@docusaurus/plugin-content-docs': '*'
- react: ^18.0.0 || ^19.0.0
- react-dom: ^18.0.0 || ^19.0.0
-
- '@docusaurus/plugin-content-docs@3.10.2':
- resolution: {integrity: sha512-Sqwl4FPoZBDrlY8I2VU2H8O0M91CHp9T8ToMSkTZmjvHCif+1laqfXi6sTk8IfyVS/trN5yNjcWd1bFsGB6W5Q==}
- engines: {node: '>=20.0'}
- peerDependencies:
- react: ^18.0.0 || ^19.0.0
- react-dom: ^18.0.0 || ^19.0.0
-
- '@docusaurus/plugin-content-pages@3.10.2':
- resolution: {integrity: sha512-h5R12sZ/vV9EPiVjvIl9YFCOwkpwXes7dQMYt3EvP6Pphu4amHxxTqWxf08Fl5DR8h+oZMbWpFTNw5vKEYfvzQ==}
- engines: {node: '>=20.0'}
- peerDependencies:
- react: ^18.0.0 || ^19.0.0
- react-dom: ^18.0.0 || ^19.0.0
-
- '@docusaurus/plugin-css-cascade-layers@3.10.2':
- resolution: {integrity: sha512-UkdvQby5OQUKWrw3lLnSTJXQ6VETaUVTuPQX9AABtmFm5h+ifEBx1OQ+LN726Q4byuwBf2ElHkf4qU4hTxdvRg==}
- engines: {node: '>=20.0'}
-
- '@docusaurus/plugin-debug@3.10.2':
- resolution: {integrity: sha512-8vbZNOSCpnsT57EY6CgN7sgRVmx3KTYwO8Uvo2pbxOyb8tbqAwtT9SslqaQ41HbA1v1hpn5RP7u5s2KvRwAFpQ==}
- engines: {node: '>=20.0'}
- peerDependencies:
- react: ^18.0.0 || ^19.0.0
- react-dom: ^18.0.0 || ^19.0.0
-
- '@docusaurus/plugin-google-analytics@3.10.2':
- resolution: {integrity: sha512-kMHMBK9j4VAtgd5owwrRLRIi0EjkrpXlX7ePj1+y68XfVZV9I1T4S+koPDm+Hfw2TtnyHvh0uNrDvjz+DjQGVA==}
- engines: {node: '>=20.0'}
- peerDependencies:
- react: ^18.0.0 || ^19.0.0
- react-dom: ^18.0.0 || ^19.0.0
-
- '@docusaurus/plugin-google-gtag@3.10.2':
- resolution: {integrity: sha512-Vt90nNFhtAChRe9+it1hcHFgFvETdSnOkL5Bma+p6E/yU2tAYrvvyk+gv+LJGM2ZUkyKuKXLRsZ2Lb0bO7+Vog==}
- engines: {node: '>=20.0'}
- peerDependencies:
- react: ^18.0.0 || ^19.0.0
- react-dom: ^18.0.0 || ^19.0.0
-
- '@docusaurus/plugin-google-tag-manager@3.10.2':
- resolution: {integrity: sha512-MLCffCldysi/R0nzJQP7ZWd0xAoGNnSTiVOo6TTR6mKVGFhE+/XArGe67ZcaZv1uytgQXoXs92VJrgVDrz80rQ==}
- engines: {node: '>=20.0'}
- peerDependencies:
- react: ^18.0.0 || ^19.0.0
- react-dom: ^18.0.0 || ^19.0.0
-
- '@docusaurus/plugin-sitemap@3.10.2':
- resolution: {integrity: sha512-PODkwg5XetLML3hU/3xpCKJUZ9cqExLaBnD/Fzzwj2VHogLeqnDisLIujae87zuze7T4mCm2A6KEqZkyiz07EQ==}
- engines: {node: '>=20.0'}
- peerDependencies:
- react: ^18.0.0 || ^19.0.0
- react-dom: ^18.0.0 || ^19.0.0
-
- '@docusaurus/plugin-svgr@3.10.2':
- resolution: {integrity: sha512-JgfT3jWM0TJ8Uw0cEcqxHpybngQY1vlBYpuuNO+gEh5iPh5Ar+vxq/u9CFrYsWeXy48BN7Db76Pzp2edNXUQ8A==}
- engines: {node: '>=20.0'}
- peerDependencies:
- react: ^18.0.0 || ^19.0.0
- react-dom: ^18.0.0 || ^19.0.0
-
- '@docusaurus/preset-classic@3.10.2':
- resolution: {integrity: sha512-a4B3VczmDl99zK0EufDQYomdJ186WDingjmDXxhN2PNPS9Ty/Y2M5CLFX1KQMRKqRTLiRDKfutzG5IY1FC/ceg==}
- engines: {node: '>=20.0'}
- peerDependencies:
- react: ^18.0.0 || ^19.0.0
- react-dom: ^18.0.0 || ^19.0.0
-
- '@docusaurus/react-loadable@6.0.0':
- resolution: {integrity: sha512-YMMxTUQV/QFSnbgrP3tjDzLHRg7vsbMn8e9HAa8o/1iXoiomo48b7sk/kkmWEuWNDPJVlKSJRB6Y2fHqdJk+SQ==}
- peerDependencies:
- react: '*'
-
- '@docusaurus/theme-classic@3.10.2':
- resolution: {integrity: sha512-JqTSLQmqmA9uKWZsD5iwBGJ4JyKB4/yTw6PsSXVPRJG/6GAm/u+add9Iip+hvwP12/AnPNztrdxsI14NJW4KeA==}
- engines: {node: '>=20.0'}
- peerDependencies:
- react: ^18.0.0 || ^19.0.0
- react-dom: ^18.0.0 || ^19.0.0
-
- '@docusaurus/theme-common@3.10.2':
- resolution: {integrity: sha512-R9b/vMpK1yye6hNZTA6x/ivRv+at6GhxnXcxkpzCGzO1R1RwiquqiFg2wMFh6aqlJTpWRFKpFD2TzCDQcyOU0A==}
- engines: {node: '>=20.0'}
- peerDependencies:
- '@docusaurus/plugin-content-docs': '*'
- react: ^18.0.0 || ^19.0.0
- react-dom: ^18.0.0 || ^19.0.0
-
- '@docusaurus/theme-mermaid@3.10.2':
- resolution: {integrity: sha512-Stssh5MYQJ+EdYugUXf+ZcpeJFQPKXf0KCd/SWp10o3CmXNaOoh5IEgVjVqY1e1XhQf3on4+Y4BnrMiD95E2SQ==}
- engines: {node: '>=20.0'}
- peerDependencies:
- '@mermaid-js/layout-elk': ^0.1.9
- react: ^18.0.0 || ^19.0.0
- react-dom: ^18.0.0 || ^19.0.0
- peerDependenciesMeta:
- '@mermaid-js/layout-elk':
- optional: true
-
- '@docusaurus/theme-search-algolia@3.10.2':
- resolution: {integrity: sha512-1msxllyhi/5m77JukXtp5UFnUAriwZIC1oJ7MTnpQpCwLTbclJi5BK5n28CTZuSXpQN2ewbbnqRgAhMM6c6ihg==}
- engines: {node: '>=20.0'}
- peerDependencies:
- react: ^18.0.0 || ^19.0.0
- react-dom: ^18.0.0 || ^19.0.0
-
- '@docusaurus/theme-translations@3.10.2':
- resolution: {integrity: sha512-iv20wrxnyXkY89LM3TzRlzGlt5fIGO5UnaR6UL1ZVfB9RRFjxQFQ6awDrwAc6Km8Y5gD8pInuwYPF+6/TiCxXA==}
- engines: {node: '>=20.0'}
-
- '@docusaurus/types@3.10.2':
- resolution: {integrity: sha512-B6rvfwIFSapUqUJjMriZswX13K8l5Z7AcmVE6uTEJpYddQieSTR12DsGaFtcZAIDsQd4p+0WTl0Vc6jmZK0Trw==}
- peerDependencies:
- react: ^18.0.0 || ^19.0.0
- react-dom: ^18.0.0 || ^19.0.0
-
- '@docusaurus/utils-common@3.10.2':
- resolution: {integrity: sha512-x3Dz6jv6iQKBNjBmVTu8p57abMp/VNTUgKBMgRVXJc5444orBTsArv0+cdfrXTiz/VMmHfDRVkPbL7GH2B7T7w==}
- engines: {node: '>=20.0'}
-
- '@docusaurus/utils-validation@3.10.2':
- resolution: {integrity: sha512-sn8unbDfUL585NtR3cwHefPicOyaHvPaX7VD0aOg/siIxUBoKyKKaGEqzJZDS64mM43TnxurkYDtmB1wsJlZsw==}
- engines: {node: '>=20.0'}
-
- '@docusaurus/utils@3.10.2':
- resolution: {integrity: sha512-xx0W3eav2uW1NRIpuHJWNwLTC15xPNjU4Uxi9NSnd3swYC96BE3vFiT93SD8s24kmAAWNwgZwfZ2fghGZ01Lcw==}
- engines: {node: '>=20.0'}
-
- '@emnapi/core@1.7.1':
- resolution: {integrity: sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==}
-
- '@emnapi/runtime@1.7.1':
- resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==}
-
- '@emnapi/wasi-threads@1.1.0':
- resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==}
-
- '@hapi/hoek@9.3.0':
- resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==}
-
- '@hapi/topo@5.1.0':
- resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==}
-
- '@iconify/types@2.0.0':
- resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
-
- '@iconify/utils@2.1.33':
- resolution: {integrity: sha512-jP9h6v/g0BIZx0p7XGJJVtkVnydtbgTgt9mVNcGDYwaa7UhdHdI9dvoq+gKj9sijMSJKxUPEG2JyjsgXjxL7Kw==}
-
- '@jest/schemas@29.6.3':
- resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
- '@jest/types@29.6.3':
- resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
- '@jridgewell/gen-mapping@0.3.5':
- resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}
- engines: {node: '>=6.0.0'}
-
- '@jridgewell/resolve-uri@3.1.2':
- resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
- engines: {node: '>=6.0.0'}
-
- '@jridgewell/set-array@1.2.1':
- resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
- engines: {node: '>=6.0.0'}
-
- '@jridgewell/source-map@0.3.6':
- resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==}
-
- '@jridgewell/sourcemap-codec@1.5.0':
- resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
-
- '@jridgewell/trace-mapping@0.3.25':
- resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
-
- '@jsonjoy.com/base64@1.1.2':
- resolution: {integrity: sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==}
- engines: {node: '>=10.0'}
- peerDependencies:
- tslib: '2'
-
- '@jsonjoy.com/buffers@1.2.1':
- resolution: {integrity: sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==}
- engines: {node: '>=10.0'}
- peerDependencies:
- tslib: '2'
-
- '@jsonjoy.com/codegen@1.0.0':
- resolution: {integrity: sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==}
- engines: {node: '>=10.0'}
- peerDependencies:
- tslib: '2'
-
- '@jsonjoy.com/json-pack@1.21.0':
- resolution: {integrity: sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg==}
- engines: {node: '>=10.0'}
- peerDependencies:
- tslib: '2'
-
- '@jsonjoy.com/json-pointer@1.0.2':
- resolution: {integrity: sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==}
- engines: {node: '>=10.0'}
- peerDependencies:
- tslib: '2'
-
- '@jsonjoy.com/util@1.9.0':
- resolution: {integrity: sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ==}
- engines: {node: '>=10.0'}
- peerDependencies:
- tslib: '2'
-
- '@leichtgewicht/ip-codec@2.0.5':
- resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==}
-
- '@mdx-js/mdx@3.1.0':
- resolution: {integrity: sha512-/QxEhPAvGwbQmy1Px8F899L5Uc2KZ6JtXwlCgJmjSTBedwOZkByYcBG4GceIGPXRDsmfxhHazuS+hlOShRLeDw==}
-
- '@mdx-js/react@3.1.1':
- resolution: {integrity: sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==}
- peerDependencies:
- '@types/react': '>=16'
- react: '>=16'
-
- '@mermaid-js/parser@0.4.0':
- resolution: {integrity: sha512-wla8XOWvQAwuqy+gxiZqY+c7FokraOTHRWMsbB4AgRx9Sy7zKslNyejy7E+a77qHfey5GXw/ik3IXv/NHMJgaA==}
-
- '@module-federation/error-codes@0.22.0':
- resolution: {integrity: sha512-xF9SjnEy7vTdx+xekjPCV5cIHOGCkdn3pIxo9vU7gEZMIw0SvAEdsy6Uh17xaCpm8V0FWvR0SZoK9Ik6jGOaug==}
-
- '@module-federation/runtime-core@0.22.0':
- resolution: {integrity: sha512-GR1TcD6/s7zqItfhC87zAp30PqzvceoeDGYTgF3Vx2TXvsfDrhP6Qw9T4vudDQL3uJRne6t7CzdT29YyVxlgIA==}
-
- '@module-federation/runtime-tools@0.22.0':
- resolution: {integrity: sha512-4ScUJ/aUfEernb+4PbLdhM/c60VHl698Gn1gY21m9vyC1Ucn69fPCA1y2EwcCB7IItseRMoNhdcWQnzt/OPCNA==}
-
- '@module-federation/runtime@0.22.0':
- resolution: {integrity: sha512-38g5iPju2tPC3KHMPxRKmy4k4onNp6ypFPS1eKGsNLUkXgHsPMBFqAjDw96iEcjri91BrahG4XcdyKi97xZzlA==}
-
- '@module-federation/sdk@0.22.0':
- resolution: {integrity: sha512-x4aFNBKn2KVQRuNVC5A7SnrSCSqyfIWmm1DvubjbO9iKFe7ith5niw8dqSFBekYBg2Fwy+eMg4sEFNVvCAdo6g==}
-
- '@module-federation/webpack-bundler-runtime@0.22.0':
- resolution: {integrity: sha512-aM8gCqXu+/4wBmJtVeMeeMN5guw3chf+2i6HajKtQv7SJfxV/f4IyNQJUeUQu9HfiAZHjqtMV5Lvq/Lvh8LdyA==}
-
- '@napi-rs/wasm-runtime@1.0.7':
- resolution: {integrity: sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==}
-
- '@nodelib/fs.scandir@2.1.5':
- resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
- engines: {node: '>= 8'}
-
- '@nodelib/fs.stat@2.0.5':
- resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
- engines: {node: '>= 8'}
-
- '@nodelib/fs.walk@1.2.8':
- resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
- engines: {node: '>= 8'}
-
- '@parcel/watcher-android-arm64@2.5.1':
- resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==}
- engines: {node: '>= 10.0.0'}
- cpu: [arm64]
- os: [android]
-
- '@parcel/watcher-darwin-arm64@2.5.1':
- resolution: {integrity: sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==}
- engines: {node: '>= 10.0.0'}
- cpu: [arm64]
- os: [darwin]
-
- '@parcel/watcher-darwin-x64@2.5.1':
- resolution: {integrity: sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==}
- engines: {node: '>= 10.0.0'}
- cpu: [x64]
- os: [darwin]
-
- '@parcel/watcher-freebsd-x64@2.5.1':
- resolution: {integrity: sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==}
- engines: {node: '>= 10.0.0'}
- cpu: [x64]
- os: [freebsd]
-
- '@parcel/watcher-linux-arm-glibc@2.5.1':
- resolution: {integrity: sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==}
- engines: {node: '>= 10.0.0'}
- cpu: [arm]
- os: [linux]
- libc: [glibc]
-
- '@parcel/watcher-linux-arm-musl@2.5.1':
- resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==}
- engines: {node: '>= 10.0.0'}
- cpu: [arm]
- os: [linux]
- libc: [musl]
-
- '@parcel/watcher-linux-arm64-glibc@2.5.1':
- resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==}
- engines: {node: '>= 10.0.0'}
- cpu: [arm64]
- os: [linux]
- libc: [glibc]
-
- '@parcel/watcher-linux-arm64-musl@2.5.1':
- resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==}
- engines: {node: '>= 10.0.0'}
- cpu: [arm64]
- os: [linux]
- libc: [musl]
-
- '@parcel/watcher-linux-x64-glibc@2.5.1':
- resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==}
- engines: {node: '>= 10.0.0'}
- cpu: [x64]
- os: [linux]
- libc: [glibc]
-
- '@parcel/watcher-linux-x64-musl@2.5.1':
- resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==}
- engines: {node: '>= 10.0.0'}
- cpu: [x64]
- os: [linux]
- libc: [musl]
-
- '@parcel/watcher-win32-arm64@2.5.1':
- resolution: {integrity: sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==}
- engines: {node: '>= 10.0.0'}
- cpu: [arm64]
- os: [win32]
-
- '@parcel/watcher-win32-ia32@2.5.1':
- resolution: {integrity: sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==}
- engines: {node: '>= 10.0.0'}
- cpu: [ia32]
- os: [win32]
-
- '@parcel/watcher-win32-x64@2.5.1':
- resolution: {integrity: sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==}
- engines: {node: '>= 10.0.0'}
- cpu: [x64]
- os: [win32]
-
- '@parcel/watcher@2.5.1':
- resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==}
- engines: {node: '>= 10.0.0'}
-
- '@pnpm/config.env-replace@1.1.0':
- resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==}
- engines: {node: '>=12.22.0'}
-
- '@pnpm/network.ca-file@1.0.2':
- resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==}
- engines: {node: '>=12.22.0'}
-
- '@pnpm/npm-conf@2.3.1':
- resolution: {integrity: sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==}
- engines: {node: '>=12'}
-
- '@polka/url@1.0.0-next.28':
- resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==}
-
- '@rspack/binding-darwin-arm64@1.7.11':
- resolution: {integrity: sha512-oduECiZVqbO5zlVw+q7Vy65sJFth99fWPTyucwvLJJtJkPL5n17Uiql2cYP6Ijn0pkqtf1SXgK8WjiKLG5bIig==}
- cpu: [arm64]
- os: [darwin]
-
- '@rspack/binding-darwin-x64@1.7.11':
- resolution: {integrity: sha512-a1+TtTE9ap6RalgFi7FGIgkJP6O4Vy6ctv+9WGJy53E4kuqHR0RygzaiVxCI/GMc/vBT9vY23hyrpWb3d1vtXA==}
- cpu: [x64]
- os: [darwin]
-
- '@rspack/binding-linux-arm64-gnu@1.7.11':
- resolution: {integrity: sha512-P0QrGRPbTWu6RKWfN0bDtbnEps3rXH0MWIMreZABoUrVmNQKtXR6e73J3ub6a+di5s2+K0M2LJ9Bh2/H4UsDUA==}
- cpu: [arm64]
- os: [linux]
- libc: [glibc]
-
- '@rspack/binding-linux-arm64-musl@1.7.11':
- resolution: {integrity: sha512-6ky7R43VMjWwmx3Yx7Jl7faLBBMAgMDt+/bN35RgwjiPgsIByz65EwytUVuW9rikB43BGHvA/eqlnjLrUzNBqw==}
- cpu: [arm64]
- os: [linux]
- libc: [musl]
-
- '@rspack/binding-linux-x64-gnu@1.7.11':
- resolution: {integrity: sha512-cuOJMfCOvb2Wgsry5enXJ3iT1FGUjdPqtGUBVupQlEG4ntSYsQ2PtF4wIDVasR3wdxC5nQbipOrDiN/u6fYsdQ==}
- cpu: [x64]
- os: [linux]
- libc: [glibc]
-
- '@rspack/binding-linux-x64-musl@1.7.11':
- resolution: {integrity: sha512-CoK37hva4AmHGh3VCsQXmGr40L36m1/AdnN5LEjUX6kx5rEH7/1nEBN6Ii72pejqDVvk9anEROmPDiPw10tpFg==}
- cpu: [x64]
- os: [linux]
- libc: [musl]
-
- '@rspack/binding-wasm32-wasi@1.7.11':
- resolution: {integrity: sha512-OtrmnPUVJMxjNa3eDMfHyPdtlLRmmp/aIm0fQHlAOATbZvlGm12q7rhPW5BXTu1yh+1rQ1/uqvz+SzKEZXuJaQ==}
- cpu: [wasm32]
-
- '@rspack/binding-win32-arm64-msvc@1.7.11':
- resolution: {integrity: sha512-lObFW6e5lCWNgTBNwT//yiEDbsxm9QG4BYUojqeXxothuzJ/L6ibXz6+gLMvbOvLGV3nKgkXmx8GvT9WDKR0mA==}
- cpu: [arm64]
- os: [win32]
-
- '@rspack/binding-win32-ia32-msvc@1.7.11':
- resolution: {integrity: sha512-0pYGnZd8PPqNR68zQ8skamqNAXEA1sUfXuAdYcknIIRq2wsbiwFzIc0Pov1cIfHYab37G7sSIPBiOUdOWF5Ivw==}
- cpu: [ia32]
- os: [win32]
-
- '@rspack/binding-win32-x64-msvc@1.7.11':
- resolution: {integrity: sha512-EeQXayoQk/uBkI3pdoXfQBXNIUrADq56L3s/DFyM2pJeUDrWmhfIw2UFIGkYPTMSCo8F2JcdcGM32FGJrSnU0Q==}
- cpu: [x64]
- os: [win32]
-
- '@rspack/binding@1.7.11':
- resolution: {integrity: sha512-2MGdy2s2HimsDT444Bp5XnALzNRxuBNc7y0JzyuqKbHBywd4x2NeXyhWXXoxufaCFu5PBc9Qq9jyfjW2Aeh06Q==}
-
- '@rspack/core@1.7.11':
- resolution: {integrity: sha512-rsD9b+Khmot5DwCMiB3cqTQo53ioPG3M/A7BySu8+0+RS7GCxKm+Z+mtsjtG/vsu4Tn2tcqCdZtA3pgLoJB+ew==}
- engines: {node: '>=18.12.0'}
- peerDependencies:
- '@swc/helpers': '>=0.5.1'
- peerDependenciesMeta:
- '@swc/helpers':
- optional: true
-
- '@rspack/lite-tapable@1.1.0':
- resolution: {integrity: sha512-E2B0JhYFmVAwdDiG14+DW0Di4Ze4Jg10Pc4/lILUrd5DRCaklduz2OvJ5HYQ6G+hd+WTzqQb3QnDNfK4yvAFYw==}
-
- '@shikijs/core@4.4.3':
- resolution: {integrity: sha512-QCR4q2ZO/ILJEuwiBMel4wdcTDb1JGwfjKTxPDF6x8ixOaluPrVqIn06C99AcRPhmYlBR56d/Fb+GN58GzExpg==}
- engines: {node: '>=20'}
-
- '@shikijs/engine-javascript@4.4.3':
- resolution: {integrity: sha512-FbOjFJp9VLdo1Wevs10BBtVxiTWwNLqZh5Gkhjgda/ioL15YOgeSl9n+6XMa3qRlPQzfhFNe641SrynFHYG0nQ==}
- engines: {node: '>=20'}
-
- '@shikijs/engine-oniguruma@4.4.3':
- resolution: {integrity: sha512-EcOQkxdxGQrc1Row/cC2c96/v1dbZqGnEVu1qTuT/MJmp6+cXCvQussowVmCv5Tqr3KuY3c7IbM6HTW3LJ1k9w==}
- engines: {node: '>=20'}
-
- '@shikijs/langs@4.4.3':
- resolution: {integrity: sha512-ePic0yfAJGOF83D5wBHK/00EjK65oahBYxFk5epgq33WRv7X9UuxLEV8PtR0szC0z8dl7INIpIodB99JRFlR+A==}
- engines: {node: '>=20'}
-
- '@shikijs/primitive@4.4.3':
- resolution: {integrity: sha512-m0wBeLDQDeIxRdUmrCPdQqfuUamDwRL5isCfYbguKD6NiaKpVbsv+3J81DyIKgNW5h4WAIIr8T4EkgQrBBxvaQ==}
- engines: {node: '>=20'}
-
- '@shikijs/rehype@4.4.3':
- resolution: {integrity: sha512-vkG9jG1aRnrx05R31uAOKQHE8qpY7r1cBXE2sAZgFK2IaPnQHwaP4L1C6amQixmZ8thBsKwfbSsYxMDoo46UWQ==}
- engines: {node: '>=20'}
-
- '@shikijs/themes@4.4.3':
- resolution: {integrity: sha512-w8UHjeUnIR965KMWJHUPXOc2mNJUnK3vpVLYLvw5IYU2mnTTJ89E24OrJDBNiJDQ0qzb0tc4l7mrIXx5cFeIyw==}
- engines: {node: '>=20'}
-
- '@shikijs/transformers@4.4.3':
- resolution: {integrity: sha512-oJSARV6NaWd+rnNJbtnpAdj3Zg0ZVyzsnMgb3vi3HA+35y8lBWUCpOnWsmyiXZIikY+x1BDqrQUgmxfzWh7Jvw==}
- engines: {node: '>=20'}
-
- '@shikijs/types@4.4.3':
- resolution: {integrity: sha512-UEJxmRR++MAGR6hugn0vgVS2W/6lWAts84FFSrnlH9sP0LNol7E5+NQ792pH8liWUhyMyjhTgSUH3k7iD7tc5g==}
- engines: {node: '>=20'}
-
- '@shikijs/vscode-textmate@10.0.2':
- resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==}
-
- '@sideway/address@4.1.5':
- resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==}
-
- '@sideway/formula@3.0.1':
- resolution: {integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==}
-
- '@sideway/pinpoint@2.0.0':
- resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==}
-
- '@sinclair/typebox@0.27.8':
- resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==}
-
- '@sindresorhus/is@4.6.0':
- resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==}
- engines: {node: '>=10'}
-
- '@sindresorhus/is@5.6.0':
- resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==}
- engines: {node: '>=14.16'}
-
- '@slorber/react-helmet-async@1.3.0':
- resolution: {integrity: sha512-e9/OK8VhwUSc67diWI8Rb3I0YgI9/SBQtnhe9aEuK6MhZm7ntZZimXgwXnd8W96YTmSOb9M4d8LwhRZyhWr/1A==}
- peerDependencies:
- react: ^16.6.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
- react-dom: ^16.6.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
-
- '@slorber/remark-comment@1.0.0':
- resolution: {integrity: sha512-RCE24n7jsOj1M0UPvIQCHTe7fI0sFL4S2nwKVWwHyVr/wI/H8GosgsJGyhnsZoGFnD/P2hLf1mSbrrgSLN93NA==}
-
- '@svgr/babel-plugin-add-jsx-attribute@5.4.0':
- resolution: {integrity: sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==}
- engines: {node: '>=10'}
-
- '@svgr/babel-plugin-add-jsx-attribute@8.0.0':
- resolution: {integrity: sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==}
- engines: {node: '>=14'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@svgr/babel-plugin-remove-jsx-attribute@5.4.0':
- resolution: {integrity: sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==}
- engines: {node: '>=10'}
-
- '@svgr/babel-plugin-remove-jsx-attribute@8.0.0':
- resolution: {integrity: sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==}
- engines: {node: '>=14'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@svgr/babel-plugin-remove-jsx-empty-expression@5.0.1':
- resolution: {integrity: sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==}
- engines: {node: '>=10'}
-
- '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0':
- resolution: {integrity: sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==}
- engines: {node: '>=14'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@svgr/babel-plugin-replace-jsx-attribute-value@5.0.1':
- resolution: {integrity: sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==}
- engines: {node: '>=10'}
-
- '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0':
- resolution: {integrity: sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==}
- engines: {node: '>=14'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@svgr/babel-plugin-svg-dynamic-title@5.4.0':
- resolution: {integrity: sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==}
- engines: {node: '>=10'}
-
- '@svgr/babel-plugin-svg-dynamic-title@8.0.0':
- resolution: {integrity: sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==}
- engines: {node: '>=14'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@svgr/babel-plugin-svg-em-dimensions@5.4.0':
- resolution: {integrity: sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==}
- engines: {node: '>=10'}
-
- '@svgr/babel-plugin-svg-em-dimensions@8.0.0':
- resolution: {integrity: sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==}
- engines: {node: '>=14'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@svgr/babel-plugin-transform-react-native-svg@5.4.0':
- resolution: {integrity: sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==}
- engines: {node: '>=10'}
-
- '@svgr/babel-plugin-transform-react-native-svg@8.1.0':
- resolution: {integrity: sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==}
- engines: {node: '>=14'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@svgr/babel-plugin-transform-svg-component@5.5.0':
- resolution: {integrity: sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==}
- engines: {node: '>=10'}
-
- '@svgr/babel-plugin-transform-svg-component@8.0.0':
- resolution: {integrity: sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==}
- engines: {node: '>=12'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@svgr/babel-preset@5.5.0':
- resolution: {integrity: sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==}
- engines: {node: '>=10'}
-
- '@svgr/babel-preset@8.1.0':
- resolution: {integrity: sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==}
- engines: {node: '>=14'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@svgr/core@5.5.0':
- resolution: {integrity: sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==}
- engines: {node: '>=10'}
-
- '@svgr/core@8.1.0':
- resolution: {integrity: sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==}
- engines: {node: '>=14'}
-
- '@svgr/hast-util-to-babel-ast@5.5.0':
- resolution: {integrity: sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==}
- engines: {node: '>=10'}
-
- '@svgr/hast-util-to-babel-ast@8.0.0':
- resolution: {integrity: sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==}
- engines: {node: '>=14'}
-
- '@svgr/plugin-jsx@5.5.0':
- resolution: {integrity: sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==}
- engines: {node: '>=10'}
-
- '@svgr/plugin-jsx@8.1.0':
- resolution: {integrity: sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==}
- engines: {node: '>=14'}
- peerDependencies:
- '@svgr/core': '*'
-
- '@svgr/plugin-svgo@5.5.0':
- resolution: {integrity: sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==}
- engines: {node: '>=10'}
-
- '@svgr/plugin-svgo@8.1.0':
- resolution: {integrity: sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA==}
- engines: {node: '>=14'}
- peerDependencies:
- '@svgr/core': '*'
-
- '@svgr/webpack@5.5.0':
- resolution: {integrity: sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==}
- engines: {node: '>=10'}
-
- '@svgr/webpack@8.1.0':
- resolution: {integrity: sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA==}
- engines: {node: '>=14'}
-
- '@swc/core-darwin-arm64@1.16.0':
- resolution: {integrity: sha512-SJQPl+xG/zB8bNjC/gTg3WOmOvz7EzlQD+VShfCKFYPNr2qvb+vATUY11vYEjnMWCn6wV8H8eAtjQrVflYyX5A==}
- engines: {node: '>=10'}
- cpu: [arm64]
- os: [darwin]
-
- '@swc/core-darwin-x64@1.16.0':
- resolution: {integrity: sha512-ql2JVch8V5t1i+HxiiuD4oVDI1dOku4/e3QiCkplONrm3SLitqNAP+nztHN51fSG2IgGuOwpAi3hgA+ukT5yQg==}
- engines: {node: '>=10'}
- cpu: [x64]
- os: [darwin]
-
- '@swc/core-linux-arm-gnueabihf@1.16.0':
- resolution: {integrity: sha512-PcdDBaRbe39y37h1rXVkhNy7mEU7f8b34KD761C68R23EsfMsj5oDPVddRzGdSRAvwwSfH0WSNEHgYmc/AJipg==}
- engines: {node: '>=10'}
- cpu: [arm]
- os: [linux]
-
- '@swc/core-linux-arm64-gnu@1.16.0':
- resolution: {integrity: sha512-t21IUztHQ/COucy7Kk9eIlehmq08H/hYq7aRA6fZox3S5ddi6TxWPK6e5S/+aTCf6+Od9qQ+LIpjHMiTy737vA==}
- engines: {node: '>=10'}
- cpu: [arm64]
- os: [linux]
- libc: [glibc]
-
- '@swc/core-linux-arm64-musl@1.16.0':
- resolution: {integrity: sha512-d9+iajbMB87b0umgbP+Gy3yBDSDgty4Q6H5pZ8fgTb/dOoKIwwynP4L4kvWCOFg2i49kxmAAUs1uJZh9s0E+RQ==}
- engines: {node: '>=10'}
- cpu: [arm64]
- os: [linux]
- libc: [musl]
-
- '@swc/core-linux-ppc64-gnu@1.16.0':
- resolution: {integrity: sha512-QRpeKGOg+B0qmo3BFU+6rL/gpoKYYJ7OFSMf5DNMafohYZ/iq2qvAH9Gcrf8NxROj3iooKOVewJ+YgahH1nSLw==}
- engines: {node: '>=10'}
- cpu: [ppc64]
- os: [linux]
- libc: [glibc]
-
- '@swc/core-linux-s390x-gnu@1.16.0':
- resolution: {integrity: sha512-q+Vr/hmHCcRXT/WFzOJC+T6GGEEtq2iaTtmyLfxO7yzu4ckgcqSNkg9m181wfNhuMwfNBoBhOfwQCnLsGZ5F4g==}
- engines: {node: '>=10'}
- cpu: [s390x]
- os: [linux]
- libc: [glibc]
-
- '@swc/core-linux-x64-gnu@1.16.0':
- resolution: {integrity: sha512-DWVBc3QnpsSgKoq8N4rmZeZa5r/XrHdLkITsExN/tvTdqPtAPDPt+Ysy33OfgBlyN8lNe4xwsXWe6DXlRkJeRQ==}
- engines: {node: '>=10'}
- cpu: [x64]
- os: [linux]
- libc: [glibc]
-
- '@swc/core-linux-x64-musl@1.16.0':
- resolution: {integrity: sha512-6XCgDSc1HPf/5dpjvABhKHICiBcsuZyW3hQMkn8sxel0TqprkJGp+H4iaBYIUTPixhrBub2hBPtfjcZLE6yL3w==}
- engines: {node: '>=10'}
- cpu: [x64]
- os: [linux]
- libc: [musl]
-
- '@swc/core-win32-arm64-msvc@1.16.0':
- resolution: {integrity: sha512-T/+9VVCZJ3AKEth9IP3U9AJ2YscQq+7LUqRTvfR4a2q36+Ri22oOwUizpAKOqQ42vb2Y/kOa4TOcJOfHoDIT/w==}
- engines: {node: '>=10'}
- cpu: [arm64]
- os: [win32]
-
- '@swc/core-win32-ia32-msvc@1.16.0':
- resolution: {integrity: sha512-Pr1lsR/PMs8ndL0UWMrW8nLZ7H7sspIxBRDdjL8f+YJ/FJNASgzfunbVVXAqj0csgIJYHPZy+OW9smjFmk1Rcg==}
- engines: {node: '>=10'}
- cpu: [ia32]
- os: [win32]
-
- '@swc/core-win32-x64-msvc@1.16.0':
- resolution: {integrity: sha512-ktdeYLgOQdaonvsj5tJijqgpb0wk7gfF80wCFVA0kucI1hhSUIyfcGbjo5+9sdqv38OhMnTdLoA6xbqgOgPQjw==}
- engines: {node: '>=10'}
- cpu: [x64]
- os: [win32]
-
- '@swc/core@1.16.0':
- resolution: {integrity: sha512-zSdvEHxBg00WhUNtW/u58hhcdR33gjtMQvOBo8F7POWJDyjRCt/miKfhidT3hCc/118RUwNnlEAmxiihFMbK4Q==}
- engines: {node: '>=10'}
- peerDependencies:
- '@swc/helpers': '>=0.5.17'
- peerDependenciesMeta:
- '@swc/helpers':
- optional: true
-
- '@swc/counter@0.1.3':
- resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==}
-
- '@swc/html-darwin-arm64@1.16.0':
- resolution: {integrity: sha512-vp8i42hiGM/Jy4lY48sOu+y02SnWKpqxsUErCHnWIU/G8WxHdZrX+xn8VOph/eQXFk4kU+/kGdaRDrRKGMITnQ==}
- engines: {node: '>=10'}
- cpu: [arm64]
- os: [darwin]
-
- '@swc/html-darwin-x64@1.16.0':
- resolution: {integrity: sha512-CsRsBMO2evmQbz1JEzwbebzZro4F1TjT0IGrEk/IxzRMmQjJ8zfNOe140ToouuZs3HnLSuJQgMadI2WE76fxbw==}
- engines: {node: '>=10'}
- cpu: [x64]
- os: [darwin]
-
- '@swc/html-linux-arm-gnueabihf@1.16.0':
- resolution: {integrity: sha512-Dbw/+0FQLzhcYOIUktBUu34qpBFsnW+qp6kid8Dfs/M8FUOOsST96zh7lZ3NSV/Z7XgOuvWDXz5HVmevuiRm+w==}
- engines: {node: '>=10'}
- cpu: [arm]
- os: [linux]
-
- '@swc/html-linux-arm64-gnu@1.16.0':
- resolution: {integrity: sha512-e3EyiP0e8Y9UMY/Kmdg4rcq934WHRcvjElHaGQkDecypGxDC9eoihNlrSTxNZQXnCrgUoqrGfxQiappYUwA86A==}
- engines: {node: '>=10'}
- cpu: [arm64]
- os: [linux]
- libc: [glibc]
-
- '@swc/html-linux-arm64-musl@1.16.0':
- resolution: {integrity: sha512-f9lCGwEJIwOOjpunMq8ALWHhSzd/8D4bgmEPsUrkHbTxSopKU1hPxTSPwGZvwNxWNsTJjACZsnAyyGcND+O5aQ==}
- engines: {node: '>=10'}
- cpu: [arm64]
- os: [linux]
- libc: [musl]
-
- '@swc/html-linux-ppc64-gnu@1.16.0':
- resolution: {integrity: sha512-Yc4Q4agRXBDLI1gs3HEwf6Rp2U0z+6ivmie77bfPjH5b1EOC3g/XrviNtAFfG7sEYzEjHZGHTr5ohs9Hd3ibYw==}
- engines: {node: '>=10'}
- cpu: [ppc64]
- os: [linux]
- libc: [glibc]
-
- '@swc/html-linux-s390x-gnu@1.16.0':
- resolution: {integrity: sha512-0LqXAV+uBZJeqYCsLDE2QtZqHK2sAzOo51BJP45GQLqjIWYY5ujnSIMppZeaDclS/ZIpRIegluypTA2BoQW9qg==}
- engines: {node: '>=10'}
- cpu: [s390x]
- os: [linux]
- libc: [glibc]
-
- '@swc/html-linux-x64-gnu@1.16.0':
- resolution: {integrity: sha512-AglfxbBTnc1q+cDLufeqvgsNytiuSJbjPLxOJ9QM8fz49iZJQicD//Y4OgsD+2FVfbMsL4/g60+jE3aTEpGqbQ==}
- engines: {node: '>=10'}
- cpu: [x64]
- os: [linux]
- libc: [glibc]
-
- '@swc/html-linux-x64-musl@1.16.0':
- resolution: {integrity: sha512-Xa0sEUCowK9fN2Na0bguTGdx++BjLeONFG3omWVPMEd2VTJYOfNVhqka4pKbmQUocCVhQbxewuuZOxrO/6Fk6Q==}
- engines: {node: '>=10'}
- cpu: [x64]
- os: [linux]
- libc: [musl]
-
- '@swc/html-win32-arm64-msvc@1.16.0':
- resolution: {integrity: sha512-8CR2aS/kWzr/cFlRschBUj94SiZ87f36U3ChUQX/fEoHTR1Z29PQTdmqtna4wueSNItk2Q1gyi6Y1OD0U/iDuQ==}
- engines: {node: '>=10'}
- cpu: [arm64]
- os: [win32]
-
- '@swc/html-win32-ia32-msvc@1.16.0':
- resolution: {integrity: sha512-UlNq29HY9HtDnVUEB37IRrzqMh/mdksc2djKikouNRJ0bJvp4wIcXfkRKNMS+9wDgXdtMWV8JNyAKOGTwvt4UQ==}
- engines: {node: '>=10'}
- cpu: [ia32]
- os: [win32]
-
- '@swc/html-win32-x64-msvc@1.16.0':
- resolution: {integrity: sha512-3a+67eFx2XLWzDtYs5dg/t20J8uFXemF68tt7vIKyItdNzew+ivBu19JzQN/6wGSVHrXqf17vEQwmOO+gEYi1A==}
- engines: {node: '>=10'}
- cpu: [x64]
- os: [win32]
-
- '@swc/html@1.16.0':
- resolution: {integrity: sha512-mVJxXQo4Ga0OX5/aF6gKeclfps/aVsJpfaiEMifoplOhVBXGeKeMkr81Icspg/6WErbINVb1P47VFbj6cv+UrA==}
- engines: {node: '>=14'}
-
- '@swc/types@0.1.28':
- resolution: {integrity: sha512-V6Mnml8v09QALx6K0elJ7o9K/MkVDtW3t6L+7Ou/JcWtb3xwId2AH4FeOceySd2JaO87IMw4+6vSZxLm34LPbw==}
-
- '@szmarczak/http-timer@5.0.1':
- resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==}
- engines: {node: '>=14.16'}
-
- '@trysound/sax@0.2.0':
- resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==}
- engines: {node: '>=10.13.0'}
-
- '@tybys/wasm-util@0.10.1':
- resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==}
-
- '@types/acorn@4.0.6':
- resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==}
-
- '@types/body-parser@1.19.5':
- resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==}
-
- '@types/bonjour@3.5.13':
- resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==}
-
- '@types/connect-history-api-fallback@1.5.4':
- resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==}
-
- '@types/connect@3.4.38':
- resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
-
- '@types/d3-array@3.2.1':
- resolution: {integrity: sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==}
-
- '@types/d3-axis@3.0.6':
- resolution: {integrity: sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==}
-
- '@types/d3-brush@3.0.6':
- resolution: {integrity: sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==}
-
- '@types/d3-chord@3.0.6':
- resolution: {integrity: sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==}
-
- '@types/d3-color@3.1.3':
- resolution: {integrity: sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==}
-
- '@types/d3-contour@3.0.6':
- resolution: {integrity: sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==}
-
- '@types/d3-delaunay@6.0.4':
- resolution: {integrity: sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==}
-
- '@types/d3-dispatch@3.0.6':
- resolution: {integrity: sha512-4fvZhzMeeuBJYZXRXrRIQnvUYfyXwYmLsdiN7XXmVNQKKw1cM8a5WdID0g1hVFZDqT9ZqZEY5pD44p24VS7iZQ==}
-
- '@types/d3-drag@3.0.7':
- resolution: {integrity: sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==}
-
- '@types/d3-dsv@3.0.7':
- resolution: {integrity: sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==}
-
- '@types/d3-ease@3.0.2':
- resolution: {integrity: sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==}
-
- '@types/d3-fetch@3.0.7':
- resolution: {integrity: sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==}
-
- '@types/d3-force@3.0.10':
- resolution: {integrity: sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==}
-
- '@types/d3-format@3.0.4':
- resolution: {integrity: sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==}
-
- '@types/d3-geo@3.1.0':
- resolution: {integrity: sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==}
-
- '@types/d3-hierarchy@3.1.7':
- resolution: {integrity: sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==}
-
- '@types/d3-interpolate@3.0.4':
- resolution: {integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==}
-
- '@types/d3-path@3.1.0':
- resolution: {integrity: sha512-P2dlU/q51fkOc/Gfl3Ul9kicV7l+ra934qBFXCFhrZMOL6du1TM0pm1ThYvENukyOn5h9v+yMJ9Fn5JK4QozrQ==}
-
- '@types/d3-polygon@3.0.2':
- resolution: {integrity: sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==}
-
- '@types/d3-quadtree@3.0.6':
- resolution: {integrity: sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==}
-
- '@types/d3-random@3.0.3':
- resolution: {integrity: sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==}
-
- '@types/d3-scale-chromatic@3.0.3':
- resolution: {integrity: sha512-laXM4+1o5ImZv3RpFAsTRn3TEkzqkytiOY0Dz0sq5cnd1dtNlk6sHLon4OvqaiJb28T0S/TdsBI3Sjsy+keJrw==}
-
- '@types/d3-scale@4.0.8':
- resolution: {integrity: sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==}
-
- '@types/d3-selection@3.0.11':
- resolution: {integrity: sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==}
-
- '@types/d3-shape@3.1.6':
- resolution: {integrity: sha512-5KKk5aKGu2I+O6SONMYSNflgiP0WfZIQvVUMan50wHsLG1G94JlxEVnCpQARfTtzytuY0p/9PXXZb3I7giofIA==}
-
- '@types/d3-time-format@4.0.3':
- resolution: {integrity: sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==}
-
- '@types/d3-time@3.0.3':
- resolution: {integrity: sha512-2p6olUZ4w3s+07q3Tm2dbiMZy5pCDfYwtLXXHUnVzXgQlZ/OyPtUz6OL382BkOuGlLXqfT+wqv8Fw2v8/0geBw==}
-
- '@types/d3-timer@3.0.2':
- resolution: {integrity: sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==}
-
- '@types/d3-transition@3.0.9':
- resolution: {integrity: sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==}
-
- '@types/d3-zoom@3.0.8':
- resolution: {integrity: sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==}
-
- '@types/d3@7.4.3':
- resolution: {integrity: sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==}
-
- '@types/debug@4.1.12':
- resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==}
-
- '@types/estree-jsx@1.0.5':
- resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==}
-
- '@types/estree@1.0.6':
- resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
-
- '@types/express-serve-static-core@4.19.6':
- resolution: {integrity: sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==}
-
- '@types/express-serve-static-core@5.0.0':
- resolution: {integrity: sha512-AbXMTZGt40T+KON9/Fdxx0B2WK5hsgxcfXJLr5bFpZ7b4JCex2WyQPTEKdXqfHiY5nKKBScZ7yCoO6Pvgxfvnw==}
-
- '@types/express@4.17.21':
- resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==}
-
- '@types/geojson@7946.0.14':
- resolution: {integrity: sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg==}
-
- '@types/hast@3.0.4':
- resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==}
-
- '@types/hast@3.0.5':
- resolution: {integrity: sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==}
-
- '@types/history@4.7.11':
- resolution: {integrity: sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==}
-
- '@types/html-minifier-terser@6.1.0':
- resolution: {integrity: sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==}
-
- '@types/http-cache-semantics@4.0.4':
- resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==}
-
- '@types/http-errors@2.0.4':
- resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==}
-
- '@types/http-proxy@1.17.15':
- resolution: {integrity: sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==}
-
- '@types/istanbul-lib-coverage@2.0.6':
- resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==}
-
- '@types/istanbul-lib-report@3.0.3':
- resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==}
-
- '@types/istanbul-reports@3.0.4':
- resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==}
-
- '@types/json-schema@7.0.15':
- resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
-
- '@types/mdast@4.0.4':
- resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==}
-
- '@types/mdx@2.0.13':
- resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==}
-
- '@types/mime@1.3.5':
- resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==}
-
- '@types/ms@0.7.34':
- resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==}
-
- '@types/node-forge@1.3.11':
- resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==}
-
- '@types/node@17.0.45':
- resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==}
-
- '@types/node@22.8.1':
- resolution: {integrity: sha512-k6Gi8Yyo8EtrNtkHXutUu2corfDf9su95VYVP10aGYMMROM6SAItZi0w1XszA6RtWTHSVp5OeFof37w0IEqCQg==}
-
- '@types/parse-json@4.0.2':
- resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==}
-
- '@types/prismjs@1.26.4':
- resolution: {integrity: sha512-rlAnzkW2sZOjbqZ743IHUhFcvzaGbqijwOu8QZnZCjfQzBqFE3s4lOTJEsxikImav9uzz/42I+O7YUs1mWgMlg==}
-
- '@types/prop-types@15.7.13':
- resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==}
-
- '@types/q@1.5.8':
- resolution: {integrity: sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw==}
-
- '@types/qs@6.9.16':
- resolution: {integrity: sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A==}
-
- '@types/range-parser@1.2.7':
- resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==}
-
- '@types/react-router-config@5.0.11':
- resolution: {integrity: sha512-WmSAg7WgqW7m4x8Mt4N6ZyKz0BubSj/2tVUMsAHp+Yd2AMwcSbeFq9WympT19p5heCFmF97R9eD5uUR/t4HEqw==}
-
- '@types/react-router-dom@5.3.3':
- resolution: {integrity: sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==}
-
- '@types/react-router@5.1.20':
- resolution: {integrity: sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==}
-
- '@types/react@18.3.12':
- resolution: {integrity: sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==}
-
- '@types/retry@0.12.2':
- resolution: {integrity: sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==}
-
- '@types/sax@1.2.7':
- resolution: {integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==}
-
- '@types/send@0.17.4':
- resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==}
-
- '@types/serve-index@1.9.4':
- resolution: {integrity: sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==}
-
- '@types/serve-static@1.15.7':
- resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==}
-
- '@types/sockjs@0.3.36':
- resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==}
-
- '@types/trusted-types@2.0.7':
- resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==}
-
- '@types/unist@2.0.11':
- resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==}
-
- '@types/unist@3.0.3':
- resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
-
- '@types/ws@8.5.12':
- resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==}
-
- '@types/yargs-parser@21.0.3':
- resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==}
-
- '@types/yargs@17.0.33':
- resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==}
-
- '@ungap/structured-clone@1.2.0':
- resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
- deprecated: Potential CWE-502 - Update to 1.3.1 or higher
-
- '@webassemblyjs/ast@1.12.1':
- resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==}
-
- '@webassemblyjs/floating-point-hex-parser@1.11.6':
- resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==}
-
- '@webassemblyjs/helper-api-error@1.11.6':
- resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==}
-
- '@webassemblyjs/helper-buffer@1.12.1':
- resolution: {integrity: sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==}
-
- '@webassemblyjs/helper-numbers@1.11.6':
- resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==}
-
- '@webassemblyjs/helper-wasm-bytecode@1.11.6':
- resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==}
-
- '@webassemblyjs/helper-wasm-section@1.12.1':
- resolution: {integrity: sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==}
-
- '@webassemblyjs/ieee754@1.11.6':
- resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==}
-
- '@webassemblyjs/leb128@1.11.6':
- resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==}
-
- '@webassemblyjs/utf8@1.11.6':
- resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==}
-
- '@webassemblyjs/wasm-edit@1.12.1':
- resolution: {integrity: sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==}
-
- '@webassemblyjs/wasm-gen@1.12.1':
- resolution: {integrity: sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==}
-
- '@webassemblyjs/wasm-opt@1.12.1':
- resolution: {integrity: sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==}
-
- '@webassemblyjs/wasm-parser@1.12.1':
- resolution: {integrity: sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==}
-
- '@webassemblyjs/wast-printer@1.12.1':
- resolution: {integrity: sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==}
-
- '@xtuc/ieee754@1.2.0':
- resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==}
-
- '@xtuc/long@4.2.2':
- resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==}
-
- accepts@1.3.8:
- resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
- engines: {node: '>= 0.6'}
-
- acorn-import-attributes@1.9.5:
- resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==}
- peerDependencies:
- acorn: ^8
-
- acorn-jsx@5.3.2:
- resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
- peerDependencies:
- acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
-
- acorn-walk@8.3.4:
- resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==}
- engines: {node: '>=0.4.0'}
-
- acorn@8.14.0:
- resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==}
- engines: {node: '>=0.4.0'}
- hasBin: true
-
- address@2.0.3:
- resolution: {integrity: sha512-XNAb/a6TCqou+TufU8/u11HCu9x1gYvOoxLwtlXgIqmkrYQADVv6ljyW2zwiPhHz9R1gItAWpuDrdJMmrOBFEA==}
- engines: {node: '>= 16.0.0'}
-
- aggregate-error@3.1.0:
- resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==}
- engines: {node: '>=8'}
-
- ajv-formats@2.1.1:
- resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==}
- peerDependencies:
- ajv: ^8.0.0
- peerDependenciesMeta:
- ajv:
- optional: true
-
- ajv-keywords@3.5.2:
- resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==}
- peerDependencies:
- ajv: ^6.9.1
-
- ajv-keywords@5.1.0:
- resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==}
- peerDependencies:
- ajv: ^8.8.2
-
- ajv@6.12.6:
- resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
-
- ajv@8.17.1:
- resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==}
-
- algoliasearch-helper@3.26.1:
- resolution: {integrity: sha512-CAlCxm4fYBXtvc5MamDzP6Svu8rW4z9me4DCBY1rQ2UDJ0u0flWmusQ8M3nOExZsLLRcUwUPoRAPMrhzOG3erw==}
- peerDependencies:
- algoliasearch: '>= 3.1 < 6'
-
- algoliasearch@5.46.2:
- resolution: {integrity: sha512-qqAXW9QvKf2tTyhpDA4qXv1IfBwD2eduSW6tUEBFIfCeE9gn9HQ9I5+MaKoenRuHrzk5sQoNh1/iof8mY7uD6Q==}
- engines: {node: '>= 14.0.0'}
-
- ansi-align@3.0.1:
- resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==}
-
- ansi-html-community@0.0.8:
- resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==}
- engines: {'0': node >= 0.8.0}
- hasBin: true
-
- ansi-regex@5.0.1:
- resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
- engines: {node: '>=8'}
-
- ansi-regex@6.1.0:
- resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==}
- engines: {node: '>=12'}
-
- ansi-styles@3.2.1:
- resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
- engines: {node: '>=4'}
-
- ansi-styles@4.3.0:
- resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
- engines: {node: '>=8'}
-
- ansi-styles@6.2.1:
- resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
- engines: {node: '>=12'}
-
- ansis@3.17.0:
- resolution: {integrity: sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg==}
- engines: {node: '>=14'}
-
- anymatch@3.1.3:
- resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
- engines: {node: '>= 8'}
-
- arg@5.0.2:
- resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
-
- argparse@1.0.10:
- resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
-
- argparse@2.0.1:
- resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
-
- array-buffer-byte-length@1.0.1:
- resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==}
- engines: {node: '>= 0.4'}
-
- array-flatten@1.1.1:
- resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==}
-
- array-union@2.1.0:
- resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
- engines: {node: '>=8'}
-
- array-union@3.0.1:
- resolution: {integrity: sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==}
- engines: {node: '>=12'}
-
- array.prototype.reduce@1.0.7:
- resolution: {integrity: sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q==}
- engines: {node: '>= 0.4'}
-
- arraybuffer.prototype.slice@1.0.3:
- resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==}
- engines: {node: '>= 0.4'}
-
- astring@1.9.0:
- resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==}
- hasBin: true
-
- autoprefixer@10.4.23:
- resolution: {integrity: sha512-YYTXSFulfwytnjAPlw8QHncHJmlvFKtczb8InXaAx9Q0LbfDnfEYDE55omerIJKihhmU61Ft+cAOSzQVaBUmeA==}
- engines: {node: ^10 || ^12 || >=14}
- hasBin: true
- peerDependencies:
- postcss: ^8.1.0
-
- available-typed-arrays@1.0.7:
- resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
- engines: {node: '>= 0.4'}
-
- babel-loader@9.2.1:
- resolution: {integrity: sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==}
- engines: {node: '>= 14.15.0'}
- peerDependencies:
- '@babel/core': ^7.12.0
- webpack: '>=5'
-
- babel-plugin-dynamic-import-node@2.3.3:
- resolution: {integrity: sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==}
-
- babel-plugin-polyfill-corejs2@0.4.11:
- resolution: {integrity: sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==}
- peerDependencies:
- '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
-
- babel-plugin-polyfill-corejs3@0.10.6:
- resolution: {integrity: sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==}
- peerDependencies:
- '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
-
- babel-plugin-polyfill-regenerator@0.6.2:
- resolution: {integrity: sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==}
- peerDependencies:
- '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
-
- bail@2.0.2:
- resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==}
-
- balanced-match@1.0.2:
- resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
-
- baseline-browser-mapping@2.9.11:
- resolution: {integrity: sha512-Sg0xJUNDU1sJNGdfGWhVHX0kkZ+HWcvmVymJbj6NSgZZmW/8S9Y2HQ5euytnIgakgxN6papOAWiwDo1ctFDcoQ==}
- hasBin: true
-
- batch@0.6.1:
- resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==}
-
- big.js@5.2.2:
- resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==}
-
- binary-extensions@2.3.0:
- resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
- engines: {node: '>=8'}
-
- body-parser@1.20.3:
- resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==}
- engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
-
- bonjour-service@1.2.1:
- resolution: {integrity: sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==}
-
- boolbase@1.0.0:
- resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
-
- boxen@6.2.1:
- resolution: {integrity: sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
- boxen@7.1.1:
- resolution: {integrity: sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==}
- engines: {node: '>=14.16'}
-
- brace-expansion@1.1.11:
- resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
-
- braces@3.0.3:
- resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
- engines: {node: '>=8'}
-
- browserslist@4.24.2:
- resolution: {integrity: sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==}
- engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
- hasBin: true
-
- browserslist@4.28.1:
- resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==}
- engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
- hasBin: true
-
- buffer-from@1.1.2:
- resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
-
- bundle-name@4.1.0:
- resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==}
- engines: {node: '>=18'}
-
- bytes@3.0.0:
- resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==}
- engines: {node: '>= 0.8'}
-
- bytes@3.1.2:
- resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
- engines: {node: '>= 0.8'}
-
- cacheable-lookup@7.0.0:
- resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==}
- engines: {node: '>=14.16'}
-
- cacheable-request@10.2.14:
- resolution: {integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==}
- engines: {node: '>=14.16'}
-
- call-bind-apply-helpers@1.0.2:
- resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
- engines: {node: '>= 0.4'}
-
- call-bind@1.0.7:
- resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==}
- engines: {node: '>= 0.4'}
-
- call-bound@1.0.4:
- resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==}
- engines: {node: '>= 0.4'}
-
- callsites@3.1.0:
- resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
- engines: {node: '>=6'}
-
- camel-case@4.1.2:
- resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==}
-
- camelcase@6.3.0:
- resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
- engines: {node: '>=10'}
-
- camelcase@7.0.1:
- resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==}
- engines: {node: '>=14.16'}
-
- caniuse-api@3.0.0:
- resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==}
-
- caniuse-lite@1.0.30001673:
- resolution: {integrity: sha512-WTrjUCSMp3LYX0nE12ECkV0a+e6LC85E0Auz75555/qr78Oc8YWhEPNfDd6SHdtlCMSzqtuXY0uyEMNRcsKpKw==}
-
- caniuse-lite@1.0.30001761:
- resolution: {integrity: sha512-JF9ptu1vP2coz98+5051jZ4PwQgd2ni8A+gYSN7EA7dPKIMf0pDlSUxhdmVOaV3/fYK5uWBkgSXJaRLr4+3A6g==}
-
- ccount@2.0.1:
- resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
-
- chalk@2.4.2:
- resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
- engines: {node: '>=4'}
-
- chalk@4.1.2:
- resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
- engines: {node: '>=10'}
-
- chalk@5.3.0:
- resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==}
- engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
-
- char-regex@1.0.2:
- resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==}
- engines: {node: '>=10'}
-
- character-entities-html4@2.1.0:
- resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==}
-
- character-entities-legacy@3.0.0:
- resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==}
-
- character-entities@2.0.2:
- resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==}
-
- character-reference-invalid@2.0.1:
- resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==}
-
- cheerio-select@2.1.0:
- resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==}
-
- cheerio@1.0.0-rc.12:
- resolution: {integrity: sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==}
- engines: {node: '>= 6'}
-
- chevrotain-allstar@0.3.1:
- resolution: {integrity: sha512-b7g+y9A0v4mxCW1qUhf3BSVPg+/NvGErk/dOkrDaHA0nQIQGAtrOjlX//9OQtRlSCy+x9rfB5N8yC71lH1nvMw==}
- peerDependencies:
- chevrotain: ^11.0.0
-
- chevrotain@11.0.3:
- resolution: {integrity: sha512-ci2iJH6LeIkvP9eJW6gpueU8cnZhv85ELY8w8WiFtNjMHA5ad6pQLaJo9mEly/9qUyCpvqX8/POVUTf18/HFdw==}
-
- chokidar@3.6.0:
- resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
- engines: {node: '>= 8.10.0'}
-
- chokidar@5.0.0:
- resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==}
- engines: {node: '>= 20.19.0'}
-
- chrome-trace-event@1.0.4:
- resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==}
- engines: {node: '>=6.0'}
-
- ci-info@3.9.0:
- resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==}
- engines: {node: '>=8'}
-
- clean-css@5.3.3:
- resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==}
- engines: {node: '>= 10.0'}
-
- clean-stack@2.2.0:
- resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==}
- engines: {node: '>=6'}
-
- cli-boxes@3.0.0:
- resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==}
- engines: {node: '>=10'}
-
- cli-table3@0.6.5:
- resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==}
- engines: {node: 10.* || >= 12.*}
-
- clone-deep@4.0.1:
- resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==}
- engines: {node: '>=6'}
-
- clsx@1.2.1:
- resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==}
- engines: {node: '>=6'}
-
- clsx@2.1.1:
- resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
- engines: {node: '>=6'}
-
- coa@2.0.2:
- resolution: {integrity: sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==}
- engines: {node: '>= 4.0'}
-
- collapse-white-space@2.1.0:
- resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==}
-
- color-convert@1.9.3:
- resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
-
- color-convert@2.0.1:
- resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
- engines: {node: '>=7.0.0'}
-
- color-name@1.1.3:
- resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
-
- color-name@1.1.4:
- resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
-
- colord@2.9.3:
- resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==}
-
- colorette@2.0.20:
- resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
-
- colorjs.io@0.7.1:
- resolution: {integrity: sha512-LY7OHnJZxHwT5UlzNa9bbhHHDbzB6yE5+3MIPwJEQKRvSCt/T4G7epsj+9j2BExUIIfXFIJGsIXUKdfrK9Q5tA==}
-
- combine-promises@1.2.0:
- resolution: {integrity: sha512-VcQB1ziGD0NXrhKxiwyNbCDmRzs/OShMs2GqW2DlU2A/Sd0nQxE1oWDAE5O0ygSx5mgQOn9eIFh7yKPgFRVkPQ==}
- engines: {node: '>=10'}
-
- comma-separated-tokens@2.0.3:
- resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
-
- commander@10.0.1:
- resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==}
- engines: {node: '>=14'}
-
- commander@2.20.3:
- resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
-
- commander@5.1.0:
- resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==}
- engines: {node: '>= 6'}
-
- commander@7.2.0:
- resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
- engines: {node: '>= 10'}
-
- commander@8.3.0:
- resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==}
- engines: {node: '>= 12'}
-
- common-path-prefix@3.0.0:
- resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==}
-
- compressible@2.0.18:
- resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==}
- engines: {node: '>= 0.6'}
-
- compression@1.7.4:
- resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==}
- engines: {node: '>= 0.8.0'}
-
- concat-map@0.0.1:
- resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
-
- confbox@0.1.8:
- resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==}
-
- config-chain@1.1.13:
- resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==}
-
- configstore@6.0.0:
- resolution: {integrity: sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==}
- engines: {node: '>=12'}
-
- connect-history-api-fallback@2.0.0:
- resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==}
- engines: {node: '>=0.8'}
-
- consola@3.2.3:
- resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==}
- engines: {node: ^14.18.0 || >=16.10.0}
-
- content-disposition@0.5.2:
- resolution: {integrity: sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==}
- engines: {node: '>= 0.6'}
-
- content-disposition@0.5.4:
- resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==}
- engines: {node: '>= 0.6'}
-
- content-type@1.0.5:
- resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==}
- engines: {node: '>= 0.6'}
-
- convert-source-map@2.0.0:
- resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
-
- cookie-signature@1.0.6:
- resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==}
-
- cookie@0.7.1:
- resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==}
- engines: {node: '>= 0.6'}
-
- copy-text-to-clipboard@3.2.2:
- resolution: {integrity: sha512-T6SqyLd1iLuqPA90J5N4cTalrtovCySh58iiZDGJ6FGznbclKh4UI+FGacQSgFzwKG77W7XT5gwbVEbd9cIH1A==}
- engines: {node: '>=12'}
-
- copy-webpack-plugin@11.0.0:
- resolution: {integrity: sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==}
- engines: {node: '>= 14.15.0'}
- peerDependencies:
- webpack: ^5.1.0
-
- core-js-compat@3.38.1:
- resolution: {integrity: sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==}
-
- core-js@3.39.0:
- resolution: {integrity: sha512-raM0ew0/jJUqkJ0E6e8UDtl+y/7ktFivgWvqw8dNSQeNWoSDLvQ1H/RN3aPXB9tBd4/FhyR4RDPGhsNIMsAn7g==}
-
- core-util-is@1.0.3:
- resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
-
- cose-base@1.0.3:
- resolution: {integrity: sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==}
-
- cose-base@2.2.0:
- resolution: {integrity: sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==}
-
- cosmiconfig@7.1.0:
- resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==}
- engines: {node: '>=10'}
-
- cosmiconfig@8.3.6:
- resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==}
- engines: {node: '>=14'}
- peerDependencies:
- typescript: '>=4.9.5'
- peerDependenciesMeta:
- typescript:
- optional: true
-
- cross-spawn@7.0.3:
- resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
- engines: {node: '>= 8'}
-
- crypto-random-string@4.0.0:
- resolution: {integrity: sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==}
- engines: {node: '>=12'}
-
- css-blank-pseudo@7.0.1:
- resolution: {integrity: sha512-jf+twWGDf6LDoXDUode+nc7ZlrqfaNphrBIBrcmeP3D8yw1uPaix1gCC8LUQUGQ6CycuK2opkbFFWFuq/a94ag==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- css-declaration-sorter@7.2.0:
- resolution: {integrity: sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==}
- engines: {node: ^14 || ^16 || >=18}
- peerDependencies:
- postcss: ^8.0.9
-
- css-has-pseudo@7.0.3:
- resolution: {integrity: sha512-oG+vKuGyqe/xvEMoxAQrhi7uY16deJR3i7wwhBerVrGQKSqUC5GiOVxTpM9F9B9hw0J+eKeOWLH7E9gZ1Dr5rA==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- css-loader@6.11.0:
- resolution: {integrity: sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==}
- engines: {node: '>= 12.13.0'}
- peerDependencies:
- '@rspack/core': 0.x || 1.x
- webpack: ^5.0.0
- peerDependenciesMeta:
- '@rspack/core':
- optional: true
- webpack:
- optional: true
-
- css-minimizer-webpack-plugin@5.0.1:
- resolution: {integrity: sha512-3caImjKFQkS+ws1TGcFn0V1HyDJFq1Euy589JlD6/3rV2kj+w7r5G9WDMgSHvpvXHNZ2calVypZWuEDQd9wfLg==}
- engines: {node: '>= 14.15.0'}
- peerDependencies:
- '@parcel/css': '*'
- '@swc/css': '*'
- clean-css: '*'
- csso: '*'
- esbuild: '*'
- lightningcss: '*'
- webpack: ^5.0.0
- peerDependenciesMeta:
- '@parcel/css':
- optional: true
- '@swc/css':
- optional: true
- clean-css:
- optional: true
- csso:
- optional: true
- esbuild:
- optional: true
- lightningcss:
- optional: true
-
- css-prefers-color-scheme@10.0.0:
- resolution: {integrity: sha512-VCtXZAWivRglTZditUfB4StnsWr6YVZ2PRtuxQLKTNRdtAf8tpzaVPE9zXIF3VaSc7O70iK/j1+NXxyQCqdPjQ==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- css-select-base-adapter@0.1.1:
- resolution: {integrity: sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==}
-
- css-select@2.1.0:
- resolution: {integrity: sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==}
-
- css-select@4.3.0:
- resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==}
-
- css-select@5.1.0:
- resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==}
-
- css-tree@1.0.0-alpha.37:
- resolution: {integrity: sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==}
- engines: {node: '>=8.0.0'}
-
- css-tree@1.1.3:
- resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==}
- engines: {node: '>=8.0.0'}
-
- css-tree@2.2.1:
- resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==}
- engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
-
- css-tree@2.3.1:
- resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==}
- engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
-
- css-what@3.4.2:
- resolution: {integrity: sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==}
- engines: {node: '>= 6'}
-
- css-what@6.1.0:
- resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==}
- engines: {node: '>= 6'}
-
- cssdb@8.5.2:
- resolution: {integrity: sha512-Pmoj9RmD8RIoIzA2EQWO4D4RMeDts0tgAH0VXdlNdxjuBGI3a9wMOIcUwaPNmD4r2qtIa06gqkIf7sECl+cBCg==}
-
- cssesc@3.0.0:
- resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
- engines: {node: '>=4'}
- hasBin: true
-
- cssnano-preset-advanced@6.1.2:
- resolution: {integrity: sha512-Nhao7eD8ph2DoHolEzQs5CfRpiEP0xa1HBdnFZ82kvqdmbwVBUr2r1QuQ4t1pi+D1ZpqpcO4T+wy/7RxzJ/WPQ==}
- engines: {node: ^14 || ^16 || >=18.0}
- peerDependencies:
- postcss: ^8.4.31
-
- cssnano-preset-default@6.1.2:
- resolution: {integrity: sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg==}
- engines: {node: ^14 || ^16 || >=18.0}
- peerDependencies:
- postcss: ^8.4.31
-
- cssnano-utils@4.0.2:
- resolution: {integrity: sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==}
- engines: {node: ^14 || ^16 || >=18.0}
- peerDependencies:
- postcss: ^8.4.31
-
- cssnano@6.1.2:
- resolution: {integrity: sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA==}
- engines: {node: ^14 || ^16 || >=18.0}
- peerDependencies:
- postcss: ^8.4.31
-
- csso@4.2.0:
- resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==}
- engines: {node: '>=8.0.0'}
-
- csso@5.0.5:
- resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==}
- engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
-
- csstype@3.1.3:
- resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
-
- cytoscape-cose-bilkent@4.1.0:
- resolution: {integrity: sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==}
- peerDependencies:
- cytoscape: ^3.2.0
-
- cytoscape-fcose@2.2.0:
- resolution: {integrity: sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==}
- peerDependencies:
- cytoscape: ^3.2.0
-
- cytoscape@3.30.2:
- resolution: {integrity: sha512-oICxQsjW8uSaRmn4UK/jkczKOqTrVqt5/1WL0POiJUT2EKNc9STM4hYFHv917yu55aTBMFNRzymlJhVAiWPCxw==}
- engines: {node: '>=0.10'}
-
- d3-array@2.12.1:
- resolution: {integrity: sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==}
-
- d3-array@3.2.4:
- resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==}
- engines: {node: '>=12'}
-
- d3-axis@3.0.0:
- resolution: {integrity: sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==}
- engines: {node: '>=12'}
-
- d3-brush@3.0.0:
- resolution: {integrity: sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==}
- engines: {node: '>=12'}
-
- d3-chord@3.0.1:
- resolution: {integrity: sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==}
- engines: {node: '>=12'}
-
- d3-color@3.1.0:
- resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==}
- engines: {node: '>=12'}
-
- d3-contour@4.0.2:
- resolution: {integrity: sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==}
- engines: {node: '>=12'}
-
- d3-delaunay@6.0.4:
- resolution: {integrity: sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==}
- engines: {node: '>=12'}
-
- d3-dispatch@3.0.1:
- resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==}
- engines: {node: '>=12'}
-
- d3-drag@3.0.0:
- resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==}
- engines: {node: '>=12'}
-
- d3-dsv@3.0.1:
- resolution: {integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==}
- engines: {node: '>=12'}
- hasBin: true
-
- d3-ease@3.0.1:
- resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==}
- engines: {node: '>=12'}
-
- d3-fetch@3.0.1:
- resolution: {integrity: sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==}
- engines: {node: '>=12'}
-
- d3-force@3.0.0:
- resolution: {integrity: sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==}
- engines: {node: '>=12'}
-
- d3-format@3.1.0:
- resolution: {integrity: sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==}
- engines: {node: '>=12'}
-
- d3-geo@3.1.1:
- resolution: {integrity: sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==}
- engines: {node: '>=12'}
-
- d3-hierarchy@3.1.2:
- resolution: {integrity: sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==}
- engines: {node: '>=12'}
-
- d3-interpolate@3.0.1:
- resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==}
- engines: {node: '>=12'}
-
- d3-path@1.0.9:
- resolution: {integrity: sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==}
-
- d3-path@3.1.0:
- resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==}
- engines: {node: '>=12'}
-
- d3-polygon@3.0.1:
- resolution: {integrity: sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==}
- engines: {node: '>=12'}
-
- d3-quadtree@3.0.1:
- resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==}
- engines: {node: '>=12'}
-
- d3-random@3.0.1:
- resolution: {integrity: sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==}
- engines: {node: '>=12'}
-
- d3-sankey@0.12.3:
- resolution: {integrity: sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==}
-
- d3-scale-chromatic@3.1.0:
- resolution: {integrity: sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==}
- engines: {node: '>=12'}
-
- d3-scale@4.0.2:
- resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==}
- engines: {node: '>=12'}
-
- d3-selection@3.0.0:
- resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==}
- engines: {node: '>=12'}
-
- d3-shape@1.3.7:
- resolution: {integrity: sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==}
-
- d3-shape@3.2.0:
- resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==}
- engines: {node: '>=12'}
-
- d3-time-format@4.1.0:
- resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==}
- engines: {node: '>=12'}
-
- d3-time@3.1.0:
- resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==}
- engines: {node: '>=12'}
-
- d3-timer@3.0.1:
- resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==}
- engines: {node: '>=12'}
-
- d3-transition@3.0.1:
- resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==}
- engines: {node: '>=12'}
- peerDependencies:
- d3-selection: 2 - 3
-
- d3-zoom@3.0.0:
- resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==}
- engines: {node: '>=12'}
-
- d3@7.9.0:
- resolution: {integrity: sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==}
- engines: {node: '>=12'}
-
- dagre-d3-es@7.0.11:
- resolution: {integrity: sha512-tvlJLyQf834SylNKax8Wkzco/1ias1OPw8DcUMDE7oUIoSEW25riQVuiu/0OWEFqT0cxHT3Pa9/D82Jr47IONw==}
-
- data-view-buffer@1.0.1:
- resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==}
- engines: {node: '>= 0.4'}
-
- data-view-byte-length@1.0.1:
- resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==}
- engines: {node: '>= 0.4'}
-
- data-view-byte-offset@1.0.0:
- resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==}
- engines: {node: '>= 0.4'}
-
- dayjs@1.11.13:
- resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==}
-
- debounce@1.2.1:
- resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==}
-
- debug@2.6.9:
- resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
- peerDependencies:
- supports-color: '*'
- peerDependenciesMeta:
- supports-color:
- optional: true
-
- debug@4.3.7:
- resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==}
- engines: {node: '>=6.0'}
- peerDependencies:
- supports-color: '*'
- peerDependenciesMeta:
- supports-color:
- optional: true
-
- decode-named-character-reference@1.0.2:
- resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==}
-
- decompress-response@6.0.0:
- resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==}
- engines: {node: '>=10'}
-
- deep-extend@0.6.0:
- resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==}
- engines: {node: '>=4.0.0'}
-
- deepmerge@4.3.1:
- resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
- engines: {node: '>=0.10.0'}
-
- default-browser-id@5.0.1:
- resolution: {integrity: sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==}
- engines: {node: '>=18'}
-
- default-browser@5.4.0:
- resolution: {integrity: sha512-XDuvSq38Hr1MdN47EDvYtx3U0MTqpCEn+F6ft8z2vYDzMrvQhVp0ui9oQdqW3MvK3vqUETglt1tVGgjLuJ5izg==}
- engines: {node: '>=18'}
-
- defer-to-connect@2.0.1:
- resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==}
- engines: {node: '>=10'}
-
- define-data-property@1.1.4:
- resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
- engines: {node: '>= 0.4'}
-
- define-lazy-prop@2.0.0:
- resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==}
- engines: {node: '>=8'}
-
- define-lazy-prop@3.0.0:
- resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==}
- engines: {node: '>=12'}
-
- define-properties@1.2.1:
- resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
- engines: {node: '>= 0.4'}
-
- delaunator@5.0.1:
- resolution: {integrity: sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==}
-
- depd@1.1.2:
- resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==}
- engines: {node: '>= 0.6'}
-
- depd@2.0.0:
- resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
- engines: {node: '>= 0.8'}
-
- dequal@2.0.3:
- resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
- engines: {node: '>=6'}
-
- destroy@1.2.0:
- resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==}
- engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
-
- detect-libc@1.0.3:
- resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==}
- engines: {node: '>=0.10'}
- hasBin: true
-
- detect-node@2.1.0:
- resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==}
-
- detect-port@2.1.0:
- resolution: {integrity: sha512-epZuWb/6Q62L+nDHJc/hQAqf8pylsqgk3BpZXVBx1CDnr3nkrVNn73Uu1rXcFzkNcc+hkP3whuOg7JZYaQB65Q==}
- engines: {node: '>= 16.0.0'}
- hasBin: true
-
- devlop@1.1.0:
- resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
-
- dir-glob@3.0.1:
- resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
- engines: {node: '>=8'}
-
- dns-packet@5.6.1:
- resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==}
- engines: {node: '>=6'}
-
- docusaurus-plugin-image-zoom@3.0.1:
- resolution: {integrity: sha512-mQrqA99VpoMQJNbi02qkWAMVNC4+kwc6zLLMNzraHAJlwn+HrlUmZSEDcTwgn+H4herYNxHKxveE2WsYy73eGw==}
- peerDependencies:
- '@docusaurus/theme-classic': '>=3.0.0'
-
- docusaurus-plugin-sass@0.2.6:
- resolution: {integrity: sha512-2hKQQDkrufMong9upKoG/kSHJhuwd+FA3iAe/qzS/BmWpbIpe7XKmq5wlz4J5CJaOPu4x+iDJbgAxZqcoQf0kg==}
- peerDependencies:
- '@docusaurus/core': ^2.0.0-beta || ^3.0.0-alpha
- sass: ^1.30.0
-
- dom-converter@0.2.0:
- resolution: {integrity: sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==}
-
- dom-serializer@0.2.2:
- resolution: {integrity: sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==}
-
- dom-serializer@1.4.1:
- resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==}
-
- dom-serializer@2.0.0:
- resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
-
- domelementtype@1.3.1:
- resolution: {integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==}
-
- domelementtype@2.3.0:
- resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
-
- domhandler@4.3.1:
- resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==}
- engines: {node: '>= 4'}
-
- domhandler@5.0.3:
- resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
- engines: {node: '>= 4'}
-
- dompurify@3.2.6:
- resolution: {integrity: sha512-/2GogDQlohXPZe6D6NOgQvXLPSYBqIWMnZ8zzOhn09REE4eyAzb+Hed3jhoM9OkuaJ8P6ZGTTVWQKAi8ieIzfQ==}
-
- domutils@1.7.0:
- resolution: {integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==}
-
- domutils@2.8.0:
- resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==}
-
- domutils@3.1.0:
- resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==}
-
- dot-case@3.0.4:
- resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==}
-
- dot-prop@6.0.1:
- resolution: {integrity: sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==}
- engines: {node: '>=10'}
-
- dunder-proto@1.0.1:
- resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
- engines: {node: '>= 0.4'}
-
- duplexer@0.1.2:
- resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==}
-
- eastasianwidth@0.2.0:
- resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
-
- ee-first@1.1.1:
- resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
-
- electron-to-chromium@1.5.267:
- resolution: {integrity: sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==}
-
- electron-to-chromium@1.5.47:
- resolution: {integrity: sha512-zS5Yer0MOYw4rtK2iq43cJagHZ8sXN0jDHDKzB+86gSBSAI4v07S97mcq+Gs2vclAxSh1j7vOAHxSVgduiiuVQ==}
-
- emoji-regex@8.0.0:
- resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
-
- emoji-regex@9.2.2:
- resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
-
- emojilib@2.4.0:
- resolution: {integrity: sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==}
-
- emojis-list@3.0.0:
- resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==}
- engines: {node: '>= 4'}
-
- emoticon@4.1.0:
- resolution: {integrity: sha512-VWZfnxqwNcc51hIy/sbOdEem6D+cVtpPzEEtVAFdaas30+1dgkyaOQ4sQ6Bp0tOMqWO1v+HQfYaoodOkdhK6SQ==}
-
- encodeurl@1.0.2:
- resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==}
- engines: {node: '>= 0.8'}
-
- encodeurl@2.0.0:
- resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==}
- engines: {node: '>= 0.8'}
-
- enhanced-resolve@5.17.1:
- resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==}
- engines: {node: '>=10.13.0'}
-
- entities@2.1.0:
- resolution: {integrity: sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==}
-
- entities@2.2.0:
- resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==}
-
- entities@4.5.0:
- resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
- engines: {node: '>=0.12'}
-
- error-ex@1.3.2:
- resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
-
- es-abstract@1.23.3:
- resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==}
- engines: {node: '>= 0.4'}
-
- es-array-method-boxes-properly@1.0.0:
- resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==}
-
- es-define-property@1.0.0:
- resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==}
- engines: {node: '>= 0.4'}
-
- es-define-property@1.0.1:
- resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
- engines: {node: '>= 0.4'}
-
- es-errors@1.3.0:
- resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
- engines: {node: '>= 0.4'}
-
- es-module-lexer@1.5.4:
- resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==}
-
- es-object-atoms@1.0.0:
- resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==}
- engines: {node: '>= 0.4'}
-
- es-object-atoms@1.1.1:
- resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
- engines: {node: '>= 0.4'}
-
- es-set-tostringtag@2.0.3:
- resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==}
- engines: {node: '>= 0.4'}
-
- es-to-primitive@1.2.1:
- resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==}
- engines: {node: '>= 0.4'}
-
- esast-util-from-estree@2.0.0:
- resolution: {integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==}
-
- esast-util-from-js@2.0.1:
- resolution: {integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==}
-
- escalade@3.2.0:
- resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
- engines: {node: '>=6'}
-
- escape-goat@4.0.0:
- resolution: {integrity: sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==}
- engines: {node: '>=12'}
-
- escape-html@1.0.3:
- resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
-
- escape-string-regexp@1.0.5:
- resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
- engines: {node: '>=0.8.0'}
-
- escape-string-regexp@4.0.0:
- resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
- engines: {node: '>=10'}
-
- escape-string-regexp@5.0.0:
- resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
- engines: {node: '>=12'}
-
- eslint-scope@5.1.1:
- resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
- engines: {node: '>=8.0.0'}
-
- esprima@4.0.1:
- resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
- engines: {node: '>=4'}
- hasBin: true
-
- esrecurse@4.3.0:
- resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
- engines: {node: '>=4.0'}
-
- estraverse@4.3.0:
- resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==}
- engines: {node: '>=4.0'}
-
- estraverse@5.3.0:
- resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
- engines: {node: '>=4.0'}
-
- estree-util-attach-comments@3.0.0:
- resolution: {integrity: sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==}
-
- estree-util-build-jsx@3.0.1:
- resolution: {integrity: sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==}
-
- estree-util-is-identifier-name@3.0.0:
- resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==}
-
- estree-util-scope@1.0.0:
- resolution: {integrity: sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==}
-
- estree-util-to-js@2.0.0:
- resolution: {integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==}
-
- estree-util-value-to-estree@3.1.2:
- resolution: {integrity: sha512-S0gW2+XZkmsx00tU2uJ4L9hUT7IFabbml9pHh2WQqFmAbxit++YGZne0sKJbNwkj9Wvg9E4uqWl4nCIFQMmfag==}
-
- estree-util-visit@2.0.0:
- resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==}
-
- estree-walker@3.0.3:
- resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
-
- esutils@2.0.3:
- resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
- engines: {node: '>=0.10.0'}
-
- eta@2.2.0:
- resolution: {integrity: sha512-UVQ72Rqjy/ZKQalzV5dCCJP80GrmPrMxh6NlNf+erV6ObL0ZFkhCstWRawS85z3smdr3d2wXPsZEY7rDPfGd2g==}
- engines: {node: '>=6.0.0'}
-
- etag@1.8.1:
- resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
- engines: {node: '>= 0.6'}
-
- eval@0.1.8:
- resolution: {integrity: sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==}
- engines: {node: '>= 0.8'}
-
- eventemitter3@4.0.7:
- resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
-
- events@3.3.0:
- resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
- engines: {node: '>=0.8.x'}
-
- execa@5.1.1:
- resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
- engines: {node: '>=10'}
-
- express@4.22.1:
- resolution: {integrity: sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==}
- engines: {node: '>= 0.10.0'}
-
- extend-shallow@2.0.1:
- resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==}
- engines: {node: '>=0.10.0'}
-
- extend@3.0.2:
- resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
-
- fast-deep-equal@3.1.3:
- resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
-
- fast-glob@3.3.2:
- resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
- engines: {node: '>=8.6.0'}
-
- fast-json-stable-stringify@2.1.0:
- resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
-
- fast-uri@3.0.3:
- resolution: {integrity: sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==}
-
- fastq@1.17.1:
- resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==}
-
- fault@2.0.1:
- resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==}
-
- faye-websocket@0.11.4:
- resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==}
- engines: {node: '>=0.8.0'}
-
- feed@4.2.2:
- resolution: {integrity: sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==}
- engines: {node: '>=0.4.0'}
-
- file-loader@6.2.0:
- resolution: {integrity: sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==}
- engines: {node: '>= 10.13.0'}
- peerDependencies:
- webpack: ^4.0.0 || ^5.0.0
-
- fill-range@7.1.1:
- resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
- engines: {node: '>=8'}
-
- finalhandler@1.3.1:
- resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==}
- engines: {node: '>= 0.8'}
-
- find-cache-dir@4.0.0:
- resolution: {integrity: sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==}
- engines: {node: '>=14.16'}
-
- find-up@6.3.0:
- resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
- flat@5.0.2:
- resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
- hasBin: true
-
- follow-redirects@1.15.9:
- resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==}
- engines: {node: '>=4.0'}
- peerDependencies:
- debug: '*'
- peerDependenciesMeta:
- debug:
- optional: true
-
- for-each@0.3.3:
- resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
-
- form-data-encoder@2.1.4:
- resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==}
- engines: {node: '>= 14.17'}
-
- format@0.2.2:
- resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==}
- engines: {node: '>=0.4.x'}
-
- forwarded@0.2.0:
- resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
- engines: {node: '>= 0.6'}
-
- fraction.js@5.3.4:
- resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==}
-
- fresh@0.5.2:
- resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==}
- engines: {node: '>= 0.6'}
-
- fs-extra@11.2.0:
- resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==}
- engines: {node: '>=14.14'}
-
- fsevents@2.3.3:
- resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
- engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
- os: [darwin]
-
- function-bind@1.1.2:
- resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
-
- function.prototype.name@1.1.6:
- resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==}
- engines: {node: '>= 0.4'}
-
- functions-have-names@1.2.3:
- resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
-
- gensync@1.0.0-beta.2:
- resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
- engines: {node: '>=6.9.0'}
-
- get-intrinsic@1.2.4:
- resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==}
- engines: {node: '>= 0.4'}
-
- get-intrinsic@1.3.0:
- resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
- engines: {node: '>= 0.4'}
-
- get-own-enumerable-property-symbols@3.0.2:
- resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==}
-
- get-proto@1.0.1:
- resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
- engines: {node: '>= 0.4'}
-
- get-stream@6.0.1:
- resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
- engines: {node: '>=10'}
-
- get-symbol-description@1.0.2:
- resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==}
- engines: {node: '>= 0.4'}
-
- github-slugger@1.5.0:
- resolution: {integrity: sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==}
-
- glob-parent@5.1.2:
- resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
- engines: {node: '>= 6'}
-
- glob-parent@6.0.2:
- resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
- engines: {node: '>=10.13.0'}
-
- glob-to-regex.js@1.2.0:
- resolution: {integrity: sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ==}
- engines: {node: '>=10.0'}
- peerDependencies:
- tslib: '2'
-
- glob-to-regexp@0.4.1:
- resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==}
-
- global-dirs@3.0.1:
- resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==}
- engines: {node: '>=10'}
-
- globals@11.12.0:
- resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
- engines: {node: '>=4'}
-
- globalthis@1.0.4:
- resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==}
- engines: {node: '>= 0.4'}
-
- globby@11.1.0:
- resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
- engines: {node: '>=10'}
-
- globby@12.1.0:
- resolution: {integrity: sha512-YULDaNwsoUZkRy9TWSY/M7Obh0abamTKoKzTfOI3uU+hfpX2FZqOq8LFDxsjYheF1RH7ITdArgbQnsNBFgcdBA==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
- globby@13.2.2:
- resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
- gopd@1.0.1:
- resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
-
- gopd@1.2.0:
- resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
- engines: {node: '>= 0.4'}
-
- got@12.6.1:
- resolution: {integrity: sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==}
- engines: {node: '>=14.16'}
-
- graceful-fs@4.2.10:
- resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==}
-
- graceful-fs@4.2.11:
- resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
-
- gzip-size@6.0.0:
- resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==}
- engines: {node: '>=10'}
-
- hachure-fill@0.5.2:
- resolution: {integrity: sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==}
-
- handle-thing@2.0.1:
- resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==}
-
- has-bigints@1.0.2:
- resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==}
-
- has-flag@3.0.0:
- resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
- engines: {node: '>=4'}
-
- has-flag@4.0.0:
- resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
- engines: {node: '>=8'}
-
- has-property-descriptors@1.0.2:
- resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
-
- has-proto@1.0.3:
- resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==}
- engines: {node: '>= 0.4'}
-
- has-symbols@1.0.3:
- resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
- engines: {node: '>= 0.4'}
-
- has-symbols@1.1.0:
- resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
- engines: {node: '>= 0.4'}
-
- has-tostringtag@1.0.2:
- resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
- engines: {node: '>= 0.4'}
-
- has-yarn@3.0.0:
- resolution: {integrity: sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
- hasown@2.0.2:
- resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
- engines: {node: '>= 0.4'}
-
- hast-util-from-parse5@8.0.1:
- resolution: {integrity: sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==}
-
- hast-util-is-element@1.1.0:
- resolution: {integrity: sha512-oUmNua0bFbdrD/ELDSSEadRVtWZOf3iF6Lbv81naqsIV99RnSCieTbWuWCY8BAeEfKJTKl0gRdokv+dELutHGQ==}
-
- hast-util-parse-selector@4.0.0:
- resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==}
-
- hast-util-raw@9.0.4:
- resolution: {integrity: sha512-LHE65TD2YiNsHD3YuXcKPHXPLuYh/gjp12mOfU8jxSrm1f/yJpsb0F/KKljS6U9LJoP0Ux+tCe8iJ2AsPzTdgA==}
-
- hast-util-to-estree@3.1.0:
- resolution: {integrity: sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw==}
-
- hast-util-to-html@9.0.5:
- resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==}
-
- hast-util-to-jsx-runtime@2.3.2:
- resolution: {integrity: sha512-1ngXYb+V9UT5h+PxNRa1O1FYguZK/XL+gkeqvp7EdHlB9oHUG0eYRo/vY5inBdcqo3RkPMC58/H94HvkbfGdyg==}
-
- hast-util-to-parse5@8.0.0:
- resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==}
-
- hast-util-to-string@3.0.1:
- resolution: {integrity: sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==}
-
- hast-util-whitespace@3.0.0:
- resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==}
-
- hastscript@8.0.0:
- resolution: {integrity: sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==}
-
- he@1.2.0:
- resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
- hasBin: true
-
- history@4.10.1:
- resolution: {integrity: sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==}
-
- hoist-non-react-statics@3.3.2:
- resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==}
-
- hpack.js@2.1.6:
- resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==}
-
- html-escaper@2.0.2:
- resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==}
-
- html-minifier-terser@6.1.0:
- resolution: {integrity: sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==}
- engines: {node: '>=12'}
- hasBin: true
-
- html-minifier-terser@7.2.0:
- resolution: {integrity: sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==}
- engines: {node: ^14.13.1 || >=16.0.0}
- hasBin: true
-
- html-tags@3.3.1:
- resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==}
- engines: {node: '>=8'}
-
- html-void-elements@3.0.0:
- resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==}
-
- html-webpack-plugin@5.6.3:
- resolution: {integrity: sha512-QSf1yjtSAsmf7rYBV7XX86uua4W/vkhIt0xNXKbsi2foEeW7vjJQz4bhnpL3xH+l1ryl1680uNv968Z+X6jSYg==}
- engines: {node: '>=10.13.0'}
- peerDependencies:
- '@rspack/core': 0.x || 1.x
- webpack: ^5.20.0
- peerDependenciesMeta:
- '@rspack/core':
- optional: true
- webpack:
- optional: true
-
- htmlparser2@6.1.0:
- resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==}
-
- htmlparser2@8.0.2:
- resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==}
-
- http-cache-semantics@4.1.1:
- resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==}
-
- http-deceiver@1.2.7:
- resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==}
-
- http-errors@1.6.3:
- resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==}
- engines: {node: '>= 0.6'}
-
- http-errors@2.0.0:
- resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==}
- engines: {node: '>= 0.8'}
-
- http-parser-js@0.5.8:
- resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==}
-
- http-proxy-middleware@2.0.9:
- resolution: {integrity: sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==}
- engines: {node: '>=12.0.0'}
- peerDependencies:
- '@types/express': ^4.17.13
- peerDependenciesMeta:
- '@types/express':
- optional: true
-
- http-proxy@1.18.1:
- resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==}
- engines: {node: '>=8.0.0'}
-
- http2-wrapper@2.2.1:
- resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==}
- engines: {node: '>=10.19.0'}
-
- human-signals@2.1.0:
- resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
- engines: {node: '>=10.17.0'}
-
- husky@7.0.4:
- resolution: {integrity: sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==}
- engines: {node: '>=12'}
- hasBin: true
-
- hyperdyperid@1.2.0:
- resolution: {integrity: sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==}
- engines: {node: '>=10.18'}
-
- iconv-lite@0.4.24:
- resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
- engines: {node: '>=0.10.0'}
-
- iconv-lite@0.6.3:
- resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
- engines: {node: '>=0.10.0'}
-
- icss-utils@5.1.0:
- resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==}
- engines: {node: ^10 || ^12 || >= 14}
- peerDependencies:
- postcss: ^8.1.0
-
- ignore@5.3.2:
- resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
- engines: {node: '>= 4'}
-
- image-size@2.0.2:
- resolution: {integrity: sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w==}
- engines: {node: '>=16.x'}
- hasBin: true
-
- immutable@5.1.5:
- resolution: {integrity: sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A==}
-
- import-fresh@3.3.0:
- resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
- engines: {node: '>=6'}
-
- import-lazy@4.0.0:
- resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==}
- engines: {node: '>=8'}
-
- imurmurhash@0.1.4:
- resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
- engines: {node: '>=0.8.19'}
-
- indent-string@4.0.0:
- resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==}
- engines: {node: '>=8'}
-
- infima@0.2.0-alpha.45:
- resolution: {integrity: sha512-uyH0zfr1erU1OohLk0fT4Rrb94AOhguWNOcD9uGrSpRvNB+6gZXUoJX5J0NtvzBO10YZ9PgvA4NFgt+fYg8ojw==}
- engines: {node: '>=12'}
-
- inherits@2.0.3:
- resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==}
-
- inherits@2.0.4:
- resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
-
- ini@1.3.8:
- resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
-
- ini@2.0.0:
- resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==}
- engines: {node: '>=10'}
-
- inline-style-parser@0.1.1:
- resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==}
-
- inline-style-parser@0.2.4:
- resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==}
-
- internal-slot@1.0.7:
- resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==}
- engines: {node: '>= 0.4'}
-
- internmap@1.0.1:
- resolution: {integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==}
-
- internmap@2.0.3:
- resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==}
- engines: {node: '>=12'}
-
- invariant@2.2.4:
- resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==}
-
- ipaddr.js@1.9.1:
- resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
- engines: {node: '>= 0.10'}
-
- ipaddr.js@2.2.0:
- resolution: {integrity: sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==}
- engines: {node: '>= 10'}
-
- is-alphabetical@2.0.1:
- resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==}
-
- is-alphanumerical@2.0.1:
- resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==}
-
- is-array-buffer@3.0.4:
- resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==}
- engines: {node: '>= 0.4'}
-
- is-arrayish@0.2.1:
- resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
-
- is-bigint@1.0.4:
- resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==}
-
- is-binary-path@2.1.0:
- resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
- engines: {node: '>=8'}
-
- is-boolean-object@1.1.2:
- resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==}
- engines: {node: '>= 0.4'}
-
- is-callable@1.2.7:
- resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
- engines: {node: '>= 0.4'}
-
- is-ci@3.0.1:
- resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==}
- hasBin: true
-
- is-core-module@2.15.1:
- resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==}
- engines: {node: '>= 0.4'}
-
- is-data-view@1.0.1:
- resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==}
- engines: {node: '>= 0.4'}
-
- is-date-object@1.0.5:
- resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==}
- engines: {node: '>= 0.4'}
-
- is-decimal@2.0.1:
- resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==}
-
- is-docker@2.2.1:
- resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
- engines: {node: '>=8'}
- hasBin: true
-
- is-docker@3.0.0:
- resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- hasBin: true
-
- is-extendable@0.1.1:
- resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==}
- engines: {node: '>=0.10.0'}
-
- is-extglob@2.1.1:
- resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
- engines: {node: '>=0.10.0'}
-
- is-fullwidth-code-point@3.0.0:
- resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
- engines: {node: '>=8'}
-
- is-glob@4.0.3:
- resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
- engines: {node: '>=0.10.0'}
-
- is-hexadecimal@2.0.1:
- resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==}
-
- is-inside-container@1.0.0:
- resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==}
- engines: {node: '>=14.16'}
- hasBin: true
-
- is-installed-globally@0.4.0:
- resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==}
- engines: {node: '>=10'}
-
- is-negative-zero@2.0.3:
- resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==}
- engines: {node: '>= 0.4'}
-
- is-network-error@1.3.0:
- resolution: {integrity: sha512-6oIwpsgRfnDiyEDLMay/GqCl3HoAtH5+RUKW29gYkL0QA+ipzpDLA16yQs7/RHCSu+BwgbJaOUqa4A99qNVQVw==}
- engines: {node: '>=16'}
-
- is-npm@6.0.0:
- resolution: {integrity: sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
- is-number-object@1.0.7:
- resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==}
- engines: {node: '>= 0.4'}
-
- is-number@7.0.0:
- resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
- engines: {node: '>=0.12.0'}
-
- is-obj@1.0.1:
- resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==}
- engines: {node: '>=0.10.0'}
-
- is-obj@2.0.0:
- resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==}
- engines: {node: '>=8'}
-
- is-path-inside@3.0.3:
- resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
- engines: {node: '>=8'}
-
- is-plain-obj@3.0.0:
- resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==}
- engines: {node: '>=10'}
-
- is-plain-obj@4.1.0:
- resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
- engines: {node: '>=12'}
-
- is-plain-object@2.0.4:
- resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==}
- engines: {node: '>=0.10.0'}
-
- is-regex@1.1.4:
- resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==}
- engines: {node: '>= 0.4'}
-
- is-regexp@1.0.0:
- resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==}
- engines: {node: '>=0.10.0'}
-
- is-shared-array-buffer@1.0.3:
- resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==}
- engines: {node: '>= 0.4'}
-
- is-stream@2.0.1:
- resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
- engines: {node: '>=8'}
-
- is-string@1.0.7:
- resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==}
- engines: {node: '>= 0.4'}
-
- is-symbol@1.0.4:
- resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==}
- engines: {node: '>= 0.4'}
-
- is-typed-array@1.1.13:
- resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==}
- engines: {node: '>= 0.4'}
-
- is-typedarray@1.0.0:
- resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==}
-
- is-weakref@1.0.2:
- resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==}
-
- is-wsl@2.2.0:
- resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
- engines: {node: '>=8'}
-
- is-wsl@3.1.0:
- resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==}
- engines: {node: '>=16'}
-
- is-yarn-global@0.4.1:
- resolution: {integrity: sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ==}
- engines: {node: '>=12'}
-
- isarray@0.0.1:
- resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==}
-
- isarray@1.0.0:
- resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
-
- isarray@2.0.5:
- resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
-
- isexe@2.0.0:
- resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
-
- isobject@3.0.1:
- resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==}
- engines: {node: '>=0.10.0'}
-
- jest-util@29.7.0:
- resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
- jest-worker@27.5.1:
- resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==}
- engines: {node: '>= 10.13.0'}
-
- jest-worker@29.7.0:
- resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
- jiti@1.21.6:
- resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==}
- hasBin: true
-
- joi@17.13.3:
- resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==}
-
- js-tokens@4.0.0:
- resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
-
- js-yaml@3.14.1:
- resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==}
- hasBin: true
-
- js-yaml@4.1.0:
- resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
- hasBin: true
-
- jsesc@3.0.2:
- resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==}
- engines: {node: '>=6'}
- hasBin: true
-
- json-buffer@3.0.1:
- resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
-
- json-parse-even-better-errors@2.3.1:
- resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
-
- json-schema-traverse@0.4.1:
- resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
-
- json-schema-traverse@1.0.0:
- resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
-
- json5@2.2.3:
- resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
- engines: {node: '>=6'}
- hasBin: true
-
- jsonfile@6.1.0:
- resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
-
- katex@0.16.11:
- resolution: {integrity: sha512-RQrI8rlHY92OLf3rho/Ts8i/XvjgguEjOkO1BEXcU3N8BqPpSzBNwV/G0Ukr+P/l3ivvJUE/Fa/CwbS6HesGNQ==}
- hasBin: true
-
- keyv@4.5.4:
- resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
-
- khroma@2.1.0:
- resolution: {integrity: sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==}
-
- kind-of@6.0.3:
- resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
- engines: {node: '>=0.10.0'}
-
- kleur@3.0.3:
- resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==}
- engines: {node: '>=6'}
-
- kolorist@1.8.0:
- resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==}
-
- langium@3.3.1:
- resolution: {integrity: sha512-QJv/h939gDpvT+9SiLVlY7tZC3xB2qK57v0J04Sh9wpMb6MP1q8gB21L3WIo8T5P1MSMg3Ep14L7KkDCFG3y4w==}
- engines: {node: '>=16.0.0'}
-
- latest-version@7.0.0:
- resolution: {integrity: sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==}
- engines: {node: '>=14.16'}
-
- launch-editor@2.9.1:
- resolution: {integrity: sha512-Gcnl4Bd+hRO9P9icCP/RVVT2o8SFlPXofuCxvA2SaZuH45whSvf5p8x5oih5ftLiVhEI4sp5xDY+R+b3zJBh5w==}
-
- layout-base@1.0.2:
- resolution: {integrity: sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==}
-
- layout-base@2.0.1:
- resolution: {integrity: sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==}
-
- leven@3.1.0:
- resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==}
- engines: {node: '>=6'}
-
- lightningcss-darwin-arm64@1.27.0:
- resolution: {integrity: sha512-Gl/lqIXY+d+ySmMbgDf0pgaWSqrWYxVHoc88q+Vhf2YNzZ8DwoRzGt5NZDVqqIW5ScpSnmmjcgXP87Dn2ylSSQ==}
- engines: {node: '>= 12.0.0'}
- cpu: [arm64]
- os: [darwin]
-
- lightningcss-darwin-x64@1.27.0:
- resolution: {integrity: sha512-0+mZa54IlcNAoQS9E0+niovhyjjQWEMrwW0p2sSdLRhLDc8LMQ/b67z7+B5q4VmjYCMSfnFi3djAAQFIDuj/Tg==}
- engines: {node: '>= 12.0.0'}
- cpu: [x64]
- os: [darwin]
-
- lightningcss-freebsd-x64@1.27.0:
- resolution: {integrity: sha512-n1sEf85fePoU2aDN2PzYjoI8gbBqnmLGEhKq7q0DKLj0UTVmOTwDC7PtLcy/zFxzASTSBlVQYJUhwIStQMIpRA==}
- engines: {node: '>= 12.0.0'}
- cpu: [x64]
- os: [freebsd]
-
- lightningcss-linux-arm-gnueabihf@1.27.0:
- resolution: {integrity: sha512-MUMRmtdRkOkd5z3h986HOuNBD1c2lq2BSQA1Jg88d9I7bmPGx08bwGcnB75dvr17CwxjxD6XPi3Qh8ArmKFqCA==}
- engines: {node: '>= 12.0.0'}
- cpu: [arm]
- os: [linux]
-
- lightningcss-linux-arm64-gnu@1.27.0:
- resolution: {integrity: sha512-cPsxo1QEWq2sfKkSq2Bq5feQDHdUEwgtA9KaB27J5AX22+l4l0ptgjMZZtYtUnteBofjee+0oW1wQ1guv04a7A==}
- engines: {node: '>= 12.0.0'}
- cpu: [arm64]
- os: [linux]
- libc: [glibc]
-
- lightningcss-linux-arm64-musl@1.27.0:
- resolution: {integrity: sha512-rCGBm2ax7kQ9pBSeITfCW9XSVF69VX+fm5DIpvDZQl4NnQoMQyRwhZQm9pd59m8leZ1IesRqWk2v/DntMo26lg==}
- engines: {node: '>= 12.0.0'}
- cpu: [arm64]
- os: [linux]
- libc: [musl]
-
- lightningcss-linux-x64-gnu@1.27.0:
- resolution: {integrity: sha512-Dk/jovSI7qqhJDiUibvaikNKI2x6kWPN79AQiD/E/KeQWMjdGe9kw51RAgoWFDi0coP4jinaH14Nrt/J8z3U4A==}
- engines: {node: '>= 12.0.0'}
- cpu: [x64]
- os: [linux]
- libc: [glibc]
-
- lightningcss-linux-x64-musl@1.27.0:
- resolution: {integrity: sha512-QKjTxXm8A9s6v9Tg3Fk0gscCQA1t/HMoF7Woy1u68wCk5kS4fR+q3vXa1p3++REW784cRAtkYKrPy6JKibrEZA==}
- engines: {node: '>= 12.0.0'}
- cpu: [x64]
- os: [linux]
- libc: [musl]
-
- lightningcss-win32-arm64-msvc@1.27.0:
- resolution: {integrity: sha512-/wXegPS1hnhkeG4OXQKEMQeJd48RDC3qdh+OA8pCuOPCyvnm/yEayrJdJVqzBsqpy1aJklRCVxscpFur80o6iQ==}
- engines: {node: '>= 12.0.0'}
- cpu: [arm64]
- os: [win32]
-
- lightningcss-win32-x64-msvc@1.27.0:
- resolution: {integrity: sha512-/OJLj94Zm/waZShL8nB5jsNj3CfNATLCTyFxZyouilfTmSoLDX7VlVAmhPHoZWVFp4vdmoiEbPEYC8HID3m6yw==}
- engines: {node: '>= 12.0.0'}
- cpu: [x64]
- os: [win32]
-
- lightningcss@1.27.0:
- resolution: {integrity: sha512-8f7aNmS1+etYSLHht0fQApPc2kNO8qGRutifN5rVIc6Xo6ABsEbqOr758UwI7ALVbTt4x1fllKt0PYgzD9S3yQ==}
- engines: {node: '>= 12.0.0'}
-
- lilconfig@3.1.2:
- resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==}
- engines: {node: '>=14'}
-
- lines-and-columns@1.2.4:
- resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
-
- linkify-it@3.0.3:
- resolution: {integrity: sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==}
-
- loader-runner@4.3.0:
- resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==}
- engines: {node: '>=6.11.5'}
-
- loader-utils@2.0.4:
- resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==}
- engines: {node: '>=8.9.0'}
-
- local-pkg@0.5.0:
- resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==}
- engines: {node: '>=14'}
-
- locate-path@7.2.0:
- resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
- lodash-es@4.17.21:
- resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
-
- lodash.debounce@4.0.8:
- resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==}
-
- lodash.memoize@4.1.2:
- resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==}
-
- lodash.uniq@4.5.0:
- resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==}
-
- lodash@4.17.21:
- resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
-
- longest-streak@3.1.0:
- resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==}
-
- loose-envify@1.4.0:
- resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
- hasBin: true
-
- lower-case@2.0.2:
- resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==}
-
- lowercase-keys@3.0.0:
- resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
- lru-cache@5.1.1:
- resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
-
- markdown-extensions@2.0.0:
- resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==}
- engines: {node: '>=16'}
-
- markdown-it@12.3.2:
- resolution: {integrity: sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==}
- hasBin: true
-
- markdown-table@3.0.3:
- resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==}
-
- markdownlint-cli2-formatter-default@0.0.3:
- resolution: {integrity: sha512-QEAJitT5eqX1SNboOD+SO/LNBpu4P4je8JlR02ug2cLQAqmIhh8IJnSK7AcaHBHhNADqdGydnPpQOpsNcEEqCw==}
- peerDependencies:
- markdownlint-cli2: '>=0.0.4'
-
- markdownlint-cli2@0.4.0:
- resolution: {integrity: sha512-EcwP5tAbyzzL3ACI0L16LqbNctmh8wNX56T+aVvIxWyTAkwbYNx2V7IheRkXS3mE7R/pnaApZ/RSXcXuzRVPjg==}
- engines: {node: '>=12'}
- hasBin: true
-
- markdownlint-rule-helpers@0.16.0:
- resolution: {integrity: sha512-oEacRUVeTJ5D5hW1UYd2qExYI0oELdYK72k1TKGvIeYJIbqQWAz476NAc7LNixSySUhcNl++d02DvX0ccDk9/w==}
-
- markdownlint@0.25.1:
- resolution: {integrity: sha512-AG7UkLzNa1fxiOv5B+owPsPhtM4D6DoODhsJgiaNg1xowXovrYgOnLqAgOOFQpWOlHFVQUzjMY5ypNNTeov92g==}
- engines: {node: '>=12'}
-
- marked@15.0.12:
- resolution: {integrity: sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==}
- engines: {node: '>= 18'}
- hasBin: true
-
- math-intrinsics@1.1.0:
- resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
- engines: {node: '>= 0.4'}
-
- mdast-util-directive@3.0.0:
- resolution: {integrity: sha512-JUpYOqKI4mM3sZcNxmF/ox04XYFFkNwr0CFlrQIkCwbvH0xzMCqkMqAde9wRd80VAhaUrwFwKm2nxretdT1h7Q==}
-
- mdast-util-find-and-replace@3.0.1:
- resolution: {integrity: sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==}
-
- mdast-util-from-markdown@2.0.1:
- resolution: {integrity: sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==}
-
- mdast-util-frontmatter@2.0.1:
- resolution: {integrity: sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==}
-
- mdast-util-gfm-autolink-literal@2.0.1:
- resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==}
-
- mdast-util-gfm-footnote@2.0.0:
- resolution: {integrity: sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==}
-
- mdast-util-gfm-strikethrough@2.0.0:
- resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==}
-
- mdast-util-gfm-table@2.0.0:
- resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==}
-
- mdast-util-gfm-task-list-item@2.0.0:
- resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==}
-
- mdast-util-gfm@3.0.0:
- resolution: {integrity: sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==}
-
- mdast-util-mdx-expression@2.0.1:
- resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==}
-
- mdast-util-mdx-jsx@3.1.3:
- resolution: {integrity: sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ==}
-
- mdast-util-mdx@3.0.0:
- resolution: {integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==}
-
- mdast-util-mdxjs-esm@2.0.1:
- resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==}
-
- mdast-util-phrasing@4.1.0:
- resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==}
-
- mdast-util-to-hast@13.2.0:
- resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==}
-
- mdast-util-to-markdown@2.1.0:
- resolution: {integrity: sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==}
-
- mdast-util-to-string@4.0.0:
- resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==}
-
- mdn-data@2.0.14:
- resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==}
-
- mdn-data@2.0.28:
- resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==}
-
- mdn-data@2.0.30:
- resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==}
-
- mdn-data@2.0.4:
- resolution: {integrity: sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==}
-
- mdurl@1.0.1:
- resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==}
-
- media-typer@0.3.0:
- resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
- engines: {node: '>= 0.6'}
-
- medium-zoom@1.1.0:
- resolution: {integrity: sha512-ewyDsp7k4InCUp3jRmwHBRFGyjBimKps/AJLjRSox+2q/2H4p/PNpQf+pwONWlJiOudkBXtbdmVbFjqyybfTmQ==}
-
- meilisearch-docsearch@0.8.0:
- resolution: {integrity: sha512-I0sd0z7CRSyn83ACDKbDD4PQNFCe/oZxN4pWgJbqLgLwOEICQMZLMlFVmQPQzzSb9ZkvjjJnaNPxVpZ4yi7upw==}
-
- meilisearch@0.50.0:
- resolution: {integrity: sha512-9IzIkobvnuS18Eg4dq/eJB9W+eXqeLZjNRgq/kKMswSmVYYSQsXqGgSuCA0JkF+o5RwJlwIsieQee6rh313VhA==}
-
- memfs@4.51.1:
- resolution: {integrity: sha512-Eyt3XrufitN2ZL9c/uIRMyDwXanLI88h/L3MoWqNY747ha3dMR9dWqp8cRT5ntjZ0U1TNuq4U91ZXK0sMBjYOQ==}
-
- merge-descriptors@1.0.3:
- resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==}
-
- merge-stream@2.0.0:
- resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
-
- merge2@1.4.1:
- resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
- engines: {node: '>= 8'}
-
- mermaid@11.6.0:
- resolution: {integrity: sha512-PE8hGUy1LDlWIHWBP05SFdqUHGmRcCcK4IzpOKPE35eOw+G9zZgcnMpyunJVUEOgb//KBORPjysKndw8bFLuRg==}
-
- methods@1.1.2:
- resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==}
- engines: {node: '>= 0.6'}
-
- micromark-core-commonmark@2.0.1:
- resolution: {integrity: sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==}
-
- micromark-extension-directive@3.0.2:
- resolution: {integrity: sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA==}
-
- micromark-extension-frontmatter@2.0.0:
- resolution: {integrity: sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==}
-
- micromark-extension-gfm-autolink-literal@2.1.0:
- resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==}
-
- micromark-extension-gfm-footnote@2.1.0:
- resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==}
-
- micromark-extension-gfm-strikethrough@2.1.0:
- resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==}
-
- micromark-extension-gfm-table@2.1.0:
- resolution: {integrity: sha512-Ub2ncQv+fwD70/l4ou27b4YzfNaCJOvyX4HxXU15m7mpYY+rjuWzsLIPZHJL253Z643RpbcP1oeIJlQ/SKW67g==}
-
- micromark-extension-gfm-tagfilter@2.0.0:
- resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==}
-
- micromark-extension-gfm-task-list-item@2.1.0:
- resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==}
-
- micromark-extension-gfm@3.0.0:
- resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==}
-
- micromark-extension-mdx-expression@3.0.0:
- resolution: {integrity: sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ==}
-
- micromark-extension-mdx-jsx@3.0.1:
- resolution: {integrity: sha512-vNuFb9czP8QCtAQcEJn0UJQJZA8Dk6DXKBqx+bg/w0WGuSxDxNr7hErW89tHUY31dUW4NqEOWwmEUNhjTFmHkg==}
-
- micromark-extension-mdx-md@2.0.0:
- resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==}
-
- micromark-extension-mdxjs-esm@3.0.0:
- resolution: {integrity: sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==}
-
- micromark-extension-mdxjs@3.0.0:
- resolution: {integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==}
-
- micromark-factory-destination@2.0.0:
- resolution: {integrity: sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==}
-
- micromark-factory-label@2.0.0:
- resolution: {integrity: sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==}
-
- micromark-factory-mdx-expression@2.0.2:
- resolution: {integrity: sha512-5E5I2pFzJyg2CtemqAbcyCktpHXuJbABnsb32wX2U8IQKhhVFBqkcZR5LRm1WVoFqa4kTueZK4abep7wdo9nrw==}
-
- micromark-factory-space@1.1.0:
- resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==}
-
- micromark-factory-space@2.0.0:
- resolution: {integrity: sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==}
-
- micromark-factory-title@2.0.0:
- resolution: {integrity: sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==}
-
- micromark-factory-whitespace@2.0.0:
- resolution: {integrity: sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==}
-
- micromark-util-character@1.2.0:
- resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==}
-
- micromark-util-character@2.1.0:
- resolution: {integrity: sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==}
-
- micromark-util-chunked@2.0.0:
- resolution: {integrity: sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==}
-
- micromark-util-classify-character@2.0.0:
- resolution: {integrity: sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==}
-
- micromark-util-combine-extensions@2.0.0:
- resolution: {integrity: sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==}
-
- micromark-util-decode-numeric-character-reference@2.0.1:
- resolution: {integrity: sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==}
-
- micromark-util-decode-string@2.0.0:
- resolution: {integrity: sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==}
-
- micromark-util-encode@2.0.0:
- resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==}
-
- micromark-util-events-to-acorn@2.0.2:
- resolution: {integrity: sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA==}
-
- micromark-util-html-tag-name@2.0.0:
- resolution: {integrity: sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==}
-
- micromark-util-normalize-identifier@2.0.0:
- resolution: {integrity: sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==}
-
- micromark-util-resolve-all@2.0.0:
- resolution: {integrity: sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==}
-
- micromark-util-sanitize-uri@2.0.0:
- resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==}
-
- micromark-util-subtokenize@2.0.1:
- resolution: {integrity: sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==}
-
- micromark-util-symbol@1.1.0:
- resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==}
-
- micromark-util-symbol@2.0.0:
- resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==}
-
- micromark-util-types@1.1.0:
- resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==}
-
- micromark-util-types@2.0.0:
- resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==}
-
- micromark@4.0.0:
- resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==}
-
- micromatch@4.0.4:
- resolution: {integrity: sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==}
- engines: {node: '>=8.6'}
-
- micromatch@4.0.8:
- resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
- engines: {node: '>=8.6'}
-
- mime-db@1.33.0:
- resolution: {integrity: sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==}
- engines: {node: '>= 0.6'}
-
- mime-db@1.52.0:
- resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
- engines: {node: '>= 0.6'}
-
- mime-db@1.54.0:
- resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==}
- engines: {node: '>= 0.6'}
-
- mime-types@2.1.18:
- resolution: {integrity: sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==}
- engines: {node: '>= 0.6'}
-
- mime-types@2.1.35:
- resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
- engines: {node: '>= 0.6'}
-
- mime-types@3.0.2:
- resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==}
- engines: {node: '>=18'}
-
- mime@1.6.0:
- resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
- engines: {node: '>=4'}
- hasBin: true
-
- mimic-fn@2.1.0:
- resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
- engines: {node: '>=6'}
-
- mimic-response@3.1.0:
- resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==}
- engines: {node: '>=10'}
-
- mimic-response@4.0.0:
- resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
- mini-css-extract-plugin@2.9.4:
- resolution: {integrity: sha512-ZWYT7ln73Hptxqxk2DxPU9MmapXRhxkJD6tkSR04dnQxm8BGu2hzgKLugK5yySD97u/8yy7Ma7E76k9ZdvtjkQ==}
- engines: {node: '>= 12.13.0'}
- peerDependencies:
- webpack: ^5.0.0
-
- minimalistic-assert@1.0.1:
- resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==}
-
- minimatch@3.1.5:
- resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==}
-
- minimist@1.2.8:
- resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
-
- mkdirp@0.5.6:
- resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
- hasBin: true
-
- mlly@1.7.2:
- resolution: {integrity: sha512-tN3dvVHYVz4DhSXinXIk7u9syPYaJvio118uomkovAtWBT+RdbP6Lfh/5Lvo519YMmwBafwlh20IPTXIStscpA==}
-
- mrmime@2.0.0:
- resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==}
- engines: {node: '>=10'}
-
- ms@2.0.0:
- resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
-
- ms@2.1.3:
- resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
-
- multicast-dns@7.2.5:
- resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==}
- hasBin: true
-
- nanoid@3.3.11:
- resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
- engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
- hasBin: true
-
- negotiator@0.6.3:
- resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
- engines: {node: '>= 0.6'}
-
- neo-async@2.6.2:
- resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
-
- no-case@3.0.4:
- resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==}
-
- node-addon-api@7.1.1:
- resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==}
-
- node-emoji@2.1.3:
- resolution: {integrity: sha512-E2WEOVsgs7O16zsURJ/eH8BqhF029wGpEOnv7Urwdo2wmQanOACwJQh0devF9D9RhoZru0+9JXIS0dBXIAz+lA==}
- engines: {node: '>=18'}
-
- node-forge@1.3.1:
- resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==}
- engines: {node: '>= 6.13.0'}
-
- node-releases@2.0.18:
- resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==}
-
- node-releases@2.0.27:
- resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==}
-
- normalize-path@3.0.0:
- resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
- engines: {node: '>=0.10.0'}
-
- normalize-url@8.0.1:
- resolution: {integrity: sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==}
- engines: {node: '>=14.16'}
-
- npm-run-path@4.0.1:
- resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
- engines: {node: '>=8'}
-
- nprogress@0.2.0:
- resolution: {integrity: sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==}
-
- nth-check@1.0.2:
- resolution: {integrity: sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==}
-
- nth-check@2.1.1:
- resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
-
- null-loader@4.0.1:
- resolution: {integrity: sha512-pxqVbi4U6N26lq+LmgIbB5XATP0VdZKOG25DhHi8btMmJJefGArFyDg1yc4U3hWCJbMqSrw0qyrz1UQX+qYXqg==}
- engines: {node: '>= 10.13.0'}
- peerDependencies:
- webpack: ^4.0.0 || ^5.0.0
-
- object-assign@4.1.1:
- resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
- engines: {node: '>=0.10.0'}
-
- object-inspect@1.13.2:
- resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==}
- engines: {node: '>= 0.4'}
-
- object-inspect@1.13.4:
- resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==}
- engines: {node: '>= 0.4'}
-
- object-keys@1.1.1:
- resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
- engines: {node: '>= 0.4'}
-
- object.assign@4.1.5:
- resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==}
- engines: {node: '>= 0.4'}
-
- object.getownpropertydescriptors@2.1.8:
- resolution: {integrity: sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==}
- engines: {node: '>= 0.8'}
-
- object.values@1.2.0:
- resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==}
- engines: {node: '>= 0.4'}
-
- obuf@1.1.2:
- resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==}
-
- on-finished@2.4.1:
- resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
- engines: {node: '>= 0.8'}
-
- on-headers@1.0.2:
- resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==}
- engines: {node: '>= 0.8'}
-
- onetime@5.1.2:
- resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
- engines: {node: '>=6'}
-
- oniguruma-parser@0.12.2:
- resolution: {integrity: sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw==}
-
- oniguruma-to-es@4.3.6:
- resolution: {integrity: sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==}
-
- open@10.2.0:
- resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==}
- engines: {node: '>=18'}
-
- open@8.4.2:
- resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==}
- engines: {node: '>=12'}
-
- opener@1.5.2:
- resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==}
- hasBin: true
-
- p-cancelable@3.0.0:
- resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==}
- engines: {node: '>=12.20'}
-
- p-finally@1.0.0:
- resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==}
- engines: {node: '>=4'}
-
- p-limit@4.0.0:
- resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
- p-locate@6.0.0:
- resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
- p-map@4.0.0:
- resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==}
- engines: {node: '>=10'}
-
- p-queue@6.6.2:
- resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==}
- engines: {node: '>=8'}
-
- p-retry@6.2.1:
- resolution: {integrity: sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==}
- engines: {node: '>=16.17'}
-
- p-timeout@3.2.0:
- resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==}
- engines: {node: '>=8'}
-
- package-json@8.1.1:
- resolution: {integrity: sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==}
- engines: {node: '>=14.16'}
-
- package-manager-detector@0.2.2:
- resolution: {integrity: sha512-VgXbyrSNsml4eHWIvxxG/nTL4wgybMTXCV2Un/+yEc3aDKKU6nQBZjbeP3Pl3qm9Qg92X/1ng4ffvCeD/zwHgg==}
-
- param-case@3.0.4:
- resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==}
-
- parent-module@1.0.1:
- resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
- engines: {node: '>=6'}
-
- parse-entities@4.0.1:
- resolution: {integrity: sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==}
-
- parse-json@5.2.0:
- resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
- engines: {node: '>=8'}
-
- parse-numeric-range@1.3.0:
- resolution: {integrity: sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==}
-
- parse5-htmlparser2-tree-adapter@7.1.0:
- resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==}
-
- parse5@7.2.0:
- resolution: {integrity: sha512-ZkDsAOcxsUMZ4Lz5fVciOehNcJ+Gb8gTzcA4yl3wnc273BAybYWrQ+Ks/OjCjSEpjvQkDSeZbybK9qj2VHHdGA==}
-
- parseurl@1.3.3:
- resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
- engines: {node: '>= 0.8'}
-
- pascal-case@3.1.2:
- resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==}
-
- path-data-parser@0.1.0:
- resolution: {integrity: sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==}
-
- path-exists@5.0.0:
- resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
- path-is-inside@1.0.2:
- resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==}
-
- path-key@3.1.1:
- resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
- engines: {node: '>=8'}
-
- path-parse@1.0.7:
- resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
-
- path-root-regex@0.1.2:
- resolution: {integrity: sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==}
- engines: {node: '>=0.10.0'}
-
- path-root@0.1.1:
- resolution: {integrity: sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==}
- engines: {node: '>=0.10.0'}
-
- path-to-regexp@0.1.12:
- resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==}
-
- path-to-regexp@1.9.0:
- resolution: {integrity: sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==}
-
- path-to-regexp@3.3.0:
- resolution: {integrity: sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==}
-
- path-type@4.0.0:
- resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
- engines: {node: '>=8'}
-
- pathe@1.1.2:
- resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==}
-
- picocolors@1.1.1:
- resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
-
- picomatch@2.3.1:
- resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
- engines: {node: '>=8.6'}
-
- pkg-dir@7.0.0:
- resolution: {integrity: sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==}
- engines: {node: '>=14.16'}
-
- pkg-types@1.2.1:
- resolution: {integrity: sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw==}
-
- points-on-curve@0.2.0:
- resolution: {integrity: sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==}
-
- points-on-path@0.2.1:
- resolution: {integrity: sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==}
-
- possible-typed-array-names@1.0.0:
- resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==}
- engines: {node: '>= 0.4'}
-
- postcss-attribute-case-insensitive@7.0.1:
- resolution: {integrity: sha512-Uai+SupNSqzlschRyNx3kbCTWgY/2hcwtHEI/ej2LJWc9JJ77qKgGptd8DHwY1mXtZ7Aoh4z4yxfwMBue9eNgw==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- postcss-calc@9.0.1:
- resolution: {integrity: sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==}
- engines: {node: ^14 || ^16 || >=18.0}
- peerDependencies:
- postcss: ^8.2.2
-
- postcss-clamp@4.1.0:
- resolution: {integrity: sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==}
- engines: {node: '>=7.6.0'}
- peerDependencies:
- postcss: ^8.4.6
-
- postcss-color-functional-notation@7.0.12:
- resolution: {integrity: sha512-TLCW9fN5kvO/u38/uesdpbx3e8AkTYhMvDZYa9JpmImWuTE99bDQ7GU7hdOADIZsiI9/zuxfAJxny/khknp1Zw==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- postcss-color-hex-alpha@10.0.0:
- resolution: {integrity: sha512-1kervM2cnlgPs2a8Vt/Qbe5cQ++N7rkYo/2rz2BkqJZIHQwaVuJgQH38REHrAi4uM0b1fqxMkWYmese94iMp3w==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- postcss-color-rebeccapurple@10.0.0:
- resolution: {integrity: sha512-JFta737jSP+hdAIEhk1Vs0q0YF5P8fFcj+09pweS8ktuGuZ8pPlykHsk6mPxZ8awDl4TrcxUqJo9l1IhVr/OjQ==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- postcss-colormin@6.1.0:
- resolution: {integrity: sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw==}
- engines: {node: ^14 || ^16 || >=18.0}
- peerDependencies:
- postcss: ^8.4.31
-
- postcss-convert-values@6.1.0:
- resolution: {integrity: sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w==}
- engines: {node: ^14 || ^16 || >=18.0}
- peerDependencies:
- postcss: ^8.4.31
-
- postcss-custom-media@11.0.6:
- resolution: {integrity: sha512-C4lD4b7mUIw+RZhtY7qUbf4eADmb7Ey8BFA2px9jUbwg7pjTZDl4KY4bvlUV+/vXQvzQRfiGEVJyAbtOsCMInw==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- postcss-custom-properties@14.0.6:
- resolution: {integrity: sha512-fTYSp3xuk4BUeVhxCSJdIPhDLpJfNakZKoiTDx7yRGCdlZrSJR7mWKVOBS4sBF+5poPQFMj2YdXx1VHItBGihQ==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- postcss-custom-selectors@8.0.5:
- resolution: {integrity: sha512-9PGmckHQswiB2usSO6XMSswO2yFWVoCAuih1yl9FVcwkscLjRKjwsjM3t+NIWpSU2Jx3eOiK2+t4vVTQaoCHHg==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- postcss-dir-pseudo-class@9.0.1:
- resolution: {integrity: sha512-tRBEK0MHYvcMUrAuYMEOa0zg9APqirBcgzi6P21OhxtJyJADo/SWBwY1CAwEohQ/6HDaa9jCjLRG7K3PVQYHEA==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- postcss-discard-comments@6.0.2:
- resolution: {integrity: sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw==}
- engines: {node: ^14 || ^16 || >=18.0}
- peerDependencies:
- postcss: ^8.4.31
-
- postcss-discard-duplicates@6.0.3:
- resolution: {integrity: sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw==}
- engines: {node: ^14 || ^16 || >=18.0}
- peerDependencies:
- postcss: ^8.4.31
-
- postcss-discard-empty@6.0.3:
- resolution: {integrity: sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ==}
- engines: {node: ^14 || ^16 || >=18.0}
- peerDependencies:
- postcss: ^8.4.31
-
- postcss-discard-overridden@6.0.2:
- resolution: {integrity: sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ==}
- engines: {node: ^14 || ^16 || >=18.0}
- peerDependencies:
- postcss: ^8.4.31
-
- postcss-discard-unused@6.0.5:
- resolution: {integrity: sha512-wHalBlRHkaNnNwfC8z+ppX57VhvS+HWgjW508esjdaEYr3Mx7Gnn2xA4R/CKf5+Z9S5qsqC+Uzh4ueENWwCVUA==}
- engines: {node: ^14 || ^16 || >=18.0}
- peerDependencies:
- postcss: ^8.4.31
-
- postcss-double-position-gradients@6.0.4:
- resolution: {integrity: sha512-m6IKmxo7FxSP5nF2l63QbCC3r+bWpFUWmZXZf096WxG0m7Vl1Q1+ruFOhpdDRmKrRS+S3Jtk+TVk/7z0+BVK6g==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- postcss-focus-visible@10.0.1:
- resolution: {integrity: sha512-U58wyjS/I1GZgjRok33aE8juW9qQgQUNwTSdxQGuShHzwuYdcklnvK/+qOWX1Q9kr7ysbraQ6ht6r+udansalA==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- postcss-focus-within@9.0.1:
- resolution: {integrity: sha512-fzNUyS1yOYa7mOjpci/bR+u+ESvdar6hk8XNK/TRR0fiGTp2QT5N+ducP0n3rfH/m9I7H/EQU6lsa2BrgxkEjw==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- postcss-font-variant@5.0.0:
- resolution: {integrity: sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==}
- peerDependencies:
- postcss: ^8.1.0
-
- postcss-gap-properties@6.0.0:
- resolution: {integrity: sha512-Om0WPjEwiM9Ru+VhfEDPZJAKWUd0mV1HmNXqp2C29z80aQ2uP9UVhLc7e3aYMIor/S5cVhoPgYQ7RtfeZpYTRw==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- postcss-image-set-function@7.0.0:
- resolution: {integrity: sha512-QL7W7QNlZuzOwBTeXEmbVckNt1FSmhQtbMRvGGqqU4Nf4xk6KUEQhAoWuMzwbSv5jxiRiSZ5Tv7eiDB9U87znA==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- postcss-lab-function@7.0.12:
- resolution: {integrity: sha512-tUcyRk1ZTPec3OuKFsqtRzW2Go5lehW29XA21lZ65XmzQkz43VY2tyWEC202F7W3mILOjw0voOiuxRGTsN+J9w==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- postcss-loader@7.3.4:
- resolution: {integrity: sha512-iW5WTTBSC5BfsBJ9daFMPVrLT36MrNiC6fqOZTTaHjBNX6Pfd5p+hSBqe/fEeNd7pc13QiAyGt7VdGMw4eRC4A==}
- engines: {node: '>= 14.15.0'}
- peerDependencies:
- postcss: ^7.0.0 || ^8.0.1
- webpack: ^5.0.0
-
- postcss-logical@8.1.0:
- resolution: {integrity: sha512-pL1hXFQ2fEXNKiNiAgtfA005T9FBxky5zkX6s4GZM2D8RkVgRqz3f4g1JUoq925zXv495qk8UNldDwh8uGEDoA==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- postcss-merge-idents@6.0.3:
- resolution: {integrity: sha512-1oIoAsODUs6IHQZkLQGO15uGEbK3EAl5wi9SS8hs45VgsxQfMnxvt+L+zIr7ifZFIH14cfAeVe2uCTa+SPRa3g==}
- engines: {node: ^14 || ^16 || >=18.0}
- peerDependencies:
- postcss: ^8.4.31
-
- postcss-merge-longhand@6.0.5:
- resolution: {integrity: sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w==}
- engines: {node: ^14 || ^16 || >=18.0}
- peerDependencies:
- postcss: ^8.4.31
-
- postcss-merge-rules@6.1.1:
- resolution: {integrity: sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ==}
- engines: {node: ^14 || ^16 || >=18.0}
- peerDependencies:
- postcss: ^8.4.31
-
- postcss-minify-font-values@6.1.0:
- resolution: {integrity: sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg==}
- engines: {node: ^14 || ^16 || >=18.0}
- peerDependencies:
- postcss: ^8.4.31
-
- postcss-minify-gradients@6.0.3:
- resolution: {integrity: sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q==}
- engines: {node: ^14 || ^16 || >=18.0}
- peerDependencies:
- postcss: ^8.4.31
-
- postcss-minify-params@6.1.0:
- resolution: {integrity: sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA==}
- engines: {node: ^14 || ^16 || >=18.0}
- peerDependencies:
- postcss: ^8.4.31
-
- postcss-minify-selectors@6.0.4:
- resolution: {integrity: sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ==}
- engines: {node: ^14 || ^16 || >=18.0}
- peerDependencies:
- postcss: ^8.4.31
-
- postcss-modules-extract-imports@3.1.0:
- resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==}
- engines: {node: ^10 || ^12 || >= 14}
- peerDependencies:
- postcss: ^8.1.0
-
- postcss-modules-local-by-default@4.0.5:
- resolution: {integrity: sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==}
- engines: {node: ^10 || ^12 || >= 14}
- peerDependencies:
- postcss: ^8.1.0
-
- postcss-modules-scope@3.2.0:
- resolution: {integrity: sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==}
- engines: {node: ^10 || ^12 || >= 14}
- peerDependencies:
- postcss: ^8.1.0
-
- postcss-modules-values@4.0.0:
- resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==}
- engines: {node: ^10 || ^12 || >= 14}
- peerDependencies:
- postcss: ^8.1.0
-
- postcss-nesting@13.0.2:
- resolution: {integrity: sha512-1YCI290TX+VP0U/K/aFxzHzQWHWURL+CtHMSbex1lCdpXD1SoR2sYuxDu5aNI9lPoXpKTCggFZiDJbwylU0LEQ==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- postcss-normalize-charset@6.0.2:
- resolution: {integrity: sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ==}
- engines: {node: ^14 || ^16 || >=18.0}
- peerDependencies:
- postcss: ^8.4.31
-
- postcss-normalize-display-values@6.0.2:
- resolution: {integrity: sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg==}
- engines: {node: ^14 || ^16 || >=18.0}
- peerDependencies:
- postcss: ^8.4.31
-
- postcss-normalize-positions@6.0.2:
- resolution: {integrity: sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q==}
- engines: {node: ^14 || ^16 || >=18.0}
- peerDependencies:
- postcss: ^8.4.31
-
- postcss-normalize-repeat-style@6.0.2:
- resolution: {integrity: sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ==}
- engines: {node: ^14 || ^16 || >=18.0}
- peerDependencies:
- postcss: ^8.4.31
-
- postcss-normalize-string@6.0.2:
- resolution: {integrity: sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ==}
- engines: {node: ^14 || ^16 || >=18.0}
- peerDependencies:
- postcss: ^8.4.31
-
- postcss-normalize-timing-functions@6.0.2:
- resolution: {integrity: sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA==}
- engines: {node: ^14 || ^16 || >=18.0}
- peerDependencies:
- postcss: ^8.4.31
-
- postcss-normalize-unicode@6.1.0:
- resolution: {integrity: sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg==}
- engines: {node: ^14 || ^16 || >=18.0}
- peerDependencies:
- postcss: ^8.4.31
-
- postcss-normalize-url@6.0.2:
- resolution: {integrity: sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ==}
- engines: {node: ^14 || ^16 || >=18.0}
- peerDependencies:
- postcss: ^8.4.31
-
- postcss-normalize-whitespace@6.0.2:
- resolution: {integrity: sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q==}
- engines: {node: ^14 || ^16 || >=18.0}
- peerDependencies:
- postcss: ^8.4.31
-
- postcss-opacity-percentage@3.0.0:
- resolution: {integrity: sha512-K6HGVzyxUxd/VgZdX04DCtdwWJ4NGLG212US4/LA1TLAbHgmAsTWVR86o+gGIbFtnTkfOpb9sCRBx8K7HO66qQ==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- postcss-ordered-values@6.0.2:
- resolution: {integrity: sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q==}
- engines: {node: ^14 || ^16 || >=18.0}
- peerDependencies:
- postcss: ^8.4.31
-
- postcss-overflow-shorthand@6.0.0:
- resolution: {integrity: sha512-BdDl/AbVkDjoTofzDQnwDdm/Ym6oS9KgmO7Gr+LHYjNWJ6ExORe4+3pcLQsLA9gIROMkiGVjjwZNoL/mpXHd5Q==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- postcss-page-break@3.0.4:
- resolution: {integrity: sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==}
- peerDependencies:
- postcss: ^8
-
- postcss-place@10.0.0:
- resolution: {integrity: sha512-5EBrMzat2pPAxQNWYavwAfoKfYcTADJ8AXGVPcUZ2UkNloUTWzJQExgrzrDkh3EKzmAx1evfTAzF9I8NGcc+qw==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- postcss-preset-env@10.5.0:
- resolution: {integrity: sha512-xgxFQPAPxeWmsgy8cR7GM1PGAL/smA5E9qU7K//D4vucS01es3M0fDujhDJn3kY8Ip7/vVYcecbe1yY+vBo3qQ==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- postcss-pseudo-class-any-link@10.0.1:
- resolution: {integrity: sha512-3el9rXlBOqTFaMFkWDOkHUTQekFIYnaQY55Rsp8As8QQkpiSgIYEcF/6Ond93oHiDsGb4kad8zjt+NPlOC1H0Q==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- postcss-reduce-idents@6.0.3:
- resolution: {integrity: sha512-G3yCqZDpsNPoQgbDUy3T0E6hqOQ5xigUtBQyrmq3tn2GxlyiL0yyl7H+T8ulQR6kOcHJ9t7/9H4/R2tv8tJbMA==}
- engines: {node: ^14 || ^16 || >=18.0}
- peerDependencies:
- postcss: ^8.4.31
-
- postcss-reduce-initial@6.1.0:
- resolution: {integrity: sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw==}
- engines: {node: ^14 || ^16 || >=18.0}
- peerDependencies:
- postcss: ^8.4.31
-
- postcss-reduce-transforms@6.0.2:
- resolution: {integrity: sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA==}
- engines: {node: ^14 || ^16 || >=18.0}
- peerDependencies:
- postcss: ^8.4.31
-
- postcss-replace-overflow-wrap@4.0.0:
- resolution: {integrity: sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==}
- peerDependencies:
- postcss: ^8.0.3
-
- postcss-selector-not@8.0.1:
- resolution: {integrity: sha512-kmVy/5PYVb2UOhy0+LqUYAhKj7DUGDpSWa5LZqlkWJaaAV+dxxsOG3+St0yNLu6vsKD7Dmqx+nWQt0iil89+WA==}
- engines: {node: '>=18'}
- peerDependencies:
- postcss: ^8.4
-
- postcss-selector-parser@6.1.2:
- resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==}
- engines: {node: '>=4'}
-
- postcss-selector-parser@7.0.0:
- resolution: {integrity: sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==}
- engines: {node: '>=4'}
-
- postcss-sort-media-queries@5.2.0:
- resolution: {integrity: sha512-AZ5fDMLD8SldlAYlvi8NIqo0+Z8xnXU2ia0jxmuhxAU+Lqt9K+AlmLNJ/zWEnE9x+Zx3qL3+1K20ATgNOr3fAA==}
- engines: {node: '>=14.0.0'}
- peerDependencies:
- postcss: ^8.4.23
-
- postcss-svgo@6.0.3:
- resolution: {integrity: sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g==}
- engines: {node: ^14 || ^16 || >= 18}
- peerDependencies:
- postcss: ^8.4.31
-
- postcss-unique-selectors@6.0.4:
- resolution: {integrity: sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg==}
- engines: {node: ^14 || ^16 || >=18.0}
- peerDependencies:
- postcss: ^8.4.31
-
- postcss-value-parser@4.2.0:
- resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
-
- postcss-zindex@6.0.2:
- resolution: {integrity: sha512-5BxW9l1evPB/4ZIc+2GobEBoKC+h8gPGCMi+jxsYvd2x0mjq7wazk6DrP71pStqxE9Foxh5TVnonbWpFZzXaYg==}
- engines: {node: ^14 || ^16 || >=18.0}
- peerDependencies:
- postcss: ^8.4.31
-
- postcss@8.5.6:
- resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
- engines: {node: ^10 || ^12 || >=14}
-
- pretty-error@4.0.0:
- resolution: {integrity: sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==}
-
- pretty-time@1.1.0:
- resolution: {integrity: sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==}
- engines: {node: '>=4'}
-
- prism-react-renderer@2.4.1:
- resolution: {integrity: sha512-ey8Ls/+Di31eqzUxC46h8MksNuGx/n0AAC8uKpwFau4RPDYLuE3EXTp8N8G2vX2N7UC/+IXeNUnlWBGGcAG+Ig==}
- peerDependencies:
- react: '>=16.0.0'
-
- prismjs@1.29.0:
- resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==}
- engines: {node: '>=6'}
-
- process-nextick-args@2.0.1:
- resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
-
- prompts@2.4.2:
- resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==}
- engines: {node: '>= 6'}
-
- prop-types@15.8.1:
- resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
-
- property-information@6.5.0:
- resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==}
-
- property-information@7.1.0:
- resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==}
-
- proto-list@1.2.4:
- resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==}
-
- proxy-addr@2.0.7:
- resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
- engines: {node: '>= 0.10'}
-
- punycode@2.3.1:
- resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
- engines: {node: '>=6'}
-
- pupa@3.1.0:
- resolution: {integrity: sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==}
- engines: {node: '>=12.20'}
-
- q@1.5.1:
- resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==}
- engines: {node: '>=0.6.0', teleport: '>=0.2.0'}
- deprecated: |-
- You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.
-
- (For a CapTP with native promises, see @endo/eventual-send and @endo/captp)
-
- qs@6.13.0:
- resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==}
- engines: {node: '>=0.6'}
-
- qs@6.14.0:
- resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==}
- engines: {node: '>=0.6'}
-
- queue-microtask@1.2.3:
- resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
-
- quick-lru@5.1.1:
- resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==}
- engines: {node: '>=10'}
-
- randombytes@2.1.0:
- resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
-
- range-parser@1.2.0:
- resolution: {integrity: sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==}
- engines: {node: '>= 0.6'}
-
- range-parser@1.2.1:
- resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
- engines: {node: '>= 0.6'}
-
- raw-body@2.5.2:
- resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==}
- engines: {node: '>= 0.8'}
-
- rc@1.2.8:
- resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==}
- hasBin: true
-
- react-dom@19.2.8:
- resolution: {integrity: sha512-rVprimfGBG3DR+Tq0IQG2DT5PxKth1WIGDmj5yPmlzr4YBe7uyE+Du4oVqTDXZSHGGGXRtTJEGSSePyQCMBglQ==}
- peerDependencies:
- react: ^19.2.8
-
- react-fast-compare@3.2.2:
- resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==}
-
- react-is@16.13.1:
- resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
-
- react-json-view-lite@2.4.1:
- resolution: {integrity: sha512-fwFYknRIBxjbFm0kBDrzgBy1xa5tDg2LyXXBepC5f1b+MY3BUClMCsvanMPn089JbV1Eg3nZcrp0VCuH43aXnA==}
- engines: {node: '>=18'}
- peerDependencies:
- react: ^18.0.0 || ^19.0.0
-
- react-loadable-ssr-addon-v5-slorber@1.0.3:
- resolution: {integrity: sha512-GXfh9VLwB5ERaCsU6RULh7tkemeX15aNh6wuMEBtfdyMa7fFG8TXrhXlx1SoEK2Ty/l6XIkzzYIQmyaWW3JgdQ==}
- engines: {node: '>=10.13.0'}
- peerDependencies:
- react-loadable: '*'
- webpack: '>=4.41.1 || 5.x'
-
- react-router-config@5.1.1:
- resolution: {integrity: sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==}
- peerDependencies:
- react: '>=15'
- react-router: '>=5'
-
- react-router-dom@5.3.4:
- resolution: {integrity: sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==}
- peerDependencies:
- react: '>=15'
-
- react-router@5.3.4:
- resolution: {integrity: sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==}
- peerDependencies:
- react: '>=15'
-
- react@19.2.8:
- resolution: {integrity: sha512-PWaYA1L/q9u2u7xYQi+Y3L3Yfnie7XyLeaJICV1MGD6LprsBxcAqGjYyr0eY3p+QdsA+x/Irkt4Qif8D63+Sbw==}
- engines: {node: '>=0.10.0'}
-
- readable-stream@2.3.8:
- resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
-
- readable-stream@3.6.2:
- resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
- engines: {node: '>= 6'}
-
- readdirp@3.6.0:
- resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
- engines: {node: '>=8.10.0'}
-
- readdirp@5.1.1:
- resolution: {integrity: sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA==}
- engines: {node: '>= 20.19.0'}
-
- recma-build-jsx@1.0.0:
- resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==}
-
- recma-jsx@1.0.0:
- resolution: {integrity: sha512-5vwkv65qWwYxg+Atz95acp8DMu1JDSqdGkA2Of1j6rCreyFUE/gp15fC8MnGEuG1W68UKjM6x6+YTWIh7hZM/Q==}
-
- recma-parse@1.0.0:
- resolution: {integrity: sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==}
-
- recma-stringify@1.0.0:
- resolution: {integrity: sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==}
-
- regenerate-unicode-properties@10.2.0:
- resolution: {integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==}
- engines: {node: '>=4'}
-
- regenerate@1.4.2:
- resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==}
-
- regenerator-runtime@0.14.1:
- resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
-
- regenerator-transform@0.15.2:
- resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==}
-
- regex-recursion@6.0.2:
- resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==}
-
- regex-utilities@2.3.0:
- resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==}
-
- regex@6.1.0:
- resolution: {integrity: sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==}
-
- regexp.prototype.flags@1.5.3:
- resolution: {integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==}
- engines: {node: '>= 0.4'}
-
- regexpu-core@6.1.1:
- resolution: {integrity: sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==}
- engines: {node: '>=4'}
-
- registry-auth-token@5.0.2:
- resolution: {integrity: sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==}
- engines: {node: '>=14'}
-
- registry-url@6.0.1:
- resolution: {integrity: sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==}
- engines: {node: '>=12'}
-
- regjsgen@0.8.0:
- resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==}
-
- regjsparser@0.11.1:
- resolution: {integrity: sha512-1DHODs4B8p/mQHU9kr+jv8+wIC9mtG4eBHxWxIq5mhjE3D5oORhCc6deRKzTjs9DcfRFmj9BHSDguZklqCGFWQ==}
- hasBin: true
-
- rehype-raw@7.0.0:
- resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==}
-
- rehype-recma@1.0.0:
- resolution: {integrity: sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==}
-
- relateurl@0.2.7:
- resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==}
- engines: {node: '>= 0.10'}
-
- remark-directive@3.0.0:
- resolution: {integrity: sha512-l1UyWJ6Eg1VPU7Hm/9tt0zKtReJQNOA4+iDMAxTyZNWnJnFlbS/7zhiel/rogTLQ2vMYwDzSJa4BiVNqGlqIMA==}
-
- remark-emoji@4.0.1:
- resolution: {integrity: sha512-fHdvsTR1dHkWKev9eNyhTo4EFwbUvJ8ka9SgeWkMPYFX4WoI7ViVBms3PjlQYgw5TLvNQso3GUB/b/8t3yo+dg==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
- remark-frontmatter@5.0.0:
- resolution: {integrity: sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==}
-
- remark-gfm@4.0.0:
- resolution: {integrity: sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==}
-
- remark-mdx@3.0.1:
- resolution: {integrity: sha512-3Pz3yPQ5Rht2pM5R+0J2MrGoBSrzf+tJG94N+t/ilfdh8YLyyKYtidAYwTveB20BoHAcwIopOUqhcmh2F7hGYA==}
-
- remark-parse@11.0.0:
- resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==}
-
- remark-rehype@11.1.1:
- resolution: {integrity: sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==}
-
- remark-stringify@11.0.0:
- resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==}
-
- renderkid@3.0.0:
- resolution: {integrity: sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==}
-
- require-from-string@2.0.2:
- resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
- engines: {node: '>=0.10.0'}
-
- require-like@0.1.2:
- resolution: {integrity: sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==}
-
- requires-port@1.0.0:
- resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==}
-
- resolve-alpn@1.2.1:
- resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==}
-
- resolve-from@4.0.0:
- resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
- engines: {node: '>=4'}
-
- resolve-package-path@4.0.3:
- resolution: {integrity: sha512-SRpNAPW4kewOaNUt8VPqhJ0UMxawMwzJD8V7m1cJfdSTK9ieZwS6K7Dabsm4bmLFM96Z5Y/UznrpG5kt1im8yA==}
- engines: {node: '>= 12'}
-
- resolve-pathname@3.0.0:
- resolution: {integrity: sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==}
-
- resolve@1.22.8:
- resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
- hasBin: true
-
- responselike@3.0.0:
- resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==}
- engines: {node: '>=14.16'}
-
- retry@0.13.1:
- resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==}
- engines: {node: '>= 4'}
-
- reusify@1.0.4:
- resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
- engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
-
- robust-predicates@3.0.2:
- resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==}
-
- roughjs@4.6.6:
- resolution: {integrity: sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==}
-
- rtlcss@4.3.0:
- resolution: {integrity: sha512-FI+pHEn7Wc4NqKXMXFM+VAYKEj/mRIcW4h24YVwVtyjI+EqGrLc2Hx/Ny0lrZ21cBWU2goLy36eqMcNj3AQJig==}
- engines: {node: '>=12.0.0'}
- hasBin: true
-
- run-applescript@7.1.0:
- resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==}
- engines: {node: '>=18'}
-
- run-parallel@1.2.0:
- resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
-
- rw@1.3.3:
- resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==}
-
- rxjs@7.8.2:
- resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==}
-
- safe-array-concat@1.1.2:
- resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==}
- engines: {node: '>=0.4'}
-
- safe-buffer@5.1.2:
- resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
-
- safe-buffer@5.2.1:
- resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
-
- safe-regex-test@1.0.3:
- resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==}
- engines: {node: '>= 0.4'}
-
- safer-buffer@2.1.2:
- resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
-
- sass-embedded-all-unknown@1.102.0:
- resolution: {integrity: sha512-BpaRCODYILywdCOI8++Q63+/ptsnWdwYuKyD5gMH0cJblXj85EePdeTTOM7Hl2PP6d4dIojg8GS9fIZhD2x8qA==}
- cpu: ['!arm', '!arm64', '!riscv64', '!x64']
-
- sass-embedded-android-arm64@1.102.0:
- resolution: {integrity: sha512-p34iJl04ksTA/6/NZNKv4Bda710hvpoUNUK6vgHKe53tTGhL5XOfYyTjX95lpKPSvGm4BlPEVSSo6CBhyNSDpw==}
- engines: {node: '>=14.0.0'}
- cpu: [arm64]
- os: [android]
-
- sass-embedded-android-arm@1.102.0:
- resolution: {integrity: sha512-QM6sPMUtUvFopVR15qXWdobSTYW/sPrXJLxa7eaIbqr/0EtNBZirEXdiOFdDNcsFIEFX3NeZjDq8ZkBAQrxR1w==}
- engines: {node: '>=14.0.0'}
- cpu: [arm]
- os: [android]
-
- sass-embedded-android-riscv64@1.102.0:
- resolution: {integrity: sha512-wcT5N3B6fIwCKCicDcUP6Jol+e1R3WxHMGU7Swp9Ds9VV8di7HYOKIFcasT25dKJv4l17SA7x5Oum0FlRnMPkg==}
- engines: {node: '>=14.0.0'}
- cpu: [riscv64]
- os: [android]
-
- sass-embedded-android-x64@1.102.0:
- resolution: {integrity: sha512-IF4eJmoM4uzOborahHp8D4PlCIvumr6IGEbe1XkedwE57qRdk/GENiYZjGwYUQP0uy+pfb+WfvTNhMxkD2VhJg==}
- engines: {node: '>=14.0.0'}
- cpu: [x64]
- os: [android]
-
- sass-embedded-darwin-arm64@1.102.0:
- resolution: {integrity: sha512-txaURnQp3L/5mGgSkg6zFrI/H1BgwPxH+7fv/HMuFT1fTXGi7i5++OJNCFVPL7gFB50WFmpf02bCvgec3/gxMA==}
- engines: {node: '>=14.0.0'}
- cpu: [arm64]
- os: [darwin]
-
- sass-embedded-darwin-x64@1.102.0:
- resolution: {integrity: sha512-KXs/y/bCVTxRy6NbgC2kK2JwmYnu4+EcDu+DVpHHIfiRgClTca++jYEqcxkthqK9ufkCgwMmrhb3tllyw5l1dw==}
- engines: {node: '>=14.0.0'}
- cpu: [x64]
- os: [darwin]
-
- sass-embedded-linux-arm64@1.102.0:
- resolution: {integrity: sha512-Yg3Ga1deV+igVqjyK5gHMKbC6fdtKkVYBnzkPVbn/W2/DeActR2JFBfMwVtZJdLpNneMye3dRzOVO2QFegsTbQ==}
- engines: {node: '>=14.0.0'}
- cpu: [arm64]
- os: [linux]
- libc: glibc
-
- sass-embedded-linux-arm@1.102.0:
- resolution: {integrity: sha512-1nqC2lrn91fjEsf6gSr/KigU15FrhUSDGWdSWowLXvNG8KbYUNRKjfypn+8u4P0SrL+R/v4VSVZguZiVVTI94A==}
- engines: {node: '>=14.0.0'}
- cpu: [arm]
- os: [linux]
- libc: glibc
-
- sass-embedded-linux-musl-arm64@1.102.0:
- resolution: {integrity: sha512-UFvRNJcYFOqo0X525vXG3Buue+waoqiG58xx7J6tMHSj5K/38t+9YbbgppKGLRoKoAwZTIdW8pxPA8qBSzQC6Q==}
- engines: {node: '>=14.0.0'}
- cpu: [arm64]
- os: [linux]
- libc: musl
-
- sass-embedded-linux-musl-arm@1.102.0:
- resolution: {integrity: sha512-WULwlrLbhHsJzGBcfztoXK47VyJugcWDmLXF893+yrMj6dF4/zJP6JqootT3EmAx9JAUdAppXI6ma7aGlnV8jw==}
- engines: {node: '>=14.0.0'}
- cpu: [arm]
- os: [linux]
- libc: musl
-
- sass-embedded-linux-musl-riscv64@1.102.0:
- resolution: {integrity: sha512-7EmAMt5cX0SEN/qTNHD4VBHyjJXmFMAGuNR9R4YJR/SWGj/OZJw9VWryMfzEnMgNbG6HykiIttGfr9CyNKmZbA==}
- engines: {node: '>=14.0.0'}
- cpu: [riscv64]
- os: [linux]
- libc: musl
-
- sass-embedded-linux-musl-x64@1.102.0:
- resolution: {integrity: sha512-HHzU5/g/MT1edbHfDzZleKcX19l6LMGk0KhZFLy66cxQl1iRLUaL22jfGstmHOdRUmVzWF3VevjSflSGvAjr4Q==}
- engines: {node: '>=14.0.0'}
- cpu: [x64]
- os: [linux]
- libc: musl
-
- sass-embedded-linux-riscv64@1.102.0:
- resolution: {integrity: sha512-AUc4wHQ7IUo9/0mcZQn7Xkl1t1+NZlTF+v5i3GX93HNoQUGIFic7q6qjSERLkdwQ0dLnWrMqe8KhV98V8v0ZoA==}
- engines: {node: '>=14.0.0'}
- cpu: [riscv64]
- os: [linux]
- libc: glibc
-
- sass-embedded-linux-x64@1.102.0:
- resolution: {integrity: sha512-CxfhMwwbQFBCTjGysByvOw4PIOCYZ/jtz9uBU0UR5sfHtQvqqnsNyb1fVCIUsZ7piimxQAwcLV5H3Skj96QiVg==}
- engines: {node: '>=14.0.0'}
- cpu: [x64]
- os: [linux]
- libc: glibc
-
- sass-embedded-unknown-all@1.102.0:
- resolution: {integrity: sha512-qhqfvFD/7X0c6e5rwvzABkGlaYJju1G+hDPCiB0HdK+S7JF+YDDb9XpRYJ9+tGIopWzEHhoNnJDPtPs9IX1lOQ==}
- os: ['!android', '!darwin', '!linux', '!win32']
-
- sass-embedded-win32-arm64@1.102.0:
- resolution: {integrity: sha512-EQOTKStMf7ervyhe3AX10Pa6F7CQMN3IgmpBkfgjy9HQG4Iyt34zCl/4vNJLVBWLW03b7/KJacy2I9SRz26X9g==}
- engines: {node: '>=14.0.0'}
- cpu: [arm64]
- os: [win32]
-
- sass-embedded-win32-x64@1.102.0:
- resolution: {integrity: sha512-e+26mgR+O4g/m7r+WGuvygsjgZEsfgWntIOgaNhkSa9b7vVas70l2RB/SipUM4zGXQk1jX06aOEz0w0Pq1pprQ==}
- engines: {node: '>=14.0.0'}
- cpu: [x64]
- os: [win32]
-
- sass-embedded@1.102.0:
- resolution: {integrity: sha512-7xZ7jbsGTpA+oRIJ3HKeiYy+RIrwHltIjKMdnRTAZiPpqvKzwy80zZqR532yk5bpHn1lTqWdZ6Fh4KI+GWSsKA==}
- engines: {node: '>=20.19.0'}
- hasBin: true
-
- sass-loader@16.0.6:
- resolution: {integrity: sha512-sglGzId5gmlfxNs4gK2U3h7HlVRfx278YK6Ono5lwzuvi1jxig80YiuHkaDBVsYIKFhx8wN7XSCI0M2IDS/3qA==}
- engines: {node: '>= 18.12.0'}
- peerDependencies:
- '@rspack/core': 0.x || 1.x
- node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0
- sass: ^1.3.0
- sass-embedded: '*'
- webpack: ^5.0.0
- peerDependenciesMeta:
- '@rspack/core':
- optional: true
- node-sass:
- optional: true
- sass:
- optional: true
- sass-embedded:
- optional: true
- webpack:
- optional: true
-
- sass@1.102.0:
- resolution: {integrity: sha512-NSOyTnaQF7rTAEOtI2fwb386vL+akyiQLBZu8Na7hXCb+umJy0GAqlcMIaqACZ6Z1VgTBS4K9PG6B3IdjHGJsw==}
- engines: {node: '>=20.19.0'}
- hasBin: true
-
- sax@1.2.4:
- resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==}
-
- sax@1.4.1:
- resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==}
-
- scheduler@0.27.0:
- resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==}
-
- schema-dts@1.1.5:
- resolution: {integrity: sha512-RJr9EaCmsLzBX2NDiO5Z3ux2BVosNZN5jo0gWgsyKvxKIUL5R3swNvoorulAeL9kLB0iTSX7V6aokhla2m7xbg==}
-
- schema-utils@3.3.0:
- resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==}
- engines: {node: '>= 10.13.0'}
-
- schema-utils@4.2.0:
- resolution: {integrity: sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==}
- engines: {node: '>= 12.13.0'}
-
- search-insights@2.17.1:
- resolution: {integrity: sha512-HHFjYH/0AqXacETlIbe9EYc3UNlQYGNNTY0fZ/sWl6SweX+GDxq9NB5+RVoPLgEFuOtCz7M9dhYxqDnhbbF0eQ==}
-
- section-matter@1.0.0:
- resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==}
- engines: {node: '>=4'}
-
- select-hose@2.0.0:
- resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==}
-
- selfsigned@2.4.1:
- resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==}
- engines: {node: '>=10'}
-
- semver-diff@4.0.0:
- resolution: {integrity: sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==}
- engines: {node: '>=12'}
-
- semver@6.3.1:
- resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
- hasBin: true
-
- semver@7.6.3:
- resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==}
- engines: {node: '>=10'}
- hasBin: true
-
- send@0.19.0:
- resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==}
- engines: {node: '>= 0.8.0'}
-
- serialize-javascript@6.0.2:
- resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==}
-
- seroval-plugins@1.1.1:
- resolution: {integrity: sha512-qNSy1+nUj7hsCOon7AO4wdAIo9P0jrzAMp18XhiOzA6/uO5TKtP7ScozVJ8T293oRIvi5wyCHSM4TrJo/c/GJA==}
- engines: {node: '>=10'}
- peerDependencies:
- seroval: ^1.0
-
- seroval@1.1.1:
- resolution: {integrity: sha512-rqEO6FZk8mv7Hyv4UCj3FD3b6Waqft605TLfsCe/BiaylRpyyMC0b+uA5TJKawX3KzMrdi3wsLbCaLplrQmBvQ==}
- engines: {node: '>=10'}
-
- serve-handler@6.1.7:
- resolution: {integrity: sha512-CinAq1xWb0vR3twAv9evEU8cNWkXCb9kd5ePAHUKJBkOsUpR1wt/CvGdeca7vqumL1U5cSaeVQ6zZMxiJ3yWsg==}
-
- serve-index@1.9.1:
- resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==}
- engines: {node: '>= 0.8.0'}
-
- serve-static@1.16.2:
- resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==}
- engines: {node: '>= 0.8.0'}
-
- set-function-length@1.2.2:
- resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
- engines: {node: '>= 0.4'}
-
- set-function-name@2.0.2:
- resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==}
- engines: {node: '>= 0.4'}
-
- setprototypeof@1.1.0:
- resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==}
-
- setprototypeof@1.2.0:
- resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
-
- shallow-clone@3.0.1:
- resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==}
- engines: {node: '>=8'}
-
- shallowequal@1.1.0:
- resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==}
-
- shebang-command@2.0.0:
- resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
- engines: {node: '>=8'}
-
- shebang-regex@3.0.0:
- resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
- engines: {node: '>=8'}
-
- shell-quote@1.8.1:
- resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==}
-
- shiki@4.4.3:
- resolution: {integrity: sha512-Mb/GvXPHBAXdgGIcnfU5L3ldpn1XcxrGkPHwqgRx17/I2XRfqlFKk2vGkHWINn1kdXvzJZeuO3is6I9KLPFm0g==}
- engines: {node: '>=20'}
-
- side-channel-list@1.0.0:
- resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==}
- engines: {node: '>= 0.4'}
-
- side-channel-map@1.0.1:
- resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==}
- engines: {node: '>= 0.4'}
-
- side-channel-weakmap@1.0.2:
- resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==}
- engines: {node: '>= 0.4'}
-
- side-channel@1.0.6:
- resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==}
- engines: {node: '>= 0.4'}
-
- side-channel@1.1.0:
- resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==}
- engines: {node: '>= 0.4'}
-
- signal-exit@3.0.7:
- resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
-
- sirv@2.0.4:
- resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==}
- engines: {node: '>= 10'}
-
- sisteransi@1.0.5:
- resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
-
- sitemap@7.1.2:
- resolution: {integrity: sha512-ARCqzHJ0p4gWt+j7NlU5eDlIO9+Rkr/JhPFZKKQ1l5GCus7rJH4UdrlVAh0xC/gDS/Qir2UMxqYNHtsKr2rpCw==}
- engines: {node: '>=12.0.0', npm: '>=5.6.0'}
- hasBin: true
-
- skin-tone@2.0.0:
- resolution: {integrity: sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==}
- engines: {node: '>=8'}
-
- slash@3.0.0:
- resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
- engines: {node: '>=8'}
-
- slash@4.0.0:
- resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==}
- engines: {node: '>=12'}
-
- snake-case@3.0.4:
- resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==}
-
- sockjs@0.3.24:
- resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==}
-
- solid-js@1.9.5:
- resolution: {integrity: sha512-ogI3DaFcyn6UhYhrgcyRAMbu/buBJitYQASZz5WzfQVPP10RD2AbCoRZ517psnezrasyCbWzIxZ6kVqet768xw==}
-
- sort-css-media-queries@2.2.0:
- resolution: {integrity: sha512-0xtkGhWCC9MGt/EzgnvbbbKhqWjl1+/rncmhTh5qCpbYguXh6S/qwePfv/JQ8jePXXmqingylxoC49pCkSPIbA==}
- engines: {node: '>= 6.3.0'}
-
- source-map-js@1.2.1:
- resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
- engines: {node: '>=0.10.0'}
-
- source-map-support@0.5.21:
- resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
-
- source-map@0.6.1:
- resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
- engines: {node: '>=0.10.0'}
-
- source-map@0.7.4:
- resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==}
- engines: {node: '>= 8'}
-
- space-separated-tokens@2.0.2:
- resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
-
- spdy-transport@3.0.0:
- resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==}
-
- spdy@4.0.2:
- resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==}
- engines: {node: '>=6.0.0'}
-
- sprintf-js@1.0.3:
- resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
-
- srcset@4.0.0:
- resolution: {integrity: sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw==}
- engines: {node: '>=12'}
-
- stable@0.1.8:
- resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==}
- deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility'
-
- statuses@1.5.0:
- resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==}
- engines: {node: '>= 0.6'}
-
- statuses@2.0.1:
- resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
- engines: {node: '>= 0.8'}
-
- std-env@3.7.0:
- resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==}
-
- string-width@4.2.3:
- resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
- engines: {node: '>=8'}
-
- string-width@5.1.2:
- resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
- engines: {node: '>=12'}
-
- string.prototype.trim@1.2.9:
- resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==}
- engines: {node: '>= 0.4'}
-
- string.prototype.trimend@1.0.8:
- resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==}
-
- string.prototype.trimstart@1.0.8:
- resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==}
- engines: {node: '>= 0.4'}
-
- string_decoder@1.1.1:
- resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
-
- string_decoder@1.3.0:
- resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
-
- stringify-entities@4.0.4:
- resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==}
-
- stringify-object@3.3.0:
- resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==}
- engines: {node: '>=4'}
-
- strip-ansi@6.0.1:
- resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
- engines: {node: '>=8'}
-
- strip-ansi@7.1.0:
- resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
- engines: {node: '>=12'}
-
- strip-bom-string@1.0.0:
- resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==}
- engines: {node: '>=0.10.0'}
-
- strip-final-newline@2.0.0:
- resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
- engines: {node: '>=6'}
-
- strip-json-comments@2.0.1:
- resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==}
- engines: {node: '>=0.10.0'}
-
- strip-json-comments@3.1.1:
- resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
- engines: {node: '>=8'}
-
- strip-json-comments@4.0.0:
- resolution: {integrity: sha512-LzWcbfMbAsEDTRmhjWIioe8GcDRl0fa35YMXFoJKDdiD/quGFmjJjdgPjFJJNwCMaLyQqFIDqCdHD2V4HfLgYA==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
- style-to-object@0.4.4:
- resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==}
-
- style-to-object@1.0.8:
- resolution: {integrity: sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==}
-
- stylehacks@6.1.1:
- resolution: {integrity: sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg==}
- engines: {node: ^14 || ^16 || >=18.0}
- peerDependencies:
- postcss: ^8.4.31
-
- stylis@4.3.6:
- resolution: {integrity: sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==}
-
- supports-color@5.5.0:
- resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
- engines: {node: '>=4'}
-
- supports-color@7.2.0:
- resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
- engines: {node: '>=8'}
-
- supports-color@8.1.1:
- resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
- engines: {node: '>=10'}
-
- supports-preserve-symlinks-flag@1.0.0:
- resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
- engines: {node: '>= 0.4'}
-
- svg-parser@2.0.4:
- resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==}
-
- svgo@1.3.2:
- resolution: {integrity: sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==}
- engines: {node: '>=4.0.0'}
- deprecated: This SVGO version is no longer supported. Upgrade to v2.x.x.
- hasBin: true
-
- svgo@3.3.2:
- resolution: {integrity: sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==}
- engines: {node: '>=14.0.0'}
- hasBin: true
-
- swc-loader@0.2.6:
- resolution: {integrity: sha512-9Zi9UP2YmDpgmQVbyOPJClY0dwf58JDyDMQ7uRc4krmc72twNI2fvlBWHLqVekBpPc7h5NJkGVT1zNDxFrqhvg==}
- peerDependencies:
- '@swc/core': ^1.2.147
- webpack: '>=2'
-
- sync-child-process@1.0.2:
- resolution: {integrity: sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA==}
- engines: {node: '>=16.0.0'}
-
- sync-message-port@1.1.3:
- resolution: {integrity: sha512-GTt8rSKje5FilG+wEdfCkOcLL7LWqpMlr2c3LRuKt/YXxcJ52aGSbGBAdI4L3aaqfrBt6y711El53ItyH1NWzg==}
- engines: {node: '>=16.0.0'}
-
- tapable@2.2.1:
- resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==}
- engines: {node: '>=6'}
-
- terser-webpack-plugin@5.3.10:
- resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==}
- engines: {node: '>= 10.13.0'}
- peerDependencies:
- '@swc/core': '*'
- esbuild: '*'
- uglify-js: '*'
- webpack: ^5.1.0
- peerDependenciesMeta:
- '@swc/core':
- optional: true
- esbuild:
- optional: true
- uglify-js:
- optional: true
-
- terser@5.36.0:
- resolution: {integrity: sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==}
- engines: {node: '>=10'}
- hasBin: true
-
- thingies@2.5.0:
- resolution: {integrity: sha512-s+2Bwztg6PhWUD7XMfeYm5qliDdSiZm7M7n8KjTkIsm3l/2lgVRc2/Gx/v+ZX8lT4FMA+i8aQvhcWylldc+ZNw==}
- engines: {node: '>=10.18'}
- peerDependencies:
- tslib: ^2
-
- thunky@1.1.0:
- resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==}
-
- tiny-invariant@1.3.3:
- resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==}
-
- tiny-warning@1.0.3:
- resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==}
-
- tinyexec@0.3.1:
- resolution: {integrity: sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==}
-
- tinypool@1.0.2:
- resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==}
- engines: {node: ^18.0.0 || >=20.0.0}
-
- to-regex-range@5.0.1:
- resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
- engines: {node: '>=8.0'}
-
- toidentifier@1.0.1:
- resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
- engines: {node: '>=0.6'}
-
- totalist@3.0.1:
- resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==}
- engines: {node: '>=6'}
-
- tree-dump@1.1.0:
- resolution: {integrity: sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA==}
- engines: {node: '>=10.0'}
- peerDependencies:
- tslib: '2'
-
- trim-lines@3.0.1:
- resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
-
- trough@2.2.0:
- resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==}
-
- ts-dedent@2.2.0:
- resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==}
- engines: {node: '>=6.10'}
-
- tslib@2.8.0:
- resolution: {integrity: sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==}
-
- type-fest@1.4.0:
- resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==}
- engines: {node: '>=10'}
-
- type-fest@2.19.0:
- resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==}
- engines: {node: '>=12.20'}
-
- type-is@1.6.18:
- resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==}
- engines: {node: '>= 0.6'}
-
- typed-array-buffer@1.0.2:
- resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==}
- engines: {node: '>= 0.4'}
-
- typed-array-byte-length@1.0.1:
- resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==}
- engines: {node: '>= 0.4'}
-
- typed-array-byte-offset@1.0.2:
- resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==}
- engines: {node: '>= 0.4'}
-
- typed-array-length@1.0.6:
- resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==}
- engines: {node: '>= 0.4'}
-
- typedarray-to-buffer@3.1.5:
- resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==}
-
- typescript@5.6.3:
- resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==}
- engines: {node: '>=14.17'}
- hasBin: true
-
- uc.micro@1.0.6:
- resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==}
-
- ufo@1.5.4:
- resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==}
-
- unbox-primitive@1.0.2:
- resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==}
-
- undici-types@6.19.8:
- resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==}
-
- unicode-canonical-property-names-ecmascript@2.0.0:
- resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==}
- engines: {node: '>=4'}
-
- unicode-emoji-modifier-base@1.0.0:
- resolution: {integrity: sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==}
- engines: {node: '>=4'}
-
- unicode-match-property-ecmascript@2.0.0:
- resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==}
- engines: {node: '>=4'}
-
- unicode-match-property-value-ecmascript@2.2.0:
- resolution: {integrity: sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==}
- engines: {node: '>=4'}
-
- unicode-property-aliases-ecmascript@2.1.0:
- resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==}
- engines: {node: '>=4'}
-
- unified@11.0.5:
- resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==}
-
- unique-string@3.0.0:
- resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==}
- engines: {node: '>=12'}
-
- unist-util-is@6.0.0:
- resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==}
-
- unist-util-position-from-estree@2.0.0:
- resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==}
-
- unist-util-position@5.0.0:
- resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==}
-
- unist-util-stringify-position@4.0.0:
- resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==}
-
- unist-util-visit-parents@6.0.1:
- resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==}
-
- unist-util-visit@5.1.0:
- resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==}
-
- universalify@2.0.1:
- resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
- engines: {node: '>= 10.0.0'}
-
- unpipe@1.0.0:
- resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
- engines: {node: '>= 0.8'}
-
- unquote@1.1.1:
- resolution: {integrity: sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==}
-
- update-browserslist-db@1.1.1:
- resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==}
- hasBin: true
- peerDependencies:
- browserslist: '>= 4.21.0'
-
- update-browserslist-db@1.2.3:
- resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==}
- hasBin: true
- peerDependencies:
- browserslist: '>= 4.21.0'
-
- update-notifier@6.0.2:
- resolution: {integrity: sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og==}
- engines: {node: '>=14.16'}
-
- uri-js@4.4.1:
- resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
-
- url-loader@4.1.1:
- resolution: {integrity: sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==}
- engines: {node: '>= 10.13.0'}
- peerDependencies:
- file-loader: '*'
- webpack: ^4.0.0 || ^5.0.0
- peerDependenciesMeta:
- file-loader:
- optional: true
-
- util-deprecate@1.0.2:
- resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
-
- util.promisify@1.0.1:
- resolution: {integrity: sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==}
-
- utila@0.4.0:
- resolution: {integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==}
-
- utility-types@3.11.0:
- resolution: {integrity: sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==}
- engines: {node: '>= 4'}
-
- utils-merge@1.0.1:
- resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==}
- engines: {node: '>= 0.4.0'}
-
- uuid@11.1.0:
- resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==}
- hasBin: true
-
- uuid@8.3.2:
- resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
- deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).
- hasBin: true
-
- validate-peer-dependencies@2.2.0:
- resolution: {integrity: sha512-8X1OWlERjiUY6P6tdeU9E0EwO8RA3bahoOVG7ulOZT5MqgNDUO/BQoVjYiHPcNe+v8glsboZRIw9iToMAA2zAA==}
- engines: {node: '>= 12'}
-
- value-equal@1.0.1:
- resolution: {integrity: sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==}
-
- varint@6.0.0:
- resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==}
-
- vary@1.1.2:
- resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
- engines: {node: '>= 0.8'}
-
- vfile-location@5.0.3:
- resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==}
-
- vfile-message@4.0.2:
- resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==}
-
- vfile@6.0.3:
- resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==}
-
- vscode-jsonrpc@8.2.0:
- resolution: {integrity: sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==}
- engines: {node: '>=14.0.0'}
-
- vscode-languageserver-protocol@3.17.5:
- resolution: {integrity: sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==}
-
- vscode-languageserver-textdocument@1.0.12:
- resolution: {integrity: sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==}
-
- vscode-languageserver-types@3.17.5:
- resolution: {integrity: sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==}
-
- vscode-languageserver@9.0.1:
- resolution: {integrity: sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==}
- hasBin: true
-
- vscode-uri@3.0.8:
- resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==}
-
- watchpack@2.4.2:
- resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==}
- engines: {node: '>=10.13.0'}
-
- wbuf@1.7.3:
- resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==}
-
- web-namespaces@2.0.1:
- resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==}
-
- webpack-bundle-analyzer@4.10.2:
- resolution: {integrity: sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==}
- engines: {node: '>= 10.13.0'}
- hasBin: true
-
- webpack-dev-middleware@7.4.5:
- resolution: {integrity: sha512-uxQ6YqGdE4hgDKNf7hUiPXOdtkXvBJXrfEGYSx7P7LC8hnUYGK70X6xQXUvXeNyBDDcsiQXpG2m3G9vxowaEuA==}
- engines: {node: '>= 18.12.0'}
- peerDependencies:
- webpack: ^5.0.0
- peerDependenciesMeta:
- webpack:
- optional: true
-
- webpack-dev-server@5.2.2:
- resolution: {integrity: sha512-QcQ72gh8a+7JO63TAx/6XZf/CWhgMzu5m0QirvPfGvptOusAxG12w2+aua1Jkjr7hzaWDnJ2n6JFeexMHI+Zjg==}
- engines: {node: '>= 18.12.0'}
- hasBin: true
- peerDependencies:
- webpack: ^5.0.0
- webpack-cli: '*'
- peerDependenciesMeta:
- webpack:
- optional: true
- webpack-cli:
- optional: true
-
- webpack-merge@5.10.0:
- resolution: {integrity: sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==}
- engines: {node: '>=10.0.0'}
-
- webpack-merge@6.0.1:
- resolution: {integrity: sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==}
- engines: {node: '>=18.0.0'}
-
- webpack-sources@3.2.3:
- resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==}
- engines: {node: '>=10.13.0'}
-
- webpack@5.95.0:
- resolution: {integrity: sha512-2t3XstrKULz41MNMBF+cJ97TyHdyQ8HCt//pqErqDvNjU9YQBnZxIHa11VXsi7F3mb5/aO2tuDxdeTPdU7xu9Q==}
- engines: {node: '>=10.13.0'}
- hasBin: true
- peerDependencies:
- webpack-cli: '*'
- peerDependenciesMeta:
- webpack-cli:
- optional: true
-
- webpackbar@7.0.0:
- resolution: {integrity: sha512-aS9soqSO2iCHgqHoCrj4LbfGQUboDCYJPSFOAchEK+9psIjNrfSWW4Y0YEz67MKURNvMmfo0ycOg9d/+OOf9/Q==}
- engines: {node: '>=14.21.3'}
- peerDependencies:
- '@rspack/core': '*'
- webpack: 3 || 4 || 5
- peerDependenciesMeta:
- '@rspack/core':
- optional: true
- webpack:
- optional: true
-
- websocket-driver@0.7.4:
- resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==}
- engines: {node: '>=0.8.0'}
-
- websocket-extensions@0.1.4:
- resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==}
- engines: {node: '>=0.8.0'}
-
- which-boxed-primitive@1.0.2:
- resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==}
-
- which-typed-array@1.1.15:
- resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==}
- engines: {node: '>= 0.4'}
-
- which@2.0.2:
- resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
- engines: {node: '>= 8'}
- hasBin: true
-
- widest-line@4.0.1:
- resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==}
- engines: {node: '>=12'}
-
- wildcard@2.0.1:
- resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==}
-
- wrap-ansi@8.1.0:
- resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
- engines: {node: '>=12'}
-
- write-file-atomic@3.0.3:
- resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==}
-
- ws@7.5.10:
- resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
- engines: {node: '>=8.3.0'}
- peerDependencies:
- bufferutil: ^4.0.1
- utf-8-validate: ^5.0.2
- peerDependenciesMeta:
- bufferutil:
- optional: true
- utf-8-validate:
- optional: true
-
- ws@8.18.0:
- resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==}
- engines: {node: '>=10.0.0'}
- peerDependencies:
- bufferutil: ^4.0.1
- utf-8-validate: '>=5.0.2'
- peerDependenciesMeta:
- bufferutil:
- optional: true
- utf-8-validate:
- optional: true
-
- wsl-utils@0.1.0:
- resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==}
- engines: {node: '>=18'}
-
- xdg-basedir@5.1.0:
- resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==}
- engines: {node: '>=12'}
-
- xml-js@1.6.11:
- resolution: {integrity: sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==}
- hasBin: true
-
- yallist@3.1.1:
- resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
-
- yaml@1.10.2:
- resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
- engines: {node: '>= 6'}
-
- yocto-queue@1.1.1:
- resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==}
- engines: {node: '>=12.20'}
-
- zwitch@2.0.4:
- resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
-
-snapshots:
-
- '@11ty/gray-matter@1.0.0':
- dependencies:
- js-yaml: 4.1.0
- kind-of: 6.0.3
- section-matter: 1.0.0
- strip-bom-string: 1.0.0
-
- '@algolia/abtesting@1.12.2':
- dependencies:
- '@algolia/client-common': 5.46.2
- '@algolia/requester-browser-xhr': 5.46.2
- '@algolia/requester-fetch': 5.46.2
- '@algolia/requester-node-http': 5.46.2
-
- '@algolia/autocomplete-core@1.17.9(@algolia/client-search@5.46.2)(algoliasearch@5.46.2)(search-insights@2.17.1)':
- dependencies:
- '@algolia/autocomplete-plugin-algolia-insights': 1.17.9(@algolia/client-search@5.46.2)(algoliasearch@5.46.2)(search-insights@2.17.1)
- '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.46.2)(algoliasearch@5.46.2)
- transitivePeerDependencies:
- - '@algolia/client-search'
- - algoliasearch
- - search-insights
-
- '@algolia/autocomplete-core@1.19.8(@algolia/client-search@5.46.2)(algoliasearch@5.46.2)(search-insights@2.17.1)':
- dependencies:
- '@algolia/autocomplete-plugin-algolia-insights': 1.19.8(@algolia/client-search@5.46.2)(algoliasearch@5.46.2)(search-insights@2.17.1)
- '@algolia/autocomplete-shared': 1.19.8(@algolia/client-search@5.46.2)(algoliasearch@5.46.2)
- transitivePeerDependencies:
- - '@algolia/client-search'
- - algoliasearch
- - search-insights
-
- '@algolia/autocomplete-plugin-algolia-insights@1.17.9(@algolia/client-search@5.46.2)(algoliasearch@5.46.2)(search-insights@2.17.1)':
- dependencies:
- '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.46.2)(algoliasearch@5.46.2)
- search-insights: 2.17.1
- transitivePeerDependencies:
- - '@algolia/client-search'
- - algoliasearch
-
- '@algolia/autocomplete-plugin-algolia-insights@1.19.8(@algolia/client-search@5.46.2)(algoliasearch@5.46.2)(search-insights@2.17.1)':
- dependencies:
- '@algolia/autocomplete-shared': 1.19.8(@algolia/client-search@5.46.2)(algoliasearch@5.46.2)
- search-insights: 2.17.1
- transitivePeerDependencies:
- - '@algolia/client-search'
- - algoliasearch
-
- '@algolia/autocomplete-preset-algolia@1.17.9(@algolia/client-search@5.46.2)(algoliasearch@5.46.2)':
- dependencies:
- '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.46.2)(algoliasearch@5.46.2)
- '@algolia/client-search': 5.46.2
- algoliasearch: 5.46.2
-
- '@algolia/autocomplete-shared@1.17.9(@algolia/client-search@5.46.2)(algoliasearch@5.46.2)':
- dependencies:
- '@algolia/client-search': 5.46.2
- algoliasearch: 5.46.2
-
- '@algolia/autocomplete-shared@1.19.8(@algolia/client-search@5.46.2)(algoliasearch@5.46.2)':
- dependencies:
- '@algolia/client-search': 5.46.2
- algoliasearch: 5.46.2
-
- '@algolia/client-abtesting@5.46.2':
- dependencies:
- '@algolia/client-common': 5.46.2
- '@algolia/requester-browser-xhr': 5.46.2
- '@algolia/requester-fetch': 5.46.2
- '@algolia/requester-node-http': 5.46.2
-
- '@algolia/client-analytics@5.46.2':
- dependencies:
- '@algolia/client-common': 5.46.2
- '@algolia/requester-browser-xhr': 5.46.2
- '@algolia/requester-fetch': 5.46.2
- '@algolia/requester-node-http': 5.46.2
-
- '@algolia/client-common@5.46.2': {}
-
- '@algolia/client-insights@5.46.2':
- dependencies:
- '@algolia/client-common': 5.46.2
- '@algolia/requester-browser-xhr': 5.46.2
- '@algolia/requester-fetch': 5.46.2
- '@algolia/requester-node-http': 5.46.2
-
- '@algolia/client-personalization@5.46.2':
- dependencies:
- '@algolia/client-common': 5.46.2
- '@algolia/requester-browser-xhr': 5.46.2
- '@algolia/requester-fetch': 5.46.2
- '@algolia/requester-node-http': 5.46.2
-
- '@algolia/client-query-suggestions@5.46.2':
- dependencies:
- '@algolia/client-common': 5.46.2
- '@algolia/requester-browser-xhr': 5.46.2
- '@algolia/requester-fetch': 5.46.2
- '@algolia/requester-node-http': 5.46.2
-
- '@algolia/client-search@5.46.2':
- dependencies:
- '@algolia/client-common': 5.46.2
- '@algolia/requester-browser-xhr': 5.46.2
- '@algolia/requester-fetch': 5.46.2
- '@algolia/requester-node-http': 5.46.2
-
- '@algolia/events@4.0.1': {}
-
- '@algolia/ingestion@1.46.2':
- dependencies:
- '@algolia/client-common': 5.46.2
- '@algolia/requester-browser-xhr': 5.46.2
- '@algolia/requester-fetch': 5.46.2
- '@algolia/requester-node-http': 5.46.2
-
- '@algolia/monitoring@1.46.2':
- dependencies:
- '@algolia/client-common': 5.46.2
- '@algolia/requester-browser-xhr': 5.46.2
- '@algolia/requester-fetch': 5.46.2
- '@algolia/requester-node-http': 5.46.2
-
- '@algolia/recommend@5.46.2':
- dependencies:
- '@algolia/client-common': 5.46.2
- '@algolia/requester-browser-xhr': 5.46.2
- '@algolia/requester-fetch': 5.46.2
- '@algolia/requester-node-http': 5.46.2
-
- '@algolia/requester-browser-xhr@5.46.2':
- dependencies:
- '@algolia/client-common': 5.46.2
-
- '@algolia/requester-fetch@5.46.2':
- dependencies:
- '@algolia/client-common': 5.46.2
-
- '@algolia/requester-node-http@5.46.2':
- dependencies:
- '@algolia/client-common': 5.46.2
-
- '@ampproject/remapping@2.3.0':
- dependencies:
- '@jridgewell/gen-mapping': 0.3.5
- '@jridgewell/trace-mapping': 0.3.25
-
- '@antfu/install-pkg@0.4.1':
- dependencies:
- package-manager-detector: 0.2.2
- tinyexec: 0.3.1
-
- '@antfu/utils@0.7.10': {}
-
- '@babel/code-frame@7.26.0':
- dependencies:
- '@babel/helper-validator-identifier': 7.25.9
- js-tokens: 4.0.0
- picocolors: 1.1.1
-
- '@babel/compat-data@7.26.0': {}
-
- '@babel/core@7.26.0':
- dependencies:
- '@ampproject/remapping': 2.3.0
- '@babel/code-frame': 7.26.0
- '@babel/generator': 7.26.0
- '@babel/helper-compilation-targets': 7.25.9
- '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0)
- '@babel/helpers': 7.26.0
- '@babel/parser': 7.26.1
- '@babel/template': 7.25.9
- '@babel/traverse': 7.25.9
- '@babel/types': 7.26.0
- convert-source-map: 2.0.0
- debug: 4.3.7
- gensync: 1.0.0-beta.2
- json5: 2.2.3
- semver: 6.3.1
- transitivePeerDependencies:
- - supports-color
-
- '@babel/generator@7.26.0':
- dependencies:
- '@babel/parser': 7.26.1
- '@babel/types': 7.26.0
- '@jridgewell/gen-mapping': 0.3.5
- '@jridgewell/trace-mapping': 0.3.25
- jsesc: 3.0.2
-
- '@babel/helper-annotate-as-pure@7.25.9':
- dependencies:
- '@babel/types': 7.26.0
-
- '@babel/helper-builder-binary-assignment-operator-visitor@7.25.9':
- dependencies:
- '@babel/traverse': 7.25.9
- '@babel/types': 7.26.0
- transitivePeerDependencies:
- - supports-color
-
- '@babel/helper-compilation-targets@7.25.9':
- dependencies:
- '@babel/compat-data': 7.26.0
- '@babel/helper-validator-option': 7.25.9
- browserslist: 4.24.2
- lru-cache: 5.1.1
- semver: 6.3.1
-
- '@babel/helper-create-class-features-plugin@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-annotate-as-pure': 7.25.9
- '@babel/helper-member-expression-to-functions': 7.25.9
- '@babel/helper-optimise-call-expression': 7.25.9
- '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.0)
- '@babel/helper-skip-transparent-expression-wrappers': 7.25.9
- '@babel/traverse': 7.25.9
- semver: 6.3.1
- transitivePeerDependencies:
- - supports-color
-
- '@babel/helper-create-regexp-features-plugin@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-annotate-as-pure': 7.25.9
- regexpu-core: 6.1.1
- semver: 6.3.1
-
- '@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-compilation-targets': 7.25.9
- '@babel/helper-plugin-utils': 7.25.9
- debug: 4.3.7
- lodash.debounce: 4.0.8
- resolve: 1.22.8
- transitivePeerDependencies:
- - supports-color
-
- '@babel/helper-member-expression-to-functions@7.25.9':
- dependencies:
- '@babel/traverse': 7.25.9
- '@babel/types': 7.26.0
- transitivePeerDependencies:
- - supports-color
-
- '@babel/helper-module-imports@7.25.9':
- dependencies:
- '@babel/traverse': 7.25.9
- '@babel/types': 7.26.0
- transitivePeerDependencies:
- - supports-color
-
- '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-module-imports': 7.25.9
- '@babel/helper-validator-identifier': 7.25.9
- '@babel/traverse': 7.25.9
- transitivePeerDependencies:
- - supports-color
-
- '@babel/helper-optimise-call-expression@7.25.9':
- dependencies:
- '@babel/types': 7.26.0
-
- '@babel/helper-plugin-utils@7.25.9': {}
-
- '@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-annotate-as-pure': 7.25.9
- '@babel/helper-wrap-function': 7.25.9
- '@babel/traverse': 7.25.9
- transitivePeerDependencies:
- - supports-color
-
- '@babel/helper-replace-supers@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-member-expression-to-functions': 7.25.9
- '@babel/helper-optimise-call-expression': 7.25.9
- '@babel/traverse': 7.25.9
- transitivePeerDependencies:
- - supports-color
-
- '@babel/helper-simple-access@7.25.9':
- dependencies:
- '@babel/traverse': 7.25.9
- '@babel/types': 7.26.0
- transitivePeerDependencies:
- - supports-color
-
- '@babel/helper-skip-transparent-expression-wrappers@7.25.9':
- dependencies:
- '@babel/traverse': 7.25.9
- '@babel/types': 7.26.0
- transitivePeerDependencies:
- - supports-color
-
- '@babel/helper-string-parser@7.25.9': {}
-
- '@babel/helper-validator-identifier@7.25.9': {}
-
- '@babel/helper-validator-option@7.25.9': {}
-
- '@babel/helper-wrap-function@7.25.9':
- dependencies:
- '@babel/template': 7.25.9
- '@babel/traverse': 7.25.9
- '@babel/types': 7.26.0
- transitivePeerDependencies:
- - supports-color
-
- '@babel/helpers@7.26.0':
- dependencies:
- '@babel/template': 7.25.9
- '@babel/types': 7.26.0
-
- '@babel/parser@7.26.1':
- dependencies:
- '@babel/types': 7.26.0
-
- '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
- '@babel/traverse': 7.25.9
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
- '@babel/helper-skip-transparent-expression-wrappers': 7.25.9
- '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.0)
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
- '@babel/traverse': 7.25.9
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
-
- '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-syntax-import-assertions@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-syntax-import-attributes@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0)
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-transform-async-generator-functions@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
- '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.0)
- '@babel/traverse': 7.25.9
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-module-imports': 7.25.9
- '@babel/helper-plugin-utils': 7.25.9
- '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.0)
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-block-scoped-functions@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-transform-block-scoping@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0)
- '@babel/helper-plugin-utils': 7.25.9
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-class-static-block@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0)
- '@babel/helper-plugin-utils': 7.25.9
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-classes@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-annotate-as-pure': 7.25.9
- '@babel/helper-compilation-targets': 7.25.9
- '@babel/helper-plugin-utils': 7.25.9
- '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.0)
- '@babel/traverse': 7.25.9
- globals: 11.12.0
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
- '@babel/template': 7.25.9
-
- '@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0)
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0)
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-transform-exponentiation-operator@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-builder-binary-assignment-operator-visitor': 7.25.9
- '@babel/helper-plugin-utils': 7.25.9
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-transform-for-of@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
- '@babel/helper-skip-transparent-expression-wrappers': 7.25.9
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-function-name@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-compilation-targets': 7.25.9
- '@babel/helper-plugin-utils': 7.25.9
- '@babel/traverse': 7.25.9
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-transform-literals@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0)
- '@babel/helper-plugin-utils': 7.25.9
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-modules-commonjs@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0)
- '@babel/helper-plugin-utils': 7.25.9
- '@babel/helper-simple-access': 7.25.9
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-modules-systemjs@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0)
- '@babel/helper-plugin-utils': 7.25.9
- '@babel/helper-validator-identifier': 7.25.9
- '@babel/traverse': 7.25.9
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-modules-umd@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0)
- '@babel/helper-plugin-utils': 7.25.9
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0)
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-transform-new-target@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-transform-nullish-coalescing-operator@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-compilation-targets': 7.25.9
- '@babel/helper-plugin-utils': 7.25.9
- '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.0)
-
- '@babel/plugin-transform-object-super@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
- '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.0)
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-optional-catch-binding@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
- '@babel/helper-skip-transparent-expression-wrappers': 7.25.9
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-parameters@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0)
- '@babel/helper-plugin-utils': 7.25.9
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-private-property-in-object@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-annotate-as-pure': 7.25.9
- '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0)
- '@babel/helper-plugin-utils': 7.25.9
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-transform-react-constant-elements@7.25.7(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-transform-react-display-name@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-transform-react-jsx-development@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.0)
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-annotate-as-pure': 7.25.9
- '@babel/helper-module-imports': 7.25.9
- '@babel/helper-plugin-utils': 7.25.9
- '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0)
- '@babel/types': 7.26.0
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-react-pure-annotations@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-annotate-as-pure': 7.25.9
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-transform-regenerator@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
- regenerator-transform: 0.15.2
-
- '@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-transform-runtime@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-module-imports': 7.25.9
- '@babel/helper-plugin-utils': 7.25.9
- babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.26.0)
- babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.26.0)
- babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.26.0)
- semver: 6.3.1
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-transform-spread@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
- '@babel/helper-skip-transparent-expression-wrappers': 7.25.9
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-transform-template-literals@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-transform-typeof-symbol@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-transform-typescript@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-annotate-as-pure': 7.25.9
- '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0)
- '@babel/helper-plugin-utils': 7.25.9
- '@babel/helper-skip-transparent-expression-wrappers': 7.25.9
- '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.0)
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0)
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0)
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0)
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/preset-env@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/compat-data': 7.26.0
- '@babel/core': 7.26.0
- '@babel/helper-compilation-targets': 7.25.9
- '@babel/helper-plugin-utils': 7.25.9
- '@babel/helper-validator-option': 7.25.9
- '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.0)
- '@babel/plugin-syntax-import-assertions': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-syntax-import-attributes': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.26.0)
- '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-async-generator-functions': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-block-scoped-functions': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-block-scoping': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-class-static-block': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-destructuring': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-dotall-regex': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-duplicate-keys': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-dynamic-import': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-exponentiation-operator': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-for-of': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-json-strings': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-logical-assignment-operators': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-member-expression-literals': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-modules-amd': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-modules-commonjs': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-modules-systemjs': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-modules-umd': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-new-target': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-nullish-coalescing-operator': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-object-super': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-optional-catch-binding': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-property-literals': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-regenerator': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-reserved-words': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-template-literals': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-typeof-symbol': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-unicode-escapes': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-unicode-property-regex': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-unicode-sets-regex': 7.25.9(@babel/core@7.26.0)
- '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.26.0)
- babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.26.0)
- babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.26.0)
- babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.26.0)
- core-js-compat: 3.38.1
- semver: 6.3.1
- transitivePeerDependencies:
- - supports-color
-
- '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
- '@babel/types': 7.26.0
- esutils: 2.0.3
-
- '@babel/preset-react@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
- '@babel/helper-validator-option': 7.25.9
- '@babel/plugin-transform-react-display-name': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-react-jsx-development': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-react-pure-annotations': 7.25.9(@babel/core@7.26.0)
- transitivePeerDependencies:
- - supports-color
-
- '@babel/preset-typescript@7.26.0(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
- '@babel/helper-validator-option': 7.25.9
- '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-modules-commonjs': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-typescript': 7.25.9(@babel/core@7.26.0)
- transitivePeerDependencies:
- - supports-color
-
- '@babel/runtime@7.26.0':
- dependencies:
- regenerator-runtime: 0.14.1
-
- '@babel/template@7.25.9':
- dependencies:
- '@babel/code-frame': 7.26.0
- '@babel/parser': 7.26.1
- '@babel/types': 7.26.0
-
- '@babel/traverse@7.25.9':
- dependencies:
- '@babel/code-frame': 7.26.0
- '@babel/generator': 7.26.0
- '@babel/parser': 7.26.1
- '@babel/template': 7.25.9
- '@babel/types': 7.26.0
- debug: 4.3.7
- globals: 11.12.0
- transitivePeerDependencies:
- - supports-color
-
- '@babel/types@7.26.0':
- dependencies:
- '@babel/helper-string-parser': 7.25.9
- '@babel/helper-validator-identifier': 7.25.9
-
- '@braintree/sanitize-url@7.1.0': {}
-
- '@bufbuild/protobuf@2.10.2': {}
-
- '@chevrotain/cst-dts-gen@11.0.3':
- dependencies:
- '@chevrotain/gast': 11.0.3
- '@chevrotain/types': 11.0.3
- lodash-es: 4.17.21
-
- '@chevrotain/gast@11.0.3':
- dependencies:
- '@chevrotain/types': 11.0.3
- lodash-es: 4.17.21
-
- '@chevrotain/regexp-to-ast@11.0.3': {}
-
- '@chevrotain/types@11.0.3': {}
-
- '@chevrotain/utils@11.0.3': {}
-
- '@colors/colors@1.5.0':
- optional: true
-
- '@csstools/cascade-layer-name-parser@2.0.5(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)':
- dependencies:
- '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-tokenizer': 3.0.4
-
- '@csstools/color-helpers@5.1.0': {}
-
- '@csstools/css-calc@2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)':
- dependencies:
- '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-tokenizer': 3.0.4
-
- '@csstools/css-color-parser@3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)':
- dependencies:
- '@csstools/color-helpers': 5.1.0
- '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-tokenizer': 3.0.4
-
- '@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4)':
- dependencies:
- '@csstools/css-tokenizer': 3.0.4
-
- '@csstools/css-tokenizer@3.0.4': {}
-
- '@csstools/media-query-list-parser@4.0.3(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)':
- dependencies:
- '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-tokenizer': 3.0.4
-
- '@csstools/postcss-alpha-function@1.0.1(postcss@8.5.6)':
- dependencies:
- '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-tokenizer': 3.0.4
- '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.6)
- '@csstools/utilities': 2.0.0(postcss@8.5.6)
- postcss: 8.5.6
-
- '@csstools/postcss-cascade-layers@5.0.2(postcss@8.5.6)':
- dependencies:
- '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.0.0)
- postcss: 8.5.6
- postcss-selector-parser: 7.0.0
-
- '@csstools/postcss-color-function-display-p3-linear@1.0.1(postcss@8.5.6)':
- dependencies:
- '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-tokenizer': 3.0.4
- '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.6)
- '@csstools/utilities': 2.0.0(postcss@8.5.6)
- postcss: 8.5.6
-
- '@csstools/postcss-color-function@4.0.12(postcss@8.5.6)':
- dependencies:
- '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-tokenizer': 3.0.4
- '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.6)
- '@csstools/utilities': 2.0.0(postcss@8.5.6)
- postcss: 8.5.6
-
- '@csstools/postcss-color-mix-function@3.0.12(postcss@8.5.6)':
- dependencies:
- '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-tokenizer': 3.0.4
- '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.6)
- '@csstools/utilities': 2.0.0(postcss@8.5.6)
- postcss: 8.5.6
-
- '@csstools/postcss-color-mix-variadic-function-arguments@1.0.2(postcss@8.5.6)':
- dependencies:
- '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-tokenizer': 3.0.4
- '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.6)
- '@csstools/utilities': 2.0.0(postcss@8.5.6)
- postcss: 8.5.6
-
- '@csstools/postcss-content-alt-text@2.0.8(postcss@8.5.6)':
- dependencies:
- '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-tokenizer': 3.0.4
- '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.6)
- '@csstools/utilities': 2.0.0(postcss@8.5.6)
- postcss: 8.5.6
-
- '@csstools/postcss-contrast-color-function@2.0.12(postcss@8.5.6)':
- dependencies:
- '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-tokenizer': 3.0.4
- '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.6)
- '@csstools/utilities': 2.0.0(postcss@8.5.6)
- postcss: 8.5.6
-
- '@csstools/postcss-exponential-functions@2.0.9(postcss@8.5.6)':
- dependencies:
- '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-tokenizer': 3.0.4
- postcss: 8.5.6
-
- '@csstools/postcss-font-format-keywords@4.0.0(postcss@8.5.6)':
- dependencies:
- '@csstools/utilities': 2.0.0(postcss@8.5.6)
- postcss: 8.5.6
- postcss-value-parser: 4.2.0
-
- '@csstools/postcss-gamut-mapping@2.0.11(postcss@8.5.6)':
- dependencies:
- '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-tokenizer': 3.0.4
- postcss: 8.5.6
-
- '@csstools/postcss-gradients-interpolation-method@5.0.12(postcss@8.5.6)':
- dependencies:
- '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-tokenizer': 3.0.4
- '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.6)
- '@csstools/utilities': 2.0.0(postcss@8.5.6)
- postcss: 8.5.6
-
- '@csstools/postcss-hwb-function@4.0.12(postcss@8.5.6)':
- dependencies:
- '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-tokenizer': 3.0.4
- '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.6)
- '@csstools/utilities': 2.0.0(postcss@8.5.6)
- postcss: 8.5.6
-
- '@csstools/postcss-ic-unit@4.0.4(postcss@8.5.6)':
- dependencies:
- '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.6)
- '@csstools/utilities': 2.0.0(postcss@8.5.6)
- postcss: 8.5.6
- postcss-value-parser: 4.2.0
-
- '@csstools/postcss-initial@2.0.1(postcss@8.5.6)':
- dependencies:
- postcss: 8.5.6
-
- '@csstools/postcss-is-pseudo-class@5.0.3(postcss@8.5.6)':
- dependencies:
- '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.0.0)
- postcss: 8.5.6
- postcss-selector-parser: 7.0.0
-
- '@csstools/postcss-light-dark-function@2.0.11(postcss@8.5.6)':
- dependencies:
- '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-tokenizer': 3.0.4
- '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.6)
- '@csstools/utilities': 2.0.0(postcss@8.5.6)
- postcss: 8.5.6
-
- '@csstools/postcss-logical-float-and-clear@3.0.0(postcss@8.5.6)':
- dependencies:
- postcss: 8.5.6
-
- '@csstools/postcss-logical-overflow@2.0.0(postcss@8.5.6)':
- dependencies:
- postcss: 8.5.6
-
- '@csstools/postcss-logical-overscroll-behavior@2.0.0(postcss@8.5.6)':
- dependencies:
- postcss: 8.5.6
-
- '@csstools/postcss-logical-resize@3.0.0(postcss@8.5.6)':
- dependencies:
- postcss: 8.5.6
- postcss-value-parser: 4.2.0
-
- '@csstools/postcss-logical-viewport-units@3.0.4(postcss@8.5.6)':
- dependencies:
- '@csstools/css-tokenizer': 3.0.4
- '@csstools/utilities': 2.0.0(postcss@8.5.6)
- postcss: 8.5.6
-
- '@csstools/postcss-media-minmax@2.0.9(postcss@8.5.6)':
- dependencies:
- '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-tokenizer': 3.0.4
- '@csstools/media-query-list-parser': 4.0.3(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
- postcss: 8.5.6
-
- '@csstools/postcss-media-queries-aspect-ratio-number-values@3.0.5(postcss@8.5.6)':
- dependencies:
- '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-tokenizer': 3.0.4
- '@csstools/media-query-list-parser': 4.0.3(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
- postcss: 8.5.6
-
- '@csstools/postcss-nested-calc@4.0.0(postcss@8.5.6)':
- dependencies:
- '@csstools/utilities': 2.0.0(postcss@8.5.6)
- postcss: 8.5.6
- postcss-value-parser: 4.2.0
-
- '@csstools/postcss-normalize-display-values@4.0.0(postcss@8.5.6)':
- dependencies:
- postcss: 8.5.6
- postcss-value-parser: 4.2.0
-
- '@csstools/postcss-oklab-function@4.0.12(postcss@8.5.6)':
- dependencies:
- '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-tokenizer': 3.0.4
- '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.6)
- '@csstools/utilities': 2.0.0(postcss@8.5.6)
- postcss: 8.5.6
-
- '@csstools/postcss-position-area-property@1.0.0(postcss@8.5.6)':
- dependencies:
- postcss: 8.5.6
-
- '@csstools/postcss-progressive-custom-properties@4.2.1(postcss@8.5.6)':
- dependencies:
- postcss: 8.5.6
- postcss-value-parser: 4.2.0
-
- '@csstools/postcss-random-function@2.0.1(postcss@8.5.6)':
- dependencies:
- '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-tokenizer': 3.0.4
- postcss: 8.5.6
-
- '@csstools/postcss-relative-color-syntax@3.0.12(postcss@8.5.6)':
- dependencies:
- '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-tokenizer': 3.0.4
- '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.6)
- '@csstools/utilities': 2.0.0(postcss@8.5.6)
- postcss: 8.5.6
-
- '@csstools/postcss-scope-pseudo-class@4.0.1(postcss@8.5.6)':
- dependencies:
- postcss: 8.5.6
- postcss-selector-parser: 7.0.0
-
- '@csstools/postcss-sign-functions@1.1.4(postcss@8.5.6)':
- dependencies:
- '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-tokenizer': 3.0.4
- postcss: 8.5.6
-
- '@csstools/postcss-stepped-value-functions@4.0.9(postcss@8.5.6)':
- dependencies:
- '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-tokenizer': 3.0.4
- postcss: 8.5.6
-
- '@csstools/postcss-system-ui-font-family@1.0.0(postcss@8.5.6)':
- dependencies:
- '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-tokenizer': 3.0.4
- postcss: 8.5.6
-
- '@csstools/postcss-text-decoration-shorthand@4.0.3(postcss@8.5.6)':
- dependencies:
- '@csstools/color-helpers': 5.1.0
- postcss: 8.5.6
- postcss-value-parser: 4.2.0
-
- '@csstools/postcss-trigonometric-functions@4.0.9(postcss@8.5.6)':
- dependencies:
- '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-tokenizer': 3.0.4
- postcss: 8.5.6
-
- '@csstools/postcss-unset-value@4.0.0(postcss@8.5.6)':
- dependencies:
- postcss: 8.5.6
-
- '@csstools/selector-resolve-nested@3.1.0(postcss-selector-parser@7.0.0)':
- dependencies:
- postcss-selector-parser: 7.0.0
-
- '@csstools/selector-specificity@5.0.0(postcss-selector-parser@7.0.0)':
- dependencies:
- postcss-selector-parser: 7.0.0
-
- '@csstools/utilities@2.0.0(postcss@8.5.6)':
- dependencies:
- postcss: 8.5.6
-
- '@discoveryjs/json-ext@0.5.7': {}
-
- '@docsearch/css@3.9.0': {}
-
- '@docsearch/react@3.9.0(@algolia/client-search@5.46.2)(@types/react@18.3.12)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(search-insights@2.17.1)':
- dependencies:
- '@algolia/autocomplete-core': 1.17.9(@algolia/client-search@5.46.2)(algoliasearch@5.46.2)(search-insights@2.17.1)
- '@algolia/autocomplete-preset-algolia': 1.17.9(@algolia/client-search@5.46.2)(algoliasearch@5.46.2)
- '@docsearch/css': 3.9.0
- algoliasearch: 5.46.2
- optionalDependencies:
- '@types/react': 18.3.12
- react: 19.2.8
- react-dom: 19.2.8(react@19.2.8)
- search-insights: 2.17.1
- transitivePeerDependencies:
- - '@algolia/client-search'
-
- '@docusaurus/babel@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/generator': 7.26.0
- '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.26.0)
- '@babel/plugin-transform-runtime': 7.25.9(@babel/core@7.26.0)
- '@babel/preset-env': 7.25.9(@babel/core@7.26.0)
- '@babel/preset-react': 7.25.9(@babel/core@7.26.0)
- '@babel/preset-typescript': 7.26.0(@babel/core@7.26.0)
- '@babel/runtime': 7.26.0
- '@babel/traverse': 7.25.9
- '@docusaurus/logger': 3.10.2
- '@docusaurus/utils': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- babel-plugin-dynamic-import-node: 2.3.3
- fs-extra: 11.2.0
- tslib: 2.8.0
- transitivePeerDependencies:
- - '@swc/core'
- - acorn
- - esbuild
- - react
- - react-dom
- - supports-color
- - uglify-js
- - webpack-cli
-
- '@docusaurus/bundler@3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)':
- dependencies:
- '@babel/core': 7.26.0
- '@docusaurus/babel': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@docusaurus/cssnano-preset': 3.10.2
- '@docusaurus/logger': 3.10.2
- '@docusaurus/types': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@docusaurus/utils': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- babel-loader: 9.2.1(@babel/core@7.26.0)(webpack@5.95.0(@swc/core@1.16.0))
- clean-css: 5.3.3
- copy-webpack-plugin: 11.0.0(webpack@5.95.0(@swc/core@1.16.0))
- css-loader: 6.11.0(@rspack/core@1.7.11)(webpack@5.95.0(@swc/core@1.16.0))
- css-minimizer-webpack-plugin: 5.0.1(clean-css@5.3.3)(webpack@5.95.0(@swc/core@1.16.0))
- cssnano: 6.1.2(postcss@8.5.6)
- file-loader: 6.2.0(webpack@5.95.0(@swc/core@1.16.0))
- html-minifier-terser: 7.2.0
- mini-css-extract-plugin: 2.9.4(webpack@5.95.0(@swc/core@1.16.0))
- null-loader: 4.0.1(webpack@5.95.0(@swc/core@1.16.0))
- postcss: 8.5.6
- postcss-loader: 7.3.4(postcss@8.5.6)(typescript@5.6.3)(webpack@5.95.0(@swc/core@1.16.0))
- postcss-preset-env: 10.5.0(postcss@8.5.6)
- terser-webpack-plugin: 5.3.10(@swc/core@1.16.0)(webpack@5.95.0(@swc/core@1.16.0))
- tslib: 2.8.0
- url-loader: 4.1.1(file-loader@6.2.0(webpack@5.95.0(@swc/core@1.16.0)))(webpack@5.95.0(@swc/core@1.16.0))
- webpack: 5.95.0(@swc/core@1.16.0)
- webpackbar: 7.0.0(@rspack/core@1.7.11)(webpack@5.95.0(@swc/core@1.16.0))
- optionalDependencies:
- '@docusaurus/faster': 3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))
- transitivePeerDependencies:
- - '@parcel/css'
- - '@rspack/core'
- - '@swc/core'
- - '@swc/css'
- - acorn
- - csso
- - esbuild
- - lightningcss
- - react
- - react-dom
- - supports-color
- - typescript
- - uglify-js
- - webpack-cli
-
- '@docusaurus/core@3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)':
- dependencies:
- '@docusaurus/babel': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@docusaurus/bundler': 3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)
- '@docusaurus/logger': 3.10.2
- '@docusaurus/mdx-loader': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@docusaurus/utils': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@docusaurus/utils-common': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@docusaurus/utils-validation': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@mdx-js/react': 3.1.1(@types/react@18.3.12)(react@19.2.8)
- boxen: 6.2.1
- chalk: 4.1.2
- chokidar: 3.6.0
- cli-table3: 0.6.5
- combine-promises: 1.2.0
- commander: 5.1.0
- core-js: 3.39.0
- detect-port: 2.1.0
- escape-html: 1.0.3
- eta: 2.2.0
- eval: 0.1.8
- execa: 5.1.1
- fs-extra: 11.2.0
- html-tags: 3.3.1
- html-webpack-plugin: 5.6.3(@rspack/core@1.7.11)(webpack@5.95.0(@swc/core@1.16.0))
- leven: 3.1.0
- lodash: 4.17.21
- open: 8.4.2
- p-map: 4.0.0
- prompts: 2.4.2
- react: 19.2.8
- react-dom: 19.2.8(react@19.2.8)
- react-helmet-async: '@slorber/react-helmet-async@1.3.0(react-dom@19.2.8(react@19.2.8))(react@19.2.8)'
- react-loadable: '@docusaurus/react-loadable@6.0.0(react@19.2.8)'
- react-loadable-ssr-addon-v5-slorber: 1.0.3(@docusaurus/react-loadable@6.0.0(react@19.2.8))(webpack@5.95.0(@swc/core@1.16.0))
- react-router: 5.3.4(react@19.2.8)
- react-router-config: 5.1.1(react-router@5.3.4(react@19.2.8))(react@19.2.8)
- react-router-dom: 5.3.4(react@19.2.8)
- semver: 7.6.3
- serve-handler: 6.1.7
- tinypool: 1.0.2
- tslib: 2.8.0
- update-notifier: 6.0.2
- webpack: 5.95.0(@swc/core@1.16.0)
- webpack-bundle-analyzer: 4.10.2
- webpack-dev-server: 5.2.2(webpack@5.95.0(@swc/core@1.16.0))
- webpack-merge: 6.0.1
- optionalDependencies:
- '@docusaurus/faster': 3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))
- transitivePeerDependencies:
- - '@parcel/css'
- - '@rspack/core'
- - '@swc/core'
- - '@swc/css'
- - acorn
- - bufferutil
- - csso
- - debug
- - esbuild
- - lightningcss
- - supports-color
- - typescript
- - uglify-js
- - utf-8-validate
- - webpack-cli
-
- '@docusaurus/cssnano-preset@3.10.2':
- dependencies:
- cssnano-preset-advanced: 6.1.2(postcss@8.5.6)
- postcss: 8.5.6
- postcss-sort-media-queries: 5.2.0(postcss@8.5.6)
- tslib: 2.8.0
-
- '@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))':
- dependencies:
- '@docusaurus/types': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@rspack/core': 1.7.11
- '@swc/core': 1.16.0
- '@swc/html': 1.16.0
- browserslist: 4.28.1
- lightningcss: 1.27.0
- semver: 7.6.3
- swc-loader: 0.2.6(@swc/core@1.16.0)(webpack@5.95.0(@swc/core@1.16.0))
- tslib: 2.8.0
- webpack: 5.95.0(@swc/core@1.16.0)
- transitivePeerDependencies:
- - '@swc/helpers'
- - esbuild
- - uglify-js
- - webpack-cli
-
- '@docusaurus/logger@3.10.2':
- dependencies:
- chalk: 4.1.2
- tslib: 2.8.0
-
- '@docusaurus/mdx-loader@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)':
- dependencies:
- '@docusaurus/logger': 3.10.2
- '@docusaurus/utils': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@docusaurus/utils-validation': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@mdx-js/mdx': 3.1.0(acorn@8.14.0)
- '@slorber/remark-comment': 1.0.0
- escape-html: 1.0.3
- estree-util-value-to-estree: 3.1.2
- file-loader: 6.2.0(webpack@5.95.0(@swc/core@1.16.0))
- fs-extra: 11.2.0
- image-size: 2.0.2
- mdast-util-mdx: 3.0.0
- mdast-util-to-string: 4.0.0
- react: 19.2.8
- react-dom: 19.2.8(react@19.2.8)
- rehype-raw: 7.0.0
- remark-directive: 3.0.0
- remark-emoji: 4.0.1
- remark-frontmatter: 5.0.0
- remark-gfm: 4.0.0
- stringify-object: 3.3.0
- tslib: 2.8.0
- unified: 11.0.5
- unist-util-visit: 5.1.0
- url-loader: 4.1.1(file-loader@6.2.0(webpack@5.95.0(@swc/core@1.16.0)))(webpack@5.95.0(@swc/core@1.16.0))
- vfile: 6.0.3
- webpack: 5.95.0(@swc/core@1.16.0)
- transitivePeerDependencies:
- - '@swc/core'
- - acorn
- - esbuild
- - supports-color
- - uglify-js
- - webpack-cli
-
- '@docusaurus/module-type-aliases@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)':
- dependencies:
- '@docusaurus/types': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@types/history': 4.7.11
- '@types/react': 18.3.12
- '@types/react-router-config': 5.0.11
- '@types/react-router-dom': 5.3.3
- react: 19.2.8
- react-dom: 19.2.8(react@19.2.8)
- react-helmet-async: '@slorber/react-helmet-async@1.3.0(react-dom@19.2.8(react@19.2.8))(react@19.2.8)'
- react-loadable: '@docusaurus/react-loadable@6.0.0(react@19.2.8)'
- transitivePeerDependencies:
- - '@swc/core'
- - acorn
- - esbuild
- - supports-color
- - uglify-js
- - webpack-cli
-
- '@docusaurus/plugin-client-redirects@3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)':
- dependencies:
- '@docusaurus/core': 3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)
- '@docusaurus/logger': 3.10.2
- '@docusaurus/utils': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@docusaurus/utils-common': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@docusaurus/utils-validation': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- eta: 2.2.0
- fs-extra: 11.2.0
- lodash: 4.17.21
- react: 19.2.8
- react-dom: 19.2.8(react@19.2.8)
- tslib: 2.8.0
- transitivePeerDependencies:
- - '@docusaurus/faster'
- - '@mdx-js/react'
- - '@parcel/css'
- - '@rspack/core'
- - '@swc/core'
- - '@swc/css'
- - acorn
- - bufferutil
- - csso
- - debug
- - esbuild
- - lightningcss
- - supports-color
- - typescript
- - uglify-js
- - utf-8-validate
- - webpack-cli
-
- '@docusaurus/plugin-content-blog@3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@docusaurus/plugin-content-docs@3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)':
- dependencies:
- '@docusaurus/core': 3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)
- '@docusaurus/logger': 3.10.2
- '@docusaurus/mdx-loader': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@docusaurus/plugin-content-docs': 3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)
- '@docusaurus/theme-common': 3.10.2(@docusaurus/plugin-content-docs@3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3))(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@docusaurus/types': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@docusaurus/utils': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@docusaurus/utils-common': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@docusaurus/utils-validation': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- cheerio: 1.0.0-rc.12
- combine-promises: 1.2.0
- feed: 4.2.2
- fs-extra: 11.2.0
- lodash: 4.17.21
- react: 19.2.8
- react-dom: 19.2.8(react@19.2.8)
- schema-dts: 1.1.5
- srcset: 4.0.0
- tslib: 2.8.0
- unist-util-visit: 5.1.0
- utility-types: 3.11.0
- webpack: 5.95.0(@swc/core@1.16.0)
- transitivePeerDependencies:
- - '@docusaurus/faster'
- - '@mdx-js/react'
- - '@parcel/css'
- - '@rspack/core'
- - '@swc/core'
- - '@swc/css'
- - acorn
- - bufferutil
- - csso
- - debug
- - esbuild
- - lightningcss
- - supports-color
- - typescript
- - uglify-js
- - utf-8-validate
- - webpack-cli
-
- '@docusaurus/plugin-content-docs@3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)':
- dependencies:
- '@docusaurus/core': 3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)
- '@docusaurus/logger': 3.10.2
- '@docusaurus/mdx-loader': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@docusaurus/module-type-aliases': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@docusaurus/theme-common': 3.10.2(@docusaurus/plugin-content-docs@3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3))(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@docusaurus/types': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@docusaurus/utils': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@docusaurus/utils-common': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@docusaurus/utils-validation': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@types/react-router-config': 5.0.11
- combine-promises: 1.2.0
- fs-extra: 11.2.0
- js-yaml: 4.1.0
- lodash: 4.17.21
- react: 19.2.8
- react-dom: 19.2.8(react@19.2.8)
- schema-dts: 1.1.5
- tslib: 2.8.0
- utility-types: 3.11.0
- webpack: 5.95.0(@swc/core@1.16.0)
- transitivePeerDependencies:
- - '@docusaurus/faster'
- - '@mdx-js/react'
- - '@parcel/css'
- - '@rspack/core'
- - '@swc/core'
- - '@swc/css'
- - acorn
- - bufferutil
- - csso
- - debug
- - esbuild
- - lightningcss
- - supports-color
- - typescript
- - uglify-js
- - utf-8-validate
- - webpack-cli
-
- '@docusaurus/plugin-content-pages@3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)':
- dependencies:
- '@docusaurus/core': 3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)
- '@docusaurus/mdx-loader': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@docusaurus/types': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@docusaurus/utils': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@docusaurus/utils-validation': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- fs-extra: 11.2.0
- react: 19.2.8
- react-dom: 19.2.8(react@19.2.8)
- tslib: 2.8.0
- webpack: 5.95.0(@swc/core@1.16.0)
- transitivePeerDependencies:
- - '@docusaurus/faster'
- - '@mdx-js/react'
- - '@parcel/css'
- - '@rspack/core'
- - '@swc/core'
- - '@swc/css'
- - acorn
- - bufferutil
- - csso
- - debug
- - esbuild
- - lightningcss
- - supports-color
- - typescript
- - uglify-js
- - utf-8-validate
- - webpack-cli
-
- '@docusaurus/plugin-css-cascade-layers@3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)':
- dependencies:
- '@docusaurus/core': 3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)
- '@docusaurus/types': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@docusaurus/utils': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@docusaurus/utils-validation': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- tslib: 2.8.0
- transitivePeerDependencies:
- - '@docusaurus/faster'
- - '@mdx-js/react'
- - '@parcel/css'
- - '@rspack/core'
- - '@swc/core'
- - '@swc/css'
- - acorn
- - bufferutil
- - csso
- - debug
- - esbuild
- - lightningcss
- - react
- - react-dom
- - supports-color
- - typescript
- - uglify-js
- - utf-8-validate
- - webpack-cli
-
- '@docusaurus/plugin-debug@3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)':
- dependencies:
- '@docusaurus/core': 3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)
- '@docusaurus/types': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@docusaurus/utils': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- fs-extra: 11.2.0
- react: 19.2.8
- react-dom: 19.2.8(react@19.2.8)
- react-json-view-lite: 2.4.1(react@19.2.8)
- tslib: 2.8.0
- transitivePeerDependencies:
- - '@docusaurus/faster'
- - '@mdx-js/react'
- - '@parcel/css'
- - '@rspack/core'
- - '@swc/core'
- - '@swc/css'
- - acorn
- - bufferutil
- - csso
- - debug
- - esbuild
- - lightningcss
- - supports-color
- - typescript
- - uglify-js
- - utf-8-validate
- - webpack-cli
-
- '@docusaurus/plugin-google-analytics@3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)':
- dependencies:
- '@docusaurus/core': 3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)
- '@docusaurus/types': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@docusaurus/utils-validation': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- react: 19.2.8
- react-dom: 19.2.8(react@19.2.8)
- tslib: 2.8.0
- transitivePeerDependencies:
- - '@docusaurus/faster'
- - '@mdx-js/react'
- - '@parcel/css'
- - '@rspack/core'
- - '@swc/core'
- - '@swc/css'
- - acorn
- - bufferutil
- - csso
- - debug
- - esbuild
- - lightningcss
- - supports-color
- - typescript
- - uglify-js
- - utf-8-validate
- - webpack-cli
-
- '@docusaurus/plugin-google-gtag@3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)':
- dependencies:
- '@docusaurus/core': 3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)
- '@docusaurus/types': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@docusaurus/utils-validation': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- react: 19.2.8
- react-dom: 19.2.8(react@19.2.8)
- tslib: 2.8.0
- transitivePeerDependencies:
- - '@docusaurus/faster'
- - '@mdx-js/react'
- - '@parcel/css'
- - '@rspack/core'
- - '@swc/core'
- - '@swc/css'
- - acorn
- - bufferutil
- - csso
- - debug
- - esbuild
- - lightningcss
- - supports-color
- - typescript
- - uglify-js
- - utf-8-validate
- - webpack-cli
-
- '@docusaurus/plugin-google-tag-manager@3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)':
- dependencies:
- '@docusaurus/core': 3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)
- '@docusaurus/types': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@docusaurus/utils-validation': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- react: 19.2.8
- react-dom: 19.2.8(react@19.2.8)
- tslib: 2.8.0
- transitivePeerDependencies:
- - '@docusaurus/faster'
- - '@mdx-js/react'
- - '@parcel/css'
- - '@rspack/core'
- - '@swc/core'
- - '@swc/css'
- - acorn
- - bufferutil
- - csso
- - debug
- - esbuild
- - lightningcss
- - supports-color
- - typescript
- - uglify-js
- - utf-8-validate
- - webpack-cli
-
- '@docusaurus/plugin-sitemap@3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)':
- dependencies:
- '@docusaurus/core': 3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)
- '@docusaurus/logger': 3.10.2
- '@docusaurus/types': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@docusaurus/utils': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@docusaurus/utils-common': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@docusaurus/utils-validation': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- fs-extra: 11.2.0
- react: 19.2.8
- react-dom: 19.2.8(react@19.2.8)
- sitemap: 7.1.2
- tslib: 2.8.0
- transitivePeerDependencies:
- - '@docusaurus/faster'
- - '@mdx-js/react'
- - '@parcel/css'
- - '@rspack/core'
- - '@swc/core'
- - '@swc/css'
- - acorn
- - bufferutil
- - csso
- - debug
- - esbuild
- - lightningcss
- - supports-color
- - typescript
- - uglify-js
- - utf-8-validate
- - webpack-cli
-
- '@docusaurus/plugin-svgr@3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)':
- dependencies:
- '@docusaurus/core': 3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)
- '@docusaurus/types': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@docusaurus/utils': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@docusaurus/utils-validation': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@svgr/core': 8.1.0(typescript@5.6.3)
- '@svgr/webpack': 8.1.0(typescript@5.6.3)
- react: 19.2.8
- react-dom: 19.2.8(react@19.2.8)
- tslib: 2.8.0
- webpack: 5.95.0(@swc/core@1.16.0)
- transitivePeerDependencies:
- - '@docusaurus/faster'
- - '@mdx-js/react'
- - '@parcel/css'
- - '@rspack/core'
- - '@swc/core'
- - '@swc/css'
- - acorn
- - bufferutil
- - csso
- - debug
- - esbuild
- - lightningcss
- - supports-color
- - typescript
- - uglify-js
- - utf-8-validate
- - webpack-cli
-
- '@docusaurus/preset-classic@3.10.2(@algolia/client-search@5.46.2)(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(@types/react@18.3.12)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(search-insights@2.17.1)(typescript@5.6.3)':
- dependencies:
- '@docusaurus/core': 3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)
- '@docusaurus/plugin-content-blog': 3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@docusaurus/plugin-content-docs@3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)
- '@docusaurus/plugin-content-docs': 3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)
- '@docusaurus/plugin-content-pages': 3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)
- '@docusaurus/plugin-css-cascade-layers': 3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)
- '@docusaurus/plugin-debug': 3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)
- '@docusaurus/plugin-google-analytics': 3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)
- '@docusaurus/plugin-google-gtag': 3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)
- '@docusaurus/plugin-google-tag-manager': 3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)
- '@docusaurus/plugin-sitemap': 3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)
- '@docusaurus/plugin-svgr': 3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)
- '@docusaurus/theme-classic': 3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@rspack/core@1.7.11)(@swc/core@1.16.0)(@types/react@18.3.12)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)
- '@docusaurus/theme-common': 3.10.2(@docusaurus/plugin-content-docs@3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3))(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@docusaurus/theme-search-algolia': 3.10.2(@algolia/client-search@5.46.2)(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(@types/react@18.3.12)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(search-insights@2.17.1)(typescript@5.6.3)
- '@docusaurus/types': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- react: 19.2.8
- react-dom: 19.2.8(react@19.2.8)
- transitivePeerDependencies:
- - '@algolia/client-search'
- - '@docusaurus/faster'
- - '@mdx-js/react'
- - '@parcel/css'
- - '@rspack/core'
- - '@swc/core'
- - '@swc/css'
- - '@types/react'
- - acorn
- - bufferutil
- - csso
- - debug
- - esbuild
- - lightningcss
- - search-insights
- - supports-color
- - typescript
- - uglify-js
- - utf-8-validate
- - webpack-cli
-
- '@docusaurus/react-loadable@6.0.0(react@19.2.8)':
- dependencies:
- '@types/react': 18.3.12
- react: 19.2.8
-
- '@docusaurus/theme-classic@3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@rspack/core@1.7.11)(@swc/core@1.16.0)(@types/react@18.3.12)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)':
- dependencies:
- '@docusaurus/core': 3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)
- '@docusaurus/logger': 3.10.2
- '@docusaurus/mdx-loader': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@docusaurus/module-type-aliases': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@docusaurus/plugin-content-blog': 3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@docusaurus/plugin-content-docs@3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)
- '@docusaurus/plugin-content-docs': 3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)
- '@docusaurus/plugin-content-pages': 3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)
- '@docusaurus/theme-common': 3.10.2(@docusaurus/plugin-content-docs@3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3))(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@docusaurus/theme-translations': 3.10.2
- '@docusaurus/types': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@docusaurus/utils': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@docusaurus/utils-common': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@docusaurus/utils-validation': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@mdx-js/react': 3.1.1(@types/react@18.3.12)(react@19.2.8)
- clsx: 2.1.1
- copy-text-to-clipboard: 3.2.2
- infima: 0.2.0-alpha.45
- lodash: 4.17.21
- nprogress: 0.2.0
- postcss: 8.5.6
- prism-react-renderer: 2.4.1(react@19.2.8)
- prismjs: 1.29.0
- react: 19.2.8
- react-dom: 19.2.8(react@19.2.8)
- react-router-dom: 5.3.4(react@19.2.8)
- rtlcss: 4.3.0
- tslib: 2.8.0
- utility-types: 3.11.0
- transitivePeerDependencies:
- - '@docusaurus/faster'
- - '@parcel/css'
- - '@rspack/core'
- - '@swc/core'
- - '@swc/css'
- - '@types/react'
- - acorn
- - bufferutil
- - csso
- - debug
- - esbuild
- - lightningcss
- - supports-color
- - typescript
- - uglify-js
- - utf-8-validate
- - webpack-cli
-
- '@docusaurus/theme-common@3.10.2(@docusaurus/plugin-content-docs@3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3))(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)':
- dependencies:
- '@docusaurus/mdx-loader': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@docusaurus/module-type-aliases': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@docusaurus/plugin-content-docs': 3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)
- '@docusaurus/utils': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@docusaurus/utils-common': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@types/history': 4.7.11
- '@types/react': 18.3.12
- '@types/react-router-config': 5.0.11
- clsx: 2.1.1
- parse-numeric-range: 1.3.0
- prism-react-renderer: 2.4.1(react@19.2.8)
- react: 19.2.8
- react-dom: 19.2.8(react@19.2.8)
- tslib: 2.8.0
- utility-types: 3.11.0
- transitivePeerDependencies:
- - '@swc/core'
- - acorn
- - esbuild
- - supports-color
- - uglify-js
- - webpack-cli
-
- '@docusaurus/theme-mermaid@3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@docusaurus/plugin-content-docs@3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)':
- dependencies:
- '@docusaurus/core': 3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)
- '@docusaurus/module-type-aliases': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@docusaurus/theme-common': 3.10.2(@docusaurus/plugin-content-docs@3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3))(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@docusaurus/types': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@docusaurus/utils-validation': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- mermaid: 11.6.0
- react: 19.2.8
- react-dom: 19.2.8(react@19.2.8)
- tslib: 2.8.0
- transitivePeerDependencies:
- - '@docusaurus/faster'
- - '@docusaurus/plugin-content-docs'
- - '@mdx-js/react'
- - '@parcel/css'
- - '@rspack/core'
- - '@swc/core'
- - '@swc/css'
- - acorn
- - bufferutil
- - csso
- - debug
- - esbuild
- - lightningcss
- - supports-color
- - typescript
- - uglify-js
- - utf-8-validate
- - webpack-cli
-
- '@docusaurus/theme-search-algolia@3.10.2(@algolia/client-search@5.46.2)(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(@types/react@18.3.12)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(search-insights@2.17.1)(typescript@5.6.3)':
- dependencies:
- '@algolia/autocomplete-core': 1.19.8(@algolia/client-search@5.46.2)(algoliasearch@5.46.2)(search-insights@2.17.1)
- '@docsearch/react': 3.9.0(@algolia/client-search@5.46.2)(@types/react@18.3.12)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(search-insights@2.17.1)
- '@docusaurus/core': 3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)
- '@docusaurus/logger': 3.10.2
- '@docusaurus/plugin-content-docs': 3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)
- '@docusaurus/theme-common': 3.10.2(@docusaurus/plugin-content-docs@3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3))(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@docusaurus/theme-translations': 3.10.2
- '@docusaurus/utils': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@docusaurus/utils-validation': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- algoliasearch: 5.46.2
- algoliasearch-helper: 3.26.1(algoliasearch@5.46.2)
- clsx: 2.1.1
- eta: 2.2.0
- fs-extra: 11.2.0
- lodash: 4.17.21
- react: 19.2.8
- react-dom: 19.2.8(react@19.2.8)
- tslib: 2.8.0
- utility-types: 3.11.0
- transitivePeerDependencies:
- - '@algolia/client-search'
- - '@docusaurus/faster'
- - '@mdx-js/react'
- - '@parcel/css'
- - '@rspack/core'
- - '@swc/core'
- - '@swc/css'
- - '@types/react'
- - acorn
- - bufferutil
- - csso
- - debug
- - esbuild
- - lightningcss
- - search-insights
- - supports-color
- - typescript
- - uglify-js
- - utf-8-validate
- - webpack-cli
-
- '@docusaurus/theme-translations@3.10.2':
- dependencies:
- fs-extra: 11.2.0
- tslib: 2.8.0
-
- '@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)':
- dependencies:
- '@mdx-js/mdx': 3.1.0(acorn@8.14.0)
- '@types/history': 4.7.11
- '@types/mdast': 4.0.4
- '@types/react': 18.3.12
- commander: 5.1.0
- joi: 17.13.3
- react: 19.2.8
- react-dom: 19.2.8(react@19.2.8)
- react-helmet-async: '@slorber/react-helmet-async@1.3.0(react-dom@19.2.8(react@19.2.8))(react@19.2.8)'
- utility-types: 3.11.0
- webpack: 5.95.0(@swc/core@1.16.0)
- webpack-merge: 5.10.0
- transitivePeerDependencies:
- - '@swc/core'
- - acorn
- - esbuild
- - supports-color
- - uglify-js
- - webpack-cli
-
- '@docusaurus/utils-common@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)':
- dependencies:
- '@docusaurus/types': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- tslib: 2.8.0
- transitivePeerDependencies:
- - '@swc/core'
- - acorn
- - esbuild
- - react
- - react-dom
- - supports-color
- - uglify-js
- - webpack-cli
-
- '@docusaurus/utils-validation@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)':
- dependencies:
- '@docusaurus/logger': 3.10.2
- '@docusaurus/utils': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@docusaurus/utils-common': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- fs-extra: 11.2.0
- joi: 17.13.3
- js-yaml: 4.1.0
- lodash: 4.17.21
- tslib: 2.8.0
- transitivePeerDependencies:
- - '@swc/core'
- - acorn
- - esbuild
- - react
- - react-dom
- - supports-color
- - uglify-js
- - webpack-cli
-
- '@docusaurus/utils@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)':
- dependencies:
- '@11ty/gray-matter': 1.0.0
- '@docusaurus/logger': 3.10.2
- '@docusaurus/types': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- '@docusaurus/utils-common': 3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- escape-string-regexp: 4.0.0
- execa: 5.1.1
- file-loader: 6.2.0(webpack@5.95.0(@swc/core@1.16.0))
- fs-extra: 11.2.0
- github-slugger: 1.5.0
- globby: 11.1.0
- jiti: 1.21.6
- js-yaml: 4.1.0
- lodash: 4.17.21
- micromatch: 4.0.8
- p-queue: 6.6.2
- prompts: 2.4.2
- resolve-pathname: 3.0.0
- tslib: 2.8.0
- url-loader: 4.1.1(file-loader@6.2.0(webpack@5.95.0(@swc/core@1.16.0)))(webpack@5.95.0(@swc/core@1.16.0))
- utility-types: 3.11.0
- webpack: 5.95.0(@swc/core@1.16.0)
- transitivePeerDependencies:
- - '@swc/core'
- - acorn
- - esbuild
- - react
- - react-dom
- - supports-color
- - uglify-js
- - webpack-cli
-
- '@emnapi/core@1.7.1':
- dependencies:
- '@emnapi/wasi-threads': 1.1.0
- tslib: 2.8.0
- optional: true
-
- '@emnapi/runtime@1.7.1':
- dependencies:
- tslib: 2.8.0
- optional: true
-
- '@emnapi/wasi-threads@1.1.0':
- dependencies:
- tslib: 2.8.0
- optional: true
-
- '@hapi/hoek@9.3.0': {}
-
- '@hapi/topo@5.1.0':
- dependencies:
- '@hapi/hoek': 9.3.0
-
- '@iconify/types@2.0.0': {}
-
- '@iconify/utils@2.1.33':
- dependencies:
- '@antfu/install-pkg': 0.4.1
- '@antfu/utils': 0.7.10
- '@iconify/types': 2.0.0
- debug: 4.3.7
- kolorist: 1.8.0
- local-pkg: 0.5.0
- mlly: 1.7.2
- transitivePeerDependencies:
- - supports-color
-
- '@jest/schemas@29.6.3':
- dependencies:
- '@sinclair/typebox': 0.27.8
-
- '@jest/types@29.6.3':
- dependencies:
- '@jest/schemas': 29.6.3
- '@types/istanbul-lib-coverage': 2.0.6
- '@types/istanbul-reports': 3.0.4
- '@types/node': 22.8.1
- '@types/yargs': 17.0.33
- chalk: 4.1.2
-
- '@jridgewell/gen-mapping@0.3.5':
- dependencies:
- '@jridgewell/set-array': 1.2.1
- '@jridgewell/sourcemap-codec': 1.5.0
- '@jridgewell/trace-mapping': 0.3.25
-
- '@jridgewell/resolve-uri@3.1.2': {}
-
- '@jridgewell/set-array@1.2.1': {}
-
- '@jridgewell/source-map@0.3.6':
- dependencies:
- '@jridgewell/gen-mapping': 0.3.5
- '@jridgewell/trace-mapping': 0.3.25
-
- '@jridgewell/sourcemap-codec@1.5.0': {}
-
- '@jridgewell/trace-mapping@0.3.25':
- dependencies:
- '@jridgewell/resolve-uri': 3.1.2
- '@jridgewell/sourcemap-codec': 1.5.0
-
- '@jsonjoy.com/base64@1.1.2(tslib@2.8.0)':
- dependencies:
- tslib: 2.8.0
-
- '@jsonjoy.com/buffers@1.2.1(tslib@2.8.0)':
- dependencies:
- tslib: 2.8.0
-
- '@jsonjoy.com/codegen@1.0.0(tslib@2.8.0)':
- dependencies:
- tslib: 2.8.0
-
- '@jsonjoy.com/json-pack@1.21.0(tslib@2.8.0)':
- dependencies:
- '@jsonjoy.com/base64': 1.1.2(tslib@2.8.0)
- '@jsonjoy.com/buffers': 1.2.1(tslib@2.8.0)
- '@jsonjoy.com/codegen': 1.0.0(tslib@2.8.0)
- '@jsonjoy.com/json-pointer': 1.0.2(tslib@2.8.0)
- '@jsonjoy.com/util': 1.9.0(tslib@2.8.0)
- hyperdyperid: 1.2.0
- thingies: 2.5.0(tslib@2.8.0)
- tree-dump: 1.1.0(tslib@2.8.0)
- tslib: 2.8.0
-
- '@jsonjoy.com/json-pointer@1.0.2(tslib@2.8.0)':
- dependencies:
- '@jsonjoy.com/codegen': 1.0.0(tslib@2.8.0)
- '@jsonjoy.com/util': 1.9.0(tslib@2.8.0)
- tslib: 2.8.0
-
- '@jsonjoy.com/util@1.9.0(tslib@2.8.0)':
- dependencies:
- '@jsonjoy.com/buffers': 1.2.1(tslib@2.8.0)
- '@jsonjoy.com/codegen': 1.0.0(tslib@2.8.0)
- tslib: 2.8.0
-
- '@leichtgewicht/ip-codec@2.0.5': {}
-
- '@mdx-js/mdx@3.1.0(acorn@8.14.0)':
- dependencies:
- '@types/estree': 1.0.6
- '@types/estree-jsx': 1.0.5
- '@types/hast': 3.0.4
- '@types/mdx': 2.0.13
- collapse-white-space: 2.1.0
- devlop: 1.1.0
- estree-util-is-identifier-name: 3.0.0
- estree-util-scope: 1.0.0
- estree-walker: 3.0.3
- hast-util-to-jsx-runtime: 2.3.2
- markdown-extensions: 2.0.0
- recma-build-jsx: 1.0.0
- recma-jsx: 1.0.0(acorn@8.14.0)
- recma-stringify: 1.0.0
- rehype-recma: 1.0.0
- remark-mdx: 3.0.1
- remark-parse: 11.0.0
- remark-rehype: 11.1.1
- source-map: 0.7.4
- unified: 11.0.5
- unist-util-position-from-estree: 2.0.0
- unist-util-stringify-position: 4.0.0
- unist-util-visit: 5.1.0
- vfile: 6.0.3
- transitivePeerDependencies:
- - acorn
- - supports-color
-
- '@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8)':
- dependencies:
- '@types/mdx': 2.0.13
- '@types/react': 18.3.12
- react: 19.2.8
-
- '@mermaid-js/parser@0.4.0':
- dependencies:
- langium: 3.3.1
-
- '@module-federation/error-codes@0.22.0': {}
-
- '@module-federation/runtime-core@0.22.0':
- dependencies:
- '@module-federation/error-codes': 0.22.0
- '@module-federation/sdk': 0.22.0
-
- '@module-federation/runtime-tools@0.22.0':
- dependencies:
- '@module-federation/runtime': 0.22.0
- '@module-federation/webpack-bundler-runtime': 0.22.0
-
- '@module-federation/runtime@0.22.0':
- dependencies:
- '@module-federation/error-codes': 0.22.0
- '@module-federation/runtime-core': 0.22.0
- '@module-federation/sdk': 0.22.0
-
- '@module-federation/sdk@0.22.0': {}
-
- '@module-federation/webpack-bundler-runtime@0.22.0':
- dependencies:
- '@module-federation/runtime': 0.22.0
- '@module-federation/sdk': 0.22.0
-
- '@napi-rs/wasm-runtime@1.0.7':
- dependencies:
- '@emnapi/core': 1.7.1
- '@emnapi/runtime': 1.7.1
- '@tybys/wasm-util': 0.10.1
- optional: true
-
- '@nodelib/fs.scandir@2.1.5':
- dependencies:
- '@nodelib/fs.stat': 2.0.5
- run-parallel: 1.2.0
-
- '@nodelib/fs.stat@2.0.5': {}
-
- '@nodelib/fs.walk@1.2.8':
- dependencies:
- '@nodelib/fs.scandir': 2.1.5
- fastq: 1.17.1
-
- '@parcel/watcher-android-arm64@2.5.1':
- optional: true
-
- '@parcel/watcher-darwin-arm64@2.5.1':
- optional: true
-
- '@parcel/watcher-darwin-x64@2.5.1':
- optional: true
-
- '@parcel/watcher-freebsd-x64@2.5.1':
- optional: true
-
- '@parcel/watcher-linux-arm-glibc@2.5.1':
- optional: true
-
- '@parcel/watcher-linux-arm-musl@2.5.1':
- optional: true
-
- '@parcel/watcher-linux-arm64-glibc@2.5.1':
- optional: true
-
- '@parcel/watcher-linux-arm64-musl@2.5.1':
- optional: true
-
- '@parcel/watcher-linux-x64-glibc@2.5.1':
- optional: true
-
- '@parcel/watcher-linux-x64-musl@2.5.1':
- optional: true
-
- '@parcel/watcher-win32-arm64@2.5.1':
- optional: true
-
- '@parcel/watcher-win32-ia32@2.5.1':
- optional: true
-
- '@parcel/watcher-win32-x64@2.5.1':
- optional: true
-
- '@parcel/watcher@2.5.1':
- dependencies:
- detect-libc: 1.0.3
- is-glob: 4.0.3
- micromatch: 4.0.8
- node-addon-api: 7.1.1
- optionalDependencies:
- '@parcel/watcher-android-arm64': 2.5.1
- '@parcel/watcher-darwin-arm64': 2.5.1
- '@parcel/watcher-darwin-x64': 2.5.1
- '@parcel/watcher-freebsd-x64': 2.5.1
- '@parcel/watcher-linux-arm-glibc': 2.5.1
- '@parcel/watcher-linux-arm-musl': 2.5.1
- '@parcel/watcher-linux-arm64-glibc': 2.5.1
- '@parcel/watcher-linux-arm64-musl': 2.5.1
- '@parcel/watcher-linux-x64-glibc': 2.5.1
- '@parcel/watcher-linux-x64-musl': 2.5.1
- '@parcel/watcher-win32-arm64': 2.5.1
- '@parcel/watcher-win32-ia32': 2.5.1
- '@parcel/watcher-win32-x64': 2.5.1
- optional: true
-
- '@pnpm/config.env-replace@1.1.0': {}
-
- '@pnpm/network.ca-file@1.0.2':
- dependencies:
- graceful-fs: 4.2.10
-
- '@pnpm/npm-conf@2.3.1':
- dependencies:
- '@pnpm/config.env-replace': 1.1.0
- '@pnpm/network.ca-file': 1.0.2
- config-chain: 1.1.13
-
- '@polka/url@1.0.0-next.28': {}
-
- '@rspack/binding-darwin-arm64@1.7.11':
- optional: true
-
- '@rspack/binding-darwin-x64@1.7.11':
- optional: true
-
- '@rspack/binding-linux-arm64-gnu@1.7.11':
- optional: true
-
- '@rspack/binding-linux-arm64-musl@1.7.11':
- optional: true
-
- '@rspack/binding-linux-x64-gnu@1.7.11':
- optional: true
-
- '@rspack/binding-linux-x64-musl@1.7.11':
- optional: true
-
- '@rspack/binding-wasm32-wasi@1.7.11':
- dependencies:
- '@napi-rs/wasm-runtime': 1.0.7
- optional: true
-
- '@rspack/binding-win32-arm64-msvc@1.7.11':
- optional: true
-
- '@rspack/binding-win32-ia32-msvc@1.7.11':
- optional: true
-
- '@rspack/binding-win32-x64-msvc@1.7.11':
- optional: true
-
- '@rspack/binding@1.7.11':
- optionalDependencies:
- '@rspack/binding-darwin-arm64': 1.7.11
- '@rspack/binding-darwin-x64': 1.7.11
- '@rspack/binding-linux-arm64-gnu': 1.7.11
- '@rspack/binding-linux-arm64-musl': 1.7.11
- '@rspack/binding-linux-x64-gnu': 1.7.11
- '@rspack/binding-linux-x64-musl': 1.7.11
- '@rspack/binding-wasm32-wasi': 1.7.11
- '@rspack/binding-win32-arm64-msvc': 1.7.11
- '@rspack/binding-win32-ia32-msvc': 1.7.11
- '@rspack/binding-win32-x64-msvc': 1.7.11
-
- '@rspack/core@1.7.11':
- dependencies:
- '@module-federation/runtime-tools': 0.22.0
- '@rspack/binding': 1.7.11
- '@rspack/lite-tapable': 1.1.0
-
- '@rspack/lite-tapable@1.1.0': {}
-
- '@shikijs/core@4.4.3':
- dependencies:
- '@shikijs/primitive': 4.4.3
- '@shikijs/types': 4.4.3
- '@shikijs/vscode-textmate': 10.0.2
- '@types/hast': 3.0.5
- hast-util-to-html: 9.0.5
-
- '@shikijs/engine-javascript@4.4.3':
- dependencies:
- '@shikijs/types': 4.4.3
- '@shikijs/vscode-textmate': 10.0.2
- oniguruma-to-es: 4.3.6
-
- '@shikijs/engine-oniguruma@4.4.3':
- dependencies:
- '@shikijs/types': 4.4.3
- '@shikijs/vscode-textmate': 10.0.2
-
- '@shikijs/langs@4.4.3':
- dependencies:
- '@shikijs/types': 4.4.3
+ '@shikijs/langs@4.4.3':
+ resolution: {integrity: sha512-ePic0yfAJGOF83D5wBHK/00EjK65oahBYxFk5epgq33WRv7X9UuxLEV8PtR0szC0z8dl7INIpIodB99JRFlR+A==}
+ engines: {node: '>=20'}
'@shikijs/primitive@4.4.3':
- dependencies:
- '@shikijs/types': 4.4.3
- '@shikijs/vscode-textmate': 10.0.2
- '@types/hast': 3.0.5
-
- '@shikijs/rehype@4.4.3':
- dependencies:
- '@shikijs/types': 4.4.3
- '@types/hast': 3.0.5
- hast-util-to-string: 3.0.1
- shiki: 4.4.3
- unified: 11.0.5
- unist-util-visit: 5.1.0
-
- '@shikijs/themes@4.4.3':
- dependencies:
- '@shikijs/types': 4.4.3
-
- '@shikijs/transformers@4.4.3':
- dependencies:
- '@shikijs/core': 4.4.3
- '@shikijs/types': 4.4.3
-
- '@shikijs/types@4.4.3':
- dependencies:
- '@shikijs/vscode-textmate': 10.0.2
- '@types/hast': 3.0.5
-
- '@shikijs/vscode-textmate@10.0.2': {}
-
- '@sideway/address@4.1.5':
- dependencies:
- '@hapi/hoek': 9.3.0
-
- '@sideway/formula@3.0.1': {}
-
- '@sideway/pinpoint@2.0.0': {}
-
- '@sinclair/typebox@0.27.8': {}
-
- '@sindresorhus/is@4.6.0': {}
-
- '@sindresorhus/is@5.6.0': {}
-
- '@slorber/react-helmet-async@1.3.0(react-dom@19.2.8(react@19.2.8))(react@19.2.8)':
- dependencies:
- '@babel/runtime': 7.26.0
- invariant: 2.2.4
- prop-types: 15.8.1
- react: 19.2.8
- react-dom: 19.2.8(react@19.2.8)
- react-fast-compare: 3.2.2
- shallowequal: 1.1.0
-
- '@slorber/remark-comment@1.0.0':
- dependencies:
- micromark-factory-space: 1.1.0
- micromark-util-character: 1.2.0
- micromark-util-symbol: 1.1.0
-
- '@svgr/babel-plugin-add-jsx-attribute@5.4.0': {}
-
- '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
-
- '@svgr/babel-plugin-remove-jsx-attribute@5.4.0': {}
-
- '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
-
- '@svgr/babel-plugin-remove-jsx-empty-expression@5.0.1': {}
-
- '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
-
- '@svgr/babel-plugin-replace-jsx-attribute-value@5.0.1': {}
-
- '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
-
- '@svgr/babel-plugin-svg-dynamic-title@5.4.0': {}
-
- '@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
-
- '@svgr/babel-plugin-svg-em-dimensions@5.4.0': {}
-
- '@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
-
- '@svgr/babel-plugin-transform-react-native-svg@5.4.0': {}
-
- '@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
-
- '@svgr/babel-plugin-transform-svg-component@5.5.0': {}
-
- '@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
-
- '@svgr/babel-preset@5.5.0':
- dependencies:
- '@svgr/babel-plugin-add-jsx-attribute': 5.4.0
- '@svgr/babel-plugin-remove-jsx-attribute': 5.4.0
- '@svgr/babel-plugin-remove-jsx-empty-expression': 5.0.1
- '@svgr/babel-plugin-replace-jsx-attribute-value': 5.0.1
- '@svgr/babel-plugin-svg-dynamic-title': 5.4.0
- '@svgr/babel-plugin-svg-em-dimensions': 5.4.0
- '@svgr/babel-plugin-transform-react-native-svg': 5.4.0
- '@svgr/babel-plugin-transform-svg-component': 5.5.0
-
- '@svgr/babel-preset@8.1.0(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.26.0)
- '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.26.0)
- '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.26.0)
- '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.26.0)
- '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.26.0)
- '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.26.0)
- '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.26.0)
- '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.26.0)
-
- '@svgr/core@5.5.0':
- dependencies:
- '@svgr/plugin-jsx': 5.5.0
- camelcase: 6.3.0
- cosmiconfig: 7.1.0
- transitivePeerDependencies:
- - supports-color
-
- '@svgr/core@8.1.0(typescript@5.6.3)':
- dependencies:
- '@babel/core': 7.26.0
- '@svgr/babel-preset': 8.1.0(@babel/core@7.26.0)
- camelcase: 6.3.0
- cosmiconfig: 8.3.6(typescript@5.6.3)
- snake-case: 3.0.4
- transitivePeerDependencies:
- - supports-color
- - typescript
-
- '@svgr/hast-util-to-babel-ast@5.5.0':
- dependencies:
- '@babel/types': 7.26.0
-
- '@svgr/hast-util-to-babel-ast@8.0.0':
- dependencies:
- '@babel/types': 7.26.0
- entities: 4.5.0
-
- '@svgr/plugin-jsx@5.5.0':
- dependencies:
- '@babel/core': 7.26.0
- '@svgr/babel-preset': 5.5.0
- '@svgr/hast-util-to-babel-ast': 5.5.0
- svg-parser: 2.0.4
- transitivePeerDependencies:
- - supports-color
-
- '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@5.6.3))':
- dependencies:
- '@babel/core': 7.26.0
- '@svgr/babel-preset': 8.1.0(@babel/core@7.26.0)
- '@svgr/core': 8.1.0(typescript@5.6.3)
- '@svgr/hast-util-to-babel-ast': 8.0.0
- svg-parser: 2.0.4
- transitivePeerDependencies:
- - supports-color
-
- '@svgr/plugin-svgo@5.5.0':
- dependencies:
- cosmiconfig: 7.1.0
- deepmerge: 4.3.1
- svgo: 1.3.2
-
- '@svgr/plugin-svgo@8.1.0(@svgr/core@8.1.0(typescript@5.6.3))(typescript@5.6.3)':
- dependencies:
- '@svgr/core': 8.1.0(typescript@5.6.3)
- cosmiconfig: 8.3.6(typescript@5.6.3)
- deepmerge: 4.3.1
- svgo: 3.3.2
- transitivePeerDependencies:
- - typescript
-
- '@svgr/webpack@5.5.0':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/plugin-transform-react-constant-elements': 7.25.7(@babel/core@7.26.0)
- '@babel/preset-env': 7.25.9(@babel/core@7.26.0)
- '@babel/preset-react': 7.25.9(@babel/core@7.26.0)
- '@svgr/core': 5.5.0
- '@svgr/plugin-jsx': 5.5.0
- '@svgr/plugin-svgo': 5.5.0
- loader-utils: 2.0.4
- transitivePeerDependencies:
- - supports-color
-
- '@svgr/webpack@8.1.0(typescript@5.6.3)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/plugin-transform-react-constant-elements': 7.25.7(@babel/core@7.26.0)
- '@babel/preset-env': 7.25.9(@babel/core@7.26.0)
- '@babel/preset-react': 7.25.9(@babel/core@7.26.0)
- '@babel/preset-typescript': 7.26.0(@babel/core@7.26.0)
- '@svgr/core': 8.1.0(typescript@5.6.3)
- '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.6.3))
- '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0(typescript@5.6.3))(typescript@5.6.3)
- transitivePeerDependencies:
- - supports-color
- - typescript
-
- '@swc/core-darwin-arm64@1.16.0':
- optional: true
-
- '@swc/core-darwin-x64@1.16.0':
- optional: true
-
- '@swc/core-linux-arm-gnueabihf@1.16.0':
- optional: true
-
- '@swc/core-linux-arm64-gnu@1.16.0':
- optional: true
-
- '@swc/core-linux-arm64-musl@1.16.0':
- optional: true
-
- '@swc/core-linux-ppc64-gnu@1.16.0':
- optional: true
-
- '@swc/core-linux-s390x-gnu@1.16.0':
- optional: true
-
- '@swc/core-linux-x64-gnu@1.16.0':
- optional: true
-
- '@swc/core-linux-x64-musl@1.16.0':
- optional: true
-
- '@swc/core-win32-arm64-msvc@1.16.0':
- optional: true
-
- '@swc/core-win32-ia32-msvc@1.16.0':
- optional: true
-
- '@swc/core-win32-x64-msvc@1.16.0':
- optional: true
-
- '@swc/core@1.16.0':
- dependencies:
- '@swc/counter': 0.1.3
- '@swc/types': 0.1.28
- optionalDependencies:
- '@swc/core-darwin-arm64': 1.16.0
- '@swc/core-darwin-x64': 1.16.0
- '@swc/core-linux-arm-gnueabihf': 1.16.0
- '@swc/core-linux-arm64-gnu': 1.16.0
- '@swc/core-linux-arm64-musl': 1.16.0
- '@swc/core-linux-ppc64-gnu': 1.16.0
- '@swc/core-linux-s390x-gnu': 1.16.0
- '@swc/core-linux-x64-gnu': 1.16.0
- '@swc/core-linux-x64-musl': 1.16.0
- '@swc/core-win32-arm64-msvc': 1.16.0
- '@swc/core-win32-ia32-msvc': 1.16.0
- '@swc/core-win32-x64-msvc': 1.16.0
-
- '@swc/counter@0.1.3': {}
-
- '@swc/html-darwin-arm64@1.16.0':
- optional: true
-
- '@swc/html-darwin-x64@1.16.0':
- optional: true
-
- '@swc/html-linux-arm-gnueabihf@1.16.0':
- optional: true
-
- '@swc/html-linux-arm64-gnu@1.16.0':
- optional: true
-
- '@swc/html-linux-arm64-musl@1.16.0':
- optional: true
-
- '@swc/html-linux-ppc64-gnu@1.16.0':
- optional: true
-
- '@swc/html-linux-s390x-gnu@1.16.0':
- optional: true
-
- '@swc/html-linux-x64-gnu@1.16.0':
- optional: true
-
- '@swc/html-linux-x64-musl@1.16.0':
- optional: true
+ resolution: {integrity: sha512-m0wBeLDQDeIxRdUmrCPdQqfuUamDwRL5isCfYbguKD6NiaKpVbsv+3J81DyIKgNW5h4WAIIr8T4EkgQrBBxvaQ==}
+ engines: {node: '>=20'}
- '@swc/html-win32-arm64-msvc@1.16.0':
- optional: true
+ '@shikijs/rehype@4.4.3':
+ resolution: {integrity: sha512-vkG9jG1aRnrx05R31uAOKQHE8qpY7r1cBXE2sAZgFK2IaPnQHwaP4L1C6amQixmZ8thBsKwfbSsYxMDoo46UWQ==}
+ engines: {node: '>=20'}
- '@swc/html-win32-ia32-msvc@1.16.0':
- optional: true
+ '@shikijs/themes@4.4.3':
+ resolution: {integrity: sha512-w8UHjeUnIR965KMWJHUPXOc2mNJUnK3vpVLYLvw5IYU2mnTTJ89E24OrJDBNiJDQ0qzb0tc4l7mrIXx5cFeIyw==}
+ engines: {node: '>=20'}
- '@swc/html-win32-x64-msvc@1.16.0':
- optional: true
+ '@shikijs/types@4.4.3':
+ resolution: {integrity: sha512-UEJxmRR++MAGR6hugn0vgVS2W/6lWAts84FFSrnlH9sP0LNol7E5+NQ792pH8liWUhyMyjhTgSUH3k7iD7tc5g==}
+ engines: {node: '>=20'}
- '@swc/html@1.16.0':
- dependencies:
- '@swc/counter': 0.1.3
- optionalDependencies:
- '@swc/html-darwin-arm64': 1.16.0
- '@swc/html-darwin-x64': 1.16.0
- '@swc/html-linux-arm-gnueabihf': 1.16.0
- '@swc/html-linux-arm64-gnu': 1.16.0
- '@swc/html-linux-arm64-musl': 1.16.0
- '@swc/html-linux-ppc64-gnu': 1.16.0
- '@swc/html-linux-s390x-gnu': 1.16.0
- '@swc/html-linux-x64-gnu': 1.16.0
- '@swc/html-linux-x64-musl': 1.16.0
- '@swc/html-win32-arm64-msvc': 1.16.0
- '@swc/html-win32-ia32-msvc': 1.16.0
- '@swc/html-win32-x64-msvc': 1.16.0
+ '@shikijs/vscode-textmate@10.0.2':
+ resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==}
- '@swc/types@0.1.28':
- dependencies:
- '@swc/counter': 0.1.3
+ '@svgr/babel-plugin-add-jsx-attribute@8.0.0':
+ resolution: {integrity: sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@szmarczak/http-timer@5.0.1':
- dependencies:
- defer-to-connect: 2.0.1
+ '@svgr/babel-plugin-remove-jsx-attribute@8.0.0':
+ resolution: {integrity: sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@trysound/sax@0.2.0': {}
+ '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0':
+ resolution: {integrity: sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@tybys/wasm-util@0.10.1':
- dependencies:
- tslib: 2.8.0
- optional: true
+ '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0':
+ resolution: {integrity: sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@types/acorn@4.0.6':
- dependencies:
- '@types/estree': 1.0.6
+ '@svgr/babel-plugin-svg-dynamic-title@8.0.0':
+ resolution: {integrity: sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@types/body-parser@1.19.5':
- dependencies:
- '@types/connect': 3.4.38
- '@types/node': 22.8.1
+ '@svgr/babel-plugin-svg-em-dimensions@8.0.0':
+ resolution: {integrity: sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@types/bonjour@3.5.13':
- dependencies:
- '@types/node': 22.8.1
+ '@svgr/babel-plugin-transform-react-native-svg@8.1.0':
+ resolution: {integrity: sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@types/connect-history-api-fallback@1.5.4':
- dependencies:
- '@types/express-serve-static-core': 5.0.0
- '@types/node': 22.8.1
+ '@svgr/babel-plugin-transform-svg-component@8.0.0':
+ resolution: {integrity: sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==}
+ engines: {node: '>=12'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@types/connect@3.4.38':
- dependencies:
- '@types/node': 22.8.1
+ '@svgr/babel-preset@8.1.0':
+ resolution: {integrity: sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@types/d3-array@3.2.1': {}
+ '@svgr/core@8.1.0':
+ resolution: {integrity: sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==}
+ engines: {node: '>=14'}
- '@types/d3-axis@3.0.6':
- dependencies:
- '@types/d3-selection': 3.0.11
+ '@svgr/hast-util-to-babel-ast@8.0.0':
+ resolution: {integrity: sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==}
+ engines: {node: '>=14'}
- '@types/d3-brush@3.0.6':
- dependencies:
- '@types/d3-selection': 3.0.11
+ '@svgr/plugin-jsx@8.1.0':
+ resolution: {integrity: sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@svgr/core': '*'
- '@types/d3-chord@3.0.6': {}
+ '@swc/helpers@0.5.23':
+ resolution: {integrity: sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==}
- '@types/d3-color@3.1.3': {}
+ '@ts-morph/common@0.28.1':
+ resolution: {integrity: sha512-W74iWf7ILp1ZKNYXY5qbddNaml7e9Sedv5lvU1V8lftlitkc9Pq1A+jlH23ltDgWYeZFFEqGCD1Ies9hqu3O+g==}
- '@types/d3-contour@3.0.6':
- dependencies:
- '@types/d3-array': 3.2.1
- '@types/geojson': 7946.0.14
+ '@tybys/wasm-util@0.10.3':
+ resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==}
- '@types/d3-delaunay@6.0.4': {}
+ '@types/d3-scale-chromatic@3.1.0':
+ resolution: {integrity: sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==}
- '@types/d3-dispatch@3.0.6': {}
+ '@types/d3-scale@4.0.9':
+ resolution: {integrity: sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==}
- '@types/d3-drag@3.0.7':
- dependencies:
- '@types/d3-selection': 3.0.11
+ '@types/d3-time@3.0.4':
+ resolution: {integrity: sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==}
- '@types/d3-dsv@3.0.7': {}
+ '@types/debug@4.1.13':
+ resolution: {integrity: sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==}
- '@types/d3-ease@3.0.2': {}
+ '@types/estree-jsx@1.0.5':
+ resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==}
- '@types/d3-fetch@3.0.7':
- dependencies:
- '@types/d3-dsv': 3.0.7
+ '@types/estree@1.0.9':
+ resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==}
- '@types/d3-force@3.0.10': {}
+ '@types/hast@3.0.5':
+ resolution: {integrity: sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==}
- '@types/d3-format@3.0.4': {}
+ '@types/mdast@3.0.15':
+ resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==}
- '@types/d3-geo@3.1.0':
- dependencies:
- '@types/geojson': 7946.0.14
+ '@types/mdast@4.0.4':
+ resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==}
- '@types/d3-hierarchy@3.1.7': {}
+ '@types/mdx@2.0.14':
+ resolution: {integrity: sha512-T48PeuJtvLosNTPVhfnIp3i/n3a4g4Bad7YCq5k64D4u7NwDrAotikQ+5+sjtUvBmxCMlbo3dVL+C2dP0rWHzg==}
- '@types/d3-interpolate@3.0.4':
- dependencies:
- '@types/d3-color': 3.1.3
+ '@types/ms@2.1.0':
+ resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
- '@types/d3-path@3.1.0': {}
+ '@types/node@22.20.1':
+ resolution: {integrity: sha512-EANqOCF9QFyra+4pfxUcX9STKJpCLjMbObVzljIJomAWSnuSIEAvyzEU53GaajbXJEgdh0iEcPL+DGvpUd4k1Q==}
- '@types/d3-polygon@3.0.2': {}
+ '@types/node@25.9.5':
+ resolution: {integrity: sha512-OScDchr2fwuUmWdf4kZ9h7PcJiYDVInhJizG/biAq3cAvqwYktuy/TYGGdZNMtNTFUP7rnb0NU4TUdm82kt4Rg==}
- '@types/d3-quadtree@3.0.6': {}
+ '@types/react-dom@19.2.5':
+ resolution: {integrity: sha512-fMPwH9v7r/pp43yUd2/Mbiex5KouJwwR3dzHkhLREUC6764VyDsqxhAxv6OFEYR1RhjOyD1naqba8ECDBe7ZQg==}
+ peerDependencies:
+ '@types/react': ^19.2.0
- '@types/d3-random@3.0.3': {}
+ '@types/react@19.2.18':
+ resolution: {integrity: sha512-AnzbBERsrLKtk2XSfTbYRLjQPdy116Sty4q+T+Bp3IC4l6jNBvreVPAHmpq9qhXQM7CXZPjLVmGMw9sy+hxQ3w==}
- '@types/d3-scale-chromatic@3.0.3': {}
+ '@types/supports-color@8.1.3':
+ resolution: {integrity: sha512-Hy6UMpxhE3j1tLpl27exp1XqHD7n8chAiNPzWfz16LPZoMMoSc4dzLl6w9qijkEb/r5O1ozdu1CWGA2L83ZeZg==}
- '@types/d3-scale@4.0.8':
- dependencies:
- '@types/d3-time': 3.0.3
+ '@types/trusted-types@2.0.7':
+ resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==}
- '@types/d3-selection@3.0.11': {}
+ '@types/unist@2.0.11':
+ resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==}
- '@types/d3-shape@3.1.6':
- dependencies:
- '@types/d3-path': 3.1.0
+ '@types/unist@3.0.3':
+ resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
- '@types/d3-time-format@4.0.3': {}
+ '@ungap/structured-clone@1.3.3':
+ resolution: {integrity: sha512-60YRaenCQcVjYEKOcG824+DRGGIQ3VKErcBoAEDJZz5bKIs2ZG+X/H9Nk+Q6EVkwJk5QNApxbrc5QtBSwtrXAg==}
- '@types/d3-time@3.0.3': {}
+ '@unhead/react@2.1.17':
+ resolution: {integrity: sha512-KmcYksDjlLozL0fxUjIDwH/0k6+Lg2HWHLUPlkRW8Gl08hdB1AbLB5iU9QxFvkaT8p0Q4dFEqZWnz3g6RMeiRA==}
+ peerDependencies:
+ react: '>=18.3.1'
- '@types/d3-timer@3.0.2': {}
+ acorn-jsx@5.3.2:
+ resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
+ peerDependencies:
+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
- '@types/d3-transition@3.0.9':
- dependencies:
- '@types/d3-selection': 3.0.11
+ acorn@8.18.0:
+ resolution: {integrity: sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
- '@types/d3-zoom@3.0.8':
- dependencies:
- '@types/d3-interpolate': 3.0.4
- '@types/d3-selection': 3.0.11
+ ansi-regex@6.3.0:
+ resolution: {integrity: sha512-WpDfL7NO6j7tH88IDBNVdUJxDh9nmCteAVW9dsep846XdwF4naCBK+/tGLX3KJgcpgMRXCFlTM2hKGoK9FsdrQ==}
+ engines: {node: '>=12'}
- '@types/d3@7.4.3':
- dependencies:
- '@types/d3-array': 3.2.1
- '@types/d3-axis': 3.0.6
- '@types/d3-brush': 3.0.6
- '@types/d3-chord': 3.0.6
- '@types/d3-color': 3.1.3
- '@types/d3-contour': 3.0.6
- '@types/d3-delaunay': 6.0.4
- '@types/d3-dispatch': 3.0.6
- '@types/d3-drag': 3.0.7
- '@types/d3-dsv': 3.0.7
- '@types/d3-ease': 3.0.2
- '@types/d3-fetch': 3.0.7
- '@types/d3-force': 3.0.10
- '@types/d3-format': 3.0.4
- '@types/d3-geo': 3.1.0
- '@types/d3-hierarchy': 3.1.7
- '@types/d3-interpolate': 3.0.4
- '@types/d3-path': 3.1.0
- '@types/d3-polygon': 3.0.2
- '@types/d3-quadtree': 3.0.6
- '@types/d3-random': 3.0.3
- '@types/d3-scale': 4.0.8
- '@types/d3-scale-chromatic': 3.0.3
- '@types/d3-selection': 3.0.11
- '@types/d3-shape': 3.1.6
- '@types/d3-time': 3.0.3
- '@types/d3-time-format': 4.0.3
- '@types/d3-timer': 3.0.2
- '@types/d3-transition': 3.0.9
- '@types/d3-zoom': 3.0.8
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
- '@types/debug@4.1.12':
- dependencies:
- '@types/ms': 0.7.34
+ astring@1.9.0:
+ resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==}
+ hasBin: true
- '@types/estree-jsx@1.0.5':
- dependencies:
- '@types/estree': 1.0.6
+ bail@2.0.2:
+ resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==}
- '@types/estree@1.0.6': {}
+ balanced-match@4.0.4:
+ resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==}
+ engines: {node: 18 || 20 || >=22}
- '@types/express-serve-static-core@4.19.6':
- dependencies:
- '@types/node': 22.8.1
- '@types/qs': 6.9.16
- '@types/range-parser': 1.2.7
- '@types/send': 0.17.4
+ baseline-browser-mapping@2.11.19:
+ resolution: {integrity: sha512-Grytf1xOxOEMTGRwx6rLGKkTabd4vMg3VrKdj/7joCmV0qgh4QwMMO6xh34YEXQqirAuUdgQGa5orJQQ+69RBw==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
- '@types/express-serve-static-core@5.0.0':
- dependencies:
- '@types/node': 22.8.1
- '@types/qs': 6.9.16
- '@types/range-parser': 1.2.7
- '@types/send': 0.17.4
+ big.js@5.2.2:
+ resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==}
- '@types/express@4.17.21':
- dependencies:
- '@types/body-parser': 1.19.5
- '@types/express-serve-static-core': 4.19.6
- '@types/qs': 6.9.16
- '@types/serve-static': 1.15.7
+ body-scroll-lock@4.0.0-beta.0:
+ resolution: {integrity: sha512-a7tP5+0Mw3YlUJcGAKUqIBkYYGlYxk2fnCasq/FUph1hadxlTRjF+gAcZksxANnaMnALjxEddmSi/H3OR8ugcQ==}
- '@types/geojson@7946.0.14': {}
+ brace-expansion@5.0.9:
+ resolution: {integrity: sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==}
+ engines: {node: 20 || >=22}
- '@types/hast@3.0.4':
- dependencies:
- '@types/unist': 3.0.3
+ browserslist@4.28.8:
+ resolution: {integrity: sha512-V2NpofLblG64mfOtSgDhOJESZEGogzDMBv/q+W6oc4LXWP/q75eOXoOaaOu1EOadB9U4Bwx/e0yzbvwKH8zalA==}
+ engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+ hasBin: true
- '@types/hast@3.0.5':
- dependencies:
- '@types/unist': 3.0.3
+ callsites@3.1.0:
+ resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
+ engines: {node: '>=6'}
- '@types/history@4.7.11': {}
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
- '@types/html-minifier-terser@6.1.0': {}
+ caniuse-lite@1.0.30001810:
+ resolution: {integrity: sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg==}
- '@types/http-cache-semantics@4.0.4': {}
+ ccount@2.0.1:
+ resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
- '@types/http-errors@2.0.4': {}
+ character-entities-html4@2.1.0:
+ resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==}
- '@types/http-proxy@1.17.15':
- dependencies:
- '@types/node': 22.8.1
+ character-entities-legacy@3.0.0:
+ resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==}
- '@types/istanbul-lib-coverage@2.0.6': {}
+ character-entities@2.0.2:
+ resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==}
- '@types/istanbul-lib-report@3.0.3':
- dependencies:
- '@types/istanbul-lib-coverage': 2.0.6
+ character-reference-invalid@2.0.1:
+ resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==}
- '@types/istanbul-reports@3.0.4':
- dependencies:
- '@types/istanbul-lib-report': 3.0.3
+ chokidar@5.0.0:
+ resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==}
+ engines: {node: '>= 20.19.0'}
- '@types/json-schema@7.0.15': {}
+ clsx@2.1.1:
+ resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
+ engines: {node: '>=6'}
- '@types/mdast@4.0.4':
- dependencies:
- '@types/unist': 3.0.3
+ code-block-writer@13.0.3:
+ resolution: {integrity: sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg==}
- '@types/mdx@2.0.13': {}
+ collapse-white-space@2.1.0:
+ resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==}
- '@types/mime@1.3.5': {}
+ colorjs.io@0.7.1:
+ resolution: {integrity: sha512-LY7OHnJZxHwT5UlzNa9bbhHHDbzB6yE5+3MIPwJEQKRvSCt/T4G7epsj+9j2BExUIIfXFIJGsIXUKdfrK9Q5tA==}
- '@types/ms@0.7.34': {}
+ comma-separated-tokens@2.0.3:
+ resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
- '@types/node-forge@1.3.11':
- dependencies:
- '@types/node': 22.8.1
+ commander@7.2.0:
+ resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
+ engines: {node: '>= 10'}
- '@types/node@17.0.45': {}
+ commander@8.3.0:
+ resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==}
+ engines: {node: '>= 12'}
- '@types/node@22.8.1':
- dependencies:
- undici-types: 6.19.8
+ compute-scroll-into-view@3.1.1:
+ resolution: {integrity: sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==}
- '@types/parse-json@4.0.2': {}
+ confbox@0.1.8:
+ resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==}
- '@types/prismjs@1.26.4': {}
+ confbox@0.2.4:
+ resolution: {integrity: sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==}
- '@types/prop-types@15.7.13': {}
+ convert-source-map@2.0.0:
+ resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
- '@types/q@1.5.8': {}
+ cookie@1.1.1:
+ resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==}
+ engines: {node: '>=18'}
- '@types/qs@6.9.16': {}
+ copy-to-clipboard@3.3.3:
+ resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==}
- '@types/range-parser@1.2.7': {}
+ cose-base@1.0.3:
+ resolution: {integrity: sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==}
- '@types/react-router-config@5.0.11':
- dependencies:
- '@types/history': 4.7.11
- '@types/react': 18.3.12
- '@types/react-router': 5.1.20
+ cosmiconfig@8.3.6:
+ resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ typescript: '>=4.9.5'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
- '@types/react-router-dom@5.3.3':
- dependencies:
- '@types/history': 4.7.11
- '@types/react': 18.3.12
- '@types/react-router': 5.1.20
+ csstype@3.2.3:
+ resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==}
- '@types/react-router@5.1.20':
- dependencies:
- '@types/history': 4.7.11
- '@types/react': 18.3.12
+ cytoscape-cose-bilkent@4.1.0:
+ resolution: {integrity: sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==}
+ peerDependencies:
+ cytoscape: ^3.2.0
- '@types/react@18.3.12':
- dependencies:
- '@types/prop-types': 15.7.13
- csstype: 3.1.3
+ cytoscape@3.34.1:
+ resolution: {integrity: sha512-Lr0RvH9H75y9ar8h9Toy6u4lxRSCcxUq+hHcQ26sVWo6BnaQp1gwEZOYqwuYTZhyW7npyKnNLP8oJ2p1/3OZ7g==}
+ engines: {node: '>=0.10'}
- '@types/retry@0.12.2': {}
+ d3-array@2.12.1:
+ resolution: {integrity: sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==}
- '@types/sax@1.2.7':
- dependencies:
- '@types/node': 22.8.1
+ d3-array@3.2.4:
+ resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==}
+ engines: {node: '>=12'}
- '@types/send@0.17.4':
- dependencies:
- '@types/mime': 1.3.5
- '@types/node': 22.8.1
+ d3-axis@3.0.0:
+ resolution: {integrity: sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==}
+ engines: {node: '>=12'}
- '@types/serve-index@1.9.4':
- dependencies:
- '@types/express': 4.17.21
+ d3-brush@3.0.0:
+ resolution: {integrity: sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==}
+ engines: {node: '>=12'}
- '@types/serve-static@1.15.7':
- dependencies:
- '@types/http-errors': 2.0.4
- '@types/node': 22.8.1
- '@types/send': 0.17.4
+ d3-chord@3.0.1:
+ resolution: {integrity: sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==}
+ engines: {node: '>=12'}
- '@types/sockjs@0.3.36':
- dependencies:
- '@types/node': 22.8.1
+ d3-color@3.1.0:
+ resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==}
+ engines: {node: '>=12'}
- '@types/trusted-types@2.0.7':
- optional: true
+ d3-contour@4.0.2:
+ resolution: {integrity: sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==}
+ engines: {node: '>=12'}
- '@types/unist@2.0.11': {}
+ d3-delaunay@6.0.4:
+ resolution: {integrity: sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==}
+ engines: {node: '>=12'}
- '@types/unist@3.0.3': {}
+ d3-dispatch@3.0.1:
+ resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==}
+ engines: {node: '>=12'}
- '@types/ws@8.5.12':
- dependencies:
- '@types/node': 22.8.1
+ d3-drag@3.0.0:
+ resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==}
+ engines: {node: '>=12'}
- '@types/yargs-parser@21.0.3': {}
+ d3-dsv@3.0.1:
+ resolution: {integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==}
+ engines: {node: '>=12'}
+ hasBin: true
- '@types/yargs@17.0.33':
- dependencies:
- '@types/yargs-parser': 21.0.3
+ d3-ease@3.0.1:
+ resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==}
+ engines: {node: '>=12'}
- '@ungap/structured-clone@1.2.0': {}
+ d3-fetch@3.0.1:
+ resolution: {integrity: sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==}
+ engines: {node: '>=12'}
- '@webassemblyjs/ast@1.12.1':
- dependencies:
- '@webassemblyjs/helper-numbers': 1.11.6
- '@webassemblyjs/helper-wasm-bytecode': 1.11.6
+ d3-force@3.0.0:
+ resolution: {integrity: sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==}
+ engines: {node: '>=12'}
- '@webassemblyjs/floating-point-hex-parser@1.11.6': {}
+ d3-format@3.1.2:
+ resolution: {integrity: sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==}
+ engines: {node: '>=12'}
- '@webassemblyjs/helper-api-error@1.11.6': {}
+ d3-geo@3.1.1:
+ resolution: {integrity: sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==}
+ engines: {node: '>=12'}
- '@webassemblyjs/helper-buffer@1.12.1': {}
+ d3-hierarchy@3.1.2:
+ resolution: {integrity: sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==}
+ engines: {node: '>=12'}
- '@webassemblyjs/helper-numbers@1.11.6':
- dependencies:
- '@webassemblyjs/floating-point-hex-parser': 1.11.6
- '@webassemblyjs/helper-api-error': 1.11.6
- '@xtuc/long': 4.2.2
+ d3-interpolate@3.0.1:
+ resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==}
+ engines: {node: '>=12'}
- '@webassemblyjs/helper-wasm-bytecode@1.11.6': {}
+ d3-path@1.0.9:
+ resolution: {integrity: sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==}
- '@webassemblyjs/helper-wasm-section@1.12.1':
- dependencies:
- '@webassemblyjs/ast': 1.12.1
- '@webassemblyjs/helper-buffer': 1.12.1
- '@webassemblyjs/helper-wasm-bytecode': 1.11.6
- '@webassemblyjs/wasm-gen': 1.12.1
+ d3-path@3.1.0:
+ resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==}
+ engines: {node: '>=12'}
- '@webassemblyjs/ieee754@1.11.6':
- dependencies:
- '@xtuc/ieee754': 1.2.0
+ d3-polygon@3.0.1:
+ resolution: {integrity: sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==}
+ engines: {node: '>=12'}
- '@webassemblyjs/leb128@1.11.6':
- dependencies:
- '@xtuc/long': 4.2.2
+ d3-quadtree@3.0.1:
+ resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==}
+ engines: {node: '>=12'}
- '@webassemblyjs/utf8@1.11.6': {}
+ d3-random@3.0.1:
+ resolution: {integrity: sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==}
+ engines: {node: '>=12'}
- '@webassemblyjs/wasm-edit@1.12.1':
- dependencies:
- '@webassemblyjs/ast': 1.12.1
- '@webassemblyjs/helper-buffer': 1.12.1
- '@webassemblyjs/helper-wasm-bytecode': 1.11.6
- '@webassemblyjs/helper-wasm-section': 1.12.1
- '@webassemblyjs/wasm-gen': 1.12.1
- '@webassemblyjs/wasm-opt': 1.12.1
- '@webassemblyjs/wasm-parser': 1.12.1
- '@webassemblyjs/wast-printer': 1.12.1
+ d3-sankey@0.12.3:
+ resolution: {integrity: sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==}
- '@webassemblyjs/wasm-gen@1.12.1':
- dependencies:
- '@webassemblyjs/ast': 1.12.1
- '@webassemblyjs/helper-wasm-bytecode': 1.11.6
- '@webassemblyjs/ieee754': 1.11.6
- '@webassemblyjs/leb128': 1.11.6
- '@webassemblyjs/utf8': 1.11.6
+ d3-scale-chromatic@3.1.0:
+ resolution: {integrity: sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==}
+ engines: {node: '>=12'}
- '@webassemblyjs/wasm-opt@1.12.1':
- dependencies:
- '@webassemblyjs/ast': 1.12.1
- '@webassemblyjs/helper-buffer': 1.12.1
- '@webassemblyjs/wasm-gen': 1.12.1
- '@webassemblyjs/wasm-parser': 1.12.1
+ d3-scale@4.0.2:
+ resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==}
+ engines: {node: '>=12'}
- '@webassemblyjs/wasm-parser@1.12.1':
- dependencies:
- '@webassemblyjs/ast': 1.12.1
- '@webassemblyjs/helper-api-error': 1.11.6
- '@webassemblyjs/helper-wasm-bytecode': 1.11.6
- '@webassemblyjs/ieee754': 1.11.6
- '@webassemblyjs/leb128': 1.11.6
- '@webassemblyjs/utf8': 1.11.6
+ d3-selection@3.0.0:
+ resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==}
+ engines: {node: '>=12'}
- '@webassemblyjs/wast-printer@1.12.1':
- dependencies:
- '@webassemblyjs/ast': 1.12.1
- '@xtuc/long': 4.2.2
+ d3-shape@1.3.7:
+ resolution: {integrity: sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==}
- '@xtuc/ieee754@1.2.0': {}
+ d3-shape@3.2.0:
+ resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==}
+ engines: {node: '>=12'}
- '@xtuc/long@4.2.2': {}
+ d3-time-format@4.1.0:
+ resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==}
+ engines: {node: '>=12'}
- accepts@1.3.8:
- dependencies:
- mime-types: 2.1.35
- negotiator: 0.6.3
+ d3-time@3.1.0:
+ resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==}
+ engines: {node: '>=12'}
- acorn-import-attributes@1.9.5(acorn@8.14.0):
- dependencies:
- acorn: 8.14.0
+ d3-timer@3.0.1:
+ resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==}
+ engines: {node: '>=12'}
- acorn-jsx@5.3.2(acorn@8.14.0):
- dependencies:
- acorn: 8.14.0
+ d3-transition@3.0.1:
+ resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==}
+ engines: {node: '>=12'}
+ peerDependencies:
+ d3-selection: 2 - 3
- acorn-walk@8.3.4:
- dependencies:
- acorn: 8.14.0
+ d3-zoom@3.0.0:
+ resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==}
+ engines: {node: '>=12'}
- acorn@8.14.0: {}
+ d3@7.9.0:
+ resolution: {integrity: sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==}
+ engines: {node: '>=12'}
- address@2.0.3: {}
+ dagre-d3-es@7.0.13:
+ resolution: {integrity: sha512-efEhnxpSuwpYOKRm/L5KbqoZmNNukHa/Flty4Wp62JRvgH2ojwVgPgdYyr4twpieZnyRDdIH7PY2mopX26+j2Q==}
- aggregate-error@3.1.0:
- dependencies:
- clean-stack: 2.2.0
- indent-string: 4.0.0
+ dayjs@1.11.23:
+ resolution: {integrity: sha512-QDTCU0M0MxR3hQfnlDJfwekQiaanm1ubOD231u73WBckQ/fsamwRLiE2GBz6D3a/xF1NgfiDLJjXBa1hYOYTtQ==}
- ajv-formats@2.1.1(ajv@8.17.1):
- optionalDependencies:
- ajv: 8.17.1
+ debug@4.4.3:
+ resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
- ajv-keywords@3.5.2(ajv@6.12.6):
- dependencies:
- ajv: 6.12.6
+ decode-named-character-reference@1.3.0:
+ resolution: {integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==}
- ajv-keywords@5.1.0(ajv@8.17.1):
- dependencies:
- ajv: 8.17.1
- fast-deep-equal: 3.1.3
+ deepmerge@4.3.1:
+ resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
+ engines: {node: '>=0.10.0'}
- ajv@6.12.6:
- dependencies:
- fast-deep-equal: 3.1.3
- fast-json-stable-stringify: 2.1.0
- json-schema-traverse: 0.4.1
- uri-js: 4.4.1
+ delaunator@5.1.0:
+ resolution: {integrity: sha512-AGrQ4QSgssa1NGmWmLPqN5NY2KajF5MqxetNEO+o0n3ZwZZeTmt7bBnvzHWrmkZFxGgr4HdyFgelzgi06otLuQ==}
- ajv@8.17.1:
- dependencies:
- fast-deep-equal: 3.1.3
- fast-uri: 3.0.3
- json-schema-traverse: 1.0.0
- require-from-string: 2.0.2
+ dequal@2.0.3:
+ resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
+ engines: {node: '>=6'}
- algoliasearch-helper@3.26.1(algoliasearch@5.46.2):
- dependencies:
- '@algolia/events': 4.0.1
- algoliasearch: 5.46.2
+ detect-libc@2.1.2:
+ resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
+ engines: {node: '>=8'}
- algoliasearch@5.46.2:
- dependencies:
- '@algolia/abtesting': 1.12.2
- '@algolia/client-abtesting': 5.46.2
- '@algolia/client-analytics': 5.46.2
- '@algolia/client-common': 5.46.2
- '@algolia/client-insights': 5.46.2
- '@algolia/client-personalization': 5.46.2
- '@algolia/client-query-suggestions': 5.46.2
- '@algolia/client-search': 5.46.2
- '@algolia/ingestion': 1.46.2
- '@algolia/monitoring': 1.46.2
- '@algolia/recommend': 5.46.2
- '@algolia/requester-browser-xhr': 5.46.2
- '@algolia/requester-fetch': 5.46.2
- '@algolia/requester-node-http': 5.46.2
+ devlop@1.1.0:
+ resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
- ansi-align@3.0.1:
- dependencies:
- string-width: 4.2.3
+ diff@5.2.2:
+ resolution: {integrity: sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A==}
+ engines: {node: '>=0.3.1'}
- ansi-html-community@0.0.8: {}
+ dompurify@3.4.14:
+ resolution: {integrity: sha512-dVoH9z+MY+C9IilgGCk3YfFqjLi3fChm2OiKJMzh6axrJ5qwxqWaZamgmHrpv22CN/KdbZJuGEGgfQoL00LTdg==}
- ansi-regex@5.0.1: {}
+ dot-case@3.0.4:
+ resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==}
- ansi-regex@6.1.0: {}
+ eastasianwidth@0.2.0:
+ resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
- ansi-styles@3.2.1:
- dependencies:
- color-convert: 1.9.3
+ electron-to-chromium@1.5.415:
+ resolution: {integrity: sha512-958V+Kbhtgz+SxXeEVKBjrlKRBIDAYvUJfwhjxMZ5S6ut9jAl7l9ZKBkBrvjyjZE36PabLUo2L8kEeV5O4vgJg==}
- ansi-styles@4.3.0:
- dependencies:
- color-convert: 2.0.1
+ elkjs@0.9.3:
+ resolution: {integrity: sha512-f/ZeWvW/BCXbhGEf1Ujp29EASo/lk1FDnETgNKwJrsVvGZhUWCZyg3xLJjAsxfOmt8KjswHmI5EwCQcPMpOYhQ==}
- ansi-styles@6.2.1: {}
+ emoji-regex@10.6.0:
+ resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==}
- ansis@3.17.0: {}
+ emojis-list@3.0.0:
+ resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==}
+ engines: {node: '>= 4'}
- anymatch@3.1.3:
- dependencies:
- normalize-path: 3.0.0
- picomatch: 2.3.1
+ entities@4.5.0:
+ resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
+ engines: {node: '>=0.12'}
- arg@5.0.2: {}
+ entities@6.0.1:
+ resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==}
+ engines: {node: '>=0.12'}
- argparse@1.0.10:
- dependencies:
- sprintf-js: 1.0.3
+ error-ex@1.3.4:
+ resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==}
- argparse@2.0.1: {}
+ esast-util-from-estree@2.0.0:
+ resolution: {integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==}
- array-buffer-byte-length@1.0.1:
- dependencies:
- call-bind: 1.0.7
- is-array-buffer: 3.0.4
+ esast-util-from-js@2.0.1:
+ resolution: {integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==}
- array-flatten@1.1.1: {}
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
- array-union@2.1.0: {}
+ escape-string-regexp@5.0.0:
+ resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
+ engines: {node: '>=12'}
- array-union@3.0.1: {}
+ estree-util-attach-comments@3.0.0:
+ resolution: {integrity: sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==}
- array.prototype.reduce@1.0.7:
- dependencies:
- call-bind: 1.0.7
- define-properties: 1.2.1
- es-abstract: 1.23.3
- es-array-method-boxes-properly: 1.0.0
- es-errors: 1.3.0
- es-object-atoms: 1.0.0
- is-string: 1.0.7
+ estree-util-build-jsx@3.0.1:
+ resolution: {integrity: sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==}
- arraybuffer.prototype.slice@1.0.3:
- dependencies:
- array-buffer-byte-length: 1.0.1
- call-bind: 1.0.7
- define-properties: 1.2.1
- es-abstract: 1.23.3
- es-errors: 1.3.0
- get-intrinsic: 1.2.4
- is-array-buffer: 3.0.4
- is-shared-array-buffer: 1.0.3
+ estree-util-is-identifier-name@3.0.0:
+ resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==}
- astring@1.9.0: {}
+ estree-util-scope@1.0.0:
+ resolution: {integrity: sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==}
- autoprefixer@10.4.23(postcss@8.5.6):
- dependencies:
- browserslist: 4.28.1
- caniuse-lite: 1.0.30001761
- fraction.js: 5.3.4
- picocolors: 1.1.1
- postcss: 8.5.6
- postcss-value-parser: 4.2.0
+ estree-util-to-js@2.0.0:
+ resolution: {integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==}
- available-typed-arrays@1.0.7:
- dependencies:
- possible-typed-array-names: 1.0.0
+ estree-util-visit@2.0.0:
+ resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==}
- babel-loader@9.2.1(@babel/core@7.26.0)(webpack@5.95.0(@swc/core@1.16.0)):
- dependencies:
- '@babel/core': 7.26.0
- find-cache-dir: 4.0.0
- schema-utils: 4.2.0
- webpack: 5.95.0(@swc/core@1.16.0)
+ estree-walker@3.0.3:
+ resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
- babel-plugin-dynamic-import-node@2.3.3:
- dependencies:
- object.assign: 4.1.5
+ exsolve@1.1.1:
+ resolution: {integrity: sha512-9U/jZUgjnSGyntRr6y5Muu1MJcwFl6kPu7k8qLF0IMNfLqvw0NZ4nnVDq0RVoZ0RvCyumib4Ez3KYrVfilrw+g==}
- babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.26.0):
- dependencies:
- '@babel/compat-data': 7.26.0
- '@babel/core': 7.26.0
- '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.26.0)
- semver: 6.3.1
- transitivePeerDependencies:
- - supports-color
+ extend@3.0.2:
+ resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
- babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.26.0):
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.26.0)
- core-js-compat: 3.38.1
- transitivePeerDependencies:
- - supports-color
+ fdir@6.5.0:
+ resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
+ engines: {node: '>=12.0.0'}
+ peerDependencies:
+ picomatch: ^3 || ^4
+ peerDependenciesMeta:
+ picomatch:
+ optional: true
- babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.26.0):
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.26.0)
- transitivePeerDependencies:
- - supports-color
+ flat@6.0.1:
+ resolution: {integrity: sha512-/3FfIa8mbrg3xE7+wAhWeV+bd7L2Mof+xtZb5dRDKZ+wDvYJK4WDYeIOuOhre5Yv5aQObZrlbRmk3RTSiuQBtw==}
+ engines: {node: '>=18'}
+ hasBin: true
- bail@2.0.2: {}
+ flexsearch@0.8.212:
+ resolution: {integrity: sha512-wSyJr1GUWoOOIISRu+X2IXiOcVfg9qqBRyCPRUdLMIGJqPzMo+jMRlvE83t14v1j0dRMEaBbER/adQjp6Du2pw==}
- balanced-match@1.0.2: {}
+ gensync@1.0.0-beta.2:
+ resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
+ engines: {node: '>=6.9.0'}
- baseline-browser-mapping@2.9.11: {}
+ get-east-asian-width@1.6.0:
+ resolution: {integrity: sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==}
+ engines: {node: '>=18'}
- batch@0.6.1: {}
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
- big.js@5.2.2: {}
+ hast-util-from-parse5@8.0.3:
+ resolution: {integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==}
- binary-extensions@2.3.0: {}
-
- body-parser@1.20.3:
- dependencies:
- bytes: 3.1.2
- content-type: 1.0.5
- debug: 2.6.9
- depd: 2.0.0
- destroy: 1.2.0
- http-errors: 2.0.0
- iconv-lite: 0.4.24
- on-finished: 2.4.1
- qs: 6.13.0
- raw-body: 2.5.2
- type-is: 1.6.18
- unpipe: 1.0.0
- transitivePeerDependencies:
- - supports-color
+ hast-util-heading-rank@3.0.0:
+ resolution: {integrity: sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==}
- bonjour-service@1.2.1:
- dependencies:
- fast-deep-equal: 3.1.3
- multicast-dns: 7.2.5
+ hast-util-is-element@3.0.0:
+ resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==}
- boolbase@1.0.0: {}
+ hast-util-parse-selector@4.0.0:
+ resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==}
- boxen@6.2.1:
- dependencies:
- ansi-align: 3.0.1
- camelcase: 6.3.0
- chalk: 4.1.2
- cli-boxes: 3.0.0
- string-width: 5.1.2
- type-fest: 2.19.0
- widest-line: 4.0.1
- wrap-ansi: 8.1.0
+ hast-util-raw@9.1.0:
+ resolution: {integrity: sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==}
- boxen@7.1.1:
- dependencies:
- ansi-align: 3.0.1
- camelcase: 7.0.1
- chalk: 5.3.0
- cli-boxes: 3.0.0
- string-width: 5.1.2
- type-fest: 2.19.0
- widest-line: 4.0.1
- wrap-ansi: 8.1.0
+ hast-util-to-estree@3.1.3:
+ resolution: {integrity: sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==}
- brace-expansion@1.1.11:
- dependencies:
- balanced-match: 1.0.2
- concat-map: 0.0.1
+ hast-util-to-html@9.0.5:
+ resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==}
- braces@3.0.3:
- dependencies:
- fill-range: 7.1.1
+ hast-util-to-jsx-runtime@2.3.6:
+ resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==}
- browserslist@4.24.2:
- dependencies:
- caniuse-lite: 1.0.30001673
- electron-to-chromium: 1.5.47
- node-releases: 2.0.18
- update-browserslist-db: 1.1.1(browserslist@4.24.2)
+ hast-util-to-parse5@8.0.1:
+ resolution: {integrity: sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==}
- browserslist@4.28.1:
- dependencies:
- baseline-browser-mapping: 2.9.11
- caniuse-lite: 1.0.30001761
- electron-to-chromium: 1.5.267
- node-releases: 2.0.27
- update-browserslist-db: 1.2.3(browserslist@4.28.1)
+ hast-util-to-string@3.0.1:
+ resolution: {integrity: sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==}
- buffer-from@1.1.2: {}
+ hast-util-whitespace@3.0.0:
+ resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==}
- bundle-name@4.1.0:
- dependencies:
- run-applescript: 7.1.0
+ hastscript@9.0.1:
+ resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==}
- bytes@3.0.0: {}
+ hookable@6.1.1:
+ resolution: {integrity: sha512-U9LYDy1CwhMCnprUfeAZWZGByVbhd54hwepegYTK7Pi5NvqEj63ifz5z+xukznehT7i6NIZRu89Ay1AZmRsLEQ==}
- bytes@3.1.2: {}
+ html-void-elements@3.0.0:
+ resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==}
- cacheable-lookup@7.0.0: {}
+ iconv-lite@0.6.3:
+ resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
+ engines: {node: '>=0.10.0'}
- cacheable-request@10.2.14:
- dependencies:
- '@types/http-cache-semantics': 4.0.4
- get-stream: 6.0.1
- http-cache-semantics: 4.1.1
- keyv: 4.5.4
- mimic-response: 4.0.0
- normalize-url: 8.0.1
- responselike: 3.0.0
+ immutable@5.1.9:
+ resolution: {integrity: sha512-m8nVez3rwrgmWxtLMt1ZYXB2Lv7OKYn/disyxAlSDYAlKSlFoPPfIAmAM/M5xqL4m4C/wAPw7S2/CNaUii1Hxg==}
- call-bind-apply-helpers@1.0.2:
- dependencies:
- es-errors: 1.3.0
- function-bind: 1.1.2
+ import-fresh@3.3.1:
+ resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
+ engines: {node: '>=6'}
- call-bind@1.0.7:
- dependencies:
- es-define-property: 1.0.0
- es-errors: 1.3.0
- function-bind: 1.1.2
- get-intrinsic: 1.2.4
- set-function-length: 1.2.2
+ import-meta-resolve@4.2.0:
+ resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==}
- call-bound@1.0.4:
- dependencies:
- call-bind-apply-helpers: 1.0.2
- get-intrinsic: 1.3.0
+ inline-style-parser@0.2.7:
+ resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==}
- callsites@3.1.0: {}
+ internmap@1.0.1:
+ resolution: {integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==}
- camel-case@4.1.2:
- dependencies:
- pascal-case: 3.1.2
- tslib: 2.8.0
+ internmap@2.0.3:
+ resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==}
+ engines: {node: '>=12'}
- camelcase@6.3.0: {}
+ is-absolute-url@4.0.1:
+ resolution: {integrity: sha512-/51/TKE88Lmm7Gc4/8btclNXWS+g50wXhYJq8HWIBAGUBnoAdRu1aXeh364t/O7wXDAcTJDP8PNuNKWUDWie+A==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- camelcase@7.0.1: {}
+ is-alphabetical@2.0.1:
+ resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==}
- caniuse-api@3.0.0:
- dependencies:
- browserslist: 4.28.1
- caniuse-lite: 1.0.30001761
- lodash.memoize: 4.1.2
- lodash.uniq: 4.5.0
+ is-alphanumerical@2.0.1:
+ resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==}
- caniuse-lite@1.0.30001673: {}
+ is-arrayish@0.2.1:
+ resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
- caniuse-lite@1.0.30001761: {}
+ is-decimal@2.0.1:
+ resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==}
- ccount@2.0.1: {}
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
- chalk@2.4.2:
- dependencies:
- ansi-styles: 3.2.1
- escape-string-regexp: 1.0.5
- supports-color: 5.5.0
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
- chalk@4.1.2:
- dependencies:
- ansi-styles: 4.3.0
- supports-color: 7.2.0
+ is-hexadecimal@2.0.1:
+ resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==}
- chalk@5.3.0: {}
+ is-plain-obj@4.1.0:
+ resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
+ engines: {node: '>=12'}
- char-regex@1.0.2: {}
+ js-tokens@4.0.0:
+ resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
- character-entities-html4@2.1.0: {}
+ js-yaml@4.3.1:
+ resolution: {integrity: sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==}
+ hasBin: true
- character-entities-legacy@3.0.0: {}
+ jsesc@3.1.0:
+ resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
+ engines: {node: '>=6'}
+ hasBin: true
- character-entities@2.0.2: {}
+ json-parse-even-better-errors@2.3.1:
+ resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
- character-reference-invalid@2.0.1: {}
+ json5@2.2.3:
+ resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
+ engines: {node: '>=6'}
+ hasBin: true
- cheerio-select@2.1.0:
- dependencies:
- boolbase: 1.0.0
- css-select: 5.1.0
- css-what: 6.1.0
- domelementtype: 2.3.0
- domhandler: 5.0.3
- domutils: 3.1.0
+ katex@0.16.47:
+ resolution: {integrity: sha512-Eeo8Ys1doU1z+x8AZsPpQu+p/QcZBI5PeOo7QGQdy2x2m0MU/hYagBbGOmXwr5KVbEfVuWv9LpnQWeehogurjg==}
+ hasBin: true
- cheerio@1.0.0-rc.12:
- dependencies:
- cheerio-select: 2.1.0
- dom-serializer: 2.0.0
- domhandler: 5.0.3
- domutils: 3.1.0
- htmlparser2: 8.0.2
- parse5: 7.2.0
- parse5-htmlparser2-tree-adapter: 7.1.0
+ khroma@2.1.0:
+ resolution: {integrity: sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==}
- chevrotain-allstar@0.3.1(chevrotain@11.0.3):
- dependencies:
- chevrotain: 11.0.3
- lodash-es: 4.17.21
+ kleur@4.1.5:
+ resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
+ engines: {node: '>=6'}
- chevrotain@11.0.3:
- dependencies:
- '@chevrotain/cst-dts-gen': 11.0.3
- '@chevrotain/gast': 11.0.3
- '@chevrotain/regexp-to-ast': 11.0.3
- '@chevrotain/types': 11.0.3
- '@chevrotain/utils': 11.0.3
- lodash-es: 4.17.21
+ layout-base@1.0.2:
+ resolution: {integrity: sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==}
- chokidar@3.6.0:
- dependencies:
- anymatch: 3.1.3
- braces: 3.0.3
- glob-parent: 5.1.2
- is-binary-path: 2.1.0
- is-glob: 4.0.3
- normalize-path: 3.0.0
- readdirp: 3.6.0
- optionalDependencies:
- fsevents: 2.3.3
+ lines-and-columns@1.2.4:
+ resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
- chokidar@5.0.0:
- dependencies:
- readdirp: 5.1.1
+ loader-utils@2.0.4:
+ resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==}
+ engines: {node: '>=8.9.0'}
- chrome-trace-event@1.0.4: {}
+ local-pkg@1.2.1:
+ resolution: {integrity: sha512-++gUqRDEvcnN6Zhqrr+y/CkVEHhlrR96vZn3nZZPYzMcBUyBtTKzB9NadClFIsIVSsu+3i9tfk/erqy9kAmt7Q==}
+ engines: {node: '>=14'}
- ci-info@3.9.0: {}
+ lodash-es@4.18.1:
+ resolution: {integrity: sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==}
- clean-css@5.3.3:
- dependencies:
- source-map: 0.6.1
+ longest-streak@3.1.0:
+ resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==}
- clean-stack@2.2.0: {}
+ lower-case@2.0.2:
+ resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==}
- cli-boxes@3.0.0: {}
+ lru-cache@5.1.1:
+ resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
- cli-table3@0.6.5:
- dependencies:
- string-width: 4.2.3
- optionalDependencies:
- '@colors/colors': 1.5.0
+ markdown-extensions@2.0.0:
+ resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==}
+ engines: {node: '>=16'}
- clone-deep@4.0.1:
- dependencies:
- is-plain-object: 2.0.4
- kind-of: 6.0.3
- shallow-clone: 3.0.1
+ markdown-table@3.0.4:
+ resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==}
- clsx@1.2.1: {}
+ mdast-util-find-and-replace@3.0.2:
+ resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==}
- clsx@2.1.1: {}
+ mdast-util-from-markdown@1.3.1:
+ resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==}
- coa@2.0.2:
- dependencies:
- '@types/q': 1.5.8
- chalk: 2.4.2
- q: 1.5.1
+ mdast-util-from-markdown@2.0.3:
+ resolution: {integrity: sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==}
- collapse-white-space@2.1.0: {}
+ mdast-util-gfm-autolink-literal@2.0.1:
+ resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==}
- color-convert@1.9.3:
- dependencies:
- color-name: 1.1.3
+ mdast-util-gfm-footnote@2.1.0:
+ resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==}
- color-convert@2.0.1:
- dependencies:
- color-name: 1.1.4
+ mdast-util-gfm-strikethrough@2.0.0:
+ resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==}
- color-name@1.1.3: {}
+ mdast-util-gfm-table@2.0.0:
+ resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==}
- color-name@1.1.4: {}
+ mdast-util-gfm-task-list-item@2.0.0:
+ resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==}
- colord@2.9.3: {}
+ mdast-util-gfm@3.1.0:
+ resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==}
- colorette@2.0.20: {}
+ mdast-util-mdx-expression@2.0.1:
+ resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==}
- colorjs.io@0.7.1: {}
+ mdast-util-mdx-jsx@3.2.0:
+ resolution: {integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==}
- combine-promises@1.2.0: {}
+ mdast-util-mdx@3.0.0:
+ resolution: {integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==}
- comma-separated-tokens@2.0.3: {}
+ mdast-util-mdxjs-esm@2.0.1:
+ resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==}
- commander@10.0.1: {}
+ mdast-util-phrasing@4.1.0:
+ resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==}
- commander@2.20.3: {}
+ mdast-util-to-hast@13.2.1:
+ resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==}
- commander@5.1.0: {}
+ mdast-util-to-markdown-cjk-friendly-gfm-strikethrough@1.0.0:
+ resolution: {integrity: sha512-1ePVfB4P/vz3xSsm6H3D32r6VYGErxclnuLLFK02/2ReF+UdEKm7caulK6Vm0LBIp5gPRtB2Z1OYDznCkX3k2w==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/mdast': '*'
+ peerDependenciesMeta:
+ '@types/mdast':
+ optional: true
- commander@7.2.0: {}
+ mdast-util-to-markdown-cjk-friendly@1.0.0:
+ resolution: {integrity: sha512-BoaAm8mlJ+LAYz0Qs532Y3ciTuQYgBUPZcSFbvC/ZKmEMAKgulw84YvQK1gI34t/vL2euSfuaWlqczkTBgamkw==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/mdast': '*'
+ peerDependenciesMeta:
+ '@types/mdast':
+ optional: true
- commander@8.3.0: {}
+ mdast-util-to-markdown@2.1.2:
+ resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==}
- common-path-prefix@3.0.0: {}
+ mdast-util-to-string@3.2.0:
+ resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==}
- compressible@2.0.18:
- dependencies:
- mime-db: 1.54.0
+ mdast-util-to-string@4.0.0:
+ resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==}
- compression@1.7.4:
- dependencies:
- accepts: 1.3.8
- bytes: 3.0.0
- compressible: 2.0.18
- debug: 2.6.9
- on-headers: 1.0.2
- safe-buffer: 5.1.2
- vary: 1.1.2
- transitivePeerDependencies:
- - supports-color
+ medium-zoom@1.1.0:
+ resolution: {integrity: sha512-ewyDsp7k4InCUp3jRmwHBRFGyjBimKps/AJLjRSox+2q/2H4p/PNpQf+pwONWlJiOudkBXtbdmVbFjqyybfTmQ==}
- concat-map@0.0.1: {}
+ mermaid@10.9.8:
+ resolution: {integrity: sha512-gmIhmkmD/3DL5lErDV71E/cFUkEbBW4VTFpsJH1HSYjeBICRKOoc4AZem+RNz/FhhCXKBMZiD75bIfBlb2A4yA==}
- confbox@0.1.8: {}
+ micromark-core-commonmark@1.1.0:
+ resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==}
- config-chain@1.1.13:
- dependencies:
- ini: 1.3.8
- proto-list: 1.2.4
+ micromark-core-commonmark@2.0.3:
+ resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==}
- configstore@6.0.0:
- dependencies:
- dot-prop: 6.0.1
- graceful-fs: 4.2.11
- unique-string: 3.0.0
- write-file-atomic: 3.0.3
- xdg-basedir: 5.1.0
+ micromark-extension-cjk-friendly-gfm-strikethrough@2.0.1:
+ resolution: {integrity: sha512-wVC0zwjJNqQeX+bb07YTPu/CvSAyCTafyYb7sMhX1r62/Lw5M/df3JyYaANyp8g15c1ypJRFSsookTqA1IDsUg==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ micromark: ^4.0.0
+ micromark-util-types: ^2.0.0
+ peerDependenciesMeta:
+ micromark-util-types:
+ optional: true
- connect-history-api-fallback@2.0.0: {}
+ micromark-extension-cjk-friendly-util@3.0.1:
+ resolution: {integrity: sha512-GcbXqTTHOsiZHyF753oIddP/J2eH8j9zpyQPhkof6B2JNxfEJabnQqxbCgzJNuNes0Y2jTNJ3LiYPSXr6eJA8w==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ micromark-util-types: '*'
+ peerDependenciesMeta:
+ micromark-util-types:
+ optional: true
- consola@3.2.3: {}
+ micromark-extension-cjk-friendly@2.0.1:
+ resolution: {integrity: sha512-OkzoYVTL1ChbvQ8Cc1ayTIz7paFQz8iS9oIYmewncweUSwmWR+hkJF9spJ1lxB90XldJl26A1F4IkPOKS3bDXw==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ micromark: ^4.0.0
+ micromark-util-types: ^2.0.0
+ peerDependenciesMeta:
+ micromark-util-types:
+ optional: true
- content-disposition@0.5.2: {}
+ micromark-extension-gfm-autolink-literal@2.1.0:
+ resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==}
- content-disposition@0.5.4:
- dependencies:
- safe-buffer: 5.2.1
+ micromark-extension-gfm-footnote@2.1.0:
+ resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==}
- content-type@1.0.5: {}
+ micromark-extension-gfm-strikethrough@2.1.0:
+ resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==}
- convert-source-map@2.0.0: {}
+ micromark-extension-gfm-table@2.1.1:
+ resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==}
- cookie-signature@1.0.6: {}
+ micromark-extension-gfm-tagfilter@2.0.0:
+ resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==}
- cookie@0.7.1: {}
+ micromark-extension-gfm-task-list-item@2.1.0:
+ resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==}
- copy-text-to-clipboard@3.2.2: {}
+ micromark-extension-gfm@3.0.0:
+ resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==}
- copy-webpack-plugin@11.0.0(webpack@5.95.0(@swc/core@1.16.0)):
- dependencies:
- fast-glob: 3.3.2
- glob-parent: 6.0.2
- globby: 13.2.2
- normalize-path: 3.0.0
- schema-utils: 4.2.0
- serialize-javascript: 6.0.2
- webpack: 5.95.0(@swc/core@1.16.0)
+ micromark-extension-mdx-expression@3.0.1:
+ resolution: {integrity: sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==}
- core-js-compat@3.38.1:
- dependencies:
- browserslist: 4.24.2
+ micromark-extension-mdx-jsx@3.0.2:
+ resolution: {integrity: sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==}
- core-js@3.39.0: {}
+ micromark-extension-mdx-md@2.0.0:
+ resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==}
- core-util-is@1.0.3: {}
+ micromark-extension-mdxjs-esm@3.0.0:
+ resolution: {integrity: sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==}
- cose-base@1.0.3:
- dependencies:
- layout-base: 1.0.2
+ micromark-extension-mdxjs@3.0.0:
+ resolution: {integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==}
- cose-base@2.2.0:
- dependencies:
- layout-base: 2.0.1
+ micromark-factory-destination@1.1.0:
+ resolution: {integrity: sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==}
- cosmiconfig@7.1.0:
- dependencies:
- '@types/parse-json': 4.0.2
- import-fresh: 3.3.0
- parse-json: 5.2.0
- path-type: 4.0.0
- yaml: 1.10.2
+ micromark-factory-destination@2.0.1:
+ resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==}
- cosmiconfig@8.3.6(typescript@5.6.3):
- dependencies:
- import-fresh: 3.3.0
- js-yaml: 4.1.0
- parse-json: 5.2.0
- path-type: 4.0.0
- optionalDependencies:
- typescript: 5.6.3
+ micromark-factory-label@1.1.0:
+ resolution: {integrity: sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==}
- cross-spawn@7.0.3:
- dependencies:
- path-key: 3.1.1
- shebang-command: 2.0.0
- which: 2.0.2
+ micromark-factory-label@2.0.1:
+ resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==}
- crypto-random-string@4.0.0:
- dependencies:
- type-fest: 1.4.0
+ micromark-factory-mdx-expression@2.0.3:
+ resolution: {integrity: sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==}
- css-blank-pseudo@7.0.1(postcss@8.5.6):
- dependencies:
- postcss: 8.5.6
- postcss-selector-parser: 7.0.0
+ micromark-factory-space@1.1.0:
+ resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==}
- css-declaration-sorter@7.2.0(postcss@8.5.6):
- dependencies:
- postcss: 8.5.6
+ micromark-factory-space@2.0.1:
+ resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==}
- css-has-pseudo@7.0.3(postcss@8.5.6):
- dependencies:
- '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.0.0)
- postcss: 8.5.6
- postcss-selector-parser: 7.0.0
- postcss-value-parser: 4.2.0
+ micromark-factory-title@1.1.0:
+ resolution: {integrity: sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==}
- css-loader@6.11.0(@rspack/core@1.7.11)(webpack@5.95.0(@swc/core@1.16.0)):
- dependencies:
- icss-utils: 5.1.0(postcss@8.5.6)
- postcss: 8.5.6
- postcss-modules-extract-imports: 3.1.0(postcss@8.5.6)
- postcss-modules-local-by-default: 4.0.5(postcss@8.5.6)
- postcss-modules-scope: 3.2.0(postcss@8.5.6)
- postcss-modules-values: 4.0.0(postcss@8.5.6)
- postcss-value-parser: 4.2.0
- semver: 7.6.3
- optionalDependencies:
- '@rspack/core': 1.7.11
- webpack: 5.95.0(@swc/core@1.16.0)
-
- css-minimizer-webpack-plugin@5.0.1(clean-css@5.3.3)(webpack@5.95.0(@swc/core@1.16.0)):
- dependencies:
- '@jridgewell/trace-mapping': 0.3.25
- cssnano: 6.1.2(postcss@8.5.6)
- jest-worker: 29.7.0
- postcss: 8.5.6
- schema-utils: 4.2.0
- serialize-javascript: 6.0.2
- webpack: 5.95.0(@swc/core@1.16.0)
- optionalDependencies:
- clean-css: 5.3.3
+ micromark-factory-title@2.0.1:
+ resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==}
- css-prefers-color-scheme@10.0.0(postcss@8.5.6):
- dependencies:
- postcss: 8.5.6
+ micromark-factory-whitespace@1.1.0:
+ resolution: {integrity: sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==}
- css-select-base-adapter@0.1.1: {}
+ micromark-factory-whitespace@2.0.1:
+ resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==}
- css-select@2.1.0:
- dependencies:
- boolbase: 1.0.0
- css-what: 3.4.2
- domutils: 1.7.0
- nth-check: 1.0.2
+ micromark-util-character@1.2.0:
+ resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==}
- css-select@4.3.0:
- dependencies:
- boolbase: 1.0.0
- css-what: 6.1.0
- domhandler: 4.3.1
- domutils: 2.8.0
- nth-check: 2.1.1
+ micromark-util-character@2.1.1:
+ resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==}
- css-select@5.1.0:
- dependencies:
- boolbase: 1.0.0
- css-what: 6.1.0
- domhandler: 5.0.3
- domutils: 3.1.0
- nth-check: 2.1.1
+ micromark-util-chunked@1.1.0:
+ resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==}
- css-tree@1.0.0-alpha.37:
- dependencies:
- mdn-data: 2.0.4
- source-map: 0.6.1
+ micromark-util-chunked@2.0.1:
+ resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==}
- css-tree@1.1.3:
- dependencies:
- mdn-data: 2.0.14
- source-map: 0.6.1
+ micromark-util-classify-character@1.1.0:
+ resolution: {integrity: sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==}
- css-tree@2.2.1:
- dependencies:
- mdn-data: 2.0.28
- source-map-js: 1.2.1
+ micromark-util-classify-character@2.0.1:
+ resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==}
- css-tree@2.3.1:
- dependencies:
- mdn-data: 2.0.30
- source-map-js: 1.2.1
+ micromark-util-combine-extensions@1.1.0:
+ resolution: {integrity: sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==}
- css-what@3.4.2: {}
+ micromark-util-combine-extensions@2.0.1:
+ resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==}
- css-what@6.1.0: {}
+ micromark-util-decode-numeric-character-reference@1.1.0:
+ resolution: {integrity: sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==}
- cssdb@8.5.2: {}
+ micromark-util-decode-numeric-character-reference@2.0.2:
+ resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==}
- cssesc@3.0.0: {}
+ micromark-util-decode-string@1.1.0:
+ resolution: {integrity: sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==}
- cssnano-preset-advanced@6.1.2(postcss@8.5.6):
- dependencies:
- autoprefixer: 10.4.23(postcss@8.5.6)
- browserslist: 4.28.1
- cssnano-preset-default: 6.1.2(postcss@8.5.6)
- postcss: 8.5.6
- postcss-discard-unused: 6.0.5(postcss@8.5.6)
- postcss-merge-idents: 6.0.3(postcss@8.5.6)
- postcss-reduce-idents: 6.0.3(postcss@8.5.6)
- postcss-zindex: 6.0.2(postcss@8.5.6)
+ micromark-util-decode-string@2.0.1:
+ resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==}
- cssnano-preset-default@6.1.2(postcss@8.5.6):
- dependencies:
- browserslist: 4.28.1
- css-declaration-sorter: 7.2.0(postcss@8.5.6)
- cssnano-utils: 4.0.2(postcss@8.5.6)
- postcss: 8.5.6
- postcss-calc: 9.0.1(postcss@8.5.6)
- postcss-colormin: 6.1.0(postcss@8.5.6)
- postcss-convert-values: 6.1.0(postcss@8.5.6)
- postcss-discard-comments: 6.0.2(postcss@8.5.6)
- postcss-discard-duplicates: 6.0.3(postcss@8.5.6)
- postcss-discard-empty: 6.0.3(postcss@8.5.6)
- postcss-discard-overridden: 6.0.2(postcss@8.5.6)
- postcss-merge-longhand: 6.0.5(postcss@8.5.6)
- postcss-merge-rules: 6.1.1(postcss@8.5.6)
- postcss-minify-font-values: 6.1.0(postcss@8.5.6)
- postcss-minify-gradients: 6.0.3(postcss@8.5.6)
- postcss-minify-params: 6.1.0(postcss@8.5.6)
- postcss-minify-selectors: 6.0.4(postcss@8.5.6)
- postcss-normalize-charset: 6.0.2(postcss@8.5.6)
- postcss-normalize-display-values: 6.0.2(postcss@8.5.6)
- postcss-normalize-positions: 6.0.2(postcss@8.5.6)
- postcss-normalize-repeat-style: 6.0.2(postcss@8.5.6)
- postcss-normalize-string: 6.0.2(postcss@8.5.6)
- postcss-normalize-timing-functions: 6.0.2(postcss@8.5.6)
- postcss-normalize-unicode: 6.1.0(postcss@8.5.6)
- postcss-normalize-url: 6.0.2(postcss@8.5.6)
- postcss-normalize-whitespace: 6.0.2(postcss@8.5.6)
- postcss-ordered-values: 6.0.2(postcss@8.5.6)
- postcss-reduce-initial: 6.1.0(postcss@8.5.6)
- postcss-reduce-transforms: 6.0.2(postcss@8.5.6)
- postcss-svgo: 6.0.3(postcss@8.5.6)
- postcss-unique-selectors: 6.0.4(postcss@8.5.6)
+ micromark-util-encode@1.1.0:
+ resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==}
- cssnano-utils@4.0.2(postcss@8.5.6):
- dependencies:
- postcss: 8.5.6
+ micromark-util-encode@2.0.1:
+ resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==}
- cssnano@6.1.2(postcss@8.5.6):
- dependencies:
- cssnano-preset-default: 6.1.2(postcss@8.5.6)
- lilconfig: 3.1.2
- postcss: 8.5.6
+ micromark-util-events-to-acorn@2.0.3:
+ resolution: {integrity: sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==}
- csso@4.2.0:
- dependencies:
- css-tree: 1.1.3
+ micromark-util-html-tag-name@1.2.0:
+ resolution: {integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==}
- csso@5.0.5:
- dependencies:
- css-tree: 2.2.1
+ micromark-util-html-tag-name@2.0.1:
+ resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==}
- csstype@3.1.3: {}
+ micromark-util-normalize-identifier@1.1.0:
+ resolution: {integrity: sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==}
- cytoscape-cose-bilkent@4.1.0(cytoscape@3.30.2):
- dependencies:
- cose-base: 1.0.3
- cytoscape: 3.30.2
+ micromark-util-normalize-identifier@2.0.1:
+ resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==}
- cytoscape-fcose@2.2.0(cytoscape@3.30.2):
- dependencies:
- cose-base: 2.2.0
- cytoscape: 3.30.2
+ micromark-util-resolve-all@1.1.0:
+ resolution: {integrity: sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==}
- cytoscape@3.30.2: {}
+ micromark-util-resolve-all@2.0.1:
+ resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==}
- d3-array@2.12.1:
- dependencies:
- internmap: 1.0.1
+ micromark-util-sanitize-uri@1.2.0:
+ resolution: {integrity: sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==}
- d3-array@3.2.4:
- dependencies:
- internmap: 2.0.3
+ micromark-util-sanitize-uri@2.0.1:
+ resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==}
- d3-axis@3.0.0: {}
+ micromark-util-subtokenize@1.1.0:
+ resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==}
- d3-brush@3.0.0:
- dependencies:
- d3-dispatch: 3.0.1
- d3-drag: 3.0.0
- d3-interpolate: 3.0.1
- d3-selection: 3.0.0
- d3-transition: 3.0.1(d3-selection@3.0.0)
+ micromark-util-subtokenize@2.1.0:
+ resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==}
- d3-chord@3.0.1:
- dependencies:
- d3-path: 3.1.0
+ micromark-util-symbol@1.1.0:
+ resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==}
- d3-color@3.1.0: {}
+ micromark-util-symbol@2.0.1:
+ resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==}
- d3-contour@4.0.2:
- dependencies:
- d3-array: 3.2.4
+ micromark-util-types@1.1.0:
+ resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==}
- d3-delaunay@6.0.4:
- dependencies:
- delaunator: 5.0.1
+ micromark-util-types@2.0.2:
+ resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==}
- d3-dispatch@3.0.1: {}
+ micromark@3.2.0:
+ resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==}
- d3-drag@3.0.0:
- dependencies:
- d3-dispatch: 3.0.1
- d3-selection: 3.0.0
+ micromark@4.0.2:
+ resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==}
- d3-dsv@3.0.1:
- dependencies:
- commander: 7.2.0
- iconv-lite: 0.6.3
- rw: 1.3.3
+ minimatch@10.2.6:
+ resolution: {integrity: sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==}
+ engines: {node: 18 || 20 || >=22}
- d3-ease@3.0.1: {}
+ mlly@1.8.2:
+ resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==}
- d3-fetch@3.0.1:
- dependencies:
- d3-dsv: 3.0.1
+ mri@1.2.0:
+ resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
+ engines: {node: '>=4'}
- d3-force@3.0.0:
- dependencies:
- d3-dispatch: 3.0.1
- d3-quadtree: 3.0.1
- d3-timer: 3.0.1
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
- d3-format@3.1.0: {}
+ nanoid@3.3.18:
+ resolution: {integrity: sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
- d3-geo@3.1.1:
- dependencies:
- d3-array: 3.2.4
+ no-case@3.0.4:
+ resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==}
- d3-hierarchy@3.1.2: {}
+ node-addon-api@7.1.1:
+ resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==}
- d3-interpolate@3.0.1:
- dependencies:
- d3-color: 3.1.0
+ node-releases@2.0.53:
+ resolution: {integrity: sha512-D9UOmYG3UH1V+ENW56t5QXBwJw1YEY18ruVeus89Rw+SyIgjPkCO84bRzO3uNIYosJbNwiabWVn48o3uJLjxFQ==}
+ engines: {node: '>=18'}
- d3-path@1.0.9: {}
+ non-layered-tidy-tree-layout@2.0.2:
+ resolution: {integrity: sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==}
- d3-path@3.1.0: {}
+ nprogress@0.2.0:
+ resolution: {integrity: sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==}
- d3-polygon@3.0.1: {}
+ obug@2.1.4:
+ resolution: {integrity: sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==}
+ engines: {node: '>=12.20.0'}
- d3-quadtree@3.0.1: {}
+ oniguruma-parser@0.12.2:
+ resolution: {integrity: sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw==}
- d3-random@3.0.1: {}
+ oniguruma-to-es@4.3.6:
+ resolution: {integrity: sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==}
- d3-sankey@0.12.3:
- dependencies:
- d3-array: 2.12.1
- d3-shape: 1.3.7
+ package-manager-detector@1.8.0:
+ resolution: {integrity: sha512-yQA4H19AmPEoMUeavPMDIe1higySl/gH/yaQrkT/s07Qp+7pp2hYz30N3z2l5BkjVkF9Ow6o0wjJamm2y7Sn0A==}
- d3-scale-chromatic@3.1.0:
- dependencies:
- d3-color: 3.1.0
- d3-interpolate: 3.0.1
+ parent-module@1.0.1:
+ resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
+ engines: {node: '>=6'}
- d3-scale@4.0.2:
- dependencies:
- d3-array: 3.2.4
- d3-format: 3.1.0
- d3-interpolate: 3.0.1
- d3-time: 3.1.0
- d3-time-format: 4.1.0
+ parse-entities@4.0.2:
+ resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==}
- d3-selection@3.0.0: {}
+ parse-json@5.2.0:
+ resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
+ engines: {node: '>=8'}
- d3-shape@1.3.7:
- dependencies:
- d3-path: 1.0.9
+ parse5@7.3.0:
+ resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==}
- d3-shape@3.2.0:
- dependencies:
- d3-path: 3.1.0
+ path-browserify@1.0.1:
+ resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==}
- d3-time-format@4.1.0:
- dependencies:
- d3-time: 3.1.0
+ path-type@4.0.0:
+ resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
+ engines: {node: '>=8'}
- d3-time@3.1.0:
- dependencies:
- d3-array: 3.2.4
+ pathe@2.0.3:
+ resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
- d3-timer@3.0.1: {}
+ picocolors@1.1.1:
+ resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
- d3-transition@3.0.1(d3-selection@3.0.0):
- dependencies:
- d3-color: 3.1.0
- d3-dispatch: 3.0.1
- d3-ease: 3.0.1
- d3-interpolate: 3.0.1
- d3-selection: 3.0.0
- d3-timer: 3.0.1
+ picomatch@4.0.7:
+ resolution: {integrity: sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==}
+ engines: {node: '>=12'}
- d3-zoom@3.0.0:
- dependencies:
- d3-dispatch: 3.0.1
- d3-drag: 3.0.0
- d3-interpolate: 3.0.1
- d3-selection: 3.0.0
- d3-transition: 3.0.1(d3-selection@3.0.0)
+ pkg-types@1.3.1:
+ resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
- d3@7.9.0:
- dependencies:
- d3-array: 3.2.4
- d3-axis: 3.0.0
- d3-brush: 3.0.0
- d3-chord: 3.0.1
- d3-color: 3.1.0
- d3-contour: 4.0.2
- d3-delaunay: 6.0.4
- d3-dispatch: 3.0.1
- d3-drag: 3.0.0
- d3-dsv: 3.0.1
- d3-ease: 3.0.1
- d3-fetch: 3.0.1
- d3-force: 3.0.0
- d3-format: 3.1.0
- d3-geo: 3.1.1
- d3-hierarchy: 3.1.2
- d3-interpolate: 3.0.1
- d3-path: 3.1.0
- d3-polygon: 3.0.1
- d3-quadtree: 3.0.1
- d3-random: 3.0.1
- d3-scale: 4.0.2
- d3-scale-chromatic: 3.1.0
- d3-selection: 3.0.0
- d3-shape: 3.2.0
- d3-time: 3.1.0
- d3-time-format: 4.1.0
- d3-timer: 3.0.1
- d3-transition: 3.0.1(d3-selection@3.0.0)
- d3-zoom: 3.0.0
+ pkg-types@2.3.1:
+ resolution: {integrity: sha512-y+ichcgc2LrADuhLNAx8DFjVfgz91pRxfZdI3UDhxHvcVEZsenLO+7XaU5vOp0u/7V/wZ+plyuQxtrDlZJ+yeg==}
- dagre-d3-es@7.0.11:
- dependencies:
- d3: 7.9.0
- lodash-es: 4.17.21
+ postcss@8.5.26:
+ resolution: {integrity: sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==}
+ engines: {node: ^10 || ^12 || >=14}
- data-view-buffer@1.0.1:
- dependencies:
- call-bind: 1.0.7
- es-errors: 1.3.0
- is-data-view: 1.0.1
+ property-information@7.2.0:
+ resolution: {integrity: sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==}
- data-view-byte-length@1.0.1:
- dependencies:
- call-bind: 1.0.7
- es-errors: 1.3.0
- is-data-view: 1.0.1
+ quansync@0.2.11:
+ resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==}
- data-view-byte-offset@1.0.0:
- dependencies:
- call-bind: 1.0.7
- es-errors: 1.3.0
- is-data-view: 1.0.1
+ react-dom@19.2.8:
+ resolution: {integrity: sha512-rVprimfGBG3DR+Tq0IQG2DT5PxKth1WIGDmj5yPmlzr4YBe7uyE+Du4oVqTDXZSHGGGXRtTJEGSSePyQCMBglQ==}
+ peerDependencies:
+ react: ^19.2.8
- dayjs@1.11.13: {}
+ react-lazy-with-preload@2.2.1:
+ resolution: {integrity: sha512-ONSb8gizLE5jFpdHAclZ6EAAKuFX2JydnFXPPPjoUImZlLjGtKzyBS8SJgJq7CpLgsGKh9QCZdugJyEEOVC16Q==}
- debounce@1.2.1: {}
+ react-reconciler@0.33.0:
+ resolution: {integrity: sha512-KetWRytFv1epdpJc3J4G75I4WrplZE5jOL7Yq0p34+OVOKF4Se7WrdIdVC45XsSSmUTlht2FM/fM1FZb1mfQeA==}
+ engines: {node: '>=0.10.0'}
+ peerDependencies:
+ react: ^19.2.0
- debug@2.6.9:
- dependencies:
- ms: 2.0.0
+ react-refresh@0.18.0:
+ resolution: {integrity: sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==}
+ engines: {node: '>=0.10.0'}
- debug@4.3.7:
- dependencies:
- ms: 2.1.3
+ react-render-to-markdown@19.1.0:
+ resolution: {integrity: sha512-dF9b3tO41ezqdmHP8X92kbHbMexJ6iC7iHw4ykC8fwiO7DgpFc9PhMoKlI+BcPzRxGcWgQSdrixVB9RykhjJpQ==}
+ peerDependencies:
+ react: '>=19'
- decode-named-character-reference@1.0.2:
- dependencies:
- character-entities: 2.0.2
+ react-router-dom@7.18.2:
+ resolution: {integrity: sha512-AIKJ/jgGlFb3EbfCXk5Gzshiwt+l3mqbCrNjmEWMMjqQxNJ3svBa6bgzFyCC2Sw3RA0VWF1kg3uQf2OFhxb8hw==}
+ engines: {node: '>=20.0.0'}
+ peerDependencies:
+ react: '>=18'
+ react-dom: '>=18'
- decompress-response@6.0.0:
- dependencies:
- mimic-response: 3.1.0
+ react-router@7.18.2:
+ resolution: {integrity: sha512-aUVMjFm3GAPTTZL7oYr5E7ETiqfQCHRLH+B+5afnICvf0r7kkK4eR6SMuwbSTJw/7t+12khT/Kahij49fqOCIg==}
+ engines: {node: '>=20.0.0'}
+ peerDependencies:
+ react: '>=18'
+ react-dom: '>=18'
+ peerDependenciesMeta:
+ react-dom:
+ optional: true
- deep-extend@0.6.0: {}
+ react@19.2.8:
+ resolution: {integrity: sha512-PWaYA1L/q9u2u7xYQi+Y3L3Yfnie7XyLeaJICV1MGD6LprsBxcAqGjYyr0eY3p+QdsA+x/Irkt4Qif8D63+Sbw==}
+ engines: {node: '>=0.10.0'}
- deepmerge@4.3.1: {}
+ readdirp@5.1.1:
+ resolution: {integrity: sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA==}
+ engines: {node: '>= 20.19.0'}
- default-browser-id@5.0.1: {}
+ recma-build-jsx@1.0.0:
+ resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==}
- default-browser@5.4.0:
- dependencies:
- bundle-name: 4.1.0
- default-browser-id: 5.0.1
+ recma-jsx@1.0.1:
+ resolution: {integrity: sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==}
+ peerDependencies:
+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
- defer-to-connect@2.0.1: {}
+ recma-parse@1.0.0:
+ resolution: {integrity: sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==}
- define-data-property@1.1.4:
- dependencies:
- es-define-property: 1.0.0
- es-errors: 1.3.0
- gopd: 1.0.1
+ recma-stringify@1.0.0:
+ resolution: {integrity: sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==}
- define-lazy-prop@2.0.0: {}
+ reduce-configs@2.0.1:
+ resolution: {integrity: sha512-H9KTCWTEb1YM1OoOz0f6TeGZYlW82sIT1viNg3W8CjjY0pD3WI4MHs8GifKt5FKTVIfHh/DenfJqqY+FP9jF2A==}
- define-lazy-prop@3.0.0: {}
+ regex-recursion@6.0.2:
+ resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==}
- define-properties@1.2.1:
- dependencies:
- define-data-property: 1.1.4
- has-property-descriptors: 1.0.2
- object-keys: 1.1.1
+ regex-utilities@2.3.0:
+ resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==}
- delaunator@5.0.1:
- dependencies:
- robust-predicates: 3.0.2
+ regex@6.1.0:
+ resolution: {integrity: sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==}
- depd@1.1.2: {}
+ rehype-external-links@3.0.0:
+ resolution: {integrity: sha512-yp+e5N9V3C6bwBeAC4n796kc86M4gJCdlVhiMTxIrJG5UHDMh+PJANf9heqORJbt1nrCbDwIlAZKjANIaVBbvw==}
- depd@2.0.0: {}
+ rehype-raw@7.0.0:
+ resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==}
- dequal@2.0.3: {}
+ rehype-recma@1.0.0:
+ resolution: {integrity: sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==}
- destroy@1.2.0: {}
+ remark-cjk-friendly-gfm-strikethrough@2.3.1:
+ resolution: {integrity: sha512-JE3TGgouk/sy92SemNMEUhO5mNP4on04cmzOV3s3R5Dbk160ewmpM4tgPiinKKvoJ5UW2fTu7FOYsjVbusSA9w==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/mdast': ^4.0.0
+ unified: ^11.0.0
+ peerDependenciesMeta:
+ '@types/mdast':
+ optional: true
- detect-libc@1.0.3: {}
+ remark-cjk-friendly@2.3.1:
+ resolution: {integrity: sha512-f+pKZRxCRwNEGFBKNRAZAqU91GIK1SAo3ZyFHWRUgC9zcxRR0BXKd6YwqgSsxtW0rNpUDtONj7H5nje2WL3fcA==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/mdast': ^4.0.0
+ unified: ^11.0.0
+ peerDependenciesMeta:
+ '@types/mdast':
+ optional: true
- detect-node@2.1.0: {}
+ remark-gfm@4.0.1:
+ resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==}
- detect-port@2.1.0:
- dependencies:
- address: 2.0.3
+ remark-mdc@3.11.1:
+ resolution: {integrity: sha512-bjH7Q1OO1BSXVPmUxYIrGH2dUAZkizNY3i9WJUEcIFLowZAEjLTT7fUAH2vH0Tpkeh+/MrzwFFmeWcZ66QLh7A==}
- devlop@1.1.0:
- dependencies:
- dequal: 2.0.3
+ remark-mdx@3.1.1:
+ resolution: {integrity: sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==}
- dir-glob@3.0.1:
- dependencies:
- path-type: 4.0.0
+ remark-parse@11.0.0:
+ resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==}
- dns-packet@5.6.1:
- dependencies:
- '@leichtgewicht/ip-codec': 2.0.5
+ remark-rehype@11.1.2:
+ resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==}
- docusaurus-plugin-image-zoom@3.0.1(@docusaurus/theme-classic@3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@rspack/core@1.7.11)(@swc/core@1.16.0)(@types/react@18.3.12)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)):
- dependencies:
- '@docusaurus/theme-classic': 3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@rspack/core@1.7.11)(@swc/core@1.16.0)(@types/react@18.3.12)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)
- medium-zoom: 1.1.0
- validate-peer-dependencies: 2.2.0
+ remark-stringify@11.0.0:
+ resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==}
- docusaurus-plugin-sass@0.2.6(@docusaurus/core@3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3))(@rspack/core@1.7.11)(sass-embedded@1.102.0)(sass@1.102.0)(webpack@5.95.0(@swc/core@1.16.0)):
- dependencies:
- '@docusaurus/core': 3.10.2(@docusaurus/faster@3.10.2(@docusaurus/types@3.10.2(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)))(@mdx-js/react@3.1.1(@types/react@18.3.12)(react@19.2.8))(@rspack/core@1.7.11)(@swc/core@1.16.0)(acorn@8.14.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.6.3)
- sass: 1.102.0
- sass-loader: 16.0.6(@rspack/core@1.7.11)(sass-embedded@1.102.0)(sass@1.102.0)(webpack@5.95.0(@swc/core@1.16.0))
- transitivePeerDependencies:
- - '@rspack/core'
- - node-sass
- - sass-embedded
- - webpack
+ resolve-from@4.0.0:
+ resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
+ engines: {node: '>=4'}
- dom-converter@0.2.0:
- dependencies:
- utila: 0.4.0
+ robust-predicates@3.0.3:
+ resolution: {integrity: sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA==}
- dom-serializer@0.2.2:
- dependencies:
- domelementtype: 2.3.0
- entities: 2.2.0
+ rspress-plugin-devkit@1.0.0:
+ resolution: {integrity: sha512-Xe+yxu9X9a+SBH8CSPZJSiqm0OtaIvx9FCXI1MQMpfmaK75/F+3Rvbz/zJw7nFxxpo5HsePb86ScGOYNIKNLFg==}
+ peerDependencies:
+ '@rspress/core': ^2.0.0-rc.4 || ^2.0.0
- dom-serializer@1.4.1:
- dependencies:
- domelementtype: 2.3.0
- domhandler: 4.3.1
- entities: 2.2.0
+ rspress-plugin-file-tree@1.0.5:
+ resolution: {integrity: sha512-OjdEn09HvUmpANlAScw2DmRatc257xXabMebwWZkGnfdxm7zt/qjrbDov1+VzcJdRJHsBoUd1r10xlUXd1K6LQ==}
+ peerDependencies:
+ '@rspress/core': ^2.0.0-rc.4 || ^2.0.0
- dom-serializer@2.0.0:
- dependencies:
- domelementtype: 2.3.0
- domhandler: 5.0.3
- entities: 4.5.0
+ rspress-plugin-google-analytics@1.0.0:
+ resolution: {integrity: sha512-VgrL7ePZjjbaAeICXzcTxqj4v2zUbQAiF983x7N1B3FsoG1fQPuwhDO9vea67kh5eug4+VOTnm1N32ehkM+RBw==}
+ peerDependencies:
+ '@rspress/core': ^2.0.0-rc.4 || ^2.0.0
- domelementtype@1.3.1: {}
+ rspress-plugin-mermaid@1.0.1:
+ resolution: {integrity: sha512-FAL9Q5+DZJqCnuYPCYaOr+FY6WS56jFBJy5YyXKQWwzIYqWmS/tBgaNSdCBctLAG8AKeyUlFODg/7s6WqTY2/Q==}
+ peerDependencies:
+ '@rspress/core': ^2.0.0-rc.4 || ^2.0.0
- domelementtype@2.3.0: {}
+ rw@1.3.3:
+ resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==}
- domhandler@4.3.1:
- dependencies:
- domelementtype: 2.3.0
+ rxjs@7.8.2:
+ resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==}
- domhandler@5.0.3:
- dependencies:
- domelementtype: 2.3.0
+ sade@1.8.1:
+ resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==}
+ engines: {node: '>=6'}
- dompurify@3.2.6:
- optionalDependencies:
- '@types/trusted-types': 2.0.7
+ safer-buffer@2.1.2:
+ resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
- domutils@1.7.0:
- dependencies:
- dom-serializer: 0.2.2
- domelementtype: 1.3.1
+ sass-embedded-all-unknown@1.103.1:
+ resolution: {integrity: sha512-MwX2ap06TbImAqlbnH6EndgBBejk6Eq2QB6Ae2hukCn9wmXf9cRu27um3mz3tyB4oJOOku0xfHqFH/+ckYj6YA==}
+ cpu: ['!arm', '!arm64', '!riscv64', '!x64']
- domutils@2.8.0:
- dependencies:
- dom-serializer: 1.4.1
- domelementtype: 2.3.0
- domhandler: 4.3.1
+ sass-embedded-android-arm64@1.103.1:
+ resolution: {integrity: sha512-jBXWMksyz55XeLOWvQs64BqiG5DcqflmMxcvMoA2oHtQT/7XZ02hBn502qpcF/q8Qd+qqG/hU5ccM+hGXrbQZw==}
+ engines: {node: '>=14.0.0'}
+ cpu: [arm64]
+ os: [android]
- domutils@3.1.0:
- dependencies:
- dom-serializer: 2.0.0
- domelementtype: 2.3.0
- domhandler: 5.0.3
+ sass-embedded-android-arm@1.103.1:
+ resolution: {integrity: sha512-p36WHpsu5HEo2+NVNbI2Nmb8VgVH0xwOQyzghvZhF7ikGCzEVYI5BP28vHUZlCcgj2TUvMEJKI2lV336a+F/sg==}
+ engines: {node: '>=14.0.0'}
+ cpu: [arm]
+ os: [android]
- dot-case@3.0.4:
- dependencies:
- no-case: 3.0.4
- tslib: 2.8.0
+ sass-embedded-android-riscv64@1.103.1:
+ resolution: {integrity: sha512-rzrH7RNntk0rx+zCE9xOiAIUt37D1cQKvFfcoX0xiePdGbNHBN8DWKaWN9vaCRfbgKCmxPjevzaqFNI/G/8E1A==}
+ engines: {node: '>=14.0.0'}
+ cpu: [riscv64]
+ os: [android]
- dot-prop@6.0.1:
- dependencies:
- is-obj: 2.0.0
+ sass-embedded-android-x64@1.103.1:
+ resolution: {integrity: sha512-EQglAJXJutuIcqgZf7YOwzao2ND6ow/OgqN+cM48/Qaeb6AimYmZiUJmM9FFcmS3Q2n1k6/2OU3l3Hlin7bFpw==}
+ engines: {node: '>=14.0.0'}
+ cpu: [x64]
+ os: [android]
- dunder-proto@1.0.1:
- dependencies:
- call-bind-apply-helpers: 1.0.2
- es-errors: 1.3.0
- gopd: 1.2.0
+ sass-embedded-darwin-arm64@1.103.1:
+ resolution: {integrity: sha512-rlaBeCul8pLbDRKdBAxdDxSBwFU5fbX42ci6CxW2Vbs34jWTMQ72+nE2v2KkGGce+JnYbb7UV6xDP/4uDWWi+w==}
+ engines: {node: '>=14.0.0'}
+ cpu: [arm64]
+ os: [darwin]
- duplexer@0.1.2: {}
+ sass-embedded-darwin-x64@1.103.1:
+ resolution: {integrity: sha512-VSKFfhI//AOct6ppFmAaSH7tlW2LOFECMGs77jIoWf0ZjvGch/3sc9lUTTdIaYIOnTS4qpZck+8OcI2D0G92QA==}
+ engines: {node: '>=14.0.0'}
+ cpu: [x64]
+ os: [darwin]
- eastasianwidth@0.2.0: {}
+ sass-embedded-linux-arm64@1.103.1:
+ resolution: {integrity: sha512-rC+80/Xr9svo0ka2Zr/sjD+N1zEHTw2Urm/nsEjaVp5HSH2i22jwhTKTIqie2OLl6ti+qdYnbI0sSfxOYRtgrg==}
+ engines: {node: '>=14.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: glibc
+
+ sass-embedded-linux-arm@1.103.1:
+ resolution: {integrity: sha512-tJRLPUtBwXHTnBnG7I39gQvCLreuOHLLCMyKHPR1hQ7aFNwiZjADYzKMRQPNMUqti/Os9z+6I7V13FqgQHfuzg==}
+ engines: {node: '>=14.0.0'}
+ cpu: [arm]
+ os: [linux]
+ libc: glibc
- ee-first@1.1.1: {}
+ sass-embedded-linux-musl-arm64@1.103.1:
+ resolution: {integrity: sha512-jMgG/C/VMo7+ShMFdk0xjJmQmYkj1PbJu/yrQiaQHpuo5pE2G+vnkEgsuM5EM3lTQ4MbMfnf715qy1fkbNPiUQ==}
+ engines: {node: '>=14.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: musl
- electron-to-chromium@1.5.267: {}
+ sass-embedded-linux-musl-arm@1.103.1:
+ resolution: {integrity: sha512-N8L/kgVzXpnH+8d6ErIzqvb0l8kHODR3OfPaf0Azw6DOLGtEjwDRUbHno+G7iogGzyPOjKsM8OdyqHJj/bpTdw==}
+ engines: {node: '>=14.0.0'}
+ cpu: [arm]
+ os: [linux]
+ libc: musl
- electron-to-chromium@1.5.47: {}
+ sass-embedded-linux-musl-riscv64@1.103.1:
+ resolution: {integrity: sha512-LZm8rEvI6sKU87qPOlODsYeAs7CmWy0B4ShYkjG4OMcGCcV4Ffxn25XW4TFqmruThITQvJ8WT+WGblzdoxYgbA==}
+ engines: {node: '>=14.0.0'}
+ cpu: [riscv64]
+ os: [linux]
+ libc: musl
- emoji-regex@8.0.0: {}
+ sass-embedded-linux-musl-x64@1.103.1:
+ resolution: {integrity: sha512-rmKzgk4t6RpaDhSefbbnk5yrA4pk1nHlVhJECGay8yMfzK8eglATeY9fzPgt89xCuQk6rkOiy11e+m8tLYOW5Q==}
+ engines: {node: '>=14.0.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: musl
- emoji-regex@9.2.2: {}
+ sass-embedded-linux-riscv64@1.103.1:
+ resolution: {integrity: sha512-xydQmtxla31uMrmN6z+mAogVGdEMDmkUElVq2+udomX/TPZDYJBkApEyJl237M2VLWVv29v1N4U4i2Z4xa7SDA==}
+ engines: {node: '>=14.0.0'}
+ cpu: [riscv64]
+ os: [linux]
+ libc: glibc
- emojilib@2.4.0: {}
+ sass-embedded-linux-x64@1.103.1:
+ resolution: {integrity: sha512-Rln1oWm0MWKzzemOgQWrRFzfVBARwS9qxAidZPpCQHSohzPnWizFkmY1CUJad/YJNsA7sscueMdX63OEvxoM8w==}
+ engines: {node: '>=14.0.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: glibc
- emojis-list@3.0.0: {}
+ sass-embedded-unknown-all@1.103.1:
+ resolution: {integrity: sha512-p7kI4US8+n+YguKczXh+4KcodJnk+8cwv+QFdvMaz3OfPrdHV0EnhPsaVDWD9qXb1XXCEdUhpp6vQwGk3eKc3A==}
+ os: ['!android', '!darwin', '!linux', '!win32']
- emoticon@4.1.0: {}
+ sass-embedded-win32-arm64@1.103.1:
+ resolution: {integrity: sha512-/0renOj3SpZGu4TA8CZJ6qZbTxGZk1khkPfiBTmV1uFB40ESYM5VsdXNj76P07bsAjIj9X2fCjTafLQFLSd9Nw==}
+ engines: {node: '>=14.0.0'}
+ cpu: [arm64]
+ os: [win32]
- encodeurl@1.0.2: {}
+ sass-embedded-win32-x64@1.103.1:
+ resolution: {integrity: sha512-fIg60j9u5YlLUU3W8FvySMR4HHIo9R12HHFQTW7njyQ8nXqgR+t+XfCzGJloQka8g583BlAfu31Q76Ljr5o+9g==}
+ engines: {node: '>=14.0.0'}
+ cpu: [x64]
+ os: [win32]
- encodeurl@2.0.0: {}
+ sass-embedded@1.103.1:
+ resolution: {integrity: sha512-UVIuFZPzz+4DXYbHzQ5gKaKkyP2IH3Sc/WoF63N2V7QIfnC2E9UpQAtiKlCVJTfBe43HRgHDBLnXpZkYAEBsNQ==}
+ engines: {node: '>=20.19.0'}
+ hasBin: true
- enhanced-resolve@5.17.1:
- dependencies:
- graceful-fs: 4.2.11
- tapable: 2.2.1
+ sass@1.103.1:
+ resolution: {integrity: sha512-9icZURbP51S6S0QGoyaeqk9uB06GNWxsFYWfH5RgpFgqK5FA8tJcM3AdVxrZEVJ7dz+L87nG95gBKf4VuaMHGw==}
+ engines: {node: '>=20.19.0'}
+ hasBin: true
- entities@2.1.0: {}
+ scheduler@0.27.0:
+ resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==}
- entities@2.2.0: {}
+ scroll-into-view-if-needed@3.1.0:
+ resolution: {integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==}
- entities@4.5.0: {}
+ scule@1.3.0:
+ resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==}
- error-ex@1.3.2:
- dependencies:
- is-arrayish: 0.2.1
+ semver@6.3.1:
+ resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
+ hasBin: true
- es-abstract@1.23.3:
- dependencies:
- array-buffer-byte-length: 1.0.1
- arraybuffer.prototype.slice: 1.0.3
- available-typed-arrays: 1.0.7
- call-bind: 1.0.7
- data-view-buffer: 1.0.1
- data-view-byte-length: 1.0.1
- data-view-byte-offset: 1.0.0
- es-define-property: 1.0.0
- es-errors: 1.3.0
- es-object-atoms: 1.0.0
- es-set-tostringtag: 2.0.3
- es-to-primitive: 1.2.1
- function.prototype.name: 1.1.6
- get-intrinsic: 1.2.4
- get-symbol-description: 1.0.2
- globalthis: 1.0.4
- gopd: 1.0.1
- has-property-descriptors: 1.0.2
- has-proto: 1.0.3
- has-symbols: 1.0.3
- hasown: 2.0.2
- internal-slot: 1.0.7
- is-array-buffer: 3.0.4
- is-callable: 1.2.7
- is-data-view: 1.0.1
- is-negative-zero: 2.0.3
- is-regex: 1.1.4
- is-shared-array-buffer: 1.0.3
- is-string: 1.0.7
- is-typed-array: 1.1.13
- is-weakref: 1.0.2
- object-inspect: 1.13.2
- object-keys: 1.1.1
- object.assign: 4.1.5
- regexp.prototype.flags: 1.5.3
- safe-array-concat: 1.1.2
- safe-regex-test: 1.0.3
- string.prototype.trim: 1.2.9
- string.prototype.trimend: 1.0.8
- string.prototype.trimstart: 1.0.8
- typed-array-buffer: 1.0.2
- typed-array-byte-length: 1.0.1
- typed-array-byte-offset: 1.0.2
- typed-array-length: 1.0.6
- unbox-primitive: 1.0.2
- which-typed-array: 1.1.15
-
- es-array-method-boxes-properly@1.0.0: {}
-
- es-define-property@1.0.0:
- dependencies:
- get-intrinsic: 1.2.4
-
- es-define-property@1.0.1: {}
-
- es-errors@1.3.0: {}
-
- es-module-lexer@1.5.4: {}
-
- es-object-atoms@1.0.0:
- dependencies:
- es-errors: 1.3.0
-
- es-object-atoms@1.1.1:
- dependencies:
- es-errors: 1.3.0
-
- es-set-tostringtag@2.0.3:
- dependencies:
- get-intrinsic: 1.2.4
- has-tostringtag: 1.0.2
- hasown: 2.0.2
-
- es-to-primitive@1.2.1:
- dependencies:
- is-callable: 1.2.7
- is-date-object: 1.0.5
- is-symbol: 1.0.4
+ set-cookie-parser@2.7.2:
+ resolution: {integrity: sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==}
- esast-util-from-estree@2.0.0:
- dependencies:
- '@types/estree-jsx': 1.0.5
- devlop: 1.1.0
- estree-util-visit: 2.0.0
- unist-util-position-from-estree: 2.0.0
+ shiki@4.4.3:
+ resolution: {integrity: sha512-Mb/GvXPHBAXdgGIcnfU5L3ldpn1XcxrGkPHwqgRx17/I2XRfqlFKk2vGkHWINn1kdXvzJZeuO3is6I9KLPFm0g==}
+ engines: {node: '>=20'}
- esast-util-from-js@2.0.1:
- dependencies:
- '@types/estree-jsx': 1.0.5
- acorn: 8.14.0
- esast-util-from-estree: 2.0.0
- vfile-message: 4.0.2
+ snake-case@3.0.4:
+ resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==}
- escalade@3.2.0: {}
+ source-map-js@1.2.1:
+ resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
+ engines: {node: '>=0.10.0'}
- escape-goat@4.0.0: {}
+ source-map@0.7.6:
+ resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==}
+ engines: {node: '>= 12'}
- escape-html@1.0.3: {}
+ space-separated-tokens@2.0.2:
+ resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
- escape-string-regexp@1.0.5: {}
+ string-width@6.1.0:
+ resolution: {integrity: sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ==}
+ engines: {node: '>=16'}
- escape-string-regexp@4.0.0: {}
+ stringify-entities@4.0.4:
+ resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==}
- escape-string-regexp@5.0.0: {}
+ strip-ansi@7.2.0:
+ resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==}
+ engines: {node: '>=12'}
- eslint-scope@5.1.1:
- dependencies:
- esrecurse: 4.3.0
- estraverse: 4.3.0
+ style-to-js@1.1.21:
+ resolution: {integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==}
- esprima@4.0.1: {}
+ style-to-object@1.0.14:
+ resolution: {integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==}
- esrecurse@4.3.0:
- dependencies:
- estraverse: 5.3.0
+ stylis@4.4.0:
+ resolution: {integrity: sha512-5Z9ZpRzfuH6l/UAvCPAPUo3665Nk2wLaZU3x+TLHKVzIz33+sbJqbtrYoC3KD4/uVOr2Zp+L0LySezP9OHV9yA==}
- estraverse@4.3.0: {}
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
- estraverse@5.3.0: {}
+ supports-color@9.4.0:
+ resolution: {integrity: sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==}
+ engines: {node: '>=12'}
- estree-util-attach-comments@3.0.0:
- dependencies:
- '@types/estree': 1.0.6
+ svg-parser@2.1.0:
+ resolution: {integrity: sha512-bwLf38YmY+TDYHJw1Ex0Co8c4yeXuJAo8YnXGZrscxrvYoVVIvLeniEkV1Ks/54VteMnL4FtyN1+P+TZJdUPmQ==}
+ engines: {node: '>=8'}
- estree-util-build-jsx@3.0.1:
- dependencies:
- '@types/estree-jsx': 1.0.5
- devlop: 1.1.0
- estree-util-is-identifier-name: 3.0.0
- estree-walker: 3.0.3
+ sync-child-process@1.0.2:
+ resolution: {integrity: sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA==}
+ engines: {node: '>=16.0.0'}
- estree-util-is-identifier-name@3.0.0: {}
+ sync-message-port@1.2.0:
+ resolution: {integrity: sha512-gAQ9qrUN/UCypHtGFbbe7Rc/f9bzO88IwrG8TDo/aMKAApKyD6E3W4Cm0EfhfBb6Z6SKt59tTCTfD+n1xmAvMg==}
+ engines: {node: '>=16.0.0'}
- estree-util-scope@1.0.0:
- dependencies:
- '@types/estree': 1.0.6
- devlop: 1.1.0
+ tinyexec@1.3.0:
+ resolution: {integrity: sha512-QKAl9m8gWWGHV8jZcPeym6j+XULi6tOf1mT83WYJ4Lk2ytW/uwAWkrP0uFsdoYMdueVJ0qs26wZ+23xeB4ibNQ==}
+ engines: {node: '>=18'}
- estree-util-to-js@2.0.0:
- dependencies:
- '@types/estree-jsx': 1.0.5
- astring: 1.9.0
- source-map: 0.7.4
+ tinyglobby@0.2.17:
+ resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==}
+ engines: {node: '>=12.0.0'}
- estree-util-value-to-estree@3.1.2:
- dependencies:
- '@types/estree': 1.0.6
+ toggle-selection@1.0.6:
+ resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==}
- estree-util-visit@2.0.0:
- dependencies:
- '@types/estree-jsx': 1.0.5
- '@types/unist': 3.0.3
+ trim-lines@3.0.1:
+ resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
- estree-walker@3.0.3:
- dependencies:
- '@types/estree': 1.0.6
-
- esutils@2.0.3: {}
-
- eta@2.2.0: {}
-
- etag@1.8.1: {}
-
- eval@0.1.8:
- dependencies:
- '@types/node': 22.8.1
- require-like: 0.1.2
-
- eventemitter3@4.0.7: {}
-
- events@3.3.0: {}
-
- execa@5.1.1:
- dependencies:
- cross-spawn: 7.0.3
- get-stream: 6.0.1
- human-signals: 2.1.0
- is-stream: 2.0.1
- merge-stream: 2.0.0
- npm-run-path: 4.0.1
- onetime: 5.1.2
- signal-exit: 3.0.7
- strip-final-newline: 2.0.0
-
- express@4.22.1:
- dependencies:
- accepts: 1.3.8
- array-flatten: 1.1.1
- body-parser: 1.20.3
- content-disposition: 0.5.4
- content-type: 1.0.5
- cookie: 0.7.1
- cookie-signature: 1.0.6
- debug: 2.6.9
- depd: 2.0.0
- encodeurl: 2.0.0
- escape-html: 1.0.3
- etag: 1.8.1
- finalhandler: 1.3.1
- fresh: 0.5.2
- http-errors: 2.0.0
- merge-descriptors: 1.0.3
- methods: 1.1.2
- on-finished: 2.4.1
- parseurl: 1.3.3
- path-to-regexp: 0.1.12
- proxy-addr: 2.0.7
- qs: 6.14.0
- range-parser: 1.2.1
- safe-buffer: 5.2.1
- send: 0.19.0
- serve-static: 1.16.2
- setprototypeof: 1.2.0
- statuses: 2.0.1
- type-is: 1.6.18
- utils-merge: 1.0.1
- vary: 1.1.2
- transitivePeerDependencies:
- - supports-color
+ trough@2.2.0:
+ resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==}
- extend-shallow@2.0.1:
- dependencies:
- is-extendable: 0.1.1
+ ts-dedent@2.3.0:
+ resolution: {integrity: sha512-JfJeIHke7y2egdGGgRAvpCwYFUsHlM2gPcrVOxFkznt/4uzQ7HFmvE63iFHVLBJNDuyDOQgijDK/tXH/f6Msjg==}
+ engines: {node: '>=6.10'}
- extend@3.0.2: {}
+ ts-morph@27.0.2:
+ resolution: {integrity: sha512-fhUhgeljcrdZ+9DZND1De1029PrE+cMkIP7ooqkLRTrRLTqcki2AstsyJm0vRNbTbVCNJ0idGlbBrfqc7/nA8w==}
- fast-deep-equal@3.1.3: {}
+ tslib@2.8.1:
+ resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
- fast-glob@3.3.2:
- dependencies:
- '@nodelib/fs.stat': 2.0.5
- '@nodelib/fs.walk': 1.2.8
- glob-parent: 5.1.2
- merge2: 1.4.1
- micromatch: 4.0.8
+ typescript@6.0.3:
+ resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==}
+ engines: {node: '>=14.17'}
+ hasBin: true
- fast-json-stable-stringify@2.1.0: {}
+ ufo@1.6.4:
+ resolution: {integrity: sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==}
- fast-uri@3.0.3: {}
+ undici-types@6.21.0:
+ resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
- fastq@1.17.1:
- dependencies:
- reusify: 1.0.4
+ undici-types@7.24.6:
+ resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==}
- fault@2.0.1:
- dependencies:
- format: 0.2.2
+ unhead@2.1.17:
+ resolution: {integrity: sha512-HLMKXOszRhAPBrr6VlqCeVeJq2kbC4kXwzGLEZvvojPLWNYTJw22xG7Bfwhsvs31+IBet3Wl8ADg9dwYdyphfQ==}
- faye-websocket@0.11.4:
- dependencies:
- websocket-driver: 0.7.4
+ unified@11.0.5:
+ resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==}
- feed@4.2.2:
- dependencies:
- xml-js: 1.6.11
+ unist-util-is@6.0.1:
+ resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==}
- file-loader@6.2.0(webpack@5.95.0(@swc/core@1.16.0)):
- dependencies:
- loader-utils: 2.0.4
- schema-utils: 3.3.0
- webpack: 5.95.0(@swc/core@1.16.0)
+ unist-util-position-from-estree@2.0.0:
+ resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==}
- fill-range@7.1.1:
- dependencies:
- to-regex-range: 5.0.1
+ unist-util-position@5.0.0:
+ resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==}
- finalhandler@1.3.1:
- dependencies:
- debug: 2.6.9
- encodeurl: 2.0.0
- escape-html: 1.0.3
- on-finished: 2.4.1
- parseurl: 1.3.3
- statuses: 2.0.1
- unpipe: 1.0.0
- transitivePeerDependencies:
- - supports-color
+ unist-util-stringify-position@3.0.3:
+ resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==}
- find-cache-dir@4.0.0:
- dependencies:
- common-path-prefix: 3.0.0
- pkg-dir: 7.0.0
+ unist-util-stringify-position@4.0.0:
+ resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==}
- find-up@6.3.0:
- dependencies:
- locate-path: 7.2.0
- path-exists: 5.0.0
+ unist-util-visit-children@3.0.0:
+ resolution: {integrity: sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==}
- flat@5.0.2: {}
+ unist-util-visit-parents@6.0.2:
+ resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==}
- follow-redirects@1.15.9: {}
+ unist-util-visit@5.1.0:
+ resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==}
- for-each@0.3.3:
- dependencies:
- is-callable: 1.2.7
+ unplugin-icons@23.0.1:
+ resolution: {integrity: sha512-rv0XEJepajKzDLvRUWASM8K+8+/CCfZn2jtogXqg6RIp7kpatRc/aFrVJn8ANQA09e++lPEEv9yX8cC9enc+QQ==}
+ peerDependencies:
+ '@svgr/core': '>=7.0.0'
+ '@svgx/core': ^1.0.1
+ '@vue/compiler-sfc': ^3.0.2
+ svelte: ^3.0.0 || ^4.0.0 || ^5.0.0
+ peerDependenciesMeta:
+ '@svgr/core':
+ optional: true
+ '@svgx/core':
+ optional: true
+ '@vue/compiler-sfc':
+ optional: true
+ svelte:
+ optional: true
- form-data-encoder@2.1.4: {}
+ unplugin@2.3.11:
+ resolution: {integrity: sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==}
+ engines: {node: '>=18.12.0'}
- format@0.2.2: {}
+ update-browserslist-db@1.3.1:
+ resolution: {integrity: sha512-ZZ61DsRsOnakl74HAmp3oSN4aXUmEWXf+i/yv0h7tIBfICc3VdrFErQKUUKPgu3AMsTUMbcongALEN4l6GSUrQ==}
+ hasBin: true
+ peerDependencies:
+ browserslist: '>= 4.21.0'
- forwarded@0.2.0: {}
+ util-ts-types@1.0.0:
+ resolution: {integrity: sha512-/HXNO5CaJxhnzk5xzpOg1esDu3KHXTW76p+RnFYjIAj9S8nifzsa/BGqHCPr+8wntPJ9k5eUFf9vqOOCo8RgbQ==}
- fraction.js@5.3.4: {}
+ uuid@14.0.2:
+ resolution: {integrity: sha512-xZe/16rV4aa+HGSOCiY2YeLT1OybRLrrkL/Rqaq7p7GMVXjFh+6wN4oMYgjFmnSnhY8t6Xpdl2l9qmnHYuMHwQ==}
+ hasBin: true
- fresh@0.5.2: {}
+ uvu@0.5.6:
+ resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==}
+ engines: {node: '>=8'}
+ hasBin: true
- fs-extra@11.2.0:
- dependencies:
- graceful-fs: 4.2.11
- jsonfile: 6.1.0
- universalify: 2.0.1
+ varint@6.0.0:
+ resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==}
- fsevents@2.3.3:
- optional: true
+ vfile-location@5.0.3:
+ resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==}
- function-bind@1.1.2: {}
+ vfile-message@4.0.3:
+ resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==}
- function.prototype.name@1.1.6:
- dependencies:
- call-bind: 1.0.7
- define-properties: 1.2.1
- es-abstract: 1.23.3
- functions-have-names: 1.2.3
+ vfile-reporter@8.1.1:
+ resolution: {integrity: sha512-qxRZcnFSQt6pWKn3PAk81yLK2rO2i7CDXpy8v8ZquiEOMLSnPw6BMSi9Y1sUCwGGl7a9b3CJT1CKpnRF7pp66g==}
- functions-have-names@1.2.3: {}
+ vfile-sort@4.0.0:
+ resolution: {integrity: sha512-lffPI1JrbHDTToJwcq0rl6rBmkjQmMuXkAxsZPRS9DXbaJQvc642eCg6EGxcX2i1L+esbuhq+2l9tBll5v8AeQ==}
- gensync@1.0.0-beta.2: {}
+ vfile-statistics@3.0.0:
+ resolution: {integrity: sha512-/qlwqwWBWFOmpXujL/20P+Iuydil0rZZNglR+VNm6J0gpLHwuVM5s7g2TfVoswbXjZ4HuIhLMySEyIw5i7/D8w==}
- get-intrinsic@1.2.4:
- dependencies:
- es-errors: 1.3.0
- function-bind: 1.1.2
- has-proto: 1.0.3
- has-symbols: 1.0.3
- hasown: 2.0.2
+ vfile@6.0.3:
+ resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==}
- get-intrinsic@1.3.0:
- dependencies:
- call-bind-apply-helpers: 1.0.2
- es-define-property: 1.0.1
- es-errors: 1.3.0
- es-object-atoms: 1.1.1
- function-bind: 1.1.2
- get-proto: 1.0.1
- gopd: 1.2.0
- has-symbols: 1.1.0
- hasown: 2.0.2
- math-intrinsics: 1.1.0
+ web-namespaces@2.0.1:
+ resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==}
- get-own-enumerable-property-symbols@3.0.2: {}
+ web-worker@1.5.0:
+ resolution: {integrity: sha512-RiMReJrTAiA+mBjGONMnjVDP2u3p9R1vkcGz6gDIrOMT3oGuYwX2WRMYI9ipkphSuE5XKEhydbhNEJh4NY9mlw==}
- get-proto@1.0.1:
- dependencies:
- dunder-proto: 1.0.1
- es-object-atoms: 1.1.1
+ webpack-virtual-modules@0.6.2:
+ resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==}
- get-stream@6.0.1: {}
+ yallist@3.1.1:
+ resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
- get-symbol-description@1.0.2:
- dependencies:
- call-bind: 1.0.7
- es-errors: 1.3.0
- get-intrinsic: 1.2.4
+ yaml@2.9.0:
+ resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==}
+ engines: {node: '>= 14.6'}
+ hasBin: true
- github-slugger@1.5.0: {}
+ zwitch@2.0.4:
+ resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
- glob-parent@5.1.2:
- dependencies:
- is-glob: 4.0.3
+snapshots:
- glob-parent@6.0.2:
+ '@antfu/install-pkg@1.1.0':
dependencies:
- is-glob: 4.0.3
+ package-manager-detector: 1.8.0
+ tinyexec: 1.3.0
- glob-to-regex.js@1.2.0(tslib@2.8.0):
+ '@babel/code-frame@7.29.7':
dependencies:
- tslib: 2.8.0
+ '@babel/helper-validator-identifier': 7.29.7
+ js-tokens: 4.0.0
+ picocolors: 1.1.1
- glob-to-regexp@0.4.1: {}
+ '@babel/compat-data@7.29.7': {}
- global-dirs@3.0.1:
+ '@babel/core@7.29.7(supports-color@9.4.0)':
dependencies:
- ini: 2.0.0
-
- globals@11.12.0: {}
+ '@babel/code-frame': 7.29.7
+ '@babel/generator': 7.29.8
+ '@babel/helper-compilation-targets': 7.29.7
+ '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7(supports-color@9.4.0))(supports-color@9.4.0)
+ '@babel/helpers': 7.29.7
+ '@babel/parser': 7.29.8
+ '@babel/template': 7.29.7
+ '@babel/traverse': 7.29.8(supports-color@9.4.0)
+ '@babel/types': 7.29.8
+ '@jridgewell/remapping': 2.3.5
+ convert-source-map: 2.0.0
+ debug: 4.4.3(supports-color@9.4.0)
+ gensync: 1.0.0-beta.2
+ json5: 2.2.3
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
- globalthis@1.0.4:
+ '@babel/generator@7.29.8':
dependencies:
- define-properties: 1.2.1
- gopd: 1.0.1
+ '@babel/parser': 7.29.8
+ '@babel/types': 7.29.8
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+ jsesc: 3.1.0
- globby@11.1.0:
+ '@babel/helper-compilation-targets@7.29.7':
dependencies:
- array-union: 2.1.0
- dir-glob: 3.0.1
- fast-glob: 3.3.2
- ignore: 5.3.2
- merge2: 1.4.1
- slash: 3.0.0
+ '@babel/compat-data': 7.29.7
+ '@babel/helper-validator-option': 7.29.7
+ browserslist: 4.28.8
+ lru-cache: 5.1.1
+ semver: 6.3.1
- globby@12.1.0:
- dependencies:
- array-union: 3.0.1
- dir-glob: 3.0.1
- fast-glob: 3.3.2
- ignore: 5.3.2
- merge2: 1.4.1
- slash: 4.0.0
+ '@babel/helper-globals@7.29.7': {}
- globby@13.2.2:
+ '@babel/helper-module-imports@7.29.7(supports-color@9.4.0)':
dependencies:
- dir-glob: 3.0.1
- fast-glob: 3.3.2
- ignore: 5.3.2
- merge2: 1.4.1
- slash: 4.0.0
+ '@babel/traverse': 7.29.8(supports-color@9.4.0)
+ '@babel/types': 7.29.8
+ transitivePeerDependencies:
+ - supports-color
- gopd@1.0.1:
+ '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7(supports-color@9.4.0))(supports-color@9.4.0)':
dependencies:
- get-intrinsic: 1.2.4
+ '@babel/core': 7.29.7(supports-color@9.4.0)
+ '@babel/helper-module-imports': 7.29.7(supports-color@9.4.0)
+ '@babel/helper-validator-identifier': 7.29.7
+ '@babel/traverse': 7.29.8(supports-color@9.4.0)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-string-parser@7.29.7': {}
+
+ '@babel/helper-validator-identifier@7.29.7': {}
- gopd@1.2.0: {}
+ '@babel/helper-validator-option@7.29.7': {}
- got@12.6.1:
+ '@babel/helpers@7.29.7':
dependencies:
- '@sindresorhus/is': 5.6.0
- '@szmarczak/http-timer': 5.0.1
- cacheable-lookup: 7.0.0
- cacheable-request: 10.2.14
- decompress-response: 6.0.0
- form-data-encoder: 2.1.4
- get-stream: 6.0.1
- http2-wrapper: 2.2.1
- lowercase-keys: 3.0.0
- p-cancelable: 3.0.0
- responselike: 3.0.0
+ '@babel/template': 7.29.7
+ '@babel/types': 7.29.8
- graceful-fs@4.2.10: {}
+ '@babel/parser@7.29.8':
+ dependencies:
+ '@babel/types': 7.29.8
- graceful-fs@4.2.11: {}
+ '@babel/template@7.29.7':
+ dependencies:
+ '@babel/code-frame': 7.29.7
+ '@babel/parser': 7.29.8
+ '@babel/types': 7.29.8
- gzip-size@6.0.0:
+ '@babel/traverse@7.29.8(supports-color@9.4.0)':
dependencies:
- duplexer: 0.1.2
+ '@babel/code-frame': 7.29.7
+ '@babel/generator': 7.29.8
+ '@babel/helper-globals': 7.29.7
+ '@babel/parser': 7.29.8
+ '@babel/template': 7.29.7
+ '@babel/types': 7.29.8
+ debug: 4.4.3(supports-color@9.4.0)
+ transitivePeerDependencies:
+ - supports-color
- hachure-fill@0.5.2: {}
+ '@babel/types@7.29.8':
+ dependencies:
+ '@babel/helper-string-parser': 7.29.7
+ '@babel/helper-validator-identifier': 7.29.7
- handle-thing@2.0.1: {}
+ '@biomejs/biome@2.5.8':
+ optionalDependencies:
+ '@biomejs/cli-darwin-arm64': 2.5.8
+ '@biomejs/cli-darwin-x64': 2.5.8
+ '@biomejs/cli-linux-arm64': 2.5.8
+ '@biomejs/cli-linux-arm64-musl': 2.5.8
+ '@biomejs/cli-linux-x64': 2.5.8
+ '@biomejs/cli-linux-x64-musl': 2.5.8
+ '@biomejs/cli-win32-arm64': 2.5.8
+ '@biomejs/cli-win32-x64': 2.5.8
+
+ '@biomejs/cli-darwin-arm64@2.5.8':
+ optional: true
- has-bigints@1.0.2: {}
+ '@biomejs/cli-darwin-x64@2.5.8':
+ optional: true
- has-flag@3.0.0: {}
+ '@biomejs/cli-linux-arm64-musl@2.5.8':
+ optional: true
- has-flag@4.0.0: {}
+ '@biomejs/cli-linux-arm64@2.5.8':
+ optional: true
- has-property-descriptors@1.0.2:
- dependencies:
- es-define-property: 1.0.0
+ '@biomejs/cli-linux-x64-musl@2.5.8':
+ optional: true
- has-proto@1.0.3: {}
+ '@biomejs/cli-linux-x64@2.5.8':
+ optional: true
- has-symbols@1.0.3: {}
+ '@biomejs/cli-win32-arm64@2.5.8':
+ optional: true
- has-symbols@1.1.0: {}
+ '@biomejs/cli-win32-x64@2.5.8':
+ optional: true
- has-tostringtag@1.0.2:
- dependencies:
- has-symbols: 1.0.3
+ '@braintree/sanitize-url@6.0.4': {}
- has-yarn@3.0.0: {}
+ '@bufbuild/protobuf@2.14.0': {}
- hasown@2.0.2:
+ '@emnapi/core@1.11.3':
dependencies:
- function-bind: 1.1.2
+ '@emnapi/wasi-threads': 1.2.3
+ tslib: 2.8.1
+ optional: true
- hast-util-from-parse5@8.0.1:
+ '@emnapi/runtime@1.11.3':
dependencies:
- '@types/hast': 3.0.4
- '@types/unist': 3.0.3
- devlop: 1.1.0
- hastscript: 8.0.0
- property-information: 6.5.0
- vfile: 6.0.3
- vfile-location: 5.0.3
- web-namespaces: 2.0.1
-
- hast-util-is-element@1.1.0: {}
+ tslib: 2.8.1
+ optional: true
- hast-util-parse-selector@4.0.0:
+ '@emnapi/wasi-threads@1.2.3':
dependencies:
- '@types/hast': 3.0.4
+ tslib: 2.8.1
+ optional: true
- hast-util-raw@9.0.4:
+ '@iconify-json/mingcute@1.2.8':
dependencies:
- '@types/hast': 3.0.4
- '@types/unist': 3.0.3
- '@ungap/structured-clone': 1.2.0
- hast-util-from-parse5: 8.0.1
- hast-util-to-parse5: 8.0.0
- html-void-elements: 3.0.0
- mdast-util-to-hast: 13.2.0
- parse5: 7.2.0
- unist-util-position: 5.0.0
- unist-util-visit: 5.1.0
- vfile: 6.0.3
- web-namespaces: 2.0.1
- zwitch: 2.0.4
+ '@iconify/types': 2.0.0
- hast-util-to-estree@3.1.0:
+ '@iconify-json/ph@1.2.2':
dependencies:
- '@types/estree': 1.0.6
- '@types/estree-jsx': 1.0.5
- '@types/hast': 3.0.4
- comma-separated-tokens: 2.0.3
- devlop: 1.1.0
- estree-util-attach-comments: 3.0.0
- estree-util-is-identifier-name: 3.0.0
- hast-util-whitespace: 3.0.0
- mdast-util-mdx-expression: 2.0.1
- mdast-util-mdx-jsx: 3.1.3
- mdast-util-mdxjs-esm: 2.0.1
- property-information: 6.5.0
- space-separated-tokens: 2.0.2
- style-to-object: 0.4.4
- unist-util-position: 5.0.0
- zwitch: 2.0.4
- transitivePeerDependencies:
- - supports-color
+ '@iconify/types': 2.0.0
- hast-util-to-html@9.0.5:
+ '@iconify-json/simple-icons@1.2.93':
dependencies:
- '@types/hast': 3.0.5
- '@types/unist': 3.0.3
- ccount: 2.0.1
- comma-separated-tokens: 2.0.3
- hast-util-whitespace: 3.0.0
- html-void-elements: 3.0.0
- mdast-util-to-hast: 13.2.0
- property-information: 7.1.0
- space-separated-tokens: 2.0.2
- stringify-entities: 4.0.4
- zwitch: 2.0.4
+ '@iconify/types': 2.0.0
- hast-util-to-jsx-runtime@2.3.2:
- dependencies:
- '@types/estree': 1.0.6
- '@types/hast': 3.0.4
- '@types/unist': 3.0.3
- comma-separated-tokens: 2.0.3
- devlop: 1.1.0
- estree-util-is-identifier-name: 3.0.0
- hast-util-whitespace: 3.0.0
- mdast-util-mdx-expression: 2.0.1
- mdast-util-mdx-jsx: 3.1.3
- mdast-util-mdxjs-esm: 2.0.1
- property-information: 6.5.0
- space-separated-tokens: 2.0.2
- style-to-object: 1.0.8
- unist-util-position: 5.0.0
- vfile-message: 4.0.2
- transitivePeerDependencies:
- - supports-color
+ '@iconify/types@2.0.0': {}
- hast-util-to-parse5@8.0.0:
+ '@iconify/utils@3.1.4':
dependencies:
- '@types/hast': 3.0.4
- comma-separated-tokens: 2.0.3
- devlop: 1.1.0
- property-information: 6.5.0
- space-separated-tokens: 2.0.2
- web-namespaces: 2.0.1
- zwitch: 2.0.4
+ '@antfu/install-pkg': 1.1.0
+ '@iconify/types': 2.0.0
+ import-meta-resolve: 4.2.0
- hast-util-to-string@3.0.1:
+ '@jridgewell/gen-mapping@0.3.13':
dependencies:
- '@types/hast': 3.0.5
+ '@jridgewell/sourcemap-codec': 1.5.5
+ '@jridgewell/trace-mapping': 0.3.31
- hast-util-whitespace@3.0.0:
+ '@jridgewell/remapping@2.3.5':
dependencies:
- '@types/hast': 3.0.5
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
- hastscript@8.0.0:
- dependencies:
- '@types/hast': 3.0.4
- comma-separated-tokens: 2.0.3
- hast-util-parse-selector: 4.0.0
- property-information: 6.5.0
- space-separated-tokens: 2.0.2
+ '@jridgewell/resolve-uri@3.1.2': {}
- he@1.2.0: {}
+ '@jridgewell/sourcemap-codec@1.5.5': {}
- history@4.10.1:
+ '@jridgewell/trace-mapping@0.3.31':
dependencies:
- '@babel/runtime': 7.26.0
- loose-envify: 1.4.0
- resolve-pathname: 3.0.0
- tiny-invariant: 1.3.3
- tiny-warning: 1.0.3
- value-equal: 1.0.1
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.5
- hoist-non-react-statics@3.3.2:
+ '@mdx-js/mdx@3.1.1(supports-color@9.4.0)':
dependencies:
- react-is: 16.13.1
+ '@types/estree': 1.0.9
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 3.0.5
+ '@types/mdx': 2.0.14
+ acorn: 8.18.0
+ collapse-white-space: 2.1.0
+ devlop: 1.1.0
+ estree-util-is-identifier-name: 3.0.0
+ estree-util-scope: 1.0.0
+ estree-walker: 3.0.3
+ hast-util-to-jsx-runtime: 2.3.6(supports-color@9.4.0)
+ markdown-extensions: 2.0.0
+ recma-build-jsx: 1.0.0
+ recma-jsx: 1.0.1(acorn@8.18.0)
+ recma-stringify: 1.0.0
+ rehype-recma: 1.0.0(supports-color@9.4.0)
+ remark-mdx: 3.1.1(supports-color@9.4.0)
+ remark-parse: 11.0.0(supports-color@9.4.0)
+ remark-rehype: 11.1.2
+ source-map: 0.7.6
+ unified: 11.0.5
+ unist-util-position-from-estree: 2.0.0
+ unist-util-stringify-position: 4.0.0
+ unist-util-visit: 5.1.0
+ vfile: 6.0.3
+ transitivePeerDependencies:
+ - supports-color
- hpack.js@2.1.6:
+ '@mdx-js/react@3.1.1(@types/react@19.2.18)(react@19.2.8)':
dependencies:
- inherits: 2.0.4
- obuf: 1.1.2
- readable-stream: 2.3.8
- wbuf: 1.7.3
-
- html-escaper@2.0.2: {}
+ '@types/mdx': 2.0.14
+ '@types/react': 19.2.18
+ react: 19.2.8
- html-minifier-terser@6.1.0:
+ '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)':
dependencies:
- camel-case: 4.1.2
- clean-css: 5.3.3
- commander: 8.3.0
- he: 1.2.0
- param-case: 3.0.4
- relateurl: 0.2.7
- terser: 5.36.0
+ '@emnapi/core': 1.11.3
+ '@emnapi/runtime': 1.11.3
+ '@tybys/wasm-util': 0.10.3
+ optional: true
- html-minifier-terser@7.2.0:
- dependencies:
- camel-case: 4.1.2
- clean-css: 5.3.3
- commander: 10.0.1
- entities: 4.5.0
- param-case: 3.0.4
- relateurl: 0.2.7
- terser: 5.36.0
+ '@parcel/watcher-android-arm64@2.6.0':
+ optional: true
- html-tags@3.3.1: {}
+ '@parcel/watcher-darwin-arm64@2.6.0':
+ optional: true
- html-void-elements@3.0.0: {}
+ '@parcel/watcher-darwin-x64@2.6.0':
+ optional: true
- html-webpack-plugin@5.6.3(@rspack/core@1.7.11)(webpack@5.95.0(@swc/core@1.16.0)):
- dependencies:
- '@types/html-minifier-terser': 6.1.0
- html-minifier-terser: 6.1.0
- lodash: 4.17.21
- pretty-error: 4.0.0
- tapable: 2.2.1
- optionalDependencies:
- '@rspack/core': 1.7.11
- webpack: 5.95.0(@swc/core@1.16.0)
+ '@parcel/watcher-freebsd-x64@2.6.0':
+ optional: true
- htmlparser2@6.1.0:
- dependencies:
- domelementtype: 2.3.0
- domhandler: 4.3.1
- domutils: 2.8.0
- entities: 2.2.0
+ '@parcel/watcher-linux-arm-glibc@2.6.0':
+ optional: true
- htmlparser2@8.0.2:
- dependencies:
- domelementtype: 2.3.0
- domhandler: 5.0.3
- domutils: 3.1.0
- entities: 4.5.0
+ '@parcel/watcher-linux-arm-musl@2.6.0':
+ optional: true
- http-cache-semantics@4.1.1: {}
+ '@parcel/watcher-linux-arm64-glibc@2.6.0':
+ optional: true
- http-deceiver@1.2.7: {}
+ '@parcel/watcher-linux-arm64-musl@2.6.0':
+ optional: true
- http-errors@1.6.3:
- dependencies:
- depd: 1.1.2
- inherits: 2.0.3
- setprototypeof: 1.1.0
- statuses: 1.5.0
+ '@parcel/watcher-linux-x64-glibc@2.6.0':
+ optional: true
- http-errors@2.0.0:
- dependencies:
- depd: 2.0.0
- inherits: 2.0.4
- setprototypeof: 1.2.0
- statuses: 2.0.1
- toidentifier: 1.0.1
+ '@parcel/watcher-linux-x64-musl@2.6.0':
+ optional: true
+
+ '@parcel/watcher-win32-arm64@2.6.0':
+ optional: true
- http-parser-js@0.5.8: {}
+ '@parcel/watcher-win32-x64@2.6.0':
+ optional: true
- http-proxy-middleware@2.0.9(@types/express@4.17.21):
+ '@parcel/watcher@2.6.0':
dependencies:
- '@types/http-proxy': 1.17.15
- http-proxy: 1.18.1
+ detect-libc: 2.1.2
is-glob: 4.0.3
- is-plain-obj: 3.0.0
- micromatch: 4.0.8
+ node-addon-api: 7.1.1
+ picomatch: 4.0.7
optionalDependencies:
- '@types/express': 4.17.21
- transitivePeerDependencies:
- - debug
+ '@parcel/watcher-android-arm64': 2.6.0
+ '@parcel/watcher-darwin-arm64': 2.6.0
+ '@parcel/watcher-darwin-x64': 2.6.0
+ '@parcel/watcher-freebsd-x64': 2.6.0
+ '@parcel/watcher-linux-arm-glibc': 2.6.0
+ '@parcel/watcher-linux-arm-musl': 2.6.0
+ '@parcel/watcher-linux-arm64-glibc': 2.6.0
+ '@parcel/watcher-linux-arm64-musl': 2.6.0
+ '@parcel/watcher-linux-x64-glibc': 2.6.0
+ '@parcel/watcher-linux-x64-musl': 2.6.0
+ '@parcel/watcher-win32-arm64': 2.6.0
+ '@parcel/watcher-win32-x64': 2.6.0
+ optional: true
- http-proxy@1.18.1:
+ '@rsbuild/core@2.1.13':
dependencies:
- eventemitter3: 4.0.7
- follow-redirects: 1.15.9
- requires-port: 1.0.0
+ '@rspack/core': 2.1.10(@swc/helpers@0.5.23)
+ '@swc/helpers': 0.5.23
transitivePeerDependencies:
- - debug
-
- http2-wrapper@2.2.1:
- dependencies:
- quick-lru: 5.1.1
- resolve-alpn: 1.2.1
-
- human-signals@2.1.0: {}
-
- husky@7.0.4: {}
+ - '@module-federation/runtime-tools'
- hyperdyperid@1.2.0: {}
-
- iconv-lite@0.4.24:
+ '@rsbuild/plugin-react@2.1.0(@rsbuild/core@2.1.13)(@rspack/core@2.1.10(@swc/helpers@0.5.23))':
dependencies:
- safer-buffer: 2.1.2
+ '@rspack/plugin-react-refresh': 2.0.2(@rspack/core@2.1.10(@swc/helpers@0.5.23))(react-refresh@0.18.0)
+ react-refresh: 0.18.0
+ optionalDependencies:
+ '@rsbuild/core': 2.1.13
+ transitivePeerDependencies:
+ - '@rspack/core'
- iconv-lite@0.6.3:
+ '@rsbuild/plugin-sass@2.0.1(@rsbuild/core@2.1.13)':
dependencies:
- safer-buffer: 2.1.2
+ deepmerge: 4.3.1
+ loader-utils: 2.0.4
+ postcss: 8.5.26
+ reduce-configs: 2.0.1
+ sass-embedded: 1.103.1
+ optionalDependencies:
+ '@rsbuild/core': 2.1.13
- icss-utils@5.1.0(postcss@8.5.6):
- dependencies:
- postcss: 8.5.6
+ '@rspack/binding-darwin-arm64@2.1.10':
+ optional: true
- ignore@5.3.2: {}
+ '@rspack/binding-darwin-x64@2.1.10':
+ optional: true
- image-size@2.0.2: {}
+ '@rspack/binding-linux-arm64-gnu@2.1.10':
+ optional: true
- immutable@5.1.5: {}
+ '@rspack/binding-linux-arm64-musl@2.1.10':
+ optional: true
- import-fresh@3.3.0:
- dependencies:
- parent-module: 1.0.1
- resolve-from: 4.0.0
+ '@rspack/binding-linux-ppc64-gnu@2.1.10':
+ optional: true
- import-lazy@4.0.0: {}
+ '@rspack/binding-linux-riscv64-gnu@2.1.10':
+ optional: true
- imurmurhash@0.1.4: {}
+ '@rspack/binding-linux-riscv64-musl@2.1.10':
+ optional: true
- indent-string@4.0.0: {}
+ '@rspack/binding-linux-s390x-gnu@2.1.10':
+ optional: true
- infima@0.2.0-alpha.45: {}
+ '@rspack/binding-linux-x64-gnu@2.1.10':
+ optional: true
- inherits@2.0.3: {}
+ '@rspack/binding-linux-x64-musl@2.1.10':
+ optional: true
- inherits@2.0.4: {}
+ '@rspack/binding-wasm32-wasi@2.1.10':
+ dependencies:
+ '@emnapi/core': 1.11.3
+ '@emnapi/runtime': 1.11.3
+ '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)
+ optional: true
- ini@1.3.8: {}
+ '@rspack/binding-win32-arm64-msvc@2.1.10':
+ optional: true
- ini@2.0.0: {}
+ '@rspack/binding-win32-ia32-msvc@2.1.10':
+ optional: true
- inline-style-parser@0.1.1: {}
+ '@rspack/binding-win32-x64-msvc@2.1.10':
+ optional: true
- inline-style-parser@0.2.4: {}
+ '@rspack/binding@2.1.10':
+ optionalDependencies:
+ '@rspack/binding-darwin-arm64': 2.1.10
+ '@rspack/binding-darwin-x64': 2.1.10
+ '@rspack/binding-linux-arm64-gnu': 2.1.10
+ '@rspack/binding-linux-arm64-musl': 2.1.10
+ '@rspack/binding-linux-ppc64-gnu': 2.1.10
+ '@rspack/binding-linux-riscv64-gnu': 2.1.10
+ '@rspack/binding-linux-riscv64-musl': 2.1.10
+ '@rspack/binding-linux-s390x-gnu': 2.1.10
+ '@rspack/binding-linux-x64-gnu': 2.1.10
+ '@rspack/binding-linux-x64-musl': 2.1.10
+ '@rspack/binding-wasm32-wasi': 2.1.10
+ '@rspack/binding-win32-arm64-msvc': 2.1.10
+ '@rspack/binding-win32-ia32-msvc': 2.1.10
+ '@rspack/binding-win32-x64-msvc': 2.1.10
+
+ '@rspack/core@2.1.10(@swc/helpers@0.5.23)':
+ dependencies:
+ '@rspack/binding': 2.1.10
+ optionalDependencies:
+ '@swc/helpers': 0.5.23
- internal-slot@1.0.7:
+ '@rspack/plugin-react-refresh@2.0.2(@rspack/core@2.1.10(@swc/helpers@0.5.23))(react-refresh@0.18.0)':
dependencies:
- es-errors: 1.3.0
- hasown: 2.0.2
- side-channel: 1.0.6
-
- internmap@1.0.1: {}
-
- internmap@2.0.3: {}
+ react-refresh: 0.18.0
+ optionalDependencies:
+ '@rspack/core': 2.1.10(@swc/helpers@0.5.23)
- invariant@2.2.4:
+ '@rspress/core@2.0.21(@rspack/core@2.1.10(@swc/helpers@0.5.23))(micromark-util-types@2.0.2)(micromark@4.0.2(supports-color@9.4.0))(supports-color@9.4.0)':
dependencies:
- loose-envify: 1.4.0
-
- ipaddr.js@1.9.1: {}
-
- ipaddr.js@2.2.0: {}
-
- is-alphabetical@2.0.1: {}
+ '@mdx-js/mdx': 3.1.1(supports-color@9.4.0)
+ '@mdx-js/react': 3.1.1(@types/react@19.2.18)(react@19.2.8)
+ '@rsbuild/core': 2.1.13
+ '@rsbuild/plugin-react': 2.1.0(@rsbuild/core@2.1.13)(@rspack/core@2.1.10(@swc/helpers@0.5.23))
+ '@rspress/shared': 2.0.21(supports-color@9.4.0)
+ '@shikijs/rehype': 4.4.3
+ '@types/mdast': 4.0.4
+ '@types/react': 19.2.18
+ '@unhead/react': 2.1.17(react@19.2.8)
+ body-scroll-lock: 4.0.0-beta.0
+ clsx: 2.1.1
+ copy-to-clipboard: 3.3.3
+ flexsearch: 0.8.212
+ hast-util-heading-rank: 3.0.0
+ hast-util-to-jsx-runtime: 2.3.6(supports-color@9.4.0)
+ mdast-util-mdx: 3.0.0(supports-color@9.4.0)
+ mdast-util-mdxjs-esm: 2.0.1(supports-color@9.4.0)
+ medium-zoom: 1.1.0
+ nprogress: 0.2.0
+ react: 19.2.8
+ react-dom: 19.2.8(react@19.2.8)
+ react-lazy-with-preload: 2.2.1
+ react-render-to-markdown: 19.1.0(react@19.2.8)
+ react-router-dom: 7.18.2(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
+ rehype-external-links: 3.0.0
+ rehype-raw: 7.0.0
+ remark-cjk-friendly: 2.3.1(@types/mdast@4.0.4)(micromark-util-types@2.0.2)(micromark@4.0.2(supports-color@9.4.0))(unified@11.0.5)
+ remark-cjk-friendly-gfm-strikethrough: 2.3.1(@types/mdast@4.0.4)(micromark-util-types@2.0.2)(micromark@4.0.2(supports-color@9.4.0))(supports-color@9.4.0)(unified@11.0.5)
+ remark-gfm: 4.0.1(supports-color@9.4.0)
+ remark-mdx: 3.1.1(supports-color@9.4.0)
+ remark-parse: 11.0.0(supports-color@9.4.0)
+ remark-stringify: 11.0.0
+ scroll-into-view-if-needed: 3.1.0
+ shiki: 4.4.3
+ unified: 11.0.5
+ unist-util-visit: 5.1.0
+ unist-util-visit-children: 3.0.0
+ vfile: 6.0.3
+ transitivePeerDependencies:
+ - '@module-federation/runtime-tools'
+ - '@rspack/core'
+ - core-js
+ - micromark
+ - micromark-util-types
+ - supports-color
- is-alphanumerical@2.0.1:
+ '@rspress/plugin-sitemap@2.0.21(@rspress/core@2.0.21(@rspack/core@2.1.10(@swc/helpers@0.5.23))(micromark-util-types@2.0.2)(micromark@4.0.2(supports-color@9.4.0))(supports-color@9.4.0))':
dependencies:
- is-alphabetical: 2.0.1
- is-decimal: 2.0.1
+ '@rspress/core': 2.0.21(@rspack/core@2.1.10(@swc/helpers@0.5.23))(micromark-util-types@2.0.2)(micromark@4.0.2(supports-color@9.4.0))(supports-color@9.4.0)
- is-array-buffer@3.0.4:
+ '@rspress/shared@2.0.21(supports-color@9.4.0)':
dependencies:
- call-bind: 1.0.7
- get-intrinsic: 1.2.4
-
- is-arrayish@0.2.1: {}
+ '@rsbuild/core': 2.1.13
+ '@shikijs/rehype': 4.4.3
+ '@types/react': 19.2.18
+ mdast-util-mdx-jsx: 3.2.0(supports-color@9.4.0)
+ unified: 11.0.5
+ transitivePeerDependencies:
+ - '@module-federation/runtime-tools'
+ - core-js
+ - supports-color
- is-bigint@1.0.4:
+ '@shikijs/core@4.4.3':
dependencies:
- has-bigints: 1.0.2
+ '@shikijs/primitive': 4.4.3
+ '@shikijs/types': 4.4.3
+ '@shikijs/vscode-textmate': 10.0.2
+ '@types/hast': 3.0.5
+ hast-util-to-html: 9.0.5
- is-binary-path@2.1.0:
+ '@shikijs/engine-javascript@4.4.3':
dependencies:
- binary-extensions: 2.3.0
+ '@shikijs/types': 4.4.3
+ '@shikijs/vscode-textmate': 10.0.2
+ oniguruma-to-es: 4.3.6
- is-boolean-object@1.1.2:
+ '@shikijs/engine-oniguruma@4.4.3':
dependencies:
- call-bind: 1.0.7
- has-tostringtag: 1.0.2
-
- is-callable@1.2.7: {}
+ '@shikijs/types': 4.4.3
+ '@shikijs/vscode-textmate': 10.0.2
- is-ci@3.0.1:
+ '@shikijs/langs@4.4.3':
dependencies:
- ci-info: 3.9.0
+ '@shikijs/types': 4.4.3
- is-core-module@2.15.1:
+ '@shikijs/primitive@4.4.3':
dependencies:
- hasown: 2.0.2
+ '@shikijs/types': 4.4.3
+ '@shikijs/vscode-textmate': 10.0.2
+ '@types/hast': 3.0.5
- is-data-view@1.0.1:
+ '@shikijs/rehype@4.4.3':
dependencies:
- is-typed-array: 1.1.13
+ '@shikijs/types': 4.4.3
+ '@types/hast': 3.0.5
+ hast-util-to-string: 3.0.1
+ shiki: 4.4.3
+ unified: 11.0.5
+ unist-util-visit: 5.1.0
- is-date-object@1.0.5:
+ '@shikijs/themes@4.4.3':
dependencies:
- has-tostringtag: 1.0.2
+ '@shikijs/types': 4.4.3
- is-decimal@2.0.1: {}
+ '@shikijs/types@4.4.3':
+ dependencies:
+ '@shikijs/vscode-textmate': 10.0.2
+ '@types/hast': 3.0.5
- is-docker@2.2.1: {}
+ '@shikijs/vscode-textmate@10.0.2': {}
- is-docker@3.0.0: {}
+ '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.29.7(supports-color@9.4.0))':
+ dependencies:
+ '@babel/core': 7.29.7(supports-color@9.4.0)
- is-extendable@0.1.1: {}
+ '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.29.7(supports-color@9.4.0))':
+ dependencies:
+ '@babel/core': 7.29.7(supports-color@9.4.0)
- is-extglob@2.1.1: {}
+ '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.29.7(supports-color@9.4.0))':
+ dependencies:
+ '@babel/core': 7.29.7(supports-color@9.4.0)
- is-fullwidth-code-point@3.0.0: {}
+ '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.29.7(supports-color@9.4.0))':
+ dependencies:
+ '@babel/core': 7.29.7(supports-color@9.4.0)
- is-glob@4.0.3:
+ '@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.29.7(supports-color@9.4.0))':
dependencies:
- is-extglob: 2.1.1
+ '@babel/core': 7.29.7(supports-color@9.4.0)
- is-hexadecimal@2.0.1: {}
+ '@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.29.7(supports-color@9.4.0))':
+ dependencies:
+ '@babel/core': 7.29.7(supports-color@9.4.0)
- is-inside-container@1.0.0:
+ '@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.29.7(supports-color@9.4.0))':
dependencies:
- is-docker: 3.0.0
+ '@babel/core': 7.29.7(supports-color@9.4.0)
- is-installed-globally@0.4.0:
+ '@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.29.7(supports-color@9.4.0))':
dependencies:
- global-dirs: 3.0.1
- is-path-inside: 3.0.3
+ '@babel/core': 7.29.7(supports-color@9.4.0)
- is-negative-zero@2.0.3: {}
+ '@svgr/babel-preset@8.1.0(@babel/core@7.29.7(supports-color@9.4.0))':
+ dependencies:
+ '@babel/core': 7.29.7(supports-color@9.4.0)
+ '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.29.7(supports-color@9.4.0))
+ '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.29.7(supports-color@9.4.0))
+ '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.29.7(supports-color@9.4.0))
+ '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.29.7(supports-color@9.4.0))
+ '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.29.7(supports-color@9.4.0))
+ '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.29.7(supports-color@9.4.0))
+ '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.29.7(supports-color@9.4.0))
+ '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.29.7(supports-color@9.4.0))
- is-network-error@1.3.0: {}
+ '@svgr/core@8.1.0(supports-color@9.4.0)(typescript@6.0.3)':
+ dependencies:
+ '@babel/core': 7.29.7(supports-color@9.4.0)
+ '@svgr/babel-preset': 8.1.0(@babel/core@7.29.7(supports-color@9.4.0))
+ camelcase: 6.3.0
+ cosmiconfig: 8.3.6(typescript@6.0.3)
+ snake-case: 3.0.4
+ transitivePeerDependencies:
+ - supports-color
+ - typescript
- is-npm@6.0.0: {}
+ '@svgr/hast-util-to-babel-ast@8.0.0':
+ dependencies:
+ '@babel/types': 7.29.8
+ entities: 4.5.0
- is-number-object@1.0.7:
+ '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(supports-color@9.4.0)(typescript@6.0.3))(supports-color@9.4.0)':
dependencies:
- has-tostringtag: 1.0.2
+ '@babel/core': 7.29.7(supports-color@9.4.0)
+ '@svgr/babel-preset': 8.1.0(@babel/core@7.29.7(supports-color@9.4.0))
+ '@svgr/core': 8.1.0(supports-color@9.4.0)(typescript@6.0.3)
+ '@svgr/hast-util-to-babel-ast': 8.0.0
+ svg-parser: 2.1.0
+ transitivePeerDependencies:
+ - supports-color
- is-number@7.0.0: {}
+ '@swc/helpers@0.5.23':
+ dependencies:
+ tslib: 2.8.1
- is-obj@1.0.1: {}
+ '@ts-morph/common@0.28.1':
+ dependencies:
+ minimatch: 10.2.6
+ path-browserify: 1.0.1
+ tinyglobby: 0.2.17
- is-obj@2.0.0: {}
+ '@tybys/wasm-util@0.10.3':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
- is-path-inside@3.0.3: {}
+ '@types/d3-scale-chromatic@3.1.0': {}
- is-plain-obj@3.0.0: {}
+ '@types/d3-scale@4.0.9':
+ dependencies:
+ '@types/d3-time': 3.0.4
- is-plain-obj@4.1.0: {}
+ '@types/d3-time@3.0.4': {}
- is-plain-object@2.0.4:
+ '@types/debug@4.1.13':
dependencies:
- isobject: 3.0.1
+ '@types/ms': 2.1.0
- is-regex@1.1.4:
+ '@types/estree-jsx@1.0.5':
dependencies:
- call-bind: 1.0.7
- has-tostringtag: 1.0.2
+ '@types/estree': 1.0.9
- is-regexp@1.0.0: {}
+ '@types/estree@1.0.9': {}
- is-shared-array-buffer@1.0.3:
+ '@types/hast@3.0.5':
dependencies:
- call-bind: 1.0.7
-
- is-stream@2.0.1: {}
+ '@types/unist': 3.0.3
- is-string@1.0.7:
+ '@types/mdast@3.0.15':
dependencies:
- has-tostringtag: 1.0.2
+ '@types/unist': 2.0.11
- is-symbol@1.0.4:
+ '@types/mdast@4.0.4':
dependencies:
- has-symbols: 1.0.3
+ '@types/unist': 3.0.3
- is-typed-array@1.1.13:
- dependencies:
- which-typed-array: 1.1.15
+ '@types/mdx@2.0.14': {}
- is-typedarray@1.0.0: {}
+ '@types/ms@2.1.0': {}
- is-weakref@1.0.2:
+ '@types/node@22.20.1':
dependencies:
- call-bind: 1.0.7
+ undici-types: 6.21.0
- is-wsl@2.2.0:
+ '@types/node@25.9.5':
dependencies:
- is-docker: 2.2.1
+ undici-types: 7.24.6
- is-wsl@3.1.0:
+ '@types/react-dom@19.2.5(@types/react@19.2.18)':
dependencies:
- is-inside-container: 1.0.0
-
- is-yarn-global@0.4.1: {}
+ '@types/react': 19.2.18
- isarray@0.0.1: {}
-
- isarray@1.0.0: {}
+ '@types/react@19.2.18':
+ dependencies:
+ csstype: 3.2.3
- isarray@2.0.5: {}
+ '@types/supports-color@8.1.3': {}
- isexe@2.0.0: {}
+ '@types/trusted-types@2.0.7':
+ optional: true
- isobject@3.0.1: {}
+ '@types/unist@2.0.11': {}
- jest-util@29.7.0:
- dependencies:
- '@jest/types': 29.6.3
- '@types/node': 22.8.1
- chalk: 4.1.2
- ci-info: 3.9.0
- graceful-fs: 4.2.11
- picomatch: 2.3.1
+ '@types/unist@3.0.3': {}
- jest-worker@27.5.1:
- dependencies:
- '@types/node': 22.8.1
- merge-stream: 2.0.0
- supports-color: 8.1.1
+ '@ungap/structured-clone@1.3.3': {}
- jest-worker@29.7.0:
+ '@unhead/react@2.1.17(react@19.2.8)':
dependencies:
- '@types/node': 22.8.1
- jest-util: 29.7.0
- merge-stream: 2.0.0
- supports-color: 8.1.1
-
- jiti@1.21.6: {}
+ react: 19.2.8
+ unhead: 2.1.17
- joi@17.13.3:
+ acorn-jsx@5.3.2(acorn@8.18.0):
dependencies:
- '@hapi/hoek': 9.3.0
- '@hapi/topo': 5.1.0
- '@sideway/address': 4.1.5
- '@sideway/formula': 3.0.1
- '@sideway/pinpoint': 2.0.0
+ acorn: 8.18.0
- js-tokens@4.0.0: {}
+ acorn@8.18.0: {}
- js-yaml@3.14.1:
- dependencies:
- argparse: 1.0.10
- esprima: 4.0.1
+ ansi-regex@6.3.0: {}
- js-yaml@4.1.0:
- dependencies:
- argparse: 2.0.1
+ argparse@2.0.1: {}
- jsesc@3.0.2: {}
+ astring@1.9.0: {}
- json-buffer@3.0.1: {}
+ bail@2.0.2: {}
- json-parse-even-better-errors@2.3.1: {}
+ balanced-match@4.0.4: {}
- json-schema-traverse@0.4.1: {}
+ baseline-browser-mapping@2.11.19: {}
- json-schema-traverse@1.0.0: {}
+ big.js@5.2.2: {}
- json5@2.2.3: {}
+ body-scroll-lock@4.0.0-beta.0: {}
- jsonfile@6.1.0:
+ brace-expansion@5.0.9:
dependencies:
- universalify: 2.0.1
- optionalDependencies:
- graceful-fs: 4.2.11
+ balanced-match: 4.0.4
- katex@0.16.11:
+ browserslist@4.28.8:
dependencies:
- commander: 8.3.0
+ baseline-browser-mapping: 2.11.19
+ caniuse-lite: 1.0.30001810
+ electron-to-chromium: 1.5.415
+ node-releases: 2.0.53
+ update-browserslist-db: 1.3.1(browserslist@4.28.8)
- keyv@4.5.4:
- dependencies:
- json-buffer: 3.0.1
+ callsites@3.1.0: {}
- khroma@2.1.0: {}
+ camelcase@6.3.0: {}
- kind-of@6.0.3: {}
+ caniuse-lite@1.0.30001810: {}
- kleur@3.0.3: {}
+ ccount@2.0.1: {}
- kolorist@1.8.0: {}
+ character-entities-html4@2.1.0: {}
- langium@3.3.1:
- dependencies:
- chevrotain: 11.0.3
- chevrotain-allstar: 0.3.1(chevrotain@11.0.3)
- vscode-languageserver: 9.0.1
- vscode-languageserver-textdocument: 1.0.12
- vscode-uri: 3.0.8
+ character-entities-legacy@3.0.0: {}
- latest-version@7.0.0:
- dependencies:
- package-json: 8.1.1
+ character-entities@2.0.2: {}
- launch-editor@2.9.1:
- dependencies:
- picocolors: 1.1.1
- shell-quote: 1.8.1
+ character-reference-invalid@2.0.1: {}
- layout-base@1.0.2: {}
+ chokidar@5.0.0:
+ dependencies:
+ readdirp: 5.1.1
+ optional: true
- layout-base@2.0.1: {}
+ clsx@2.1.1: {}
- leven@3.1.0: {}
+ code-block-writer@13.0.3: {}
- lightningcss-darwin-arm64@1.27.0:
- optional: true
+ collapse-white-space@2.1.0: {}
- lightningcss-darwin-x64@1.27.0:
- optional: true
+ colorjs.io@0.7.1: {}
- lightningcss-freebsd-x64@1.27.0:
- optional: true
+ comma-separated-tokens@2.0.3: {}
- lightningcss-linux-arm-gnueabihf@1.27.0:
- optional: true
+ commander@7.2.0: {}
- lightningcss-linux-arm64-gnu@1.27.0:
- optional: true
+ commander@8.3.0: {}
- lightningcss-linux-arm64-musl@1.27.0:
- optional: true
+ compute-scroll-into-view@3.1.1: {}
- lightningcss-linux-x64-gnu@1.27.0:
- optional: true
+ confbox@0.1.8: {}
- lightningcss-linux-x64-musl@1.27.0:
- optional: true
+ confbox@0.2.4: {}
- lightningcss-win32-arm64-msvc@1.27.0:
- optional: true
+ convert-source-map@2.0.0: {}
- lightningcss-win32-x64-msvc@1.27.0:
- optional: true
+ cookie@1.1.1: {}
- lightningcss@1.27.0:
+ copy-to-clipboard@3.3.3:
dependencies:
- detect-libc: 1.0.3
- optionalDependencies:
- lightningcss-darwin-arm64: 1.27.0
- lightningcss-darwin-x64: 1.27.0
- lightningcss-freebsd-x64: 1.27.0
- lightningcss-linux-arm-gnueabihf: 1.27.0
- lightningcss-linux-arm64-gnu: 1.27.0
- lightningcss-linux-arm64-musl: 1.27.0
- lightningcss-linux-x64-gnu: 1.27.0
- lightningcss-linux-x64-musl: 1.27.0
- lightningcss-win32-arm64-msvc: 1.27.0
- lightningcss-win32-x64-msvc: 1.27.0
-
- lilconfig@3.1.2: {}
+ toggle-selection: 1.0.6
- lines-and-columns@1.2.4: {}
+ cose-base@1.0.3:
+ dependencies:
+ layout-base: 1.0.2
- linkify-it@3.0.3:
+ cosmiconfig@8.3.6(typescript@6.0.3):
dependencies:
- uc.micro: 1.0.6
+ import-fresh: 3.3.1
+ js-yaml: 4.3.1
+ parse-json: 5.2.0
+ path-type: 4.0.0
+ optionalDependencies:
+ typescript: 6.0.3
- loader-runner@4.3.0: {}
+ csstype@3.2.3: {}
- loader-utils@2.0.4:
+ cytoscape-cose-bilkent@4.1.0(cytoscape@3.34.1):
dependencies:
- big.js: 5.2.2
- emojis-list: 3.0.0
- json5: 2.2.3
+ cose-base: 1.0.3
+ cytoscape: 3.34.1
- local-pkg@0.5.0:
- dependencies:
- mlly: 1.7.2
- pkg-types: 1.2.1
+ cytoscape@3.34.1: {}
- locate-path@7.2.0:
+ d3-array@2.12.1:
dependencies:
- p-locate: 6.0.0
-
- lodash-es@4.17.21: {}
+ internmap: 1.0.1
- lodash.debounce@4.0.8: {}
+ d3-array@3.2.4:
+ dependencies:
+ internmap: 2.0.3
- lodash.memoize@4.1.2: {}
+ d3-axis@3.0.0: {}
- lodash.uniq@4.5.0: {}
+ d3-brush@3.0.0:
+ dependencies:
+ d3-dispatch: 3.0.1
+ d3-drag: 3.0.0
+ d3-interpolate: 3.0.1
+ d3-selection: 3.0.0
+ d3-transition: 3.0.1(d3-selection@3.0.0)
- lodash@4.17.21: {}
+ d3-chord@3.0.1:
+ dependencies:
+ d3-path: 3.1.0
- longest-streak@3.1.0: {}
+ d3-color@3.1.0: {}
- loose-envify@1.4.0:
+ d3-contour@4.0.2:
dependencies:
- js-tokens: 4.0.0
+ d3-array: 3.2.4
- lower-case@2.0.2:
+ d3-delaunay@6.0.4:
dependencies:
- tslib: 2.8.0
+ delaunator: 5.1.0
- lowercase-keys@3.0.0: {}
+ d3-dispatch@3.0.1: {}
- lru-cache@5.1.1:
+ d3-drag@3.0.0:
dependencies:
- yallist: 3.1.1
-
- markdown-extensions@2.0.0: {}
+ d3-dispatch: 3.0.1
+ d3-selection: 3.0.0
- markdown-it@12.3.2:
+ d3-dsv@3.0.1:
dependencies:
- argparse: 2.0.1
- entities: 2.1.0
- linkify-it: 3.0.3
- mdurl: 1.0.1
- uc.micro: 1.0.6
+ commander: 7.2.0
+ iconv-lite: 0.6.3
+ rw: 1.3.3
- markdown-table@3.0.3: {}
+ d3-ease@3.0.1: {}
- markdownlint-cli2-formatter-default@0.0.3(markdownlint-cli2@0.4.0):
+ d3-fetch@3.0.1:
dependencies:
- markdownlint-cli2: 0.4.0
+ d3-dsv: 3.0.1
- markdownlint-cli2@0.4.0:
+ d3-force@3.0.0:
dependencies:
- globby: 12.1.0
- markdownlint: 0.25.1
- markdownlint-cli2-formatter-default: 0.0.3(markdownlint-cli2@0.4.0)
- markdownlint-rule-helpers: 0.16.0
- micromatch: 4.0.4
- strip-json-comments: 4.0.0
- yaml: 1.10.2
+ d3-dispatch: 3.0.1
+ d3-quadtree: 3.0.1
+ d3-timer: 3.0.1
- markdownlint-rule-helpers@0.16.0: {}
+ d3-format@3.1.2: {}
- markdownlint@0.25.1:
+ d3-geo@3.1.1:
dependencies:
- markdown-it: 12.3.2
-
- marked@15.0.12: {}
+ d3-array: 3.2.4
- math-intrinsics@1.1.0: {}
+ d3-hierarchy@3.1.2: {}
- mdast-util-directive@3.0.0:
+ d3-interpolate@3.0.1:
dependencies:
- '@types/mdast': 4.0.4
- '@types/unist': 3.0.3
- devlop: 1.1.0
- mdast-util-from-markdown: 2.0.1
- mdast-util-to-markdown: 2.1.0
- parse-entities: 4.0.1
- stringify-entities: 4.0.4
- unist-util-visit-parents: 6.0.1
- transitivePeerDependencies:
- - supports-color
+ d3-color: 3.1.0
- mdast-util-find-and-replace@3.0.1:
- dependencies:
- '@types/mdast': 4.0.4
- escape-string-regexp: 5.0.0
- unist-util-is: 6.0.0
- unist-util-visit-parents: 6.0.1
+ d3-path@1.0.9: {}
- mdast-util-from-markdown@2.0.1:
- dependencies:
- '@types/mdast': 4.0.4
- '@types/unist': 3.0.3
- decode-named-character-reference: 1.0.2
- devlop: 1.1.0
- mdast-util-to-string: 4.0.0
- micromark: 4.0.0
- micromark-util-decode-numeric-character-reference: 2.0.1
- micromark-util-decode-string: 2.0.0
- micromark-util-normalize-identifier: 2.0.0
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
- unist-util-stringify-position: 4.0.0
- transitivePeerDependencies:
- - supports-color
+ d3-path@3.1.0: {}
- mdast-util-frontmatter@2.0.1:
- dependencies:
- '@types/mdast': 4.0.4
- devlop: 1.1.0
- escape-string-regexp: 5.0.0
- mdast-util-from-markdown: 2.0.1
- mdast-util-to-markdown: 2.1.0
- micromark-extension-frontmatter: 2.0.0
- transitivePeerDependencies:
- - supports-color
+ d3-polygon@3.0.1: {}
- mdast-util-gfm-autolink-literal@2.0.1:
- dependencies:
- '@types/mdast': 4.0.4
- ccount: 2.0.1
- devlop: 1.1.0
- mdast-util-find-and-replace: 3.0.1
- micromark-util-character: 2.1.0
+ d3-quadtree@3.0.1: {}
- mdast-util-gfm-footnote@2.0.0:
- dependencies:
- '@types/mdast': 4.0.4
- devlop: 1.1.0
- mdast-util-from-markdown: 2.0.1
- mdast-util-to-markdown: 2.1.0
- micromark-util-normalize-identifier: 2.0.0
- transitivePeerDependencies:
- - supports-color
+ d3-random@3.0.1: {}
- mdast-util-gfm-strikethrough@2.0.0:
+ d3-sankey@0.12.3:
dependencies:
- '@types/mdast': 4.0.4
- mdast-util-from-markdown: 2.0.1
- mdast-util-to-markdown: 2.1.0
- transitivePeerDependencies:
- - supports-color
+ d3-array: 2.12.1
+ d3-shape: 1.3.7
- mdast-util-gfm-table@2.0.0:
+ d3-scale-chromatic@3.1.0:
dependencies:
- '@types/mdast': 4.0.4
- devlop: 1.1.0
- markdown-table: 3.0.3
- mdast-util-from-markdown: 2.0.1
- mdast-util-to-markdown: 2.1.0
- transitivePeerDependencies:
- - supports-color
+ d3-color: 3.1.0
+ d3-interpolate: 3.0.1
- mdast-util-gfm-task-list-item@2.0.0:
+ d3-scale@4.0.2:
dependencies:
- '@types/mdast': 4.0.4
- devlop: 1.1.0
- mdast-util-from-markdown: 2.0.1
- mdast-util-to-markdown: 2.1.0
- transitivePeerDependencies:
- - supports-color
+ d3-array: 3.2.4
+ d3-format: 3.1.2
+ d3-interpolate: 3.0.1
+ d3-time: 3.1.0
+ d3-time-format: 4.1.0
- mdast-util-gfm@3.0.0:
- dependencies:
- mdast-util-from-markdown: 2.0.1
- mdast-util-gfm-autolink-literal: 2.0.1
- mdast-util-gfm-footnote: 2.0.0
- mdast-util-gfm-strikethrough: 2.0.0
- mdast-util-gfm-table: 2.0.0
- mdast-util-gfm-task-list-item: 2.0.0
- mdast-util-to-markdown: 2.1.0
- transitivePeerDependencies:
- - supports-color
+ d3-selection@3.0.0: {}
- mdast-util-mdx-expression@2.0.1:
+ d3-shape@1.3.7:
dependencies:
- '@types/estree-jsx': 1.0.5
- '@types/hast': 3.0.4
- '@types/mdast': 4.0.4
- devlop: 1.1.0
- mdast-util-from-markdown: 2.0.1
- mdast-util-to-markdown: 2.1.0
- transitivePeerDependencies:
- - supports-color
+ d3-path: 1.0.9
- mdast-util-mdx-jsx@3.1.3:
+ d3-shape@3.2.0:
dependencies:
- '@types/estree-jsx': 1.0.5
- '@types/hast': 3.0.4
- '@types/mdast': 4.0.4
- '@types/unist': 3.0.3
- ccount: 2.0.1
- devlop: 1.1.0
- mdast-util-from-markdown: 2.0.1
- mdast-util-to-markdown: 2.1.0
- parse-entities: 4.0.1
- stringify-entities: 4.0.4
- unist-util-stringify-position: 4.0.0
- vfile-message: 4.0.2
- transitivePeerDependencies:
- - supports-color
+ d3-path: 3.1.0
- mdast-util-mdx@3.0.0:
+ d3-time-format@4.1.0:
dependencies:
- mdast-util-from-markdown: 2.0.1
- mdast-util-mdx-expression: 2.0.1
- mdast-util-mdx-jsx: 3.1.3
- mdast-util-mdxjs-esm: 2.0.1
- mdast-util-to-markdown: 2.1.0
- transitivePeerDependencies:
- - supports-color
+ d3-time: 3.1.0
- mdast-util-mdxjs-esm@2.0.1:
+ d3-time@3.1.0:
dependencies:
- '@types/estree-jsx': 1.0.5
- '@types/hast': 3.0.4
- '@types/mdast': 4.0.4
- devlop: 1.1.0
- mdast-util-from-markdown: 2.0.1
- mdast-util-to-markdown: 2.1.0
- transitivePeerDependencies:
- - supports-color
+ d3-array: 3.2.4
- mdast-util-phrasing@4.1.0:
- dependencies:
- '@types/mdast': 4.0.4
- unist-util-is: 6.0.0
+ d3-timer@3.0.1: {}
- mdast-util-to-hast@13.2.0:
+ d3-transition@3.0.1(d3-selection@3.0.0):
dependencies:
- '@types/hast': 3.0.5
- '@types/mdast': 4.0.4
- '@ungap/structured-clone': 1.2.0
- devlop: 1.1.0
- micromark-util-sanitize-uri: 2.0.0
- trim-lines: 3.0.1
- unist-util-position: 5.0.0
- unist-util-visit: 5.1.0
- vfile: 6.0.3
+ d3-color: 3.1.0
+ d3-dispatch: 3.0.1
+ d3-ease: 3.0.1
+ d3-interpolate: 3.0.1
+ d3-selection: 3.0.0
+ d3-timer: 3.0.1
- mdast-util-to-markdown@2.1.0:
+ d3-zoom@3.0.0:
dependencies:
- '@types/mdast': 4.0.4
- '@types/unist': 3.0.3
- longest-streak: 3.1.0
- mdast-util-phrasing: 4.1.0
- mdast-util-to-string: 4.0.0
- micromark-util-decode-string: 2.0.0
- unist-util-visit: 5.1.0
- zwitch: 2.0.4
+ d3-dispatch: 3.0.1
+ d3-drag: 3.0.0
+ d3-interpolate: 3.0.1
+ d3-selection: 3.0.0
+ d3-transition: 3.0.1(d3-selection@3.0.0)
- mdast-util-to-string@4.0.0:
+ d3@7.9.0:
dependencies:
- '@types/mdast': 4.0.4
-
- mdn-data@2.0.14: {}
-
- mdn-data@2.0.28: {}
-
- mdn-data@2.0.30: {}
-
- mdn-data@2.0.4: {}
+ d3-array: 3.2.4
+ d3-axis: 3.0.0
+ d3-brush: 3.0.0
+ d3-chord: 3.0.1
+ d3-color: 3.1.0
+ d3-contour: 4.0.2
+ d3-delaunay: 6.0.4
+ d3-dispatch: 3.0.1
+ d3-drag: 3.0.0
+ d3-dsv: 3.0.1
+ d3-ease: 3.0.1
+ d3-fetch: 3.0.1
+ d3-force: 3.0.0
+ d3-format: 3.1.2
+ d3-geo: 3.1.1
+ d3-hierarchy: 3.1.2
+ d3-interpolate: 3.0.1
+ d3-path: 3.1.0
+ d3-polygon: 3.0.1
+ d3-quadtree: 3.0.1
+ d3-random: 3.0.1
+ d3-scale: 4.0.2
+ d3-scale-chromatic: 3.1.0
+ d3-selection: 3.0.0
+ d3-shape: 3.2.0
+ d3-time: 3.1.0
+ d3-time-format: 4.1.0
+ d3-timer: 3.0.1
+ d3-transition: 3.0.1(d3-selection@3.0.0)
+ d3-zoom: 3.0.0
- mdurl@1.0.1: {}
+ dagre-d3-es@7.0.13:
+ dependencies:
+ d3: 7.9.0
+ lodash-es: 4.18.1
- media-typer@0.3.0: {}
+ dayjs@1.11.23: {}
- medium-zoom@1.1.0: {}
+ debug@4.4.3(supports-color@9.4.0):
+ dependencies:
+ ms: 2.1.3
+ optionalDependencies:
+ supports-color: 9.4.0
- meilisearch-docsearch@0.8.0:
+ decode-named-character-reference@1.3.0:
dependencies:
- meilisearch: 0.50.0
- solid-js: 1.9.5
+ character-entities: 2.0.2
- meilisearch@0.50.0: {}
+ deepmerge@4.3.1: {}
- memfs@4.51.1:
+ delaunator@5.1.0:
dependencies:
- '@jsonjoy.com/json-pack': 1.21.0(tslib@2.8.0)
- '@jsonjoy.com/util': 1.9.0(tslib@2.8.0)
- glob-to-regex.js: 1.2.0(tslib@2.8.0)
- thingies: 2.5.0(tslib@2.8.0)
- tree-dump: 1.1.0(tslib@2.8.0)
- tslib: 2.8.0
-
- merge-descriptors@1.0.3: {}
+ robust-predicates: 3.0.3
- merge-stream@2.0.0: {}
+ dequal@2.0.3: {}
- merge2@1.4.1: {}
+ detect-libc@2.1.2:
+ optional: true
- mermaid@11.6.0:
+ devlop@1.1.0:
dependencies:
- '@braintree/sanitize-url': 7.1.0
- '@iconify/utils': 2.1.33
- '@mermaid-js/parser': 0.4.0
- '@types/d3': 7.4.3
- cytoscape: 3.30.2
- cytoscape-cose-bilkent: 4.1.0(cytoscape@3.30.2)
- cytoscape-fcose: 2.2.0(cytoscape@3.30.2)
- d3: 7.9.0
- d3-sankey: 0.12.3
- dagre-d3-es: 7.0.11
- dayjs: 1.11.13
- dompurify: 3.2.6
- katex: 0.16.11
- khroma: 2.1.0
- lodash-es: 4.17.21
- marked: 15.0.12
- roughjs: 4.6.6
- stylis: 4.3.6
- ts-dedent: 2.2.0
- uuid: 11.1.0
- transitivePeerDependencies:
- - supports-color
+ dequal: 2.0.3
- methods@1.1.2: {}
+ diff@5.2.2: {}
- micromark-core-commonmark@2.0.1:
- dependencies:
- decode-named-character-reference: 1.0.2
- devlop: 1.1.0
- micromark-factory-destination: 2.0.0
- micromark-factory-label: 2.0.0
- micromark-factory-space: 2.0.0
- micromark-factory-title: 2.0.0
- micromark-factory-whitespace: 2.0.0
- micromark-util-character: 2.1.0
- micromark-util-chunked: 2.0.0
- micromark-util-classify-character: 2.0.0
- micromark-util-html-tag-name: 2.0.0
- micromark-util-normalize-identifier: 2.0.0
- micromark-util-resolve-all: 2.0.0
- micromark-util-subtokenize: 2.0.1
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
-
- micromark-extension-directive@3.0.2:
- dependencies:
- devlop: 1.1.0
- micromark-factory-space: 2.0.0
- micromark-factory-whitespace: 2.0.0
- micromark-util-character: 2.1.0
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
- parse-entities: 4.0.1
+ dompurify@3.4.14:
+ optionalDependencies:
+ '@types/trusted-types': 2.0.7
- micromark-extension-frontmatter@2.0.0:
+ dot-case@3.0.4:
dependencies:
- fault: 2.0.1
- micromark-util-character: 2.1.0
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
+ no-case: 3.0.4
+ tslib: 2.8.1
- micromark-extension-gfm-autolink-literal@2.1.0:
- dependencies:
- micromark-util-character: 2.1.0
- micromark-util-sanitize-uri: 2.0.0
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
+ eastasianwidth@0.2.0: {}
- micromark-extension-gfm-footnote@2.1.0:
- dependencies:
- devlop: 1.1.0
- micromark-core-commonmark: 2.0.1
- micromark-factory-space: 2.0.0
- micromark-util-character: 2.1.0
- micromark-util-normalize-identifier: 2.0.0
- micromark-util-sanitize-uri: 2.0.0
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
+ electron-to-chromium@1.5.415: {}
- micromark-extension-gfm-strikethrough@2.1.0:
- dependencies:
- devlop: 1.1.0
- micromark-util-chunked: 2.0.0
- micromark-util-classify-character: 2.0.0
- micromark-util-resolve-all: 2.0.0
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
+ elkjs@0.9.3: {}
- micromark-extension-gfm-table@2.1.0:
- dependencies:
- devlop: 1.1.0
- micromark-factory-space: 2.0.0
- micromark-util-character: 2.1.0
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
+ emoji-regex@10.6.0: {}
- micromark-extension-gfm-tagfilter@2.0.0:
- dependencies:
- micromark-util-types: 2.0.0
+ emojis-list@3.0.0: {}
- micromark-extension-gfm-task-list-item@2.1.0:
- dependencies:
- devlop: 1.1.0
- micromark-factory-space: 2.0.0
- micromark-util-character: 2.1.0
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
+ entities@4.5.0: {}
- micromark-extension-gfm@3.0.0:
- dependencies:
- micromark-extension-gfm-autolink-literal: 2.1.0
- micromark-extension-gfm-footnote: 2.1.0
- micromark-extension-gfm-strikethrough: 2.1.0
- micromark-extension-gfm-table: 2.1.0
- micromark-extension-gfm-tagfilter: 2.0.0
- micromark-extension-gfm-task-list-item: 2.1.0
- micromark-util-combine-extensions: 2.0.0
- micromark-util-types: 2.0.0
+ entities@6.0.1: {}
- micromark-extension-mdx-expression@3.0.0:
+ error-ex@1.3.4:
dependencies:
- '@types/estree': 1.0.6
- devlop: 1.1.0
- micromark-factory-mdx-expression: 2.0.2
- micromark-factory-space: 2.0.0
- micromark-util-character: 2.1.0
- micromark-util-events-to-acorn: 2.0.2
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
+ is-arrayish: 0.2.1
- micromark-extension-mdx-jsx@3.0.1:
+ esast-util-from-estree@2.0.0:
dependencies:
- '@types/acorn': 4.0.6
- '@types/estree': 1.0.6
+ '@types/estree-jsx': 1.0.5
devlop: 1.1.0
- estree-util-is-identifier-name: 3.0.0
- micromark-factory-mdx-expression: 2.0.2
- micromark-factory-space: 2.0.0
- micromark-util-character: 2.1.0
- micromark-util-events-to-acorn: 2.0.2
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
- vfile-message: 4.0.2
+ estree-util-visit: 2.0.0
+ unist-util-position-from-estree: 2.0.0
- micromark-extension-mdx-md@2.0.0:
+ esast-util-from-js@2.0.1:
dependencies:
- micromark-util-types: 2.0.0
+ '@types/estree-jsx': 1.0.5
+ acorn: 8.18.0
+ esast-util-from-estree: 2.0.0
+ vfile-message: 4.0.3
- micromark-extension-mdxjs-esm@3.0.0:
- dependencies:
- '@types/estree': 1.0.6
- devlop: 1.1.0
- micromark-core-commonmark: 2.0.1
- micromark-util-character: 2.1.0
- micromark-util-events-to-acorn: 2.0.2
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
- unist-util-position-from-estree: 2.0.0
- vfile-message: 4.0.2
+ escalade@3.2.0: {}
- micromark-extension-mdxjs@3.0.0:
- dependencies:
- acorn: 8.14.0
- acorn-jsx: 5.3.2(acorn@8.14.0)
- micromark-extension-mdx-expression: 3.0.0
- micromark-extension-mdx-jsx: 3.0.1
- micromark-extension-mdx-md: 2.0.0
- micromark-extension-mdxjs-esm: 3.0.0
- micromark-util-combine-extensions: 2.0.0
- micromark-util-types: 2.0.0
+ escape-string-regexp@5.0.0: {}
- micromark-factory-destination@2.0.0:
+ estree-util-attach-comments@3.0.0:
dependencies:
- micromark-util-character: 2.1.0
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
+ '@types/estree': 1.0.9
- micromark-factory-label@2.0.0:
+ estree-util-build-jsx@3.0.1:
dependencies:
+ '@types/estree-jsx': 1.0.5
devlop: 1.1.0
- micromark-util-character: 2.1.0
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
+ estree-util-is-identifier-name: 3.0.0
+ estree-walker: 3.0.3
- micromark-factory-mdx-expression@2.0.2:
- dependencies:
- '@types/estree': 1.0.6
- devlop: 1.1.0
- micromark-factory-space: 2.0.0
- micromark-util-character: 2.1.0
- micromark-util-events-to-acorn: 2.0.2
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
- unist-util-position-from-estree: 2.0.0
- vfile-message: 4.0.2
+ estree-util-is-identifier-name@3.0.0: {}
- micromark-factory-space@1.1.0:
+ estree-util-scope@1.0.0:
dependencies:
- micromark-util-character: 1.2.0
- micromark-util-types: 1.1.0
+ '@types/estree': 1.0.9
+ devlop: 1.1.0
- micromark-factory-space@2.0.0:
+ estree-util-to-js@2.0.0:
dependencies:
- micromark-util-character: 2.1.0
- micromark-util-types: 2.0.0
+ '@types/estree-jsx': 1.0.5
+ astring: 1.9.0
+ source-map: 0.7.6
- micromark-factory-title@2.0.0:
+ estree-util-visit@2.0.0:
dependencies:
- micromark-factory-space: 2.0.0
- micromark-util-character: 2.1.0
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
+ '@types/estree-jsx': 1.0.5
+ '@types/unist': 3.0.3
- micromark-factory-whitespace@2.0.0:
+ estree-walker@3.0.3:
dependencies:
- micromark-factory-space: 2.0.0
- micromark-util-character: 2.1.0
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
+ '@types/estree': 1.0.9
- micromark-util-character@1.2.0:
- dependencies:
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
+ exsolve@1.1.1: {}
- micromark-util-character@2.1.0:
- dependencies:
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
+ extend@3.0.2: {}
- micromark-util-chunked@2.0.0:
- dependencies:
- micromark-util-symbol: 2.0.0
+ fdir@6.5.0(picomatch@4.0.7):
+ optionalDependencies:
+ picomatch: 4.0.7
- micromark-util-classify-character@2.0.0:
- dependencies:
- micromark-util-character: 2.1.0
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
+ flat@6.0.1: {}
- micromark-util-combine-extensions@2.0.0:
- dependencies:
- micromark-util-chunked: 2.0.0
- micromark-util-types: 2.0.0
+ flexsearch@0.8.212: {}
- micromark-util-decode-numeric-character-reference@2.0.1:
- dependencies:
- micromark-util-symbol: 2.0.0
+ gensync@1.0.0-beta.2: {}
- micromark-util-decode-string@2.0.0:
- dependencies:
- decode-named-character-reference: 1.0.2
- micromark-util-character: 2.1.0
- micromark-util-decode-numeric-character-reference: 2.0.1
- micromark-util-symbol: 2.0.0
+ get-east-asian-width@1.6.0: {}
- micromark-util-encode@2.0.0: {}
+ has-flag@4.0.0: {}
- micromark-util-events-to-acorn@2.0.2:
+ hast-util-from-parse5@8.0.3:
dependencies:
- '@types/acorn': 4.0.6
- '@types/estree': 1.0.6
+ '@types/hast': 3.0.5
'@types/unist': 3.0.3
devlop: 1.1.0
- estree-util-visit: 2.0.0
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
- vfile-message: 4.0.2
-
- micromark-util-html-tag-name@2.0.0: {}
+ hastscript: 9.0.1
+ property-information: 7.2.0
+ vfile: 6.0.3
+ vfile-location: 5.0.3
+ web-namespaces: 2.0.1
- micromark-util-normalize-identifier@2.0.0:
+ hast-util-heading-rank@3.0.0:
dependencies:
- micromark-util-symbol: 2.0.0
+ '@types/hast': 3.0.5
- micromark-util-resolve-all@2.0.0:
+ hast-util-is-element@3.0.0:
dependencies:
- micromark-util-types: 2.0.0
+ '@types/hast': 3.0.5
- micromark-util-sanitize-uri@2.0.0:
+ hast-util-parse-selector@4.0.0:
dependencies:
- micromark-util-character: 2.1.0
- micromark-util-encode: 2.0.0
- micromark-util-symbol: 2.0.0
+ '@types/hast': 3.0.5
- micromark-util-subtokenize@2.0.1:
+ hast-util-raw@9.1.0:
dependencies:
- devlop: 1.1.0
- micromark-util-chunked: 2.0.0
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
-
- micromark-util-symbol@1.1.0: {}
-
- micromark-util-symbol@2.0.0: {}
-
- micromark-util-types@1.1.0: {}
-
- micromark-util-types@2.0.0: {}
+ '@types/hast': 3.0.5
+ '@types/unist': 3.0.3
+ '@ungap/structured-clone': 1.3.3
+ hast-util-from-parse5: 8.0.3
+ hast-util-to-parse5: 8.0.1
+ html-void-elements: 3.0.0
+ mdast-util-to-hast: 13.2.1
+ parse5: 7.3.0
+ unist-util-position: 5.0.0
+ unist-util-visit: 5.1.0
+ vfile: 6.0.3
+ web-namespaces: 2.0.1
+ zwitch: 2.0.4
- micromark@4.0.0:
+ hast-util-to-estree@3.1.3(supports-color@9.4.0):
dependencies:
- '@types/debug': 4.1.12
- debug: 4.3.7
- decode-named-character-reference: 1.0.2
+ '@types/estree': 1.0.9
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 3.0.5
+ comma-separated-tokens: 2.0.3
devlop: 1.1.0
- micromark-core-commonmark: 2.0.1
- micromark-factory-space: 2.0.0
- micromark-util-character: 2.1.0
- micromark-util-chunked: 2.0.0
- micromark-util-combine-extensions: 2.0.0
- micromark-util-decode-numeric-character-reference: 2.0.1
- micromark-util-encode: 2.0.0
- micromark-util-normalize-identifier: 2.0.0
- micromark-util-resolve-all: 2.0.0
- micromark-util-sanitize-uri: 2.0.0
- micromark-util-subtokenize: 2.0.1
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
+ estree-util-attach-comments: 3.0.0
+ estree-util-is-identifier-name: 3.0.0
+ hast-util-whitespace: 3.0.0
+ mdast-util-mdx-expression: 2.0.1(supports-color@9.4.0)
+ mdast-util-mdx-jsx: 3.2.0(supports-color@9.4.0)
+ mdast-util-mdxjs-esm: 2.0.1(supports-color@9.4.0)
+ property-information: 7.2.0
+ space-separated-tokens: 2.0.2
+ style-to-js: 1.1.21
+ unist-util-position: 5.0.0
+ zwitch: 2.0.4
transitivePeerDependencies:
- supports-color
- micromatch@4.0.4:
+ hast-util-to-html@9.0.5:
dependencies:
- braces: 3.0.3
- picomatch: 2.3.1
+ '@types/hast': 3.0.5
+ '@types/unist': 3.0.3
+ ccount: 2.0.1
+ comma-separated-tokens: 2.0.3
+ hast-util-whitespace: 3.0.0
+ html-void-elements: 3.0.0
+ mdast-util-to-hast: 13.2.1
+ property-information: 7.2.0
+ space-separated-tokens: 2.0.2
+ stringify-entities: 4.0.4
+ zwitch: 2.0.4
- micromatch@4.0.8:
+ hast-util-to-jsx-runtime@2.3.6(supports-color@9.4.0):
dependencies:
- braces: 3.0.3
- picomatch: 2.3.1
-
- mime-db@1.33.0: {}
-
- mime-db@1.52.0: {}
-
- mime-db@1.54.0: {}
+ '@types/estree': 1.0.9
+ '@types/hast': 3.0.5
+ '@types/unist': 3.0.3
+ comma-separated-tokens: 2.0.3
+ devlop: 1.1.0
+ estree-util-is-identifier-name: 3.0.0
+ hast-util-whitespace: 3.0.0
+ mdast-util-mdx-expression: 2.0.1(supports-color@9.4.0)
+ mdast-util-mdx-jsx: 3.2.0(supports-color@9.4.0)
+ mdast-util-mdxjs-esm: 2.0.1(supports-color@9.4.0)
+ property-information: 7.2.0
+ space-separated-tokens: 2.0.2
+ style-to-js: 1.1.21
+ unist-util-position: 5.0.0
+ vfile-message: 4.0.3
+ transitivePeerDependencies:
+ - supports-color
- mime-types@2.1.18:
+ hast-util-to-parse5@8.0.1:
dependencies:
- mime-db: 1.33.0
+ '@types/hast': 3.0.5
+ comma-separated-tokens: 2.0.3
+ devlop: 1.1.0
+ property-information: 7.2.0
+ space-separated-tokens: 2.0.2
+ web-namespaces: 2.0.1
+ zwitch: 2.0.4
- mime-types@2.1.35:
+ hast-util-to-string@3.0.1:
dependencies:
- mime-db: 1.52.0
+ '@types/hast': 3.0.5
- mime-types@3.0.2:
+ hast-util-whitespace@3.0.0:
dependencies:
- mime-db: 1.54.0
-
- mime@1.6.0: {}
+ '@types/hast': 3.0.5
- mimic-fn@2.1.0: {}
+ hastscript@9.0.1:
+ dependencies:
+ '@types/hast': 3.0.5
+ comma-separated-tokens: 2.0.3
+ hast-util-parse-selector: 4.0.0
+ property-information: 7.2.0
+ space-separated-tokens: 2.0.2
- mimic-response@3.1.0: {}
+ hookable@6.1.1: {}
- mimic-response@4.0.0: {}
+ html-void-elements@3.0.0: {}
- mini-css-extract-plugin@2.9.4(webpack@5.95.0(@swc/core@1.16.0)):
+ iconv-lite@0.6.3:
dependencies:
- schema-utils: 4.2.0
- tapable: 2.2.1
- webpack: 5.95.0(@swc/core@1.16.0)
+ safer-buffer: 2.1.2
- minimalistic-assert@1.0.1: {}
+ immutable@5.1.9: {}
- minimatch@3.1.5:
+ import-fresh@3.3.1:
dependencies:
- brace-expansion: 1.1.11
+ parent-module: 1.0.1
+ resolve-from: 4.0.0
- minimist@1.2.8: {}
+ import-meta-resolve@4.2.0: {}
- mkdirp@0.5.6:
- dependencies:
- minimist: 1.2.8
+ inline-style-parser@0.2.7: {}
- mlly@1.7.2:
- dependencies:
- acorn: 8.14.0
- pathe: 1.1.2
- pkg-types: 1.2.1
- ufo: 1.5.4
+ internmap@1.0.1: {}
- mrmime@2.0.0: {}
+ internmap@2.0.3: {}
- ms@2.0.0: {}
+ is-absolute-url@4.0.1: {}
- ms@2.1.3: {}
+ is-alphabetical@2.0.1: {}
- multicast-dns@7.2.5:
+ is-alphanumerical@2.0.1:
dependencies:
- dns-packet: 5.6.1
- thunky: 1.1.0
-
- nanoid@3.3.11: {}
-
- negotiator@0.6.3: {}
+ is-alphabetical: 2.0.1
+ is-decimal: 2.0.1
- neo-async@2.6.2: {}
+ is-arrayish@0.2.1: {}
- no-case@3.0.4:
- dependencies:
- lower-case: 2.0.2
- tslib: 2.8.0
+ is-decimal@2.0.1: {}
- node-addon-api@7.1.1:
+ is-extglob@2.1.1:
optional: true
- node-emoji@2.1.3:
+ is-glob@4.0.3:
dependencies:
- '@sindresorhus/is': 4.6.0
- char-regex: 1.0.2
- emojilib: 2.4.0
- skin-tone: 2.0.0
-
- node-forge@1.3.1: {}
-
- node-releases@2.0.18: {}
+ is-extglob: 2.1.1
+ optional: true
- node-releases@2.0.27: {}
+ is-hexadecimal@2.0.1: {}
- normalize-path@3.0.0: {}
+ is-plain-obj@4.1.0: {}
- normalize-url@8.0.1: {}
+ js-tokens@4.0.0: {}
- npm-run-path@4.0.1:
+ js-yaml@4.3.1:
dependencies:
- path-key: 3.1.1
+ argparse: 2.0.1
- nprogress@0.2.0: {}
+ jsesc@3.1.0: {}
- nth-check@1.0.2:
- dependencies:
- boolbase: 1.0.0
+ json-parse-even-better-errors@2.3.1: {}
- nth-check@2.1.1:
- dependencies:
- boolbase: 1.0.0
+ json5@2.2.3: {}
- null-loader@4.0.1(webpack@5.95.0(@swc/core@1.16.0)):
+ katex@0.16.47:
dependencies:
- loader-utils: 2.0.4
- schema-utils: 3.3.0
- webpack: 5.95.0(@swc/core@1.16.0)
+ commander: 8.3.0
- object-assign@4.1.1: {}
+ khroma@2.1.0: {}
- object-inspect@1.13.2: {}
+ kleur@4.1.5: {}
- object-inspect@1.13.4: {}
+ layout-base@1.0.2: {}
- object-keys@1.1.1: {}
+ lines-and-columns@1.2.4: {}
- object.assign@4.1.5:
+ loader-utils@2.0.4:
dependencies:
- call-bind: 1.0.7
- define-properties: 1.2.1
- has-symbols: 1.0.3
- object-keys: 1.1.1
+ big.js: 5.2.2
+ emojis-list: 3.0.0
+ json5: 2.2.3
- object.getownpropertydescriptors@2.1.8:
+ local-pkg@1.2.1:
dependencies:
- array.prototype.reduce: 1.0.7
- call-bind: 1.0.7
- define-properties: 1.2.1
- es-abstract: 1.23.3
- es-object-atoms: 1.0.0
- gopd: 1.0.1
- safe-array-concat: 1.1.2
+ mlly: 1.8.2
+ pkg-types: 2.3.1
+ quansync: 0.2.11
- object.values@1.2.0:
- dependencies:
- call-bind: 1.0.7
- define-properties: 1.2.1
- es-object-atoms: 1.0.0
+ lodash-es@4.18.1: {}
- obuf@1.1.2: {}
+ longest-streak@3.1.0: {}
- on-finished@2.4.1:
+ lower-case@2.0.2:
dependencies:
- ee-first: 1.1.1
+ tslib: 2.8.1
- on-headers@1.0.2: {}
-
- onetime@5.1.2:
+ lru-cache@5.1.1:
dependencies:
- mimic-fn: 2.1.0
+ yallist: 3.1.1
- oniguruma-parser@0.12.2: {}
+ markdown-extensions@2.0.0: {}
- oniguruma-to-es@4.3.6:
- dependencies:
- oniguruma-parser: 0.12.2
- regex: 6.1.0
- regex-recursion: 6.0.2
+ markdown-table@3.0.4: {}
- open@10.2.0:
+ mdast-util-find-and-replace@3.0.2:
dependencies:
- default-browser: 5.4.0
- define-lazy-prop: 3.0.0
- is-inside-container: 1.0.0
- wsl-utils: 0.1.0
+ '@types/mdast': 4.0.4
+ escape-string-regexp: 5.0.0
+ unist-util-is: 6.0.1
+ unist-util-visit-parents: 6.0.2
- open@8.4.2:
+ mdast-util-from-markdown@1.3.1(supports-color@9.4.0):
dependencies:
- define-lazy-prop: 2.0.0
- is-docker: 2.2.1
- is-wsl: 2.2.0
-
- opener@1.5.2: {}
-
- p-cancelable@3.0.0: {}
+ '@types/mdast': 3.0.15
+ '@types/unist': 2.0.11
+ decode-named-character-reference: 1.3.0
+ mdast-util-to-string: 3.2.0
+ micromark: 3.2.0(supports-color@9.4.0)
+ micromark-util-decode-numeric-character-reference: 1.1.0
+ micromark-util-decode-string: 1.1.0
+ micromark-util-normalize-identifier: 1.1.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+ unist-util-stringify-position: 3.0.3
+ uvu: 0.5.6
+ transitivePeerDependencies:
+ - supports-color
- p-finally@1.0.0: {}
+ mdast-util-from-markdown@2.0.3(supports-color@9.4.0):
+ dependencies:
+ '@types/mdast': 4.0.4
+ '@types/unist': 3.0.3
+ decode-named-character-reference: 1.3.0
+ devlop: 1.1.0
+ mdast-util-to-string: 4.0.0
+ micromark: 4.0.2(supports-color@9.4.0)
+ micromark-util-decode-numeric-character-reference: 2.0.2
+ micromark-util-decode-string: 2.0.1
+ micromark-util-normalize-identifier: 2.0.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+ unist-util-stringify-position: 4.0.0
+ transitivePeerDependencies:
+ - supports-color
- p-limit@4.0.0:
+ mdast-util-gfm-autolink-literal@2.0.1:
dependencies:
- yocto-queue: 1.1.1
+ '@types/mdast': 4.0.4
+ ccount: 2.0.1
+ devlop: 1.1.0
+ mdast-util-find-and-replace: 3.0.2
+ micromark-util-character: 2.1.1
- p-locate@6.0.0:
+ mdast-util-gfm-footnote@2.1.0(supports-color@9.4.0):
dependencies:
- p-limit: 4.0.0
+ '@types/mdast': 4.0.4
+ devlop: 1.1.0
+ mdast-util-from-markdown: 2.0.3(supports-color@9.4.0)
+ mdast-util-to-markdown: 2.1.2
+ micromark-util-normalize-identifier: 2.0.1
+ transitivePeerDependencies:
+ - supports-color
- p-map@4.0.0:
+ mdast-util-gfm-strikethrough@2.0.0(supports-color@9.4.0):
dependencies:
- aggregate-error: 3.1.0
+ '@types/mdast': 4.0.4
+ mdast-util-from-markdown: 2.0.3(supports-color@9.4.0)
+ mdast-util-to-markdown: 2.1.2
+ transitivePeerDependencies:
+ - supports-color
- p-queue@6.6.2:
+ mdast-util-gfm-table@2.0.0(supports-color@9.4.0):
dependencies:
- eventemitter3: 4.0.7
- p-timeout: 3.2.0
+ '@types/mdast': 4.0.4
+ devlop: 1.1.0
+ markdown-table: 3.0.4
+ mdast-util-from-markdown: 2.0.3(supports-color@9.4.0)
+ mdast-util-to-markdown: 2.1.2
+ transitivePeerDependencies:
+ - supports-color
- p-retry@6.2.1:
+ mdast-util-gfm-task-list-item@2.0.0(supports-color@9.4.0):
dependencies:
- '@types/retry': 0.12.2
- is-network-error: 1.3.0
- retry: 0.13.1
+ '@types/mdast': 4.0.4
+ devlop: 1.1.0
+ mdast-util-from-markdown: 2.0.3(supports-color@9.4.0)
+ mdast-util-to-markdown: 2.1.2
+ transitivePeerDependencies:
+ - supports-color
- p-timeout@3.2.0:
+ mdast-util-gfm@3.1.0(supports-color@9.4.0):
dependencies:
- p-finally: 1.0.0
+ mdast-util-from-markdown: 2.0.3(supports-color@9.4.0)
+ mdast-util-gfm-autolink-literal: 2.0.1
+ mdast-util-gfm-footnote: 2.1.0(supports-color@9.4.0)
+ mdast-util-gfm-strikethrough: 2.0.0(supports-color@9.4.0)
+ mdast-util-gfm-table: 2.0.0(supports-color@9.4.0)
+ mdast-util-gfm-task-list-item: 2.0.0(supports-color@9.4.0)
+ mdast-util-to-markdown: 2.1.2
+ transitivePeerDependencies:
+ - supports-color
- package-json@8.1.1:
+ mdast-util-mdx-expression@2.0.1(supports-color@9.4.0):
dependencies:
- got: 12.6.1
- registry-auth-token: 5.0.2
- registry-url: 6.0.1
- semver: 7.6.3
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 3.0.5
+ '@types/mdast': 4.0.4
+ devlop: 1.1.0
+ mdast-util-from-markdown: 2.0.3(supports-color@9.4.0)
+ mdast-util-to-markdown: 2.1.2
+ transitivePeerDependencies:
+ - supports-color
- package-manager-detector@0.2.2: {}
+ mdast-util-mdx-jsx@3.2.0(supports-color@9.4.0):
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 3.0.5
+ '@types/mdast': 4.0.4
+ '@types/unist': 3.0.3
+ ccount: 2.0.1
+ devlop: 1.1.0
+ mdast-util-from-markdown: 2.0.3(supports-color@9.4.0)
+ mdast-util-to-markdown: 2.1.2
+ parse-entities: 4.0.2
+ stringify-entities: 4.0.4
+ unist-util-stringify-position: 4.0.0
+ vfile-message: 4.0.3
+ transitivePeerDependencies:
+ - supports-color
- param-case@3.0.4:
+ mdast-util-mdx@3.0.0(supports-color@9.4.0):
dependencies:
- dot-case: 3.0.4
- tslib: 2.8.0
+ mdast-util-from-markdown: 2.0.3(supports-color@9.4.0)
+ mdast-util-mdx-expression: 2.0.1(supports-color@9.4.0)
+ mdast-util-mdx-jsx: 3.2.0(supports-color@9.4.0)
+ mdast-util-mdxjs-esm: 2.0.1(supports-color@9.4.0)
+ mdast-util-to-markdown: 2.1.2
+ transitivePeerDependencies:
+ - supports-color
- parent-module@1.0.1:
+ mdast-util-mdxjs-esm@2.0.1(supports-color@9.4.0):
dependencies:
- callsites: 3.1.0
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 3.0.5
+ '@types/mdast': 4.0.4
+ devlop: 1.1.0
+ mdast-util-from-markdown: 2.0.3(supports-color@9.4.0)
+ mdast-util-to-markdown: 2.1.2
+ transitivePeerDependencies:
+ - supports-color
- parse-entities@4.0.1:
+ mdast-util-phrasing@4.1.0:
dependencies:
- '@types/unist': 2.0.11
- character-entities: 2.0.2
- character-entities-legacy: 3.0.0
- character-reference-invalid: 2.0.1
- decode-named-character-reference: 1.0.2
- is-alphanumerical: 2.0.1
- is-decimal: 2.0.1
- is-hexadecimal: 2.0.1
+ '@types/mdast': 4.0.4
+ unist-util-is: 6.0.1
- parse-json@5.2.0:
+ mdast-util-to-hast@13.2.1:
dependencies:
- '@babel/code-frame': 7.26.0
- error-ex: 1.3.2
- json-parse-even-better-errors: 2.3.1
- lines-and-columns: 1.2.4
+ '@types/hast': 3.0.5
+ '@types/mdast': 4.0.4
+ '@ungap/structured-clone': 1.3.3
+ devlop: 1.1.0
+ micromark-util-sanitize-uri: 2.0.1
+ trim-lines: 3.0.1
+ unist-util-position: 5.0.0
+ unist-util-visit: 5.1.0
+ vfile: 6.0.3
- parse-numeric-range@1.3.0: {}
+ mdast-util-to-markdown-cjk-friendly-gfm-strikethrough@1.0.0(@types/mdast@4.0.4)(micromark-util-types@2.0.2)(supports-color@9.4.0):
+ dependencies:
+ mdast-util-gfm-strikethrough: 2.0.0(supports-color@9.4.0)
+ mdast-util-to-markdown: 2.1.2
+ micromark-extension-cjk-friendly-util: 3.0.1(micromark-util-types@2.0.2)
+ micromark-util-symbol: 2.0.1
+ optionalDependencies:
+ '@types/mdast': 4.0.4
+ transitivePeerDependencies:
+ - micromark-util-types
+ - supports-color
- parse5-htmlparser2-tree-adapter@7.1.0:
+ mdast-util-to-markdown-cjk-friendly@1.0.0(@types/mdast@4.0.4)(micromark-util-types@2.0.2):
dependencies:
- domhandler: 5.0.3
- parse5: 7.2.0
+ mdast-util-to-markdown: 2.1.2
+ micromark-extension-cjk-friendly-util: 3.0.1(micromark-util-types@2.0.2)
+ micromark-util-symbol: 2.0.1
+ optionalDependencies:
+ '@types/mdast': 4.0.4
+ transitivePeerDependencies:
+ - micromark-util-types
- parse5@7.2.0:
+ mdast-util-to-markdown@2.1.2:
dependencies:
- entities: 4.5.0
-
- parseurl@1.3.3: {}
+ '@types/mdast': 4.0.4
+ '@types/unist': 3.0.3
+ longest-streak: 3.1.0
+ mdast-util-phrasing: 4.1.0
+ mdast-util-to-string: 4.0.0
+ micromark-util-classify-character: 2.0.1
+ micromark-util-decode-string: 2.0.1
+ unist-util-visit: 5.1.0
+ zwitch: 2.0.4
- pascal-case@3.1.2:
+ mdast-util-to-string@3.2.0:
dependencies:
- no-case: 3.0.4
- tslib: 2.8.0
+ '@types/mdast': 3.0.15
- path-data-parser@0.1.0: {}
-
- path-exists@5.0.0: {}
-
- path-is-inside@1.0.2: {}
-
- path-key@3.1.1: {}
-
- path-parse@1.0.7: {}
-
- path-root-regex@0.1.2: {}
-
- path-root@0.1.1:
+ mdast-util-to-string@4.0.0:
dependencies:
- path-root-regex: 0.1.2
+ '@types/mdast': 4.0.4
- path-to-regexp@0.1.12: {}
+ medium-zoom@1.1.0: {}
- path-to-regexp@1.9.0:
+ mermaid@10.9.8(supports-color@9.4.0):
dependencies:
- isarray: 0.0.1
-
- path-to-regexp@3.3.0: {}
-
- path-type@4.0.0: {}
-
- pathe@1.1.2: {}
-
- picocolors@1.1.1: {}
-
- picomatch@2.3.1: {}
+ '@braintree/sanitize-url': 6.0.4
+ '@types/d3-scale': 4.0.9
+ '@types/d3-scale-chromatic': 3.1.0
+ cytoscape: 3.34.1
+ cytoscape-cose-bilkent: 4.1.0(cytoscape@3.34.1)
+ d3: 7.9.0
+ d3-sankey: 0.12.3
+ dagre-d3-es: 7.0.13
+ dayjs: 1.11.23
+ dompurify: 3.4.14
+ elkjs: 0.9.3
+ katex: 0.16.47
+ khroma: 2.1.0
+ lodash-es: 4.18.1
+ mdast-util-from-markdown: 1.3.1(supports-color@9.4.0)
+ non-layered-tidy-tree-layout: 2.0.2
+ stylis: 4.4.0
+ ts-dedent: 2.3.0
+ uuid: 14.0.2
+ web-worker: 1.5.0
+ transitivePeerDependencies:
+ - supports-color
- pkg-dir@7.0.0:
+ micromark-core-commonmark@1.1.0:
dependencies:
- find-up: 6.3.0
+ decode-named-character-reference: 1.3.0
+ micromark-factory-destination: 1.1.0
+ micromark-factory-label: 1.1.0
+ micromark-factory-space: 1.1.0
+ micromark-factory-title: 1.1.0
+ micromark-factory-whitespace: 1.1.0
+ micromark-util-character: 1.2.0
+ micromark-util-chunked: 1.1.0
+ micromark-util-classify-character: 1.1.0
+ micromark-util-html-tag-name: 1.2.0
+ micromark-util-normalize-identifier: 1.1.0
+ micromark-util-resolve-all: 1.1.0
+ micromark-util-subtokenize: 1.1.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+ uvu: 0.5.6
- pkg-types@1.2.1:
+ micromark-core-commonmark@2.0.3:
dependencies:
- confbox: 0.1.8
- mlly: 1.7.2
- pathe: 1.1.2
-
- points-on-curve@0.2.0: {}
-
- points-on-path@0.2.1:
+ decode-named-character-reference: 1.3.0
+ devlop: 1.1.0
+ micromark-factory-destination: 2.0.1
+ micromark-factory-label: 2.0.1
+ micromark-factory-space: 2.0.1
+ micromark-factory-title: 2.0.1
+ micromark-factory-whitespace: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-chunked: 2.0.1
+ micromark-util-classify-character: 2.0.1
+ micromark-util-html-tag-name: 2.0.1
+ micromark-util-normalize-identifier: 2.0.1
+ micromark-util-resolve-all: 2.0.1
+ micromark-util-subtokenize: 2.1.0
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-extension-cjk-friendly-gfm-strikethrough@2.0.1(micromark-util-types@2.0.2)(micromark@4.0.2(supports-color@9.4.0)):
dependencies:
- path-data-parser: 0.1.0
- points-on-curve: 0.2.0
-
- possible-typed-array-names@1.0.0: {}
+ devlop: 1.1.0
+ get-east-asian-width: 1.6.0
+ micromark: 4.0.2(supports-color@9.4.0)
+ micromark-extension-cjk-friendly-util: 3.0.1(micromark-util-types@2.0.2)
+ micromark-util-character: 2.1.1
+ micromark-util-chunked: 2.0.1
+ micromark-util-resolve-all: 2.0.1
+ micromark-util-symbol: 2.0.1
+ optionalDependencies:
+ micromark-util-types: 2.0.2
- postcss-attribute-case-insensitive@7.0.1(postcss@8.5.6):
+ micromark-extension-cjk-friendly-util@3.0.1(micromark-util-types@2.0.2):
dependencies:
- postcss: 8.5.6
- postcss-selector-parser: 7.0.0
+ get-east-asian-width: 1.6.0
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ optionalDependencies:
+ micromark-util-types: 2.0.2
- postcss-calc@9.0.1(postcss@8.5.6):
+ micromark-extension-cjk-friendly@2.0.1(micromark-util-types@2.0.2)(micromark@4.0.2(supports-color@9.4.0)):
dependencies:
- postcss: 8.5.6
- postcss-selector-parser: 6.1.2
- postcss-value-parser: 4.2.0
+ devlop: 1.1.0
+ micromark: 4.0.2(supports-color@9.4.0)
+ micromark-extension-cjk-friendly-util: 3.0.1(micromark-util-types@2.0.2)
+ micromark-util-chunked: 2.0.1
+ micromark-util-resolve-all: 2.0.1
+ micromark-util-symbol: 2.0.1
+ optionalDependencies:
+ micromark-util-types: 2.0.2
- postcss-clamp@4.1.0(postcss@8.5.6):
+ micromark-extension-gfm-autolink-literal@2.1.0:
dependencies:
- postcss: 8.5.6
- postcss-value-parser: 4.2.0
+ micromark-util-character: 2.1.1
+ micromark-util-sanitize-uri: 2.0.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
- postcss-color-functional-notation@7.0.12(postcss@8.5.6):
+ micromark-extension-gfm-footnote@2.1.0:
dependencies:
- '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-tokenizer': 3.0.4
- '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.6)
- '@csstools/utilities': 2.0.0(postcss@8.5.6)
- postcss: 8.5.6
+ devlop: 1.1.0
+ micromark-core-commonmark: 2.0.3
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-normalize-identifier: 2.0.1
+ micromark-util-sanitize-uri: 2.0.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
- postcss-color-hex-alpha@10.0.0(postcss@8.5.6):
+ micromark-extension-gfm-strikethrough@2.1.0:
dependencies:
- '@csstools/utilities': 2.0.0(postcss@8.5.6)
- postcss: 8.5.6
- postcss-value-parser: 4.2.0
+ devlop: 1.1.0
+ micromark-util-chunked: 2.0.1
+ micromark-util-classify-character: 2.0.1
+ micromark-util-resolve-all: 2.0.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
- postcss-color-rebeccapurple@10.0.0(postcss@8.5.6):
+ micromark-extension-gfm-table@2.1.1:
dependencies:
- '@csstools/utilities': 2.0.0(postcss@8.5.6)
- postcss: 8.5.6
- postcss-value-parser: 4.2.0
+ devlop: 1.1.0
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
- postcss-colormin@6.1.0(postcss@8.5.6):
+ micromark-extension-gfm-tagfilter@2.0.0:
dependencies:
- browserslist: 4.28.1
- caniuse-api: 3.0.0
- colord: 2.9.3
- postcss: 8.5.6
- postcss-value-parser: 4.2.0
+ micromark-util-types: 2.0.2
- postcss-convert-values@6.1.0(postcss@8.5.6):
+ micromark-extension-gfm-task-list-item@2.1.0:
dependencies:
- browserslist: 4.28.1
- postcss: 8.5.6
- postcss-value-parser: 4.2.0
+ devlop: 1.1.0
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
- postcss-custom-media@11.0.6(postcss@8.5.6):
+ micromark-extension-gfm@3.0.0:
dependencies:
- '@csstools/cascade-layer-name-parser': 2.0.5(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-tokenizer': 3.0.4
- '@csstools/media-query-list-parser': 4.0.3(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
- postcss: 8.5.6
+ micromark-extension-gfm-autolink-literal: 2.1.0
+ micromark-extension-gfm-footnote: 2.1.0
+ micromark-extension-gfm-strikethrough: 2.1.0
+ micromark-extension-gfm-table: 2.1.1
+ micromark-extension-gfm-tagfilter: 2.0.0
+ micromark-extension-gfm-task-list-item: 2.1.0
+ micromark-util-combine-extensions: 2.0.1
+ micromark-util-types: 2.0.2
- postcss-custom-properties@14.0.6(postcss@8.5.6):
+ micromark-extension-mdx-expression@3.0.1:
dependencies:
- '@csstools/cascade-layer-name-parser': 2.0.5(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-tokenizer': 3.0.4
- '@csstools/utilities': 2.0.0(postcss@8.5.6)
- postcss: 8.5.6
- postcss-value-parser: 4.2.0
+ '@types/estree': 1.0.9
+ devlop: 1.1.0
+ micromark-factory-mdx-expression: 2.0.3
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-events-to-acorn: 2.0.3
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
- postcss-custom-selectors@8.0.5(postcss@8.5.6):
+ micromark-extension-mdx-jsx@3.0.2:
dependencies:
- '@csstools/cascade-layer-name-parser': 2.0.5(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-tokenizer': 3.0.4
- postcss: 8.5.6
- postcss-selector-parser: 7.0.0
+ '@types/estree': 1.0.9
+ devlop: 1.1.0
+ estree-util-is-identifier-name: 3.0.0
+ micromark-factory-mdx-expression: 2.0.3
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-events-to-acorn: 2.0.3
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+ vfile-message: 4.0.3
- postcss-dir-pseudo-class@9.0.1(postcss@8.5.6):
+ micromark-extension-mdx-md@2.0.0:
dependencies:
- postcss: 8.5.6
- postcss-selector-parser: 7.0.0
+ micromark-util-types: 2.0.2
- postcss-discard-comments@6.0.2(postcss@8.5.6):
+ micromark-extension-mdxjs-esm@3.0.0:
dependencies:
- postcss: 8.5.6
+ '@types/estree': 1.0.9
+ devlop: 1.1.0
+ micromark-core-commonmark: 2.0.3
+ micromark-util-character: 2.1.1
+ micromark-util-events-to-acorn: 2.0.3
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+ unist-util-position-from-estree: 2.0.0
+ vfile-message: 4.0.3
- postcss-discard-duplicates@6.0.3(postcss@8.5.6):
+ micromark-extension-mdxjs@3.0.0:
dependencies:
- postcss: 8.5.6
+ acorn: 8.18.0
+ acorn-jsx: 5.3.2(acorn@8.18.0)
+ micromark-extension-mdx-expression: 3.0.1
+ micromark-extension-mdx-jsx: 3.0.2
+ micromark-extension-mdx-md: 2.0.0
+ micromark-extension-mdxjs-esm: 3.0.0
+ micromark-util-combine-extensions: 2.0.1
+ micromark-util-types: 2.0.2
- postcss-discard-empty@6.0.3(postcss@8.5.6):
+ micromark-factory-destination@1.1.0:
dependencies:
- postcss: 8.5.6
+ micromark-util-character: 1.2.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
- postcss-discard-overridden@6.0.2(postcss@8.5.6):
+ micromark-factory-destination@2.0.1:
dependencies:
- postcss: 8.5.6
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
- postcss-discard-unused@6.0.5(postcss@8.5.6):
+ micromark-factory-label@1.1.0:
dependencies:
- postcss: 8.5.6
- postcss-selector-parser: 6.1.2
+ micromark-util-character: 1.2.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+ uvu: 0.5.6
- postcss-double-position-gradients@6.0.4(postcss@8.5.6):
+ micromark-factory-label@2.0.1:
dependencies:
- '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.6)
- '@csstools/utilities': 2.0.0(postcss@8.5.6)
- postcss: 8.5.6
- postcss-value-parser: 4.2.0
+ devlop: 1.1.0
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
- postcss-focus-visible@10.0.1(postcss@8.5.6):
+ micromark-factory-mdx-expression@2.0.3:
dependencies:
- postcss: 8.5.6
- postcss-selector-parser: 7.0.0
+ '@types/estree': 1.0.9
+ devlop: 1.1.0
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-events-to-acorn: 2.0.3
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+ unist-util-position-from-estree: 2.0.0
+ vfile-message: 4.0.3
- postcss-focus-within@9.0.1(postcss@8.5.6):
+ micromark-factory-space@1.1.0:
dependencies:
- postcss: 8.5.6
- postcss-selector-parser: 7.0.0
+ micromark-util-character: 1.2.0
+ micromark-util-types: 1.1.0
- postcss-font-variant@5.0.0(postcss@8.5.6):
+ micromark-factory-space@2.0.1:
dependencies:
- postcss: 8.5.6
+ micromark-util-character: 2.1.1
+ micromark-util-types: 2.0.2
- postcss-gap-properties@6.0.0(postcss@8.5.6):
+ micromark-factory-title@1.1.0:
dependencies:
- postcss: 8.5.6
+ micromark-factory-space: 1.1.0
+ micromark-util-character: 1.2.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
- postcss-image-set-function@7.0.0(postcss@8.5.6):
+ micromark-factory-title@2.0.1:
dependencies:
- '@csstools/utilities': 2.0.0(postcss@8.5.6)
- postcss: 8.5.6
- postcss-value-parser: 4.2.0
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
- postcss-lab-function@7.0.12(postcss@8.5.6):
+ micromark-factory-whitespace@1.1.0:
dependencies:
- '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-tokenizer': 3.0.4
- '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.6)
- '@csstools/utilities': 2.0.0(postcss@8.5.6)
- postcss: 8.5.6
+ micromark-factory-space: 1.1.0
+ micromark-util-character: 1.2.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
- postcss-loader@7.3.4(postcss@8.5.6)(typescript@5.6.3)(webpack@5.95.0(@swc/core@1.16.0)):
+ micromark-factory-whitespace@2.0.1:
dependencies:
- cosmiconfig: 8.3.6(typescript@5.6.3)
- jiti: 1.21.6
- postcss: 8.5.6
- semver: 7.6.3
- webpack: 5.95.0(@swc/core@1.16.0)
- transitivePeerDependencies:
- - typescript
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
- postcss-logical@8.1.0(postcss@8.5.6):
+ micromark-util-character@1.2.0:
dependencies:
- postcss: 8.5.6
- postcss-value-parser: 4.2.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
- postcss-merge-idents@6.0.3(postcss@8.5.6):
+ micromark-util-character@2.1.1:
dependencies:
- cssnano-utils: 4.0.2(postcss@8.5.6)
- postcss: 8.5.6
- postcss-value-parser: 4.2.0
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
- postcss-merge-longhand@6.0.5(postcss@8.5.6):
+ micromark-util-chunked@1.1.0:
dependencies:
- postcss: 8.5.6
- postcss-value-parser: 4.2.0
- stylehacks: 6.1.1(postcss@8.5.6)
+ micromark-util-symbol: 1.1.0
- postcss-merge-rules@6.1.1(postcss@8.5.6):
+ micromark-util-chunked@2.0.1:
dependencies:
- browserslist: 4.28.1
- caniuse-api: 3.0.0
- cssnano-utils: 4.0.2(postcss@8.5.6)
- postcss: 8.5.6
- postcss-selector-parser: 6.1.2
+ micromark-util-symbol: 2.0.1
- postcss-minify-font-values@6.1.0(postcss@8.5.6):
+ micromark-util-classify-character@1.1.0:
dependencies:
- postcss: 8.5.6
- postcss-value-parser: 4.2.0
+ micromark-util-character: 1.2.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
- postcss-minify-gradients@6.0.3(postcss@8.5.6):
+ micromark-util-classify-character@2.0.1:
dependencies:
- colord: 2.9.3
- cssnano-utils: 4.0.2(postcss@8.5.6)
- postcss: 8.5.6
- postcss-value-parser: 4.2.0
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
- postcss-minify-params@6.1.0(postcss@8.5.6):
+ micromark-util-combine-extensions@1.1.0:
dependencies:
- browserslist: 4.28.1
- cssnano-utils: 4.0.2(postcss@8.5.6)
- postcss: 8.5.6
- postcss-value-parser: 4.2.0
+ micromark-util-chunked: 1.1.0
+ micromark-util-types: 1.1.0
- postcss-minify-selectors@6.0.4(postcss@8.5.6):
+ micromark-util-combine-extensions@2.0.1:
dependencies:
- postcss: 8.5.6
- postcss-selector-parser: 6.1.2
+ micromark-util-chunked: 2.0.1
+ micromark-util-types: 2.0.2
- postcss-modules-extract-imports@3.1.0(postcss@8.5.6):
+ micromark-util-decode-numeric-character-reference@1.1.0:
dependencies:
- postcss: 8.5.6
+ micromark-util-symbol: 1.1.0
- postcss-modules-local-by-default@4.0.5(postcss@8.5.6):
+ micromark-util-decode-numeric-character-reference@2.0.2:
dependencies:
- icss-utils: 5.1.0(postcss@8.5.6)
- postcss: 8.5.6
- postcss-selector-parser: 6.1.2
- postcss-value-parser: 4.2.0
+ micromark-util-symbol: 2.0.1
- postcss-modules-scope@3.2.0(postcss@8.5.6):
+ micromark-util-decode-string@1.1.0:
dependencies:
- postcss: 8.5.6
- postcss-selector-parser: 6.1.2
+ decode-named-character-reference: 1.3.0
+ micromark-util-character: 1.2.0
+ micromark-util-decode-numeric-character-reference: 1.1.0
+ micromark-util-symbol: 1.1.0
- postcss-modules-values@4.0.0(postcss@8.5.6):
+ micromark-util-decode-string@2.0.1:
dependencies:
- icss-utils: 5.1.0(postcss@8.5.6)
- postcss: 8.5.6
+ decode-named-character-reference: 1.3.0
+ micromark-util-character: 2.1.1
+ micromark-util-decode-numeric-character-reference: 2.0.2
+ micromark-util-symbol: 2.0.1
- postcss-nesting@13.0.2(postcss@8.5.6):
- dependencies:
- '@csstools/selector-resolve-nested': 3.1.0(postcss-selector-parser@7.0.0)
- '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.0.0)
- postcss: 8.5.6
- postcss-selector-parser: 7.0.0
+ micromark-util-encode@1.1.0: {}
- postcss-normalize-charset@6.0.2(postcss@8.5.6):
- dependencies:
- postcss: 8.5.6
+ micromark-util-encode@2.0.1: {}
- postcss-normalize-display-values@6.0.2(postcss@8.5.6):
+ micromark-util-events-to-acorn@2.0.3:
dependencies:
- postcss: 8.5.6
- postcss-value-parser: 4.2.0
+ '@types/estree': 1.0.9
+ '@types/unist': 3.0.3
+ devlop: 1.1.0
+ estree-util-visit: 2.0.0
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+ vfile-message: 4.0.3
- postcss-normalize-positions@6.0.2(postcss@8.5.6):
- dependencies:
- postcss: 8.5.6
- postcss-value-parser: 4.2.0
+ micromark-util-html-tag-name@1.2.0: {}
- postcss-normalize-repeat-style@6.0.2(postcss@8.5.6):
- dependencies:
- postcss: 8.5.6
- postcss-value-parser: 4.2.0
+ micromark-util-html-tag-name@2.0.1: {}
- postcss-normalize-string@6.0.2(postcss@8.5.6):
+ micromark-util-normalize-identifier@1.1.0:
dependencies:
- postcss: 8.5.6
- postcss-value-parser: 4.2.0
+ micromark-util-symbol: 1.1.0
- postcss-normalize-timing-functions@6.0.2(postcss@8.5.6):
+ micromark-util-normalize-identifier@2.0.1:
dependencies:
- postcss: 8.5.6
- postcss-value-parser: 4.2.0
+ micromark-util-symbol: 2.0.1
- postcss-normalize-unicode@6.1.0(postcss@8.5.6):
+ micromark-util-resolve-all@1.1.0:
dependencies:
- browserslist: 4.28.1
- postcss: 8.5.6
- postcss-value-parser: 4.2.0
+ micromark-util-types: 1.1.0
- postcss-normalize-url@6.0.2(postcss@8.5.6):
+ micromark-util-resolve-all@2.0.1:
dependencies:
- postcss: 8.5.6
- postcss-value-parser: 4.2.0
+ micromark-util-types: 2.0.2
- postcss-normalize-whitespace@6.0.2(postcss@8.5.6):
+ micromark-util-sanitize-uri@1.2.0:
dependencies:
- postcss: 8.5.6
- postcss-value-parser: 4.2.0
+ micromark-util-character: 1.2.0
+ micromark-util-encode: 1.1.0
+ micromark-util-symbol: 1.1.0
- postcss-opacity-percentage@3.0.0(postcss@8.5.6):
+ micromark-util-sanitize-uri@2.0.1:
dependencies:
- postcss: 8.5.6
+ micromark-util-character: 2.1.1
+ micromark-util-encode: 2.0.1
+ micromark-util-symbol: 2.0.1
- postcss-ordered-values@6.0.2(postcss@8.5.6):
+ micromark-util-subtokenize@1.1.0:
dependencies:
- cssnano-utils: 4.0.2(postcss@8.5.6)
- postcss: 8.5.6
- postcss-value-parser: 4.2.0
+ micromark-util-chunked: 1.1.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+ uvu: 0.5.6
- postcss-overflow-shorthand@6.0.0(postcss@8.5.6):
+ micromark-util-subtokenize@2.1.0:
dependencies:
- postcss: 8.5.6
- postcss-value-parser: 4.2.0
+ devlop: 1.1.0
+ micromark-util-chunked: 2.0.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
- postcss-page-break@3.0.4(postcss@8.5.6):
- dependencies:
- postcss: 8.5.6
+ micromark-util-symbol@1.1.0: {}
- postcss-place@10.0.0(postcss@8.5.6):
- dependencies:
- postcss: 8.5.6
- postcss-value-parser: 4.2.0
+ micromark-util-symbol@2.0.1: {}
- postcss-preset-env@10.5.0(postcss@8.5.6):
- dependencies:
- '@csstools/postcss-alpha-function': 1.0.1(postcss@8.5.6)
- '@csstools/postcss-cascade-layers': 5.0.2(postcss@8.5.6)
- '@csstools/postcss-color-function': 4.0.12(postcss@8.5.6)
- '@csstools/postcss-color-function-display-p3-linear': 1.0.1(postcss@8.5.6)
- '@csstools/postcss-color-mix-function': 3.0.12(postcss@8.5.6)
- '@csstools/postcss-color-mix-variadic-function-arguments': 1.0.2(postcss@8.5.6)
- '@csstools/postcss-content-alt-text': 2.0.8(postcss@8.5.6)
- '@csstools/postcss-contrast-color-function': 2.0.12(postcss@8.5.6)
- '@csstools/postcss-exponential-functions': 2.0.9(postcss@8.5.6)
- '@csstools/postcss-font-format-keywords': 4.0.0(postcss@8.5.6)
- '@csstools/postcss-gamut-mapping': 2.0.11(postcss@8.5.6)
- '@csstools/postcss-gradients-interpolation-method': 5.0.12(postcss@8.5.6)
- '@csstools/postcss-hwb-function': 4.0.12(postcss@8.5.6)
- '@csstools/postcss-ic-unit': 4.0.4(postcss@8.5.6)
- '@csstools/postcss-initial': 2.0.1(postcss@8.5.6)
- '@csstools/postcss-is-pseudo-class': 5.0.3(postcss@8.5.6)
- '@csstools/postcss-light-dark-function': 2.0.11(postcss@8.5.6)
- '@csstools/postcss-logical-float-and-clear': 3.0.0(postcss@8.5.6)
- '@csstools/postcss-logical-overflow': 2.0.0(postcss@8.5.6)
- '@csstools/postcss-logical-overscroll-behavior': 2.0.0(postcss@8.5.6)
- '@csstools/postcss-logical-resize': 3.0.0(postcss@8.5.6)
- '@csstools/postcss-logical-viewport-units': 3.0.4(postcss@8.5.6)
- '@csstools/postcss-media-minmax': 2.0.9(postcss@8.5.6)
- '@csstools/postcss-media-queries-aspect-ratio-number-values': 3.0.5(postcss@8.5.6)
- '@csstools/postcss-nested-calc': 4.0.0(postcss@8.5.6)
- '@csstools/postcss-normalize-display-values': 4.0.0(postcss@8.5.6)
- '@csstools/postcss-oklab-function': 4.0.12(postcss@8.5.6)
- '@csstools/postcss-position-area-property': 1.0.0(postcss@8.5.6)
- '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.6)
- '@csstools/postcss-random-function': 2.0.1(postcss@8.5.6)
- '@csstools/postcss-relative-color-syntax': 3.0.12(postcss@8.5.6)
- '@csstools/postcss-scope-pseudo-class': 4.0.1(postcss@8.5.6)
- '@csstools/postcss-sign-functions': 1.1.4(postcss@8.5.6)
- '@csstools/postcss-stepped-value-functions': 4.0.9(postcss@8.5.6)
- '@csstools/postcss-system-ui-font-family': 1.0.0(postcss@8.5.6)
- '@csstools/postcss-text-decoration-shorthand': 4.0.3(postcss@8.5.6)
- '@csstools/postcss-trigonometric-functions': 4.0.9(postcss@8.5.6)
- '@csstools/postcss-unset-value': 4.0.0(postcss@8.5.6)
- autoprefixer: 10.4.23(postcss@8.5.6)
- browserslist: 4.28.1
- css-blank-pseudo: 7.0.1(postcss@8.5.6)
- css-has-pseudo: 7.0.3(postcss@8.5.6)
- css-prefers-color-scheme: 10.0.0(postcss@8.5.6)
- cssdb: 8.5.2
- postcss: 8.5.6
- postcss-attribute-case-insensitive: 7.0.1(postcss@8.5.6)
- postcss-clamp: 4.1.0(postcss@8.5.6)
- postcss-color-functional-notation: 7.0.12(postcss@8.5.6)
- postcss-color-hex-alpha: 10.0.0(postcss@8.5.6)
- postcss-color-rebeccapurple: 10.0.0(postcss@8.5.6)
- postcss-custom-media: 11.0.6(postcss@8.5.6)
- postcss-custom-properties: 14.0.6(postcss@8.5.6)
- postcss-custom-selectors: 8.0.5(postcss@8.5.6)
- postcss-dir-pseudo-class: 9.0.1(postcss@8.5.6)
- postcss-double-position-gradients: 6.0.4(postcss@8.5.6)
- postcss-focus-visible: 10.0.1(postcss@8.5.6)
- postcss-focus-within: 9.0.1(postcss@8.5.6)
- postcss-font-variant: 5.0.0(postcss@8.5.6)
- postcss-gap-properties: 6.0.0(postcss@8.5.6)
- postcss-image-set-function: 7.0.0(postcss@8.5.6)
- postcss-lab-function: 7.0.12(postcss@8.5.6)
- postcss-logical: 8.1.0(postcss@8.5.6)
- postcss-nesting: 13.0.2(postcss@8.5.6)
- postcss-opacity-percentage: 3.0.0(postcss@8.5.6)
- postcss-overflow-shorthand: 6.0.0(postcss@8.5.6)
- postcss-page-break: 3.0.4(postcss@8.5.6)
- postcss-place: 10.0.0(postcss@8.5.6)
- postcss-pseudo-class-any-link: 10.0.1(postcss@8.5.6)
- postcss-replace-overflow-wrap: 4.0.0(postcss@8.5.6)
- postcss-selector-not: 8.0.1(postcss@8.5.6)
-
- postcss-pseudo-class-any-link@10.0.1(postcss@8.5.6):
- dependencies:
- postcss: 8.5.6
- postcss-selector-parser: 7.0.0
-
- postcss-reduce-idents@6.0.3(postcss@8.5.6):
- dependencies:
- postcss: 8.5.6
- postcss-value-parser: 4.2.0
-
- postcss-reduce-initial@6.1.0(postcss@8.5.6):
- dependencies:
- browserslist: 4.28.1
- caniuse-api: 3.0.0
- postcss: 8.5.6
-
- postcss-reduce-transforms@6.0.2(postcss@8.5.6):
- dependencies:
- postcss: 8.5.6
- postcss-value-parser: 4.2.0
-
- postcss-replace-overflow-wrap@4.0.0(postcss@8.5.6):
- dependencies:
- postcss: 8.5.6
-
- postcss-selector-not@8.0.1(postcss@8.5.6):
- dependencies:
- postcss: 8.5.6
- postcss-selector-parser: 7.0.0
-
- postcss-selector-parser@6.1.2:
- dependencies:
- cssesc: 3.0.0
- util-deprecate: 1.0.2
-
- postcss-selector-parser@7.0.0:
- dependencies:
- cssesc: 3.0.0
- util-deprecate: 1.0.2
-
- postcss-sort-media-queries@5.2.0(postcss@8.5.6):
- dependencies:
- postcss: 8.5.6
- sort-css-media-queries: 2.2.0
-
- postcss-svgo@6.0.3(postcss@8.5.6):
- dependencies:
- postcss: 8.5.6
- postcss-value-parser: 4.2.0
- svgo: 3.3.2
-
- postcss-unique-selectors@6.0.4(postcss@8.5.6):
- dependencies:
- postcss: 8.5.6
- postcss-selector-parser: 6.1.2
+ micromark-util-types@1.1.0: {}
- postcss-value-parser@4.2.0: {}
+ micromark-util-types@2.0.2: {}
- postcss-zindex@6.0.2(postcss@8.5.6):
+ micromark@3.2.0(supports-color@9.4.0):
dependencies:
- postcss: 8.5.6
+ '@types/debug': 4.1.13
+ debug: 4.4.3(supports-color@9.4.0)
+ decode-named-character-reference: 1.3.0
+ micromark-core-commonmark: 1.1.0
+ micromark-factory-space: 1.1.0
+ micromark-util-character: 1.2.0
+ micromark-util-chunked: 1.1.0
+ micromark-util-combine-extensions: 1.1.0
+ micromark-util-decode-numeric-character-reference: 1.1.0
+ micromark-util-encode: 1.1.0
+ micromark-util-normalize-identifier: 1.1.0
+ micromark-util-resolve-all: 1.1.0
+ micromark-util-sanitize-uri: 1.2.0
+ micromark-util-subtokenize: 1.1.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+ uvu: 0.5.6
+ transitivePeerDependencies:
+ - supports-color
- postcss@8.5.6:
+ micromark@4.0.2(supports-color@9.4.0):
dependencies:
- nanoid: 3.3.11
- picocolors: 1.1.1
- source-map-js: 1.2.1
+ '@types/debug': 4.1.13
+ debug: 4.4.3(supports-color@9.4.0)
+ decode-named-character-reference: 1.3.0
+ devlop: 1.1.0
+ micromark-core-commonmark: 2.0.3
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-chunked: 2.0.1
+ micromark-util-combine-extensions: 2.0.1
+ micromark-util-decode-numeric-character-reference: 2.0.2
+ micromark-util-encode: 2.0.1
+ micromark-util-normalize-identifier: 2.0.1
+ micromark-util-resolve-all: 2.0.1
+ micromark-util-sanitize-uri: 2.0.1
+ micromark-util-subtokenize: 2.1.0
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+ transitivePeerDependencies:
+ - supports-color
- pretty-error@4.0.0:
+ minimatch@10.2.6:
dependencies:
- lodash: 4.17.21
- renderkid: 3.0.0
-
- pretty-time@1.1.0: {}
+ brace-expansion: 5.0.9
- prism-react-renderer@2.4.1(react@19.2.8):
+ mlly@1.8.2:
dependencies:
- '@types/prismjs': 1.26.4
- clsx: 2.1.1
- react: 19.2.8
+ acorn: 8.18.0
+ pathe: 2.0.3
+ pkg-types: 1.3.1
+ ufo: 1.6.4
- prismjs@1.29.0: {}
+ mri@1.2.0: {}
- process-nextick-args@2.0.1: {}
+ ms@2.1.3: {}
- prompts@2.4.2:
- dependencies:
- kleur: 3.0.3
- sisteransi: 1.0.5
+ nanoid@3.3.18: {}
- prop-types@15.8.1:
+ no-case@3.0.4:
dependencies:
- loose-envify: 1.4.0
- object-assign: 4.1.1
- react-is: 16.13.1
+ lower-case: 2.0.2
+ tslib: 2.8.1
+
+ node-addon-api@7.1.1:
+ optional: true
+
+ node-releases@2.0.53: {}
- property-information@6.5.0: {}
+ non-layered-tidy-tree-layout@2.0.2: {}
+
+ nprogress@0.2.0: {}
- property-information@7.1.0: {}
+ obug@2.1.4: {}
- proto-list@1.2.4: {}
+ oniguruma-parser@0.12.2: {}
- proxy-addr@2.0.7:
+ oniguruma-to-es@4.3.6:
dependencies:
- forwarded: 0.2.0
- ipaddr.js: 1.9.1
+ oniguruma-parser: 0.12.2
+ regex: 6.1.0
+ regex-recursion: 6.0.2
- punycode@2.3.1: {}
+ package-manager-detector@1.8.0: {}
- pupa@3.1.0:
+ parent-module@1.0.1:
dependencies:
- escape-goat: 4.0.0
+ callsites: 3.1.0
- q@1.5.1: {}
+ parse-entities@4.0.2:
+ dependencies:
+ '@types/unist': 2.0.11
+ character-entities-legacy: 3.0.0
+ character-reference-invalid: 2.0.1
+ decode-named-character-reference: 1.3.0
+ is-alphanumerical: 2.0.1
+ is-decimal: 2.0.1
+ is-hexadecimal: 2.0.1
- qs@6.13.0:
+ parse-json@5.2.0:
dependencies:
- side-channel: 1.1.0
+ '@babel/code-frame': 7.29.7
+ error-ex: 1.3.4
+ json-parse-even-better-errors: 2.3.1
+ lines-and-columns: 1.2.4
- qs@6.14.0:
+ parse5@7.3.0:
dependencies:
- side-channel: 1.1.0
+ entities: 6.0.1
- queue-microtask@1.2.3: {}
+ path-browserify@1.0.1: {}
- quick-lru@5.1.1: {}
+ path-type@4.0.0: {}
- randombytes@2.1.0:
- dependencies:
- safe-buffer: 5.2.1
+ pathe@2.0.3: {}
- range-parser@1.2.0: {}
+ picocolors@1.1.1: {}
- range-parser@1.2.1: {}
+ picomatch@4.0.7: {}
- raw-body@2.5.2:
+ pkg-types@1.3.1:
dependencies:
- bytes: 3.1.2
- http-errors: 2.0.0
- iconv-lite: 0.4.24
- unpipe: 1.0.0
+ confbox: 0.1.8
+ mlly: 1.8.2
+ pathe: 2.0.3
- rc@1.2.8:
+ pkg-types@2.3.1:
dependencies:
- deep-extend: 0.6.0
- ini: 1.3.8
- minimist: 1.2.8
- strip-json-comments: 2.0.1
+ confbox: 0.2.4
+ exsolve: 1.1.1
+ pathe: 2.0.3
- react-dom@19.2.8(react@19.2.8):
+ postcss@8.5.26:
dependencies:
- react: 19.2.8
- scheduler: 0.27.0
+ nanoid: 3.3.18
+ picocolors: 1.1.1
+ source-map-js: 1.2.1
- react-fast-compare@3.2.2: {}
+ property-information@7.2.0: {}
- react-is@16.13.1: {}
+ quansync@0.2.11: {}
- react-json-view-lite@2.4.1(react@19.2.8):
+ react-dom@19.2.8(react@19.2.8):
dependencies:
react: 19.2.8
+ scheduler: 0.27.0
- react-loadable-ssr-addon-v5-slorber@1.0.3(@docusaurus/react-loadable@6.0.0(react@19.2.8))(webpack@5.95.0(@swc/core@1.16.0)):
- dependencies:
- '@babel/runtime': 7.26.0
- react-loadable: '@docusaurus/react-loadable@6.0.0(react@19.2.8)'
- webpack: 5.95.0(@swc/core@1.16.0)
+ react-lazy-with-preload@2.2.1: {}
- react-router-config@5.1.1(react-router@5.3.4(react@19.2.8))(react@19.2.8):
+ react-reconciler@0.33.0(react@19.2.8):
dependencies:
- '@babel/runtime': 7.26.0
react: 19.2.8
- react-router: 5.3.4(react@19.2.8)
+ scheduler: 0.27.0
- react-router-dom@5.3.4(react@19.2.8):
+ react-refresh@0.18.0: {}
+
+ react-render-to-markdown@19.1.0(react@19.2.8):
dependencies:
- '@babel/runtime': 7.26.0
- history: 4.10.1
- loose-envify: 1.4.0
- prop-types: 15.8.1
- react: 19.2.8
- react-router: 5.3.4(react@19.2.8)
- tiny-invariant: 1.3.3
- tiny-warning: 1.0.3
-
- react-router@5.3.4(react@19.2.8):
- dependencies:
- '@babel/runtime': 7.26.0
- history: 4.10.1
- hoist-non-react-statics: 3.3.2
- loose-envify: 1.4.0
- path-to-regexp: 1.9.0
- prop-types: 15.8.1
react: 19.2.8
- react-is: 16.13.1
- tiny-invariant: 1.3.3
- tiny-warning: 1.0.3
+ react-reconciler: 0.33.0(react@19.2.8)
- react@19.2.8: {}
-
- readable-stream@2.3.8:
+ react-router-dom@7.18.2(react-dom@19.2.8(react@19.2.8))(react@19.2.8):
dependencies:
- core-util-is: 1.0.3
- inherits: 2.0.4
- isarray: 1.0.0
- process-nextick-args: 2.0.1
- safe-buffer: 5.1.2
- string_decoder: 1.1.1
- util-deprecate: 1.0.2
+ react: 19.2.8
+ react-dom: 19.2.8(react@19.2.8)
+ react-router: 7.18.2(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
- readable-stream@3.6.2:
+ react-router@7.18.2(react-dom@19.2.8(react@19.2.8))(react@19.2.8):
dependencies:
- inherits: 2.0.4
- string_decoder: 1.3.0
- util-deprecate: 1.0.2
+ cookie: 1.1.1
+ react: 19.2.8
+ set-cookie-parser: 2.7.2
+ optionalDependencies:
+ react-dom: 19.2.8(react@19.2.8)
- readdirp@3.6.0:
- dependencies:
- picomatch: 2.3.1
+ react@19.2.8: {}
- readdirp@5.1.1: {}
+ readdirp@5.1.1:
+ optional: true
recma-build-jsx@1.0.0:
dependencies:
- '@types/estree': 1.0.6
+ '@types/estree': 1.0.9
estree-util-build-jsx: 3.0.1
vfile: 6.0.3
- recma-jsx@1.0.0(acorn@8.14.0):
+ recma-jsx@1.0.1(acorn@8.18.0):
dependencies:
- acorn-jsx: 5.3.2(acorn@8.14.0)
+ acorn: 8.18.0
+ acorn-jsx: 5.3.2(acorn@8.18.0)
estree-util-to-js: 2.0.0
recma-parse: 1.0.0
recma-stringify: 1.0.0
unified: 11.0.5
- transitivePeerDependencies:
- - acorn
recma-parse@1.0.0:
dependencies:
- '@types/estree': 1.0.6
+ '@types/estree': 1.0.9
esast-util-from-js: 2.0.1
unified: 11.0.5
vfile: 6.0.3
recma-stringify@1.0.0:
dependencies:
- '@types/estree': 1.0.6
+ '@types/estree': 1.0.9
estree-util-to-js: 2.0.0
unified: 11.0.5
vfile: 6.0.3
- regenerate-unicode-properties@10.2.0:
- dependencies:
- regenerate: 1.4.2
-
- regenerate@1.4.2: {}
-
- regenerator-runtime@0.14.1: {}
-
- regenerator-transform@0.15.2:
- dependencies:
- '@babel/runtime': 7.26.0
+ reduce-configs@2.0.1: {}
regex-recursion@6.0.2:
dependencies:
@@ -13605,443 +4453,286 @@ snapshots:
dependencies:
regex-utilities: 2.3.0
- regexp.prototype.flags@1.5.3:
- dependencies:
- call-bind: 1.0.7
- define-properties: 1.2.1
- es-errors: 1.3.0
- set-function-name: 2.0.2
-
- regexpu-core@6.1.1:
- dependencies:
- regenerate: 1.4.2
- regenerate-unicode-properties: 10.2.0
- regjsgen: 0.8.0
- regjsparser: 0.11.1
- unicode-match-property-ecmascript: 2.0.0
- unicode-match-property-value-ecmascript: 2.2.0
-
- registry-auth-token@5.0.2:
- dependencies:
- '@pnpm/npm-conf': 2.3.1
-
- registry-url@6.0.1:
- dependencies:
- rc: 1.2.8
-
- regjsgen@0.8.0: {}
-
- regjsparser@0.11.1:
+ rehype-external-links@3.0.0:
dependencies:
- jsesc: 3.0.2
+ '@types/hast': 3.0.5
+ '@ungap/structured-clone': 1.3.3
+ hast-util-is-element: 3.0.0
+ is-absolute-url: 4.0.1
+ space-separated-tokens: 2.0.2
+ unist-util-visit: 5.1.0
rehype-raw@7.0.0:
dependencies:
- '@types/hast': 3.0.4
- hast-util-raw: 9.0.4
+ '@types/hast': 3.0.5
+ hast-util-raw: 9.1.0
vfile: 6.0.3
- rehype-recma@1.0.0:
+ rehype-recma@1.0.0(supports-color@9.4.0):
dependencies:
- '@types/estree': 1.0.6
- '@types/hast': 3.0.4
- hast-util-to-estree: 3.1.0
+ '@types/estree': 1.0.9
+ '@types/hast': 3.0.5
+ hast-util-to-estree: 3.1.3(supports-color@9.4.0)
transitivePeerDependencies:
- supports-color
- relateurl@0.2.7: {}
-
- remark-directive@3.0.0:
+ remark-cjk-friendly-gfm-strikethrough@2.3.1(@types/mdast@4.0.4)(micromark-util-types@2.0.2)(micromark@4.0.2(supports-color@9.4.0))(supports-color@9.4.0)(unified@11.0.5):
dependencies:
- '@types/mdast': 4.0.4
- mdast-util-directive: 3.0.0
- micromark-extension-directive: 3.0.2
+ mdast-util-to-markdown-cjk-friendly-gfm-strikethrough: 1.0.0(@types/mdast@4.0.4)(micromark-util-types@2.0.2)(supports-color@9.4.0)
+ micromark-extension-cjk-friendly-gfm-strikethrough: 2.0.1(micromark-util-types@2.0.2)(micromark@4.0.2(supports-color@9.4.0))
unified: 11.0.5
+ optionalDependencies:
+ '@types/mdast': 4.0.4
transitivePeerDependencies:
+ - micromark
+ - micromark-util-types
- supports-color
- remark-emoji@4.0.1:
+ remark-cjk-friendly@2.3.1(@types/mdast@4.0.4)(micromark-util-types@2.0.2)(micromark@4.0.2(supports-color@9.4.0))(unified@11.0.5):
dependencies:
- '@types/mdast': 4.0.4
- emoticon: 4.1.0
- mdast-util-find-and-replace: 3.0.1
- node-emoji: 2.1.3
+ mdast-util-to-markdown-cjk-friendly: 1.0.0(@types/mdast@4.0.4)(micromark-util-types@2.0.2)
+ micromark-extension-cjk-friendly: 2.0.1(micromark-util-types@2.0.2)(micromark@4.0.2(supports-color@9.4.0))
unified: 11.0.5
+ optionalDependencies:
+ '@types/mdast': 4.0.4
+ transitivePeerDependencies:
+ - micromark
+ - micromark-util-types
- remark-frontmatter@5.0.0:
+ remark-gfm@4.0.1(supports-color@9.4.0):
dependencies:
'@types/mdast': 4.0.4
- mdast-util-frontmatter: 2.0.1
- micromark-extension-frontmatter: 2.0.0
+ mdast-util-gfm: 3.1.0(supports-color@9.4.0)
+ micromark-extension-gfm: 3.0.0
+ remark-parse: 11.0.0(supports-color@9.4.0)
+ remark-stringify: 11.0.0
unified: 11.0.5
transitivePeerDependencies:
- supports-color
- remark-gfm@4.0.0:
+ remark-mdc@3.11.1(supports-color@9.4.0):
dependencies:
'@types/mdast': 4.0.4
- mdast-util-gfm: 3.0.0
- micromark-extension-gfm: 3.0.0
- remark-parse: 11.0.0
- remark-stringify: 11.0.0
+ '@types/unist': 3.0.3
+ flat: 6.0.1
+ mdast-util-from-markdown: 2.0.3(supports-color@9.4.0)
+ mdast-util-to-markdown: 2.1.2
+ micromark: 4.0.2(supports-color@9.4.0)
+ micromark-core-commonmark: 2.0.3
+ micromark-factory-space: 2.0.1
+ micromark-factory-whitespace: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-types: 2.0.2
+ parse-entities: 4.0.2
+ scule: 1.3.0
+ stringify-entities: 4.0.4
unified: 11.0.5
+ unist-util-visit: 5.1.0
+ unist-util-visit-parents: 6.0.2
+ yaml: 2.9.0
transitivePeerDependencies:
- supports-color
- remark-mdx@3.0.1:
+ remark-mdx@3.1.1(supports-color@9.4.0):
dependencies:
- mdast-util-mdx: 3.0.0
+ mdast-util-mdx: 3.0.0(supports-color@9.4.0)
micromark-extension-mdxjs: 3.0.0
transitivePeerDependencies:
- supports-color
- remark-parse@11.0.0:
+ remark-parse@11.0.0(supports-color@9.4.0):
dependencies:
'@types/mdast': 4.0.4
- mdast-util-from-markdown: 2.0.1
- micromark-util-types: 2.0.0
+ mdast-util-from-markdown: 2.0.3(supports-color@9.4.0)
+ micromark-util-types: 2.0.2
unified: 11.0.5
transitivePeerDependencies:
- supports-color
- remark-rehype@11.1.1:
+ remark-rehype@11.1.2:
dependencies:
- '@types/hast': 3.0.4
+ '@types/hast': 3.0.5
'@types/mdast': 4.0.4
- mdast-util-to-hast: 13.2.0
+ mdast-util-to-hast: 13.2.1
unified: 11.0.5
vfile: 6.0.3
remark-stringify@11.0.0:
dependencies:
'@types/mdast': 4.0.4
- mdast-util-to-markdown: 2.1.0
+ mdast-util-to-markdown: 2.1.2
unified: 11.0.5
- renderkid@3.0.0:
- dependencies:
- css-select: 4.3.0
- dom-converter: 0.2.0
- htmlparser2: 6.1.0
- lodash: 4.17.21
- strip-ansi: 6.0.1
-
- require-from-string@2.0.2: {}
-
- require-like@0.1.2: {}
-
- requires-port@1.0.0: {}
-
- resolve-alpn@1.2.1: {}
-
resolve-from@4.0.0: {}
- resolve-package-path@4.0.3:
- dependencies:
- path-root: 0.1.1
-
- resolve-pathname@3.0.0: {}
-
- resolve@1.22.8:
- dependencies:
- is-core-module: 2.15.1
- path-parse: 1.0.7
- supports-preserve-symlinks-flag: 1.0.0
+ robust-predicates@3.0.3: {}
- responselike@3.0.0:
+ rspress-plugin-devkit@1.0.0(@rspress/core@2.0.21(@rspack/core@2.1.10(@swc/helpers@0.5.23))(micromark-util-types@2.0.2)(micromark@4.0.2(supports-color@9.4.0))(supports-color@9.4.0))(supports-color@9.4.0):
dependencies:
- lowercase-keys: 3.0.0
-
- retry@0.13.1: {}
-
- reusify@1.0.4: {}
-
- robust-predicates@3.0.2: {}
+ '@rspress/core': 2.0.21(@rspack/core@2.1.10(@swc/helpers@0.5.23))(micromark-util-types@2.0.2)(micromark@4.0.2(supports-color@9.4.0))(supports-color@9.4.0)
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 3.0.5
+ '@types/mdast': 4.0.4
+ '@types/node': 25.9.5
+ clsx: 2.1.1
+ lodash-es: 4.18.1
+ mdast-util-from-markdown: 2.0.3(supports-color@9.4.0)
+ mdast-util-mdx-jsx: 3.2.0(supports-color@9.4.0)
+ mdast-util-mdxjs-esm: 2.0.1(supports-color@9.4.0)
+ mdast-util-to-markdown: 2.1.2
+ mdast-util-to-string: 4.0.0
+ remark-mdc: 3.11.1(supports-color@9.4.0)
+ ts-morph: 27.0.2
+ unified: 11.0.5
+ unist-util-visit: 5.1.0
+ unist-util-visit-parents: 6.0.2
+ util-ts-types: 1.0.0
+ vfile: 6.0.3
+ vfile-reporter: 8.1.1
+ transitivePeerDependencies:
+ - supports-color
- roughjs@4.6.6:
+ rspress-plugin-file-tree@1.0.5(@rspress/core@2.0.21(@rspack/core@2.1.10(@swc/helpers@0.5.23))(micromark-util-types@2.0.2)(micromark@4.0.2(supports-color@9.4.0))(supports-color@9.4.0))(supports-color@9.4.0):
dependencies:
- hachure-fill: 0.5.2
- path-data-parser: 0.1.0
- points-on-curve: 0.2.0
- points-on-path: 0.2.1
+ '@rspress/core': 2.0.21(@rspack/core@2.1.10(@swc/helpers@0.5.23))(micromark-util-types@2.0.2)(micromark@4.0.2(supports-color@9.4.0))(supports-color@9.4.0)
+ rspress-plugin-devkit: 1.0.0(@rspress/core@2.0.21(@rspack/core@2.1.10(@swc/helpers@0.5.23))(micromark-util-types@2.0.2)(micromark@4.0.2(supports-color@9.4.0))(supports-color@9.4.0))(supports-color@9.4.0)
+ transitivePeerDependencies:
+ - supports-color
- rtlcss@4.3.0:
+ rspress-plugin-google-analytics@1.0.0(@rspress/core@2.0.21(@rspack/core@2.1.10(@swc/helpers@0.5.23))(micromark-util-types@2.0.2)(micromark@4.0.2(supports-color@9.4.0))(supports-color@9.4.0))(supports-color@9.4.0):
dependencies:
- escalade: 3.2.0
- picocolors: 1.1.1
- postcss: 8.5.6
- strip-json-comments: 3.1.1
-
- run-applescript@7.1.0: {}
+ '@rspress/core': 2.0.21(@rspack/core@2.1.10(@swc/helpers@0.5.23))(micromark-util-types@2.0.2)(micromark@4.0.2(supports-color@9.4.0))(supports-color@9.4.0)
+ rspress-plugin-devkit: 1.0.0(@rspress/core@2.0.21(@rspack/core@2.1.10(@swc/helpers@0.5.23))(micromark-util-types@2.0.2)(micromark@4.0.2(supports-color@9.4.0))(supports-color@9.4.0))(supports-color@9.4.0)
+ transitivePeerDependencies:
+ - supports-color
- run-parallel@1.2.0:
+ rspress-plugin-mermaid@1.0.1(@rspress/core@2.0.21(@rspack/core@2.1.10(@swc/helpers@0.5.23))(micromark-util-types@2.0.2)(micromark@4.0.2(supports-color@9.4.0))(supports-color@9.4.0))(supports-color@9.4.0):
dependencies:
- queue-microtask: 1.2.3
+ '@rspress/core': 2.0.21(@rspack/core@2.1.10(@swc/helpers@0.5.23))(micromark-util-types@2.0.2)(micromark@4.0.2(supports-color@9.4.0))(supports-color@9.4.0)
+ mermaid: 10.9.8(supports-color@9.4.0)
+ rspress-plugin-devkit: 1.0.0(@rspress/core@2.0.21(@rspack/core@2.1.10(@swc/helpers@0.5.23))(micromark-util-types@2.0.2)(micromark@4.0.2(supports-color@9.4.0))(supports-color@9.4.0))(supports-color@9.4.0)
+ transitivePeerDependencies:
+ - supports-color
rw@1.3.3: {}
rxjs@7.8.2:
dependencies:
- tslib: 2.8.0
-
- safe-array-concat@1.1.2:
- dependencies:
- call-bind: 1.0.7
- get-intrinsic: 1.2.4
- has-symbols: 1.0.3
- isarray: 2.0.5
-
- safe-buffer@5.1.2: {}
+ tslib: 2.8.1
- safe-buffer@5.2.1: {}
-
- safe-regex-test@1.0.3:
+ sade@1.8.1:
dependencies:
- call-bind: 1.0.7
- es-errors: 1.3.0
- is-regex: 1.1.4
+ mri: 1.2.0
safer-buffer@2.1.2: {}
- sass-embedded-all-unknown@1.102.0:
+ sass-embedded-all-unknown@1.103.1:
dependencies:
- sass: 1.102.0
+ sass: 1.103.1
optional: true
- sass-embedded-android-arm64@1.102.0:
+ sass-embedded-android-arm64@1.103.1:
optional: true
- sass-embedded-android-arm@1.102.0:
+ sass-embedded-android-arm@1.103.1:
optional: true
- sass-embedded-android-riscv64@1.102.0:
+ sass-embedded-android-riscv64@1.103.1:
optional: true
- sass-embedded-android-x64@1.102.0:
+ sass-embedded-android-x64@1.103.1:
optional: true
- sass-embedded-darwin-arm64@1.102.0:
+ sass-embedded-darwin-arm64@1.103.1:
optional: true
- sass-embedded-darwin-x64@1.102.0:
+ sass-embedded-darwin-x64@1.103.1:
optional: true
- sass-embedded-linux-arm64@1.102.0:
+ sass-embedded-linux-arm64@1.103.1:
optional: true
- sass-embedded-linux-arm@1.102.0:
+ sass-embedded-linux-arm@1.103.1:
optional: true
- sass-embedded-linux-musl-arm64@1.102.0:
+ sass-embedded-linux-musl-arm64@1.103.1:
optional: true
- sass-embedded-linux-musl-arm@1.102.0:
+ sass-embedded-linux-musl-arm@1.103.1:
optional: true
- sass-embedded-linux-musl-riscv64@1.102.0:
+ sass-embedded-linux-musl-riscv64@1.103.1:
optional: true
- sass-embedded-linux-musl-x64@1.102.0:
+ sass-embedded-linux-musl-x64@1.103.1:
optional: true
- sass-embedded-linux-riscv64@1.102.0:
+ sass-embedded-linux-riscv64@1.103.1:
optional: true
- sass-embedded-linux-x64@1.102.0:
+ sass-embedded-linux-x64@1.103.1:
optional: true
- sass-embedded-unknown-all@1.102.0:
+ sass-embedded-unknown-all@1.103.1:
dependencies:
- sass: 1.102.0
+ sass: 1.103.1
optional: true
- sass-embedded-win32-arm64@1.102.0:
+ sass-embedded-win32-arm64@1.103.1:
optional: true
- sass-embedded-win32-x64@1.102.0:
+ sass-embedded-win32-x64@1.103.1:
optional: true
- sass-embedded@1.102.0:
+ sass-embedded@1.103.1:
dependencies:
- '@bufbuild/protobuf': 2.10.2
+ '@bufbuild/protobuf': 2.14.0
colorjs.io: 0.7.1
- immutable: 5.1.5
+ immutable: 5.1.9
rxjs: 7.8.2
supports-color: 8.1.1
sync-child-process: 1.0.2
varint: 6.0.0
optionalDependencies:
- sass-embedded-all-unknown: 1.102.0
- sass-embedded-android-arm: 1.102.0
- sass-embedded-android-arm64: 1.102.0
- sass-embedded-android-riscv64: 1.102.0
- sass-embedded-android-x64: 1.102.0
- sass-embedded-darwin-arm64: 1.102.0
- sass-embedded-darwin-x64: 1.102.0
- sass-embedded-linux-arm: 1.102.0
- sass-embedded-linux-arm64: 1.102.0
- sass-embedded-linux-musl-arm: 1.102.0
- sass-embedded-linux-musl-arm64: 1.102.0
- sass-embedded-linux-musl-riscv64: 1.102.0
- sass-embedded-linux-musl-x64: 1.102.0
- sass-embedded-linux-riscv64: 1.102.0
- sass-embedded-linux-x64: 1.102.0
- sass-embedded-unknown-all: 1.102.0
- sass-embedded-win32-arm64: 1.102.0
- sass-embedded-win32-x64: 1.102.0
-
- sass-loader@16.0.6(@rspack/core@1.7.11)(sass-embedded@1.102.0)(sass@1.102.0)(webpack@5.95.0(@swc/core@1.16.0)):
- dependencies:
- neo-async: 2.6.2
- optionalDependencies:
- '@rspack/core': 1.7.11
- sass: 1.102.0
- sass-embedded: 1.102.0
- webpack: 5.95.0(@swc/core@1.16.0)
-
- sass@1.102.0:
+ sass-embedded-all-unknown: 1.103.1
+ sass-embedded-android-arm: 1.103.1
+ sass-embedded-android-arm64: 1.103.1
+ sass-embedded-android-riscv64: 1.103.1
+ sass-embedded-android-x64: 1.103.1
+ sass-embedded-darwin-arm64: 1.103.1
+ sass-embedded-darwin-x64: 1.103.1
+ sass-embedded-linux-arm: 1.103.1
+ sass-embedded-linux-arm64: 1.103.1
+ sass-embedded-linux-musl-arm: 1.103.1
+ sass-embedded-linux-musl-arm64: 1.103.1
+ sass-embedded-linux-musl-riscv64: 1.103.1
+ sass-embedded-linux-musl-x64: 1.103.1
+ sass-embedded-linux-riscv64: 1.103.1
+ sass-embedded-linux-x64: 1.103.1
+ sass-embedded-unknown-all: 1.103.1
+ sass-embedded-win32-arm64: 1.103.1
+ sass-embedded-win32-x64: 1.103.1
+
+ sass@1.103.1:
dependencies:
chokidar: 5.0.0
- immutable: 5.1.5
+ immutable: 5.1.9
source-map-js: 1.2.1
optionalDependencies:
- '@parcel/watcher': 2.5.1
-
- sax@1.2.4: {}
-
- sax@1.4.1: {}
+ '@parcel/watcher': 2.6.0
+ optional: true
scheduler@0.27.0: {}
- schema-dts@1.1.5: {}
-
- schema-utils@3.3.0:
- dependencies:
- '@types/json-schema': 7.0.15
- ajv: 6.12.6
- ajv-keywords: 3.5.2(ajv@6.12.6)
-
- schema-utils@4.2.0:
- dependencies:
- '@types/json-schema': 7.0.15
- ajv: 8.17.1
- ajv-formats: 2.1.1(ajv@8.17.1)
- ajv-keywords: 5.1.0(ajv@8.17.1)
-
- search-insights@2.17.1: {}
-
- section-matter@1.0.0:
+ scroll-into-view-if-needed@3.1.0:
dependencies:
- extend-shallow: 2.0.1
- kind-of: 6.0.3
+ compute-scroll-into-view: 3.1.1
- select-hose@2.0.0: {}
-
- selfsigned@2.4.1:
- dependencies:
- '@types/node-forge': 1.3.11
- node-forge: 1.3.1
-
- semver-diff@4.0.0:
- dependencies:
- semver: 7.6.3
+ scule@1.3.0: {}
semver@6.3.1: {}
- semver@7.6.3: {}
-
- send@0.19.0:
- dependencies:
- debug: 2.6.9
- depd: 2.0.0
- destroy: 1.2.0
- encodeurl: 1.0.2
- escape-html: 1.0.3
- etag: 1.8.1
- fresh: 0.5.2
- http-errors: 2.0.0
- mime: 1.6.0
- ms: 2.1.3
- on-finished: 2.4.1
- range-parser: 1.2.1
- statuses: 2.0.1
- transitivePeerDependencies:
- - supports-color
-
- serialize-javascript@6.0.2:
- dependencies:
- randombytes: 2.1.0
-
- seroval-plugins@1.1.1(seroval@1.1.1):
- dependencies:
- seroval: 1.1.1
-
- seroval@1.1.1: {}
-
- serve-handler@6.1.7:
- dependencies:
- bytes: 3.0.0
- content-disposition: 0.5.2
- mime-types: 2.1.18
- minimatch: 3.1.5
- path-is-inside: 1.0.2
- path-to-regexp: 3.3.0
- range-parser: 1.2.0
-
- serve-index@1.9.1:
- dependencies:
- accepts: 1.3.8
- batch: 0.6.1
- debug: 2.6.9
- escape-html: 1.0.3
- http-errors: 1.6.3
- mime-types: 2.1.35
- parseurl: 1.3.3
- transitivePeerDependencies:
- - supports-color
-
- serve-static@1.16.2:
- dependencies:
- encodeurl: 2.0.0
- escape-html: 1.0.3
- parseurl: 1.3.3
- send: 0.19.0
- transitivePeerDependencies:
- - supports-color
-
- set-function-length@1.2.2:
- dependencies:
- define-data-property: 1.1.4
- es-errors: 1.3.0
- function-bind: 1.1.2
- get-intrinsic: 1.2.4
- gopd: 1.0.1
- has-property-descriptors: 1.0.2
-
- set-function-name@2.0.2:
- dependencies:
- define-data-property: 1.1.4
- es-errors: 1.3.0
- functions-have-names: 1.2.3
- has-property-descriptors: 1.0.2
-
- setprototypeof@1.1.0: {}
-
- setprototypeof@1.2.0: {}
-
- shallow-clone@3.0.1:
- dependencies:
- kind-of: 6.0.3
-
- shallowequal@1.1.0: {}
-
- shebang-command@2.0.0:
- dependencies:
- shebang-regex: 3.0.0
-
- shebang-regex@3.0.0: {}
-
- shell-quote@1.8.1: {}
+ set-cookie-parser@2.7.2: {}
shiki@4.4.3:
dependencies:
@@ -14054,396 +4745,89 @@ snapshots:
'@shikijs/vscode-textmate': 10.0.2
'@types/hast': 3.0.5
- side-channel-list@1.0.0:
- dependencies:
- es-errors: 1.3.0
- object-inspect: 1.13.4
-
- side-channel-map@1.0.1:
- dependencies:
- call-bound: 1.0.4
- es-errors: 1.3.0
- get-intrinsic: 1.3.0
- object-inspect: 1.13.4
-
- side-channel-weakmap@1.0.2:
- dependencies:
- call-bound: 1.0.4
- es-errors: 1.3.0
- get-intrinsic: 1.3.0
- object-inspect: 1.13.4
- side-channel-map: 1.0.1
-
- side-channel@1.0.6:
- dependencies:
- call-bind: 1.0.7
- es-errors: 1.3.0
- get-intrinsic: 1.2.4
- object-inspect: 1.13.2
-
- side-channel@1.1.0:
- dependencies:
- es-errors: 1.3.0
- object-inspect: 1.13.4
- side-channel-list: 1.0.0
- side-channel-map: 1.0.1
- side-channel-weakmap: 1.0.2
-
- signal-exit@3.0.7: {}
-
- sirv@2.0.4:
- dependencies:
- '@polka/url': 1.0.0-next.28
- mrmime: 2.0.0
- totalist: 3.0.1
-
- sisteransi@1.0.5: {}
-
- sitemap@7.1.2:
- dependencies:
- '@types/node': 17.0.45
- '@types/sax': 1.2.7
- arg: 5.0.2
- sax: 1.4.1
-
- skin-tone@2.0.0:
- dependencies:
- unicode-emoji-modifier-base: 1.0.0
-
- slash@3.0.0: {}
-
- slash@4.0.0: {}
-
snake-case@3.0.4:
dependencies:
dot-case: 3.0.4
- tslib: 2.8.0
-
- sockjs@0.3.24:
- dependencies:
- faye-websocket: 0.11.4
- uuid: 8.3.2
- websocket-driver: 0.7.4
-
- solid-js@1.9.5:
- dependencies:
- csstype: 3.1.3
- seroval: 1.1.1
- seroval-plugins: 1.1.1(seroval@1.1.1)
-
- sort-css-media-queries@2.2.0: {}
+ tslib: 2.8.1
source-map-js@1.2.1: {}
- source-map-support@0.5.21:
- dependencies:
- buffer-from: 1.1.2
- source-map: 0.6.1
-
- source-map@0.6.1: {}
-
- source-map@0.7.4: {}
+ source-map@0.7.6: {}
space-separated-tokens@2.0.2: {}
- spdy-transport@3.0.0:
- dependencies:
- debug: 4.3.7
- detect-node: 2.1.0
- hpack.js: 2.1.6
- obuf: 1.1.2
- readable-stream: 3.6.2
- wbuf: 1.7.3
- transitivePeerDependencies:
- - supports-color
-
- spdy@4.0.2:
- dependencies:
- debug: 4.3.7
- handle-thing: 2.0.1
- http-deceiver: 1.2.7
- select-hose: 2.0.0
- spdy-transport: 3.0.0
- transitivePeerDependencies:
- - supports-color
-
- sprintf-js@1.0.3: {}
-
- srcset@4.0.0: {}
-
- stable@0.1.8: {}
-
- statuses@1.5.0: {}
-
- statuses@2.0.1: {}
-
- std-env@3.7.0: {}
-
- string-width@4.2.3:
- dependencies:
- emoji-regex: 8.0.0
- is-fullwidth-code-point: 3.0.0
- strip-ansi: 6.0.1
-
- string-width@5.1.2:
+ string-width@6.1.0:
dependencies:
eastasianwidth: 0.2.0
- emoji-regex: 9.2.2
- strip-ansi: 7.1.0
-
- string.prototype.trim@1.2.9:
- dependencies:
- call-bind: 1.0.7
- define-properties: 1.2.1
- es-abstract: 1.23.3
- es-object-atoms: 1.0.0
-
- string.prototype.trimend@1.0.8:
- dependencies:
- call-bind: 1.0.7
- define-properties: 1.2.1
- es-object-atoms: 1.0.0
-
- string.prototype.trimstart@1.0.8:
- dependencies:
- call-bind: 1.0.7
- define-properties: 1.2.1
- es-object-atoms: 1.0.0
-
- string_decoder@1.1.1:
- dependencies:
- safe-buffer: 5.1.2
-
- string_decoder@1.3.0:
- dependencies:
- safe-buffer: 5.2.1
+ emoji-regex: 10.6.0
+ strip-ansi: 7.2.0
stringify-entities@4.0.4:
dependencies:
character-entities-html4: 2.1.0
character-entities-legacy: 3.0.0
- stringify-object@3.3.0:
- dependencies:
- get-own-enumerable-property-symbols: 3.0.2
- is-obj: 1.0.1
- is-regexp: 1.0.0
-
- strip-ansi@6.0.1:
- dependencies:
- ansi-regex: 5.0.1
-
- strip-ansi@7.1.0:
- dependencies:
- ansi-regex: 6.1.0
-
- strip-bom-string@1.0.0: {}
-
- strip-final-newline@2.0.0: {}
-
- strip-json-comments@2.0.1: {}
-
- strip-json-comments@3.1.1: {}
-
- strip-json-comments@4.0.0: {}
-
- style-to-object@0.4.4:
- dependencies:
- inline-style-parser: 0.1.1
-
- style-to-object@1.0.8:
+ strip-ansi@7.2.0:
dependencies:
- inline-style-parser: 0.2.4
+ ansi-regex: 6.3.0
- stylehacks@6.1.1(postcss@8.5.6):
+ style-to-js@1.1.21:
dependencies:
- browserslist: 4.28.1
- postcss: 8.5.6
- postcss-selector-parser: 6.1.2
+ style-to-object: 1.0.14
- stylis@4.3.6: {}
-
- supports-color@5.5.0:
+ style-to-object@1.0.14:
dependencies:
- has-flag: 3.0.0
+ inline-style-parser: 0.2.7
- supports-color@7.2.0:
- dependencies:
- has-flag: 4.0.0
+ stylis@4.4.0: {}
supports-color@8.1.1:
dependencies:
has-flag: 4.0.0
- supports-preserve-symlinks-flag@1.0.0: {}
-
- svg-parser@2.0.4: {}
-
- svgo@1.3.2:
- dependencies:
- chalk: 2.4.2
- coa: 2.0.2
- css-select: 2.1.0
- css-select-base-adapter: 0.1.1
- css-tree: 1.0.0-alpha.37
- csso: 4.2.0
- js-yaml: 3.14.1
- mkdirp: 0.5.6
- object.values: 1.2.0
- sax: 1.2.4
- stable: 0.1.8
- unquote: 1.1.1
- util.promisify: 1.0.1
-
- svgo@3.3.2:
- dependencies:
- '@trysound/sax': 0.2.0
- commander: 7.2.0
- css-select: 5.1.0
- css-tree: 2.3.1
- css-what: 6.1.0
- csso: 5.0.5
- picocolors: 1.1.1
+ supports-color@9.4.0: {}
- swc-loader@0.2.6(@swc/core@1.16.0)(webpack@5.95.0(@swc/core@1.16.0)):
- dependencies:
- '@swc/core': 1.16.0
- '@swc/counter': 0.1.3
- webpack: 5.95.0(@swc/core@1.16.0)
+ svg-parser@2.1.0: {}
sync-child-process@1.0.2:
dependencies:
- sync-message-port: 1.1.3
-
- sync-message-port@1.1.3: {}
-
- tapable@2.2.1: {}
-
- terser-webpack-plugin@5.3.10(@swc/core@1.16.0)(webpack@5.95.0(@swc/core@1.16.0)):
- dependencies:
- '@jridgewell/trace-mapping': 0.3.25
- jest-worker: 27.5.1
- schema-utils: 3.3.0
- serialize-javascript: 6.0.2
- terser: 5.36.0
- webpack: 5.95.0(@swc/core@1.16.0)
- optionalDependencies:
- '@swc/core': 1.16.0
-
- terser@5.36.0:
- dependencies:
- '@jridgewell/source-map': 0.3.6
- acorn: 8.14.0
- commander: 2.20.3
- source-map-support: 0.5.21
-
- thingies@2.5.0(tslib@2.8.0):
- dependencies:
- tslib: 2.8.0
+ sync-message-port: 1.2.0
- thunky@1.1.0: {}
+ sync-message-port@1.2.0: {}
- tiny-invariant@1.3.3: {}
+ tinyexec@1.3.0: {}
- tiny-warning@1.0.3: {}
-
- tinyexec@0.3.1: {}
-
- tinypool@1.0.2: {}
-
- to-regex-range@5.0.1:
+ tinyglobby@0.2.17:
dependencies:
- is-number: 7.0.0
-
- toidentifier@1.0.1: {}
+ fdir: 6.5.0(picomatch@4.0.7)
+ picomatch: 4.0.7
- totalist@3.0.1: {}
-
- tree-dump@1.1.0(tslib@2.8.0):
- dependencies:
- tslib: 2.8.0
+ toggle-selection@1.0.6: {}
trim-lines@3.0.1: {}
trough@2.2.0: {}
- ts-dedent@2.2.0: {}
-
- tslib@2.8.0: {}
-
- type-fest@1.4.0: {}
-
- type-fest@2.19.0: {}
-
- type-is@1.6.18:
- dependencies:
- media-typer: 0.3.0
- mime-types: 2.1.35
-
- typed-array-buffer@1.0.2:
- dependencies:
- call-bind: 1.0.7
- es-errors: 1.3.0
- is-typed-array: 1.1.13
-
- typed-array-byte-length@1.0.1:
- dependencies:
- call-bind: 1.0.7
- for-each: 0.3.3
- gopd: 1.0.1
- has-proto: 1.0.3
- is-typed-array: 1.1.13
-
- typed-array-byte-offset@1.0.2:
- dependencies:
- available-typed-arrays: 1.0.7
- call-bind: 1.0.7
- for-each: 0.3.3
- gopd: 1.0.1
- has-proto: 1.0.3
- is-typed-array: 1.1.13
-
- typed-array-length@1.0.6:
- dependencies:
- call-bind: 1.0.7
- for-each: 0.3.3
- gopd: 1.0.1
- has-proto: 1.0.3
- is-typed-array: 1.1.13
- possible-typed-array-names: 1.0.0
+ ts-dedent@2.3.0: {}
- typedarray-to-buffer@3.1.5:
+ ts-morph@27.0.2:
dependencies:
- is-typedarray: 1.0.0
-
- typescript@5.6.3:
- optional: true
-
- uc.micro@1.0.6: {}
+ '@ts-morph/common': 0.28.1
+ code-block-writer: 13.0.3
- ufo@1.5.4: {}
+ tslib@2.8.1: {}
- unbox-primitive@1.0.2:
- dependencies:
- call-bind: 1.0.7
- has-bigints: 1.0.2
- has-symbols: 1.0.3
- which-boxed-primitive: 1.0.2
+ typescript@6.0.3: {}
- undici-types@6.19.8: {}
+ ufo@1.6.4: {}
- unicode-canonical-property-names-ecmascript@2.0.0: {}
+ undici-types@6.21.0: {}
- unicode-emoji-modifier-base@1.0.0: {}
+ undici-types@7.24.6: {}
- unicode-match-property-ecmascript@2.0.0:
+ unhead@2.1.17:
dependencies:
- unicode-canonical-property-names-ecmascript: 2.0.0
- unicode-property-aliases-ecmascript: 2.1.0
-
- unicode-match-property-value-ecmascript@2.2.0: {}
-
- unicode-property-aliases-ecmascript@2.1.0: {}
+ hookable: 6.1.1
unified@11.0.5:
dependencies:
@@ -14455,11 +4839,7 @@ snapshots:
trough: 2.2.0
vfile: 6.0.3
- unique-string@3.0.0:
- dependencies:
- crypto-random-string: 4.0.0
-
- unist-util-is@6.0.0:
+ unist-util-is@6.0.1:
dependencies:
'@types/unist': 3.0.3
@@ -14471,328 +4851,109 @@ snapshots:
dependencies:
'@types/unist': 3.0.3
- unist-util-stringify-position@4.0.0:
+ unist-util-stringify-position@3.0.3:
dependencies:
- '@types/unist': 3.0.3
+ '@types/unist': 2.0.11
- unist-util-visit-parents@6.0.1:
+ unist-util-stringify-position@4.0.0:
dependencies:
'@types/unist': 3.0.3
- unist-util-is: 6.0.0
- unist-util-visit@5.1.0:
+ unist-util-visit-children@3.0.0:
dependencies:
'@types/unist': 3.0.3
- unist-util-is: 6.0.0
- unist-util-visit-parents: 6.0.1
-
- universalify@2.0.1: {}
-
- unpipe@1.0.0: {}
-
- unquote@1.1.1: {}
-
- update-browserslist-db@1.1.1(browserslist@4.24.2):
- dependencies:
- browserslist: 4.24.2
- escalade: 3.2.0
- picocolors: 1.1.1
-
- update-browserslist-db@1.2.3(browserslist@4.28.1):
- dependencies:
- browserslist: 4.28.1
- escalade: 3.2.0
- picocolors: 1.1.1
- update-notifier@6.0.2:
+ unist-util-visit-parents@6.0.2:
dependencies:
- boxen: 7.1.1
- chalk: 5.3.0
- configstore: 6.0.0
- has-yarn: 3.0.0
- import-lazy: 4.0.0
- is-ci: 3.0.1
- is-installed-globally: 0.4.0
- is-npm: 6.0.0
- is-yarn-global: 0.4.1
- latest-version: 7.0.0
- pupa: 3.1.0
- semver: 7.6.3
- semver-diff: 4.0.0
- xdg-basedir: 5.1.0
+ '@types/unist': 3.0.3
+ unist-util-is: 6.0.1
- uri-js@4.4.1:
+ unist-util-visit@5.1.0:
dependencies:
- punycode: 2.3.1
+ '@types/unist': 3.0.3
+ unist-util-is: 6.0.1
+ unist-util-visit-parents: 6.0.2
- url-loader@4.1.1(file-loader@6.2.0(webpack@5.95.0(@swc/core@1.16.0)))(webpack@5.95.0(@swc/core@1.16.0)):
+ unplugin-icons@23.0.1(@svgr/core@8.1.0(supports-color@9.4.0)(typescript@6.0.3)):
dependencies:
- loader-utils: 2.0.4
- mime-types: 2.1.35
- schema-utils: 3.3.0
- webpack: 5.95.0(@swc/core@1.16.0)
+ '@antfu/install-pkg': 1.1.0
+ '@iconify/utils': 3.1.4
+ local-pkg: 1.2.1
+ obug: 2.1.4
+ unplugin: 2.3.11
optionalDependencies:
- file-loader: 6.2.0(webpack@5.95.0(@swc/core@1.16.0))
-
- util-deprecate@1.0.2: {}
+ '@svgr/core': 8.1.0(supports-color@9.4.0)(typescript@6.0.3)
- util.promisify@1.0.1:
+ unplugin@2.3.11:
dependencies:
- define-properties: 1.2.1
- es-abstract: 1.23.3
- has-symbols: 1.0.3
- object.getownpropertydescriptors: 2.1.8
+ '@jridgewell/remapping': 2.3.5
+ acorn: 8.18.0
+ picomatch: 4.0.7
+ webpack-virtual-modules: 0.6.2
- utila@0.4.0: {}
-
- utility-types@3.11.0: {}
-
- utils-merge@1.0.1: {}
+ update-browserslist-db@1.3.1(browserslist@4.28.8):
+ dependencies:
+ browserslist: 4.28.8
+ escalade: 3.2.0
+ picocolors: 1.1.1
- uuid@11.1.0: {}
+ util-ts-types@1.0.0: {}
- uuid@8.3.2: {}
+ uuid@14.0.2: {}
- validate-peer-dependencies@2.2.0:
+ uvu@0.5.6:
dependencies:
- resolve-package-path: 4.0.3
- semver: 7.6.3
-
- value-equal@1.0.1: {}
+ dequal: 2.0.3
+ diff: 5.2.2
+ kleur: 4.1.5
+ sade: 1.8.1
varint@6.0.0: {}
- vary@1.1.2: {}
-
vfile-location@5.0.3:
dependencies:
'@types/unist': 3.0.3
vfile: 6.0.3
- vfile-message@4.0.2:
+ vfile-message@4.0.3:
dependencies:
'@types/unist': 3.0.3
unist-util-stringify-position: 4.0.0
- vfile@6.0.3:
- dependencies:
- '@types/unist': 3.0.3
- vfile-message: 4.0.2
-
- vscode-jsonrpc@8.2.0: {}
-
- vscode-languageserver-protocol@3.17.5:
+ vfile-reporter@8.1.1:
dependencies:
- vscode-jsonrpc: 8.2.0
- vscode-languageserver-types: 3.17.5
-
- vscode-languageserver-textdocument@1.0.12: {}
-
- vscode-languageserver-types@3.17.5: {}
+ '@types/supports-color': 8.1.3
+ string-width: 6.1.0
+ supports-color: 9.4.0
+ unist-util-stringify-position: 4.0.0
+ vfile: 6.0.3
+ vfile-message: 4.0.3
+ vfile-sort: 4.0.0
+ vfile-statistics: 3.0.0
- vscode-languageserver@9.0.1:
+ vfile-sort@4.0.0:
dependencies:
- vscode-languageserver-protocol: 3.17.5
-
- vscode-uri@3.0.8: {}
+ vfile: 6.0.3
+ vfile-message: 4.0.3
- watchpack@2.4.2:
+ vfile-statistics@3.0.0:
dependencies:
- glob-to-regexp: 0.4.1
- graceful-fs: 4.2.11
+ vfile: 6.0.3
+ vfile-message: 4.0.3
- wbuf@1.7.3:
+ vfile@6.0.3:
dependencies:
- minimalistic-assert: 1.0.1
+ '@types/unist': 3.0.3
+ vfile-message: 4.0.3
web-namespaces@2.0.1: {}
- webpack-bundle-analyzer@4.10.2:
- dependencies:
- '@discoveryjs/json-ext': 0.5.7
- acorn: 8.14.0
- acorn-walk: 8.3.4
- commander: 7.2.0
- debounce: 1.2.1
- escape-string-regexp: 4.0.0
- gzip-size: 6.0.0
- html-escaper: 2.0.2
- opener: 1.5.2
- picocolors: 1.1.1
- sirv: 2.0.4
- ws: 7.5.10
- transitivePeerDependencies:
- - bufferutil
- - utf-8-validate
-
- webpack-dev-middleware@7.4.5(webpack@5.95.0(@swc/core@1.16.0)):
- dependencies:
- colorette: 2.0.20
- memfs: 4.51.1
- mime-types: 3.0.2
- on-finished: 2.4.1
- range-parser: 1.2.1
- schema-utils: 4.2.0
- optionalDependencies:
- webpack: 5.95.0(@swc/core@1.16.0)
-
- webpack-dev-server@5.2.2(webpack@5.95.0(@swc/core@1.16.0)):
- dependencies:
- '@types/bonjour': 3.5.13
- '@types/connect-history-api-fallback': 1.5.4
- '@types/express': 4.17.21
- '@types/express-serve-static-core': 4.19.6
- '@types/serve-index': 1.9.4
- '@types/serve-static': 1.15.7
- '@types/sockjs': 0.3.36
- '@types/ws': 8.5.12
- ansi-html-community: 0.0.8
- bonjour-service: 1.2.1
- chokidar: 3.6.0
- colorette: 2.0.20
- compression: 1.7.4
- connect-history-api-fallback: 2.0.0
- express: 4.22.1
- graceful-fs: 4.2.11
- http-proxy-middleware: 2.0.9(@types/express@4.17.21)
- ipaddr.js: 2.2.0
- launch-editor: 2.9.1
- open: 10.2.0
- p-retry: 6.2.1
- schema-utils: 4.2.0
- selfsigned: 2.4.1
- serve-index: 1.9.1
- sockjs: 0.3.24
- spdy: 4.0.2
- webpack-dev-middleware: 7.4.5(webpack@5.95.0(@swc/core@1.16.0))
- ws: 8.18.0
- optionalDependencies:
- webpack: 5.95.0(@swc/core@1.16.0)
- transitivePeerDependencies:
- - bufferutil
- - debug
- - supports-color
- - utf-8-validate
-
- webpack-merge@5.10.0:
- dependencies:
- clone-deep: 4.0.1
- flat: 5.0.2
- wildcard: 2.0.1
-
- webpack-merge@6.0.1:
- dependencies:
- clone-deep: 4.0.1
- flat: 5.0.2
- wildcard: 2.0.1
-
- webpack-sources@3.2.3: {}
-
- webpack@5.95.0(@swc/core@1.16.0):
- dependencies:
- '@types/estree': 1.0.6
- '@webassemblyjs/ast': 1.12.1
- '@webassemblyjs/wasm-edit': 1.12.1
- '@webassemblyjs/wasm-parser': 1.12.1
- acorn: 8.14.0
- acorn-import-attributes: 1.9.5(acorn@8.14.0)
- browserslist: 4.28.1
- chrome-trace-event: 1.0.4
- enhanced-resolve: 5.17.1
- es-module-lexer: 1.5.4
- eslint-scope: 5.1.1
- events: 3.3.0
- glob-to-regexp: 0.4.1
- graceful-fs: 4.2.11
- json-parse-even-better-errors: 2.3.1
- loader-runner: 4.3.0
- mime-types: 2.1.35
- neo-async: 2.6.2
- schema-utils: 3.3.0
- tapable: 2.2.1
- terser-webpack-plugin: 5.3.10(@swc/core@1.16.0)(webpack@5.95.0(@swc/core@1.16.0))
- watchpack: 2.4.2
- webpack-sources: 3.2.3
- transitivePeerDependencies:
- - '@swc/core'
- - esbuild
- - uglify-js
-
- webpackbar@7.0.0(@rspack/core@1.7.11)(webpack@5.95.0(@swc/core@1.16.0)):
- dependencies:
- ansis: 3.17.0
- consola: 3.2.3
- pretty-time: 1.1.0
- std-env: 3.7.0
- optionalDependencies:
- '@rspack/core': 1.7.11
- webpack: 5.95.0(@swc/core@1.16.0)
-
- websocket-driver@0.7.4:
- dependencies:
- http-parser-js: 0.5.8
- safe-buffer: 5.2.1
- websocket-extensions: 0.1.4
-
- websocket-extensions@0.1.4: {}
-
- which-boxed-primitive@1.0.2:
- dependencies:
- is-bigint: 1.0.4
- is-boolean-object: 1.1.2
- is-number-object: 1.0.7
- is-string: 1.0.7
- is-symbol: 1.0.4
-
- which-typed-array@1.1.15:
- dependencies:
- available-typed-arrays: 1.0.7
- call-bind: 1.0.7
- for-each: 0.3.3
- gopd: 1.0.1
- has-tostringtag: 1.0.2
-
- which@2.0.2:
- dependencies:
- isexe: 2.0.0
-
- widest-line@4.0.1:
- dependencies:
- string-width: 5.1.2
-
- wildcard@2.0.1: {}
-
- wrap-ansi@8.1.0:
- dependencies:
- ansi-styles: 6.2.1
- string-width: 5.1.2
- strip-ansi: 7.1.0
-
- write-file-atomic@3.0.3:
- dependencies:
- imurmurhash: 0.1.4
- is-typedarray: 1.0.0
- signal-exit: 3.0.7
- typedarray-to-buffer: 3.1.5
-
- ws@7.5.10: {}
-
- ws@8.18.0: {}
-
- wsl-utils@0.1.0:
- dependencies:
- is-wsl: 3.1.0
-
- xdg-basedir@5.1.0: {}
+ web-worker@1.5.0: {}
- xml-js@1.6.11:
- dependencies:
- sax: 1.4.1
+ webpack-virtual-modules@0.6.2: {}
yallist@3.1.1: {}
- yaml@1.10.2: {}
-
- yocto-queue@1.1.1: {}
+ yaml@2.9.0: {}
zwitch@2.0.4: {}
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
index 7a8db06f..d832e1bb 100644
--- a/pnpm-workspace.yaml
+++ b/pnpm-workspace.yaml
@@ -1,5 +1,4 @@
-onlyBuiltDependencies:
- - '@parcel/watcher'
- - '@swc/core'
- - core-js
- - core-js-pure
+minimumReleaseAgeExclude:
+ - '@rspress/core@2.0.20 || 2.0.21'
+ - '@rspress/shared@2.0.20 || 2.0.21'
+ - '@rspress/plugin-sitemap@2.0.21'
diff --git a/rspress.config.ts b/rspress.config.ts
new file mode 100644
index 00000000..c1ceec96
--- /dev/null
+++ b/rspress.config.ts
@@ -0,0 +1,97 @@
+import { promises as fs } from 'node:fs';
+import * as path from 'node:path';
+import { pluginSass } from '@rsbuild/plugin-sass';
+import { defineConfig } from '@rspress/core';
+import { transformerCompatibleMetaHighlight } from '@rspress/core/shiki-transformers';
+import { pluginSitemap } from '@rspress/plugin-sitemap';
+import fileTree from 'rspress-plugin-file-tree';
+import ga from 'rspress-plugin-google-analytics';
+import mermaid from 'rspress-plugin-mermaid';
+import Icons from 'unplugin-icons/rspack';
+
+const SITE_URL = 'https://docs.halo.run';
+
+export default defineConfig({
+ root: path.join(__dirname, 'docs'),
+ themeDir: path.join(__dirname, 'theme'),
+ lang: 'zh',
+ title: 'Halo 文档',
+ logoText: 'Halo 文档',
+ icon: '/img/favicon-96x96.png',
+ logo: 'https://www.halo.run/logo',
+ llms: true,
+ siteOrigin: SITE_URL,
+ globalStyles: path.join(__dirname, 'styles/index.scss'),
+ route: {
+ cleanUrls: true,
+ },
+ markdown: {
+ showLineNumbers: true,
+ link: {
+ checkDeadLinks: true,
+ },
+ shiki: {
+ theme: 'github-dark',
+ transformers: [transformerCompatibleMetaHighlight()],
+ },
+ image: {
+ checkDeadImages: true,
+ },
+ },
+ outDir: 'build',
+ plugins: [
+ pluginSitemap({
+ siteUrl: SITE_URL,
+ }),
+ mermaid(),
+ ga({
+ id: 'UA-110780416-7',
+ }),
+ fileTree(),
+ ],
+ builderConfig: {
+ plugins: [pluginSass()],
+ html: {
+ tags: [
+ {
+ tag: 'script',
+ attrs: {
+ src: 'https://track.halo.run/api/script.js',
+ defer: true,
+ 'data-site-id': '3',
+ },
+ },
+ ],
+ },
+ tools: {
+ rspack: {
+ plugins: [
+ Icons({
+ compiler: 'jsx',
+ jsx: 'react',
+ customCollections: {
+ custom: {
+ 'bt-panel': () =>
+ fs.readFile('./theme/images/bt-panel-logo.svg', 'utf-8'),
+ },
+ },
+ }),
+ ],
+ },
+ },
+ },
+ themeConfig: {
+ lastUpdated: true,
+ enableScrollToTop: true,
+ editLink: {
+ docRepoBaseUrl: 'https://github.com/halo-dev/docs/tree/main/docs',
+ },
+ socialLinks: [
+ {
+ icon: 'github',
+ mode: 'github-stars',
+ content: 'https://github.com/halo-dev/halo',
+ },
+ ],
+ },
+});
diff --git a/sidebars.js b/sidebars.js
deleted file mode 100644
index 7348e7b2..00000000
--- a/sidebars.js
+++ /dev/null
@@ -1,473 +0,0 @@
-/**
- * Creating a sidebar enables you to:
- - create an ordered group of docs
- - render a sidebar for each doc of that group
- - provide next/previous navigation
-
- The sidebars can be generated from the filesystem, or explicitly defined here.
-
- Create as many sidebars as you want.
- */
-
-/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */
-module.exports = {
- // By default, Docusaurus generates a sidebar from the docs folder structure
- // tutorialSidebar: [{type: 'autogenerated', dirName: '.'}],
-
- tutorial: [
- "intro",
- {
- type: "category",
- label: "入门",
- link: {
- type: "generated-index",
- },
- collapsed: false,
- items: [
- "getting-started/prepare",
- {
- type: "category",
- label: "安装指南",
- link: {
- type: "generated-index",
- },
- items: [
- "getting-started/install/docker-compose",
- "getting-started/install/docker",
- "getting-started/install/1panel",
- "getting-started/install/bt-panel",
- "getting-started/install/helm",
- "getting-started/install/podman",
- "getting-started/install/jar-file",
- "getting-started/install/offline",
- "getting-started/install/config",
- {
- type: "category",
- label: "云平台",
- link: {
- type: "generated-index",
- },
- items: [
- "getting-started/install/cloud/alibaba-cloud-market",
- "getting-started/install/cloud/tencent-cloud-lighthouse",
- "getting-started/install/cloud/alibaba-cloud-computenest",
- {
- type: "link",
- label: "Zeabur 一键部署",
- href: "https://zeabur.com/docs/zh-CN/marketplace/halo",
- description: "在 Zeabur 一键部署 Halo 服务",
- },
- {
- type: "link",
- label: "Rainbond 一键部署",
- href: "https://hub.grapps.cn/marketplace/apps/1255",
- description: "在 Rainbond 一键部署 Halo 服务",
- },
- ],
- },
- {
- type: "category",
- label: "其他指南",
- link: {
- type: "generated-index",
- },
- items: [
- "getting-started/install/other/nginxproxymanager",
- "getting-started/install/other/traefik",
- ],
- },
- ],
- },
- "getting-started/migrate-from-1.x",
- "getting-started/setup",
- "getting-started/first-post",
- // "getting-started/config",
- // "getting-started/upgrade",
- // "getting-started/downloads",
- ],
- },
- {
- type: "category",
- label: "用户指南",
- link: {
- type: "generated-index",
- },
- items: [
- "user-guide/common",
- "user-guide/activate",
- "user-guide/user-center",
- "user-guide/posts",
- "user-guide/pages",
- "user-guide/attachments",
- "user-guide/menus",
- "user-guide/themes",
- "user-guide/plugins",
- "user-guide/app-store",
- "user-guide/users",
- "user-guide/settings",
- "user-guide/backup",
- {
- type: "category",
- label: "商城",
- link: {
- type: "doc",
- id: "user-guide/shop/index",
- },
- items: [
- "user-guide/shop/prepare",
- "user-guide/shop/console-home",
- "user-guide/shop/payments",
- "user-guide/shop/sales-channels",
- "user-guide/shop/products",
- "user-guide/shop/orders",
- "user-guide/shop/virtual-delivery",
- "user-guide/shop/theme-dev",
- "user-guide/shop/mp",
- ],
- },
- "user-guide/faq",
- ],
- },
- {
- type: "category",
- label: "参与贡献",
- link: {
- type: "generated-index",
- },
- items: ["contribution/issue", "contribution/pr"],
- },
- "about",
- {
- type: "link",
- label: "更新日志",
- href: "https://releases.halo.run/changelog",
- description: "查看 Halo 的更新日志",
- }
- ],
-
- developer: [
- {
- type: "category",
- label: "系统开发",
- link: {
- type: "generated-index",
- },
- items: [
- // "developer-guide/core/structure",
- "developer-guide/core/prepare",
- "developer-guide/core/run",
- "developer-guide/core/build",
- "developer-guide/core/framework",
- // "developer-guide/core/code-style",
- ],
- },
- {
- type: "category",
- label: "插件开发",
- link: {
- type: "generated-index",
- },
- items: [
- "developer-guide/plugin/introduction",
- "developer-guide/plugin/prepare",
- "developer-guide/plugin/hello-world",
- {
- type: "category",
- label: "基础",
- link: {
- type: "generated-index",
- },
- items: [
- "developer-guide/plugin/basics/structure",
- "developer-guide/plugin/basics/manifest",
- "developer-guide/plugin/basics/devtools",
- {
- type: "category",
- label: "服务端",
- key: "basics-server",
- link: {
- type: "generated-index",
- },
- items: [
- "developer-guide/plugin/basics/server/lifecycle",
- "developer-guide/plugin/basics/server/object-management",
- ],
- },
- {
- type: "category",
- label: "UI",
- key: "basics-ui",
- link: {
- type: "generated-index",
- },
- items: [
- "developer-guide/plugin/basics/ui/intro",
- "developer-guide/plugin/basics/ui/entry",
- "developer-guide/plugin/basics/ui/build",
- ],
- },
- ],
- },
- {
- type: "category",
- label: "API 参考",
- link: {
- type: "generated-index",
- },
- items: [
- {
- type: "category",
- label: "服务端",
- key: "api-reference-server",
- link: {
- type: "generated-index",
- },
- items: [
- "developer-guide/plugin/api-reference/server/extension",
- "developer-guide/plugin/api-reference/server/reconciler",
- "developer-guide/plugin/api-reference/server/extension-client",
- "developer-guide/plugin/api-reference/server/setting-fetcher",
- "developer-guide/plugin/api-reference/server/reverseproxy",
- "developer-guide/plugin/api-reference/server/notification",
- "developer-guide/plugin/api-reference/server/finder-for-theme",
- "developer-guide/plugin/api-reference/server/template-for-theme",
- "developer-guide/plugin/api-reference/server/websocket",
- "developer-guide/plugin/api-reference/server/login-handler-enhancer",
- "developer-guide/plugin/api-reference/server/extension-getter",
- ],
- },
- {
- type: "category",
- label: "UI",
- key: "api-reference-ui",
- link: {
- type: "generated-index",
- },
- items: [
- "developer-guide/plugin/api-reference/ui/route",
- "developer-guide/plugin/api-reference/ui/api-request",
- "developer-guide/plugin/api-reference/ui/formkit",
- "developer-guide/plugin/api-reference/ui/shared",
- {
- type: "category",
- label: "组件",
- link: {
- type: "doc",
- id: "developer-guide/plugin/api-reference/ui/components/index",
- },
- items: [
- "developer-guide/plugin/api-reference/ui/components/uppy-upload",
- "developer-guide/plugin/api-reference/ui/components/filter-dropdown",
- "developer-guide/plugin/api-reference/ui/components/filter-clean-button",
- "developer-guide/plugin/api-reference/ui/components/annotations-form",
- "developer-guide/plugin/api-reference/ui/components/attachment-file-type-icon",
- "developer-guide/plugin/api-reference/ui/components/attachment-selector-modal",
- "developer-guide/plugin/api-reference/ui/components/has-permission",
- "developer-guide/plugin/api-reference/ui/components/search-input",
- "developer-guide/plugin/api-reference/ui/components/plugin-detail-modal",
- "developer-guide/plugin/api-reference/ui/components/v-codemirror",
- "developer-guide/plugin/api-reference/ui/components/v-tooltip",
- "developer-guide/plugin/api-reference/ui/components/v-permission",
- ],
- },
- ],
- },
- ],
- },
- {
- type: "category",
- label: "扩展点和定制化",
- link: {
- type: "doc",
- id: "developer-guide/plugin/extension-points/server/index",
- },
- items: [
- {
- type: "category",
- label: "服务端",
- key: "extension-points-server",
- link: {
- type: "doc",
- id: "developer-guide/plugin/extension-points/server/index",
- },
- items: [
- "developer-guide/plugin/extension-points/server/additional-webfilter",
- "developer-guide/plugin/extension-points/server/authentication-webfilter",
- "developer-guide/plugin/extension-points/server/attachment",
- "developer-guide/plugin/extension-points/server/comment-subject",
- "developer-guide/plugin/extension-points/server/comment-widget",
- "developer-guide/plugin/extension-points/server/element-tag-post-processor",
- "developer-guide/plugin/extension-points/server/excerpt-generator",
- "developer-guide/plugin/extension-points/server/halo-documents-provider",
- "developer-guide/plugin/extension-points/server/notifier",
- "developer-guide/plugin/extension-points/server/search-engine",
- "developer-guide/plugin/extension-points/server/template-head-processor",
- "developer-guide/plugin/extension-points/server/template-footer-processor",
- "developer-guide/plugin/extension-points/server/post-content",
- "developer-guide/plugin/extension-points/server/singlepage-content",
- "developer-guide/plugin/extension-points/server/user-creating-handler",
- "developer-guide/plugin/extension-points/server/username-password-authentication-manager",
- ],
- },
- {
- type: "category",
- label: "UI",
- key: "extension-points-ui",
- link: {
- type: "doc",
- id: "developer-guide/plugin/extension-points/ui/index",
- },
- items: [
- "developer-guide/plugin/extension-points/ui/attachment-selector-create",
- "developer-guide/plugin/extension-points/ui/editor-create",
- "developer-guide/plugin/extension-points/ui/plugin-self-tabs-create",
- "developer-guide/plugin/extension-points/ui/default-editor-extension-create",
- "developer-guide/plugin/extension-points/ui/comment-subject-ref-create",
- "developer-guide/plugin/extension-points/ui/backup-tabs-create",
- "developer-guide/plugin/extension-points/ui/plugin-installation-tabs-create",
- "developer-guide/plugin/extension-points/ui/theme-list-tabs-create",
- "developer-guide/plugin/extension-points/ui/post-list-item-operation-create",
- "developer-guide/plugin/extension-points/ui/single-page-list-item-operation-create",
- "developer-guide/plugin/extension-points/ui/comment-list-item-operation-create",
- "developer-guide/plugin/extension-points/ui/reply-list-item-operation-create",
- "developer-guide/plugin/extension-points/ui/plugin-list-item-operation-create",
- "developer-guide/plugin/extension-points/ui/backup-list-item-operation-create",
- "developer-guide/plugin/extension-points/ui/attachment-list-item-operation-create",
- "developer-guide/plugin/extension-points/ui/theme-list-item-operation-create",
- "developer-guide/plugin/extension-points/ui/plugin-list-item-field-create",
- "developer-guide/plugin/extension-points/ui/post-list-item-field-create",
- "developer-guide/plugin/extension-points/ui/single-page-list-item-field-create",
- "developer-guide/plugin/extension-points/ui/user-detail-tabs-create",
- "developer-guide/plugin/extension-points/ui/uc-user-profile-tabs-create",
- "developer-guide/plugin/extension-points/ui/dashboard-widgets",
- ],
- },
- ],
- },
- {
- type: "category",
- label: "与其他插件交互",
- link: {
- type: "doc",
- id: "developer-guide/plugin/interaction/dependency",
- },
- items: [
- "developer-guide/plugin/interaction/dependency",
- "developer-guide/plugin/interaction/shared-events",
- "developer-guide/plugin/interaction/making-plugin-extensible",
- ],
- },
- {
- type: "category",
- label: "安全和权限管理",
- link: {
- type: "doc",
- id: "developer-guide/plugin/security/role-template",
- },
- items: [
- "developer-guide/plugin/security/rbac",
- "developer-guide/plugin/security/role-template",
- "developer-guide/plugin/security/ui-permission",
- ],
- },
- {
- type: "category",
- label: "案例和最佳实践",
- link: {
- type: "generated-index",
- },
- items: ["developer-guide/plugin/examples/todolist"],
- },
- // "developer-guide/plugin/appendices",
- "developer-guide/plugin/api-changelog",
- ],
- },
- {
- type: "category",
- label: "主题开发",
- link: {
- type: "generated-index",
- },
- items: [
- "developer-guide/theme/prepare",
- "developer-guide/theme/config",
- "developer-guide/theme/structure",
- "developer-guide/theme/ui-plugin",
- "developer-guide/theme/page-layout",
- "developer-guide/theme/static-resources",
- "developer-guide/theme/settings",
- "developer-guide/theme/annotations",
- {
- type: "category",
- label: "模板编写",
- link: {
- type: "doc",
- id: "developer-guide/theme/template-variables",
- },
- items: [
- "developer-guide/theme/template-variables/index_",
- "developer-guide/theme/template-variables/post",
- "developer-guide/theme/template-variables/page",
- "developer-guide/theme/template-variables/archives",
- "developer-guide/theme/template-variables/tags",
- "developer-guide/theme/template-variables/tag",
- "developer-guide/theme/template-variables/categories",
- "developer-guide/theme/template-variables/category",
- "developer-guide/theme/template-variables/author",
- "developer-guide/theme/template-variables/auth",
- "developer-guide/theme/template-variables/error",
- ],
- },
- {
- type: "category",
- label: "Finder API",
- link: {
- type: "doc",
- id: "developer-guide/theme/finder-apis",
- },
- items: [
- "developer-guide/theme/finder-apis/category",
- "developer-guide/theme/finder-apis/tag",
- "developer-guide/theme/finder-apis/post",
- "developer-guide/theme/finder-apis/single-page",
- "developer-guide/theme/finder-apis/comment",
- "developer-guide/theme/finder-apis/contributor",
- "developer-guide/theme/finder-apis/menu",
- "developer-guide/theme/finder-apis/site-stats",
- "developer-guide/theme/finder-apis/theme",
- "developer-guide/theme/finder-apis/plugin",
- ],
- },
- "developer-guide/theme/image-optimization",
- "developer-guide/theme/global-variables",
- "developer-guide/theme/template-tag",
- "developer-guide/theme/code-snippets",
- "developer-guide/theme/api-changelog",
- ],
- },
- {
- type: "category",
- label: "RESTful API",
- link: {
- type: "generated-index",
- },
- items: [
- "developer-guide/restful-api/introduction",
- "developer-guide/restful-api/api-client",
- ],
- },
- {
- type: "category",
- label: "应用市场",
- link: {
- type: "generated-index",
- },
- items: [
- "developer-guide/app-store/publish-app",
- "developer-guide/app-store/app-review-guidelines",
- ],
- },
- "developer-guide/form-schema",
- "developer-guide/annotations-form",
- ],
-};
diff --git a/skills-lock.json b/skills-lock.json
new file mode 100644
index 00000000..2f8e650a
--- /dev/null
+++ b/skills-lock.json
@@ -0,0 +1,23 @@
+{
+ "version": 1,
+ "skills": {
+ "rspress-best-practices": {
+ "source": "rstackjs/agent-skills",
+ "sourceType": "github",
+ "skillPath": "skills/rspress-best-practices/SKILL.md",
+ "computedHash": "4e7ae99820cbe318bbaee92aa8b5ba115c41ea6727d4d109e1133e45a2b43368"
+ },
+ "rspress-custom-theme": {
+ "source": "rstackjs/agent-skills",
+ "sourceType": "github",
+ "skillPath": "skills/rspress-custom-theme/SKILL.md",
+ "computedHash": "1c756906de80e2e2ec24c5442482bf79bb08749b17ba0b0e44b4e00c6854b203"
+ },
+ "rspress-description-generator": {
+ "source": "rstackjs/agent-skills",
+ "sourceType": "github",
+ "skillPath": "skills/rspress-description-generator/SKILL.md",
+ "computedHash": "ca2693ca055d1b4e5903bdfacab522f46ca0e13cbc5db59e6c9589fdc8efc6ad"
+ }
+ }
+}
diff --git a/src/components/.gitkeep b/src/components/.gitkeep
deleted file mode 100644
index e69de29b..00000000
diff --git a/src/css/custom.css b/src/css/custom.css
deleted file mode 100644
index af54fa6b..00000000
--- a/src/css/custom.css
+++ /dev/null
@@ -1,52 +0,0 @@
-/**
- * Any CSS included here will be global. The classic template
- * bundles Infima by default. Infima is a CSS framework designed to
- * work well for content-centric websites.
- */
-
-/* You can override the default Infima variables here. */
-:root {
- --ifm-color-primary: #25c2a0;
- --ifm-color-primary-dark: rgb(33, 175, 144);
- --ifm-color-primary-darker: rgb(31, 165, 136);
- --ifm-color-primary-darkest: rgb(26, 136, 112);
- --ifm-color-primary-light: rgb(70, 203, 174);
- --ifm-color-primary-lighter: rgb(102, 212, 189);
- --ifm-color-primary-lightest: rgb(146, 224, 208);
- --ifm-code-font-size: 95%;
-}
-
-.markdown h1:first-child {
- --ifm-h1-font-size: 2.3rem;
-}
-
-.docusaurus-highlight-code-line {
- background-color: rgba(0, 0, 0, 0.1);
- display: block;
- margin: 0 calc(-1 * var(--ifm-pre-padding));
- padding: 0 var(--ifm-pre-padding);
-}
-
-html[data-theme="dark"] .docusaurus-highlight-code-line {
- background-color: rgba(0, 0, 0, 0.3);
-}
-
-p > img {
- border-radius: 0.4rem;
- box-shadow: 2px 2px 0.4rem 2px rgba(0, 0, 0, 0.3);
- overflow: hidden;
-}
-
-.medium-zoom-overlay,
-.medium-zoom-image--opened {
- z-index: 999;
-}
-
-.dropdown-archived-versions {
- font-size: 0.875rem;
- padding: 0.2rem 0.5rem;
-}
-
-.dropdown-separator {
- margin: 0.3rem 0;
-}
diff --git a/src/css/shiki.scss b/src/css/shiki.scss
deleted file mode 100644
index 6de1369e..00000000
--- a/src/css/shiki.scss
+++ /dev/null
@@ -1,185 +0,0 @@
-.shiki-code-wrapper {
- overflow: hidden;
- margin-bottom: var(--ifm-leading);
- color-scheme: dark;
-
- .shiki-code-header {
- padding: 0.5rem 0.75rem;
- border-bottom: 1px solid var(--ifm-color-gray-700);
- font-size: var(--ifm-code-font-size);
- }
-
- .shiki-code-content {
- position: relative;
-
- pre {
- position: relative;
- padding: 0.75rem;
- margin: 0;
- border-radius: initial;
- code {
- z-index: 1;
- display: block;
- width: max-content;
- position: relative;
- min-width: 100%;
-
- counter-reset: step;
- counter-increment: step 0;
-
- .line {
- position: relative;
- }
-
- // line numbers start
- .line::before {
- content: counter(step);
- counter-increment: step;
- width: 0.6rem;
- margin-right: 1.1rem;
- display: inline-block;
- text-align: right;
- color: rgba(115, 138, 148, 0.5);
- user-select: none;
- }
-
- .line:last-child:empty::before {
- content: none;
- counter-increment: none;
- }
- // line numbers end
-
- // highlighted lines start
- .highlighted {
- width: 100%;
- display: inline-block;
- position: relative;
- }
-
- .highlighted::after {
- content: "";
- position: absolute;
- top: 0;
- bottom: 0;
- left: -0.75rem;
- right: -0.75rem;
- background: rgba(101, 117, 133, 0.16);
- border-left: 1px solid rgba(34, 197, 94, 0.8);
- z-index: 0;
- }
-
- .highlighted.error::after {
- background: rgba(244, 63, 94, 0.16) !important;
- }
-
- .highlighted.warning::after {
- background: rgba(234, 179, 8, 0.16) !important;
- }
- // highlighted lines end
- }
-
- // focus line start
- &.has-focused .line:not(.focused) {
- opacity: 0.7;
- filter: blur(0.095rem);
- transition: filter 0.35s, opacity 0.35s;
- }
-
- &.has-focused:hover .line:not(.focused) {
- opacity: 1;
- filter: blur(0);
- }
- // focus line end
-
- // diff start
- &.has-diff .diff {
- width: 100%;
- display: inline-block;
- position: relative;
- }
-
- &.has-diff .diff.remove::before {
- content: "-";
- }
-
- &.has-diff .diff.add::before {
- content: "+";
- }
-
- &.has-diff .diff.remove::after {
- content: "";
- position: absolute;
- top: 0;
- bottom: 0;
- left: -0.75rem;
- right: -0.75rem;
- background: rgb(239 68 68 / 0.15);
- border-left: 1px solid rgb(239 68 68 / 0.8);
- z-index: -1;
- }
-
- &.has-diff .diff.add::after {
- content: "";
- position: absolute;
- top: 0;
- bottom: 0;
- left: -0.75rem;
- right: -0.75rem;
- background: rgb(34 197 94 / 0.15);
- border-left: 1px solid rgb(34 197 94 / 0.8);
- z-index: -1;
- }
- // diff end
- }
-
- .shiki-code-copy-button {
- position: absolute;
- top: 0.5rem;
- right: 0.5rem;
- opacity: 0;
- z-index: 2;
- width: 2rem;
- height: 2rem;
- display: flex;
- align-items: center;
- justify-content: center;
- padding: 0.4rem;
- border: none;
- cursor: pointer;
- }
- }
-
- &:hover {
- .shiki-code-copy-button {
- opacity: 1;
- }
- }
-
- .tabler--copy {
- display: inline-block;
- width: 28px;
- height: 28px;
- --svg: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cg fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Cpath d='M7 9.667A2.667 2.667 0 0 1 9.667 7h8.666A2.667 2.667 0 0 1 21 9.667v8.666A2.667 2.667 0 0 1 18.333 21H9.667A2.667 2.667 0 0 1 7 18.333z'/%3E%3Cpath d='M4.012 16.737A2 2 0 0 1 3 15V5c0-1.1.9-2 2-2h10c.75 0 1.158.385 1.5 1'/%3E%3C/g%3E%3C/svg%3E");
- background-color: currentColor;
- -webkit-mask-image: var(--svg);
- mask-image: var(--svg);
- -webkit-mask-repeat: no-repeat;
- mask-repeat: no-repeat;
- -webkit-mask-size: 100% 100%;
- mask-size: 100% 100%;
- }
-
- .tabler--check {
- display: inline-block;
- width: 28px;
- height: 28px;
- --svg: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m5 12l5 5L20 7'/%3E%3C/svg%3E");
- background-color: currentColor;
- -webkit-mask-image: var(--svg);
- mask-image: var(--svg);
- -webkit-mask-repeat: no-repeat;
- mask-repeat: no-repeat;
- -webkit-mask-size: 100% 100%;
- mask-size: 100% 100%;
- }
-}
diff --git a/src/images/pro-ad.png b/src/images/pro-ad.png
deleted file mode 100644
index 943c6e0e..00000000
Binary files a/src/images/pro-ad.png and /dev/null differ
diff --git a/src/pages/versions.tsx b/src/pages/versions.tsx
deleted file mode 100644
index b86abada..00000000
--- a/src/pages/versions.tsx
+++ /dev/null
@@ -1,143 +0,0 @@
-import React from "react";
-import useDocusaurusContext from "@docusaurus/useDocusaurusContext";
-import Link from "@docusaurus/Link";
-import Layout from "@theme/Layout";
-import Translate from "@docusaurus/Translate";
-
-import {
- useLatestVersion,
- useVersions,
-} from "@docusaurus/plugin-content-docs/client";
-import VersionsArchived from "../../versionsArchived.json";
-
-function DocumentationLabel() {
- return (
- Documentation
- );
-}
-
-function ReleaseNotesLabel() {
- return (
-
- Release Notes
-
- );
-}
-
-function Version(): JSX.Element {
- const {
- siteConfig: { organizationName, projectName },
- } = useDocusaurusContext();
- const versions = useVersions();
- const latestVersion = useLatestVersion();
- const currentVersion = versions.find(
- (version) => version.name === "current"
- )!;
- const pastVersions = versions.filter(
- (version) => version !== latestVersion && version.name !== "current"
- );
- const repoUrl = `https://github.com/${organizationName}/${projectName}`;
-
- return (
-
-
- Halo documentation versions
-
- {latestVersion && (
-
- Current version (Stable)
-
- Here you can find the documentation for current released version.
-
-
-
-
- {latestVersion.label}
-
- Documentation
-
-
-
- Release Notes
-
-
-
-
-
-
- )}
-
- {currentVersion !== latestVersion && (
-
- Next version (Unreleased)
-
- Here you can find the documentation for work-in-process unreleased
- version.
-
-
-
-
- {currentVersion.label}
-
- Documentation
-
-
-
-
-
- )}
-
- {(pastVersions.length > 0 || VersionsArchivedList.length > 0) && (
-
- Past versions (Not maintained anymore)
-
- Here you can find documentation for previous versions of
- Docusaurus.
-
-
-
- {pastVersions.map((version) => (
-
- {version.label}
-
-
-
-
-
-
-
-
-
-
-
- ))}
- {Object.entries(VersionsArchived).map(
- ([versionName, versionUrl]) => (
-
- {versionName}
-
-
-
-
-
-
-
-
-
-
-
- )
- )}
-
-
-
- )}
-
-
- );
-}
-
-export default Version;
diff --git a/src/shiki/meta-transformer.js b/src/shiki/meta-transformer.js
deleted file mode 100644
index c2633d12..00000000
--- a/src/shiki/meta-transformer.js
+++ /dev/null
@@ -1,32 +0,0 @@
-function parseTitleFromMeta(meta) {
- if (!meta) {
- return "";
- }
- const kvList = meta.split(" ").filter(Boolean);
- for (const item of kvList) {
- const [k, v = ""] = item.split("=").filter(Boolean);
- if (k === "title" && v.length > 0) {
- return v.replace(/["'`]/g, "");
- }
- }
- return "";
-}
-
-/** @type {import('shiki').ShikiTransformer} */
-export function transformerAddMeta() {
- return {
- name: "shiki-transformer:add-meta",
- pre(pre) {
- const title = parseTitleFromMeta(this.options.meta?.__raw);
- const lang = this.options.lang;
- if (title.length > 0) {
- pre.properties = {
- ...pre.properties,
- "data-title": title,
- "data-lang": lang,
- };
- }
- return pre;
- },
- };
-}
diff --git a/src/theme/MDXComponents/Code.tsx b/src/theme/MDXComponents/Code.tsx
deleted file mode 100644
index a95afc3c..00000000
--- a/src/theme/MDXComponents/Code.tsx
+++ /dev/null
@@ -1,27 +0,0 @@
-import type { ComponentProps, ReactNode } from "react";
-import React from "react";
-import CodeInline from "@theme/CodeInline";
-import type { Props } from "@theme/MDXComponents/Code";
-
-function shouldBeInline(props: Props) {
- return (
- // empty code blocks have no props.children,
- // see https://github.com/facebook/docusaurus/pull/9704
- typeof props.children !== "undefined" &&
- React.Children.toArray(props.children).every(
- (el) => typeof el === "string" && !el.includes("\n")
- )
- );
-}
-
-function CodeBlock(props: ComponentProps<"code">): JSX.Element {
- return ;
-}
-
-export default function MDXCode(props: Props): ReactNode {
- return shouldBeInline(props) ? (
-
- ) : (
- )} />
- );
-}
diff --git a/src/theme/MDXComponents/Pre.tsx b/src/theme/MDXComponents/Pre.tsx
deleted file mode 100644
index 1ff9a10e..00000000
--- a/src/theme/MDXComponents/Pre.tsx
+++ /dev/null
@@ -1,71 +0,0 @@
-import React, { type ReactNode, useRef, useState } from "react";
-import type { Props } from "@theme/MDXComponents/Pre";
-
-type PreWithDataTitle = Props & { "data-title"?: string };
-
-export default function MDXPre(props: PreWithDataTitle): ReactNode | undefined {
- const title = props["data-title"];
- const preRef = useRef(null);
- const [copied, setCopied] = useState(false);
-
- const handleCopy = () => {
- const code = preRef.current?.innerText || preRef.current?.textContent || "";
-
- copyText(code, () => {
- setCopied(true);
- setTimeout(() => setCopied(false), 2000);
- });
- };
-
- return (
-
- {title && (
-
- {title}
-
- )}
-
-
-
-
-
- );
-}
-
-export function copyText(text: string, cb: () => void) {
- if (navigator.clipboard) {
- navigator.clipboard.writeText(text).then(() => {
- cb();
- });
- } else {
- const textArea = document.createElement("textarea");
- textArea.value = text;
- textArea.style.position = "fixed";
- textArea.style.opacity = "0";
- document.body.appendChild(textArea);
- textArea.focus();
- textArea.select();
- try {
- const successful = document.execCommand("copy");
- if (successful) {
- cb();
- }
- } catch (err) {
- console.error("Fallback: Oops, unable to copy", err);
- }
- document.body.removeChild(textArea);
- }
-}
diff --git a/src/theme/SearchBar.js b/src/theme/SearchBar.js
deleted file mode 100644
index 7a286893..00000000
--- a/src/theme/SearchBar.js
+++ /dev/null
@@ -1,25 +0,0 @@
-import "meilisearch-docsearch/css";
-import React, { useEffect } from "react";
-
-export default function SearchBarWrapper(props) {
- useEffect(() => {
- const docsearch = require("meilisearch-docsearch").default;
-
- const destroy = docsearch({
- container: "#docsearch",
- host: "https://docsearch.halo.run",
- // Default Search API Key
- // Use it to search from the frontend
- apiKey:
- "883d046131979fa8bc9bbc7d006ccb13a353cb5ce847cca50a49fad4f35b3f77",
- indexUid: "docs",
- });
-
- return () => destroy();
- }, []);
- return (
- <>
-
- >
- );
-}
diff --git a/src/theme/TOC/index.tsx b/src/theme/TOC/index.tsx
deleted file mode 100644
index 78ae1dff..00000000
--- a/src/theme/TOC/index.tsx
+++ /dev/null
@@ -1,31 +0,0 @@
-import React, {type ReactNode} from 'react';
-import clsx from 'clsx';
-import TOCItems from '@theme/TOCItems';
-import type {Props} from '@theme/TOC';
-
-import styles from './styles.module.css';
-
-// Using a custom className
-// This prevents TOCInline/TOCCollapsible getting highlighted by mistake
-const LINK_CLASS_NAME = 'table-of-contents__link toc-highlight';
-const LINK_ACTIVE_CLASS_NAME = 'table-of-contents__link--active';
-import proAd from '../../images/pro-ad.png';
-
-export default function TOC({className, ...props}: Props): ReactNode {
- return (
-
-
-
-
-
-
-
-
- );
-}
diff --git a/src/theme/TOC/styles.module.css b/src/theme/TOC/styles.module.css
deleted file mode 100644
index 4b5d9f46..00000000
--- a/src/theme/TOC/styles.module.css
+++ /dev/null
@@ -1,16 +0,0 @@
-.tableOfContents {
- max-height: calc(100vh - (var(--ifm-navbar-height) + 2rem));
- overflow-y: auto;
- position: sticky;
- top: calc(var(--ifm-navbar-height) + 1rem);
-}
-
-@media (max-width: 996px) {
- .tableOfContents {
- display: none;
- }
-
- .docItemContainer {
- padding: 0 0.3rem;
- }
-}
diff --git a/static/.nojekyll b/static/.nojekyll
deleted file mode 100644
index e69de29b..00000000
diff --git a/static/img/adaptive2.png b/static/img/adaptive2.png
deleted file mode 100644
index d9927458..00000000
Binary files a/static/img/adaptive2.png and /dev/null differ
diff --git a/static/img/create-repository-for-hello-world-plugin.png b/static/img/create-repository-for-hello-world-plugin.png
deleted file mode 100644
index 29cde1d2..00000000
Binary files a/static/img/create-repository-for-hello-world-plugin.png and /dev/null differ
diff --git a/static/img/developer-guide/plugin/extension-points/ui/default-editor-extension-drag-menu.png b/static/img/developer-guide/plugin/extension-points/ui/default-editor-extension-drag-menu.png
deleted file mode 100644
index 87cbfd71..00000000
Binary files a/static/img/developer-guide/plugin/extension-points/ui/default-editor-extension-drag-menu.png and /dev/null differ
diff --git a/static/img/developer-guide/plugin/extension-points/ui/default-editor-extension-drag.png b/static/img/developer-guide/plugin/extension-points/ui/default-editor-extension-drag.png
deleted file mode 100644
index 8193d8e0..00000000
Binary files a/static/img/developer-guide/plugin/extension-points/ui/default-editor-extension-drag.png and /dev/null differ
diff --git a/static/img/halo-data-export.png b/static/img/halo-data-export.png
deleted file mode 100644
index 38e749ea..00000000
Binary files a/static/img/halo-data-export.png and /dev/null differ
diff --git a/static/img/install/1panel/halo-console.png b/static/img/install/1panel/halo-console.png
deleted file mode 100644
index eab18099..00000000
Binary files a/static/img/install/1panel/halo-console.png and /dev/null differ
diff --git a/static/img/install/alibaba-cloud-market/1panel-add-domain.png b/static/img/install/alibaba-cloud-market/1panel-add-domain.png
deleted file mode 100644
index dea7e4ee..00000000
Binary files a/static/img/install/alibaba-cloud-market/1panel-add-domain.png and /dev/null differ
diff --git a/static/img/install/alibaba-cloud-market/1panel-installed-apps.png b/static/img/install/alibaba-cloud-market/1panel-installed-apps.png
deleted file mode 100644
index 19d9e8ac..00000000
Binary files a/static/img/install/alibaba-cloud-market/1panel-installed-apps.png and /dev/null differ
diff --git a/static/img/install/alibaba-cloud-market/1panel-update-halo-external-url.png b/static/img/install/alibaba-cloud-market/1panel-update-halo-external-url.png
deleted file mode 100644
index 6d2fbbf0..00000000
Binary files a/static/img/install/alibaba-cloud-market/1panel-update-halo-external-url.png and /dev/null differ
diff --git a/static/img/install/alibaba-cloud-market/1panel-upgrade-halo.png b/static/img/install/alibaba-cloud-market/1panel-upgrade-halo.png
deleted file mode 100644
index 1af30ec8..00000000
Binary files a/static/img/install/alibaba-cloud-market/1panel-upgrade-halo.png and /dev/null differ
diff --git a/static/img/install/alibaba-cloud-market/1panel-website.png b/static/img/install/alibaba-cloud-market/1panel-website.png
deleted file mode 100644
index 6297536e..00000000
Binary files a/static/img/install/alibaba-cloud-market/1panel-website.png and /dev/null differ
diff --git a/static/img/install/alibaba-cloud-market/1panel.png b/static/img/install/alibaba-cloud-market/1panel.png
deleted file mode 100644
index f72b89d0..00000000
Binary files a/static/img/install/alibaba-cloud-market/1panel.png and /dev/null differ
diff --git a/static/img/install/alibaba-cloud-market/get-1panel-info.png b/static/img/install/alibaba-cloud-market/get-1panel-info.png
deleted file mode 100644
index 0ab800e3..00000000
Binary files a/static/img/install/alibaba-cloud-market/get-1panel-info.png and /dev/null differ
diff --git a/static/img/install/alibaba-cloud-market/iptables-1panel.jpeg b/static/img/install/alibaba-cloud-market/iptables-1panel.jpeg
deleted file mode 100644
index 83acccf3..00000000
Binary files a/static/img/install/alibaba-cloud-market/iptables-1panel.jpeg and /dev/null differ
diff --git a/static/img/migrate/halo2.0-migrate-plugin.png b/static/img/migrate/halo2.0-migrate-plugin.png
deleted file mode 100644
index c23bbe93..00000000
Binary files a/static/img/migrate/halo2.0-migrate-plugin.png and /dev/null differ
diff --git a/static/img/nginx-proxy-manager/Nginx-Proxy-Manager-1.png b/static/img/nginx-proxy-manager/Nginx-Proxy-Manager-1.png
deleted file mode 100644
index d4ff96a0..00000000
Binary files a/static/img/nginx-proxy-manager/Nginx-Proxy-Manager-1.png and /dev/null differ
diff --git a/static/img/nginx-proxy-manager/Nginx-Proxy-Manager-2.png b/static/img/nginx-proxy-manager/Nginx-Proxy-Manager-2.png
deleted file mode 100644
index 56fa2699..00000000
Binary files a/static/img/nginx-proxy-manager/Nginx-Proxy-Manager-2.png and /dev/null differ
diff --git a/static/img/nginx-proxy-manager/Nginx-Proxy-Manager-3.png b/static/img/nginx-proxy-manager/Nginx-Proxy-Manager-3.png
deleted file mode 100644
index 88873ac0..00000000
Binary files a/static/img/nginx-proxy-manager/Nginx-Proxy-Manager-3.png and /dev/null differ
diff --git a/static/img/nginx-proxy-manager/Nginx-Proxy-Manager-4.png b/static/img/nginx-proxy-manager/Nginx-Proxy-Manager-4.png
deleted file mode 100644
index 2b4e0736..00000000
Binary files a/static/img/nginx-proxy-manager/Nginx-Proxy-Manager-4.png and /dev/null differ
diff --git a/static/img/nginx-proxy-manager/Nginx-Proxy-Manager-5.png b/static/img/nginx-proxy-manager/Nginx-Proxy-Manager-5.png
deleted file mode 100644
index 2b8d961c..00000000
Binary files a/static/img/nginx-proxy-manager/Nginx-Proxy-Manager-5.png and /dev/null differ
diff --git a/static/img/nginx-proxy-manager/Nginx-Proxy-Manager-6.png b/static/img/nginx-proxy-manager/Nginx-Proxy-Manager-6.png
deleted file mode 100644
index 5eb933b8..00000000
Binary files a/static/img/nginx-proxy-manager/Nginx-Proxy-Manager-6.png and /dev/null differ
diff --git a/static/img/nginx-proxy-manager/Nginx-Proxy-Manager-7.png b/static/img/nginx-proxy-manager/Nginx-Proxy-Manager-7.png
deleted file mode 100644
index 4e3f31ca..00000000
Binary files a/static/img/nginx-proxy-manager/Nginx-Proxy-Manager-7.png and /dev/null differ
diff --git a/static/img/nginx-proxy-manager/Nginx-Proxy-Manager-8.png b/static/img/nginx-proxy-manager/Nginx-Proxy-Manager-8.png
deleted file mode 100644
index 88f46e54..00000000
Binary files a/static/img/nginx-proxy-manager/Nginx-Proxy-Manager-8.png and /dev/null differ
diff --git a/static/img/setup/setup.png b/static/img/setup/setup.png
deleted file mode 100644
index f54043b3..00000000
Binary files a/static/img/setup/setup.png and /dev/null differ
diff --git a/static/img/user-guide/app-store/app-store-license-manage.png b/static/img/user-guide/app-store/app-store-license-manage.png
deleted file mode 100644
index d6b38fdf..00000000
Binary files a/static/img/user-guide/app-store/app-store-license-manage.png and /dev/null differ
diff --git a/static/img/user-guide/app-store/app-store-plugin-license.png b/static/img/user-guide/app-store/app-store-plugin-license.png
deleted file mode 100644
index 6176a57e..00000000
Binary files a/static/img/user-guide/app-store/app-store-plugin-license.png and /dev/null differ
diff --git a/static/img/user-guide/attachments/attachment-group-delete.png b/static/img/user-guide/attachments/attachment-group-delete.png
deleted file mode 100644
index d856a787..00000000
Binary files a/static/img/user-guide/attachments/attachment-group-delete.png and /dev/null differ
diff --git a/static/img/user-guide/attachments/attachment-policy.png b/static/img/user-guide/attachments/attachment-policy.png
deleted file mode 100644
index 02e1b1b8..00000000
Binary files a/static/img/user-guide/attachments/attachment-policy.png and /dev/null differ
diff --git a/static/img/user-guide/attachments/attachment-upload-multiple.png b/static/img/user-guide/attachments/attachment-upload-multiple.png
deleted file mode 100644
index d58b2ae3..00000000
Binary files a/static/img/user-guide/attachments/attachment-upload-multiple.png and /dev/null differ
diff --git a/static/img/user-guide/posts/tag-list.png b/static/img/user-guide/posts/tag-list.png
deleted file mode 100644
index 81941a2e..00000000
Binary files a/static/img/user-guide/posts/tag-list.png and /dev/null differ
diff --git a/static/img/user-guide/shop/products-category-create.png b/static/img/user-guide/shop/products-category-create.png
deleted file mode 100644
index 3055a20d..00000000
Binary files a/static/img/user-guide/shop/products-category-create.png and /dev/null differ
diff --git a/static/img/user-guide/shop/settings-payments-create.png b/static/img/user-guide/shop/settings-payments-create.png
deleted file mode 100644
index 055b179b..00000000
Binary files a/static/img/user-guide/shop/settings-payments-create.png and /dev/null differ
diff --git a/static/img/user-guide/shop/virtual-delivery-resources.png b/static/img/user-guide/shop/virtual-delivery-resources.png
deleted file mode 100644
index 441f0476..00000000
Binary files a/static/img/user-guide/shop/virtual-delivery-resources.png and /dev/null differ
diff --git a/static/img/user-guide/themes/theme-install-alt.png b/static/img/user-guide/themes/theme-install-alt.png
deleted file mode 100644
index 53a921d1..00000000
Binary files a/static/img/user-guide/themes/theme-install-alt.png and /dev/null differ
diff --git a/static/img/user-guide/themes/theme-preview.png b/static/img/user-guide/themes/theme-preview.png
deleted file mode 100644
index adcd6ad2..00000000
Binary files a/static/img/user-guide/themes/theme-preview.png and /dev/null differ
diff --git a/static/img/user-guide/user-permission.png b/static/img/user-guide/user-permission.png
deleted file mode 100644
index 0f686b57..00000000
Binary files a/static/img/user-guide/user-permission.png and /dev/null differ
diff --git a/static/img/user-guide/users/auth-providers-2.20+.png b/static/img/user-guide/users/auth-providers-2.20+.png
deleted file mode 100644
index 9bae1246..00000000
Binary files a/static/img/user-guide/users/auth-providers-2.20+.png and /dev/null differ
diff --git a/static/img/user-guide/users/auth-providers.png b/static/img/user-guide/users/auth-providers.png
deleted file mode 100644
index 7d045838..00000000
Binary files a/static/img/user-guide/users/auth-providers.png and /dev/null differ
diff --git a/static/img/user-guide/users/user-setting.png b/static/img/user-guide/users/user-setting.png
deleted file mode 100644
index 26cae3e3..00000000
Binary files a/static/img/user-guide/users/user-setting.png and /dev/null differ
diff --git a/static/robots.txt b/static/robots.txt
deleted file mode 100644
index 7dfae8bf..00000000
--- a/static/robots.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-User-agent: *
-Allow: /
-Disallow: /next
-Disallow: /2.18
-Disallow: /2.19
-Disallow: /2.20
-Disallow: /2.21
-Disallow: /2.22
-Disallow: /2.23
-Disallow: /2.24
-
-
-Sitemap: https://docs.halo.run/sitemap.xml
\ No newline at end of file
diff --git a/styles/index.scss b/styles/index.scss
new file mode 100644
index 00000000..6b090ae2
--- /dev/null
+++ b/styles/index.scss
@@ -0,0 +1,541 @@
+.docs-home {
+ --home-brand-soft: color-mix(in srgb, var(--rp-c-brand) 9%, var(--rp-c-bg));
+ --home-brand-border: color-mix(in srgb, var(--rp-c-brand) 28%, var(--rp-c-divider));
+ max-width: 1080px;
+ margin: 0 auto;
+ padding: 56px 28px 80px;
+ color: var(--rp-c-text-1);
+}
+
+.docs-hero {
+ display: grid;
+ grid-template-columns: minmax(0, 5fr) minmax(0, 6fr);
+ gap: 56px;
+ align-items: center;
+ padding-bottom: 64px;
+}
+
+.docs-hero__intro h1 {
+ margin: 0;
+ font-size: clamp(34px, 4.5vw, 44px);
+ font-weight: 720;
+ letter-spacing: -0.035em;
+ line-height: 1.15;
+ text-wrap: balance;
+}
+
+.docs-hero__intro > p {
+ max-width: 32em;
+ margin: 30px 0 30px;
+ color: var(--rp-c-text-2);
+ font-size: 16px;
+ line-height: 1.75;
+}
+
+.docs-hero__cta {
+ display: inline-flex;
+ min-height: 46px;
+ align-items: center;
+ gap: 8px;
+ padding: 0 20px;
+ border-radius: 10px;
+ background: var(--rp-c-text-1);
+ color: var(--rp-c-bg) !important;
+ font-size: 15px;
+ font-weight: 600;
+ text-decoration: none;
+ transition:
+ opacity 180ms ease,
+ transform 180ms ease;
+}
+
+.docs-hero__cta span {
+ transition: transform 180ms ease;
+}
+
+.docs-hero__cta:hover {
+ opacity: 0.85;
+}
+
+.docs-hero__cta:hover span {
+ transform: translateX(3px);
+}
+
+.docs-hero__cta:active {
+ transform: translateY(1px);
+}
+
+.docs-hero__platforms {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 10px;
+ margin-top: 20px;
+}
+
+.docs-hero__platforms a {
+ display: inline-flex;
+ min-height: 36px;
+ align-items: center;
+ gap: 8px;
+ padding: 0 12px;
+ border: 1px solid var(--rp-c-divider);
+ border-radius: 10px;
+ color: var(--rp-c-text-2);
+ font-size: 14px;
+ text-decoration: none;
+ transition:
+ border-color 160ms ease,
+ background 160ms ease,
+ color 160ms ease;
+}
+
+.docs-hero__platforms a svg {
+ flex: 0 0 auto;
+}
+
+.docs-hero__platforms a:hover {
+ border-color: var(--home-brand-border);
+ background: var(--home-brand-soft);
+ color: var(--rp-c-brand);
+}
+
+.docs-hero__shot {
+ display: block;
+ width: 100%;
+ height: auto;
+ border-radius: 5px;
+}
+
+.docs-home a:focus-visible {
+ outline: 2px solid var(--rp-c-brand);
+ outline-offset: 3px;
+}
+
+.docs-section {
+ margin-top: 52px;
+}
+
+.docs-section__heading {
+ display: flex;
+ align-items: baseline;
+ justify-content: space-between;
+ gap: 20px;
+ margin-bottom: 18px;
+}
+
+.docs-section__heading h2 {
+ margin: 0;
+ font-size: 20px;
+ font-weight: 680;
+ letter-spacing: -0.015em;
+}
+
+.docs-section__heading > a {
+ color: var(--rp-c-text-2);
+ font-size: 13px;
+ text-decoration: none;
+}
+
+.docs-section__heading > a:hover {
+ color: var(--rp-c-brand);
+}
+
+.quick-start {
+ display: grid;
+ grid-template-columns: minmax(0, 1.35fr) minmax(260px, 0.65fr);
+ grid-template-rows: repeat(2, minmax(96px, auto));
+ gap: 14px;
+}
+
+.quick-start a {
+ color: inherit;
+ text-decoration: none;
+ transition:
+ background 180ms ease,
+ transform 180ms ease;
+}
+
+.quick-start__main {
+ display: flex;
+ grid-row: 1 / 3;
+ flex-direction: column;
+ justify-content: flex-end;
+ min-height: 210px;
+ padding: 24px;
+ overflow: hidden;
+ border-radius: 16px;
+ background:
+ radial-gradient(circle at 86% 10%, rgb(255 255 255 / 0.14), transparent 34%),
+ linear-gradient(
+ 165deg,
+ color-mix(in srgb, var(--rp-c-brand) 72%, #051322),
+ color-mix(in srgb, var(--rp-c-brand) 40%, #030d18)
+ );
+ color: rgb(255 255 255 / 0.94) !important;
+}
+
+.quick-start__main > span {
+ margin-bottom: auto;
+ color: rgb(255 255 255 / 0.9);
+ font-size: 13px;
+ font-weight: 600;
+}
+
+.quick-start__main strong {
+ font-size: 28px;
+ font-weight: 700;
+ letter-spacing: -0.025em;
+}
+
+.quick-start__main p {
+ max-width: 500px;
+ margin: 8px 0 16px;
+ color: rgb(255 255 255 / 0.9);
+ font-size: 14px;
+ line-height: 1.65;
+}
+
+.quick-start__main b {
+ font-size: 14px;
+ font-weight: 650;
+}
+
+.quick-start__main b span {
+ display: inline-block;
+ margin-left: 5px;
+ transition: transform 180ms ease;
+}
+
+.quick-start__main:hover {
+ transform: translateY(-2px);
+}
+
+.quick-start__main:hover b span {
+ transform: translateX(3px);
+}
+
+.quick-start__item {
+ position: relative;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ padding: 16px 48px 16px 22px;
+ border-radius: 16px;
+ background: var(--rp-c-bg-soft);
+}
+
+.quick-start__item strong {
+ font-size: 16px;
+ font-weight: 650;
+}
+
+.quick-start__item p {
+ margin: 6px 0 0;
+ color: var(--rp-c-text-2);
+ font-size: 13px;
+ line-height: 1.55;
+}
+
+.quick-start__item > span {
+ position: absolute;
+ top: 50%;
+ right: 24px;
+ color: var(--rp-c-text-3);
+ transform: translateY(-50%);
+ transition:
+ color 180ms ease,
+ transform 180ms ease;
+}
+
+.quick-start__item:hover {
+ background: var(--home-brand-soft);
+ transform: translateY(-2px);
+}
+
+.quick-start__item:hover > span {
+ color: var(--rp-c-brand);
+ transform: translate(3px, -50%);
+}
+
+.topic-groups {
+ display: grid;
+ grid-template-columns: repeat(2, minmax(0, 1fr));
+ gap: 20px;
+}
+
+.topic-group {
+ display: flex;
+ flex-direction: column;
+ padding: 24px;
+ border-radius: 16px;
+ background: var(--rp-c-bg-soft);
+}
+
+.topic-group header h3 {
+ margin: 0;
+ font-size: 17px;
+ font-weight: 680;
+ letter-spacing: -0.015em;
+}
+
+.topic-group header p {
+ margin: 6px 0 18px;
+ color: var(--rp-c-text-2);
+ font-size: 13px;
+ line-height: 1.6;
+}
+
+.topic-group nav {
+ display: grid;
+ grid-template-columns: repeat(2, minmax(0, 1fr));
+ gap: 4px 12px;
+ margin-bottom: 20px;
+}
+
+.topic-group nav a {
+ display: flex;
+ align-items: center;
+ gap: 11px;
+ margin-left: -8px;
+ padding: 7px 8px;
+ border-radius: 10px;
+ color: var(--rp-c-text-2);
+ font-size: 14px;
+ text-decoration: none;
+ transition:
+ background 160ms ease,
+ color 160ms ease;
+}
+
+.topic-group nav a:hover {
+ background: var(--home-brand-soft);
+ color: var(--rp-c-text-1);
+}
+
+.topic-link__icon {
+ display: flex;
+ width: 32px;
+ height: 32px;
+ flex: 0 0 auto;
+ align-items: center;
+ justify-content: center;
+ border-radius: 8px;
+ background: color-mix(in srgb, var(--rp-c-text-1) 6%, var(--rp-c-bg));
+ color: var(--rp-c-text-2);
+ transition:
+ background 160ms ease,
+ color 160ms ease;
+}
+
+.topic-group nav a:hover .topic-link__icon {
+ background: color-mix(in srgb, var(--rp-c-brand) 14%, var(--rp-c-bg));
+ color: var(--rp-c-brand);
+}
+
+.topic-group__all {
+ display: flex;
+ align-items: center;
+ gap: 5px;
+ margin-top: auto;
+ color: var(--rp-c-text-2);
+ font-size: 13px;
+ font-weight: 650;
+ text-decoration: none;
+ transition: color 160ms ease;
+ margin-left: 2px;
+}
+
+.topic-group__all:hover {
+ color: var(--rp-c-brand);
+}
+
+.topic-group__all span {
+ transition: transform 160ms ease;
+}
+
+.topic-group__all:hover span {
+ transform: translateX(3px);
+}
+
+.docs-help {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ gap: 28px;
+ margin-top: 52px;
+ padding-top: 24px;
+ border-top: 1px solid var(--rp-c-divider-light);
+}
+
+.docs-help > div {
+ display: grid;
+ gap: 4px;
+}
+
+.docs-help strong {
+ font-size: 14px;
+ font-weight: 650;
+}
+
+.docs-help > div span {
+ color: var(--rp-c-text-3);
+ font-size: 13px;
+}
+
+.docs-help nav {
+ display: flex;
+ flex: 0 0 auto;
+ gap: 20px;
+}
+
+.docs-help a {
+ color: var(--rp-c-text-2);
+ font-size: 13px;
+ text-decoration: none;
+}
+
+.docs-help a:hover {
+ color: var(--rp-c-brand);
+}
+
+@media (max-width: 760px) {
+ .docs-home {
+ padding: 36px 20px 56px;
+ }
+
+ .docs-hero {
+ grid-template-columns: 1fr;
+ gap: 36px;
+ padding-bottom: 48px;
+ }
+
+ .docs-hero__intro h1 {
+ font-size: 34px;
+ }
+
+ .docs-hero__intro > p {
+ margin-bottom: 24px;
+ font-size: 15px;
+ }
+
+ .docs-section {
+ margin-top: 40px;
+ }
+
+ .quick-start,
+ .topic-groups {
+ grid-template-columns: 1fr;
+ }
+
+ .topic-groups {
+ gap: 16px;
+ }
+
+ .quick-start {
+ grid-template-rows: auto;
+ }
+
+ .quick-start__main {
+ grid-row: auto;
+ min-height: 180px;
+ padding: 20px;
+ }
+
+ .quick-start__item {
+ min-height: 88px;
+ }
+
+ .docs-help {
+ align-items: flex-start;
+ flex-direction: column;
+ gap: 18px;
+ }
+}
+
+@media (max-width: 420px) {
+ .topic-group nav {
+ grid-template-columns: 1fr;
+ }
+}
+
+@media (prefers-reduced-motion: reduce) {
+ .docs-hero__cta,
+ .docs-hero__cta span,
+ .docs-hero__platforms a,
+ .quick-start a,
+ .quick-start__main b span,
+ .quick-start__item > span,
+ .topic-group nav a,
+ .topic-link__icon,
+ .topic-group__all span {
+ transition: none;
+ }
+}
+
+.site-footer {
+ border-top: 1px solid var(--rp-c-divider-light);
+}
+
+.site-footer__columns {
+ display: grid;
+ grid-template-columns: repeat(4, minmax(0, 1fr));
+ gap: 32px;
+ max-width: 1080px;
+ margin: 0 auto;
+ padding: 48px 28px 32px;
+}
+
+.site-footer__column h4 {
+ margin: 0 0 14px;
+ color: var(--rp-c-text-1);
+ font-size: 14px;
+ font-weight: 650;
+}
+
+.site-footer__column ul {
+ display: grid;
+ gap: 10px;
+ margin: 0;
+ padding: 0;
+ list-style: none;
+}
+
+.site-footer__column a {
+ color: var(--rp-c-text-2);
+ font-size: 13px;
+ text-decoration: none;
+ transition: color 160ms ease;
+}
+
+.site-footer__column a:hover {
+ color: var(--rp-c-brand);
+}
+
+.site-footer__copyright {
+ padding: 0 28px 32px;
+ color: var(--rp-c-text-3);
+ font-size: 13px;
+ text-align: center;
+}
+
+.site-footer__copyright a {
+ margin-left: 8px;
+ color: inherit;
+ text-decoration: none;
+ transition: color 160ms ease;
+}
+
+.site-footer__copyright a:hover {
+ color: var(--rp-c-brand);
+}
+
+@media (max-width: 760px) {
+ .site-footer__columns {
+ grid-template-columns: repeat(2, minmax(0, 1fr));
+ padding: 36px 20px 24px;
+ }
+
+ .site-footer__copyright {
+ padding: 0 20px 24px;
+ }
+}
diff --git a/theme/FooterColumns.tsx b/theme/FooterColumns.tsx
new file mode 100644
index 00000000..f7619501
--- /dev/null
+++ b/theme/FooterColumns.tsx
@@ -0,0 +1,154 @@
+import { Link } from '@rspress/core/theme-original';
+
+interface FooterItem {
+ text: string;
+ link: string;
+ external?: boolean;
+}
+
+const columns: { title: string; items: FooterItem[] }[] = [
+ {
+ title: '关于',
+ items: [
+ { text: '关于我们', link: 'https://www.halo.run/about', external: true },
+ { text: '应用市场', link: 'https://www.halo.run/store', external: true },
+ {
+ text: 'GitHub 组织',
+ link: 'https://github.com/halo-dev',
+ external: true,
+ },
+ {
+ text: 'Gitee 组织',
+ link: 'https://gitee.com/halo-dev',
+ external: true,
+ },
+ {
+ text: 'GitCode 仓库',
+ link: 'https://gitcode.com/feizhiyun/halo',
+ external: true,
+ },
+ { text: '版本发布', link: 'https://releases.halo.run', external: true },
+ {
+ text: 'Server Status',
+ link: 'https://status.halo.run',
+ external: true,
+ },
+ ],
+ },
+ {
+ title: '文档',
+ items: [
+ { text: '安装指南', link: '/guide/install/' },
+ { text: '用户指南', link: '/guide/use/' },
+ { text: '开发者指南', link: '/developer-guide/' },
+ { text: '参与贡献', link: '/guide/contribution/' },
+ { text: '应用文档', link: 'https://www.halo.run/docs', external: true },
+ {
+ text: '知识库',
+ link: 'https://www.halo.run/categories/kb',
+ external: true,
+ },
+ ],
+ },
+ {
+ title: '社区',
+ items: [
+ { text: '官方论坛', link: 'https://bbs.halo.run', external: true },
+ {
+ text: '官方资讯群',
+ link: 'https://www.halo.run/upload/store-resources/autoHalonews.jpg',
+ external: true,
+ },
+ {
+ text: 'GitHub Issues',
+ link: 'https://github.com/halo-dev/halo/issues',
+ external: true,
+ },
+ {
+ text: 'GitHub Discussions',
+ link: 'https://github.com/halo-dev/halo/discussions',
+ external: true,
+ },
+ {
+ text: 'Telegram Channel',
+ link: 'https://t.me/halo_dev',
+ external: true,
+ },
+ { text: 'Telegram Group', link: 'https://t.me/HaloBlog', external: true },
+ ],
+ },
+ {
+ title: '友情链接',
+ items: [
+ {
+ text: 'FIT2CLOUD 飞致云',
+ link: 'https://www.fit2cloud.com/',
+ external: true,
+ },
+ { text: '凌霞软件', link: 'https://www.lxware.cn/', external: true },
+ {
+ text: '1Panel - 开源 Linux 面板(中国站)',
+ link: 'https://1panel.cn/',
+ external: true,
+ },
+ {
+ text: '1Panel - VPS Control Panel (International)',
+ link: 'https://1panel.pro/',
+ external: true,
+ },
+ {
+ text: 'JumpServer - 开源堡垒机(中国站)',
+ link: 'https://www.jumpserver.org/',
+ external: true,
+ },
+ {
+ text: 'JumpServer - Open-Source PAM (International)',
+ link: 'https://www.jumpserver.com/',
+ external: true,
+ },
+ {
+ text: 'MaxKB AI 知识库问答系统',
+ link: 'https://maxkb.cn',
+ external: true,
+ },
+ ],
+ },
+];
+
+function FooterLink({ item }: { item: FooterItem }) {
+ if (item.external) {
+ return (
+
+ {item.text}
+
+ );
+ }
+ return {item.text};
+}
+
+export function FooterColumns() {
+ return (
+
+ );
+}
diff --git a/theme/css.d.ts b/theme/css.d.ts
new file mode 100644
index 00000000..ce785a9a
--- /dev/null
+++ b/theme/css.d.ts
@@ -0,0 +1,3 @@
+declare module '*.module.scss';
+declare module '*.scss';
+declare module '*.css';
diff --git a/theme/images/bt-panel-logo.svg b/theme/images/bt-panel-logo.svg
new file mode 100644
index 00000000..157bbbd5
--- /dev/null
+++ b/theme/images/bt-panel-logo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/theme/index.tsx b/theme/index.tsx
new file mode 100644
index 00000000..e086e460
--- /dev/null
+++ b/theme/index.tsx
@@ -0,0 +1,12 @@
+import { Layout as BasicLayout } from '@rspress/core/theme-original';
+import { FooterColumns } from './FooterColumns';
+import './override.scss';
+import MingcuteMoonStarsLine from '~icons/mingcute/moon-stars-line';
+import MingcuteSunLine from '~icons/mingcute/sun-line';
+
+export { MingcuteMoonStarsLine as IconMoon, MingcuteSunLine as IconSun };
+
+const Layout = () => } />;
+
+export * from '@rspress/core/theme-original';
+export { Layout };
diff --git a/theme/override.scss b/theme/override.scss
new file mode 100644
index 00000000..40acddad
--- /dev/null
+++ b/theme/override.scss
@@ -0,0 +1,43 @@
+:root {
+ --rp-content-max-width: 900px;
+ --rp-content-padding-y: 24px;
+ --rp-content-padding-x: 40px;
+}
+
+.rp-nav-menu {
+ --rp-nav-menu-item-gap: 28px;
+}
+
+.rp-code-button-group {
+ &__icon{
+ color: #8b8b8b;
+
+ &:hover {
+ color: #9f9c9c;
+ }
+ }
+}
+
+.rp-overview-search {
+ input {
+ background-color: #f5f5f5;
+ border: none;
+ transition: background-color 0.2s ease-in-out;
+
+ &:active, &:focus {
+ background-color: #eaeaea;
+ }
+ }
+}
+
+.rp-dark{
+ .rp-overview-search {
+ input {
+ background-color: #1e1e1e;
+
+ &:active, &:focus {
+ background-color: #2e2e2e;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 00000000..d74ca082
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,30 @@
+{
+ "compilerOptions": {
+ "lib": ["DOM", "ES2023"],
+ "jsx": "react-jsx",
+ "target": "ES2023",
+ "noEmit": true,
+ "skipLibCheck": true,
+ "useDefineForClassFields": true,
+
+ /* modules */
+ "module": "ESNext",
+ "moduleDetection": "force",
+ "moduleResolution": "bundler",
+ "verbatimModuleSyntax": true,
+ "resolveJsonModule": true,
+ "allowImportingTsExtensions": true,
+ "isolatedModules": true,
+
+ /* type checking */
+ "strict": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+
+ "types": ["unplugin-icons/types/react"]
+ },
+ "include": ["docs", "theme", "rspress.config.ts"],
+ "mdx": {
+ "checkMdx": true
+ }
+}
diff --git a/versioned_docs/version-2.22/about.md b/versioned_docs/version-2.22/about.md
deleted file mode 100644
index d0eb7313..00000000
--- a/versioned_docs/version-2.22/about.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-title: 关于文档
-description: 关于本文档站点的一些说明
----
-
-:::note
-此文档使用 [Docusaurus](https://docusaurus.io/) 搭建,感谢 [Docusaurus](https://github.com/facebook/docusaurus) 社区所做的贡献。
-:::
-
-## 参与贡献
-
-:::tip
-如果你发现文档中有不正确或者需要添加的内容,非常欢迎参与到文档编辑当中。
-:::
-
-当前文档的仓库地址为 [halo-dev/docs](https://github.com/halo-dev/docs) ,所以你可以 fork 此仓库,修改之后提交 `Pull request` 等待我们合并即可。
diff --git a/versioned_docs/version-2.22/contribution/issue.md b/versioned_docs/version-2.22/contribution/issue.md
deleted file mode 100644
index 26d52fb1..00000000
--- a/versioned_docs/version-2.22/contribution/issue.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-title: 问题反馈
-description: 问题反馈渠道及指南
----
-
-:::info
-如果您在使用过程中遇到了什么问题,您可以通过下面的方式反馈,但请尽量按照要求提出反馈。
-:::
-
-## GitHub
-
-- [https://github.com/halo-dev/halo/issues](https://github.com/halo-dev/halo/issues)
-- [https://github.com/orgs/lxware-dev/discussions](https://github.com/orgs/lxware-dev/discussions):Halo 付费版或者付费应用的问题可以在这里进行反馈。
-
-如果你在使用过程中,遇到了一些 bug 或者需要添加某些新特性,请尽量在 GitHub 进行反馈,这非常有助于我们跟踪解决此问题,您也可以很方便的接收到处理状态。
-
-建议步骤:
-
-1. 在 GitHub 搜索相关问题,看看是否有其他人已经提到了此问题。
-2. 如果当前还没有人遇到您类似的问题,可以创建新的 Issue 或者 Discussion。
-3. 选择正确的反馈类型。
-4. 请尽可能详细的按照模板填写内容。
-5. 提交反馈。
-
-## Halo 官方社区
-
-链接:[https://bbs.halo.run](https://bbs.halo.run)
-
-此平台主要目的用于与其他 Halo 用户进行交流。但如果您对 GitHub 不是很熟悉或者没有账号,您也可以在此平台进行反馈。
diff --git a/versioned_docs/version-2.22/contribution/pr.md b/versioned_docs/version-2.22/contribution/pr.md
deleted file mode 100644
index 5f3b7e8a..00000000
--- a/versioned_docs/version-2.22/contribution/pr.md
+++ /dev/null
@@ -1,110 +0,0 @@
----
-title: 代码贡献
-description: 代码贡献指南
----
-
-欢迎关注并有想法参与 Halo 的开发,以下是关于如何参与到 Halo 项目的指南,仅供参考。
-
-## 发现 Issue
-
-所有的代码尽可能都有依据(Issue),不是凭空产生。
-
-### 寻找一个 Good First Issue
-
-> 这个步骤非常适合首次贡献者。
-
-在 [halo-dev](https://github.com/halo-dev) 和 [halo-sigs](https://github.com/halo-sigs) 组织下,有非常多的仓库。每个仓库下都有可能包含一些“首次贡献者”友好的 Issue,主要是为了给贡献者提供一个友好的体验。该类 Issue
-一般会用 `good-first-issue` 标签标记。标签 `good-first-issue` 表示该 Issue 不需要对 Halo 有深入的理解也能够参与。
-
-请点击:[good-first-issue](https://github.com/issues?q=org%3Ahalo-dev+is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22+no%3Aassignee+)
-查看关于 Halo 的 Good First Issue。
-
-### 认领 Issue
-
-若对任何一个 Issue 感兴趣,请尝试在 Issue 进行回复,讨论解决 Issue 的思路。确定后可直接通过 `/assign` 或者 `/assign @GitHub 用户名` 认领这个
-Issue。这样可避免两位贡献者在同一个问题上花时间。
-
-## 代码贡献步骤
-
-1. Fork 此仓库
-
- 点击 Halo 仓库主页右上角的 `Fork` 按钮即可。
-
-2. Clone 仓库到本地
-
- ```bash
- git clone https://github.com/{YOUR_USERNAME}/halo --recursive
- # 或者 git clone git@github.com:{YOUR_USERNAME}/halo.git --recursive
- ```
-
-3. 添加主仓库
-
- 添加主仓库方便未来同步主仓库最新的 commits 以及创建新的分支。
-
- ```bash
- git remote add upstream https://github.com/halo-dev/halo.git
- # 或者 git remote add upstream git@github.com:halo-dev/halo.git
- git fetch upstream main
- ```
-
-4. 创建新的开发分支
-
- 我们需要从主仓库的主分支创建一个新的开发分支。
-
- ```bash
- git checkout upstream/main
- git checkout -b {BRANCH_NAME}
- ```
-
-5. 提交代码
-
- ```bash
- git add .
- git commit -s -m "Fix a bug king"
- git push origin {BRANCH_NAME}
- ```
-
-6. 合并主分支
-
- 在提交 Pull Request 之前,尽量保证当前分支和主分支的代码尽可能同步,这时需要我们手动操作。示例:
-
- ```bash
- git fetch upstream/main
- git merge upstream/main
- git push origin {BRANCH_NAME}
- ```
-
-## Pull Request
-
-进入此阶段说明已经完成了代码的编写,测试和自测,并且准备好接受 Code Review。
-
-### 创建 Pull Request
-
-回到自己的仓库页面,选择 `New pull request` 按钮,创建 `Pull request` 到原仓库的 `main` 分支。
-然后等待我们 Review 即可,如有 `Change Request`,再本地修改之后再次提交即可。
-
-提交 Pull Request 的注意事项:
-
-- 提交 Pull Request 请充分自测。
-- 每个 Pull Request 尽量只解决一个 Issue,特殊情况除外。
-- 应尽可能多的添加单元测试,其他测试(集成测试和 E2E 测试)可看情况添加。
-- 不论需要解决的 Issue 发生在哪个版本,提交 Pull Request 的时候,请将主仓库的主分支设置为 `main`。例如:即使某个 Bug 于 Halo 2.0.x 被发现,但是提交 Pull Request 仍只针对
- `main` 分支,等待 Pull Request 合并之后,我们会通过 `/cherrypick release-2.0` 或者 `/cherry-pick release-2.1` 指令将此 Pull Request
- 的修改应用到 `release-2.0` 和 `release-2.1` 分支上。
-
-### 更新 commits
-
-Code Review 阶段可能需要 Pull Request 作者重新修改代码,请直接在当前分支 commit 并 push 即可,无需关闭并重新提交 Pull Request。示例:
-
-```bash
-git add .
-git commit -s -m "Refactor some code according code review"
-git push origin bug/king
-```
-
-同时,若已经进入 Code Review 阶段,请不要强制推送 commits 到当前分支。否则 Reviewers 需要从头开始 Code Review。
-
-### 开发规范
-
-请参考 [https://docs.halo.run/developer-guide/core/code-style](https://docs.halo.run/developer-guide/core/code-style)
-,请确保所有代码格式化之后再提交。
diff --git a/versioned_docs/version-2.22/developer-guide/annotations-form.md b/versioned_docs/version-2.22/developer-guide/annotations-form.md
deleted file mode 100644
index 89899eaa..00000000
--- a/versioned_docs/version-2.22/developer-guide/annotations-form.md
+++ /dev/null
@@ -1,89 +0,0 @@
----
-title: 元数据表单定义
----
-
-在 Halo 2.0,所有的模型都包含了 `metadata.annotations` 字段,用于存储元数据信息。元数据信息可以用于存储一些自定义的信息,可以等同于扩展字段。此文档主要介绍如何在 Halo 中为具体的模型定义元数据编辑表单,至于如何在插件或者主题模板中使用,请看插件或者主题的文档。
-
-定义元数据编辑表单同样使用 `FormKit Schema`,但和主题或插件的定义方式稍有不同,其中输入组件类型可参考 [表单定义](./form-schema.md)。
-
-:::info[提示]
-因为 `metadata.annotations` 是一个键值都为字符串类型的对象,所以表单项的值必须为字符串类型。这就意味着,FormKit 的 `number`、`group`、`repeater` 等类型的输入组件都不能使用。`checkbox` 类型的输入组件应通过 `on-value` 和 `off-value` 指定字符串值,以替代默认的布尔值。
-:::
-
-## AnnotationSetting 资源定义方式
-
-```yaml title="annotation-setting.yaml"
-apiVersion: v1alpha1
-kind: AnnotationSetting
-metadata:
- name: my-annotation-setting
-spec:
- targetRef:
- group: content.halo.run
- kind: Post
- formSchema:
- - $formkit: "text"
- name: "download"
- label: "下载地址"
- - $formkit: "text"
- name: "version"
- label: "版本"
-```
-
-以上定义为文章模型添加了两个元数据字段,分别为 `download` 和 `version`,分别对应了下载地址和版本号,最终效果:
-
-
-
-字段说明:
-
-1. `metadata.name`:唯一标识,命名规范可参考 [metadata name](./plugin/api-reference/server/extension.md#naming-spec-for-metadata-name),为了尽可能避免冲突,建议自定义前缀以及追加随机字符串,如:`theme-earth-post-wanfs5`。
-2. `spec.targetRef`:模型的关联,即为哪个模型添加元数据表单,目前支持的模型可查看下方的列表。
-3. `spec.formSchema`:表单的定义,使用 FormKit Schema 来定义。虽然我们使用的 YAML,但与 FormKit Schema 完全一致。
-
-targetRef 支持列表:
-
-| 对应模型 | group | kind |
-| ---------- | ---------------- | ---------- |
-| 文章 | content.halo.run | Post |
-| 自定义页面 | content.halo.run | SinglePage |
-| 文章分类 | content.halo.run | Category |
-| 文章标签 | content.halo.run | Tag |
-| 菜单项 | `""` | MenuItem |
-| 用户 | `""` | User |
-
-## 为多个模型定义表单
-
-考虑到某些情况可能会同时为多个模型添加元数据表单,推荐在一个 `yaml` 文件中使用 `---` 来分割多个资源定义,如下:
-
-```yaml title="annotation-setting.yaml"
-apiVersion: v1alpha1
-kind: AnnotationSetting
-metadata:
- name: my-annotation-setting
-spec:
- targetRef:
- group: content.halo.run
- kind: Post
- formSchema:
- - $formkit: "text"
- name: "download"
- label: "下载地址"
- - $formkit: "text"
- name: "version"
- label: "版本"
-
----
-
-apiVersion: v1alpha1
-kind: AnnotationSetting
-metadata:
- name: my-annotation-setting
-spec:
- targetRef:
- group: ""
- kind: MenuItem
- formSchema:
- - $formkit: "text"
- name: "icon"
- label: "图标"
-```
diff --git a/versioned_docs/version-2.22/developer-guide/appendix/publish-app.md b/versioned_docs/version-2.22/developer-guide/appendix/publish-app.md
deleted file mode 100644
index 904ebbcf..00000000
--- a/versioned_docs/version-2.22/developer-guide/appendix/publish-app.md
+++ /dev/null
@@ -1,136 +0,0 @@
----
-title: 发布应用
-description: 了解如何与我们的社区分享你的主题和插件
----
-
-了解如何与我们的社区分享你的主题和插件,下文以应用统称主题和插件。
-
-## GitHub 托管
-
-如果你的应用是一个开源应用,那么我们推荐将其托管在 GitHub 上,可以获得以下好处:
-
-1. 可以利用 GitHub 的 CI/CD 功能,实现自动构建和版本发布。
-2. 可以通过 GitHub 的 Issues 功能跟踪用户反馈。
-3. 可以获得更多用户关注和贡献。
-
-除此之外,我们推荐为 GitHub 仓库添加与 Halo 相关的 [Topics](https://github.com/topics),以便让更多用户找到你的应用,比如主题可以添加 [#halo-theme](https://github.com/topics/halo-theme),插件可以添加 [#halo-plugin](https://github.com/topics/halo-plugin)。
-
-## 版本发布
-
-当你完成了你的应用并进行充分测试后,就可以在 GitHub 上创建新的 Release,其中版本规范可以参考[版本控制](#version-control)。
-
-### 集成 CI / CD
-
-我们为 Halo 的主题和插件提供了适用于 GitHub Action 的 CI / CD [工作流](https://github.com/halo-sigs/reusable-workflows),可以非常方便的集成到你的 GitHub 仓库中,以下是示例:
-
-插件 CI:
-
-```yaml title=".github/workflows/ci.yaml"
-name: CI
-
-on:
- push:
- branches:
- - main
- pull_request:
- branches:
- - main
-
-jobs:
- ci:
- uses: halo-sigs/reusable-workflows/.github/workflows/plugin-ci.yaml@v3
- with:
- ui-path: "ui"
- pnpm-version: 9
- node-version: 22
- java-version: 21
-```
-
-插件 CD:
-
-此工作流会在每次发布 Release 时自动执行,会自动构建插件并上传产物到 Release 的 Assets 中。
-
-```yaml title=".github/workflows/cd.yaml"
-name: CD
-
-on:
- release:
- types:
- - published
-
-jobs:
- cd:
- uses: halo-sigs/reusable-workflows/.github/workflows/plugin-cd.yaml@v3
- permissions:
- contents: write
- with:
- pnpm-version: 9
- node-version: 22
- java-version: 21
- skip-appstore-release: true
-```
-
-主题 CD:
-
-此工作流会在每次发布 Release 时自动执行,会自动构建主题并上传产物到 Release 的 Assets 中。
-
-```yaml title=".github/workflows/cd.yaml"
-name: CD
-
-on:
- release:
- types:
- - published
-
-jobs:
- cd:
- uses: halo-sigs/reusable-workflows/.github/workflows/theme-cd.yaml@v3
- permissions:
- contents: write
- with:
- skip-appstore-release: true
- node-version: 22
- pnpm-version: 9
-```
-
-关于 CI / CD 的更多详细信息,可查阅:[halo-sigs/reusable-workflows](https://github.com/halo-sigs/reusable-workflows)
-
-## 分享应用
-
-为了方便让 Halo 的用户知道你的应用,可以在以下渠道分享:
-
-1. [halo-sigs/awesome-halo](https://github.com/halo-sigs/awesome-halo):你可以向这个仓库发起一个 PR 提交你的应用信息。
-2. [Halo 论坛](https://bbs.halo.run/t/plugins):你可以在 Halo 官方社区的[插件](https://bbs.halo.run/t/plugins)和[主题](https://bbs.halo.run/t/themes)板块发布你的应用。
-
-## 发布到应用市场
-
-Halo 的官方应用市场接受新应用的提交,但由于应用市场仅支持作者自行管理应用以及版本,还不支持自助新建应用并发布,所以发布到应用市场需要按照以下流程:
-
-1. 向 [halo-sigs/awesome-halo](https://github.com/halo-sigs/awesome-halo) 发起一个 PR 提交应用的信息,并勾选 **上架到 Halo 应用市场**。
-2. Halo 官方人员会审核你的应用信息,审核通过后会上架到应用市场。
-3. 如果你需要自行管理应用以及版本,可以在 PR 描述信息中提供 [Halo 官网](https://www.halo.run/)的用户名,我们会在应用发布之后将管理权限授予你。
-
-### 要求
-
-在你决定上架到 Halo 应用市场前,请确保已经完成以下要求:
-
-1. 插件必须正确设置 `plugin.yaml` 中的 logo 字段,不能是插件开发模板中默认的 Halo 图标。
-2. 主题和插件的描述文件中必须正确设置 `homepage`、`issues`、`license` 字段,详细解释:
- 1. `homepage`:应用的主页,可以填写为 GitHub 仓库地址或者 Halo 应用市场的应用详情页地址。
- 2. `issues`:应用的反馈地址,可以填写为 GitHub 仓库的 issues 地址。
- 3. `license`:应用的发行许可证。
-3. 应用必须编写介绍和使用文档。
-4. 应用如果是基于其他程序开发的,需要保证许可证兼容。
-
-### 自动发布
-
-当你有了应用的管理权限之后,你可以修改上述 CI / CD 工作流,以实现在 GitHub 发布 Release 之后自动同步到应用市场,以下是具体步骤:
-
-1. 移除 `skip-appstore-release: true` 配置,或者设置为 `false`。
-2. 在 `with` 中添加 `app-id` 配置,值为应用市场的应用 ID。
-3. 在 Halo 官网的个人中心创建一个新的[个人令牌](https://www.halo.run/uc/profile?tab=pat),勾选 **应用市场开发者 > 版本管理**。
-4. 在 GitHub 仓库的设置 -> `Secrets and variables` 中新建一个 Secret,名称为 `HALO_PAT`,值为你在 Halo 官网创建的个人令牌。
-
-## 版本控制 {#version-control}
-
-为了保持 Halo 生态系统的健康、可靠和安全,每次你对自己拥有的应用进行重大更新时,我们建议在遵循 [semantic versioning spec](http://semver.org/) 的基础上发布新版本。遵循语义版本控制规范有助于其他依赖你代码的开发人员了解给定版本的更改程度,并在必要时调整自己的代码。
diff --git a/versioned_docs/version-2.22/developer-guide/core/build.md b/versioned_docs/version-2.22/developer-guide/core/build.md
deleted file mode 100644
index 2e397539..00000000
--- a/versioned_docs/version-2.22/developer-guide/core/build.md
+++ /dev/null
@@ -1,84 +0,0 @@
----
-title: 构建
-description: 构建为可执行 JAR 和 Docker 镜像的文档
----
-
-:::info
-在此之前,我们推荐你先阅读[《准备工作》](./prepare),检查本地环境是否满足要求。
-:::
-
-一般情况下,为了保证版本一致性和可维护性,我们并不推荐自行构建和二次开发。
-
-## 克隆项目
-
-如果你已经 Fork 了相关仓库,请将以下命令中的 `halo-dev` 替换为你的 GitHub 用户名。
-
-```bash
-git clone https://github.com/halo-dev/halo
-
-# 或者使用 ssh 的方式 clone(推荐)
-# git clone git@github.com:halo-dev/halo.git
-
-# 或者使用 GitHub CLI 克隆(推荐)
-# gh repo clone halo-dev/halo
-
-# 或者使用 GitHub CLI Fork(推荐)
-# gh repo fork halo-dev/halo
-
-cd halo
-
-# 切换到特定的分支或标签,请替换 ${branch_name}
-git checkout ${branch_name}
-```
-
-## 构建 Fat Jar
-
-构建之前需要修改 `gradle.properties` 中的 `version` 属性(推荐遵循 [SemVer 规范](https://semver.org/)),例如:`version=2.22.0`
-
-```bash
-cd path/to/halo
-```
-
-下载预设插件(可选):
-
-```bash
-# Windows
-./gradlew.bat downloadPluginPresets
-
-# macOS / Linux
-./gradlew downloadPluginPresets
-```
-
-构建:
-
-```bash
-# Windows
-./gradlew.bat clean build -x check
-
-# macOS / Linux
-./gradlew clean build -x check
-```
-
-构建完成之后,在 Halo 项目下产生的 `application/build/libs/halo-${version}.jar` 即为构建完成的文件。
-
-最终部署文档可参考:[使用 JAR 文件部署](../../getting-started/install/jar-file.md)。
-
-## 构建 Docker 镜像
-
-在此之前,请确认已经构建好了 Fat Jar。
-
-```bash
-cd path/to/halo
-```
-
-```bash
-# 请替换 ${tag_name}
-docker build -t halo-dev/halo:${tag_name} .
-```
-
-```bash
-# 插件构建完成的版本
-docker images | grep halo
-```
-
-最终部署文档可参考:[使用 Docker Compose 部署](../../getting-started/install/docker-compose.md)。
diff --git a/versioned_docs/version-2.22/developer-guide/core/code-style.md b/versioned_docs/version-2.22/developer-guide/core/code-style.md
deleted file mode 100644
index c23fbc01..00000000
--- a/versioned_docs/version-2.22/developer-guide/core/code-style.md
+++ /dev/null
@@ -1,30 +0,0 @@
----
-title: 代码风格
-description: 代码风格的相关配置说明
----
-
-Halo 添加了 checkstyle 插件,来保证每位提交者代码的风格保持一致,减少无效代码的修改。本篇文章主要讲解如何在 IDEA 中添加 CheckStyle 插件,并引入项目所提供的 checkstyle.xml 配置。
-
-## 安装 CheckStyle-IDEA
-
-- 进入 IDEA 插件市场。
-- 搜索 CheckStyle-IDEA,点击安装即可。
-
-## 配置 CheckStyle
-
-- 进入 CheckStyle 配置(File | Settings | Tools | Checkstyle)。
-- 选择 Checkstyle 版本:9.3(以文件 `application/build.gradle` 中指定的版本为准)。
-- 在配置文件中点击添加按钮,配置描述可随便填写(推荐 Halo Checks),选择 ./config/checkstyle/checkstyle.xml,点击下一步和完成。
-- 勾选刚刚创建的配置文件。
-
-## 配置 Editor
-
-- 进入编辑器配置(File | Settings | Editor | Code Style)
-
-- 导入 checkstyle.xm 配置:
-
-
-
-- 选择 `./config/checkstyle/checkstyle.xml` 配置文件,点击确定即可。
-
-至此,有关代码风格检查工具和格式化配置已经完成。
diff --git a/versioned_docs/version-2.22/developer-guide/core/framework.md b/versioned_docs/version-2.22/developer-guide/core/framework.md
deleted file mode 100644
index 8196c276..00000000
--- a/versioned_docs/version-2.22/developer-guide/core/framework.md
+++ /dev/null
@@ -1,96 +0,0 @@
----
-title: Halo 架构概览
-description: Halo 架构概览
----
-
-Halo 是一个基于 Spring Boot 的 Java Web 应用,Web 层不再使用 Servlet 技术,而是充分向异步和非阻塞的反应式编程靠拢,使用 Netty 作为 Web 服务器,使用 [Reactor](https://projectreactor.io/) 作为异步编程框架,使用 R2DBC 作为数据库访问框架,使用 WebFlux 作为 Web 层框架。
-
-Halo 由以下几个核心模块组成:
-
-- 安全模块:提供用户认证、授权、用户管理等功能。
-- 插件模块:提供插件管理、插件加载、插件通信、扩展点等功能。
-- 主题模块:提供主题管理、模板渲染、主题配置等功能。
-- 内置内容管理模块:提供文章、分类、标签、评论、附件、页面、菜单、设置等功能。
-
-## Halo 核心概念和 Extension
-
-### 自定义模型 {#extension}
-
-Extension 自定义模型提供了一种声明和管理数据模型的方法,它是 Halo 的核心概念之一。Halo 中的所有数据模型都是通过 Extension 来定义的,包括文章、分类、标签、评论、附件、页面、菜单、设置等,这便于插件系统可以灵活的进行数据模型的扩展,设计文档参考:[自定义模型设计](https://github.com/halo-dev/rfcs/tree/main/extension)。
-
-每个自定义模型都有三大类属性:metadata、spec、和 status。
-
-1. metadata 用于标识自定义模型,每个自定义模型都至少有三个 metadata 属性:name、creationTimestamp、version,除此之外还有 labels 用于标识自定义模型的标签,annotations 用于存放扩展信息,deletionTimestamp 用于标识自定义模型是否被删除,finalizers 用于标识自定义模型的是否可回收。
-2. spec 描述用户期望达到的理想状态(Desired State),比如用户可以配置插件的 `spec.enable` 属性为 `true` 来启用插件或者为 `false` 来停用插件,这就是用户期望达到的理想状态,然后插件控制器会根据用户的期望状态来实现插件的启用或停用,它是声明式的,用户只需要声明期望状态,实际状态由具体的控制器来维护,最终达到用户期望的状态。
-3. status 描述当前实际状态(Actual State),比如用户可以通过 `status.phase` 属性来查看插件启用进行到了哪一步,中间过程可能包含多个步骤,比如插件解析、加载、资源准备等,这些步骤都是由插件控制器来实现的,它是实际状态,只要插件控制器还在运行,它就会一直更新状态,最终达到用户期望的状态。
-
-每个自定义模型注册后都会默认生成 CRUD APIs,通过这些 APIs 就可以对自定义模型对象进行增删改查的操作,然后只需要编写控制器来实现自定义模型的业务逻辑即可,这就是 Halo 的异步编程模型。
-
-### 控制器 {#controller}
-
-在 Halo 中,用户通过自定义模型定义资源的期望状态,Controller 负责监视资源的实际状态,当资源的实际状态和“期望状态”不一致时,Controller 则对系统进行必要的更改,以确保两者一致,这个过程被称之为调谐(Reconcile),而实现调谐的逻辑被称之为 Reconciler。Reconciler 获取对象的名称并返回是否需要重试(例如发生一些错误),如果需要重试,则 Controller 会在稍后再次调用 Reconciler,而这个过程会一直重复,直到 Reconciler 返回成功为止,这个过程被称之为调谐循环(Reconciliation Loop)。
-
-### 自定义模型生命周期 {#extension-lifecycle}
-
-所有 Halo 的自定义模型对象都遵循一个共同的生命周期,可以将其视为状态机,尽管某些特定的自定义模型扩展了这一点并提供了更多状态。要编写正确的控制器,了解公共对象生命周期非常重要。
-
-所有自定义模型对象都存在以下状态之一:
-
-- `DOES_NOT_EXIST`:Halo 不知道该对象。该状态不区分“尚未创建”和“已删除”。
-- `ACTIVE`:Halo 知道该对象并且该对象尚未被删除(未设置 `metadata.deletionTimestamp`)。在此状态下,任何更新操作(PUT、PATCH、服务器端处理等)都将导致相同的状态。
-- `DELETING`:Halo 知道该对象,该对象已被删除,但尚未完全删除。这可能是因为对象有一个或多个终结器(在 `metadata.finilizers` 中),客户端仍然可以访问该对象,并且可以看到它正在删除,因为设置了 `metadata.deleteTimestamp` 字段。当最后一个终结器被删除时,该对象将从存储中删除,并真正不存在。
-
-下图描述了上述状态:
-
-```text
- +---- object
- | updated
- v |
- +----------+ |
- | +----+
- object --------->| ACTIVE |
- created | +-----------+
- | +---+------+ |
- | | |
- | | |
-+------------+---+ | |
-| | object deleted |
-| |<--- without finalizers |
-| | object deleted
-| DOES_NOT_EXIST | with finalizers
-| | |
-| |<--- finalizers removed |
-| | | |
-+----------------+ | |
- | |
- | |
- +---+------+ |
- | | |
- | DELETING |<----------+
- | |
- +----------+
-```
-
-总结:自定义模型对象的删除并不是立即生效的,而是需要经过两个步骤,第一步是将对象的 `metadata.deletionTimestamp` 字段设置为当前时间,第二步是将对象的 `metadata.finalizers` 字段设置为空,这样对象才会真正被删除,第一步是由用户发起的,第二步是由 Halo 控制器发起的。
-
-### Secret {#secret}
-
-Secret 用于解决密码、token、密钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到自定义模型的 Spec 中,或 API 响应中。
-
-### ConfigMap {#configmap}
-
-ConfigMap 自定义模型用来保存 key-value pair 配置数据,这个数据可以在 Reconciler 里使用,或者被用来为插件或者主题存储配置数据。
-
-虽然 ConfigMap 跟 Secret 类似,但是 ConfigMap 更方便的处理不含敏感信息的字符串。
-
-### Setting {#setting}
-
-Setting 自定义模型用于提供用户配置声明,用户可以通过 Setting 来声明一些模板需要的配置,比如主题设置、插件设置、系统设置等都可以通过 Setting 来声明,就能在 UI 层面提供配置入口,用户可以通过 UI 来配置这些设置,而不需要修改配置文件。
-
-### 基于角色的访问控制(RBAC){#rbac}
-
-Halo 使用基于角色的访问控制(Role-based Access Control,RBAC)来控制用户对资源的访问权限,RBAC 通过将角色分配给用户来实现访问控制,用户可以通过角色来访问资源,角色可以通过权限来访问资源。
-
-RBAC 主要引入了角色(Role)和角色绑定(RoleBinding)的抽象概念,插件可以通过定义角色来提供用户对资源的分配入口,用户可以通过角色绑定来获取角色,从而获取资源的访问权限。
-
-而对于底层角色,用户分配起来比较麻烦,因此 Halo 提供了**角色模板**的概念,通过将角色标记为模板来使用一组功能相关的角色,如文章查看的角色可能必须包含标签和分类的查看才算是一组完整的功能,因此可以将文章查看的角色标记为模板,并依赖标签和分类的查看角色,这样用户就可以通过角色模板来获取一组功能相关的角色,而不需要一个一个的分配角色。
diff --git a/versioned_docs/version-2.22/developer-guide/core/prepare.md b/versioned_docs/version-2.22/developer-guide/core/prepare.md
deleted file mode 100644
index 6e765f2c..00000000
--- a/versioned_docs/version-2.22/developer-guide/core/prepare.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-title: 准备工作
-description: 开发环境的准备工作
----
-
-## 环境要求
-
-- [OpenJDK 21 LTS](https://github.com/openjdk/jdk)
-- [Node.js 20 LTS](https://nodejs.org)
-- [pnpm 10](https://pnpm.io/)
-- [IntelliJ IDEA](https://www.jetbrains.com/idea/)
-- [Git](https://git-scm.com/)
-- [Docker](https://www.docker.com/)(可选)
-
-## 名词解释
-
-### 工作目录
-
-指 Halo 所依赖的工作目录,在 Halo 运行的时候会在系统当前用户目录下产生一个 halo-next 的文件夹,绝对路径为 ~/halo-next。里面通常包含下列目录或文件:
-
-1. `db`:存放 H2 Database 的物理文件,如果你使用其他数据库,那么不会存在这个目录。
-2. `themes`:里面包含用户所安装的主题。
-2. `plugins`:里面包含用户所安装的插件。
-5. `attachments`:附件目录。
-4. `logs`:运行日志目录。
diff --git a/versioned_docs/version-2.22/developer-guide/core/run.md b/versioned_docs/version-2.22/developer-guide/core/run.md
deleted file mode 100644
index 6d12ac05..00000000
--- a/versioned_docs/version-2.22/developer-guide/core/run.md
+++ /dev/null
@@ -1,122 +0,0 @@
----
-title: 开发环境运行
-description: 开发环境运行的指南
----
-
-:::info
-在此之前,我们推荐你先阅读[《准备工作》](./prepare),检查本地环境是否满足要求。
-:::
-
-## 项目结构说明
-
-目前如果需要完整的运行 Halo,总共需要三个部分:
-
-1. Halo 主项目([halo-dev/halo](https://github.com/halo-dev/halo))
-2. UI,包括 Console 控制台和 UC 个人中心(托管在 Halo 主项目)
-3. 主题(Halo 主项目内已包含默认主题)
-
-:::info[说明]
-从 Halo 2.11 开始,Halo 项目的 `ui` 目录同时包含了 Console(管理控制台)和 UC(个人中心),以下统称为 UI。
-
-当前 Halo 主项目并不会将 UI 的构建资源托管到 Git 版本控制,所以在开发环境是需要同时运行 UI 项目的。当然,在我们的最终发布版本的时候会在 CI 中自动构建 UI 到 Halo 主项目。
-:::
-
-## 克隆项目
-
-如果你已经 Fork 了相关仓库,请将以下命令中的 `halo-dev` 替换为你的 GitHub 用户名。
-
-```bash
-git clone https://github.com/halo-dev/halo
-
-# 或者使用 ssh 的方式 clone(推荐)
-# git clone git@github.com:halo-dev/halo.git
-
-# 或者使用 GitHub CLI 克隆(推荐)
-# gh repo clone halo-dev/halo
-
-# 或者使用 GitHub CLI Fork(推荐)
-# gh repo fork halo-dev/halo
-```
-
-## 运行 UI 服务
-
-```bash
-cd path/to/halo/ui
-pnpm install
-pnpm build:packages
-pnpm dev
-```
-
-最终控制台打印了如下信息即代表运行正常:
-
-```bash
-VITE v4.2.3 ready in 638 ms
-
-# Console 控制台服务
-➜ Local: http://localhost:3000/console/
-
-# UC 个人中心服务
-➜ Local: http://localhost:4000/uc/
-```
-
-:::info[提示]
-请不要直接使用 UI 的运行端口(3000 / 4000)访问,会因为跨域问题导致无法正常登录,建议按照后续的步骤以 dev 的配置文件运行 Halo,在 dev 的配置文件中,我们默认代理了 UI 页面的访问地址,所以后续访问 UI 页面使用 `http://localhost:8090/console` 和 `http://localhost:8090/uc` 访问即可,代理的相关配置:
-
-```yaml
-halo:
- console:
- proxy:
- endpoint: http://localhost:3000/
- enabled: true
- uc:
- proxy:
- endpoint: http://localhost:4000/
- enabled: true
-```
-
-:::
-
-## 运行 Halo
-
-1. 在 IntelliJ IDEA 中打开 Halo 项目,等待 Gradle 初始化和依赖下载完成。
-
-2. 下载预设插件(可选)
-
- ```bash
- # Windows
- ./gradlew.bat downloadPluginPresets
-
- # macOS / Linux
- ./gradlew downloadPluginPresets
- ```
-
-3. 修改 IntelliJ IDEA 的运行配置
-
- - Windows
-
- 将 Active Profiles 改为 `dev,win`,如图所示:
-
- 
-
- - macOS / Linux
-
- 将 Active Profiles 改为 `dev`,如图所示:
-
- 
-
-4. 点击 IntelliJ IDEA 的运行按钮,等待项目启动完成。
-
-5. 或者使用 Gradle 运行
-
- ```bash
- # macOS / Linux
- ./gradlew bootRun --args="--spring.profiles.active=dev"
-
- # Windows
- gradlew.bat bootRun --args="--spring.profiles.active=dev,win"
- ```
-
-6. 最终提供以下访问地址:
- 1. 网站首页:[http://localhost:8090](http://localhost:8090)
- 2. Console 控制台:[http://localhost:8090/console](http://localhost:8090/console)
- 3. UC 个人中心:[http://localhost:8090/uc](http://localhost:8090/uc)
diff --git a/versioned_docs/version-2.22/developer-guide/core/structure.md b/versioned_docs/version-2.22/developer-guide/core/structure.md
deleted file mode 100644
index 66084b07..00000000
--- a/versioned_docs/version-2.22/developer-guide/core/structure.md
+++ /dev/null
@@ -1,36 +0,0 @@
----
-title: 系统结构
-description: Halo 项目的构成
----
-
-[Halo](https://github.com/halo-dev/halo) 博客系统分为以下四个部分:
-
-| 项目名称 | 简介 |
-| :------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------- |
-| [halo](https://github.com/halo-dev/halo) | 提供整个系统的服务,采用 [Spring Boot](https://spring.io/) 开发 |
-| [halo-admin](https://github.com/halo-dev/halo-admin) | 负责后台管理的渲染,采用 [Vue](https://vuejs.org/) 开发,已集成在 Halo 运行包内,无需独立部署。 |
-| [halo-comment](https://github.com/halo-dev/halo-comment) | 评论插件,采用 [Vue](https://vuejs.org/) 开发,在主题中运行方式引入构建好的 `JavaScript` 文件即可 |
-| [halo-theme-\*](https://github.com/halo-dev) | 主题项目集,采用 [FreeMarker](https://freemarker.apache.org/) 模板引擎编写,需要包含一些特殊的配置才能够被 halo 所使用 |
-
-## 自定义配置
-
-> 为什么要提前讲自定义配置呢?是因为在这里让大家了解到 `Halo` 的`配置方式`,以及`配置优先级`,不至于未来运行项目的时候不知道如何优雅地修改配置。
-
-`Halo` 配置目录优先级如下(从上到下优先级越来越小,上层的配置将会覆盖下层):
-
-- `Halo` 自定义配置
- - file:~/.halo/
- - file:~/.halo-dev/
-- `Spring Boot` 默认配置
- - file:./config/
- - file:./
- - classpath:/config/
- - classpath:/
-
-> 参考:[Application Property Files](https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-application-property-files)
-
-在开发的时候,希望大家能够在 `~/halo-dev/application.yml` 中进行添加自定义配置。当然后面也会讲到如何用`运行参数` 和 `VM options` 进行控制配置,届时可根据具体情况进行选择。
-
-:::warning
-开发的时候,我们不建议直接更改`项目源码`中的所包含的`配置文件`,包括 `application.yml`、`application-dev.yml`、`application-test.yml` 和 `application-user.yml`。
-:::
diff --git a/versioned_docs/version-2.22/developer-guide/form-schema.md b/versioned_docs/version-2.22/developer-guide/form-schema.md
deleted file mode 100644
index bed20cba..00000000
--- a/versioned_docs/version-2.22/developer-guide/form-schema.md
+++ /dev/null
@@ -1,869 +0,0 @@
----
-title: 表单定义
----
-
-在 Halo 2.0,在 Console 端的所有表单我们都使用了 [FormKit](https://github.com/formkit/formkit) 的方案。FormKit 不仅支持使用 Vue 组件的形式来构建表单,同时支持使用 Schema 的形式来构建。因此,我们的 [Setting](https://github.com/halo-dev/halo/blob/87ccd61ae5cd35a38324c30502d4e9c0ced41c6a/src/main/java/run/halo/app/core/extension/Setting.java#L20) 资源中的表单定义,都是使用 FormKit Schema 来定义的,最常用的场景即主题和插件的设置表单定义。当然,如果要在 Halo 2.0 的插件中使用,也可以参考 FormKit 的文档使用 Vue 组件的形式使用,但不需要在插件中引入 FormKit。
-
-此文档将不会介绍 FormKit 的具体使用教程,因为我们已经很好的集成了 FormKit,并且使用方式基本无异。此文章将介绍 Halo 2.0 中表单定义的一些规范,以及额外的一些输入组件。
-
-FormKit 相关文档:
-
-- Form Schema: [https://formkit.com/essentials/schema](https://formkit.com/essentials/schema)
-- FormKit Inputs: [https://formkit.com/inputs](https://formkit.com/inputs)
-
-:::tip
-目前不支持 FormKit Pro 中的输入组件,但 Halo 额外提供了部分输入组件,将在下面文档列出。
-:::
-
-## Setting 资源定义方式
-
-```yaml title="settings.yaml"
-apiVersion: v1alpha1
-kind: Setting
-metadata:
- name: foo-setting
-spec:
- forms:
- - group: group_1
- label: 分组 1
- formSchema:
- - $formkit: radio
- name: color_scheme
- label: 默认配色
- value: system
- options:
- - label: 跟随系统
- value: system
- - label: 深色
- value: dark
- - label: 浅色
- value: light
-
- - group: group_2
- label: 分组 2
- formSchema:
- - $formkit: text
- name: username
- label: 用户名
- value: ""
- - $formkit: password
- name: password
- label: 密码
- value: ""
-```
-
-:::tip
-需要注意的是,FormKit Schema 本身应该是 JSON 格式的,但目前我们定义一个表单所使用的是 YAML,可能在参考 FormKit 写法时需要手动转换一下。
-:::
-
-字段说明:
-
-1. `metadata.name`:设置资源的名称,建议以 `-setting` 结尾。
-2. `spec.forms`:表单定义,可以定义多个表单,每个表单都有一个 `group` 字段,用于区分不同的表单。
-3. `spec.forms[].label`:表单的标题。
-4. `spec.forms[].formSchema`:表单的定义,使用 FormKit Schema 来定义。虽然我们使用的 YAML,但与 FormKit Schema 完全一致。
-
-## 组件类型
-
-除了 FormKit 官方提供的常用输入组件之外,Halo 还额外提供了一些输入组件,这些输入组件可以在 Form Schema 中使用。
-
-### select
-
-#### 描述
-
-自定义的选择器组件,支持静态和动态数据源,支持多选等功能。
-
-#### 参数 {#select-params}
-
-- `options`:静态数据源。当 `action` 存在时,此参数无效。
-- `action`:远程动态数据源的接口地址。
-- `requestOption`:动态数据源的请求参数,可以通过此参数来指定如何获取数据,适配不同的接口。当 `action` 存在时,此参数有效。
-- `remoteOptimize`:是否开启远程数据源优化,默认为 `true`。开启后,将会对远程数据源进行优化,减少请求次数。仅在动态数据源下有效。
-- `allowCreate`:是否允许创建新选项,默认为 `false`。仅在静态数据源下有效,需要同时开启 `searchable`。
-- `clearable`:是否允许清空选项,默认为 `false`。
-- `multiple`:是否多选,默认为 `false`。
-- `maxCount`:多选时最大可选数量,默认为 `Infinity`。仅在多选时有效。
-- `sortable`:是否支持拖动排序,默认为 `false`。仅在多选时有效。
-- `searchable`: 是否支持搜索,默认为 `false`。
-- `autoSelect`:当初始值不存在时,是否自动选择第一个选项,默认为 `true`。仅在单选时有效。
-
-#### 参数类型定义
-
-```ts
-{
- options?: Array<
- Record & {
- label: string;
- value: string;
- }
- >;
- action?: string;
- requestOption?: {
- method?: "GET" | "POST";
-
- /**
- * 请求结果中 page 的字段名,默认为 `page`。
- */
- pageField?: PropertyPath;
-
- /**
- * 请求结果中 size 的字段名,默认为 `size`。
- */
- sizeField?: PropertyPath;
-
- /**
- * 请求结果中 total 的字段名,默认为 `total`。
- */
- totalField?: PropertyPath;
-
- /**
- * 从请求结果中解析数据的字段名,默认为 `items`。
- */
- itemsField?: PropertyPath;
-
- /**
- * 从 items 中解析出 label 的字段名,默认为 `label`。
- */
- labelField?: PropertyPath;
-
- /**
- * 从 items 中解析出 value 的字段名,默认为 `value`。
- */
- valueField?: PropertyPath;
-
- /**
- * 使用 value 查询详细信息时,fieldSelector 的查询参数 key,默认为 `metadata.name`。
- */
- fieldSelectorKey?: PropertyPath;
- };
- remoteOptimize?: boolean;
- allowCreate?: boolean;
- clearable?: boolean;
- multiple?: boolean;
- maxCount?: number;
- sortable?: boolean;
- searchable?: boolean;
-}
-```
-
-#### 静态数据示例
-
-```yaml
-- $formkit: select
- name: countries
- label: What country makes the best food?
- sortable: true
- multiple: true
- clearable: true
- searchable: true
- placeholder: Select a country
- options:
- - label: China
- value: cn
- - label: France
- value: fr
- - label: Germany
- value: de
- - label: Spain
- value: es
- - label: Italy
- value: ie
- - label: Greece
- value: gr
-```
-
-#### 远程动态数据示例
-
-支持远程动态数据源,通过 `action` 和 `requestOption` 参数来指定如何获取数据。
-
-请求的接口将会自动拼接 `page`、`size` 与 `keyword` 参数,其中 `keyword` 为搜索关键词。
-
-```yaml
-- $formkit: select
- name: postName
- label: Choose an post
- clearable: true
- action: /apis/api.console.halo.run/v1alpha1/posts
- requestOption:
- method: GET
- pageField: page
- sizeField: size
- totalField: total
- itemsField: items
- labelField: post.spec.title
- valueField: post.metadata.name
- fieldSelectorKey: metadata.name
-```
-
-:::tip
-当远程数据具有分页时,可能会出现默认选项不在第一页的情况,此时 Select 组件将会发送另一个查询请求,以获取默认选项的数据。此接口会携带如下参数:
-
-```ts
-fieldSelector: `${requestOption.fieldSelectorKey}=(value1,value2,value3)`
-```
-
-其中,value1, value2, value3 为默认选项的值。返回值与查询一致,通过 `requestOption` 解析。
-:::
-
-### list
-
-#### 描述
-
-列表类型的输入组件,支持动态添加、删除数据项。
-
-:::tip
-`list` 组件与 [array](#array) 组件功能类似,但它们的用途不同。`list` 组件适合展示基本类型的数据,而 `array` 组件更适合于展示复杂类型的数据。
-:::
-
-#### 参数
-
-- `item-type`:数据项的数据类型,用于初始化数据。可选参数 `string`, `number`, `boolean`,默认为 `string`
-- `min`:数组最小要求数量,默认为 `0`
-- `max`:数组最大容量,默认为 `Infinity`,即无限制
-- `addButton`:是否显示添加按钮
-- `addLabel`:添加按钮的文本
-- `upControl`:是否显示上移按钮
-- `downControl`:是否显示下移按钮
-- `insertControl`:是否显示插入按钮
-- `removeControl`:是否显示移除按钮
-
-#### 示例
-
-```yaml
-- $formkit: list
- name: socials
- label: 社交账号
- addLabel: 添加账号
- min: 1
- max: 5
- itemType: string
- children:
- - $formkit: text
- index: "$index"
- validation: required
-```
-
-:::tip
-`list` 组件有且只有一个子节点,并且必须为子节点传递 `index` 属性。若想提供多个字段组成对象,则建议改为使用 [array](#array) 组件。
-:::
-
-最终保存表单之后得到的值为以下形式:
-
-```json
-{
- "socials": [
- "GitHub",
- "Twitter"
- ]
-}
-```
-
-### verificationForm
-
-#### 描述
-
-用于远程验证一组数据是否符合要求的组件。
-
-#### 参数
-
-- `action`:对目标数据进行验证的接口地址
-- `label`:验证按钮文本
-- `submitAttrs`:验证按钮的额外属性
-
-#### 示例
-
-```yaml
-- $formkit: verificationForm
- action: /apis/console.api.halo.run/v1alpha1/verify/verify-password
- label: 账户校验
- children:
- - $formkit: text
- label: "用户名"
- name: username
- validation: required
- - $formkit: password
- label: "密码"
- name: password
- validation: required
-```
-
-:::tip
-尽管 `verificationForm` 本身是一个输入组件,但与其他输入组件不同的是,它仅仅用于包装待验证的数据,所以并不会破坏原始数据的格式。例如上述示例中的值在保存后为:
-
-```json
-{
- "username": "admin",
- "password": "admin"
-}
-```
-
-而不是
-
-```json
-{
- "verificationForm": {
- "username": "admin",
- "password": "admin"
- }
-}
-```
-
-:::
-
-示例中发送至验证地址的值为如下格式:
-
-```json
-{
- "username": "admin",
- "password": "admin"
-}
-```
-
-当验证接口返回成功响应时,则验证通过,否则验证失败。
-
-若用户在验证失败时想显示错误信息,可以在验证接口返回错误信息,该错误信息的结构定义需遵循 [RFC 7807 - Problem Details for HTTP APIs](https://datatracker.ietf.org/doc/html/rfc7807.html) 。例如:
-
-```json
-{
- "title": "无效凭据",
- "status": 401,
- "detail": "用户名或密码错误。"
-}
-```
-
-UI 效果:
-
-
-
-### ~~repeater~~(已过时)
-
-:::warning
-`repeater` 组件已不再推荐使用,请使用 [array](#array) 组件代替。
-:::
-
-#### 描述
-
-一组重复的输入组件,可以用于定义一组数据,最终得到的数据为一个对象的数组,可以方便地让使用者对其进行增加、移除、排序等操作。
-
-#### 参数
-
-- `min`:数组最小要求数量,默认为 `0`
-- `max`:数组最大容量,默认为 `Infinity`,即无限制
-- `addButton`:是否显示添加按钮
-- `addLabel`:添加按钮的文本
-- `upControl`:是否显示上移按钮
-- `downControl`:是否显示下移按钮
-- `insertControl`:是否显示插入按钮
-- `removeControl`:是否显示移除按钮
-
-#### 示例
-
-```yaml
-- $formkit: repeater
- name: socials
- label: 社交账号
- value: []
- max: 5
- min: 1
- children:
- - $formkit: select
- name: enabled
- id: enabled
- label: 是否启用
- options:
- - label: 是
- value: true
- - label: 否
- value: false
- - $formkit: text
- # 在 Repeater 中进行条件判断的方式,当 enabled 为 true 时才显示
- if: "$value.enabled === true",
- name: name
- label: 名称
- value: ""
- - $formkit: text
- if: "$value.enabled === true",
- name: url
- label: 地址
- value: ""
-```
-
-:::tip
-使用 `repeater` 类型时,一定要设置默认值,如果不需要默认有任何元素,可以设置为 `[]`。
-:::
-
-其中 `name` 和 `url` 即数组对象的属性,最终保存表单之后得到的值为以下形式:
-
-```json
-{
- "socials": [
- {
- "name": "GitHub",
- "url": "https://github.com/halo-dev"
- }
- ]
-}
-```
-
-UI 效果:
-
-
-
-### attachment
-
-#### 描述
-
-:::info
-在 Halo 2.22 中,我们重构了原有的 attachment 表单类型,支持了预览和直接上传文件,并将旧版的表单类型更名为了 [attachmentInput](#attachmentinput)。
-:::
-
-附件类型的输入框,支持预览附件、直接上传文件、从附件库选择。
-
-#### 参数
-
-- `accepts`:文件类型,数据类型为 `string[]`
-- `width`:预览区域宽度
-- `aspectRatio`:预览区域长宽比,比如 `1/1`、`16/9`
-- `multiple`:是否支持多选,设置为 `true` 之后,数据结构为字符串数组
-
-#### 示例
-
-```yaml
-- $formkit: attachment
- name: logo
- label: Logo
- accepts:
- - "image/png"
- - "video/mp4"
- - "audio/*"
- value: ""
-```
-
-### attachmentInput
-
-#### 描述
-
-附件类型的输入框,支持直接调用附件库弹框选择附件。
-
-#### 参数
-
-- `accepts`:文件类型,数据类型为 `string[]`
-- `min`:最小文件数量
-- `max`:最大文件数量
-
-#### 示例
-
-```yaml
-- $formkit: attachment
- name: logo
- label: Logo
- accepts:
- - "image/png"
- - "video/mp4"
- - "audio/*"
- value: ""
-```
-
-### code
-
-#### 描述
-
-代码编辑器的输入组件,集成了 [Codemirror](https://codemirror.net/)。
-
-#### 参数
-
-- `language`:代码语言,目前支持 `yaml` `html` `javascript` `css` `json`。
-- `height`:代码编辑器的高度。
-
-#### 示例
-
-```yaml
-- $formkit: code
- name: footer_code
- label: 页脚代码注入
- value: ""
- language: yaml
-```
-
-### menuSelect
-
-#### 描述
-
-菜单选择器,用于选择系统内的导航菜单,支持单选、多选、排序。
-
-#### 示例
-
-```yaml
-- $formkit: menuSelect
- name: menus
- label: 菜单
- multiple: true
- value: []
-```
-
-:::info
-menuSelect 基于 select,并兼容 select 的[参数](#select-params)。
-:::
-
-### menuCheckbox
-
-#### 描述
-
-菜单复选框,用于选择系统内的导航菜单。其中选择的值为菜单资源 `metadata.name` 的集合。
-
-#### 示例
-
-```yaml
-- $formkit: menuCheckbox
- name: menus
- label: 菜单
- value: []
-```
-
-### menuRadio
-
-#### 描述
-
-菜单单选框,用于选择系统内的导航菜单。其中选择的值为菜单资源 `metadata.name`。
-
-#### 示例
-
-```yaml
-- $formkit: menuRadio
- name: menu
- label: 菜单
- value: ""
-```
-
-### postSelect
-
-#### 描述
-
-文章选择器,用于选择系统内的文章。其中选择的值为文章资源 `metadata.name`。
-
-#### 示例
-
-```yaml
-- $formkit: postSelect
- name: post
- label: 文章
- value: ""
-```
-
-### singlePageSelect
-
-#### 描述
-
-单页选择器,用于选择系统内的独立页面。其中选择的值为独立页面资源 `metadata.name`。
-
-#### 示例
-
-```yaml
-- $formkit: singlePageSelect
- name: singlePage
- label: 单页
- value: ""
-```
-
-### categorySelect
-
-#### 描述
-
-文章分类选择器,用于选择系统内的文章分类。其中选择的值为文章分类资源 `metadata.name`。
-
-#### 示例
-
-```yaml
-- $formkit: categorySelect
- name: category
- label: 分类
- value: ""
-```
-
-### categoryCheckbox
-
-#### 描述
-
-文章分类复选框,用于选择系统内的文章分类。其中选择的值为文章分类资源 `metadata.name` 的集合。
-
-#### 示例
-
-```yaml
-- $formkit: categoryCheckbox
- name: categories
- label: 分类
- value: []
-```
-
-### tagSelect
-
-#### 描述
-
-文章标签选择器,用于选择系统内的文章标签。其中选择的值为文章标签资源 `metadata.name`。
-
-#### 示例
-
-```yaml
-- $formkit: tagSelect
- name: tag
- label: 标签
- value: ""
-```
-
-### tagCheckbox
-
-#### 描述
-
-文章标签复选框,用于选择系统内的文章标签。其中选择的值为文章标签资源 `metadata.name` 的集合。
-
-#### 示例
-
-```yaml
-- $formkit: tagCheckbox
- name: tags
- label: 标签
- value: []
-```
-
-### iconify
-
-统一的图标选择器,基于 [Iconify](https://iconify.design/)。
-
-示例
-
-```yaml
-- $formkit: iconify
- name: social_icon
- label: 社交图标
- format: svg # svg / dataurl / url / name
-```
-
-#### 参数
-
-- `format`:图标格式,默认为 `svg`
- - `svg`:svg 字符串
- - `dataurl`:base64 的图片链接,可以直接用于 img 标签
- - `url`:Iconify 的 CDN 链接
- - `name`:Iconify 的图标名称,需要在使用的地方自行加载图标
-- `value-only`:是否仅返回图标数据,默认为 `false`
-- `popper-placement`:图标选择弹窗的打开位置,默认为 `auto`,可以为:`auto`、`auto-end`、`auto-start`、`bottom`、`bottom-end`、`bottom-start`、`left`、`left-end`、`left-start`、`right`、`right-end`、`right-start`、`top`、`top-end`、`top-start`
-
-#### 值类型
-
-当 `value-only` 参数为 `true` 时,此表单项的值为 `string` 类型,比如当 `format` 为 `svg` 时,返回值数据形如 ``
-
-当 `value-only` 参数不填写或为 `false` 时,表单类型的值为对象,包含以下属性:
-
-- `value`: 图标数据,当 `format` 参数不同时,value 的形式也不同,具体如下:
- - `svg`:value 的值为 svg 字符串,可以直接放置在 HTML 中使用
- - `dataurl` / `url`:可以使用 `img` 标签加载
- - `name`:Iconify 对应的图标名称,需要在前端加载 [Iconify](https://iconify.design/docs/iconify-icon/) 的依赖配合使用
-- `name`:Iconify 对应的图标名称,保留这个字段的目的是为了在 Console 中回显图标信息,通常不需要使用此字段
-- `width`:用户在选择图标时设置的图标大小,此字段的目的是为了在 Console 中再次编辑时回显,通常不需要使用此字段
-- `color`:用户在选择图标时设置的图标颜色,此字段的目的是为了在 Console 中再次编辑时回显,通常不需要使用此字段
-
-在主题模板中的使用示例:
-
-```html
-
-
-
-
-
-
-
-
-
-```
-
-开发者可根据具体使用情况自行选择图标格式,通常推荐 `svg` 或者 `dataurl`,因为这样无需任何网络请求,确保图标可以稳定地正常加载。
-
-UI 效果:
-
-
-
-
-
-### array
-
-一组重复的输入组件,展示为列表形式,可以用于定义一组数据。最终得到的数据为一个对象的数组,方便使用者对此数组进行增加、删除、排序等操作。
-
-参数
-
-- `min`:数组最小要求数量,默认为 `0`
-- `max`:数组最大容量,默认为 `Infinity`,即无限制
-- `removeControl`:是否允许移除元素
-- `addButton`:是否显示添加按钮
-- `addLabel`:添加按钮上显示的文本
-- `addAttrs`:添加按钮的额外属性
-- `emptyText`: 当数组为空时显示的文本
-- `itemLabels`: 列表元素上显示的内容,数据类型为 `{ type: "image" | "text" | "iconify"; label: string }[]`
-
-:::tip
-强烈建议为 `array` 设置 `itemLabels` 属性,以便于更直观的展示元素内容,设置的元素内容将按照设置顺序展示在列表元素上。
-
-在 `itemLabels` 中定义 `label` 时,可以使用 `$value` 来指向当前项的值。
-:::
-
-#### 示例
-
-```yaml
-- $formkit: array
- name: socials
- label: 社交账号
- value: []
- max: 5
- min: 1
- itemLabels:
- - type: image
- label: $value.logo
- - type: text
- label: $value.name
- children:
- - $formkit: attachment
- name: logo
- label: 图标
- value: ""
- - $formkit: text
- name: name
- label: 名称
- value: ""
- - $formkit: text
- name: url
- label: 地址
- value: ""
-```
-
-:::warning
-由于目前无法通过单个 `itemLabels` 定义涵盖所有子项变动的情况,因此在 `itemLabels` 中使用 `$value` ,无法获取到具有 `if` 属性的组件值。
-
-例如:
-
-```yaml
-- $formkit: array
- name: socials
- label: 社交账号
- value: []
- itemLabels:
- - type: text
- # 这里无法获取到具有 if 属性的组件值,因此也就无法展示在列表元素上。
- label: $value.name
- children:
- - $formkit: select
- name: enabled
- label: 是否启用
- options:
- - label: 是
- value: true
- - label: 否
- value: false
- - $formkit: text
- if: "$value.enabled === true",
- label: $value.name
-```
-
-:::
-
-### switch
-
-开关组件,提供两个值之间的选择;当您想使用户切换功能开或关时,这是一个很好的选项
-
-参数
-
-- `onValue`:开关打开时的值,默认为 `true`
-- `offValue`:开关关闭时的值,默认为 `false`
-- `disabled`:是否禁用开关,默认为 `false`
-
-#### 示例
-
-```yaml
-- $formkit: switch
- name: enabled
- label: 是否启用
- value: false
-```
-
-如果需要开关的值为其他值,可以设置 `onValue` 和 `offValue` 参数。
-
-```yaml
-- $formkit: switch
- name: enabled
- label: 是否启用
- value: "active"
- onValue: "active"
- offValue: "inactive"
-```
-
-### toggle
-
-切换组件,用于对一组图片、颜色或文字等选择切换,支持单选与多选。它的功能与 `select` 组件类似,但相较于 `select` 组件,`toggle` 组件可以更直观的展示选项。
-
-参数:
-
-- `renderType`:当前组件的渲染类型,可选参数为 `image`、`color`、`text`,默认为 `text`。
-- `options`:一组同类型的数据源,数据类型为 `{ label?: string; value: string; render?: string }[]`,其中 `label` 为选项的文本,`value` 为选项的值。`render` 为选项的渲染展示内容,与 `renderType` 参数配合使用。
- - 当 `renderType` 为 `image` 时,`render` 参数为图片的 URL。
- - 当 `renderType` 为 `color` 时,`render` 参数为颜色的十六进制代码。例如 `#000000`。
- - 当 `renderType` 为 `text` 时,`render` 参数为文字内容。
-- `multiple`:可选,是否支持多选,默认为 `false`。
-- `size`:可选,渲染内容的尺寸,`number` 类型,单位为 `px`。
-- `gap`:可选,渲染内容之间的间距,`number` 类型,单位为 `px`。
-- `value`: 可选初始值,数据类型为 `string | number | boolean | (string | number | boolean)[]`。
-
-#### 示例
-
-```yaml
-- $formkit: toggle
- label: 选择图片
- name: toggle
- render-type: image
- size: 100
- gap: 10
- help: 选择图片作为背景
- options:
- - label: 图文1
- value: 1
- render: https://placehold.co/600x400
- - label: 图文2
- value: 2
- render: https://placehold.co/600x400
- - label: 图文3
- value: 3
- render: https://placehold.co/600x400
-
-```
-
-#### UI 效果
-
-
-
-
-
-### secret
-
-密钥输入组件,用于选择一个密钥资源。
-
-:::note
-在 Halo 中,我们提供了一种更加安全的数据存储模型,即 Secret,通常我们使用 Secret 来存储敏感数据,比如密码、token、密钥等。
-
-主要注意的是,此表单类型通常与后端配合使用,需要在后端查询密钥资源。
-:::
-
-参数
-
-- `requiredKeys`:所需的密钥字段,用于为用户说明所选的密钥资源中需要包含的字段,此字段为对象数组类型,对象包含以下属性:
- - `key`:密钥字段名称
- - `help`:密钥字段名称的描述
-
-#### 示例
-
-```yaml
-- $formkit: secret
- name: secret
- label: 密钥
- requiredKeys:
- - key: apiKey
- help: API 密钥
- - key: secretKey
- help: 密钥
-```
diff --git a/versioned_docs/version-2.22/developer-guide/plugin/api-changelog.md b/versioned_docs/version-2.22/developer-guide/plugin/api-changelog.md
deleted file mode 100644
index 7030d2c3..00000000
--- a/versioned_docs/version-2.22/developer-guide/plugin/api-changelog.md
+++ /dev/null
@@ -1,205 +0,0 @@
----
-title: API 变更日志
-description: 记录每一个版本的插件 API 变更记录,方便开发者适配
----
-
-## 2.22.8
-
-### 表单定义 > 新增 `toggle` 组件
-
-在 2.22.8 中,我们为 FormKit 表单新增了 `toggle` 组件,这是一个可以对一组图片、颜色或文字等进行选择切换的组件,详细文档可查阅:[表单定义#toggle](../../developer-guide/form-schema.md#toggle)
-
-## 2.22.5
-
-### SpringDoc 依赖更新可能导致插件无法启动
-
-在 2.22.5 中,我们更新了 SpringDoc 依赖至 [2.8.15](https://github.com/springdoc/springdoc-openapi/releases/tag/v2.8.15) 版本,该版本[修复](https://github.com/springdoc/springdoc-openapi/pull/3183)了 OpenAPI 文档生成中的一些问题(例如嵌套路由无须定义文档),且为破坏性更新,这可能会导致插件无法正常启动。
-
-因此,建议插件开发者尽快升级 Halo 依赖,`build.gradle` 修改示例如下:
-
-```groovy
-dependencies {
- implementation platform('run.halo.tools.platform:plugin:2.22.5')
-
- ...
-}
-```
-
-`plugin.yaml` 中的 `spec.requires` 字段也需要提升至 `>=2.22.5`,示例如下:
-
-```yaml
-spec:
- requires: ">=2.22.5"
-```
-
-尝试构建并解决编译错误即可。
-
-## 2.22.2
-
-### 表单定义 > 新增 `switch` 组件
-
-在 2.22.2 中,我们为 FormKit 表单新增了 `switch` 组件,用于定义一个功能的开关,详细文档可查阅:[表单定义#switch](../../developer-guide/form-schema.md#switch)
-
-## 2.22.0
-
-### 自定义模型索引 API 更新
-
-在 2.22.0 中,我们重构了自定义模型索引和查询 API,插件中直接使用索引 API 的代码建议进行以下调整:
-
-1. 使用 `IndexSpecs.single(name, keyType)` 和 `IndexSpecs.multi(name, keyType)` 声明索引,替代 `IndexAttributeFactory.simpleAttribute()`、`IndexAttributeFactory.multiValueAttribute()` 和直接创建 `new IndexSpec()` 的旧写法。
-2. 索引值类型不再局限于字符串,可以使用 `String`、`Boolean`、`Integer`、`Long`、`Instant` 等实现 `Comparable` 的类型。
-3. 使用 `Queries` 创建 `FieldSelector` 查询条件,替代已过时的 `QueryFactory`。
-4. `ReactiveExtensionClient` 和 `ExtensionClient` 新增了 `listAllNames`、`listTopNames`、`listNamesBy` 和 `countBy` 等查询方法,直接使用 `indexedQueryEngine()` 的方式已过时。
-
-详细文档可查阅:[自定义模型使用索引](./api-reference/server/extension.md#using-indexes) 和 [ExtensionClient 查询](./api-reference/server/extension-client.md#query)。
-
-### `@halo-dev/console-shared` 改名
-
-从 Halo 2.11 支持个人中心以后,插件的 UI 项目能同时扩展 Console 和 UC,所以为了避免歧义,我们在 Halo 2.22 中将 UI 的 `@halo-dev/console-shared` 依赖更名为 `@halo-dev/ui-shared`,虽然在 Halo 中兼容了旧版依赖,但仍然推荐使用新版依赖,迁移方案:
-
-```bash
-pnpm uninstall @halo-dev/console-shared
-pnpm install @halo-dev/ui-shared
-```
-
-然后在插件项目全局搜索 `@halo-dev/console-shared` 并替换为 `@halo-dev/ui-shared` 即可,同时需要将 `plugin.yaml` 的 `spec.requires` 字段修改为 `>=2.22.0`。
-
-### `@halo-dev/ui-shared` 工具库
-
-在 2.22.0 中,Halo 在 `@halo-dev/ui-shared` 包中提供一些常用工具,用于减少部分业务的开发工作量,目前提供:
-
-1. `stores`
- 1. `currentUser`:用于获取当前用户信息
- 2. `globalInfo`:用于获取网站一些公开的信息,比如外部访问地址
-2. utils
- 1. `date`:时间日期格式化工具
- 2. `permission`:用户权限检查工具
- 3. `id`:uuid 生成工具
- 4. `attachment`:附件相关工具,比如获取附件缩略图地址
-3. events
- 1. `core:plugin:configMap:updated`:用于监听插件配置变更
-
-详细文档可查阅:[共享工具库](./api-reference/ui/shared.md)
-
-### UI 扩展点 > 附件选择选项卡类型更新
-
-在 2.22.0 中,我们为 `AttachmentLike` 复合类型添加了 `mediaType` 字段,用于区分文件类型,方便在插入到文章时显示正确的媒体类型,如不填写,所选择的文件将作为链接插入到编辑器,所以实现了此扩展点的插件都需要进行改动,具体步骤:
-
-1. 升级依赖
-
- ```bash
- pnpm install @halo-dev/ui-shared@2.22.0
- ```
-
-2. 提升 [plugin.yaml#spec.requires](./basics/manifest.md#字段详解) 版本为 `>=2.22.0`。
-3. 按照[最新文档](./extension-points/ui/attachment-selector-create.md)修改插件代码
-
-### 表单定义 > 新增 Iconify 图标选择器
-
-在 2.22.0 中,我们为 FormKit 表单提供了通用的图标选择器,基于 [Iconify](https://icon-sets.iconify.design/),详细文档可查阅:[表单定义#Iconify](../../developer-guide/form-schema.md#iconify)
-
-### 表单定义 > 新增 `array` 组件
-
-在 2.22.0 中,我们为 FormKit 表单新增了 `array` 组件,用于定义一组数据,并计划使用 `array` 组件替换原有的 `repeater` 组件。详细文档可查阅:[表单定义#array](../../developer-guide/form-schema.md#array)
-
-### 编辑器 > BubbleMenu 扩展点改动
-
-在 Halo 2.22.0 中,我们升级了编辑器的 Tiptap 版本至 3.x,由于 Tiptap 在 3.x 中做了一些破坏性更新且 Halo 也遵循其更新,因此如果插件扩展了编辑器,并使用了 BubbleMenu 扩展点,则需要根据以下方式进行更新升级。
-
-1. 使用 `options` 代替 `tippyOptions`。
-
-```diff
-- tippyOptions: {
-- fixed: false,
-- },
-+ options: {
-+ strategy:"absolute",
-+ },
-```
-
-2. 使用 `getReferencedVirtualElement` 代替 `getRenderContainer`。
-
-```diff
-- getRenderContainer: (node: HTMLElement) => {
-- let container = node;
-- if (container.nodeName === "#text") {
-- container = node.parentElement as HTMLElement;
-- }
-- while (
-- container &&
-- container.classList &&
-- !container.classList.contains("column")
-- ) {
-- container = container.parentElement as HTMLElement;
-- }
-- return container;
-- },
-+ getReferencedVirtualElement() {
-+ const editor = this.editor;
-+ if (!editor) {
-+ return null;
-+ }
-+ const parentNode = findParentNode(
-+ (node) => node.type.name === Column.name
-+ )(editor.state.selection);
-+ if (parentNode) {
-+ const domRect = posToDOMRect(
-+ editor.view,
-+ parentNode.pos,
-+ parentNode.pos + parentNode.node.nodeSize
-+ );
-+ return {
-+ getBoundingClientRect: () => domRect,
-+ getClientRects: () => [domRect],
-+ };
-+ }
-+ return null;
-+ },
-```
-
-3. 移除 `defaultAnimation`。
-
-```diff
-- defaultAnimation: false,
-```
-
-此外,扩展其他 Node 中 `BubbleMenu` 的旧方式将会失效,例如 [编辑器超链接卡片](https://github.com/halo-sigs/plugin-editor-hyperlink-card/blob/main/ui/src/editor/text-bubble-extension.ts) 扩展了 Text Node 的 `BubbleMenu`。 此版本中引入了 `extendsKey` 字段,用于扩展已有的 `BubbleMenu`。**需要已有的 `BubbleMenu` 设置了 PluginKey**。
-用法如下:
-
-```ts
-Extension.create({
- name: "expandTextBubbleMenu",
- addOptions() {
- return {
- getBubbleMenu() {
- return {
- // 目标 BubbleMenu 的 PluginKey。当前版本会导出 Halo UI Editor 中的所有 PluginKey。
- extendsKey: TEXT_BUBBLE_MENU_KEY,
- items: [
- {
- priority: 10,
- // 具有同一个 key 的 items 将会被覆盖
- key: "textItem1",
- props: { title: "ExpandText" },
- },
- ],
- };
- },
- };
- },
- }),
-```
-
-有关 `BubbleMenu` 扩展的详细文档可查阅:[悬浮菜单扩展](./extension-points/ui/default-editor-extension-create.md#4-悬浮菜单扩展)
-
-### 编辑器 > 新增 getDraggableMenuItems 扩展点
-
-在 Halo 2.22.0 中,我们为编辑器增加了拖拽菜单的功能,同时支持插件动态扩展拖拽菜单。与此同时,旧的 `getDraggable` 扩展点被移除,取而代之的是 `getDraggableMenuItems` 扩展点。
-
-可直接移除 `getDraggable` 扩展点,不再使用,也无需考虑兼容性问题。
-
-关于 `getDraggableMenuItems` 扩展点的详细文档可查阅:[拖拽菜单扩展](./extension-points/ui/default-editor-extension-create.md#5-拖拽菜单扩展)
-
-### 表单定义 > 重构 `attachment` 表单类型
-
-在 Halo 2.22 中,我们重构了原有的 attachment 表单类型,支持了预览和直接上传文件,并将旧版的表单类型更名为了 [attachmentInput](../form-schema.md#attachmentinput)
diff --git a/versioned_docs/version-2.22/developer-guide/plugin/api-reference/server/extension-client.md b/versioned_docs/version-2.22/developer-guide/plugin/api-reference/server/extension-client.md
deleted file mode 100644
index bc50b131..00000000
--- a/versioned_docs/version-2.22/developer-guide/plugin/api-reference/server/extension-client.md
+++ /dev/null
@@ -1,234 +0,0 @@
----
-title: 与自定义模型交互
-description: 了解如何通过代码的方式操作数据
----
-
-Halo 提供了两个类用于与自定义模型对象交互 `ExtensionClient` 和 `ReactiveExtensionClient`。
-
-它们提供了对自定义模型对象的增删改查操作,`ExtensionClient` 是阻塞式的用于后台任务如控制器中操作数据,而 `ReactiveExtensionClient` 返回值都是 Mono 或 Flux 是反应式非阻塞的,它们由 [reactor](https://projectreactor.io/) 提供。
-
-```java
-public interface ReactiveExtensionClient {
-
- // 已经过时,建议使用 listBy 或 listAll 代替
- Flux list(Class type, Predicate predicate,
- Comparator comparator);
-
- // 已经过时,建议使用 listBy 或 listAll 代替
- Mono> list(Class type, Predicate predicate,
- Comparator comparator, int page, int size);
-
- Flux listAll(Class type, ListOptions options, Sort sort);
-
- Mono> listBy(Class type, ListOptions options,
- PageRequest pageable);
-
- /**
- * Fetches Extension by its type and name.
- *
- * @param type is Extension type.
- * @param name is Extension name.
- * @param is Extension type.
- * @return an optional Extension.
- */
- Mono fetch(Class type, String name);
-
- Mono fetch(GroupVersionKind gvk, String name);
-
- Mono get(Class type, String name);
-
- /**
- * Creates an Extension.
- *
- * @param extension is fresh Extension to be created. Please make sure the Extension name does
- * not exist.
- * @param is Extension type.
- */
- Mono create(E extension);
-
- /**
- * Updates an Extension.
- *
- * @param extension is an Extension to be updated. Please make sure the resource version is
- * latest.
- * @param is Extension type.
- */
- Mono update(E extension);
-
- /**
- * Deletes an Extension.
- *
- * @param extension is an Extension to be deleted. Please make sure the resource version is
- * latest.
- * @param is Extension type.
- */
- Mono delete(E extension);
-}
-```
-
-### 示例
-
-如果你想在插件中根据 name 参数查询获取到 Person 自定义模型的数据,则可以这样写:
-
-```java
-@Service
-@RequiredArgsConstructor
-public PersonService {
- private final ReactiveExtensionClient client;
-
- Mono getPerson(String name) {
- return client.fetch(Person.class, name);
- }
-}
-```
-
-或者使用阻塞式 Client
-
-```java
-@Service
-@RequiredArgsConstructor
-public PersonService {
- private final ExtensionClient client;
-
- Optional getPerson(String name) {
- return client.fetch(Person.class, name);
- }
-}
-```
-
-注意:非阻塞线程中不能调用阻塞式方法。
-
-我们建议你更多的使用响应式的 `ReactiveExtensionClient` 去替代 `ExtensionClient`。
-
-### 查询 {#query}
-
-`ReactiveExtensionClient` 提供了以下方法用于查询数据:
-
-- `listBy`:分页查询数据。
-- `listNamesBy`:分页查询对象名称。
-- `listAll`:查询所有数据。
-- `listAllNames`:查询所有对象名称。
-- `listTopNames`:查询指定数量的对象名称。
-- `countBy`:统计符合条件的数据数量。
-
-这些方法都需要一个 `ListOptions` 参数,用于传递查询条件:
-
-```java
-public class ListOptions {
- private LabelSelector labelSelector;
- private FieldSelector fieldSelector;
-}
-```
-
-其中 `LabelSelector` 用于传递标签查询条件,`FieldSelector` 用于传递字段查询条件。
-
-`FieldSelector` 支持比自动生成的 APIs 中更多的查询条件,可以通过 `run.halo.app.extension.index.query.Queries` 来构建。
-
-```java
-import static run.halo.app.extension.index.query.Queries.and;
-import static run.halo.app.extension.index.query.Queries.equal;
-
-ListOptions.builder()
- .fieldQuery(and(
- equal("name", "test"),
- equal("age", 18)
- ))
- .build();
-```
-
-支持的查询条件如下:
-
-| 方法 | 说明 | 示例 |
-| --- | --- | --- |
-| `equal` | 等于 | `equal("name", "test")` |
-| `notEqual` | 不等于 | `notEqual("name", "test")` |
-| `greaterThan` | 大于,可通过第三个参数控制是否包含边界 | `greaterThan("age", 18)`、`greaterThan("age", 18, true)` |
-| `lessThan` | 小于,可通过第三个参数控制是否包含边界 | `lessThan("age", 18)`、`lessThan("age", 18, true)` |
-| `between` | 在范围内,可分别控制上下边界是否包含 | `between("age", 18, true, 20, false)` |
-| `in` | 在给定值范围内 | `in("age", 18, 19, 20)` |
-| `isNull` | 值为空 | `isNull("deletedAt")` |
-| `all` | 指定字段的所有值 | `all("age")` |
-| `startsWith` | 以指定字符串开头 | `startsWith("name", "test")` |
-| `endsWith` | 以指定字符串结尾 | `endsWith("name", "test")` |
-| `contains` | 包含指定字符串 | `contains("name", "test")` |
-| `and` | 且 | `and(equal("name", "test"), equal("age", 18))` |
-| `or` | 或 | `or(equal("name", "test"), equal("age", 18))` |
-| `not` | 取反 | `not(equal("name", "test"))` |
-| `labelExists` | 标签存在 | `labelExists("halo.run/hidden")` |
-| `labelEqual` | 标签等于 | `labelEqual("env", "production")` |
-| `labelIn` | 标签值在给定范围内 | `labelIn("env", Set.of("production", "staging"))` |
-
-在 `FieldSelector` 中使用的所有字段都必须添加为索引,否则会抛出异常表示不支持该字段。关于如何使用索引请参考 [自定义模型使用索引](./extension.md#using-indexes)。
-
-:::note
-
-从 2.22.0 开始,`QueryFactory` 已过时,请使用 `Queries` 创建查询条件。取反查询可以通过 `Queries.not(condition)` 或 `condition.not()` 构建。
-
-:::
-
-可以通过 `and` 和 `or` 方法组合和嵌套查询条件:
-
-```java
-import run.halo.app.extension.index.query.Condition;
-import static run.halo.app.extension.index.query.Queries.and;
-import static run.halo.app.extension.index.query.Queries.equal;
-import static run.halo.app.extension.index.query.Queries.or;
-
-Condition query = and(
- or(equal("dept", "A"), equal("dept", "B")),
- or(equal("age", 19), equal("age", 18))
-);
-ListOptions.builder()
- .fieldQuery(query)
- .build();
-```
-
-### 构建 ListOptions
-
-ListOptions 提供了 `builder` 方法用于构建查询条件,`fieldQuery` 方法用于传递字段查询条件,`labelSelector` 方法用于传递标签查询条件。
-
-```java
-import static run.halo.app.extension.index.query.Queries.equal;
-
-ListOptions.builder()
- .labelSelector()
- .eq("key-1", "value-1")
- .end()
- .fieldQuery(equal("key-2", "value-2"))
- .build();
-```
-
-- `labelSelector` 之后使用 `end` 方法结束标签查询条件的构建。
-- `andQuery` 和 `orQuery` 用于组合多个 `FieldSelector` 查询条件。
-
-### 排序
-
-`listBy`、`listNamesBy`、`listAll`、`listAllNames` 和 `listTopNames` 方法都支持传递 `Sort` 参数,用于传递排序条件。
-
-```java
-import org.springframework.data.domain.Sort;
-
-Sort.by(Sort.Order.asc("metadata.name"))
-```
-
-通过 `Sort.by` 方法可以构建排序条件,`Sort.Order` 用于指定排序字段和排序方式,`asc` 表示升序,`desc` 表示降序。
-
-排序中使用的字段必须是添加为索引的字段,否则会抛出异常表示不支持该字段。关于如何使用索引请参考 [自定义模型使用索引](./extension.md#using-indexes)。
-
-### 分页
-
-`listBy` 方法支持传递 `PageRequest` 参数,用于传递分页条件。
-
-```java
-import run.halo.app.extension.PageRequestImpl;
-
-PageRequestImpl.of(1, 10);
-
-PageRequestImpl.of(1, 10, Sort.by(Sort.Order.asc("metadata.name"));
-
-PageRequestImpl.ofSize(10);
-```
-
-通过 `PageRequestImpl.of` 方法可以构建分页条件,具有两个参数的方法用于指定页码和每页数量,具有三个参数的方法用于指定页码、每页数量和排序条件。
-
-`ofSize` 方法用于指定每页数量,页码默认为 1。
diff --git a/versioned_docs/version-2.22/developer-guide/plugin/api-reference/server/extension-getter.md b/versioned_docs/version-2.22/developer-guide/plugin/api-reference/server/extension-getter.md
deleted file mode 100644
index 80f0e348..00000000
--- a/versioned_docs/version-2.22/developer-guide/plugin/api-reference/server/extension-getter.md
+++ /dev/null
@@ -1,72 +0,0 @@
----
-title: 获取扩展
-description: 了解如何在插件中使用 `ExtensionGetter` 获取扩展
----
-
-`ExtensionGetter` 用于获取和管理 Halo 或其他插件提供的扩展。它提供了多种方法来根据扩展点获取扩展,确保插件能够灵活地集成和使用各种扩展功能。
-
-`ExtensionGetter` 接口的定义如下:
-
-```java
-public interface ExtensionGetter {
-
- /**
- * Get only one enabled extension from system configuration.
- *
- * @param extensionPoint is extension point class.
- * @return implementation of the corresponding extension point. If no configuration is found,
- * we will use the default implementation from application context instead.
- */
- Mono getEnabledExtension(Class extensionPoint);
-
- /**
- * Get the extension(s) according to the {@link ExtensionPointDefinition} queried
- * by incoming extension point class.
- *
- * @param extensionPoint extension point class
- * @return implementations of the corresponding extension point.
- * @throws IllegalArgumentException if the incoming extension point class does not have
- * the {@link ExtensionPointDefinition}.
- */
- Flux getEnabledExtensions(Class extensionPoint);
-
- /**
- * Get all extensions according to extension point class.
- *
- * @param extensionPointClass extension point class
- * @param type of extension point
- * @return a bunch of extension points.
- */
- Flux getExtensions(Class extensionPointClass);
-}
-```
-
-包含以下方法:
-
-1. `getEnabledExtension(Class