From 71ff127a4cfbf0c7f0271746a1a3ddd55621c8de Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 18 Sep 2024 08:18:10 +0000 Subject: [PATCH] Deploy to GitHub pages --- 404.html | 33 +++ About/index.html | 33 +++ Docs/Start.html | 33 +++ Docs/index.html | 33 +++ PluginDocs/Basic/Example.html | 33 +++ PluginDocs/Basic/Format.html | 40 ++++ PluginDocs/Basic/Metadata.html | 76 +++++++ PluginDocs/Basic/Tips.html | 33 +++ PluginDocs/HelloWorld/CSharp.html | 37 ++++ PluginDocs/HelloWorld/Go.html | 179 ++++++++++++++++ PluginDocs/HelloWorld/Python.html | 199 +++++++++++++++++ PluginDocs/HelloWorld/Rust.html | 318 ++++++++++++++++++++++++++++ PluginDocs/Web/Back.html | 58 +++++ PluginDocs/Web/Interaction.html | 44 ++++ PluginDocs/Web/index.html | 172 +++++++++++++++ PluginDocs/index.html | 33 +++ PluginMarket/index.html | 33 +++ assets/404.html-ceb4942b.js | 1 + assets/404.html-f9875e7b.js | 1 + assets/Back.html-42e4d89e.js | 1 + assets/Back.html-df0fa5cb.js | 26 +++ assets/CSharp.html-388a67b2.js | 5 + assets/CSharp.html-3c53f8ae.js | 1 + assets/Example.html-4110fdf6.js | 1 + assets/Example.html-d5941944.js | 1 + assets/Format.html-acc722f4.js | 8 + assets/Format.html-f770cc78.js | 1 + assets/Go.html-3fa1af93.js | 147 +++++++++++++ assets/Go.html-4c263677.js | 1 + assets/Interaction.html-54fa1a8f.js | 12 ++ assets/Interaction.html-b7586d71.js | 1 + assets/Metadata.html-0350df2c.js | 44 ++++ assets/Metadata.html-aa88d8d2.js | 1 + assets/Python.html-0b3dfca9.js | 1 + assets/Python.html-e29369ba.js | 167 +++++++++++++++ assets/Rust.html-b1948268.js | 1 + assets/Rust.html-fd38a2dd.js | 286 +++++++++++++++++++++++++ assets/Start-2-98e843d2.js | 1 + assets/Start.html-50d99452.js | 1 + assets/Start.html-9d4161ee.js | 1 + assets/Tips.html-6b25d762.js | 1 + assets/Tips.html-fd8819f7.js | 1 + assets/app-542dabbe.js | 6 + assets/back-to-top-8efcbe56.svg | 1 + assets/framework-cc651620.js | 5 + assets/index-70769223.js | 1 + assets/index.html-103e28a1.js | 1 + assets/index.html-1f0059e4.js | 1 + assets/index.html-4f366004.js | 1 + assets/index.html-550593ad.js | 1 + assets/index.html-5ff51570.js | 1 + assets/index.html-7b9a0856.js | 1 + assets/index.html-86b4a8cc.js | 1 + assets/index.html-8704499c.js | 1 + assets/index.html-9e9e82fb.js | 1 + assets/index.html-d2bbbcfd.js | 1 + assets/index.html-db82fc2e.js | 1 + assets/index.html-ef97b19a.js | 140 ++++++++++++ assets/search-0782d0d1.svg | 1 + assets/style-0596657c.css | 1 + favicon.ico | Bin 0 -> 4683 bytes file/hl_plugin_python.zip | Bin 0 -> 4767 bytes file/hl_plugin_rust.zip | Bin 0 -> 4104 bytes img/PluginDocs/Example-1.png | Bin 0 -> 42846 bytes img/PluginDocs/Start-1.png | Bin 0 -> 50954 bytes img/PluginDocs/Start-2.png | Bin 0 -> 61174 bytes index.html | 33 +++ logo.svg | 21 ++ service-worker.js | 1 + workbox-d249b2c8.js | 1 + 70 files changed, 2321 insertions(+) create mode 100644 404.html create mode 100644 About/index.html create mode 100644 Docs/Start.html create mode 100644 Docs/index.html create mode 100644 PluginDocs/Basic/Example.html create mode 100644 PluginDocs/Basic/Format.html create mode 100644 PluginDocs/Basic/Metadata.html create mode 100644 PluginDocs/Basic/Tips.html create mode 100644 PluginDocs/HelloWorld/CSharp.html create mode 100644 PluginDocs/HelloWorld/Go.html create mode 100644 PluginDocs/HelloWorld/Python.html create mode 100644 PluginDocs/HelloWorld/Rust.html create mode 100644 PluginDocs/Web/Back.html create mode 100644 PluginDocs/Web/Interaction.html create mode 100644 PluginDocs/Web/index.html create mode 100644 PluginDocs/index.html create mode 100644 PluginMarket/index.html create mode 100644 assets/404.html-ceb4942b.js create mode 100644 assets/404.html-f9875e7b.js create mode 100644 assets/Back.html-42e4d89e.js create mode 100644 assets/Back.html-df0fa5cb.js create mode 100644 assets/CSharp.html-388a67b2.js create mode 100644 assets/CSharp.html-3c53f8ae.js create mode 100644 assets/Example.html-4110fdf6.js create mode 100644 assets/Example.html-d5941944.js create mode 100644 assets/Format.html-acc722f4.js create mode 100644 assets/Format.html-f770cc78.js create mode 100644 assets/Go.html-3fa1af93.js create mode 100644 assets/Go.html-4c263677.js create mode 100644 assets/Interaction.html-54fa1a8f.js create mode 100644 assets/Interaction.html-b7586d71.js create mode 100644 assets/Metadata.html-0350df2c.js create mode 100644 assets/Metadata.html-aa88d8d2.js create mode 100644 assets/Python.html-0b3dfca9.js create mode 100644 assets/Python.html-e29369ba.js create mode 100644 assets/Rust.html-b1948268.js create mode 100644 assets/Rust.html-fd38a2dd.js create mode 100644 assets/Start-2-98e843d2.js create mode 100644 assets/Start.html-50d99452.js create mode 100644 assets/Start.html-9d4161ee.js create mode 100644 assets/Tips.html-6b25d762.js create mode 100644 assets/Tips.html-fd8819f7.js create mode 100644 assets/app-542dabbe.js create mode 100644 assets/back-to-top-8efcbe56.svg create mode 100644 assets/framework-cc651620.js create mode 100644 assets/index-70769223.js create mode 100644 assets/index.html-103e28a1.js create mode 100644 assets/index.html-1f0059e4.js create mode 100644 assets/index.html-4f366004.js create mode 100644 assets/index.html-550593ad.js create mode 100644 assets/index.html-5ff51570.js create mode 100644 assets/index.html-7b9a0856.js create mode 100644 assets/index.html-86b4a8cc.js create mode 100644 assets/index.html-8704499c.js create mode 100644 assets/index.html-9e9e82fb.js create mode 100644 assets/index.html-d2bbbcfd.js create mode 100644 assets/index.html-db82fc2e.js create mode 100644 assets/index.html-ef97b19a.js create mode 100644 assets/search-0782d0d1.svg create mode 100644 assets/style-0596657c.css create mode 100644 favicon.ico create mode 100644 file/hl_plugin_python.zip create mode 100644 file/hl_plugin_rust.zip create mode 100644 img/PluginDocs/Example-1.png create mode 100644 img/PluginDocs/Start-1.png create mode 100644 img/PluginDocs/Start-2.png create mode 100644 index.html create mode 100644 logo.svg create mode 100644 service-worker.js create mode 100644 workbox-d249b2c8.js diff --git a/404.html b/404.html new file mode 100644 index 0000000..8216551 --- /dev/null +++ b/404.html @@ -0,0 +1,33 @@ + + + + + + + + + HiperLink + + + + +

404

That's a Four-Oh-Four.
Take me home
+ + + diff --git a/About/index.html b/About/index.html new file mode 100644 index 0000000..477851a --- /dev/null +++ b/About/index.html @@ -0,0 +1,33 @@ + + + + + + + + + HiperLink + + + + +

关于我们

提示

关于我们正在建设中...

+ + + diff --git a/Docs/Start.html b/Docs/Start.html new file mode 100644 index 0000000..70fff16 --- /dev/null +++ b/Docs/Start.html @@ -0,0 +1,33 @@ + + + + + + + + + 📖 快速上手 | HiperLink + + + + +

📖 快速上手

提示

使用文档正在建设中...

+ + + diff --git a/Docs/index.html b/Docs/index.html new file mode 100644 index 0000000..bd6d48b --- /dev/null +++ b/Docs/index.html @@ -0,0 +1,33 @@ + + + + + + + + + ✨ 简介 | HiperLink + + + + +

✨ 简介

Hello 🌈 HiperLink 你好 🔗 嗨皮立刻

Node.JS VersionVue VersionPlatform

🚧 | 简介

嗨皮立刻, 英文名: HiperLink

采用 Golang + Vue 技术栈, 基于 Hiperopen in new window 的插件化、轻量化互联互通平台 🎉

🎉 | 特性

  • ✅ 全平台
  • ✅ 轻量化
  • ✅ 插件化
  • ✅ 高性能
  • ✅ 易用性
+ + + diff --git a/PluginDocs/Basic/Example.html b/PluginDocs/Basic/Example.html new file mode 100644 index 0000000..bb611af --- /dev/null +++ b/PluginDocs/Basic/Example.html @@ -0,0 +1,33 @@ + + + + + + + + + 你好,HiperLink | HiperLink + + + + +

你好,HiperLink

command 将会在后面的教程中填写,现在让我们打开 HiperLink,看看插件是否能被识别。

HiperLink插件界面

看起来很不错,但是需要注意:该插件还无法启动,因为我们没有编写插件的本体:程序。

现在请看向左侧的“你好,世界!”条目,寻找你所使用的语言。

+ + + diff --git a/PluginDocs/Basic/Format.html b/PluginDocs/Basic/Format.html new file mode 100644 index 0000000..dc6f1c3 --- /dev/null +++ b/PluginDocs/Basic/Format.html @@ -0,0 +1,40 @@ + + + + + + + + + 插件目录格式 | HiperLink + + + + +

插件目录格式

插件的基本组织形式为文件夹,一个文件夹即为一个插件。

插件所需要用到的一切都可以放进这个文件夹中。

现在,让我们制作一个名为StudyPlugin的插件。

首先我们需要一个唯一ID,这将会成为你插件的标志。在这里我们将StudyPlugin的唯一ID设定为study_plugin

然后我们需要进行三步:

  1. 创建一个名为 study_plugin 的文件夹

  2. 在文件夹中创建 metadata.json 文件

  3. 将文件夹移动到HiperLink下的plugins文件夹(如果没有就新建)

目录在此时应该是这样的:

│ HiperLink.exe
+├─config
+├─libs        
+├─logs
+└─plugins
+    ├─study_plugin
+        ├─metadata.json
+
+ + + diff --git a/PluginDocs/Basic/Metadata.html b/PluginDocs/Basic/Metadata.html new file mode 100644 index 0000000..3aea4f5 --- /dev/null +++ b/PluginDocs/Basic/Metadata.html @@ -0,0 +1,76 @@ + + + + + + + + + 插件元数据 | HiperLink + + + + +

插件元数据

此时你的插件还无法被识别,因为我们需要编写metadata.json的内容。

metadata.json 的基础模板如下:

{
+    "id": "",
+    "version": "",
+    "name": "",
+    "description": "",
+    "author": [""],
+    "link": "",
+    "dependencies": {
+    },
+    "command": "",
+    "args": [],
+    "type": "gRPC",
+    "root": false,
+    "color": "",
+    "icon": "",
+    "frontend": {
+        "ui": true,
+        "configuration": true
+    }
+}
+

属性

id

  • 字段键名:id
  • 字段类型:string

ID(即插件 ID)是你插件的“身份证号”。

该值要与文件夹名称保持一致。

HiperLink 使用插件 ID 来区分不同的插件并检查插件间的依赖。 HiperLink 中加载的所有插件都应使用不同的插件 ID。如果新加载的插件具有与现有插件完全相同的插件 ID,则新插件将无法加载

请明智地选择你的插件 ID。强烈建议你在发布插件后不要再更改插件 ID

注意

小心可能的包名冲突。非常不推荐为你的插件取一个与标准库 / 第三方库名相同的 id,如 test,否则 HiperLink 很可能无法正确地加载你的插件

version

  • 字段键名:version
  • 字段类型:string

version 字段代表你的插件版本。它基本上采用了 语义化版本open in new window 的格式,不过限制较少,如你可以定义任意长度的版本号

name

  • 字段键名:name
  • 字段类型:string

你的插件名称——给你的插件起一个好听的名字吧

尽量不要使插件名称太长。你可以把插件的详细信息放在 description 之中

description

  • 字段键名:description
  • 字段类型:string

你的插件描述。在这里写下你的插件的功能总结吧

author

  • 字段键名:author
  • 字段类型:string[]

插件作者。该值为数组,可以容纳多个作者

  • 字段键名:link
  • 字段类型:string

你的插件的网址。你可以将其指向插件的 github 链接。它的值应为一个可访问的网址

dependencies

  • 字段键名:dependencies
  • 字段类型:dist

该字段描述了你插件的依赖,这是一个例子:

"dependencies": {
+        "HiperLink": ">=0.2.6"
+}
+

键值为依赖的插件ID,HiperLink的ID就是HiperLink。右侧为版本运算符。

运算符详情可见此表格。

运算符示例解释允许的值不允许的值
>=>=1.2.3目标版本应大于等于1.2.31.2.3,1.3.01.2.0
>>1.2.3目标版本应大于1.2.31.2.4,1.3.01.2.0,1.2.3
<=<=1.2.3目标版本应小于等于1.2.31.2.3,1.1.01.2.4,2.0.0
<<1.2.3目标版本应小于1.2.31.1.01.2.3,1.5
==1.2.3目标版本应等于1.2.31.2.31.2,1.2.4
1.2.3目标版本应等于1.2.31.2.31.2,1.2.4
^^1.2.3目标版本应大于等于1.2.3,且目标版本的第一个版本分段等于运算版本。1.2.3,1.2.4,1.4.41.0.0,2.0.0
~~1.2.3目标版本应大于等于1.2.3,且目标版本的第一个和第二个版本分段等于运算版本。1.2.3,1.2.41.0.0,1.4.4,2.0.0

command

  • 字段键名:command
  • 字段类型:string

插件的运行指令,如./pluginpython plugin.pyjava -jar plugin.jar等。

args

  • 字段键名:args
  • 字段类型:string[]

插件的指令参数

type

  • 字段键名:type
  • 字段类型:string
  • 可选值 : gRPCnetRPC

插件与HiperLink通信方式,目前可选的值只有gRPCnetRPC

root

  • 字段键名:root
  • 字段类型:bool

插件是否需要使用管理员权限运行

color

  • 字段键名:color
  • 字段类型:string

插件图标的颜色,为十六进制颜色码(#FFFFFF)和RGB颜色码()。颜色的选择可以参考中国色open in new window

icon

  • 字段键名:icon
  • 字段类型:string

插件图标,该值为mdi- + Material Design Iconsopen in new window上的所有可选图标代码,如mdi-user-arrow-left-outline

frontend.ui

  • 字段键名:ui
  • 字段类型:bool

是否显示插件页面

frontend.configuration

  • 字段键名:configuration
  • 字段类型:bool

是否显示配置页面

实例

在本案例中,metadata.json的内容应该是:

{
+    "id": "study_plugin",
+    "version": "0.0.1",
+    "name": "StudyPlugin",
+    "description": "一个基础教程插件",
+    "author": ["天机"],
+    "link": "hiper.ink",
+    "dependencies": {
+    },
+    "command": "",
+    "args": [],
+    "type": "gRPC",
+    "root": false,
+    "color": "#93d5dc",
+    "icon": "mdi-book",
+    "frontend": {
+        "ui": true,
+        "configuration": true
+    }
+}
+
+ + + diff --git a/PluginDocs/Basic/Tips.html b/PluginDocs/Basic/Tips.html new file mode 100644 index 0000000..17250d3 --- /dev/null +++ b/PluginDocs/Basic/Tips.html @@ -0,0 +1,33 @@ + + + + + + + + + 一些提示 | HiperLink + + + + +

一些提示

提示

如果您是 Golang 的使用者,我们推荐您下载插件模板:

Gitee: https://gitee.com/HiperLink/example-pluginsopen in new window

Github: https://github.com/Hiper-Link/example-pluginsopen in new window

+ + + diff --git a/PluginDocs/HelloWorld/CSharp.html b/PluginDocs/HelloWorld/CSharp.html new file mode 100644 index 0000000..a739ee6 --- /dev/null +++ b/PluginDocs/HelloWorld/CSharp.html @@ -0,0 +1,37 @@ + + + + + + + + + C#/.NET | HiperLink + + + + +

C#/.NET

提示

参考文档:.NET 上的 gRPC 概述open in new window

本教程基于Visual Studio Codeopen in new windowC#插件open in new window进行编写。

注意

本教程假定用户熟悉 VS Code。

请打开终端,然后CD到study_plugin文件夹,输入以下命令生成工程。

cd \HiperLink\plugins\study_plugin
+dotnet new grpc -o StudyPlugin
+cd StudyPlugin
+dotnet dev-certs https --trust
+

让我们打开工程。

+ + + diff --git a/PluginDocs/HelloWorld/Go.html b/PluginDocs/HelloWorld/Go.html new file mode 100644 index 0000000..bb3fc02 --- /dev/null +++ b/PluginDocs/HelloWorld/Go.html @@ -0,0 +1,179 @@ + + + + + + + + + Golang | HiperLink + + + + +

Golang

由于 HiperLink 就是由 Golang 编写的软件,使用 Golang 开发插件变得极度简单。

在本案例中,我们将会编写一个在加载插件时弹出Hello World!弹窗的插件。

study_plugin 文件夹中进入终端,输入以下命令初始化工程并设置依赖:

go mod init study_plugin
+go get github.com/Hiper-Link/go-plugin
+go get github.com/Hiper-Link/plugin-libs/shared
+

新建 plugin.go 文件,在其中编写以下示例代码

package main
+
+import (
+	"github.com/Hiper-Link/go-plugin"
+	"github.com/Hiper-Link/plugin-libs/shared"
+)
+
+var Handshake = plugin.HandshakeConfig{
+	ProtocolVersion:  1,
+	MagicCookieKey:   "study_plugin", // 此处为你的插件ID
+	MagicCookieValue: "Hello, HiperLink",
+}
+
+type API struct{}
+
+// 加载插件
+func (API) OnLoad(p string) ([]byte, error) {
+	return nil, nil
+}
+
+// 停用插件
+func (API) OnUnload(p string) ([]byte, error) {
+	return nil, nil
+}
+
+// 安装插件
+func (API) OnInstall(p string) ([]byte, error) {
+	return nil, nil
+}
+
+// 卸载插件
+func (API) OnUninstall(p string) ([]byte, error) {
+	return nil, nil
+}
+
+// HL 启动
+func (API) OnStart(p string) ([]byte, error) {
+	return nil, nil
+}
+
+// HL 停止
+func (API) OnStop(p string) ([]byte, error) {
+	return nil, nil
+}
+
+// 前后端交互
+func (API) Interaction(p string, function string) (string, error) {
+	return function, nil
+}
+
+func main() {
+	plugin.Serve(&plugin.ServeConfig{
+		HandshakeConfig: Handshake,
+		Plugins: map[string]plugin.Plugin{
+			"grpc": &shared.GRPCPlugin{Impl: &API{}},
+		},
+		NetworkType: "tcp",
+		GRPCServer: plugin.DefaultGRPCServer,
+	})
+}
+

你可以随意扩展本代码,HiperLink中的相关操作将会触发类似于OnLoad的回调事件。

注意

OnInstallOnUninstall暂不可用。

我们将会在import中引入walk,在OnLoad中写入弹窗代码:

  1. 使用终端命令go get github.com/lxn/walk设置依赖
  2. OnLoad下写入walk.MsgBox(nil, "StudyPlugin", "HelloWorld!", walk.MsgBoxIconInformation)

完整代码如下:

package main
+
+import (
+	"github.com/Hiper-Link/go-plugin"
+	"github.com/Hiper-Link/plugin-libs/shared"
+	"github.com/lxn/walk"
+)
+
+var Handshake = plugin.HandshakeConfig{
+	ProtocolVersion:  1,
+	MagicCookieKey:   "study_plugin",
+	MagicCookieValue: "Hello, HiperLink",
+}
+
+type API struct{}
+
+// 加载插件
+func (API) OnLoad(p string) ([]byte, error) {
+	walk.MsgBox(nil, "StudyPlugin", "HelloWorld!", walk.MsgBoxIconInformation)
+	return nil, nil
+}
+
+// 停用插件
+func (API) OnUnload(p string) ([]byte, error) {
+	return nil, nil
+}
+
+// 安装插件
+func (API) OnInstall(p string) ([]byte, error) {
+	return nil, nil
+}
+
+// 卸载插件
+func (API) OnUninstall(p string) ([]byte, error) {
+	return nil, nil
+}
+
+// HL 启动
+func (API) OnStart(p string) ([]byte, error) {
+	return nil, nil
+}
+
+// HL 停止
+func (API) OnStop(p string) ([]byte, error) {
+	return nil, nil
+}
+
+// 前后端交互
+func (API) Interaction(p string, function string) (string, error) {
+	return function, nil
+}
+
+func main() {
+	plugin.Serve(&plugin.ServeConfig{
+		HandshakeConfig: Handshake,
+		Plugins: map[string]plugin.Plugin{
+			"grpc": &shared.GRPCPlugin{Impl: &API{}},
+		},
+		NetworkType: "tcp",
+		GRPCServer: plugin.DefaultGRPCServer,
+	})
+}
+

最后,我们编译该代码:

go build plugin.go
+

在study_plugin文件夹下将会生成一个名为plugin的二进制可执行文件。

让我们打开metadata.json进行最后的编写:

{
+    "id": "study_plugin",
+    "version": "0.0.1",
+    "name": "StudyPlugin",
+    "description": "一个基础教程插件",
+    "author": ["天机"],
+    "link": "hiper.ink",
+    "dependencies": {
+    },
+    "command": "./plugin",
+    "args": [],
+    "type": "gRPC",
+    "root": false,
+    "color": "#93d5dc",
+    "icon": "mdi-book",
+    "frontend": {
+        "ui": true,
+        "configuration": true
+    }
+}
+

以上所有东西您都能改!我们写入了软件的启动命令./plugin

回到HiperLink,查看并开启我们的插件。

HiperLink插件界面

+ + + diff --git a/PluginDocs/HelloWorld/Python.html b/PluginDocs/HelloWorld/Python.html new file mode 100644 index 0000000..5dc4b8e --- /dev/null +++ b/PluginDocs/HelloWorld/Python.html @@ -0,0 +1,199 @@ + + + + + + + + + Python | HiperLink + + + + +

Python

提示

笔者使用的Python版本为3.10.9,因此一切操作均以此为准。

版本要求 Python 3.5 或更高版本。

在本案例中,我们将会编写一个在加载插件时弹出Hello World!弹窗的插件。

让我们进入终端,输入以下命令来设置依赖:

pip install grpcio
+pip install grpcio-tools
+

Python插件开发需要模板,请点击此处下载模板,然后将模板解压至study_plugin文件夹。

此时study_plugin的内部文件结构如下:

└─study_plugin
+    health_pb2.py
+    health_pb2_grpc.py
+    hiperlink_pb2.py
+    hiperlink_pb2_grpc.py
+    metadata.json
+    plugin.py
+

我们开发的核心工作主要集中在plugin.py,在此基础上你可以加入任何文件到此文件夹。

plugin.py的内部代码如下:

# 本模板由天机Ceyase编写,基于MIT许可证开源
+import hiperlink_pb2
+import hiperlink_pb2_grpc
+import health_pb2_grpc
+import grpc
+import concurrent.futures as futures
+import sys
+import time
+import random
+import socket
+
+class HiperLinkServicer(hiperlink_pb2_grpc.PluginServicer):
+
+    # 加载插件
+    def OnLoad(self, request, context):
+        return hiperlink_pb2.EventsResponse()
+
+    # 停用插件
+    def OnUnload(self, request, context):
+        return hiperlink_pb2.EventsResponse()
+
+    # 安装插件
+    def OnInstall(self, request, context):
+        return hiperlink_pb2.EventsResponse()
+
+    # 卸载插件
+    def OnUninstall(self, request, context):
+        return hiperlink_pb2.EventsResponse()
+
+    # HL 启动
+    def OnStart(self, request, context):
+        return hiperlink_pb2.EventsResponse()
+
+    # HL 停止
+    def OnStop(self, request, context):
+        return hiperlink_pb2.EventsResponse()
+
+    # 前后端交互
+    def Interaction(self, request, context):
+        return hiperlink_pb2.InteractionResponse()
+
+def get_free_port():
+    while True:
+        port = random.randint(32768, 61000)
+        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+        if not (sock.connect_ex(('127.0.0.1', port)) == 0):
+            return port 
+
+if __name__ == '__main__':
+    health = health_pb2_grpc.HealthServicer()
+    server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
+    hiperlink_pb2_grpc.add_PluginServicer_to_server(HiperLinkServicer(), server)
+    health_pb2_grpc.add_HealthServicer_to_server(health, server)
+    port = get_free_port()
+    server.add_insecure_port(f'127.0.0.1:{port}')
+    server.start()
+    print(f"1|1|tcp|127.0.0.1:{port}|grpc")
+    sys.stdout.flush()
+    try:
+        while True:
+            time.sleep(60 * 60 * 24)
+    except KeyboardInterrupt:
+        server.stop(0)
+

你可以随意扩展本代码,HiperLink中的相关操作将会触发类似于OnLoad的回调事件。

注意

OnInstallOnUninstall暂不可用。

本教程中,我们将会引入winapi,在OnLoad中写入弹窗代码:

  1. 使用终端命令pip install pywin32设置依赖
  2. 写入import win32api,win32con,在OnLoad下写入win32api.MessageBox(0,"HelloWorld!","StudyPlugin",win32con.MB_OK)

完整代码如下:

# 本模板由天机Ceyase编写,基于MIT许可证开源
+import hiperlink_pb2
+import hiperlink_pb2_grpc
+import health_pb2_grpc
+import grpc
+import concurrent.futures as futures
+import sys
+import time
+import random
+import socket
+import win32api,win32con
+
+class HiperLinkServicer(hiperlink_pb2_grpc.PluginServicer):
+
+    # 加载插件
+    def OnLoad(self, request, context):
+        win32api.MessageBox(0,"HelloWorld!","StudyPlugin",win32con.MB_OK)
+        return hiperlink_pb2.EventsResponse()
+
+    # 停用插件
+    def OnUnload(self, request, context):
+        return hiperlink_pb2.EventsResponse()
+
+    # 安装插件
+    def OnInstall(self, request, context):
+        return hiperlink_pb2.EventsResponse()
+
+    # 卸载插件
+    def OnUninstall(self, request, context):
+        return hiperlink_pb2.EventsResponse()
+
+    # HL 启动
+    def OnStart(self, request, context):
+        return hiperlink_pb2.EventsResponse()
+
+    # HL 停止
+    def OnStop(self, request, context):
+        return hiperlink_pb2.EventsResponse()
+
+    # 前后端交互
+    def Interaction(self, request, context):
+        return hiperlink_pb2.InteractionResponse()
+
+def get_free_port():
+    while True:
+        port = random.randint(32768, 61000)
+        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+        if not (sock.connect_ex(('127.0.0.1', port)) == 0):
+            return port 
+
+if __name__ == '__main__':
+    health = health_pb2_grpc.HealthServicer()
+    server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
+    hiperlink_pb2_grpc.add_PluginServicer_to_server(HiperLinkServicer(), server)
+    health_pb2_grpc.add_HealthServicer_to_server(health, server)
+    port = get_free_port()
+    server.add_insecure_port(f'127.0.0.1:{port}')
+    server.start()
+    print(f"1|1|tcp|127.0.0.1:{port}|grpc")
+    sys.stdout.flush()
+    try:
+        while True:
+            time.sleep(60 * 60 * 24)
+    except KeyboardInterrupt:
+        server.stop(0)
+

让我们使用python plugin.py命令运行此py文件。

如果出现了1|1|tcp|127.0.0.1:xxxxx|grpc的输出,并且程序一直保持运行,那么该插件就可以进行下一步了。

为了照顾没有python的用户,你应该打包此插件!

目前尚不支持pyinstaller打包,我们推荐你使用cxfreeze打包。

study_plugin文件夹下输入此终端命令:

pip install cx_Freeze
+cxfreeze plugin.py
+

等待片刻,study_plugin文件夹下将会生成build文件夹,将其中的可执行文件移动到study_plugin文件夹(当然,你可以删除一些冗余文件)

最终study_plugin文件夹的目录结构如下:

└─study_plugin
+    │  metadata.json
+    │  plugin.exe
+    │  plugin.py
+    │  python3.dll
+    │  python310.dll
+    └─lib
+

让我们打开metadata.json进行最后的编写:

{
+    "id": "study_plugin",
+    "version": "0.0.1",
+    "name": "StudyPlugin",
+    "description": "一个基础教程插件",
+    "author": ["天机"],
+    "link": "hiper.ink",
+    "dependencies": {
+    },
+    "command": "./plugin",
+    "args": [],
+    "type": "gRPC",
+    "root": false,
+    "color": "#93d5dc",
+    "icon": "mdi-book",
+    "frontend": {
+        "ui": true,
+        "configuration": true
+    }
+}
+

以上所有东西您都能改!我们写入了软件的启动命令./plugin

回到HiperLink,查看并开启我们的插件。

HiperLink插件界面

+ + + diff --git a/PluginDocs/HelloWorld/Rust.html b/PluginDocs/HelloWorld/Rust.html new file mode 100644 index 0000000..98aa1b3 --- /dev/null +++ b/PluginDocs/HelloWorld/Rust.html @@ -0,0 +1,318 @@ + + + + + + + + + Rust | HiperLink + + + + +

Rust

提示

笔者使用的rustc版本为1.66.0,因此一切操作均以此为准。

版本要求 Rust 1.39 或更高版本。

在本案例中,我们将会编写一个在加载插件时弹出Hello World!弹窗的插件。

让我们进入终端,输入以下命令来设置依赖:

rustup update
+rustup component add rustfmt
+

Rust插件开发需要模板,请点击此处下载模板,然后将模板解压至study_plugin文件夹。

此时study_plugin的内部文件结构如下:

└─study_plugin
+    metadata.json
+    Cargo.toml
+    └─src
+        main.rs
+        proto.rs
+

我们开发的入口点在main.rs,在此基础上你可以进行任何开发。

main.rs的内部代码如下:

// 本模板由天机Ceyase编写,基于MIT许可证开源
+use tonic::{transport::Server, Request, Response, Status};
+use std::net::TcpListener;
+
+use hiper_link::plugin_server::{Plugin, PluginServer};
+use hiper_link::{EventsRequest, EventsResponse, InteractionRequest, InteractionResponse};
+
+pub mod hiper_link {
+    include!("proto.rs");
+}
+
+#[derive(Debug, Default)]
+pub struct API {}
+
+#[tonic::async_trait]
+impl Plugin for API {
+
+    // 加载插件
+    async fn on_load(
+        &self,
+        _request: Request<EventsRequest>,
+    ) -> Result<Response<EventsResponse>, Status> {
+        let reply = hiper_link::EventsResponse {value : "1".into()};
+
+        Ok(Response::new(reply))
+    }
+
+    // 停用插件
+    async fn on_unload(
+        &self,
+        _request: Request<EventsRequest>,
+    ) -> Result<Response<EventsResponse>, Status> {
+        let reply = hiper_link::EventsResponse {value : "1".into()};
+
+        Ok(Response::new(reply))
+    }
+
+    // 安装插件
+    async fn on_install(
+        &self,
+        _request: Request<EventsRequest>,
+    ) -> Result<Response<EventsResponse>, Status> {
+        let reply = hiper_link::EventsResponse {value : "1".into()};
+
+        Ok(Response::new(reply))
+    }
+
+    // 卸载插件
+    async fn on_uninstall(
+        &self,
+        _request: Request<EventsRequest>,
+    ) -> Result<Response<EventsResponse>, Status> {
+        let reply = hiper_link::EventsResponse {value : "1".into()};
+
+        Ok(Response::new(reply))
+    }
+
+    // HL 启动
+    async fn on_start(
+        &self,
+        _request: Request<EventsRequest>,
+    ) -> Result<Response<EventsResponse>, Status> {
+        let reply = hiper_link::EventsResponse {value : "1".into()};
+
+        Ok(Response::new(reply))
+    }
+
+    // HL 停止
+    async fn on_stop(
+        &self,
+        _request: Request<EventsRequest>,
+    ) -> Result<Response<EventsResponse>, Status> {
+        let reply = hiper_link::EventsResponse {value : "1".into()};
+
+        Ok(Response::new(reply))
+    }
+
+    // 前后端交互
+    async fn interaction(
+        &self,
+        _request: Request<InteractionRequest>,
+    ) -> Result<Response<InteractionResponse>, Status> {
+
+        let reply = hiper_link::InteractionResponse {value : "1".into()};
+        Ok(Response::new(reply))
+    }
+}
+
+fn listen_available_port() -> Option<TcpListener> {
+    for port in 32768..61000 {
+         match TcpListener::bind(("127.0.0.1", port)) {
+             Ok(l) => return Some(l),
+             _ => {}
+         }
+    }
+    None
+}
+
+#[tokio::main]
+async fn main() -> Result<(), Box<dyn std::error::Error>> {
+
+    let addr_str = listen_available_port().unwrap().local_addr().unwrap().to_string();
+
+    let addr = addr_str.parse()?;
+    let plugin = API::default();
+
+    println!("1|1|tcp|{addr_str}|grpc");
+    Server::builder()
+        .add_service(PluginServer::new(plugin))
+        .serve(addr)
+        .await?;
+    Ok(())
+}
+

你可以随意扩展本代码,HiperLink中的相关操作将会触发类似于on_load的回调事件。

注意

on_installon_uninstall暂不可用。

提示

请记得在Cargo.toml中更改您的项目名称!

本教程中,我们将会引入user32,使用MessageBoxW函数进行弹窗:

  1. Cargo.toml的最后一行添加user32-sys = "0.2.0"
  2. 写入use user32::MessageBoxW;,在on_load下写入以下几行:
let lp_text: Vec<u16> = "Hello world!\0".encode_utf16().collect();
+let lp_caption: Vec<u16> = "StudyPlugin\0".encode_utf16().collect();
+
+unsafe {
+    MessageBoxW(
+        std::ptr::null_mut(),
+        lp_text.as_ptr(),
+        lp_caption.as_ptr(),
+        0
+        );
+    }
+

完整代码如下:

// 本模板由天机Ceyase编写,基于MIT许可证开源
+use tonic::{transport::Server, Request, Response, Status};
+use std::net::TcpListener;
+
+use hiper_link::plugin_server::{Plugin, PluginServer};
+use hiper_link::{EventsRequest, EventsResponse, InteractionRequest, InteractionResponse};
+
+use user32::MessageBoxW;
+pub mod hiper_link {
+    include!("proto.rs");
+}
+
+#[derive(Debug, Default)]
+pub struct API {}
+
+#[tonic::async_trait]
+impl Plugin for API {
+
+    // 加载插件
+    async fn on_load(
+        &self,
+        _request: Request<EventsRequest>,
+    ) -> Result<Response<EventsResponse>, Status> {
+        let reply = hiper_link::EventsResponse {value : "1".into()};
+
+        let lp_text: Vec<u16> = "Hello world!\0".encode_utf16().collect();
+        let lp_caption: Vec<u16> = "StudyPlugin\0".encode_utf16().collect();
+
+        unsafe {
+            MessageBoxW(
+            std::ptr::null_mut(),
+            lp_text.as_ptr(),
+            lp_caption.as_ptr(),
+            0
+            );
+        }
+        Ok(Response::new(reply))
+    }
+
+    // 停用插件
+    async fn on_unload(
+        &self,
+        _request: Request<EventsRequest>,
+    ) -> Result<Response<EventsResponse>, Status> {
+        let reply = hiper_link::EventsResponse {value : "1".into()};
+
+        Ok(Response::new(reply))
+    }
+
+    // 安装插件
+    async fn on_install(
+        &self,
+        _request: Request<EventsRequest>,
+    ) -> Result<Response<EventsResponse>, Status> {
+        let reply = hiper_link::EventsResponse {value : "1".into()};
+
+        Ok(Response::new(reply))
+    }
+
+    // 卸载插件
+    async fn on_uninstall(
+        &self,
+        _request: Request<EventsRequest>,
+    ) -> Result<Response<EventsResponse>, Status> {
+        let reply = hiper_link::EventsResponse {value : "1".into()};
+
+        Ok(Response::new(reply))
+    }
+
+    // HL 启动
+    async fn on_start(
+        &self,
+        _request: Request<EventsRequest>,
+    ) -> Result<Response<EventsResponse>, Status> {
+        let reply = hiper_link::EventsResponse {value : "1".into()};
+
+        Ok(Response::new(reply))
+    }
+
+    // HL 停止
+    async fn on_stop(
+        &self,
+        _request: Request<EventsRequest>,
+    ) -> Result<Response<EventsResponse>, Status> {
+        let reply = hiper_link::EventsResponse {value : "1".into()};
+
+        Ok(Response::new(reply))
+    }
+
+    // 前后端交互
+    async fn interaction(
+        &self,
+        _request: Request<InteractionRequest>,
+    ) -> Result<Response<InteractionResponse>, Status> {
+
+        let reply = hiper_link::InteractionResponse {value : "1".into()};
+        Ok(Response::new(reply))
+    }
+}
+
+fn listen_available_port() -> Option<TcpListener> {
+    for port in 32768..61000 {
+         match TcpListener::bind(("127.0.0.1", port)) {
+             Ok(l) => return Some(l),
+             _ => {}
+         }
+    }
+    None
+}
+
+#[tokio::main]
+async fn main() -> Result<(), Box<dyn std::error::Error>> {
+
+    let addr_str = listen_available_port().unwrap().local_addr().unwrap().to_string();
+
+    let addr = addr_str.parse()?;
+    let plugin = API::default();
+
+    println!("1|1|tcp|{addr_str}|grpc");
+    Server::builder()
+        .add_service(PluginServer::new(plugin))
+        .serve(addr)
+        .await?;
+    Ok(())
+}
+

让我们使用cargo run命令运行此工程。

如果出现了1|1|tcp|127.0.0.1:xxxxx|grpc的输出,并且程序一直保持运行,那么该插件就可以进行下一步了。

使用cargo build --release命令打包工程。

等待片刻,\study_plugin\target\release文件夹下将会生成可执行文件,将其中的可执行文件重命名为plugin.exe并移动到study_plugin文件夹(当然,你可以删除一些冗余文件)

最终study_plugin文件夹的目录结构如下:

└─study_plugin
+    │  src
+    │  target
+    │  Cargo.lock
+    │  Cargo.toml
+    │  metadata.json
+    │  plugin.exe
+    └─lib
+

让我们打开metadata.json进行最后的编写:

{
+    "id": "study_plugin",
+    "version": "0.0.1",
+    "name": "StudyPlugin",
+    "description": "一个基础教程插件",
+    "author": ["天机"],
+    "link": "hiper.ink",
+    "dependencies": {
+    },
+    "command": "./plugin",
+    "args": [],
+    "type": "gRPC",
+    "root": false,
+    "color": "#93d5dc",
+    "icon": "mdi-book",
+    "frontend": {
+        "ui": true,
+        "configuration": true
+    }
+}
+

以上所有东西您都能改!我们写入了软件的启动命令./plugin

回到HiperLink,查看并开启我们的插件。

HiperLink插件界面

+ + + diff --git a/PluginDocs/Web/Back.html b/PluginDocs/Web/Back.html new file mode 100644 index 0000000..5de64f7 --- /dev/null +++ b/PluginDocs/Web/Back.html @@ -0,0 +1,58 @@ + + + + + + + + + 后端 | HiperLink + + + + +

后端

无论是使用哪种语言编写的插件,都存在有Interaction事件。

该事件接收了上文所阐述的"function"字段,依据此字段可以进行交互。

其中json_text为返回的JSON文本。

func (API) Interaction(p string, function string) (string, error) {
+	var json_text = "";
+	switch function {
+	case "xxx":
+		//todo
+	}
+	return json_text, nil
+}
+
async fn interaction(
+    &self,
+    _request: Request<InteractionRequest>,
+) -> Result<Response<InteractionResponse>, Status> {
+    let mut json_text = "".to_string();
+
+	match &function as &str{
+        "xxx" => {
+			// todo
+		},
+
+		_ => {}
+	}
+
+    let reply = hiper_link::InteractionResponse {value : json_text.into()};
+    Ok(Response::new(reply))
+}
+
+ + + diff --git a/PluginDocs/Web/Interaction.html b/PluginDocs/Web/Interaction.html new file mode 100644 index 0000000..b25afcf --- /dev/null +++ b/PluginDocs/Web/Interaction.html @@ -0,0 +1,44 @@ + + + + + + + + + 交互 | HiperLink + + + + +

交互

前文的HTML中可以加入JavaScriptHiperLink 添加了 HLInteraction 方法来进行后端与前端的交互。

HLInteraction 用法如下

HLInteraction("插件ID","方法名")
+

使用案例:

<script type="text/javascript">
+    var PluginID = 'study_plugin'
+    function init() {
+        HLInteraction(PluginID, 'something').then((result) => {
+            const obj = JSON.parse(result)
+			// 其中obj即为方法返回的json对象。
+        })
+    }
+    window.onload = init()
+</script>
+
+ + + diff --git a/PluginDocs/Web/index.html b/PluginDocs/Web/index.html new file mode 100644 index 0000000..bb8021b --- /dev/null +++ b/PluginDocs/Web/index.html @@ -0,0 +1,172 @@ + + + + + + + + + 前端 | HiperLink + + + + +

前端

对于每个插件,在其文件夹下都有src子文件夹,此文件夹内部有两个文件:index.htmlconfig.html

  • index.html 为插件页面的入口点
  • config.html 为插件的配置页面

编写插件页面需要你有基本的HTMLJavaScript知识,HiperLink内置了Vuetifyopen in new window 框架,因此您可以直接开始!

以下是一个用于范例的index.html页面代码:

<div class="v-container">
+  <div class="v-row">
+    <div class="v-col-sm-7 v-col-12">
+      <div class="v-card v-card--flat v-theme--light v-card--density-default v-card--variant-elevated" style="background-color: rgb(242, 245, 254); border-radius: 12px; margin-top: -8px;">
+        <div class="v-card-title" style="margin-top: 12px;">
+          <strong>这是一个卡片</strong>
+          <div class="v-card-text">
+            <div style="overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 7; -webkit-box-orient: vertical;">
+              <div class="v-input v-input--horizontal v-input--density-default v-text-field">
+                <div class="v-input__control">
+                  <div class="v-field v-field--active v-field--has-background v-field--variant-filled v-theme--light" role="textbox" style="background-color: rgb(242, 245, 254);">
+                    <div class="v-field__overlay">
+                    </div>
+                    <div class="v-field__loader">
+                      <div class="v-progress-linear v-theme--light" role="progressbar" aria-hidden="true" aria-valuemin="0" aria-valuemax="100" style="height: 0px; --v-progress-linear-height:2px;">
+                        <div class="v-progress-linear__background bg-info" style="width: 100%;">
+                        </div>
+                        <div class="v-progress-linear__indeterminate">
+                          <div class="v-progress-linear__indeterminate long bg-info">
+                          </div>
+                          <div class="v-progress-linear__indeterminate short bg-info">
+                          </div>
+                        </div>
+                      </div>
+                    </div>
+                    <div class="v-field__field" data-no-activator="">
+                      <label class="v-label v-field-label v-field-label--floating" aria-hidden="true" for="input-887">这是一个输入框</label>
+                      <input size="1" type="text" id="otherip" class="v-field__input">
+                    </div>
+                    <div class="v-field__outline">
+                    </div>
+                  </div>
+                </div>
+                <div class="v-input__details">
+                  <div class="v-messages">
+                  </div>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="v-card-actions" style="margin-top: -24px;">
+            <div style="float: right;">
+              <button type="button" onclick="" class="v-btn v-theme--light text-info v-btn--density-default v-btn--size-default v-btn--variant-text" style="font-size: 16px;">
+                <span class="v-btn__overlay">
+                </span>
+                <span class="v-btn__underlay">
+                </span>
+                <span class="v-btn__content" data-no-activator="">一个小按钮</span>
+              </button>
+            </div>
+          </div>
+          <span class="v-card__underlay">
+          </span>
+        </div>
+      </div>
+    </div>
+    <div class="v-col-sm-5 v-col-12">
+      <div class="v-card v-card--flat v-theme--light v-card--density-default v-card--variant-elevated" style="background-color: rgb(242, 245, 254); border-radius: 12px; margin-top: -8px;">
+        <div class="v-card__loader">
+          <div class="v-progress-linear v-theme--light" role="progressbar" aria-hidden="true" aria-valuemin="0" aria-valuemax="100" style="height: 0px; --v-progress-linear-height:2px;">
+            <div class="v-progress-linear__background" style="width: 100%;">
+            </div>
+            <div class="v-progress-linear__indeterminate">
+              <div class="v-progress-linear__indeterminate long">
+              </div>
+              <div class="v-progress-linear__indeterminate short">
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="v-card-title" style="margin-top: 12px;">
+          <strong>这是另一个卡片</strong>
+          <div style="margin-top: 4px;font-size: 1px;">一些简单的注释,下面是一个列表</div>
+        </div>
+        <div class="v-card-text">
+          <div class="v-table v-theme--light v-table--density-compact">
+            <div class="v-table__wrapper">
+              <table>
+                <tbody>
+                  <tr>
+                    <td>1</td>
+                    <td>
+                      <span class="v-chip v-theme--light text-info v-chip--density-default v-chip--size-x-small v-chip--variant-tonal" draggable="false" id="version-rustdesk">1
+                        <span class="v-chip__underlay"></span>
+                      </span>
+                    </td>
+                  </tr>
+                  <tr>
+                    <td>11</td>
+                    <td>
+                      <span class="v-chip v-theme--light text-info v-chip--density-default v-chip--size-x-small v-chip--variant-tonal" draggable="false" id="ip">2
+                        <span class="v-chip__underlay"></span>
+                      </span>
+                    </td>
+                  </tr>
+                  <tr>
+                    <td>111</td>
+                    <td>
+                      <span class="v-chip v-theme--light text-info v-chip--density-default v-chip--size-x-small v-chip--variant-tonal" draggable="false" id="password">3
+                        <span class="v-chip__underlay"></span>
+                      </span>
+                    </td>
+                  </tr>
+                  <tr>
+                    <td>1111</td>
+                    <td>
+                      <span class="v-chip v-theme--light text-info v-chip--density-default v-chip--size-x-small v-chip--variant-tonal" draggable="false" id="password">4
+                        <span class="v-chip__underlay"></span>
+                      </span>
+                    </td>
+                  </tr>
+                  <tr>
+                    <td>1111</td>
+                    <td>
+                      <span class="v-chip v-theme--light text-info v-chip--density-default v-chip--size-x-small v-chip--variant-tonal" draggable="false" id="password">5
+                        <span class="v-chip__underlay"></span>
+                      </span>
+                    </td>
+                  </tr>
+                </tbody>
+              </table>
+            </div>
+          </div>
+        </div>
+        <span class="v-card__underlay">
+        </span>
+      </div>
+      <a class="v-btn v-btn--block v-theme--light v-btn--density-default rounded-xl v-btn--size-x-large v-btn--variant-tonal" style="color: rgb(106, 164, 255); caret-color: rgb(106, 164, 255); margin-top: 16px;" onclick="" id="actionButton">
+        <span class="v-btn__overlay">
+        </span>
+        <span class="v-btn__underlay">
+        </span>
+        <span class="v-btn__content" data-no-activator="">
+          <strong id="action">一个大按钮</strong>
+        </span>
+      </a>
+    </div>
+  </div>
+</div>
+

效果如下: Example

+ + + diff --git a/PluginDocs/index.html b/PluginDocs/index.html new file mode 100644 index 0000000..27362e8 --- /dev/null +++ b/PluginDocs/index.html @@ -0,0 +1,33 @@ + + + + + + + + + 简介 | HiperLink + + + + +

简介

注意

HiperLink仍然在测试阶段,此文档可能随时变更。

HiperLink插件(以下简称插件)可以使用任何支持netRPC或gRPC通讯的语言编写。

我们建议你使用Golang进行插件开发。

提示

net/rpc只有Golang支持,所以本文档会优先注重多语言支持的gRPC库。

gRPC在理论上支持C/C++C#DartGoJavaKotlinNode.jsObjective-CPHPPythonRuby等语言。

HiperLink 需要支持多平台,你所选用的语言应该尽可能的支持更多平台,因此Objective-CPHP等选项被不幸的排除在外了。

如果你准备好了,那让我们开始吧!

+ + + diff --git a/PluginMarket/index.html b/PluginMarket/index.html new file mode 100644 index 0000000..bfe5bbd --- /dev/null +++ b/PluginMarket/index.html @@ -0,0 +1,33 @@ + + + + + + + + + HiperLink + + + + +

插件市场

提示

插件市场正在建设中...

+ + + diff --git a/assets/404.html-ceb4942b.js b/assets/404.html-ceb4942b.js new file mode 100644 index 0000000..fc2ffdb --- /dev/null +++ b/assets/404.html-ceb4942b.js @@ -0,0 +1 @@ +import{_ as e,p as t,q as _}from"./framework-cc651620.js";const c={};function r(n,o){return t(),_("div")}const a=e(c,[["render",r],["__file","404.html.vue"]]);export{a as default}; diff --git a/assets/404.html-f9875e7b.js b/assets/404.html-f9875e7b.js new file mode 100644 index 0000000..5a0b8de --- /dev/null +++ b/assets/404.html-f9875e7b.js @@ -0,0 +1 @@ +const t=JSON.parse('{"key":"v-3706649a","path":"/404.html","title":"","lang":"zh-CN","frontmatter":{"layout":"NotFound"},"headers":[],"git":{},"filePathRelative":null}');export{t as data}; diff --git a/assets/Back.html-42e4d89e.js b/assets/Back.html-42e4d89e.js new file mode 100644 index 0000000..7a9923d --- /dev/null +++ b/assets/Back.html-42e4d89e.js @@ -0,0 +1 @@ +const e=JSON.parse('{"key":"v-f0b20222","path":"/PluginDocs/Web/Back.html","title":"后端","lang":"zh-CN","frontmatter":{},"headers":[],"git":{"updatedTime":1675256121000,"contributors":[{"name":"Ceyase","email":"jjcyf@foxmail.com","commits":1}]},"filePathRelative":"PluginDocs/Web/Back.md"}');export{e as data}; diff --git a/assets/Back.html-df0fa5cb.js b/assets/Back.html-df0fa5cb.js new file mode 100644 index 0000000..ac1d227 --- /dev/null +++ b/assets/Back.html-df0fa5cb.js @@ -0,0 +1,26 @@ +import{_ as n,p as s,q as a,a1 as t}from"./framework-cc651620.js";const p={},o=t(`

后端

无论是使用哪种语言编写的插件,都存在有Interaction事件。

该事件接收了上文所阐述的"function"字段,依据此字段可以进行交互。

其中json_text为返回的JSON文本。

func (API) Interaction(p string, function string) (string, error) {
+	var json_text = "";
+	switch function {
+	case "xxx":
+		//todo
+	}
+	return json_text, nil
+}
+
async fn interaction(
+    &self,
+    _request: Request<InteractionRequest>,
+) -> Result<Response<InteractionResponse>, Status> {
+    let mut json_text = "".to_string();
+
+	match &function as &str{
+        "xxx" => {
+			// todo
+		},
+
+		_ => {}
+	}
+
+    let reply = hiper_link::InteractionResponse {value : json_text.into()};
+    Ok(Response::new(reply))
+}
+
`,6),e=[o];function c(l,u){return s(),a("div",null,e)}const i=n(p,[["render",c],["__file","Back.html.vue"]]);export{i as default}; diff --git a/assets/CSharp.html-388a67b2.js b/assets/CSharp.html-388a67b2.js new file mode 100644 index 0000000..45b4174 --- /dev/null +++ b/assets/CSharp.html-388a67b2.js @@ -0,0 +1,5 @@ +import{_ as s,M as r,p as a,q as c,R as e,t,N as o}from"./framework-cc651620.js";const l={},i=e("h1",{id:"c-net",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#c-net","aria-hidden":"true"},"#"),t(" C#/.NET")],-1),d={class:"custom-container tip"},_=e("p",{class:"custom-container-title"},"提示",-1),u={href:"https://learn.microsoft.com/zh-cn/aspnet/core/grpc/",target:"_blank",rel:"noopener noreferrer"},p={href:"https://code.visualstudio.com/download",target:"_blank",rel:"noopener noreferrer"},h={href:"https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csharp",target:"_blank",rel:"noopener noreferrer"},m=e("div",{class:"custom-container warning"},[e("p",{class:"custom-container-title"},"注意"),e("p",null,"本教程假定用户熟悉 VS Code。")],-1),g=e("p",null,[t("请打开"),e("code",null,"终端"),t(",然后CD到study_plugin文件夹,输入以下命令生成工程。")],-1),f=e("div",{class:"language-terminal","data-ext":"terminal"},[e("pre",{class:"language-terminal"},[e("code",null,`cd \\HiperLink\\plugins\\study_plugin +dotnet new grpc -o StudyPlugin +cd StudyPlugin +dotnet dev-certs https --trust +`)])],-1),k=e("p",null,"让我们打开工程。",-1);function v(C,x){const n=r("ExternalLinkIcon");return a(),c("div",null,[i,e("div",d,[_,e("p",null,[t("参考文档:"),e("a",u,[t(".NET 上的 gRPC 概述"),o(n)])]),e("p",null,[t("本教程基于"),e("a",p,[t("Visual Studio Code"),o(n)]),t("与"),e("a",h,[t("C#插件"),o(n)]),t("进行编写。")]),m]),g,f,k])}const S=s(l,[["render",v],["__file","CSharp.html.vue"]]);export{S as default}; diff --git a/assets/CSharp.html-3c53f8ae.js b/assets/CSharp.html-3c53f8ae.js new file mode 100644 index 0000000..51e94ce --- /dev/null +++ b/assets/CSharp.html-3c53f8ae.js @@ -0,0 +1 @@ +const a=JSON.parse('{"key":"v-792a752a","path":"/PluginDocs/HelloWorld/CSharp.html","title":"C#/.NET","lang":"zh-CN","frontmatter":{},"headers":[],"git":{"updatedTime":1673794907000,"contributors":[{"name":"Harry-zklcdc","email":"1269158832@qq.com","commits":1}]},"filePathRelative":"PluginDocs/HelloWorld/CSharp.md"}');export{a as data}; diff --git a/assets/Example.html-4110fdf6.js b/assets/Example.html-4110fdf6.js new file mode 100644 index 0000000..fdee07e --- /dev/null +++ b/assets/Example.html-4110fdf6.js @@ -0,0 +1 @@ +import{_ as t,p as n,q as i,R as e,t as s}from"./framework-cc651620.js";const o="/img/PluginDocs/Start-1.png",r={},c=e("h1",{id:"你好-hiperlink",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#你好-hiperlink","aria-hidden":"true"},"#"),s(" 你好,HiperLink")],-1),_=e("p",null,"command 将会在后面的教程中填写,现在让我们打开 HiperLink,看看插件是否能被识别。",-1),a=e("p",null,[e("img",{src:o,alt:"HiperLink插件界面",title:"HiperLink插件界面"})],-1),l=e("p",null,"看起来很不错,但是需要注意:该插件还无法启动,因为我们没有编写插件的本体:程序。",-1),p=e("p",null,"现在请看向左侧的“你好,世界!”条目,寻找你所使用的语言。",-1),d=[c,_,a,l,p];function h(m,u){return n(),i("div",null,d)}const k=t(r,[["render",h],["__file","Example.html.vue"]]);export{k as default}; diff --git a/assets/Example.html-d5941944.js b/assets/Example.html-d5941944.js new file mode 100644 index 0000000..3860259 --- /dev/null +++ b/assets/Example.html-d5941944.js @@ -0,0 +1 @@ +const a=JSON.parse('{"key":"v-2dc44d58","path":"/PluginDocs/Basic/Example.html","title":"你好,HiperLink","lang":"zh-CN","frontmatter":{},"headers":[],"git":{"updatedTime":1673830380000,"contributors":[{"name":"Harry-zklcdc","email":"1269158832@qq.com","commits":1}]},"filePathRelative":"PluginDocs/Basic/Example.md"}');export{a as data}; diff --git a/assets/Format.html-acc722f4.js b/assets/Format.html-acc722f4.js new file mode 100644 index 0000000..2f1f32d --- /dev/null +++ b/assets/Format.html-acc722f4.js @@ -0,0 +1,8 @@ +import{_ as e,p as o,q as t,a1 as c}from"./framework-cc651620.js";const d={},n=c(`

插件目录格式

插件的基本组织形式为文件夹,一个文件夹即为一个插件。

插件所需要用到的一切都可以放进这个文件夹中。

现在,让我们制作一个名为StudyPlugin的插件。

首先我们需要一个唯一ID,这将会成为你插件的标志。在这里我们将StudyPlugin的唯一ID设定为study_plugin

然后我们需要进行三步:

  1. 创建一个名为 study_plugin 的文件夹

  2. 在文件夹中创建 metadata.json 文件

  3. 将文件夹移动到HiperLink下的plugins文件夹(如果没有就新建)

目录在此时应该是这样的:

│ HiperLink.exe
+├─config
+├─libs        
+├─logs
+└─plugins
+    ├─study_plugin
+        ├─metadata.json
+
`,9),a=[n];function i(l,p){return o(),t("div",null,a)}const r=e(d,[["render",i],["__file","Format.html.vue"]]);export{r as default}; diff --git a/assets/Format.html-f770cc78.js b/assets/Format.html-f770cc78.js new file mode 100644 index 0000000..518adf5 --- /dev/null +++ b/assets/Format.html-f770cc78.js @@ -0,0 +1 @@ +const t=JSON.parse('{"key":"v-03604679","path":"/PluginDocs/Basic/Format.html","title":"插件目录格式","lang":"zh-CN","frontmatter":{},"headers":[],"git":{"updatedTime":1673794907000,"contributors":[{"name":"Harry-zklcdc","email":"1269158832@qq.com","commits":1}]},"filePathRelative":"PluginDocs/Basic/Format.md"}');export{t as data}; diff --git a/assets/Go.html-3fa1af93.js b/assets/Go.html-3fa1af93.js new file mode 100644 index 0000000..77f91cf --- /dev/null +++ b/assets/Go.html-3fa1af93.js @@ -0,0 +1,147 @@ +import{_ as n}from"./Start-2-98e843d2.js";import{_ as s,p as a,q as t,a1 as p}from"./framework-cc651620.js";const o={},c=p(`

Golang

由于 HiperLink 就是由 Golang 编写的软件,使用 Golang 开发插件变得极度简单。

在本案例中,我们将会编写一个在加载插件时弹出Hello World!弹窗的插件。

study_plugin 文件夹中进入终端,输入以下命令初始化工程并设置依赖:

go mod init study_plugin
+go get github.com/Hiper-Link/go-plugin
+go get github.com/Hiper-Link/plugin-libs/shared
+

新建 plugin.go 文件,在其中编写以下示例代码

package main
+
+import (
+	"github.com/Hiper-Link/go-plugin"
+	"github.com/Hiper-Link/plugin-libs/shared"
+)
+
+var Handshake = plugin.HandshakeConfig{
+	ProtocolVersion:  1,
+	MagicCookieKey:   "study_plugin", // 此处为你的插件ID
+	MagicCookieValue: "Hello, HiperLink",
+}
+
+type API struct{}
+
+// 加载插件
+func (API) OnLoad(p string) ([]byte, error) {
+	return nil, nil
+}
+
+// 停用插件
+func (API) OnUnload(p string) ([]byte, error) {
+	return nil, nil
+}
+
+// 安装插件
+func (API) OnInstall(p string) ([]byte, error) {
+	return nil, nil
+}
+
+// 卸载插件
+func (API) OnUninstall(p string) ([]byte, error) {
+	return nil, nil
+}
+
+// HL 启动
+func (API) OnStart(p string) ([]byte, error) {
+	return nil, nil
+}
+
+// HL 停止
+func (API) OnStop(p string) ([]byte, error) {
+	return nil, nil
+}
+
+// 前后端交互
+func (API) Interaction(p string, function string) (string, error) {
+	return function, nil
+}
+
+func main() {
+	plugin.Serve(&plugin.ServeConfig{
+		HandshakeConfig: Handshake,
+		Plugins: map[string]plugin.Plugin{
+			"grpc": &shared.GRPCPlugin{Impl: &API{}},
+		},
+		NetworkType: "tcp",
+		GRPCServer: plugin.DefaultGRPCServer,
+	})
+}
+

你可以随意扩展本代码,HiperLink中的相关操作将会触发类似于OnLoad的回调事件。

注意

OnInstallOnUninstall暂不可用。

我们将会在import中引入walk,在OnLoad中写入弹窗代码:

  1. 使用终端命令go get github.com/lxn/walk设置依赖
  2. OnLoad下写入walk.MsgBox(nil, "StudyPlugin", "HelloWorld!", walk.MsgBoxIconInformation)

完整代码如下:

package main
+
+import (
+	"github.com/Hiper-Link/go-plugin"
+	"github.com/Hiper-Link/plugin-libs/shared"
+	"github.com/lxn/walk"
+)
+
+var Handshake = plugin.HandshakeConfig{
+	ProtocolVersion:  1,
+	MagicCookieKey:   "study_plugin",
+	MagicCookieValue: "Hello, HiperLink",
+}
+
+type API struct{}
+
+// 加载插件
+func (API) OnLoad(p string) ([]byte, error) {
+	walk.MsgBox(nil, "StudyPlugin", "HelloWorld!", walk.MsgBoxIconInformation)
+	return nil, nil
+}
+
+// 停用插件
+func (API) OnUnload(p string) ([]byte, error) {
+	return nil, nil
+}
+
+// 安装插件
+func (API) OnInstall(p string) ([]byte, error) {
+	return nil, nil
+}
+
+// 卸载插件
+func (API) OnUninstall(p string) ([]byte, error) {
+	return nil, nil
+}
+
+// HL 启动
+func (API) OnStart(p string) ([]byte, error) {
+	return nil, nil
+}
+
+// HL 停止
+func (API) OnStop(p string) ([]byte, error) {
+	return nil, nil
+}
+
+// 前后端交互
+func (API) Interaction(p string, function string) (string, error) {
+	return function, nil
+}
+
+func main() {
+	plugin.Serve(&plugin.ServeConfig{
+		HandshakeConfig: Handshake,
+		Plugins: map[string]plugin.Plugin{
+			"grpc": &shared.GRPCPlugin{Impl: &API{}},
+		},
+		NetworkType: "tcp",
+		GRPCServer: plugin.DefaultGRPCServer,
+	})
+}
+

最后,我们编译该代码:

go build plugin.go
+

在study_plugin文件夹下将会生成一个名为plugin的二进制可执行文件。

让我们打开metadata.json进行最后的编写:

{
+    "id": "study_plugin",
+    "version": "0.0.1",
+    "name": "StudyPlugin",
+    "description": "一个基础教程插件",
+    "author": ["天机"],
+    "link": "hiper.ink",
+    "dependencies": {
+    },
+    "command": "./plugin",
+    "args": [],
+    "type": "gRPC",
+    "root": false,
+    "color": "#93d5dc",
+    "icon": "mdi-book",
+    "frontend": {
+        "ui": true,
+        "configuration": true
+    }
+}
+

以上所有东西您都能改!我们写入了软件的启动命令./plugin

回到HiperLink,查看并开启我们的插件。

HiperLink插件界面

',21),e=[c];function u(l,i){return a(),t("div",null,e)}const d=s(o,[["render",u],["__file","Go.html.vue"]]);export{d as default}; diff --git a/assets/Go.html-4c263677.js b/assets/Go.html-4c263677.js new file mode 100644 index 0000000..fc8725e --- /dev/null +++ b/assets/Go.html-4c263677.js @@ -0,0 +1 @@ +const e=JSON.parse('{"key":"v-391dc22c","path":"/PluginDocs/HelloWorld/Go.html","title":"Golang","lang":"zh-CN","frontmatter":{},"headers":[],"git":{"updatedTime":1675256121000,"contributors":[{"name":"Harry-zklcdc","email":"1269158832@qq.com","commits":2},{"name":"Ceyase","email":"jjcyf@foxmail.com","commits":1}]},"filePathRelative":"PluginDocs/HelloWorld/Go.md"}');export{e as data}; diff --git a/assets/Interaction.html-54fa1a8f.js b/assets/Interaction.html-54fa1a8f.js new file mode 100644 index 0000000..4e39b4e --- /dev/null +++ b/assets/Interaction.html-54fa1a8f.js @@ -0,0 +1,12 @@ +import{_ as n,p as a,q as s,a1 as t}from"./framework-cc651620.js";const p={},o=t(`

交互

前文的HTML中可以加入JavaScriptHiperLink 添加了 HLInteraction 方法来进行后端与前端的交互。

HLInteraction 用法如下

HLInteraction("插件ID","方法名")
+

使用案例:

<script type="text/javascript">
+    var PluginID = 'study_plugin'
+    function init() {
+        HLInteraction(PluginID, 'something').then((result) => {
+            const obj = JSON.parse(result)
+			// 其中obj即为方法返回的json对象。
+        })
+    }
+    window.onload = init()
+</script>
+
`,6),c=[o];function e(u,l){return a(),s("div",null,c)}const k=n(p,[["render",e],["__file","Interaction.html.vue"]]);export{k as default}; diff --git a/assets/Interaction.html-b7586d71.js b/assets/Interaction.html-b7586d71.js new file mode 100644 index 0000000..1c99cbb --- /dev/null +++ b/assets/Interaction.html-b7586d71.js @@ -0,0 +1 @@ +const e=JSON.parse('{"key":"v-7fade8ca","path":"/PluginDocs/Web/Interaction.html","title":"交互","lang":"zh-CN","frontmatter":{},"headers":[],"git":{"updatedTime":1675256121000,"contributors":[{"name":"Ceyase","email":"jjcyf@foxmail.com","commits":1}]},"filePathRelative":"PluginDocs/Web/Interaction.md"}');export{e as data}; diff --git a/assets/Metadata.html-0350df2c.js b/assets/Metadata.html-0350df2c.js new file mode 100644 index 0000000..6f2d84c --- /dev/null +++ b/assets/Metadata.html-0350df2c.js @@ -0,0 +1,44 @@ +import{_ as e,M as p,p as r,q as c,R as n,t as a,N as t,a1 as o}from"./framework-cc651620.js";const l={},d=o(`

插件元数据

此时你的插件还无法被识别,因为我们需要编写metadata.json的内容。

metadata.json 的基础模板如下:

{
+    "id": "",
+    "version": "",
+    "name": "",
+    "description": "",
+    "author": [""],
+    "link": "",
+    "dependencies": {
+    },
+    "command": "",
+    "args": [],
+    "type": "gRPC",
+    "root": false,
+    "color": "",
+    "icon": "",
+    "frontend": {
+        "ui": true,
+        "configuration": true
+    }
+}
+

属性

id

ID(即插件 ID)是你插件的“身份证号”。

该值要与文件夹名称保持一致。

HiperLink 使用插件 ID 来区分不同的插件并检查插件间的依赖。 HiperLink 中加载的所有插件都应使用不同的插件 ID。如果新加载的插件具有与现有插件完全相同的插件 ID,则新插件将无法加载

请明智地选择你的插件 ID。强烈建议你在发布插件后不要再更改插件 ID

注意

小心可能的包名冲突。非常不推荐为你的插件取一个与标准库 / 第三方库名相同的 id,如 test,否则 HiperLink 很可能无法正确地加载你的插件

version

`,14),i={href:"https://semver.org/lang/zh-CN/",target:"_blank",rel:"noopener noreferrer"},u=o(`

name

你的插件名称——给你的插件起一个好听的名字吧

尽量不要使插件名称太长。你可以把插件的详细信息放在 description 之中

description

你的插件描述。在这里写下你的插件的功能总结吧

author

插件作者。该值为数组,可以容纳多个作者

你的插件的网址。你可以将其指向插件的 github 链接。它的值应为一个可访问的网址

dependencies

该字段描述了你插件的依赖,这是一个例子:

"dependencies": {
+        "HiperLink": ">=0.2.6"
+}
+

键值为依赖的插件ID,HiperLink的ID就是HiperLink。右侧为版本运算符。

运算符详情可见此表格。

运算符示例解释允许的值不允许的值
>=>=1.2.3目标版本应大于等于1.2.31.2.3,1.3.01.2.0
>>1.2.3目标版本应大于1.2.31.2.4,1.3.01.2.0,1.2.3
<=<=1.2.3目标版本应小于等于1.2.31.2.3,1.1.01.2.4,2.0.0
<<1.2.3目标版本应小于1.2.31.1.01.2.3,1.5
==1.2.3目标版本应等于1.2.31.2.31.2,1.2.4
1.2.3目标版本应等于1.2.31.2.31.2,1.2.4
^^1.2.3目标版本应大于等于1.2.3,且目标版本的第一个版本分段等于运算版本。1.2.3,1.2.4,1.4.41.0.0,2.0.0
~~1.2.3目标版本应大于等于1.2.3,且目标版本的第一个和第二个版本分段等于运算版本。1.2.3,1.2.41.0.0,1.4.4,2.0.0

command

插件的运行指令,如./pluginpython plugin.pyjava -jar plugin.jar等。

args

插件的指令参数

type

插件与HiperLink通信方式,目前可选的值只有gRPCnetRPC

root

插件是否需要使用管理员权限运行

color

`,34),k={href:"http://zhongguose.com",target:"_blank",rel:"noopener noreferrer"},h=n("h3",{id:"icon",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#icon","aria-hidden":"true"},"#"),a(" icon")],-1),q=n("ul",null,[n("li",null,[a("字段键名:"),n("code",null,"icon")]),n("li",null,[a("字段类型:"),n("code",null,"string")])],-1),g=n("code",null,"mdi-",-1),f={href:"https://materialdesignicons.com/",target:"_blank",rel:"noopener noreferrer"},y=n("code",null,"mdi-user-arrow-left-outline",-1),m=o(`

frontend.ui

是否显示插件页面

frontend.configuration

是否显示配置页面

实例

在本案例中,metadata.json的内容应该是:

{
+    "id": "study_plugin",
+    "version": "0.0.1",
+    "name": "StudyPlugin",
+    "description": "一个基础教程插件",
+    "author": ["天机"],
+    "link": "hiper.ink",
+    "dependencies": {
+    },
+    "command": "",
+    "args": [],
+    "type": "gRPC",
+    "root": false,
+    "color": "#93d5dc",
+    "icon": "mdi-book",
+    "frontend": {
+        "ui": true,
+        "configuration": true
+    }
+}
+
`,9);function _(b,x){const s=p("ExternalLinkIcon");return r(),c("div",null,[d,n("p",null,[a("version 字段代表你的插件版本。它基本上采用了 "),n("a",i,[a("语义化版本"),t(s)]),a(" 的格式,不过限制较少,如你可以定义任意长度的版本号")]),u,n("p",null,[a("插件图标的颜色,为十六进制颜色码(#FFFFFF)和RGB颜色码()。颜色的选择可以参考"),n("a",k,[a("中国色"),t(s)])]),h,q,n("p",null,[a("插件图标,该值为"),g,a(" + "),n("a",f,[a("Material Design Icons"),t(s)]),a("上的所有可选图标代码,如"),y]),m])}const j=e(l,[["render",_],["__file","Metadata.html.vue"]]);export{j as default}; diff --git a/assets/Metadata.html-aa88d8d2.js b/assets/Metadata.html-aa88d8d2.js new file mode 100644 index 0000000..1aa2fb2 --- /dev/null +++ b/assets/Metadata.html-aa88d8d2.js @@ -0,0 +1 @@ +const l=JSON.parse('{"key":"v-09a21481","path":"/PluginDocs/Basic/Metadata.html","title":"插件元数据","lang":"zh-CN","frontmatter":{},"headers":[{"level":2,"title":"属性","slug":"属性","link":"#属性","children":[{"level":3,"title":"id","slug":"id","link":"#id","children":[]},{"level":3,"title":"version","slug":"version","link":"#version","children":[]},{"level":3,"title":"name","slug":"name","link":"#name","children":[]},{"level":3,"title":"description","slug":"description","link":"#description","children":[]},{"level":3,"title":"author","slug":"author","link":"#author","children":[]},{"level":3,"title":"link","slug":"link","link":"#link","children":[]},{"level":3,"title":"dependencies","slug":"dependencies","link":"#dependencies","children":[]},{"level":3,"title":"command","slug":"command","link":"#command","children":[]},{"level":3,"title":"args","slug":"args","link":"#args","children":[]},{"level":3,"title":"type","slug":"type","link":"#type","children":[]},{"level":3,"title":"root","slug":"root","link":"#root","children":[]},{"level":3,"title":"color","slug":"color","link":"#color","children":[]},{"level":3,"title":"icon","slug":"icon","link":"#icon","children":[]},{"level":3,"title":"frontend.ui","slug":"frontend-ui","link":"#frontend-ui","children":[]},{"level":3,"title":"frontend.configuration","slug":"frontend-configuration","link":"#frontend-configuration","children":[]}]},{"level":2,"title":"实例","slug":"实例","link":"#实例","children":[]}],"git":{"updatedTime":1675256121000,"contributors":[{"name":"Harry-zklcdc","email":"1269158832@qq.com","commits":2},{"name":"Ceyase","email":"jjcyf@foxmail.com","commits":1}]},"filePathRelative":"PluginDocs/Basic/Metadata.md"}');export{l as data}; diff --git a/assets/Python.html-0b3dfca9.js b/assets/Python.html-0b3dfca9.js new file mode 100644 index 0000000..1f37456 --- /dev/null +++ b/assets/Python.html-0b3dfca9.js @@ -0,0 +1 @@ +const t=JSON.parse('{"key":"v-83a0a214","path":"/PluginDocs/HelloWorld/Python.html","title":"Python","lang":"zh-CN","frontmatter":{},"headers":[],"git":{"updatedTime":1675256121000,"contributors":[{"name":"Harry-zklcdc","email":"1269158832@qq.com","commits":2},{"name":"Ceyase","email":"jjcyf@foxmail.com","commits":1}]},"filePathRelative":"PluginDocs/HelloWorld/Python.md"}');export{t as data}; diff --git a/assets/Python.html-e29369ba.js b/assets/Python.html-e29369ba.js new file mode 100644 index 0000000..2067369 --- /dev/null +++ b/assets/Python.html-e29369ba.js @@ -0,0 +1,167 @@ +import{_ as n}from"./Start-2-98e843d2.js";import{_ as s,p as a,q as p,a1 as t}from"./framework-cc651620.js";const o={},e=t(`

Python

提示

笔者使用的Python版本为3.10.9,因此一切操作均以此为准。

版本要求 Python 3.5 或更高版本。

在本案例中,我们将会编写一个在加载插件时弹出Hello World!弹窗的插件。

让我们进入终端,输入以下命令来设置依赖:

pip install grpcio
+pip install grpcio-tools
+

Python插件开发需要模板,请点击此处下载模板,然后将模板解压至study_plugin文件夹。

此时study_plugin的内部文件结构如下:

└─study_plugin
+    health_pb2.py
+    health_pb2_grpc.py
+    hiperlink_pb2.py
+    hiperlink_pb2_grpc.py
+    metadata.json
+    plugin.py
+

我们开发的核心工作主要集中在plugin.py,在此基础上你可以加入任何文件到此文件夹。

plugin.py的内部代码如下:

# 本模板由天机Ceyase编写,基于MIT许可证开源
+import hiperlink_pb2
+import hiperlink_pb2_grpc
+import health_pb2_grpc
+import grpc
+import concurrent.futures as futures
+import sys
+import time
+import random
+import socket
+
+class HiperLinkServicer(hiperlink_pb2_grpc.PluginServicer):
+
+    # 加载插件
+    def OnLoad(self, request, context):
+        return hiperlink_pb2.EventsResponse()
+
+    # 停用插件
+    def OnUnload(self, request, context):
+        return hiperlink_pb2.EventsResponse()
+
+    # 安装插件
+    def OnInstall(self, request, context):
+        return hiperlink_pb2.EventsResponse()
+
+    # 卸载插件
+    def OnUninstall(self, request, context):
+        return hiperlink_pb2.EventsResponse()
+
+    # HL 启动
+    def OnStart(self, request, context):
+        return hiperlink_pb2.EventsResponse()
+
+    # HL 停止
+    def OnStop(self, request, context):
+        return hiperlink_pb2.EventsResponse()
+
+    # 前后端交互
+    def Interaction(self, request, context):
+        return hiperlink_pb2.InteractionResponse()
+
+def get_free_port():
+    while True:
+        port = random.randint(32768, 61000)
+        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+        if not (sock.connect_ex(('127.0.0.1', port)) == 0):
+            return port 
+
+if __name__ == '__main__':
+    health = health_pb2_grpc.HealthServicer()
+    server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
+    hiperlink_pb2_grpc.add_PluginServicer_to_server(HiperLinkServicer(), server)
+    health_pb2_grpc.add_HealthServicer_to_server(health, server)
+    port = get_free_port()
+    server.add_insecure_port(f'127.0.0.1:{port}')
+    server.start()
+    print(f"1|1|tcp|127.0.0.1:{port}|grpc")
+    sys.stdout.flush()
+    try:
+        while True:
+            time.sleep(60 * 60 * 24)
+    except KeyboardInterrupt:
+        server.stop(0)
+

你可以随意扩展本代码,HiperLink中的相关操作将会触发类似于OnLoad的回调事件。

注意

OnInstallOnUninstall暂不可用。

本教程中,我们将会引入winapi,在OnLoad中写入弹窗代码:

  1. 使用终端命令pip install pywin32设置依赖
  2. 写入import win32api,win32con,在OnLoad下写入win32api.MessageBox(0,"HelloWorld!","StudyPlugin",win32con.MB_OK)

完整代码如下:

# 本模板由天机Ceyase编写,基于MIT许可证开源
+import hiperlink_pb2
+import hiperlink_pb2_grpc
+import health_pb2_grpc
+import grpc
+import concurrent.futures as futures
+import sys
+import time
+import random
+import socket
+import win32api,win32con
+
+class HiperLinkServicer(hiperlink_pb2_grpc.PluginServicer):
+
+    # 加载插件
+    def OnLoad(self, request, context):
+        win32api.MessageBox(0,"HelloWorld!","StudyPlugin",win32con.MB_OK)
+        return hiperlink_pb2.EventsResponse()
+
+    # 停用插件
+    def OnUnload(self, request, context):
+        return hiperlink_pb2.EventsResponse()
+
+    # 安装插件
+    def OnInstall(self, request, context):
+        return hiperlink_pb2.EventsResponse()
+
+    # 卸载插件
+    def OnUninstall(self, request, context):
+        return hiperlink_pb2.EventsResponse()
+
+    # HL 启动
+    def OnStart(self, request, context):
+        return hiperlink_pb2.EventsResponse()
+
+    # HL 停止
+    def OnStop(self, request, context):
+        return hiperlink_pb2.EventsResponse()
+
+    # 前后端交互
+    def Interaction(self, request, context):
+        return hiperlink_pb2.InteractionResponse()
+
+def get_free_port():
+    while True:
+        port = random.randint(32768, 61000)
+        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+        if not (sock.connect_ex(('127.0.0.1', port)) == 0):
+            return port 
+
+if __name__ == '__main__':
+    health = health_pb2_grpc.HealthServicer()
+    server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
+    hiperlink_pb2_grpc.add_PluginServicer_to_server(HiperLinkServicer(), server)
+    health_pb2_grpc.add_HealthServicer_to_server(health, server)
+    port = get_free_port()
+    server.add_insecure_port(f'127.0.0.1:{port}')
+    server.start()
+    print(f"1|1|tcp|127.0.0.1:{port}|grpc")
+    sys.stdout.flush()
+    try:
+        while True:
+            time.sleep(60 * 60 * 24)
+    except KeyboardInterrupt:
+        server.stop(0)
+

让我们使用python plugin.py命令运行此py文件。

如果出现了1|1|tcp|127.0.0.1:xxxxx|grpc的输出,并且程序一直保持运行,那么该插件就可以进行下一步了。

为了照顾没有python的用户,你应该打包此插件!

目前尚不支持pyinstaller打包,我们推荐你使用cxfreeze打包。

study_plugin文件夹下输入此终端命令:

pip install cx_Freeze
+cxfreeze plugin.py
+

等待片刻,study_plugin文件夹下将会生成build文件夹,将其中的可执行文件移动到study_plugin文件夹(当然,你可以删除一些冗余文件)

最终study_plugin文件夹的目录结构如下:

└─study_plugin
+    │  metadata.json
+    │  plugin.exe
+    │  plugin.py
+    │  python3.dll
+    │  python310.dll
+    └─lib
+

让我们打开metadata.json进行最后的编写:

{
+    "id": "study_plugin",
+    "version": "0.0.1",
+    "name": "StudyPlugin",
+    "description": "一个基础教程插件",
+    "author": ["天机"],
+    "link": "hiper.ink",
+    "dependencies": {
+    },
+    "command": "./plugin",
+    "args": [],
+    "type": "gRPC",
+    "root": false,
+    "color": "#93d5dc",
+    "icon": "mdi-book",
+    "frontend": {
+        "ui": true,
+        "configuration": true
+    }
+}
+

以上所有东西您都能改!我们写入了软件的启动命令./plugin

回到HiperLink,查看并开启我们的插件。

HiperLink插件界面

',31),c=[e];function u(l,k){return a(),p("div",null,c)}const d=s(o,[["render",u],["__file","Python.html.vue"]]);export{d as default}; diff --git a/assets/Rust.html-b1948268.js b/assets/Rust.html-b1948268.js new file mode 100644 index 0000000..84793c6 --- /dev/null +++ b/assets/Rust.html-b1948268.js @@ -0,0 +1 @@ +const t=JSON.parse('{"key":"v-26ef11a4","path":"/PluginDocs/HelloWorld/Rust.html","title":"Rust","lang":"zh-CN","frontmatter":{},"headers":[],"git":{"updatedTime":1675256121000,"contributors":[{"name":"Ceyase","email":"jjcyf@foxmail.com","commits":2}]},"filePathRelative":"PluginDocs/HelloWorld/Rust.md"}');export{t as data}; diff --git a/assets/Rust.html-fd38a2dd.js b/assets/Rust.html-fd38a2dd.js new file mode 100644 index 0000000..9cf707c --- /dev/null +++ b/assets/Rust.html-fd38a2dd.js @@ -0,0 +1,286 @@ +import{_ as n}from"./Start-2-98e843d2.js";import{_ as s,p as a,q as p,a1 as t}from"./framework-cc651620.js";const o={},e=t(`

Rust

提示

笔者使用的rustc版本为1.66.0,因此一切操作均以此为准。

版本要求 Rust 1.39 或更高版本。

在本案例中,我们将会编写一个在加载插件时弹出Hello World!弹窗的插件。

让我们进入终端,输入以下命令来设置依赖:

rustup update
+rustup component add rustfmt
+

Rust插件开发需要模板,请点击此处下载模板,然后将模板解压至study_plugin文件夹。

此时study_plugin的内部文件结构如下:

└─study_plugin
+    metadata.json
+    Cargo.toml
+    └─src
+        main.rs
+        proto.rs
+

我们开发的入口点在main.rs,在此基础上你可以进行任何开发。

main.rs的内部代码如下:

// 本模板由天机Ceyase编写,基于MIT许可证开源
+use tonic::{transport::Server, Request, Response, Status};
+use std::net::TcpListener;
+
+use hiper_link::plugin_server::{Plugin, PluginServer};
+use hiper_link::{EventsRequest, EventsResponse, InteractionRequest, InteractionResponse};
+
+pub mod hiper_link {
+    include!("proto.rs");
+}
+
+#[derive(Debug, Default)]
+pub struct API {}
+
+#[tonic::async_trait]
+impl Plugin for API {
+
+    // 加载插件
+    async fn on_load(
+        &self,
+        _request: Request<EventsRequest>,
+    ) -> Result<Response<EventsResponse>, Status> {
+        let reply = hiper_link::EventsResponse {value : "1".into()};
+
+        Ok(Response::new(reply))
+    }
+
+    // 停用插件
+    async fn on_unload(
+        &self,
+        _request: Request<EventsRequest>,
+    ) -> Result<Response<EventsResponse>, Status> {
+        let reply = hiper_link::EventsResponse {value : "1".into()};
+
+        Ok(Response::new(reply))
+    }
+
+    // 安装插件
+    async fn on_install(
+        &self,
+        _request: Request<EventsRequest>,
+    ) -> Result<Response<EventsResponse>, Status> {
+        let reply = hiper_link::EventsResponse {value : "1".into()};
+
+        Ok(Response::new(reply))
+    }
+
+    // 卸载插件
+    async fn on_uninstall(
+        &self,
+        _request: Request<EventsRequest>,
+    ) -> Result<Response<EventsResponse>, Status> {
+        let reply = hiper_link::EventsResponse {value : "1".into()};
+
+        Ok(Response::new(reply))
+    }
+
+    // HL 启动
+    async fn on_start(
+        &self,
+        _request: Request<EventsRequest>,
+    ) -> Result<Response<EventsResponse>, Status> {
+        let reply = hiper_link::EventsResponse {value : "1".into()};
+
+        Ok(Response::new(reply))
+    }
+
+    // HL 停止
+    async fn on_stop(
+        &self,
+        _request: Request<EventsRequest>,
+    ) -> Result<Response<EventsResponse>, Status> {
+        let reply = hiper_link::EventsResponse {value : "1".into()};
+
+        Ok(Response::new(reply))
+    }
+
+    // 前后端交互
+    async fn interaction(
+        &self,
+        _request: Request<InteractionRequest>,
+    ) -> Result<Response<InteractionResponse>, Status> {
+
+        let reply = hiper_link::InteractionResponse {value : "1".into()};
+        Ok(Response::new(reply))
+    }
+}
+
+fn listen_available_port() -> Option<TcpListener> {
+    for port in 32768..61000 {
+         match TcpListener::bind(("127.0.0.1", port)) {
+             Ok(l) => return Some(l),
+             _ => {}
+         }
+    }
+    None
+}
+
+#[tokio::main]
+async fn main() -> Result<(), Box<dyn std::error::Error>> {
+
+    let addr_str = listen_available_port().unwrap().local_addr().unwrap().to_string();
+
+    let addr = addr_str.parse()?;
+    let plugin = API::default();
+
+    println!("1|1|tcp|{addr_str}|grpc");
+    Server::builder()
+        .add_service(PluginServer::new(plugin))
+        .serve(addr)
+        .await?;
+    Ok(())
+}
+

你可以随意扩展本代码,HiperLink中的相关操作将会触发类似于on_load的回调事件。

注意

on_installon_uninstall暂不可用。

提示

请记得在Cargo.toml中更改您的项目名称!

本教程中,我们将会引入user32,使用MessageBoxW函数进行弹窗:

  1. Cargo.toml的最后一行添加user32-sys = "0.2.0"
  2. 写入use user32::MessageBoxW;,在on_load下写入以下几行:
let lp_text: Vec<u16> = "Hello world!\\0".encode_utf16().collect();
+let lp_caption: Vec<u16> = "StudyPlugin\\0".encode_utf16().collect();
+
+unsafe {
+    MessageBoxW(
+        std::ptr::null_mut(),
+        lp_text.as_ptr(),
+        lp_caption.as_ptr(),
+        0
+        );
+    }
+

完整代码如下:

// 本模板由天机Ceyase编写,基于MIT许可证开源
+use tonic::{transport::Server, Request, Response, Status};
+use std::net::TcpListener;
+
+use hiper_link::plugin_server::{Plugin, PluginServer};
+use hiper_link::{EventsRequest, EventsResponse, InteractionRequest, InteractionResponse};
+
+use user32::MessageBoxW;
+pub mod hiper_link {
+    include!("proto.rs");
+}
+
+#[derive(Debug, Default)]
+pub struct API {}
+
+#[tonic::async_trait]
+impl Plugin for API {
+
+    // 加载插件
+    async fn on_load(
+        &self,
+        _request: Request<EventsRequest>,
+    ) -> Result<Response<EventsResponse>, Status> {
+        let reply = hiper_link::EventsResponse {value : "1".into()};
+
+        let lp_text: Vec<u16> = "Hello world!\\0".encode_utf16().collect();
+        let lp_caption: Vec<u16> = "StudyPlugin\\0".encode_utf16().collect();
+
+        unsafe {
+            MessageBoxW(
+            std::ptr::null_mut(),
+            lp_text.as_ptr(),
+            lp_caption.as_ptr(),
+            0
+            );
+        }
+        Ok(Response::new(reply))
+    }
+
+    // 停用插件
+    async fn on_unload(
+        &self,
+        _request: Request<EventsRequest>,
+    ) -> Result<Response<EventsResponse>, Status> {
+        let reply = hiper_link::EventsResponse {value : "1".into()};
+
+        Ok(Response::new(reply))
+    }
+
+    // 安装插件
+    async fn on_install(
+        &self,
+        _request: Request<EventsRequest>,
+    ) -> Result<Response<EventsResponse>, Status> {
+        let reply = hiper_link::EventsResponse {value : "1".into()};
+
+        Ok(Response::new(reply))
+    }
+
+    // 卸载插件
+    async fn on_uninstall(
+        &self,
+        _request: Request<EventsRequest>,
+    ) -> Result<Response<EventsResponse>, Status> {
+        let reply = hiper_link::EventsResponse {value : "1".into()};
+
+        Ok(Response::new(reply))
+    }
+
+    // HL 启动
+    async fn on_start(
+        &self,
+        _request: Request<EventsRequest>,
+    ) -> Result<Response<EventsResponse>, Status> {
+        let reply = hiper_link::EventsResponse {value : "1".into()};
+
+        Ok(Response::new(reply))
+    }
+
+    // HL 停止
+    async fn on_stop(
+        &self,
+        _request: Request<EventsRequest>,
+    ) -> Result<Response<EventsResponse>, Status> {
+        let reply = hiper_link::EventsResponse {value : "1".into()};
+
+        Ok(Response::new(reply))
+    }
+
+    // 前后端交互
+    async fn interaction(
+        &self,
+        _request: Request<InteractionRequest>,
+    ) -> Result<Response<InteractionResponse>, Status> {
+
+        let reply = hiper_link::InteractionResponse {value : "1".into()};
+        Ok(Response::new(reply))
+    }
+}
+
+fn listen_available_port() -> Option<TcpListener> {
+    for port in 32768..61000 {
+         match TcpListener::bind(("127.0.0.1", port)) {
+             Ok(l) => return Some(l),
+             _ => {}
+         }
+    }
+    None
+}
+
+#[tokio::main]
+async fn main() -> Result<(), Box<dyn std::error::Error>> {
+
+    let addr_str = listen_available_port().unwrap().local_addr().unwrap().to_string();
+
+    let addr = addr_str.parse()?;
+    let plugin = API::default();
+
+    println!("1|1|tcp|{addr_str}|grpc");
+    Server::builder()
+        .add_service(PluginServer::new(plugin))
+        .serve(addr)
+        .await?;
+    Ok(())
+}
+

让我们使用cargo run命令运行此工程。

如果出现了1|1|tcp|127.0.0.1:xxxxx|grpc的输出,并且程序一直保持运行,那么该插件就可以进行下一步了。

使用cargo build --release命令打包工程。

等待片刻,\\study_plugin\\target\\release文件夹下将会生成可执行文件,将其中的可执行文件重命名为plugin.exe并移动到study_plugin文件夹(当然,你可以删除一些冗余文件)

最终study_plugin文件夹的目录结构如下:

└─study_plugin
+    │  src
+    │  target
+    │  Cargo.lock
+    │  Cargo.toml
+    │  metadata.json
+    │  plugin.exe
+    └─lib
+

让我们打开metadata.json进行最后的编写:

{
+    "id": "study_plugin",
+    "version": "0.0.1",
+    "name": "StudyPlugin",
+    "description": "一个基础教程插件",
+    "author": ["天机"],
+    "link": "hiper.ink",
+    "dependencies": {
+    },
+    "command": "./plugin",
+    "args": [],
+    "type": "gRPC",
+    "root": false,
+    "color": "#93d5dc",
+    "icon": "mdi-book",
+    "frontend": {
+        "ui": true,
+        "configuration": true
+    }
+}
+

以上所有东西您都能改!我们写入了软件的启动命令./plugin

回到HiperLink,查看并开启我们的插件。

HiperLink插件界面

',30),c=[e];function l(u,k){return a(),p("div",null,c)}const d=s(o,[["render",l],["__file","Rust.html.vue"]]);export{d as default}; diff --git a/assets/Start-2-98e843d2.js b/assets/Start-2-98e843d2.js new file mode 100644 index 0000000..dfe116a --- /dev/null +++ b/assets/Start-2-98e843d2.js @@ -0,0 +1 @@ +const t="/img/PluginDocs/Start-2.png";export{t as _}; diff --git a/assets/Start.html-50d99452.js b/assets/Start.html-50d99452.js new file mode 100644 index 0000000..5b863d2 --- /dev/null +++ b/assets/Start.html-50d99452.js @@ -0,0 +1 @@ +import{_ as t,p as a,q as s,R as e,t as c}from"./framework-cc651620.js";const o={},n=e("h1",{id:"📖-快速上手",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#📖-快速上手","aria-hidden":"true"},"#"),c(" 📖 快速上手")],-1),r=e("div",{class:"custom-container tip"},[e("p",{class:"custom-container-title"},"提示"),e("p",null,"使用文档正在建设中...")],-1),_=[n,r];function i(d,l){return a(),s("div",null,_)}const u=t(o,[["render",i],["__file","Start.html.vue"]]);export{u as default}; diff --git a/assets/Start.html-9d4161ee.js b/assets/Start.html-9d4161ee.js new file mode 100644 index 0000000..bc7b04f --- /dev/null +++ b/assets/Start.html-9d4161ee.js @@ -0,0 +1 @@ +const t=JSON.parse('{"key":"v-791cb41c","path":"/Docs/Start.html","title":"📖 快速上手","lang":"zh-CN","frontmatter":{},"headers":[],"git":{"updatedTime":1673158677000,"contributors":[{"name":"Harry-zklcdc","email":"1269158832@qq.com","commits":1}]},"filePathRelative":"Docs/Start.md"}');export{t as data}; diff --git a/assets/Tips.html-6b25d762.js b/assets/Tips.html-6b25d762.js new file mode 100644 index 0000000..38c4de5 --- /dev/null +++ b/assets/Tips.html-6b25d762.js @@ -0,0 +1 @@ +import{_ as s,M as r,p as i,q as a,R as e,t,N as o}from"./framework-cc651620.js";const c={},l=e("h1",{id:"一些提示",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#一些提示","aria-hidden":"true"},"#"),t(" 一些提示")],-1),p={class:"custom-container tip"},_=e("p",{class:"custom-container-title"},"提示",-1),h=e("p",null,[t("如果您是 "),e("code",null,"Golang"),t(" 的使用者,我们推荐您下载插件模板:")],-1),d={href:"https://gitee.com/HiperLink/example-plugins",target:"_blank",rel:"noopener noreferrer"},u={href:"https://github.com/Hiper-Link/example-plugins",target:"_blank",rel:"noopener noreferrer"};function m(f,g){const n=r("ExternalLinkIcon");return i(),a("div",null,[l,e("div",p,[_,h,e("p",null,[t("Gitee: "),e("a",d,[t("https://gitee.com/HiperLink/example-plugins"),o(n)])]),e("p",null,[t("Github: "),e("a",u,[t("https://github.com/Hiper-Link/example-plugins"),o(n)])])])])}const k=s(c,[["render",m],["__file","Tips.html.vue"]]);export{k as default}; diff --git a/assets/Tips.html-fd8819f7.js b/assets/Tips.html-fd8819f7.js new file mode 100644 index 0000000..de01be1 --- /dev/null +++ b/assets/Tips.html-fd8819f7.js @@ -0,0 +1 @@ +const t=JSON.parse('{"key":"v-d3fda4d0","path":"/PluginDocs/Basic/Tips.html","title":"一些提示","lang":"zh-CN","frontmatter":{},"headers":[],"git":{"updatedTime":1673830380000,"contributors":[{"name":"Harry-zklcdc","email":"1269158832@qq.com","commits":1}]},"filePathRelative":"PluginDocs/Basic/Tips.md"}');export{t as data}; diff --git a/assets/app-542dabbe.js b/assets/app-542dabbe.js new file mode 100644 index 0000000..bfb4b0b --- /dev/null +++ b/assets/app-542dabbe.js @@ -0,0 +1,6 @@ +import{d as q,r as C,a as go,b as _o,c as I,i as oe,e as Re,f as bo,g as Ot,o as Z,h,j as P,k as re,l as Pe,m as xt,u as he,n as Qe,p,q as b,s as A,t as ye,v as V,w as ne,x as It,_ as z,y as yo,z as m,A as we,B as wo,C as Lo,D as ko,E as Ye,F as Eo,G as Po,H as $t,I as Ne,J as So,K as Je,L as ve,M as ce,N as R,O as ee,P as me,Q as M,R as $,S as ze,T as U,U as Q,V as lt,W as Do,X as To,Y as Be,Z as Ie,$ as $e,a0 as Ct,a1 as Oo,a2 as xo,a3 as Io,a4 as $o,a5 as Co,a6 as Ao,a7 as Ho}from"./framework-cc651620.js";const Ro="modulepreload",No=function(e){return"/"+e},it={},E=function(t,o,n){if(!o||o.length===0)return t();const r=document.getElementsByTagName("link");return Promise.all(o.map(s=>{if(s=No(s),s in it)return;it[s]=!0;const l=s.endsWith(".css"),a=l?'[rel="stylesheet"]':"";if(!!n)for(let u=r.length-1;u>=0;u--){const v=r[u];if(v.href===s&&(!l||v.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${s}"]${a}`))return;const c=document.createElement("link");if(c.rel=l?"stylesheet":Ro,l||(c.as="script",c.crossOrigin=""),c.href=s,document.head.appendChild(c),l)return new Promise((u,v)=>{c.addEventListener("load",u),c.addEventListener("error",()=>v(new Error(`Unable to preload CSS for ${s}`)))})})).then(()=>t())},zo={"v-8daa1a0e":()=>E(()=>import("./index.html-8704499c.js"),[]).then(({data:e})=>e),"v-3e214e9b":()=>E(()=>import("./index.html-d2bbbcfd.js"),[]).then(({data:e})=>e),"v-6bc6c5b0":()=>E(()=>import("./index.html-db82fc2e.js"),[]).then(({data:e})=>e),"v-12b535db":()=>E(()=>import("./index.html-4f366004.js"),[]).then(({data:e})=>e),"v-791cb41c":()=>E(()=>import("./Start.html-9d4161ee.js"),[]).then(({data:e})=>e),"v-7a6ec647":()=>E(()=>import("./index.html-103e28a1.js"),[]).then(({data:e})=>e),"v-2dc44d58":()=>E(()=>import("./Example.html-d5941944.js"),[]).then(({data:e})=>e),"v-03604679":()=>E(()=>import("./Format.html-f770cc78.js"),[]).then(({data:e})=>e),"v-09a21481":()=>E(()=>import("./Metadata.html-aa88d8d2.js"),[]).then(({data:e})=>e),"v-d3fda4d0":()=>E(()=>import("./Tips.html-fd8819f7.js"),[]).then(({data:e})=>e),"v-792a752a":()=>E(()=>import("./CSharp.html-3c53f8ae.js"),[]).then(({data:e})=>e),"v-391dc22c":()=>E(()=>import("./Go.html-4c263677.js"),[]).then(({data:e})=>e),"v-83a0a214":()=>E(()=>import("./Python.html-0b3dfca9.js"),[]).then(({data:e})=>e),"v-26ef11a4":()=>E(()=>import("./Rust.html-b1948268.js"),[]).then(({data:e})=>e),"v-f0b20222":()=>E(()=>import("./Back.html-42e4d89e.js"),[]).then(({data:e})=>e),"v-02e2dca3":()=>E(()=>import("./index.html-1f0059e4.js"),[]).then(({data:e})=>e),"v-7fade8ca":()=>E(()=>import("./Interaction.html-b7586d71.js"),[]).then(({data:e})=>e),"v-3706649a":()=>E(()=>import("./404.html-f9875e7b.js"),[]).then(({data:e})=>e)},Bo=JSON.parse('{"base":"/","lang":"zh-CN","title":"HiperLink","description":"🌈 HiperLink | 🔗 嗨皮立刻 - 📆 使用文档","head":[["link",{"rel":"icon","href":"favicon.ico"}]],"locales":{}}'),At={"v-8daa1a0e":q(()=>E(()=>import("./index.html-7b9a0856.js"),["assets/index.html-7b9a0856.js","assets/framework-cc651620.js"])),"v-3e214e9b":q(()=>E(()=>import("./index.html-550593ad.js"),["assets/index.html-550593ad.js","assets/framework-cc651620.js"])),"v-6bc6c5b0":q(()=>E(()=>import("./index.html-9e9e82fb.js"),["assets/index.html-9e9e82fb.js","assets/framework-cc651620.js"])),"v-12b535db":q(()=>E(()=>import("./index.html-5ff51570.js"),["assets/index.html-5ff51570.js","assets/framework-cc651620.js"])),"v-791cb41c":q(()=>E(()=>import("./Start.html-50d99452.js"),["assets/Start.html-50d99452.js","assets/framework-cc651620.js"])),"v-7a6ec647":q(()=>E(()=>import("./index.html-86b4a8cc.js"),["assets/index.html-86b4a8cc.js","assets/framework-cc651620.js"])),"v-2dc44d58":q(()=>E(()=>import("./Example.html-4110fdf6.js"),["assets/Example.html-4110fdf6.js","assets/framework-cc651620.js"])),"v-03604679":q(()=>E(()=>import("./Format.html-acc722f4.js"),["assets/Format.html-acc722f4.js","assets/framework-cc651620.js"])),"v-09a21481":q(()=>E(()=>import("./Metadata.html-0350df2c.js"),["assets/Metadata.html-0350df2c.js","assets/framework-cc651620.js"])),"v-d3fda4d0":q(()=>E(()=>import("./Tips.html-6b25d762.js"),["assets/Tips.html-6b25d762.js","assets/framework-cc651620.js"])),"v-792a752a":q(()=>E(()=>import("./CSharp.html-388a67b2.js"),["assets/CSharp.html-388a67b2.js","assets/framework-cc651620.js"])),"v-391dc22c":q(()=>E(()=>import("./Go.html-3fa1af93.js"),["assets/Go.html-3fa1af93.js","assets/Start-2-98e843d2.js","assets/framework-cc651620.js"])),"v-83a0a214":q(()=>E(()=>import("./Python.html-e29369ba.js"),["assets/Python.html-e29369ba.js","assets/Start-2-98e843d2.js","assets/framework-cc651620.js"])),"v-26ef11a4":q(()=>E(()=>import("./Rust.html-fd38a2dd.js"),["assets/Rust.html-fd38a2dd.js","assets/Start-2-98e843d2.js","assets/framework-cc651620.js"])),"v-f0b20222":q(()=>E(()=>import("./Back.html-df0fa5cb.js"),["assets/Back.html-df0fa5cb.js","assets/framework-cc651620.js"])),"v-02e2dca3":q(()=>E(()=>import("./index.html-ef97b19a.js"),["assets/index.html-ef97b19a.js","assets/framework-cc651620.js"])),"v-7fade8ca":q(()=>E(()=>import("./Interaction.html-54fa1a8f.js"),["assets/Interaction.html-54fa1a8f.js","assets/framework-cc651620.js"])),"v-3706649a":q(()=>E(()=>import("./404.html-ceb4942b.js"),["assets/404.html-ceb4942b.js","assets/framework-cc651620.js"]))};var Mo=Symbol(""),Fo=C(zo),Ht=go({key:"",path:"",title:"",lang:"",frontmatter:{},headers:[]}),de=C(Ht),fe=()=>de,Rt=Symbol(""),le=()=>{const e=re(Rt);if(!e)throw new Error("usePageFrontmatter() is called without provider.");return e},Nt=Symbol(""),Wo=()=>{const e=re(Nt);if(!e)throw new Error("usePageHead() is called without provider.");return e},Vo=Symbol(""),zt=Symbol(""),jo=()=>{const e=re(zt);if(!e)throw new Error("usePageLang() is called without provider.");return e},Bt=Symbol(""),qo=()=>{const e=re(Bt);if(!e)throw new Error("usePageLayout() is called without provider.");return e},Ze=Symbol(""),Le=()=>{const e=re(Ze);if(!e)throw new Error("useRouteLocale() is called without provider.");return e},be=C(Bo),Uo=()=>be,Mt=Symbol(""),Xe=()=>{const e=re(Mt);if(!e)throw new Error("useSiteLocaleData() is called without provider.");return e},Go=Symbol(""),Ko="Layout",Qo="NotFound",se=_o({resolveLayouts:e=>e.reduce((t,o)=>({...t,...o.layouts}),{}),resolvePageData:async e=>{const t=Fo.value[e];return await(t==null?void 0:t())??Ht},resolvePageFrontmatter:e=>e.frontmatter,resolvePageHead:(e,t,o)=>{const n=oe(t.description)?t.description:o.description,r=[...Re(t.head)?t.head:[],...o.head,["title",{},e],["meta",{name:"description",content:n}]];return bo(r)},resolvePageHeadTitle:(e,t)=>[e.title,t.title].filter(o=>!!o).join(" | "),resolvePageLang:e=>e.lang||"en",resolvePageLayout:(e,t)=>{let o;if(e.path){const n=e.frontmatter.layout;oe(n)?o=n:o=Ko}else o=Qo;return t[o]},resolveRouteLocale:(e,t)=>Ot(e,t),resolveSiteLocaleData:(e,t)=>({...e,...e.locales[t]})}),et=I({name:"ClientOnly",setup(e,t){const o=C(!1);return Z(()=>{o.value=!0}),()=>{var n,r;return o.value?(r=(n=t.slots).default)==null?void 0:r.call(n):null}}}),Yo=I({name:"Content",props:{pageKey:{type:String,required:!1,default:""}},setup(e){const t=fe(),o=h(()=>At[e.pageKey||t.value.key]);return()=>o.value?P(o.value):P("div","404 Not Found")}}),ae=(e={})=>e,Me=e=>Pe(e)?e:`/${xt(e)}`;function Ft(e,t,o){var n,r,s;t===void 0&&(t=50),o===void 0&&(o={});var l=(n=o.isImmediate)!=null&&n,a=(r=o.callback)!=null&&r,i=o.maxWait,c=Date.now(),u=[];function v(){if(i!==void 0){var _=Date.now()-c;if(_+t>=i)return i-_}return t}var f=function(){var _=[].slice.call(arguments),y=this;return new Promise(function(L,w){var D=l&&s===void 0;if(s!==void 0&&clearTimeout(s),s=setTimeout(function(){if(s=void 0,c=Date.now(),!l){var O=e.apply(y,_);a&&a(O),u.forEach(function(j){return(0,j.resolve)(O)}),u=[]}},v()),D){var H=e.apply(y,_);return a&&a(H),L(H)}u.push({resolve:L,reject:w})})};return f.cancel=function(_){s!==void 0&&clearTimeout(s),u.forEach(function(y){return(0,y.reject)(_)}),u=[]},f}const Jo=({headerLinkSelector:e,headerAnchorSelector:t,delay:o,offset:n=5})=>{const r=he(),l=Ft(()=>{var L,w;const a=Math.max(window.scrollY,document.documentElement.scrollTop,document.body.scrollTop);if(Math.abs(a-0)f.some(H=>H.hash===D.hash));for(let D=0;D=(((L=H.parentElement)==null?void 0:L.offsetTop)??0)-n,K=!O||a<(((w=O.parentElement)==null?void 0:w.offsetTop)??0)-n;if(!(j&&K))continue;const g=decodeURIComponent(r.currentRoute.value.hash),d=decodeURIComponent(H.hash);if(g===d)return;if(v){for(let W=D+1;W{window.addEventListener("scroll",l)}),Qe(()=>{window.removeEventListener("scroll",l)})},ct=async(e,t)=>{const{scrollBehavior:o}=e.options;e.options.scrollBehavior=void 0,await e.replace({query:e.currentRoute.value.query,hash:t,force:!0}).finally(()=>e.options.scrollBehavior=o)},Zo="a.sidebar-item",Xo=".header-anchor",en=300,tn=5,on=ae({setup(){Jo({headerLinkSelector:Zo,headerAnchorSelector:Xo,delay:en,offset:tn})}});const nn=P("svg",{class:"external-link-icon",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"},[P("path",{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}),P("polygon",{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"})]),rn=I({name:"ExternalLinkIcon",props:{locales:{type:Object,required:!1,default:()=>({})}},setup(e){const t=Le(),o=h(()=>e.locales[t.value]??{openInNewWindow:"open in new window"});return()=>P("span",[nn,P("span",{class:"external-link-icon-sr-only"},o.value.openInNewWindow)])}}),an={"/":{openInNewWindow:"open in new window"}},sn=ae({enhance({app:e}){e.component("ExternalLinkIcon",P(rn,{locales:an}))}});/*! medium-zoom 1.0.8 | MIT License | https://github.com/francoischalifour/medium-zoom */var pe=Object.assign||function(e){for(var t=1;t1&&arguments[1]!==void 0?arguments[1]:{},n=window.Promise||function(k){function S(){}k(S,S)},r=function(k){var S=k.target;if(S===W){y();return}O.indexOf(S)!==-1&&L({target:S})},s=function(){if(!(K||!d.original)){var k=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;Math.abs(X-k)>g.scrollOffset&&setTimeout(y,150)}},l=function(k){var S=k.key||k.keyCode;(S==="Escape"||S==="Esc"||S===27)&&y()},a=function(){var k=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},S=k;if(k.background&&(W.style.background=k.background),k.container&&k.container instanceof Object&&(S.container=pe({},g.container,k.container)),k.template){var N=xe(k.template)?k.template:document.querySelector(k.template);S.template=N}return g=pe({},g,S),O.forEach(function(F){F.dispatchEvent(_e("medium-zoom:update",{detail:{zoom:B}}))}),B},i=function(){var k=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return e(pe({},g,k))},c=function(){for(var k=arguments.length,S=Array(k),N=0;N0?S.reduce(function(T,Y){return[].concat(T,dt(Y))},[]):O;return F.forEach(function(T){T.classList.remove("medium-zoom-image"),T.dispatchEvent(_e("medium-zoom:detach",{detail:{zoom:B}}))}),O=O.filter(function(T){return F.indexOf(T)===-1}),B},v=function(k,S){var N=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return O.forEach(function(F){F.addEventListener("medium-zoom:"+k,S,N)}),j.push({type:"medium-zoom:"+k,listener:S,options:N}),B},f=function(k,S){var N=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return O.forEach(function(F){F.removeEventListener("medium-zoom:"+k,S,N)}),j=j.filter(function(F){return!(F.type==="medium-zoom:"+k&&F.listener.toString()===S.toString())}),B},_=function(){var k=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},S=k.target,N=function(){var T={width:document.documentElement.clientWidth,height:document.documentElement.clientHeight,left:0,top:0,right:0,bottom:0},Y=void 0,te=void 0;if(g.container)if(g.container instanceof Object)T=pe({},T,g.container),Y=T.width-T.left-T.right-g.margin*2,te=T.height-T.top-T.bottom-g.margin*2;else{var ge=xe(g.container)?g.container:document.querySelector(g.container),ue=ge.getBoundingClientRect(),Fe=ue.width,ao=ue.height,so=ue.left,lo=ue.top;T=pe({},T,{width:Fe,height:ao,left:so,top:lo})}Y=Y||T.width-g.margin*2,te=te||T.height-g.margin*2;var ke=d.zoomedHd||d.original,io=ut(ke)?Y:ke.naturalWidth||Y,co=ut(ke)?te:ke.naturalHeight||te,Se=ke.getBoundingClientRect(),uo=Se.top,mo=Se.left,We=Se.width,Ve=Se.height,vo=Math.min(Math.max(We,io),Y)/We,po=Math.min(Math.max(Ve,co),te)/Ve,je=Math.min(vo,po),fo=(-mo+(Y-We)/2+g.margin+T.left)/je,ho=(-uo+(te-Ve)/2+g.margin+T.top)/je,st="scale("+je+") translate3d("+fo+"px, "+ho+"px, 0)";d.zoomed.style.transform=st,d.zoomedHd&&(d.zoomedHd.style.transform=st)};return new n(function(F){if(S&&O.indexOf(S)===-1){F(B);return}var T=function Fe(){K=!1,d.zoomed.removeEventListener("transitionend",Fe),d.original.dispatchEvent(_e("medium-zoom:opened",{detail:{zoom:B}})),F(B)};if(d.zoomed){F(B);return}if(S)d.original=S;else if(O.length>0){var Y=O;d.original=Y[0]}else{F(B);return}if(d.original.dispatchEvent(_e("medium-zoom:open",{detail:{zoom:B}})),X=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,K=!0,d.zoomed=un(d.original),document.body.appendChild(W),g.template){var te=xe(g.template)?g.template:document.querySelector(g.template);d.template=document.createElement("div"),d.template.appendChild(te.content.cloneNode(!0)),document.body.appendChild(d.template)}if(d.original.parentElement&&d.original.parentElement.tagName==="PICTURE"&&d.original.currentSrc&&(d.zoomed.src=d.original.currentSrc),document.body.appendChild(d.zoomed),window.requestAnimationFrame(function(){document.body.classList.add("medium-zoom--opened")}),d.original.classList.add("medium-zoom-image--hidden"),d.zoomed.classList.add("medium-zoom-image--opened"),d.zoomed.addEventListener("click",y),d.zoomed.addEventListener("transitionend",T),d.original.getAttribute("data-zoom-src")){d.zoomedHd=d.zoomed.cloneNode(),d.zoomedHd.removeAttribute("srcset"),d.zoomedHd.removeAttribute("sizes"),d.zoomedHd.removeAttribute("loading"),d.zoomedHd.src=d.zoomed.getAttribute("data-zoom-src"),d.zoomedHd.onerror=function(){clearInterval(ge),console.warn("Unable to reach the zoom image target "+d.zoomedHd.src),d.zoomedHd=null,N()};var ge=setInterval(function(){d.zoomedHd.complete&&(clearInterval(ge),d.zoomedHd.classList.add("medium-zoom-image--opened"),d.zoomedHd.addEventListener("click",y),document.body.appendChild(d.zoomedHd),N())},10)}else if(d.original.hasAttribute("srcset")){d.zoomedHd=d.zoomed.cloneNode(),d.zoomedHd.removeAttribute("sizes"),d.zoomedHd.removeAttribute("loading");var ue=d.zoomedHd.addEventListener("load",function(){d.zoomedHd.removeEventListener("load",ue),d.zoomedHd.classList.add("medium-zoom-image--opened"),d.zoomedHd.addEventListener("click",y),document.body.appendChild(d.zoomedHd),N()})}else N()})},y=function(){return new n(function(k){if(K||!d.original){k(B);return}var S=function N(){d.original.classList.remove("medium-zoom-image--hidden"),document.body.removeChild(d.zoomed),d.zoomedHd&&document.body.removeChild(d.zoomedHd),document.body.removeChild(W),d.zoomed.classList.remove("medium-zoom-image--opened"),d.template&&document.body.removeChild(d.template),K=!1,d.zoomed.removeEventListener("transitionend",N),d.original.dispatchEvent(_e("medium-zoom:closed",{detail:{zoom:B}})),d.original=null,d.zoomed=null,d.zoomedHd=null,d.template=null,k(B)};K=!0,document.body.classList.remove("medium-zoom--opened"),d.zoomed.style.transform="",d.zoomedHd&&(d.zoomedHd.style.transform=""),d.template&&(d.template.style.transition="opacity 150ms",d.template.style.opacity=0),d.original.dispatchEvent(_e("medium-zoom:close",{detail:{zoom:B}})),d.zoomed.addEventListener("transitionend",S)})},L=function(){var k=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},S=k.target;return d.original?y():_({target:S})},w=function(){return g},D=function(){return O},H=function(){return d.original},O=[],j=[],K=!1,X=0,g=o,d={original:null,zoomed:null,zoomedHd:null,template:null};Object.prototype.toString.call(t)==="[object Object]"?g=t:(t||typeof t=="string")&&c(t),g=pe({margin:0,background:"#fff",scrollOffset:40,container:null,template:null},g);var W=cn(g.background);document.addEventListener("click",r),document.addEventListener("keyup",l),document.addEventListener("scroll",s),window.addEventListener("resize",y);var B={open:_,close:y,toggle:L,update:a,clone:i,attach:c,detach:u,on:v,off:f,getOptions:w,getImages:D,getZoomedImage:H};return B};function mn(e,t){t===void 0&&(t={});var o=t.insertAt;if(!(!e||typeof document>"u")){var n=document.head||document.getElementsByTagName("head")[0],r=document.createElement("style");r.type="text/css",o==="top"&&n.firstChild?n.insertBefore(r,n.firstChild):n.appendChild(r),r.styleSheet?r.styleSheet.cssText=e:r.appendChild(document.createTextNode(e))}}var vn=".medium-zoom-overlay{position:fixed;top:0;right:0;bottom:0;left:0;opacity:0;transition:opacity .3s;will-change:opacity}.medium-zoom--opened .medium-zoom-overlay{cursor:pointer;cursor:zoom-out;opacity:1}.medium-zoom-image{cursor:pointer;cursor:zoom-in;transition:transform .3s cubic-bezier(.2,0,.2,1)!important}.medium-zoom-image--hidden{visibility:hidden}.medium-zoom-image--opened{position:relative;cursor:pointer;cursor:zoom-out;will-change:transform}";mn(vn);const pn=dn,fn=Symbol("mediumZoom");const hn=".theme-default-content > img, .theme-default-content :not(a) > img",gn={},_n=300,bn=ae({enhance({app:e,router:t}){const o=pn(gn);o.refresh=(n=hn)=>{o.detach(),o.attach(n)},e.provide(fn,o),t.afterEach(()=>{setTimeout(()=>o.refresh(),_n)})}});/** + * NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress + * @license MIT + */const x={settings:{minimum:.08,easing:"ease",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,barSelector:'[role="bar"]',parent:"body",template:'
'},status:null,set:e=>{const t=x.isStarted();e=qe(e,x.settings.minimum,1),x.status=e===1?null:e;const o=x.render(!t),n=o.querySelector(x.settings.barSelector),r=x.settings.speed,s=x.settings.easing;return o.offsetWidth,yn(l=>{Te(n,{transform:"translate3d("+mt(e)+"%,0,0)",transition:"all "+r+"ms "+s}),e===1?(Te(o,{transition:"none",opacity:"1"}),o.offsetWidth,setTimeout(function(){Te(o,{transition:"all "+r+"ms linear",opacity:"0"}),setTimeout(function(){x.remove(),l()},r)},r)):setTimeout(()=>l(),r)}),x},isStarted:()=>typeof x.status=="number",start:()=>{x.status||x.set(0);const e=()=>{setTimeout(()=>{x.status&&(x.trickle(),e())},x.settings.trickleSpeed)};return x.settings.trickle&&e(),x},done:e=>!e&&!x.status?x:x.inc(.3+.5*Math.random()).set(1),inc:e=>{let t=x.status;return t?(typeof e!="number"&&(e=(1-t)*qe(Math.random()*t,.1,.95)),t=qe(t+e,0,.994),x.set(t)):x.start()},trickle:()=>x.inc(Math.random()*x.settings.trickleRate),render:e=>{if(x.isRendered())return document.getElementById("nprogress");vt(document.documentElement,"nprogress-busy");const t=document.createElement("div");t.id="nprogress",t.innerHTML=x.settings.template;const o=t.querySelector(x.settings.barSelector),n=e?"-100":mt(x.status||0),r=document.querySelector(x.settings.parent);return Te(o,{transition:"all 0 linear",transform:"translate3d("+n+"%,0,0)"}),r!==document.body&&vt(r,"nprogress-custom-parent"),r==null||r.appendChild(t),t},remove:()=>{pt(document.documentElement,"nprogress-busy"),pt(document.querySelector(x.settings.parent),"nprogress-custom-parent");const e=document.getElementById("nprogress");e&&wn(e)},isRendered:()=>!!document.getElementById("nprogress")},qe=(e,t,o)=>eo?o:e,mt=e=>(-1+e)*100,yn=function(){const e=[];function t(){const o=e.shift();o&&o(t)}return function(o){e.push(o),e.length===1&&t()}}(),Te=function(){const e=["Webkit","O","Moz","ms"],t={};function o(l){return l.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,function(a,i){return i.toUpperCase()})}function n(l){const a=document.body.style;if(l in a)return l;let i=e.length;const c=l.charAt(0).toUpperCase()+l.slice(1);let u;for(;i--;)if(u=e[i]+c,u in a)return u;return l}function r(l){return l=o(l),t[l]||(t[l]=n(l))}function s(l,a,i){a=r(a),l.style[a]=i}return function(l,a){for(const i in a){const c=a[i];c!==void 0&&Object.prototype.hasOwnProperty.call(a,i)&&s(l,i,c)}}}(),Wt=(e,t)=>(typeof e=="string"?e:tt(e)).indexOf(" "+t+" ")>=0,vt=(e,t)=>{const o=tt(e),n=o+t;Wt(o,t)||(e.className=n.substring(1))},pt=(e,t)=>{const o=tt(e);if(!Wt(e,t))return;const n=o.replace(" "+t+" "," ");e.className=n.substring(1,n.length-1)},tt=e=>(" "+(e.className||"")+" ").replace(/\s+/gi," "),wn=e=>{e&&e.parentNode&&e.parentNode.removeChild(e)};const Ln=()=>{Z(()=>{const e=he(),t=new Set;t.add(e.currentRoute.value.path),e.beforeEach(o=>{t.has(o.path)||x.start()}),e.afterEach(o=>{t.add(o.path),x.done()})})},kn=ae({setup(){Ln()}}),En=JSON.parse(`{"logo":"logo.svg","navbar":[{"text":"💡 首页","link":"/"},{"text":"📖 用户指南","link":"/Docs/"},{"text":"🧩 插件市场","link":"/PluginMarket/"},{"text":"🚧 插件开发","link":"/PluginDocs/"},{"text":"📌 关于我们","link":"/About/"},{"text":"🌈 HiperLink","children":[{"text":"Github","link":"https://github.com/Hiper-Link/HiperLink-core"},{"text":"Gitee","link":"https://gitee.com/HiperLink/HiperLink-core"}]}],"sidebar":{"/Docs/":[{"text":"📖 用户指南","children":["/Docs/README.md","/Docs/Start.md"]}],"/PluginDocs/":[{"text":"插件开发","children":["/PluginDocs/README.md"]},{"text":"创建插件","children":["/PluginDocs/Basic/Format.md","/PluginDocs/Basic/Metadata.md","/PluginDocs/Basic/Example.md","/PluginDocs/Basic/Tips.md"]},{"text":"你好,世界!","children":["/PluginDocs/HelloWorld/Go.md","/PluginDocs/HelloWorld/Python.md","/PluginDocs/HelloWorld/Rust.md"]},{"text":"前后端交互","children":["/PluginDocs/Web/Index.md","/PluginDocs/Web/Interaction.md","/PluginDocs/Web/Back.md"]}]},"editLink":true,"editLinkText":"在 Github 上编辑此页","docsRepo":"https://github.com/Hiper-Link/Docs","docsBranch":"master","docsDir":"docs","editLinkPattern":":repo/edit/:branch/:path","contributorsText":"贡献者","lastUpdated":true,"lastUpdatedText":"上次更新","tip":"提示","warning":"注意","danger":"警告","locales":{"/":{"selectLanguageName":"English"}},"colorMode":"auto","colorModeSwitch":true,"repo":null,"selectLanguageText":"Languages","selectLanguageAriaLabel":"Select language","sidebarDepth":2,"contributors":true,"notFound":["There's nothing here.","How did we get here?","That's a Four-Oh-Four.","Looks like we've got some broken links."],"backToHome":"Take me home","openInNewWindow":"open in new window","toggleColorMode":"toggle color mode","toggleSidebar":"toggle sidebar"}`),Pn=C(En),Sn=()=>Pn,Vt=Symbol(""),Dn=()=>{const e=re(Vt);if(!e)throw new Error("useThemeLocaleData() is called without provider.");return e},Tn=(e,t)=>{var o;return{...e,...(o=e.locales)==null?void 0:o[t]}},On=ae({enhance({app:e}){const t=Sn(),o=e._context.provides[Ze],n=h(()=>Tn(t.value,o.value));e.provide(Vt,n),Object.defineProperties(e.config.globalProperties,{$theme:{get(){return t.value}},$themeLocale:{get(){return n.value}}})}}),xn=I({__name:"Badge",props:{type:{type:String,required:!1,default:"tip"},text:{type:String,required:!1,default:""},vertical:{type:String,required:!1,default:void 0}},setup(e){return(t,o)=>(p(),b("span",{class:ne(["badge",e.type]),style:It({verticalAlign:e.vertical})},[A(t.$slots,"default",{},()=>[ye(V(e.text),1)])],6))}}),In=z(xn,[["__file","Badge.vue"]]),$n=I({name:"CodeGroup",setup(e,{slots:t}){const o=C(-1),n=C([]),r=(a=o.value)=>{a{a>0?o.value=a-1:o.value=n.value.length-1,n.value[o.value].focus()},l=(a,i)=>{a.key===" "||a.key==="Enter"?(a.preventDefault(),o.value=i):a.key==="ArrowRight"?(a.preventDefault(),r(i)):a.key==="ArrowLeft"&&(a.preventDefault(),s(i))};return()=>{var i;const a=(((i=t.default)==null?void 0:i.call(t))||[]).filter(c=>c.type.name==="CodeGroupItem").map(c=>(c.props===null&&(c.props={}),c));return a.length===0?null:(o.value<0||o.value>a.length-1?(o.value=a.findIndex(c=>c.props.active===""||c.props.active===!0),o.value===-1&&(o.value=0)):a.forEach((c,u)=>{c.props.active=u===o.value}),P("div",{class:"code-group"},[P("div",{class:"code-group__nav"},P("ul",{class:"code-group__ul"},a.map((c,u)=>{const v=u===o.value;return P("li",{class:"code-group__li"},P("button",{ref:f=>{f&&(n.value[u]=f)},class:{"code-group__nav-tab":!0,"code-group__nav-tab-active":v},ariaPressed:v,ariaExpanded:v,onClick:()=>o.value=u,onKeydown:f=>l(f,u)},c.props.title))}))),a]))}}}),Cn=["aria-selected"],An=I({name:"CodeGroupItem"}),Hn=I({...An,props:{title:{type:String,required:!0},active:{type:Boolean,required:!1,default:!1}},setup(e){return(t,o)=>(p(),b("div",{class:ne(["code-group-item",{"code-group-item__active":e.active}]),"aria-selected":e.active},[A(t.$slots,"default")],10,Cn))}}),Rn=z(Hn,[["__file","CodeGroupItem.vue"]]);var ft;const jt=typeof window<"u",Nn=e=>typeof e=="function",zn=e=>typeof e=="string",Bn=()=>{};jt&&((ft=window==null?void 0:window.navigator)!=null&&ft.userAgent)&&/iP(ad|hone|od)/.test(window.navigator.userAgent);function Ce(e){return typeof e=="function"?e():m(e)}function Mn(e,t){function o(...n){return new Promise((r,s)=>{Promise.resolve(e(()=>t.apply(this,n),{fn:t,thisArg:this,args:n})).then(r).catch(s)})}return o}const qt=e=>e();function Fn(e=qt){const t=C(!0);function o(){t.value=!1}function n(){t.value=!0}return{isActive:t,pause:o,resume:n,eventFilter:(...s)=>{t.value&&e(...s)}}}function Wn(e){return e}function Ut(e){return wo()?(Lo(e),!0):!1}function Vn(e){return typeof e=="function"?h(e):C(e)}function jn(e,t=!0){ko()?Z(e):t?e():Ye(e)}function qn(e=!1,t={}){const{truthyValue:o=!0,falsyValue:n=!1}=t,r=yo(e),s=C(e);function l(a){if(arguments.length)return s.value=a,s.value;{const i=Ce(o);return s.value=s.value===i?Ce(n):i,s.value}}return r?l:[s,l]}var ht=Object.getOwnPropertySymbols,Un=Object.prototype.hasOwnProperty,Gn=Object.prototype.propertyIsEnumerable,Kn=(e,t)=>{var o={};for(var n in e)Un.call(e,n)&&t.indexOf(n)<0&&(o[n]=e[n]);if(e!=null&&ht)for(var n of ht(e))t.indexOf(n)<0&&Gn.call(e,n)&&(o[n]=e[n]);return o};function Qn(e,t,o={}){const n=o,{eventFilter:r=qt}=n,s=Kn(n,["eventFilter"]);return we(e,Mn(r,t),s)}var Yn=Object.defineProperty,Jn=Object.defineProperties,Zn=Object.getOwnPropertyDescriptors,Ae=Object.getOwnPropertySymbols,Gt=Object.prototype.hasOwnProperty,Kt=Object.prototype.propertyIsEnumerable,gt=(e,t,o)=>t in e?Yn(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o,Xn=(e,t)=>{for(var o in t||(t={}))Gt.call(t,o)&>(e,o,t[o]);if(Ae)for(var o of Ae(t))Kt.call(t,o)&>(e,o,t[o]);return e},er=(e,t)=>Jn(e,Zn(t)),tr=(e,t)=>{var o={};for(var n in e)Gt.call(e,n)&&t.indexOf(n)<0&&(o[n]=e[n]);if(e!=null&&Ae)for(var n of Ae(e))t.indexOf(n)<0&&Kt.call(e,n)&&(o[n]=e[n]);return o};function or(e,t,o={}){const n=o,{eventFilter:r}=n,s=tr(n,["eventFilter"]),{eventFilter:l,pause:a,resume:i,isActive:c}=Fn(r);return{stop:Qn(e,t,er(Xn({},s),{eventFilter:l})),pause:a,resume:i,isActive:c}}function nr(e){var t;const o=Ce(e);return(t=o==null?void 0:o.$el)!=null?t:o}const He=jt?window:void 0;function rr(...e){let t,o,n,r;if(zn(e[0])||Array.isArray(e[0])?([o,n,r]=e,t=He):[t,o,n,r]=e,!t)return Bn;Array.isArray(o)||(o=[o]),Array.isArray(n)||(n=[n]);const s=[],l=()=>{s.forEach(u=>u()),s.length=0},a=(u,v,f)=>(u.addEventListener(v,f,r),()=>u.removeEventListener(v,f,r)),i=we(()=>nr(t),u=>{l(),u&&s.push(...o.flatMap(v=>n.map(f=>a(u,v,f))))},{immediate:!0,flush:"post"}),c=()=>{i(),l()};return Ut(c),c}function ar(e,t=!1){const o=C(),n=()=>o.value=Boolean(e());return n(),jn(n,t),o}function sr(e,t={}){const{window:o=He}=t,n=ar(()=>o&&"matchMedia"in o&&typeof o.matchMedia=="function");let r;const s=C(!1),l=()=>{r&&("removeEventListener"in r?r.removeEventListener("change",a):r.removeListener(a))},a=()=>{n.value&&(l(),r=o.matchMedia(Vn(e).value),s.value=r.matches,"addEventListener"in r?r.addEventListener("change",a):r.addListener(a))};return Po(a),Ut(()=>l()),s}const Ge=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},Ke="__vueuse_ssr_handlers__";Ge[Ke]=Ge[Ke]||{};const lr=Ge[Ke];function ir(e,t){return lr[e]||t}function cr(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}var ur=Object.defineProperty,_t=Object.getOwnPropertySymbols,dr=Object.prototype.hasOwnProperty,mr=Object.prototype.propertyIsEnumerable,bt=(e,t,o)=>t in e?ur(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o,yt=(e,t)=>{for(var o in t||(t={}))dr.call(t,o)&&bt(e,o,t[o]);if(_t)for(var o of _t(t))mr.call(t,o)&&bt(e,o,t[o]);return e};const vr={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}};function pr(e,t,o,n={}){var r;const{flush:s="pre",deep:l=!0,listenToStorageChanges:a=!0,writeDefaults:i=!0,mergeDefaults:c=!1,shallow:u,window:v=He,eventFilter:f,onError:_=g=>{console.error(g)}}=n,y=(u?Eo:C)(t);if(!o)try{o=ir("getDefaultStorage",()=>{var g;return(g=He)==null?void 0:g.localStorage})()}catch(g){_(g)}if(!o)return y;const L=Ce(t),w=cr(L),D=(r=n.serializer)!=null?r:vr[w],{pause:H,resume:O}=or(y,()=>j(y.value),{flush:s,deep:l,eventFilter:f});return v&&a&&rr(v,"storage",X),X(),y;function j(g){try{if(g==null)o.removeItem(e);else{const d=D.write(g),W=o.getItem(e);W!==d&&(o.setItem(e,d),v&&(v==null||v.dispatchEvent(new StorageEvent("storage",{key:e,oldValue:W,newValue:d,storageArea:o}))))}}catch(d){_(d)}}function K(g){const d=g?g.newValue:o.getItem(e);if(d==null)return i&&L!==null&&o.setItem(e,D.write(L)),L;if(!g&&c){const W=D.read(d);return Nn(c)?c(W,L):w==="object"&&!Array.isArray(W)?yt(yt({},L),W):W}else return typeof d!="string"?d:D.read(d)}function X(g){if(!(g&&g.storageArea!==o)){if(g&&g.key==null){y.value=L;return}if(!(g&&g.key!==e)){H();try{y.value=K(g)}catch(d){_(d)}finally{g?Ye(O):O()}}}}}function fr(e){return sr("(prefers-color-scheme: dark)",e)}var wt;(function(e){e.UP="UP",e.RIGHT="RIGHT",e.DOWN="DOWN",e.LEFT="LEFT",e.NONE="NONE"})(wt||(wt={}));var hr=Object.defineProperty,Lt=Object.getOwnPropertySymbols,gr=Object.prototype.hasOwnProperty,_r=Object.prototype.propertyIsEnumerable,kt=(e,t,o)=>t in e?hr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o,br=(e,t)=>{for(var o in t||(t={}))gr.call(t,o)&&kt(e,o,t[o]);if(Lt)for(var o of Lt(t))_r.call(t,o)&&kt(e,o,t[o]);return e};const yr={easeInSine:[.12,0,.39,0],easeOutSine:[.61,1,.88,1],easeInOutSine:[.37,0,.63,1],easeInQuad:[.11,0,.5,0],easeOutQuad:[.5,1,.89,1],easeInOutQuad:[.45,0,.55,1],easeInCubic:[.32,0,.67,0],easeOutCubic:[.33,1,.68,1],easeInOutCubic:[.65,0,.35,1],easeInQuart:[.5,0,.75,0],easeOutQuart:[.25,1,.5,1],easeInOutQuart:[.76,0,.24,1],easeInQuint:[.64,0,.78,0],easeOutQuint:[.22,1,.36,1],easeInOutQuint:[.83,0,.17,1],easeInExpo:[.7,0,.84,0],easeOutExpo:[.16,1,.3,1],easeInOutExpo:[.87,0,.13,1],easeInCirc:[.55,0,1,.45],easeOutCirc:[0,.55,.45,1],easeInOutCirc:[.85,0,.15,1],easeInBack:[.36,0,.66,-.56],easeOutBack:[.34,1.56,.64,1],easeInOutBack:[.68,-.6,.32,1.6]};br({linear:Wn},yr);const J=()=>Dn(),Qt=Symbol(""),ot=()=>{const e=re(Qt);if(!e)throw new Error("useDarkMode() is called without provider.");return e},wr=()=>{const e=J(),t=fr(),o=pr("vuepress-color-scheme",e.value.colorMode),n=h({get(){return e.value.colorModeSwitch?o.value==="auto"?t.value:o.value==="dark":e.value.colorMode==="dark"},set(r){r===t.value?o.value="auto":o.value=r?"dark":"light"}});Ne(Qt,n),Lr(n)},Lr=e=>{const t=(o=e.value)=>{const n=window==null?void 0:window.document.querySelector("html");n==null||n.classList.toggle("dark",o)};Z(()=>{we(e,t,{immediate:!0})}),$t(()=>t())},Yt=(...e)=>{const o=he().resolve(...e),n=o.matched[o.matched.length-1];if(!(n!=null&&n.redirect))return o;const{redirect:r}=n,s=So(r)?r(o):r,l=oe(s)?{path:s}:s;return Yt({hash:o.hash,query:o.query,params:o.params,...l})},nt=e=>{const t=Yt(encodeURI(e));return{text:t.meta.title||e,link:t.name==="404"?e:t.fullPath}};let Ue=null,Ee=null;const kr={wait:()=>Ue,pending:()=>{Ue=new Promise(e=>Ee=e)},resolve:()=>{Ee==null||Ee(),Ue=null,Ee=null}},Jt=()=>kr,Zt=Symbol("sidebarItems"),rt=()=>{const e=re(Zt);if(!e)throw new Error("useSidebarItems() is called without provider.");return e},Er=()=>{const e=J(),t=le(),o=h(()=>Pr(t.value,e.value));Ne(Zt,o)},Pr=(e,t)=>{const o=e.sidebar??t.sidebar??"auto",n=e.sidebarDepth??t.sidebarDepth??2;return e.home||o===!1?[]:o==="auto"?Dr(n):Re(o)?Xt(o,n):Je(o)?Tr(o,n):[]},Sr=(e,t)=>({text:e.title,link:e.link,children:at(e.children,t)}),at=(e,t)=>t>0?e.map(o=>Sr(o,t-1)):[],Dr=e=>{const t=fe();return[{text:t.value.title,children:at(t.value.headers,e)}]},Xt=(e,t)=>{const o=ve(),n=fe(),r=s=>{var a;let l;if(oe(s)?l=nt(s):l=s,l.children)return{...l,children:l.children.map(i=>r(i))};if(l.link===o.path){const i=((a=n.value.headers[0])==null?void 0:a.level)===1?n.value.headers[0].children:n.value.headers;return{...l,children:at(i,t)}}return l};return e.map(s=>r(s))},Tr=(e,t)=>{const o=ve(),n=Ot(e,o.path),r=e[n]??[];return Xt(r,t)},Or={},xr={class:"theme-default-content"};function Ir(e,t){const o=ce("Content");return p(),b("div",xr,[R(o)])}const $r=z(Or,[["render",Ir],["__file","HomeContent.vue"]]),Cr={key:0,class:"features"},Ar=I({__name:"HomeFeatures",setup(e){const t=le(),o=h(()=>Re(t.value.features)?t.value.features:[]);return(n,r)=>m(o).length?(p(),b("div",Cr,[(p(!0),b(ee,null,me(m(o),s=>(p(),b("div",{key:s.title,class:"feature"},[$("h2",null,V(s.title),1),$("p",null,V(s.details),1)]))),128))])):M("v-if",!0)}}),Hr=z(Ar,[["__file","HomeFeatures.vue"]]),Rr=["innerHTML"],Nr=["textContent"],zr=I({__name:"HomeFooter",setup(e){const t=le(),o=h(()=>t.value.footer),n=h(()=>t.value.footerHtml);return(r,s)=>m(o)?(p(),b(ee,{key:0},[M(" eslint-disable-next-line vue/no-v-html "),m(n)?(p(),b("div",{key:0,class:"footer",innerHTML:m(o)},null,8,Rr)):(p(),b("div",{key:1,class:"footer",textContent:V(m(o))},null,8,Nr))],64)):M("v-if",!0)}}),Br=z(zr,[["__file","HomeFooter.vue"]]),Mr=["href","rel","target","aria-label"],Fr=I({inheritAttrs:!1}),Wr=I({...Fr,__name:"AutoLink",props:{item:{type:Object,required:!0}},setup(e){const t=e,o=ve(),n=Uo(),{item:r}=ze(t),s=h(()=>Pe(r.value.link)),l=h(()=>Do(r.value.link)||To(r.value.link)),a=h(()=>{if(!l.value){if(r.value.target)return r.value.target;if(s.value)return"_blank"}}),i=h(()=>a.value==="_blank"),c=h(()=>!s.value&&!l.value&&!i.value),u=h(()=>{if(!l.value){if(r.value.rel)return r.value.rel;if(i.value)return"noopener noreferrer"}}),v=h(()=>r.value.ariaLabel||r.value.text),f=h(()=>{const L=Object.keys(n.value.locales);return L.length?!L.some(w=>w===r.value.link):r.value.link!=="/"}),_=h(()=>f.value?o.path.startsWith(r.value.link):!1),y=h(()=>c.value?r.value.activeMatch?new RegExp(r.value.activeMatch).test(o.path):_.value:!1);return(L,w)=>{const D=ce("RouterLink"),H=ce("AutoLinkExternalIcon");return m(c)?(p(),U(D,lt({key:0,class:{"router-link-active":m(y)},to:m(r).link,"aria-label":m(v)},L.$attrs),{default:Q(()=>[A(L.$slots,"before"),ye(" "+V(m(r).text)+" ",1),A(L.$slots,"after")]),_:3},16,["class","to","aria-label"])):(p(),b("a",lt({key:1,class:"external-link",href:m(r).link,rel:m(u),target:m(a),"aria-label":m(v)},L.$attrs),[A(L.$slots,"before"),ye(" "+V(m(r).text)+" ",1),m(i)?(p(),U(H,{key:0})):M("v-if",!0),A(L.$slots,"after")],16,Mr))}}}),ie=z(Wr,[["__file","AutoLink.vue"]]),Vr={class:"hero"},jr={key:0,id:"main-title"},qr={key:1,class:"description"},Ur={key:2,class:"actions"},Gr=I({__name:"HomeHero",setup(e){const t=le(),o=Xe(),n=ot(),r=h(()=>n.value&&t.value.heroImageDark!==void 0?t.value.heroImageDark:t.value.heroImage),s=h(()=>t.value.heroAlt||a.value||"hero"),l=h(()=>t.value.heroHeight||280),a=h(()=>t.value.heroText===null?null:t.value.heroText||o.value.title||"Hello"),i=h(()=>t.value.tagline===null?null:t.value.tagline||o.value.description||"Welcome to your VuePress site"),c=h(()=>Re(t.value.actions)?t.value.actions.map(({text:v,link:f,type:_="primary"})=>({text:v,link:f,type:_})):[]),u=()=>{if(!r.value)return null;const v=P("img",{src:Me(r.value),alt:s.value,height:l.value});return t.value.heroImageDark===void 0?v:P(et,()=>v)};return(v,f)=>(p(),b("header",Vr,[R(u),m(a)?(p(),b("h1",jr,V(m(a)),1)):M("v-if",!0),m(i)?(p(),b("p",qr,V(m(i)),1)):M("v-if",!0),m(c).length?(p(),b("p",Ur,[(p(!0),b(ee,null,me(m(c),_=>(p(),U(ie,{key:_.text,class:ne(["action-button",[_.type]]),item:_},null,8,["class","item"]))),128))])):M("v-if",!0)]))}}),Kr=z(Gr,[["__file","HomeHero.vue"]]),Qr={class:"home"},Yr=I({__name:"Home",setup(e){return(t,o)=>(p(),b("main",Qr,[R(Kr),R(Hr),R($r),R(Br)]))}}),Jr=z(Yr,[["__file","Home.vue"]]),Zr=I({__name:"NavbarBrand",setup(e){const t=Le(),o=Xe(),n=J(),r=ot(),s=h(()=>n.value.home||t.value),l=h(()=>o.value.title),a=h(()=>r.value&&n.value.logoDark!==void 0?n.value.logoDark:n.value.logo),i=()=>{if(!a.value)return null;const c=P("img",{class:"logo",src:Me(a.value),alt:l.value});return n.value.logoDark===void 0?c:P(et,()=>c)};return(c,u)=>{const v=ce("RouterLink");return p(),U(v,{to:m(s)},{default:Q(()=>[R(i),m(l)?(p(),b("span",{key:0,class:ne(["site-name",{"can-hide":m(a)}])},V(m(l)),3)):M("v-if",!0)]),_:1},8,["to"])}}}),Xr=z(Zr,[["__file","NavbarBrand.vue"]]),ea=I({__name:"DropdownTransition",setup(e){const t=n=>{n.style.height=n.scrollHeight+"px"},o=n=>{n.style.height=""};return(n,r)=>(p(),U(Be,{name:"dropdown",onEnter:t,onAfterEnter:o,onBeforeLeave:t},{default:Q(()=>[A(n.$slots,"default")]),_:3}))}}),eo=z(ea,[["__file","DropdownTransition.vue"]]),ta=["aria-label"],oa={class:"title"},na=$("span",{class:"arrow down"},null,-1),ra=["aria-label"],aa={class:"title"},sa={class:"navbar-dropdown"},la={class:"navbar-dropdown-subtitle"},ia={key:1},ca={class:"navbar-dropdown-subitem-wrapper"},ua=I({__name:"NavbarDropdown",props:{item:{type:Object,required:!0}},setup(e){const t=e,{item:o}=ze(t),n=h(()=>o.value.ariaLabel||o.value.text),r=C(!1),s=ve();we(()=>s.path,()=>{r.value=!1});const l=i=>{i.detail===0?r.value=!r.value:r.value=!1},a=(i,c)=>c[c.length-1]===i;return(i,c)=>(p(),b("div",{class:ne(["navbar-dropdown-wrapper",{open:r.value}])},[$("button",{class:"navbar-dropdown-title",type:"button","aria-label":m(n),onClick:l},[$("span",oa,V(m(o).text),1),na],8,ta),$("button",{class:"navbar-dropdown-title-mobile",type:"button","aria-label":m(n),onClick:c[0]||(c[0]=u=>r.value=!r.value)},[$("span",aa,V(m(o).text),1),$("span",{class:ne(["arrow",r.value?"down":"right"])},null,2)],8,ra),R(eo,null,{default:Q(()=>[Ie($("ul",sa,[(p(!0),b(ee,null,me(m(o).children,u=>(p(),b("li",{key:u.text,class:"navbar-dropdown-item"},[u.children?(p(),b(ee,{key:0},[$("h4",la,[u.link?(p(),U(ie,{key:0,item:u,onFocusout:v=>a(u,m(o).children)&&u.children.length===0&&(r.value=!1)},null,8,["item","onFocusout"])):(p(),b("span",ia,V(u.text),1))]),$("ul",ca,[(p(!0),b(ee,null,me(u.children,v=>(p(),b("li",{key:v.link,class:"navbar-dropdown-subitem"},[R(ie,{item:v,onFocusout:f=>a(v,u.children)&&a(u,m(o).children)&&(r.value=!1)},null,8,["item","onFocusout"])]))),128))])],64)):(p(),U(ie,{key:1,item:u,onFocusout:v=>a(u,m(o).children)&&(r.value=!1)},null,8,["item","onFocusout"]))]))),128))],512),[[$e,r.value]])]),_:1})],2))}}),da=z(ua,[["__file","NavbarDropdown.vue"]]),Et=e=>decodeURI(e).replace(/#.*$/,"").replace(/(index)?\.(md|html)$/,""),ma=(e,t)=>{if(t.hash===e)return!0;const o=Et(t.path),n=Et(e);return o===n},to=(e,t)=>e.link&&ma(e.link,t)?!0:e.children?e.children.some(o=>to(o,t)):!1,oo=e=>!Pe(e)||/github\.com/.test(e)?"GitHub":/bitbucket\.org/.test(e)?"Bitbucket":/gitlab\.com/.test(e)?"GitLab":/gitee\.com/.test(e)?"Gitee":null,va={GitHub:":repo/edit/:branch/:path",GitLab:":repo/-/edit/:branch/:path",Gitee:":repo/edit/:branch/:path",Bitbucket:":repo/src/:branch/:path?mode=edit&spa=0&at=:branch&fileviewer=file-view-default"},pa=({docsRepo:e,editLinkPattern:t})=>{if(t)return t;const o=oo(e);return o!==null?va[o]:null},fa=({docsRepo:e,docsBranch:t,docsDir:o,filePathRelative:n,editLinkPattern:r})=>{if(!n)return null;const s=pa({docsRepo:e,editLinkPattern:r});return s?s.replace(/:repo/,Pe(e)?e:`https://github.com/${e}`).replace(/:branch/,t).replace(/:path/,xt(`${Ct(o)}/${n}`)):null},ha={key:0,class:"navbar-items"},ga=I({__name:"NavbarItems",setup(e){const t=()=>{const u=he(),v=Le(),f=Xe(),_=J();return h(()=>{const y=Object.keys(f.value.locales);if(y.length<2)return[];const L=u.currentRoute.value.path,w=u.currentRoute.value.fullPath;return[{text:_.value.selectLanguageText??"unknown language",ariaLabel:_.value.selectLanguageAriaLabel??_.value.selectLanguageText??"unknown language",children:y.map(H=>{var d,W;const O=((d=f.value.locales)==null?void 0:d[H])??{},j=((W=_.value.locales)==null?void 0:W[H])??{},K=`${O.lang}`,X=j.selectLanguageName??K;let g;if(K===f.value.lang)g=w;else{const B=L.replace(v.value,H);u.getRoutes().some(G=>G.path===B)?g=w.replace(L,B):g=j.home??H}return{text:X,link:g}})}]})},o=()=>{const u=J(),v=h(()=>u.value.repo),f=h(()=>v.value?oo(v.value):null),_=h(()=>v.value&&!Pe(v.value)?`https://github.com/${v.value}`:v.value),y=h(()=>_.value?u.value.repoLabel?u.value.repoLabel:f.value===null?"Source":f.value:null);return h(()=>!_.value||!y.value?[]:[{text:y.value,link:_.value}])},n=u=>oe(u)?nt(u):u.children?{...u,children:u.children.map(n)}:u,r=()=>{const u=J();return h(()=>(u.value.navbar||[]).map(n))},s=C(!1),l=r(),a=t(),i=o(),c=h(()=>[...l.value,...a.value,...i.value]);return Z(()=>{const v=()=>{window.innerWidth<719?s.value=!0:s.value=!1};v(),window.addEventListener("resize",v,!1),window.addEventListener("orientationchange",v,!1)}),(u,v)=>m(c).length?(p(),b("nav",ha,[(p(!0),b(ee,null,me(m(c),f=>(p(),b("div",{key:f.text,class:"navbar-item"},[f.children?(p(),U(da,{key:0,item:f,class:ne(s.value?"mobile":"")},null,8,["item","class"])):(p(),U(ie,{key:1,item:f},null,8,["item"]))]))),128))])):M("v-if",!0)}}),no=z(ga,[["__file","NavbarItems.vue"]]),_a=["title"],ba={class:"icon",focusable:"false",viewBox:"0 0 32 32"},ya=Oo('',9),wa=[ya],La={class:"icon",focusable:"false",viewBox:"0 0 32 32"},ka=$("path",{d:"M13.502 5.414a15.075 15.075 0 0 0 11.594 18.194a11.113 11.113 0 0 1-7.975 3.39c-.138 0-.278.005-.418 0a11.094 11.094 0 0 1-3.2-21.584M14.98 3a1.002 1.002 0 0 0-.175.016a13.096 13.096 0 0 0 1.825 25.981c.164.006.328 0 .49 0a13.072 13.072 0 0 0 10.703-5.555a1.01 1.01 0 0 0-.783-1.565A13.08 13.08 0 0 1 15.89 4.38A1.015 1.015 0 0 0 14.98 3z",fill:"currentColor"},null,-1),Ea=[ka],Pa=I({__name:"ToggleColorModeButton",setup(e){const t=J(),o=ot(),n=()=>{o.value=!o.value};return(r,s)=>(p(),b("button",{class:"toggle-color-mode-button",title:m(t).toggleColorMode,onClick:n},[Ie((p(),b("svg",ba,wa,512)),[[$e,!m(o)]]),Ie((p(),b("svg",La,Ea,512)),[[$e,m(o)]])],8,_a))}}),Sa=z(Pa,[["__file","ToggleColorModeButton.vue"]]),Da=["title"],Ta=$("div",{class:"icon","aria-hidden":"true"},[$("span"),$("span"),$("span")],-1),Oa=[Ta],xa=I({__name:"ToggleSidebarButton",emits:["toggle"],setup(e){const t=J();return(o,n)=>(p(),b("div",{class:"toggle-sidebar-button",title:m(t).toggleSidebar,"aria-expanded":"false",role:"button",tabindex:"0",onClick:n[0]||(n[0]=r=>o.$emit("toggle"))},Oa,8,Da))}}),Ia=z(xa,[["__file","ToggleSidebarButton.vue"]]),$a=I({__name:"Navbar",emits:["toggle-sidebar"],setup(e){const t=J(),o=C(null),n=C(null),r=C(0),s=h(()=>r.value?{maxWidth:r.value+"px"}:{});Z(()=>{const i=l(o.value,"paddingLeft")+l(o.value,"paddingRight"),c=()=>{var u;window.innerWidth<719?r.value=0:r.value=o.value.offsetWidth-i-(((u=n.value)==null?void 0:u.offsetWidth)||0)};c(),window.addEventListener("resize",c,!1),window.addEventListener("orientationchange",c,!1)});function l(a,i){var v,f,_;const c=(_=(f=(v=a==null?void 0:a.ownerDocument)==null?void 0:v.defaultView)==null?void 0:f.getComputedStyle(a,null))==null?void 0:_[i],u=Number.parseInt(c,10);return Number.isNaN(u)?0:u}return(a,i)=>{const c=ce("NavbarSearch");return p(),b("header",{ref_key:"navbar",ref:o,class:"navbar"},[R(Ia,{onToggle:i[0]||(i[0]=u=>a.$emit("toggle-sidebar"))}),$("span",{ref_key:"navbarBrand",ref:n},[R(Xr)],512),$("div",{class:"navbar-items-wrapper",style:It(m(s))},[A(a.$slots,"before"),R(no,{class:"can-hide"}),A(a.$slots,"after"),m(t).colorModeSwitch?(p(),U(Sa,{key:0})):M("v-if",!0),R(c)],4)],512)}}}),Ca=z($a,[["__file","Navbar.vue"]]),Aa={class:"page-meta"},Ha={key:0,class:"meta-item edit-link"},Ra={key:1,class:"meta-item last-updated"},Na={class:"meta-item-label"},za={class:"meta-item-info"},Ba={key:2,class:"meta-item contributors"},Ma={class:"meta-item-label"},Fa={class:"meta-item-info"},Wa=["title"],Va=I({__name:"PageMeta",setup(e){const t=()=>{const i=J(),c=fe(),u=le();return h(()=>{if(!(u.value.editLink??i.value.editLink??!0))return null;const{repo:f,docsRepo:_=f,docsBranch:y="main",docsDir:L="",editLinkText:w}=i.value;if(!_)return null;const D=fa({docsRepo:_,docsBranch:y,docsDir:L,filePathRelative:c.value.filePathRelative,editLinkPattern:u.value.editLinkPattern??i.value.editLinkPattern});return D?{text:w??"Edit this page",link:D}:null})},o=()=>{const i=J(),c=fe(),u=le();return h(()=>{var _,y;return!(u.value.lastUpdated??i.value.lastUpdated??!0)||!((_=c.value.git)!=null&&_.updatedTime)?null:new Date((y=c.value.git)==null?void 0:y.updatedTime).toLocaleString()})},n=()=>{const i=J(),c=fe(),u=le();return h(()=>{var f;return u.value.contributors??i.value.contributors??!0?((f=c.value.git)==null?void 0:f.contributors)??null:null})},r=J(),s=t(),l=o(),a=n();return(i,c)=>{const u=ce("ClientOnly");return p(),b("footer",Aa,[m(s)?(p(),b("div",Ha,[R(ie,{class:"meta-item-label",item:m(s)},null,8,["item"])])):M("v-if",!0),m(l)?(p(),b("div",Ra,[$("span",Na,V(m(r).lastUpdatedText)+": ",1),R(u,null,{default:Q(()=>[$("span",za,V(m(l)),1)]),_:1})])):M("v-if",!0),m(a)&&m(a).length?(p(),b("div",Ba,[$("span",Ma,V(m(r).contributorsText)+": ",1),$("span",Fa,[(p(!0),b(ee,null,me(m(a),(v,f)=>(p(),b(ee,{key:f},[$("span",{class:"contributor",title:`email: ${v.email}`},V(v.name),9,Wa),f!==m(a).length-1?(p(),b(ee,{key:0},[ye(", ")],64)):M("v-if",!0)],64))),128))])])):M("v-if",!0)])}}}),ja=z(Va,[["__file","PageMeta.vue"]]),qa={key:0,class:"page-nav"},Ua={class:"inner"},Ga={key:0,class:"prev"},Ka={key:1,class:"next"},Qa=I({__name:"PageNav",setup(e){const t=i=>i===!1?null:oe(i)?nt(i):Je(i)?i:!1,o=(i,c,u)=>{const v=i.findIndex(f=>f.link===c);if(v!==-1){const f=i[v+u];return f!=null&&f.link?f:null}for(const f of i)if(f.children){const _=o(f.children,c,u);if(_)return _}return null},n=le(),r=rt(),s=ve(),l=h(()=>{const i=t(n.value.prev);return i!==!1?i:o(r.value,s.path,-1)}),a=h(()=>{const i=t(n.value.next);return i!==!1?i:o(r.value,s.path,1)});return(i,c)=>m(l)||m(a)?(p(),b("nav",qa,[$("p",Ua,[m(l)?(p(),b("span",Ga,[R(ie,{item:m(l)},null,8,["item"])])):M("v-if",!0),m(a)?(p(),b("span",Ka,[R(ie,{item:m(a)},null,8,["item"])])):M("v-if",!0)])])):M("v-if",!0)}}),Ya=z(Qa,[["__file","PageNav.vue"]]),Ja={class:"page"},Za={class:"theme-default-content"},Xa=I({__name:"Page",setup(e){return(t,o)=>{const n=ce("Content");return p(),b("main",Ja,[A(t.$slots,"top"),$("div",Za,[A(t.$slots,"content-top"),R(n),A(t.$slots,"content-bottom")]),R(ja),R(Ya),A(t.$slots,"bottom")])}}}),es=z(Xa,[["__file","Page.vue"]]),ts=["onKeydown"],os={class:"sidebar-item-children"},ns=I({__name:"SidebarItem",props:{item:{type:Object,required:!0},depth:{type:Number,required:!1,default:0}},setup(e){const t=e,{item:o,depth:n}=ze(t),r=ve(),s=he(),l=h(()=>to(o.value,r)),a=h(()=>({"sidebar-item":!0,"sidebar-heading":n.value===0,active:l.value,collapsible:o.value.collapsible})),i=h(()=>o.value.collapsible?l.value:!0),[c,u]=qn(i.value),v=_=>{o.value.collapsible&&(_.preventDefault(),u())},f=s.afterEach(_=>{Ye(()=>{c.value=i.value})});return Qe(()=>{f()}),(_,y)=>{var w;const L=ce("SidebarItem",!0);return p(),b("li",null,[m(o).link?(p(),U(ie,{key:0,class:ne(m(a)),item:m(o)},null,8,["class","item"])):(p(),b("p",{key:1,tabindex:"0",class:ne(m(a)),onClick:v,onKeydown:xo(v,["enter"])},[ye(V(m(o).text)+" ",1),m(o).collapsible?(p(),b("span",{key:0,class:ne(["arrow",m(c)?"down":"right"])},null,2)):M("v-if",!0)],42,ts)),(w=m(o).children)!=null&&w.length?(p(),U(eo,{key:2},{default:Q(()=>[Ie($("ul",os,[(p(!0),b(ee,null,me(m(o).children,D=>(p(),U(L,{key:`${m(n)}${D.text}${D.link}`,item:D,depth:m(n)+1},null,8,["item","depth"]))),128))],512),[[$e,m(c)]])]),_:1})):M("v-if",!0)])}}}),rs=z(ns,[["__file","SidebarItem.vue"]]),as={key:0,class:"sidebar-items"},ss=I({__name:"SidebarItems",setup(e){const t=ve(),o=rt();return Z(()=>{we(()=>t.hash,n=>{const r=document.querySelector(".sidebar");if(!r)return;const s=document.querySelector(`.sidebar a.sidebar-item[href="${t.path}${n}"]`);if(!s)return;const{top:l,height:a}=r.getBoundingClientRect(),{top:i,height:c}=s.getBoundingClientRect();il+a&&s.scrollIntoView(!1)})}),(n,r)=>m(o).length?(p(),b("ul",as,[(p(!0),b(ee,null,me(m(o),s=>(p(),U(rs,{key:`${s.text}${s.link}`,item:s},null,8,["item"]))),128))])):M("v-if",!0)}}),ls=z(ss,[["__file","SidebarItems.vue"]]),is={class:"sidebar"},cs=I({__name:"Sidebar",setup(e){return(t,o)=>(p(),b("aside",is,[R(no),A(t.$slots,"top"),R(ls),A(t.$slots,"bottom")]))}}),us=z(cs,[["__file","Sidebar.vue"]]),ds=I({__name:"Layout",setup(e){const t=fe(),o=le(),n=J(),r=h(()=>o.value.navbar!==!1&&n.value.navbar!==!1),s=rt(),l=C(!1),a=w=>{l.value=typeof w=="boolean"?w:!l.value},i={x:0,y:0},c=w=>{i.x=w.changedTouches[0].clientX,i.y=w.changedTouches[0].clientY},u=w=>{const D=w.changedTouches[0].clientX-i.x,H=w.changedTouches[0].clientY-i.y;Math.abs(D)>Math.abs(H)&&Math.abs(D)>40&&(D>0&&i.x<=80?a(!0):a(!1))},v=h(()=>[{"no-navbar":!r.value,"no-sidebar":!s.value.length,"sidebar-open":l.value},o.value.pageClass]);let f;Z(()=>{f=he().afterEach(()=>{a(!1)})}),$t(()=>{f()});const _=Jt(),y=_.resolve,L=_.pending;return(w,D)=>(p(),b("div",{class:ne(["theme-container",m(v)]),onTouchstart:c,onTouchend:u},[A(w.$slots,"navbar",{},()=>[m(r)?(p(),U(Ca,{key:0,onToggleSidebar:a},{before:Q(()=>[A(w.$slots,"navbar-before")]),after:Q(()=>[A(w.$slots,"navbar-after")]),_:3})):M("v-if",!0)]),$("div",{class:"sidebar-mask",onClick:D[0]||(D[0]=H=>a(!1))}),A(w.$slots,"sidebar",{},()=>[R(us,null,{top:Q(()=>[A(w.$slots,"sidebar-top")]),bottom:Q(()=>[A(w.$slots,"sidebar-bottom")]),_:3})]),A(w.$slots,"page",{},()=>[m(o).home?(p(),U(Jr,{key:0})):(p(),U(Be,{key:1,name:"fade-slide-y",mode:"out-in",onBeforeEnter:m(y),onBeforeLeave:m(L)},{default:Q(()=>[(p(),U(es,{key:m(t).path},{top:Q(()=>[A(w.$slots,"page-top")]),"content-top":Q(()=>[A(w.$slots,"page-content-top")]),"content-bottom":Q(()=>[A(w.$slots,"page-content-bottom")]),bottom:Q(()=>[A(w.$slots,"page-bottom")]),_:3}))]),_:3},8,["onBeforeEnter","onBeforeLeave"]))])],34))}}),ms=z(ds,[["__file","Layout.vue"]]),vs={class:"theme-container"},ps={class:"page"},fs={class:"theme-default-content"},hs=$("h1",null,"404",-1),gs=I({__name:"NotFound",setup(e){const t=Le(),o=J(),n=o.value.notFound??["Not Found"],r=()=>n[Math.floor(Math.random()*n.length)],s=o.value.home??t.value,l=o.value.backToHome??"Back to home";return(a,i)=>{const c=ce("RouterLink");return p(),b("div",vs,[$("main",ps,[$("div",fs,[hs,$("blockquote",null,V(r()),1),R(c,{to:m(s)},{default:Q(()=>[ye(V(m(l)),1)]),_:1},8,["to"])])])])}}}),_s=z(gs,[["__file","NotFound.vue"]]);const bs=ae({enhance({app:e,router:t}){e.component("Badge",In),e.component("CodeGroup",$n),e.component("CodeGroupItem",Rn),e.component("AutoLinkExternalIcon",()=>{const n=e.component("ExternalLinkIcon");return n?P(n):null}),e.component("NavbarSearch",()=>{const n=e.component("Docsearch")||e.component("SearchBox");return n?P(n):null});const o=t.options.scrollBehavior;t.options.scrollBehavior=async(...n)=>(await Jt().wait(),o(...n))},setup(){wr(),Er()},layouts:{Layout:ms,NotFound:_s}}),Pt=()=>window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,ys=()=>window.scrollTo({top:0,behavior:"smooth"});const ws=I({name:"BackToTop",setup(){const e=C(0),t=h(()=>e.value>300),o=Ft(()=>{e.value=Pt()},100);Z(()=>{e.value=Pt(),window.addEventListener("scroll",()=>o())});const n=P("div",{class:"back-to-top",onClick:ys});return()=>P(Be,{name:"back-to-top"},()=>t.value?n:null)}}),Ls=ae({rootComponents:[ws]}),ks=e=>e instanceof Element?document.activeElement===e&&(["TEXTAREA","SELECT","INPUT"].includes(e.tagName)||e.hasAttribute("contenteditable")):!1,Es=(e,t)=>t.some(o=>{if(oe(o))return o===e.key;const{key:n,ctrl:r=!1,shift:s=!1,alt:l=!1}=o;return n===e.key&&r===e.ctrlKey&&s===e.shiftKey&&l===e.altKey}),Ps=/[^\x00-\x7F]/,Ss=e=>e.split(/\s+/g).map(t=>t.trim()).filter(t=>!!t),St=e=>e.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),Dt=(e,t)=>{const o=t.join(" "),n=Ss(e);if(Ps.test(e))return n.some(l=>o.toLowerCase().indexOf(l)>-1);const r=e.endsWith(" ");return new RegExp(n.map((l,a)=>n.length===a+1&&!r?`(?=.*\\b${St(l)})`:`(?=.*\\b${St(l)}\\b)`).join("")+".+","gi").test(o)},Ds=({input:e,hotKeys:t})=>{if(t.value.length===0)return;const o=n=>{e.value&&Es(n,t.value)&&!ks(n.target)&&(n.preventDefault(),e.value.focus())};Z(()=>{document.addEventListener("keydown",o)}),Qe(()=>{document.removeEventListener("keydown",o)})},Ts=[{title:"",headers:[],path:"/",pathLocale:"/",extraFields:[]},{title:"",headers:[{level:2,title:"关于我们",slug:"关于我们",link:"#关于我们",children:[]}],path:"/About/",pathLocale:"/",extraFields:[]},{title:"简介",headers:[],path:"/PluginDocs/",pathLocale:"/",extraFields:[]},{title:"✨ 简介",headers:[{level:2,title:"🚧 | 简介",slug:"🚧-简介",link:"#🚧-简介",children:[]},{level:2,title:"🎉 | 特性",slug:"🎉-特性",link:"#🎉-特性",children:[]}],path:"/Docs/",pathLocale:"/",extraFields:[]},{title:"📖 快速上手",headers:[],path:"/Docs/Start.html",pathLocale:"/",extraFields:[]},{title:"",headers:[{level:2,title:"插件市场",slug:"插件市场",link:"#插件市场",children:[]}],path:"/PluginMarket/",pathLocale:"/",extraFields:[]},{title:"你好,HiperLink",headers:[],path:"/PluginDocs/Basic/Example.html",pathLocale:"/",extraFields:[]},{title:"插件目录格式",headers:[],path:"/PluginDocs/Basic/Format.html",pathLocale:"/",extraFields:[]},{title:"插件元数据",headers:[{level:2,title:"属性",slug:"属性",link:"#属性",children:[{level:3,title:"id",slug:"id",link:"#id",children:[]},{level:3,title:"version",slug:"version",link:"#version",children:[]},{level:3,title:"name",slug:"name",link:"#name",children:[]},{level:3,title:"description",slug:"description",link:"#description",children:[]},{level:3,title:"author",slug:"author",link:"#author",children:[]},{level:3,title:"link",slug:"link",link:"#link",children:[]},{level:3,title:"dependencies",slug:"dependencies",link:"#dependencies",children:[]},{level:3,title:"command",slug:"command",link:"#command",children:[]},{level:3,title:"args",slug:"args",link:"#args",children:[]},{level:3,title:"type",slug:"type",link:"#type",children:[]},{level:3,title:"root",slug:"root",link:"#root",children:[]},{level:3,title:"color",slug:"color",link:"#color",children:[]},{level:3,title:"icon",slug:"icon",link:"#icon",children:[]},{level:3,title:"frontend.ui",slug:"frontend-ui",link:"#frontend-ui",children:[]},{level:3,title:"frontend.configuration",slug:"frontend-configuration",link:"#frontend-configuration",children:[]}]},{level:2,title:"实例",slug:"实例",link:"#实例",children:[]}],path:"/PluginDocs/Basic/Metadata.html",pathLocale:"/",extraFields:[]},{title:"一些提示",headers:[],path:"/PluginDocs/Basic/Tips.html",pathLocale:"/",extraFields:[]},{title:"C#/.NET",headers:[],path:"/PluginDocs/HelloWorld/CSharp.html",pathLocale:"/",extraFields:[]},{title:"Golang",headers:[],path:"/PluginDocs/HelloWorld/Go.html",pathLocale:"/",extraFields:[]},{title:"Python",headers:[],path:"/PluginDocs/HelloWorld/Python.html",pathLocale:"/",extraFields:[]},{title:"Rust",headers:[],path:"/PluginDocs/HelloWorld/Rust.html",pathLocale:"/",extraFields:[]},{title:"后端",headers:[],path:"/PluginDocs/Web/Back.html",pathLocale:"/",extraFields:[]},{title:"前端",headers:[],path:"/PluginDocs/Web/",pathLocale:"/",extraFields:[]},{title:"交互",headers:[],path:"/PluginDocs/Web/Interaction.html",pathLocale:"/",extraFields:[]},{title:"",headers:[],path:"/404.html",pathLocale:"/",extraFields:[]}],Os=C(Ts),xs=()=>Os,Is=({searchIndex:e,routeLocale:t,query:o,maxSuggestions:n})=>{const r=h(()=>e.value.filter(s=>s.pathLocale===t.value));return h(()=>{const s=o.value.trim().toLowerCase();if(!s)return[];const l=[],a=(i,c)=>{Dt(s,[c.title])&&l.push({link:`${i.path}#${c.slug}`,title:i.title,header:c.title});for(const u of c.children){if(l.length>=n.value)return;a(i,u)}};for(const i of r.value){if(l.length>=n.value)break;if(Dt(s,[i.title,...i.extraFields])){l.push({link:i.path,title:i.title});continue}for(const c of i.headers){if(l.length>=n.value)break;a(i,c)}}return l})},$s=e=>{const t=C(0);return{focusIndex:t,focusNext:()=>{t.value{t.value>0?t.value-=1:t.value=e.value.length-1}}},Cs=I({name:"SearchBox",props:{locales:{type:Object,required:!1,default:()=>({})},hotKeys:{type:Array,required:!1,default:()=>[]},maxSuggestions:{type:Number,required:!1,default:5}},setup(e){const{locales:t,hotKeys:o,maxSuggestions:n}=ze(e),r=he(),s=Le(),l=xs(),a=C(null),i=C(!1),c=C(""),u=h(()=>t.value[s.value]??{}),v=Is({searchIndex:l,routeLocale:s,query:c,maxSuggestions:n}),{focusIndex:f,focusNext:_,focusPrev:y}=$s(v);Ds({input:a,hotKeys:o});const L=h(()=>i.value&&!!v.value.length),w=()=>{L.value&&y()},D=()=>{L.value&&_()},H=O=>{if(!L.value)return;const j=v.value[O];j&&r.push(j.link).then(()=>{c.value="",f.value=0})};return()=>P("form",{class:"search-box",role:"search"},[P("input",{ref:a,type:"search",placeholder:u.value.placeholder,autocomplete:"off",spellcheck:!1,value:c.value,onFocus:()=>i.value=!0,onBlur:()=>i.value=!1,onInput:O=>c.value=O.target.value,onKeydown:O=>{switch(O.key){case"ArrowUp":{w();break}case"ArrowDown":{D();break}case"Enter":{O.preventDefault(),H(f.value);break}}}}),L.value&&P("ul",{class:"suggestions",onMouseleave:()=>f.value=-1},v.value.map(({link:O,title:j,header:K},X)=>P("li",{class:["suggestion",{focus:f.value===X}],onMouseenter:()=>f.value=X,onMousedown:()=>H(X)},P("a",{href:O,onClick:g=>g.preventDefault()},[P("span",{class:"page-title"},j),K&&P("span",{class:"page-header"},`> ${K}`)]))))])}});const As={"/":{placeholder:"搜索"}},Hs=["s","/"],Rs=5,Ns=ae({enhance({app:e}){e.component("SearchBox",t=>P(Cs,{locales:As,hotKeys:Hs,maxSuggestions:Rs,...t}))}});function zs(e){return{all:e=e||new Map,on:function(t,o){var n=e.get(t);n?n.push(o):e.set(t,[o])},off:function(t,o){var n=e.get(t);n&&(o?n.splice(n.indexOf(o)>>>0,1):e.set(t,[]))},emit:function(t,o){var n=e.get(t);n&&n.slice().map(function(r){r(o)}),(n=e.get("*"))&&n.slice().map(function(r){r(t,o)})}}}const ro=Symbol("pwaEvent"),Bs=()=>{const e=re(ro);if(!e)throw new Error("usePwaEvent() is called without provider.");return e},Ms=e=>{const t=e.waiting;if(!t)return;const o=new MessageChannel;t.postMessage({type:"SKIP_WAITING"},[o.port2])},Fs="service-worker.js",Ws=ae({setup(){const e=(...o)=>console.log("[@vuepress/plugin-pwa]",...o),t=zs();Ne(ro,t),Z(async()=>{const{register:o}=await E(()=>import("./index-70769223.js"),[]);o(Me(Fs),{ready(n){e("Service worker is active."),t.emit("ready",n)},registered(n){e("Service worker has been registered."),t.emit("registered",n)},cached(n){e("Content has been cached for offline use."),t.emit("cached",n)},updatefound(n){e("New content is downloading."),t.emit("updatefound",n)},updated(n){e("New content is available, please refresh."),t.emit("updated",n)},offline(){e("No internet connection found. App is running in offline mode."),t.emit("offline")},error(n){e("Error during service worker registration:",n),t.emit("error",n)}})})}});const Vs=I({name:"PwaPopup",props:{locales:{type:Object,required:!1,default:()=>({})}},setup(e){const t=Bs(),o=Le(),n=h(()=>e.locales[o.value]??{message:"New content is available.",buttonText:"Refresh"}),r=C(!1),s=C(null),l=()=>{r.value=!1,s.value&&(Ms(s.value),location.reload(!0))};return t.on("updated",a=>{a&&(s.value=a,r.value=!0)}),()=>P(Be,{name:"pwa-popup"},()=>r.value?P("div",{class:"pwa-popup"},[n.value.message,P("br"),P("button",{onClick:l},n.value.buttonText)]):null)}}),js={"/":{message:"文档有更新",buttonText:"刷新"}},qs=ae({rootComponents:[I(()=>()=>P(Vs,{locales:js}))]}),Oe=[on,sn,bn,kn,On,bs,Ls,Ns,Ws,qs],Us=[["v-8daa1a0e","/",{title:""},["/index.html","/README.md"]],["v-3e214e9b","/About/",{title:""},["/About/index.html","/About/README.md"]],["v-6bc6c5b0","/PluginDocs/",{title:"简介"},["/PluginDocs/index.html","/PluginDocs/README.md"]],["v-12b535db","/Docs/",{title:"✨ 简介"},["/Docs/index.html","/Docs/README.md"]],["v-791cb41c","/Docs/Start.html",{title:"📖 快速上手"},["/Docs/Start","/Docs/Start.md"]],["v-7a6ec647","/PluginMarket/",{title:""},["/PluginMarket/index.html","/PluginMarket/README.md"]],["v-2dc44d58","/PluginDocs/Basic/Example.html",{title:"你好,HiperLink"},["/PluginDocs/Basic/Example","/PluginDocs/Basic/Example.md"]],["v-03604679","/PluginDocs/Basic/Format.html",{title:"插件目录格式"},["/PluginDocs/Basic/Format","/PluginDocs/Basic/Format.md"]],["v-09a21481","/PluginDocs/Basic/Metadata.html",{title:"插件元数据"},["/PluginDocs/Basic/Metadata","/PluginDocs/Basic/Metadata.md"]],["v-d3fda4d0","/PluginDocs/Basic/Tips.html",{title:"一些提示"},["/PluginDocs/Basic/Tips","/PluginDocs/Basic/Tips.md"]],["v-792a752a","/PluginDocs/HelloWorld/CSharp.html",{title:"C#/.NET"},["/PluginDocs/HelloWorld/CSharp","/PluginDocs/HelloWorld/CSharp.md"]],["v-391dc22c","/PluginDocs/HelloWorld/Go.html",{title:"Golang"},["/PluginDocs/HelloWorld/Go","/PluginDocs/HelloWorld/Go.md"]],["v-83a0a214","/PluginDocs/HelloWorld/Python.html",{title:"Python"},["/PluginDocs/HelloWorld/Python","/PluginDocs/HelloWorld/Python.md"]],["v-26ef11a4","/PluginDocs/HelloWorld/Rust.html",{title:"Rust"},["/PluginDocs/HelloWorld/Rust","/PluginDocs/HelloWorld/Rust.md"]],["v-f0b20222","/PluginDocs/Web/Back.html",{title:"后端"},["/PluginDocs/Web/Back","/PluginDocs/Web/Back.md"]],["v-02e2dca3","/PluginDocs/Web/",{title:"前端"},["/PluginDocs/Web/index.html","/PluginDocs/Web/Index.md"]],["v-7fade8ca","/PluginDocs/Web/Interaction.html",{title:"交互"},["/PluginDocs/Web/Interaction","/PluginDocs/Web/Interaction.md"]],["v-3706649a","/404.html",{title:""},["/404"]]];var Tt=I({name:"Vuepress",setup(){const e=qo();return()=>P(e.value)}}),Gs=()=>Us.reduce((e,[t,o,n,r])=>(e.push({name:t,path:o,component:Tt,meta:n},...r.map(s=>({path:s,redirect:o}))),e),[{name:"404",path:"/:catchAll(.*)",component:Tt}]),Ks=Ho,Qs=()=>{const e=Co({history:Ks(Ct("/")),routes:Gs(),scrollBehavior:(t,o,n)=>n||(t.hash?{el:t.hash}:{top:0})});return e.beforeResolve(async(t,o)=>{var n;(t.path!==o.path||o===Ao)&&([de.value]=await Promise.all([se.resolvePageData(t.name),(n=At[t.name])==null?void 0:n.__asyncLoader()]))}),e},Ys=e=>{e.component("ClientOnly",et),e.component("Content",Yo)},Js=(e,t,o)=>{const n=h(()=>se.resolveLayouts(o)),r=h(()=>se.resolveRouteLocale(be.value.locales,t.currentRoute.value.path)),s=h(()=>se.resolveSiteLocaleData(be.value,r.value)),l=h(()=>se.resolvePageFrontmatter(de.value)),a=h(()=>se.resolvePageHeadTitle(de.value,s.value)),i=h(()=>se.resolvePageHead(a.value,l.value,s.value)),c=h(()=>se.resolvePageLang(de.value)),u=h(()=>se.resolvePageLayout(de.value,n.value));return e.provide(Mo,n),e.provide(Rt,l),e.provide(Vo,a),e.provide(Nt,i),e.provide(zt,c),e.provide(Bt,u),e.provide(Ze,r),e.provide(Mt,s),Object.defineProperties(e.config.globalProperties,{$frontmatter:{get:()=>l.value},$head:{get:()=>i.value},$headTitle:{get:()=>a.value},$lang:{get:()=>c.value},$page:{get:()=>de.value},$routeLocale:{get:()=>r.value},$site:{get:()=>be.value},$siteLocale:{get:()=>s.value},$withBase:{get:()=>Me}}),{layouts:n,pageData:de,pageFrontmatter:l,pageHead:i,pageHeadTitle:a,pageLang:c,pageLayout:u,routeLocale:r,siteData:be,siteLocaleData:s}},Zs=()=>{const e=ve(),t=Wo(),o=jo(),n=C([]),r=()=>{t.value.forEach(l=>{const a=Xs(l);a&&n.value.push(a)})},s=()=>{document.documentElement.lang=o.value,n.value.forEach(l=>{l.parentNode===document.head&&document.head.removeChild(l)}),n.value.splice(0,n.value.length),t.value.forEach(l=>{const a=el(l);a!==null&&(document.head.appendChild(a),n.value.push(a))})};Ne(Go,s),Z(()=>{r(),s(),we(()=>e.path,()=>s())})},Xs=([e,t,o=""])=>{const n=Object.entries(t).map(([a,i])=>oe(i)?`[${a}=${JSON.stringify(i)}]`:i===!0?`[${a}]`:"").join(""),r=`head > ${e}${n}`;return Array.from(document.querySelectorAll(r)).find(a=>a.innerText===o)||null},el=([e,t,o])=>{if(!oe(e))return null;const n=document.createElement(e);return Je(t)&&Object.entries(t).forEach(([r,s])=>{oe(s)?n.setAttribute(r,s):s===!0&&n.setAttribute(r,"")}),oe(o)&&n.appendChild(document.createTextNode(o)),n},tl=Io,ol=async()=>{var o;const e=tl({name:"VuepressApp",setup(){var n;Zs();for(const r of Oe)(n=r.setup)==null||n.call(r);return()=>[P($o),...Oe.flatMap(({rootComponents:r=[]})=>r.map(s=>P(s)))]}}),t=Qs();Ys(e),Js(e,t,Oe);for(const n of Oe)await((o=n.enhance)==null?void 0:o.call(n,{app:e,router:t,siteData:be}));return e.use(t),{app:e,router:t}};ol().then(({app:e,router:t})=>{t.isReady().then(()=>{e.mount("#app")})});export{ol as createVueApp}; diff --git a/assets/back-to-top-8efcbe56.svg b/assets/back-to-top-8efcbe56.svg new file mode 100644 index 0000000..8323678 --- /dev/null +++ b/assets/back-to-top-8efcbe56.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/framework-cc651620.js b/assets/framework-cc651620.js new file mode 100644 index 0000000..f8a7852 --- /dev/null +++ b/assets/framework-cc651620.js @@ -0,0 +1,5 @@ +function fs(e,t){const n=Object.create(null),s=e.split(",");for(let r=0;r!!n[r.toLowerCase()]:r=>!!n[r]}function as(e){if(D(e)){const t={};for(let n=0;n{if(n){const s=n.split(Qi);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function ds(e){let t="";if(pe(e))t=e;else if(D(e))for(let n=0;npe(e)?e:e==null?"":D(e)||ue(e)&&(e.toString===kr||!V(e.toString))?JSON.stringify(e,Fr,2):String(e),Fr=(e,t)=>t&&t.__v_isRef?Fr(e,t.value):xt(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r])=>(n[`${s} =>`]=r,n),{})}:Nr(t)?{[`Set(${t.size})`]:[...t.values()]}:ue(t)&&!D(t)&&!$r(t)?String(t):t,ce={},Ct=[],He=()=>{},Gi=()=>!1,eo=/^on[^a-z]/,Gt=e=>eo.test(e),hs=e=>e.startsWith("onUpdate:"),ye=Object.assign,ps=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},to=Object.prototype.hasOwnProperty,te=(e,t)=>to.call(e,t),D=Array.isArray,xt=e=>Rn(e)==="[object Map]",Nr=e=>Rn(e)==="[object Set]",V=e=>typeof e=="function",pe=e=>typeof e=="string",gs=e=>typeof e=="symbol",ue=e=>e!==null&&typeof e=="object",Lr=e=>ue(e)&&V(e.then)&&V(e.catch),kr=Object.prototype.toString,Rn=e=>kr.call(e),no=e=>Rn(e).slice(8,-1),$r=e=>Rn(e)==="[object Object]",ms=e=>pe(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Dt=fs(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Pn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},so=/-(\w)/g,We=Pn(e=>e.replace(so,(t,n)=>n?n.toUpperCase():"")),ro=/\B([A-Z])/g,yt=Pn(e=>e.replace(ro,"-$1").toLowerCase()),An=Pn(e=>e.charAt(0).toUpperCase()+e.slice(1)),kn=Pn(e=>e?`on${An(e)}`:""),zt=(e,t)=>!Object.is(e,t),$n=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},ys=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let $s;const io=()=>$s||($s=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});let Re;class oo{constructor(t=!1){this.detached=t,this.active=!0,this.effects=[],this.cleanups=[],this.parent=Re,!t&&Re&&(this.index=(Re.scopes||(Re.scopes=[])).push(this)-1)}run(t){if(this.active){const n=Re;try{return Re=this,t()}finally{Re=n}}}on(){Re=this}off(){Re=this.parent}stop(t){if(this.active){let n,s;for(n=0,s=this.effects.length;n{const t=new Set(e);return t.w=0,t.n=0,t},Hr=e=>(e.w&rt)>0,jr=e=>(e.n&rt)>0,co=({deps:e})=>{if(e.length)for(let t=0;t{const{deps:t}=e;if(t.length){let n=0;for(let s=0;s{(f==="length"||f>=c)&&l.push(a)})}else switch(n!==void 0&&l.push(o.get(n)),t){case"add":D(e)?ms(n)&&l.push(o.get("length")):(l.push(o.get(gt)),xt(e)&&l.push(o.get(Xn)));break;case"delete":D(e)||(l.push(o.get(gt)),xt(e)&&l.push(o.get(Xn)));break;case"set":xt(e)&&l.push(o.get(gt));break}if(l.length===1)l[0]&&Zn(l[0]);else{const c=[];for(const a of l)a&&c.push(...a);Zn(_s(c))}}function Zn(e,t){const n=D(e)?e:[...e];for(const s of n)s.computed&&js(s);for(const s of n)s.computed||js(s)}function js(e,t){(e!==ke||e.allowRecurse)&&(e.scheduler?e.scheduler():e.run())}const fo=fs("__proto__,__v_isRef,__isVue"),Ur=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(gs)),ao=vs(),ho=vs(!1,!0),po=vs(!0),Bs=go();function go(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const s=ne(this);for(let i=0,o=this.length;i{e[t]=function(...n){Nt();const s=ne(this)[t].apply(this,n);return Lt(),s}}),e}function vs(e=!1,t=!1){return function(s,r,i){if(r==="__v_isReactive")return!e;if(r==="__v_isReadonly")return e;if(r==="__v_isShallow")return t;if(r==="__v_raw"&&i===(e?t?Mo:zr:t?Vr:qr).get(s))return s;const o=D(s);if(!e&&o&&te(Bs,r))return Reflect.get(Bs,r,i);const l=Reflect.get(s,r,i);return(gs(r)?Ur.has(r):fo(r))||(e||Ae(s,"get",r),t)?l:ge(l)?o&&ms(r)?l:l.value:ue(l)?e?Qr(l):en(l):l}}const mo=Kr(),yo=Kr(!0);function Kr(e=!1){return function(n,s,r,i){let o=n[s];if(Tt(o)&&ge(o)&&!ge(r))return!1;if(!e&&(!_n(r)&&!Tt(r)&&(o=ne(o),r=ne(r)),!D(n)&&ge(o)&&!ge(r)))return o.value=r,!0;const l=D(n)&&ms(s)?Number(s)e,Tn=e=>Reflect.getPrototypeOf(e);function rn(e,t,n=!1,s=!1){e=e.__v_raw;const r=ne(e),i=ne(t);n||(t!==i&&Ae(r,"get",t),Ae(r,"get",i));const{has:o}=Tn(r),l=s?Es:n?ws:Qt;if(o.call(r,t))return l(e.get(t));if(o.call(r,i))return l(e.get(i));e!==r&&e.get(t)}function on(e,t=!1){const n=this.__v_raw,s=ne(n),r=ne(e);return t||(e!==r&&Ae(s,"has",e),Ae(s,"has",r)),e===r?n.has(e):n.has(e)||n.has(r)}function ln(e,t=!1){return e=e.__v_raw,!t&&Ae(ne(e),"iterate",gt),Reflect.get(e,"size",e)}function Ds(e){e=ne(e);const t=ne(this);return Tn(t).has.call(t,e)||(t.add(e),ze(t,"add",e,e)),this}function Us(e,t){t=ne(t);const n=ne(this),{has:s,get:r}=Tn(n);let i=s.call(n,e);i||(e=ne(e),i=s.call(n,e));const o=r.call(n,e);return n.set(e,t),i?zt(t,o)&&ze(n,"set",e,t):ze(n,"add",e,t),this}function Ks(e){const t=ne(this),{has:n,get:s}=Tn(t);let r=n.call(t,e);r||(e=ne(e),r=n.call(t,e)),s&&s.call(t,e);const i=t.delete(e);return r&&ze(t,"delete",e,void 0),i}function Ws(){const e=ne(this),t=e.size!==0,n=e.clear();return t&&ze(e,"clear",void 0,void 0),n}function cn(e,t){return function(s,r){const i=this,o=i.__v_raw,l=ne(o),c=t?Es:e?ws:Qt;return!e&&Ae(l,"iterate",gt),o.forEach((a,f)=>s.call(r,c(a),c(f),i))}}function un(e,t,n){return function(...s){const r=this.__v_raw,i=ne(r),o=xt(i),l=e==="entries"||e===Symbol.iterator&&o,c=e==="keys"&&o,a=r[e](...s),f=n?Es:t?ws:Qt;return!t&&Ae(i,"iterate",c?Xn:gt),{next(){const{value:h,done:p}=a.next();return p?{value:h,done:p}:{value:l?[f(h[0]),f(h[1])]:f(h),done:p}},[Symbol.iterator](){return this}}}}function Ye(e){return function(...t){return e==="delete"?!1:this}}function xo(){const e={get(i){return rn(this,i)},get size(){return ln(this)},has:on,add:Ds,set:Us,delete:Ks,clear:Ws,forEach:cn(!1,!1)},t={get(i){return rn(this,i,!1,!0)},get size(){return ln(this)},has:on,add:Ds,set:Us,delete:Ks,clear:Ws,forEach:cn(!1,!0)},n={get(i){return rn(this,i,!0)},get size(){return ln(this,!0)},has(i){return on.call(this,i,!0)},add:Ye("add"),set:Ye("set"),delete:Ye("delete"),clear:Ye("clear"),forEach:cn(!0,!1)},s={get(i){return rn(this,i,!0,!0)},get size(){return ln(this,!0)},has(i){return on.call(this,i,!0)},add:Ye("add"),set:Ye("set"),delete:Ye("delete"),clear:Ye("clear"),forEach:cn(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(i=>{e[i]=un(i,!1,!1),n[i]=un(i,!0,!1),t[i]=un(i,!1,!0),s[i]=un(i,!0,!0)}),[e,n,t,s]}const[wo,Ro,Po,Ao]=xo();function Cs(e,t){const n=t?e?Ao:Po:e?Ro:wo;return(s,r,i)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get(te(n,r)&&r in s?n:s,r,i)}const To={get:Cs(!1,!1)},Oo={get:Cs(!1,!0)},So={get:Cs(!0,!1)},qr=new WeakMap,Vr=new WeakMap,zr=new WeakMap,Mo=new WeakMap;function Io(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Fo(e){return e.__v_skip||!Object.isExtensible(e)?0:Io(no(e))}function en(e){return Tt(e)?e:xs(e,!1,Wr,To,qr)}function No(e){return xs(e,!1,Co,Oo,Vr)}function Qr(e){return xs(e,!0,Eo,So,zr)}function xs(e,t,n,s,r){if(!ue(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=r.get(e);if(i)return i;const o=Fo(e);if(o===0)return e;const l=new Proxy(e,o===2?s:n);return r.set(e,l),l}function wt(e){return Tt(e)?wt(e.__v_raw):!!(e&&e.__v_isReactive)}function Tt(e){return!!(e&&e.__v_isReadonly)}function _n(e){return!!(e&&e.__v_isShallow)}function Yr(e){return wt(e)||Tt(e)}function ne(e){const t=e&&e.__v_raw;return t?ne(t):e}function Jr(e){return yn(e,"__v_skip",!0),e}const Qt=e=>ue(e)?en(e):e,ws=e=>ue(e)?Qr(e):e;function Xr(e){nt&&ke&&(e=ne(e),Dr(e.dep||(e.dep=_s())))}function Zr(e,t){e=ne(e),e.dep&&Zn(e.dep)}function ge(e){return!!(e&&e.__v_isRef===!0)}function hn(e){return Gr(e,!1)}function Lo(e){return Gr(e,!0)}function Gr(e,t){return ge(e)?e:new ko(e,t)}class ko{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:ne(t),this._value=n?t:Qt(t)}get value(){return Xr(this),this._value}set value(t){const n=this.__v_isShallow||_n(t)||Tt(t);t=n?t:ne(t),zt(t,this._rawValue)&&(this._rawValue=t,this._value=n?t:Qt(t),Zr(this))}}function Rt(e){return ge(e)?e.value:e}const $o={get:(e,t,n)=>Rt(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return ge(r)&&!ge(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function ei(e){return wt(e)?e:new Proxy(e,$o)}function Au(e){const t=D(e)?new Array(e.length):{};for(const n in e)t[n]=jo(e,n);return t}class Ho{constructor(t,n,s){this._object=t,this._key=n,this._defaultValue=s,this.__v_isRef=!0}get value(){const t=this._object[this._key];return t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}}function jo(e,t,n){const s=e[t];return ge(s)?s:new Ho(e,t,n)}var ti;class Bo{constructor(t,n,s,r){this._setter=n,this.dep=void 0,this.__v_isRef=!0,this[ti]=!1,this._dirty=!0,this.effect=new bs(t,()=>{this._dirty||(this._dirty=!0,Zr(this))}),this.effect.computed=this,this.effect.active=this._cacheable=!r,this.__v_isReadonly=s}get value(){const t=ne(this);return Xr(t),(t._dirty||!t._cacheable)&&(t._dirty=!1,t._value=t.effect.run()),t._value}set value(t){this._setter(t)}}ti="__v_isReadonly";function Do(e,t,n=!1){let s,r;const i=V(e);return i?(s=e,r=He):(s=e.get,r=e.set),new Bo(s,r,i||!r,n)}function st(e,t,n,s){let r;try{r=s?e(...s):e()}catch(i){tn(i,t,n)}return r}function Me(e,t,n,s){if(V(e)){const i=st(e,t,n,s);return i&&Lr(i)&&i.catch(o=>{tn(o,t,n)}),i}const r=[];for(let i=0;i>>1;Jt(be[s])Ke&&be.splice(t,1)}function qo(e){D(e)?Pt.push(...e):(!Ve||!Ve.includes(e,e.allowRecurse?at+1:at))&&Pt.push(e),ri()}function qs(e,t=Yt?Ke+1:0){for(;tJt(n)-Jt(s)),at=0;ate.id==null?1/0:e.id,Vo=(e,t)=>{const n=Jt(e)-Jt(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function ii(e){Gn=!1,Yt=!0,be.sort(Vo);const t=He;try{for(Ke=0;Kepe(y)?y.trim():y)),h&&(r=n.map(ys))}let l,c=s[l=kn(t)]||s[l=kn(We(t))];!c&&i&&(c=s[l=kn(yt(t))]),c&&Me(c,e,6,r);const a=s[l+"Once"];if(a){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,Me(a,e,6,r)}}function oi(e,t,n=!1){const s=t.emitsCache,r=s.get(e);if(r!==void 0)return r;const i=e.emits;let o={},l=!1;if(!V(e)){const c=a=>{const f=oi(a,t,!0);f&&(l=!0,ye(o,f))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!i&&!l?(ue(e)&&s.set(e,null),null):(D(i)?i.forEach(c=>o[c]=null):ye(o,i),ue(e)&&s.set(e,o),o)}function Sn(e,t){return!e||!Gt(t)?!1:(t=t.slice(2).replace(/Once$/,""),te(e,t[0].toLowerCase()+t.slice(1))||te(e,yt(t))||te(e,t))}let me=null,li=null;function vn(e){const t=me;return me=e,li=e&&e.type.__scopeId||null,t}function Qo(e,t=me,n){if(!t||e._n)return e;const s=(...r)=>{s._d&&tr(-1);const i=vn(t);let o;try{o=e(...r)}finally{vn(i),s._d&&tr(1)}return o};return s._n=!0,s._c=!0,s._d=!0,s}function Hn(e){const{type:t,vnode:n,proxy:s,withProxy:r,props:i,propsOptions:[o],slots:l,attrs:c,emit:a,render:f,renderCache:h,data:p,setupState:y,ctx:C,inheritAttrs:A}=e;let k,g;const _=vn(e);try{if(n.shapeFlag&4){const $=r||s;k=Le(f.call($,$,h,i,y,p,C)),g=c}else{const $=t;k=Le($.length>1?$(i,{attrs:c,slots:l,emit:a}):$(i,null)),g=t.props?c:Yo(c)}}catch($){Wt.length=0,tn($,e,1),k=ae(Pe)}let P=k;if(g&&A!==!1){const $=Object.keys(g),{shapeFlag:U}=P;$.length&&U&7&&(o&&$.some(hs)&&(g=Jo(g,o)),P=it(P,g))}return n.dirs&&(P=it(P),P.dirs=P.dirs?P.dirs.concat(n.dirs):n.dirs),n.transition&&(P.transition=n.transition),k=P,vn(_),k}const Yo=e=>{let t;for(const n in e)(n==="class"||n==="style"||Gt(n))&&((t||(t={}))[n]=e[n]);return t},Jo=(e,t)=>{const n={};for(const s in e)(!hs(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function Xo(e,t,n){const{props:s,children:r,component:i}=e,{props:o,children:l,patchFlag:c}=t,a=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return s?Vs(s,o,a):!!o;if(c&8){const f=t.dynamicProps;for(let h=0;he.__isSuspense;function ci(e,t){t&&t.pendingBranch?D(e)?t.effects.push(...e):t.effects.push(e):qo(e)}function pn(e,t){if(he){let n=he.provides;const s=he.parent&&he.parent.provides;s===n&&(n=he.provides=Object.create(s)),n[e]=t}}function je(e,t,n=!1){const s=he||me;if(s){const r=s.parent==null?s.vnode.appContext&&s.vnode.appContext.provides:s.parent.provides;if(r&&e in r)return r[e];if(arguments.length>1)return n&&V(t)?t.call(s.proxy):t}}function Tu(e,t){return Ps(e,null,t)}const fn={};function gn(e,t,n){return Ps(e,t,n)}function Ps(e,t,{immediate:n,deep:s,flush:r,onTrack:i,onTrigger:o}=ce){const l=he;let c,a=!1,f=!1;if(ge(e)?(c=()=>e.value,a=_n(e)):wt(e)?(c=()=>e,s=!0):D(e)?(f=!0,a=e.some(P=>wt(P)||_n(P)),c=()=>e.map(P=>{if(ge(P))return P.value;if(wt(P))return pt(P);if(V(P))return st(P,l,2)})):V(e)?t?c=()=>st(e,l,2):c=()=>{if(!(l&&l.isUnmounted))return h&&h(),Me(e,l,3,[p])}:c=He,t&&s){const P=c;c=()=>pt(P())}let h,p=P=>{h=g.onStop=()=>{st(P,l,4)}},y;if(Mt)if(p=He,t?n&&Me(t,l,3,[c(),f?[]:void 0,p]):c(),r==="sync"){const P=Ql();y=P.__watcherHandles||(P.__watcherHandles=[])}else return He;let C=f?new Array(e.length).fill(fn):fn;const A=()=>{if(g.active)if(t){const P=g.run();(s||a||(f?P.some(($,U)=>zt($,C[U])):zt(P,C)))&&(h&&h(),Me(t,l,3,[P,C===fn?void 0:f&&C[0]===fn?[]:C,p]),C=P)}else g.run()};A.allowRecurse=!!t;let k;r==="sync"?k=A:r==="post"?k=()=>Ce(A,l&&l.suspense):(A.pre=!0,l&&(A.id=l.uid),k=()=>On(A));const g=new bs(c,k);t?n?A():C=g.run():r==="post"?Ce(g.run.bind(g),l&&l.suspense):g.run();const _=()=>{g.stop(),l&&l.scope&&ps(l.scope.effects,g)};return y&&y.push(_),_}function el(e,t,n){const s=this.proxy,r=pe(e)?e.includes(".")?ui(s,e):()=>s[e]:e.bind(s,s);let i;V(t)?i=t:(i=t.handler,n=t);const o=he;St(this);const l=Ps(r,i.bind(s),n);return o?St(o):mt(),l}function ui(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;r{pt(n,t)});else if($r(e))for(const n in e)pt(e[n],t);return e}function tl(){const e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return pi(()=>{e.isMounted=!0}),gi(()=>{e.isUnmounting=!0}),e}const Te=[Function,Array],nl={name:"BaseTransition",props:{mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Te,onEnter:Te,onAfterEnter:Te,onEnterCancelled:Te,onBeforeLeave:Te,onLeave:Te,onAfterLeave:Te,onLeaveCancelled:Te,onBeforeAppear:Te,onAppear:Te,onAfterAppear:Te,onAppearCancelled:Te},setup(e,{slots:t}){const n=Bl(),s=tl();let r;return()=>{const i=t.default&&di(t.default(),!0);if(!i||!i.length)return;let o=i[0];if(i.length>1){for(const A of i)if(A.type!==Pe){o=A;break}}const l=ne(e),{mode:c}=l;if(s.isLeaving)return jn(o);const a=zs(o);if(!a)return jn(o);const f=es(a,l,s,n);ts(a,f);const h=n.subTree,p=h&&zs(h);let y=!1;const{getTransitionKey:C}=a.type;if(C){const A=C();r===void 0?r=A:A!==r&&(r=A,y=!0)}if(p&&p.type!==Pe&&(!dt(a,p)||y)){const A=es(p,l,s,n);if(ts(p,A),c==="out-in")return s.isLeaving=!0,A.afterLeave=()=>{s.isLeaving=!1,n.update.active!==!1&&n.update()},jn(o);c==="in-out"&&a.type!==Pe&&(A.delayLeave=(k,g,_)=>{const P=ai(s,p);P[String(p.key)]=p,k._leaveCb=()=>{g(),k._leaveCb=void 0,delete f.delayedLeave},f.delayedLeave=_})}return o}}},fi=nl;function ai(e,t){const{leavingVNodes:n}=e;let s=n.get(t.type);return s||(s=Object.create(null),n.set(t.type,s)),s}function es(e,t,n,s){const{appear:r,mode:i,persisted:o=!1,onBeforeEnter:l,onEnter:c,onAfterEnter:a,onEnterCancelled:f,onBeforeLeave:h,onLeave:p,onAfterLeave:y,onLeaveCancelled:C,onBeforeAppear:A,onAppear:k,onAfterAppear:g,onAppearCancelled:_}=t,P=String(e.key),$=ai(n,e),U=(S,q)=>{S&&Me(S,s,9,q)},J=(S,q)=>{const K=q[1];U(S,q),D(S)?S.every(Z=>Z.length<=1)&&K():S.length<=1&&K()},z={mode:i,persisted:o,beforeEnter(S){let q=l;if(!n.isMounted)if(r)q=A||l;else return;S._leaveCb&&S._leaveCb(!0);const K=$[P];K&&dt(e,K)&&K.el._leaveCb&&K.el._leaveCb(),U(q,[S])},enter(S){let q=c,K=a,Z=f;if(!n.isMounted)if(r)q=k||c,K=g||a,Z=_||f;else return;let F=!1;const Q=S._enterCb=L=>{F||(F=!0,L?U(Z,[S]):U(K,[S]),z.delayedLeave&&z.delayedLeave(),S._enterCb=void 0)};q?J(q,[S,Q]):Q()},leave(S,q){const K=String(e.key);if(S._enterCb&&S._enterCb(!0),n.isUnmounting)return q();U(h,[S]);let Z=!1;const F=S._leaveCb=Q=>{Z||(Z=!0,q(),Q?U(C,[S]):U(y,[S]),S._leaveCb=void 0,$[K]===e&&delete $[K])};$[K]=e,p?J(p,[S,F]):F()},clone(S){return es(S,t,n,s)}};return z}function jn(e){if(nn(e))return e=it(e),e.children=null,e}function zs(e){return nn(e)?e.children?e.children[0]:void 0:e}function ts(e,t){e.shapeFlag&6&&e.component?ts(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function di(e,t=!1,n){let s=[],r=0;for(let i=0;i1)for(let i=0;i!!e.type.__asyncLoader;function Ou(e){V(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:s,delay:r=200,timeout:i,suspensible:o=!0,onError:l}=e;let c=null,a,f=0;const h=()=>(f++,c=null,p()),p=()=>{let y;return c||(y=c=t().catch(C=>{if(C=C instanceof Error?C:new Error(String(C)),l)return new Promise((A,k)=>{l(C,()=>A(h()),()=>k(C),f+1)});throw C}).then(C=>y!==c&&c?c:(C&&(C.__esModule||C[Symbol.toStringTag]==="Module")&&(C=C.default),a=C,C)))};return As({name:"AsyncComponentWrapper",__asyncLoader:p,get __asyncResolved(){return a},setup(){const y=he;if(a)return()=>Bn(a,y);const C=_=>{c=null,tn(_,y,13,!s)};if(o&&y.suspense||Mt)return p().then(_=>()=>Bn(_,y)).catch(_=>(C(_),()=>s?ae(s,{error:_}):null));const A=hn(!1),k=hn(),g=hn(!!r);return r&&setTimeout(()=>{g.value=!1},r),i!=null&&setTimeout(()=>{if(!A.value&&!k.value){const _=new Error(`Async component timed out after ${i}ms.`);C(_),k.value=_}},i),p().then(()=>{A.value=!0,y.parent&&nn(y.parent.vnode)&&On(y.parent.update)}).catch(_=>{C(_),k.value=_}),()=>{if(A.value&&a)return Bn(a,y);if(k.value&&s)return ae(s,{error:k.value});if(n&&!g.value)return ae(n)}}})}function Bn(e,t){const{ref:n,props:s,children:r,ce:i}=t.vnode,o=ae(e,s,r);return o.ref=n,o.ce=i,delete t.vnode.ce,o}const nn=e=>e.type.__isKeepAlive;function sl(e,t){hi(e,"a",t)}function rl(e,t){hi(e,"da",t)}function hi(e,t,n=he){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(Mn(t,s,n),n){let r=n.parent;for(;r&&r.parent;)nn(r.parent.vnode)&&il(s,t,n,r),r=r.parent}}function il(e,t,n,s){const r=Mn(t,e,s,!0);mi(()=>{ps(s[t],r)},n)}function Mn(e,t,n=he,s=!1){if(n){const r=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{if(n.isUnmounted)return;Nt(),St(n);const l=Me(t,n,e,o);return mt(),Lt(),l});return s?r.unshift(i):r.push(i),i}}const Qe=e=>(t,n=he)=>(!Mt||e==="sp")&&Mn(e,(...s)=>t(...s),n),ol=Qe("bm"),pi=Qe("m"),ll=Qe("bu"),cl=Qe("u"),gi=Qe("bum"),mi=Qe("um"),ul=Qe("sp"),fl=Qe("rtg"),al=Qe("rtc");function dl(e,t=he){Mn("ec",e,t)}function Su(e,t){const n=me;if(n===null)return e;const s=Fn(n)||n.proxy,r=e.dirs||(e.dirs=[]);for(let i=0;it(o,l,void 0,i&&i[l]));else{const o=Object.keys(e);r=new Array(o.length);for(let l=0,c=o.length;lxn(t)?!(t.type===Pe||t.type===xe&&!_i(t.children)):!0)?e:null}const ns=e=>e?Fi(e)?Fn(e)||e.proxy:ns(e.parent):null,Ut=ye(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>ns(e.parent),$root:e=>ns(e.root),$emit:e=>e.emit,$options:e=>Ts(e),$forceUpdate:e=>e.f||(e.f=()=>On(e.update)),$nextTick:e=>e.n||(e.n=si.bind(e.proxy)),$watch:e=>el.bind(e)}),Dn=(e,t)=>e!==ce&&!e.__isScriptSetup&&te(e,t),gl={get({_:e},t){const{ctx:n,setupState:s,data:r,props:i,accessCache:o,type:l,appContext:c}=e;let a;if(t[0]!=="$"){const y=o[t];if(y!==void 0)switch(y){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return i[t]}else{if(Dn(s,t))return o[t]=1,s[t];if(r!==ce&&te(r,t))return o[t]=2,r[t];if((a=e.propsOptions[0])&&te(a,t))return o[t]=3,i[t];if(n!==ce&&te(n,t))return o[t]=4,n[t];ss&&(o[t]=0)}}const f=Ut[t];let h,p;if(f)return t==="$attrs"&&Ae(e,"get",t),f(e);if((h=l.__cssModules)&&(h=h[t]))return h;if(n!==ce&&te(n,t))return o[t]=4,n[t];if(p=c.config.globalProperties,te(p,t))return p[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:i}=e;return Dn(r,t)?(r[t]=n,!0):s!==ce&&te(s,t)?(s[t]=n,!0):te(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,propsOptions:i}},o){let l;return!!n[o]||e!==ce&&te(e,o)||Dn(t,o)||(l=i[0])&&te(l,o)||te(s,o)||te(Ut,o)||te(r.config.globalProperties,o)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:te(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};let ss=!0;function ml(e){const t=Ts(e),n=e.proxy,s=e.ctx;ss=!1,t.beforeCreate&&Ys(t.beforeCreate,e,"bc");const{data:r,computed:i,methods:o,watch:l,provide:c,inject:a,created:f,beforeMount:h,mounted:p,beforeUpdate:y,updated:C,activated:A,deactivated:k,beforeDestroy:g,beforeUnmount:_,destroyed:P,unmounted:$,render:U,renderTracked:J,renderTriggered:z,errorCaptured:S,serverPrefetch:q,expose:K,inheritAttrs:Z,components:F,directives:Q,filters:L}=t;if(a&&yl(a,s,null,e.appContext.config.unwrapInjectedRef),o)for(const oe in o){const re=o[oe];V(re)&&(s[oe]=re.bind(n))}if(r){const oe=r.call(n,n);ue(oe)&&(e.data=en(oe))}if(ss=!0,i)for(const oe in i){const re=i[oe],Ie=V(re)?re.bind(n,n):V(re.get)?re.get.bind(n,n):He,ot=!V(re)&&V(re.set)?re.set.bind(n):He,Fe=Se({get:Ie,set:ot});Object.defineProperty(s,oe,{enumerable:!0,configurable:!0,get:()=>Fe.value,set:Ee=>Fe.value=Ee})}if(l)for(const oe in l)bi(l[oe],s,n,oe);if(c){const oe=V(c)?c.call(n):c;Reflect.ownKeys(oe).forEach(re=>{pn(re,oe[re])})}f&&Ys(f,e,"c");function G(oe,re){D(re)?re.forEach(Ie=>oe(Ie.bind(n))):re&&oe(re.bind(n))}if(G(ol,h),G(pi,p),G(ll,y),G(cl,C),G(sl,A),G(rl,k),G(dl,S),G(al,J),G(fl,z),G(gi,_),G(mi,$),G(ul,q),D(K))if(K.length){const oe=e.exposed||(e.exposed={});K.forEach(re=>{Object.defineProperty(oe,re,{get:()=>n[re],set:Ie=>n[re]=Ie})})}else e.exposed||(e.exposed={});U&&e.render===He&&(e.render=U),Z!=null&&(e.inheritAttrs=Z),F&&(e.components=F),Q&&(e.directives=Q)}function yl(e,t,n=He,s=!1){D(e)&&(e=rs(e));for(const r in e){const i=e[r];let o;ue(i)?"default"in i?o=je(i.from||r,i.default,!0):o=je(i.from||r):o=je(i),ge(o)&&s?Object.defineProperty(t,r,{enumerable:!0,configurable:!0,get:()=>o.value,set:l=>o.value=l}):t[r]=o}}function Ys(e,t,n){Me(D(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function bi(e,t,n,s){const r=s.includes(".")?ui(n,s):()=>n[s];if(pe(e)){const i=t[e];V(i)&&gn(r,i)}else if(V(e))gn(r,e.bind(n));else if(ue(e))if(D(e))e.forEach(i=>bi(i,t,n,s));else{const i=V(e.handler)?e.handler.bind(n):t[e.handler];V(i)&&gn(r,i,e)}}function Ts(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:i,config:{optionMergeStrategies:o}}=e.appContext,l=i.get(t);let c;return l?c=l:!r.length&&!n&&!s?c=t:(c={},r.length&&r.forEach(a=>En(c,a,o,!0)),En(c,t,o)),ue(t)&&i.set(t,c),c}function En(e,t,n,s=!1){const{mixins:r,extends:i}=t;i&&En(e,i,n,!0),r&&r.forEach(o=>En(e,o,n,!0));for(const o in t)if(!(s&&o==="expose")){const l=_l[o]||n&&n[o];e[o]=l?l(e[o],t[o]):t[o]}return e}const _l={data:Js,props:ft,emits:ft,methods:ft,computed:ft,beforeCreate:ve,created:ve,beforeMount:ve,mounted:ve,beforeUpdate:ve,updated:ve,beforeDestroy:ve,beforeUnmount:ve,destroyed:ve,unmounted:ve,activated:ve,deactivated:ve,errorCaptured:ve,serverPrefetch:ve,components:ft,directives:ft,watch:vl,provide:Js,inject:bl};function Js(e,t){return t?e?function(){return ye(V(e)?e.call(this,this):e,V(t)?t.call(this,this):t)}:t:e}function bl(e,t){return ft(rs(e),rs(t))}function rs(e){if(D(e)){const t={};for(let n=0;n0)&&!(o&16)){if(o&8){const f=e.vnode.dynamicProps;for(let h=0;h{c=!0;const[p,y]=Ei(h,t,!0);ye(o,p),y&&l.push(...y)};!n&&t.mixins.length&&t.mixins.forEach(f),e.extends&&f(e.extends),e.mixins&&e.mixins.forEach(f)}if(!i&&!c)return ue(e)&&s.set(e,Ct),Ct;if(D(i))for(let f=0;f-1,y[1]=A<0||C-1||te(y,"default"))&&l.push(h)}}}const a=[o,l];return ue(e)&&s.set(e,a),a}function Xs(e){return e[0]!=="$"}function Zs(e){const t=e&&e.toString().match(/^\s*function (\w+)/);return t?t[1]:e===null?"null":""}function Gs(e,t){return Zs(e)===Zs(t)}function er(e,t){return D(t)?t.findIndex(n=>Gs(n,e)):V(t)&&Gs(t,e)?0:-1}const Ci=e=>e[0]==="_"||e==="$stable",Os=e=>D(e)?e.map(Le):[Le(e)],xl=(e,t,n)=>{if(t._n)return t;const s=Qo((...r)=>Os(t(...r)),n);return s._c=!1,s},xi=(e,t,n)=>{const s=e._ctx;for(const r in e){if(Ci(r))continue;const i=e[r];if(V(i))t[r]=xl(r,i,s);else if(i!=null){const o=Os(i);t[r]=()=>o}}},wi=(e,t)=>{const n=Os(t);e.slots.default=()=>n},wl=(e,t)=>{if(e.vnode.shapeFlag&32){const n=t._;n?(e.slots=ne(t),yn(t,"_",n)):xi(t,e.slots={})}else e.slots={},t&&wi(e,t);yn(e.slots,In,1)},Rl=(e,t,n)=>{const{vnode:s,slots:r}=e;let i=!0,o=ce;if(s.shapeFlag&32){const l=t._;l?n&&l===1?i=!1:(ye(r,t),!n&&l===1&&delete r._):(i=!t.$stable,xi(t,r)),o=t}else t&&(wi(e,t),o={default:1});if(i)for(const l in r)!Ci(l)&&!(l in o)&&delete r[l]};function Ri(){return{app:null,config:{isNativeTag:Gi,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}let Pl=0;function Al(e,t){return function(s,r=null){V(s)||(s=Object.assign({},s)),r!=null&&!ue(r)&&(r=null);const i=Ri(),o=new Set;let l=!1;const c=i.app={_uid:Pl++,_component:s,_props:r,_container:null,_context:i,_instance:null,version:Yl,get config(){return i.config},set config(a){},use(a,...f){return o.has(a)||(a&&V(a.install)?(o.add(a),a.install(c,...f)):V(a)&&(o.add(a),a(c,...f))),c},mixin(a){return i.mixins.includes(a)||i.mixins.push(a),c},component(a,f){return f?(i.components[a]=f,c):i.components[a]},directive(a,f){return f?(i.directives[a]=f,c):i.directives[a]},mount(a,f,h){if(!l){const p=ae(s,r);return p.appContext=i,f&&t?t(p,a):e(p,a,h),l=!0,c._container=a,a.__vue_app__=c,Fn(p.component)||p.component.proxy}},unmount(){l&&(e(null,c._container),delete c._container.__vue_app__)},provide(a,f){return i.provides[a]=f,c}};return c}}function Cn(e,t,n,s,r=!1){if(D(e)){e.forEach((p,y)=>Cn(p,t&&(D(t)?t[y]:t),n,s,r));return}if(At(s)&&!r)return;const i=s.shapeFlag&4?Fn(s.component)||s.component.proxy:s.el,o=r?null:i,{i:l,r:c}=e,a=t&&t.r,f=l.refs===ce?l.refs={}:l.refs,h=l.setupState;if(a!=null&&a!==c&&(pe(a)?(f[a]=null,te(h,a)&&(h[a]=null)):ge(a)&&(a.value=null)),V(c))st(c,l,12,[o,f]);else{const p=pe(c),y=ge(c);if(p||y){const C=()=>{if(e.f){const A=p?te(h,c)?h[c]:f[c]:c.value;r?D(A)&&ps(A,i):D(A)?A.includes(i)||A.push(i):p?(f[c]=[i],te(h,c)&&(h[c]=f[c])):(c.value=[i],e.k&&(f[e.k]=c.value))}else p?(f[c]=o,te(h,c)&&(h[c]=o)):y&&(c.value=o,e.k&&(f[e.k]=o))};o?(C.id=-1,Ce(C,n)):C()}}}let Je=!1;const an=e=>/svg/.test(e.namespaceURI)&&e.tagName!=="foreignObject",dn=e=>e.nodeType===8;function Tl(e){const{mt:t,p:n,o:{patchProp:s,createText:r,nextSibling:i,parentNode:o,remove:l,insert:c,createComment:a}}=e,f=(g,_)=>{if(!_.hasChildNodes()){n(null,g,_),bn(),_._vnode=g;return}Je=!1,h(_.firstChild,g,null,null,null),bn(),_._vnode=g,Je&&console.error("Hydration completed but contains mismatches.")},h=(g,_,P,$,U,J=!1)=>{const z=dn(g)&&g.data==="[",S=()=>A(g,_,P,$,U,z),{type:q,ref:K,shapeFlag:Z,patchFlag:F}=_;let Q=g.nodeType;_.el=g,F===-2&&(J=!1,_.dynamicChildren=null);let L=null;switch(q){case Ot:Q!==3?_.children===""?(c(_.el=r(""),o(g),g),L=g):L=S():(g.data!==_.children&&(Je=!0,g.data=_.children),L=i(g));break;case Pe:Q!==8||z?L=S():L=i(g);break;case Kt:if(z&&(g=i(g),Q=g.nodeType),Q===1||Q===3){L=g;const _e=!_.children.length;for(let G=0;G<_.staticCount;G++)_e&&(_.children+=L.nodeType===1?L.outerHTML:L.data),G===_.staticCount-1&&(_.anchor=L),L=i(L);return z?i(L):L}else S();break;case xe:z?L=C(g,_,P,$,U,J):L=S();break;default:if(Z&1)Q!==1||_.type.toLowerCase()!==g.tagName.toLowerCase()?L=S():L=p(g,_,P,$,U,J);else if(Z&6){_.slotScopeIds=U;const _e=o(g);if(t(_,_e,null,P,$,an(_e),J),L=z?k(g):i(g),L&&dn(L)&&L.data==="teleport end"&&(L=i(L)),At(_)){let G;z?(G=ae(xe),G.anchor=L?L.previousSibling:_e.lastChild):G=g.nodeType===3?Ii(""):ae("div"),G.el=g,_.component.subTree=G}}else Z&64?Q!==8?L=S():L=_.type.hydrate(g,_,P,$,U,J,e,y):Z&128&&(L=_.type.hydrate(g,_,P,$,an(o(g)),U,J,e,h))}return K!=null&&Cn(K,null,$,_),L},p=(g,_,P,$,U,J)=>{J=J||!!_.dynamicChildren;const{type:z,props:S,patchFlag:q,shapeFlag:K,dirs:Z}=_,F=z==="input"&&Z||z==="option";if(F||q!==-1){if(Z&&Ue(_,null,P,"created"),S)if(F||!J||q&48)for(const L in S)(F&&L.endsWith("value")||Gt(L)&&!Dt(L))&&s(g,L,null,S[L],!1,void 0,P);else S.onClick&&s(g,"onClick",null,S.onClick,!1,void 0,P);let Q;if((Q=S&&S.onVnodeBeforeMount)&&Oe(Q,P,_),Z&&Ue(_,null,P,"beforeMount"),((Q=S&&S.onVnodeMounted)||Z)&&ci(()=>{Q&&Oe(Q,P,_),Z&&Ue(_,null,P,"mounted")},$),K&16&&!(S&&(S.innerHTML||S.textContent))){let L=y(g.firstChild,_,g,P,$,U,J);for(;L;){Je=!0;const _e=L;L=L.nextSibling,l(_e)}}else K&8&&g.textContent!==_.children&&(Je=!0,g.textContent=_.children)}return g.nextSibling},y=(g,_,P,$,U,J,z)=>{z=z||!!_.dynamicChildren;const S=_.children,q=S.length;for(let K=0;K{const{slotScopeIds:z}=_;z&&(U=U?U.concat(z):z);const S=o(g),q=y(i(g),_,S,P,$,U,J);return q&&dn(q)&&q.data==="]"?i(_.anchor=q):(Je=!0,c(_.anchor=a("]"),S,q),q)},A=(g,_,P,$,U,J)=>{if(Je=!0,_.el=null,J){const q=k(g);for(;;){const K=i(g);if(K&&K!==q)l(K);else break}}const z=i(g),S=o(g);return l(g),n(null,_,S,z,P,$,an(S),U),z},k=g=>{let _=0;for(;g;)if(g=i(g),g&&dn(g)&&(g.data==="["&&_++,g.data==="]")){if(_===0)return i(g);_--}return g};return[f,h]}const Ce=ci;function Ol(e){return Sl(e,Tl)}function Sl(e,t){const n=io();n.__VUE__=!0;const{insert:s,remove:r,patchProp:i,createElement:o,createText:l,createComment:c,setText:a,setElementText:f,parentNode:h,nextSibling:p,setScopeId:y=He,insertStaticContent:C}=e,A=(u,d,m,b=null,E=null,R=null,M=!1,w=null,T=!!d.dynamicChildren)=>{if(u===d)return;u&&!dt(u,d)&&(b=O(u),Ee(u,E,R,!0),u=null),d.patchFlag===-2&&(T=!1,d.dynamicChildren=null);const{type:x,ref:j,shapeFlag:N}=d;switch(x){case Ot:k(u,d,m,b);break;case Pe:g(u,d,m,b);break;case Kt:u==null&&_(d,m,b,M);break;case xe:F(u,d,m,b,E,R,M,w,T);break;default:N&1?U(u,d,m,b,E,R,M,w,T):N&6?Q(u,d,m,b,E,R,M,w,T):(N&64||N&128)&&x.process(u,d,m,b,E,R,M,w,T,ee)}j!=null&&E&&Cn(j,u&&u.ref,R,d||u,!d)},k=(u,d,m,b)=>{if(u==null)s(d.el=l(d.children),m,b);else{const E=d.el=u.el;d.children!==u.children&&a(E,d.children)}},g=(u,d,m,b)=>{u==null?s(d.el=c(d.children||""),m,b):d.el=u.el},_=(u,d,m,b)=>{[u.el,u.anchor]=C(u.children,d,m,b,u.el,u.anchor)},P=({el:u,anchor:d},m,b)=>{let E;for(;u&&u!==d;)E=p(u),s(u,m,b),u=E;s(d,m,b)},$=({el:u,anchor:d})=>{let m;for(;u&&u!==d;)m=p(u),r(u),u=m;r(d)},U=(u,d,m,b,E,R,M,w,T)=>{M=M||d.type==="svg",u==null?J(d,m,b,E,R,M,w,T):q(u,d,E,R,M,w,T)},J=(u,d,m,b,E,R,M,w)=>{let T,x;const{type:j,props:N,shapeFlag:B,transition:W,dirs:X}=u;if(T=u.el=o(u.type,R,N&&N.is,N),B&8?f(T,u.children):B&16&&S(u.children,T,null,b,E,R&&j!=="foreignObject",M,w),X&&Ue(u,null,b,"created"),N){for(const ie in N)ie!=="value"&&!Dt(ie)&&i(T,ie,null,N[ie],R,u.children,b,E,I);"value"in N&&i(T,"value",null,N.value),(x=N.onVnodeBeforeMount)&&Oe(x,b,u)}z(T,u,u.scopeId,M,b),X&&Ue(u,null,b,"beforeMount");const le=(!E||E&&!E.pendingBranch)&&W&&!W.persisted;le&&W.beforeEnter(T),s(T,d,m),((x=N&&N.onVnodeMounted)||le||X)&&Ce(()=>{x&&Oe(x,b,u),le&&W.enter(T),X&&Ue(u,null,b,"mounted")},E)},z=(u,d,m,b,E)=>{if(m&&y(u,m),b)for(let R=0;R{for(let x=T;x{const w=d.el=u.el;let{patchFlag:T,dynamicChildren:x,dirs:j}=d;T|=u.patchFlag&16;const N=u.props||ce,B=d.props||ce;let W;m&<(m,!1),(W=B.onVnodeBeforeUpdate)&&Oe(W,m,d,u),j&&Ue(d,u,m,"beforeUpdate"),m&<(m,!0);const X=E&&d.type!=="foreignObject";if(x?K(u.dynamicChildren,x,w,m,b,X,R):M||re(u,d,w,null,m,b,X,R,!1),T>0){if(T&16)Z(w,d,N,B,m,b,E);else if(T&2&&N.class!==B.class&&i(w,"class",null,B.class,E),T&4&&i(w,"style",N.style,B.style,E),T&8){const le=d.dynamicProps;for(let ie=0;ie{W&&Oe(W,m,d,u),j&&Ue(d,u,m,"updated")},b)},K=(u,d,m,b,E,R,M)=>{for(let w=0;w{if(m!==b){if(m!==ce)for(const w in m)!Dt(w)&&!(w in b)&&i(u,w,m[w],null,M,d.children,E,R,I);for(const w in b){if(Dt(w))continue;const T=b[w],x=m[w];T!==x&&w!=="value"&&i(u,w,x,T,M,d.children,E,R,I)}"value"in b&&i(u,"value",m.value,b.value)}},F=(u,d,m,b,E,R,M,w,T)=>{const x=d.el=u?u.el:l(""),j=d.anchor=u?u.anchor:l("");let{patchFlag:N,dynamicChildren:B,slotScopeIds:W}=d;W&&(w=w?w.concat(W):W),u==null?(s(x,m,b),s(j,m,b),S(d.children,m,j,E,R,M,w,T)):N>0&&N&64&&B&&u.dynamicChildren?(K(u.dynamicChildren,B,m,E,R,M,w),(d.key!=null||E&&d===E.subTree)&&Pi(u,d,!0)):re(u,d,m,j,E,R,M,w,T)},Q=(u,d,m,b,E,R,M,w,T)=>{d.slotScopeIds=w,u==null?d.shapeFlag&512?E.ctx.activate(d,m,b,M,T):L(d,m,b,E,R,M,T):_e(u,d,T)},L=(u,d,m,b,E,R,M)=>{const w=u.component=jl(u,b,E);if(nn(u)&&(w.ctx.renderer=ee),Dl(w),w.asyncDep){if(E&&E.registerDep(w,G),!u.el){const T=w.subTree=ae(Pe);g(null,T,d,m)}return}G(w,u,d,m,E,R,M)},_e=(u,d,m)=>{const b=d.component=u.component;if(Xo(u,d,m))if(b.asyncDep&&!b.asyncResolved){oe(b,d,m);return}else b.next=d,Wo(b.update),b.update();else d.el=u.el,b.vnode=d},G=(u,d,m,b,E,R,M)=>{const w=()=>{if(u.isMounted){let{next:j,bu:N,u:B,parent:W,vnode:X}=u,le=j,ie;lt(u,!1),j?(j.el=X.el,oe(u,j,M)):j=X,N&&$n(N),(ie=j.props&&j.props.onVnodeBeforeUpdate)&&Oe(ie,W,j,X),lt(u,!0);const de=Hn(u),Ne=u.subTree;u.subTree=de,A(Ne,de,h(Ne.el),O(Ne),u,E,R),j.el=de.el,le===null&&Zo(u,de.el),B&&Ce(B,E),(ie=j.props&&j.props.onVnodeUpdated)&&Ce(()=>Oe(ie,W,j,X),E)}else{let j;const{el:N,props:B}=d,{bm:W,m:X,parent:le}=u,ie=At(d);if(lt(u,!1),W&&$n(W),!ie&&(j=B&&B.onVnodeBeforeMount)&&Oe(j,le,d),lt(u,!0),N&&Y){const de=()=>{u.subTree=Hn(u),Y(N,u.subTree,u,E,null)};ie?d.type.__asyncLoader().then(()=>!u.isUnmounted&&de()):de()}else{const de=u.subTree=Hn(u);A(null,de,m,b,u,E,R),d.el=de.el}if(X&&Ce(X,E),!ie&&(j=B&&B.onVnodeMounted)){const de=d;Ce(()=>Oe(j,le,de),E)}(d.shapeFlag&256||le&&At(le.vnode)&&le.vnode.shapeFlag&256)&&u.a&&Ce(u.a,E),u.isMounted=!0,d=m=b=null}},T=u.effect=new bs(w,()=>On(x),u.scope),x=u.update=()=>T.run();x.id=u.uid,lt(u,!0),x()},oe=(u,d,m)=>{d.component=u;const b=u.vnode.props;u.vnode=d,u.next=null,Cl(u,d.props,b,m),Rl(u,d.children,m),Nt(),qs(),Lt()},re=(u,d,m,b,E,R,M,w,T=!1)=>{const x=u&&u.children,j=u?u.shapeFlag:0,N=d.children,{patchFlag:B,shapeFlag:W}=d;if(B>0){if(B&128){ot(x,N,m,b,E,R,M,w,T);return}else if(B&256){Ie(x,N,m,b,E,R,M,w,T);return}}W&8?(j&16&&I(x,E,R),N!==x&&f(m,N)):j&16?W&16?ot(x,N,m,b,E,R,M,w,T):I(x,E,R,!0):(j&8&&f(m,""),W&16&&S(N,m,b,E,R,M,w,T))},Ie=(u,d,m,b,E,R,M,w,T)=>{u=u||Ct,d=d||Ct;const x=u.length,j=d.length,N=Math.min(x,j);let B;for(B=0;Bj?I(u,E,R,!0,!1,N):S(d,m,b,E,R,M,w,T,N)},ot=(u,d,m,b,E,R,M,w,T)=>{let x=0;const j=d.length;let N=u.length-1,B=j-1;for(;x<=N&&x<=B;){const W=u[x],X=d[x]=T?et(d[x]):Le(d[x]);if(dt(W,X))A(W,X,m,null,E,R,M,w,T);else break;x++}for(;x<=N&&x<=B;){const W=u[N],X=d[B]=T?et(d[B]):Le(d[B]);if(dt(W,X))A(W,X,m,null,E,R,M,w,T);else break;N--,B--}if(x>N){if(x<=B){const W=B+1,X=WB)for(;x<=N;)Ee(u[x],E,R,!0),x++;else{const W=x,X=x,le=new Map;for(x=X;x<=B;x++){const we=d[x]=T?et(d[x]):Le(d[x]);we.key!=null&&le.set(we.key,x)}let ie,de=0;const Ne=B-X+1;let bt=!1,Ns=0;const kt=new Array(Ne);for(x=0;x=Ne){Ee(we,E,R,!0);continue}let De;if(we.key!=null)De=le.get(we.key);else for(ie=X;ie<=B;ie++)if(kt[ie-X]===0&&dt(we,d[ie])){De=ie;break}De===void 0?Ee(we,E,R,!0):(kt[De-X]=x+1,De>=Ns?Ns=De:bt=!0,A(we,d[De],m,null,E,R,M,w,T),de++)}const Ls=bt?Ml(kt):Ct;for(ie=Ls.length-1,x=Ne-1;x>=0;x--){const we=X+x,De=d[we],ks=we+1{const{el:R,type:M,transition:w,children:T,shapeFlag:x}=u;if(x&6){Fe(u.component.subTree,d,m,b);return}if(x&128){u.suspense.move(d,m,b);return}if(x&64){M.move(u,d,m,ee);return}if(M===xe){s(R,d,m);for(let N=0;Nw.enter(R),E);else{const{leave:N,delayLeave:B,afterLeave:W}=w,X=()=>s(R,d,m),le=()=>{N(R,()=>{X(),W&&W()})};B?B(R,X,le):le()}else s(R,d,m)},Ee=(u,d,m,b=!1,E=!1)=>{const{type:R,props:M,ref:w,children:T,dynamicChildren:x,shapeFlag:j,patchFlag:N,dirs:B}=u;if(w!=null&&Cn(w,null,m,u,!0),j&256){d.ctx.deactivate(u);return}const W=j&1&&B,X=!At(u);let le;if(X&&(le=M&&M.onVnodeBeforeUnmount)&&Oe(le,d,u),j&6)v(u.component,m,b);else{if(j&128){u.suspense.unmount(m,b);return}W&&Ue(u,null,d,"beforeUnmount"),j&64?u.type.remove(u,d,m,E,ee,b):x&&(R!==xe||N>0&&N&64)?I(x,d,m,!1,!0):(R===xe&&N&384||!E&&j&16)&&I(T,d,m),b&&_t(u)}(X&&(le=M&&M.onVnodeUnmounted)||W)&&Ce(()=>{le&&Oe(le,d,u),W&&Ue(u,null,d,"unmounted")},m)},_t=u=>{const{type:d,el:m,anchor:b,transition:E}=u;if(d===xe){sn(m,b);return}if(d===Kt){$(u);return}const R=()=>{r(m),E&&!E.persisted&&E.afterLeave&&E.afterLeave()};if(u.shapeFlag&1&&E&&!E.persisted){const{leave:M,delayLeave:w}=E,T=()=>M(m,R);w?w(u.el,R,T):T()}else R()},sn=(u,d)=>{let m;for(;u!==d;)m=p(u),r(u),u=m;r(d)},v=(u,d,m)=>{const{bum:b,scope:E,update:R,subTree:M,um:w}=u;b&&$n(b),E.stop(),R&&(R.active=!1,Ee(M,u,d,m)),w&&Ce(w,d),Ce(()=>{u.isUnmounted=!0},d),d&&d.pendingBranch&&!d.isUnmounted&&u.asyncDep&&!u.asyncResolved&&u.suspenseId===d.pendingId&&(d.deps--,d.deps===0&&d.resolve())},I=(u,d,m,b=!1,E=!1,R=0)=>{for(let M=R;Mu.shapeFlag&6?O(u.component.subTree):u.shapeFlag&128?u.suspense.next():p(u.anchor||u.el),H=(u,d,m)=>{u==null?d._vnode&&Ee(d._vnode,null,null,!0):A(d._vnode||null,u,d,null,null,null,m),qs(),bn(),d._vnode=u},ee={p:A,um:Ee,m:Fe,r:_t,mt:L,mc:S,pc:re,pbc:K,n:O,o:e};let fe,Y;return t&&([fe,Y]=t(ee)),{render:H,hydrate:fe,createApp:Al(H,fe)}}function lt({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function Pi(e,t,n=!1){const s=e.children,r=t.children;if(D(s)&&D(r))for(let i=0;i>1,e[n[l]]0&&(t[s]=n[i-1]),n[i]=s)}}for(i=n.length,o=n[i-1];i-- >0;)n[i]=o,o=t[o];return n}const Il=e=>e.__isTeleport,xe=Symbol(void 0),Ot=Symbol(void 0),Pe=Symbol(void 0),Kt=Symbol(void 0),Wt=[];let $e=null;function Ai(e=!1){Wt.push($e=e?null:[])}function Fl(){Wt.pop(),$e=Wt[Wt.length-1]||null}let Xt=1;function tr(e){Xt+=e}function Ti(e){return e.dynamicChildren=Xt>0?$e||Ct:null,Fl(),Xt>0&&$e&&$e.push(e),e}function Nu(e,t,n,s,r,i){return Ti(Mi(e,t,n,s,r,i,!0))}function Oi(e,t,n,s,r){return Ti(ae(e,t,n,s,r,!0))}function xn(e){return e?e.__v_isVNode===!0:!1}function dt(e,t){return e.type===t.type&&e.key===t.key}const In="__vInternal",Si=({key:e})=>e??null,mn=({ref:e,ref_key:t,ref_for:n})=>e!=null?pe(e)||ge(e)||V(e)?{i:me,r:e,k:t,f:!!n}:e:null;function Mi(e,t=null,n=null,s=0,r=null,i=e===xe?0:1,o=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Si(t),ref:t&&mn(t),scopeId:li,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:me};return l?(Ss(c,n),i&128&&e.normalize(c)):n&&(c.shapeFlag|=pe(n)?8:16),Xt>0&&!o&&$e&&(c.patchFlag>0||i&6)&&c.patchFlag!==32&&$e.push(c),c}const ae=Nl;function Nl(e,t=null,n=null,s=0,r=null,i=!1){if((!e||e===hl)&&(e=Pe),xn(e)){const l=it(e,t,!0);return n&&Ss(l,n),Xt>0&&!i&&$e&&(l.shapeFlag&6?$e[$e.indexOf(e)]=l:$e.push(l)),l.patchFlag|=-2,l}if(Vl(e)&&(e=e.__vccOpts),t){t=Ll(t);let{class:l,style:c}=t;l&&!pe(l)&&(t.class=ds(l)),ue(c)&&(Yr(c)&&!D(c)&&(c=ye({},c)),t.style=as(c))}const o=pe(e)?1:Go(e)?128:Il(e)?64:ue(e)?4:V(e)?2:0;return Mi(e,t,n,s,r,o,i,!0)}function Ll(e){return e?Yr(e)||In in e?ye({},e):e:null}function it(e,t,n=!1){const{props:s,ref:r,patchFlag:i,children:o}=e,l=t?kl(s||{},t):s;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:l,key:l&&Si(l),ref:t&&t.ref?n&&r?D(r)?r.concat(mn(t)):[r,mn(t)]:mn(t):r,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:o,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==xe?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&it(e.ssContent),ssFallback:e.ssFallback&&it(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx}}function Ii(e=" ",t=0){return ae(Ot,null,e,t)}function Lu(e,t){const n=ae(Kt,null,e);return n.staticCount=t,n}function ku(e="",t=!1){return t?(Ai(),Oi(Pe,null,e)):ae(Pe,null,e)}function Le(e){return e==null||typeof e=="boolean"?ae(Pe):D(e)?ae(xe,null,e.slice()):typeof e=="object"?et(e):ae(Ot,null,String(e))}function et(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:it(e)}function Ss(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(D(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),Ss(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!(In in t)?t._ctx=me:r===3&&me&&(me.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else V(t)?(t={default:t,_ctx:me},n=32):(t=String(t),s&64?(n=16,t=[Ii(t)]):n=8);e.children=t,e.shapeFlag|=n}function kl(...e){const t={};for(let n=0;nhe||me,St=e=>{he=e,e.scope.on()},mt=()=>{he&&he.scope.off(),he=null};function Fi(e){return e.vnode.shapeFlag&4}let Mt=!1;function Dl(e,t=!1){Mt=t;const{props:n,children:s}=e.vnode,r=Fi(e);El(e,n,r,t),wl(e,s);const i=r?Ul(e,t):void 0;return Mt=!1,i}function Ul(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=Jr(new Proxy(e.ctx,gl));const{setup:s}=n;if(s){const r=e.setupContext=s.length>1?Wl(e):null;St(e),Nt();const i=st(s,e,0,[e.props,r]);if(Lt(),mt(),Lr(i)){if(i.then(mt,mt),t)return i.then(o=>{nr(e,o,t)}).catch(o=>{tn(o,e,0)});e.asyncDep=i}else nr(e,i,t)}else Ni(e,t)}function nr(e,t,n){V(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:ue(t)&&(e.setupState=ei(t)),Ni(e,n)}let sr;function Ni(e,t,n){const s=e.type;if(!e.render){if(!t&&sr&&!s.render){const r=s.template||Ts(e).template;if(r){const{isCustomElement:i,compilerOptions:o}=e.appContext.config,{delimiters:l,compilerOptions:c}=s,a=ye(ye({isCustomElement:i,delimiters:l},o),c);s.render=sr(r,a)}}e.render=s.render||He}St(e),Nt(),ml(e),Lt(),mt()}function Kl(e){return new Proxy(e.attrs,{get(t,n){return Ae(e,"get","$attrs"),t[n]}})}function Wl(e){const t=s=>{e.exposed=s||{}};let n;return{get attrs(){return n||(n=Kl(e))},slots:e.slots,emit:e.emit,expose:t}}function Fn(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(ei(Jr(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Ut)return Ut[n](e)},has(t,n){return n in t||n in Ut}}))}function ql(e,t=!0){return V(e)?e.displayName||e.name:e.name||t&&e.__name}function Vl(e){return V(e)&&"__vccOpts"in e}const Se=(e,t)=>Do(e,t,Mt);function Ms(e,t,n){const s=arguments.length;return s===2?ue(t)&&!D(t)?xn(t)?ae(e,null,[t]):ae(e,t):ae(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&xn(n)&&(n=[n]),ae(e,t,n))}const zl=Symbol(""),Ql=()=>je(zl),Yl="3.2.45",Jl="http://www.w3.org/2000/svg",ht=typeof document<"u"?document:null,rr=ht&&ht.createElement("template"),Xl={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const r=t?ht.createElementNS(Jl,e):ht.createElement(e,n?{is:n}:void 0);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>ht.createTextNode(e),createComment:e=>ht.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>ht.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,i){const o=n?n.previousSibling:t.lastChild;if(r&&(r===i||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===i||!(r=r.nextSibling)););else{rr.innerHTML=s?`${e}`:e;const l=rr.content;if(s){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}};function Zl(e,t,n){const s=e._vtc;s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}function Gl(e,t,n){const s=e.style,r=pe(n);if(n&&!r){for(const i in n)os(s,i,n[i]);if(t&&!pe(t))for(const i in t)n[i]==null&&os(s,i,"")}else{const i=s.display;r?t!==n&&(s.cssText=n):t&&e.removeAttribute("style"),"_vod"in e&&(s.display=i)}}const ir=/\s*!important$/;function os(e,t,n){if(D(n))n.forEach(s=>os(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=ec(e,t);ir.test(n)?e.setProperty(yt(s),n.replace(ir,""),"important"):e[s]=n}}const or=["Webkit","Moz","ms"],Un={};function ec(e,t){const n=Un[t];if(n)return n;let s=We(t);if(s!=="filter"&&s in e)return Un[t]=s;s=An(s);for(let r=0;rKn||(lc.then(()=>Kn=0),Kn=Date.now());function uc(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;Me(fc(s,n.value),t,5,[s])};return n.value=e,n.attached=cc(),n}function fc(e,t){if(D(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>r=>!r._stopped&&s&&s(r))}else return t}const ur=/^on[a-z]/,ac=(e,t,n,s,r=!1,i,o,l,c)=>{t==="class"?Zl(e,s,r):t==="style"?Gl(e,n,s):Gt(t)?hs(t)||ic(e,t,n,s,o):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):dc(e,t,s,r))?nc(e,t,s,i,o,l,c):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),tc(e,t,s,r))};function dc(e,t,n,s){return s?!!(t==="innerHTML"||t==="textContent"||t in e&&ur.test(t)&&V(n)):t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA"||ur.test(t)&&pe(n)?!1:t in e}const Xe="transition",$t="animation",Li=(e,{slots:t})=>Ms(fi,hc(e),t);Li.displayName="Transition";const ki={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String};Li.props=ye({},fi.props,ki);const ct=(e,t=[])=>{D(e)?e.forEach(n=>n(...t)):e&&e(...t)},fr=e=>e?D(e)?e.some(t=>t.length>1):e.length>1:!1;function hc(e){const t={};for(const F in e)F in ki||(t[F]=e[F]);if(e.css===!1)return t;const{name:n="v",type:s,duration:r,enterFromClass:i=`${n}-enter-from`,enterActiveClass:o=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:c=i,appearActiveClass:a=o,appearToClass:f=l,leaveFromClass:h=`${n}-leave-from`,leaveActiveClass:p=`${n}-leave-active`,leaveToClass:y=`${n}-leave-to`}=e,C=pc(r),A=C&&C[0],k=C&&C[1],{onBeforeEnter:g,onEnter:_,onEnterCancelled:P,onLeave:$,onLeaveCancelled:U,onBeforeAppear:J=g,onAppear:z=_,onAppearCancelled:S=P}=t,q=(F,Q,L)=>{ut(F,Q?f:l),ut(F,Q?a:o),L&&L()},K=(F,Q)=>{F._isLeaving=!1,ut(F,h),ut(F,y),ut(F,p),Q&&Q()},Z=F=>(Q,L)=>{const _e=F?z:_,G=()=>q(Q,F,L);ct(_e,[Q,G]),ar(()=>{ut(Q,F?c:i),Ze(Q,F?f:l),fr(_e)||dr(Q,s,A,G)})};return ye(t,{onBeforeEnter(F){ct(g,[F]),Ze(F,i),Ze(F,o)},onBeforeAppear(F){ct(J,[F]),Ze(F,c),Ze(F,a)},onEnter:Z(!1),onAppear:Z(!0),onLeave(F,Q){F._isLeaving=!0;const L=()=>K(F,Q);Ze(F,h),yc(),Ze(F,p),ar(()=>{F._isLeaving&&(ut(F,h),Ze(F,y),fr($)||dr(F,s,k,L))}),ct($,[F,L])},onEnterCancelled(F){q(F,!1),ct(P,[F])},onAppearCancelled(F){q(F,!0),ct(S,[F])},onLeaveCancelled(F){K(F),ct(U,[F])}})}function pc(e){if(e==null)return null;if(ue(e))return[Wn(e.enter),Wn(e.leave)];{const t=Wn(e);return[t,t]}}function Wn(e){return ys(e)}function Ze(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e._vtc||(e._vtc=new Set)).add(t)}function ut(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const{_vtc:n}=e;n&&(n.delete(t),n.size||(e._vtc=void 0))}function ar(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let gc=0;function dr(e,t,n,s){const r=e._endId=++gc,i=()=>{r===e._endId&&s()};if(n)return setTimeout(i,n);const{type:o,timeout:l,propCount:c}=mc(e,t);if(!o)return s();const a=o+"end";let f=0;const h=()=>{e.removeEventListener(a,p),i()},p=y=>{y.target===e&&++f>=c&&h()};setTimeout(()=>{f(n[C]||"").split(", "),r=s(`${Xe}Delay`),i=s(`${Xe}Duration`),o=hr(r,i),l=s(`${$t}Delay`),c=s(`${$t}Duration`),a=hr(l,c);let f=null,h=0,p=0;t===Xe?o>0&&(f=Xe,h=o,p=i.length):t===$t?a>0&&(f=$t,h=a,p=c.length):(h=Math.max(o,a),f=h>0?o>a?Xe:$t:null,p=f?f===Xe?i.length:c.length:0);const y=f===Xe&&/\b(transform|all)(,|$)/.test(s(`${Xe}Property`).toString());return{type:f,timeout:h,propCount:p,hasTransform:y}}function hr(e,t){for(;e.lengthpr(n)+pr(e[s])))}function pr(e){return Number(e.slice(0,-1).replace(",","."))*1e3}function yc(){return document.body.offsetHeight}const _c={esc:"escape",space:" ",up:"arrow-up",left:"arrow-left",right:"arrow-right",down:"arrow-down",delete:"backspace"},$u=(e,t)=>n=>{if(!("key"in n))return;const s=yt(n.key);if(t.some(r=>r===s||_c[r]===s))return e(n)},Hu={beforeMount(e,{value:t},{transition:n}){e._vod=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):Ht(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:s}){!t!=!n&&(s?t?(s.beforeEnter(e),Ht(e,!0),s.enter(e)):s.leave(e,()=>{Ht(e,!1)}):Ht(e,t))},beforeUnmount(e,{value:t}){Ht(e,t)}};function Ht(e,t){e.style.display=t?e._vod:"none"}const bc=ye({patchProp:ac},Xl);let qn,gr=!1;function vc(){return qn=gr?qn:Ol(bc),gr=!0,qn}const ju=(...e)=>{const t=vc().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=Ec(s);if(r)return n(r,!0,r instanceof SVGElement)},t};function Ec(e){return pe(e)?document.querySelector(e):e}var Cc=([e,t,n])=>e==="meta"&&t.name?`${e}.${t.name}`:["title","base"].includes(e)?e:e==="template"&&t.id?`${e}.${t.id}`:JSON.stringify([e,t,n]),Bu=e=>{const t=new Set,n=[];return e.forEach(s=>{const r=Cc(s);t.has(r)||(t.add(r),n.push(s))}),n},Du=e=>/^(https?:)?\/\//.test(e),Uu=e=>/^mailto:/.test(e),Ku=e=>/^tel:/.test(e),Wu=e=>Object.prototype.toString.call(e)==="[object Object]",qu=e=>e.replace(/\/$/,""),Vu=e=>e.replace(/^\//,""),zu=(e,t)=>{const n=Object.keys(e).sort((s,r)=>{const i=r.split("/").length-s.split("/").length;return i!==0?i:r.length-s.length});for(const s of n)if(t.startsWith(s))return s;return"/"};/*! + * vue-router v4.1.6 + * (c) 2022 Eduardo San Martin Morote + * @license MIT + */const Et=typeof window<"u";function xc(e){return e.__esModule||e[Symbol.toStringTag]==="Module"}const se=Object.assign;function Vn(e,t){const n={};for(const s in t){const r=t[s];n[s]=Be(r)?r.map(e):e(r)}return n}const qt=()=>{},Be=Array.isArray,wc=/\/$/,Rc=e=>e.replace(wc,"");function zn(e,t,n="/"){let s,r={},i="",o="";const l=t.indexOf("#");let c=t.indexOf("?");return l=0&&(c=-1),c>-1&&(s=t.slice(0,c),i=t.slice(c+1,l>-1?l:t.length),r=e(i)),l>-1&&(s=s||t.slice(0,l),o=t.slice(l,t.length)),s=Oc(s??t,n),{fullPath:s+(i&&"?")+i+o,path:s,query:r,hash:o}}function Pc(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function mr(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function Ac(e,t,n){const s=t.matched.length-1,r=n.matched.length-1;return s>-1&&s===r&&It(t.matched[s],n.matched[r])&&$i(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function It(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function $i(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!Tc(e[n],t[n]))return!1;return!0}function Tc(e,t){return Be(e)?yr(e,t):Be(t)?yr(t,e):e===t}function yr(e,t){return Be(t)?e.length===t.length&&e.every((n,s)=>n===t[s]):e.length===1&&e[0]===t}function Oc(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),s=e.split("/");let r=n.length-1,i,o;for(i=0;i1&&r--;else break;return n.slice(0,r).join("/")+"/"+s.slice(i-(i===s.length?1:0)).join("/")}var Zt;(function(e){e.pop="pop",e.push="push"})(Zt||(Zt={}));var Vt;(function(e){e.back="back",e.forward="forward",e.unknown=""})(Vt||(Vt={}));function Sc(e){if(!e)if(Et){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),Rc(e)}const Mc=/^[^#]+#/;function Ic(e,t){return e.replace(Mc,"#")+t}function Fc(e,t){const n=document.documentElement.getBoundingClientRect(),s=e.getBoundingClientRect();return{behavior:t.behavior,left:s.left-n.left-(t.left||0),top:s.top-n.top-(t.top||0)}}const Nn=()=>({left:window.pageXOffset,top:window.pageYOffset});function Nc(e){let t;if("el"in e){const n=e.el,s=typeof n=="string"&&n.startsWith("#"),r=typeof n=="string"?s?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!r)return;t=Fc(r,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.pageXOffset,t.top!=null?t.top:window.pageYOffset)}function _r(e,t){return(history.state?history.state.position-t:-1)+e}const ls=new Map;function Lc(e,t){ls.set(e,t)}function kc(e){const t=ls.get(e);return ls.delete(e),t}let $c=()=>location.protocol+"//"+location.host;function Hi(e,t){const{pathname:n,search:s,hash:r}=t,i=e.indexOf("#");if(i>-1){let l=r.includes(e.slice(i))?e.slice(i).length:1,c=r.slice(l);return c[0]!=="/"&&(c="/"+c),mr(c,"")}return mr(n,e)+s+r}function Hc(e,t,n,s){let r=[],i=[],o=null;const l=({state:p})=>{const y=Hi(e,location),C=n.value,A=t.value;let k=0;if(p){if(n.value=y,t.value=p,o&&o===C){o=null;return}k=A?p.position-A.position:0}else s(y);r.forEach(g=>{g(n.value,C,{delta:k,type:Zt.pop,direction:k?k>0?Vt.forward:Vt.back:Vt.unknown})})};function c(){o=n.value}function a(p){r.push(p);const y=()=>{const C=r.indexOf(p);C>-1&&r.splice(C,1)};return i.push(y),y}function f(){const{history:p}=window;p.state&&p.replaceState(se({},p.state,{scroll:Nn()}),"")}function h(){for(const p of i)p();i=[],window.removeEventListener("popstate",l),window.removeEventListener("beforeunload",f)}return window.addEventListener("popstate",l),window.addEventListener("beforeunload",f),{pauseListeners:c,listen:a,destroy:h}}function br(e,t,n,s=!1,r=!1){return{back:e,current:t,forward:n,replaced:s,position:window.history.length,scroll:r?Nn():null}}function jc(e){const{history:t,location:n}=window,s={value:Hi(e,n)},r={value:t.state};r.value||i(s.value,{back:null,current:s.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function i(c,a,f){const h=e.indexOf("#"),p=h>-1?(n.host&&document.querySelector("base")?e:e.slice(h))+c:$c()+e+c;try{t[f?"replaceState":"pushState"](a,"",p),r.value=a}catch(y){console.error(y),n[f?"replace":"assign"](p)}}function o(c,a){const f=se({},t.state,br(r.value.back,c,r.value.forward,!0),a,{position:r.value.position});i(c,f,!0),s.value=c}function l(c,a){const f=se({},r.value,t.state,{forward:c,scroll:Nn()});i(f.current,f,!0);const h=se({},br(s.value,c,null),{position:f.position+1},a);i(c,h,!1),s.value=c}return{location:s,state:r,push:l,replace:o}}function Qu(e){e=Sc(e);const t=jc(e),n=Hc(e,t.state,t.location,t.replace);function s(i,o=!0){o||n.pauseListeners(),history.go(i)}const r=se({location:"",base:e,go:s,createHref:Ic.bind(null,e)},t,n);return Object.defineProperty(r,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(r,"state",{enumerable:!0,get:()=>t.state.value}),r}function Bc(e){return typeof e=="string"||e&&typeof e=="object"}function ji(e){return typeof e=="string"||typeof e=="symbol"}const Ge={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0},Bi=Symbol("");var vr;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(vr||(vr={}));function Ft(e,t){return se(new Error,{type:e,[Bi]:!0},t)}function qe(e,t){return e instanceof Error&&Bi in e&&(t==null||!!(e.type&t))}const Er="[^/]+?",Dc={sensitive:!1,strict:!1,start:!0,end:!0},Uc=/[.+*?^${}()[\]/\\]/g;function Kc(e,t){const n=se({},Dc,t),s=[];let r=n.start?"^":"";const i=[];for(const a of e){const f=a.length?[]:[90];n.strict&&!a.length&&(r+="/");for(let h=0;ht.length?t.length===1&&t[0]===40+40?1:-1:0}function qc(e,t){let n=0;const s=e.score,r=t.score;for(;n0&&t[t.length-1]<0}const Vc={type:0,value:""},zc=/[a-zA-Z0-9_]/;function Qc(e){if(!e)return[[]];if(e==="/")return[[Vc]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(y){throw new Error(`ERR (${n})/"${a}": ${y}`)}let n=0,s=n;const r=[];let i;function o(){i&&r.push(i),i=[]}let l=0,c,a="",f="";function h(){a&&(n===0?i.push({type:0,value:a}):n===1||n===2||n===3?(i.length>1&&(c==="*"||c==="+")&&t(`A repeatable param (${a}) must be alone in its segment. eg: '/:ids+.`),i.push({type:1,value:a,regexp:f,repeatable:c==="*"||c==="+",optional:c==="*"||c==="?"})):t("Invalid state to consume buffer"),a="")}function p(){a+=c}for(;l{o(_)}:qt}function o(f){if(ji(f)){const h=s.get(f);h&&(s.delete(f),n.splice(n.indexOf(h),1),h.children.forEach(o),h.alias.forEach(o))}else{const h=n.indexOf(f);h>-1&&(n.splice(h,1),f.record.name&&s.delete(f.record.name),f.children.forEach(o),f.alias.forEach(o))}}function l(){return n}function c(f){let h=0;for(;h=0&&(f.record.path!==n[h].record.path||!Di(f,n[h]));)h++;n.splice(h,0,f),f.record.name&&!wr(f)&&s.set(f.record.name,f)}function a(f,h){let p,y={},C,A;if("name"in f&&f.name){if(p=s.get(f.name),!p)throw Ft(1,{location:f});A=p.record.name,y=se(xr(h.params,p.keys.filter(_=>!_.optional).map(_=>_.name)),f.params&&xr(f.params,p.keys.map(_=>_.name))),C=p.stringify(y)}else if("path"in f)C=f.path,p=n.find(_=>_.re.test(C)),p&&(y=p.parse(C),A=p.record.name);else{if(p=h.name?s.get(h.name):n.find(_=>_.re.test(h.path)),!p)throw Ft(1,{location:f,currentLocation:h});A=p.record.name,y=se({},h.params,f.params),C=p.stringify(y)}const k=[];let g=p;for(;g;)k.unshift(g.record),g=g.parent;return{name:A,path:C,params:y,matched:k,meta:Gc(k)}}return e.forEach(f=>i(f)),{addRoute:i,resolve:a,removeRoute:o,getRoutes:l,getRecordMatcher:r}}function xr(e,t){const n={};for(const s of t)s in e&&(n[s]=e[s]);return n}function Xc(e){return{path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:void 0,beforeEnter:e.beforeEnter,props:Zc(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}}}function Zc(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const s in e.components)t[s]=typeof n=="boolean"?n:n[s];return t}function wr(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function Gc(e){return e.reduce((t,n)=>se(t,n.meta),{})}function Rr(e,t){const n={};for(const s in e)n[s]=s in t?t[s]:e[s];return n}function Di(e,t){return t.children.some(n=>n===e||Di(e,n))}const Ui=/#/g,eu=/&/g,tu=/\//g,nu=/=/g,su=/\?/g,Ki=/\+/g,ru=/%5B/g,iu=/%5D/g,Wi=/%5E/g,ou=/%60/g,qi=/%7B/g,lu=/%7C/g,Vi=/%7D/g,cu=/%20/g;function Is(e){return encodeURI(""+e).replace(lu,"|").replace(ru,"[").replace(iu,"]")}function uu(e){return Is(e).replace(qi,"{").replace(Vi,"}").replace(Wi,"^")}function cs(e){return Is(e).replace(Ki,"%2B").replace(cu,"+").replace(Ui,"%23").replace(eu,"%26").replace(ou,"`").replace(qi,"{").replace(Vi,"}").replace(Wi,"^")}function fu(e){return cs(e).replace(nu,"%3D")}function au(e){return Is(e).replace(Ui,"%23").replace(su,"%3F")}function du(e){return e==null?"":au(e).replace(tu,"%2F")}function wn(e){try{return decodeURIComponent(""+e)}catch{}return""+e}function hu(e){const t={};if(e===""||e==="?")return t;const s=(e[0]==="?"?e.slice(1):e).split("&");for(let r=0;ri&&cs(i)):[s&&cs(s)]).forEach(i=>{i!==void 0&&(t+=(t.length?"&":"")+n,i!=null&&(t+="="+i))})}return t}function pu(e){const t={};for(const n in e){const s=e[n];s!==void 0&&(t[n]=Be(s)?s.map(r=>r==null?null:""+r):s==null?s:""+s)}return t}const gu=Symbol(""),Ar=Symbol(""),Ln=Symbol(""),Fs=Symbol(""),us=Symbol("");function jt(){let e=[];function t(s){return e.push(s),()=>{const r=e.indexOf(s);r>-1&&e.splice(r,1)}}function n(){e=[]}return{add:t,list:()=>e,reset:n}}function tt(e,t,n,s,r){const i=s&&(s.enterCallbacks[r]=s.enterCallbacks[r]||[]);return()=>new Promise((o,l)=>{const c=h=>{h===!1?l(Ft(4,{from:n,to:t})):h instanceof Error?l(h):Bc(h)?l(Ft(2,{from:t,to:h})):(i&&s.enterCallbacks[r]===i&&typeof h=="function"&&i.push(h),o())},a=e.call(s&&s.instances[r],t,n,c);let f=Promise.resolve(a);e.length<3&&(f=f.then(c)),f.catch(h=>l(h))})}function Qn(e,t,n,s){const r=[];for(const i of e)for(const o in i.components){let l=i.components[o];if(!(t!=="beforeRouteEnter"&&!i.instances[o]))if(mu(l)){const a=(l.__vccOpts||l)[t];a&&r.push(tt(a,n,s,i,o))}else{let c=l();r.push(()=>c.then(a=>{if(!a)return Promise.reject(new Error(`Couldn't resolve component "${o}" at "${i.path}"`));const f=xc(a)?a.default:a;i.components[o]=f;const p=(f.__vccOpts||f)[t];return p&&tt(p,n,s,i,o)()}))}}return r}function mu(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function Tr(e){const t=je(Ln),n=je(Fs),s=Se(()=>t.resolve(Rt(e.to))),r=Se(()=>{const{matched:c}=s.value,{length:a}=c,f=c[a-1],h=n.matched;if(!f||!h.length)return-1;const p=h.findIndex(It.bind(null,f));if(p>-1)return p;const y=Or(c[a-2]);return a>1&&Or(f)===y&&h[h.length-1].path!==y?h.findIndex(It.bind(null,c[a-2])):p}),i=Se(()=>r.value>-1&&vu(n.params,s.value.params)),o=Se(()=>r.value>-1&&r.value===n.matched.length-1&&$i(n.params,s.value.params));function l(c={}){return bu(c)?t[Rt(e.replace)?"replace":"push"](Rt(e.to)).catch(qt):Promise.resolve()}return{route:s,href:Se(()=>s.value.href),isActive:i,isExactActive:o,navigate:l}}const yu=As({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},useLink:Tr,setup(e,{slots:t}){const n=en(Tr(e)),{options:s}=je(Ln),r=Se(()=>({[Sr(e.activeClass,s.linkActiveClass,"router-link-active")]:n.isActive,[Sr(e.exactActiveClass,s.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const i=t.default&&t.default(n);return e.custom?i:Ms("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:r.value},i)}}}),_u=yu;function bu(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function vu(e,t){for(const n in t){const s=t[n],r=e[n];if(typeof s=="string"){if(s!==r)return!1}else if(!Be(r)||r.length!==s.length||s.some((i,o)=>i!==r[o]))return!1}return!0}function Or(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Sr=(e,t,n)=>e??t??n,Eu=As({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const s=je(us),r=Se(()=>e.route||s.value),i=je(Ar,0),o=Se(()=>{let a=Rt(i);const{matched:f}=r.value;let h;for(;(h=f[a])&&!h.components;)a++;return a}),l=Se(()=>r.value.matched[o.value]);pn(Ar,Se(()=>o.value+1)),pn(gu,l),pn(us,r);const c=hn();return gn(()=>[c.value,l.value,e.name],([a,f,h],[p,y,C])=>{f&&(f.instances[h]=a,y&&y!==f&&a&&a===p&&(f.leaveGuards.size||(f.leaveGuards=y.leaveGuards),f.updateGuards.size||(f.updateGuards=y.updateGuards))),a&&f&&(!y||!It(f,y)||!p)&&(f.enterCallbacks[h]||[]).forEach(A=>A(a))},{flush:"post"}),()=>{const a=r.value,f=e.name,h=l.value,p=h&&h.components[f];if(!p)return Mr(n.default,{Component:p,route:a});const y=h.props[f],C=y?y===!0?a.params:typeof y=="function"?y(a):y:null,k=Ms(p,se({},C,t,{onVnodeUnmounted:g=>{g.component.isUnmounted&&(h.instances[f]=null)},ref:c}));return Mr(n.default,{Component:k,route:a})||k}}});function Mr(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const Cu=Eu;function Yu(e){const t=Jc(e.routes,e),n=e.parseQuery||hu,s=e.stringifyQuery||Pr,r=e.history,i=jt(),o=jt(),l=jt(),c=Lo(Ge);let a=Ge;Et&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const f=Vn.bind(null,v=>""+v),h=Vn.bind(null,du),p=Vn.bind(null,wn);function y(v,I){let O,H;return ji(v)?(O=t.getRecordMatcher(v),H=I):H=v,t.addRoute(H,O)}function C(v){const I=t.getRecordMatcher(v);I&&t.removeRoute(I)}function A(){return t.getRoutes().map(v=>v.record)}function k(v){return!!t.getRecordMatcher(v)}function g(v,I){if(I=se({},I||c.value),typeof v=="string"){const u=zn(n,v,I.path),d=t.resolve({path:u.path},I),m=r.createHref(u.fullPath);return se(u,d,{params:p(d.params),hash:wn(u.hash),redirectedFrom:void 0,href:m})}let O;if("path"in v)O=se({},v,{path:zn(n,v.path,I.path).path});else{const u=se({},v.params);for(const d in u)u[d]==null&&delete u[d];O=se({},v,{params:h(v.params)}),I.params=h(I.params)}const H=t.resolve(O,I),ee=v.hash||"";H.params=f(p(H.params));const fe=Pc(s,se({},v,{hash:uu(ee),path:H.path})),Y=r.createHref(fe);return se({fullPath:fe,hash:ee,query:s===Pr?pu(v.query):v.query||{}},H,{redirectedFrom:void 0,href:Y})}function _(v){return typeof v=="string"?zn(n,v,c.value.path):se({},v)}function P(v,I){if(a!==v)return Ft(8,{from:I,to:v})}function $(v){return z(v)}function U(v){return $(se(_(v),{replace:!0}))}function J(v){const I=v.matched[v.matched.length-1];if(I&&I.redirect){const{redirect:O}=I;let H=typeof O=="function"?O(v):O;return typeof H=="string"&&(H=H.includes("?")||H.includes("#")?H=_(H):{path:H},H.params={}),se({query:v.query,hash:v.hash,params:"path"in H?{}:v.params},H)}}function z(v,I){const O=a=g(v),H=c.value,ee=v.state,fe=v.force,Y=v.replace===!0,u=J(O);if(u)return z(se(_(u),{state:typeof u=="object"?se({},ee,u.state):ee,force:fe,replace:Y}),I||O);const d=O;d.redirectedFrom=I;let m;return!fe&&Ac(s,H,O)&&(m=Ft(16,{to:d,from:H}),ot(H,H,!0,!1)),(m?Promise.resolve(m):q(d,H)).catch(b=>qe(b)?qe(b,2)?b:Ie(b):oe(b,d,H)).then(b=>{if(b){if(qe(b,2))return z(se({replace:Y},_(b.to),{state:typeof b.to=="object"?se({},ee,b.to.state):ee,force:fe}),I||d)}else b=Z(d,H,!0,Y,ee);return K(d,H,b),b})}function S(v,I){const O=P(v,I);return O?Promise.reject(O):Promise.resolve()}function q(v,I){let O;const[H,ee,fe]=xu(v,I);O=Qn(H.reverse(),"beforeRouteLeave",v,I);for(const u of H)u.leaveGuards.forEach(d=>{O.push(tt(d,v,I))});const Y=S.bind(null,v,I);return O.push(Y),vt(O).then(()=>{O=[];for(const u of i.list())O.push(tt(u,v,I));return O.push(Y),vt(O)}).then(()=>{O=Qn(ee,"beforeRouteUpdate",v,I);for(const u of ee)u.updateGuards.forEach(d=>{O.push(tt(d,v,I))});return O.push(Y),vt(O)}).then(()=>{O=[];for(const u of v.matched)if(u.beforeEnter&&!I.matched.includes(u))if(Be(u.beforeEnter))for(const d of u.beforeEnter)O.push(tt(d,v,I));else O.push(tt(u.beforeEnter,v,I));return O.push(Y),vt(O)}).then(()=>(v.matched.forEach(u=>u.enterCallbacks={}),O=Qn(fe,"beforeRouteEnter",v,I),O.push(Y),vt(O))).then(()=>{O=[];for(const u of o.list())O.push(tt(u,v,I));return O.push(Y),vt(O)}).catch(u=>qe(u,8)?u:Promise.reject(u))}function K(v,I,O){for(const H of l.list())H(v,I,O)}function Z(v,I,O,H,ee){const fe=P(v,I);if(fe)return fe;const Y=I===Ge,u=Et?history.state:{};O&&(H||Y?r.replace(v.fullPath,se({scroll:Y&&u&&u.scroll},ee)):r.push(v.fullPath,ee)),c.value=v,ot(v,I,O,Y),Ie()}let F;function Q(){F||(F=r.listen((v,I,O)=>{if(!sn.listening)return;const H=g(v),ee=J(H);if(ee){z(se(ee,{replace:!0}),H).catch(qt);return}a=H;const fe=c.value;Et&&Lc(_r(fe.fullPath,O.delta),Nn()),q(H,fe).catch(Y=>qe(Y,12)?Y:qe(Y,2)?(z(Y.to,H).then(u=>{qe(u,20)&&!O.delta&&O.type===Zt.pop&&r.go(-1,!1)}).catch(qt),Promise.reject()):(O.delta&&r.go(-O.delta,!1),oe(Y,H,fe))).then(Y=>{Y=Y||Z(H,fe,!1),Y&&(O.delta&&!qe(Y,8)?r.go(-O.delta,!1):O.type===Zt.pop&&qe(Y,20)&&r.go(-1,!1)),K(H,fe,Y)}).catch(qt)}))}let L=jt(),_e=jt(),G;function oe(v,I,O){Ie(v);const H=_e.list();return H.length?H.forEach(ee=>ee(v,I,O)):console.error(v),Promise.reject(v)}function re(){return G&&c.value!==Ge?Promise.resolve():new Promise((v,I)=>{L.add([v,I])})}function Ie(v){return G||(G=!v,Q(),L.list().forEach(([I,O])=>v?O(v):I()),L.reset()),v}function ot(v,I,O,H){const{scrollBehavior:ee}=e;if(!Et||!ee)return Promise.resolve();const fe=!O&&kc(_r(v.fullPath,0))||(H||!O)&&history.state&&history.state.scroll||null;return si().then(()=>ee(v,I,fe)).then(Y=>Y&&Nc(Y)).catch(Y=>oe(Y,v,I))}const Fe=v=>r.go(v);let Ee;const _t=new Set,sn={currentRoute:c,listening:!0,addRoute:y,removeRoute:C,hasRoute:k,getRoutes:A,resolve:g,options:e,push:$,replace:U,go:Fe,back:()=>Fe(-1),forward:()=>Fe(1),beforeEach:i.add,beforeResolve:o.add,afterEach:l.add,onError:_e.add,isReady:re,install(v){const I=this;v.component("RouterLink",_u),v.component("RouterView",Cu),v.config.globalProperties.$router=I,Object.defineProperty(v.config.globalProperties,"$route",{enumerable:!0,get:()=>Rt(c)}),Et&&!Ee&&c.value===Ge&&(Ee=!0,$(r.location).catch(ee=>{}));const O={};for(const ee in Ge)O[ee]=Se(()=>c.value[ee]);v.provide(Ln,I),v.provide(Fs,en(O)),v.provide(us,c);const H=v.unmount;_t.add(v),v.unmount=function(){_t.delete(v),_t.size<1&&(a=Ge,F&&F(),F=null,c.value=Ge,Ee=!1,G=!1),H()}}};return sn}function vt(e){return e.reduce((t,n)=>t.then(()=>n()),Promise.resolve())}function xu(e,t){const n=[],s=[],r=[],i=Math.max(t.matched.length,e.matched.length);for(let o=0;oIt(a,l))?s.push(l):n.push(l));const c=e.matched[o];c&&(t.matched.find(a=>It(a,c))||r.push(c))}return[n,s,r]}function Ju(){return je(Ln)}function Xu(){return je(Fs)}const Zu=(e,t)=>{const n=e.__vccOpts||e;for(const[s,r]of t)n[s]=r;return n};export{Hu as $,gn as A,Ru as B,Pu as C,Bl as D,si as E,Lo as F,Tu as G,mi as H,pn as I,V as J,Wu as K,Xu as L,Mu as M,ae as N,xe as O,Iu as P,ku as Q,Mi as R,Au as S,Oi as T,Qo as U,kl as V,Uu as W,Ku as X,Li as Y,Su as Z,Zu as _,Qr as a,qu as a0,Lu as a1,$u as a2,ju as a3,Cu as a4,Yu as a5,Ge as a6,Qu as a7,en as b,As as c,Ou as d,D as e,Bu as f,zu as g,Se as h,pe as i,Ms as j,je as k,Du as l,Vu as m,gi as n,pi as o,Ai as p,Nu as q,hn as r,Fu as s,Ii as t,Ju as u,wu as v,ds as w,as as x,ge as y,Rt as z}; diff --git a/assets/index-70769223.js b/assets/index-70769223.js new file mode 100644 index 0000000..6d142a2 --- /dev/null +++ b/assets/index-70769223.js @@ -0,0 +1 @@ +var v=function(){return Boolean(window.location.hostname==="localhost"||window.location.hostname==="[::1]"||window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/))},c;typeof window<"u"&&(typeof Promise<"u"?c=new Promise(function(t){return window.addEventListener("load",t)}):c={then:function(t){return window.addEventListener("load",t)}});function s(t,n){n===void 0&&(n={});var i=n.registrationOptions;i===void 0&&(i={}),delete n.registrationOptions;var e=function(r){for(var f=[],a=arguments.length-1;a-- >0;)f[a]=arguments[a+1];n&&n[r]&&n[r].apply(n,f)};"serviceWorker"in navigator&&c.then(function(){v()?(l(t,e,i),navigator.serviceWorker.ready.then(function(r){e("ready",r)}).catch(function(r){return o(e,r)})):(u(t,e,i),navigator.serviceWorker.ready.then(function(r){e("ready",r)}).catch(function(r){return o(e,r)}))})}function o(t,n){navigator.onLine||t("offline"),t("error",n)}function u(t,n,i){navigator.serviceWorker.register(t,i).then(function(e){if(n("registered",e),e.waiting){n("updated",e);return}e.onupdatefound=function(){n("updatefound",e);var r=e.installing;r.onstatechange=function(){r.state==="installed"&&(navigator.serviceWorker.controller?n("updated",e):n("cached",e))}}}).catch(function(e){return o(n,e)})}function l(t,n,i){fetch(t).then(function(e){e.status===404?(n("error",new Error("Service worker not found at "+t)),d()):e.headers.get("content-type").indexOf("javascript")===-1?(n("error",new Error("Expected "+t+" to have javascript content-type, but received "+e.headers.get("content-type"))),d()):u(t,n,i)}).catch(function(e){return o(n,e)})}function d(){"serviceWorker"in navigator&&navigator.serviceWorker.ready.then(function(t){t.unregister()}).catch(function(t){return o(emit,t)})}export{s as register,d as unregister}; diff --git a/assets/index.html-103e28a1.js b/assets/index.html-103e28a1.js new file mode 100644 index 0000000..9c8f3c0 --- /dev/null +++ b/assets/index.html-103e28a1.js @@ -0,0 +1 @@ +const e=JSON.parse('{"key":"v-7a6ec647","path":"/PluginMarket/","title":"","lang":"zh-CN","frontmatter":{},"headers":[{"level":2,"title":"插件市场","slug":"插件市场","link":"#插件市场","children":[]}],"git":{"updatedTime":1673106873000,"contributors":[{"name":"Harry-zklcdc","email":"1269158832@qq.com","commits":1}]},"filePathRelative":"PluginMarket/README.md"}');export{e as data}; diff --git a/assets/index.html-1f0059e4.js b/assets/index.html-1f0059e4.js new file mode 100644 index 0000000..bdb8a31 --- /dev/null +++ b/assets/index.html-1f0059e4.js @@ -0,0 +1 @@ +const e=JSON.parse('{"key":"v-02e2dca3","path":"/PluginDocs/Web/","title":"前端","lang":"zh-CN","frontmatter":{},"headers":[],"git":{"updatedTime":1675256121000,"contributors":[{"name":"Ceyase","email":"jjcyf@foxmail.com","commits":1}]},"filePathRelative":"PluginDocs/Web/Index.md"}');export{e as data}; diff --git a/assets/index.html-4f366004.js b/assets/index.html-4f366004.js new file mode 100644 index 0000000..78ea700 --- /dev/null +++ b/assets/index.html-4f366004.js @@ -0,0 +1 @@ +const e=JSON.parse('{"key":"v-12b535db","path":"/Docs/","title":"✨ 简介","lang":"zh-CN","frontmatter":{},"headers":[{"level":2,"title":"🚧 | 简介","slug":"🚧-简介","link":"#🚧-简介","children":[]},{"level":2,"title":"🎉 | 特性","slug":"🎉-特性","link":"#🎉-特性","children":[]}],"git":{"updatedTime":1673158677000,"contributors":[{"name":"Harry-zklcdc","email":"1269158832@qq.com","commits":2}]},"filePathRelative":"Docs/README.md"}');export{e as data}; diff --git a/assets/index.html-550593ad.js b/assets/index.html-550593ad.js new file mode 100644 index 0000000..80793ae --- /dev/null +++ b/assets/index.html-550593ad.js @@ -0,0 +1 @@ +import{_ as t,p as s,q as c,R as e,t as a}from"./framework-cc651620.js";const n={},o=e("h2",{id:"关于我们",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#关于我们","aria-hidden":"true"},"#"),a(" 关于我们")],-1),r=e("div",{class:"custom-container tip"},[e("p",{class:"custom-container-title"},"提示"),e("p",null,"关于我们正在建设中...")],-1),i=[o,r];function _(d,l){return s(),c("div",null,i)}const u=t(n,[["render",_],["__file","index.html.vue"]]);export{u as default}; diff --git a/assets/index.html-5ff51570.js b/assets/index.html-5ff51570.js new file mode 100644 index 0000000..9f97b1c --- /dev/null +++ b/assets/index.html-5ff51570.js @@ -0,0 +1 @@ +import{_ as l,M as n,p as i,q as o,R as e,t,N as r,a1 as s}from"./framework-cc651620.js";const d={},h=s('

✨ 简介

Hello 🌈 HiperLink 你好 🔗 嗨皮立刻

Node.JS VersionVue VersionPlatform

🚧 | 简介

嗨皮立刻, 英文名: HiperLink

',5),c=e("code",null,"Golang",-1),u=e("code",null,"Vue",-1),_={href:"https://www.the.bb/",target:"_blank",rel:"noopener noreferrer"},p=e("h2",{id:"🎉-特性",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#🎉-特性","aria-hidden":"true"},"#"),t(" 🎉 | 特性")],-1),f=e("ul",null,[e("li",null,"✅ 全平台"),e("li",null,"✅ 轻量化"),e("li",null,"✅ 插件化"),e("li",null,"✅ 高性能"),e("li",null,"✅ 易用性")],-1);function m(b,g){const a=n("ExternalLinkIcon");return i(),o("div",null,[h,e("p",null,[t("采用 "),c,t(" + "),u,t(" 技术栈, 基于 "),e("a",_,[t("Hiper"),r(a)]),t(" 的插件化、轻量化互联互通平台 🎉")]),p,f])}const k=l(d,[["render",m],["__file","index.html.vue"]]);export{k as default}; diff --git a/assets/index.html-7b9a0856.js b/assets/index.html-7b9a0856.js new file mode 100644 index 0000000..e6cb3a7 --- /dev/null +++ b/assets/index.html-7b9a0856.js @@ -0,0 +1 @@ +import{_ as e,p as t,q as c}from"./framework-cc651620.js";const n={};function _(r,o){return t(),c("div")}const a=e(n,[["render",_],["__file","index.html.vue"]]);export{a as default}; diff --git a/assets/index.html-86b4a8cc.js b/assets/index.html-86b4a8cc.js new file mode 100644 index 0000000..d5a4013 --- /dev/null +++ b/assets/index.html-86b4a8cc.js @@ -0,0 +1 @@ +import{_ as t,p as s,q as c,R as e,t as a}from"./framework-cc651620.js";const n={},o=e("h2",{id:"插件市场",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#插件市场","aria-hidden":"true"},"#"),a(" 插件市场")],-1),r=e("div",{class:"custom-container tip"},[e("p",{class:"custom-container-title"},"提示"),e("p",null,"插件市场正在建设中...")],-1),i=[o,r];function _(d,l){return s(),c("div",null,i)}const u=t(n,[["render",_],["__file","index.html.vue"]]);export{u as default}; diff --git a/assets/index.html-8704499c.js b/assets/index.html-8704499c.js new file mode 100644 index 0000000..922e6d2 --- /dev/null +++ b/assets/index.html-8704499c.js @@ -0,0 +1 @@ +const e=JSON.parse('{"key":"v-8daa1a0e","path":"/","title":"","lang":"zh-CN","frontmatter":{"externalLinkIcon":false,"home":true,"heroImage":"favicon.ico","heroHeight":260,"heroText":"🌈 HiperLink | 嗨皮立刻 🔗","tagline":"基于 Hiper 的插件化、轻量化互联互通平台 🎉","actions":[{"text":"立即下载","link":"https://github.com/Hiper-Link/HiperLink-core/releases","type":"secondary"},{"text":"快速上手","link":"/Docs/Start.html","type":"primary"}],"features":[{"title":"全平台","details":"无论使用 Windows 或是 macOS,亦或是 Linux,皆可立地腾飞,让你能做的更多,做什么都更快,工作娱乐全放得开"},{"title":"插件化","details":"别看轻,别轻看,万物皆可插件化,互联只需一键,体验由你决定"},{"title":"高性能","details":"采用 Golang + Vue 技术栈,轻快如风,快接快传,好快意"}],"footer":"Copyright © 2022-present HiperLink Team"},"headers":[],"git":{"updatedTime":1673159058000,"contributors":[{"name":"Harry-zklcdc","email":"1269158832@qq.com","commits":4}]},"filePathRelative":"README.md"}');export{e as data}; diff --git a/assets/index.html-9e9e82fb.js b/assets/index.html-9e9e82fb.js new file mode 100644 index 0000000..847feb1 --- /dev/null +++ b/assets/index.html-9e9e82fb.js @@ -0,0 +1 @@ +import{_ as e,p as c,q as o,a1 as d}from"./framework-cc651620.js";const t={},n=d('

简介

注意

HiperLink仍然在测试阶段,此文档可能随时变更。

HiperLink插件(以下简称插件)可以使用任何支持netRPC或gRPC通讯的语言编写。

我们建议你使用Golang进行插件开发。

提示

net/rpc只有Golang支持,所以本文档会优先注重多语言支持的gRPC库。

gRPC在理论上支持C/C++C#DartGoJavaKotlinNode.jsObjective-CPHPPythonRuby等语言。

HiperLink 需要支持多平台,你所选用的语言应该尽可能的支持更多平台,因此Objective-CPHP等选项被不幸的排除在外了。

如果你准备好了,那让我们开始吧!

',6),i=[n];function a(s,p){return c(),o("div",null,i)}const l=e(t,[["render",a],["__file","index.html.vue"]]);export{l as default}; diff --git a/assets/index.html-d2bbbcfd.js b/assets/index.html-d2bbbcfd.js new file mode 100644 index 0000000..e670989 --- /dev/null +++ b/assets/index.html-d2bbbcfd.js @@ -0,0 +1 @@ +const e=JSON.parse('{"key":"v-3e214e9b","path":"/About/","title":"","lang":"zh-CN","frontmatter":{},"headers":[{"level":2,"title":"关于我们","slug":"关于我们","link":"#关于我们","children":[]}],"git":{"updatedTime":1673106873000,"contributors":[{"name":"Harry-zklcdc","email":"1269158832@qq.com","commits":1}]},"filePathRelative":"About/README.md"}');export{e as data}; diff --git a/assets/index.html-db82fc2e.js b/assets/index.html-db82fc2e.js new file mode 100644 index 0000000..a9503ac --- /dev/null +++ b/assets/index.html-db82fc2e.js @@ -0,0 +1 @@ +const e=JSON.parse('{"key":"v-6bc6c5b0","path":"/PluginDocs/","title":"简介","lang":"zh-CN","frontmatter":{},"headers":[],"git":{"updatedTime":1673830380000,"contributors":[{"name":"Harry-zklcdc","email":"1269158832@qq.com","commits":3},{"name":"Ceyase","email":"jjcyf@foxmail.com","commits":1}]},"filePathRelative":"PluginDocs/README.md"}');export{e as data}; diff --git a/assets/index.html-ef97b19a.js b/assets/index.html-ef97b19a.js new file mode 100644 index 0000000..a9b9325 --- /dev/null +++ b/assets/index.html-ef97b19a.js @@ -0,0 +1,140 @@ +import{_ as p,M as o,p as c,q as e,R as n,t as a,N as l,a1 as s}from"./framework-cc651620.js";const u="/img/PluginDocs/Example-1.png",k={},i=s('

前端

对于每个插件,在其文件夹下都有src子文件夹,此文件夹内部有两个文件:index.htmlconfig.html

  • index.html 为插件页面的入口点
  • config.html 为插件的配置页面
',3),r=n("code",null,"HTML",-1),g=n("code",null,"JavaScript",-1),v={href:"https://vuetify.cn/zh-Hans/",target:"_blank",rel:"noopener noreferrer"},q=s(`

以下是一个用于范例的index.html页面代码:

<div class="v-container">
+  <div class="v-row">
+    <div class="v-col-sm-7 v-col-12">
+      <div class="v-card v-card--flat v-theme--light v-card--density-default v-card--variant-elevated" style="background-color: rgb(242, 245, 254); border-radius: 12px; margin-top: -8px;">
+        <div class="v-card-title" style="margin-top: 12px;">
+          <strong>这是一个卡片</strong>
+          <div class="v-card-text">
+            <div style="overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 7; -webkit-box-orient: vertical;">
+              <div class="v-input v-input--horizontal v-input--density-default v-text-field">
+                <div class="v-input__control">
+                  <div class="v-field v-field--active v-field--has-background v-field--variant-filled v-theme--light" role="textbox" style="background-color: rgb(242, 245, 254);">
+                    <div class="v-field__overlay">
+                    </div>
+                    <div class="v-field__loader">
+                      <div class="v-progress-linear v-theme--light" role="progressbar" aria-hidden="true" aria-valuemin="0" aria-valuemax="100" style="height: 0px; --v-progress-linear-height:2px;">
+                        <div class="v-progress-linear__background bg-info" style="width: 100%;">
+                        </div>
+                        <div class="v-progress-linear__indeterminate">
+                          <div class="v-progress-linear__indeterminate long bg-info">
+                          </div>
+                          <div class="v-progress-linear__indeterminate short bg-info">
+                          </div>
+                        </div>
+                      </div>
+                    </div>
+                    <div class="v-field__field" data-no-activator="">
+                      <label class="v-label v-field-label v-field-label--floating" aria-hidden="true" for="input-887">这是一个输入框</label>
+                      <input size="1" type="text" id="otherip" class="v-field__input">
+                    </div>
+                    <div class="v-field__outline">
+                    </div>
+                  </div>
+                </div>
+                <div class="v-input__details">
+                  <div class="v-messages">
+                  </div>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="v-card-actions" style="margin-top: -24px;">
+            <div style="float: right;">
+              <button type="button" onclick="" class="v-btn v-theme--light text-info v-btn--density-default v-btn--size-default v-btn--variant-text" style="font-size: 16px;">
+                <span class="v-btn__overlay">
+                </span>
+                <span class="v-btn__underlay">
+                </span>
+                <span class="v-btn__content" data-no-activator="">一个小按钮</span>
+              </button>
+            </div>
+          </div>
+          <span class="v-card__underlay">
+          </span>
+        </div>
+      </div>
+    </div>
+    <div class="v-col-sm-5 v-col-12">
+      <div class="v-card v-card--flat v-theme--light v-card--density-default v-card--variant-elevated" style="background-color: rgb(242, 245, 254); border-radius: 12px; margin-top: -8px;">
+        <div class="v-card__loader">
+          <div class="v-progress-linear v-theme--light" role="progressbar" aria-hidden="true" aria-valuemin="0" aria-valuemax="100" style="height: 0px; --v-progress-linear-height:2px;">
+            <div class="v-progress-linear__background" style="width: 100%;">
+            </div>
+            <div class="v-progress-linear__indeterminate">
+              <div class="v-progress-linear__indeterminate long">
+              </div>
+              <div class="v-progress-linear__indeterminate short">
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="v-card-title" style="margin-top: 12px;">
+          <strong>这是另一个卡片</strong>
+          <div style="margin-top: 4px;font-size: 1px;">一些简单的注释,下面是一个列表</div>
+        </div>
+        <div class="v-card-text">
+          <div class="v-table v-theme--light v-table--density-compact">
+            <div class="v-table__wrapper">
+              <table>
+                <tbody>
+                  <tr>
+                    <td>1</td>
+                    <td>
+                      <span class="v-chip v-theme--light text-info v-chip--density-default v-chip--size-x-small v-chip--variant-tonal" draggable="false" id="version-rustdesk">1
+                        <span class="v-chip__underlay"></span>
+                      </span>
+                    </td>
+                  </tr>
+                  <tr>
+                    <td>11</td>
+                    <td>
+                      <span class="v-chip v-theme--light text-info v-chip--density-default v-chip--size-x-small v-chip--variant-tonal" draggable="false" id="ip">2
+                        <span class="v-chip__underlay"></span>
+                      </span>
+                    </td>
+                  </tr>
+                  <tr>
+                    <td>111</td>
+                    <td>
+                      <span class="v-chip v-theme--light text-info v-chip--density-default v-chip--size-x-small v-chip--variant-tonal" draggable="false" id="password">3
+                        <span class="v-chip__underlay"></span>
+                      </span>
+                    </td>
+                  </tr>
+                  <tr>
+                    <td>1111</td>
+                    <td>
+                      <span class="v-chip v-theme--light text-info v-chip--density-default v-chip--size-x-small v-chip--variant-tonal" draggable="false" id="password">4
+                        <span class="v-chip__underlay"></span>
+                      </span>
+                    </td>
+                  </tr>
+                  <tr>
+                    <td>1111</td>
+                    <td>
+                      <span class="v-chip v-theme--light text-info v-chip--density-default v-chip--size-x-small v-chip--variant-tonal" draggable="false" id="password">5
+                        <span class="v-chip__underlay"></span>
+                      </span>
+                    </td>
+                  </tr>
+                </tbody>
+              </table>
+            </div>
+          </div>
+        </div>
+        <span class="v-card__underlay">
+        </span>
+      </div>
+      <a class="v-btn v-btn--block v-theme--light v-btn--density-default rounded-xl v-btn--size-x-large v-btn--variant-tonal" style="color: rgb(106, 164, 255); caret-color: rgb(106, 164, 255); margin-top: 16px;" onclick="" id="actionButton">
+        <span class="v-btn__overlay">
+        </span>
+        <span class="v-btn__underlay">
+        </span>
+        <span class="v-btn__content" data-no-activator="">
+          <strong id="action">一个大按钮</strong>
+        </span>
+      </a>
+    </div>
+  </div>
+</div>
+

效果如下: Example

',3);function d(m,h){const t=o("ExternalLinkIcon");return c(),e("div",null,[i,n("p",null,[a("编写插件页面需要你有基本的"),r,a("与"),g,a("知识,HiperLink内置了"),n("a",v,[a("Vuetify"),l(t)]),a(" 框架,因此您可以直接开始!")]),q])}const y=p(k,[["render",d],["__file","index.html.vue"]]);export{y as default}; diff --git a/assets/search-0782d0d1.svg b/assets/search-0782d0d1.svg new file mode 100644 index 0000000..03d8391 --- /dev/null +++ b/assets/search-0782d0d1.svg @@ -0,0 +1 @@ + diff --git a/assets/style-0596657c.css b/assets/style-0596657c.css new file mode 100644 index 0000000..7f83c24 --- /dev/null +++ b/assets/style-0596657c.css @@ -0,0 +1 @@ +:root{--external-link-icon-color: #aaa}.external-link-icon{position:relative;display:inline-block;color:var(--external-link-icon-color);vertical-align:middle;top:-1px}@media print{.external-link-icon{display:none}}.external-link-icon-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}:root{--medium-zoom-z-index: 100;--medium-zoom-bg-color: #ffffff;--medium-zoom-opacity: 1}.medium-zoom-overlay{background-color:var(--medium-zoom-bg-color)!important;z-index:var(--medium-zoom-z-index)}.medium-zoom-overlay~img{z-index:calc(var(--medium-zoom-z-index) + 1)}.medium-zoom--opened .medium-zoom-overlay{opacity:var(--medium-zoom-opacity)}:root{--nprogress-color: #29d;--nprogress-z-index: 1031}#nprogress{pointer-events:none}#nprogress .bar{background:var(--nprogress-color);position:fixed;z-index:var(--nprogress-z-index);top:0;left:0;width:100%;height:2px}:root{--c-brand: #3eaf7c;--c-brand-light: #4abf8a;--c-bg: #ffffff;--c-bg-light: #f3f4f5;--c-bg-lighter: #eeeeee;--c-bg-dark: #ebebec;--c-bg-darker: #e6e6e6;--c-bg-navbar: var(--c-bg);--c-bg-sidebar: var(--c-bg);--c-bg-arrow: #cccccc;--c-text: #2c3e50;--c-text-accent: var(--c-brand);--c-text-light: #3a5169;--c-text-lighter: #4e6e8e;--c-text-lightest: #6a8bad;--c-text-quote: #999999;--c-border: #eaecef;--c-border-dark: #dfe2e5;--c-tip: #42b983;--c-tip-bg: var(--c-bg-light);--c-tip-title: var(--c-text);--c-tip-text: var(--c-text);--c-tip-text-accent: var(--c-text-accent);--c-warning: #ffc310;--c-warning-bg: #fffae3;--c-warning-bg-light: #fff3ba;--c-warning-bg-lighter: #fff0b0;--c-warning-border-dark: #f7dc91;--c-warning-details-bg: #fff5ca;--c-warning-title: #f1b300;--c-warning-text: #746000;--c-warning-text-accent: #edb100;--c-warning-text-light: #c1971c;--c-warning-text-quote: #ccab49;--c-danger: #f11e37;--c-danger-bg: #ffe0e0;--c-danger-bg-light: #ffcfde;--c-danger-bg-lighter: #ffc9c9;--c-danger-border-dark: #f1abab;--c-danger-details-bg: #ffd4d4;--c-danger-title: #ed1e2c;--c-danger-text: #660000;--c-danger-text-accent: #bd1a1a;--c-danger-text-light: #b5474d;--c-danger-text-quote: #c15b5b;--c-details-bg: #eeeeee;--c-badge-tip: var(--c-tip);--c-badge-warning: #ecc808;--c-badge-warning-text: var(--c-bg);--c-badge-danger: #dc2626;--c-badge-danger-text: var(--c-bg);--t-color: .3s ease;--t-transform: .3s ease;--code-bg-color: #282c34;--code-hl-bg-color: rgba(0, 0, 0, .66);--code-ln-color: #9e9e9e;--code-ln-wrapper-width: 3.5rem;--font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;--font-family-code: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace;--navbar-height: 3.6rem;--navbar-padding-v: .7rem;--navbar-padding-h: 1.5rem;--sidebar-width: 20rem;--sidebar-width-mobile: calc(var(--sidebar-width) * .82);--content-width: 740px;--homepage-width: 960px}.back-to-top{--back-to-top-color: var(--c-brand);--back-to-top-color-hover: var(--c-brand-light)}.DocSearch{--docsearch-primary-color: var(--c-brand);--docsearch-text-color: var(--c-text);--docsearch-highlight-color: var(--c-brand);--docsearch-muted-color: var(--c-text-quote);--docsearch-container-background: rgba(9, 10, 17, .8);--docsearch-modal-background: var(--c-bg-light);--docsearch-searchbox-background: var(--c-bg-lighter);--docsearch-searchbox-focus-background: var(--c-bg);--docsearch-searchbox-shadow: inset 0 0 0 2px var(--c-brand);--docsearch-hit-color: var(--c-text-light);--docsearch-hit-active-color: var(--c-bg);--docsearch-hit-background: var(--c-bg);--docsearch-hit-shadow: 0 1px 3px 0 var(--c-border-dark);--docsearch-footer-background: var(--c-bg)}.external-link-icon{--external-link-icon-color: var(--c-text-quote)}.medium-zoom-overlay{--medium-zoom-bg-color: var(--c-bg)}#nprogress{--nprogress-color: var(--c-brand)}.pwa-popup{--pwa-popup-text-color: var(--c-text);--pwa-popup-bg-color: var(--c-bg);--pwa-popup-border-color: var(--c-brand);--pwa-popup-shadow: 0 4px 16px var(--c-brand);--pwa-popup-btn-text-color: var(--c-bg);--pwa-popup-btn-bg-color: var(--c-brand);--pwa-popup-btn-hover-bg-color: var(--c-brand-light)}.search-box{--search-bg-color: var(--c-bg);--search-accent-color: var(--c-brand);--search-text-color: var(--c-text);--search-border-color: var(--c-border);--search-item-text-color: var(--c-text-lighter);--search-item-focus-bg-color: var(--c-bg-light)}html.dark{--c-brand: #3aa675;--c-brand-light: #349469;--c-bg: #22272e;--c-bg-light: #2b313a;--c-bg-lighter: #262c34;--c-bg-dark: #343b44;--c-bg-darker: #37404c;--c-text: #adbac7;--c-text-light: #96a7b7;--c-text-lighter: #8b9eb0;--c-text-lightest: #8094a8;--c-border: #3e4c5a;--c-border-dark: #34404c;--c-tip: #318a62;--c-warning: #e0ad15;--c-warning-bg: #2d2f2d;--c-warning-bg-light: #423e2a;--c-warning-bg-lighter: #44442f;--c-warning-border-dark: #957c35;--c-warning-details-bg: #39392d;--c-warning-title: #fdca31;--c-warning-text: #d8d96d;--c-warning-text-accent: #ffbf00;--c-warning-text-light: #ddb84b;--c-warning-text-quote: #ccab49;--c-danger: #fc1e38;--c-danger-bg: #39232c;--c-danger-bg-light: #4b2b35;--c-danger-bg-lighter: #553040;--c-danger-border-dark: #a25151;--c-danger-details-bg: #482936;--c-danger-title: #fc2d3b;--c-danger-text: #ea9ca0;--c-danger-text-accent: #fd3636;--c-danger-text-light: #d9777c;--c-danger-text-quote: #d56b6b;--c-details-bg: #323843;--c-badge-warning: var(--c-warning);--c-badge-warning-text: #3c2e05;--c-badge-danger: var(--c-danger);--c-badge-danger-text: #401416;--code-hl-bg-color: #363b46}html.dark .DocSearch{--docsearch-logo-color: var(--c-text);--docsearch-modal-shadow: inset 1px 1px 0 0 #2c2e40, 0 3px 8px 0 #000309;--docsearch-key-shadow: inset 0 -2px 0 0 #282d55, inset 0 0 1px 1px #51577d, 0 2px 2px 0 rgba(3, 4, 9, .3);--docsearch-key-gradient: linear-gradient(-225deg, #444950, #1c1e21);--docsearch-footer-shadow: inset 0 1px 0 0 rgba(73, 76, 106, .5), 0 -4px 8px 0 rgba(0, 0, 0, .2)}html,body{padding:0;margin:0;background-color:var(--c-bg);transition:background-color var(--t-color)}html.dark{color-scheme:dark}html{font-size:16px}body{font-family:var(--font-family);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:1rem;color:var(--c-text)}a{font-weight:500;color:var(--c-text-accent);text-decoration:none;overflow-wrap:break-word}p a code{font-weight:400;color:var(--c-text-accent)}kbd{font-family:var(--font-family-code);color:var(--c-text);background:var(--c-bg-lighter);border:solid .15rem var(--c-border-dark);border-bottom:solid .25rem var(--c-border-dark);border-radius:.15rem;padding:0 .15em}code{font-family:var(--font-family-code);color:var(--c-text-lighter);padding:.25rem .5rem;margin:0;font-size:.85em;background-color:var(--c-bg-light);border-radius:3px;overflow-wrap:break-word;transition:background-color var(--t-color)}blockquote{font-size:1rem;color:var(--c-text-quote);border-left:.2rem solid var(--c-border-dark);margin:1rem 0;padding:.25rem 0 .25rem 1rem;overflow-wrap:break-word}blockquote>p{margin:0}ul,ol{padding-left:1.2em}strong{font-weight:600}h1,h2,h3,h4,h5,h6{font-weight:600;line-height:1.25;overflow-wrap:break-word}h1:focus-visible,h2:focus-visible,h3:focus-visible,h4:focus-visible,h5:focus-visible,h6:focus-visible{outline:none}h1:hover .header-anchor,h2:hover .header-anchor,h3:hover .header-anchor,h4:hover .header-anchor,h5:hover .header-anchor,h6:hover .header-anchor{opacity:1}h1{font-size:2.2rem}h2{font-size:1.65rem;padding-bottom:.3rem;border-bottom:1px solid var(--c-border);transition:border-color var(--t-color)}h3{font-size:1.35rem}h4{font-size:1.15rem}h5{font-size:1.05rem}h6{font-size:1rem}a.header-anchor{font-size:.85em;float:left;margin-left:-.87em;padding-right:.23em;margin-top:.125em;opacity:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}@media print{a.header-anchor{display:none}}a.header-anchor:hover{text-decoration:none}a.header-anchor:focus-visible{opacity:1}@media print{a[href^="http://"]:after,a[href^="https://"]:after{content:" (" attr(href) ") "}}p,ul,ol{line-height:1.7;overflow-wrap:break-word}hr{border:0;border-top:1px solid var(--c-border)}table{border-collapse:collapse;margin:1rem 0;display:block;overflow-x:auto;transition:border-color var(--t-color)}tr{border-top:1px solid var(--c-border-dark);transition:border-color var(--t-color)}tr:nth-child(2n){background-color:var(--c-bg-light);transition:background-color var(--t-color)}tr:nth-child(2n) code{background-color:var(--c-bg-dark)}th,td{padding:.6em 1em;border:1px solid var(--c-border-dark);transition:border-color var(--t-color)}.arrow{display:inline-block;width:0;height:0}.arrow.up{border-left:4px solid transparent;border-right:4px solid transparent;border-bottom:6px solid var(--c-bg-arrow)}.arrow.down{border-left:4px solid transparent;border-right:4px solid transparent;border-top:6px solid var(--c-bg-arrow)}.arrow.right{border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:6px solid var(--c-bg-arrow)}.arrow.left{border-top:4px solid transparent;border-bottom:4px solid transparent;border-right:6px solid var(--c-bg-arrow)}.badge{display:inline-block;font-size:14px;font-weight:600;height:18px;line-height:18px;border-radius:3px;padding:0 6px;color:var(--c-bg);vertical-align:top;transition:color var(--t-color),background-color var(--t-color)}.badge.tip{background-color:var(--c-badge-tip)}.badge.warning{background-color:var(--c-badge-warning);color:var(--c-badge-warning-text)}.badge.danger{background-color:var(--c-badge-danger);color:var(--c-badge-danger-text)}.badge+.badge{margin-left:5px}code[class*=language-],pre[class*=language-]{color:#ccc;background:none;font-family:var(--font-family-code);font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#2d2d2d}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.comment,.token.block-comment,.token.prolog,.token.doctype,.token.cdata{color:#999}.token.punctuation{color:#ccc}.token.tag,.token.attr-name,.token.namespace,.token.deleted{color:#ec5975}.token.function-name{color:#6196cc}.token.boolean,.token.number,.token.function{color:#f08d49}.token.property,.token.class-name,.token.constant,.token.symbol{color:#f8c555}.token.selector,.token.important,.token.atrule,.token.keyword,.token.builtin{color:#cc99cd}.token.string,.token.char,.token.attr-value,.token.regex,.token.variable{color:#7ec699}.token.operator,.token.entity,.token.url{color:#67cdcc}.token.important,.token.bold{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.inserted{color:#3eaf7c}.theme-default-content pre,.theme-default-content pre[class*=language-]{line-height:1.375;padding:1.3rem 1.5rem;margin:.85rem 0;border-radius:6px;overflow:auto}.theme-default-content pre code,.theme-default-content pre[class*=language-] code{color:#fff;padding:0;background-color:transparent!important;border-radius:0;overflow-wrap:unset;-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.theme-default-content .line-number{font-family:var(--font-family-code)}div[class*=language-]{position:relative;background-color:var(--code-bg-color);border-radius:6px}div[class*=language-]:before{content:attr(data-ext);position:absolute;z-index:3;top:.8em;right:1em;font-size:.75rem;color:var(--code-ln-color)}div[class*=language-] pre,div[class*=language-] pre[class*=language-]{background:transparent!important;position:relative;z-index:1}div[class*=language-] .highlight-lines{-webkit-user-select:none;-moz-user-select:none;user-select:none;padding-top:1.3rem;position:absolute;top:0;left:0;width:100%;line-height:1.375}div[class*=language-] .highlight-lines .highlight-line{background-color:var(--code-hl-bg-color)}div[class*=language-]:not(.line-numbers-mode) .line-numbers{display:none}div[class*=language-].line-numbers-mode .highlight-lines .highlight-line{position:relative}div[class*=language-].line-numbers-mode .highlight-lines .highlight-line:before{content:" ";position:absolute;z-index:2;left:0;top:0;display:block;width:var(--code-ln-wrapper-width);height:100%}div[class*=language-].line-numbers-mode pre{margin-left:var(--code-ln-wrapper-width);padding-left:1rem;vertical-align:middle}div[class*=language-].line-numbers-mode .line-numbers{position:absolute;top:0;width:var(--code-ln-wrapper-width);text-align:center;color:var(--code-ln-color);padding-top:1.25rem;line-height:1.375;counter-reset:line-number}div[class*=language-].line-numbers-mode .line-numbers .line-number{position:relative;z-index:3;-webkit-user-select:none;-moz-user-select:none;user-select:none;height:1.375em}div[class*=language-].line-numbers-mode .line-numbers .line-number:before{counter-increment:line-number;content:counter(line-number);font-size:.85em}div[class*=language-].line-numbers-mode:after{content:"";position:absolute;top:0;left:0;width:var(--code-ln-wrapper-width);height:100%;border-radius:6px 0 0 6px;border-right:1px solid var(--code-hl-bg-color)}@media (max-width: 419px){.theme-default-content div[class*=language-]{margin:.85rem -1.5rem;border-radius:0}}.code-group__nav{margin-top:.85rem;margin-bottom:calc(-1.7rem - 6px);padding-bottom:calc(1.7rem - 6px);padding-left:10px;padding-top:10px;border-top-left-radius:6px;border-top-right-radius:6px;background-color:var(--code-bg-color)}.code-group__ul{margin:auto 0;padding-left:0;display:inline-flex;list-style:none}.code-group__nav-tab{border:0;padding:5px;cursor:pointer;background-color:transparent;font-size:.85em;line-height:1.4;color:#ffffffe6;font-weight:600}.code-group__nav-tab:focus{outline:none}.code-group__nav-tab:focus-visible{outline:1px solid rgba(255,255,255,.9)}.code-group__nav-tab-active{border-bottom:var(--c-brand) 1px solid}@media (max-width: 419px){.code-group__nav{margin-left:-1.5rem;margin-right:-1.5rem;border-radius:0}}.code-group-item{display:none}.code-group-item__active{display:block}.code-group-item>pre{background-color:orange}.custom-container{transition:color var(--t-color),border-color var(--t-color),background-color var(--t-color)}.custom-container .custom-container-title{font-weight:600}.custom-container .custom-container-title:not(:only-child){margin-bottom:-.4rem}.custom-container.tip,.custom-container.warning,.custom-container.danger{padding:.1rem 1.5rem;border-left-width:.5rem;border-left-style:solid;margin:1rem 0}.custom-container.tip{border-color:var(--c-tip);background-color:var(--c-tip-bg);color:var(--c-tip-text)}.custom-container.tip .custom-container-title{color:var(--c-tip-title)}.custom-container.tip a{color:var(--c-tip-text-accent)}.custom-container.tip code{background-color:var(--c-bg-dark)}.custom-container.warning{border-color:var(--c-warning);background-color:var(--c-warning-bg);color:var(--c-warning-text)}.custom-container.warning .custom-container-title{color:var(--c-warning-title)}.custom-container.warning a{color:var(--c-warning-text-accent)}.custom-container.warning blockquote{border-left-color:var(--c-warning-border-dark);color:var(--c-warning-text-quote)}.custom-container.warning code{color:var(--c-warning-text-light);background-color:var(--c-warning-bg-light)}.custom-container.warning details{background-color:var(--c-warning-details-bg)}.custom-container.warning details code{background-color:var(--c-warning-bg-lighter)}.custom-container.warning .external-link-icon{--external-link-icon-color: var(--c-warning-text-quote)}.custom-container.danger{border-color:var(--c-danger);background-color:var(--c-danger-bg);color:var(--c-danger-text)}.custom-container.danger .custom-container-title{color:var(--c-danger-title)}.custom-container.danger a{color:var(--c-danger-text-accent)}.custom-container.danger blockquote{border-left-color:var(--c-danger-border-dark);color:var(--c-danger-text-quote)}.custom-container.danger code{color:var(--c-danger-text-light);background-color:var(--c-danger-bg-light)}.custom-container.danger details{background-color:var(--c-danger-details-bg)}.custom-container.danger details code{background-color:var(--c-danger-bg-lighter)}.custom-container.danger .external-link-icon{--external-link-icon-color: var(--c-danger-text-quote)}.custom-container.details{display:block;position:relative;border-radius:2px;margin:1.6em 0;padding:1.6em;background-color:var(--c-details-bg)}.custom-container.details code{background-color:var(--c-bg-darker)}.custom-container.details h4{margin-top:0}.custom-container.details figure:last-child,.custom-container.details p:last-child{margin-bottom:0;padding-bottom:0}.custom-container.details summary{outline:none;cursor:pointer}.home{padding:var(--navbar-height) 2rem 0;max-width:var(--homepage-width);margin:0 auto;display:block}.home .hero{text-align:center}.home .hero img{max-width:100%;max-height:280px;display:block;margin:3rem auto 1.5rem}.home .hero h1{font-size:3rem}.home .hero h1,.home .hero .description,.home .hero .actions{margin:1.8rem auto}.home .hero .actions{display:flex;flex-wrap:wrap;gap:1rem;justify-content:center}.home .hero .description{max-width:35rem;font-size:1.6rem;line-height:1.3;color:var(--c-text-lightest)}.home .hero .action-button{display:inline-block;font-size:1.2rem;padding:.8rem 1.6rem;border-width:2px;border-style:solid;border-radius:4px;transition:background-color var(--t-color);box-sizing:border-box}.home .hero .action-button.primary{color:var(--c-bg);background-color:var(--c-brand);border-color:var(--c-brand)}.home .hero .action-button.primary:hover{background-color:var(--c-brand-light)}.home .hero .action-button.secondary{color:var(--c-brand);background-color:var(--c-bg);border-color:var(--c-brand)}.home .hero .action-button.secondary:hover{color:var(--c-bg);background-color:var(--c-brand-light)}.home .features{border-top:1px solid var(--c-border);transition:border-color var(--t-color);padding:1.2rem 0;margin-top:2.5rem;display:flex;flex-wrap:wrap;align-items:flex-start;align-content:stretch;justify-content:space-between}.home .feature{flex-grow:1;flex-basis:30%;max-width:30%}.home .feature h2{font-size:1.4rem;font-weight:500;border-bottom:none;padding-bottom:0;color:var(--c-text-light)}.home .feature p{color:var(--c-text-lighter)}.home .theme-default-content{padding:0;margin:0}.home .footer{padding:2.5rem;border-top:1px solid var(--c-border);text-align:center;color:var(--c-text-lighter);transition:border-color var(--t-color)}@media (max-width: 719px){.home .features{flex-direction:column}.home .feature{max-width:100%;padding:0 2.5rem}}@media (max-width: 419px){.home{padding-left:1.5rem;padding-right:1.5rem}.home .hero img{max-height:210px;margin:2rem auto 1.2rem}.home .hero h1{font-size:2rem}.home .hero h1,.home .hero .description,.home .hero .actions{margin:1.2rem auto}.home .hero .description{font-size:1.2rem}.home .hero .action-button{font-size:1rem;padding:.6rem 1.2rem}.home .feature h2{font-size:1.25rem}}.page{padding-top:var(--navbar-height);padding-left:var(--sidebar-width)}.navbar{position:fixed;z-index:20;top:0;left:0;right:0;height:var(--navbar-height);box-sizing:border-box;border-bottom:1px solid var(--c-border);background-color:var(--c-bg-navbar);transition:background-color var(--t-color),border-color var(--t-color)}.sidebar{font-size:16px;width:var(--sidebar-width);position:fixed;z-index:10;margin:0;top:var(--navbar-height);left:0;bottom:0;box-sizing:border-box;border-right:1px solid var(--c-border);overflow-y:auto;scrollbar-width:thin;scrollbar-color:var(--c-brand) var(--c-border);background-color:var(--c-bg-sidebar);transition:transform var(--t-transform),background-color var(--t-color),border-color var(--t-color)}.sidebar::-webkit-scrollbar{width:7px}.sidebar::-webkit-scrollbar-track{background-color:var(--c-border)}.sidebar::-webkit-scrollbar-thumb{background-color:var(--c-brand)}.sidebar-mask{position:fixed;z-index:9;top:0;left:0;width:100vw;height:100vh;display:none}.theme-container.sidebar-open .sidebar-mask{display:block}.theme-container.sidebar-open .navbar>.toggle-sidebar-button .icon span:nth-child(1){transform:rotate(45deg) translate3d(5.5px,5.5px,0)}.theme-container.sidebar-open .navbar>.toggle-sidebar-button .icon span:nth-child(2){transform:scale3d(0,1,1)}.theme-container.sidebar-open .navbar>.toggle-sidebar-button .icon span:nth-child(3){transform:rotate(-45deg) translate3d(6px,-6px,0)}.theme-container.sidebar-open .navbar>.toggle-sidebar-button .icon span:nth-child(1),.theme-container.sidebar-open .navbar>.toggle-sidebar-button .icon span:nth-child(3){transform-origin:center}.theme-container.no-navbar .theme-default-content h1,.theme-container.no-navbar .theme-default-content h2,.theme-container.no-navbar .theme-default-content h3,.theme-container.no-navbar .theme-default-content h4,.theme-container.no-navbar .theme-default-content h5,.theme-container.no-navbar .theme-default-content h6{margin-top:1.5rem;padding-top:0}.theme-container.no-navbar .page{padding-top:0}.theme-container.no-navbar .sidebar{top:0}.theme-container.no-sidebar .sidebar{display:none}@media (max-width: 719px){.theme-container.no-sidebar .sidebar{display:block}}.theme-container.no-sidebar .page{padding-left:0}.theme-default-content a:hover{text-decoration:underline}.theme-default-content img{max-width:100%}.theme-default-content h1,.theme-default-content h2,.theme-default-content h3,.theme-default-content h4,.theme-default-content h5,.theme-default-content h6{margin-top:calc(.5rem - var(--navbar-height));padding-top:calc(1rem + var(--navbar-height));margin-bottom:0}.theme-default-content h1:first-child,.theme-default-content h2:first-child,.theme-default-content h3:first-child,.theme-default-content h4:first-child,.theme-default-content h5:first-child,.theme-default-content h6:first-child{margin-bottom:1rem}.theme-default-content h1:first-child+p,.theme-default-content h1:first-child+pre,.theme-default-content h1:first-child+.custom-container,.theme-default-content h2:first-child+p,.theme-default-content h2:first-child+pre,.theme-default-content h2:first-child+.custom-container,.theme-default-content h3:first-child+p,.theme-default-content h3:first-child+pre,.theme-default-content h3:first-child+.custom-container,.theme-default-content h4:first-child+p,.theme-default-content h4:first-child+pre,.theme-default-content h4:first-child+.custom-container,.theme-default-content h5:first-child+p,.theme-default-content h5:first-child+pre,.theme-default-content h5:first-child+.custom-container,.theme-default-content h6:first-child+p,.theme-default-content h6:first-child+pre,.theme-default-content h6:first-child+.custom-container{margin-top:2rem}@media (max-width: 959px){.sidebar{font-size:15px;width:var(--sidebar-width-mobile)}.page{padding-left:var(--sidebar-width-mobile)}}@media (max-width: 719px){.sidebar{top:0;padding-top:var(--navbar-height);transform:translate(-100%)}.page{padding-left:0}.theme-container.sidebar-open .sidebar{transform:translate(0)}.theme-container.no-navbar .sidebar{padding-top:0}}@media (max-width: 419px){h1{font-size:1.9rem}}.navbar{--navbar-line-height: calc( var(--navbar-height) - 2 * var(--navbar-padding-v) );padding:var(--navbar-padding-v) var(--navbar-padding-h);line-height:var(--navbar-line-height)}.navbar .logo{height:var(--navbar-line-height);margin-right:var(--navbar-padding-v);vertical-align:top}.navbar .site-name{font-size:1.3rem;font-weight:600;color:var(--c-text);position:relative}.navbar .navbar-items-wrapper{display:flex;position:absolute;box-sizing:border-box;top:var(--navbar-padding-v);right:var(--navbar-padding-h);height:var(--navbar-line-height);padding-left:var(--navbar-padding-h);white-space:nowrap;font-size:.9rem}.navbar .navbar-items-wrapper .search-box{flex:0 0 auto;vertical-align:top}@media screen and (max-width: 719px){.navbar{padding-left:4rem}.navbar .can-hide{display:none}.navbar .site-name{width:calc(100vw - 9.4rem);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}}.navbar-items{display:inline-block}@media print{.navbar-items{display:none}}.navbar-items a{display:inline-block;line-height:1.4rem;color:inherit}.navbar-items a:hover,.navbar-items a.router-link-active{color:var(--c-text)}.navbar-items .navbar-item{position:relative;display:inline-block;margin-left:1.5rem;line-height:var(--navbar-line-height)}.navbar-items .navbar-item:first-child{margin-left:0}.navbar-items .navbar-item>a:hover,.navbar-items .navbar-item>a.router-link-active{margin-bottom:-2px;border-bottom:2px solid var(--c-text-accent)}@media (max-width: 719px){.navbar-items .navbar-item{margin-left:0}.navbar-items .navbar-item>a:hover,.navbar-items .navbar-item>a.router-link-active{margin-bottom:0;border-bottom:none}.navbar-items a:hover,.navbar-items a.router-link-active{color:var(--c-text-accent)}}.toggle-sidebar-button{position:absolute;top:.6rem;left:1rem;display:none;padding:.6rem;cursor:pointer}.toggle-sidebar-button .icon{display:flex;flex-direction:column;justify-content:center;align-items:center;width:1.25rem;height:1.25rem;cursor:inherit}.toggle-sidebar-button .icon span{display:inline-block;width:100%;height:2px;border-radius:2px;background-color:var(--c-text);transition:transform var(--t-transform)}.toggle-sidebar-button .icon span:nth-child(2){margin:6px 0}@media screen and (max-width: 719px){.toggle-sidebar-button{display:block}}.toggle-color-mode-button{display:flex;margin:auto;margin-left:1rem;border:0;background:none;color:var(--c-text);opacity:.8;cursor:pointer}@media print{.toggle-color-mode-button{display:none}}.toggle-color-mode-button:hover{opacity:1}.toggle-color-mode-button .icon{width:1.25rem;height:1.25rem}.DocSearch{transition:background-color var(--t-color)}.navbar-dropdown-wrapper{cursor:pointer}.navbar-dropdown-wrapper .navbar-dropdown-title,.navbar-dropdown-wrapper .navbar-dropdown-title-mobile{display:block;font-size:.9rem;font-family:inherit;cursor:inherit;padding:inherit;line-height:1.4rem;background:transparent;border:none;font-weight:500;color:var(--c-text)}.navbar-dropdown-wrapper .navbar-dropdown-title:hover,.navbar-dropdown-wrapper .navbar-dropdown-title-mobile:hover{border-color:transparent}.navbar-dropdown-wrapper .navbar-dropdown-title .arrow,.navbar-dropdown-wrapper .navbar-dropdown-title-mobile .arrow{vertical-align:middle;margin-top:-1px;margin-left:.4rem}.navbar-dropdown-wrapper .navbar-dropdown-title-mobile{display:none;font-weight:600;font-size:inherit}.navbar-dropdown-wrapper .navbar-dropdown-title-mobile:hover{color:var(--c-text-accent)}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item{color:inherit;line-height:1.7rem}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subtitle{margin:.45rem 0 0;border-top:1px solid var(--c-border);padding:1rem 0 .45rem;font-size:.9rem}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subtitle>span{padding:0 1.5rem 0 1.25rem}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subtitle>a{font-weight:inherit}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subtitle>a.router-link-active:after{display:none}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subitem-wrapper{padding:0;list-style:none}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subitem-wrapper .navbar-dropdown-subitem{font-size:.9em}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item a{display:block;line-height:1.7rem;position:relative;border-bottom:none;font-weight:400;margin-bottom:0;padding:0 1.5rem 0 1.25rem}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item a:hover,.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item a.router-link-active{color:var(--c-text-accent)}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item a.router-link-active:after{content:"";width:0;height:0;border-left:5px solid var(--c-text-accent);border-top:3px solid transparent;border-bottom:3px solid transparent;position:absolute;top:calc(50% - 2px);left:9px}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item:first-child .navbar-dropdown-subtitle{margin-top:0;padding-top:0;border-top:0}.navbar-dropdown-wrapper.mobile.open .navbar-dropdown-title,.navbar-dropdown-wrapper.mobile.open .navbar-dropdown-title-mobile{margin-bottom:.5rem}.navbar-dropdown-wrapper.mobile .navbar-dropdown-title,.navbar-dropdown-wrapper.mobile .navbar-dropdown-title-mobile{display:none}.navbar-dropdown-wrapper.mobile .navbar-dropdown-title-mobile{display:block}.navbar-dropdown-wrapper.mobile .navbar-dropdown{transition:height .1s ease-out;overflow:hidden}.navbar-dropdown-wrapper.mobile .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subtitle{border-top:0;margin-top:0;padding-top:0;padding-bottom:0}.navbar-dropdown-wrapper.mobile .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subtitle,.navbar-dropdown-wrapper.mobile .navbar-dropdown .navbar-dropdown-item>a{font-size:15px;line-height:2rem}.navbar-dropdown-wrapper.mobile .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subitem{font-size:14px;padding-left:1rem}.navbar-dropdown-wrapper:not(.mobile){height:1.8rem}.navbar-dropdown-wrapper:not(.mobile):hover .navbar-dropdown,.navbar-dropdown-wrapper:not(.mobile).open .navbar-dropdown{display:block!important}.navbar-dropdown-wrapper:not(.mobile).open:blur{display:none}.navbar-dropdown-wrapper:not(.mobile) .navbar-dropdown{display:none;height:auto!important;box-sizing:border-box;max-height:calc(100vh - 2.7rem);overflow-y:auto;position:absolute;top:100%;right:0;background-color:var(--c-bg-navbar);padding:.6rem 0;border:1px solid var(--c-border);border-bottom-color:var(--c-border-dark);text-align:left;border-radius:.25rem;white-space:nowrap;margin:0}.page{padding-bottom:2rem;display:block}.page .theme-default-content{max-width:var(--content-width);margin:0 auto;padding:2rem 2.5rem;padding-top:0}@media (max-width: 959px){.page .theme-default-content{padding:2rem}}@media (max-width: 419px){.page .theme-default-content{padding:1.5rem}}.page-meta{max-width:var(--content-width);margin:0 auto;padding:1rem 2.5rem;overflow:auto}@media (max-width: 959px){.page-meta{padding:2rem}}@media (max-width: 419px){.page-meta{padding:1.5rem}}.page-meta .meta-item{cursor:default;margin-top:.8rem}.page-meta .meta-item .meta-item-label{font-weight:500;color:var(--c-text-lighter)}.page-meta .meta-item .meta-item-info{font-weight:400;color:var(--c-text-quote)}.page-meta .edit-link{display:inline-block;margin-right:.25rem}@media print{.page-meta .edit-link{display:none}}.page-meta .last-updated{float:right}@media (max-width: 719px){.page-meta .last-updated{font-size:.8em;float:none}.page-meta .contributors{font-size:.8em}}.page-nav{max-width:var(--content-width);margin:0 auto;padding:1rem 2.5rem 2rem;padding-bottom:0}@media (max-width: 959px){.page-nav{padding:2rem}}@media (max-width: 419px){.page-nav{padding:1.5rem}}.page-nav .inner{min-height:2rem;margin-top:0;border-top:1px solid var(--c-border);transition:border-color var(--t-color);padding-top:1rem;overflow:auto}.page-nav .prev a:before{content:"\2190"}.page-nav .next{float:right}.page-nav .next a:after{content:"\2192"}.sidebar ul{padding:0;margin:0;list-style-type:none}.sidebar a{display:inline-block}.sidebar .navbar-items{display:none;border-bottom:1px solid var(--c-border);transition:border-color var(--t-color);padding:.5rem 0 .75rem}.sidebar .navbar-items a{font-weight:600}.sidebar .navbar-items .navbar-item{display:block;line-height:1.25rem;font-size:1.1em;padding:.5rem 0 .5rem 1.5rem}.sidebar .sidebar-items{padding:1.5rem 0}@media (max-width: 719px){.sidebar .navbar-items{display:block}.sidebar .navbar-items .navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item a.router-link-active:after{top:calc(1rem - 2px)}.sidebar .sidebar-items{padding:1rem 0}}.sidebar-item{cursor:default;border-left:.25rem solid transparent;color:var(--c-text)}.sidebar-item:focus-visible{outline-width:1px;outline-offset:-1px}.sidebar-item.active:not(p.sidebar-heading){font-weight:600;color:var(--c-text-accent);border-left-color:var(--c-text-accent)}.sidebar-item.sidebar-heading{transition:color .15s ease;font-size:1.1em;font-weight:700;padding:.35rem 1.5rem .35rem 1.25rem;width:100%;box-sizing:border-box;margin:0}.sidebar-item.sidebar-heading+.sidebar-item-children{transition:height .1s ease-out;overflow:hidden;margin-bottom:.75rem}.sidebar-item.collapsible{cursor:pointer}.sidebar-item.collapsible .arrow{position:relative;top:-.12em;left:.5em}.sidebar-item:not(.sidebar-heading){font-size:1em;font-weight:400;display:inline-block;margin:0;padding:.35rem 1rem .35rem 2rem;line-height:1.4;width:100%;box-sizing:border-box}.sidebar-item:not(.sidebar-heading)+.sidebar-item-children{padding-left:1rem;font-size:.95em}.sidebar-item-children .sidebar-item-children .sidebar-item:not(.sidebar-heading){padding:.25rem 1rem .25rem 1.75rem}.sidebar-item-children .sidebar-item-children .sidebar-item:not(.sidebar-heading).active{font-weight:500;border-left-color:transparent}a.sidebar-heading+.sidebar-item-children .sidebar-item:not(.sidebar-heading).active{border-left-color:transparent}a.sidebar-item{cursor:pointer}a.sidebar-item:hover{color:var(--c-text-accent)}.table-of-contents .badge{vertical-align:middle}.dropdown-enter-from,.dropdown-leave-to{height:0!important}.fade-slide-y-enter-active{transition:all .2s ease}.fade-slide-y-leave-active{transition:all .2s cubic-bezier(1,.5,.8,1)}.fade-slide-y-enter-from,.fade-slide-y-leave-to{transform:translateY(10px);opacity:0}:root{--back-to-top-z-index: 5;--back-to-top-color: #3eaf7c;--back-to-top-color-hover: #71cda3}.back-to-top{cursor:pointer;position:fixed;bottom:2rem;right:2.5rem;width:2rem;height:1.2rem;background-color:var(--back-to-top-color);-webkit-mask:url(/assets/back-to-top-8efcbe56.svg) no-repeat;mask:url(/assets/back-to-top-8efcbe56.svg) no-repeat;z-index:var(--back-to-top-z-index)}.back-to-top:hover{background-color:var(--back-to-top-color-hover)}@media (max-width: 959px){.back-to-top{display:none}}@media print{.back-to-top{display:none}}.back-to-top-enter-active,.back-to-top-leave-active{transition:opacity .3s}.back-to-top-enter-from,.back-to-top-leave-to{opacity:0}:root{--search-bg-color: #ffffff;--search-accent-color: #3eaf7c;--search-text-color: #2c3e50;--search-border-color: #eaecef;--search-item-text-color: #5d81a5;--search-item-focus-bg-color: #f3f4f5;--search-input-width: 8rem;--search-result-width: 20rem}.search-box{display:inline-block;position:relative;margin-left:1rem}@media print{.search-box{display:none}}.search-box input{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:text;width:var(--search-input-width);height:2rem;color:var(--search-text-color);display:inline-block;border:1px solid var(--search-border-color);border-radius:2rem;font-size:.9rem;line-height:2rem;padding:0 .5rem 0 2rem;outline:none;transition:all ease .3s;background:var(--search-bg-color) url(/assets/search-0782d0d1.svg) .6rem .5rem no-repeat;background-size:1rem}.search-box input:focus{cursor:auto;border-color:var(--search-accent-color)}.search-box .suggestions{background:var(--search-bg-color);width:var(--search-result-width);position:absolute;top:2rem;right:0;border:1px solid var(--search-border-color);border-radius:6px;padding:.4rem;list-style-type:none}.search-box .suggestion{line-height:1.4;padding:.4rem .6rem;border-radius:4px;cursor:pointer}.search-box .suggestion.focus{background-color:var(--search-item-focus-bg-color)}.search-box .suggestion.focus a{color:var(--search-accent-color)}.search-box .suggestion a{white-space:normal;color:var(--search-item-text-color)}.search-box .suggestion .page-title{font-weight:600}.search-box .suggestion .page-header{font-size:.9em;margin-left:.25em}@media (max-width: 719px){.search-box input{cursor:pointer;width:0;border-color:transparent;position:relative}.search-box input:focus{cursor:text;left:0;width:10rem}}@media (max-width: 419px){.search-box input:focus{width:8rem}.search-box .suggestions{width:calc(100vw - 4rem);right:-.5rem}}:root{--pwa-popup-z-index: 10;--pwa-popup-text-color: #2c3e50;--pwa-popup-bg-color: #ffffff;--pwa-popup-border-color: #3eaf7c;--pwa-popup-shadow: 0 4px 16px var(--pwa-popup-border-color);--pwa-popup-btn-text-color: #ffffff;--pwa-popup-btn-bg-color: #3eaf7c;--pwa-popup-btn-hover-bg-color: #4abf8a}.pwa-popup{position:fixed;right:1em;bottom:1em;padding:1em;border:1px solid var(--pwa-popup-border-color);border-radius:3px;background-color:var(--pwa-popup-bg-color);box-shadow:var(--pwa-popup-shadow);text-align:center;z-index:var(--pwa-popup-z-index)}@media print{.pwa-popup{display:none}}.pwa-popup>button{cursor:pointer;margin-top:.5em;padding:.25em 2em;border:none;color:var(--pwa-popup-btn-text-color);background-color:var(--pwa-popup-btn-bg-color)}.pwa-popup>button:hover{background-color:var(--pwa-popup-btn-hover-bg-color)}.pwa-popup-enter-active,.pwa-popup-leave-active{transition:opacity .3s,transform .3s}.pwa-popup-enter-from,.pwa-popup-leave-to{opacity:0;transform:translateY(50%) scale(.5)} diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..89cc6fa54f43fbbef2878742cb82b7b9afb9dfac GIT binary patch literal 4683 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 Cmk%NU literal 0 HcmV?d00001 diff --git a/img/PluginDocs/Example-1.png b/img/PluginDocs/Example-1.png new file mode 100644 index 0000000000000000000000000000000000000000..031aef420b0a71eb6a5c0820ce27bd28df8f59c9 GIT binary patch literal 42846 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 TrTwu(0dSAG$rS|M$Sd)GEX+lk literal 0 HcmV?d00001 diff --git a/img/PluginDocs/Start-1.png b/img/PluginDocs/Start-1.png new file mode 100644 index 0000000000000000000000000000000000000000..3026917b63db4a6a68acc0413b29fd9b9e49c84d GIT binary patch literal 50954 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

TvabMR^@qT_7FQHfW`-yrn0y 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 literal 0 HcmV?d00001 diff --git a/img/PluginDocs/Start-2.png b/img/PluginDocs/Start-2.png new file mode 100644 index 0000000000000000000000000000000000000000..d1b105a9df488aa512395f0928ce0d7f57f7800d GIT binary patch literal 61174 zcmd42bx@qo)-^g$cdw&5TXD805nMn5hVZs{`DuU1`_P+m!kum697O4 zkQ5PCaf3O{K-NiAg+NJNL|_#0(ClGkF>w2J9P#staz57&P-=fj(=nZKc+r&g{1Qbu z+oTeuRyr&?tcn0Q;XM0)PYXdM5;c|KHN(ha?1JpB)^T zY;)FAb{o-IA_@oCX%{f=8G=TjJtx27VZZ-#o|MQ_Fn@+ zBaiXCIWER!mQ_ClP=GscXX5Hg-QCejbi@s506f`bDE~230DNkg(BY8l0t1PIZUvnE zk)Y?$HSPr;hV_vT_a2^_R*T#m;(t|7W`N~);<=f^b76280W42v@RDV0f2|nd?Jg7JY@><+#`H07Yk_40le=E5c%)cRA7ILt1(P%+=!RMF-Y(!T5j!c z!5J847rpy`RAtXw+2rio81-3{%kH_(rulWcsfeWd8}k@eP{#rukoetzv~$09c>;<+T2%{gX{$ zygvSa>xU3bRW)MJ`G4&Jp>MBS!yJh}0pUNU8~{V~34qY`|L0COaptp(`1{Ud**iEm z{BUq65R~(epTEZ@tTkHs@j)S6qj4laR4?O@w_97-ooEv zRXsv~&;UF%KXv0FH*xc}3g0&NQwIwK0FX370J6X)B)LS6`gslxyb>i>j>nGqafE8J zsUdiVYv2a~K;%n;f;TpnecB$@X)@)l#l021}3-95h+^Ma=tM! zn-{N6Ps+t5Js;um*MWAiz<@l;>JAq(ST`GkT7Rm%t^q0*%LTLvjRwG2tIy?oWP9oP zMk#g|30|U&v+V#q6jEr5uhZdK*lZqCqo|~-s-$)2X)(--d z_MND22T7@A1_Q^Q;>APxx9WZa;Vwd?ln3D23NGMaWRuUnCSgc zWxuGn?Rwo@be3OGggm+GuGH|lpUuj~$=P==+Fkg+26BTml}ust)>2PXl(u)XF>I{q z)&9*1VNG91gVB9A#N$2a_B!-*@jITy+%2q{QG#zOl#+|S&+&Wni}U^6z8Yb^e$0}}X;lWQ1)PyDubUKvlyXHn zi-`-sN|4l{%K0T?hD<5>L~)}0QZkuzGqfX)u1t1zTTH~|lU$?8VjyI1cUr*6jbc?K zmGvU;2sO6*j>bQ?h6#)*7 z3yGKQy2!##mrGq+UC!#2i8u-f(ro8`a47BZ96*Q9vlxJc#iFQc(i!;`T2)_F5dL~7 z6j+{43S9Sywt53qv4#-q*GG3)EIWb)_0NDg-u;15jCJ1qz9ZB~^-jOkv}y~u_L_2v zYf$~yQBs?rImzSWDqo>9ioX9ntA)N}bfNg_m7qv}^x^&C)$non2`;1|hoyc1_-tp#05n&UUi)ayeAdQH6f)v$@}drV2kmL+Z~Xp4?&IS z=`D8#TU`a5gwLHo^qsY*J&yLb2KS->~*av{au0qDcsRu;Mfc31)K z^67KZ{c~eEj8d@Y6Nuo{v0q)>GHU+)Sgu4_G5Aozq?1M6QNSjwgwQ1oB>A{&;*XKs z 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 RZ4mIMeog0Up|Vx*{{T@YD>VQB literal 0 HcmV?d00001 diff --git a/index.html b/index.html new file mode 100644 index 0000000..692871c --- /dev/null +++ b/index.html @@ -0,0 +1,33 @@ + + + + + + + + + HiperLink + + + + +

🌈 HiperLink | 嗨皮立刻 🔗

🌈 HiperLink | 嗨皮立刻 🔗

基于 Hiper 的插件化、轻量化互联互通平台 🎉

立即下载 open in new window 快速上手

全平台

无论使用 Windows 或是 macOS,亦或是 Linux,皆可立地腾飞,让你能做的更多,做什么都更快,工作娱乐全放得开

插件化

别看轻,别轻看,万物皆可插件化,互联只需一键,体验由你决定

高性能

采用 Golang + Vue 技术栈,轻快如风,快接快传,好快意

+ + + diff --git a/logo.svg b/logo.svg new file mode 100644 index 0000000..f47cdf3 --- /dev/null +++ b/logo.svg @@ -0,0 +1,21 @@ + + + + Layer 1 + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/service-worker.js b/service-worker.js new file mode 100644 index 0000000..52b9e25 --- /dev/null +++ b/service-worker.js @@ -0,0 +1 @@ +if(!self.define){let e,s={};const a=(a,i)=>(a=new URL(a+".js",i).href,s[a]||new Promise((s=>{if("document"in self){const e=document.createElement("script");e.src=a,e.onload=s,document.head.appendChild(e)}else e=a,importScripts(a),s()})).then((()=>{let e=s[a];if(!e)throw new Error(`Module ${a} didn’t register its module`);return e})));self.define=(i,d)=>{const b=e||("document"in self?document.currentScript.src:"")||location.href;if(s[b])return;let c={};const r=e=>a(e,b),f={module:{uri:b},exports:c,require:r};s[b]=Promise.all(i.map((e=>f[e]||r(e)))).then((e=>(d(...e),c)))}}define(["./workbox-d249b2c8"],(function(e){"use strict";self.addEventListener("message",(e=>{e.data&&"SKIP_WAITING"===e.data.type&&self.skipWaiting()})),e.precacheAndRoute([{url:"404.html",revision:"63cbe7c2717d08ff97c43bd3ba5720d1"},{url:"About/index.html",revision:"a8ddd5c67dae8ecbdd04a95823c3961d"},{url:"assets/404.html-ceb4942b.js",revision:"07aa3512ad400e85a94737089af65327"},{url:"assets/404.html-f9875e7b.js",revision:"5d8337e2f1c2fecfd9b860c861078fb3"},{url:"assets/app-542dabbe.js",revision:"f8b287a360479bd870d9a703f6e424ec"},{url:"assets/back-to-top-8efcbe56.svg",revision:"cbe7b14b16686bbafd5f42b528a5360e"},{url:"assets/Back.html-42e4d89e.js",revision:"7d7231b625041ac6f752912fdb91991d"},{url:"assets/Back.html-df0fa5cb.js",revision:"c88239a0b094e1be668b50bc52d592fa"},{url:"assets/CSharp.html-388a67b2.js",revision:"b208fdf58a815240660e712e447ff518"},{url:"assets/CSharp.html-3c53f8ae.js",revision:"cead937a787c50a9559608d97c2f49fa"},{url:"assets/Example.html-4110fdf6.js",revision:"a0b47198cdf7bfe00c12b069dd895707"},{url:"assets/Example.html-d5941944.js",revision:"291d7cb504f8949fe1134ffeacfcb80c"},{url:"assets/Format.html-acc722f4.js",revision:"e7313c5b1c8defbe2baa04b3c6a42a65"},{url:"assets/Format.html-f770cc78.js",revision:"768866bed949f2e41e4a7be261c17c07"},{url:"assets/framework-cc651620.js",revision:"5f1c0fb882dbccbffe744fa97ebc52ca"},{url:"assets/Go.html-3fa1af93.js",revision:"6876eba79adeb6dc3b343b435e33fd75"},{url:"assets/Go.html-4c263677.js",revision:"5db88fabfb956403fa96a95a4a9dc4d1"},{url:"assets/index-70769223.js",revision:"097390f0c66585e8b9e39361bf5f05d1"},{url:"assets/index.html-103e28a1.js",revision:"7a4a9d4705b77e52ec37452e1e94dc6b"},{url:"assets/index.html-1f0059e4.js",revision:"f6bd4f66ecda7fbe5abf670ef7486cc4"},{url:"assets/index.html-4f366004.js",revision:"189ec71c641b836bd6e9f875d4ada22c"},{url:"assets/index.html-550593ad.js",revision:"5f280b7064ba6f4bec57277e070f565f"},{url:"assets/index.html-5ff51570.js",revision:"7e0e32942702d56be15abeca35f7bb0a"},{url:"assets/index.html-7b9a0856.js",revision:"b0d4b9f50cc1d276a469e0cbf8e17df3"},{url:"assets/index.html-86b4a8cc.js",revision:"84d6c61b5852c5936dd985efe083fe1e"},{url:"assets/index.html-8704499c.js",revision:"77b3371ac2e335b6b4ae20fea1f12977"},{url:"assets/index.html-9e9e82fb.js",revision:"1bffd747abe27b8ea31f11436b94a924"},{url:"assets/index.html-d2bbbcfd.js",revision:"784756f858f7469055ce910a5665bed4"},{url:"assets/index.html-db82fc2e.js",revision:"b98ac0fe71d767b9711bae7af01052ee"},{url:"assets/index.html-ef97b19a.js",revision:"56e754342684594a54c6198088536501"},{url:"assets/Interaction.html-54fa1a8f.js",revision:"3d1a14fe15f410b7e0697ac6dd9b8443"},{url:"assets/Interaction.html-b7586d71.js",revision:"b44b6acf779a692df00bf3b5ac593ba9"},{url:"assets/Metadata.html-0350df2c.js",revision:"45cefd6b7e13b5af9761eb3935a02b49"},{url:"assets/Metadata.html-aa88d8d2.js",revision:"b84ec75934027e121a976324dc7e565b"},{url:"assets/Python.html-0b3dfca9.js",revision:"f4918aeb91a684ad0b248193c5f98251"},{url:"assets/Python.html-e29369ba.js",revision:"7be62bb66a3600c78639b8f80c7bd89a"},{url:"assets/Rust.html-b1948268.js",revision:"3e380dabf66733312be49b3c9397ec08"},{url:"assets/Rust.html-fd38a2dd.js",revision:"8519676969fb683737bbd8a1c50e4511"},{url:"assets/search-0782d0d1.svg",revision:"83621669651b9a3d4bf64d1a670ad856"},{url:"assets/Start-2-98e843d2.js",revision:"db30ff51330f793806d47a8fcf7fc1b4"},{url:"assets/Start.html-50d99452.js",revision:"9b95af365779a01a9198bf092225c00d"},{url:"assets/Start.html-9d4161ee.js",revision:"26331876e00558d720bcc26a03ec6b8f"},{url:"assets/style-0596657c.css",revision:"e4685958ab13c6455f770f8649c76cdb"},{url:"assets/Tips.html-6b25d762.js",revision:"bdcd1fbac887eeb63eae69ce93586fe3"},{url:"assets/Tips.html-fd8819f7.js",revision:"766e617f11d9428cdf7732f455df870d"},{url:"Docs/index.html",revision:"d1851ab16554fa60e7491b76ec8aa4d1"},{url:"Docs/Start.html",revision:"bd012763ded5ac0bbfc481eb9de8a371"},{url:"img/PluginDocs/Example-1.png",revision:"0f45f150dd939f0d9549209563099bc7"},{url:"img/PluginDocs/Start-1.png",revision:"058d65b8d21e158d63c46654f11f076b"},{url:"img/PluginDocs/Start-2.png",revision:"7360f73089d63b37d4482a57b427ae17"},{url:"index.html",revision:"e88a27349399efd4076cfccedad744d2"},{url:"logo.svg",revision:"299a7062c3bda15dfa0ac68b98bfe9a0"},{url:"PluginDocs/Basic/Example.html",revision:"0a41a0a974ce1b73d236c3fd8811bae6"},{url:"PluginDocs/Basic/Format.html",revision:"edbe446a5be0386d506dd7bf1f878983"},{url:"PluginDocs/Basic/Metadata.html",revision:"4ace0314b122ae544e20a3eab3048a0f"},{url:"PluginDocs/Basic/Tips.html",revision:"4bdb34bc1848ee3f5f5e16adf416d27c"},{url:"PluginDocs/HelloWorld/CSharp.html",revision:"45778c593293e3669360deb072e56f61"},{url:"PluginDocs/HelloWorld/Go.html",revision:"69b07437d61dae1441eaa9662e94e634"},{url:"PluginDocs/HelloWorld/Python.html",revision:"7cc2a558b94a301fb2b686aa47ea33ad"},{url:"PluginDocs/HelloWorld/Rust.html",revision:"e4e430b26427394ae75495066b15d7ca"},{url:"PluginDocs/index.html",revision:"3ca1d5bfefcffc6155f2de522c48b37a"},{url:"PluginDocs/Web/Back.html",revision:"e35aca04b951a8afd3903403d997c980"},{url:"PluginDocs/Web/index.html",revision:"7d1922e7d7529ccb2d517ba8bc261bdd"},{url:"PluginDocs/Web/Interaction.html",revision:"67941faccb28307de0fb3f29129effd4"},{url:"PluginMarket/index.html",revision:"1fa0a76365f21911d570239e8732e9e6"}],{})})); diff --git a/workbox-d249b2c8.js b/workbox-d249b2c8.js new file mode 100644 index 0000000..ef6ffaa --- /dev/null +++ b/workbox-d249b2c8.js @@ -0,0 +1 @@ +define(["exports"],(function(t){"use strict";try{self["workbox:core:6.5.3"]&&_()}catch(t){}const e=(t,...e)=>{let s=t;return e.length>0&&(s+=` :: ${JSON.stringify(e)}`),s};class s extends Error{constructor(t,s){super(e(t,s)),this.name=t,this.details=s}}try{self["workbox:routing:6.5.3"]&&_()}catch(t){}const n=t=>t&&"object"==typeof t?t:{handle:t};class i{constructor(t,e,s="GET"){this.handler=n(e),this.match=t,this.method=s}setCatchHandler(t){this.catchHandler=n(t)}}class r extends i{constructor(t,e,s){super((({url:e})=>{const s=t.exec(e.href);if(s&&(e.origin===location.origin||0===s.index))return s.slice(1)}),e,s)}}class o{constructor(){this.t=new Map,this.i=new Map}get routes(){return this.t}addFetchListener(){self.addEventListener("fetch",(t=>{const{request:e}=t,s=this.handleRequest({request:e,event:t});s&&t.respondWith(s)}))}addCacheListener(){self.addEventListener("message",(t=>{if(t.data&&"CACHE_URLS"===t.data.type){const{payload:e}=t.data,s=Promise.all(e.urlsToCache.map((e=>{"string"==typeof e&&(e=[e]);const s=new Request(...e);return this.handleRequest({request:s,event:t})})));t.waitUntil(s),t.ports&&t.ports[0]&&s.then((()=>t.ports[0].postMessage(!0)))}}))}handleRequest({request:t,event:e}){const s=new URL(t.url,location.href);if(!s.protocol.startsWith("http"))return;const n=s.origin===location.origin,{params:i,route:r}=this.findMatchingRoute({event:e,request:t,sameOrigin:n,url:s});let o=r&&r.handler;const c=t.method;if(!o&&this.i.has(c)&&(o=this.i.get(c)),!o)return;let a;try{a=o.handle({url:s,request:t,event:e,params:i})}catch(t){a=Promise.reject(t)}const h=r&&r.catchHandler;return a instanceof Promise&&(this.o||h)&&(a=a.catch((async n=>{if(h)try{return await h.handle({url:s,request:t,event:e,params:i})}catch(t){t instanceof Error&&(n=t)}if(this.o)return this.o.handle({url:s,request:t,event:e});throw n}))),a}findMatchingRoute({url:t,sameOrigin:e,request:s,event:n}){const i=this.t.get(s.method)||[];for(const r of i){let i;const o=r.match({url:t,sameOrigin:e,request:s,event:n});if(o)return i=o,(Array.isArray(i)&&0===i.length||o.constructor===Object&&0===Object.keys(o).length||"boolean"==typeof o)&&(i=void 0),{route:r,params:i}}return{}}setDefaultHandler(t,e="GET"){this.i.set(e,n(t))}setCatchHandler(t){this.o=n(t)}registerRoute(t){this.t.has(t.method)||this.t.set(t.method,[]),this.t.get(t.method).push(t)}unregisterRoute(t){if(!this.t.has(t.method))throw new s("unregister-route-but-not-found-with-method",{method:t.method});const e=this.t.get(t.method).indexOf(t);if(!(e>-1))throw new s("unregister-route-route-not-registered");this.t.get(t.method).splice(e,1)}}let c;const a={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:"undefined"!=typeof registration?registration.scope:""},h=t=>[a.prefix,t,a.suffix].filter((t=>t&&t.length>0)).join("-"),u=t=>t||h(a.precache),l=t=>t||h(a.runtime);function f(t,e){const s=e();return t.waitUntil(s),s}try{self["workbox:precaching:6.5.3"]&&_()}catch(t){}function w(t){if(!t)throw new s("add-to-cache-list-unexpected-type",{entry:t});if("string"==typeof t){const e=new URL(t,location.href);return{cacheKey:e.href,url:e.href}}const{revision:e,url:n}=t;if(!n)throw new s("add-to-cache-list-unexpected-type",{entry:t});if(!e){const t=new URL(n,location.href);return{cacheKey:t.href,url:t.href}}const i=new URL(n,location.href),r=new URL(n,location.href);return i.searchParams.set("__WB_REVISION__",e),{cacheKey:i.href,url:r.href}}class d{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:t,state:e})=>{e&&(e.originalRequest=t)},this.cachedResponseWillBeUsed=async({event:t,state:e,cachedResponse:s})=>{if("install"===t.type&&e&&e.originalRequest&&e.originalRequest instanceof Request){const t=e.originalRequest.url;s?this.notUpdatedURLs.push(t):this.updatedURLs.push(t)}return s}}}class p{constructor({precacheController:t}){this.cacheKeyWillBeUsed=async({request:t,params:e})=>{const s=(null==e?void 0:e.cacheKey)||this.h.getCacheKeyForURL(t.url);return s?new Request(s,{headers:t.headers}):t},this.h=t}}let y;async function g(t,e){let n=null;if(t.url){n=new URL(t.url).origin}if(n!==self.location.origin)throw new s("cross-origin-copy-response",{origin:n});const i=t.clone(),r={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},o=e?e(r):r,c=function(){if(void 0===y){const t=new Response("");if("body"in t)try{new Response(t.body),y=!0}catch(t){y=!1}y=!1}return y}()?i.body:await i.blob();return new Response(c,o)}function R(t,e){const s=new URL(t);for(const t of e)s.searchParams.delete(t);return s.href}class m{constructor(){this.promise=new Promise(((t,e)=>{this.resolve=t,this.reject=e}))}}const v=new Set;try{self["workbox:strategies:6.5.3"]&&_()}catch(t){}function q(t){return"string"==typeof t?new Request(t):t}class U{constructor(t,e){this.u={},Object.assign(this,e),this.event=e.event,this.l=t,this.p=new m,this.g=[],this.R=[...t.plugins],this.m=new Map;for(const t of this.R)this.m.set(t,{});this.event.waitUntil(this.p.promise)}async fetch(t){const{event:e}=this;let n=q(t);if("navigate"===n.mode&&e instanceof FetchEvent&&e.preloadResponse){const t=await e.preloadResponse;if(t)return t}const i=this.hasCallback("fetchDidFail")?n.clone():null;try{for(const t of this.iterateCallbacks("requestWillFetch"))n=await t({request:n.clone(),event:e})}catch(t){if(t instanceof Error)throw new s("plugin-error-request-will-fetch",{thrownErrorMessage:t.message})}const r=n.clone();try{let t;t=await fetch(n,"navigate"===n.mode?void 0:this.l.fetchOptions);for(const s of this.iterateCallbacks("fetchDidSucceed"))t=await s({event:e,request:r,response:t});return t}catch(t){throw i&&await this.runCallbacks("fetchDidFail",{error:t,event:e,originalRequest:i.clone(),request:r.clone()}),t}}async fetchAndCachePut(t){const e=await this.fetch(t),s=e.clone();return this.waitUntil(this.cachePut(t,s)),e}async cacheMatch(t){const e=q(t);let s;const{cacheName:n,matchOptions:i}=this.l,r=await this.getCacheKey(e,"read"),o=Object.assign(Object.assign({},i),{cacheName:n});s=await caches.match(r,o);for(const t of this.iterateCallbacks("cachedResponseWillBeUsed"))s=await t({cacheName:n,matchOptions:i,cachedResponse:s,request:r,event:this.event})||void 0;return s}async cachePut(t,e){const n=q(t);var i;await(i=0,new Promise((t=>setTimeout(t,i))));const r=await this.getCacheKey(n,"write");if(!e)throw new s("cache-put-with-no-response",{url:(o=r.url,new URL(String(o),location.href).href.replace(new RegExp(`^${location.origin}`),""))});var o;const c=await this.v(e);if(!c)return!1;const{cacheName:a,matchOptions:h}=this.l,u=await self.caches.open(a),l=this.hasCallback("cacheDidUpdate"),f=l?await async function(t,e,s,n){const i=R(e.url,s);if(e.url===i)return t.match(e,n);const r=Object.assign(Object.assign({},n),{ignoreSearch:!0}),o=await t.keys(e,r);for(const e of o)if(i===R(e.url,s))return t.match(e,n)}(u,r.clone(),["__WB_REVISION__"],h):null;try{await u.put(r,l?c.clone():c)}catch(t){if(t instanceof Error)throw"QuotaExceededError"===t.name&&await async function(){for(const t of v)await t()}(),t}for(const t of this.iterateCallbacks("cacheDidUpdate"))await t({cacheName:a,oldResponse:f,newResponse:c.clone(),request:r,event:this.event});return!0}async getCacheKey(t,e){const s=`${t.url} | ${e}`;if(!this.u[s]){let n=t;for(const t of this.iterateCallbacks("cacheKeyWillBeUsed"))n=q(await t({mode:e,request:n,event:this.event,params:this.params}));this.u[s]=n}return this.u[s]}hasCallback(t){for(const e of this.l.plugins)if(t in e)return!0;return!1}async runCallbacks(t,e){for(const s of this.iterateCallbacks(t))await s(e)}*iterateCallbacks(t){for(const e of this.l.plugins)if("function"==typeof e[t]){const s=this.m.get(e),n=n=>{const i=Object.assign(Object.assign({},n),{state:s});return e[t](i)};yield n}}waitUntil(t){return this.g.push(t),t}async doneWaiting(){let t;for(;t=this.g.shift();)await t}destroy(){this.p.resolve(null)}async v(t){let e=t,s=!1;for(const t of this.iterateCallbacks("cacheWillUpdate"))if(e=await t({request:this.request,response:e,event:this.event})||void 0,s=!0,!e)break;return s||e&&200!==e.status&&(e=void 0),e}}class L{constructor(t={}){this.cacheName=l(t.cacheName),this.plugins=t.plugins||[],this.fetchOptions=t.fetchOptions,this.matchOptions=t.matchOptions}handle(t){const[e]=this.handleAll(t);return e}handleAll(t){t instanceof FetchEvent&&(t={event:t,request:t.request});const e=t.event,s="string"==typeof t.request?new Request(t.request):t.request,n="params"in t?t.params:void 0,i=new U(this,{event:e,request:s,params:n}),r=this.q(i,s,e);return[r,this.U(r,i,s,e)]}async q(t,e,n){let i;await t.runCallbacks("handlerWillStart",{event:n,request:e});try{if(i=await this.L(e,t),!i||"error"===i.type)throw new s("no-response",{url:e.url})}catch(s){if(s instanceof Error)for(const r of t.iterateCallbacks("handlerDidError"))if(i=await r({error:s,event:n,request:e}),i)break;if(!i)throw s}for(const s of t.iterateCallbacks("handlerWillRespond"))i=await s({event:n,request:e,response:i});return i}async U(t,e,s,n){let i,r;try{i=await t}catch(r){}try{await e.runCallbacks("handlerDidRespond",{event:n,request:s,response:i}),await e.doneWaiting()}catch(t){t instanceof Error&&(r=t)}if(await e.runCallbacks("handlerDidComplete",{event:n,request:s,response:i,error:r}),e.destroy(),r)throw r}}class b extends L{constructor(t={}){t.cacheName=u(t.cacheName),super(t),this._=!1!==t.fallbackToNetwork,this.plugins.push(b.copyRedirectedCacheableResponsesPlugin)}async L(t,e){const s=await e.cacheMatch(t);return s||(e.event&&"install"===e.event.type?await this.C(t,e):await this.O(t,e))}async O(t,e){let n;const i=e.params||{};if(!this._)throw new s("missing-precache-entry",{cacheName:this.cacheName,url:t.url});{const s=i.integrity,r=t.integrity,o=!r||r===s;n=await e.fetch(new Request(t,{integrity:"no-cors"!==t.mode?r||s:void 0})),s&&o&&"no-cors"!==t.mode&&(this.N(),await e.cachePut(t,n.clone()))}return n}async C(t,e){this.N();const n=await e.fetch(t);if(!await e.cachePut(t,n.clone()))throw new s("bad-precaching-response",{url:t.url,status:n.status});return n}N(){let t=null,e=0;for(const[s,n]of this.plugins.entries())n!==b.copyRedirectedCacheableResponsesPlugin&&(n===b.defaultPrecacheCacheabilityPlugin&&(t=s),n.cacheWillUpdate&&e++);0===e?this.plugins.push(b.defaultPrecacheCacheabilityPlugin):e>1&&null!==t&&this.plugins.splice(t,1)}}b.defaultPrecacheCacheabilityPlugin={cacheWillUpdate:async({response:t})=>!t||t.status>=400?null:t},b.copyRedirectedCacheableResponsesPlugin={cacheWillUpdate:async({response:t})=>t.redirected?await g(t):t};class C{constructor({cacheName:t,plugins:e=[],fallbackToNetwork:s=!0}={}){this.k=new Map,this.K=new Map,this.T=new Map,this.l=new b({cacheName:u(t),plugins:[...e,new p({precacheController:this})],fallbackToNetwork:s}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this.l}precache(t){this.addToCacheList(t),this.W||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this.W=!0)}addToCacheList(t){const e=[];for(const n of t){"string"==typeof n?e.push(n):n&&void 0===n.revision&&e.push(n.url);const{cacheKey:t,url:i}=w(n),r="string"!=typeof n&&n.revision?"reload":"default";if(this.k.has(i)&&this.k.get(i)!==t)throw new s("add-to-cache-list-conflicting-entries",{firstEntry:this.k.get(i),secondEntry:t});if("string"!=typeof n&&n.integrity){if(this.T.has(t)&&this.T.get(t)!==n.integrity)throw new s("add-to-cache-list-conflicting-integrities",{url:i});this.T.set(t,n.integrity)}if(this.k.set(i,t),this.K.set(i,r),e.length>0){const t=`Workbox is precaching URLs without revision info: ${e.join(", ")}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(t)}}}install(t){return f(t,(async()=>{const e=new d;this.strategy.plugins.push(e);for(const[e,s]of this.k){const n=this.T.get(s),i=this.K.get(e),r=new Request(e,{integrity:n,cache:i,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:s},request:r,event:t}))}const{updatedURLs:s,notUpdatedURLs:n}=e;return{updatedURLs:s,notUpdatedURLs:n}}))}activate(t){return f(t,(async()=>{const t=await self.caches.open(this.strategy.cacheName),e=await t.keys(),s=new Set(this.k.values()),n=[];for(const i of e)s.has(i.url)||(await t.delete(i),n.push(i.url));return{deletedURLs:n}}))}getURLsToCacheKeys(){return this.k}getCachedURLs(){return[...this.k.keys()]}getCacheKeyForURL(t){const e=new URL(t,location.href);return this.k.get(e.href)}getIntegrityForCacheKey(t){return this.T.get(t)}async matchPrecache(t){const e=t instanceof Request?t.url:t,s=this.getCacheKeyForURL(e);if(s){return(await self.caches.open(this.strategy.cacheName)).match(s)}}createHandlerBoundToURL(t){const e=this.getCacheKeyForURL(t);if(!e)throw new s("non-precached-url",{url:t});return s=>(s.request=new Request(t),s.params=Object.assign({cacheKey:e},s.params),this.strategy.handle(s))}}let E;const O=()=>(E||(E=new C),E);class x extends i{constructor(t,e){super((({request:s})=>{const n=t.getURLsToCacheKeys();for(const i of function*(t,{ignoreURLParametersMatching:e=[/^utm_/,/^fbclid$/],directoryIndex:s="index.html",cleanURLs:n=!0,urlManipulation:i}={}){const r=new URL(t,location.href);r.hash="",yield r.href;const o=function(t,e=[]){for(const s of[...t.searchParams.keys()])e.some((t=>t.test(s)))&&t.searchParams.delete(s);return t}(r,e);if(yield o.href,s&&o.pathname.endsWith("/")){const t=new URL(o.href);t.pathname+=s,yield t.href}if(n){const t=new URL(o.href);t.pathname+=".html",yield t.href}if(i){const t=i({url:r});for(const e of t)yield e.href}}(s.url,e)){const e=n.get(i);if(e){return{cacheKey:e,integrity:t.getIntegrityForCacheKey(e)}}}}),t.strategy)}}function N(t){const e=O();!function(t,e,n){let a;if("string"==typeof t){const s=new URL(t,location.href);a=new i((({url:t})=>t.href===s.href),e,n)}else if(t instanceof RegExp)a=new r(t,e,n);else if("function"==typeof t)a=new i(t,e,n);else{if(!(t instanceof i))throw new s("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});a=t}(c||(c=new o,c.addFetchListener(),c.addCacheListener()),c).registerRoute(a)}(new x(e,t))}t.precacheAndRoute=function(t,e){!function(t){O().precache(t)}(t),N(e)}}));