简单
免费搭建,简单部署
diff --git a/404.html b/404.html new file mode 100644 index 000000000..685c023d6 --- /dev/null +++ b/404.html @@ -0,0 +1,22 @@ + + +
+ + +404
But if you don't change your direction, and if you keep looking, you may end up where you are heading.
前往go-cqhttp release下载对应系统版本。
解压
Windows下请使用自己熟悉的解压软件自行解压
Linux下在命令行中输入tar -xzvf [文件名] 使用
Windows 标准方法
双击,根据提示生成运行脚本go-cqhttp_*.exe
[WARNING]: 尝试加载配置文件 config.yml 失败: 文件不存在 [INFO]: 默认配置文件已生成,请编辑 config.yml 后重启程序.
配置文件请参考下方config.yml
config.yml配置好后 再次双击运行脚本
[INFO]: 登录成功 欢迎使用: balabala
如出现需要认证的信息, 请自行认证设备。
此时, 基础配置完成
Linux 标准方法
通过 SSH 连接到服务器
cd到解压目录
输入 , 运行 ./go-cqhttp
[WARNING]: 尝试加载配置文件 config.yml 失败: 文件不存在 [INFO]: 默认配置文件已生成,请编辑 config.yml 后重启程序.
配置config.yml
+# go-cqhttp 默认配置文件
+
+account: # 账号相关
+ uin: # QQ账号
+ password: '' # 密码为空时使用扫码登录
+ encrypt: false # 是否开启密码加密
+ status: 0 # 在线状态 请参考 https://docs.go-cqhttp.org/guide/config.html#在线状态
+ relogin: # 重连设置
+ delay: 3 # 首次重连延迟, 单位秒
+ interval: 3 # 重连间隔
+ max-times: 0 # 最大重连次数, 0为无限制
+
+ # 是否使用服务器下发的新地址进行重连
+ # 注意, 此设置可能导致在海外服务器上连接情况更差
+ use-sso-address: true
+
+heartbeat:
+ # 心跳频率, 单位秒
+ # -1 为关闭心跳
+ interval: 5
+
+message:
+ # 上报数据类型
+ # 可选: string,array
+ post-format: string
+ # 是否忽略无效的CQ码, 如果为假将原样发送
+ ignore-invalid-cqcode: false
+ # 是否强制分片发送消息
+ # 分片发送将会带来更快的速度
+ # 但是兼容性会有些问题
+ force-fragment: false
+ # 是否将url分片发送
+ fix-url: false
+ # 下载图片等请求网络代理
+ proxy-rewrite: ''
+ # 是否上报自身消息
+ report-self-message: false
+ # 移除服务端的Reply附带的At
+ remove-reply-at: false
+ # 为Reply附加更多信息
+ extra-reply-data: false
+
+output:
+ # 日志等级 trace,debug,info,warn,error
+ log-level: warn
+ # 是否启用 DEBUG
+ debug: false # 开启调试模式
+
+# 默认中间件锚点
+default-middlewares: &default
+ # 访问密钥, 强烈推荐在公网的服务器设置
+ access-token: ''
+ # 事件过滤器文件目录
+ filter: ''
+ # API限速设置
+ # 该设置为全局生效
+ # 原 cqhttp 虽然启用了 rate_limit 后缀, 但是基本没插件适配
+ # 目前该限速设置为令牌桶算法, 请参考:
+ # https://baike.baidu.com/item/%E4%BB%A4%E7%89%8C%E6%A1%B6%E7%AE%97%E6%B3%95/6597000?fr=aladdin
+ rate-limit:
+ enabled: true # 是否启用限速
+ frequency: 1 # 令牌回复频率, 单位秒
+ bucket: 1 # 令牌桶大小
+
+database: # 数据库相关设置
+ leveldb:
+ # 是否启用内置leveldb数据库
+ # 启用将会增加10-20MB的内存占用和一定的磁盘空间
+ # 关闭将无法使用 撤回 回复 get_msg 等上下文相关功能
+ enable: true
+
+# 连接服务列表
+servers:
+ # 添加方式,同一连接方式可添加多个,具体配置说明请查看文档
+ #- http: # http 通信
+ #- ws: # 正向 Websocket
+ #- ws-reverse: # 反向 Websocket
+ #- pprof: #性能分析服务器
+ # HTTP 通信设置
+ - http:
+ # 服务端监听地址
+ host: 127.0.0.1
+ # 服务端监听端口
+ port: 5700
+ # 反向HTTP超时时间, 单位秒
+ # 最小值为5,小于5将会忽略本项设置
+ timeout: 5
+ middlewares:
+ <<: *default # 引用默认中间件
+ # 反向HTTP POST地址列表
+ post:
+ #- url: '' # 地址
+ # secret: '' # 密钥
+ #- url: 127.0.0.1:5701 # 地址
+ # secret: '' # 密钥
+# go-cqhttp 默认配置文件
+
+account: # 账号相关
+ uin: # QQ账号
+ password: '' # 密码为空时使用扫码登录
+ encrypt: false # 是否开启密码加密
+ status: 0 # 在线状态 请参考 https://docs.go-cqhttp.org/guide/config.html#在线状态
+ relogin: # 重连设置
+ delay: 3 # 首次重连延迟, 单位秒
+ interval: 3 # 重连间隔
+ max-times: 0 # 最大重连次数, 0为无限制
+
+ # 是否使用服务器下发的新地址进行重连
+ # 注意, 此设置可能导致在海外服务器上连接情况更差
+ use-sso-address: true
+
+heartbeat:
+ # 心跳频率, 单位秒
+ # -1 为关闭心跳
+ interval: 5
+
+message:
+ # 上报数据类型
+ # 可选: string,array
+ post-format: string
+ # 是否忽略无效的CQ码, 如果为假将原样发送
+ ignore-invalid-cqcode: false
+ # 是否强制分片发送消息
+ # 分片发送将会带来更快的速度
+ # 但是兼容性会有些问题
+ force-fragment: false
+ # 是否将url分片发送
+ fix-url: false
+ # 下载图片等请求网络代理
+ proxy-rewrite: ''
+ # 是否上报自身消息
+ report-self-message: false
+ # 移除服务端的Reply附带的At
+ remove-reply-at: false
+ # 为Reply附加更多信息
+ extra-reply-data: false
+
+output:
+ # 日志等级 trace,debug,info,warn,error
+ log-level: warn
+ # 是否启用 DEBUG
+ debug: false # 开启调试模式
+
+# 默认中间件锚点
+default-middlewares: &default
+ # 访问密钥, 强烈推荐在公网的服务器设置
+ access-token: ''
+ # 事件过滤器文件目录
+ filter: ''
+ # API限速设置
+ # 该设置为全局生效
+ # 原 cqhttp 虽然启用了 rate_limit 后缀, 但是基本没插件适配
+ # 目前该限速设置为令牌桶算法, 请参考:
+ # https://baike.baidu.com/item/%E4%BB%A4%E7%89%8C%E6%A1%B6%E7%AE%97%E6%B3%95/6597000?fr=aladdin
+ rate-limit:
+ enabled: true # 是否启用限速
+ frequency: 1 # 令牌回复频率, 单位秒
+ bucket: 1 # 令牌桶大小
+
+database: # 数据库相关设置
+ leveldb:
+ # 是否启用内置leveldb数据库
+ # 启用将会增加10-20MB的内存占用和一定的磁盘空间
+ # 关闭将无法使用 撤回 回复 get_msg 等上下文相关功能
+ enable: true
+
+# 连接服务列表
+servers:
+ # 添加方式,同一连接方式可添加多个,具体配置说明请查看文档
+ #- http: # http 通信
+ #- ws: # 正向 Websocket
+ #- ws-reverse: # 反向 Websocket
+ #- pprof: #性能分析服务器
+ # HTTP 通信设置
+ - http:
+ # 服务端监听地址
+ host: 127.0.0.1
+ # 服务端监听端口
+ port: 5700
+ # 反向HTTP超时时间, 单位秒
+ # 最小值为5,小于5将会忽略本项设置
+ timeout: 5
+ middlewares:
+ <<: *default # 引用默认中间件
+ # 反向HTTP POST地址列表
+ post:
+ #- url: '' # 地址
+ # secret: '' # 密钥
+ #- url: 127.0.0.1:5701 # 地址
+ # secret: '' # 密钥
再次运行./go-cqhttp
[INFO]: 登录成功 欢迎使用: balabala
如出现需要认证的信息, 请自行认证设备。
此时, 基础配置完成
在twikoo中QQ私有化API配置项填写如下内容
QQ号 http://你的IP地址:端口号(或者域名)/send_private_msg?user_id=QQ号?token=你配置的token
QQ群 http://你的IP地址:端口号(或者域名)/send_group_msg?token=你配置的token?group_id=群号
配置完成
`,33),e=[o];function c(t,r,E,y,i,A){return n(),a("div",null,e)}const u=s(p,[["render",c]]);export{d as __pageData,u as default}; diff --git a/assets/QQ_API.md.e25600dc.lean.js b/assets/QQ_API.md.e25600dc.lean.js new file mode 100644 index 000000000..838631b16 --- /dev/null +++ b/assets/QQ_API.md.e25600dc.lean.js @@ -0,0 +1 @@ +import{_ as s,o as n,c as a,Q as l}from"./chunks/framework.7d2df8c6.js";const d=JSON.parse('{"title":"QQ私有化部署文档","description":"","frontmatter":{},"headers":[],"relativePath":"QQ_API.md","filePath":"QQ_API.md","lastUpdated":null}'),p={name:"QQ_API.md"},o=l("",33),e=[o];function c(t,r,E,y,i,A){return n(),a("div",null,e)}const u=s(p,[["render",c]]);export{d as __pageData,u as default}; diff --git a/assets/api.md.653ece4c.js b/assets/api.md.653ece4c.js new file mode 100644 index 000000000..b63cd686d --- /dev/null +++ b/assets/api.md.653ece4c.js @@ -0,0 +1,109 @@ +import{_ as s,o as n,c as a,Q as l}from"./chunks/framework.7d2df8c6.js";const m=JSON.parse('{"title":"API 文档","description":"","frontmatter":{},"headers":[],"relativePath":"api.md","filePath":"api.md","lastUpdated":null}'),p={name:"api.md"},o=l(`通过 Twikoo API,主题开发者可以实现一些特殊的功能,例如:在文章列表显示文章评论数,在首页显示最新评论,等。
调用 Twikoo API 前,不需要 执行 twikoo.init()
。
批量获取文章评论数。
>= 0.2.7
twikoo.getCommentsCount({
+ envId: '您的环境id', // 环境 ID
+ // region: 'ap-guangzhou', // 环境地域,默认为 ap-shanghai,如果您的环境地域不是上海,需传此参数
+ urls: [ // 不包含协议、域名、参数的文章路径列表,必传参数
+ '/2020/10/post-1.html',
+ '/2020/11/post-2.html',
+ '/2020/12/post-3.html'
+ ],
+ includeReply: false // 评论数是否包括回复,默认:false
+}).then(function (res) {
+ console.log(res);
+ // 返回示例: [
+ // { url: '/2020/10/post-1.html', count: 10 },
+ // { url: '/2020/11/post-2.html', count: 0 },
+ // { url: '/2020/12/post-3.html', count: 20 }
+ // ]
+}).catch(function (err) {
+ // 发生错误
+ console.error(err);
+});
twikoo.getCommentsCount({
+ envId: '您的环境id', // 环境 ID
+ // region: 'ap-guangzhou', // 环境地域,默认为 ap-shanghai,如果您的环境地域不是上海,需传此参数
+ urls: [ // 不包含协议、域名、参数的文章路径列表,必传参数
+ '/2020/10/post-1.html',
+ '/2020/11/post-2.html',
+ '/2020/12/post-3.html'
+ ],
+ includeReply: false // 评论数是否包括回复,默认:false
+}).then(function (res) {
+ console.log(res);
+ // 返回示例: [
+ // { url: '/2020/10/post-1.html', count: 10 },
+ // { url: '/2020/11/post-2.html', count: 0 },
+ // { url: '/2020/12/post-3.html', count: 20 }
+ // ]
+}).catch(function (err) {
+ // 发生错误
+ console.error(err);
+});
获取最新评论。
>= 0.2.7
twikoo.getRecentComments({
+ envId: '您的环境id', // 环境 ID
+ // region: 'ap-guangzhou', // 环境地域,默认为 ap-shanghai,如果您的环境地域不是上海,需传此参数
+ pageSize: 10, // 获取多少条,默认:10,最大:100
+ includeReply: false // 是否包括最新回复,默认:false
+}).then(function (res) {
+ console.log(res);
+ // 返回 Array,包含最新评论的
+ // * id: 评论 ID
+ // * url: 评论地址
+ // * nick: 昵称
+ // * mailMd5: 邮箱的 MD5 值,可用于展示头像
+ // * link: 网址
+ // * comment: HTML 格式的评论内容
+ // * commentText: 纯文本格式的评论内容
+ // * created: 评论时间,格式为毫秒级时间戳
+ // * avatar: 头像地址(0.2.9 新增)
+ // * relativeTime: 相对评论时间,如 “1 小时前”(0.2.9 新增)
+ // 返回示例: [ // 从新到旧顺序
+ // { id: '', url: '', nick: '', mailMd5: '', link: '', comment: '', commentText: '', created: 0 },
+ // { id: '', url: '', nick: '', mailMd5: '', link: '', comment: '', commentText: '', created: 0 },
+ // { id: '', url: '', nick: '', mailMd5: '', link: '', comment: '', commentText: '', created: 0 }
+ // ]
+}).catch(function (err) {
+ // 发生错误
+ console.error(err);
+});
twikoo.getRecentComments({
+ envId: '您的环境id', // 环境 ID
+ // region: 'ap-guangzhou', // 环境地域,默认为 ap-shanghai,如果您的环境地域不是上海,需传此参数
+ pageSize: 10, // 获取多少条,默认:10,最大:100
+ includeReply: false // 是否包括最新回复,默认:false
+}).then(function (res) {
+ console.log(res);
+ // 返回 Array,包含最新评论的
+ // * id: 评论 ID
+ // * url: 评论地址
+ // * nick: 昵称
+ // * mailMd5: 邮箱的 MD5 值,可用于展示头像
+ // * link: 网址
+ // * comment: HTML 格式的评论内容
+ // * commentText: 纯文本格式的评论内容
+ // * created: 评论时间,格式为毫秒级时间戳
+ // * avatar: 头像地址(0.2.9 新增)
+ // * relativeTime: 相对评论时间,如 “1 小时前”(0.2.9 新增)
+ // 返回示例: [ // 从新到旧顺序
+ // { id: '', url: '', nick: '', mailMd5: '', link: '', comment: '', commentText: '', created: 0 },
+ // { id: '', url: '', nick: '', mailMd5: '', link: '', comment: '', commentText: '', created: 0 },
+ // { id: '', url: '', nick: '', mailMd5: '', link: '', comment: '', commentText: '', created: 0 }
+ // ]
+}).catch(function (err) {
+ // 发生错误
+ console.error(err);
+});
Twikoo 成功挂载后的回调函数。
环境 ID 错误、网络异常、挂载失败等情况时不会触发。
>= 0.5.2
twikoo.init({
+ ......
+}).then(function () {
+ console.log('Twikoo 加载完成');
+});
twikoo.init({
+ ......
+}).then(function () {
+ console.log('Twikoo 加载完成');
+});
评论加载成功后的回调函数。
发表评论后自动刷新评论时、加载下一页评论时,也会触发。
评论加载失败时不会触发。
>= 0.5.2
twikoo.init({
+ ......,
+ onCommentLoaded: function () {
+ console.log('评论加载完成');
+ }
+});
twikoo.init({
+ ......,
+ onCommentLoaded: function () {
+ console.log('评论加载完成');
+ }
+});
部署方式 | 推荐度 | 描述 |
---|---|---|
腾讯云一键部署 | ★☆☆☆☆ | 虽然方便,但是仅支持按量计费环境——也就是说,一键部署的环境,当免费资源用尽后,将会产生费用。且按量计费环境无法切换为包年包月环境。免费额度数据库读操作数只有 500 次 / 天,无法支撑 Twikoo 的运行需求。 |
腾讯云手动部署 | ★★☆☆☆ | 手动部署到腾讯云云开发环境,在中国大陆访问速度较快。需要付费购买环境才能部署。 |
腾讯云命令行部署 | ★☆☆☆☆ | 仅针对有 Node.js 经验的开发者。 |
Vercel 部署 | ★★★☆☆ | 适用于想要免费部署的用户,在中国大陆访问速度较慢甚至无法访问,绑定自己的域名可以提高访问速度。 |
Railway 部署 | ★★☆☆☆ | 有免费额度但不足以支持一个月连续运行,部署简单,适合全球访问。 |
Zeabur 部署 | ★☆☆☆☆ | 需要绑定支付宝或信用卡,部署简单,适合中国大陆访问,免费计划环境随时可能会被删除。 |
Netlify 部署 | ★★★★☆ | 有充足的免费额度,中国大陆访问速度不错。 |
私有部署 | ★★☆☆☆ | 适用于有服务器的用户,需要自行申请 HTTPS 证书。 |
私有部署 (Docker) | ★★★☆☆ | 适用于有服务器的用户,需要自行申请 HTTPS 证书。 |
如果您打算部署到一个现有的云开发环境,请直接从第 3 步开始。
提示
twikoo.init()
时额外指定环境 region: "ap-guangzhou"
包年包月
,套餐版本基础版 1
,超出免费额度不会收费twikoo
,创建方式请选择:空白函数
,运行环境请选择:Nodejs 10.15
,函数内存请选择:128MB
,点击“下一步”exports.main = require('twikoo-func').main
exports.main = require('twikoo-func').main
package.json
,回车{ "dependencies": { "twikoo-func": "1.6.22" } }
{ "dependencies": { "twikoo-func": "1.6.22" } }
注意
[FUNCTIONS_EXECUTE_FAIL] Error: EACCES: permission denied, open '/var/user/index.js'
如果您打算部署到一个现有的云开发环境,请直接从第 3 步开始。
git clone https://github.com/twikoojs/twikoo.git # 或 git clone https://e.coding.net/imaegoo/twikoo/twikoo.git
+cd twikoo
git clone https://github.com/twikoojs/twikoo.git # 或 git clone https://e.coding.net/imaegoo/twikoo/twikoo.git
+cd twikoo
如果您没有安装 Git,也可以从 Release 页面下载最新的 Source code
如果您所在的地区访问 Github 速度慢,也可以尝试另一个仓库地址:https://imaegoo.coding.net/public/twikoo/twikoo/git
npm install -g yarn # 已安装 yarn 可以跳过此步
+yarn install
npm install -g yarn # 已安装 yarn 可以跳过此步
+yarn install
yarn run login
yarn run login
yarn deploy -e 您的环境id
yarn deploy -e 您的环境id
注意
Vercel 部署的环境需配合 1.4.0 以上版本的 twikoo.js 使用
默认域名 *.vercel.app
在中国大陆访问速度较慢甚至无法访问,绑定自己的域名可以提高访问速度
AWS / N. Virginia (us-east-1)
0.0.0.0/0
(允许所有 IP 地址的连接),点击 Confirm<username>:<password>
修改为刚刚创建的数据库 用户名:密码
MONGODB_URI
,值为前面记录的数据库连接字符串https://
前缀,例如 https://xxx.vercel.app
)即为您的环境 id注意
Railway 部署的环境需配合 1.4.0 以上版本的 twikoo.js 使用
请一定要创建 MongoDB,不创建 MongoDB 也能正常使用,但重新部署后数据会丢失!
PORT
右边输入 8080
然后点 AddMONGOHOST
、MONGOPASSWORD
、MONGOPORT
、MONGOUSER
和 MONGO_URL
环境变量。mytwikoo.up.railway.app
)https://
加域名(例如 https://mytwikoo.up.railway.app
)注意
Zeabur 部署的环境需配合 1.4.0 以上版本的 twikoo.js 使用
请一定要创建 MongoDB,不创建 MongoDB 也能正常使用,但重新部署后数据会丢失!
无需配置数据库连接字符串! Zeabur 已自动配置
mytwikoo.zeabur.app
)https://
加域名(例如 https://mytwikoo.zeabur.app
)注意
Netlify 部署的环境需配合 1.4.0 以上版本的 twikoo.js 使用
Netlify 免费等级(Functions Level 0)支持每月 125,000 请求次数和 100 小时函数计算时长
AWS / N. Virginia (us-east-1)
0.0.0.0/0
(允许所有 IP 地址的连接),点击 Confirm<username>:<password>
修改为刚刚创建的数据库 用户名:密码
MONGODB_URI
,Value 输入前面记录的数据库连接字符串,点击 Deploy twikoo-netlifyhttps://xxx.netlify.app
)https://
前缀和 /.netlify/functions/twikoo
后缀,例如 https://xxx.netlify.app/.netlify/functions/twikoo
)即为您的环境 id注意
私有部署的环境需配合 1.6.0 或以上版本的 twikoo.js 使用
私有部署对服务器系统没有要求,Windows、Ubuntu、CentOS、macOS 等常用系统均支持。
私有部署涉及终端操作、申请证书、配置反向代理或负载均衡等高级操作,如果对这些不太了解,建议优先选择其他方式部署。
npm i -g tkserver
名称 | 描述 | 默认值 |
---|---|---|
MONGODB_URI | MongoDB 数据库连接字符串,不传则使用 lokijs | null |
MONGO_URL | MongoDB 数据库连接字符串,不传则使用 lokijs | null |
TWIKOO_DATA | lokijs 数据库存储路径 | ./data |
TWIKOO_PORT | 端口号 | 8080 |
TWIKOO_THROTTLE | IP 请求限流,当同一 IP 短时间内请求次数超过阈值将对该 IP 返回错误 | 250 |
TWIKOO_LOCALHOST_ONLY | 为true 时只监听本地请求,使得 nginx 等服务器反代之后不暴露原始端口 | null |
TWIKOO_LOG_LEVEL | 日志级别,支持 verbose / info / warn / error | info |
TWIKOO_IP_HEADERS | 在一些特殊情况下使用,如使用了CloudFlare CDN 它会将请求 IP 写到请求头的 cf-connecting-ip 字段上,为了能够正确的获取请求 IP 你可以写成 ['headers.cf-connecting-ip'] | [] |
tkserver
http://服务端IP:8080
测试服务是否启动成功https://
加域名(例如 https://twikoo.yourdomain.com
)提示
nohup tkserver >> tkserver.log 2>&1 &
命令后台启动注意
私有部署的环境需配合 1.6.0 或以上版本的 twikoo.js 使用
私有部署涉及终端操作、申请证书、配置反向代理或负载均衡等高级操作,如果对这些不太了解,建议优先选择其他方式部署。
docker run --name twikoo -e TWIKOO_THROTTLE=1000 -p 8080:8080 -v \${PWD}/data:/app/data -d imaegoo/twikoo
docker run --name twikoo -e TWIKOO_THROTTLE=1000 -p 8080:8080 -v \${PWD}/data:/app/data -d imaegoo/twikoo
version: '3'
+services:
+ twikoo:
+ image: imaegoo/twikoo
+ container_name: twikoo
+ restart: unless-stopped
+ ports:
+ - 8080:8080
+ environment:
+ TWIKOO_THROTTLE: 1000
+ volumes:
+ - ./data:/app/data
version: '3'
+services:
+ twikoo:
+ image: imaegoo/twikoo
+ container_name: twikoo
+ restart: unless-stopped
+ ports:
+ - 8080:8080
+ environment:
+ TWIKOO_THROTTLE: 1000
+ volumes:
+ - ./data:/app/data
{const{slotScopeIds:F}=p;F&&(U=U?U.concat(F):F);const R=i(m),Q=C(o(m),p,R,M,V,U,w);return Q&&tn(Q)&&Q.data==="]"?o(p.anchor=Q):(ke=!0,c(p.anchor=u("]"),R,Q),Q)},S=(m,p,M,V,U,w)=>{if(ke=!0,p.el=null,w){const Q=L(m);for(;;){const O=o(m);if(O&&O!==Q)l(O);else break}}const F=o(m),R=i(m);return l(m),n(null,p,R,F,M,V,en(R),U),F},L=(m,p="[",M="]")=>{let V=0;for(;m;)if(m=o(m),m&&tn(m)&&(m.data===p&&V++,m.data===M)){if(V===0)return o(m);V--}return m},k=(m,p,M)=>{const V=p.parentNode;V&&V.replaceChild(m,p);let U=M;for(;U;)U.vnode.el===p&&(U.vnode.el=m,U.subTree.el=m),U=U.parent},B=m=>m.nodeType===1&&m.tagName.toLowerCase()==="template";return[d,h]}const ge=no;function Ll(e){return Nl(e,Ml)}function Nl(e,t){const n=Yn();n.__VUE__=!0;const{insert:s,remove:r,patchProp:o,createElement:i,createText:l,createComment:c,setText:u,setElementText:d,parentNode:h,nextSibling:y,setScopeId:C=Oe,insertStaticContent:x}=e,S=(a,f,g,_=null,b=null,T=null,P=!1,E=null,A=!!f.dynamicChildren)=>{if(a===f)return;a&&!st(a,f)&&(_=qt(a),Pe(a,b,T,!0),a=null),f.patchFlag===-2&&(A=!1,f.dynamicChildren=null);const{type:v,ref:H,shapeFlag:I}=f;switch(v){case wt:L(a,f,g,_);break;case ve:k(a,f,g,_);break;case Nt:a==null&&B(f,g,_,P);break;case me:O(a,f,g,_,b,T,P,E,A);break;default:I&1?M(a,f,g,_,b,T,P,E,A):I&6?q(a,f,g,_,b,T,P,E,A):(I&64||I&128)&&v.process(a,f,g,_,b,T,P,E,A,ut)}H!=null&&b&&mn(H,a&&a.ref,T,f||a,!f)},L=(a,f,g,_)=>{if(a==null)s(f.el=l(f.children),g,_);else{const b=f.el=a.el;f.children!==a.children&&u(b,f.children)}},k=(a,f,g,_)=>{a==null?s(f.el=c(f.children||""),g,_):f.el=a.el},B=(a,f,g,_)=>{[a.el,a.anchor]=x(a.children,f,g,_,a.el,a.anchor)},m=({el:a,anchor:f},g,_)=>{let b;for(;a&&a!==f;)b=y(a),s(a,g,_),a=b;s(f,g,_)},p=({el:a,anchor:f})=>{let g;for(;a&&a!==f;)g=y(a),r(a),a=g;r(f)},M=(a,f,g,_,b,T,P,E,A)=>{P=P||f.type==="svg",a==null?V(f,g,_,b,T,P,E,A):F(a,f,b,T,P,E,A)},V=(a,f,g,_,b,T,P,E)=>{let A,v;const{type:H,props:I,shapeFlag:$,transition:K,dirs:Y}=a;if(A=a.el=i(a.type,T,I&&I.is,I),$&8?d(A,a.children):$&16&&w(a.children,A,null,_,b,T&&H!=="foreignObject",P,E),Y&&Ie(a,null,_,"created"),U(A,a,a.scopeId,P,_),I){for(const Z in I)Z!=="value"&&!It(Z)&&o(A,Z,null,I[Z],T,a.children,_,b,He);"value"in I&&o(A,"value",null,I.value),(v=I.onVnodeBeforeMount)&&Ce(v,_,a)}Y&&Ie(a,null,_,"beforeMount");const G=wo(b,K);G&&K.beforeEnter(A),s(A,f,g),((v=I&&I.onVnodeMounted)||G||Y)&&ge(()=>{v&&Ce(v,_,a),G&&K.enter(A),Y&&Ie(a,null,_,"mounted")},b)},U=(a,f,g,_,b)=>{if(g&&C(a,g),_)for(let T=0;T<_.length;T++)C(a,_[T]);if(b){let T=b.subTree;if(f===T){const P=b.vnode;U(a,P,P.scopeId,P.slotScopeIds,b.parent)}}},w=(a,f,g,_,b,T,P,E,A=0)=>{for(let v=A;v{const E=f.el=a.el;let{patchFlag:A,dynamicChildren:v,dirs:H}=f;A|=a.patchFlag&16;const I=a.props||te,$=f.props||te;let K;g&&Ge(g,!1),(K=$.onVnodeBeforeUpdate)&&Ce(K,g,f,a),H&&Ie(f,a,g,"beforeUpdate"),g&&Ge(g,!0);const Y=b&&f.type!=="foreignObject";if(v?R(a.dynamicChildren,v,E,g,_,Y,T):P||j(a,f,E,null,g,_,Y,T,!1),A>0){if(A&16)Q(E,f,I,$,g,_,b);else if(A&2&&I.class!==$.class&&o(E,"class",null,$.class,b),A&4&&o(E,"style",I.style,$.style,b),A&8){const G=f.dynamicProps;for(let Z=0;Z {K&&Ce(K,g,f,a),H&&Ie(f,a,g,"updated")},_)},R=(a,f,g,_,b,T,P)=>{for(let E=0;E {if(g!==_){if(g!==te)for(const E in g)!It(E)&&!(E in _)&&o(a,E,g[E],null,P,f.children,b,T,He);for(const E in _){if(It(E))continue;const A=_[E],v=g[E];A!==v&&E!=="value"&&o(a,E,v,A,P,f.children,b,T,He)}"value"in _&&o(a,"value",g.value,_.value)}},O=(a,f,g,_,b,T,P,E,A)=>{const v=f.el=a?a.el:l(""),H=f.anchor=a?a.anchor:l("");let{patchFlag:I,dynamicChildren:$,slotScopeIds:K}=f;K&&(E=E?E.concat(K):K),a==null?(s(v,g,_),s(H,g,_),w(f.children,g,H,b,T,P,E,A)):I>0&&I&64&&$&&a.dynamicChildren?(R(a.dynamicChildren,$,g,b,T,P,E),(f.key!=null||b&&f===b.subTree)&&Co(a,f,!0)):j(a,f,g,H,b,T,P,E,A)},q=(a,f,g,_,b,T,P,E,A)=>{f.slotScopeIds=E,a==null?f.shapeFlag&512?b.ctx.activate(f,g,_,P,A):oe(f,g,_,b,T,P,A):ue(a,f,A)},oe=(a,f,g,_,b,T,P)=>{const E=a.component=Wl(a,_,b);if(Wt(a)&&(E.ctx.renderer=ut),Vl(E),E.asyncDep){if(b&&b.registerDep(E,N),!a.el){const A=E.subTree=ne(ve);k(null,A,f,g)}return}N(E,a,f,g,b,T,P)},ue=(a,f,g)=>{const _=f.component=a.component;if(tl(a,f,g))if(_.asyncDep&&!_.asyncResolved){z(_,f,g);return}else _.next=f,Yi(_.update),_.update();else f.el=a.el,_.vnode=f},N=(a,f,g,_,b,T,P)=>{const E=()=>{if(a.isMounted){let{next:H,bu:I,u:$,parent:K,vnode:Y}=a,G=H,Z;Ge(a,!1),H?(H.el=Y.el,z(a,H,P)):H=Y,I&&$n(I),(Z=H.props&&H.props.onVnodeBeforeUpdate)&&Ce(Z,K,H,Y),Ge(a,!0);const re=jn(a),Te=a.subTree;a.subTree=re,S(Te,re,h(Te.el),qt(Te),a,b,T),H.el=re.el,G===null&&nl(a,re.el),$&&ge($,b),(Z=H.props&&H.props.onVnodeUpdated)&&ge(()=>Ce(Z,K,H,Y),b)}else{let H;const{el:I,props:$}=f,{bm:K,m:Y,parent:G}=a,Z=_t(f);if(Ge(a,!1),K&&$n(K),!Z&&(H=$&&$.onVnodeBeforeMount)&&Ce(H,G,f),Ge(a,!0),I&&Hn){const re=()=>{a.subTree=jn(a),Hn(I,a.subTree,a,b,null)};Z?f.type.__asyncLoader().then(()=>!a.isUnmounted&&re()):re()}else{const re=a.subTree=jn(a);S(null,re,g,_,a,b,T),f.el=re.el}if(Y&&ge(Y,b),!Z&&(H=$&&$.onVnodeMounted)){const re=f;ge(()=>Ce(H,G,re),b)}(f.shapeFlag&256||G&&_t(G.vnode)&&G.vnode.shapeFlag&256)&&a.a&&ge(a.a,b),a.isMounted=!0,f=g=_=null}},A=a.effect=new gs(E,()=>Sn(v),a.scope),v=a.update=()=>A.run();v.id=a.uid,Ge(a,!0),v()},z=(a,f,g)=>{f.component=a;const _=a.vnode.props;a.vnode=f,a.next=null,Ol(a,f.props,_,g),Il(a,f.children,g),Tt(),Vs(),At()},j=(a,f,g,_,b,T,P,E,A=!1)=>{const v=a&&a.children,H=a?a.shapeFlag:0,I=f.children,{patchFlag:$,shapeFlag:K}=f;if($>0){if($&128){Vt(v,I,g,_,b,T,P,E,A);return}else if($&256){Ne(v,I,g,_,b,T,P,E,A);return}}K&8?(H&16&&He(v,b,T),I!==v&&d(g,I)):H&16?K&16?Vt(v,I,g,_,b,T,P,E,A):He(v,b,T,!0):(H&8&&d(g,""),K&16&&w(I,g,_,b,T,P,E,A))},Ne=(a,f,g,_,b,T,P,E,A)=>{a=a||pt,f=f||pt;const v=a.length,H=f.length,I=Math.min(v,H);let $;for($=0;$H?He(a,b,T,!0,!1,I):w(f,g,_,b,T,P,E,A,I)},Vt=(a,f,g,_,b,T,P,E,A)=>{let v=0;const H=f.length;let I=a.length-1,$=H-1;for(;v<=I&&v<=$;){const K=a[v],Y=f[v]=A?Ve(f[v]):Ae(f[v]);if(st(K,Y))S(K,Y,g,null,b,T,P,E,A);else break;v++}for(;v<=I&&v<=$;){const K=a[I],Y=f[$]=A?Ve(f[$]):Ae(f[$]);if(st(K,Y))S(K,Y,g,null,b,T,P,E,A);else break;I--,$--}if(v>I){if(v<=$){const K=$+1,Y=K $)for(;v<=I;)Pe(a[v],b,T,!0),v++;else{const K=v,Y=v,G=new Map;for(v=Y;v<=$;v++){const _e=f[v]=A?Ve(f[v]):Ae(f[v]);_e.key!=null&&G.set(_e.key,v)}let Z,re=0;const Te=$-Y+1;let ft=!1,Ls=0;const Rt=new Array(Te);for(v=0;v =Te){Pe(_e,b,T,!0);continue}let Fe;if(_e.key!=null)Fe=G.get(_e.key);else for(Z=Y;Z<=$;Z++)if(Rt[Z-Y]===0&&st(_e,f[Z])){Fe=Z;break}Fe===void 0?Pe(_e,b,T,!0):(Rt[Fe-Y]=v+1,Fe>=Ls?Ls=Fe:ft=!0,S(_e,f[Fe],g,null,b,T,P,E,A),re++)}const Ns=ft?Hl(Rt):pt;for(Z=Ns.length-1,v=Te-1;v>=0;v--){const _e=Y+v,Fe=f[_e],Hs=_e+1 {const{el:T,type:P,transition:E,children:A,shapeFlag:v}=a;if(v&6){Ze(a.component.subTree,f,g,_);return}if(v&128){a.suspense.move(f,g,_);return}if(v&64){P.move(a,f,g,ut);return}if(P===me){s(T,f,g);for(let I=0;I E.enter(T),b);else{const{leave:I,delayLeave:$,afterLeave:K}=E,Y=()=>s(T,f,g),G=()=>{I(T,()=>{Y(),K&&K()})};$?$(T,Y,G):G()}else s(T,f,g)},Pe=(a,f,g,_=!1,b=!1)=>{const{type:T,props:P,ref:E,children:A,dynamicChildren:v,shapeFlag:H,patchFlag:I,dirs:$}=a;if(E!=null&&mn(E,null,g,a,!0),H&256){f.ctx.deactivate(a);return}const K=H&1&&$,Y=!_t(a);let G;if(Y&&(G=P&&P.onVnodeBeforeUnmount)&&Ce(G,f,a),H&6)Xo(a.component,g,_);else{if(H&128){a.suspense.unmount(g,_);return}K&&Ie(a,null,f,"beforeUnmount"),H&64?a.type.remove(a,f,g,b,ut,_):v&&(T!==me||I>0&&I&64)?He(v,f,g,!1,!0):(T===me&&I&384||!b&&H&16)&&He(A,f,g),_&&Is(a)}(Y&&(G=P&&P.onVnodeUnmounted)||K)&&ge(()=>{G&&Ce(G,f,a),K&&Ie(a,null,f,"unmounted")},g)},Is=a=>{const{type:f,el:g,anchor:_,transition:b}=a;if(f===me){Jo(g,_);return}if(f===Nt){p(a);return}const T=()=>{r(g),b&&!b.persisted&&b.afterLeave&&b.afterLeave()};if(a.shapeFlag&1&&b&&!b.persisted){const{leave:P,delayLeave:E}=b,A=()=>P(g,T);E?E(a.el,T,A):A()}else T()},Jo=(a,f)=>{let g;for(;a!==f;)g=y(a),r(a),a=g;r(f)},Xo=(a,f,g)=>{const{bum:_,scope:b,update:T,subTree:P,um:E}=a;_&&$n(_),b.stop(),T&&(T.active=!1,Pe(P,a,f,g)),E&&ge(E,f),ge(()=>{a.isUnmounted=!0},f),f&&f.pendingBranch&&!f.isUnmounted&&a.asyncDep&&!a.asyncResolved&&a.suspenseId===f.pendingId&&(f.deps--,f.deps===0&&f.resolve())},He=(a,f,g,_=!1,b=!1,T=0)=>{for(let P=T;P a.shapeFlag&6?qt(a.component.subTree):a.shapeFlag&128?a.suspense.next():y(a.anchor||a.el),Ms=(a,f,g)=>{a==null?f._vnode&&Pe(f._vnode,null,null,!0):S(f._vnode||null,a,f,null,null,null,g),Vs(),dn(),f._vnode=a},ut={p:S,um:Pe,m:Ze,r:Is,mt:oe,mc:w,pc:j,pbc:R,n:qt,o:e};let Nn,Hn;return t&&([Nn,Hn]=t(ut)),{render:Ms,hydrate:Nn,createApp:Al(Ms,Nn)}}function Ge({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function wo(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Co(e,t,n=!1){const s=e.children,r=t.children;if(D(s)&&D(r))for(let o=0;o >1,e[n[l]]0&&(t[s]=n[o-1]),n[o]=s)}}for(o=n.length,i=n[o-1];o-- >0;)n[o]=i,i=t[i];return n}const $l=e=>e.__isTeleport,me=Symbol.for("v-fgt"),wt=Symbol.for("v-txt"),ve=Symbol.for("v-cmt"),Nt=Symbol.for("v-stc"),Ht=[];let Re=null;function Eo(e=!1){Ht.push(Re=e?null:[])}function jl(){Ht.pop(),Re=Ht[Ht.length-1]||null}let Bt=1;function sr(e){Bt+=e}function xo(e){return e.dynamicChildren=Bt>0?Re||pt:null,jl(),Bt>0&&Re&&Re.push(e),e}function Pa(e,t,n,s,r,o){return xo(So(e,t,n,s,r,o,!0))}function To(e,t,n,s,r){return xo(ne(e,t,n,s,r,!0))}function yn(e){return e?e.__v_isVNode===!0:!1}function st(e,t){return e.type===t.type&&e.key===t.key}const Mn="__vInternal",Ao=({key:e})=>e??null,ln=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?se(e)||ae(e)||W(e)?{i:he,r:e,k:t,f:!!n}:e:null);function So(e,t=null,n=null,s=0,r=null,o=e===me?0:1,i=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Ao(t),ref:t&&ln(t),scopeId:On,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:o,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:he};return l?(Rs(c,n),o&128&&e.normalize(c)):n&&(c.shapeFlag|=se(n)?8:16),Bt>0&&!i&&Re&&(c.patchFlag>0||o&6)&&c.patchFlag!==32&&Re.push(c),c}const ne=Dl;function Dl(e,t=null,n=null,s=0,r=null,o=!1){if((!e||e===uo)&&(e=ve),yn(e)){const l=Qe(e,t,!0);return n&&Rs(l,n),Bt>0&&!o&&Re&&(l.shapeFlag&6?Re[Re.indexOf(e)]=l:Re.push(l)),l.patchFlag|=-2,l}if(Jl(e)&&(e=e.__vccOpts),t){t=Bl(t);let{class:l,style:c}=t;l&&!se(l)&&(t.class=hs(l)),ee(c)&&(Yr(c)&&!D(c)&&(c=le({},c)),t.style=ds(c))}const i=se(e)?1:sl(e)?128:$l(e)?64:ee(e)?4:W(e)?2:0;return So(e,t,n,s,r,i,o,!0)}function Bl(e){return e?Yr(e)||Mn in e?le({},e):e:null}function Qe(e,t,n=!1){const{props:s,ref:r,patchFlag:o,children:i}=e,l=t?kl(s||{},t):s;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:l,key:l&&Ao(l),ref:t&&t.ref?n&&r?D(r)?r.concat(ln(t)):[r,ln(t)]:ln(t):r,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:i,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==me?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Qe(e.ssContent),ssFallback:e.ssFallback&&Qe(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce}}function Ro(e=" ",t=0){return ne(wt,null,e,t)}function Fa(e,t){const n=ne(Nt,null,e);return n.staticCount=t,n}function Ia(e="",t=!1){return t?(Eo(),To(ve,null,e)):ne(ve,null,e)}function Ae(e){return e==null||typeof e=="boolean"?ne(ve):D(e)?ne(me,null,e.slice()):typeof e=="object"?Ve(e):ne(wt,null,String(e))}function Ve(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Qe(e)}function Rs(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),Rs(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!(Mn in t)?t._ctx=he:r===3&&he&&(he.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else W(t)?(t={default:t,_ctx:he},n=32):(t=String(t),s&64?(n=16,t=[Ro(t)]):n=8);e.children=t,e.shapeFlag|=n}function kl(...e){const t={};for(let n=0;n ie||he;let Os,dt,rr="__VUE_INSTANCE_SETTERS__";(dt=Yn()[rr])||(dt=Yn()[rr]=[]),dt.push(e=>ie=e),Os=e=>{dt.length>1?dt.forEach(t=>t(e)):dt[0](e)};const Ct=e=>{Os(e),e.scope.on()},it=()=>{ie&&ie.scope.off(),Os(null)};function Oo(e){return e.vnode.shapeFlag&4}let Et=!1;function Vl(e,t=!1){Et=t;const{props:n,children:s}=e.vnode,r=Oo(e);Rl(e,n,r,t),Fl(e,s);const o=r?ql(e,t):void 0;return Et=!1,o}function ql(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=Mt(new Proxy(e.ctx,_l));const{setup:s}=n;if(s){const r=e.setupContext=s.length>1?Fo(e):null;Ct(e),Tt();const o=ze(s,e,0,[e.props,r]);if(At(),it(),Ir(o)){if(o.then(it,it),t)return o.then(i=>{or(e,i,t)}).catch(i=>{Kt(i,e,0)});e.asyncDep=o}else or(e,o,t)}else Po(e,t)}function or(e,t,n){W(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:ee(t)&&(e.setupState=Qr(t)),Po(e,n)}let ir;function Po(e,t,n){const s=e.type;if(!e.render){if(!t&&ir&&!s.render){const r=s.template||As(e).template;if(r){const{isCustomElement:o,compilerOptions:i}=e.appContext.config,{delimiters:l,compilerOptions:c}=s,u=le(le({isCustomElement:o,delimiters:l},i),c);s.render=ir(r,u)}}e.render=s.render||Oe}{Ct(e),Tt();try{vl(e)}finally{At(),it()}}}function zl(e){return e.attrsProxy||(e.attrsProxy=new Proxy(e.attrs,{get(t,n){return ye(e,"get","$attrs"),t[n]}}))}function Fo(e){const t=n=>{e.exposed=n||{}};return{get attrs(){return zl(e)},slots:e.slots,emit:e.emit,expose:t}}function Ps(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(Qr(Mt(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Lt)return Lt[n](e)},has(t,n){return n in t||n in Lt}}))}function Yl(e,t=!0){return W(e)?e.displayName||e.name:e.name||t&&e.__name}function Jl(e){return W(e)&&"__vccOpts"in e}const ce=(e,t)=>Vi(e,t,Et);function os(e,t,n){const s=arguments.length;return s===2?ee(t)&&!D(t)?yn(t)?ne(e,null,[t]):ne(e,t):ne(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&yn(n)&&(n=[n]),ne(e,t,n))}const Xl=Symbol.for("v-scx"),Ql=()=>bt(Xl),Zl="3.3.7",Gl="http://www.w3.org/2000/svg",rt=typeof document<"u"?document:null,lr=rt&&rt.createElement("template"),ec={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?rt.createElementNS(Gl,e):rt.createElement(e,n?{is:n}:void 0);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>rt.createTextNode(e),createComment:e=>rt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>rt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,o){const i=n?n.previousSibling:t.lastChild;if(r&&(r===o||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===o||!(r=r.nextSibling)););else{lr.innerHTML=s?``:e;const l=lr.content;if(s){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[i?i.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Ue="transition",Ot="animation",kt=Symbol("_vtc"),Io=(e,{slots:t})=>os(ll,tc(e),t);Io.displayName="Transition";const Mo={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};Io.props=le({},oo,Mo);const et=(e,t=[])=>{D(e)?e.forEach(n=>n(...t)):e&&e(...t)},cr=e=>e?D(e)?e.some(t=>t.length>1):e.length>1:!1;function tc(e){const t={};for(const O in e)O in Mo||(t[O]=e[O]);if(e.css===!1)return t;const{name:n="v",type:s,duration:r,enterFromClass:o=`${n}-enter-from`,enterActiveClass:i=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:c=o,appearActiveClass:u=i,appearToClass:d=l,leaveFromClass:h=`${n}-leave-from`,leaveActiveClass:y=`${n}-leave-active`,leaveToClass:C=`${n}-leave-to`}=e,x=nc(r),S=x&&x[0],L=x&&x[1],{onBeforeEnter:k,onEnter:B,onEnterCancelled:m,onLeave:p,onLeaveCancelled:M,onBeforeAppear:V=k,onAppear:U=B,onAppearCancelled:w=m}=t,F=(O,q,oe)=>{tt(O,q?d:l),tt(O,q?u:i),oe&&oe()},R=(O,q)=>{O._isLeaving=!1,tt(O,h),tt(O,C),tt(O,y),q&&q()},Q=O=>(q,oe)=>{const ue=O?U:B,N=()=>F(q,O,oe);et(ue,[q,N]),ar(()=>{tt(q,O?c:o),Ke(q,O?d:l),cr(ue)||ur(q,s,S,N)})};return le(t,{onBeforeEnter(O){et(k,[O]),Ke(O,o),Ke(O,i)},onBeforeAppear(O){et(V,[O]),Ke(O,c),Ke(O,u)},onEnter:Q(!1),onAppear:Q(!0),onLeave(O,q){O._isLeaving=!0;const oe=()=>R(O,q);Ke(O,h),oc(),Ke(O,y),ar(()=>{O._isLeaving&&(tt(O,h),Ke(O,C),cr(p)||ur(O,s,L,oe))}),et(p,[O,oe])},onEnterCancelled(O){F(O,!1),et(m,[O])},onAppearCancelled(O){F(O,!0),et(w,[O])},onLeaveCancelled(O){R(O),et(M,[O])}})}function nc(e){if(e==null)return null;if(ee(e))return[Un(e.enter),Un(e.leave)];{const t=Un(e);return[t,t]}}function Un(e){return ri(e)}function Ke(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[kt]||(e[kt]=new Set)).add(t)}function tt(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const n=e[kt];n&&(n.delete(t),n.size||(e[kt]=void 0))}function ar(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let sc=0;function ur(e,t,n,s){const r=e._endId=++sc,o=()=>{r===e._endId&&s()};if(n)return setTimeout(o,n);const{type:i,timeout:l,propCount:c}=rc(e,t);if(!i)return s();const u=i+"end";let d=0;const h=()=>{e.removeEventListener(u,y),o()},y=C=>{C.target===e&&++d>=c&&h()};setTimeout(()=>{d (n[x]||"").split(", "),r=s(`${Ue}Delay`),o=s(`${Ue}Duration`),i=fr(r,o),l=s(`${Ot}Delay`),c=s(`${Ot}Duration`),u=fr(l,c);let d=null,h=0,y=0;t===Ue?i>0&&(d=Ue,h=i,y=o.length):t===Ot?u>0&&(d=Ot,h=u,y=c.length):(h=Math.max(i,u),d=h>0?i>u?Ue:Ot:null,y=d?d===Ue?o.length:c.length:0);const C=d===Ue&&/\b(transform|all)(,|$)/.test(s(`${Ue}Property`).toString());return{type:d,timeout:h,propCount:y,hasTransform:C}}function fr(e,t){for(;e.length dr(n)+dr(e[s])))}function dr(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function oc(){return document.body.offsetHeight}function ic(e,t,n){const s=e[kt];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const lc=Symbol("_vod");function cc(e,t,n){const s=e.style,r=se(n);if(n&&!r){if(t&&!se(t))for(const o in t)n[o]==null&&is(s,o,"");for(const o in n)is(s,o,n[o])}else{const o=s.display;r?t!==n&&(s.cssText=n):t&&e.removeAttribute("style"),lc in e&&(s.display=o)}}const hr=/\s*!important$/;function is(e,t,n){if(D(n))n.forEach(s=>is(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=ac(e,t);hr.test(n)?e.setProperty(at(s),n.replace(hr,""),"important"):e[s]=n}}const pr=["Webkit","Moz","ms"],Kn={};function ac(e,t){const n=Kn[t];if(n)return n;let s=Le(t);if(s!=="filter"&&s in e)return Kn[t]=s;s=Cn(s);for(let r=0;r Wn||(mc.then(()=>Wn=0),Wn=Date.now());function _c(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;xe(bc(s,n.value),t,5,[s])};return n.value=e,n.attached=yc(),n}function bc(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 _r=/^on[a-z]/,vc=(e,t,n,s,r=!1,o,i,l,c)=>{t==="class"?ic(e,s,r):t==="style"?cc(e,n,s):Ut(t)?as(t)||pc(e,t,n,s,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):wc(e,t,s,r))?fc(e,t,s,o,i,l,c):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),uc(e,t,s,r))};function wc(e,t,n,s){return s?!!(t==="innerHTML"||t==="textContent"||t in e&&_r.test(t)&&W(n)):t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA"||_r.test(t)&&se(n)?!1:t in e}const Cc=["ctrl","shift","alt","meta"],Ec={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Cc.some(n=>e[`${n}Key`]&&!t.includes(n))},Ma=(e,t)=>(n,...s)=>{for(let r=0;r n=>{if(!("key"in n))return;const s=at(n.key);if(t.some(r=>r===s||xc[r]===s))return e(n)},Tc=le({patchProp:vc},ec);let Vn,br=!1;function Ac(){return Vn=br?Vn:Ll(Tc),br=!0,Vn}const Na=(...e)=>{const t=Ac().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=Sc(s);if(r)return n(r,!0,r instanceof SVGElement)},t};function Sc(e){return se(e)?document.querySelector(e):e}const Ha=(e,t)=>{const n=e.__vccOpts||e;for(const[s,r]of t)n[s]=r;return n},Rc="modulepreload",Oc=function(e){return"/"+e},vr={},$a=function(t,n,s){if(!n||n.length===0)return t();const r=document.getElementsByTagName("link");return Promise.all(n.map(o=>{if(o=Oc(o),o in vr)return;vr[o]=!0;const i=o.endsWith(".css"),l=i?'[rel="stylesheet"]':"";if(!!s)for(let d=r.length-1;d>=0;d--){const h=r[d];if(h.href===o&&(!i||h.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${o}"]${l}`))return;const u=document.createElement("link");if(u.rel=i?"stylesheet":Rc,i||(u.as="script",u.crossOrigin=""),u.href=o,document.head.appendChild(u),i)return new Promise((d,h)=>{u.addEventListener("load",d),u.addEventListener("error",()=>h(new Error(`Unable to preload CSS for ${o}`)))})})).then(()=>t()).catch(o=>{const i=new Event("vite:preloadError",{cancelable:!0});if(i.payload=o,window.dispatchEvent(i),!i.defaultPrevented)throw o})},Pc=window.__VP_SITE_DATA__;function Fs(e){return $r()?(hi(e),!0):!1}function Je(e){return typeof e=="function"?e():Cs(e)}function ja(e,t){const n=(t==null?void 0:t.computedGetter)===!1?Cs:Je;return function(...s){return ce(()=>e.apply(this,s.map(r=>n(r))))}}const Lo=typeof window<"u"&&typeof document<"u",Fc=Object.prototype.toString,Ic=e=>Fc.call(e)==="[object Object]",No=()=>{},wr=Mc();function Mc(){var e;return Lo&&((e=window==null?void 0:window.navigator)==null?void 0:e.userAgent)&&/iP(ad|hone|od)/.test(window.navigator.userAgent)}function Lc(e,t){function n(...s){return new Promise((r,o)=>{Promise.resolve(e(()=>t.apply(this,s),{fn:t,thisArg:this,args:s})).then(r).catch(o)})}return n}const Ho=e=>e();function Nc(e=Ho){const t=fe(!0);function n(){t.value=!1}function s(){t.value=!0}const r=(...o)=>{t.value&&e(...o)};return{isActive:Tn(t),pause:n,resume:s,eventFilter:r}}function $o(...e){if(e.length!==1)return Ui(...e);const t=e[0];return typeof t=="function"?Tn(Di(()=>({get:t,set:No}))):fe(t)}function Hc(e,t,n={}){const{eventFilter:s=Ho,...r}=n;return Ye(e,Lc(s,t),r)}function $c(e,t,n={}){const{eventFilter:s,...r}=n,{eventFilter:o,pause:i,resume:l,isActive:c}=Nc(s);return{stop:Hc(e,t,{...r,eventFilter:o}),pause:i,resume:l,isActive:c}}function jc(e,t=!0){Ln()?St(e):t?e():An(e)}function jo(e){var t;const n=Je(e);return(t=n==null?void 0:n.$el)!=null?t:n}const xt=Lo?window:void 0;function _n(...e){let t,n,s,r;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,s,r]=e,t=xt):[t,n,s,r]=e,!t)return No;Array.isArray(n)||(n=[n]),Array.isArray(s)||(s=[s]);const o=[],i=()=>{o.forEach(d=>d()),o.length=0},l=(d,h,y,C)=>(d.addEventListener(h,y,C),()=>d.removeEventListener(h,y,C)),c=Ye(()=>[jo(t),Je(r)],([d,h])=>{if(i(),!d)return;const y=Ic(h)?{...h}:h;o.push(...n.flatMap(C=>s.map(x=>l(d,C,x,y))))},{immediate:!0,flush:"post"}),u=()=>{c(),i()};return Fs(u),u}function Dc(){const e=fe(!1);return Ln()&&St(()=>{e.value=!0}),e}function Bc(e){const t=Dc();return ce(()=>(t.value,!!e()))}function kc(e,t={}){const{window:n=xt}=t,s=Bc(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let r;const o=fe(!1),i=u=>{o.value=u.matches},l=()=>{r&&("removeEventListener"in r?r.removeEventListener("change",i):r.removeListener(i))},c=so(()=>{s.value&&(l(),r=n.matchMedia(Je(e)),"addEventListener"in r?r.addEventListener("change",i):r.addListener(i),o.value=r.matches)});return Fs(()=>{c(),l(),r=void 0}),o}const nn=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},sn="__vueuse_ssr_handlers__",Uc=Kc();function Kc(){return sn in nn||(nn[sn]=nn[sn]||{}),nn[sn]}function Do(e,t){return Uc[e]||t}function Wc(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"}const Vc={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()}},Cr="vueuse-storage";function qc(e,t,n,s={}){var r;const{flush:o="pre",deep:i=!0,listenToStorageChanges:l=!0,writeDefaults:c=!0,mergeDefaults:u=!1,shallow:d,window:h=xt,eventFilter:y,onError:C=w=>{console.error(w)}}=s,x=(d?Jr:fe)(t);if(!n)try{n=Do("getDefaultStorage",()=>{var w;return(w=xt)==null?void 0:w.localStorage})()}catch(w){C(w)}if(!n)return x;const S=Je(t),L=Wc(S),k=(r=s.serializer)!=null?r:Vc[L],{pause:B,resume:m}=$c(x,()=>p(x.value),{flush:o,deep:i,eventFilter:y});return h&&l&&(_n(h,"storage",U),_n(h,Cr,V)),U(),x;function p(w){try{if(w==null)n.removeItem(e);else{const F=k.write(w),R=n.getItem(e);R!==F&&(n.setItem(e,F),h&&h.dispatchEvent(new CustomEvent(Cr,{detail:{key:e,oldValue:R,newValue:F,storageArea:n}})))}}catch(F){C(F)}}function M(w){const F=w?w.newValue:n.getItem(e);if(F==null)return c&&S!==null&&n.setItem(e,k.write(S)),S;if(!w&&u){const R=k.read(F);return typeof u=="function"?u(R,S):L==="object"&&!Array.isArray(R)?{...S,...R}:R}else return typeof F!="string"?F:k.read(F)}function V(w){U(w.detail)}function U(w){if(!(w&&w.storageArea!==n)){if(w&&w.key==null){x.value=S;return}if(!(w&&w.key!==e)){B();try{(w==null?void 0:w.newValue)!==k.write(x.value)&&(x.value=M(w))}catch(F){C(F)}finally{w?An(m):m()}}}}}function zc(e){return kc("(prefers-color-scheme: dark)",e)}function Yc(e={}){const{selector:t="html",attribute:n="class",initialValue:s="auto",window:r=xt,storage:o,storageKey:i="vueuse-color-scheme",listenToStorageChanges:l=!0,storageRef:c,emitAuto:u,disableTransition:d=!0}=e,h={auto:"",light:"light",dark:"dark",...e.modes||{}},y=zc({window:r}),C=ce(()=>y.value?"dark":"light"),x=c||(i==null?$o(s):qc(i,s,o,{window:r,listenToStorageChanges:l})),S=ce(()=>x.value==="auto"?C.value:x.value),L=Do("updateHTMLAttrs",(p,M,V)=>{const U=typeof p=="string"?r==null?void 0:r.document.querySelector(p):jo(p);if(!U)return;let w;if(d){w=r.document.createElement("style");const F="*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}";w.appendChild(document.createTextNode(F)),r.document.head.appendChild(w)}if(M==="class"){const F=V.split(/\s/g);Object.values(h).flatMap(R=>(R||"").split(/\s/g)).filter(Boolean).forEach(R=>{F.includes(R)?U.classList.add(R):U.classList.remove(R)})}else U.setAttribute(M,V);d&&(r.getComputedStyle(w).opacity,document.head.removeChild(w))});function k(p){var M;L(t,n,(M=h[p])!=null?M:p)}function B(p){e.onChanged?e.onChanged(p,k):k(p)}Ye(S,B,{flush:"post",immediate:!0}),jc(()=>B(S.value));const m=ce({get(){return u?x.value:S.value},set(p){x.value=p}});try{return Object.assign(m,{store:x,system:C,state:S})}catch{return m}}function Jc(e={}){const{valueDark:t="dark",valueLight:n=""}=e,s=Yc({...e,onChanged:(o,i)=>{var l;e.onChanged?(l=e.onChanged)==null||l.call(e,o==="dark",i,o):i(o)},modes:{dark:t,light:n}});return ce({get(){return s.value==="dark"},set(o){const i=o?"dark":"light";s.system.value===i?s.value="auto":s.value=i}})}function qn(e){return typeof Window<"u"&&e instanceof Window?e.document.documentElement:typeof Document<"u"&&e instanceof Document?e.documentElement:e}function Bo(e){const t=window.getComputedStyle(e);if(t.overflowX==="scroll"||t.overflowY==="scroll"||t.overflowX==="auto"&&e.clientWidth 1?!0:(t.preventDefault&&t.preventDefault(),!1)}function Da(e,t=!1){const n=fe(t);let s=null,r;Ye($o(e),l=>{const c=qn(Je(l));if(c){const u=c;r=u.style.overflow,n.value&&(u.style.overflow="hidden")}},{immediate:!0});const o=()=>{const l=qn(Je(e));!l||n.value||(wr&&(s=_n(l,"touchmove",c=>{Xc(c)},{passive:!1})),l.style.overflow="hidden",n.value=!0)},i=()=>{const l=qn(Je(e));!l||!n.value||(wr&&(s==null||s()),l.style.overflow=r,n.value=!1)};return Fs(i),ce({get(){return n.value},set(l){l?o():i()}})}function Ba(e={}){const{window:t=xt}=e;if(!t)return{x:fe(0),y:fe(0)};const n=fe(t.scrollX),s=fe(t.scrollY);return _n(t,"scroll",()=>{n.value=t.scrollX,s.value=t.scrollY},{capture:!1,passive:!0}),{x:n,y:s}}const ko=/^[a-z]+:/i,Qc="vitepress-theme-appearance",Uo=/#.*$/,Zc=/(index)?\.(md|html)$/,Ee=typeof document<"u",Ko={relativePath:"",filePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0,isNotFound:!0};function Gc(e,t,n=!1){if(t===void 0)return!1;if(e=Er(`/${e}`),n)return new RegExp(t).test(e);if(Er(t)!==e)return!1;const s=t.match(Uo);return s?(Ee?location.hash:"")===s[0]:!0}function Er(e){return decodeURI(e).replace(Uo,"").replace(Zc,"")}function ea(e){return ko.test(e)}function ta(e,t){var s,r,o,i,l,c,u;const n=Object.keys(e.locales).find(d=>d!=="root"&&!ea(d)&&Gc(t,`/${d}/`,!0))||"root";return Object.assign({},e,{localeIndex:n,lang:((s=e.locales[n])==null?void 0:s.lang)??e.lang,dir:((r=e.locales[n])==null?void 0:r.dir)??e.dir,title:((o=e.locales[n])==null?void 0:o.title)??e.title,titleTemplate:((i=e.locales[n])==null?void 0:i.titleTemplate)??e.titleTemplate,description:((l=e.locales[n])==null?void 0:l.description)??e.description,head:Vo(e.head,((c=e.locales[n])==null?void 0:c.head)??[]),themeConfig:{...e.themeConfig,...(u=e.locales[n])==null?void 0:u.themeConfig}})}function Wo(e,t){const n=t.title||e.title,s=t.titleTemplate??e.titleTemplate;if(typeof s=="string"&&s.includes(":title"))return s.replace(/:title/g,n);const r=na(e.title,s);return`${n}${r}`}function na(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function sa(e,t){const[n,s]=t;if(n!=="meta")return!1;const r=Object.entries(s)[0];return r==null?!1:e.some(([o,i])=>o===n&&i[r[0]]===r[1])}function Vo(e,t){return[...e.filter(n=>!sa(t,n)),...t]}const ra=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,oa=/^[a-z]:/i;function xr(e){const t=oa.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(ra,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const ia=Symbol(),lt=Jr(Pc);function ka(e){const t=ce(()=>ta(lt.value,e.data.relativePath)),n=t.value.appearance,s=n==="force-dark"?fe(!0):n?Jc({storageKey:Qc,initialValue:()=>typeof n=="string"?n:"auto",...typeof n=="object"?n:{}}):fe(!1);return{site:t,theme:ce(()=>t.value.themeConfig),page:ce(()=>e.data),frontmatter:ce(()=>e.data.frontmatter),params:ce(()=>e.data.params),lang:ce(()=>t.value.lang),dir:ce(()=>t.value.dir),localeIndex:ce(()=>t.value.localeIndex||"root"),title:ce(()=>Wo(t.value,e.data)),description:ce(()=>e.data.description||t.value.description),isDark:s}}function la(){const e=bt(ia);if(!e)throw new Error("vitepress data not properly injected in app");return e}function ca(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function Tr(e){return ko.test(e)||!e.startsWith("/")?e:ca(lt.value.base,e)}function aa(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),Ee){const n="/";t=xr(t.slice(n.length).replace(/\//g,"_")||"index")+".md";let s=__VP_HASH_MAP__[t.toLowerCase()];if(s||(t=t.endsWith("_index.md")?t.slice(0,-9)+".md":t.slice(0,-3)+"_index.md",s=__VP_HASH_MAP__[t.toLowerCase()]),!s)return null;t=`${n}assets/${t}.${s}.js`}else t=`./${xr(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}let cn=[];function Ua(e){cn.push(e),In(()=>{cn=cn.filter(t=>t!==e)})}const ua=Symbol(),qo="http://a.com",fa=()=>({path:"/",component:null,data:Ko});function Ka(e,t){const n=xn(fa()),s={route:n,go:r};async function r(l=Ee?location.href:"/"){var c,u;l=ls(l),await((c=s.onBeforeRouteChange)==null?void 0:c.call(s,l))!==!1&&(Rr(l),await i(l),await((u=s.onAfterRouteChanged)==null?void 0:u.call(s,l)))}let o=null;async function i(l,c=0,u=!1){var y;if(await((y=s.onBeforePageLoad)==null?void 0:y.call(s,l))===!1)return;const d=new URL(l,qo),h=o=d.pathname;try{let C=await e(h);if(!C)throw new Error(`Page not found: ${h}`);if(o===h){o=null;const{default:x,__pageData:S}=C;if(!x)throw new Error(`Invalid route component: ${x}`);n.path=Ee?h:Tr(h),n.component=Mt(x),n.data=Mt(S),Ee&&An(()=>{let L=lt.value.base+S.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");if(!lt.value.cleanUrls&&!L.endsWith("/")&&(L+=".html"),L!==d.pathname&&(d.pathname=L,l=L+d.search+d.hash,history.replaceState(null,"",l)),d.hash&&!c){let k=null;try{k=document.getElementById(decodeURIComponent(d.hash).slice(1))}catch(B){console.warn(B)}if(k){Ar(k,d.hash);return}}window.scrollTo(0,c)})}}catch(C){if(!/fetch|Page not found/.test(C.message)&&!/^\/404(\.html|\/)?$/.test(l)&&console.error(C),!u)try{const x=await fetch(lt.value.base+"hashmap.json");window.__VP_HASH_MAP__=await x.json(),await i(l,c,!0);return}catch{}o===h&&(o=null,n.path=Ee?h:Tr(h),n.component=t?Mt(t):null,n.data=Ko)}}return Ee&&(window.addEventListener("click",l=>{if(l.target.closest("button"))return;const u=l.target.closest("a");if(u&&!u.closest(".vp-raw")&&(u instanceof SVGElement||!u.download)){const{target:d}=u,{href:h,origin:y,pathname:C,hash:x,search:S}=new URL(u.href instanceof SVGAnimatedString?u.href.animVal:u.href,u.baseURI),L=window.location,k=C.match(/\.\w+$/);!l.ctrlKey&&!l.shiftKey&&!l.altKey&&!l.metaKey&&!d&&y===L.origin&&!(k&&k[0]!==".html")&&(l.preventDefault(),C===L.pathname&&S===L.search?(x!==L.hash&&(history.pushState(null,"",x),window.dispatchEvent(new Event("hashchange"))),x?Ar(u,x,u.classList.contains("header-anchor")):(Rr(h),window.scrollTo(0,0))):r(h))}},{capture:!0}),window.addEventListener("popstate",l=>{i(ls(location.href),l.state&&l.state.scrollPosition||0)}),window.addEventListener("hashchange",l=>{l.preventDefault()})),s}function da(){const e=bt(ua);if(!e)throw new Error("useRouter() is called without provider.");return e}function zo(){return da().route}function Ar(e,t,n=!1){let s=null;try{s=e.classList.contains("header-anchor")?e:document.getElementById(decodeURIComponent(t).slice(1))}catch(r){console.warn(r)}if(s){let u=function(){!n||Math.abs(c-window.scrollY)>window.innerHeight?window.scrollTo(0,c):window.scrollTo({left:0,top:c,behavior:"smooth"})},r=lt.value.scrollOffset,o=0,i=24;if(typeof r=="object"&&"padding"in r&&(i=r.padding,r=r.selector),typeof r=="number")o=r;else if(typeof r=="string")o=Sr(r,i);else if(Array.isArray(r))for(const d of r){const h=Sr(d,i);if(h){o=h;break}}const l=parseInt(window.getComputedStyle(s).paddingTop,10),c=window.scrollY+s.getBoundingClientRect().top-o+l;requestAnimationFrame(u)}}function Sr(e,t){const n=document.querySelector(e);if(!n)return 0;const s=n.getBoundingClientRect().bottom;return s<0?0:s+t}function Rr(e){Ee&&e!==ls(location.href)&&(history.replaceState({scrollPosition:window.scrollY},document.title),history.pushState(null,"",e))}function ls(e){const t=new URL(e,qo);return t.pathname=t.pathname.replace(/(^|\/)index(\.html)?$/,"$1"),lt.value.cleanUrls?t.pathname=t.pathname.replace(/\.html$/,""):!t.pathname.endsWith("/")&&!t.pathname.endsWith(".html")&&(t.pathname+=".html"),t.pathname+t.search+t.hash}const Or=()=>cn.forEach(e=>e()),Wa=xs({name:"VitePressContent",props:{as:{type:[Object,String],default:"div"}},setup(e){const t=zo(),{site:n}=la();return()=>os(e.as,n.value.contentProps??{style:{position:"relative"}},[t.component?os(t.component,{onVnodeMounted:Or,onVnodeUpdated:Or}):"404 Page Not Found"])}}),Va=xs({setup(e,{slots:t}){const n=fe(!1);return St(()=>{n.value=!0}),()=>n.value&&t.default?t.default():null}});function qa(){Ee&&window.addEventListener("click",e=>{var n;const t=e.target;if(t.matches(".vp-code-group input")){const s=(n=t.parentElement)==null?void 0:n.parentElement;if(!s)return;const r=Array.from(s.querySelectorAll("input")).indexOf(t);if(r<0)return;const o=s.querySelector(".blocks");if(!o)return;const i=Array.from(o.children).find(u=>u.classList.contains("active"));if(!i)return;const l=o.children[r];if(!l||i===l)return;i.classList.remove("active"),l.classList.add("active");const c=s==null?void 0:s.querySelector(`label[for="${t.id}"]`);c==null||c.scrollIntoView({block:"nearest"})}})}function za(){if(Ee){const e=new WeakMap;window.addEventListener("click",t=>{var s;const n=t.target;if(n.matches('div[class*="language-"] > button.copy')){const r=n.parentElement,o=(s=n.nextElementSibling)==null?void 0:s.nextElementSibling;if(!r||!o)return;const i=/language-(shellscript|shell|bash|sh|zsh)/.test(r.className);let l="";o.querySelectorAll("span.line:not(.diff.remove)").forEach(c=>l+=(c.textContent||"")+` +`),l=l.slice(0,-1),i&&(l=l.replace(/^ *(\$|>) /gm,"").trim()),ha(l).then(()=>{n.classList.add("copied"),clearTimeout(e.get(n));const c=setTimeout(()=>{n.classList.remove("copied"),n.blur(),e.delete(n)},2e3);e.set(n,c)})}})}}async function ha(e){try{return navigator.clipboard.writeText(e)}catch{const t=document.createElement("textarea"),n=document.activeElement;t.value=e,t.setAttribute("readonly",""),t.style.contain="strict",t.style.position="absolute",t.style.left="-9999px",t.style.fontSize="12pt";const s=document.getSelection(),r=s?s.rangeCount>0&&s.getRangeAt(0):null;document.body.appendChild(t),t.select(),t.selectionStart=0,t.selectionEnd=e.length,document.execCommand("copy"),document.body.removeChild(t),r&&(s.removeAllRanges(),s.addRange(r)),n&&n.focus()}}function Ya(e,t){let n=[],s=!0;const r=o=>{if(s){s=!1;return}const i=o.map(Pr);n.forEach((l,c)=>{const u=i.findIndex(d=>d==null?void 0:d.isEqualNode(l??null));u!==-1?delete i[u]:(l==null||l.remove(),delete n[c])}),i.forEach(l=>l&&document.head.appendChild(l)),n=[...n,...i].filter(Boolean)};so(()=>{const o=e.data,i=t.value,l=o&&o.description,c=o&&o.frontmatter.head||[],u=Wo(i,o);u!==document.title&&(document.title=u);const d=l||i.description;let h=document.querySelector("meta[name=description]");h?h.getAttribute("content")!==d&&h.setAttribute("content",d):Pr(["meta",{name:"description",content:d}]),r(Vo(i.head,ga(c)))})}function Pr([e,t,n]){const s=document.createElement(e);for(const r in t)s.setAttribute(r,t[r]);return n&&(s.innerHTML=n),e==="script"&&!t.async&&(s.async=!1),s}function pa(e){return e[0]==="meta"&&e[1]&&e[1].name==="description"}function ga(e){return e.filter(t=>!pa(t))}const zn=new Set,Yo=()=>document.createElement("link"),ma=e=>{const t=Yo();t.rel="prefetch",t.href=e,document.head.appendChild(t)},ya=e=>{const t=new XMLHttpRequest;t.open("GET",e,t.withCredentials=!0),t.send()};let rn;const _a=Ee&&(rn=Yo())&&rn.relList&&rn.relList.supports&&rn.relList.supports("prefetch")?ma:ya;function Ja(){if(!Ee||!window.IntersectionObserver)return;let e;if((e=navigator.connection)&&(e.saveData||/2g/.test(e.effectiveType)))return;const t=window.requestIdleCallback||setTimeout;let n=null;const s=()=>{n&&n.disconnect(),n=new IntersectionObserver(o=>{o.forEach(i=>{if(i.isIntersecting){const l=i.target;n.unobserve(l);const{pathname:c}=l;if(!zn.has(c)){zn.add(c);const u=aa(c);u&&_a(u)}}})}),t(()=>{document.querySelectorAll("#app a").forEach(o=>{const{hostname:i,pathname:l}=new URL(o.href instanceof SVGAnimatedString?o.href.animVal:o.href,o.baseURI),c=l.match(/\.\w+$/);c&&c[0]!==".html"||o.target!=="_blank"&&i===location.hostname&&(l!==location.pathname?n.observe(o):zn.add(l))})})};St(s);const r=zo();Ye(()=>r.path,s),In(()=>{n&&n.disconnect()})}export{La as $,Ca as A,hl as B,xa as C,Aa as D,Jr as E,me as F,Ua as G,ne as H,Ta as I,ko as J,zo as K,kl as L,bt as M,ds as N,An as O,Ba as P,Fa as Q,Tn as R,ja as S,Io as T,Ui as U,Ea as V,$a as W,Da as X,Sl as Y,Ra as Z,Ha as _,Ro as a,Ma as a0,Oa as a1,da as a2,Ya as a3,ua as a4,ka as a5,ia as a6,Wa as a7,Va as a8,lt as a9,Na as aa,Ka as ab,aa as ac,Ja as ad,za as ae,qa as af,os as ag,To as b,Pa as c,xs as d,Ia as e,Tr as f,ce as g,fe as h,ea as i,St as j,So as k,Cs as l,wa as m,hs as n,Eo as o,va as p,Gc as q,Sa as r,Ee as s,ba as t,la as u,kc as v,Zi as w,Ye as x,so as y,In as z}; diff --git a/assets/chunks/katex.cb08556c.js b/assets/chunks/katex.cb08556c.js new file mode 100644 index 000000000..5768b2c3a --- /dev/null +++ b/assets/chunks/katex.cb08556c.js @@ -0,0 +1 @@ +const s="/assets/katex.7c72a6fb.png";export{s as _}; diff --git a/assets/chunks/readme-3.368c86c7.js b/assets/chunks/readme-3.368c86c7.js new file mode 100644 index 000000000..e9ceacd3b --- /dev/null +++ b/assets/chunks/readme-3.368c86c7.js @@ -0,0 +1 @@ +const s="/assets/logo.5707582f.png",a="/assets/readme-1.28a161f2.png",t="/assets/readme-2.36e8fa3b.png",e="/assets/readme-3.45bb1d93.jpg";export{s as _,a,t as b,e as c}; diff --git a/assets/chunks/theme.7669522f.js b/assets/chunks/theme.7669522f.js new file mode 100644 index 000000000..4960e70ca --- /dev/null +++ b/assets/chunks/theme.7669522f.js @@ -0,0 +1 @@ +import{d as g,o as a,c as i,r as u,n as T,a as x,t as S,_ as m,b as k,w as v,e as f,T as ue,u as He,i as ze,f as de,g as $,h as I,j as G,k as c,l,p as H,m as z,q as O,s as R,v as le,x as U,y as te,z as se,A as Pe,B as Ee,C as j,F as N,D as A,E as _e,G as Y,H as h,I as F,J as Ve,K as ne,L as Z,M as oe,N as De,O as Fe,P as we,Q as Oe,R as Ge,S as Ue,U as je,V as qe,W as Ke,X as Le,Y as Se,Z as Re,$ as We,a0 as Ye,a1 as Je}from"./framework.7d2df8c6.js";const Xe=g({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(s){return(e,t)=>(a(),i("span",{class:T(["VPBadge",e.type])},[u(e.$slots,"default",{},()=>[x(S(e.text),1)],!0)],2))}});const Ze=m(Xe,[["__scopeId","data-v-ea5b2908"]]),Qe={key:0,class:"VPBackdrop"},et=g({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(s){return(e,t)=>(a(),k(ue,{name:"fade"},{default:v(()=>[e.show?(a(),i("div",Qe)):f("",!0)]),_:1}))}});const tt=m(et,[["__scopeId","data-v-54a304ca"]]),y=He;function st(s,e){let t,n=!1;return()=>{t&&clearTimeout(t),n?t=setTimeout(s,e):(s(),(n=!0)&&setTimeout(()=>n=!1,e))}}function ie(s){return/^\//.test(s)?s:`/${s}`}function J(s){const{pathname:e,search:t,hash:n,protocol:o}=new URL(s,"http://a.com");if(ze(s)||s.startsWith("#")||!o.startsWith("http")||/\.(?!html|md)\w+($|\?)/i.test(s))return s;const{site:r}=y(),d=e.endsWith("/")||e.endsWith(".html")?s:s.replace(/(?:(^\.+)\/)?.*$/,`$1${e.replace(/(\.md)?$/,r.value.cleanUrls?"":".html")}${t}${n}`);return de(d)}function X({removeCurrent:s=!0,correspondingLink:e=!1}={}){const{site:t,localeIndex:n,page:o,theme:r}=y(),d=$(()=>{var _,b;return{label:(_=t.value.locales[n.value])==null?void 0:_.label,link:((b=t.value.locales[n.value])==null?void 0:b.link)||(n.value==="root"?"/":`/${n.value}/`)}});return{localeLinks:$(()=>Object.entries(t.value.locales).flatMap(([_,b])=>s&&d.value.label===b.label?[]:{text:b.label,link:nt(b.link||(_==="root"?"/":`/${_}/`),r.value.i18nRouting!==!1&&e,o.value.relativePath.slice(d.value.link.length-1),!t.value.cleanUrls)})),currentLang:d}}function nt(s,e,t,n){return e?s.replace(/\/$/,"")+ie(t.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,n?".html":"")):s}const ot=s=>(H("data-v-b9c0c15a"),s=s(),z(),s),at={class:"NotFound"},rt={class:"code"},lt={class:"title"},it=ot(()=>c("div",{class:"divider"},null,-1)),ct={class:"quote"},ut={class:"action"},dt=["href","aria-label"],_t=g({__name:"NotFound",setup(s){const{site:e,theme:t}=y(),{localeLinks:n}=X({removeCurrent:!1}),o=I("/");return G(()=>{var d;const r=window.location.pathname.replace(e.value.base,"").replace(/(^.*?\/).*$/,"/$1");n.value.length&&(o.value=((d=n.value.find(({link:p})=>p.startsWith(r)))==null?void 0:d.link)||n.value[0].link)}),(r,d)=>{var p,_,b,P,M;return a(),i("div",at,[c("p",rt,S(((p=l(t).notFound)==null?void 0:p.code)??"404"),1),c("h1",lt,S(((_=l(t).notFound)==null?void 0:_.title)??"PAGE NOT FOUND"),1),it,c("blockquote",ct,S(((b=l(t).notFound)==null?void 0:b.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),c("div",ut,[c("a",{class:"link",href:l(de)(o.value),"aria-label":((P=l(t).notFound)==null?void 0:P.linkLabel)??"go to home"},S(((M=l(t).notFound)==null?void 0:M.linkText)??"Take me home"),9,dt)])])}}});const vt=m(_t,[["__scopeId","data-v-b9c0c15a"]]);function Me(s,e){if(Array.isArray(s))return Q(s);if(s==null)return[];e=ie(e);const t=Object.keys(s).sort((o,r)=>r.split("/").length-o.split("/").length).find(o=>e.startsWith(ie(o))),n=t?s[t]:[];return Array.isArray(n)?Q(n):Q(n.items,n.base)}function pt(s){const e=[];let t=0;for(const n in s){const o=s[n];if(o.items){t=e.push(o);continue}e[t]||e.push({items:[]}),e[t].items.push(o)}return e}function ht(s){const e=[];function t(n){for(const o of n)o.text&&o.link&&e.push({text:o.text,link:o.link,docFooterText:o.docFooterText}),o.items&&t(o.items)}return t(s),e}function ce(s,e){return Array.isArray(e)?e.some(t=>ce(s,t)):O(s,e.link)?!0:e.items?ce(s,e.items):!1}function Q(s,e){return[...s].map(t=>{const n={...t},o=n.base||e;return o&&n.link&&(n.link=o+n.link),n.items&&(n.items=Q(n.items,o)),n})}function E(){const{frontmatter:s,page:e,theme:t}=y(),n=le("(min-width: 960px)"),o=I(!1),r=$(()=>{const B=t.value.sidebar,L=e.value.relativePath;return B?Me(B,L):[]}),d=I(r.value);U(r,(B,L)=>{JSON.stringify(B)!==JSON.stringify(L)&&(d.value=r.value)});const p=$(()=>s.value.sidebar!==!1&&d.value.length>0&&s.value.layout!=="home"),_=$(()=>b?s.value.aside==null?t.value.aside==="left":s.value.aside==="left":!1),b=$(()=>s.value.layout==="home"?!1:s.value.aside!=null?!!s.value.aside:t.value.aside!==!1),P=$(()=>p.value&&n.value),M=$(()=>p.value?pt(d.value):[]);function C(){o.value=!0}function w(){o.value=!1}function V(){o.value?w():C()}return{isOpen:o,sidebar:d,sidebarGroups:M,hasSidebar:p,hasAside:b,leftAside:_,isSidebarEnabled:P,open:C,close:w,toggle:V}}function ft(s,e){let t;te(()=>{t=s.value?document.activeElement:void 0}),G(()=>{window.addEventListener("keyup",n)}),se(()=>{window.removeEventListener("keyup",n)});function n(o){o.key==="Escape"&&s.value&&(e(),t==null||t.focus())}}const Ce=I(R?location.hash:"");R&&window.addEventListener("hashchange",()=>{Ce.value=location.hash});function mt(s){const{page:e}=y(),t=I(!1),n=$(()=>s.value.collapsed!=null),o=$(()=>!!s.value.link),r=I(!1),d=()=>{r.value=O(e.value.relativePath,s.value.link)};U([e,s,Ce],d),G(d);const p=$(()=>r.value?!0:s.value.items?ce(e.value.relativePath,s.value.items):!1),_=$(()=>!!(s.value.items&&s.value.items.length));te(()=>{t.value=!!(n.value&&s.value.collapsed)}),Pe(()=>{(r.value||p.value)&&(t.value=!1)});function b(){n.value&&(t.value=!t.value)}return{collapsed:t,collapsible:n,isLink:o,isActiveLink:r,hasActiveLink:p,hasChildren:_,toggle:b}}function gt(){const{hasSidebar:s}=E(),e=le("(min-width: 960px)"),t=le("(min-width: 1280px)");return{isAsideEnabled:$(()=>!t.value&&!e.value?!1:s.value?t.value:e.value)}}const bt=71;function ve(s){return typeof s.outline=="object"&&!Array.isArray(s.outline)&&s.outline.label||s.outlineTitle||"On this page"}function pe(s){const e=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(t=>t.id&&t.hasChildNodes()).map(t=>{const n=Number(t.tagName[1]);return{title:kt(t),link:"#"+t.id,level:n}});return $t(e,s)}function kt(s){let e="";for(const t of s.childNodes)if(t.nodeType===1){if(t.classList.contains("VPBadge")||t.classList.contains("header-anchor"))continue;e+=t.textContent}else t.nodeType===3&&(e+=t.textContent);return e.trim()}function $t(s,e){if(e===!1)return[];const t=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[n,o]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;s=s.filter(d=>d.level>=n&&d.level<=o);const r=[];e:for(let d=0;d =0;_--){const b=s[_];if(b.level {requestAnimationFrame(r),window.addEventListener("scroll",n)}),Ee(()=>{d(location.hash)}),se(()=>{window.removeEventListener("scroll",n)});function r(){if(!t.value)return;const p=[].slice.call(s.value.querySelectorAll(".outline-link")),_=[].slice.call(document.querySelectorAll(".content .header-anchor")).filter(w=>p.some(V=>V.hash===w.hash&&w.offsetParent!==null)),b=window.scrollY,P=window.innerHeight,M=document.body.offsetHeight,C=Math.abs(b+P-M)<1;if(_.length&&C){d(_[_.length-1].hash);return}for(let w=0;w<_.length;w++){const V=_[w],B=_[w+1],[L,q]=Pt(w,V,B);if(L){d(q);return}}}function d(p){o&&o.classList.remove("active"),p==null?o=null:o=s.value.querySelector(`a[href="${decodeURIComponent(p)}"]`);const _=o;_?(_.classList.add("active"),e.value.style.top=_.offsetTop+33+"px",e.value.style.opacity="1"):(e.value.style.top="33px",e.value.style.opacity="0")}}function $e(s){return s.parentElement.offsetTop-bt}function Pt(s,e,t){const n=window.scrollY;return s===0&&n===0?[!0,null]:n<$e(e)?[!1,null]:!t||n<$e(t)?[!0,e.hash]:[!1,null]}const Vt=["href","title"],wt=g({__name:"VPDocOutlineItem",props:{headers:{},root:{type:Boolean}},setup(s){function e({target:t}){const n=t.href.split("#")[1],o=document.getElementById(decodeURIComponent(n));o==null||o.focus({preventScroll:!0})}return(t,n)=>{const o=j("VPDocOutlineItem",!0);return a(),i("ul",{class:T(t.root?"root":"nested")},[(a(!0),i(N,null,A(t.headers,({children:r,link:d,title:p})=>(a(),i("li",null,[c("a",{class:"outline-link",href:d,onClick:e,title:p},S(p),9,Vt),r!=null&&r.length?(a(),k(o,{key:0,headers:r},null,8,["headers"])):f("",!0)]))),256))],2)}}});const he=m(wt,[["__scopeId","data-v-463da30f"]]),Lt=s=>(H("data-v-3a6c4994"),s=s(),z(),s),St={class:"content"},Mt={class:"outline-title",role:"heading","aria-level":"2"},Ct={"aria-labelledby":"doc-outline-aria-label"},It=Lt(()=>c("span",{class:"visually-hidden",id:"doc-outline-aria-label"}," Table of Contents for current page ",-1)),Nt=g({__name:"VPDocAsideOutline",setup(s){const{frontmatter:e,theme:t}=y(),n=_e([]);Y(()=>{n.value=pe(e.value.outline??t.value.outline)});const o=I(),r=I();return yt(o,r),(d,p)=>(a(),i("div",{class:T(["VPDocAsideOutline",{"has-outline":n.value.length>0}]),ref_key:"container",ref:o,role:"navigation"},[c("div",St,[c("div",{class:"outline-marker",ref_key:"marker",ref:r},null,512),c("div",Mt,S(l(ve)(l(t))),1),c("nav",Ct,[It,h(he,{headers:n.value,root:!0},null,8,["headers"])])])],2))}});const Tt=m(Nt,[["__scopeId","data-v-3a6c4994"]]),Bt={class:"VPDocAsideCarbonAds"},At=g({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(s){const e=()=>null;return(t,n)=>(a(),i("div",Bt,[h(l(e),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),xt=s=>(H("data-v-cb998dce"),s=s(),z(),s),Ht={class:"VPDocAside"},zt=xt(()=>c("div",{class:"spacer"},null,-1)),Et=g({__name:"VPDocAside",setup(s){const{theme:e}=y();return(t,n)=>(a(),i("div",Ht,[u(t.$slots,"aside-top",{},void 0,!0),u(t.$slots,"aside-outline-before",{},void 0,!0),h(Tt),u(t.$slots,"aside-outline-after",{},void 0,!0),zt,u(t.$slots,"aside-ads-before",{},void 0,!0),l(e).carbonAds?(a(),k(At,{key:0,"carbon-ads":l(e).carbonAds},null,8,["carbon-ads"])):f("",!0),u(t.$slots,"aside-ads-after",{},void 0,!0),u(t.$slots,"aside-bottom",{},void 0,!0)]))}});const Dt=m(Et,[["__scopeId","data-v-cb998dce"]]);function Ft(){const{theme:s,page:e}=y();return $(()=>{const{text:t="Edit this page",pattern:n=""}=s.value.editLink||{};let o;return typeof n=="function"?o=n(e.value):o=n.replace(/:path/g,e.value.filePath),{url:o,text:t}})}function Ot(){const{page:s,theme:e,frontmatter:t}=y();return $(()=>{var _,b,P,M,C,w,V,B;const n=Me(e.value.sidebar,s.value.relativePath),o=ht(n),r=o.findIndex(L=>O(s.value.relativePath,L.link)),d=((_=e.value.docFooter)==null?void 0:_.prev)===!1&&!t.value.prev||t.value.prev===!1,p=((b=e.value.docFooter)==null?void 0:b.next)===!1&&!t.value.next||t.value.next===!1;return{prev:d?void 0:{text:(typeof t.value.prev=="string"?t.value.prev:typeof t.value.prev=="object"?t.value.prev.text:void 0)??((P=o[r-1])==null?void 0:P.docFooterText)??((M=o[r-1])==null?void 0:M.text),link:(typeof t.value.prev=="object"?t.value.prev.link:void 0)??((C=o[r-1])==null?void 0:C.link)},next:p?void 0:{text:(typeof t.value.next=="string"?t.value.next:typeof t.value.next=="object"?t.value.next.text:void 0)??((w=o[r+1])==null?void 0:w.docFooterText)??((V=o[r+1])==null?void 0:V.text),link:(typeof t.value.next=="object"?t.value.next.link:void 0)??((B=o[r+1])==null?void 0:B.link)}}})}const Gt={},Ut={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},jt=c("path",{d:"M18,23H4c-1.7,0-3-1.3-3-3V6c0-1.7,1.3-3,3-3h7c0.6,0,1,0.4,1,1s-0.4,1-1,1H4C3.4,5,3,5.4,3,6v14c0,0.6,0.4,1,1,1h14c0.6,0,1-0.4,1-1v-7c0-0.6,0.4-1,1-1s1,0.4,1,1v7C21,21.7,19.7,23,18,23z"},null,-1),qt=c("path",{d:"M8,17c-0.3,0-0.5-0.1-0.7-0.3C7,16.5,6.9,16.1,7,15.8l1-4c0-0.2,0.1-0.3,0.3-0.5l9.5-9.5c1.2-1.2,3.2-1.2,4.4,0c1.2,1.2,1.2,3.2,0,4.4l-9.5,9.5c-0.1,0.1-0.3,0.2-0.5,0.3l-4,1C8.2,17,8.1,17,8,17zM9.9,12.5l-0.5,2.1l2.1-0.5l9.3-9.3c0.4-0.4,0.4-1.1,0-1.6c-0.4-0.4-1.2-0.4-1.6,0l0,0L9.9,12.5z M18.5,2.5L18.5,2.5L18.5,2.5z"},null,-1),Kt=[jt,qt];function Rt(s,e){return a(),i("svg",Ut,Kt)}const Wt=m(Gt,[["render",Rt]]),D=g({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(s){const e=s,t=$(()=>e.tag??(e.href?"a":"span")),n=$(()=>e.href&&Ve.test(e.href));return(o,r)=>(a(),k(F(t.value),{class:T(["VPLink",{link:o.href,"vp-external-link-icon":n.value,"no-icon":o.noIcon}]),href:o.href?l(J)(o.href):void 0,target:o.target??(n.value?"_blank":void 0),rel:o.rel??(n.value?"noreferrer":void 0)},{default:v(()=>[u(o.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),Yt={class:"VPLastUpdated"},Jt=["datetime"],Xt=g({__name:"VPDocFooterLastUpdated",setup(s){const{theme:e,page:t,frontmatter:n,lang:o}=y(),r=$(()=>new Date(n.value.lastUpdated??t.value.lastUpdated)),d=$(()=>r.value.toISOString()),p=I("");return G(()=>{te(()=>{var _,b,P;p.value=new Intl.DateTimeFormat((b=(_=e.value.lastUpdated)==null?void 0:_.formatOptions)!=null&&b.forceLocale?o.value:void 0,((P=e.value.lastUpdated)==null?void 0:P.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(r.value)})}),(_,b)=>{var P;return a(),i("p",Yt,[x(S(((P=l(e).lastUpdated)==null?void 0:P.text)||l(e).lastUpdatedText||"Last updated")+": ",1),c("time",{datetime:d.value},S(p.value),9,Jt)])}}});const Zt=m(Xt,[["__scopeId","data-v-19a7ae4e"]]),Qt={key:0,class:"VPDocFooter"},es={key:0,class:"edit-info"},ts={key:0,class:"edit-link"},ss={key:1,class:"last-updated"},ns={key:1,class:"prev-next"},os={class:"pager"},as=["href"],rs=["innerHTML"],ls=["innerHTML"],is={class:"pager"},cs=["href"],us=["innerHTML"],ds=["innerHTML"],_s=g({__name:"VPDocFooter",setup(s){const{theme:e,page:t,frontmatter:n}=y(),o=Ft(),r=Ot(),d=$(()=>e.value.editLink&&n.value.editLink!==!1),p=$(()=>t.value.lastUpdated&&n.value.lastUpdated!==!1),_=$(()=>d.value||p.value||r.value.prev||r.value.next);return(b,P)=>{var M,C,w,V,B,L;return _.value?(a(),i("footer",Qt,[u(b.$slots,"doc-footer-before",{},void 0,!0),d.value||p.value?(a(),i("div",es,[d.value?(a(),i("div",ts,[h(D,{class:"edit-link-button",href:l(o).url,"no-icon":!0},{default:v(()=>[h(Wt,{class:"edit-link-icon","aria-label":"edit icon"}),x(" "+S(l(o).text),1)]),_:1},8,["href"])])):f("",!0),p.value?(a(),i("div",ss,[h(Zt)])):f("",!0)])):f("",!0),(M=l(r).prev)!=null&&M.link||(C=l(r).next)!=null&&C.link?(a(),i("nav",ns,[c("div",os,[(w=l(r).prev)!=null&&w.link?(a(),i("a",{key:0,class:"pager-link prev",href:l(J)(l(r).prev.link)},[c("span",{class:"desc",innerHTML:((V=l(e).docFooter)==null?void 0:V.prev)||"Previous page"},null,8,rs),c("span",{class:"title",innerHTML:l(r).prev.text},null,8,ls)],8,as)):f("",!0)]),c("div",is,[(B=l(r).next)!=null&&B.link?(a(),i("a",{key:0,class:"pager-link next",href:l(J)(l(r).next.link)},[c("span",{class:"desc",innerHTML:((L=l(e).docFooter)==null?void 0:L.next)||"Next page"},null,8,us),c("span",{class:"title",innerHTML:l(r).next.text},null,8,ds)],8,cs)):f("",!0)])])):f("",!0)])):f("",!0)}}});const vs=m(_s,[["__scopeId","data-v-a2d931e4"]]),ps={},hs={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},fs=c("path",{d:"M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"},null,-1),ms=[fs];function gs(s,e){return a(),i("svg",hs,ms)}const fe=m(ps,[["render",gs]]),bs={key:0,class:"VPDocOutlineDropdown"},ks={key:0,class:"items"},$s=g({__name:"VPDocOutlineDropdown",setup(s){const{frontmatter:e,theme:t}=y(),n=I(!1);Y(()=>{n.value=!1});const o=_e([]);return Y(()=>{o.value=pe(e.value.outline??t.value.outline)}),(r,d)=>o.value.length>0?(a(),i("div",bs,[c("button",{onClick:d[0]||(d[0]=p=>n.value=!n.value),class:T({open:n.value})},[x(S(l(ve)(l(t)))+" ",1),h(fe,{class:"icon"})],2),n.value?(a(),i("div",ks,[h(he,{headers:o.value},null,8,["headers"])])):f("",!0)])):f("",!0)}});const ys=m($s,[["__scopeId","data-v-95bb0785"]]),Ps=s=>(H("data-v-a3c25e27"),s=s(),z(),s),Vs={class:"container"},ws=Ps(()=>c("div",{class:"aside-curtain"},null,-1)),Ls={class:"aside-container"},Ss={class:"aside-content"},Ms={class:"content"},Cs={class:"content-container"},Is={class:"main"},Ns=g({__name:"VPDoc",setup(s){const{theme:e}=y(),t=ne(),{hasSidebar:n,hasAside:o,leftAside:r}=E(),d=$(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(p,_)=>{const b=j("Content");return a(),i("div",{class:T(["VPDoc",{"has-sidebar":l(n),"has-aside":l(o)}])},[u(p.$slots,"doc-top",{},void 0,!0),c("div",Vs,[l(o)?(a(),i("div",{key:0,class:T(["aside",{"left-aside":l(r)}])},[ws,c("div",Ls,[c("div",Ss,[h(Dt,null,{"aside-top":v(()=>[u(p.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":v(()=>[u(p.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":v(()=>[u(p.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":v(()=>[u(p.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":v(()=>[u(p.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":v(()=>[u(p.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):f("",!0),c("div",Ms,[c("div",Cs,[u(p.$slots,"doc-before",{},void 0,!0),h(ys),c("main",Is,[h(b,{class:T(["vp-doc",[d.value,l(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),h(vs,null,{"doc-footer-before":v(()=>[u(p.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),u(p.$slots,"doc-after",{},void 0,!0)])])]),u(p.$slots,"doc-bottom",{},void 0,!0)],2)}}});const Ts=m(Ns,[["__scopeId","data-v-a3c25e27"]]),Bs=g({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{}},setup(s){const e=s,t=$(()=>e.href&&Ve.test(e.href)),n=$(()=>e.tag||e.href?"a":"button");return(o,r)=>(a(),k(F(n.value),{class:T(["VPButton",[o.size,o.theme]]),href:o.href?l(J)(o.href):void 0,target:t.value?"_blank":void 0,rel:t.value?"noreferrer":void 0},{default:v(()=>[x(S(o.text),1)]),_:1},8,["class","href","target","rel"]))}});const As=m(Bs,[["__scopeId","data-v-1e76fe75"]]),xs=["src","alt"],Hs=g({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(s){return(e,t)=>{const n=j("VPImage",!0);return e.image?(a(),i(N,{key:0},[typeof e.image=="string"||"src"in e.image?(a(),i("img",Z({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:l(de)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,xs)):(a(),i(N,{key:1},[h(n,Z({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),h(n,Z({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):f("",!0)}}});const ee=m(Hs,[["__scopeId","data-v-ab19afbb"]]),zs=s=>(H("data-v-5a3e9999"),s=s(),z(),s),Es={class:"container"},Ds={class:"main"},Fs={key:0,class:"name"},Os=["innerHTML"],Gs=["innerHTML"],Us=["innerHTML"],js={key:0,class:"actions"},qs={key:0,class:"image"},Ks={class:"image-container"},Rs=zs(()=>c("div",{class:"image-bg"},null,-1)),Ws=g({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(s){const e=oe("hero-image-slot-exists");return(t,n)=>(a(),i("div",{class:T(["VPHero",{"has-image":t.image||l(e)}])},[c("div",Es,[c("div",Ds,[u(t.$slots,"home-hero-info",{},()=>[t.name?(a(),i("h1",Fs,[c("span",{innerHTML:t.name,class:"clip"},null,8,Os)])):f("",!0),t.text?(a(),i("p",{key:1,innerHTML:t.text,class:"text"},null,8,Gs)):f("",!0),t.tagline?(a(),i("p",{key:2,innerHTML:t.tagline,class:"tagline"},null,8,Us)):f("",!0)],!0),t.actions?(a(),i("div",js,[(a(!0),i(N,null,A(t.actions,o=>(a(),i("div",{key:o.link,class:"action"},[h(As,{tag:"a",size:"medium",theme:o.theme,text:o.text,href:o.link},null,8,["theme","text","href"])]))),128))])):f("",!0)]),t.image||l(e)?(a(),i("div",qs,[c("div",Ks,[Rs,u(t.$slots,"home-hero-image",{},()=>[t.image?(a(),k(ee,{key:0,class:"image-src",image:t.image},null,8,["image"])):f("",!0)],!0)])])):f("",!0)])],2))}});const Ys=m(Ws,[["__scopeId","data-v-5a3e9999"]]),Js=g({__name:"VPHomeHero",setup(s){const{frontmatter:e}=y();return(t,n)=>l(e).hero?(a(),k(Ys,{key:0,class:"VPHomeHero",name:l(e).hero.name,text:l(e).hero.text,tagline:l(e).hero.tagline,image:l(e).hero.image,actions:l(e).hero.actions},{"home-hero-info":v(()=>[u(t.$slots,"home-hero-info")]),"home-hero-image":v(()=>[u(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):f("",!0)}}),Xs={},Zs={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},Qs=c("path",{d:"M19.9,12.4c0.1-0.2,0.1-0.5,0-0.8c-0.1-0.1-0.1-0.2-0.2-0.3l-7-7c-0.4-0.4-1-0.4-1.4,0s-0.4,1,0,1.4l5.3,5.3H5c-0.6,0-1,0.4-1,1s0.4,1,1,1h11.6l-5.3,5.3c-0.4,0.4-0.4,1,0,1.4c0.2,0.2,0.5,0.3,0.7,0.3s0.5-0.1,0.7-0.3l7-7C19.8,12.6,19.9,12.5,19.9,12.4z"},null,-1),en=[Qs];function tn(s,e){return a(),i("svg",Zs,en)}const sn=m(Xs,[["render",tn]]),nn={class:"box"},on={key:0,class:"icon"},an=["innerHTML"],rn=["innerHTML"],ln=["innerHTML"],cn={key:4,class:"link-text"},un={class:"link-text-value"},dn=g({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(s){return(e,t)=>(a(),k(D,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:v(()=>[c("article",nn,[typeof e.icon=="object"&&e.icon.wrap?(a(),i("div",on,[h(ee,{image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])])):typeof e.icon=="object"?(a(),k(ee,{key:1,image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])):e.icon?(a(),i("div",{key:2,class:"icon",innerHTML:e.icon},null,8,an)):f("",!0),c("h2",{class:"title",innerHTML:e.title},null,8,rn),e.details?(a(),i("p",{key:3,class:"details",innerHTML:e.details},null,8,ln)):f("",!0),e.linkText?(a(),i("div",cn,[c("p",un,[x(S(e.linkText)+" ",1),h(sn,{class:"link-text-icon"})])])):f("",!0)])]),_:1},8,["href","rel","target","tag"]))}});const _n=m(dn,[["__scopeId","data-v-ee984185"]]),vn={key:0,class:"VPFeatures"},pn={class:"container"},hn={class:"items"},fn=g({__name:"VPFeatures",props:{features:{}},setup(s){const e=s,t=$(()=>{const n=e.features.length;if(n){if(n===2)return"grid-2";if(n===3)return"grid-3";if(n%3===0)return"grid-6";if(n>3)return"grid-4"}else return});return(n,o)=>n.features?(a(),i("div",vn,[c("div",pn,[c("div",hn,[(a(!0),i(N,null,A(n.features,r=>(a(),i("div",{key:r.title,class:T(["item",[t.value]])},[h(_n,{icon:r.icon,title:r.title,details:r.details,link:r.link,"link-text":r.linkText,rel:r.rel,target:r.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):f("",!0)}});const mn=m(fn,[["__scopeId","data-v-b1eea84a"]]),gn=g({__name:"VPHomeFeatures",setup(s){const{frontmatter:e}=y();return(t,n)=>l(e).features?(a(),k(mn,{key:0,class:"VPHomeFeatures",features:l(e).features},null,8,["features"])):f("",!0)}}),bn={class:"VPHome"},kn=g({__name:"VPHome",setup(s){return(e,t)=>{const n=j("Content");return a(),i("div",bn,[u(e.$slots,"home-hero-before",{},void 0,!0),h(Js,null,{"home-hero-info":v(()=>[u(e.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-image":v(()=>[u(e.$slots,"home-hero-image",{},void 0,!0)]),_:3}),u(e.$slots,"home-hero-after",{},void 0,!0),u(e.$slots,"home-features-before",{},void 0,!0),h(gn),u(e.$slots,"home-features-after",{},void 0,!0),h(n)])}}});const $n=m(kn,[["__scopeId","data-v-20eabd3a"]]),yn={},Pn={class:"VPPage"};function Vn(s,e){const t=j("Content");return a(),i("div",Pn,[u(s.$slots,"page-top"),h(t),u(s.$slots,"page-bottom")])}const wn=m(yn,[["render",Vn]]),Ln=g({__name:"VPContent",setup(s){const{page:e,frontmatter:t}=y(),{hasSidebar:n}=E();return(o,r)=>(a(),i("div",{class:T(["VPContent",{"has-sidebar":l(n),"is-home":l(t).layout==="home"}]),id:"VPContent"},[l(e).isNotFound?u(o.$slots,"not-found",{key:0},()=>[h(vt)],!0):l(t).layout==="page"?(a(),k(wn,{key:1},{"page-top":v(()=>[u(o.$slots,"page-top",{},void 0,!0)]),"page-bottom":v(()=>[u(o.$slots,"page-bottom",{},void 0,!0)]),_:3})):l(t).layout==="home"?(a(),k($n,{key:2},{"home-hero-before":v(()=>[u(o.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info":v(()=>[u(o.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-image":v(()=>[u(o.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":v(()=>[u(o.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":v(()=>[u(o.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":v(()=>[u(o.$slots,"home-features-after",{},void 0,!0)]),_:3})):l(t).layout&&l(t).layout!=="doc"?(a(),k(F(l(t).layout),{key:3})):(a(),k(Ts,{key:4},{"doc-top":v(()=>[u(o.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":v(()=>[u(o.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":v(()=>[u(o.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":v(()=>[u(o.$slots,"doc-before",{},void 0,!0)]),"doc-after":v(()=>[u(o.$slots,"doc-after",{},void 0,!0)]),"aside-top":v(()=>[u(o.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":v(()=>[u(o.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":v(()=>[u(o.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":v(()=>[u(o.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":v(()=>[u(o.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":v(()=>[u(o.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}});const Sn=m(Ln,[["__scopeId","data-v-3cf691b6"]]),Mn={class:"container"},Cn=["innerHTML"],In=["innerHTML"],Nn=g({__name:"VPFooter",setup(s){const{theme:e,frontmatter:t}=y(),{hasSidebar:n}=E();return(o,r)=>l(e).footer&&l(t).footer!==!1?(a(),i("footer",{key:0,class:T(["VPFooter",{"has-sidebar":l(n)}])},[c("div",Mn,[l(e).footer.message?(a(),i("p",{key:0,class:"message",innerHTML:l(e).footer.message},null,8,Cn)):f("",!0),l(e).footer.copyright?(a(),i("p",{key:1,class:"copyright",innerHTML:l(e).footer.copyright},null,8,In)):f("",!0)])],2)):f("",!0)}});const Tn=m(Nn,[["__scopeId","data-v-e4279f1c"]]),Bn={class:"header"},An={class:"outline"},xn=g({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(s){const e=s,{theme:t}=y(),n=I(!1),o=I(0),r=I();Y(()=>{n.value=!1});function d(){n.value=!n.value,o.value=window.innerHeight+Math.min(window.scrollY-e.navHeight,0)}function p(b){b.target.classList.contains("outline-link")&&(r.value&&(r.value.style.transition="none"),Fe(()=>{n.value=!1}))}function _(){n.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(b,P)=>(a(),i("div",{class:"VPLocalNavOutlineDropdown",style:De({"--vp-vh":o.value+"px"})},[b.headers.length>0?(a(),i("button",{key:0,onClick:d,class:T({open:n.value})},[x(S(l(ve)(l(t)))+" ",1),h(fe,{class:"icon"})],2)):(a(),i("button",{key:1,onClick:_},S(l(t).returnToTopLabel||"Return to top"),1)),h(ue,{name:"flyout"},{default:v(()=>[n.value?(a(),i("div",{key:0,ref_key:"items",ref:r,class:"items",onClick:p},[c("div",Bn,[c("a",{class:"top-link",href:"#",onClick:_},S(l(t).returnToTopLabel||"Return to top"),1)]),c("div",An,[h(he,{headers:b.headers},null,8,["headers"])])],512)):f("",!0)]),_:1})],4))}});const Hn=m(xn,[["__scopeId","data-v-24251f6f"]]),zn={},En={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Dn=c("path",{d:"M17,11H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h14c0.6,0,1,0.4,1,1S17.6,11,17,11z"},null,-1),Fn=c("path",{d:"M21,7H3C2.4,7,2,6.6,2,6s0.4-1,1-1h18c0.6,0,1,0.4,1,1S21.6,7,21,7z"},null,-1),On=c("path",{d:"M21,15H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h18c0.6,0,1,0.4,1,1S21.6,15,21,15z"},null,-1),Gn=c("path",{d:"M17,19H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h14c0.6,0,1,0.4,1,1S17.6,19,17,19z"},null,-1),Un=[Dn,Fn,On,Gn];function jn(s,e){return a(),i("svg",En,Un)}const qn=m(zn,[["render",jn]]),Kn=["aria-expanded"],Rn={class:"menu-text"},Wn=g({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(s){const{theme:e,frontmatter:t}=y(),{hasSidebar:n}=E(),{y:o}=we(),r=_e([]),d=I(0);G(()=>{d.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),Y(()=>{r.value=pe(t.value.outline??e.value.outline)});const p=$(()=>r.value.length===0&&!n.value),_=$(()=>({VPLocalNav:!0,fixed:p.value,"reached-top":o.value>=d.value}));return(b,P)=>l(t).layout!=="home"&&(!p.value||l(o)>=d.value)?(a(),i("div",{key:0,class:T(_.value)},[l(n)?(a(),i("button",{key:0,class:"menu","aria-expanded":b.open,"aria-controls":"VPSidebarNav",onClick:P[0]||(P[0]=M=>b.$emit("open-menu"))},[h(qn,{class:"menu-icon"}),c("span",Rn,S(l(e).sidebarMenuLabel||"Menu"),1)],8,Kn)):f("",!0),h(Hn,{headers:r.value,navHeight:d.value},null,8,["headers","navHeight"])],2)):f("",!0)}});const Yn=m(Wn,[["__scopeId","data-v-9e669cc1"]]);function Jn(){const s=I(!1);function e(){s.value=!0,window.addEventListener("resize",o)}function t(){s.value=!1,window.removeEventListener("resize",o)}function n(){s.value?t():e()}function o(){window.outerWidth>=768&&t()}const r=ne();return U(()=>r.path,t),{isScreenOpen:s,openScreen:e,closeScreen:t,toggleScreen:n}}const Xn={},Zn={class:"VPSwitch",type:"button",role:"switch"},Qn={class:"check"},eo={key:0,class:"icon"};function to(s,e){return a(),i("button",Zn,[c("span",Qn,[s.$slots.default?(a(),i("span",eo,[u(s.$slots,"default",{},void 0,!0)])):f("",!0)])])}const so=m(Xn,[["render",to],["__scopeId","data-v-1c29e291"]]),no={},oo={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},ao=c("path",{d:"M12.1,22c-0.3,0-0.6,0-0.9,0c-5.5-0.5-9.5-5.4-9-10.9c0.4-4.8,4.2-8.6,9-9c0.4,0,0.8,0.2,1,0.5c0.2,0.3,0.2,0.8-0.1,1.1c-2,2.7-1.4,6.4,1.3,8.4c2.1,1.6,5,1.6,7.1,0c0.3-0.2,0.7-0.3,1.1-0.1c0.3,0.2,0.5,0.6,0.5,1c-0.2,2.7-1.5,5.1-3.6,6.8C16.6,21.2,14.4,22,12.1,22zM9.3,4.4c-2.9,1-5,3.6-5.2,6.8c-0.4,4.4,2.8,8.3,7.2,8.7c2.1,0.2,4.2-0.4,5.8-1.8c1.1-0.9,1.9-2.1,2.4-3.4c-2.5,0.9-5.3,0.5-7.5-1.1C9.2,11.4,8.1,7.7,9.3,4.4z"},null,-1),ro=[ao];function lo(s,e){return a(),i("svg",oo,ro)}const io=m(no,[["render",lo]]),co={},uo={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},_o=Oe(' ',9),vo=[_o];function po(s,e){return a(),i("svg",uo,vo)}const ho=m(co,[["render",po]]),fo=g({__name:"VPSwitchAppearance",setup(s){const{isDark:e}=y(),t=oe("toggle-appearance",()=>{e.value=!e.value});return(n,o)=>(a(),k(so,{title:"toggle dark mode",class:"VPSwitchAppearance","aria-checked":l(e),onClick:l(t)},{default:v(()=>[h(ho,{class:"sun"}),h(io,{class:"moon"})]),_:1},8,["aria-checked","onClick"]))}});const me=m(fo,[["__scopeId","data-v-3329432d"]]),mo={key:0,class:"VPNavBarAppearance"},go=g({__name:"VPNavBarAppearance",setup(s){const{site:e}=y();return(t,n)=>l(e).appearance&&l(e).appearance!=="force-dark"?(a(),i("div",mo,[h(me)])):f("",!0)}});const bo=m(go,[["__scopeId","data-v-283b26e9"]]),ge=I();let Ie=!1,re=0;function ko(s){const e=I(!1);if(R){!Ie&&$o(),re++;const t=U(ge,n=>{var o,r,d;n===s.el.value||(o=s.el.value)!=null&&o.contains(n)?(e.value=!0,(r=s.onFocus)==null||r.call(s)):(e.value=!1,(d=s.onBlur)==null||d.call(s))});se(()=>{t(),re--,re||yo()})}return Ge(e)}function $o(){document.addEventListener("focusin",Ne),Ie=!0,ge.value=document.activeElement}function yo(){document.removeEventListener("focusin",Ne)}function Ne(){ge.value=document.activeElement}const Po={},Vo={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},wo=c("path",{d:"M12,16c-0.3,0-0.5-0.1-0.7-0.3l-6-6c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l5.3,5.3l5.3-5.3c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-6,6C12.5,15.9,12.3,16,12,16z"},null,-1),Lo=[wo];function So(s,e){return a(),i("svg",Vo,Lo)}const Te=m(Po,[["render",So]]),Mo={},Co={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Io=c("circle",{cx:"12",cy:"12",r:"2"},null,-1),No=c("circle",{cx:"19",cy:"12",r:"2"},null,-1),To=c("circle",{cx:"5",cy:"12",r:"2"},null,-1),Bo=[Io,No,To];function Ao(s,e){return a(),i("svg",Co,Bo)}const xo=m(Mo,[["render",Ao]]),Ho={class:"VPMenuLink"},zo=g({__name:"VPMenuLink",props:{item:{}},setup(s){const{page:e}=y();return(t,n)=>(a(),i("div",Ho,[h(D,{class:T({active:l(O)(l(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel},{default:v(()=>[x(S(t.item.text),1)]),_:1},8,["class","href","target","rel"])]))}});const ae=m(zo,[["__scopeId","data-v-f51f088d"]]),Eo={class:"VPMenuGroup"},Do={key:0,class:"title"},Fo=g({__name:"VPMenuGroup",props:{text:{},items:{}},setup(s){return(e,t)=>(a(),i("div",Eo,[e.text?(a(),i("p",Do,S(e.text),1)):f("",!0),(a(!0),i(N,null,A(e.items,n=>(a(),i(N,null,["link"in n?(a(),k(ae,{key:0,item:n},null,8,["item"])):f("",!0)],64))),256))]))}});const Oo=m(Fo,[["__scopeId","data-v-a6b0397c"]]),Go={class:"VPMenu"},Uo={key:0,class:"items"},jo=g({__name:"VPMenu",props:{items:{}},setup(s){return(e,t)=>(a(),i("div",Go,[e.items?(a(),i("div",Uo,[(a(!0),i(N,null,A(e.items,n=>(a(),i(N,{key:n.text},["link"in n?(a(),k(ae,{key:0,item:n},null,8,["item"])):(a(),k(Oo,{key:1,text:n.text,items:n.items},null,8,["text","items"]))],64))),128))])):f("",!0),u(e.$slots,"default",{},void 0,!0)]))}});const qo=m(jo,[["__scopeId","data-v-e42ed9b3"]]),Ko=["aria-expanded","aria-label"],Ro={key:0,class:"text"},Wo=["innerHTML"],Yo={class:"menu"},Jo=g({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(s){const e=I(!1),t=I();ko({el:t,onBlur:n});function n(){e.value=!1}return(o,r)=>(a(),i("div",{class:"VPFlyout",ref_key:"el",ref:t,onMouseenter:r[1]||(r[1]=d=>e.value=!0),onMouseleave:r[2]||(r[2]=d=>e.value=!1)},[c("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":e.value,"aria-label":o.label,onClick:r[0]||(r[0]=d=>e.value=!e.value)},[o.button||o.icon?(a(),i("span",Ro,[o.icon?(a(),k(F(o.icon),{key:0,class:"option-icon"})):f("",!0),o.button?(a(),i("span",{key:1,innerHTML:o.button},null,8,Wo)):f("",!0),h(Te,{class:"text-icon"})])):(a(),k(xo,{key:1,class:"icon"}))],8,Ko),c("div",Yo,[h(qo,{items:o.items},{default:v(()=>[u(o.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}});const be=m(Jo,[["__scopeId","data-v-aa8de344"]]),Xo={discord:'',facebook:'',github:'',instagram:'',linkedin:'',mastodon:'',slack:'',twitter:'',x:'',youtube:''},Zo=["href","aria-label","innerHTML"],Qo=g({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(s){const e=s,t=$(()=>typeof e.icon=="object"?e.icon.svg:Xo[e.icon]);return(n,o)=>(a(),i("a",{class:"VPSocialLink no-icon",href:n.link,"aria-label":n.ariaLabel??(typeof n.icon=="string"?n.icon:""),target:"_blank",rel:"noopener",innerHTML:t.value},null,8,Zo))}});const ea=m(Qo,[["__scopeId","data-v-16cf740a"]]),ta={class:"VPSocialLinks"},sa=g({__name:"VPSocialLinks",props:{links:{}},setup(s){return(e,t)=>(a(),i("div",ta,[(a(!0),i(N,null,A(e.links,({link:n,icon:o,ariaLabel:r})=>(a(),k(ea,{key:n,icon:o,link:n,ariaLabel:r},null,8,["icon","link","ariaLabel"]))),128))]))}});const ke=m(sa,[["__scopeId","data-v-e71e869c"]]),na={key:0,class:"group translations"},oa={class:"trans-title"},aa={key:1,class:"group"},ra={class:"item appearance"},la={class:"label"},ia={class:"appearance-action"},ca={key:2,class:"group"},ua={class:"item social-links"},da=g({__name:"VPNavBarExtra",setup(s){const{site:e,theme:t}=y(),{localeLinks:n,currentLang:o}=X({correspondingLink:!0}),r=$(()=>n.value.length&&o.value.label||e.value.appearance||t.value.socialLinks);return(d,p)=>r.value?(a(),k(be,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:v(()=>[l(n).length&&l(o).label?(a(),i("div",na,[c("p",oa,S(l(o).label),1),(a(!0),i(N,null,A(l(n),_=>(a(),k(ae,{key:_.link,item:_},null,8,["item"]))),128))])):f("",!0),l(e).appearance?(a(),i("div",aa,[c("div",ra,[c("p",la,S(l(t).darkModeSwitchLabel||"Appearance"),1),c("div",ia,[h(me)])])])):f("",!0),l(t).socialLinks?(a(),i("div",ca,[c("div",ua,[h(ke,{class:"social-links-list",links:l(t).socialLinks},null,8,["links"])])])):f("",!0)]),_:1})):f("",!0)}});const _a=m(da,[["__scopeId","data-v-c8c2ae4b"]]),va=s=>(H("data-v-6bee1efd"),s=s(),z(),s),pa=["aria-expanded"],ha=va(()=>c("span",{class:"container"},[c("span",{class:"top"}),c("span",{class:"middle"}),c("span",{class:"bottom"})],-1)),fa=[ha],ma=g({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(s){return(e,t)=>(a(),i("button",{type:"button",class:T(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:t[0]||(t[0]=n=>e.$emit("click"))},fa,10,pa))}});const ga=m(ma,[["__scopeId","data-v-6bee1efd"]]),ba=["innerHTML"],ka=g({__name:"VPNavBarMenuLink",props:{item:{}},setup(s){const{page:e}=y();return(t,n)=>(a(),k(D,{class:T({VPNavBarMenuLink:!0,active:l(O)(l(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel,tabindex:"0"},{default:v(()=>[c("span",{innerHTML:t.item.text},null,8,ba)]),_:1},8,["class","href","target","rel"]))}});const $a=m(ka,[["__scopeId","data-v-cb318fec"]]),ya=g({__name:"VPNavBarMenuGroup",props:{item:{}},setup(s){const e=s,{page:t}=y(),n=r=>"link"in r?O(t.value.relativePath,r.link,!!e.item.activeMatch):r.items.some(n),o=$(()=>n(e.item));return(r,d)=>(a(),k(be,{class:T({VPNavBarMenuGroup:!0,active:l(O)(l(t).relativePath,r.item.activeMatch,!!r.item.activeMatch)||o.value}),button:r.item.text,items:r.item.items},null,8,["class","button","items"]))}}),Pa=s=>(H("data-v-f732b5d0"),s=s(),z(),s),Va={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},wa=Pa(()=>c("span",{id:"main-nav-aria-label",class:"visually-hidden"},"Main Navigation",-1)),La=g({__name:"VPNavBarMenu",setup(s){const{theme:e}=y();return(t,n)=>l(e).nav?(a(),i("nav",Va,[wa,(a(!0),i(N,null,A(l(e).nav,o=>(a(),i(N,{key:o.text},["link"in o?(a(),k($a,{key:0,item:o},null,8,["item"])):(a(),k(ya,{key:1,item:o},null,8,["item"]))],64))),128))])):f("",!0)}});const Sa=m(La,[["__scopeId","data-v-f732b5d0"]]);function Ma(s,e){const{localeIndex:t}=y();function n(o){var w,V;const r=o.split("."),d=s&&typeof s=="object",p=d&&((V=(w=s.locales)==null?void 0:w[t.value])==null?void 0:V.translations)||null,_=d&&s.translations||null;let b=p,P=_,M=e;const C=r.pop();for(const B of r){let L=null;const q=M==null?void 0:M[B];q&&(L=M=q);const W=P==null?void 0:P[B];W&&(L=P=W);const K=b==null?void 0:b[B];K&&(L=b=K),q||(M=L),W||(P=L),K||(b=L)}return(b==null?void 0:b[C])??(P==null?void 0:P[C])??(M==null?void 0:M[C])??""}return n}const Ca=["aria-label"],Ia={class:"DocSearch-Button-Container"},Na=c("svg",{class:"DocSearch-Search-Icon",width:"20",height:"20",viewBox:"0 0 20 20","aria-label":"search icon"},[c("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none","fill-rule":"evenodd","stroke-linecap":"round","stroke-linejoin":"round"})],-1),Ta={class:"DocSearch-Button-Placeholder"},Ba=c("span",{class:"DocSearch-Button-Keys"},[c("kbd",{class:"DocSearch-Button-Key"}),c("kbd",{class:"DocSearch-Button-Key"},"K")],-1),ye=g({__name:"VPNavBarSearchButton",setup(s){const{theme:e}=y(),t={button:{buttonText:"Search",buttonAriaLabel:"Search"}},n=Ue(Ma)(je(()=>{var o;return(o=e.value.search)==null?void 0:o.options}),t);return(o,r)=>(a(),i("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":l(n)("button.buttonAriaLabel")},[c("span",Ia,[Na,c("span",Ta,S(l(n)("button.buttonText")),1)]),Ba],8,Ca))}});const Aa={class:"VPNavBarSearch"},xa={id:"local-search"},Ha={key:1,id:"docsearch"},za=g({__name:"VPNavBarSearch",setup(s){const e=()=>null,t=qe(()=>Ke(()=>import("./VPAlgoliaSearchBox.ac78e499.js"),["assets/chunks/VPAlgoliaSearchBox.ac78e499.js","assets/chunks/framework.7d2df8c6.js"])),{theme:n}=y(),o=I(!1),r=I(!1),d=()=>{const C="VPAlgoliaPreconnect";(window.requestIdleCallback||setTimeout)(()=>{var B;const V=document.createElement("link");V.id=C,V.rel="preconnect",V.href=`https://${(((B=n.value.search)==null?void 0:B.options)??n.value.algolia).appId}-dsn.algolia.net`,V.crossOrigin="",document.head.appendChild(V)})};G(()=>{d();const C=V=>{(V.key.toLowerCase()==="k"&&(V.metaKey||V.ctrlKey)||!b(V)&&V.key==="/")&&(V.preventDefault(),p(),w())},w=()=>{window.removeEventListener("keydown",C)};window.addEventListener("keydown",C),se(w)});function p(){o.value||(o.value=!0,setTimeout(_,16))}function _(){const C=new Event("keydown");C.key="k",C.metaKey=!0,window.dispatchEvent(C),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||_()},16)}function b(C){const w=C.target,V=w.tagName;return w.isContentEditable||V==="INPUT"||V==="SELECT"||V==="TEXTAREA"}const P=I(!1),M="algolia";return(C,w)=>{var V;return a(),i("div",Aa,[l(M)==="local"?(a(),i(N,{key:0},[P.value?(a(),k(l(e),{key:0,onClose:w[0]||(w[0]=B=>P.value=!1)})):f("",!0),c("div",xa,[h(ye,{onClick:w[1]||(w[1]=B=>P.value=!0)})])],64)):l(M)==="algolia"?(a(),i(N,{key:1},[o.value?(a(),k(l(t),{key:0,algolia:((V=l(n).search)==null?void 0:V.options)??l(n).algolia,onVnodeBeforeMount:w[2]||(w[2]=B=>r.value=!0)},null,8,["algolia"])):f("",!0),r.value?f("",!0):(a(),i("div",Ha,[h(ye,{onClick:p})]))],64)):f("",!0)])}}});const Ea=g({__name:"VPNavBarSocialLinks",setup(s){const{theme:e}=y();return(t,n)=>l(e).socialLinks?(a(),k(ke,{key:0,class:"VPNavBarSocialLinks",links:l(e).socialLinks},null,8,["links"])):f("",!0)}});const Da=m(Ea,[["__scopeId","data-v-ef6192dc"]]),Fa=["href"],Oa=g({__name:"VPNavBarTitle",setup(s){const{site:e,theme:t}=y(),{hasSidebar:n}=E(),{currentLang:o}=X();return(r,d)=>(a(),i("div",{class:T(["VPNavBarTitle",{"has-sidebar":l(n)}])},[c("a",{class:"title",href:l(t).logoLink??l(J)(l(o).link)},[u(r.$slots,"nav-bar-title-before",{},void 0,!0),l(t).logo?(a(),k(ee,{key:0,class:"logo",image:l(t).logo},null,8,["image"])):f("",!0),l(t).siteTitle?(a(),i(N,{key:1},[x(S(l(t).siteTitle),1)],64)):l(t).siteTitle===void 0?(a(),i(N,{key:2},[x(S(l(e).title),1)],64)):f("",!0),u(r.$slots,"nav-bar-title-after",{},void 0,!0)],8,Fa)],2))}});const Ga=m(Oa,[["__scopeId","data-v-2973dbb4"]]),Ua={},ja={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},qa=c("path",{d:"M0 0h24v24H0z",fill:"none"},null,-1),Ka=c("path",{d:" M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z ",class:"css-c4d79v"},null,-1),Ra=[qa,Ka];function Wa(s,e){return a(),i("svg",ja,Ra)}const Be=m(Ua,[["render",Wa]]),Ya={class:"items"},Ja={class:"title"},Xa=g({__name:"VPNavBarTranslations",setup(s){const{theme:e}=y(),{localeLinks:t,currentLang:n}=X({correspondingLink:!0});return(o,r)=>l(t).length&&l(n).label?(a(),k(be,{key:0,class:"VPNavBarTranslations",icon:Be,label:l(e).langMenuLabel||"Change language"},{default:v(()=>[c("div",Ya,[c("p",Ja,S(l(n).label),1),(a(!0),i(N,null,A(l(t),d=>(a(),k(ae,{key:d.link,item:d},null,8,["item"]))),128))])]),_:1},8,["label"])):f("",!0)}});const Za=m(Xa,[["__scopeId","data-v-ff4524ae"]]),Qa=s=>(H("data-v-f1abbc6e"),s=s(),z(),s),er={class:"container"},tr={class:"title"},sr={class:"content"},nr=Qa(()=>c("div",{class:"curtain"},null,-1)),or={class:"content-body"},ar=g({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(s){const{y:e}=we(),{hasSidebar:t}=E(),{frontmatter:n}=y(),o=I({});return Pe(()=>{o.value={"has-sidebar":t.value,top:n.value.layout==="home"&&e.value===0}}),(r,d)=>(a(),i("div",{class:T(["VPNavBar",o.value])},[c("div",er,[c("div",tr,[h(Ga,null,{"nav-bar-title-before":v(()=>[u(r.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":v(()=>[u(r.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),c("div",sr,[nr,c("div",or,[u(r.$slots,"nav-bar-content-before",{},void 0,!0),h(za,{class:"search"}),h(Sa,{class:"menu"}),h(Za,{class:"translations"}),h(bo,{class:"appearance"}),h(Da,{class:"social-links"}),h(_a,{class:"extra"}),u(r.$slots,"nav-bar-content-after",{},void 0,!0),h(ga,{class:"hamburger",active:r.isScreenOpen,onClick:d[0]||(d[0]=p=>r.$emit("toggle-screen"))},null,8,["active"])])])])],2))}});const rr=m(ar,[["__scopeId","data-v-f1abbc6e"]]),lr={key:0,class:"VPNavScreenAppearance"},ir={class:"text"},cr=g({__name:"VPNavScreenAppearance",setup(s){const{site:e,theme:t}=y();return(n,o)=>l(e).appearance?(a(),i("div",lr,[c("p",ir,S(l(t).darkModeSwitchLabel||"Appearance"),1),h(me)])):f("",!0)}});const ur=m(cr,[["__scopeId","data-v-0dc5cf49"]]),dr=g({__name:"VPNavScreenMenuLink",props:{item:{}},setup(s){const e=oe("close-screen");return(t,n)=>(a(),k(D,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:l(e)},{default:v(()=>[x(S(t.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}});const _r=m(dr,[["__scopeId","data-v-fe523e3d"]]),vr={},pr={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},hr=c("path",{d:"M18.9,10.9h-6v-6c0-0.6-0.4-1-1-1s-1,0.4-1,1v6h-6c-0.6,0-1,0.4-1,1s0.4,1,1,1h6v6c0,0.6,0.4,1,1,1s1-0.4,1-1v-6h6c0.6,0,1-0.4,1-1S19.5,10.9,18.9,10.9z"},null,-1),fr=[hr];function mr(s,e){return a(),i("svg",pr,fr)}const gr=m(vr,[["render",mr]]),br=g({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(s){const e=oe("close-screen");return(t,n)=>(a(),k(D,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:l(e)},{default:v(()=>[x(S(t.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}});const Ae=m(br,[["__scopeId","data-v-aea78dd1"]]),kr={class:"VPNavScreenMenuGroupSection"},$r={key:0,class:"title"},yr=g({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(s){return(e,t)=>(a(),i("div",kr,[e.text?(a(),i("p",$r,S(e.text),1)):f("",!0),(a(!0),i(N,null,A(e.items,n=>(a(),k(Ae,{key:n.text,item:n},null,8,["item"]))),128))]))}});const Pr=m(yr,[["__scopeId","data-v-f60dbfa7"]]),Vr=["aria-controls","aria-expanded"],wr={class:"button-text"},Lr=["id"],Sr={key:1,class:"group"},Mr=g({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(s){const e=s,t=I(!1),n=$(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function o(){t.value=!t.value}return(r,d)=>(a(),i("div",{class:T(["VPNavScreenMenuGroup",{open:t.value}])},[c("button",{class:"button","aria-controls":n.value,"aria-expanded":t.value,onClick:o},[c("span",wr,S(r.text),1),h(gr,{class:"button-icon"})],8,Vr),c("div",{id:n.value,class:"items"},[(a(!0),i(N,null,A(r.items,p=>(a(),i(N,{key:p.text},["link"in p?(a(),i("div",{key:p.text,class:"item"},[h(Ae,{item:p},null,8,["item"])])):(a(),i("div",Sr,[h(Pr,{text:p.text,items:p.items},null,8,["text","items"])]))],64))),128))],8,Lr)],2))}});const Cr=m(Mr,[["__scopeId","data-v-c2c554ed"]]),Ir={key:0,class:"VPNavScreenMenu"},Nr=g({__name:"VPNavScreenMenu",setup(s){const{theme:e}=y();return(t,n)=>l(e).nav?(a(),i("nav",Ir,[(a(!0),i(N,null,A(l(e).nav,o=>(a(),i(N,{key:o.text},["link"in o?(a(),k(_r,{key:0,item:o},null,8,["item"])):(a(),k(Cr,{key:1,text:o.text||"",items:o.items},null,8,["text","items"]))],64))),128))])):f("",!0)}}),Tr=g({__name:"VPNavScreenSocialLinks",setup(s){const{theme:e}=y();return(t,n)=>l(e).socialLinks?(a(),k(ke,{key:0,class:"VPNavScreenSocialLinks",links:l(e).socialLinks},null,8,["links"])):f("",!0)}}),Br={class:"list"},Ar=g({__name:"VPNavScreenTranslations",setup(s){const{localeLinks:e,currentLang:t}=X({correspondingLink:!0}),n=I(!1);function o(){n.value=!n.value}return(r,d)=>l(e).length&&l(t).label?(a(),i("div",{key:0,class:T(["VPNavScreenTranslations",{open:n.value}])},[c("button",{class:"title",onClick:o},[h(Be,{class:"icon lang"}),x(" "+S(l(t).label)+" ",1),h(Te,{class:"icon chevron"})]),c("ul",Br,[(a(!0),i(N,null,A(l(e),p=>(a(),i("li",{key:p.link,class:"item"},[h(D,{class:"link",href:p.link},{default:v(()=>[x(S(p.text),1)]),_:2},1032,["href"])]))),128))])],2)):f("",!0)}});const xr=m(Ar,[["__scopeId","data-v-41505286"]]),Hr={class:"container"},zr=g({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(s){const e=I(null),t=Le(R?document.body:null);return(n,o)=>(a(),k(ue,{name:"fade",onEnter:o[0]||(o[0]=r=>t.value=!0),onAfterLeave:o[1]||(o[1]=r=>t.value=!1)},{default:v(()=>[n.open?(a(),i("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e,id:"VPNavScreen"},[c("div",Hr,[u(n.$slots,"nav-screen-content-before",{},void 0,!0),h(Nr,{class:"menu"}),h(xr,{class:"translations"}),h(ur,{class:"appearance"}),h(Tr,{class:"social-links"}),u(n.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):f("",!0)]),_:3}))}});const Er=m(zr,[["__scopeId","data-v-57cce842"]]),Dr={key:0,class:"VPNav"},Fr=g({__name:"VPNav",setup(s){const{isScreenOpen:e,closeScreen:t,toggleScreen:n}=Jn(),{frontmatter:o}=y(),r=$(()=>o.value.navbar!==!1);return Se("close-screen",t),te(()=>{R&&document.documentElement.classList.toggle("hide-nav",!r.value)}),(d,p)=>r.value?(a(),i("header",Dr,[h(rr,{"is-screen-open":l(e),onToggleScreen:l(n)},{"nav-bar-title-before":v(()=>[u(d.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":v(()=>[u(d.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":v(()=>[u(d.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":v(()=>[u(d.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),h(Er,{open:l(e)},{"nav-screen-content-before":v(()=>[u(d.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":v(()=>[u(d.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):f("",!0)}});const Or=m(Fr,[["__scopeId","data-v-7ad780c2"]]),Gr=s=>(H("data-v-bd01e0d5"),s=s(),z(),s),Ur=["role","tabindex"],jr=Gr(()=>c("div",{class:"indicator"},null,-1)),qr=["onKeydown"],Kr={key:1,class:"items"},Rr=g({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(s){const e=s,{collapsed:t,collapsible:n,isLink:o,isActiveLink:r,hasActiveLink:d,hasChildren:p,toggle:_}=mt($(()=>e.item)),b=$(()=>p.value?"section":"div"),P=$(()=>o.value?"a":"div"),M=$(()=>p.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),C=$(()=>o.value?void 0:"button"),w=$(()=>[[`level-${e.depth}`],{collapsible:n.value},{collapsed:t.value},{"is-link":o.value},{"is-active":r.value},{"has-active":d.value}]);function V(L){"key"in L&&L.key!=="Enter"||!e.item.link&&_()}function B(){e.item.link&&_()}return(L,q)=>{const W=j("VPSidebarItem",!0);return a(),k(F(b.value),{class:T(["VPSidebarItem",w.value])},{default:v(()=>[L.item.text?(a(),i("div",Z({key:0,class:"item",role:C.value},Re(L.item.items?{click:V,keydown:V}:{},!0),{tabindex:L.item.items&&0}),[jr,L.item.link?(a(),k(D,{key:0,tag:P.value,class:"link",href:L.item.link,rel:L.item.rel,target:L.item.target},{default:v(()=>[(a(),k(F(M.value),{class:"text",innerHTML:L.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(a(),k(F(M.value),{key:1,class:"text",innerHTML:L.item.text},null,8,["innerHTML"])),L.item.collapsed!=null?(a(),i("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:B,onKeydown:We(B,["enter"]),tabindex:"0"},[h(fe,{class:"caret-icon"})],40,qr)):f("",!0)],16,Ur)):f("",!0),L.item.items&&L.item.items.length?(a(),i("div",Kr,[L.depth<5?(a(!0),i(N,{key:0},A(L.item.items,K=>(a(),k(W,{key:K.text,item:K,depth:L.depth+1},null,8,["item","depth"]))),128)):f("",!0)])):f("",!0)]),_:1},8,["class"])}}});const Wr=m(Rr,[["__scopeId","data-v-bd01e0d5"]]),xe=s=>(H("data-v-ee2efba5"),s=s(),z(),s),Yr=xe(()=>c("div",{class:"curtain"},null,-1)),Jr={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},Xr=xe(()=>c("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),Zr=g({__name:"VPSidebar",props:{open:{type:Boolean}},setup(s){const{sidebarGroups:e,hasSidebar:t}=E(),n=s,o=I(null),r=Le(R?document.body:null);return U([n,o],()=>{var d;n.open?(r.value=!0,(d=o.value)==null||d.focus()):r.value=!1},{immediate:!0,flush:"post"}),(d,p)=>l(t)?(a(),i("aside",{key:0,class:T(["VPSidebar",{open:d.open}]),ref_key:"navEl",ref:o,onClick:p[0]||(p[0]=Ye(()=>{},["stop"]))},[Yr,c("nav",Jr,[Xr,u(d.$slots,"sidebar-nav-before",{},void 0,!0),(a(!0),i(N,null,A(l(e),_=>(a(),i("div",{key:_.text,class:"group"},[h(Wr,{item:_,depth:0},null,8,["item"])]))),128)),u(d.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):f("",!0)}});const Qr=m(Zr,[["__scopeId","data-v-ee2efba5"]]),el=g({__name:"VPSkipLink",setup(s){const e=ne(),t=I();U(()=>e.path,()=>t.value.focus());function n({target:o}){const r=document.getElementById(decodeURIComponent(o.hash).slice(1));if(r){const d=()=>{r.removeAttribute("tabindex"),r.removeEventListener("blur",d)};r.setAttribute("tabindex","-1"),r.addEventListener("blur",d),r.focus(),window.scrollTo(0,0)}}return(o,r)=>(a(),i(N,null,[c("span",{ref_key:"backToTop",ref:t,tabindex:"-1"},null,512),c("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:n}," Skip to content ")],64))}});const tl=m(el,[["__scopeId","data-v-c8291ffa"]]),sl=g({__name:"Layout",setup(s){const{isOpen:e,open:t,close:n}=E(),o=ne();U(()=>o.path,n),ft(e,n);const{frontmatter:r}=y(),d=Je(),p=$(()=>!!d["home-hero-image"]);return Se("hero-image-slot-exists",p),(_,b)=>{const P=j("Content");return l(r).layout!==!1?(a(),i("div",{key:0,class:T(["Layout",l(r).pageClass])},[u(_.$slots,"layout-top",{},void 0,!0),h(tl),h(tt,{class:"backdrop",show:l(e),onClick:l(n)},null,8,["show","onClick"]),h(Or,null,{"nav-bar-title-before":v(()=>[u(_.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":v(()=>[u(_.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":v(()=>[u(_.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":v(()=>[u(_.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":v(()=>[u(_.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":v(()=>[u(_.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),h(Yn,{open:l(e),onOpenMenu:l(t)},null,8,["open","onOpenMenu"]),h(Qr,{open:l(e)},{"sidebar-nav-before":v(()=>[u(_.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":v(()=>[u(_.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),h(Sn,null,{"page-top":v(()=>[u(_.$slots,"page-top",{},void 0,!0)]),"page-bottom":v(()=>[u(_.$slots,"page-bottom",{},void 0,!0)]),"not-found":v(()=>[u(_.$slots,"not-found",{},void 0,!0)]),"home-hero-before":v(()=>[u(_.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info":v(()=>[u(_.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-image":v(()=>[u(_.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":v(()=>[u(_.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":v(()=>[u(_.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":v(()=>[u(_.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":v(()=>[u(_.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":v(()=>[u(_.$slots,"doc-before",{},void 0,!0)]),"doc-after":v(()=>[u(_.$slots,"doc-after",{},void 0,!0)]),"doc-top":v(()=>[u(_.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":v(()=>[u(_.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":v(()=>[u(_.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":v(()=>[u(_.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":v(()=>[u(_.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":v(()=>[u(_.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":v(()=>[u(_.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":v(()=>[u(_.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),h(Tn),u(_.$slots,"layout-bottom",{},void 0,!0)],2)):(a(),k(P,{key:1}))}}});const nl=m(sl,[["__scopeId","data-v-9d8abc1e"]]);const al={Layout:nl,enhanceApp:({app:s})=>{s.component("Badge",Ze)}};export{al as t,y as u}; diff --git a/assets/cms.md.9922f3eb.js b/assets/cms.md.9922f3eb.js new file mode 100644 index 000000000..c7f496dba --- /dev/null +++ b/assets/cms.md.9922f3eb.js @@ -0,0 +1 @@ +import{_ as a,o as t,c as s,k as e,a as o}from"./chunks/framework.7d2df8c6.js";const x=JSON.parse('{"title":"反垃圾","description":"","frontmatter":{},"headers":[],"relativePath":"cms.md","filePath":"cms.md","lastUpdated":null}'),c={name:"cms.md"},r=e("h1",{id:"反垃圾",tabindex:"-1"},[o("反垃圾 "),e("a",{class:"header-anchor",href:"#反垃圾","aria-label":'Permalink to "反垃圾"'},"")],-1),n=e("p",null,[e("a",{href:"./faq.html#如何配置反垃圾"},"如何配置反垃圾?")],-1),d=[r,n];function l(i,_,m,h,p,f){return t(),s("div",null,d)}const k=a(c,[["render",l]]);export{x as __pageData,k as default}; diff --git a/assets/cms.md.9922f3eb.lean.js b/assets/cms.md.9922f3eb.lean.js new file mode 100644 index 000000000..c7f496dba --- /dev/null +++ b/assets/cms.md.9922f3eb.lean.js @@ -0,0 +1 @@ +import{_ as a,o as t,c as s,k as e,a as o}from"./chunks/framework.7d2df8c6.js";const x=JSON.parse('{"title":"反垃圾","description":"","frontmatter":{},"headers":[],"relativePath":"cms.md","filePath":"cms.md","lastUpdated":null}'),c={name:"cms.md"},r=e("h1",{id:"反垃圾",tabindex:"-1"},[o("反垃圾 "),e("a",{class:"header-anchor",href:"#反垃圾","aria-label":'Permalink to "反垃圾"'},"")],-1),n=e("p",null,[e("a",{href:"./faq.html#如何配置反垃圾"},"如何配置反垃圾?")],-1),d=[r,n];function l(i,_,m,h,p,f){return t(),s("div",null,d)}const k=a(c,[["render",l]]);export{x as __pageData,k as default}; diff --git a/assets/configuration.md.3456c64e.js b/assets/configuration.md.3456c64e.js new file mode 100644 index 000000000..14188799f --- /dev/null +++ b/assets/configuration.md.3456c64e.js @@ -0,0 +1 @@ +import{_ as e,o as a,c as o,Q as r}from"./chunks/framework.7d2df8c6.js";const u=JSON.parse('{"title":"配置","description":"","frontmatter":{},"headers":[],"relativePath":"configuration.md","filePath":"configuration.md","lastUpdated":null}'),t={name:"configuration.md"},l=r(' 配置
注意
因图形化配置界面已上线,此文档已废弃且不再维护,其中的内容可能已经过时
- 配置是可选的,即使没有配置也可以使用。
- 请确保 config 表的权限不是“所有用户可读”,以保证 SMTP 密码等信息不会泄露。
不过放心,默认权限是安全的,您不需要更改。- 请将配置项放在一条数据记录中。
通用
SITE_NAME
类型:
String
默认值:null
必要性:false
示例: 虹墨空间站博客、站点名称。
SITE_URL
类型:
String
默认值:null
必要性:false
示例: https://www.imaegoo.com博客、站点地址。
BLOGGER_EMAIL
类型:
String
默认值:null
必要性:false
示例: 12345@qq.com博主的邮箱地址,用于邮件通知、博主标识。
反垃圾
AKISMET_KEY
类型:
String
默认值:null
必要性:false
示例: 8651783ed123反垃圾评论 API key。
微信通知
SC_SENDKEY
类型:
String
默认值:null
必要性:false
示例: SCT1364TKdsiGjGvyAZNYDVnuHW12345Server酱微信推送的
SCKEY
邮件通知
SENDER_EMAIL
类型:
String
默认值:null
必要性:false
示例: blog@imaegoo.com邮件通知邮箱地址。对于大多数邮箱服务商,
SENDER_EMAIL
必须和SMTP_USER
保持一致,否则无法发送邮件。SENDER_NAME
类型:
String
默认值:null
必要性:false
示例: 虹墨空间站评论提醒邮件通知标题。
SMTP_SERVICE
类型:
String
默认值:null
必要性:false
示例: qiye.aliyun邮件通知邮箱服务商。
完整列表请参考:Supported servicesSMTP_USER
类型:
String
默认值:null
必要性:false
示例: blog@imaegoo.com邮件通知邮箱用户名。
SMTP_PASS
类型:
String
默认值:null
必要性:false
示例: password邮件通知邮箱密码,QQ邮箱请填写授权码。
',36),c=[l];function d(i,n,s,h,b,p){return a(),o("div",null,c)}const _=e(t,[["render",d]]);export{u as __pageData,_ as default}; diff --git a/assets/configuration.md.3456c64e.lean.js b/assets/configuration.md.3456c64e.lean.js new file mode 100644 index 000000000..7a51dae66 --- /dev/null +++ b/assets/configuration.md.3456c64e.lean.js @@ -0,0 +1 @@ +import{_ as e,o as a,c as o,Q as r}from"./chunks/framework.7d2df8c6.js";const u=JSON.parse('{"title":"配置","description":"","frontmatter":{},"headers":[],"relativePath":"configuration.md","filePath":"configuration.md","lastUpdated":null}'),t={name:"configuration.md"},l=r("",36),c=[l];function d(i,n,s,h,b,p){return a(),o("div",null,c)}const _=e(t,[["render",d]]);export{u as __pageData,_ as default}; diff --git a/assets/en_api.md.859770f8.js b/assets/en_api.md.859770f8.js new file mode 100644 index 000000000..6ea3bb509 --- /dev/null +++ b/assets/en_api.md.859770f8.js @@ -0,0 +1,109 @@ +import{_ as s,o as n,c as a,Q as l}from"./chunks/framework.7d2df8c6.js";const h=JSON.parse('{"title":"API reference","description":"","frontmatter":{},"headers":[],"relativePath":"en/api.md","filePath":"en/api.md","lastUpdated":null}'),e={name:"en/api.md"},o=l(`API reference
Through Twikoo API, theme developers can implement some special features, such as displaying the number of article comments in the article list, displaying the latest comments on the home page, etc.
It is not necessary to execute
twikoo.init()
before calling the Twikoo API.Get comments count
Get the number of article comments in batch.
Version
>= 0.2.7
Example
jstwikoo.getCommentsCount({ + envId: 'Environment ID', // Tencent CloudBase Environment ID + // region: 'ap-guangzhou', // Environment locale, default is ap-shanghai, if your environment locale is not Shanghai, you need to pass this parameter + urls: [ // List of article paths without protocols, domains and parameters. It is a mandatory parameter + '/2020/10/post-1.html', + '/2020/11/post-2.html', + '/2020/12/post-3.html' + ], + includeReply: false // Whether the number of comments includes replies, the default parameter is false +}).then(function (res) { + console.log(res); + // example: [ + // { url: '/2020/10/post-1.html', count: 10 }, + // { url: '/2020/11/post-2.html', count: 0 }, + // { url: '/2020/12/post-3.html', count: 20 } + // ] +}).catch(function (err) { + // If an error occurs + console.error(err); +});
twikoo.getCommentsCount({ + envId: 'Environment ID', // Tencent CloudBase Environment ID + // region: 'ap-guangzhou', // Environment locale, default is ap-shanghai, if your environment locale is not Shanghai, you need to pass this parameter + urls: [ // List of article paths without protocols, domains and parameters. It is a mandatory parameter + '/2020/10/post-1.html', + '/2020/11/post-2.html', + '/2020/12/post-3.html' + ], + includeReply: false // Whether the number of comments includes replies, the default parameter is false +}).then(function (res) { + console.log(res); + // example: [ + // { url: '/2020/10/post-1.html', count: 10 }, + // { url: '/2020/11/post-2.html', count: 0 }, + // { url: '/2020/12/post-3.html', count: 20 } + // ] +}).catch(function (err) { + // If an error occurs + console.error(err); +});
Get recent comments
Get the latest comments.
Version
>= 0.2.7
Example
jstwikoo.getRecentComments({ + envId: '您的环境id', // Tencent CloudBase Environment ID + // region: 'ap-guangzhou', // Environment locale, default is ap-shanghai, if your environment locale is not Shanghai, you need to pass this parameter + pageSize: 10, // Get how many bars, the default parameter is 10, the maximum parameter is 100 + includeReply: false // Whether to include the latest reply, the default parameter is false +}).then(function (res) { + console.log(res); + // Returns Array with the latest comments + // * id: comment ID + // * url: address of the comment + // * nick: nickname + // * mailMd5: The MD5 value of the mailbox, which can be used to display the avatar + // * link: URL + // * comment: the content of the comment in HTML format + // * commentText: comment content in plain text format + // * created: comment time, in millisecond timestamp format + // * avatar: the address of the avatar (new in 0.2.9) + // * relativeTime: relative comment time, e.g. "1 hour ago" (new in 0.2.9) + // Return example: [ // order from new to old + // { id: '', url: '', nick: '', mailMd5: '', link: '', comment: '', commentText: '', created: 0 } + // { id: '', url: '', nick: '', mailMd5: '', link: '', comment: '', commentText: '', created: 0 }, + // { id: '', url: '', nick: '', mailMd5: '', link: '', comment: '', commentText: '', created: 0 } + // ] +}).catch(function (err) { + // If an error occurs + console.error(err); +});
twikoo.getRecentComments({ + envId: '您的环境id', // Tencent CloudBase Environment ID + // region: 'ap-guangzhou', // Environment locale, default is ap-shanghai, if your environment locale is not Shanghai, you need to pass this parameter + pageSize: 10, // Get how many bars, the default parameter is 10, the maximum parameter is 100 + includeReply: false // Whether to include the latest reply, the default parameter is false +}).then(function (res) { + console.log(res); + // Returns Array with the latest comments + // * id: comment ID + // * url: address of the comment + // * nick: nickname + // * mailMd5: The MD5 value of the mailbox, which can be used to display the avatar + // * link: URL + // * comment: the content of the comment in HTML format + // * commentText: comment content in plain text format + // * created: comment time, in millisecond timestamp format + // * avatar: the address of the avatar (new in 0.2.9) + // * relativeTime: relative comment time, e.g. "1 hour ago" (new in 0.2.9) + // Return example: [ // order from new to old + // { id: '', url: '', nick: '', mailMd5: '', link: '', comment: '', commentText: '', created: 0 } + // { id: '', url: '', nick: '', mailMd5: '', link: '', comment: '', commentText: '', created: 0 }, + // { id: '', url: '', nick: '', mailMd5: '', link: '', comment: '', commentText: '', created: 0 } + // ] +}).catch(function (err) { + // If an error occurs + console.error(err); +});
On Twikoo loaded
Callback function after Twikoo is successfully mounted.
It will not be triggered in case of environment ID error, network exception, mount failure, etc.Version
>= 0.5.2
Example
jstwikoo.init({ + ...... +}).then(function () { + console.log('Twikoo is ready to go!'); +});
twikoo.init({ + ...... +}).then(function () { + console.log('Twikoo is ready to go!'); +});
On comment loaded
Callback function after comments are loaded successfully.
It will also be triggered when the comment is automatically refreshed after posting and when the next page of comments is loaded.
It will not be triggered when the comment fails to load.Version
>= 0.5.2
Example
js`,27),p=[o];function t(c,r,i,E,y,m){return n(),a("div",null,p)}const u=s(e,[["render",t]]);export{h as __pageData,u as default}; diff --git a/assets/en_api.md.859770f8.lean.js b/assets/en_api.md.859770f8.lean.js new file mode 100644 index 000000000..78c4a4bd2 --- /dev/null +++ b/assets/en_api.md.859770f8.lean.js @@ -0,0 +1 @@ +import{_ as s,o as n,c as a,Q as l}from"./chunks/framework.7d2df8c6.js";const h=JSON.parse('{"title":"API reference","description":"","frontmatter":{},"headers":[],"relativePath":"en/api.md","filePath":"en/api.md","lastUpdated":null}'),e={name:"en/api.md"},o=l("",27),p=[o];function t(c,r,i,E,y,m){return n(),a("div",null,p)}const u=s(e,[["render",t]]);export{h as __pageData,u as default}; diff --git a/assets/en_backend.md.9b42e72a.js b/assets/en_backend.md.9b42e72a.js new file mode 100644 index 000000000..ec851021a --- /dev/null +++ b/assets/en_backend.md.9b42e72a.js @@ -0,0 +1 @@ +import{_ as e,o as t,c as a}from"./chunks/framework.7d2df8c6.js";const l=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/backend.md","filePath":"en/backend.md","lastUpdated":null}'),n={name:"en/backend.md"};function c(r,o,s,d,p,_){return t(),a("div")}const m=e(n,[["render",c]]);export{l as __pageData,m as default}; diff --git a/assets/en_backend.md.9b42e72a.lean.js b/assets/en_backend.md.9b42e72a.lean.js new file mode 100644 index 000000000..ec851021a --- /dev/null +++ b/assets/en_backend.md.9b42e72a.lean.js @@ -0,0 +1 @@ +import{_ as e,o as t,c as a}from"./chunks/framework.7d2df8c6.js";const l=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/backend.md","filePath":"en/backend.md","lastUpdated":null}'),n={name:"en/backend.md"};function c(r,o,s,d,p,_){return t(),a("div")}const m=e(n,[["render",c]]);export{l as __pageData,m as default}; diff --git a/assets/en_faq.md.0f998109.js b/assets/en_faq.md.0f998109.js new file mode 100644 index 000000000..157cc98d4 --- /dev/null +++ b/assets/en_faq.md.0f998109.js @@ -0,0 +1,33 @@ +import{_ as s}from"./chunks/katex.cb08556c.js";import{_ as e,o as a,c as t,Q as o}from"./chunks/framework.7d2df8c6.js";const f=JSON.parse('{"title":"FAQ","description":"","frontmatter":{},"headers":[],"relativePath":"en/faq.md","filePath":"en/faq.md","lastUpdated":null}'),n={name:"en/faq.md"},l=o(`twikoo.init({ + ......, + onCommentLoaded: function () { + console.log('Comment loading complete'); + } +});
twikoo.init({ + ......, + onCommentLoaded: function () { + console.log('Comment loading complete'); + } +});
FAQ
How do I change my avatar?
https://gravatar.com Register and set your avatar by email and leave the same email when commenting.
Visitors can also comment by entering their digital QQ email address and using their QQ avatar.
How do I change or reset the administrator password?
云开发控制台Edit the configuration, delete the
config.ADMIN_PASS
configuration item, and then go to the Twikoo administration panel to reset the password.How to get the private key file of the admin panel?
- 环境-登录授权Click "Private Key Download" on the right of "Custom Login" to download the private key file
- Open the private key file with a text editor and copy all the contents
- Click the "pinion" (settings) icon in the comment window, paste the contents of the private key file, and set the administrator password
How to turn on article visit statistics?
You can add where you need to show the number of article visits:
html<span id="twikoo_visitors">0</span>
<span id="twikoo_visitors">0</span>
to display the number of visits. We do not support site-wide visit statistics at the moment.
How can I test if the Akismet anti-spam configuration is in effect?
Please fill in
viagra-test-123
as a nickname, orakismet-guaranteed-spam@example.com
as an email address to post a comment, which will definitely be considered as a spam comment.Note that due to the slow response time of the Akismet service (about 6 seconds), which affects the user experience, Twikoo adopts a "release first, detect later" policy, and spam comments will be visible for a short time after they are posted.
How are free resources calculated?
环境总览See resource usage. twikoo consumes database and cloud functions, both with a free usage of -
- Database: 50,000 reads/day, 50,000 writes/day
- Cloud functions: 40,000 GBs/month
The memory consumption of Twikoo cloud functions is constant at 0.1GB, which means that Twikoo cloud functions have a running time of up to 400,000 seconds per month, and the bottleneck of free resources is mainly in the daily read limit of the database. It is recommended that webmasters pay attention to the usage of free resources.
How do I enable Katex support?
Twikoo supports Katex formulas, but to limit the package size of Twikoo, Twikoo does not have the full Katex built-in, you need to load katex.js additionally in the page.
example
html<head> + <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.12.0/dist/katex.min.css" integrity="sha384-AfEj0r4/OFrOo5t7NnNe46zW/tFgW6x/bCJG8FqQCEo3+Aro6EYUG4+cU+KJWu/X" crossorigin="anonymous"> + <script defer src="https://cdn.jsdelivr.net/npm/katex@0.12.0/dist/katex.min.js" integrity="sha384-g7c+Jr9ZivxKLnZTDUhnkOnsh30B4H0rpLUpJ4jAIKs4fnJI+sEnkvrMWph2EDg4" crossorigin="anonymous"></script> + <script defer src="https://cdn.jsdelivr.net/npm/katex@0.12.0/dist/contrib/auto-render.min.js" integrity="sha384-mll67QQFJfxn0IYznZYonOWZ644AWYC+Pt2cHqMaRhXVrursRwvLnLaebdGIlYNa" crossorigin="anonymous"></script> +</head>
<head> + <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.12.0/dist/katex.min.css" integrity="sha384-AfEj0r4/OFrOo5t7NnNe46zW/tFgW6x/bCJG8FqQCEo3+Aro6EYUG4+cU+KJWu/X" crossorigin="anonymous"> + <script defer src="https://cdn.jsdelivr.net/npm/katex@0.12.0/dist/katex.min.js" integrity="sha384-g7c+Jr9ZivxKLnZTDUhnkOnsh30B4H0rpLUpJ4jAIKs4fnJI+sEnkvrMWph2EDg4" crossorigin="anonymous"></script> + <script defer src="https://cdn.jsdelivr.net/npm/katex@0.12.0/dist/contrib/auto-render.min.js" integrity="sha384-mll67QQFJfxn0IYznZYonOWZ644AWYC+Pt2cHqMaRhXVrursRwvLnLaebdGIlYNa" crossorigin="anonymous"></script> +</head>
After loading, you can send
$$c = \\pm\\sqrt{a^2 + b^2}$$
to test the effect.You can also pass in a custom katex configuration during
twikoo.init
, see Katex Auto-render Extension for details.jstwikoo.init({ + envId: 'Environment id', + el: '#tcomment', + katex: { + delimiters: [ + { left: '$$', right: '$$', display: true }, + { left: '$', right: '$', display: false }, + { left: '\\\\(', right: '\\\\)', display: false }, + { left: '\\\\[', right: '\\\\]', display: true } + ], + throwOnError: false + } +});
twikoo.init({ + envId: 'Environment id', + el: '#tcomment', + katex: { + delimiters: [ + { left: '$$', right: '$$', display: true }, + { left: '$', right: '$', display: false }, + { left: '\\\\(', right: '\\\\)', display: false }, + { left: '\\\\[', right: '\\\\]', display: true } + ], + throwOnError: false + } +});
How to configure anti-spam?
Using Tencent Cloud Content Security Service
Twikoo supports access to Tencent Cloud Text Content Detection, which uses deep learning technology to identify harmful content involving pornography, politics, terrorism, etc. It also supports user-configurable thesaurus to combat customized offending text.
Tencent Cloud text content detection is a paid service, offering a 1-month free trial, after which the price is 25 RMB per 10,000 entries. If you don't have high requirements for anti-spam comments, you can also use the free Akismet.
How to apply for Tencent Cloud Text Content Inspection?
- Visit Tencent Cloud Console - Text Content Security to open the text content security service
- Visit Tencent Cloud Console - User List, click New User, and click Quick Create.
- Enter the user name, select "Programmatic Access" as the access method, cancel "AdministratorAccess" as the user privilege, and only check the box "QcloudCMSFullAccess". QcloudCMSFullAccess".
- Click "Create User". 5.
- Copy the "SecretId" and "SecretKey" from the "Successful New User" page to the Twikoo administration panel Configure them in the "Anti-Spam" module
- Test the anti-spam effect
After success, webmasters can configure custom text content filtering in Tencent Cloud Console - Custom Library Management.
Using Akismet Anti-Spam Service
Akismet (Automattic Kismet) is a widely used spam filtering system by Matt Mullenweg, the founder of WordPress, Akismet is also the default plugin installed in WordPress and is very widely used. The goal of the design is to help blog sites to filter spam messages.
- Register akismet.com
- Select Akismet Personal subscription, copy the Akismet API Key and configure it in the Twikoo admin panel "Anti-Spam" module
Error encountered in login administration panel AUTH_INVALID_CUSTOM_LOGIN_TICKET
Generally, after configuring the login private key, the login private key is downloaded again, which causes the previously configured login private key to be invalid.
Solution: Go to Cloud Development Console, database, delete the config, and then reconfigure the private key.Can't receive emails?
If it is a cloud function deployed by Vercel, please configure foreign mail service providers to avoid being judged as spam behavior by mail service providers. If it is other reasons, please go to Twikoo management panel, find mail test function, enter your personal mailbox and troubleshoot the reasons according to the test results.
In order to avoid performance problems caused by frequent mailbox checking, the mail configuration has a cache of about 10 minutes, if you are sure the configuration is fine but the test fails, you can wait for 10 minutes and then test again.
Vercel can't upload images?
The Tencent Cloud environment comes with cloud storage, so you can upload images directly in the Tencent Cloud environment, and the images are saved in the cloud storage. However, Vercel environment does not, the upload image function relies on third party image bed, please configure the image bed in the admin panel, Twikoo supports the following image bed:
Bed Address Features qcloud None Tencent Cloud environment comes with it, can be viewed in Cloud Development - Cloud Storage 7bu https://7bu.top Go to No Bed, powered by 杜老师, no free packages smms https://sm.ms SMMS image bed, there is a free package, please register your account, IMAGE_CDN_TOKEN
can be obtained in Dashboardlsky-pro Private Deployment LankenGraphics 2.0 version, IMAGE_CDN
please configure the URL address of the home page of the graph bed (such ashttps://7bu.top
),IMAGE_CDN_TOKEN
get way please refer to the tutorial 杜老师 said the graph bed: new version Go not to the bed Token acquisition and emptying, the format of the obtained token should be1|1bJbwlqBfnggmOMEZqXT5XusaIwqiZjCDs7r1Ob5
)Can it be deployed privately?
Yes.
`,47),r=[l];function p(i,c,d,h,y,u){return a(),t("div",null,r)}const g=e(n,[["render",p]]);export{f as __pageData,g as default}; diff --git a/assets/en_faq.md.0f998109.lean.js b/assets/en_faq.md.0f998109.lean.js new file mode 100644 index 000000000..9ceeaf304 --- /dev/null +++ b/assets/en_faq.md.0f998109.lean.js @@ -0,0 +1 @@ +import{_ as s}from"./chunks/katex.cb08556c.js";import{_ as e,o as a,c as t,Q as o}from"./chunks/framework.7d2df8c6.js";const f=JSON.parse('{"title":"FAQ","description":"","frontmatter":{},"headers":[],"relativePath":"en/faq.md","filePath":"en/faq.md","lastUpdated":null}'),n={name:"en/faq.md"},l=o("",47),r=[l];function p(i,c,d,h,y,u){return a(),t("div",null,r)}const g=e(n,[["render",p]]);export{f as __pageData,g as default}; diff --git a/assets/en_frontend.md.0a1db1d9.js b/assets/en_frontend.md.0a1db1d9.js new file mode 100644 index 000000000..1b2902f63 --- /dev/null +++ b/assets/en_frontend.md.0a1db1d9.js @@ -0,0 +1 @@ +import{_ as e,o as t,c as n}from"./chunks/framework.7d2df8c6.js";const i=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/frontend.md","filePath":"en/frontend.md","lastUpdated":null}'),a={name:"en/frontend.md"};function r(o,s,d,c,f,p){return t(),n("div")}const l=e(a,[["render",r]]);export{i as __pageData,l as default}; diff --git a/assets/en_frontend.md.0a1db1d9.lean.js b/assets/en_frontend.md.0a1db1d9.lean.js new file mode 100644 index 000000000..1b2902f63 --- /dev/null +++ b/assets/en_frontend.md.0a1db1d9.lean.js @@ -0,0 +1 @@ +import{_ as e,o as t,c as n}from"./chunks/framework.7d2df8c6.js";const i=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/frontend.md","filePath":"en/frontend.md","lastUpdated":null}'),a={name:"en/frontend.md"};function r(o,s,d,c,f,p){return t(),n("div")}const l=e(a,[["render",r]]);export{i as __pageData,l as default}; diff --git a/assets/en_index.md.ede44249.js b/assets/en_index.md.ede44249.js new file mode 100644 index 000000000..2d1e6fc5c --- /dev/null +++ b/assets/en_index.md.ede44249.js @@ -0,0 +1 @@ +import{_ as e,o as t,c as i}from"./chunks/framework.7d2df8c6.js";const p=JSON.parse('{"title":"Twikoo","titleTemplate":"A simple, safe, free comment system","description":"","frontmatter":{"layout":"home","title":"Twikoo","titleTemplate":"A simple, safe, free comment system","hero":{"name":"Twikoo","text":"Comment system","tagline":"Simple, safe, free","actions":[{"theme":"brand","text":"Quick start","link":"/en/quick-start"},{"theme":"alt","text":"Introduction","link":"/en/intro"},{"theme":"alt","text":"View on GitHub","link":"https://github.com/twikoojs/twikoo"}],"image":{"src":"/twikoo-logo-home.png","alt":"Twikoo"}},"features":[{"icon":"🚀","title":"简单","details":"免费搭建,简单部署"},{"icon":"😃","title":"易用","details":"功能丰富,兼容性强"},{"icon":"🛡️","title":"安全","details":"隐私安全,内容安全"},{"icon":"⏰","title":"即时","details":"邮件提醒,即时消息推送"},{"icon":"🌈","title":"个性","details":"自定义背景图,博主标识"},{"icon":"⚙️","title":"便捷管理","details":"内嵌式管理面板,通过密码登录"}]},"headers":[],"relativePath":"en/index.md","filePath":"en/index.md","lastUpdated":null}'),o={name:"en/index.md"};function n(a,s,l,m,c,r){return t(),i("div")}const f=e(o,[["render",n]]);export{p as __pageData,f as default}; diff --git a/assets/en_index.md.ede44249.lean.js b/assets/en_index.md.ede44249.lean.js new file mode 100644 index 000000000..2d1e6fc5c --- /dev/null +++ b/assets/en_index.md.ede44249.lean.js @@ -0,0 +1 @@ +import{_ as e,o as t,c as i}from"./chunks/framework.7d2df8c6.js";const p=JSON.parse('{"title":"Twikoo","titleTemplate":"A simple, safe, free comment system","description":"","frontmatter":{"layout":"home","title":"Twikoo","titleTemplate":"A simple, safe, free comment system","hero":{"name":"Twikoo","text":"Comment system","tagline":"Simple, safe, free","actions":[{"theme":"brand","text":"Quick start","link":"/en/quick-start"},{"theme":"alt","text":"Introduction","link":"/en/intro"},{"theme":"alt","text":"View on GitHub","link":"https://github.com/twikoojs/twikoo"}],"image":{"src":"/twikoo-logo-home.png","alt":"Twikoo"}},"features":[{"icon":"🚀","title":"简单","details":"免费搭建,简单部署"},{"icon":"😃","title":"易用","details":"功能丰富,兼容性强"},{"icon":"🛡️","title":"安全","details":"隐私安全,内容安全"},{"icon":"⏰","title":"即时","details":"邮件提醒,即时消息推送"},{"icon":"🌈","title":"个性","details":"自定义背景图,博主标识"},{"icon":"⚙️","title":"便捷管理","details":"内嵌式管理面板,通过密码登录"}]},"headers":[],"relativePath":"en/index.md","filePath":"en/index.md","lastUpdated":null}'),o={name:"en/index.md"};function n(a,s,l,m,c,r){return t(),i("div")}const f=e(o,[["render",n]]);export{p as __pageData,f as default}; diff --git a/assets/en_intro.md.b281b522.js b/assets/en_intro.md.b281b522.js new file mode 100644 index 000000000..4becc84b4 --- /dev/null +++ b/assets/en_intro.md.b281b522.js @@ -0,0 +1,5 @@ +import{_ as e,a,b as t,c as o}from"./chunks/readme-3.368c86c7.js";import{_ as i,o as l,c as s,Q as n}from"./chunks/framework.7d2df8c6.js";const w=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/intro.md","filePath":"en/intro.md","lastUpdated":null}'),r={name:"en/intro.md"},p=n('
A simple, safe, free comment system.
简体中文 | EnglishThis document is for American English. This document has many bugs.
Features
Simple
- Free Build.(Using CloudBase / Vercel / self-hosted as the commenting backend)
- Simple Deployment.(Support CloudBase / Vercel one-click deployment)
Easy to use
- Support reply, like.
- No additional adaptations, support with light theme and dark theme use.
- Support API , batch get article comment count, latest comments.
- Visitors entering QQ number in the nickname field will automatically complete the QQ nickname and QQ email.
- Visitors fill in the digital QQ e-mail, will use the QQ avatar as the comment avatar.
- Support the comment to paste pictures.(Can be disabled)
- Support inserting pictures.(Can be disabled)
- Support 7bu image bed, Tencent CloudBase image bed.
- Support inserting emoji.(Can be disabled)
- Support Ctrl + Enter reply.
- Comments are saved in draft in real time and will not be lost when refreshed.
- Support Katex formulas.
- Support for code highlighting by language.
Security
- Privacy and information security. (sensitive fields (email, IP, environment configuration, etc.) are not leaked through Tencent cloud function control)
- Support for Akismet spam comment detection.(View Details akismet.com)
- Support Tencent Cloud content security spam comment detection.(View Details Tencent Cloud Content Security)
- Support manual review mode.
- Anti XSS Attack.
- Support for limiting the maximum number of comments per IP per 10 minutes.
notification
Personalization
- Background image.
- the "blogger" logo text.
- Notification Email Template.
- Comment prompt message.(placeholder)
- emoji(OwO 的数据格式)
- 【Nickname】 【Email】 【Website】 Required / Optional
- Code highlighting theme.
Management
- Embedded panel with password login to easily view comments, hide comments, delete comments and modify configuration.
- Support to hide the management portal and show it by entering a secret code.
- Support for importing comments from Valine, Artalk, Disqus.
Disadvantages
- IE is not supported.
Preview
Comments
Management
Notification
Quick Start
If you want to get updates, make suggestions and participate in the test, welcome to join the discussion group:1080829142 (QQ)
Special Thanks
Icon design:Maemo Lee
Release notes & plans
Update logs & Development Plan
Development
If you want to develop locally for a second time, you can refer to the following commands:
shyarn dev # (http://localhost:9820/demo.html) +yarn lint +yarn build # (dist/twikoo.all.min.js)
yarn dev # (http://localhost:9820/demo.html) +yarn lint +yarn build # (dist/twikoo.all.min.js)
If your changes can help more people, feel free to submit a Pull Request!
I18N
Support Simplified Chinese, Traditional Chinese, English. translate Pull Request.
License
`,47),c=[p];function m(h,d,u,g,f,b){return l(),s("div",null,c)}const _=i(r,[["render",m]]);export{w as __pageData,_ as default}; diff --git a/assets/en_intro.md.b281b522.lean.js b/assets/en_intro.md.b281b522.lean.js new file mode 100644 index 000000000..0136b876f --- /dev/null +++ b/assets/en_intro.md.b281b522.lean.js @@ -0,0 +1 @@ +import{_ as e,a,b as t,c as o}from"./chunks/readme-3.368c86c7.js";import{_ as i,o as l,c as s,Q as n}from"./chunks/framework.7d2df8c6.js";const w=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/intro.md","filePath":"en/intro.md","lastUpdated":null}'),r={name:"en/intro.md"},p=n("",47),c=[p];function m(h,d,u,g,f,b){return l(),s("div",null,c)}const _=i(r,[["render",m]]);export{w as __pageData,_ as default}; diff --git a/assets/en_link.md.c1f0a322.js b/assets/en_link.md.c1f0a322.js new file mode 100644 index 000000000..d51a0b8b6 --- /dev/null +++ b/assets/en_link.md.c1f0a322.js @@ -0,0 +1 @@ +import{_ as a,o as t,c as n,k as e,a as s}from"./chunks/framework.7d2df8c6.js";const f=JSON.parse('{"title":"Links","description":"","frontmatter":{},"headers":[],"relativePath":"en/link.md","filePath":"en/link.md","lastUpdated":null}'),i={name:"en/link.md"},o=e("h1",{id:"links",tabindex:"-1"},[s("Links "),e("a",{class:"header-anchor",href:"#links","aria-label":'Permalink to "Links"'},"")],-1),r=[o];function l(c,d,_,k,p,h){return t(),n("div",null,r)}const u=a(i,[["render",l]]);export{f as __pageData,u as default}; diff --git a/assets/en_link.md.c1f0a322.lean.js b/assets/en_link.md.c1f0a322.lean.js new file mode 100644 index 000000000..d51a0b8b6 --- /dev/null +++ b/assets/en_link.md.c1f0a322.lean.js @@ -0,0 +1 @@ +import{_ as a,o as t,c as n,k as e,a as s}from"./chunks/framework.7d2df8c6.js";const f=JSON.parse('{"title":"Links","description":"","frontmatter":{},"headers":[],"relativePath":"en/link.md","filePath":"en/link.md","lastUpdated":null}'),i={name:"en/link.md"},o=e("h1",{id:"links",tabindex:"-1"},[s("Links "),e("a",{class:"header-anchor",href:"#links","aria-label":'Permalink to "Links"'},"")],-1),r=[o];function l(c,d,_,k,p,h){return t(),n("div",null,r)}const u=a(i,[["render",l]]);export{f as __pageData,u as default}; diff --git a/assets/en_quick-start.md.78b76bc9.js b/assets/en_quick-start.md.78b76bc9.js new file mode 100644 index 000000000..ed5c06915 --- /dev/null +++ b/assets/en_quick-start.md.78b76bc9.js @@ -0,0 +1 @@ +import{_ as t,o as e,c as a,Q as s}from"./chunks/framework.7d2df8c6.js";const k=JSON.parse('{"title":"Quick start","description":"","frontmatter":{},"headers":[],"relativePath":"en/quick-start.md","filePath":"en/quick-start.md","lastUpdated":null}'),c={name:"en/quick-start.md"},i=s('Quick start
',2),r=[i];function o(n,_,l,u,d,p){return e(),a("div",null,r)}const m=t(c,[["render",o]]);export{k as __pageData,m as default}; diff --git a/assets/en_quick-start.md.78b76bc9.lean.js b/assets/en_quick-start.md.78b76bc9.lean.js new file mode 100644 index 000000000..daf3491a3 --- /dev/null +++ b/assets/en_quick-start.md.78b76bc9.lean.js @@ -0,0 +1 @@ +import{_ as t,o as e,c as a,Q as s}from"./chunks/framework.7d2df8c6.js";const k=JSON.parse('{"title":"Quick start","description":"","frontmatter":{},"headers":[],"relativePath":"en/quick-start.md","filePath":"en/quick-start.md","lastUpdated":null}'),c={name:"en/quick-start.md"},i=s("",2),r=[i];function o(n,_,l,u,d,p){return e(),a("div",null,r)}const m=t(c,[["render",o]]);export{k as __pageData,m as default}; diff --git a/assets/en_update.md.4ed189a6.js b/assets/en_update.md.4ed189a6.js new file mode 100644 index 000000000..4d6d72ef0 --- /dev/null +++ b/assets/en_update.md.4ed189a6.js @@ -0,0 +1 @@ +import{_ as e,o as t,c as a}from"./chunks/framework.7d2df8c6.js";const l=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/update.md","filePath":"en/update.md","lastUpdated":null}'),n={name:"en/update.md"};function r(o,s,d,p,c,_){return t(),a("div")}const m=e(n,[["render",r]]);export{l as __pageData,m as default}; diff --git a/assets/en_update.md.4ed189a6.lean.js b/assets/en_update.md.4ed189a6.lean.js new file mode 100644 index 000000000..4d6d72ef0 --- /dev/null +++ b/assets/en_update.md.4ed189a6.lean.js @@ -0,0 +1 @@ +import{_ as e,o as t,c as a}from"./chunks/framework.7d2df8c6.js";const l=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/update.md","filePath":"en/update.md","lastUpdated":null}'),n={name:"en/update.md"};function r(o,s,d,p,c,_){return t(),a("div")}const m=e(n,[["render",r]]);export{l as __pageData,m as default}; diff --git a/assets/faq.md.966fba69.js b/assets/faq.md.966fba69.js new file mode 100644 index 000000000..27de98c34 --- /dev/null +++ b/assets/faq.md.966fba69.js @@ -0,0 +1,33 @@ +import{_ as s}from"./chunks/katex.cb08556c.js";import{_ as a,o as n,c as o,Q as l}from"./chunks/framework.7d2df8c6.js";const m=JSON.parse('{"title":"常见问题","description":"","frontmatter":{},"headers":[],"relativePath":"faq.md","filePath":"faq.md","lastUpdated":null}'),t={name:"faq.md"},e=l(`Tip
The English document is being built. Please refer to the Chinese document.
常见问题
如何修改头像?
请前往 https://cravatar.cn 通过邮箱注册并设定头像,评论时,请留下相同的邮箱。
访客还可以通过输入数字 QQ 邮箱地址,使用 QQ 头像发表评论。
如何修改、重置管理员密码?
腾讯云请前往云开发控制台,Vercel 请前往 MongoDB,私有部署请直接编辑
data/db.json.1
,编辑配置,删除 config.ADMIN_PASS 配置项,然后前往 Twikoo 管理面板重新设置密码。如何获得管理面板的私钥文件?
- 进入环境-登录授权,点击“自定义登录”右边的“私钥下载”,下载私钥文件
- 用文本编辑器打开私钥文件,复制全部内容
- 点击评论窗口的“小齿轮”图标,粘贴私钥文件内容,并设置管理员密码
如何开启文章访问量统计?
您可以在需要展示文章访问量的地方添加:
html<span id="twikoo_visitors">0</span>
<span id="twikoo_visitors">0</span>
来展示访问量。暂不支持全站访问量统计。
如何启用 Katex 支持?
Twikoo 支持 Katex 公式,但为了限制 Twikoo 的包大小,Twikoo 没有内置完整的 Katex,您需要在页面中额外加载 katex.js。
html<head> + <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.12.0/dist/katex.min.css" integrity="sha384-AfEj0r4/OFrOo5t7NnNe46zW/tFgW6x/bCJG8FqQCEo3+Aro6EYUG4+cU+KJWu/X" crossorigin="anonymous"> + <script defer src="https://cdn.jsdelivr.net/npm/katex@0.12.0/dist/katex.min.js" integrity="sha384-g7c+Jr9ZivxKLnZTDUhnkOnsh30B4H0rpLUpJ4jAIKs4fnJI+sEnkvrMWph2EDg4" crossorigin="anonymous"></script> + <script defer src="https://cdn.jsdelivr.net/npm/katex@0.12.0/dist/contrib/auto-render.min.js" integrity="sha384-mll67QQFJfxn0IYznZYonOWZ644AWYC+Pt2cHqMaRhXVrursRwvLnLaebdGIlYNa" crossorigin="anonymous"></script> +</head>
<head> + <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.12.0/dist/katex.min.css" integrity="sha384-AfEj0r4/OFrOo5t7NnNe46zW/tFgW6x/bCJG8FqQCEo3+Aro6EYUG4+cU+KJWu/X" crossorigin="anonymous"> + <script defer src="https://cdn.jsdelivr.net/npm/katex@0.12.0/dist/katex.min.js" integrity="sha384-g7c+Jr9ZivxKLnZTDUhnkOnsh30B4H0rpLUpJ4jAIKs4fnJI+sEnkvrMWph2EDg4" crossorigin="anonymous"></script> + <script defer src="https://cdn.jsdelivr.net/npm/katex@0.12.0/dist/contrib/auto-render.min.js" integrity="sha384-mll67QQFJfxn0IYznZYonOWZ644AWYC+Pt2cHqMaRhXVrursRwvLnLaebdGIlYNa" crossorigin="anonymous"></script> +</head>
载入后,您可以发送
$$c = \\pm\\sqrt{a^2 + b^2}$$
测试效果。您还可以在
twikoo.init
时传入自定义 katex 配置,详细配置请查看 Katex Auto-render Extension。jstwikoo.init({ + envId: '您的环境id', + el: '#tcomment', + katex: { + delimiters: [ + { left: '$$', right: '$$', display: true }, + { left: '$', right: '$', display: false }, + { left: '\\\\(', right: '\\\\)', display: false }, + { left: '\\\\[', right: '\\\\]', display: true } + ], + throwOnError: false + } +});
twikoo.init({ + envId: '您的环境id', + el: '#tcomment', + katex: { + delimiters: [ + { left: '$$', right: '$$', display: true }, + { left: '$', right: '$', display: false }, + { left: '\\\\(', right: '\\\\)', display: false }, + { left: '\\\\[', right: '\\\\]', display: true } + ], + throwOnError: false + } +});
如何配置反垃圾?
使用腾讯云内容安全服务
Twikoo 支持接入腾讯云文本内容检测,使用深度学习技术,识别涉黄、涉政、涉恐等有害内容,同时支持用户配置词库,打击自定义的违规文本。
腾讯云文本内容检测是付费服务,提供 1 个月的免费试用,之后价格为 25 元/万条。如果您对反垃圾评论要求不高,也可以使用免费的 Akismet。
如何申请腾讯云文本内容检测
- 访问腾讯云控制台-文本内容安全,开通文本内容安全服务
- 访问腾讯云控制台-用户列表,点击新建用户,点击快速创建
- 输入用户名,访问方式选择“编程访问”,用户权限取消“AdministratorAccess”,只勾选“QcloudCMSFullAccess”
- 点击“创建用户”
- 复制“成功新建用户”页面的“SecretId”和“SecretKey”,到 Twikoo 管理面板“反垃圾”模块中配置
- 测试反垃圾效果
成功后,站长可以在腾讯云控制台-自定义库管理配置自定义文本内容过滤。
使用 Akismet 反垃圾服务
Akismet (Automattic Kismet) 是应用广泛的一个垃圾留言过滤系统,其作者是大名鼎鼎的 WordPress 创始人 Matt Mullenweg,Akismet 也是 WordPress 默认安装的插件,其使用非常广泛,设计目标便是帮助博客网站来过滤垃圾留言。
- 注册 akismet.com
- 选择 Akismet Personal 订阅,复制得到的 Akismet API Key,到 Twikoo 管理面板“反垃圾”模块中配置
如何测试 Akismet 反垃圾配置是否生效?
请填写
viagra-test-123
作为昵称,或填写akismet-guaranteed-spam@example.com
作为邮箱,发表评论,这条评论将一定会被视为垃圾评论。需要注意的是,由于 Akismet 服务响应速度较慢(大约 6 秒),影响用户体验,Twikoo 采取 “先放行,后检测” 的策略,垃圾评论会在发表后短暂可见。
登录管理面板遇到错误 AUTH_INVALID_CUSTOM_LOGIN_TICKET
一般是配置好登录私钥之后,又重新下载了登录私钥,导致之前配置的登录私钥失效了。
解决方法:到云开发控制台,数据库,删掉 config,然后重新配置私钥。收不到提醒邮件?
如果是 Vercel 部署的云函数,请配置国外邮件服务商,避免被邮件服务商判定为垃圾邮件行为。如果是其他原因,请前往 Twikoo 管理面板,找到邮件测试功能,输入个人邮箱,根据测试结果排查原因。
为了避免频繁检查邮箱带来的性能问题,邮件配置有 10 分钟左右的缓存,如果确定配置没有问题,但测试失败,可以等待 10 分钟后再测试。
由于博主发表评论时,不会通知博主,如果您想实际测试通知功能,请注销管理面板后用非博主邮箱发表或回复评论。
Vercel、私有部署无法上传图片?
腾讯云环境自带云存储,所以腾讯云环境下可以直接上传图片,图片保存在云存储中。然而 Vercel 环境没有,上传图片功能依赖第三方图床,请在管理面板中配置图床,Twikoo 支持以下图床:
图床 地址 特点 qcloud 无 腾讯云环境自带,可在云开发 - 云存储中查看 7bu https://7bu.top 去不图床,由杜老师提供支持,无免费套餐 smms https://sm.ms SMMS 图床,有免费套餐,请自行注册账号, IMAGE_CDN_TOKEN
可在 Dashboard 中获取lsky-pro 私有部署 兰空图床 2.0 版本, IMAGE_CDN
请配置图床首页 URL 地址(如https://7bu.top
),IMAGE_CDN_TOKEN
获取方式请参考教程 杜老师说图床:新版本去不图床 Token 的获取与清空,获取到的 token 格式应为1|1bJbwlqBfnggmOMEZqXT5XusaIwqiZjCDs7r1Ob5
)私有部署能连接自己的数据库吗?
Twikoo 私有部署版默认使用内置数据库:LokiJS 数据库,支持的数据库容量大约为 1 GB,不需要连接外部数据库,数据存储在启动 twikoo 时所在目录下的 data 目录,您可以直接复制该目录以完成数据备份。
如果您有 MongoDB 实例,可以连接 MongoDB 作为外部数据库,只需配置环境变量 MONGODB_URI 为数据库连接地址即可,如:
`,44),p=[e];function r(c,E,i,y,d,h){return n(),o("div",null,p)}const k=a(t,[["render",r]]);export{m as __pageData,k as default}; diff --git a/assets/faq.md.966fba69.lean.js b/assets/faq.md.966fba69.lean.js new file mode 100644 index 000000000..1279fcd0e --- /dev/null +++ b/assets/faq.md.966fba69.lean.js @@ -0,0 +1 @@ +import{_ as s}from"./chunks/katex.cb08556c.js";import{_ as a,o as n,c as o,Q as l}from"./chunks/framework.7d2df8c6.js";const m=JSON.parse('{"title":"常见问题","description":"","frontmatter":{},"headers":[],"relativePath":"faq.md","filePath":"faq.md","lastUpdated":null}'),t={name:"faq.md"},e=l("",44),p=[e];function r(c,E,i,y,d,h){return n(),o("div",null,p)}const k=a(t,[["render",r]]);export{m as __pageData,k as default}; diff --git a/assets/frontend.md.58dfda7e.js b/assets/frontend.md.58dfda7e.js new file mode 100644 index 000000000..da418f47c --- /dev/null +++ b/assets/frontend.md.58dfda7e.js @@ -0,0 +1,35 @@ +import{_ as e,o as a,c as s,Q as o}from"./chunks/framework.7d2df8c6.js";const x=JSON.parse('{"title":"前端部署","description":"","frontmatter":{},"headers":[],"relativePath":"frontend.md","filePath":"frontend.md","lastUpdated":null}'),t={name:"frontend.md"},n=o(`mongodb://<username>:<password>@<host>/
。前端部署
在 Hexo 中使用
在 Hexo Butterfly 主题使用
请参考 Butterfly 安裝文檔(四) 主題配置-2 进行配置
在 Hexo Keep 主题使用
请参考 hexo-theme-keep/_config.yml 进行配置
在 Hexo Volantis 主题使用
请参考 hexo-theme-volantis/_config.yml 进行配置
在 Hexo Ayer 主题使用
请参考 hexo-theme-ayer/_config.yml 进行配置
在 Hexo NexT 主题使用
暂不支持 NexT 8 以下的版本,请先升级到 NexT 8。然后在 Hexo 项目根目录执行
sh# For NexT version >= 8.0.0 && < 8.4.0 +npm install hexo-next-twikoo@1.0.0 +# For NexT version >= 8.4.0 +npm install hexo-next-twikoo@1.0.3
# For NexT version >= 8.0.0 && < 8.4.0 +npm install hexo-next-twikoo@1.0.0 +# For NexT version >= 8.4.0 +npm install hexo-next-twikoo@1.0.3
然后在配置中添加
ymltwikoo: + enable: true + visitor: true + envId: xxxxxxxxxxxxxxx # 腾讯云环境填 envId;Vercel 环境填地址(https://xxx.vercel.app) + # region: ap-guangzhou # 环境地域,默认为 ap-shanghai,腾讯云环境填 ap-shanghai 或 ap-guangzhou;Vercel 环境不填
twikoo: + enable: true + visitor: true + envId: xxxxxxxxxxxxxxx # 腾讯云环境填 envId;Vercel 环境填地址(https://xxx.vercel.app) + # region: ap-guangzhou # 环境地域,默认为 ap-shanghai,腾讯云环境填 ap-shanghai 或 ap-guangzhou;Vercel 环境不填
在 Hexo Matery 主题使用
请参考 hexo-theme-matery/_config.yml 进行配置
在 Hexo Icarus 主题使用
请参考 基于腾讯云,给你的 Icarus 博客配上 Twikoo 评论系统 by 异次元de机智君💯
在 Hexo MengD(萌典) 主题使用
请参考 hexo-theme-MengD/_config.yml 进行配置
在 hexo-theme-fluid 主题使用
请参考 配置指南-评论 进行配置
在 hexo-theme-cards 主题使用
请参考 hexo-theme-cards/_config.yml 进行配置
在 maupassant-hexo 主题使用
请参考 maupassant-hexo/_config.yml 进行配置
在 hexo-theme-redefine 主题使用
请参考 Redefine 官方文档 #comment 进行配置
在 Hugo 中使用
在 hugo-theme-stack 主题使用
请参考 Comments | Stack 和 hugo-theme-stack/config.yaml#L83 进行配置
在 FixIt 主题使用
请参考 入门篇 - FixIt #主题配置 和 hugo-fixit/FixIt/config.toml#L613-L624 进行配置
通过 CDN 引入
提示
如果您使用的博客主题不支持 Twikoo,并且您不知道如何引入 Twikoo,您可以在 Github 提交适配请求
html<div id="tcomment"></div> +<script src="https://cdn.staticfile.org/twikoo/1.6.22/twikoo.all.min.js"></script> +<script> +twikoo.init({ + envId: '您的环境id', // 腾讯云环境填 envId;Vercel 环境填地址(https://xxx.vercel.app) + el: '#tcomment', // 容器元素 + // region: 'ap-guangzhou', // 环境地域,默认为 ap-shanghai,腾讯云环境填 ap-shanghai 或 ap-guangzhou;Vercel 环境不填 + // path: location.pathname, // 用于区分不同文章的自定义 js 路径,如果您的文章路径不是 location.pathname,需传此参数 + // lang: 'zh-CN', // 用于手动设定评论区语言,支持的语言列表 https://github.com/twikoojs/twikoo/blob/main/src/client/utils/i18n/index.js +}) +</script>
<div id="tcomment"></div> +<script src="https://cdn.staticfile.org/twikoo/1.6.22/twikoo.all.min.js"></script> +<script> +twikoo.init({ + envId: '您的环境id', // 腾讯云环境填 envId;Vercel 环境填地址(https://xxx.vercel.app) + el: '#tcomment', // 容器元素 + // region: 'ap-guangzhou', // 环境地域,默认为 ap-shanghai,腾讯云环境填 ap-shanghai 或 ap-guangzhou;Vercel 环境不填 + // path: location.pathname, // 用于区分不同文章的自定义 js 路径,如果您的文章路径不是 location.pathname,需传此参数 + // lang: 'zh-CN', // 用于手动设定评论区语言,支持的语言列表 https://github.com/twikoojs/twikoo/blob/main/src/client/utils/i18n/index.js +}) +</script>
建议使用 CDN 引入 Twikoo 的用户在链接地址上锁定版本,以免将来 Twikoo 升级时受到非兼容性更新的影响。
更换 CDN 镜像
如果遇到默认 CDN 加载速度缓慢,可更换其他 CDN 镜像。以下为可供选择的公共 CDN,其中一些 CDN 可能需要数天时间同步最新版本:
https://cdn.staticfile.org/twikoo/1.6.22/twikoo.all.min.js
https://lib.baomitu.com/twikoo/1.6.22/twikoo.all.min.js
https://cdn.bootcdn.net/ajax/libs/twikoo/1.6.22/twikoo.all.min.js
https://cdn.jsdelivr.net/npm/twikoo@1.6.22/dist/twikoo.all.min.js
开启管理面板(腾讯云环境)
- 进入环境-登录授权,点击“自定义登录”右边的“私钥下载”,下载私钥文件
- 用文本编辑器打开私钥文件,复制全部内容
- 点击评论窗口的“小齿轮”图标,粘贴私钥文件内容,并设置管理员密码
配置好登录私钥之后无需留存私钥文件,请勿再次下载登录私钥,否则会导致之前配置的登录私钥失效。
开启管理面板(非腾讯云环境)
点击评论窗口的“小齿轮”图标,设置管理员密码
`,46),l=[n];function r(p,c,h,i,m,u){return a(),s("div",null,l)}const y=e(t,[["render",r]]);export{x as __pageData,y as default}; diff --git a/assets/frontend.md.58dfda7e.lean.js b/assets/frontend.md.58dfda7e.lean.js new file mode 100644 index 000000000..79ba7bf98 --- /dev/null +++ b/assets/frontend.md.58dfda7e.lean.js @@ -0,0 +1 @@ +import{_ as e,o as a,c as s,Q as o}from"./chunks/framework.7d2df8c6.js";const x=JSON.parse('{"title":"前端部署","description":"","frontmatter":{},"headers":[],"relativePath":"frontend.md","filePath":"frontend.md","lastUpdated":null}'),t={name:"frontend.md"},n=o("",46),l=[n];function r(p,c,h,i,m,u){return a(),s("div",null,l)}const y=e(t,[["render",r]]);export{x as __pageData,y as default}; diff --git a/assets/index.md.1464a105.js b/assets/index.md.1464a105.js new file mode 100644 index 000000000..10d2d5ac3 --- /dev/null +++ b/assets/index.md.1464a105.js @@ -0,0 +1 @@ +import{_ as t,o as e,c as i}from"./chunks/framework.7d2df8c6.js";const p=JSON.parse('{"title":"Twikoo","titleTemplate":"一个简洁、安全、免费的静态网站评论系统","description":"","frontmatter":{"layout":"home","title":"Twikoo","titleTemplate":"一个简洁、安全、免费的静态网站评论系统","hero":{"name":"Twikoo","text":"网站评论系统","tagline":"简洁、安全、免费","actions":[{"theme":"brand","text":"快速上手","link":"/quick-start"},{"theme":"alt","text":"简介","link":"/intro"},{"theme":"alt","text":"QQ 群","link":"https://jq.qq.com/?_wv=1027&k=2l9ZGIoL"},{"theme":"alt","text":"GitHub","link":"https://github.com/twikoojs/twikoo"}],"image":{"src":"/twikoo-logo-home.png","alt":"Twikoo"}},"features":[{"icon":"🚀","title":"简单","details":"免费搭建,简单部署"},{"icon":"😃","title":"易用","details":"功能丰富,兼容性强"},{"icon":"🛡️","title":"安全","details":"隐私安全,内容安全"},{"icon":"⏰","title":"即时","details":"邮件提醒,即时消息推送"},{"icon":"🌈","title":"个性","details":"自定义背景图,博主标识"},{"icon":"⚙️","title":"便捷管理","details":"内嵌式管理面板,通过密码登录"}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":null}'),o={name:"index.md"};function a(l,n,s,c,r,d){return e(),i("div")}const k=t(o,[["render",a]]);export{p as __pageData,k as default}; diff --git a/assets/index.md.1464a105.lean.js b/assets/index.md.1464a105.lean.js new file mode 100644 index 000000000..10d2d5ac3 --- /dev/null +++ b/assets/index.md.1464a105.lean.js @@ -0,0 +1 @@ +import{_ as t,o as e,c as i}from"./chunks/framework.7d2df8c6.js";const p=JSON.parse('{"title":"Twikoo","titleTemplate":"一个简洁、安全、免费的静态网站评论系统","description":"","frontmatter":{"layout":"home","title":"Twikoo","titleTemplate":"一个简洁、安全、免费的静态网站评论系统","hero":{"name":"Twikoo","text":"网站评论系统","tagline":"简洁、安全、免费","actions":[{"theme":"brand","text":"快速上手","link":"/quick-start"},{"theme":"alt","text":"简介","link":"/intro"},{"theme":"alt","text":"QQ 群","link":"https://jq.qq.com/?_wv=1027&k=2l9ZGIoL"},{"theme":"alt","text":"GitHub","link":"https://github.com/twikoojs/twikoo"}],"image":{"src":"/twikoo-logo-home.png","alt":"Twikoo"}},"features":[{"icon":"🚀","title":"简单","details":"免费搭建,简单部署"},{"icon":"😃","title":"易用","details":"功能丰富,兼容性强"},{"icon":"🛡️","title":"安全","details":"隐私安全,内容安全"},{"icon":"⏰","title":"即时","details":"邮件提醒,即时消息推送"},{"icon":"🌈","title":"个性","details":"自定义背景图,博主标识"},{"icon":"⚙️","title":"便捷管理","details":"内嵌式管理面板,通过密码登录"}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":null}'),o={name:"index.md"};function a(l,n,s,c,r,d){return e(),i("div")}const k=t(o,[["render",a]]);export{p as __pageData,k as default}; diff --git a/assets/inter-italic-cyrillic-ext.33bd5a8e.woff2 b/assets/inter-italic-cyrillic-ext.33bd5a8e.woff2 new file mode 100644 index 000000000..2a6872967 Binary files /dev/null and b/assets/inter-italic-cyrillic-ext.33bd5a8e.woff2 differ diff --git a/assets/inter-italic-cyrillic.ea42a392.woff2 b/assets/inter-italic-cyrillic.ea42a392.woff2 new file mode 100644 index 000000000..f64035158 Binary files /dev/null and b/assets/inter-italic-cyrillic.ea42a392.woff2 differ diff --git a/assets/inter-italic-greek-ext.4fbe9427.woff2 b/assets/inter-italic-greek-ext.4fbe9427.woff2 new file mode 100644 index 000000000..002189603 Binary files /dev/null and b/assets/inter-italic-greek-ext.4fbe9427.woff2 differ diff --git a/assets/inter-italic-greek.8f4463c4.woff2 b/assets/inter-italic-greek.8f4463c4.woff2 new file mode 100644 index 000000000..71c265f85 Binary files /dev/null and b/assets/inter-italic-greek.8f4463c4.woff2 differ diff --git a/assets/inter-italic-latin-ext.bd8920cc.woff2 b/assets/inter-italic-latin-ext.bd8920cc.woff2 new file mode 100644 index 000000000..9c1b9440e Binary files /dev/null and b/assets/inter-italic-latin-ext.bd8920cc.woff2 differ diff --git a/assets/inter-italic-latin.bd3b6f56.woff2 b/assets/inter-italic-latin.bd3b6f56.woff2 new file mode 100644 index 000000000..01fcf2072 Binary files /dev/null and b/assets/inter-italic-latin.bd3b6f56.woff2 differ diff --git a/assets/inter-italic-vietnamese.6ce511fb.woff2 b/assets/inter-italic-vietnamese.6ce511fb.woff2 new file mode 100644 index 000000000..e4f788ee0 Binary files /dev/null and b/assets/inter-italic-vietnamese.6ce511fb.woff2 differ diff --git a/assets/inter-roman-cyrillic-ext.e75737ce.woff2 b/assets/inter-roman-cyrillic-ext.e75737ce.woff2 new file mode 100644 index 000000000..28593ccb8 Binary files /dev/null and b/assets/inter-roman-cyrillic-ext.e75737ce.woff2 differ diff --git a/assets/inter-roman-cyrillic.5f2c6c8c.woff2 b/assets/inter-roman-cyrillic.5f2c6c8c.woff2 new file mode 100644 index 000000000..a20adc161 Binary files /dev/null and b/assets/inter-roman-cyrillic.5f2c6c8c.woff2 differ diff --git a/assets/inter-roman-greek-ext.ab0619bc.woff2 b/assets/inter-roman-greek-ext.ab0619bc.woff2 new file mode 100644 index 000000000..e3b0be76d Binary files /dev/null and b/assets/inter-roman-greek-ext.ab0619bc.woff2 differ diff --git a/assets/inter-roman-greek.d5a6d92a.woff2 b/assets/inter-roman-greek.d5a6d92a.woff2 new file mode 100644 index 000000000..f790e047d Binary files /dev/null and b/assets/inter-roman-greek.d5a6d92a.woff2 differ diff --git a/assets/inter-roman-latin-ext.0030eebd.woff2 b/assets/inter-roman-latin-ext.0030eebd.woff2 new file mode 100644 index 000000000..715bd903b Binary files /dev/null and b/assets/inter-roman-latin-ext.0030eebd.woff2 differ diff --git a/assets/inter-roman-latin.2ed14f66.woff2 b/assets/inter-roman-latin.2ed14f66.woff2 new file mode 100644 index 000000000..a540b7afe Binary files /dev/null and b/assets/inter-roman-latin.2ed14f66.woff2 differ diff --git a/assets/inter-roman-vietnamese.14ce25a6.woff2 b/assets/inter-roman-vietnamese.14ce25a6.woff2 new file mode 100644 index 000000000..5a9f9cb9c Binary files /dev/null and b/assets/inter-roman-vietnamese.14ce25a6.woff2 differ diff --git a/assets/intro.md.35d8cb3f.js b/assets/intro.md.35d8cb3f.js new file mode 100644 index 000000000..8e126f9ff --- /dev/null +++ b/assets/intro.md.35d8cb3f.js @@ -0,0 +1,5 @@ +import{_ as a,a as e,b as t,c as r}from"./chunks/readme-3.368c86c7.js";import{_ as l,o as s,c as o,Q as i}from"./chunks/framework.7d2df8c6.js";const w=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"intro.md","filePath":"intro.md","lastUpdated":null}'),n={name:"intro.md"},h=i('
一个简洁、安全、免费的静态网站评论系统。
A simple, safe, free comment system.简体中文 | English
特色
简单
- 免费搭建(使用云开发 / Vercel / 私有服务器作为评论后台)
- 简单部署(支持云开发 / Vercel 一键部署)
易用
- 支持回复、点赞
- 无需额外适配,支持搭配浅色主题与深色主题使用
- 支持 API 调用,批量获取文章评论数、最新评论
- 访客在昵称栏输入 QQ 号,会自动补全 QQ 昵称和 QQ 邮箱
- 访客填写数字 QQ 邮箱,会使用 QQ 头像作为评论头像
- 支持评论框粘贴图片(可禁用)
- 支持插入图片(可禁用)
- 支持去不图床、云开发图床
- 支持插入表情(可禁用)
- 支持 Ctrl + Enter 快捷回复
- 评论框内容实时保存草稿,刷新不会丢失
- 支持 Katex 公式
- 支持按语言的代码高亮
安全
- 隐私信息安全(通过云函数控制敏感字段(邮箱、IP、环境配置等)不会泄露)
- 支持 Akismet 垃圾评论检测(需自行注册 akismet.com)
- 支持腾讯云内容安全垃圾评论检测(需自行注册 腾讯云内容安全)
- 支持人工审核模式
- 防 XSS 注入
- 支持限制每个 IP 每 10 分钟最多发表多少条评论
即时
- 支持邮件提醒(访客和博主)
- 支持微信提醒(仅针对博主,基于 Server酱,需自行注册)
- 支持 QQ 提醒(仅针对博主,基于 Qmsg酱,需自行注册)
- 支持 QQ 提醒(针对博主QQ或者群,基于 go-cqhttp,需自己有服务器)
个性
- 支持自定义评论框背景图片
- 支持自定义“博主”标识文字
- 支持自定义通知邮件模板
- 支持自定义评论框提示信息(placeholder)
- 支持自定义表情列表(兼容 OwO 的数据格式)
- 支持自定义【昵称】【邮箱】【网址】必填 / 选填
- 支持自定义代码高亮主题
便捷管理
- 内嵌式管理面板,通过密码登录,可方便地查看评论、隐藏评论、删除评论、修改配置
- 支持隐藏管理入口,通过输入暗号显示
- 支持从 Valine、Artalk、Disqus 导入评论
缺点
- 不支持 IE
预览
评论
评论管理
推送通知
交流群
如果你想获取更新动态、建言献策、参与测试,欢迎加入讨论群:
浏览器支持
提示
技术原因,不兼容 IE
IE / Edge
Firefox
Chrome
Safari
iOS SafariEdge last version last version last version last version Generated by browsers-support-badges
更新日志 & 开发计划
特别感谢
图标设计:Maemo Lee
开发
如果您想在本地二次开发,可以参考以下命令:
shyarn dev # 开发 (http://localhost:9820/demo.html) +yarn lint # 代码检查 +yarn build # 编译 (dist/twikoo.all.min.js)
yarn dev # 开发 (http://localhost:9820/demo.html) +yarn lint # 代码检查 +yarn build # 编译 (dist/twikoo.all.min.js)
如果您的改动能够帮助到更多人,欢迎提交 Pull Request!
国际化
支持简体中文、繁体中文、English。欢迎提交翻译 PR。
许可
`,49),p=[h];function c(d,m,b,g,u,f){return s(),o("div",null,p)}const q=l(n,[["render",c]]);export{w as __pageData,q as default}; diff --git a/assets/intro.md.35d8cb3f.lean.js b/assets/intro.md.35d8cb3f.lean.js new file mode 100644 index 000000000..84f78ac83 --- /dev/null +++ b/assets/intro.md.35d8cb3f.lean.js @@ -0,0 +1 @@ +import{_ as a,a as e,b as t,c as r}from"./chunks/readme-3.368c86c7.js";import{_ as l,o as s,c as o,Q as i}from"./chunks/framework.7d2df8c6.js";const w=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"intro.md","filePath":"intro.md","lastUpdated":null}'),n={name:"intro.md"},h=i("",49),p=[h];function c(d,m,b,g,u,f){return s(),o("div",null,p)}const q=l(n,[["render",c]]);export{w as __pageData,q as default}; diff --git a/assets/katex.7c72a6fb.png b/assets/katex.7c72a6fb.png new file mode 100644 index 000000000..40bbfe75f Binary files /dev/null and b/assets/katex.7c72a6fb.png differ diff --git a/assets/link.md.cf6d607e.js b/assets/link.md.cf6d607e.js new file mode 100644 index 000000000..f618272d7 --- /dev/null +++ b/assets/link.md.cf6d607e.js @@ -0,0 +1 @@ +import{_ as e,o,c as t,Q as r}from"./chunks/framework.7d2df8c6.js";const k=JSON.parse('{"title":"相关文档","description":"","frontmatter":{},"headers":[],"relativePath":"link.md","filePath":"link.md","lastUpdated":null}'),a={name:"link.md"},l=r('相关文档
',2),i=[l];function n(s,h,_,c,p,d){return o(),t("div",null,i)}const w=e(a,[["render",n]]);export{k as __pageData,w as default}; diff --git a/assets/link.md.cf6d607e.lean.js b/assets/link.md.cf6d607e.lean.js new file mode 100644 index 000000000..b23044a91 --- /dev/null +++ b/assets/link.md.cf6d607e.lean.js @@ -0,0 +1 @@ +import{_ as e,o,c as t,Q as r}from"./chunks/framework.7d2df8c6.js";const k=JSON.parse('{"title":"相关文档","description":"","frontmatter":{},"headers":[],"relativePath":"link.md","filePath":"link.md","lastUpdated":null}'),a={name:"link.md"},l=r("",2),i=[l];function n(s,h,_,c,p,d){return o(),t("div",null,i)}const w=e(a,[["render",n]]);export{k as __pageData,w as default}; diff --git a/assets/logo.5707582f.png b/assets/logo.5707582f.png new file mode 100644 index 000000000..2efeb5eca Binary files /dev/null and b/assets/logo.5707582f.png differ diff --git a/assets/mongodb-1.b467da78.png b/assets/mongodb-1.b467da78.png new file mode 100644 index 000000000..03120cd12 Binary files /dev/null and b/assets/mongodb-1.b467da78.png differ diff --git a/assets/mongodb-2.d2431ba3.png b/assets/mongodb-2.d2431ba3.png new file mode 100644 index 000000000..f746a45d6 Binary files /dev/null and b/assets/mongodb-2.d2431ba3.png differ diff --git a/assets/mongodb-3.98ac6e22.png b/assets/mongodb-3.98ac6e22.png new file mode 100644 index 000000000..3e3c38b12 Binary files /dev/null and b/assets/mongodb-3.98ac6e22.png differ diff --git a/assets/netlify-1.c6c64abb.png b/assets/netlify-1.c6c64abb.png new file mode 100644 index 000000000..6b5adf242 Binary files /dev/null and b/assets/netlify-1.c6c64abb.png differ diff --git a/assets/netlify-2.4f0d58e4.png b/assets/netlify-2.4f0d58e4.png new file mode 100644 index 000000000..e30ce5824 Binary files /dev/null and b/assets/netlify-2.4f0d58e4.png differ diff --git a/assets/netlify-3.4f565e5d.png b/assets/netlify-3.4f565e5d.png new file mode 100644 index 000000000..d086765d0 Binary files /dev/null and b/assets/netlify-3.4f565e5d.png differ diff --git a/assets/netlify-4.1647e7f0.png b/assets/netlify-4.1647e7f0.png new file mode 100644 index 000000000..118292159 Binary files /dev/null and b/assets/netlify-4.1647e7f0.png differ diff --git a/assets/netlify-5.a29645d7.png b/assets/netlify-5.a29645d7.png new file mode 100644 index 000000000..dcdd0e733 Binary files /dev/null and b/assets/netlify-5.a29645d7.png differ diff --git a/assets/quick-start.md.65db2e19.js b/assets/quick-start.md.65db2e19.js new file mode 100644 index 000000000..f3a5e0cb2 --- /dev/null +++ b/assets/quick-start.md.65db2e19.js @@ -0,0 +1 @@ +import{_ as t,o as a,c as e,Q as o}from"./chunks/framework.7d2df8c6.js";const u=JSON.parse('{"title":"快速上手","description":"","frontmatter":{},"headers":[],"relativePath":"quick-start.md","filePath":"quick-start.md","lastUpdated":null}'),i={name:"quick-start.md"},r=o('
- 在Hexo的Butterfly主题使用Twikoo评论配置及更新教程 by 张洪 Heo
- Typecho 到 Twikoo 迁移脚本 by Android-KitKat
- Hexo 博客配置 twikoo 评论系统,并调用最新评论 by Heson
- 基于腾讯云,给你的 Icarus 博客配上 Twikoo 评论系统 by 异次元de机智君💯
- Twikoo 多个页面共用一个评论区 by iMaeGoo
- 集成 Twikoo 与 lightGallery 插件,实现评论图片的点击放大 by iMaeGoo
- Twikoo 评论数据导出教程 by iMaeGoo
- 【Hexo博客】Twikoo评论系统的免费部署(云函数采用Vercel方式) by 百里飞洋Barry-Flynn
快速上手
Twikoo 分为云函数和前端两部分,若要在您的网站上集成 Twikoo,您需要同时部署云函数和前端,部署时请注意保持二者版本一致。
',3),s=[r];function l(_,c,n,d,h,k){return a(),e("div",null,s)}const f=t(i,[["render",l]]);export{u as __pageData,f as default}; diff --git a/assets/quick-start.md.65db2e19.lean.js b/assets/quick-start.md.65db2e19.lean.js new file mode 100644 index 000000000..07d06fe43 --- /dev/null +++ b/assets/quick-start.md.65db2e19.lean.js @@ -0,0 +1 @@ +import{_ as t,o as a,c as e,Q as o}from"./chunks/framework.7d2df8c6.js";const u=JSON.parse('{"title":"快速上手","description":"","frontmatter":{},"headers":[],"relativePath":"quick-start.md","filePath":"quick-start.md","lastUpdated":null}'),i={name:"quick-start.md"},r=o("",3),s=[r];function l(_,c,n,d,h,k){return a(),e("div",null,s)}const f=t(i,[["render",l]]);export{u as __pageData,f as default}; diff --git a/assets/readme-1.28a161f2.png b/assets/readme-1.28a161f2.png new file mode 100644 index 000000000..1f6f3c280 Binary files /dev/null and b/assets/readme-1.28a161f2.png differ diff --git a/assets/readme-2.36e8fa3b.png b/assets/readme-2.36e8fa3b.png new file mode 100644 index 000000000..4752e3480 Binary files /dev/null and b/assets/readme-2.36e8fa3b.png differ diff --git a/assets/readme-3.45bb1d93.jpg b/assets/readme-3.45bb1d93.jpg new file mode 100644 index 000000000..5d33c487e Binary files /dev/null and b/assets/readme-3.45bb1d93.jpg differ diff --git a/assets/style.5f135469.css b/assets/style.5f135469.css new file mode 100644 index 000000000..0e72d209f --- /dev/null +++ b/assets/style.5f135469.css @@ -0,0 +1 @@ +@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-cyrillic.5f2c6c8c.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-cyrillic-ext.e75737ce.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-greek.d5a6d92a.woff2) format("woff2");unicode-range:U+0370-03FF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-greek-ext.ab0619bc.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-latin.2ed14f66.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-latin-ext.0030eebd.woff2) format("woff2");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-vietnamese.14ce25a6.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-cyrillic.ea42a392.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-cyrillic-ext.33bd5a8e.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-greek.8f4463c4.woff2) format("woff2");unicode-range:U+0370-03FF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-greek-ext.4fbe9427.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-latin.bd3b6f56.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-latin-ext.bd8920cc.woff2) format("woff2");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-vietnamese.6ce511fb.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB}@font-face{font-family:Chinese Quotes;src:local("PingFang SC Regular"),local("PingFang SC"),local("SimHei"),local("Source Han Sans SC");unicode-range:U+2018,U+2019,U+201C,U+201D}:root{--vp-c-white: #ffffff;--vp-c-black: #000000;--vp-c-neutral: var(--vp-c-black);--vp-c-neutral-inverse: var(--vp-c-white)}.dark{--vp-c-neutral: var(--vp-c-white);--vp-c-neutral-inverse: var(--vp-c-black)}:root{--vp-c-gray-1: #dddde3;--vp-c-gray-2: #e4e4e9;--vp-c-gray-3: #ebebef;--vp-c-gray-soft: rgba(142, 150, 170, .14);--vp-c-indigo-1: #3451b2;--vp-c-indigo-2: #3a5ccc;--vp-c-indigo-3: #5672cd;--vp-c-indigo-soft: rgba(100, 108, 255, .14);--vp-c-green-1: #18794e;--vp-c-green-2: #299764;--vp-c-green-3: #30a46c;--vp-c-green-soft: rgba(16, 185, 129, .14);--vp-c-yellow-1: #915930;--vp-c-yellow-2: #946300;--vp-c-yellow-3: #9f6a00;--vp-c-yellow-soft: rgba(234, 179, 8, .14);--vp-c-red-1: #b8272c;--vp-c-red-2: #d5393e;--vp-c-red-3: #e0575b;--vp-c-red-soft: rgba(244, 63, 94, .14);--vp-c-sponsor: #db2777}.dark{--vp-c-gray-1: #515c67;--vp-c-gray-2: #414853;--vp-c-gray-3: #32363f;--vp-c-gray-soft: rgba(101, 117, 133, .16);--vp-c-indigo-1: #a8b1ff;--vp-c-indigo-2: #5c73e7;--vp-c-indigo-3: #3e63dd;--vp-c-indigo-soft: rgba(100, 108, 255, .16);--vp-c-green-1: #3dd68c;--vp-c-green-2: #30a46c;--vp-c-green-3: #298459;--vp-c-green-soft: rgba(16, 185, 129, .16);--vp-c-yellow-1: #f9b44e;--vp-c-yellow-2: #da8b17;--vp-c-yellow-3: #a46a0a;--vp-c-yellow-soft: rgba(234, 179, 8, .16);--vp-c-red-1: #f66f81;--vp-c-red-2: #f14158;--vp-c-red-3: #b62a3c;--vp-c-red-soft: rgba(244, 63, 94, .16)}:root{--vp-c-bg: #ffffff;--vp-c-bg-alt: #f6f6f7;--vp-c-bg-elv: #ffffff;--vp-c-bg-soft: #f6f6f7}.dark{--vp-c-bg: #1b1b1f;--vp-c-bg-alt: #161618;--vp-c-bg-elv: #202127;--vp-c-bg-soft: #202127}:root{--vp-c-border: #c2c2c4;--vp-c-divider: #e2e2e3;--vp-c-gutter: #e2e2e3}.dark{--vp-c-border: #3c3f44;--vp-c-divider: #2e2e32;--vp-c-gutter: #000000}:root{--vp-c-text-1: rgba(60, 60, 67);--vp-c-text-2: rgba(60, 60, 67, .78);--vp-c-text-3: rgba(60, 60, 67, .56)}.dark{--vp-c-text-1: rgba(255, 255, 245, .86);--vp-c-text-2: rgba(235, 235, 245, .6);--vp-c-text-3: rgba(235, 235, 245, .38)}:root{--vp-c-default-1: var(--vp-c-gray-1);--vp-c-default-2: var(--vp-c-gray-2);--vp-c-default-3: var(--vp-c-gray-3);--vp-c-default-soft: var(--vp-c-gray-soft);--vp-c-brand-1: var(--vp-c-indigo-1);--vp-c-brand-2: var(--vp-c-indigo-2);--vp-c-brand-3: var(--vp-c-indigo-3);--vp-c-brand-soft: var(--vp-c-indigo-soft);--vp-c-brand: var(--vp-c-brand-1);--vp-c-tip-1: var(--vp-c-brand-1);--vp-c-tip-2: var(--vp-c-brand-2);--vp-c-tip-3: var(--vp-c-brand-3);--vp-c-tip-soft: var(--vp-c-brand-soft);--vp-c-warning-1: var(--vp-c-yellow-1);--vp-c-warning-2: var(--vp-c-yellow-2);--vp-c-warning-3: var(--vp-c-yellow-3);--vp-c-warning-soft: var(--vp-c-yellow-soft);--vp-c-danger-1: var(--vp-c-red-1);--vp-c-danger-2: var(--vp-c-red-2);--vp-c-danger-3: var(--vp-c-red-3);--vp-c-danger-soft: var(--vp-c-red-soft)}:root{--vp-font-family-base: "Chinese Quotes", "Inter var", "Inter", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Helvetica, Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--vp-font-family-mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace}:root{--vp-shadow-1: 0 1px 2px rgba(0, 0, 0, .04), 0 1px 2px rgba(0, 0, 0, .06);--vp-shadow-2: 0 3px 12px rgba(0, 0, 0, .07), 0 1px 4px rgba(0, 0, 0, .07);--vp-shadow-3: 0 12px 32px rgba(0, 0, 0, .1), 0 2px 6px rgba(0, 0, 0, .08);--vp-shadow-4: 0 14px 44px rgba(0, 0, 0, .12), 0 3px 9px rgba(0, 0, 0, .12);--vp-shadow-5: 0 18px 56px rgba(0, 0, 0, .16), 0 4px 12px rgba(0, 0, 0, .16)}:root{--vp-z-index-footer: 10;--vp-z-index-local-nav: 20;--vp-z-index-nav: 30;--vp-z-index-layout-top: 40;--vp-z-index-backdrop: 50;--vp-z-index-sidebar: 60}:root{--vp-icon-copy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' height='20' width='20' stroke='rgba(128,128,128,1)' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2M9 5a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2M9 5a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2'/%3E%3C/svg%3E");--vp-icon-copied: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' height='20' width='20' stroke='rgba(128,128,128,1)' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2M9 5a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2M9 5a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2m-6 9 2 2 4-4'/%3E%3C/svg%3E")}:root{--vp-layout-max-width: 1440px}:root{--vp-header-anchor-symbol: "#"}:root{--vp-code-line-height: 1.7;--vp-code-font-size: .875em;--vp-code-color: var(--vp-c-brand-1);--vp-code-link-color: var(--vp-c-brand-1);--vp-code-link-hover-color: var(--vp-c-brand-2);--vp-code-bg: var(--vp-c-default-soft);--vp-code-block-color: var(--vp-c-text-2);--vp-code-block-bg: var(--vp-c-bg-alt);--vp-code-block-divider-color: var(--vp-c-gutter);--vp-code-lang-color: var(--vp-c-text-3);--vp-code-line-highlight-color: var(--vp-c-default-soft);--vp-code-line-number-color: var(--vp-c-text-3);--vp-code-line-diff-add-color: var(--vp-c-green-soft);--vp-code-line-diff-add-symbol-color: var(--vp-c-green-1);--vp-code-line-diff-remove-color: var(--vp-c-red-soft);--vp-code-line-diff-remove-symbol-color: var(--vp-c-red-1);--vp-code-line-warning-color: var(--vp-c-yellow-soft);--vp-code-line-error-color: var(--vp-c-red-soft);--vp-code-copy-code-border-color: var(--vp-c-divider);--vp-code-copy-code-bg: var(--vp-c-bg-soft);--vp-code-copy-code-hover-border-color: var(--vp-c-divider);--vp-code-copy-code-hover-bg: var(--vp-c-bg);--vp-code-copy-code-active-text: var(--vp-c-text-2);--vp-code-copy-copied-text-content: "Copied";--vp-code-tab-divider: var(--vp-code-block-divider-color);--vp-code-tab-text-color: var(--vp-c-text-2);--vp-code-tab-bg: var(--vp-code-block-bg);--vp-code-tab-hover-text-color: var(--vp-c-text-1);--vp-code-tab-active-text-color: var(--vp-c-text-1);--vp-code-tab-active-bar-color: var(--vp-c-brand-1)}:root{--vp-button-brand-border: transparent;--vp-button-brand-text: var(--vp-c-white);--vp-button-brand-bg: var(--vp-c-brand-3);--vp-button-brand-hover-border: transparent;--vp-button-brand-hover-text: var(--vp-c-white);--vp-button-brand-hover-bg: var(--vp-c-brand-2);--vp-button-brand-active-border: transparent;--vp-button-brand-active-text: var(--vp-c-white);--vp-button-brand-active-bg: var(--vp-c-brand-1);--vp-button-alt-border: transparent;--vp-button-alt-text: var(--vp-c-text-1);--vp-button-alt-bg: var(--vp-c-default-3);--vp-button-alt-hover-border: transparent;--vp-button-alt-hover-text: var(--vp-c-text-1);--vp-button-alt-hover-bg: var(--vp-c-default-2);--vp-button-alt-active-border: transparent;--vp-button-alt-active-text: var(--vp-c-text-1);--vp-button-alt-active-bg: var(--vp-c-default-1);--vp-button-sponsor-border: var(--vp-c-text-2);--vp-button-sponsor-text: var(--vp-c-text-2);--vp-button-sponsor-bg: transparent;--vp-button-sponsor-hover-border: var(--vp-c-sponsor);--vp-button-sponsor-hover-text: var(--vp-c-sponsor);--vp-button-sponsor-hover-bg: transparent;--vp-button-sponsor-active-border: var(--vp-c-sponsor);--vp-button-sponsor-active-text: var(--vp-c-sponsor);--vp-button-sponsor-active-bg: transparent}:root{--vp-custom-block-font-size: 14px;--vp-custom-block-code-font-size: 13px;--vp-custom-block-info-border: transparent;--vp-custom-block-info-text: var(--vp-c-text-1);--vp-custom-block-info-bg: var(--vp-c-default-soft);--vp-custom-block-info-code-bg: var(--vp-c-default-soft);--vp-custom-block-tip-border: transparent;--vp-custom-block-tip-text: var(--vp-c-text-1);--vp-custom-block-tip-bg: var(--vp-c-brand-soft);--vp-custom-block-tip-code-bg: var(--vp-c-brand-soft);--vp-custom-block-warning-border: transparent;--vp-custom-block-warning-text: var(--vp-c-text-1);--vp-custom-block-warning-bg: var(--vp-c-warning-soft);--vp-custom-block-warning-code-bg: var(--vp-c-warning-soft);--vp-custom-block-danger-border: transparent;--vp-custom-block-danger-text: var(--vp-c-text-1);--vp-custom-block-danger-bg: var(--vp-c-danger-soft);--vp-custom-block-danger-code-bg: var(--vp-c-danger-soft);--vp-custom-block-details-border: var(--vp-custom-block-info-border);--vp-custom-block-details-text: var(--vp-custom-block-info-text);--vp-custom-block-details-bg: var(--vp-custom-block-info-bg);--vp-custom-block-details-code-bg: var(--vp-custom-block-info-code-bg)}:root{--vp-input-border-color: var(--vp-c-border);--vp-input-bg-color: var(--vp-c-bg-alt);--vp-input-switch-bg-color: var(--vp-c-gray-soft)}:root{--vp-nav-height: 64px;--vp-nav-bg-color: var(--vp-c-bg);--vp-nav-screen-bg-color: var(--vp-c-bg);--vp-nav-logo-height: 24px}.hide-nav{--vp-nav-height: 0px}.hide-nav .VPSidebar{--vp-nav-height: 22px}:root{--vp-local-nav-bg-color: var(--vp-c-bg)}:root{--vp-sidebar-width: 272px;--vp-sidebar-bg-color: var(--vp-c-bg-alt)}:root{--vp-backdrop-bg-color: rgba(0, 0, 0, .6)}:root{--vp-home-hero-name-color: var(--vp-c-brand-1);--vp-home-hero-name-background: transparent;--vp-home-hero-image-background-image: none;--vp-home-hero-image-filter: none}:root{--vp-badge-info-border: transparent;--vp-badge-info-text: var(--vp-c-text-2);--vp-badge-info-bg: var(--vp-c-default-soft);--vp-badge-tip-border: transparent;--vp-badge-tip-text: var(--vp-c-brand-1);--vp-badge-tip-bg: var(--vp-c-brand-soft);--vp-badge-warning-border: transparent;--vp-badge-warning-text: var(--vp-c-warning-1);--vp-badge-warning-bg: var(--vp-c-warning-soft);--vp-badge-danger-border: transparent;--vp-badge-danger-text: var(--vp-c-danger-1);--vp-badge-danger-bg: var(--vp-c-danger-soft)}:root{--vp-carbon-ads-text-color: var(--vp-c-text-1);--vp-carbon-ads-poweredby-color: var(--vp-c-text-2);--vp-carbon-ads-bg-color: var(--vp-c-bg-soft);--vp-carbon-ads-hover-text-color: var(--vp-c-brand-1);--vp-carbon-ads-hover-poweredby-color: var(--vp-c-text-1)}:root{--vp-local-search-bg: var(--vp-c-bg);--vp-local-search-result-bg: var(--vp-c-bg);--vp-local-search-result-border: var(--vp-c-divider);--vp-local-search-result-selected-bg: var(--vp-c-bg);--vp-local-search-result-selected-border: var(--vp-c-brand-1);--vp-local-search-highlight-bg: var(--vp-c-brand-1);--vp-local-search-highlight-text: var(--vp-c-neutral-inverse)}@media (prefers-reduced-motion: reduce){*,:before,:after{animation-delay:-1ms!important;animation-duration:1ms!important;animation-iteration-count:1!important;background-attachment:initial!important;scroll-behavior:auto!important;transition-duration:0s!important;transition-delay:0s!important}}*,:before,:after{box-sizing:border-box}html{line-height:1.4;font-size:16px;-webkit-text-size-adjust:100%}html.dark{color-scheme:dark}body{margin:0;width:100%;min-width:320px;min-height:100vh;line-height:24px;font-family:var(--vp-font-family-base);font-size:16px;font-weight:400;color:var(--vp-c-text-1);background-color:var(--vp-c-bg);direction:ltr;font-synthesis:style;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}main{display:block}h1,h2,h3,h4,h5,h6{margin:0;line-height:24px;font-size:16px;font-weight:400}p{margin:0}strong,b{font-weight:600}a,area,button,[role=button],input,label,select,summary,textarea{touch-action:manipulation}a{color:inherit;text-decoration:inherit}ol,ul{list-style:none;margin:0;padding:0}blockquote{margin:0}pre,code,kbd,samp{font-family:var(--vp-font-family-mono)}img,svg,video,canvas,audio,iframe,embed,object{display:block}figure{margin:0}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{border:0;padding:0;line-height:inherit;color:inherit}button{padding:0;font-family:inherit;background-color:transparent;background-image:none}button:enabled,[role=button]:enabled{cursor:pointer}button:focus,button:focus-visible{outline:1px dotted;outline:4px auto -webkit-focus-ring-color}button:focus:not(:focus-visible){outline:none!important}input:focus,textarea:focus,select:focus{outline:none}table{border-collapse:collapse}input{background-color:transparent}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:var(--vp-c-text-3)}input::-ms-input-placeholder,textarea::-ms-input-placeholder{color:var(--vp-c-text-3)}input::placeholder,textarea::placeholder{color:var(--vp-c-text-3)}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}textarea{resize:vertical}select{-webkit-appearance:none}fieldset{margin:0;padding:0}h1,h2,h3,h4,h5,h6,li,p{overflow-wrap:break-word}vite-error-overlay{z-index:9999}mjx-container{display:inline-block;margin:auto 2px -2px}mjx-container>svg{margin:auto}.visually-hidden{position:absolute;width:1px;height:1px;white-space:nowrap;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden}.custom-block{border:1px solid transparent;border-radius:8px;padding:16px 16px 8px;line-height:24px;font-size:var(--vp-custom-block-font-size);color:var(--vp-c-text-2)}.custom-block.info{border-color:var(--vp-custom-block-info-border);color:var(--vp-custom-block-info-text);background-color:var(--vp-custom-block-info-bg)}.custom-block.info a,.custom-block.info code{color:var(--vp-c-brand-1)}.custom-block.info a:hover{color:var(--vp-c-brand-2)}.custom-block.info code{background-color:var(--vp-custom-block-info-code-bg)}.custom-block.tip{border-color:var(--vp-custom-block-tip-border);color:var(--vp-custom-block-tip-text);background-color:var(--vp-custom-block-tip-bg)}.custom-block.tip a,.custom-block.tip code{color:var(--vp-c-brand-1)}.custom-block.tip a:hover{color:var(--vp-c-brand-2)}.custom-block.tip code{background-color:var(--vp-custom-block-tip-code-bg)}.custom-block.warning{border-color:var(--vp-custom-block-warning-border);color:var(--vp-custom-block-warning-text);background-color:var(--vp-custom-block-warning-bg)}.custom-block.warning a,.custom-block.warning code{color:var(--vp-c-warning-1)}.custom-block.warning a:hover{color:var(--vp-c-warning-2)}.custom-block.warning code{background-color:var(--vp-custom-block-warning-code-bg)}.custom-block.danger{border-color:var(--vp-custom-block-danger-border);color:var(--vp-custom-block-danger-text);background-color:var(--vp-custom-block-danger-bg)}.custom-block.danger a,.custom-block.danger code{color:var(--vp-c-danger-1)}.custom-block.danger a:hover{color:var(--vp-c-danger-2)}.custom-block.danger code{background-color:var(--vp-custom-block-danger-code-bg)}.custom-block.details{border-color:var(--vp-custom-block-details-border);color:var(--vp-custom-block-details-text);background-color:var(--vp-custom-block-details-bg)}.custom-block.details a{color:var(--vp-c-brand-1)}.custom-block.details a:hover{color:var(--vp-c-brand-2)}.custom-block.details code{background-color:var(--vp-custom-block-details-code-bg)}.custom-block-title{font-weight:600}.custom-block p+p{margin:8px 0}.custom-block.details summary{margin:0 0 8px;font-weight:700;cursor:pointer}.custom-block.details summary+p{margin:8px 0}.custom-block a{color:inherit;font-weight:600;text-decoration:underline;text-underline-offset:2px;transition:opacity .25s}.custom-block a:hover{opacity:.75}.custom-block code{font-size:var(--vp-custom-block-code-font-size)}.custom-block.custom-block th,.custom-block.custom-block blockquote>p{font-size:var(--vp-custom-block-font-size);color:inherit}.dark .vp-code-light{display:none}html:not(.dark) .vp-code-dark{display:none}.vp-code-group{margin-top:16px}.vp-code-group .tabs{position:relative;display:flex;margin-right:-24px;margin-left:-24px;padding:0 12px;background-color:var(--vp-code-tab-bg);overflow-x:auto;overflow-y:hidden;box-shadow:inset 0 -1px var(--vp-code-tab-divider)}@media (min-width: 640px){.vp-code-group .tabs{margin-right:0;margin-left:0;border-radius:8px 8px 0 0}}.vp-code-group .tabs input{position:fixed;opacity:0;pointer-events:none}.vp-code-group .tabs label{position:relative;display:inline-block;border-bottom:1px solid transparent;padding:0 12px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-code-tab-text-color);white-space:nowrap;cursor:pointer;transition:color .25s}.vp-code-group .tabs label:after{position:absolute;right:8px;bottom:-1px;left:8px;z-index:1;height:2px;border-radius:2px;content:"";background-color:transparent;transition:background-color .25s}.vp-code-group label:hover{color:var(--vp-code-tab-hover-text-color)}.vp-code-group input:checked+label{color:var(--vp-code-tab-active-text-color)}.vp-code-group input:checked+label:after{background-color:var(--vp-code-tab-active-bar-color)}.vp-code-group div[class*=language-],.vp-block{display:none;margin-top:0!important;border-top-left-radius:0!important;border-top-right-radius:0!important}.vp-code-group div[class*=language-].active,.vp-block.active{display:block}.vp-block{padding:20px 24px}.vp-doc h1,.vp-doc h2,.vp-doc h3,.vp-doc h4,.vp-doc h5,.vp-doc h6{position:relative;font-weight:600;outline:none}.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:28px}.vp-doc h2{margin:48px 0 16px;border-top:1px solid var(--vp-c-divider);padding-top:24px;letter-spacing:-.02em;line-height:32px;font-size:24px}.vp-doc h3{margin:32px 0 0;letter-spacing:-.01em;line-height:28px;font-size:20px}.vp-doc .header-anchor{position:absolute;top:0;left:0;margin-left:-.87em;font-weight:500;-webkit-user-select:none;user-select:none;opacity:0;text-decoration:none;transition:color .25s,opacity .25s}.vp-doc .header-anchor:before{content:var(--vp-header-anchor-symbol)}.vp-doc h1:hover .header-anchor,.vp-doc h1 .header-anchor:focus,.vp-doc h2:hover .header-anchor,.vp-doc h2 .header-anchor:focus,.vp-doc h3:hover .header-anchor,.vp-doc h3 .header-anchor:focus,.vp-doc h4:hover .header-anchor,.vp-doc h4 .header-anchor:focus,.vp-doc h5:hover .header-anchor,.vp-doc h5 .header-anchor:focus,.vp-doc h6:hover .header-anchor,.vp-doc h6 .header-anchor:focus{opacity:1}@media (min-width: 768px){.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:32px}}.vp-doc h2 .header-anchor{top:24px}.vp-doc p,.vp-doc summary{margin:16px 0}.vp-doc p{line-height:28px}.vp-doc blockquote{margin:16px 0;border-left:2px solid var(--vp-c-divider);padding-left:16px;transition:border-color .5s}.vp-doc blockquote>p{margin:0;font-size:16px;color:var(--vp-c-text-2);transition:color .5s}.vp-doc a{font-weight:500;color:var(--vp-c-brand-1);text-decoration:underline;text-underline-offset:2px;transition:color .25s,opacity .25s}.vp-doc a:hover{color:var(--vp-c-brand-2)}.vp-doc strong{font-weight:600}.vp-doc ul,.vp-doc ol{padding-left:1.25rem;margin:16px 0}.vp-doc ul{list-style:disc}.vp-doc ol{list-style:decimal}.vp-doc li+li{margin-top:8px}.vp-doc li>ol,.vp-doc li>ul{margin:8px 0 0}.vp-doc table{display:block;border-collapse:collapse;margin:20px 0;overflow-x:auto}.vp-doc tr{border-top:1px solid var(--vp-c-divider);transition:background-color .5s}.vp-doc tr:nth-child(2n){background-color:var(--vp-c-bg-soft)}.vp-doc th,.vp-doc td{border:1px solid var(--vp-c-divider);padding:8px 16px}.vp-doc th{text-align:left;font-size:14px;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-doc td{font-size:14px}.vp-doc hr{margin:16px 0;border:none;border-top:1px solid var(--vp-c-divider)}.vp-doc .custom-block{margin:16px 0}.vp-doc .custom-block p{margin:8px 0;line-height:24px}.vp-doc .custom-block p:first-child{margin:0}.vp-doc .custom-block div[class*=language-]{margin:8px 0;border-radius:8px}.vp-doc .custom-block div[class*=language-] code{font-weight:400;background-color:transparent}.vp-doc .custom-block .vp-code-group .tabs{margin:0;border-radius:8px 8px 0 0}.vp-doc :not(pre,h1,h2,h3,h4,h5,h6)>code{font-size:var(--vp-code-font-size);color:var(--vp-code-color)}.vp-doc :not(pre)>code{border-radius:4px;padding:3px 6px;background-color:var(--vp-code-bg);transition:color .25s,background-color .5s}.vp-doc a>code{color:var(--vp-code-link-color)}.vp-doc a:hover>code{color:var(--vp-code-link-hover-color)}.vp-doc h1>code,.vp-doc h2>code,.vp-doc h3>code{font-size:.9em}.vp-doc div[class*=language-],.vp-block{position:relative;margin:16px -24px;background-color:var(--vp-code-block-bg);overflow-x:auto;transition:background-color .5s}@media (min-width: 640px){.vp-doc div[class*=language-],.vp-block{border-radius:8px;margin:16px 0}}@media (max-width: 639px){.vp-doc li div[class*=language-]{border-radius:8px 0 0 8px}}.vp-doc div[class*=language-]+div[class*=language-],.vp-doc div[class$=-api]+div[class*=language-],.vp-doc div[class*=language-]+div[class$=-api]>div[class*=language-]{margin-top:-8px}.vp-doc [class*=language-] pre,.vp-doc [class*=language-] code{direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}.vp-doc [class*=language-] pre{position:relative;z-index:1;margin:0;padding:20px 0;background:transparent;overflow-x:auto}.vp-doc [class*=language-] code{display:block;padding:0 24px;width:fit-content;min-width:100%;line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-block-color);transition:color .5s}.vp-doc [class*=language-] code .highlighted{background-color:var(--vp-code-line-highlight-color);transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .highlighted.error{background-color:var(--vp-code-line-error-color)}.vp-doc [class*=language-] code .highlighted.warning{background-color:var(--vp-code-line-warning-color)}.vp-doc [class*=language-] code .diff{transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .diff:before{position:absolute;left:10px}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){filter:blur(.095rem);opacity:.4;transition:filter .35s,opacity .35s}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){opacity:.7;transition:filter .35s,opacity .35s}.vp-doc [class*=language-]:hover .has-focused-lines .line:not(.has-focus){filter:blur(0);opacity:1}.vp-doc [class*=language-] code .diff.remove{background-color:var(--vp-code-line-diff-remove-color);opacity:.7}.vp-doc [class*=language-] code .diff.remove:before{content:"-";color:var(--vp-code-line-diff-remove-symbol-color)}.vp-doc [class*=language-] code .diff.add{background-color:var(--vp-code-line-diff-add-color)}.vp-doc [class*=language-] code .diff.add:before{content:"+";color:var(--vp-code-line-diff-add-symbol-color)}.vp-doc div[class*=language-].line-numbers-mode{padding-left:32px}.vp-doc .line-numbers-wrapper{position:absolute;top:0;bottom:0;left:0;z-index:3;border-right:1px solid var(--vp-code-block-divider-color);padding-top:20px;width:32px;text-align:center;font-family:var(--vp-font-family-mono);line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-line-number-color);transition:border-color .5s,color .5s}.vp-doc [class*=language-]>button.copy{direction:ltr;position:absolute;top:12px;right:12px;z-index:3;border:1px solid var(--vp-code-copy-code-border-color);border-radius:4px;width:40px;height:40px;background-color:var(--vp-code-copy-code-bg);opacity:0;cursor:pointer;background-image:var(--vp-icon-copy);background-position:50%;background-size:20px;background-repeat:no-repeat;transition:border-color .25s,background-color .25s,opacity .25s}.vp-doc [class*=language-]:hover>button.copy,.vp-doc [class*=language-]>button.copy:focus{opacity:1}.vp-doc [class*=language-]>button.copy:hover,.vp-doc [class*=language-]>button.copy.copied{border-color:var(--vp-code-copy-code-hover-border-color);background-color:var(--vp-code-copy-code-hover-bg)}.vp-doc [class*=language-]>button.copy.copied,.vp-doc [class*=language-]>button.copy:hover.copied{border-radius:0 4px 4px 0;background-color:var(--vp-code-copy-code-hover-bg);background-image:var(--vp-icon-copied)}.vp-doc [class*=language-]>button.copy.copied:before,.vp-doc [class*=language-]>button.copy:hover.copied:before{position:relative;top:-1px;transform:translate(calc(-100% - 1px));display:flex;justify-content:center;align-items:center;border:1px solid var(--vp-code-copy-code-hover-border-color);border-right:0;border-radius:4px 0 0 4px;padding:0 10px;width:fit-content;height:40px;text-align:center;font-size:12px;font-weight:500;color:var(--vp-code-copy-code-active-text);background-color:var(--vp-code-copy-code-hover-bg);white-space:nowrap;content:var(--vp-code-copy-copied-text-content)}.vp-doc [class*=language-]>span.lang{position:absolute;top:2px;right:8px;z-index:2;font-size:12px;font-weight:500;color:var(--vp-code-lang-color);transition:color .4s,opacity .4s}.vp-doc [class*=language-]:hover>button.copy+span.lang,.vp-doc [class*=language-]>button.copy:focus+span.lang{opacity:0}.vp-doc .VPTeamMembers{margin-top:24px}.vp-doc .VPTeamMembers.small.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}.vp-doc .VPTeamMembers.small.count-2 .container,.vp-doc .VPTeamMembers.small.count-3 .container{max-width:100%!important}.vp-doc .VPTeamMembers.medium.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}:is(.vp-external-link-icon,.vp-doc a[href*="://"],.vp-doc a[target=_blank]):not(.no-icon):after{display:inline-block;margin-top:-1px;margin-left:4px;width:11px;height:11px;background:currentColor;color:var(--vp-c-text-3);flex-shrink:0;--icon: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' %3E%3Cpath d='M0 0h24v24H0V0z' fill='none' /%3E%3Cpath d='M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5H9z' /%3E%3C/svg%3E");-webkit-mask-image:var(--icon);mask-image:var(--icon)}.vp-external-link-icon:after{content:""}.vp-sponsor{border-radius:16px;overflow:hidden}.vp-sponsor.aside{border-radius:12px}.vp-sponsor-section+.vp-sponsor-section{margin-top:4px}.vp-sponsor-tier{margin-bottom:4px;text-align:center;letter-spacing:1px;line-height:24px;width:100%;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-sponsor.normal .vp-sponsor-tier{padding:13px 0 11px;font-size:14px}.vp-sponsor.aside .vp-sponsor-tier{padding:9px 0 7px;font-size:12px}.vp-sponsor-grid+.vp-sponsor-tier{margin-top:4px}.vp-sponsor-grid{display:flex;flex-wrap:wrap;gap:4px}.vp-sponsor-grid.xmini .vp-sponsor-grid-link{height:64px}.vp-sponsor-grid.xmini .vp-sponsor-grid-image{max-width:64px;max-height:22px}.vp-sponsor-grid.mini .vp-sponsor-grid-link{height:72px}.vp-sponsor-grid.mini .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.small .vp-sponsor-grid-link{height:96px}.vp-sponsor-grid.small .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.medium .vp-sponsor-grid-link{height:112px}.vp-sponsor-grid.medium .vp-sponsor-grid-image{max-width:120px;max-height:36px}.vp-sponsor-grid.big .vp-sponsor-grid-link{height:184px}.vp-sponsor-grid.big .vp-sponsor-grid-image{max-width:192px;max-height:56px}.vp-sponsor-grid[data-vp-grid="2"] .vp-sponsor-grid-item{width:calc((100% - 4px)/2)}.vp-sponsor-grid[data-vp-grid="3"] .vp-sponsor-grid-item{width:calc((100% - 4px * 2) / 3)}.vp-sponsor-grid[data-vp-grid="4"] .vp-sponsor-grid-item{width:calc((100% - 12px)/4)}.vp-sponsor-grid[data-vp-grid="5"] .vp-sponsor-grid-item{width:calc((100% - 16px)/5)}.vp-sponsor-grid[data-vp-grid="6"] .vp-sponsor-grid-item{width:calc((100% - 4px * 5) / 6)}.vp-sponsor-grid-item{flex-shrink:0;width:100%;background-color:var(--vp-c-bg-soft);transition:background-color .25s}.vp-sponsor-grid-item:hover{background-color:var(--vp-c-default-soft)}.vp-sponsor-grid-item:hover .vp-sponsor-grid-image{filter:grayscale(0) invert(0)}.vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.dark .vp-sponsor-grid-item:hover{background-color:var(--vp-c-white)}.dark .vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.vp-sponsor-grid-link{display:flex}.vp-sponsor-grid-box{display:flex;justify-content:center;align-items:center;width:100%}.vp-sponsor-grid-image{max-width:100%;filter:grayscale(1);transition:filter .25s}.dark .vp-sponsor-grid-image{filter:grayscale(1) invert(1)}.VPBadge[data-v-ea5b2908]{display:inline-block;margin-left:2px;border:1px solid transparent;border-radius:12px;padding:0 10px;line-height:22px;font-size:12px;font-weight:500;transform:translateY(-2px)}.vp-doc h1>.VPBadge[data-v-ea5b2908]{margin-top:4px;vertical-align:top}.vp-doc h2>.VPBadge[data-v-ea5b2908]{margin-top:3px;padding:0 8px;vertical-align:top}.vp-doc h3>.VPBadge[data-v-ea5b2908]{vertical-align:middle}.vp-doc h4>.VPBadge[data-v-ea5b2908],.vp-doc h5>.VPBadge[data-v-ea5b2908],.vp-doc h6>.VPBadge[data-v-ea5b2908]{vertical-align:middle;line-height:18px}.VPBadge.info[data-v-ea5b2908]{border-color:var(--vp-badge-info-border);color:var(--vp-badge-info-text);background-color:var(--vp-badge-info-bg)}.VPBadge.tip[data-v-ea5b2908]{border-color:var(--vp-badge-tip-border);color:var(--vp-badge-tip-text);background-color:var(--vp-badge-tip-bg)}.VPBadge.warning[data-v-ea5b2908]{border-color:var(--vp-badge-warning-border);color:var(--vp-badge-warning-text);background-color:var(--vp-badge-warning-bg)}.VPBadge.danger[data-v-ea5b2908]{border-color:var(--vp-badge-danger-border);color:var(--vp-badge-danger-text);background-color:var(--vp-badge-danger-bg)}.VPBackdrop[data-v-54a304ca]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--vp-z-index-backdrop);background:var(--vp-backdrop-bg-color);transition:opacity .5s}.VPBackdrop.fade-enter-from[data-v-54a304ca],.VPBackdrop.fade-leave-to[data-v-54a304ca]{opacity:0}.VPBackdrop.fade-leave-active[data-v-54a304ca]{transition-duration:.25s}@media (min-width: 1280px){.VPBackdrop[data-v-54a304ca]{display:none}}.NotFound[data-v-b9c0c15a]{padding:64px 24px 96px;text-align:center}@media (min-width: 768px){.NotFound[data-v-b9c0c15a]{padding:96px 32px 168px}}.code[data-v-b9c0c15a]{line-height:64px;font-size:64px;font-weight:600}.title[data-v-b9c0c15a]{padding-top:12px;letter-spacing:2px;line-height:20px;font-size:20px;font-weight:700}.divider[data-v-b9c0c15a]{margin:24px auto 18px;width:64px;height:1px;background-color:var(--vp-c-divider)}.quote[data-v-b9c0c15a]{margin:0 auto;max-width:256px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.action[data-v-b9c0c15a]{padding-top:20px}.link[data-v-b9c0c15a]{display:inline-block;border:1px solid var(--vp-c-brand-1);border-radius:16px;padding:3px 16px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:border-color .25s,color .25s}.link[data-v-b9c0c15a]:hover{border-color:var(--vp-c-brand-2);color:var(--vp-c-brand-2)}.root[data-v-463da30f]{position:relative;z-index:1}.nested[data-v-463da30f]{padding-left:16px}.outline-link[data-v-463da30f]{display:block;line-height:28px;color:var(--vp-c-text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .5s;font-weight:400}.outline-link[data-v-463da30f]:hover,.outline-link.active[data-v-463da30f]{color:var(--vp-c-text-1);transition:color .25s}.outline-link.nested[data-v-463da30f]{padding-left:13px}.VPDocAsideOutline[data-v-3a6c4994]{display:none}.VPDocAsideOutline.has-outline[data-v-3a6c4994]{display:block}.content[data-v-3a6c4994]{position:relative;border-left:1px solid var(--vp-c-divider);padding-left:16px;font-size:13px;font-weight:500}.outline-marker[data-v-3a6c4994]{position:absolute;top:32px;left:-1px;z-index:0;opacity:0;width:2px;border-radius:2px;height:18px;background-color:var(--vp-c-brand-1);transition:top .25s cubic-bezier(0,1,.5,1),background-color .5s,opacity .25s}.outline-title[data-v-3a6c4994]{letter-spacing:.4px;line-height:28px;font-size:13px;font-weight:600}.VPDocAside[data-v-cb998dce]{display:flex;flex-direction:column;flex-grow:1}.spacer[data-v-cb998dce]{flex-grow:1}.VPDocAside[data-v-cb998dce] .spacer+.VPDocAsideSponsors,.VPDocAside[data-v-cb998dce] .spacer+.VPDocAsideCarbonAds{margin-top:24px}.VPDocAside[data-v-cb998dce] .VPDocAsideSponsors+.VPDocAsideCarbonAds{margin-top:16px}.VPLastUpdated[data-v-19a7ae4e]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 640px){.VPLastUpdated[data-v-19a7ae4e]{line-height:32px;font-size:14px;font-weight:500}}.VPDocFooter[data-v-a2d931e4]{margin-top:64px}.edit-info[data-v-a2d931e4]{padding-bottom:18px}@media (min-width: 640px){.edit-info[data-v-a2d931e4]{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px}}.edit-link-button[data-v-a2d931e4]{display:flex;align-items:center;border:0;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.edit-link-button[data-v-a2d931e4]:hover{color:var(--vp-c-brand-2)}.edit-link-icon[data-v-a2d931e4]{margin-right:8px;width:14px;height:14px;fill:currentColor}.prev-next[data-v-a2d931e4]{border-top:1px solid var(--vp-c-divider);padding-top:24px;display:grid;grid-row-gap:8px}@media (min-width: 640px){.prev-next[data-v-a2d931e4]{grid-template-columns:repeat(2,1fr);grid-column-gap:16px}}.pager-link[data-v-a2d931e4]{display:block;border:1px solid var(--vp-c-divider);border-radius:8px;padding:11px 16px 13px;width:100%;height:100%;transition:border-color .25s}.pager-link[data-v-a2d931e4]:hover{border-color:var(--vp-c-brand-1)}.pager-link.next[data-v-a2d931e4]{margin-left:auto;text-align:right}.desc[data-v-a2d931e4]{display:block;line-height:20px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.title[data-v-a2d931e4]{display:block;line-height:20px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.VPDocOutlineDropdown[data-v-95bb0785]{margin-bottom:48px}.VPDocOutlineDropdown button[data-v-95bb0785]{display:block;font-size:14px;font-weight:500;line-height:24px;border:1px solid var(--vp-c-border);padding:4px 12px;color:var(--vp-c-text-2);background-color:var(--vp-c-default-soft);border-radius:8px;transition:color .5s}.VPDocOutlineDropdown button[data-v-95bb0785]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPDocOutlineDropdown button.open[data-v-95bb0785]{color:var(--vp-c-text-1)}.icon[data-v-95bb0785]{display:inline-block;vertical-align:middle;width:16px;height:16px;fill:currentColor}[data-v-95bb0785] .outline-link{font-size:14px;font-weight:400}.open>.icon[data-v-95bb0785]{transform:rotate(90deg)}.items[data-v-95bb0785]{margin-top:12px;border-left:1px solid var(--vp-c-divider)}.VPDoc[data-v-a3c25e27]{padding:32px 24px 96px;width:100%}.VPDoc .VPDocOutlineDropdown[data-v-a3c25e27]{display:none}@media (min-width: 960px) and (max-width: 1279px){.VPDoc .VPDocOutlineDropdown[data-v-a3c25e27]{display:block}}@media (min-width: 768px){.VPDoc[data-v-a3c25e27]{padding:48px 32px 128px}}@media (min-width: 960px){.VPDoc[data-v-a3c25e27]{padding:32px 32px 0}.VPDoc:not(.has-sidebar) .container[data-v-a3c25e27]{display:flex;justify-content:center;max-width:992px}.VPDoc:not(.has-sidebar) .content[data-v-a3c25e27]{max-width:752px}}@media (min-width: 1280px){.VPDoc .container[data-v-a3c25e27]{display:flex;justify-content:center}.VPDoc .aside[data-v-a3c25e27]{display:block}}@media (min-width: 1440px){.VPDoc:not(.has-sidebar) .content[data-v-a3c25e27]{max-width:784px}.VPDoc:not(.has-sidebar) .container[data-v-a3c25e27]{max-width:1104px}}.container[data-v-a3c25e27]{margin:0 auto;width:100%}.aside[data-v-a3c25e27]{position:relative;display:none;order:2;flex-grow:1;padding-left:32px;width:100%;max-width:256px}.left-aside[data-v-a3c25e27]{order:1;padding-left:unset;padding-right:32px}.aside-container[data-v-a3c25e27]{position:fixed;top:0;padding-top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + var(--vp-doc-top-height, 0px) + 32px);width:224px;height:100vh;overflow-x:hidden;overflow-y:auto;scrollbar-width:none}.aside-container[data-v-a3c25e27]::-webkit-scrollbar{display:none}.aside-curtain[data-v-a3c25e27]{position:fixed;bottom:0;z-index:10;width:224px;height:32px;background:linear-gradient(transparent,var(--vp-c-bg) 70%)}.aside-content[data-v-a3c25e27]{display:flex;flex-direction:column;min-height:calc(100vh - (var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 32px));padding-bottom:32px}.content[data-v-a3c25e27]{position:relative;margin:0 auto;width:100%}@media (min-width: 960px){.content[data-v-a3c25e27]{padding:0 32px 128px}}@media (min-width: 1280px){.content[data-v-a3c25e27]{order:1;margin:0;min-width:640px}}.content-container[data-v-a3c25e27]{margin:0 auto}.VPDoc.has-aside .content-container[data-v-a3c25e27]{max-width:688px}.external-link-icon-enabled[data-v-a3c25e27] :is(.vp-doc a[href*="://"],.vp-doc a[target=_blank]):after{content:"";color:currentColor}.VPButton[data-v-1e76fe75]{display:inline-block;border:1px solid transparent;text-align:center;font-weight:600;white-space:nowrap;transition:color .25s,border-color .25s,background-color .25s}.VPButton[data-v-1e76fe75]:active{transition:color .1s,border-color .1s,background-color .1s}.VPButton.medium[data-v-1e76fe75]{border-radius:20px;padding:0 20px;line-height:38px;font-size:14px}.VPButton.big[data-v-1e76fe75]{border-radius:24px;padding:0 24px;line-height:46px;font-size:16px}.VPButton.brand[data-v-1e76fe75]{border-color:var(--vp-button-brand-border);color:var(--vp-button-brand-text);background-color:var(--vp-button-brand-bg)}.VPButton.brand[data-v-1e76fe75]:hover{border-color:var(--vp-button-brand-hover-border);color:var(--vp-button-brand-hover-text);background-color:var(--vp-button-brand-hover-bg)}.VPButton.brand[data-v-1e76fe75]:active{border-color:var(--vp-button-brand-active-border);color:var(--vp-button-brand-active-text);background-color:var(--vp-button-brand-active-bg)}.VPButton.alt[data-v-1e76fe75]{border-color:var(--vp-button-alt-border);color:var(--vp-button-alt-text);background-color:var(--vp-button-alt-bg)}.VPButton.alt[data-v-1e76fe75]:hover{border-color:var(--vp-button-alt-hover-border);color:var(--vp-button-alt-hover-text);background-color:var(--vp-button-alt-hover-bg)}.VPButton.alt[data-v-1e76fe75]:active{border-color:var(--vp-button-alt-active-border);color:var(--vp-button-alt-active-text);background-color:var(--vp-button-alt-active-bg)}.VPButton.sponsor[data-v-1e76fe75]{border-color:var(--vp-button-sponsor-border);color:var(--vp-button-sponsor-text);background-color:var(--vp-button-sponsor-bg)}.VPButton.sponsor[data-v-1e76fe75]:hover{border-color:var(--vp-button-sponsor-hover-border);color:var(--vp-button-sponsor-hover-text);background-color:var(--vp-button-sponsor-hover-bg)}.VPButton.sponsor[data-v-1e76fe75]:active{border-color:var(--vp-button-sponsor-active-border);color:var(--vp-button-sponsor-active-text);background-color:var(--vp-button-sponsor-active-bg)}html:not(.dark) .VPImage.dark[data-v-ab19afbb]{display:none}.dark .VPImage.light[data-v-ab19afbb]{display:none}.VPHero[data-v-5a3e9999]{margin-top:calc((var(--vp-nav-height) + var(--vp-layout-top-height, 0px)) * -1);padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px) 24px 48px}@media (min-width: 640px){.VPHero[data-v-5a3e9999]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 48px 64px}}@media (min-width: 960px){.VPHero[data-v-5a3e9999]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 64px 64px}}.container[data-v-5a3e9999]{display:flex;flex-direction:column;margin:0 auto;max-width:1152px}@media (min-width: 960px){.container[data-v-5a3e9999]{flex-direction:row}}.main[data-v-5a3e9999]{position:relative;z-index:10;order:2;flex-grow:1;flex-shrink:0}.VPHero.has-image .container[data-v-5a3e9999]{text-align:center}@media (min-width: 960px){.VPHero.has-image .container[data-v-5a3e9999]{text-align:left}}@media (min-width: 960px){.main[data-v-5a3e9999]{order:1;width:calc((100% / 3) * 2)}.VPHero.has-image .main[data-v-5a3e9999]{max-width:592px}}.name[data-v-5a3e9999],.text[data-v-5a3e9999]{max-width:392px;letter-spacing:-.4px;line-height:40px;font-size:32px;font-weight:700;white-space:pre-wrap}.VPHero.has-image .name[data-v-5a3e9999],.VPHero.has-image .text[data-v-5a3e9999]{margin:0 auto}.name[data-v-5a3e9999]{color:var(--vp-home-hero-name-color)}.clip[data-v-5a3e9999]{background:var(--vp-home-hero-name-background);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:var(--vp-home-hero-name-color)}@media (min-width: 640px){.name[data-v-5a3e9999],.text[data-v-5a3e9999]{max-width:576px;line-height:56px;font-size:48px}}@media (min-width: 960px){.name[data-v-5a3e9999],.text[data-v-5a3e9999]{line-height:64px;font-size:56px}.VPHero.has-image .name[data-v-5a3e9999],.VPHero.has-image .text[data-v-5a3e9999]{margin:0}}.tagline[data-v-5a3e9999]{padding-top:8px;max-width:392px;line-height:28px;font-size:18px;font-weight:500;white-space:pre-wrap;color:var(--vp-c-text-2)}.VPHero.has-image .tagline[data-v-5a3e9999]{margin:0 auto}@media (min-width: 640px){.tagline[data-v-5a3e9999]{padding-top:12px;max-width:576px;line-height:32px;font-size:20px}}@media (min-width: 960px){.tagline[data-v-5a3e9999]{line-height:36px;font-size:24px}.VPHero.has-image .tagline[data-v-5a3e9999]{margin:0}}.actions[data-v-5a3e9999]{display:flex;flex-wrap:wrap;margin:-6px;padding-top:24px}.VPHero.has-image .actions[data-v-5a3e9999]{justify-content:center}@media (min-width: 640px){.actions[data-v-5a3e9999]{padding-top:32px}}@media (min-width: 960px){.VPHero.has-image .actions[data-v-5a3e9999]{justify-content:flex-start}}.action[data-v-5a3e9999]{flex-shrink:0;padding:6px}.image[data-v-5a3e9999]{order:1;margin:-76px -24px -48px}@media (min-width: 640px){.image[data-v-5a3e9999]{margin:-108px -24px -48px}}@media (min-width: 960px){.image[data-v-5a3e9999]{flex-grow:1;order:2;margin:0;min-height:100%}}.image-container[data-v-5a3e9999]{position:relative;margin:0 auto;width:320px;height:320px}@media (min-width: 640px){.image-container[data-v-5a3e9999]{width:392px;height:392px}}@media (min-width: 960px){.image-container[data-v-5a3e9999]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;transform:translate(-32px,-32px)}}.image-bg[data-v-5a3e9999]{position:absolute;top:50%;left:50%;border-radius:50%;width:192px;height:192px;background-image:var(--vp-home-hero-image-background-image);filter:var(--vp-home-hero-image-filter);transform:translate(-50%,-50%)}@media (min-width: 640px){.image-bg[data-v-5a3e9999]{width:256px;height:256px}}@media (min-width: 960px){.image-bg[data-v-5a3e9999]{width:320px;height:320px}}[data-v-5a3e9999] .image-src{position:absolute;top:50%;left:50%;max-width:192px;max-height:192px;transform:translate(-50%,-50%)}@media (min-width: 640px){[data-v-5a3e9999] .image-src{max-width:256px;max-height:256px}}@media (min-width: 960px){[data-v-5a3e9999] .image-src{max-width:320px;max-height:320px}}.VPFeature[data-v-ee984185]{display:block;border:1px solid var(--vp-c-bg-soft);border-radius:12px;height:100%;background-color:var(--vp-c-bg-soft);transition:border-color .25s,background-color .25s}.VPFeature.link[data-v-ee984185]:hover{border-color:var(--vp-c-brand-1)}.box[data-v-ee984185]{display:flex;flex-direction:column;padding:24px;height:100%}.box[data-v-ee984185]>.VPImage{margin-bottom:20px}.icon[data-v-ee984185]{display:flex;justify-content:center;align-items:center;margin-bottom:20px;border-radius:6px;background-color:var(--vp-c-default-soft);width:48px;height:48px;font-size:24px;transition:background-color .25s}.title[data-v-ee984185]{line-height:24px;font-size:16px;font-weight:600}.details[data-v-ee984185]{flex-grow:1;padding-top:8px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.link-text[data-v-ee984185]{padding-top:8px}.link-text-value[data-v-ee984185]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.link-text-icon[data-v-ee984185]{display:inline-block;margin-left:6px;width:14px;height:14px;fill:currentColor}.VPFeatures[data-v-b1eea84a]{position:relative;padding:0 24px}@media (min-width: 640px){.VPFeatures[data-v-b1eea84a]{padding:0 48px}}@media (min-width: 960px){.VPFeatures[data-v-b1eea84a]{padding:0 64px}}.container[data-v-b1eea84a]{margin:0 auto;max-width:1152px}.items[data-v-b1eea84a]{display:flex;flex-wrap:wrap;margin:-8px}.item[data-v-b1eea84a]{padding:8px;width:100%}@media (min-width: 640px){.item.grid-2[data-v-b1eea84a],.item.grid-4[data-v-b1eea84a],.item.grid-6[data-v-b1eea84a]{width:50%}}@media (min-width: 768px){.item.grid-2[data-v-b1eea84a],.item.grid-4[data-v-b1eea84a]{width:50%}.item.grid-3[data-v-b1eea84a],.item.grid-6[data-v-b1eea84a]{width:calc(100% / 3)}}@media (min-width: 960px){.item.grid-4[data-v-b1eea84a]{width:25%}}.VPHome[data-v-20eabd3a]{padding-bottom:96px}.VPHome[data-v-20eabd3a] .VPHomeSponsors{margin-top:112px;margin-bottom:-128px}@media (min-width: 768px){.VPHome[data-v-20eabd3a]{padding-bottom:128px}}.VPContent[data-v-3cf691b6]{flex-grow:1;flex-shrink:0;margin:var(--vp-layout-top-height, 0px) auto 0;width:100%}.VPContent.is-home[data-v-3cf691b6]{width:100%;max-width:100%}.VPContent.has-sidebar[data-v-3cf691b6]{margin:0}@media (min-width: 960px){.VPContent[data-v-3cf691b6]{padding-top:var(--vp-nav-height)}.VPContent.has-sidebar[data-v-3cf691b6]{margin:var(--vp-layout-top-height, 0px) 0 0;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPContent.has-sidebar[data-v-3cf691b6]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.VPFooter[data-v-e4279f1c]{position:relative;z-index:var(--vp-z-index-footer);border-top:1px solid var(--vp-c-gutter);padding:32px 24px;background-color:var(--vp-c-bg)}.VPFooter.has-sidebar[data-v-e4279f1c]{display:none}@media (min-width: 768px){.VPFooter[data-v-e4279f1c]{padding:32px}}.container[data-v-e4279f1c]{margin:0 auto;max-width:var(--vp-layout-max-width);text-align:center}.message[data-v-e4279f1c],.copyright[data-v-e4279f1c]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.VPLocalNavOutlineDropdown[data-v-24251f6f]{padding:12px 20px 11px}.VPLocalNavOutlineDropdown button[data-v-24251f6f]{display:block;font-size:12px;font-weight:500;line-height:24px;color:var(--vp-c-text-2);transition:color .5s;position:relative}.VPLocalNavOutlineDropdown button[data-v-24251f6f]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPLocalNavOutlineDropdown button.open[data-v-24251f6f]{color:var(--vp-c-text-1)}.icon[data-v-24251f6f]{display:inline-block;vertical-align:middle;margin-left:2px;width:14px;height:14px;fill:currentColor}[data-v-24251f6f] .outline-link{font-size:14px;padding:2px 0}.open>.icon[data-v-24251f6f]{transform:rotate(90deg)}.items[data-v-24251f6f]{position:absolute;top:64px;right:16px;left:16px;display:grid;gap:1px;border:1px solid var(--vp-c-border);border-radius:8px;background-color:var(--vp-c-gutter);max-height:calc(var(--vp-vh, 100vh) - 86px);overflow:hidden auto;box-shadow:var(--vp-shadow-3)}.header[data-v-24251f6f]{background-color:var(--vp-c-bg-soft)}.top-link[data-v-24251f6f]{display:block;padding:0 16px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.outline[data-v-24251f6f]{padding:8px 0;background-color:var(--vp-c-bg-soft)}.flyout-enter-active[data-v-24251f6f]{transition:all .2s ease-out}.flyout-leave-active[data-v-24251f6f]{transition:all .15s ease-in}.flyout-enter-from[data-v-24251f6f],.flyout-leave-to[data-v-24251f6f]{opacity:0;transform:translateY(-16px)}.VPLocalNav[data-v-9e669cc1]{position:sticky;top:0;left:0;z-index:var(--vp-z-index-local-nav);display:flex;justify-content:space-between;align-items:center;border-top:1px solid var(--vp-c-gutter);border-bottom:1px solid var(--vp-c-gutter);padding-top:var(--vp-layout-top-height, 0px);width:100%;background-color:var(--vp-local-nav-bg-color)}.VPLocalNav.fixed[data-v-9e669cc1]{position:fixed}.VPLocalNav.reached-top[data-v-9e669cc1]{border-top-color:transparent}@media (min-width: 960px){.VPLocalNav[data-v-9e669cc1]{display:none}}.menu[data-v-9e669cc1]{display:flex;align-items:center;padding:12px 24px 11px;line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.menu[data-v-9e669cc1]:hover{color:var(--vp-c-text-1);transition:color .25s}@media (min-width: 768px){.menu[data-v-9e669cc1]{padding:0 32px}}.menu-icon[data-v-9e669cc1]{margin-right:8px;width:16px;height:16px;fill:currentColor}.VPOutlineDropdown[data-v-9e669cc1]{padding:12px 24px 11px}@media (min-width: 768px){.VPOutlineDropdown[data-v-9e669cc1]{padding:12px 32px 11px}}.VPSwitch[data-v-1c29e291]{position:relative;border-radius:11px;display:block;width:40px;height:22px;flex-shrink:0;border:1px solid var(--vp-input-border-color);background-color:var(--vp-input-switch-bg-color);transition:border-color .25s!important}.VPSwitch[data-v-1c29e291]:hover{border-color:var(--vp-c-brand-1)}.check[data-v-1c29e291]{position:absolute;top:1px;left:1px;width:18px;height:18px;border-radius:50%;background-color:var(--vp-c-neutral-inverse);box-shadow:var(--vp-shadow-1);transition:transform .25s!important}.icon[data-v-1c29e291]{position:relative;display:block;width:18px;height:18px;border-radius:50%;overflow:hidden}.icon[data-v-1c29e291] svg{position:absolute;top:3px;left:3px;width:12px;height:12px;fill:var(--vp-c-text-2)}.dark .icon[data-v-1c29e291] svg{fill:var(--vp-c-text-1);transition:opacity .25s!important}.sun[data-v-3329432d]{opacity:1}.moon[data-v-3329432d],.dark .sun[data-v-3329432d]{opacity:0}.dark .moon[data-v-3329432d]{opacity:1}.dark .VPSwitchAppearance[data-v-3329432d] .check{transform:translate(18px)}.VPNavBarAppearance[data-v-283b26e9]{display:none}@media (min-width: 1280px){.VPNavBarAppearance[data-v-283b26e9]{display:flex;align-items:center}}.VPMenuGroup+.VPMenuLink[data-v-f51f088d]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.link[data-v-f51f088d]{display:block;border-radius:6px;padding:0 12px;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);white-space:nowrap;transition:background-color .25s,color .25s}.link[data-v-f51f088d]:hover{color:var(--vp-c-brand-1);background-color:var(--vp-c-default-soft)}.link.active[data-v-f51f088d]{color:var(--vp-c-brand-1)}.VPMenuGroup[data-v-a6b0397c]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.VPMenuGroup[data-v-a6b0397c]:first-child{margin-top:0;border-top:0;padding-top:0}.VPMenuGroup+.VPMenuGroup[data-v-a6b0397c]{margin-top:12px;border-top:1px solid var(--vp-c-divider)}.title[data-v-a6b0397c]{padding:0 12px;line-height:32px;font-size:14px;font-weight:600;color:var(--vp-c-text-2);white-space:nowrap;transition:color .25s}.VPMenu[data-v-e42ed9b3]{border-radius:12px;padding:12px;min-width:128px;border:1px solid var(--vp-c-divider);background-color:var(--vp-c-bg-elv);box-shadow:var(--vp-shadow-3);transition:background-color .5s;max-height:calc(100vh - var(--vp-nav-height));overflow-y:auto}.VPMenu[data-v-e42ed9b3] .group{margin:0 -12px;padding:0 12px 12px}.VPMenu[data-v-e42ed9b3] .group+.group{border-top:1px solid var(--vp-c-divider);padding:11px 12px 12px}.VPMenu[data-v-e42ed9b3] .group:last-child{padding-bottom:0}.VPMenu[data-v-e42ed9b3] .group+.item{border-top:1px solid var(--vp-c-divider);padding:11px 16px 0}.VPMenu[data-v-e42ed9b3] .item{padding:0 16px;white-space:nowrap}.VPMenu[data-v-e42ed9b3] .label{flex-grow:1;line-height:28px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.VPMenu[data-v-e42ed9b3] .action{padding-left:24px}.VPFlyout[data-v-aa8de344]{position:relative}.VPFlyout[data-v-aa8de344]:hover{color:var(--vp-c-brand-1);transition:color .25s}.VPFlyout:hover .text[data-v-aa8de344]{color:var(--vp-c-text-2)}.VPFlyout:hover .icon[data-v-aa8de344]{fill:var(--vp-c-text-2)}.VPFlyout.active .text[data-v-aa8de344]{color:var(--vp-c-brand-1)}.VPFlyout.active:hover .text[data-v-aa8de344]{color:var(--vp-c-brand-2)}.VPFlyout:hover .menu[data-v-aa8de344],.button[aria-expanded=true]+.menu[data-v-aa8de344]{opacity:1;visibility:visible;transform:translateY(0)}.button[aria-expanded=false]+.menu[data-v-aa8de344]{opacity:0;visibility:hidden;transform:translateY(0)}.button[data-v-aa8de344]{display:flex;align-items:center;padding:0 12px;height:var(--vp-nav-height);color:var(--vp-c-text-1);transition:color .5s}.text[data-v-aa8de344]{display:flex;align-items:center;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.option-icon[data-v-aa8de344]{margin-right:0;width:16px;height:16px;fill:currentColor}.text-icon[data-v-aa8de344]{margin-left:4px;width:14px;height:14px;fill:currentColor}.icon[data-v-aa8de344]{width:20px;height:20px;fill:currentColor;transition:fill .25s}.menu[data-v-aa8de344]{position:absolute;top:calc(var(--vp-nav-height) / 2 + 20px);right:0;opacity:0;visibility:hidden;transition:opacity .25s,visibility .25s,transform .25s}.VPSocialLink[data-v-16cf740a]{display:flex;justify-content:center;align-items:center;width:36px;height:36px;color:var(--vp-c-text-2);transition:color .5s}.VPSocialLink[data-v-16cf740a]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPSocialLink[data-v-16cf740a]>svg{width:20px;height:20px;fill:currentColor}.VPSocialLinks[data-v-e71e869c]{display:flex;justify-content:center}.VPNavBarExtra[data-v-c8c2ae4b]{display:none;margin-right:-12px}@media (min-width: 768px){.VPNavBarExtra[data-v-c8c2ae4b]{display:block}}@media (min-width: 1280px){.VPNavBarExtra[data-v-c8c2ae4b]{display:none}}.trans-title[data-v-c8c2ae4b]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.item.appearance[data-v-c8c2ae4b],.item.social-links[data-v-c8c2ae4b]{display:flex;align-items:center;padding:0 12px}.item.appearance[data-v-c8c2ae4b]{min-width:176px}.appearance-action[data-v-c8c2ae4b]{margin-right:-2px}.social-links-list[data-v-c8c2ae4b]{margin:-4px -8px}.VPNavBarHamburger[data-v-6bee1efd]{display:flex;justify-content:center;align-items:center;width:48px;height:var(--vp-nav-height)}@media (min-width: 768px){.VPNavBarHamburger[data-v-6bee1efd]{display:none}}.container[data-v-6bee1efd]{position:relative;width:16px;height:14px;overflow:hidden}.VPNavBarHamburger:hover .top[data-v-6bee1efd]{top:0;left:0;transform:translate(4px)}.VPNavBarHamburger:hover .middle[data-v-6bee1efd]{top:6px;left:0;transform:translate(0)}.VPNavBarHamburger:hover .bottom[data-v-6bee1efd]{top:12px;left:0;transform:translate(8px)}.VPNavBarHamburger.active .top[data-v-6bee1efd]{top:6px;transform:translate(0) rotate(225deg)}.VPNavBarHamburger.active .middle[data-v-6bee1efd]{top:6px;transform:translate(16px)}.VPNavBarHamburger.active .bottom[data-v-6bee1efd]{top:6px;transform:translate(0) rotate(135deg)}.VPNavBarHamburger.active:hover .top[data-v-6bee1efd],.VPNavBarHamburger.active:hover .middle[data-v-6bee1efd],.VPNavBarHamburger.active:hover .bottom[data-v-6bee1efd]{background-color:var(--vp-c-text-2);transition:top .25s,background-color .25s,transform .25s}.top[data-v-6bee1efd],.middle[data-v-6bee1efd],.bottom[data-v-6bee1efd]{position:absolute;width:16px;height:2px;background-color:var(--vp-c-text-1);transition:top .25s,background-color .5s,transform .25s}.top[data-v-6bee1efd]{top:0;left:0;transform:translate(0)}.middle[data-v-6bee1efd]{top:6px;left:0;transform:translate(8px)}.bottom[data-v-6bee1efd]{top:12px;left:0;transform:translate(4px)}.VPNavBarMenuLink[data-v-cb318fec]{display:flex;align-items:center;padding:0 12px;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.VPNavBarMenuLink.active[data-v-cb318fec],.VPNavBarMenuLink[data-v-cb318fec]:hover{color:var(--vp-c-brand-1)}.VPNavBarMenu[data-v-f732b5d0]{display:none}@media (min-width: 768px){.VPNavBarMenu[data-v-f732b5d0]{display:flex}}/*! @docsearch/css 3.5.2 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */:root{--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:rgba(101,108,133,.8);--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 hsla(0,0%,100%,.5),0 3px 8px 0 #555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0 #d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px rgba(30,35,90,.4);--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 rgba(69,98,155,.12)}html[data-theme=dark]{--docsearch-text-color:#f5f6f7;--docsearch-container-background:rgba(9,10,17,.8);--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#090a11;--docsearch-searchbox-focus-background:#000;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-gradient:linear-gradient(-26.5deg,#565872,#31355b);--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-footer-background:#1e2136;--docsearch-footer-shadow:inset 0 1px 0 0 rgba(73,76,106,.5),0 -4px 8px 0 rgba(0,0,0,.2);--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497}.DocSearch-Button{align-items:center;background:var(--docsearch-searchbox-background);border:0;border-radius:40px;color:var(--docsearch-muted-color);cursor:pointer;display:flex;font-weight:500;height:36px;justify-content:space-between;margin:0 0 0 16px;padding:0 8px;-webkit-user-select:none;user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:var(--docsearch-searchbox-focus-background);box-shadow:var(--docsearch-searchbox-shadow);color:var(--docsearch-text-color);outline:none}.DocSearch-Button-Container{align-items:center;display:flex}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Button .DocSearch-Search-Icon{color:var(--docsearch-text-color)}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Button-Keys{display:flex;min-width:calc(40px + .8em)}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;position:relative;padding:0 0 2px;border:0;top:-1px;width:20px}@media (max-width:768px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder{display:none}}.DocSearch--active{overflow:hidden!important}.DocSearch-Container,.DocSearch-Container *{box-sizing:border-box}.DocSearch-Container{background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Container a{text-decoration:none}.DocSearch-Link{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;font:inherit;margin:0;padding:0}.DocSearch-Modal{background:var(--docsearch-modal-background);border-radius:6px;box-shadow:var(--docsearch-modal-shadow);flex-direction:column;margin:60px auto auto;max-width:var(--docsearch-modal-width);position:relative}.DocSearch-SearchBar{display:flex;padding:var(--docsearch-spacing) var(--docsearch-spacing) 0}.DocSearch-Form{align-items:center;background:var(--docsearch-searchbox-focus-background);border-radius:4px;box-shadow:var(--docsearch-searchbox-shadow);display:flex;height:var(--docsearch-searchbox-height);margin:0;padding:0 var(--docsearch-spacing);position:relative;width:100%}.DocSearch-Input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:0;color:var(--docsearch-text-color);flex:1;font:inherit;font-size:1.2em;height:100%;outline:none;padding:0 0 0 8px;width:80%}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-MagnifierLabel,.DocSearch-Reset{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator{display:none}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{animation:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0;stroke-width:var(--docsearch-icon-stroke-width)}}.DocSearch-Reset{animation:fade-in .1s ease-in forwards;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;padding:2px;right:0;stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Cancel{display:none}.DocSearch-Dropdown{max-height:calc(var(--docsearch-modal-height) - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:transparent}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help,.DocSearch-Label{color:var(--docsearch-muted-color)}.DocSearch-Help{font-size:.9em;margin:0;-webkit-user-select:none;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{color:var(--docsearch-muted-color);display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--deleting{transition:none}}.DocSearch-Hit--deleting{opacity:0;transition:all .25s linear}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--favoriting{transition:none}}.DocSearch-Hit--favoriting{transform:scale(0);transform-origin:top center;transition:all .25s linear;transition-delay:.25s}.DocSearch-Hit a{background:var(--docsearch-hit-background);border-radius:4px;box-shadow:var(--docsearch-hit-shadow);display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-highlight-color);font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;stroke-width:var(--docsearch-icon-stroke-width);width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-highlight-color)}.DocSearch-Hit[aria-selected=true] mark{text-decoration:underline}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-hit-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:var(--docsearch-muted-color);stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Hit-action{align-items:center;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:inherit;cursor:pointer;padding:2px}svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:rgba(0,0,0,.2);transition:background-color .1s ease-in}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{transition:none}}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-muted-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] mark{color:var(--docsearch-hit-active-color)!important}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:rgba(0,0,0,.2);transition:none}}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:var(--docsearch-muted-color);padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:1em;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:none;text-decoration:underline}.DocSearch-Footer{align-items:center;background:var(--docsearch-footer-background);border-radius:0 0 8px 8px;box-shadow:var(--docsearch-footer-shadow);display:flex;flex-direction:row-reverse;flex-shrink:0;height:var(--docsearch-footer-height);justify-content:space-between;padding:0 var(--docsearch-spacing);position:relative;-webkit-user-select:none;user-select:none;width:100%;z-index:300}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;list-style:none;margin:0;padding:0}.DocSearch-Commands li{align-items:center;display:flex}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:2px;box-shadow:var(--docsearch-key-shadow);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 1px;color:var(--docsearch-muted-color);border:0;width:20px}@media (max-width:768px){:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%}.DocSearch-Container{height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);margin:0;max-width:100%;width:100%}.DocSearch-Dropdown{max-height:calc(var(--docsearch-vh, 1vh)*100 - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height))}.DocSearch-Cancel{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:var(--docsearch-spacing);outline:none;overflow:hidden;padding:0;-webkit-user-select:none;user-select:none;white-space:nowrap}.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}[class*=DocSearch]{--docsearch-primary-color: var(--vp-c-brand-1);--docsearch-highlight-color: var(--docsearch-primary-color);--docsearch-text-color: var(--vp-c-text-1);--docsearch-muted-color: var(--vp-c-text-2);--docsearch-searchbox-shadow: none;--docsearch-searchbox-background: transparent;--docsearch-searchbox-focus-background: transparent;--docsearch-key-gradient: transparent;--docsearch-key-shadow: none;--docsearch-modal-background: var(--vp-c-bg-soft);--docsearch-footer-background: var(--vp-c-bg)}.dark [class*=DocSearch]{--docsearch-modal-shadow: none;--docsearch-footer-shadow: none;--docsearch-logo-color: var(--vp-c-text-2);--docsearch-hit-background: var(--vp-c-default-soft);--docsearch-hit-color: var(--vp-c-text-2);--docsearch-hit-shadow: none}.DocSearch-Button{display:flex;justify-content:center;align-items:center;margin:0;padding:0;width:48px;height:55px;background:transparent;transition:border-color .25s}.DocSearch-Button:hover{background:transparent}.DocSearch-Button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.DocSearch-Button:focus:not(:focus-visible){outline:none!important}@media (min-width: 768px){.DocSearch-Button{justify-content:flex-start;border:1px solid transparent;border-radius:8px;padding:0 10px 0 12px;width:100%;height:40px;background-color:var(--vp-c-bg-alt)}.DocSearch-Button:hover{border-color:var(--vp-c-brand-1);background:var(--vp-c-bg-alt)}}.DocSearch-Button .DocSearch-Button-Container{display:flex;align-items:center}.DocSearch-Button .DocSearch-Search-Icon{position:relative;width:16px;height:16px;color:var(--vp-c-text-1);fill:currentColor;transition:color .5s}.DocSearch-Button:hover .DocSearch-Search-Icon{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Search-Icon{top:1px;margin-right:8px;width:14px;height:14px;color:var(--vp-c-text-2)}}.DocSearch-Button .DocSearch-Button-Placeholder{display:none;margin-top:2px;padding:0 16px 0 0;font-size:13px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.DocSearch-Button:hover .DocSearch-Button-Placeholder{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Placeholder{display:inline-block}}.DocSearch-Button .DocSearch-Button-Keys{direction:ltr;display:none;min-width:auto}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Keys{display:flex;align-items:center}}.DocSearch-Button .DocSearch-Button-Key{display:block;margin:2px 0 0;border:1px solid var(--vp-c-divider);border-right:none;border-radius:4px 0 0 4px;padding-left:6px;min-width:0;width:auto;height:22px;line-height:22px;font-family:var(--vp-font-family-base);font-size:12px;font-weight:500;transition:color .5s,border-color .5s}.DocSearch-Button .DocSearch-Button-Key+.DocSearch-Button-Key{border-right:1px solid var(--vp-c-divider);border-left:none;border-radius:0 4px 4px 0;padding-left:2px;padding-right:6px}.DocSearch-Button .DocSearch-Button-Key:first-child{font-size:0!important}.DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"Ctrl";font-size:12px;letter-spacing:normal;color:var(--docsearch-muted-color)}.mac .DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"⌘"}.DocSearch-Button .DocSearch-Button-Key:first-child>*{display:none}.VPNavBarSearch{display:flex;align-items:center}@media (min-width: 768px){.VPNavBarSearch{flex-grow:1;padding-left:24px}}@media (min-width: 960px){.VPNavBarSearch{padding-left:32px}}.dark .DocSearch-Footer{border-top:1px solid var(--vp-c-divider)}.DocSearch-Form{border:1px solid var(--vp-c-brand-1);background-color:var(--vp-c-white)}.dark .DocSearch-Form{background-color:var(--vp-c-default-soft)}.DocSearch-Screen-Icon>svg{margin:auto}.VPNavBarSocialLinks[data-v-ef6192dc]{display:none}@media (min-width: 1280px){.VPNavBarSocialLinks[data-v-ef6192dc]{display:flex;align-items:center}}.title[data-v-2973dbb4]{display:flex;align-items:center;border-bottom:1px solid transparent;width:100%;height:var(--vp-nav-height);font-size:16px;font-weight:600;color:var(--vp-c-text-1);transition:opacity .25s}@media (min-width: 960px){.title[data-v-2973dbb4]{flex-shrink:0}.VPNavBarTitle.has-sidebar .title[data-v-2973dbb4]{border-bottom-color:var(--vp-c-divider)}}[data-v-2973dbb4] .logo{margin-right:8px;height:var(--vp-nav-logo-height)}.VPNavBarTranslations[data-v-ff4524ae]{display:none}@media (min-width: 1280px){.VPNavBarTranslations[data-v-ff4524ae]{display:flex;align-items:center}}.title[data-v-ff4524ae]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.VPNavBar[data-v-f1abbc6e]{position:relative;border-bottom:1px solid transparent;padding:0 8px 0 24px;height:var(--vp-nav-height);pointer-events:none;white-space:nowrap}@media (min-width: 768px){.VPNavBar[data-v-f1abbc6e]{padding:0 32px}}@media (min-width: 960px){.VPNavBar.has-sidebar[data-v-f1abbc6e]{padding:0}.VPNavBar[data-v-f1abbc6e]:not(.has-sidebar):not(.top){border-bottom-color:var(--vp-c-gutter);background-color:var(--vp-nav-bg-color)}}.container[data-v-f1abbc6e]{display:flex;justify-content:space-between;margin:0 auto;max-width:calc(var(--vp-layout-max-width) - 64px);height:var(--vp-nav-height);pointer-events:none}.container>.title[data-v-f1abbc6e],.container>.content[data-v-f1abbc6e]{pointer-events:none}.container[data-v-f1abbc6e] *{pointer-events:auto}@media (min-width: 960px){.VPNavBar.has-sidebar .container[data-v-f1abbc6e]{max-width:100%}}.title[data-v-f1abbc6e]{flex-shrink:0;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar.has-sidebar .title[data-v-f1abbc6e]{position:absolute;top:0;left:0;z-index:2;padding:0 32px;width:var(--vp-sidebar-width);height:var(--vp-nav-height);background-color:transparent}}@media (min-width: 1440px){.VPNavBar.has-sidebar .title[data-v-f1abbc6e]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}.content[data-v-f1abbc6e]{flex-grow:1}@media (min-width: 960px){.VPNavBar.has-sidebar .content[data-v-f1abbc6e]{position:relative;z-index:1;padding-right:32px;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .content[data-v-f1abbc6e]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2 + 32px);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.content-body[data-v-f1abbc6e]{display:flex;justify-content:flex-end;align-items:center;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar:not(.top) .content-body[data-v-f1abbc6e]{position:relative;background-color:var(--vp-nav-bg-color)}}@media (max-width: 767px){.content-body[data-v-f1abbc6e]{column-gap:.5rem}}.menu+.translations[data-v-f1abbc6e]:before,.menu+.appearance[data-v-f1abbc6e]:before,.menu+.social-links[data-v-f1abbc6e]:before,.translations+.appearance[data-v-f1abbc6e]:before,.appearance+.social-links[data-v-f1abbc6e]:before{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--vp-c-divider);content:""}.menu+.appearance[data-v-f1abbc6e]:before,.translations+.appearance[data-v-f1abbc6e]:before{margin-right:16px}.appearance+.social-links[data-v-f1abbc6e]:before{margin-left:16px}.social-links[data-v-f1abbc6e]{margin-right:-8px}@media (min-width: 960px){.VPNavBar.has-sidebar .curtain[data-v-f1abbc6e]{position:absolute;right:0;bottom:-31px;width:calc(100% - var(--vp-sidebar-width));height:32px}.VPNavBar.has-sidebar .curtain[data-v-f1abbc6e]:before{display:block;width:100%;height:32px;background:linear-gradient(var(--vp-c-bg),transparent 70%);content:""}}@media (min-width: 1440px){.VPNavBar.has-sidebar .curtain[data-v-f1abbc6e]{width:calc(100% - ((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width)))}}.VPNavScreenAppearance[data-v-0dc5cf49]{display:flex;justify-content:space-between;align-items:center;border-radius:8px;padding:12px 14px 12px 16px;background-color:var(--vp-c-bg-soft)}.text[data-v-0dc5cf49]{line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.VPNavScreenMenuLink[data-v-fe523e3d]{display:block;border-bottom:1px solid var(--vp-c-divider);padding:12px 0 11px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:border-color .25s,color .25s}.VPNavScreenMenuLink[data-v-fe523e3d]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupLink[data-v-aea78dd1]{display:block;margin-left:12px;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-1);transition:color .25s}.VPNavScreenMenuGroupLink[data-v-aea78dd1]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupSection[data-v-f60dbfa7]{display:block}.title[data-v-f60dbfa7]{line-height:32px;font-size:13px;font-weight:700;color:var(--vp-c-text-2);transition:color .25s}.VPNavScreenMenuGroup[data-v-c2c554ed]{border-bottom:1px solid var(--vp-c-divider);height:48px;overflow:hidden;transition:border-color .5s}.VPNavScreenMenuGroup .items[data-v-c2c554ed]{visibility:hidden}.VPNavScreenMenuGroup.open .items[data-v-c2c554ed]{visibility:visible}.VPNavScreenMenuGroup.open[data-v-c2c554ed]{padding-bottom:10px;height:auto}.VPNavScreenMenuGroup.open .button[data-v-c2c554ed]{padding-bottom:6px;color:var(--vp-c-brand-1)}.VPNavScreenMenuGroup.open .button-icon[data-v-c2c554ed]{transform:rotate(45deg)}.button[data-v-c2c554ed]{display:flex;justify-content:space-between;align-items:center;padding:12px 4px 11px 0;width:100%;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.button[data-v-c2c554ed]:hover{color:var(--vp-c-brand-1)}.button-icon[data-v-c2c554ed]{width:14px;height:14px;fill:var(--vp-c-text-2);transition:fill .5s,transform .25s}.group[data-v-c2c554ed]:first-child{padding-top:0}.group+.group[data-v-c2c554ed],.group+.item[data-v-c2c554ed]{padding-top:4px}.VPNavScreenTranslations[data-v-41505286]{height:24px;overflow:hidden}.VPNavScreenTranslations.open[data-v-41505286]{height:auto}.title[data-v-41505286]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-text-1)}.icon[data-v-41505286]{width:16px;height:16px;fill:currentColor}.icon.lang[data-v-41505286]{margin-right:8px}.icon.chevron[data-v-41505286]{margin-left:4px}.list[data-v-41505286]{padding:4px 0 0 24px}.link[data-v-41505286]{line-height:32px;font-size:13px;color:var(--vp-c-text-1)}.VPNavScreen[data-v-57cce842]{position:fixed;top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 1px);right:0;bottom:0;left:0;padding:0 32px;width:100%;background-color:var(--vp-nav-screen-bg-color);overflow-y:auto;transition:background-color .5s;pointer-events:auto}.VPNavScreen.fade-enter-active[data-v-57cce842],.VPNavScreen.fade-leave-active[data-v-57cce842]{transition:opacity .25s}.VPNavScreen.fade-enter-active .container[data-v-57cce842],.VPNavScreen.fade-leave-active .container[data-v-57cce842]{transition:transform .25s ease}.VPNavScreen.fade-enter-from[data-v-57cce842],.VPNavScreen.fade-leave-to[data-v-57cce842]{opacity:0}.VPNavScreen.fade-enter-from .container[data-v-57cce842],.VPNavScreen.fade-leave-to .container[data-v-57cce842]{transform:translateY(-8px)}@media (min-width: 768px){.VPNavScreen[data-v-57cce842]{display:none}}.container[data-v-57cce842]{margin:0 auto;padding:24px 0 96px;max-width:288px}.menu+.translations[data-v-57cce842],.menu+.appearance[data-v-57cce842],.translations+.appearance[data-v-57cce842]{margin-top:24px}.menu+.social-links[data-v-57cce842]{margin-top:16px}.appearance+.social-links[data-v-57cce842]{margin-top:16px}.VPNav[data-v-7ad780c2]{position:relative;top:var(--vp-layout-top-height, 0px);left:0;z-index:var(--vp-z-index-nav);width:100%;pointer-events:none;transition:background-color .5s}@media (min-width: 960px){.VPNav[data-v-7ad780c2]{position:fixed}}.VPSidebarItem.level-0[data-v-bd01e0d5]{padding-bottom:24px}.VPSidebarItem.collapsed.level-0[data-v-bd01e0d5]{padding-bottom:10px}.item[data-v-bd01e0d5]{position:relative;display:flex;width:100%}.VPSidebarItem.collapsible>.item[data-v-bd01e0d5]{cursor:pointer}.indicator[data-v-bd01e0d5]{position:absolute;top:6px;bottom:6px;left:-17px;width:2px;border-radius:2px;transition:background-color .25s}.VPSidebarItem.level-2.is-active>.item>.indicator[data-v-bd01e0d5],.VPSidebarItem.level-3.is-active>.item>.indicator[data-v-bd01e0d5],.VPSidebarItem.level-4.is-active>.item>.indicator[data-v-bd01e0d5],.VPSidebarItem.level-5.is-active>.item>.indicator[data-v-bd01e0d5]{background-color:var(--vp-c-brand-1)}.link[data-v-bd01e0d5]{display:flex;align-items:center;flex-grow:1}.text[data-v-bd01e0d5]{flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;transition:color .25s}.VPSidebarItem.level-0 .text[data-v-bd01e0d5]{font-weight:700;color:var(--vp-c-text-1)}.VPSidebarItem.level-1 .text[data-v-bd01e0d5],.VPSidebarItem.level-2 .text[data-v-bd01e0d5],.VPSidebarItem.level-3 .text[data-v-bd01e0d5],.VPSidebarItem.level-4 .text[data-v-bd01e0d5],.VPSidebarItem.level-5 .text[data-v-bd01e0d5]{font-weight:500;color:var(--vp-c-text-2)}.VPSidebarItem.level-0.is-link>.item>.link:hover .text[data-v-bd01e0d5],.VPSidebarItem.level-1.is-link>.item>.link:hover .text[data-v-bd01e0d5],.VPSidebarItem.level-2.is-link>.item>.link:hover .text[data-v-bd01e0d5],.VPSidebarItem.level-3.is-link>.item>.link:hover .text[data-v-bd01e0d5],.VPSidebarItem.level-4.is-link>.item>.link:hover .text[data-v-bd01e0d5],.VPSidebarItem.level-5.is-link>.item>.link:hover .text[data-v-bd01e0d5]{color:var(--vp-c-brand-1)}.VPSidebarItem.level-0.has-active>.item>.text[data-v-bd01e0d5],.VPSidebarItem.level-1.has-active>.item>.text[data-v-bd01e0d5],.VPSidebarItem.level-2.has-active>.item>.text[data-v-bd01e0d5],.VPSidebarItem.level-3.has-active>.item>.text[data-v-bd01e0d5],.VPSidebarItem.level-4.has-active>.item>.text[data-v-bd01e0d5],.VPSidebarItem.level-5.has-active>.item>.text[data-v-bd01e0d5],.VPSidebarItem.level-0.has-active>.item>.link>.text[data-v-bd01e0d5],.VPSidebarItem.level-1.has-active>.item>.link>.text[data-v-bd01e0d5],.VPSidebarItem.level-2.has-active>.item>.link>.text[data-v-bd01e0d5],.VPSidebarItem.level-3.has-active>.item>.link>.text[data-v-bd01e0d5],.VPSidebarItem.level-4.has-active>.item>.link>.text[data-v-bd01e0d5],.VPSidebarItem.level-5.has-active>.item>.link>.text[data-v-bd01e0d5]{color:var(--vp-c-text-1)}.VPSidebarItem.level-0.is-active>.item .link>.text[data-v-bd01e0d5],.VPSidebarItem.level-1.is-active>.item .link>.text[data-v-bd01e0d5],.VPSidebarItem.level-2.is-active>.item .link>.text[data-v-bd01e0d5],.VPSidebarItem.level-3.is-active>.item .link>.text[data-v-bd01e0d5],.VPSidebarItem.level-4.is-active>.item .link>.text[data-v-bd01e0d5],.VPSidebarItem.level-5.is-active>.item .link>.text[data-v-bd01e0d5]{color:var(--vp-c-brand-1)}.caret[data-v-bd01e0d5]{display:flex;justify-content:center;align-items:center;margin-right:-7px;width:32px;height:32px;color:var(--vp-c-text-3);cursor:pointer;transition:color .25s;flex-shrink:0}.item:hover .caret[data-v-bd01e0d5]{color:var(--vp-c-text-2)}.item:hover .caret[data-v-bd01e0d5]:hover{color:var(--vp-c-text-1)}.caret-icon[data-v-bd01e0d5]{width:18px;height:18px;fill:currentColor;transform:rotate(90deg);transition:transform .25s}.VPSidebarItem.collapsed .caret-icon[data-v-bd01e0d5]{transform:rotate(0)}.VPSidebarItem.level-1 .items[data-v-bd01e0d5],.VPSidebarItem.level-2 .items[data-v-bd01e0d5],.VPSidebarItem.level-3 .items[data-v-bd01e0d5],.VPSidebarItem.level-4 .items[data-v-bd01e0d5],.VPSidebarItem.level-5 .items[data-v-bd01e0d5]{border-left:1px solid var(--vp-c-divider);padding-left:16px}.VPSidebarItem.collapsed .items[data-v-bd01e0d5]{display:none}.VPSidebar[data-v-ee2efba5]{position:fixed;top:var(--vp-layout-top-height, 0px);bottom:0;left:0;z-index:var(--vp-z-index-sidebar);padding:32px 32px 96px;width:calc(100vw - 64px);max-width:320px;background-color:var(--vp-sidebar-bg-color);opacity:0;box-shadow:var(--vp-c-shadow-3);overflow-x:hidden;overflow-y:auto;transform:translate(-100%);transition:opacity .5s,transform .25s ease;overscroll-behavior:contain}.VPSidebar.open[data-v-ee2efba5]{opacity:1;visibility:visible;transform:translate(0);transition:opacity .25s,transform .5s cubic-bezier(.19,1,.22,1)}.dark .VPSidebar[data-v-ee2efba5]{box-shadow:var(--vp-shadow-1)}@media (min-width: 960px){.VPSidebar[data-v-ee2efba5]{z-index:1;padding-top:var(--vp-nav-height);padding-bottom:128px;width:var(--vp-sidebar-width);max-width:100%;background-color:var(--vp-sidebar-bg-color);opacity:1;visibility:visible;box-shadow:none;transform:translate(0)}}@media (min-width: 1440px){.VPSidebar[data-v-ee2efba5]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}@media (min-width: 960px){.curtain[data-v-ee2efba5]{position:sticky;top:-64px;left:0;z-index:1;margin-top:calc(var(--vp-nav-height) * -1);margin-right:-32px;margin-left:-32px;height:var(--vp-nav-height);background-color:var(--vp-sidebar-bg-color)}}.nav[data-v-ee2efba5]{outline:0}.group+.group[data-v-ee2efba5]{border-top:1px solid var(--vp-c-divider);padding-top:10px}@media (min-width: 960px){.group[data-v-ee2efba5]{padding-top:10px;width:calc(var(--vp-sidebar-width) - 64px)}}.VPSkipLink[data-v-c8291ffa]{top:8px;left:8px;padding:8px 16px;z-index:999;border-radius:8px;font-size:12px;font-weight:700;text-decoration:none;color:var(--vp-c-brand-1);box-shadow:var(--vp-shadow-3);background-color:var(--vp-c-bg)}.VPSkipLink[data-v-c8291ffa]:focus{height:auto;width:auto;clip:auto;clip-path:none}@media (min-width: 1280px){.VPSkipLink[data-v-c8291ffa]{top:14px;left:16px}}.Layout[data-v-9d8abc1e]{display:flex;flex-direction:column;min-height:100vh}.VPHomeSponsors[data-v-843cc1b2]{border-top:1px solid var(--vp-c-gutter);padding:88px 24px 96px;background-color:var(--vp-c-bg)}.container[data-v-843cc1b2]{margin:0 auto;max-width:1152px}.love[data-v-843cc1b2]{margin:0 auto;width:28px;height:28px;color:var(--vp-c-text-3)}.icon[data-v-843cc1b2]{width:28px;height:28px;fill:currentColor}.message[data-v-843cc1b2]{margin:0 auto;padding-top:10px;max-width:320px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.sponsors[data-v-843cc1b2]{padding-top:32px}.action[data-v-843cc1b2]{padding-top:40px;text-align:center}.VPTeamPage[data-v-b1cfd8dc]{padding-bottom:96px}@media (min-width: 768px){.VPTeamPage[data-v-b1cfd8dc]{padding-bottom:128px}}.VPTeamPageSection+.VPTeamPageSection[data-v-b1cfd8dc-s],.VPTeamMembers+.VPTeamPageSection[data-v-b1cfd8dc-s]{margin-top:64px}.VPTeamMembers+.VPTeamMembers[data-v-b1cfd8dc-s]{margin-top:24px}@media (min-width: 768px){.VPTeamPageTitle+.VPTeamPageSection[data-v-b1cfd8dc-s]{margin-top:16px}.VPTeamPageSection+.VPTeamPageSection[data-v-b1cfd8dc-s],.VPTeamMembers+.VPTeamPageSection[data-v-b1cfd8dc-s]{margin-top:96px}}.VPTeamMembers[data-v-b1cfd8dc-s]{padding:0 24px}@media (min-width: 768px){.VPTeamMembers[data-v-b1cfd8dc-s]{padding:0 48px}}@media (min-width: 960px){.VPTeamMembers[data-v-b1cfd8dc-s]{padding:0 64px}}.VPTeamPageTitle[data-v-46c5e327]{padding:48px 32px;text-align:center}@media (min-width: 768px){.VPTeamPageTitle[data-v-46c5e327]{padding:64px 48px 48px}}@media (min-width: 960px){.VPTeamPageTitle[data-v-46c5e327]{padding:80px 64px 48px}}.title[data-v-46c5e327]{letter-spacing:0;line-height:44px;font-size:36px;font-weight:500}@media (min-width: 768px){.title[data-v-46c5e327]{letter-spacing:-.5px;line-height:56px;font-size:48px}}.lead[data-v-46c5e327]{margin:0 auto;max-width:512px;padding-top:12px;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 768px){.lead[data-v-46c5e327]{max-width:592px;letter-spacing:.15px;line-height:28px;font-size:20px}}.VPTeamPageSection[data-v-3bf2e850]{padding:0 32px}@media (min-width: 768px){.VPTeamPageSection[data-v-3bf2e850]{padding:0 48px}}@media (min-width: 960px){.VPTeamPageSection[data-v-3bf2e850]{padding:0 64px}}.title[data-v-3bf2e850]{position:relative;margin:0 auto;max-width:1152px;text-align:center;color:var(--vp-c-text-2)}.title-line[data-v-3bf2e850]{position:absolute;top:16px;left:0;width:100%;height:1px;background-color:var(--vp-c-divider)}.title-text[data-v-3bf2e850]{position:relative;display:inline-block;padding:0 24px;letter-spacing:0;line-height:32px;font-size:20px;font-weight:500;background-color:var(--vp-c-bg)}.lead[data-v-3bf2e850]{margin:0 auto;max-width:480px;padding-top:12px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.members[data-v-3bf2e850]{padding-top:40px}.VPTeamMembersItem[data-v-3a0078bd]{display:flex;flex-direction:column;gap:2px;border-radius:12px;width:100%;height:100%;overflow:hidden}.VPTeamMembersItem.small .profile[data-v-3a0078bd]{padding:32px}.VPTeamMembersItem.small .data[data-v-3a0078bd]{padding-top:20px}.VPTeamMembersItem.small .avatar[data-v-3a0078bd]{width:64px;height:64px}.VPTeamMembersItem.small .name[data-v-3a0078bd]{line-height:24px;font-size:16px}.VPTeamMembersItem.small .affiliation[data-v-3a0078bd]{padding-top:4px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .desc[data-v-3a0078bd]{padding-top:12px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .links[data-v-3a0078bd]{margin:0 -16px -20px;padding:10px 0 0}.VPTeamMembersItem.medium .profile[data-v-3a0078bd]{padding:48px 32px}.VPTeamMembersItem.medium .data[data-v-3a0078bd]{padding-top:24px;text-align:center}.VPTeamMembersItem.medium .avatar[data-v-3a0078bd]{width:96px;height:96px}.VPTeamMembersItem.medium .name[data-v-3a0078bd]{letter-spacing:.15px;line-height:28px;font-size:20px}.VPTeamMembersItem.medium .affiliation[data-v-3a0078bd]{padding-top:4px;font-size:16px}.VPTeamMembersItem.medium .desc[data-v-3a0078bd]{padding-top:16px;max-width:288px;font-size:16px}.VPTeamMembersItem.medium .links[data-v-3a0078bd]{margin:0 -16px -12px;padding:16px 12px 0}.profile[data-v-3a0078bd]{flex-grow:1;background-color:var(--vp-c-bg-soft)}.data[data-v-3a0078bd]{text-align:center}.avatar[data-v-3a0078bd]{position:relative;flex-shrink:0;margin:0 auto;border-radius:50%;box-shadow:var(--vp-shadow-3)}.avatar-img[data-v-3a0078bd]{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;object-fit:cover}.name[data-v-3a0078bd]{margin:0;font-weight:600}.affiliation[data-v-3a0078bd]{margin:0;font-weight:500;color:var(--vp-c-text-2)}.org.link[data-v-3a0078bd]{color:var(--vp-c-text-2);transition:color .25s}.org.link[data-v-3a0078bd]:hover{color:var(--vp-c-brand-1)}.desc[data-v-3a0078bd]{margin:0 auto}.desc[data-v-3a0078bd] a{font-weight:500;color:var(--vp-c-brand-1);text-decoration-style:dotted;transition:color .25s}.links[data-v-3a0078bd]{display:flex;justify-content:center;height:56px}.sp-link[data-v-3a0078bd]{display:flex;justify-content:center;align-items:center;text-align:center;padding:16px;font-size:14px;font-weight:500;color:var(--vp-c-sponsor);background-color:var(--vp-c-bg-soft);transition:color .25s,background-color .25s}.sp .sp-link.link[data-v-3a0078bd]:hover,.sp .sp-link.link[data-v-3a0078bd]:focus{outline:none;color:var(--vp-c-white);background-color:var(--vp-c-sponsor)}.sp-icon[data-v-3a0078bd]{margin-right:8px;width:16px;height:16px;fill:currentColor}.VPTeamMembers.small .container[data-v-bf782009]{grid-template-columns:repeat(auto-fit,minmax(224px,1fr))}.VPTeamMembers.small.count-1 .container[data-v-bf782009]{max-width:276px}.VPTeamMembers.small.count-2 .container[data-v-bf782009]{max-width:576px}.VPTeamMembers.small.count-3 .container[data-v-bf782009]{max-width:876px}.VPTeamMembers.medium .container[data-v-bf782009]{grid-template-columns:repeat(auto-fit,minmax(256px,1fr))}@media (min-width: 375px){.VPTeamMembers.medium .container[data-v-bf782009]{grid-template-columns:repeat(auto-fit,minmax(288px,1fr))}}.VPTeamMembers.medium.count-1 .container[data-v-bf782009]{max-width:368px}.VPTeamMembers.medium.count-2 .container[data-v-bf782009]{max-width:760px}.container[data-v-bf782009]{display:grid;gap:24px;margin:0 auto;max-width:1152px}.shields{display:inline-block}.home-comment-container{position:relative;margin-top:64px;padding:0 24px}@media (min-width: 640px){.home-comment-container{padding:0 48px}}@media (min-width: 960px){.home-comment-container{padding:0 64px}}.home-comment-container .comment-container{margin:0 auto;max-width:1152px}.twikoo .el-loading-spinner .circular{margin-left:auto;margin-right:auto} diff --git a/assets/update.md.fd0f5639.js b/assets/update.md.fd0f5639.js new file mode 100644 index 000000000..ef8501b34 --- /dev/null +++ b/assets/update.md.fd0f5639.js @@ -0,0 +1 @@ +import{_ as e,o,c as a,Q as t}from"./chunks/framework.7d2df8c6.js";const b=JSON.parse('{"title":"版本更新","description":"","frontmatter":{},"headers":[],"relativePath":"update.md","filePath":"update.md","lastUpdated":null}'),l={name:"update.md"},r=t('
- 云函数部署 有多种方式,请选择适合自己的部署平台。
- 前端部署 有 2 种方式,如果您的网站主题支持 Twikoo,您只需在配置文件中指定 Twikoo 即可;如果您的网站主题不支持 Twikoo,您需要修改源码手动引入 Twikoo 的 js 文件并初始化。
- 若您已部署旧版本 Twikoo,请参考 版本更新 升级云函数和前端版本。
版本更新
不同部署方式的更新方式也不同,请对号入座。更新部署成功后,请不要忘记同时更新前端的 Twikoo CDN 地址中的
x.x.x
数字版本号,使之与云函数版本号相同,然后部署网站。针对腾讯云一键部署的更新方式
登录环境-我的应用,输入
- 来源地址:
https://github.com/twikoojs/twikoo/tree/main
- 部署分支:
main
应用目录无需填写,点击“确定”,部署完成。
针对腾讯云手动部署的更新方式
登录环境-云函数,点击 twikoo,点击函数代码,打开
package.json
文件,将"twikoo-func": "x.x.x"
其中的版本号修改为最新版本号,点击“保存并安装依赖”即可。提示
如果您的云函数是 1.0.0 之前的版本,因为 1.0.0 版本修改了部署步骤,请先参考手动部署,从第 5 步开始,重新创建云函数,再按照此步骤更新。
如果升级后出现无法读取评论列表,云函数报错,请在函数编辑页面,删除
node_modules
目录(删除需要半分钟左右,请耐心等待删除完成),再点击保存并安装依赖。如果仍然不能解决,请删除并重新创建 Twikoo 云函数。针对腾讯云命令行部署的更新方式
进入 Twikoo 源码目录,执行以下命令更新现有的云函数
shyarn deploy -e 您的环境id
yarn deploy -e 您的环境id
针对 Vercel 部署的更新方式
- 进入 Vercel 仪表板 - twikoo - Settings - Git
- 点击 Connected Git Repository 下方的仓库地址
- 打开 package.json,点击编辑
- 将
"twikoo-vercel": "latest"
其中的latest
修改为最新版本号。点击 Commit changes- 部署会自动触发,可以回到 Vercel 仪表板,查看部署状态
针对 Railway 和 Zeabur 部署的更新方式
- 登录 Github,找到部署时 fork 到自己账号下的名为 twikoo-zeabur 的仓库
- 打开 package.json,点击编辑
- 将
"tkserver": "latest"
其中的latest
修改为最新版本号。点击 Commit changes- 部署会自动触发
针对 Netlify 部署的更新方式
- 登录 Github,找到部署时 fork 到自己账号下的名为 twikoo-netlify 的仓库
- 打开 package.json,点击编辑
- 将
"twikoo-vercel": "latest"
其中的latest
修改为最新版本号。点击 Commit changes- 部署会自动触发
针对私有部署的更新方式
- 停止旧版本
kill $(ps -ef | grep tkserver | grep -v 'grep' | awk '{print $2}')
- 拉取新版本
npm i -g tkserver@latest
- 启动新版本
nohup tkserver >> tkserver.log 2>&1 &
针对私有部署 (Docker) 的更新方式
- 拉取新版本
docker pull imaegoo/twikoo
- 停止旧版本容器
docker stop twikoo
- 删除旧版本容器
docker rm twikoo
- 启动新版本容器
自动更新
考虑到可用性和安全性问题,Twikoo 没有实现自动更新,也没有计划实现自动更新。如果您希望实现自动更新,可以参考 MHuiG 基于 Github 工作流的 twikoo-update 的实现方式。
',24),i=[r];function c(s,n,d,p,h,u){return o(),a("div",null,i)}const m=e(l,[["render",c]]);export{b as __pageData,m as default}; diff --git a/assets/update.md.fd0f5639.lean.js b/assets/update.md.fd0f5639.lean.js new file mode 100644 index 000000000..890939d82 --- /dev/null +++ b/assets/update.md.fd0f5639.lean.js @@ -0,0 +1 @@ +import{_ as e,o,c as a,Q as t}from"./chunks/framework.7d2df8c6.js";const b=JSON.parse('{"title":"版本更新","description":"","frontmatter":{},"headers":[],"relativePath":"update.md","filePath":"update.md","lastUpdated":null}'),l={name:"update.md"},r=t("",24),i=[r];function c(s,n,d,p,h,u){return o(),a("div",null,i)}const m=e(l,[["render",c]]);export{b as __pageData,m as default}; diff --git a/backend.html b/backend.html new file mode 100644 index 000000000..0130d4980 --- /dev/null +++ b/backend.html @@ -0,0 +1,51 @@ + + + + + +云函数部署 | Twikoo 文档 + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/cms.html b/cms.html new file mode 100644 index 000000000..3b278d8ef --- /dev/null +++ b/cms.html @@ -0,0 +1,25 @@ + + + + + +反垃圾 | Twikoo 文档 + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/configuration.html b/configuration.html new file mode 100644 index 000000000..f8cf7ac7a --- /dev/null +++ b/configuration.html @@ -0,0 +1,25 @@ + + + + + +配置 | Twikoo 文档 + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/en/api.html b/en/api.html new file mode 100644 index 000000000..aaf98edba --- /dev/null +++ b/en/api.html @@ -0,0 +1,133 @@ + + + + + +API reference | Twikoo Docs + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/en/backend.html b/en/backend.html new file mode 100644 index 000000000..7d2102e1c --- /dev/null +++ b/en/backend.html @@ -0,0 +1,25 @@ + + + + + +Twikoo Docs | Twikoo Docs + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/en/faq.html b/en/faq.html new file mode 100644 index 000000000..a99d0dbe0 --- /dev/null +++ b/en/faq.html @@ -0,0 +1,58 @@ + + + + + +FAQ | Twikoo Docs + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/en/frontend.html b/en/frontend.html new file mode 100644 index 000000000..6fdc3738d --- /dev/null +++ b/en/frontend.html @@ -0,0 +1,25 @@ + + + + + +Twikoo Docs | Twikoo Docs + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/en/index.html b/en/index.html new file mode 100644 index 000000000..706422a11 --- /dev/null +++ b/en/index.html @@ -0,0 +1,25 @@ + + + + + +Twikoo | A simple, safe, free comment system + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/en/intro.html b/en/intro.html new file mode 100644 index 000000000..bf8a1ad92 --- /dev/null +++ b/en/intro.html @@ -0,0 +1,30 @@ + + + + + +Twikoo Docs | Twikoo Docs + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/en/link.html b/en/link.html new file mode 100644 index 000000000..8d26361b0 --- /dev/null +++ b/en/link.html @@ -0,0 +1,25 @@ + + + + + +Links | Twikoo Docs + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/en/quick-start.html b/en/quick-start.html new file mode 100644 index 000000000..6179e2ebb --- /dev/null +++ b/en/quick-start.html @@ -0,0 +1,25 @@ + + + + + +Quick start | Twikoo Docs + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/en/update.html b/en/update.html new file mode 100644 index 000000000..7ecf4cbf7 --- /dev/null +++ b/en/update.html @@ -0,0 +1,25 @@ + + + + + +Twikoo Docs | Twikoo Docs + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/faq.html b/faq.html new file mode 100644 index 000000000..d80935828 --- /dev/null +++ b/faq.html @@ -0,0 +1,58 @@ + + + + + +常见问题 | Twikoo 文档 + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/frontend.html b/frontend.html new file mode 100644 index 000000000..35f4f2023 --- /dev/null +++ b/frontend.html @@ -0,0 +1,59 @@ + + + + + +前端部署 | Twikoo 文档 + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/hashmap.json b/hashmap.json new file mode 100644 index 000000000..b7ecf2e12 --- /dev/null +++ b/hashmap.json @@ -0,0 +1 @@ +{"quick-start.md":"65db2e19","en_backend.md":"9b42e72a","en_faq.md":"0f998109","en_frontend.md":"0a1db1d9","en_index.md":"ede44249","en_intro.md":"b281b522","en_link.md":"c1f0a322","backend.md":"237bd45c","en_update.md":"4ed189a6","faq.md":"966fba69","frontend.md":"58dfda7e","index.md":"1464a105","intro.md":"35d8cb3f","link.md":"cf6d607e","en_quick-start.md":"78b76bc9","qq_api.md":"e25600dc","api.md":"653ece4c","en_api.md":"859770f8","configuration.md":"3456c64e","cms.md":"9922f3eb","update.md":"fd0f5639"} diff --git a/index.html b/index.html new file mode 100644 index 000000000..a75b28ae2 --- /dev/null +++ b/index.html @@ -0,0 +1,25 @@ + + + + + +Twikoo | 一个简洁、安全、免费的静态网站评论系统 + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/intro.html b/intro.html new file mode 100644 index 000000000..0cef7f737 --- /dev/null +++ b/intro.html @@ -0,0 +1,30 @@ + + + + + +Twikoo 文档 | Twikoo 文档 + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/link.html b/link.html new file mode 100644 index 000000000..184ba4055 --- /dev/null +++ b/link.html @@ -0,0 +1,25 @@ + + + + + +相关文档 | Twikoo 文档 + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/quick-start.html b/quick-start.html new file mode 100644 index 000000000..7313aaff2 --- /dev/null +++ b/quick-start.html @@ -0,0 +1,25 @@ + + + + + +快速上手 | Twikoo 文档 + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/twikoo-logo-home.png b/twikoo-logo-home.png new file mode 100644 index 000000000..c92c67da2 Binary files /dev/null and b/twikoo-logo-home.png differ diff --git a/twikoo-logo-mini.png b/twikoo-logo-mini.png new file mode 100644 index 000000000..462134075 Binary files /dev/null and b/twikoo-logo-mini.png differ diff --git a/update.html b/update.html new file mode 100644 index 000000000..74acf79a7 --- /dev/null +++ b/update.html @@ -0,0 +1,25 @@ + + + + + +版本更新 | Twikoo 文档 + + + + + + + + + + + + + + + + + + + \ No newline at end of file