feat: add docs
This commit is contained in:
@@ -0,0 +1,11 @@
|
|||||||
|
# 排除构建产物
|
||||||
|
dist/* linguist-generated=true
|
||||||
|
|
||||||
|
# 排除第三方
|
||||||
|
node_modules/* linguist-vendored=true
|
||||||
|
|
||||||
|
# 排除文档
|
||||||
|
docs/* linguist-documentation=true
|
||||||
|
|
||||||
|
# SQL 统计为 SQL
|
||||||
|
*.sql linguist-language=SQL
|
||||||
@@ -0,0 +1,59 @@
|
|||||||
|
name: Deploy VitePress to Pages
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [main, docs]
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
pages: write
|
||||||
|
id-token: write
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: "pages"
|
||||||
|
cancel-in-progress: false
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Setup Node
|
||||||
|
uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: 20
|
||||||
|
cache: 'npm'
|
||||||
|
cache-dependency-path: docs/package-lock.json
|
||||||
|
|
||||||
|
- name: Setup Pages
|
||||||
|
uses: actions/configure-pages@v4
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: npm ci
|
||||||
|
working-directory: docs
|
||||||
|
|
||||||
|
- name: Build with VitePress
|
||||||
|
run: npm run docs:build
|
||||||
|
working-directory: docs
|
||||||
|
|
||||||
|
- name: Upload artifact
|
||||||
|
uses: actions/upload-pages-artifact@v3
|
||||||
|
with:
|
||||||
|
path: docs/.vitepress/dist
|
||||||
|
|
||||||
|
deploy:
|
||||||
|
environment:
|
||||||
|
name: github-pages
|
||||||
|
url: ${{ steps.deployment.outputs.page_url }}
|
||||||
|
needs: build
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
name: Deploy
|
||||||
|
steps:
|
||||||
|
- name: Deploy to GitHub Pages
|
||||||
|
id: deployment
|
||||||
|
uses: actions/deploy-pages@v4
|
||||||
+275
@@ -0,0 +1,275 @@
|
|||||||
|
import {
|
||||||
|
useMediaQuery
|
||||||
|
} from "./chunk-YNJBICHS.js";
|
||||||
|
import {
|
||||||
|
computed,
|
||||||
|
ref,
|
||||||
|
shallowRef,
|
||||||
|
watch
|
||||||
|
} from "./chunk-P622L5TS.js";
|
||||||
|
|
||||||
|
// node_modules/vitepress/dist/client/theme-default/index.js
|
||||||
|
import "F:/workspace/baihu2/docs/node_modules/vitepress/dist/client/theme-default/styles/fonts.css";
|
||||||
|
|
||||||
|
// node_modules/vitepress/dist/client/theme-default/without-fonts.js
|
||||||
|
import "F:/workspace/baihu2/docs/node_modules/vitepress/dist/client/theme-default/styles/vars.css";
|
||||||
|
import "F:/workspace/baihu2/docs/node_modules/vitepress/dist/client/theme-default/styles/base.css";
|
||||||
|
import "F:/workspace/baihu2/docs/node_modules/vitepress/dist/client/theme-default/styles/icons.css";
|
||||||
|
import "F:/workspace/baihu2/docs/node_modules/vitepress/dist/client/theme-default/styles/utils.css";
|
||||||
|
import "F:/workspace/baihu2/docs/node_modules/vitepress/dist/client/theme-default/styles/components/custom-block.css";
|
||||||
|
import "F:/workspace/baihu2/docs/node_modules/vitepress/dist/client/theme-default/styles/components/vp-code.css";
|
||||||
|
import "F:/workspace/baihu2/docs/node_modules/vitepress/dist/client/theme-default/styles/components/vp-code-group.css";
|
||||||
|
import "F:/workspace/baihu2/docs/node_modules/vitepress/dist/client/theme-default/styles/components/vp-doc.css";
|
||||||
|
import "F:/workspace/baihu2/docs/node_modules/vitepress/dist/client/theme-default/styles/components/vp-sponsor.css";
|
||||||
|
import VPBadge from "F:/workspace/baihu2/docs/node_modules/vitepress/dist/client/theme-default/components/VPBadge.vue";
|
||||||
|
import Layout from "F:/workspace/baihu2/docs/node_modules/vitepress/dist/client/theme-default/Layout.vue";
|
||||||
|
import { default as default2 } from "F:/workspace/baihu2/docs/node_modules/vitepress/dist/client/theme-default/components/VPBadge.vue";
|
||||||
|
import { default as default3 } from "F:/workspace/baihu2/docs/node_modules/vitepress/dist/client/theme-default/components/VPButton.vue";
|
||||||
|
import { default as default4 } from "F:/workspace/baihu2/docs/node_modules/vitepress/dist/client/theme-default/components/VPDocAsideSponsors.vue";
|
||||||
|
import { default as default5 } from "F:/workspace/baihu2/docs/node_modules/vitepress/dist/client/theme-default/components/VPFeatures.vue";
|
||||||
|
import { default as default6 } from "F:/workspace/baihu2/docs/node_modules/vitepress/dist/client/theme-default/components/VPHomeContent.vue";
|
||||||
|
import { default as default7 } from "F:/workspace/baihu2/docs/node_modules/vitepress/dist/client/theme-default/components/VPHomeFeatures.vue";
|
||||||
|
import { default as default8 } from "F:/workspace/baihu2/docs/node_modules/vitepress/dist/client/theme-default/components/VPHomeHero.vue";
|
||||||
|
import { default as default9 } from "F:/workspace/baihu2/docs/node_modules/vitepress/dist/client/theme-default/components/VPHomeSponsors.vue";
|
||||||
|
import { default as default10 } from "F:/workspace/baihu2/docs/node_modules/vitepress/dist/client/theme-default/components/VPImage.vue";
|
||||||
|
import { default as default11 } from "F:/workspace/baihu2/docs/node_modules/vitepress/dist/client/theme-default/components/VPLink.vue";
|
||||||
|
import { default as default12 } from "F:/workspace/baihu2/docs/node_modules/vitepress/dist/client/theme-default/components/VPNavBarSearch.vue";
|
||||||
|
import { default as default13 } from "F:/workspace/baihu2/docs/node_modules/vitepress/dist/client/theme-default/components/VPSocialLink.vue";
|
||||||
|
import { default as default14 } from "F:/workspace/baihu2/docs/node_modules/vitepress/dist/client/theme-default/components/VPSocialLinks.vue";
|
||||||
|
import { default as default15 } from "F:/workspace/baihu2/docs/node_modules/vitepress/dist/client/theme-default/components/VPSponsors.vue";
|
||||||
|
import { default as default16 } from "F:/workspace/baihu2/docs/node_modules/vitepress/dist/client/theme-default/components/VPTeamMembers.vue";
|
||||||
|
import { default as default17 } from "F:/workspace/baihu2/docs/node_modules/vitepress/dist/client/theme-default/components/VPTeamPage.vue";
|
||||||
|
import { default as default18 } from "F:/workspace/baihu2/docs/node_modules/vitepress/dist/client/theme-default/components/VPTeamPageSection.vue";
|
||||||
|
import { default as default19 } from "F:/workspace/baihu2/docs/node_modules/vitepress/dist/client/theme-default/components/VPTeamPageTitle.vue";
|
||||||
|
|
||||||
|
// node_modules/vitepress/dist/client/theme-default/composables/local-nav.js
|
||||||
|
import { onContentUpdated } from "vitepress";
|
||||||
|
|
||||||
|
// node_modules/vitepress/dist/client/theme-default/composables/outline.js
|
||||||
|
import { getScrollOffset } from "vitepress";
|
||||||
|
|
||||||
|
// node_modules/vitepress/dist/client/theme-default/support/utils.js
|
||||||
|
import { withBase } from "vitepress";
|
||||||
|
|
||||||
|
// node_modules/vitepress/dist/client/theme-default/composables/data.js
|
||||||
|
import { useData as useData$ } from "vitepress";
|
||||||
|
var useData = useData$;
|
||||||
|
|
||||||
|
// node_modules/vitepress/dist/client/theme-default/support/utils.js
|
||||||
|
function ensureStartingSlash(path) {
|
||||||
|
return path.startsWith("/") ? path : `/${path}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
// node_modules/vitepress/dist/client/theme-default/support/sidebar.js
|
||||||
|
function getSidebar(_sidebar, path) {
|
||||||
|
if (Array.isArray(_sidebar))
|
||||||
|
return addBase(_sidebar);
|
||||||
|
if (_sidebar == null)
|
||||||
|
return [];
|
||||||
|
path = ensureStartingSlash(path);
|
||||||
|
const dir = Object.keys(_sidebar).sort((a, b) => {
|
||||||
|
return b.split("/").length - a.split("/").length;
|
||||||
|
}).find((dir2) => {
|
||||||
|
return path.startsWith(ensureStartingSlash(dir2));
|
||||||
|
});
|
||||||
|
const sidebar = dir ? _sidebar[dir] : [];
|
||||||
|
return Array.isArray(sidebar) ? addBase(sidebar) : addBase(sidebar.items, sidebar.base);
|
||||||
|
}
|
||||||
|
function getSidebarGroups(sidebar) {
|
||||||
|
const groups = [];
|
||||||
|
let lastGroupIndex = 0;
|
||||||
|
for (const index in sidebar) {
|
||||||
|
const item = sidebar[index];
|
||||||
|
if (item.items) {
|
||||||
|
lastGroupIndex = groups.push(item);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (!groups[lastGroupIndex]) {
|
||||||
|
groups.push({ items: [] });
|
||||||
|
}
|
||||||
|
groups[lastGroupIndex].items.push(item);
|
||||||
|
}
|
||||||
|
return groups;
|
||||||
|
}
|
||||||
|
function addBase(items, _base) {
|
||||||
|
return [...items].map((_item) => {
|
||||||
|
const item = { ..._item };
|
||||||
|
const base = item.base || _base;
|
||||||
|
if (base && item.link)
|
||||||
|
item.link = base + item.link;
|
||||||
|
if (item.items)
|
||||||
|
item.items = addBase(item.items, base);
|
||||||
|
return item;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// node_modules/vitepress/dist/client/theme-default/composables/sidebar.js
|
||||||
|
function useSidebar() {
|
||||||
|
const { frontmatter, page, theme: theme2 } = useData();
|
||||||
|
const is960 = useMediaQuery("(min-width: 960px)");
|
||||||
|
const isOpen = ref(false);
|
||||||
|
const _sidebar = computed(() => {
|
||||||
|
const sidebarConfig = theme2.value.sidebar;
|
||||||
|
const relativePath = page.value.relativePath;
|
||||||
|
return sidebarConfig ? getSidebar(sidebarConfig, relativePath) : [];
|
||||||
|
});
|
||||||
|
const sidebar = ref(_sidebar.value);
|
||||||
|
watch(_sidebar, (next, prev) => {
|
||||||
|
if (JSON.stringify(next) !== JSON.stringify(prev))
|
||||||
|
sidebar.value = _sidebar.value;
|
||||||
|
});
|
||||||
|
const hasSidebar = computed(() => {
|
||||||
|
return frontmatter.value.sidebar !== false && sidebar.value.length > 0 && frontmatter.value.layout !== "home";
|
||||||
|
});
|
||||||
|
const leftAside = computed(() => {
|
||||||
|
if (hasAside)
|
||||||
|
return frontmatter.value.aside == null ? theme2.value.aside === "left" : frontmatter.value.aside === "left";
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
const hasAside = computed(() => {
|
||||||
|
if (frontmatter.value.layout === "home")
|
||||||
|
return false;
|
||||||
|
if (frontmatter.value.aside != null)
|
||||||
|
return !!frontmatter.value.aside;
|
||||||
|
return theme2.value.aside !== false;
|
||||||
|
});
|
||||||
|
const isSidebarEnabled = computed(() => hasSidebar.value && is960.value);
|
||||||
|
const sidebarGroups = computed(() => {
|
||||||
|
return hasSidebar.value ? getSidebarGroups(sidebar.value) : [];
|
||||||
|
});
|
||||||
|
function open() {
|
||||||
|
isOpen.value = true;
|
||||||
|
}
|
||||||
|
function close() {
|
||||||
|
isOpen.value = false;
|
||||||
|
}
|
||||||
|
function toggle() {
|
||||||
|
isOpen.value ? close() : open();
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
isOpen,
|
||||||
|
sidebar,
|
||||||
|
sidebarGroups,
|
||||||
|
hasSidebar,
|
||||||
|
hasAside,
|
||||||
|
leftAside,
|
||||||
|
isSidebarEnabled,
|
||||||
|
open,
|
||||||
|
close,
|
||||||
|
toggle
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// node_modules/vitepress/dist/client/theme-default/composables/outline.js
|
||||||
|
var ignoreRE = /\b(?:VPBadge|header-anchor|footnote-ref|ignore-header)\b/;
|
||||||
|
var resolvedHeaders = [];
|
||||||
|
function getHeaders(range) {
|
||||||
|
const headers = [
|
||||||
|
...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")
|
||||||
|
].filter((el) => el.id && el.hasChildNodes()).map((el) => {
|
||||||
|
const level = Number(el.tagName[1]);
|
||||||
|
return {
|
||||||
|
element: el,
|
||||||
|
title: serializeHeader(el),
|
||||||
|
link: "#" + el.id,
|
||||||
|
level
|
||||||
|
};
|
||||||
|
});
|
||||||
|
return resolveHeaders(headers, range);
|
||||||
|
}
|
||||||
|
function serializeHeader(h) {
|
||||||
|
let ret = "";
|
||||||
|
for (const node of h.childNodes) {
|
||||||
|
if (node.nodeType === 1) {
|
||||||
|
if (ignoreRE.test(node.className))
|
||||||
|
continue;
|
||||||
|
ret += node.textContent;
|
||||||
|
} else if (node.nodeType === 3) {
|
||||||
|
ret += node.textContent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ret.trim();
|
||||||
|
}
|
||||||
|
function resolveHeaders(headers, range) {
|
||||||
|
if (range === false) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
const levelsRange = (typeof range === "object" && !Array.isArray(range) ? range.level : range) || 2;
|
||||||
|
const [high, low] = typeof levelsRange === "number" ? [levelsRange, levelsRange] : levelsRange === "deep" ? [2, 6] : levelsRange;
|
||||||
|
return buildTree(headers, high, low);
|
||||||
|
}
|
||||||
|
function buildTree(data, min, max) {
|
||||||
|
resolvedHeaders.length = 0;
|
||||||
|
const result = [];
|
||||||
|
const stack = [];
|
||||||
|
data.forEach((item) => {
|
||||||
|
const node = { ...item, children: [] };
|
||||||
|
let parent = stack[stack.length - 1];
|
||||||
|
while (parent && parent.level >= node.level) {
|
||||||
|
stack.pop();
|
||||||
|
parent = stack[stack.length - 1];
|
||||||
|
}
|
||||||
|
if (node.element.classList.contains("ignore-header") || parent && "shouldIgnore" in parent) {
|
||||||
|
stack.push({ level: node.level, shouldIgnore: true });
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (node.level > max || node.level < min)
|
||||||
|
return;
|
||||||
|
resolvedHeaders.push({ element: node.element, link: node.link });
|
||||||
|
if (parent)
|
||||||
|
parent.children.push(node);
|
||||||
|
else
|
||||||
|
result.push(node);
|
||||||
|
stack.push(node);
|
||||||
|
});
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// node_modules/vitepress/dist/client/theme-default/composables/local-nav.js
|
||||||
|
function useLocalNav() {
|
||||||
|
const { theme: theme2, frontmatter } = useData();
|
||||||
|
const headers = shallowRef([]);
|
||||||
|
const hasLocalNav = computed(() => {
|
||||||
|
return headers.value.length > 0;
|
||||||
|
});
|
||||||
|
onContentUpdated(() => {
|
||||||
|
headers.value = getHeaders(frontmatter.value.outline ?? theme2.value.outline);
|
||||||
|
});
|
||||||
|
return {
|
||||||
|
headers,
|
||||||
|
hasLocalNav
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// node_modules/vitepress/dist/client/theme-default/without-fonts.js
|
||||||
|
var theme = {
|
||||||
|
Layout,
|
||||||
|
enhanceApp: ({ app }) => {
|
||||||
|
app.component("Badge", VPBadge);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var without_fonts_default = theme;
|
||||||
|
export {
|
||||||
|
default2 as VPBadge,
|
||||||
|
default3 as VPButton,
|
||||||
|
default4 as VPDocAsideSponsors,
|
||||||
|
default5 as VPFeatures,
|
||||||
|
default6 as VPHomeContent,
|
||||||
|
default7 as VPHomeFeatures,
|
||||||
|
default8 as VPHomeHero,
|
||||||
|
default9 as VPHomeSponsors,
|
||||||
|
default10 as VPImage,
|
||||||
|
default11 as VPLink,
|
||||||
|
default12 as VPNavBarSearch,
|
||||||
|
default13 as VPSocialLink,
|
||||||
|
default14 as VPSocialLinks,
|
||||||
|
default15 as VPSponsors,
|
||||||
|
default16 as VPTeamMembers,
|
||||||
|
default17 as VPTeamPage,
|
||||||
|
default18 as VPTeamPageSection,
|
||||||
|
default19 as VPTeamPageTitle,
|
||||||
|
without_fonts_default as default,
|
||||||
|
useLocalNav,
|
||||||
|
useSidebar
|
||||||
|
};
|
||||||
|
//# sourceMappingURL=@theme_index.js.map
|
||||||
File diff suppressed because one or more lines are too long
+58
@@ -0,0 +1,58 @@
|
|||||||
|
{
|
||||||
|
"hash": "c1e79c58",
|
||||||
|
"configHash": "bc8361ef",
|
||||||
|
"lockfileHash": "c12d42b4",
|
||||||
|
"browserHash": "50d21c6b",
|
||||||
|
"optimized": {
|
||||||
|
"vue": {
|
||||||
|
"src": "../../../node_modules/vue/dist/vue.runtime.esm-bundler.js",
|
||||||
|
"file": "vue.js",
|
||||||
|
"fileHash": "a184effb",
|
||||||
|
"needsInterop": false
|
||||||
|
},
|
||||||
|
"vitepress > @vue/devtools-api": {
|
||||||
|
"src": "../../../node_modules/@vue/devtools-api/dist/index.js",
|
||||||
|
"file": "vitepress___@vue_devtools-api.js",
|
||||||
|
"fileHash": "710eaece",
|
||||||
|
"needsInterop": false
|
||||||
|
},
|
||||||
|
"vitepress > @vueuse/core": {
|
||||||
|
"src": "../../../node_modules/@vueuse/core/index.mjs",
|
||||||
|
"file": "vitepress___@vueuse_core.js",
|
||||||
|
"fileHash": "34e9305a",
|
||||||
|
"needsInterop": false
|
||||||
|
},
|
||||||
|
"vitepress > @vueuse/integrations/useFocusTrap": {
|
||||||
|
"src": "../../../node_modules/@vueuse/integrations/useFocusTrap.mjs",
|
||||||
|
"file": "vitepress___@vueuse_integrations_useFocusTrap.js",
|
||||||
|
"fileHash": "24943145",
|
||||||
|
"needsInterop": false
|
||||||
|
},
|
||||||
|
"vitepress > mark.js/src/vanilla.js": {
|
||||||
|
"src": "../../../node_modules/mark.js/src/vanilla.js",
|
||||||
|
"file": "vitepress___mark__js_src_vanilla__js.js",
|
||||||
|
"fileHash": "ab1af925",
|
||||||
|
"needsInterop": false
|
||||||
|
},
|
||||||
|
"vitepress > minisearch": {
|
||||||
|
"src": "../../../node_modules/minisearch/dist/es/index.js",
|
||||||
|
"file": "vitepress___minisearch.js",
|
||||||
|
"fileHash": "6d234334",
|
||||||
|
"needsInterop": false
|
||||||
|
},
|
||||||
|
"@theme/index": {
|
||||||
|
"src": "../../../node_modules/vitepress/dist/client/theme-default/index.js",
|
||||||
|
"file": "@theme_index.js",
|
||||||
|
"fileHash": "e4dc0002",
|
||||||
|
"needsInterop": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"chunks": {
|
||||||
|
"chunk-YNJBICHS": {
|
||||||
|
"file": "chunk-YNJBICHS.js"
|
||||||
|
},
|
||||||
|
"chunk-P622L5TS": {
|
||||||
|
"file": "chunk-P622L5TS.js"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+12951
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
+9719
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
+3
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"type": "module"
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@@ -0,0 +1,583 @@
|
|||||||
|
import {
|
||||||
|
DefaultMagicKeysAliasMap,
|
||||||
|
StorageSerializers,
|
||||||
|
TransitionPresets,
|
||||||
|
assert,
|
||||||
|
breakpointsAntDesign,
|
||||||
|
breakpointsBootstrapV5,
|
||||||
|
breakpointsElement,
|
||||||
|
breakpointsMasterCss,
|
||||||
|
breakpointsPrimeFlex,
|
||||||
|
breakpointsQuasar,
|
||||||
|
breakpointsSematic,
|
||||||
|
breakpointsTailwind,
|
||||||
|
breakpointsVuetify,
|
||||||
|
breakpointsVuetifyV2,
|
||||||
|
breakpointsVuetifyV3,
|
||||||
|
bypassFilter,
|
||||||
|
camelize,
|
||||||
|
clamp,
|
||||||
|
cloneFnJSON,
|
||||||
|
computedAsync,
|
||||||
|
computedEager,
|
||||||
|
computedInject,
|
||||||
|
computedWithControl,
|
||||||
|
containsProp,
|
||||||
|
controlledRef,
|
||||||
|
createEventHook,
|
||||||
|
createFetch,
|
||||||
|
createFilterWrapper,
|
||||||
|
createGlobalState,
|
||||||
|
createInjectionState,
|
||||||
|
createRef,
|
||||||
|
createReusableTemplate,
|
||||||
|
createSharedComposable,
|
||||||
|
createSingletonPromise,
|
||||||
|
createTemplatePromise,
|
||||||
|
createUnrefFn,
|
||||||
|
customStorageEventName,
|
||||||
|
debounceFilter,
|
||||||
|
defaultDocument,
|
||||||
|
defaultLocation,
|
||||||
|
defaultNavigator,
|
||||||
|
defaultWindow,
|
||||||
|
executeTransition,
|
||||||
|
extendRef,
|
||||||
|
formatDate,
|
||||||
|
formatTimeAgo,
|
||||||
|
get,
|
||||||
|
getLifeCycleTarget,
|
||||||
|
getSSRHandler,
|
||||||
|
hasOwn,
|
||||||
|
hyphenate,
|
||||||
|
identity,
|
||||||
|
increaseWithUnit,
|
||||||
|
injectLocal,
|
||||||
|
invoke,
|
||||||
|
isClient,
|
||||||
|
isDef,
|
||||||
|
isDefined,
|
||||||
|
isIOS,
|
||||||
|
isObject,
|
||||||
|
isWorker,
|
||||||
|
makeDestructurable,
|
||||||
|
mapGamepadToXbox360Controller,
|
||||||
|
noop,
|
||||||
|
normalizeDate,
|
||||||
|
notNullish,
|
||||||
|
now,
|
||||||
|
objectEntries,
|
||||||
|
objectOmit,
|
||||||
|
objectPick,
|
||||||
|
onClickOutside,
|
||||||
|
onElementRemoval,
|
||||||
|
onKeyDown,
|
||||||
|
onKeyPressed,
|
||||||
|
onKeyStroke,
|
||||||
|
onKeyUp,
|
||||||
|
onLongPress,
|
||||||
|
onStartTyping,
|
||||||
|
pausableFilter,
|
||||||
|
promiseTimeout,
|
||||||
|
provideLocal,
|
||||||
|
provideSSRWidth,
|
||||||
|
pxValue,
|
||||||
|
rand,
|
||||||
|
reactify,
|
||||||
|
reactifyObject,
|
||||||
|
reactiveComputed,
|
||||||
|
reactiveOmit,
|
||||||
|
reactivePick,
|
||||||
|
refAutoReset,
|
||||||
|
refDebounced,
|
||||||
|
refDefault,
|
||||||
|
refThrottled,
|
||||||
|
refWithControl,
|
||||||
|
resolveRef,
|
||||||
|
resolveUnref,
|
||||||
|
set,
|
||||||
|
setSSRHandler,
|
||||||
|
syncRef,
|
||||||
|
syncRefs,
|
||||||
|
templateRef,
|
||||||
|
throttleFilter,
|
||||||
|
timestamp,
|
||||||
|
toArray,
|
||||||
|
toReactive,
|
||||||
|
toRef,
|
||||||
|
toRefs,
|
||||||
|
toValue,
|
||||||
|
tryOnBeforeMount,
|
||||||
|
tryOnBeforeUnmount,
|
||||||
|
tryOnMounted,
|
||||||
|
tryOnScopeDispose,
|
||||||
|
tryOnUnmounted,
|
||||||
|
unrefElement,
|
||||||
|
until,
|
||||||
|
useActiveElement,
|
||||||
|
useAnimate,
|
||||||
|
useArrayDifference,
|
||||||
|
useArrayEvery,
|
||||||
|
useArrayFilter,
|
||||||
|
useArrayFind,
|
||||||
|
useArrayFindIndex,
|
||||||
|
useArrayFindLast,
|
||||||
|
useArrayIncludes,
|
||||||
|
useArrayJoin,
|
||||||
|
useArrayMap,
|
||||||
|
useArrayReduce,
|
||||||
|
useArraySome,
|
||||||
|
useArrayUnique,
|
||||||
|
useAsyncQueue,
|
||||||
|
useAsyncState,
|
||||||
|
useBase64,
|
||||||
|
useBattery,
|
||||||
|
useBluetooth,
|
||||||
|
useBreakpoints,
|
||||||
|
useBroadcastChannel,
|
||||||
|
useBrowserLocation,
|
||||||
|
useCached,
|
||||||
|
useClipboard,
|
||||||
|
useClipboardItems,
|
||||||
|
useCloned,
|
||||||
|
useColorMode,
|
||||||
|
useConfirmDialog,
|
||||||
|
useCountdown,
|
||||||
|
useCounter,
|
||||||
|
useCssVar,
|
||||||
|
useCurrentElement,
|
||||||
|
useCycleList,
|
||||||
|
useDark,
|
||||||
|
useDateFormat,
|
||||||
|
useDebounceFn,
|
||||||
|
useDebouncedRefHistory,
|
||||||
|
useDeviceMotion,
|
||||||
|
useDeviceOrientation,
|
||||||
|
useDevicePixelRatio,
|
||||||
|
useDevicesList,
|
||||||
|
useDisplayMedia,
|
||||||
|
useDocumentVisibility,
|
||||||
|
useDraggable,
|
||||||
|
useDropZone,
|
||||||
|
useElementBounding,
|
||||||
|
useElementByPoint,
|
||||||
|
useElementHover,
|
||||||
|
useElementSize,
|
||||||
|
useElementVisibility,
|
||||||
|
useEventBus,
|
||||||
|
useEventListener,
|
||||||
|
useEventSource,
|
||||||
|
useEyeDropper,
|
||||||
|
useFavicon,
|
||||||
|
useFetch,
|
||||||
|
useFileDialog,
|
||||||
|
useFileSystemAccess,
|
||||||
|
useFocus,
|
||||||
|
useFocusWithin,
|
||||||
|
useFps,
|
||||||
|
useFullscreen,
|
||||||
|
useGamepad,
|
||||||
|
useGeolocation,
|
||||||
|
useIdle,
|
||||||
|
useImage,
|
||||||
|
useInfiniteScroll,
|
||||||
|
useIntersectionObserver,
|
||||||
|
useInterval,
|
||||||
|
useIntervalFn,
|
||||||
|
useKeyModifier,
|
||||||
|
useLastChanged,
|
||||||
|
useLocalStorage,
|
||||||
|
useMagicKeys,
|
||||||
|
useManualRefHistory,
|
||||||
|
useMediaControls,
|
||||||
|
useMediaQuery,
|
||||||
|
useMemoize,
|
||||||
|
useMemory,
|
||||||
|
useMounted,
|
||||||
|
useMouse,
|
||||||
|
useMouseInElement,
|
||||||
|
useMousePressed,
|
||||||
|
useMutationObserver,
|
||||||
|
useNavigatorLanguage,
|
||||||
|
useNetwork,
|
||||||
|
useNow,
|
||||||
|
useObjectUrl,
|
||||||
|
useOffsetPagination,
|
||||||
|
useOnline,
|
||||||
|
usePageLeave,
|
||||||
|
useParallax,
|
||||||
|
useParentElement,
|
||||||
|
usePerformanceObserver,
|
||||||
|
usePermission,
|
||||||
|
usePointer,
|
||||||
|
usePointerLock,
|
||||||
|
usePointerSwipe,
|
||||||
|
usePreferredColorScheme,
|
||||||
|
usePreferredContrast,
|
||||||
|
usePreferredDark,
|
||||||
|
usePreferredLanguages,
|
||||||
|
usePreferredReducedMotion,
|
||||||
|
usePreferredReducedTransparency,
|
||||||
|
usePrevious,
|
||||||
|
useRafFn,
|
||||||
|
useRefHistory,
|
||||||
|
useResizeObserver,
|
||||||
|
useSSRWidth,
|
||||||
|
useScreenOrientation,
|
||||||
|
useScreenSafeArea,
|
||||||
|
useScriptTag,
|
||||||
|
useScroll,
|
||||||
|
useScrollLock,
|
||||||
|
useSessionStorage,
|
||||||
|
useShare,
|
||||||
|
useSorted,
|
||||||
|
useSpeechRecognition,
|
||||||
|
useSpeechSynthesis,
|
||||||
|
useStepper,
|
||||||
|
useStorage,
|
||||||
|
useStorageAsync,
|
||||||
|
useStyleTag,
|
||||||
|
useSupported,
|
||||||
|
useSwipe,
|
||||||
|
useTemplateRefsList,
|
||||||
|
useTextDirection,
|
||||||
|
useTextSelection,
|
||||||
|
useTextareaAutosize,
|
||||||
|
useThrottleFn,
|
||||||
|
useThrottledRefHistory,
|
||||||
|
useTimeAgo,
|
||||||
|
useTimeout,
|
||||||
|
useTimeoutFn,
|
||||||
|
useTimeoutPoll,
|
||||||
|
useTimestamp,
|
||||||
|
useTitle,
|
||||||
|
useToNumber,
|
||||||
|
useToString,
|
||||||
|
useToggle,
|
||||||
|
useTransition,
|
||||||
|
useUrlSearchParams,
|
||||||
|
useUserMedia,
|
||||||
|
useVModel,
|
||||||
|
useVModels,
|
||||||
|
useVibrate,
|
||||||
|
useVirtualList,
|
||||||
|
useWakeLock,
|
||||||
|
useWebNotification,
|
||||||
|
useWebSocket,
|
||||||
|
useWebWorker,
|
||||||
|
useWebWorkerFn,
|
||||||
|
useWindowFocus,
|
||||||
|
useWindowScroll,
|
||||||
|
useWindowSize,
|
||||||
|
watchArray,
|
||||||
|
watchAtMost,
|
||||||
|
watchDebounced,
|
||||||
|
watchDeep,
|
||||||
|
watchIgnorable,
|
||||||
|
watchImmediate,
|
||||||
|
watchOnce,
|
||||||
|
watchPausable,
|
||||||
|
watchThrottled,
|
||||||
|
watchTriggerable,
|
||||||
|
watchWithFilter,
|
||||||
|
whenever
|
||||||
|
} from "./chunk-YNJBICHS.js";
|
||||||
|
import "./chunk-P622L5TS.js";
|
||||||
|
export {
|
||||||
|
DefaultMagicKeysAliasMap,
|
||||||
|
StorageSerializers,
|
||||||
|
TransitionPresets,
|
||||||
|
assert,
|
||||||
|
computedAsync as asyncComputed,
|
||||||
|
refAutoReset as autoResetRef,
|
||||||
|
breakpointsAntDesign,
|
||||||
|
breakpointsBootstrapV5,
|
||||||
|
breakpointsElement,
|
||||||
|
breakpointsMasterCss,
|
||||||
|
breakpointsPrimeFlex,
|
||||||
|
breakpointsQuasar,
|
||||||
|
breakpointsSematic,
|
||||||
|
breakpointsTailwind,
|
||||||
|
breakpointsVuetify,
|
||||||
|
breakpointsVuetifyV2,
|
||||||
|
breakpointsVuetifyV3,
|
||||||
|
bypassFilter,
|
||||||
|
camelize,
|
||||||
|
clamp,
|
||||||
|
cloneFnJSON,
|
||||||
|
computedAsync,
|
||||||
|
computedEager,
|
||||||
|
computedInject,
|
||||||
|
computedWithControl,
|
||||||
|
containsProp,
|
||||||
|
computedWithControl as controlledComputed,
|
||||||
|
controlledRef,
|
||||||
|
createEventHook,
|
||||||
|
createFetch,
|
||||||
|
createFilterWrapper,
|
||||||
|
createGlobalState,
|
||||||
|
createInjectionState,
|
||||||
|
reactify as createReactiveFn,
|
||||||
|
createRef,
|
||||||
|
createReusableTemplate,
|
||||||
|
createSharedComposable,
|
||||||
|
createSingletonPromise,
|
||||||
|
createTemplatePromise,
|
||||||
|
createUnrefFn,
|
||||||
|
customStorageEventName,
|
||||||
|
debounceFilter,
|
||||||
|
refDebounced as debouncedRef,
|
||||||
|
watchDebounced as debouncedWatch,
|
||||||
|
defaultDocument,
|
||||||
|
defaultLocation,
|
||||||
|
defaultNavigator,
|
||||||
|
defaultWindow,
|
||||||
|
computedEager as eagerComputed,
|
||||||
|
executeTransition,
|
||||||
|
extendRef,
|
||||||
|
formatDate,
|
||||||
|
formatTimeAgo,
|
||||||
|
get,
|
||||||
|
getLifeCycleTarget,
|
||||||
|
getSSRHandler,
|
||||||
|
hasOwn,
|
||||||
|
hyphenate,
|
||||||
|
identity,
|
||||||
|
watchIgnorable as ignorableWatch,
|
||||||
|
increaseWithUnit,
|
||||||
|
injectLocal,
|
||||||
|
invoke,
|
||||||
|
isClient,
|
||||||
|
isDef,
|
||||||
|
isDefined,
|
||||||
|
isIOS,
|
||||||
|
isObject,
|
||||||
|
isWorker,
|
||||||
|
makeDestructurable,
|
||||||
|
mapGamepadToXbox360Controller,
|
||||||
|
noop,
|
||||||
|
normalizeDate,
|
||||||
|
notNullish,
|
||||||
|
now,
|
||||||
|
objectEntries,
|
||||||
|
objectOmit,
|
||||||
|
objectPick,
|
||||||
|
onClickOutside,
|
||||||
|
onElementRemoval,
|
||||||
|
onKeyDown,
|
||||||
|
onKeyPressed,
|
||||||
|
onKeyStroke,
|
||||||
|
onKeyUp,
|
||||||
|
onLongPress,
|
||||||
|
onStartTyping,
|
||||||
|
pausableFilter,
|
||||||
|
watchPausable as pausableWatch,
|
||||||
|
promiseTimeout,
|
||||||
|
provideLocal,
|
||||||
|
provideSSRWidth,
|
||||||
|
pxValue,
|
||||||
|
rand,
|
||||||
|
reactify,
|
||||||
|
reactifyObject,
|
||||||
|
reactiveComputed,
|
||||||
|
reactiveOmit,
|
||||||
|
reactivePick,
|
||||||
|
refAutoReset,
|
||||||
|
refDebounced,
|
||||||
|
refDefault,
|
||||||
|
refThrottled,
|
||||||
|
refWithControl,
|
||||||
|
resolveRef,
|
||||||
|
resolveUnref,
|
||||||
|
set,
|
||||||
|
setSSRHandler,
|
||||||
|
syncRef,
|
||||||
|
syncRefs,
|
||||||
|
templateRef,
|
||||||
|
throttleFilter,
|
||||||
|
refThrottled as throttledRef,
|
||||||
|
watchThrottled as throttledWatch,
|
||||||
|
timestamp,
|
||||||
|
toArray,
|
||||||
|
toReactive,
|
||||||
|
toRef,
|
||||||
|
toRefs,
|
||||||
|
toValue,
|
||||||
|
tryOnBeforeMount,
|
||||||
|
tryOnBeforeUnmount,
|
||||||
|
tryOnMounted,
|
||||||
|
tryOnScopeDispose,
|
||||||
|
tryOnUnmounted,
|
||||||
|
unrefElement,
|
||||||
|
until,
|
||||||
|
useActiveElement,
|
||||||
|
useAnimate,
|
||||||
|
useArrayDifference,
|
||||||
|
useArrayEvery,
|
||||||
|
useArrayFilter,
|
||||||
|
useArrayFind,
|
||||||
|
useArrayFindIndex,
|
||||||
|
useArrayFindLast,
|
||||||
|
useArrayIncludes,
|
||||||
|
useArrayJoin,
|
||||||
|
useArrayMap,
|
||||||
|
useArrayReduce,
|
||||||
|
useArraySome,
|
||||||
|
useArrayUnique,
|
||||||
|
useAsyncQueue,
|
||||||
|
useAsyncState,
|
||||||
|
useBase64,
|
||||||
|
useBattery,
|
||||||
|
useBluetooth,
|
||||||
|
useBreakpoints,
|
||||||
|
useBroadcastChannel,
|
||||||
|
useBrowserLocation,
|
||||||
|
useCached,
|
||||||
|
useClipboard,
|
||||||
|
useClipboardItems,
|
||||||
|
useCloned,
|
||||||
|
useColorMode,
|
||||||
|
useConfirmDialog,
|
||||||
|
useCountdown,
|
||||||
|
useCounter,
|
||||||
|
useCssVar,
|
||||||
|
useCurrentElement,
|
||||||
|
useCycleList,
|
||||||
|
useDark,
|
||||||
|
useDateFormat,
|
||||||
|
refDebounced as useDebounce,
|
||||||
|
useDebounceFn,
|
||||||
|
useDebouncedRefHistory,
|
||||||
|
useDeviceMotion,
|
||||||
|
useDeviceOrientation,
|
||||||
|
useDevicePixelRatio,
|
||||||
|
useDevicesList,
|
||||||
|
useDisplayMedia,
|
||||||
|
useDocumentVisibility,
|
||||||
|
useDraggable,
|
||||||
|
useDropZone,
|
||||||
|
useElementBounding,
|
||||||
|
useElementByPoint,
|
||||||
|
useElementHover,
|
||||||
|
useElementSize,
|
||||||
|
useElementVisibility,
|
||||||
|
useEventBus,
|
||||||
|
useEventListener,
|
||||||
|
useEventSource,
|
||||||
|
useEyeDropper,
|
||||||
|
useFavicon,
|
||||||
|
useFetch,
|
||||||
|
useFileDialog,
|
||||||
|
useFileSystemAccess,
|
||||||
|
useFocus,
|
||||||
|
useFocusWithin,
|
||||||
|
useFps,
|
||||||
|
useFullscreen,
|
||||||
|
useGamepad,
|
||||||
|
useGeolocation,
|
||||||
|
useIdle,
|
||||||
|
useImage,
|
||||||
|
useInfiniteScroll,
|
||||||
|
useIntersectionObserver,
|
||||||
|
useInterval,
|
||||||
|
useIntervalFn,
|
||||||
|
useKeyModifier,
|
||||||
|
useLastChanged,
|
||||||
|
useLocalStorage,
|
||||||
|
useMagicKeys,
|
||||||
|
useManualRefHistory,
|
||||||
|
useMediaControls,
|
||||||
|
useMediaQuery,
|
||||||
|
useMemoize,
|
||||||
|
useMemory,
|
||||||
|
useMounted,
|
||||||
|
useMouse,
|
||||||
|
useMouseInElement,
|
||||||
|
useMousePressed,
|
||||||
|
useMutationObserver,
|
||||||
|
useNavigatorLanguage,
|
||||||
|
useNetwork,
|
||||||
|
useNow,
|
||||||
|
useObjectUrl,
|
||||||
|
useOffsetPagination,
|
||||||
|
useOnline,
|
||||||
|
usePageLeave,
|
||||||
|
useParallax,
|
||||||
|
useParentElement,
|
||||||
|
usePerformanceObserver,
|
||||||
|
usePermission,
|
||||||
|
usePointer,
|
||||||
|
usePointerLock,
|
||||||
|
usePointerSwipe,
|
||||||
|
usePreferredColorScheme,
|
||||||
|
usePreferredContrast,
|
||||||
|
usePreferredDark,
|
||||||
|
usePreferredLanguages,
|
||||||
|
usePreferredReducedMotion,
|
||||||
|
usePreferredReducedTransparency,
|
||||||
|
usePrevious,
|
||||||
|
useRafFn,
|
||||||
|
useRefHistory,
|
||||||
|
useResizeObserver,
|
||||||
|
useSSRWidth,
|
||||||
|
useScreenOrientation,
|
||||||
|
useScreenSafeArea,
|
||||||
|
useScriptTag,
|
||||||
|
useScroll,
|
||||||
|
useScrollLock,
|
||||||
|
useSessionStorage,
|
||||||
|
useShare,
|
||||||
|
useSorted,
|
||||||
|
useSpeechRecognition,
|
||||||
|
useSpeechSynthesis,
|
||||||
|
useStepper,
|
||||||
|
useStorage,
|
||||||
|
useStorageAsync,
|
||||||
|
useStyleTag,
|
||||||
|
useSupported,
|
||||||
|
useSwipe,
|
||||||
|
useTemplateRefsList,
|
||||||
|
useTextDirection,
|
||||||
|
useTextSelection,
|
||||||
|
useTextareaAutosize,
|
||||||
|
refThrottled as useThrottle,
|
||||||
|
useThrottleFn,
|
||||||
|
useThrottledRefHistory,
|
||||||
|
useTimeAgo,
|
||||||
|
useTimeout,
|
||||||
|
useTimeoutFn,
|
||||||
|
useTimeoutPoll,
|
||||||
|
useTimestamp,
|
||||||
|
useTitle,
|
||||||
|
useToNumber,
|
||||||
|
useToString,
|
||||||
|
useToggle,
|
||||||
|
useTransition,
|
||||||
|
useUrlSearchParams,
|
||||||
|
useUserMedia,
|
||||||
|
useVModel,
|
||||||
|
useVModels,
|
||||||
|
useVibrate,
|
||||||
|
useVirtualList,
|
||||||
|
useWakeLock,
|
||||||
|
useWebNotification,
|
||||||
|
useWebSocket,
|
||||||
|
useWebWorker,
|
||||||
|
useWebWorkerFn,
|
||||||
|
useWindowFocus,
|
||||||
|
useWindowScroll,
|
||||||
|
useWindowSize,
|
||||||
|
watchArray,
|
||||||
|
watchAtMost,
|
||||||
|
watchDebounced,
|
||||||
|
watchDeep,
|
||||||
|
watchIgnorable,
|
||||||
|
watchImmediate,
|
||||||
|
watchOnce,
|
||||||
|
watchPausable,
|
||||||
|
watchThrottled,
|
||||||
|
watchTriggerable,
|
||||||
|
watchWithFilter,
|
||||||
|
whenever
|
||||||
|
};
|
||||||
|
//# sourceMappingURL=vitepress___@vueuse_core.js.map
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"version": 3,
|
||||||
|
"sources": [],
|
||||||
|
"sourcesContent": [],
|
||||||
|
"mappings": "",
|
||||||
|
"names": []
|
||||||
|
}
|
||||||
+1352
File diff suppressed because it is too large
Load Diff
+7
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
+1813
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
Vendored
+347
@@ -0,0 +1,347 @@
|
|||||||
|
import {
|
||||||
|
BaseTransition,
|
||||||
|
BaseTransitionPropsValidators,
|
||||||
|
Comment,
|
||||||
|
DeprecationTypes,
|
||||||
|
EffectScope,
|
||||||
|
ErrorCodes,
|
||||||
|
ErrorTypeStrings,
|
||||||
|
Fragment,
|
||||||
|
KeepAlive,
|
||||||
|
ReactiveEffect,
|
||||||
|
Static,
|
||||||
|
Suspense,
|
||||||
|
Teleport,
|
||||||
|
Text,
|
||||||
|
TrackOpTypes,
|
||||||
|
Transition,
|
||||||
|
TransitionGroup,
|
||||||
|
TriggerOpTypes,
|
||||||
|
VueElement,
|
||||||
|
assertNumber,
|
||||||
|
callWithAsyncErrorHandling,
|
||||||
|
callWithErrorHandling,
|
||||||
|
camelize,
|
||||||
|
capitalize,
|
||||||
|
cloneVNode,
|
||||||
|
compatUtils,
|
||||||
|
compile,
|
||||||
|
computed,
|
||||||
|
createApp,
|
||||||
|
createBaseVNode,
|
||||||
|
createBlock,
|
||||||
|
createCommentVNode,
|
||||||
|
createElementBlock,
|
||||||
|
createHydrationRenderer,
|
||||||
|
createPropsRestProxy,
|
||||||
|
createRenderer,
|
||||||
|
createSSRApp,
|
||||||
|
createSlots,
|
||||||
|
createStaticVNode,
|
||||||
|
createTextVNode,
|
||||||
|
createVNode,
|
||||||
|
customRef,
|
||||||
|
defineAsyncComponent,
|
||||||
|
defineComponent,
|
||||||
|
defineCustomElement,
|
||||||
|
defineEmits,
|
||||||
|
defineExpose,
|
||||||
|
defineModel,
|
||||||
|
defineOptions,
|
||||||
|
defineProps,
|
||||||
|
defineSSRCustomElement,
|
||||||
|
defineSlots,
|
||||||
|
devtools,
|
||||||
|
effect,
|
||||||
|
effectScope,
|
||||||
|
getCurrentInstance,
|
||||||
|
getCurrentScope,
|
||||||
|
getCurrentWatcher,
|
||||||
|
getTransitionRawChildren,
|
||||||
|
guardReactiveProps,
|
||||||
|
h,
|
||||||
|
handleError,
|
||||||
|
hasInjectionContext,
|
||||||
|
hydrate,
|
||||||
|
hydrateOnIdle,
|
||||||
|
hydrateOnInteraction,
|
||||||
|
hydrateOnMediaQuery,
|
||||||
|
hydrateOnVisible,
|
||||||
|
initCustomFormatter,
|
||||||
|
initDirectivesForSSR,
|
||||||
|
inject,
|
||||||
|
isMemoSame,
|
||||||
|
isProxy,
|
||||||
|
isReactive,
|
||||||
|
isReadonly,
|
||||||
|
isRef,
|
||||||
|
isRuntimeOnly,
|
||||||
|
isShallow,
|
||||||
|
isVNode,
|
||||||
|
markRaw,
|
||||||
|
mergeDefaults,
|
||||||
|
mergeModels,
|
||||||
|
mergeProps,
|
||||||
|
nextTick,
|
||||||
|
nodeOps,
|
||||||
|
normalizeClass,
|
||||||
|
normalizeProps,
|
||||||
|
normalizeStyle,
|
||||||
|
onActivated,
|
||||||
|
onBeforeMount,
|
||||||
|
onBeforeUnmount,
|
||||||
|
onBeforeUpdate,
|
||||||
|
onDeactivated,
|
||||||
|
onErrorCaptured,
|
||||||
|
onMounted,
|
||||||
|
onRenderTracked,
|
||||||
|
onRenderTriggered,
|
||||||
|
onScopeDispose,
|
||||||
|
onServerPrefetch,
|
||||||
|
onUnmounted,
|
||||||
|
onUpdated,
|
||||||
|
onWatcherCleanup,
|
||||||
|
openBlock,
|
||||||
|
patchProp,
|
||||||
|
popScopeId,
|
||||||
|
provide,
|
||||||
|
proxyRefs,
|
||||||
|
pushScopeId,
|
||||||
|
queuePostFlushCb,
|
||||||
|
reactive,
|
||||||
|
readonly,
|
||||||
|
ref,
|
||||||
|
registerRuntimeCompiler,
|
||||||
|
render,
|
||||||
|
renderList,
|
||||||
|
renderSlot,
|
||||||
|
resolveComponent,
|
||||||
|
resolveDirective,
|
||||||
|
resolveDynamicComponent,
|
||||||
|
resolveFilter,
|
||||||
|
resolveTransitionHooks,
|
||||||
|
setBlockTracking,
|
||||||
|
setDevtoolsHook,
|
||||||
|
setTransitionHooks,
|
||||||
|
shallowReactive,
|
||||||
|
shallowReadonly,
|
||||||
|
shallowRef,
|
||||||
|
ssrContextKey,
|
||||||
|
ssrUtils,
|
||||||
|
stop,
|
||||||
|
toDisplayString,
|
||||||
|
toHandlerKey,
|
||||||
|
toHandlers,
|
||||||
|
toRaw,
|
||||||
|
toRef,
|
||||||
|
toRefs,
|
||||||
|
toValue,
|
||||||
|
transformVNodeArgs,
|
||||||
|
triggerRef,
|
||||||
|
unref,
|
||||||
|
useAttrs,
|
||||||
|
useCssModule,
|
||||||
|
useCssVars,
|
||||||
|
useHost,
|
||||||
|
useId,
|
||||||
|
useModel,
|
||||||
|
useSSRContext,
|
||||||
|
useShadowRoot,
|
||||||
|
useSlots,
|
||||||
|
useTemplateRef,
|
||||||
|
useTransitionState,
|
||||||
|
vModelCheckbox,
|
||||||
|
vModelDynamic,
|
||||||
|
vModelRadio,
|
||||||
|
vModelSelect,
|
||||||
|
vModelText,
|
||||||
|
vShow,
|
||||||
|
version,
|
||||||
|
warn,
|
||||||
|
watch,
|
||||||
|
watchEffect,
|
||||||
|
watchPostEffect,
|
||||||
|
watchSyncEffect,
|
||||||
|
withAsyncContext,
|
||||||
|
withCtx,
|
||||||
|
withDefaults,
|
||||||
|
withDirectives,
|
||||||
|
withKeys,
|
||||||
|
withMemo,
|
||||||
|
withModifiers,
|
||||||
|
withScopeId
|
||||||
|
} from "./chunk-P622L5TS.js";
|
||||||
|
export {
|
||||||
|
BaseTransition,
|
||||||
|
BaseTransitionPropsValidators,
|
||||||
|
Comment,
|
||||||
|
DeprecationTypes,
|
||||||
|
EffectScope,
|
||||||
|
ErrorCodes,
|
||||||
|
ErrorTypeStrings,
|
||||||
|
Fragment,
|
||||||
|
KeepAlive,
|
||||||
|
ReactiveEffect,
|
||||||
|
Static,
|
||||||
|
Suspense,
|
||||||
|
Teleport,
|
||||||
|
Text,
|
||||||
|
TrackOpTypes,
|
||||||
|
Transition,
|
||||||
|
TransitionGroup,
|
||||||
|
TriggerOpTypes,
|
||||||
|
VueElement,
|
||||||
|
assertNumber,
|
||||||
|
callWithAsyncErrorHandling,
|
||||||
|
callWithErrorHandling,
|
||||||
|
camelize,
|
||||||
|
capitalize,
|
||||||
|
cloneVNode,
|
||||||
|
compatUtils,
|
||||||
|
compile,
|
||||||
|
computed,
|
||||||
|
createApp,
|
||||||
|
createBlock,
|
||||||
|
createCommentVNode,
|
||||||
|
createElementBlock,
|
||||||
|
createBaseVNode as createElementVNode,
|
||||||
|
createHydrationRenderer,
|
||||||
|
createPropsRestProxy,
|
||||||
|
createRenderer,
|
||||||
|
createSSRApp,
|
||||||
|
createSlots,
|
||||||
|
createStaticVNode,
|
||||||
|
createTextVNode,
|
||||||
|
createVNode,
|
||||||
|
customRef,
|
||||||
|
defineAsyncComponent,
|
||||||
|
defineComponent,
|
||||||
|
defineCustomElement,
|
||||||
|
defineEmits,
|
||||||
|
defineExpose,
|
||||||
|
defineModel,
|
||||||
|
defineOptions,
|
||||||
|
defineProps,
|
||||||
|
defineSSRCustomElement,
|
||||||
|
defineSlots,
|
||||||
|
devtools,
|
||||||
|
effect,
|
||||||
|
effectScope,
|
||||||
|
getCurrentInstance,
|
||||||
|
getCurrentScope,
|
||||||
|
getCurrentWatcher,
|
||||||
|
getTransitionRawChildren,
|
||||||
|
guardReactiveProps,
|
||||||
|
h,
|
||||||
|
handleError,
|
||||||
|
hasInjectionContext,
|
||||||
|
hydrate,
|
||||||
|
hydrateOnIdle,
|
||||||
|
hydrateOnInteraction,
|
||||||
|
hydrateOnMediaQuery,
|
||||||
|
hydrateOnVisible,
|
||||||
|
initCustomFormatter,
|
||||||
|
initDirectivesForSSR,
|
||||||
|
inject,
|
||||||
|
isMemoSame,
|
||||||
|
isProxy,
|
||||||
|
isReactive,
|
||||||
|
isReadonly,
|
||||||
|
isRef,
|
||||||
|
isRuntimeOnly,
|
||||||
|
isShallow,
|
||||||
|
isVNode,
|
||||||
|
markRaw,
|
||||||
|
mergeDefaults,
|
||||||
|
mergeModels,
|
||||||
|
mergeProps,
|
||||||
|
nextTick,
|
||||||
|
nodeOps,
|
||||||
|
normalizeClass,
|
||||||
|
normalizeProps,
|
||||||
|
normalizeStyle,
|
||||||
|
onActivated,
|
||||||
|
onBeforeMount,
|
||||||
|
onBeforeUnmount,
|
||||||
|
onBeforeUpdate,
|
||||||
|
onDeactivated,
|
||||||
|
onErrorCaptured,
|
||||||
|
onMounted,
|
||||||
|
onRenderTracked,
|
||||||
|
onRenderTriggered,
|
||||||
|
onScopeDispose,
|
||||||
|
onServerPrefetch,
|
||||||
|
onUnmounted,
|
||||||
|
onUpdated,
|
||||||
|
onWatcherCleanup,
|
||||||
|
openBlock,
|
||||||
|
patchProp,
|
||||||
|
popScopeId,
|
||||||
|
provide,
|
||||||
|
proxyRefs,
|
||||||
|
pushScopeId,
|
||||||
|
queuePostFlushCb,
|
||||||
|
reactive,
|
||||||
|
readonly,
|
||||||
|
ref,
|
||||||
|
registerRuntimeCompiler,
|
||||||
|
render,
|
||||||
|
renderList,
|
||||||
|
renderSlot,
|
||||||
|
resolveComponent,
|
||||||
|
resolveDirective,
|
||||||
|
resolveDynamicComponent,
|
||||||
|
resolveFilter,
|
||||||
|
resolveTransitionHooks,
|
||||||
|
setBlockTracking,
|
||||||
|
setDevtoolsHook,
|
||||||
|
setTransitionHooks,
|
||||||
|
shallowReactive,
|
||||||
|
shallowReadonly,
|
||||||
|
shallowRef,
|
||||||
|
ssrContextKey,
|
||||||
|
ssrUtils,
|
||||||
|
stop,
|
||||||
|
toDisplayString,
|
||||||
|
toHandlerKey,
|
||||||
|
toHandlers,
|
||||||
|
toRaw,
|
||||||
|
toRef,
|
||||||
|
toRefs,
|
||||||
|
toValue,
|
||||||
|
transformVNodeArgs,
|
||||||
|
triggerRef,
|
||||||
|
unref,
|
||||||
|
useAttrs,
|
||||||
|
useCssModule,
|
||||||
|
useCssVars,
|
||||||
|
useHost,
|
||||||
|
useId,
|
||||||
|
useModel,
|
||||||
|
useSSRContext,
|
||||||
|
useShadowRoot,
|
||||||
|
useSlots,
|
||||||
|
useTemplateRef,
|
||||||
|
useTransitionState,
|
||||||
|
vModelCheckbox,
|
||||||
|
vModelDynamic,
|
||||||
|
vModelRadio,
|
||||||
|
vModelSelect,
|
||||||
|
vModelText,
|
||||||
|
vShow,
|
||||||
|
version,
|
||||||
|
warn,
|
||||||
|
watch,
|
||||||
|
watchEffect,
|
||||||
|
watchPostEffect,
|
||||||
|
watchSyncEffect,
|
||||||
|
withAsyncContext,
|
||||||
|
withCtx,
|
||||||
|
withDefaults,
|
||||||
|
withDirectives,
|
||||||
|
withKeys,
|
||||||
|
withMemo,
|
||||||
|
withModifiers,
|
||||||
|
withScopeId
|
||||||
|
};
|
||||||
|
//# sourceMappingURL=vue.js.map
|
||||||
+7
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"version": 3,
|
||||||
|
"sources": [],
|
||||||
|
"sourcesContent": [],
|
||||||
|
"mappings": "",
|
||||||
|
"names": []
|
||||||
|
}
|
||||||
@@ -0,0 +1,63 @@
|
|||||||
|
import { defineConfig } from 'vitepress'
|
||||||
|
|
||||||
|
// https://vitepress.dev/reference/site-config
|
||||||
|
export default defineConfig({
|
||||||
|
title: "白虎面板",
|
||||||
|
description: "极致轻量、高性能的自动化任务调度平台",
|
||||||
|
base: '/baihu-panel/', // 👈 如果您的 GitHub Pages 路径是 /baihu-panel/,请保留此项;若是自定义域名或根目录,请删除或设为 '/'
|
||||||
|
lang: 'zh-CN',
|
||||||
|
themeConfig: {
|
||||||
|
// https://vitepress.dev/reference/default-theme-config
|
||||||
|
logo: '/logo.svg',
|
||||||
|
nav: [
|
||||||
|
{ text: '指南', link: '/guide/introduction' },
|
||||||
|
{ text: '部署', link: '/guide/deployment' }
|
||||||
|
],
|
||||||
|
|
||||||
|
sidebar: [
|
||||||
|
{
|
||||||
|
text: '快速开始',
|
||||||
|
items: [
|
||||||
|
{ text: '项目介绍', link: '/guide/introduction' },
|
||||||
|
{ text: '快速部署', link: '/guide/deployment' },
|
||||||
|
{ text: '访问面板', link: '/guide/getting-started' }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: '使用指南',
|
||||||
|
items: [
|
||||||
|
{ text: '功能特性', link: '/guide/usage' },
|
||||||
|
{ text: '编程语言与依赖管理', link: '/guide/languages' },
|
||||||
|
{ text: '命令行工具 (CLI)', link: '/guide/cli' }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: '配置参考',
|
||||||
|
items: [
|
||||||
|
{ text: '系统配置', link: '/guide/configuration' },
|
||||||
|
{ text: '反向代理 (Nginx)', link: '/guide/nginx' }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: '其他',
|
||||||
|
items: [
|
||||||
|
{ text: '更新日志', link: '/guide/changelog' },
|
||||||
|
{ text: '免责声明', link: '/guide/disclaimer' }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
|
||||||
|
socialLinks: [
|
||||||
|
{ icon: 'github', link: 'https://github.com/engigu/baihu-panel' }
|
||||||
|
],
|
||||||
|
|
||||||
|
footer: {
|
||||||
|
message: 'Released under the MIT License.',
|
||||||
|
copyright: 'Copyright © 2026-present engigu'
|
||||||
|
},
|
||||||
|
|
||||||
|
search: {
|
||||||
|
provider: 'local'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
# 更新日志 ☕
|
||||||
|
|
||||||
|
本页面记录了白虎面板的主要版本更新历史。
|
||||||
|
|
||||||
|
## ⚠️ 重大升级与迁移说明 (v3 数据结构)
|
||||||
|
|
||||||
|
本次更新包含底层数据结构的重大突破,将所有数据的 ID 类型从数字编号平滑迁移为 20 位的字符式全局唯一标识符(`xid`)。系统在启动时会**自动进行数据的清洗、映射、拷贝与外键修补**,以确保旧数据被妥善对接。
|
||||||
|
|
||||||
|
- **备份位置**:执行迁移前,即使有程序自动转换逻辑(data\migration_v3_backup_backup_xxx.zip),为了数据安全,仍然建议您**提前手动进行备份**。
|
||||||
|
- **降级机制**:如果遇到未预期的迁移失败或数据显示丢失,**请使用原本备份的数据库** 并 **降级至 `v1.0.10` 及以下旧版本** 进行恢复与使用。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 最近更新概览
|
||||||
|
|
||||||
|
### 2026.03.05 - API 文档重构
|
||||||
|
- **OpenAPI 认证体系**:支持站点级 Token 配置与 Basic Auth 保护。
|
||||||
|
- **自定义 UI**:新增设计感十足的全局 **404 页面**。
|
||||||
|
|
||||||
|
### 2026.03.04 - 消息推送系统重构
|
||||||
|
- **原生内置**:全新原生支持企业微信、钉钉、飞书、Telegram、Bark、邮件等十余种主流渠道。
|
||||||
|
- **事件捕获**:接入系统级事件通知自动捕获,告别原有必配外部推送服务的繁琐历史。
|
||||||
|
|
||||||
|
### 2026.02.13 - 任务执行引擎重构
|
||||||
|
- **深度集成 Mise**:支持 Python, Node.js, Go, Rust, PHP 等几乎所有主流语言的动态安装与多版本切换。
|
||||||
|
- **依赖管理**:同步上线跨语言统一依赖管理系统。
|
||||||
|
|
||||||
|
### 2026.02.11 - 安全性增强
|
||||||
|
- **随机密码策略**:首次启动使用随机密码并打印在日志中。
|
||||||
|
- **暴力破解防护**:登录接口增加防暴力破解。
|
||||||
|
- **路径遍历防护**:文件系统操作增加路径穿越锁定。
|
||||||
|
|
||||||
|
### 2026.02.10 - 任务调度重构
|
||||||
|
- **调度性能**:重写了并发控制逻辑,完善了任务队列。
|
||||||
|
- **体验优化**:优化文件树交互体验,支持任务执行实时日志流。
|
||||||
|
|
||||||
|
### 2026.02.06 - 镜像扩展
|
||||||
|
- **Debian 13 支持**:增加对 Debian 13 (Trixie) 镜像支持,整理 Docker 目录结构。
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
# 命令行工具 (CLI)
|
||||||
|
|
||||||
|
白虎面板在环境内内置了同名的 `baihu` 命令行工具。如果您在终端内需要执行系统级别的操作,可以使用这些内置命令。
|
||||||
|
|
||||||
|
## 常用核心指令
|
||||||
|
|
||||||
|
| 命令 | 描述 |
|
||||||
|
| :--- | :--- |
|
||||||
|
| `baihu server` | 面板启动指令,运行服务端后台进程。 |
|
||||||
|
| `baihu reposync` | 供定时任务调用,将远程 Git 仓库的高级特性同步到本地目录中。 |
|
||||||
|
| `baihu resetpwd` | 交互式重置系统 admin 账号密码(密码丢失时可通过进入终端重置)。 |
|
||||||
|
| `baihu restore <file>` | 使用本地的 .zip 备份压缩包文件,一条命令直接全量恢复系统数据。 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 使用场景示例
|
||||||
|
|
||||||
|
### 1. 密码重置
|
||||||
|
您可以进入 Docker 容器或通过 ssh 连入宿主机控制台:
|
||||||
|
```bash
|
||||||
|
docker exec -it baihu baihu resetpwd
|
||||||
|
```
|
||||||
|
然后根据提示,输入新的管理员密码即可重置成功。
|
||||||
|
|
||||||
|
### 2. 手动启动
|
||||||
|
如果是通过手动部署二进制文件,可以使用 `baihu server` 启动:
|
||||||
|
```bash
|
||||||
|
nohup ./baihu server > /dev/null 2>&1 &
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. 数据恢复
|
||||||
|
上传备份后的 ZIP 文件至容器目录:
|
||||||
|
```bash
|
||||||
|
docker exec -it baihu baihu restore /app/data/backup-2026xxxx.zip
|
||||||
|
```
|
||||||
|
该操作会全量覆盖现有数据库和脚本文件,请谨慎操作。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 其他帮助
|
||||||
|
终端内直接执行 `baihu` 即可在控制台直接打印内置支持详细说明和命令列表参数。
|
||||||
@@ -0,0 +1,61 @@
|
|||||||
|
# 系统配置手册
|
||||||
|
|
||||||
|
白虎面板支持通过环境变量和配置文件两种核心方式进行系统参数微调。
|
||||||
|
|
||||||
|
## 环境变量配置 (优先级最高)
|
||||||
|
|
||||||
|
环境变量在容器内自动注入,非常适合 CI/CD 和 Docker 混合编排场景。
|
||||||
|
|
||||||
|
### 核心配置项列表
|
||||||
|
|
||||||
|
| 环境变量 | 对应配置 | 说明 | 默认值 |
|
||||||
|
| :--- | :--- | :--- | :--- |
|
||||||
|
| `BH_SERVER_PORT` | server.port | 服务监听端口 | 8052 |
|
||||||
|
| `BH_SERVER_HOST` | server.host | 监听地址 | 0.0.0.0 |
|
||||||
|
| `BH_SERVER_URL_PREFIX` | server.url_prefix | URL 前缀,用于反向代理子路径部署 | - |
|
||||||
|
| `BH_DB_TYPE` | database.type | 数据库类型 (sqlite/mysql) | sqlite |
|
||||||
|
| `BH_DB_HOST` | database.host | 数据库实例地址 | localhost |
|
||||||
|
| `BH_DB_PORT` | database.port | 数据库端口 | 3306 |
|
||||||
|
| `BH_DB_USER` | database.user | 数据库用户名 | root |
|
||||||
|
| `BH_DB_PASSWORD` | database.password | 数据库密码 | - |
|
||||||
|
| `BH_DB_NAME` | database.dbname | 数据库库名 | baihu |
|
||||||
|
| `BH_DB_PATH` | database.path | SQLite 物理文件存储路径 | ./data/baihu.db |
|
||||||
|
| `BH_DB_TABLE_PREFIX` | database.table_prefix | 数据库表前缀 | baihu_ |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 配置文件挂载 (config.ini)
|
||||||
|
|
||||||
|
如果您希望对系统参数有更细致的控制(而非通过外部注入),可以使用配置文件。
|
||||||
|
|
||||||
|
### 挂载点
|
||||||
|
```yaml
|
||||||
|
volumes:
|
||||||
|
- ./configs:/app/configs
|
||||||
|
```
|
||||||
|
|
||||||
|
### 配置文件示例 (`configs/config.ini`)
|
||||||
|
```ini
|
||||||
|
[server]
|
||||||
|
port = 8052
|
||||||
|
host = 0.0.0.0
|
||||||
|
# 配置 URL 前缀用于反向代理,例如 /baihu/
|
||||||
|
url_prefix = /baihu
|
||||||
|
|
||||||
|
[database]
|
||||||
|
type = sqlite
|
||||||
|
path = /app/data/baihu.db
|
||||||
|
table_prefix = baihu_
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 调度设置说明
|
||||||
|
|
||||||
|
系统采用异步任务队列 + Worker Pool 架构,可在「系统设置 > 调度设置」页面进行配置:
|
||||||
|
|
||||||
|
- **Worker 数量** (默认 4):同时在后端并发运行的任务进程数。
|
||||||
|
- **队列大小** (默认 100):待处理任务队列的最大容量。
|
||||||
|
- **速率间隔** (默认 200 ms):控制两个任务启动之间的最小等待时长。
|
||||||
|
|
||||||
|
> **提示**:修改以上调度参数后,系统会立即响应并动态调整,无需重启容器。
|
||||||
@@ -0,0 +1,125 @@
|
|||||||
|
# 快速部署
|
||||||
|
|
||||||
|
项目提供多种基础镜像,默认版本基于 Debian 12,集成了 Python 3.13 与 Node.js 23。
|
||||||
|
|
||||||
|
## 基础镜像选择
|
||||||
|
|
||||||
|
| 标签 (Tag) | 基础镜像 | 说明 |
|
||||||
|
| :--- | :--- | :--- |
|
||||||
|
| `latest` | Debian 12 | 默认版本,集成 Python 3.13 与 Node.js 23 |
|
||||||
|
| `latest-debian13` | Debian 13 | 尝鲜版本|
|
||||||
|
|
||||||
|
> **提示**:下方部署示例默认使用 `latest` 标签,如需换用 Debian 13 版,只需将 `latest` 替换为 `latest-debian13` 即可。
|
||||||
|
|
||||||
|
## 环境版本重构说明 (2026.02.13+)
|
||||||
|
|
||||||
|
> **警告**:架构升级破坏性变更
|
||||||
|
>
|
||||||
|
> 本版本(2026.02.13+)对底层运行时环境进行了彻底重构,弃用了原有的静态 Python/Node 环境,转为使用 **Mise** 进行动态版本管理。
|
||||||
|
>
|
||||||
|
> 1. **不再提供 Alpine 镜像**:由于 glibc 兼容性问题,Mise 无法在 Alpine 上完美运行,因此暂时取消 Alpine 镜像支持。
|
||||||
|
> 2. **环境数据不兼容**:如果您是从旧版本升级上来,原有的 Python/Node 环境数据将无法迁移。您需要清空挂载的 `envs/` 目录并让其由新容器自动初始化。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 方式一:Docker 运行 (环境变量配置)
|
||||||
|
|
||||||
|
通过环境变量指定配置,简单灵活,适合一般部署。
|
||||||
|
|
||||||
|
### SQLite (默认)
|
||||||
|
```bash
|
||||||
|
docker run -d \
|
||||||
|
--name baihu \
|
||||||
|
-p 8052:8052 \
|
||||||
|
-v $(pwd)/data:/app/data \
|
||||||
|
-v $(pwd)/envs:/app/envs \
|
||||||
|
-e TZ=Asia/Shanghai \
|
||||||
|
-e BH_SERVER_PORT=8052 \
|
||||||
|
-e BH_SERVER_HOST=0.0.0.0 \
|
||||||
|
-e BH_DB_TYPE=sqlite \
|
||||||
|
-e BH_DB_PATH=/app/data/baihu.db \
|
||||||
|
-e BH_DB_TABLE_PREFIX=baihu_ \
|
||||||
|
--restart unless-stopped \
|
||||||
|
ghcr.io/engigu/baihu:latest
|
||||||
|
```
|
||||||
|
|
||||||
|
### MySQL
|
||||||
|
```bash
|
||||||
|
docker run -d \
|
||||||
|
--name baihu \
|
||||||
|
-p 8052:8052 \
|
||||||
|
-v $(pwd)/data:/app/data \
|
||||||
|
-v $(pwd)/envs:/app/envs \
|
||||||
|
-e TZ=Asia/Shanghai \
|
||||||
|
-e BH_SERVER_PORT=8052 \
|
||||||
|
-e BH_SERVER_HOST=0.0.0.0 \
|
||||||
|
-e BH_DB_TYPE=mysql \
|
||||||
|
-e BH_DB_HOST=mysql-server \
|
||||||
|
-e BH_DB_PORT=3306 \
|
||||||
|
-e BH_DB_USER=root \
|
||||||
|
-e BH_DB_PASSWORD=your_password \
|
||||||
|
-e BH_DB_NAME=baihu \
|
||||||
|
-e BH_DB_TABLE_PREFIX=baihu_ \
|
||||||
|
--restart unless-stopped \
|
||||||
|
ghcr.io/engigu/baihu:latest
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 方式二:Docker Compose 部署
|
||||||
|
|
||||||
|
推荐的生产环境部署方式。
|
||||||
|
|
||||||
|
### 核心部署模板
|
||||||
|
```yaml
|
||||||
|
services:
|
||||||
|
baihu:
|
||||||
|
image: ghcr.io/engigu/baihu:latest
|
||||||
|
container_name: baihu
|
||||||
|
ports:
|
||||||
|
- "8052:8052"
|
||||||
|
volumes:
|
||||||
|
- ./data:/app/data
|
||||||
|
- ./envs:/app/envs
|
||||||
|
environment:
|
||||||
|
- TZ=Asia/Shanghai
|
||||||
|
- BH_SERVER_PORT=8052
|
||||||
|
- BH_SERVER_HOST=0.0.0.0
|
||||||
|
- BH_DB_TYPE=sqlite
|
||||||
|
- BH_DB_PATH=/app/data/baihu.db
|
||||||
|
- BH_DB_TABLE_PREFIX=baihu_
|
||||||
|
# - BH_SERVER_URL_PREFIX=/baihu # 可选:配置 URL 前缀用于反向代理
|
||||||
|
logging:
|
||||||
|
driver: json-file
|
||||||
|
options:
|
||||||
|
max-size: "10m"
|
||||||
|
max-file: "3"
|
||||||
|
restart: unless-stopped
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 方式三:配置文件挂载模式
|
||||||
|
|
||||||
|
通过挂载 `/app/configs/config.ini` 来管理详细配置。
|
||||||
|
|
||||||
|
### 配置文件挂载示例
|
||||||
|
```yaml
|
||||||
|
volumes:
|
||||||
|
- ./data:/app/data
|
||||||
|
- ./configs:/app/configs
|
||||||
|
- ./envs:/app/envs
|
||||||
|
```
|
||||||
|
---
|
||||||
|
|
||||||
|
## Docker 启动流程
|
||||||
|
|
||||||
|
容器启动时 `docker-entrypoint.sh` 会自动执行以下关键步骤:
|
||||||
|
|
||||||
|
1. **环境自检**:检查 `/app/data`、`/app/configs`、`/app/envs` 挂载点并创建必要子目录。
|
||||||
|
2. **Mise 同步**:自动将镜像内置的 Mise 核心运行时激活文件同步到持久化挂载目录中,确保容器重启后环境依然可用。
|
||||||
|
3. **运行时激活**:动态注入环境变量,将 `mise shims` 路径加入系统 `PATH`。
|
||||||
|
4. **包管理预设**:自动为 Python 配置清华源 (PIP) 镜像,配置 Node.js 内存限制。
|
||||||
|
5. **主进程启动**:运行 `baihu server` 开启面板。
|
||||||
|
|
||||||
|
> **提示**:通过持久化挂载 `./envs` 目录,您安装的所有运行时版本和第三方依赖库均会永久保留。
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
# 免责声明
|
||||||
|
|
||||||
|
白虎面板(Baihu Panel)及其开发者在提供本项目的同时,默认用户已完全知悉并同意以下条款:
|
||||||
|
|
||||||
|
## 1. 免责保证
|
||||||
|
|
||||||
|
- **无业务逻辑**:本项目仅作为一个轻量级的任务托管与调度平台,不提供、不内置任何具有实际业务逻辑的第三方脚本。
|
||||||
|
- **脚本审核**:用户自行添加或配置的脚本来源、逻辑及潜在的系统影响均由用户自行负责。请勿执行来源不明的恶意脚本,并在执行前仔细阅读并审核其源代码,确保安全性。
|
||||||
|
|
||||||
|
## 2. 软件责任
|
||||||
|
|
||||||
|
- **按“原样”提供**:本项目属于业余开源开发作品,采用 MIT License 发布。开发者不保证软件不存在任何 Bug、系统漏洞或逻辑缺陷。
|
||||||
|
- **损失赔偿**:因运行用户自行脚本或使用本系统带来的一切数据泄露、系统损坏、财产损失(如服务器被封、云服务欠费)及相关法律责任,均由使用者本人承担。
|
||||||
|
|
||||||
|
## 3. 授权与使用
|
||||||
|
|
||||||
|
- **合理镜像申请**:由于项目涉及到网络请求和资产调度,请遵循相关的开源协议进行公平、合理的使用。
|
||||||
|
- **禁止非法用途**:严禁将白虎面板用于任何违反中华人民共和国法律法规及相关组织政策的行为。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. 联系我们
|
||||||
|
|
||||||
|
如果您在使用过程中发现任何技术问题,欢迎通过 GitHub [Issues](https://github.com/engigu/baihu-panel/issues) 反馈。
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
# 访问面板
|
||||||
|
|
||||||
|
部署成功并启动容器后,您只需通过浏览器即可访问白虎面板。
|
||||||
|
|
||||||
|
## 默认账号
|
||||||
|
|
||||||
|
- **访问地址**:`http://localhost:8052` (或您配置的宿主机端口)
|
||||||
|
- **用户名**:`admin`
|
||||||
|
- **密码**:首次启动成功后,系统会为管理员账号生成 **12 位随机初始密码** 并打印在容器启动日志中。
|
||||||
|
|
||||||
|
> **如何查找初始密码**:
|
||||||
|
> 运行容器后,在命令行执行:
|
||||||
|
> ```bash
|
||||||
|
> docker logs baihu | grep "管理员账号创建成功"
|
||||||
|
> ```
|
||||||
|
> 找到包含密码的内容后登录,登录后建议首选操作:**修改管理员密码**。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 登录后的首要配置
|
||||||
|
|
||||||
|
### 1. 修改密码
|
||||||
|
在右上角用户头像下拉菜单选择「个人设置」进行账号安全修改。
|
||||||
|
|
||||||
|
### 2. 系统调度设置
|
||||||
|
在「系统设置」>「调度设置」中,可以根据服务器资源微调任务队列的并发数(默认 4)和最大队列大小(默认 100)。
|
||||||
|
|
||||||
|
### 3. 环境与依赖
|
||||||
|
如果您需要执行特定语言或脚本包,请先进入「编程语言」页面确认所需的环境已安装(如已安装 Python3.x 或 Node.js.x)。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 面板功能一览
|
||||||
|
|
||||||
|
| 模块 | 说明 |
|
||||||
|
| :--- | :--- |
|
||||||
|
| **仪表盘 (Dashboard)** | 实时监控任务执行动态、容器状态和资源占用频率情况。 |
|
||||||
|
| **定时任务 (Tasks)** | 管理和调度各种 Cron 脚本。 |
|
||||||
|
| **脚本管理 (Scripts)** | 在线编辑、上传项目源代码。 |
|
||||||
|
| **在线终端 (Terminal)** | 直接操作容器环境进行运维和调试。 |
|
||||||
|
| **消息推送 (Notify)** | 配置各类通知渠道。 |
|
||||||
|
| **环境变量 (Environments)** | 管理脚本所需的各种隐私信息、持久配置。 |
|
||||||
|
| **个人设置 (Settings)** | 调整站点 UI 和账号安全信息。 |
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
# 项目介绍
|
||||||
|
|
||||||
|
白虎面板 (Baihu Panel) 是一款极致轻量、高性能的自动化任务调度平台。采用 Go + Vue3 架构,专注于高性能与低系统开销。
|
||||||
|
|
||||||
|
## 核心亮点
|
||||||
|
|
||||||
|
- **极致性能**:采用 Go 语言开发,对比同类产品(如青龙面板),在同样的任务执行下,CPU 占用跳变降低 60% 以上。
|
||||||
|
- **运行时解耦**:深度集成 **Mise** 运行时管理,原生支持 Python、Node.js、Go、Rust、PHP 等所有主流语言环境的动态安装(几乎所有的版本)与统一依赖管理。
|
||||||
|
- **一键部署**:支持 Docker/Docker-Compose 一键部署,开箱即用。
|
||||||
|
- **现代 UI**:基于 Vue3 + TailwindCSS + Shadcn/ui,提供响应式设计与深色/浅色主题。
|
||||||
|
|
||||||
|
|
||||||
|
## 主要特色
|
||||||
|
|
||||||
|
- **轻量级:** docker/compose部署,无需复杂配置,开箱即用
|
||||||
|
- **任务调度:** 支持标准 Cron 表达式,常用时间规则快捷选择。日志不落文件,没有磁盘频繁io的问题
|
||||||
|
- **脚本管理:** 在线代码编辑器,支持文件上传、压缩包解压
|
||||||
|
- **在线终端:** WebSocket 实时终端,命令执行结果实时输出
|
||||||
|
- **消息推送:** 内置强大消息推送与通知引擎,无缝兼容主流渠道,支持系统级事件告警
|
||||||
|
- **环境变量:** 安全存储敏感配置,任务执行时自动注入
|
||||||
|
- **移动端:** 适配移动小屏样式
|
||||||
|
- **远程执行:** 支持远程agent执行任务,展示执行结果
|
||||||
|
- **多语言支持:** 深度集成 Mise,支持几乎所有主流编程语言的动态安装、多版本切换及依赖管理
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
# 编程语言与依赖管理
|
||||||
|
|
||||||
|
白虎面板深度集成了 **Mise** 运行时管理器,这使得它具备多版本语言环境的高灵活性和隔离性。
|
||||||
|
|
||||||
|
## 脚本运行环境
|
||||||
|
|
||||||
|
白虎面板原生支持以下脚本的定时执行:
|
||||||
|
- **Python3**, **Node.js**, **Bash** (内置环境)
|
||||||
|
- 通过 **Mise** 扩展:支持几乎所有主流编程语言的动态安装与切换。
|
||||||
|
|
||||||
|
## 依赖管理支持
|
||||||
|
|
||||||
|
系统内置了高度集成的跨语言依赖管理器,支持自动化安装和管理以下语言的依赖项,并确保在容器内全局可用:
|
||||||
|
|
||||||
|
| 语言 | 包管理器 | 功能说明 |
|
||||||
|
| :--- | :--- | :--- |
|
||||||
|
| **Python** | pip | 自动使用内置虚拟环境,支持清华源 |
|
||||||
|
| **Node.js** | npm | 全局安装模式,自动配置 npmmirror 镜像 |
|
||||||
|
| **Go** | go install | 通过 `go install` 安装二进制工具 |
|
||||||
|
| **Rust** | cargo | 通过 `cargo install` 安装 Rust 依赖 |
|
||||||
|
| **Ruby** | gem | 支持 `gem install` 本地安装 |
|
||||||
|
| **Bun** | bun | 支持 `bun add -g` 全局模式 |
|
||||||
|
| **PHP** | composer | 支持 `composer global require` |
|
||||||
|
| **Deno** | deno | 支持 `deno install -g` |
|
||||||
|
| **.NET** | dotnet | 支持 `dotnet tool install -g` |
|
||||||
|
| **Elixir/Erlang** | mix | 支持 `mix archive.install` |
|
||||||
|
| **Lua** | luarocks | 通过 `luarocks` 管理 Lua 包 |
|
||||||
|
| **Nim** | nimble | 支持 `nimble install` |
|
||||||
|
| **Dart/Flutter** | pub | 支持 `pub global activate` |
|
||||||
|
| **Perl** | cpanm | 简单的 `cpanm` 安装支持 |
|
||||||
|
| **Crystal** | shards | `shards` 项目级别或工具安装 |
|
||||||
|
|
||||||
|
## 使用方法
|
||||||
|
|
||||||
|
### 1. 安装环境
|
||||||
|
进入「编程语言」页面,使用 `mise` 一键安装所需的语言及版本。
|
||||||
|
|
||||||
|
### 2. 依赖管理
|
||||||
|
在已安装列表点击「依赖管理」,输入名称(可选版本)即可自动在对应环境内完成安装。
|
||||||
|
|
||||||
|
### 3. 多版本切换
|
||||||
|
对于复杂的项目,您可以通过面板配置不同的任务版本镜像,系统基于 `mise exec` 实现了完善的环境隔离,不同版本的依赖包互不冲突。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 隔离机制说明
|
||||||
|
|
||||||
|
- 白虎面板通过动态注入 `PATH` 环境和 `mise shims` 将语言环境暴露给系统。
|
||||||
|
- 每个任务在执行前都会根据任务配置自动加载对应的运行时环境变量。
|
||||||
|
- **运行时激活**:自动将 `MISE_DATA_DIR` 等环境变量指向宿主机的持久化挂载目录,确保护持久化可用。
|
||||||
@@ -0,0 +1,86 @@
|
|||||||
|
# Nginx 反向代理配置
|
||||||
|
|
||||||
|
如果您需要通过域名和 HTTPS 访问白虎面板,推荐使用 Nginx 作为反向代理并配置 WebSocket 负载均衡。
|
||||||
|
|
||||||
|
## Nginx 反向代理配置示例
|
||||||
|
|
||||||
|
### 1. 配置映射
|
||||||
|
首先,在 `nginx.conf` 的 `http` 块中添加 WebSocket 升级映射:
|
||||||
|
```nginx
|
||||||
|
map $http_upgrade $connection_upgrade {
|
||||||
|
default upgrade;
|
||||||
|
'' close;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 2. 服务器配置
|
||||||
|
将 `example.com` 替换为您的域名,并指定宿主机监听端口:
|
||||||
|
```nginx
|
||||||
|
server {
|
||||||
|
listen 443 ssl http2;
|
||||||
|
server_name example.com;
|
||||||
|
|
||||||
|
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
|
||||||
|
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
|
||||||
|
ssl_protocols TLSv1.2 TLSv1.3;
|
||||||
|
ssl_prefer_server_ciphers off;
|
||||||
|
|
||||||
|
access_log /var/log/nginx/example.access.log;
|
||||||
|
error_log /var/log/nginx/example.error.log warn;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
proxy_pass http://127.0.0.1:8052; # 指定白虎面板宿主机 IP 和端口
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
|
||||||
|
# WebSocket 支持(在线控制台必需)
|
||||||
|
proxy_http_version 1.1;
|
||||||
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
|
proxy_set_header Connection $connection_upgrade;
|
||||||
|
|
||||||
|
proxy_buffering off;
|
||||||
|
proxy_read_timeout 60s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# 自动 HTTP 跳转 HTTPS (可选)
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name example.com;
|
||||||
|
return 301 https://$server_name$request_uri;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 3. 子路径部署场景
|
||||||
|
|
||||||
|
如果您是通过 `BH_SERVER_URL_PREFIX=/baihu` 进行子路径托管,请修改 `location` 参数:
|
||||||
|
```nginx
|
||||||
|
location /baihu/ {
|
||||||
|
proxy_pass http://127.0.0.1:8052/baihu/;
|
||||||
|
proxy_http_version 1.1;
|
||||||
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
|
proxy_set_header Connection $connection_upgrade;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 验证与发布
|
||||||
|
|
||||||
|
在保存配置文件后,请执行以下命令确保 Nginx 配置正确并重启:
|
||||||
|
```bash
|
||||||
|
# 检查语法
|
||||||
|
nginx -t
|
||||||
|
# 重启服务
|
||||||
|
nginx -s reload
|
||||||
|
```
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
# 功能特性
|
||||||
|
|
||||||
|
白虎面板不仅提供基础的脚本执行功能,还集成了众多的实用工具和管理模块。
|
||||||
|
|
||||||
|
## 定时任务管理
|
||||||
|
|
||||||
|
- **标准 Cron 表达式**:支持高度灵活的调度配置。
|
||||||
|
- **控制台快捷键**:常用规则一键选择。
|
||||||
|
- **手动触发执行**:支持临时执行任务。
|
||||||
|
- **任务超时控制**:通过配置 `timeout` 参数,系统会自动隔离并中止长时间运行的任务。
|
||||||
|
|
||||||
|
## 脚本文件管理
|
||||||
|
|
||||||
|
- **在线代码编辑器**:集成了现代代码编辑器,支持语法高亮和编辑。
|
||||||
|
- **文件树形结构**:直观展示项目内所有文件。
|
||||||
|
- **文件上传与解压**:支持单文件、多文件上传和对 ZIP 压缩包的在线解压。
|
||||||
|
- **文件管理**:支持在线进行创建、重命名、移动和删除操作。
|
||||||
|
|
||||||
|
## 在线终端
|
||||||
|
|
||||||
|
- **WebSocket 实时终端**:支持常用的 Shell 命令。
|
||||||
|
- **命令输出实时推流**:实时查看脚本运行的物理设备输出。
|
||||||
|
|
||||||
|
## 执行日志
|
||||||
|
|
||||||
|
- **任务执行历史**:记录每次运行的状态(成功/失败/超时)。
|
||||||
|
- **执行耗时统计**:自动统计任务耗时,辅助性能优化。
|
||||||
|
- **日志压缩存储**:通过对旧日志进行自动清理和压缩,规避存储空间占用问题。
|
||||||
|
|
||||||
|
## 消息推送与系统通知
|
||||||
|
|
||||||
|
- **原生内置分发**:集成了企业微信、钉钉、飞书、Telegram、Bark、邮件等十余种主流渠道。
|
||||||
|
- **多事件灵活通知**:您可以配置「任务失败」、「服务下线」、「登录安全报警」等事件通知条件。
|
||||||
|
- **API 示例**:系统自动生成各种编程语言的一键集成代码片段,方便用户脚本集成。
|
||||||
|
|
||||||
|
## 环境变量管理
|
||||||
|
|
||||||
|
- **机密性管理**:对敏感字段(如脚本 Key、DB 密码)进行脱敏显示和加密存储。
|
||||||
|
- **全局环境隔离**:在不同脚本运行期间动态注入,确保持久化和隔离。
|
||||||
|
|
||||||
|
## 系统设置
|
||||||
|
|
||||||
|
- **数据备份与恢复**:支持全量数据的本地导出和一键导入恢复。
|
||||||
|
- **页面设置**:自定义站点标题、标语和分页显示逻辑。
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
---
|
||||||
|
# https://vitepress.dev/reference/default-theme-home-page
|
||||||
|
layout: home
|
||||||
|
|
||||||
|
hero:
|
||||||
|
name: "白虎面板"
|
||||||
|
text: "极致轻量、高性能的自动化任务调度平台"
|
||||||
|
tagline: "采用 Go + Vue3 架构,专注于高性能与低系统开销。"
|
||||||
|
image:
|
||||||
|
src: /logo.svg
|
||||||
|
alt: Baihu Logo
|
||||||
|
actions:
|
||||||
|
- theme: brand
|
||||||
|
text: 快速开始
|
||||||
|
link: /guide/introduction
|
||||||
|
- theme: alt
|
||||||
|
text: 查看源码
|
||||||
|
link: https://github.com/engigu/baihu-panel
|
||||||
|
|
||||||
|
features:
|
||||||
|
- icon: 🚀
|
||||||
|
title: 极致轻量
|
||||||
|
details: Docker/Compose 一键部署,无需复杂配置,开箱即用,资源分配合理。
|
||||||
|
- icon: ⏰
|
||||||
|
title: 任务调度
|
||||||
|
details: 支持标准 Cron 表达式,日志不落文件,规避频繁磁盘 IO 问题。
|
||||||
|
- icon: 🛠️
|
||||||
|
title: 多语言支持
|
||||||
|
details: 深度集成 Mise,支持几乎所有主流编程语言的动态安装、多版本切换及依赖管理。
|
||||||
|
- icon: 💻
|
||||||
|
title: 在线管理
|
||||||
|
details: 现代响应式 UI,集成在线编辑器、实时终端与 WebSocket 日志流。
|
||||||
|
- icon: 🔔
|
||||||
|
title: 消息推送
|
||||||
|
details: 内置主流推送渠道(微信、钉钉、飞书、Telegram 等),支持系统级事件通知。
|
||||||
|
- icon: 🔒
|
||||||
|
title: 安全稳健
|
||||||
|
details: 安全存储敏感配置,任务自动注入,登录防暴力破解,精细权限定制。
|
||||||
|
---
|
||||||
Generated
+2513
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"name": "baihu-docs",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"scripts": {
|
||||||
|
"docs:dev": "vitepress dev",
|
||||||
|
"docs:build": "vitepress build",
|
||||||
|
"docs:preview": "vitepress preview"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"vitepress": "^1.6.4"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
<svg t="1766107903919" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1942" width="200" height="200"><path d="M884.992 273.05984c4.10624 0 5.0688-2.36544 2.10944-5.25312 0 0-64.28672-65.55648-111.7696-75.55072-47.48288-9.984-45.47584-59.37152-80.56832-75.02848-72.0896-32.16384-158.6176-34.3552-158.6176-34.3552s-91.37152-4.92544-138.752-9.89184c-19.46624-2.03776-54.46656-9.58464-54.46656-9.58464-4.0448-0.84992-10.63936-1.19808-14.66368-0.44032 0 0-30.63808-0.07168-44.30848 43.35616-8.8576 28.11904 1.792 104.79616 1.792 104.79616 1.46432 12.27776-3.42016 30.21824-10.72128 40.20224 0 0-36.77184 46.03904-58.9312 100.34176-22.15936 54.30272 118.15936 145.05984 208.98816 205.27104C507.82208 613.89824 502.03648 743.424 502.03648 743.424s-74.19904-96.75776-194.00704-156.9792C188.2112 526.22336 150.30272 442.23488 150.30272 442.23488c-2.89792-5.45792-5.94944-4.94592-6.71744 1.21856 0 0-15.1552 91.61728 16.25088 147.8144 70.92224 126.88384 141.74208 112.88576 197.03808 183.27552s54.272 164.9152 54.272 164.9152-97.62816-141.29152-235.66336-205.55776c-91.53536-61.27616-74.7008-125.91104-85.49376-101.85728-10.79296 24.05376 26.73664 192.41984 65.40288 222.2592 80.57856 62.18752 94.16704 101.98016 94.16704 101.98016h175.53408S544.512 814.85824 572.928 725.73952c44.41088-139.30496 40.20224-191.26272 40.20224-191.26272 0.08192-8.22272 6.81984-14.19264 14.98112-13.29152 0 0 46.45888 4.64896 66.64192 9.68704 23.53152 5.86752 55.35744 26.20416 55.35744 26.20416 3.49184 2.14016 7.39328 0.68608 8.69376-3.1744l34.4576-102.77888c1.30048-3.8912-0.63488-5.51936-4.352-3.75808 0 0-45.37344 25.09824-88.17664 12.1856-20.15232-6.08256-59.60704-14.82752-74.69056-32.6656-16.95744-20.03968-15.59552-71.3728 26.66496-79.21664 48.0256-8.9088 33.13664 15.14496 65.91488 24.64768 27.42272 7.95648 22.29248-1.69984 26.69568 5.21216 1.67936 2.63168 0.38912 32.65536 0.38912 32.65536-0.21504 6.144 3.39968 7.84384 8.0384 3.79904l41.89184-36.46464c17.37728-11.24352 30.86336-0.57344 48.24064-11.81696 14.73536-9.53344 29.58336-43.66336 29.58336-43.66336 4.48512-9.24672 0.60416-20.41856-8.63232-24.92416l-42.58816-20.80768c-3.69664-1.80224-3.38944-3.26656 0.74752-3.26656h62.0032zM422.54336 123.87328s-49.88928 50.7392-74.5472 50.66752c-24.65792-0.07168-33.24928-56.12544-3.92192-56.12544 18.00192 0 76.32896 0.21504 76.32896 0.21504 4.13696 0.02048 5.0688 2.36544 2.14016 5.24288z m123.09504 249.64096s-3.31776-25.53856-33.16736-40.05888c-29.8496-14.52032-52.5312-41.13408-59.648-68.95616-12.1856-54.8864 48.29184-104.192 48.29184-104.192s-30.1056 73.6768 3.5328 106.60864c54.272 53.12512 40.99072 106.5984 40.99072 106.5984z m155.56608-164.46464c-7.94624 10.32192-9.60512 37.92896-59.2384 20.736-49.63328-17.2032-71.00416-54.5792-71.00416-54.5792-2.27328-3.40992-0.79872-6.49216 3.328-6.8096 0 0 43.55072-5.03808 80.06656 6.44096 24.91392 7.82336 54.79424 23.88992 46.848 34.21184z" fill="#272636" p-id="1943"></path><path d="M366.30528 259.26656c1.05472-1.76128 1.51552-1.57696 1.19808 0.43008 0 0-7.55712 19.0464 22.8864 87.63392 27.0848 61.02016 87.49056 68.7104 118.66112 98.23232 55.808 52.82816 53.52448 123.45344 53.52448 123.45344s-25.82528-49.85856-85.98528-78.83776-92.6208-50.52416-127.7952-85.77024c-45.02528-45.12768 17.5104-145.14176 17.5104-145.14176zM500.0704 961.44384h134.49216s95.8464-138.07616 46.68416-291.25632c-16.19968-50.46272-43.45856-80.00512-43.45856-80.00512-5.18144-6.38976-8.89856-4.88448-8.448 3.34848 0 0 9.15456 99.80928-19.44576 194.00704-28.60032 94.208-109.824 173.90592-109.824 173.90592zM681.61536 956.8768h105.24672s22.38464-73.5232 16.61952-130.21184c-9.30816-91.57632-48.31232-132.72064-48.31232-132.72064-3.80928-4.77184-6.0928-3.67616-5.2224 2.38592 0 0 16.75264 89.1904-14.4896 150.1184-30.9248 60.30336-53.84192 110.42816-53.84192 110.42816zM869.30432 811.35616c-2.88768-2.9184-4.80256-1.95584-4.38272 2.10944 0 0 6.79936 44.99456-7.76192 81.22368-10.12736 25.1904-28.91776 58.60352-28.91776 58.60352h107.17184s5.34528-50.31936-19.89632-83.97824c-11.56096-23.99232-46.21312-57.9584-46.21312-57.9584z" fill="#272636" p-id="1944"></path></svg>
|
||||||
|
After Width: | Height: | Size: 4.0 KiB |
Reference in New Issue
Block a user