diff --git a/404.html b/404.html new file mode 100644 index 000000000..187f4ec20 --- /dev/null +++ b/404.html @@ -0,0 +1,23 @@ + + + + + + 404 | 海豹手册 + + + + + + + + + + + + +
+ + + + \ No newline at end of file diff --git a/about/README.html b/about/README.html new file mode 100644 index 000000000..942ee73bc --- /dev/null +++ b/about/README.html @@ -0,0 +1,52 @@ + + + + + + 关于 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Skip to content
+ + + + \ No newline at end of file diff --git a/about/about.html b/about/about.html new file mode 100644 index 000000000..fbbac87bf --- /dev/null +++ b/about/about.html @@ -0,0 +1,52 @@ + + + + + + 关于 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Skip to content

关于

官方站点

官网:海豹官网,新版本发布的正式地址,还提供试用,log 染色 等多项功能。

海豹开源组织 GitHub:海豹核心源码的托管地址。

投喂

请参见 官网—投喂,目前尚未更新蓝绿修改器(暂时顾不上)。

你的投喂将用于支付服务器费用,以及帮助社畜制作者们稍微抵抗来自现实的引力。

非常感谢。

手册贡献者

新手册贡献者


旧手册贡献者

木落、鹊鹊、蜜瓜包、病、于言诺、流溪憧憬少浣熊旅記

开源

海豹的源代码以 MIT 协议开源,托管在 GitHub 下。海豹核心的诞生离不开开源社区和其它开源软件的支持。

+ + + + \ No newline at end of file diff --git a/about/develop.html b/about/develop.html new file mode 100644 index 000000000..d1b1f8589 --- /dev/null +++ b/about/develop.html @@ -0,0 +1,52 @@ + + + + + + 参与项目 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Skip to content

参与项目

无论是普通用户还是开发者,我们都非常欢迎你参与海豹的开发,一起努力让海豹变得更好。

海豹的所有源代码都托管在 海豹开源组织 GitHub 下,每个模块都存放在对应的仓库中,可阅读对应仓库的 Readme 获取更多信息。

几个比较重要的仓库:

  • 核心:海豹的 Go 后端代码仓库,这个仓库也作为海豹的主仓库,Bug 可反馈在该仓库的 issue 中;
  • UI:海豹的前端代码,基于 Vue3 + ElementPlus 开发;
  • 手册(新):海豹新版官方手册(即当前的手册)的源码,如对手册有什么改进内容可以在该项目提交 pr;
  • 构建:海豹的自动构建仓库,用于自动化发布海豹的每日构建包与 Release;
  • ……

如何参与项目?

Bug 反馈、功能建议

所有的 Bug 和功能建议都可反馈在 核心 仓库的 issue 中,按照模板填写可方便开发组快速定位问题。

提示:无法访问 GitHub?

受限于各种原因,不是所有人都能顺利访问 GitHub,如有 Bug 可以加入官方群进行反馈。但如果有条件,我们还是建议在 GitHub 向开发组反馈问题。

提交修改

欢迎各种类型的 pr 提交,可以帮助改进代码,增加功能,也可以是完善文档等等。向对应仓库发起 pr 即可。

贡献指南

贡献指南

下面将以提交对手册的改进为示例,为还不清楚怎么在 GitHub 上提 Pull Request 的准贡献者做个示范。

整体流程

  1. 首先 fork 对应想要修改的仓库,后续所有操作均在 fork 之后的仓库上执行;
  2. 从主分支(通常是 mainmaster)切出一个新分支作为工作分支;
  3. 在新工作分支上提交修改。如果是对代码仓库进行修改,务必在本地测试通过;
  4. 将修改后的内容提交到远程后,在 GitHub 发起 Pull Request 请求,描述修改内容并确认自动测试流程通过;
  5. 等待开发组 review 后合并你的代码。

对目标仓库进行 fork

首先 fork 对应想要修改的仓库,此处以手册仓库 sealdice-manual-next 为例:

fork 对应仓库

点击 Create a new fork 按钮,如果此处已经有 fork 过仓库,可以直接进行后续步骤无需再次 fork。

点击按钮后进入如下页面:

创建 fork

可不做任何修改,直接点击 Create fork 按钮,等待 fork 进度条完成,此时你应当自动跳转到了 fork 出的新仓库。

切出工作分支

提示:假如你熟悉 Git 操作

如果你熟悉 Git 操作,可以自行 clone 仓库到本地后进行修改。

注意:不要修改主分支

如果 clone 到本地操作,建议不要在主分支操作,而是新切分支进行编辑。

原因见 保持和上游同步

切换到新仓库的分支页面,创建分支:

进入分支页

创建分支

填写新分支名,建议为形如 feature/xxx 的有意义的英文。确认前请务必保证是从主分支切出的。

新分支信息

创建完毕后点击分支名切换到对应分支页面:

切换分支

点击你想要修改的文件,进行在线编辑:

修改文件

修改完成后点击右上角提交变更,填写变更内容信息:

提交变更提交变更信息

发起 Pull Request 请求

你的修改完成后,在你 fork 的新仓库向主仓库发起 Pull Request:

创建 PR

提交时间很近的时候,GitHub 会提示快捷发起 PR 的操作按钮:

快速创建 PR

进入 PR 编辑页填写信息,请确认是从你的仓库的新分支,提向主仓库的主分支的:

主仓库 主分支 <- fork仓库 功能分支

填写 PR 信息

填写完成后,等待开发组进行 review,有时会给你提出一些修改建议。在你的 PR review 通过并合并后,功能分支就可以被删除了。

保持 fork 仓库与上游同步(可选)

如果之后还要提交新的 PR,建议先同步上游的主分支,再从同步后的主分支再新切分支进行操作。

如果你曾经修改了主分支,此处很可能会出现和上游分支有冲突的问题,需要你先手动解决冲突。

点击 Sync fork 进行同步。

与上游同步

+ + + + \ No newline at end of file diff --git a/about/license.html b/about/license.html new file mode 100644 index 000000000..25c6ed5f7 --- /dev/null +++ b/about/license.html @@ -0,0 +1,52 @@ + + + + + + 许可协议 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Skip to content

许可协议

进行使用即代表同意此声明:

尊敬的用户,欢迎您选择由木落等研发的海豹骰点核心(SealDice),在您使用海豹骰点核心前,请务必仔细阅读使用须知,使用即代表您已同意使用须知的内容,使用造成的任何后果与海豹开发组无关。

您需了解,海豹核心官方版只支持 TRPG 功能,娱乐功能定制化请自便,和海豹无关。

您清楚并明白您对通过骰子提供的全部内容负责,包括自定义回复、非自带的插件、牌堆。海豹骰不对非自身提供以外的内容合法性负责。您不得在使用海豹骰服务时,导入包括但不限于以下情形的内容:

(1) 反对中华人民共和国宪法所确定的基本原则的;

(2) 危害国家安全,泄露国家秘密,颠覆国家政权,破坏国家统一的;

(3) 损害国家荣誉和利益的;

(4) 煽动民族仇恨、民族歧视、破坏民族团结的;

(5) 破坏国家宗教政策,宣扬邪教和封建迷信的;

(6) 散布谣言,扰乱社会秩序,破坏社会稳定的;

(7) 散布淫秽、色情、赌博、暴力、凶杀、恐怖或者教唆犯罪的;

(8) 侮辱或者诽谤他人,侵害他人合法权益的;

(9) 宣扬、教唆使用外挂、私服、病毒、恶意代码、木马及其相关内容的;

(10) 侵犯他人知识产权或涉及第三方商业秘密及其他专有权利的;

(11) 散布任何贬损、诋毁、恶意攻击海豹骰及开发人员、海洋馆工作人员、mod 编写人员、关联合作者的;

(12) 含有中华人民共和国法律、行政法规、政策、上级主管部门下发通知中所禁止的其他内容的。

一旦您有以上禁止行为,请立即停用海豹骰。

+ + + + \ No newline at end of file diff --git a/about/start-from-zero.html b/about/start-from-zero.html new file mode 100644 index 000000000..b685dc598 --- /dev/null +++ b/about/start-from-zero.html @@ -0,0 +1,52 @@ + + + + + + 从零开始 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Skip to content

从零开始

首先感谢你选用海豹核心。

我们将本手册的所有内容按照从零开始到深入定制的操作顺序重新排列成了本节的内容。我们推荐新用户按此顺序阅读手册。

在阅读本节时,我们建议你读完整段再点击链接跳转到对应内容。读完对应内容后,你可以立即付诸实践。然后,建议你回到本节,继续按此顺序阅读剩余内容。

如果你只需要详细了解某个特定话题,请你直接从导航栏查找对应分类。

1. 部署海豹

首先,你需要让海豹核心在你的服务器或电脑上运行起来。

如果你是从零开始部署,请阅读 快速开始

如果你之前部署过海豹核心,现在需要将旧部署转移到新的机器,请在阅读过新平台的部署方法后阅读 迁移

2. 连接平台

海豹核心成功运行后,你需要将它接入你希望的即时通讯平台。这样它才能接收和发送消息。

海豹目前支持了许多平台,开列如下。如果你还希望海豹接入更多平台,请你提出 Issue,我们会尽可能满足你的需求。

3. 熟悉海豹核心的功能

海豹核心提供了许多指令,它们是所有功能的中坚。

请阅读 基础概念,了解指令的基本格式。

然后,你可以熟悉一下海豹核心提供的不同自定义功能。你可能暂时不会用到所有的功能。但是,首先熟悉海豹核心能做到、不能做到哪些事,会对你的使用大有帮助。

请阅读这一章下面的各节,你可以跳过一些细节问题: 配置

4. 熟悉指令

我们推荐你简单浏览一遍各种指令。你不需要记住每个指令的所有细节,只要大概知道有什么指令,能够完成什么功能,就很足够了。

首先,请阅读 核心指令。这一节介绍了海豹核心最重要的一些指令。

然后,你可以阅读此章的剩余各节。它们按照扩展列出了每个指令的详细用法。

5. 进阶自定义

如果你希望自己动手,充分利用海豹核心提供的自定义能力,你需要对于海豹核心对不同功能的约定有所了解。

请你首先阅读 进阶介绍,然后阅读此章中你感兴趣的节。

+ + + + \ No newline at end of file diff --git a/advanced/README.html b/advanced/README.html new file mode 100644 index 000000000..49cf699d7 --- /dev/null +++ b/advanced/README.html @@ -0,0 +1,52 @@ + + + + + + 进阶 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Skip to content
+ + + + \ No newline at end of file diff --git a/advanced/edit_complex_custom_text.html b/advanced/edit_complex_custom_text.html new file mode 100644 index 000000000..4ef73b395 --- /dev/null +++ b/advanced/edit_complex_custom_text.html @@ -0,0 +1,69 @@ + + + + + + 编写复杂文案 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Skip to content

编写复杂文案

本节内容

本节将展示复杂文案的编写技巧,请善用侧边栏和搜索,按需阅读文档。

示例

根据骰点结果展示不同文案

在文案中通常会有结果变量,通过对结果变量的判断来实现展示不同文案。如修改 .r 骰点_单项结果文本 文案为例

text
{$t表达式文本}{$t计算过程}={$t计算结果}{%
+$t计算结果 == 100 ? " 乐!",
+$t计算结果 == 1 ? " 啧!"
+%}

示例

木落
.r
头像
头像
海豹核心
<木落>掷出了 D100=1 啧!
木落
.r
头像
头像
海豹核心
<木落>掷出了 D100=100 乐!

多套文案的实现

提示:了解自定义回复的编写

多套文案的实现一般需要用到「自定义回复」来提供切换命令,见 编写自定义回复

如果你想使用 JS 插件实现也是可以的,不过示例以更简单的自定义回复为例。

切换命令实现

正则匹配:mode switch(.*) 回复:

text
{%
+if $t1==""||$t1==" 默认" {$g文案模式 = 0; $t输出="默认模式启用"};
+if $t1==" 模式1" {$g文案模式 = 1; $t输出="模式1启用"};
+if $t1==" 模式2" {$g文案模式 = 2; $t输出="模式2启用"};
+if $t1!=""&&$t1!=" 默认"&&$t1!=" 模式1"&&$t1!=" 模式2" {$t输出=`不存在指定模式{$t1}`};
+$t输出
+%}

精确匹配:mode show 回复:

text
{%
+$g文案模式==0 ? "当前在默认模式",
+$g文案模式==1 ? "当前在模式1" ,
+$g文案模式==2 ? "当前在模式2"
+%}

文案调整

按如下模式调整你的自定义文案项:

text
{
+if $g文案模式 == 0 {$t目标文案 = `(这里填你个性化的默认模式文案)`};
+if $g文案模式 == 1 {$t目标文案 = `(这里填你个性化的模式1文案)`};
+if $g文案模式 == 2 {$t目标文案 = `(这里填你个性化的模式2文案)`}
+}{$t目标文案}

展示

以修改了 .jrrp 的文案为例:

示例

木落
mode show
头像
头像
海豹核心
默认模式启用
木落
mode switch 模式1
头像
头像
海豹核心
模式1启用
木落
mode show
头像
头像
海豹核心
当前在模式1
木落
.jrrp
头像
头像
海豹核心
(这里填你个性化的模式1文案)
木落
mode switch 模式2
头像
头像
海豹核心
模式2启用
木落
.jrrp
头像
头像
海豹核心
(这里填你个性化的模式2文案)
木落
mode switch
头像
头像
海豹核心
默认模式启用
木落
.jrrp
头像
头像
海豹核心
(这里填你个性化的默认模式文案)
+ + + + \ No newline at end of file diff --git a/advanced/edit_deck.html b/advanced/edit_deck.html new file mode 100644 index 000000000..c323043b2 --- /dev/null +++ b/advanced/edit_deck.html @@ -0,0 +1,220 @@ + + + + + + 编写牌堆 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Skip to content

编写牌堆

本节内容

本节将介绍牌堆的编写,请善用侧边栏和搜索,按需阅读文档。

概览

海豹核心目前支持 tomljsonyaml 格式的牌堆。

如果对其中某种格式的语法有了解,建议选择熟悉的格式。如果都不了解,建议选择使用适用性最广的 json 格式。

当然,如果你的海豹版本较新,我们也非常推荐你尝试 toml 格式的牌堆编写。toml 格式诞生较晚,语法支持更多现代特性,海豹为这种格式的牌堆支持了更多功能。

注意:牌堆文件的编码

永远 使用「UTF-8 编码」来编写牌堆。

语法快速入门

我们将简单介绍 toml json yaml 的语法,仅说明牌堆编写中会用到的部分,帮助你快速了解它们。

提示:深入学习

我们也非常建议你系统地学习它们,可以参见这些文档或自行搜索:

注意:务必注意使用半角符号!

下面的语法中涉及到的符号都是 半角符号,如果你出现了奇怪的问题,记得检查是否在输入法的中文输入状态,导致输入了错误的符号。

比如应该为 , 却使用了 ,应该为 "" 却使用了 “”

使用专业的编辑器能帮助你检查这些问题。

TOML 注释

注释以 # 开头,用来记录相关说明性内容。

toml
# 这是注释
+
+key = "value" # 注释也可以放在行尾

TOML 键值对

「键值对」是 TOML 文档最基本的元素。

toml
key = "value"

键名在等号的左边而值在右边,键、等号和值必须在同一行(有些值可以跨多行),不允许没有值。

值需要是下述类型之一:

  • 字符串:以 "" ''""" """ 包裹起来的一串文字
  • 整数、浮点数(即小数)
  • 布尔值:truefalse
  • 日期或时刻:采用 RFC 3339 格式,如 1919-08-10 1919-08-10 11:45:14
  • 数组:[] 包裹的一系列值
  • 内联表:表的一种紧凑表示法,{} 包裹的一系列键值对

键值对后必须换行(或结束文件)。

TOML 键名

键名可以是裸键名,也可以是用 "" 引起来的字符串,都将被看作是字符串(哪怕裸键是 1234 也是这样)。

  • 裸键只能包含 ASCII 字母,ASCII 数字,下划线和短横线(即只有 A-Za-z0-9_-)。
  • 引号键则允许包含任何 Unicode 字符(如中文),支持转义;

注意:裸键名不支持中文

使用中文作为键名时,必须用引号包裹。

TOML 字符串

使用 "" 或者 '' 包裹的内容作为字符串。任何 Unicode 字符都可以使用,支持转义(如换行 \n、反斜杠 \\)。

如果字符串有很多行,可以使用多行字符串语法:

toml
key = """
+这是多行字符串的语法,它支持你直接使用换行。
+不用再拼接 \n 来换行了,好耶!
+但是这样写在最前面会多出换行,因为第一行的空换行也直接读取了。
+"""
+
+key2 = """\
+这样写就没有开头的空行问题了。
+"""

多行换行符中,如果一行的最后一个非空白字符是未被转义的 \ 时,它会连同它后面的所有空白(包括换行)一起被去除,直到下一个非空白字符或结束引号为止。

TOML 表

表(哈希表、字典、对象,含义相同)是键值对的集合。「表头」为一个单独的 [] 包裹的行作为表名,后面的行都是该表的内容。

toml
["海豹核心"]
+"简介" = "一个简单易用的跑团骰子系统"
+"状态" = "持续开发中"
+
+["狐狸核心"]
+"简介" = "一个更加简单易用的跑团骰子系统(什"
+"状态" = "根本不存在"

以上结构相当于 JSON 中的:

json
{
+  "海豹核心": {
+    "简介": "一个简单易用的跑团骰子系统",
+    "状态": "持续开发中"
+  },
+  "狐狸核心": {
+    "简介": "一个更加简单易用的跑团骰子系统(什",
+    "状态": "根本不存在"
+  }
+}

表还有一种更紧凑的内联表示法,必须在同一行内,且不支持尾逗号:

toml
"海豹核心" = { "简介" = "一个简单易用的跑团骰子系统", "状态" = "持续开发中" }

TOML 数组

数组是用 [] 包裹的一系列值,子元素由 , 分隔。

toml
TRPG = [
+  { name = "CoC", version = "7" },
+  { name = "D&D", version = "5e" }, # 多出一个逗号也是可以的
+]

基础牌堆编写

海豹的抽取指令为 .draw <key>,而牌堆就是可以提供一些 key 作为牌组的文件。

我们从编写一个最简单的牌堆开始,我们希望:

  1. 这个牌堆有 快端上来罢数字论证 两个牌组;
    • .draw 快端上来罢 可以抽取出 哼哼哼啊啊啊啊啊 你是一个一个一个牌堆结果 这两个结果;
    • .draw 数字论证 可以抽取出 114514 1919810 这两个结果。
  2. 填写一些信息(如作者),便于分享。

这个牌堆编写如下,你可以选择以下任意一种格式来学习:

toml
# 元信息表
+[meta]
+title = "野兽牌堆"
+author = "田所浩二"
+# 有多个作者时可以使用,两者仅需保留一行
+authors = ["田所浩二"]
+version = "1.0"
+license = "CC-BY-NC-SA 4.0"
+date = 1919-08-10
+update_date = 1919-08-10
+desc = "这个示例牌堆怎么这么臭(恼)"
+
+# 牌组表
+[decks]
+"快端上来罢" = [
+  "哼哼哼啊啊啊啊啊",
+  "你是一个一个一个牌堆结果"
+]
+"数字论证" = [
+  "114514",
+  "1919810"
+]

一个 TOML 牌堆的最基本格式如上。其中 meta 表中的信息不是必须的,但我们非常建议你保留并填写这些项,它们能在分享时说明更多信息:

  • title:牌堆的标题;
  • author/authors:牌堆作者;
  • date:牌堆创建日期;
  • updateDate:牌堆更新日期;
  • desc:牌堆简介;
  • version:牌堆版本;
  • license:牌堆协议。

可以将上述内容保存名为 野兽牌堆.toml(名称任意,但必须是以 .toml 为后缀扩展名)的文件进行测试。

注意:牌堆文件扩展名正确吗?

保存文件时务必确认开启了操作系统的扩展名显示,避免出现看上去保存了 xxx.json 文件,但实际上的文件名是 xxx.json.txt

牌堆语法

一个项中抽取其他项

牌堆抽取结果字符串中,可以实现抽取其他项,将内容拼接进该结果。

  • {key} 表示不放回抽取;
  • {%key} 表示放回抽取。
toml
[decks]
+"时间点" = [
+  "早上",
+  "中午",
+  "晚上",
+]
+"追尾了" = [
+  "在{%时间点}追尾了一辆高级黑色轿车",
+]

放回抽取与不放回抽取

放回抽取,指此次抽取后抽取的牌组保持原样,每次都相当于从全新牌组中抽取,你仍可能抽到相同结果。

不放回抽取,尺度是一次抽牌指令,在这一次指令的执行过程中不会再从该牌组中抽到相同结果。多次抽取指令 draw 3# 牌组 只被视为一次指令,不放回抽取生效。指令执行结束后,将重置所有牌组到初始状态。

需要提到,带有权重调整的项目不会被视为在牌组中有多个副本。在下文中有详细讨论。

示例:不放回抽取

toml
[decks]
+"拷打木落" = [
+  "泡面偷走叉子调料包",
+  "捏碎所有薯片",
+  "用勺子把西瓜最中间的一块全挖走",
+]
+"拷打木落三次" = [ "{%拷打木落} {%拷打木落} {%拷打木落}" ]
+"不同方式拷打木落三次" = [ "{拷打木落} {拷打木落} {拷打木落}" ]

在此示例中,牌组「拷打木落三次」的项目采用了放回抽取,「不同方式拷打木落三次」采用了不放回抽取。

如果抽取 draw 拷打木落三次,得到的三个结果可能有重复。

如果抽取 draw 不同方式拷打木落三次,得到的三个结果将互不相同,但顺序是随机的。通过 draw 3# 拷打木落 也可达成类似的效果。

插入掷骰表达式

抽取结果字符串中的 [exp],会先执行其中的掷骰表达式 exp,再组合到原字符串里。

如:抽取 企鹅早该爆金币辣!v我[1d10]个金币 的结果可能是 企鹅早该爆金币辣!v我1个金币

补充:旧的实现

研究旧牌堆,可能会发现有牌堆通过下面这样的写法来实现这个功能,现在请不要这么做了

json
{
+  "数字": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
+  "爆金币": "企鹅早该爆金币辣!v我{%数字}个金币"
+}

权重

抽取结果字符串中最前面的 ::value:: 表示该项的权重。不含有该标记的项目被视为拥有默认权重 1。

示例:有 1/10 的几率出现闪光海豹

toml
[decks]
+"捕捉海豹" = [
+  "::9::海豹",
+  "✨闪光海豹✨"
+]

权重与不放回抽取

在使用不放回抽取的情况下,标记权重的项目不会被视为单个项目的多个副本。以上文的例子而言,牌组中仍被视为只有 2 个项目。

如果使用 draw 捕捉海豹 2# 进行抽取,一定会获得 1 个「海豹」和 1 个「✨闪光海豹✨」。

在这种情况下,权重影响的是抽出的顺序。你将以 9/10 的概率先抽出「海豹」,以 1/10 的概率先抽出「✨闪光海豹✨」。

补充:旧的实现

研究旧牌堆,可能会发现有牌堆通过下面这样的写法来实现这个功能,现在请不要这么做了

json
{
+  "捕捉海豹": [
+    "海豹", "海豹", "海豹", "海豹", "海豹", "海豹", "海豹", "海豹", "海豹",
+    "✨闪光海豹✨"
+  ]
+}

发送图片等

抽取结果字符串中可以插入 CQ 码和海豹码,比如 [图:data/images/sealdice.png]

牌堆打包

发布带图牌堆最常见的选择是牌堆文件连同图片打包成一个压缩包,但是这样做有诸多不便之处。

如果你不想发布时在压缩包里添加一个教程,告诉你的用户如何解压、图片要放到那个文件夹下、什么是相对路径……那就把牌堆打包成可以在海豹 UI 直接上传的 *.deck 文件吧。

信息

deck 文件在本质上依然是 zip 文件,修改后缀只是便于海豹识别。

假如牌堆文件内容如下(使用相对路径 ./assets/... ):

json
{
+  "test":["[图:./assets/1.jpg]"]
+}

则牌堆文件所在文件夹结构应是:

text
.
+├─assets
+│  └─1.jpg
+└─ test.json

选中牌堆文件和 assets 文件夹压缩为 ZIP 文件,修改文件后缀为 deck。

示例

图例中所使用的软件为 Bandizip,使用 Windows 右键菜单中的 压缩为 ZIP 文件 与之等价的。

注意:小心嵌套文件夹

以示例图中路径为例,不要回退到上一级目录然后选中 top 文件夹压缩。

牌组的隐藏和导出控制

.draw keys 指令会列出所有允许抽取的牌组,但在牌堆编写过程中,经常会需要用到辅助的牌组,这些辅助项是不希望暴露给用户的。我们可以通过一定方式来隐藏这些项。

在 TOML 牌堆中,当牌组的名称以 _ 开头,那么这个牌组将不会暴露在 .draw keys 中。

toml
[decks]
+"_时间点" = [
+  "早上",
+  "中午",
+  "晚上",
+]
+"追尾了" = [
+  "在{%_时间点}追尾了一辆高级黑色轿车",
+]

这样在 .draw keys 中就不会展示 _时间点 这一牌组。

被隐藏的项不会在 .draw keys 中展示,但依然可以通过指定 .draw <key> 的方法抽取。如果你希望某些牌组彻底隐藏,只能在牌堆内部调用,可以通过配置它们的导出来实现:

在 TOML 牌堆中,当牌组的名称以 __(双下划线)开头,那么这个牌组将不导出,即无法使用 .draw <key> 进行抽取,更不会显示在列表中。

toml
[decks]
+"__时间点" = [
+  "早上",
+  "中午",
+  "晚上",
+]
+"追尾了" = [
+  "在{%__时间点}追尾了一辆高级黑色轿车",
+]

提示:UI 中识别隐藏的牌组

你可以通过查看牌堆管理界面中的「牌堆列表」来识别牌组是否隐藏。

牌堆列表

灰色的牌组是隐藏的,即不展示在列表中,但能够被 .draw <key> 抽取。

未导出(不展示也不能抽取)的牌组不展示在该列表中。

配置牌堆更新

很多时候,牌堆内容不是一成不变的。而使用牌堆的用户需要手动去获取最新的牌堆,才能获得作者们提供的最新内容。

我们为牌堆提供了配置更新链接的机制,方便骰主快速获取牌堆更新。有能力的牌堆作者可以配置更新链接,便于分享最新的牌堆内容。

配置牌堆文件的 updateUrls 以指定对应的更新链接:

toml
[meta]
+title = "野兽牌堆"
+updateUrls = [
+  "https://updateurl.com" # 此处填写你的更新链接
+]
+
+# 牌组表
+[decks]
+"快端上来罢" = [
+  "哼哼哼啊啊啊啊啊",
+  "你是一个一个一个牌堆结果"
+]
+"数字论证" = [
+  "114514",
+  "1919810"
+]

有多个更新链接时,海豹将依次从上往下检查更新。

插入海豹内置脚本语言

抽取结果字符串中可以插入 海豹语

提示:特殊的括号

与在文案和自定义回复中插入海豹语使用 {} 不同,在牌堆中 {} 有其他含义,需要用 [] 代替 {}

toml
[decks]
+"幸运转盘" = [
+  "你抽到了114金币,你现在有[$m金币=$m金币+114]",
+  "你失去了514金币,你现在有[$m金币=$m金币-514]"
+]

TOML 牌堆的更多功能

更多牌组设置

TOML 牌堆中,你可以以表的形式来创建更复杂的牌组,这允许你更精细的控制每个牌组的选项。

复杂牌组和普通牌组在使用上没有什么区别,仅仅是提供了配置选项的能力。

toml
[meta]
+title = "野兽牌堆"
+updateUrls = [
+  "https://updateurl.com" # 此处填写你的更新链接
+]
+
+# 简单牌组表
+[decks]
+"快端上来罢" = [
+  "哼哼哼啊啊啊啊啊",
+  "你是一个一个一个牌堆结果"
+]
+
+# 复杂牌组
+["数字论证"]
+export = true
+visible = true
+aliases = [ "恶臭论证" ]
+options = [
+  "114514",
+  "1919810",
+]

表名将作为这个牌组的名称,复杂牌组提供以下选项:

  • export:是否导出该牌组;
  • visible:该牌组是否可见,不可见的将不展示在 .draw keys 列表中;
  • aliases:牌组的别名,可以使用别名抽取改牌组,如上述示例中可以使用 .draw 数字论证.draw 恶臭论证 来抽取;
  • options:该牌组的项。

注意:设置的选项未生效?

注意,对应的选项名需要完全一致,否则海豹将无法正确解析。

aliases 不要误写成 aliasoptions 不要误写成 option

云端内容

某些情况下,我们希望牌堆内容能够自动更新,骰主无需反复更新骰子中装载的牌堆,用户也能抽取到最新内容。例如,一个实时更新的公骰列表牌堆。

海豹支持为牌堆提供云端内容,这需要牌堆作者有能力提供一个 API 接口,每次 配置了接口的牌组被抽取的时候,都会调用该接口获取该牌组的最新数据。

注意:不受控的云端内容

海豹核心无法核查从接口处获取的数据,骰主需要自行确认数据源不会返回你不希望骰子发出的信息。

对于提供了云端内容的牌堆,在海豹 Web UI 的牌端管理界面,会强制增加相应标识,以显示该牌堆提供了云端内容。

API 接口要求

海豹将以 HTTP GET 的方式请求对应接口,接口应当返回一个 JSON 字符串数组数据,其每个元素均是牌组的一个条目。

返回结果示例如下:

json
[
+  "3 = 11*-4+51-4",
+  "114 = 11*4+5*14",
+  "514 = (1-1)/4+514"
+]

牌堆配置云端内容

目前仅有 TOML 牌堆支持云端内容,示例如下:

toml
[meta]
+title = "野兽牌堆-云端内容示例"
+
+["114514种论证"]
+export = true
+visible = true
+options = [
+  "1 = 11/(45-1)*4",
+  "2 = -11+4-5+14",
+  "3 = 11*-4+51-4"
+]
+# 开启云内容
+cloud_extra = true
+# 云内容与本地内容去重
+dictinct = true
+# 云内容链接
+options_urls = [
+  "此处替换为对应的 API 链接,类似 http://example.com/xxx",
+]

假定上面填入了 API,它会返回上一节中的示例 JSON 字符串数组,即 ["3 = 11*-4+51-4", "114 = 11*4+5*14", "514 = (1-1)/4+514"]

正如上面示例中看到的那样,在 TOML 格式的复杂牌组中,有一些云端内容的相关配置项,每个牌组都可以单独控制云端相关设置。抽取牌组时,接口返回的数据将和牌组本身配置的 options 数组合并,最后的抽取是从合并的数组中进行。

  • cloud_extra:为 true 时,抽取本牌组时将请求接口获取云端数据;
  • options_urls:配置云端内容的 API 链接,链接能够配置多个。每次抽取这个牌组时,会依次调用配置的 API,在任意一个接口成功返回数据后即停止
  • distinct:为 true 时,云端数据与本地数据合并后会进行去重,确保最终抽取的牌组中不含重复条目。

以上述牌组为例,当执行 .draw 114514种论证 的时候,将首先调用 API 获取云端内容,成功获取后进行合并并去重,最终抽取的牌组相当于直接配置了这样的牌组:

toml
["114514种论证"]
+export = true
+visible = true
+options = [
+  "1 = 11/(45-1)*4",
+  "2 = -11+4-5+14",
+  "3 = 11*-4+51-4",
+  "114 = 11*4+5*14",
+  "514 = (1-1)/4+514"
+]
+ + + + \ No newline at end of file diff --git a/advanced/edit_helpdoc.html b/advanced/edit_helpdoc.html new file mode 100644 index 000000000..18b703e4e --- /dev/null +++ b/advanced/edit_helpdoc.html @@ -0,0 +1,80 @@ + + + + + + 编写帮助文档 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Skip to content

编写帮助文档

本节内容

本节将介绍帮助文档的编写,请善用侧边栏和搜索,按需阅读文档。

我们假定你已了解 JSON 格式。如果你对 JSON 还很陌生,可以阅读以下教程或自行在互联网搜索:

创建 JSON 格式的帮助文档

你可以直接按照以下格式书写 <helpdoc>.json

json
{
+  "mod": "名字",
+  "author": "作者",
+  "brief": "概述",
+  "comment": "备注",
+  "helpdoc": {
+    "词条A": "词条 A 的具体内容。",
+    "词条B": "词条 B 的具体内容。",
+    "词条C": "[图:data/images/sealdice.png] 词条 C 的图片与内容。"
+  }
+}

若你的文本需要换行,你可以使用 \n 作为换行符,而不是在编写时直接换行,这会导致格式错误。你还可以使用 \f{FormFeed} 作为分页符。

注意:标准 JSON 而不是 JSON5

海豹支持的 JSON 帮助文档是「标准 JSON」格式,诸如注释,尾逗号等语法不属于 JSON 语法,而是 JSON5 这个扩展标准的语法,出错时请严格检查。

目前暂不考虑支持 JSON5 标准。

注意:文件编码

永远使用 UTF-8 编码编写 helpdoc。

你可以在 JSON 格式的帮助文档中嵌套引用其它条目:

json
{
+  "helpdoc": {
+    "词条A": "词条 A 的具体内容。",
+    "词条B": "{词条A}词条 B 的具体内容。",
+    "词条C": "你还可以 {词条A}\n{词条B}"
+  }
+}

如此一来当你发送 .help 词条 B 时,骰子将回复:「词条 A 的具体内容。词条 B 的具体内容。」。

示例文档:塔罗牌(节选)

json
{
+  "mod": "KIYTarot",
+  "author": "浣熊旅記",
+  "brief": "KIY 塔罗牌",
+  "comment": "释义来源网络。",
+  "helpdoc": {
+    "愚者逆位": "漂泊,冒险,鲁莽,冒失,疯狂,无视物质损失,灵魂堕落,内心空虚,感情轻浮。",
+    "魔术师逆位": "方向错误,被骗或失败,局面失控,二流角色,缺乏热忱和创造力,爱情难有进展。",
+    "女祭司逆位": "挑剔,贪心,目光短浅,洁癖,不适宜的激情,自尊心太强,锋芒外露,单相思。",
+    "女皇逆位": "冷淡,缺乏上进心,困难,享乐,环境险恶,贴近自然,自负,纠纷,感情挫折。",
+    "皇帝逆位": "幼稚,挫折,武断,滥用权利,冷酷,占有欲和控制力强烈,感情勉强。"
+  }
+}

创建 EXCEL 格式的帮助文档

你还可以按照以下格式书写 <helpdoc>.xlsx

KeySynonymContentDescriptionCatalogueTag
词条 A词条同义词词条内容对词条的简述所属目录内容 TAG
海豹骰豹骰/海豹/sealdice一个简单易用的跑团骰子系统。\n形象是海豹,可以被叫做海豹骰、豹骰,豹子骰之类。

Excel 格式的 helpdoc 分为 KeySynonymContentDescriptionCatalogueTag 六块,其中第二列、后三项为选填,一般情况下你都可以留空。

  • Synonym 列可以填写多个同义词,使用 / 分隔即可。
  • Excel 中的词条内容可以直接换行(也可以使用 \n 来换行,但不支持其它换行符与分页符),因此它常用来快速编写有大段文字的帮助文档。
  • 帮助文档所在工作表的名称会作为前缀加入词条。如将工作表命名为 测试,则对应的词条会显示为 测试:词条 A。由于海豹的 .find 指令会对词条进行模糊检索,所以你不必担心前缀对查询带来的影响。

注意:必须保留首行!

不要删去第一行的 KeySynonym 等词。请从第二行开始编写词条。

提示:EXCEL 格式的帮助文档

<helpdoc>.xlsx 原本是梨骰用于 D&D 词条查询的格式,但海豹同样可以读取它。

+ + + + \ No newline at end of file diff --git a/advanced/edit_reply.html b/advanced/edit_reply.html new file mode 100644 index 000000000..c0e6523b4 --- /dev/null +++ b/advanced/edit_reply.html @@ -0,0 +1,148 @@ + + + + + + 编写自定义回复 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Skip to content

编写自定义回复

本节内容

本节将展示自定义回复编写的进阶部分,请善用侧边栏和搜索,按需阅读文档。

我们假定你已经阅读了自定义回复编写的 基础部分(「配置 - 自定义回复」节)。如果你还没有阅读该章节,请先阅读这一节。

在部分内容中,我们假定你了解海豹变量机制和正则表达式。如果你对正则表达式还很陌生,可以参考以下材料,或在互联网自行搜索学习。

海豹核心跟随 Go 语言,采用 RE2 规范。该规范与其他规范在个别扩展语法上存在细微差别,请注意辨析。

在使用 Regex 101 网站时,请注意在左侧的「FLAVOR」栏选中「Golang」,以确保正则表达式的表现一致。

第一个自定义回复

首先我们打开「自定义回复」页,新建一项自定义回复。

提示:使用 .text 帮助测试

.text <文本> 将是你的一大助力,它会输出后面文本的执行结果,你可以将它看成不需要触发词的自定义回复。

当然,在采用 .text 指令进行 debug 时,可能出现因为测试的内容对变量造成影响,而不得不频繁复制黏贴清空指令的情况。此时建议专门开一个一两个字即可触发的自定义回复,用来测试。

提示:嵌入 CQ 码

返回内容可以嵌入 CQ 码。CQ 码文档见 CQ 码列表

自定义回复中分「条件」和「结果」两个部分。在 配置 - 自定义回复 中,我们已经了解了一些简单的回复编写,下面将补充介绍进阶内容。

触发条件

文本匹配:模糊匹配

模糊匹配将比较收到的消息与指定文本,内容相似时触发。

比较定义在 dice/ext_reply_logic.go 中,内容 jaro 和 hamming 平均值高于阈值(0.7)被认为是相似:

go
func strCompare(a string, b string) float64 {
+	va := strsim.Compare(a, b, strsim.Jaro())
+	vb := strsim.Compare(a, b, strsim.Hamming())
+	return (va + vb) / 2
+}

提示:模糊匹配未命中

模糊匹配可能出现感觉能匹配上,但实际上没办法匹配上的情况。我们更建议你使用「包含文本」或「正则匹配」。

文本匹配:正则匹配

使用正则匹配时,直接在要匹配的文本一栏中写入正则表达式即可。当正则表达式获得匹配时,该条件得到满足。

对于正则表达式中的捕获组,海豹遵循命令行脚本的通行做法,将其按顺序存储于多个变量 $t1 $t2 等。

text
正则匹配:^购买(.+)
+输出文本:{$t玩家}购买了{$t1}

示例

木落
购买猫粮
头像
头像
海豹牌猫粮店
<木落>购买了猫粮

可以发现第 1 捕获组命中的字符串 猫粮,被存储于变量 $t1 中。

此外,对于正则表达式匹配的完整内容将被存储于变量 $t0。如果捕获组存在命名,如命名为 A 的捕获组 (?P<A>cc),命中的字符串也将额外存入变量 $tA

注意:不要使用某些前缀!

由于 . / ! 等符号会作为海豹中指令的前缀,因此作为前缀时可能导致将其识别为指令而非自定义回复的情况,建议换成别的前缀。

提示:正则中匹配 CQ 码

海豹支持用正则匹配 CQ 码。但是,由于 [ ] 符号在正则表达式中含有特殊含义,如果你这么做了,请对它们进行转义。

示例:^\[CQ:xxx,xx=xxx\]

表达式为真

在「表达式为真」匹配中,只需要直接在匹配文本中写出形如 变量名 == 需要的值 的形式即可,不需要使用任何 {}

回复结果

在回复文本中,可以调用一些 变量,也可以嵌入 内置脚本语言

嵌入脚本语言

示例

木落
.text {$t玩家}进行测试
头像
头像
海豹核心
<木落>进行测试
木落
.text {d100}
头像
头像
海豹核心
1

提示:未赋值的变量

所有变量在未被赋值时被调用的值都为 0。

执行块

{% %} 被称为执行块。由 {% %} 括起来的部分会被作为代码执行,输出最后一个语句的结果。执行块中的两个语句之间要使用 ; 隔开。

如果想要输出字符串,则应该用 ` / " / ' 括上。

  • 例:形如 {% \$t1="114514" %} 的式子会输出 114514

提示:结果中调用变量

若想在结果中调用变量,请用反引号。目前海豹只支持在反引号中调用变量。

下面是一个简单的示例,这里的第一句也是最后一句,所以它的结果会被输出。

text
.text {% $t测试=1 %}

示例:使用 if

text
{%
+$t测试=1;
+if $t测试==1 {$t输出="赞美木落"};
+if $t测试==2 {$t输出="快点更新"};
+if $t测试!=2&&$t测试!=1 {$t输出="群主女装"}
+%}
+{$t输出}

首先给 $t测试赋值为 1,然后进入判断:

  1. 如果 $t测试 等于 1,则变量 $t输出 等于 "赞美木落"
  2. 如果 $t测试 等于 2,则变量 $t输出 等于 "快点更新"
  3. 如果 $t测试 既不等于 2 也不等于 1,则变量 $t输出 等于 "群主女装";

最后,输出变量 $t输出

提示:容易误解的 if 使用

目前海豹语并不支持 else if / elififelse 是一对一匹配的。所以当形如:

text
if <条件 1> {<执行 1>};
+if <条件 2> {<执行 2>}
+else {<执行 3>}

的语句出现时,第二个 ifelse 为一个整体,且不与第一个 if 构成 if elseif else 的关系!即使 <条件 1> 满足,其仍会对 <条件 2> 进行判断,并在 <执行 2><执行 3> 中择一执行!

示例:变量运算

text
{%
+$t0 = 1;
+$tRand = d6;
+if $t0 == 1 { $t0 = $t0 + $tRand }
+%}
+{$t0}

在这个例子里,我们先给 $t0 赋值为 1,然后判断 $t0 是否等于 1,若通过则 $t0 的值增加 1d6,最后输出结果。

更多示例片段

牌堆与自定义回复的结合

以养猫功能中猫好感度为例:

text
{%
+$mCatFavor<=100 ? `#{DRAW-第一档猫好感}`,
+$mCatFavor<=250 ? `#{DRAW-第二档猫好感}`,
+$mCatFavor<=600 ? `#{DRAW-第三档猫好感}`,
+$mCatFavor<=1500 ? `#{DRAW-第四档猫好感}`,
+$mCatFavor<=2500 ? `#{DRAW-第五档猫好感}`,
+1 ? `#{DRAW-第六档猫好感}`
+%}

在这一脚本中,根据猫好感度 $mCatFavor不同,需要输出不同回复的机制。

补充:其它写法

除了形如

text
{%
+判断1 ? `#{DRAW-牌组1}`,
+判断2 ? `#{DRAW-牌组2}`,
+判断3 ? `#{DRAW-牌组3}`,
+1 ? `#{DRAW-牌组4}`,
+%}

的写法外,还可以使用:

text
{%
+if 判断1 {
+  $tRand=d6;
+  $t输出=$tRand==1 ? `内容1`,
+  $t输出=$tRand==2 ? `内容2`,
+  $t输出=$tRand==3 ? `内容3`,
+  $t输出=$tRand==4 ? `内容4`,
+  $t输出=$tRand==5 ? `内容5`,
+  $t输出=$tRand==6 ? `内容6`
+};
+if 判断2 { $tRand=d10; $t输出 = $tRand==1 ? `内容1`, …… };
+if 判断3 { $tRand=d10; $t输出 = $tRand==1 ? `内容1`, …… };
+%}

实质上没有太大区别,可根据喜好选择。

多行回复的错误使用

自定义回复中的多行输出通常并不是:

text
{$t输出0}
+{$t输出1}
+{$t输出2}
+{$t输出3}

而是在为四个 $t输出 变量赋值时,于内部写入 \n,自定义回复中则采用 {$t输出0}{$t输出1}{$t输出2}{$t输出3} 的形式。

这是因为如果某一变量可能为空时,如果采用第一种分行的写法,会出现这样的效果:

示例

木落
踢海豹
头像
头像
海豹核心
<木落>一脚踢向海豹,踢了3格。 +海豹现在离终点还有37格。 + +海豹的逃走骰:1d100=60,海豹没能逃脱凶猛恶汉们的掌控!

可以看见,在中间会出现突兀的空行。这是因为虽然 $t输出2 变量为空,海豹仍会按照自定义回复中设置的格式输出。因此在对应 $t输出2 的一行中,海豹会首先输出空变量 {$t输出2},随后按自定义回复的格式进行换行,导致发生空行。

所以,如果想要在某个变量为空时,不让用户注意到突兀的空缺,就最好多做几次实验,好好规划一下换行符 \n 的位置。

限定每人/每群每天一次

海豹提供了一系列时间变量来调用,以打卡指令为例,可以采用如下两种写法中的一种(示例为每人每天一次,如要每群自行将 $m 换成 $g):

写法 1
文本匹配:你需要的文本
表达式为真:$m变量 != $tDate
回复:{if 1 {$m变量=$tDate}}你需要的回复文本

  • $m变量 作为标记变量,用 if 是防止它出现在回复文本中。

文本匹配:你需要的文本
表达式为真:$m变量==$tDate

  • 可以不写在另一条里,选择放到相较于上一条的后面,利用海豹从上往下逐个匹配的机制达成相同效果

回复:在一天触发多次时的回复

写法 2
文本匹配:你需要的文本
回复:

text
{%
+if $m变量 != $tDate {
+  $t输出 = `你需要的回复文本`;
+  $m变量 = $tDate //对其赋值,作为标记
+} else {
+  $t输出 = `在一天触发多次时的回复`
+}
+%}
+{$t输出}

以上两种写法实现效果没有差别,具体使用哪种请自行决断。

条件语句嵌套条件算符,多条件条件语句

以石头剪刀布为例,为了实现骰子随机出招的效果,令 $tRand=d3,然后根据 $tRand 的情况赋值 $tDicePlay。通过骰子出招和玩家出招两个变量判断,输出游戏结果,并记录场次。

为了防止直接使用 {%%} 进行赋值导致的变量显示,需要在最外面写 if 1 ,则在生成 $tRand之后再次判断的时候,可以使用 $tDicePlay=条件算符,或是再新开一行用条件算符或者条件语句实现。

以下给出在同一个 if 内直接赋值的写法和新开一行使用条件语句的写法:

text
{% //在同一个if内直接赋值。可以在赋值时使用条件算符。
+if 1 {
+    $tRand=d3;
+    $tDicePlay = $tRand==1 ? "石头",
+                 $tRand==2 ? "剪刀",
+                 1 ? "布"
+}
+%}
+
+{% //新开一行赋值
+if 1 {
+    $tRand=d3;
+};
+if $tRand==1 {$tDicePlay="石头"};
+if $tRand==2 {$tDicePlay="剪刀"};
+if $tRand==3 {$tDicePlay="布"}
+%}

两种写法实现效果相同,石头剪刀布内在这里采用了第一种,实际上没有差别。

生成骰子出招并获取玩家出招之后,就开始判断。这里除了平局可以使用 $tDicePlay==$t0 省事之外,其他的都需要在条件中用多个进行嵌套。

注意:条件判断

豹语语法中,判断时条件中的 ||&& 是从左往右计算的,如果后面有需要优先计算与或的东西,请加好括号。

text
if $t0 == $tDicePlay {
+    $t输出 = `那我出{$tDicePlay}!{$t玩家}出的是{$t0}啊,我们平局了。`;
+    $mPlayerTime = $mPlayerTime + 1
+};
+if ($t0=="剪刀" && $tDicePlay=="石头") || ($t0=="石头" && $tDicePlay=="布") || ($t0=="布" && $tDicePlay=="剪刀") {
+    $t输出 = `那我出{$tDicePlay}!{$t玩家}出的是{$t0}啊,我赢了。`;
+    $mPlayerTime = $mPlayerTime + 1;
+    $mPlayerLose = $mPlayerLose + 1
+};
+if ($t0=="石头" && $tDicePlay=="剪刀") || ($t0=="布" && $tDicePlay=="石头") || ($t0=="剪刀" && $tDicePlay=="布") {
+    $t输出 = `那我出{$tDicePlay}!{$t玩家}出的是{$t0}啊,你赢了。`;
+    $mPlayerTime = $mPlayerTime + 1;
+    $mPlayerWin = $mPlayerWin + 1
+}

同时使用前缀和后缀匹配,以匹配 AxxxxxxxB 型文本

前缀匹配:A
后缀匹配:B
回复:怎么辉石呢

示例

木落
AB
头像
头像
海豹核心
怎么辉石呢

随机看图

随机看图

单人模组

示例

木落
开始吧 @海豹核心
头像
头像
海豹核心
那么,故事就这么开始了?如果你想听的话,回复我:说下去
木落
说下去 @海豹核心
头像
头像
海豹核心
那么,故事要从一个村子说起……(说下去)
木落
说下去 @海豹核心
头像
头像
海豹核心
这个村子有一户人家,门前有两棵树
木落
说下去 @海豹核心
头像
头像
海豹核心
一棵是函树,一棵是反函树
木落
说下去 @海豹核心
头像
头像
海豹核心
我讲完了。

具体实现,第一段

单人模组第一段

第二段

单人模组第二段

这两段较为常规,第三段开始变形了:

单人模组第三段

text
{%
+    if $mStory == 4 { $mStory = 5 };
+    if $mStory == 3 { $mStory = 4 };
+    if $mStory == 2 { $mStory = 3 };
+
+    $mStory == 3 ? '这个村子有一户人家,门前有两棵树',
+    $mStory == 4 ? '一棵是函树,一棵是反函树',
+    $mStory == 5 ? '我讲完了。',
+    1 ? '?'
+%}
+
+{% if $mStory == 5 { $mStory=0 } %}
+ + + + \ No newline at end of file diff --git a/advanced/edit_sensitive_words.html b/advanced/edit_sensitive_words.html new file mode 100644 index 000000000..efeb76d61 --- /dev/null +++ b/advanced/edit_sensitive_words.html @@ -0,0 +1,106 @@ + + + + + + 编写敏感词库 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Skip to content

编写敏感词库

本节内容

本节将介绍敏感词库的编写,请善用侧边栏和搜索,按需阅读文档。

创建文本格式的敏感词库

你可以直接按照以下格式书写 <words>.txt

text
#notice
+提醒级词汇 1
+提醒级词汇 2
+
+#caution
+注意级词汇 1
+注意级词汇 2
+
+#warning
+警告级词汇
+
+#danger
+危险级词汇

创建 TOML 格式的敏感词库

TOML 格式

我们假定你已了解 TOML 格式。如果你对 TOML 还很陌生,可以阅读以下教程或自行在互联网搜索:

你可以直接按照以下格式书写 <words>.toml

toml
# 元信息,用于填写一些额外的展示内容
+[meta]
+# 词库名称
+name = '测试词库'
+# 作者,和 authors 存在一个即可
+author = ''
+# 作者(多个),和 author 存在一个即可
+authors = [ '<匿名>' ]
+# 版本,建议使用语义化版本号
+version = '1.0'
+# 简介
+desc = '一个测试词库'
+# 协议
+license = 'CC-BY-NC-SA 4.0'
+# 创建日期,使用 RFC 3339 格式
+date = 2023-10-30
+# 更新日期,使用 RFC 3339 格式
+updateDate = 2023-10-30
+
+# 词表,出现相同词汇时按最高级别判断
+[words]
+# 忽略级词表,没有实际作用
+ignore = []
+# 提醒级词表
+notice = [
+  '提醒级词汇 1',
+  '提醒级词汇 2'
+]
+# 注意级词表
+caution = [
+  '注意级词汇 1',
+  '注意级词汇 2'
+]
+# 警告级词表
+warning = [
+  '警告级词汇 1',
+  '警告级词汇 2'
+]
+# 危险级词表
+danger = [
+  '危险级词汇 1',
+  '危险级词汇 2'
+]
+ + + + \ No newline at end of file diff --git a/advanced/introduce.html b/advanced/introduce.html new file mode 100644 index 000000000..4627cdaf4 --- /dev/null +++ b/advanced/introduce.html @@ -0,0 +1,52 @@ + + + + + + 进阶介绍 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Skip to content

进阶介绍

本节内容

本节将介绍海豹扩展功能的进阶内容,请善用侧边栏和搜索,按需阅读文档。

海豹核心提供了多种扩展功能,这些功能能让你实现更多的个性化功能,但通常也需要你具备一些知识。

我们建议,在尝试使用对应功能进行个性化前,先阅读本章的对应小节,帮助你快速掌握相关内容。

阅读完小节教程后,如果在使用中依然存在疑问,可以在官方群内寻求帮助。

了解海豹语

在很多地方为了实现一些逻辑,都需要用到海豹所提供的一种简单的脚本语言,可以称为「海豹语」「豹语」等。

我们非常建议你在扩展功能的编写中,先了解海豹语。见 扩展 - 内置脚本语言

用什么编写?

在牌堆、JS 插件、敏感词库等的编写中,我们通常需要在对应格式的文件进行编写。

务必使用更专业的编辑器,如果你不知道选择什么,可以尝试使用 vscodesublime text或 MT 管理器(Android)等,这些都是被广泛使用的优秀编辑器。

更专业的编辑器能更好地帮助你编写相关格式的文件。这些编辑器提供的语法高亮、自动补全、格式化、错误检查、编码转换等诸多功能,能为你带来更好的编写体验。

不建议使用 Windows 记事本、Notepad++ 编写。

提示:如何获取安装包?

官网应当是你下载软件的首选途径,请不要被搜索引擎等误导进各种下载站,它们很可能会提供二次封装后、捆绑大量流氓软件的安装包。

但由于各种原因,官网下载可能会十分缓慢,你还可以选择从海豹官方群的群文件中获取安装包。通常群文件的「工具&内置文件」中,请善用搜索。

+ + + + \ No newline at end of file diff --git a/advanced/js_api_list.html b/advanced/js_api_list.html new file mode 100644 index 000000000..2ddec56dc --- /dev/null +++ b/advanced/js_api_list.html @@ -0,0 +1,248 @@ + + + + + + API 列表 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Skip to content

API 列表

本节内容

本节为海豹提供的 JS API 列表。目前的内容是从上古文档中直接迁移过来的,难免存在错误和缺失,参考本节时请注意识别。

更好的方式是参考海豹提供的 seal.d.ts 文件。(但同样存在缺失)

如果你需要最准确的内容,当前只能查阅海豹源码。主要查看 dice_jsvm.go,还有一些 API 以结构体方法的形式存在。

其中 ctx 为信息的 MsgContext,msg 为信息的 Message,一般会在定义指令函数时就声明,如:

javascript
cmd.solve = (ctx, msg, cmdArgs) => {
+    someFunction;
+}

下面是 API 的说明(完全了吧………应该?):

javascript
//被注释掉的 API 是可以提供的,但是在源码中被注释。
+//seal.setVarInt(ctx, `$XXX`, valueToSet) //`$XXX`即 rollvm(初阶豹语)中的变量,其会将$XXX 的值设定为 int 类型的 valueToSet。
+//seal.setVarStr(ctx, `$XXX`, valueToSet) //同上,区别是设定的为 str 类型的 valueToSet。
+seal.replyGroup(ctx, msg, something) //向收到指令的群中发送 something。
+seal.replyPerson(ctx, msg, something) //顾名思义,类似暗骰,向指令触发者(若为好友)私信 something。
+seal.replyToSender(ctx, msg, something) //同上,区别是群内收到就群内发送,私聊收到就私聊发送。
+seal.memberBan(ctx, groupID, userID, dur) //将指定群的指定用户封禁指定时间 (似乎只实现了 walleq 协议?)
+seal.memberKick(ctx, groupID, userID)  //将指定群的指定用户踢出 (似乎也只实现了 walleq 协议?)
+seal.format(ctx, something) //将 something 经过一层 rollvm 转译并返回,注意需要配合 replyToSender 才能发送给触发者!
+seal.formatTmpl(ctx, something) //调用自定义文案 something
+seal.getCtxProxyFirst(ctx, cmdArgs)  //获取被 at 的第一个人,等价于 getCtxProxyAtPos(ctx, cmdArgs, 0)
+seal.vars.intGet(ctx, `$XXX`) //返回一个数组,其为 `[int 类型的触发者的该变量的值,bool]` 当 strGet 一个 int 或 intGet 一个 str 时 bool 为 false,若一切正常则为 true。(之所以会有这么奇怪的说法是因为 rollvm 的「个人变量」机制)。
+seal.vars.intSet(ctx, `$XXX`, valueToSet) //`$XXX` 即 rollvm(初阶豹语)中的变量,其会将 $XXX 的值设定为 int 类型的 valueToSet。
+seal.vars.strGet(ctx, `$XXX`) //返回一个数组,其为 `[str 类型的触发者的该变量的值,bool]`(之所以会有这么奇怪的说法是因为 rollvm 的「个人变量」机制),当 strGet 一个 int 或 intGet 一个 str 时 bool 为 false,如果一切正常则为 true。
+seal.vars.strSet(ctx, `$XXX`, valueToSet) //`$XXX` 即 rollvm(初阶豹语)中的变量,其会将 $XXX 的值设定为 str 类型的 valueToSet。
+//seal.vars.varSet(ctx, `$XXX`, valueToSet) //可能是根据数据类型自动推断 int 或 str?
+//seal.vars.varGet(ctx, `$XXX`) //同上
+seal.ext.newCmdItemInfo() //用来定义新的指令;没有参数,个人觉得可以视其为类(class)。
+seal.ext.newCmdExecuteResult(bool) //用于判断指令执行结果,true 为成功,false 为失败。
+seal.ext.new(extName, extAuthor, Version) //用于建立一个名为 extName,作者为 extAuthor,版本为 Version 的扩展。注意,extName,extAuthor 和 Version 均为字符串。
+seal.ext.find(extName) //用于查找名为 extname 的扩展,若存在则返回 true,否则返回 false。
+seal.ext.register(newExt) //将扩展 newExt 注册到系统中。注意 newExt 是 seal.ext.new 的返回值,将 register 视为 seal.ext.new() 是错误的。
+seal.coc.newRule() //用来创建自定义 coc 规则,github.com/sealdice/javascript/examples 中已有详细例子,不多赘述。
+seal.coc.newRuleCheckResult() //同上,不多赘述。
+seal.coc.registerRule(rule) //同上,不多赘述。
+seal.deck.draw(ctx, deckname, isShuffle) //他会返回一个抽取牌堆的结果。这里有些复杂:deckname 为需要抽取的牌堆名,而 isShuffle 则是一个布尔值,它决定是否放回抽取;false 为放回,true 为不放回。
+seal.deck.reload() //重新加载牌堆。
+//下面是 1.2 新增 api
+seal.newMessage() //返回一个空白的 Message 对象,结构与收到消息的 msg 相同
+seal.createTempCtx(endpoint, msg) // 制作一个 ctx, 需要 msg.MessageType 和 msg.Sender.UserId
+seal.applyPlayerGroupCardByTemplate(ctx, tmpl) // 设定当前 ctx 玩家的自动名片格式
+seal.gameSystem.newTemplate(string) //从 json 解析新的游戏规则。
+seal.gameSystem.newTemplateByYaml(string) //从 yaml 解析新的游戏规则。
+seal.getCtxProxyAtPos(ctx, cmdArgs, pos) //获取第 pos 个被 at 的人,pos 从 0 开始计数
+atob(base64String) //返回被解码的 base64 编码
+btoa(string) //将 string 编码为 base64 并返回
+
+//下面是 1.4.1 新增 api
+seal.ext.newConfigItem() //用于创建一个新的配置项,返回一个 ConfigItem 对象
+seal.ext.registerConfig(configItem) //用于注册一个配置项,参数为 ConfigItem 对象
+seal.ext.getConfig(ext, "key") //用于获取一个配置项的值,参数为扩展对象和配置项的 key
+seal.ext.registerStringConfig(ext, "key", "defaultValue") //用于注册一个 string 类型的配置项,参数为扩展对象、配置项的 key 和默认值
+seal.ext.registerIntConfig(ext, "key", 123) //用于注册一个 int 类型的配置项,参数为扩展对象、配置项的 key 和默认值
+seal.ext.registerFloatConfig(ext, "key", 123.456) //用于注册一个 float 类型的配置项,参数为扩展对象、配置项的 key 和默认值
+seal.ext.registerBoolConfig(ext, "key", true) //用于注册一个 bool 类型的配置项,参数为扩展对象、配置项的 key 和默认值
+seal.ext.registerTemplateConfig(ext, "key", ["1", "2", "3", "4"]) //用于注册一个 template 类型的配置项,参数为扩展对象、配置项的 key 和默认值
+seal.ext.registerOptionConfig(ext, "key", "1", ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]) //用于注册一个 option 类型的配置项,参数为扩展对象、配置项的 key、默认值和可选项
+seal.ext.getStringConfig(ext, "key") //用于获取一个 string 类型配置项的值,参数为扩展对象和配置项的 key
+seal.ext.getIntConfig(ext, "key") //用于获取一个 int 类型配置项的值,参数为扩展对象和配置项的 key
+seal.ext.getFloatConfig(ext, "key") //用于获取一个 float 类型配置项的值,参数为扩展对象和配置项的 key
+seal.ext.getBoolConfig(ext, "key") //用于获取一个 bool 类型配置项的值,参数为扩展对象和配置项的 key
+seal.ext.getTemplateConfig(ext, "key") //用于获取一个 template 类型配置项的值,参数为扩展对象和配置项的 key
+seal.ext.getOptionConfig(ext, "key") //用于获取一个 option 类型配置项的值,参数为扩展对象和配置项的 key
+
+//下面是 1.4.4 新增 api
+seal.setPlayerGroupCard(ctx, tmpl) //设置当前 ctx 玩家的名片
+seal.ban.addBan(ctx, id, place, reason)
+seal.ban.addTrust(ctx, id, place, reason)
+seal.ban.remove(ctx, id)
+seal.ban.getList()
+seal.ban.getUser(id)

以下为部分 API 使用示例。

提示

声明和注册扩展的代码部分已省略。

replyGroup replyPerson replyToSender

javascript
//在私聊触发 replyGroup 不会回复
+seal.replyGroup(ctx, msg, 'something'); //触发者会收到"something"的回复
+seal.replyPerson(ctx, msg, 'something'); //触发者会收到"something"的私聊回复
+seal.replyToSender(ctx, msg, 'something'); //触发者会收到"something"的回复

memberBan memberKick

是否保留待议

javascript
//注意这些似乎只能在 WQ 协议上实现;
+seal.memberBan(ctx, groupID, userID, dur) //将群为 groupID,userid 为 userID 的人封禁 dur(单位未知)
+seal.memberKick(ctx, groupID, userID) //将群为 groupID,userid 为 userID 的人踢出那个群

format formatTmpl

javascript
//注意 format 不会自动 reply,而是 return,所以请套一层 reply
+seal.replyToSender(ctx, msg, seal.format(ctx, `{$t玩家}的人品为:{$t人品}`))
+//{$t人品} 是一个 rollvm 变量,其值等于 .jrrp 出的数值
+//回复:
+//群主的人品为:87
+seal.replyToSender(ctx, msg, seal.formatTmpl(ctx, unknown))
+//这里等大佬来了再研究

getCtxProxyFirst getCtxProxyAtPos

javascript
cmd.solve = (ctx, msg, cmdArgs) => {
+    let ctxFirst = seal.getCtxProxyFirst(ctx, cmdArgs)
+    seal.replyToSender(ctx, msg, ctxFirst.player.name)
+}
+ext.cmdMap['test'] = cmd
+//输入:.test @A @B
+//返回:A 的名称。这里其实获取的是 A 玩家的 ctx,具体见 ctx 数据结构。
+cmd.solve = (ctx, msg, cmdArgs) => {
+    let ctx2 = seal.getCtxProxyAtPos(ctx, 2)
+    seal.replyToSender(ctx, msg, ctx3.player.name)
+}
+ext.cmdMap['test'] = cmd
+//输入:.test @A @B @C
+//返回:C(第三个被@的人,从 0 开始计算)的名称。这里其实获取的是 C 玩家的 ctx,具体见 ctx 数据结构。

vars

javascript
// 要看懂这里你可能需要学习一下初阶豹语
+seal.vars.intSet(ctx, `$m今日打卡次数`, 8) //将触发者的该个人变量设置为 8
+seal.vars.intGet(ctx, `$m今日打卡次数`) //返回 [8,true]
+seal.vars.strSet(ctx, `$g群友经典语录`, `我要 Git Blame 一下看看是谁写的`) //将群内的该群组变量设置为“我要 Git Blame 一下看看是谁写的”
+seal.vars.strGet(ctx, `$g群友经典语录`) //返回 ["我要 Git Blame 一下看看是谁写的",true]

ext

javascript
//用于注册扩展和定义指令的 api,已有详细示例,不多赘述

coc

javascript
//用于创建 coc 村规的 api,已有详细示例,不多赘述

deck

javascript
seal.deck.draw(ctx, `煤气灯`, false) //返回 放回抽取牌堆“煤气灯”的结果
+seal.deck.draw(ctx, `煤气灯`, true) //返回 不放回抽取牌堆“煤气灯”的结果
+seal.deck.reload() //重新加载牌堆

自定义 TRPG 规则相关

javascript
//这里实在不知道如何举例了
+seal.gameSystem.newTemplate(string) //从 json 解析新的游戏规则。
+seal.gameSystem.newTemplateByYaml(string) //从 yaml 解析新的游戏规则。
+seal.applyPlayerGroupCardByTemplate(ctx, tmpl) // 设定当前 ctx 玩家的自动名片格式
+seal.setPlayerGroupCard(ctx, tmpl) // 立刻设定当前 ctx 玩家的名片格式

其他

javascript
seal.newMessage() //返回一个空白的 Message 对象,结构与收到消息的 msg 相同
+seal.createTempCtx(endpoint, msg) // 制作一个 ctx, 需要 msg.MessageType 和 msg.Sender.UserId
+seal.getEndPoints() //返回骰子(应该?)的 EndPoints
+seal.getVersion() //返回一个 map,键值为 version 和 versionCode

ctx 的内容

javascript
//在 github.com/sealdice/javascript/examples_ts/seal.d.ts 中有完整内容
+// 成员
+ctx.group // 当前群信息 (对象)
+ctx.player // 当前玩家数据 (对象)
+ctx.endPoint // 接入点数据 (对象)
+// 以上三个对象内容暂略
+ctx.isCurGroupBotOn // bool
+ctx.isPrivate // bool 是否私聊
+ctx.privilegeLevel // int 权限等级:40 邀请者、50 管理、60 群主、70 信任、100 master
+ctx.delegateText // string 代骰附加文本
+// 方法 (太长,懒.)
+chBindCur
+chBindCurGet
+chBindGet
+chBindGetList
+chExists
+chGet
+chLoad
+chNew
+chUnbind
+chUnbindCur
+chVarsClear
+chVarsGet
+chVarsNumGet
+chVarsUpdateTime
+loadGroupVars
+loadPlayerGlobalVars
+loadPlayerGroupVars,notice

ctx.group 的内容

javascript
// 成员
+active
+groupId
+guildId
+groupName
+cocRuleIndex
+logCurName
+logOn
+recentDiceSendTime
+showGroupWelcome
+groupWelcomeMessage
+enteredTime
+inviteUserId
+// 方法
+extActive
+extClear
+extGetActive
+extInactive
+extInactiveByName
+getCharTemplate
+isActive
+playerGet

ctx.player 的内容

javascript
// 成员
+name
+userId
+lastCommandTime
+autoSetNameTemplate
+// 方法
+getValueNameByAlias

ctx.endPoint 的内容

javascript
// 成员
+baseInfo
+id
+nickname
+state
+userId
+groupNum
+cmdExecutedNum
+cmdExecutedLastTime
+onlineTotalTime
+platform
+enable
+// 方法
+adapterSetup
+refreshGroupNum
+setEnable
+unmarshalYAML

msg 的内容

javascript
// 成员
+msg.time // int64 发送时间
+msg.messageType // string group 群聊 private 私聊
+msg.groupId // string 如果是群聊,群号
+msg.guildId // string 服务器群组号,会在 discord,kook,dodo 等平台见到
+msg.sender // 发送者信息 (对象)
+    sender.nickname
+    sender.userId
+msg.message
+msg.rawId // 原始信息 ID, 用于撤回等
+msg.platform // 平台
+// 方法
+// (似乎目前没有?)

cmdArgs 的内容

javascript
// 成员
+.command // string
+.args // []string
+.kwargs // []Kwarg
+.at // []AtInfo
+.rawArgs // string
+.amIBeMentioned // bool (为何要加一个 Be?)
+.cleanArgs // string 一种格式化后的参数,也就是中间所有分隔符都用一个空格替代
+.specialExecuteTimes // 特殊的执行次数,对应 3# 这种
+// 方法
+.isArgEqual(n, ss...) // 返回 bool, 检查第 n 个参数是否在 ss 中
+.eatPrefixWith(ss...) // 似乎是从 cleanArgs 中去除 ss 中第一个匹配的前缀
+.chopPrefixToArgsWith(ss...) // 不懂
+.getArgN(n) // -> string
+.getKwarg(str) // -> Kwarg 如果有名为 str 的 flag,返回对象,否则返回 null/undefined(不确定)
+.getRestArgsFrom(n) // -> string 获取从第 n 个参数之后的所有参数,用空格拼接成一个字符串
+ + + + \ No newline at end of file diff --git a/advanced/js_example.html b/advanced/js_example.html new file mode 100644 index 000000000..37d9f97e5 --- /dev/null +++ b/advanced/js_example.html @@ -0,0 +1,938 @@ + + + + + + 常见用法示例 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Skip to content

常见用法示例

创建和注册扩展

提示:扩展机制

扩展机制可以看做是海豹的 mod 管理机制,可以模块化开关海豹的任意一部分,如常用的开启 dnd 扩展,关闭 coc 扩展,关闭自动回复等。

可以查看 .ext 命令 来了解更多。

在海豹中,所有指令必须归属于某个扩展,而一个扩展可以包含多条指令。

JS 脚本中创建扩展的方式如下,在创建扩展后,还需要注册扩展,才能让扩展起效,不要漏掉哦!

javascript
// 如何建立一个扩展
+
+// 首先检查是否已经存在
+if (!seal.ext.find('test')) {
+  // 不存在,那么建立扩展,名为 test,作者“木落”,版本 1.0.0
+  const ext = seal.ext.new('test', '木落', '1.0.0');
+  // 注册扩展
+  seal.ext.register(ext);
+}

注意:JS 脚本和扩展

在实现上,海豹允许你在一个 JS 脚本文件中注册多个扩展,但我们不建议这样做。一般来说,一个 JS 脚本文件只会注册一个扩展。

注意:修改内置功能?

出于对公平性的考虑,JS 脚本不能替换内置指令和内置扩展。

自定义指令

想要创建一条自定义指令,首先需要创建一个扩展(seal.ExtInfo),写好自定义指令的实现逻辑之后,再注册到扩展中。

创建指令

接上面的代码,假定目前已经注册好了一个名为 test 的扩展,现在要写一个名为 seal 的指令:

  • 这个命令的功能为,显示「抓到一只海豹」的文案;
    • 如果命令写 .seal ABC,那么文案中将海豹命名为「ABC」;
    • 如果命令中没写名字,那么命名为默认值「氪豹」。

第一步,创建新的自定义指令,设置好名字和帮助信息。

javascript
const cmdSeal = seal.ext.newCmdItemInfo();
+cmdSeal.name = 'seal'; // 指令名字,可用中文
+cmdSeal.help = '召唤一只海豹,可用 .seal <名字> 命名';

注意:命令的帮助信息

命令的帮助信息是在使用 .help <命令> 时会返回的帮助内容。

帮助信息不要. 开头,防止查看帮助时骰子的回复触发其他骰子。

第二步,编写指令的具体处理代码。

你需要编写指令对象的 solve 函数,在使用该指令的时候,海豹核心会调用你写的这个函数。

javascript
cmdSeal.solve = (ctx, msg, cmdArgs) => {
+    // 这里是你需要编写的内容
+};
参数说明
ctx主要是和当前环境以及用户相关的内容,如当前发指令用户,当前群组信息等
msg原始指令内容,如指令文本,发送平台,发送时间等
cmdArgs指令信息,会将用户发的信息进行分段,方便快速取用

这里仅说明需要用到的接口,详细可见 插件仓库 examp_ts 下的 seal.d.ts 文件,里面包含了目前开放的接口的定义及其注释说明。

指令参数与返回值

假设用户发送过来的消息是 .seal A B C,那么可以用 cmdArgs.getArgN(1) 获取到 AcmdArgs.getArgN(2) 获取到 BcmdArgs.getArgN(3) 获取到 C

通常会对参数值进行判断,随后作出响应。

以下代码处理的是 .seal help 的情形:

javascript
cmdSeal.solve = (ctx, msg, cmdArgs) => {
+  // 获取第一个参数,例如 .seal A B C
+  // 这里 cmdArgs.getArgN(1) 的结果即是 A,传参为 2 的话结果是 B
+  let val = cmdArgs.getArgN(1);
+  switch (val) {
+    case 'help': {
+      // 命令为 .seal help
+      // 创建一个结果对象,并将 showHelp 标记为 true,这会自动给用户发送帮助
+      const ret = seal.ext.newCmdExecuteResult(true);
+      ret.showHelp = true;
+      return ret;
+    }
+    default: {
+      // 没有传入参数时的代码
+      return seal.ext.newCmdExecuteResult(true);
+    }
+  }
+};

注意:返回执行结果

在执行完自己的代码之后,需要返回指令结果对象,其参数是是否执行成功。

指令核心执行流程

给消息发送者回应,需要使用 seal.replyToSender() 函数,前两个参数和 solve() 函数接收的参数一致,第三个参数是你要发送的文本。

发送的文本中,可以包含 变量(例如{$t玩家}),也可以包含 CQ 码,用来实现回复发送者、@发送者、发送图片、发送分享卡片等功能。

在这个例子中,我们需要获取作为海豹名字的参数,获取不到就使用默认值,随后向消息发送者发送回应。

在刚刚的位置填入核心代码,就可以完成了。

javascript
cmdSeal.solve = (ctx, msg, cmdArgs) => {
+  // 获取第一个参数,例如 .seal A B C
+  // 这里 cmdArgs.getArgN(1) 的结果即是 A,传参为 2 的话结果是 B
+  let val = cmdArgs.getArgN(1);
+  switch (val) {
+    case 'help': {
+      // 命令为 .seal help
+      // 创建一个结果对象,并将 showHelp 标记为 true,这会自动给用户发送帮助
+      const ret = seal.ext.newCmdExecuteResult(true);
+      ret.showHelp = true;
+      return ret;
+    }
+    default: {
+      // 命令为 .seal XXXX,取第一个参数为名字
+      if (!val) val = '氪豹';
+      // 进行回复,如果是群聊发送那么在群里回复,私聊发送则在私聊回复 (听起来是废话文学,但详细区别见暗骰例子)
+      seal.replyToSender(ctx, msg, `你抓到一只海豹!取名为${val}\n它的逃跑意愿为${Math.ceil(Math.random() * 100)}`);
+      return seal.ext.newCmdExecuteResult(true);
+    }
+  }
+};

注册指令

第三步,将命令注册到扩展中。

javascript
ext.cmdMap['seal'] = cmdSeal;

如果你想要给这个命令起一个别名,也就是增加一个触发词,可以这样写:

javascript
ext.cmdMap['seal'] = cmdSeal; // 注册 .seal 指令
+ext.cmdMap['海豹'] = cmdSeal; // 注册 .海豹 指令,等效于 .seal

完整的代码如下:

javascript
// ==UserScript==
+// @name         示例:编写一条自定义指令
+// @author       木落
+// @version      1.0.0
+// @description  召唤一只海豹,可用.seal <名字> 命名
+// @timestamp    1671368035
+// 2022-12-18
+// @license      Apache-2
+// @homepageURL  https://github.com/sealdice/javascript
+// ==/UserScript==
+
+// 编写一条自定义指令
+// 先将扩展模块创建出来,如果已创建就直接使用
+let ext = seal.ext.find('test');
+if (!ext) {
+  ext = seal.ext.new('test', '木落', '1.0.0');
+
+  // 创建指令 .seal
+  // 这个命令的功能为,显示「抓到一只海豹」的文案;
+  // 如果命令写 .seal ABC,那么文案中将海豹命名为「ABC」;
+  // 如果命令中没写名字,那么命名为默认值「氪豹」。
+  const cmdSeal = seal.ext.newCmdItemInfo();
+  cmdSeal.name = 'seal'; // 指令名字,可用中文
+  cmdSeal.help = '召唤一只海豹,可用 .seal <名字> 命名';
+
+  // 主函数,指令解析器会将指令信息解析,并储存在几个参数中
+  // ctx 主要是和当前环境以及用户相关的内容,如当前发指令用户,当前群组信息等
+  // msg 为原生态的指令内容,如指令文本,发送平台,发送时间等
+  // cmdArgs 为指令信息,会将用户发的信息进行分段,方便快速取用
+  cmdSeal.solve = (ctx, msg, cmdArgs) => {
+    // 获取第一个参数,例如 .seal A B C
+    // 这里 cmdArgs.getArgN(1) 的结果即是 A,传参为 2 的话结果是 B
+    let val = cmdArgs.getArgN(1);
+    switch (val) {
+      case 'help': {
+        // 命令为 .seal help
+        // 创建一个结果对象,并将 showHelp 标记为 true,这会自动给用户发送帮助
+        const ret = seal.ext.newCmdExecuteResult(true);
+        ret.showHelp = true;
+        return ret;
+      }
+      default: {
+        // 命令为 .seal XXXX,取第一个参数为名字
+        if (!val) val = '氪豹';
+        // 进行回复,如果是群聊发送那么在群里回复,私聊发送则在私聊回复 (听起来是废话文学,但详细区别见暗骰例子)
+        seal.replyToSender(ctx, msg, `你抓到一只海豹!取名为${val}\n它的逃跑意愿为${Math.ceil(Math.random() * 100)}`);
+        return seal.ext.newCmdExecuteResult(true);
+      }
+    }
+  };
+
+  // 将命令注册到扩展中
+  ext.cmdMap['seal'] = cmdSeal;
+
+  // 无实际意义,用于消除编译报错
+  export {}
+
+  seal.ext.register(ext);
+}

这就是最基本的模板了。

抽取牌堆

抽取牌堆的函数是 seal.deck.draw(ctx, deckName, shufflePool)

  • ctxMsgContext 类型,指令上下文,solve() 函数传进来的第一个参数
  • deckName:牌堆名称,字符串类型,例如 GRE单词
  • shufflePool:是否放回抽取,布尔类型,true 为放回抽取,false 为不放回抽取

返回值是一个 map,包含以下字段:

  • exists:布尔类型,是否抽取成功
  • result:字符串类型,抽取结果
  • err:字符串类型,抽取失败的原因

示例代码:抽取牌堆

javascript
// ==UserScript==
+// @name         抽取牌堆示例
+// @author       SzzRain
+// @version      1.0.0
+// @description  用于演示如何抽取牌堆
+// @timestamp    1699077659
+// @license      MIT
+// @homepageURL  https://github.com/sealdice/javascript
+// ==/UserScript==
+
+// 本脚本用于演示如何抽取牌堆, 共有两种实现方式
+if (!seal.ext.find('draw-decks-example')) {
+  const ext = seal.ext.new('draw-decks-example', 'SzzRain', '1.0.0');
+  // 创建一个命令
+  const cmdDrawDecks = seal.ext.newCmdItemInfo();
+  cmdDrawDecks.name = 'dr';
+  cmdDrawDecks.help = '使用 .dr <牌堆名> 来抽取牌堆';
+  cmdDrawDecks.solve = (ctx, msg, cmdArgs) => {
+    // 抽取牌堆
+    // 参数1:ctx 参数2:牌堆名称 参数3:是否放回抽取
+    // 返回值:{exists: true, result: '抽取结果', err: '错误原因'}
+    const decks = seal.deck.draw(ctx, cmdArgs.getArgN(1), true);
+    // 判断是否抽取成功
+    if (decks['exists']) {
+      seal.replyToSender(ctx, msg, decks['result']);
+      return seal.ext.newCmdExecuteResult(true);
+    } else {
+      seal.replyToSender(ctx, msg, '抽取牌堆失败,原因:' + decks['err']);
+      return seal.ext.newCmdExecuteResult(true);
+    }
+  };
+  // 注册命令
+  ext.cmdMap['dr'] = cmdDrawDecks;
+
+  // 创建一个命令
+  const cmdDrawDecks2 = seal.ext.newCmdItemInfo();
+  cmdDrawDecks2.name = 'dr2';
+  cmdDrawDecks2.help = '使用 .dr2 <牌堆名> 来抽取牌堆';
+  cmdDrawDecks2.solve = (ctx, msg, cmdArgs) => {
+    // 抽取牌堆的另一种写法,使用 format 函数,由于经过了 rollvm 的处理,所以代码的执行效率会更慢
+    // 不过这种写法的返回值固定为字符串,省去了判断是否抽取成功的步骤
+    // 参数1:ctx 参数2:海豹语表达式,其中 #{DRAW-牌堆名称} 会被替换为抽取结果
+    const decks = seal.format(ctx, `#{DRAW-${cmdArgs.getArgN(1)}}`);
+    seal.replyToSender(ctx, msg, decks);
+  }
+  // 注册命令
+  ext.cmdMap['dr2'] = cmdDrawDecks2;
+
+  // 注册扩展
+  seal.ext.register(ext);
+}

权限识别

海豹中的权限等级,由高到低分别是:骰主群主管理员邀请者普通用户黑名单用户。 每一个身份都有一个对应的数字,可以通过 ctx.privilegeLevel 获取当前用户的权限等级。 每个身份所对应的数字如下表所示:

信息

注意: 部分权限等级仅在群聊中有效。

v1.4.5 起,在私聊中,除了骰主白名单用户黑名单用户,其他用户被视为拥有与群管理员等同的权限,即权限值 50。

v1.4.4 或更早版本,私聊中除了骰主白名单用户黑名单用户,其他用户的权限等级为普通用户(0)。

身份权限值
骰主100
白名单70
群主60
管理员50
邀请者40
普通用户0
黑名单用户-30

提示:关于白名单用户

白名单用户即通过骰主手动添加的信任名单用户,可以使用所有需要群管理权限的功能,但不具备 Master 权限。

信任名单可以通过 .ban trust <统一ID> 添加,通过 .ban list trust 查看。

提示:关于黑名单用户

通常情况下你不需要考虑黑名单用户的情况,因为黑名单用户的消息会被过滤掉,不会触发任何指令。

示例代码:权限识别

javascript
// ==UserScript==
+// @name         权限识别样例
+// @author       SzzRain
+// @version      1.0.0
+// @description  使用命令 .myperm 查看自己的权限
+// @timestamp    1699086084
+// @license      MIT
+// @homepageURL  https://github.com/Szzrain
+// ==/UserScript==
+if (!seal.ext.find('myperm')) {
+  const ext = seal.ext.new('myperm', 'SzzRain', '1.0.0');
+  // 创建一个命令
+  const cmdMyperm = seal.ext.newCmdItemInfo();
+  cmdMyperm.name = 'myperm';
+  cmdMyperm.help = '使用 .myperm 展示我的权限';
+  cmdMyperm.solve = (ctx, msg, cmdArgs) => {
+    let text = "普通用户";
+    console.log(ctx.privilegeLevel);
+    switch (ctx.privilegeLevel) {
+      case 100:
+        text = "master";
+        break;
+      case 60:
+        text = "owner";
+        break;
+      case 50:
+        text = "admin";
+        break;
+      case 40:
+        text = "inviter";
+        break;
+      case -30:
+        // 黑名单用户,但是由于黑名单会被过滤掉,所以实际上这里并不会执行,这里只是为了演示
+        return seal.ext.newCmdExecuteResult(false);
+    }
+    seal.replyToSender(ctx, msg, text);
+    return seal.ext.newCmdExecuteResult(true);
+  }
+  // 注册命令
+  ext.cmdMap['myperm'] = cmdMyperm;
+
+  // 注册扩展
+  seal.ext.register(ext);
+}

黑名单 / 信任名单操作 v1.4.4

黑名单操作的函数

添加:seal.ban.addBan(ctx, uid, place, reason)

移除:seal.ban.remove(ctx, uid)

  • ctxMsgContext 类型,指令上下文,solve() 函数传进来的第一个参数
  • uid:用户 ID,字符串类型,例如 QQ:123456789, TG:123456789
  • place:拉黑的地方,字符串类型,随便写,一般来说在群内拉黑就写群 ID
  • reason:拉黑原因,字符串类型,随便写

信任用户名单

添加:seal.ban.addTrust(ctx, uid, place, reason) 参数说明同上

移除:seal.ban.remove(ctx, uid)

提示:相同的移除函数

黑名单和信任名单存储在同一个数据库中,因此移除时使用的是同一个函数。

你在进行移除操作时需要自己判断是否符合你的预期。

获取黑名单 / 信任名单列表

使用 seal.ban.getList()

返回值为一个数组,数组中的每一项都是一个 BanListInfoItem 对象,包含以下字段:

  • id:用户 ID,字符串类型
  • name:用户昵称,字符串类型
  • score:怒气值,整数类型
  • rank:拉黑/信任等级 0=没事 -10=警告 -30=禁止 30=信任
  • times:事发时间,数组类型,内部元素为整数时间戳
  • reasons:拉黑/信任原因,数组类型,内部元素为字符串
  • places:拉黑/信任的发生地点,数组类型,内部元素为字符串
  • banTime:拉黑/信任的时间,整数时间戳

获取用户在黑名单 / 信任名单中的信息

使用 seal.ban.getUser(uid)

如果用户没有在黑名单 / 信任名单中,返回值为空值。

如果有则返回一个 BanListInfoItem 对象,字段同上。

示例代码:黑名单 / 信任名单操作

javascript
// ==UserScript==
+// @name         js-ban
+// @author       SzzRain
+// @version      1.0.0
+// @description  演示 js 扩展操作黑名单
+// @timestamp    1706684850
+// @license      MIT
+// @homepageURL  https://github.com/Szzrain
+// ==/UserScript==
+
+if (!seal.ext.find('js-ban')) {
+  const ext = seal.ext.new('js-ban', 'SzzRain', '1.0.0');
+  // 创建一个命令
+  const cmdcban = seal.ext.newCmdItemInfo();
+  cmdcban.name = 'cban';
+  cmdcban.help = '使用.cban <用户id> 来拉黑目标用户,仅master可用';
+  cmdcban.solve = (ctx, msg, cmdArgs) => {
+      let val = cmdArgs.getArgN(1);
+      switch (val) {
+          case 'help': {
+              const ret = seal.ext.newCmdExecuteResult(true);
+              ret.showHelp = true;
+              return ret;
+          }
+          default: {
+              if (ctx.privilegeLevel === 100) {
+                  seal.ban.addBan(ctx, val, "JS扩展拉黑", "JS扩展拉黑测试");
+                  seal.replyToSender(ctx, msg, "已拉黑用户" + val);
+              } else {
+                  seal.replyToSender(ctx, msg, "你没有权限执行此命令");
+              }
+              return seal.ext.newCmdExecuteResult(true);
+          }
+      }
+  }
+  // 注册命令
+  ext.cmdMap['cban'] = cmdcban;
+
+  // 创建一个命令
+  const cmdcunban = seal.ext.newCmdItemInfo();
+  cmdcunban.name = 'cunban';
+  cmdcunban.help = '使用.cunban <用户id> 来解除拉黑/移除信任目标用户,仅master可用';
+  cmdcunban.solve = (ctx, msg, cmdArgs) => {
+      let val = cmdArgs.getArgN(1);
+      switch (val) {
+          case 'help': {
+              const ret = seal.ext.newCmdExecuteResult(true);
+              ret.showHelp = true;
+              return ret;
+          }
+          default: {
+              if (ctx.privilegeLevel === 100) {
+                  // 信任用户和拉黑用户存在同一个列表中,remove 前请先判断是否符合预期
+                  seal.ban.remove(ctx, val);
+                  seal.replyToSender(ctx, msg, "已解除拉黑/信任用户" + val);
+              } else {
+                  seal.replyToSender(ctx, msg, "你没有权限执行此命令");
+              }
+              return seal.ext.newCmdExecuteResult(true);
+          }
+      }
+  }
+  // 注册命令
+  ext.cmdMap['cunban'] = cmdcunban;
+
+  // 创建一个命令
+  const cmdctrust = seal.ext.newCmdItemInfo();
+  cmdctrust.name = 'ctrust';
+  cmdctrust.help = '使用.ctrust <用户id> 来信任目标用户,仅master可用';
+  cmdctrust.solve = (ctx, msg, cmdArgs) => {
+    let val = cmdArgs.getArgN(1);
+    switch (val) {
+      case 'help': {
+        const ret = seal.ext.newCmdExecuteResult(true);
+        ret.showHelp = true;
+        return ret;
+      }
+      default: {
+        if (ctx.privilegeLevel === 100) {
+          seal.ban.addTrust(ctx, val, "JS扩展信任", "JS扩展信任测试");
+          seal.replyToSender(ctx, msg, "已信任用户" + val);
+        } else {
+          seal.replyToSender(ctx, msg, "你没有权限执行此命令");
+        }
+        return seal.ext.newCmdExecuteResult(true);
+      }
+    }
+  }
+  // 注册命令
+  ext.cmdMap['ctrust'] = cmdctrust;
+
+  // 创建一个命令
+  const cmdcbanlist = seal.ext.newCmdItemInfo();
+  cmdcbanlist.name = 'cbanlist';
+  cmdcbanlist.help = '使用.cbanlist 来查看黑名单和信任列表,仅master可用';
+  cmdcbanlist.solve = (ctx, msg, cmdArgs) => {
+    let val = cmdArgs.getArgN(1);
+    switch (val) {
+      case 'help': {
+        const ret = seal.ext.newCmdExecuteResult(true);
+        ret.showHelp = true;
+        return ret;
+      }
+      default: {
+        if (ctx.privilegeLevel === 100) {
+          let text = "黑名单/信任列表:\n";
+          seal.ban.getList().forEach((v) => {
+            text += `${v.name}(${v.id}) 当前等级:${v.rank} 怒气值:${v.score}\n`;
+          });
+          seal.replyToSender(ctx, msg, text);
+        } else {
+          seal.replyToSender(ctx, msg, "你没有权限执行此命令");
+        }
+        return seal.ext.newCmdExecuteResult(true);
+      }
+    }
+  }
+  // 注册命令
+  ext.cmdMap['cbanlist'] = cmdcbanlist;
+
+  // 创建一个命令
+  const cmdcget = seal.ext.newCmdItemInfo();
+  cmdcget.name = 'cget';
+  cmdcget.help = '使用.cget <用户id> 来查看目标用户的黑名单/信任信息,仅master可用';
+  cmdcget.solve = (ctx, msg, cmdArgs) => {
+    let val = cmdArgs.getArgN(1);
+    switch (val) {
+      case 'help': {
+        const ret = seal.ext.newCmdExecuteResult(true);
+        ret.showHelp = true;
+        return ret;
+      }
+      default: {
+        if (ctx.privilegeLevel === 100) {
+          let info = seal.ban.getUser(val);
+          if (!info) {
+            seal.replyToSender(ctx, msg, "用户不存在或未被拉黑/信任");
+            return seal.ext.newCmdExecuteResult(true);
+          }
+          let level = info.rank;
+          // 不知道为什么,用 === 是 false
+          if (info.rank == 30) {
+            level = "信任"
+          } else if (info.rank == -30) {
+            level = "拉黑"
+          } else if (info.rank == -10) {
+            level = "警告"
+          }
+          let text = `用户${info.name}(${info.id}) 当前等级:${level} 怒气值:${info.score}`;
+          seal.replyToSender(ctx, msg, text);
+        } else {
+          seal.replyToSender(ctx, msg, "你没有权限执行此命令");
+        }
+        return seal.ext.newCmdExecuteResult(true);
+      }
+    }
+  }
+  // 注册命令
+  ext.cmdMap['cget'] = cmdcget;
+
+  // 注册扩展
+  seal.ext.register(ext);
+}

存取数据

相关的 API 是两个函数,ExtInfo.storageSet(key, value) 函数和 ExtInfo.storageGet(key),一个存,一个取。

关于 key:

存储时需要指定 key,你可以设定为你的扩展的名字,也可以设定为其他的,注意不要和别的扩展的 key 重名就可以了。

就好比你在商场门口想要把随身物品存进暂存柜中,需要先找到个和别人不重复的柜子,避免放错地方或者取错东西。

关于 value:

存放的数据是字符串类型,且只能存一个,但如果想要存放更多的数据以及非字符串类型的数据怎么办?

答案是使用 JSON.stringify() 函数将存储了数据的 JS 对象转换为 JSON 字符串,存储起来,需要取出的时候,再使用 JSON.parse() 函数将数据再转换为 JS 对象。。

示例代码:投喂插件

javascript
// ==UserScript==
+// @name         示例:存储数据
+// @author       木落
+// @version      1.0.0
+// @description  投喂,格式 .投喂 <物品>
+// @timestamp    1672423909
+// 2022-12-31
+// @license      Apache-2
+// @homepageURL  https://github.com/sealdice/javascript
+// ==/UserScript==
+
+// 先将扩展模块创建出来,如果已创建就直接使用
+if (!seal.ext.find('test')) {
+  const ext = seal.ext.new('test', '木落', '1.0.0');
+
+  const cmdFeed = seal.ext.newCmdItemInfo();
+  cmdFeed.name = '投喂';
+  cmdFeed.help = '投喂,格式:.投喂 <物品>\n.投喂 记录 // 查看记录';
+  cmdFeed.solve = (ctx, msg, cmdArgs) => {
+    let val = cmdArgs.getArgN(1);
+    switch (val) {
+      case 'help':
+      case '': {
+        // .投喂 help
+        const ret = seal.ext.newCmdExecuteResult(true);
+        ret.showHelp = true;
+        return ret;
+      }
+      case '列表':
+      case '记录':
+      case 'list': {
+        const data = JSON.parse(ext.storageGet('feedInfo') || '{}');
+        const lst = [];
+        for (let [k, v] of Object.entries(data)) {
+          lst.push(`- ${k}: 数量 ${v}`);
+        }
+        seal.replyToSender(ctx, msg, `投喂记录:\n${lst.join('\n')}`);
+        return seal.ext.newCmdExecuteResult(true);
+      }
+      default: {
+        const data = JSON.parse(ext.storageGet('feedInfo') || '{}');
+        const name = val || '空气';
+        if (data[name] === undefined) {
+          data[name] = 0;
+        }
+        data[name] += 1;
+        ext.storageSet('feedInfo', JSON.stringify(data));
+        seal.replyToSender(ctx, msg, `你给海豹投喂了${name},要爱护动物!`);
+        return seal.ext.newCmdExecuteResult(true);
+      }
+    }
+  };
+
+  // 将命令注册到扩展中
+  ext.cmdMap['投喂'] = cmdFeed;
+  ext.cmdMap['feed'] = cmdFeed;
+
+  seal.ext.register(ext);
+}

示例代码:群内安价收集

这是关于数据的增加、删除、查询等操作的实现示例(修改的话就是删除之后增加)

javascript
// ==UserScript==
+// @name         群内安价收集
+// @author       憧憬少
+// @version      1.0.0
+// @description  在群内收集群友给出的安价选项,并掷骰得出结果
+// @timestamp    1676386517
+// 2023-02-14 22:55:17
+// @license      MIT
+// @homepageURL  https://github.com/ChangingSelf/sealdice-js-ext-anchor
+// ==/UserScript==
+
+(() => {
+  // src/index.ts
+  const HELP = `群内安价收集 (ak 是アンカー罗马字缩写)
+注意 ak 后面有空格,“.ak”也可以换成“.安价”
+
+.ak help // 查看帮助
+.ak # 标题 // 新建一轮分歧并设标题
+.ak + 选项 // 需要添加的选项的内容
+.ak - 序号 // 需要移除的选项的序号
+.ak ? // 列出目前所有选项
+.ak = // 随机抽取 1 个选项并继续
+.ak = n // 随机抽取 n 个选项并继续
+`;
+  const STORAGE_KEY = "anchor";
+  const OPTION_NUM_PER_PAGE = 15; // 列出所有选项时,每页放多少个选项
+  function akNew(ctx, msg, ext, title) {
+    const data = {
+      "title": title,
+      "options": []
+    };
+    ext.storageSet(STORAGE_KEY, JSON.stringify(data));
+    seal.replyToSender(ctx, msg, `已新建分歧:${title}`);
+  }
+  function akAdd(ctx, msg, ext, option) {
+    const data = JSON.parse(ext.storageGet(STORAGE_KEY) || '{"title":"","options":[]}');
+    data.options.push(option);
+    seal.replyToSender(ctx, msg, `当前分歧:${data.title}
+已添加第${data.options.length}个选项:${option}`);
+    ext.storageSet(STORAGE_KEY, JSON.stringify(data));
+  }
+  function akDel(ctx, msg, ext, index) {
+    const data = JSON.parse(ext.storageGet(STORAGE_KEY) || '{"title":"","options":[]}');
+    const removed = data.options.splice(index - 1, 1)[0];
+    seal.replyToSender(ctx, msg, `当前分歧:${data.title}
+已移除第${index}个选项:${removed}`);
+    ext.storageSet(STORAGE_KEY, JSON.stringify(data));
+  }
+  function akList(ctx, msg, ext) {
+    const data = JSON.parse(ext.storageGet(STORAGE_KEY) || '{"title":"","options":[]}');
+    if (data.options.length === 0) {
+      seal.replyToSender(ctx, msg, `当前分歧:${data.title}
+还没有任何选项呢`);
+      return;
+    }
+    let optStr = "";
+    let curPageRows = 0;
+    data.options.forEach((value, index) => {
+      optStr += `${index + 1}.${value}
+`;
+      ++curPageRows;
+      if (curPageRows >= OPTION_NUM_PER_PAGE) {
+        seal.replyToSender(ctx, msg, `当前分歧:${data.title}
+${optStr}`);
+        optStr = "";
+        curPageRows = 0;
+      }
+    });
+    if (curPageRows > 0) {
+      seal.replyToSender(ctx, msg, `当前分歧:${data.title}
+${optStr}`);
+    }
+  }
+  function randomInt(min, max) {
+    return Math.floor(Math.random() * (max - min + 1)) + min;
+  }
+  function akGet(ctx, msg, ext, num = 1) {
+    const data = JSON.parse(ext.storageGet(STORAGE_KEY) || '{"title":"","options":[]}');
+    if (data.options.length === 0) {
+      seal.replyToSender(ctx, msg, `当前分歧:${data.title}
+还没有任何选项呢`);
+      return;
+    }
+    akList(ctx, msg, ext);
+    let optStr = "";
+    for (let i = 0; i < num; ++i) {
+      const r = randomInt(1, data.options.length);
+      const result = data.options.splice(r - 1, 1);
+      optStr += `${i + 1}.${result}
+`;
+    }
+    seal.replyToSender(ctx, msg, `结果是:
+${optStr}`);
+    ext.storageSet(STORAGE_KEY, JSON.stringify(data));
+  }
+  function main() {
+    let ext = seal.ext.find("anchor");
+    if (!ext) {
+      ext = seal.ext.new("anchor", "憧憬少", "1.0.0");
+
+      const cmdSeal = seal.ext.newCmdItemInfo();
+      cmdSeal.name = "安价";
+      cmdSeal.help = HELP;
+      cmdSeal.solve = (ctx, msg, cmdArgs) => {
+        try {
+          let val = cmdArgs.getArgN(1);
+          switch (val) {
+            case "#": {
+              const title = cmdArgs.getArgN(2);
+              akNew(ctx, msg, ext, title);
+              return seal.ext.newCmdExecuteResult(true);
+            }
+            case "+": {
+              const option = cmdArgs.getArgN(2);
+              akAdd(ctx, msg, ext, option);
+              return seal.ext.newCmdExecuteResult(true);
+            }
+            case "-": {
+              const index = Number(cmdArgs.getArgN(2));
+              akDel(ctx, msg, ext, index);
+              return seal.ext.newCmdExecuteResult(true);
+            }
+            case "?":
+            case "?": {
+              akList(ctx, msg, ext);
+              return seal.ext.newCmdExecuteResult(true);
+            }
+            case "=": {
+              let num = 1;
+              if (cmdArgs.args.length >= 2) {
+                num = Number(cmdArgs.getArgN(2));
+              }
+              akGet(ctx, msg, ext, num);
+              return seal.ext.newCmdExecuteResult(true);
+            }
+            case "help":
+            default: {
+              const ret = seal.ext.newCmdExecuteResult(true);
+              ret.showHelp = true;
+              return ret;
+            }
+          }
+        } catch (error) {
+          seal.replyToSender(ctx, msg, error.Message);
+          return seal.ext.newCmdExecuteResult(true);
+        }
+      };
+      ext.cmdMap["安价"] = cmdSeal;
+      ext.cmdMap["ak"] = cmdSeal;
+
+      seal.ext.register(ext);
+    }
+  }
+  main();
+})();

数据处理模板

关于取出数据来修改的函数,可以参考如下代码:

javascript
const STORAGE_KEY = "anchor"; // 将你的 key 抽出来单独作为一个常量,方便开发阶段修改(使用了之后就不要修改了)
+//函数:添加选项
+function akAdd(ctx, msg, ext, option) {
+    //取出数据
+    const data = JSON.parse(ext.storageGet(STORAGE_KEY) || '{"title":"","options":[]}');
+
+    //处理数据
+    data.options.push(option);
+
+    //响应发送者
+    seal.replyToSender(ctx, msg, `当前分歧:${data.title}\n已添加第${data.options.length}个选项:${option}`);
+
+    //将处理完的数据写回去
+    ext.storageSet(STORAGE_KEY, JSON.stringify(data));
+}

读取玩家或群组数据

可以查看下文的 API

编写暗骰指令

如下:

javascript
// ==UserScript==
+// @name         示例:编写暗骰指令
+// @author       流溪
+// @version      1.0.0
+// @description  暗骰,格式.hide 原因
+// @timestamp    1671540835
+// 2022-12-20
+// @license      Apache-2
+// @homepageURL  https://github.com/sealdice/javascript
+// ==/UserScript==
+if (!seal.ext.find('hide')){
+    const ext = seal.ext.new('hide','流溪','0.0.1');
+
+    const cmdHide = seal.ext.newCmdItemInfo;
+    cmdHide.name = 'hide';
+    cmdHide.help = '暗骰,使用 .hide 面数 暗骰';
+    cmdHide.solve = (ctx, msg, cmdArgs) => {
+      if (msg.messageType !== 'group'){
+          seal.replyToSender(ctx, msg, '暗骰只能在群内触发');
+          return seal.ext.newCmdExecuteResult(true);
+      }
+      function rd(x){
+          // 这里写的时候有点不清醒了,感觉是对的,如果不对请拷打我
+          return Math.round(Math.random() * (x - 1) + 1);
+      }
+      let x = cmdArgs.getArgN(1);
+      if (x === 'help'){
+          return seal.ext.newCmdExecuteResult(true).showhelp = true;
+      } else if (isNaN(Number(x))){
+          // 我知道这里有更好的判断是否为数字的方法但是我不会.jpg
+          seal.replyToSender(ctx, msg, `骰子面数应是数字`);
+          return seal.ext.newCmdExecuteResult(true);
+      } else {
+          // 这就是暗骰 api 哒!
+          seal.replyPerson(ctx, msg, `你在群${msg.groupId}的掷骰结果为:${rd(x)}`);
+          return seal.ext.newCmdExecuteResult(true);
+      }
+    }
+  ext.cmdMap['hide'] = cmdHide;
+
+  seal.ext.register(ext);
+}

可以看到使用seal.replyPerson做到暗骰的效果。

编写代骰指令

javascript
// ==UserScript==
+// @name         示例:编写代骰指令
+// @author       木落
+// @version      1.0.0
+// @description  捕捉某人,格式.catch <@名字>
+// @timestamp    1671540835
+// 2022-12-20
+// @license      Apache-2
+// @homepageURL  https://github.com/sealdice/javascript
+// ==/UserScript==
+
+// 编写代骰指令
+// 先将扩展模块创建出来,如果已创建就直接使用
+if (!seal.ext.find('test')) {
+  const ext = seal.ext.new('test', '木落', '1.0.0');
+
+  // 创建指令 .catch
+  // 这个命令的功能为,显示“试图捕捉某人”,并给出成功率
+  // 如果命令写“.catch @张三”,那么就会试着捕捉张三
+  const cmdCatch = seal.ext.newCmdItemInfo();
+  cmdCatch.name = 'catch';
+  cmdCatch.help = '捕捉某人,格式.catch <@名字>';
+  // 对这个指令启用使用代骰功能,即@某人时,可获取对方的数据,以对方身份进行骰点
+  cmdCatch.allowDelegate = true;
+  cmdCatch.solve = (ctx, msg, cmdArgs) => {
+    // 获取对方数据,之后用 mctx 替代 ctx,mctx 下读出的数据即被代骰者的个人数据
+    const mctx = seal.getCtxProxyFirst(ctx, cmdArgs);
+    let val = cmdArgs.getArgN(1);
+    switch (val) {
+      case 'help': {
+        // 命令为 .catch help
+        const ret = seal.ext.newCmdExecuteResult(true);
+        ret.showHelp = true;
+        return ret;
+      }
+      default: {
+        const text = `正在试图捕捉${mctx.player.name},成功率为${Math.ceil(Math.random() * 100)}%`;
+        seal.replyToSender(mctx, msg, text);
+        return seal.ext.newCmdExecuteResult(true);
+      }
+    }
+  };
+  // 将命令注册到扩展中
+  ext.cmdMap['catch'] = cmdCatch;
+
+  seal.ext.register(ext);
+}

网络请求

主要使用 Fetch API 进行网络请求,详细文档见链接。fetch 函数返回一个 Promise,传统的写法是这样:

javascript
// 你可以使用 generator 来重写这段代码,欢迎 pr
+// 访问网址
+fetch('https://api-music.imsyy.top/cloudsearch?keywords=稻香').then((resp) => {
+  // 在返回对象的基础上,将文本流作为 json 解析
+  resp.json().then((data) => {
+    // 打印解析出的数据
+    console.log(JSON.stringify(data));
+  });
+});

你也可以使用异步编程(async/await)来简化代码:

javascript
const response = await fetch('https://api-music.imsyy.top/cloudsearch?keywords=稻香');
+if (!response.ok) {
+    // 处理不成功的请求...
+}
+const data = await response.json();
+console.log(JSON.stringify(data));

套用这个模板,你可以写出很多调用 API 的简单扩展。

比如核心代码只有一行的「随机猫猫图片」扩展:

javascript
seal.replyToSender(ctx, msg, `[CQ:image,file=https://thiscatdoesnotexist.com/,cache=0]`);

核心代码同样只有一行的「随机二次元图片」扩展:

javascript
seal.replyToSender(ctx, msg, `[CQ:image,file=https://api.oick.cn/random/api.php?type=${val},cache=0]`);

当然,也有稍微复杂的,比如「AI 骰娘」扩展,但也没有太复杂,只是处理了一下发送者传过来的消息,再发送给网络 API,收到响应之后再回应发送者。

它的核心代码如下:

javascript
const BID = ''; // 填入你的骰娘的大脑的 id
+const KEY = ''; // 填入你的 key
+/**
+ * 给 AI 主脑发送消息并接收回复
+ * @param ctx 主要是和当前环境以及用户相关的内容,如当前发指令用户,当前群组信息等
+ * @param msg 为原生态的指令内容,如指令文本,发送平台,发送时间等
+ * @param message 要发送给骰娘的具体消息
+ */
+function chatWithBot(ctx,msg,message) {
+  fetch(`http://api.brainshop.ai/get?bid=${BID}&key=${KEY}&uid=${msg.sender.userId}&msg=${message}`).then(response => {
+    if (!response.ok) {
+      seal.replyToSender(ctx, msg, `抱歉,我连接不上主脑了。它传递过来的信息是:${response.status}`);
+      return seal.ext.newCmdExecuteResult(false);
+    } else {
+      response.json().then(data => {
+        seal.replyToSender(ctx, msg, data["cnt"]);
+        return seal.ext.newCmdExecuteResult(true);
+      });
+      return seal.ext.newCmdExecuteResult(true);
+    }
+  });
+}

自定义 COC 规则

javascript
// ==UserScript==
+// @name         示例:自定义 COC 规则
+// @author       木落
+// @version      1.0.0
+// @description  自设规则,出 1 大成功,出 100 大失败。困难极难等保持原样
+// @timestamp    1671886435
+// 2022-12-24
+// @license      Apache-2
+// @homepageURL  https://github.com/sealdice/javascript
+// ==/UserScript==
+
+const rule = seal.coc.newRule();
+rule.index = 20; // 自定义序号必须大于等于 20,代表可用.setcoc 20 切换
+rule.key = '测试'; // 代表可用 .setcoc 测试 切换
+rule.name = '自设规则'; // 已切换至规则文本 name: desc
+rule.desc = '出 1 大成功\n出 100 大失败';
+// d100 为出目,checkValue 为技能点数
+rule.check = (ctx, d100, checkValue) => {
+  let successRank = 0;
+  const criticalSuccessValue = 1;
+  const fumbleValue = 100;
+  if (d100 <= checkValue) {
+    successRank = 1;
+  } else {
+    successRank = -1;
+  }
+  // 成功判定
+  if (successRank == 1) {
+    // 区分大成功、困难成功、极难成功等
+    if (d100 <= checkValue / 2) {
+      //suffix = "成功(困难)"
+      successRank = 2;
+    }
+    if (d100 <= checkValue / 5) {
+      //suffix = "成功(极难)"
+      successRank = 3;
+    }
+    if (d100 <= criticalSuccessValue) {
+      //suffix = "大成功!"
+      successRank = 4;
+    }
+  } else {
+    if (d100 >= fumbleValue) {
+      //suffix = "大失败!"
+      successRank = -2;
+    }
+  }
+  let ret = seal.coc.newRuleCheckResult();
+  ret.successRank = successRank;
+  ret.criticalSuccessValue = criticalSuccessValue;
+  return ret;
+};
+// 注册规则
+seal.coc.registerRule(rule);

补充:使用非指令关键词

你是否因为自定义回复能实现的功能有限而烦恼?你是否因为自定义回复的匹配方式不全而愤怒?你是否因为自定义回复只能调用图片 API 而感到焦头烂额?

不要紧张,我的朋友,试试非指令关键词,这会非常有用。

通常情况下,我们使用 ext.onNotCommandReceived 作为非指令关键词的标志;这限定了只有在未收到命令且未达成自定义回复时,海豹才会触发此流程。

一个完整的非指令关键词模板如下:

javascript
// 必要流程,注册扩展,注意即使是非指令关键词也是依附于扩展的
+if (!seal.ext.find('xxx')){
+  const ext = seal.ext.new('xxx','xxx','x.x.x');
+  seal.ext.register(ext);
+  // 这里其实是编写处理函数
+  ext.onNotCommandReceived = (ctx, msg) => {
+    let message = msg.message;
+    // 这里请自己处理要如何达成 message 的匹配条件,js 那么多的匹配方法,足够你玩出花来。
+    if(xxx){
+      // 匹配到关键词了,要干什么?
+      xxx;
+    }
+  }
+}

注册插件配置项 v1.4.1

插件若要在 UI 中注册可供用户修改的配置项,需要在插件注册后调用 seal.ext.registerXXXConfig() 函数注册配置项。

XXX 为配置项的类型,目前支持 stringintfloatbooltemplateoption 六种类型。注意按照小驼峰命名法大写

同样的,插件也可以使用 seal.ext.getXXXConfig() 函数获取配置项的值。

你也可以直接使用 seal.ext.getConfig() 函数获取配置项的值,这个函数会返回一个 ConfigItem 对象, 包含了配置项的类型、值、默认值等信息。

ConfigItem 对象的类型定义如下,调用时请使用 jsbind 中的值作为 key

go
type ConfigItem struct {
+    Key          string      `json:"key" jsbind:"key"`
+    Type         string      `json:"type" jsbind:"type"`
+    DefaultValue interface{} `json:"defaultValue" jsbind:"defaultValue"`
+    Value        interface{} `json:"value,omitempty" jsbind:"value"`
+    Option       interface{} `json:"option,omitempty" jsbind:"option"`
+    Deprecated   bool        `json:"deprecated,omitempty" jsbind:"deprecated"`
+}

提示:更原始的 API

seal.ext.registerConfig() 函数也是可以使用的,你需要自己通过 seal.ext.newConfigItem() 来获取一个新的 ConfigItem 对象。

在对你的 ConfigItem 对象进行修改后,再调用 seal.ext.registerConfig() 函数进行注册。

示例代码:注册配置项

js
// ==UserScript==
+// @name         js-config-example
+// @author       Szzrain
+// @version      1.0.0
+// @description  演示 js 配置项的用法
+// @timestamp    1698636875
+// @license      MIT
+// ==/UserScript==
+
+if (!seal.ext.find('js-config-example')) {
+  const ext = seal.ext.new('js-config-example', 'SzzRain', '1.0.0');
+  // 创建一个命令
+  const cmdgetConfig = seal.ext.newCmdItemInfo();
+  cmdgetConfig.name = 'getconfig';
+  cmdgetConfig.help = '使用.getconfig <key> 来获取配置项,仅 master 可用';
+  cmdgetConfig.allowDelegate = true;
+  cmdgetConfig.solve = (ctx, msg, cmdArgs) => {
+    let val = cmdArgs.getArgN(1);
+    switch (val) {
+      case 'help': {
+        const ret = seal.ext.newCmdExecuteResult(true);
+        ret.showHelp = true;
+        return ret;
+      }
+      default: {
+        if (ctx.privilegeLevel !== 100) {
+          seal.replyToSender(ctx, msg, "你没有权限执行此命令");
+          return seal.ext.newCmdExecuteResult(true);
+        }
+        switch (val) {
+          case "1":
+            strVal = seal.ext.getStringConfig(ext, "testkey1");
+            seal.replyToSender(ctx, msg, strVal);
+            break;
+          case "2":
+            intVal = seal.ext.getIntConfig(ext, "testkey2");
+            seal.replyToSender(ctx, msg, intVal);
+            break;
+          case "3":
+            floatVal = seal.ext.getFloatConfig(ext, "testkey3");
+            seal.replyToSender(ctx, msg, floatVal);
+            break;
+          case "4":
+            boolVal = seal.ext.getBoolConfig(ext, "testkey4");
+            seal.replyToSender(ctx, msg, boolVal);
+            break;
+          case "5":
+            tmplVal = seal.ext.getTemplateConfig(ext, "testkey5");
+            seal.replyToSender(ctx, msg, tmplVal);
+            break;
+          case "6":
+            optVal = seal.ext.getOptionConfig(ext, "testkey6");
+            seal.replyToSender(ctx, msg, optVal);
+            break;
+          default:
+            let config = seal.ext.getConfig(ext, val);
+            if (config) {
+              seal.replyToSender(ctx, msg, config.value);
+            } else {
+              seal.replyToSender(ctx, msg, "配置项不存在");
+            }
+            break;
+        }
+        return seal.ext.newCmdExecuteResult(true);
+      }
+    }
+  }
+  // 注册命令
+  ext.cmdMap['getconfig'] = cmdgetConfig;
+
+  // 注册扩展
+  seal.ext.register(ext);
+
+  // 注册配置项需在 ext 注册后进行
+  // 通常来说,register 函数的参数为 ext, key, defaultValue
+  seal.ext.registerStringConfig(ext, "testkey1", "testvalue");
+  seal.ext.registerIntConfig(ext, "testkey2", 123);
+  seal.ext.registerFloatConfig(ext, "testkey3", 123.456);
+  seal.ext.registerBoolConfig(ext, "testkey4", true);
+  seal.ext.registerTemplateConfig(ext, "testkey5", ["1", "2", "3", "4"]);
+  // 注册单选项函数的参数为 ext, key, defaultValue, options
+  seal.ext.registerOptionConfig(ext, "testkey6", "1", ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]);
+}

注册后的配置项会在 UI 中显示,可以在 UI 中修改配置项的值

JS 配置项

注册定时任务 v1.4.6

提示:Cron 表达式

如果你对 cron 或下文中提到的 Cron 表达式并不熟悉,可以参考 Linux crontab 命令 | 菜鸟教程Cron 表达式 - 阿里云文档

v1.4.6 版本开始,海豹核心新增了用于定时任务的 API。

API 参数

javascript
seal.ext.registerTask(ext, taskType, value, func, key="", description="")

其各个参数的含义如下:

  • taskType: stringregisterTask 接受两种类型的定时任务表达式——使用 Cron 表达式或使用 hh:mm/h:mm 格式的「每日」任务。当使用前者时,taskType 应填入 "cron",而后者应填入 "daily"

  • value: string

    • taskType 填入 "cron" 时,value 应填入有效的 Cron 表达式,例如:"*/5 * * * *"registerTask 会根据 Cron 表达式定时执行 func
    • taskType 填入 "daily" 时,value 应填入 hh:mmh:mm 格式的时间,例如:"08:00""3:00""20:35"registerTask 会根据时间,每天定时执行 func
  • func: (taskCtx: JsScriptTaskCtx) => void:定时任务的实际执行函数。其中 taskCtx 的数据类型为:

    typescript
    type JsScriptTaskCtx {
    +  now: number;
    +  key: string;
    +}

    taskCtx.now 提供了 func 实际被唤起时的 Unix 时间戳;如果填写了可选参数 keytaskCtx.key 则与之相同。

    使用定时任务 API 的用户应该将实际业务逻辑放置在 func 内,定时任务 API 仅承担唤醒功能。

  • key: string:可选参数。为此定时任务提供唯一索引。当填写了 key 时,此定时任务也会出现在 WebUI 的插件配置项中,可以通过 WebUI 修改定时任务表达式。

  • description: string:可选参数。为此定时任务提供可读性更高的描述。当同时填写了 keydescription 时,WebUI 的插件配置项中将会显示关于此定时任务的描述。

使用示例

javascript
// 实现任意定时功能
+seal.ext.registerTask(ext, "cron", "* * * * *", (taskCtx) => {
+  // 检查当前时间点附近,尚未执行的所有任务
+  const tasks = getTasks(taskCtx.now, ext.StorageGet("tasks"));
+  for (const task of tasks) {
+    // 检查当前群聊中,插件功能是否开启
+    if (!checkGroupStatus(task.groupId, ext.storageGet("status"))) {
+      continue;
+    }
+    doTask(task);
+  }
+});
javascript
// 类似每日新闻
+seal.ext.registerTask(ext, "daily", "08:30", (taskCtx) => {
+  // 所有需要发送每日新闻的群聊
+  const groups = getGroups(ext.StorageGet("groups"));
+  for (const group of groups) {
+    sendDailyNews(group);
+  }
+}, "daily_news", "每天触发「每日新闻」的时间");
+ + + + \ No newline at end of file diff --git a/advanced/js_gamesystem.html b/advanced/js_gamesystem.html new file mode 100644 index 000000000..8416a066e --- /dev/null +++ b/advanced/js_gamesystem.html @@ -0,0 +1,52 @@ + + + + + + 编写新的 TRPG 规则 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Skip to content

编写新的 TRPG 规则

本节内容

本节将介绍如何为你的海豹核心编写和添加一个新的 TRPG 规则。包括编写规则模板和编写指令。

本文中将涉及使用 JavaScript 与 TypeScript 编写插件的内容。如果你尚未阅读 常见用法示例,请先阅读它。

在本节中,假设我们创建了一个叫做《摸鱼大赛》的 TRPG 规则,简称为 fish 规则。

补充:规则详细内容

角色属性

每个角色有 2 个关键属性,即脸皮厚度摸鱼技能等级。取值分别为 1 - 3,通过投掷 D3 来生成。

此外有生命值,生命值上限 = 脸皮厚度 * 2。

游戏规则

简单说:这是一个类 21 点游戏。

玩家的目标是尽可能使得自己的积分接近 21,但不能大于等于 22(因为摸到 22 就不存在了!)。

开始游戏时,每个玩家创建一个角色,可以互换交换一次属性点位置。

每一轮游戏中,每个玩家都要决定“摸鱼”和“不摸鱼”。如果选择摸鱼,获得 d6 + d(摸鱼等级) 的积分;如果选择不摸鱼,则跳过本回合。

如果选择摸鱼后累计积分超过 22,玩家自动消耗 1 点生命值、随机弃牌 1 张。如果累计积分仍大于 22,那么重复以上过程直到积分小于 22 或生命值归零。

如果生命值归零,此玩家就无法再摸鱼了。

当连续两轮所有玩家都选择不摸鱼时,游戏结束。积分最大的人取胜,如果积分相同,生命值更大的人取胜。

规则模板是什么?有什么功能?

规则模板是海豹核心中几种功能的整合发展,包括角色卡、属性同义词、自动修改群名片等。

具体地说,规则模板能为 fish 规则提供以下功能:

  1. set 指令 中注册这个游戏系统,可以直接使用 set fish 打开扩展并设定默认骰子为 D6;

  2. st 指令中添加 fish 规则的角色卡,这包括:(对于以下内容,可以参考海豹核心内置的 CoC 7th 系统与 D&D 5e 系统角色卡的功能)

    1. fish 规则自己的技能默认值
    2. fish 规则的二级属性计算公式
    3. fish 规则的属性同义词
    4. fish 规则的角色卡属性展示顺序
  3. sn 指令 中添加 fish 规则的自动群名片格式,可以使用 sn fish 来开启。

那么,要怎么做?

你需要根据规则编写规则模板,并把规则中的动作编写成指令。

对于 fish 规则来说,指令应该实现以下动作:

  1. 制卡:投掷 2 个 D3,生成角色的属性点;
  2. 摸鱼:投掷 D6 + D(摸鱼等级),计算总积分,按规则扣除生命值;
  3. 不摸鱼:跳过此轮;

另外,对于一个合适的指令,它也应提供帮助文本。

以上的规则模板和指令都可以在同一个 TypeScript 或 JavaScript 插件文件中完成。我们已经写了一个比较完善且有详细注释的示例,以供参考:

摸鱼大赛 TRPG 规则.ts

如果你希望直接尝试以上插件的效果,可以从以下链接获取经过编译的 JavaScript 文件:

摸鱼大赛 TRPG 规则.js

+ + + + \ No newline at end of file diff --git a/advanced/js_project.html b/advanced/js_project.html new file mode 100644 index 000000000..a325a8f4d --- /dev/null +++ b/advanced/js_project.html @@ -0,0 +1,59 @@ + + + + + + 插件的工程化编写 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Skip to content

插件的工程化编写

本节内容

本节将介绍如何使用 Node.js 项目编译出海豹可使用的插件,面向有前端经验的开发者。

我们假定你了解如何使用前端工具链,你应当具备诸如命令行、Node.js、npm/pnpm 等工具的使用知识。如果你对这些内容感到陌生,请自行了解或转至 使用单 JS 文件编写,手册不会介绍这些相关背景知识。

如果你打算使用 TypeScript,或者需要编写大型插件,希望更加工程化以方便维护,可以创建项目使用前端工具链来编译出插件。

海豹提供了相应的 模板项目。注册扩展和指令的代码已经写好,可以直接编译出一个可直接装载的 JS 扩展文件。

Clone 或下载模板项目

推荐的流程:

  1. 模板项目仓库 点击 Use this template 按钮,使用该模板在自己的 GitHub 上创建一个扩展的仓库,并设置为自己的扩展的名字;
  2. git clone 到本地,进行开发。

如果不打算使用 GitHub 托管仓库,希望先在本地编写:

  1. 模板项目仓库 点击 Code 按钮,在出现的浮窗中选择 Download ZIP,这样就会下载一个压缩包;
  2. 解压后进行开发。

补全信息

当插件开发完成后(或者开始开发时),你还需要修改几处地方:

  • header.txt:这个文件是你插件的描述信息;
  • tools/build-config.js:最开头一行 var filename = 'sealdce-js-ext.js'; 改成你中意的名字,注意不要与现有的重名。这决定了编译时输出的插件文件名。
  • (可选)package.json:修改其中 name version description 等项目描述信息,不过不修改也不会影响编译。

使用和编译

在确认你所使用的包管理器后,在命令行使用如下命令安装依赖:

bash
npm install

当你写好了代码,需要工程编译为插件的单 js 文件以便上传到海豹骰时,在命令行使用如下命令:

bash
npm run build

编译成功的 js 文件在 dist 目录下,默认的名字是 sealdce-js-ext.js

目录结构

只列出其中主要的一些文件

  • src
    • index.ts:你的扩展的代码就写在这个文件里。
  • tools
    • build-config.js:一些编译的配置,影响 index.ts 编译成 js 文件的方式;
    • build.js:在命令 npm run build 执行时所运行的脚本,用于读取 build-config 并按照配置进行编译。
  • types
    • seal.d.ts:类型文件,海豹核心提供的扩展 API。
  • header.txt:扩展头信息,会在编译时自动加到目标文件头部;
  • package.json:命令 npm install 时就在安装这个文件里面所指示的依赖包;
  • tsconfig.json:TypeScript 的配置文件。

其他问题

我能在项目中引用 npm 包吗?

当然可以,像正常的前端项目一样,你可以在其中引用其他 npm 包,比如模板项目中就为你引入了常用的 lodash-es

一般来说纯 JS 编写的包都是可以引用的,一些强 native 相关的包可能存在兼容性问题,你需要自行尝试。

推荐你尽量使用 esm 格式的包,不过 commonjs 格式的包也是可以使用的,如 dayjs。其他格式的支持和更多问题排查,请查阅模板项目所使用的构建工具 esbuild 的文档,tools/build-config.js 中即是 esbuild 的配置项。

我想使用的 API 没有被自动提示,直接使用被提示错误,如何解决?

types/seal.d.ts 文件中维护了海豹提供的 API,但目前来说维护的并不完全。如果你发现有一些存在的 API 未被提示,可以手动在 types/seal.d.ts 补上来解决报错。

有时 seal.d.ts 会有更新,可以去模板项目仓库看看有没有最新的,有的话可以替换到你的项目中。也非常欢迎你向模板仓库提 PR 来帮忙完善。

默认输出的插件代码是压缩过的,如何尽量保持产物的可读性?

调整 tools/build-config.js 中的选项,关闭 minify:

js
module.exports = {
+  ...
+  build: {
+    ...
+    minify: false,
+    ...
+  }
+}
+ + + + \ No newline at end of file diff --git a/advanced/js_start.html b/advanced/js_start.html new file mode 100644 index 000000000..81136daf3 --- /dev/null +++ b/advanced/js_start.html @@ -0,0 +1,84 @@ + + + + + + 前言 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Skip to content

前言

本节内容

本节将介绍 JavaScript 脚本的编写的前置知识,更多内容请看 API 列表常见用法示例,请善用侧边栏和搜索,按需阅读文档。

我们假定你熟悉 JavaScript / TypeScript,编程语言的教学超出了本文档的目的,如果你还不熟悉它们,可以从互联网上寻找到很多优秀的教程。如:

注意:你只需要学习 JavaScript 语言本身,不包括 WebAPI。

快速开始

JavaScriptJS)虽然作为 Web 页面中的脚本语言被人所熟知,但是它也被用到了很多 非浏览器环境 中,例如 Node.jsApache CouchDBAdobe Acrobat 等。

—— 来自 MDN 文档

海豹的 JS 插件就是运行在一个非浏览器环境中—— goja 作为 JS 脚本引擎所提供的环境,该环境目前支持了 ES6 基本上全部的特性,包括 async/awaitpromisegenerator 等异步编程友好的特性。

除了 JS 语言规范所提供的 内置对象,海豹额外在环境中提供了如下全局对象:

  • seal 用于自定义扩展、增加指令、管理黑白名单……几乎所有与海豹本体有关的 API 都挂载在这个内置对象上。
  • console 专门与海豹的日志模块进行交互。
  • setTimeout/setInterval 等与事件循环相关的函数。
  • fetch 用于网络请求。
  • atob/btoa 用于 base64 编解码。

警告

需要注意引擎的整型为 32 位,请小心溢出问题。

现在,让我们从最简单的扩展开始,这个扩展只会在日志中打印一条 Hello World!

新建一个 JS 文件,写入如下内容,然后通过海豹的 WebUI 上传并重载 JS 环境(或是直接复制到海豹 WebUI 的调试控制台中运行)。

javascript
// ==UserScript==
+// @name         示例:如何开始
+// @author       木落
+// @version      1.0.0
+// @description  这是一个演示脚本,并没有任何实际作用。
+// @timestamp    1671368035
+// 2022-12-18
+// @license      Apache-2
+// @homepageURL  https://github.com/sealdice/javascript
+// ==/UserScript==
+
+console.log('Hello World!');

你应当能在控制台中观察到一条 Hello World 的日志。

提示:打印日志

console 打印出来的东西不仅会在控制台中出现,在日志中也会显示。

涉及网络请求或延迟执行的内容,有时候不会在控制台调试面板上显示出来,而在日志中能看到。

插件元数据

每个 JS 扩展需要在开头以固定格式注释的形式留下信息,以便使用和分享,这些信息通常被称为「插件元数据」:

javascript
// ==UserScript==
+// @name         脚本的名字
+// @author       木落
+// @version      1.0.0
+// @description  这是一个演示脚本,并没有任何实际作用。
+// @timestamp    1672066028
+// @license      Apache-2
+// @homepageURL  https://github.com/sealdice/javascript
+// @depends      SzzRain:demo:1.0.0
+// @sealVersion  1.4.5
+// ==/UserScript==
属性含义
@name必填,JS 扩展的名称,会展示在插件列表页面
@author必填,作者名
@version必填,版本号,可以自己定义,但建议遵循 语义版本控制(Semantic Versioning)
@description可选,对扩展的功能的描述
@timestamp可选,最后更新时间,以秒为单位的 unix 时间戳,新版本支持了直接使用时间字符串,如 2023-10-30
@license可选,开源协议,示例中的 Apache-2 是一个比较自由的协议,允许任意使用和分发(包括商用),当然你也可以使用其它协议(MIT GPL 等)
@homepageURL可选,你的扩展的主页链接,有 GitHub 仓库可以填仓库链接,没有则可以填海豹官方插件仓库
@depends v1.4.4可选,从 v1.4.4 加入,指定你的扩展依赖的其他扩展,可以不含此行或含有多行。详见 依赖其他扩展
@sealVersion v1.4.5可选,从 v1.4.5 加入,指定你的扩展的目标海豹版本。详见 目标海豹版本

插件编写

单 JS 文件编写插件

我们更推荐使用 TypeScript 来编写插件,编译到 ES6 后使用即可。不过先从 JavaScript 开始也是没有任何问题的。

编写插件时,可以下载海豹提供的 seal.d.ts 文件,将其保存在和你要编写的 JS 文件同级的目录下。

seal.d.ts 支持了在使用 vscode 等工具编写时,对海豹提供的 API 的代码补全。

海豹 API 代码补全

提示

seal.d.ts 文件随时可能会有更新,如果你需要的 API 没有提示,可以检查一下是否是最新版本。

插件的工程化编写

如果你打算使用 TypeScript,或者需要编写大型插件,希望更加工程化以方便维护,见 插件的工程化编写

插件的工程化编写

插件的工程化编写是 为有一定经验的开发者准备的。相关文档默认你了解如何使用前端工具链,你应当具备诸如命令行、Node.js、npm/pnpm 等工具的使用知识。

如果你对上面的内容感到陌生,请自行了解或放弃使用,手册不会介绍相关内容。

使用单 JS 文件编写插件与使用模板工程编写本质上是没有区别的,并不会出现某些功能无法使用的差异。

扩展依赖

依赖其他扩展 v1.4.4

有些时候,你的扩展依赖于另一个扩展提供的功能,希望在缺失对应扩展时不进行这个插件的加载。

例如,「SzzRain:每日新闻」依赖于「SzzRain:定时任务」,我们希望在骰主仅安装了「SzzRain:每日新闻」时,提示需要安装其依赖的「SzzRain:定时任务」扩展。

v1.4.4 开始,你可以在 插件元数据 中通过 @depends 来指定扩展依赖的其他扩展。

指定依赖的格式

指定依赖的格式为 作者:插件名[:SemVer版本约束,可选],其中 : 是分隔符,注意必须是半角符号。

例如,使用 @depends SzzRain:定时任务,这意味着该插件需要同时安装一个名为 定时任务,作者名为 SzzRain 的插件才可正常工作。

javascript
// ==UserScript==
+// @name         每日新闻
+// @author       SzzRain
+// @version      2.0.0
+// ...
+// @depends      SzzRain:定时任务:>=2.0.0

在上面的示例中,可以看见「SzzRain:每日新闻」通过 @depends 指明了其依赖 SzzRain:定时任务:>=2.0.0

版本限制是可选的,比如上面示例中的 >=2.0.0,这表示 SzzRain:每日新闻 依赖于 SzzRain:定时任务,且后者的版本必须大于等于 2.0.0。这在你需要依赖高版本插件的情况下很有用。

插件名、作者、版本号

指定依赖插件涉及到对应的插件名、作者名和版本号,其为插件元数据中的 @name@author@version

有更复杂的指定依赖版本需求?

除了上面提到的 >=2.0.0 之外,你还可以参阅海豹所使用的 go-semver 库的文档,来进行更复杂的限制。

比如 1.1.4-5.1.4 意味着指定的依赖版本需要在 1.1.45.1.4 之间。

但是,目标依赖的版本号需要符合 SemVer 才能更好的支持你进行版本限制。

依赖多个扩展

依赖可以是多个,每一行指定一个 @depends,这意味着这个插件需要同时满足所有的依赖才能工作。

例如我们给上面的「SzzRain:每日新闻」增加一个新的依赖:

javascript
// ==UserScript==
+// @name         每日新闻
+// @author       SzzRain
+// @version      2.0.0
+// ...
+// @depends      SzzRain:定时任务:>=2.0.0
+// @depends      sealdice:强制依赖

此时,这个插件需要同时安装 SzzRain:定时任务(且版本大于等于 2.0.0)和 sealdice:强制依赖 这两个插件时,才能正常加载。

目标海豹版本 v1.4.5

新版本的海豹有时会增加更多插件可以调用的 API,但会出现使用旧版本海豹的骰主,去尝试加载使用了新 API 的插件而出错的情况。

为了让插件作者无需反复说明,也更好地提示使用插件的骰主,从 v1.4.5 开始,你可以在 插件元数据 中通过 @sealVersion 来指定插件的目标海豹版本。

例如,当插件使用了在 1.4.6 新增的 API,可以指定目标海豹版本 @sealVersion 1.4.6。而当加载该插件的海豹版本为 1.4.5 时,会向骰主提示海豹版本不兼容而拒绝加载。

兼容的海豹版本

插件作者只需要指定目标海豹版本即可,如 1.4.5 新增的 API 则指定 @sealVersion 1.4.5

海豹会尝试在兼容的情况下尽可能地加载插件,这是由海豹核心自动处理的。

一些有帮助的资源

VS Code 可以安装 SealDice Snippets 插件,提供了一些常见代码片段,帮助快速生成模板代码。

其他问题

我不会 JavaScript,海豹支持其他编程语言编写插件吗?

这个问题分为两个部分,如果你所说的其他编程语言为 Python、Lua 等与 JavaScript 无关的编程语言,那么目前是无法使用这些语言编写海豹插件的。如果你有一些其它骰系的插件(比如一些 Lua 插件),你只能通过按原逻辑重写为海豹 JavaScript 插件的方式来在海豹中使用。

但是有些编程语言是可以编译为 JavaScript 的,典型的像 TypeScript、CoffeeScript。这些语言在编写时使用它们自己,最后只要编译成 JavaScript 就可以在海豹中使用了。

+ + + + \ No newline at end of file diff --git a/advanced/script.html b/advanced/script.html new file mode 100644 index 000000000..d443470c4 --- /dev/null +++ b/advanced/script.html @@ -0,0 +1,95 @@ + + + + + + 内置脚本语言 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Skip to content

内置脚本语言

本节内容

本节将介绍海豹内置的脚本语言,请善用侧边栏和搜索,按需阅读文档。

为了在很多地方支持实现一些逻辑,但又不至于直接使用学习门槛较高的正式编程语言,海豹提供了一种简单易学的脚本语言,可以称为「海豹语」「豹语」等。

变量

你可能注意到,在自定义文案等地方,出现了一些以 $t 开头的东西,这些是海豹中的变量

变量的名称可以是汉字、字母和数字,$t 是一个特殊的变量前缀,还有其它的前缀。不同前缀代表不同的作用域:

变量名字用途举例
普通名字玩家的角色属性理智、力量、智力
$t开头个人临时变量,不存数据库$t随机点数
$m开头个人变量,跨群存在$m今日人品
$g开头群变量,群内所有人共享$g群主体重

所有变量均可以在 .rx / .rxh / .ra/ .text 等指令以及「自定义文案」中使用。

注意:$t 是临时变量

$t 开头的临时变量的存活周期仅为单次指令执行,执行完毕后不应当认为该变量值还保留

在下一次指令中使用上一次指令设置的 $t 变量属于未定义行为,可能会出现包括但不限于变量值不变,变量值丢失,变量值被覆盖,变量值变为随机数,变量值变成 114514 等任何情况。如果你需要这样的持久变量,请使用 $m$g 代替。

内置的 $t 变量的值固定并不代表它们是持久变量,其值是在每次指令执行的初始阶段设置的。

提示:变量不生效?

如果一部分变量无效,请检查海豹是否为最新版本。

一些内置变量

变量名内容示例结果
$t玩家当前人物卡的名字,如果不存在则为群昵称或 QQ 昵称。<木落>
$t玩家_RAW同上,但没有<>木落
$tQQ昵称QQ 昵称<木落>
$t账号ID海豹格式的 IDQQ:123456789
$t账号ID_RAW原始格式的 ID123456789
$tQQ海豹格式的 IDQQ:123456789
$t群名群名海豹核心·SealDice 用户群
$t群号海豹格式的 IDQQ-Group:987654321
$t群号_RAW原始格式的 ID987654321
$t个人骰子面数个人骰子面数100
$tDate数字格式的现日期20230109
$tYear数字格式的年份2023
$tMonth数字格式的现月份1
$tDay数字格式的现日期9
$tWeekday数字格式的星期(1-7)1
$tHour数字格式的现时间(小时)15
$tMinute数字格式的现时间(分钟)41
$tSecond数字格式的现时间(秒)55
$tTimestamp数字格式的 10 位时间戳1673250115
$t文本长度触发消息的文本,汉字长度为 3,英文字母和数字长度为 1。6
$t平台触发的平台QQ
$t游戏模式.set coc/dnd 改变coc7
$t消息类型触发位置为群还是私聊(group/private)group
娱乐:今日人品自定义文案<木落> 的今日人品为 0
常量:APPNAME软件名SealDice
常量:VERSION版本号1.4.0
$tMsgID消息 ID,仅自定义回复中可用。-123

所有自定义文案也均为可用变量。

数据类型和赋值

text
// 注意,目前并不支持写注释,此为教程中便于展示
+// 文本类型
+$t0 = '文本'
+$t0 = "也是文本"
+$t0 = `特殊文本类型,可以插入表达式,例如,玩家的力量数值: {力量}`
+$t0 = `另一种插入表达式的写法 {% 力量 %} `
+
+// 数字类型
+$t0 = 1
+
+// 布尔类型:没有专门的布尔类型,0 或空字符串被视为 False,非零和非空字符串为 True
+$t0 > 1
+$t0 >= 1
+$t0 == 1
+$t0 != 1
+$t0 < 1
+$t0 <= 1

注意:务必区分 ===

混淆 === 是小白常犯的错误之一。前者用于赋值而后者用于比较。当你试图在下文所述的条件算符或条件语句中,比较两个值时,需要使用 ==

语句

多个语句可以用 ; 分隔,取分隔后的最后一项的值,为整个表达式的值,例如:

text
$t0 = 1;2;3

此时 $t0 的值为 3。

注意:分号的使用

不要在最后一条语句的后面再使用分号,会变得不幸。

text
// 正确写法
+if 1 {
+    $t0 = 1;
+    $t1 = 2
+}
+
+// 错误写法
+if 1 {
+    $t0 = 1;
+    $t1 = 2;
+}

运算符

数学运算

text
加减乘除余 + - * / %
+乘方 ^ ** // 2 ** 3 或 2 ^ 3,即 2 的 3 次方

逻辑运算

text
&& 逻辑与
+|| 逻辑或
+!  逻辑非

骰子算符

d 常规骰子算符,用法举例 d20 2d20k1 d20 优势

f 命运骰,随机骰 4 次,每骰结果可能是 -1 0 1,记为 - 0 +。

b 奖励骰 (CoC)。

p 惩罚骰 (CoC)。

c 双十字。

条件算符

条件算符 ?

text
灵视 >= 40 ? '如果灵视达到40以上,你就能看到这句话'

可以用这个指令测试,下同:

text
.st 灵视 41
+.text {灵视 >= 40 ? '如果灵视达到 40 以上,你就能看到这句话'}

多重条件算符 ? ,

text
灵视 >= 80 ? '看得很清楚吗?',
+灵视 >= 50 ? '不错,再靠近一点……',
+灵视 >= 30 ? '仔细听……',
+灵视 >= 0 ? '呵,无知之人。'

应用举例,默认的 jrrp

text
{$t玩家} 今日人品为{$t人品},{%
+    $t人品 > 95 ? '人品爆表!',
+    $t人品 > 80 ? '运气还不错!',
+    $t人品 > 50 ? '人品还行吧',
+    $t人品 > 10 ? '今天不太行',
+    1 ? '流年不利啊!'
+%}

三目运算符 ? :

text
灵视 >= 40 ? '如果灵视达到 40 以上,你就能看到这句话' : '无知亦是幸运'

条件语句

text
if $t0 > 10 {
+    $t1 = "aaa"
+} else {
+    $t1 = 'bbb'
+}

提示:出现格式化错误

如果上面的代码输出「格式化错误」,那是因为你的 $t0 不是数值。字符串当然不能和数值比较大小,所以会报错。

解决方法:.text {$t0=0}

实际测试:

text
.text {% if $t0 > 10 { $t1="aaa"} else { $t1 = 'bbb' }; $t1 %}
+ + + + \ No newline at end of file diff --git a/archive/README.html b/archive/README.html new file mode 100644 index 000000000..9608b7360 --- /dev/null +++ b/archive/README.html @@ -0,0 +1,52 @@ + + + + + + 归档内容 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Skip to content

归档内容

本节内容

此处为海豹不再进行维护的文档索引,旧文档保留在此处。

+ + + + \ No newline at end of file diff --git a/archive/archive-about-opensource.html b/archive/archive-about-opensource.html new file mode 100644 index 000000000..005c8701c --- /dev/null +++ b/archive/archive-about-opensource.html @@ -0,0 +1,52 @@ + + + + + + 开源程序相关 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Skip to content

开源程序相关

本节内容

本节将针对先前未曾接触过计算机以及服务器,或者对计算机或服务器知之甚少的用户进行更易懂的科普,方便用户在提问的过程中表述得简单直接,减少因沟通产生的不必要的麻烦。

写在前面:为什么这个页面会诞生

如前篇「计算机相关科普」所说,用户群出现了预料之中但情理之外的问题。 如果说前篇的科普是知识层面的科普较多。那么,本篇的科普希望大家能知道如何方便自己也方便他人地提问、如何更快更便捷地自行排查问题等人文层面的科普。 当然,我们没有资格教屏幕前的你如何做人,这篇科普也一样,只是给你一个或许更好的建议,是否跟着这么做,取决于你。

什么是开源,什么是开源程序?

开源,即 Open Source,简言之,就是把程序的源代码放在公共平台(如 GitHub 等),任何人都可以在开源许可协议允许的范围内下载、修改以及使用这份源代码。

开源程序,顾名思义就是开放了源代码在公共平台的程序。SealDice 就作为一个开源程序活动在大家的视线中。

为什么我在 SealDice 用户群问问题会被要求发送截图?为什么不能拍屏?

所有 SealDice 用户群的群员、管理、甚至是开发者,都不具备未卜先知的能力,要求你发送截图也只是为了更好地了解你的问题究竟出在哪里。知道问题出在哪里之后,排查问题或复现 bug 就会更简单。这不仅方便了群员和管理回答你的问题,也有助于你更快地解决问题。

不提倡拍屏而是提倡截图的原因是,拍摄屏幕时会出现各种各样的问题:因拍摄角度而看不到部分信息、屏幕因反射光线而不能让摄像头拍到真正的图片(俗称反光),而截图能避免这些问题,给解决带来更高的效率。

注意:请做好截图保护!

如果需要发送截图,请在没有必须要展示的情况下隐藏好截图内可能存在的敏感信息,比如:IP 地址、端口号、文件夹内布局、密码/auth/key/salt 等。

最好的方式是通过在图片上加马赛克进行遮挡(俗称打码),不建议进行剪裁,除非敏感信息的范围过大。

提问的智慧到底该怎么实现?

群内「提问的智慧」文件已经说得足够清楚,但考虑到在看这个界面的你可能会对一些部分有所疑惑,所以,让我们用更易懂的方式解释它所想宣传的思想。

遇到问题先查询资料,尝试自己思考问题所在,排除问题

很多时候,SealDice 用户群里都在问几乎一样的问题,但是,这些问题的解决方法在很多地方写有,例如这个手册群公告群精华消息、乃至群内作为帮助骰的 @Dt.Dice Twenty 的自定义回复的触发词里也有许多你可能关心的问题在内。如果不知道方法的你通过这些途径知道了如何解决这个问题,并且自己解决了问题,一定会比在群里问群员快。如果真的按照了方法去做,仍然没有办法解决问题,这时再来询问,效率会更高。

自行排查问题的参考步骤

对于屏幕前或许没有编程经验的你,可以通过平日里学的「五要素」法则来思考遇到的程序错误问题。下面是一个可行的思考过程。

  • Where
    • 我是在哪里做了一些事情让我的骰子出现问题了?是在服务器还是在我自己的电脑上?
  • When
    • 我在什么时候做了这些事情让骰子出现问题了?
  • What
    • 我做了什么让我的骰子出现了问题?
  • Why
    • 为什么我这么做会让骰子出现问题?
  • How
    • 我怎么做才能去修复这个问题?

通过这样的思考过程,你即使猜测不出问题所在,也可以很好地通过复述这五个要素的思考过程向 SealDice 用户群的群员或管理员提问,让他们清晰地知道你的操作流程,更快地找到问题所在,为你解决问题。

问问题要有前因后果,相对客观地陈述问题会比只表示主观情绪有用

时常,在 SealDice 用户群中会看到以下这样的问题

  • 「呜呜我的骰子怎么不能用了」
  • 「很急!我的骰子怎么突然不回复了急急急!」
  • ……

我们非常能理解你以及问出这些问题的用户的心情,群员和管理也很希望能帮你解决问题,但是,无法通过第一眼就看到问题的来龙去脉,只会减慢排查问题和解决问题的速度,这不只是影响到群员、管理,更多的,其实是在耽误你个人的时间。

问题既然已经发生了,与其在用户群里发出主观情绪并且焦急地等待回答,不如先试试看自己解决(如上一条所说),实在是无法自己解决,就把这些问题完整地说出来,包括:你猜测的、问题发生的可能原因你所尝试但是无法解决的措施,以及你使用的程序版本号,还有出现问题的完整截图发到用户群,或者带着这些去问其他有经验者,这样能比上面那些不能一眼看出问题的语句能让群员、管理更快速地知道问题所在,并且协助你排查问题、解决问题。

如果实在没有思路该如何说,下面是一个可以作为参考的问问题的方式,可以自行进行替换。

一个便于理解的提问

我在使用 x.y.z 版本的海豹骰中,发现我的海豹骰的数据库文件的磁盘占用出现了无法通过重启解决的故障,它变得非常大,大概有 300 MB 这样的大小。但是我的骰子并没有如此大的数据量,它只是一个私骰。

我试过对我的海豹骰进行重启,还有撤去一些自定义回复文件以及 JSON 牌堆文件,但是基本对数据库文件夹的异常磁盘占用问题没有效果。

我现在使用的是 Lagrange 分离部署,使用正向 WS 进行部署。

初步排查,我怀疑是海豹的数据库文件 data.db 出现了异常的问题,有知道这个解决办法的管理/群友来帮我看看吗?截图都在下面了

[相关截图]

保持耐心,对回答问题者表现出友善和配合的态度

群员、管理和开发者们都有自己的生活,SealDice 也只是兴趣的一部分。所以,在你的问题看起来没有获得回答的时候,保持耐心。当有群员或管理进一步地询问相关问题,也希望你能友善且相对客观地叙述问题,而不是对他们发泄自己的主观情绪,同时,配合他们进行操作,这样,问题才能更快速地解决。

如果有需要,可以去 GitHub 代码仓库上提交 issue

如果你想要问的问题是新的、程序上的需求(例如希望加入一个新的接口),或者你的问题明确了是一个 bug,你希望 SealDice 开发组尽快满足这个需求或修复这个 bug,你可以通过在 GitHub 的 sealdice/sealdice-core 仓库中提交一个 issue,开发组的开发者们会通过讨论进行回复,并且,如果确定需要通过你的反馈对程序进行改动,也会更方便开发者们归档问题和修改程序。

以上就是提问的智慧中我们总结出的,要在 SealDice 用户社区里更快地解决问题应该怎么做的办法。希望通过这样的办法,能让你更有效率地解决在部署 SealDice 的过程中遇到的问题。

什么是 GitHub?怎么提 issue?

GitHub 是多数开源程序发布代码的地方,SealDice 开发者们平时也通过 GitHub 查看用户的需求和 bug 反馈,同时对程序进行修改,并且在 GitHub 上同步发布更新。

所以,我们希望你如果真的非常需要加入功能、或者反馈 bug,可以自己试试看除了在 SealDice 用户群中向管理说明以外,额外地再提交一份 issue 到海豹的 GitHub 的代码仓库中,这会让开发者们可能记住这个问题,同时在程序中修复它。

对于如何提 issue、怎么样提 issue 不会被关闭,以及如何在 GitHub 上下载文件之类的问题,百度应该是你更好的选择。

希望你通过这两篇科普,能更清晰地知道如何提问 SealDice 相关的问题会更有效率。

+ + + + \ No newline at end of file diff --git a/archive/archive-guide.html b/archive/archive-guide.html new file mode 100644 index 000000000..7b0bccef9 --- /dev/null +++ b/archive/archive-guide.html @@ -0,0 +1,52 @@ + + + + + + 计算机基础知识 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Skip to content

计算机基础知识

计算机小白常见问题

本节内容

本节旨在帮助先前未曾接触过计算机以及服务器,或者对计算机及服务器知之甚少的用户快速查询一些常见问题以及对应的答案。本节不能代替权威解释或各项目的官方文档。

关于如何正确地提问,请看 如何正确提问;关于如何快速学习相关背景知识,请看 如何高效学习;关于特定的名词术语解释,请看 名词/术语速查表

部署海豹核心为什么要解压压缩包?怎么样解压压缩包?

如果直接在解压缩应用(如 7zipWinRar 等)中双击运行压缩包内的 sealdice-core.exe 文件,意味着只有 sealdice-core.exe 这一个文件被解压出来了,而其他文件仍然在压缩包之中。海豹核心检测不到其他必要的文件,那么,就无法正常运行。因此,需要把压缩包解压之后再双击运行海豹核心。

解压压缩包需要解压缩的应用,上面已经陈述了一些应用,使用百度搜索一下,下载安装就可以了。

一般而言,用鼠标右击压缩包,再用鼠标左键单击弹出菜单中带有解压到字样的选项就能解压这个压缩包。

一个建议

解压缩软件时常不会自动帮你创建文件夹,你可能需要自己新建文件夹。这个操作非常简单。

在希望解压的文件夹下单击鼠标右键,在弹出的菜单中找到新建文件夹这个选项,左键单击它,然后输入你想要的文件夹名字,再按下键盘上的Enter,就新建了一个文件夹。

而如果你想要指定这个压缩包解压到指定的文件夹,你可以右键单击压缩包后选择解压到…,在弹出的界面上找到你希望压缩包解压到那里的文件夹,之后双击那个文件夹,最后点击确定,压缩包便解压到了你指定的文件夹。

内存不足到底指的是哪里的内存不足?如何解决内存不足?

对于内存不足的情况,需要具体问题具体分析

对于海豹核心的日志界面中「There is not enough space on the disk」的报错

翻译一下这里的报错:「在磁盘中没有足够的空间」。

很显然,这里的内存不足代指的是磁盘可存储的空间不足,这时候通常通过删除磁盘内部分不需要的文件,腾出空间就可以解决。

如果出现莫名其妙的程序中断……

如果你在资源有限的小型计算机/服务器上部署海豹,并且你的海豹是公骰(存在大量用户)或加载了大量牌堆、自定义回复和/或插件,那么有可能出现海豹核心突然中断运行的情况。如果通过日志,排除了程序内部错误的可能性,那就有可能是由内存不足引起的。此处,内存指代的是「运行内存」。

可以在海豹运行时,通过 WebUI「日志」导航栏顶部的内存占用、Windows 平台下的任务管理器、Linux 平台下的 htop 等工具对海豹核心的内存使用量和占用比例进行监测,如果确实存在占用过高的情况,可以考虑减少用户群体、移除不常用的自定义回复/牌堆/插件、关闭其他未在使用的进程或更换资源更为充足的平台来解决问题。

注意:不要随意关闭你不认识的进程

只有在你完全确定某进程的用途与功能时,才能尝试关闭此进程。失误中断系统进程可能导致系统崩溃或其他隐患。

什么是开源,什么是开源程序?

开源,即 Open Source,简言之,就是把程序的源代码放在公共平台(如 GitHub 等)并附加开源许可协议的行为,任何人都可以在开源许可协议允许的范围内下载、修改以及使用这份源代码。

开源程序,顾名思义就是开放了源代码在公共平台的程序。SealDice 就作为一个开源程序活动在大家的视线中。

为什么我在 SealDice 用户群问问题会被要求发送截图?为什么不能拍屏?

所有 SealDice 用户群的群员、管理、甚至是开发者,都不具备未卜先知的能力,要求你发送截图也只是为了更好地了解你的问题究竟出在哪里。知道问题出在哪里之后,排查问题或复现 bug 就会更简单。这不仅方便了群员和管理回答你的问题,也有助于你更快地解决问题。

不提倡拍屏而是提倡截图的原因是,拍摄屏幕时会出现各种各样的问题:因拍摄角度而看不到部分信息、屏幕因反射光线而不能让摄像头拍到真正的图片(俗称反光),而截图能避免这些问题,给解决带来更高的效率。

注意:请做好截图保护!

如果需要发送截图,请在没有必须要展示的情况下隐藏好截图内可能存在的敏感信息,比如:IP 地址、端口号、文件夹内布局、密码/auth/key/salt 等。

最好的方式是通过在图片上加马赛克进行遮挡(俗称打码),不建议进行剪裁,除非敏感信息的范围过大。

什么是 GitHub?怎么提 issue?

GitHub 是多数开源程序发布代码的地方,SealDice 开发者们平时也通过 GitHub 查看用户的需求和 bug 反馈,同时对程序进行修改,并且在 GitHub 上同步发布更新。

所以,我们希望你如果真的非常需要加入功能、或者反馈 bug,可以自己试试看除了在 SealDice 用户群中向管理说明以外,额外地再提交一份 issue 到海豹的 GitHub 的代码仓库中,这会让开发者们可能记住这个问题,同时在程序中修复它。

对于如何提 issue、怎么样提 issue 不会被关闭,以及如何在 GitHub 上下载文件之类的问题,百度应该是你更好的选择。

如何高效学习

注意:海豹手册已于 2024 年 8 月 7 日停止维护以下内容,以下内容归档于 2024 年 8 月 7 日。

归档原因:海豹开发组认为,这样的页面与 SealDice 完全没有关系。教授如何高效学习亦不是海豹手册应该去做的事。

本节内容

本节为计算机小白指南中的第二部分。

本节旨在帮助先前未曾接触过计算机以及服务器,或者对计算机及服务器知之甚少的用户在遇到不理解的教程、名词或操作时,能够高效学习上手相关知识。

关于如何正确地提问,请看 如何正确提问;关于一些小白常见的问题,请看 计算机小白常见问题;关于特定的名词术语解释,请看 名词/术语速查表

前言

如果你从未接触过计算机以及服务器,那么不免会对本手册中的大量概念感到陌生。一些看起来详尽的指导细细读来却可能完全看不懂。我们不希望你就此放弃,以至于错失了一个全新的、有趣的世界;我们也不希望你放弃自己思考的权利,将一切不明了的问题诉诸他人的帮助。因此,我们撰写了本篇文档,希望能够帮助你掌握一些快速学习新知识的小技巧。

掌握语言

无论是帮助文档、程序日志还是网络资源,英语目前是,并且在未来很长一段时间里仍将是,主流的语言。因此,提高你的英文水平,不仅可以帮助你看懂程序日志上的故障原因(这样你就能自己解决问题),还可以让你看到更高效地获取那些有用的信息(比如下文里写到的那些)。

因此,如果你仍在上学,英语学习得再努力一点,终将有所回报。如果你不得不在短时间内理解特定的英文内容,那常备翻译器显然是一个好选择。

寻求资源

当遇到不理解的概念时,我们的第一反应往往是去搜索引擎寻求答案。但是,如果你正在解决特定项目中遇到的问题,不妨先看看此项目的帮助文档、常见问题(FAQ)和 GitHub 上的 Issue

一个合理的开源项目,往往都具备相对详尽的帮助文档,描述了使用这个项目的过程中可能涉及的方方面面。例如,你正在阅读的就是海豹骰点核心的用户手册,亦即帮助文档。帮助文档通常包含了各个项目从部署到使用的一系列教程,在你具备相关背景的情况下,阅读帮助文档远比直接使用搜素引擎高效得多,因为帮助文档中提供的信息都是服务于特定项目的,而搜索引擎往往只能找到泛化的知识。

常见问题也是众多开源项目都拥有的页面,例如本手册中的 计算机小白常见问题常见问题 两个页面。这些页面中,通常包含使用此项目的用户高频提出的问题,而你遇到的情况,很有可能在其中就有所描述。因此,如果在手册的一般教程中没能找到答案,访问常见问题页面或许可以解决你的问题。

如果你不知道 Issue 是什么,可以点击本部分第一段中的超链接查看。Issue 通常包含了此开源项目的用户所遇到的问题、发现的可能的 Bug 和提出的功能请求。Issue 页面就像一个讨论区,你很可能找到一些使用上的问题,大多数情况下都会有热心的网友在页面下方给出他们的解决方案。如果你发现你的问题在 Issue 列表中存在,并且存在 Bug 的字样,那么很有可能你遇到的是此项目的已知问题。安心等待开发者解决就好,或者你也可以学习编程,为修复此 Bug 做出贡献。如果你发现你的问题在 Issue 列表中存在,并且存在 Feature Request 或 Enahncement 的字样,那么说明你需要的功能目前尚未实现,并且已经有其他用户向开发者请求加入此功能。你可以给此 Issue 点赞或评论,或许可以增加此功能的优先级,但切忌评论轰炸。在 Issue 中反复刷屏同样的内容只会带来负面后果。同样地,或许你也可以学习编程,为提供此功能做出贡献。

另外,你可能已经注意到了,本手册特别提供了 名词/术语速查表。在求助搜索引擎或用户群之前,可以看看里面是否已经包含了你想了解的概念。在速查表中,我们尽力提供了深度恰到好处的知识,不至于过于专业,但又足够你解决问题。如果你想改进速查表的内容,你可以提出一个 PR。如果你不知道 PR 是什么,那么可以按照本页后续的内容,将这作为你的第一个新知识开始学习。

高效搜索

如果你知道如何访问 Google,那么请使用 Google 进行搜索。如果你英文足够熟练,那么请使用英文进行搜索。

百度(还有 CSDN)永远不会是你学习计算机领域知识的最佳选择。一个更高效、搜索结果偏见更少的搜索引擎能显著提高你的信息获取效率。当然,如果你无法访问 Google,那么必应(Bing)海外版或许是一个尚可接受的选择。

如果你无法访问上述资源,那么在国内众多的内容平台中,学会筛选更可靠的平台也将大大提高你的知识获取效率。通常来说,技术型的个人博客和知乎平台具有相对优质的内容。如果你发现某个页面包含你需要的信息,但排版混乱或内容过于老旧已经不再适用,你可以尝试在内容的开头和结尾去寻找原文链接。通常这类文章是搬运而来,而其出处往往具有更优质的排版,有时原作者也会对其进行更新。

另一方面,互联网上的英文内容数量是具有压倒性的优势的,如果你能用英文提出问题,那么就有更大的概率直接检索到问题的解决方案。从类似 Stack Overflow 的问答网站到个人博客,你在中文互联网上找到的技术性信息,许多都源于对这些外文内容的翻译和多次搬运。因此,与其拾人牙慧,不如直抵源头。

随着大语言模型的兴起,AI 也可以是你「搜索」的对象。它们往往能比传统搜索更快地获得信息。但是,你应该永远对 AI 生成的内容心存警惕。在「幻觉」问题尚未得到有效解决之前,AI 的每一个回复都有可能是真材实料的信息,也有可能是胡编乱造。因此,在严肃场合,你不应该不加校验地使用 AI 生成的内容。

实践学习

深度优先学习

在学习新概念的过程中,我们很可能遇到用于解释新概念的描述中,也包含着我们不理解的知识的情况。如图所示,深度优先的学习即是每遇到一个新概念,都重新去查找学习这个概念所包含的下属知识,直到对每一个细节再无疑惑的方式。

例如:

一个小例子

你可能想编写一个能够在用户发出符合某种规则的消息时,针对性地进行自定义回复的功能。通过搜素自定义回复,你找到了海豹手册的 自定义回复教程

在触发条件部分,你发现你可能需要学习正则表达式,于是你访问了教程开头的链接,或者在搜索引擎中查找了正则表达式教程。

在正则表达式教程中,你发现 \s 可以用于匹配 whitespace,于是你搜索引擎中开始查找 what does whitespace mean……

如果你只使用深度优先的方式学习知识,那么当你最终回到一开始的目的(比如写一个自定义回复)时,你应该已经掌握了隐藏在触发条件与回复结果背后的全部知识,从此只要是自定义回复能实现的功能,对你来说都不再有任何困难。

然而,可以预见的,随着学习的不断深入,你需要学习的内容会爆炸式增长。所以,皓首穷经地学习每一个细节真的值得么……?

广度优先学习

与深度优先学习相反,广度优先的学习即是在遇到新概念时,大致了解其含义,便开始学习下一项内容。

例如:

又一个小例子

你遇到了一些故障,在用户群里有人和你说

你在运行海豹的终端把日志截图一下。

你不知道终端是什么意思,于是你在 名词/术语速查表 中翻阅了一下。虽然你对什么是 Shell、什么是命令行一知半解,但是你差不多知道他指的是那个在电脑上弹出来的黑框框。

于是你又看了一眼日志是什么意思。虽让你搞不懂什么 Warning 与 Error,但你知道黑框框里那堆文字就是日志。

最后,因为你从没在电脑上截屏过,你去搜索了一下,找到了 Snipaste 这一截图工具。把黑框框里的文字截图发了出去。

如果你只使用广度优先的方式学习知识,那么可能你很快就能达成一开始的目的。

然而,你对所有涉及的概念都一知半解。如果再遇到类似的问题,尽管可能只需要你做相似的操作,由于你并没有领会每一个细节,你依然不得不求助于人。所以,这样草草浏览知识真的正确么……?

所以……

在实际学习新知的过程中,两种方法往往是相辅相成的,另外,实践永远是学习的最佳方法。

你通常需要以深度优先的方式,了解一个概念背后的一些细节,直到这些细节足够你应对眼前的问题和未来可能遇到的相似的问题,然后转向下一个概念进行学习。执着于过于深入的细节只会拖慢你的学习速度,因此,在合适的位置停下是最为高效的方案。

同时,在脑海中思考千遍,不如把手放在键盘上,尝试敲出你理解的方案。程序实际运行时给出的反馈,会大大帮助你找到正确的方向,而闭门造车只会延长你设计方案到发现错误的时间

结语

以上就是我们总结出的,要在使用 SealDice 时更快地学习新概念的办法。希望通过这样的办法,能让你更有效率地解决在部署 SealDice 的过程中遇到的问题。

也希望你通过本系列科普有所收获。

如何正确提问

注意:海豹手册已于 2024 年 8 月 7 日停止维护以下内容,以下内容归档于 2024 年 8 月 7 日。

归档原因:海豹开发组认为,提问的智慧一书中已经写明该如何提问,海豹手册不应该分走大部分篇幅去讲述应该如何提问。

本节内容

本节为计算机小白指南中的第一部分。

本节旨在帮助先前未曾接触过计算机以及服务器,或者对计算机及服务器知之甚少的用户问出更加明晰高效的问题,减少因沟通产生的不必要的麻烦。

关于如何快速学习相关背景知识,请看 如何高效学习;关于一些小白常见的问题,请看 计算机小白常见问题;关于特定的名词术语解释,请看 名词/术语速查表

前言

自近期用户量剧增后,SealDice 用户群的社区氛围似乎又有些不尽如人意,预料之中而情理之外的事情又再次发生了,我们觉得,用户需要这样一个科普性质的界面。如果在不知道如何在用户群提问能尽量干脆利落,或者不清楚某些术语该怎么说的情况下,能想到这个系列就最好了

当然,我们没有资格教屏幕前的你如何做人,这篇科普也一样,只是给你一个或许更好的建议,是否跟着这么做,取决于你。

提问的智慧

在计算机技术领域内,《提问的智慧》一文广为流传。如果你想认真地学习如何问出一个好问题,强烈建议全文阅读此文章。在用户群的群文件中,也提供了此文章的文件。

当然,海豹用户群的群员们并不会如此严苛,如果你暂时没有时间完整地阅读上述文章,那么认真读完本节也足够你在海豹用户群中问出一个好问题。

提问前,你该这样做

尝试自行排查问题

对于屏幕前或许没有编程经验的你,可以通过平日里学的「五要素」法则来思考遇到的程序错误问题。下面是一个可行的思考过程。

  • Where
  • 我是在哪里做了一些事情让我的骰子出现问题了?是在服务器还是在我自己的电脑上?
  • When
  • 我在什么时候做了这些事情让骰子出现问题了?
  • What
  • 我做了什么让我的骰子出现了问题?
  • Why
  • 为什么我这么做会让骰子出现问题?
  • How
  • 我怎么做才能去修复这个问题?

通过这样的思考过程,你即使猜测不出问题所在,也可以很好地根据这五个要素的思考过程组织问题,让回答者清晰地知道你的操作流程,更快地找到问题所在,为你解决问题。

尝试阅读本手册以找到答案

阅读本手册,尤其是 计算机小白常见问题常见问题 两个页面。使用页面左上角的搜索按钮有助于提高你的信息效率。

尝试浏览用户群内的信息以找到答案

用户群的群公告、群精华消息和历史聊天记录中,有可能找到你问题的答案。

尝试上网搜索以找到答案

关于如何高效地进行搜索可以参考 如何高效学习 一节中,高效搜索 小节。

记住你做了什么

你在解决问题时所做的努力——无论仅仅是搜索还是尝试了具体的操作、无论是有效的还是无效的,都将帮助回答者更有效地了解你的背景信息。因此,记住你所做的,并按照下文中的指导,附加在问题中。

提问时,你该这样做

本部分中将会为一些涉及的要素提供正例与反例,正例并不意味着一个好问题(它是一个好问题的一部分),但反例显然不应该出现在你的问题里。另一方面,如果你的问题并不涉及某个的要素,那就不要强行加入这个要素。

清晰说明你的意图和/或困难

如果你想要让海豹实现某些功能,那么请尽可能清晰完整地描述你想实现的功能。如果你在实现某功能的过程中遇到了麻烦,或者一些你认为本该正常运行的功能表现得不正常,那么请尽可能详细地描述你遇到的困境。

以下是一些合适的措辞:

我希望写一个插件,在用户不使用指令前缀的情况下,也能正常响应用户的命令,并实现接入 ChatGPT API 的功能。


我的骰子突然不响应指令了,具体来说,在我的 xxx 群里可以正常使用,但是我私聊它就不行。

以下是一些典型的反例:

呜呜我的骰子怎么不能用了——


很急!来个大佬救救!

描述问题发生前,你做了什么

一个问题可能是也可能不是由用户错误的操作引起的,所以,为了帮助回答者分析定位问题,你应该描述在问题发生之前你做了什么。

以下是一些合适的措辞:

我在本地的 Windows 上通过 WinSCP 使用 SSH 协议连接到了我在腾讯云的服务器上,服务器运行的是 Ubuntu 系统。我直接把 data 文件夹拖到了 sealdice-core 同一个目录内,然而在服务器无法启动海豹。


我在群里 xx 写的 xx 牌堆的基础上修改了牌堆。原本的文件上传到海豹后,可以正确识别。但是我修改之后,上传到海豹,牌堆列表里并没有出现那个文件。我修改的部分是这样的:<屏幕截图>

反例:不提供此类信息。

注意:在提供代码相关的信息时,请使用屏幕截图

通常来说,代码都遵守着相应的格式规范。直接将代码复制到聊天窗口中会极大地破坏这种代码规范,严重影响代码的可读性。因此,不要将代码内容复制到聊天窗口中,请使用屏幕截图。

为什么我在 SealDice 用户群问问题会被要求发送截图?为什么不能拍屏?

提供问题发生时,程序的日志

如果你不清楚什么是日志,请看 名词/术语速查表 中的 日志 部分。海豹的日志中包含了大量的有效信息,许多问题的直接原因本身就记录在日志中。即使你不能完全理解日志的内容,它也将极大地帮助回答者排查你所遇到的问题。因此,除非你非常确定你遇到的问题与海豹本身的运行无关,或未反映在日志中,请务必提供日志截图。

每行日志的开头都带有时间戳,请确保你发送的日志是问题发生那一刻前后一段时间内的日志。例如,你在 WebUI 查看日志,而你一遇到问题就立刻开始写求助消息,那么此时问题所对应的日志通常位于页面底端,你应该下拉页面,确保截图中呈现了对应的日志。

以下是一些合适的措辞:

我发出指令但是骰子在私聊中没有回复我,日志是这样的:<日志截图>


我修改过的牌堆上传到海豹之后,点击重载牌堆,日志是这样显示的:<日志截图>

反例:不提供日志。

注意:在提供日志时,请使用屏幕截图

通常来说,日志中每条记录都相对较长。在一些情况下,日志还会使用特定格式输出堆栈信息。直接将日志复制到聊天窗口中会严重影响日志的可读性。因此,不要将日志内容复制到聊天窗口中,请使用屏幕截图。

为什么我在 SealDice 用户群问问题会被要求发送截图?为什么不能拍屏?

描述问题发生后,你尝试过的解决方案

正如上文中提到的,无论是试图实现一个功能,还是在使用中遇到了不符合预期的事件,你都应该尝试根据参考信息自行解决问题。在提问时,即使你的尝试没有效果,也应该把你尝试过的方法描述出来。你尝试过的方法可能就是排查问题的手段之一,通过你提供的这些信息,回答者可以更加高效的帮助你定位问题。

以下是一些合适的措辞:

我试过对我的海豹骰进行重启,还有撤去一些自定义回复文件以及 JSON 牌堆文件,但是基本对数据库文件夹的异常磁盘占用问题没有效果。


我试过重启海豹(但是没有重启分离部署的 Lagrange),海豹依然不会在私聊中回复我。

反例:不提供此类信息。

提供其他有价值的背景信息

海豹核心的版本号、连接的社交平台、连接 QQ 平台时使用的连接方式(内置客户端或分离部署)以及你的操作系统等,都有可能和你所遇到的问题有关。因此,与其提问后再被要求补充这些信息,不如一开始就将它们包含在你的问题之中。

以下是一些合适的措辞:

我使用的是 vA.B.C 版本的海豹骰,部署在 Windows 11 系统上。私聊不回复的问题是在 QQ 平台发生的。我是通过分离部署连接的 QQ,使用的 QQ 后端是 NapCat。

反例:不提供此类信息。

提问后,你该这样做

如果问题解决了……

如果回答者提供的解决方案解决了你的问题,你应该做出反馈。

首先,一个有效的问题解决方案可以扩充海豹社区对问题的经验。通过明确地告诉大家问题已经解决,你正在为建设海豹社区做出有力的贡献。

另外,对回答者表示感谢是最基本的礼貌,也是维护海豹社区良好氛围的行为。

如果问题没能解决……

问出下一个问题吧。别忘了回顾一遍本节内容,你的追问同样应该是一个良好的问题,这样才有助于问题的快速解决。

当然,那些已经描述过的且未发生改变的信息没有必要再重复一遍。如果你不确定某些信息是否应该重新描述,那就再说一遍,啰嗦总好过一个信息不完整的问题。

另一方面,你也应该额外补充一些信息,尤其是用你自己的话描述一遍你是如何执行回答者所给出的解决方案的。很多时候一个解决方案是有效的,但由于沟通上的歧义或误解,导致它没能被正确执行。因此,再和大家说说你是怎么做的吧。

其他事项

保持耐心,对回答问题者表现出友善和配合的态度

群员、管理和开发者们都有自己的生活,SealDice 也只是兴趣的一部分。所以,在你的问题看起来没有获得回答的时候,保持耐心。当有群员或管理进一步地询问相关问题,也希望你能友善且相对客观地叙述问题,而不是对他们发泄自己的主观情绪,同时,配合他们进行操作,这样,问题才能更快速地解决。

如果有需要,可以去 GitHub 代码仓库上提交 issue

如果你想要问的问题是新的、程序上的需求(例如希望加入一个新的接口),或者你的问题明确了是一个 bug,你希望 SealDice 开发组尽快满足这个需求或修复这个 bug,你可以通过在 GitHub 的 sealdice/sealdice-core 仓库中提交一个 issue,开发组的开发者们会通过讨论进行回复,并且,如果确定需要通过你的反馈对程序进行改动,也会更方便开发者们归档问题和修改程序。

结语

以上就是提问的智慧中我们总结出的,要在 SealDice 用户社区里更快地解决问题应该怎么做的办法。希望通过这样的办法,能让你更有效率地解决在部署 SealDice 的过程中遇到的问题。

也希望你通过本系列科普有所收获。

+ + + + \ No newline at end of file diff --git a/archive/archive-other.html b/archive/archive-other.html new file mode 100644 index 000000000..19ee517fa --- /dev/null +++ b/archive/archive-other.html @@ -0,0 +1,52 @@ + + + + + + 其它归档内容 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Skip to content

其它归档内容

Go-cqhttp / Mirai

注意:海豹已于 v1.4.5 版本弃用此方案,以下内容归档于 2024 年 5 月 7 日。

危险:此方案已经接近不可用

由于 QQ 官方的检测,使用 Go-cqhttp 方案成功连接的成功率已经越来越低。即使成功连接,也可能面临高达每月 2 次的频繁冻结等情况。

我们不推荐任何用户再使用此方案连接 QQ 平台。

危险:Go-cqhttp 已停止维护

Go-cqhttp 的开发者已无力维护项目(见 go-cqhttp/issue#2471)。在未来 qsign 签名服务彻底被官方封死之后,Go-cqhttp 将无法继续使用。

使用签名服务

危险:qsign 已停止维护

原 qsign 作者已因「不可抗力」无法再维护此项目,对应原代码仓库也已删除,该方法会在未来逐渐失效,请做好预期准备。

部署签名服务,即使用开源签名服务 qsign,是目前用来绕过检测的最有效手段。

怎么使用签名服务?

你可以自己在本地搭一个 qsign 服务,也可以使用别人搭好的。

注意:自行搭建签名服务

如果你的动手能力足够强或者有足够的电脑知识,强烈推荐 自己搭建本地签名服务器。

使用他人的签名服务可能会泄漏以下信息 (截取自 qsign 的说明)

  • 登录账号
  • 登录时间
  • 登录后发送的消息内容
  • 登录后发送消息的群号/好友 ID

不会泄露的信息:

  • 账号密码
  • 账号 session
  • 群列表/好友列表
  • 接收的消息
  • 除发送消息外的任何历史记录

使用共享签名服务可能会提高账号被封禁的概率。

在登录账号的时候会看到这样一个界面:

海豹的 qq 登录页

点击下面的「签名服务」一栏的「简易配置」,可以看到如下配置项:

配置签名服务
  • 服务 URL:你要链接的 qsign URL
  • 服务 key:密码
  • 服务鉴权:默认为空,如果有的服务器要求特定的鉴权,就填上吧

提示:默认的 qsign 配置

没有特殊设置的话,qsign 的 URL 通常默认为 http://localhost:13579,key 通常默认为 114514

如何搭建签名服务

提示:有能力的用户可以自行搭建服务。

注意

由于项目的特殊性,下面的方法随时可能失效,我们不对信息的及时性做任何保证。可以加入海豹官方群寻求帮助。

可以尝试使用 一键 qsign

引用自说明:

点开以后删掉文件夹里的 go-cqhttp.batgo-cqhttp_windows_386.exe,然后运行里面的 Start_Qsign.bat 启动 qsign,按照提示依次键入 txlib_version 参数、设定 hostportkey的值。(如果不知道这些是干什么的,请直接依次按下 Enter)

手动抓取 ticket

目前,Gocq 的过验证码网站已经停止服务,你需要自行抓取 ticket 进行登录。

步骤如下:

前置工作

启动海豹,打开海豹的管理 ui,账号设置,添加账号;

账号类型选 QQ 账号,设备选「Android Pad-可共存」(此协议登录手机可同时在线,qsign 仅 Android 协议和 Android Pad 协议可用):

添加账号

版本选择 8.9.70(如果你的 qsign 是其它版本,请选择对应版本):

选择 qsign 版本

填写 QQ 账号密码:

填写 QQ 账号密码

选择简易配置:

选择简易配置

服务 URL 填你的 qsign 服务地址。

服务 key 填你的 qsign 服务密码,没有可以不填。

服务鉴权不填写。

服务鉴权

接着点击登录,然后退出海豹(结束进程)。

分离部署登录流程

  1. go-cqhttp\go-cqhttp.exe 文件复制到 海豹目录/data/default/extra/gocqQQ号(你登录骰娘的qq号) 这个文件夹下。

    文件夹结构

  2. 双击运行 go-cqhttp.exe,两次确认后出现 go-cqhttp.bat 文件。

    运行警告 1 运行警告 2

  3. 双击运行 go-cqhttp.bat,出现以下消息后输入 2,回车,复制链接到浏览器(终端选中后右键即可复制粘贴,没有选项)。

    运行

    提示:出现 open image cache db failed

    出现该报错的原因很可能是因为 gocq 的缓存数据库损坏,可以尝试删除 gocq 的 data 目录后重新运行 gocq。(注意是 gocq 的 data 而不是海豹的!)

  4. 按照 手动抓取 ticket 教程 - 哔哩哔哩 视频教程操作,成功滑条后(需要抓 ticket,不只是滑条)复制 ticket 到终端后回车。

    滑块 ticket 输入

  5. 如果登录成功,你应当能看到一条类似于 2022-05-06 20:00:00 [INFO] 登录成功,欢迎使用:XXX 的日志。

    登录成功

    同时你应当在下方看到一条类似于 2022-05-06 20:00:00 [INFO] CQ Websocket 服务器已启动:[::]:8080 的日志。

    结尾的 8080 即为 gocq 的 ws 端口。你的端口号可能不同,总之请记住这个端口号。

  6. 打开海豹,删除之前添加的账号,然后重新添加账号,选择 QQ(OneBot11 分离部署)

    添加账号

    在连接地址中填写 ws://localhost:8080(请把8080替换为你的 gocq 端口号)。填写完成后点击下一步。

  7. 你的账号应当已经成功连接。

    连接成功

GoCqhttp FAQ

1. 出现 Code 1

  1. 账号密码错误,输入正确的账号密码。

2. QSign 闪退

  1. 确认没有启动多个 qsign(多个 qsign 需要端口不重复);
  2. 确认端口没有重复。若重复,请重新配置 qsign,修改 port;
  3. 将 qsign 文件夹放到硬盘根目录试试(如 D 盘、C 盘)。

3. 出现 Code 45

  1. 没连上 qsign,重启 qsign,重新登录;
  2. QSign 协议版本和 gocq 协议版本没对应,切换对应协议后重新登录;
  3. 该版本 qsign 已失效,升级版本。

4. 出现 Code 235

  1. Ticket 复制错误(多复制了 "" 或少复制了内容),重新登录;
  2. 更换网络进行滑条,如电脑连手机热点,复制链接发给手机滑条,换台电脑等;
  3. 登录频繁,过段时间重新尝试登录(时间不确定)。

5. 出现 Code 237

  1. 登录过于频繁,请等待一段时间继续;
  2. 内置的 ticket 抓取工具失效,需要手动抓取;
  3. 让他人帮助你滑条。

5. 如何启动多个 qsign?(仅当需要备用签名或不同协议版本的时候有此需求)

解压一个新的 qsign 文件,重新配置,端口需要输入不同于前面的端口。

6. 什么是 go-cqhttp?(通常简称 gocq)

登录 QQ 的程序,现各大骰系都用此程序,此外还有 mirai 等其他程序。

7. 什么是签名?

  • 手机 QQ 有内置的签名程序,可以不太准确的简单理解为会生成一些密码发给腾讯,让它识别是不是人;
  • qsign 把手机 QQ 的签名程序偷了出来,提供了让我们自己生成密码的功能;
  • gocq 在配置后可以对接 qsign,那样骰子也可以证明自己是正常人了。

8. 对于 SignServer(即 Start_Qsign.bat,俗称签名服务器)崩溃闪退可能的一种情况

通常 SignServer 都不会出现用户可直接读出的报错信息。如果出现了崩溃或闪退的情况,可以同时按下键盘上 Ctrl Alt Delete 这三个按键,找到任务管理器,在右上角的内存一栏,那里会出现数字,有些调过设置了的会出现占用的运行内存占可用运行内存的百分比。

很显然,这里的内存就是指电脑 CPU 的可用运行内存不足,这时候通过在任务管理器关闭部分没有在使用的进程就可以解决。

注意:进程不能轻易关闭

通常情况下,Windows 系统会运行一些进程以保证系统的正常运行。这些进程一旦关闭,系统可能会出现无法运行的问题。

在一般情况下,不推荐关闭这些进程。如果需要通过关闭进程来腾出运行内存,可以选择关闭其他应用程序运行的进程。

当然,关闭应用进程跟直接退出应用程序差别不大。对于在看这个界面的你来说,关闭应用程序是更好的选择。

Chronocat Red 协议

注意:海豹已于 v1.4.5 版本弃用此方案,以下内容归档于 2024 年 5 月 7 日。

危险:支持 Chronocat 为 0.0.54

海豹 Red 协议所适配的目标 Chronocat 版本为 0.0.54,低于该版本(主要为 0.0.52)缺少必要接口,使用时会出现报错,不建议使用。

在账号添加中,选择「QQ Red 协议」,填写相应信息进行连接。

Shamrock v1.4.2

注意:已发现 QQ 客户端针对 Shamrock 增加了检测机制。在新版 QQ 客户端上,Shamrock 已无法使用。以下内容归档于 2024 年 7 月 17 日。

海豹从 v1.4.2 开始适配了 Shamrock 的连接。

危险:Shamrock 已停止更新

Shamrock 已于 2024 年 4 月 20 日归档,将不再进行更新。

危险:1.1.0 及以上版本的 Shamrock 不适用以下教程

2024 年 4 月 2 日,OpenShamrock 开发组于 Discussion#272 宣布,Shamrock 将会从 1.1.0 版本起弃用 OneBot V11 支持,迁移至新的 Kritor 协议。

这意味着 1.1.0 及之后版本的 Shamrock 将不再支持 OneBot V11,以下教程也不再适用。请仔细分辨,以免造成麻烦。

海豹开发组也正在着手对新的 Kritor 协议进行适配,请耐心等待。

注意:有难度的操作

此方式存在一定难度,你可能需要对 Root,使用命令行程序等有所了解。

Shamrock

Shamrock 是一个基于 LSPosed/Xposed 框架,实现劫持 QQ 以对外暴露 Onebot API 的软件。你可以在 Android 手机/模拟器中使用 Shamrock 代替已经停止开发的 gocq。

遗憾的是,Shamrock 的使用依赖于 Android 的 root 权限,而手机厂商对 root 管控愈加严格,实体手机获取 root 权限的门槛很高,而模拟器中使用 Shamrock 的效果也不是很可观。因此,这种解决方案适合个人与朋友使用骰子的场景。

此外,如果你想使用 Shamrock 代替 gocq,请确保你有良好的计算机使用能力。

本节主要讲解如何使用模拟器实现 Shamrock,如果你有一台已经 root 的手机,也可以参考本节内容,本教程不涉及说明如何 root 手机,海豹官方也不对 root 手机造成的后果负责,请自行斟酌。

提示:如何 Root 手机

Root 手机可以参阅 小米手机安装面具教程。也可以前往 酷安 寻找更详细的教程。

注意:低配置设备可能无法使用 Shamrock!

在尝试通过模拟器使用 Shamrock 的场景下,由于模拟器对性能要求较高,包括 轻量级服务器、旧电脑、小主机等配置较低的设备可能无法支持使用。

准备模拟器

下面将使用 夜神模拟器 作为示例。

使用时,确保安卓版本在安卓 8 以上,而在安卓 11 以下,最好使用安卓 9。

获取 Root 权限

Magisk

Magisk(面具)是一套开源的 Android 自定义工具,通常用于获取 root 权限。

Root 即 Android 的超级用户权限,如对 QQ 应用进行注入等的危险操作需要 root 权限。

在使用之前,请在模拟器设置中打开 root 选项,软件中获取的一切权限都给予 通过,包括 root 权限

使用 面具安装工具,把它安装到模拟器。

然后启动软件,输入 m 回车,再输入 y 回车,会索取超级用户权限,给予,然后输入 1 回车,再输入 a 回车,输入 1 回车,此时面具就安装到你的模拟器上了。

打开面具模块,此时面具会索取超级用户权限,给予,此时你会发现你的超级用户权限那里是灰的,关闭你的超级用户权限,重新启动你的模拟器。

此时你会发现你的超级用户模块已经激活。在面具的设置里启动 zygisk 模块,随后你需要再次重启模拟器,使得 zygisk 模块生效。

启用 zygisk

安装 LSPosed 模块

提示:使用 xposed/edxposed

理论上,使用更为老旧的 xposed/edxposed 或在手机上运行虚拟机的 virtualXposed 的方案也是可行的,但我们不推荐也未尝试过使用它们。

任何不按教程的行动请自行处理疑难问题,海豹官方不对此提供帮助。

请于 LSPosed Releases 页下载模块。

注意:zygisk

务必选择以 zygisk 结尾的包。

下载完成后,把文件上传到模拟器中。一般情况下,直接把文件拖动到模拟器就可以传文件了,且文件一般在 picture 文件夹中,如果没有请参照你使用的模拟器说明。

在你传完文件之后,在最右侧切换到「模块」页后,你可以看到从本地安装的选项。单击你刚刚传到模拟器里的文件,等待安装完成即可,随后你可以在右下角看到重启按钮,点击等待重启。

安装完成后应该如下所示:

完成 LSPosed 模块安装

安装 Shamrock

请于 Shamrock Releases 下载 Shamrock 的 apk 安装包,直接将 apk 文件拖动到模拟器即可进行安装。

如果模拟器中没有安装 QQ,此时你还需要将 QQ 安装到模拟器中。

安装完成后,首先启动 Shamrock。在通知上,你可以打开 LSPosed 的页面,在模块一栏中启用 Shamrock

启用 Shamrock

选中 Shamrock,进入勾选 QQ,并长按 QQ 选择 强行停止

Shamrock 中勾选 QQ

随后再打开 QQ,你可以看到「加载 Shamrock 库成功」的提示,这代表 Shamrock 已经成功注入了 QQ。

成功注入后,打开 Shamrock 启用 ws 服务,通常情况下无需修改 Shamrock 的任何内容,如有其它需求请阅读 Shamrock 文档

Shamrock 启用 ws

开放模拟器端口供海豹对接

首先下载 adb 工具,解压到电脑中任何可用的位置。

随后找到模拟器供 adb 连接的端口,夜神模拟器路径示例如下:

夜神模拟器 adb 端口

其中:

  • Nox 是模拟器根路径。
  • Nox_4 是模拟器的编号,你可以在多开助手中看到你的编号。
  • 选中的文件就是要找的文件,在 vscode 中(或者其它文本编辑器)中打开。

打开

guestport 值为 5555hostport 即为所需端口,如示例中就是 62028,记住这个端口号。

在你解压的 platform-tools 里打开终端,或者把 platform-tools 加入环境变量后再启用终端。也可以在 platform-tools 里新建一个 .bat 文件,把下面的命令写到文件里面。

在打开的终端中输入命令:

cmd
.\adb connect 127.0.0.1:端口

如替换为上面示例中的 62828:

cmd
.\adb connect 127.0.0.1:62028

随后再执行:

cmd
.\adb forward tcp:5800 tcp:5800

此时你已经成功开启端口了。

执行 adb 命令

连接海豹

在账号添加中,选择「QQ(onebot11正向WS)」,按照下面的格式进行填写:

连接 Shamrock

成功连接后即可使用。

Shamrock LSPatch v1.4.2

注意:已发现 QQ 客户端针对 Shamrock 增加了检测机制。在新版 QQ 客户端上,Shamrock 已无法使用。以下内容归档于 2024 年 7 月 17 日。

注意:有难度的操作

此方式存在一定难度,你可能需要对使用命令行程序有所了解。

注意:Andriod 版本要求

由于 LSPatch 要求安卓版本 9.0 以上,因此你的安卓手机版本必须超过安卓 9。

LSPatch

LSPatch 是在无 root 环境下使用 Shamrock 的一种途径,原理是利用 Shizuku 安装经 LSPatch 修补后的 QQ,再使用 Shamrock 劫持 QQ 并对外开放 API。

安装 Shizuku

Shizuku

Shizuku 是一个帮助其他应用直接使用系统 API 的应用,而 Shizuku 本身则需要通过电脑使用 adb 工具赋予权限。

Adb 即 Android 调试桥,是安卓官方提供的帮助在电脑端调试 Android 设备的命令行工具。

首先需要在你的手机安装 Shizuku,安装后需要在电脑中使用 adb 命令为其赋予权限。

在 Windows 中使用 cmd 执行 adb 命令:

  1. 安装 adb,工具下载见 上文
  2. 打开 cmd 窗口;
    • 如果你的电脑是 Window 11 操作系统,你可以直接右键 platform-tools 文件夹单击 在此处打开命令行
    • 其它版本的打开方式请自行搜索。
  3. 你有多种方式使用 adb:
  • 将 adb 添加至系统环境变量,在系统开始一栏中可以直接搜索到该功能,随后将 解压好的 platform-tools 路径填入至系统变量中的 path,例如,adb 在 E:/shamrock achieve/platform-tools 文件夹中,那么你只需要将该路径填入 path 即可。 adb path
    • 如果你是旧版本 Window(如 Win 7),系统未提供对应的 GUI,你需要使用 ; 隔开不同的路径。
  • 也可以选择使用 cd 命令切换至 adb 目录,使用此方法请将 adb 放在 C 盘;(由于 Windows 权限问题,使用运行开启的 cmd 实例无法访问 C 盘之外的路径。)
    • win + R 键启动「运行」;
    • 在运行中输入 cmd 并回车;
    • 在打开的黑框框中输入命令 cd <替换为对应路径>切换到 adb 文件夹
  • 还可以选择在 platform-tools 文件夹中新建.bat 文件。

在手机中,你需要开启 USB 调试 ,在手机设置中,选择「更多设置—关于手机」,多次点击软件版本号,即可进入开发者模式。

随后在「更多设置—开发者选项」中打开 USB 调试,使用数据线连接电脑和手机,随后在你的手机中出现指纹调试弹框,给予通过。

在电脑中使用命令:

cmd
adb shell sh /storage/emulated/0/Android/data/moe.shizuku.privileged.api/start.sh

为 Shizuku 赋予 adb 权限

安装 LSPatch

LSPatch

LSPatch 可以在无 root 环境使用 LSPosed 框架。

可以参看 LSPatch 使用教程 了解更多。

  1. 你需要在 Shizuku 中启用 LSPatch,并重启 Shizuku。
  2. 在管理中,单击加号,选择已经下载的 QQ apk 文件,选择本地修补,等待一会,然后就可以安装了。

安装并激活 Shamrock

安装方式 上文 有提及,此处不予重复。

在 LSPatch 中,长按修补后的 QQ 出现模块作用域,允许 Shamrock 然后重启 LSPatch。

激活 Shamrock 模块有三个前提,即 QQ 进程,Shamrock 进程和 LSPatch 进程存活,请自行配置保活策略,例如允许自启动,允许后台存活和关闭后台高耗电等。

对接海豹

首先安装海豹安卓端。

注意:确认海豹版本

请使用版本为 1.4.2 以上的安卓端海豹。

建议使用 反向 ws 设置。在海豹中,账号添加中选择「QQ(onebot11反向WS)」,填入骰子 QQ 号和要开放的 ws 端口(例如 :6544)。

随后在 Shamrock 中的被动 ws 连接地址中写 ws://localhost:6544/ws

+ + + + \ No newline at end of file diff --git a/archive/archive-terms.html b/archive/archive-terms.html new file mode 100644 index 000000000..7e3db10f5 --- /dev/null +++ b/archive/archive-terms.html @@ -0,0 +1,52 @@ + + + + + + 名词/术语速查表 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Skip to content

名词/术语速查表

本节内容

本节为计算机小白指南中的第四部分。

本节旨在帮助先前未曾接触过计算机以及服务器,或者对计算机及服务器知之甚少的用户快速查询特定名词/术语的含义。本节不能代替权威解释或各项目的官方文档。

关于如何正确地提问,请看 如何正确提问,关于如何快速学习相关背景知识,请看 如何高效学习;关于一些小白常见的问题,请看 计算机小白常见问题

C

CQ 码

CQ 码是酷 Q(CoolQ)时代定义的一套接口语言,方便用户快速编写指定类型 QQ 消息。可以参考 这个页面 进行编写。

D

端口

参见 IP 与端口

F

服务器

服务器可以简单地理解为持续保持开机的电脑,即持续提供服务的机器。

我们知道,骰子本质是在电脑上运行的程序,如果希望骰子 24 小时都可以回应我们的指令,那么就需要电脑保持开启的状态。但这样做的不稳定性非常大,如果出现例如家里突然停电了这样的情况,骰子就不能 24 小时随时回复我们的指令了,并且,这样也很费电。而服务器正是这样一种尽可能稳定运行的、不会关机的电脑,他们可能以「云电脑」这样的名字出现,但从本质上来说,这就是服务器。

提示:服务器和个人计算机在使用上有明显差异

相比开机激活之后马上就可以投入使用的个人计算机,服务器从运行系统上就与其稍有不同。这里以 Windows 系统的服务器和个人电脑举例。

服务器使用的是微软特地为了服务器开发的 Windows Server 系统。顾名思义,这个系统就是专为服务器开发的,在部分设置的选项中也与个人计算机有所不同。

正因如此,服务器一开始并不容易熟练操作。不过,这篇速查表的目的就是让屏幕前不太明白计算机相关知识的用户可以快速入门。所以,你也不必对这些问题有太大的压力。

G

工作目录

工作目录是用户在使用 命令行界面 时,当前「处于」的目录。在运行程序时,程序会以工作目录作为索引目录树的起始位置。

海豹核心要求的、和实际运行时的工作目录即为「包含 sealdice-core(.exe) 文件和 data 目录、通常还包含 lagrange 目录」的目录(文件夹)。

海豹工作目录内的文件结构可以参考 海豹的本地文件

H

Headless

参见 无头

I

IP 与端口

在分离部署 QQ 后端和部署多只海豹时,你都需要正确处理 IP 与端口号。IP 与端口是互联网应用用于定位彼此的方式之一,IP 用于区分网络中的不同设备,而端口用于区分同一设备上的不同应用。打个比方,IP 就像是地址,可以定位到某个特定的房屋,而端口号是这个屋子里住户的编号,可以用于判断该联系这户人中的哪一位。在目前主流使用的 IPv4 标准下,IP 是形如 127.0.0.1192.168.0.1 的一串数字,端口号则是范围在 0-65535 的一个整数。两者组合时,通常使用 127.0.0.1:3456 的方式描述。

通常来说,服务端应用程序会「监听」一个端口,而客户端应用程序会试图连接到此端口。例如在分离部署 QQ 后端并采用正向 WS 连接时,QQ 后端会监听你在配置中指定的端口,而海豹会试图连接到这个端口;而海豹的 WebUI 作为服务端默认绑定到 3211 端口,你的浏览器则试图连接到 3211 端口。所以,在配置分离部署的 QQ 后端时,海豹中必须填入与你的 QQ 后端配置相同的端口号。

不同范围的 IP 地址都有与之相关的规定,而你在配置海豹的过程中最常见的是 127.0.0.1localhost。此地址一般用于指向本机,而非互联网上的其他设备。当你的海豹与 QQ 后端位于同一主机上,在海豹中需要通过此地址指向 QQ 后端。当你访问 WebUI 的设备与海豹所在的是同一主机,你也需要在浏览器地址栏填入此 IP。

同样的,端口号也不能随意指定。一般情况下,一个端口只能被一个服务端监听使用,这就是为什么当你部署多只海豹时需要切换端口,此时默认的 3211 端口已被第一只海豹占用。而低位端口(小数字)通常有其约定,例如 80 是 HTTP 端口,443 是 HTTPS 端口等。低位端口通常已经被占用,或系统安全策略不允许随意监听此类端口。所以,建议优先选择高位端口(大数字)部署 QQ 后端及海豹。

Issue

Issue 更常见的含义是偏向负面的「问题」,而在开源项目领域,issue 一词更多地被翻译为中性的「议题」。

在开源项目网站如 GitHub 的 Issues 标签页下,按默认设置,你可以看到一个开源项目的全部进行中的议题。这些议题主要包括了使用求助、Bug 反馈以及功能请求。在这里的讨论是所有人可见的,因此可以方便开发者与用户高效地共享信息。Issue 也是大部分开源项目正式的反馈渠道。

J

JSON

JSON 是一种 数据序列化语言。语法入门可以参考 编写牌堆

K

控制台

控制台是 终端 生成的、用于与 Shell 交互的界面。

你可能还想了解 控制台命令行Shell命令提示符

许多时候,终端、控制台、命令行与 Shell 或命令提示符等名词会被混用,因为在实际交互中,他们所指代的东西往往是一体的。

L

Lagrange

Lagrange(拉格兰)是一个 NTQQ 协议相关的开源项目。其包括目前实现了 Linux NTQQ 协议的 Lagrange.Core,和提供 OneBot-V11 API 的 Lagrange.Onebot 两部分。

Lagrange 可以很方便的在多个平台(Windows、Linux、Mac)部署,海豹核心可以对接其提供的 OneBot-V11 API 来提供 QQ 骰子服务。

可以参考 连接平台 - QQ有关的部分 和 Lagrange 的官方 GitHub 页面

Linux

Linux 是一种基于 UNIX 操作系统设计的开源操作系统。Linux 广泛应用于服务器、嵌入式系统、超级计算机以及大多数互联网基础设施。它也可以用于桌面计算,尽管市场份额相对较小。

Linux 的主要优点包括稳定性、安全性、低成本(大部分 Linux 发行版都是免费的)和开源性(用户可以查看和修改源代码)。

LiteLoader

LiteLoaderQQNT(LiteLoader)是 NTQQ 的插件加载器,允许通过插件注入 QQ 实现某些特定的功能。

可以参考 连接平台 - QQ有关的部分 和 LiteLoader 的官方 GitHub 页面

Log

参见 日志

M

命令行

命令行是 控制台 中,你实际输入命令的位置。通常,命令行行首会有 $#> 等符号,它们是 Shell 生成的提示符 (Prompt),用于提示用户 Shell 正在等待用户输入命令。

你可能还想了解 终端控制台Shell命令提示符

许多时候,终端、控制台、命令行与 Shell 或命令提示符等名词会被混用,因为在实际交互中,他们所指代的东西往往是一体的。

命令行界面

命令行界面即基于 命令行 的用户界面。在此界面下,用户通常使用输入指令的方式与操作系统或程序进行交互。

命令提示符

命令提示符(cmd.exe)是 Windows 平台下,在上个世代常用,在如今(由于 Windows 过于完善兼容性)也经常被使用到的一种 Shell

命令提示符本身集成了 控制台,但由于其过于古老,具有诸多弊端。例如,当你用鼠标选中控制台内的文本时,正在运行的程序会被暂停。

因此,强烈建议你使用 Windows 终端 打开程序。在较新的 Windows 系统上,命令提示符默认使用 Windows 终端打开。

你可能还想了解 终端控制台命令行Shell

许多时候,终端、控制台、命令行与 Shell 或命令提示符等名词会被混用,因为在实际交互中,他们所指代的东西往往是一体的。

N

NapCatQQ

NapCatQQ 是基于 PC NTQQ 本体实现一套 无头 Bot 框架。

可以参考 连接平台 - QQ有关的部分 和 NapCatQQ 的官方 GitHub 页面

NTQQ

NTQQ/QQNT 是腾讯公司基于 NT 内核,重新设计了用户界面的 QQ 客户端。腾讯官方称之为「QQ 9」。因此,如果发现自己使用的 QQ 不能正确加载 LiteLoader 等插件,请先检查 QQ 版本号是否大于 9。

Q

QQNT

参见 NTQQ

R

日志

在计算机领域中,日志通常指程序在运行时生成的一系列记录。这些记录通常反映了程序的运行状态,同时一般包含时间信息以方便定位对应的事件。在程序运行发生故障或不符合预期的行为时,日志中通常也会有所反映。日志通常分为信息(Info)、注意(Warning)和错误(Error)等不同的等级,而后两者就对应了上述的程序问题。

海豹的日志通常可以在三个地方找到:

  • WebUI 的「日志」导航栏,也即默认页面下。
  • 运行着海豹核心的 控制台
  • 海豹 工作目录 下, data/main.logdata/default/record.log 文件内。

S

数据序列化语言

程序运行中使用的数据,通常以特定的数据结构存储在内存之中。为了更方便地对数据进行存储、传输与重建,数据序列化语言被发明出来。这类语言通过特定的语法描述了数据之间的关系,并以文本的方式存储或传输。程序可以从这类语言中方便地恢复原有的数据结构。

常见的数据序列化语言包括 JSONYAMLTOML等。

Shell

我们日常使用的程序通常使用图形用户界面(GUI)与我们交互,即基于图形渲染和鼠标点击、拖拽的交互方式。而在编程领域和更古早的时期,命令行界面(CLI)则更为常用。在使用 CLI 时,我们第一个打开的程序通常就是 Shell。

Shell 是一个特殊的命令行界面程序,它给用户提供了通过输入命令与操作系统进行交互的交互方式。它会解析并执行用户输入的命令。

在类 Unix 系统中存在众多的 Shell,例如 Ubuntu 系统默认使用 Bash 而 macOS 默认使用 Zsh。Windows 系统推荐使用 PowerShell,而 命令提示符 也是一种 Shell。

你可能还想了解 终端控制台命令行

许多时候,终端、控制台、命令行、Shell 与命令提示符等名词会被混用,因为在实际交互中,他们所指代的东西往往是一体的。

T

TOML

TOML 是一种 数据序列化语言。语法入门可以参考 编写牌堆

W

无头

在计算机领域,无头(headless)通常指通过不生成图形化用户界面方式运行(原本有图形化用户界面的)程序。

WebUI

UI 即「用户界面(User Interface)」,通常指用户与程序发生交互的位置。而 WebUI 顾名思义,就是通过网络生成、交互的用户界面。

在海豹的相关语境下,WebUI 指骰主能通过浏览器访问到的管理后台。海豹默认的 WebUI 监听 端口 为 3211,因此当你通过 3211 端口访问海豹的管理后台时,实质上就是在与海豹的 WebUI 交互。

Windows Terminal

参见 Windows 终端

Windows 终端

Windows Terminal icon

Windows 终端是一个为命令行用户准备的全新的、现代的、功能丰富的生产力 终端。它包含了 Windows 命令行社区经常希望加入的新功能,例如标签页、富文本、全球化、可配置性和主题与风格化等等。

如果你在 Windows「开始菜单」的搜素功能中,输入「终端」后并没有出现如上所示的图标。那么强烈建议你下载并安装 Windows 终端,而不是继续使用 命令提示符 集成的 控制台

如果你发现你在启动海豹核心、LagrangeNapCatQQ 等程序时,弹出窗口的字体与风格都不属于 Windows 终端,那么强烈建议你在 Windows 终端中手动启动这些程序。

Y

YAML

YAML 是一种 数据序列化语言。语法入门可以参考 编写牌堆

Z

终端

终端(Terminal)是一个特殊的程序,它提供了一种访问 Shell 的方式,也可以视为 Shell 的一层包装。现代的终端通常会生成一个窗口——即 控制台 用于交互。

你可能还想了解 命令行Shell命令提示符

许多时候,终端、控制台、命令行与 Shell 或命令提示符等名词会被混用,因为在实际交互中,他们所指代的东西往往是一体的。

+ + + + \ No newline at end of file diff --git a/assets/about_README.md.E_W2JKSa.js b/assets/about_README.md.E_W2JKSa.js new file mode 100644 index 000000000..93849cdd6 --- /dev/null +++ b/assets/about_README.md.E_W2JKSa.js @@ -0,0 +1 @@ +import{_ as a,c as l,j as e,o as r}from"./chunks/framework.B1keMFNq.js";const c=JSON.parse('{"title":"关于","description":"","frontmatter":{"title":"关于","index":false},"headers":[],"relativePath":"about/README.md","filePath":"about/README.md","lastUpdated":1711707239000}'),o={name:"about/README.md"};function n(s,t,i,d,u,f){return r(),l("div",null,t[0]||(t[0]=[e("ul",null,[e("li",null,[e("a",{href:"./start-from-zero.html"},"从零开始")]),e("li",null,[e("a",{href:"./about.html"},"关于")]),e("li",null,[e("a",{href:"./license.html"},"许可协议")]),e("li",null,[e("a",{href:"./develop.html"},"参与项目")])],-1)]))}const p=a(o,[["render",n]]);export{c as __pageData,p as default}; diff --git a/assets/about_README.md.E_W2JKSa.lean.js b/assets/about_README.md.E_W2JKSa.lean.js new file mode 100644 index 000000000..93849cdd6 --- /dev/null +++ b/assets/about_README.md.E_W2JKSa.lean.js @@ -0,0 +1 @@ +import{_ as a,c as l,j as e,o as r}from"./chunks/framework.B1keMFNq.js";const c=JSON.parse('{"title":"关于","description":"","frontmatter":{"title":"关于","index":false},"headers":[],"relativePath":"about/README.md","filePath":"about/README.md","lastUpdated":1711707239000}'),o={name:"about/README.md"};function n(s,t,i,d,u,f){return r(),l("div",null,t[0]||(t[0]=[e("ul",null,[e("li",null,[e("a",{href:"./start-from-zero.html"},"从零开始")]),e("li",null,[e("a",{href:"./about.html"},"关于")]),e("li",null,[e("a",{href:"./license.html"},"许可协议")]),e("li",null,[e("a",{href:"./develop.html"},"参与项目")])],-1)]))}const p=a(o,[["render",n]]);export{c as __pageData,p as default}; diff --git a/assets/about_about.md.CV_qhwQQ.js b/assets/about_about.md.CV_qhwQQ.js new file mode 100644 index 000000000..3f69150df --- /dev/null +++ b/assets/about_about.md.CV_qhwQQ.js @@ -0,0 +1 @@ +import{_ as e,c as r,a6 as t,o}from"./chunks/framework.B1keMFNq.js";const f=JSON.parse('{"title":"关于","description":"","frontmatter":{"lang":"zh-cn","title":"关于"},"headers":[],"relativePath":"about/about.md","filePath":"about/about.md","lastUpdated":1718529177000}'),n={name:"about/about.md"};function l(h,a,i,s,c,p){return o(),r("div",null,a[0]||(a[0]=[t('

关于

官方站点

官网:海豹官网,新版本发布的正式地址,还提供试用,log 染色 等多项功能。

海豹开源组织 GitHub:海豹核心源码的托管地址。

投喂

请参见 官网—投喂,目前尚未更新蓝绿修改器(暂时顾不上)。

你的投喂将用于支付服务器费用,以及帮助社畜制作者们稍微抵抗来自现实的引力。

非常感谢。

手册贡献者

新手册贡献者


旧手册贡献者

木落、鹊鹊、蜜瓜包、病、于言诺、流溪憧憬少浣熊旅記

开源

海豹的源代码以 MIT 协议开源,托管在 GitHub 下。海豹核心的诞生离不开开源社区和其它开源软件的支持。

',15)]))}const u=e(n,[["render",l]]);export{f as __pageData,u as default}; diff --git a/assets/about_about.md.CV_qhwQQ.lean.js b/assets/about_about.md.CV_qhwQQ.lean.js new file mode 100644 index 000000000..3f69150df --- /dev/null +++ b/assets/about_about.md.CV_qhwQQ.lean.js @@ -0,0 +1 @@ +import{_ as e,c as r,a6 as t,o}from"./chunks/framework.B1keMFNq.js";const f=JSON.parse('{"title":"关于","description":"","frontmatter":{"lang":"zh-cn","title":"关于"},"headers":[],"relativePath":"about/about.md","filePath":"about/about.md","lastUpdated":1718529177000}'),n={name:"about/about.md"};function l(h,a,i,s,c,p){return o(),r("div",null,a[0]||(a[0]=[t('

关于

官方站点

官网:海豹官网,新版本发布的正式地址,还提供试用,log 染色 等多项功能。

海豹开源组织 GitHub:海豹核心源码的托管地址。

投喂

请参见 官网—投喂,目前尚未更新蓝绿修改器(暂时顾不上)。

你的投喂将用于支付服务器费用,以及帮助社畜制作者们稍微抵抗来自现实的引力。

非常感谢。

手册贡献者

新手册贡献者


旧手册贡献者

木落、鹊鹊、蜜瓜包、病、于言诺、流溪憧憬少浣熊旅記

开源

海豹的源代码以 MIT 协议开源,托管在 GitHub 下。海豹核心的诞生离不开开源社区和其它开源软件的支持。

',15)]))}const u=e(n,[["render",l]]);export{f as __pageData,u as default}; diff --git a/assets/about_develop.md.av-vH3VY.js b/assets/about_develop.md.av-vH3VY.js new file mode 100644 index 000000000..373c69620 --- /dev/null +++ b/assets/about_develop.md.av-vH3VY.js @@ -0,0 +1 @@ +import{_ as a,c as t,a6 as l,o as r}from"./chunks/framework.B1keMFNq.js";const s="/sealdice-manual-next/assets/develop-fork-1.BZOKPa8J.png",o="/sealdice-manual-next/assets/develop-fork-2.X58VX0eS.png",i="/sealdice-manual-next/assets/develop-new-branch-1.BqKBsG0R.png",p="/sealdice-manual-next/assets/develop-new-branch-2.zhLwB2Rj.png",c="/sealdice-manual-next/assets/develop-new-branch-3.C0fRBlWq.png",n="/sealdice-manual-next/assets/develop-new-branch-4.ijy4i49c.png",d="/sealdice-manual-next/assets/develop-new-branch-5.CeOz2UDa.png",u="/sealdice-manual-next/assets/develop-new-branch-6.BBHexEzw.png",h="/sealdice-manual-next/assets/develop-new-branch-7.C2-9Q-ZS.png",m="/sealdice-manual-next/assets/develop-pr-1.BVBX_RTc.png",b="/sealdice-manual-next/assets/develop-pr-2.C-dKwDzw.png",f="/sealdice-manual-next/assets/develop-open-pr-1.DAADwrkm.png",k="/sealdice-manual-next/assets/develop-sync-fork.BZF0daO6.png",B=JSON.parse('{"title":"参与项目","description":"","frontmatter":{"lang":"zh-cn","title":"参与项目"},"headers":[],"relativePath":"about/develop.md","filePath":"about/develop.md","lastUpdated":1728702230000}'),g={name:"about/develop.md"};function _(x,e,v,q,P,w){return r(),t("div",null,e[0]||(e[0]=[l('

参与项目

无论是普通用户还是开发者,我们都非常欢迎你参与海豹的开发,一起努力让海豹变得更好。

海豹的所有源代码都托管在 海豹开源组织 GitHub 下,每个模块都存放在对应的仓库中,可阅读对应仓库的 Readme 获取更多信息。

几个比较重要的仓库:

如何参与项目?

Bug 反馈、功能建议

所有的 Bug 和功能建议都可反馈在 核心 仓库的 issue 中,按照模板填写可方便开发组快速定位问题。

提示:无法访问 GitHub?

受限于各种原因,不是所有人都能顺利访问 GitHub,如有 Bug 可以加入官方群进行反馈。但如果有条件,我们还是建议在 GitHub 向开发组反馈问题。

提交修改

欢迎各种类型的 pr 提交,可以帮助改进代码,增加功能,也可以是完善文档等等。向对应仓库发起 pr 即可。

贡献指南

贡献指南

下面将以提交对手册的改进为示例,为还不清楚怎么在 GitHub 上提 Pull Request 的准贡献者做个示范。

整体流程

  1. 首先 fork 对应想要修改的仓库,后续所有操作均在 fork 之后的仓库上执行;
  2. 从主分支(通常是 mainmaster)切出一个新分支作为工作分支;
  3. 在新工作分支上提交修改。如果是对代码仓库进行修改,务必在本地测试通过;
  4. 将修改后的内容提交到远程后,在 GitHub 发起 Pull Request 请求,描述修改内容并确认自动测试流程通过;
  5. 等待开发组 review 后合并你的代码。

对目标仓库进行 fork

首先 fork 对应想要修改的仓库,此处以手册仓库 sealdice-manual-next 为例:

fork 对应仓库

点击 Create a new fork 按钮,如果此处已经有 fork 过仓库,可以直接进行后续步骤无需再次 fork。

点击按钮后进入如下页面:

创建 fork

可不做任何修改,直接点击 Create fork 按钮,等待 fork 进度条完成,此时你应当自动跳转到了 fork 出的新仓库。

切出工作分支

提示:假如你熟悉 Git 操作

如果你熟悉 Git 操作,可以自行 clone 仓库到本地后进行修改。

注意:不要修改主分支

如果 clone 到本地操作,建议不要在主分支操作,而是新切分支进行编辑。

原因见 保持和上游同步

切换到新仓库的分支页面,创建分支:

进入分支页

创建分支

填写新分支名,建议为形如 feature/xxx 的有意义的英文。确认前请务必保证是从主分支切出的。

新分支信息

创建完毕后点击分支名切换到对应分支页面:

切换分支

点击你想要修改的文件,进行在线编辑:

修改文件

修改完成后点击右上角提交变更,填写变更内容信息:

提交变更提交变更信息

发起 Pull Request 请求

你的修改完成后,在你 fork 的新仓库向主仓库发起 Pull Request:

创建 PR

提交时间很近的时候,GitHub 会提示快捷发起 PR 的操作按钮:

快速创建 PR

进入 PR 编辑页填写信息,请确认是从你的仓库的新分支,提向主仓库的主分支的:

主仓库 主分支 <- fork仓库 功能分支

填写 PR 信息

填写完成后,等待开发组进行 review,有时会给你提出一些修改建议。在你的 PR review 通过并合并后,功能分支就可以被删除了。

保持 fork 仓库与上游同步(可选)

如果之后还要提交新的 PR,建议先同步上游的主分支,再从同步后的主分支再新切分支进行操作。

如果你曾经修改了主分支,此处很可能会出现和上游分支有冲突的问题,需要你先手动解决冲突。

点击 Sync fork 进行同步。

与上游同步

',51)]))}const G=a(g,[["render",_]]);export{B as __pageData,G as default}; diff --git a/assets/about_develop.md.av-vH3VY.lean.js b/assets/about_develop.md.av-vH3VY.lean.js new file mode 100644 index 000000000..373c69620 --- /dev/null +++ b/assets/about_develop.md.av-vH3VY.lean.js @@ -0,0 +1 @@ +import{_ as a,c as t,a6 as l,o as r}from"./chunks/framework.B1keMFNq.js";const s="/sealdice-manual-next/assets/develop-fork-1.BZOKPa8J.png",o="/sealdice-manual-next/assets/develop-fork-2.X58VX0eS.png",i="/sealdice-manual-next/assets/develop-new-branch-1.BqKBsG0R.png",p="/sealdice-manual-next/assets/develop-new-branch-2.zhLwB2Rj.png",c="/sealdice-manual-next/assets/develop-new-branch-3.C0fRBlWq.png",n="/sealdice-manual-next/assets/develop-new-branch-4.ijy4i49c.png",d="/sealdice-manual-next/assets/develop-new-branch-5.CeOz2UDa.png",u="/sealdice-manual-next/assets/develop-new-branch-6.BBHexEzw.png",h="/sealdice-manual-next/assets/develop-new-branch-7.C2-9Q-ZS.png",m="/sealdice-manual-next/assets/develop-pr-1.BVBX_RTc.png",b="/sealdice-manual-next/assets/develop-pr-2.C-dKwDzw.png",f="/sealdice-manual-next/assets/develop-open-pr-1.DAADwrkm.png",k="/sealdice-manual-next/assets/develop-sync-fork.BZF0daO6.png",B=JSON.parse('{"title":"参与项目","description":"","frontmatter":{"lang":"zh-cn","title":"参与项目"},"headers":[],"relativePath":"about/develop.md","filePath":"about/develop.md","lastUpdated":1728702230000}'),g={name:"about/develop.md"};function _(x,e,v,q,P,w){return r(),t("div",null,e[0]||(e[0]=[l('

参与项目

无论是普通用户还是开发者,我们都非常欢迎你参与海豹的开发,一起努力让海豹变得更好。

海豹的所有源代码都托管在 海豹开源组织 GitHub 下,每个模块都存放在对应的仓库中,可阅读对应仓库的 Readme 获取更多信息。

几个比较重要的仓库:

如何参与项目?

Bug 反馈、功能建议

所有的 Bug 和功能建议都可反馈在 核心 仓库的 issue 中,按照模板填写可方便开发组快速定位问题。

提示:无法访问 GitHub?

受限于各种原因,不是所有人都能顺利访问 GitHub,如有 Bug 可以加入官方群进行反馈。但如果有条件,我们还是建议在 GitHub 向开发组反馈问题。

提交修改

欢迎各种类型的 pr 提交,可以帮助改进代码,增加功能,也可以是完善文档等等。向对应仓库发起 pr 即可。

贡献指南

贡献指南

下面将以提交对手册的改进为示例,为还不清楚怎么在 GitHub 上提 Pull Request 的准贡献者做个示范。

整体流程

  1. 首先 fork 对应想要修改的仓库,后续所有操作均在 fork 之后的仓库上执行;
  2. 从主分支(通常是 mainmaster)切出一个新分支作为工作分支;
  3. 在新工作分支上提交修改。如果是对代码仓库进行修改,务必在本地测试通过;
  4. 将修改后的内容提交到远程后,在 GitHub 发起 Pull Request 请求,描述修改内容并确认自动测试流程通过;
  5. 等待开发组 review 后合并你的代码。

对目标仓库进行 fork

首先 fork 对应想要修改的仓库,此处以手册仓库 sealdice-manual-next 为例:

fork 对应仓库

点击 Create a new fork 按钮,如果此处已经有 fork 过仓库,可以直接进行后续步骤无需再次 fork。

点击按钮后进入如下页面:

创建 fork

可不做任何修改,直接点击 Create fork 按钮,等待 fork 进度条完成,此时你应当自动跳转到了 fork 出的新仓库。

切出工作分支

提示:假如你熟悉 Git 操作

如果你熟悉 Git 操作,可以自行 clone 仓库到本地后进行修改。

注意:不要修改主分支

如果 clone 到本地操作,建议不要在主分支操作,而是新切分支进行编辑。

原因见 保持和上游同步

切换到新仓库的分支页面,创建分支:

进入分支页

创建分支

填写新分支名,建议为形如 feature/xxx 的有意义的英文。确认前请务必保证是从主分支切出的。

新分支信息

创建完毕后点击分支名切换到对应分支页面:

切换分支

点击你想要修改的文件,进行在线编辑:

修改文件

修改完成后点击右上角提交变更,填写变更内容信息:

提交变更提交变更信息

发起 Pull Request 请求

你的修改完成后,在你 fork 的新仓库向主仓库发起 Pull Request:

创建 PR

提交时间很近的时候,GitHub 会提示快捷发起 PR 的操作按钮:

快速创建 PR

进入 PR 编辑页填写信息,请确认是从你的仓库的新分支,提向主仓库的主分支的:

主仓库 主分支 <- fork仓库 功能分支

填写 PR 信息

填写完成后,等待开发组进行 review,有时会给你提出一些修改建议。在你的 PR review 通过并合并后,功能分支就可以被删除了。

保持 fork 仓库与上游同步(可选)

如果之后还要提交新的 PR,建议先同步上游的主分支,再从同步后的主分支再新切分支进行操作。

如果你曾经修改了主分支,此处很可能会出现和上游分支有冲突的问题,需要你先手动解决冲突。

点击 Sync fork 进行同步。

与上游同步

',51)]))}const G=a(g,[["render",_]]);export{B as __pageData,G as default}; diff --git a/assets/about_license.md.DdpdFMxu.js b/assets/about_license.md.DdpdFMxu.js new file mode 100644 index 000000000..804a5bd22 --- /dev/null +++ b/assets/about_license.md.DdpdFMxu.js @@ -0,0 +1 @@ +import{_ as e,c as t,a6 as a,o}from"./chunks/framework.B1keMFNq.js";const u=JSON.parse('{"title":"许可协议","description":"","frontmatter":{"lang":"zh-cn","title":"许可协议"},"headers":[],"relativePath":"about/license.md","filePath":"about/license.md","lastUpdated":1714442589000}'),n={name:"about/license.md"};function r(s,p,c,i,l,d){return o(),t("div",null,p[0]||(p[0]=[a('

许可协议

进行使用即代表同意此声明:

尊敬的用户,欢迎您选择由木落等研发的海豹骰点核心(SealDice),在您使用海豹骰点核心前,请务必仔细阅读使用须知,使用即代表您已同意使用须知的内容,使用造成的任何后果与海豹开发组无关。

您需了解,海豹核心官方版只支持 TRPG 功能,娱乐功能定制化请自便,和海豹无关。

您清楚并明白您对通过骰子提供的全部内容负责,包括自定义回复、非自带的插件、牌堆。海豹骰不对非自身提供以外的内容合法性负责。您不得在使用海豹骰服务时,导入包括但不限于以下情形的内容:

(1) 反对中华人民共和国宪法所确定的基本原则的;

(2) 危害国家安全,泄露国家秘密,颠覆国家政权,破坏国家统一的;

(3) 损害国家荣誉和利益的;

(4) 煽动民族仇恨、民族歧视、破坏民族团结的;

(5) 破坏国家宗教政策,宣扬邪教和封建迷信的;

(6) 散布谣言,扰乱社会秩序,破坏社会稳定的;

(7) 散布淫秽、色情、赌博、暴力、凶杀、恐怖或者教唆犯罪的;

(8) 侮辱或者诽谤他人,侵害他人合法权益的;

(9) 宣扬、教唆使用外挂、私服、病毒、恶意代码、木马及其相关内容的;

(10) 侵犯他人知识产权或涉及第三方商业秘密及其他专有权利的;

(11) 散布任何贬损、诋毁、恶意攻击海豹骰及开发人员、海洋馆工作人员、mod 编写人员、关联合作者的;

(12) 含有中华人民共和国法律、行政法规、政策、上级主管部门下发通知中所禁止的其他内容的。

一旦您有以上禁止行为,请立即停用海豹骰。

',18)]))}const f=e(n,[["render",r]]);export{u as __pageData,f as default}; diff --git a/assets/about_license.md.DdpdFMxu.lean.js b/assets/about_license.md.DdpdFMxu.lean.js new file mode 100644 index 000000000..804a5bd22 --- /dev/null +++ b/assets/about_license.md.DdpdFMxu.lean.js @@ -0,0 +1 @@ +import{_ as e,c as t,a6 as a,o}from"./chunks/framework.B1keMFNq.js";const u=JSON.parse('{"title":"许可协议","description":"","frontmatter":{"lang":"zh-cn","title":"许可协议"},"headers":[],"relativePath":"about/license.md","filePath":"about/license.md","lastUpdated":1714442589000}'),n={name:"about/license.md"};function r(s,p,c,i,l,d){return o(),t("div",null,p[0]||(p[0]=[a('

许可协议

进行使用即代表同意此声明:

尊敬的用户,欢迎您选择由木落等研发的海豹骰点核心(SealDice),在您使用海豹骰点核心前,请务必仔细阅读使用须知,使用即代表您已同意使用须知的内容,使用造成的任何后果与海豹开发组无关。

您需了解,海豹核心官方版只支持 TRPG 功能,娱乐功能定制化请自便,和海豹无关。

您清楚并明白您对通过骰子提供的全部内容负责,包括自定义回复、非自带的插件、牌堆。海豹骰不对非自身提供以外的内容合法性负责。您不得在使用海豹骰服务时,导入包括但不限于以下情形的内容:

(1) 反对中华人民共和国宪法所确定的基本原则的;

(2) 危害国家安全,泄露国家秘密,颠覆国家政权,破坏国家统一的;

(3) 损害国家荣誉和利益的;

(4) 煽动民族仇恨、民族歧视、破坏民族团结的;

(5) 破坏国家宗教政策,宣扬邪教和封建迷信的;

(6) 散布谣言,扰乱社会秩序,破坏社会稳定的;

(7) 散布淫秽、色情、赌博、暴力、凶杀、恐怖或者教唆犯罪的;

(8) 侮辱或者诽谤他人,侵害他人合法权益的;

(9) 宣扬、教唆使用外挂、私服、病毒、恶意代码、木马及其相关内容的;

(10) 侵犯他人知识产权或涉及第三方商业秘密及其他专有权利的;

(11) 散布任何贬损、诋毁、恶意攻击海豹骰及开发人员、海洋馆工作人员、mod 编写人员、关联合作者的;

(12) 含有中华人民共和国法律、行政法规、政策、上级主管部门下发通知中所禁止的其他内容的。

一旦您有以上禁止行为,请立即停用海豹骰。

',18)]))}const f=e(n,[["render",r]]);export{u as __pageData,f as default}; diff --git a/assets/about_start-from-zero.md.BTAFBcyH.js b/assets/about_start-from-zero.md.BTAFBcyH.js new file mode 100644 index 000000000..147ade578 --- /dev/null +++ b/assets/about_start-from-zero.md.BTAFBcyH.js @@ -0,0 +1 @@ +import{_ as e,c as t,a6 as r,o as l}from"./chunks/framework.B1keMFNq.js";const f=JSON.parse('{"title":"从零开始","description":"","frontmatter":{"lang":"zh-cn","title":"从零开始"},"headers":[],"relativePath":"about/start-from-zero.md","filePath":"about/start-from-zero.md","lastUpdated":1723441920000}'),o={name:"about/start-from-zero.md"};function p(h,a,i,d,s,n){return l(),t("div",null,a[0]||(a[0]=[r('

从零开始

首先感谢你选用海豹核心。

我们将本手册的所有内容按照从零开始到深入定制的操作顺序重新排列成了本节的内容。我们推荐新用户按此顺序阅读手册。

在阅读本节时,我们建议你读完整段再点击链接跳转到对应内容。读完对应内容后,你可以立即付诸实践。然后,建议你回到本节,继续按此顺序阅读剩余内容。

如果你只需要详细了解某个特定话题,请你直接从导航栏查找对应分类。

1. 部署海豹

首先,你需要让海豹核心在你的服务器或电脑上运行起来。

如果你是从零开始部署,请阅读 快速开始

如果你之前部署过海豹核心,现在需要将旧部署转移到新的机器,请在阅读过新平台的部署方法后阅读 迁移

2. 连接平台

海豹核心成功运行后,你需要将它接入你希望的即时通讯平台。这样它才能接收和发送消息。

海豹目前支持了许多平台,开列如下。如果你还希望海豹接入更多平台,请你提出 Issue,我们会尽可能满足你的需求。

3. 熟悉海豹核心的功能

海豹核心提供了许多指令,它们是所有功能的中坚。

请阅读 基础概念,了解指令的基本格式。

然后,你可以熟悉一下海豹核心提供的不同自定义功能。你可能暂时不会用到所有的功能。但是,首先熟悉海豹核心能做到、不能做到哪些事,会对你的使用大有帮助。

请阅读这一章下面的各节,你可以跳过一些细节问题: 配置

4. 熟悉指令

我们推荐你简单浏览一遍各种指令。你不需要记住每个指令的所有细节,只要大概知道有什么指令,能够完成什么功能,就很足够了。

首先,请阅读 核心指令。这一节介绍了海豹核心最重要的一些指令。

然后,你可以阅读此章的剩余各节。它们按照扩展列出了每个指令的详细用法。

5. 进阶自定义

如果你希望自己动手,充分利用海豹核心提供的自定义能力,你需要对于海豹核心对不同功能的约定有所了解。

请你首先阅读 进阶介绍,然后阅读此章中你感兴趣的节。

',25)]))}const c=e(o,[["render",p]]);export{f as __pageData,c as default}; diff --git a/assets/about_start-from-zero.md.BTAFBcyH.lean.js b/assets/about_start-from-zero.md.BTAFBcyH.lean.js new file mode 100644 index 000000000..147ade578 --- /dev/null +++ b/assets/about_start-from-zero.md.BTAFBcyH.lean.js @@ -0,0 +1 @@ +import{_ as e,c as t,a6 as r,o as l}from"./chunks/framework.B1keMFNq.js";const f=JSON.parse('{"title":"从零开始","description":"","frontmatter":{"lang":"zh-cn","title":"从零开始"},"headers":[],"relativePath":"about/start-from-zero.md","filePath":"about/start-from-zero.md","lastUpdated":1723441920000}'),o={name:"about/start-from-zero.md"};function p(h,a,i,d,s,n){return l(),t("div",null,a[0]||(a[0]=[r('

从零开始

首先感谢你选用海豹核心。

我们将本手册的所有内容按照从零开始到深入定制的操作顺序重新排列成了本节的内容。我们推荐新用户按此顺序阅读手册。

在阅读本节时,我们建议你读完整段再点击链接跳转到对应内容。读完对应内容后,你可以立即付诸实践。然后,建议你回到本节,继续按此顺序阅读剩余内容。

如果你只需要详细了解某个特定话题,请你直接从导航栏查找对应分类。

1. 部署海豹

首先,你需要让海豹核心在你的服务器或电脑上运行起来。

如果你是从零开始部署,请阅读 快速开始

如果你之前部署过海豹核心,现在需要将旧部署转移到新的机器,请在阅读过新平台的部署方法后阅读 迁移

2. 连接平台

海豹核心成功运行后,你需要将它接入你希望的即时通讯平台。这样它才能接收和发送消息。

海豹目前支持了许多平台,开列如下。如果你还希望海豹接入更多平台,请你提出 Issue,我们会尽可能满足你的需求。

3. 熟悉海豹核心的功能

海豹核心提供了许多指令,它们是所有功能的中坚。

请阅读 基础概念,了解指令的基本格式。

然后,你可以熟悉一下海豹核心提供的不同自定义功能。你可能暂时不会用到所有的功能。但是,首先熟悉海豹核心能做到、不能做到哪些事,会对你的使用大有帮助。

请阅读这一章下面的各节,你可以跳过一些细节问题: 配置

4. 熟悉指令

我们推荐你简单浏览一遍各种指令。你不需要记住每个指令的所有细节,只要大概知道有什么指令,能够完成什么功能,就很足够了。

首先,请阅读 核心指令。这一节介绍了海豹核心最重要的一些指令。

然后,你可以阅读此章的剩余各节。它们按照扩展列出了每个指令的详细用法。

5. 进阶自定义

如果你希望自己动手,充分利用海豹核心提供的自定义能力,你需要对于海豹核心对不同功能的约定有所了解。

请你首先阅读 进阶介绍,然后阅读此章中你感兴趣的节。

',25)]))}const c=e(o,[["render",p]]);export{f as __pageData,c as default}; diff --git a/assets/advanced_README.md.CTnVKI7J.js b/assets/advanced_README.md.CTnVKI7J.js new file mode 100644 index 000000000..4c3368957 --- /dev/null +++ b/assets/advanced_README.md.CTnVKI7J.js @@ -0,0 +1 @@ +import{_ as l,c as a,a6 as t,o as i}from"./chunks/framework.B1keMFNq.js";const n=JSON.parse('{"title":"进阶","description":"","frontmatter":{"title":"进阶","index":false},"headers":[],"relativePath":"advanced/README.md","filePath":"advanced/README.md","lastUpdated":1728702230000}'),r={name:"advanced/README.md"};function s(d,e,h,m,c,o){return i(),a("div",null,e[0]||(e[0]=[t('',1)]))}const f=l(r,[["render",s]]);export{n as __pageData,f as default}; diff --git a/assets/advanced_README.md.CTnVKI7J.lean.js b/assets/advanced_README.md.CTnVKI7J.lean.js new file mode 100644 index 000000000..4c3368957 --- /dev/null +++ b/assets/advanced_README.md.CTnVKI7J.lean.js @@ -0,0 +1 @@ +import{_ as l,c as a,a6 as t,o as i}from"./chunks/framework.B1keMFNq.js";const n=JSON.parse('{"title":"进阶","description":"","frontmatter":{"title":"进阶","index":false},"headers":[],"relativePath":"advanced/README.md","filePath":"advanced/README.md","lastUpdated":1728702230000}'),r={name:"advanced/README.md"};function s(d,e,h,m,c,o){return i(),a("div",null,e[0]||(e[0]=[t('',1)]))}const f=l(r,[["render",s]]);export{n as __pageData,f as default}; diff --git a/assets/advanced_edit_complex_custom_text.md.38X_Lm4p.js b/assets/advanced_edit_complex_custom_text.md.38X_Lm4p.js new file mode 100644 index 000000000..8cc9104c4 --- /dev/null +++ b/assets/advanced_edit_complex_custom_text.md.38X_Lm4p.js @@ -0,0 +1,18 @@ +import{_ as o,c as p,a6 as n,j as a,G as e,B as c,o as i}from"./chunks/framework.B1keMFNq.js";const v=JSON.parse('{"title":"编写复杂文案","description":"","frontmatter":{"lang":"zh-cn","title":"编写复杂文案"},"headers":[],"relativePath":"advanced/edit_complex_custom_text.md","filePath":"advanced/edit_complex_custom_text.md","lastUpdated":1728702230000}'),l={name:"advanced/edit_complex_custom_text.md"},d={class:"info custom-block"},u={class:"info custom-block"};function r(h,t,m,q,b,g){const s=c("ChatBox");return i(),p("div",null,[t[2]||(t[2]=n(`

编写复杂文案

本节内容

本节将展示复杂文案的编写技巧,请善用侧边栏和搜索,按需阅读文档。

示例

根据骰点结果展示不同文案

在文案中通常会有结果变量,通过对结果变量的判断来实现展示不同文案。如修改 .r 骰点_单项结果文本 文案为例

text
{$t表达式文本}{$t计算过程}={$t计算结果}{%
+$t计算结果 == 100 ? " 乐!",
+$t计算结果 == 1 ? " 啧!"
+%}
`,6)),a("div",d,[t[0]||(t[0]=a("p",{class:"custom-block-title"},"示例",-1)),e(s,{messages:[{content:".r",send:!0},{content:"<木落>掷出了 D100=1 啧!"},{content:".r",send:!0},{content:"<木落>掷出了 D100=100 乐!"}]})]),t[3]||(t[3]=n(`

多套文案的实现

提示:了解自定义回复的编写

多套文案的实现一般需要用到「自定义回复」来提供切换命令,见 编写自定义回复

如果你想使用 JS 插件实现也是可以的,不过示例以更简单的自定义回复为例。

切换命令实现

正则匹配:mode switch(.*) 回复:

text
{%
+if $t1==""||$t1==" 默认" {$g文案模式 = 0; $t输出="默认模式启用"};
+if $t1==" 模式1" {$g文案模式 = 1; $t输出="模式1启用"};
+if $t1==" 模式2" {$g文案模式 = 2; $t输出="模式2启用"};
+if $t1!=""&&$t1!=" 默认"&&$t1!=" 模式1"&&$t1!=" 模式2" {$t输出=\`不存在指定模式{$t1}\`};
+$t输出
+%}

精确匹配:mode show 回复:

text
{%
+$g文案模式==0 ? "当前在默认模式",
+$g文案模式==1 ? "当前在模式1" ,
+$g文案模式==2 ? "当前在模式2"
+%}

文案调整

按如下模式调整你的自定义文案项:

text
{
+if $g文案模式 == 0 {$t目标文案 = \`(这里填你个性化的默认模式文案)\`};
+if $g文案模式 == 1 {$t目标文案 = \`(这里填你个性化的模式1文案)\`};
+if $g文案模式 == 2 {$t目标文案 = \`(这里填你个性化的模式2文案)\`}
+}{$t目标文案}

展示

以修改了 .jrrp 的文案为例:

`,12)),a("div",u,[t[1]||(t[1]=a("p",{class:"custom-block-title"},"示例",-1)),e(s,{messages:[{content:"mode show",send:!0},{content:"默认模式启用"},{content:"mode switch 模式1",send:!0},{content:"模式1启用"},{content:"mode show",send:!0},{content:"当前在模式1"},{content:".jrrp",send:!0},{content:"(这里填你个性化的模式1文案)"},{content:"mode switch 模式2",send:!0},{content:"模式2启用"},{content:".jrrp",send:!0},{content:"(这里填你个性化的模式2文案)"},{content:"mode switch",send:!0},{content:"默认模式启用"},{content:".jrrp",send:!0},{content:"(这里填你个性化的默认模式文案)"}]})])])}const x=o(l,[["render",r]]);export{v as __pageData,x as default}; diff --git a/assets/advanced_edit_complex_custom_text.md.38X_Lm4p.lean.js b/assets/advanced_edit_complex_custom_text.md.38X_Lm4p.lean.js new file mode 100644 index 000000000..8cc9104c4 --- /dev/null +++ b/assets/advanced_edit_complex_custom_text.md.38X_Lm4p.lean.js @@ -0,0 +1,18 @@ +import{_ as o,c as p,a6 as n,j as a,G as e,B as c,o as i}from"./chunks/framework.B1keMFNq.js";const v=JSON.parse('{"title":"编写复杂文案","description":"","frontmatter":{"lang":"zh-cn","title":"编写复杂文案"},"headers":[],"relativePath":"advanced/edit_complex_custom_text.md","filePath":"advanced/edit_complex_custom_text.md","lastUpdated":1728702230000}'),l={name:"advanced/edit_complex_custom_text.md"},d={class:"info custom-block"},u={class:"info custom-block"};function r(h,t,m,q,b,g){const s=c("ChatBox");return i(),p("div",null,[t[2]||(t[2]=n(`

编写复杂文案

本节内容

本节将展示复杂文案的编写技巧,请善用侧边栏和搜索,按需阅读文档。

示例

根据骰点结果展示不同文案

在文案中通常会有结果变量,通过对结果变量的判断来实现展示不同文案。如修改 .r 骰点_单项结果文本 文案为例

text
{$t表达式文本}{$t计算过程}={$t计算结果}{%
+$t计算结果 == 100 ? " 乐!",
+$t计算结果 == 1 ? " 啧!"
+%}
`,6)),a("div",d,[t[0]||(t[0]=a("p",{class:"custom-block-title"},"示例",-1)),e(s,{messages:[{content:".r",send:!0},{content:"<木落>掷出了 D100=1 啧!"},{content:".r",send:!0},{content:"<木落>掷出了 D100=100 乐!"}]})]),t[3]||(t[3]=n(`

多套文案的实现

提示:了解自定义回复的编写

多套文案的实现一般需要用到「自定义回复」来提供切换命令,见 编写自定义回复

如果你想使用 JS 插件实现也是可以的,不过示例以更简单的自定义回复为例。

切换命令实现

正则匹配:mode switch(.*) 回复:

text
{%
+if $t1==""||$t1==" 默认" {$g文案模式 = 0; $t输出="默认模式启用"};
+if $t1==" 模式1" {$g文案模式 = 1; $t输出="模式1启用"};
+if $t1==" 模式2" {$g文案模式 = 2; $t输出="模式2启用"};
+if $t1!=""&&$t1!=" 默认"&&$t1!=" 模式1"&&$t1!=" 模式2" {$t输出=\`不存在指定模式{$t1}\`};
+$t输出
+%}

精确匹配:mode show 回复:

text
{%
+$g文案模式==0 ? "当前在默认模式",
+$g文案模式==1 ? "当前在模式1" ,
+$g文案模式==2 ? "当前在模式2"
+%}

文案调整

按如下模式调整你的自定义文案项:

text
{
+if $g文案模式 == 0 {$t目标文案 = \`(这里填你个性化的默认模式文案)\`};
+if $g文案模式 == 1 {$t目标文案 = \`(这里填你个性化的模式1文案)\`};
+if $g文案模式 == 2 {$t目标文案 = \`(这里填你个性化的模式2文案)\`}
+}{$t目标文案}

展示

以修改了 .jrrp 的文案为例:

`,12)),a("div",u,[t[1]||(t[1]=a("p",{class:"custom-block-title"},"示例",-1)),e(s,{messages:[{content:"mode show",send:!0},{content:"默认模式启用"},{content:"mode switch 模式1",send:!0},{content:"模式1启用"},{content:"mode show",send:!0},{content:"当前在模式1"},{content:".jrrp",send:!0},{content:"(这里填你个性化的模式1文案)"},{content:"mode switch 模式2",send:!0},{content:"模式2启用"},{content:".jrrp",send:!0},{content:"(这里填你个性化的模式2文案)"},{content:"mode switch",send:!0},{content:"默认模式启用"},{content:".jrrp",send:!0},{content:"(这里填你个性化的默认模式文案)"}]})])])}const x=o(l,[["render",r]]);export{v as __pageData,x as default}; diff --git a/assets/advanced_edit_deck.md.DO1s6ASO.js b/assets/advanced_edit_deck.md.DO1s6ASO.js new file mode 100644 index 000000000..fec081efa --- /dev/null +++ b/assets/advanced_edit_deck.md.DO1s6ASO.js @@ -0,0 +1,319 @@ +import{_ as E,c as d,a6 as e,G as a,w as n,j as s,a as i,B as p,o as r}from"./chunks/framework.B1keMFNq.js";const o="/sealdice-manual-next/assets/edit-deck-pkg.8jg4vDyc.png",g="/sealdice-manual-next/assets/edit-deck-hide-key.Bk59lgX8.png",f=JSON.parse('{"title":"编写牌堆","description":"","frontmatter":{"lang":"zh-cn","title":"编写牌堆"},"headers":[],"relativePath":"advanced/edit_deck.md","filePath":"advanced/edit_deck.md","lastUpdated":1730085354000}'),c={name:"advanced/edit_deck.md"},y={class:"info custom-block"},u={class:"custom-block-title"},F={class:"warning custom-block"},C={id:"注释",tabindex:"-1"};function b(m,l,B,v,q,x){const t=p("PluginTabsTab"),h=p("Badge"),k=p("PluginTabs");return r(),d("div",null,[l[63]||(l[63]=e('

编写牌堆

本节内容

本节将介绍牌堆的编写,请善用侧边栏和搜索,按需阅读文档。

概览

海豹核心目前支持 tomljsonyaml 格式的牌堆。

如果对其中某种格式的语法有了解,建议选择熟悉的格式。如果都不了解,建议选择使用适用性最广的 json 格式。

当然,如果你的海豹版本较新,我们也非常推荐你尝试 toml 格式的牌堆编写。toml 格式诞生较晚,语法支持更多现代特性,海豹为这种格式的牌堆支持了更多功能。

注意:牌堆文件的编码

永远 使用「UTF-8 编码」来编写牌堆。

语法快速入门

我们将简单介绍 toml json yaml 的语法,仅说明牌堆编写中会用到的部分,帮助你快速了解它们。

提示:深入学习

我们也非常建议你系统地学习它们,可以参见这些文档或自行搜索:

注意:务必注意使用半角符号!

下面的语法中涉及到的符号都是 半角符号,如果你出现了奇怪的问题,记得检查是否在输入法的中文输入状态,导致输入了错误的符号。

比如应该为 , 却使用了 ,应该为 "" 却使用了 “”

使用专业的编辑器能帮助你检查这些问题。

',11)),a(k,{sharedStateKey:"deck-format"},{default:n(()=>[a(t,{label:"TOML"},{default:n(()=>l[0]||(l[0]=[s("h4",{id:"toml-注释",tabindex:"-1"},[i("TOML 注释 "),s("a",{class:"header-anchor",href:"#toml-注释","aria-label":'Permalink to "TOML 注释"'},"​")],-1),s("p",null,[i("注释以 "),s("code",null,"#"),i(" 开头,用来记录相关说明性内容。")],-1),s("div",{class:"language-toml vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"toml"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}},"# 这是注释")]),i(` +`),s("span",{class:"line"}),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"key = "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"value"'),s("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}}," # 注释也可以放在行尾")])])])],-1),s("h4",{id:"toml-键值对",tabindex:"-1"},[i("TOML 键值对 "),s("a",{class:"header-anchor",href:"#toml-键值对","aria-label":'Permalink to "TOML 键值对"'},"​")],-1),s("p",null,"「键值对」是 TOML 文档最基本的元素。",-1),s("div",{class:"language-toml vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"toml"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"key = "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"value"')])])])],-1),s("p",null,"键名在等号的左边而值在右边,键、等号和值必须在同一行(有些值可以跨多行),不允许没有值。",-1),s("p",null,"值需要是下述类型之一:",-1),s("ul",null,[s("li",null,[i("字符串:以 "),s("code",null,'""'),i(),s("code",null,"''"),i(" 或 "),s("code",null,'""" """'),i(" 包裹起来的一串文字")]),s("li",null,"整数、浮点数(即小数)"),s("li",null,[i("布尔值:"),s("code",null,"true"),i(" 和 "),s("code",null,"false")]),s("li",null,[i("日期或时刻:采用 RFC 3339 格式,如 "),s("code",null,"1919-08-10"),i(),s("code",null,"1919-08-10 11:45:14")]),s("li",null,[i("数组:"),s("code",null,"[]"),i(" 包裹的一系列值")]),s("li",null,[i("内联表:表的一种紧凑表示法,"),s("code",null,"{}"),i(" 包裹的一系列键值对")])],-1),s("p",null,"键值对后必须换行(或结束文件)。",-1),s("h4",{id:"toml-键名",tabindex:"-1"},[i("TOML 键名 "),s("a",{class:"header-anchor",href:"#toml-键名","aria-label":'Permalink to "TOML 键名"'},"​")],-1),s("p",null,[i("键名可以是裸键名,也可以是用 "),s("code",null,'""'),i(" 引起来的字符串,都将被看作是字符串(哪怕裸键是 "),s("code",null,"1234"),i(" 也是这样)。")],-1),s("ul",null,[s("li",null,[i("裸键只能包含 ASCII 字母,ASCII 数字,下划线和短横线(即只有 "),s("code",null,"A-Za-z0-9_-"),i(")。")]),s("li",null,"引号键则允许包含任何 Unicode 字符(如中文),支持转义;")],-1),s("div",{class:"warning custom-block"},[s("p",{class:"custom-block-title"},"注意:裸键名不支持中文"),s("p",null,"使用中文作为键名时,必须用引号包裹。")],-1),s("h4",{id:"toml-字符串",tabindex:"-1"},[i("TOML 字符串 "),s("a",{class:"header-anchor",href:"#toml-字符串","aria-label":'Permalink to "TOML 字符串"'},"​")],-1),s("p",null,[i("使用 "),s("code",null,'""'),i(" 或者 "),s("code",null,"''"),i(" 包裹的内容作为字符串。任何 Unicode 字符都可以使用,支持转义(如换行 "),s("code",null,"\\n"),i("、反斜杠 "),s("code",null,"\\\\"),i(")。")],-1),s("p",null,"如果字符串有很多行,可以使用多行字符串语法:",-1),s("div",{class:"language-toml vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"toml"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"key = "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"""')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"这是多行字符串的语法,它支持你直接使用换行。")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"不用再拼接 "),s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},"\\n"),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," 来换行了,好耶!")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"但是这样写在最前面会多出换行,因为第一行的空换行也直接读取了。")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"""')]),i(` +`),s("span",{class:"line"}),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"key2 = "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"""\\')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"这样写就没有开头的空行问题了。")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"""')])])])],-1),s("p",null,[i("多行换行符中,如果一行的最后一个非空白字符是未被转义的 "),s("code",null,"\\"),i(" 时,它会连同它后面的所有空白(包括换行)一起被去除,直到下一个非空白字符或结束引号为止。")],-1),s("h4",{id:"toml-表",tabindex:"-1"},[i("TOML 表 "),s("a",{class:"header-anchor",href:"#toml-表","aria-label":'Permalink to "TOML 表"'},"​")],-1),s("p",null,[i("表(哈希表、字典、对象,含义相同)是键值对的集合。「表头」为一个单独的 "),s("code",null,"[]"),i(" 包裹的行作为表名,后面的行都是该表的内容。")],-1),s("div",{class:"language-toml vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"toml"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"["),s("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},'"海豹核心"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},'"简介" = '),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"一个简单易用的跑团骰子系统"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},'"状态" = '),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"持续开发中"')]),i(` +`),s("span",{class:"line"}),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"["),s("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},'"狐狸核心"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},'"简介" = '),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"一个更加简单易用的跑团骰子系统(什"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},'"状态" = '),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"根本不存在"')])])])],-1),s("p",null,"以上结构相当于 JSON 中的:",-1),s("div",{class:"language-json vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"json"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"{")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "海豹核心"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": {")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "简介"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"一个简单易用的跑团骰子系统"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "状态"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"持续开发中"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," },")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "狐狸核心"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": {")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "简介"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"一个更加简单易用的跑团骰子系统(什"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "状态"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"根本不存在"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," }")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"}")])])])],-1),s("p",null,"表还有一种更紧凑的内联表示法,必须在同一行内,且不支持尾逗号:",-1),s("div",{class:"language-toml vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"toml"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},'"海豹核心" = { "简介" = '),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"一个简单易用的跑团骰子系统"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},', "状态" = '),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"持续开发中"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," }")])])])],-1),s("h4",{id:"toml-数组",tabindex:"-1"},[i("TOML 数组 "),s("a",{class:"header-anchor",href:"#toml-数组","aria-label":'Permalink to "TOML 数组"'},"​")],-1),s("p",null,[i("数组是用 "),s("code",null,"[]"),i(" 包裹的一系列值,子元素由 "),s("code",null,","),i(" 分隔。")],-1),s("div",{class:"language-toml vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"toml"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"TRPG = [")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," { name = "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"CoC"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},", version = "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"7"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," },")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," { name = "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"D&D"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},", version = "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"5e"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," }, "),s("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}},"# 多出一个逗号也是可以的")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")])])])],-1)])),_:1}),a(t,{label:"JSON"},{default:n(()=>[s("div",y,[s("p",u,[l[1]||(l[1]=i("JSON with Comment / JWCC ")),a(h,{type:"tip",text:"v1.4.4"})]),s("p",null,[l[2]||(l[2]=i("从 ")),a(h,{type:"tip",text:"v1.4.4"}),l[3]||(l[3]=i(" 起,海豹支持在牌堆中使用 ")),l[4]||(l[4]=s("a",{href:"https://nigeltao.github.io/blog/2021/json-with-commas-comments.html",target:"_blank",rel:"noreferrer"},"JSON With Commas and Comments",-1)),l[5]||(l[5]=i(" 。"))]),l[10]||(l[10]=s("p",null,"这是一种对标准 JSON 语法的扩展,允许在文件中使用 C/C++ 风格的注释,并允许 JSON 对象和数组的最后一个键值对和元素后带有逗号。",-1)),l[11]||(l[11]=s("p",null,"我们认为这种扩展有益于减少编写者的负担,又不会引入过多的非标准特性造成混乱。",-1)),s("p",null,[l[6]||(l[6]=i("从 ")),a(h,{type:"tip",text:"v1.4.5"}),l[7]||(l[7]=i(" 开始,海豹支持读取以 ")),l[8]||(l[8]=s("code",null,".jsonc",-1)),l[9]||(l[9]=i(" 为扩展名的牌堆文件。我们推荐采用这种方式,将使用扩展语法的牌堆与标准 JSON 牌堆区分开,以示它们的不同,但是否这样做取决于你的选择。"))])]),s("div",F,[l[14]||(l[14]=s("p",{class:"custom-block-title"},"注意",-1)),s("p",null,[l[12]||(l[12]=i("如果你使用 ")),a(h,{type:"warning",text:"v1.4.3"}),l[13]||(l[13]=i(" 或更早版本的海豹核心,你仍必须使用 标准 JSON 牌堆。"))])]),l[24]||(l[24]=s("h3",{id:"json-键值",tabindex:"-1"},[i("JSON 键值 "),s("a",{class:"header-anchor",href:"#json-键值","aria-label":'Permalink to "JSON 键值"'},"​")],-1)),l[25]||(l[25]=s("p",null,[i("JSON 键值对以 "),s("code",null,'"key": value'),i(" 的形式表达,需要包裹在 "),s("code",null,"{}"),i(" 或 "),s("code",null,"[]"),i(" 中。")],-1)),l[26]||(l[26]=s("div",{class:"language-json vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"json"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"{")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "key"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"value"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"}")])])])],-1)),l[27]||(l[27]=s("p",null,[i("其中键名必须用 "),s("code",null,'""'),i(" 包裹,值可以是如下类型:")],-1)),l[28]||(l[28]=s("ul",null,[s("li",null,"整数、浮点数(即小数)"),s("li",null,[i("字符串(由 "),s("code",null,'""'),i(" 包裹,不可以是 "),s("code",null,"''"),i(")")]),s("li",null,[i("布尔值("),s("code",null,"true"),i(" 或 "),s("code",null,"false"),i(")")]),s("li",null,[i("数组:由 "),s("code",null,"[]"),i(" 包裹的一组值")]),s("li",null,[i("对象:由 "),s("code",null,"{}"),i(" 包裹的一组键值对")]),s("li",null,[s("code",null,"null"),i(":空")])],-1)),l[29]||(l[29]=s("h3",{id:"json-数组",tabindex:"-1"},[i("JSON 数组 "),s("a",{class:"header-anchor",href:"#json-数组","aria-label":'Permalink to "JSON 数组"'},"​")],-1)),l[30]||(l[30]=s("p",null,[i("由 "),s("code",null,"[]"),i(" 包裹的一组值,使用 "),s("code",null,","),i(" 分割。")],-1)),l[31]||(l[31]=s("div",{class:"language-json vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"json"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"[")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "CoC"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "D&D"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")])])])],-1)),s("p",null,[l[15]||(l[15]=i("从 ")),a(h,{type:"tip",text:"v1.4.4"}),l[16]||(l[16]=i(" 版本开始支持尾逗号,即在数组尾部有多余逗号时不再报错。"))]),l[32]||(l[32]=s("div",{class:"language-json vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"json"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"[")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "CoC"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "D&D"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},", "),s("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}},"// 此处可以多出一个逗号")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")])])])],-1)),l[33]||(l[33]=s("h3",{id:"json-对象",tabindex:"-1"},[i("JSON 对象 "),s("a",{class:"header-anchor",href:"#json-对象","aria-label":'Permalink to "JSON 对象"'},"​")],-1)),l[34]||(l[34]=s("p",null,[i("由 "),s("code",null,"{}"),i(" 包裹的一组键值对,使用 "),s("code",null,","),i(" 分割。")],-1)),l[35]||(l[35]=s("div",{class:"language-json vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"json"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"{")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "海豹核心"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": {")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "简介"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"一个简单易用的跑团骰子系统"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "状态"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"持续开发中"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," },")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "狐狸核心"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": {")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "简介"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"一个更加简单易用的跑团骰子系统(什"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "状态"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"根本不存在"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," }")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"}")])])])],-1)),s("p",null,[l[17]||(l[17]=i("从 ")),a(h,{type:"tip",text:"v1.4.4"}),l[18]||(l[18]=i(" 版本开始支持尾逗号,即在对象尾部有多余逗号时不再报错。"))]),l[36]||(l[36]=s("div",{class:"language-json vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"json"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"{")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "海豹核心"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": {")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "简介"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"一个简单易用的跑团骰子系统"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "状态"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"持续开发中"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},", "),s("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}},"// 此处可以多出一个逗号")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," },")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "狐狸核心"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": {")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "简介"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"一个更加简单易用的跑团骰子系统(什"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "状态"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"根本不存在"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},", "),s("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}},"// 此处可以多出一个逗号")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," }, "),s("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}},"// 此处可以多出一个逗号")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"}")])])])],-1)),s("h3",C,[l[19]||(l[19]=i("注释 ")),a(h,{type:"tip",text:"v1.4.4"}),l[20]||(l[20]=i()),l[21]||(l[21]=s("a",{class:"header-anchor",href:"#注释","aria-label":'Permalink to "注释 "'},"​",-1))]),s("p",null,[l[22]||(l[22]=i("从 ")),a(h,{type:"tip",text:"v1.4.4"}),l[23]||(l[23]=i(" 开始支持 C/C++ 风格的注释。以下为简要说明。"))]),l[37]||(l[37]=s("h4",{id:"_1-行内注释",tabindex:"-1"},[i("1. 行内注释 "),s("a",{class:"header-anchor",href:"#_1-行内注释","aria-label":'Permalink to "1. 行内注释"'},"​")],-1)),l[38]||(l[38]=s("p",null,[i("以两个斜杠("),s("code",null,"//"),i(")开头,直到该行结束的所有文本都被视为注释。")],-1)),l[39]||(l[39]=s("h4",{id:"_2-注释块",tabindex:"-1"},[i("2. 注释块 "),s("a",{class:"header-anchor",href:"#_2-注释块","aria-label":'Permalink to "2. 注释块"'},"​")],-1)),l[40]||(l[40]=s("p",null,[i("从序列 "),s("code",null,"/*"),i(" 开始到随后出现的第一个 "),s("code",null,"*/"),i(" 序列为止的所有文本,包括换行,都被视为注释。")],-1))]),_:1}),a(t,{label:"YAML"},{default:n(()=>l[41]||(l[41]=[s("h3",{id:"yaml-注释",tabindex:"-1"},[i("YAML 注释 "),s("a",{class:"header-anchor",href:"#yaml-注释","aria-label":'Permalink to "YAML 注释"'},"​")],-1),s("p",null,[i("注释以 "),s("code",null,"#"),i(" 开头。")],-1),s("h3",{id:"yaml-键值",tabindex:"-1"},[i("YAML 键值 "),s("a",{class:"header-anchor",href:"#yaml-键值","aria-label":'Permalink to "YAML 键值"'},"​")],-1),s("p",null,[i("YAML 键值对使用冒号结构表示 "),s("code",null,"key: value"),i(",冒号后面要加一个空格。")],-1),s("p",null,"值可以是如下类型:",-1),s("ul",null,[s("li",null,[i("字符串: "),s("ul",null,[s("li",null,[i("直接表示:"),s("code",null,"这是一段字符串")]),s("li",null,[i("可以使用 "),s("code",null,'""'),i(" 或者 "),s("code",null,"''"),i("包裹,双引号不会对特殊字符转义:"),s("code",null,"'Hello world'")])])]),s("li",null,[i("布尔值:"),s("code",null,"true"),i(),s("code",null,"false")]),s("li",null,"整数、浮点数(即小数)"),s("li",null,[i("Null:用 "),s("code",null,"~"),i(" 表示")]),s("li",null,"时间、日期:采用 ISO8601 格式")],-1),s("h3",{id:"yaml-对象",tabindex:"-1"},[i("YAML 对象 "),s("a",{class:"header-anchor",href:"#yaml-对象","aria-label":'Permalink to "YAML 对象"'},"​")],-1),s("p",null,"可以使用行内语法表示对象:",-1),s("div",{class:"language-yaml vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"yaml"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"海豹核心"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": { "),s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"简介"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"一个简单易用的跑团骰子系统"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},", "),s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"状态"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"持续开发中"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," }")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"狐狸核心"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": { "),s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"简介"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"一个更加简单易用的跑团骰子系统(什"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},", "),s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"状态"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"根本不存在"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," }")])])])],-1),s("p",null,"也可以使用缩进层级表示对象关系(推荐):",-1),s("div",{class:"language-yaml vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"yaml"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"海豹核心"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},":")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}}," 简介"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"一个简单易用的跑团骰子系统")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}}," 状态"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"持续开发中")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"狐狸核心"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},":")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}}," 简介"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"一个更加简单易用的跑团骰子系统(什")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}}," 状态"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"根本不存在")])])])],-1),s("div",{class:"warning custom-block"},[s("p",{class:"custom-block-title"},"注意:缩进是有含义的"),s("p",null,"在 YAML 中,缩进是有含义的,缩进的长度表示了层级。"),s("p",null,[i("缩进不允许 tab,只允许使用空格。缩进的空格数并不重要,但"),s("strong",null,"相同层级的元素必须左对齐"),i("。")]),s("p",null,"当你在复制粘贴 YAML 文本时,请务必注意这一点,格式错乱会无法识别。")],-1),s("h3",{id:"yaml-数组",tabindex:"-1"},[i("YAML 数组 "),s("a",{class:"header-anchor",href:"#yaml-数组","aria-label":'Permalink to "YAML 数组"'},"​")],-1),s("p",null,"YAML 可以使用行内语法表示数组:",-1),s("div",{class:"language-yaml vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"yaml"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"[ "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"A"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},", "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"B"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},", "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"C"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ]")])])])],-1),s("p",null,[i("也可以使用以 "),s("code",null,"-"),i(" 开头的行表示构成一个数组:")],-1),s("div",{class:"language-yaml vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"yaml"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"- "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"A")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"- "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"B")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"- "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"C")])])])],-1),s("p",null,"数据结构的子成员是一个数组,则可以在该项下面缩进一个空格:",-1),s("div",{class:"language-yaml vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"yaml"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"TRPG"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},":")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," - "),s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"name"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"CoC")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}}," version"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"'7'")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," - "),s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"name"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"D&D")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}}," version"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"5e")])])])],-1),s("div",{class:"tip custom-block"},[s("p",{class:"custom-block-title"},"提示:复杂的 YAML"),s("p",null,"YAML 的语法极其灵活,同一种形式在 YAML 中可以有多种等价表示方法,这里只列出了常见的。"),s("p",null,"如果你在阅读其它人的 YAML 牌堆时遇上了看不懂的内容,建议通过更系统的教程学习。")],-1)])),_:1})]),_:1}),l[64]||(l[64]=e('

基础牌堆编写

海豹的抽取指令为 .draw <key>,而牌堆就是可以提供一些 key 作为牌组的文件。

我们从编写一个最简单的牌堆开始,我们希望:

  1. 这个牌堆有 快端上来罢数字论证 两个牌组;
    • .draw 快端上来罢 可以抽取出 哼哼哼啊啊啊啊啊 你是一个一个一个牌堆结果 这两个结果;
    • .draw 数字论证 可以抽取出 114514 1919810 这两个结果。
  2. 填写一些信息(如作者),便于分享。

这个牌堆编写如下,你可以选择以下任意一种格式来学习:

',5)),a(k,{sharedStateKey:"deck-format"},{default:n(()=>[a(t,{label:"TOML"},{default:n(()=>l[42]||(l[42]=[s("div",{class:"language-toml vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"toml"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}},"# 元信息表")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"["),s("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"meta"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"title = "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"野兽牌堆"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"author = "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"田所浩二"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}},"# 有多个作者时可以使用,两者仅需保留一行")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"authors = ["),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"田所浩二"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"version = "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"1.0"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"license = "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"CC-BY-NC-SA 4.0"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"date = "),s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},"1919-08-10")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"update_date = "),s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},"1919-08-10")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"desc = "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"这个示例牌堆怎么这么臭(恼)"')]),i(` +`),s("span",{class:"line"}),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}},"# 牌组表")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"["),s("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"decks"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},'"快端上来罢" = [')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "哼哼哼啊啊啊啊啊"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "你是一个一个一个牌堆结果"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},'"数字论证" = [')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "114514"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "1919810"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")])])])],-1),s("p",null,[i("一个 TOML 牌堆的最基本格式如上。其中 "),s("code",null,"meta"),i(" 表中的信息不是必须的,但我们非常建议你保留并填写这些项,它们能在分享时说明更多信息:")],-1),s("ul",null,[s("li",null,[s("code",null,"title"),i(":牌堆的标题;")]),s("li",null,[s("code",null,"author"),i("/"),s("code",null,"authors"),i(":牌堆作者;")]),s("li",null,[s("code",null,"date"),i(":牌堆创建日期;")]),s("li",null,[s("code",null,"updateDate"),i(":牌堆更新日期;")]),s("li",null,[s("code",null,"desc"),i(":牌堆简介;")]),s("li",null,[s("code",null,"version"),i(":牌堆版本;")]),s("li",null,[s("code",null,"license"),i(":牌堆协议。")])],-1),s("p",null,[i("可以将上述内容保存名为 "),s("code",null,"野兽牌堆.toml"),i("(名称任意,但必须是以 "),s("code",null,".toml"),i(" 为后缀扩展名)的文件进行测试。")],-1)])),_:1}),a(t,{label:"JSON"},{default:n(()=>l[43]||(l[43]=[s("div",{class:"language-json vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"json"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"{")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "_title"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": [ "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"野兽牌堆"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ],")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "_author"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": [ "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"田所浩二"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ],")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "_date"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": [ "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"1919-08-10"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ],")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "_updateDate"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": [ "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"1919-08-10"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ],")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "_brief"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": [ "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"这个示例牌堆怎么这么臭(恼)"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ],")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "_version"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": [ "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"1.0"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ],")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "_license"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": [ "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"CC-BY-NC-SA 4.0"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ],")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "快端上来罢"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": [")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "哼哼哼啊啊啊啊啊"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "你是一个一个一个牌堆结果"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ],")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "数字论证"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": [")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "114514"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "1919810"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ]")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"}")])])])],-1),s("p",null,[i("一个 JSON 牌堆的最基本格式如上。其中以 "),s("code",null,"_"),i(" 开头的项不是必须的,但是我们非常建议你保留并填写这些项,它们能在分享时说明更多信息:")],-1),s("ul",null,[s("li",null,[s("code",null,"_title"),i(":牌堆的标题;")]),s("li",null,[s("code",null,"_author"),i(":牌堆作者;")]),s("li",null,[s("code",null,"_date"),i(":牌堆创建日期;")]),s("li",null,[s("code",null,"_updateDate"),i(":牌堆更新日期;")]),s("li",null,[s("code",null,"_brief"),i(":牌堆简介;")]),s("li",null,[s("code",null,"_version"),i(":牌堆版本;")]),s("li",null,[s("code",null,"_license"),i(":牌堆协议。")])],-1),s("p",null,[i("可以将上述内容保存名为 "),s("code",null,"野兽牌堆.json"),i("(名称任意,但必须是以 "),s("code",null,".json"),i(" 为后缀扩展名)的文件进行测试。")],-1)])),_:1}),a(t,{label:"YAML"},{default:n(()=>l[44]||(l[44]=[s("div",{class:"language-yaml vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"yaml"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"name"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"野兽牌堆")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"author"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"田所浩二")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"version"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},"1")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"license"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"CC-BY-NC-SA 4.0")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"desc"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"这个示例牌堆怎么这么臭(恼)")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"command"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},":")]),i(` +`),s("span",{class:"line"}),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"快端上来罢"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},":")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," - "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"哼哼哼啊啊啊啊啊")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," - "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"你是一个一个一个牌堆结果")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"数字论证"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},":")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," - "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"'114514'")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," - "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"'1919810'")])])])],-1),s("p",null,"一个 YAML 牌堆的最基本格式如上。其中上半部分的一些项不是必须的,但是我们非常建议你保留并填写这些项,它们能在分享时说明更多信息:",-1),s("ul",null,[s("li",null,[s("code",null,"name"),i(":牌堆的标题;")]),s("li",null,[s("code",null,"author"),i(":牌堆作者;")]),s("li",null,[s("code",null,"version"),i(":牌堆版本,应是一个整数;")]),s("li",null,[s("code",null,"license"),i(":牌堆协议;")]),s("li",null,[s("code",null,"desc"),i(":牌堆简介。")])],-1),s("p",null,[i("可以将上述内容保存名为 "),s("code",null,"野兽牌堆.yaml"),i("(名称任意,但必须是以 "),s("code",null,".yaml"),i(" 或 "),s("code",null,".yml"),i(" 为后缀扩展名)的文件进行测试。")],-1)])),_:1})]),_:1}),l[65]||(l[65]=e('

注意:牌堆文件扩展名正确吗?

保存文件时务必确认开启了操作系统的扩展名显示,避免出现看上去保存了 xxx.json 文件,但实际上的文件名是 xxx.json.txt

牌堆语法

一个项中抽取其他项

牌堆抽取结果字符串中,可以实现抽取其他项,将内容拼接进该结果。

',5)),a(k,{sharedStateKey:"deck-format"},{default:n(()=>[a(t,{label:"TOML"},{default:n(()=>l[45]||(l[45]=[s("div",{class:"language-toml vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"toml"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"["),s("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"decks"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},'"时间点" = [')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "早上"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "中午"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "晚上"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},'"追尾了" = [')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "在{%时间点}追尾了一辆高级黑色轿车"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")])])])],-1)])),_:1}),a(t,{label:"JSON"},{default:n(()=>l[46]||(l[46]=[s("div",{class:"language-json vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"json"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"{")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "时间点"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": [")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "早上"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "中午"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "晚上"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ],")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "追尾了"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": [")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "在{%时间点}追尾了一辆高级黑色轿车"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ]")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"}")])])])],-1)])),_:1}),a(t,{label:"YAML"},{default:n(()=>l[47]||(l[47]=[s("div",{class:"warning custom-block"},[s("p",{class:"custom-block-title"},"注意:YAML 的放回表示"),s("p",null,"YAML 牌堆中的表示正好相反:"),s("ul",null,[s("li",null,[s("code",null,"{key}"),i(" 表示放回抽取;")]),s("li",null,[s("code",null,"{%key}"),i(" 表示不放回抽取。")])])],-1),s("div",{class:"language-yaml vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"yaml"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"时间点"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},":")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," - "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"早上")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," - "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"中午")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," - "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"晚上")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"追尾了"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},":")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," - "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"在{时间点}追尾了一辆高级黑色轿车")])])])],-1)])),_:1})]),_:1}),l[66]||(l[66]=e(`

放回抽取与不放回抽取

放回抽取,指此次抽取后抽取的牌组保持原样,每次都相当于从全新牌组中抽取,你仍可能抽到相同结果。

不放回抽取,尺度是一次抽牌指令,在这一次指令的执行过程中不会再从该牌组中抽到相同结果。多次抽取指令 draw 3# 牌组 只被视为一次指令,不放回抽取生效。指令执行结束后,将重置所有牌组到初始状态。

需要提到,带有权重调整的项目不会被视为在牌组中有多个副本。在下文中有详细讨论。

示例:不放回抽取

toml
[decks]
+"拷打木落" = [
+  "泡面偷走叉子调料包",
+  "捏碎所有薯片",
+  "用勺子把西瓜最中间的一块全挖走",
+]
+"拷打木落三次" = [ "{%拷打木落} {%拷打木落} {%拷打木落}" ]
+"不同方式拷打木落三次" = [ "{拷打木落} {拷打木落} {拷打木落}" ]

在此示例中,牌组「拷打木落三次」的项目采用了放回抽取,「不同方式拷打木落三次」采用了不放回抽取。

如果抽取 draw 拷打木落三次,得到的三个结果可能有重复。

如果抽取 draw 不同方式拷打木落三次,得到的三个结果将互不相同,但顺序是随机的。通过 draw 3# 拷打木落 也可达成类似的效果。

插入掷骰表达式

抽取结果字符串中的 [exp],会先执行其中的掷骰表达式 exp,再组合到原字符串里。

如:抽取 企鹅早该爆金币辣!v我[1d10]个金币 的结果可能是 企鹅早该爆金币辣!v我1个金币

补充:旧的实现

研究旧牌堆,可能会发现有牌堆通过下面这样的写法来实现这个功能,现在请不要这么做了

json
{
+  "数字": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
+  "爆金币": "企鹅早该爆金币辣!v我{%数字}个金币"
+}

权重

抽取结果字符串中最前面的 ::value:: 表示该项的权重。不含有该标记的项目被视为拥有默认权重 1。

示例:有 1/10 的几率出现闪光海豹

`,16)),a(k,{sharedStateKey:"deck-format"},{default:n(()=>[a(t,{label:"TOML"},{default:n(()=>l[48]||(l[48]=[s("div",{class:"language-toml vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"toml"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"["),s("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"decks"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},'"捕捉海豹" = [')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "::9::海豹"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "✨闪光海豹✨"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")])])])],-1)])),_:1}),a(t,{label:"JSON"},{default:n(()=>l[49]||(l[49]=[s("div",{class:"language-json vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"json"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"{")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "捕捉海豹"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": [")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "::9::海豹"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "✨闪光海豹✨"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ]")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"}")])])])],-1)])),_:1}),a(t,{label:"YAML"},{default:n(()=>l[50]||(l[50]=[s("div",{class:"language-yaml vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"yaml"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"捕捉海豹"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},":")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," - "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"::9::海豹")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," - "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"✨闪光海豹✨")])])])],-1)])),_:1})]),_:1}),l[67]||(l[67]=e(`

权重与不放回抽取

在使用不放回抽取的情况下,标记权重的项目不会被视为单个项目的多个副本。以上文的例子而言,牌组中仍被视为只有 2 个项目。

如果使用 draw 捕捉海豹 2# 进行抽取,一定会获得 1 个「海豹」和 1 个「✨闪光海豹✨」。

在这种情况下,权重影响的是抽出的顺序。你将以 9/10 的概率先抽出「海豹」,以 1/10 的概率先抽出「✨闪光海豹✨」。

补充:旧的实现

研究旧牌堆,可能会发现有牌堆通过下面这样的写法来实现这个功能,现在请不要这么做了

json
{
+  "捕捉海豹": [
+    "海豹", "海豹", "海豹", "海豹", "海豹", "海豹", "海豹", "海豹", "海豹",
+    "✨闪光海豹✨"
+  ]
+}

发送图片等

抽取结果字符串中可以插入 CQ 码和海豹码,比如 [图:data/images/sealdice.png]

牌堆打包

发布带图牌堆最常见的选择是牌堆文件连同图片打包成一个压缩包,但是这样做有诸多不便之处。

如果你不想发布时在压缩包里添加一个教程,告诉你的用户如何解压、图片要放到那个文件夹下、什么是相对路径……那就把牌堆打包成可以在海豹 UI 直接上传的 *.deck 文件吧。

信息

deck 文件在本质上依然是 zip 文件,修改后缀只是便于海豹识别。

假如牌堆文件内容如下(使用相对路径 ./assets/... ):

json
{
+  "test":["[图:./assets/1.jpg]"]
+}

则牌堆文件所在文件夹结构应是:

text
.
+├─assets
+│  └─1.jpg
+└─ test.json

选中牌堆文件和 assets 文件夹压缩为 ZIP 文件,修改文件后缀为 deck。

示例

图例中所使用的软件为 Bandizip,使用 Windows 右键菜单中的 压缩为 ZIP 文件 与之等价的。

注意:小心嵌套文件夹

以示例图中路径为例,不要回退到上一级目录然后选中 top 文件夹压缩。

牌组的隐藏和导出控制

.draw keys 指令会列出所有允许抽取的牌组,但在牌堆编写过程中,经常会需要用到辅助的牌组,这些辅助项是不希望暴露给用户的。我们可以通过一定方式来隐藏这些项。

',21)),a(k,{sharedStateKey:"deck-format"},{default:n(()=>[a(t,{label:"TOML"},{default:n(()=>l[51]||(l[51]=[s("p",null,[i("在 TOML 牌堆中,当牌组的名称以 "),s("code",null,"_"),i(" 开头,那么这个牌组将不会暴露在 "),s("code",null,".draw keys"),i(" 中。")],-1),s("div",{class:"language-toml vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"toml"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"["),s("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"decks"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},'"_时间点" = [')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "早上"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "中午"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "晚上"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},'"追尾了" = [')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "在{%_时间点}追尾了一辆高级黑色轿车"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")])])])],-1),s("p",null,[i("这样在 "),s("code",null,".draw keys"),i(" 中就不会展示 "),s("code",null,"_时间点"),i(" 这一牌组。")],-1)])),_:1}),a(t,{label:"JSON"},{default:n(()=>l[52]||(l[52]=[s("p",null,[i("在 JSON 牌堆中,可以通过配置牌堆文件的 "),s("code",null,"_keys"),i(" 指定所有显示的牌组,未指定在列表中的牌组将不会暴露在 "),s("code",null,".draw keys"),i(" 中。")],-1),s("div",{class:"language-json vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"json"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"{")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "_keys"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": [ "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"追尾了"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ],")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "时间点"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": [")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "早上"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "中午"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "晚上"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ],")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "追尾了"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": [")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "在{%时间点}追尾了一辆高级黑色轿车"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ]")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"}")])])])],-1),s("p",null,[i("这样在 "),s("code",null,".draw keys"),i(" 中就不会展示 "),s("code",null,"时间点"),i(" 这一牌组。")],-1)])),_:1}),a(t,{label:"YAML"},{default:n(()=>l[53]||(l[53]=[s("p",null,[i("YAML 牌堆"),s("strong",null,"没有支持"),i("这一功能。")],-1)])),_:1})]),_:1}),l[68]||(l[68]=s("p",null,[i("被隐藏的项不会在 "),s("code",null,".draw keys"),i(" 中展示,但依然可以通过指定 "),s("code",null,".draw "),i(" 的方法抽取。如果你希望某些牌组彻底隐藏,只能在牌堆内部调用,可以通过配置它们的导出来实现:")],-1)),a(k,{sharedStateKey:"deck-format"},{default:n(()=>[a(t,{label:"TOML"},{default:n(()=>l[54]||(l[54]=[s("p",null,[i("在 TOML 牌堆中,当牌组的名称以 "),s("code",null,"__"),i("(双下划线)开头,那么这个牌组将不导出,即无法使用 "),s("code",null,".draw "),i(" 进行抽取,更不会显示在列表中。")],-1),s("div",{class:"language-toml vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"toml"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"["),s("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"decks"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},'"__时间点" = [')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "早上"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "中午"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "晚上"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},'"追尾了" = [')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "在{%__时间点}追尾了一辆高级黑色轿车"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")])])])],-1)])),_:1}),a(t,{label:"JSON"},{default:n(()=>l[55]||(l[55]=[s("p",null,[i("在 JSON 牌堆中,当牌组的名称以 "),s("code",null,"_"),i(" 开头,那么这个牌组将不导出,即无法使用 "),s("code",null,".draw "),i(" 进行抽取,更不会显示在列表中。")],-1),s("div",{class:"language-json vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"json"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"{")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "_时间点"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": [")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "早上"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "中午"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "晚上"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ],")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "追尾了"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": [")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "在{%_时间点}追尾了一辆高级黑色轿车"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ]")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"}")])])])],-1),s("p",null,[i("这样 "),s("code",null,"_时间点"),i(" 这一牌组无法再用 "),s("code",null,".draw _时间点"),i(" 抽取了。")],-1),s("p",null,[i("此外,通过配置牌堆文件的 "),s("code",null,"_export"),i("/ "),s("code",null,"_exports"),i(" 可以指定所有的导出项。未指定在列表中的牌组将无法使用 "),s("code",null,".draw "),i(" 进行抽取,更不会显示在列表中。")],-1),s("div",{class:"language-json vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"json"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"{")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "_exports"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": [ "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"追尾了"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ],")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "时间点"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": [")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "早上"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "中午"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "晚上"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ],")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "追尾了"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": [")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "在{%时间点}追尾了一辆高级黑色轿车"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ]")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"}")])])])],-1)])),_:1}),a(t,{label:"YAML"},{default:n(()=>l[56]||(l[56]=[s("p",null,[i("如果在 YAML 牌堆中定义了 "),s("code",null,"default"),i(" 字段,海豹将以 "),s("code",null,"command"),i(" 字段的值为关键字,"),s("code",null,"default"),i(" 字段的值为内容组成一个牌组。除了这个牌组以外的牌组都被视为不导出。")],-1),s("div",{class:"language-yaml vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"yaml"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"command"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"追尾了")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"default"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},":")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," - "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"在{时间点}追尾了一辆高级黑色轿车"')]),i(` +`),s("span",{class:"line"}),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"时间点"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},":")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," - "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"早上")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," - "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"中午")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," - "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"晚上")])])])],-1),s("p",null,[i("在以上例子中,"),s("code",null,".draw keys"),i(" 将只列出 "),s("code",null,"追尾了"),i(";"),s("code",null,".draw 时间点"),i(" 将提示找不到牌组。")],-1)])),_:1})]),_:1}),l[69]||(l[69]=e('

提示:UI 中识别隐藏的牌组

你可以通过查看牌堆管理界面中的「牌堆列表」来识别牌组是否隐藏。

牌堆列表

灰色的牌组是隐藏的,即不展示在列表中,但能够被 .draw <key> 抽取。

未导出(不展示也不能抽取)的牌组不展示在该列表中。

配置牌堆更新

很多时候,牌堆内容不是一成不变的。而使用牌堆的用户需要手动去获取最新的牌堆,才能获得作者们提供的最新内容。

我们为牌堆提供了配置更新链接的机制,方便骰主快速获取牌堆更新。有能力的牌堆作者可以配置更新链接,便于分享最新的牌堆内容。

',4)),a(k,{sharedStateKey:"deck-format"},{default:n(()=>[a(t,{label:"TOML"},{default:n(()=>l[57]||(l[57]=[s("p",null,[i("配置牌堆文件的 "),s("code",null,"updateUrls"),i(" 以指定对应的更新链接:")],-1),s("div",{class:"language-toml vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"toml"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"["),s("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"meta"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"title = "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"野兽牌堆"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"updateUrls = [")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "https://updateurl.com"'),s("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}}," # 此处填写你的更新链接")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")]),i(` +`),s("span",{class:"line"}),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}},"# 牌组表")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"["),s("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"decks"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},'"快端上来罢" = [')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "哼哼哼啊啊啊啊啊"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "你是一个一个一个牌堆结果"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},'"数字论证" = [')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "114514"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "1919810"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")])])])],-1)])),_:1}),a(t,{label:"JSON"},{default:n(()=>l[58]||(l[58]=[s("p",null,[i("配置牌堆文件的 "),s("code",null,"_updateUrls"),i(" 以指定对应的更新链接:")],-1),s("div",{class:"language-json vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"json"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"{")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "_title"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": [ "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"野兽牌堆"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ],")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "_updateUrls"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": [ "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"https://updateurl.com"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ],")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "快端上来罢"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": [")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "哼哼哼啊啊啊啊啊"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "你是一个一个一个牌堆结果"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ],")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "数字论证"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": [")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "114514"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "1919810"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ]")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"}")])])])],-1)])),_:1}),a(t,{label:"YAML"},{default:n(()=>l[59]||(l[59]=[s("p",null,[i("配置牌堆文件的 "),s("code",null,"update_urls"),i(" 以指定对应的更新链接:")],-1),s("div",{class:"language-yaml vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"yaml"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"name"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"野兽牌堆")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"update_urls"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},":")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," - "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"'https://updateurl.com'")]),i(` +`),s("span",{class:"line"}),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"快端上来罢"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},":")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," - "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"哼哼哼啊啊啊啊啊")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," - "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"你是一个一个一个牌堆结果")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"数字论证"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},":")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," - "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"'114514'")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," - "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"'1919810'")])])])],-1)])),_:1})]),_:1}),l[70]||(l[70]=e('

有多个更新链接时,海豹将依次从上往下检查更新。

插入海豹内置脚本语言

抽取结果字符串中可以插入 海豹语

提示:特殊的括号

与在文案和自定义回复中插入海豹语使用 {} 不同,在牌堆中 {} 有其他含义,需要用 [] 代替 {}

',4)),a(k,{sharedStateKey:"deck-format"},{default:n(()=>[a(t,{label:"TOML"},{default:n(()=>l[60]||(l[60]=[s("div",{class:"language-toml vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"toml"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"["),s("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"decks"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},'"幸运转盘" = [')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "你抽到了114金币,你现在有[$m金币=$m金币+114]"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "你失去了514金币,你现在有[$m金币=$m金币-514]"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")])])])],-1)])),_:1}),a(t,{label:"JSON"},{default:n(()=>l[61]||(l[61]=[s("div",{class:"language-json vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"json"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"{")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "幸运转盘"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": [")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "你抽到了114金币,你现在有[$m金币=$m金币+114]"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "你失去了514金币,你现在有[$m金币=$m金币-514]"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ]")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"}")])])])],-1)])),_:1}),a(t,{label:"YAML"},{default:n(()=>l[62]||(l[62]=[s("div",{class:"language-yaml vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"yaml"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"幸运转盘"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},":")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," - "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"你抽到了114金币,你现在有[$m金币=$m金币+114]")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," - "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"你失去了514金币,你现在有[$m金币=$m金币-514]")])])])],-1)])),_:1})]),_:1}),l[71]||(l[71]=e(`

TOML 牌堆的更多功能

更多牌组设置

TOML 牌堆中,你可以以表的形式来创建更复杂的牌组,这允许你更精细的控制每个牌组的选项。

复杂牌组和普通牌组在使用上没有什么区别,仅仅是提供了配置选项的能力。

toml
[meta]
+title = "野兽牌堆"
+updateUrls = [
+  "https://updateurl.com" # 此处填写你的更新链接
+]
+
+# 简单牌组表
+[decks]
+"快端上来罢" = [
+  "哼哼哼啊啊啊啊啊",
+  "你是一个一个一个牌堆结果"
+]
+
+# 复杂牌组
+["数字论证"]
+export = true
+visible = true
+aliases = [ "恶臭论证" ]
+options = [
+  "114514",
+  "1919810",
+]

表名将作为这个牌组的名称,复杂牌组提供以下选项:

  • export:是否导出该牌组;
  • visible:该牌组是否可见,不可见的将不展示在 .draw keys 列表中;
  • aliases:牌组的别名,可以使用别名抽取改牌组,如上述示例中可以使用 .draw 数字论证.draw 恶臭论证 来抽取;
  • options:该牌组的项。

注意:设置的选项未生效?

注意,对应的选项名需要完全一致,否则海豹将无法正确解析。

aliases 不要误写成 aliasoptions 不要误写成 option

云端内容

某些情况下,我们希望牌堆内容能够自动更新,骰主无需反复更新骰子中装载的牌堆,用户也能抽取到最新内容。例如,一个实时更新的公骰列表牌堆。

海豹支持为牌堆提供云端内容,这需要牌堆作者有能力提供一个 API 接口,每次 配置了接口的牌组被抽取的时候,都会调用该接口获取该牌组的最新数据。

注意:不受控的云端内容

海豹核心无法核查从接口处获取的数据,骰主需要自行确认数据源不会返回你不希望骰子发出的信息。

对于提供了云端内容的牌堆,在海豹 Web UI 的牌端管理界面,会强制增加相应标识,以显示该牌堆提供了云端内容。

API 接口要求

海豹将以 HTTP GET 的方式请求对应接口,接口应当返回一个 JSON 字符串数组数据,其每个元素均是牌组的一个条目。

返回结果示例如下:

json
[
+  "3 = 11*-4+51-4",
+  "114 = 11*4+5*14",
+  "514 = (1-1)/4+514"
+]

牌堆配置云端内容

目前仅有 TOML 牌堆支持云端内容,示例如下:

toml
[meta]
+title = "野兽牌堆-云端内容示例"
+
+["114514种论证"]
+export = true
+visible = true
+options = [
+  "1 = 11/(45-1)*4",
+  "2 = -11+4-5+14",
+  "3 = 11*-4+51-4"
+]
+# 开启云内容
+cloud_extra = true
+# 云内容与本地内容去重
+dictinct = true
+# 云内容链接
+options_urls = [
+  "此处替换为对应的 API 链接,类似 http://example.com/xxx",
+]

假定上面填入了 API,它会返回上一节中的示例 JSON 字符串数组,即 ["3 = 11*-4+51-4", "114 = 11*4+5*14", "514 = (1-1)/4+514"]

正如上面示例中看到的那样,在 TOML 格式的复杂牌组中,有一些云端内容的相关配置项,每个牌组都可以单独控制云端相关设置。抽取牌组时,接口返回的数据将和牌组本身配置的 options 数组合并,最后的抽取是从合并的数组中进行。

  • cloud_extra:为 true 时,抽取本牌组时将请求接口获取云端数据;
  • options_urls:配置云端内容的 API 链接,链接能够配置多个。每次抽取这个牌组时,会依次调用配置的 API,在任意一个接口成功返回数据后即停止
  • distinct:为 true 时,云端数据与本地数据合并后会进行去重,确保最终抽取的牌组中不含重复条目。

以上述牌组为例,当执行 .draw 114514种论证 的时候,将首先调用 API 获取云端内容,成功获取后进行合并并去重,最终抽取的牌组相当于直接配置了这样的牌组:

toml
["114514种论证"]
+export = true
+visible = true
+options = [
+  "1 = 11/(45-1)*4",
+  "2 = -11+4-5+14",
+  "3 = 11*-4+51-4",
+  "114 = 11*4+5*14",
+  "514 = (1-1)/4+514"
+]
`,24))])}const D=E(c,[["render",b]]);export{f as __pageData,D as default}; diff --git a/assets/advanced_edit_deck.md.DO1s6ASO.lean.js b/assets/advanced_edit_deck.md.DO1s6ASO.lean.js new file mode 100644 index 000000000..fec081efa --- /dev/null +++ b/assets/advanced_edit_deck.md.DO1s6ASO.lean.js @@ -0,0 +1,319 @@ +import{_ as E,c as d,a6 as e,G as a,w as n,j as s,a as i,B as p,o as r}from"./chunks/framework.B1keMFNq.js";const o="/sealdice-manual-next/assets/edit-deck-pkg.8jg4vDyc.png",g="/sealdice-manual-next/assets/edit-deck-hide-key.Bk59lgX8.png",f=JSON.parse('{"title":"编写牌堆","description":"","frontmatter":{"lang":"zh-cn","title":"编写牌堆"},"headers":[],"relativePath":"advanced/edit_deck.md","filePath":"advanced/edit_deck.md","lastUpdated":1730085354000}'),c={name:"advanced/edit_deck.md"},y={class:"info custom-block"},u={class:"custom-block-title"},F={class:"warning custom-block"},C={id:"注释",tabindex:"-1"};function b(m,l,B,v,q,x){const t=p("PluginTabsTab"),h=p("Badge"),k=p("PluginTabs");return r(),d("div",null,[l[63]||(l[63]=e('

编写牌堆

本节内容

本节将介绍牌堆的编写,请善用侧边栏和搜索,按需阅读文档。

概览

海豹核心目前支持 tomljsonyaml 格式的牌堆。

如果对其中某种格式的语法有了解,建议选择熟悉的格式。如果都不了解,建议选择使用适用性最广的 json 格式。

当然,如果你的海豹版本较新,我们也非常推荐你尝试 toml 格式的牌堆编写。toml 格式诞生较晚,语法支持更多现代特性,海豹为这种格式的牌堆支持了更多功能。

注意:牌堆文件的编码

永远 使用「UTF-8 编码」来编写牌堆。

语法快速入门

我们将简单介绍 toml json yaml 的语法,仅说明牌堆编写中会用到的部分,帮助你快速了解它们。

提示:深入学习

我们也非常建议你系统地学习它们,可以参见这些文档或自行搜索:

注意:务必注意使用半角符号!

下面的语法中涉及到的符号都是 半角符号,如果你出现了奇怪的问题,记得检查是否在输入法的中文输入状态,导致输入了错误的符号。

比如应该为 , 却使用了 ,应该为 "" 却使用了 “”

使用专业的编辑器能帮助你检查这些问题。

',11)),a(k,{sharedStateKey:"deck-format"},{default:n(()=>[a(t,{label:"TOML"},{default:n(()=>l[0]||(l[0]=[s("h4",{id:"toml-注释",tabindex:"-1"},[i("TOML 注释 "),s("a",{class:"header-anchor",href:"#toml-注释","aria-label":'Permalink to "TOML 注释"'},"​")],-1),s("p",null,[i("注释以 "),s("code",null,"#"),i(" 开头,用来记录相关说明性内容。")],-1),s("div",{class:"language-toml vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"toml"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}},"# 这是注释")]),i(` +`),s("span",{class:"line"}),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"key = "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"value"'),s("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}}," # 注释也可以放在行尾")])])])],-1),s("h4",{id:"toml-键值对",tabindex:"-1"},[i("TOML 键值对 "),s("a",{class:"header-anchor",href:"#toml-键值对","aria-label":'Permalink to "TOML 键值对"'},"​")],-1),s("p",null,"「键值对」是 TOML 文档最基本的元素。",-1),s("div",{class:"language-toml vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"toml"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"key = "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"value"')])])])],-1),s("p",null,"键名在等号的左边而值在右边,键、等号和值必须在同一行(有些值可以跨多行),不允许没有值。",-1),s("p",null,"值需要是下述类型之一:",-1),s("ul",null,[s("li",null,[i("字符串:以 "),s("code",null,'""'),i(),s("code",null,"''"),i(" 或 "),s("code",null,'""" """'),i(" 包裹起来的一串文字")]),s("li",null,"整数、浮点数(即小数)"),s("li",null,[i("布尔值:"),s("code",null,"true"),i(" 和 "),s("code",null,"false")]),s("li",null,[i("日期或时刻:采用 RFC 3339 格式,如 "),s("code",null,"1919-08-10"),i(),s("code",null,"1919-08-10 11:45:14")]),s("li",null,[i("数组:"),s("code",null,"[]"),i(" 包裹的一系列值")]),s("li",null,[i("内联表:表的一种紧凑表示法,"),s("code",null,"{}"),i(" 包裹的一系列键值对")])],-1),s("p",null,"键值对后必须换行(或结束文件)。",-1),s("h4",{id:"toml-键名",tabindex:"-1"},[i("TOML 键名 "),s("a",{class:"header-anchor",href:"#toml-键名","aria-label":'Permalink to "TOML 键名"'},"​")],-1),s("p",null,[i("键名可以是裸键名,也可以是用 "),s("code",null,'""'),i(" 引起来的字符串,都将被看作是字符串(哪怕裸键是 "),s("code",null,"1234"),i(" 也是这样)。")],-1),s("ul",null,[s("li",null,[i("裸键只能包含 ASCII 字母,ASCII 数字,下划线和短横线(即只有 "),s("code",null,"A-Za-z0-9_-"),i(")。")]),s("li",null,"引号键则允许包含任何 Unicode 字符(如中文),支持转义;")],-1),s("div",{class:"warning custom-block"},[s("p",{class:"custom-block-title"},"注意:裸键名不支持中文"),s("p",null,"使用中文作为键名时,必须用引号包裹。")],-1),s("h4",{id:"toml-字符串",tabindex:"-1"},[i("TOML 字符串 "),s("a",{class:"header-anchor",href:"#toml-字符串","aria-label":'Permalink to "TOML 字符串"'},"​")],-1),s("p",null,[i("使用 "),s("code",null,'""'),i(" 或者 "),s("code",null,"''"),i(" 包裹的内容作为字符串。任何 Unicode 字符都可以使用,支持转义(如换行 "),s("code",null,"\\n"),i("、反斜杠 "),s("code",null,"\\\\"),i(")。")],-1),s("p",null,"如果字符串有很多行,可以使用多行字符串语法:",-1),s("div",{class:"language-toml vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"toml"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"key = "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"""')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"这是多行字符串的语法,它支持你直接使用换行。")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"不用再拼接 "),s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},"\\n"),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," 来换行了,好耶!")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"但是这样写在最前面会多出换行,因为第一行的空换行也直接读取了。")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"""')]),i(` +`),s("span",{class:"line"}),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"key2 = "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"""\\')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"这样写就没有开头的空行问题了。")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"""')])])])],-1),s("p",null,[i("多行换行符中,如果一行的最后一个非空白字符是未被转义的 "),s("code",null,"\\"),i(" 时,它会连同它后面的所有空白(包括换行)一起被去除,直到下一个非空白字符或结束引号为止。")],-1),s("h4",{id:"toml-表",tabindex:"-1"},[i("TOML 表 "),s("a",{class:"header-anchor",href:"#toml-表","aria-label":'Permalink to "TOML 表"'},"​")],-1),s("p",null,[i("表(哈希表、字典、对象,含义相同)是键值对的集合。「表头」为一个单独的 "),s("code",null,"[]"),i(" 包裹的行作为表名,后面的行都是该表的内容。")],-1),s("div",{class:"language-toml vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"toml"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"["),s("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},'"海豹核心"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},'"简介" = '),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"一个简单易用的跑团骰子系统"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},'"状态" = '),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"持续开发中"')]),i(` +`),s("span",{class:"line"}),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"["),s("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},'"狐狸核心"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},'"简介" = '),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"一个更加简单易用的跑团骰子系统(什"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},'"状态" = '),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"根本不存在"')])])])],-1),s("p",null,"以上结构相当于 JSON 中的:",-1),s("div",{class:"language-json vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"json"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"{")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "海豹核心"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": {")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "简介"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"一个简单易用的跑团骰子系统"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "状态"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"持续开发中"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," },")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "狐狸核心"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": {")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "简介"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"一个更加简单易用的跑团骰子系统(什"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "状态"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"根本不存在"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," }")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"}")])])])],-1),s("p",null,"表还有一种更紧凑的内联表示法,必须在同一行内,且不支持尾逗号:",-1),s("div",{class:"language-toml vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"toml"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},'"海豹核心" = { "简介" = '),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"一个简单易用的跑团骰子系统"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},', "状态" = '),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"持续开发中"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," }")])])])],-1),s("h4",{id:"toml-数组",tabindex:"-1"},[i("TOML 数组 "),s("a",{class:"header-anchor",href:"#toml-数组","aria-label":'Permalink to "TOML 数组"'},"​")],-1),s("p",null,[i("数组是用 "),s("code",null,"[]"),i(" 包裹的一系列值,子元素由 "),s("code",null,","),i(" 分隔。")],-1),s("div",{class:"language-toml vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"toml"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"TRPG = [")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," { name = "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"CoC"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},", version = "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"7"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," },")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," { name = "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"D&D"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},", version = "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"5e"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," }, "),s("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}},"# 多出一个逗号也是可以的")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")])])])],-1)])),_:1}),a(t,{label:"JSON"},{default:n(()=>[s("div",y,[s("p",u,[l[1]||(l[1]=i("JSON with Comment / JWCC ")),a(h,{type:"tip",text:"v1.4.4"})]),s("p",null,[l[2]||(l[2]=i("从 ")),a(h,{type:"tip",text:"v1.4.4"}),l[3]||(l[3]=i(" 起,海豹支持在牌堆中使用 ")),l[4]||(l[4]=s("a",{href:"https://nigeltao.github.io/blog/2021/json-with-commas-comments.html",target:"_blank",rel:"noreferrer"},"JSON With Commas and Comments",-1)),l[5]||(l[5]=i(" 。"))]),l[10]||(l[10]=s("p",null,"这是一种对标准 JSON 语法的扩展,允许在文件中使用 C/C++ 风格的注释,并允许 JSON 对象和数组的最后一个键值对和元素后带有逗号。",-1)),l[11]||(l[11]=s("p",null,"我们认为这种扩展有益于减少编写者的负担,又不会引入过多的非标准特性造成混乱。",-1)),s("p",null,[l[6]||(l[6]=i("从 ")),a(h,{type:"tip",text:"v1.4.5"}),l[7]||(l[7]=i(" 开始,海豹支持读取以 ")),l[8]||(l[8]=s("code",null,".jsonc",-1)),l[9]||(l[9]=i(" 为扩展名的牌堆文件。我们推荐采用这种方式,将使用扩展语法的牌堆与标准 JSON 牌堆区分开,以示它们的不同,但是否这样做取决于你的选择。"))])]),s("div",F,[l[14]||(l[14]=s("p",{class:"custom-block-title"},"注意",-1)),s("p",null,[l[12]||(l[12]=i("如果你使用 ")),a(h,{type:"warning",text:"v1.4.3"}),l[13]||(l[13]=i(" 或更早版本的海豹核心,你仍必须使用 标准 JSON 牌堆。"))])]),l[24]||(l[24]=s("h3",{id:"json-键值",tabindex:"-1"},[i("JSON 键值 "),s("a",{class:"header-anchor",href:"#json-键值","aria-label":'Permalink to "JSON 键值"'},"​")],-1)),l[25]||(l[25]=s("p",null,[i("JSON 键值对以 "),s("code",null,'"key": value'),i(" 的形式表达,需要包裹在 "),s("code",null,"{}"),i(" 或 "),s("code",null,"[]"),i(" 中。")],-1)),l[26]||(l[26]=s("div",{class:"language-json vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"json"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"{")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "key"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"value"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"}")])])])],-1)),l[27]||(l[27]=s("p",null,[i("其中键名必须用 "),s("code",null,'""'),i(" 包裹,值可以是如下类型:")],-1)),l[28]||(l[28]=s("ul",null,[s("li",null,"整数、浮点数(即小数)"),s("li",null,[i("字符串(由 "),s("code",null,'""'),i(" 包裹,不可以是 "),s("code",null,"''"),i(")")]),s("li",null,[i("布尔值("),s("code",null,"true"),i(" 或 "),s("code",null,"false"),i(")")]),s("li",null,[i("数组:由 "),s("code",null,"[]"),i(" 包裹的一组值")]),s("li",null,[i("对象:由 "),s("code",null,"{}"),i(" 包裹的一组键值对")]),s("li",null,[s("code",null,"null"),i(":空")])],-1)),l[29]||(l[29]=s("h3",{id:"json-数组",tabindex:"-1"},[i("JSON 数组 "),s("a",{class:"header-anchor",href:"#json-数组","aria-label":'Permalink to "JSON 数组"'},"​")],-1)),l[30]||(l[30]=s("p",null,[i("由 "),s("code",null,"[]"),i(" 包裹的一组值,使用 "),s("code",null,","),i(" 分割。")],-1)),l[31]||(l[31]=s("div",{class:"language-json vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"json"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"[")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "CoC"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "D&D"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")])])])],-1)),s("p",null,[l[15]||(l[15]=i("从 ")),a(h,{type:"tip",text:"v1.4.4"}),l[16]||(l[16]=i(" 版本开始支持尾逗号,即在数组尾部有多余逗号时不再报错。"))]),l[32]||(l[32]=s("div",{class:"language-json vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"json"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"[")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "CoC"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "D&D"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},", "),s("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}},"// 此处可以多出一个逗号")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")])])])],-1)),l[33]||(l[33]=s("h3",{id:"json-对象",tabindex:"-1"},[i("JSON 对象 "),s("a",{class:"header-anchor",href:"#json-对象","aria-label":'Permalink to "JSON 对象"'},"​")],-1)),l[34]||(l[34]=s("p",null,[i("由 "),s("code",null,"{}"),i(" 包裹的一组键值对,使用 "),s("code",null,","),i(" 分割。")],-1)),l[35]||(l[35]=s("div",{class:"language-json vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"json"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"{")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "海豹核心"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": {")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "简介"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"一个简单易用的跑团骰子系统"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "状态"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"持续开发中"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," },")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "狐狸核心"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": {")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "简介"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"一个更加简单易用的跑团骰子系统(什"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "状态"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"根本不存在"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," }")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"}")])])])],-1)),s("p",null,[l[17]||(l[17]=i("从 ")),a(h,{type:"tip",text:"v1.4.4"}),l[18]||(l[18]=i(" 版本开始支持尾逗号,即在对象尾部有多余逗号时不再报错。"))]),l[36]||(l[36]=s("div",{class:"language-json vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"json"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"{")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "海豹核心"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": {")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "简介"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"一个简单易用的跑团骰子系统"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "状态"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"持续开发中"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},", "),s("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}},"// 此处可以多出一个逗号")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," },")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "狐狸核心"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": {")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "简介"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"一个更加简单易用的跑团骰子系统(什"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "状态"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"根本不存在"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},", "),s("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}},"// 此处可以多出一个逗号")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," }, "),s("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}},"// 此处可以多出一个逗号")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"}")])])])],-1)),s("h3",C,[l[19]||(l[19]=i("注释 ")),a(h,{type:"tip",text:"v1.4.4"}),l[20]||(l[20]=i()),l[21]||(l[21]=s("a",{class:"header-anchor",href:"#注释","aria-label":'Permalink to "注释 "'},"​",-1))]),s("p",null,[l[22]||(l[22]=i("从 ")),a(h,{type:"tip",text:"v1.4.4"}),l[23]||(l[23]=i(" 开始支持 C/C++ 风格的注释。以下为简要说明。"))]),l[37]||(l[37]=s("h4",{id:"_1-行内注释",tabindex:"-1"},[i("1. 行内注释 "),s("a",{class:"header-anchor",href:"#_1-行内注释","aria-label":'Permalink to "1. 行内注释"'},"​")],-1)),l[38]||(l[38]=s("p",null,[i("以两个斜杠("),s("code",null,"//"),i(")开头,直到该行结束的所有文本都被视为注释。")],-1)),l[39]||(l[39]=s("h4",{id:"_2-注释块",tabindex:"-1"},[i("2. 注释块 "),s("a",{class:"header-anchor",href:"#_2-注释块","aria-label":'Permalink to "2. 注释块"'},"​")],-1)),l[40]||(l[40]=s("p",null,[i("从序列 "),s("code",null,"/*"),i(" 开始到随后出现的第一个 "),s("code",null,"*/"),i(" 序列为止的所有文本,包括换行,都被视为注释。")],-1))]),_:1}),a(t,{label:"YAML"},{default:n(()=>l[41]||(l[41]=[s("h3",{id:"yaml-注释",tabindex:"-1"},[i("YAML 注释 "),s("a",{class:"header-anchor",href:"#yaml-注释","aria-label":'Permalink to "YAML 注释"'},"​")],-1),s("p",null,[i("注释以 "),s("code",null,"#"),i(" 开头。")],-1),s("h3",{id:"yaml-键值",tabindex:"-1"},[i("YAML 键值 "),s("a",{class:"header-anchor",href:"#yaml-键值","aria-label":'Permalink to "YAML 键值"'},"​")],-1),s("p",null,[i("YAML 键值对使用冒号结构表示 "),s("code",null,"key: value"),i(",冒号后面要加一个空格。")],-1),s("p",null,"值可以是如下类型:",-1),s("ul",null,[s("li",null,[i("字符串: "),s("ul",null,[s("li",null,[i("直接表示:"),s("code",null,"这是一段字符串")]),s("li",null,[i("可以使用 "),s("code",null,'""'),i(" 或者 "),s("code",null,"''"),i("包裹,双引号不会对特殊字符转义:"),s("code",null,"'Hello world'")])])]),s("li",null,[i("布尔值:"),s("code",null,"true"),i(),s("code",null,"false")]),s("li",null,"整数、浮点数(即小数)"),s("li",null,[i("Null:用 "),s("code",null,"~"),i(" 表示")]),s("li",null,"时间、日期:采用 ISO8601 格式")],-1),s("h3",{id:"yaml-对象",tabindex:"-1"},[i("YAML 对象 "),s("a",{class:"header-anchor",href:"#yaml-对象","aria-label":'Permalink to "YAML 对象"'},"​")],-1),s("p",null,"可以使用行内语法表示对象:",-1),s("div",{class:"language-yaml vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"yaml"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"海豹核心"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": { "),s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"简介"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"一个简单易用的跑团骰子系统"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},", "),s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"状态"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"持续开发中"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," }")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"狐狸核心"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": { "),s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"简介"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"一个更加简单易用的跑团骰子系统(什"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},", "),s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"状态"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"根本不存在"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," }")])])])],-1),s("p",null,"也可以使用缩进层级表示对象关系(推荐):",-1),s("div",{class:"language-yaml vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"yaml"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"海豹核心"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},":")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}}," 简介"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"一个简单易用的跑团骰子系统")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}}," 状态"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"持续开发中")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"狐狸核心"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},":")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}}," 简介"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"一个更加简单易用的跑团骰子系统(什")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}}," 状态"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"根本不存在")])])])],-1),s("div",{class:"warning custom-block"},[s("p",{class:"custom-block-title"},"注意:缩进是有含义的"),s("p",null,"在 YAML 中,缩进是有含义的,缩进的长度表示了层级。"),s("p",null,[i("缩进不允许 tab,只允许使用空格。缩进的空格数并不重要,但"),s("strong",null,"相同层级的元素必须左对齐"),i("。")]),s("p",null,"当你在复制粘贴 YAML 文本时,请务必注意这一点,格式错乱会无法识别。")],-1),s("h3",{id:"yaml-数组",tabindex:"-1"},[i("YAML 数组 "),s("a",{class:"header-anchor",href:"#yaml-数组","aria-label":'Permalink to "YAML 数组"'},"​")],-1),s("p",null,"YAML 可以使用行内语法表示数组:",-1),s("div",{class:"language-yaml vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"yaml"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"[ "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"A"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},", "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"B"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},", "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"C"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ]")])])])],-1),s("p",null,[i("也可以使用以 "),s("code",null,"-"),i(" 开头的行表示构成一个数组:")],-1),s("div",{class:"language-yaml vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"yaml"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"- "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"A")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"- "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"B")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"- "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"C")])])])],-1),s("p",null,"数据结构的子成员是一个数组,则可以在该项下面缩进一个空格:",-1),s("div",{class:"language-yaml vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"yaml"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"TRPG"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},":")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," - "),s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"name"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"CoC")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}}," version"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"'7'")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," - "),s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"name"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"D&D")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}}," version"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"5e")])])])],-1),s("div",{class:"tip custom-block"},[s("p",{class:"custom-block-title"},"提示:复杂的 YAML"),s("p",null,"YAML 的语法极其灵活,同一种形式在 YAML 中可以有多种等价表示方法,这里只列出了常见的。"),s("p",null,"如果你在阅读其它人的 YAML 牌堆时遇上了看不懂的内容,建议通过更系统的教程学习。")],-1)])),_:1})]),_:1}),l[64]||(l[64]=e('

基础牌堆编写

海豹的抽取指令为 .draw <key>,而牌堆就是可以提供一些 key 作为牌组的文件。

我们从编写一个最简单的牌堆开始,我们希望:

  1. 这个牌堆有 快端上来罢数字论证 两个牌组;
    • .draw 快端上来罢 可以抽取出 哼哼哼啊啊啊啊啊 你是一个一个一个牌堆结果 这两个结果;
    • .draw 数字论证 可以抽取出 114514 1919810 这两个结果。
  2. 填写一些信息(如作者),便于分享。

这个牌堆编写如下,你可以选择以下任意一种格式来学习:

',5)),a(k,{sharedStateKey:"deck-format"},{default:n(()=>[a(t,{label:"TOML"},{default:n(()=>l[42]||(l[42]=[s("div",{class:"language-toml vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"toml"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}},"# 元信息表")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"["),s("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"meta"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"title = "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"野兽牌堆"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"author = "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"田所浩二"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}},"# 有多个作者时可以使用,两者仅需保留一行")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"authors = ["),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"田所浩二"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"version = "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"1.0"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"license = "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"CC-BY-NC-SA 4.0"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"date = "),s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},"1919-08-10")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"update_date = "),s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},"1919-08-10")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"desc = "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"这个示例牌堆怎么这么臭(恼)"')]),i(` +`),s("span",{class:"line"}),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}},"# 牌组表")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"["),s("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"decks"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},'"快端上来罢" = [')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "哼哼哼啊啊啊啊啊"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "你是一个一个一个牌堆结果"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},'"数字论证" = [')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "114514"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "1919810"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")])])])],-1),s("p",null,[i("一个 TOML 牌堆的最基本格式如上。其中 "),s("code",null,"meta"),i(" 表中的信息不是必须的,但我们非常建议你保留并填写这些项,它们能在分享时说明更多信息:")],-1),s("ul",null,[s("li",null,[s("code",null,"title"),i(":牌堆的标题;")]),s("li",null,[s("code",null,"author"),i("/"),s("code",null,"authors"),i(":牌堆作者;")]),s("li",null,[s("code",null,"date"),i(":牌堆创建日期;")]),s("li",null,[s("code",null,"updateDate"),i(":牌堆更新日期;")]),s("li",null,[s("code",null,"desc"),i(":牌堆简介;")]),s("li",null,[s("code",null,"version"),i(":牌堆版本;")]),s("li",null,[s("code",null,"license"),i(":牌堆协议。")])],-1),s("p",null,[i("可以将上述内容保存名为 "),s("code",null,"野兽牌堆.toml"),i("(名称任意,但必须是以 "),s("code",null,".toml"),i(" 为后缀扩展名)的文件进行测试。")],-1)])),_:1}),a(t,{label:"JSON"},{default:n(()=>l[43]||(l[43]=[s("div",{class:"language-json vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"json"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"{")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "_title"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": [ "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"野兽牌堆"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ],")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "_author"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": [ "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"田所浩二"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ],")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "_date"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": [ "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"1919-08-10"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ],")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "_updateDate"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": [ "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"1919-08-10"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ],")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "_brief"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": [ "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"这个示例牌堆怎么这么臭(恼)"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ],")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "_version"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": [ "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"1.0"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ],")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "_license"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": [ "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"CC-BY-NC-SA 4.0"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ],")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "快端上来罢"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": [")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "哼哼哼啊啊啊啊啊"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "你是一个一个一个牌堆结果"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ],")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "数字论证"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": [")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "114514"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "1919810"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ]")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"}")])])])],-1),s("p",null,[i("一个 JSON 牌堆的最基本格式如上。其中以 "),s("code",null,"_"),i(" 开头的项不是必须的,但是我们非常建议你保留并填写这些项,它们能在分享时说明更多信息:")],-1),s("ul",null,[s("li",null,[s("code",null,"_title"),i(":牌堆的标题;")]),s("li",null,[s("code",null,"_author"),i(":牌堆作者;")]),s("li",null,[s("code",null,"_date"),i(":牌堆创建日期;")]),s("li",null,[s("code",null,"_updateDate"),i(":牌堆更新日期;")]),s("li",null,[s("code",null,"_brief"),i(":牌堆简介;")]),s("li",null,[s("code",null,"_version"),i(":牌堆版本;")]),s("li",null,[s("code",null,"_license"),i(":牌堆协议。")])],-1),s("p",null,[i("可以将上述内容保存名为 "),s("code",null,"野兽牌堆.json"),i("(名称任意,但必须是以 "),s("code",null,".json"),i(" 为后缀扩展名)的文件进行测试。")],-1)])),_:1}),a(t,{label:"YAML"},{default:n(()=>l[44]||(l[44]=[s("div",{class:"language-yaml vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"yaml"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"name"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"野兽牌堆")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"author"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"田所浩二")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"version"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},"1")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"license"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"CC-BY-NC-SA 4.0")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"desc"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"这个示例牌堆怎么这么臭(恼)")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"command"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},":")]),i(` +`),s("span",{class:"line"}),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"快端上来罢"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},":")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," - "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"哼哼哼啊啊啊啊啊")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," - "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"你是一个一个一个牌堆结果")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"数字论证"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},":")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," - "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"'114514'")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," - "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"'1919810'")])])])],-1),s("p",null,"一个 YAML 牌堆的最基本格式如上。其中上半部分的一些项不是必须的,但是我们非常建议你保留并填写这些项,它们能在分享时说明更多信息:",-1),s("ul",null,[s("li",null,[s("code",null,"name"),i(":牌堆的标题;")]),s("li",null,[s("code",null,"author"),i(":牌堆作者;")]),s("li",null,[s("code",null,"version"),i(":牌堆版本,应是一个整数;")]),s("li",null,[s("code",null,"license"),i(":牌堆协议;")]),s("li",null,[s("code",null,"desc"),i(":牌堆简介。")])],-1),s("p",null,[i("可以将上述内容保存名为 "),s("code",null,"野兽牌堆.yaml"),i("(名称任意,但必须是以 "),s("code",null,".yaml"),i(" 或 "),s("code",null,".yml"),i(" 为后缀扩展名)的文件进行测试。")],-1)])),_:1})]),_:1}),l[65]||(l[65]=e('

注意:牌堆文件扩展名正确吗?

保存文件时务必确认开启了操作系统的扩展名显示,避免出现看上去保存了 xxx.json 文件,但实际上的文件名是 xxx.json.txt

牌堆语法

一个项中抽取其他项

牌堆抽取结果字符串中,可以实现抽取其他项,将内容拼接进该结果。

  • {key} 表示不放回抽取;
  • {%key} 表示放回抽取。
',5)),a(k,{sharedStateKey:"deck-format"},{default:n(()=>[a(t,{label:"TOML"},{default:n(()=>l[45]||(l[45]=[s("div",{class:"language-toml vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"toml"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"["),s("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"decks"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},'"时间点" = [')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "早上"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "中午"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "晚上"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},'"追尾了" = [')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "在{%时间点}追尾了一辆高级黑色轿车"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")])])])],-1)])),_:1}),a(t,{label:"JSON"},{default:n(()=>l[46]||(l[46]=[s("div",{class:"language-json vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"json"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"{")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "时间点"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": [")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "早上"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "中午"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "晚上"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ],")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "追尾了"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": [")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "在{%时间点}追尾了一辆高级黑色轿车"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ]")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"}")])])])],-1)])),_:1}),a(t,{label:"YAML"},{default:n(()=>l[47]||(l[47]=[s("div",{class:"warning custom-block"},[s("p",{class:"custom-block-title"},"注意:YAML 的放回表示"),s("p",null,"YAML 牌堆中的表示正好相反:"),s("ul",null,[s("li",null,[s("code",null,"{key}"),i(" 表示放回抽取;")]),s("li",null,[s("code",null,"{%key}"),i(" 表示不放回抽取。")])])],-1),s("div",{class:"language-yaml vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"yaml"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"时间点"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},":")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," - "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"早上")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," - "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"中午")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," - "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"晚上")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"追尾了"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},":")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," - "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"在{时间点}追尾了一辆高级黑色轿车")])])])],-1)])),_:1})]),_:1}),l[66]||(l[66]=e(`

放回抽取与不放回抽取

放回抽取,指此次抽取后抽取的牌组保持原样,每次都相当于从全新牌组中抽取,你仍可能抽到相同结果。

不放回抽取,尺度是一次抽牌指令,在这一次指令的执行过程中不会再从该牌组中抽到相同结果。多次抽取指令 draw 3# 牌组 只被视为一次指令,不放回抽取生效。指令执行结束后,将重置所有牌组到初始状态。

需要提到,带有权重调整的项目不会被视为在牌组中有多个副本。在下文中有详细讨论。

示例:不放回抽取

toml
[decks]
+"拷打木落" = [
+  "泡面偷走叉子调料包",
+  "捏碎所有薯片",
+  "用勺子把西瓜最中间的一块全挖走",
+]
+"拷打木落三次" = [ "{%拷打木落} {%拷打木落} {%拷打木落}" ]
+"不同方式拷打木落三次" = [ "{拷打木落} {拷打木落} {拷打木落}" ]

在此示例中,牌组「拷打木落三次」的项目采用了放回抽取,「不同方式拷打木落三次」采用了不放回抽取。

如果抽取 draw 拷打木落三次,得到的三个结果可能有重复。

如果抽取 draw 不同方式拷打木落三次,得到的三个结果将互不相同,但顺序是随机的。通过 draw 3# 拷打木落 也可达成类似的效果。

插入掷骰表达式

抽取结果字符串中的 [exp],会先执行其中的掷骰表达式 exp,再组合到原字符串里。

如:抽取 企鹅早该爆金币辣!v我[1d10]个金币 的结果可能是 企鹅早该爆金币辣!v我1个金币

补充:旧的实现

研究旧牌堆,可能会发现有牌堆通过下面这样的写法来实现这个功能,现在请不要这么做了

json
{
+  "数字": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
+  "爆金币": "企鹅早该爆金币辣!v我{%数字}个金币"
+}

权重

抽取结果字符串中最前面的 ::value:: 表示该项的权重。不含有该标记的项目被视为拥有默认权重 1。

示例:有 1/10 的几率出现闪光海豹

`,16)),a(k,{sharedStateKey:"deck-format"},{default:n(()=>[a(t,{label:"TOML"},{default:n(()=>l[48]||(l[48]=[s("div",{class:"language-toml vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"toml"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"["),s("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"decks"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},'"捕捉海豹" = [')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "::9::海豹"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "✨闪光海豹✨"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")])])])],-1)])),_:1}),a(t,{label:"JSON"},{default:n(()=>l[49]||(l[49]=[s("div",{class:"language-json vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"json"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"{")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "捕捉海豹"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": [")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "::9::海豹"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "✨闪光海豹✨"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ]")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"}")])])])],-1)])),_:1}),a(t,{label:"YAML"},{default:n(()=>l[50]||(l[50]=[s("div",{class:"language-yaml vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"yaml"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"捕捉海豹"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},":")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," - "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"::9::海豹")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," - "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"✨闪光海豹✨")])])])],-1)])),_:1})]),_:1}),l[67]||(l[67]=e(`

权重与不放回抽取

在使用不放回抽取的情况下,标记权重的项目不会被视为单个项目的多个副本。以上文的例子而言,牌组中仍被视为只有 2 个项目。

如果使用 draw 捕捉海豹 2# 进行抽取,一定会获得 1 个「海豹」和 1 个「✨闪光海豹✨」。

在这种情况下,权重影响的是抽出的顺序。你将以 9/10 的概率先抽出「海豹」,以 1/10 的概率先抽出「✨闪光海豹✨」。

补充:旧的实现

研究旧牌堆,可能会发现有牌堆通过下面这样的写法来实现这个功能,现在请不要这么做了

json
{
+  "捕捉海豹": [
+    "海豹", "海豹", "海豹", "海豹", "海豹", "海豹", "海豹", "海豹", "海豹",
+    "✨闪光海豹✨"
+  ]
+}

发送图片等

抽取结果字符串中可以插入 CQ 码和海豹码,比如 [图:data/images/sealdice.png]

牌堆打包

发布带图牌堆最常见的选择是牌堆文件连同图片打包成一个压缩包,但是这样做有诸多不便之处。

如果你不想发布时在压缩包里添加一个教程,告诉你的用户如何解压、图片要放到那个文件夹下、什么是相对路径……那就把牌堆打包成可以在海豹 UI 直接上传的 *.deck 文件吧。

信息

deck 文件在本质上依然是 zip 文件,修改后缀只是便于海豹识别。

假如牌堆文件内容如下(使用相对路径 ./assets/... ):

json
{
+  "test":["[图:./assets/1.jpg]"]
+}

则牌堆文件所在文件夹结构应是:

text
.
+├─assets
+│  └─1.jpg
+└─ test.json

选中牌堆文件和 assets 文件夹压缩为 ZIP 文件,修改文件后缀为 deck。

示例

图例中所使用的软件为 Bandizip,使用 Windows 右键菜单中的 压缩为 ZIP 文件 与之等价的。

注意:小心嵌套文件夹

以示例图中路径为例,不要回退到上一级目录然后选中 top 文件夹压缩。

牌组的隐藏和导出控制

.draw keys 指令会列出所有允许抽取的牌组,但在牌堆编写过程中,经常会需要用到辅助的牌组,这些辅助项是不希望暴露给用户的。我们可以通过一定方式来隐藏这些项。

',21)),a(k,{sharedStateKey:"deck-format"},{default:n(()=>[a(t,{label:"TOML"},{default:n(()=>l[51]||(l[51]=[s("p",null,[i("在 TOML 牌堆中,当牌组的名称以 "),s("code",null,"_"),i(" 开头,那么这个牌组将不会暴露在 "),s("code",null,".draw keys"),i(" 中。")],-1),s("div",{class:"language-toml vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"toml"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"["),s("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"decks"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},'"_时间点" = [')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "早上"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "中午"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "晚上"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},'"追尾了" = [')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "在{%_时间点}追尾了一辆高级黑色轿车"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")])])])],-1),s("p",null,[i("这样在 "),s("code",null,".draw keys"),i(" 中就不会展示 "),s("code",null,"_时间点"),i(" 这一牌组。")],-1)])),_:1}),a(t,{label:"JSON"},{default:n(()=>l[52]||(l[52]=[s("p",null,[i("在 JSON 牌堆中,可以通过配置牌堆文件的 "),s("code",null,"_keys"),i(" 指定所有显示的牌组,未指定在列表中的牌组将不会暴露在 "),s("code",null,".draw keys"),i(" 中。")],-1),s("div",{class:"language-json vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"json"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"{")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "_keys"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": [ "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"追尾了"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ],")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "时间点"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": [")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "早上"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "中午"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "晚上"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ],")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "追尾了"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": [")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "在{%时间点}追尾了一辆高级黑色轿车"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ]")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"}")])])])],-1),s("p",null,[i("这样在 "),s("code",null,".draw keys"),i(" 中就不会展示 "),s("code",null,"时间点"),i(" 这一牌组。")],-1)])),_:1}),a(t,{label:"YAML"},{default:n(()=>l[53]||(l[53]=[s("p",null,[i("YAML 牌堆"),s("strong",null,"没有支持"),i("这一功能。")],-1)])),_:1})]),_:1}),l[68]||(l[68]=s("p",null,[i("被隐藏的项不会在 "),s("code",null,".draw keys"),i(" 中展示,但依然可以通过指定 "),s("code",null,".draw "),i(" 的方法抽取。如果你希望某些牌组彻底隐藏,只能在牌堆内部调用,可以通过配置它们的导出来实现:")],-1)),a(k,{sharedStateKey:"deck-format"},{default:n(()=>[a(t,{label:"TOML"},{default:n(()=>l[54]||(l[54]=[s("p",null,[i("在 TOML 牌堆中,当牌组的名称以 "),s("code",null,"__"),i("(双下划线)开头,那么这个牌组将不导出,即无法使用 "),s("code",null,".draw "),i(" 进行抽取,更不会显示在列表中。")],-1),s("div",{class:"language-toml vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"toml"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"["),s("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"decks"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},'"__时间点" = [')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "早上"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "中午"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "晚上"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},'"追尾了" = [')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "在{%__时间点}追尾了一辆高级黑色轿车"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")])])])],-1)])),_:1}),a(t,{label:"JSON"},{default:n(()=>l[55]||(l[55]=[s("p",null,[i("在 JSON 牌堆中,当牌组的名称以 "),s("code",null,"_"),i(" 开头,那么这个牌组将不导出,即无法使用 "),s("code",null,".draw "),i(" 进行抽取,更不会显示在列表中。")],-1),s("div",{class:"language-json vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"json"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"{")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "_时间点"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": [")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "早上"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "中午"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "晚上"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ],")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "追尾了"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": [")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "在{%_时间点}追尾了一辆高级黑色轿车"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ]")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"}")])])])],-1),s("p",null,[i("这样 "),s("code",null,"_时间点"),i(" 这一牌组无法再用 "),s("code",null,".draw _时间点"),i(" 抽取了。")],-1),s("p",null,[i("此外,通过配置牌堆文件的 "),s("code",null,"_export"),i("/ "),s("code",null,"_exports"),i(" 可以指定所有的导出项。未指定在列表中的牌组将无法使用 "),s("code",null,".draw "),i(" 进行抽取,更不会显示在列表中。")],-1),s("div",{class:"language-json vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"json"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"{")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "_exports"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": [ "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"追尾了"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ],")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "时间点"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": [")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "早上"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "中午"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "晚上"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ],")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "追尾了"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": [")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "在{%时间点}追尾了一辆高级黑色轿车"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ]")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"}")])])])],-1)])),_:1}),a(t,{label:"YAML"},{default:n(()=>l[56]||(l[56]=[s("p",null,[i("如果在 YAML 牌堆中定义了 "),s("code",null,"default"),i(" 字段,海豹将以 "),s("code",null,"command"),i(" 字段的值为关键字,"),s("code",null,"default"),i(" 字段的值为内容组成一个牌组。除了这个牌组以外的牌组都被视为不导出。")],-1),s("div",{class:"language-yaml vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"yaml"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"command"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"追尾了")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"default"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},":")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," - "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"在{时间点}追尾了一辆高级黑色轿车"')]),i(` +`),s("span",{class:"line"}),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"时间点"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},":")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," - "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"早上")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," - "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"中午")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," - "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"晚上")])])])],-1),s("p",null,[i("在以上例子中,"),s("code",null,".draw keys"),i(" 将只列出 "),s("code",null,"追尾了"),i(";"),s("code",null,".draw 时间点"),i(" 将提示找不到牌组。")],-1)])),_:1})]),_:1}),l[69]||(l[69]=e('

提示:UI 中识别隐藏的牌组

你可以通过查看牌堆管理界面中的「牌堆列表」来识别牌组是否隐藏。

牌堆列表

灰色的牌组是隐藏的,即不展示在列表中,但能够被 .draw <key> 抽取。

未导出(不展示也不能抽取)的牌组不展示在该列表中。

配置牌堆更新

很多时候,牌堆内容不是一成不变的。而使用牌堆的用户需要手动去获取最新的牌堆,才能获得作者们提供的最新内容。

我们为牌堆提供了配置更新链接的机制,方便骰主快速获取牌堆更新。有能力的牌堆作者可以配置更新链接,便于分享最新的牌堆内容。

',4)),a(k,{sharedStateKey:"deck-format"},{default:n(()=>[a(t,{label:"TOML"},{default:n(()=>l[57]||(l[57]=[s("p",null,[i("配置牌堆文件的 "),s("code",null,"updateUrls"),i(" 以指定对应的更新链接:")],-1),s("div",{class:"language-toml vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"toml"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"["),s("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"meta"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"title = "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"野兽牌堆"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"updateUrls = [")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "https://updateurl.com"'),s("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}}," # 此处填写你的更新链接")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")]),i(` +`),s("span",{class:"line"}),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}},"# 牌组表")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"["),s("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"decks"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},'"快端上来罢" = [')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "哼哼哼啊啊啊啊啊"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "你是一个一个一个牌堆结果"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},'"数字论证" = [')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "114514"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "1919810"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")])])])],-1)])),_:1}),a(t,{label:"JSON"},{default:n(()=>l[58]||(l[58]=[s("p",null,[i("配置牌堆文件的 "),s("code",null,"_updateUrls"),i(" 以指定对应的更新链接:")],-1),s("div",{class:"language-json vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"json"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"{")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "_title"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": [ "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"野兽牌堆"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ],")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "_updateUrls"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": [ "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},'"https://updateurl.com"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ],")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "快端上来罢"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": [")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "哼哼哼啊啊啊啊啊"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "你是一个一个一个牌堆结果"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ],")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "数字论证"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": [")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "114514"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "1919810"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ]")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"}")])])])],-1)])),_:1}),a(t,{label:"YAML"},{default:n(()=>l[59]||(l[59]=[s("p",null,[i("配置牌堆文件的 "),s("code",null,"update_urls"),i(" 以指定对应的更新链接:")],-1),s("div",{class:"language-yaml vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"yaml"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"name"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"野兽牌堆")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"update_urls"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},":")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," - "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"'https://updateurl.com'")]),i(` +`),s("span",{class:"line"}),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"快端上来罢"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},":")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," - "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"哼哼哼啊啊啊啊啊")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," - "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"你是一个一个一个牌堆结果")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"数字论证"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},":")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," - "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"'114514'")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," - "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"'1919810'")])])])],-1)])),_:1})]),_:1}),l[70]||(l[70]=e('

有多个更新链接时,海豹将依次从上往下检查更新。

插入海豹内置脚本语言

抽取结果字符串中可以插入 海豹语

提示:特殊的括号

与在文案和自定义回复中插入海豹语使用 {} 不同,在牌堆中 {} 有其他含义,需要用 [] 代替 {}

',4)),a(k,{sharedStateKey:"deck-format"},{default:n(()=>[a(t,{label:"TOML"},{default:n(()=>l[60]||(l[60]=[s("div",{class:"language-toml vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"toml"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"["),s("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"decks"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},'"幸运转盘" = [')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "你抽到了114金币,你现在有[$m金币=$m金币+114]"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "你失去了514金币,你现在有[$m金币=$m金币-514]"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"]")])])])],-1)])),_:1}),a(t,{label:"JSON"},{default:n(()=>l[61]||(l[61]=[s("div",{class:"language-json vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"json"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"{")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}},' "幸运转盘"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},": [")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "你抽到了114金币,你现在有[$m金币=$m金币+114]"'),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},",")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},' "你失去了514金币,你现在有[$m金币=$m金币-514]"')]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," ]")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},"}")])])])],-1)])),_:1}),a(t,{label:"YAML"},{default:n(()=>l[62]||(l[62]=[s("div",{class:"language-yaml vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"yaml"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#22863A","--shiki-dark":"#85E89D"}},"幸运转盘"),s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}},":")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," - "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"你抽到了114金币,你现在有[$m金币=$m金币+114]")]),i(` +`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," - "),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},"你失去了514金币,你现在有[$m金币=$m金币-514]")])])])],-1)])),_:1})]),_:1}),l[71]||(l[71]=e(`

TOML 牌堆的更多功能

更多牌组设置

TOML 牌堆中,你可以以表的形式来创建更复杂的牌组,这允许你更精细的控制每个牌组的选项。

复杂牌组和普通牌组在使用上没有什么区别,仅仅是提供了配置选项的能力。

toml
[meta]
+title = "野兽牌堆"
+updateUrls = [
+  "https://updateurl.com" # 此处填写你的更新链接
+]
+
+# 简单牌组表
+[decks]
+"快端上来罢" = [
+  "哼哼哼啊啊啊啊啊",
+  "你是一个一个一个牌堆结果"
+]
+
+# 复杂牌组
+["数字论证"]
+export = true
+visible = true
+aliases = [ "恶臭论证" ]
+options = [
+  "114514",
+  "1919810",
+]

表名将作为这个牌组的名称,复杂牌组提供以下选项:

  • export:是否导出该牌组;
  • visible:该牌组是否可见,不可见的将不展示在 .draw keys 列表中;
  • aliases:牌组的别名,可以使用别名抽取改牌组,如上述示例中可以使用 .draw 数字论证.draw 恶臭论证 来抽取;
  • options:该牌组的项。

注意:设置的选项未生效?

注意,对应的选项名需要完全一致,否则海豹将无法正确解析。

aliases 不要误写成 aliasoptions 不要误写成 option

云端内容

某些情况下,我们希望牌堆内容能够自动更新,骰主无需反复更新骰子中装载的牌堆,用户也能抽取到最新内容。例如,一个实时更新的公骰列表牌堆。

海豹支持为牌堆提供云端内容,这需要牌堆作者有能力提供一个 API 接口,每次 配置了接口的牌组被抽取的时候,都会调用该接口获取该牌组的最新数据。

注意:不受控的云端内容

海豹核心无法核查从接口处获取的数据,骰主需要自行确认数据源不会返回你不希望骰子发出的信息。

对于提供了云端内容的牌堆,在海豹 Web UI 的牌端管理界面,会强制增加相应标识,以显示该牌堆提供了云端内容。

API 接口要求

海豹将以 HTTP GET 的方式请求对应接口,接口应当返回一个 JSON 字符串数组数据,其每个元素均是牌组的一个条目。

返回结果示例如下:

json
[
+  "3 = 11*-4+51-4",
+  "114 = 11*4+5*14",
+  "514 = (1-1)/4+514"
+]

牌堆配置云端内容

目前仅有 TOML 牌堆支持云端内容,示例如下:

toml
[meta]
+title = "野兽牌堆-云端内容示例"
+
+["114514种论证"]
+export = true
+visible = true
+options = [
+  "1 = 11/(45-1)*4",
+  "2 = -11+4-5+14",
+  "3 = 11*-4+51-4"
+]
+# 开启云内容
+cloud_extra = true
+# 云内容与本地内容去重
+dictinct = true
+# 云内容链接
+options_urls = [
+  "此处替换为对应的 API 链接,类似 http://example.com/xxx",
+]

假定上面填入了 API,它会返回上一节中的示例 JSON 字符串数组,即 ["3 = 11*-4+51-4", "114 = 11*4+5*14", "514 = (1-1)/4+514"]

正如上面示例中看到的那样,在 TOML 格式的复杂牌组中,有一些云端内容的相关配置项,每个牌组都可以单独控制云端相关设置。抽取牌组时,接口返回的数据将和牌组本身配置的 options 数组合并,最后的抽取是从合并的数组中进行。

  • cloud_extra:为 true 时,抽取本牌组时将请求接口获取云端数据;
  • options_urls:配置云端内容的 API 链接,链接能够配置多个。每次抽取这个牌组时,会依次调用配置的 API,在任意一个接口成功返回数据后即停止
  • distinct:为 true 时,云端数据与本地数据合并后会进行去重,确保最终抽取的牌组中不含重复条目。

以上述牌组为例,当执行 .draw 114514种论证 的时候,将首先调用 API 获取云端内容,成功获取后进行合并并去重,最终抽取的牌组相当于直接配置了这样的牌组:

toml
["114514种论证"]
+export = true
+visible = true
+options = [
+  "1 = 11/(45-1)*4",
+  "2 = -11+4-5+14",
+  "3 = 11*-4+51-4",
+  "114 = 11*4+5*14",
+  "514 = (1-1)/4+514"
+]
`,24))])}const D=E(c,[["render",b]]);export{f as __pageData,D as default}; diff --git a/assets/advanced_edit_helpdoc.md.ZRyFlmN1.js b/assets/advanced_edit_helpdoc.md.ZRyFlmN1.js new file mode 100644 index 000000000..d7a2950b5 --- /dev/null +++ b/assets/advanced_edit_helpdoc.md.ZRyFlmN1.js @@ -0,0 +1,29 @@ +import{_ as i,c as a,a6 as t,o as n}from"./chunks/framework.B1keMFNq.js";const c=JSON.parse('{"title":"编写帮助文档","description":"","frontmatter":{"lang":"zh-cn","title":"编写帮助文档"},"headers":[],"relativePath":"advanced/edit_helpdoc.md","filePath":"advanced/edit_helpdoc.md","lastUpdated":1714442589000}'),l={name:"advanced/edit_helpdoc.md"};function h(p,s,e,k,o,d){return n(),a("div",null,s[0]||(s[0]=[t(`

编写帮助文档

本节内容

本节将介绍帮助文档的编写,请善用侧边栏和搜索,按需阅读文档。

我们假定你已了解 JSON 格式。如果你对 JSON 还很陌生,可以阅读以下教程或自行在互联网搜索:

创建 JSON 格式的帮助文档

你可以直接按照以下格式书写 <helpdoc>.json

json
{
+  "mod": "名字",
+  "author": "作者",
+  "brief": "概述",
+  "comment": "备注",
+  "helpdoc": {
+    "词条A": "词条 A 的具体内容。",
+    "词条B": "词条 B 的具体内容。",
+    "词条C": "[图:data/images/sealdice.png] 词条 C 的图片与内容。"
+  }
+}

若你的文本需要换行,你可以使用 \\n 作为换行符,而不是在编写时直接换行,这会导致格式错误。你还可以使用 \\f{FormFeed} 作为分页符。

注意:标准 JSON 而不是 JSON5

海豹支持的 JSON 帮助文档是「标准 JSON」格式,诸如注释,尾逗号等语法不属于 JSON 语法,而是 JSON5 这个扩展标准的语法,出错时请严格检查。

目前暂不考虑支持 JSON5 标准。

注意:文件编码

永远使用 UTF-8 编码编写 helpdoc。

你可以在 JSON 格式的帮助文档中嵌套引用其它条目:

json
{
+  "helpdoc": {
+    "词条A": "词条 A 的具体内容。",
+    "词条B": "{词条A}词条 B 的具体内容。",
+    "词条C": "你还可以 {词条A}\\n{词条B}"
+  }
+}

如此一来当你发送 .help 词条 B 时,骰子将回复:「词条 A 的具体内容。词条 B 的具体内容。」。

示例文档:塔罗牌(节选)

json
{
+  "mod": "KIYTarot",
+  "author": "浣熊旅記",
+  "brief": "KIY 塔罗牌",
+  "comment": "释义来源网络。",
+  "helpdoc": {
+    "愚者逆位": "漂泊,冒险,鲁莽,冒失,疯狂,无视物质损失,灵魂堕落,内心空虚,感情轻浮。",
+    "魔术师逆位": "方向错误,被骗或失败,局面失控,二流角色,缺乏热忱和创造力,爱情难有进展。",
+    "女祭司逆位": "挑剔,贪心,目光短浅,洁癖,不适宜的激情,自尊心太强,锋芒外露,单相思。",
+    "女皇逆位": "冷淡,缺乏上进心,困难,享乐,环境险恶,贴近自然,自负,纠纷,感情挫折。",
+    "皇帝逆位": "幼稚,挫折,武断,滥用权利,冷酷,占有欲和控制力强烈,感情勉强。"
+  }
+}

创建 EXCEL 格式的帮助文档

你还可以按照以下格式书写 <helpdoc>.xlsx

KeySynonymContentDescriptionCatalogueTag
词条 A词条同义词词条内容对词条的简述所属目录内容 TAG
海豹骰豹骰/海豹/sealdice一个简单易用的跑团骰子系统。\\n形象是海豹,可以被叫做海豹骰、豹骰,豹子骰之类。

Excel 格式的 helpdoc 分为 KeySynonymContentDescriptionCatalogueTag 六块,其中第二列、后三项为选填,一般情况下你都可以留空。

  • Synonym 列可以填写多个同义词,使用 / 分隔即可。
  • Excel 中的词条内容可以直接换行(也可以使用 \\n 来换行,但不支持其它换行符与分页符),因此它常用来快速编写有大段文字的帮助文档。
  • 帮助文档所在工作表的名称会作为前缀加入词条。如将工作表命名为 测试,则对应的词条会显示为 测试:词条 A。由于海豹的 .find 指令会对词条进行模糊检索,所以你不必担心前缀对查询带来的影响。

注意:必须保留首行!

不要删去第一行的 KeySynonym 等词。请从第二行开始编写词条。

提示:EXCEL 格式的帮助文档

<helpdoc>.xlsx 原本是梨骰用于 D&D 词条查询的格式,但海豹同样可以读取它。

`,20)]))}const r=i(l,[["render",h]]);export{c as __pageData,r as default}; diff --git a/assets/advanced_edit_helpdoc.md.ZRyFlmN1.lean.js b/assets/advanced_edit_helpdoc.md.ZRyFlmN1.lean.js new file mode 100644 index 000000000..d7a2950b5 --- /dev/null +++ b/assets/advanced_edit_helpdoc.md.ZRyFlmN1.lean.js @@ -0,0 +1,29 @@ +import{_ as i,c as a,a6 as t,o as n}from"./chunks/framework.B1keMFNq.js";const c=JSON.parse('{"title":"编写帮助文档","description":"","frontmatter":{"lang":"zh-cn","title":"编写帮助文档"},"headers":[],"relativePath":"advanced/edit_helpdoc.md","filePath":"advanced/edit_helpdoc.md","lastUpdated":1714442589000}'),l={name:"advanced/edit_helpdoc.md"};function h(p,s,e,k,o,d){return n(),a("div",null,s[0]||(s[0]=[t(`

编写帮助文档

本节内容

本节将介绍帮助文档的编写,请善用侧边栏和搜索,按需阅读文档。

我们假定你已了解 JSON 格式。如果你对 JSON 还很陌生,可以阅读以下教程或自行在互联网搜索:

创建 JSON 格式的帮助文档

你可以直接按照以下格式书写 <helpdoc>.json

json
{
+  "mod": "名字",
+  "author": "作者",
+  "brief": "概述",
+  "comment": "备注",
+  "helpdoc": {
+    "词条A": "词条 A 的具体内容。",
+    "词条B": "词条 B 的具体内容。",
+    "词条C": "[图:data/images/sealdice.png] 词条 C 的图片与内容。"
+  }
+}

若你的文本需要换行,你可以使用 \\n 作为换行符,而不是在编写时直接换行,这会导致格式错误。你还可以使用 \\f{FormFeed} 作为分页符。

注意:标准 JSON 而不是 JSON5

海豹支持的 JSON 帮助文档是「标准 JSON」格式,诸如注释,尾逗号等语法不属于 JSON 语法,而是 JSON5 这个扩展标准的语法,出错时请严格检查。

目前暂不考虑支持 JSON5 标准。

注意:文件编码

永远使用 UTF-8 编码编写 helpdoc。

你可以在 JSON 格式的帮助文档中嵌套引用其它条目:

json
{
+  "helpdoc": {
+    "词条A": "词条 A 的具体内容。",
+    "词条B": "{词条A}词条 B 的具体内容。",
+    "词条C": "你还可以 {词条A}\\n{词条B}"
+  }
+}

如此一来当你发送 .help 词条 B 时,骰子将回复:「词条 A 的具体内容。词条 B 的具体内容。」。

示例文档:塔罗牌(节选)

json
{
+  "mod": "KIYTarot",
+  "author": "浣熊旅記",
+  "brief": "KIY 塔罗牌",
+  "comment": "释义来源网络。",
+  "helpdoc": {
+    "愚者逆位": "漂泊,冒险,鲁莽,冒失,疯狂,无视物质损失,灵魂堕落,内心空虚,感情轻浮。",
+    "魔术师逆位": "方向错误,被骗或失败,局面失控,二流角色,缺乏热忱和创造力,爱情难有进展。",
+    "女祭司逆位": "挑剔,贪心,目光短浅,洁癖,不适宜的激情,自尊心太强,锋芒外露,单相思。",
+    "女皇逆位": "冷淡,缺乏上进心,困难,享乐,环境险恶,贴近自然,自负,纠纷,感情挫折。",
+    "皇帝逆位": "幼稚,挫折,武断,滥用权利,冷酷,占有欲和控制力强烈,感情勉强。"
+  }
+}

创建 EXCEL 格式的帮助文档

你还可以按照以下格式书写 <helpdoc>.xlsx

KeySynonymContentDescriptionCatalogueTag
词条 A词条同义词词条内容对词条的简述所属目录内容 TAG
海豹骰豹骰/海豹/sealdice一个简单易用的跑团骰子系统。\\n形象是海豹,可以被叫做海豹骰、豹骰,豹子骰之类。

Excel 格式的 helpdoc 分为 KeySynonymContentDescriptionCatalogueTag 六块,其中第二列、后三项为选填,一般情况下你都可以留空。

  • Synonym 列可以填写多个同义词,使用 / 分隔即可。
  • Excel 中的词条内容可以直接换行(也可以使用 \\n 来换行,但不支持其它换行符与分页符),因此它常用来快速编写有大段文字的帮助文档。
  • 帮助文档所在工作表的名称会作为前缀加入词条。如将工作表命名为 测试,则对应的词条会显示为 测试:词条 A。由于海豹的 .find 指令会对词条进行模糊检索,所以你不必担心前缀对查询带来的影响。

注意:必须保留首行!

不要删去第一行的 KeySynonym 等词。请从第二行开始编写词条。

提示:EXCEL 格式的帮助文档

<helpdoc>.xlsx 原本是梨骰用于 D&D 词条查询的格式,但海豹同样可以读取它。

`,20)]))}const r=i(l,[["render",h]]);export{c as __pageData,r as default}; diff --git a/assets/advanced_edit_reply.md.DYzHFtyI.js b/assets/advanced_edit_reply.md.DYzHFtyI.js new file mode 100644 index 000000000..255f68bfd --- /dev/null +++ b/assets/advanced_edit_reply.md.DYzHFtyI.js @@ -0,0 +1,97 @@ +import{_ as c,c as d,a6 as t,j as n,G as a,w as p,B as l,o as r}from"./chunks/framework.B1keMFNq.js";const h="/sealdice-manual-next/assets/edit-reply-random-pic.BERq9XNC.png",u="/sealdice-manual-next/assets/edit-reply-single-person-mod1.CcMT0-k7.png",k="/sealdice-manual-next/assets/edit-reply-single-person-mod2.RQYejdzJ.png",m="/sealdice-manual-next/assets/edit-reply-single-person-mod3.a_KOIlqv.png",A=JSON.parse('{"title":"编写自定义回复","description":"","frontmatter":{"lang":"zh-cn","title":"编写自定义回复"},"headers":[],"relativePath":"advanced/edit_reply.md","filePath":"advanced/edit_reply.md","lastUpdated":1728702230000}'),g={name:"advanced/edit_reply.md"},b={class:"info custom-block"},$={class:"info custom-block"},x={class:"info custom-block"},v={class:"info custom-block"},y={class:"info custom-block"};function f(q,s,E,C,P,D){const e=l("ChatBox"),i=l("PluginTabsTab"),o=l("PluginTabs");return r(),d("div",null,[s[5]||(s[5]=t(`

编写自定义回复

本节内容

本节将展示自定义回复编写的进阶部分,请善用侧边栏和搜索,按需阅读文档。

我们假定你已经阅读了自定义回复编写的 基础部分(「配置 - 自定义回复」节)。如果你还没有阅读该章节,请先阅读这一节。

在部分内容中,我们假定你了解海豹变量机制和正则表达式。如果你对正则表达式还很陌生,可以参考以下材料,或在互联网自行搜索学习。

海豹核心跟随 Go 语言,采用 RE2 规范。该规范与其他规范在个别扩展语法上存在细微差别,请注意辨析。

在使用 Regex 101 网站时,请注意在左侧的「FLAVOR」栏选中「Golang」,以确保正则表达式的表现一致。

第一个自定义回复

首先我们打开「自定义回复」页,新建一项自定义回复。

提示:使用 .text 帮助测试

.text <文本> 将是你的一大助力,它会输出后面文本的执行结果,你可以将它看成不需要触发词的自定义回复。

当然,在采用 .text 指令进行 debug 时,可能出现因为测试的内容对变量造成影响,而不得不频繁复制黏贴清空指令的情况。此时建议专门开一个一两个字即可触发的自定义回复,用来测试。

提示:嵌入 CQ 码

返回内容可以嵌入 CQ 码。CQ 码文档见 CQ 码列表

自定义回复中分「条件」和「结果」两个部分。在 配置 - 自定义回复 中,我们已经了解了一些简单的回复编写,下面将补充介绍进阶内容。

触发条件

文本匹配:模糊匹配

模糊匹配将比较收到的消息与指定文本,内容相似时触发。

比较定义在 dice/ext_reply_logic.go 中,内容 jaro 和 hamming 平均值高于阈值(0.7)被认为是相似:

go
func strCompare(a string, b string) float64 {
+	va := strsim.Compare(a, b, strsim.Jaro())
+	vb := strsim.Compare(a, b, strsim.Hamming())
+	return (va + vb) / 2
+}

提示:模糊匹配未命中

模糊匹配可能出现感觉能匹配上,但实际上没办法匹配上的情况。我们更建议你使用「包含文本」或「正则匹配」。

文本匹配:正则匹配

使用正则匹配时,直接在要匹配的文本一栏中写入正则表达式即可。当正则表达式获得匹配时,该条件得到满足。

对于正则表达式中的捕获组,海豹遵循命令行脚本的通行做法,将其按顺序存储于多个变量 $t1 $t2 等。

text
正则匹配:^购买(.+)
+输出文本:{$t玩家}购买了{$t1}
`,17)),n("div",b,[s[0]||(s[0]=n("p",{class:"custom-block-title"},"示例",-1)),a(e,{messages:[{content:"购买猫粮",send:!0},{username:"海豹牌猫粮店",content:"<木落>购买了猫粮"}]})]),s[6]||(s[6]=t('

可以发现第 1 捕获组命中的字符串 猫粮,被存储于变量 $t1 中。

此外,对于正则表达式匹配的完整内容将被存储于变量 $t0。如果捕获组存在命名,如命名为 A 的捕获组 (?P<A>cc),命中的字符串也将额外存入变量 $tA

注意:不要使用某些前缀!

由于 . / ! 等符号会作为海豹中指令的前缀,因此作为前缀时可能导致将其识别为指令而非自定义回复的情况,建议换成别的前缀。

提示:正则中匹配 CQ 码

海豹支持用正则匹配 CQ 码。但是,由于 [ ] 符号在正则表达式中含有特殊含义,如果你这么做了,请对它们进行转义。

示例:^\\[CQ:xxx,xx=xxx\\]

表达式为真

在「表达式为真」匹配中,只需要直接在匹配文本中写出形如 变量名 == 需要的值 的形式即可,不需要使用任何 {}

回复结果

在回复文本中,可以调用一些 变量,也可以嵌入 内置脚本语言

嵌入脚本语言

',9)),n("div",$,[s[1]||(s[1]=n("p",{class:"custom-block-title"},"示例",-1)),a(e,{messages:[{content:".text {$t玩家}进行测试",send:!0},{content:"<木落>进行测试"},{content:".text {d100}",send:!0},{content:"1"}]})]),s[7]||(s[7]=t(`

提示:未赋值的变量

所有变量在未被赋值时被调用的值都为 0。

执行块

{% %} 被称为执行块。由 {% %} 括起来的部分会被作为代码执行,输出最后一个语句的结果。执行块中的两个语句之间要使用 ; 隔开。

如果想要输出字符串,则应该用 \` / " / ' 括上。

  • 例:形如 {% \\$t1="114514" %} 的式子会输出 114514

提示:结果中调用变量

若想在结果中调用变量,请用反引号。目前海豹只支持在反引号中调用变量。

下面是一个简单的示例,这里的第一句也是最后一句,所以它的结果会被输出。

text
.text {% $t测试=1 %}

示例:使用 if

text
{%
+$t测试=1;
+if $t测试==1 {$t输出="赞美木落"};
+if $t测试==2 {$t输出="快点更新"};
+if $t测试!=2&&$t测试!=1 {$t输出="群主女装"}
+%}
+{$t输出}

首先给 $t测试赋值为 1,然后进入判断:

  1. 如果 $t测试 等于 1,则变量 $t输出 等于 "赞美木落"
  2. 如果 $t测试 等于 2,则变量 $t输出 等于 "快点更新"
  3. 如果 $t测试 既不等于 2 也不等于 1,则变量 $t输出 等于 "群主女装";

最后,输出变量 $t输出

提示:容易误解的 if 使用

目前海豹语并不支持 else if / elififelse 是一对一匹配的。所以当形如:

text
if <条件 1> {<执行 1>};
+if <条件 2> {<执行 2>}
+else {<执行 3>}

的语句出现时,第二个 ifelse 为一个整体,且不与第一个 if 构成 if elseif else 的关系!即使 <条件 1> 满足,其仍会对 <条件 2> 进行判断,并在 <执行 2><执行 3> 中择一执行!

示例:变量运算

text
{%
+$t0 = 1;
+$tRand = d6;
+if $t0 == 1 { $t0 = $t0 + $tRand }
+%}
+{$t0}

在这个例子里,我们先给 $t0 赋值为 1,然后判断 $t0 是否等于 1,若通过则 $t0 的值增加 1d6,最后输出结果。

更多示例片段

牌堆与自定义回复的结合

以养猫功能中猫好感度为例:

text
{%
+$mCatFavor<=100 ? \`#{DRAW-第一档猫好感}\`,
+$mCatFavor<=250 ? \`#{DRAW-第二档猫好感}\`,
+$mCatFavor<=600 ? \`#{DRAW-第三档猫好感}\`,
+$mCatFavor<=1500 ? \`#{DRAW-第四档猫好感}\`,
+$mCatFavor<=2500 ? \`#{DRAW-第五档猫好感}\`,
+1 ? \`#{DRAW-第六档猫好感}\`
+%}

在这一脚本中,根据猫好感度 $mCatFavor不同,需要输出不同回复的机制。

补充:其它写法

除了形如

text
{%
+判断1 ? \`#{DRAW-牌组1}\`,
+判断2 ? \`#{DRAW-牌组2}\`,
+判断3 ? \`#{DRAW-牌组3}\`,
+1 ? \`#{DRAW-牌组4}\`,
+%}

的写法外,还可以使用:

text
{%
+if 判断1 {
+  $tRand=d6;
+  $t输出=$tRand==1 ? \`内容1\`,
+  $t输出=$tRand==2 ? \`内容2\`,
+  $t输出=$tRand==3 ? \`内容3\`,
+  $t输出=$tRand==4 ? \`内容4\`,
+  $t输出=$tRand==5 ? \`内容5\`,
+  $t输出=$tRand==6 ? \`内容6\`
+};
+if 判断2 { $tRand=d10; $t输出 = $tRand==1 ? \`内容1\`, …… };
+if 判断3 { $tRand=d10; $t输出 = $tRand==1 ? \`内容1\`, …… };
+%}

实质上没有太大区别,可根据喜好选择。

多行回复的错误使用

自定义回复中的多行输出通常并不是:

text
{$t输出0}
+{$t输出1}
+{$t输出2}
+{$t输出3}

而是在为四个 $t输出 变量赋值时,于内部写入 \\n,自定义回复中则采用 {$t输出0}{$t输出1}{$t输出2}{$t输出3} 的形式。

这是因为如果某一变量可能为空时,如果采用第一种分行的写法,会出现这样的效果:

`,28)),n("div",x,[s[2]||(s[2]=n("p",{class:"custom-block-title"},"示例",-1)),a(e,{messages:[{content:"踢海豹",send:!0},{content:`<木落>一脚踢向海豹,踢了3格。 +海豹现在离终点还有37格。 + +海豹的逃走骰:1d100=60,海豹没能逃脱凶猛恶汉们的掌控!`}]})]),s[8]||(s[8]=t(`

可以看见,在中间会出现突兀的空行。这是因为虽然 $t输出2 变量为空,海豹仍会按照自定义回复中设置的格式输出。因此在对应 $t输出2 的一行中,海豹会首先输出空变量 {$t输出2},随后按自定义回复的格式进行换行,导致发生空行。

所以,如果想要在某个变量为空时,不让用户注意到突兀的空缺,就最好多做几次实验,好好规划一下换行符 \\n 的位置。

限定每人/每群每天一次

海豹提供了一系列时间变量来调用,以打卡指令为例,可以采用如下两种写法中的一种(示例为每人每天一次,如要每群自行将 $m 换成 $g):

写法 1
文本匹配:你需要的文本
表达式为真:$m变量 != $tDate
回复:{if 1 {$m变量=$tDate}}你需要的回复文本

  • $m变量 作为标记变量,用 if 是防止它出现在回复文本中。

文本匹配:你需要的文本
表达式为真:$m变量==$tDate

  • 可以不写在另一条里,选择放到相较于上一条的后面,利用海豹从上往下逐个匹配的机制达成相同效果

回复:在一天触发多次时的回复

写法 2
文本匹配:你需要的文本
回复:

text
{%
+if $m变量 != $tDate {
+  $t输出 = \`你需要的回复文本\`;
+  $m变量 = $tDate //对其赋值,作为标记
+} else {
+  $t输出 = \`在一天触发多次时的回复\`
+}
+%}
+{$t输出}

以上两种写法实现效果没有差别,具体使用哪种请自行决断。

条件语句嵌套条件算符,多条件条件语句

以石头剪刀布为例,为了实现骰子随机出招的效果,令 $tRand=d3,然后根据 $tRand 的情况赋值 $tDicePlay。通过骰子出招和玩家出招两个变量判断,输出游戏结果,并记录场次。

为了防止直接使用 {%%} 进行赋值导致的变量显示,需要在最外面写 if 1 ,则在生成 $tRand之后再次判断的时候,可以使用 $tDicePlay=条件算符,或是再新开一行用条件算符或者条件语句实现。

以下给出在同一个 if 内直接赋值的写法和新开一行使用条件语句的写法:

text
{% //在同一个if内直接赋值。可以在赋值时使用条件算符。
+if 1 {
+    $tRand=d3;
+    $tDicePlay = $tRand==1 ? "石头",
+                 $tRand==2 ? "剪刀",
+                 1 ? "布"
+}
+%}
+
+{% //新开一行赋值
+if 1 {
+    $tRand=d3;
+};
+if $tRand==1 {$tDicePlay="石头"};
+if $tRand==2 {$tDicePlay="剪刀"};
+if $tRand==3 {$tDicePlay="布"}
+%}

两种写法实现效果相同,石头剪刀布内在这里采用了第一种,实际上没有差别。

生成骰子出招并获取玩家出招之后,就开始判断。这里除了平局可以使用 $tDicePlay==$t0 省事之外,其他的都需要在条件中用多个进行嵌套。

注意:条件判断

豹语语法中,判断时条件中的 ||&& 是从左往右计算的,如果后面有需要优先计算与或的东西,请加好括号。

text
if $t0 == $tDicePlay {
+    $t输出 = \`那我出{$tDicePlay}!{$t玩家}出的是{$t0}啊,我们平局了。\`;
+    $mPlayerTime = $mPlayerTime + 1
+};
+if ($t0=="剪刀" && $tDicePlay=="石头") || ($t0=="石头" && $tDicePlay=="布") || ($t0=="布" && $tDicePlay=="剪刀") {
+    $t输出 = \`那我出{$tDicePlay}!{$t玩家}出的是{$t0}啊,我赢了。\`;
+    $mPlayerTime = $mPlayerTime + 1;
+    $mPlayerLose = $mPlayerLose + 1
+};
+if ($t0=="石头" && $tDicePlay=="剪刀") || ($t0=="布" && $tDicePlay=="石头") || ($t0=="剪刀" && $tDicePlay=="布") {
+    $t输出 = \`那我出{$tDicePlay}!{$t玩家}出的是{$t0}啊,你赢了。\`;
+    $mPlayerTime = $mPlayerTime + 1;
+    $mPlayerWin = $mPlayerWin + 1
+}

同时使用前缀和后缀匹配,以匹配 AxxxxxxxB 型文本

前缀匹配:A
后缀匹配:B
回复:怎么辉石呢

`,23)),n("div",v,[s[3]||(s[3]=n("p",{class:"custom-block-title"},"示例",-1)),a(o,null,{default:p(()=>[a(i,{label:"输入:AB"},{default:p(()=>[a(e,{messages:[{content:"AB",send:!0},{content:"怎么辉石呢"}]})]),_:1}),a(i,{label:"输入:A间隔B"},{default:p(()=>[a(e,{messages:[{content:"A间隔B",send:!0},{content:"怎么辉石呢"}]})]),_:1}),a(i,{label:"输入:A(无回复)"},{default:p(()=>[a(e,{messages:[{content:"A",send:!0}]})]),_:1}),a(i,{label:"输入:B(无回复)"},{default:p(()=>[a(e,{messages:[{content:"B",send:!0}]})]),_:1})]),_:1})]),s[9]||(s[9]=t('

随机看图

随机看图

单人模组

',3)),n("div",y,[s[4]||(s[4]=n("p",{class:"custom-block-title"},"示例",-1)),a(e,{messages:[{content:"开始吧 @海豹核心",send:!0},{content:"那么,故事就这么开始了?如果你想听的话,回复我:说下去"},{content:"说下去 @海豹核心",send:!0},{content:"那么,故事要从一个村子说起……(说下去)"},{content:"说下去 @海豹核心",send:!0},{content:"这个村子有一户人家,门前有两棵树"},{content:"说下去 @海豹核心",send:!0},{content:"一棵是函树,一棵是反函树"},{content:"说下去 @海豹核心",send:!0},{content:"我讲完了。"}]})]),s[10]||(s[10]=t('

具体实现,第一段

单人模组第一段

第二段

单人模组第二段

这两段较为常规,第三段开始变形了:

单人模组第三段

text
{%
+    if $mStory == 4 { $mStory = 5 };
+    if $mStory == 3 { $mStory = 4 };
+    if $mStory == 2 { $mStory = 3 };
+
+    $mStory == 3 ? '这个村子有一户人家,门前有两棵树',
+    $mStory == 4 ? '一棵是函树,一棵是反函树',
+    $mStory == 5 ? '我讲完了。',
+    1 ? '?'
+%}
+
+{% if $mStory == 5 { $mStory=0 } %}
`,7))])}const F=c(g,[["render",f]]);export{A as __pageData,F as default}; diff --git a/assets/advanced_edit_reply.md.DYzHFtyI.lean.js b/assets/advanced_edit_reply.md.DYzHFtyI.lean.js new file mode 100644 index 000000000..255f68bfd --- /dev/null +++ b/assets/advanced_edit_reply.md.DYzHFtyI.lean.js @@ -0,0 +1,97 @@ +import{_ as c,c as d,a6 as t,j as n,G as a,w as p,B as l,o as r}from"./chunks/framework.B1keMFNq.js";const h="/sealdice-manual-next/assets/edit-reply-random-pic.BERq9XNC.png",u="/sealdice-manual-next/assets/edit-reply-single-person-mod1.CcMT0-k7.png",k="/sealdice-manual-next/assets/edit-reply-single-person-mod2.RQYejdzJ.png",m="/sealdice-manual-next/assets/edit-reply-single-person-mod3.a_KOIlqv.png",A=JSON.parse('{"title":"编写自定义回复","description":"","frontmatter":{"lang":"zh-cn","title":"编写自定义回复"},"headers":[],"relativePath":"advanced/edit_reply.md","filePath":"advanced/edit_reply.md","lastUpdated":1728702230000}'),g={name:"advanced/edit_reply.md"},b={class:"info custom-block"},$={class:"info custom-block"},x={class:"info custom-block"},v={class:"info custom-block"},y={class:"info custom-block"};function f(q,s,E,C,P,D){const e=l("ChatBox"),i=l("PluginTabsTab"),o=l("PluginTabs");return r(),d("div",null,[s[5]||(s[5]=t(`

编写自定义回复

本节内容

本节将展示自定义回复编写的进阶部分,请善用侧边栏和搜索,按需阅读文档。

我们假定你已经阅读了自定义回复编写的 基础部分(「配置 - 自定义回复」节)。如果你还没有阅读该章节,请先阅读这一节。

在部分内容中,我们假定你了解海豹变量机制和正则表达式。如果你对正则表达式还很陌生,可以参考以下材料,或在互联网自行搜索学习。

海豹核心跟随 Go 语言,采用 RE2 规范。该规范与其他规范在个别扩展语法上存在细微差别,请注意辨析。

在使用 Regex 101 网站时,请注意在左侧的「FLAVOR」栏选中「Golang」,以确保正则表达式的表现一致。

第一个自定义回复

首先我们打开「自定义回复」页,新建一项自定义回复。

提示:使用 .text 帮助测试

.text <文本> 将是你的一大助力,它会输出后面文本的执行结果,你可以将它看成不需要触发词的自定义回复。

当然,在采用 .text 指令进行 debug 时,可能出现因为测试的内容对变量造成影响,而不得不频繁复制黏贴清空指令的情况。此时建议专门开一个一两个字即可触发的自定义回复,用来测试。

提示:嵌入 CQ 码

返回内容可以嵌入 CQ 码。CQ 码文档见 CQ 码列表

自定义回复中分「条件」和「结果」两个部分。在 配置 - 自定义回复 中,我们已经了解了一些简单的回复编写,下面将补充介绍进阶内容。

触发条件

文本匹配:模糊匹配

模糊匹配将比较收到的消息与指定文本,内容相似时触发。

比较定义在 dice/ext_reply_logic.go 中,内容 jaro 和 hamming 平均值高于阈值(0.7)被认为是相似:

go
func strCompare(a string, b string) float64 {
+	va := strsim.Compare(a, b, strsim.Jaro())
+	vb := strsim.Compare(a, b, strsim.Hamming())
+	return (va + vb) / 2
+}

提示:模糊匹配未命中

模糊匹配可能出现感觉能匹配上,但实际上没办法匹配上的情况。我们更建议你使用「包含文本」或「正则匹配」。

文本匹配:正则匹配

使用正则匹配时,直接在要匹配的文本一栏中写入正则表达式即可。当正则表达式获得匹配时,该条件得到满足。

对于正则表达式中的捕获组,海豹遵循命令行脚本的通行做法,将其按顺序存储于多个变量 $t1 $t2 等。

text
正则匹配:^购买(.+)
+输出文本:{$t玩家}购买了{$t1}
`,17)),n("div",b,[s[0]||(s[0]=n("p",{class:"custom-block-title"},"示例",-1)),a(e,{messages:[{content:"购买猫粮",send:!0},{username:"海豹牌猫粮店",content:"<木落>购买了猫粮"}]})]),s[6]||(s[6]=t('

可以发现第 1 捕获组命中的字符串 猫粮,被存储于变量 $t1 中。

此外,对于正则表达式匹配的完整内容将被存储于变量 $t0。如果捕获组存在命名,如命名为 A 的捕获组 (?P<A>cc),命中的字符串也将额外存入变量 $tA

注意:不要使用某些前缀!

由于 . / ! 等符号会作为海豹中指令的前缀,因此作为前缀时可能导致将其识别为指令而非自定义回复的情况,建议换成别的前缀。

提示:正则中匹配 CQ 码

海豹支持用正则匹配 CQ 码。但是,由于 [ ] 符号在正则表达式中含有特殊含义,如果你这么做了,请对它们进行转义。

示例:^\\[CQ:xxx,xx=xxx\\]

表达式为真

在「表达式为真」匹配中,只需要直接在匹配文本中写出形如 变量名 == 需要的值 的形式即可,不需要使用任何 {}

回复结果

在回复文本中,可以调用一些 变量,也可以嵌入 内置脚本语言

嵌入脚本语言

',9)),n("div",$,[s[1]||(s[1]=n("p",{class:"custom-block-title"},"示例",-1)),a(e,{messages:[{content:".text {$t玩家}进行测试",send:!0},{content:"<木落>进行测试"},{content:".text {d100}",send:!0},{content:"1"}]})]),s[7]||(s[7]=t(`

提示:未赋值的变量

所有变量在未被赋值时被调用的值都为 0。

执行块

{% %} 被称为执行块。由 {% %} 括起来的部分会被作为代码执行,输出最后一个语句的结果。执行块中的两个语句之间要使用 ; 隔开。

如果想要输出字符串,则应该用 \` / " / ' 括上。

  • 例:形如 {% \\$t1="114514" %} 的式子会输出 114514

提示:结果中调用变量

若想在结果中调用变量,请用反引号。目前海豹只支持在反引号中调用变量。

下面是一个简单的示例,这里的第一句也是最后一句,所以它的结果会被输出。

text
.text {% $t测试=1 %}

示例:使用 if

text
{%
+$t测试=1;
+if $t测试==1 {$t输出="赞美木落"};
+if $t测试==2 {$t输出="快点更新"};
+if $t测试!=2&&$t测试!=1 {$t输出="群主女装"}
+%}
+{$t输出}

首先给 $t测试赋值为 1,然后进入判断:

  1. 如果 $t测试 等于 1,则变量 $t输出 等于 "赞美木落"
  2. 如果 $t测试 等于 2,则变量 $t输出 等于 "快点更新"
  3. 如果 $t测试 既不等于 2 也不等于 1,则变量 $t输出 等于 "群主女装";

最后,输出变量 $t输出

提示:容易误解的 if 使用

目前海豹语并不支持 else if / elififelse 是一对一匹配的。所以当形如:

text
if <条件 1> {<执行 1>};
+if <条件 2> {<执行 2>}
+else {<执行 3>}

的语句出现时,第二个 ifelse 为一个整体,且不与第一个 if 构成 if elseif else 的关系!即使 <条件 1> 满足,其仍会对 <条件 2> 进行判断,并在 <执行 2><执行 3> 中择一执行!

示例:变量运算

text
{%
+$t0 = 1;
+$tRand = d6;
+if $t0 == 1 { $t0 = $t0 + $tRand }
+%}
+{$t0}

在这个例子里,我们先给 $t0 赋值为 1,然后判断 $t0 是否等于 1,若通过则 $t0 的值增加 1d6,最后输出结果。

更多示例片段

牌堆与自定义回复的结合

以养猫功能中猫好感度为例:

text
{%
+$mCatFavor<=100 ? \`#{DRAW-第一档猫好感}\`,
+$mCatFavor<=250 ? \`#{DRAW-第二档猫好感}\`,
+$mCatFavor<=600 ? \`#{DRAW-第三档猫好感}\`,
+$mCatFavor<=1500 ? \`#{DRAW-第四档猫好感}\`,
+$mCatFavor<=2500 ? \`#{DRAW-第五档猫好感}\`,
+1 ? \`#{DRAW-第六档猫好感}\`
+%}

在这一脚本中,根据猫好感度 $mCatFavor不同,需要输出不同回复的机制。

补充:其它写法

除了形如

text
{%
+判断1 ? \`#{DRAW-牌组1}\`,
+判断2 ? \`#{DRAW-牌组2}\`,
+判断3 ? \`#{DRAW-牌组3}\`,
+1 ? \`#{DRAW-牌组4}\`,
+%}

的写法外,还可以使用:

text
{%
+if 判断1 {
+  $tRand=d6;
+  $t输出=$tRand==1 ? \`内容1\`,
+  $t输出=$tRand==2 ? \`内容2\`,
+  $t输出=$tRand==3 ? \`内容3\`,
+  $t输出=$tRand==4 ? \`内容4\`,
+  $t输出=$tRand==5 ? \`内容5\`,
+  $t输出=$tRand==6 ? \`内容6\`
+};
+if 判断2 { $tRand=d10; $t输出 = $tRand==1 ? \`内容1\`, …… };
+if 判断3 { $tRand=d10; $t输出 = $tRand==1 ? \`内容1\`, …… };
+%}

实质上没有太大区别,可根据喜好选择。

多行回复的错误使用

自定义回复中的多行输出通常并不是:

text
{$t输出0}
+{$t输出1}
+{$t输出2}
+{$t输出3}

而是在为四个 $t输出 变量赋值时,于内部写入 \\n,自定义回复中则采用 {$t输出0}{$t输出1}{$t输出2}{$t输出3} 的形式。

这是因为如果某一变量可能为空时,如果采用第一种分行的写法,会出现这样的效果:

`,28)),n("div",x,[s[2]||(s[2]=n("p",{class:"custom-block-title"},"示例",-1)),a(e,{messages:[{content:"踢海豹",send:!0},{content:`<木落>一脚踢向海豹,踢了3格。 +海豹现在离终点还有37格。 + +海豹的逃走骰:1d100=60,海豹没能逃脱凶猛恶汉们的掌控!`}]})]),s[8]||(s[8]=t(`

可以看见,在中间会出现突兀的空行。这是因为虽然 $t输出2 变量为空,海豹仍会按照自定义回复中设置的格式输出。因此在对应 $t输出2 的一行中,海豹会首先输出空变量 {$t输出2},随后按自定义回复的格式进行换行,导致发生空行。

所以,如果想要在某个变量为空时,不让用户注意到突兀的空缺,就最好多做几次实验,好好规划一下换行符 \\n 的位置。

限定每人/每群每天一次

海豹提供了一系列时间变量来调用,以打卡指令为例,可以采用如下两种写法中的一种(示例为每人每天一次,如要每群自行将 $m 换成 $g):

写法 1
文本匹配:你需要的文本
表达式为真:$m变量 != $tDate
回复:{if 1 {$m变量=$tDate}}你需要的回复文本

  • $m变量 作为标记变量,用 if 是防止它出现在回复文本中。

文本匹配:你需要的文本
表达式为真:$m变量==$tDate

  • 可以不写在另一条里,选择放到相较于上一条的后面,利用海豹从上往下逐个匹配的机制达成相同效果

回复:在一天触发多次时的回复

写法 2
文本匹配:你需要的文本
回复:

text
{%
+if $m变量 != $tDate {
+  $t输出 = \`你需要的回复文本\`;
+  $m变量 = $tDate //对其赋值,作为标记
+} else {
+  $t输出 = \`在一天触发多次时的回复\`
+}
+%}
+{$t输出}

以上两种写法实现效果没有差别,具体使用哪种请自行决断。

条件语句嵌套条件算符,多条件条件语句

以石头剪刀布为例,为了实现骰子随机出招的效果,令 $tRand=d3,然后根据 $tRand 的情况赋值 $tDicePlay。通过骰子出招和玩家出招两个变量判断,输出游戏结果,并记录场次。

为了防止直接使用 {%%} 进行赋值导致的变量显示,需要在最外面写 if 1 ,则在生成 $tRand之后再次判断的时候,可以使用 $tDicePlay=条件算符,或是再新开一行用条件算符或者条件语句实现。

以下给出在同一个 if 内直接赋值的写法和新开一行使用条件语句的写法:

text
{% //在同一个if内直接赋值。可以在赋值时使用条件算符。
+if 1 {
+    $tRand=d3;
+    $tDicePlay = $tRand==1 ? "石头",
+                 $tRand==2 ? "剪刀",
+                 1 ? "布"
+}
+%}
+
+{% //新开一行赋值
+if 1 {
+    $tRand=d3;
+};
+if $tRand==1 {$tDicePlay="石头"};
+if $tRand==2 {$tDicePlay="剪刀"};
+if $tRand==3 {$tDicePlay="布"}
+%}

两种写法实现效果相同,石头剪刀布内在这里采用了第一种,实际上没有差别。

生成骰子出招并获取玩家出招之后,就开始判断。这里除了平局可以使用 $tDicePlay==$t0 省事之外,其他的都需要在条件中用多个进行嵌套。

注意:条件判断

豹语语法中,判断时条件中的 ||&& 是从左往右计算的,如果后面有需要优先计算与或的东西,请加好括号。

text
if $t0 == $tDicePlay {
+    $t输出 = \`那我出{$tDicePlay}!{$t玩家}出的是{$t0}啊,我们平局了。\`;
+    $mPlayerTime = $mPlayerTime + 1
+};
+if ($t0=="剪刀" && $tDicePlay=="石头") || ($t0=="石头" && $tDicePlay=="布") || ($t0=="布" && $tDicePlay=="剪刀") {
+    $t输出 = \`那我出{$tDicePlay}!{$t玩家}出的是{$t0}啊,我赢了。\`;
+    $mPlayerTime = $mPlayerTime + 1;
+    $mPlayerLose = $mPlayerLose + 1
+};
+if ($t0=="石头" && $tDicePlay=="剪刀") || ($t0=="布" && $tDicePlay=="石头") || ($t0=="剪刀" && $tDicePlay=="布") {
+    $t输出 = \`那我出{$tDicePlay}!{$t玩家}出的是{$t0}啊,你赢了。\`;
+    $mPlayerTime = $mPlayerTime + 1;
+    $mPlayerWin = $mPlayerWin + 1
+}

同时使用前缀和后缀匹配,以匹配 AxxxxxxxB 型文本

前缀匹配:A
后缀匹配:B
回复:怎么辉石呢

`,23)),n("div",v,[s[3]||(s[3]=n("p",{class:"custom-block-title"},"示例",-1)),a(o,null,{default:p(()=>[a(i,{label:"输入:AB"},{default:p(()=>[a(e,{messages:[{content:"AB",send:!0},{content:"怎么辉石呢"}]})]),_:1}),a(i,{label:"输入:A间隔B"},{default:p(()=>[a(e,{messages:[{content:"A间隔B",send:!0},{content:"怎么辉石呢"}]})]),_:1}),a(i,{label:"输入:A(无回复)"},{default:p(()=>[a(e,{messages:[{content:"A",send:!0}]})]),_:1}),a(i,{label:"输入:B(无回复)"},{default:p(()=>[a(e,{messages:[{content:"B",send:!0}]})]),_:1})]),_:1})]),s[9]||(s[9]=t('

随机看图

随机看图

单人模组

',3)),n("div",y,[s[4]||(s[4]=n("p",{class:"custom-block-title"},"示例",-1)),a(e,{messages:[{content:"开始吧 @海豹核心",send:!0},{content:"那么,故事就这么开始了?如果你想听的话,回复我:说下去"},{content:"说下去 @海豹核心",send:!0},{content:"那么,故事要从一个村子说起……(说下去)"},{content:"说下去 @海豹核心",send:!0},{content:"这个村子有一户人家,门前有两棵树"},{content:"说下去 @海豹核心",send:!0},{content:"一棵是函树,一棵是反函树"},{content:"说下去 @海豹核心",send:!0},{content:"我讲完了。"}]})]),s[10]||(s[10]=t('

具体实现,第一段

单人模组第一段

第二段

单人模组第二段

这两段较为常规,第三段开始变形了:

单人模组第三段

text
{%
+    if $mStory == 4 { $mStory = 5 };
+    if $mStory == 3 { $mStory = 4 };
+    if $mStory == 2 { $mStory = 3 };
+
+    $mStory == 3 ? '这个村子有一户人家,门前有两棵树',
+    $mStory == 4 ? '一棵是函树,一棵是反函树',
+    $mStory == 5 ? '我讲完了。',
+    1 ? '?'
+%}
+
+{% if $mStory == 5 { $mStory=0 } %}
`,7))])}const F=c(g,[["render",f]]);export{A as __pageData,F as default}; diff --git a/assets/advanced_edit_sensitive_words.md.My54GHHp.js b/assets/advanced_edit_sensitive_words.md.My54GHHp.js new file mode 100644 index 000000000..8cd9c30de --- /dev/null +++ b/assets/advanced_edit_sensitive_words.md.My54GHHp.js @@ -0,0 +1,55 @@ +import{_ as a,c as n,a6 as i,o as p}from"./chunks/framework.B1keMFNq.js";const E=JSON.parse('{"title":"编写敏感词库","description":"","frontmatter":{"lang":"zh-cn","title":"编写敏感词库"},"headers":[],"relativePath":"advanced/edit_sensitive_words.md","filePath":"advanced/edit_sensitive_words.md","lastUpdated":1698657256000}'),l={name:"advanced/edit_sensitive_words.md"};function t(e,s,h,k,r,d){return p(),n("div",null,s[0]||(s[0]=[i(`

编写敏感词库

本节内容

本节将介绍敏感词库的编写,请善用侧边栏和搜索,按需阅读文档。

创建文本格式的敏感词库

你可以直接按照以下格式书写 <words>.txt

text
#notice
+提醒级词汇 1
+提醒级词汇 2
+
+#caution
+注意级词汇 1
+注意级词汇 2
+
+#warning
+警告级词汇
+
+#danger
+危险级词汇

创建 TOML 格式的敏感词库

TOML 格式

我们假定你已了解 TOML 格式。如果你对 TOML 还很陌生,可以阅读以下教程或自行在互联网搜索:

你可以直接按照以下格式书写 <words>.toml

toml
# 元信息,用于填写一些额外的展示内容
+[meta]
+# 词库名称
+name = '测试词库'
+# 作者,和 authors 存在一个即可
+author = ''
+# 作者(多个),和 author 存在一个即可
+authors = [ '<匿名>' ]
+# 版本,建议使用语义化版本号
+version = '1.0'
+# 简介
+desc = '一个测试词库'
+# 协议
+license = 'CC-BY-NC-SA 4.0'
+# 创建日期,使用 RFC 3339 格式
+date = 2023-10-30
+# 更新日期,使用 RFC 3339 格式
+updateDate = 2023-10-30
+
+# 词表,出现相同词汇时按最高级别判断
+[words]
+# 忽略级词表,没有实际作用
+ignore = []
+# 提醒级词表
+notice = [
+  '提醒级词汇 1',
+  '提醒级词汇 2'
+]
+# 注意级词表
+caution = [
+  '注意级词汇 1',
+  '注意级词汇 2'
+]
+# 警告级词表
+warning = [
+  '警告级词汇 1',
+  '警告级词汇 2'
+]
+# 危险级词表
+danger = [
+  '危险级词汇 1',
+  '危险级词汇 2'
+]
`,9)]))}const o=a(l,[["render",t]]);export{E as __pageData,o as default}; diff --git a/assets/advanced_edit_sensitive_words.md.My54GHHp.lean.js b/assets/advanced_edit_sensitive_words.md.My54GHHp.lean.js new file mode 100644 index 000000000..8cd9c30de --- /dev/null +++ b/assets/advanced_edit_sensitive_words.md.My54GHHp.lean.js @@ -0,0 +1,55 @@ +import{_ as a,c as n,a6 as i,o as p}from"./chunks/framework.B1keMFNq.js";const E=JSON.parse('{"title":"编写敏感词库","description":"","frontmatter":{"lang":"zh-cn","title":"编写敏感词库"},"headers":[],"relativePath":"advanced/edit_sensitive_words.md","filePath":"advanced/edit_sensitive_words.md","lastUpdated":1698657256000}'),l={name:"advanced/edit_sensitive_words.md"};function t(e,s,h,k,r,d){return p(),n("div",null,s[0]||(s[0]=[i(`

编写敏感词库

本节内容

本节将介绍敏感词库的编写,请善用侧边栏和搜索,按需阅读文档。

创建文本格式的敏感词库

你可以直接按照以下格式书写 <words>.txt

text
#notice
+提醒级词汇 1
+提醒级词汇 2
+
+#caution
+注意级词汇 1
+注意级词汇 2
+
+#warning
+警告级词汇
+
+#danger
+危险级词汇

创建 TOML 格式的敏感词库

TOML 格式

我们假定你已了解 TOML 格式。如果你对 TOML 还很陌生,可以阅读以下教程或自行在互联网搜索:

你可以直接按照以下格式书写 <words>.toml

toml
# 元信息,用于填写一些额外的展示内容
+[meta]
+# 词库名称
+name = '测试词库'
+# 作者,和 authors 存在一个即可
+author = ''
+# 作者(多个),和 author 存在一个即可
+authors = [ '<匿名>' ]
+# 版本,建议使用语义化版本号
+version = '1.0'
+# 简介
+desc = '一个测试词库'
+# 协议
+license = 'CC-BY-NC-SA 4.0'
+# 创建日期,使用 RFC 3339 格式
+date = 2023-10-30
+# 更新日期,使用 RFC 3339 格式
+updateDate = 2023-10-30
+
+# 词表,出现相同词汇时按最高级别判断
+[words]
+# 忽略级词表,没有实际作用
+ignore = []
+# 提醒级词表
+notice = [
+  '提醒级词汇 1',
+  '提醒级词汇 2'
+]
+# 注意级词表
+caution = [
+  '注意级词汇 1',
+  '注意级词汇 2'
+]
+# 警告级词表
+warning = [
+  '警告级词汇 1',
+  '警告级词汇 2'
+]
+# 危险级词表
+danger = [
+  '危险级词汇 1',
+  '危险级词汇 2'
+]
`,9)]))}const o=a(l,[["render",t]]);export{E as __pageData,o as default}; diff --git a/assets/advanced_introduce.md.DQF6vKSf.js b/assets/advanced_introduce.md.DQF6vKSf.js new file mode 100644 index 000000000..dc3098299 --- /dev/null +++ b/assets/advanced_introduce.md.DQF6vKSf.js @@ -0,0 +1 @@ +import{_ as a,c as t,a6 as r,o}from"./chunks/framework.B1keMFNq.js";const m=JSON.parse('{"title":"进阶介绍","description":"","frontmatter":{"lang":"zh-cn","title":"进阶介绍"},"headers":[],"relativePath":"advanced/introduce.md","filePath":"advanced/introduce.md","lastUpdated":1728702230000}'),s={name:"advanced/introduce.md"};function p(c,e,d,i,n,l){return o(),t("div",null,e[0]||(e[0]=[r('

进阶介绍

本节内容

本节将介绍海豹扩展功能的进阶内容,请善用侧边栏和搜索,按需阅读文档。

海豹核心提供了多种扩展功能,这些功能能让你实现更多的个性化功能,但通常也需要你具备一些知识。

我们建议,在尝试使用对应功能进行个性化前,先阅读本章的对应小节,帮助你快速掌握相关内容。

阅读完小节教程后,如果在使用中依然存在疑问,可以在官方群内寻求帮助。

了解海豹语

在很多地方为了实现一些逻辑,都需要用到海豹所提供的一种简单的脚本语言,可以称为「海豹语」「豹语」等。

我们非常建议你在扩展功能的编写中,先了解海豹语。见 扩展 - 内置脚本语言

用什么编写?

在牌堆、JS 插件、敏感词库等的编写中,我们通常需要在对应格式的文件进行编写。

务必使用更专业的编辑器,如果你不知道选择什么,可以尝试使用 vscodesublime text或 MT 管理器(Android)等,这些都是被广泛使用的优秀编辑器。

更专业的编辑器能更好地帮助你编写相关格式的文件。这些编辑器提供的语法高亮、自动补全、格式化、错误检查、编码转换等诸多功能,能为你带来更好的编写体验。

不建议使用 Windows 记事本、Notepad++ 编写。

提示:如何获取安装包?

官网应当是你下载软件的首选途径,请不要被搜索引擎等误导进各种下载站,它们很可能会提供二次封装后、捆绑大量流氓软件的安装包。

但由于各种原因,官网下载可能会十分缓慢,你还可以选择从海豹官方群的群文件中获取安装包。通常群文件的「工具&内置文件」中,请善用搜索。

',14)]))}const u=a(s,[["render",p]]);export{m as __pageData,u as default}; diff --git a/assets/advanced_introduce.md.DQF6vKSf.lean.js b/assets/advanced_introduce.md.DQF6vKSf.lean.js new file mode 100644 index 000000000..dc3098299 --- /dev/null +++ b/assets/advanced_introduce.md.DQF6vKSf.lean.js @@ -0,0 +1 @@ +import{_ as a,c as t,a6 as r,o}from"./chunks/framework.B1keMFNq.js";const m=JSON.parse('{"title":"进阶介绍","description":"","frontmatter":{"lang":"zh-cn","title":"进阶介绍"},"headers":[],"relativePath":"advanced/introduce.md","filePath":"advanced/introduce.md","lastUpdated":1728702230000}'),s={name:"advanced/introduce.md"};function p(c,e,d,i,n,l){return o(),t("div",null,e[0]||(e[0]=[r('

进阶介绍

本节内容

本节将介绍海豹扩展功能的进阶内容,请善用侧边栏和搜索,按需阅读文档。

海豹核心提供了多种扩展功能,这些功能能让你实现更多的个性化功能,但通常也需要你具备一些知识。

我们建议,在尝试使用对应功能进行个性化前,先阅读本章的对应小节,帮助你快速掌握相关内容。

阅读完小节教程后,如果在使用中依然存在疑问,可以在官方群内寻求帮助。

了解海豹语

在很多地方为了实现一些逻辑,都需要用到海豹所提供的一种简单的脚本语言,可以称为「海豹语」「豹语」等。

我们非常建议你在扩展功能的编写中,先了解海豹语。见 扩展 - 内置脚本语言

用什么编写?

在牌堆、JS 插件、敏感词库等的编写中,我们通常需要在对应格式的文件进行编写。

务必使用更专业的编辑器,如果你不知道选择什么,可以尝试使用 vscodesublime text或 MT 管理器(Android)等,这些都是被广泛使用的优秀编辑器。

更专业的编辑器能更好地帮助你编写相关格式的文件。这些编辑器提供的语法高亮、自动补全、格式化、错误检查、编码转换等诸多功能,能为你带来更好的编写体验。

不建议使用 Windows 记事本、Notepad++ 编写。

提示:如何获取安装包?

官网应当是你下载软件的首选途径,请不要被搜索引擎等误导进各种下载站,它们很可能会提供二次封装后、捆绑大量流氓软件的安装包。

但由于各种原因,官网下载可能会十分缓慢,你还可以选择从海豹官方群的群文件中获取安装包。通常群文件的「工具&内置文件」中,请善用搜索。

',14)]))}const u=a(s,[["render",p]]);export{m as __pageData,u as default}; diff --git a/assets/advanced_js_api_list.md.CA_tvSu7.js b/assets/advanced_js_api_list.md.CA_tvSu7.js new file mode 100644 index 000000000..e3584f1c8 --- /dev/null +++ b/assets/advanced_js_api_list.md.CA_tvSu7.js @@ -0,0 +1,197 @@ +import{_ as i,c as a,a6 as n,o as t}from"./chunks/framework.B1keMFNq.js";const g=JSON.parse('{"title":"API 列表","description":"","frontmatter":{"lang":"zh-cn","title":"API 列表"},"headers":[],"relativePath":"advanced/js_api_list.md","filePath":"advanced/js_api_list.md","lastUpdated":1728702230000}'),l={name:"advanced/js_api_list.md"};function h(p,s,k,e,E,r){return t(),a("div",null,s[0]||(s[0]=[n(`

API 列表

本节内容

本节为海豹提供的 JS API 列表。目前的内容是从上古文档中直接迁移过来的,难免存在错误和缺失,参考本节时请注意识别。

更好的方式是参考海豹提供的 seal.d.ts 文件。(但同样存在缺失)

如果你需要最准确的内容,当前只能查阅海豹源码。主要查看 dice_jsvm.go,还有一些 API 以结构体方法的形式存在。

其中 ctx 为信息的 MsgContext,msg 为信息的 Message,一般会在定义指令函数时就声明,如:

javascript
cmd.solve = (ctx, msg, cmdArgs) => {
+    someFunction;
+}

下面是 API 的说明(完全了吧………应该?):

javascript
//被注释掉的 API 是可以提供的,但是在源码中被注释。
+//seal.setVarInt(ctx, \`$XXX\`, valueToSet) //\`$XXX\`即 rollvm(初阶豹语)中的变量,其会将$XXX 的值设定为 int 类型的 valueToSet。
+//seal.setVarStr(ctx, \`$XXX\`, valueToSet) //同上,区别是设定的为 str 类型的 valueToSet。
+seal.replyGroup(ctx, msg, something) //向收到指令的群中发送 something。
+seal.replyPerson(ctx, msg, something) //顾名思义,类似暗骰,向指令触发者(若为好友)私信 something。
+seal.replyToSender(ctx, msg, something) //同上,区别是群内收到就群内发送,私聊收到就私聊发送。
+seal.memberBan(ctx, groupID, userID, dur) //将指定群的指定用户封禁指定时间 (似乎只实现了 walleq 协议?)
+seal.memberKick(ctx, groupID, userID)  //将指定群的指定用户踢出 (似乎也只实现了 walleq 协议?)
+seal.format(ctx, something) //将 something 经过一层 rollvm 转译并返回,注意需要配合 replyToSender 才能发送给触发者!
+seal.formatTmpl(ctx, something) //调用自定义文案 something
+seal.getCtxProxyFirst(ctx, cmdArgs)  //获取被 at 的第一个人,等价于 getCtxProxyAtPos(ctx, cmdArgs, 0)
+seal.vars.intGet(ctx, \`$XXX\`) //返回一个数组,其为 \`[int 类型的触发者的该变量的值,bool]\` 当 strGet 一个 int 或 intGet 一个 str 时 bool 为 false,若一切正常则为 true。(之所以会有这么奇怪的说法是因为 rollvm 的「个人变量」机制)。
+seal.vars.intSet(ctx, \`$XXX\`, valueToSet) //\`$XXX\` 即 rollvm(初阶豹语)中的变量,其会将 $XXX 的值设定为 int 类型的 valueToSet。
+seal.vars.strGet(ctx, \`$XXX\`) //返回一个数组,其为 \`[str 类型的触发者的该变量的值,bool]\`(之所以会有这么奇怪的说法是因为 rollvm 的「个人变量」机制),当 strGet 一个 int 或 intGet 一个 str 时 bool 为 false,如果一切正常则为 true。
+seal.vars.strSet(ctx, \`$XXX\`, valueToSet) //\`$XXX\` 即 rollvm(初阶豹语)中的变量,其会将 $XXX 的值设定为 str 类型的 valueToSet。
+//seal.vars.varSet(ctx, \`$XXX\`, valueToSet) //可能是根据数据类型自动推断 int 或 str?
+//seal.vars.varGet(ctx, \`$XXX\`) //同上
+seal.ext.newCmdItemInfo() //用来定义新的指令;没有参数,个人觉得可以视其为类(class)。
+seal.ext.newCmdExecuteResult(bool) //用于判断指令执行结果,true 为成功,false 为失败。
+seal.ext.new(extName, extAuthor, Version) //用于建立一个名为 extName,作者为 extAuthor,版本为 Version 的扩展。注意,extName,extAuthor 和 Version 均为字符串。
+seal.ext.find(extName) //用于查找名为 extname 的扩展,若存在则返回 true,否则返回 false。
+seal.ext.register(newExt) //将扩展 newExt 注册到系统中。注意 newExt 是 seal.ext.new 的返回值,将 register 视为 seal.ext.new() 是错误的。
+seal.coc.newRule() //用来创建自定义 coc 规则,github.com/sealdice/javascript/examples 中已有详细例子,不多赘述。
+seal.coc.newRuleCheckResult() //同上,不多赘述。
+seal.coc.registerRule(rule) //同上,不多赘述。
+seal.deck.draw(ctx, deckname, isShuffle) //他会返回一个抽取牌堆的结果。这里有些复杂:deckname 为需要抽取的牌堆名,而 isShuffle 则是一个布尔值,它决定是否放回抽取;false 为放回,true 为不放回。
+seal.deck.reload() //重新加载牌堆。
+//下面是 1.2 新增 api
+seal.newMessage() //返回一个空白的 Message 对象,结构与收到消息的 msg 相同
+seal.createTempCtx(endpoint, msg) // 制作一个 ctx, 需要 msg.MessageType 和 msg.Sender.UserId
+seal.applyPlayerGroupCardByTemplate(ctx, tmpl) // 设定当前 ctx 玩家的自动名片格式
+seal.gameSystem.newTemplate(string) //从 json 解析新的游戏规则。
+seal.gameSystem.newTemplateByYaml(string) //从 yaml 解析新的游戏规则。
+seal.getCtxProxyAtPos(ctx, cmdArgs, pos) //获取第 pos 个被 at 的人,pos 从 0 开始计数
+atob(base64String) //返回被解码的 base64 编码
+btoa(string) //将 string 编码为 base64 并返回
+
+//下面是 1.4.1 新增 api
+seal.ext.newConfigItem() //用于创建一个新的配置项,返回一个 ConfigItem 对象
+seal.ext.registerConfig(configItem) //用于注册一个配置项,参数为 ConfigItem 对象
+seal.ext.getConfig(ext, "key") //用于获取一个配置项的值,参数为扩展对象和配置项的 key
+seal.ext.registerStringConfig(ext, "key", "defaultValue") //用于注册一个 string 类型的配置项,参数为扩展对象、配置项的 key 和默认值
+seal.ext.registerIntConfig(ext, "key", 123) //用于注册一个 int 类型的配置项,参数为扩展对象、配置项的 key 和默认值
+seal.ext.registerFloatConfig(ext, "key", 123.456) //用于注册一个 float 类型的配置项,参数为扩展对象、配置项的 key 和默认值
+seal.ext.registerBoolConfig(ext, "key", true) //用于注册一个 bool 类型的配置项,参数为扩展对象、配置项的 key 和默认值
+seal.ext.registerTemplateConfig(ext, "key", ["1", "2", "3", "4"]) //用于注册一个 template 类型的配置项,参数为扩展对象、配置项的 key 和默认值
+seal.ext.registerOptionConfig(ext, "key", "1", ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]) //用于注册一个 option 类型的配置项,参数为扩展对象、配置项的 key、默认值和可选项
+seal.ext.getStringConfig(ext, "key") //用于获取一个 string 类型配置项的值,参数为扩展对象和配置项的 key
+seal.ext.getIntConfig(ext, "key") //用于获取一个 int 类型配置项的值,参数为扩展对象和配置项的 key
+seal.ext.getFloatConfig(ext, "key") //用于获取一个 float 类型配置项的值,参数为扩展对象和配置项的 key
+seal.ext.getBoolConfig(ext, "key") //用于获取一个 bool 类型配置项的值,参数为扩展对象和配置项的 key
+seal.ext.getTemplateConfig(ext, "key") //用于获取一个 template 类型配置项的值,参数为扩展对象和配置项的 key
+seal.ext.getOptionConfig(ext, "key") //用于获取一个 option 类型配置项的值,参数为扩展对象和配置项的 key
+
+//下面是 1.4.4 新增 api
+seal.setPlayerGroupCard(ctx, tmpl) //设置当前 ctx 玩家的名片
+seal.ban.addBan(ctx, id, place, reason)
+seal.ban.addTrust(ctx, id, place, reason)
+seal.ban.remove(ctx, id)
+seal.ban.getList()
+seal.ban.getUser(id)

以下为部分 API 使用示例。

提示

声明和注册扩展的代码部分已省略。

replyGroup replyPerson replyToSender

javascript
//在私聊触发 replyGroup 不会回复
+seal.replyGroup(ctx, msg, 'something'); //触发者会收到"something"的回复
+seal.replyPerson(ctx, msg, 'something'); //触发者会收到"something"的私聊回复
+seal.replyToSender(ctx, msg, 'something'); //触发者会收到"something"的回复

memberBan memberKick

是否保留待议

javascript
//注意这些似乎只能在 WQ 协议上实现;
+seal.memberBan(ctx, groupID, userID, dur) //将群为 groupID,userid 为 userID 的人封禁 dur(单位未知)
+seal.memberKick(ctx, groupID, userID) //将群为 groupID,userid 为 userID 的人踢出那个群

format formatTmpl

javascript
//注意 format 不会自动 reply,而是 return,所以请套一层 reply
+seal.replyToSender(ctx, msg, seal.format(ctx, \`{$t玩家}的人品为:{$t人品}\`))
+//{$t人品} 是一个 rollvm 变量,其值等于 .jrrp 出的数值
+//回复:
+//群主的人品为:87
+seal.replyToSender(ctx, msg, seal.formatTmpl(ctx, unknown))
+//这里等大佬来了再研究

getCtxProxyFirst getCtxProxyAtPos

javascript
cmd.solve = (ctx, msg, cmdArgs) => {
+    let ctxFirst = seal.getCtxProxyFirst(ctx, cmdArgs)
+    seal.replyToSender(ctx, msg, ctxFirst.player.name)
+}
+ext.cmdMap['test'] = cmd
+//输入:.test @A @B
+//返回:A 的名称。这里其实获取的是 A 玩家的 ctx,具体见 ctx 数据结构。
+cmd.solve = (ctx, msg, cmdArgs) => {
+    let ctx2 = seal.getCtxProxyAtPos(ctx, 2)
+    seal.replyToSender(ctx, msg, ctx3.player.name)
+}
+ext.cmdMap['test'] = cmd
+//输入:.test @A @B @C
+//返回:C(第三个被@的人,从 0 开始计算)的名称。这里其实获取的是 C 玩家的 ctx,具体见 ctx 数据结构。

vars

javascript
// 要看懂这里你可能需要学习一下初阶豹语
+seal.vars.intSet(ctx, \`$m今日打卡次数\`, 8) //将触发者的该个人变量设置为 8
+seal.vars.intGet(ctx, \`$m今日打卡次数\`) //返回 [8,true]
+seal.vars.strSet(ctx, \`$g群友经典语录\`, \`我要 Git Blame 一下看看是谁写的\`) //将群内的该群组变量设置为“我要 Git Blame 一下看看是谁写的”
+seal.vars.strGet(ctx, \`$g群友经典语录\`) //返回 ["我要 Git Blame 一下看看是谁写的",true]

ext

javascript
//用于注册扩展和定义指令的 api,已有详细示例,不多赘述

coc

javascript
//用于创建 coc 村规的 api,已有详细示例,不多赘述

deck

javascript
seal.deck.draw(ctx, \`煤气灯\`, false) //返回 放回抽取牌堆“煤气灯”的结果
+seal.deck.draw(ctx, \`煤气灯\`, true) //返回 不放回抽取牌堆“煤气灯”的结果
+seal.deck.reload() //重新加载牌堆

自定义 TRPG 规则相关

javascript
//这里实在不知道如何举例了
+seal.gameSystem.newTemplate(string) //从 json 解析新的游戏规则。
+seal.gameSystem.newTemplateByYaml(string) //从 yaml 解析新的游戏规则。
+seal.applyPlayerGroupCardByTemplate(ctx, tmpl) // 设定当前 ctx 玩家的自动名片格式
+seal.setPlayerGroupCard(ctx, tmpl) // 立刻设定当前 ctx 玩家的名片格式

其他

javascript
seal.newMessage() //返回一个空白的 Message 对象,结构与收到消息的 msg 相同
+seal.createTempCtx(endpoint, msg) // 制作一个 ctx, 需要 msg.MessageType 和 msg.Sender.UserId
+seal.getEndPoints() //返回骰子(应该?)的 EndPoints
+seal.getVersion() //返回一个 map,键值为 version 和 versionCode

ctx 的内容

javascript
//在 github.com/sealdice/javascript/examples_ts/seal.d.ts 中有完整内容
+// 成员
+ctx.group // 当前群信息 (对象)
+ctx.player // 当前玩家数据 (对象)
+ctx.endPoint // 接入点数据 (对象)
+// 以上三个对象内容暂略
+ctx.isCurGroupBotOn // bool
+ctx.isPrivate // bool 是否私聊
+ctx.privilegeLevel // int 权限等级:40 邀请者、50 管理、60 群主、70 信任、100 master
+ctx.delegateText // string 代骰附加文本
+// 方法 (太长,懒.)
+chBindCur
+chBindCurGet
+chBindGet
+chBindGetList
+chExists
+chGet
+chLoad
+chNew
+chUnbind
+chUnbindCur
+chVarsClear
+chVarsGet
+chVarsNumGet
+chVarsUpdateTime
+loadGroupVars
+loadPlayerGlobalVars
+loadPlayerGroupVars,notice

ctx.group 的内容

javascript
// 成员
+active
+groupId
+guildId
+groupName
+cocRuleIndex
+logCurName
+logOn
+recentDiceSendTime
+showGroupWelcome
+groupWelcomeMessage
+enteredTime
+inviteUserId
+// 方法
+extActive
+extClear
+extGetActive
+extInactive
+extInactiveByName
+getCharTemplate
+isActive
+playerGet

ctx.player 的内容

javascript
// 成员
+name
+userId
+lastCommandTime
+autoSetNameTemplate
+// 方法
+getValueNameByAlias

ctx.endPoint 的内容

javascript
// 成员
+baseInfo
+id
+nickname
+state
+userId
+groupNum
+cmdExecutedNum
+cmdExecutedLastTime
+onlineTotalTime
+platform
+enable
+// 方法
+adapterSetup
+refreshGroupNum
+setEnable
+unmarshalYAML

msg 的内容

javascript
// 成员
+msg.time // int64 发送时间
+msg.messageType // string group 群聊 private 私聊
+msg.groupId // string 如果是群聊,群号
+msg.guildId // string 服务器群组号,会在 discord,kook,dodo 等平台见到
+msg.sender // 发送者信息 (对象)
+    sender.nickname
+    sender.userId
+msg.message
+msg.rawId // 原始信息 ID, 用于撤回等
+msg.platform // 平台
+// 方法
+// (似乎目前没有?)

cmdArgs 的内容

javascript
// 成员
+.command // string
+.args // []string
+.kwargs // []Kwarg
+.at // []AtInfo
+.rawArgs // string
+.amIBeMentioned // bool (为何要加一个 Be?)
+.cleanArgs // string 一种格式化后的参数,也就是中间所有分隔符都用一个空格替代
+.specialExecuteTimes // 特殊的执行次数,对应 3# 这种
+// 方法
+.isArgEqual(n, ss...) // 返回 bool, 检查第 n 个参数是否在 ss 中
+.eatPrefixWith(ss...) // 似乎是从 cleanArgs 中去除 ss 中第一个匹配的前缀
+.chopPrefixToArgsWith(ss...) // 不懂
+.getArgN(n) // -> string
+.getKwarg(str) // -> Kwarg 如果有名为 str 的 flag,返回对象,否则返回 null/undefined(不确定)
+.getRestArgsFrom(n) // -> string 获取从第 n 个参数之后的所有参数,用空格拼接成一个字符串
`,41)]))}const y=i(l,[["render",h]]);export{g as __pageData,y as default}; diff --git a/assets/advanced_js_api_list.md.CA_tvSu7.lean.js b/assets/advanced_js_api_list.md.CA_tvSu7.lean.js new file mode 100644 index 000000000..e3584f1c8 --- /dev/null +++ b/assets/advanced_js_api_list.md.CA_tvSu7.lean.js @@ -0,0 +1,197 @@ +import{_ as i,c as a,a6 as n,o as t}from"./chunks/framework.B1keMFNq.js";const g=JSON.parse('{"title":"API 列表","description":"","frontmatter":{"lang":"zh-cn","title":"API 列表"},"headers":[],"relativePath":"advanced/js_api_list.md","filePath":"advanced/js_api_list.md","lastUpdated":1728702230000}'),l={name:"advanced/js_api_list.md"};function h(p,s,k,e,E,r){return t(),a("div",null,s[0]||(s[0]=[n(`

API 列表

本节内容

本节为海豹提供的 JS API 列表。目前的内容是从上古文档中直接迁移过来的,难免存在错误和缺失,参考本节时请注意识别。

更好的方式是参考海豹提供的 seal.d.ts 文件。(但同样存在缺失)

如果你需要最准确的内容,当前只能查阅海豹源码。主要查看 dice_jsvm.go,还有一些 API 以结构体方法的形式存在。

其中 ctx 为信息的 MsgContext,msg 为信息的 Message,一般会在定义指令函数时就声明,如:

javascript
cmd.solve = (ctx, msg, cmdArgs) => {
+    someFunction;
+}

下面是 API 的说明(完全了吧………应该?):

javascript
//被注释掉的 API 是可以提供的,但是在源码中被注释。
+//seal.setVarInt(ctx, \`$XXX\`, valueToSet) //\`$XXX\`即 rollvm(初阶豹语)中的变量,其会将$XXX 的值设定为 int 类型的 valueToSet。
+//seal.setVarStr(ctx, \`$XXX\`, valueToSet) //同上,区别是设定的为 str 类型的 valueToSet。
+seal.replyGroup(ctx, msg, something) //向收到指令的群中发送 something。
+seal.replyPerson(ctx, msg, something) //顾名思义,类似暗骰,向指令触发者(若为好友)私信 something。
+seal.replyToSender(ctx, msg, something) //同上,区别是群内收到就群内发送,私聊收到就私聊发送。
+seal.memberBan(ctx, groupID, userID, dur) //将指定群的指定用户封禁指定时间 (似乎只实现了 walleq 协议?)
+seal.memberKick(ctx, groupID, userID)  //将指定群的指定用户踢出 (似乎也只实现了 walleq 协议?)
+seal.format(ctx, something) //将 something 经过一层 rollvm 转译并返回,注意需要配合 replyToSender 才能发送给触发者!
+seal.formatTmpl(ctx, something) //调用自定义文案 something
+seal.getCtxProxyFirst(ctx, cmdArgs)  //获取被 at 的第一个人,等价于 getCtxProxyAtPos(ctx, cmdArgs, 0)
+seal.vars.intGet(ctx, \`$XXX\`) //返回一个数组,其为 \`[int 类型的触发者的该变量的值,bool]\` 当 strGet 一个 int 或 intGet 一个 str 时 bool 为 false,若一切正常则为 true。(之所以会有这么奇怪的说法是因为 rollvm 的「个人变量」机制)。
+seal.vars.intSet(ctx, \`$XXX\`, valueToSet) //\`$XXX\` 即 rollvm(初阶豹语)中的变量,其会将 $XXX 的值设定为 int 类型的 valueToSet。
+seal.vars.strGet(ctx, \`$XXX\`) //返回一个数组,其为 \`[str 类型的触发者的该变量的值,bool]\`(之所以会有这么奇怪的说法是因为 rollvm 的「个人变量」机制),当 strGet 一个 int 或 intGet 一个 str 时 bool 为 false,如果一切正常则为 true。
+seal.vars.strSet(ctx, \`$XXX\`, valueToSet) //\`$XXX\` 即 rollvm(初阶豹语)中的变量,其会将 $XXX 的值设定为 str 类型的 valueToSet。
+//seal.vars.varSet(ctx, \`$XXX\`, valueToSet) //可能是根据数据类型自动推断 int 或 str?
+//seal.vars.varGet(ctx, \`$XXX\`) //同上
+seal.ext.newCmdItemInfo() //用来定义新的指令;没有参数,个人觉得可以视其为类(class)。
+seal.ext.newCmdExecuteResult(bool) //用于判断指令执行结果,true 为成功,false 为失败。
+seal.ext.new(extName, extAuthor, Version) //用于建立一个名为 extName,作者为 extAuthor,版本为 Version 的扩展。注意,extName,extAuthor 和 Version 均为字符串。
+seal.ext.find(extName) //用于查找名为 extname 的扩展,若存在则返回 true,否则返回 false。
+seal.ext.register(newExt) //将扩展 newExt 注册到系统中。注意 newExt 是 seal.ext.new 的返回值,将 register 视为 seal.ext.new() 是错误的。
+seal.coc.newRule() //用来创建自定义 coc 规则,github.com/sealdice/javascript/examples 中已有详细例子,不多赘述。
+seal.coc.newRuleCheckResult() //同上,不多赘述。
+seal.coc.registerRule(rule) //同上,不多赘述。
+seal.deck.draw(ctx, deckname, isShuffle) //他会返回一个抽取牌堆的结果。这里有些复杂:deckname 为需要抽取的牌堆名,而 isShuffle 则是一个布尔值,它决定是否放回抽取;false 为放回,true 为不放回。
+seal.deck.reload() //重新加载牌堆。
+//下面是 1.2 新增 api
+seal.newMessage() //返回一个空白的 Message 对象,结构与收到消息的 msg 相同
+seal.createTempCtx(endpoint, msg) // 制作一个 ctx, 需要 msg.MessageType 和 msg.Sender.UserId
+seal.applyPlayerGroupCardByTemplate(ctx, tmpl) // 设定当前 ctx 玩家的自动名片格式
+seal.gameSystem.newTemplate(string) //从 json 解析新的游戏规则。
+seal.gameSystem.newTemplateByYaml(string) //从 yaml 解析新的游戏规则。
+seal.getCtxProxyAtPos(ctx, cmdArgs, pos) //获取第 pos 个被 at 的人,pos 从 0 开始计数
+atob(base64String) //返回被解码的 base64 编码
+btoa(string) //将 string 编码为 base64 并返回
+
+//下面是 1.4.1 新增 api
+seal.ext.newConfigItem() //用于创建一个新的配置项,返回一个 ConfigItem 对象
+seal.ext.registerConfig(configItem) //用于注册一个配置项,参数为 ConfigItem 对象
+seal.ext.getConfig(ext, "key") //用于获取一个配置项的值,参数为扩展对象和配置项的 key
+seal.ext.registerStringConfig(ext, "key", "defaultValue") //用于注册一个 string 类型的配置项,参数为扩展对象、配置项的 key 和默认值
+seal.ext.registerIntConfig(ext, "key", 123) //用于注册一个 int 类型的配置项,参数为扩展对象、配置项的 key 和默认值
+seal.ext.registerFloatConfig(ext, "key", 123.456) //用于注册一个 float 类型的配置项,参数为扩展对象、配置项的 key 和默认值
+seal.ext.registerBoolConfig(ext, "key", true) //用于注册一个 bool 类型的配置项,参数为扩展对象、配置项的 key 和默认值
+seal.ext.registerTemplateConfig(ext, "key", ["1", "2", "3", "4"]) //用于注册一个 template 类型的配置项,参数为扩展对象、配置项的 key 和默认值
+seal.ext.registerOptionConfig(ext, "key", "1", ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]) //用于注册一个 option 类型的配置项,参数为扩展对象、配置项的 key、默认值和可选项
+seal.ext.getStringConfig(ext, "key") //用于获取一个 string 类型配置项的值,参数为扩展对象和配置项的 key
+seal.ext.getIntConfig(ext, "key") //用于获取一个 int 类型配置项的值,参数为扩展对象和配置项的 key
+seal.ext.getFloatConfig(ext, "key") //用于获取一个 float 类型配置项的值,参数为扩展对象和配置项的 key
+seal.ext.getBoolConfig(ext, "key") //用于获取一个 bool 类型配置项的值,参数为扩展对象和配置项的 key
+seal.ext.getTemplateConfig(ext, "key") //用于获取一个 template 类型配置项的值,参数为扩展对象和配置项的 key
+seal.ext.getOptionConfig(ext, "key") //用于获取一个 option 类型配置项的值,参数为扩展对象和配置项的 key
+
+//下面是 1.4.4 新增 api
+seal.setPlayerGroupCard(ctx, tmpl) //设置当前 ctx 玩家的名片
+seal.ban.addBan(ctx, id, place, reason)
+seal.ban.addTrust(ctx, id, place, reason)
+seal.ban.remove(ctx, id)
+seal.ban.getList()
+seal.ban.getUser(id)

以下为部分 API 使用示例。

提示

声明和注册扩展的代码部分已省略。

replyGroup replyPerson replyToSender

javascript
//在私聊触发 replyGroup 不会回复
+seal.replyGroup(ctx, msg, 'something'); //触发者会收到"something"的回复
+seal.replyPerson(ctx, msg, 'something'); //触发者会收到"something"的私聊回复
+seal.replyToSender(ctx, msg, 'something'); //触发者会收到"something"的回复

memberBan memberKick

是否保留待议

javascript
//注意这些似乎只能在 WQ 协议上实现;
+seal.memberBan(ctx, groupID, userID, dur) //将群为 groupID,userid 为 userID 的人封禁 dur(单位未知)
+seal.memberKick(ctx, groupID, userID) //将群为 groupID,userid 为 userID 的人踢出那个群

format formatTmpl

javascript
//注意 format 不会自动 reply,而是 return,所以请套一层 reply
+seal.replyToSender(ctx, msg, seal.format(ctx, \`{$t玩家}的人品为:{$t人品}\`))
+//{$t人品} 是一个 rollvm 变量,其值等于 .jrrp 出的数值
+//回复:
+//群主的人品为:87
+seal.replyToSender(ctx, msg, seal.formatTmpl(ctx, unknown))
+//这里等大佬来了再研究

getCtxProxyFirst getCtxProxyAtPos

javascript
cmd.solve = (ctx, msg, cmdArgs) => {
+    let ctxFirst = seal.getCtxProxyFirst(ctx, cmdArgs)
+    seal.replyToSender(ctx, msg, ctxFirst.player.name)
+}
+ext.cmdMap['test'] = cmd
+//输入:.test @A @B
+//返回:A 的名称。这里其实获取的是 A 玩家的 ctx,具体见 ctx 数据结构。
+cmd.solve = (ctx, msg, cmdArgs) => {
+    let ctx2 = seal.getCtxProxyAtPos(ctx, 2)
+    seal.replyToSender(ctx, msg, ctx3.player.name)
+}
+ext.cmdMap['test'] = cmd
+//输入:.test @A @B @C
+//返回:C(第三个被@的人,从 0 开始计算)的名称。这里其实获取的是 C 玩家的 ctx,具体见 ctx 数据结构。

vars

javascript
// 要看懂这里你可能需要学习一下初阶豹语
+seal.vars.intSet(ctx, \`$m今日打卡次数\`, 8) //将触发者的该个人变量设置为 8
+seal.vars.intGet(ctx, \`$m今日打卡次数\`) //返回 [8,true]
+seal.vars.strSet(ctx, \`$g群友经典语录\`, \`我要 Git Blame 一下看看是谁写的\`) //将群内的该群组变量设置为“我要 Git Blame 一下看看是谁写的”
+seal.vars.strGet(ctx, \`$g群友经典语录\`) //返回 ["我要 Git Blame 一下看看是谁写的",true]

ext

javascript
//用于注册扩展和定义指令的 api,已有详细示例,不多赘述

coc

javascript
//用于创建 coc 村规的 api,已有详细示例,不多赘述

deck

javascript
seal.deck.draw(ctx, \`煤气灯\`, false) //返回 放回抽取牌堆“煤气灯”的结果
+seal.deck.draw(ctx, \`煤气灯\`, true) //返回 不放回抽取牌堆“煤气灯”的结果
+seal.deck.reload() //重新加载牌堆

自定义 TRPG 规则相关

javascript
//这里实在不知道如何举例了
+seal.gameSystem.newTemplate(string) //从 json 解析新的游戏规则。
+seal.gameSystem.newTemplateByYaml(string) //从 yaml 解析新的游戏规则。
+seal.applyPlayerGroupCardByTemplate(ctx, tmpl) // 设定当前 ctx 玩家的自动名片格式
+seal.setPlayerGroupCard(ctx, tmpl) // 立刻设定当前 ctx 玩家的名片格式

其他

javascript
seal.newMessage() //返回一个空白的 Message 对象,结构与收到消息的 msg 相同
+seal.createTempCtx(endpoint, msg) // 制作一个 ctx, 需要 msg.MessageType 和 msg.Sender.UserId
+seal.getEndPoints() //返回骰子(应该?)的 EndPoints
+seal.getVersion() //返回一个 map,键值为 version 和 versionCode

ctx 的内容

javascript
//在 github.com/sealdice/javascript/examples_ts/seal.d.ts 中有完整内容
+// 成员
+ctx.group // 当前群信息 (对象)
+ctx.player // 当前玩家数据 (对象)
+ctx.endPoint // 接入点数据 (对象)
+// 以上三个对象内容暂略
+ctx.isCurGroupBotOn // bool
+ctx.isPrivate // bool 是否私聊
+ctx.privilegeLevel // int 权限等级:40 邀请者、50 管理、60 群主、70 信任、100 master
+ctx.delegateText // string 代骰附加文本
+// 方法 (太长,懒.)
+chBindCur
+chBindCurGet
+chBindGet
+chBindGetList
+chExists
+chGet
+chLoad
+chNew
+chUnbind
+chUnbindCur
+chVarsClear
+chVarsGet
+chVarsNumGet
+chVarsUpdateTime
+loadGroupVars
+loadPlayerGlobalVars
+loadPlayerGroupVars,notice

ctx.group 的内容

javascript
// 成员
+active
+groupId
+guildId
+groupName
+cocRuleIndex
+logCurName
+logOn
+recentDiceSendTime
+showGroupWelcome
+groupWelcomeMessage
+enteredTime
+inviteUserId
+// 方法
+extActive
+extClear
+extGetActive
+extInactive
+extInactiveByName
+getCharTemplate
+isActive
+playerGet

ctx.player 的内容

javascript
// 成员
+name
+userId
+lastCommandTime
+autoSetNameTemplate
+// 方法
+getValueNameByAlias

ctx.endPoint 的内容

javascript
// 成员
+baseInfo
+id
+nickname
+state
+userId
+groupNum
+cmdExecutedNum
+cmdExecutedLastTime
+onlineTotalTime
+platform
+enable
+// 方法
+adapterSetup
+refreshGroupNum
+setEnable
+unmarshalYAML

msg 的内容

javascript
// 成员
+msg.time // int64 发送时间
+msg.messageType // string group 群聊 private 私聊
+msg.groupId // string 如果是群聊,群号
+msg.guildId // string 服务器群组号,会在 discord,kook,dodo 等平台见到
+msg.sender // 发送者信息 (对象)
+    sender.nickname
+    sender.userId
+msg.message
+msg.rawId // 原始信息 ID, 用于撤回等
+msg.platform // 平台
+// 方法
+// (似乎目前没有?)

cmdArgs 的内容

javascript
// 成员
+.command // string
+.args // []string
+.kwargs // []Kwarg
+.at // []AtInfo
+.rawArgs // string
+.amIBeMentioned // bool (为何要加一个 Be?)
+.cleanArgs // string 一种格式化后的参数,也就是中间所有分隔符都用一个空格替代
+.specialExecuteTimes // 特殊的执行次数,对应 3# 这种
+// 方法
+.isArgEqual(n, ss...) // 返回 bool, 检查第 n 个参数是否在 ss 中
+.eatPrefixWith(ss...) // 似乎是从 cleanArgs 中去除 ss 中第一个匹配的前缀
+.chopPrefixToArgsWith(ss...) // 不懂
+.getArgN(n) // -> string
+.getKwarg(str) // -> Kwarg 如果有名为 str 的 flag,返回对象,否则返回 null/undefined(不确定)
+.getRestArgsFrom(n) // -> string 获取从第 n 个参数之后的所有参数,用空格拼接成一个字符串
`,41)]))}const y=i(l,[["render",h]]);export{g as __pageData,y as default}; diff --git a/assets/advanced_js_example.md.BjLC5-Pm.js b/assets/advanced_js_example.md.BjLC5-Pm.js new file mode 100644 index 000000000..558339575 --- /dev/null +++ b/assets/advanced_js_example.md.BjLC5-Pm.js @@ -0,0 +1,887 @@ +import{_ as l,c as p,a6 as h,j as i,a,G as k,B as t,o as e}from"./chunks/framework.B1keMFNq.js";const E="/sealdice-manual-next/assets/js-config-example.Ctkb00mX.png",m=JSON.parse('{"title":"常见用法示例","description":"","frontmatter":{"lang":"zh-cn","title":"常见用法示例"},"headers":[],"relativePath":"advanced/js_example.md","filePath":"advanced/js_example.md","lastUpdated":1728702230000}'),r={name:"advanced/js_example.md"},d={class:"info custom-block"},g={id:"黑名单-信任名单操作",tabindex:"-1"},y={id:"注册插件配置项",tabindex:"-1"},F={id:"注册定时任务",tabindex:"-1"};function c(o,s,C,A,D,B){const n=t("Badge");return e(),p("div",null,[s[27]||(s[27]=h(`

常见用法示例

创建和注册扩展

提示:扩展机制

扩展机制可以看做是海豹的 mod 管理机制,可以模块化开关海豹的任意一部分,如常用的开启 dnd 扩展,关闭 coc 扩展,关闭自动回复等。

可以查看 .ext 命令 来了解更多。

在海豹中,所有指令必须归属于某个扩展,而一个扩展可以包含多条指令。

JS 脚本中创建扩展的方式如下,在创建扩展后,还需要注册扩展,才能让扩展起效,不要漏掉哦!

javascript
// 如何建立一个扩展
+
+// 首先检查是否已经存在
+if (!seal.ext.find('test')) {
+  // 不存在,那么建立扩展,名为 test,作者“木落”,版本 1.0.0
+  const ext = seal.ext.new('test', '木落', '1.0.0');
+  // 注册扩展
+  seal.ext.register(ext);
+}

注意:JS 脚本和扩展

在实现上,海豹允许你在一个 JS 脚本文件中注册多个扩展,但我们不建议这样做。一般来说,一个 JS 脚本文件只会注册一个扩展。

注意:修改内置功能?

出于对公平性的考虑,JS 脚本不能替换内置指令和内置扩展。

自定义指令

想要创建一条自定义指令,首先需要创建一个扩展(seal.ExtInfo),写好自定义指令的实现逻辑之后,再注册到扩展中。

创建指令

接上面的代码,假定目前已经注册好了一个名为 test 的扩展,现在要写一个名为 seal 的指令:

  • 这个命令的功能为,显示「抓到一只海豹」的文案;
    • 如果命令写 .seal ABC,那么文案中将海豹命名为「ABC」;
    • 如果命令中没写名字,那么命名为默认值「氪豹」。

第一步,创建新的自定义指令,设置好名字和帮助信息。

javascript
const cmdSeal = seal.ext.newCmdItemInfo();
+cmdSeal.name = 'seal'; // 指令名字,可用中文
+cmdSeal.help = '召唤一只海豹,可用 .seal <名字> 命名';

注意:命令的帮助信息

命令的帮助信息是在使用 .help <命令> 时会返回的帮助内容。

帮助信息不要. 开头,防止查看帮助时骰子的回复触发其他骰子。

第二步,编写指令的具体处理代码。

你需要编写指令对象的 solve 函数,在使用该指令的时候,海豹核心会调用你写的这个函数。

javascript
cmdSeal.solve = (ctx, msg, cmdArgs) => {
+    // 这里是你需要编写的内容
+};
参数说明
ctx主要是和当前环境以及用户相关的内容,如当前发指令用户,当前群组信息等
msg原始指令内容,如指令文本,发送平台,发送时间等
cmdArgs指令信息,会将用户发的信息进行分段,方便快速取用

这里仅说明需要用到的接口,详细可见 插件仓库 examp_ts 下的 seal.d.ts 文件,里面包含了目前开放的接口的定义及其注释说明。

指令参数与返回值

假设用户发送过来的消息是 .seal A B C,那么可以用 cmdArgs.getArgN(1) 获取到 AcmdArgs.getArgN(2) 获取到 BcmdArgs.getArgN(3) 获取到 C

通常会对参数值进行判断,随后作出响应。

以下代码处理的是 .seal help 的情形:

javascript
cmdSeal.solve = (ctx, msg, cmdArgs) => {
+  // 获取第一个参数,例如 .seal A B C
+  // 这里 cmdArgs.getArgN(1) 的结果即是 A,传参为 2 的话结果是 B
+  let val = cmdArgs.getArgN(1);
+  switch (val) {
+    case 'help': {
+      // 命令为 .seal help
+      // 创建一个结果对象,并将 showHelp 标记为 true,这会自动给用户发送帮助
+      const ret = seal.ext.newCmdExecuteResult(true);
+      ret.showHelp = true;
+      return ret;
+    }
+    default: {
+      // 没有传入参数时的代码
+      return seal.ext.newCmdExecuteResult(true);
+    }
+  }
+};

注意:返回执行结果

在执行完自己的代码之后,需要返回指令结果对象,其参数是是否执行成功。

指令核心执行流程

给消息发送者回应,需要使用 seal.replyToSender() 函数,前两个参数和 solve() 函数接收的参数一致,第三个参数是你要发送的文本。

发送的文本中,可以包含 变量(例如{$t玩家}),也可以包含 CQ 码,用来实现回复发送者、@发送者、发送图片、发送分享卡片等功能。

在这个例子中,我们需要获取作为海豹名字的参数,获取不到就使用默认值,随后向消息发送者发送回应。

在刚刚的位置填入核心代码,就可以完成了。

javascript
cmdSeal.solve = (ctx, msg, cmdArgs) => {
+  // 获取第一个参数,例如 .seal A B C
+  // 这里 cmdArgs.getArgN(1) 的结果即是 A,传参为 2 的话结果是 B
+  let val = cmdArgs.getArgN(1);
+  switch (val) {
+    case 'help': {
+      // 命令为 .seal help
+      // 创建一个结果对象,并将 showHelp 标记为 true,这会自动给用户发送帮助
+      const ret = seal.ext.newCmdExecuteResult(true);
+      ret.showHelp = true;
+      return ret;
+    }
+    default: {
+      // 命令为 .seal XXXX,取第一个参数为名字
+      if (!val) val = '氪豹';
+      // 进行回复,如果是群聊发送那么在群里回复,私聊发送则在私聊回复 (听起来是废话文学,但详细区别见暗骰例子)
+      seal.replyToSender(ctx, msg, \`你抓到一只海豹!取名为\${val}\\n它的逃跑意愿为\${Math.ceil(Math.random() * 100)}\`);
+      return seal.ext.newCmdExecuteResult(true);
+    }
+  }
+};

注册指令

第三步,将命令注册到扩展中。

javascript
ext.cmdMap['seal'] = cmdSeal;

如果你想要给这个命令起一个别名,也就是增加一个触发词,可以这样写:

javascript
ext.cmdMap['seal'] = cmdSeal; // 注册 .seal 指令
+ext.cmdMap['海豹'] = cmdSeal; // 注册 .海豹 指令,等效于 .seal

完整的代码如下:

javascript
// ==UserScript==
+// @name         示例:编写一条自定义指令
+// @author       木落
+// @version      1.0.0
+// @description  召唤一只海豹,可用.seal <名字> 命名
+// @timestamp    1671368035
+// 2022-12-18
+// @license      Apache-2
+// @homepageURL  https://github.com/sealdice/javascript
+// ==/UserScript==
+
+// 编写一条自定义指令
+// 先将扩展模块创建出来,如果已创建就直接使用
+let ext = seal.ext.find('test');
+if (!ext) {
+  ext = seal.ext.new('test', '木落', '1.0.0');
+
+  // 创建指令 .seal
+  // 这个命令的功能为,显示「抓到一只海豹」的文案;
+  // 如果命令写 .seal ABC,那么文案中将海豹命名为「ABC」;
+  // 如果命令中没写名字,那么命名为默认值「氪豹」。
+  const cmdSeal = seal.ext.newCmdItemInfo();
+  cmdSeal.name = 'seal'; // 指令名字,可用中文
+  cmdSeal.help = '召唤一只海豹,可用 .seal <名字> 命名';
+
+  // 主函数,指令解析器会将指令信息解析,并储存在几个参数中
+  // ctx 主要是和当前环境以及用户相关的内容,如当前发指令用户,当前群组信息等
+  // msg 为原生态的指令内容,如指令文本,发送平台,发送时间等
+  // cmdArgs 为指令信息,会将用户发的信息进行分段,方便快速取用
+  cmdSeal.solve = (ctx, msg, cmdArgs) => {
+    // 获取第一个参数,例如 .seal A B C
+    // 这里 cmdArgs.getArgN(1) 的结果即是 A,传参为 2 的话结果是 B
+    let val = cmdArgs.getArgN(1);
+    switch (val) {
+      case 'help': {
+        // 命令为 .seal help
+        // 创建一个结果对象,并将 showHelp 标记为 true,这会自动给用户发送帮助
+        const ret = seal.ext.newCmdExecuteResult(true);
+        ret.showHelp = true;
+        return ret;
+      }
+      default: {
+        // 命令为 .seal XXXX,取第一个参数为名字
+        if (!val) val = '氪豹';
+        // 进行回复,如果是群聊发送那么在群里回复,私聊发送则在私聊回复 (听起来是废话文学,但详细区别见暗骰例子)
+        seal.replyToSender(ctx, msg, \`你抓到一只海豹!取名为\${val}\\n它的逃跑意愿为\${Math.ceil(Math.random() * 100)}\`);
+        return seal.ext.newCmdExecuteResult(true);
+      }
+    }
+  };
+
+  // 将命令注册到扩展中
+  ext.cmdMap['seal'] = cmdSeal;
+
+  // 无实际意义,用于消除编译报错
+  export {}
+
+  seal.ext.register(ext);
+}

这就是最基本的模板了。

抽取牌堆

抽取牌堆的函数是 seal.deck.draw(ctx, deckName, shufflePool)

  • ctxMsgContext 类型,指令上下文,solve() 函数传进来的第一个参数
  • deckName:牌堆名称,字符串类型,例如 GRE单词
  • shufflePool:是否放回抽取,布尔类型,true 为放回抽取,false 为不放回抽取

返回值是一个 map,包含以下字段:

  • exists:布尔类型,是否抽取成功
  • result:字符串类型,抽取结果
  • err:字符串类型,抽取失败的原因

示例代码:抽取牌堆

javascript
// ==UserScript==
+// @name         抽取牌堆示例
+// @author       SzzRain
+// @version      1.0.0
+// @description  用于演示如何抽取牌堆
+// @timestamp    1699077659
+// @license      MIT
+// @homepageURL  https://github.com/sealdice/javascript
+// ==/UserScript==
+
+// 本脚本用于演示如何抽取牌堆, 共有两种实现方式
+if (!seal.ext.find('draw-decks-example')) {
+  const ext = seal.ext.new('draw-decks-example', 'SzzRain', '1.0.0');
+  // 创建一个命令
+  const cmdDrawDecks = seal.ext.newCmdItemInfo();
+  cmdDrawDecks.name = 'dr';
+  cmdDrawDecks.help = '使用 .dr <牌堆名> 来抽取牌堆';
+  cmdDrawDecks.solve = (ctx, msg, cmdArgs) => {
+    // 抽取牌堆
+    // 参数1:ctx 参数2:牌堆名称 参数3:是否放回抽取
+    // 返回值:{exists: true, result: '抽取结果', err: '错误原因'}
+    const decks = seal.deck.draw(ctx, cmdArgs.getArgN(1), true);
+    // 判断是否抽取成功
+    if (decks['exists']) {
+      seal.replyToSender(ctx, msg, decks['result']);
+      return seal.ext.newCmdExecuteResult(true);
+    } else {
+      seal.replyToSender(ctx, msg, '抽取牌堆失败,原因:' + decks['err']);
+      return seal.ext.newCmdExecuteResult(true);
+    }
+  };
+  // 注册命令
+  ext.cmdMap['dr'] = cmdDrawDecks;
+
+  // 创建一个命令
+  const cmdDrawDecks2 = seal.ext.newCmdItemInfo();
+  cmdDrawDecks2.name = 'dr2';
+  cmdDrawDecks2.help = '使用 .dr2 <牌堆名> 来抽取牌堆';
+  cmdDrawDecks2.solve = (ctx, msg, cmdArgs) => {
+    // 抽取牌堆的另一种写法,使用 format 函数,由于经过了 rollvm 的处理,所以代码的执行效率会更慢
+    // 不过这种写法的返回值固定为字符串,省去了判断是否抽取成功的步骤
+    // 参数1:ctx 参数2:海豹语表达式,其中 #{DRAW-牌堆名称} 会被替换为抽取结果
+    const decks = seal.format(ctx, \`#{DRAW-\${cmdArgs.getArgN(1)}}\`);
+    seal.replyToSender(ctx, msg, decks);
+  }
+  // 注册命令
+  ext.cmdMap['dr2'] = cmdDrawDecks2;
+
+  // 注册扩展
+  seal.ext.register(ext);
+}

权限识别

海豹中的权限等级,由高到低分别是:骰主群主管理员邀请者普通用户黑名单用户。 每一个身份都有一个对应的数字,可以通过 ctx.privilegeLevel 获取当前用户的权限等级。 每个身份所对应的数字如下表所示:

`,50)),i("div",d,[s[16]||(s[16]=i("p",{class:"custom-block-title"},"信息",-1)),s[17]||(s[17]=i("p",null,[i("strong",null,"注意:"),a(" 部分权限等级仅在群聊中有效。")],-1)),i("p",null,[s[0]||(s[0]=a("从 ")),k(n,{type:"tip",text:"v1.4.5"}),s[1]||(s[1]=a(" 起,在私聊中,除了")),s[2]||(s[2]=i("strong",null,"骰主",-1)),s[3]||(s[3]=a(",")),s[4]||(s[4]=i("strong",null,"白名单用户",-1)),s[5]||(s[5]=a("和")),s[6]||(s[6]=i("strong",null,"黑名单用户",-1)),s[7]||(s[7]=a(",其他用户被视为拥有与群管理员等同的权限,即权限值 50。"))]),i("p",null,[s[8]||(s[8]=a("在 ")),k(n,{type:"danger",text:"v1.4.4"}),s[9]||(s[9]=a(" 或更早版本,私聊中除了")),s[10]||(s[10]=i("strong",null,"骰主",-1)),s[11]||(s[11]=a(",")),s[12]||(s[12]=i("strong",null,"白名单用户",-1)),s[13]||(s[13]=a("和")),s[14]||(s[14]=i("strong",null,"黑名单用户",-1)),s[15]||(s[15]=a(",其他用户的权限等级为普通用户(0)。"))])]),s[28]||(s[28]=h(`
身份权限值
骰主100
白名单70
群主60
管理员50
邀请者40
普通用户0
黑名单用户-30

提示:关于白名单用户

白名单用户即通过骰主手动添加的信任名单用户,可以使用所有需要群管理权限的功能,但不具备 Master 权限。

信任名单可以通过 .ban trust <统一ID> 添加,通过 .ban list trust 查看。

提示:关于黑名单用户

通常情况下你不需要考虑黑名单用户的情况,因为黑名单用户的消息会被过滤掉,不会触发任何指令。

示例代码:权限识别

javascript
// ==UserScript==
+// @name         权限识别样例
+// @author       SzzRain
+// @version      1.0.0
+// @description  使用命令 .myperm 查看自己的权限
+// @timestamp    1699086084
+// @license      MIT
+// @homepageURL  https://github.com/Szzrain
+// ==/UserScript==
+if (!seal.ext.find('myperm')) {
+  const ext = seal.ext.new('myperm', 'SzzRain', '1.0.0');
+  // 创建一个命令
+  const cmdMyperm = seal.ext.newCmdItemInfo();
+  cmdMyperm.name = 'myperm';
+  cmdMyperm.help = '使用 .myperm 展示我的权限';
+  cmdMyperm.solve = (ctx, msg, cmdArgs) => {
+    let text = "普通用户";
+    console.log(ctx.privilegeLevel);
+    switch (ctx.privilegeLevel) {
+      case 100:
+        text = "master";
+        break;
+      case 60:
+        text = "owner";
+        break;
+      case 50:
+        text = "admin";
+        break;
+      case 40:
+        text = "inviter";
+        break;
+      case -30:
+        // 黑名单用户,但是由于黑名单会被过滤掉,所以实际上这里并不会执行,这里只是为了演示
+        return seal.ext.newCmdExecuteResult(false);
+    }
+    seal.replyToSender(ctx, msg, text);
+    return seal.ext.newCmdExecuteResult(true);
+  }
+  // 注册命令
+  ext.cmdMap['myperm'] = cmdMyperm;
+
+  // 注册扩展
+  seal.ext.register(ext);
+}
`,5)),i("h2",g,[s[18]||(s[18]=a("黑名单 / 信任名单操作 ")),k(n,{type:"tip",text:"v1.4.4"}),s[19]||(s[19]=a()),s[20]||(s[20]=i("a",{class:"header-anchor",href:"#黑名单-信任名单操作","aria-label":'Permalink to "黑名单 / 信任名单操作 "'},"​",-1))]),s[29]||(s[29]=h(`

黑名单操作的函数

添加:seal.ban.addBan(ctx, uid, place, reason)

移除:seal.ban.remove(ctx, uid)

  • ctxMsgContext 类型,指令上下文,solve() 函数传进来的第一个参数
  • uid:用户 ID,字符串类型,例如 QQ:123456789, TG:123456789
  • place:拉黑的地方,字符串类型,随便写,一般来说在群内拉黑就写群 ID
  • reason:拉黑原因,字符串类型,随便写

信任用户名单

添加:seal.ban.addTrust(ctx, uid, place, reason) 参数说明同上

移除:seal.ban.remove(ctx, uid)

提示:相同的移除函数

黑名单和信任名单存储在同一个数据库中,因此移除时使用的是同一个函数。

你在进行移除操作时需要自己判断是否符合你的预期。

获取黑名单 / 信任名单列表

使用 seal.ban.getList()

返回值为一个数组,数组中的每一项都是一个 BanListInfoItem 对象,包含以下字段:

  • id:用户 ID,字符串类型
  • name:用户昵称,字符串类型
  • score:怒气值,整数类型
  • rank:拉黑/信任等级 0=没事 -10=警告 -30=禁止 30=信任
  • times:事发时间,数组类型,内部元素为整数时间戳
  • reasons:拉黑/信任原因,数组类型,内部元素为字符串
  • places:拉黑/信任的发生地点,数组类型,内部元素为字符串
  • banTime:拉黑/信任的时间,整数时间戳

获取用户在黑名单 / 信任名单中的信息

使用 seal.ban.getUser(uid)

如果用户没有在黑名单 / 信任名单中,返回值为空值。

如果有则返回一个 BanListInfoItem 对象,字段同上。

示例代码:黑名单 / 信任名单操作

javascript
// ==UserScript==
+// @name         js-ban
+// @author       SzzRain
+// @version      1.0.0
+// @description  演示 js 扩展操作黑名单
+// @timestamp    1706684850
+// @license      MIT
+// @homepageURL  https://github.com/Szzrain
+// ==/UserScript==
+
+if (!seal.ext.find('js-ban')) {
+  const ext = seal.ext.new('js-ban', 'SzzRain', '1.0.0');
+  // 创建一个命令
+  const cmdcban = seal.ext.newCmdItemInfo();
+  cmdcban.name = 'cban';
+  cmdcban.help = '使用.cban <用户id> 来拉黑目标用户,仅master可用';
+  cmdcban.solve = (ctx, msg, cmdArgs) => {
+      let val = cmdArgs.getArgN(1);
+      switch (val) {
+          case 'help': {
+              const ret = seal.ext.newCmdExecuteResult(true);
+              ret.showHelp = true;
+              return ret;
+          }
+          default: {
+              if (ctx.privilegeLevel === 100) {
+                  seal.ban.addBan(ctx, val, "JS扩展拉黑", "JS扩展拉黑测试");
+                  seal.replyToSender(ctx, msg, "已拉黑用户" + val);
+              } else {
+                  seal.replyToSender(ctx, msg, "你没有权限执行此命令");
+              }
+              return seal.ext.newCmdExecuteResult(true);
+          }
+      }
+  }
+  // 注册命令
+  ext.cmdMap['cban'] = cmdcban;
+
+  // 创建一个命令
+  const cmdcunban = seal.ext.newCmdItemInfo();
+  cmdcunban.name = 'cunban';
+  cmdcunban.help = '使用.cunban <用户id> 来解除拉黑/移除信任目标用户,仅master可用';
+  cmdcunban.solve = (ctx, msg, cmdArgs) => {
+      let val = cmdArgs.getArgN(1);
+      switch (val) {
+          case 'help': {
+              const ret = seal.ext.newCmdExecuteResult(true);
+              ret.showHelp = true;
+              return ret;
+          }
+          default: {
+              if (ctx.privilegeLevel === 100) {
+                  // 信任用户和拉黑用户存在同一个列表中,remove 前请先判断是否符合预期
+                  seal.ban.remove(ctx, val);
+                  seal.replyToSender(ctx, msg, "已解除拉黑/信任用户" + val);
+              } else {
+                  seal.replyToSender(ctx, msg, "你没有权限执行此命令");
+              }
+              return seal.ext.newCmdExecuteResult(true);
+          }
+      }
+  }
+  // 注册命令
+  ext.cmdMap['cunban'] = cmdcunban;
+
+  // 创建一个命令
+  const cmdctrust = seal.ext.newCmdItemInfo();
+  cmdctrust.name = 'ctrust';
+  cmdctrust.help = '使用.ctrust <用户id> 来信任目标用户,仅master可用';
+  cmdctrust.solve = (ctx, msg, cmdArgs) => {
+    let val = cmdArgs.getArgN(1);
+    switch (val) {
+      case 'help': {
+        const ret = seal.ext.newCmdExecuteResult(true);
+        ret.showHelp = true;
+        return ret;
+      }
+      default: {
+        if (ctx.privilegeLevel === 100) {
+          seal.ban.addTrust(ctx, val, "JS扩展信任", "JS扩展信任测试");
+          seal.replyToSender(ctx, msg, "已信任用户" + val);
+        } else {
+          seal.replyToSender(ctx, msg, "你没有权限执行此命令");
+        }
+        return seal.ext.newCmdExecuteResult(true);
+      }
+    }
+  }
+  // 注册命令
+  ext.cmdMap['ctrust'] = cmdctrust;
+
+  // 创建一个命令
+  const cmdcbanlist = seal.ext.newCmdItemInfo();
+  cmdcbanlist.name = 'cbanlist';
+  cmdcbanlist.help = '使用.cbanlist 来查看黑名单和信任列表,仅master可用';
+  cmdcbanlist.solve = (ctx, msg, cmdArgs) => {
+    let val = cmdArgs.getArgN(1);
+    switch (val) {
+      case 'help': {
+        const ret = seal.ext.newCmdExecuteResult(true);
+        ret.showHelp = true;
+        return ret;
+      }
+      default: {
+        if (ctx.privilegeLevel === 100) {
+          let text = "黑名单/信任列表:\\n";
+          seal.ban.getList().forEach((v) => {
+            text += \`\${v.name}(\${v.id}) 当前等级:\${v.rank} 怒气值:\${v.score}\\n\`;
+          });
+          seal.replyToSender(ctx, msg, text);
+        } else {
+          seal.replyToSender(ctx, msg, "你没有权限执行此命令");
+        }
+        return seal.ext.newCmdExecuteResult(true);
+      }
+    }
+  }
+  // 注册命令
+  ext.cmdMap['cbanlist'] = cmdcbanlist;
+
+  // 创建一个命令
+  const cmdcget = seal.ext.newCmdItemInfo();
+  cmdcget.name = 'cget';
+  cmdcget.help = '使用.cget <用户id> 来查看目标用户的黑名单/信任信息,仅master可用';
+  cmdcget.solve = (ctx, msg, cmdArgs) => {
+    let val = cmdArgs.getArgN(1);
+    switch (val) {
+      case 'help': {
+        const ret = seal.ext.newCmdExecuteResult(true);
+        ret.showHelp = true;
+        return ret;
+      }
+      default: {
+        if (ctx.privilegeLevel === 100) {
+          let info = seal.ban.getUser(val);
+          if (!info) {
+            seal.replyToSender(ctx, msg, "用户不存在或未被拉黑/信任");
+            return seal.ext.newCmdExecuteResult(true);
+          }
+          let level = info.rank;
+          // 不知道为什么,用 === 是 false
+          if (info.rank == 30) {
+            level = "信任"
+          } else if (info.rank == -30) {
+            level = "拉黑"
+          } else if (info.rank == -10) {
+            level = "警告"
+          }
+          let text = \`用户\${info.name}(\${info.id}) 当前等级:\${level} 怒气值:\${info.score}\`;
+          seal.replyToSender(ctx, msg, text);
+        } else {
+          seal.replyToSender(ctx, msg, "你没有权限执行此命令");
+        }
+        return seal.ext.newCmdExecuteResult(true);
+      }
+    }
+  }
+  // 注册命令
+  ext.cmdMap['cget'] = cmdcget;
+
+  // 注册扩展
+  seal.ext.register(ext);
+}

存取数据

相关的 API 是两个函数,ExtInfo.storageSet(key, value) 函数和 ExtInfo.storageGet(key),一个存,一个取。

关于 key:

存储时需要指定 key,你可以设定为你的扩展的名字,也可以设定为其他的,注意不要和别的扩展的 key 重名就可以了。

就好比你在商场门口想要把随身物品存进暂存柜中,需要先找到个和别人不重复的柜子,避免放错地方或者取错东西。

关于 value:

存放的数据是字符串类型,且只能存一个,但如果想要存放更多的数据以及非字符串类型的数据怎么办?

答案是使用 JSON.stringify() 函数将存储了数据的 JS 对象转换为 JSON 字符串,存储起来,需要取出的时候,再使用 JSON.parse() 函数将数据再转换为 JS 对象。。

示例代码:投喂插件

javascript
// ==UserScript==
+// @name         示例:存储数据
+// @author       木落
+// @version      1.0.0
+// @description  投喂,格式 .投喂 <物品>
+// @timestamp    1672423909
+// 2022-12-31
+// @license      Apache-2
+// @homepageURL  https://github.com/sealdice/javascript
+// ==/UserScript==
+
+// 先将扩展模块创建出来,如果已创建就直接使用
+if (!seal.ext.find('test')) {
+  const ext = seal.ext.new('test', '木落', '1.0.0');
+
+  const cmdFeed = seal.ext.newCmdItemInfo();
+  cmdFeed.name = '投喂';
+  cmdFeed.help = '投喂,格式:.投喂 <物品>\\n.投喂 记录 // 查看记录';
+  cmdFeed.solve = (ctx, msg, cmdArgs) => {
+    let val = cmdArgs.getArgN(1);
+    switch (val) {
+      case 'help':
+      case '': {
+        // .投喂 help
+        const ret = seal.ext.newCmdExecuteResult(true);
+        ret.showHelp = true;
+        return ret;
+      }
+      case '列表':
+      case '记录':
+      case 'list': {
+        const data = JSON.parse(ext.storageGet('feedInfo') || '{}');
+        const lst = [];
+        for (let [k, v] of Object.entries(data)) {
+          lst.push(\`- \${k}: 数量 \${v}\`);
+        }
+        seal.replyToSender(ctx, msg, \`投喂记录:\\n\${lst.join('\\n')}\`);
+        return seal.ext.newCmdExecuteResult(true);
+      }
+      default: {
+        const data = JSON.parse(ext.storageGet('feedInfo') || '{}');
+        const name = val || '空气';
+        if (data[name] === undefined) {
+          data[name] = 0;
+        }
+        data[name] += 1;
+        ext.storageSet('feedInfo', JSON.stringify(data));
+        seal.replyToSender(ctx, msg, \`你给海豹投喂了\${name},要爱护动物!\`);
+        return seal.ext.newCmdExecuteResult(true);
+      }
+    }
+  };
+
+  // 将命令注册到扩展中
+  ext.cmdMap['投喂'] = cmdFeed;
+  ext.cmdMap['feed'] = cmdFeed;
+
+  seal.ext.register(ext);
+}

示例代码:群内安价收集

这是关于数据的增加、删除、查询等操作的实现示例(修改的话就是删除之后增加)

javascript
// ==UserScript==
+// @name         群内安价收集
+// @author       憧憬少
+// @version      1.0.0
+// @description  在群内收集群友给出的安价选项,并掷骰得出结果
+// @timestamp    1676386517
+// 2023-02-14 22:55:17
+// @license      MIT
+// @homepageURL  https://github.com/ChangingSelf/sealdice-js-ext-anchor
+// ==/UserScript==
+
+(() => {
+  // src/index.ts
+  const HELP = \`群内安价收集 (ak 是アンカー罗马字缩写)
+注意 ak 后面有空格,“.ak”也可以换成“.安价”
+
+.ak help // 查看帮助
+.ak # 标题 // 新建一轮分歧并设标题
+.ak + 选项 // 需要添加的选项的内容
+.ak - 序号 // 需要移除的选项的序号
+.ak ? // 列出目前所有选项
+.ak = // 随机抽取 1 个选项并继续
+.ak = n // 随机抽取 n 个选项并继续
+\`;
+  const STORAGE_KEY = "anchor";
+  const OPTION_NUM_PER_PAGE = 15; // 列出所有选项时,每页放多少个选项
+  function akNew(ctx, msg, ext, title) {
+    const data = {
+      "title": title,
+      "options": []
+    };
+    ext.storageSet(STORAGE_KEY, JSON.stringify(data));
+    seal.replyToSender(ctx, msg, \`已新建分歧:\${title}\`);
+  }
+  function akAdd(ctx, msg, ext, option) {
+    const data = JSON.parse(ext.storageGet(STORAGE_KEY) || '{"title":"","options":[]}');
+    data.options.push(option);
+    seal.replyToSender(ctx, msg, \`当前分歧:\${data.title}
+已添加第\${data.options.length}个选项:\${option}\`);
+    ext.storageSet(STORAGE_KEY, JSON.stringify(data));
+  }
+  function akDel(ctx, msg, ext, index) {
+    const data = JSON.parse(ext.storageGet(STORAGE_KEY) || '{"title":"","options":[]}');
+    const removed = data.options.splice(index - 1, 1)[0];
+    seal.replyToSender(ctx, msg, \`当前分歧:\${data.title}
+已移除第\${index}个选项:\${removed}\`);
+    ext.storageSet(STORAGE_KEY, JSON.stringify(data));
+  }
+  function akList(ctx, msg, ext) {
+    const data = JSON.parse(ext.storageGet(STORAGE_KEY) || '{"title":"","options":[]}');
+    if (data.options.length === 0) {
+      seal.replyToSender(ctx, msg, \`当前分歧:\${data.title}
+还没有任何选项呢\`);
+      return;
+    }
+    let optStr = "";
+    let curPageRows = 0;
+    data.options.forEach((value, index) => {
+      optStr += \`\${index + 1}.\${value}
+\`;
+      ++curPageRows;
+      if (curPageRows >= OPTION_NUM_PER_PAGE) {
+        seal.replyToSender(ctx, msg, \`当前分歧:\${data.title}
+\${optStr}\`);
+        optStr = "";
+        curPageRows = 0;
+      }
+    });
+    if (curPageRows > 0) {
+      seal.replyToSender(ctx, msg, \`当前分歧:\${data.title}
+\${optStr}\`);
+    }
+  }
+  function randomInt(min, max) {
+    return Math.floor(Math.random() * (max - min + 1)) + min;
+  }
+  function akGet(ctx, msg, ext, num = 1) {
+    const data = JSON.parse(ext.storageGet(STORAGE_KEY) || '{"title":"","options":[]}');
+    if (data.options.length === 0) {
+      seal.replyToSender(ctx, msg, \`当前分歧:\${data.title}
+还没有任何选项呢\`);
+      return;
+    }
+    akList(ctx, msg, ext);
+    let optStr = "";
+    for (let i = 0; i < num; ++i) {
+      const r = randomInt(1, data.options.length);
+      const result = data.options.splice(r - 1, 1);
+      optStr += \`\${i + 1}.\${result}
+\`;
+    }
+    seal.replyToSender(ctx, msg, \`结果是:
+\${optStr}\`);
+    ext.storageSet(STORAGE_KEY, JSON.stringify(data));
+  }
+  function main() {
+    let ext = seal.ext.find("anchor");
+    if (!ext) {
+      ext = seal.ext.new("anchor", "憧憬少", "1.0.0");
+
+      const cmdSeal = seal.ext.newCmdItemInfo();
+      cmdSeal.name = "安价";
+      cmdSeal.help = HELP;
+      cmdSeal.solve = (ctx, msg, cmdArgs) => {
+        try {
+          let val = cmdArgs.getArgN(1);
+          switch (val) {
+            case "#": {
+              const title = cmdArgs.getArgN(2);
+              akNew(ctx, msg, ext, title);
+              return seal.ext.newCmdExecuteResult(true);
+            }
+            case "+": {
+              const option = cmdArgs.getArgN(2);
+              akAdd(ctx, msg, ext, option);
+              return seal.ext.newCmdExecuteResult(true);
+            }
+            case "-": {
+              const index = Number(cmdArgs.getArgN(2));
+              akDel(ctx, msg, ext, index);
+              return seal.ext.newCmdExecuteResult(true);
+            }
+            case "?":
+            case "?": {
+              akList(ctx, msg, ext);
+              return seal.ext.newCmdExecuteResult(true);
+            }
+            case "=": {
+              let num = 1;
+              if (cmdArgs.args.length >= 2) {
+                num = Number(cmdArgs.getArgN(2));
+              }
+              akGet(ctx, msg, ext, num);
+              return seal.ext.newCmdExecuteResult(true);
+            }
+            case "help":
+            default: {
+              const ret = seal.ext.newCmdExecuteResult(true);
+              ret.showHelp = true;
+              return ret;
+            }
+          }
+        } catch (error) {
+          seal.replyToSender(ctx, msg, error.Message);
+          return seal.ext.newCmdExecuteResult(true);
+        }
+      };
+      ext.cmdMap["安价"] = cmdSeal;
+      ext.cmdMap["ak"] = cmdSeal;
+
+      seal.ext.register(ext);
+    }
+  }
+  main();
+})();

数据处理模板

关于取出数据来修改的函数,可以参考如下代码:

javascript
const STORAGE_KEY = "anchor"; // 将你的 key 抽出来单独作为一个常量,方便开发阶段修改(使用了之后就不要修改了)
+//函数:添加选项
+function akAdd(ctx, msg, ext, option) {
+    //取出数据
+    const data = JSON.parse(ext.storageGet(STORAGE_KEY) || '{"title":"","options":[]}');
+
+    //处理数据
+    data.options.push(option);
+
+    //响应发送者
+    seal.replyToSender(ctx, msg, \`当前分歧:\${data.title}\\n已添加第\${data.options.length}个选项:\${option}\`);
+
+    //将处理完的数据写回去
+    ext.storageSet(STORAGE_KEY, JSON.stringify(data));
+}

读取玩家或群组数据

可以查看下文的 API

编写暗骰指令

如下:

javascript
// ==UserScript==
+// @name         示例:编写暗骰指令
+// @author       流溪
+// @version      1.0.0
+// @description  暗骰,格式.hide 原因
+// @timestamp    1671540835
+// 2022-12-20
+// @license      Apache-2
+// @homepageURL  https://github.com/sealdice/javascript
+// ==/UserScript==
+if (!seal.ext.find('hide')){
+    const ext = seal.ext.new('hide','流溪','0.0.1');
+
+    const cmdHide = seal.ext.newCmdItemInfo;
+    cmdHide.name = 'hide';
+    cmdHide.help = '暗骰,使用 .hide 面数 暗骰';
+    cmdHide.solve = (ctx, msg, cmdArgs) => {
+      if (msg.messageType !== 'group'){
+          seal.replyToSender(ctx, msg, '暗骰只能在群内触发');
+          return seal.ext.newCmdExecuteResult(true);
+      }
+      function rd(x){
+          // 这里写的时候有点不清醒了,感觉是对的,如果不对请拷打我
+          return Math.round(Math.random() * (x - 1) + 1);
+      }
+      let x = cmdArgs.getArgN(1);
+      if (x === 'help'){
+          return seal.ext.newCmdExecuteResult(true).showhelp = true;
+      } else if (isNaN(Number(x))){
+          // 我知道这里有更好的判断是否为数字的方法但是我不会.jpg
+          seal.replyToSender(ctx, msg, \`骰子面数应是数字\`);
+          return seal.ext.newCmdExecuteResult(true);
+      } else {
+          // 这就是暗骰 api 哒!
+          seal.replyPerson(ctx, msg, \`你在群\${msg.groupId}的掷骰结果为:\${rd(x)}\`);
+          return seal.ext.newCmdExecuteResult(true);
+      }
+    }
+  ext.cmdMap['hide'] = cmdHide;
+
+  seal.ext.register(ext);
+}

可以看到使用seal.replyPerson做到暗骰的效果。

编写代骰指令

javascript
// ==UserScript==
+// @name         示例:编写代骰指令
+// @author       木落
+// @version      1.0.0
+// @description  捕捉某人,格式.catch <@名字>
+// @timestamp    1671540835
+// 2022-12-20
+// @license      Apache-2
+// @homepageURL  https://github.com/sealdice/javascript
+// ==/UserScript==
+
+// 编写代骰指令
+// 先将扩展模块创建出来,如果已创建就直接使用
+if (!seal.ext.find('test')) {
+  const ext = seal.ext.new('test', '木落', '1.0.0');
+
+  // 创建指令 .catch
+  // 这个命令的功能为,显示“试图捕捉某人”,并给出成功率
+  // 如果命令写“.catch @张三”,那么就会试着捕捉张三
+  const cmdCatch = seal.ext.newCmdItemInfo();
+  cmdCatch.name = 'catch';
+  cmdCatch.help = '捕捉某人,格式.catch <@名字>';
+  // 对这个指令启用使用代骰功能,即@某人时,可获取对方的数据,以对方身份进行骰点
+  cmdCatch.allowDelegate = true;
+  cmdCatch.solve = (ctx, msg, cmdArgs) => {
+    // 获取对方数据,之后用 mctx 替代 ctx,mctx 下读出的数据即被代骰者的个人数据
+    const mctx = seal.getCtxProxyFirst(ctx, cmdArgs);
+    let val = cmdArgs.getArgN(1);
+    switch (val) {
+      case 'help': {
+        // 命令为 .catch help
+        const ret = seal.ext.newCmdExecuteResult(true);
+        ret.showHelp = true;
+        return ret;
+      }
+      default: {
+        const text = \`正在试图捕捉\${mctx.player.name},成功率为\${Math.ceil(Math.random() * 100)}%\`;
+        seal.replyToSender(mctx, msg, text);
+        return seal.ext.newCmdExecuteResult(true);
+      }
+    }
+  };
+  // 将命令注册到扩展中
+  ext.cmdMap['catch'] = cmdCatch;
+
+  seal.ext.register(ext);
+}

网络请求

主要使用 Fetch API 进行网络请求,详细文档见链接。fetch 函数返回一个 Promise,传统的写法是这样:

javascript
// 你可以使用 generator 来重写这段代码,欢迎 pr
+// 访问网址
+fetch('https://api-music.imsyy.top/cloudsearch?keywords=稻香').then((resp) => {
+  // 在返回对象的基础上,将文本流作为 json 解析
+  resp.json().then((data) => {
+    // 打印解析出的数据
+    console.log(JSON.stringify(data));
+  });
+});

你也可以使用异步编程(async/await)来简化代码:

javascript
const response = await fetch('https://api-music.imsyy.top/cloudsearch?keywords=稻香');
+if (!response.ok) {
+    // 处理不成功的请求...
+}
+const data = await response.json();
+console.log(JSON.stringify(data));

套用这个模板,你可以写出很多调用 API 的简单扩展。

比如核心代码只有一行的「随机猫猫图片」扩展:

javascript
seal.replyToSender(ctx, msg, \`[CQ:image,file=https://thiscatdoesnotexist.com/,cache=0]\`);

核心代码同样只有一行的「随机二次元图片」扩展:

javascript
seal.replyToSender(ctx, msg, \`[CQ:image,file=https://api.oick.cn/random/api.php?type=\${val},cache=0]\`);

当然,也有稍微复杂的,比如「AI 骰娘」扩展,但也没有太复杂,只是处理了一下发送者传过来的消息,再发送给网络 API,收到响应之后再回应发送者。

它的核心代码如下:

javascript
const BID = ''; // 填入你的骰娘的大脑的 id
+const KEY = ''; // 填入你的 key
+/**
+ * 给 AI 主脑发送消息并接收回复
+ * @param ctx 主要是和当前环境以及用户相关的内容,如当前发指令用户,当前群组信息等
+ * @param msg 为原生态的指令内容,如指令文本,发送平台,发送时间等
+ * @param message 要发送给骰娘的具体消息
+ */
+function chatWithBot(ctx,msg,message) {
+  fetch(\`http://api.brainshop.ai/get?bid=\${BID}&key=\${KEY}&uid=\${msg.sender.userId}&msg=\${message}\`).then(response => {
+    if (!response.ok) {
+      seal.replyToSender(ctx, msg, \`抱歉,我连接不上主脑了。它传递过来的信息是:\${response.status}\`);
+      return seal.ext.newCmdExecuteResult(false);
+    } else {
+      response.json().then(data => {
+        seal.replyToSender(ctx, msg, data["cnt"]);
+        return seal.ext.newCmdExecuteResult(true);
+      });
+      return seal.ext.newCmdExecuteResult(true);
+    }
+  });
+}

自定义 COC 规则

javascript
// ==UserScript==
+// @name         示例:自定义 COC 规则
+// @author       木落
+// @version      1.0.0
+// @description  自设规则,出 1 大成功,出 100 大失败。困难极难等保持原样
+// @timestamp    1671886435
+// 2022-12-24
+// @license      Apache-2
+// @homepageURL  https://github.com/sealdice/javascript
+// ==/UserScript==
+
+const rule = seal.coc.newRule();
+rule.index = 20; // 自定义序号必须大于等于 20,代表可用.setcoc 20 切换
+rule.key = '测试'; // 代表可用 .setcoc 测试 切换
+rule.name = '自设规则'; // 已切换至规则文本 name: desc
+rule.desc = '出 1 大成功\\n出 100 大失败';
+// d100 为出目,checkValue 为技能点数
+rule.check = (ctx, d100, checkValue) => {
+  let successRank = 0;
+  const criticalSuccessValue = 1;
+  const fumbleValue = 100;
+  if (d100 <= checkValue) {
+    successRank = 1;
+  } else {
+    successRank = -1;
+  }
+  // 成功判定
+  if (successRank == 1) {
+    // 区分大成功、困难成功、极难成功等
+    if (d100 <= checkValue / 2) {
+      //suffix = "成功(困难)"
+      successRank = 2;
+    }
+    if (d100 <= checkValue / 5) {
+      //suffix = "成功(极难)"
+      successRank = 3;
+    }
+    if (d100 <= criticalSuccessValue) {
+      //suffix = "大成功!"
+      successRank = 4;
+    }
+  } else {
+    if (d100 >= fumbleValue) {
+      //suffix = "大失败!"
+      successRank = -2;
+    }
+  }
+  let ret = seal.coc.newRuleCheckResult();
+  ret.successRank = successRank;
+  ret.criticalSuccessValue = criticalSuccessValue;
+  return ret;
+};
+// 注册规则
+seal.coc.registerRule(rule);

补充:使用非指令关键词

你是否因为自定义回复能实现的功能有限而烦恼?你是否因为自定义回复的匹配方式不全而愤怒?你是否因为自定义回复只能调用图片 API 而感到焦头烂额?

不要紧张,我的朋友,试试非指令关键词,这会非常有用。

通常情况下,我们使用 ext.onNotCommandReceived 作为非指令关键词的标志;这限定了只有在未收到命令且未达成自定义回复时,海豹才会触发此流程。

一个完整的非指令关键词模板如下:

javascript
// 必要流程,注册扩展,注意即使是非指令关键词也是依附于扩展的
+if (!seal.ext.find('xxx')){
+  const ext = seal.ext.new('xxx','xxx','x.x.x');
+  seal.ext.register(ext);
+  // 这里其实是编写处理函数
+  ext.onNotCommandReceived = (ctx, msg) => {
+    let message = msg.message;
+    // 这里请自己处理要如何达成 message 的匹配条件,js 那么多的匹配方法,足够你玩出花来。
+    if(xxx){
+      // 匹配到关键词了,要干什么?
+      xxx;
+    }
+  }
+}
`,62)),i("h2",y,[s[21]||(s[21]=a("注册插件配置项 ")),k(n,{type:"tip",text:"v1.4.1"}),s[22]||(s[22]=a()),s[23]||(s[23]=i("a",{class:"header-anchor",href:"#注册插件配置项","aria-label":'Permalink to "注册插件配置项 "'},"​",-1))]),s[30]||(s[30]=h(`

插件若要在 UI 中注册可供用户修改的配置项,需要在插件注册后调用 seal.ext.registerXXXConfig() 函数注册配置项。

XXX 为配置项的类型,目前支持 stringintfloatbooltemplateoption 六种类型。注意按照小驼峰命名法大写

同样的,插件也可以使用 seal.ext.getXXXConfig() 函数获取配置项的值。

你也可以直接使用 seal.ext.getConfig() 函数获取配置项的值,这个函数会返回一个 ConfigItem 对象, 包含了配置项的类型、值、默认值等信息。

ConfigItem 对象的类型定义如下,调用时请使用 jsbind 中的值作为 key

go
type ConfigItem struct {
+    Key          string      \`json:"key" jsbind:"key"\`
+    Type         string      \`json:"type" jsbind:"type"\`
+    DefaultValue interface{} \`json:"defaultValue" jsbind:"defaultValue"\`
+    Value        interface{} \`json:"value,omitempty" jsbind:"value"\`
+    Option       interface{} \`json:"option,omitempty" jsbind:"option"\`
+    Deprecated   bool        \`json:"deprecated,omitempty" jsbind:"deprecated"\`
+}

提示:更原始的 API

seal.ext.registerConfig() 函数也是可以使用的,你需要自己通过 seal.ext.newConfigItem() 来获取一个新的 ConfigItem 对象。

在对你的 ConfigItem 对象进行修改后,再调用 seal.ext.registerConfig() 函数进行注册。

示例代码:注册配置项

js
// ==UserScript==
+// @name         js-config-example
+// @author       Szzrain
+// @version      1.0.0
+// @description  演示 js 配置项的用法
+// @timestamp    1698636875
+// @license      MIT
+// ==/UserScript==
+
+if (!seal.ext.find('js-config-example')) {
+  const ext = seal.ext.new('js-config-example', 'SzzRain', '1.0.0');
+  // 创建一个命令
+  const cmdgetConfig = seal.ext.newCmdItemInfo();
+  cmdgetConfig.name = 'getconfig';
+  cmdgetConfig.help = '使用.getconfig <key> 来获取配置项,仅 master 可用';
+  cmdgetConfig.allowDelegate = true;
+  cmdgetConfig.solve = (ctx, msg, cmdArgs) => {
+    let val = cmdArgs.getArgN(1);
+    switch (val) {
+      case 'help': {
+        const ret = seal.ext.newCmdExecuteResult(true);
+        ret.showHelp = true;
+        return ret;
+      }
+      default: {
+        if (ctx.privilegeLevel !== 100) {
+          seal.replyToSender(ctx, msg, "你没有权限执行此命令");
+          return seal.ext.newCmdExecuteResult(true);
+        }
+        switch (val) {
+          case "1":
+            strVal = seal.ext.getStringConfig(ext, "testkey1");
+            seal.replyToSender(ctx, msg, strVal);
+            break;
+          case "2":
+            intVal = seal.ext.getIntConfig(ext, "testkey2");
+            seal.replyToSender(ctx, msg, intVal);
+            break;
+          case "3":
+            floatVal = seal.ext.getFloatConfig(ext, "testkey3");
+            seal.replyToSender(ctx, msg, floatVal);
+            break;
+          case "4":
+            boolVal = seal.ext.getBoolConfig(ext, "testkey4");
+            seal.replyToSender(ctx, msg, boolVal);
+            break;
+          case "5":
+            tmplVal = seal.ext.getTemplateConfig(ext, "testkey5");
+            seal.replyToSender(ctx, msg, tmplVal);
+            break;
+          case "6":
+            optVal = seal.ext.getOptionConfig(ext, "testkey6");
+            seal.replyToSender(ctx, msg, optVal);
+            break;
+          default:
+            let config = seal.ext.getConfig(ext, val);
+            if (config) {
+              seal.replyToSender(ctx, msg, config.value);
+            } else {
+              seal.replyToSender(ctx, msg, "配置项不存在");
+            }
+            break;
+        }
+        return seal.ext.newCmdExecuteResult(true);
+      }
+    }
+  }
+  // 注册命令
+  ext.cmdMap['getconfig'] = cmdgetConfig;
+
+  // 注册扩展
+  seal.ext.register(ext);
+
+  // 注册配置项需在 ext 注册后进行
+  // 通常来说,register 函数的参数为 ext, key, defaultValue
+  seal.ext.registerStringConfig(ext, "testkey1", "testvalue");
+  seal.ext.registerIntConfig(ext, "testkey2", 123);
+  seal.ext.registerFloatConfig(ext, "testkey3", 123.456);
+  seal.ext.registerBoolConfig(ext, "testkey4", true);
+  seal.ext.registerTemplateConfig(ext, "testkey5", ["1", "2", "3", "4"]);
+  // 注册单选项函数的参数为 ext, key, defaultValue, options
+  seal.ext.registerOptionConfig(ext, "testkey6", "1", ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]);
+}

注册后的配置项会在 UI 中显示,可以在 UI 中修改配置项的值

JS 配置项

',11)),i("h2",F,[s[24]||(s[24]=a("注册定时任务 ")),k(n,{type:"tip",text:"v1.4.6"}),s[25]||(s[25]=a()),s[26]||(s[26]=i("a",{class:"header-anchor",href:"#注册定时任务","aria-label":'Permalink to "注册定时任务 "'},"​",-1))]),s[31]||(s[31]=h(`

提示:Cron 表达式

如果你对 cron 或下文中提到的 Cron 表达式并不熟悉,可以参考 Linux crontab 命令 | 菜鸟教程Cron 表达式 - 阿里云文档

v1.4.6 版本开始,海豹核心新增了用于定时任务的 API。

API 参数

javascript
seal.ext.registerTask(ext, taskType, value, func, key="", description="")

其各个参数的含义如下:

  • taskType: stringregisterTask 接受两种类型的定时任务表达式——使用 Cron 表达式或使用 hh:mm/h:mm 格式的「每日」任务。当使用前者时,taskType 应填入 "cron",而后者应填入 "daily"

  • value: string

    • taskType 填入 "cron" 时,value 应填入有效的 Cron 表达式,例如:"*/5 * * * *"registerTask 会根据 Cron 表达式定时执行 func
    • taskType 填入 "daily" 时,value 应填入 hh:mmh:mm 格式的时间,例如:"08:00""3:00""20:35"registerTask 会根据时间,每天定时执行 func
  • func: (taskCtx: JsScriptTaskCtx) => void:定时任务的实际执行函数。其中 taskCtx 的数据类型为:

    typescript
    type JsScriptTaskCtx {
    +  now: number;
    +  key: string;
    +}

    taskCtx.now 提供了 func 实际被唤起时的 Unix 时间戳;如果填写了可选参数 keytaskCtx.key 则与之相同。

    使用定时任务 API 的用户应该将实际业务逻辑放置在 func 内,定时任务 API 仅承担唤醒功能。

  • key: string:可选参数。为此定时任务提供唯一索引。当填写了 key 时,此定时任务也会出现在 WebUI 的插件配置项中,可以通过 WebUI 修改定时任务表达式。

  • description: string:可选参数。为此定时任务提供可读性更高的描述。当同时填写了 keydescription 时,WebUI 的插件配置项中将会显示关于此定时任务的描述。

使用示例

javascript
// 实现任意定时功能
+seal.ext.registerTask(ext, "cron", "* * * * *", (taskCtx) => {
+  // 检查当前时间点附近,尚未执行的所有任务
+  const tasks = getTasks(taskCtx.now, ext.StorageGet("tasks"));
+  for (const task of tasks) {
+    // 检查当前群聊中,插件功能是否开启
+    if (!checkGroupStatus(task.groupId, ext.storageGet("status"))) {
+      continue;
+    }
+    doTask(task);
+  }
+});
javascript
// 类似每日新闻
+seal.ext.registerTask(ext, "daily", "08:30", (taskCtx) => {
+  // 所有需要发送每日新闻的群聊
+  const groups = getGroups(ext.StorageGet("groups"));
+  for (const group of groups) {
+    sendDailyNews(group);
+  }
+}, "daily_news", "每天触发「每日新闻」的时间");
`,9))])}const x=l(r,[["render",c]]);export{m as __pageData,x as default}; diff --git a/assets/advanced_js_example.md.BjLC5-Pm.lean.js b/assets/advanced_js_example.md.BjLC5-Pm.lean.js new file mode 100644 index 000000000..558339575 --- /dev/null +++ b/assets/advanced_js_example.md.BjLC5-Pm.lean.js @@ -0,0 +1,887 @@ +import{_ as l,c as p,a6 as h,j as i,a,G as k,B as t,o as e}from"./chunks/framework.B1keMFNq.js";const E="/sealdice-manual-next/assets/js-config-example.Ctkb00mX.png",m=JSON.parse('{"title":"常见用法示例","description":"","frontmatter":{"lang":"zh-cn","title":"常见用法示例"},"headers":[],"relativePath":"advanced/js_example.md","filePath":"advanced/js_example.md","lastUpdated":1728702230000}'),r={name:"advanced/js_example.md"},d={class:"info custom-block"},g={id:"黑名单-信任名单操作",tabindex:"-1"},y={id:"注册插件配置项",tabindex:"-1"},F={id:"注册定时任务",tabindex:"-1"};function c(o,s,C,A,D,B){const n=t("Badge");return e(),p("div",null,[s[27]||(s[27]=h(`

常见用法示例

创建和注册扩展

提示:扩展机制

扩展机制可以看做是海豹的 mod 管理机制,可以模块化开关海豹的任意一部分,如常用的开启 dnd 扩展,关闭 coc 扩展,关闭自动回复等。

可以查看 .ext 命令 来了解更多。

在海豹中,所有指令必须归属于某个扩展,而一个扩展可以包含多条指令。

JS 脚本中创建扩展的方式如下,在创建扩展后,还需要注册扩展,才能让扩展起效,不要漏掉哦!

javascript
// 如何建立一个扩展
+
+// 首先检查是否已经存在
+if (!seal.ext.find('test')) {
+  // 不存在,那么建立扩展,名为 test,作者“木落”,版本 1.0.0
+  const ext = seal.ext.new('test', '木落', '1.0.0');
+  // 注册扩展
+  seal.ext.register(ext);
+}

注意:JS 脚本和扩展

在实现上,海豹允许你在一个 JS 脚本文件中注册多个扩展,但我们不建议这样做。一般来说,一个 JS 脚本文件只会注册一个扩展。

注意:修改内置功能?

出于对公平性的考虑,JS 脚本不能替换内置指令和内置扩展。

自定义指令

想要创建一条自定义指令,首先需要创建一个扩展(seal.ExtInfo),写好自定义指令的实现逻辑之后,再注册到扩展中。

创建指令

接上面的代码,假定目前已经注册好了一个名为 test 的扩展,现在要写一个名为 seal 的指令:

  • 这个命令的功能为,显示「抓到一只海豹」的文案;
    • 如果命令写 .seal ABC,那么文案中将海豹命名为「ABC」;
    • 如果命令中没写名字,那么命名为默认值「氪豹」。

第一步,创建新的自定义指令,设置好名字和帮助信息。

javascript
const cmdSeal = seal.ext.newCmdItemInfo();
+cmdSeal.name = 'seal'; // 指令名字,可用中文
+cmdSeal.help = '召唤一只海豹,可用 .seal <名字> 命名';

注意:命令的帮助信息

命令的帮助信息是在使用 .help <命令> 时会返回的帮助内容。

帮助信息不要. 开头,防止查看帮助时骰子的回复触发其他骰子。

第二步,编写指令的具体处理代码。

你需要编写指令对象的 solve 函数,在使用该指令的时候,海豹核心会调用你写的这个函数。

javascript
cmdSeal.solve = (ctx, msg, cmdArgs) => {
+    // 这里是你需要编写的内容
+};
参数说明
ctx主要是和当前环境以及用户相关的内容,如当前发指令用户,当前群组信息等
msg原始指令内容,如指令文本,发送平台,发送时间等
cmdArgs指令信息,会将用户发的信息进行分段,方便快速取用

这里仅说明需要用到的接口,详细可见 插件仓库 examp_ts 下的 seal.d.ts 文件,里面包含了目前开放的接口的定义及其注释说明。

指令参数与返回值

假设用户发送过来的消息是 .seal A B C,那么可以用 cmdArgs.getArgN(1) 获取到 AcmdArgs.getArgN(2) 获取到 BcmdArgs.getArgN(3) 获取到 C

通常会对参数值进行判断,随后作出响应。

以下代码处理的是 .seal help 的情形:

javascript
cmdSeal.solve = (ctx, msg, cmdArgs) => {
+  // 获取第一个参数,例如 .seal A B C
+  // 这里 cmdArgs.getArgN(1) 的结果即是 A,传参为 2 的话结果是 B
+  let val = cmdArgs.getArgN(1);
+  switch (val) {
+    case 'help': {
+      // 命令为 .seal help
+      // 创建一个结果对象,并将 showHelp 标记为 true,这会自动给用户发送帮助
+      const ret = seal.ext.newCmdExecuteResult(true);
+      ret.showHelp = true;
+      return ret;
+    }
+    default: {
+      // 没有传入参数时的代码
+      return seal.ext.newCmdExecuteResult(true);
+    }
+  }
+};

注意:返回执行结果

在执行完自己的代码之后,需要返回指令结果对象,其参数是是否执行成功。

指令核心执行流程

给消息发送者回应,需要使用 seal.replyToSender() 函数,前两个参数和 solve() 函数接收的参数一致,第三个参数是你要发送的文本。

发送的文本中,可以包含 变量(例如{$t玩家}),也可以包含 CQ 码,用来实现回复发送者、@发送者、发送图片、发送分享卡片等功能。

在这个例子中,我们需要获取作为海豹名字的参数,获取不到就使用默认值,随后向消息发送者发送回应。

在刚刚的位置填入核心代码,就可以完成了。

javascript
cmdSeal.solve = (ctx, msg, cmdArgs) => {
+  // 获取第一个参数,例如 .seal A B C
+  // 这里 cmdArgs.getArgN(1) 的结果即是 A,传参为 2 的话结果是 B
+  let val = cmdArgs.getArgN(1);
+  switch (val) {
+    case 'help': {
+      // 命令为 .seal help
+      // 创建一个结果对象,并将 showHelp 标记为 true,这会自动给用户发送帮助
+      const ret = seal.ext.newCmdExecuteResult(true);
+      ret.showHelp = true;
+      return ret;
+    }
+    default: {
+      // 命令为 .seal XXXX,取第一个参数为名字
+      if (!val) val = '氪豹';
+      // 进行回复,如果是群聊发送那么在群里回复,私聊发送则在私聊回复 (听起来是废话文学,但详细区别见暗骰例子)
+      seal.replyToSender(ctx, msg, \`你抓到一只海豹!取名为\${val}\\n它的逃跑意愿为\${Math.ceil(Math.random() * 100)}\`);
+      return seal.ext.newCmdExecuteResult(true);
+    }
+  }
+};

注册指令

第三步,将命令注册到扩展中。

javascript
ext.cmdMap['seal'] = cmdSeal;

如果你想要给这个命令起一个别名,也就是增加一个触发词,可以这样写:

javascript
ext.cmdMap['seal'] = cmdSeal; // 注册 .seal 指令
+ext.cmdMap['海豹'] = cmdSeal; // 注册 .海豹 指令,等效于 .seal

完整的代码如下:

javascript
// ==UserScript==
+// @name         示例:编写一条自定义指令
+// @author       木落
+// @version      1.0.0
+// @description  召唤一只海豹,可用.seal <名字> 命名
+// @timestamp    1671368035
+// 2022-12-18
+// @license      Apache-2
+// @homepageURL  https://github.com/sealdice/javascript
+// ==/UserScript==
+
+// 编写一条自定义指令
+// 先将扩展模块创建出来,如果已创建就直接使用
+let ext = seal.ext.find('test');
+if (!ext) {
+  ext = seal.ext.new('test', '木落', '1.0.0');
+
+  // 创建指令 .seal
+  // 这个命令的功能为,显示「抓到一只海豹」的文案;
+  // 如果命令写 .seal ABC,那么文案中将海豹命名为「ABC」;
+  // 如果命令中没写名字,那么命名为默认值「氪豹」。
+  const cmdSeal = seal.ext.newCmdItemInfo();
+  cmdSeal.name = 'seal'; // 指令名字,可用中文
+  cmdSeal.help = '召唤一只海豹,可用 .seal <名字> 命名';
+
+  // 主函数,指令解析器会将指令信息解析,并储存在几个参数中
+  // ctx 主要是和当前环境以及用户相关的内容,如当前发指令用户,当前群组信息等
+  // msg 为原生态的指令内容,如指令文本,发送平台,发送时间等
+  // cmdArgs 为指令信息,会将用户发的信息进行分段,方便快速取用
+  cmdSeal.solve = (ctx, msg, cmdArgs) => {
+    // 获取第一个参数,例如 .seal A B C
+    // 这里 cmdArgs.getArgN(1) 的结果即是 A,传参为 2 的话结果是 B
+    let val = cmdArgs.getArgN(1);
+    switch (val) {
+      case 'help': {
+        // 命令为 .seal help
+        // 创建一个结果对象,并将 showHelp 标记为 true,这会自动给用户发送帮助
+        const ret = seal.ext.newCmdExecuteResult(true);
+        ret.showHelp = true;
+        return ret;
+      }
+      default: {
+        // 命令为 .seal XXXX,取第一个参数为名字
+        if (!val) val = '氪豹';
+        // 进行回复,如果是群聊发送那么在群里回复,私聊发送则在私聊回复 (听起来是废话文学,但详细区别见暗骰例子)
+        seal.replyToSender(ctx, msg, \`你抓到一只海豹!取名为\${val}\\n它的逃跑意愿为\${Math.ceil(Math.random() * 100)}\`);
+        return seal.ext.newCmdExecuteResult(true);
+      }
+    }
+  };
+
+  // 将命令注册到扩展中
+  ext.cmdMap['seal'] = cmdSeal;
+
+  // 无实际意义,用于消除编译报错
+  export {}
+
+  seal.ext.register(ext);
+}

这就是最基本的模板了。

抽取牌堆

抽取牌堆的函数是 seal.deck.draw(ctx, deckName, shufflePool)

  • ctxMsgContext 类型,指令上下文,solve() 函数传进来的第一个参数
  • deckName:牌堆名称,字符串类型,例如 GRE单词
  • shufflePool:是否放回抽取,布尔类型,true 为放回抽取,false 为不放回抽取

返回值是一个 map,包含以下字段:

  • exists:布尔类型,是否抽取成功
  • result:字符串类型,抽取结果
  • err:字符串类型,抽取失败的原因

示例代码:抽取牌堆

javascript
// ==UserScript==
+// @name         抽取牌堆示例
+// @author       SzzRain
+// @version      1.0.0
+// @description  用于演示如何抽取牌堆
+// @timestamp    1699077659
+// @license      MIT
+// @homepageURL  https://github.com/sealdice/javascript
+// ==/UserScript==
+
+// 本脚本用于演示如何抽取牌堆, 共有两种实现方式
+if (!seal.ext.find('draw-decks-example')) {
+  const ext = seal.ext.new('draw-decks-example', 'SzzRain', '1.0.0');
+  // 创建一个命令
+  const cmdDrawDecks = seal.ext.newCmdItemInfo();
+  cmdDrawDecks.name = 'dr';
+  cmdDrawDecks.help = '使用 .dr <牌堆名> 来抽取牌堆';
+  cmdDrawDecks.solve = (ctx, msg, cmdArgs) => {
+    // 抽取牌堆
+    // 参数1:ctx 参数2:牌堆名称 参数3:是否放回抽取
+    // 返回值:{exists: true, result: '抽取结果', err: '错误原因'}
+    const decks = seal.deck.draw(ctx, cmdArgs.getArgN(1), true);
+    // 判断是否抽取成功
+    if (decks['exists']) {
+      seal.replyToSender(ctx, msg, decks['result']);
+      return seal.ext.newCmdExecuteResult(true);
+    } else {
+      seal.replyToSender(ctx, msg, '抽取牌堆失败,原因:' + decks['err']);
+      return seal.ext.newCmdExecuteResult(true);
+    }
+  };
+  // 注册命令
+  ext.cmdMap['dr'] = cmdDrawDecks;
+
+  // 创建一个命令
+  const cmdDrawDecks2 = seal.ext.newCmdItemInfo();
+  cmdDrawDecks2.name = 'dr2';
+  cmdDrawDecks2.help = '使用 .dr2 <牌堆名> 来抽取牌堆';
+  cmdDrawDecks2.solve = (ctx, msg, cmdArgs) => {
+    // 抽取牌堆的另一种写法,使用 format 函数,由于经过了 rollvm 的处理,所以代码的执行效率会更慢
+    // 不过这种写法的返回值固定为字符串,省去了判断是否抽取成功的步骤
+    // 参数1:ctx 参数2:海豹语表达式,其中 #{DRAW-牌堆名称} 会被替换为抽取结果
+    const decks = seal.format(ctx, \`#{DRAW-\${cmdArgs.getArgN(1)}}\`);
+    seal.replyToSender(ctx, msg, decks);
+  }
+  // 注册命令
+  ext.cmdMap['dr2'] = cmdDrawDecks2;
+
+  // 注册扩展
+  seal.ext.register(ext);
+}

权限识别

海豹中的权限等级,由高到低分别是:骰主群主管理员邀请者普通用户黑名单用户。 每一个身份都有一个对应的数字,可以通过 ctx.privilegeLevel 获取当前用户的权限等级。 每个身份所对应的数字如下表所示:

`,50)),i("div",d,[s[16]||(s[16]=i("p",{class:"custom-block-title"},"信息",-1)),s[17]||(s[17]=i("p",null,[i("strong",null,"注意:"),a(" 部分权限等级仅在群聊中有效。")],-1)),i("p",null,[s[0]||(s[0]=a("从 ")),k(n,{type:"tip",text:"v1.4.5"}),s[1]||(s[1]=a(" 起,在私聊中,除了")),s[2]||(s[2]=i("strong",null,"骰主",-1)),s[3]||(s[3]=a(",")),s[4]||(s[4]=i("strong",null,"白名单用户",-1)),s[5]||(s[5]=a("和")),s[6]||(s[6]=i("strong",null,"黑名单用户",-1)),s[7]||(s[7]=a(",其他用户被视为拥有与群管理员等同的权限,即权限值 50。"))]),i("p",null,[s[8]||(s[8]=a("在 ")),k(n,{type:"danger",text:"v1.4.4"}),s[9]||(s[9]=a(" 或更早版本,私聊中除了")),s[10]||(s[10]=i("strong",null,"骰主",-1)),s[11]||(s[11]=a(",")),s[12]||(s[12]=i("strong",null,"白名单用户",-1)),s[13]||(s[13]=a("和")),s[14]||(s[14]=i("strong",null,"黑名单用户",-1)),s[15]||(s[15]=a(",其他用户的权限等级为普通用户(0)。"))])]),s[28]||(s[28]=h(`
身份权限值
骰主100
白名单70
群主60
管理员50
邀请者40
普通用户0
黑名单用户-30

提示:关于白名单用户

白名单用户即通过骰主手动添加的信任名单用户,可以使用所有需要群管理权限的功能,但不具备 Master 权限。

信任名单可以通过 .ban trust <统一ID> 添加,通过 .ban list trust 查看。

提示:关于黑名单用户

通常情况下你不需要考虑黑名单用户的情况,因为黑名单用户的消息会被过滤掉,不会触发任何指令。

示例代码:权限识别

javascript
// ==UserScript==
+// @name         权限识别样例
+// @author       SzzRain
+// @version      1.0.0
+// @description  使用命令 .myperm 查看自己的权限
+// @timestamp    1699086084
+// @license      MIT
+// @homepageURL  https://github.com/Szzrain
+// ==/UserScript==
+if (!seal.ext.find('myperm')) {
+  const ext = seal.ext.new('myperm', 'SzzRain', '1.0.0');
+  // 创建一个命令
+  const cmdMyperm = seal.ext.newCmdItemInfo();
+  cmdMyperm.name = 'myperm';
+  cmdMyperm.help = '使用 .myperm 展示我的权限';
+  cmdMyperm.solve = (ctx, msg, cmdArgs) => {
+    let text = "普通用户";
+    console.log(ctx.privilegeLevel);
+    switch (ctx.privilegeLevel) {
+      case 100:
+        text = "master";
+        break;
+      case 60:
+        text = "owner";
+        break;
+      case 50:
+        text = "admin";
+        break;
+      case 40:
+        text = "inviter";
+        break;
+      case -30:
+        // 黑名单用户,但是由于黑名单会被过滤掉,所以实际上这里并不会执行,这里只是为了演示
+        return seal.ext.newCmdExecuteResult(false);
+    }
+    seal.replyToSender(ctx, msg, text);
+    return seal.ext.newCmdExecuteResult(true);
+  }
+  // 注册命令
+  ext.cmdMap['myperm'] = cmdMyperm;
+
+  // 注册扩展
+  seal.ext.register(ext);
+}
`,5)),i("h2",g,[s[18]||(s[18]=a("黑名单 / 信任名单操作 ")),k(n,{type:"tip",text:"v1.4.4"}),s[19]||(s[19]=a()),s[20]||(s[20]=i("a",{class:"header-anchor",href:"#黑名单-信任名单操作","aria-label":'Permalink to "黑名单 / 信任名单操作 "'},"​",-1))]),s[29]||(s[29]=h(`

黑名单操作的函数

添加:seal.ban.addBan(ctx, uid, place, reason)

移除:seal.ban.remove(ctx, uid)

  • ctxMsgContext 类型,指令上下文,solve() 函数传进来的第一个参数
  • uid:用户 ID,字符串类型,例如 QQ:123456789, TG:123456789
  • place:拉黑的地方,字符串类型,随便写,一般来说在群内拉黑就写群 ID
  • reason:拉黑原因,字符串类型,随便写

信任用户名单

添加:seal.ban.addTrust(ctx, uid, place, reason) 参数说明同上

移除:seal.ban.remove(ctx, uid)

提示:相同的移除函数

黑名单和信任名单存储在同一个数据库中,因此移除时使用的是同一个函数。

你在进行移除操作时需要自己判断是否符合你的预期。

获取黑名单 / 信任名单列表

使用 seal.ban.getList()

返回值为一个数组,数组中的每一项都是一个 BanListInfoItem 对象,包含以下字段:

  • id:用户 ID,字符串类型
  • name:用户昵称,字符串类型
  • score:怒气值,整数类型
  • rank:拉黑/信任等级 0=没事 -10=警告 -30=禁止 30=信任
  • times:事发时间,数组类型,内部元素为整数时间戳
  • reasons:拉黑/信任原因,数组类型,内部元素为字符串
  • places:拉黑/信任的发生地点,数组类型,内部元素为字符串
  • banTime:拉黑/信任的时间,整数时间戳

获取用户在黑名单 / 信任名单中的信息

使用 seal.ban.getUser(uid)

如果用户没有在黑名单 / 信任名单中,返回值为空值。

如果有则返回一个 BanListInfoItem 对象,字段同上。

示例代码:黑名单 / 信任名单操作

javascript
// ==UserScript==
+// @name         js-ban
+// @author       SzzRain
+// @version      1.0.0
+// @description  演示 js 扩展操作黑名单
+// @timestamp    1706684850
+// @license      MIT
+// @homepageURL  https://github.com/Szzrain
+// ==/UserScript==
+
+if (!seal.ext.find('js-ban')) {
+  const ext = seal.ext.new('js-ban', 'SzzRain', '1.0.0');
+  // 创建一个命令
+  const cmdcban = seal.ext.newCmdItemInfo();
+  cmdcban.name = 'cban';
+  cmdcban.help = '使用.cban <用户id> 来拉黑目标用户,仅master可用';
+  cmdcban.solve = (ctx, msg, cmdArgs) => {
+      let val = cmdArgs.getArgN(1);
+      switch (val) {
+          case 'help': {
+              const ret = seal.ext.newCmdExecuteResult(true);
+              ret.showHelp = true;
+              return ret;
+          }
+          default: {
+              if (ctx.privilegeLevel === 100) {
+                  seal.ban.addBan(ctx, val, "JS扩展拉黑", "JS扩展拉黑测试");
+                  seal.replyToSender(ctx, msg, "已拉黑用户" + val);
+              } else {
+                  seal.replyToSender(ctx, msg, "你没有权限执行此命令");
+              }
+              return seal.ext.newCmdExecuteResult(true);
+          }
+      }
+  }
+  // 注册命令
+  ext.cmdMap['cban'] = cmdcban;
+
+  // 创建一个命令
+  const cmdcunban = seal.ext.newCmdItemInfo();
+  cmdcunban.name = 'cunban';
+  cmdcunban.help = '使用.cunban <用户id> 来解除拉黑/移除信任目标用户,仅master可用';
+  cmdcunban.solve = (ctx, msg, cmdArgs) => {
+      let val = cmdArgs.getArgN(1);
+      switch (val) {
+          case 'help': {
+              const ret = seal.ext.newCmdExecuteResult(true);
+              ret.showHelp = true;
+              return ret;
+          }
+          default: {
+              if (ctx.privilegeLevel === 100) {
+                  // 信任用户和拉黑用户存在同一个列表中,remove 前请先判断是否符合预期
+                  seal.ban.remove(ctx, val);
+                  seal.replyToSender(ctx, msg, "已解除拉黑/信任用户" + val);
+              } else {
+                  seal.replyToSender(ctx, msg, "你没有权限执行此命令");
+              }
+              return seal.ext.newCmdExecuteResult(true);
+          }
+      }
+  }
+  // 注册命令
+  ext.cmdMap['cunban'] = cmdcunban;
+
+  // 创建一个命令
+  const cmdctrust = seal.ext.newCmdItemInfo();
+  cmdctrust.name = 'ctrust';
+  cmdctrust.help = '使用.ctrust <用户id> 来信任目标用户,仅master可用';
+  cmdctrust.solve = (ctx, msg, cmdArgs) => {
+    let val = cmdArgs.getArgN(1);
+    switch (val) {
+      case 'help': {
+        const ret = seal.ext.newCmdExecuteResult(true);
+        ret.showHelp = true;
+        return ret;
+      }
+      default: {
+        if (ctx.privilegeLevel === 100) {
+          seal.ban.addTrust(ctx, val, "JS扩展信任", "JS扩展信任测试");
+          seal.replyToSender(ctx, msg, "已信任用户" + val);
+        } else {
+          seal.replyToSender(ctx, msg, "你没有权限执行此命令");
+        }
+        return seal.ext.newCmdExecuteResult(true);
+      }
+    }
+  }
+  // 注册命令
+  ext.cmdMap['ctrust'] = cmdctrust;
+
+  // 创建一个命令
+  const cmdcbanlist = seal.ext.newCmdItemInfo();
+  cmdcbanlist.name = 'cbanlist';
+  cmdcbanlist.help = '使用.cbanlist 来查看黑名单和信任列表,仅master可用';
+  cmdcbanlist.solve = (ctx, msg, cmdArgs) => {
+    let val = cmdArgs.getArgN(1);
+    switch (val) {
+      case 'help': {
+        const ret = seal.ext.newCmdExecuteResult(true);
+        ret.showHelp = true;
+        return ret;
+      }
+      default: {
+        if (ctx.privilegeLevel === 100) {
+          let text = "黑名单/信任列表:\\n";
+          seal.ban.getList().forEach((v) => {
+            text += \`\${v.name}(\${v.id}) 当前等级:\${v.rank} 怒气值:\${v.score}\\n\`;
+          });
+          seal.replyToSender(ctx, msg, text);
+        } else {
+          seal.replyToSender(ctx, msg, "你没有权限执行此命令");
+        }
+        return seal.ext.newCmdExecuteResult(true);
+      }
+    }
+  }
+  // 注册命令
+  ext.cmdMap['cbanlist'] = cmdcbanlist;
+
+  // 创建一个命令
+  const cmdcget = seal.ext.newCmdItemInfo();
+  cmdcget.name = 'cget';
+  cmdcget.help = '使用.cget <用户id> 来查看目标用户的黑名单/信任信息,仅master可用';
+  cmdcget.solve = (ctx, msg, cmdArgs) => {
+    let val = cmdArgs.getArgN(1);
+    switch (val) {
+      case 'help': {
+        const ret = seal.ext.newCmdExecuteResult(true);
+        ret.showHelp = true;
+        return ret;
+      }
+      default: {
+        if (ctx.privilegeLevel === 100) {
+          let info = seal.ban.getUser(val);
+          if (!info) {
+            seal.replyToSender(ctx, msg, "用户不存在或未被拉黑/信任");
+            return seal.ext.newCmdExecuteResult(true);
+          }
+          let level = info.rank;
+          // 不知道为什么,用 === 是 false
+          if (info.rank == 30) {
+            level = "信任"
+          } else if (info.rank == -30) {
+            level = "拉黑"
+          } else if (info.rank == -10) {
+            level = "警告"
+          }
+          let text = \`用户\${info.name}(\${info.id}) 当前等级:\${level} 怒气值:\${info.score}\`;
+          seal.replyToSender(ctx, msg, text);
+        } else {
+          seal.replyToSender(ctx, msg, "你没有权限执行此命令");
+        }
+        return seal.ext.newCmdExecuteResult(true);
+      }
+    }
+  }
+  // 注册命令
+  ext.cmdMap['cget'] = cmdcget;
+
+  // 注册扩展
+  seal.ext.register(ext);
+}

存取数据

相关的 API 是两个函数,ExtInfo.storageSet(key, value) 函数和 ExtInfo.storageGet(key),一个存,一个取。

关于 key:

存储时需要指定 key,你可以设定为你的扩展的名字,也可以设定为其他的,注意不要和别的扩展的 key 重名就可以了。

就好比你在商场门口想要把随身物品存进暂存柜中,需要先找到个和别人不重复的柜子,避免放错地方或者取错东西。

关于 value:

存放的数据是字符串类型,且只能存一个,但如果想要存放更多的数据以及非字符串类型的数据怎么办?

答案是使用 JSON.stringify() 函数将存储了数据的 JS 对象转换为 JSON 字符串,存储起来,需要取出的时候,再使用 JSON.parse() 函数将数据再转换为 JS 对象。。

示例代码:投喂插件

javascript
// ==UserScript==
+// @name         示例:存储数据
+// @author       木落
+// @version      1.0.0
+// @description  投喂,格式 .投喂 <物品>
+// @timestamp    1672423909
+// 2022-12-31
+// @license      Apache-2
+// @homepageURL  https://github.com/sealdice/javascript
+// ==/UserScript==
+
+// 先将扩展模块创建出来,如果已创建就直接使用
+if (!seal.ext.find('test')) {
+  const ext = seal.ext.new('test', '木落', '1.0.0');
+
+  const cmdFeed = seal.ext.newCmdItemInfo();
+  cmdFeed.name = '投喂';
+  cmdFeed.help = '投喂,格式:.投喂 <物品>\\n.投喂 记录 // 查看记录';
+  cmdFeed.solve = (ctx, msg, cmdArgs) => {
+    let val = cmdArgs.getArgN(1);
+    switch (val) {
+      case 'help':
+      case '': {
+        // .投喂 help
+        const ret = seal.ext.newCmdExecuteResult(true);
+        ret.showHelp = true;
+        return ret;
+      }
+      case '列表':
+      case '记录':
+      case 'list': {
+        const data = JSON.parse(ext.storageGet('feedInfo') || '{}');
+        const lst = [];
+        for (let [k, v] of Object.entries(data)) {
+          lst.push(\`- \${k}: 数量 \${v}\`);
+        }
+        seal.replyToSender(ctx, msg, \`投喂记录:\\n\${lst.join('\\n')}\`);
+        return seal.ext.newCmdExecuteResult(true);
+      }
+      default: {
+        const data = JSON.parse(ext.storageGet('feedInfo') || '{}');
+        const name = val || '空气';
+        if (data[name] === undefined) {
+          data[name] = 0;
+        }
+        data[name] += 1;
+        ext.storageSet('feedInfo', JSON.stringify(data));
+        seal.replyToSender(ctx, msg, \`你给海豹投喂了\${name},要爱护动物!\`);
+        return seal.ext.newCmdExecuteResult(true);
+      }
+    }
+  };
+
+  // 将命令注册到扩展中
+  ext.cmdMap['投喂'] = cmdFeed;
+  ext.cmdMap['feed'] = cmdFeed;
+
+  seal.ext.register(ext);
+}

示例代码:群内安价收集

这是关于数据的增加、删除、查询等操作的实现示例(修改的话就是删除之后增加)

javascript
// ==UserScript==
+// @name         群内安价收集
+// @author       憧憬少
+// @version      1.0.0
+// @description  在群内收集群友给出的安价选项,并掷骰得出结果
+// @timestamp    1676386517
+// 2023-02-14 22:55:17
+// @license      MIT
+// @homepageURL  https://github.com/ChangingSelf/sealdice-js-ext-anchor
+// ==/UserScript==
+
+(() => {
+  // src/index.ts
+  const HELP = \`群内安价收集 (ak 是アンカー罗马字缩写)
+注意 ak 后面有空格,“.ak”也可以换成“.安价”
+
+.ak help // 查看帮助
+.ak # 标题 // 新建一轮分歧并设标题
+.ak + 选项 // 需要添加的选项的内容
+.ak - 序号 // 需要移除的选项的序号
+.ak ? // 列出目前所有选项
+.ak = // 随机抽取 1 个选项并继续
+.ak = n // 随机抽取 n 个选项并继续
+\`;
+  const STORAGE_KEY = "anchor";
+  const OPTION_NUM_PER_PAGE = 15; // 列出所有选项时,每页放多少个选项
+  function akNew(ctx, msg, ext, title) {
+    const data = {
+      "title": title,
+      "options": []
+    };
+    ext.storageSet(STORAGE_KEY, JSON.stringify(data));
+    seal.replyToSender(ctx, msg, \`已新建分歧:\${title}\`);
+  }
+  function akAdd(ctx, msg, ext, option) {
+    const data = JSON.parse(ext.storageGet(STORAGE_KEY) || '{"title":"","options":[]}');
+    data.options.push(option);
+    seal.replyToSender(ctx, msg, \`当前分歧:\${data.title}
+已添加第\${data.options.length}个选项:\${option}\`);
+    ext.storageSet(STORAGE_KEY, JSON.stringify(data));
+  }
+  function akDel(ctx, msg, ext, index) {
+    const data = JSON.parse(ext.storageGet(STORAGE_KEY) || '{"title":"","options":[]}');
+    const removed = data.options.splice(index - 1, 1)[0];
+    seal.replyToSender(ctx, msg, \`当前分歧:\${data.title}
+已移除第\${index}个选项:\${removed}\`);
+    ext.storageSet(STORAGE_KEY, JSON.stringify(data));
+  }
+  function akList(ctx, msg, ext) {
+    const data = JSON.parse(ext.storageGet(STORAGE_KEY) || '{"title":"","options":[]}');
+    if (data.options.length === 0) {
+      seal.replyToSender(ctx, msg, \`当前分歧:\${data.title}
+还没有任何选项呢\`);
+      return;
+    }
+    let optStr = "";
+    let curPageRows = 0;
+    data.options.forEach((value, index) => {
+      optStr += \`\${index + 1}.\${value}
+\`;
+      ++curPageRows;
+      if (curPageRows >= OPTION_NUM_PER_PAGE) {
+        seal.replyToSender(ctx, msg, \`当前分歧:\${data.title}
+\${optStr}\`);
+        optStr = "";
+        curPageRows = 0;
+      }
+    });
+    if (curPageRows > 0) {
+      seal.replyToSender(ctx, msg, \`当前分歧:\${data.title}
+\${optStr}\`);
+    }
+  }
+  function randomInt(min, max) {
+    return Math.floor(Math.random() * (max - min + 1)) + min;
+  }
+  function akGet(ctx, msg, ext, num = 1) {
+    const data = JSON.parse(ext.storageGet(STORAGE_KEY) || '{"title":"","options":[]}');
+    if (data.options.length === 0) {
+      seal.replyToSender(ctx, msg, \`当前分歧:\${data.title}
+还没有任何选项呢\`);
+      return;
+    }
+    akList(ctx, msg, ext);
+    let optStr = "";
+    for (let i = 0; i < num; ++i) {
+      const r = randomInt(1, data.options.length);
+      const result = data.options.splice(r - 1, 1);
+      optStr += \`\${i + 1}.\${result}
+\`;
+    }
+    seal.replyToSender(ctx, msg, \`结果是:
+\${optStr}\`);
+    ext.storageSet(STORAGE_KEY, JSON.stringify(data));
+  }
+  function main() {
+    let ext = seal.ext.find("anchor");
+    if (!ext) {
+      ext = seal.ext.new("anchor", "憧憬少", "1.0.0");
+
+      const cmdSeal = seal.ext.newCmdItemInfo();
+      cmdSeal.name = "安价";
+      cmdSeal.help = HELP;
+      cmdSeal.solve = (ctx, msg, cmdArgs) => {
+        try {
+          let val = cmdArgs.getArgN(1);
+          switch (val) {
+            case "#": {
+              const title = cmdArgs.getArgN(2);
+              akNew(ctx, msg, ext, title);
+              return seal.ext.newCmdExecuteResult(true);
+            }
+            case "+": {
+              const option = cmdArgs.getArgN(2);
+              akAdd(ctx, msg, ext, option);
+              return seal.ext.newCmdExecuteResult(true);
+            }
+            case "-": {
+              const index = Number(cmdArgs.getArgN(2));
+              akDel(ctx, msg, ext, index);
+              return seal.ext.newCmdExecuteResult(true);
+            }
+            case "?":
+            case "?": {
+              akList(ctx, msg, ext);
+              return seal.ext.newCmdExecuteResult(true);
+            }
+            case "=": {
+              let num = 1;
+              if (cmdArgs.args.length >= 2) {
+                num = Number(cmdArgs.getArgN(2));
+              }
+              akGet(ctx, msg, ext, num);
+              return seal.ext.newCmdExecuteResult(true);
+            }
+            case "help":
+            default: {
+              const ret = seal.ext.newCmdExecuteResult(true);
+              ret.showHelp = true;
+              return ret;
+            }
+          }
+        } catch (error) {
+          seal.replyToSender(ctx, msg, error.Message);
+          return seal.ext.newCmdExecuteResult(true);
+        }
+      };
+      ext.cmdMap["安价"] = cmdSeal;
+      ext.cmdMap["ak"] = cmdSeal;
+
+      seal.ext.register(ext);
+    }
+  }
+  main();
+})();

数据处理模板

关于取出数据来修改的函数,可以参考如下代码:

javascript
const STORAGE_KEY = "anchor"; // 将你的 key 抽出来单独作为一个常量,方便开发阶段修改(使用了之后就不要修改了)
+//函数:添加选项
+function akAdd(ctx, msg, ext, option) {
+    //取出数据
+    const data = JSON.parse(ext.storageGet(STORAGE_KEY) || '{"title":"","options":[]}');
+
+    //处理数据
+    data.options.push(option);
+
+    //响应发送者
+    seal.replyToSender(ctx, msg, \`当前分歧:\${data.title}\\n已添加第\${data.options.length}个选项:\${option}\`);
+
+    //将处理完的数据写回去
+    ext.storageSet(STORAGE_KEY, JSON.stringify(data));
+}

读取玩家或群组数据

可以查看下文的 API

编写暗骰指令

如下:

javascript
// ==UserScript==
+// @name         示例:编写暗骰指令
+// @author       流溪
+// @version      1.0.0
+// @description  暗骰,格式.hide 原因
+// @timestamp    1671540835
+// 2022-12-20
+// @license      Apache-2
+// @homepageURL  https://github.com/sealdice/javascript
+// ==/UserScript==
+if (!seal.ext.find('hide')){
+    const ext = seal.ext.new('hide','流溪','0.0.1');
+
+    const cmdHide = seal.ext.newCmdItemInfo;
+    cmdHide.name = 'hide';
+    cmdHide.help = '暗骰,使用 .hide 面数 暗骰';
+    cmdHide.solve = (ctx, msg, cmdArgs) => {
+      if (msg.messageType !== 'group'){
+          seal.replyToSender(ctx, msg, '暗骰只能在群内触发');
+          return seal.ext.newCmdExecuteResult(true);
+      }
+      function rd(x){
+          // 这里写的时候有点不清醒了,感觉是对的,如果不对请拷打我
+          return Math.round(Math.random() * (x - 1) + 1);
+      }
+      let x = cmdArgs.getArgN(1);
+      if (x === 'help'){
+          return seal.ext.newCmdExecuteResult(true).showhelp = true;
+      } else if (isNaN(Number(x))){
+          // 我知道这里有更好的判断是否为数字的方法但是我不会.jpg
+          seal.replyToSender(ctx, msg, \`骰子面数应是数字\`);
+          return seal.ext.newCmdExecuteResult(true);
+      } else {
+          // 这就是暗骰 api 哒!
+          seal.replyPerson(ctx, msg, \`你在群\${msg.groupId}的掷骰结果为:\${rd(x)}\`);
+          return seal.ext.newCmdExecuteResult(true);
+      }
+    }
+  ext.cmdMap['hide'] = cmdHide;
+
+  seal.ext.register(ext);
+}

可以看到使用seal.replyPerson做到暗骰的效果。

编写代骰指令

javascript
// ==UserScript==
+// @name         示例:编写代骰指令
+// @author       木落
+// @version      1.0.0
+// @description  捕捉某人,格式.catch <@名字>
+// @timestamp    1671540835
+// 2022-12-20
+// @license      Apache-2
+// @homepageURL  https://github.com/sealdice/javascript
+// ==/UserScript==
+
+// 编写代骰指令
+// 先将扩展模块创建出来,如果已创建就直接使用
+if (!seal.ext.find('test')) {
+  const ext = seal.ext.new('test', '木落', '1.0.0');
+
+  // 创建指令 .catch
+  // 这个命令的功能为,显示“试图捕捉某人”,并给出成功率
+  // 如果命令写“.catch @张三”,那么就会试着捕捉张三
+  const cmdCatch = seal.ext.newCmdItemInfo();
+  cmdCatch.name = 'catch';
+  cmdCatch.help = '捕捉某人,格式.catch <@名字>';
+  // 对这个指令启用使用代骰功能,即@某人时,可获取对方的数据,以对方身份进行骰点
+  cmdCatch.allowDelegate = true;
+  cmdCatch.solve = (ctx, msg, cmdArgs) => {
+    // 获取对方数据,之后用 mctx 替代 ctx,mctx 下读出的数据即被代骰者的个人数据
+    const mctx = seal.getCtxProxyFirst(ctx, cmdArgs);
+    let val = cmdArgs.getArgN(1);
+    switch (val) {
+      case 'help': {
+        // 命令为 .catch help
+        const ret = seal.ext.newCmdExecuteResult(true);
+        ret.showHelp = true;
+        return ret;
+      }
+      default: {
+        const text = \`正在试图捕捉\${mctx.player.name},成功率为\${Math.ceil(Math.random() * 100)}%\`;
+        seal.replyToSender(mctx, msg, text);
+        return seal.ext.newCmdExecuteResult(true);
+      }
+    }
+  };
+  // 将命令注册到扩展中
+  ext.cmdMap['catch'] = cmdCatch;
+
+  seal.ext.register(ext);
+}

网络请求

主要使用 Fetch API 进行网络请求,详细文档见链接。fetch 函数返回一个 Promise,传统的写法是这样:

javascript
// 你可以使用 generator 来重写这段代码,欢迎 pr
+// 访问网址
+fetch('https://api-music.imsyy.top/cloudsearch?keywords=稻香').then((resp) => {
+  // 在返回对象的基础上,将文本流作为 json 解析
+  resp.json().then((data) => {
+    // 打印解析出的数据
+    console.log(JSON.stringify(data));
+  });
+});

你也可以使用异步编程(async/await)来简化代码:

javascript
const response = await fetch('https://api-music.imsyy.top/cloudsearch?keywords=稻香');
+if (!response.ok) {
+    // 处理不成功的请求...
+}
+const data = await response.json();
+console.log(JSON.stringify(data));

套用这个模板,你可以写出很多调用 API 的简单扩展。

比如核心代码只有一行的「随机猫猫图片」扩展:

javascript
seal.replyToSender(ctx, msg, \`[CQ:image,file=https://thiscatdoesnotexist.com/,cache=0]\`);

核心代码同样只有一行的「随机二次元图片」扩展:

javascript
seal.replyToSender(ctx, msg, \`[CQ:image,file=https://api.oick.cn/random/api.php?type=\${val},cache=0]\`);

当然,也有稍微复杂的,比如「AI 骰娘」扩展,但也没有太复杂,只是处理了一下发送者传过来的消息,再发送给网络 API,收到响应之后再回应发送者。

它的核心代码如下:

javascript
const BID = ''; // 填入你的骰娘的大脑的 id
+const KEY = ''; // 填入你的 key
+/**
+ * 给 AI 主脑发送消息并接收回复
+ * @param ctx 主要是和当前环境以及用户相关的内容,如当前发指令用户,当前群组信息等
+ * @param msg 为原生态的指令内容,如指令文本,发送平台,发送时间等
+ * @param message 要发送给骰娘的具体消息
+ */
+function chatWithBot(ctx,msg,message) {
+  fetch(\`http://api.brainshop.ai/get?bid=\${BID}&key=\${KEY}&uid=\${msg.sender.userId}&msg=\${message}\`).then(response => {
+    if (!response.ok) {
+      seal.replyToSender(ctx, msg, \`抱歉,我连接不上主脑了。它传递过来的信息是:\${response.status}\`);
+      return seal.ext.newCmdExecuteResult(false);
+    } else {
+      response.json().then(data => {
+        seal.replyToSender(ctx, msg, data["cnt"]);
+        return seal.ext.newCmdExecuteResult(true);
+      });
+      return seal.ext.newCmdExecuteResult(true);
+    }
+  });
+}

自定义 COC 规则

javascript
// ==UserScript==
+// @name         示例:自定义 COC 规则
+// @author       木落
+// @version      1.0.0
+// @description  自设规则,出 1 大成功,出 100 大失败。困难极难等保持原样
+// @timestamp    1671886435
+// 2022-12-24
+// @license      Apache-2
+// @homepageURL  https://github.com/sealdice/javascript
+// ==/UserScript==
+
+const rule = seal.coc.newRule();
+rule.index = 20; // 自定义序号必须大于等于 20,代表可用.setcoc 20 切换
+rule.key = '测试'; // 代表可用 .setcoc 测试 切换
+rule.name = '自设规则'; // 已切换至规则文本 name: desc
+rule.desc = '出 1 大成功\\n出 100 大失败';
+// d100 为出目,checkValue 为技能点数
+rule.check = (ctx, d100, checkValue) => {
+  let successRank = 0;
+  const criticalSuccessValue = 1;
+  const fumbleValue = 100;
+  if (d100 <= checkValue) {
+    successRank = 1;
+  } else {
+    successRank = -1;
+  }
+  // 成功判定
+  if (successRank == 1) {
+    // 区分大成功、困难成功、极难成功等
+    if (d100 <= checkValue / 2) {
+      //suffix = "成功(困难)"
+      successRank = 2;
+    }
+    if (d100 <= checkValue / 5) {
+      //suffix = "成功(极难)"
+      successRank = 3;
+    }
+    if (d100 <= criticalSuccessValue) {
+      //suffix = "大成功!"
+      successRank = 4;
+    }
+  } else {
+    if (d100 >= fumbleValue) {
+      //suffix = "大失败!"
+      successRank = -2;
+    }
+  }
+  let ret = seal.coc.newRuleCheckResult();
+  ret.successRank = successRank;
+  ret.criticalSuccessValue = criticalSuccessValue;
+  return ret;
+};
+// 注册规则
+seal.coc.registerRule(rule);

补充:使用非指令关键词

你是否因为自定义回复能实现的功能有限而烦恼?你是否因为自定义回复的匹配方式不全而愤怒?你是否因为自定义回复只能调用图片 API 而感到焦头烂额?

不要紧张,我的朋友,试试非指令关键词,这会非常有用。

通常情况下,我们使用 ext.onNotCommandReceived 作为非指令关键词的标志;这限定了只有在未收到命令且未达成自定义回复时,海豹才会触发此流程。

一个完整的非指令关键词模板如下:

javascript
// 必要流程,注册扩展,注意即使是非指令关键词也是依附于扩展的
+if (!seal.ext.find('xxx')){
+  const ext = seal.ext.new('xxx','xxx','x.x.x');
+  seal.ext.register(ext);
+  // 这里其实是编写处理函数
+  ext.onNotCommandReceived = (ctx, msg) => {
+    let message = msg.message;
+    // 这里请自己处理要如何达成 message 的匹配条件,js 那么多的匹配方法,足够你玩出花来。
+    if(xxx){
+      // 匹配到关键词了,要干什么?
+      xxx;
+    }
+  }
+}
`,62)),i("h2",y,[s[21]||(s[21]=a("注册插件配置项 ")),k(n,{type:"tip",text:"v1.4.1"}),s[22]||(s[22]=a()),s[23]||(s[23]=i("a",{class:"header-anchor",href:"#注册插件配置项","aria-label":'Permalink to "注册插件配置项 "'},"​",-1))]),s[30]||(s[30]=h(`

插件若要在 UI 中注册可供用户修改的配置项,需要在插件注册后调用 seal.ext.registerXXXConfig() 函数注册配置项。

XXX 为配置项的类型,目前支持 stringintfloatbooltemplateoption 六种类型。注意按照小驼峰命名法大写

同样的,插件也可以使用 seal.ext.getXXXConfig() 函数获取配置项的值。

你也可以直接使用 seal.ext.getConfig() 函数获取配置项的值,这个函数会返回一个 ConfigItem 对象, 包含了配置项的类型、值、默认值等信息。

ConfigItem 对象的类型定义如下,调用时请使用 jsbind 中的值作为 key

go
type ConfigItem struct {
+    Key          string      \`json:"key" jsbind:"key"\`
+    Type         string      \`json:"type" jsbind:"type"\`
+    DefaultValue interface{} \`json:"defaultValue" jsbind:"defaultValue"\`
+    Value        interface{} \`json:"value,omitempty" jsbind:"value"\`
+    Option       interface{} \`json:"option,omitempty" jsbind:"option"\`
+    Deprecated   bool        \`json:"deprecated,omitempty" jsbind:"deprecated"\`
+}

提示:更原始的 API

seal.ext.registerConfig() 函数也是可以使用的,你需要自己通过 seal.ext.newConfigItem() 来获取一个新的 ConfigItem 对象。

在对你的 ConfigItem 对象进行修改后,再调用 seal.ext.registerConfig() 函数进行注册。

示例代码:注册配置项

js
// ==UserScript==
+// @name         js-config-example
+// @author       Szzrain
+// @version      1.0.0
+// @description  演示 js 配置项的用法
+// @timestamp    1698636875
+// @license      MIT
+// ==/UserScript==
+
+if (!seal.ext.find('js-config-example')) {
+  const ext = seal.ext.new('js-config-example', 'SzzRain', '1.0.0');
+  // 创建一个命令
+  const cmdgetConfig = seal.ext.newCmdItemInfo();
+  cmdgetConfig.name = 'getconfig';
+  cmdgetConfig.help = '使用.getconfig <key> 来获取配置项,仅 master 可用';
+  cmdgetConfig.allowDelegate = true;
+  cmdgetConfig.solve = (ctx, msg, cmdArgs) => {
+    let val = cmdArgs.getArgN(1);
+    switch (val) {
+      case 'help': {
+        const ret = seal.ext.newCmdExecuteResult(true);
+        ret.showHelp = true;
+        return ret;
+      }
+      default: {
+        if (ctx.privilegeLevel !== 100) {
+          seal.replyToSender(ctx, msg, "你没有权限执行此命令");
+          return seal.ext.newCmdExecuteResult(true);
+        }
+        switch (val) {
+          case "1":
+            strVal = seal.ext.getStringConfig(ext, "testkey1");
+            seal.replyToSender(ctx, msg, strVal);
+            break;
+          case "2":
+            intVal = seal.ext.getIntConfig(ext, "testkey2");
+            seal.replyToSender(ctx, msg, intVal);
+            break;
+          case "3":
+            floatVal = seal.ext.getFloatConfig(ext, "testkey3");
+            seal.replyToSender(ctx, msg, floatVal);
+            break;
+          case "4":
+            boolVal = seal.ext.getBoolConfig(ext, "testkey4");
+            seal.replyToSender(ctx, msg, boolVal);
+            break;
+          case "5":
+            tmplVal = seal.ext.getTemplateConfig(ext, "testkey5");
+            seal.replyToSender(ctx, msg, tmplVal);
+            break;
+          case "6":
+            optVal = seal.ext.getOptionConfig(ext, "testkey6");
+            seal.replyToSender(ctx, msg, optVal);
+            break;
+          default:
+            let config = seal.ext.getConfig(ext, val);
+            if (config) {
+              seal.replyToSender(ctx, msg, config.value);
+            } else {
+              seal.replyToSender(ctx, msg, "配置项不存在");
+            }
+            break;
+        }
+        return seal.ext.newCmdExecuteResult(true);
+      }
+    }
+  }
+  // 注册命令
+  ext.cmdMap['getconfig'] = cmdgetConfig;
+
+  // 注册扩展
+  seal.ext.register(ext);
+
+  // 注册配置项需在 ext 注册后进行
+  // 通常来说,register 函数的参数为 ext, key, defaultValue
+  seal.ext.registerStringConfig(ext, "testkey1", "testvalue");
+  seal.ext.registerIntConfig(ext, "testkey2", 123);
+  seal.ext.registerFloatConfig(ext, "testkey3", 123.456);
+  seal.ext.registerBoolConfig(ext, "testkey4", true);
+  seal.ext.registerTemplateConfig(ext, "testkey5", ["1", "2", "3", "4"]);
+  // 注册单选项函数的参数为 ext, key, defaultValue, options
+  seal.ext.registerOptionConfig(ext, "testkey6", "1", ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]);
+}

注册后的配置项会在 UI 中显示,可以在 UI 中修改配置项的值

JS 配置项

',11)),i("h2",F,[s[24]||(s[24]=a("注册定时任务 ")),k(n,{type:"tip",text:"v1.4.6"}),s[25]||(s[25]=a()),s[26]||(s[26]=i("a",{class:"header-anchor",href:"#注册定时任务","aria-label":'Permalink to "注册定时任务 "'},"​",-1))]),s[31]||(s[31]=h(`

提示:Cron 表达式

如果你对 cron 或下文中提到的 Cron 表达式并不熟悉,可以参考 Linux crontab 命令 | 菜鸟教程Cron 表达式 - 阿里云文档

v1.4.6 版本开始,海豹核心新增了用于定时任务的 API。

API 参数

javascript
seal.ext.registerTask(ext, taskType, value, func, key="", description="")

其各个参数的含义如下:

  • taskType: stringregisterTask 接受两种类型的定时任务表达式——使用 Cron 表达式或使用 hh:mm/h:mm 格式的「每日」任务。当使用前者时,taskType 应填入 "cron",而后者应填入 "daily"

  • value: string

    • taskType 填入 "cron" 时,value 应填入有效的 Cron 表达式,例如:"*/5 * * * *"registerTask 会根据 Cron 表达式定时执行 func
    • taskType 填入 "daily" 时,value 应填入 hh:mmh:mm 格式的时间,例如:"08:00""3:00""20:35"registerTask 会根据时间,每天定时执行 func
  • func: (taskCtx: JsScriptTaskCtx) => void:定时任务的实际执行函数。其中 taskCtx 的数据类型为:

    typescript
    type JsScriptTaskCtx {
    +  now: number;
    +  key: string;
    +}

    taskCtx.now 提供了 func 实际被唤起时的 Unix 时间戳;如果填写了可选参数 keytaskCtx.key 则与之相同。

    使用定时任务 API 的用户应该将实际业务逻辑放置在 func 内,定时任务 API 仅承担唤醒功能。

  • key: string:可选参数。为此定时任务提供唯一索引。当填写了 key 时,此定时任务也会出现在 WebUI 的插件配置项中,可以通过 WebUI 修改定时任务表达式。

  • description: string:可选参数。为此定时任务提供可读性更高的描述。当同时填写了 keydescription 时,WebUI 的插件配置项中将会显示关于此定时任务的描述。

使用示例

javascript
// 实现任意定时功能
+seal.ext.registerTask(ext, "cron", "* * * * *", (taskCtx) => {
+  // 检查当前时间点附近,尚未执行的所有任务
+  const tasks = getTasks(taskCtx.now, ext.StorageGet("tasks"));
+  for (const task of tasks) {
+    // 检查当前群聊中,插件功能是否开启
+    if (!checkGroupStatus(task.groupId, ext.storageGet("status"))) {
+      continue;
+    }
+    doTask(task);
+  }
+});
javascript
// 类似每日新闻
+seal.ext.registerTask(ext, "daily", "08:30", (taskCtx) => {
+  // 所有需要发送每日新闻的群聊
+  const groups = getGroups(ext.StorageGet("groups"));
+  for (const group of groups) {
+    sendDailyNews(group);
+  }
+}, "daily_news", "每天触发「每日新闻」的时间");
`,9))])}const x=l(r,[["render",c]]);export{m as __pageData,x as default}; diff --git a/assets/advanced_js_gamesystem.md.ChCyDGWM.js b/assets/advanced_js_gamesystem.md.ChCyDGWM.js new file mode 100644 index 000000000..9f2992da4 --- /dev/null +++ b/assets/advanced_js_gamesystem.md.ChCyDGWM.js @@ -0,0 +1 @@ +import{_ as e,c as t,a6 as s,o as l}from"./chunks/framework.B1keMFNq.js";const m=JSON.parse('{"title":"编写新的 TRPG 规则","description":"","frontmatter":{"lang":"zh-cn","title":"编写新的 TRPG 规则"},"headers":[],"relativePath":"advanced/js_gamesystem.md","filePath":"advanced/js_gamesystem.md","lastUpdated":1715601883000}'),i={name:"advanced/js_gamesystem.md"};function p(r,a,o,c,h,d){return l(),t("div",null,a[0]||(a[0]=[s('

编写新的 TRPG 规则

本节内容

本节将介绍如何为你的海豹核心编写和添加一个新的 TRPG 规则。包括编写规则模板和编写指令。

本文中将涉及使用 JavaScript 与 TypeScript 编写插件的内容。如果你尚未阅读 常见用法示例,请先阅读它。

在本节中,假设我们创建了一个叫做《摸鱼大赛》的 TRPG 规则,简称为 fish 规则。

补充:规则详细内容

角色属性

每个角色有 2 个关键属性,即脸皮厚度摸鱼技能等级。取值分别为 1 - 3,通过投掷 D3 来生成。

此外有生命值,生命值上限 = 脸皮厚度 * 2。

游戏规则

简单说:这是一个类 21 点游戏。

玩家的目标是尽可能使得自己的积分接近 21,但不能大于等于 22(因为摸到 22 就不存在了!)。

开始游戏时,每个玩家创建一个角色,可以互换交换一次属性点位置。

每一轮游戏中,每个玩家都要决定“摸鱼”和“不摸鱼”。如果选择摸鱼,获得 d6 + d(摸鱼等级) 的积分;如果选择不摸鱼,则跳过本回合。

如果选择摸鱼后累计积分超过 22,玩家自动消耗 1 点生命值、随机弃牌 1 张。如果累计积分仍大于 22,那么重复以上过程直到积分小于 22 或生命值归零。

如果生命值归零,此玩家就无法再摸鱼了。

当连续两轮所有玩家都选择不摸鱼时,游戏结束。积分最大的人取胜,如果积分相同,生命值更大的人取胜。

规则模板是什么?有什么功能?

规则模板是海豹核心中几种功能的整合发展,包括角色卡、属性同义词、自动修改群名片等。

具体地说,规则模板能为 fish 规则提供以下功能:

  1. set 指令 中注册这个游戏系统,可以直接使用 set fish 打开扩展并设定默认骰子为 D6;

  2. st 指令中添加 fish 规则的角色卡,这包括:(对于以下内容,可以参考海豹核心内置的 CoC 7th 系统与 D&D 5e 系统角色卡的功能)

    1. fish 规则自己的技能默认值
    2. fish 规则的二级属性计算公式
    3. fish 规则的属性同义词
    4. fish 规则的角色卡属性展示顺序
  3. sn 指令 中添加 fish 规则的自动群名片格式,可以使用 sn fish 来开启。

那么,要怎么做?

你需要根据规则编写规则模板,并把规则中的动作编写成指令。

对于 fish 规则来说,指令应该实现以下动作:

  1. 制卡:投掷 2 个 D3,生成角色的属性点;
  2. 摸鱼:投掷 D6 + D(摸鱼等级),计算总积分,按规则扣除生命值;
  3. 不摸鱼:跳过此轮;

另外,对于一个合适的指令,它也应提供帮助文本。

以上的规则模板和指令都可以在同一个 TypeScript 或 JavaScript 插件文件中完成。我们已经写了一个比较完善且有详细注释的示例,以供参考:

摸鱼大赛 TRPG 规则.ts

如果你希望直接尝试以上插件的效果,可以从以下链接获取经过编译的 JavaScript 文件:

摸鱼大赛 TRPG 规则.js

',17)]))}const f=e(i,[["render",p]]);export{m as __pageData,f as default}; diff --git a/assets/advanced_js_gamesystem.md.ChCyDGWM.lean.js b/assets/advanced_js_gamesystem.md.ChCyDGWM.lean.js new file mode 100644 index 000000000..9f2992da4 --- /dev/null +++ b/assets/advanced_js_gamesystem.md.ChCyDGWM.lean.js @@ -0,0 +1 @@ +import{_ as e,c as t,a6 as s,o as l}from"./chunks/framework.B1keMFNq.js";const m=JSON.parse('{"title":"编写新的 TRPG 规则","description":"","frontmatter":{"lang":"zh-cn","title":"编写新的 TRPG 规则"},"headers":[],"relativePath":"advanced/js_gamesystem.md","filePath":"advanced/js_gamesystem.md","lastUpdated":1715601883000}'),i={name:"advanced/js_gamesystem.md"};function p(r,a,o,c,h,d){return l(),t("div",null,a[0]||(a[0]=[s('

编写新的 TRPG 规则

本节内容

本节将介绍如何为你的海豹核心编写和添加一个新的 TRPG 规则。包括编写规则模板和编写指令。

本文中将涉及使用 JavaScript 与 TypeScript 编写插件的内容。如果你尚未阅读 常见用法示例,请先阅读它。

在本节中,假设我们创建了一个叫做《摸鱼大赛》的 TRPG 规则,简称为 fish 规则。

补充:规则详细内容

角色属性

每个角色有 2 个关键属性,即脸皮厚度摸鱼技能等级。取值分别为 1 - 3,通过投掷 D3 来生成。

此外有生命值,生命值上限 = 脸皮厚度 * 2。

游戏规则

简单说:这是一个类 21 点游戏。

玩家的目标是尽可能使得自己的积分接近 21,但不能大于等于 22(因为摸到 22 就不存在了!)。

开始游戏时,每个玩家创建一个角色,可以互换交换一次属性点位置。

每一轮游戏中,每个玩家都要决定“摸鱼”和“不摸鱼”。如果选择摸鱼,获得 d6 + d(摸鱼等级) 的积分;如果选择不摸鱼,则跳过本回合。

如果选择摸鱼后累计积分超过 22,玩家自动消耗 1 点生命值、随机弃牌 1 张。如果累计积分仍大于 22,那么重复以上过程直到积分小于 22 或生命值归零。

如果生命值归零,此玩家就无法再摸鱼了。

当连续两轮所有玩家都选择不摸鱼时,游戏结束。积分最大的人取胜,如果积分相同,生命值更大的人取胜。

规则模板是什么?有什么功能?

规则模板是海豹核心中几种功能的整合发展,包括角色卡、属性同义词、自动修改群名片等。

具体地说,规则模板能为 fish 规则提供以下功能:

  1. set 指令 中注册这个游戏系统,可以直接使用 set fish 打开扩展并设定默认骰子为 D6;

  2. st 指令中添加 fish 规则的角色卡,这包括:(对于以下内容,可以参考海豹核心内置的 CoC 7th 系统与 D&D 5e 系统角色卡的功能)

    1. fish 规则自己的技能默认值
    2. fish 规则的二级属性计算公式
    3. fish 规则的属性同义词
    4. fish 规则的角色卡属性展示顺序
  3. sn 指令 中添加 fish 规则的自动群名片格式,可以使用 sn fish 来开启。

那么,要怎么做?

你需要根据规则编写规则模板,并把规则中的动作编写成指令。

对于 fish 规则来说,指令应该实现以下动作:

  1. 制卡:投掷 2 个 D3,生成角色的属性点;
  2. 摸鱼:投掷 D6 + D(摸鱼等级),计算总积分,按规则扣除生命值;
  3. 不摸鱼:跳过此轮;

另外,对于一个合适的指令,它也应提供帮助文本。

以上的规则模板和指令都可以在同一个 TypeScript 或 JavaScript 插件文件中完成。我们已经写了一个比较完善且有详细注释的示例,以供参考:

摸鱼大赛 TRPG 规则.ts

如果你希望直接尝试以上插件的效果,可以从以下链接获取经过编译的 JavaScript 文件:

摸鱼大赛 TRPG 规则.js

',17)]))}const f=e(i,[["render",p]]);export{m as __pageData,f as default}; diff --git a/assets/advanced_js_project.md.DQF_PqQ6.js b/assets/advanced_js_project.md.DQF_PqQ6.js new file mode 100644 index 000000000..148b2083f --- /dev/null +++ b/assets/advanced_js_project.md.DQF_PqQ6.js @@ -0,0 +1,8 @@ +import{_ as o,c as p,a6 as n,G as a,w as i,j as s,B as d,o as h}from"./chunks/framework.B1keMFNq.js";const f=JSON.parse('{"title":"插件的工程化编写","description":"","frontmatter":{"lang":"zh-cn","title":"插件的工程化编写"},"headers":[],"relativePath":"advanced/js_project.md","filePath":"advanced/js_project.md","lastUpdated":1721283943000}'),c={name:"advanced/js_project.md"};function r(k,e,u,g,b,m){const l=d("PluginTabsTab"),t=d("PluginTabs");return h(),p("div",null,[e[4]||(e[4]=n('

插件的工程化编写

本节内容

本节将介绍如何使用 Node.js 项目编译出海豹可使用的插件,面向有前端经验的开发者。

我们假定你了解如何使用前端工具链,你应当具备诸如命令行、Node.js、npm/pnpm 等工具的使用知识。如果你对这些内容感到陌生,请自行了解或转至 使用单 JS 文件编写,手册不会介绍这些相关背景知识。

如果你打算使用 TypeScript,或者需要编写大型插件,希望更加工程化以方便维护,可以创建项目使用前端工具链来编译出插件。

海豹提供了相应的 模板项目。注册扩展和指令的代码已经写好,可以直接编译出一个可直接装载的 JS 扩展文件。

Clone 或下载模板项目

推荐的流程:

  1. 模板项目仓库 点击 Use this template 按钮,使用该模板在自己的 GitHub 上创建一个扩展的仓库,并设置为自己的扩展的名字;
  2. git clone 到本地,进行开发。

如果不打算使用 GitHub 托管仓库,希望先在本地编写:

  1. 模板项目仓库 点击 Code 按钮,在出现的浮窗中选择 Download ZIP,这样就会下载一个压缩包;
  2. 解压后进行开发。

补全信息

当插件开发完成后(或者开始开发时),你还需要修改几处地方:

  • header.txt:这个文件是你插件的描述信息;
  • tools/build-config.js:最开头一行 var filename = 'sealdce-js-ext.js'; 改成你中意的名字,注意不要与现有的重名。这决定了编译时输出的插件文件名。
  • (可选)package.json:修改其中 name version description 等项目描述信息,不过不修改也不会影响编译。

使用和编译

在确认你所使用的包管理器后,在命令行使用如下命令安装依赖:

',14)),a(t,{sharedStateKey:"npm"},{default:i(()=>[a(l,{label:"npm"},{default:i(()=>e[0]||(e[0]=[s("div",{class:"language-bash vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"bash"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"npm"),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," install")])])])],-1)])),_:1}),a(l,{label:"pnpm"},{default:i(()=>e[1]||(e[1]=[s("div",{class:"language-bash vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"bash"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"pnpm"),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," install")])])])],-1)])),_:1})]),_:1}),e[5]||(e[5]=s("p",null,"当你写好了代码,需要工程编译为插件的单 js 文件以便上传到海豹骰时,在命令行使用如下命令:",-1)),a(t,{sharedStateKey:"npm"},{default:i(()=>[a(l,{label:"npm"},{default:i(()=>e[2]||(e[2]=[s("div",{class:"language-bash vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"bash"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"npm"),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," run"),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," build")])])])],-1)])),_:1}),a(l,{label:"pnpm"},{default:i(()=>e[3]||(e[3]=[s("div",{class:"language-bash vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"bash"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"pnpm"),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," run"),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," build")])])])],-1)])),_:1})]),_:1}),e[6]||(e[6]=n(`

编译成功的 js 文件在 dist 目录下,默认的名字是 sealdce-js-ext.js

目录结构

只列出其中主要的一些文件

  • src
    • index.ts:你的扩展的代码就写在这个文件里。
  • tools
    • build-config.js:一些编译的配置,影响 index.ts 编译成 js 文件的方式;
    • build.js:在命令 npm run build 执行时所运行的脚本,用于读取 build-config 并按照配置进行编译。
  • types
    • seal.d.ts:类型文件,海豹核心提供的扩展 API。
  • header.txt:扩展头信息,会在编译时自动加到目标文件头部;
  • package.json:命令 npm install 时就在安装这个文件里面所指示的依赖包;
  • tsconfig.json:TypeScript 的配置文件。

其他问题

我能在项目中引用 npm 包吗?

当然可以,像正常的前端项目一样,你可以在其中引用其他 npm 包,比如模板项目中就为你引入了常用的 lodash-es

一般来说纯 JS 编写的包都是可以引用的,一些强 native 相关的包可能存在兼容性问题,你需要自行尝试。

推荐你尽量使用 esm 格式的包,不过 commonjs 格式的包也是可以使用的,如 dayjs。其他格式的支持和更多问题排查,请查阅模板项目所使用的构建工具 esbuild 的文档,tools/build-config.js 中即是 esbuild 的配置项。

我想使用的 API 没有被自动提示,直接使用被提示错误,如何解决?

types/seal.d.ts 文件中维护了海豹提供的 API,但目前来说维护的并不完全。如果你发现有一些存在的 API 未被提示,可以手动在 types/seal.d.ts 补上来解决报错。

有时 seal.d.ts 会有更新,可以去模板项目仓库看看有没有最新的,有的话可以替换到你的项目中。也非常欢迎你向模板仓库提 PR 来帮忙完善。

默认输出的插件代码是压缩过的,如何尽量保持产物的可读性?

调整 tools/build-config.js 中的选项,关闭 minify:

js
module.exports = {
+  ...
+  build: {
+    ...
+    minify: false,
+    ...
+  }
+}
`,15))])}const F=o(c,[["render",r]]);export{f as __pageData,F as default}; diff --git a/assets/advanced_js_project.md.DQF_PqQ6.lean.js b/assets/advanced_js_project.md.DQF_PqQ6.lean.js new file mode 100644 index 000000000..148b2083f --- /dev/null +++ b/assets/advanced_js_project.md.DQF_PqQ6.lean.js @@ -0,0 +1,8 @@ +import{_ as o,c as p,a6 as n,G as a,w as i,j as s,B as d,o as h}from"./chunks/framework.B1keMFNq.js";const f=JSON.parse('{"title":"插件的工程化编写","description":"","frontmatter":{"lang":"zh-cn","title":"插件的工程化编写"},"headers":[],"relativePath":"advanced/js_project.md","filePath":"advanced/js_project.md","lastUpdated":1721283943000}'),c={name:"advanced/js_project.md"};function r(k,e,u,g,b,m){const l=d("PluginTabsTab"),t=d("PluginTabs");return h(),p("div",null,[e[4]||(e[4]=n('

插件的工程化编写

本节内容

本节将介绍如何使用 Node.js 项目编译出海豹可使用的插件,面向有前端经验的开发者。

我们假定你了解如何使用前端工具链,你应当具备诸如命令行、Node.js、npm/pnpm 等工具的使用知识。如果你对这些内容感到陌生,请自行了解或转至 使用单 JS 文件编写,手册不会介绍这些相关背景知识。

如果你打算使用 TypeScript,或者需要编写大型插件,希望更加工程化以方便维护,可以创建项目使用前端工具链来编译出插件。

海豹提供了相应的 模板项目。注册扩展和指令的代码已经写好,可以直接编译出一个可直接装载的 JS 扩展文件。

Clone 或下载模板项目

推荐的流程:

  1. 模板项目仓库 点击 Use this template 按钮,使用该模板在自己的 GitHub 上创建一个扩展的仓库,并设置为自己的扩展的名字;
  2. git clone 到本地,进行开发。

如果不打算使用 GitHub 托管仓库,希望先在本地编写:

  1. 模板项目仓库 点击 Code 按钮,在出现的浮窗中选择 Download ZIP,这样就会下载一个压缩包;
  2. 解压后进行开发。

补全信息

当插件开发完成后(或者开始开发时),你还需要修改几处地方:

  • header.txt:这个文件是你插件的描述信息;
  • tools/build-config.js:最开头一行 var filename = 'sealdce-js-ext.js'; 改成你中意的名字,注意不要与现有的重名。这决定了编译时输出的插件文件名。
  • (可选)package.json:修改其中 name version description 等项目描述信息,不过不修改也不会影响编译。

使用和编译

在确认你所使用的包管理器后,在命令行使用如下命令安装依赖:

',14)),a(t,{sharedStateKey:"npm"},{default:i(()=>[a(l,{label:"npm"},{default:i(()=>e[0]||(e[0]=[s("div",{class:"language-bash vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"bash"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"npm"),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," install")])])])],-1)])),_:1}),a(l,{label:"pnpm"},{default:i(()=>e[1]||(e[1]=[s("div",{class:"language-bash vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"bash"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"pnpm"),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," install")])])])],-1)])),_:1})]),_:1}),e[5]||(e[5]=s("p",null,"当你写好了代码,需要工程编译为插件的单 js 文件以便上传到海豹骰时,在命令行使用如下命令:",-1)),a(t,{sharedStateKey:"npm"},{default:i(()=>[a(l,{label:"npm"},{default:i(()=>e[2]||(e[2]=[s("div",{class:"language-bash vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"bash"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"npm"),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," run"),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," build")])])])],-1)])),_:1}),a(l,{label:"pnpm"},{default:i(()=>e[3]||(e[3]=[s("div",{class:"language-bash vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"bash"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"pnpm"),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," run"),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," build")])])])],-1)])),_:1})]),_:1}),e[6]||(e[6]=n(`

编译成功的 js 文件在 dist 目录下,默认的名字是 sealdce-js-ext.js

目录结构

只列出其中主要的一些文件

  • src
    • index.ts:你的扩展的代码就写在这个文件里。
  • tools
    • build-config.js:一些编译的配置,影响 index.ts 编译成 js 文件的方式;
    • build.js:在命令 npm run build 执行时所运行的脚本,用于读取 build-config 并按照配置进行编译。
  • types
    • seal.d.ts:类型文件,海豹核心提供的扩展 API。
  • header.txt:扩展头信息,会在编译时自动加到目标文件头部;
  • package.json:命令 npm install 时就在安装这个文件里面所指示的依赖包;
  • tsconfig.json:TypeScript 的配置文件。

其他问题

我能在项目中引用 npm 包吗?

当然可以,像正常的前端项目一样,你可以在其中引用其他 npm 包,比如模板项目中就为你引入了常用的 lodash-es

一般来说纯 JS 编写的包都是可以引用的,一些强 native 相关的包可能存在兼容性问题,你需要自行尝试。

推荐你尽量使用 esm 格式的包,不过 commonjs 格式的包也是可以使用的,如 dayjs。其他格式的支持和更多问题排查,请查阅模板项目所使用的构建工具 esbuild 的文档,tools/build-config.js 中即是 esbuild 的配置项。

我想使用的 API 没有被自动提示,直接使用被提示错误,如何解决?

types/seal.d.ts 文件中维护了海豹提供的 API,但目前来说维护的并不完全。如果你发现有一些存在的 API 未被提示,可以手动在 types/seal.d.ts 补上来解决报错。

有时 seal.d.ts 会有更新,可以去模板项目仓库看看有没有最新的,有的话可以替换到你的项目中。也非常欢迎你向模板仓库提 PR 来帮忙完善。

默认输出的插件代码是压缩过的,如何尽量保持产物的可读性?

调整 tools/build-config.js 中的选项,关闭 minify:

js
module.exports = {
+  ...
+  build: {
+    ...
+    minify: false,
+    ...
+  }
+}
`,15))])}const F=o(c,[["render",r]]);export{f as __pageData,F as default}; diff --git a/assets/advanced_js_start.md.B95XU9oj.js b/assets/advanced_js_start.md.B95XU9oj.js new file mode 100644 index 000000000..169783cbb --- /dev/null +++ b/assets/advanced_js_start.md.B95XU9oj.js @@ -0,0 +1,36 @@ +import{_ as d,c as h,a6 as l,j as a,a as e,G as i,w as n,B as p,o as k}from"./chunks/framework.B1keMFNq.js";const c="/sealdice-manual-next/assets/edit-jsscript-dts.j849kmdb.png",x=JSON.parse('{"title":"前言","description":"","frontmatter":{"lang":"zh-cn","title":"前言"},"headers":[],"relativePath":"advanced/js_start.md","filePath":"advanced/js_start.md","lastUpdated":1721287883000}'),u={name:"advanced/js_start.md"},g={tabindex:"0"},b={id:"依赖其他扩展",tabindex:"-1"},m={id:"目标海豹版本",tabindex:"-1"};function v(A,s,D,y,f,S){const t=p("Badge"),r=p("PluginTabsTab"),o=p("PluginTabs");return k(),h("div",null,[s[38]||(s[38]=l(`

前言

本节内容

本节将介绍 JavaScript 脚本的编写的前置知识,更多内容请看 API 列表常见用法示例,请善用侧边栏和搜索,按需阅读文档。

我们假定你熟悉 JavaScript / TypeScript,编程语言的教学超出了本文档的目的,如果你还不熟悉它们,可以从互联网上寻找到很多优秀的教程。如:

注意:你只需要学习 JavaScript 语言本身,不包括 WebAPI。

快速开始

JavaScriptJS)虽然作为 Web 页面中的脚本语言被人所熟知,但是它也被用到了很多 非浏览器环境 中,例如 Node.jsApache CouchDBAdobe Acrobat 等。

—— 来自 MDN 文档

海豹的 JS 插件就是运行在一个非浏览器环境中—— goja 作为 JS 脚本引擎所提供的环境,该环境目前支持了 ES6 基本上全部的特性,包括 async/awaitpromisegenerator 等异步编程友好的特性。

除了 JS 语言规范所提供的 内置对象,海豹额外在环境中提供了如下全局对象:

  • seal 用于自定义扩展、增加指令、管理黑白名单……几乎所有与海豹本体有关的 API 都挂载在这个内置对象上。
  • console 专门与海豹的日志模块进行交互。
  • setTimeout/setInterval 等与事件循环相关的函数。
  • fetch 用于网络请求。
  • atob/btoa 用于 base64 编解码。

警告

需要注意引擎的整型为 32 位,请小心溢出问题。

现在,让我们从最简单的扩展开始,这个扩展只会在日志中打印一条 Hello World!

新建一个 JS 文件,写入如下内容,然后通过海豹的 WebUI 上传并重载 JS 环境(或是直接复制到海豹 WebUI 的调试控制台中运行)。

javascript
// ==UserScript==
+// @name         示例:如何开始
+// @author       木落
+// @version      1.0.0
+// @description  这是一个演示脚本,并没有任何实际作用。
+// @timestamp    1671368035
+// 2022-12-18
+// @license      Apache-2
+// @homepageURL  https://github.com/sealdice/javascript
+// ==/UserScript==
+
+console.log('Hello World!');

你应当能在控制台中观察到一条 Hello World 的日志。

提示:打印日志

console 打印出来的东西不仅会在控制台中出现,在日志中也会显示。

涉及网络请求或延迟执行的内容,有时候不会在控制台调试面板上显示出来,而在日志中能看到。

插件元数据

每个 JS 扩展需要在开头以固定格式注释的形式留下信息,以便使用和分享,这些信息通常被称为「插件元数据」:

javascript
// ==UserScript==
+// @name         脚本的名字
+// @author       木落
+// @version      1.0.0
+// @description  这是一个演示脚本,并没有任何实际作用。
+// @timestamp    1672066028
+// @license      Apache-2
+// @homepageURL  https://github.com/sealdice/javascript
+// @depends      SzzRain:demo:1.0.0
+// @sealVersion  1.4.5
+// ==/UserScript==
`,16)),a("table",g,[s[17]||(s[17]=a("thead",null,[a("tr",null,[a("th",null,"属性"),a("th",null,"含义")])],-1)),a("tbody",null,[s[10]||(s[10]=a("tr",null,[a("td",null,"@name"),a("td",null,"必填,JS 扩展的名称,会展示在插件列表页面")],-1)),s[11]||(s[11]=a("tr",null,[a("td",null,"@author"),a("td",null,"必填,作者名")],-1)),s[12]||(s[12]=a("tr",null,[a("td",null,"@version"),a("td",null,[e("必填,版本号,可以自己定义,但建议遵循 "),a("a",{href:"https://semver.org/lang/zh-CN/",target:"_blank",rel:"noreferrer"},"语义版本控制(Semantic Versioning)")])],-1)),s[13]||(s[13]=a("tr",null,[a("td",null,"@description"),a("td",null,"可选,对扩展的功能的描述")],-1)),s[14]||(s[14]=a("tr",null,[a("td",null,"@timestamp"),a("td",null,[e("可选,最后更新时间,以秒为单位的 unix 时间戳,新版本支持了直接使用时间字符串,如 "),a("code",null,"2023-10-30"),e("。")])],-1)),s[15]||(s[15]=a("tr",null,[a("td",null,"@license"),a("td",null,"可选,开源协议,示例中的 Apache-2 是一个比较自由的协议,允许任意使用和分发(包括商用),当然你也可以使用其它协议(MIT GPL 等)")],-1)),s[16]||(s[16]=a("tr",null,[a("td",null,"@homepageURL"),a("td",null,"可选,你的扩展的主页链接,有 GitHub 仓库可以填仓库链接,没有则可以填海豹官方插件仓库")],-1)),a("tr",null,[a("td",null,[s[0]||(s[0]=e("@depends ")),i(t,{type:"tip",text:"v1.4.4"})]),a("td",null,[s[1]||(s[1]=e("可选,从 ")),i(t,{type:"tip",text:"v1.4.4"}),s[2]||(s[2]=e(" 加入,指定你的扩展依赖的其他扩展,")),s[3]||(s[3]=a("strong",null,"可以不含此行或含有多行",-1)),s[4]||(s[4]=e("。详见 ")),s[5]||(s[5]=a("a",{href:"#依赖其他扩展"},"依赖其他扩展",-1))])]),a("tr",null,[a("td",null,[s[6]||(s[6]=e("@sealVersion ")),i(t,{type:"tip",text:"v1.4.5"})]),a("td",null,[s[7]||(s[7]=e("可选,从 ")),i(t,{type:"tip",text:"v1.4.5"}),s[8]||(s[8]=e(" 加入,指定你的扩展的目标海豹版本。详见 ")),s[9]||(s[9]=a("a",{href:"#目标海豹版本"},"目标海豹版本",-1))])])])]),s[39]||(s[39]=l('

插件编写

单 JS 文件编写插件

我们更推荐使用 TypeScript 来编写插件,编译到 ES6 后使用即可。不过先从 JavaScript 开始也是没有任何问题的。

编写插件时,可以下载海豹提供的 seal.d.ts 文件,将其保存在和你要编写的 JS 文件同级的目录下。

seal.d.ts 支持了在使用 vscode 等工具编写时,对海豹提供的 API 的代码补全。

海豹 API 代码补全

提示

seal.d.ts 文件随时可能会有更新,如果你需要的 API 没有提示,可以检查一下是否是最新版本。

插件的工程化编写

如果你打算使用 TypeScript,或者需要编写大型插件,希望更加工程化以方便维护,见 插件的工程化编写

插件的工程化编写

插件的工程化编写是 为有一定经验的开发者准备的。相关文档默认你了解如何使用前端工具链,你应当具备诸如命令行、Node.js、npm/pnpm 等工具的使用知识。

如果你对上面的内容感到陌生,请自行了解或放弃使用,手册不会介绍相关内容。

使用单 JS 文件编写插件与使用模板工程编写本质上是没有区别的,并不会出现某些功能无法使用的差异。

扩展依赖

',11)),a("h3",b,[s[18]||(s[18]=e("依赖其他扩展 ")),i(t,{type:"tip",text:"v1.4.4"}),s[19]||(s[19]=e()),s[20]||(s[20]=a("a",{class:"header-anchor",href:"#依赖其他扩展","aria-label":'Permalink to "依赖其他扩展 "'},"​",-1))]),s[40]||(s[40]=a("p",null,"有些时候,你的扩展依赖于另一个扩展提供的功能,希望在缺失对应扩展时不进行这个插件的加载。",-1)),s[41]||(s[41]=a("p",null,"例如,「SzzRain:每日新闻」依赖于「SzzRain:定时任务」,我们希望在骰主仅安装了「SzzRain:每日新闻」时,提示需要安装其依赖的「SzzRain:定时任务」扩展。",-1)),a("p",null,[s[21]||(s[21]=e("从 ")),i(t,{type:"tip",text:"v1.4.4"}),s[22]||(s[22]=e(" 开始,你可以在 ")),s[23]||(s[23]=a("a",{href:"#填写插件信息"},"插件元数据",-1)),s[24]||(s[24]=e(" 中通过 ")),s[25]||(s[25]=a("code",null,"@depends",-1)),s[26]||(s[26]=e(" 来指定扩展依赖的其他扩展。"))]),s[42]||(s[42]=l('

指定依赖的格式

指定依赖的格式为 作者:插件名[:SemVer版本约束,可选],其中 : 是分隔符,注意必须是半角符号。

例如,使用 @depends SzzRain:定时任务,这意味着该插件需要同时安装一个名为 定时任务,作者名为 SzzRain 的插件才可正常工作。

',3)),i(o,null,{default:n(()=>[i(r,{label:"SzzRain:每日新闻"},{default:n(()=>s[27]||(s[27]=[a("div",{class:"language-javascript vp-adaptive-theme"},[a("button",{title:"Copy Code",class:"copy"}),a("span",{class:"lang"},"javascript"),a("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[a("code",null,[a("span",{class:"line"},[a("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}},"// ==UserScript==")]),e(` +`),a("span",{class:"line"},[a("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}},"// @name 每日新闻")]),e(` +`),a("span",{class:"line"},[a("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}},"// @author SzzRain")]),e(` +`),a("span",{class:"line"},[a("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}},"// @version 2.0.0")]),e(` +`),a("span",{class:"line"},[a("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}},"// ...")]),e(` +`),a("span",{class:"line"},[a("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}},"// @depends SzzRain:定时任务:>=2.0.0")])])])],-1)])),_:1}),i(r,{label:"SzzRain:定时任务"},{default:n(()=>s[28]||(s[28]=[a("div",{class:"language-javascript vp-adaptive-theme"},[a("button",{title:"Copy Code",class:"copy"}),a("span",{class:"lang"},"javascript"),a("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[a("code",null,[a("span",{class:"line"},[a("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}},"// ==UserScript==")]),e(` +`),a("span",{class:"line"},[a("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}},"// @name 定时任务")]),e(` +`),a("span",{class:"line"},[a("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}},"// @author SzzRain")]),e(` +`),a("span",{class:"line"},[a("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}},"// @version 2.0.0")])])])],-1)])),_:1})]),_:1}),s[43]||(s[43]=l(`

在上面的示例中,可以看见「SzzRain:每日新闻」通过 @depends 指明了其依赖 SzzRain:定时任务:>=2.0.0

版本限制是可选的,比如上面示例中的 >=2.0.0,这表示 SzzRain:每日新闻 依赖于 SzzRain:定时任务,且后者的版本必须大于等于 2.0.0。这在你需要依赖高版本插件的情况下很有用。

插件名、作者、版本号

指定依赖插件涉及到对应的插件名、作者名和版本号,其为插件元数据中的 @name@author@version

有更复杂的指定依赖版本需求?

除了上面提到的 >=2.0.0 之外,你还可以参阅海豹所使用的 go-semver 库的文档,来进行更复杂的限制。

比如 1.1.4-5.1.4 意味着指定的依赖版本需要在 1.1.45.1.4 之间。

但是,目标依赖的版本号需要符合 SemVer 才能更好的支持你进行版本限制。

依赖多个扩展

依赖可以是多个,每一行指定一个 @depends,这意味着这个插件需要同时满足所有的依赖才能工作。

例如我们给上面的「SzzRain:每日新闻」增加一个新的依赖:

javascript
// ==UserScript==
+// @name         每日新闻
+// @author       SzzRain
+// @version      2.0.0
+// ...
+// @depends      SzzRain:定时任务:>=2.0.0
+// @depends      sealdice:强制依赖

此时,这个插件需要同时安装 SzzRain:定时任务(且版本大于等于 2.0.0)和 sealdice:强制依赖 这两个插件时,才能正常加载。

`,9)),a("h2",m,[s[29]||(s[29]=e("目标海豹版本 ")),i(t,{type:"tip",text:"v1.4.5"}),s[30]||(s[30]=e()),s[31]||(s[31]=a("a",{class:"header-anchor",href:"#目标海豹版本","aria-label":'Permalink to "目标海豹版本 "'},"​",-1))]),s[44]||(s[44]=a("p",null,"新版本的海豹有时会增加更多插件可以调用的 API,但会出现使用旧版本海豹的骰主,去尝试加载使用了新 API 的插件而出错的情况。",-1)),a("p",null,[s[32]||(s[32]=e("为了让插件作者无需反复说明,也更好地提示使用插件的骰主,从 ")),i(t,{type:"tip",text:"v1.4.5"}),s[33]||(s[33]=e(" 开始,你可以在 ")),s[34]||(s[34]=a("a",{href:"#插件元数据"},"插件元数据",-1)),s[35]||(s[35]=e(" 中通过 ")),s[36]||(s[36]=a("code",null,"@sealVersion",-1)),s[37]||(s[37]=e(" 来指定插件的目标海豹版本。"))]),s[45]||(s[45]=l('

例如,当插件使用了在 1.4.6 新增的 API,可以指定目标海豹版本 @sealVersion 1.4.6。而当加载该插件的海豹版本为 1.4.5 时,会向骰主提示海豹版本不兼容而拒绝加载。

兼容的海豹版本

插件作者只需要指定目标海豹版本即可,如 1.4.5 新增的 API 则指定 @sealVersion 1.4.5

海豹会尝试在兼容的情况下尽可能地加载插件,这是由海豹核心自动处理的。

一些有帮助的资源

VS Code 可以安装 SealDice Snippets 插件,提供了一些常见代码片段,帮助快速生成模板代码。

其他问题

我不会 JavaScript,海豹支持其他编程语言编写插件吗?

这个问题分为两个部分,如果你所说的其他编程语言为 Python、Lua 等与 JavaScript 无关的编程语言,那么目前是无法使用这些语言编写海豹插件的。如果你有一些其它骰系的插件(比如一些 Lua 插件),你只能通过按原逻辑重写为海豹 JavaScript 插件的方式来在海豹中使用。

但是有些编程语言是可以编译为 JavaScript 的,典型的像 TypeScript、CoffeeScript。这些语言在编写时使用它们自己,最后只要编译成 JavaScript 就可以在海豹中使用了。

',8))])}const j=d(u,[["render",v]]);export{x as __pageData,j as default}; diff --git a/assets/advanced_js_start.md.B95XU9oj.lean.js b/assets/advanced_js_start.md.B95XU9oj.lean.js new file mode 100644 index 000000000..169783cbb --- /dev/null +++ b/assets/advanced_js_start.md.B95XU9oj.lean.js @@ -0,0 +1,36 @@ +import{_ as d,c as h,a6 as l,j as a,a as e,G as i,w as n,B as p,o as k}from"./chunks/framework.B1keMFNq.js";const c="/sealdice-manual-next/assets/edit-jsscript-dts.j849kmdb.png",x=JSON.parse('{"title":"前言","description":"","frontmatter":{"lang":"zh-cn","title":"前言"},"headers":[],"relativePath":"advanced/js_start.md","filePath":"advanced/js_start.md","lastUpdated":1721287883000}'),u={name:"advanced/js_start.md"},g={tabindex:"0"},b={id:"依赖其他扩展",tabindex:"-1"},m={id:"目标海豹版本",tabindex:"-1"};function v(A,s,D,y,f,S){const t=p("Badge"),r=p("PluginTabsTab"),o=p("PluginTabs");return k(),h("div",null,[s[38]||(s[38]=l(`

前言

本节内容

本节将介绍 JavaScript 脚本的编写的前置知识,更多内容请看 API 列表常见用法示例,请善用侧边栏和搜索,按需阅读文档。

我们假定你熟悉 JavaScript / TypeScript,编程语言的教学超出了本文档的目的,如果你还不熟悉它们,可以从互联网上寻找到很多优秀的教程。如:

注意:你只需要学习 JavaScript 语言本身,不包括 WebAPI。

快速开始

JavaScriptJS)虽然作为 Web 页面中的脚本语言被人所熟知,但是它也被用到了很多 非浏览器环境 中,例如 Node.jsApache CouchDBAdobe Acrobat 等。

—— 来自 MDN 文档

海豹的 JS 插件就是运行在一个非浏览器环境中—— goja 作为 JS 脚本引擎所提供的环境,该环境目前支持了 ES6 基本上全部的特性,包括 async/awaitpromisegenerator 等异步编程友好的特性。

除了 JS 语言规范所提供的 内置对象,海豹额外在环境中提供了如下全局对象:

  • seal 用于自定义扩展、增加指令、管理黑白名单……几乎所有与海豹本体有关的 API 都挂载在这个内置对象上。
  • console 专门与海豹的日志模块进行交互。
  • setTimeout/setInterval 等与事件循环相关的函数。
  • fetch 用于网络请求。
  • atob/btoa 用于 base64 编解码。

警告

需要注意引擎的整型为 32 位,请小心溢出问题。

现在,让我们从最简单的扩展开始,这个扩展只会在日志中打印一条 Hello World!

新建一个 JS 文件,写入如下内容,然后通过海豹的 WebUI 上传并重载 JS 环境(或是直接复制到海豹 WebUI 的调试控制台中运行)。

javascript
// ==UserScript==
+// @name         示例:如何开始
+// @author       木落
+// @version      1.0.0
+// @description  这是一个演示脚本,并没有任何实际作用。
+// @timestamp    1671368035
+// 2022-12-18
+// @license      Apache-2
+// @homepageURL  https://github.com/sealdice/javascript
+// ==/UserScript==
+
+console.log('Hello World!');

你应当能在控制台中观察到一条 Hello World 的日志。

提示:打印日志

console 打印出来的东西不仅会在控制台中出现,在日志中也会显示。

涉及网络请求或延迟执行的内容,有时候不会在控制台调试面板上显示出来,而在日志中能看到。

插件元数据

每个 JS 扩展需要在开头以固定格式注释的形式留下信息,以便使用和分享,这些信息通常被称为「插件元数据」:

javascript
// ==UserScript==
+// @name         脚本的名字
+// @author       木落
+// @version      1.0.0
+// @description  这是一个演示脚本,并没有任何实际作用。
+// @timestamp    1672066028
+// @license      Apache-2
+// @homepageURL  https://github.com/sealdice/javascript
+// @depends      SzzRain:demo:1.0.0
+// @sealVersion  1.4.5
+// ==/UserScript==
`,16)),a("table",g,[s[17]||(s[17]=a("thead",null,[a("tr",null,[a("th",null,"属性"),a("th",null,"含义")])],-1)),a("tbody",null,[s[10]||(s[10]=a("tr",null,[a("td",null,"@name"),a("td",null,"必填,JS 扩展的名称,会展示在插件列表页面")],-1)),s[11]||(s[11]=a("tr",null,[a("td",null,"@author"),a("td",null,"必填,作者名")],-1)),s[12]||(s[12]=a("tr",null,[a("td",null,"@version"),a("td",null,[e("必填,版本号,可以自己定义,但建议遵循 "),a("a",{href:"https://semver.org/lang/zh-CN/",target:"_blank",rel:"noreferrer"},"语义版本控制(Semantic Versioning)")])],-1)),s[13]||(s[13]=a("tr",null,[a("td",null,"@description"),a("td",null,"可选,对扩展的功能的描述")],-1)),s[14]||(s[14]=a("tr",null,[a("td",null,"@timestamp"),a("td",null,[e("可选,最后更新时间,以秒为单位的 unix 时间戳,新版本支持了直接使用时间字符串,如 "),a("code",null,"2023-10-30"),e("。")])],-1)),s[15]||(s[15]=a("tr",null,[a("td",null,"@license"),a("td",null,"可选,开源协议,示例中的 Apache-2 是一个比较自由的协议,允许任意使用和分发(包括商用),当然你也可以使用其它协议(MIT GPL 等)")],-1)),s[16]||(s[16]=a("tr",null,[a("td",null,"@homepageURL"),a("td",null,"可选,你的扩展的主页链接,有 GitHub 仓库可以填仓库链接,没有则可以填海豹官方插件仓库")],-1)),a("tr",null,[a("td",null,[s[0]||(s[0]=e("@depends ")),i(t,{type:"tip",text:"v1.4.4"})]),a("td",null,[s[1]||(s[1]=e("可选,从 ")),i(t,{type:"tip",text:"v1.4.4"}),s[2]||(s[2]=e(" 加入,指定你的扩展依赖的其他扩展,")),s[3]||(s[3]=a("strong",null,"可以不含此行或含有多行",-1)),s[4]||(s[4]=e("。详见 ")),s[5]||(s[5]=a("a",{href:"#依赖其他扩展"},"依赖其他扩展",-1))])]),a("tr",null,[a("td",null,[s[6]||(s[6]=e("@sealVersion ")),i(t,{type:"tip",text:"v1.4.5"})]),a("td",null,[s[7]||(s[7]=e("可选,从 ")),i(t,{type:"tip",text:"v1.4.5"}),s[8]||(s[8]=e(" 加入,指定你的扩展的目标海豹版本。详见 ")),s[9]||(s[9]=a("a",{href:"#目标海豹版本"},"目标海豹版本",-1))])])])]),s[39]||(s[39]=l('

插件编写

单 JS 文件编写插件

我们更推荐使用 TypeScript 来编写插件,编译到 ES6 后使用即可。不过先从 JavaScript 开始也是没有任何问题的。

编写插件时,可以下载海豹提供的 seal.d.ts 文件,将其保存在和你要编写的 JS 文件同级的目录下。

seal.d.ts 支持了在使用 vscode 等工具编写时,对海豹提供的 API 的代码补全。

海豹 API 代码补全

提示

seal.d.ts 文件随时可能会有更新,如果你需要的 API 没有提示,可以检查一下是否是最新版本。

插件的工程化编写

如果你打算使用 TypeScript,或者需要编写大型插件,希望更加工程化以方便维护,见 插件的工程化编写

插件的工程化编写

插件的工程化编写是 为有一定经验的开发者准备的。相关文档默认你了解如何使用前端工具链,你应当具备诸如命令行、Node.js、npm/pnpm 等工具的使用知识。

如果你对上面的内容感到陌生,请自行了解或放弃使用,手册不会介绍相关内容。

使用单 JS 文件编写插件与使用模板工程编写本质上是没有区别的,并不会出现某些功能无法使用的差异。

扩展依赖

',11)),a("h3",b,[s[18]||(s[18]=e("依赖其他扩展 ")),i(t,{type:"tip",text:"v1.4.4"}),s[19]||(s[19]=e()),s[20]||(s[20]=a("a",{class:"header-anchor",href:"#依赖其他扩展","aria-label":'Permalink to "依赖其他扩展 "'},"​",-1))]),s[40]||(s[40]=a("p",null,"有些时候,你的扩展依赖于另一个扩展提供的功能,希望在缺失对应扩展时不进行这个插件的加载。",-1)),s[41]||(s[41]=a("p",null,"例如,「SzzRain:每日新闻」依赖于「SzzRain:定时任务」,我们希望在骰主仅安装了「SzzRain:每日新闻」时,提示需要安装其依赖的「SzzRain:定时任务」扩展。",-1)),a("p",null,[s[21]||(s[21]=e("从 ")),i(t,{type:"tip",text:"v1.4.4"}),s[22]||(s[22]=e(" 开始,你可以在 ")),s[23]||(s[23]=a("a",{href:"#填写插件信息"},"插件元数据",-1)),s[24]||(s[24]=e(" 中通过 ")),s[25]||(s[25]=a("code",null,"@depends",-1)),s[26]||(s[26]=e(" 来指定扩展依赖的其他扩展。"))]),s[42]||(s[42]=l('

指定依赖的格式

指定依赖的格式为 作者:插件名[:SemVer版本约束,可选],其中 : 是分隔符,注意必须是半角符号。

例如,使用 @depends SzzRain:定时任务,这意味着该插件需要同时安装一个名为 定时任务,作者名为 SzzRain 的插件才可正常工作。

',3)),i(o,null,{default:n(()=>[i(r,{label:"SzzRain:每日新闻"},{default:n(()=>s[27]||(s[27]=[a("div",{class:"language-javascript vp-adaptive-theme"},[a("button",{title:"Copy Code",class:"copy"}),a("span",{class:"lang"},"javascript"),a("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[a("code",null,[a("span",{class:"line"},[a("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}},"// ==UserScript==")]),e(` +`),a("span",{class:"line"},[a("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}},"// @name 每日新闻")]),e(` +`),a("span",{class:"line"},[a("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}},"// @author SzzRain")]),e(` +`),a("span",{class:"line"},[a("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}},"// @version 2.0.0")]),e(` +`),a("span",{class:"line"},[a("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}},"// ...")]),e(` +`),a("span",{class:"line"},[a("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}},"// @depends SzzRain:定时任务:>=2.0.0")])])])],-1)])),_:1}),i(r,{label:"SzzRain:定时任务"},{default:n(()=>s[28]||(s[28]=[a("div",{class:"language-javascript vp-adaptive-theme"},[a("button",{title:"Copy Code",class:"copy"}),a("span",{class:"lang"},"javascript"),a("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[a("code",null,[a("span",{class:"line"},[a("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}},"// ==UserScript==")]),e(` +`),a("span",{class:"line"},[a("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}},"// @name 定时任务")]),e(` +`),a("span",{class:"line"},[a("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}},"// @author SzzRain")]),e(` +`),a("span",{class:"line"},[a("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}},"// @version 2.0.0")])])])],-1)])),_:1})]),_:1}),s[43]||(s[43]=l(`

在上面的示例中,可以看见「SzzRain:每日新闻」通过 @depends 指明了其依赖 SzzRain:定时任务:>=2.0.0

版本限制是可选的,比如上面示例中的 >=2.0.0,这表示 SzzRain:每日新闻 依赖于 SzzRain:定时任务,且后者的版本必须大于等于 2.0.0。这在你需要依赖高版本插件的情况下很有用。

插件名、作者、版本号

指定依赖插件涉及到对应的插件名、作者名和版本号,其为插件元数据中的 @name@author@version

有更复杂的指定依赖版本需求?

除了上面提到的 >=2.0.0 之外,你还可以参阅海豹所使用的 go-semver 库的文档,来进行更复杂的限制。

比如 1.1.4-5.1.4 意味着指定的依赖版本需要在 1.1.45.1.4 之间。

但是,目标依赖的版本号需要符合 SemVer 才能更好的支持你进行版本限制。

依赖多个扩展

依赖可以是多个,每一行指定一个 @depends,这意味着这个插件需要同时满足所有的依赖才能工作。

例如我们给上面的「SzzRain:每日新闻」增加一个新的依赖:

javascript
// ==UserScript==
+// @name         每日新闻
+// @author       SzzRain
+// @version      2.0.0
+// ...
+// @depends      SzzRain:定时任务:>=2.0.0
+// @depends      sealdice:强制依赖

此时,这个插件需要同时安装 SzzRain:定时任务(且版本大于等于 2.0.0)和 sealdice:强制依赖 这两个插件时,才能正常加载。

`,9)),a("h2",m,[s[29]||(s[29]=e("目标海豹版本 ")),i(t,{type:"tip",text:"v1.4.5"}),s[30]||(s[30]=e()),s[31]||(s[31]=a("a",{class:"header-anchor",href:"#目标海豹版本","aria-label":'Permalink to "目标海豹版本 "'},"​",-1))]),s[44]||(s[44]=a("p",null,"新版本的海豹有时会增加更多插件可以调用的 API,但会出现使用旧版本海豹的骰主,去尝试加载使用了新 API 的插件而出错的情况。",-1)),a("p",null,[s[32]||(s[32]=e("为了让插件作者无需反复说明,也更好地提示使用插件的骰主,从 ")),i(t,{type:"tip",text:"v1.4.5"}),s[33]||(s[33]=e(" 开始,你可以在 ")),s[34]||(s[34]=a("a",{href:"#插件元数据"},"插件元数据",-1)),s[35]||(s[35]=e(" 中通过 ")),s[36]||(s[36]=a("code",null,"@sealVersion",-1)),s[37]||(s[37]=e(" 来指定插件的目标海豹版本。"))]),s[45]||(s[45]=l('

例如,当插件使用了在 1.4.6 新增的 API,可以指定目标海豹版本 @sealVersion 1.4.6。而当加载该插件的海豹版本为 1.4.5 时,会向骰主提示海豹版本不兼容而拒绝加载。

兼容的海豹版本

插件作者只需要指定目标海豹版本即可,如 1.4.5 新增的 API 则指定 @sealVersion 1.4.5

海豹会尝试在兼容的情况下尽可能地加载插件,这是由海豹核心自动处理的。

一些有帮助的资源

VS Code 可以安装 SealDice Snippets 插件,提供了一些常见代码片段,帮助快速生成模板代码。

其他问题

我不会 JavaScript,海豹支持其他编程语言编写插件吗?

这个问题分为两个部分,如果你所说的其他编程语言为 Python、Lua 等与 JavaScript 无关的编程语言,那么目前是无法使用这些语言编写海豹插件的。如果你有一些其它骰系的插件(比如一些 Lua 插件),你只能通过按原逻辑重写为海豹 JavaScript 插件的方式来在海豹中使用。

但是有些编程语言是可以编译为 JavaScript 的,典型的像 TypeScript、CoffeeScript。这些语言在编写时使用它们自己,最后只要编译成 JavaScript 就可以在海豹中使用了。

',8))])}const j=d(u,[["render",v]]);export{x as __pageData,j as default}; diff --git a/assets/advanced_script.md.CSAoGEHA.js b/assets/advanced_script.md.CSAoGEHA.js new file mode 100644 index 000000000..6c63e1f37 --- /dev/null +++ b/assets/advanced_script.md.CSAoGEHA.js @@ -0,0 +1,44 @@ +import{_ as a,c as s,a6 as e,o as d}from"./chunks/framework.B1keMFNq.js";const g=JSON.parse('{"title":"内置脚本语言","description":"","frontmatter":{"lang":"zh-cn","title":"内置脚本语言"},"headers":[],"relativePath":"advanced/script.md","filePath":"advanced/script.md","lastUpdated":1718023895000}'),n={name:"advanced/script.md"};function p(c,t,o,l,i,r){return d(),s("div",null,t[0]||(t[0]=[e(`

内置脚本语言

本节内容

本节将介绍海豹内置的脚本语言,请善用侧边栏和搜索,按需阅读文档。

为了在很多地方支持实现一些逻辑,但又不至于直接使用学习门槛较高的正式编程语言,海豹提供了一种简单易学的脚本语言,可以称为「海豹语」「豹语」等。

变量

你可能注意到,在自定义文案等地方,出现了一些以 $t 开头的东西,这些是海豹中的变量

变量的名称可以是汉字、字母和数字,$t 是一个特殊的变量前缀,还有其它的前缀。不同前缀代表不同的作用域:

变量名字用途举例
普通名字玩家的角色属性理智、力量、智力
$t开头个人临时变量,不存数据库$t随机点数
$m开头个人变量,跨群存在$m今日人品
$g开头群变量,群内所有人共享$g群主体重

所有变量均可以在 .rx / .rxh / .ra/ .text 等指令以及「自定义文案」中使用。

注意:$t 是临时变量

$t 开头的临时变量的存活周期仅为单次指令执行,执行完毕后不应当认为该变量值还保留

在下一次指令中使用上一次指令设置的 $t 变量属于未定义行为,可能会出现包括但不限于变量值不变,变量值丢失,变量值被覆盖,变量值变为随机数,变量值变成 114514 等任何情况。如果你需要这样的持久变量,请使用 $m$g 代替。

内置的 $t 变量的值固定并不代表它们是持久变量,其值是在每次指令执行的初始阶段设置的。

提示:变量不生效?

如果一部分变量无效,请检查海豹是否为最新版本。

一些内置变量

变量名内容示例结果
$t玩家当前人物卡的名字,如果不存在则为群昵称或 QQ 昵称。<木落>
$t玩家_RAW同上,但没有<>木落
$tQQ昵称QQ 昵称<木落>
$t账号ID海豹格式的 IDQQ:123456789
$t账号ID_RAW原始格式的 ID123456789
$tQQ海豹格式的 IDQQ:123456789
$t群名群名海豹核心·SealDice 用户群
$t群号海豹格式的 IDQQ-Group:987654321
$t群号_RAW原始格式的 ID987654321
$t个人骰子面数个人骰子面数100
$tDate数字格式的现日期20230109
$tYear数字格式的年份2023
$tMonth数字格式的现月份1
$tDay数字格式的现日期9
$tWeekday数字格式的星期(1-7)1
$tHour数字格式的现时间(小时)15
$tMinute数字格式的现时间(分钟)41
$tSecond数字格式的现时间(秒)55
$tTimestamp数字格式的 10 位时间戳1673250115
$t文本长度触发消息的文本,汉字长度为 3,英文字母和数字长度为 1。6
$t平台触发的平台QQ
$t游戏模式.set coc/dnd 改变coc7
$t消息类型触发位置为群还是私聊(group/private)group
娱乐:今日人品自定义文案<木落> 的今日人品为 0
常量:APPNAME软件名SealDice
常量:VERSION版本号1.4.0
$tMsgID消息 ID,仅自定义回复中可用。-123

所有自定义文案也均为可用变量。

数据类型和赋值

text
// 注意,目前并不支持写注释,此为教程中便于展示
+// 文本类型
+$t0 = '文本'
+$t0 = "也是文本"
+$t0 = \`特殊文本类型,可以插入表达式,例如,玩家的力量数值: {力量}\`
+$t0 = \`另一种插入表达式的写法 {% 力量 %} \`
+
+// 数字类型
+$t0 = 1
+
+// 布尔类型:没有专门的布尔类型,0 或空字符串被视为 False,非零和非空字符串为 True
+$t0 > 1
+$t0 >= 1
+$t0 == 1
+$t0 != 1
+$t0 < 1
+$t0 <= 1

注意:务必区分 ===

混淆 === 是小白常犯的错误之一。前者用于赋值而后者用于比较。当你试图在下文所述的条件算符或条件语句中,比较两个值时,需要使用 ==

语句

多个语句可以用 ; 分隔,取分隔后的最后一项的值,为整个表达式的值,例如:

text
$t0 = 1;2;3

此时 $t0 的值为 3。

注意:分号的使用

不要在最后一条语句的后面再使用分号,会变得不幸。

text
// 正确写法
+if 1 {
+    $t0 = 1;
+    $t1 = 2
+}
+
+// 错误写法
+if 1 {
+    $t0 = 1;
+    $t1 = 2;
+}

运算符

数学运算

text
加减乘除余 + - * / %
+乘方 ^ ** // 2 ** 3 或 2 ^ 3,即 2 的 3 次方

逻辑运算

text
&& 逻辑与
+|| 逻辑或
+!  逻辑非

骰子算符

d 常规骰子算符,用法举例 d20 2d20k1 d20 优势

f 命运骰,随机骰 4 次,每骰结果可能是 -1 0 1,记为 - 0 +。

b 奖励骰 (CoC)。

p 惩罚骰 (CoC)。

c 双十字。

条件算符

条件算符 ?

text
灵视 >= 40 ? '如果灵视达到40以上,你就能看到这句话'

可以用这个指令测试,下同:

text
.st 灵视 41
+.text {灵视 >= 40 ? '如果灵视达到 40 以上,你就能看到这句话'}

多重条件算符 ? ,

text
灵视 >= 80 ? '看得很清楚吗?',
+灵视 >= 50 ? '不错,再靠近一点……',
+灵视 >= 30 ? '仔细听……',
+灵视 >= 0 ? '呵,无知之人。'

应用举例,默认的 jrrp

text
{$t玩家} 今日人品为{$t人品},{%
+    $t人品 > 95 ? '人品爆表!',
+    $t人品 > 80 ? '运气还不错!',
+    $t人品 > 50 ? '人品还行吧',
+    $t人品 > 10 ? '今天不太行',
+    1 ? '流年不利啊!'
+%}

三目运算符 ? :

text
灵视 >= 40 ? '如果灵视达到 40 以上,你就能看到这句话' : '无知亦是幸运'

条件语句

text
if $t0 > 10 {
+    $t1 = "aaa"
+} else {
+    $t1 = 'bbb'
+}

提示:出现格式化错误

如果上面的代码输出「格式化错误」,那是因为你的 $t0 不是数值。字符串当然不能和数值比较大小,所以会报错。

解决方法:.text {$t0=0}

实际测试:

text
.text {% if $t0 > 10 { $t1="aaa"} else { $t1 = 'bbb' }; $t1 %}
`,46)]))}const b=a(n,[["render",p]]);export{g as __pageData,b as default}; diff --git a/assets/advanced_script.md.CSAoGEHA.lean.js b/assets/advanced_script.md.CSAoGEHA.lean.js new file mode 100644 index 000000000..6c63e1f37 --- /dev/null +++ b/assets/advanced_script.md.CSAoGEHA.lean.js @@ -0,0 +1,44 @@ +import{_ as a,c as s,a6 as e,o as d}from"./chunks/framework.B1keMFNq.js";const g=JSON.parse('{"title":"内置脚本语言","description":"","frontmatter":{"lang":"zh-cn","title":"内置脚本语言"},"headers":[],"relativePath":"advanced/script.md","filePath":"advanced/script.md","lastUpdated":1718023895000}'),n={name:"advanced/script.md"};function p(c,t,o,l,i,r){return d(),s("div",null,t[0]||(t[0]=[e(`

内置脚本语言

本节内容

本节将介绍海豹内置的脚本语言,请善用侧边栏和搜索,按需阅读文档。

为了在很多地方支持实现一些逻辑,但又不至于直接使用学习门槛较高的正式编程语言,海豹提供了一种简单易学的脚本语言,可以称为「海豹语」「豹语」等。

变量

你可能注意到,在自定义文案等地方,出现了一些以 $t 开头的东西,这些是海豹中的变量

变量的名称可以是汉字、字母和数字,$t 是一个特殊的变量前缀,还有其它的前缀。不同前缀代表不同的作用域:

变量名字用途举例
普通名字玩家的角色属性理智、力量、智力
$t开头个人临时变量,不存数据库$t随机点数
$m开头个人变量,跨群存在$m今日人品
$g开头群变量,群内所有人共享$g群主体重

所有变量均可以在 .rx / .rxh / .ra/ .text 等指令以及「自定义文案」中使用。

注意:$t 是临时变量

$t 开头的临时变量的存活周期仅为单次指令执行,执行完毕后不应当认为该变量值还保留

在下一次指令中使用上一次指令设置的 $t 变量属于未定义行为,可能会出现包括但不限于变量值不变,变量值丢失,变量值被覆盖,变量值变为随机数,变量值变成 114514 等任何情况。如果你需要这样的持久变量,请使用 $m$g 代替。

内置的 $t 变量的值固定并不代表它们是持久变量,其值是在每次指令执行的初始阶段设置的。

提示:变量不生效?

如果一部分变量无效,请检查海豹是否为最新版本。

一些内置变量

变量名内容示例结果
$t玩家当前人物卡的名字,如果不存在则为群昵称或 QQ 昵称。<木落>
$t玩家_RAW同上,但没有<>木落
$tQQ昵称QQ 昵称<木落>
$t账号ID海豹格式的 IDQQ:123456789
$t账号ID_RAW原始格式的 ID123456789
$tQQ海豹格式的 IDQQ:123456789
$t群名群名海豹核心·SealDice 用户群
$t群号海豹格式的 IDQQ-Group:987654321
$t群号_RAW原始格式的 ID987654321
$t个人骰子面数个人骰子面数100
$tDate数字格式的现日期20230109
$tYear数字格式的年份2023
$tMonth数字格式的现月份1
$tDay数字格式的现日期9
$tWeekday数字格式的星期(1-7)1
$tHour数字格式的现时间(小时)15
$tMinute数字格式的现时间(分钟)41
$tSecond数字格式的现时间(秒)55
$tTimestamp数字格式的 10 位时间戳1673250115
$t文本长度触发消息的文本,汉字长度为 3,英文字母和数字长度为 1。6
$t平台触发的平台QQ
$t游戏模式.set coc/dnd 改变coc7
$t消息类型触发位置为群还是私聊(group/private)group
娱乐:今日人品自定义文案<木落> 的今日人品为 0
常量:APPNAME软件名SealDice
常量:VERSION版本号1.4.0
$tMsgID消息 ID,仅自定义回复中可用。-123

所有自定义文案也均为可用变量。

数据类型和赋值

text
// 注意,目前并不支持写注释,此为教程中便于展示
+// 文本类型
+$t0 = '文本'
+$t0 = "也是文本"
+$t0 = \`特殊文本类型,可以插入表达式,例如,玩家的力量数值: {力量}\`
+$t0 = \`另一种插入表达式的写法 {% 力量 %} \`
+
+// 数字类型
+$t0 = 1
+
+// 布尔类型:没有专门的布尔类型,0 或空字符串被视为 False,非零和非空字符串为 True
+$t0 > 1
+$t0 >= 1
+$t0 == 1
+$t0 != 1
+$t0 < 1
+$t0 <= 1

注意:务必区分 ===

混淆 === 是小白常犯的错误之一。前者用于赋值而后者用于比较。当你试图在下文所述的条件算符或条件语句中,比较两个值时,需要使用 ==

语句

多个语句可以用 ; 分隔,取分隔后的最后一项的值,为整个表达式的值,例如:

text
$t0 = 1;2;3

此时 $t0 的值为 3。

注意:分号的使用

不要在最后一条语句的后面再使用分号,会变得不幸。

text
// 正确写法
+if 1 {
+    $t0 = 1;
+    $t1 = 2
+}
+
+// 错误写法
+if 1 {
+    $t0 = 1;
+    $t1 = 2;
+}

运算符

数学运算

text
加减乘除余 + - * / %
+乘方 ^ ** // 2 ** 3 或 2 ^ 3,即 2 的 3 次方

逻辑运算

text
&& 逻辑与
+|| 逻辑或
+!  逻辑非

骰子算符

d 常规骰子算符,用法举例 d20 2d20k1 d20 优势

f 命运骰,随机骰 4 次,每骰结果可能是 -1 0 1,记为 - 0 +。

b 奖励骰 (CoC)。

p 惩罚骰 (CoC)。

c 双十字。

条件算符

条件算符 ?

text
灵视 >= 40 ? '如果灵视达到40以上,你就能看到这句话'

可以用这个指令测试,下同:

text
.st 灵视 41
+.text {灵视 >= 40 ? '如果灵视达到 40 以上,你就能看到这句话'}

多重条件算符 ? ,

text
灵视 >= 80 ? '看得很清楚吗?',
+灵视 >= 50 ? '不错,再靠近一点……',
+灵视 >= 30 ? '仔细听……',
+灵视 >= 0 ? '呵,无知之人。'

应用举例,默认的 jrrp

text
{$t玩家} 今日人品为{$t人品},{%
+    $t人品 > 95 ? '人品爆表!',
+    $t人品 > 80 ? '运气还不错!',
+    $t人品 > 50 ? '人品还行吧',
+    $t人品 > 10 ? '今天不太行',
+    1 ? '流年不利啊!'
+%}

三目运算符 ? :

text
灵视 >= 40 ? '如果灵视达到 40 以上,你就能看到这句话' : '无知亦是幸运'

条件语句

text
if $t0 > 10 {
+    $t1 = "aaa"
+} else {
+    $t1 = 'bbb'
+}

提示:出现格式化错误

如果上面的代码输出「格式化错误」,那是因为你的 $t0 不是数值。字符串当然不能和数值比较大小,所以会报错。

解决方法:.text {$t0=0}

实际测试:

text
.text {% if $t0 > 10 { $t1="aaa"} else { $t1 = 'bbb' }; $t1 %}
`,46)]))}const b=a(n,[["render",p]]);export{g as __pageData,b as default}; diff --git a/assets/android_np_manager.FuLqh54f.jpg b/assets/android_np_manager.FuLqh54f.jpg new file mode 100644 index 000000000..a0025c409 Binary files /dev/null and b/assets/android_np_manager.FuLqh54f.jpg differ diff --git a/assets/android_sealdice_port.CCn6iS6b.jpg b/assets/android_sealdice_port.CCn6iS6b.jpg new file mode 100644 index 000000000..e78a13185 Binary files /dev/null and b/assets/android_sealdice_port.CCn6iS6b.jpg differ diff --git a/assets/app.D0Wo8w0i.js b/assets/app.D0Wo8w0i.js new file mode 100644 index 000000000..8dd115ba7 --- /dev/null +++ b/assets/app.D0Wo8w0i.js @@ -0,0 +1,189 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/chunks/dagre-SWNTG5WE.CzdbX6ge.js","assets/chunks/graph.Bl1hHz-h.js","assets/chunks/baseUniq.DoVpE4hx.js","assets/chunks/layout.BQOWCxFK.js","assets/chunks/basePickBy.BafM5tVf.js","assets/chunks/clone.CgQKvgpz.js","assets/chunks/framework.B1keMFNq.js","assets/chunks/theme.8WvZWF-M.js","assets/chunks/c4Diagram-GPMAACGM.CNlRe1Ho.js","assets/chunks/chunk-VCFP4HPQ.DyTG-ln4.js","assets/chunks/flowDiagram-TSWR6T2D.DT_kmiql.js","assets/chunks/chunk-EICJXIV7.Cx-DrDyu.js","assets/chunks/channel.DuUz04Yy.js","assets/chunks/erDiagram-WO52GFNT.BtSPEK0o.js","assets/chunks/gitGraphDiagram-5C7YHVU6.u_0S5-QH.js","assets/chunks/chunk-BAOP5US2.FIn-rUo8.js","assets/chunks/chunk-RGXPSUNZ.e_30X0ct.js","assets/chunks/gitGraph-YCYPL57B.CgYFJ7dL.js","assets/chunks/ganttDiagram-FAOCOTIY.DpN8cieg.js","assets/chunks/linear.QGmzl4if.js","assets/chunks/init.Gi6I4Gst.js","assets/chunks/infoDiagram-P5D6MX3V.DP1qtp8R.js","assets/chunks/pieDiagram-BLWKPB35.DfxLKqjS.js","assets/chunks/arc.DjT8Zpi0.js","assets/chunks/ordinal.BYWQX77i.js","assets/chunks/quadrantDiagram-QXWEEFXS.CKQNlX2Z.js","assets/chunks/xychartDiagram-MYLB5AYS.BVZhzQBy.js","assets/chunks/requirementDiagram-XAUNFCZY.DQkbBFDI.js","assets/chunks/sequenceDiagram-D25TJ2OB.CrCvzD1l.js","assets/chunks/classDiagram-FEGYTUDG.x7pZn-YP.js","assets/chunks/chunk-CXDZ2C6O.BtvA2Emb.js","assets/chunks/classDiagram-v2-R65JCUOM.x7pZn-YP.js","assets/chunks/stateDiagram-GNSP7T6Y.DgWAPd02.js","assets/chunks/chunk-JZAHL7AJ.Ca2Vb27U.js","assets/chunks/stateDiagram-v2-HP6YRVRG.CIXWXK7i.js","assets/chunks/journeyDiagram-UIGPPNLY.DUlHwSYt.js","assets/chunks/timeline-definition-27KQCCZ3.HS8QNxBM.js","assets/chunks/mindmap-definition-R7LC4OIY.CO700ovJ.js","assets/chunks/cytoscape.esm.YXkLVt_w.js","assets/chunks/kanban-definition-KMT3NSR2.DtNpbUem.js","assets/chunks/sankeyDiagram-LVV36NHA.GcX7eeA_.js","assets/chunks/diagram-NZMEDLQF.9HaKjoSn.js","assets/chunks/blockDiagram-XN6IQ5JY.CLI-ylQg.js","assets/chunks/architectureDiagram-AYX4OTIS.DY00DwfI.js"])))=>i.map(i=>d[i]); +var Bm=Object.defineProperty;var El=e=>{throw TypeError(e)};var Mm=(e,t,r)=>t in e?Bm(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var gt=(e,t,r)=>Mm(e,typeof t!="symbol"?t+"":t,r),Em=(e,t,r)=>t.has(e)||El("Cannot "+r);var Fl=(e,t,r)=>t.has(e)?El("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,r);var si=(e,t,r)=>(Em(e,t,"access private method"),r);import{V as ft,p as $l,u as hh,ar as Fm,v as uh,x as $m,o as Dm,c as Rm,n as Om,R as ds,as as Im,at as Pm,au as Nm,ao as zm,av as qm,aw as Wm,ax as Hm,ay as jm,az as Um,ap as Ym,d as Gm,s as Vm,aA as Xm,aB as Zm,aC as Km,a5 as Qm}from"./chunks/framework.B1keMFNq.js";import{R as Jm}from"./chunks/theme.8WvZWF-M.js";var t0=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function e0(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var fh={exports:{}};(function(e,t){(function(r,i){e.exports=i()})(t0,function(){var r=1e3,i=6e4,n=36e5,a="millisecond",o="second",s="minute",l="hour",c="day",h="week",u="month",f="quarter",p="year",g="date",m="Invalid Date",y=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,x=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,b={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(B){var A=["th","st","nd","rd"],S=B%100;return"["+B+(A[(S-20)%10]||A[S]||A[0])+"]"}},_=function(B,A,S){var F=String(B);return!F||F.length>=A?B:""+Array(A+1-F.length).join(S)+B},v={s:_,z:function(B){var A=-B.utcOffset(),S=Math.abs(A),F=Math.floor(S/60),T=S%60;return(A<=0?"+":"-")+_(F,2,"0")+":"+_(T,2,"0")},m:function B(A,S){if(A.date()1)return B(Y[0])}else{var J=A.name;M[J]=A,T=J}return!F&&T&&(k=T),T||!F&&k},R=function(B,A){if(O(B))return B.clone();var S=typeof A=="object"?A:{};return S.date=B,S.args=arguments,new q(S)},E=v;E.l=N,E.i=O,E.w=function(B,A){return R(B,{locale:A.$L,utc:A.$u,x:A.$x,$offset:A.$offset})};var q=function(){function B(S){this.$L=N(S.locale,null,!0),this.parse(S),this.$x=this.$x||S.x||{},this[L]=!0}var A=B.prototype;return A.parse=function(S){this.$d=function(F){var T=F.date,z=F.utc;if(T===null)return new Date(NaN);if(E.u(T))return new Date;if(T instanceof Date)return new Date(T);if(typeof T=="string"&&!/Z$/i.test(T)){var Y=T.match(y);if(Y){var J=Y[2]-1||0,pt=(Y[7]||"0").substring(0,3);return z?new Date(Date.UTC(Y[1],J,Y[3]||1,Y[4]||0,Y[5]||0,Y[6]||0,pt)):new Date(Y[1],J,Y[3]||1,Y[4]||0,Y[5]||0,Y[6]||0,pt)}}return new Date(T)}(S),this.init()},A.init=function(){var S=this.$d;this.$y=S.getFullYear(),this.$M=S.getMonth(),this.$D=S.getDate(),this.$W=S.getDay(),this.$H=S.getHours(),this.$m=S.getMinutes(),this.$s=S.getSeconds(),this.$ms=S.getMilliseconds()},A.$utils=function(){return E},A.isValid=function(){return this.$d.toString()!==m},A.isSame=function(S,F){var T=R(S);return this.startOf(F)<=T&&T<=this.endOf(F)},A.isAfter=function(S,F){return R(S)e>=255?255:e<0?0:e,g:e=>e>=255?255:e<0?0:e,b:e=>e>=255?255:e<0?0:e,h:e=>e%360,s:e=>e>=100?100:e<0?0:e,l:e=>e>=100?100:e<0?0:e,a:e=>e>=1?1:e<0?0:e},toLinear:e=>{const t=e/255;return e>.03928?Math.pow((t+.055)/1.055,2.4):t/12.92},hue2rgb:(e,t,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<1/6?e+(t-e)*6*r:r<1/2?t:r<2/3?e+(t-e)*(2/3-r)*6:e),hsl2rgb:({h:e,s:t,l:r},i)=>{if(!t)return r*2.55;e/=360,t/=100,r/=100;const n=r<.5?r*(1+t):r+t-r*t,a=2*r-n;switch(i){case"r":return bn.hue2rgb(a,n,e+1/3)*255;case"g":return bn.hue2rgb(a,n,e)*255;case"b":return bn.hue2rgb(a,n,e-1/3)*255}},rgb2hsl:({r:e,g:t,b:r},i)=>{e/=255,t/=255,r/=255;const n=Math.max(e,t,r),a=Math.min(e,t,r),o=(n+a)/2;if(i==="l")return o*100;if(n===a)return 0;const s=n-a,l=o>.5?s/(2-n-a):s/(n+a);if(i==="s")return l*100;switch(n){case e:return((t-r)/s+(tt>r?Math.min(t,Math.max(r,e)):Math.min(r,Math.max(t,e)),round:e=>Math.round(e*1e10)/1e10},a0={dec2hex:e=>{const t=Math.round(e).toString(16);return t.length>1?t:`0${t}`}},et={channel:bn,lang:n0,unit:a0},Ne={};for(let e=0;e<=255;e++)Ne[e]=et.unit.dec2hex(e);const Et={ALL:0,RGB:1,HSL:2};class s0{constructor(){this.type=Et.ALL}get(){return this.type}set(t){if(this.type&&this.type!==t)throw new Error("Cannot change both RGB and HSL channels at the same time");this.type=t}reset(){this.type=Et.ALL}is(t){return this.type===t}}class o0{constructor(t,r){this.color=r,this.changed=!1,this.data=t,this.type=new s0}set(t,r){return this.color=r,this.changed=!1,this.data=t,this.type.type=Et.ALL,this}_ensureHSL(){const t=this.data,{h:r,s:i,l:n}=t;r===void 0&&(t.h=et.channel.rgb2hsl(t,"h")),i===void 0&&(t.s=et.channel.rgb2hsl(t,"s")),n===void 0&&(t.l=et.channel.rgb2hsl(t,"l"))}_ensureRGB(){const t=this.data,{r,g:i,b:n}=t;r===void 0&&(t.r=et.channel.hsl2rgb(t,"r")),i===void 0&&(t.g=et.channel.hsl2rgb(t,"g")),n===void 0&&(t.b=et.channel.hsl2rgb(t,"b"))}get r(){const t=this.data,r=t.r;return!this.type.is(Et.HSL)&&r!==void 0?r:(this._ensureHSL(),et.channel.hsl2rgb(t,"r"))}get g(){const t=this.data,r=t.g;return!this.type.is(Et.HSL)&&r!==void 0?r:(this._ensureHSL(),et.channel.hsl2rgb(t,"g"))}get b(){const t=this.data,r=t.b;return!this.type.is(Et.HSL)&&r!==void 0?r:(this._ensureHSL(),et.channel.hsl2rgb(t,"b"))}get h(){const t=this.data,r=t.h;return!this.type.is(Et.RGB)&&r!==void 0?r:(this._ensureRGB(),et.channel.rgb2hsl(t,"h"))}get s(){const t=this.data,r=t.s;return!this.type.is(Et.RGB)&&r!==void 0?r:(this._ensureRGB(),et.channel.rgb2hsl(t,"s"))}get l(){const t=this.data,r=t.l;return!this.type.is(Et.RGB)&&r!==void 0?r:(this._ensureRGB(),et.channel.rgb2hsl(t,"l"))}get a(){return this.data.a}set r(t){this.type.set(Et.RGB),this.changed=!0,this.data.r=t}set g(t){this.type.set(Et.RGB),this.changed=!0,this.data.g=t}set b(t){this.type.set(Et.RGB),this.changed=!0,this.data.b=t}set h(t){this.type.set(Et.HSL),this.changed=!0,this.data.h=t}set s(t){this.type.set(Et.HSL),this.changed=!0,this.data.s=t}set l(t){this.type.set(Et.HSL),this.changed=!0,this.data.l=t}set a(t){this.changed=!0,this.data.a=t}}const pa=new o0({r:0,g:0,b:0,a:0},"transparent"),Tr={re:/^#((?:[a-f0-9]{2}){2,4}|[a-f0-9]{3})$/i,parse:e=>{if(e.charCodeAt(0)!==35)return;const t=e.match(Tr.re);if(!t)return;const r=t[1],i=parseInt(r,16),n=r.length,a=n%4===0,o=n>4,s=o?1:17,l=o?8:4,c=a?0:-1,h=o?255:15;return pa.set({r:(i>>l*(c+3)&h)*s,g:(i>>l*(c+2)&h)*s,b:(i>>l*(c+1)&h)*s,a:a?(i&h)*s/255:1},e)},stringify:e=>{const{r:t,g:r,b:i,a:n}=e;return n<1?`#${Ne[Math.round(t)]}${Ne[Math.round(r)]}${Ne[Math.round(i)]}${Ne[Math.round(n*255)]}`:`#${Ne[Math.round(t)]}${Ne[Math.round(r)]}${Ne[Math.round(i)]}`}},tr={re:/^hsla?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(?:deg|grad|rad|turn)?)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(%)?))?\s*?\)$/i,hueRe:/^(.+?)(deg|grad|rad|turn)$/i,_hue2deg:e=>{const t=e.match(tr.hueRe);if(t){const[,r,i]=t;switch(i){case"grad":return et.channel.clamp.h(parseFloat(r)*.9);case"rad":return et.channel.clamp.h(parseFloat(r)*180/Math.PI);case"turn":return et.channel.clamp.h(parseFloat(r)*360)}}return et.channel.clamp.h(parseFloat(e))},parse:e=>{const t=e.charCodeAt(0);if(t!==104&&t!==72)return;const r=e.match(tr.re);if(!r)return;const[,i,n,a,o,s]=r;return pa.set({h:tr._hue2deg(i),s:et.channel.clamp.s(parseFloat(n)),l:et.channel.clamp.l(parseFloat(a)),a:o?et.channel.clamp.a(s?parseFloat(o)/100:parseFloat(o)):1},e)},stringify:e=>{const{h:t,s:r,l:i,a:n}=e;return n<1?`hsla(${et.lang.round(t)}, ${et.lang.round(r)}%, ${et.lang.round(i)}%, ${n})`:`hsl(${et.lang.round(t)}, ${et.lang.round(r)}%, ${et.lang.round(i)}%)`}},Ti={colors:{aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyanaqua:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",transparent:"#00000000",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},parse:e=>{e=e.toLowerCase();const t=Ti.colors[e];if(t)return Tr.parse(t)},stringify:e=>{const t=Tr.stringify(e);for(const r in Ti.colors)if(Ti.colors[r]===t)return r}},bi={re:/^rgba?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?)))?\s*?\)$/i,parse:e=>{const t=e.charCodeAt(0);if(t!==114&&t!==82)return;const r=e.match(bi.re);if(!r)return;const[,i,n,a,o,s,l,c,h]=r;return pa.set({r:et.channel.clamp.r(n?parseFloat(i)*2.55:parseFloat(i)),g:et.channel.clamp.g(o?parseFloat(a)*2.55:parseFloat(a)),b:et.channel.clamp.b(l?parseFloat(s)*2.55:parseFloat(s)),a:c?et.channel.clamp.a(h?parseFloat(c)/100:parseFloat(c)):1},e)},stringify:e=>{const{r:t,g:r,b:i,a:n}=e;return n<1?`rgba(${et.lang.round(t)}, ${et.lang.round(r)}, ${et.lang.round(i)}, ${et.lang.round(n)})`:`rgb(${et.lang.round(t)}, ${et.lang.round(r)}, ${et.lang.round(i)})`}},be={format:{keyword:Ti,hex:Tr,rgb:bi,rgba:bi,hsl:tr,hsla:tr},parse:e=>{if(typeof e!="string")return e;const t=Tr.parse(e)||bi.parse(e)||tr.parse(e)||Ti.parse(e);if(t)return t;throw new Error(`Unsupported color format: "${e}"`)},stringify:e=>!e.changed&&e.color?e.color:e.type.is(Et.HSL)||e.data.r===void 0?tr.stringify(e):e.a<1||!Number.isInteger(e.r)||!Number.isInteger(e.g)||!Number.isInteger(e.b)?bi.stringify(e):Tr.stringify(e)},ph=(e,t)=>{const r=be.parse(e);for(const i in t)r[i]=et.channel.clamp[i](t[i]);return be.stringify(r)},Li=(e,t,r=0,i=1)=>{if(typeof e!="number")return ph(e,{a:t});const n=pa.set({r:et.channel.clamp.r(e),g:et.channel.clamp.g(t),b:et.channel.clamp.b(r),a:et.channel.clamp.a(i)});return be.stringify(n)},l0=e=>{const{r:t,g:r,b:i}=be.parse(e),n=.2126*et.channel.toLinear(t)+.7152*et.channel.toLinear(r)+.0722*et.channel.toLinear(i);return et.lang.round(n)},c0=e=>l0(e)>=.5,Yi=e=>!c0(e),dh=(e,t,r)=>{const i=be.parse(e),n=i[t],a=et.channel.clamp[t](n+r);return n!==a&&(i[t]=a),be.stringify(i)},X=(e,t)=>dh(e,"l",t),Q=(e,t)=>dh(e,"l",-t),w=(e,t)=>{const r=be.parse(e),i={};for(const n in t)t[n]&&(i[n]=r[n]+t[n]);return ph(e,i)},h0=(e,t,r=50)=>{const{r:i,g:n,b:a,a:o}=be.parse(e),{r:s,g:l,b:c,a:h}=be.parse(t),u=r/100,f=u*2-1,p=o-h,m=((f*p===-1?f:(f+p)/(1+f*p))+1)/2,y=1-m,x=i*m+s*y,b=n*m+l*y,_=a*m+c*y,v=o*u+h*(1-u);return Li(x,b,_,v)},P=(e,t=100)=>{const r=be.parse(e);return r.r=255-r.r,r.g=255-r.g,r.b=255-r.b,h0(r,e,t)};/*! @license DOMPurify 3.1.6 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.1.6/LICENSE */const{entries:gh,setPrototypeOf:Dl,isFrozen:u0,getPrototypeOf:f0,getOwnPropertyDescriptor:p0}=Object;let{freeze:zt,seal:ee,create:mh}=Object,{apply:gs,construct:ms}=typeof Reflect<"u"&&Reflect;zt||(zt=function(t){return t});ee||(ee=function(t){return t});gs||(gs=function(t,r,i){return t.apply(r,i)});ms||(ms=function(t,r){return new t(...r)});const ln=Xt(Array.prototype.forEach),Rl=Xt(Array.prototype.pop),oi=Xt(Array.prototype.push),_n=Xt(String.prototype.toLowerCase),Ga=Xt(String.prototype.toString),Ol=Xt(String.prototype.match),li=Xt(String.prototype.replace),d0=Xt(String.prototype.indexOf),g0=Xt(String.prototype.trim),se=Xt(Object.prototype.hasOwnProperty),Ot=Xt(RegExp.prototype.test),ci=m0(TypeError);function Xt(e){return function(t){for(var r=arguments.length,i=new Array(r>1?r-1:0),n=1;n2&&arguments[2]!==void 0?arguments[2]:_n;Dl&&Dl(e,null);let i=t.length;for(;i--;){let n=t[i];if(typeof n=="string"){const a=r(n);a!==n&&(u0(t)||(t[i]=a),n=a)}e[n]=!0}return e}function y0(e){for(let t=0;t/gm),w0=ee(/\${[\w\W]*}/gm),v0=ee(/^data-[\-\w.\u00B7-\uFFFF]/),k0=ee(/^aria-[\-\w]+$/),yh=ee(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),S0=ee(/^(?:\w+script|data):/i),T0=ee(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),xh=ee(/^html$/i),L0=ee(/^[a-z][.\w]*(-[.\w]+)+$/i);var ql=Object.freeze({__proto__:null,MUSTACHE_EXPR:_0,ERB_EXPR:C0,TMPLIT_EXPR:w0,DATA_ATTR:v0,ARIA_ATTR:k0,IS_ALLOWED_URI:yh,IS_SCRIPT_OR_DATA:S0,ATTR_WHITESPACE:T0,DOCTYPE_NAME:xh,CUSTOM_ELEMENT:L0});const ui={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,progressingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},A0=function(){return typeof window>"u"?null:window},B0=function(t,r){if(typeof t!="object"||typeof t.createPolicy!="function")return null;let i=null;const n="data-tt-policy-suffix";r&&r.hasAttribute(n)&&(i=r.getAttribute(n));const a="dompurify"+(i?"#"+i:"");try{return t.createPolicy(a,{createHTML(o){return o},createScriptURL(o){return o}})}catch{return console.warn("TrustedTypes policy "+a+" could not be created."),null}};function bh(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:A0();const t=V=>bh(V);if(t.version="3.1.6",t.removed=[],!e||!e.document||e.document.nodeType!==ui.document)return t.isSupported=!1,t;let{document:r}=e;const i=r,n=i.currentScript,{DocumentFragment:a,HTMLTemplateElement:o,Node:s,Element:l,NodeFilter:c,NamedNodeMap:h=e.NamedNodeMap||e.MozNamedAttrMap,HTMLFormElement:u,DOMParser:f,trustedTypes:p}=e,g=l.prototype,m=hi(g,"cloneNode"),y=hi(g,"remove"),x=hi(g,"nextSibling"),b=hi(g,"childNodes"),_=hi(g,"parentNode");if(typeof o=="function"){const V=r.createElement("template");V.content&&V.content.ownerDocument&&(r=V.content.ownerDocument)}let v,k="";const{implementation:M,createNodeIterator:L,createDocumentFragment:O,getElementsByTagName:N}=r,{importNode:R}=i;let E={};t.isSupported=typeof gh=="function"&&typeof _=="function"&&M&&M.createHTMLDocument!==void 0;const{MUSTACHE_EXPR:q,ERB_EXPR:I,TMPLIT_EXPR:B,DATA_ATTR:A,ARIA_ATTR:S,IS_SCRIPT_OR_DATA:F,ATTR_WHITESPACE:T,CUSTOM_ELEMENT:z}=ql;let{IS_ALLOWED_URI:Y}=ql,J=null;const pt=at({},[...Il,...Va,...Xa,...Za,...Pl]);let nt=null;const _t=at({},[...Nl,...Ka,...zl,...cn]);let st=Object.seal(mh(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),Kt=null,ie=null,Oe=!0,ne=!0,kt=!1,ae=!0,Qt=!1,Ie=!0,Ve=!1,za=!1,qa=!1,yr=!1,rn=!1,nn=!1,hl=!0,ul=!1;const Cm="user-content-";let Wa=!0,ii=!1,xr={},br=null;const fl=at({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let pl=null;const dl=at({},["audio","video","img","source","image","track"]);let Ha=null;const gl=at({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),an="http://www.w3.org/1998/Math/MathML",sn="http://www.w3.org/2000/svg",ve="http://www.w3.org/1999/xhtml";let _r=ve,ja=!1,Ua=null;const wm=at({},[an,sn,ve],Ga);let ni=null;const vm=["application/xhtml+xml","text/html"],km="text/html";let wt=null,Cr=null;const Sm=r.createElement("form"),ml=function(C){return C instanceof RegExp||C instanceof Function},Ya=function(){let C=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(!(Cr&&Cr===C)){if((!C||typeof C!="object")&&(C={}),C=Ze(C),ni=vm.indexOf(C.PARSER_MEDIA_TYPE)===-1?km:C.PARSER_MEDIA_TYPE,wt=ni==="application/xhtml+xml"?Ga:_n,J=se(C,"ALLOWED_TAGS")?at({},C.ALLOWED_TAGS,wt):pt,nt=se(C,"ALLOWED_ATTR")?at({},C.ALLOWED_ATTR,wt):_t,Ua=se(C,"ALLOWED_NAMESPACES")?at({},C.ALLOWED_NAMESPACES,Ga):wm,Ha=se(C,"ADD_URI_SAFE_ATTR")?at(Ze(gl),C.ADD_URI_SAFE_ATTR,wt):gl,pl=se(C,"ADD_DATA_URI_TAGS")?at(Ze(dl),C.ADD_DATA_URI_TAGS,wt):dl,br=se(C,"FORBID_CONTENTS")?at({},C.FORBID_CONTENTS,wt):fl,Kt=se(C,"FORBID_TAGS")?at({},C.FORBID_TAGS,wt):{},ie=se(C,"FORBID_ATTR")?at({},C.FORBID_ATTR,wt):{},xr=se(C,"USE_PROFILES")?C.USE_PROFILES:!1,Oe=C.ALLOW_ARIA_ATTR!==!1,ne=C.ALLOW_DATA_ATTR!==!1,kt=C.ALLOW_UNKNOWN_PROTOCOLS||!1,ae=C.ALLOW_SELF_CLOSE_IN_ATTR!==!1,Qt=C.SAFE_FOR_TEMPLATES||!1,Ie=C.SAFE_FOR_XML!==!1,Ve=C.WHOLE_DOCUMENT||!1,yr=C.RETURN_DOM||!1,rn=C.RETURN_DOM_FRAGMENT||!1,nn=C.RETURN_TRUSTED_TYPE||!1,qa=C.FORCE_BODY||!1,hl=C.SANITIZE_DOM!==!1,ul=C.SANITIZE_NAMED_PROPS||!1,Wa=C.KEEP_CONTENT!==!1,ii=C.IN_PLACE||!1,Y=C.ALLOWED_URI_REGEXP||yh,_r=C.NAMESPACE||ve,st=C.CUSTOM_ELEMENT_HANDLING||{},C.CUSTOM_ELEMENT_HANDLING&&ml(C.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(st.tagNameCheck=C.CUSTOM_ELEMENT_HANDLING.tagNameCheck),C.CUSTOM_ELEMENT_HANDLING&&ml(C.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(st.attributeNameCheck=C.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),C.CUSTOM_ELEMENT_HANDLING&&typeof C.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&(st.allowCustomizedBuiltInElements=C.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),Qt&&(ne=!1),rn&&(yr=!0),xr&&(J=at({},Pl),nt=[],xr.html===!0&&(at(J,Il),at(nt,Nl)),xr.svg===!0&&(at(J,Va),at(nt,Ka),at(nt,cn)),xr.svgFilters===!0&&(at(J,Xa),at(nt,Ka),at(nt,cn)),xr.mathMl===!0&&(at(J,Za),at(nt,zl),at(nt,cn))),C.ADD_TAGS&&(J===pt&&(J=Ze(J)),at(J,C.ADD_TAGS,wt)),C.ADD_ATTR&&(nt===_t&&(nt=Ze(nt)),at(nt,C.ADD_ATTR,wt)),C.ADD_URI_SAFE_ATTR&&at(Ha,C.ADD_URI_SAFE_ATTR,wt),C.FORBID_CONTENTS&&(br===fl&&(br=Ze(br)),at(br,C.FORBID_CONTENTS,wt)),Wa&&(J["#text"]=!0),Ve&&at(J,["html","head","body"]),J.table&&(at(J,["tbody"]),delete Kt.tbody),C.TRUSTED_TYPES_POLICY){if(typeof C.TRUSTED_TYPES_POLICY.createHTML!="function")throw ci('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof C.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw ci('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');v=C.TRUSTED_TYPES_POLICY,k=v.createHTML("")}else v===void 0&&(v=B0(p,n)),v!==null&&typeof k=="string"&&(k=v.createHTML(""));zt&&zt(C),Cr=C}},yl=at({},["mi","mo","mn","ms","mtext"]),xl=at({},["foreignobject","annotation-xml"]),Tm=at({},["title","style","font","a","script"]),bl=at({},[...Va,...Xa,...x0]),_l=at({},[...Za,...b0]),Lm=function(C){let D=_(C);(!D||!D.tagName)&&(D={namespaceURI:_r,tagName:"template"});const H=_n(C.tagName),dt=_n(D.tagName);return Ua[C.namespaceURI]?C.namespaceURI===sn?D.namespaceURI===ve?H==="svg":D.namespaceURI===an?H==="svg"&&(dt==="annotation-xml"||yl[dt]):!!bl[H]:C.namespaceURI===an?D.namespaceURI===ve?H==="math":D.namespaceURI===sn?H==="math"&&xl[dt]:!!_l[H]:C.namespaceURI===ve?D.namespaceURI===sn&&!xl[dt]||D.namespaceURI===an&&!yl[dt]?!1:!_l[H]&&(Tm[H]||!bl[H]):!!(ni==="application/xhtml+xml"&&Ua[C.namespaceURI]):!1},fe=function(C){oi(t.removed,{element:C});try{_(C).removeChild(C)}catch{y(C)}},on=function(C,D){try{oi(t.removed,{attribute:D.getAttributeNode(C),from:D})}catch{oi(t.removed,{attribute:null,from:D})}if(D.removeAttribute(C),C==="is"&&!nt[C])if(yr||rn)try{fe(D)}catch{}else try{D.setAttribute(C,"")}catch{}},Cl=function(C){let D=null,H=null;if(qa)C=""+C;else{const St=Ol(C,/^[\r\n\t ]+/);H=St&&St[0]}ni==="application/xhtml+xml"&&_r===ve&&(C=''+C+"");const dt=v?v.createHTML(C):C;if(_r===ve)try{D=new f().parseFromString(dt,ni)}catch{}if(!D||!D.documentElement){D=M.createDocument(_r,"template",null);try{D.documentElement.innerHTML=ja?k:dt}catch{}}const Mt=D.body||D.documentElement;return C&&H&&Mt.insertBefore(r.createTextNode(H),Mt.childNodes[0]||null),_r===ve?N.call(D,Ve?"html":"body")[0]:Ve?D.documentElement:Mt},wl=function(C){return L.call(C.ownerDocument||C,C,c.SHOW_ELEMENT|c.SHOW_COMMENT|c.SHOW_TEXT|c.SHOW_PROCESSING_INSTRUCTION|c.SHOW_CDATA_SECTION,null)},vl=function(C){return C instanceof u&&(typeof C.nodeName!="string"||typeof C.textContent!="string"||typeof C.removeChild!="function"||!(C.attributes instanceof h)||typeof C.removeAttribute!="function"||typeof C.setAttribute!="function"||typeof C.namespaceURI!="string"||typeof C.insertBefore!="function"||typeof C.hasChildNodes!="function")},kl=function(C){return typeof s=="function"&&C instanceof s},ke=function(C,D,H){E[C]&&ln(E[C],dt=>{dt.call(t,D,H,Cr)})},Sl=function(C){let D=null;if(ke("beforeSanitizeElements",C,null),vl(C))return fe(C),!0;const H=wt(C.nodeName);if(ke("uponSanitizeElement",C,{tagName:H,allowedTags:J}),C.hasChildNodes()&&!kl(C.firstElementChild)&&Ot(/<[/\w]/g,C.innerHTML)&&Ot(/<[/\w]/g,C.textContent)||C.nodeType===ui.progressingInstruction||Ie&&C.nodeType===ui.comment&&Ot(/<[/\w]/g,C.data))return fe(C),!0;if(!J[H]||Kt[H]){if(!Kt[H]&&Ll(H)&&(st.tagNameCheck instanceof RegExp&&Ot(st.tagNameCheck,H)||st.tagNameCheck instanceof Function&&st.tagNameCheck(H)))return!1;if(Wa&&!br[H]){const dt=_(C)||C.parentNode,Mt=b(C)||C.childNodes;if(Mt&&dt){const St=Mt.length;for(let qt=St-1;qt>=0;--qt){const pe=m(Mt[qt],!0);pe.__removalCount=(C.__removalCount||0)+1,dt.insertBefore(pe,x(C))}}}return fe(C),!0}return C instanceof l&&!Lm(C)||(H==="noscript"||H==="noembed"||H==="noframes")&&Ot(/<\/no(script|embed|frames)/i,C.innerHTML)?(fe(C),!0):(Qt&&C.nodeType===ui.text&&(D=C.textContent,ln([q,I,B],dt=>{D=li(D,dt," ")}),C.textContent!==D&&(oi(t.removed,{element:C.cloneNode()}),C.textContent=D)),ke("afterSanitizeElements",C,null),!1)},Tl=function(C,D,H){if(hl&&(D==="id"||D==="name")&&(H in r||H in Sm))return!1;if(!(ne&&!ie[D]&&Ot(A,D))){if(!(Oe&&Ot(S,D))){if(!nt[D]||ie[D]){if(!(Ll(C)&&(st.tagNameCheck instanceof RegExp&&Ot(st.tagNameCheck,C)||st.tagNameCheck instanceof Function&&st.tagNameCheck(C))&&(st.attributeNameCheck instanceof RegExp&&Ot(st.attributeNameCheck,D)||st.attributeNameCheck instanceof Function&&st.attributeNameCheck(D))||D==="is"&&st.allowCustomizedBuiltInElements&&(st.tagNameCheck instanceof RegExp&&Ot(st.tagNameCheck,H)||st.tagNameCheck instanceof Function&&st.tagNameCheck(H))))return!1}else if(!Ha[D]){if(!Ot(Y,li(H,T,""))){if(!((D==="src"||D==="xlink:href"||D==="href")&&C!=="script"&&d0(H,"data:")===0&&pl[C])){if(!(kt&&!Ot(F,li(H,T,"")))){if(H)return!1}}}}}}return!0},Ll=function(C){return C!=="annotation-xml"&&Ol(C,z)},Al=function(C){ke("beforeSanitizeAttributes",C,null);const{attributes:D}=C;if(!D)return;const H={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:nt};let dt=D.length;for(;dt--;){const Mt=D[dt],{name:St,namespaceURI:qt,value:pe}=Mt,ai=wt(St);let Rt=St==="value"?pe:g0(pe);if(H.attrName=ai,H.attrValue=Rt,H.keepAttr=!0,H.forceKeepAttr=void 0,ke("uponSanitizeAttribute",C,H),Rt=H.attrValue,Ie&&Ot(/((--!?|])>)|<\/(style|title)/i,Rt)){on(St,C);continue}if(H.forceKeepAttr||(on(St,C),!H.keepAttr))continue;if(!ae&&Ot(/\/>/i,Rt)){on(St,C);continue}Qt&&ln([q,I,B],Ml=>{Rt=li(Rt,Ml," ")});const Bl=wt(C.nodeName);if(Tl(Bl,ai,Rt)){if(ul&&(ai==="id"||ai==="name")&&(on(St,C),Rt=Cm+Rt),v&&typeof p=="object"&&typeof p.getAttributeType=="function"&&!qt)switch(p.getAttributeType(Bl,ai)){case"TrustedHTML":{Rt=v.createHTML(Rt);break}case"TrustedScriptURL":{Rt=v.createScriptURL(Rt);break}}try{qt?C.setAttributeNS(qt,St,Rt):C.setAttribute(St,Rt),vl(C)?fe(C):Rl(t.removed)}catch{}}}ke("afterSanitizeAttributes",C,null)},Am=function V(C){let D=null;const H=wl(C);for(ke("beforeSanitizeShadowDOM",C,null);D=H.nextNode();)ke("uponSanitizeShadowNode",D,null),!Sl(D)&&(D.content instanceof a&&V(D.content),Al(D));ke("afterSanitizeShadowDOM",C,null)};return t.sanitize=function(V){let C=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},D=null,H=null,dt=null,Mt=null;if(ja=!V,ja&&(V=""),typeof V!="string"&&!kl(V))if(typeof V.toString=="function"){if(V=V.toString(),typeof V!="string")throw ci("dirty is not a string, aborting")}else throw ci("toString is not a function");if(!t.isSupported)return V;if(za||Ya(C),t.removed=[],typeof V=="string"&&(ii=!1),ii){if(V.nodeName){const pe=wt(V.nodeName);if(!J[pe]||Kt[pe])throw ci("root node is forbidden and cannot be sanitized in-place")}}else if(V instanceof s)D=Cl(""),H=D.ownerDocument.importNode(V,!0),H.nodeType===ui.element&&H.nodeName==="BODY"||H.nodeName==="HTML"?D=H:D.appendChild(H);else{if(!yr&&!Qt&&!Ve&&V.indexOf("<")===-1)return v&&nn?v.createHTML(V):V;if(D=Cl(V),!D)return yr?null:nn?k:""}D&&qa&&fe(D.firstChild);const St=wl(ii?V:D);for(;dt=St.nextNode();)Sl(dt)||(dt.content instanceof a&&Am(dt.content),Al(dt));if(ii)return V;if(yr){if(rn)for(Mt=O.call(D.ownerDocument);D.firstChild;)Mt.appendChild(D.firstChild);else Mt=D;return(nt.shadowroot||nt.shadowrootmode)&&(Mt=R.call(i,Mt,!0)),Mt}let qt=Ve?D.outerHTML:D.innerHTML;return Ve&&J["!doctype"]&&D.ownerDocument&&D.ownerDocument.doctype&&D.ownerDocument.doctype.name&&Ot(xh,D.ownerDocument.doctype.name)&&(qt=" +`+qt),Qt&&ln([q,I,B],pe=>{qt=li(qt,pe," ")}),v&&nn?v.createHTML(qt):qt},t.setConfig=function(){let V=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};Ya(V),za=!0},t.clearConfig=function(){Cr=null,za=!1},t.isValidAttribute=function(V,C,D){Cr||Ya({});const H=wt(V),dt=wt(C);return Tl(H,dt,D)},t.addHook=function(V,C){typeof C=="function"&&(E[V]=E[V]||[],oi(E[V],C))},t.removeHook=function(V){if(E[V])return Rl(E[V])},t.removeHooks=function(V){E[V]&&(E[V]=[])},t.removeAllHooks=function(){E={}},t}var Ir=bh(),_h=Object.defineProperty,d=(e,t)=>_h(e,"name",{value:t,configurable:!0}),M0=(e,t)=>{for(var r in t)_h(e,r,{get:t[r],enumerable:!0})},Se={trace:0,debug:1,info:2,warn:3,error:4,fatal:5},$={trace:d((...e)=>{},"trace"),debug:d((...e)=>{},"debug"),info:d((...e)=>{},"info"),warn:d((...e)=>{},"warn"),error:d((...e)=>{},"error"),fatal:d((...e)=>{},"fatal")},ho=d(function(e="fatal"){let t=Se.fatal;typeof e=="string"?e.toLowerCase()in Se&&(t=Se[e]):typeof e=="number"&&(t=e),$.trace=()=>{},$.debug=()=>{},$.info=()=>{},$.warn=()=>{},$.error=()=>{},$.fatal=()=>{},t<=Se.fatal&&($.fatal=console.error?console.error.bind(console,Jt("FATAL"),"color: orange"):console.log.bind(console,"\x1B[35m",Jt("FATAL"))),t<=Se.error&&($.error=console.error?console.error.bind(console,Jt("ERROR"),"color: orange"):console.log.bind(console,"\x1B[31m",Jt("ERROR"))),t<=Se.warn&&($.warn=console.warn?console.warn.bind(console,Jt("WARN"),"color: orange"):console.log.bind(console,"\x1B[33m",Jt("WARN"))),t<=Se.info&&($.info=console.info?console.info.bind(console,Jt("INFO"),"color: lightblue"):console.log.bind(console,"\x1B[34m",Jt("INFO"))),t<=Se.debug&&($.debug=console.debug?console.debug.bind(console,Jt("DEBUG"),"color: lightgreen"):console.log.bind(console,"\x1B[32m",Jt("DEBUG"))),t<=Se.trace&&($.trace=console.debug?console.debug.bind(console,Jt("TRACE"),"color: lightgreen"):console.log.bind(console,"\x1B[32m",Jt("TRACE")))},"setLogLevel"),Jt=d(e=>`%c${i0().format("ss.SSS")} : ${e} : `,"format"),Ch=/^-{3}\s*[\n\r](.*?)[\n\r]-{3}\s*[\n\r]+/s,Ai=/%{2}{\s*(?:(\w+)\s*:|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,E0=/\s*%%.*\n/gm,Br,wh=(Br=class extends Error{constructor(t){super(t),this.name="UnknownDiagramError"}},d(Br,"UnknownDiagramError"),Br),Pr={},uo=d(function(e,t){e=e.replace(Ch,"").replace(Ai,"").replace(E0,` +`);for(const[r,{detector:i}]of Object.entries(Pr))if(i(e,t))return r;throw new wh(`No diagram type detected matching given configuration for text: ${e}`)},"detectType"),vh=d((...e)=>{for(const{id:t,detector:r,loader:i}of e)kh(t,r,i)},"registerLazyLoadedDiagrams"),kh=d((e,t,r)=>{Pr[e]&&$.warn(`Detector with key ${e} already exists. Overwriting.`),Pr[e]={detector:t,loader:r},$.debug(`Detector with key ${e} added${r?" with loader":""}`)},"addDetector"),F0=d(e=>Pr[e].loader,"getDiagramLoader"),ys=d((e,t,{depth:r=2,clobber:i=!1}={})=>{const n={depth:r,clobber:i};return Array.isArray(t)&&!Array.isArray(e)?(t.forEach(a=>ys(e,a,n)),e):Array.isArray(t)&&Array.isArray(e)?(t.forEach(a=>{e.includes(a)||e.push(a)}),e):e===void 0||r<=0?e!=null&&typeof e=="object"&&typeof t=="object"?Object.assign(e,t):t:(t!==void 0&&typeof e=="object"&&typeof t=="object"&&Object.keys(t).forEach(a=>{typeof t[a]=="object"&&(e[a]===void 0||typeof e[a]=="object")?(e[a]===void 0&&(e[a]=Array.isArray(t[a])?[]:{}),e[a]=ys(e[a],t[a],{depth:r-1,clobber:i})):(i||typeof e[a]!="object"&&typeof t[a]!="object")&&(e[a]=t[a])}),e)},"assignWithDepth"),At=ys,da="#ffffff",ga="#f2f2f2",It=d((e,t)=>t?w(e,{s:-40,l:10}):w(e,{s:-40,l:-10}),"mkBorder"),Mr,$0=(Mr=class{constructor(){this.background="#f4f4f4",this.primaryColor="#fff4dd",this.noteBkgColor="#fff5ad",this.noteTextColor="#333",this.THEME_COLOR_LIMIT=12,this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px"}updateColors(){var r,i,n,a,o,s,l,c,h,u,f;if(this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#333"),this.secondaryColor=this.secondaryColor||w(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||w(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||It(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||It(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||It(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||It(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#333",this.secondaryTextColor=this.secondaryTextColor||P(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||P(this.tertiaryColor),this.lineColor=this.lineColor||P(this.background),this.arrowheadColor=this.arrowheadColor||P(this.background),this.textColor=this.textColor||this.primaryTextColor,this.border2=this.border2||this.tertiaryBorderColor,this.nodeBkg=this.nodeBkg||this.primaryColor,this.mainBkg=this.mainBkg||this.primaryColor,this.nodeBorder=this.nodeBorder||this.primaryBorderColor,this.clusterBkg=this.clusterBkg||this.tertiaryColor,this.clusterBorder=this.clusterBorder||this.tertiaryBorderColor,this.defaultLinkColor=this.defaultLinkColor||this.lineColor,this.titleColor=this.titleColor||this.tertiaryTextColor,this.edgeLabelBackground=this.edgeLabelBackground||(this.darkMode?Q(this.secondaryColor,30):this.secondaryColor),this.nodeTextColor=this.nodeTextColor||this.primaryTextColor,this.actorBorder=this.actorBorder||this.primaryBorderColor,this.actorBkg=this.actorBkg||this.mainBkg,this.actorTextColor=this.actorTextColor||this.primaryTextColor,this.actorLineColor=this.actorLineColor||this.actorBorder,this.labelBoxBkgColor=this.labelBoxBkgColor||this.actorBkg,this.signalColor=this.signalColor||this.textColor,this.signalTextColor=this.signalTextColor||this.textColor,this.labelBoxBorderColor=this.labelBoxBorderColor||this.actorBorder,this.labelTextColor=this.labelTextColor||this.actorTextColor,this.loopTextColor=this.loopTextColor||this.actorTextColor,this.activationBorderColor=this.activationBorderColor||Q(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||P(this.lineColor),this.sectionBkgColor=this.sectionBkgColor||this.tertiaryColor,this.altSectionBkgColor=this.altSectionBkgColor||"white",this.sectionBkgColor=this.sectionBkgColor||this.secondaryColor,this.sectionBkgColor2=this.sectionBkgColor2||this.primaryColor,this.excludeBkgColor=this.excludeBkgColor||"#eeeeee",this.taskBorderColor=this.taskBorderColor||this.primaryBorderColor,this.taskBkgColor=this.taskBkgColor||this.primaryColor,this.activeTaskBorderColor=this.activeTaskBorderColor||this.primaryColor,this.activeTaskBkgColor=this.activeTaskBkgColor||X(this.primaryColor,23),this.gridColor=this.gridColor||"lightgrey",this.doneTaskBkgColor=this.doneTaskBkgColor||"lightgrey",this.doneTaskBorderColor=this.doneTaskBorderColor||"grey",this.critBorderColor=this.critBorderColor||"#ff8888",this.critBkgColor=this.critBkgColor||"red",this.todayLineColor=this.todayLineColor||"red",this.taskTextColor=this.taskTextColor||this.textColor,this.taskTextOutsideColor=this.taskTextOutsideColor||this.textColor,this.taskTextLightColor=this.taskTextLightColor||this.textColor,this.taskTextColor=this.taskTextColor||this.primaryTextColor,this.taskTextDarkColor=this.taskTextDarkColor||this.textColor,this.taskTextClickableColor=this.taskTextClickableColor||"#003163",this.personBorder=this.personBorder||this.primaryBorderColor,this.personBkg=this.personBkg||this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||this.tertiaryColor,this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.specialStateColor=this.lineColor,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||w(this.primaryColor,{h:30}),this.cScale4=this.cScale4||w(this.primaryColor,{h:60}),this.cScale5=this.cScale5||w(this.primaryColor,{h:90}),this.cScale6=this.cScale6||w(this.primaryColor,{h:120}),this.cScale7=this.cScale7||w(this.primaryColor,{h:150}),this.cScale8=this.cScale8||w(this.primaryColor,{h:210,l:150}),this.cScale9=this.cScale9||w(this.primaryColor,{h:270}),this.cScale10=this.cScale10||w(this.primaryColor,{h:300}),this.cScale11=this.cScale11||w(this.primaryColor,{h:330}),this.darkMode)for(let p=0;p{this[i]=t[i]}),this.updateColors(),r.forEach(i=>{this[i]=t[i]})}},d(Mr,"Theme"),Mr),D0=d(e=>{const t=new $0;return t.calculate(e),t},"getThemeVariables"),Er,R0=(Er=class{constructor(){this.background="#333",this.primaryColor="#1f2020",this.secondaryColor=X(this.primaryColor,16),this.tertiaryColor=w(this.primaryColor,{h:-160}),this.primaryBorderColor=P(this.background),this.secondaryBorderColor=It(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=It(this.tertiaryColor,this.darkMode),this.primaryTextColor=P(this.primaryColor),this.secondaryTextColor=P(this.secondaryColor),this.tertiaryTextColor=P(this.tertiaryColor),this.lineColor=P(this.background),this.textColor=P(this.background),this.mainBkg="#1f2020",this.secondBkg="calculated",this.mainContrastColor="lightgrey",this.darkTextColor=X(P("#323D47"),10),this.lineColor="calculated",this.border1="#ccc",this.border2=Li(255,255,255,.25),this.arrowheadColor="calculated",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="#181818",this.textColor="#ccc",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#F9FFFE",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="calculated",this.activationBkgColor="calculated",this.sequenceNumberColor="black",this.sectionBkgColor=Q("#EAE8D9",30),this.altSectionBkgColor="calculated",this.sectionBkgColor2="#EAE8D9",this.excludeBkgColor=Q(this.sectionBkgColor,10),this.taskBorderColor=Li(255,255,255,70),this.taskBkgColor="calculated",this.taskTextColor="calculated",this.taskTextLightColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor=Li(255,255,255,50),this.activeTaskBkgColor="#81B1DB",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="grey",this.critBorderColor="#E83737",this.critBkgColor="#E83737",this.taskTextDarkColor="calculated",this.todayLineColor="#DB5757",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.labelColor="calculated",this.errorBkgColor="#a44141",this.errorTextColor="#ddd"}updateColors(){var t,r,i,n,a,o,s,l,c,h,u;this.secondBkg=X(this.mainBkg,16),this.lineColor=this.mainContrastColor,this.arrowheadColor=this.mainContrastColor,this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.edgeLabelBackground=X(this.labelBackground,25),this.actorBorder=this.border1,this.actorBkg=this.mainBkg,this.actorTextColor=this.mainContrastColor,this.actorLineColor=this.actorBorder,this.signalColor=this.mainContrastColor,this.signalTextColor=this.mainContrastColor,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.mainContrastColor,this.loopTextColor=this.mainContrastColor,this.noteBorderColor=this.secondaryBorderColor,this.noteBkgColor=this.secondBkg,this.noteTextColor=this.secondaryTextColor,this.activationBorderColor=this.border1,this.activationBkgColor=this.secondBkg,this.altSectionBkgColor=this.background,this.taskBkgColor=X(this.mainBkg,23),this.taskTextColor=this.darkTextColor,this.taskTextLightColor=this.mainContrastColor,this.taskTextOutsideColor=this.taskTextLightColor,this.gridColor=this.mainContrastColor,this.doneTaskBkgColor=this.mainContrastColor,this.taskTextDarkColor=this.darkTextColor,this.archEdgeColor=this.lineColor,this.archEdgeArrowColor=this.lineColor,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#555",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.primaryBorderColor,this.specialStateColor="#f4f4f4",this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=w(this.primaryColor,{h:64}),this.fillType3=w(this.secondaryColor,{h:64}),this.fillType4=w(this.primaryColor,{h:-64}),this.fillType5=w(this.secondaryColor,{h:-64}),this.fillType6=w(this.primaryColor,{h:128}),this.fillType7=w(this.secondaryColor,{h:128}),this.cScale1=this.cScale1||"#0b0000",this.cScale2=this.cScale2||"#4d1037",this.cScale3=this.cScale3||"#3f5258",this.cScale4=this.cScale4||"#4f2f1b",this.cScale5=this.cScale5||"#6e0a0a",this.cScale6=this.cScale6||"#3b0048",this.cScale7=this.cScale7||"#995a01",this.cScale8=this.cScale8||"#154706",this.cScale9=this.cScale9||"#161722",this.cScale10=this.cScale10||"#00296f",this.cScale11=this.cScale11||"#01629c",this.cScale12=this.cScale12||"#010029",this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||w(this.primaryColor,{h:30}),this.cScale4=this.cScale4||w(this.primaryColor,{h:60}),this.cScale5=this.cScale5||w(this.primaryColor,{h:90}),this.cScale6=this.cScale6||w(this.primaryColor,{h:120}),this.cScale7=this.cScale7||w(this.primaryColor,{h:150}),this.cScale8=this.cScale8||w(this.primaryColor,{h:210}),this.cScale9=this.cScale9||w(this.primaryColor,{h:270}),this.cScale10=this.cScale10||w(this.primaryColor,{h:300}),this.cScale11=this.cScale11||w(this.primaryColor,{h:330});for(let f=0;f{this[i]=t[i]}),this.updateColors(),r.forEach(i=>{this[i]=t[i]})}},d(Er,"Theme"),Er),O0=d(e=>{const t=new R0;return t.calculate(e),t},"getThemeVariables"),Fr,I0=(Fr=class{constructor(){this.background="#f4f4f4",this.primaryColor="#ECECFF",this.secondaryColor=w(this.primaryColor,{h:120}),this.secondaryColor="#ffffde",this.tertiaryColor=w(this.primaryColor,{h:-160}),this.primaryBorderColor=It(this.primaryColor,this.darkMode),this.secondaryBorderColor=It(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=It(this.tertiaryColor,this.darkMode),this.primaryTextColor=P(this.primaryColor),this.secondaryTextColor=P(this.secondaryColor),this.tertiaryTextColor=P(this.tertiaryColor),this.lineColor=P(this.background),this.textColor=P(this.background),this.background="white",this.mainBkg="#ECECFF",this.secondBkg="#ffffde",this.lineColor="#333333",this.border1="#9370DB",this.border2="#aaaa33",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="rgba(232,232,232, 0.8)",this.textColor="#333",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="calculated",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="calculated",this.taskTextColor=this.taskTextLightColor,this.taskTextDarkColor="calculated",this.taskTextOutsideColor=this.taskTextDarkColor,this.taskTextClickableColor="calculated",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBorderColor="calculated",this.critBkgColor="calculated",this.todayLineColor="calculated",this.sectionBkgColor=Li(102,102,255,.49),this.altSectionBkgColor="white",this.sectionBkgColor2="#fff400",this.taskBorderColor="#534fbc",this.taskBkgColor="#8a90dd",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="#534fbc",this.activeTaskBkgColor="#bfc7ff",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222",this.updateColors()}updateColors(){var t,r,i,n,a,o,s,l,c,h,u;this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||w(this.primaryColor,{h:30}),this.cScale4=this.cScale4||w(this.primaryColor,{h:60}),this.cScale5=this.cScale5||w(this.primaryColor,{h:90}),this.cScale6=this.cScale6||w(this.primaryColor,{h:120}),this.cScale7=this.cScale7||w(this.primaryColor,{h:150}),this.cScale8=this.cScale8||w(this.primaryColor,{h:210}),this.cScale9=this.cScale9||w(this.primaryColor,{h:270}),this.cScale10=this.cScale10||w(this.primaryColor,{h:300}),this.cScale11=this.cScale11||w(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||Q(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||Q(this.tertiaryColor,40);for(let f=0;f{this[i]=t[i]}),this.updateColors(),r.forEach(i=>{this[i]=t[i]})}},d(Fr,"Theme"),Fr),P0=d(e=>{const t=new I0;return t.calculate(e),t},"getThemeVariables"),$r,N0=($r=class{constructor(){this.background="#f4f4f4",this.primaryColor="#cde498",this.secondaryColor="#cdffb2",this.background="white",this.mainBkg="#cde498",this.secondBkg="#cdffb2",this.lineColor="green",this.border1="#13540c",this.border2="#6eaa49",this.arrowheadColor="green",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.tertiaryColor=X("#cde498",10),this.primaryBorderColor=It(this.primaryColor,this.darkMode),this.secondaryBorderColor=It(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=It(this.tertiaryColor,this.darkMode),this.primaryTextColor=P(this.primaryColor),this.secondaryTextColor=P(this.secondaryColor),this.tertiaryTextColor=P(this.primaryColor),this.lineColor=P(this.background),this.textColor=P(this.background),this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#333",this.edgeLabelBackground="#e8e8e8",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="calculated",this.signalColor="#333",this.signalTextColor="#333",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="#326932",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="#6eaa49",this.altSectionBkgColor="white",this.sectionBkgColor2="#6eaa49",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="#487e3a",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){var t,r,i,n,a,o,s,l,c,h,u;this.actorBorder=Q(this.mainBkg,20),this.actorBkg=this.mainBkg,this.labelBoxBkgColor=this.actorBkg,this.labelTextColor=this.actorTextColor,this.loopTextColor=this.actorTextColor,this.noteBorderColor=this.border2,this.noteTextColor=this.actorTextColor,this.actorLineColor=this.actorBorder,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||w(this.primaryColor,{h:30}),this.cScale4=this.cScale4||w(this.primaryColor,{h:60}),this.cScale5=this.cScale5||w(this.primaryColor,{h:90}),this.cScale6=this.cScale6||w(this.primaryColor,{h:120}),this.cScale7=this.cScale7||w(this.primaryColor,{h:150}),this.cScale8=this.cScale8||w(this.primaryColor,{h:210}),this.cScale9=this.cScale9||w(this.primaryColor,{h:270}),this.cScale10=this.cScale10||w(this.primaryColor,{h:300}),this.cScale11=this.cScale11||w(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||Q(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||Q(this.tertiaryColor,40);for(let f=0;f{this[i]=t[i]}),this.updateColors(),r.forEach(i=>{this[i]=t[i]})}},d($r,"Theme"),$r),z0=d(e=>{const t=new N0;return t.calculate(e),t},"getThemeVariables"),Dr,q0=(Dr=class{constructor(){this.primaryColor="#eee",this.contrast="#707070",this.secondaryColor=X(this.contrast,55),this.background="#ffffff",this.tertiaryColor=w(this.primaryColor,{h:-160}),this.primaryBorderColor=It(this.primaryColor,this.darkMode),this.secondaryBorderColor=It(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=It(this.tertiaryColor,this.darkMode),this.primaryTextColor=P(this.primaryColor),this.secondaryTextColor=P(this.secondaryColor),this.tertiaryTextColor=P(this.tertiaryColor),this.lineColor=P(this.background),this.textColor=P(this.background),this.mainBkg="#eee",this.secondBkg="calculated",this.lineColor="#666",this.border1="#999",this.border2="calculated",this.note="#ffa",this.text="#333",this.critical="#d42",this.done="#bbb",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="white",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor=this.actorBorder,this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="calculated",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="white",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBkgColor="calculated",this.critBorderColor="calculated",this.todayLineColor="calculated",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){var t,r,i,n,a,o,s,l,c,h,u;this.secondBkg=X(this.contrast,55),this.border2=this.contrast,this.actorBorder=X(this.border1,23),this.actorBkg=this.mainBkg,this.actorTextColor=this.text,this.actorLineColor=this.actorBorder,this.signalColor=this.text,this.signalTextColor=this.text,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.text,this.loopTextColor=this.text,this.noteBorderColor="#999",this.noteBkgColor="#666",this.noteTextColor="#fff",this.cScale0=this.cScale0||"#555",this.cScale1=this.cScale1||"#F4F4F4",this.cScale2=this.cScale2||"#555",this.cScale3=this.cScale3||"#BBB",this.cScale4=this.cScale4||"#777",this.cScale5=this.cScale5||"#999",this.cScale6=this.cScale6||"#DDD",this.cScale7=this.cScale7||"#FFF",this.cScale8=this.cScale8||"#DDD",this.cScale9=this.cScale9||"#BBB",this.cScale10=this.cScale10||"#999",this.cScale11=this.cScale11||"#777";for(let f=0;f{this[i]=t[i]}),this.updateColors(),r.forEach(i=>{this[i]=t[i]})}},d(Dr,"Theme"),Dr),W0=d(e=>{const t=new q0;return t.calculate(e),t},"getThemeVariables"),Be={base:{getThemeVariables:D0},dark:{getThemeVariables:O0},default:{getThemeVariables:P0},forest:{getThemeVariables:z0},neutral:{getThemeVariables:W0}},Pe={flowchart:{useMaxWidth:!0,titleTopMargin:25,subGraphTitleMargin:{top:0,bottom:0},diagramPadding:8,htmlLabels:!0,nodeSpacing:50,rankSpacing:50,curve:"basis",padding:15,defaultRenderer:"dagre-wrapper",wrappingWidth:200},sequence:{useMaxWidth:!0,hideUnusedParticipants:!1,activationWidth:10,diagramMarginX:50,diagramMarginY:10,actorMargin:50,width:150,height:65,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",mirrorActors:!0,forceMenus:!1,bottomMarginAdj:1,rightAngles:!1,showSequenceNumbers:!1,actorFontSize:14,actorFontFamily:'"Open Sans", sans-serif',actorFontWeight:400,noteFontSize:14,noteFontFamily:'"trebuchet ms", verdana, arial, sans-serif',noteFontWeight:400,noteAlign:"center",messageFontSize:16,messageFontFamily:'"trebuchet ms", verdana, arial, sans-serif',messageFontWeight:400,wrap:!1,wrapPadding:10,labelBoxWidth:50,labelBoxHeight:20},gantt:{useMaxWidth:!0,titleTopMargin:25,barHeight:20,barGap:4,topPadding:50,rightPadding:75,leftPadding:75,gridLineStartPadding:35,fontSize:11,sectionFontSize:11,numberSectionStyles:4,axisFormat:"%Y-%m-%d",topAxis:!1,displayMode:"",weekday:"sunday"},journey:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"]},class:{useMaxWidth:!0,titleTopMargin:25,arrowMarkerAbsolute:!1,dividerMargin:10,padding:5,textHeight:10,defaultRenderer:"dagre-wrapper",htmlLabels:!1,hideEmptyMembersBox:!1},state:{useMaxWidth:!0,titleTopMargin:25,dividerMargin:10,sizeUnit:5,padding:8,textHeight:10,titleShift:-15,noteMargin:10,forkWidth:70,forkHeight:7,miniPadding:2,fontSizeFactor:5.02,fontSize:24,labelHeight:16,edgeLengthFactor:"20",compositTitleSize:35,radius:5,defaultRenderer:"dagre-wrapper"},er:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:20,layoutDirection:"TB",minEntityWidth:100,minEntityHeight:75,entityPadding:15,stroke:"gray",fill:"honeydew",fontSize:12},pie:{useMaxWidth:!0,textPosition:.75},quadrantChart:{useMaxWidth:!0,chartWidth:500,chartHeight:500,titleFontSize:20,titlePadding:10,quadrantPadding:5,xAxisLabelPadding:5,yAxisLabelPadding:5,xAxisLabelFontSize:16,yAxisLabelFontSize:16,quadrantLabelFontSize:16,quadrantTextTopPadding:5,pointTextPadding:5,pointLabelFontSize:12,pointRadius:5,xAxisPosition:"top",yAxisPosition:"left",quadrantInternalBorderStrokeWidth:1,quadrantExternalBorderStrokeWidth:2},xyChart:{useMaxWidth:!0,width:700,height:500,titleFontSize:20,titlePadding:10,showTitle:!0,xAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},yAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},chartOrientation:"vertical",plotReservedSpacePercent:50},requirement:{useMaxWidth:!0,rect_fill:"#f9f9f9",text_color:"#333",rect_border_size:"0.5px",rect_border_color:"#bbb",rect_min_width:200,rect_min_height:200,fontSize:14,rect_padding:10,line_height:20},mindmap:{useMaxWidth:!0,padding:10,maxNodeWidth:200},kanban:{useMaxWidth:!0,padding:8,sectionWidth:200,ticketBaseUrl:""},timeline:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"],disableMulticolor:!1},gitGraph:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:8,nodeLabel:{width:75,height:100,x:-25,y:0},mainBranchName:"main",mainBranchOrder:0,showCommitLabel:!0,showBranches:!0,rotateCommitLabel:!0,parallelCommits:!1,arrowMarkerAbsolute:!1},c4:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,c4ShapeMargin:50,c4ShapePadding:20,width:216,height:60,boxMargin:10,c4ShapeInRow:4,nextLinePaddingX:0,c4BoundaryInRow:2,personFontSize:14,personFontFamily:'"Open Sans", sans-serif',personFontWeight:"normal",external_personFontSize:14,external_personFontFamily:'"Open Sans", sans-serif',external_personFontWeight:"normal",systemFontSize:14,systemFontFamily:'"Open Sans", sans-serif',systemFontWeight:"normal",external_systemFontSize:14,external_systemFontFamily:'"Open Sans", sans-serif',external_systemFontWeight:"normal",system_dbFontSize:14,system_dbFontFamily:'"Open Sans", sans-serif',system_dbFontWeight:"normal",external_system_dbFontSize:14,external_system_dbFontFamily:'"Open Sans", sans-serif',external_system_dbFontWeight:"normal",system_queueFontSize:14,system_queueFontFamily:'"Open Sans", sans-serif',system_queueFontWeight:"normal",external_system_queueFontSize:14,external_system_queueFontFamily:'"Open Sans", sans-serif',external_system_queueFontWeight:"normal",boundaryFontSize:14,boundaryFontFamily:'"Open Sans", sans-serif',boundaryFontWeight:"normal",messageFontSize:12,messageFontFamily:'"Open Sans", sans-serif',messageFontWeight:"normal",containerFontSize:14,containerFontFamily:'"Open Sans", sans-serif',containerFontWeight:"normal",external_containerFontSize:14,external_containerFontFamily:'"Open Sans", sans-serif',external_containerFontWeight:"normal",container_dbFontSize:14,container_dbFontFamily:'"Open Sans", sans-serif',container_dbFontWeight:"normal",external_container_dbFontSize:14,external_container_dbFontFamily:'"Open Sans", sans-serif',external_container_dbFontWeight:"normal",container_queueFontSize:14,container_queueFontFamily:'"Open Sans", sans-serif',container_queueFontWeight:"normal",external_container_queueFontSize:14,external_container_queueFontFamily:'"Open Sans", sans-serif',external_container_queueFontWeight:"normal",componentFontSize:14,componentFontFamily:'"Open Sans", sans-serif',componentFontWeight:"normal",external_componentFontSize:14,external_componentFontFamily:'"Open Sans", sans-serif',external_componentFontWeight:"normal",component_dbFontSize:14,component_dbFontFamily:'"Open Sans", sans-serif',component_dbFontWeight:"normal",external_component_dbFontSize:14,external_component_dbFontFamily:'"Open Sans", sans-serif',external_component_dbFontWeight:"normal",component_queueFontSize:14,component_queueFontFamily:'"Open Sans", sans-serif',component_queueFontWeight:"normal",external_component_queueFontSize:14,external_component_queueFontFamily:'"Open Sans", sans-serif',external_component_queueFontWeight:"normal",wrap:!0,wrapPadding:10,person_bg_color:"#08427B",person_border_color:"#073B6F",external_person_bg_color:"#686868",external_person_border_color:"#8A8A8A",system_bg_color:"#1168BD",system_border_color:"#3C7FC0",system_db_bg_color:"#1168BD",system_db_border_color:"#3C7FC0",system_queue_bg_color:"#1168BD",system_queue_border_color:"#3C7FC0",external_system_bg_color:"#999999",external_system_border_color:"#8A8A8A",external_system_db_bg_color:"#999999",external_system_db_border_color:"#8A8A8A",external_system_queue_bg_color:"#999999",external_system_queue_border_color:"#8A8A8A",container_bg_color:"#438DD5",container_border_color:"#3C7FC0",container_db_bg_color:"#438DD5",container_db_border_color:"#3C7FC0",container_queue_bg_color:"#438DD5",container_queue_border_color:"#3C7FC0",external_container_bg_color:"#B3B3B3",external_container_border_color:"#A6A6A6",external_container_db_bg_color:"#B3B3B3",external_container_db_border_color:"#A6A6A6",external_container_queue_bg_color:"#B3B3B3",external_container_queue_border_color:"#A6A6A6",component_bg_color:"#85BBF0",component_border_color:"#78A8D8",component_db_bg_color:"#85BBF0",component_db_border_color:"#78A8D8",component_queue_bg_color:"#85BBF0",component_queue_border_color:"#78A8D8",external_component_bg_color:"#CCCCCC",external_component_border_color:"#BFBFBF",external_component_db_bg_color:"#CCCCCC",external_component_db_border_color:"#BFBFBF",external_component_queue_bg_color:"#CCCCCC",external_component_queue_border_color:"#BFBFBF"},sankey:{useMaxWidth:!0,width:600,height:400,linkColor:"gradient",nodeAlignment:"justify",showValues:!0,prefix:"",suffix:""},block:{useMaxWidth:!0,padding:8},packet:{useMaxWidth:!0,rowHeight:32,bitWidth:32,bitsPerRow:32,showBits:!0,paddingX:5,paddingY:5},architecture:{useMaxWidth:!0,padding:40,iconSize:80,fontSize:16},theme:"default",look:"classic",handDrawnSeed:0,layout:"dagre",maxTextSize:5e4,maxEdges:500,darkMode:!1,fontFamily:'"trebuchet ms", verdana, arial, sans-serif;',logLevel:5,securityLevel:"strict",startOnLoad:!0,arrowMarkerAbsolute:!1,secure:["secure","securityLevel","startOnLoad","maxTextSize","suppressErrorRendering","maxEdges"],legacyMathML:!1,forceLegacyMathML:!1,deterministicIds:!1,fontSize:16,markdownAutoWrap:!0,suppressErrorRendering:!1},Sh={...Pe,deterministicIDSeed:void 0,elk:{mergeEdges:!1,nodePlacementStrategy:"BRANDES_KOEPF"},themeCSS:void 0,themeVariables:Be.default.getThemeVariables(),sequence:{...Pe.sequence,messageFont:d(function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},"messageFont"),noteFont:d(function(){return{fontFamily:this.noteFontFamily,fontSize:this.noteFontSize,fontWeight:this.noteFontWeight}},"noteFont"),actorFont:d(function(){return{fontFamily:this.actorFontFamily,fontSize:this.actorFontSize,fontWeight:this.actorFontWeight}},"actorFont")},class:{hideEmptyMembersBox:!1},gantt:{...Pe.gantt,tickInterval:void 0,useWidth:void 0},c4:{...Pe.c4,useWidth:void 0,personFont:d(function(){return{fontFamily:this.personFontFamily,fontSize:this.personFontSize,fontWeight:this.personFontWeight}},"personFont"),external_personFont:d(function(){return{fontFamily:this.external_personFontFamily,fontSize:this.external_personFontSize,fontWeight:this.external_personFontWeight}},"external_personFont"),systemFont:d(function(){return{fontFamily:this.systemFontFamily,fontSize:this.systemFontSize,fontWeight:this.systemFontWeight}},"systemFont"),external_systemFont:d(function(){return{fontFamily:this.external_systemFontFamily,fontSize:this.external_systemFontSize,fontWeight:this.external_systemFontWeight}},"external_systemFont"),system_dbFont:d(function(){return{fontFamily:this.system_dbFontFamily,fontSize:this.system_dbFontSize,fontWeight:this.system_dbFontWeight}},"system_dbFont"),external_system_dbFont:d(function(){return{fontFamily:this.external_system_dbFontFamily,fontSize:this.external_system_dbFontSize,fontWeight:this.external_system_dbFontWeight}},"external_system_dbFont"),system_queueFont:d(function(){return{fontFamily:this.system_queueFontFamily,fontSize:this.system_queueFontSize,fontWeight:this.system_queueFontWeight}},"system_queueFont"),external_system_queueFont:d(function(){return{fontFamily:this.external_system_queueFontFamily,fontSize:this.external_system_queueFontSize,fontWeight:this.external_system_queueFontWeight}},"external_system_queueFont"),containerFont:d(function(){return{fontFamily:this.containerFontFamily,fontSize:this.containerFontSize,fontWeight:this.containerFontWeight}},"containerFont"),external_containerFont:d(function(){return{fontFamily:this.external_containerFontFamily,fontSize:this.external_containerFontSize,fontWeight:this.external_containerFontWeight}},"external_containerFont"),container_dbFont:d(function(){return{fontFamily:this.container_dbFontFamily,fontSize:this.container_dbFontSize,fontWeight:this.container_dbFontWeight}},"container_dbFont"),external_container_dbFont:d(function(){return{fontFamily:this.external_container_dbFontFamily,fontSize:this.external_container_dbFontSize,fontWeight:this.external_container_dbFontWeight}},"external_container_dbFont"),container_queueFont:d(function(){return{fontFamily:this.container_queueFontFamily,fontSize:this.container_queueFontSize,fontWeight:this.container_queueFontWeight}},"container_queueFont"),external_container_queueFont:d(function(){return{fontFamily:this.external_container_queueFontFamily,fontSize:this.external_container_queueFontSize,fontWeight:this.external_container_queueFontWeight}},"external_container_queueFont"),componentFont:d(function(){return{fontFamily:this.componentFontFamily,fontSize:this.componentFontSize,fontWeight:this.componentFontWeight}},"componentFont"),external_componentFont:d(function(){return{fontFamily:this.external_componentFontFamily,fontSize:this.external_componentFontSize,fontWeight:this.external_componentFontWeight}},"external_componentFont"),component_dbFont:d(function(){return{fontFamily:this.component_dbFontFamily,fontSize:this.component_dbFontSize,fontWeight:this.component_dbFontWeight}},"component_dbFont"),external_component_dbFont:d(function(){return{fontFamily:this.external_component_dbFontFamily,fontSize:this.external_component_dbFontSize,fontWeight:this.external_component_dbFontWeight}},"external_component_dbFont"),component_queueFont:d(function(){return{fontFamily:this.component_queueFontFamily,fontSize:this.component_queueFontSize,fontWeight:this.component_queueFontWeight}},"component_queueFont"),external_component_queueFont:d(function(){return{fontFamily:this.external_component_queueFontFamily,fontSize:this.external_component_queueFontSize,fontWeight:this.external_component_queueFontWeight}},"external_component_queueFont"),boundaryFont:d(function(){return{fontFamily:this.boundaryFontFamily,fontSize:this.boundaryFontSize,fontWeight:this.boundaryFontWeight}},"boundaryFont"),messageFont:d(function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},"messageFont")},pie:{...Pe.pie,useWidth:984},xyChart:{...Pe.xyChart,useWidth:void 0},requirement:{...Pe.requirement,useWidth:void 0},packet:{...Pe.packet}},Th=d((e,t="")=>Object.keys(e).reduce((r,i)=>Array.isArray(e[i])?r:typeof e[i]=="object"&&e[i]!==null?[...r,t+i,...Th(e[i],"")]:[...r,t+i],[]),"keyify"),H0=new Set(Th(Sh,"")),Lh=Sh,Fn=d(e=>{if($.debug("sanitizeDirective called with",e),!(typeof e!="object"||e==null)){if(Array.isArray(e)){e.forEach(t=>Fn(t));return}for(const t of Object.keys(e)){if($.debug("Checking key",t),t.startsWith("__")||t.includes("proto")||t.includes("constr")||!H0.has(t)||e[t]==null){$.debug("sanitize deleting key: ",t),delete e[t];continue}if(typeof e[t]=="object"){$.debug("sanitizing object",t),Fn(e[t]);continue}const r=["themeCSS","fontFamily","altFontFamily"];for(const i of r)t.includes(i)&&($.debug("sanitizing css option",t),e[t]=j0(e[t]))}if(e.themeVariables)for(const t of Object.keys(e.themeVariables)){const r=e.themeVariables[t];r!=null&&r.match&&!r.match(/^[\d "#%(),.;A-Za-z]+$/)&&(e.themeVariables[t]="")}$.debug("After sanitization",e)}},"sanitizeDirective"),j0=d(e=>{let t=0,r=0;for(const i of e){if(t{let r=At({},e),i={};for(const n of t)Eh(n),i=At(i,n);if(r=At(r,i),i.theme&&i.theme in Be){const n=At({},Ah),a=At(n.themeVariables||{},i.themeVariables);r.theme&&r.theme in Be&&(r.themeVariables=Be[r.theme].getThemeVariables(a))}return Bi=r,Fh(Bi),Bi},"updateCurrentConfig"),U0=d(e=>(Ht=At({},Nr),Ht=At(Ht,e),e.theme&&Be[e.theme]&&(Ht.themeVariables=Be[e.theme].getThemeVariables(e.themeVariables)),ma(Ht,zr),Ht),"setSiteConfig"),Y0=d(e=>{Ah=At({},e)},"saveConfigFromInitialize"),G0=d(e=>(Ht=At(Ht,e),ma(Ht,zr),Ht),"updateSiteConfig"),Bh=d(()=>At({},Ht),"getSiteConfig"),Mh=d(e=>(Fh(e),At(Bi,e),he()),"setConfig"),he=d(()=>At({},Bi),"getConfig"),Eh=d(e=>{e&&(["secure",...Ht.secure??[]].forEach(t=>{Object.hasOwn(e,t)&&($.debug(`Denied attempt to modify a secure key ${t}`,e[t]),delete e[t])}),Object.keys(e).forEach(t=>{t.startsWith("__")&&delete e[t]}),Object.keys(e).forEach(t=>{typeof e[t]=="string"&&(e[t].includes("<")||e[t].includes(">")||e[t].includes("url(data:"))&&delete e[t],typeof e[t]=="object"&&Eh(e[t])}))},"sanitize"),V0=d(e=>{var t;Fn(e),e.fontFamily&&!((t=e.themeVariables)!=null&&t.fontFamily)&&(e.themeVariables={...e.themeVariables,fontFamily:e.fontFamily}),zr.push(e),ma(Ht,zr)},"addDirective"),$n=d((e=Ht)=>{zr=[],ma(e,zr)},"reset"),X0={LAZY_LOAD_DEPRECATED:"The configuration options lazyLoadedDiagrams and loadExternalDiagramsAtStartup are deprecated. Please use registerExternalDiagrams instead."},Wl={},Z0=d(e=>{Wl[e]||($.warn(X0[e]),Wl[e]=!0)},"issueWarning"),Fh=d(e=>{e&&(e.lazyLoadedDiagrams||e.loadExternalDiagramsAtStartup)&&Z0("LAZY_LOAD_DEPRECATED")},"checkConfig"),Gi=//gi,K0=d(e=>e?Rh(e).replace(/\\n/g,"#br#").split("#br#"):[""],"getRows"),Q0=(()=>{let e=!1;return()=>{e||($h(),e=!0)}})();function $h(){const e="data-temp-href-target";Ir.addHook("beforeSanitizeAttributes",t=>{t.tagName==="A"&&t.hasAttribute("target")&&t.setAttribute(e,t.getAttribute("target")??"")}),Ir.addHook("afterSanitizeAttributes",t=>{t.tagName==="A"&&t.hasAttribute(e)&&(t.setAttribute("target",t.getAttribute(e)??""),t.removeAttribute(e),t.getAttribute("target")==="_blank"&&t.setAttribute("rel","noopener"))})}d($h,"setupDompurifyHooks");var Dh=d(e=>(Q0(),Ir.sanitize(e)),"removeScript"),Hl=d((e,t)=>{var r;if(((r=t.flowchart)==null?void 0:r.htmlLabels)!==!1){const i=t.securityLevel;i==="antiscript"||i==="strict"?e=Dh(e):i!=="loose"&&(e=Rh(e),e=e.replace(//g,">"),e=e.replace(/=/g,"="),e=ry(e))}return e},"sanitizeMore"),or=d((e,t)=>e&&(t.dompurifyConfig?e=Ir.sanitize(Hl(e,t),t.dompurifyConfig).toString():e=Ir.sanitize(Hl(e,t),{FORBID_TAGS:["style"]}).toString(),e),"sanitizeText"),J0=d((e,t)=>typeof e=="string"?or(e,t):e.flat().map(r=>or(r,t)),"sanitizeTextOrArray"),ty=d(e=>Gi.test(e),"hasBreaks"),ey=d(e=>e.split(Gi),"splitBreaks"),ry=d(e=>e.replace(/#br#/g,"
"),"placeholderToBreak"),Rh=d(e=>e.replace(Gi,"#br#"),"breakToPlaceholder"),iy=d(e=>{let t="";return e&&(t=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,t=t.replaceAll(/\(/g,"\\("),t=t.replaceAll(/\)/g,"\\)")),t},"getUrl"),Bt=d(e=>!(e===!1||["false","null","0"].includes(String(e).trim().toLowerCase())),"evaluate"),ny=d(function(...e){const t=e.filter(r=>!isNaN(r));return Math.max(...t)},"getMax"),ay=d(function(...e){const t=e.filter(r=>!isNaN(r));return Math.min(...t)},"getMin"),XA=d(function(e){const t=e.split(/(,)/),r=[];for(let i=0;i0&&i+1Math.max(0,e.split(t).length-1),"countOccurrence"),sy=d((e,t)=>{const r=xs(e,"~"),i=xs(t,"~");return r===1&&i===1},"shouldCombineSets"),oy=d(e=>{const t=xs(e,"~");let r=!1;if(t<=1)return e;t%2!==0&&e.startsWith("~")&&(e=e.substring(1),r=!0);const i=[...e];let n=i.indexOf("~"),a=i.lastIndexOf("~");for(;n!==-1&&a!==-1&&n!==a;)i[n]="<",i[a]=">",n=i.indexOf("~"),a=i.lastIndexOf("~");return r&&i.unshift("~"),i.join("")},"processSet"),jl=d(()=>window.MathMLElement!==void 0,"isMathMLSupported"),bs=/\$\$(.*)\$\$/g,qr=d(e=>{var t;return(((t=e.match(bs))==null?void 0:t.length)??0)>0},"hasKatex"),ZA=d(async(e,t)=>{e=await fo(e,t);const r=document.createElement("div");r.innerHTML=e,r.id="katex-temp",r.style.visibility="hidden",r.style.position="absolute",r.style.top="0";const i=document.querySelector("body");i==null||i.insertAdjacentElement("beforeend",r);const n={width:r.clientWidth,height:r.clientHeight};return r.remove(),n},"calculateMathMLDimensions"),fo=d(async(e,t)=>{if(!qr(e))return e;if(!(jl()||t.legacyMathML||t.forceLegacyMathML))return e.replace(bs,"MathML is unsupported in this environment.");const{default:r}=await ft(async()=>{const{default:n}=await import("./chunks/katex.CvgdMzdh.js");return{default:n}},[]),i=t.forceLegacyMathML||!jl()&&t.legacyMathML?"htmlAndMathml":"mathml";return e.split(Gi).map(n=>qr(n)?`
${n}
`:`
${n}
`).join("").replace(bs,(n,a)=>r.renderToString(a,{throwOnError:!0,displayMode:!0,output:i}).replace(/\n/g," ").replace(//g,""))},"renderKatex"),Xr={getRows:K0,sanitizeText:or,sanitizeTextOrArray:J0,hasBreaks:ty,splitBreaks:ey,lineBreakRegex:Gi,removeScript:Dh,getUrl:iy,evaluate:Bt,getMax:ny,getMin:ay},ly=d(function(e,t){for(let r of t)e.attr(r[0],r[1])},"d3Attrs"),cy=d(function(e,t,r){let i=new Map;return r?(i.set("width","100%"),i.set("style",`max-width: ${t}px;`)):(i.set("height",e),i.set("width",t)),i},"calculateSvgSizeAttrs"),Oh=d(function(e,t,r,i){const n=cy(t,r,i);ly(e,n)},"configureSvgSize"),hy=d(function(e,t,r,i){const n=t.node().getBBox(),a=n.width,o=n.height;$.info(`SVG bounds: ${a}x${o}`,n);let s=0,l=0;$.info(`Graph bounds: ${s}x${l}`,e),s=a+r*2,l=o+r*2,$.info(`Calculated bounds: ${s}x${l}`),Oh(t,l,s,i);const c=`${n.x-r} ${n.y-r} ${n.width+2*r} ${n.height+2*r}`;t.attr("viewBox",c)},"setupGraphViewbox"),Cn={},uy=d((e,t,r)=>{let i="";return e in Cn&&Cn[e]?i=Cn[e](r):$.warn(`No theme found for ${e}`),` & { + font-family: ${r.fontFamily}; + font-size: ${r.fontSize}; + fill: ${r.textColor} + } + + /* Classes common for multiple diagrams */ + + & .error-icon { + fill: ${r.errorBkgColor}; + } + & .error-text { + fill: ${r.errorTextColor}; + stroke: ${r.errorTextColor}; + } + + & .edge-thickness-normal { + stroke-width: 1px; + } + & .edge-thickness-thick { + stroke-width: 3.5px + } + & .edge-pattern-solid { + stroke-dasharray: 0; + } + & .edge-thickness-invisible { + stroke-width: 0; + fill: none; + } + & .edge-pattern-dashed{ + stroke-dasharray: 3; + } + .edge-pattern-dotted { + stroke-dasharray: 2; + } + + & .marker { + fill: ${r.lineColor}; + stroke: ${r.lineColor}; + } + & .marker.cross { + stroke: ${r.lineColor}; + } + + & svg { + font-family: ${r.fontFamily}; + font-size: ${r.fontSize}; + } + & p { + margin: 0 + } + + ${i} + + ${t} +`},"getStyles"),fy=d((e,t)=>{t!==void 0&&(Cn[e]=t)},"addStylesForDiagram"),py=uy,Ih={};M0(Ih,{clear:()=>dy,getAccDescription:()=>xy,getAccTitle:()=>my,getDiagramTitle:()=>_y,setAccDescription:()=>yy,setAccTitle:()=>gy,setDiagramTitle:()=>by});var po="",go="",mo="",yo=d(e=>or(e,he()),"sanitizeText"),dy=d(()=>{po="",mo="",go=""},"clear"),gy=d(e=>{po=yo(e).replace(/^\s+/g,"")},"setAccTitle"),my=d(()=>po,"getAccTitle"),yy=d(e=>{mo=yo(e).replace(/\n\s+/g,` +`)},"setAccDescription"),xy=d(()=>mo,"getAccDescription"),by=d(e=>{go=yo(e)},"setDiagramTitle"),_y=d(()=>go,"getDiagramTitle"),Ul=$,Cy=ho,ct=he,KA=Mh,QA=Nr,Ph=d(e=>or(e,ct()),"sanitizeText"),wy=hy,vy=d(()=>Ih,"getCommonDb"),Dn={},Rn=d((e,t,r)=>{var i;Dn[e]&&Ul.warn(`Diagram with id ${e} already registered. Overwriting.`),Dn[e]=t,r&&kh(e,r),fy(e,t.styles),(i=t.injectUtils)==null||i.call(t,Ul,Cy,ct,Ph,wy,vy(),()=>{})},"registerDiagram"),_s=d(e=>{if(e in Dn)return Dn[e];throw new ky(e)},"getDiagram"),Rr,ky=(Rr=class extends Error{constructor(t){super(`Diagram ${t} not found.`)}},d(Rr,"DiagramNotFoundError"),Rr);function xo(e){return typeof e>"u"||e===null}d(xo,"isNothing");function Nh(e){return typeof e=="object"&&e!==null}d(Nh,"isObject");function zh(e){return Array.isArray(e)?e:xo(e)?[]:[e]}d(zh,"toArray");function qh(e,t){var r,i,n,a;if(t)for(a=Object.keys(t),r=0,i=a.length;rs&&(a=" ... ",t=i-s+a.length),r-i>s&&(o=" ...",r=i+s-o.length),{str:a+e.slice(t,r).replace(/\t/g,"→")+o,pos:i-t+a.length}}d(wn,"getLine");function vn(e,t){return Ct.repeat(" ",t-e.length)+e}d(vn,"padStart");function jh(e,t){if(t=Object.create(t||null),!e.buffer)return null;t.maxLength||(t.maxLength=79),typeof t.indent!="number"&&(t.indent=1),typeof t.linesBefore!="number"&&(t.linesBefore=3),typeof t.linesAfter!="number"&&(t.linesAfter=2);for(var r=/\r?\n|\r|\0/g,i=[0],n=[],a,o=-1;a=r.exec(e.buffer);)n.push(a.index),i.push(a.index+a[0].length),e.position<=a.index&&o<0&&(o=i.length-2);o<0&&(o=i.length-1);var s="",l,c,h=Math.min(e.line+t.linesAfter,n.length).toString().length,u=t.maxLength-(t.indent+h+3);for(l=1;l<=t.linesBefore&&!(o-l<0);l++)c=wn(e.buffer,i[o-l],n[o-l],e.position-(i[o]-i[o-l]),u),s=Ct.repeat(" ",t.indent)+vn((e.line-l+1).toString(),h)+" | "+c.str+` +`+s;for(c=wn(e.buffer,i[o],n[o],e.position,u),s+=Ct.repeat(" ",t.indent)+vn((e.line+1).toString(),h)+" | "+c.str+` +`,s+=Ct.repeat("-",t.indent+h+3+c.pos)+`^ +`,l=1;l<=t.linesAfter&&!(o+l>=n.length);l++)c=wn(e.buffer,i[o+l],n[o+l],e.position-(i[o]-i[o+l]),u),s+=Ct.repeat(" ",t.indent)+vn((e.line+l+1).toString(),h)+" | "+c.str+` +`;return s.replace(/\n$/,"")}d(jh,"makeSnippet");var Ey=jh,Fy=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],$y=["scalar","sequence","mapping"];function Uh(e){var t={};return e!==null&&Object.keys(e).forEach(function(r){e[r].forEach(function(i){t[String(i)]=r})}),t}d(Uh,"compileStyleAliases");function Yh(e,t){if(t=t||{},Object.keys(t).forEach(function(r){if(Fy.indexOf(r)===-1)throw new jt('Unknown option "'+r+'" is met in definition of "'+e+'" YAML type.')}),this.options=t,this.tag=e,this.kind=t.kind||null,this.resolve=t.resolve||function(){return!0},this.construct=t.construct||function(r){return r},this.instanceOf=t.instanceOf||null,this.predicate=t.predicate||null,this.represent=t.represent||null,this.representName=t.representName||null,this.defaultStyle=t.defaultStyle||null,this.multi=t.multi||!1,this.styleAliases=Uh(t.styleAliases||null),$y.indexOf(this.kind)===-1)throw new jt('Unknown kind "'+this.kind+'" is specified for "'+e+'" YAML type.')}d(Yh,"Type$1");var $t=Yh;function Cs(e,t){var r=[];return e[t].forEach(function(i){var n=r.length;r.forEach(function(a,o){a.tag===i.tag&&a.kind===i.kind&&a.multi===i.multi&&(n=o)}),r[n]=i}),r}d(Cs,"compileList");function Gh(){var e={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}},t,r;function i(n){n.multi?(e.multi[n.kind].push(n),e.multi.fallback.push(n)):e[n.kind][n.tag]=e.fallback[n.tag]=n}for(d(i,"collectType"),t=0,r=arguments.length;t=0?"0b"+e.toString(2):"-0b"+e.toString(2).slice(1)},"binary"),octal:d(function(e){return e>=0?"0o"+e.toString(8):"-0o"+e.toString(8).slice(1)},"octal"),decimal:d(function(e){return e.toString(10)},"decimal"),hexadecimal:d(function(e){return e>=0?"0x"+e.toString(16).toUpperCase():"-0x"+e.toString(16).toUpperCase().slice(1)},"hexadecimal")},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),Wy=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");function su(e){return!(e===null||!Wy.test(e)||e[e.length-1]==="_")}d(su,"resolveYamlFloat");function ou(e){var t,r;return t=e.replace(/_/g,"").toLowerCase(),r=t[0]==="-"?-1:1,"+-".indexOf(t[0])>=0&&(t=t.slice(1)),t===".inf"?r===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:t===".nan"?NaN:r*parseFloat(t,10)}d(ou,"constructYamlFloat");var Hy=/^[-+]?[0-9]+e/;function lu(e,t){var r;if(isNaN(e))switch(t){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===e)switch(t){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===e)switch(t){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(Ct.isNegativeZero(e))return"-0.0";return r=e.toString(10),Hy.test(r)?r.replace("e",".e"):r}d(lu,"representYamlFloat");function cu(e){return Object.prototype.toString.call(e)==="[object Number]"&&(e%1!==0||Ct.isNegativeZero(e))}d(cu,"isFloat");var jy=new $t("tag:yaml.org,2002:float",{kind:"scalar",resolve:su,construct:ou,predicate:cu,represent:lu,defaultStyle:"lowercase"}),hu=Py.extend({implicit:[Ny,zy,qy,jy]}),Uy=hu,uu=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),fu=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");function pu(e){return e===null?!1:uu.exec(e)!==null||fu.exec(e)!==null}d(pu,"resolveYamlTimestamp");function du(e){var t,r,i,n,a,o,s,l=0,c=null,h,u,f;if(t=uu.exec(e),t===null&&(t=fu.exec(e)),t===null)throw new Error("Date resolve error");if(r=+t[1],i=+t[2]-1,n=+t[3],!t[4])return new Date(Date.UTC(r,i,n));if(a=+t[4],o=+t[5],s=+t[6],t[7]){for(l=t[7].slice(0,3);l.length<3;)l+="0";l=+l}return t[9]&&(h=+t[10],u=+(t[11]||0),c=(h*60+u)*6e4,t[9]==="-"&&(c=-c)),f=new Date(Date.UTC(r,i,n,a,o,s,l)),c&&f.setTime(f.getTime()-c),f}d(du,"constructYamlTimestamp");function gu(e){return e.toISOString()}d(gu,"representYamlTimestamp");var Yy=new $t("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:pu,construct:du,instanceOf:Date,represent:gu});function mu(e){return e==="<<"||e===null}d(mu,"resolveYamlMerge");var Gy=new $t("tag:yaml.org,2002:merge",{kind:"scalar",resolve:mu}),_o=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= +\r`;function yu(e){if(e===null)return!1;var t,r,i=0,n=e.length,a=_o;for(r=0;r64)){if(t<0)return!1;i+=6}return i%8===0}d(yu,"resolveYamlBinary");function xu(e){var t,r,i=e.replace(/[\r\n=]/g,""),n=i.length,a=_o,o=0,s=[];for(t=0;t>16&255),s.push(o>>8&255),s.push(o&255)),o=o<<6|a.indexOf(i.charAt(t));return r=n%4*6,r===0?(s.push(o>>16&255),s.push(o>>8&255),s.push(o&255)):r===18?(s.push(o>>10&255),s.push(o>>2&255)):r===12&&s.push(o>>4&255),new Uint8Array(s)}d(xu,"constructYamlBinary");function bu(e){var t="",r=0,i,n,a=e.length,o=_o;for(i=0;i>18&63],t+=o[r>>12&63],t+=o[r>>6&63],t+=o[r&63]),r=(r<<8)+e[i];return n=a%3,n===0?(t+=o[r>>18&63],t+=o[r>>12&63],t+=o[r>>6&63],t+=o[r&63]):n===2?(t+=o[r>>10&63],t+=o[r>>4&63],t+=o[r<<2&63],t+=o[64]):n===1&&(t+=o[r>>2&63],t+=o[r<<4&63],t+=o[64],t+=o[64]),t}d(bu,"representYamlBinary");function _u(e){return Object.prototype.toString.call(e)==="[object Uint8Array]"}d(_u,"isBinary");var Vy=new $t("tag:yaml.org,2002:binary",{kind:"scalar",resolve:yu,construct:xu,predicate:_u,represent:bu}),Xy=Object.prototype.hasOwnProperty,Zy=Object.prototype.toString;function Cu(e){if(e===null)return!0;var t=[],r,i,n,a,o,s=e;for(r=0,i=s.length;r>10)+55296,(e-65536&1023)+56320)}d(Ru,"charFromCodepoint");var Ou=new Array(256),Iu=new Array(256);for(Xe=0;Xe<256;Xe++)Ou[Xe]=vs(Xe)?1:0,Iu[Xe]=vs(Xe);var Xe;function Pu(e,t){this.input=e,this.filename=t.filename||null,this.schema=t.schema||Lu,this.onWarning=t.onWarning||null,this.legacy=t.legacy||!1,this.json=t.json||!1,this.listener=t.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=e.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}d(Pu,"State$1");function Co(e,t){var r={name:e.filename,buffer:e.input.slice(0,-1),position:e.position,line:e.line,column:e.position-e.lineStart};return r.snippet=Ey(r),new jt(t,r)}d(Co,"generateError");function G(e,t){throw Co(e,t)}d(G,"throwError");function $i(e,t){e.onWarning&&e.onWarning.call(null,Co(e,t))}d($i,"throwWarning");var Gl={YAML:d(function(t,r,i){var n,a,o;t.version!==null&&G(t,"duplication of %YAML directive"),i.length!==1&&G(t,"YAML directive accepts exactly one argument"),n=/^([0-9]+)\.([0-9]+)$/.exec(i[0]),n===null&&G(t,"ill-formed argument of the YAML directive"),a=parseInt(n[1],10),o=parseInt(n[2],10),a!==1&&G(t,"unacceptable YAML version of the document"),t.version=i[0],t.checkLineBreaks=o<2,o!==1&&o!==2&&$i(t,"unsupported YAML version of the document")},"handleYamlDirective"),TAG:d(function(t,r,i){var n,a;i.length!==2&&G(t,"TAG directive accepts exactly two arguments"),n=i[0],a=i[1],Mu.test(n)||G(t,"ill-formed tag handle (first argument) of the TAG directive"),He.call(t.tagMap,n)&&G(t,'there is a previously declared suffix for "'+n+'" tag handle'),Eu.test(a)||G(t,"ill-formed tag prefix (second argument) of the TAG directive");try{a=decodeURIComponent(a)}catch{G(t,"tag prefix is malformed: "+a)}t.tagMap[n]=a},"handleTagDirective")};function Me(e,t,r,i){var n,a,o,s;if(t1&&(e.result+=Ct.repeat(` +`,t-1))}d(xa,"writeFoldedLines");function Nu(e,t,r){var i,n,a,o,s,l,c,h,u=e.kind,f=e.result,p;if(p=e.input.charCodeAt(e.position),Pt(p)||er(p)||p===35||p===38||p===42||p===33||p===124||p===62||p===39||p===34||p===37||p===64||p===96||(p===63||p===45)&&(n=e.input.charCodeAt(e.position+1),Pt(n)||r&&er(n)))return!1;for(e.kind="scalar",e.result="",a=o=e.position,s=!1;p!==0;){if(p===58){if(n=e.input.charCodeAt(e.position+1),Pt(n)||r&&er(n))break}else if(p===35){if(i=e.input.charCodeAt(e.position-1),Pt(i))break}else{if(e.position===e.lineStart&&Vi(e)||r&&er(p))break;if(le(p))if(l=e.line,c=e.lineStart,h=e.lineIndent,xt(e,!1,-1),e.lineIndent>=t){s=!0,p=e.input.charCodeAt(e.position);continue}else{e.position=o,e.line=l,e.lineStart=c,e.lineIndent=h;break}}s&&(Me(e,a,o,!1),xa(e,e.line-l),a=o=e.position,s=!1),We(p)||(o=e.position+1),p=e.input.charCodeAt(++e.position)}return Me(e,a,o,!1),e.result?!0:(e.kind=u,e.result=f,!1)}d(Nu,"readPlainScalar");function zu(e,t){var r,i,n;if(r=e.input.charCodeAt(e.position),r!==39)return!1;for(e.kind="scalar",e.result="",e.position++,i=n=e.position;(r=e.input.charCodeAt(e.position))!==0;)if(r===39)if(Me(e,i,e.position,!0),r=e.input.charCodeAt(++e.position),r===39)i=e.position,e.position++,n=e.position;else return!0;else le(r)?(Me(e,i,n,!0),xa(e,xt(e,!1,t)),i=n=e.position):e.position===e.lineStart&&Vi(e)?G(e,"unexpected end of the document within a single quoted scalar"):(e.position++,n=e.position);G(e,"unexpected end of the stream within a single quoted scalar")}d(zu,"readSingleQuotedScalar");function qu(e,t){var r,i,n,a,o,s;if(s=e.input.charCodeAt(e.position),s!==34)return!1;for(e.kind="scalar",e.result="",e.position++,r=i=e.position;(s=e.input.charCodeAt(e.position))!==0;){if(s===34)return Me(e,r,e.position,!0),e.position++,!0;if(s===92){if(Me(e,r,e.position,!0),s=e.input.charCodeAt(++e.position),le(s))xt(e,!1,t);else if(s<256&&Ou[s])e.result+=Iu[s],e.position++;else if((o=$u(s))>0){for(n=o,a=0;n>0;n--)s=e.input.charCodeAt(++e.position),(o=Fu(s))>=0?a=(a<<4)+o:G(e,"expected hexadecimal character");e.result+=Ru(a),e.position++}else G(e,"unknown escape sequence");r=i=e.position}else le(s)?(Me(e,r,i,!0),xa(e,xt(e,!1,t)),r=i=e.position):e.position===e.lineStart&&Vi(e)?G(e,"unexpected end of the document within a double quoted scalar"):(e.position++,i=e.position)}G(e,"unexpected end of the stream within a double quoted scalar")}d(qu,"readDoubleQuotedScalar");function Wu(e,t){var r=!0,i,n,a,o=e.tag,s,l=e.anchor,c,h,u,f,p,g=Object.create(null),m,y,x,b;if(b=e.input.charCodeAt(e.position),b===91)h=93,p=!1,s=[];else if(b===123)h=125,p=!0,s={};else return!1;for(e.anchor!==null&&(e.anchorMap[e.anchor]=s),b=e.input.charCodeAt(++e.position);b!==0;){if(xt(e,!0,t),b=e.input.charCodeAt(e.position),b===h)return e.position++,e.tag=o,e.anchor=l,e.kind=p?"mapping":"sequence",e.result=s,!0;r?b===44&&G(e,"expected the node content, but found ','"):G(e,"missed comma between flow collection entries"),y=m=x=null,u=f=!1,b===63&&(c=e.input.charCodeAt(e.position+1),Pt(c)&&(u=f=!0,e.position++,xt(e,!0,t))),i=e.line,n=e.lineStart,a=e.position,lr(e,t,In,!1,!0),y=e.tag,m=e.result,xt(e,!0,t),b=e.input.charCodeAt(e.position),(f||e.line===i)&&b===58&&(u=!0,b=e.input.charCodeAt(++e.position),xt(e,!0,t),lr(e,t,In,!1,!0),x=e.result),p?rr(e,s,g,y,m,x,i,n,a):u?s.push(rr(e,null,g,y,m,x,i,n,a)):s.push(m),xt(e,!0,t),b=e.input.charCodeAt(e.position),b===44?(r=!0,b=e.input.charCodeAt(++e.position)):r=!1}G(e,"unexpected end of the stream within a flow collection")}d(Wu,"readFlowCollection");function Hu(e,t){var r,i,n=Qa,a=!1,o=!1,s=t,l=0,c=!1,h,u;if(u=e.input.charCodeAt(e.position),u===124)i=!1;else if(u===62)i=!0;else return!1;for(e.kind="scalar",e.result="";u!==0;)if(u=e.input.charCodeAt(++e.position),u===43||u===45)Qa===n?n=u===43?Yl:rx:G(e,"repeat of a chomping mode identifier");else if((h=Du(u))>=0)h===0?G(e,"bad explicit indentation width of a block scalar; it cannot be less than one"):o?G(e,"repeat of an indentation width identifier"):(s=t+h-1,o=!0);else break;if(We(u)){do u=e.input.charCodeAt(++e.position);while(We(u));if(u===35)do u=e.input.charCodeAt(++e.position);while(!le(u)&&u!==0)}for(;u!==0;){for(ya(e),e.lineIndent=0,u=e.input.charCodeAt(e.position);(!o||e.lineIndents&&(s=e.lineIndent),le(u)){l++;continue}if(e.lineIndentt)&&l!==0)G(e,"bad indentation of a sequence entry");else if(e.lineIndentt)&&(y&&(o=e.line,s=e.lineStart,l=e.position),lr(e,t,Pn,!0,n)&&(y?g=e.result:m=e.result),y||(rr(e,u,f,p,g,m,o,s,l),p=g=m=null),xt(e,!0,-1),b=e.input.charCodeAt(e.position)),(e.line===a||e.lineIndent>t)&&b!==0)G(e,"bad indentation of a mapping entry");else if(e.lineIndentt?l=1:e.lineIndent===t?l=0:e.lineIndentt?l=1:e.lineIndent===t?l=0:e.lineIndent tag; it should be "scalar", not "'+e.kind+'"'),u=0,f=e.implicitTypes.length;u"),e.result!==null&&g.kind!==e.kind&&G(e,"unacceptable node kind for !<"+e.tag+'> tag; it should be "'+g.kind+'", not "'+e.kind+'"'),g.resolve(e.result,e.tag)?(e.result=g.construct(e.result,e.tag),e.anchor!==null&&(e.anchorMap[e.anchor]=e.result)):G(e,"cannot resolve a node with !<"+e.tag+"> explicit tag")}return e.listener!==null&&e.listener("close",e),e.tag!==null||e.anchor!==null||h}d(lr,"composeNode");function Vu(e){var t=e.position,r,i,n,a=!1,o;for(e.version=null,e.checkLineBreaks=e.legacy,e.tagMap=Object.create(null),e.anchorMap=Object.create(null);(o=e.input.charCodeAt(e.position))!==0&&(xt(e,!0,-1),o=e.input.charCodeAt(e.position),!(e.lineIndent>0||o!==37));){for(a=!0,o=e.input.charCodeAt(++e.position),r=e.position;o!==0&&!Pt(o);)o=e.input.charCodeAt(++e.position);for(i=e.input.slice(r,e.position),n=[],i.length<1&&G(e,"directive name must not be less than one character in length");o!==0;){for(;We(o);)o=e.input.charCodeAt(++e.position);if(o===35){do o=e.input.charCodeAt(++e.position);while(o!==0&&!le(o));break}if(le(o))break;for(r=e.position;o!==0&&!Pt(o);)o=e.input.charCodeAt(++e.position);n.push(e.input.slice(r,e.position))}o!==0&&ya(e),He.call(Gl,i)?Gl[i](e,i,n):$i(e,'unknown document directive "'+i+'"')}if(xt(e,!0,-1),e.lineIndent===0&&e.input.charCodeAt(e.position)===45&&e.input.charCodeAt(e.position+1)===45&&e.input.charCodeAt(e.position+2)===45?(e.position+=3,xt(e,!0,-1)):a&&G(e,"directives end mark is expected"),lr(e,e.lineIndent-1,Pn,!1,!0),xt(e,!0,-1),e.checkLineBreaks&&nx.test(e.input.slice(t,e.position))&&$i(e,"non-ASCII line breaks are interpreted as content"),e.documents.push(e.result),e.position===e.lineStart&&Vi(e)){e.input.charCodeAt(e.position)===46&&(e.position+=3,xt(e,!0,-1));return}if(e.position"u"&&(r=t,t=null);var i=wo(e,r);if(typeof t!="function")return i;for(var n=0,a=i.length;n=55296&&r<=56319&&t+1=56320&&i<=57343)?(r-55296)*1024+i-56320+65536:r}d(Sr,"codePointAt");function ko(e){var t=/^\n* /;return t.test(e)}d(ko,"needIndentIndicator");var uf=1,Ms=2,ff=3,pf=4,kr=5;function df(e,t,r,i,n,a,o,s){var l,c=0,h=null,u=!1,f=!1,p=i!==-1,g=-1,m=cf(Sr(e,0))&&hf(Sr(e,e.length-1));if(t||o)for(l=0;l=65536?l+=2:l++){if(c=Sr(e,l),!Hr(c))return kr;m=m&&Bs(c,h,s),h=c}else{for(l=0;l=65536?l+=2:l++){if(c=Sr(e,l),c===Di)u=!0,p&&(f=f||l-g-1>i&&e[g+1]!==" ",g=l);else if(!Hr(c))return kr;m=m&&Bs(c,h,s),h=c}f=f||p&&l-g-1>i&&e[g+1]!==" "}return!u&&!f?m&&!o&&!n(e)?uf:a===Ri?kr:Ms:r>9&&ko(e)?kr:o?a===Ri?kr:Ms:f?pf:ff}d(df,"chooseScalarStyle");function gf(e,t,r,i,n){e.dump=function(){if(t.length===0)return e.quotingType===Ri?'""':"''";if(!e.noCompatMode&&(Sx.indexOf(t)!==-1||Tx.test(t)))return e.quotingType===Ri?'"'+t+'"':"'"+t+"'";var a=e.indent*Math.max(1,r),o=e.lineWidth===-1?-1:Math.max(Math.min(e.lineWidth,40),e.lineWidth-a),s=i||e.flowLevel>-1&&r>=e.flowLevel;function l(c){return lf(e,c)}switch(d(l,"testAmbiguity"),df(t,s,e.indent,o,l,e.quotingType,e.forceQuotes&&!i,n)){case uf:return t;case Ms:return"'"+t.replace(/'/g,"''")+"'";case ff:return"|"+Es(t,e.indent)+Fs(Ls(t,a));case pf:return">"+Es(t,e.indent)+Fs(Ls(mf(t,o),a));case kr:return'"'+yf(t)+'"';default:throw new jt("impossible error: invalid scalar style")}}()}d(gf,"writeScalar");function Es(e,t){var r=ko(e)?String(t):"",i=e[e.length-1]===` +`,n=i&&(e[e.length-2]===` +`||e===` +`),a=n?"+":i?"":"-";return r+a+` +`}d(Es,"blockHeader");function Fs(e){return e[e.length-1]===` +`?e.slice(0,-1):e}d(Fs,"dropEndingNewline");function mf(e,t){for(var r=/(\n+)([^\n]*)/g,i=function(){var c=e.indexOf(` +`);return c=c!==-1?c:e.length,r.lastIndex=c,$s(e.slice(0,c),t)}(),n=e[0]===` +`||e[0]===" ",a,o;o=r.exec(e);){var s=o[1],l=o[2];a=l[0]===" ",i+=s+(!n&&!a&&l!==""?` +`:"")+$s(l,t),n=a}return i}d(mf,"foldString");function $s(e,t){if(e===""||e[0]===" ")return e;for(var r=/ [^ ]/g,i,n=0,a,o=0,s=0,l="";i=r.exec(e);)s=i.index,s-n>t&&(a=o>n?o:s,l+=` +`+e.slice(n,a),n=a+1),o=s;return l+=` +`,e.length-n>t&&o>n?l+=e.slice(n,o)+` +`+e.slice(o+1):l+=e.slice(n),l.slice(1)}d($s,"foldLine");function yf(e){for(var t="",r=0,i,n=0;n=65536?n+=2:n++)r=Sr(e,n),i=Dt[r],!i&&Hr(r)?(t+=e[n],r>=65536&&(t+=e[n+1])):t+=i||sf(r);return t}d(yf,"escapeString");function xf(e,t,r){var i="",n=e.tag,a,o,s;for(a=0,o=r.length;a"u"&&_e(e,t,null,!1,!1))&&(i!==""&&(i+=","+(e.condenseFlow?"":" ")),i+=e.dump);e.tag=n,e.dump="["+i+"]"}d(xf,"writeFlowSequence");function Ds(e,t,r,i){var n="",a=e.tag,o,s,l;for(o=0,s=r.length;o"u"&&_e(e,t+1,null,!0,!0,!1,!0))&&((!i||n!=="")&&(n+=zn(e,t)),e.dump&&Di===e.dump.charCodeAt(0)?n+="-":n+="- ",n+=e.dump);e.tag=a,e.dump=n||"[]"}d(Ds,"writeBlockSequence");function bf(e,t,r){var i="",n=e.tag,a=Object.keys(r),o,s,l,c,h;for(o=0,s=a.length;o1024&&(h+="? "),h+=e.dump+(e.condenseFlow?'"':"")+":"+(e.condenseFlow?"":" "),_e(e,t,c,!1,!1)&&(h+=e.dump,i+=h));e.tag=n,e.dump="{"+i+"}"}d(bf,"writeFlowMapping");function _f(e,t,r,i){var n="",a=e.tag,o=Object.keys(r),s,l,c,h,u,f;if(e.sortKeys===!0)o.sort();else if(typeof e.sortKeys=="function")o.sort(e.sortKeys);else if(e.sortKeys)throw new jt("sortKeys must be a boolean or a function");for(s=0,l=o.length;s1024,u&&(e.dump&&Di===e.dump.charCodeAt(0)?f+="?":f+="? "),f+=e.dump,u&&(f+=zn(e,t)),_e(e,t+1,h,!0,u)&&(e.dump&&Di===e.dump.charCodeAt(0)?f+=":":f+=": ",f+=e.dump,n+=f));e.tag=a,e.dump=n||"{}"}d(_f,"writeBlockMapping");function Rs(e,t,r){var i,n,a,o,s,l;for(n=r?e.explicitTypes:e.implicitTypes,a=0,o=n.length;a tag resolver accepts not "'+l+'" style');e.dump=i}return!0}return!1}d(Rs,"detectType");function _e(e,t,r,i,n,a,o){e.tag=null,e.dump=r,Rs(e,r,!1)||Rs(e,r,!0);var s=Ku.call(e.dump),l=i,c;i&&(i=e.flowLevel<0||e.flowLevel>t);var h=s==="[object Object]"||s==="[object Array]",u,f;if(h&&(u=e.duplicates.indexOf(r),f=u!==-1),(e.tag!==null&&e.tag!=="?"||f||e.indent!==2&&t>0)&&(n=!1),f&&e.usedDuplicates[u])e.dump="*ref_"+u;else{if(h&&f&&!e.usedDuplicates[u]&&(e.usedDuplicates[u]=!0),s==="[object Object]")i&&Object.keys(e.dump).length!==0?(_f(e,t,e.dump,n),f&&(e.dump="&ref_"+u+e.dump)):(bf(e,t,e.dump),f&&(e.dump="&ref_"+u+" "+e.dump));else if(s==="[object Array]")i&&e.dump.length!==0?(e.noArrayIndent&&!o&&t>0?Ds(e,t-1,e.dump,n):Ds(e,t,e.dump,n),f&&(e.dump="&ref_"+u+e.dump)):(xf(e,t,e.dump),f&&(e.dump="&ref_"+u+" "+e.dump));else if(s==="[object String]")e.tag!=="?"&&gf(e,e.dump,t,a,l);else{if(s==="[object Undefined]")return!1;if(e.skipInvalid)return!1;throw new jt("unacceptable kind of an object to dump "+s)}e.tag!==null&&e.tag!=="?"&&(c=encodeURI(e.tag[0]==="!"?e.tag.slice(1):e.tag).replace(/!/g,"%21"),e.tag[0]==="!"?c="!"+c:c.slice(0,18)==="tag:yaml.org,2002:"?c="!!"+c.slice(18):c="!<"+c+">",e.dump=c+" "+e.dump)}return!0}d(_e,"writeNode");function Cf(e,t){var r=[],i=[],n,a;for(qn(e,r,i),n=0,a=i.length;n{const n=e.split(":");if(e.slice(0,1)==="@"){if(n.length<2||n.length>3)return null;i=n.shift().slice(1)}if(n.length>3||!n.length)return null;if(n.length>1){const s=n.pop(),l=n.pop(),c={provider:n.length>0?n[0]:i,prefix:l,name:s};return ts(c)?c:null}const a=n[0],o=a.split("-");if(o.length>1){const s={provider:i,prefix:o.shift(),name:o.join("-")};return ts(s)?s:null}if(r&&i===""){const s={provider:i,prefix:"",name:a};return ts(s,r)?s:null}return null},ts=(e,t)=>e?!!((e.provider===""||e.provider.match(Ja))&&(t&&e.prefix===""||e.prefix.match(Ja))&&e.name.match(Ja)):!1;function Ix(e,t){const r={};!e.hFlip!=!t.hFlip&&(r.hFlip=!0),!e.vFlip!=!t.vFlip&&(r.vFlip=!0);const i=((e.rotate||0)+(t.rotate||0))%4;return i&&(r.rotate=i),r}function Vl(e,t){const r=Ix(e,t);for(const i in $x)i in Wn?i in e&&!(i in r)&&(r[i]=Wn[i]):i in t?r[i]=t[i]:i in e&&(r[i]=e[i]);return r}function Px(e,t){const r=e.icons,i=e.aliases||Object.create(null),n=Object.create(null);function a(o){if(r[o])return n[o]=[];if(!(o in n)){n[o]=null;const s=i[o]&&i[o].parent,l=s&&a(s);l&&(n[o]=[s].concat(l))}return n[o]}return(t||Object.keys(r).concat(Object.keys(i))).forEach(a),n}function Xl(e,t,r){const i=e.icons,n=e.aliases||Object.create(null);let a={};function o(s){a=Vl(i[s]||n[s],a)}return o(t),r.forEach(o),Vl(e,a)}function Nx(e,t){if(e.icons[t])return Xl(e,t,[]);const r=Px(e,[t])[t];return r?Xl(e,t,r):null}const zx=/(-?[0-9.]*[0-9]+[0-9.]*)/g,qx=/^-?[0-9.]*[0-9]+[0-9.]*$/g;function Zl(e,t,r){if(t===1)return e;if(r=r||100,typeof e=="number")return Math.ceil(e*t*r)/r;if(typeof e!="string")return e;const i=e.split(zx);if(i===null||!i.length)return e;const n=[];let a=i.shift(),o=qx.test(a);for(;;){if(o){const s=parseFloat(a);isNaN(s)?n.push(a):n.push(Math.ceil(s*t*r)/r)}else n.push(a);if(a=i.shift(),a===void 0)return n.join("");o=!o}}function Wx(e,t="defs"){let r="";const i=e.indexOf("<"+t);for(;i>=0;){const n=e.indexOf(">",i),a=e.indexOf("",a);if(o===-1)break;r+=e.slice(n+1,a).trim(),e=e.slice(0,i).trim()+e.slice(o+1)}return{defs:r,content:e}}function Hx(e,t){return e?""+e+""+t:t}function jx(e,t,r){const i=Wx(e);return Hx(i.defs,t+i.content+r)}const Ux=e=>e==="unset"||e==="undefined"||e==="none";function Yx(e,t){const r={...wf,...e},i={...Rx,...t},n={left:r.left,top:r.top,width:r.width,height:r.height};let a=r.body;[r,i].forEach(m=>{const y=[],x=m.hFlip,b=m.vFlip;let _=m.rotate;x?b?_+=2:(y.push("translate("+(n.width+n.left).toString()+" "+(0-n.top).toString()+")"),y.push("scale(-1 1)"),n.top=n.left=0):b&&(y.push("translate("+(0-n.left).toString()+" "+(n.height+n.top).toString()+")"),y.push("scale(1 -1)"),n.top=n.left=0);let v;switch(_<0&&(_-=Math.floor(_/4)*4),_=_%4,_){case 1:v=n.height/2+n.top,y.unshift("rotate(90 "+v.toString()+" "+v.toString()+")");break;case 2:y.unshift("rotate(180 "+(n.width/2+n.left).toString()+" "+(n.height/2+n.top).toString()+")");break;case 3:v=n.width/2+n.left,y.unshift("rotate(-90 "+v.toString()+" "+v.toString()+")");break}_%2===1&&(n.left!==n.top&&(v=n.left,n.left=n.top,n.top=v),n.width!==n.height&&(v=n.width,n.width=n.height,n.height=v)),y.length&&(a=jx(a,'',""))});const o=i.width,s=i.height,l=n.width,c=n.height;let h,u;o===null?(u=s===null?"1em":s==="auto"?c:s,h=Zl(u,l/c)):(h=o==="auto"?l:o,u=s===null?Zl(h,c/l):s==="auto"?c:s);const f={},p=(m,y)=>{Ux(y)||(f[m]=y.toString())};p("width",h),p("height",u);const g=[n.left,n.top,l,c];return f.viewBox=g.join(" "),{attributes:f,viewBox:g,body:a}}const Gx=/\sid="(\S+)"/g,Vx="IconifyId"+Date.now().toString(16)+(Math.random()*16777216|0).toString(16);let Xx=0;function Zx(e,t=Vx){const r=[];let i;for(;i=Gx.exec(e);)r.push(i[1]);if(!r.length)return e;const n="suffix"+(Math.random()*16777216|Date.now()).toString(16);return r.forEach(a=>{const o=typeof t=="function"?t(a):t+(Xx++).toString(),s=a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");e=e.replace(new RegExp('([#;"])('+s+')([")]|\\.[a-z])',"g"),"$1"+o+n+"$3")}),e=e.replace(new RegExp(n,"g"),""),e}function Kx(e,t){let r=e.indexOf("xlink:")===-1?"":' xmlns:xlink="http://www.w3.org/1999/xlink"';for(const i in t)r+=" "+i+'="'+t[i]+'"';return'"+e+""}var Qx={body:'?',height:80,width:80},Os=new Map,vf=new Map,Jx=d(e=>{for(const t of e){if(!t.name)throw new Error('Invalid icon loader. Must have a "name" property with non-empty string value.');if($.debug("Registering icon pack:",t.name),"loader"in t)vf.set(t.name,t.loader);else if("icons"in t)Os.set(t.name,t.icons);else throw $.error("Invalid icon loader:",t),new Error('Invalid icon loader. Must have either "icons" or "loader" property.')}},"registerIconPacks"),tb=d(async(e,t)=>{const r=Ox(e,!0,t!==void 0);if(!r)throw new Error(`Invalid icon name: ${e}`);const i=r.prefix||t;if(!i)throw new Error(`Icon name must contain a prefix: ${e}`);let n=Os.get(i);if(!n){const o=vf.get(i);if(!o)throw new Error(`Icon set not found: ${r.prefix}`);try{n={...await o(),prefix:i},Os.set(i,n)}catch(s){throw $.error(s),new Error(`Failed to load icon set: ${r.prefix}`)}}const a=Nx(n,r.name);if(!a)throw new Error(`Icon not found: ${e}`);return a},"getRegisteredIconData"),ba=d(async(e,t)=>{let r;try{r=await tb(e,t==null?void 0:t.fallbackPrefix)}catch(a){$.error(a),r=Qx}const i=Yx(r,t);return Kx(Zx(i.body),i.attributes)},"getIconSVG"),So=d(({flowchart:e})=>{var n,a;const t=((n=e==null?void 0:e.subGraphTitleMargin)==null?void 0:n.top)??0,r=((a=e==null?void 0:e.subGraphTitleMargin)==null?void 0:a.bottom)??0,i=t+r;return{subGraphTitleTopMargin:t,subGraphTitleBottomMargin:r,subGraphTitleTotalMargin:i}},"getSubGraphTitleMargins"),To={},vt={};Object.defineProperty(vt,"__esModule",{value:!0});vt.BLANK_URL=vt.relativeFirstCharacters=vt.whitespaceEscapeCharsRegex=vt.urlSchemeRegex=vt.ctrlCharactersRegex=vt.htmlCtrlEntityRegex=vt.htmlEntitiesRegex=vt.invalidProtocolRegex=void 0;vt.invalidProtocolRegex=/^([^\w]*)(javascript|data|vbscript)/im;vt.htmlEntitiesRegex=/&#(\w+)(^\w|;)?/g;vt.htmlCtrlEntityRegex=/&(newline|tab);/gi;vt.ctrlCharactersRegex=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim;vt.urlSchemeRegex=/^.+(:|:)/gim;vt.whitespaceEscapeCharsRegex=/(\\|%5[cC])((%(6[eE]|72|74))|[nrt])/g;vt.relativeFirstCharacters=[".","/"];vt.BLANK_URL="about:blank";Object.defineProperty(To,"__esModule",{value:!0});var kf=To.sanitizeUrl=void 0,Ft=vt;function eb(e){return Ft.relativeFirstCharacters.indexOf(e[0])>-1}function rb(e){var t=e.replace(Ft.ctrlCharactersRegex,"");return t.replace(Ft.htmlEntitiesRegex,function(r,i){return String.fromCharCode(i)})}function ib(e){return URL.canParse(e)}function Kl(e){try{return decodeURIComponent(e)}catch{return e}}function nb(e){if(!e)return Ft.BLANK_URL;var t,r=Kl(e.trim());do r=rb(r).replace(Ft.htmlCtrlEntityRegex,"").replace(Ft.ctrlCharactersRegex,"").replace(Ft.whitespaceEscapeCharsRegex,"").trim(),r=Kl(r),t=r.match(Ft.ctrlCharactersRegex)||r.match(Ft.htmlEntitiesRegex)||r.match(Ft.htmlCtrlEntityRegex)||r.match(Ft.whitespaceEscapeCharsRegex);while(t&&t.length>0);var i=r;if(!i)return Ft.BLANK_URL;if(eb(i))return i;var n=i.trimStart(),a=n.match(Ft.urlSchemeRegex);if(!a)return i;var o=a[0].toLowerCase().trim();if(Ft.invalidProtocolRegex.test(o))return Ft.BLANK_URL;var s=n.replace(/\\/g,"/");if(o==="mailto:"||o.includes("://"))return s;if(o==="http:"||o==="https:"){if(!ib(s))return Ft.BLANK_URL;var l=new URL(s);return l.protocol=l.protocol.toLowerCase(),l.hostname=l.hostname.toLowerCase(),l.toString()}return s}kf=To.sanitizeUrl=nb;var ab={value:()=>{}};function Sf(){for(var e=0,t=arguments.length,r={},i;e=0&&(i=r.slice(n+1),r=r.slice(0,n)),r&&!t.hasOwnProperty(r))throw new Error("unknown type: "+r);return{type:r,name:i}})}kn.prototype=Sf.prototype={constructor:kn,on:function(e,t){var r=this._,i=sb(e+"",r),n,a=-1,o=i.length;if(arguments.length<2){for(;++a0)for(var r=new Array(n),i=0,n,a;i=0&&(t=e.slice(0,r))!=="xmlns"&&(e=e.slice(r+1)),Jl.hasOwnProperty(t)?{space:Jl[t],local:e}:e}function lb(e){return function(){var t=this.ownerDocument,r=this.namespaceURI;return r===Is&&t.documentElement.namespaceURI===Is?t.createElement(e):t.createElementNS(r,e)}}function cb(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}function Tf(e){var t=_a(e);return(t.local?cb:lb)(t)}function hb(){}function Lo(e){return e==null?hb:function(){return this.querySelector(e)}}function ub(e){typeof e!="function"&&(e=Lo(e));for(var t=this._groups,r=t.length,i=new Array(r),n=0;n=_&&(_=b+1);!(k=y[_])&&++_=0;)(o=i[n])&&(a&&o.compareDocumentPosition(a)^4&&a.parentNode.insertBefore(o,a),a=o);return this}function Ob(e){e||(e=Ib);function t(u,f){return u&&f?e(u.__data__,f.__data__):!u-!f}for(var r=this._groups,i=r.length,n=new Array(i),a=0;at?1:e>=t?0:NaN}function Pb(){var e=arguments[0];return arguments[0]=this,e.apply(null,arguments),this}function Nb(){return Array.from(this)}function zb(){for(var e=this._groups,t=0,r=e.length;t1?this.each((t==null?Kb:typeof t=="function"?Jb:Qb)(e,t,r??"")):jr(this.node(),e)}function jr(e,t){return e.style.getPropertyValue(t)||Ef(e).getComputedStyle(e,null).getPropertyValue(t)}function e1(e){return function(){delete this[e]}}function r1(e,t){return function(){this[e]=t}}function i1(e,t){return function(){var r=t.apply(this,arguments);r==null?delete this[e]:this[e]=r}}function n1(e,t){return arguments.length>1?this.each((t==null?e1:typeof t=="function"?i1:r1)(e,t)):this.node()[e]}function Ff(e){return e.trim().split(/^|\s+/)}function Ao(e){return e.classList||new $f(e)}function $f(e){this._node=e,this._names=Ff(e.getAttribute("class")||"")}$f.prototype={add:function(e){var t=this._names.indexOf(e);t<0&&(this._names.push(e),this._node.setAttribute("class",this._names.join(" ")))},remove:function(e){var t=this._names.indexOf(e);t>=0&&(this._names.splice(t,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(e){return this._names.indexOf(e)>=0}};function Df(e,t){for(var r=Ao(e),i=-1,n=t.length;++i=0&&(r=t.slice(i+1),t=t.slice(0,i)),{type:t,name:r}})}function F1(e){return function(){var t=this.__on;if(t){for(var r=0,i=-1,n=t.length,a;r>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):r===8?hn(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):r===4?hn(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=q1.exec(e))?new Ut(t[1],t[2],t[3],1):(t=W1.exec(e))?new Ut(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=H1.exec(e))?hn(t[1],t[2],t[3],t[4]):(t=j1.exec(e))?hn(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=U1.exec(e))?sc(t[1],t[2]/100,t[3]/100,1):(t=Y1.exec(e))?sc(t[1],t[2]/100,t[3]/100,t[4]):tc.hasOwnProperty(e)?ic(tc[e]):e==="transparent"?new Ut(NaN,NaN,NaN,0):null}function ic(e){return new Ut(e>>16&255,e>>8&255,e&255,1)}function hn(e,t,r,i){return i<=0&&(e=t=r=NaN),new Ut(e,t,r,i)}function X1(e){return e instanceof Zi||(e=Ni(e)),e?(e=e.rgb(),new Ut(e.r,e.g,e.b,e.opacity)):new Ut}function Ps(e,t,r,i){return arguments.length===1?X1(e):new Ut(e,t,r,i??1)}function Ut(e,t,r,i){this.r=+e,this.g=+t,this.b=+r,this.opacity=+i}Bo(Ut,Ps,Pf(Zi,{brighter(e){return e=e==null?jn:Math.pow(jn,e),new Ut(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?Ii:Math.pow(Ii,e),new Ut(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new Ut(ar(this.r),ar(this.g),ar(this.b),Un(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:nc,formatHex:nc,formatHex8:Z1,formatRgb:ac,toString:ac}));function nc(){return`#${ir(this.r)}${ir(this.g)}${ir(this.b)}`}function Z1(){return`#${ir(this.r)}${ir(this.g)}${ir(this.b)}${ir((isNaN(this.opacity)?1:this.opacity)*255)}`}function ac(){const e=Un(this.opacity);return`${e===1?"rgb(":"rgba("}${ar(this.r)}, ${ar(this.g)}, ${ar(this.b)}${e===1?")":`, ${e})`}`}function Un(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function ar(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function ir(e){return e=ar(e),(e<16?"0":"")+e.toString(16)}function sc(e,t,r,i){return i<=0?e=t=r=NaN:r<=0||r>=1?e=t=NaN:t<=0&&(e=NaN),new oe(e,t,r,i)}function Nf(e){if(e instanceof oe)return new oe(e.h,e.s,e.l,e.opacity);if(e instanceof Zi||(e=Ni(e)),!e)return new oe;if(e instanceof oe)return e;e=e.rgb();var t=e.r/255,r=e.g/255,i=e.b/255,n=Math.min(t,r,i),a=Math.max(t,r,i),o=NaN,s=a-n,l=(a+n)/2;return s?(t===a?o=(r-i)/s+(r0&&l<1?0:o,new oe(o,s,l,e.opacity)}function K1(e,t,r,i){return arguments.length===1?Nf(e):new oe(e,t,r,i??1)}function oe(e,t,r,i){this.h=+e,this.s=+t,this.l=+r,this.opacity=+i}Bo(oe,K1,Pf(Zi,{brighter(e){return e=e==null?jn:Math.pow(jn,e),new oe(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?Ii:Math.pow(Ii,e),new oe(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,r=this.l,i=r+(r<.5?r:1-r)*t,n=2*r-i;return new Ut(es(e>=240?e-240:e+120,n,i),es(e,n,i),es(e<120?e+240:e-120,n,i),this.opacity)},clamp(){return new oe(oc(this.h),un(this.s),un(this.l),Un(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const e=Un(this.opacity);return`${e===1?"hsl(":"hsla("}${oc(this.h)}, ${un(this.s)*100}%, ${un(this.l)*100}%${e===1?")":`, ${e})`}`}}));function oc(e){return e=(e||0)%360,e<0?e+360:e}function un(e){return Math.max(0,Math.min(1,e||0))}function es(e,t,r){return(e<60?t+(r-t)*e/60:e<180?r:e<240?t+(r-t)*(240-e)/60:t)*255}const Mo=e=>()=>e;function zf(e,t){return function(r){return e+r*t}}function Q1(e,t,r){return e=Math.pow(e,r),t=Math.pow(t,r)-e,r=1/r,function(i){return Math.pow(e+i*t,r)}}function JA(e,t){var r=t-e;return r?zf(e,r>180||r<-180?r-360*Math.round(r/360):r):Mo(isNaN(e)?t:e)}function J1(e){return(e=+e)==1?qf:function(t,r){return r-t?Q1(t,r,e):Mo(isNaN(t)?r:t)}}function qf(e,t){var r=t-e;return r?zf(e,r):Mo(isNaN(e)?t:e)}const lc=function e(t){var r=J1(t);function i(n,a){var o=r((n=Ps(n)).r,(a=Ps(a)).r),s=r(n.g,a.g),l=r(n.b,a.b),c=qf(n.opacity,a.opacity);return function(h){return n.r=o(h),n.g=s(h),n.b=l(h),n.opacity=c(h),n+""}}return i.gamma=e,i}(1);function ze(e,t){return e=+e,t=+t,function(r){return e*(1-r)+t*r}}var Ns=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,rs=new RegExp(Ns.source,"g");function t_(e){return function(){return e}}function e_(e){return function(t){return e(t)+""}}function r_(e,t){var r=Ns.lastIndex=rs.lastIndex=0,i,n,a,o=-1,s=[],l=[];for(e=e+"",t=t+"";(i=Ns.exec(e))&&(n=rs.exec(t));)(a=n.index)>r&&(a=t.slice(r,a),s[o]?s[o]+=a:s[++o]=a),(i=i[0])===(n=n[0])?s[o]?s[o]+=n:s[++o]=n:(s[++o]=null,l.push({i:o,x:ze(i,n)})),r=rs.lastIndex;return r180?h+=360:h-c>180&&(c+=360),f.push({i:u.push(n(u)+"rotate(",null,i)-2,x:ze(c,h)})):h&&u.push(n(u)+"rotate("+h+i)}function s(c,h,u,f){c!==h?f.push({i:u.push(n(u)+"skewX(",null,i)-2,x:ze(c,h)}):h&&u.push(n(u)+"skewX("+h+i)}function l(c,h,u,f,p,g){if(c!==u||h!==f){var m=p.push(n(p)+"scale(",null,",",null,")");g.push({i:m-4,x:ze(c,u)},{i:m-2,x:ze(h,f)})}else(u!==1||f!==1)&&p.push(n(p)+"scale("+u+","+f+")")}return function(c,h){var u=[],f=[];return c=e(c),h=e(h),a(c.translateX,c.translateY,h.translateX,h.translateY,u,f),o(c.rotate,h.rotate,u,f),s(c.skewX,h.skewX,u,f),l(c.scaleX,c.scaleY,h.scaleX,h.scaleY,u,f),c=h=null,function(p){for(var g=-1,m=f.length,y;++g=0&&e._call.call(void 0,t),e=e._next;--Ur}function hc(){cr=(Gn=zi.now())+Ca,Ur=_i=0;try{l_()}finally{Ur=0,h_(),cr=0}}function c_(){var e=zi.now(),t=e-Gn;t>jf&&(Ca-=t,Gn=e)}function h_(){for(var e,t=Yn,r,i=1/0;t;)t._call?(i>t._time&&(i=t._time),e=t,t=t._next):(r=t._next,t._next=null,t=e?e._next=r:Yn=r);Ci=e,qs(i)}function qs(e){if(!Ur){_i&&(_i=clearTimeout(_i));var t=e-cr;t>24?(e<1/0&&(_i=setTimeout(hc,e-zi.now()-Ca)),fi&&(fi=clearInterval(fi))):(fi||(Gn=zi.now(),fi=setInterval(c_,jf)),Ur=1,Uf(hc))}}function uc(e,t,r){var i=new Vn;return t=t==null?0:+t,i.restart(n=>{i.stop(),e(n+t)},t,r),i}var u_=Sf("start","end","cancel","interrupt"),f_=[],Gf=0,fc=1,Ws=2,Sn=3,pc=4,Hs=5,Tn=6;function wa(e,t,r,i,n,a){var o=e.__transition;if(!o)e.__transition={};else if(r in o)return;p_(e,r,{name:t,index:i,group:n,on:u_,tween:f_,time:a.time,delay:a.delay,duration:a.duration,ease:a.ease,timer:null,state:Gf})}function Fo(e,t){var r=ue(e,t);if(r.state>Gf)throw new Error("too late; already scheduled");return r}function Ce(e,t){var r=ue(e,t);if(r.state>Sn)throw new Error("too late; already running");return r}function ue(e,t){var r=e.__transition;if(!r||!(r=r[t]))throw new Error("transition not found");return r}function p_(e,t,r){var i=e.__transition,n;i[t]=r,r.timer=Yf(a,0,r.time);function a(c){r.state=fc,r.timer.restart(o,r.delay,r.time),r.delay<=c&&o(c-r.delay)}function o(c){var h,u,f,p;if(r.state!==fc)return l();for(h in i)if(p=i[h],p.name===r.name){if(p.state===Sn)return uc(o);p.state===pc?(p.state=Tn,p.timer.stop(),p.on.call("interrupt",e,e.__data__,p.index,p.group),delete i[h]):+hWs&&i.state=0&&(t=t.slice(0,r)),!t||t==="start"})}function j_(e,t,r){var i,n,a=H_(t)?Fo:Ce;return function(){var o=a(this,e),s=o.on;s!==i&&(n=(i=s).copy()).on(t,r),o.on=n}}function U_(e,t){var r=this._id;return arguments.length<2?ue(this.node(),r).on.on(e):this.each(j_(r,e,t))}function Y_(e){return function(){var t=this.parentNode;for(var r in this.__transition)if(+r!==e)return;t&&t.removeChild(this)}}function G_(){return this.on("end.remove",Y_(this._id))}function V_(e){var t=this._name,r=this._id;typeof e!="function"&&(e=Lo(e));for(var i=this._groups,n=i.length,a=new Array(n),o=0;o=0))throw new Error(`invalid digits: ${e}`);if(t>15)return Kf;const r=10**t;return function(i){this._+=i[0];for(let n=1,a=i.length;nKe)if(!(Math.abs(u*l-c*h)>Ke)||!a)this._append`L${this._x1=t},${this._y1=r}`;else{let p=i-o,g=n-s,m=l*l+c*c,y=p*p+g*g,x=Math.sqrt(m),b=Math.sqrt(f),_=a*Math.tan((js-Math.acos((m+f-y)/(2*x*b)))/2),v=_/b,k=_/x;Math.abs(v-1)>Ke&&this._append`L${t+v*h},${r+v*u}`,this._append`A${a},${a},0,0,${+(u*p>h*g)},${this._x1=t+k*l},${this._y1=r+k*c}`}}arc(t,r,i,n,a,o){if(t=+t,r=+r,i=+i,o=!!o,i<0)throw new Error(`negative radius: ${i}`);let s=i*Math.cos(n),l=i*Math.sin(n),c=t+s,h=r+l,u=1^o,f=o?n-a:a-n;this._x1===null?this._append`M${c},${h}`:(Math.abs(this._x1-c)>Ke||Math.abs(this._y1-h)>Ke)&&this._append`L${c},${h}`,i&&(f<0&&(f=f%Us+Us),f>b2?this._append`A${i},${i},0,1,${u},${t-s},${r-l}A${i},${i},0,1,${u},${this._x1=c},${this._y1=h}`:f>Ke&&this._append`A${i},${i},0,${+(f>=js)},${u},${this._x1=t+i*Math.cos(a)},${this._y1=r+i*Math.sin(a)}`)}rect(t,r,i,n){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+r}h${i=+i}v${+n}h${-i}Z`}toString(){return this._}}function wr(e){return function(){return e}}const tB=Math.abs,eB=Math.atan2,rB=Math.cos,iB=Math.max,nB=Math.min,aB=Math.sin,sB=Math.sqrt,dc=1e-12,Do=Math.PI,gc=Do/2,oB=2*Do;function lB(e){return e>1?0:e<-1?Do:Math.acos(e)}function cB(e){return e>=1?gc:e<=-1?-gc:Math.asin(e)}function w2(e){let t=3;return e.digits=function(r){if(!arguments.length)return t;if(r==null)t=null;else{const i=Math.floor(r);if(!(i>=0))throw new RangeError(`invalid digits: ${r}`);t=i}return e},()=>new C2(t)}function v2(e){return typeof e=="object"&&"length"in e?e:Array.from(e)}function Qf(e){this._context=e}Qf.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:this._context.lineTo(e,t);break}}};function Jf(e){return new Qf(e)}function k2(e){return e[0]}function S2(e){return e[1]}function T2(e,t){var r=wr(!0),i=null,n=Jf,a=null,o=w2(s);e=typeof e=="function"?e:e===void 0?k2:wr(e),t=typeof t=="function"?t:t===void 0?S2:wr(t);function s(l){var c,h=(l=v2(l)).length,u,f=!1,p;for(i==null&&(a=n(p=o())),c=0;c<=h;++c)!(c0)for(var i=e[0],n=t[0],a=e[r]-i,o=t[r]-n,s=-1,l;++s<=r;)l=s/r,this._basis.point(this._beta*e[s]+(1-this._beta)*(i+l*a),this._beta*t[s]+(1-this._beta)*(n+l*o));this._x=this._y=null,this._basis.lineEnd()},point:function(e,t){this._x.push(+e),this._y.push(+t)}};const E2=function e(t){function r(i){return t===1?new va(i):new np(i,t)}return r.beta=function(i){return e(+i)},r}(.85);function Zn(e,t,r){e._context.bezierCurveTo(e._x1+e._k*(e._x2-e._x0),e._y1+e._k*(e._y2-e._y0),e._x2+e._k*(e._x1-t),e._y2+e._k*(e._y1-r),e._x2,e._y2)}function Ro(e,t){this._context=e,this._k=(1-t)/6}Ro.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:Zn(this,this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2,this._x1=e,this._y1=t;break;case 2:this._point=3;default:Zn(this,e,t);break}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};const F2=function e(t){function r(i){return new Ro(i,t)}return r.tension=function(i){return e(+i)},r}(0);function Oo(e,t){this._context=e,this._k=(1-t)/6}Oo.prototype={areaStart:je,areaEnd:je,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x3,this._y3),this._context.closePath();break}case 2:{this._context.lineTo(this._x3,this._y3),this._context.closePath();break}case 3:{this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5);break}}},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x3=e,this._y3=t;break;case 1:this._point=2,this._context.moveTo(this._x4=e,this._y4=t);break;case 2:this._point=3,this._x5=e,this._y5=t;break;default:Zn(this,e,t);break}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};const $2=function e(t){function r(i){return new Oo(i,t)}return r.tension=function(i){return e(+i)},r}(0);function Io(e,t){this._context=e,this._k=(1-t)/6}Io.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Zn(this,e,t);break}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};const D2=function e(t){function r(i){return new Io(i,t)}return r.tension=function(i){return e(+i)},r}(0);function Po(e,t,r){var i=e._x1,n=e._y1,a=e._x2,o=e._y2;if(e._l01_a>dc){var s=2*e._l01_2a+3*e._l01_a*e._l12_a+e._l12_2a,l=3*e._l01_a*(e._l01_a+e._l12_a);i=(i*s-e._x0*e._l12_2a+e._x2*e._l01_2a)/l,n=(n*s-e._y0*e._l12_2a+e._y2*e._l01_2a)/l}if(e._l23_a>dc){var c=2*e._l23_2a+3*e._l23_a*e._l12_a+e._l12_2a,h=3*e._l23_a*(e._l23_a+e._l12_a);a=(a*c+e._x1*e._l23_2a-t*e._l12_2a)/h,o=(o*c+e._y1*e._l23_2a-r*e._l12_2a)/h}e._context.bezierCurveTo(i,n,a,o,e._x2,e._y2)}function ap(e,t){this._context=e,this._alpha=t}ap.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){if(e=+e,t=+t,this._point){var r=this._x2-e,i=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+i*i,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3;default:Po(this,e,t);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};const R2=function e(t){function r(i){return t?new ap(i,t):new Ro(i,0)}return r.alpha=function(i){return e(+i)},r}(.5);function sp(e,t){this._context=e,this._alpha=t}sp.prototype={areaStart:je,areaEnd:je,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x3,this._y3),this._context.closePath();break}case 2:{this._context.lineTo(this._x3,this._y3),this._context.closePath();break}case 3:{this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5);break}}},point:function(e,t){if(e=+e,t=+t,this._point){var r=this._x2-e,i=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+i*i,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=e,this._y3=t;break;case 1:this._point=2,this._context.moveTo(this._x4=e,this._y4=t);break;case 2:this._point=3,this._x5=e,this._y5=t;break;default:Po(this,e,t);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};const O2=function e(t){function r(i){return t?new sp(i,t):new Oo(i,0)}return r.alpha=function(i){return e(+i)},r}(.5);function op(e,t){this._context=e,this._alpha=t}op.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){if(e=+e,t=+t,this._point){var r=this._x2-e,i=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+i*i,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Po(this,e,t);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};const I2=function e(t){function r(i){return t?new op(i,t):new Io(i,0)}return r.alpha=function(i){return e(+i)},r}(.5);function lp(e){this._context=e}lp.prototype={areaStart:je,areaEnd:je,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(e,t){e=+e,t=+t,this._point?this._context.lineTo(e,t):(this._point=1,this._context.moveTo(e,t))}};function P2(e){return new lp(e)}function mc(e){return e<0?-1:1}function yc(e,t,r){var i=e._x1-e._x0,n=t-e._x1,a=(e._y1-e._y0)/(i||n<0&&-0),o=(r-e._y1)/(n||i<0&&-0),s=(a*n+o*i)/(i+n);return(mc(a)+mc(o))*Math.min(Math.abs(a),Math.abs(o),.5*Math.abs(s))||0}function xc(e,t){var r=e._x1-e._x0;return r?(3*(e._y1-e._y0)/r-t)/2:t}function is(e,t,r){var i=e._x0,n=e._y0,a=e._x1,o=e._y1,s=(a-i)/3;e._context.bezierCurveTo(i+s,n+s*t,a-s,o-s*r,a,o)}function Kn(e){this._context=e}Kn.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:is(this,this._t0,xc(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){var r=NaN;if(e=+e,t=+t,!(e===this._x1&&t===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,is(this,xc(this,r=yc(this,e,t)),r);break;default:is(this,this._t0,r=yc(this,e,t));break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t,this._t0=r}}};function cp(e){this._context=new hp(e)}(cp.prototype=Object.create(Kn.prototype)).point=function(e,t){Kn.prototype.point.call(this,t,e)};function hp(e){this._context=e}hp.prototype={moveTo:function(e,t){this._context.moveTo(t,e)},closePath:function(){this._context.closePath()},lineTo:function(e,t){this._context.lineTo(t,e)},bezierCurveTo:function(e,t,r,i,n,a){this._context.bezierCurveTo(t,e,i,r,a,n)}};function N2(e){return new Kn(e)}function z2(e){return new cp(e)}function up(e){this._context=e}up.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var e=this._x,t=this._y,r=e.length;if(r)if(this._line?this._context.lineTo(e[0],t[0]):this._context.moveTo(e[0],t[0]),r===2)this._context.lineTo(e[1],t[1]);else for(var i=bc(e),n=bc(t),a=0,o=1;o=0;--t)n[t]=(o[t]-n[t+1])/a[t];for(a[r-1]=(e[r]+n[r-1])/2,t=0;t=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:{if(this._t<=0)this._context.lineTo(this._x,t),this._context.lineTo(e,t);else{var r=this._x*(1-this._t)+e*this._t;this._context.lineTo(r,this._y),this._context.lineTo(r,t)}break}}this._x=e,this._y=t}};function W2(e){return new ka(e,.5)}function H2(e){return new ka(e,0)}function j2(e){return new ka(e,1)}function wi(e,t,r){this.k=e,this.x=t,this.y=r}wi.prototype={constructor:wi,scale:function(e){return e===1?this:new wi(this.k*e,this.x,this.y)},translate:function(e,t){return e===0&t===0?this:new wi(this.k,this.x+this.k*e,this.y+this.k*t)},apply:function(e){return[e[0]*this.k+this.x,e[1]*this.k+this.y]},applyX:function(e){return e*this.k+this.x},applyY:function(e){return e*this.k+this.y},invert:function(e){return[(e[0]-this.x)/this.k,(e[1]-this.y)/this.k]},invertX:function(e){return(e-this.x)/this.k},invertY:function(e){return(e-this.y)/this.k},rescaleX:function(e){return e.copy().domain(e.range().map(this.invertX,this).map(e.invert,e))},rescaleY:function(e){return e.copy().domain(e.range().map(this.invertY,this).map(e.invert,e))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};wi.prototype;var fp=typeof global=="object"&&global&&global.Object===Object&&global,U2=typeof self=="object"&&self&&self.Object===Object&&self,we=fp||U2||Function("return this")(),Qn=we.Symbol,pp=Object.prototype,Y2=pp.hasOwnProperty,G2=pp.toString,pi=Qn?Qn.toStringTag:void 0;function V2(e){var t=Y2.call(e,pi),r=e[pi];try{e[pi]=void 0;var i=!0}catch{}var n=G2.call(e);return i&&(t?e[pi]=r:delete e[pi]),n}var X2=Object.prototype,Z2=X2.toString;function K2(e){return Z2.call(e)}var Q2="[object Null]",J2="[object Undefined]",_c=Qn?Qn.toStringTag:void 0;function Zr(e){return e==null?e===void 0?J2:Q2:_c&&_c in Object(e)?V2(e):K2(e)}function pr(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}var tC="[object AsyncFunction]",eC="[object Function]",rC="[object GeneratorFunction]",iC="[object Proxy]";function No(e){if(!pr(e))return!1;var t=Zr(e);return t==eC||t==rC||t==tC||t==iC}var ns=we["__core-js_shared__"],Cc=function(){var e=/[^.]+$/.exec(ns&&ns.keys&&ns.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function nC(e){return!!Cc&&Cc in e}var aC=Function.prototype,sC=aC.toString;function dr(e){if(e!=null){try{return sC.call(e)}catch{}try{return e+""}catch{}}return""}var oC=/[\\^$.*+?()[\]{}|]/g,lC=/^\[object .+?Constructor\]$/,cC=Function.prototype,hC=Object.prototype,uC=cC.toString,fC=hC.hasOwnProperty,pC=RegExp("^"+uC.call(fC).replace(oC,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function dC(e){if(!pr(e)||nC(e))return!1;var t=No(e)?pC:lC;return t.test(dr(e))}function gC(e,t){return e==null?void 0:e[t]}function gr(e,t){var r=gC(e,t);return dC(r)?r:void 0}var qi=gr(Object,"create");function mC(){this.__data__=qi?qi(null):{},this.size=0}function yC(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}var xC="__lodash_hash_undefined__",bC=Object.prototype,_C=bC.hasOwnProperty;function CC(e){var t=this.__data__;if(qi){var r=t[e];return r===xC?void 0:r}return _C.call(t,e)?t[e]:void 0}var wC=Object.prototype,vC=wC.hasOwnProperty;function kC(e){var t=this.__data__;return qi?t[e]!==void 0:vC.call(t,e)}var SC="__lodash_hash_undefined__";function TC(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=qi&&t===void 0?SC:t,this}function hr(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t-1}function $C(e,t){var r=this.__data__,i=Ta(r,e);return i<0?(++this.size,r.push([e,t])):r[i][1]=t,this}function $e(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t-1&&e%1==0&&e<=sw}function Ba(e){return e!=null&&xp(e.length)&&!No(e)}function ow(e){return Qi(e)&&Ba(e)}function lw(){return!1}var bp=typeof exports=="object"&&exports&&!exports.nodeType&&exports,Ac=bp&&typeof module=="object"&&module&&!module.nodeType&&module,cw=Ac&&Ac.exports===bp,Bc=cw?we.Buffer:void 0,hw=Bc?Bc.isBuffer:void 0,qo=hw||lw,uw="[object Object]",fw=Function.prototype,pw=Object.prototype,_p=fw.toString,dw=pw.hasOwnProperty,gw=_p.call(Object);function mw(e){if(!Qi(e)||Zr(e)!=uw)return!1;var t=mp(e);if(t===null)return!0;var r=dw.call(t,"constructor")&&t.constructor;return typeof r=="function"&&r instanceof r&&_p.call(r)==gw}var yw="[object Arguments]",xw="[object Array]",bw="[object Boolean]",_w="[object Date]",Cw="[object Error]",ww="[object Function]",vw="[object Map]",kw="[object Number]",Sw="[object Object]",Tw="[object RegExp]",Lw="[object Set]",Aw="[object String]",Bw="[object WeakMap]",Mw="[object ArrayBuffer]",Ew="[object DataView]",Fw="[object Float32Array]",$w="[object Float64Array]",Dw="[object Int8Array]",Rw="[object Int16Array]",Ow="[object Int32Array]",Iw="[object Uint8Array]",Pw="[object Uint8ClampedArray]",Nw="[object Uint16Array]",zw="[object Uint32Array]",mt={};mt[Fw]=mt[$w]=mt[Dw]=mt[Rw]=mt[Ow]=mt[Iw]=mt[Pw]=mt[Nw]=mt[zw]=!0;mt[yw]=mt[xw]=mt[Mw]=mt[bw]=mt[Ew]=mt[_w]=mt[Cw]=mt[ww]=mt[vw]=mt[kw]=mt[Sw]=mt[Tw]=mt[Lw]=mt[Aw]=mt[Bw]=!1;function qw(e){return Qi(e)&&xp(e.length)&&!!mt[Zr(e)]}function Ww(e){return function(t){return e(t)}}var Cp=typeof exports=="object"&&exports&&!exports.nodeType&&exports,Mi=Cp&&typeof module=="object"&&module&&!module.nodeType&&module,Hw=Mi&&Mi.exports===Cp,as=Hw&&fp.process,Mc=function(){try{var e=Mi&&Mi.require&&Mi.require("util").types;return e||as&&as.binding&&as.binding("util")}catch{}}(),Ec=Mc&&Mc.isTypedArray,Wo=Ec?Ww(Ec):qw;function Gs(e,t){if(!(t==="constructor"&&typeof e[t]=="function")&&t!="__proto__")return e[t]}var jw=Object.prototype,Uw=jw.hasOwnProperty;function Yw(e,t,r){var i=e[t];(!(Uw.call(e,t)&&Sa(i,r))||r===void 0&&!(t in e))&&zo(e,t,r)}function Gw(e,t,r,i){var n=!r;r||(r={});for(var a=-1,o=t.length;++a-1&&e%1==0&&e0){if(++t>=hv)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}var dv=pv(cv);function gv(e,t){return dv(ov(e,t,Sp),e+"")}function mv(e,t,r){if(!pr(r))return!1;var i=typeof t;return(i=="number"?Ba(r)&&wp(t,r.length):i=="string"&&t in r)?Sa(r[t],e):!1}function yv(e){return gv(function(t,r){var i=-1,n=r.length,a=n>1?r[n-1]:void 0,o=n>2?r[2]:void 0;for(a=e.length>3&&typeof a=="function"?(n--,a):void 0,o&&mv(r[0],r[1],o)&&(a=n<3?void 0:a,n=1),t=Object(t);++is.args);Fn(o),i=At(i,[...o])}else i=r.args;if(!i)return;let n=uo(e,t);const a="config";return i[a]!==void 0&&(n==="flowchart-v2"&&(n="flowchart"),i[n]=i[a],delete i[a]),i},"detectInit"),Tp=d(function(e,t=null){var r,i;try{const n=new RegExp(`[%]{2}(?![{]${Cv.source})(?=[}][%]{2}).* +`,"ig");e=e.trim().replace(n,"").replace(/'/gm,'"'),$.debug(`Detecting diagram directive${t!==null?" type:"+t:""} based on the text:${e}`);let a;const o=[];for(;(a=Ai.exec(e))!==null;)if(a.index===Ai.lastIndex&&Ai.lastIndex++,a&&!t||t&&((r=a[1])!=null&&r.match(t))||t&&((i=a[2])!=null&&i.match(t))){const s=a[1]?a[1]:a[2],l=a[3]?a[3].trim():a[4]?JSON.parse(a[4].trim()):null;o.push({type:s,args:l})}return o.length===0?{type:e,args:null}:o.length===1?o[0]:o}catch(n){return $.error(`ERROR: ${n.message} - Unable to parse directive type: '${t}' based on the text: '${e}'`),{type:void 0,args:null}}},"detectDirective"),vv=d(function(e){return e.replace(Ai,"")},"removeDirectives"),kv=d(function(e,t){for(const[r,i]of t.entries())if(i.match(e))return r;return-1},"isSubstringInArray");function Ho(e,t){if(!e)return t;const r=`curve${e.charAt(0).toUpperCase()+e.slice(1)}`;return _v[r]??t}d(Ho,"interpolateToCurve");function Lp(e,t){const r=e.trim();if(r)return t.securityLevel!=="loose"?kf(r):r}d(Lp,"formatUrl");var Sv=d((e,...t)=>{const r=e.split("."),i=r.length-1,n=r[i];let a=window;for(let o=0;o{r+=jo(n,t),t=n});const i=r/2;return Uo(e,i)}d(Ap,"traverseEdge");function Bp(e){return e.length===1?e[0]:Ap(e)}d(Bp,"calcLabelPosition");var $c=d((e,t=2)=>{const r=Math.pow(10,t);return Math.round(e*r)/r},"roundNumber"),Uo=d((e,t)=>{let r,i=t;for(const n of e){if(r){const a=jo(n,r);if(a=1)return{x:n.x,y:n.y};if(o>0&&o<1)return{x:$c((1-o)*r.x+o*n.x,5),y:$c((1-o)*r.y+o*n.y,5)}}}r=n}throw new Error("Could not find a suitable point for the given distance")},"calculatePoint"),Tv=d((e,t,r)=>{$.info(`our points ${JSON.stringify(t)}`),t[0]!==r&&(t=t.reverse());const n=Uo(t,25),a=e?10:5,o=Math.atan2(t[0].y-n.y,t[0].x-n.x),s={x:0,y:0};return s.x=Math.sin(o)*a+(t[0].x+n.x)/2,s.y=-Math.cos(o)*a+(t[0].y+n.y)/2,s},"calcCardinalityPosition");function Mp(e,t,r){const i=structuredClone(r);$.info("our points",i),t!=="start_left"&&t!=="start_right"&&i.reverse();const n=25+e,a=Uo(i,n),o=10+e*.5,s=Math.atan2(i[0].y-a.y,i[0].x-a.x),l={x:0,y:0};return t==="start_left"?(l.x=Math.sin(s+Math.PI)*o+(i[0].x+a.x)/2,l.y=-Math.cos(s+Math.PI)*o+(i[0].y+a.y)/2):t==="end_right"?(l.x=Math.sin(s-Math.PI)*o+(i[0].x+a.x)/2-5,l.y=-Math.cos(s-Math.PI)*o+(i[0].y+a.y)/2-5):t==="end_left"?(l.x=Math.sin(s)*o+(i[0].x+a.x)/2-5,l.y=-Math.cos(s)*o+(i[0].y+a.y)/2-5):(l.x=Math.sin(s)*o+(i[0].x+a.x)/2,l.y=-Math.cos(s)*o+(i[0].y+a.y)/2),l}d(Mp,"calcTerminalLabelPosition");function Ep(e){let t="",r="";for(const i of e)i!==void 0&&(i.startsWith("color:")||i.startsWith("text-align:")?r=r+i+";":t=t+i+";");return{style:t,labelStyle:r}}d(Ep,"getStylesFromArray");var Dc=0,Lv=d(()=>(Dc++,"id-"+Math.random().toString(36).substr(2,12)+"-"+Dc),"generateId");function Fp(e){let t="";const r="0123456789abcdef",i=r.length;for(let n=0;nFp(e.length),"random"),Bv=d(function(){return{x:0,y:0,fill:void 0,anchor:"start",style:"#666",width:100,height:100,textMargin:0,rx:0,ry:0,valign:void 0,text:""}},"getTextObj"),Mv=d(function(e,t){const r=t.text.replace(Xr.lineBreakRegex," "),[,i]=Ma(t.fontSize),n=e.append("text");n.attr("x",t.x),n.attr("y",t.y),n.style("text-anchor",t.anchor),n.style("font-family",t.fontFamily),n.style("font-size",i),n.style("font-weight",t.fontWeight),n.attr("fill",t.fill),t.class!==void 0&&n.attr("class",t.class);const a=n.append("tspan");return a.attr("x",t.x+t.textMargin*2),a.attr("fill",t.fill),a.text(r),n},"drawSimpleText"),Ev=Ki((e,t,r)=>{if(!e||(r=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",joinWith:"
"},r),Xr.lineBreakRegex.test(e)))return e;const i=e.split(" ").filter(Boolean),n=[];let a="";return i.forEach((o,s)=>{const l=Yr(`${o} `,r),c=Yr(a,r);if(l>t){const{hyphenatedStrings:f,remainingWord:p}=Fv(o,t,"-",r);n.push(a,...f),a=p}else c+l>=t?(n.push(a),a=o):a=[a,o].filter(Boolean).join(" ");s+1===i.length&&n.push(a)}),n.filter(o=>o!=="").join(r.joinWith)},(e,t,r)=>`${e}${t}${r.fontSize}${r.fontWeight}${r.fontFamily}${r.joinWith}`),Fv=Ki((e,t,r="-",i)=>{i=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:0},i);const n=[...e],a=[];let o="";return n.forEach((s,l)=>{const c=`${o}${s}`;if(Yr(c,i)>=t){const u=l+1,f=n.length===u,p=`${c}${r}`;a.push(f?c:p),o=""}else o=c}),{hyphenatedStrings:a,remainingWord:o}},(e,t,r="-",i)=>`${e}${t}${r}${i.fontSize}${i.fontWeight}${i.fontFamily}`);function $p(e,t){return Yo(e,t).height}d($p,"calculateTextHeight");function Yr(e,t){return Yo(e,t).width}d(Yr,"calculateTextWidth");var Yo=Ki((e,t)=>{const{fontSize:r=12,fontFamily:i="Arial",fontWeight:n=400}=t;if(!e)return{width:0,height:0};const[,a]=Ma(r),o=["sans-serif",i],s=e.split(Xr.lineBreakRegex),l=[],c=lt("body");if(!c.remove)return{width:0,height:0,lineHeight:0};const h=c.append("svg");for(const f of o){let p=0;const g={width:0,height:0,lineHeight:0};for(const m of s){const y=Bv();y.text=m||bv;const x=Mv(h,y).style("font-size",a).style("font-weight",n).style("font-family",f),b=(x._groups||x)[0][0].getBBox();if(b.width===0&&b.height===0)throw new Error("svg element not in render tree");g.width=Math.round(Math.max(g.width,b.width)),p=Math.round(b.height),g.height+=p,g.lineHeight=Math.round(Math.max(g.lineHeight,p))}l.push(g)}h.remove();const u=isNaN(l[1].height)||isNaN(l[1].width)||isNaN(l[1].lineHeight)||l[0].height>l[1].height&&l[0].width>l[1].width&&l[0].lineHeight>l[1].lineHeight?0:1;return l[u]},(e,t)=>`${e}${t.fontSize}${t.fontWeight}${t.fontFamily}`),Or,$v=(Or=class{constructor(t=!1,r){this.count=0,this.count=r?r.length:0,this.next=t?()=>this.count++:()=>Date.now()}},d(Or,"InitIDGenerator"),Or),pn,Dv=d(function(e){return pn=pn||document.createElement("div"),e=escape(e).replace(/%26/g,"&").replace(/%23/g,"#").replace(/%3B/g,";"),pn.innerHTML=e,unescape(pn.textContent)},"entityDecode");function Go(e){return"str"in e}d(Go,"isDetailedError");var Rv=d((e,t,r,i)=>{var a;if(!i)return;const n=(a=e.node())==null?void 0:a.getBBox();n&&e.append("text").text(i).attr("text-anchor","middle").attr("x",n.x+n.width/2).attr("y",-r).attr("class",t)},"insertTitle"),Ma=d(e=>{if(typeof e=="number")return[e,e+"px"];const t=parseInt(e??"",10);return Number.isNaN(t)?[void 0,void 0]:e===String(t)?[t,e+"px"]:[t,e]},"parseFontSize");function Vo(e,t){return xv({},e,t)}d(Vo,"cleanAndMerge");var ge={assignWithDepth:At,wrapLabel:Ev,calculateTextHeight:$p,calculateTextWidth:Yr,calculateTextDimensions:Yo,cleanAndMerge:Vo,detectInit:wv,detectDirective:Tp,isSubstringInArray:kv,interpolateToCurve:Ho,calcLabelPosition:Bp,calcCardinalityPosition:Tv,calcTerminalLabelPosition:Mp,formatUrl:Lp,getStylesFromArray:Ep,generateId:Lv,random:Av,runFunc:Sv,entityDecode:Dv,insertTitle:Rv,parseFontSize:Ma,InitIDGenerator:$v},Ov=d(function(e){let t=e;return t=t.replace(/style.*:\S*#.*;/g,function(r){return r.substring(0,r.length-1)}),t=t.replace(/classDef.*:\S*#.*;/g,function(r){return r.substring(0,r.length-1)}),t=t.replace(/#\w+;/g,function(r){const i=r.substring(1,r.length-1);return/^\+?\d+$/.test(i)?"fl°°"+i+"¶ß":"fl°"+i+"¶ß"}),t},"encodeEntities"),Qr=d(function(e){return e.replace(/fl°°/g,"&#").replace(/fl°/g,"&").replace(/¶ß/g,";")},"decodeEntities"),hB=d((e,t,{counter:r=0,prefix:i,suffix:n})=>`${i?`${i}_`:""}${e}_${t}_${r}${n?`_${n}`:""}`,"getEdgeId");function Nt(e){return e??null}d(Nt,"handleUndefinedAttr");function Xo(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}let mr=Xo();function Dp(e){mr=e}const Rp=/[&<>"']/,Iv=new RegExp(Rp.source,"g"),Op=/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,Pv=new RegExp(Op.source,"g"),Nv={"&":"&","<":"<",">":">",'"':""","'":"'"},Rc=e=>Nv[e];function Gt(e,t){if(t){if(Rp.test(e))return e.replace(Iv,Rc)}else if(Op.test(e))return e.replace(Pv,Rc);return e}const zv=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig;function qv(e){return e.replace(zv,(t,r)=>(r=r.toLowerCase(),r==="colon"?":":r.charAt(0)==="#"?r.charAt(1)==="x"?String.fromCharCode(parseInt(r.substring(2),16)):String.fromCharCode(+r.substring(1)):""))}const Wv=/(^|[^\[])\^/g;function ut(e,t){let r=typeof e=="string"?e:e.source;t=t||"";const i={replace:(n,a)=>{let o=typeof a=="string"?a:a.source;return o=o.replace(Wv,"$1"),r=r.replace(n,o),i},getRegex:()=>new RegExp(r,t)};return i}function Oc(e){try{e=encodeURI(e).replace(/%25/g,"%")}catch{return null}return e}const Ei={exec:()=>null};function Ic(e,t){const r=e.replace(/\|/g,(a,o,s)=>{let l=!1,c=o;for(;--c>=0&&s[c]==="\\";)l=!l;return l?"|":" |"}),i=r.split(/ \|/);let n=0;if(i[0].trim()||i.shift(),i.length>0&&!i[i.length-1].trim()&&i.pop(),t)if(i.length>t)i.splice(t);else for(;i.length{const a=n.match(/^\s+/);if(a===null)return n;const[o]=a;return o.length>=i.length?n.slice(i.length):n}).join(` +`)}class ra{constructor(t){gt(this,"options");gt(this,"rules");gt(this,"lexer");this.options=t||mr}space(t){const r=this.rules.block.newline.exec(t);if(r&&r[0].length>0)return{type:"space",raw:r[0]}}code(t){const r=this.rules.block.code.exec(t);if(r){const i=r[0].replace(/^ {1,4}/gm,"");return{type:"code",raw:r[0],codeBlockStyle:"indented",text:this.options.pedantic?i:di(i,` +`)}}}fences(t){const r=this.rules.block.fences.exec(t);if(r){const i=r[0],n=jv(i,r[3]||"");return{type:"code",raw:i,lang:r[2]?r[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):r[2],text:n}}}heading(t){const r=this.rules.block.heading.exec(t);if(r){let i=r[2].trim();if(/#$/.test(i)){const n=di(i,"#");(this.options.pedantic||!n||/ $/.test(n))&&(i=n.trim())}return{type:"heading",raw:r[0],depth:r[1].length,text:i,tokens:this.lexer.inline(i)}}}hr(t){const r=this.rules.block.hr.exec(t);if(r)return{type:"hr",raw:di(r[0],` +`)}}blockquote(t){const r=this.rules.block.blockquote.exec(t);if(r){let i=di(r[0],` +`).split(` +`),n="",a="";const o=[];for(;i.length>0;){let s=!1;const l=[];let c;for(c=0;c/.test(i[c]))l.push(i[c]),s=!0;else if(!s)l.push(i[c]);else break;i=i.slice(c);const h=l.join(` +`),u=h.replace(/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,` + $1`).replace(/^ {0,3}>[ \t]?/gm,"");n=n?`${n} +${h}`:h,a=a?`${a} +${u}`:u;const f=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(u,o,!0),this.lexer.state.top=f,i.length===0)break;const p=o[o.length-1];if((p==null?void 0:p.type)==="code")break;if((p==null?void 0:p.type)==="blockquote"){const g=p,m=g.raw+` +`+i.join(` +`),y=this.blockquote(m);o[o.length-1]=y,n=n.substring(0,n.length-g.raw.length)+y.raw,a=a.substring(0,a.length-g.text.length)+y.text;break}else if((p==null?void 0:p.type)==="list"){const g=p,m=g.raw+` +`+i.join(` +`),y=this.list(m);o[o.length-1]=y,n=n.substring(0,n.length-p.raw.length)+y.raw,a=a.substring(0,a.length-g.raw.length)+y.raw,i=m.substring(o[o.length-1].raw.length).split(` +`);continue}}return{type:"blockquote",raw:n,tokens:o,text:a}}}list(t){let r=this.rules.block.list.exec(t);if(r){let i=r[1].trim();const n=i.length>1,a={type:"list",raw:"",ordered:n,start:n?+i.slice(0,-1):"",loose:!1,items:[]};i=n?`\\d{1,9}\\${i.slice(-1)}`:`\\${i}`,this.options.pedantic&&(i=n?i:"[*+-]");const o=new RegExp(`^( {0,3}${i})((?:[ ][^\\n]*)?(?:\\n|$))`);let s=!1;for(;t;){let l=!1,c="",h="";if(!(r=o.exec(t))||this.rules.block.hr.test(t))break;c=r[0],t=t.substring(c.length);let u=r[2].split(` +`,1)[0].replace(/^\t+/,x=>" ".repeat(3*x.length)),f=t.split(` +`,1)[0],p=!u.trim(),g=0;if(this.options.pedantic?(g=2,h=u.trimStart()):p?g=r[1].length+1:(g=r[2].search(/[^ ]/),g=g>4?1:g,h=u.slice(g),g+=r[1].length),p&&/^ *$/.test(f)&&(c+=f+` +`,t=t.substring(f.length+1),l=!0),!l){const x=new RegExp(`^ {0,${Math.min(3,g-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),b=new RegExp(`^ {0,${Math.min(3,g-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),_=new RegExp(`^ {0,${Math.min(3,g-1)}}(?:\`\`\`|~~~)`),v=new RegExp(`^ {0,${Math.min(3,g-1)}}#`);for(;t;){const k=t.split(` +`,1)[0];if(f=k,this.options.pedantic&&(f=f.replace(/^ {1,4}(?=( {4})*[^ ])/g," ")),_.test(f)||v.test(f)||x.test(f)||b.test(t))break;if(f.search(/[^ ]/)>=g||!f.trim())h+=` +`+f.slice(g);else{if(p||u.search(/[^ ]/)>=4||_.test(u)||v.test(u)||b.test(u))break;h+=` +`+f}!p&&!f.trim()&&(p=!0),c+=k+` +`,t=t.substring(k.length+1),u=f.slice(g)}}a.loose||(s?a.loose=!0:/\n *\n *$/.test(c)&&(s=!0));let m=null,y;this.options.gfm&&(m=/^\[[ xX]\] /.exec(h),m&&(y=m[0]!=="[ ] ",h=h.replace(/^\[[ xX]\] +/,""))),a.items.push({type:"list_item",raw:c,task:!!m,checked:y,loose:!1,text:h,tokens:[]}),a.raw+=c}a.items[a.items.length-1].raw=a.items[a.items.length-1].raw.trimEnd(),a.items[a.items.length-1].text=a.items[a.items.length-1].text.trimEnd(),a.raw=a.raw.trimEnd();for(let l=0;lu.type==="space"),h=c.length>0&&c.some(u=>/\n.*\n/.test(u.raw));a.loose=h}if(a.loose)for(let l=0;l$/,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",a=r[3]?r[3].substring(1,r[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):r[3];return{type:"def",tag:i,raw:r[0],href:n,title:a}}}table(t){const r=this.rules.block.table.exec(t);if(!r||!/[:|]/.test(r[2]))return;const i=Ic(r[1]),n=r[2].replace(/^\||\| *$/g,"").split("|"),a=r[3]&&r[3].trim()?r[3].replace(/\n[ \t]*$/,"").split(` +`):[],o={type:"table",raw:r[0],header:[],align:[],rows:[]};if(i.length===n.length){for(const s of n)/^ *-+: *$/.test(s)?o.align.push("right"):/^ *:-+: *$/.test(s)?o.align.push("center"):/^ *:-+ *$/.test(s)?o.align.push("left"):o.align.push(null);for(let s=0;s({text:l,tokens:this.lexer.inline(l),header:!1,align:o.align[c]})));return o}}lheading(t){const r=this.rules.block.lheading.exec(t);if(r)return{type:"heading",raw:r[0],depth:r[2].charAt(0)==="="?1:2,text:r[1],tokens:this.lexer.inline(r[1])}}paragraph(t){const r=this.rules.block.paragraph.exec(t);if(r){const i=r[1].charAt(r[1].length-1)===` +`?r[1].slice(0,-1):r[1];return{type:"paragraph",raw:r[0],text:i,tokens:this.lexer.inline(i)}}}text(t){const r=this.rules.block.text.exec(t);if(r)return{type:"text",raw:r[0],text:r[0],tokens:this.lexer.inline(r[0])}}escape(t){const r=this.rules.inline.escape.exec(t);if(r)return{type:"escape",raw:r[0],text:Gt(r[1])}}tag(t){const r=this.rules.inline.tag.exec(t);if(r)return!this.lexer.state.inLink&&/^/i.test(r[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(r[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(r[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:r[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:r[0]}}link(t){const r=this.rules.inline.link.exec(t);if(r){const i=r[2].trim();if(!this.options.pedantic&&/^$/.test(i))return;const o=di(i.slice(0,-1),"\\");if((i.length-o.length)%2===0)return}else{const o=Hv(r[2],"()");if(o>-1){const l=(r[0].indexOf("!")===0?5:4)+r[1].length+o;r[2]=r[2].substring(0,o),r[0]=r[0].substring(0,l).trim(),r[3]=""}}let n=r[2],a="";if(this.options.pedantic){const o=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(n);o&&(n=o[1],a=o[3])}else a=r[3]?r[3].slice(1,-1):"";return n=n.trim(),/^$/.test(i)?n=n.slice(1):n=n.slice(1,-1)),Pc(r,{href:n&&n.replace(this.rules.inline.anyPunctuation,"$1"),title:a&&a.replace(this.rules.inline.anyPunctuation,"$1")},r[0],this.lexer)}}reflink(t,r){let i;if((i=this.rules.inline.reflink.exec(t))||(i=this.rules.inline.nolink.exec(t))){const n=(i[2]||i[1]).replace(/\s+/g," "),a=r[n.toLowerCase()];if(!a){const o=i[0].charAt(0);return{type:"text",raw:o,text:o}}return Pc(i,a,i[0],this.lexer)}}emStrong(t,r,i=""){let n=this.rules.inline.emStrongLDelim.exec(t);if(!n||n[3]&&i.match(/[\p{L}\p{N}]/u))return;if(!(n[1]||n[2]||"")||!i||this.rules.inline.punctuation.exec(i)){const o=[...n[0]].length-1;let s,l,c=o,h=0;const u=n[0][0]==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(u.lastIndex=0,r=r.slice(-1*t.length+o);(n=u.exec(r))!=null;){if(s=n[1]||n[2]||n[3]||n[4]||n[5]||n[6],!s)continue;if(l=[...s].length,n[3]||n[4]){c+=l;continue}else if((n[5]||n[6])&&o%3&&!((o+l)%3)){h+=l;continue}if(c-=l,c>0)continue;l=Math.min(l,l+c+h);const f=[...n[0]][0].length,p=t.slice(0,o+n.index+f+l);if(Math.min(o,l)%2){const m=p.slice(1,-1);return{type:"em",raw:p,text:m,tokens:this.lexer.inlineTokens(m)}}const g=p.slice(2,-2);return{type:"strong",raw:p,text:g,tokens:this.lexer.inlineTokens(g)}}}}codespan(t){const r=this.rules.inline.code.exec(t);if(r){let i=r[2].replace(/\n/g," ");const n=/[^ ]/.test(i),a=/^ /.test(i)&&/ $/.test(i);return n&&a&&(i=i.substring(1,i.length-1)),i=Gt(i,!0),{type:"codespan",raw:r[0],text:i}}}br(t){const r=this.rules.inline.br.exec(t);if(r)return{type:"br",raw:r[0]}}del(t){const r=this.rules.inline.del.exec(t);if(r)return{type:"del",raw:r[0],text:r[2],tokens:this.lexer.inlineTokens(r[2])}}autolink(t){const r=this.rules.inline.autolink.exec(t);if(r){let i,n;return r[2]==="@"?(i=Gt(r[1]),n="mailto:"+i):(i=Gt(r[1]),n=i),{type:"link",raw:r[0],text:i,href:n,tokens:[{type:"text",raw:i,text:i}]}}}url(t){var i;let r;if(r=this.rules.inline.url.exec(t)){let n,a;if(r[2]==="@")n=Gt(r[0]),a="mailto:"+n;else{let o;do o=r[0],r[0]=((i=this.rules.inline._backpedal.exec(r[0]))==null?void 0:i[0])??"";while(o!==r[0]);n=Gt(r[0]),r[1]==="www."?a="http://"+r[0]:a=r[0]}return{type:"link",raw:r[0],text:n,href:a,tokens:[{type:"text",raw:n,text:n}]}}}inlineText(t){const r=this.rules.inline.text.exec(t);if(r){let i;return this.lexer.state.inRawBlock?i=r[0]:i=Gt(r[0]),{type:"text",raw:r[0],text:i}}}}const Uv=/^(?: *(?:\n|$))+/,Yv=/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,Gv=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,Ji=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,Vv=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,Ip=/(?:[*+-]|\d{1,9}[.)])/,Pp=ut(/^(?!bull |blockCode|fences|blockquote|heading|html)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html))+?)\n {0,3}(=+|-+) *(?:\n+|$)/).replace(/bull/g,Ip).replace(/blockCode/g,/ {4}/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).getRegex(),Zo=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,Xv=/^[^\n]+/,Ko=/(?!\s*\])(?:\\.|[^\[\]\\])+/,Zv=ut(/^ {0,3}\[(label)\]: *(?:\n *)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/).replace("label",Ko).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),Kv=ut(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,Ip).getRegex(),Ea="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",Qo=/|$))/,Qv=ut("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n *)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$))","i").replace("comment",Qo).replace("tag",Ea).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),Np=ut(Zo).replace("hr",Ji).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",Ea).getRegex(),Jv=ut(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",Np).getRegex(),Jo={blockquote:Jv,code:Yv,def:Zv,fences:Gv,heading:Vv,hr:Ji,html:Qv,lheading:Pp,list:Kv,newline:Uv,paragraph:Np,table:Ei,text:Xv},Nc=ut("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",Ji).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",Ea).getRegex(),tk={...Jo,table:Nc,paragraph:ut(Zo).replace("hr",Ji).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",Nc).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",Ea).getRegex()},ek={...Jo,html:ut(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",Qo).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:Ei,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:ut(Zo).replace("hr",Ji).replace("heading",` *#{1,6} *[^ +]`).replace("lheading",Pp).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},zp=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,rk=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,qp=/^( {2,}|\\)\n(?!\s*$)/,ik=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\]*?>/g,sk=ut(/^(?:\*+(?:((?!\*)[punct])|[^\s*]))|^_+(?:((?!_)[punct])|([^\s_]))/,"u").replace(/punct/g,tn).getRegex(),ok=ut("^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)[punct](\\*+)(?=[\\s]|$)|[^punct\\s](\\*+)(?!\\*)(?=[punct\\s]|$)|(?!\\*)[punct\\s](\\*+)(?=[^punct\\s])|[\\s](\\*+)(?!\\*)(?=[punct])|(?!\\*)[punct](\\*+)(?!\\*)(?=[punct])|[^punct\\s](\\*+)(?=[^punct\\s])","gu").replace(/punct/g,tn).getRegex(),lk=ut("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)[punct](_+)(?=[\\s]|$)|[^punct\\s](_+)(?!_)(?=[punct\\s]|$)|(?!_)[punct\\s](_+)(?=[^punct\\s])|[\\s](_+)(?!_)(?=[punct])|(?!_)[punct](_+)(?!_)(?=[punct])","gu").replace(/punct/g,tn).getRegex(),ck=ut(/\\([punct])/,"gu").replace(/punct/g,tn).getRegex(),hk=ut(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),uk=ut(Qo).replace("(?:-->|$)","-->").getRegex(),fk=ut("^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^").replace("comment",uk).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),ia=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,pk=ut(/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/).replace("label",ia).replace("href",/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),Wp=ut(/^!?\[(label)\]\[(ref)\]/).replace("label",ia).replace("ref",Ko).getRegex(),Hp=ut(/^!?\[(ref)\](?:\[\])?/).replace("ref",Ko).getRegex(),dk=ut("reflink|nolink(?!\\()","g").replace("reflink",Wp).replace("nolink",Hp).getRegex(),tl={_backpedal:Ei,anyPunctuation:ck,autolink:hk,blockSkip:ak,br:qp,code:rk,del:Ei,emStrongLDelim:sk,emStrongRDelimAst:ok,emStrongRDelimUnd:lk,escape:zp,link:pk,nolink:Hp,punctuation:nk,reflink:Wp,reflinkSearch:dk,tag:fk,text:ik,url:Ei},gk={...tl,link:ut(/^!?\[(label)\]\((.*?)\)/).replace("label",ia).getRegex(),reflink:ut(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",ia).getRegex()},Vs={...tl,escape:ut(zp).replace("])","~|])").getRegex(),url:ut(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,"i").replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\l+" ".repeat(c.length));let n,a,o;for(;t;)if(!(this.options.extensions&&this.options.extensions.block&&this.options.extensions.block.some(s=>(n=s.call({lexer:this},t,r))?(t=t.substring(n.raw.length),r.push(n),!0):!1))){if(n=this.tokenizer.space(t)){t=t.substring(n.raw.length),n.raw.length===1&&r.length>0?r[r.length-1].raw+=` +`:r.push(n);continue}if(n=this.tokenizer.code(t)){t=t.substring(n.raw.length),a=r[r.length-1],a&&(a.type==="paragraph"||a.type==="text")?(a.raw+=` +`+n.raw,a.text+=` +`+n.text,this.inlineQueue[this.inlineQueue.length-1].src=a.text):r.push(n);continue}if(n=this.tokenizer.fences(t)){t=t.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.heading(t)){t=t.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.hr(t)){t=t.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.blockquote(t)){t=t.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.list(t)){t=t.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.html(t)){t=t.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.def(t)){t=t.substring(n.raw.length),a=r[r.length-1],a&&(a.type==="paragraph"||a.type==="text")?(a.raw+=` +`+n.raw,a.text+=` +`+n.raw,this.inlineQueue[this.inlineQueue.length-1].src=a.text):this.tokens.links[n.tag]||(this.tokens.links[n.tag]={href:n.href,title:n.title});continue}if(n=this.tokenizer.table(t)){t=t.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.lheading(t)){t=t.substring(n.raw.length),r.push(n);continue}if(o=t,this.options.extensions&&this.options.extensions.startBlock){let s=1/0;const l=t.slice(1);let c;this.options.extensions.startBlock.forEach(h=>{c=h.call({lexer:this},l),typeof c=="number"&&c>=0&&(s=Math.min(s,c))}),s<1/0&&s>=0&&(o=t.substring(0,s+1))}if(this.state.top&&(n=this.tokenizer.paragraph(o))){a=r[r.length-1],i&&(a==null?void 0:a.type)==="paragraph"?(a.raw+=` +`+n.raw,a.text+=` +`+n.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=a.text):r.push(n),i=o.length!==t.length,t=t.substring(n.raw.length);continue}if(n=this.tokenizer.text(t)){t=t.substring(n.raw.length),a=r[r.length-1],a&&a.type==="text"?(a.raw+=` +`+n.raw,a.text+=` +`+n.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=a.text):r.push(n);continue}if(t){const s="Infinite loop on byte: "+t.charCodeAt(0);if(this.options.silent){console.error(s);break}else throw new Error(s)}}return this.state.top=!0,r}inline(t,r=[]){return this.inlineQueue.push({src:t,tokens:r}),r}inlineTokens(t,r=[]){let i,n,a,o=t,s,l,c;if(this.tokens.links){const h=Object.keys(this.tokens.links);if(h.length>0)for(;(s=this.tokenizer.rules.inline.reflinkSearch.exec(o))!=null;)h.includes(s[0].slice(s[0].lastIndexOf("[")+1,-1))&&(o=o.slice(0,s.index)+"["+"a".repeat(s[0].length-2)+"]"+o.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(s=this.tokenizer.rules.inline.blockSkip.exec(o))!=null;)o=o.slice(0,s.index)+"["+"a".repeat(s[0].length-2)+"]"+o.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;(s=this.tokenizer.rules.inline.anyPunctuation.exec(o))!=null;)o=o.slice(0,s.index)+"++"+o.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);for(;t;)if(l||(c=""),l=!1,!(this.options.extensions&&this.options.extensions.inline&&this.options.extensions.inline.some(h=>(i=h.call({lexer:this},t,r))?(t=t.substring(i.raw.length),r.push(i),!0):!1))){if(i=this.tokenizer.escape(t)){t=t.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.tag(t)){t=t.substring(i.raw.length),n=r[r.length-1],n&&i.type==="text"&&n.type==="text"?(n.raw+=i.raw,n.text+=i.text):r.push(i);continue}if(i=this.tokenizer.link(t)){t=t.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.reflink(t,this.tokens.links)){t=t.substring(i.raw.length),n=r[r.length-1],n&&i.type==="text"&&n.type==="text"?(n.raw+=i.raw,n.text+=i.text):r.push(i);continue}if(i=this.tokenizer.emStrong(t,o,c)){t=t.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.codespan(t)){t=t.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.br(t)){t=t.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.del(t)){t=t.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.autolink(t)){t=t.substring(i.raw.length),r.push(i);continue}if(!this.state.inLink&&(i=this.tokenizer.url(t))){t=t.substring(i.raw.length),r.push(i);continue}if(a=t,this.options.extensions&&this.options.extensions.startInline){let h=1/0;const u=t.slice(1);let f;this.options.extensions.startInline.forEach(p=>{f=p.call({lexer:this},u),typeof f=="number"&&f>=0&&(h=Math.min(h,f))}),h<1/0&&h>=0&&(a=t.substring(0,h+1))}if(i=this.tokenizer.inlineText(a)){t=t.substring(i.raw.length),i.raw.slice(-1)!=="_"&&(c=i.raw.slice(-1)),l=!0,n=r[r.length-1],n&&n.type==="text"?(n.raw+=i.raw,n.text+=i.text):r.push(i);continue}if(t){const h="Infinite loop on byte: "+t.charCodeAt(0);if(this.options.silent){console.error(h);break}else throw new Error(h)}}return r}}class na{constructor(t){gt(this,"options");gt(this,"parser");this.options=t||mr}space(t){return""}code({text:t,lang:r,escaped:i}){var o;const n=(o=(r||"").match(/^\S*/))==null?void 0:o[0],a=t.replace(/\n$/,"")+` +`;return n?'
'+(i?a:Gt(a,!0))+`
+`:"
"+(i?a:Gt(a,!0))+`
+`}blockquote({tokens:t}){return`
+${this.parser.parse(t)}
+`}html({text:t}){return t}heading({tokens:t,depth:r}){return`${this.parser.parseInline(t)} +`}hr(t){return`
+`}list(t){const r=t.ordered,i=t.start;let n="";for(let s=0;s +`+n+" +`}listitem(t){let r="";if(t.task){const i=this.checkbox({checked:!!t.checked});t.loose?t.tokens.length>0&&t.tokens[0].type==="paragraph"?(t.tokens[0].text=i+" "+t.tokens[0].text,t.tokens[0].tokens&&t.tokens[0].tokens.length>0&&t.tokens[0].tokens[0].type==="text"&&(t.tokens[0].tokens[0].text=i+" "+t.tokens[0].tokens[0].text)):t.tokens.unshift({type:"text",raw:i+" ",text:i+" "}):r+=i+" "}return r+=this.parser.parse(t.tokens,!!t.loose),`
  • ${r}
  • +`}checkbox({checked:t}){return"'}paragraph({tokens:t}){return`

    ${this.parser.parseInline(t)}

    +`}table(t){let r="",i="";for(let a=0;a${n}`),` + +`+r+` +`+n+`
    +`}tablerow({text:t}){return` +${t} +`}tablecell(t){const r=this.parser.parseInline(t.tokens),i=t.header?"th":"td";return(t.align?`<${i} align="${t.align}">`:`<${i}>`)+r+` +`}strong({tokens:t}){return`${this.parser.parseInline(t)}`}em({tokens:t}){return`${this.parser.parseInline(t)}`}codespan({text:t}){return`${t}`}br(t){return"
    "}del({tokens:t}){return`${this.parser.parseInline(t)}`}link({href:t,title:r,tokens:i}){const n=this.parser.parseInline(i),a=Oc(t);if(a===null)return n;t=a;let o='
    ",o}image({href:t,title:r,text:i}){const n=Oc(t);if(n===null)return i;t=n;let a=`${i}{const c=s[l].flat(1/0);i=i.concat(this.walkTokens(c,r))}):s.tokens&&(i=i.concat(this.walkTokens(s.tokens,r)))}}return i}use(...t){const r=this.defaults.extensions||{renderers:{},childTokens:{}};return t.forEach(i=>{const n={...i};if(n.async=this.defaults.async||n.async||!1,i.extensions&&(i.extensions.forEach(a=>{if(!a.name)throw new Error("extension name required");if("renderer"in a){const o=r.renderers[a.name];o?r.renderers[a.name]=function(...s){let l=a.renderer.apply(this,s);return l===!1&&(l=o.apply(this,s)),l}:r.renderers[a.name]=a.renderer}if("tokenizer"in a){if(!a.level||a.level!=="block"&&a.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");const o=r[a.level];o?o.unshift(a.tokenizer):r[a.level]=[a.tokenizer],a.start&&(a.level==="block"?r.startBlock?r.startBlock.push(a.start):r.startBlock=[a.start]:a.level==="inline"&&(r.startInline?r.startInline.push(a.start):r.startInline=[a.start]))}"childTokens"in a&&a.childTokens&&(r.childTokens[a.name]=a.childTokens)}),n.extensions=r),i.renderer){const a=this.defaults.renderer||new na(this.defaults);for(const o in i.renderer){if(!(o in a))throw new Error(`renderer '${o}' does not exist`);if(["options","parser"].includes(o))continue;const s=o;let l=i.renderer[s];i.useNewRenderer||(l=si(this,Fe,jp).call(this,l,s,a));const c=a[s];a[s]=(...h)=>{let u=l.apply(a,h);return u===!1&&(u=c.apply(a,h)),u||""}}n.renderer=a}if(i.tokenizer){const a=this.defaults.tokenizer||new ra(this.defaults);for(const o in i.tokenizer){if(!(o in a))throw new Error(`tokenizer '${o}' does not exist`);if(["options","rules","lexer"].includes(o))continue;const s=o,l=i.tokenizer[s],c=a[s];a[s]=(...h)=>{let u=l.apply(a,h);return u===!1&&(u=c.apply(a,h)),u}}n.tokenizer=a}if(i.hooks){const a=this.defaults.hooks||new Fi;for(const o in i.hooks){if(!(o in a))throw new Error(`hook '${o}' does not exist`);if(o==="options")continue;const s=o,l=i.hooks[s],c=a[s];Fi.passThroughHooks.has(o)?a[s]=h=>{if(this.defaults.async)return Promise.resolve(l.call(a,h)).then(f=>c.call(a,f));const u=l.call(a,h);return c.call(a,u)}:a[s]=(...h)=>{let u=l.apply(a,h);return u===!1&&(u=c.apply(a,h)),u}}n.hooks=a}if(i.walkTokens){const a=this.defaults.walkTokens,o=i.walkTokens;n.walkTokens=function(s){let l=[];return l.push(o.call(this,s)),a&&(l=l.concat(a.call(this,s))),l}}this.defaults={...this.defaults,...n}}),this}setOptions(t){return this.defaults={...this.defaults,...t},this}lexer(t,r){return me.lex(t,r??this.defaults)}parser(t,r){return ye.parse(t,r??this.defaults)}}Fe=new WeakSet,jp=function(t,r,i){switch(r){case"heading":return function(n){return!n.type||n.type!==r?t.apply(this,arguments):t.call(this,i.parser.parseInline(n.tokens),n.depth,qv(i.parser.parseInline(n.tokens,i.parser.textRenderer)))};case"code":return function(n){return!n.type||n.type!==r?t.apply(this,arguments):t.call(this,n.text,n.lang,!!n.escaped)};case"table":return function(n){if(!n.type||n.type!==r)return t.apply(this,arguments);let a="",o="";for(let l=0;l0&&h.tokens[0].type==="paragraph"?(h.tokens[0].text=g+" "+h.tokens[0].text,h.tokens[0].tokens&&h.tokens[0].tokens.length>0&&h.tokens[0].tokens[0].type==="text"&&(h.tokens[0].tokens[0].text=g+" "+h.tokens[0].tokens[0].text)):h.tokens.unshift({type:"text",text:g+" "}):p+=g+" "}p+=this.parser.parse(h.tokens,s),l+=this.listitem({type:"list_item",raw:p,text:p,task:f,checked:!!u,loose:s,tokens:h.tokens})}return t.call(this,l,a,o)};case"html":return function(n){return!n.type||n.type!==r?t.apply(this,arguments):t.call(this,n.text,n.block)};case"paragraph":return function(n){return!n.type||n.type!==r?t.apply(this,arguments):t.call(this,this.parser.parseInline(n.tokens))};case"escape":return function(n){return!n.type||n.type!==r?t.apply(this,arguments):t.call(this,n.text)};case"link":return function(n){return!n.type||n.type!==r?t.apply(this,arguments):t.call(this,n.href,n.title,this.parser.parseInline(n.tokens))};case"image":return function(n){return!n.type||n.type!==r?t.apply(this,arguments):t.call(this,n.href,n.title,n.text)};case"strong":return function(n){return!n.type||n.type!==r?t.apply(this,arguments):t.call(this,this.parser.parseInline(n.tokens))};case"em":return function(n){return!n.type||n.type!==r?t.apply(this,arguments):t.call(this,this.parser.parseInline(n.tokens))};case"codespan":return function(n){return!n.type||n.type!==r?t.apply(this,arguments):t.call(this,n.text)};case"del":return function(n){return!n.type||n.type!==r?t.apply(this,arguments):t.call(this,this.parser.parseInline(n.tokens))};case"text":return function(n){return!n.type||n.type!==r?t.apply(this,arguments):t.call(this,n.text)}}return t},Xs=function(t,r){return(i,n)=>{const a={...n},o={...this.defaults,...a};this.defaults.async===!0&&a.async===!1&&(o.silent||console.warn("marked(): The async option was set to true by an extension. The async: false option sent to parse will be ignored."),o.async=!0);const s=si(this,Fe,Up).call(this,!!o.silent,!!o.async);if(typeof i>"u"||i===null)return s(new Error("marked(): input parameter is undefined or null"));if(typeof i!="string")return s(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(i)+", string expected"));if(o.hooks&&(o.hooks.options=o),o.async)return Promise.resolve(o.hooks?o.hooks.preprocess(i):i).then(l=>t(l,o)).then(l=>o.hooks?o.hooks.processAllTokens(l):l).then(l=>o.walkTokens?Promise.all(this.walkTokens(l,o.walkTokens)).then(()=>l):l).then(l=>r(l,o)).then(l=>o.hooks?o.hooks.postprocess(l):l).catch(s);try{o.hooks&&(i=o.hooks.preprocess(i));let l=t(i,o);o.hooks&&(l=o.hooks.processAllTokens(l)),o.walkTokens&&this.walkTokens(l,o.walkTokens);let c=r(l,o);return o.hooks&&(c=o.hooks.postprocess(c)),c}catch(l){return s(l)}}},Up=function(t,r){return i=>{if(i.message+=` +Please report this to https://github.com/markedjs/marked.`,t){const n="

    An error occurred:

    "+Gt(i.message+"",!0)+"
    ";return r?Promise.resolve(n):n}if(r)return Promise.reject(i);throw i}};const ur=new yk;function ht(e,t){return ur.parse(e,t)}ht.options=ht.setOptions=function(e){return ur.setOptions(e),ht.defaults=ur.defaults,Dp(ht.defaults),ht};ht.getDefaults=Xo;ht.defaults=mr;ht.use=function(...e){return ur.use(...e),ht.defaults=ur.defaults,Dp(ht.defaults),ht};ht.walkTokens=function(e,t){return ur.walkTokens(e,t)};ht.parseInline=ur.parseInline;ht.Parser=ye;ht.parser=ye.parse;ht.Renderer=na;ht.TextRenderer=el;ht.Lexer=me;ht.lexer=me.lex;ht.Tokenizer=ra;ht.Hooks=Fi;ht.parse=ht;ht.options;ht.setOptions;ht.use;ht.walkTokens;ht.parseInline;ye.parse;me.lex;function Yp(e){for(var t=[],r=1;r/g,` +`).replace(/\n{2,}/g,` +`),n=Yp(i);return t===!1?n.replace(/ /g," "):n}d(Gp,"preprocessMarkdown");function Vp(e,t={}){const r=Gp(e,t),i=ht.lexer(r),n=[[]];let a=0;function o(s,l="normal"){s.type==="text"?s.text.split(` +`).forEach((h,u)=>{u!==0&&(a++,n.push([])),h.split(" ").forEach(f=>{f=f.replace(/'/g,"'"),f&&n[a].push({content:f,type:l})})}):s.type==="strong"||s.type==="em"?s.tokens.forEach(c=>{o(c,s.type)}):s.type==="html"&&n[a].push({content:s.text,type:"normal"})}return d(o,"processNode"),i.forEach(s=>{var l;s.type==="paragraph"?(l=s.tokens)==null||l.forEach(c=>{o(c)}):s.type==="html"&&n[a].push({content:s.text,type:"normal"})}),n}d(Vp,"markdownToLines");function Xp(e,{markdownAutoWrap:t}={}){const r=ht.lexer(e);function i(n){var a,o,s;return n.type==="text"?t===!1?n.text.replace(/\n */g,"
    ").replace(/ /g," "):n.text.replace(/\n */g,"
    "):n.type==="strong"?`${(a=n.tokens)==null?void 0:a.map(i).join("")}`:n.type==="em"?`${(o=n.tokens)==null?void 0:o.map(i).join("")}`:n.type==="paragraph"?`

    ${(s=n.tokens)==null?void 0:s.map(i).join("")}

    `:n.type==="space"?"":n.type==="html"?`${n.text}`:n.type==="escape"?n.text:`Unsupported markdown: ${n.type}`}return d(i,"output"),r.map(i).join("")}d(Xp,"markdownToHTML");function Zp(e){return Intl.Segmenter?[...new Intl.Segmenter().segment(e)].map(t=>t.segment):[...e]}d(Zp,"splitTextToChars");function Kp(e,t){const r=Zp(t.content);return rl(e,[],r,t.type)}d(Kp,"splitWordToFitWidth");function rl(e,t,r,i){if(r.length===0)return[{content:t.join(""),type:i},{content:"",type:i}];const[n,...a]=r,o=[...t,n];return e([{content:o.join(""),type:i}])?rl(e,o,a,i):(t.length===0&&n&&(t.push(n),r.shift()),[{content:t.join(""),type:i},{content:r.join(""),type:i}])}d(rl,"splitWordToFitWidthRecursion");function Qp(e,t){if(e.some(({content:r})=>r.includes(` +`)))throw new Error("splitLineToFitWidth does not support newlines in the line");return aa(e,t)}d(Qp,"splitLineToFitWidth");function aa(e,t,r=[],i=[]){if(e.length===0)return i.length>0&&r.push(i),r.length>0?r:[];let n="";e[0].content===" "&&(n=" ",e.shift());const a=e.shift()??{content:" ",type:"normal"},o=[...i];if(n!==""&&o.push({content:n,type:"normal"}),o.push(a),t(o))return aa(e,t,r,o);if(i.length>0)r.push(i),e.unshift(a);else if(a.content){const[s,l]=Kp(t,a);r.push([s]),l.content&&e.unshift(l)}return aa(e,t,r)}d(aa,"splitLineToFitWidthRecursion");function Zs(e,t){t&&e.attr("style",t)}d(Zs,"applyStyle");async function Jp(e,t,r,i,n=!1){const a=e.append("foreignObject");a.attr("width",`${10*r}px`),a.attr("height",`${10*r}px`);const o=a.append("xhtml:div");let s=t.label;t.label&&qr(t.label)&&(s=await fo(t.label.replace(Xr.lineBreakRegex,` +`),ct()));const l=t.isNode?"nodeLabel":"edgeLabel",c=o.append("span");c.html(s),Zs(c,t.labelStyle),c.attr("class",`${l} ${i}`),Zs(o,t.labelStyle),o.style("display","table-cell"),o.style("white-space","nowrap"),o.style("line-height","1.5"),o.style("max-width",r+"px"),o.style("text-align","center"),o.attr("xmlns","http://www.w3.org/1999/xhtml"),n&&o.attr("class","labelBkg");let h=o.node().getBoundingClientRect();return h.width===r&&(o.style("display","table"),o.style("white-space","break-spaces"),o.style("width",r+"px"),h=o.node().getBoundingClientRect()),a.node()}d(Jp,"addHtmlSpan");function Fa(e,t,r){return e.append("tspan").attr("class","text-outer-tspan").attr("x",0).attr("y",t*r-.1+"em").attr("dy",r+"em")}d(Fa,"createTspan");function td(e,t,r){const i=e.append("text"),n=Fa(i,1,t);$a(n,r);const a=n.node().getComputedTextLength();return i.remove(),a}d(td,"computeWidthOfText");function xk(e,t,r){var o;const i=e.append("text"),n=Fa(i,1,t);$a(n,[{content:r,type:"normal"}]);const a=(o=n.node())==null?void 0:o.getBoundingClientRect();return a&&i.remove(),a}d(xk,"computeDimensionOfText");function ed(e,t,r,i=!1){const a=t.append("g"),o=a.insert("rect").attr("class","background").attr("style","stroke: none"),s=a.append("text").attr("y","-10.1");let l=0;for(const c of r){const h=d(f=>td(a,1.1,f)<=e,"checkWidth"),u=h(c)?[c]:Qp(c,h);for(const f of u){const p=Fa(s,l,1.1);$a(p,f),l++}}if(i){const c=s.node().getBBox(),h=2;return o.attr("x",c.x-h).attr("y",c.y-h).attr("width",c.width+2*h).attr("height",c.height+2*h),a.node()}else return s.node()}d(ed,"createFormattedText");function $a(e,t){e.text(""),t.forEach((r,i)=>{const n=e.append("tspan").attr("font-style",r.type==="em"?"italic":"normal").attr("class","text-inner-tspan").attr("font-weight",r.type==="strong"?"bold":"normal");i===0?n.text(r.content):n.text(" "+r.content)})}d($a,"updateTextContentAndStyles");function rd(e){return e.replace(/fa[bklrs]?:fa-[\w-]+/g,t=>``)}d(rd,"replaceIconSubstring");var Jr=d(async(e,t="",{style:r="",isTitle:i=!1,classes:n="",useHtmlLabels:a=!0,isNode:o=!0,width:s=200,addSvgBackground:l=!1}={},c)=>{if($.debug("XYZ createText",t,r,i,n,a,o,"addSvgBackground: ",l),a){const h=Xp(t,c),u=rd(Qr(h)),f=t.replace(/\\\\/g,"\\"),p={isNode:o,label:qr(t)?f:u,labelStyle:r.replace("fill:","color:")};return await Jp(e,p,s,n,l)}else{const h=t.replace(//g,"
    "),u=Vp(h.replace("
    ","
    "),c),f=ed(s,e,u,t?l:!1);if(o){/stroke:/.exec(r)&&(r=r.replace("stroke:","lineColor:"));const p=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/color:/g,"fill:");lt(f).attr("style",p)}else{const p=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/background:/g,"fill:");lt(f).select("rect").attr("style",p.replace(/background:/g,"fill:"));const g=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/color:/g,"fill:");lt(f).select("text").attr("style",g)}return f}},"createText");function ss(e,t,r){if(e&&e.length){const[i,n]=t,a=Math.PI/180*r,o=Math.cos(a),s=Math.sin(a);for(const l of e){const[c,h]=l;l[0]=(c-i)*o-(h-n)*s+i,l[1]=(c-i)*s+(h-n)*o+n}}}function bk(e,t){return e[0]===t[0]&&e[1]===t[1]}function _k(e,t,r,i=1){const n=r,a=Math.max(t,.1),o=e[0]&&e[0][0]&&typeof e[0][0]=="number"?[e]:e,s=[0,0];if(n)for(const c of o)ss(c,s,n);const l=function(c,h,u){const f=[];for(const b of c){const _=[...b];bk(_[0],_[_.length-1])||_.push([_[0][0],_[0][1]]),_.length>2&&f.push(_)}const p=[];h=Math.max(h,.1);const g=[];for(const b of f)for(let _=0;_b.ymin<_.ymin?-1:b.ymin>_.ymin?1:b.x<_.x?-1:b.x>_.x?1:b.ymax===_.ymax?0:(b.ymax-_.ymax)/Math.abs(b.ymax-_.ymax)),!g.length)return p;let m=[],y=g[0].ymin,x=0;for(;m.length||g.length;){if(g.length){let b=-1;for(let _=0;_y);_++)b=_;g.splice(0,b+1).forEach(_=>{m.push({s:y,edge:_})})}if(m=m.filter(b=>!(b.edge.ymax<=y)),m.sort((b,_)=>b.edge.x===_.edge.x?0:(b.edge.x-_.edge.x)/Math.abs(b.edge.x-_.edge.x)),(u!==1||x%h==0)&&m.length>1)for(let b=0;b=m.length)break;const v=m[b].edge,k=m[_].edge;p.push([[Math.round(v.x),y],[Math.round(k.x),y]])}y+=u,m.forEach(b=>{b.edge.x=b.edge.x+u*b.edge.islope}),x++}return p}(o,a,i);if(n){for(const c of o)ss(c,s,-n);(function(c,h,u){const f=[];c.forEach(p=>f.push(...p)),ss(f,h,u)})(l,s,-n)}return l}function en(e,t){var r;const i=t.hachureAngle+90;let n=t.hachureGap;n<0&&(n=4*t.strokeWidth),n=Math.round(Math.max(n,.1));let a=1;return t.roughness>=1&&(((r=t.randomizer)===null||r===void 0?void 0:r.next())||Math.random())>.7&&(a=n),_k(e,n,i,a||1)}class il{constructor(t){this.helper=t}fillPolygons(t,r){return this._fillPolygons(t,r)}_fillPolygons(t,r){const i=en(t,r);return{type:"fillSketch",ops:this.renderLines(i,r)}}renderLines(t,r){const i=[];for(const n of t)i.push(...this.helper.doubleLineOps(n[0][0],n[0][1],n[1][0],n[1][1],r));return i}}function Da(e){const t=e[0],r=e[1];return Math.sqrt(Math.pow(t[0]-r[0],2)+Math.pow(t[1]-r[1],2))}class Ck extends il{fillPolygons(t,r){let i=r.hachureGap;i<0&&(i=4*r.strokeWidth),i=Math.max(i,.1);const n=en(t,Object.assign({},r,{hachureGap:i})),a=Math.PI/180*r.hachureAngle,o=[],s=.5*i*Math.cos(a),l=.5*i*Math.sin(a);for(const[c,h]of n)Da([c,h])&&o.push([[c[0]-s,c[1]+l],[...h]],[[c[0]+s,c[1]-l],[...h]]);return{type:"fillSketch",ops:this.renderLines(o,r)}}}class wk extends il{fillPolygons(t,r){const i=this._fillPolygons(t,r),n=Object.assign({},r,{hachureAngle:r.hachureAngle+90}),a=this._fillPolygons(t,n);return i.ops=i.ops.concat(a.ops),i}}class vk{constructor(t){this.helper=t}fillPolygons(t,r){const i=en(t,r=Object.assign({},r,{hachureAngle:0}));return this.dotsOnLines(i,r)}dotsOnLines(t,r){const i=[];let n=r.hachureGap;n<0&&(n=4*r.strokeWidth),n=Math.max(n,.1);let a=r.fillWeight;a<0&&(a=r.strokeWidth/2);const o=n/4;for(const s of t){const l=Da(s),c=l/n,h=Math.ceil(c)-1,u=l-h*n,f=(s[0][0]+s[1][0])/2-n/4,p=Math.min(s[0][1],s[1][1]);for(let g=0;g{const s=Da(o),l=Math.floor(s/(i+n)),c=(s+n-l*(i+n))/2;let h=o[0],u=o[1];h[0]>u[0]&&(h=o[1],u=o[0]);const f=Math.atan((u[1]-h[1])/(u[0]-h[0]));for(let p=0;p{const o=Da(a),s=Math.round(o/(2*r));let l=a[0],c=a[1];l[0]>c[0]&&(l=a[1],c=a[0]);const h=Math.atan((c[1]-l[1])/(c[0]-l[0]));for(let u=0;uh%2?c+r:c+t);a.push({key:"C",data:l}),t=l[4],r=l[5];break}case"Q":a.push({key:"Q",data:[...s]}),t=s[2],r=s[3];break;case"q":{const l=s.map((c,h)=>h%2?c+r:c+t);a.push({key:"Q",data:l}),t=l[2],r=l[3];break}case"A":a.push({key:"A",data:[...s]}),t=s[5],r=s[6];break;case"a":t+=s[5],r+=s[6],a.push({key:"A",data:[s[0],s[1],s[2],s[3],s[4],t,r]});break;case"H":a.push({key:"H",data:[...s]}),t=s[0];break;case"h":t+=s[0],a.push({key:"H",data:[t]});break;case"V":a.push({key:"V",data:[...s]}),r=s[0];break;case"v":r+=s[0],a.push({key:"V",data:[r]});break;case"S":a.push({key:"S",data:[...s]}),t=s[2],r=s[3];break;case"s":{const l=s.map((c,h)=>h%2?c+r:c+t);a.push({key:"S",data:l}),t=l[2],r=l[3];break}case"T":a.push({key:"T",data:[...s]}),t=s[0],r=s[1];break;case"t":t+=s[0],r+=s[1],a.push({key:"T",data:[t,r]});break;case"Z":case"z":a.push({key:"Z",data:[]}),t=i,r=n}return a}function nd(e){const t=[];let r="",i=0,n=0,a=0,o=0,s=0,l=0;for(const{key:c,data:h}of e){switch(c){case"M":t.push({key:"M",data:[...h]}),[i,n]=h,[a,o]=h;break;case"C":t.push({key:"C",data:[...h]}),i=h[4],n=h[5],s=h[2],l=h[3];break;case"L":t.push({key:"L",data:[...h]}),[i,n]=h;break;case"H":i=h[0],t.push({key:"L",data:[i,n]});break;case"V":n=h[0],t.push({key:"L",data:[i,n]});break;case"S":{let u=0,f=0;r==="C"||r==="S"?(u=i+(i-s),f=n+(n-l)):(u=i,f=n),t.push({key:"C",data:[u,f,...h]}),s=h[0],l=h[1],i=h[2],n=h[3];break}case"T":{const[u,f]=h;let p=0,g=0;r==="Q"||r==="T"?(p=i+(i-s),g=n+(n-l)):(p=i,g=n);const m=i+2*(p-i)/3,y=n+2*(g-n)/3,x=u+2*(p-u)/3,b=f+2*(g-f)/3;t.push({key:"C",data:[m,y,x,b,u,f]}),s=p,l=g,i=u,n=f;break}case"Q":{const[u,f,p,g]=h,m=i+2*(u-i)/3,y=n+2*(f-n)/3,x=p+2*(u-p)/3,b=g+2*(f-g)/3;t.push({key:"C",data:[m,y,x,b,p,g]}),s=u,l=f,i=p,n=g;break}case"A":{const u=Math.abs(h[0]),f=Math.abs(h[1]),p=h[2],g=h[3],m=h[4],y=h[5],x=h[6];u===0||f===0?(t.push({key:"C",data:[i,n,y,x,y,x]}),i=y,n=x):(i!==y||n!==x)&&(ad(i,n,y,x,u,f,p,g,m).forEach(function(b){t.push({key:"C",data:b})}),i=y,n=x);break}case"Z":t.push({key:"Z",data:[]}),i=a,n=o}r=c}return t}function mi(e,t,r){return[e*Math.cos(r)-t*Math.sin(r),e*Math.sin(r)+t*Math.cos(r)]}function ad(e,t,r,i,n,a,o,s,l,c){const h=(u=o,Math.PI*u/180);var u;let f=[],p=0,g=0,m=0,y=0;if(c)[p,g,m,y]=c;else{[e,t]=mi(e,t,-h),[r,i]=mi(r,i,-h);const I=(e-r)/2,B=(t-i)/2;let A=I*I/(n*n)+B*B/(a*a);A>1&&(A=Math.sqrt(A),n*=A,a*=A);const S=n*n,F=a*a,T=S*F-S*B*B-F*I*I,z=S*B*B+F*I*I,Y=(s===l?-1:1)*Math.sqrt(Math.abs(T/z));m=Y*n*B/a+(e+r)/2,y=Y*-a*I/n+(t+i)/2,p=Math.asin(parseFloat(((t-y)/a).toFixed(9))),g=Math.asin(parseFloat(((i-y)/a).toFixed(9))),eg&&(p-=2*Math.PI),!l&&g>p&&(g-=2*Math.PI)}let x=g-p;if(Math.abs(x)>120*Math.PI/180){const I=g,B=r,A=i;g=l&&g>p?p+120*Math.PI/180*1:p+120*Math.PI/180*-1,f=ad(r=m+n*Math.cos(g),i=y+a*Math.sin(g),B,A,n,a,o,0,l,[g,I,m,y])}x=g-p;const b=Math.cos(p),_=Math.sin(p),v=Math.cos(g),k=Math.sin(g),M=Math.tan(x/4),L=4/3*n*M,O=4/3*a*M,N=[e,t],R=[e+L*_,t-O*b],E=[r+L*k,i-O*v],q=[r,i];if(R[0]=2*N[0]-R[0],R[1]=2*N[1]-R[1],c)return[R,E,q].concat(f);{f=[R,E,q].concat(f);const I=[];for(let B=0;B2){const n=[];for(let a=0;a2*Math.PI&&(p=0,g=2*Math.PI);const m=2*Math.PI/l.curveStepCount,y=Math.min(m/2,(g-p)/2),x=Yc(y,c,h,u,f,p,g,1,l);if(!l.disableMultiStroke){const b=Yc(y,c,h,u,f,p,g,1.5,l);x.push(...b)}return o&&(s?x.push(...Ue(c,h,c+u*Math.cos(p),h+f*Math.sin(p),l),...Ue(c,h,c+u*Math.cos(g),h+f*Math.sin(g),l)):x.push({op:"lineTo",data:[c,h]},{op:"lineTo",data:[c+u*Math.cos(p),h+f*Math.sin(p)]})),{type:"path",ops:x}}function Hc(e,t){const r=nd(id(nl(e))),i=[];let n=[0,0],a=[0,0];for(const{key:o,data:s}of r)switch(o){case"M":a=[s[0],s[1]],n=[s[0],s[1]];break;case"L":i.push(...Ue(a[0],a[1],s[0],s[1],t)),a=[s[0],s[1]];break;case"C":{const[l,c,h,u,f,p]=s;i.push(...Mk(l,c,h,u,f,p,a,t)),a=[f,p];break}case"Z":i.push(...Ue(a[0],a[1],n[0],n[1],t)),a=[n[0],n[1]]}return{type:"path",ops:i}}function cs(e,t){const r=[];for(const i of e)if(i.length){const n=t.maxRandomnessOffset||0,a=i.length;if(a>2){r.push({op:"move",data:[i[0][0]+tt(n,t),i[0][1]+tt(n,t)]});for(let o=1;o500?.4:-.0016668*l+1.233334;let h=n.maxRandomnessOffset||0;h*h*100>s&&(h=l/10);const u=h/2,f=.2+.2*ld(n);let p=n.bowing*n.maxRandomnessOffset*(i-t)/200,g=n.bowing*n.maxRandomnessOffset*(e-r)/200;p=tt(p,n,c),g=tt(g,n,c);const m=[],y=()=>tt(u,n,c),x=()=>tt(h,n,c),b=n.preserveVertices;return o?m.push({op:"move",data:[e+(b?0:y()),t+(b?0:y())]}):m.push({op:"move",data:[e+(b?0:tt(h,n,c)),t+(b?0:tt(h,n,c))]}),o?m.push({op:"bcurveTo",data:[p+e+(r-e)*f+y(),g+t+(i-t)*f+y(),p+e+2*(r-e)*f+y(),g+t+2*(i-t)*f+y(),r+(b?0:y()),i+(b?0:y())]}):m.push({op:"bcurveTo",data:[p+e+(r-e)*f+x(),g+t+(i-t)*f+x(),p+e+2*(r-e)*f+x(),g+t+2*(i-t)*f+x(),r+(b?0:x()),i+(b?0:x())]}),m}function mn(e,t,r){if(!e.length)return[];const i=[];i.push([e[0][0]+tt(t,r),e[0][1]+tt(t,r)]),i.push([e[0][0]+tt(t,r),e[0][1]+tt(t,r)]);for(let n=1;n3){const a=[],o=1-r.curveTightness;n.push({op:"move",data:[e[1][0],e[1][1]]});for(let s=1;s+21&&n.push(s)):n.push(s),n.push(e[t+3])}else{const l=e[t+0],c=e[t+1],h=e[t+2],u=e[t+3],f=Qe(l,c,.5),p=Qe(c,h,.5),g=Qe(h,u,.5),m=Qe(f,p,.5),y=Qe(p,g,.5),x=Qe(m,y,.5);Js([l,f,m,x],0,r,n),Js([x,y,g,u],0,r,n)}var a,o;return n}function Fk(e,t){return la(e,0,e.length,t)}function la(e,t,r,i,n){const a=n||[],o=e[t],s=e[r-1];let l=0,c=1;for(let h=t+1;hl&&(l=u,c=h)}return Math.sqrt(l)>i?(la(e,t,c+1,i,a),la(e,c,r,i,a)):(a.length||a.push(o),a.push(s)),a}function hs(e,t=.15,r){const i=[],n=(e.length-1)/3;for(let a=0;a0?la(i,0,i.length,r):i}const Yt="none";class ca{constructor(t){this.defaultOptions={maxRandomnessOffset:2,roughness:1,bowing:1,stroke:"#000",strokeWidth:1,curveTightness:0,curveFitting:.95,curveStepCount:9,fillStyle:"hachure",fillWeight:-1,hachureAngle:-41,hachureGap:-1,dashOffset:-1,dashGap:-1,zigzagOffset:-1,seed:0,disableMultiStroke:!1,disableMultiStrokeFill:!1,preserveVertices:!1,fillShapeRoughnessGain:.8},this.config=t||{},this.config.options&&(this.defaultOptions=this._o(this.config.options))}static newSeed(){return Math.floor(Math.random()*2**31)}_o(t){return t?Object.assign({},this.defaultOptions,t):this.defaultOptions}_d(t,r,i){return{shape:t,sets:r||[],options:i||this.defaultOptions}}line(t,r,i,n,a){const o=this._o(a);return this._d("line",[sd(t,r,i,n,o)],o)}rectangle(t,r,i,n,a){const o=this._o(a),s=[],l=Bk(t,r,i,n,o);if(o.fill){const c=[[t,r],[t+i,r],[t+i,r+n],[t,r+n]];o.fillStyle==="solid"?s.push(cs([c],o)):s.push(vr([c],o))}return o.stroke!==Yt&&s.push(l),this._d("rectangle",s,o)}ellipse(t,r,i,n,a){const o=this._o(a),s=[],l=od(i,n,o),c=Ks(t,r,o,l);if(o.fill)if(o.fillStyle==="solid"){const h=Ks(t,r,o,l).opset;h.type="fillPath",s.push(h)}else s.push(vr([c.estimatedPoints],o));return o.stroke!==Yt&&s.push(c.opset),this._d("ellipse",s,o)}circle(t,r,i,n){const a=this.ellipse(t,r,i,i,n);return a.shape="circle",a}linearPath(t,r){const i=this._o(r);return this._d("linearPath",[Ln(t,!1,i)],i)}arc(t,r,i,n,a,o,s=!1,l){const c=this._o(l),h=[],u=Wc(t,r,i,n,a,o,s,!0,c);if(s&&c.fill)if(c.fillStyle==="solid"){const f=Object.assign({},c);f.disableMultiStroke=!0;const p=Wc(t,r,i,n,a,o,!0,!1,f);p.type="fillPath",h.push(p)}else h.push(function(f,p,g,m,y,x,b){const _=f,v=p;let k=Math.abs(g/2),M=Math.abs(m/2);k+=tt(.01*k,b),M+=tt(.01*M,b);let L=y,O=x;for(;L<0;)L+=2*Math.PI,O+=2*Math.PI;O-L>2*Math.PI&&(L=0,O=2*Math.PI);const N=(O-L)/b.curveStepCount,R=[];for(let E=L;E<=O;E+=N)R.push([_+k*Math.cos(E),v+M*Math.sin(E)]);return R.push([_+k*Math.cos(O),v+M*Math.sin(O)]),R.push([_,v]),vr([R],b)}(t,r,i,n,a,o,c));return c.stroke!==Yt&&h.push(u),this._d("arc",h,c)}curve(t,r){const i=this._o(r),n=[],a=qc(t,i);if(i.fill&&i.fill!==Yt)if(i.fillStyle==="solid"){const o=qc(t,Object.assign(Object.assign({},i),{disableMultiStroke:!0,roughness:i.roughness?i.roughness+i.fillShapeRoughnessGain:0}));n.push({type:"fillPath",ops:this._mergedShape(o.ops)})}else{const o=[],s=t;if(s.length){const l=typeof s[0][0]=="number"?[s]:s;for(const c of l)c.length<3?o.push(...c):c.length===3?o.push(...hs(Gc([c[0],c[0],c[1],c[2]]),10,(1+i.roughness)/2)):o.push(...hs(Gc(c),10,(1+i.roughness)/2))}o.length&&n.push(vr([o],i))}return i.stroke!==Yt&&n.push(a),this._d("curve",n,i)}polygon(t,r){const i=this._o(r),n=[],a=Ln(t,!0,i);return i.fill&&(i.fillStyle==="solid"?n.push(cs([t],i)):n.push(vr([t],i))),i.stroke!==Yt&&n.push(a),this._d("polygon",n,i)}path(t,r){const i=this._o(r),n=[];if(!t)return this._d("path",n,i);t=(t||"").replace(/\n/g," ").replace(/(-\s)/g,"-").replace("/(ss)/g"," ");const a=i.fill&&i.fill!=="transparent"&&i.fill!==Yt,o=i.stroke!==Yt,s=!!(i.simplification&&i.simplification<1),l=function(h,u,f){const p=nd(id(nl(h))),g=[];let m=[],y=[0,0],x=[];const b=()=>{x.length>=4&&m.push(...hs(x,u)),x=[]},_=()=>{b(),m.length&&(g.push(m),m=[])};for(const{key:k,data:M}of p)switch(k){case"M":_(),y=[M[0],M[1]],m.push(y);break;case"L":b(),m.push([M[0],M[1]]);break;case"C":if(!x.length){const L=m.length?m[m.length-1]:y;x.push([L[0],L[1]])}x.push([M[0],M[1]]),x.push([M[2],M[3]]),x.push([M[4],M[5]]);break;case"Z":b(),m.push([y[0],y[1]])}if(_(),!f)return g;const v=[];for(const k of g){const M=Fk(k,f);M.length&&v.push(M)}return v}(t,1,s?4-4*(i.simplification||1):(1+i.roughness)/2),c=Hc(t,i);if(a)if(i.fillStyle==="solid")if(l.length===1){const h=Hc(t,Object.assign(Object.assign({},i),{disableMultiStroke:!0,roughness:i.roughness?i.roughness+i.fillShapeRoughnessGain:0}));n.push({type:"fillPath",ops:this._mergedShape(h.ops)})}else n.push(cs(l,i));else n.push(vr(l,i));return o&&(s?l.forEach(h=>{n.push(Ln(h,!1,i))}):n.push(c)),this._d("path",n,i)}opsToPath(t,r){let i="";for(const n of t.ops){const a=typeof r=="number"&&r>=0?n.data.map(o=>+o.toFixed(r)):n.data;switch(n.op){case"move":i+=`M${a[0]} ${a[1]} `;break;case"bcurveTo":i+=`C${a[0]} ${a[1]}, ${a[2]} ${a[3]}, ${a[4]} ${a[5]} `;break;case"lineTo":i+=`L${a[0]} ${a[1]} `}}return i.trim()}toPaths(t){const r=t.sets||[],i=t.options||this.defaultOptions,n=[];for(const a of r){let o=null;switch(a.type){case"path":o={d:this.opsToPath(a),stroke:i.stroke,strokeWidth:i.strokeWidth,fill:Yt};break;case"fillPath":o={d:this.opsToPath(a),stroke:Yt,strokeWidth:0,fill:i.fill||Yt};break;case"fillSketch":o=this.fillSketch(a,i)}o&&n.push(o)}return n}fillSketch(t,r){let i=r.fillWeight;return i<0&&(i=r.strokeWidth/2),{d:this.opsToPath(t),stroke:r.fill||Yt,strokeWidth:i,fill:Yt}}_mergedShape(t){return t.filter((r,i)=>i===0||r.op!=="move")}}class $k{constructor(t,r){this.canvas=t,this.ctx=this.canvas.getContext("2d"),this.gen=new ca(r)}draw(t){const r=t.sets||[],i=t.options||this.getDefaultOptions(),n=this.ctx,a=t.options.fixedDecimalPlaceDigits;for(const o of r)switch(o.type){case"path":n.save(),n.strokeStyle=i.stroke==="none"?"transparent":i.stroke,n.lineWidth=i.strokeWidth,i.strokeLineDash&&n.setLineDash(i.strokeLineDash),i.strokeLineDashOffset&&(n.lineDashOffset=i.strokeLineDashOffset),this._drawToContext(n,o,a),n.restore();break;case"fillPath":{n.save(),n.fillStyle=i.fill||"";const s=t.shape==="curve"||t.shape==="polygon"||t.shape==="path"?"evenodd":"nonzero";this._drawToContext(n,o,a,s),n.restore();break}case"fillSketch":this.fillSketch(n,o,i)}}fillSketch(t,r,i){let n=i.fillWeight;n<0&&(n=i.strokeWidth/2),t.save(),i.fillLineDash&&t.setLineDash(i.fillLineDash),i.fillLineDashOffset&&(t.lineDashOffset=i.fillLineDashOffset),t.strokeStyle=i.fill||"",t.lineWidth=n,this._drawToContext(t,r,i.fixedDecimalPlaceDigits),t.restore()}_drawToContext(t,r,i,n="nonzero"){t.beginPath();for(const a of r.ops){const o=typeof i=="number"&&i>=0?a.data.map(s=>+s.toFixed(i)):a.data;switch(a.op){case"move":t.moveTo(o[0],o[1]);break;case"bcurveTo":t.bezierCurveTo(o[0],o[1],o[2],o[3],o[4],o[5]);break;case"lineTo":t.lineTo(o[0],o[1])}}r.type==="fillPath"?t.fill(n):t.stroke()}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}line(t,r,i,n,a){const o=this.gen.line(t,r,i,n,a);return this.draw(o),o}rectangle(t,r,i,n,a){const o=this.gen.rectangle(t,r,i,n,a);return this.draw(o),o}ellipse(t,r,i,n,a){const o=this.gen.ellipse(t,r,i,n,a);return this.draw(o),o}circle(t,r,i,n){const a=this.gen.circle(t,r,i,n);return this.draw(a),a}linearPath(t,r){const i=this.gen.linearPath(t,r);return this.draw(i),i}polygon(t,r){const i=this.gen.polygon(t,r);return this.draw(i),i}arc(t,r,i,n,a,o,s=!1,l){const c=this.gen.arc(t,r,i,n,a,o,s,l);return this.draw(c),c}curve(t,r){const i=this.gen.curve(t,r);return this.draw(i),i}path(t,r){const i=this.gen.path(t,r);return this.draw(i),i}}const yn="http://www.w3.org/2000/svg";class Dk{constructor(t,r){this.svg=t,this.gen=new ca(r)}draw(t){const r=t.sets||[],i=t.options||this.getDefaultOptions(),n=this.svg.ownerDocument||window.document,a=n.createElementNS(yn,"g"),o=t.options.fixedDecimalPlaceDigits;for(const s of r){let l=null;switch(s.type){case"path":l=n.createElementNS(yn,"path"),l.setAttribute("d",this.opsToPath(s,o)),l.setAttribute("stroke",i.stroke),l.setAttribute("stroke-width",i.strokeWidth+""),l.setAttribute("fill","none"),i.strokeLineDash&&l.setAttribute("stroke-dasharray",i.strokeLineDash.join(" ").trim()),i.strokeLineDashOffset&&l.setAttribute("stroke-dashoffset",`${i.strokeLineDashOffset}`);break;case"fillPath":l=n.createElementNS(yn,"path"),l.setAttribute("d",this.opsToPath(s,o)),l.setAttribute("stroke","none"),l.setAttribute("stroke-width","0"),l.setAttribute("fill",i.fill||""),t.shape!=="curve"&&t.shape!=="polygon"||l.setAttribute("fill-rule","evenodd");break;case"fillSketch":l=this.fillSketch(n,s,i)}l&&a.appendChild(l)}return a}fillSketch(t,r,i){let n=i.fillWeight;n<0&&(n=i.strokeWidth/2);const a=t.createElementNS(yn,"path");return a.setAttribute("d",this.opsToPath(r,i.fixedDecimalPlaceDigits)),a.setAttribute("stroke",i.fill||""),a.setAttribute("stroke-width",n+""),a.setAttribute("fill","none"),i.fillLineDash&&a.setAttribute("stroke-dasharray",i.fillLineDash.join(" ").trim()),i.fillLineDashOffset&&a.setAttribute("stroke-dashoffset",`${i.fillLineDashOffset}`),a}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}opsToPath(t,r){return this.gen.opsToPath(t,r)}line(t,r,i,n,a){const o=this.gen.line(t,r,i,n,a);return this.draw(o)}rectangle(t,r,i,n,a){const o=this.gen.rectangle(t,r,i,n,a);return this.draw(o)}ellipse(t,r,i,n,a){const o=this.gen.ellipse(t,r,i,n,a);return this.draw(o)}circle(t,r,i,n){const a=this.gen.circle(t,r,i,n);return this.draw(a)}linearPath(t,r){const i=this.gen.linearPath(t,r);return this.draw(i)}polygon(t,r){const i=this.gen.polygon(t,r);return this.draw(i)}arc(t,r,i,n,a,o,s=!1,l){const c=this.gen.arc(t,r,i,n,a,o,s,l);return this.draw(c)}curve(t,r){const i=this.gen.curve(t,r);return this.draw(i)}path(t,r){const i=this.gen.path(t,r);return this.draw(i)}}var j={canvas:(e,t)=>new $k(e,t),svg:(e,t)=>new Dk(e,t),generator:e=>new ca(e),newSeed:()=>ca.newSeed()},rt=d(async(e,t,r)=>{var u,f;let i;const n=t.useHtmlLabels||Bt((u=ct())==null?void 0:u.htmlLabels);r?i=r:i="node default";const a=e.insert("g").attr("class",i).attr("id",t.domId||t.id),o=a.insert("g").attr("class","label").attr("style",Nt(t.labelStyle));let s;t.label===void 0?s="":s=typeof t.label=="string"?t.label:t.label[0];const l=await Jr(o,or(Qr(s),ct()),{useHtmlLabels:n,width:t.width||((f=ct().flowchart)==null?void 0:f.wrappingWidth),cssClasses:"markdown-node-label",style:t.labelStyle,addSvgBackground:!!t.icon||!!t.img});let c=l.getBBox();const h=((t==null?void 0:t.padding)??0)/2;if(n){const p=l.children[0],g=lt(l),m=p.getElementsByTagName("img");if(m){const y=s.replace(/]*>/g,"").trim()==="";await Promise.all([...m].map(x=>new Promise(b=>{function _(){if(x.style.display="flex",x.style.flexDirection="column",y){const v=ct().fontSize?ct().fontSize:window.getComputedStyle(document.body).fontSize,k=5,[M=Lh.fontSize]=Ma(v),L=M*k+"px";x.style.minWidth=L,x.style.maxWidth=L}else x.style.width="100%";b(x)}d(_,"setupImage"),setTimeout(()=>{x.complete&&_()}),x.addEventListener("error",_),x.addEventListener("load",_)})))}c=p.getBoundingClientRect(),g.attr("width",c.width),g.attr("height",c.height)}return n?o.attr("transform","translate("+-c.width/2+", "+-c.height/2+")"):o.attr("transform","translate(0, "+-c.height/2+")"),t.centerLabel&&o.attr("transform","translate("+-c.width/2+", "+-c.height/2+")"),o.insert("rect",":first-child"),{shapeSvg:a,bbox:c,halfPadding:h,label:o}},"labelHelper"),us=d(async(e,t,r)=>{var l,c,h,u,f,p;const i=r.useHtmlLabels||Bt((c=(l=ct())==null?void 0:l.flowchart)==null?void 0:c.htmlLabels),n=e.insert("g").attr("class","label").attr("style",r.labelStyle||""),a=await Jr(n,or(Qr(t),ct()),{useHtmlLabels:i,width:r.width||((u=(h=ct())==null?void 0:h.flowchart)==null?void 0:u.wrappingWidth),style:r.labelStyle,addSvgBackground:!!r.icon||!!r.img});let o=a.getBBox();const s=r.padding/2;if(Bt((p=(f=ct())==null?void 0:f.flowchart)==null?void 0:p.htmlLabels)){const g=a.children[0],m=lt(a);o=g.getBoundingClientRect(),m.attr("width",o.width),m.attr("height",o.height)}return i?n.attr("transform","translate("+-o.width/2+", "+-o.height/2+")"):n.attr("transform","translate(0, "+-o.height/2+")"),r.centerLabel&&n.attr("transform","translate("+-o.width/2+", "+-o.height/2+")"),n.insert("rect",":first-child"),{shapeSvg:e,bbox:o,halfPadding:s,label:n}},"insertLabel"),Z=d((e,t)=>{const r=t.node().getBBox();e.width=r.width,e.height=r.height},"updateNodeBounds"),it=d((e,t)=>(e.look==="handDrawn"?"rough-node":"node")+" "+e.cssClasses+" "+(t||""),"getNodeClasses");function ot(e){const t=e.map((r,i)=>`${i===0?"M":"L"}${r.x},${r.y}`);return t.push("Z"),t.join(" ")}d(ot,"createPathFromPoints");function Ye(e,t,r,i,n,a){const o=[],l=r-e,c=i-t,h=l/a,u=2*Math.PI/h,f=t+c/2;for(let p=0;p<=50;p++){const g=p/50,m=e+g*l,y=f+n*Math.sin(u*(m-e));o.push({x:m,y})}return o}d(Ye,"generateFullSineWavePoints");function al(e,t,r,i,n,a){const o=[],s=n*Math.PI/180,h=(a*Math.PI/180-s)/(i-1);for(let u=0;u{var r=e.x,i=e.y,n=t.x-r,a=t.y-i,o=e.width/2,s=e.height/2,l,c;return Math.abs(a)*o>Math.abs(n)*s?(a<0&&(s=-s),l=a===0?0:s*n/a,c=s):(n<0&&(o=-o),l=o,c=n===0?0:o*a/n),{x:r+l,y:i+c}},"intersectRect"),ti=Rk;function cd(e,t){t&&e.attr("style",t)}d(cd,"applyStyle");async function hd(e){const t=lt(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),r=t.append("xhtml:div");let i=e.label;e.label&&qr(e.label)&&(i=await fo(e.label.replace(Xr.lineBreakRegex,` +`),ct()));const n=e.isNode?"nodeLabel":"edgeLabel";return r.html('"+i+""),cd(r,e.labelStyle),r.style("display","inline-block"),r.style("padding-right","1px"),r.style("white-space","nowrap"),r.attr("xmlns","http://www.w3.org/1999/xhtml"),t.node()}d(hd,"addHtmlLabel");var Ok=d(async(e,t,r,i)=>{let n=e||"";if(typeof n=="object"&&(n=n[0]),Bt(ct().flowchart.htmlLabels)){n=n.replace(/\\n|\n/g,"
    "),$.info("vertexText"+n);const a={isNode:i,label:Qr(n).replace(/fa[blrs]?:fa-[\w-]+/g,s=>``),labelStyle:t&&t.replace("fill:","color:")};return await hd(a)}else{const a=document.createElementNS("http://www.w3.org/2000/svg","text");a.setAttribute("style",t.replace("color:","fill:"));let o=[];typeof n=="string"?o=n.split(/\\n|\n|/gi):Array.isArray(n)?o=n:o=[];for(const s of o){const l=document.createElementNS("http://www.w3.org/2000/svg","tspan");l.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),l.setAttribute("dy","1em"),l.setAttribute("x","0"),r?l.setAttribute("class","title-row"):l.setAttribute("class","row"),l.textContent=s.trim(),a.appendChild(l)}return a}},"createLabel"),nr=Ok,De=d((e,t,r,i,n)=>["M",e+n,t,"H",e+r-n,"A",n,n,0,0,1,e+r,t+n,"V",t+i-n,"A",n,n,0,0,1,e+r-n,t+i,"H",e+n,"A",n,n,0,0,1,e,t+i-n,"V",t+n,"A",n,n,0,0,1,e+n,t,"Z"].join(" "),"createRoundedRectPathD"),Ik=d(e=>{const{handDrawnSeed:t}=ct();return{fill:e,hachureAngle:120,hachureGap:4,fillWeight:2,roughness:.7,stroke:e,seed:t}},"solidStateFill"),ei=d(e=>{const t=Pk([...e.cssCompiledStyles||[],...e.cssStyles||[]]);return{stylesMap:t,stylesArray:[...t]}},"compileStyles"),Pk=d(e=>{const t=new Map;return e.forEach(r=>{const[i,n]=r.split(":");t.set(i.trim(),n==null?void 0:n.trim())}),t},"styles2Map"),K=d(e=>{const{stylesArray:t}=ei(e),r=[],i=[],n=[],a=[];return t.forEach(o=>{const s=o[0];s==="color"||s==="font-size"||s==="font-family"||s==="font-weight"||s==="font-style"||s==="text-decoration"||s==="text-align"||s==="text-transform"||s==="line-height"||s==="letter-spacing"||s==="word-spacing"||s==="text-shadow"||s==="text-overflow"||s==="white-space"||s==="word-wrap"||s==="word-break"||s==="overflow-wrap"||s==="hyphens"?r.push(o.join(":")+" !important"):(i.push(o.join(":")+" !important"),s.includes("stroke")&&n.push(o.join(":")+" !important"),s==="fill"&&a.push(o.join(":")+" !important"))}),{labelStyles:r.join(";"),nodeStyles:i.join(";"),stylesArray:t,borderStyles:n,backgroundStyles:a}},"styles2String"),U=d((e,t)=>{var l;const{themeVariables:r,handDrawnSeed:i}=ct(),{nodeBorder:n,mainBkg:a}=r,{stylesMap:o}=ei(e);return Object.assign({roughness:.7,fill:o.get("fill")||a,fillStyle:"hachure",fillWeight:4,hachureGap:5.2,stroke:o.get("stroke")||n,seed:i,strokeWidth:((l=o.get("stroke-width"))==null?void 0:l.replace("px",""))||1.3,fillLineDash:[0,0]},t)},"userNodeOverrides"),ud=d(async(e,t)=>{$.info("Creating subgraph rect for ",t.id,t);const r=ct(),{themeVariables:i,handDrawnSeed:n}=r,{clusterBkg:a,clusterBorder:o}=i,{labelStyles:s,nodeStyles:l,borderStyles:c,backgroundStyles:h}=K(t),u=e.insert("g").attr("class","cluster "+t.cssClasses).attr("id",t.id).attr("data-look",t.look),f=Bt(r.flowchart.htmlLabels),p=u.insert("g").attr("class","cluster-label "),g=await Jr(p,t.label,{style:t.labelStyle,useHtmlLabels:f,isNode:!0});let m=g.getBBox();if(Bt(r.flowchart.htmlLabels)){const L=g.children[0],O=lt(g);m=L.getBoundingClientRect(),O.attr("width",m.width),O.attr("height",m.height)}const y=t.width<=m.width+t.padding?m.width+t.padding:t.width;t.width<=m.width+t.padding?t.diff=(y-t.width)/2-t.padding:t.diff=-t.padding;const x=t.height,b=t.x-y/2,_=t.y-x/2;$.trace("Data ",t,JSON.stringify(t));let v;if(t.look==="handDrawn"){const L=j.svg(u),O=U(t,{roughness:.7,fill:a,stroke:o,fillWeight:3,seed:n}),N=L.path(De(b,_,y,x,0),O);v=u.insert(()=>($.debug("Rough node insert CXC",N),N),":first-child"),v.select("path:nth-child(2)").attr("style",c.join(";")),v.select("path").attr("style",h.join(";").replace("fill","stroke"))}else v=u.insert("rect",":first-child"),v.attr("style",l).attr("rx",t.rx).attr("ry",t.ry).attr("x",b).attr("y",_).attr("width",y).attr("height",x);const{subGraphTitleTopMargin:k}=So(r);if(p.attr("transform",`translate(${t.x-m.width/2}, ${t.y-t.height/2+k})`),s){const L=p.select("span");L&&L.attr("style",s)}const M=v.node().getBBox();return t.offsetX=0,t.width=M.width,t.height=M.height,t.offsetY=m.height-t.padding/2,t.intersect=function(L){return ti(t,L)},{cluster:u,labelBBox:m}},"rect"),Nk=d((e,t)=>{const r=e.insert("g").attr("class","note-cluster").attr("id",t.id),i=r.insert("rect",":first-child"),n=0*t.padding,a=n/2;i.attr("rx",t.rx).attr("ry",t.ry).attr("x",t.x-t.width/2-a).attr("y",t.y-t.height/2-a).attr("width",t.width+n).attr("height",t.height+n).attr("fill","none");const o=i.node().getBBox();return t.width=o.width,t.height=o.height,t.intersect=function(s){return ti(t,s)},{cluster:r,labelBBox:{width:0,height:0}}},"noteGroup"),zk=d(async(e,t)=>{const r=ct(),{themeVariables:i,handDrawnSeed:n}=r,{altBackground:a,compositeBackground:o,compositeTitleBackground:s,nodeBorder:l}=i,c=e.insert("g").attr("class",t.cssClasses).attr("id",t.id).attr("data-id",t.id).attr("data-look",t.look),h=c.insert("g",":first-child"),u=c.insert("g").attr("class","cluster-label");let f=c.append("rect");const p=u.node().appendChild(await nr(t.label,t.labelStyle,void 0,!0));let g=p.getBBox();if(Bt(r.flowchart.htmlLabels)){const N=p.children[0],R=lt(p);g=N.getBoundingClientRect(),R.attr("width",g.width),R.attr("height",g.height)}const m=0*t.padding,y=m/2,x=(t.width<=g.width+t.padding?g.width+t.padding:t.width)+m;t.width<=g.width+t.padding?t.diff=(x-t.width)/2-t.padding:t.diff=-t.padding;const b=t.height+m,_=t.height+m-g.height-6,v=t.x-x/2,k=t.y-b/2;t.width=x;const M=t.y-t.height/2-y+g.height+2;let L;if(t.look==="handDrawn"){const N=t.cssClasses.includes("statediagram-cluster-alt"),R=j.svg(c),E=t.rx||t.ry?R.path(De(v,k,x,b,10),{roughness:.7,fill:s,fillStyle:"solid",stroke:l,seed:n}):R.rectangle(v,k,x,b,{seed:n});L=c.insert(()=>E,":first-child");const q=R.rectangle(v,M,x,_,{fill:N?a:o,fillStyle:N?"hachure":"solid",stroke:l,seed:n});L=c.insert(()=>E,":first-child"),f=c.insert(()=>q)}else L=h.insert("rect",":first-child"),L.attr("class","outer").attr("x",v).attr("y",k).attr("width",x).attr("height",b).attr("data-look",t.look),f.attr("class","inner").attr("x",v).attr("y",M).attr("width",x).attr("height",_);u.attr("transform",`translate(${t.x-g.width/2}, ${k+1-(Bt(r.flowchart.htmlLabels)?0:3)})`);const O=L.node().getBBox();return t.height=O.height,t.offsetX=0,t.offsetY=g.height-t.padding/2,t.labelBBox=g,t.intersect=function(N){return ti(t,N)},{cluster:c,labelBBox:g}},"roundedWithTitle"),qk=d(async(e,t)=>{$.info("Creating subgraph rect for ",t.id,t);const r=ct(),{themeVariables:i,handDrawnSeed:n}=r,{clusterBkg:a,clusterBorder:o}=i,{labelStyles:s,nodeStyles:l,borderStyles:c,backgroundStyles:h}=K(t),u=e.insert("g").attr("class","cluster "+t.cssClasses).attr("id",t.id).attr("data-look",t.look),f=Bt(r.flowchart.htmlLabels),p=u.insert("g").attr("class","cluster-label "),g=await Jr(p,t.label,{style:t.labelStyle,useHtmlLabels:f,isNode:!0,width:t.width});let m=g.getBBox();if(Bt(r.flowchart.htmlLabels)){const L=g.children[0],O=lt(g);m=L.getBoundingClientRect(),O.attr("width",m.width),O.attr("height",m.height)}const y=t.width<=m.width+t.padding?m.width+t.padding:t.width;t.width<=m.width+t.padding?t.diff=(y-t.width)/2-t.padding:t.diff=-t.padding;const x=t.height,b=t.x-y/2,_=t.y-x/2;$.trace("Data ",t,JSON.stringify(t));let v;if(t.look==="handDrawn"){const L=j.svg(u),O=U(t,{roughness:.7,fill:a,stroke:o,fillWeight:4,seed:n}),N=L.path(De(b,_,y,x,t.rx),O);v=u.insert(()=>($.debug("Rough node insert CXC",N),N),":first-child"),v.select("path:nth-child(2)").attr("style",c.join(";")),v.select("path").attr("style",h.join(";").replace("fill","stroke"))}else v=u.insert("rect",":first-child"),v.attr("style",l).attr("rx",t.rx).attr("ry",t.ry).attr("x",b).attr("y",_).attr("width",y).attr("height",x);const{subGraphTitleTopMargin:k}=So(r);if(p.attr("transform",`translate(${t.x-m.width/2}, ${t.y-t.height/2+k})`),s){const L=p.select("span");L&&L.attr("style",s)}const M=v.node().getBBox();return t.offsetX=0,t.width=M.width,t.height=M.height,t.offsetY=m.height-t.padding/2,t.intersect=function(L){return ti(t,L)},{cluster:u,labelBBox:m}},"kanbanSection"),Wk=d((e,t)=>{const r=ct(),{themeVariables:i,handDrawnSeed:n}=r,{nodeBorder:a}=i,o=e.insert("g").attr("class",t.cssClasses).attr("id",t.id).attr("data-look",t.look),s=o.insert("g",":first-child"),l=0*t.padding,c=t.width+l;t.diff=-t.padding;const h=t.height+l,u=t.x-c/2,f=t.y-h/2;t.width=c;let p;if(t.look==="handDrawn"){const y=j.svg(o).rectangle(u,f,c,h,{fill:"lightgrey",roughness:.5,strokeLineDash:[5],stroke:a,seed:n});p=o.insert(()=>y,":first-child")}else p=s.insert("rect",":first-child"),p.attr("class","divider").attr("x",u).attr("y",f).attr("width",c).attr("height",h).attr("data-look",t.look);const g=p.node().getBBox();return t.height=g.height,t.offsetX=0,t.offsetY=0,t.intersect=function(m){return ti(t,m)},{cluster:o,labelBBox:{}}},"divider"),Hk=ud,jk={rect:ud,squareRect:Hk,roundedWithTitle:zk,noteGroup:Nk,divider:Wk,kanbanSection:qk},fd=new Map,Uk=d(async(e,t)=>{const r=t.shape||"rect",i=await jk[r](e,t);return fd.set(t.id,i),i},"insertCluster"),uB=d(()=>{fd=new Map},"clear");function pd(e,t){return e.intersect(t)}d(pd,"intersectNode");var Yk=pd;function dd(e,t,r,i){var n=e.x,a=e.y,o=n-i.x,s=a-i.y,l=Math.sqrt(t*t*s*s+r*r*o*o),c=Math.abs(t*r*o/l);i.x0}d(to,"sameSign");var Vk=yd;function xd(e,t,r){let i=e.x,n=e.y,a=[],o=Number.POSITIVE_INFINITY,s=Number.POSITIVE_INFINITY;typeof t.forEach=="function"?t.forEach(function(h){o=Math.min(o,h.x),s=Math.min(s,h.y)}):(o=Math.min(o,t.x),s=Math.min(s,t.y));let l=i-e.width/2-o,c=n-e.height/2-s;for(let h=0;h1&&a.sort(function(h,u){let f=h.x-r.x,p=h.y-r.y,g=Math.sqrt(f*f+p*p),m=u.x-r.x,y=u.y-r.y,x=Math.sqrt(m*m+y*y);return gh,":first-child");return u.attr("class","anchor").attr("style",Nt(s)),Z(t,u),t.intersect=function(f){return $.info("Circle intersect",t,o,f),W.circle(t,o,f)},a}d(bd,"anchor");function eo(e,t,r,i,n,a,o){const l=(e+r)/2,c=(t+i)/2,h=Math.atan2(i-t,r-e),u=(r-e)/2,f=(i-t)/2,p=u/n,g=f/a,m=Math.sqrt(p**2+g**2);if(m>1)throw new Error("The given radii are too small to create an arc between the points.");const y=Math.sqrt(1-m**2),x=l+y*a*Math.sin(h)*(o?-1:1),b=c-y*n*Math.cos(h)*(o?-1:1),_=Math.atan2((t-b)/a,(e-x)/n);let k=Math.atan2((i-b)/a,(r-x)/n)-_;o&&k<0&&(k+=2*Math.PI),!o&&k>0&&(k-=2*Math.PI);const M=[];for(let L=0;L<20;L++){const O=L/19,N=_+O*k,R=x+n*Math.cos(N),E=b+a*Math.sin(N);M.push({x:R,y:E})}return M}d(eo,"generateArcPoints");async function _d(e,t){const{labelStyles:r,nodeStyles:i}=K(t);t.labelStyle=r;const{shapeSvg:n,bbox:a}=await rt(e,t,it(t)),o=a.width+t.padding+20,s=a.height+t.padding,l=s/2,c=l/(2.5+s/50),{cssStyles:h}=t,u=[{x:o/2,y:-s/2},{x:-o/2,y:-s/2},...eo(-o/2,-s/2,-o/2,s/2,c,l,!1),{x:o/2,y:s/2},...eo(o/2,s/2,o/2,-s/2,c,l,!0)],f=j.svg(n),p=U(t,{});t.look!=="handDrawn"&&(p.roughness=0,p.fillStyle="solid");const g=ot(u),m=f.path(g,p),y=n.insert(()=>m,":first-child");return y.attr("class","basic label-container"),h&&t.look!=="handDrawn"&&y.selectAll("path").attr("style",h),i&&t.look!=="handDrawn"&&y.selectAll("path").attr("style",i),y.attr("transform",`translate(${c/2}, 0)`),Z(t,y),t.intersect=function(x){return W.polygon(t,u,x)},n}d(_d,"bowTieRect");function Re(e,t,r,i){return e.insert("polygon",":first-child").attr("points",i.map(function(n){return n.x+","+n.y}).join(" ")).attr("class","label-container").attr("transform","translate("+-t/2+","+r/2+")")}d(Re,"insertPolygonShape");async function Cd(e,t){const{labelStyles:r,nodeStyles:i}=K(t);t.labelStyle=r;const{shapeSvg:n,bbox:a}=await rt(e,t,it(t)),o=a.height+t.padding,s=12,l=a.width+t.padding+s,c=0,h=l,u=-o,f=0,p=[{x:c+s,y:u},{x:h,y:u},{x:h,y:f},{x:c,y:f},{x:c,y:u+s},{x:c+s,y:u}];let g;const{cssStyles:m}=t;if(t.look==="handDrawn"){const y=j.svg(n),x=U(t,{}),b=ot(p),_=y.path(b,x);g=n.insert(()=>_,":first-child").attr("transform",`translate(${-l/2}, ${o/2})`),m&&g.attr("style",m)}else g=Re(n,l,o,p);return i&&g.attr("style",i),Z(t,g),t.intersect=function(y){return W.polygon(t,p,y)},n}d(Cd,"card");function wd(e,t){const{nodeStyles:r}=K(t);t.label="";const i=e.insert("g").attr("class",it(t)).attr("id",t.domId??t.id),{cssStyles:n}=t,a=Math.max(28,t.width??0),o=[{x:0,y:a/2},{x:a/2,y:0},{x:0,y:-a/2},{x:-a/2,y:0}],s=j.svg(i),l=U(t,{});t.look!=="handDrawn"&&(l.roughness=0,l.fillStyle="solid");const c=ot(o),h=s.path(c,l),u=i.insert(()=>h,":first-child");return n&&t.look!=="handDrawn"&&u.selectAll("path").attr("style",n),r&&t.look!=="handDrawn"&&u.selectAll("path").attr("style",r),t.width=28,t.height=28,t.intersect=function(f){return W.polygon(t,o,f)},i}d(wd,"choice");async function vd(e,t){const{labelStyles:r,nodeStyles:i}=K(t);t.labelStyle=r;const{shapeSvg:n,bbox:a,halfPadding:o}=await rt(e,t,it(t)),s=a.width/2+o;let l;const{cssStyles:c}=t;if(t.look==="handDrawn"){const h=j.svg(n),u=U(t,{}),f=h.circle(0,0,s*2,u);l=n.insert(()=>f,":first-child"),l.attr("class","basic label-container").attr("style",Nt(c))}else l=n.insert("circle",":first-child").attr("class","basic label-container").attr("style",i).attr("r",s).attr("cx",0).attr("cy",0);return Z(t,l),t.intersect=function(h){return $.info("Circle intersect",t,s,h),W.circle(t,s,h)},n}d(vd,"circle");function kd(e){const t=Math.cos(Math.PI/4),r=Math.sin(Math.PI/4),i=e*2,n={x:i/2*t,y:i/2*r},a={x:-(i/2)*t,y:i/2*r},o={x:-(i/2)*t,y:-(i/2)*r},s={x:i/2*t,y:-(i/2)*r};return`M ${a.x},${a.y} L ${s.x},${s.y} + M ${n.x},${n.y} L ${o.x},${o.y}`}d(kd,"createLine");function Sd(e,t){const{labelStyles:r,nodeStyles:i}=K(t);t.labelStyle=r,t.label="";const n=e.insert("g").attr("class",it(t)).attr("id",t.domId??t.id),a=Math.max(30,(t==null?void 0:t.width)??0),{cssStyles:o}=t,s=j.svg(n),l=U(t,{});t.look!=="handDrawn"&&(l.roughness=0,l.fillStyle="solid");const c=s.circle(0,0,a*2,l),h=kd(a),u=s.path(h,l),f=n.insert(()=>c,":first-child");return f.insert(()=>u),o&&t.look!=="handDrawn"&&f.selectAll("path").attr("style",o),i&&t.look!=="handDrawn"&&f.selectAll("path").attr("style",i),Z(t,f),t.intersect=function(p){return $.info("crossedCircle intersect",t,{radius:a,point:p}),W.circle(t,a,p)},n}d(Sd,"crossedCircle");function Le(e,t,r,i=100,n=0,a=180){const o=[],s=n*Math.PI/180,h=(a*Math.PI/180-s)/(i-1);for(let u=0;u_,":first-child").attr("stroke-opacity",0),v.insert(()=>x,":first-child"),v.attr("class","text"),h&&t.look!=="handDrawn"&&v.selectAll("path").attr("style",h),i&&t.look!=="handDrawn"&&v.selectAll("path").attr("style",i),v.attr("transform",`translate(${c}, 0)`),o.attr("transform",`translate(${-s/2+c-(a.x-(a.left??0))},${-l/2+(t.padding??0)/2-(a.y-(a.top??0))})`),Z(t,v),t.intersect=function(k){return W.polygon(t,f,k)},n}d(Td,"curlyBraceLeft");function Ae(e,t,r,i=100,n=0,a=180){const o=[],s=n*Math.PI/180,h=(a*Math.PI/180-s)/(i-1);for(let u=0;u_,":first-child").attr("stroke-opacity",0),v.insert(()=>x,":first-child"),v.attr("class","text"),h&&t.look!=="handDrawn"&&v.selectAll("path").attr("style",h),i&&t.look!=="handDrawn"&&v.selectAll("path").attr("style",i),v.attr("transform",`translate(${-c}, 0)`),o.attr("transform",`translate(${-s/2+(t.padding??0)/2-(a.x-(a.left??0))},${-l/2+(t.padding??0)/2-(a.y-(a.top??0))})`),Z(t,v),t.intersect=function(k){return W.polygon(t,f,k)},n}d(Ld,"curlyBraceRight");function Tt(e,t,r,i=100,n=0,a=180){const o=[],s=n*Math.PI/180,h=(a*Math.PI/180-s)/(i-1);for(let u=0;uL,":first-child").attr("stroke-opacity",0),O.insert(()=>b,":first-child"),O.insert(()=>k,":first-child"),O.attr("class","text"),h&&t.look!=="handDrawn"&&O.selectAll("path").attr("style",h),i&&t.look!=="handDrawn"&&O.selectAll("path").attr("style",i),O.attr("transform",`translate(${c-c/4}, 0)`),o.attr("transform",`translate(${-s/2+(t.padding??0)/2-(a.x-(a.left??0))},${-l/2+(t.padding??0)/2-(a.y-(a.top??0))})`),Z(t,O),t.intersect=function(N){return W.polygon(t,p,N)},n}d(Ad,"curlyBraces");async function Bd(e,t){const{labelStyles:r,nodeStyles:i}=K(t);t.labelStyle=r;const{shapeSvg:n,bbox:a}=await rt(e,t,it(t)),o=80,s=20,l=Math.max(o,(a.width+(t.padding??0)*2)*1.25,(t==null?void 0:t.width)??0),c=Math.max(s,a.height+(t.padding??0)*2,(t==null?void 0:t.height)??0),h=c/2,{cssStyles:u}=t,f=j.svg(n),p=U(t,{});t.look!=="handDrawn"&&(p.roughness=0,p.fillStyle="solid");const g=l,m=c,y=g-h,x=m/4,b=[{x:y,y:0},{x,y:0},{x:0,y:m/2},{x,y:m},{x:y,y:m},...al(-y,-m/2,h,50,270,90)],_=ot(b),v=f.path(_,p),k=n.insert(()=>v,":first-child");return k.attr("class","basic label-container"),u&&t.look!=="handDrawn"&&k.selectChildren("path").attr("style",u),i&&t.look!=="handDrawn"&&k.selectChildren("path").attr("style",i),k.attr("transform",`translate(${-l/2}, ${-c/2})`),Z(t,k),t.intersect=function(M){return W.polygon(t,b,M)},n}d(Bd,"curvedTrapezoid");var Zk=d((e,t,r,i,n,a)=>[`M${e},${t+a}`,`a${n},${a} 0,0,0 ${r},0`,`a${n},${a} 0,0,0 ${-r},0`,`l0,${i}`,`a${n},${a} 0,0,0 ${r},0`,`l0,${-i}`].join(" "),"createCylinderPathD"),Kk=d((e,t,r,i,n,a)=>[`M${e},${t+a}`,`M${e+r},${t+a}`,`a${n},${a} 0,0,0 ${-r},0`,`l0,${i}`,`a${n},${a} 0,0,0 ${r},0`,`l0,${-i}`].join(" "),"createOuterCylinderPathD"),Qk=d((e,t,r,i,n,a)=>[`M${e-r/2},${-i/2}`,`a${n},${a} 0,0,0 ${r},0`].join(" "),"createInnerCylinderPathD");async function Md(e,t){const{labelStyles:r,nodeStyles:i}=K(t);t.labelStyle=r;const{shapeSvg:n,bbox:a,label:o}=await rt(e,t,it(t)),s=Math.max(a.width+t.padding,t.width??0),l=s/2,c=l/(2.5+s/50),h=Math.max(a.height+c+t.padding,t.height??0);let u;const{cssStyles:f}=t;if(t.look==="handDrawn"){const p=j.svg(n),g=Kk(0,0,s,h,l,c),m=Qk(0,c,s,h,l,c),y=p.path(g,U(t,{})),x=p.path(m,U(t,{fill:"none"}));u=n.insert(()=>x,":first-child"),u=n.insert(()=>y,":first-child"),u.attr("class","basic label-container"),f&&u.attr("style",f)}else{const p=Zk(0,0,s,h,l,c);u=n.insert("path",":first-child").attr("d",p).attr("class","basic label-container").attr("style",Nt(f)).attr("style",i)}return u.attr("label-offset-y",c),u.attr("transform",`translate(${-s/2}, ${-(h/2+c)})`),Z(t,u),o.attr("transform",`translate(${-(a.width/2)-(a.x-(a.left??0))}, ${-(a.height/2)+(t.padding??0)/1.5-(a.y-(a.top??0))})`),t.intersect=function(p){const g=W.rect(t,p),m=g.x-(t.x??0);if(l!=0&&(Math.abs(m)<(t.width??0)/2||Math.abs(m)==(t.width??0)/2&&Math.abs(g.y-(t.y??0))>(t.height??0)/2-c)){let y=c*c*(1-m*m/(l*l));y>0&&(y=Math.sqrt(y)),y=c-y,p.y-(t.y??0)>0&&(y=-y),g.y+=y}return g},n}d(Md,"cylinder");async function Ed(e,t){const{labelStyles:r,nodeStyles:i}=K(t);t.labelStyle=r;const{shapeSvg:n,bbox:a,label:o}=await rt(e,t,it(t)),s=a.width+t.padding,l=a.height+t.padding,c=l*.2,h=-s/2,u=-l/2-c/2,{cssStyles:f}=t,p=j.svg(n),g=U(t,{});t.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");const m=[{x:h,y:u+c},{x:-h,y:u+c},{x:-h,y:-u},{x:h,y:-u},{x:h,y:u},{x:-h,y:u},{x:-h,y:u+c}],y=p.polygon(m.map(b=>[b.x,b.y]),g),x=n.insert(()=>y,":first-child");return x.attr("class","basic label-container"),f&&t.look!=="handDrawn"&&x.selectAll("path").attr("style",f),i&&t.look!=="handDrawn"&&x.selectAll("path").attr("style",i),o.attr("transform",`translate(${h+(t.padding??0)/2-(a.x-(a.left??0))}, ${u+c+(t.padding??0)/2-(a.y-(a.top??0))})`),Z(t,x),t.intersect=function(b){return W.rect(t,b)},n}d(Ed,"dividedRectangle");async function Fd(e,t){var f,p;const{labelStyles:r,nodeStyles:i}=K(t);t.labelStyle=r;const{shapeSvg:n,bbox:a,halfPadding:o}=await rt(e,t,it(t)),l=a.width/2+o+5,c=a.width/2+o;let h;const{cssStyles:u}=t;if(t.look==="handDrawn"){const g=j.svg(n),m=U(t,{roughness:.2,strokeWidth:2.5}),y=U(t,{roughness:.2,strokeWidth:1.5}),x=g.circle(0,0,l*2,m),b=g.circle(0,0,c*2,y);h=n.insert("g",":first-child"),h.attr("class",Nt(t.cssClasses)).attr("style",Nt(u)),(f=h.node())==null||f.appendChild(x),(p=h.node())==null||p.appendChild(b)}else{h=n.insert("g",":first-child");const g=h.insert("circle",":first-child"),m=h.insert("circle");h.attr("class","basic label-container").attr("style",i),g.attr("class","outer-circle").attr("style",i).attr("r",l).attr("cx",0).attr("cy",0),m.attr("class","inner-circle").attr("style",i).attr("r",c).attr("cx",0).attr("cy",0)}return Z(t,h),t.intersect=function(g){return $.info("DoubleCircle intersect",t,l,g),W.circle(t,l,g)},n}d(Fd,"doublecircle");function $d(e,t,{config:{themeVariables:r}}){const{labelStyles:i,nodeStyles:n}=K(t);t.label="",t.labelStyle=i;const a=e.insert("g").attr("class",it(t)).attr("id",t.domId??t.id),o=7,{cssStyles:s}=t,l=j.svg(a),{nodeBorder:c}=r,h=U(t,{fillStyle:"solid"});t.look!=="handDrawn"&&(h.roughness=0);const u=l.circle(0,0,o*2,h),f=a.insert(()=>u,":first-child");return f.selectAll("path").attr("style",`fill: ${c} !important;`),s&&s.length>0&&t.look!=="handDrawn"&&f.selectAll("path").attr("style",s),n&&t.look!=="handDrawn"&&f.selectAll("path").attr("style",n),Z(t,f),t.intersect=function(p){return $.info("filledCircle intersect",t,{radius:o,point:p}),W.circle(t,o,p)},a}d($d,"filledCircle");async function Dd(e,t){const{labelStyles:r,nodeStyles:i}=K(t);t.labelStyle=r;const{shapeSvg:n,bbox:a,label:o}=await rt(e,t,it(t)),s=a.width+(t.padding??0),l=s+a.height,c=s+a.height,h=[{x:0,y:-l},{x:c,y:-l},{x:c/2,y:0}],{cssStyles:u}=t,f=j.svg(n),p=U(t,{});t.look!=="handDrawn"&&(p.roughness=0,p.fillStyle="solid");const g=ot(h),m=f.path(g,p),y=n.insert(()=>m,":first-child").attr("transform",`translate(${-l/2}, ${l/2})`);return u&&t.look!=="handDrawn"&&y.selectChildren("path").attr("style",u),i&&t.look!=="handDrawn"&&y.selectChildren("path").attr("style",i),t.width=s,t.height=l,Z(t,y),o.attr("transform",`translate(${-a.width/2-(a.x-(a.left??0))}, ${-l/2+(t.padding??0)/2+(a.y-(a.top??0))})`),t.intersect=function(x){return $.info("Triangle intersect",t,h,x),W.polygon(t,h,x)},n}d(Dd,"flippedTriangle");function Rd(e,t,{dir:r,config:{state:i,themeVariables:n}}){const{nodeStyles:a}=K(t);t.label="";const o=e.insert("g").attr("class",it(t)).attr("id",t.domId??t.id),{cssStyles:s}=t;let l=Math.max(70,(t==null?void 0:t.width)??0),c=Math.max(10,(t==null?void 0:t.height)??0);r==="LR"&&(l=Math.max(10,(t==null?void 0:t.width)??0),c=Math.max(70,(t==null?void 0:t.height)??0));const h=-1*l/2,u=-1*c/2,f=j.svg(o),p=U(t,{stroke:n.lineColor,fill:n.lineColor});t.look!=="handDrawn"&&(p.roughness=0,p.fillStyle="solid");const g=f.rectangle(h,u,l,c,p),m=o.insert(()=>g,":first-child");s&&t.look!=="handDrawn"&&m.selectAll("path").attr("style",s),a&&t.look!=="handDrawn"&&m.selectAll("path").attr("style",a),Z(t,m);const y=(i==null?void 0:i.padding)??0;return t.width&&t.height&&(t.width+=y/2||0,t.height+=y/2||0),t.intersect=function(x){return W.rect(t,x)},o}d(Rd,"forkJoin");async function Od(e,t){const{labelStyles:r,nodeStyles:i}=K(t);t.labelStyle=r;const n=80,a=50,{shapeSvg:o,bbox:s}=await rt(e,t,it(t)),l=Math.max(n,s.width+(t.padding??0)*2,(t==null?void 0:t.width)??0),c=Math.max(a,s.height+(t.padding??0)*2,(t==null?void 0:t.height)??0),h=c/2,{cssStyles:u}=t,f=j.svg(o),p=U(t,{});t.look!=="handDrawn"&&(p.roughness=0,p.fillStyle="solid");const g=[{x:-l/2,y:-c/2},{x:l/2-h,y:-c/2},...al(-l/2+h,0,h,50,90,270),{x:l/2-h,y:c/2},{x:-l/2,y:c/2}],m=ot(g),y=f.path(m,p),x=o.insert(()=>y,":first-child");return x.attr("class","basic label-container"),u&&t.look!=="handDrawn"&&x.selectChildren("path").attr("style",u),i&&t.look!=="handDrawn"&&x.selectChildren("path").attr("style",i),Z(t,x),t.intersect=function(b){return $.info("Pill intersect",t,{radius:h,point:b}),W.polygon(t,g,b)},o}d(Od,"halfRoundedRectangle");var Jk=d((e,t,r,i,n)=>[`M${e+n},${t}`,`L${e+r-n},${t}`,`L${e+r},${t-i/2}`,`L${e+r-n},${t-i}`,`L${e+n},${t-i}`,`L${e},${t-i/2}`,"Z"].join(" "),"createHexagonPathD");async function Id(e,t){const{labelStyles:r,nodeStyles:i}=K(t);t.labelStyle=r;const{shapeSvg:n,bbox:a}=await rt(e,t,it(t)),o=4,s=a.height+t.padding,l=s/o,c=a.width+2*l+t.padding,h=[{x:l,y:0},{x:c-l,y:0},{x:c,y:-s/2},{x:c-l,y:-s},{x:l,y:-s},{x:0,y:-s/2}];let u;const{cssStyles:f}=t;if(t.look==="handDrawn"){const p=j.svg(n),g=U(t,{}),m=Jk(0,0,c,s,l),y=p.path(m,g);u=n.insert(()=>y,":first-child").attr("transform",`translate(${-c/2}, ${s/2})`),f&&u.attr("style",f)}else u=Re(n,c,s,h);return i&&u.attr("style",i),t.width=c,t.height=s,Z(t,u),t.intersect=function(p){return W.polygon(t,h,p)},n}d(Id,"hexagon");async function Pd(e,t){const{labelStyles:r,nodeStyles:i}=K(t);t.label="",t.labelStyle=r;const{shapeSvg:n}=await rt(e,t,it(t)),a=Math.max(30,(t==null?void 0:t.width)??0),o=Math.max(30,(t==null?void 0:t.height)??0),{cssStyles:s}=t,l=j.svg(n),c=U(t,{});t.look!=="handDrawn"&&(c.roughness=0,c.fillStyle="solid");const h=[{x:0,y:0},{x:a,y:0},{x:0,y:o},{x:a,y:o}],u=ot(h),f=l.path(u,c),p=n.insert(()=>f,":first-child");return p.attr("class","basic label-container"),s&&t.look!=="handDrawn"&&p.selectChildren("path").attr("style",s),i&&t.look!=="handDrawn"&&p.selectChildren("path").attr("style",i),p.attr("transform",`translate(${-a/2}, ${-o/2})`),Z(t,p),t.intersect=function(g){return $.info("Pill intersect",t,{points:h}),W.polygon(t,h,g)},n}d(Pd,"hourglass");async function Nd(e,t,{config:{themeVariables:r,flowchart:i}}){const{labelStyles:n}=K(t);t.labelStyle=n;const a=t.assetHeight??48,o=t.assetWidth??48,s=Math.max(a,o),l=i==null?void 0:i.wrappingWidth;t.width=Math.max(s,l??0);const{shapeSvg:c,bbox:h,label:u}=await rt(e,t,"icon-shape default"),f=t.pos==="t",p=s,g=s,{nodeBorder:m}=r,{stylesMap:y}=ei(t),x=-g/2,b=-p/2,_=t.label?8:0,v=j.svg(c),k=U(t,{stroke:"none",fill:"none"});t.look!=="handDrawn"&&(k.roughness=0,k.fillStyle="solid");const M=v.rectangle(x,b,g,p,k),L=Math.max(g,h.width),O=p+h.height+_,N=v.rectangle(-L/2,-O/2,L,O,{...k,fill:"transparent",stroke:"none"}),R=c.insert(()=>M,":first-child"),E=c.insert(()=>N);if(t.icon){const q=c.append("g");q.html(`${await ba(t.icon,{height:s,width:s,fallbackPrefix:""})}`);const I=q.node().getBBox(),B=I.width,A=I.height,S=I.x,F=I.y;q.attr("transform",`translate(${-B/2-S},${f?h.height/2+_/2-A/2-F:-h.height/2-_/2-A/2-F})`),q.attr("style",`color: ${y.get("stroke")??m};`)}return u.attr("transform",`translate(${-h.width/2-(h.x-(h.left??0))},${f?-O/2:O/2-h.height})`),R.attr("transform",`translate(0,${f?h.height/2+_/2:-h.height/2-_/2})`),Z(t,E),t.intersect=function(q){if($.info("iconSquare intersect",t,q),!t.label)return W.rect(t,q);const I=t.x??0,B=t.y??0,A=t.height??0;let S=[];return f?S=[{x:I-h.width/2,y:B-A/2},{x:I+h.width/2,y:B-A/2},{x:I+h.width/2,y:B-A/2+h.height+_},{x:I+g/2,y:B-A/2+h.height+_},{x:I+g/2,y:B+A/2},{x:I-g/2,y:B+A/2},{x:I-g/2,y:B-A/2+h.height+_},{x:I-h.width/2,y:B-A/2+h.height+_}]:S=[{x:I-g/2,y:B-A/2},{x:I+g/2,y:B-A/2},{x:I+g/2,y:B-A/2+p},{x:I+h.width/2,y:B-A/2+p},{x:I+h.width/2/2,y:B+A/2},{x:I-h.width/2,y:B+A/2},{x:I-h.width/2,y:B-A/2+p},{x:I-g/2,y:B-A/2+p}],W.polygon(t,S,q)},c}d(Nd,"icon");async function zd(e,t,{config:{themeVariables:r,flowchart:i}}){const{labelStyles:n}=K(t);t.labelStyle=n;const a=t.assetHeight??48,o=t.assetWidth??48,s=Math.max(a,o),l=i==null?void 0:i.wrappingWidth;t.width=Math.max(s,l??0);const{shapeSvg:c,bbox:h,label:u}=await rt(e,t,"icon-shape default"),f=20,p=t.label?8:0,g=t.pos==="t",{nodeBorder:m,mainBkg:y}=r,{stylesMap:x}=ei(t),b=j.svg(c),_=U(t,{});t.look!=="handDrawn"&&(_.roughness=0,_.fillStyle="solid");const v=x.get("fill");_.stroke=v??y;const k=c.append("g");t.icon&&k.html(`${await ba(t.icon,{height:s,width:s,fallbackPrefix:""})}`);const M=k.node().getBBox(),L=M.width,O=M.height,N=M.x,R=M.y,E=Math.max(L,O)*Math.SQRT2+f*2,q=b.circle(0,0,E,_),I=Math.max(E,h.width),B=E+h.height+p,A=b.rectangle(-I/2,-B/2,I,B,{..._,fill:"transparent",stroke:"none"}),S=c.insert(()=>q,":first-child"),F=c.insert(()=>A);return k.attr("transform",`translate(${-L/2-N},${g?h.height/2+p/2-O/2-R:-h.height/2-p/2-O/2-R})`),k.attr("style",`color: ${x.get("stroke")??m};`),u.attr("transform",`translate(${-h.width/2-(h.x-(h.left??0))},${g?-B/2:B/2-h.height})`),S.attr("transform",`translate(0,${g?h.height/2+p/2:-h.height/2-p/2})`),Z(t,F),t.intersect=function(T){return $.info("iconSquare intersect",t,T),W.rect(t,T)},c}d(zd,"iconCircle");async function qd(e,t,{config:{themeVariables:r,flowchart:i}}){const{labelStyles:n}=K(t);t.labelStyle=n;const a=t.assetHeight??48,o=t.assetWidth??48,s=Math.max(a,o),l=i==null?void 0:i.wrappingWidth;t.width=Math.max(s,l??0);const{shapeSvg:c,bbox:h,halfPadding:u,label:f}=await rt(e,t,"icon-shape default"),p=t.pos==="t",g=s+u*2,m=s+u*2,{nodeBorder:y,mainBkg:x}=r,{stylesMap:b}=ei(t),_=-m/2,v=-g/2,k=t.label?8:0,M=j.svg(c),L=U(t,{});t.look!=="handDrawn"&&(L.roughness=0,L.fillStyle="solid");const O=b.get("fill");L.stroke=O??x;const N=M.path(De(_,v,m,g,5),L),R=Math.max(m,h.width),E=g+h.height+k,q=M.rectangle(-R/2,-E/2,R,E,{...L,fill:"transparent",stroke:"none"}),I=c.insert(()=>N,":first-child").attr("class","icon-shape2"),B=c.insert(()=>q);if(t.icon){const A=c.append("g");A.html(`${await ba(t.icon,{height:s,width:s,fallbackPrefix:""})}`);const S=A.node().getBBox(),F=S.width,T=S.height,z=S.x,Y=S.y;A.attr("transform",`translate(${-F/2-z},${p?h.height/2+k/2-T/2-Y:-h.height/2-k/2-T/2-Y})`),A.attr("style",`color: ${b.get("stroke")??y};`)}return f.attr("transform",`translate(${-h.width/2-(h.x-(h.left??0))},${p?-E/2:E/2-h.height})`),I.attr("transform",`translate(0,${p?h.height/2+k/2:-h.height/2-k/2})`),Z(t,B),t.intersect=function(A){if($.info("iconSquare intersect",t,A),!t.label)return W.rect(t,A);const S=t.x??0,F=t.y??0,T=t.height??0;let z=[];return p?z=[{x:S-h.width/2,y:F-T/2},{x:S+h.width/2,y:F-T/2},{x:S+h.width/2,y:F-T/2+h.height+k},{x:S+m/2,y:F-T/2+h.height+k},{x:S+m/2,y:F+T/2},{x:S-m/2,y:F+T/2},{x:S-m/2,y:F-T/2+h.height+k},{x:S-h.width/2,y:F-T/2+h.height+k}]:z=[{x:S-m/2,y:F-T/2},{x:S+m/2,y:F-T/2},{x:S+m/2,y:F-T/2+g},{x:S+h.width/2,y:F-T/2+g},{x:S+h.width/2/2,y:F+T/2},{x:S-h.width/2,y:F+T/2},{x:S-h.width/2,y:F-T/2+g},{x:S-m/2,y:F-T/2+g}],W.polygon(t,z,A)},c}d(qd,"iconRounded");async function Wd(e,t,{config:{themeVariables:r,flowchart:i}}){const{labelStyles:n}=K(t);t.labelStyle=n;const a=t.assetHeight??48,o=t.assetWidth??48,s=Math.max(a,o),l=i==null?void 0:i.wrappingWidth;t.width=Math.max(s,l??0);const{shapeSvg:c,bbox:h,halfPadding:u,label:f}=await rt(e,t,"icon-shape default"),p=t.pos==="t",g=s+u*2,m=s+u*2,{nodeBorder:y,mainBkg:x}=r,{stylesMap:b}=ei(t),_=-m/2,v=-g/2,k=t.label?8:0,M=j.svg(c),L=U(t,{});t.look!=="handDrawn"&&(L.roughness=0,L.fillStyle="solid");const O=b.get("fill");L.stroke=O??x;const N=M.path(De(_,v,m,g,.1),L),R=Math.max(m,h.width),E=g+h.height+k,q=M.rectangle(-R/2,-E/2,R,E,{...L,fill:"transparent",stroke:"none"}),I=c.insert(()=>N,":first-child"),B=c.insert(()=>q);if(t.icon){const A=c.append("g");A.html(`${await ba(t.icon,{height:s,width:s,fallbackPrefix:""})}`);const S=A.node().getBBox(),F=S.width,T=S.height,z=S.x,Y=S.y;A.attr("transform",`translate(${-F/2-z},${p?h.height/2+k/2-T/2-Y:-h.height/2-k/2-T/2-Y})`),A.attr("style",`color: ${b.get("stroke")??y};`)}return f.attr("transform",`translate(${-h.width/2-(h.x-(h.left??0))},${p?-E/2:E/2-h.height})`),I.attr("transform",`translate(0,${p?h.height/2+k/2:-h.height/2-k/2})`),Z(t,B),t.intersect=function(A){if($.info("iconSquare intersect",t,A),!t.label)return W.rect(t,A);const S=t.x??0,F=t.y??0,T=t.height??0;let z=[];return p?z=[{x:S-h.width/2,y:F-T/2},{x:S+h.width/2,y:F-T/2},{x:S+h.width/2,y:F-T/2+h.height+k},{x:S+m/2,y:F-T/2+h.height+k},{x:S+m/2,y:F+T/2},{x:S-m/2,y:F+T/2},{x:S-m/2,y:F-T/2+h.height+k},{x:S-h.width/2,y:F-T/2+h.height+k}]:z=[{x:S-m/2,y:F-T/2},{x:S+m/2,y:F-T/2},{x:S+m/2,y:F-T/2+g},{x:S+h.width/2,y:F-T/2+g},{x:S+h.width/2/2,y:F+T/2},{x:S-h.width/2,y:F+T/2},{x:S-h.width/2,y:F-T/2+g},{x:S-m/2,y:F-T/2+g}],W.polygon(t,z,A)},c}d(Wd,"iconSquare");async function Hd(e,t,{config:{flowchart:r}}){const i=new Image;i.src=(t==null?void 0:t.img)??"",await i.decode();const n=Number(i.naturalWidth.toString().replace("px","")),a=Number(i.naturalHeight.toString().replace("px",""));t.imageAspectRatio=n/a;const{labelStyles:o}=K(t);t.labelStyle=o;const s=r==null?void 0:r.wrappingWidth;t.defaultWidth=r==null?void 0:r.wrappingWidth;const l=Math.max(t.label?s??0:0,(t==null?void 0:t.assetWidth)??n),c=t.constraint==="on"&&t!=null&&t.assetHeight?t.assetHeight*t.imageAspectRatio:l,h=t.constraint==="on"?c/t.imageAspectRatio:(t==null?void 0:t.assetHeight)??a;t.width=Math.max(c,s??0);const{shapeSvg:u,bbox:f,label:p}=await rt(e,t,"image-shape default"),g=t.pos==="t",m=-c/2,y=-h/2,x=t.label?8:0,b=j.svg(u),_=U(t,{});t.look!=="handDrawn"&&(_.roughness=0,_.fillStyle="solid");const v=b.rectangle(m,y,c,h,_),k=Math.max(c,f.width),M=h+f.height+x,L=b.rectangle(-k/2,-M/2,k,M,{..._,fill:"none",stroke:"none"}),O=u.insert(()=>v,":first-child"),N=u.insert(()=>L);if(t.img){const R=u.append("image");R.attr("href",t.img),R.attr("width",c),R.attr("height",h),R.attr("preserveAspectRatio","none"),R.attr("transform",`translate(${-c/2},${g?M/2-h:-M/2})`)}return p.attr("transform",`translate(${-f.width/2-(f.x-(f.left??0))},${g?-h/2-f.height/2-x/2:h/2-f.height/2+x/2})`),O.attr("transform",`translate(0,${g?f.height/2+x/2:-f.height/2-x/2})`),Z(t,N),t.intersect=function(R){if($.info("iconSquare intersect",t,R),!t.label)return W.rect(t,R);const E=t.x??0,q=t.y??0,I=t.height??0;let B=[];return g?B=[{x:E-f.width/2,y:q-I/2},{x:E+f.width/2,y:q-I/2},{x:E+f.width/2,y:q-I/2+f.height+x},{x:E+c/2,y:q-I/2+f.height+x},{x:E+c/2,y:q+I/2},{x:E-c/2,y:q+I/2},{x:E-c/2,y:q-I/2+f.height+x},{x:E-f.width/2,y:q-I/2+f.height+x}]:B=[{x:E-c/2,y:q-I/2},{x:E+c/2,y:q-I/2},{x:E+c/2,y:q-I/2+h},{x:E+f.width/2,y:q-I/2+h},{x:E+f.width/2/2,y:q+I/2},{x:E-f.width/2,y:q+I/2},{x:E-f.width/2,y:q-I/2+h},{x:E-c/2,y:q-I/2+h}],W.polygon(t,B,R)},u}d(Hd,"imageSquare");async function jd(e,t){const{labelStyles:r,nodeStyles:i}=K(t);t.labelStyle=r;const{shapeSvg:n,bbox:a}=await rt(e,t,it(t)),o=Math.max(a.width+(t.padding??0)*2,(t==null?void 0:t.width)??0),s=Math.max(a.height+(t.padding??0)*2,(t==null?void 0:t.height)??0),l=[{x:0,y:0},{x:o,y:0},{x:o+3*s/6,y:-s},{x:-3*s/6,y:-s}];let c;const{cssStyles:h}=t;if(t.look==="handDrawn"){const u=j.svg(n),f=U(t,{}),p=ot(l),g=u.path(p,f);c=n.insert(()=>g,":first-child").attr("transform",`translate(${-o/2}, ${s/2})`),h&&c.attr("style",h)}else c=Re(n,o,s,l);return i&&c.attr("style",i),t.width=o,t.height=s,Z(t,c),t.intersect=function(u){return W.polygon(t,l,u)},n}d(jd,"inv_trapezoid");async function Ra(e,t,r){const{labelStyles:i,nodeStyles:n}=K(t);t.labelStyle=i;const{shapeSvg:a,bbox:o}=await rt(e,t,it(t)),s=Math.max(o.width+r.labelPaddingX*2,(t==null?void 0:t.width)||0),l=Math.max(o.height+r.labelPaddingY*2,(t==null?void 0:t.height)||0),c=-s/2,h=-l/2;let u,{rx:f,ry:p}=t;const{cssStyles:g}=t;if(r!=null&&r.rx&&r.ry&&(f=r.rx,p=r.ry),t.look==="handDrawn"){const m=j.svg(a),y=U(t,{}),x=f||p?m.path(De(c,h,s,l,f||0),y):m.rectangle(c,h,s,l,y);u=a.insert(()=>x,":first-child"),u.attr("class","basic label-container").attr("style",Nt(g))}else u=a.insert("rect",":first-child"),u.attr("class","basic label-container").attr("style",n).attr("rx",Nt(f)).attr("ry",Nt(p)).attr("x",c).attr("y",h).attr("width",s).attr("height",l);return Z(t,u),t.intersect=function(m){return W.rect(t,m)},a}d(Ra,"drawRect");async function Ud(e,t){const{shapeSvg:r,bbox:i,label:n}=await rt(e,t,"label"),a=r.insert("rect",":first-child");return a.attr("width",.1).attr("height",.1),r.attr("class","label edgeLabel"),n.attr("transform",`translate(${-(i.width/2)-(i.x-(i.left??0))}, ${-(i.height/2)-(i.y-(i.top??0))})`),Z(t,a),t.intersect=function(l){return W.rect(t,l)},r}d(Ud,"labelRect");async function Yd(e,t){const{labelStyles:r,nodeStyles:i}=K(t);t.labelStyle=r;const{shapeSvg:n,bbox:a}=await rt(e,t,it(t)),o=Math.max(a.width+(t.padding??0),(t==null?void 0:t.width)??0),s=Math.max(a.height+(t.padding??0),(t==null?void 0:t.height)??0),l=[{x:0,y:0},{x:o+3*s/6,y:0},{x:o,y:-s},{x:-(3*s)/6,y:-s}];let c;const{cssStyles:h}=t;if(t.look==="handDrawn"){const u=j.svg(n),f=U(t,{}),p=ot(l),g=u.path(p,f);c=n.insert(()=>g,":first-child").attr("transform",`translate(${-o/2}, ${s/2})`),h&&c.attr("style",h)}else c=Re(n,o,s,l);return i&&c.attr("style",i),t.width=o,t.height=s,Z(t,c),t.intersect=function(u){return W.polygon(t,l,u)},n}d(Yd,"lean_left");async function Gd(e,t){const{labelStyles:r,nodeStyles:i}=K(t);t.labelStyle=r;const{shapeSvg:n,bbox:a}=await rt(e,t,it(t)),o=Math.max(a.width+(t.padding??0),(t==null?void 0:t.width)??0),s=Math.max(a.height+(t.padding??0),(t==null?void 0:t.height)??0),l=[{x:-3*s/6,y:0},{x:o,y:0},{x:o+3*s/6,y:-s},{x:0,y:-s}];let c;const{cssStyles:h}=t;if(t.look==="handDrawn"){const u=j.svg(n),f=U(t,{}),p=ot(l),g=u.path(p,f);c=n.insert(()=>g,":first-child").attr("transform",`translate(${-o/2}, ${s/2})`),h&&c.attr("style",h)}else c=Re(n,o,s,l);return i&&c.attr("style",i),t.width=o,t.height=s,Z(t,c),t.intersect=function(u){return W.polygon(t,l,u)},n}d(Gd,"lean_right");function Vd(e,t){const{labelStyles:r,nodeStyles:i}=K(t);t.label="",t.labelStyle=r;const n=e.insert("g").attr("class",it(t)).attr("id",t.domId??t.id),{cssStyles:a}=t,o=Math.max(35,(t==null?void 0:t.width)??0),s=Math.max(35,(t==null?void 0:t.height)??0),l=7,c=[{x:o,y:0},{x:0,y:s+l/2},{x:o-2*l,y:s+l/2},{x:0,y:2*s},{x:o,y:s-l/2},{x:2*l,y:s-l/2}],h=j.svg(n),u=U(t,{});t.look!=="handDrawn"&&(u.roughness=0,u.fillStyle="solid");const f=ot(c),p=h.path(f,u),g=n.insert(()=>p,":first-child");return a&&t.look!=="handDrawn"&&g.selectAll("path").attr("style",a),i&&t.look!=="handDrawn"&&g.selectAll("path").attr("style",i),g.attr("transform",`translate(-${o/2},${-s})`),Z(t,g),t.intersect=function(m){return $.info("lightningBolt intersect",t,m),W.polygon(t,c,m)},n}d(Vd,"lightningBolt");var tS=d((e,t,r,i,n,a,o)=>[`M${e},${t+a}`,`a${n},${a} 0,0,0 ${r},0`,`a${n},${a} 0,0,0 ${-r},0`,`l0,${i}`,`a${n},${a} 0,0,0 ${r},0`,`l0,${-i}`,`M${e},${t+a+o}`,`a${n},${a} 0,0,0 ${r},0`].join(" "),"createCylinderPathD"),eS=d((e,t,r,i,n,a,o)=>[`M${e},${t+a}`,`M${e+r},${t+a}`,`a${n},${a} 0,0,0 ${-r},0`,`l0,${i}`,`a${n},${a} 0,0,0 ${r},0`,`l0,${-i}`,`M${e},${t+a+o}`,`a${n},${a} 0,0,0 ${r},0`].join(" "),"createOuterCylinderPathD"),rS=d((e,t,r,i,n,a)=>[`M${e-r/2},${-i/2}`,`a${n},${a} 0,0,0 ${r},0`].join(" "),"createInnerCylinderPathD");async function Xd(e,t){const{labelStyles:r,nodeStyles:i}=K(t);t.labelStyle=r;const{shapeSvg:n,bbox:a,label:o}=await rt(e,t,it(t)),s=Math.max(a.width+(t.padding??0),t.width??0),l=s/2,c=l/(2.5+s/50),h=Math.max(a.height+c+(t.padding??0),t.height??0),u=h*.1;let f;const{cssStyles:p}=t;if(t.look==="handDrawn"){const g=j.svg(n),m=eS(0,0,s,h,l,c,u),y=rS(0,c,s,h,l,c),x=U(t,{}),b=g.path(m,x),_=g.path(y,x);n.insert(()=>_,":first-child").attr("class","line"),f=n.insert(()=>b,":first-child"),f.attr("class","basic label-container"),p&&f.attr("style",p)}else{const g=tS(0,0,s,h,l,c,u);f=n.insert("path",":first-child").attr("d",g).attr("class","basic label-container").attr("style",Nt(p)).attr("style",i)}return f.attr("label-offset-y",c),f.attr("transform",`translate(${-s/2}, ${-(h/2+c)})`),Z(t,f),o.attr("transform",`translate(${-(a.width/2)-(a.x-(a.left??0))}, ${-(a.height/2)+c-(a.y-(a.top??0))})`),t.intersect=function(g){const m=W.rect(t,g),y=m.x-(t.x??0);if(l!=0&&(Math.abs(y)<(t.width??0)/2||Math.abs(y)==(t.width??0)/2&&Math.abs(m.y-(t.y??0))>(t.height??0)/2-c)){let x=c*c*(1-y*y/(l*l));x>0&&(x=Math.sqrt(x)),x=c-x,g.y-(t.y??0)>0&&(x=-x),m.y+=x}return m},n}d(Xd,"linedCylinder");async function Zd(e,t){const{labelStyles:r,nodeStyles:i}=K(t);t.labelStyle=r;const{shapeSvg:n,bbox:a,label:o}=await rt(e,t,it(t)),s=Math.max(a.width+(t.padding??0)*2,(t==null?void 0:t.width)??0),l=Math.max(a.height+(t.padding??0)*2,(t==null?void 0:t.height)??0),c=l/4,h=l+c,{cssStyles:u}=t,f=j.svg(n),p=U(t,{});t.look!=="handDrawn"&&(p.roughness=0,p.fillStyle="solid");const g=[{x:-s/2-s/2*.1,y:-h/2},{x:-s/2-s/2*.1,y:h/2},...Ye(-s/2-s/2*.1,h/2,s/2+s/2*.1,h/2,c,.8),{x:s/2+s/2*.1,y:-h/2},{x:-s/2-s/2*.1,y:-h/2},{x:-s/2,y:-h/2},{x:-s/2,y:h/2*1.1},{x:-s/2,y:-h/2}],m=f.polygon(g.map(x=>[x.x,x.y]),p),y=n.insert(()=>m,":first-child");return y.attr("class","basic label-container"),u&&t.look!=="handDrawn"&&y.selectAll("path").attr("style",u),i&&t.look!=="handDrawn"&&y.selectAll("path").attr("style",i),y.attr("transform",`translate(0,${-c/2})`),o.attr("transform",`translate(${-s/2+(t.padding??0)+s/2*.1/2-(a.x-(a.left??0))},${-l/2+(t.padding??0)-c/2-(a.y-(a.top??0))})`),Z(t,y),t.intersect=function(x){return W.polygon(t,g,x)},n}d(Zd,"linedWaveEdgedRect");async function Kd(e,t){const{labelStyles:r,nodeStyles:i}=K(t);t.labelStyle=r;const{shapeSvg:n,bbox:a,label:o}=await rt(e,t,it(t)),s=Math.max(a.width+(t.padding??0)*2,(t==null?void 0:t.width)??0),l=Math.max(a.height+(t.padding??0)*2,(t==null?void 0:t.height)??0),c=5,h=-s/2,u=-l/2,{cssStyles:f}=t,p=j.svg(n),g=U(t,{}),m=[{x:h-c,y:u+c},{x:h-c,y:u+l+c},{x:h+s-c,y:u+l+c},{x:h+s-c,y:u+l},{x:h+s,y:u+l},{x:h+s,y:u+l-c},{x:h+s+c,y:u+l-c},{x:h+s+c,y:u-c},{x:h+c,y:u-c},{x:h+c,y:u},{x:h,y:u},{x:h,y:u+c}],y=[{x:h,y:u+c},{x:h+s-c,y:u+c},{x:h+s-c,y:u+l},{x:h+s,y:u+l},{x:h+s,y:u},{x:h,y:u}];t.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");const x=ot(m),b=p.path(x,g),_=ot(y),v=p.path(_,{...g,fill:"none"}),k=n.insert(()=>v,":first-child");return k.insert(()=>b,":first-child"),k.attr("class","basic label-container"),f&&t.look!=="handDrawn"&&k.selectAll("path").attr("style",f),i&&t.look!=="handDrawn"&&k.selectAll("path").attr("style",i),o.attr("transform",`translate(${-(a.width/2)-c-(a.x-(a.left??0))}, ${-(a.height/2)+c-(a.y-(a.top??0))})`),Z(t,k),t.intersect=function(M){return W.polygon(t,m,M)},n}d(Kd,"multiRect");async function Qd(e,t){const{labelStyles:r,nodeStyles:i}=K(t);t.labelStyle=r;const{shapeSvg:n,bbox:a,label:o}=await rt(e,t,it(t)),s=Math.max(a.width+(t.padding??0)*2,(t==null?void 0:t.width)??0),l=Math.max(a.height+(t.padding??0)*2,(t==null?void 0:t.height)??0),c=l/4,h=l+c,u=-s/2,f=-h/2,p=5,{cssStyles:g}=t,m=Ye(u-p,f+h+p,u+s-p,f+h+p,c,.8),y=m==null?void 0:m[m.length-1],x=[{x:u-p,y:f+p},{x:u-p,y:f+h+p},...m,{x:u+s-p,y:y.y-p},{x:u+s,y:y.y-p},{x:u+s,y:y.y-2*p},{x:u+s+p,y:y.y-2*p},{x:u+s+p,y:f-p},{x:u+p,y:f-p},{x:u+p,y:f},{x:u,y:f},{x:u,y:f+p}],b=[{x:u,y:f+p},{x:u+s-p,y:f+p},{x:u+s-p,y:y.y-p},{x:u+s,y:y.y-p},{x:u+s,y:f},{x:u,y:f}],_=j.svg(n),v=U(t,{});t.look!=="handDrawn"&&(v.roughness=0,v.fillStyle="solid");const k=ot(x),M=_.path(k,v),L=ot(b),O=_.path(L,v),N=n.insert(()=>M,":first-child");return N.insert(()=>O),N.attr("class","basic label-container"),g&&t.look!=="handDrawn"&&N.selectAll("path").attr("style",g),i&&t.look!=="handDrawn"&&N.selectAll("path").attr("style",i),N.attr("transform",`translate(0,${-c/2})`),o.attr("transform",`translate(${-(a.width/2)-p-(a.x-(a.left??0))}, ${-(a.height/2)+p-c/2-(a.y-(a.top??0))})`),Z(t,N),t.intersect=function(R){return W.polygon(t,x,R)},n}d(Qd,"multiWaveEdgedRectangle");async function Jd(e,t,{config:{themeVariables:r}}){var x;const{labelStyles:i,nodeStyles:n}=K(t);t.labelStyle=i,t.useHtmlLabels||((x=he().flowchart)==null?void 0:x.htmlLabels)!==!1||(t.centerLabel=!0);const{shapeSvg:o,bbox:s}=await rt(e,t,it(t)),l=Math.max(s.width+(t.padding??0)*2,(t==null?void 0:t.width)??0),c=Math.max(s.height+(t.padding??0)*2,(t==null?void 0:t.height)??0),h=-l/2,u=-c/2,{cssStyles:f}=t,p=j.svg(o),g=U(t,{fill:r.noteBkgColor,stroke:r.noteBorderColor});t.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");const m=p.rectangle(h,u,l,c,g),y=o.insert(()=>m,":first-child");return y.attr("class","basic label-container"),f&&t.look!=="handDrawn"&&y.selectAll("path").attr("style",f),n&&t.look!=="handDrawn"&&y.selectAll("path").attr("style",n),Z(t,y),t.intersect=function(b){return W.rect(t,b)},o}d(Jd,"note");var iS=d((e,t,r)=>[`M${e+r/2},${t}`,`L${e+r},${t-r/2}`,`L${e+r/2},${t-r}`,`L${e},${t-r/2}`,"Z"].join(" "),"createDecisionBoxPathD");async function tg(e,t){const{labelStyles:r,nodeStyles:i}=K(t);t.labelStyle=r;const{shapeSvg:n,bbox:a}=await rt(e,t,it(t)),o=a.width+t.padding,s=a.height+t.padding,l=o+s,c=[{x:l/2,y:0},{x:l,y:-l/2},{x:l/2,y:-l},{x:0,y:-l/2}];let h;const{cssStyles:u}=t;if(t.look==="handDrawn"){const f=j.svg(n),p=U(t,{}),g=iS(0,0,l),m=f.path(g,p);h=n.insert(()=>m,":first-child").attr("transform",`translate(${-l/2}, ${l/2})`),u&&h.attr("style",u)}else h=Re(n,l,l,c);return i&&h.attr("style",i),Z(t,h),t.intersect=function(f){return $.debug(`APA12 Intersect called SPLIT +point:`,f,` +node: +`,t,` +res:`,W.polygon(t,c,f)),W.polygon(t,c,f)},n}d(tg,"question");async function eg(e,t){const{labelStyles:r,nodeStyles:i}=K(t);t.labelStyle=r;const{shapeSvg:n,bbox:a,label:o}=await rt(e,t,it(t)),s=Math.max(a.width+(t.padding??0),(t==null?void 0:t.width)??0),l=Math.max(a.height+(t.padding??0),(t==null?void 0:t.height)??0),c=-s/2,h=-l/2,u=h/2,f=[{x:c+u,y:h},{x:c,y:0},{x:c+u,y:-h},{x:-c,y:-h},{x:-c,y:h}],{cssStyles:p}=t,g=j.svg(n),m=U(t,{});t.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");const y=ot(f),x=g.path(y,m),b=n.insert(()=>x,":first-child");return b.attr("class","basic label-container"),p&&t.look!=="handDrawn"&&b.selectAll("path").attr("style",p),i&&t.look!=="handDrawn"&&b.selectAll("path").attr("style",i),b.attr("transform",`translate(${-u/2},0)`),o.attr("transform",`translate(${-u/2-a.width/2-(a.x-(a.left??0))}, ${-(a.height/2)-(a.y-(a.top??0))})`),Z(t,b),t.intersect=function(_){return W.polygon(t,f,_)},n}d(eg,"rect_left_inv_arrow");async function rg(e,t){var O,N;const{labelStyles:r,nodeStyles:i}=K(t);t.labelStyle=r;let n;t.cssClasses?n="node "+t.cssClasses:n="node default";const a=e.insert("g").attr("class",n).attr("id",t.domId||t.id),o=a.insert("g"),s=a.insert("g").attr("class","label").attr("style",i),l=t.description,c=t.label,h=s.node().appendChild(await nr(c,t.labelStyle,!0,!0));let u={width:0,height:0};if(Bt((N=(O=ct())==null?void 0:O.flowchart)==null?void 0:N.htmlLabels)){const R=h.children[0],E=lt(h);u=R.getBoundingClientRect(),E.attr("width",u.width),E.attr("height",u.height)}$.info("Text 2",l);const f=l||[],p=h.getBBox(),g=s.node().appendChild(await nr(f.join?f.join("
    "):f,t.labelStyle,!0,!0)),m=g.children[0],y=lt(g);u=m.getBoundingClientRect(),y.attr("width",u.width),y.attr("height",u.height);const x=(t.padding||0)/2;lt(g).attr("transform","translate( "+(u.width>p.width?0:(p.width-u.width)/2)+", "+(p.height+x+5)+")"),lt(h).attr("transform","translate( "+(u.width($.debug("Rough node insert CXC",q),I),":first-child"),M=a.insert(()=>($.debug("Rough node insert CXC",q),q),":first-child")}else M=o.insert("rect",":first-child"),L=o.insert("line"),M.attr("class","outer title-state").attr("style",i).attr("x",-u.width/2-x).attr("y",-u.height/2-x).attr("width",u.width+(t.padding||0)).attr("height",u.height+(t.padding||0)),L.attr("class","divider").attr("x1",-u.width/2-x).attr("x2",u.width/2+x).attr("y1",-u.height/2-x+p.height+x).attr("y2",-u.height/2-x+p.height+x);return Z(t,M),t.intersect=function(R){return W.rect(t,R)},a}d(rg,"rectWithTitle");async function ig(e,t){const r={rx:5,ry:5,classes:"",labelPaddingX:((t==null?void 0:t.padding)||0)*1,labelPaddingY:((t==null?void 0:t.padding)||0)*1};return Ra(e,t,r)}d(ig,"roundedRect");async function ng(e,t){const{labelStyles:r,nodeStyles:i}=K(t);t.labelStyle=r;const{shapeSvg:n,bbox:a,label:o}=await rt(e,t,it(t)),s=(t==null?void 0:t.padding)??0,l=Math.max(a.width+(t.padding??0)*2,(t==null?void 0:t.width)??0),c=Math.max(a.height+(t.padding??0)*2,(t==null?void 0:t.height)??0),h=-a.width/2-s,u=-a.height/2-s,{cssStyles:f}=t,p=j.svg(n),g=U(t,{});t.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");const m=[{x:h,y:u},{x:h+l+8,y:u},{x:h+l+8,y:u+c},{x:h-8,y:u+c},{x:h-8,y:u},{x:h,y:u},{x:h,y:u+c}],y=p.polygon(m.map(b=>[b.x,b.y]),g),x=n.insert(()=>y,":first-child");return x.attr("class","basic label-container").attr("style",Nt(f)),i&&t.look!=="handDrawn"&&x.selectAll("path").attr("style",i),f&&t.look!=="handDrawn"&&x.selectAll("path").attr("style",i),o.attr("transform",`translate(${-l/2+4+(t.padding??0)-(a.x-(a.left??0))},${-c/2+(t.padding??0)-(a.y-(a.top??0))})`),Z(t,x),t.intersect=function(b){return W.rect(t,b)},n}d(ng,"shadedProcess");async function ag(e,t){const{labelStyles:r,nodeStyles:i}=K(t);t.labelStyle=r;const{shapeSvg:n,bbox:a,label:o}=await rt(e,t,it(t)),s=Math.max(a.width+(t.padding??0)*2,(t==null?void 0:t.width)??0),l=Math.max(a.height+(t.padding??0)*2,(t==null?void 0:t.height)??0),c=-s/2,h=-l/2,{cssStyles:u}=t,f=j.svg(n),p=U(t,{});t.look!=="handDrawn"&&(p.roughness=0,p.fillStyle="solid");const g=[{x:c,y:h},{x:c,y:h+l},{x:c+s,y:h+l},{x:c+s,y:h-l/2}],m=ot(g),y=f.path(m,p),x=n.insert(()=>y,":first-child");return x.attr("class","basic label-container"),u&&t.look!=="handDrawn"&&x.selectChildren("path").attr("style",u),i&&t.look!=="handDrawn"&&x.selectChildren("path").attr("style",i),x.attr("transform",`translate(0, ${l/4})`),o.attr("transform",`translate(${-s/2+(t.padding??0)-(a.x-(a.left??0))}, ${-l/4+(t.padding??0)-(a.y-(a.top??0))})`),Z(t,x),t.intersect=function(b){return W.polygon(t,g,b)},n}d(ag,"slopedRect");async function sg(e,t){const r={rx:0,ry:0,classes:"",labelPaddingX:((t==null?void 0:t.padding)||0)*2,labelPaddingY:((t==null?void 0:t.padding)||0)*1};return Ra(e,t,r)}d(sg,"squareRect");async function og(e,t){const{labelStyles:r,nodeStyles:i}=K(t);t.labelStyle=r;const{shapeSvg:n,bbox:a}=await rt(e,t,it(t)),o=a.height+t.padding,s=a.width+o/4+t.padding;let l;const{cssStyles:c}=t;if(t.look==="handDrawn"){const h=j.svg(n),u=U(t,{}),f=De(-s/2,-o/2,s,o,o/2),p=h.path(f,u);l=n.insert(()=>p,":first-child"),l.attr("class","basic label-container").attr("style",Nt(c))}else l=n.insert("rect",":first-child"),l.attr("class","basic label-container").attr("style",i).attr("rx",o/2).attr("ry",o/2).attr("x",-s/2).attr("y",-o/2).attr("width",s).attr("height",o);return Z(t,l),t.intersect=function(h){return W.rect(t,h)},n}d(og,"stadium");async function lg(e,t){return Ra(e,t,{rx:5,ry:5,classes:"flowchart-node"})}d(lg,"state");function cg(e,t,{config:{themeVariables:r}}){const{labelStyles:i,nodeStyles:n}=K(t);t.labelStyle=i;const{cssStyles:a}=t,{lineColor:o,stateBorder:s,nodeBorder:l}=r,c=e.insert("g").attr("class","node default").attr("id",t.domId||t.id),h=j.svg(c),u=U(t,{});t.look!=="handDrawn"&&(u.roughness=0,u.fillStyle="solid");const f=h.circle(0,0,14,{...u,stroke:o,strokeWidth:2}),p=s??l,g=h.circle(0,0,5,{...u,fill:p,stroke:p,strokeWidth:2,fillStyle:"solid"}),m=c.insert(()=>f,":first-child");return m.insert(()=>g),a&&m.selectAll("path").attr("style",a),n&&m.selectAll("path").attr("style",n),Z(t,m),t.intersect=function(y){return W.circle(t,7,y)},c}d(cg,"stateEnd");function hg(e,t,{config:{themeVariables:r}}){const{lineColor:i}=r,n=e.insert("g").attr("class","node default").attr("id",t.domId||t.id);let a;if(t.look==="handDrawn"){const s=j.svg(n).circle(0,0,14,Ik(i));a=n.insert(()=>s),a.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14)}else a=n.insert("circle",":first-child"),a.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14);return Z(t,a),t.intersect=function(o){return W.circle(t,7,o)},n}d(hg,"stateStart");async function ug(e,t){const{labelStyles:r,nodeStyles:i}=K(t);t.labelStyle=r;const{shapeSvg:n,bbox:a}=await rt(e,t,it(t)),o=((t==null?void 0:t.padding)||0)/2,s=a.width+t.padding,l=a.height+t.padding,c=-a.width/2-o,h=-a.height/2-o,u=[{x:0,y:0},{x:s,y:0},{x:s,y:-l},{x:0,y:-l},{x:0,y:0},{x:-8,y:0},{x:s+8,y:0},{x:s+8,y:-l},{x:-8,y:-l},{x:-8,y:0}];if(t.look==="handDrawn"){const f=j.svg(n),p=U(t,{}),g=f.rectangle(c-8,h,s+16,l,p),m=f.line(c,h,c,h+l,p),y=f.line(c+s,h,c+s,h+l,p);n.insert(()=>m,":first-child"),n.insert(()=>y,":first-child");const x=n.insert(()=>g,":first-child"),{cssStyles:b}=t;x.attr("class","basic label-container").attr("style",Nt(b)),Z(t,x)}else{const f=Re(n,s,l,u);i&&f.attr("style",i),Z(t,f)}return t.intersect=function(f){return W.polygon(t,u,f)},n}d(ug,"subroutine");async function fg(e,t){const{labelStyles:r,nodeStyles:i}=K(t);t.labelStyle=r;const{shapeSvg:n,bbox:a}=await rt(e,t,it(t)),o=Math.max(a.width+(t.padding??0)*2,(t==null?void 0:t.width)??0),s=Math.max(a.height+(t.padding??0)*2,(t==null?void 0:t.height)??0),l=-o/2,c=-s/2,h=.2*s,u=.2*s,{cssStyles:f}=t,p=j.svg(n),g=U(t,{}),m=[{x:l-h/2,y:c},{x:l+o+h/2,y:c},{x:l+o+h/2,y:c+s},{x:l-h/2,y:c+s}],y=[{x:l+o-h/2,y:c+s},{x:l+o+h/2,y:c+s},{x:l+o+h/2,y:c+s-u}];t.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");const x=ot(m),b=p.path(x,g),_=ot(y),v=p.path(_,{...g,fillStyle:"solid"}),k=n.insert(()=>v,":first-child");return k.insert(()=>b,":first-child"),k.attr("class","basic label-container"),f&&t.look!=="handDrawn"&&k.selectAll("path").attr("style",f),i&&t.look!=="handDrawn"&&k.selectAll("path").attr("style",i),Z(t,k),t.intersect=function(M){return W.polygon(t,m,M)},n}d(fg,"taggedRect");async function pg(e,t){const{labelStyles:r,nodeStyles:i}=K(t);t.labelStyle=r;const{shapeSvg:n,bbox:a,label:o}=await rt(e,t,it(t)),s=Math.max(a.width+(t.padding??0)*2,(t==null?void 0:t.width)??0),l=Math.max(a.height+(t.padding??0)*2,(t==null?void 0:t.height)??0),c=l/4,h=.2*s,u=.2*l,f=l+c,{cssStyles:p}=t,g=j.svg(n),m=U(t,{});t.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");const y=[{x:-s/2-s/2*.1,y:f/2},...Ye(-s/2-s/2*.1,f/2,s/2+s/2*.1,f/2,c,.8),{x:s/2+s/2*.1,y:-f/2},{x:-s/2-s/2*.1,y:-f/2}],x=-s/2+s/2*.1,b=-f/2-u*.4,_=[{x:x+s-h,y:(b+l)*1.4},{x:x+s,y:b+l-u},{x:x+s,y:(b+l)*.9},...Ye(x+s,(b+l)*1.3,x+s-h,(b+l)*1.5,-l*.03,.5)],v=ot(y),k=g.path(v,m),M=ot(_),L=g.path(M,{...m,fillStyle:"solid"}),O=n.insert(()=>L,":first-child");return O.insert(()=>k,":first-child"),O.attr("class","basic label-container"),p&&t.look!=="handDrawn"&&O.selectAll("path").attr("style",p),i&&t.look!=="handDrawn"&&O.selectAll("path").attr("style",i),O.attr("transform",`translate(0,${-c/2})`),o.attr("transform",`translate(${-s/2+(t.padding??0)-(a.x-(a.left??0))},${-l/2+(t.padding??0)-c/2-(a.y-(a.top??0))})`),Z(t,O),t.intersect=function(N){return W.polygon(t,y,N)},n}d(pg,"taggedWaveEdgedRectangle");async function dg(e,t){const{labelStyles:r,nodeStyles:i}=K(t);t.labelStyle=r;const{shapeSvg:n,bbox:a}=await rt(e,t,it(t)),o=Math.max(a.width+t.padding,(t==null?void 0:t.width)||0),s=Math.max(a.height+t.padding,(t==null?void 0:t.height)||0),l=-o/2,c=-s/2,h=n.insert("rect",":first-child");return h.attr("class","text").attr("style",i).attr("rx",0).attr("ry",0).attr("x",l).attr("y",c).attr("width",o).attr("height",s),Z(t,h),t.intersect=function(u){return W.rect(t,u)},n}d(dg,"text");var nS=d((e,t,r,i,n,a)=>`M${e},${t} + a${n},${a} 0,0,1 0,${-i} + l${r},0 + a${n},${a} 0,0,1 0,${i} + M${r},${-i} + a${n},${a} 0,0,0 0,${i} + l${-r},0`,"createCylinderPathD"),aS=d((e,t,r,i,n,a)=>[`M${e},${t}`,`M${e+r},${t}`,`a${n},${a} 0,0,0 0,${-i}`,`l${-r},0`,`a${n},${a} 0,0,0 0,${i}`,`l${r},0`].join(" "),"createOuterCylinderPathD"),sS=d((e,t,r,i,n,a)=>[`M${e+r/2},${-i/2}`,`a${n},${a} 0,0,0 0,${i}`].join(" "),"createInnerCylinderPathD");async function gg(e,t){const{labelStyles:r,nodeStyles:i}=K(t);t.labelStyle=r;const{shapeSvg:n,bbox:a,label:o,halfPadding:s}=await rt(e,t,it(t)),l=t.look==="neo"?s*2:s,c=a.height+l,h=c/2,u=h/(2.5+c/50),f=a.width+u+l,{cssStyles:p}=t;let g;if(t.look==="handDrawn"){const m=j.svg(n),y=aS(0,0,f,c,u,h),x=sS(0,0,f,c,u,h),b=m.path(y,U(t,{})),_=m.path(x,U(t,{fill:"none"}));g=n.insert(()=>_,":first-child"),g=n.insert(()=>b,":first-child"),g.attr("class","basic label-container"),p&&g.attr("style",p)}else{const m=nS(0,0,f,c,u,h);g=n.insert("path",":first-child").attr("d",m).attr("class","basic label-container").attr("style",Nt(p)).attr("style",i),g.attr("class","basic label-container"),p&&g.selectAll("path").attr("style",p),i&&g.selectAll("path").attr("style",i)}return g.attr("label-offset-x",u),g.attr("transform",`translate(${-f/2}, ${c/2} )`),o.attr("transform",`translate(${-(a.width/2)-u-(a.x-(a.left??0))}, ${-(a.height/2)-(a.y-(a.top??0))})`),Z(t,g),t.intersect=function(m){const y=W.rect(t,m),x=y.y-(t.y??0);if(h!=0&&(Math.abs(x)<(t.height??0)/2||Math.abs(x)==(t.height??0)/2&&Math.abs(y.x-(t.x??0))>(t.width??0)/2-u)){let b=u*u*(1-x*x/(h*h));b!=0&&(b=Math.sqrt(b)),b=u-b,m.x-(t.x??0)>0&&(b=-b),y.x+=b}return y},n}d(gg,"tiltedCylinder");async function mg(e,t){const{labelStyles:r,nodeStyles:i}=K(t);t.labelStyle=r;const{shapeSvg:n,bbox:a}=await rt(e,t,it(t)),o=a.width+t.padding,s=a.height+t.padding,l=[{x:-3*s/6,y:0},{x:o+3*s/6,y:0},{x:o,y:-s},{x:0,y:-s}];let c;const{cssStyles:h}=t;if(t.look==="handDrawn"){const u=j.svg(n),f=U(t,{}),p=ot(l),g=u.path(p,f);c=n.insert(()=>g,":first-child").attr("transform",`translate(${-o/2}, ${s/2})`),h&&c.attr("style",h)}else c=Re(n,o,s,l);return i&&c.attr("style",i),t.width=o,t.height=s,Z(t,c),t.intersect=function(u){return W.polygon(t,l,u)},n}d(mg,"trapezoid");async function yg(e,t){const{labelStyles:r,nodeStyles:i}=K(t);t.labelStyle=r;const{shapeSvg:n,bbox:a}=await rt(e,t,it(t)),o=60,s=20,l=Math.max(o,a.width+(t.padding??0)*2,(t==null?void 0:t.width)??0),c=Math.max(s,a.height+(t.padding??0)*2,(t==null?void 0:t.height)??0),{cssStyles:h}=t,u=j.svg(n),f=U(t,{});t.look!=="handDrawn"&&(f.roughness=0,f.fillStyle="solid");const p=[{x:-l/2*.8,y:-c/2},{x:l/2*.8,y:-c/2},{x:l/2,y:-c/2*.6},{x:l/2,y:c/2},{x:-l/2,y:c/2},{x:-l/2,y:-c/2*.6}],g=ot(p),m=u.path(g,f),y=n.insert(()=>m,":first-child");return y.attr("class","basic label-container"),h&&t.look!=="handDrawn"&&y.selectChildren("path").attr("style",h),i&&t.look!=="handDrawn"&&y.selectChildren("path").attr("style",i),Z(t,y),t.intersect=function(x){return W.polygon(t,p,x)},n}d(yg,"trapezoidalPentagon");async function xg(e,t){var b;const{labelStyles:r,nodeStyles:i}=K(t);t.labelStyle=r;const{shapeSvg:n,bbox:a,label:o}=await rt(e,t,it(t)),s=Bt((b=ct().flowchart)==null?void 0:b.htmlLabels),l=a.width+(t.padding??0),c=l+a.height,h=l+a.height,u=[{x:0,y:0},{x:h,y:0},{x:h/2,y:-c}],{cssStyles:f}=t,p=j.svg(n),g=U(t,{});t.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");const m=ot(u),y=p.path(m,g),x=n.insert(()=>y,":first-child").attr("transform",`translate(${-c/2}, ${c/2})`);return f&&t.look!=="handDrawn"&&x.selectChildren("path").attr("style",f),i&&t.look!=="handDrawn"&&x.selectChildren("path").attr("style",i),t.width=l,t.height=c,Z(t,x),o.attr("transform",`translate(${-a.width/2-(a.x-(a.left??0))}, ${c/2-(a.height+(t.padding??0)/(s?2:1)-(a.y-(a.top??0)))})`),t.intersect=function(_){return $.info("Triangle intersect",t,u,_),W.polygon(t,u,_)},n}d(xg,"triangle");async function bg(e,t){const{labelStyles:r,nodeStyles:i}=K(t);t.labelStyle=r;const{shapeSvg:n,bbox:a,label:o}=await rt(e,t,it(t)),s=Math.max(a.width+(t.padding??0)*2,(t==null?void 0:t.width)??0),l=Math.max(a.height+(t.padding??0)*2,(t==null?void 0:t.height)??0),c=l/8,h=l+c,{cssStyles:u}=t,p=70-s,g=p>0?p/2:0,m=j.svg(n),y=U(t,{});t.look!=="handDrawn"&&(y.roughness=0,y.fillStyle="solid");const x=[{x:-s/2-g,y:h/2},...Ye(-s/2-g,h/2,s/2+g,h/2,c,.8),{x:s/2+g,y:-h/2},{x:-s/2-g,y:-h/2}],b=ot(x),_=m.path(b,y),v=n.insert(()=>_,":first-child");return v.attr("class","basic label-container"),u&&t.look!=="handDrawn"&&v.selectAll("path").attr("style",u),i&&t.look!=="handDrawn"&&v.selectAll("path").attr("style",i),v.attr("transform",`translate(0,${-c/2})`),o.attr("transform",`translate(${-s/2+(t.padding??0)-(a.x-(a.left??0))},${-l/2+(t.padding??0)-c-(a.y-(a.top??0))})`),Z(t,v),t.intersect=function(k){return W.polygon(t,x,k)},n}d(bg,"waveEdgedRectangle");async function _g(e,t){const{labelStyles:r,nodeStyles:i}=K(t);t.labelStyle=r;const{shapeSvg:n,bbox:a}=await rt(e,t,it(t)),o=100,s=50,l=Math.max(a.width+(t.padding??0)*2,(t==null?void 0:t.width)??0),c=Math.max(a.height+(t.padding??0)*2,(t==null?void 0:t.height)??0),h=l/c;let u=l,f=c;u>f*h?f=u/h:u=f*h,u=Math.max(u,o),f=Math.max(f,s);const p=Math.min(f*.2,f/4),g=f+p*2,{cssStyles:m}=t,y=j.svg(n),x=U(t,{});t.look!=="handDrawn"&&(x.roughness=0,x.fillStyle="solid");const b=[{x:-u/2,y:g/2},...Ye(-u/2,g/2,u/2,g/2,p,1),{x:u/2,y:-g/2},...Ye(u/2,-g/2,-u/2,-g/2,p,-1)],_=ot(b),v=y.path(_,x),k=n.insert(()=>v,":first-child");return k.attr("class","basic label-container"),m&&t.look!=="handDrawn"&&k.selectAll("path").attr("style",m),i&&t.look!=="handDrawn"&&k.selectAll("path").attr("style",i),Z(t,k),t.intersect=function(M){return W.polygon(t,b,M)},n}d(_g,"waveRectangle");async function Cg(e,t){const{labelStyles:r,nodeStyles:i}=K(t);t.labelStyle=r;const{shapeSvg:n,bbox:a,label:o}=await rt(e,t,it(t)),s=Math.max(a.width+(t.padding??0)*2,(t==null?void 0:t.width)??0),l=Math.max(a.height+(t.padding??0)*2,(t==null?void 0:t.height)??0),c=5,h=-s/2,u=-l/2,{cssStyles:f}=t,p=j.svg(n),g=U(t,{}),m=[{x:h-c,y:u-c},{x:h-c,y:u+l},{x:h+s,y:u+l},{x:h+s,y:u-c}],y=`M${h-c},${u-c} L${h+s},${u-c} L${h+s},${u+l} L${h-c},${u+l} L${h-c},${u-c} + M${h-c},${u} L${h+s},${u} + M${h},${u-c} L${h},${u+l}`;t.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");const x=p.path(y,g),b=n.insert(()=>x,":first-child");return b.attr("transform",`translate(${c/2}, ${c/2})`),b.attr("class","basic label-container"),f&&t.look!=="handDrawn"&&b.selectAll("path").attr("style",f),i&&t.look!=="handDrawn"&&b.selectAll("path").attr("style",i),o.attr("transform",`translate(${-(a.width/2)+c/2-(a.x-(a.left??0))}, ${-(a.height/2)+c/2-(a.y-(a.top??0))})`),Z(t,b),t.intersect=function(_){return W.polygon(t,m,_)},n}d(Cg,"windowPane");async function wg(e,t,r,i,n=r.class.padding??12){const a=i?0:3,o=e.insert("g").attr("class",it(t)).attr("id",t.domId||t.id);let s=null,l=null,c=null,h=null,u=0,f=0,p=0;if(s=o.insert("g").attr("class","annotation-group text"),t.annotations.length>0){const b=t.annotations[0];await vi(s,{text:`«${b}»`},0),u=s.node().getBBox().height}l=o.insert("g").attr("class","label-group text"),await vi(l,t,0,["font-weight: bolder"]);const g=l.node().getBBox();f=g.height,c=o.insert("g").attr("class","members-group text");let m=0;for(const b of t.members){const _=await vi(c,b,m,[b.parseClassifier()]);m+=_+a}p=c.node().getBBox().height,p<=0&&(p=n/2),h=o.insert("g").attr("class","methods-group text");let y=0;for(const b of t.methods){const _=await vi(h,b,y,[b.parseClassifier()]);y+=_+a}let x=o.node().getBBox();if(s!==null){const b=s.node().getBBox();s.attr("transform",`translate(${-b.width/2})`)}return l.attr("transform",`translate(${-g.width/2}, ${u})`),x=o.node().getBBox(),c.attr("transform",`translate(0, ${u+f+n*2})`),x=o.node().getBBox(),h.attr("transform",`translate(0, ${u+f+(p?p+n*4:n*2)})`),x=o.node().getBBox(),{shapeSvg:o,bbox:x}}d(wg,"textHelper");async function vi(e,t,r,i=[]){const n=e.insert("g").attr("class","label").attr("style",i.join("; ")),a=he();let o="useHtmlLabels"in t?t.useHtmlLabels:Bt(a.htmlLabels)??!0,s="";"text"in t?s=t.text:s=t.label,!o&&s.startsWith("\\")&&(s=s.substring(1)),qr(s)&&(o=!0);const l=await Jr(n,Ph(Qr(s)),{width:Yr(s,a)+50,classes:"markdown-node-label",useHtmlLabels:o},a);let c,h=1;if(o){const u=l.children[0],f=lt(l);h=u.innerHTML.split("
    ").length,u.innerHTML.includes("")&&(h+=u.innerHTML.split("").length-1);const p=u.getElementsByTagName("img");if(p){const g=s.replace(/]*>/g,"").trim()==="";await Promise.all([...p].map(m=>new Promise(y=>{function x(){var b;if(m.style.display="flex",m.style.flexDirection="column",g){const _=((b=a.fontSize)==null?void 0:b.toString())??window.getComputedStyle(document.body).fontSize,k=parseInt(_,10)*5+"px";m.style.minWidth=k,m.style.maxWidth=k}else m.style.width="100%";y(m)}d(x,"setupImage"),setTimeout(()=>{m.complete&&x()}),m.addEventListener("error",x),m.addEventListener("load",x)})))}c=u.getBoundingClientRect(),f.attr("width",c.width),f.attr("height",c.height)}else{i.includes("font-weight: bolder")&<(l).selectAll("tspan").attr("font-weight",""),h=l.children.length;const u=l.children[0];(l.textContent===""||l.textContent.includes(">"))&&(u.textContent=s[0]+s.substring(1).replaceAll(">",">").replaceAll("<","<").trim(),s[1]===" "&&(u.textContent=u.textContent[0]+" "+u.textContent.substring(1))),u.textContent==="undefined"&&(u.textContent=""),c=l.getBBox()}return n.attr("transform","translate(0,"+(-c.height/(2*h)+r)+")"),c.height}d(vi,"addText");async function vg(e,t){var N,R;const r=ct(),i=r.class.padding??12,n=i,a=t.useHtmlLabels??Bt(r.htmlLabels)??!0,o=t;o.annotations=o.annotations??[],o.members=o.members??[],o.methods=o.methods??[];const{shapeSvg:s,bbox:l}=await wg(e,t,r,a,n),{labelStyles:c,nodeStyles:h}=K(t);t.labelStyle=c,t.cssStyles=o.styles||"";const u=((N=o.styles)==null?void 0:N.join(";"))||h||"";t.cssStyles||(t.cssStyles=u.replaceAll("!important","").split(";"));const f=o.members.length===0&&o.methods.length===0&&!((R=r.class)!=null&&R.hideEmptyMembersBox),p=j.svg(s),g=U(t,{});t.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");const m=l.width;let y=l.height;o.members.length===0&&o.methods.length===0?y+=n:o.members.length>0&&o.methods.length===0&&(y+=n*2);const x=-m/2,b=-y/2,_=p.rectangle(x-i,b-i-(f?i:o.members.length===0&&o.methods.length===0?-i/2:0),m+2*i,y+2*i+(f?i*2:o.members.length===0&&o.methods.length===0?-i:0),g),v=s.insert(()=>_,":first-child");v.attr("class","basic label-container");const k=v.node().getBBox();s.selectAll(".text").each((E,q,I)=>{var z;const B=lt(I[q]),A=B.attr("transform");let S=0;if(A){const J=RegExp(/translate\(([^,]+),([^)]+)\)/).exec(A);J&&(S=parseFloat(J[2]))}let F=S+b+i-(f?i:o.members.length===0&&o.methods.length===0?-i/2:0);a||(F-=4);let T=x;(B.attr("class").includes("label-group")||B.attr("class").includes("annotation-group"))&&(T=-((z=B.node())==null?void 0:z.getBBox().width)/2||0,s.selectAll("text").each(function(Y,J,pt){window.getComputedStyle(pt[J]).textAnchor==="middle"&&(T=0)})),B.attr("transform",`translate(${T}, ${F})`)});const M=s.select(".annotation-group").node().getBBox().height-(f?i/2:0)||0,L=s.select(".label-group").node().getBBox().height-(f?i/2:0)||0,O=s.select(".members-group").node().getBBox().height-(f?i/2:0)||0;if(o.members.length>0||o.methods.length>0||f){const E=p.line(k.x,M+L+b+i,k.x+k.width,M+L+b+i,g);s.insert(()=>E).attr("class","divider").attr("style",u)}if(f||o.members.length>0||o.methods.length>0){const E=p.line(k.x,M+L+O+b+n*2+i,k.x+k.width,M+L+O+b+i+n*2,g);s.insert(()=>E).attr("class","divider").attr("style",u)}if(o.look!=="handDrawn"&&s.selectAll("path").attr("style",u),v.select(":nth-child(2)").attr("style",u),s.selectAll(".divider").select("path").attr("style",u),t.labelStyle?s.selectAll("span").attr("style",t.labelStyle):s.selectAll("span").attr("style",u),!a){const E=RegExp(/color\s*:\s*([^;]*)/),q=E.exec(u);if(q){const I=q[0].replace("color","fill");s.selectAll("tspan").attr("style",I)}else if(c){const I=E.exec(c);if(I){const B=I[0].replace("color","fill");s.selectAll("tspan").attr("style",B)}}}return Z(t,v),t.intersect=function(E){return W.rect(t,E)},s}d(vg,"classBox");var oS=d(e=>{switch(e){case"Very High":return"red";case"High":return"orange";case"Medium":return null;case"Low":return"blue";case"Very Low":return"lightblue"}},"colorFromPriority");async function kg(e,t,{config:r}){var q,I;const{labelStyles:i,nodeStyles:n}=K(t);t.labelStyle=i||"";const a=10,o=t.width;t.width=(t.width??200)-10;const{shapeSvg:s,bbox:l,label:c}=await rt(e,t,it(t)),h=t.padding||10;let u="",f;"ticket"in t&&t.ticket&&((q=r==null?void 0:r.kanban)!=null&&q.ticketBaseUrl)&&(u=(I=r==null?void 0:r.kanban)==null?void 0:I.ticketBaseUrl.replace("#TICKET#",t.ticket),f=s.insert("svg:a",":first-child").attr("class","kanban-ticket-link").attr("xlink:href",u).attr("target","_blank"));const p={useHtmlLabels:t.useHtmlLabels,labelStyle:t.labelStyle||"",width:t.width,img:t.img,padding:t.padding||8,centerLabel:!1};let g,m;f?{label:g,bbox:m}=await us(f,"ticket"in t&&t.ticket||"",p):{label:g,bbox:m}=await us(s,"ticket"in t&&t.ticket||"",p);const{label:y,bbox:x}=await us(s,"assigned"in t&&t.assigned||"",p);t.width=o;const b=10,_=(t==null?void 0:t.width)||0,v=Math.max(m.height,x.height)/2,k=Math.max(l.height+b*2,(t==null?void 0:t.height)||0)+v,M=-_/2,L=-k/2;c.attr("transform","translate("+(h-_/2)+", "+(-v-l.height/2)+")"),g.attr("transform","translate("+(h-_/2)+", "+(-v+l.height/2)+")"),y.attr("transform","translate("+(h+_/2-x.width-2*a)+", "+(-v+l.height/2)+")");let O;const{rx:N,ry:R}=t,{cssStyles:E}=t;if(t.look==="handDrawn"){const B=j.svg(s),A=U(t,{}),S=N||R?B.path(De(M,L,_,k,N||0),A):B.rectangle(M,L,_,k,A);O=s.insert(()=>S,":first-child"),O.attr("class","basic label-container").attr("style",E||null)}else{O=s.insert("rect",":first-child"),O.attr("class","basic label-container __APA__").attr("style",n).attr("rx",N??5).attr("ry",R??5).attr("x",M).attr("y",L).attr("width",_).attr("height",k);const B="priority"in t&&t.priority;if(B){const A=s.append("line"),S=M+2,F=L+Math.floor((N??0)/2),T=L+k-Math.floor((N??0)/2);A.attr("x1",S).attr("y1",F).attr("x2",S).attr("y2",T).attr("stroke-width","4").attr("stroke",oS(B))}}return Z(t,O),t.height=k,t.intersect=function(B){return W.rect(t,B)},s}d(kg,"kanbanItem");var lS=[{semanticName:"Process",name:"Rectangle",shortName:"rect",description:"Standard process shape",aliases:["proc","process","rectangle"],internalAliases:["squareRect"],handler:sg},{semanticName:"Event",name:"Rounded Rectangle",shortName:"rounded",description:"Represents an event",aliases:["event"],internalAliases:["roundedRect"],handler:ig},{semanticName:"Terminal Point",name:"Stadium",shortName:"stadium",description:"Terminal point",aliases:["terminal","pill"],handler:og},{semanticName:"Subprocess",name:"Framed Rectangle",shortName:"fr-rect",description:"Subprocess",aliases:["subprocess","subproc","framed-rectangle","subroutine"],handler:ug},{semanticName:"Database",name:"Cylinder",shortName:"cyl",description:"Database storage",aliases:["db","database","cylinder"],handler:Md},{semanticName:"Start",name:"Circle",shortName:"circle",description:"Starting point",aliases:["circ"],handler:vd},{semanticName:"Decision",name:"Diamond",shortName:"diam",description:"Decision-making step",aliases:["decision","diamond","question"],handler:tg},{semanticName:"Prepare Conditional",name:"Hexagon",shortName:"hex",description:"Preparation or condition step",aliases:["hexagon","prepare"],handler:Id},{semanticName:"Data Input/Output",name:"Lean Right",shortName:"lean-r",description:"Represents input or output",aliases:["lean-right","in-out"],internalAliases:["lean_right"],handler:Gd},{semanticName:"Data Input/Output",name:"Lean Left",shortName:"lean-l",description:"Represents output or input",aliases:["lean-left","out-in"],internalAliases:["lean_left"],handler:Yd},{semanticName:"Priority Action",name:"Trapezoid Base Bottom",shortName:"trap-b",description:"Priority action",aliases:["priority","trapezoid-bottom","trapezoid"],handler:mg},{semanticName:"Manual Operation",name:"Trapezoid Base Top",shortName:"trap-t",description:"Represents a manual task",aliases:["manual","trapezoid-top","inv-trapezoid"],internalAliases:["inv_trapezoid"],handler:jd},{semanticName:"Stop",name:"Double Circle",shortName:"dbl-circ",description:"Represents a stop point",aliases:["double-circle"],internalAliases:["doublecircle"],handler:Fd},{semanticName:"Text Block",name:"Text Block",shortName:"text",description:"Text block",handler:dg},{semanticName:"Card",name:"Notched Rectangle",shortName:"notch-rect",description:"Represents a card",aliases:["card","notched-rectangle"],handler:Cd},{semanticName:"Lined/Shaded Process",name:"Lined Rectangle",shortName:"lin-rect",description:"Lined process shape",aliases:["lined-rectangle","lined-process","lin-proc","shaded-process"],handler:ng},{semanticName:"Start",name:"Small Circle",shortName:"sm-circ",description:"Small starting point",aliases:["start","small-circle"],internalAliases:["stateStart"],handler:hg},{semanticName:"Stop",name:"Framed Circle",shortName:"fr-circ",description:"Stop point",aliases:["stop","framed-circle"],internalAliases:["stateEnd"],handler:cg},{semanticName:"Fork/Join",name:"Filled Rectangle",shortName:"fork",description:"Fork or join in process flow",aliases:["join"],internalAliases:["forkJoin"],handler:Rd},{semanticName:"Collate",name:"Hourglass",shortName:"hourglass",description:"Represents a collate operation",aliases:["hourglass","collate"],handler:Pd},{semanticName:"Comment",name:"Curly Brace",shortName:"brace",description:"Adds a comment",aliases:["comment","brace-l"],handler:Td},{semanticName:"Comment Right",name:"Curly Brace",shortName:"brace-r",description:"Adds a comment",handler:Ld},{semanticName:"Comment with braces on both sides",name:"Curly Braces",shortName:"braces",description:"Adds a comment",handler:Ad},{semanticName:"Com Link",name:"Lightning Bolt",shortName:"bolt",description:"Communication link",aliases:["com-link","lightning-bolt"],handler:Vd},{semanticName:"Document",name:"Document",shortName:"doc",description:"Represents a document",aliases:["doc","document"],handler:bg},{semanticName:"Delay",name:"Half-Rounded Rectangle",shortName:"delay",description:"Represents a delay",aliases:["half-rounded-rectangle"],handler:Od},{semanticName:"Direct Access Storage",name:"Horizontal Cylinder",shortName:"h-cyl",description:"Direct access storage",aliases:["das","horizontal-cylinder"],handler:gg},{semanticName:"Disk Storage",name:"Lined Cylinder",shortName:"lin-cyl",description:"Disk storage",aliases:["disk","lined-cylinder"],handler:Xd},{semanticName:"Display",name:"Curved Trapezoid",shortName:"curv-trap",description:"Represents a display",aliases:["curved-trapezoid","display"],handler:Bd},{semanticName:"Divided Process",name:"Divided Rectangle",shortName:"div-rect",description:"Divided process shape",aliases:["div-proc","divided-rectangle","divided-process"],handler:Ed},{semanticName:"Extract",name:"Triangle",shortName:"tri",description:"Extraction process",aliases:["extract","triangle"],handler:xg},{semanticName:"Internal Storage",name:"Window Pane",shortName:"win-pane",description:"Internal storage",aliases:["internal-storage","window-pane"],handler:Cg},{semanticName:"Junction",name:"Filled Circle",shortName:"f-circ",description:"Junction point",aliases:["junction","filled-circle"],handler:$d},{semanticName:"Loop Limit",name:"Trapezoidal Pentagon",shortName:"notch-pent",description:"Loop limit step",aliases:["loop-limit","notched-pentagon"],handler:yg},{semanticName:"Manual File",name:"Flipped Triangle",shortName:"flip-tri",description:"Manual file operation",aliases:["manual-file","flipped-triangle"],handler:Dd},{semanticName:"Manual Input",name:"Sloped Rectangle",shortName:"sl-rect",description:"Manual input step",aliases:["manual-input","sloped-rectangle"],handler:ag},{semanticName:"Multi-Document",name:"Stacked Document",shortName:"docs",description:"Multiple documents",aliases:["documents","st-doc","stacked-document"],handler:Qd},{semanticName:"Multi-Process",name:"Stacked Rectangle",shortName:"st-rect",description:"Multiple processes",aliases:["procs","processes","stacked-rectangle"],handler:Kd},{semanticName:"Stored Data",name:"Bow Tie Rectangle",shortName:"bow-rect",description:"Stored data",aliases:["stored-data","bow-tie-rectangle"],handler:_d},{semanticName:"Summary",name:"Crossed Circle",shortName:"cross-circ",description:"Summary",aliases:["summary","crossed-circle"],handler:Sd},{semanticName:"Tagged Document",name:"Tagged Document",shortName:"tag-doc",description:"Tagged document",aliases:["tag-doc","tagged-document"],handler:pg},{semanticName:"Tagged Process",name:"Tagged Rectangle",shortName:"tag-rect",description:"Tagged process",aliases:["tagged-rectangle","tag-proc","tagged-process"],handler:fg},{semanticName:"Paper Tape",name:"Flag",shortName:"flag",description:"Paper tape",aliases:["paper-tape"],handler:_g},{semanticName:"Odd",name:"Odd",shortName:"odd",description:"Odd shape",internalAliases:["rect_left_inv_arrow"],handler:eg},{semanticName:"Lined Document",name:"Lined Document",shortName:"lin-doc",description:"Lined document",aliases:["lined-document"],handler:Zd}],cS=d(()=>{const t=[...Object.entries({state:lg,choice:wd,note:Jd,rectWithTitle:rg,labelRect:Ud,iconSquare:Wd,iconCircle:zd,icon:Nd,iconRounded:qd,imageSquare:Hd,anchor:bd,kanbanItem:kg,classBox:vg}),...lS.flatMap(r=>[r.shortName,..."aliases"in r?r.aliases:[],..."internalAliases"in r?r.internalAliases:[]].map(n=>[n,r.handler]))];return Object.fromEntries(t)},"generateShapeMap"),Sg=cS();function hS(e){return e in Sg}d(hS,"isValidShape");var Oa=new Map;async function Tg(e,t,r){let i,n;t.shape==="rect"&&(t.rx&&t.ry?t.shape="roundedRect":t.shape="squareRect");const a=t.shape?Sg[t.shape]:void 0;if(!a)throw new Error(`No such shape: ${t.shape}. Please check your syntax.`);if(t.link){let o;r.config.securityLevel==="sandbox"?o="_top":t.linkTarget&&(o=t.linkTarget||"_blank"),i=e.insert("svg:a").attr("xlink:href",t.link).attr("target",o??null),n=await a(i,t,r)}else n=await a(e,t,r),i=n;return t.tooltip&&n.attr("title",t.tooltip),Oa.set(t.id,i),t.haveCallback&&i.attr("class",i.attr("class")+" clickable"),i}d(Tg,"insertNode");var fB=d((e,t)=>{Oa.set(t.id,e)},"setNodeElem"),pB=d(()=>{Oa.clear()},"clear"),dB=d(e=>{const t=Oa.get(e.id);$.trace("Transforming node",e.diff,e,"translate("+(e.x-e.width/2-5)+", "+e.width/2+")");const r=8,i=e.diff||0;return e.clusterNode?t.attr("transform","translate("+(e.x+i-e.width/2)+", "+(e.y-e.height/2-r)+")"):t.attr("transform","translate("+e.x+", "+e.y+")"),i},"positionNode"),te={aggregation:18,extension:18,composition:18,dependency:6,lollipop:13.5,arrow_point:4};function ki(e,t){if(e===void 0||t===void 0)return{angle:0,deltaX:0,deltaY:0};e=yt(e),t=yt(t);const[r,i]=[e.x,e.y],[n,a]=[t.x,t.y],o=n-r,s=a-i;return{angle:Math.atan(s/o),deltaX:o,deltaY:s}}d(ki,"calculateDeltaAndAngle");var yt=d(e=>Array.isArray(e)?{x:e[0],y:e[1]}:e,"pointTransformer"),uS=d(e=>({x:d(function(t,r,i){let n=0;const a=yt(i[0]).x=0?1:-1)}else if(r===i.length-1&&Object.hasOwn(te,e.arrowTypeEnd)){const{angle:p,deltaX:g}=ki(i[i.length-1],i[i.length-2]);n=te[e.arrowTypeEnd]*Math.cos(p)*(g>=0?1:-1)}const o=Math.abs(yt(t).x-yt(i[i.length-1]).x),s=Math.abs(yt(t).y-yt(i[i.length-1]).y),l=Math.abs(yt(t).x-yt(i[0]).x),c=Math.abs(yt(t).y-yt(i[0]).y),h=te[e.arrowTypeStart],u=te[e.arrowTypeEnd],f=1;if(o0&&s0&&c=0?1:-1)}else if(r===i.length-1&&Object.hasOwn(te,e.arrowTypeEnd)){const{angle:p,deltaY:g}=ki(i[i.length-1],i[i.length-2]);n=te[e.arrowTypeEnd]*Math.abs(Math.sin(p))*(g>=0?1:-1)}const o=Math.abs(yt(t).y-yt(i[i.length-1]).y),s=Math.abs(yt(t).x-yt(i[i.length-1]).x),l=Math.abs(yt(t).y-yt(i[0]).y),c=Math.abs(yt(t).x-yt(i[0]).x),h=te[e.arrowTypeStart],u=te[e.arrowTypeEnd],f=1;if(o0&&s0&&c{t.arrowTypeStart&&Vc(e,"start",t.arrowTypeStart,r,i,n),t.arrowTypeEnd&&Vc(e,"end",t.arrowTypeEnd,r,i,n)},"addEdgeMarkers"),pS={arrow_cross:"cross",arrow_point:"point",arrow_barb:"barb",arrow_circle:"circle",aggregation:"aggregation",extension:"extension",composition:"composition",dependency:"dependency",lollipop:"lollipop"},Vc=d((e,t,r,i,n,a)=>{const o=pS[r];if(!o){$.warn(`Unknown arrow type: ${r}`);return}const s=t==="start"?"Start":"End";e.attr(`marker-${t}`,`url(${i}#${n}_${a}-${o}${s})`)},"addEdgeMarker"),ha=new Map,Lt=new Map,gB=d(()=>{ha.clear(),Lt.clear()},"clear"),xi=d(e=>e?e.reduce((r,i)=>r+";"+i,""):"","getLabelStyles"),dS=d(async(e,t)=>{let r=Bt(ct().flowchart.htmlLabels);const i=await Jr(e,t.label,{style:xi(t.labelStyle),useHtmlLabels:r,addSvgBackground:!0,isNode:!1});$.info("abc82",t,t.labelType);const n=e.insert("g").attr("class","edgeLabel"),a=n.insert("g").attr("class","label");a.node().appendChild(i);let o=i.getBBox();if(r){const l=i.children[0],c=lt(i);o=l.getBoundingClientRect(),c.attr("width",o.width),c.attr("height",o.height)}a.attr("transform","translate("+-o.width/2+", "+-o.height/2+")"),ha.set(t.id,n),t.width=o.width,t.height=o.height;let s;if(t.startLabelLeft){const l=await nr(t.startLabelLeft,xi(t.labelStyle)),c=e.insert("g").attr("class","edgeTerminals"),h=c.insert("g").attr("class","inner");s=h.node().appendChild(l);const u=l.getBBox();h.attr("transform","translate("+-u.width/2+", "+-u.height/2+")"),Lt.get(t.id)||Lt.set(t.id,{}),Lt.get(t.id).startLeft=c,Si(s,t.startLabelLeft)}if(t.startLabelRight){const l=await nr(t.startLabelRight,xi(t.labelStyle)),c=e.insert("g").attr("class","edgeTerminals"),h=c.insert("g").attr("class","inner");s=c.node().appendChild(l),h.node().appendChild(l);const u=l.getBBox();h.attr("transform","translate("+-u.width/2+", "+-u.height/2+")"),Lt.get(t.id)||Lt.set(t.id,{}),Lt.get(t.id).startRight=c,Si(s,t.startLabelRight)}if(t.endLabelLeft){const l=await nr(t.endLabelLeft,xi(t.labelStyle)),c=e.insert("g").attr("class","edgeTerminals"),h=c.insert("g").attr("class","inner");s=h.node().appendChild(l);const u=l.getBBox();h.attr("transform","translate("+-u.width/2+", "+-u.height/2+")"),c.node().appendChild(l),Lt.get(t.id)||Lt.set(t.id,{}),Lt.get(t.id).endLeft=c,Si(s,t.endLabelLeft)}if(t.endLabelRight){const l=await nr(t.endLabelRight,xi(t.labelStyle)),c=e.insert("g").attr("class","edgeTerminals"),h=c.insert("g").attr("class","inner");s=h.node().appendChild(l);const u=l.getBBox();h.attr("transform","translate("+-u.width/2+", "+-u.height/2+")"),c.node().appendChild(l),Lt.get(t.id)||Lt.set(t.id,{}),Lt.get(t.id).endRight=c,Si(s,t.endLabelRight)}return i},"insertEdgeLabel");function Si(e,t){ct().flowchart.htmlLabels&&e&&(e.style.width=t.length*9+"px",e.style.height="12px")}d(Si,"setTerminalWidth");var gS=d((e,t)=>{$.debug("Moving label abc88 ",e.id,e.label,ha.get(e.id),t);let r=t.updatedPath?t.updatedPath:t.originalPath;const i=ct(),{subGraphTitleTotalMargin:n}=So(i);if(e.label){const a=ha.get(e.id);let o=e.x,s=e.y;if(r){const l=ge.calcLabelPosition(r);$.debug("Moving label "+e.label+" from (",o,",",s,") to (",l.x,",",l.y,") abc88"),t.updatedPath&&(o=l.x,s=l.y)}a.attr("transform",`translate(${o}, ${s+n/2})`)}if(e.startLabelLeft){const a=Lt.get(e.id).startLeft;let o=e.x,s=e.y;if(r){const l=ge.calcTerminalLabelPosition(e.arrowTypeStart?10:0,"start_left",r);o=l.x,s=l.y}a.attr("transform",`translate(${o}, ${s})`)}if(e.startLabelRight){const a=Lt.get(e.id).startRight;let o=e.x,s=e.y;if(r){const l=ge.calcTerminalLabelPosition(e.arrowTypeStart?10:0,"start_right",r);o=l.x,s=l.y}a.attr("transform",`translate(${o}, ${s})`)}if(e.endLabelLeft){const a=Lt.get(e.id).endLeft;let o=e.x,s=e.y;if(r){const l=ge.calcTerminalLabelPosition(e.arrowTypeEnd?10:0,"end_left",r);o=l.x,s=l.y}a.attr("transform",`translate(${o}, ${s})`)}if(e.endLabelRight){const a=Lt.get(e.id).endRight;let o=e.x,s=e.y;if(r){const l=ge.calcTerminalLabelPosition(e.arrowTypeEnd?10:0,"end_right",r);o=l.x,s=l.y}a.attr("transform",`translate(${o}, ${s})`)}},"positionEdgeLabel"),mS=d((e,t)=>{const r=e.x,i=e.y,n=Math.abs(t.x-r),a=Math.abs(t.y-i),o=e.width/2,s=e.height/2;return n>=o||a>=s},"outsideNode"),yS=d((e,t,r)=>{$.debug(`intersection calc abc89: + outsidePoint: ${JSON.stringify(t)} + insidePoint : ${JSON.stringify(r)} + node : x:${e.x} y:${e.y} w:${e.width} h:${e.height}`);const i=e.x,n=e.y,a=Math.abs(i-r.x),o=e.width/2;let s=r.xMath.abs(i-t.x)*l){let u=r.y{$.warn("abc88 cutPathAtIntersect",e,t);let r=[],i=e[0],n=!1;return e.forEach(a=>{if($.info("abc88 checking point",a,t),!mS(t,a)&&!n){const o=yS(t,i,a);$.debug("abc88 inside",a,i,o),$.debug("abc88 intersection",o,t);let s=!1;r.forEach(l=>{s=s||l.x===o.x&&l.y===o.y}),r.some(l=>l.x===o.x&&l.y===o.y)?$.warn("abc88 no intersect",o,r):r.push(o),n=!0}else $.warn("abc88 outside",a,i),i=a,n||r.push(a)}),$.debug("returning points",r),r},"cutPathAtIntersect");function Lg(e){const t=[],r=[];for(let i=1;i5&&Math.abs(a.y-n.y)>5||n.y===a.y&&a.x===o.x&&Math.abs(a.x-n.x)>5&&Math.abs(a.y-o.y)>5)&&(t.push(a),r.push(i))}return{cornerPoints:t,cornerPointPositions:r}}d(Lg,"extractCornerPoints");var Zc=d(function(e,t,r){const i=t.x-e.x,n=t.y-e.y,a=Math.sqrt(i*i+n*n),o=r/a;return{x:t.x-o*i,y:t.y-o*n}},"findAdjacentPoint"),xS=d(function(e){const{cornerPointPositions:t}=Lg(e),r=[];for(let i=0;i10&&Math.abs(a.y-n.y)>=10){$.debug("Corner point fixing",Math.abs(a.x-n.x),Math.abs(a.y-n.y));const p=5;o.x===s.x?f={x:c<0?s.x-p+u:s.x+p-u,y:h<0?s.y-u:s.y+u}:f={x:c<0?s.x-u:s.x+u,y:h<0?s.y-p+u:s.y+p-u}}else $.debug("Corner point skipping fixing",Math.abs(a.x-n.x),Math.abs(a.y-n.y));r.push(f,l)}else r.push(e[i]);return r},"fixCorners"),bS=d(function(e,t,r,i,n,a,o){const{handDrawnSeed:s}=ct();let l=t.points,c=!1;const h=n;var u=a;u.intersect&&h.intersect&&(l=l.slice(1,t.points.length-1),l.unshift(h.intersect(l[0])),$.debug("Last point APA12",t.start,"-->",t.end,l[l.length-1],u,u.intersect(l[l.length-1])),l.push(u.intersect(l[l.length-1]))),t.toCluster&&($.info("to cluster abc88",r.get(t.toCluster)),l=Xc(t.points,r.get(t.toCluster).node),c=!0),t.fromCluster&&($.debug("from cluster abc88",r.get(t.fromCluster),JSON.stringify(l,null,2)),l=Xc(l.reverse(),r.get(t.fromCluster).node).reverse(),c=!0);let f=l.filter(L=>!Number.isNaN(L.y));f=xS(f);let p=ep;t.curve&&(p=t.curve);const{x:g,y:m}=uS(t),y=T2().x(g).y(m).curve(p);let x;switch(t.thickness){case"normal":x="edge-thickness-normal";break;case"thick":x="edge-thickness-thick";break;case"invisible":x="edge-thickness-invisible";break;default:x="edge-thickness-normal"}switch(t.pattern){case"solid":x+=" edge-pattern-solid";break;case"dotted":x+=" edge-pattern-dotted";break;case"dashed":x+=" edge-pattern-dashed";break;default:x+=" edge-pattern-solid"}let b,_=y(f);const v=Array.isArray(t.style)?t.style:[t.style];if(t.look==="handDrawn"){const L=j.svg(e);Object.assign([],f);const O=L.path(_,{roughness:.3,seed:s});x+=" transition",b=lt(O).select("path").attr("id",t.id).attr("class"," "+x+(t.classes?" "+t.classes:"")).attr("style",v?v.reduce((R,E)=>R+";"+E,""):"");let N=b.attr("d");b.attr("d",N),e.node().appendChild(b.node())}else b=e.append("path").attr("d",_).attr("id",t.id).attr("class"," "+x+(t.classes?" "+t.classes:"")).attr("style",v?v.reduce((L,O)=>L+";"+O,""):"");let k="";(ct().flowchart.arrowMarkerAbsolute||ct().state.arrowMarkerAbsolute)&&(k=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,k=k.replace(/\(/g,"\\(").replace(/\)/g,"\\)")),$.info("arrowTypeStart",t.arrowTypeStart),$.info("arrowTypeEnd",t.arrowTypeEnd),fS(b,t,k,o,i);let M={};return c&&(M.updatedPath=l),M.originalPath=t.points,M},"insertEdge"),_S=d((e,t,r,i)=>{t.forEach(n=>{MS[n](e,r,i)})},"insertMarkers"),CS=d((e,t,r)=>{$.trace("Making markers for ",r),e.append("defs").append("marker").attr("id",r+"_"+t+"-extensionStart").attr("class","marker extension "+t).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),e.append("defs").append("marker").attr("id",r+"_"+t+"-extensionEnd").attr("class","marker extension "+t).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z")},"extension"),wS=d((e,t,r)=>{e.append("defs").append("marker").attr("id",r+"_"+t+"-compositionStart").attr("class","marker composition "+t).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),e.append("defs").append("marker").attr("id",r+"_"+t+"-compositionEnd").attr("class","marker composition "+t).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"composition"),vS=d((e,t,r)=>{e.append("defs").append("marker").attr("id",r+"_"+t+"-aggregationStart").attr("class","marker aggregation "+t).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),e.append("defs").append("marker").attr("id",r+"_"+t+"-aggregationEnd").attr("class","marker aggregation "+t).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"aggregation"),kS=d((e,t,r)=>{e.append("defs").append("marker").attr("id",r+"_"+t+"-dependencyStart").attr("class","marker dependency "+t).attr("refX",6).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),e.append("defs").append("marker").attr("id",r+"_"+t+"-dependencyEnd").attr("class","marker dependency "+t).attr("refX",13).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"dependency"),SS=d((e,t,r)=>{e.append("defs").append("marker").attr("id",r+"_"+t+"-lollipopStart").attr("class","marker lollipop "+t).attr("refX",13).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6),e.append("defs").append("marker").attr("id",r+"_"+t+"-lollipopEnd").attr("class","marker lollipop "+t).attr("refX",1).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6)},"lollipop"),TS=d((e,t,r)=>{e.append("marker").attr("id",r+"_"+t+"-pointEnd").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",8).attr("markerHeight",8).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),e.append("marker").attr("id",r+"_"+t+"-pointStart").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",4.5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",8).attr("markerHeight",8).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"point"),LS=d((e,t,r)=>{e.append("marker").attr("id",r+"_"+t+"-circleEnd").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),e.append("marker").attr("id",r+"_"+t+"-circleStart").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"circle"),AS=d((e,t,r)=>{e.append("marker").attr("id",r+"_"+t+"-crossEnd").attr("class","marker cross "+t).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),e.append("marker").attr("id",r+"_"+t+"-crossStart").attr("class","marker cross "+t).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0")},"cross"),BS=d((e,t,r)=>{e.append("defs").append("marker").attr("id",r+"_"+t+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","userSpaceOnUse").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},"barb"),MS={extension:CS,composition:wS,aggregation:vS,dependency:kS,lollipop:SS,point:TS,circle:LS,cross:AS,barb:BS},ES=_S,FS={common:Xr,getConfig:he,insertCluster:Uk,insertEdge:bS,insertEdgeLabel:dS,insertMarkers:ES,insertNode:Tg,interpolateToCurve:Ho,labelHelper:rt,log:$,positionEdgeLabel:gS},Hi={},Ag=d(e=>{for(const t of e)Hi[t.name]=t},"registerLayoutLoaders"),$S=d(()=>{Ag([{name:"dagre",loader:d(async()=>await ft(()=>import("./chunks/dagre-SWNTG5WE.CzdbX6ge.js"),__vite__mapDeps([0,1,2,3,4,5,6,7])),"loader")}])},"registerDefaultLayoutLoaders");$S();var mB=d(async(e,t)=>{if(!(e.layoutAlgorithm in Hi))throw new Error(`Unknown layout algorithm: ${e.layoutAlgorithm}`);const r=Hi[e.layoutAlgorithm];return(await r.loader()).render(e,t,FS,{algorithm:r.algorithm})},"render"),yB=d((e="",{fallback:t="dagre"}={})=>{if(e in Hi)return e;if(t in Hi)return $.warn(`Layout algorithm ${e} is not registered. Using ${t} as fallback.`),t;throw new Error(`Both layout algorithms ${e} and ${t} are not registered.`)},"getRegisteredLayoutAlgorithm"),Kc="11.4.0",DS=d(e=>{var n;const{securityLevel:t}=ct();let r=lt("body");if(t==="sandbox"){const o=((n=lt(`#i${e}`).node())==null?void 0:n.contentDocument)??document;r=lt(o.body)}return r.select(`#${e}`)},"selectSvgElement"),Bg="comm",Mg="rule",Eg="decl",RS="@import",OS="@keyframes",IS="@layer",Fg=Math.abs,sl=String.fromCharCode;function $g(e){return e.trim()}function Bn(e,t,r){return e.replace(t,r)}function PS(e,t,r){return e.indexOf(t,r)}function ji(e,t){return e.charCodeAt(t)|0}function Gr(e,t,r){return e.slice(t,r)}function de(e){return e.length}function NS(e){return e.length}function xn(e,t){return t.push(e),e}var Ia=1,Vr=1,Dg=0,re=0,bt=0,ri="";function ol(e,t,r,i,n,a,o,s){return{value:e,root:t,parent:r,type:i,props:n,children:a,line:Ia,column:Vr,length:o,return:"",siblings:s}}function zS(){return bt}function qS(){return bt=re>0?ji(ri,--re):0,Vr--,bt===10&&(Vr=1,Ia--),bt}function ce(){return bt=re2||Ui(bt)>3?"":" "}function US(e,t){for(;--t&&ce()&&!(bt<48||bt>102||bt>57&&bt<65||bt>70&&bt<97););return Pa(e,Mn()+(t<6&&qe()==32&&ce()==32))}function ro(e){for(;ce();)switch(bt){case e:return re;case 34:case 39:e!==34&&e!==39&&ro(bt);break;case 40:e===41&&ro(e);break;case 92:ce();break}return re}function YS(e,t){for(;ce()&&e+bt!==57;)if(e+bt===84&&qe()===47)break;return"/*"+Pa(t,re-1)+"*"+sl(e===47?e:ce())}function GS(e){for(;!Ui(qe());)ce();return Pa(e,re)}function VS(e){return HS(En("",null,null,null,[""],e=WS(e),0,[0],e))}function En(e,t,r,i,n,a,o,s,l){for(var c=0,h=0,u=o,f=0,p=0,g=0,m=1,y=1,x=1,b=0,_="",v=n,k=a,M=i,L=_;y;)switch(g=b,b=ce()){case 40:if(g!=108&&ji(L,u-1)==58){PS(L+=Bn(fs(b),"&","&\f"),"&\f",Fg(c?s[c-1]:0))!=-1&&(x=-1);break}case 34:case 39:case 91:L+=fs(b);break;case 9:case 10:case 13:case 32:L+=jS(g);break;case 92:L+=US(Mn()-1,7);continue;case 47:switch(qe()){case 42:case 47:xn(XS(YS(ce(),Mn()),t,r,l),l),(Ui(g||1)==5||Ui(qe()||1)==5)&&de(L)&&Gr(L,-1,void 0)!==" "&&(L+=" ");break;default:L+="/"}break;case 123*m:s[c++]=de(L)*x;case 125*m:case 59:case 0:switch(b){case 0:case 125:y=0;case 59+h:x==-1&&(L=Bn(L,/\f/g,"")),p>0&&(de(L)-u||m===0&&g===47)&&xn(p>32?Jc(L+";",i,r,u-1,l):Jc(Bn(L," ","")+";",i,r,u-2,l),l);break;case 59:L+=";";default:if(xn(M=Qc(L,t,r,c,h,n,s,_,v=[],k=[],u,a),a),b===123)if(h===0)En(L,t,M,M,v,a,u,s,k);else switch(f===99&&ji(L,3)===110?100:f){case 100:case 108:case 109:case 115:En(e,M,M,i&&xn(Qc(e,M,M,0,0,n,s,_,n,v=[],u,k),k),n,k,u,s,i?v:k);break;default:En(L,M,M,M,[""],k,0,s,k)}}c=h=p=0,m=x=1,_=L="",u=o;break;case 58:u=1+de(L),p=g;default:if(m<1){if(b==123)--m;else if(b==125&&m++==0&&qS()==125)continue}switch(L+=sl(b),b*m){case 38:x=h>0?1:(L+="\f",-1);break;case 44:s[c++]=(de(L)-1)*x,x=1;break;case 64:qe()===45&&(L+=fs(ce())),f=qe(),h=u=de(_=L+=GS(Mn())),b++;break;case 45:g===45&&de(L)==2&&(m=0)}}return a}function Qc(e,t,r,i,n,a,o,s,l,c,h,u){for(var f=n-1,p=n===0?a:[""],g=NS(p),m=0,y=0,x=0;m0?p[b]+" "+_:Bn(_,/&\f/g,p[b])))&&(l[x++]=v);return ol(e,t,r,n===0?Mg:s,l,c,h,u)}function XS(e,t,r,i){return ol(e,t,r,Bg,sl(zS()),Gr(e,2,-2),0,i)}function Jc(e,t,r,i,n){return ol(e,t,r,Eg,Gr(e,0,i),Gr(e,i+1,-1),i,n)}function io(e,t){for(var r="",i=0;i/^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(e),"detector"),fT=d(async()=>{const{diagram:e}=await ft(async()=>{const{diagram:t}=await import("./chunks/c4Diagram-GPMAACGM.CNlRe1Ho.js");return{diagram:t}},__vite__mapDeps([8,9,6,7]));return{id:Rg,diagram:e}},"loader"),pT={id:Rg,detector:uT,loader:fT},dT=pT,Og="flowchart",gT=d((e,t)=>{var r,i;return((r=t==null?void 0:t.flowchart)==null?void 0:r.defaultRenderer)==="dagre-wrapper"||((i=t==null?void 0:t.flowchart)==null?void 0:i.defaultRenderer)==="elk"?!1:/^\s*graph/.test(e)},"detector"),mT=d(async()=>{const{diagram:e}=await ft(async()=>{const{diagram:t}=await import("./chunks/flowDiagram-TSWR6T2D.DT_kmiql.js");return{diagram:t}},__vite__mapDeps([10,11,12,6,7]));return{id:Og,diagram:e}},"loader"),yT={id:Og,detector:gT,loader:mT},xT=yT,Ig="flowchart-v2",bT=d((e,t)=>{var r,i,n;return((r=t==null?void 0:t.flowchart)==null?void 0:r.defaultRenderer)==="dagre-d3"?!1:(((i=t==null?void 0:t.flowchart)==null?void 0:i.defaultRenderer)==="elk"&&(t.layout="elk"),/^\s*graph/.test(e)&&((n=t==null?void 0:t.flowchart)==null?void 0:n.defaultRenderer)==="dagre-wrapper"?!0:/^\s*flowchart/.test(e))},"detector"),_T=d(async()=>{const{diagram:e}=await ft(async()=>{const{diagram:t}=await import("./chunks/flowDiagram-TSWR6T2D.DT_kmiql.js");return{diagram:t}},__vite__mapDeps([10,11,12,6,7]));return{id:Ig,diagram:e}},"loader"),CT={id:Ig,detector:bT,loader:_T},wT=CT,Pg="er",vT=d(e=>/^\s*erDiagram/.test(e),"detector"),kT=d(async()=>{const{diagram:e}=await ft(async()=>{const{diagram:t}=await import("./chunks/erDiagram-WO52GFNT.BtSPEK0o.js");return{diagram:t}},__vite__mapDeps([13,1,2,3,4,6,7]));return{id:Pg,diagram:e}},"loader"),ST={id:Pg,detector:vT,loader:kT},TT=ST,Ng="gitGraph",LT=d(e=>/^\s*gitGraph/.test(e),"detector"),AT=d(async()=>{const{diagram:e}=await ft(async()=>{const{diagram:t}=await import("./chunks/gitGraphDiagram-5C7YHVU6.u_0S5-QH.js");return{diagram:t}},__vite__mapDeps([14,15,16,17,6,2,4,5,7]));return{id:Ng,diagram:e}},"loader"),BT={id:Ng,detector:LT,loader:AT},MT=BT,zg="gantt",ET=d(e=>/^\s*gantt/.test(e),"detector"),FT=d(async()=>{const{diagram:e}=await ft(async()=>{const{diagram:t}=await import("./chunks/ganttDiagram-FAOCOTIY.DpN8cieg.js");return{diagram:t}},__vite__mapDeps([18,19,20,6,7]));return{id:zg,diagram:e}},"loader"),$T={id:zg,detector:ET,loader:FT},DT=$T,qg="info",RT=d(e=>/^\s*info/.test(e),"detector"),OT=d(async()=>{const{diagram:e}=await ft(async()=>{const{diagram:t}=await import("./chunks/infoDiagram-P5D6MX3V.DP1qtp8R.js");return{diagram:t}},__vite__mapDeps([21,17,6,2,4,5,7]));return{id:qg,diagram:e}},"loader"),IT={id:qg,detector:RT,loader:OT},Wg="pie",PT=d(e=>/^\s*pie/.test(e),"detector"),NT=d(async()=>{const{diagram:e}=await ft(async()=>{const{diagram:t}=await import("./chunks/pieDiagram-BLWKPB35.DfxLKqjS.js");return{diagram:t}},__vite__mapDeps([22,15,17,6,2,4,5,23,24,20,7]));return{id:Wg,diagram:e}},"loader"),zT={id:Wg,detector:PT,loader:NT},Hg="quadrantChart",qT=d(e=>/^\s*quadrantChart/.test(e),"detector"),WT=d(async()=>{const{diagram:e}=await ft(async()=>{const{diagram:t}=await import("./chunks/quadrantDiagram-QXWEEFXS.CKQNlX2Z.js");return{diagram:t}},__vite__mapDeps([25,19,20,6,7]));return{id:Hg,diagram:e}},"loader"),HT={id:Hg,detector:qT,loader:WT},jT=HT,jg="xychart",UT=d(e=>/^\s*xychart-beta/.test(e),"detector"),YT=d(async()=>{const{diagram:e}=await ft(async()=>{const{diagram:t}=await import("./chunks/xychartDiagram-MYLB5AYS.BVZhzQBy.js");return{diagram:t}},__vite__mapDeps([26,20,24,19,6,7]));return{id:jg,diagram:e}},"loader"),GT={id:jg,detector:UT,loader:YT},VT=GT,Ug="requirement",XT=d(e=>/^\s*requirement(Diagram)?/.test(e),"detector"),ZT=d(async()=>{const{diagram:e}=await ft(async()=>{const{diagram:t}=await import("./chunks/requirementDiagram-XAUNFCZY.DQkbBFDI.js");return{diagram:t}},__vite__mapDeps([27,1,2,3,4,6,7]));return{id:Ug,diagram:e}},"loader"),KT={id:Ug,detector:XT,loader:ZT},QT=KT,Yg="sequence",JT=d(e=>/^\s*sequenceDiagram/.test(e),"detector"),tL=d(async()=>{const{diagram:e}=await ft(async()=>{const{diagram:t}=await import("./chunks/sequenceDiagram-D25TJ2OB.CrCvzD1l.js");return{diagram:t}},__vite__mapDeps([28,9,16,6,7]));return{id:Yg,diagram:e}},"loader"),eL={id:Yg,detector:JT,loader:tL},rL=eL,Gg="class",iL=d((e,t)=>{var r;return((r=t==null?void 0:t.class)==null?void 0:r.defaultRenderer)==="dagre-wrapper"?!1:/^\s*classDiagram/.test(e)},"detector"),nL=d(async()=>{const{diagram:e}=await ft(async()=>{const{diagram:t}=await import("./chunks/classDiagram-FEGYTUDG.x7pZn-YP.js");return{diagram:t}},__vite__mapDeps([29,30,11,6,7]));return{id:Gg,diagram:e}},"loader"),aL={id:Gg,detector:iL,loader:nL},sL=aL,Vg="classDiagram",oL=d((e,t)=>{var r;return/^\s*classDiagram/.test(e)&&((r=t==null?void 0:t.class)==null?void 0:r.defaultRenderer)==="dagre-wrapper"?!0:/^\s*classDiagram-v2/.test(e)},"detector"),lL=d(async()=>{const{diagram:e}=await ft(async()=>{const{diagram:t}=await import("./chunks/classDiagram-v2-R65JCUOM.x7pZn-YP.js");return{diagram:t}},__vite__mapDeps([31,30,11,6,7]));return{id:Vg,diagram:e}},"loader"),cL={id:Vg,detector:oL,loader:lL},hL=cL,Xg="state",uL=d((e,t)=>{var r;return((r=t==null?void 0:t.state)==null?void 0:r.defaultRenderer)==="dagre-wrapper"?!1:/^\s*stateDiagram/.test(e)},"detector"),fL=d(async()=>{const{diagram:e}=await ft(async()=>{const{diagram:t}=await import("./chunks/stateDiagram-GNSP7T6Y.DgWAPd02.js");return{diagram:t}},__vite__mapDeps([32,33,11,1,2,3,4,6,7]));return{id:Xg,diagram:e}},"loader"),pL={id:Xg,detector:uL,loader:fL},dL=pL,Zg="stateDiagram",gL=d((e,t)=>{var r;return!!(/^\s*stateDiagram-v2/.test(e)||/^\s*stateDiagram/.test(e)&&((r=t==null?void 0:t.state)==null?void 0:r.defaultRenderer)==="dagre-wrapper")},"detector"),mL=d(async()=>{const{diagram:e}=await ft(async()=>{const{diagram:t}=await import("./chunks/stateDiagram-v2-HP6YRVRG.CIXWXK7i.js");return{diagram:t}},__vite__mapDeps([34,33,11,6,7]));return{id:Zg,diagram:e}},"loader"),yL={id:Zg,detector:gL,loader:mL},xL=yL,Kg="journey",bL=d(e=>/^\s*journey/.test(e),"detector"),_L=d(async()=>{const{diagram:e}=await ft(async()=>{const{diagram:t}=await import("./chunks/journeyDiagram-UIGPPNLY.DUlHwSYt.js");return{diagram:t}},__vite__mapDeps([35,9,23,6,7]));return{id:Kg,diagram:e}},"loader"),CL={id:Kg,detector:bL,loader:_L},wL=CL,vL=d((e,t,r)=>{$.debug(`rendering svg for syntax error +`);const i=DS(t),n=i.append("g");i.attr("viewBox","0 0 2412 512"),Oh(i,100,512,!0),n.append("path").attr("class","error-icon").attr("d","m411.313,123.313c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32-9.375,9.375-20.688-20.688c-12.484-12.5-32.766-12.5-45.25,0l-16,16c-1.261,1.261-2.304,2.648-3.31,4.051-21.739-8.561-45.324-13.426-70.065-13.426-105.867,0-192,86.133-192,192s86.133,192 192,192 192-86.133 192-192c0-24.741-4.864-48.327-13.426-70.065 1.402-1.007 2.79-2.049 4.051-3.31l16-16c12.5-12.492 12.5-32.758 0-45.25l-20.688-20.688 9.375-9.375 32.001-31.999zm-219.313,100.687c-52.938,0-96,43.063-96,96 0,8.836-7.164,16-16,16s-16-7.164-16-16c0-70.578 57.422-128 128-128 8.836,0 16,7.164 16,16s-7.164,16-16,16z"),n.append("path").attr("class","error-icon").attr("d","m459.02,148.98c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l16,16c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16.001-16z"),n.append("path").attr("class","error-icon").attr("d","m340.395,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16-16c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l15.999,16z"),n.append("path").attr("class","error-icon").attr("d","m400,64c8.844,0 16-7.164 16-16v-32c0-8.836-7.156-16-16-16-8.844,0-16,7.164-16,16v32c0,8.836 7.156,16 16,16z"),n.append("path").attr("class","error-icon").attr("d","m496,96.586h-32c-8.844,0-16,7.164-16,16 0,8.836 7.156,16 16,16h32c8.844,0 16-7.164 16-16 0-8.836-7.156-16-16-16z"),n.append("path").attr("class","error-icon").attr("d","m436.98,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688l32-32c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32c-6.251,6.25-6.251,16.375-0.001,22.625z"),n.append("text").attr("class","error-text").attr("x",1440).attr("y",250).attr("font-size","150px").style("text-anchor","middle").text("Syntax error in text"),n.append("text").attr("class","error-text").attr("x",1250).attr("y",400).attr("font-size","100px").style("text-anchor","middle").text(`mermaid version ${r}`)},"draw"),Qg={draw:vL},kL=Qg,SL={db:{},renderer:Qg,parser:{parse:d(()=>{},"parse")}},TL=SL,Jg="flowchart-elk",LL=d((e,t={})=>{var r;return/^\s*flowchart-elk/.test(e)||/^\s*flowchart|graph/.test(e)&&((r=t==null?void 0:t.flowchart)==null?void 0:r.defaultRenderer)==="elk"?(t.layout="elk",!0):!1},"detector"),AL=d(async()=>{const{diagram:e}=await ft(async()=>{const{diagram:t}=await import("./chunks/flowDiagram-TSWR6T2D.DT_kmiql.js");return{diagram:t}},__vite__mapDeps([10,11,12,6,7]));return{id:Jg,diagram:e}},"loader"),BL={id:Jg,detector:LL,loader:AL},ML=BL,tm="timeline",EL=d(e=>/^\s*timeline/.test(e),"detector"),FL=d(async()=>{const{diagram:e}=await ft(async()=>{const{diagram:t}=await import("./chunks/timeline-definition-27KQCCZ3.HS8QNxBM.js");return{diagram:t}},__vite__mapDeps([36,23,6,7]));return{id:tm,diagram:e}},"loader"),$L={id:tm,detector:EL,loader:FL},DL=$L,em="mindmap",RL=d(e=>/^\s*mindmap/.test(e),"detector"),OL=d(async()=>{const{diagram:e}=await ft(async()=>{const{diagram:t}=await import("./chunks/mindmap-definition-R7LC4OIY.CO700ovJ.js");return{diagram:t}},__vite__mapDeps([37,38,6,7]));return{id:em,diagram:e}},"loader"),IL={id:em,detector:RL,loader:OL},PL=IL,rm="kanban",NL=d(e=>/^\s*kanban/.test(e),"detector"),zL=d(async()=>{const{diagram:e}=await ft(async()=>{const{diagram:t}=await import("./chunks/kanban-definition-KMT3NSR2.DtNpbUem.js");return{diagram:t}},__vite__mapDeps([39,6,7]));return{id:rm,diagram:e}},"loader"),qL={id:rm,detector:NL,loader:zL},WL=qL,im="sankey",HL=d(e=>/^\s*sankey-beta/.test(e),"detector"),jL=d(async()=>{const{diagram:e}=await ft(async()=>{const{diagram:t}=await import("./chunks/sankeyDiagram-LVV36NHA.GcX7eeA_.js");return{diagram:t}},__vite__mapDeps([40,24,20,6,7]));return{id:im,diagram:e}},"loader"),UL={id:im,detector:HL,loader:jL},YL=UL,nm="packet",GL=d(e=>/^\s*packet-beta/.test(e),"detector"),VL=d(async()=>{const{diagram:e}=await ft(async()=>{const{diagram:t}=await import("./chunks/diagram-NZMEDLQF.9HaKjoSn.js");return{diagram:t}},__vite__mapDeps([41,15,17,6,2,4,5,7]));return{id:nm,diagram:e}},"loader"),XL={id:nm,detector:GL,loader:VL},am="block",ZL=d(e=>/^\s*block-beta/.test(e),"detector"),KL=d(async()=>{const{diagram:e}=await ft(async()=>{const{diagram:t}=await import("./chunks/blockDiagram-XN6IQ5JY.CLI-ylQg.js");return{diagram:t}},__vite__mapDeps([42,5,2,1,12,6,7]));return{id:am,diagram:e}},"loader"),QL={id:am,detector:ZL,loader:KL},JL=QL,sm="architecture",tA=d(e=>/^\s*architecture/.test(e),"detector"),eA=d(async()=>{const{diagram:e}=await ft(async()=>{const{diagram:t}=await import("./chunks/architectureDiagram-AYX4OTIS.DY00DwfI.js");return{diagram:t}},__vite__mapDeps([43,15,16,17,6,2,4,5,38,7]));return{id:sm,diagram:e}},"loader"),rA={id:sm,detector:tA,loader:eA},iA=rA,sh=!1,Na=d(()=>{sh||(sh=!0,Rn("error",TL,e=>e.toLowerCase().trim()==="error"),Rn("---",{db:{clear:d(()=>{},"clear")},styles:{},renderer:{draw:d(()=>{},"draw")},parser:{parse:d(()=>{throw new Error("Diagrams beginning with --- are not valid. If you were trying to use a YAML front-matter, please ensure that you've correctly opened and closed the YAML front-matter with un-indented `---` blocks")},"parse")},init:d(()=>null,"init")},e=>e.toLowerCase().trimStart().startsWith("---")),vh(dT,WL,hL,sL,TT,DT,IT,zT,QT,rL,ML,wT,xT,PL,DL,MT,xL,dL,wL,jT,YL,XL,VT,JL,iA))},"addDiagrams"),nA=d(async()=>{$.debug("Loading registered diagrams");const t=(await Promise.allSettled(Object.entries(Pr).map(async([r,{detector:i,loader:n}])=>{if(n)try{_s(r)}catch{try{const{diagram:a,id:o}=await n();Rn(o,a,i)}catch(a){throw $.error(`Failed to load external diagram with key ${r}. Removing from detectors.`),delete Pr[r],a}}}))).filter(r=>r.status==="rejected");if(t.length>0){$.error(`Failed to load ${t.length} external diagrams`);for(const r of t)$.error(r);throw new Error(`Failed to load ${t.length} external diagrams`)}},"loadRegisteredDiagrams"),aA="graphics-document document";function om(e,t){e.attr("role",aA),t!==""&&e.attr("aria-roledescription",t)}d(om,"setA11yDiagramInfo");function lm(e,t,r,i){if(e.insert!==void 0){if(r){const n=`chart-desc-${i}`;e.attr("aria-describedby",n),e.insert("desc",":first-child").attr("id",n).text(r)}if(t){const n=`chart-title-${i}`;e.attr("aria-labelledby",n),e.insert("title",":first-child").attr("id",n).text(t)}}}d(lm,"addSVGa11yTitleDescription");var sr,lo=(sr=class{constructor(t,r,i,n,a){this.type=t,this.text=r,this.db=i,this.parser=n,this.renderer=a}static async fromText(t,r={}){var c,h;const i=he(),n=uo(t,i);t=Ov(t)+` +`;try{_s(n)}catch{const u=F0(n);if(!u)throw new wh(`Diagram ${n} not found.`);const{id:f,diagram:p}=await u();Rn(f,p)}const{db:a,parser:o,renderer:s,init:l}=_s(n);return o.parser&&(o.parser.yy=a),(c=a.clear)==null||c.call(a),l==null||l(i),r.title&&((h=a.setDiagramTitle)==null||h.call(a,r.title)),await o.parse(t),new sr(n,t,a,o,s)}async render(t,r){await this.renderer.draw(this.text,t,r,this)}getParser(){return this.parser}getType(){return this.type}},d(sr,"Diagram"),sr),oh=[],sA=d(()=>{oh.forEach(e=>{e()}),oh=[]},"attachFunctions"),oA=d(e=>e.replace(/^\s*%%(?!{)[^\n]+\n?/gm,"").trimStart(),"cleanupComments");function cm(e){const t=e.match(Ch);if(!t)return{text:e,metadata:{}};let r=Ex(t[1],{schema:Mx})??{};r=typeof r=="object"&&!Array.isArray(r)?r:{};const i={};return r.displayMode&&(i.displayMode=r.displayMode.toString()),r.title&&(i.title=r.title.toString()),r.config&&(i.config=r.config),{text:e.slice(t[0].length),metadata:i}}d(cm,"extractFrontMatter");var lA=d(e=>e.replace(/\r\n?/g,` +`).replace(/<(\w+)([^>]*)>/g,(t,r,i)=>"<"+r+i.replace(/="([^"]*)"/g,"='$1'")+">"),"cleanupText"),cA=d(e=>{const{text:t,metadata:r}=cm(e),{displayMode:i,title:n,config:a={}}=r;return i&&(a.gantt||(a.gantt={}),a.gantt.displayMode=i),{title:n,config:a,text:t}},"processFrontmatter"),hA=d(e=>{const t=ge.detectInit(e)??{},r=ge.detectDirective(e,"wrap");return Array.isArray(r)?t.wrap=r.some(({type:i})=>i==="wrap"):(r==null?void 0:r.type)==="wrap"&&(t.wrap=!0),{text:vv(e),directive:t}},"processDirectives");function ll(e){const t=lA(e),r=cA(t),i=hA(r.text),n=Vo(r.config,i.directive);return e=oA(i.text),{code:e,title:r.title,config:n}}d(ll,"preprocessDiagram");function hm(e){const t=new TextEncoder().encode(e),r=Array.from(t,i=>String.fromCodePoint(i)).join("");return btoa(r)}d(hm,"toBase64");var uA=5e4,fA="graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa",pA="sandbox",dA="loose",gA="http://www.w3.org/2000/svg",mA="http://www.w3.org/1999/xlink",yA="http://www.w3.org/1999/xhtml",xA="100%",bA="100%",_A="border:0;margin:0;",CA="margin:0",wA="allow-top-navigation-by-user-activation allow-popups",vA='The "iframe" tag is not supported by your browser.',kA=["foreignobject"],SA=["dominant-baseline"];function cl(e){const t=ll(e);return $n(),V0(t.config??{}),t}d(cl,"processAndSetConfigs");async function um(e,t){Na();try{const{code:r,config:i}=cl(e);return{diagramType:(await pm(r)).type,config:i}}catch(r){if(t!=null&&t.suppressErrors)return!1;throw r}}d(um,"parse");var lh=d((e,t,r=[])=>` +.${e} ${t} { ${r.join(" !important; ")} !important; }`,"cssImportantStyles"),TA=d((e,t=new Map)=>{var i;let r="";if(e.themeCSS!==void 0&&(r+=` +${e.themeCSS}`),e.fontFamily!==void 0&&(r+=` +:root { --mermaid-font-family: ${e.fontFamily}}`),e.altFontFamily!==void 0&&(r+=` +:root { --mermaid-alt-font-family: ${e.altFontFamily}}`),t instanceof Map){const s=e.htmlLabels??((i=e.flowchart)==null?void 0:i.htmlLabels)?["> *","span"]:["rect","polygon","ellipse","circle","path"];t.forEach(l=>{ah(l.styles)||s.forEach(c=>{r+=lh(l.id,c,l.styles)}),ah(l.textStyles)||(r+=lh(l.id,"tspan",((l==null?void 0:l.textStyles)||[]).map(c=>c.replace("color","fill"))))})}return r},"createCssStyles"),LA=d((e,t,r,i)=>{const n=TA(e,r),a=py(t,n,e.themeVariables);return io(VS(`${i}{${a}}`),ZS)},"createUserStyles"),AA=d((e="",t,r)=>{let i=e;return!r&&!t&&(i=i.replace(/marker-end="url\([\d+./:=?A-Za-z-]*?#/g,'marker-end="url(#')),i=Qr(i),i=i.replace(/
    /g,"
    "),i},"cleanUpSvgCode"),BA=d((e="",t)=>{var n,a;const r=(a=(n=t==null?void 0:t.viewBox)==null?void 0:n.baseVal)!=null&&a.height?t.viewBox.baseVal.height+"px":bA,i=hm(`${e}`);return``},"putIntoIFrame"),ch=d((e,t,r,i,n)=>{const a=e.append("div");a.attr("id",r),i&&a.attr("style",i);const o=a.append("svg").attr("id",t).attr("width","100%").attr("xmlns",gA);return n&&o.attr("xmlns:xlink",n),o.append("g"),e},"appendDivSvgG");function co(e,t){return e.append("iframe").attr("id",t).attr("style","width: 100%; height: 100%;").attr("sandbox","")}d(co,"sandboxedIframe");var MA=d((e,t,r,i)=>{var n,a,o;(n=e.getElementById(t))==null||n.remove(),(a=e.getElementById(r))==null||a.remove(),(o=e.getElementById(i))==null||o.remove()},"removeExistingElements"),EA=d(async function(e,t,r){var q,I,B,A,S,F;Na();const i=cl(t);t=i.code;const n=he();$.debug(n),t.length>((n==null?void 0:n.maxTextSize)??uA)&&(t=fA);const a="#"+e,o="i"+e,s="#"+o,l="d"+e,c="#"+l,h=d(()=>{const z=lt(f?s:c).node();z&&"remove"in z&&z.remove()},"removeTempElements");let u=lt("body");const f=n.securityLevel===pA,p=n.securityLevel===dA,g=n.fontFamily;if(r!==void 0){if(r&&(r.innerHTML=""),f){const T=co(lt(r),o);u=lt(T.nodes()[0].contentDocument.body),u.node().style.margin=0}else u=lt(r);ch(u,e,l,`font-family: ${g}`,mA)}else{if(MA(document,e,l,o),f){const T=co(lt("body"),o);u=lt(T.nodes()[0].contentDocument.body),u.node().style.margin=0}else u=lt("body");ch(u,e,l)}let m,y;try{m=await lo.fromText(t,{title:i.title})}catch(T){if(n.suppressErrorRendering)throw h(),T;m=await lo.fromText("error"),y=T}const x=u.select(c).node(),b=m.type,_=x.firstChild,v=_.firstChild,k=(I=(q=m.renderer).getClasses)==null?void 0:I.call(q,t,m),M=LA(n,b,k,a),L=document.createElement("style");L.innerHTML=M,_.insertBefore(L,v);try{await m.renderer.draw(t,e,Kc,m)}catch(T){throw n.suppressErrorRendering?h():kL.draw(t,e,Kc),T}const O=u.select(`${c} svg`),N=(A=(B=m.db).getAccTitle)==null?void 0:A.call(B),R=(F=(S=m.db).getAccDescription)==null?void 0:F.call(S);dm(b,O,N,R),u.select(`[id="${e}"]`).selectAll("foreignobject > *").attr("xmlns",yA);let E=u.select(c).node().innerHTML;if($.debug("config.arrowMarkerAbsolute",n.arrowMarkerAbsolute),E=AA(E,f,Bt(n.arrowMarkerAbsolute)),f){const T=u.select(c+" svg").node();E=BA(E,T)}else p||(E=Ir.sanitize(E,{ADD_TAGS:kA,ADD_ATTR:SA}));if(sA(),y)throw y;return h(),{diagramType:b,svg:E,bindFunctions:m.db.bindFunctions}},"render");function fm(e={}){var i;const t=At({},e);t!=null&&t.fontFamily&&!((i=t.themeVariables)!=null&&i.fontFamily)&&(t.themeVariables||(t.themeVariables={}),t.themeVariables.fontFamily=t.fontFamily),Y0(t),t!=null&&t.theme&&t.theme in Be?t.themeVariables=Be[t.theme].getThemeVariables(t.themeVariables):t&&(t.themeVariables=Be.default.getThemeVariables(t.themeVariables));const r=typeof t=="object"?U0(t):Bh();ho(r.logLevel),Na()}d(fm,"initialize");var pm=d((e,t={})=>{const{code:r}=ll(e);return lo.fromText(r,t)},"getDiagramFromText");function dm(e,t,r,i){om(t,e),lm(t,r,i,t.attr("id"))}d(dm,"addA11yInfo");var fr=Object.freeze({render:EA,parse:um,getDiagramFromText:pm,initialize:fm,getConfig:he,setConfig:Mh,getSiteConfig:Bh,updateSiteConfig:G0,reset:d(()=>{$n()},"reset"),globalReset:d(()=>{$n(Nr)},"globalReset"),defaultConfig:Nr});ho(he().logLevel);$n(he());var FA=d((e,t,r)=>{$.warn(e),Go(e)?(r&&r(e.str,e.hash),t.push({...e,message:e.str,error:e})):(r&&r(e),e instanceof Error&&t.push({str:e.message,message:e.message,hash:e.name,error:e}))},"handleError"),gm=d(async function(e={querySelector:".mermaid"}){try{await $A(e)}catch(t){if(Go(t)&&$.error(t.str),Vt.parseError&&Vt.parseError(t),!e.suppressErrors)throw $.error("Use the suppressErrors option to suppress these errors"),t}},"run"),$A=d(async function({postRenderCallback:e,querySelector:t,nodes:r}={querySelector:".mermaid"}){const i=fr.getConfig();$.debug(`${e?"":"No "}Callback function found`);let n;if(r)n=r;else if(t)n=document.querySelectorAll(t);else throw new Error("Nodes and querySelector are both undefined");$.debug(`Found ${n.length} diagrams`),(i==null?void 0:i.startOnLoad)!==void 0&&($.debug("Start On Load: "+(i==null?void 0:i.startOnLoad)),fr.updateSiteConfig({startOnLoad:i==null?void 0:i.startOnLoad}));const a=new ge.InitIDGenerator(i.deterministicIds,i.deterministicIDSeed);let o;const s=[];for(const l of Array.from(n)){if($.info("Rendering diagram: "+l.id),l.getAttribute("data-processed"))continue;l.setAttribute("data-processed","true");const c=`mermaid-${a.next()}`;o=l.innerHTML,o=Yp(ge.entityDecode(o)).trim().replace(//gi,"
    ");const h=ge.detectInit(o);h&&$.debug("Detected early reinit: ",h);try{const{svg:u,bindFunctions:f}=await bm(c,o,l);l.innerHTML=u,e&&await e(c),f&&f(l)}catch(u){FA(u,s,Vt.parseError)}}if(s.length>0)throw s[0]},"runThrowsErrors"),mm=d(function(e){fr.initialize(e)},"initialize"),DA=d(async function(e,t,r){$.warn("mermaid.init is deprecated. Please use run instead."),e&&mm(e);const i={postRenderCallback:r,querySelector:".mermaid"};typeof t=="string"?i.querySelector=t:t&&(t instanceof HTMLElement?i.nodes=[t]:i.nodes=t),await gm(i)},"init"),RA=d(async(e,{lazyLoad:t=!0}={})=>{Na(),vh(...e),t===!1&&await nA()},"registerExternalDiagrams"),ym=d(function(){if(Vt.startOnLoad){const{startOnLoad:e}=fr.getConfig();e&&Vt.run().catch(t=>$.error("Mermaid failed to initialize",t))}},"contentLoaded");typeof document<"u"&&window.addEventListener("load",ym,!1);var OA=d(function(e){Vt.parseError=e},"setParseErrorHandler"),ua=[],ps=!1,xm=d(async()=>{if(!ps){for(ps=!0;ua.length>0;){const e=ua.shift();if(e)try{await e()}catch(t){$.error("Error executing queue",t)}}ps=!1}},"executeQueue"),IA=d(async(e,t)=>new Promise((r,i)=>{const n=d(()=>new Promise((a,o)=>{fr.parse(e,t).then(s=>{a(s),r(s)},s=>{var l;$.error("Error parsing",s),(l=Vt.parseError)==null||l.call(Vt,s),o(s),i(s)})}),"performCall");ua.push(n),xm().catch(i)}),"parse"),bm=d((e,t,r)=>new Promise((i,n)=>{const a=d(()=>new Promise((o,s)=>{fr.render(e,t,r).then(l=>{o(l),i(l)},l=>{var c;$.error("Error parsing",l),(c=Vt.parseError)==null||c.call(Vt,l),s(l),n(l)})}),"performCall");ua.push(a),xm().catch(n)}),"render"),Vt={startOnLoad:!0,mermaidAPI:fr,parse:IA,render:bm,init:DA,run:gm,registerExternalDiagrams:RA,registerLayoutLoaders:Ag,initialize:mm,parseError:void 0,contentLoaded:ym,setParseErrorHandler:OA,detectType:uo,registerIconPacks:Jx},fa=Vt;/*! Check if previously processed *//*! + * Wait for document loaded before starting the execution + */const PA=async e=>{try{fa.registerExternalDiagrams&&await fa.registerExternalDiagrams(e)}catch(t){console.error(t)}},NA=async(e,t,r)=>{fa.initialize(r);const{svg:i}=await fa.render(e,t);return i},zA=["innerHTML"],qA={__name:"Mermaid",props:{graph:{type:String,required:!0},id:{type:String,required:!0},class:{type:String,required:!1,default:"mermaid"}},setup(e){const t=$l({securityLevel:"loose",startOnLoad:!1,externalDiagrams:[]}),{page:r}=hh(),{frontmatter:i}=Fm(r.value),n=i.mermaidTheme||"",a=e,o=$l(null);let s=null;uh(async()=>{var u;await PA(t.value.externalDiagrams);let c=await ft(()=>import("./chunks/virtual_mermaid-config.DDnGl6nM.js"),[]);c!=null&&c.default&&(t.value=c.default),s=new MutationObserver(async()=>await l()),s.observe(document.documentElement,{attributes:!0}),await l(),((u=//.exec(decodeURIComponent(a.graph)))==null?void 0:u.length)>0&&setTimeout(()=>{let f=document.getElementsByTagName("img"),p=Array.from(f);p.length&&Promise.all(p.filter(g=>!g.complete).map(g=>new Promise(m=>{g.onload=g.onerror=m}))).then(async()=>{await l()})},100)}),$m(()=>s.disconnect());const l=async()=>{const c=document.documentElement.classList.contains("dark");let h={...t.value};n&&(h.theme=n),c&&(h.theme="dark");let u=await NA(a.id,decodeURIComponent(a.graph),h);const f=Math.random().toString(36).substring(7);o.value=`${u} ${f}`};return(c,h)=>(Dm(),Rm("div",{innerHTML:o.value,class:Om(a.class)},null,10,zA))}};function _m(e){if(e.extends){const t=_m(e.extends);return{...t,...e,async enhanceApp(r){t.enhanceApp&&await t.enhanceApp(r),e.enhanceApp&&await e.enhanceApp(r)}}}return e}const Ar=_m(Jm),WA=Gm({name:"VitePressApp",setup(){const{site:e,lang:t,dir:r}=hh();return uh(()=>{Vm(()=>{document.documentElement.lang=t.value,document.documentElement.dir=r.value})}),e.value.router.prefetchLinks&&Xm(),Zm(),Km(),Ar.setup&&Ar.setup(),()=>Qm(Ar.Layout)}});async function HA(){globalThis.__VITEPRESS__=!0;const e=UA(),t=jA();t.provide(Pm,e);const r=Nm(e.route);return t.provide(zm,r),t.component("Mermaid",qA),t.component("Content",qm),t.component("ClientOnly",Wm),Object.defineProperties(t.config.globalProperties,{$frontmatter:{get(){return r.frontmatter.value}},$params:{get(){return r.page.value.params}}}),Ar.enhanceApp&&await Ar.enhanceApp({app:t,router:e,siteData:Hm}),{app:t,router:e,data:r}}function jA(){return jm(WA)}function UA(){let e=ds,t;return Um(r=>{let i=Ym(r),n=null;return i&&(e&&(t=i),(e||t===i)&&(i=i.replace(/\.js$/,".lean.js")),n=import(i)),ds&&(e=!1),n},Ar.NotFound)}ds&&HA().then(({app:e,router:t,data:r})=>{t.go().then(()=>{Im(t.route,r.site),e.mount("#app")})});export{iB as $,mB as A,Li as B,be as C,Lh as D,Vo as E,he as F,Av as G,wy as H,DS as I,Mx as J,Kc as K,w2 as L,gc as M,dc as N,oB as O,rB as P,aB as Q,nB as R,tB as S,Do as T,et as U,sB as V,eB as W,wr as X,cB as Y,lB as Z,d as _,At as a,i0 as a$,P0 as a0,T2 as a1,qr as a2,ZA as a3,fo as a4,Ma as a5,bv as a6,XA as a7,ep as a8,Lv as a9,fB as aA,bS as aB,gS as aC,dS as aD,xk as aE,v2 as aF,t0 as aG,e0 as aH,Qx as aI,Jx as aJ,ba as aK,pr as aL,mv as aM,vp as aN,Sa as aO,Ba as aP,ea as aQ,Sp as aR,wp as aS,Yw as aT,Bo as aU,Pf as aV,Ut as aW,Zi as aX,X1 as aY,qf as aZ,JA as a_,M0 as aa,Ih as ab,hy as ac,Yi as ad,X as ae,Q as af,Uk as ag,Tg as ah,dB as ai,Ep as aj,Bt as ak,Jr as al,So as am,uS as an,rd as ao,Qr as ap,gv as aq,ow as ar,lv as as,No as at,ah as au,ES as av,pB as aw,gB as ax,uB as ay,Z as az,xy as b,Mo as b0,ze as b1,Ni as b2,lc as b3,r_ as b4,dv as b5,ov as b6,VC as b7,zo as b8,Ww as b9,xv as ba,Qi as bb,Zr as bc,Qn as bd,Jw as be,tT as bf,Ki as bg,ta as bh,Gw as bi,mp as bj,KC as bk,QC as bl,Je as bm,Mc as bn,JC as bo,qo as bp,ZC as bq,rw as br,Kr as bs,Ge as bt,Sc as bu,Wo as bv,xp as bw,so as bx,yv as by,Aa as bz,yy as c,HA as createApp,ct as d,Xr as e,$p as f,my as g,Yr as h,or as i,lt as j,Oh as k,$ as l,kf as m,Gi as n,KA as o,QA as p,by as q,_y as r,gy as s,Ex as t,hS as u,ge as v,Ev as w,dy as x,hB as y,yB as z}; diff --git a/assets/archive_README.md.1yM4fdoN.js b/assets/archive_README.md.1yM4fdoN.js new file mode 100644 index 000000000..9c64be6fa --- /dev/null +++ b/assets/archive_README.md.1yM4fdoN.js @@ -0,0 +1 @@ +import{_ as a,c as t,a6 as i,o as l}from"./chunks/framework.B1keMFNq.js";const p=JSON.parse('{"title":"归档内容","description":"","frontmatter":{"title":"归档内容","index":false},"headers":[],"relativePath":"archive/README.md","filePath":"archive/README.md","lastUpdated":1723441920000}'),r={name:"archive/README.md"};function o(c,e,s,h,n,d){return l(),t("div",null,e[0]||(e[0]=[i('

    归档内容

    本节内容

    此处为海豹不再进行维护的文档索引,旧文档保留在此处。

    ',3)]))}const u=a(r,[["render",o]]);export{p as __pageData,u as default}; diff --git a/assets/archive_README.md.1yM4fdoN.lean.js b/assets/archive_README.md.1yM4fdoN.lean.js new file mode 100644 index 000000000..9c64be6fa --- /dev/null +++ b/assets/archive_README.md.1yM4fdoN.lean.js @@ -0,0 +1 @@ +import{_ as a,c as t,a6 as i,o as l}from"./chunks/framework.B1keMFNq.js";const p=JSON.parse('{"title":"归档内容","description":"","frontmatter":{"title":"归档内容","index":false},"headers":[],"relativePath":"archive/README.md","filePath":"archive/README.md","lastUpdated":1723441920000}'),r={name:"archive/README.md"};function o(c,e,s,h,n,d){return l(),t("div",null,e[0]||(e[0]=[i('

    归档内容

    本节内容

    此处为海豹不再进行维护的文档索引,旧文档保留在此处。

    ',3)]))}const u=a(r,[["render",o]]);export{p as __pageData,u as default}; diff --git a/assets/archive_archive-about-opensource.md.wJ2bE4SD.js b/assets/archive_archive-about-opensource.md.wJ2bE4SD.js new file mode 100644 index 000000000..9fc14501f --- /dev/null +++ b/assets/archive_archive-about-opensource.md.wJ2bE4SD.js @@ -0,0 +1 @@ +import{_ as i,c as l,a6 as a,j as t,a as s,G as r,B as n,o as u}from"./chunks/framework.B1keMFNq.js";const q=JSON.parse('{"title":"开源程序相关","description":"","frontmatter":{"lang":"zh-cn","title":"开源程序相关"},"headers":[],"relativePath":"archive/archive-about-opensource.md","filePath":"archive/archive-about-opensource.md","lastUpdated":1728702230000}'),p={name:"archive/archive-about-opensource.md"},c={class:"info custom-block"};function d(g,e,b,h,m,k){const o=n("Badge");return u(),l("div",null,[e[7]||(e[7]=a('

    开源程序相关

    本节内容

    本节将针对先前未曾接触过计算机以及服务器,或者对计算机或服务器知之甚少的用户进行更易懂的科普,方便用户在提问的过程中表述得简单直接,减少因沟通产生的不必要的麻烦。

    写在前面:为什么这个页面会诞生

    如前篇「计算机相关科普」所说,用户群出现了预料之中但情理之外的问题。 如果说前篇的科普是知识层面的科普较多。那么,本篇的科普希望大家能知道如何方便自己也方便他人地提问、如何更快更便捷地自行排查问题等人文层面的科普。 当然,我们没有资格教屏幕前的你如何做人,这篇科普也一样,只是给你一个或许更好的建议,是否跟着这么做,取决于你。

    什么是开源,什么是开源程序?

    开源,即 Open Source,简言之,就是把程序的源代码放在公共平台(如 GitHub 等),任何人都可以在开源许可协议允许的范围内下载、修改以及使用这份源代码。

    开源程序,顾名思义就是开放了源代码在公共平台的程序。SealDice 就作为一个开源程序活动在大家的视线中。

    为什么我在 SealDice 用户群问问题会被要求发送截图?为什么不能拍屏?

    所有 SealDice 用户群的群员、管理、甚至是开发者,都不具备未卜先知的能力,要求你发送截图也只是为了更好地了解你的问题究竟出在哪里。知道问题出在哪里之后,排查问题或复现 bug 就会更简单。这不仅方便了群员和管理回答你的问题,也有助于你更快地解决问题。

    不提倡拍屏而是提倡截图的原因是,拍摄屏幕时会出现各种各样的问题:因拍摄角度而看不到部分信息、屏幕因反射光线而不能让摄像头拍到真正的图片(俗称反光),而截图能避免这些问题,给解决带来更高的效率。

    注意:请做好截图保护!

    如果需要发送截图,请在没有必须要展示的情况下隐藏好截图内可能存在的敏感信息,比如:IP 地址、端口号、文件夹内布局、密码/auth/key/salt 等。

    最好的方式是通过在图片上加马赛克进行遮挡(俗称打码),不建议进行剪裁,除非敏感信息的范围过大。

    提问的智慧到底该怎么实现?

    群内「提问的智慧」文件已经说得足够清楚,但考虑到在看这个界面的你可能会对一些部分有所疑惑,所以,让我们用更易懂的方式解释它所想宣传的思想。

    遇到问题先查询资料,尝试自己思考问题所在,排除问题

    很多时候,SealDice 用户群里都在问几乎一样的问题,但是,这些问题的解决方法在很多地方写有,例如这个手册群公告群精华消息、乃至群内作为帮助骰的 @Dt.Dice Twenty 的自定义回复的触发词里也有许多你可能关心的问题在内。如果不知道方法的你通过这些途径知道了如何解决这个问题,并且自己解决了问题,一定会比在群里问群员快。如果真的按照了方法去做,仍然没有办法解决问题,这时再来询问,效率会更高。

    自行排查问题的参考步骤

    对于屏幕前或许没有编程经验的你,可以通过平日里学的「五要素」法则来思考遇到的程序错误问题。下面是一个可行的思考过程。

    • Where
      • 我是在哪里做了一些事情让我的骰子出现问题了?是在服务器还是在我自己的电脑上?
    • When
      • 我在什么时候做了这些事情让骰子出现问题了?
    • What
      • 我做了什么让我的骰子出现了问题?
    • Why
      • 为什么我这么做会让骰子出现问题?
    • How
      • 我怎么做才能去修复这个问题?

    通过这样的思考过程,你即使猜测不出问题所在,也可以很好地通过复述这五个要素的思考过程向 SealDice 用户群的群员或管理员提问,让他们清晰地知道你的操作流程,更快地找到问题所在,为你解决问题。

    问问题要有前因后果,相对客观地陈述问题会比只表示主观情绪有用

    时常,在 SealDice 用户群中会看到以下这样的问题

    • 「呜呜我的骰子怎么不能用了」
    • 「很急!我的骰子怎么突然不回复了急急急!」
    • ……

    我们非常能理解你以及问出这些问题的用户的心情,群员和管理也很希望能帮你解决问题,但是,无法通过第一眼就看到问题的来龙去脉,只会减慢排查问题和解决问题的速度,这不只是影响到群员、管理,更多的,其实是在耽误你个人的时间。

    问题既然已经发生了,与其在用户群里发出主观情绪并且焦急地等待回答,不如先试试看自己解决(如上一条所说),实在是无法自己解决,就把这些问题完整地说出来,包括:你猜测的、问题发生的可能原因你所尝试但是无法解决的措施,以及你使用的程序版本号,还有出现问题的完整截图发到用户群,或者带着这些去问其他有经验者,这样能比上面那些不能一眼看出问题的语句能让群员、管理更快速地知道问题所在,并且协助你排查问题、解决问题。

    如果实在没有思路该如何说,下面是一个可以作为参考的问问题的方式,可以自行进行替换。

    ',21)),t("div",c,[e[2]||(e[2]=t("p",{class:"custom-block-title"},"一个便于理解的提问",-1)),t("p",null,[e[0]||(e[0]=s("我在使用 ")),r(o,{type:"tip",text:"x.y.z"}),e[1]||(e[1]=s(" 版本的海豹骰中,发现我的海豹骰的数据库文件的磁盘占用出现了无法通过重启解决的故障,它变得非常大,大概有 300 MB 这样的大小。但是我的骰子并没有如此大的数据量,它只是一个私骰。"))]),e[3]||(e[3]=t("p",null,"我试过对我的海豹骰进行重启,还有撤去一些自定义回复文件以及 JSON 牌堆文件,但是基本对数据库文件夹的异常磁盘占用问题没有效果。",-1)),e[4]||(e[4]=t("p",null,"我现在使用的是 Lagrange 分离部署,使用正向 WS 进行部署。",-1)),e[5]||(e[5]=t("p",null,"初步排查,我怀疑是海豹的数据库文件 data.db 出现了异常的问题,有知道这个解决办法的管理/群友来帮我看看吗?截图都在下面了",-1)),e[6]||(e[6]=t("p",null,"[相关截图]",-1))]),e[8]||(e[8]=a('

    保持耐心,对回答问题者表现出友善和配合的态度

    群员、管理和开发者们都有自己的生活,SealDice 也只是兴趣的一部分。所以,在你的问题看起来没有获得回答的时候,保持耐心。当有群员或管理进一步地询问相关问题,也希望你能友善且相对客观地叙述问题,而不是对他们发泄自己的主观情绪,同时,配合他们进行操作,这样,问题才能更快速地解决。

    如果有需要,可以去 GitHub 代码仓库上提交 issue

    如果你想要问的问题是新的、程序上的需求(例如希望加入一个新的接口),或者你的问题明确了是一个 bug,你希望 SealDice 开发组尽快满足这个需求或修复这个 bug,你可以通过在 GitHub 的 sealdice/sealdice-core 仓库中提交一个 issue,开发组的开发者们会通过讨论进行回复,并且,如果确定需要通过你的反馈对程序进行改动,也会更方便开发者们归档问题和修改程序。

    以上就是提问的智慧中我们总结出的,要在 SealDice 用户社区里更快地解决问题应该怎么做的办法。希望通过这样的办法,能让你更有效率地解决在部署 SealDice 的过程中遇到的问题。

    什么是 GitHub?怎么提 issue?

    GitHub 是多数开源程序发布代码的地方,SealDice 开发者们平时也通过 GitHub 查看用户的需求和 bug 反馈,同时对程序进行修改,并且在 GitHub 上同步发布更新。

    所以,我们希望你如果真的非常需要加入功能、或者反馈 bug,可以自己试试看除了在 SealDice 用户群中向管理说明以外,额外地再提交一份 issue 到海豹的 GitHub 的代码仓库中,这会让开发者们可能记住这个问题,同时在程序中修复它。

    对于如何提 issue、怎么样提 issue 不会被关闭,以及如何在 GitHub 上下载文件之类的问题,百度应该是你更好的选择。

    希望你通过这两篇科普,能更清晰地知道如何提问 SealDice 相关的问题会更有效率。

    ',10))])}const v=i(p,[["render",d]]);export{q as __pageData,v as default}; diff --git a/assets/archive_archive-about-opensource.md.wJ2bE4SD.lean.js b/assets/archive_archive-about-opensource.md.wJ2bE4SD.lean.js new file mode 100644 index 000000000..9fc14501f --- /dev/null +++ b/assets/archive_archive-about-opensource.md.wJ2bE4SD.lean.js @@ -0,0 +1 @@ +import{_ as i,c as l,a6 as a,j as t,a as s,G as r,B as n,o as u}from"./chunks/framework.B1keMFNq.js";const q=JSON.parse('{"title":"开源程序相关","description":"","frontmatter":{"lang":"zh-cn","title":"开源程序相关"},"headers":[],"relativePath":"archive/archive-about-opensource.md","filePath":"archive/archive-about-opensource.md","lastUpdated":1728702230000}'),p={name:"archive/archive-about-opensource.md"},c={class:"info custom-block"};function d(g,e,b,h,m,k){const o=n("Badge");return u(),l("div",null,[e[7]||(e[7]=a('

    开源程序相关

    本节内容

    本节将针对先前未曾接触过计算机以及服务器,或者对计算机或服务器知之甚少的用户进行更易懂的科普,方便用户在提问的过程中表述得简单直接,减少因沟通产生的不必要的麻烦。

    写在前面:为什么这个页面会诞生

    如前篇「计算机相关科普」所说,用户群出现了预料之中但情理之外的问题。 如果说前篇的科普是知识层面的科普较多。那么,本篇的科普希望大家能知道如何方便自己也方便他人地提问、如何更快更便捷地自行排查问题等人文层面的科普。 当然,我们没有资格教屏幕前的你如何做人,这篇科普也一样,只是给你一个或许更好的建议,是否跟着这么做,取决于你。

    什么是开源,什么是开源程序?

    开源,即 Open Source,简言之,就是把程序的源代码放在公共平台(如 GitHub 等),任何人都可以在开源许可协议允许的范围内下载、修改以及使用这份源代码。

    开源程序,顾名思义就是开放了源代码在公共平台的程序。SealDice 就作为一个开源程序活动在大家的视线中。

    为什么我在 SealDice 用户群问问题会被要求发送截图?为什么不能拍屏?

    所有 SealDice 用户群的群员、管理、甚至是开发者,都不具备未卜先知的能力,要求你发送截图也只是为了更好地了解你的问题究竟出在哪里。知道问题出在哪里之后,排查问题或复现 bug 就会更简单。这不仅方便了群员和管理回答你的问题,也有助于你更快地解决问题。

    不提倡拍屏而是提倡截图的原因是,拍摄屏幕时会出现各种各样的问题:因拍摄角度而看不到部分信息、屏幕因反射光线而不能让摄像头拍到真正的图片(俗称反光),而截图能避免这些问题,给解决带来更高的效率。

    注意:请做好截图保护!

    如果需要发送截图,请在没有必须要展示的情况下隐藏好截图内可能存在的敏感信息,比如:IP 地址、端口号、文件夹内布局、密码/auth/key/salt 等。

    最好的方式是通过在图片上加马赛克进行遮挡(俗称打码),不建议进行剪裁,除非敏感信息的范围过大。

    提问的智慧到底该怎么实现?

    群内「提问的智慧」文件已经说得足够清楚,但考虑到在看这个界面的你可能会对一些部分有所疑惑,所以,让我们用更易懂的方式解释它所想宣传的思想。

    遇到问题先查询资料,尝试自己思考问题所在,排除问题

    很多时候,SealDice 用户群里都在问几乎一样的问题,但是,这些问题的解决方法在很多地方写有,例如这个手册群公告群精华消息、乃至群内作为帮助骰的 @Dt.Dice Twenty 的自定义回复的触发词里也有许多你可能关心的问题在内。如果不知道方法的你通过这些途径知道了如何解决这个问题,并且自己解决了问题,一定会比在群里问群员快。如果真的按照了方法去做,仍然没有办法解决问题,这时再来询问,效率会更高。

    自行排查问题的参考步骤

    对于屏幕前或许没有编程经验的你,可以通过平日里学的「五要素」法则来思考遇到的程序错误问题。下面是一个可行的思考过程。

    • Where
      • 我是在哪里做了一些事情让我的骰子出现问题了?是在服务器还是在我自己的电脑上?
    • When
      • 我在什么时候做了这些事情让骰子出现问题了?
    • What
      • 我做了什么让我的骰子出现了问题?
    • Why
      • 为什么我这么做会让骰子出现问题?
    • How
      • 我怎么做才能去修复这个问题?

    通过这样的思考过程,你即使猜测不出问题所在,也可以很好地通过复述这五个要素的思考过程向 SealDice 用户群的群员或管理员提问,让他们清晰地知道你的操作流程,更快地找到问题所在,为你解决问题。

    问问题要有前因后果,相对客观地陈述问题会比只表示主观情绪有用

    时常,在 SealDice 用户群中会看到以下这样的问题

    • 「呜呜我的骰子怎么不能用了」
    • 「很急!我的骰子怎么突然不回复了急急急!」
    • ……

    我们非常能理解你以及问出这些问题的用户的心情,群员和管理也很希望能帮你解决问题,但是,无法通过第一眼就看到问题的来龙去脉,只会减慢排查问题和解决问题的速度,这不只是影响到群员、管理,更多的,其实是在耽误你个人的时间。

    问题既然已经发生了,与其在用户群里发出主观情绪并且焦急地等待回答,不如先试试看自己解决(如上一条所说),实在是无法自己解决,就把这些问题完整地说出来,包括:你猜测的、问题发生的可能原因你所尝试但是无法解决的措施,以及你使用的程序版本号,还有出现问题的完整截图发到用户群,或者带着这些去问其他有经验者,这样能比上面那些不能一眼看出问题的语句能让群员、管理更快速地知道问题所在,并且协助你排查问题、解决问题。

    如果实在没有思路该如何说,下面是一个可以作为参考的问问题的方式,可以自行进行替换。

    ',21)),t("div",c,[e[2]||(e[2]=t("p",{class:"custom-block-title"},"一个便于理解的提问",-1)),t("p",null,[e[0]||(e[0]=s("我在使用 ")),r(o,{type:"tip",text:"x.y.z"}),e[1]||(e[1]=s(" 版本的海豹骰中,发现我的海豹骰的数据库文件的磁盘占用出现了无法通过重启解决的故障,它变得非常大,大概有 300 MB 这样的大小。但是我的骰子并没有如此大的数据量,它只是一个私骰。"))]),e[3]||(e[3]=t("p",null,"我试过对我的海豹骰进行重启,还有撤去一些自定义回复文件以及 JSON 牌堆文件,但是基本对数据库文件夹的异常磁盘占用问题没有效果。",-1)),e[4]||(e[4]=t("p",null,"我现在使用的是 Lagrange 分离部署,使用正向 WS 进行部署。",-1)),e[5]||(e[5]=t("p",null,"初步排查,我怀疑是海豹的数据库文件 data.db 出现了异常的问题,有知道这个解决办法的管理/群友来帮我看看吗?截图都在下面了",-1)),e[6]||(e[6]=t("p",null,"[相关截图]",-1))]),e[8]||(e[8]=a('

    保持耐心,对回答问题者表现出友善和配合的态度

    群员、管理和开发者们都有自己的生活,SealDice 也只是兴趣的一部分。所以,在你的问题看起来没有获得回答的时候,保持耐心。当有群员或管理进一步地询问相关问题,也希望你能友善且相对客观地叙述问题,而不是对他们发泄自己的主观情绪,同时,配合他们进行操作,这样,问题才能更快速地解决。

    如果有需要,可以去 GitHub 代码仓库上提交 issue

    如果你想要问的问题是新的、程序上的需求(例如希望加入一个新的接口),或者你的问题明确了是一个 bug,你希望 SealDice 开发组尽快满足这个需求或修复这个 bug,你可以通过在 GitHub 的 sealdice/sealdice-core 仓库中提交一个 issue,开发组的开发者们会通过讨论进行回复,并且,如果确定需要通过你的反馈对程序进行改动,也会更方便开发者们归档问题和修改程序。

    以上就是提问的智慧中我们总结出的,要在 SealDice 用户社区里更快地解决问题应该怎么做的办法。希望通过这样的办法,能让你更有效率地解决在部署 SealDice 的过程中遇到的问题。

    什么是 GitHub?怎么提 issue?

    GitHub 是多数开源程序发布代码的地方,SealDice 开发者们平时也通过 GitHub 查看用户的需求和 bug 反馈,同时对程序进行修改,并且在 GitHub 上同步发布更新。

    所以,我们希望你如果真的非常需要加入功能、或者反馈 bug,可以自己试试看除了在 SealDice 用户群中向管理说明以外,额外地再提交一份 issue 到海豹的 GitHub 的代码仓库中,这会让开发者们可能记住这个问题,同时在程序中修复它。

    对于如何提 issue、怎么样提 issue 不会被关闭,以及如何在 GitHub 上下载文件之类的问题,百度应该是你更好的选择。

    希望你通过这两篇科普,能更清晰地知道如何提问 SealDice 相关的问题会更有效率。

    ',10))])}const v=i(p,[["render",d]]);export{q as __pageData,v as default}; diff --git a/assets/archive_archive-guide.md.DJne-GJ-.js b/assets/archive_archive-guide.md.DJne-GJ-.js new file mode 100644 index 000000000..6e0d1f326 --- /dev/null +++ b/assets/archive_archive-guide.md.DJne-GJ-.js @@ -0,0 +1 @@ +import{_ as c,c as n,a6 as e,b as d,w as o,a7 as u,j as r,a as t,G as i,B as l,o as s}from"./chunks/framework.B1keMFNq.js";const x=JSON.parse('{"title":"计算机基础知识","description":"","frontmatter":{"lang":"zh-cn","title":"计算机基础知识"},"headers":[],"relativePath":"archive/archive-guide.md","filePath":"archive/archive-guide.md","lastUpdated":1728702230000}'),b={name:"archive/archive-guide.md"};function m(A,a,f,q,k,g){const h=l("Mermaid"),p=l("Badge");return s(),n("div",null,[a[3]||(a[3]=e('

    计算机基础知识

    计算机小白常见问题

    本节内容

    本节旨在帮助先前未曾接触过计算机以及服务器,或者对计算机及服务器知之甚少的用户快速查询一些常见问题以及对应的答案。本节不能代替权威解释或各项目的官方文档。

    关于如何正确地提问,请看 如何正确提问;关于如何快速学习相关背景知识,请看 如何高效学习;关于特定的名词术语解释,请看 名词/术语速查表

    部署海豹核心为什么要解压压缩包?怎么样解压压缩包?

    如果直接在解压缩应用(如 7zipWinRar 等)中双击运行压缩包内的 sealdice-core.exe 文件,意味着只有 sealdice-core.exe 这一个文件被解压出来了,而其他文件仍然在压缩包之中。海豹核心检测不到其他必要的文件,那么,就无法正常运行。因此,需要把压缩包解压之后再双击运行海豹核心。

    解压压缩包需要解压缩的应用,上面已经陈述了一些应用,使用百度搜索一下,下载安装就可以了。

    一般而言,用鼠标右击压缩包,再用鼠标左键单击弹出菜单中带有解压到字样的选项就能解压这个压缩包。

    一个建议

    解压缩软件时常不会自动帮你创建文件夹,你可能需要自己新建文件夹。这个操作非常简单。

    在希望解压的文件夹下单击鼠标右键,在弹出的菜单中找到新建文件夹这个选项,左键单击它,然后输入你想要的文件夹名字,再按下键盘上的Enter,就新建了一个文件夹。

    而如果你想要指定这个压缩包解压到指定的文件夹,你可以右键单击压缩包后选择解压到…,在弹出的界面上找到你希望压缩包解压到那里的文件夹,之后双击那个文件夹,最后点击确定,压缩包便解压到了你指定的文件夹。

    内存不足到底指的是哪里的内存不足?如何解决内存不足?

    对于内存不足的情况,需要具体问题具体分析

    对于海豹核心的日志界面中「There is not enough space on the disk」的报错

    翻译一下这里的报错:「在磁盘中没有足够的空间」。

    很显然,这里的内存不足代指的是磁盘可存储的空间不足,这时候通常通过删除磁盘内部分不需要的文件,腾出空间就可以解决。

    如果出现莫名其妙的程序中断……

    如果你在资源有限的小型计算机/服务器上部署海豹,并且你的海豹是公骰(存在大量用户)或加载了大量牌堆、自定义回复和/或插件,那么有可能出现海豹核心突然中断运行的情况。如果通过日志,排除了程序内部错误的可能性,那就有可能是由内存不足引起的。此处,内存指代的是「运行内存」。

    可以在海豹运行时,通过 WebUI「日志」导航栏顶部的内存占用、Windows 平台下的任务管理器、Linux 平台下的 htop 等工具对海豹核心的内存使用量和占用比例进行监测,如果确实存在占用过高的情况,可以考虑减少用户群体、移除不常用的自定义回复/牌堆/插件、关闭其他未在使用的进程或更换资源更为充足的平台来解决问题。

    注意:不要随意关闭你不认识的进程

    只有在你完全确定某进程的用途与功能时,才能尝试关闭此进程。失误中断系统进程可能导致系统崩溃或其他隐患。

    什么是开源,什么是开源程序?

    开源,即 Open Source,简言之,就是把程序的源代码放在公共平台(如 GitHub 等)并附加开源许可协议的行为,任何人都可以在开源许可协议允许的范围内下载、修改以及使用这份源代码。

    开源程序,顾名思义就是开放了源代码在公共平台的程序。SealDice 就作为一个开源程序活动在大家的视线中。

    为什么我在 SealDice 用户群问问题会被要求发送截图?为什么不能拍屏?

    所有 SealDice 用户群的群员、管理、甚至是开发者,都不具备未卜先知的能力,要求你发送截图也只是为了更好地了解你的问题究竟出在哪里。知道问题出在哪里之后,排查问题或复现 bug 就会更简单。这不仅方便了群员和管理回答你的问题,也有助于你更快地解决问题。

    不提倡拍屏而是提倡截图的原因是,拍摄屏幕时会出现各种各样的问题:因拍摄角度而看不到部分信息、屏幕因反射光线而不能让摄像头拍到真正的图片(俗称反光),而截图能避免这些问题,给解决带来更高的效率。

    注意:请做好截图保护!

    如果需要发送截图,请在没有必须要展示的情况下隐藏好截图内可能存在的敏感信息,比如:IP 地址、端口号、文件夹内布局、密码/auth/key/salt 等。

    最好的方式是通过在图片上加马赛克进行遮挡(俗称打码),不建议进行剪裁,除非敏感信息的范围过大。

    什么是 GitHub?怎么提 issue?

    GitHub 是多数开源程序发布代码的地方,SealDice 开发者们平时也通过 GitHub 查看用户的需求和 bug 反馈,同时对程序进行修改,并且在 GitHub 上同步发布更新。

    所以,我们希望你如果真的非常需要加入功能、或者反馈 bug,可以自己试试看除了在 SealDice 用户群中向管理说明以外,额外地再提交一份 issue 到海豹的 GitHub 的代码仓库中,这会让开发者们可能记住这个问题,同时在程序中修复它。

    对于如何提 issue、怎么样提 issue 不会被关闭,以及如何在 GitHub 上下载文件之类的问题,百度应该是你更好的选择。

    如何高效学习

    注意:海豹手册已于 2024 年 8 月 7 日停止维护以下内容,以下内容归档于 2024 年 8 月 7 日。

    归档原因:海豹开发组认为,这样的页面与 SealDice 完全没有关系。教授如何高效学习亦不是海豹手册应该去做的事。

    本节内容

    本节为计算机小白指南中的第二部分。

    本节旨在帮助先前未曾接触过计算机以及服务器,或者对计算机及服务器知之甚少的用户在遇到不理解的教程、名词或操作时,能够高效学习上手相关知识。

    关于如何正确地提问,请看 如何正确提问;关于一些小白常见的问题,请看 计算机小白常见问题;关于特定的名词术语解释,请看 名词/术语速查表

    前言

    如果你从未接触过计算机以及服务器,那么不免会对本手册中的大量概念感到陌生。一些看起来详尽的指导细细读来却可能完全看不懂。我们不希望你就此放弃,以至于错失了一个全新的、有趣的世界;我们也不希望你放弃自己思考的权利,将一切不明了的问题诉诸他人的帮助。因此,我们撰写了本篇文档,希望能够帮助你掌握一些快速学习新知识的小技巧。

    掌握语言

    无论是帮助文档、程序日志还是网络资源,英语目前是,并且在未来很长一段时间里仍将是,主流的语言。因此,提高你的英文水平,不仅可以帮助你看懂程序日志上的故障原因(这样你就能自己解决问题),还可以让你看到更高效地获取那些有用的信息(比如下文里写到的那些)。

    因此,如果你仍在上学,英语学习得再努力一点,终将有所回报。如果你不得不在短时间内理解特定的英文内容,那常备翻译器显然是一个好选择。

    寻求资源

    当遇到不理解的概念时,我们的第一反应往往是去搜索引擎寻求答案。但是,如果你正在解决特定项目中遇到的问题,不妨先看看此项目的帮助文档、常见问题(FAQ)和 GitHub 上的 Issue

    一个合理的开源项目,往往都具备相对详尽的帮助文档,描述了使用这个项目的过程中可能涉及的方方面面。例如,你正在阅读的就是海豹骰点核心的用户手册,亦即帮助文档。帮助文档通常包含了各个项目从部署到使用的一系列教程,在你具备相关背景的情况下,阅读帮助文档远比直接使用搜素引擎高效得多,因为帮助文档中提供的信息都是服务于特定项目的,而搜索引擎往往只能找到泛化的知识。

    常见问题也是众多开源项目都拥有的页面,例如本手册中的 计算机小白常见问题常见问题 两个页面。这些页面中,通常包含使用此项目的用户高频提出的问题,而你遇到的情况,很有可能在其中就有所描述。因此,如果在手册的一般教程中没能找到答案,访问常见问题页面或许可以解决你的问题。

    如果你不知道 Issue 是什么,可以点击本部分第一段中的超链接查看。Issue 通常包含了此开源项目的用户所遇到的问题、发现的可能的 Bug 和提出的功能请求。Issue 页面就像一个讨论区,你很可能找到一些使用上的问题,大多数情况下都会有热心的网友在页面下方给出他们的解决方案。如果你发现你的问题在 Issue 列表中存在,并且存在 Bug 的字样,那么很有可能你遇到的是此项目的已知问题。安心等待开发者解决就好,或者你也可以学习编程,为修复此 Bug 做出贡献。如果你发现你的问题在 Issue 列表中存在,并且存在 Feature Request 或 Enahncement 的字样,那么说明你需要的功能目前尚未实现,并且已经有其他用户向开发者请求加入此功能。你可以给此 Issue 点赞或评论,或许可以增加此功能的优先级,但切忌评论轰炸。在 Issue 中反复刷屏同样的内容只会带来负面后果。同样地,或许你也可以学习编程,为提供此功能做出贡献。

    另外,你可能已经注意到了,本手册特别提供了 名词/术语速查表。在求助搜索引擎或用户群之前,可以看看里面是否已经包含了你想了解的概念。在速查表中,我们尽力提供了深度恰到好处的知识,不至于过于专业,但又足够你解决问题。如果你想改进速查表的内容,你可以提出一个 PR。如果你不知道 PR 是什么,那么可以按照本页后续的内容,将这作为你的第一个新知识开始学习。

    高效搜索

    如果你知道如何访问 Google,那么请使用 Google 进行搜索。如果你英文足够熟练,那么请使用英文进行搜索。

    百度(还有 CSDN)永远不会是你学习计算机领域知识的最佳选择。一个更高效、搜索结果偏见更少的搜索引擎能显著提高你的信息获取效率。当然,如果你无法访问 Google,那么必应(Bing)海外版或许是一个尚可接受的选择。

    如果你无法访问上述资源,那么在国内众多的内容平台中,学会筛选更可靠的平台也将大大提高你的知识获取效率。通常来说,技术型的个人博客和知乎平台具有相对优质的内容。如果你发现某个页面包含你需要的信息,但排版混乱或内容过于老旧已经不再适用,你可以尝试在内容的开头和结尾去寻找原文链接。通常这类文章是搬运而来,而其出处往往具有更优质的排版,有时原作者也会对其进行更新。

    另一方面,互联网上的英文内容数量是具有压倒性的优势的,如果你能用英文提出问题,那么就有更大的概率直接检索到问题的解决方案。从类似 Stack Overflow 的问答网站到个人博客,你在中文互联网上找到的技术性信息,许多都源于对这些外文内容的翻译和多次搬运。因此,与其拾人牙慧,不如直抵源头。

    随着大语言模型的兴起,AI 也可以是你「搜索」的对象。它们往往能比传统搜索更快地获得信息。但是,你应该永远对 AI 生成的内容心存警惕。在「幻觉」问题尚未得到有效解决之前,AI 的每一个回复都有可能是真材实料的信息,也有可能是胡编乱造。因此,在严肃场合,你不应该不加校验地使用 AI 生成的内容。

    实践学习

    深度优先学习

    ',52)),(s(),d(u,null,{default:o(()=>[i(h,{id:"mermaid-179",class:"mermaid",graph:"flowchart%20TD%0A%20%20%20%20A%5BA%20%E6%98%AF%E4%BB%80%E4%B9%88%5D%0A%20%20%20%20A1%5BA.1%20%E6%98%AF%E4%BB%80%E4%B9%88%5D%0A%20%20%20%20A2%5BA.2%20%E6%98%AF%E4%BB%80%E4%B9%88%5D%0A%20%20%20%20Af%5B%E2%80%A6%E2%80%A6%5D%0A%20%20%20%20A1a%5BA.1.a%20%E6%98%AF%E4%BB%80%E4%B9%88%5D%0A%20%20%20%20A1af%5B%E2%80%A6%E2%80%A6%5D%0A%20%20%20%20A1b%5BA.1.b%20%E6%98%AF%E4%BB%80%E4%B9%88%5D%0A%20%20%20%20A1bf%5B%E2%80%A6%E2%80%A6%5D%0A%20%20%20%20A1f%5B%E2%80%A6%E2%80%A6%5D%0A%20%20%20%20A2a%5BA.2.a%20%E6%98%AF%E4%BB%80%E4%B9%88%5D%0A%20%20%20%20A2af%5B%E2%80%A6%E2%80%A6%5D%0A%20%20%20%20A2b%5BA.2.b%20%E6%98%AF%E4%BB%80%E4%B9%88%5D%0A%20%20%20%20A2bf%5B%E2%80%A6%E2%80%A6%5D%0A%20%20%20%20A2f%5B%E2%80%A6%E2%80%A6%5D%0A%20%20%20%20A%20--%3E%20A1%0A%20%20%20%20A%20--%3E%20A2%0A%20%20%20%20A%20--%3E%20Af%0A%20%20%20%20A1%20--%3E%20A1a%0A%20%20%20%20A1%20--%3E%20A1b%0A%20%20%20%20A1%20--%3E%20A1f%0A%20%20%20%20A2%20--%3E%20A2a%0A%20%20%20%20A2%20--%3E%20A2b%0A%20%20%20%20A2%20--%3E%20A2f%0A%20%20%20%20A1a%20--%3E%20A1af%0A%20%20%20%20A1b%20--%3E%20A1bf%0A%20%20%20%20A2a%20--%3E%20A2af%0A%20%20%20%20A2b%20--%3E%20A2bf%0A%0A"})]),fallback:o(()=>a[0]||(a[0]=[t(" Loading... ")])),_:1})),a[4]||(a[4]=e('

    在学习新概念的过程中,我们很可能遇到用于解释新概念的描述中,也包含着我们不理解的知识的情况。如图所示,深度优先的学习即是每遇到一个新概念,都重新去查找学习这个概念所包含的下属知识,直到对每一个细节再无疑惑的方式。

    例如:

    一个小例子

    你可能想编写一个能够在用户发出符合某种规则的消息时,针对性地进行自定义回复的功能。通过搜素自定义回复,你找到了海豹手册的 自定义回复教程

    在触发条件部分,你发现你可能需要学习正则表达式,于是你访问了教程开头的链接,或者在搜索引擎中查找了正则表达式教程。

    在正则表达式教程中,你发现 \\s 可以用于匹配 whitespace,于是你搜索引擎中开始查找 what does whitespace mean……

    如果你只使用深度优先的方式学习知识,那么当你最终回到一开始的目的(比如写一个自定义回复)时,你应该已经掌握了隐藏在触发条件与回复结果背后的全部知识,从此只要是自定义回复能实现的功能,对你来说都不再有任何困难。

    然而,可以预见的,随着学习的不断深入,你需要学习的内容会爆炸式增长。所以,皓首穷经地学习每一个细节真的值得么……?

    广度优先学习

    与深度优先学习相反,广度优先的学习即是在遇到新概念时,大致了解其含义,便开始学习下一项内容。

    例如:

    又一个小例子

    你遇到了一些故障,在用户群里有人和你说

    你在运行海豹的终端把日志截图一下。

    你不知道终端是什么意思,于是你在 名词/术语速查表 中翻阅了一下。虽然你对什么是 Shell、什么是命令行一知半解,但是你差不多知道他指的是那个在电脑上弹出来的黑框框。

    于是你又看了一眼日志是什么意思。虽让你搞不懂什么 Warning 与 Error,但你知道黑框框里那堆文字就是日志。

    最后,因为你从没在电脑上截屏过,你去搜索了一下,找到了 Snipaste 这一截图工具。把黑框框里的文字截图发了出去。

    如果你只使用广度优先的方式学习知识,那么可能你很快就能达成一开始的目的。

    然而,你对所有涉及的概念都一知半解。如果再遇到类似的问题,尽管可能只需要你做相似的操作,由于你并没有领会每一个细节,你依然不得不求助于人。所以,这样草草浏览知识真的正确么……?

    所以……

    在实际学习新知的过程中,两种方法往往是相辅相成的,另外,实践永远是学习的最佳方法。

    你通常需要以深度优先的方式,了解一个概念背后的一些细节,直到这些细节足够你应对眼前的问题和未来可能遇到的相似的问题,然后转向下一个概念进行学习。执着于过于深入的细节只会拖慢你的学习速度,因此,在合适的位置停下是最为高效的方案。

    同时,在脑海中思考千遍,不如把手放在键盘上,尝试敲出你理解的方案。程序实际运行时给出的反馈,会大大帮助你找到正确的方向,而闭门造车只会延长你设计方案到发现错误的时间

    结语

    以上就是我们总结出的,要在使用 SealDice 时更快地学习新概念的办法。希望通过这样的办法,能让你更有效率地解决在部署 SealDice 的过程中遇到的问题。

    也希望你通过本系列科普有所收获。

    如何正确提问

    注意:海豹手册已于 2024 年 8 月 7 日停止维护以下内容,以下内容归档于 2024 年 8 月 7 日。

    归档原因:海豹开发组认为,提问的智慧一书中已经写明该如何提问,海豹手册不应该分走大部分篇幅去讲述应该如何提问。

    本节内容

    本节为计算机小白指南中的第一部分。

    本节旨在帮助先前未曾接触过计算机以及服务器,或者对计算机及服务器知之甚少的用户问出更加明晰高效的问题,减少因沟通产生的不必要的麻烦。

    关于如何快速学习相关背景知识,请看 如何高效学习;关于一些小白常见的问题,请看 计算机小白常见问题;关于特定的名词术语解释,请看 名词/术语速查表

    前言

    自近期用户量剧增后,SealDice 用户群的社区氛围似乎又有些不尽如人意,预料之中而情理之外的事情又再次发生了,我们觉得,用户需要这样一个科普性质的界面。如果在不知道如何在用户群提问能尽量干脆利落,或者不清楚某些术语该怎么说的情况下,能想到这个系列就最好了

    当然,我们没有资格教屏幕前的你如何做人,这篇科普也一样,只是给你一个或许更好的建议,是否跟着这么做,取决于你。

    提问的智慧

    在计算机技术领域内,《提问的智慧》一文广为流传。如果你想认真地学习如何问出一个好问题,强烈建议全文阅读此文章。在用户群的群文件中,也提供了此文章的文件。

    当然,海豹用户群的群员们并不会如此严苛,如果你暂时没有时间完整地阅读上述文章,那么认真读完本节也足够你在海豹用户群中问出一个好问题。

    提问前,你该这样做

    尝试自行排查问题

    对于屏幕前或许没有编程经验的你,可以通过平日里学的「五要素」法则来思考遇到的程序错误问题。下面是一个可行的思考过程。

    • Where
    • 我是在哪里做了一些事情让我的骰子出现问题了?是在服务器还是在我自己的电脑上?
    • When
    • 我在什么时候做了这些事情让骰子出现问题了?
    • What
    • 我做了什么让我的骰子出现了问题?
    • Why
    • 为什么我这么做会让骰子出现问题?
    • How
    • 我怎么做才能去修复这个问题?

    通过这样的思考过程,你即使猜测不出问题所在,也可以很好地根据这五个要素的思考过程组织问题,让回答者清晰地知道你的操作流程,更快地找到问题所在,为你解决问题。

    尝试阅读本手册以找到答案

    阅读本手册,尤其是 计算机小白常见问题常见问题 两个页面。使用页面左上角的搜索按钮有助于提高你的信息效率。

    尝试浏览用户群内的信息以找到答案

    用户群的群公告、群精华消息和历史聊天记录中,有可能找到你问题的答案。

    尝试上网搜索以找到答案

    关于如何高效地进行搜索可以参考 如何高效学习 一节中,高效搜索 小节。

    记住你做了什么

    你在解决问题时所做的努力——无论仅仅是搜索还是尝试了具体的操作、无论是有效的还是无效的,都将帮助回答者更有效地了解你的背景信息。因此,记住你所做的,并按照下文中的指导,附加在问题中。

    提问时,你该这样做

    本部分中将会为一些涉及的要素提供正例与反例,正例并不意味着一个好问题(它是一个好问题的一部分),但反例显然不应该出现在你的问题里。另一方面,如果你的问题并不涉及某个的要素,那就不要强行加入这个要素。

    清晰说明你的意图和/或困难

    如果你想要让海豹实现某些功能,那么请尽可能清晰完整地描述你想实现的功能。如果你在实现某功能的过程中遇到了麻烦,或者一些你认为本该正常运行的功能表现得不正常,那么请尽可能详细地描述你遇到的困境。

    以下是一些合适的措辞:

    我希望写一个插件,在用户不使用指令前缀的情况下,也能正常响应用户的命令,并实现接入 ChatGPT API 的功能。


    我的骰子突然不响应指令了,具体来说,在我的 xxx 群里可以正常使用,但是我私聊它就不行。

    以下是一些典型的反例:

    呜呜我的骰子怎么不能用了——


    很急!来个大佬救救!

    描述问题发生前,你做了什么

    一个问题可能是也可能不是由用户错误的操作引起的,所以,为了帮助回答者分析定位问题,你应该描述在问题发生之前你做了什么。

    以下是一些合适的措辞:

    我在本地的 Windows 上通过 WinSCP 使用 SSH 协议连接到了我在腾讯云的服务器上,服务器运行的是 Ubuntu 系统。我直接把 data 文件夹拖到了 sealdice-core 同一个目录内,然而在服务器无法启动海豹。


    我在群里 xx 写的 xx 牌堆的基础上修改了牌堆。原本的文件上传到海豹后,可以正确识别。但是我修改之后,上传到海豹,牌堆列表里并没有出现那个文件。我修改的部分是这样的:<屏幕截图>

    反例:不提供此类信息。

    注意:在提供代码相关的信息时,请使用屏幕截图

    通常来说,代码都遵守着相应的格式规范。直接将代码复制到聊天窗口中会极大地破坏这种代码规范,严重影响代码的可读性。因此,不要将代码内容复制到聊天窗口中,请使用屏幕截图。

    为什么我在 SealDice 用户群问问题会被要求发送截图?为什么不能拍屏?

    提供问题发生时,程序的日志

    如果你不清楚什么是日志,请看 名词/术语速查表 中的 日志 部分。海豹的日志中包含了大量的有效信息,许多问题的直接原因本身就记录在日志中。即使你不能完全理解日志的内容,它也将极大地帮助回答者排查你所遇到的问题。因此,除非你非常确定你遇到的问题与海豹本身的运行无关,或未反映在日志中,请务必提供日志截图。

    每行日志的开头都带有时间戳,请确保你发送的日志是问题发生那一刻前后一段时间内的日志。例如,你在 WebUI 查看日志,而你一遇到问题就立刻开始写求助消息,那么此时问题所对应的日志通常位于页面底端,你应该下拉页面,确保截图中呈现了对应的日志。

    以下是一些合适的措辞:

    我发出指令但是骰子在私聊中没有回复我,日志是这样的:<日志截图>


    我修改过的牌堆上传到海豹之后,点击重载牌堆,日志是这样显示的:<日志截图>

    反例:不提供日志。

    注意:在提供日志时,请使用屏幕截图

    通常来说,日志中每条记录都相对较长。在一些情况下,日志还会使用特定格式输出堆栈信息。直接将日志复制到聊天窗口中会严重影响日志的可读性。因此,不要将日志内容复制到聊天窗口中,请使用屏幕截图。

    为什么我在 SealDice 用户群问问题会被要求发送截图?为什么不能拍屏?

    描述问题发生后,你尝试过的解决方案

    正如上文中提到的,无论是试图实现一个功能,还是在使用中遇到了不符合预期的事件,你都应该尝试根据参考信息自行解决问题。在提问时,即使你的尝试没有效果,也应该把你尝试过的方法描述出来。你尝试过的方法可能就是排查问题的手段之一,通过你提供的这些信息,回答者可以更加高效的帮助你定位问题。

    以下是一些合适的措辞:

    我试过对我的海豹骰进行重启,还有撤去一些自定义回复文件以及 JSON 牌堆文件,但是基本对数据库文件夹的异常磁盘占用问题没有效果。


    我试过重启海豹(但是没有重启分离部署的 Lagrange),海豹依然不会在私聊中回复我。

    反例:不提供此类信息。

    提供其他有价值的背景信息

    海豹核心的版本号、连接的社交平台、连接 QQ 平台时使用的连接方式(内置客户端或分离部署)以及你的操作系统等,都有可能和你所遇到的问题有关。因此,与其提问后再被要求补充这些信息,不如一开始就将它们包含在你的问题之中。

    以下是一些合适的措辞:

    ',70)),r("blockquote",null,[r("p",null,[a[1]||(a[1]=t("我使用的是 ")),i(p,{type:"tip",text:"vA.B.C"}),a[2]||(a[2]=t(" 版本的海豹骰,部署在 Windows 11 系统上。私聊不回复的问题是在 QQ 平台发生的。我是通过分离部署连接的 QQ,使用的 QQ 后端是 NapCat。"))])]),a[5]||(a[5]=e('

    反例:不提供此类信息。

    提问后,你该这样做

    如果问题解决了……

    如果回答者提供的解决方案解决了你的问题,你应该做出反馈。

    首先,一个有效的问题解决方案可以扩充海豹社区对问题的经验。通过明确地告诉大家问题已经解决,你正在为建设海豹社区做出有力的贡献。

    另外,对回答者表示感谢是最基本的礼貌,也是维护海豹社区良好氛围的行为。

    如果问题没能解决……

    问出下一个问题吧。别忘了回顾一遍本节内容,你的追问同样应该是一个良好的问题,这样才有助于问题的快速解决。

    当然,那些已经描述过的且未发生改变的信息没有必要再重复一遍。如果你不确定某些信息是否应该重新描述,那就再说一遍,啰嗦总好过一个信息不完整的问题。

    另一方面,你也应该额外补充一些信息,尤其是用你自己的话描述一遍你是如何执行回答者所给出的解决方案的。很多时候一个解决方案是有效的,但由于沟通上的歧义或误解,导致它没能被正确执行。因此,再和大家说说你是怎么做的吧。

    其他事项

    保持耐心,对回答问题者表现出友善和配合的态度

    群员、管理和开发者们都有自己的生活,SealDice 也只是兴趣的一部分。所以,在你的问题看起来没有获得回答的时候,保持耐心。当有群员或管理进一步地询问相关问题,也希望你能友善且相对客观地叙述问题,而不是对他们发泄自己的主观情绪,同时,配合他们进行操作,这样,问题才能更快速地解决。

    如果有需要,可以去 GitHub 代码仓库上提交 issue

    如果你想要问的问题是新的、程序上的需求(例如希望加入一个新的接口),或者你的问题明确了是一个 bug,你希望 SealDice 开发组尽快满足这个需求或修复这个 bug,你可以通过在 GitHub 的 sealdice/sealdice-core 仓库中提交一个 issue,开发组的开发者们会通过讨论进行回复,并且,如果确定需要通过你的反馈对程序进行改动,也会更方便开发者们归档问题和修改程序。

    结语

    以上就是提问的智慧中我们总结出的,要在 SealDice 用户社区里更快地解决问题应该怎么做的办法。希望通过这样的办法,能让你更有效率地解决在部署 SealDice 的过程中遇到的问题。

    也希望你通过本系列科普有所收获。

    ',18))])}const E=c(b,[["render",m]]);export{x as __pageData,E as default}; diff --git a/assets/archive_archive-guide.md.DJne-GJ-.lean.js b/assets/archive_archive-guide.md.DJne-GJ-.lean.js new file mode 100644 index 000000000..6e0d1f326 --- /dev/null +++ b/assets/archive_archive-guide.md.DJne-GJ-.lean.js @@ -0,0 +1 @@ +import{_ as c,c as n,a6 as e,b as d,w as o,a7 as u,j as r,a as t,G as i,B as l,o as s}from"./chunks/framework.B1keMFNq.js";const x=JSON.parse('{"title":"计算机基础知识","description":"","frontmatter":{"lang":"zh-cn","title":"计算机基础知识"},"headers":[],"relativePath":"archive/archive-guide.md","filePath":"archive/archive-guide.md","lastUpdated":1728702230000}'),b={name:"archive/archive-guide.md"};function m(A,a,f,q,k,g){const h=l("Mermaid"),p=l("Badge");return s(),n("div",null,[a[3]||(a[3]=e('

    计算机基础知识

    计算机小白常见问题

    本节内容

    本节旨在帮助先前未曾接触过计算机以及服务器,或者对计算机及服务器知之甚少的用户快速查询一些常见问题以及对应的答案。本节不能代替权威解释或各项目的官方文档。

    关于如何正确地提问,请看 如何正确提问;关于如何快速学习相关背景知识,请看 如何高效学习;关于特定的名词术语解释,请看 名词/术语速查表

    部署海豹核心为什么要解压压缩包?怎么样解压压缩包?

    如果直接在解压缩应用(如 7zipWinRar 等)中双击运行压缩包内的 sealdice-core.exe 文件,意味着只有 sealdice-core.exe 这一个文件被解压出来了,而其他文件仍然在压缩包之中。海豹核心检测不到其他必要的文件,那么,就无法正常运行。因此,需要把压缩包解压之后再双击运行海豹核心。

    解压压缩包需要解压缩的应用,上面已经陈述了一些应用,使用百度搜索一下,下载安装就可以了。

    一般而言,用鼠标右击压缩包,再用鼠标左键单击弹出菜单中带有解压到字样的选项就能解压这个压缩包。

    一个建议

    解压缩软件时常不会自动帮你创建文件夹,你可能需要自己新建文件夹。这个操作非常简单。

    在希望解压的文件夹下单击鼠标右键,在弹出的菜单中找到新建文件夹这个选项,左键单击它,然后输入你想要的文件夹名字,再按下键盘上的Enter,就新建了一个文件夹。

    而如果你想要指定这个压缩包解压到指定的文件夹,你可以右键单击压缩包后选择解压到…,在弹出的界面上找到你希望压缩包解压到那里的文件夹,之后双击那个文件夹,最后点击确定,压缩包便解压到了你指定的文件夹。

    内存不足到底指的是哪里的内存不足?如何解决内存不足?

    对于内存不足的情况,需要具体问题具体分析

    对于海豹核心的日志界面中「There is not enough space on the disk」的报错

    翻译一下这里的报错:「在磁盘中没有足够的空间」。

    很显然,这里的内存不足代指的是磁盘可存储的空间不足,这时候通常通过删除磁盘内部分不需要的文件,腾出空间就可以解决。

    如果出现莫名其妙的程序中断……

    如果你在资源有限的小型计算机/服务器上部署海豹,并且你的海豹是公骰(存在大量用户)或加载了大量牌堆、自定义回复和/或插件,那么有可能出现海豹核心突然中断运行的情况。如果通过日志,排除了程序内部错误的可能性,那就有可能是由内存不足引起的。此处,内存指代的是「运行内存」。

    可以在海豹运行时,通过 WebUI「日志」导航栏顶部的内存占用、Windows 平台下的任务管理器、Linux 平台下的 htop 等工具对海豹核心的内存使用量和占用比例进行监测,如果确实存在占用过高的情况,可以考虑减少用户群体、移除不常用的自定义回复/牌堆/插件、关闭其他未在使用的进程或更换资源更为充足的平台来解决问题。

    注意:不要随意关闭你不认识的进程

    只有在你完全确定某进程的用途与功能时,才能尝试关闭此进程。失误中断系统进程可能导致系统崩溃或其他隐患。

    什么是开源,什么是开源程序?

    开源,即 Open Source,简言之,就是把程序的源代码放在公共平台(如 GitHub 等)并附加开源许可协议的行为,任何人都可以在开源许可协议允许的范围内下载、修改以及使用这份源代码。

    开源程序,顾名思义就是开放了源代码在公共平台的程序。SealDice 就作为一个开源程序活动在大家的视线中。

    为什么我在 SealDice 用户群问问题会被要求发送截图?为什么不能拍屏?

    所有 SealDice 用户群的群员、管理、甚至是开发者,都不具备未卜先知的能力,要求你发送截图也只是为了更好地了解你的问题究竟出在哪里。知道问题出在哪里之后,排查问题或复现 bug 就会更简单。这不仅方便了群员和管理回答你的问题,也有助于你更快地解决问题。

    不提倡拍屏而是提倡截图的原因是,拍摄屏幕时会出现各种各样的问题:因拍摄角度而看不到部分信息、屏幕因反射光线而不能让摄像头拍到真正的图片(俗称反光),而截图能避免这些问题,给解决带来更高的效率。

    注意:请做好截图保护!

    如果需要发送截图,请在没有必须要展示的情况下隐藏好截图内可能存在的敏感信息,比如:IP 地址、端口号、文件夹内布局、密码/auth/key/salt 等。

    最好的方式是通过在图片上加马赛克进行遮挡(俗称打码),不建议进行剪裁,除非敏感信息的范围过大。

    什么是 GitHub?怎么提 issue?

    GitHub 是多数开源程序发布代码的地方,SealDice 开发者们平时也通过 GitHub 查看用户的需求和 bug 反馈,同时对程序进行修改,并且在 GitHub 上同步发布更新。

    所以,我们希望你如果真的非常需要加入功能、或者反馈 bug,可以自己试试看除了在 SealDice 用户群中向管理说明以外,额外地再提交一份 issue 到海豹的 GitHub 的代码仓库中,这会让开发者们可能记住这个问题,同时在程序中修复它。

    对于如何提 issue、怎么样提 issue 不会被关闭,以及如何在 GitHub 上下载文件之类的问题,百度应该是你更好的选择。

    如何高效学习

    注意:海豹手册已于 2024 年 8 月 7 日停止维护以下内容,以下内容归档于 2024 年 8 月 7 日。

    归档原因:海豹开发组认为,这样的页面与 SealDice 完全没有关系。教授如何高效学习亦不是海豹手册应该去做的事。

    本节内容

    本节为计算机小白指南中的第二部分。

    本节旨在帮助先前未曾接触过计算机以及服务器,或者对计算机及服务器知之甚少的用户在遇到不理解的教程、名词或操作时,能够高效学习上手相关知识。

    关于如何正确地提问,请看 如何正确提问;关于一些小白常见的问题,请看 计算机小白常见问题;关于特定的名词术语解释,请看 名词/术语速查表

    前言

    如果你从未接触过计算机以及服务器,那么不免会对本手册中的大量概念感到陌生。一些看起来详尽的指导细细读来却可能完全看不懂。我们不希望你就此放弃,以至于错失了一个全新的、有趣的世界;我们也不希望你放弃自己思考的权利,将一切不明了的问题诉诸他人的帮助。因此,我们撰写了本篇文档,希望能够帮助你掌握一些快速学习新知识的小技巧。

    掌握语言

    无论是帮助文档、程序日志还是网络资源,英语目前是,并且在未来很长一段时间里仍将是,主流的语言。因此,提高你的英文水平,不仅可以帮助你看懂程序日志上的故障原因(这样你就能自己解决问题),还可以让你看到更高效地获取那些有用的信息(比如下文里写到的那些)。

    因此,如果你仍在上学,英语学习得再努力一点,终将有所回报。如果你不得不在短时间内理解特定的英文内容,那常备翻译器显然是一个好选择。

    寻求资源

    当遇到不理解的概念时,我们的第一反应往往是去搜索引擎寻求答案。但是,如果你正在解决特定项目中遇到的问题,不妨先看看此项目的帮助文档、常见问题(FAQ)和 GitHub 上的 Issue

    一个合理的开源项目,往往都具备相对详尽的帮助文档,描述了使用这个项目的过程中可能涉及的方方面面。例如,你正在阅读的就是海豹骰点核心的用户手册,亦即帮助文档。帮助文档通常包含了各个项目从部署到使用的一系列教程,在你具备相关背景的情况下,阅读帮助文档远比直接使用搜素引擎高效得多,因为帮助文档中提供的信息都是服务于特定项目的,而搜索引擎往往只能找到泛化的知识。

    常见问题也是众多开源项目都拥有的页面,例如本手册中的 计算机小白常见问题常见问题 两个页面。这些页面中,通常包含使用此项目的用户高频提出的问题,而你遇到的情况,很有可能在其中就有所描述。因此,如果在手册的一般教程中没能找到答案,访问常见问题页面或许可以解决你的问题。

    如果你不知道 Issue 是什么,可以点击本部分第一段中的超链接查看。Issue 通常包含了此开源项目的用户所遇到的问题、发现的可能的 Bug 和提出的功能请求。Issue 页面就像一个讨论区,你很可能找到一些使用上的问题,大多数情况下都会有热心的网友在页面下方给出他们的解决方案。如果你发现你的问题在 Issue 列表中存在,并且存在 Bug 的字样,那么很有可能你遇到的是此项目的已知问题。安心等待开发者解决就好,或者你也可以学习编程,为修复此 Bug 做出贡献。如果你发现你的问题在 Issue 列表中存在,并且存在 Feature Request 或 Enahncement 的字样,那么说明你需要的功能目前尚未实现,并且已经有其他用户向开发者请求加入此功能。你可以给此 Issue 点赞或评论,或许可以增加此功能的优先级,但切忌评论轰炸。在 Issue 中反复刷屏同样的内容只会带来负面后果。同样地,或许你也可以学习编程,为提供此功能做出贡献。

    另外,你可能已经注意到了,本手册特别提供了 名词/术语速查表。在求助搜索引擎或用户群之前,可以看看里面是否已经包含了你想了解的概念。在速查表中,我们尽力提供了深度恰到好处的知识,不至于过于专业,但又足够你解决问题。如果你想改进速查表的内容,你可以提出一个 PR。如果你不知道 PR 是什么,那么可以按照本页后续的内容,将这作为你的第一个新知识开始学习。

    高效搜索

    如果你知道如何访问 Google,那么请使用 Google 进行搜索。如果你英文足够熟练,那么请使用英文进行搜索。

    百度(还有 CSDN)永远不会是你学习计算机领域知识的最佳选择。一个更高效、搜索结果偏见更少的搜索引擎能显著提高你的信息获取效率。当然,如果你无法访问 Google,那么必应(Bing)海外版或许是一个尚可接受的选择。

    如果你无法访问上述资源,那么在国内众多的内容平台中,学会筛选更可靠的平台也将大大提高你的知识获取效率。通常来说,技术型的个人博客和知乎平台具有相对优质的内容。如果你发现某个页面包含你需要的信息,但排版混乱或内容过于老旧已经不再适用,你可以尝试在内容的开头和结尾去寻找原文链接。通常这类文章是搬运而来,而其出处往往具有更优质的排版,有时原作者也会对其进行更新。

    另一方面,互联网上的英文内容数量是具有压倒性的优势的,如果你能用英文提出问题,那么就有更大的概率直接检索到问题的解决方案。从类似 Stack Overflow 的问答网站到个人博客,你在中文互联网上找到的技术性信息,许多都源于对这些外文内容的翻译和多次搬运。因此,与其拾人牙慧,不如直抵源头。

    随着大语言模型的兴起,AI 也可以是你「搜索」的对象。它们往往能比传统搜索更快地获得信息。但是,你应该永远对 AI 生成的内容心存警惕。在「幻觉」问题尚未得到有效解决之前,AI 的每一个回复都有可能是真材实料的信息,也有可能是胡编乱造。因此,在严肃场合,你不应该不加校验地使用 AI 生成的内容。

    实践学习

    深度优先学习

    ',52)),(s(),d(u,null,{default:o(()=>[i(h,{id:"mermaid-179",class:"mermaid",graph:"flowchart%20TD%0A%20%20%20%20A%5BA%20%E6%98%AF%E4%BB%80%E4%B9%88%5D%0A%20%20%20%20A1%5BA.1%20%E6%98%AF%E4%BB%80%E4%B9%88%5D%0A%20%20%20%20A2%5BA.2%20%E6%98%AF%E4%BB%80%E4%B9%88%5D%0A%20%20%20%20Af%5B%E2%80%A6%E2%80%A6%5D%0A%20%20%20%20A1a%5BA.1.a%20%E6%98%AF%E4%BB%80%E4%B9%88%5D%0A%20%20%20%20A1af%5B%E2%80%A6%E2%80%A6%5D%0A%20%20%20%20A1b%5BA.1.b%20%E6%98%AF%E4%BB%80%E4%B9%88%5D%0A%20%20%20%20A1bf%5B%E2%80%A6%E2%80%A6%5D%0A%20%20%20%20A1f%5B%E2%80%A6%E2%80%A6%5D%0A%20%20%20%20A2a%5BA.2.a%20%E6%98%AF%E4%BB%80%E4%B9%88%5D%0A%20%20%20%20A2af%5B%E2%80%A6%E2%80%A6%5D%0A%20%20%20%20A2b%5BA.2.b%20%E6%98%AF%E4%BB%80%E4%B9%88%5D%0A%20%20%20%20A2bf%5B%E2%80%A6%E2%80%A6%5D%0A%20%20%20%20A2f%5B%E2%80%A6%E2%80%A6%5D%0A%20%20%20%20A%20--%3E%20A1%0A%20%20%20%20A%20--%3E%20A2%0A%20%20%20%20A%20--%3E%20Af%0A%20%20%20%20A1%20--%3E%20A1a%0A%20%20%20%20A1%20--%3E%20A1b%0A%20%20%20%20A1%20--%3E%20A1f%0A%20%20%20%20A2%20--%3E%20A2a%0A%20%20%20%20A2%20--%3E%20A2b%0A%20%20%20%20A2%20--%3E%20A2f%0A%20%20%20%20A1a%20--%3E%20A1af%0A%20%20%20%20A1b%20--%3E%20A1bf%0A%20%20%20%20A2a%20--%3E%20A2af%0A%20%20%20%20A2b%20--%3E%20A2bf%0A%0A"})]),fallback:o(()=>a[0]||(a[0]=[t(" Loading... ")])),_:1})),a[4]||(a[4]=e('

    在学习新概念的过程中,我们很可能遇到用于解释新概念的描述中,也包含着我们不理解的知识的情况。如图所示,深度优先的学习即是每遇到一个新概念,都重新去查找学习这个概念所包含的下属知识,直到对每一个细节再无疑惑的方式。

    例如:

    一个小例子

    你可能想编写一个能够在用户发出符合某种规则的消息时,针对性地进行自定义回复的功能。通过搜素自定义回复,你找到了海豹手册的 自定义回复教程

    在触发条件部分,你发现你可能需要学习正则表达式,于是你访问了教程开头的链接,或者在搜索引擎中查找了正则表达式教程。

    在正则表达式教程中,你发现 \\s 可以用于匹配 whitespace,于是你搜索引擎中开始查找 what does whitespace mean……

    如果你只使用深度优先的方式学习知识,那么当你最终回到一开始的目的(比如写一个自定义回复)时,你应该已经掌握了隐藏在触发条件与回复结果背后的全部知识,从此只要是自定义回复能实现的功能,对你来说都不再有任何困难。

    然而,可以预见的,随着学习的不断深入,你需要学习的内容会爆炸式增长。所以,皓首穷经地学习每一个细节真的值得么……?

    广度优先学习

    与深度优先学习相反,广度优先的学习即是在遇到新概念时,大致了解其含义,便开始学习下一项内容。

    例如:

    又一个小例子

    你遇到了一些故障,在用户群里有人和你说

    你在运行海豹的终端把日志截图一下。

    你不知道终端是什么意思,于是你在 名词/术语速查表 中翻阅了一下。虽然你对什么是 Shell、什么是命令行一知半解,但是你差不多知道他指的是那个在电脑上弹出来的黑框框。

    于是你又看了一眼日志是什么意思。虽让你搞不懂什么 Warning 与 Error,但你知道黑框框里那堆文字就是日志。

    最后,因为你从没在电脑上截屏过,你去搜索了一下,找到了 Snipaste 这一截图工具。把黑框框里的文字截图发了出去。

    如果你只使用广度优先的方式学习知识,那么可能你很快就能达成一开始的目的。

    然而,你对所有涉及的概念都一知半解。如果再遇到类似的问题,尽管可能只需要你做相似的操作,由于你并没有领会每一个细节,你依然不得不求助于人。所以,这样草草浏览知识真的正确么……?

    所以……

    在实际学习新知的过程中,两种方法往往是相辅相成的,另外,实践永远是学习的最佳方法。

    你通常需要以深度优先的方式,了解一个概念背后的一些细节,直到这些细节足够你应对眼前的问题和未来可能遇到的相似的问题,然后转向下一个概念进行学习。执着于过于深入的细节只会拖慢你的学习速度,因此,在合适的位置停下是最为高效的方案。

    同时,在脑海中思考千遍,不如把手放在键盘上,尝试敲出你理解的方案。程序实际运行时给出的反馈,会大大帮助你找到正确的方向,而闭门造车只会延长你设计方案到发现错误的时间

    结语

    以上就是我们总结出的,要在使用 SealDice 时更快地学习新概念的办法。希望通过这样的办法,能让你更有效率地解决在部署 SealDice 的过程中遇到的问题。

    也希望你通过本系列科普有所收获。

    如何正确提问

    注意:海豹手册已于 2024 年 8 月 7 日停止维护以下内容,以下内容归档于 2024 年 8 月 7 日。

    归档原因:海豹开发组认为,提问的智慧一书中已经写明该如何提问,海豹手册不应该分走大部分篇幅去讲述应该如何提问。

    本节内容

    本节为计算机小白指南中的第一部分。

    本节旨在帮助先前未曾接触过计算机以及服务器,或者对计算机及服务器知之甚少的用户问出更加明晰高效的问题,减少因沟通产生的不必要的麻烦。

    关于如何快速学习相关背景知识,请看 如何高效学习;关于一些小白常见的问题,请看 计算机小白常见问题;关于特定的名词术语解释,请看 名词/术语速查表

    前言

    自近期用户量剧增后,SealDice 用户群的社区氛围似乎又有些不尽如人意,预料之中而情理之外的事情又再次发生了,我们觉得,用户需要这样一个科普性质的界面。如果在不知道如何在用户群提问能尽量干脆利落,或者不清楚某些术语该怎么说的情况下,能想到这个系列就最好了

    当然,我们没有资格教屏幕前的你如何做人,这篇科普也一样,只是给你一个或许更好的建议,是否跟着这么做,取决于你。

    提问的智慧

    在计算机技术领域内,《提问的智慧》一文广为流传。如果你想认真地学习如何问出一个好问题,强烈建议全文阅读此文章。在用户群的群文件中,也提供了此文章的文件。

    当然,海豹用户群的群员们并不会如此严苛,如果你暂时没有时间完整地阅读上述文章,那么认真读完本节也足够你在海豹用户群中问出一个好问题。

    提问前,你该这样做

    尝试自行排查问题

    对于屏幕前或许没有编程经验的你,可以通过平日里学的「五要素」法则来思考遇到的程序错误问题。下面是一个可行的思考过程。

    • Where
    • 我是在哪里做了一些事情让我的骰子出现问题了?是在服务器还是在我自己的电脑上?
    • When
    • 我在什么时候做了这些事情让骰子出现问题了?
    • What
    • 我做了什么让我的骰子出现了问题?
    • Why
    • 为什么我这么做会让骰子出现问题?
    • How
    • 我怎么做才能去修复这个问题?

    通过这样的思考过程,你即使猜测不出问题所在,也可以很好地根据这五个要素的思考过程组织问题,让回答者清晰地知道你的操作流程,更快地找到问题所在,为你解决问题。

    尝试阅读本手册以找到答案

    阅读本手册,尤其是 计算机小白常见问题常见问题 两个页面。使用页面左上角的搜索按钮有助于提高你的信息效率。

    尝试浏览用户群内的信息以找到答案

    用户群的群公告、群精华消息和历史聊天记录中,有可能找到你问题的答案。

    尝试上网搜索以找到答案

    关于如何高效地进行搜索可以参考 如何高效学习 一节中,高效搜索 小节。

    记住你做了什么

    你在解决问题时所做的努力——无论仅仅是搜索还是尝试了具体的操作、无论是有效的还是无效的,都将帮助回答者更有效地了解你的背景信息。因此,记住你所做的,并按照下文中的指导,附加在问题中。

    提问时,你该这样做

    本部分中将会为一些涉及的要素提供正例与反例,正例并不意味着一个好问题(它是一个好问题的一部分),但反例显然不应该出现在你的问题里。另一方面,如果你的问题并不涉及某个的要素,那就不要强行加入这个要素。

    清晰说明你的意图和/或困难

    如果你想要让海豹实现某些功能,那么请尽可能清晰完整地描述你想实现的功能。如果你在实现某功能的过程中遇到了麻烦,或者一些你认为本该正常运行的功能表现得不正常,那么请尽可能详细地描述你遇到的困境。

    以下是一些合适的措辞:

    我希望写一个插件,在用户不使用指令前缀的情况下,也能正常响应用户的命令,并实现接入 ChatGPT API 的功能。


    我的骰子突然不响应指令了,具体来说,在我的 xxx 群里可以正常使用,但是我私聊它就不行。

    以下是一些典型的反例:

    呜呜我的骰子怎么不能用了——


    很急!来个大佬救救!

    描述问题发生前,你做了什么

    一个问题可能是也可能不是由用户错误的操作引起的,所以,为了帮助回答者分析定位问题,你应该描述在问题发生之前你做了什么。

    以下是一些合适的措辞:

    我在本地的 Windows 上通过 WinSCP 使用 SSH 协议连接到了我在腾讯云的服务器上,服务器运行的是 Ubuntu 系统。我直接把 data 文件夹拖到了 sealdice-core 同一个目录内,然而在服务器无法启动海豹。


    我在群里 xx 写的 xx 牌堆的基础上修改了牌堆。原本的文件上传到海豹后,可以正确识别。但是我修改之后,上传到海豹,牌堆列表里并没有出现那个文件。我修改的部分是这样的:<屏幕截图>

    反例:不提供此类信息。

    注意:在提供代码相关的信息时,请使用屏幕截图

    通常来说,代码都遵守着相应的格式规范。直接将代码复制到聊天窗口中会极大地破坏这种代码规范,严重影响代码的可读性。因此,不要将代码内容复制到聊天窗口中,请使用屏幕截图。

    为什么我在 SealDice 用户群问问题会被要求发送截图?为什么不能拍屏?

    提供问题发生时,程序的日志

    如果你不清楚什么是日志,请看 名词/术语速查表 中的 日志 部分。海豹的日志中包含了大量的有效信息,许多问题的直接原因本身就记录在日志中。即使你不能完全理解日志的内容,它也将极大地帮助回答者排查你所遇到的问题。因此,除非你非常确定你遇到的问题与海豹本身的运行无关,或未反映在日志中,请务必提供日志截图。

    每行日志的开头都带有时间戳,请确保你发送的日志是问题发生那一刻前后一段时间内的日志。例如,你在 WebUI 查看日志,而你一遇到问题就立刻开始写求助消息,那么此时问题所对应的日志通常位于页面底端,你应该下拉页面,确保截图中呈现了对应的日志。

    以下是一些合适的措辞:

    我发出指令但是骰子在私聊中没有回复我,日志是这样的:<日志截图>


    我修改过的牌堆上传到海豹之后,点击重载牌堆,日志是这样显示的:<日志截图>

    反例:不提供日志。

    注意:在提供日志时,请使用屏幕截图

    通常来说,日志中每条记录都相对较长。在一些情况下,日志还会使用特定格式输出堆栈信息。直接将日志复制到聊天窗口中会严重影响日志的可读性。因此,不要将日志内容复制到聊天窗口中,请使用屏幕截图。

    为什么我在 SealDice 用户群问问题会被要求发送截图?为什么不能拍屏?

    描述问题发生后,你尝试过的解决方案

    正如上文中提到的,无论是试图实现一个功能,还是在使用中遇到了不符合预期的事件,你都应该尝试根据参考信息自行解决问题。在提问时,即使你的尝试没有效果,也应该把你尝试过的方法描述出来。你尝试过的方法可能就是排查问题的手段之一,通过你提供的这些信息,回答者可以更加高效的帮助你定位问题。

    以下是一些合适的措辞:

    我试过对我的海豹骰进行重启,还有撤去一些自定义回复文件以及 JSON 牌堆文件,但是基本对数据库文件夹的异常磁盘占用问题没有效果。


    我试过重启海豹(但是没有重启分离部署的 Lagrange),海豹依然不会在私聊中回复我。

    反例:不提供此类信息。

    提供其他有价值的背景信息

    海豹核心的版本号、连接的社交平台、连接 QQ 平台时使用的连接方式(内置客户端或分离部署)以及你的操作系统等,都有可能和你所遇到的问题有关。因此,与其提问后再被要求补充这些信息,不如一开始就将它们包含在你的问题之中。

    以下是一些合适的措辞:

    ',70)),r("blockquote",null,[r("p",null,[a[1]||(a[1]=t("我使用的是 ")),i(p,{type:"tip",text:"vA.B.C"}),a[2]||(a[2]=t(" 版本的海豹骰,部署在 Windows 11 系统上。私聊不回复的问题是在 QQ 平台发生的。我是通过分离部署连接的 QQ,使用的 QQ 后端是 NapCat。"))])]),a[5]||(a[5]=e('

    反例:不提供此类信息。

    提问后,你该这样做

    如果问题解决了……

    如果回答者提供的解决方案解决了你的问题,你应该做出反馈。

    首先,一个有效的问题解决方案可以扩充海豹社区对问题的经验。通过明确地告诉大家问题已经解决,你正在为建设海豹社区做出有力的贡献。

    另外,对回答者表示感谢是最基本的礼貌,也是维护海豹社区良好氛围的行为。

    如果问题没能解决……

    问出下一个问题吧。别忘了回顾一遍本节内容,你的追问同样应该是一个良好的问题,这样才有助于问题的快速解决。

    当然,那些已经描述过的且未发生改变的信息没有必要再重复一遍。如果你不确定某些信息是否应该重新描述,那就再说一遍,啰嗦总好过一个信息不完整的问题。

    另一方面,你也应该额外补充一些信息,尤其是用你自己的话描述一遍你是如何执行回答者所给出的解决方案的。很多时候一个解决方案是有效的,但由于沟通上的歧义或误解,导致它没能被正确执行。因此,再和大家说说你是怎么做的吧。

    其他事项

    保持耐心,对回答问题者表现出友善和配合的态度

    群员、管理和开发者们都有自己的生活,SealDice 也只是兴趣的一部分。所以,在你的问题看起来没有获得回答的时候,保持耐心。当有群员或管理进一步地询问相关问题,也希望你能友善且相对客观地叙述问题,而不是对他们发泄自己的主观情绪,同时,配合他们进行操作,这样,问题才能更快速地解决。

    如果有需要,可以去 GitHub 代码仓库上提交 issue

    如果你想要问的问题是新的、程序上的需求(例如希望加入一个新的接口),或者你的问题明确了是一个 bug,你希望 SealDice 开发组尽快满足这个需求或修复这个 bug,你可以通过在 GitHub 的 sealdice/sealdice-core 仓库中提交一个 issue,开发组的开发者们会通过讨论进行回复,并且,如果确定需要通过你的反馈对程序进行改动,也会更方便开发者们归档问题和修改程序。

    结语

    以上就是提问的智慧中我们总结出的,要在 SealDice 用户社区里更快地解决问题应该怎么做的办法。希望通过这样的办法,能让你更有效率地解决在部署 SealDice 的过程中遇到的问题。

    也希望你通过本系列科普有所收获。

    ',18))])}const E=c(b,[["render",m]]);export{x as __pageData,E as default}; diff --git a/assets/archive_archive-other.md.D8Q2HrYQ.js b/assets/archive_archive-other.md.D8Q2HrYQ.js new file mode 100644 index 000000000..9bd01b0b4 --- /dev/null +++ b/assets/archive_archive-other.md.D8Q2HrYQ.js @@ -0,0 +1 @@ +import{_ as p,c as d,j as a,a as t,G as e,a6 as i,w as s,B as c,o as h}from"./chunks/framework.B1keMFNq.js";const g="/sealdice-manual-next/assets/platform-qq-qsign-1.DewZ-7A7.png",u="/sealdice-manual-next/assets/platform-qq-qsign-2.Cv0YuS6C.png",m="/sealdice-manual-next/assets/select-account.BQuutaYp.png",k="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAVkAAAA8CAIAAABD3l7RAAAACXBIWXMAAAsSAAALEgHS3X78AAAIgUlEQVR42u3df1CT9x0H8E93u6Mj64mXJwHaJeHsSdKBFC+cyg/ZWYq6FqtzYbG3nSzGK+ucU2uBQ3TADvDQabCW648ZItx2NYPa2toeJcPdIYHOI8pR0IS7VpMcC5KHlawL07/cHw88PCYEBw3jR96vv/Lj4XmSJ8/3/Xy/n++T8NiDBw8IACLed7ALAABZAADIAgBAFgAAsgAAkAUAgCwAAGQBACALAABZAADIAgBAFgAAsgAAkAUAMEffjZD36Rwjy5fU7aavvsaHDkvbqpWULqPcp0kRE87VPhYJv1/gHKPGXvrmPmmSwrz7ABbkeG4ZoCeiqCA1nMdzRGTBORs5WDq5BUcRLB9Fn5GSob1q1Atmo9tNmiQcPLCsaJKo2x3OFUZEFnz1NYYGsNwoYsJc/MI8AgAgCwAAWQAAyAIAQBYAALIAAEKZ9TXIVzu72tuvFL3+2seXP/EMDx86sD9gAS/LVtfU+nz/2rL5+V3a/OA1GM6cjY+Lm/YpIZYdtXZ12+0Ou2OQYcSMWKxSKbe/lDfPO8Rq0Df1cTeluRXHNYpHLrZmt+lgZvASTnNZRRsb9HCyzrg/m4jIbS6tah155IYAFmsWBLtgbv6s7a/83aioqAP7f/3MM6o7Tuec12l3DNaeOCXMBZYdtTsGO61dJUWHGUY8P3vDbS5t6pto225zaVVFKU3XSq0GPb8YddQV6uooOA4U2mqTVnDf1VJcaaHNO6aCIHa36fjkhuripw0UgKWUBUSUkpIc3EFIUCiudnY1mBqDl+/r6xfGB2ePrmBjVkZwEAR0FmpPnpqvOOj8sHWE2foq1yZl2ldzbZU3PndpFPKAE/6nfZSsm2y62Qd32/RNhs7MQ1kzpsxbFq80t0IrC7GhT82uTK0cByQs8SwIZWNWBte8hUMMLh34lh9MGARZmRncuMDucBgbGrk4MDacLyk+vFC7zOlhac0L2VMPyJ+Ukm3ITSR7RMqUT3QxnEPDJF27gW/58vVqqcXW7dbKZTgiYaH8X2uHXpZtb7+ikMuUiaut1i6/fzx4Ga7B8/R7Ci59dLn25CmGYbIyM/gRhN0xGP7Xl7Vjq5RtvWgVnMkFLXbmt+ZxzdQp+KSf1rzAn/adHpZi4xWzWAMsEwM3B0e8o6GevX3HffuOe6Fe21z6BU6X+ze/PcTdrqisSkhI6Ovr1+kLhcvwVQPhg3/683sqldIzPBwfF0dE12/0BncN7A4Hf5thxJc+utxp7Qp+DQ7HoEqZGO69IdMefye+rlCnbyIKWRRUxDPUdr2DMie7Bq5/jBDFzjz0oJQXUQ4ASlD84FpPr1fCJP0wcbqYYDf9KGMpZYFCLit6/TWRKJq7e8HcrExcfe/evZyc57i27WXZU6fPBPzV1c4u35jvlb36d88ZiSgnZ1N9/dsqVaKEYUJtiGVHP7z0MRHt2L6NEYuFMWG3O8I/pzBR3jtqOigjriiovz5Z9he8/fS1kjaLqc6aPVE7nJxQCKGjp5+kuTuz0BCARKLodWmp13p66SYJ4+BaT6/fP76AQRC2MULU41ErYlb02GyTDXXw8agouXyqe33rlv39ix9of6bhE0TCMDk5z9XXvz3tSEFIpUzc/lKeseE8y44KugxM2PdFx0WLV5q7TzsxaM8+uDuF+i+bg/pscs2J8lzJF006faFOX2hLO7pVOsNarbYvSJK6HlOGIIyDES87cHNw8QTBtx0jCKcP0tTq9vYrfv+4SBTdY7OpVEq+2XtZ9p0/Gn+68ycBQ4aNWRk9Ntu754zCOQhGLBa2ea7ZGxsaAwoESuXqedkfDw3j5U9Kqc/jmqYoKNecMGr41m4wkSQ1RF3B5fEQxT8lCxxl9HqcRMKAkMRjFiESewf+8fHFEARz7Bco5LI33zBs2fz8Q2dvVeK9+/ddLpeXZe/eHXk2ZQ0fBNU1tRvWr5t21uCVvXrfmM9w5iz/SGZmevBiwTOI89EvICK66wm4KCK4iTrNZTr92Y6pcsD1PmLU6bJQWeClZPXDAwTFU3E0cuNzvlbo+rttJPQaYPnGwW2ne5EEQXjGCFwtUMIwsbFS819ajMbzqc+mcF2AW7fsx373e4VCHuoqQ5Eoet++XzmdLj4OVEplQFGQYQJ7ClmZGfNQOKTsnbmSEUv95KCgo66qdSQ5TxvYRBXpayVTYwerwfTQHEFgcAwNkzRwymBiwuKtFifRxIRF6DXAMo6DvB/nLJIgmMsYYWhoaEXMCr7/7/eP+8Z8aWo1Ef3i5y9X19TGEG3Le5F7trXNolSuPnRgf8BFR/y1Rtx0Q9mRkuqa2gvm5l3afIYR6/f8sqjkCL8wVz4URoN+T8G87Ay55oQx3qCv0rVx95OnCoeuluLKG+ryaq2cqxdQceXEYpLNR018XggX47LAw063JZn2+FEqrarQW4iIpLkVuOgQFtrsfvvU7x8/+YfTKpVylzb/grnZMzycpla/f/GDsiMlEobhL0YO9U0Ezv/yfQTugqLgiwh2bN82h+mDTSZ6L5/ivo+PG5aP4X/Ty830N90C9QtcLteYz8fXAoiox2ZTKOTR34uuqKwiojffMIz/Z7y6ptZudwjnHWeLYcQlxYc7rV2jo//kBggMI87MSJ+3byIARLpZjxHiYmP5yULfmI+ItNr8smPlG9av4071IlF03emThjNny46Vc/2FgDUEf3MhFP5CQwBYXGOEJQpjBMAY4ZHwWyYAgCwAAGQBACALAABZAAARmwWrVpJzDJ81LCvOMVq1ElkwS+kyahnAwQPLSssAhffrbBFxfYFzjBp76Zv7pEnCP1yG5XA8twzQE1FUkBrO4zkisoDbfZYvqdsd5n9TDbAgY950GeU+HeYTW6RkAQCgXgAAyAIAQBYAALIAAJAFAIAsAABkAQAgCwDg2/kvh+Bdy6b8rFsAAAAASUVORK5CYII=",b="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAT0AAAByCAIAAACugJHHAAAACXBIWXMAAAsSAAALEgHS3X78AAAK2ElEQVR42u3da1BTZx4G8D9VTGpmyE4NkExKsl9akw7S24xSiWw1hdLL7MWFDVO3dLPZbnoRFau4VltCBa1CCWxqK9PBs9LpTKms253thYJ0W4jsdoasFtgmdqYzTRgaJBlLkAQOiNkPB8IhAUVLZFOe36dwznveIbx58t5OQlwwGCQAiCm34E8AgNwCAHILAMgtAHILAMgtACC3AMgtACC3AIDcAiC3AIDcAgByC4DcAkDMWP4jeA4TE1cGh/yXhgMTE1fQorAUxMX6529Zdvx733AwGBQniOLjl6NFAf1tDPAHRoPBoCz5NrQlYH4bM0bZMXGCCA0JyG0sGRkdw/AYkFsAQG4BALkFAOQWALkFAOQWACItwR2U3oa9Zd89VlukmXGkaWDyhzT9XKdS9XWFmZH1uRqLS1tkvKvaqo1MN69AUpbpUK6Se2y16Jke7mFi9v4juhS8BOGm5tbj9ZYfPOzzDYWOpKWlFm0vNNdYZFJpvi6PO9hu7ei02Yq2FxKR3x+oqKxyunrnqlMsTtj34p5EiSR6T7ituqxpgNJmxriJskx1ucrJXBnNNBnCturpU23VRsZgofDo9ja82eIhkvGOuC/MkUmrRc/0TL4vuBqLS8uKCdGFKOT2stU6ce6cYOvWWc8KhULj0wa1WkVE5hpLZIF3G05+9nn7lify/f6ASLSSO/h7/VMbNOsjC9vtjhNvvxPNJ3vGbKjvCu8tv7ANSHJKpvpDTaG+08h82OjU5CpdjR90U5p+8lTmjgKbod5mpczp3picDcdCHXWoxu8GSCZPmaWf/7AnMXv/ZLesyH0++6zp3BdOXYoSL0NYqNyOnTw5cfZs/KOP3qJUsq+/Hrx0SbBtW5wo/I7CwMiIqbRMq90UWYO5xuJ0ug688nJU+8/rC21SlulZOlraMn1YkXukLpdfTimT0IXZTrnc7hn9KpGr8Wgz5eizbEzLzGKpj2sih9Nf2AYk9z8wnWelrpzR4RUIC5rbFXl5wQcfHDWbg5curdDplms011Uv1/1WV1VEnjrOnDjOnJhrnBy1Z5pRVJfBhe3qs99/n/NSsiyyD2w71eJJynpeM3OEvKZAp3DbeMWc/zrrIS9jMDJhk1uX20NSmWK6z8f8FqIyTr7i8cStWrVMrb7idl9vvdyEdlaLN06eB+v7TQOU9lgG/5izYZ+p2Us0PWaeKpmqP5QR9kbgdHuJJDkl5TrF5OTZtJdMh3Kpr5/IyxhIX1dbRJjfQnRyG/T7xz/+OP6RR25RKtljxya++mrZXXddvS52lDWVljldvV1dPZ80n+afejj7oXxdnki00lSyf67L1WrVqwcPLOYfw9VYzPTQmoKimWOLqQHtGbPBWNzHJe2MmelJ09dGLi9n7uAfTNE9m2UrbTllzd1MRCTJKZla1uLmt83vt+lmW6MGuLHcxolEwhdemFx/mnpwdQKh4E97dnHryXK5/K+n/hZaHG63dugNxvn/WlzOb3ZoS1s8awqYHRlzjbQ3Z3/EJY2q67vWFDDzmTooZDIidx+3hC6VKXhvB3IpUb/bRaTA6xAWbpw8T0KhULIq/GPrKtWdQqHQ6/Fyud2gWc+NjbmtIK1206xD5cXsaa8RWr4ztm4iqtcb6kOHPIxR33m1y5VyKV5t8P+S20BgZNDnizyeKJEkJyd92dXN7RKF/OfsuUGfT6W6MwZCa7Xomf6pmerU3DXpXiVlZNZlhF0+dd9Fb8PesqZkXlUut5sk9z+QQor70pgZ20jOvv6wHhgg6rlNlEhePXjAbncMDvoa3mvcvWtnaIeWk5OdVftW3d1pa/jR7evr8/mGivfsm6vauVatouaMea6eVvPLnA/Lmt5sTD80eUsG0z1zaWoWKbrHUpuYerM1o0gzXblOMTXMZixtmsJMIrJaTM3exOxnMLmFRehvv+zqXr36DiKqqKwKi65arUpftzYs0vm6vLkmrna7o/atusghd1Q5Gz7qIqLuGYPeqVsaU3SH9tPeMpOB256V5JTU6q7ZPWoKGbLoGaOe2wjivSModeWM3KKf2iKaeUMlwHX4Qd/n6PF6X6uqeerJLQqFoqKySvwTceg+R7lc3mmz/fEPhorKKiKK7I0jtVs7Wls/nU9Jvm++dStuT4pfvgxtCcjtvEJbfvDwrzf/ihvWerzeo0eP6X9XwPyl3unq5d9pzN2DEbaja7c7aixvsCwbOiIQCLYXPhc2H0ZuARYyt2GfH5g1zDcBcgvIbexBbmEJwufmAZBbAEBuAQC5BUBuF1sQDQjIbcyJI7pVuGJ8/DIaEpDbWCIQrPAN+dGQsKTg/1YDILeLYWLiim/IPzQcmJi4ghYF5BYAML8FAOQWALkFAOQWAJBbAEBuAZBbAEBuAQC5BUBuAQC5BQDkFgC5BQDkFgCQWwDkFgCQWwBAbgGQWwBAbgEg2n4MX1w6Nn55eHjEP8KOjY2jRWEpiPnvcxwbv+y9OBRHhO9PBvS3MWN4eCSOSJZ8G9oSML+NGf4RVpwgQkMCchtT4+SxcQyPAbkFAOQWAJBbAEBuAZBbAEBuASC6ubXbHc88t63d2oE/K0BULeTOp1qtWr36jtbWT++79x6RaCX/lN8fqKiscrp6Q0fE4oSND/7s/b//I6wSpSJl966dYZcDAN+N35/cbu04zpyYT0mxOGHfi3sSJRLuqtbWT+dKZru1o9NmK9peOP9f45tv3Yrbk+KXL0NbAvrbeQnrG9utHX19ffm6vLDB84m33wn92GmzqVSrQ5eYaywyqTR0SV9fn0wqRasARCu3GzTrVao7971Ukr5urbu/XyaVpqev7bTZTKVlu3ftDIwEyg8eTl+3Nl+X9+rBA9wlHq/3woWBnOwsfj1yuTw0lnY4zmu1m6LyRF2NxaUtHqLE7P1HdClE1FZtZLqJKFVfV5i5IAUAbpYftC7V2vpPItJqN3I//lSpLNpeqNVu2rqt6KWXXzE+bdBqN7acbuWXT05OUqtVoaD6Bn2hs4GRwCjLSlZF5ZM9badaPNx7R/OxBheRq/GDbu5MD1N9ZkEKAMRAf2u3Oz77vH3LE/ncxPX7wcEdO3f7fENiccKRw+Urb11ZUVmVLE0+f/7rnv9+VbS9kCvPsqzeYCSih7Mf0mo38oPqcHwtFAgUCgVaBSBauVWrVcfe+DO398OyLBfF0EzVbncM+ny63+QW/HZLRWXV6dbPrFYry7JcGXONhSs2Ojp6pNLMr3brtqJoLClnbs76oJsb5T6jUxBR7uNrWiZHuTsyFqQAwE3zQ9eTubVirnflb/MQUVpaamhl2G53NLzXOMqy99ydxuWWvxzF927DSYfj/Pxzi/VkQH87X35/4OLFi0xdbeiIqWT/1Tvn3bt2VlRWXbNmd3+/+Cdi7N8CLHxuRaKVv/j545Fhrqis0mo3bdCsv2YNo6OsqbQssotGkwBEcX5LRB6v97Wqmqee3BJaIp7/oFcoFMzaRYemvgAQldzegE+aT3/SfJqIZr2/wuP1Op2u9HVr0TAAUcxt5ILwceYE//5HpSKFfzZsPZljtztqLG9wi9JicUJoQxgAZhXd70++3sXhG4D1ZEBuYw9yC0sQPjcPgNwCAHILAMgtAHK72IJoQEBuY04c0YoV8ePjl9GQgNzGEtGtAt+QHw0JSwr+bzUAcrtI0R0eHvGPsGNj42hRQG4BAPNbAEBuAZBbAEBuAQC5BQDO/wApyt1rmZ2jAwAAAABJRU5ErkJggg==",A="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAWkAAAA/CAIAAACtua5HAAAACXBIWXMAAAsSAAALEgHS3X78AAAOvUlEQVR42u2de1QTVx7Hf4g1ESyhZlCsS8I5uyXRYyM+1geCFuKjDx9trRUfu4DU4lGRqlW3Wq1ipSIKpaiLbdF6tr4FV9E99RFZBYK2Iko9ZkKPZwHLAjJYBiQmPur+cbPXcSY8RIKgv89fw2RmYO69873f3+93h7g8ePAAEARBHpNO2AQIgqB2IAiC2oEgCGoHgiCoHQiCIKgdCIKgdiAIgtqBIAhqB4IgqB0IgiCoHQiCoHYgCILagSAIageCIKgdCIIgqB0IgqB2IAiC2oEgCGoHgiCoHQiCIKgdCIKgdiAI0sZ0xiZoA+7du19767bltrWTS6fbVluH+/s5q+vf8no8b732bXD5s//8d3bt5i5XvuSB2tFOheNGNe/ayYV5yUMu79IRb8H91vPYcX/07fXM3+Pdu/dqauuLSyt8Vd6oHe0Ovs7SqVOnnl6e2BRIe+OFFzp7KRUAUP1b7eO6D8x3OB2r1ebp0RXbAWm3eHq436q3Pu5ZqB1Ox8Wlk1wmw3ZA2rP7uHfvPmpHu6MjJkcRBLUDQRCn4JRcaVJyCl/DL/l4kbu7W+M7hVRx3Lq4+GFDh4ROndK6f099vSVhY6LCU7EwJrqZp3Bcda4xj2XNrLmIYZSMUqnVaiZNHI8jBmnB4Kfs3XegvKKi+ePw+dIOk4k1m3+x2WzzFywkexQKj+DXRhUWXgEAulMmk8VEz+3TR0sf7y1bUj0Vignj32q8Y8h1AECt8okI/2tScgrP14oOU6t8hJ2XefRYReWNqe+/18xbYM1F8Rs2CXWE46pZc1FOrnHZksUMo3RGT5hMbHLKVputiQBHofBYsXyZF8OYTOzOf+xavCjGi2FIA6Zs3jpp4njapFQ0S0qvN3LBWRFhQYEBrXsvk/vCh4Mh4ypsu/BwT/gA+K4A0q8+PGyYDywfCS82ULauuwNxZwHA8TE/lUF/b+jiav8xuwRWnYbUCaBhGvvDyutgdRYUVbfane7dd+D4iVPS/XScC0c7AFy6XLh4UYzDvtbp+i2MiXb4kUwmGzZ0yJmz2cJeGzjAv8nOJdfsGNpRX2/Zt//ga6OChN6hiuM2JSYv/XihcFhLfQFpBVGjE8aNHU0vSLazc4wGw2mHo59IOxUOk4n995lsm822YWNScx4ekXCIzEh8wiYnyUefPtrUrV813y5dLvzZarWuXBUrHGfCe9Tp+n34QaRcLqctTzoi7C8zyI/k+q1+I35KmNwXurhC6KsQ+ioAgJkDAOjWBeYPhflDAQDu3IevL0BZHdyyQdxZOCcZ/8N8YMFQAIBz12HiLvBTwvKRkHcdRvnCV+fFx8eGPNwmIjK5L0zQ2KVndTCcKYZtFyBqMIzybeWbDZ06JXTqlCqO27Ildd68OUTHhfPB4SNHo+fPJaMxKTnlrTff8GIYL4bZlLBeqPVJySm9vL3pMCAX1OtDcnON9PTwsJl0BhWN3uwc44X8/IUx0cIuJg9Ch/EdX3+bBgB6ffD6+I2kXbJzjNt37Bw3djTZNhhOi+wcGcE1PL8hfp2o6engbtyMiOcWQXtVcdy2b9JsNpvI5gh/r1brJzxdKByBIwJInMKazWnbdxL5SNv+3bKli9vAE14suFTD8/PmzXEY3126XBg1O1Jo3Bz6jra3sjP7Q60NVmfB8pGQaYb0q/aH9ouzED7gkSd/mA90k8EXoxv0HS0gSA1ZEfbtbRP//4T/X8XK65x11zU8v3TZCul+tcqHTmm9vL2DAgP27jtw7vyPUR9+UMPztDf5Gn7mjGkt+L3bd+zcvmMn2Y6IjBJNITpdv46hHSYTW1l5g7joyMjw73ft+bWsbPee/dOnvZ+bm5edYyTTe8LGRCofxKF59+yxMCZapNzkI43mleaYLqFzIa6eJlDUatXCmOjsHOOGjUnUvxCrqVb5rFu7RihkRCAokbPC0rbvZM3myFnhgSMCcnKNxJiw5iKtxs+pT2AVx6VnHJr87jsiPbWbI7ZILpOpVCphECccNCRqAwCr1SoyXA35r9aKVlQKuFwBM/tD3FlYFAB1NhjuA+lX4cQ1qL0D4f5w0/IwamjSdwA8jETUngAAX4y2hzPSs+ZkOvAjq063hWJ6KhQklpT6DjI+WdZcUnqdjjrLbYvVauWqbwKAwZCl1Wpo7ElHMhGF+QsWimJwgru72+rPPhVF9IMHDWr1CLQttKNPH+36uLVkmzREesZhYpj9/fuvi4svKysLnTqF3hsxBTOmhwYFBlRxnK+v78pVscQdkEfCYSh+/MQpEmFSRXfYjqRLaOY1KDBAq/VbFxdPzpXJZA5jKNZsptsMozx85CjRCxFm52vH97v28HytwXB64AB/0aAhsuKpUAiDOKHvoEMWANo4Zkm/as9oxIbAogAoKIdPRgLAw2iF2AESWQA013f8VAY93O0xy8Gr8F5f6N8T1gQ/ku+IDYEgtYPrUBti7ztOLDFPjhfDSIcfeSLoGFv92adVHHfp0uUxo/UAYLltAYAL+flBgQHlFRWFhVeOnzhFwkwAeHvShIKCSyRmGTNGf/KkwZiXt3vPfnrlwYMGiaYNQmHhFWpDpPF+e8+VAgCJU9Qqn00J68m492KYdWvXJGxM/GjREirPXgzzZWICbf3wsJlyuYzMimqVz+avkhxmqqX5DqFtE866wiYTNTRJfzSeSeK46n8eziQdySiVQllhWbNTay579x3ga3ji14x5ecf+9YNwTjMYsmQyebtNv5MIhaYkabqUkjrBvkFyGbEh8KfuTaQwZZ2hiytUPRqB1dlgoxHOXW/QX7SN73D4DEtzamTq4vna3Xv263T9SIRiNv9iMrFkEBLXQI7/7bcauVzu5tbVYQWA5DukQ7cD+w4aaJDGSs84JM02Dxs6ZOmyFbRYIO0Dhx81zqiRQazZTCsONEW0es3nNAs9KyLMYVvTELEhedZq/CZNHB+/YRPHVQssCeO8LsnOMZ47/+OK5ctYtggAAoYP/0Pv3itXxZLwrb7eYrXaRutfy83NExkxUcxCNto4ZhGJCMkyiBKZomOIWaC5CWlZBAB0PcHMwZVKeK8vRA8Vp0LoNf2UsDoYer3o2Hc0FOk8OY3P7eRRNxiyrFYb9YAmEyuXyzUavx9OnCRWsbLyBk29nTmbPW7saJXKp6KycvOWVKHFFqoGicqFdUah73AY6bTffEdyylZaZGlI/8LDZu7dd4CGJ6KiFM/XSnNOjdcRe/fuVVxczLJFXoEMCSy1Wo00ihE5dofKzSiVQo0gMpG2fSdrLhLu1GhecZ5w7Nq9NyZ6rhfDsFAkLMEkJafMmbsgJnpueNjM7BwjvYXikhJftZoEIHp9SFBgAI1ZiDGmSei2qbM0FCAIqyHUgLzsAZ+cgnPXIXUC3KiHVachajAM6AVzMu0bxIxQ0Zl+8JFUiGPX9rMDs9PkWc4wIEJjSyoy9KPLhT/LZbI3Xx/3923f5F8syMw85t9f58UwJL1NB/yXiQnCCFSKXC4XpsylqZYOk+8QVRnJwyCsrdCqFYk7IiKj1Cqf2R9EHDiYQY2DNAnaeL5DLu+q1WpI6FhaWmq12fT64Ia6UzrrCoVpxIjhIpkgiQ/JHqf4DpKBXxu7yqHtIsX/bd+kRc2OFAril8mb1WrV62PHWG02MnHRMLu0tFQul7t1dYOnhIZ5JN2QXSKOXCbusm97yCDRCH5KGOULZ4obq56AoxJM6gQoKIes/zxSVWkkgeIkhGNJWiKl0+T0ae+TGU6tVr315hvEWQiLiaIwXOQ7aG6L8WKkvrKhszpAvkNU69Zq/dIzDl0suBQUGEBWf+j1IURHggIDSEObTOzj+kNhvgMA9PrgTYnJQv2WOgvpkj7SB4yyuyBC0Wg1fkL5YBixEwkcEeCMRGl2jpFlzaK6j1SdSYaI+g6SM0pKTiHpG5HocNU3ZXKZ81zrk/gOsp/ENWYOph+0S0Ctze4aens4DnakDsJPCR6yp+87pM88LZHabHdWr/m8hufJxJCdY6zheTLDXcjPB4AanrfcttCeEmqQ1EFYbltoffcZ8R10NOv1IVu2pBKv4cUwarWKmIKLBZcAYOAAf2f8Uof6LZrSSe3WYR9QpYicFb5k2XK6h6RLHz0gzBk9QZW0BaJDvFVh4ZWIyCgae9fXWwyG03p9yFPMmzbiO8ii0ls2iDoCRdX2pajnf32oET3c4UZ9s3xHdzfo4gqcBZ46DQXXMlkXGkHT6jsAfLRoCQkqDYaspctWkNWiTfoOrooDAMaLebo365Q6y8AB/gbD6cyjx8ggJlO9ycSmZxyKmh3Z4mmwiuNKSkppLlqEQ/0GwRIS6ZTOskVWq1XUBwyjTIiPS9v+nTR4eXvShHb1SsuBgxlnzmbrdP12pG0ThngkAfznwQPlcrlDpaYrqRUKD9HSOOf5DiIWWRFw5z6cvGYvsggTH59lAQAcmWFfgV5eB4nGBn3H5UoY0OthfbekBib3tZeBG4pZoNG1IU+OKH1Gqo2kkYXrvsjSAUbZfeWqWLJAgWRD+uteTU7ZWlxc4tB3+Pv3z83No8WHoKARNEvaSPK7obUhrYLLgwcPnJouagjhLTX5KgddeJuecYhUYUjMQt5nmfzuOxfy88kLSJlHjx0/cYocTxeACduO9miTWdicXGN19U0SsDCMckTA8JYtRb9WXN7R/3tdxS2YdgCeN0QLQ55tWjBKW9l3tPjFG09PRZO50rKysmFDh3BVHHmJQ6fr5+buRgyeTtePeMLQqVP0+uB1cfEkQSutnDU/NAgcEQAIgrSN70Ck/Lfi5sve3dF3oO94xnwH/u8fp/P7g9+t1jvYDki75e7de507uz7uWagdTqdrVxlfV4/tgLRbamrru7k/9lsOqB1OR9HN7f7vDyqqaqw2/MelSLtzHFXV/N2791rw9U74/SxOp3Nn1x5KBV9nqb5Z5+JS30G/Fw7gufteuGvFz8v3wr3s3ZICIuZKEQRpCRizIAiC2oEgCGoHgiCoHQiCoHYgCIKgdiAIgtqBIAhqB4IgqB0IgqB2IAiCoHYgCILagSBIW/I/E7gJk6HthWUAAAAASUVORK5CYII=",q="/sealdice-manual-next/assets/qsign-config.C7X6Y-jY.png",f="/sealdice-manual-next/assets/gocq-folder.BqYrXyGR.png",v="/sealdice-manual-next/assets/gocq-warn1.DnQT2Y8j.png",S="/sealdice-manual-next/assets/gocq-warn2.Be6mD1Aa.png",C="/sealdice-manual-next/assets/gocq-step1.pboT6Yxb.png",Q="/sealdice-manual-next/assets/gocq-step2.-UlYTUsA.png",B="/sealdice-manual-next/assets/gocq-success.DvcHSdvM.png",x="/sealdice-manual-next/assets/onebot11.hPU3-IW2.png",P="/sealdice-manual-next/assets/onebot11-success.B8KhG_3g.png",w="/sealdice-manual-next/assets/platform-qq-shamrock-1.DJ7tSnjn.png",L="/sealdice-manual-next/assets/platform-qq-shamrock-2.BojvCHzi.png",I="/sealdice-manual-next/assets/platform-qq-shamrock-3.BlEqBGNz.png",R="/sealdice-manual-next/assets/platform-qq-shamrock-4.FmFC-9a8.png",y="/sealdice-manual-next/assets/platform-qq-shamrock-5.BMm24yfS.png",E="/sealdice-manual-next/assets/platform-qq-shamrock-6.Bf1yZXSr.png",z="/sealdice-manual-next/assets/platform-qq-shamrock-7.DfAmZJ9X.png",W="/sealdice-manual-next/assets/platform-qq-shamrock-8.BJqlFaWq.png",Y="/sealdice-manual-next/assets/platform-qq-shamrock-9.CRgE7lL1.png",K="/sealdice-manual-next/assets/image-016.McE9_BqK.png",F="/sealdice-manual-next/assets/image-017.h2f0ACoz.png",O="/sealdice-manual-next/assets/image-018.DTqSvbQG.png",aa=JSON.parse('{"title":"其它归档内容","description":"","frontmatter":{"lang":"zh-cn","title":"其它归档内容"},"headers":[],"relativePath":"archive/archive-other.md","filePath":"archive/archive-other.md","lastUpdated":1728702230000}'),X={name:"archive/archive-other.md"},Z={class:"warning custom-block"},G={class:"custom-block-title"},U={class:"warning custom-block"},M={class:"custom-block-title"},T={id:"shamrock",tabindex:"-1"},N={id:"shamrock-lspatch",tabindex:"-1"};function D(H,o,V,J,j,_){const l=c("Badge"),r=c("PluginTabsTab"),n=c("PluginTabs");return h(),d("div",null,[o[16]||(o[16]=a("h1",{id:"其它归档内容",tabindex:"-1"},[t("其它归档内容 "),a("a",{class:"header-anchor",href:"#其它归档内容","aria-label":'Permalink to "其它归档内容"'},"​")],-1)),o[17]||(o[17]=a("h2",{id:"go-cqhttp-mirai",tabindex:"-1"},[t("Go-cqhttp / Mirai "),a("a",{class:"header-anchor",href:"#go-cqhttp-mirai","aria-label":'Permalink to "Go-cqhttp / Mirai"'},"​")],-1)),a("div",Z,[a("p",G,[o[0]||(o[0]=t("注意:海豹已于 ")),e(l,{type:"warning",text:"v1.4.5"}),o[1]||(o[1]=t(" 版本弃用此方案,以下内容归档于 2024 年 5 月 7 日。"))])]),o[18]||(o[18]=i('

    危险:此方案已经接近不可用

    由于 QQ 官方的检测,使用 Go-cqhttp 方案成功连接的成功率已经越来越低。即使成功连接,也可能面临高达每月 2 次的频繁冻结等情况。

    我们不推荐任何用户再使用此方案连接 QQ 平台。

    危险:Go-cqhttp 已停止维护

    Go-cqhttp 的开发者已无力维护项目(见 go-cqhttp/issue#2471)。在未来 qsign 签名服务彻底被官方封死之后,Go-cqhttp 将无法继续使用。

    使用签名服务

    危险:qsign 已停止维护

    原 qsign 作者已因「不可抗力」无法再维护此项目,对应原代码仓库也已删除,该方法会在未来逐渐失效,请做好预期准备。

    部署签名服务,即使用开源签名服务 qsign,是目前用来绕过检测的最有效手段。

    怎么使用签名服务?

    你可以自己在本地搭一个 qsign 服务,也可以使用别人搭好的。

    注意:自行搭建签名服务

    如果你的动手能力足够强或者有足够的电脑知识,强烈推荐 自己搭建本地签名服务器。

    使用他人的签名服务可能会泄漏以下信息 (截取自 qsign 的说明)

    • 登录账号
    • 登录时间
    • 登录后发送的消息内容
    • 登录后发送消息的群号/好友 ID

    不会泄露的信息:

    • 账号密码
    • 账号 session
    • 群列表/好友列表
    • 接收的消息
    • 除发送消息外的任何历史记录

    使用共享签名服务可能会提高账号被封禁的概率。

    在登录账号的时候会看到这样一个界面:

    海豹的 qq 登录页

    点击下面的「签名服务」一栏的「简易配置」,可以看到如下配置项:

    配置签名服务
    • 服务 URL:你要链接的 qsign URL
    • 服务 key:密码
    • 服务鉴权:默认为空,如果有的服务器要求特定的鉴权,就填上吧

    提示:默认的 qsign 配置

    没有特殊设置的话,qsign 的 URL 通常默认为 http://localhost:13579,key 通常默认为 114514

    如何搭建签名服务

    提示:有能力的用户可以自行搭建服务。

    注意

    由于项目的特殊性,下面的方法随时可能失效,我们不对信息的及时性做任何保证。可以加入海豹官方群寻求帮助。

    ',17)),e(n,{sharedStateKey:"os"},{default:s(()=>[e(r,{label:"Windows"},{default:s(()=>o[2]||(o[2]=[a("p",null,[t("可以尝试使用 "),a("a",{href:"https://github.com/rhwong/unidbg-fetch-qsign-onekey",target:"_blank",rel:"noreferrer"},"一键 qsign"),t("。")],-1),a("p",null,"引用自说明:",-1),a("blockquote",null,[a("p",null,[t("点开以后删掉文件夹里的 "),a("code",null,"go-cqhttp.bat"),t(" 及 "),a("code",null,"go-cqhttp_windows_386.exe"),t(",然后运行里面的 "),a("code",null,"Start_Qsign.bat"),t(" 启动 qsign,按照提示依次键入 "),a("code",null,"txlib_version"),t(" 参数、设定 "),a("code",null,"host"),t("、"),a("code",null,"port"),t("、"),a("code",null,"key"),t("的值。(如果不知道这些是干什么的,请直接依次按下 Enter)")])],-1)])),_:1}),e(r,{label:"Linux"},{default:s(()=>o[3]||(o[3]=[a("p",null,[t("参阅 qsign 提供的完整教程,看 "),a("a",{href:"https://github.com/fuqiuluo/unidbg-fetch-qsign/wiki/%E9%83%A8%E7%BD%B2%E5%9C%A8Linux",target:"_blank",rel:"noreferrer"},"这里"),t("。")],-1)])),_:1}),e(r,{label:"macOS"},{default:s(()=>o[4]||(o[4]=[a("p",null,[t("可以尝试使用 "),a("a",{href:"https://github.com/Verplitic/AutoQSignForMac",target:"_blank",rel:"noreferrer"},"AutoQSignForMac"),t("。")],-1),a("p",null,[t("在终端运行 "),a("code",null,"start.sh"),t(" 即可配置和启动签名服务器。如果提示 "),a("code",null,"zsh: access denied"),t(",需要先运行 "),a("code",null,"chmod -x start.sh"),t(" 来给予权限。")],-1),a("p",null,"初次启动会选择 txlib 版本,及运行 QSign 的主机、端口和 API Key。通常情况下,可以回车跳过而使用默认配置。",-1)])),_:1})]),_:1}),o[19]||(o[19]=i('

    手动抓取 ticket

    目前,Gocq 的过验证码网站已经停止服务,你需要自行抓取 ticket 进行登录。

    步骤如下:

    前置工作

    启动海豹,打开海豹的管理 ui,账号设置,添加账号;

    账号类型选 QQ 账号,设备选「Android Pad-可共存」(此协议登录手机可同时在线,qsign 仅 Android 协议和 Android Pad 协议可用):

    添加账号

    版本选择 8.9.70(如果你的 qsign 是其它版本,请选择对应版本):

    选择 qsign 版本

    填写 QQ 账号密码:

    填写 QQ 账号密码

    选择简易配置:

    选择简易配置

    服务 URL 填你的 qsign 服务地址。

    服务 key 填你的 qsign 服务密码,没有可以不填。

    服务鉴权不填写。

    服务鉴权

    接着点击登录,然后退出海豹(结束进程)。

    分离部署登录流程

    1. go-cqhttp\\go-cqhttp.exe 文件复制到 海豹目录/data/default/extra/gocqQQ号(你登录骰娘的qq号) 这个文件夹下。

      文件夹结构

    2. 双击运行 go-cqhttp.exe,两次确认后出现 go-cqhttp.bat 文件。

      运行警告 1 运行警告 2

    3. 双击运行 go-cqhttp.bat,出现以下消息后输入 2,回车,复制链接到浏览器(终端选中后右键即可复制粘贴,没有选项)。

      运行

      提示:出现 open image cache db failed

      出现该报错的原因很可能是因为 gocq 的缓存数据库损坏,可以尝试删除 gocq 的 data 目录后重新运行 gocq。(注意是 gocq 的 data 而不是海豹的!)

    4. 按照 手动抓取 ticket 教程 - 哔哩哔哩 视频教程操作,成功滑条后(需要抓 ticket,不只是滑条)复制 ticket 到终端后回车。

      滑块 ticket 输入

    5. 如果登录成功,你应当能看到一条类似于 2022-05-06 20:00:00 [INFO] 登录成功,欢迎使用:XXX 的日志。

      登录成功

      同时你应当在下方看到一条类似于 2022-05-06 20:00:00 [INFO] CQ Websocket 服务器已启动:[::]:8080 的日志。

      结尾的 8080 即为 gocq 的 ws 端口。你的端口号可能不同,总之请记住这个端口号。

    6. 打开海豹,删除之前添加的账号,然后重新添加账号,选择 QQ(OneBot11 分离部署)

      添加账号

      在连接地址中填写 ws://localhost:8080(请把8080替换为你的 gocq 端口号)。填写完成后点击下一步。

    7. 你的账号应当已经成功连接。

      连接成功

    GoCqhttp FAQ

    1. 出现 Code 1

    1. 账号密码错误,输入正确的账号密码。

    2. QSign 闪退

    1. 确认没有启动多个 qsign(多个 qsign 需要端口不重复);
    2. 确认端口没有重复。若重复,请重新配置 qsign,修改 port;
    3. 将 qsign 文件夹放到硬盘根目录试试(如 D 盘、C 盘)。

    3. 出现 Code 45

    1. 没连上 qsign,重启 qsign,重新登录;
    2. QSign 协议版本和 gocq 协议版本没对应,切换对应协议后重新登录;
    3. 该版本 qsign 已失效,升级版本。

    4. 出现 Code 235

    1. Ticket 复制错误(多复制了 "" 或少复制了内容),重新登录;
    2. 更换网络进行滑条,如电脑连手机热点,复制链接发给手机滑条,换台电脑等;
    3. 登录频繁,过段时间重新尝试登录(时间不确定)。

    5. 出现 Code 237

    1. 登录过于频繁,请等待一段时间继续;
    2. 内置的 ticket 抓取工具失效,需要手动抓取;
    3. 让他人帮助你滑条。

    5. 如何启动多个 qsign?(仅当需要备用签名或不同协议版本的时候有此需求)

    解压一个新的 qsign 文件,重新配置,端口需要输入不同于前面的端口。

    6. 什么是 go-cqhttp?(通常简称 gocq)

    登录 QQ 的程序,现各大骰系都用此程序,此外还有 mirai 等其他程序。

    7. 什么是签名?

    • 手机 QQ 有内置的签名程序,可以不太准确的简单理解为会生成一些密码发给腾讯,让它识别是不是人;
    • qsign 把手机 QQ 的签名程序偷了出来,提供了让我们自己生成密码的功能;
    • gocq 在配置后可以对接 qsign,那样骰子也可以证明自己是正常人了。

    8. 对于 SignServer(即 Start_Qsign.bat,俗称签名服务器)崩溃闪退可能的一种情况

    通常 SignServer 都不会出现用户可直接读出的报错信息。如果出现了崩溃或闪退的情况,可以同时按下键盘上 Ctrl Alt Delete 这三个按键,找到任务管理器,在右上角的内存一栏,那里会出现数字,有些调过设置了的会出现占用的运行内存占可用运行内存的百分比。

    很显然,这里的内存就是指电脑 CPU 的可用运行内存不足,这时候通过在任务管理器关闭部分没有在使用的进程就可以解决。

    注意:进程不能轻易关闭

    通常情况下,Windows 系统会运行一些进程以保证系统的正常运行。这些进程一旦关闭,系统可能会出现无法运行的问题。

    在一般情况下,不推荐关闭这些进程。如果需要通过关闭进程来腾出运行内存,可以选择关闭其他应用程序运行的进程。

    当然,关闭应用进程跟直接退出应用程序差别不大。对于在看这个界面的你来说,关闭应用程序是更好的选择。

    Chronocat Red 协议

    ',42)),a("div",U,[a("p",M,[o[5]||(o[5]=t("注意:海豹已于 ")),e(l,{type:"warning",text:"v1.4.5"}),o[6]||(o[6]=t(" 版本弃用此方案,以下内容归档于 2024 年 5 月 7 日。"))])]),o[20]||(o[20]=a("div",{class:"danger custom-block"},[a("p",{class:"custom-block-title"},"危险:支持 Chronocat 为 0.0.54"),a("p",null,"海豹 Red 协议所适配的目标 Chronocat 版本为 0.0.54,低于该版本(主要为 0.0.52)缺少必要接口,使用时会出现报错,不建议使用。")],-1)),o[21]||(o[21]=a("p",null,"在账号添加中,选择「QQ Red 协议」,填写相应信息进行连接。",-1)),a("h2",T,[o[7]||(o[7]=t("Shamrock ")),e(l,{type:"tip",text:"v1.4.2"}),o[8]||(o[8]=t()),o[9]||(o[9]=a("a",{class:"header-anchor",href:"#shamrock","aria-label":'Permalink to "Shamrock "'},"​",-1))]),o[22]||(o[22]=a("div",{class:"warning custom-block"},[a("p",{class:"custom-block-title"},"注意:已发现 QQ 客户端针对 Shamrock 增加了检测机制。在新版 QQ 客户端上,Shamrock 已无法使用。以下内容归档于 2024 年 7 月 17 日。")],-1)),a("p",null,[o[10]||(o[10]=t("海豹从 ")),e(l,{type:"tip",text:"v1.4.2"}),o[11]||(o[11]=t(" 开始适配了 Shamrock 的连接。"))]),o[23]||(o[23]=i('

    危险:Shamrock 已停止更新

    Shamrock 已于 2024 年 4 月 20 日归档,将不再进行更新。

    危险:1.1.0 及以上版本的 Shamrock 不适用以下教程

    2024 年 4 月 2 日,OpenShamrock 开发组于 Discussion#272 宣布,Shamrock 将会从 1.1.0 版本起弃用 OneBot V11 支持,迁移至新的 Kritor 协议。

    这意味着 1.1.0 及之后版本的 Shamrock 将不再支持 OneBot V11,以下教程也不再适用。请仔细分辨,以免造成麻烦。

    海豹开发组也正在着手对新的 Kritor 协议进行适配,请耐心等待。

    注意:有难度的操作

    此方式存在一定难度,你可能需要对 Root,使用命令行程序等有所了解。

    Shamrock

    Shamrock 是一个基于 LSPosed/Xposed 框架,实现劫持 QQ 以对外暴露 Onebot API 的软件。你可以在 Android 手机/模拟器中使用 Shamrock 代替已经停止开发的 gocq。

    遗憾的是,Shamrock 的使用依赖于 Android 的 root 权限,而手机厂商对 root 管控愈加严格,实体手机获取 root 权限的门槛很高,而模拟器中使用 Shamrock 的效果也不是很可观。因此,这种解决方案适合个人与朋友使用骰子的场景。

    此外,如果你想使用 Shamrock 代替 gocq,请确保你有良好的计算机使用能力。

    本节主要讲解如何使用模拟器实现 Shamrock,如果你有一台已经 root 的手机,也可以参考本节内容,本教程不涉及说明如何 root 手机,海豹官方也不对 root 手机造成的后果负责,请自行斟酌。

    提示:如何 Root 手机

    Root 手机可以参阅 小米手机安装面具教程。也可以前往 酷安 寻找更详细的教程。

    注意:低配置设备可能无法使用 Shamrock!

    在尝试通过模拟器使用 Shamrock 的场景下,由于模拟器对性能要求较高,包括 轻量级服务器、旧电脑、小主机等配置较低的设备可能无法支持使用。

    准备模拟器

    下面将使用 夜神模拟器 作为示例。

    使用时,确保安卓版本在安卓 8 以上,而在安卓 11 以下,最好使用安卓 9。

    获取 Root 权限

    Magisk

    Magisk(面具)是一套开源的 Android 自定义工具,通常用于获取 root 权限。

    Root 即 Android 的超级用户权限,如对 QQ 应用进行注入等的危险操作需要 root 权限。

    在使用之前,请在模拟器设置中打开 root 选项,软件中获取的一切权限都给予 通过,包括 root 权限

    使用 面具安装工具,把它安装到模拟器。

    然后启动软件,输入 m 回车,再输入 y 回车,会索取超级用户权限,给予,然后输入 1 回车,再输入 a 回车,输入 1 回车,此时面具就安装到你的模拟器上了。

    打开面具模块,此时面具会索取超级用户权限,给予,此时你会发现你的超级用户权限那里是灰的,关闭你的超级用户权限,重新启动你的模拟器。

    此时你会发现你的超级用户模块已经激活。在面具的设置里启动 zygisk 模块,随后你需要再次重启模拟器,使得 zygisk 模块生效。

    启用 zygisk

    安装 LSPosed 模块

    提示:使用 xposed/edxposed

    理论上,使用更为老旧的 xposed/edxposed 或在手机上运行虚拟机的 virtualXposed 的方案也是可行的,但我们不推荐也未尝试过使用它们。

    任何不按教程的行动请自行处理疑难问题,海豹官方不对此提供帮助。

    请于 LSPosed Releases 页下载模块。

    注意:zygisk

    务必选择以 zygisk 结尾的包。

    下载完成后,把文件上传到模拟器中。一般情况下,直接把文件拖动到模拟器就可以传文件了,且文件一般在 picture 文件夹中,如果没有请参照你使用的模拟器说明。

    在你传完文件之后,在最右侧切换到「模块」页后,你可以看到从本地安装的选项。单击你刚刚传到模拟器里的文件,等待安装完成即可,随后你可以在右下角看到重启按钮,点击等待重启。

    安装完成后应该如下所示:

    完成 LSPosed 模块安装

    安装 Shamrock

    请于 Shamrock Releases 下载 Shamrock 的 apk 安装包,直接将 apk 文件拖动到模拟器即可进行安装。

    如果模拟器中没有安装 QQ,此时你还需要将 QQ 安装到模拟器中。

    安装完成后,首先启动 Shamrock。在通知上,你可以打开 LSPosed 的页面,在模块一栏中启用 Shamrock

    启用 Shamrock

    选中 Shamrock,进入勾选 QQ,并长按 QQ 选择 强行停止

    Shamrock 中勾选 QQ

    随后再打开 QQ,你可以看到「加载 Shamrock 库成功」的提示,这代表 Shamrock 已经成功注入了 QQ。

    成功注入后,打开 Shamrock 启用 ws 服务,通常情况下无需修改 Shamrock 的任何内容,如有其它需求请阅读 Shamrock 文档

    Shamrock 启用 ws

    开放模拟器端口供海豹对接

    首先下载 adb 工具,解压到电脑中任何可用的位置。

    随后找到模拟器供 adb 连接的端口,夜神模拟器路径示例如下:

    夜神模拟器 adb 端口

    其中:

    • Nox 是模拟器根路径。
    • Nox_4 是模拟器的编号,你可以在多开助手中看到你的编号。
    • 选中的文件就是要找的文件,在 vscode 中(或者其它文本编辑器)中打开。

    打开

    guestport 值为 5555hostport 即为所需端口,如示例中就是 62028,记住这个端口号。

    在你解压的 platform-tools 里打开终端,或者把 platform-tools 加入环境变量后再启用终端。也可以在 platform-tools 里新建一个 .bat 文件,把下面的命令写到文件里面。

    在打开的终端中输入命令:

    cmd
    .\\adb connect 127.0.0.1:端口

    如替换为上面示例中的 62828:

    cmd
    .\\adb connect 127.0.0.1:62028

    随后再执行:

    cmd
    .\\adb forward tcp:5800 tcp:5800

    此时你已经成功开启端口了。

    执行 adb 命令

    连接海豹

    在账号添加中,选择「QQ(onebot11正向WS)」,按照下面的格式进行填写:

    连接 Shamrock

    成功连接后即可使用。

    ',56)),a("h2",N,[o[12]||(o[12]=t("Shamrock LSPatch ")),e(l,{type:"tip",text:"v1.4.2"}),o[13]||(o[13]=t()),o[14]||(o[14]=a("a",{class:"header-anchor",href:"#shamrock-lspatch","aria-label":'Permalink to "Shamrock LSPatch "'},"​",-1))]),o[24]||(o[24]=i('

    注意:已发现 QQ 客户端针对 Shamrock 增加了检测机制。在新版 QQ 客户端上,Shamrock 已无法使用。以下内容归档于 2024 年 7 月 17 日。

    注意:有难度的操作

    此方式存在一定难度,你可能需要对使用命令行程序有所了解。

    注意:Andriod 版本要求

    由于 LSPatch 要求安卓版本 9.0 以上,因此你的安卓手机版本必须超过安卓 9。

    LSPatch

    LSPatch 是在无 root 环境下使用 Shamrock 的一种途径,原理是利用 Shizuku 安装经 LSPatch 修补后的 QQ,再使用 Shamrock 劫持 QQ 并对外开放 API。

    安装 Shizuku

    Shizuku

    Shizuku 是一个帮助其他应用直接使用系统 API 的应用,而 Shizuku 本身则需要通过电脑使用 adb 工具赋予权限。

    Adb 即 Android 调试桥,是安卓官方提供的帮助在电脑端调试 Android 设备的命令行工具。

    首先需要在你的手机安装 Shizuku,安装后需要在电脑中使用 adb 命令为其赋予权限。

    ',7)),e(n,null,{default:s(()=>[e(r,{label:"Windows"},{default:s(()=>o[15]||(o[15]=[a("p",null,[a("strong",null,"在 Windows 中使用 cmd 执行 adb 命令:")],-1),a("ol",null,[a("li",null,[t("安装 adb,工具下载见 "),a("a",{href:"#开放模拟器端口供海豹对接"},"上文"),t(";")]),a("li",null,[t("打开 cmd 窗口; "),a("ul",null,[a("li",null,[t("如果你的电脑是 Window 11 操作系统,你可以直接右键 "),a("code",null,"platform-tools"),t(" 文件夹单击 "),a("strong",null,"在此处打开命令行"),t(";")]),a("li",null,"其它版本的打开方式请自行搜索。")])]),a("li",null,"你有多种方式使用 adb:")],-1),a("ul",null,[a("li",null,[t("将 adb 添加至系统环境变量,在系统开始一栏中可以直接搜索到该功能,随后将 "),a("strong",null,"解压好的"),t(),a("code",null,"platform-tools"),t(" 路径填入至系统变量中的 "),a("code",null,"path"),t(",例如,adb 在 "),a("code",null,"E:/shamrock achieve/platform-tools"),t(" 文件夹中,那么你只需要将该路径填入 "),a("code",null,"path"),t(" 即可。 "),a("img",{src:K,alt:"adb path"}),a("ul",null,[a("li",null,[t("如果你是旧版本 Window(如 Win 7),系统未提供对应的 GUI,你需要使用 "),a("strong",null,[a("code",null,";")]),t(" 隔开不同的路径。")])])]),a("li",null,[t("也可以选择使用 "),a("code",null,"cd"),t(" 命令切换至 adb 目录,使用此方法请将 adb 放在 C 盘;(由于 Windows 权限问题,使用运行开启的 cmd 实例无法访问 C 盘之外的路径。) "),a("ul",null,[a("li",null,[a("code",null,"win + R"),t(" 键启动「运行」;")]),a("li",null,[t("在运行中输入 "),a("code",null,"cmd"),t(" 并回车;")]),a("li",null,[t("在打开的黑框框中输入命令 "),a("code",null,"cd <替换为对应路径>"),t("。 "),a("img",{src:F,alt:"切换到 adb 文件夹"})])])]),a("li",null,[t("还可以选择在 "),a("code",null,"platform-tools"),t(" 文件夹中新建"),a("code",null,".bat"),t(" 文件。")])],-1)])),_:1})]),_:1}),o[25]||(o[25]=i('

    在手机中,你需要开启 USB 调试 ,在手机设置中,选择「更多设置—关于手机」,多次点击软件版本号,即可进入开发者模式。

    随后在「更多设置—开发者选项」中打开 USB 调试,使用数据线连接电脑和手机,随后在你的手机中出现指纹调试弹框,给予通过。

    在电脑中使用命令:

    cmd
    adb shell sh /storage/emulated/0/Android/data/moe.shizuku.privileged.api/start.sh

    为 Shizuku 赋予 adb 权限

    安装 LSPatch

    LSPatch

    LSPatch 可以在无 root 环境使用 LSPosed 框架。

    可以参看 LSPatch 使用教程 了解更多。

    1. 你需要在 Shizuku 中启用 LSPatch,并重启 Shizuku。
    2. 在管理中,单击加号,选择已经下载的 QQ apk 文件,选择本地修补,等待一会,然后就可以安装了。

    安装并激活 Shamrock

    安装方式 上文 有提及,此处不予重复。

    在 LSPatch 中,长按修补后的 QQ 出现模块作用域,允许 Shamrock 然后重启 LSPatch。

    激活 Shamrock 模块有三个前提,即 QQ 进程,Shamrock 进程和 LSPatch 进程存活,请自行配置保活策略,例如允许自启动,允许后台存活和关闭后台高耗电等。

    对接海豹

    首先安装海豹安卓端。

    注意:确认海豹版本

    请使用版本为 1.4.2 以上的安卓端海豹。

    建议使用 反向 ws 设置。在海豹中,账号添加中选择「QQ(onebot11反向WS)」,填入骰子 QQ 号和要开放的 ws 端口(例如 :6544)。

    随后在 Shamrock 中的被动 ws 连接地址中写 ws://localhost:6544/ws

    ',17))])}const ta=p(X,[["render",D]]);export{aa as __pageData,ta as default}; diff --git a/assets/archive_archive-other.md.D8Q2HrYQ.lean.js b/assets/archive_archive-other.md.D8Q2HrYQ.lean.js new file mode 100644 index 000000000..9bd01b0b4 --- /dev/null +++ b/assets/archive_archive-other.md.D8Q2HrYQ.lean.js @@ -0,0 +1 @@ +import{_ as p,c as d,j as a,a as t,G as e,a6 as i,w as s,B as c,o as h}from"./chunks/framework.B1keMFNq.js";const g="/sealdice-manual-next/assets/platform-qq-qsign-1.DewZ-7A7.png",u="/sealdice-manual-next/assets/platform-qq-qsign-2.Cv0YuS6C.png",m="/sealdice-manual-next/assets/select-account.BQuutaYp.png",k="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAVkAAAA8CAIAAABD3l7RAAAACXBIWXMAAAsSAAALEgHS3X78AAAIgUlEQVR42u3df1CT9x0H8E93u6Mj64mXJwHaJeHsSdKBFC+cyg/ZWYq6FqtzYbG3nSzGK+ucU2uBQ3TADvDQabCW648ZItx2NYPa2toeJcPdIYHOI8pR0IS7VpMcC5KHlawL07/cHw88PCYEBw3jR96vv/Lj4XmSJ8/3/Xy/n++T8NiDBw8IACLed7ALAABZAADIAgBAFgAAsgAAkAUAgCwAAGQBACALAABZAADIAgBAFgAAsgAAkAUAMEffjZD36Rwjy5fU7aavvsaHDkvbqpWULqPcp0kRE87VPhYJv1/gHKPGXvrmPmmSwrz7ABbkeG4ZoCeiqCA1nMdzRGTBORs5WDq5BUcRLB9Fn5GSob1q1Atmo9tNmiQcPLCsaJKo2x3OFUZEFnz1NYYGsNwoYsJc/MI8AgAgCwAAWQAAyAIAQBYAALIAAEKZ9TXIVzu72tuvFL3+2seXP/EMDx86sD9gAS/LVtfU+nz/2rL5+V3a/OA1GM6cjY+Lm/YpIZYdtXZ12+0Ou2OQYcSMWKxSKbe/lDfPO8Rq0Df1cTeluRXHNYpHLrZmt+lgZvASTnNZRRsb9HCyzrg/m4jIbS6tah155IYAFmsWBLtgbv6s7a/83aioqAP7f/3MM6o7Tuec12l3DNaeOCXMBZYdtTsGO61dJUWHGUY8P3vDbS5t6pto225zaVVFKU3XSq0GPb8YddQV6uooOA4U2mqTVnDf1VJcaaHNO6aCIHa36fjkhuripw0UgKWUBUSUkpIc3EFIUCiudnY1mBqDl+/r6xfGB2ePrmBjVkZwEAR0FmpPnpqvOOj8sHWE2foq1yZl2ldzbZU3PndpFPKAE/6nfZSsm2y62Qd32/RNhs7MQ1kzpsxbFq80t0IrC7GhT82uTK0cByQs8SwIZWNWBte8hUMMLh34lh9MGARZmRncuMDucBgbGrk4MDacLyk+vFC7zOlhac0L2VMPyJ+Ukm3ITSR7RMqUT3QxnEPDJF27gW/58vVqqcXW7dbKZTgiYaH8X2uHXpZtb7+ikMuUiaut1i6/fzx4Ga7B8/R7Ci59dLn25CmGYbIyM/gRhN0xGP7Xl7Vjq5RtvWgVnMkFLXbmt+ZxzdQp+KSf1rzAn/adHpZi4xWzWAMsEwM3B0e8o6GevX3HffuOe6Fe21z6BU6X+ze/PcTdrqisSkhI6Ovr1+kLhcvwVQPhg3/683sqldIzPBwfF0dE12/0BncN7A4Hf5thxJc+utxp7Qp+DQ7HoEqZGO69IdMefye+rlCnbyIKWRRUxDPUdr2DMie7Bq5/jBDFzjz0oJQXUQ4ASlD84FpPr1fCJP0wcbqYYDf9KGMpZYFCLit6/TWRKJq7e8HcrExcfe/evZyc57i27WXZU6fPBPzV1c4u35jvlb36d88ZiSgnZ1N9/dsqVaKEYUJtiGVHP7z0MRHt2L6NEYuFMWG3O8I/pzBR3jtqOigjriiovz5Z9he8/fS1kjaLqc6aPVE7nJxQCKGjp5+kuTuz0BCARKLodWmp13p66SYJ4+BaT6/fP76AQRC2MULU41ErYlb02GyTDXXw8agouXyqe33rlv39ix9of6bhE0TCMDk5z9XXvz3tSEFIpUzc/lKeseE8y44KugxM2PdFx0WLV5q7TzsxaM8+uDuF+i+bg/pscs2J8lzJF006faFOX2hLO7pVOsNarbYvSJK6HlOGIIyDES87cHNw8QTBtx0jCKcP0tTq9vYrfv+4SBTdY7OpVEq+2XtZ9p0/Gn+68ycBQ4aNWRk9Ntu754zCOQhGLBa2ea7ZGxsaAwoESuXqedkfDw3j5U9Kqc/jmqYoKNecMGr41m4wkSQ1RF3B5fEQxT8lCxxl9HqcRMKAkMRjFiESewf+8fHFEARz7Bco5LI33zBs2fz8Q2dvVeK9+/ddLpeXZe/eHXk2ZQ0fBNU1tRvWr5t21uCVvXrfmM9w5iz/SGZmevBiwTOI89EvICK66wm4KCK4iTrNZTr92Y6pcsD1PmLU6bJQWeClZPXDAwTFU3E0cuNzvlbo+rttJPQaYPnGwW2ne5EEQXjGCFwtUMIwsbFS819ajMbzqc+mcF2AW7fsx373e4VCHuoqQ5Eoet++XzmdLj4OVEplQFGQYQJ7ClmZGfNQOKTsnbmSEUv95KCgo66qdSQ5TxvYRBXpayVTYwerwfTQHEFgcAwNkzRwymBiwuKtFifRxIRF6DXAMo6DvB/nLJIgmMsYYWhoaEXMCr7/7/eP+8Z8aWo1Ef3i5y9X19TGEG3Le5F7trXNolSuPnRgf8BFR/y1Rtx0Q9mRkuqa2gvm5l3afIYR6/f8sqjkCL8wVz4URoN+T8G87Ay55oQx3qCv0rVx95OnCoeuluLKG+ryaq2cqxdQceXEYpLNR018XggX47LAw063JZn2+FEqrarQW4iIpLkVuOgQFtrsfvvU7x8/+YfTKpVylzb/grnZMzycpla/f/GDsiMlEobhL0YO9U0Ezv/yfQTugqLgiwh2bN82h+mDTSZ6L5/ivo+PG5aP4X/Ty830N90C9QtcLteYz8fXAoiox2ZTKOTR34uuqKwiojffMIz/Z7y6ptZudwjnHWeLYcQlxYc7rV2jo//kBggMI87MSJ+3byIARLpZjxHiYmP5yULfmI+ItNr8smPlG9av4071IlF03emThjNny46Vc/2FgDUEf3MhFP5CQwBYXGOEJQpjBMAY4ZHwWyYAgCwAAGQBACALAABZAAARmwWrVpJzDJ81LCvOMVq1ElkwS+kyahnAwQPLSssAhffrbBFxfYFzjBp76Zv7pEnCP1yG5XA8twzQE1FUkBrO4zkisoDbfZYvqdsd5n9TDbAgY950GeU+HeYTW6RkAQCgXgAAyAIAQBYAALIAAJAFAIAsAABkAQAgCwDg2/kvh+Bdy6b8rFsAAAAASUVORK5CYII=",b="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAT0AAAByCAIAAACugJHHAAAACXBIWXMAAAsSAAALEgHS3X78AAAK2ElEQVR42u3da1BTZx4G8D9VTGpmyE4NkExKsl9akw7S24xSiWw1hdLL7MWFDVO3dLPZbnoRFau4VltCBa1CCWxqK9PBs9LpTKms253thYJ0W4jsdoasFtgmdqYzTRgaJBlLkAQOiNkPB8IhAUVLZFOe36dwznveIbx58t5OQlwwGCQAiCm34E8AgNwCAHILAMgtAHILAMgtACC3AMgtACC3AIDcAiC3AIDcAgByC4DcAkDMWP4jeA4TE1cGh/yXhgMTE1fQorAUxMX6529Zdvx733AwGBQniOLjl6NFAf1tDPAHRoPBoCz5NrQlYH4bM0bZMXGCCA0JyG0sGRkdw/AYkFsAQG4BALkFAOQWALkFAOQWACItwR2U3oa9Zd89VlukmXGkaWDyhzT9XKdS9XWFmZH1uRqLS1tkvKvaqo1MN69AUpbpUK6Se2y16Jke7mFi9v4juhS8BOGm5tbj9ZYfPOzzDYWOpKWlFm0vNNdYZFJpvi6PO9hu7ei02Yq2FxKR3x+oqKxyunrnqlMsTtj34p5EiSR6T7ituqxpgNJmxriJskx1ucrJXBnNNBnCturpU23VRsZgofDo9ja82eIhkvGOuC/MkUmrRc/0TL4vuBqLS8uKCdGFKOT2stU6ce6cYOvWWc8KhULj0wa1WkVE5hpLZIF3G05+9nn7lify/f6ASLSSO/h7/VMbNOsjC9vtjhNvvxPNJ3vGbKjvCu8tv7ANSHJKpvpDTaG+08h82OjU5CpdjR90U5p+8lTmjgKbod5mpczp3picDcdCHXWoxu8GSCZPmaWf/7AnMXv/ZLesyH0++6zp3BdOXYoSL0NYqNyOnTw5cfZs/KOP3qJUsq+/Hrx0SbBtW5wo/I7CwMiIqbRMq90UWYO5xuJ0ug688nJU+8/rC21SlulZOlraMn1YkXukLpdfTimT0IXZTrnc7hn9KpGr8Wgz5eizbEzLzGKpj2sih9Nf2AYk9z8wnWelrpzR4RUIC5rbFXl5wQcfHDWbg5curdDplms011Uv1/1WV1VEnjrOnDjOnJhrnBy1Z5pRVJfBhe3qs99/n/NSsiyyD2w71eJJynpeM3OEvKZAp3DbeMWc/zrrIS9jMDJhk1uX20NSmWK6z8f8FqIyTr7i8cStWrVMrb7idl9vvdyEdlaLN06eB+v7TQOU9lgG/5izYZ+p2Us0PWaeKpmqP5QR9kbgdHuJJDkl5TrF5OTZtJdMh3Kpr5/IyxhIX1dbRJjfQnRyG/T7xz/+OP6RR25RKtljxya++mrZXXddvS52lDWVljldvV1dPZ80n+afejj7oXxdnki00lSyf67L1WrVqwcPLOYfw9VYzPTQmoKimWOLqQHtGbPBWNzHJe2MmelJ09dGLi9n7uAfTNE9m2UrbTllzd1MRCTJKZla1uLmt83vt+lmW6MGuLHcxolEwhdemFx/mnpwdQKh4E97dnHryXK5/K+n/hZaHG63dugNxvn/WlzOb3ZoS1s8awqYHRlzjbQ3Z3/EJY2q67vWFDDzmTooZDIidx+3hC6VKXhvB3IpUb/bRaTA6xAWbpw8T0KhULIq/GPrKtWdQqHQ6/Fyud2gWc+NjbmtIK1206xD5cXsaa8RWr4ztm4iqtcb6kOHPIxR33m1y5VyKV5t8P+S20BgZNDnizyeKJEkJyd92dXN7RKF/OfsuUGfT6W6MwZCa7Xomf6pmerU3DXpXiVlZNZlhF0+dd9Fb8PesqZkXlUut5sk9z+QQor70pgZ20jOvv6wHhgg6rlNlEhePXjAbncMDvoa3mvcvWtnaIeWk5OdVftW3d1pa/jR7evr8/mGivfsm6vauVatouaMea6eVvPLnA/Lmt5sTD80eUsG0z1zaWoWKbrHUpuYerM1o0gzXblOMTXMZixtmsJMIrJaTM3exOxnMLmFRehvv+zqXr36DiKqqKwKi65arUpftzYs0vm6vLkmrna7o/atusghd1Q5Gz7qIqLuGYPeqVsaU3SH9tPeMpOB256V5JTU6q7ZPWoKGbLoGaOe2wjivSModeWM3KKf2iKaeUMlwHX4Qd/n6PF6X6uqeerJLQqFoqKySvwTceg+R7lc3mmz/fEPhorKKiKK7I0jtVs7Wls/nU9Jvm++dStuT4pfvgxtCcjtvEJbfvDwrzf/ihvWerzeo0eP6X9XwPyl3unq5d9pzN2DEbaja7c7aixvsCwbOiIQCLYXPhc2H0ZuARYyt2GfH5g1zDcBcgvIbexBbmEJwufmAZBbAEBuAQC5BUBuF1sQDQjIbcyJI7pVuGJ8/DIaEpDbWCIQrPAN+dGQsKTg/1YDILeLYWLiim/IPzQcmJi4ghYF5BYAML8FAOQWALkFAOQWAJBbAEBuAZBbAEBuAQC5BUBuAQC5BQDkFgC5BQDkFgCQWwDkFgCQWwBAbgGQWwBAbgEg2n4MX1w6Nn55eHjEP8KOjY2jRWEpiPnvcxwbv+y9OBRHhO9PBvS3MWN4eCSOSJZ8G9oSML+NGf4RVpwgQkMCchtT4+SxcQyPAbkFAOQWAJBbAEBuAZBbAEBuASC6ubXbHc88t63d2oE/K0BULeTOp1qtWr36jtbWT++79x6RaCX/lN8fqKiscrp6Q0fE4oSND/7s/b//I6wSpSJl966dYZcDAN+N35/cbu04zpyYT0mxOGHfi3sSJRLuqtbWT+dKZru1o9NmK9peOP9f45tv3Yrbk+KXL0NbAvrbeQnrG9utHX19ffm6vLDB84m33wn92GmzqVSrQ5eYaywyqTR0SV9fn0wqRasARCu3GzTrVao7971Ukr5urbu/XyaVpqev7bTZTKVlu3ftDIwEyg8eTl+3Nl+X9+rBA9wlHq/3woWBnOwsfj1yuTw0lnY4zmu1m6LyRF2NxaUtHqLE7P1HdClE1FZtZLqJKFVfV5i5IAUAbpYftC7V2vpPItJqN3I//lSpLNpeqNVu2rqt6KWXXzE+bdBqN7acbuWXT05OUqtVoaD6Bn2hs4GRwCjLSlZF5ZM9badaPNx7R/OxBheRq/GDbu5MD1N9ZkEKAMRAf2u3Oz77vH3LE/ncxPX7wcEdO3f7fENiccKRw+Urb11ZUVmVLE0+f/7rnv9+VbS9kCvPsqzeYCSih7Mf0mo38oPqcHwtFAgUCgVaBSBauVWrVcfe+DO398OyLBfF0EzVbncM+ny63+QW/HZLRWXV6dbPrFYry7JcGXONhSs2Ojp6pNLMr3brtqJoLClnbs76oJsb5T6jUxBR7uNrWiZHuTsyFqQAwE3zQ9eTubVirnflb/MQUVpaamhl2G53NLzXOMqy99ydxuWWvxzF927DSYfj/Pxzi/VkQH87X35/4OLFi0xdbeiIqWT/1Tvn3bt2VlRWXbNmd3+/+Cdi7N8CLHxuRaKVv/j545Fhrqis0mo3bdCsv2YNo6OsqbQssotGkwBEcX5LRB6v97Wqmqee3BJaIp7/oFcoFMzaRYemvgAQldzegE+aT3/SfJqIZr2/wuP1Op2u9HVr0TAAUcxt5ILwceYE//5HpSKFfzZsPZljtztqLG9wi9JicUJoQxgAZhXd70++3sXhG4D1ZEBuYw9yC0sQPjcPgNwCAHILAMgtAHK72IJoQEBuY04c0YoV8ePjl9GQgNzGEtGtAt+QHw0JSwr+bzUAcrtI0R0eHvGPsGNj42hRQG4BAPNbAEBuAZBbAEBuAQC5BQDO/wApyt1rmZ2jAwAAAABJRU5ErkJggg==",A="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAWkAAAA/CAIAAACtua5HAAAACXBIWXMAAAsSAAALEgHS3X78AAAOvUlEQVR42u2de1QTVx7Hf4g1ESyhZlCsS8I5uyXRYyM+1geCFuKjDx9trRUfu4DU4lGRqlW3Wq1ipSIKpaiLbdF6tr4FV9E99RFZBYK2Iko9ZkKPZwHLAjJYBiQmPur+cbPXcSY8RIKgv89fw2RmYO69873f3+93h7g8ePAAEARBHpNO2AQIgqB2IAiC2oEgCGoHgiCoHQiCIKgdCIKgdiAIgtqBIAhqB4IgqB0IgiCoHQiCoHYgCILagSAIageCIKgdCIIgqB0IgqB2IAiC2oEgCGoHgiCoHQiCIKgdCIKgdiAI0sZ0xiZoA+7du19767bltrWTS6fbVluH+/s5q+vf8no8b732bXD5s//8d3bt5i5XvuSB2tFOheNGNe/ayYV5yUMu79IRb8H91vPYcX/07fXM3+Pdu/dqauuLSyt8Vd6oHe0Ovs7SqVOnnl6e2BRIe+OFFzp7KRUAUP1b7eO6D8x3OB2r1ebp0RXbAWm3eHq436q3Pu5ZqB1Ox8Wlk1wmw3ZA2rP7uHfvPmpHu6MjJkcRBLUDQRCn4JRcaVJyCl/DL/l4kbu7W+M7hVRx3Lq4+GFDh4ROndK6f099vSVhY6LCU7EwJrqZp3Bcda4xj2XNrLmIYZSMUqnVaiZNHI8jBmnB4Kfs3XegvKKi+ePw+dIOk4k1m3+x2WzzFywkexQKj+DXRhUWXgEAulMmk8VEz+3TR0sf7y1bUj0Vignj32q8Y8h1AECt8okI/2tScgrP14oOU6t8hJ2XefRYReWNqe+/18xbYM1F8Rs2CXWE46pZc1FOrnHZksUMo3RGT5hMbHLKVputiQBHofBYsXyZF8OYTOzOf+xavCjGi2FIA6Zs3jpp4njapFQ0S0qvN3LBWRFhQYEBrXsvk/vCh4Mh4ypsu/BwT/gA+K4A0q8+PGyYDywfCS82ULauuwNxZwHA8TE/lUF/b+jiav8xuwRWnYbUCaBhGvvDyutgdRYUVbfane7dd+D4iVPS/XScC0c7AFy6XLh4UYzDvtbp+i2MiXb4kUwmGzZ0yJmz2cJeGzjAv8nOJdfsGNpRX2/Zt//ga6OChN6hiuM2JSYv/XihcFhLfQFpBVGjE8aNHU0vSLazc4wGw2mHo59IOxUOk4n995lsm822YWNScx4ekXCIzEh8wiYnyUefPtrUrV813y5dLvzZarWuXBUrHGfCe9Tp+n34QaRcLqctTzoi7C8zyI/k+q1+I35KmNwXurhC6KsQ+ioAgJkDAOjWBeYPhflDAQDu3IevL0BZHdyyQdxZOCcZ/8N8YMFQAIBz12HiLvBTwvKRkHcdRvnCV+fFx8eGPNwmIjK5L0zQ2KVndTCcKYZtFyBqMIzybeWbDZ06JXTqlCqO27Ildd68OUTHhfPB4SNHo+fPJaMxKTnlrTff8GIYL4bZlLBeqPVJySm9vL3pMCAX1OtDcnON9PTwsJl0BhWN3uwc44X8/IUx0cIuJg9Ch/EdX3+bBgB6ffD6+I2kXbJzjNt37Bw3djTZNhhOi+wcGcE1PL8hfp2o6engbtyMiOcWQXtVcdy2b9JsNpvI5gh/r1brJzxdKByBIwJInMKazWnbdxL5SNv+3bKli9vAE14suFTD8/PmzXEY3126XBg1O1Jo3Bz6jra3sjP7Q60NVmfB8pGQaYb0q/aH9ouzED7gkSd/mA90k8EXoxv0HS0gSA1ZEfbtbRP//4T/X8XK65x11zU8v3TZCul+tcqHTmm9vL2DAgP27jtw7vyPUR9+UMPztDf5Gn7mjGkt+L3bd+zcvmMn2Y6IjBJNITpdv46hHSYTW1l5g7joyMjw73ft+bWsbPee/dOnvZ+bm5edYyTTe8LGRCofxKF59+yxMCZapNzkI43mleaYLqFzIa6eJlDUatXCmOjsHOOGjUnUvxCrqVb5rFu7RihkRCAokbPC0rbvZM3myFnhgSMCcnKNxJiw5iKtxs+pT2AVx6VnHJr87jsiPbWbI7ZILpOpVCphECccNCRqAwCr1SoyXA35r9aKVlQKuFwBM/tD3FlYFAB1NhjuA+lX4cQ1qL0D4f5w0/IwamjSdwA8jETUngAAX4y2hzPSs+ZkOvAjq063hWJ6KhQklpT6DjI+WdZcUnqdjjrLbYvVauWqbwKAwZCl1Wpo7ElHMhGF+QsWimJwgru72+rPPhVF9IMHDWr1CLQttKNPH+36uLVkmzREesZhYpj9/fuvi4svKysLnTqF3hsxBTOmhwYFBlRxnK+v78pVscQdkEfCYSh+/MQpEmFSRXfYjqRLaOY1KDBAq/VbFxdPzpXJZA5jKNZsptsMozx85CjRCxFm52vH97v28HytwXB64AB/0aAhsuKpUAiDOKHvoEMWANo4Zkm/as9oxIbAogAoKIdPRgLAw2iF2AESWQA013f8VAY93O0xy8Gr8F5f6N8T1gQ/ku+IDYEgtYPrUBti7ztOLDFPjhfDSIcfeSLoGFv92adVHHfp0uUxo/UAYLltAYAL+flBgQHlFRWFhVeOnzhFwkwAeHvShIKCSyRmGTNGf/KkwZiXt3vPfnrlwYMGiaYNQmHhFWpDpPF+e8+VAgCJU9Qqn00J68m492KYdWvXJGxM/GjREirPXgzzZWICbf3wsJlyuYzMimqVz+avkhxmqqX5DqFtE866wiYTNTRJfzSeSeK46n8eziQdySiVQllhWbNTay579x3ga3ji14x5ecf+9YNwTjMYsmQyebtNv5MIhaYkabqUkjrBvkFyGbEh8KfuTaQwZZ2hiytUPRqB1dlgoxHOXW/QX7SN73D4DEtzamTq4vna3Xv263T9SIRiNv9iMrFkEBLXQI7/7bcauVzu5tbVYQWA5DukQ7cD+w4aaJDGSs84JM02Dxs6ZOmyFbRYIO0Dhx81zqiRQazZTCsONEW0es3nNAs9KyLMYVvTELEhedZq/CZNHB+/YRPHVQssCeO8LsnOMZ47/+OK5ctYtggAAoYP/0Pv3itXxZLwrb7eYrXaRutfy83NExkxUcxCNto4ZhGJCMkyiBKZomOIWaC5CWlZBAB0PcHMwZVKeK8vRA8Vp0LoNf2UsDoYer3o2Hc0FOk8OY3P7eRRNxiyrFYb9YAmEyuXyzUavx9OnCRWsbLyBk29nTmbPW7saJXKp6KycvOWVKHFFqoGicqFdUah73AY6bTffEdyylZaZGlI/8LDZu7dd4CGJ6KiFM/XSnNOjdcRe/fuVVxczLJFXoEMCSy1Wo00ihE5dofKzSiVQo0gMpG2fSdrLhLu1GhecZ5w7Nq9NyZ6rhfDsFAkLMEkJafMmbsgJnpueNjM7BwjvYXikhJftZoEIHp9SFBgAI1ZiDGmSei2qbM0FCAIqyHUgLzsAZ+cgnPXIXUC3KiHVachajAM6AVzMu0bxIxQ0Zl+8JFUiGPX9rMDs9PkWc4wIEJjSyoy9KPLhT/LZbI3Xx/3923f5F8syMw85t9f58UwJL1NB/yXiQnCCFSKXC4XpsylqZYOk+8QVRnJwyCsrdCqFYk7IiKj1Cqf2R9EHDiYQY2DNAnaeL5DLu+q1WpI6FhaWmq12fT64Ia6UzrrCoVpxIjhIpkgiQ/JHqf4DpKBXxu7yqHtIsX/bd+kRc2OFAril8mb1WrV62PHWG02MnHRMLu0tFQul7t1dYOnhIZ5JN2QXSKOXCbusm97yCDRCH5KGOULZ4obq56AoxJM6gQoKIes/zxSVWkkgeIkhGNJWiKl0+T0ae+TGU6tVr315hvEWQiLiaIwXOQ7aG6L8WKkvrKhszpAvkNU69Zq/dIzDl0suBQUGEBWf+j1IURHggIDSEObTOzj+kNhvgMA9PrgTYnJQv2WOgvpkj7SB4yyuyBC0Wg1fkL5YBixEwkcEeCMRGl2jpFlzaK6j1SdSYaI+g6SM0pKTiHpG5HocNU3ZXKZ81zrk/gOsp/ENWYOph+0S0Ctze4aens4DnakDsJPCR6yp+87pM88LZHabHdWr/m8hufJxJCdY6zheTLDXcjPB4AanrfcttCeEmqQ1EFYbltoffcZ8R10NOv1IVu2pBKv4cUwarWKmIKLBZcAYOAAf2f8Uof6LZrSSe3WYR9QpYicFb5k2XK6h6RLHz0gzBk9QZW0BaJDvFVh4ZWIyCgae9fXWwyG03p9yFPMmzbiO8ii0ls2iDoCRdX2pajnf32oET3c4UZ9s3xHdzfo4gqcBZ46DQXXMlkXGkHT6jsAfLRoCQkqDYaspctWkNWiTfoOrooDAMaLebo365Q6y8AB/gbD6cyjx8ggJlO9ycSmZxyKmh3Z4mmwiuNKSkppLlqEQ/0GwRIS6ZTOskVWq1XUBwyjTIiPS9v+nTR4eXvShHb1SsuBgxlnzmbrdP12pG0ThngkAfznwQPlcrlDpaYrqRUKD9HSOOf5DiIWWRFw5z6cvGYvsggTH59lAQAcmWFfgV5eB4nGBn3H5UoY0OthfbekBib3tZeBG4pZoNG1IU+OKH1Gqo2kkYXrvsjSAUbZfeWqWLJAgWRD+uteTU7ZWlxc4tB3+Pv3z83No8WHoKARNEvaSPK7obUhrYLLgwcPnJouagjhLTX5KgddeJuecYhUYUjMQt5nmfzuOxfy88kLSJlHjx0/cYocTxeACduO9miTWdicXGN19U0SsDCMckTA8JYtRb9WXN7R/3tdxS2YdgCeN0QLQ55tWjBKW9l3tPjFG09PRZO50rKysmFDh3BVHHmJQ6fr5+buRgyeTtePeMLQqVP0+uB1cfEkQSutnDU/NAgcEQAIgrSN70Ck/Lfi5sve3dF3oO94xnwH/u8fp/P7g9+t1jvYDki75e7de507uz7uWagdTqdrVxlfV4/tgLRbamrru7k/9lsOqB1OR9HN7f7vDyqqaqw2/MelSLtzHFXV/N2791rw9U74/SxOp3Nn1x5KBV9nqb5Z5+JS30G/Fw7gufteuGvFz8v3wr3s3ZICIuZKEQRpCRizIAiC2oEgCGoHgiCoHQiCoHYgCIKgdiAIgtqBIAhqB4IgqB0IgqB2IAiCoHYgCILagSBIW/I/E7gJk6HthWUAAAAASUVORK5CYII=",q="/sealdice-manual-next/assets/qsign-config.C7X6Y-jY.png",f="/sealdice-manual-next/assets/gocq-folder.BqYrXyGR.png",v="/sealdice-manual-next/assets/gocq-warn1.DnQT2Y8j.png",S="/sealdice-manual-next/assets/gocq-warn2.Be6mD1Aa.png",C="/sealdice-manual-next/assets/gocq-step1.pboT6Yxb.png",Q="/sealdice-manual-next/assets/gocq-step2.-UlYTUsA.png",B="/sealdice-manual-next/assets/gocq-success.DvcHSdvM.png",x="/sealdice-manual-next/assets/onebot11.hPU3-IW2.png",P="/sealdice-manual-next/assets/onebot11-success.B8KhG_3g.png",w="/sealdice-manual-next/assets/platform-qq-shamrock-1.DJ7tSnjn.png",L="/sealdice-manual-next/assets/platform-qq-shamrock-2.BojvCHzi.png",I="/sealdice-manual-next/assets/platform-qq-shamrock-3.BlEqBGNz.png",R="/sealdice-manual-next/assets/platform-qq-shamrock-4.FmFC-9a8.png",y="/sealdice-manual-next/assets/platform-qq-shamrock-5.BMm24yfS.png",E="/sealdice-manual-next/assets/platform-qq-shamrock-6.Bf1yZXSr.png",z="/sealdice-manual-next/assets/platform-qq-shamrock-7.DfAmZJ9X.png",W="/sealdice-manual-next/assets/platform-qq-shamrock-8.BJqlFaWq.png",Y="/sealdice-manual-next/assets/platform-qq-shamrock-9.CRgE7lL1.png",K="/sealdice-manual-next/assets/image-016.McE9_BqK.png",F="/sealdice-manual-next/assets/image-017.h2f0ACoz.png",O="/sealdice-manual-next/assets/image-018.DTqSvbQG.png",aa=JSON.parse('{"title":"其它归档内容","description":"","frontmatter":{"lang":"zh-cn","title":"其它归档内容"},"headers":[],"relativePath":"archive/archive-other.md","filePath":"archive/archive-other.md","lastUpdated":1728702230000}'),X={name:"archive/archive-other.md"},Z={class:"warning custom-block"},G={class:"custom-block-title"},U={class:"warning custom-block"},M={class:"custom-block-title"},T={id:"shamrock",tabindex:"-1"},N={id:"shamrock-lspatch",tabindex:"-1"};function D(H,o,V,J,j,_){const l=c("Badge"),r=c("PluginTabsTab"),n=c("PluginTabs");return h(),d("div",null,[o[16]||(o[16]=a("h1",{id:"其它归档内容",tabindex:"-1"},[t("其它归档内容 "),a("a",{class:"header-anchor",href:"#其它归档内容","aria-label":'Permalink to "其它归档内容"'},"​")],-1)),o[17]||(o[17]=a("h2",{id:"go-cqhttp-mirai",tabindex:"-1"},[t("Go-cqhttp / Mirai "),a("a",{class:"header-anchor",href:"#go-cqhttp-mirai","aria-label":'Permalink to "Go-cqhttp / Mirai"'},"​")],-1)),a("div",Z,[a("p",G,[o[0]||(o[0]=t("注意:海豹已于 ")),e(l,{type:"warning",text:"v1.4.5"}),o[1]||(o[1]=t(" 版本弃用此方案,以下内容归档于 2024 年 5 月 7 日。"))])]),o[18]||(o[18]=i('

    危险:此方案已经接近不可用

    由于 QQ 官方的检测,使用 Go-cqhttp 方案成功连接的成功率已经越来越低。即使成功连接,也可能面临高达每月 2 次的频繁冻结等情况。

    我们不推荐任何用户再使用此方案连接 QQ 平台。

    危险:Go-cqhttp 已停止维护

    Go-cqhttp 的开发者已无力维护项目(见 go-cqhttp/issue#2471)。在未来 qsign 签名服务彻底被官方封死之后,Go-cqhttp 将无法继续使用。

    使用签名服务

    危险:qsign 已停止维护

    原 qsign 作者已因「不可抗力」无法再维护此项目,对应原代码仓库也已删除,该方法会在未来逐渐失效,请做好预期准备。

    部署签名服务,即使用开源签名服务 qsign,是目前用来绕过检测的最有效手段。

    怎么使用签名服务?

    你可以自己在本地搭一个 qsign 服务,也可以使用别人搭好的。

    注意:自行搭建签名服务

    如果你的动手能力足够强或者有足够的电脑知识,强烈推荐 自己搭建本地签名服务器。

    使用他人的签名服务可能会泄漏以下信息 (截取自 qsign 的说明)

    • 登录账号
    • 登录时间
    • 登录后发送的消息内容
    • 登录后发送消息的群号/好友 ID

    不会泄露的信息:

    • 账号密码
    • 账号 session
    • 群列表/好友列表
    • 接收的消息
    • 除发送消息外的任何历史记录

    使用共享签名服务可能会提高账号被封禁的概率。

    在登录账号的时候会看到这样一个界面:

    海豹的 qq 登录页

    点击下面的「签名服务」一栏的「简易配置」,可以看到如下配置项:

    配置签名服务
    • 服务 URL:你要链接的 qsign URL
    • 服务 key:密码
    • 服务鉴权:默认为空,如果有的服务器要求特定的鉴权,就填上吧

    提示:默认的 qsign 配置

    没有特殊设置的话,qsign 的 URL 通常默认为 http://localhost:13579,key 通常默认为 114514

    如何搭建签名服务

    提示:有能力的用户可以自行搭建服务。

    注意

    由于项目的特殊性,下面的方法随时可能失效,我们不对信息的及时性做任何保证。可以加入海豹官方群寻求帮助。

    ',17)),e(n,{sharedStateKey:"os"},{default:s(()=>[e(r,{label:"Windows"},{default:s(()=>o[2]||(o[2]=[a("p",null,[t("可以尝试使用 "),a("a",{href:"https://github.com/rhwong/unidbg-fetch-qsign-onekey",target:"_blank",rel:"noreferrer"},"一键 qsign"),t("。")],-1),a("p",null,"引用自说明:",-1),a("blockquote",null,[a("p",null,[t("点开以后删掉文件夹里的 "),a("code",null,"go-cqhttp.bat"),t(" 及 "),a("code",null,"go-cqhttp_windows_386.exe"),t(",然后运行里面的 "),a("code",null,"Start_Qsign.bat"),t(" 启动 qsign,按照提示依次键入 "),a("code",null,"txlib_version"),t(" 参数、设定 "),a("code",null,"host"),t("、"),a("code",null,"port"),t("、"),a("code",null,"key"),t("的值。(如果不知道这些是干什么的,请直接依次按下 Enter)")])],-1)])),_:1}),e(r,{label:"Linux"},{default:s(()=>o[3]||(o[3]=[a("p",null,[t("参阅 qsign 提供的完整教程,看 "),a("a",{href:"https://github.com/fuqiuluo/unidbg-fetch-qsign/wiki/%E9%83%A8%E7%BD%B2%E5%9C%A8Linux",target:"_blank",rel:"noreferrer"},"这里"),t("。")],-1)])),_:1}),e(r,{label:"macOS"},{default:s(()=>o[4]||(o[4]=[a("p",null,[t("可以尝试使用 "),a("a",{href:"https://github.com/Verplitic/AutoQSignForMac",target:"_blank",rel:"noreferrer"},"AutoQSignForMac"),t("。")],-1),a("p",null,[t("在终端运行 "),a("code",null,"start.sh"),t(" 即可配置和启动签名服务器。如果提示 "),a("code",null,"zsh: access denied"),t(",需要先运行 "),a("code",null,"chmod -x start.sh"),t(" 来给予权限。")],-1),a("p",null,"初次启动会选择 txlib 版本,及运行 QSign 的主机、端口和 API Key。通常情况下,可以回车跳过而使用默认配置。",-1)])),_:1})]),_:1}),o[19]||(o[19]=i('

    手动抓取 ticket

    目前,Gocq 的过验证码网站已经停止服务,你需要自行抓取 ticket 进行登录。

    步骤如下:

    前置工作

    启动海豹,打开海豹的管理 ui,账号设置,添加账号;

    账号类型选 QQ 账号,设备选「Android Pad-可共存」(此协议登录手机可同时在线,qsign 仅 Android 协议和 Android Pad 协议可用):

    添加账号

    版本选择 8.9.70(如果你的 qsign 是其它版本,请选择对应版本):

    选择 qsign 版本

    填写 QQ 账号密码:

    填写 QQ 账号密码

    选择简易配置:

    选择简易配置

    服务 URL 填你的 qsign 服务地址。

    服务 key 填你的 qsign 服务密码,没有可以不填。

    服务鉴权不填写。

    服务鉴权

    接着点击登录,然后退出海豹(结束进程)。

    分离部署登录流程

    1. go-cqhttp\\go-cqhttp.exe 文件复制到 海豹目录/data/default/extra/gocqQQ号(你登录骰娘的qq号) 这个文件夹下。

      文件夹结构

    2. 双击运行 go-cqhttp.exe,两次确认后出现 go-cqhttp.bat 文件。

      运行警告 1 运行警告 2

    3. 双击运行 go-cqhttp.bat,出现以下消息后输入 2,回车,复制链接到浏览器(终端选中后右键即可复制粘贴,没有选项)。

      运行

      提示:出现 open image cache db failed

      出现该报错的原因很可能是因为 gocq 的缓存数据库损坏,可以尝试删除 gocq 的 data 目录后重新运行 gocq。(注意是 gocq 的 data 而不是海豹的!)

    4. 按照 手动抓取 ticket 教程 - 哔哩哔哩 视频教程操作,成功滑条后(需要抓 ticket,不只是滑条)复制 ticket 到终端后回车。

      滑块 ticket 输入

    5. 如果登录成功,你应当能看到一条类似于 2022-05-06 20:00:00 [INFO] 登录成功,欢迎使用:XXX 的日志。

      登录成功

      同时你应当在下方看到一条类似于 2022-05-06 20:00:00 [INFO] CQ Websocket 服务器已启动:[::]:8080 的日志。

      结尾的 8080 即为 gocq 的 ws 端口。你的端口号可能不同,总之请记住这个端口号。

    6. 打开海豹,删除之前添加的账号,然后重新添加账号,选择 QQ(OneBot11 分离部署)

      添加账号

      在连接地址中填写 ws://localhost:8080(请把8080替换为你的 gocq 端口号)。填写完成后点击下一步。

    7. 你的账号应当已经成功连接。

      连接成功

    GoCqhttp FAQ

    1. 出现 Code 1

    1. 账号密码错误,输入正确的账号密码。

    2. QSign 闪退

    1. 确认没有启动多个 qsign(多个 qsign 需要端口不重复);
    2. 确认端口没有重复。若重复,请重新配置 qsign,修改 port;
    3. 将 qsign 文件夹放到硬盘根目录试试(如 D 盘、C 盘)。

    3. 出现 Code 45

    1. 没连上 qsign,重启 qsign,重新登录;
    2. QSign 协议版本和 gocq 协议版本没对应,切换对应协议后重新登录;
    3. 该版本 qsign 已失效,升级版本。

    4. 出现 Code 235

    1. Ticket 复制错误(多复制了 "" 或少复制了内容),重新登录;
    2. 更换网络进行滑条,如电脑连手机热点,复制链接发给手机滑条,换台电脑等;
    3. 登录频繁,过段时间重新尝试登录(时间不确定)。

    5. 出现 Code 237

    1. 登录过于频繁,请等待一段时间继续;
    2. 内置的 ticket 抓取工具失效,需要手动抓取;
    3. 让他人帮助你滑条。

    5. 如何启动多个 qsign?(仅当需要备用签名或不同协议版本的时候有此需求)

    解压一个新的 qsign 文件,重新配置,端口需要输入不同于前面的端口。

    6. 什么是 go-cqhttp?(通常简称 gocq)

    登录 QQ 的程序,现各大骰系都用此程序,此外还有 mirai 等其他程序。

    7. 什么是签名?

    • 手机 QQ 有内置的签名程序,可以不太准确的简单理解为会生成一些密码发给腾讯,让它识别是不是人;
    • qsign 把手机 QQ 的签名程序偷了出来,提供了让我们自己生成密码的功能;
    • gocq 在配置后可以对接 qsign,那样骰子也可以证明自己是正常人了。

    8. 对于 SignServer(即 Start_Qsign.bat,俗称签名服务器)崩溃闪退可能的一种情况

    通常 SignServer 都不会出现用户可直接读出的报错信息。如果出现了崩溃或闪退的情况,可以同时按下键盘上 Ctrl Alt Delete 这三个按键,找到任务管理器,在右上角的内存一栏,那里会出现数字,有些调过设置了的会出现占用的运行内存占可用运行内存的百分比。

    很显然,这里的内存就是指电脑 CPU 的可用运行内存不足,这时候通过在任务管理器关闭部分没有在使用的进程就可以解决。

    注意:进程不能轻易关闭

    通常情况下,Windows 系统会运行一些进程以保证系统的正常运行。这些进程一旦关闭,系统可能会出现无法运行的问题。

    在一般情况下,不推荐关闭这些进程。如果需要通过关闭进程来腾出运行内存,可以选择关闭其他应用程序运行的进程。

    当然,关闭应用进程跟直接退出应用程序差别不大。对于在看这个界面的你来说,关闭应用程序是更好的选择。

    Chronocat Red 协议

    ',42)),a("div",U,[a("p",M,[o[5]||(o[5]=t("注意:海豹已于 ")),e(l,{type:"warning",text:"v1.4.5"}),o[6]||(o[6]=t(" 版本弃用此方案,以下内容归档于 2024 年 5 月 7 日。"))])]),o[20]||(o[20]=a("div",{class:"danger custom-block"},[a("p",{class:"custom-block-title"},"危险:支持 Chronocat 为 0.0.54"),a("p",null,"海豹 Red 协议所适配的目标 Chronocat 版本为 0.0.54,低于该版本(主要为 0.0.52)缺少必要接口,使用时会出现报错,不建议使用。")],-1)),o[21]||(o[21]=a("p",null,"在账号添加中,选择「QQ Red 协议」,填写相应信息进行连接。",-1)),a("h2",T,[o[7]||(o[7]=t("Shamrock ")),e(l,{type:"tip",text:"v1.4.2"}),o[8]||(o[8]=t()),o[9]||(o[9]=a("a",{class:"header-anchor",href:"#shamrock","aria-label":'Permalink to "Shamrock "'},"​",-1))]),o[22]||(o[22]=a("div",{class:"warning custom-block"},[a("p",{class:"custom-block-title"},"注意:已发现 QQ 客户端针对 Shamrock 增加了检测机制。在新版 QQ 客户端上,Shamrock 已无法使用。以下内容归档于 2024 年 7 月 17 日。")],-1)),a("p",null,[o[10]||(o[10]=t("海豹从 ")),e(l,{type:"tip",text:"v1.4.2"}),o[11]||(o[11]=t(" 开始适配了 Shamrock 的连接。"))]),o[23]||(o[23]=i('

    危险:Shamrock 已停止更新

    Shamrock 已于 2024 年 4 月 20 日归档,将不再进行更新。

    危险:1.1.0 及以上版本的 Shamrock 不适用以下教程

    2024 年 4 月 2 日,OpenShamrock 开发组于 Discussion#272 宣布,Shamrock 将会从 1.1.0 版本起弃用 OneBot V11 支持,迁移至新的 Kritor 协议。

    这意味着 1.1.0 及之后版本的 Shamrock 将不再支持 OneBot V11,以下教程也不再适用。请仔细分辨,以免造成麻烦。

    海豹开发组也正在着手对新的 Kritor 协议进行适配,请耐心等待。

    注意:有难度的操作

    此方式存在一定难度,你可能需要对 Root,使用命令行程序等有所了解。

    Shamrock

    Shamrock 是一个基于 LSPosed/Xposed 框架,实现劫持 QQ 以对外暴露 Onebot API 的软件。你可以在 Android 手机/模拟器中使用 Shamrock 代替已经停止开发的 gocq。

    遗憾的是,Shamrock 的使用依赖于 Android 的 root 权限,而手机厂商对 root 管控愈加严格,实体手机获取 root 权限的门槛很高,而模拟器中使用 Shamrock 的效果也不是很可观。因此,这种解决方案适合个人与朋友使用骰子的场景。

    此外,如果你想使用 Shamrock 代替 gocq,请确保你有良好的计算机使用能力。

    本节主要讲解如何使用模拟器实现 Shamrock,如果你有一台已经 root 的手机,也可以参考本节内容,本教程不涉及说明如何 root 手机,海豹官方也不对 root 手机造成的后果负责,请自行斟酌。

    提示:如何 Root 手机

    Root 手机可以参阅 小米手机安装面具教程。也可以前往 酷安 寻找更详细的教程。

    注意:低配置设备可能无法使用 Shamrock!

    在尝试通过模拟器使用 Shamrock 的场景下,由于模拟器对性能要求较高,包括 轻量级服务器、旧电脑、小主机等配置较低的设备可能无法支持使用。

    准备模拟器

    下面将使用 夜神模拟器 作为示例。

    使用时,确保安卓版本在安卓 8 以上,而在安卓 11 以下,最好使用安卓 9。

    获取 Root 权限

    Magisk

    Magisk(面具)是一套开源的 Android 自定义工具,通常用于获取 root 权限。

    Root 即 Android 的超级用户权限,如对 QQ 应用进行注入等的危险操作需要 root 权限。

    在使用之前,请在模拟器设置中打开 root 选项,软件中获取的一切权限都给予 通过,包括 root 权限

    使用 面具安装工具,把它安装到模拟器。

    然后启动软件,输入 m 回车,再输入 y 回车,会索取超级用户权限,给予,然后输入 1 回车,再输入 a 回车,输入 1 回车,此时面具就安装到你的模拟器上了。

    打开面具模块,此时面具会索取超级用户权限,给予,此时你会发现你的超级用户权限那里是灰的,关闭你的超级用户权限,重新启动你的模拟器。

    此时你会发现你的超级用户模块已经激活。在面具的设置里启动 zygisk 模块,随后你需要再次重启模拟器,使得 zygisk 模块生效。

    启用 zygisk

    安装 LSPosed 模块

    提示:使用 xposed/edxposed

    理论上,使用更为老旧的 xposed/edxposed 或在手机上运行虚拟机的 virtualXposed 的方案也是可行的,但我们不推荐也未尝试过使用它们。

    任何不按教程的行动请自行处理疑难问题,海豹官方不对此提供帮助。

    请于 LSPosed Releases 页下载模块。

    注意:zygisk

    务必选择以 zygisk 结尾的包。

    下载完成后,把文件上传到模拟器中。一般情况下,直接把文件拖动到模拟器就可以传文件了,且文件一般在 picture 文件夹中,如果没有请参照你使用的模拟器说明。

    在你传完文件之后,在最右侧切换到「模块」页后,你可以看到从本地安装的选项。单击你刚刚传到模拟器里的文件,等待安装完成即可,随后你可以在右下角看到重启按钮,点击等待重启。

    安装完成后应该如下所示:

    完成 LSPosed 模块安装

    安装 Shamrock

    请于 Shamrock Releases 下载 Shamrock 的 apk 安装包,直接将 apk 文件拖动到模拟器即可进行安装。

    如果模拟器中没有安装 QQ,此时你还需要将 QQ 安装到模拟器中。

    安装完成后,首先启动 Shamrock。在通知上,你可以打开 LSPosed 的页面,在模块一栏中启用 Shamrock

    启用 Shamrock

    选中 Shamrock,进入勾选 QQ,并长按 QQ 选择 强行停止

    Shamrock 中勾选 QQ

    随后再打开 QQ,你可以看到「加载 Shamrock 库成功」的提示,这代表 Shamrock 已经成功注入了 QQ。

    成功注入后,打开 Shamrock 启用 ws 服务,通常情况下无需修改 Shamrock 的任何内容,如有其它需求请阅读 Shamrock 文档

    Shamrock 启用 ws

    开放模拟器端口供海豹对接

    首先下载 adb 工具,解压到电脑中任何可用的位置。

    随后找到模拟器供 adb 连接的端口,夜神模拟器路径示例如下:

    夜神模拟器 adb 端口

    其中:

    • Nox 是模拟器根路径。
    • Nox_4 是模拟器的编号,你可以在多开助手中看到你的编号。
    • 选中的文件就是要找的文件,在 vscode 中(或者其它文本编辑器)中打开。

    打开

    guestport 值为 5555hostport 即为所需端口,如示例中就是 62028,记住这个端口号。

    在你解压的 platform-tools 里打开终端,或者把 platform-tools 加入环境变量后再启用终端。也可以在 platform-tools 里新建一个 .bat 文件,把下面的命令写到文件里面。

    在打开的终端中输入命令:

    cmd
    .\\adb connect 127.0.0.1:端口

    如替换为上面示例中的 62828:

    cmd
    .\\adb connect 127.0.0.1:62028

    随后再执行:

    cmd
    .\\adb forward tcp:5800 tcp:5800

    此时你已经成功开启端口了。

    执行 adb 命令

    连接海豹

    在账号添加中,选择「QQ(onebot11正向WS)」,按照下面的格式进行填写:

    连接 Shamrock

    成功连接后即可使用。

    ',56)),a("h2",N,[o[12]||(o[12]=t("Shamrock LSPatch ")),e(l,{type:"tip",text:"v1.4.2"}),o[13]||(o[13]=t()),o[14]||(o[14]=a("a",{class:"header-anchor",href:"#shamrock-lspatch","aria-label":'Permalink to "Shamrock LSPatch "'},"​",-1))]),o[24]||(o[24]=i('

    注意:已发现 QQ 客户端针对 Shamrock 增加了检测机制。在新版 QQ 客户端上,Shamrock 已无法使用。以下内容归档于 2024 年 7 月 17 日。

    注意:有难度的操作

    此方式存在一定难度,你可能需要对使用命令行程序有所了解。

    注意:Andriod 版本要求

    由于 LSPatch 要求安卓版本 9.0 以上,因此你的安卓手机版本必须超过安卓 9。

    LSPatch

    LSPatch 是在无 root 环境下使用 Shamrock 的一种途径,原理是利用 Shizuku 安装经 LSPatch 修补后的 QQ,再使用 Shamrock 劫持 QQ 并对外开放 API。

    安装 Shizuku

    Shizuku

    Shizuku 是一个帮助其他应用直接使用系统 API 的应用,而 Shizuku 本身则需要通过电脑使用 adb 工具赋予权限。

    Adb 即 Android 调试桥,是安卓官方提供的帮助在电脑端调试 Android 设备的命令行工具。

    首先需要在你的手机安装 Shizuku,安装后需要在电脑中使用 adb 命令为其赋予权限。

    ',7)),e(n,null,{default:s(()=>[e(r,{label:"Windows"},{default:s(()=>o[15]||(o[15]=[a("p",null,[a("strong",null,"在 Windows 中使用 cmd 执行 adb 命令:")],-1),a("ol",null,[a("li",null,[t("安装 adb,工具下载见 "),a("a",{href:"#开放模拟器端口供海豹对接"},"上文"),t(";")]),a("li",null,[t("打开 cmd 窗口; "),a("ul",null,[a("li",null,[t("如果你的电脑是 Window 11 操作系统,你可以直接右键 "),a("code",null,"platform-tools"),t(" 文件夹单击 "),a("strong",null,"在此处打开命令行"),t(";")]),a("li",null,"其它版本的打开方式请自行搜索。")])]),a("li",null,"你有多种方式使用 adb:")],-1),a("ul",null,[a("li",null,[t("将 adb 添加至系统环境变量,在系统开始一栏中可以直接搜索到该功能,随后将 "),a("strong",null,"解压好的"),t(),a("code",null,"platform-tools"),t(" 路径填入至系统变量中的 "),a("code",null,"path"),t(",例如,adb 在 "),a("code",null,"E:/shamrock achieve/platform-tools"),t(" 文件夹中,那么你只需要将该路径填入 "),a("code",null,"path"),t(" 即可。 "),a("img",{src:K,alt:"adb path"}),a("ul",null,[a("li",null,[t("如果你是旧版本 Window(如 Win 7),系统未提供对应的 GUI,你需要使用 "),a("strong",null,[a("code",null,";")]),t(" 隔开不同的路径。")])])]),a("li",null,[t("也可以选择使用 "),a("code",null,"cd"),t(" 命令切换至 adb 目录,使用此方法请将 adb 放在 C 盘;(由于 Windows 权限问题,使用运行开启的 cmd 实例无法访问 C 盘之外的路径。) "),a("ul",null,[a("li",null,[a("code",null,"win + R"),t(" 键启动「运行」;")]),a("li",null,[t("在运行中输入 "),a("code",null,"cmd"),t(" 并回车;")]),a("li",null,[t("在打开的黑框框中输入命令 "),a("code",null,"cd <替换为对应路径>"),t("。 "),a("img",{src:F,alt:"切换到 adb 文件夹"})])])]),a("li",null,[t("还可以选择在 "),a("code",null,"platform-tools"),t(" 文件夹中新建"),a("code",null,".bat"),t(" 文件。")])],-1)])),_:1})]),_:1}),o[25]||(o[25]=i('

    在手机中,你需要开启 USB 调试 ,在手机设置中,选择「更多设置—关于手机」,多次点击软件版本号,即可进入开发者模式。

    随后在「更多设置—开发者选项」中打开 USB 调试,使用数据线连接电脑和手机,随后在你的手机中出现指纹调试弹框,给予通过。

    在电脑中使用命令:

    cmd
    adb shell sh /storage/emulated/0/Android/data/moe.shizuku.privileged.api/start.sh

    为 Shizuku 赋予 adb 权限

    安装 LSPatch

    LSPatch

    LSPatch 可以在无 root 环境使用 LSPosed 框架。

    可以参看 LSPatch 使用教程 了解更多。

    1. 你需要在 Shizuku 中启用 LSPatch,并重启 Shizuku。
    2. 在管理中,单击加号,选择已经下载的 QQ apk 文件,选择本地修补,等待一会,然后就可以安装了。

    安装并激活 Shamrock

    安装方式 上文 有提及,此处不予重复。

    在 LSPatch 中,长按修补后的 QQ 出现模块作用域,允许 Shamrock 然后重启 LSPatch。

    激活 Shamrock 模块有三个前提,即 QQ 进程,Shamrock 进程和 LSPatch 进程存活,请自行配置保活策略,例如允许自启动,允许后台存活和关闭后台高耗电等。

    对接海豹

    首先安装海豹安卓端。

    注意:确认海豹版本

    请使用版本为 1.4.2 以上的安卓端海豹。

    建议使用 反向 ws 设置。在海豹中,账号添加中选择「QQ(onebot11反向WS)」,填入骰子 QQ 号和要开放的 ws 端口(例如 :6544)。

    随后在 Shamrock 中的被动 ws 连接地址中写 ws://localhost:6544/ws

    ',17))])}const ta=p(X,[["render",D]]);export{aa as __pageData,ta as default}; diff --git a/assets/archive_archive-terms.md.dpYrRNEw.js b/assets/archive_archive-terms.md.dpYrRNEw.js new file mode 100644 index 000000000..47f28b33d --- /dev/null +++ b/assets/archive_archive-terms.md.dpYrRNEw.js @@ -0,0 +1 @@ +import{_ as e,c as r,a6 as h,o as l}from"./chunks/framework.B1keMFNq.js";const o="/sealdice-manual-next/assets/newbie_terms_windows_terminal_icon.CtB6BvsL.svg",u=JSON.parse('{"title":"名词/术语速查表","description":"","frontmatter":{"lang":"zh-cn","title":"名词/术语速查表"},"headers":[],"relativePath":"archive/archive-terms.md","filePath":"archive/archive-terms.md","lastUpdated":1728702230000}'),t={name:"archive/archive-terms.md"};function i(n,a,d,s,c,p){return l(),r("div",null,a[0]||(a[0]=[h('

    名词/术语速查表

    本节内容

    本节为计算机小白指南中的第四部分。

    本节旨在帮助先前未曾接触过计算机以及服务器,或者对计算机及服务器知之甚少的用户快速查询特定名词/术语的含义。本节不能代替权威解释或各项目的官方文档。

    关于如何正确地提问,请看 如何正确提问,关于如何快速学习相关背景知识,请看 如何高效学习;关于一些小白常见的问题,请看 计算机小白常见问题

    C

    CQ 码

    CQ 码是酷 Q(CoolQ)时代定义的一套接口语言,方便用户快速编写指定类型 QQ 消息。可以参考 这个页面 进行编写。

    D

    端口

    参见 IP 与端口

    F

    服务器

    服务器可以简单地理解为持续保持开机的电脑,即持续提供服务的机器。

    我们知道,骰子本质是在电脑上运行的程序,如果希望骰子 24 小时都可以回应我们的指令,那么就需要电脑保持开启的状态。但这样做的不稳定性非常大,如果出现例如家里突然停电了这样的情况,骰子就不能 24 小时随时回复我们的指令了,并且,这样也很费电。而服务器正是这样一种尽可能稳定运行的、不会关机的电脑,他们可能以「云电脑」这样的名字出现,但从本质上来说,这就是服务器。

    提示:服务器和个人计算机在使用上有明显差异

    相比开机激活之后马上就可以投入使用的个人计算机,服务器从运行系统上就与其稍有不同。这里以 Windows 系统的服务器和个人电脑举例。

    服务器使用的是微软特地为了服务器开发的 Windows Server 系统。顾名思义,这个系统就是专为服务器开发的,在部分设置的选项中也与个人计算机有所不同。

    正因如此,服务器一开始并不容易熟练操作。不过,这篇速查表的目的就是让屏幕前不太明白计算机相关知识的用户可以快速入门。所以,你也不必对这些问题有太大的压力。

    G

    工作目录

    工作目录是用户在使用 命令行界面 时,当前「处于」的目录。在运行程序时,程序会以工作目录作为索引目录树的起始位置。

    海豹核心要求的、和实际运行时的工作目录即为「包含 sealdice-core(.exe) 文件和 data 目录、通常还包含 lagrange 目录」的目录(文件夹)。

    海豹工作目录内的文件结构可以参考 海豹的本地文件

    H

    Headless

    参见 无头

    I

    IP 与端口

    在分离部署 QQ 后端和部署多只海豹时,你都需要正确处理 IP 与端口号。IP 与端口是互联网应用用于定位彼此的方式之一,IP 用于区分网络中的不同设备,而端口用于区分同一设备上的不同应用。打个比方,IP 就像是地址,可以定位到某个特定的房屋,而端口号是这个屋子里住户的编号,可以用于判断该联系这户人中的哪一位。在目前主流使用的 IPv4 标准下,IP 是形如 127.0.0.1192.168.0.1 的一串数字,端口号则是范围在 0-65535 的一个整数。两者组合时,通常使用 127.0.0.1:3456 的方式描述。

    通常来说,服务端应用程序会「监听」一个端口,而客户端应用程序会试图连接到此端口。例如在分离部署 QQ 后端并采用正向 WS 连接时,QQ 后端会监听你在配置中指定的端口,而海豹会试图连接到这个端口;而海豹的 WebUI 作为服务端默认绑定到 3211 端口,你的浏览器则试图连接到 3211 端口。所以,在配置分离部署的 QQ 后端时,海豹中必须填入与你的 QQ 后端配置相同的端口号。

    不同范围的 IP 地址都有与之相关的规定,而你在配置海豹的过程中最常见的是 127.0.0.1localhost。此地址一般用于指向本机,而非互联网上的其他设备。当你的海豹与 QQ 后端位于同一主机上,在海豹中需要通过此地址指向 QQ 后端。当你访问 WebUI 的设备与海豹所在的是同一主机,你也需要在浏览器地址栏填入此 IP。

    同样的,端口号也不能随意指定。一般情况下,一个端口只能被一个服务端监听使用,这就是为什么当你部署多只海豹时需要切换端口,此时默认的 3211 端口已被第一只海豹占用。而低位端口(小数字)通常有其约定,例如 80 是 HTTP 端口,443 是 HTTPS 端口等。低位端口通常已经被占用,或系统安全策略不允许随意监听此类端口。所以,建议优先选择高位端口(大数字)部署 QQ 后端及海豹。

    Issue

    Issue 更常见的含义是偏向负面的「问题」,而在开源项目领域,issue 一词更多地被翻译为中性的「议题」。

    在开源项目网站如 GitHub 的 Issues 标签页下,按默认设置,你可以看到一个开源项目的全部进行中的议题。这些议题主要包括了使用求助、Bug 反馈以及功能请求。在这里的讨论是所有人可见的,因此可以方便开发者与用户高效地共享信息。Issue 也是大部分开源项目正式的反馈渠道。

    J

    JSON

    JSON 是一种 数据序列化语言。语法入门可以参考 编写牌堆

    K

    控制台

    控制台是 终端 生成的、用于与 Shell 交互的界面。

    你可能还想了解 控制台命令行Shell命令提示符

    许多时候,终端、控制台、命令行与 Shell 或命令提示符等名词会被混用,因为在实际交互中,他们所指代的东西往往是一体的。

    L

    Lagrange

    Lagrange(拉格兰)是一个 NTQQ 协议相关的开源项目。其包括目前实现了 Linux NTQQ 协议的 Lagrange.Core,和提供 OneBot-V11 API 的 Lagrange.Onebot 两部分。

    Lagrange 可以很方便的在多个平台(Windows、Linux、Mac)部署,海豹核心可以对接其提供的 OneBot-V11 API 来提供 QQ 骰子服务。

    可以参考 连接平台 - QQ有关的部分 和 Lagrange 的官方 GitHub 页面

    Linux

    Linux 是一种基于 UNIX 操作系统设计的开源操作系统。Linux 广泛应用于服务器、嵌入式系统、超级计算机以及大多数互联网基础设施。它也可以用于桌面计算,尽管市场份额相对较小。

    Linux 的主要优点包括稳定性、安全性、低成本(大部分 Linux 发行版都是免费的)和开源性(用户可以查看和修改源代码)。

    LiteLoader

    LiteLoaderQQNT(LiteLoader)是 NTQQ 的插件加载器,允许通过插件注入 QQ 实现某些特定的功能。

    可以参考 连接平台 - QQ有关的部分 和 LiteLoader 的官方 GitHub 页面

    Log

    参见 日志

    M

    命令行

    命令行是 控制台 中,你实际输入命令的位置。通常,命令行行首会有 $#> 等符号,它们是 Shell 生成的提示符 (Prompt),用于提示用户 Shell 正在等待用户输入命令。

    你可能还想了解 终端控制台Shell命令提示符

    许多时候,终端、控制台、命令行与 Shell 或命令提示符等名词会被混用,因为在实际交互中,他们所指代的东西往往是一体的。

    命令行界面

    命令行界面即基于 命令行 的用户界面。在此界面下,用户通常使用输入指令的方式与操作系统或程序进行交互。

    命令提示符

    命令提示符(cmd.exe)是 Windows 平台下,在上个世代常用,在如今(由于 Windows 过于完善兼容性)也经常被使用到的一种 Shell

    命令提示符本身集成了 控制台,但由于其过于古老,具有诸多弊端。例如,当你用鼠标选中控制台内的文本时,正在运行的程序会被暂停。

    因此,强烈建议你使用 Windows 终端 打开程序。在较新的 Windows 系统上,命令提示符默认使用 Windows 终端打开。

    你可能还想了解 终端控制台命令行Shell

    许多时候,终端、控制台、命令行与 Shell 或命令提示符等名词会被混用,因为在实际交互中,他们所指代的东西往往是一体的。

    N

    NapCatQQ

    NapCatQQ 是基于 PC NTQQ 本体实现一套 无头 Bot 框架。

    可以参考 连接平台 - QQ有关的部分 和 NapCatQQ 的官方 GitHub 页面

    NTQQ

    NTQQ/QQNT 是腾讯公司基于 NT 内核,重新设计了用户界面的 QQ 客户端。腾讯官方称之为「QQ 9」。因此,如果发现自己使用的 QQ 不能正确加载 LiteLoader 等插件,请先检查 QQ 版本号是否大于 9。

    Q

    QQNT

    参见 NTQQ

    R

    日志

    在计算机领域中,日志通常指程序在运行时生成的一系列记录。这些记录通常反映了程序的运行状态,同时一般包含时间信息以方便定位对应的事件。在程序运行发生故障或不符合预期的行为时,日志中通常也会有所反映。日志通常分为信息(Info)、注意(Warning)和错误(Error)等不同的等级,而后两者就对应了上述的程序问题。

    海豹的日志通常可以在三个地方找到:

    • WebUI 的「日志」导航栏,也即默认页面下。
    • 运行着海豹核心的 控制台
    • 海豹 工作目录 下, data/main.logdata/default/record.log 文件内。

    S

    数据序列化语言

    程序运行中使用的数据,通常以特定的数据结构存储在内存之中。为了更方便地对数据进行存储、传输与重建,数据序列化语言被发明出来。这类语言通过特定的语法描述了数据之间的关系,并以文本的方式存储或传输。程序可以从这类语言中方便地恢复原有的数据结构。

    常见的数据序列化语言包括 JSONYAMLTOML等。

    Shell

    我们日常使用的程序通常使用图形用户界面(GUI)与我们交互,即基于图形渲染和鼠标点击、拖拽的交互方式。而在编程领域和更古早的时期,命令行界面(CLI)则更为常用。在使用 CLI 时,我们第一个打开的程序通常就是 Shell。

    Shell 是一个特殊的命令行界面程序,它给用户提供了通过输入命令与操作系统进行交互的交互方式。它会解析并执行用户输入的命令。

    在类 Unix 系统中存在众多的 Shell,例如 Ubuntu 系统默认使用 Bash 而 macOS 默认使用 Zsh。Windows 系统推荐使用 PowerShell,而 命令提示符 也是一种 Shell。

    你可能还想了解 终端控制台命令行

    许多时候,终端、控制台、命令行、Shell 与命令提示符等名词会被混用,因为在实际交互中,他们所指代的东西往往是一体的。

    T

    TOML

    TOML 是一种 数据序列化语言。语法入门可以参考 编写牌堆

    W

    无头

    在计算机领域,无头(headless)通常指通过不生成图形化用户界面方式运行(原本有图形化用户界面的)程序。

    WebUI

    UI 即「用户界面(User Interface)」,通常指用户与程序发生交互的位置。而 WebUI 顾名思义,就是通过网络生成、交互的用户界面。

    在海豹的相关语境下,WebUI 指骰主能通过浏览器访问到的管理后台。海豹默认的 WebUI 监听 端口 为 3211,因此当你通过 3211 端口访问海豹的管理后台时,实质上就是在与海豹的 WebUI 交互。

    Windows Terminal

    参见 Windows 终端

    Windows 终端

    Windows Terminal icon

    Windows 终端是一个为命令行用户准备的全新的、现代的、功能丰富的生产力 终端。它包含了 Windows 命令行社区经常希望加入的新功能,例如标签页、富文本、全球化、可配置性和主题与风格化等等。

    如果你在 Windows「开始菜单」的搜素功能中,输入「终端」后并没有出现如上所示的图标。那么强烈建议你下载并安装 Windows 终端,而不是继续使用 命令提示符 集成的 控制台

    如果你发现你在启动海豹核心、LagrangeNapCatQQ 等程序时,弹出窗口的字体与风格都不属于 Windows 终端,那么强烈建议你在 Windows 终端中手动启动这些程序。

    Y

    YAML

    YAML 是一种 数据序列化语言。语法入门可以参考 编写牌堆

    Z

    终端

    终端(Terminal)是一个特殊的程序,它提供了一种访问 Shell 的方式,也可以视为 Shell 的一层包装。现代的终端通常会生成一个窗口——即 控制台 用于交互。

    你可能还想了解 命令行Shell命令提示符

    许多时候,终端、控制台、命令行与 Shell 或命令提示符等名词会被混用,因为在实际交互中,他们所指代的东西往往是一体的。

    ',112)]))}const q=e(t,[["render",i]]);export{u as __pageData,q as default}; diff --git a/assets/archive_archive-terms.md.dpYrRNEw.lean.js b/assets/archive_archive-terms.md.dpYrRNEw.lean.js new file mode 100644 index 000000000..47f28b33d --- /dev/null +++ b/assets/archive_archive-terms.md.dpYrRNEw.lean.js @@ -0,0 +1 @@ +import{_ as e,c as r,a6 as h,o as l}from"./chunks/framework.B1keMFNq.js";const o="/sealdice-manual-next/assets/newbie_terms_windows_terminal_icon.CtB6BvsL.svg",u=JSON.parse('{"title":"名词/术语速查表","description":"","frontmatter":{"lang":"zh-cn","title":"名词/术语速查表"},"headers":[],"relativePath":"archive/archive-terms.md","filePath":"archive/archive-terms.md","lastUpdated":1728702230000}'),t={name:"archive/archive-terms.md"};function i(n,a,d,s,c,p){return l(),r("div",null,a[0]||(a[0]=[h('

    名词/术语速查表

    本节内容

    本节为计算机小白指南中的第四部分。

    本节旨在帮助先前未曾接触过计算机以及服务器,或者对计算机及服务器知之甚少的用户快速查询特定名词/术语的含义。本节不能代替权威解释或各项目的官方文档。

    关于如何正确地提问,请看 如何正确提问,关于如何快速学习相关背景知识,请看 如何高效学习;关于一些小白常见的问题,请看 计算机小白常见问题

    C

    CQ 码

    CQ 码是酷 Q(CoolQ)时代定义的一套接口语言,方便用户快速编写指定类型 QQ 消息。可以参考 这个页面 进行编写。

    D

    端口

    参见 IP 与端口

    F

    服务器

    服务器可以简单地理解为持续保持开机的电脑,即持续提供服务的机器。

    我们知道,骰子本质是在电脑上运行的程序,如果希望骰子 24 小时都可以回应我们的指令,那么就需要电脑保持开启的状态。但这样做的不稳定性非常大,如果出现例如家里突然停电了这样的情况,骰子就不能 24 小时随时回复我们的指令了,并且,这样也很费电。而服务器正是这样一种尽可能稳定运行的、不会关机的电脑,他们可能以「云电脑」这样的名字出现,但从本质上来说,这就是服务器。

    提示:服务器和个人计算机在使用上有明显差异

    相比开机激活之后马上就可以投入使用的个人计算机,服务器从运行系统上就与其稍有不同。这里以 Windows 系统的服务器和个人电脑举例。

    服务器使用的是微软特地为了服务器开发的 Windows Server 系统。顾名思义,这个系统就是专为服务器开发的,在部分设置的选项中也与个人计算机有所不同。

    正因如此,服务器一开始并不容易熟练操作。不过,这篇速查表的目的就是让屏幕前不太明白计算机相关知识的用户可以快速入门。所以,你也不必对这些问题有太大的压力。

    G

    工作目录

    工作目录是用户在使用 命令行界面 时,当前「处于」的目录。在运行程序时,程序会以工作目录作为索引目录树的起始位置。

    海豹核心要求的、和实际运行时的工作目录即为「包含 sealdice-core(.exe) 文件和 data 目录、通常还包含 lagrange 目录」的目录(文件夹)。

    海豹工作目录内的文件结构可以参考 海豹的本地文件

    H

    Headless

    参见 无头

    I

    IP 与端口

    在分离部署 QQ 后端和部署多只海豹时,你都需要正确处理 IP 与端口号。IP 与端口是互联网应用用于定位彼此的方式之一,IP 用于区分网络中的不同设备,而端口用于区分同一设备上的不同应用。打个比方,IP 就像是地址,可以定位到某个特定的房屋,而端口号是这个屋子里住户的编号,可以用于判断该联系这户人中的哪一位。在目前主流使用的 IPv4 标准下,IP 是形如 127.0.0.1192.168.0.1 的一串数字,端口号则是范围在 0-65535 的一个整数。两者组合时,通常使用 127.0.0.1:3456 的方式描述。

    通常来说,服务端应用程序会「监听」一个端口,而客户端应用程序会试图连接到此端口。例如在分离部署 QQ 后端并采用正向 WS 连接时,QQ 后端会监听你在配置中指定的端口,而海豹会试图连接到这个端口;而海豹的 WebUI 作为服务端默认绑定到 3211 端口,你的浏览器则试图连接到 3211 端口。所以,在配置分离部署的 QQ 后端时,海豹中必须填入与你的 QQ 后端配置相同的端口号。

    不同范围的 IP 地址都有与之相关的规定,而你在配置海豹的过程中最常见的是 127.0.0.1localhost。此地址一般用于指向本机,而非互联网上的其他设备。当你的海豹与 QQ 后端位于同一主机上,在海豹中需要通过此地址指向 QQ 后端。当你访问 WebUI 的设备与海豹所在的是同一主机,你也需要在浏览器地址栏填入此 IP。

    同样的,端口号也不能随意指定。一般情况下,一个端口只能被一个服务端监听使用,这就是为什么当你部署多只海豹时需要切换端口,此时默认的 3211 端口已被第一只海豹占用。而低位端口(小数字)通常有其约定,例如 80 是 HTTP 端口,443 是 HTTPS 端口等。低位端口通常已经被占用,或系统安全策略不允许随意监听此类端口。所以,建议优先选择高位端口(大数字)部署 QQ 后端及海豹。

    Issue

    Issue 更常见的含义是偏向负面的「问题」,而在开源项目领域,issue 一词更多地被翻译为中性的「议题」。

    在开源项目网站如 GitHub 的 Issues 标签页下,按默认设置,你可以看到一个开源项目的全部进行中的议题。这些议题主要包括了使用求助、Bug 反馈以及功能请求。在这里的讨论是所有人可见的,因此可以方便开发者与用户高效地共享信息。Issue 也是大部分开源项目正式的反馈渠道。

    J

    JSON

    JSON 是一种 数据序列化语言。语法入门可以参考 编写牌堆

    K

    控制台

    控制台是 终端 生成的、用于与 Shell 交互的界面。

    你可能还想了解 控制台命令行Shell命令提示符

    许多时候,终端、控制台、命令行与 Shell 或命令提示符等名词会被混用,因为在实际交互中,他们所指代的东西往往是一体的。

    L

    Lagrange

    Lagrange(拉格兰)是一个 NTQQ 协议相关的开源项目。其包括目前实现了 Linux NTQQ 协议的 Lagrange.Core,和提供 OneBot-V11 API 的 Lagrange.Onebot 两部分。

    Lagrange 可以很方便的在多个平台(Windows、Linux、Mac)部署,海豹核心可以对接其提供的 OneBot-V11 API 来提供 QQ 骰子服务。

    可以参考 连接平台 - QQ有关的部分 和 Lagrange 的官方 GitHub 页面

    Linux

    Linux 是一种基于 UNIX 操作系统设计的开源操作系统。Linux 广泛应用于服务器、嵌入式系统、超级计算机以及大多数互联网基础设施。它也可以用于桌面计算,尽管市场份额相对较小。

    Linux 的主要优点包括稳定性、安全性、低成本(大部分 Linux 发行版都是免费的)和开源性(用户可以查看和修改源代码)。

    LiteLoader

    LiteLoaderQQNT(LiteLoader)是 NTQQ 的插件加载器,允许通过插件注入 QQ 实现某些特定的功能。

    可以参考 连接平台 - QQ有关的部分 和 LiteLoader 的官方 GitHub 页面

    Log

    参见 日志

    M

    命令行

    命令行是 控制台 中,你实际输入命令的位置。通常,命令行行首会有 $#> 等符号,它们是 Shell 生成的提示符 (Prompt),用于提示用户 Shell 正在等待用户输入命令。

    你可能还想了解 终端控制台Shell命令提示符

    许多时候,终端、控制台、命令行与 Shell 或命令提示符等名词会被混用,因为在实际交互中,他们所指代的东西往往是一体的。

    命令行界面

    命令行界面即基于 命令行 的用户界面。在此界面下,用户通常使用输入指令的方式与操作系统或程序进行交互。

    命令提示符

    命令提示符(cmd.exe)是 Windows 平台下,在上个世代常用,在如今(由于 Windows 过于完善兼容性)也经常被使用到的一种 Shell

    命令提示符本身集成了 控制台,但由于其过于古老,具有诸多弊端。例如,当你用鼠标选中控制台内的文本时,正在运行的程序会被暂停。

    因此,强烈建议你使用 Windows 终端 打开程序。在较新的 Windows 系统上,命令提示符默认使用 Windows 终端打开。

    你可能还想了解 终端控制台命令行Shell

    许多时候,终端、控制台、命令行与 Shell 或命令提示符等名词会被混用,因为在实际交互中,他们所指代的东西往往是一体的。

    N

    NapCatQQ

    NapCatQQ 是基于 PC NTQQ 本体实现一套 无头 Bot 框架。

    可以参考 连接平台 - QQ有关的部分 和 NapCatQQ 的官方 GitHub 页面

    NTQQ

    NTQQ/QQNT 是腾讯公司基于 NT 内核,重新设计了用户界面的 QQ 客户端。腾讯官方称之为「QQ 9」。因此,如果发现自己使用的 QQ 不能正确加载 LiteLoader 等插件,请先检查 QQ 版本号是否大于 9。

    Q

    QQNT

    参见 NTQQ

    R

    日志

    在计算机领域中,日志通常指程序在运行时生成的一系列记录。这些记录通常反映了程序的运行状态,同时一般包含时间信息以方便定位对应的事件。在程序运行发生故障或不符合预期的行为时,日志中通常也会有所反映。日志通常分为信息(Info)、注意(Warning)和错误(Error)等不同的等级,而后两者就对应了上述的程序问题。

    海豹的日志通常可以在三个地方找到:

    • WebUI 的「日志」导航栏,也即默认页面下。
    • 运行着海豹核心的 控制台
    • 海豹 工作目录 下, data/main.logdata/default/record.log 文件内。

    S

    数据序列化语言

    程序运行中使用的数据,通常以特定的数据结构存储在内存之中。为了更方便地对数据进行存储、传输与重建,数据序列化语言被发明出来。这类语言通过特定的语法描述了数据之间的关系,并以文本的方式存储或传输。程序可以从这类语言中方便地恢复原有的数据结构。

    常见的数据序列化语言包括 JSONYAMLTOML等。

    Shell

    我们日常使用的程序通常使用图形用户界面(GUI)与我们交互,即基于图形渲染和鼠标点击、拖拽的交互方式。而在编程领域和更古早的时期,命令行界面(CLI)则更为常用。在使用 CLI 时,我们第一个打开的程序通常就是 Shell。

    Shell 是一个特殊的命令行界面程序,它给用户提供了通过输入命令与操作系统进行交互的交互方式。它会解析并执行用户输入的命令。

    在类 Unix 系统中存在众多的 Shell,例如 Ubuntu 系统默认使用 Bash 而 macOS 默认使用 Zsh。Windows 系统推荐使用 PowerShell,而 命令提示符 也是一种 Shell。

    你可能还想了解 终端控制台命令行

    许多时候,终端、控制台、命令行、Shell 与命令提示符等名词会被混用,因为在实际交互中,他们所指代的东西往往是一体的。

    T

    TOML

    TOML 是一种 数据序列化语言。语法入门可以参考 编写牌堆

    W

    无头

    在计算机领域,无头(headless)通常指通过不生成图形化用户界面方式运行(原本有图形化用户界面的)程序。

    WebUI

    UI 即「用户界面(User Interface)」,通常指用户与程序发生交互的位置。而 WebUI 顾名思义,就是通过网络生成、交互的用户界面。

    在海豹的相关语境下,WebUI 指骰主能通过浏览器访问到的管理后台。海豹默认的 WebUI 监听 端口 为 3211,因此当你通过 3211 端口访问海豹的管理后台时,实质上就是在与海豹的 WebUI 交互。

    Windows Terminal

    参见 Windows 终端

    Windows 终端

    Windows Terminal icon

    Windows 终端是一个为命令行用户准备的全新的、现代的、功能丰富的生产力 终端。它包含了 Windows 命令行社区经常希望加入的新功能,例如标签页、富文本、全球化、可配置性和主题与风格化等等。

    如果你在 Windows「开始菜单」的搜素功能中,输入「终端」后并没有出现如上所示的图标。那么强烈建议你下载并安装 Windows 终端,而不是继续使用 命令提示符 集成的 控制台

    如果你发现你在启动海豹核心、LagrangeNapCatQQ 等程序时,弹出窗口的字体与风格都不属于 Windows 终端,那么强烈建议你在 Windows 终端中手动启动这些程序。

    Y

    YAML

    YAML 是一种 数据序列化语言。语法入门可以参考 编写牌堆

    Z

    终端

    终端(Terminal)是一个特殊的程序,它提供了一种访问 Shell 的方式,也可以视为 Shell 的一层包装。现代的终端通常会生成一个窗口——即 控制台 用于交互。

    你可能还想了解 命令行Shell命令提示符

    许多时候,终端、控制台、命令行与 Shell 或命令提示符等名词会被混用,因为在实际交互中,他们所指代的东西往往是一体的。

    ',112)]))}const q=e(t,[["render",i]]);export{u as __pageData,q as default}; diff --git a/assets/ban-add-in-ui.DHyGW49r.png b/assets/ban-add-in-ui.DHyGW49r.png new file mode 100644 index 000000000..f373a72e6 Binary files /dev/null and b/assets/ban-add-in-ui.DHyGW49r.png differ diff --git a/assets/ban-config.SLkrj0Hg.png b/assets/ban-config.SLkrj0Hg.png new file mode 100644 index 000000000..20e58d65b Binary files /dev/null and b/assets/ban-config.SLkrj0Hg.png differ diff --git a/assets/ban-ui.Dhue1cR0.png b/assets/ban-ui.Dhue1cR0.png new file mode 100644 index 000000000..1f4e7cb29 Binary files /dev/null and b/assets/ban-ui.Dhue1cR0.png differ diff --git a/assets/censor-config1.Bip8x8md.png b/assets/censor-config1.Bip8x8md.png new file mode 100644 index 000000000..7d66bf967 Binary files /dev/null and b/assets/censor-config1.Bip8x8md.png differ diff --git a/assets/censor-config2.DGoTrdv-.png b/assets/censor-config2.DGoTrdv-.png new file mode 100644 index 000000000..2e5185b40 Binary files /dev/null and b/assets/censor-config2.DGoTrdv-.png differ diff --git a/assets/censor-log.BUJg4eNS.png b/assets/censor-log.BUJg4eNS.png new file mode 100644 index 000000000..a0d69cbe2 Binary files /dev/null and b/assets/censor-log.BUJg4eNS.png differ diff --git a/assets/censor-ui.DLNYMxtg.png b/assets/censor-ui.DLNYMxtg.png new file mode 100644 index 000000000..434bc8ede Binary files /dev/null and b/assets/censor-ui.DLNYMxtg.png differ diff --git a/assets/censor-words.Dn7Hjhhz.png b/assets/censor-words.Dn7Hjhhz.png new file mode 100644 index 000000000..6ff1cd214 Binary files /dev/null and b/assets/censor-words.Dn7Hjhhz.png differ diff --git a/assets/chunks/@localSearchIndexroot.BrUPPGVN.js b/assets/chunks/@localSearchIndexroot.BrUPPGVN.js new file mode 100644 index 000000000..c8eba3d6d --- /dev/null +++ b/assets/chunks/@localSearchIndexroot.BrUPPGVN.js @@ -0,0 +1 @@ +const e='{"documentCount":766,"nextId":766,"documentIds":{"0":"/sealdice-manual-next/about/about.html#关于","1":"/sealdice-manual-next/about/about.html#官方站点","2":"/sealdice-manual-next/about/about.html#投喂","3":"/sealdice-manual-next/about/about.html#手册贡献者","4":"/sealdice-manual-next/about/about.html#开源","5":"/sealdice-manual-next/about/develop.html#参与项目","6":"/sealdice-manual-next/about/develop.html#如何参与项目","7":"/sealdice-manual-next/about/develop.html#bug-反馈、功能建议","8":"/sealdice-manual-next/about/develop.html#提交修改","9":"/sealdice-manual-next/about/develop.html#贡献指南","10":"/sealdice-manual-next/about/develop.html#整体流程","11":"/sealdice-manual-next/about/develop.html#对目标仓库进行-fork","12":"/sealdice-manual-next/about/develop.html#切出工作分支","13":"/sealdice-manual-next/about/develop.html#发起-pull-request-请求","14":"/sealdice-manual-next/about/develop.html#保持-fork-仓库与上游同步-可选","15":"/sealdice-manual-next/about/license.html#许可协议","16":"/sealdice-manual-next/about/start-from-zero.html#从零开始","17":"/sealdice-manual-next/about/start-from-zero.html#_1-部署海豹","18":"/sealdice-manual-next/about/start-from-zero.html#_2-连接平台","19":"/sealdice-manual-next/about/start-from-zero.html#_3-熟悉海豹核心的功能","20":"/sealdice-manual-next/about/start-from-zero.html#_4-熟悉指令","21":"/sealdice-manual-next/about/start-from-zero.html#_5-进阶自定义","22":"/sealdice-manual-next/advanced/edit_complex_custom_text.html#编写复杂文案","23":"/sealdice-manual-next/advanced/edit_complex_custom_text.html#示例","24":"/sealdice-manual-next/advanced/edit_complex_custom_text.html#根据骰点结果展示不同文案","25":"/sealdice-manual-next/advanced/edit_complex_custom_text.html#多套文案的实现","26":"/sealdice-manual-next/advanced/edit_complex_custom_text.html#切换命令实现","27":"/sealdice-manual-next/advanced/edit_complex_custom_text.html#文案调整","28":"/sealdice-manual-next/advanced/edit_complex_custom_text.html#展示","29":"/sealdice-manual-next/advanced/edit_deck.html#编写牌堆","30":"/sealdice-manual-next/advanced/edit_deck.html#概览","31":"/sealdice-manual-next/advanced/edit_deck.html#语法快速入门","32":"/sealdice-manual-next/advanced/edit_deck.html#toml-注释","33":"/sealdice-manual-next/advanced/edit_deck.html#toml-键值对","34":"/sealdice-manual-next/advanced/edit_deck.html#toml-键名","35":"/sealdice-manual-next/advanced/edit_deck.html#toml-字符串","36":"/sealdice-manual-next/advanced/edit_deck.html#toml-表","37":"/sealdice-manual-next/advanced/edit_deck.html#toml-数组","38":"/sealdice-manual-next/advanced/edit_deck.html#json-键值","39":"/sealdice-manual-next/advanced/edit_deck.html#json-数组","40":"/sealdice-manual-next/advanced/edit_deck.html#json-对象","41":"/sealdice-manual-next/advanced/edit_deck.html#注释","42":"/sealdice-manual-next/advanced/edit_deck.html#_1-行内注释","43":"/sealdice-manual-next/advanced/edit_deck.html#_2-注释块","44":"/sealdice-manual-next/advanced/edit_deck.html#yaml-注释","45":"/sealdice-manual-next/advanced/edit_deck.html#yaml-键值","46":"/sealdice-manual-next/advanced/edit_deck.html#yaml-对象","47":"/sealdice-manual-next/advanced/edit_deck.html#yaml-数组","48":"/sealdice-manual-next/advanced/edit_deck.html#基础牌堆编写","49":"/sealdice-manual-next/advanced/edit_deck.html#牌堆语法","50":"/sealdice-manual-next/advanced/edit_deck.html#一个项中抽取其他项","51":"/sealdice-manual-next/advanced/edit_deck.html#放回抽取与不放回抽取","52":"/sealdice-manual-next/advanced/edit_deck.html#插入掷骰表达式","53":"/sealdice-manual-next/advanced/edit_deck.html#权重","54":"/sealdice-manual-next/advanced/edit_deck.html#权重与不放回抽取","55":"/sealdice-manual-next/advanced/edit_deck.html#发送图片等","56":"/sealdice-manual-next/advanced/edit_deck.html#牌堆打包","57":"/sealdice-manual-next/advanced/edit_deck.html#牌组的隐藏和导出控制","58":"/sealdice-manual-next/advanced/edit_deck.html#配置牌堆更新","59":"/sealdice-manual-next/advanced/edit_deck.html#插入海豹内置脚本语言","60":"/sealdice-manual-next/advanced/edit_deck.html#toml-牌堆的更多功能","61":"/sealdice-manual-next/advanced/edit_deck.html#更多牌组设置","62":"/sealdice-manual-next/advanced/edit_deck.html#云端内容","63":"/sealdice-manual-next/advanced/edit_deck.html#api-接口要求","64":"/sealdice-manual-next/advanced/edit_deck.html#牌堆配置云端内容","65":"/sealdice-manual-next/advanced/edit_helpdoc.html#编写帮助文档","66":"/sealdice-manual-next/advanced/edit_helpdoc.html#创建-json-格式的帮助文档","67":"/sealdice-manual-next/advanced/edit_helpdoc.html#示例文档-塔罗牌-节选","68":"/sealdice-manual-next/advanced/edit_helpdoc.html#创建-excel-格式的帮助文档","69":"/sealdice-manual-next/advanced/edit_reply.html#编写自定义回复","70":"/sealdice-manual-next/advanced/edit_reply.html#第一个自定义回复","71":"/sealdice-manual-next/advanced/edit_reply.html#触发条件","72":"/sealdice-manual-next/advanced/edit_reply.html#文本匹配-模糊匹配","73":"/sealdice-manual-next/advanced/edit_reply.html#文本匹配-正则匹配","74":"/sealdice-manual-next/advanced/edit_reply.html#表达式为真","75":"/sealdice-manual-next/advanced/edit_reply.html#回复结果","76":"/sealdice-manual-next/advanced/edit_reply.html#嵌入脚本语言","77":"/sealdice-manual-next/advanced/edit_reply.html#执行块","78":"/sealdice-manual-next/advanced/edit_reply.html#示例-使用-if","79":"/sealdice-manual-next/advanced/edit_reply.html#示例-变量运算","80":"/sealdice-manual-next/advanced/edit_reply.html#更多示例片段","81":"/sealdice-manual-next/advanced/edit_reply.html#牌堆与自定义回复的结合","82":"/sealdice-manual-next/advanced/edit_reply.html#多行回复的错误使用","83":"/sealdice-manual-next/advanced/edit_reply.html#限定每人-每群每天一次","84":"/sealdice-manual-next/advanced/edit_reply.html#条件语句嵌套条件算符-多条件条件语句","85":"/sealdice-manual-next/advanced/edit_reply.html#同时使用前缀和后缀匹配-以匹配-axxxxxxxb-型文本","86":"/sealdice-manual-next/advanced/edit_reply.html#随机看图","87":"/sealdice-manual-next/advanced/edit_reply.html#单人模组","88":"/sealdice-manual-next/advanced/edit_sensitive_words.html#编写敏感词库","89":"/sealdice-manual-next/advanced/edit_sensitive_words.html#创建文本格式的敏感词库","90":"/sealdice-manual-next/advanced/edit_sensitive_words.html#创建-toml-格式的敏感词库","91":"/sealdice-manual-next/advanced/introduce.html#进阶介绍","92":"/sealdice-manual-next/advanced/introduce.html#了解海豹语","93":"/sealdice-manual-next/advanced/introduce.html#用什么编写","94":"/sealdice-manual-next/advanced/js_api_list.html#api-列表","95":"/sealdice-manual-next/advanced/js_api_list.html#replygroup-replyperson-replytosender","96":"/sealdice-manual-next/advanced/js_api_list.html#memberban-memberkick","97":"/sealdice-manual-next/advanced/js_api_list.html#format-formattmpl","98":"/sealdice-manual-next/advanced/js_api_list.html#getctxproxyfirst-getctxproxyatpos","99":"/sealdice-manual-next/advanced/js_api_list.html#vars","100":"/sealdice-manual-next/advanced/js_api_list.html#ext","101":"/sealdice-manual-next/advanced/js_api_list.html#coc","102":"/sealdice-manual-next/advanced/js_api_list.html#deck","103":"/sealdice-manual-next/advanced/js_api_list.html#自定义-trpg-规则相关","104":"/sealdice-manual-next/advanced/js_api_list.html#其他","105":"/sealdice-manual-next/advanced/js_api_list.html#ctx-的内容","106":"/sealdice-manual-next/advanced/js_api_list.html#ctx-group-的内容","107":"/sealdice-manual-next/advanced/js_api_list.html#ctx-player-的内容","108":"/sealdice-manual-next/advanced/js_api_list.html#ctx-endpoint-的内容","109":"/sealdice-manual-next/advanced/js_api_list.html#msg-的内容","110":"/sealdice-manual-next/advanced/js_api_list.html#cmdargs-的内容","111":"/sealdice-manual-next/advanced/js_example.html#常见用法示例","112":"/sealdice-manual-next/advanced/js_example.html#创建和注册扩展","113":"/sealdice-manual-next/advanced/js_example.html#自定义指令","114":"/sealdice-manual-next/advanced/js_example.html#创建指令","115":"/sealdice-manual-next/advanced/js_example.html#指令参数与返回值","116":"/sealdice-manual-next/advanced/js_example.html#指令核心执行流程","117":"/sealdice-manual-next/advanced/js_example.html#注册指令","118":"/sealdice-manual-next/advanced/js_example.html#抽取牌堆","119":"/sealdice-manual-next/advanced/js_example.html#示例代码-抽取牌堆","120":"/sealdice-manual-next/advanced/js_example.html#权限识别","121":"/sealdice-manual-next/advanced/js_example.html#示例代码-权限识别","122":"/sealdice-manual-next/advanced/js_example.html#黑名单-信任名单操作","123":"/sealdice-manual-next/advanced/js_example.html#黑名单操作的函数","124":"/sealdice-manual-next/advanced/js_example.html#信任用户名单","125":"/sealdice-manual-next/advanced/js_example.html#获取黑名单-信任名单列表","126":"/sealdice-manual-next/advanced/js_example.html#获取用户在黑名单-信任名单中的信息","127":"/sealdice-manual-next/advanced/js_example.html#示例代码-黑名单-信任名单操作","128":"/sealdice-manual-next/advanced/js_example.html#存取数据","129":"/sealdice-manual-next/advanced/js_example.html#示例代码-投喂插件","130":"/sealdice-manual-next/advanced/js_example.html#示例代码-群内安价收集","131":"/sealdice-manual-next/advanced/js_example.html#数据处理模板","132":"/sealdice-manual-next/advanced/js_example.html#读取玩家或群组数据","133":"/sealdice-manual-next/advanced/js_example.html#编写暗骰指令","134":"/sealdice-manual-next/advanced/js_example.html#编写代骰指令","135":"/sealdice-manual-next/advanced/js_example.html#网络请求","136":"/sealdice-manual-next/advanced/js_example.html#自定义-coc-规则","137":"/sealdice-manual-next/advanced/js_example.html#补充-使用非指令关键词","138":"/sealdice-manual-next/advanced/js_example.html#注册插件配置项","139":"/sealdice-manual-next/advanced/js_example.html#示例代码-注册配置项","140":"/sealdice-manual-next/advanced/js_example.html#注册定时任务","141":"/sealdice-manual-next/advanced/js_example.html#api-参数","142":"/sealdice-manual-next/advanced/js_example.html#使用示例","143":"/sealdice-manual-next/advanced/js_gamesystem.html#编写新的-trpg-规则","144":"/sealdice-manual-next/advanced/js_gamesystem.html#角色属性","145":"/sealdice-manual-next/advanced/js_gamesystem.html#游戏规则","146":"/sealdice-manual-next/advanced/js_gamesystem.html#规则模板是什么-有什么功能","147":"/sealdice-manual-next/advanced/js_gamesystem.html#那么-要怎么做","148":"/sealdice-manual-next/advanced/js_project.html#插件的工程化编写","149":"/sealdice-manual-next/advanced/js_project.html#clone-或下载模板项目","150":"/sealdice-manual-next/advanced/js_project.html#补全信息","151":"/sealdice-manual-next/advanced/js_project.html#使用和编译","152":"/sealdice-manual-next/advanced/js_project.html#目录结构","153":"/sealdice-manual-next/advanced/js_project.html#其他问题","154":"/sealdice-manual-next/advanced/js_project.html#我能在项目中引用-npm-包吗","155":"/sealdice-manual-next/advanced/js_project.html#我想使用的-api-没有被自动提示-直接使用被提示错误-如何解决","156":"/sealdice-manual-next/advanced/js_project.html#默认输出的插件代码是压缩过的-如何尽量保持产物的可读性","157":"/sealdice-manual-next/advanced/js_start.html#前言","158":"/sealdice-manual-next/advanced/js_start.html#快速开始","159":"/sealdice-manual-next/advanced/js_start.html#插件元数据","160":"/sealdice-manual-next/advanced/js_start.html#插件编写","161":"/sealdice-manual-next/advanced/js_start.html#单-js-文件编写插件","162":"/sealdice-manual-next/advanced/js_start.html#插件的工程化编写","163":"/sealdice-manual-next/advanced/js_start.html#扩展依赖","164":"/sealdice-manual-next/advanced/js_start.html#依赖其他扩展","165":"/sealdice-manual-next/advanced/js_start.html#指定依赖的格式","166":"/sealdice-manual-next/advanced/js_start.html#依赖多个扩展","167":"/sealdice-manual-next/advanced/js_start.html#目标海豹版本","168":"/sealdice-manual-next/advanced/js_start.html#一些有帮助的资源","169":"/sealdice-manual-next/advanced/js_start.html#其他问题","170":"/sealdice-manual-next/advanced/js_start.html#我不会-javascript-海豹支持其他编程语言编写插件吗","171":"/sealdice-manual-next/advanced/script.html#内置脚本语言","172":"/sealdice-manual-next/advanced/script.html#变量","173":"/sealdice-manual-next/advanced/script.html#数据类型和赋值","174":"/sealdice-manual-next/advanced/script.html#语句","175":"/sealdice-manual-next/advanced/script.html#运算符","176":"/sealdice-manual-next/advanced/script.html#数学运算","177":"/sealdice-manual-next/advanced/script.html#逻辑运算","178":"/sealdice-manual-next/advanced/script.html#骰子算符","179":"/sealdice-manual-next/advanced/script.html#条件算符","180":"/sealdice-manual-next/advanced/script.html#条件算符-1","181":"/sealdice-manual-next/advanced/script.html#多重条件算符","182":"/sealdice-manual-next/advanced/script.html#三目运算符","183":"/sealdice-manual-next/advanced/script.html#条件语句","184":"/sealdice-manual-next/archive/README.html#归档内容","185":"/sealdice-manual-next/archive/archive-about-opensource.html#开源程序相关","186":"/sealdice-manual-next/archive/archive-about-opensource.html#什么是开源-什么是开源程序","187":"/sealdice-manual-next/archive/archive-about-opensource.html#为什么我在-sealdice-用户群问问题会被要求发送截图-为什么不能拍屏","188":"/sealdice-manual-next/archive/archive-about-opensource.html#提问的智慧到底该怎么实现","189":"/sealdice-manual-next/archive/archive-about-opensource.html#遇到问题先查询资料-尝试自己思考问题所在-排除问题","190":"/sealdice-manual-next/archive/archive-about-opensource.html#问问题要有前因后果-相对客观地陈述问题会比只表示主观情绪有用","191":"/sealdice-manual-next/archive/archive-about-opensource.html#保持耐心-对回答问题者表现出友善和配合的态度","192":"/sealdice-manual-next/archive/archive-about-opensource.html#如果有需要-可以去-github-代码仓库上提交-issue","193":"/sealdice-manual-next/archive/archive-about-opensource.html#什么是-github-怎么提-issue","194":"/sealdice-manual-next/archive/archive-guide.html#计算机基础知识","195":"/sealdice-manual-next/archive/archive-guide.html#计算机小白常见问题","196":"/sealdice-manual-next/archive/archive-guide.html#部署海豹核心为什么要解压压缩包-怎么样解压压缩包","197":"/sealdice-manual-next/archive/archive-guide.html#内存不足到底指的是哪里的内存不足-如何解决内存不足","198":"/sealdice-manual-next/archive/archive-guide.html#对于海豹核心的日志界面中「there-is-not-enough-space-on-the-disk」的报错","199":"/sealdice-manual-next/archive/archive-guide.html#如果出现莫名其妙的程序中断","200":"/sealdice-manual-next/archive/archive-guide.html#什么是开源-什么是开源程序","201":"/sealdice-manual-next/archive/archive-guide.html#为什么我在-sealdice-用户群问问题会被要求发送截图-为什么不能拍屏","202":"/sealdice-manual-next/archive/archive-guide.html#什么是-github-怎么提-issue","203":"/sealdice-manual-next/archive/archive-guide.html#如何高效学习","204":"/sealdice-manual-next/archive/archive-guide.html#前言","205":"/sealdice-manual-next/archive/archive-guide.html#掌握语言","206":"/sealdice-manual-next/archive/archive-guide.html#寻求资源","207":"/sealdice-manual-next/archive/archive-guide.html#高效搜索","208":"/sealdice-manual-next/archive/archive-guide.html#实践学习","209":"/sealdice-manual-next/archive/archive-guide.html#深度优先学习","210":"/sealdice-manual-next/archive/archive-guide.html#广度优先学习","211":"/sealdice-manual-next/archive/archive-guide.html#所以","212":"/sealdice-manual-next/archive/archive-guide.html#结语","213":"/sealdice-manual-next/archive/archive-guide.html#如何正确提问","214":"/sealdice-manual-next/archive/archive-guide.html#前言-1","215":"/sealdice-manual-next/archive/archive-guide.html#提问的智慧","216":"/sealdice-manual-next/archive/archive-guide.html#提问前-你该这样做","217":"/sealdice-manual-next/archive/archive-guide.html#尝试自行排查问题","218":"/sealdice-manual-next/archive/archive-guide.html#尝试阅读本手册以找到答案","219":"/sealdice-manual-next/archive/archive-guide.html#尝试浏览用户群内的信息以找到答案","220":"/sealdice-manual-next/archive/archive-guide.html#尝试上网搜索以找到答案","221":"/sealdice-manual-next/archive/archive-guide.html#记住你做了什么","222":"/sealdice-manual-next/archive/archive-guide.html#提问时-你该这样做","223":"/sealdice-manual-next/archive/archive-guide.html#清晰说明你的意图和-或困难","224":"/sealdice-manual-next/archive/archive-guide.html#描述问题发生前-你做了什么","225":"/sealdice-manual-next/archive/archive-guide.html#提供问题发生时-程序的日志","226":"/sealdice-manual-next/archive/archive-guide.html#描述问题发生后-你尝试过的解决方案","227":"/sealdice-manual-next/archive/archive-guide.html#提供其他有价值的背景信息","228":"/sealdice-manual-next/archive/archive-guide.html#提问后-你该这样做","229":"/sealdice-manual-next/archive/archive-guide.html#如果问题解决了","230":"/sealdice-manual-next/archive/archive-guide.html#如果问题没能解决","231":"/sealdice-manual-next/archive/archive-guide.html#其他事项","232":"/sealdice-manual-next/archive/archive-guide.html#保持耐心-对回答问题者表现出友善和配合的态度","233":"/sealdice-manual-next/archive/archive-guide.html#如果有需要-可以去-github-代码仓库上提交-issue","234":"/sealdice-manual-next/archive/archive-guide.html#结语-1","235":"/sealdice-manual-next/archive/archive-other.html#其它归档内容","236":"/sealdice-manual-next/archive/archive-other.html#go-cqhttp-mirai","237":"/sealdice-manual-next/archive/archive-other.html#使用签名服务","238":"/sealdice-manual-next/archive/archive-other.html#怎么使用签名服务","239":"/sealdice-manual-next/archive/archive-other.html#如何搭建签名服务","240":"/sealdice-manual-next/archive/archive-other.html#手动抓取-ticket","241":"/sealdice-manual-next/archive/archive-other.html#前置工作","242":"/sealdice-manual-next/archive/archive-other.html#分离部署登录流程","243":"/sealdice-manual-next/archive/archive-other.html#gocqhttp-faq","244":"/sealdice-manual-next/archive/archive-other.html#_1-出现-code-1","245":"/sealdice-manual-next/archive/archive-other.html#_2-qsign-闪退","246":"/sealdice-manual-next/archive/archive-other.html#_3-出现-code-45","247":"/sealdice-manual-next/archive/archive-other.html#_4-出现-code-235","248":"/sealdice-manual-next/archive/archive-other.html#_5-出现-code-237","249":"/sealdice-manual-next/archive/archive-other.html#_5-如何启动多个-qsign-仅当需要备用签名或不同协议版本的时候有此需求","250":"/sealdice-manual-next/archive/archive-other.html#_6-什么是-go-cqhttp-通常简称-gocq","251":"/sealdice-manual-next/archive/archive-other.html#_7-什么是签名","252":"/sealdice-manual-next/archive/archive-other.html#_8-对于-signserver-即-start-qsign-bat-俗称签名服务器-崩溃闪退可能的一种情况","253":"/sealdice-manual-next/archive/archive-other.html#chronocat-red-协议","254":"/sealdice-manual-next/archive/archive-other.html#shamrock","255":"/sealdice-manual-next/archive/archive-other.html#准备模拟器","256":"/sealdice-manual-next/archive/archive-other.html#获取-root-权限","257":"/sealdice-manual-next/archive/archive-other.html#安装-lsposed-模块","258":"/sealdice-manual-next/archive/archive-other.html#安装-shamrock","259":"/sealdice-manual-next/archive/archive-other.html#开放模拟器端口供海豹对接","260":"/sealdice-manual-next/archive/archive-other.html#连接海豹","261":"/sealdice-manual-next/archive/archive-other.html#shamrock-lspatch","262":"/sealdice-manual-next/archive/archive-other.html#安装-shizuku","263":"/sealdice-manual-next/archive/archive-other.html#安装-lspatch","264":"/sealdice-manual-next/archive/archive-other.html#安装并激活-shamrock","265":"/sealdice-manual-next/archive/archive-other.html#对接海豹","266":"/sealdice-manual-next/archive/archive-terms.html#名词-术语速查表","267":"/sealdice-manual-next/archive/archive-terms.html#c","268":"/sealdice-manual-next/archive/archive-terms.html#cq-码","269":"/sealdice-manual-next/archive/archive-terms.html#d","270":"/sealdice-manual-next/archive/archive-terms.html#端口","271":"/sealdice-manual-next/archive/archive-terms.html#f","272":"/sealdice-manual-next/archive/archive-terms.html#服务器","273":"/sealdice-manual-next/archive/archive-terms.html#g","274":"/sealdice-manual-next/archive/archive-terms.html#工作目录","275":"/sealdice-manual-next/archive/archive-terms.html#h","276":"/sealdice-manual-next/archive/archive-terms.html#headless","277":"/sealdice-manual-next/archive/archive-terms.html#i","278":"/sealdice-manual-next/archive/archive-terms.html#ip-与端口","279":"/sealdice-manual-next/archive/archive-terms.html#issue","280":"/sealdice-manual-next/archive/archive-terms.html#j","281":"/sealdice-manual-next/archive/archive-terms.html#json","282":"/sealdice-manual-next/archive/archive-terms.html#k","283":"/sealdice-manual-next/archive/archive-terms.html#控制台","284":"/sealdice-manual-next/archive/archive-terms.html#l","285":"/sealdice-manual-next/archive/archive-terms.html#lagrange","286":"/sealdice-manual-next/archive/archive-terms.html#linux","287":"/sealdice-manual-next/archive/archive-terms.html#liteloader","288":"/sealdice-manual-next/archive/archive-terms.html#log","289":"/sealdice-manual-next/archive/archive-terms.html#m","290":"/sealdice-manual-next/archive/archive-terms.html#命令行","291":"/sealdice-manual-next/archive/archive-terms.html#命令行界面","292":"/sealdice-manual-next/archive/archive-terms.html#命令提示符","293":"/sealdice-manual-next/archive/archive-terms.html#n","294":"/sealdice-manual-next/archive/archive-terms.html#napcatqq","295":"/sealdice-manual-next/archive/archive-terms.html#ntqq","296":"/sealdice-manual-next/archive/archive-terms.html#q","297":"/sealdice-manual-next/archive/archive-terms.html#qqnt","298":"/sealdice-manual-next/archive/archive-terms.html#r","299":"/sealdice-manual-next/archive/archive-terms.html#日志","300":"/sealdice-manual-next/archive/archive-terms.html#s","301":"/sealdice-manual-next/archive/archive-terms.html#数据序列化语言","302":"/sealdice-manual-next/archive/archive-terms.html#shell","303":"/sealdice-manual-next/archive/archive-terms.html#t","304":"/sealdice-manual-next/archive/archive-terms.html#toml","305":"/sealdice-manual-next/archive/archive-terms.html#w","306":"/sealdice-manual-next/archive/archive-terms.html#无头","307":"/sealdice-manual-next/archive/archive-terms.html#webui","308":"/sealdice-manual-next/archive/archive-terms.html#windows-terminal","309":"/sealdice-manual-next/archive/archive-terms.html#windows-终端","310":"/sealdice-manual-next/archive/archive-terms.html#y","311":"/sealdice-manual-next/archive/archive-terms.html#yaml","312":"/sealdice-manual-next/archive/archive-terms.html#z","313":"/sealdice-manual-next/archive/archive-terms.html#终端","314":"/sealdice-manual-next/config/backup.html#备份","315":"/sealdice-manual-next/config/backup.html#关于备份","316":"/sealdice-manual-next/config/backup.html#手动备份","317":"/sealdice-manual-next/config/backup.html#自动备份","318":"/sealdice-manual-next/config/backup.html#自动清理","319":"/sealdice-manual-next/config/backup.html#配置清理范围","320":"/sealdice-manual-next/config/backup.html#配置清理时机","321":"/sealdice-manual-next/config/backup.html#备份列表","322":"/sealdice-manual-next/config/ban.html#黑白名单","323":"/sealdice-manual-next/config/ban.html#如何设置黑白名单","324":"/sealdice-manual-next/config/ban.html#添加黑白名单","325":"/sealdice-manual-next/config/ban.html#ui-手动添加","326":"/sealdice-manual-next/config/ban.html#指令添加","327":"/sealdice-manual-next/config/ban.html#自动添加","328":"/sealdice-manual-next/config/ban.html#黑白名单设置","329":"/sealdice-manual-next/config/basic.html#基础设置","330":"/sealdice-manual-next/config/basic.html#master-管理","331":"/sealdice-manual-next/config/basic.html#master-解锁码","332":"/sealdice-manual-next/config/basic.html#master-列表","333":"/sealdice-manual-next/config/basic.html#消息通知列表","334":"/sealdice-manual-next/config/basic.html#好友邀请","335":"/sealdice-manual-next/config/basic.html#邮箱通知","336":"/sealdice-manual-next/config/basic.html#发件邮箱","337":"/sealdice-manual-next/config/basic.html#邮箱密钥","338":"/sealdice-manual-next/config/basic.html#smtp-地址","339":"/sealdice-manual-next/config/basic.html#私骰模式","340":"/sealdice-manual-next/config/basic.html#允许自由开关","341":"/sealdice-manual-next/config/basic.html#启用戳一戳","342":"/sealdice-manual-next/config/basic.html#限制-text-指令","343":"/sealdice-manual-next/config/basic.html#忽略-bot-裸指令","344":"/sealdice-manual-next/config/basic.html#存活确认","345":"/sealdice-manual-next/config/basic.html#日志记录提示","346":"/sealdice-manual-next/config/basic.html#刷屏警告","347":"/sealdice-manual-next/config/basic.html#访问控制","348":"/sealdice-manual-next/config/basic.html#qq-频道设置","349":"/sealdice-manual-next/config/basic.html#加好友验证","350":"/sealdice-manual-next/config/basic.html#自动退出不活跃群组","351":"/sealdice-manual-next/config/censor.html#拦截","352":"/sealdice-manual-next/config/censor.html#什么是拦截功能","353":"/sealdice-manual-next/config/censor.html#配置拦截","354":"/sealdice-manual-next/config/censor.html#匹配选项","355":"/sealdice-manual-next/config/censor.html#响应设置","356":"/sealdice-manual-next/config/censor.html#敏感词管理","357":"/sealdice-manual-next/config/censor.html#查看拦截日志","358":"/sealdice-manual-next/config/censor.html#如何让用户-群豁免检查","359":"/sealdice-manual-next/config/censor.html#如何编写敏感词库","360":"/sealdice-manual-next/config/custom_text.html#自定义文案","361":"/sealdice-manual-next/config/custom_text.html#什么是自定义文案","362":"/sealdice-manual-next/config/custom_text.html#如何修改文案","363":"/sealdice-manual-next/config/custom_text.html#文案列表","364":"/sealdice-manual-next/config/custom_text.html#筛选文案","365":"/sealdice-manual-next/config/custom_text.html#文案的导入-导出","366":"/sealdice-manual-next/config/custom_text.html#自定义文案组合","367":"/sealdice-manual-next/config/custom_text.html#coc","368":"/sealdice-manual-next/config/custom_text.html#ra-rc-检定","369":"/sealdice-manual-next/config/custom_text.html#st-属性设置","370":"/sealdice-manual-next/config/custom_text.html#sc-理智检定","371":"/sealdice-manual-next/config/custom_text.html#en-技能成长","372":"/sealdice-manual-next/config/custom_text.html#核心","373":"/sealdice-manual-next/config/custom_text.html#r-骰点","374":"/sealdice-manual-next/config/custom_text.html#alias-快捷指令","375":"/sealdice-manual-next/config/custom_text.html#文案插入图片和-cq-码","376":"/sealdice-manual-next/config/custom_text.html#文案变量标签","377":"/sealdice-manual-next/config/custom_text.html#在一个文案中使用另一个文案","378":"/sealdice-manual-next/config/custom_text.html#自定义文案引用牌堆","379":"/sealdice-manual-next/config/custom_text.html#文案常见问题","380":"/sealdice-manual-next/config/custom_text.html#骰子进群和成为好友的问候语是哪个","381":"/sealdice-manual-next/config/custom_text.html#更复杂的文案设置","382":"/sealdice-manual-next/config/deck.html#牌堆","383":"/sealdice-manual-next/config/deck.html#牌堆是什么","384":"/sealdice-manual-next/config/deck.html#获取牌堆","385":"/sealdice-manual-next/config/deck.html#怎么上传牌堆到骰子-怎么管理牌堆","386":"/sealdice-manual-next/config/deck.html#怎么使用牌堆","387":"/sealdice-manual-next/config/deck.html#牌堆更新与云牌堆","388":"/sealdice-manual-next/config/deck.html#牌堆更新","389":"/sealdice-manual-next/config/deck.html#牌堆云端内容","390":"/sealdice-manual-next/config/deck.html#如何编写牌堆","391":"/sealdice-manual-next/config/helpdoc.html#帮助文档","392":"/sealdice-manual-next/config/helpdoc.html#什么是帮助文档","393":"/sealdice-manual-next/config/helpdoc.html#获取帮助文档","394":"/sealdice-manual-next/config/helpdoc.html#如何使用帮助文档","395":"/sealdice-manual-next/config/helpdoc.html#如何管理帮助文档","396":"/sealdice-manual-next/config/helpdoc.html#上传帮助文档","397":"/sealdice-manual-next/config/helpdoc.html#为分组添加别名","398":"/sealdice-manual-next/config/helpdoc.html#删除帮助文档","399":"/sealdice-manual-next/config/helpdoc.html#查看帮助文档词条","400":"/sealdice-manual-next/config/helpdoc.html#如何编写帮助文档","401":"/sealdice-manual-next/config/jsscript.html#javascript-插件","402":"/sealdice-manual-next/config/jsscript.html#javascript-插件是什么","403":"/sealdice-manual-next/config/jsscript.html#获取-js-插件","404":"/sealdice-manual-next/config/jsscript.html#如何安装和管理-js-插件","405":"/sealdice-manual-next/config/jsscript.html#插件列表","406":"/sealdice-manual-next/config/jsscript.html#插件的更新","407":"/sealdice-manual-next/config/jsscript.html#控制台","408":"/sealdice-manual-next/config/jsscript.html#插件设置","409":"/sealdice-manual-next/config/jsscript.html#如何使用-js-插件","410":"/sealdice-manual-next/config/jsscript.html#如何编写-js-插件","411":"/sealdice-manual-next/config/reply.html#自定义回复","412":"/sealdice-manual-next/config/reply.html#什么是自定义回复","413":"/sealdice-manual-next/config/reply.html#在哪编写自定义回复","414":"/sealdice-manual-next/config/reply.html#当前回复文件","415":"/sealdice-manual-next/config/reply.html#新建-导入自定义回复文件","416":"/sealdice-manual-next/config/reply.html#获取自定义回复文件","417":"/sealdice-manual-next/config/reply.html#公共条件","418":"/sealdice-manual-next/config/reply.html#设置回复项","419":"/sealdice-manual-next/config/reply.html#回复项的条件","420":"/sealdice-manual-next/config/reply.html#文本匹配","421":"/sealdice-manual-next/config/reply.html#文本长度","422":"/sealdice-manual-next/config/reply.html#回复项的结果","423":"/sealdice-manual-next/config/reply.html#回复结果延迟","424":"/sealdice-manual-next/config/reply.html#自定义回复引用牌堆","425":"/sealdice-manual-next/config/reply.html#更复杂的回复","426":"/sealdice-manual-next/config/utilities.html#辅助工具","427":"/sealdice-manual-next/config/utilities.html#指令测试","428":"/sealdice-manual-next/config/utilities.html#资源管理","429":"/sealdice-manual-next/deploy/about_file.html#海豹的本地文件","430":"/sealdice-manual-next/deploy/about_file.html#sealdice-文件目录树","431":"/sealdice-manual-next/deploy/about_file.html#常用文件","432":"/sealdice-manual-next/deploy/about_file.html#安卓端文件路径","433":"/sealdice-manual-next/deploy/about_file.html#数据库检查和修复","434":"/sealdice-manual-next/deploy/about_file.html#数据迁移","435":"/sealdice-manual-next/deploy/android.html#安卓海豹常见问题","436":"/sealdice-manual-next/deploy/android.html#安卓端登录","437":"/sealdice-manual-next/deploy/android.html#只有一个设备-但登录需要扫码","438":"/sealdice-manual-next/deploy/android.html#经常掉线","439":"/sealdice-manual-next/deploy/android.html#同时开启两个海豹实例","440":"/sealdice-manual-next/deploy/android.html#方法一-使用系统的双开功能","441":"/sealdice-manual-next/deploy/android.html#方法二-使用-np-管理器等软件","442":"/sealdice-manual-next/deploy/android.html#海豹文件路径","443":"/sealdice-manual-next/deploy/android.html#发送图片","444":"/sealdice-manual-next/deploy/android.html#如何更新","445":"/sealdice-manual-next/deploy/android.html#电脑海豹转安卓端海豹","446":"/sealdice-manual-next/deploy/android_keepalive.html#配置安卓端保活","447":"/sealdice-manual-next/deploy/android_keepalive.html#授予海豹核心必要权限","448":"/sealdice-manual-next/deploy/android_keepalive.html#hyperos-小米-红米","449":"/sealdice-manual-next/deploy/android_keepalive.html#miui-小米-红米","450":"/sealdice-manual-next/deploy/android_keepalive.html#鸿蒙系统-华为","451":"/sealdice-manual-next/deploy/android_keepalive.html#coloros-oppo-一加","452":"/sealdice-manual-next/deploy/android_keepalive.html#通用设置","453":"/sealdice-manual-next/deploy/android_keepalive.html#存储权限","454":"/sealdice-manual-next/deploy/android_keepalive.html#通知权限","455":"/sealdice-manual-next/deploy/android_keepalive.html#应用内设置","456":"/sealdice-manual-next/deploy/db-repair.html#数据库检查和修复","457":"/sealdice-manual-next/deploy/db-repair.html#确定问题","458":"/sealdice-manual-next/deploy/db-repair.html#无法使用命令行","459":"/sealdice-manual-next/deploy/db-repair.html#修复数据库-通过回滚备份","460":"/sealdice-manual-next/deploy/db-repair.html#修复数据库-通过数据库修复指令","461":"/sealdice-manual-next/deploy/platform-dingtalk.html#钉钉","462":"/sealdice-manual-next/deploy/platform-dingtalk.html#钉钉支持","463":"/sealdice-manual-next/deploy/platform-discord.html#discord","464":"/sealdice-manual-next/deploy/platform-discord.html#获取-token","465":"/sealdice-manual-next/deploy/platform-discord.html#连接海豹","466":"/sealdice-manual-next/deploy/platform-discord.html#邀请海豹","467":"/sealdice-manual-next/deploy/platform-dodo.html#dodo","468":"/sealdice-manual-next/deploy/platform-dodo.html#建立应用","469":"/sealdice-manual-next/deploy/platform-dodo.html#获取-client-id-和-bot-token","470":"/sealdice-manual-next/deploy/platform-dodo.html#连接海豹","471":"/sealdice-manual-next/deploy/platform-dodo.html#邀请海豹","472":"/sealdice-manual-next/deploy/platform-kook.html#kook","473":"/sealdice-manual-next/deploy/platform-kook.html#获取-token","474":"/sealdice-manual-next/deploy/platform-kook.html#连接海豹","475":"/sealdice-manual-next/deploy/platform-kook.html#邀请海豹","476":"/sealdice-manual-next/deploy/platform-minecraft.html#minecraft","477":"/sealdice-manual-next/deploy/platform-minecraft.html#minecraft-支持","478":"/sealdice-manual-next/deploy/platform-minecraft.html#架设-minecraft-服务端","479":"/sealdice-manual-next/deploy/platform-minecraft.html#获取服务端核心","480":"/sealdice-manual-next/deploy/platform-minecraft.html#启动服务端","481":"/sealdice-manual-next/deploy/platform-minecraft.html#放入-sealdice-minecraft-插件","482":"/sealdice-manual-next/deploy/platform-minecraft.html#海豹核心与-minecraft-服务端连接","483":"/sealdice-manual-next/deploy/platform-minecraft.html#sealdice-minecraft-插件的使用","484":"/sealdice-manual-next/deploy/platform-minecraft.html#指令","485":"/sealdice-manual-next/deploy/platform-minecraft.html#sealdice-文本","486":"/sealdice-manual-next/deploy/platform-minecraft.html#sealport-端口","487":"/sealdice-manual-next/deploy/platform-minecraft.html#权限","488":"/sealdice-manual-next/deploy/platform-minecraft.html#sealdice-admin","489":"/sealdice-manual-next/deploy/platform-qq-docker.html#qq-docker-中的海豹","490":"/sealdice-manual-next/deploy/platform-qq-docker.html#通过-docker-compose-同时部署海豹与-lagrange","491":"/sealdice-manual-next/deploy/platform-qq-docker.html#创建-docker-compose-yml","492":"/sealdice-manual-next/deploy/platform-qq-docker.html#首次启动容器","493":"/sealdice-manual-next/deploy/platform-qq-docker.html#lagrange-容器配置","494":"/sealdice-manual-next/deploy/platform-qq-docker.html#海豹连接-lagrange","495":"/sealdice-manual-next/deploy/platform-qq-docker.html#更新海豹容器或-lagrange-容器","496":"/sealdice-manual-next/deploy/platform-qq-docker.html#连接到宿主机上的-qq-后端","497":"/sealdice-manual-next/deploy/platform-qq-docker.html#保持容器与宿主机网络隔离","498":"/sealdice-manual-next/deploy/platform-qq-docker.html#配置容器使用宿主机网络","499":"/sealdice-manual-next/deploy/platform-qq-official.html#qq-官方机器人","500":"/sealdice-manual-next/deploy/platform-qq-official.html#尝试一下","501":"/sealdice-manual-next/deploy/platform-qq-official.html#获取连接所需信息","502":"/sealdice-manual-next/deploy/platform-qq-official.html#连接海豹","503":"/sealdice-manual-next/deploy/platform-qq-official.html#指令配置","504":"/sealdice-manual-next/deploy/platform-qq-official.html#机器人上线","505":"/sealdice-manual-next/deploy/platform-qq-official.html#使用海豹","506":"/sealdice-manual-next/deploy/platform-qq-official.html#注意事项","507":"/sealdice-manual-next/deploy/platform-qq-official.html#企业账号的开发者资质审核","508":"/sealdice-manual-next/deploy/platform-qq-official.html#机器人官方频道跳转","509":"/sealdice-manual-next/deploy/platform-qq-official.html#功能审核未通过","510":"/sealdice-manual-next/deploy/platform-qq.html#qq","511":"/sealdice-manual-next/deploy/platform-qq.html#前言","512":"/sealdice-manual-next/deploy/platform-qq.html#有关-qq-平台机器人的说明","513":"/sealdice-manual-next/deploy/platform-qq.html#对接引导","514":"/sealdice-manual-next/deploy/platform-qq.html#内置客户端","515":"/sealdice-manual-next/deploy/platform-qq.html#分离部署","516":"/sealdice-manual-next/deploy/platform-qq.html#lagrange","517":"/sealdice-manual-next/deploy/platform-qq.html#登录-lagrange","518":"/sealdice-manual-next/deploy/platform-qq.html#海豹连接-lagrange","519":"/sealdice-manual-next/deploy/platform-qq.html#llonebot","520":"/sealdice-manual-next/deploy/platform-qq.html#安装-llonebot","521":"/sealdice-manual-next/deploy/platform-qq.html#配置-llonebot","522":"/sealdice-manual-next/deploy/platform-qq.html#napcatqq","523":"/sealdice-manual-next/deploy/platform-qq.html#下载-napcatqq","524":"/sealdice-manual-next/deploy/platform-qq.html#海豹连接","525":"/sealdice-manual-next/deploy/platform-qq.html#chronocat","526":"/sealdice-manual-next/deploy/platform-qq.html#安装-chronocat","527":"/sealdice-manual-next/deploy/platform-qq.html#chronocat-satori-协议","528":"/sealdice-manual-next/deploy/platform-slack.html#slack","529":"/sealdice-manual-next/deploy/platform-slack.html#slack-支持","530":"/sealdice-manual-next/deploy/platform-slack.html#获取-token","531":"/sealdice-manual-next/deploy/platform-slack.html#app-token","532":"/sealdice-manual-next/deploy/platform-slack.html#bot-token","533":"/sealdice-manual-next/deploy/platform-slack.html#连接海豹","534":"/sealdice-manual-next/deploy/platform-telegram.html#telegram","535":"/sealdice-manual-next/deploy/platform-telegram.html#获取-token","536":"/sealdice-manual-next/deploy/platform-telegram.html#连接海豹","537":"/sealdice-manual-next/deploy/quick-start.html#快速开始","538":"/sealdice-manual-next/deploy/quick-start.html#获取海豹","539":"/sealdice-manual-next/deploy/quick-start.html#启动","540":"/sealdice-manual-next/deploy/quick-start.html#连接平台","541":"/sealdice-manual-next/deploy/quick-start.html#安装为系统服务-可选","542":"/sealdice-manual-next/deploy/quick-start.html#更新海豹","543":"/sealdice-manual-next/deploy/quick-start.html#自动更新","544":"/sealdice-manual-next/deploy/quick-start.html#手动更新","545":"/sealdice-manual-next/deploy/quick-start.html#上传固件","546":"/sealdice-manual-next/deploy/quick-start.html#安卓豹更新","547":"/sealdice-manual-next/deploy/special_feature.html#特色功能","548":"/sealdice-manual-next/deploy/special_feature.html#指令兼容性","549":"/sealdice-manual-next/deploy/special_feature.html#易于部署和使用","550":"/sealdice-manual-next/deploy/special_feature.html#极少的资源占用","551":"/sealdice-manual-next/deploy/special_feature.html#强自定义","552":"/sealdice-manual-next/deploy/special_feature.html#人工智能鸽子","553":"/sealdice-manual-next/deploy/special_feature.html#强大的查询功能","554":"/sealdice-manual-next/deploy/special_feature.html#通用特化支持","555":"/sealdice-manual-next/deploy/special_feature.html#代替他人检定-操作他人属性","556":"/sealdice-manual-next/deploy/special_feature.html#coc-特化支持","557":"/sealdice-manual-next/deploy/special_feature.html#属性同义词","558":"/sealdice-manual-next/deploy/special_feature.html#默认技能等级","559":"/sealdice-manual-next/deploy/special_feature.html#支持-scb-指令","560":"/sealdice-manual-next/deploy/special_feature.html#d-d-特化支持","561":"/sealdice-manual-next/deploy/special_feature.html#属性同义词-1","562":"/sealdice-manual-next/deploy/special_feature.html#优势骰劣势骰","563":"/sealdice-manual-next/deploy/special_feature.html#属性调整值和熟练自动计算","564":"/sealdice-manual-next/deploy/special_feature.html#临时属性","565":"/sealdice-manual-next/deploy/special_feature.html#法术位支持","566":"/sealdice-manual-next/deploy/special_feature.html#死亡豁免","567":"/sealdice-manual-next/deploy/special_feature.html#休息","568":"/sealdice-manual-next/deploy/special_feature.html#可以实时编辑的跑团日志","569":"/sealdice-manual-next/deploy/special_feature.html#是纯净骰-也是娱乐骰","570":"/sealdice-manual-next/deploy/special_feature.html#更强的指令支持","571":"/sealdice-manual-next/deploy/special_feature.html#跨平台","572":"/sealdice-manual-next/deploy/special_feature.html#trpg-规则支持列表","573":"/sealdice-manual-next/deploy/transfer.html#迁移","574":"/sealdice-manual-next/deploy/transfer.html#相同平台间迁移","575":"/sealdice-manual-next/deploy/transfer.html#跨平台迁移","576":"/sealdice-manual-next/deploy/transfer.html#linux-服务器间跨架构迁移-arm64-→-amd64","577":"/sealdice-manual-next/deploy/transfer.html#迁移数据到手机","578":"/sealdice-manual-next/#海豹核心","579":"/sealdice-manual-next/#开始使用","580":"/sealdice-manual-next/#更多","581":"/sealdice-manual-next/use/attribute_alias.html#属性同义词","582":"/sealdice-manual-next/use/attribute_alias.html#概念说明","583":"/sealdice-manual-next/use/attribute_alias.html#同义词表","584":"/sealdice-manual-next/use/coc7.html#克苏鲁的呼唤-7-版","585":"/sealdice-manual-next/use/coc7.html#st-操作人物卡","586":"/sealdice-manual-next/use/coc7.html#st-help-获取帮助信息","587":"/sealdice-manual-next/use/coc7.html#列出属性","588":"/sealdice-manual-next/use/coc7.html#删除属性","589":"/sealdice-manual-next/use/coc7.html#设定属性值","590":"/sealdice-manual-next/use/coc7.html#更新属性值","591":"/sealdice-manual-next/use/coc7.html#设定计算表达式","592":"/sealdice-manual-next/use/coc7.html#导出属性值","593":"/sealdice-manual-next/use/coc7.html#代骰","594":"/sealdice-manual-next/use/coc7.html#ra-rc-检定","595":"/sealdice-manual-next/use/coc7.html#进行检定","596":"/sealdice-manual-next/use/coc7.html#多轮检定","597":"/sealdice-manual-next/use/coc7.html#要求一定难度的检定","598":"/sealdice-manual-next/use/coc7.html#奖励骰和惩罚骰","599":"/sealdice-manual-next/use/coc7.html#代骰-1","600":"/sealdice-manual-next/use/coc7.html#以上功能可以组合使用","601":"/sealdice-manual-next/use/coc7.html#rah-rch-暗中检定","602":"/sealdice-manual-next/use/coc7.html#代骰-2","603":"/sealdice-manual-next/use/coc7.html#rav-rcv-对抗检定","604":"/sealdice-manual-next/use/coc7.html#使用相同技能对抗","605":"/sealdice-manual-next/use/coc7.html#使用不同技能对抗","606":"/sealdice-manual-next/use/coc7.html#指定两个其他人对抗","607":"/sealdice-manual-next/use/coc7.html#sc-理智检定","608":"/sealdice-manual-next/use/coc7.html#指定损失的理智","609":"/sealdice-manual-next/use/coc7.html#简略写法","610":"/sealdice-manual-next/use/coc7.html#奖励骰和惩罚骰-1","611":"/sealdice-manual-next/use/coc7.html#代骰-3","612":"/sealdice-manual-next/use/coc7.html#ti-li-疯狂发作症状","613":"/sealdice-manual-next/use/coc7.html#en-技能成长","614":"/sealdice-manual-next/use/coc7.html#进行技能成长","615":"/sealdice-manual-next/use/coc7.html#指定成长值","616":"/sealdice-manual-next/use/coc7.html#coc-生成随机属性-制卡","617":"/sealdice-manual-next/use/coc7.html#setcoc-设置房规","618":"/sealdice-manual-next/use/coc7.html#显示当前房规","619":"/sealdice-manual-next/use/coc7.html#列出可用房规","620":"/sealdice-manual-next/use/coc7.html#设定房规","621":"/sealdice-manual-next/use/core.html#核心指令","622":"/sealdice-manual-next/use/core.html#master-骰主指令","623":"/sealdice-manual-next/use/core.html#ban-黑白名单指令","624":"/sealdice-manual-next/use/core.html#bot-骰子管理","625":"/sealdice-manual-next/use/core.html#ext-扩展管理","626":"/sealdice-manual-next/use/core.html#set-骰子面数管理","627":"/sealdice-manual-next/use/core.html#r-骰点","628":"/sealdice-manual-next/use/core.html#常用示例","629":"/sealdice-manual-next/use/core.html#多轮骰点","630":"/sealdice-manual-next/use/core.html#在骰点中使用属性值","631":"/sealdice-manual-next/use/core.html#奖励骰与惩罚骰","632":"/sealdice-manual-next/use/core.html#优势骰与劣势骰","633":"/sealdice-manual-next/use/core.html#fvtt-骰点兼容","634":"/sealdice-manual-next/use/core.html#fate-命运骰","635":"/sealdice-manual-next/use/core.html#wod-骰点","636":"/sealdice-manual-next/use/core.html#双十字骰点","637":"/sealdice-manual-next/use/core.html#混合运算","638":"/sealdice-manual-next/use/core.html#rh-暗骰","639":"/sealdice-manual-next/use/core.html#rx-rxh-特殊骰点","640":"/sealdice-manual-next/use/core.html#nn-角色名设定","641":"/sealdice-manual-next/use/core.html#pc-角色卡管理","642":"/sealdice-manual-next/use/core.html#find-词条查询指令","643":"/sealdice-manual-next/use/core.html#指定默认查询分组","644":"/sealdice-manual-next/use/core.html#全文搜索","645":"/sealdice-manual-next/use/core.html#快速文档查找","646":"/sealdice-manual-next/use/core.html#致谢","647":"/sealdice-manual-next/use/core.html#help-帮助指令","648":"/sealdice-manual-next/use/core.html#set-设定默认骰子面数-设定游戏系统","649":"/sealdice-manual-next/use/core.html#botlist-机器人列表","650":"/sealdice-manual-next/use/deck_and_reply.html#牌堆-自定义回复","651":"/sealdice-manual-next/use/deck_and_reply.html#draw-抽牌-管理牌堆","652":"/sealdice-manual-next/use/deck_and_reply.html#信息查询","653":"/sealdice-manual-next/use/deck_and_reply.html#抽牌","654":"/sealdice-manual-next/use/deck_and_reply.html#自定义回复引用牌堆","655":"/sealdice-manual-next/use/deck_and_reply.html#牌堆管理","656":"/sealdice-manual-next/use/deck_and_reply.html#reply-管理自定义回复","657":"/sealdice-manual-next/use/dnd5e.html#龙与地下城-5e","658":"/sealdice-manual-next/use/dnd5e.html#dnd-dndx-生成随机属性-制卡","659":"/sealdice-manual-next/use/dnd5e.html#ri-先攻设置","660":"/sealdice-manual-next/use/dnd5e.html#init-先攻列表","661":"/sealdice-manual-next/use/dnd5e.html#st-操作角色卡","662":"/sealdice-manual-next/use/dnd5e.html#st-help-获取帮助信息","663":"/sealdice-manual-next/use/dnd5e.html#列出属性","664":"/sealdice-manual-next/use/dnd5e.html#删除属性","665":"/sealdice-manual-next/use/dnd5e.html#更新属性值","666":"/sealdice-manual-next/use/dnd5e.html#代骰","667":"/sealdice-manual-next/use/dnd5e.html#rc-检定","668":"/sealdice-manual-next/use/dnd5e.html#代骰-1","669":"/sealdice-manual-next/use/dnd5e.html#奇妙运用","670":"/sealdice-manual-next/use/dnd5e.html#buff-临时属性","671":"/sealdice-manual-next/use/dnd5e.html#代骰-2","672":"/sealdice-manual-next/use/dnd5e.html#ss-法术位-spell-slots","673":"/sealdice-manual-next/use/dnd5e.html#代骰-3","674":"/sealdice-manual-next/use/dnd5e.html#cast-使用法术位","675":"/sealdice-manual-next/use/dnd5e.html#代骰-4","676":"/sealdice-manual-next/use/dnd5e.html#longrest-长休","677":"/sealdice-manual-next/use/dnd5e.html#代骰-5","678":"/sealdice-manual-next/use/dnd5e.html#ds-死亡豁免","679":"/sealdice-manual-next/use/dnd5e.html#代骰-6","680":"/sealdice-manual-next/use/faq.html#常见问题","681":"/sealdice-manual-next/use/faq.html#为啥海豹不理我","682":"/sealdice-manual-next/use/faq.html#可以关闭暗骰吗","683":"/sealdice-manual-next/use/faq.html#退群指令","684":"/sealdice-manual-next/use/faq.html#登录服务器开浏览器使用好麻烦-能远程直接访问-webui-吗","685":"/sealdice-manual-next/use/faq.html#在服务器上登录时说「需要在同一-wifi-下扫码」怎么办","686":"/sealdice-manual-next/use/faq.html#_1-首选-让手机跟服务器真的处于同一个网络","687":"/sealdice-manual-next/use/faq.html#_2-本机上完成扫码登录-然后将登录过的配置文件覆盖到服务器上","688":"/sealdice-manual-next/use/faq.html#at-其他骰子做检定的时候-海豹也会回应-怎么办","689":"/sealdice-manual-next/use/faq.html#为啥好像反应慢一拍","690":"/sealdice-manual-next/use/faq.html#我希望在我的骰子进群或者被踢出时通知我","691":"/sealdice-manual-next/use/faq.html#支持-qq-频道吗","692":"/sealdice-manual-next/use/faq.html#怎么同时运行多个海豹","693":"/sealdice-manual-next/use/faq.html#windows-系统","694":"/sealdice-manual-next/use/faq.html#如果你想在-windows-系统指定端口-需要一点操作","695":"/sealdice-manual-next/use/faq.html#除-android-外的其他系统","696":"/sealdice-manual-next/use/faq.html#我机器上启动非常慢-而且托盘点不出来右键菜单","697":"/sealdice-manual-next/use/faq.html#能在手机上搭建吗","698":"/sealdice-manual-next/use/faq.html#我是-master-怎么帮人取出-log","699":"/sealdice-manual-next/use/faq.html#我忘了-webui-密码","700":"/sealdice-manual-next/use/fun.html#功能","701":"/sealdice-manual-next/use/fun.html#jrrp-今日人品","702":"/sealdice-manual-next/use/fun.html#gugu-人工智能鸽子","703":"/sealdice-manual-next/use/fun.html#jsr-不重复骰点","704":"/sealdice-manual-next/use/fun.html#drl-骰池抽取","705":"/sealdice-manual-next/use/fun.html#text-文本模板测试","706":"/sealdice-manual-next/use/fun.html#send-向骰主发送消息-回复消息","707":"/sealdice-manual-next/use/fun.html#welcome-新人入群欢迎","708":"/sealdice-manual-next/use/fun.html#ping-指令响应测试","709":"/sealdice-manual-next/use/fun.html#alias-定义快捷指令-使用快捷指令","710":"/sealdice-manual-next/use/fun.html#额外-trpg-规则支持","711":"/sealdice-manual-next/use/fun.html#ww-wod-规则骰点","712":"/sealdice-manual-next/use/fun.html#dx-双重十字规则骰点","713":"/sealdice-manual-next/use/fun.html#ek-共鸣性怪异规则骰点","714":"/sealdice-manual-next/use/fun.html#ekgen-共鸣性怪异规则属性生成","715":"/sealdice-manual-next/use/fun.html#rsr-暗影狂奔规则骰点","716":"/sealdice-manual-next/use/introduce.html#基础概念","717":"/sealdice-manual-next/use/introduce.html#什么是骰子","718":"/sealdice-manual-next/use/introduce.html#获取和使用","719":"/sealdice-manual-next/use/introduce.html#指令回复","720":"/sealdice-manual-next/use/introduce.html#指令前缀","721":"/sealdice-manual-next/use/introduce.html#指令名","722":"/sealdice-manual-next/use/introduce.html#指令参数","723":"/sealdice-manual-next/use/introduce.html#指令标志","724":"/sealdice-manual-next/use/introduce.html#自定义回复","725":"/sealdice-manual-next/use/log.html#日志","726":"/sealdice-manual-next/use/log.html#log-跑团日志","727":"/sealdice-manual-next/use/log.html#记录日志","728":"/sealdice-manual-next/use/log.html#数据统计","729":"/sealdice-manual-next/use/log.html#管理日志","730":"/sealdice-manual-next/use/log.html#骰主代取-log","731":"/sealdice-manual-next/use/log.html#ob-旁观","732":"/sealdice-manual-next/use/log.html#sn-自动群名片","733":"/sealdice-manual-next/use/log.html#预设模板","734":"/sealdice-manual-next/use/log.html#扩展规则","735":"/sealdice-manual-next/use/log.html#自定义模板","736":"/sealdice-manual-next/use/log.html#关闭自动修改","737":"/sealdice-manual-next/use/log.html#hiy-数据统计","738":"/sealdice-manual-next/use/other_rules.html#其它规则支持","739":"/sealdice-manual-next/use/other_rules.html#绿色三角洲-delta-green","740":"/sealdice-manual-next/use/other_rules.html#黑暗世界-world-of-darkness","741":"/sealdice-manual-next/use/other_rules.html#双重十字-double-cross","742":"/sealdice-manual-next/use/other_rules.html#暗影狂奔-shadowrun","743":"/sealdice-manual-next/use/other_rules.html#共鸣性怪异-emoklore","744":"/sealdice-manual-next/use/other_rules.html#更多规则","745":"/sealdice-manual-next/use/quick-start.html#快速上手","746":"/sealdice-manual-next/use/quick-start.html#常用指令速查","747":"/sealdice-manual-next/use/quick-start.html#通常流程","748":"/sealdice-manual-next/use/quick-start.html#秘密团","749":"/sealdice-manual-next/use/quick-start.html#进行-coc-游戏","750":"/sealdice-manual-next/use/quick-start.html#创作角色卡","751":"/sealdice-manual-next/use/quick-start.html#理智检定-san-check","752":"/sealdice-manual-next/use/quick-start.html#抽取疯狂症状","753":"/sealdice-manual-next/use/quick-start.html#技能成长","754":"/sealdice-manual-next/use/quick-start.html#进行-d-d-游戏","755":"/sealdice-manual-next/use/quick-start.html#创作角色卡-1","756":"/sealdice-manual-next/use/quick-start.html#设定先攻值","757":"/sealdice-manual-next/use/quick-start.html#设定临时属性","758":"/sealdice-manual-next/use/quick-start.html#法术位","759":"/sealdice-manual-next/use/quick-start.html#长休","760":"/sealdice-manual-next/use/quick-start.html#死亡豁免","761":"/sealdice-manual-next/use/story.html#故事","762":"/sealdice-manual-next/use/story.html#name-随机名字","763":"/sealdice-manual-next/use/story.html#namednd-随机-dnd-名字","764":"/sealdice-manual-next/use/story.html#who-随机排列顺序","765":"/sealdice-manual-next/use/story.html#modu-魔都模组查询"},"fieldIds":{"title":0,"titles":1,"text":2},"fieldLength":{"0":[1,1,1],"1":[1,1,11],"2":[1,1,9],"3":[1,1,11],"4":[1,1,8],"5":[1,1,40],"6":[2,1,1],"7":[3,3,19],"8":[1,3,9],"9":[1,1,9],"10":[1,2,26],"11":[2,2,24],"12":[1,2,30],"13":[4,2,28],"14":[5,2,12],"15":[1,1,76],"16":[1,1,13],"17":[2,1,10],"18":[2,1,17],"19":[2,1,16],"20":[2,1,13],"21":[2,1,7],"22":[1,1,5],"23":[1,1,1],"24":[1,2,26],"25":[1,2,12],"26":[1,3,34],"27":[1,3,15],"28":[1,3,5],"29":[1,1,5],"30":[1,1,27],"31":[1,1,31],"32":[2,2,10],"33":[2,2,45],"34":[2,2,28],"35":[2,2,32],"36":[2,2,29],"37":[2,2,51],"38":[2,2,29],"39":[2,2,13],"40":[2,2,19],"41":[1,2,7],"42":[2,3,4],"43":[2,3,6],"44":[2,2,3],"45":[2,2,32],"46":[2,2,28],"47":[2,2,28],"48":[1,1,99],"49":[1,1,1],"50":[1,2,23],"51":[1,3,38],"52":[1,2,31],"53":[1,2,19],"54":[1,3,30],"55":[1,2,10],"56":[1,3,48],"57":[1,2,84],"58":[1,2,35],"59":[1,2,23],"60":[2,1,1],"61":[1,3,54],"62":[1,3,25],"63":[2,4,22],"64":[1,4,79],"65":[1,1,12],"66":[3,1,66],"67":[4,4,56],"68":[3,1,65],"69":[1,1,38],"70":[1,1,40],"71":[1,1,1],"72":[2,2,44],"73":[2,2,57],"74":[1,2,10],"75":[1,1,6],"76":[1,2,14],"77":[1,2,27],"78":[3,3,61],"79":[2,3,19],"80":[1,1,1],"81":[1,2,55],"82":[1,2,41],"83":[2,2,39],"84":[2,2,74],"85":[4,2,8],"86":[1,2,1],"87":[1,2,23],"88":[1,1,5],"89":[1,1,17],"90":[3,1,72],"91":[1,1,15],"92":[1,1,12],"93":[2,1,43],"94":[2,1,291],"95":[3,2,14],"96":[2,2,19],"97":[2,2,29],"98":[2,2,38],"99":[1,2,23],"100":[1,2,6],"101":[1,2,8],"102":[1,2,16],"103":[3,2,20],"104":[1,2,30],"105":[2,2,62],"106":[3,2,24],"107":[3,2,9],"108":[3,2,19],"109":[2,2,37],"110":[2,2,53],"111":[1,1,1],"112":[1,1,58],"113":[1,1,7],"114":[1,2,79],"115":[1,2,53],"116":[1,2,80],"117":[1,2,134],"118":[1,1,32],"119":[2,2,93],"120":[1,1,61],"121":[2,2,74],"122":[2,1,1],"123":[1,3,27],"124":[1,3,17],"125":[2,3,38],"126":[2,3,13],"127":[3,3,127],"128":[1,1,37],"129":[2,2,98],"130":[2,2,158],"131":[1,1,44],"132":[1,1,3],"133":[1,1,89],"134":[1,1,95],"135":[1,1,127],"136":[3,1,83],"137":[2,1,44],"138":[1,1,65],"139":[2,2,119],"140":[1,1,23],"141":[2,2,82],"142":[1,2,42],"143":[3,1,22],"144":[1,3,15],"145":[1,3,43],"146":[3,3,38],"147":[3,3,40],"148":[1,1,28],"149":[2,1,26],"150":[1,1,29],"151":[1,1,20],"152":[1,1,38],"153":[1,1,1],"154":[4,2,34],"155":[6,2,19],"156":[3,2,13],"157":[1,1,29],"158":[1,1,114],"159":[1,1,82],"160":[1,1,1],"161":[3,2,30],"162":[1,2,23],"163":[1,1,1],"164":[1,2,20],"165":[1,2,61],"166":[1,2,26],"167":[1,1,32],"168":[1,1,9],"169":[1,1,1],"170":[4,2,22],"171":[1,1,12],"172":[1,1,162],"173":[1,1,38],"174":[1,1,23],"175":[1,1,1],"176":[1,2,11],"177":[1,2,7],"178":[1,2,24],"179":[1,2,1],"180":[2,3,14],"181":[2,3,30],"182":[2,3,8],"183":[1,1,24],"184":[1,1,10],"185":[1,1,22],"186":[3,1,16],"187":[5,1,39],"188":[2,1,7],"189":[3,3,45],"190":[2,3,67],"191":[2,3,15],"192":[5,3,27],"193":[5,1,31],"194":[1,1,1],"195":[1,1,13],"196":[3,2,42],"197":[3,2,3],"198":[10,2,7],"199":[2,2,37],"200":[3,2,17],"201":[5,2,39],"202":[5,2,28],"203":[1,1,31],"204":[1,2,12],"205":[1,2,17],"206":[1,2,84],"207":[1,2,59],"208":[1,2,1],"209":[1,3,42],"210":[1,3,42],"211":[2,3,19],"212":[1,2,9],"213":[1,1,28],"214":[1,2,16],"215":[1,2,12],"216":[2,2,1],"217":[1,4,23],"218":[1,4,8],"219":[1,4,4],"220":[1,4,6],"221":[1,4,9],"222":[2,2,8],"223":[2,4,24],"224":[2,4,51],"225":[2,4,50],"226":[2,4,23],"227":[1,4,27],"228":[2,2,1],"229":[2,4,10],"230":[2,4,18],"231":[1,2,1],"232":[2,3,15],"233":[5,3,20],"234":[1,2,10],"235":[1,1,1],"236":[3,1,36],"237":[1,4,14],"238":[2,5,52],"239":[1,5,62],"240":[2,4,8],"241":[1,6,39],"242":[1,6,85],"243":[2,4,1],"244":[3,6,3],"245":[3,6,16],"246":[4,6,13],"247":[4,6,14],"248":[4,6,8],"249":[5,6,6],"250":[7,6,8],"251":[3,6,13],"252":[9,6,34],"253":[3,1,32],"254":[1,1,114],"255":[1,2,13],"256":[3,2,48],"257":[3,2,39],"258":[2,2,42],"259":[1,2,54],"260":[1,2,7],"261":[2,1,41],"262":[2,3,119],"263":[2,3,23],"264":[2,3,23],"265":[1,3,27],"266":[2,1,14],"267":[1,2,1],"268":[2,3,12],"269":[1,2,1],"270":[1,3,4],"271":[1,2,1],"272":[1,3,41],"273":[1,2,1],"274":[1,3,23],"275":[1,2,1],"276":[1,3,3],"277":[1,2,1],"278":[2,3,91],"279":[1,3,21],"280":[1,2,1],"281":[1,3,6],"282":[1,2,1],"283":[1,3,17],"284":[1,2,1],"285":[1,3,33],"286":[1,3,17],"287":[1,3,17],"288":[1,3,3],"289":[1,2,1],"290":[1,3,26],"291":[1,3,6],"292":[1,3,36],"293":[1,2,1],"294":[1,3,18],"295":[1,3,18],"296":[1,2,1],"297":[1,3,3],"298":[1,2,1],"299":[1,3,33],"300":[1,2,1],"301":[1,3,13],"302":[1,3,42],"303":[1,2,1],"304":[1,3,6],"305":[1,2,1],"306":[1,3,7],"307":[1,3,23],"308":[2,3,4],"309":[2,3,30],"310":[1,2,1],"311":[1,3,6],"312":[1,2,1],"313":[1,3,22],"314":[1,1,27],"315":[1,1,40],"316":[1,1,8],"317":[1,1,14],"318":[1,1,8],"319":[1,2,8],"320":[1,2,15],"321":[1,1,11],"322":[1,1,5],"323":[2,1,13],"324":[1,1,1],"325":[2,2,7],"326":[1,2,4],"327":[1,2,9],"328":[1,1,20],"329":[1,1,3],"330":[2,1,4],"331":[2,3,9],"332":[2,3,12],"333":[1,3,17],"334":[1,4,22],"335":[1,1,7],"336":[1,2,8],"337":[1,2,9],"338":[2,2,10],"339":[1,1,5],"340":[1,1,11],"341":[1,1,34],"342":[3,1,9],"343":[3,1,7],"344":[1,1,18],"345":[1,1,9],"346":[1,1,23],"347":[1,1,29],"348":[2,1,7],"349":[1,1,24],"350":[1,1,29],"351":[1,1,5],"352":[2,1,16],"353":[1,1,7],"354":[1,2,26],"355":[1,2,28],"356":[1,1,32],"357":[1,1,8],"358":[3,1,6],"359":[2,1,8],"360":[1,1,5],"361":[2,1,17],"362":[2,1,33],"363":[1,3,58],"364":[1,3,25],"365":[2,3,20],"366":[1,1,5],"367":[1,2,4],"368":[4,3,34],"369":[3,3,10],"370":[3,3,16],"371":[3,3,34],"372":[1,2,1],"373":[3,3,22],"374":[3,3,20],"375":[3,1,25],"376":[1,1,15],"377":[1,1,13],"378":[1,1,6],"379":[1,1,1],"380":[2,2,4],"381":[1,1,9],"382":[1,1,5],"383":[2,1,18],"384":[1,1,9],"385":[3,1,30],"386":[2,1,22],"387":[1,1,3],"388":[1,2,14],"389":[1,2,15],"390":[2,1,4],"391":[1,1,5],"392":[2,1,5],"393":[1,1,23],"394":[2,1,14],"395":[2,1,38],"396":[1,3,19],"397":[1,3,9],"398":[1,3,5],"399":[1,3,5],"400":[2,1,4],"401":[2,1,7],"402":[2,2,13],"403":[3,2,11],"404":[4,2,16],"405":[1,5,20],"406":[1,5,14],"407":[1,5,10],"408":[1,5,7],"409":[4,2,7],"410":[4,2,6],"411":[1,1,5],"412":[2,1,24],"413":[2,1,20],"414":[1,3,38],"415":[2,3,13],"416":[1,3,12],"417":[1,3,19],"418":[1,1,20],"419":[1,2,34],"420":[1,3,48],"421":[1,3,16],"422":[1,2,23],"423":[1,3,10],"424":[1,1,6],"425":[1,1,25],"426":[1,1,20],"427":[1,1,27],"428":[1,1,16],"429":[1,1,4],"430":[2,1,52],"431":[1,1,34],"432":[1,1,2],"433":[1,1,2],"434":[1,1,2],"435":[1,1,3],"436":[1,1,5],"437":[2,1,4],"438":[1,1,4],"439":[1,1,1],"440":[2,2,8],"441":[4,2,30],"442":[1,1,30],"443":[1,1,20],"444":[1,1,9],"445":[1,1,3],"446":[1,1,27],"447":[1,1,35],"448":[4,1,22],"449":[4,1,12],"450":[3,1,31],"451":[4,1,14],"452":[1,1,1],"453":[1,2,16],"454":[1,2,12],"455":[1,2,9],"456":[1,1,9],"457":[1,1,53],"458":[1,2,18],"459":[2,1,26],"460":[2,1,70],"461":[1,1,3],"462":[1,1,5],"463":[1,1,5],"464":[2,1,34],"465":[1,1,18],"466":[1,1,36],"467":[1,1,5],"468":[1,1,6],"469":[6,1,18],"470":[1,1,15],"471":[1,1,27],"472":[1,1,6],"473":[2,1,16],"474":[1,1,21],"475":[1,1,18],"476":[1,1,5],"477":[2,1,11],"478":[3,1,44],"479":[1,3,32],"480":[1,3,94],"481":[4,3,44],"482":[3,1,41],"483":[3,1,1],"484":[1,4,2],"485":[3,5,3],"486":[3,5,5],"487":[1,4,2],"488":[2,5,5],"489":[3,1,15],"490":[5,3,11],"491":[4,8,88],"492":[1,8,15],"493":[2,8,47],"494":[2,8,25],"495":[3,8,10],"496":[3,3,23],"497":[1,5,74],"498":[1,5,28],"499":[2,1,37],"500":[1,2,3],"501":[1,2,39],"502":[1,2,7],"503":[1,2,37],"504":[1,2,81],"505":[1,2,16],"506":[1,2,6],"507":[1,3,7],"508":[1,3,7],"509":[1,3,14],"510":[1,1,5],"511":[1,1,1],"512":[3,2,70],"513":[1,2,78],"514":[1,1,67],"515":[1,1,37],"516":[1,2,31],"517":[2,3,5],"518":[2,3,17],"519":[1,2,31],"520":[2,3,4],"521":[2,3,47],"522":[1,2,29],"523":[2,3,8],"524":[1,3,15],"525":[1,2,7],"526":[2,3,5],"527":[3,3,6],"528":[1,1,5],"529":[2,1,4],"530":[2,1,24],"531":[2,3,36],"532":[2,3,42],"533":[1,1,12],"534":[1,1,5],"535":[2,1,27],"536":[1,1,18],"537":[1,1,13],"538":[1,1,83],"539":[1,1,127],"540":[1,1,16],"541":[3,1,61],"542":[1,1,14],"543":[1,2,25],"544":[1,2,5],"545":[1,2,11],"546":[1,2,7],"547":[1,1,3],"548":[1,1,20],"549":[1,1,26],"550":[1,1,27],"551":[1,1,8],"552":[1,1,10],"553":[1,1,13],"554":[1,1,1],"555":[2,2,1],"556":[2,1,1],"557":[1,3,4],"558":[1,3,6],"559":[3,3,5],"560":[3,1,1],"561":[1,4,4],"562":[1,4,18],"563":[1,4,1],"564":[1,4,1],"565":[1,4,1],"566":[1,4,1],"567":[1,4,1],"568":[1,1,13],"569":[2,1,50],"570":[1,1,51],"571":[1,1,8],"572":[2,1,34],"573":[1,1,11],"574":[1,1,7],"575":[1,1,14],"576":[6,2,15],"577":[1,1,43],"578":[1,1,9],"579":[1,1,16],"580":[2,1,22],"581":[1,1,8],"582":[1,1,103],"583":[1,1,39],"584":[3,1,30],"585":[3,3,18],"586":[4,5,3],"587":[1,5,8],"588":[1,5,9],"589":[1,5,19],"590":[1,5,12],"591":[1,5,27],"592":[1,5,6],"593":[1,5,26],"594":[4,3,22],"595":[1,6,31],"596":[1,6,21],"597":[1,6,25],"598":[1,6,29],"599":[1,6,17],"600":[1,6,22],"601":[4,3,12],"602":[1,6,23],"603":[4,3,24],"604":[1,6,25],"605":[1,6,32],"606":[1,6,16],"607":[3,3,6],"608":[1,5,18],"609":[1,5,9],"610":[1,5,9],"611":[1,5,15],"612":[4,3,23],"613":[3,3,9],"614":[1,5,19],"615":[1,5,20],"616":[4,3,52],"617":[3,3,2],"618":[1,5,4],"619":[1,5,41],"620":[1,5,6],"621":[1,1,6],"622":[3,1,62],"623":[3,1,46],"624":[3,1,22],"625":[3,1,57],"626":[3,1,20],"627":[3,1,8],"628":[1,3,45],"629":[1,3,9],"630":[1,3,11],"631":[1,3,34],"632":[1,3,34],"633":[2,3,24],"634":[2,3,20],"635":[2,3,84],"636":[1,3,54],"637":[1,3,65],"638":[3,1,24],"639":[4,1,38],"640":[3,1,29],"641":[3,1,45],"642":[3,1,65],"643":[1,3,16],"644":[1,3,15],"645":[1,3,2],"646":[1,3,26],"647":[3,1,11],"648":[4,1,37],"649":[3,1,29],"650":[2,1,12],"651":[4,2,8],"652":[1,5,60],"653":[1,5,38],"654":[1,5,6],"655":[1,5,7],"656":[3,2,11],"657":[2,1,23],"658":[5,2,50],"659":[3,2,57],"660":[3,2,42],"661":[3,2,1],"662":[4,4,1],"663":[1,4,13],"664":[1,4,10],"665":[1,4,105],"666":[1,4,4],"667":[3,2,42],"668":[1,4,4],"669":[1,4,22],"670":[3,2,55],"671":[1,4,5],"672":[5,2,49],"673":[1,7,4],"674":[3,2,15],"675":[1,4,4],"676":[3,2,17],"677":[1,4,4],"678":[3,2,59],"679":[1,4,4],"680":[1,1,6],"681":[2,1,30],"682":[2,1,5],"683":[2,1,10],"684":[5,1,47],"685":[5,1,6],"686":[3,6,126],"687":[3,6,15],"688":[4,1,14],"689":[1,1,15],"690":[1,1,22],"691":[4,1,18],"692":[2,1,1],"693":[2,3,18],"694":[4,4,22],"695":[3,3,19],"696":[3,1,12],"697":[2,1,5],"698":[5,1,6],"699":[3,1,10],"700":[1,1,15],"701":[3,1,9],"702":[3,1,13],"703":[3,1,21],"704":[3,1,32],"705":[3,1,8],"706":[4,1,38],"707":[3,1,17],"708":[3,1,40],"709":[5,1,52],"710":[3,1,1],"711":[4,4,53],"712":[3,4,9],"713":[3,4,8],"714":[3,4,6],"715":[3,4,21],"716":[1,1,11],"717":[2,1,24],"718":[1,1,50],"719":[1,2,6],"720":[1,3,20],"721":[1,3,32],"722":[1,3,70],"723":[1,3,23],"724":[1,2,12],"725":[1,1,5],"726":[3,1,1],"727":[1,3,46],"728":[1,3,11],"729":[1,3,37],"730":[2,3,29],"731":[3,1,11],"732":[3,1,9],"733":[1,3,22],"734":[1,3,9],"735":[1,3,19],"736":[1,3,3],"737":[3,1,2],"738":[1,1,8],"739":[3,1,28],"740":[4,1,19],"741":[3,1,17],"742":[2,1,12],"743":[2,1,12],"744":[1,1,9],"745":[1,1,7],"746":[1,1,134],"747":[1,1,47],"748":[1,2,15],"749":[3,2,1],"750":[1,5,6],"751":[3,5,12],"752":[1,5,7],"753":[1,5,6],"754":[4,2,1],"755":[1,6,6],"756":[1,6,15],"757":[1,6,9],"758":[1,6,8],"759":[1,6,3],"760":[1,6,6],"761":[1,1,5],"762":[3,1,17],"763":[5,1,22],"764":[3,1,7],"765":[3,1,22]},"averageFieldLength":[1.7441253263707575,2.2415143603133165,23.665796344647514],"storedFields":{"0":{"title":"关于","titles":[]},"1":{"title":"官方站点","titles":["关于"]},"2":{"title":"投喂","titles":["关于"]},"3":{"title":"手册贡献者","titles":["关于"]},"4":{"title":"开源","titles":["关于"]},"5":{"title":"参与项目","titles":[]},"6":{"title":"如何参与项目?","titles":["参与项目"]},"7":{"title":"Bug 反馈、功能建议","titles":["参与项目","如何参与项目?"]},"8":{"title":"提交修改","titles":["参与项目","如何参与项目?"]},"9":{"title":"贡献指南","titles":["参与项目"]},"10":{"title":"整体流程","titles":["参与项目","贡献指南"]},"11":{"title":"对目标仓库进行 fork","titles":["参与项目","贡献指南"]},"12":{"title":"切出工作分支","titles":["参与项目","贡献指南"]},"13":{"title":"发起 Pull Request 请求","titles":["参与项目","贡献指南"]},"14":{"title":"保持 fork 仓库与上游同步(可选)","titles":["参与项目","贡献指南"]},"15":{"title":"许可协议","titles":[]},"16":{"title":"从零开始","titles":[]},"17":{"title":"1. 部署海豹","titles":["从零开始"]},"18":{"title":"2. 连接平台","titles":["从零开始"]},"19":{"title":"3. 熟悉海豹核心的功能","titles":["从零开始"]},"20":{"title":"4. 熟悉指令","titles":["从零开始"]},"21":{"title":"5. 进阶自定义","titles":["从零开始"]},"22":{"title":"编写复杂文案","titles":[]},"23":{"title":"示例","titles":["编写复杂文案"]},"24":{"title":"根据骰点结果展示不同文案","titles":["编写复杂文案","示例"]},"25":{"title":"多套文案的实现","titles":["编写复杂文案","示例"]},"26":{"title":"切换命令实现","titles":["编写复杂文案","示例","多套文案的实现"]},"27":{"title":"文案调整","titles":["编写复杂文案","示例","多套文案的实现"]},"28":{"title":"展示","titles":["编写复杂文案","示例","多套文案的实现"]},"29":{"title":"编写牌堆","titles":[]},"30":{"title":"概览","titles":["编写牌堆"]},"31":{"title":"语法快速入门","titles":["编写牌堆"]},"32":{"title":"TOML 注释","titles":["编写牌堆","语法快速入门"]},"33":{"title":"TOML 键值对","titles":["编写牌堆","语法快速入门"]},"34":{"title":"TOML 键名","titles":["编写牌堆","语法快速入门"]},"35":{"title":"TOML 字符串","titles":["编写牌堆","语法快速入门"]},"36":{"title":"TOML 表","titles":["编写牌堆","语法快速入门"]},"37":{"title":"TOML 数组","titles":["编写牌堆","语法快速入门"]},"38":{"title":"JSON 键值","titles":["编写牌堆","语法快速入门"]},"39":{"title":"JSON 数组","titles":["编写牌堆","语法快速入门"]},"40":{"title":"JSON 对象","titles":["编写牌堆","语法快速入门"]},"41":{"title":"注释","titles":["编写牌堆","语法快速入门"]},"42":{"title":"1. 行内注释","titles":["编写牌堆","语法快速入门","注释"]},"43":{"title":"2. 注释块","titles":["编写牌堆","语法快速入门","注释"]},"44":{"title":"YAML 注释","titles":["编写牌堆","语法快速入门"]},"45":{"title":"YAML 键值","titles":["编写牌堆","语法快速入门"]},"46":{"title":"YAML 对象","titles":["编写牌堆","语法快速入门"]},"47":{"title":"YAML 数组","titles":["编写牌堆","语法快速入门"]},"48":{"title":"基础牌堆编写","titles":["编写牌堆"]},"49":{"title":"牌堆语法","titles":["编写牌堆"]},"50":{"title":"一个项中抽取其他项","titles":["编写牌堆","牌堆语法"]},"51":{"title":"放回抽取与不放回抽取","titles":["编写牌堆","牌堆语法","一个项中抽取其他项"]},"52":{"title":"插入掷骰表达式","titles":["编写牌堆","牌堆语法"]},"53":{"title":"权重","titles":["编写牌堆","牌堆语法"]},"54":{"title":"权重与不放回抽取","titles":["编写牌堆","牌堆语法","权重"]},"55":{"title":"发送图片等","titles":["编写牌堆","牌堆语法"]},"56":{"title":"牌堆打包","titles":["编写牌堆","牌堆语法","发送图片等"]},"57":{"title":"牌组的隐藏和导出控制","titles":["编写牌堆","牌堆语法"]},"58":{"title":"配置牌堆更新","titles":["编写牌堆","牌堆语法"]},"59":{"title":"插入海豹内置脚本语言","titles":["编写牌堆","牌堆语法"]},"60":{"title":"TOML 牌堆的更多功能","titles":["编写牌堆"]},"61":{"title":"更多牌组设置","titles":["编写牌堆","TOML 牌堆的更多功能"]},"62":{"title":"云端内容","titles":["编写牌堆","TOML 牌堆的更多功能"]},"63":{"title":"API 接口要求","titles":["编写牌堆","TOML 牌堆的更多功能","云端内容"]},"64":{"title":"牌堆配置云端内容","titles":["编写牌堆","TOML 牌堆的更多功能","云端内容"]},"65":{"title":"编写帮助文档","titles":[]},"66":{"title":"创建 JSON 格式的帮助文档","titles":["编写帮助文档"]},"67":{"title":"示例文档:塔罗牌(节选)","titles":["编写帮助文档","创建 JSON 格式的帮助文档"]},"68":{"title":"创建 EXCEL 格式的帮助文档","titles":["编写帮助文档"]},"69":{"title":"编写自定义回复","titles":[]},"70":{"title":"第一个自定义回复","titles":["编写自定义回复"]},"71":{"title":"触发条件","titles":["编写自定义回复"]},"72":{"title":"文本匹配:模糊匹配","titles":["编写自定义回复","触发条件"]},"73":{"title":"文本匹配:正则匹配","titles":["编写自定义回复","触发条件"]},"74":{"title":"表达式为真","titles":["编写自定义回复","触发条件"]},"75":{"title":"回复结果","titles":["编写自定义回复"]},"76":{"title":"嵌入脚本语言","titles":["编写自定义回复","回复结果"]},"77":{"title":"执行块","titles":["编写自定义回复","回复结果"]},"78":{"title":"示例:使用 if","titles":["编写自定义回复","回复结果","执行块"]},"79":{"title":"示例:变量运算","titles":["编写自定义回复","回复结果","执行块"]},"80":{"title":"更多示例片段","titles":["编写自定义回复"]},"81":{"title":"牌堆与自定义回复的结合","titles":["编写自定义回复","更多示例片段"]},"82":{"title":"多行回复的错误使用","titles":["编写自定义回复","更多示例片段"]},"83":{"title":"限定每人/每群每天一次","titles":["编写自定义回复","更多示例片段"]},"84":{"title":"条件语句嵌套条件算符,多条件条件语句","titles":["编写自定义回复","更多示例片段"]},"85":{"title":"同时使用前缀和后缀匹配,以匹配 AxxxxxxxB 型文本","titles":["编写自定义回复","更多示例片段"]},"86":{"title":"随机看图","titles":["编写自定义回复","更多示例片段"]},"87":{"title":"单人模组","titles":["编写自定义回复","更多示例片段"]},"88":{"title":"编写敏感词库","titles":[]},"89":{"title":"创建文本格式的敏感词库","titles":["编写敏感词库"]},"90":{"title":"创建 TOML 格式的敏感词库","titles":["编写敏感词库"]},"91":{"title":"进阶介绍","titles":[]},"92":{"title":"了解海豹语","titles":["进阶介绍"]},"93":{"title":"用什么编写?","titles":["进阶介绍"]},"94":{"title":"API 列表","titles":[]},"95":{"title":"replyGroup replyPerson replyToSender","titles":["API 列表"]},"96":{"title":"memberBan memberKick","titles":["API 列表"]},"97":{"title":"format formatTmpl","titles":["API 列表"]},"98":{"title":"getCtxProxyFirst getCtxProxyAtPos","titles":["API 列表"]},"99":{"title":"vars","titles":["API 列表"]},"100":{"title":"ext","titles":["API 列表"]},"101":{"title":"coc","titles":["API 列表"]},"102":{"title":"deck","titles":["API 列表"]},"103":{"title":"自定义 TRPG 规则相关","titles":["API 列表"]},"104":{"title":"其他","titles":["API 列表"]},"105":{"title":"ctx 的内容","titles":["API 列表"]},"106":{"title":"ctx.group 的内容","titles":["API 列表"]},"107":{"title":"ctx.player 的内容","titles":["API 列表"]},"108":{"title":"ctx.endPoint 的内容","titles":["API 列表"]},"109":{"title":"msg 的内容","titles":["API 列表"]},"110":{"title":"cmdArgs 的内容","titles":["API 列表"]},"111":{"title":"常见用法示例","titles":[]},"112":{"title":"创建和注册扩展","titles":["常见用法示例"]},"113":{"title":"自定义指令","titles":["常见用法示例"]},"114":{"title":"创建指令","titles":["常见用法示例","自定义指令"]},"115":{"title":"指令参数与返回值","titles":["常见用法示例","自定义指令"]},"116":{"title":"指令核心执行流程","titles":["常见用法示例","自定义指令"]},"117":{"title":"注册指令","titles":["常见用法示例","自定义指令"]},"118":{"title":"抽取牌堆","titles":["常见用法示例"]},"119":{"title":"示例代码:抽取牌堆","titles":["常见用法示例","抽取牌堆"]},"120":{"title":"权限识别","titles":["常见用法示例"]},"121":{"title":"示例代码:权限识别","titles":["常见用法示例","权限识别"]},"122":{"title":"黑名单 / 信任名单操作","titles":["常见用法示例"]},"123":{"title":"黑名单操作的函数","titles":["常见用法示例","黑名单 / 信任名单操作"]},"124":{"title":"信任用户名单","titles":["常见用法示例","黑名单 / 信任名单操作"]},"125":{"title":"获取黑名单 / 信任名单列表","titles":["常见用法示例","黑名单 / 信任名单操作"]},"126":{"title":"获取用户在黑名单 / 信任名单中的信息","titles":["常见用法示例","黑名单 / 信任名单操作"]},"127":{"title":"示例代码:黑名单 / 信任名单操作","titles":["常见用法示例","黑名单 / 信任名单操作"]},"128":{"title":"存取数据","titles":["常见用法示例"]},"129":{"title":"示例代码:投喂插件","titles":["常见用法示例","存取数据"]},"130":{"title":"示例代码:群内安价收集","titles":["常见用法示例","存取数据"]},"131":{"title":"数据处理模板","titles":["常见用法示例"]},"132":{"title":"读取玩家或群组数据","titles":["常见用法示例"]},"133":{"title":"编写暗骰指令","titles":["常见用法示例"]},"134":{"title":"编写代骰指令","titles":["常见用法示例"]},"135":{"title":"网络请求","titles":["常见用法示例"]},"136":{"title":"自定义 COC 规则","titles":["常见用法示例"]},"137":{"title":"补充:使用非指令关键词","titles":["常见用法示例"]},"138":{"title":"注册插件配置项","titles":["常见用法示例"]},"139":{"title":"示例代码:注册配置项","titles":["常见用法示例","注册插件配置项"]},"140":{"title":"注册定时任务","titles":["常见用法示例"]},"141":{"title":"API 参数","titles":["常见用法示例","注册定时任务"]},"142":{"title":"使用示例","titles":["常见用法示例","注册定时任务"]},"143":{"title":"编写新的 TRPG 规则","titles":[]},"144":{"title":"角色属性","titles":["编写新的 TRPG 规则"]},"145":{"title":"游戏规则","titles":["编写新的 TRPG 规则"]},"146":{"title":"规则模板是什么?有什么功能?","titles":["编写新的 TRPG 规则"]},"147":{"title":"那么,要怎么做?","titles":["编写新的 TRPG 规则"]},"148":{"title":"插件的工程化编写","titles":[]},"149":{"title":"Clone 或下载模板项目","titles":["插件的工程化编写"]},"150":{"title":"补全信息","titles":["插件的工程化编写"]},"151":{"title":"使用和编译","titles":["插件的工程化编写"]},"152":{"title":"目录结构","titles":["插件的工程化编写"]},"153":{"title":"其他问题","titles":["插件的工程化编写"]},"154":{"title":"我能在项目中引用 npm 包吗?","titles":["插件的工程化编写","其他问题"]},"155":{"title":"我想使用的 API 没有被自动提示,直接使用被提示错误,如何解决?","titles":["插件的工程化编写","其他问题"]},"156":{"title":"默认输出的插件代码是压缩过的,如何尽量保持产物的可读性?","titles":["插件的工程化编写","其他问题"]},"157":{"title":"前言","titles":[]},"158":{"title":"快速开始","titles":["前言"]},"159":{"title":"插件元数据","titles":["前言"]},"160":{"title":"插件编写","titles":["前言"]},"161":{"title":"单 JS 文件编写插件","titles":["前言","插件编写"]},"162":{"title":"插件的工程化编写","titles":["前言","插件编写"]},"163":{"title":"扩展依赖","titles":["前言"]},"164":{"title":"依赖其他扩展","titles":["前言","扩展依赖"]},"165":{"title":"指定依赖的格式","titles":["前言","扩展依赖"]},"166":{"title":"依赖多个扩展","titles":["前言","扩展依赖"]},"167":{"title":"目标海豹版本","titles":["前言"]},"168":{"title":"一些有帮助的资源","titles":["前言"]},"169":{"title":"其他问题","titles":["前言"]},"170":{"title":"我不会 JavaScript,海豹支持其他编程语言编写插件吗?","titles":["前言","其他问题"]},"171":{"title":"内置脚本语言","titles":[]},"172":{"title":"变量","titles":["内置脚本语言"]},"173":{"title":"数据类型和赋值","titles":["内置脚本语言"]},"174":{"title":"语句","titles":["内置脚本语言"]},"175":{"title":"运算符","titles":["内置脚本语言"]},"176":{"title":"数学运算","titles":["内置脚本语言","运算符"]},"177":{"title":"逻辑运算","titles":["内置脚本语言","运算符"]},"178":{"title":"骰子算符","titles":["内置脚本语言","运算符"]},"179":{"title":"条件算符","titles":["内置脚本语言","运算符"]},"180":{"title":"条件算符 ?","titles":["内置脚本语言","运算符","条件算符"]},"181":{"title":"多重条件算符 ? ,","titles":["内置脚本语言","运算符","条件算符"]},"182":{"title":"三目运算符 ? :","titles":["内置脚本语言","运算符","条件算符"]},"183":{"title":"条件语句","titles":["内置脚本语言"]},"184":{"title":"归档内容","titles":[]},"185":{"title":"开源程序相关","titles":[]},"186":{"title":"什么是开源,什么是开源程序?","titles":["开源程序相关"]},"187":{"title":"为什么我在 SealDice 用户群问问题会被要求发送截图?为什么不能拍屏?","titles":["开源程序相关"]},"188":{"title":"提问的智慧到底该怎么实现?","titles":["开源程序相关"]},"189":{"title":"遇到问题先查询资料,尝试自己思考问题所在,排除问题","titles":["开源程序相关","提问的智慧到底该怎么实现?"]},"190":{"title":"问问题要有前因后果,相对客观地陈述问题会比只表示主观情绪有用","titles":["开源程序相关","提问的智慧到底该怎么实现?"]},"191":{"title":"保持耐心,对回答问题者表现出友善和配合的态度","titles":["开源程序相关","提问的智慧到底该怎么实现?"]},"192":{"title":"如果有需要,可以去 GitHub 代码仓库上提交 issue","titles":["开源程序相关","提问的智慧到底该怎么实现?"]},"193":{"title":"什么是 GitHub?怎么提 issue?","titles":["开源程序相关"]},"194":{"title":"计算机基础知识","titles":[]},"195":{"title":"计算机小白常见问题","titles":["计算机基础知识"]},"196":{"title":"部署海豹核心为什么要解压压缩包?怎么样解压压缩包?","titles":["计算机基础知识","计算机小白常见问题"]},"197":{"title":"内存不足到底指的是哪里的内存不足?如何解决内存不足?","titles":["计算机基础知识","计算机小白常见问题"]},"198":{"title":"对于海豹核心的日志界面中「There is not enough space on the disk」的报错","titles":["计算机基础知识","计算机小白常见问题"]},"199":{"title":"如果出现莫名其妙的程序中断……","titles":["计算机基础知识","计算机小白常见问题"]},"200":{"title":"什么是开源,什么是开源程序?","titles":["计算机基础知识","计算机小白常见问题"]},"201":{"title":"为什么我在 SealDice 用户群问问题会被要求发送截图?为什么不能拍屏?","titles":["计算机基础知识","计算机小白常见问题"]},"202":{"title":"什么是 GitHub?怎么提 issue?","titles":["计算机基础知识","计算机小白常见问题"]},"203":{"title":"如何高效学习","titles":["计算机基础知识"]},"204":{"title":"前言","titles":["计算机基础知识","如何高效学习"]},"205":{"title":"掌握语言","titles":["计算机基础知识","如何高效学习"]},"206":{"title":"寻求资源","titles":["计算机基础知识","如何高效学习"]},"207":{"title":"高效搜索","titles":["计算机基础知识","如何高效学习"]},"208":{"title":"实践学习","titles":["计算机基础知识","如何高效学习"]},"209":{"title":"深度优先学习","titles":["计算机基础知识","如何高效学习","实践学习"]},"210":{"title":"广度优先学习","titles":["计算机基础知识","如何高效学习","实践学习"]},"211":{"title":"所以……","titles":["计算机基础知识","如何高效学习","实践学习"]},"212":{"title":"结语","titles":["计算机基础知识","如何高效学习"]},"213":{"title":"如何正确提问","titles":["计算机基础知识"]},"214":{"title":"前言","titles":["计算机基础知识","如何正确提问"]},"215":{"title":"提问的智慧","titles":["计算机基础知识","如何正确提问"]},"216":{"title":"提问前,你该这样做","titles":["计算机基础知识","如何正确提问"]},"217":{"title":"尝试自行排查问题","titles":["计算机基础知识","如何正确提问","提问前,你该这样做"]},"218":{"title":"尝试阅读本手册以找到答案","titles":["计算机基础知识","如何正确提问","提问前,你该这样做"]},"219":{"title":"尝试浏览用户群内的信息以找到答案","titles":["计算机基础知识","如何正确提问","提问前,你该这样做"]},"220":{"title":"尝试上网搜索以找到答案","titles":["计算机基础知识","如何正确提问","提问前,你该这样做"]},"221":{"title":"记住你做了什么","titles":["计算机基础知识","如何正确提问","提问前,你该这样做"]},"222":{"title":"提问时,你该这样做","titles":["计算机基础知识","如何正确提问"]},"223":{"title":"清晰说明你的意图和/或困难","titles":["计算机基础知识","如何正确提问","提问时,你该这样做"]},"224":{"title":"描述问题发生前,你做了什么","titles":["计算机基础知识","如何正确提问","提问时,你该这样做"]},"225":{"title":"提供问题发生时,程序的日志","titles":["计算机基础知识","如何正确提问","提问时,你该这样做"]},"226":{"title":"描述问题发生后,你尝试过的解决方案","titles":["计算机基础知识","如何正确提问","提问时,你该这样做"]},"227":{"title":"提供其他有价值的背景信息","titles":["计算机基础知识","如何正确提问","提问时,你该这样做"]},"228":{"title":"提问后,你该这样做","titles":["计算机基础知识","如何正确提问"]},"229":{"title":"如果问题解决了……","titles":["计算机基础知识","如何正确提问","提问后,你该这样做"]},"230":{"title":"如果问题没能解决……","titles":["计算机基础知识","如何正确提问","提问后,你该这样做"]},"231":{"title":"其他事项","titles":["计算机基础知识","如何正确提问"]},"232":{"title":"保持耐心,对回答问题者表现出友善和配合的态度","titles":["计算机基础知识","如何正确提问","其他事项"]},"233":{"title":"如果有需要,可以去 GitHub 代码仓库上提交 issue","titles":["计算机基础知识","如何正确提问","其他事项"]},"234":{"title":"结语","titles":["计算机基础知识","如何正确提问"]},"235":{"title":"其它归档内容","titles":[]},"236":{"title":"Go-cqhttp / Mirai","titles":["其它归档内容"]},"237":{"title":"使用签名服务","titles":["其它归档内容","Go-cqhttp / Mirai"]},"238":{"title":"怎么使用签名服务?","titles":["其它归档内容","Go-cqhttp / Mirai","使用签名服务"]},"239":{"title":"如何搭建签名服务","titles":["其它归档内容","Go-cqhttp / Mirai","使用签名服务"]},"240":{"title":"手动抓取 ticket","titles":["其它归档内容","Go-cqhttp / Mirai"]},"241":{"title":"前置工作","titles":["其它归档内容","Go-cqhttp / Mirai","手动抓取 ticket"]},"242":{"title":"分离部署登录流程","titles":["其它归档内容","Go-cqhttp / Mirai","手动抓取 ticket"]},"243":{"title":"GoCqhttp FAQ","titles":["其它归档内容","Go-cqhttp / Mirai"]},"244":{"title":"1. 出现 Code 1","titles":["其它归档内容","Go-cqhttp / Mirai","GoCqhttp FAQ"]},"245":{"title":"2. QSign 闪退","titles":["其它归档内容","Go-cqhttp / Mirai","GoCqhttp FAQ"]},"246":{"title":"3. 出现 Code 45","titles":["其它归档内容","Go-cqhttp / Mirai","GoCqhttp FAQ"]},"247":{"title":"4. 出现 Code 235","titles":["其它归档内容","Go-cqhttp / Mirai","GoCqhttp FAQ"]},"248":{"title":"5. 出现 Code 237","titles":["其它归档内容","Go-cqhttp / Mirai","GoCqhttp FAQ"]},"249":{"title":"5. 如何启动多个 qsign?(仅当需要备用签名或不同协议版本的时候有此需求)","titles":["其它归档内容","Go-cqhttp / Mirai","GoCqhttp FAQ"]},"250":{"title":"6. 什么是 go-cqhttp?(通常简称 gocq)","titles":["其它归档内容","Go-cqhttp / Mirai","GoCqhttp FAQ"]},"251":{"title":"7. 什么是签名?","titles":["其它归档内容","Go-cqhttp / Mirai","GoCqhttp FAQ"]},"252":{"title":"8. 对于 SignServer(即 Start_Qsign.bat,俗称签名服务器)崩溃闪退可能的一种情况","titles":["其它归档内容","Go-cqhttp / Mirai","GoCqhttp FAQ"]},"253":{"title":"Chronocat Red 协议","titles":["其它归档内容"]},"254":{"title":"Shamrock","titles":["其它归档内容"]},"255":{"title":"准备模拟器","titles":["其它归档内容","Shamrock"]},"256":{"title":"获取 Root 权限","titles":["其它归档内容","Shamrock"]},"257":{"title":"安装 LSPosed 模块","titles":["其它归档内容","Shamrock"]},"258":{"title":"安装 Shamrock","titles":["其它归档内容","Shamrock"]},"259":{"title":"开放模拟器端口供海豹对接","titles":["其它归档内容","Shamrock"]},"260":{"title":"连接海豹","titles":["其它归档内容","Shamrock"]},"261":{"title":"Shamrock LSPatch","titles":["其它归档内容"]},"262":{"title":"安装 Shizuku","titles":["其它归档内容","Shamrock LSPatch"]},"263":{"title":"安装 LSPatch","titles":["其它归档内容","Shamrock LSPatch"]},"264":{"title":"安装并激活 Shamrock","titles":["其它归档内容","Shamrock LSPatch"]},"265":{"title":"对接海豹","titles":["其它归档内容","Shamrock LSPatch"]},"266":{"title":"名词/术语速查表","titles":[]},"267":{"title":"C","titles":["名词/术语速查表"]},"268":{"title":"CQ 码","titles":["名词/术语速查表","C"]},"269":{"title":"D","titles":["名词/术语速查表"]},"270":{"title":"端口","titles":["名词/术语速查表","D"]},"271":{"title":"F","titles":["名词/术语速查表"]},"272":{"title":"服务器","titles":["名词/术语速查表","F"]},"273":{"title":"G","titles":["名词/术语速查表"]},"274":{"title":"工作目录","titles":["名词/术语速查表","G"]},"275":{"title":"H","titles":["名词/术语速查表"]},"276":{"title":"Headless","titles":["名词/术语速查表","H"]},"277":{"title":"I","titles":["名词/术语速查表"]},"278":{"title":"IP 与端口","titles":["名词/术语速查表","I"]},"279":{"title":"Issue","titles":["名词/术语速查表","I"]},"280":{"title":"J","titles":["名词/术语速查表"]},"281":{"title":"JSON","titles":["名词/术语速查表","J"]},"282":{"title":"K","titles":["名词/术语速查表"]},"283":{"title":"控制台","titles":["名词/术语速查表","K"]},"284":{"title":"L","titles":["名词/术语速查表"]},"285":{"title":"Lagrange","titles":["名词/术语速查表","L"]},"286":{"title":"Linux","titles":["名词/术语速查表","L"]},"287":{"title":"LiteLoader","titles":["名词/术语速查表","L"]},"288":{"title":"Log","titles":["名词/术语速查表","L"]},"289":{"title":"M","titles":["名词/术语速查表"]},"290":{"title":"命令行","titles":["名词/术语速查表","M"]},"291":{"title":"命令行界面","titles":["名词/术语速查表","M"]},"292":{"title":"命令提示符","titles":["名词/术语速查表","M"]},"293":{"title":"N","titles":["名词/术语速查表"]},"294":{"title":"NapCatQQ","titles":["名词/术语速查表","N"]},"295":{"title":"NTQQ","titles":["名词/术语速查表","N"]},"296":{"title":"Q","titles":["名词/术语速查表"]},"297":{"title":"QQNT","titles":["名词/术语速查表","Q"]},"298":{"title":"R","titles":["名词/术语速查表"]},"299":{"title":"日志","titles":["名词/术语速查表","R"]},"300":{"title":"S","titles":["名词/术语速查表"]},"301":{"title":"数据序列化语言","titles":["名词/术语速查表","S"]},"302":{"title":"Shell","titles":["名词/术语速查表","S"]},"303":{"title":"T","titles":["名词/术语速查表"]},"304":{"title":"TOML","titles":["名词/术语速查表","T"]},"305":{"title":"W","titles":["名词/术语速查表"]},"306":{"title":"无头","titles":["名词/术语速查表","W"]},"307":{"title":"WebUI","titles":["名词/术语速查表","W"]},"308":{"title":"Windows Terminal","titles":["名词/术语速查表","W"]},"309":{"title":"Windows 终端","titles":["名词/术语速查表","W"]},"310":{"title":"Y","titles":["名词/术语速查表"]},"311":{"title":"YAML","titles":["名词/术语速查表","Y"]},"312":{"title":"Z","titles":["名词/术语速查表"]},"313":{"title":"终端","titles":["名词/术语速查表","Z"]},"314":{"title":"备份","titles":[]},"315":{"title":"关于备份","titles":["备份"]},"316":{"title":"手动备份","titles":["备份"]},"317":{"title":"自动备份","titles":["备份"]},"318":{"title":"自动清理","titles":["备份"]},"319":{"title":"配置清理范围","titles":["备份","自动清理"]},"320":{"title":"配置清理时机","titles":["备份","自动清理"]},"321":{"title":"备份列表","titles":["备份"]},"322":{"title":"黑白名单","titles":[]},"323":{"title":"如何设置黑白名单?","titles":["黑白名单"]},"324":{"title":"添加黑白名单","titles":["黑白名单"]},"325":{"title":"UI 手动添加","titles":["黑白名单","添加黑白名单"]},"326":{"title":"指令添加","titles":["黑白名单","添加黑白名单"]},"327":{"title":"自动添加","titles":["黑白名单","添加黑白名单"]},"328":{"title":"黑白名单设置","titles":["黑白名单"]},"329":{"title":"基础设置","titles":[]},"330":{"title":"Master 管理","titles":["基础设置"]},"331":{"title":"Master 解锁码","titles":["基础设置","Master 管理"]},"332":{"title":"Master 列表","titles":["基础设置","Master 管理"]},"333":{"title":"消息通知列表","titles":["基础设置","Master 管理"]},"334":{"title":"好友邀请","titles":["基础设置","Master 管理","消息通知列表"]},"335":{"title":"邮箱通知","titles":["基础设置"]},"336":{"title":"发件邮箱","titles":["基础设置","邮箱通知"]},"337":{"title":"邮箱密钥","titles":["基础设置","邮箱通知"]},"338":{"title":"SMTP 地址","titles":["基础设置","邮箱通知"]},"339":{"title":"私骰模式","titles":["基础设置"]},"340":{"title":"允许自由开关","titles":["基础设置"]},"341":{"title":"启用戳一戳","titles":["基础设置"]},"342":{"title":"限制 .text 指令","titles":["基础设置"]},"343":{"title":"忽略 .bot 裸指令","titles":["基础设置"]},"344":{"title":"存活确认","titles":["基础设置"]},"345":{"title":"日志记录提示","titles":["基础设置"]},"346":{"title":"刷屏警告","titles":["基础设置"]},"347":{"title":"访问控制","titles":["基础设置"]},"348":{"title":"QQ 频道设置","titles":["基础设置"]},"349":{"title":"加好友验证","titles":["基础设置"]},"350":{"title":"自动退出不活跃群组","titles":["基础设置"]},"351":{"title":"拦截","titles":[]},"352":{"title":"什么是拦截功能?","titles":["拦截"]},"353":{"title":"配置拦截","titles":["拦截"]},"354":{"title":"匹配选项","titles":["拦截","配置拦截"]},"355":{"title":"响应设置","titles":["拦截","配置拦截"]},"356":{"title":"敏感词管理","titles":["拦截"]},"357":{"title":"查看拦截日志","titles":["拦截"]},"358":{"title":"如何让用户/群豁免检查?","titles":["拦截"]},"359":{"title":"如何编写敏感词库?","titles":["拦截"]},"360":{"title":"自定义文案","titles":[]},"361":{"title":"什么是自定义文案?","titles":["自定义文案"]},"362":{"title":"如何修改文案?","titles":["自定义文案"]},"363":{"title":"文案列表","titles":["自定义文案","如何修改文案?"]},"364":{"title":"筛选文案","titles":["自定义文案","如何修改文案?"]},"365":{"title":"文案的导入/导出","titles":["自定义文案","如何修改文案?"]},"366":{"title":"自定义文案组合","titles":["自定义文案"]},"367":{"title":"COC","titles":["自定义文案","自定义文案组合"]},"368":{"title":".ra/rc 检定","titles":["自定义文案","自定义文案组合","COC"]},"369":{"title":".st 属性设置","titles":["自定义文案","自定义文案组合","COC"]},"370":{"title":".sc 理智检定","titles":["自定义文案","自定义文案组合","COC"]},"371":{"title":".en 技能成长","titles":["自定义文案","自定义文案组合","COC"]},"372":{"title":"核心","titles":["自定义文案","自定义文案组合"]},"373":{"title":".r 骰点","titles":["自定义文案","自定义文案组合","核心"]},"374":{"title":".alias 快捷指令","titles":["自定义文案","自定义文案组合","核心"]},"375":{"title":"文案插入图片和 CQ 码","titles":["自定义文案"]},"376":{"title":"文案变量标签","titles":["自定义文案"]},"377":{"title":"在一个文案中使用另一个文案","titles":["自定义文案"]},"378":{"title":"自定义文案引用牌堆","titles":["自定义文案"]},"379":{"title":"文案常见问题","titles":["自定义文案"]},"380":{"title":"骰子进群和成为好友的问候语是哪个?","titles":["自定义文案","文案常见问题"]},"381":{"title":"更复杂的文案设置","titles":["自定义文案"]},"382":{"title":"牌堆","titles":[]},"383":{"title":"牌堆是什么?","titles":["牌堆"]},"384":{"title":"获取牌堆","titles":["牌堆"]},"385":{"title":"怎么上传牌堆到骰子?怎么管理牌堆?","titles":["牌堆"]},"386":{"title":"怎么使用牌堆?","titles":["牌堆"]},"387":{"title":"牌堆更新与云牌堆","titles":["牌堆"]},"388":{"title":"牌堆更新","titles":["牌堆","牌堆更新与云牌堆"]},"389":{"title":"牌堆云端内容","titles":["牌堆","牌堆更新与云牌堆"]},"390":{"title":"如何编写牌堆?","titles":["牌堆"]},"391":{"title":"帮助文档","titles":[]},"392":{"title":"什么是帮助文档?","titles":["帮助文档"]},"393":{"title":"获取帮助文档","titles":["帮助文档"]},"394":{"title":"如何使用帮助文档?","titles":["帮助文档"]},"395":{"title":"如何管理帮助文档?","titles":["帮助文档"]},"396":{"title":"上传帮助文档","titles":["帮助文档","如何管理帮助文档?"]},"397":{"title":"为分组添加别名","titles":["帮助文档","如何管理帮助文档?"]},"398":{"title":"删除帮助文档","titles":["帮助文档","如何管理帮助文档?"]},"399":{"title":"查看帮助文档词条","titles":["帮助文档","如何管理帮助文档?"]},"400":{"title":"如何编写帮助文档?","titles":["帮助文档"]},"401":{"title":"JavaScript 插件","titles":[]},"402":{"title":"JavaScript 插件是什么","titles":["JavaScript 插件"]},"403":{"title":"获取 JS 插件","titles":["JavaScript 插件"]},"404":{"title":"如何安装和管理 JS 插件?","titles":["JavaScript 插件"]},"405":{"title":"插件列表","titles":["JavaScript 插件","如何安装和管理 JS 插件?"]},"406":{"title":"插件的更新","titles":["JavaScript 插件","如何安装和管理 JS 插件?"]},"407":{"title":"控制台","titles":["JavaScript 插件","如何安装和管理 JS 插件?"]},"408":{"title":"插件设置","titles":["JavaScript 插件","如何安装和管理 JS 插件?"]},"409":{"title":"如何使用 JS 插件?","titles":["JavaScript 插件"]},"410":{"title":"如何编写 JS 插件?","titles":["JavaScript 插件"]},"411":{"title":"自定义回复","titles":[]},"412":{"title":"什么是自定义回复?","titles":["自定义回复"]},"413":{"title":"在哪编写自定义回复?","titles":["自定义回复"]},"414":{"title":"当前回复文件","titles":["自定义回复","在哪编写自定义回复?"]},"415":{"title":"新建/导入自定义回复文件","titles":["自定义回复","在哪编写自定义回复?"]},"416":{"title":"获取自定义回复文件","titles":["自定义回复","在哪编写自定义回复?"]},"417":{"title":"公共条件","titles":["自定义回复","在哪编写自定义回复?"]},"418":{"title":"设置回复项","titles":["自定义回复"]},"419":{"title":"回复项的条件","titles":["自定义回复","设置回复项"]},"420":{"title":"文本匹配","titles":["自定义回复","设置回复项","回复项的条件"]},"421":{"title":"文本长度","titles":["自定义回复","设置回复项","回复项的条件"]},"422":{"title":"回复项的结果","titles":["自定义回复","设置回复项"]},"423":{"title":"回复结果延迟","titles":["自定义回复","设置回复项","回复项的结果"]},"424":{"title":"自定义回复引用牌堆","titles":["自定义回复"]},"425":{"title":"更复杂的回复","titles":["自定义回复"]},"426":{"title":"辅助工具","titles":[]},"427":{"title":"指令测试","titles":["辅助工具"]},"428":{"title":"资源管理","titles":["辅助工具"]},"429":{"title":"海豹的本地文件","titles":[]},"430":{"title":"SealDice 文件目录树","titles":["海豹的本地文件"]},"431":{"title":"常用文件","titles":["海豹的本地文件"]},"432":{"title":"安卓端文件路径","titles":["海豹的本地文件"]},"433":{"title":"数据库检查和修复","titles":["海豹的本地文件"]},"434":{"title":"数据迁移","titles":["海豹的本地文件"]},"435":{"title":"安卓海豹常见问题","titles":[]},"436":{"title":"安卓端登录","titles":["安卓海豹常见问题"]},"437":{"title":"只有一个设备,但登录需要扫码","titles":["安卓海豹常见问题"]},"438":{"title":"经常掉线","titles":["安卓海豹常见问题"]},"439":{"title":"同时开启两个海豹实例","titles":["安卓海豹常见问题"]},"440":{"title":"方法一:使用系统的双开功能","titles":["安卓海豹常见问题","同时开启两个海豹实例"]},"441":{"title":"方法二:使用 NP 管理器等软件","titles":["安卓海豹常见问题","同时开启两个海豹实例"]},"442":{"title":"海豹文件路径","titles":["安卓海豹常见问题"]},"443":{"title":"发送图片","titles":["安卓海豹常见问题"]},"444":{"title":"如何更新","titles":["安卓海豹常见问题"]},"445":{"title":"电脑海豹转安卓端海豹","titles":["安卓海豹常见问题"]},"446":{"title":"配置安卓端保活","titles":[]},"447":{"title":"授予海豹核心必要权限","titles":["配置安卓端保活"]},"448":{"title":"HyperOS(小米/红米)","titles":["配置安卓端保活"]},"449":{"title":"MIUI(小米/红米)","titles":["配置安卓端保活"]},"450":{"title":"鸿蒙系统(华为)","titles":["配置安卓端保活"]},"451":{"title":"ColorOS(OPPO/一加)","titles":["配置安卓端保活"]},"452":{"title":"通用设置","titles":["配置安卓端保活"]},"453":{"title":"存储权限","titles":["配置安卓端保活","通用设置"]},"454":{"title":"通知权限","titles":["配置安卓端保活","通用设置"]},"455":{"title":"应用内设置","titles":["配置安卓端保活","通用设置"]},"456":{"title":"数据库检查和修复","titles":[]},"457":{"title":"确定问题","titles":["数据库检查和修复"]},"458":{"title":"无法使用命令行","titles":["数据库检查和修复","确定问题"]},"459":{"title":"修复数据库 - 通过回滚备份","titles":["数据库检查和修复"]},"460":{"title":"修复数据库 - 通过数据库修复指令","titles":["数据库检查和修复"]},"461":{"title":"钉钉","titles":[]},"462":{"title":"钉钉支持","titles":["钉钉"]},"463":{"title":"Discord","titles":[]},"464":{"title":"获取 Token","titles":["Discord"]},"465":{"title":"连接海豹","titles":["Discord"]},"466":{"title":"邀请海豹","titles":["Discord"]},"467":{"title":"DoDo","titles":[]},"468":{"title":"建立应用","titles":["DoDo"]},"469":{"title":"获取 Client ID 和 Bot Token","titles":["DoDo"]},"470":{"title":"连接海豹","titles":["DoDo"]},"471":{"title":"邀请海豹","titles":["DoDo"]},"472":{"title":"KOOK","titles":[]},"473":{"title":"获取 Token","titles":["KOOK"]},"474":{"title":"连接海豹","titles":["KOOK"]},"475":{"title":"邀请海豹","titles":["KOOK"]},"476":{"title":"Minecraft","titles":[]},"477":{"title":"Minecraft 支持","titles":["Minecraft"]},"478":{"title":"架设 Minecraft 服务端","titles":["Minecraft"]},"479":{"title":"获取服务端核心","titles":["Minecraft","架设 Minecraft 服务端"]},"480":{"title":"启动服务端","titles":["Minecraft","架设 Minecraft 服务端"]},"481":{"title":"放入 sealdice-minecraft 插件","titles":["Minecraft","架设 Minecraft 服务端"]},"482":{"title":"海豹核心与 Minecraft 服务端连接","titles":["Minecraft"]},"483":{"title":"sealdice-minecraft 插件的使用","titles":["Minecraft"]},"484":{"title":"指令","titles":["Minecraft","sealdice-minecraft 插件的使用"]},"485":{"title":"sealdice [文本]","titles":["Minecraft","sealdice-minecraft 插件的使用","指令"]},"486":{"title":"sealport [端口]","titles":["Minecraft","sealdice-minecraft 插件的使用","指令"]},"487":{"title":"权限","titles":["Minecraft","sealdice-minecraft 插件的使用"]},"488":{"title":"sealdice.admin","titles":["Minecraft","sealdice-minecraft 插件的使用","权限"]},"489":{"title":"QQ - Docker 中的海豹","titles":[]},"490":{"title":"通过 docker compose 同时部署海豹与 Lagrange","titles":["QQ - Docker 中的海豹"]},"491":{"title":"创建 docker-compose.yml","titles":["QQ - Docker 中的海豹","通过 docker compose 同时部署海豹与 Lagrange"]},"492":{"title":"首次启动容器","titles":["QQ - Docker 中的海豹","通过 docker compose 同时部署海豹与 Lagrange"]},"493":{"title":"Lagrange 容器配置","titles":["QQ - Docker 中的海豹","通过 docker compose 同时部署海豹与 Lagrange"]},"494":{"title":"海豹连接 Lagrange","titles":["QQ - Docker 中的海豹","通过 docker compose 同时部署海豹与 Lagrange"]},"495":{"title":"更新海豹容器或 Lagrange 容器","titles":["QQ - Docker 中的海豹","通过 docker compose 同时部署海豹与 Lagrange"]},"496":{"title":"连接到宿主机上的 QQ 后端","titles":["QQ - Docker 中的海豹"]},"497":{"title":"保持容器与宿主机网络隔离","titles":["QQ - Docker 中的海豹","连接到宿主机上的 QQ 后端"]},"498":{"title":"配置容器使用宿主机网络","titles":["QQ - Docker 中的海豹","连接到宿主机上的 QQ 后端"]},"499":{"title":"QQ 官方机器人","titles":[]},"500":{"title":"尝试一下","titles":["QQ 官方机器人"]},"501":{"title":"获取连接所需信息","titles":["QQ 官方机器人"]},"502":{"title":"连接海豹","titles":["QQ 官方机器人"]},"503":{"title":"指令配置","titles":["QQ 官方机器人"]},"504":{"title":"机器人上线","titles":["QQ 官方机器人"]},"505":{"title":"使用海豹","titles":["QQ 官方机器人"]},"506":{"title":"注意事项","titles":["QQ 官方机器人"]},"507":{"title":"企业账号的开发者资质审核","titles":["QQ 官方机器人","注意事项"]},"508":{"title":"机器人官方频道跳转","titles":["QQ 官方机器人","注意事项"]},"509":{"title":"功能审核未通过","titles":["QQ 官方机器人","注意事项"]},"510":{"title":"QQ","titles":[]},"511":{"title":"前言","titles":["QQ"]},"512":{"title":"有关 QQ 平台机器人的说明","titles":["QQ","前言"]},"513":{"title":"对接引导","titles":["QQ","前言"]},"514":{"title":"内置客户端","titles":["QQ"]},"515":{"title":"分离部署","titles":["QQ"]},"516":{"title":"Lagrange","titles":["QQ","分离部署"]},"517":{"title":"登录 Lagrange","titles":["QQ","分离部署","Lagrange"]},"518":{"title":"海豹连接 Lagrange","titles":["QQ","分离部署","Lagrange"]},"519":{"title":"LLOneBot","titles":["QQ","分离部署"]},"520":{"title":"安装 LLOneBot","titles":["QQ","分离部署","LLOneBot"]},"521":{"title":"配置 LLOneBot","titles":["QQ","分离部署","LLOneBot"]},"522":{"title":"NapCatQQ","titles":["QQ","分离部署"]},"523":{"title":"下载 NapCatQQ","titles":["QQ","分离部署","NapCatQQ"]},"524":{"title":"海豹连接","titles":["QQ","分离部署","NapCatQQ"]},"525":{"title":"Chronocat","titles":["QQ","分离部署"]},"526":{"title":"安装 Chronocat","titles":["QQ","分离部署","Chronocat"]},"527":{"title":"Chronocat Satori 协议","titles":["QQ","分离部署","Chronocat"]},"528":{"title":"Slack","titles":[]},"529":{"title":"Slack 支持","titles":["Slack"]},"530":{"title":"获取 Token","titles":["Slack"]},"531":{"title":"APP Token","titles":["Slack","获取 Token"]},"532":{"title":"Bot Token","titles":["Slack","获取 Token"]},"533":{"title":"连接海豹","titles":["Slack"]},"534":{"title":"Telegram","titles":[]},"535":{"title":"获取 Token","titles":["Telegram"]},"536":{"title":"连接海豹","titles":["Telegram"]},"537":{"title":"快速开始","titles":[]},"538":{"title":"获取海豹","titles":["快速开始"]},"539":{"title":"启动","titles":["快速开始"]},"540":{"title":"连接平台","titles":["快速开始"]},"541":{"title":"安装为系统服务(可选)","titles":["快速开始"]},"542":{"title":"更新海豹","titles":["快速开始"]},"543":{"title":"自动更新","titles":["快速开始","更新海豹"]},"544":{"title":"手动更新","titles":["快速开始","更新海豹"]},"545":{"title":"上传固件","titles":["快速开始","更新海豹"]},"546":{"title":"安卓豹更新","titles":["快速开始","更新海豹"]},"547":{"title":"特色功能","titles":[]},"548":{"title":"指令兼容性","titles":["特色功能"]},"549":{"title":"易于部署和使用","titles":["特色功能"]},"550":{"title":"极少的资源占用","titles":["特色功能"]},"551":{"title":"强自定义","titles":["特色功能"]},"552":{"title":"人工智能鸽子","titles":["特色功能"]},"553":{"title":"强大的查询功能","titles":["特色功能"]},"554":{"title":"通用特化支持","titles":["特色功能"]},"555":{"title":"代替他人检定 / 操作他人属性","titles":["特色功能","通用特化支持"]},"556":{"title":"CoC 特化支持","titles":["特色功能"]},"557":{"title":"属性同义词","titles":["特色功能","CoC 特化支持"]},"558":{"title":"默认技能等级","titles":["特色功能","CoC 特化支持"]},"559":{"title":"支持 .scb 指令","titles":["特色功能","CoC 特化支持"]},"560":{"title":"D&D 特化支持","titles":["特色功能"]},"561":{"title":"属性同义词","titles":["特色功能","D&D 特化支持"]},"562":{"title":"优势骰劣势骰","titles":["特色功能","D&D 特化支持"]},"563":{"title":"属性调整值和熟练自动计算","titles":["特色功能","D&D 特化支持"]},"564":{"title":"临时属性","titles":["特色功能","D&D 特化支持"]},"565":{"title":"法术位支持","titles":["特色功能","D&D 特化支持"]},"566":{"title":"死亡豁免","titles":["特色功能","D&D 特化支持"]},"567":{"title":"休息","titles":["特色功能","D&D 特化支持"]},"568":{"title":"可以实时编辑的跑团日志","titles":["特色功能"]},"569":{"title":"是纯净骰,也是娱乐骰","titles":["特色功能"]},"570":{"title":"更强的指令支持","titles":["特色功能"]},"571":{"title":"跨平台","titles":["特色功能"]},"572":{"title":"TRPG 规则支持列表","titles":["特色功能"]},"573":{"title":"迁移","titles":[]},"574":{"title":"相同平台间迁移","titles":["迁移"]},"575":{"title":"跨平台迁移","titles":["迁移"]},"576":{"title":"Linux 服务器间跨架构迁移(arm64 → amd64)","titles":["迁移","跨平台迁移"]},"577":{"title":"迁移数据到手机","titles":["迁移"]},"578":{"title":"海豹核心","titles":[]},"579":{"title":"开始使用","titles":[]},"580":{"title":"更多……","titles":[]},"581":{"title":"属性同义词","titles":[]},"582":{"title":"概念说明","titles":["属性同义词"]},"583":{"title":"同义词表","titles":["属性同义词"]},"584":{"title":"克苏鲁的呼唤 7 版","titles":[]},"585":{"title":".st 操作人物卡","titles":["克苏鲁的呼唤 7 版"]},"586":{"title":".st help 获取帮助信息","titles":["克苏鲁的呼唤 7 版",".st 操作人物卡"]},"587":{"title":"列出属性","titles":["克苏鲁的呼唤 7 版",".st 操作人物卡"]},"588":{"title":"删除属性","titles":["克苏鲁的呼唤 7 版",".st 操作人物卡"]},"589":{"title":"设定属性值","titles":["克苏鲁的呼唤 7 版",".st 操作人物卡"]},"590":{"title":"更新属性值","titles":["克苏鲁的呼唤 7 版",".st 操作人物卡"]},"591":{"title":"设定计算表达式","titles":["克苏鲁的呼唤 7 版",".st 操作人物卡"]},"592":{"title":"导出属性值","titles":["克苏鲁的呼唤 7 版",".st 操作人物卡"]},"593":{"title":"代骰","titles":["克苏鲁的呼唤 7 版",".st 操作人物卡"]},"594":{"title":".ra/.rc 检定","titles":["克苏鲁的呼唤 7 版"]},"595":{"title":"进行检定","titles":["克苏鲁的呼唤 7 版",".ra/.rc 检定"]},"596":{"title":"多轮检定","titles":["克苏鲁的呼唤 7 版",".ra/.rc 检定"]},"597":{"title":"要求一定难度的检定","titles":["克苏鲁的呼唤 7 版",".ra/.rc 检定"]},"598":{"title":"奖励骰和惩罚骰","titles":["克苏鲁的呼唤 7 版",".ra/.rc 检定"]},"599":{"title":"代骰","titles":["克苏鲁的呼唤 7 版",".ra/.rc 检定"]},"600":{"title":"以上功能可以组合使用","titles":["克苏鲁的呼唤 7 版",".ra/.rc 检定"]},"601":{"title":".rah/.rch 暗中检定","titles":["克苏鲁的呼唤 7 版"]},"602":{"title":"代骰","titles":["克苏鲁的呼唤 7 版",".rah/.rch 暗中检定"]},"603":{"title":".rav/.rcv 对抗检定","titles":["克苏鲁的呼唤 7 版"]},"604":{"title":"使用相同技能对抗","titles":["克苏鲁的呼唤 7 版",".rav/.rcv 对抗检定"]},"605":{"title":"使用不同技能对抗","titles":["克苏鲁的呼唤 7 版",".rav/.rcv 对抗检定"]},"606":{"title":"指定两个其他人对抗","titles":["克苏鲁的呼唤 7 版",".rav/.rcv 对抗检定"]},"607":{"title":".sc 理智检定","titles":["克苏鲁的呼唤 7 版"]},"608":{"title":"指定损失的理智","titles":["克苏鲁的呼唤 7 版",".sc 理智检定"]},"609":{"title":"简略写法","titles":["克苏鲁的呼唤 7 版",".sc 理智检定"]},"610":{"title":"奖励骰和惩罚骰","titles":["克苏鲁的呼唤 7 版",".sc 理智检定"]},"611":{"title":"代骰","titles":["克苏鲁的呼唤 7 版",".sc 理智检定"]},"612":{"title":".ti/.li 疯狂发作症状","titles":["克苏鲁的呼唤 7 版"]},"613":{"title":".en 技能成长","titles":["克苏鲁的呼唤 7 版"]},"614":{"title":"进行技能成长","titles":["克苏鲁的呼唤 7 版",".en 技能成长"]},"615":{"title":"指定成长值","titles":["克苏鲁的呼唤 7 版",".en 技能成长"]},"616":{"title":".coc 生成随机属性(制卡)","titles":["克苏鲁的呼唤 7 版"]},"617":{"title":".setcoc 设置房规","titles":["克苏鲁的呼唤 7 版"]},"618":{"title":"显示当前房规","titles":["克苏鲁的呼唤 7 版",".setcoc 设置房规"]},"619":{"title":"列出可用房规","titles":["克苏鲁的呼唤 7 版",".setcoc 设置房规"]},"620":{"title":"设定房规","titles":["克苏鲁的呼唤 7 版",".setcoc 设置房规"]},"621":{"title":"核心指令","titles":[]},"622":{"title":".master 骰主指令","titles":["核心指令"]},"623":{"title":".ban 黑白名单指令","titles":["核心指令"]},"624":{"title":".bot 骰子管理","titles":["核心指令"]},"625":{"title":".ext 扩展管理","titles":["核心指令"]},"626":{"title":".set 骰子面数管理","titles":["核心指令"]},"627":{"title":".r 骰点","titles":["核心指令"]},"628":{"title":"常用示例","titles":["核心指令",".r 骰点"]},"629":{"title":"多轮骰点","titles":["核心指令",".r 骰点"]},"630":{"title":"在骰点中使用属性值","titles":["核心指令",".r 骰点"]},"631":{"title":"奖励骰与惩罚骰","titles":["核心指令",".r 骰点"]},"632":{"title":"优势骰与劣势骰","titles":["核心指令",".r 骰点"]},"633":{"title":"fvtt 骰点兼容","titles":["核心指令",".r 骰点"]},"634":{"title":"fate 命运骰","titles":["核心指令",".r 骰点"]},"635":{"title":"WOD 骰点","titles":["核心指令",".r 骰点"]},"636":{"title":"双十字骰点","titles":["核心指令",".r 骰点"]},"637":{"title":"混合运算","titles":["核心指令",".r 骰点"]},"638":{"title":".rh 暗骰","titles":["核心指令"]},"639":{"title":".rx / .rxh 特殊骰点","titles":["核心指令"]},"640":{"title":".nn 角色名设定","titles":["核心指令"]},"641":{"title":".pc 角色卡管理","titles":["核心指令"]},"642":{"title":".find 词条查询指令","titles":["核心指令"]},"643":{"title":"指定默认查询分组","titles":["核心指令",".find 词条查询指令"]},"644":{"title":"全文搜索","titles":["核心指令",".find 词条查询指令"]},"645":{"title":"快速文档查找","titles":["核心指令",".find 词条查询指令"]},"646":{"title":"致谢","titles":["核心指令",".find 词条查询指令"]},"647":{"title":".help 帮助指令","titles":["核心指令"]},"648":{"title":".set 设定默认骰子面数 / 设定游戏系统","titles":["核心指令"]},"649":{"title":".botlist 机器人列表","titles":["核心指令"]},"650":{"title":"牌堆 自定义回复","titles":[]},"651":{"title":".draw 抽牌 / 管理牌堆","titles":["牌堆 自定义回复"]},"652":{"title":"信息查询","titles":["牌堆 自定义回复",".draw 抽牌 / 管理牌堆"]},"653":{"title":"抽牌","titles":["牌堆 自定义回复",".draw 抽牌 / 管理牌堆"]},"654":{"title":"自定义回复引用牌堆","titles":["牌堆 自定义回复",".draw 抽牌 / 管理牌堆"]},"655":{"title":"牌堆管理","titles":["牌堆 自定义回复",".draw 抽牌 / 管理牌堆"]},"656":{"title":".reply 管理自定义回复","titles":["牌堆 自定义回复"]},"657":{"title":"龙与地下城 5E","titles":[]},"658":{"title":".dnd / .dndx 生成随机属性(制卡)","titles":["龙与地下城 5E"]},"659":{"title":".ri 先攻设置","titles":["龙与地下城 5E"]},"660":{"title":".init 先攻列表","titles":["龙与地下城 5E"]},"661":{"title":".st 操作角色卡","titles":["龙与地下城 5E"]},"662":{"title":".st help 获取帮助信息","titles":["龙与地下城 5E",".st 操作角色卡"]},"663":{"title":"列出属性","titles":["龙与地下城 5E",".st 操作角色卡"]},"664":{"title":"删除属性","titles":["龙与地下城 5E",".st 操作角色卡"]},"665":{"title":"更新属性值","titles":["龙与地下城 5E",".st 操作角色卡"]},"666":{"title":"代骰","titles":["龙与地下城 5E",".st 操作角色卡"]},"667":{"title":".rc 检定","titles":["龙与地下城 5E"]},"668":{"title":"代骰","titles":["龙与地下城 5E",".rc 检定"]},"669":{"title":"奇妙运用","titles":["龙与地下城 5E",".rc 检定"]},"670":{"title":".buff 临时属性","titles":["龙与地下城 5E"]},"671":{"title":"代骰","titles":["龙与地下城 5E",".buff 临时属性"]},"672":{"title":".ss 法术位 (spell slots)","titles":["龙与地下城 5E"]},"673":{"title":"代骰","titles":["龙与地下城 5E",".ss 法术位 (spell slots)"]},"674":{"title":".cast 使用法术位","titles":["龙与地下城 5E"]},"675":{"title":"代骰","titles":["龙与地下城 5E",".cast 使用法术位"]},"676":{"title":".longrest / .长休","titles":["龙与地下城 5E"]},"677":{"title":"代骰","titles":["龙与地下城 5E",".longrest / .长休"]},"678":{"title":".ds / .死亡豁免","titles":["龙与地下城 5E"]},"679":{"title":"代骰","titles":["龙与地下城 5E",".ds / .死亡豁免"]},"680":{"title":"常见问题","titles":[]},"681":{"title":"为啥海豹不理我?","titles":["常见问题"]},"682":{"title":"可以关闭暗骰吗?","titles":["常见问题"]},"683":{"title":"退群指令?","titles":["常见问题"]},"684":{"title":"登录服务器开浏览器使用好麻烦!能远程直接访问 WebUI 吗?","titles":["常见问题"]},"685":{"title":"在服务器上登录时说「需要在同一 WIFI 下扫码」怎么办","titles":["常见问题"]},"686":{"title":"1. [首选] 让手机跟服务器真的处于同一个网络","titles":["常见问题","在服务器上登录时说「需要在同一 WIFI 下扫码」怎么办"]},"687":{"title":"2. 本机上完成扫码登录,然后将登录过的配置文件覆盖到服务器上","titles":["常见问题","在服务器上登录时说「需要在同一 WIFI 下扫码」怎么办"]},"688":{"title":"AT 其他骰子做检定的时候,海豹也会回应,怎么办","titles":["常见问题"]},"689":{"title":"为啥好像反应慢一拍","titles":["常见问题"]},"690":{"title":"我希望在我的骰子进群或者被踢出时通知我","titles":["常见问题"]},"691":{"title":"支持 QQ 频道吗?","titles":["常见问题"]},"692":{"title":"怎么同时运行多个海豹?","titles":["常见问题"]},"693":{"title":"Windows 系统","titles":["常见问题","怎么同时运行多个海豹?"]},"694":{"title":"如果你想在 Windows 系统指定端口,需要一点操作","titles":["常见问题","怎么同时运行多个海豹?","Windows 系统"]},"695":{"title":"除 Android 外的其他系统","titles":["常见问题","怎么同时运行多个海豹?"]},"696":{"title":"我机器上启动非常慢,而且托盘点不出来右键菜单?","titles":["常见问题"]},"697":{"title":"能在手机上搭建吗?","titles":["常见问题"]},"698":{"title":"我是 Master,怎么帮人取出 Log?","titles":["常见问题"]},"699":{"title":"我忘了 WebUI 密码","titles":["常见问题"]},"700":{"title":"功能","titles":[]},"701":{"title":".jrrp 今日人品","titles":["功能"]},"702":{"title":".gugu 人工智能鸽子","titles":["功能"]},"703":{"title":".jsr 不重复骰点","titles":["功能"]},"704":{"title":".drl 骰池抽取","titles":["功能"]},"705":{"title":".text 文本模板测试","titles":["功能"]},"706":{"title":".send 向骰主发送消息 / 回复消息","titles":["功能"]},"707":{"title":".welcome 新人入群欢迎","titles":["功能"]},"708":{"title":".ping 指令响应测试","titles":["功能"]},"709":{"title":".alias 定义快捷指令 & .& 使用快捷指令","titles":["功能"]},"710":{"title":"额外 TRPG 规则支持","titles":["功能"]},"711":{"title":".ww WOD 规则骰点","titles":["功能","额外 TRPG 规则支持"]},"712":{"title":".dx 双重十字规则骰点","titles":["功能","额外 TRPG 规则支持"]},"713":{"title":".ek 共鸣性怪异规则骰点","titles":["功能","额外 TRPG 规则支持"]},"714":{"title":".ekgen 共鸣性怪异规则属性生成","titles":["功能","额外 TRPG 规则支持"]},"715":{"title":".rsr 暗影狂奔规则骰点","titles":["功能","额外 TRPG 规则支持"]},"716":{"title":"基础概念","titles":[]},"717":{"title":"什么是骰子?","titles":["基础概念"]},"718":{"title":"获取和使用","titles":["基础概念"]},"719":{"title":"指令回复","titles":["基础概念","获取和使用"]},"720":{"title":"指令前缀","titles":["基础概念","获取和使用","指令回复"]},"721":{"title":"指令名","titles":["基础概念","获取和使用","指令回复"]},"722":{"title":"指令参数","titles":["基础概念","获取和使用","指令回复"]},"723":{"title":"指令标志","titles":["基础概念","获取和使用","指令回复"]},"724":{"title":"自定义回复","titles":["基础概念","获取和使用"]},"725":{"title":"日志","titles":[]},"726":{"title":".log 跑团日志","titles":["日志"]},"727":{"title":"记录日志","titles":["日志",".log 跑团日志"]},"728":{"title":"数据统计","titles":["日志",".log 跑团日志"]},"729":{"title":"管理日志","titles":["日志",".log 跑团日志"]},"730":{"title":"骰主代取 Log","titles":["日志",".log 跑团日志"]},"731":{"title":".ob 旁观","titles":["日志"]},"732":{"title":".sn 自动群名片","titles":["日志"]},"733":{"title":"预设模板","titles":["日志",".sn 自动群名片"]},"734":{"title":"扩展规则","titles":["日志",".sn 自动群名片"]},"735":{"title":"自定义模板","titles":["日志",".sn 自动群名片"]},"736":{"title":"关闭自动修改","titles":["日志",".sn 自动群名片"]},"737":{"title":".hiy 数据统计","titles":["日志"]},"738":{"title":"其它规则支持","titles":[]},"739":{"title":"绿色三角洲 Delta Green","titles":["其它规则支持"]},"740":{"title":"黑暗世界 World of Darkness","titles":["其它规则支持"]},"741":{"title":"双重十字 Double Cross","titles":["其它规则支持"]},"742":{"title":"暗影狂奔 Shadowrun","titles":["其它规则支持"]},"743":{"title":"共鸣性怪异 Emoklore","titles":["其它规则支持"]},"744":{"title":"更多规则","titles":["其它规则支持"]},"745":{"title":"快速上手","titles":[]},"746":{"title":"常用指令速查","titles":["快速上手"]},"747":{"title":"通常流程","titles":["快速上手"]},"748":{"title":"秘密团","titles":["快速上手","通常流程"]},"749":{"title":"进行 CoC 游戏","titles":["快速上手","通常流程"]},"750":{"title":"创作角色卡","titles":["快速上手","通常流程","进行 CoC 游戏"]},"751":{"title":"理智检定 San Check","titles":["快速上手","通常流程","进行 CoC 游戏"]},"752":{"title":"抽取疯狂症状","titles":["快速上手","通常流程","进行 CoC 游戏"]},"753":{"title":"技能成长","titles":["快速上手","通常流程","进行 CoC 游戏"]},"754":{"title":"进行 D&D 游戏","titles":["快速上手","通常流程"]},"755":{"title":"创作角色卡","titles":["快速上手","通常流程","进行 D&D 游戏"]},"756":{"title":"设定先攻值","titles":["快速上手","通常流程","进行 D&D 游戏"]},"757":{"title":"设定临时属性","titles":["快速上手","通常流程","进行 D&D 游戏"]},"758":{"title":"法术位","titles":["快速上手","通常流程","进行 D&D 游戏"]},"759":{"title":"长休","titles":["快速上手","通常流程","进行 D&D 游戏"]},"760":{"title":"死亡豁免","titles":["快速上手","通常流程","进行 D&D 游戏"]},"761":{"title":"故事","titles":[]},"762":{"title":".name 随机名字","titles":["故事"]},"763":{"title":".namednd 随机 DND 名字","titles":["故事"]},"764":{"title":".who 随机排列顺序","titles":["故事"]},"765":{"title":".modu 魔都模组查询","titles":["故事"]}},"dirtCount":0,"index":[["地精",{"2":{"763":1}}],["地址和服务器一样",{"2":{"686":1}}],["地址时",{"2":{"491":1}}],["地址都有与之相关的规定",{"2":{"278":1}}],["地址",{"0":{"338":1},"2":{"187":1,"201":1,"338":1,"482":1}}],["兽人",{"2":{"763":1}}],["矮人",{"2":{"763":1}}],["受国人",{"2":{"763":1}}],["受限于各种原因",{"2":{"7":1}}],["莱瑟曼人",{"2":{"763":1}}],["卡林珊人",{"2":{"763":1}}],["达马拉人",{"2":{"763":1}}],["达到暴击线",{"2":{"636":1}}],["达到成功线",{"2":{"635":1}}],["达到加骰线",{"2":{"635":1}}],["男|女",{"2":{"762":1}}],["创作角色卡",{"0":{"750":1,"755":1}}],["创建一张可以跨群聊使用的角色卡并绑定到当前群聊",{"2":{"748":1}}],["创建一个指定数量",{"2":{"704":1}}],["创建一个机器人应用",{"2":{"501":1}}],["创建一个新的自定义回复文件",{"2":{"415":1}}],["创建一个命令",{"2":{"119":2,"121":1,"127":5,"139":1}}],["创建一个结果对象",{"2":{"115":1,"116":1,"117":1}}],["创建按照要求创建一个机器人",{"2":{"535":1}}],["创建完成后",{"2":{"501":1}}],["创建完毕后点击分支名切换到对应分支页面",{"2":{"12":1}}],["创建应用",{"2":{"469":1,"473":1}}],["创建新的自定义指令",{"2":{"114":1}}],["创建指令",{"0":{"114":1},"2":{"117":1,"134":1}}],["创建和注册扩展",{"0":{"112":1}}],["创建日期",{"2":{"90":1}}],["创建文本格式的敏感词库",{"0":{"89":1}}],["创建",{"0":{"66":1,"68":1,"90":1,"491":1},"1":{"67":1}}],["创建分支",{"2":{"12":1}}],["秘密团",{"0":{"748":1}}],["尊重主持人与其他玩家",{"2":{"747":1}}],["尊敬的用户",{"2":{"15":1}}],["种族",{"2":{"746":1,"763":1}}],["绑定角色卡",{"2":{"746":1}}],["绑定的群聊中角色数据互相同步",{"2":{"641":1}}],["录入数据",{"2":{"746":1}}],["动作",{"2":{"746":6}}],["动态壁纸服务",{"2":{"448":1}}],["怪异",{"2":{"743":1}}],["怪物们",{"2":{"584":1}}],["怪物之锤",{"2":{"550":1,"642":1,"646":1}}],["超常的存在",{"2":{"743":1}}],["超级管理员权限",{"2":{"471":1}}],["超级群的邀请链接",{"2":{"471":1}}],["超级计算机以及大多数互联网基础设施",{"2":{"286":1}}],["背景设定在近未来的灵气复苏赛博朋克虚构世界中",{"2":{"742":1}}],["故事",{"0":{"761":1},"1":{"762":1,"763":1,"764":1,"765":1},"2":{"740":1}}],["故海豹官方不提供默认的敏感词库",{"2":{"356":1}}],["抗神组织",{"2":{"739":1}}],["绿色三角洲是保护人类免遭旧日支配者威胁的",{"2":{"739":1}}],["绿色三角洲",{"0":{"739":1},"2":{"739":1}}],["旁观",{"0":{"731":1}}],["旁显示审核通过",{"2":{"509":1}}],["继续记录",{"2":{"727":1}}],["继续按此顺序阅读剩余内容",{"2":{"16":1}}],["仍然存在于本群的日志记录中",{"2":{"727":1}}],["仍然没有办法解决问题",{"2":{"189":1}}],["暂停",{"2":{"746":1}}],["暂停记录当前日志",{"2":{"727":1}}],["暂时顾不上",{"2":{"2":1}}],["搭配竖线",{"2":{"722":2}}],["搭建",{"2":{"697":1,"718":1}}],["搭建机器人官方请参考",{"2":{"499":1}}],["火球术",{"2":{"722":2}}],["移出骰子",{"2":{"746":1}}],["移动版",{"2":{"722":1}}],["移除不常用的自定义回复",{"2":{"199":1}}],["移除信任目标用户",{"2":{"127":1}}],["移除",{"2":{"123":1,"124":1,"622":1}}],["哦",{"2":{"720":1}}],["跑团过程玩家使用海豹骰的常用指令和一般流程",{"2":{"745":1}}],["跑团",{"2":{"717":1}}],["跑团日志",{"0":{"726":1},"1":{"727":1,"728":1,"729":1,"730":1},"2":{"362":1,"457":1,"730":1}}],["跳过本节",{"2":{"716":1}}],["跳过此轮",{"2":{"147":1}}],["称为这次骰点",{"2":{"715":1}}],["称为",{"2":{"715":2}}],["事实上",{"2":{"708":1}}],["事发时间",{"2":{"125":1}}],["拥有",{"2":{"706":1}}],["拥有海豹核心的最终判定方式是可以接触到",{"2":{"622":1}}],["咕咕",{"2":{"702":1}}],["智能鸽子等娱乐相关指令",{"2":{"700":1}}],["智力",{"2":{"172":1,"582":2,"616":2,"658":5,"665":3}}],["章节",{"2":{"697":1}}],["性能过低导致的",{"2":{"696":1}}],["占用指定的端口号",{"2":{"695":1}}],["占有欲和控制力强烈",{"2":{"67":1}}],["像运行第一只海豹一样直接双击执行",{"2":{"693":1}}],["像正常的前端项目一样",{"2":{"154":1}}],["弹出的窗口都点击确定",{"2":{"686":1}}],["弹出窗口的字体与风格都不属于",{"2":{"309":1}}],["稍等片刻后",{"2":{"686":1}}],["稍作等待",{"2":{"457":1}}],["搞定",{"2":{"686":1}}],["防火墙",{"2":{"686":1}}],["防止改动内容丢失",{"2":{"418":1}}],["防止查看帮助时骰子的回复触发其他骰子",{"2":{"114":1}}],["吗",{"0":{"684":1}}],["医学奇迹",{"2":{"678":1}}],["医疗",{"2":{"665":2}}],["死亡",{"2":{"678":1}}],["死亡豁免的成功或失败数量增加或减少指定值",{"2":{"678":1}}],["死亡豁免失败+1",{"2":{"665":2,"678":2}}],["死亡豁免",{"0":{"566":1,"678":1,"760":1},"1":{"679":1}}],["昏迷后被攻击",{"2":{"678":1}}],["消耗",{"2":{"674":1}}],["消耗指定数量的指定法术位",{"2":{"674":1}}],["消耗数量",{"2":{"674":1}}],["消耗一个",{"2":{"672":1}}],["消息内容",{"2":{"706":2}}],["消息列表",{"2":{"503":1}}],["消息的随机延迟仍会被加入",{"2":{"423":1}}],["消息将在此延迟后发送",{"2":{"423":1}}],["消息以此内容为结尾时触发",{"2":{"420":1}}],["消息以内容为开头时触发",{"2":{"420":1}}],["消息匹配正则表达式时触发",{"2":{"420":1}}],["消息与内容相似时触发该回复项",{"2":{"420":1}}],["消息不包含此内容时触发",{"2":{"420":1}}],["消息包含此内容时触发",{"2":{"420":1}}],["消息通知列表",{"0":{"333":1},"1":{"334":1},"2":{"690":1}}],["消息",{"2":{"172":1,"268":1,"746":1}}],["恢复日志记录",{"2":{"746":1}}],["恢复生命值和法术位",{"2":{"676":1}}],["恢复所有法术位",{"2":{"672":1}}],["恢复数据到",{"2":{"460":1}}],["环数",{"2":{"674":1}}],["环法术位",{"2":{"672":2}}],["环的法术位上限",{"2":{"672":1}}],["环境使用",{"2":{"263":1}}],["环境下使用",{"2":{"261":1}}],["环境",{"2":{"158":1}}],["环境险恶",{"2":{"67":1}}],["装备或法术效果",{"2":{"670":1}}],["装甲",{"2":{"583":1}}],["长休",{"0":{"676":1,"759":1},"1":{"677":1},"2":{"676":1}}],["长剑=4",{"2":{"669":1}}],["长剑",{"2":{"669":2}}],["长按海豹核心的任务卡片",{"2":{"448":1,"449":1}}],["长按修补后的",{"2":{"264":1}}],["奇妙运用",{"0":{"669":1}}],["推一下试试",{"2":{"667":2}}],["推荐指令列表模版",{"2":{"503":1}}],["推荐你尽量使用",{"2":{"154":1}}],["推荐的流程",{"2":{"149":1}}],["推荐",{"2":{"46":1}}],["劣势掷骰",{"2":{"746":1}}],["劣势",{"2":{"667":1}}],["豁免",{"2":{"667":1}}],["豁免的用户",{"2":{"323":1}}],["退群指令",{"0":{"683":1}}],["退游小技巧",{"2":{"665":1}}],["退出的群聊",{"2":{"730":1}}],["退出并保存文件",{"2":{"480":1}}],["退出前",{"2":{"350":1}}],["退出事发群",{"2":{"328":1}}],["陷入了昏迷",{"2":{"665":1,"678":1}}],["剩余会扣减血量",{"2":{"665":1}}],["血量",{"2":{"665":1}}],["威吓",{"2":{"665":2}}],["欺诈",{"2":{"665":2}}],["说服",{"2":{"665":2}}],["说明如下",{"2":{"722":1}}],["说明该文件内容损坏",{"2":{"457":1}}],["说明",{"2":{"114":1}}],["驯养",{"2":{"665":2}}],["洞悉",{"2":{"665":2}}],["察觉",{"2":{"665":2}}],["宗教",{"2":{"665":2}}],["历史",{"2":{"665":2}}],["奥秘",{"2":{"665":2}}],["隐匿",{"2":{"665":2}}],["隐私协议",{"2":{"504":3}}],["隐私",{"2":{"450":1}}],["巧手",{"2":{"665":2}}],["熟练",{"2":{"665":6,"670":2}}],["熟悉指令",{"0":{"20":1}}],["熟悉海豹核心的功能",{"0":{"19":1}}],["戏份结束了",{"2":{"660":1}}],["狗头人3",{"2":{"659":2,"660":2}}],["狗头人2",{"2":{"659":4,"660":1}}],["狗头人1",{"2":{"659":8,"660":1}}],["形式自由",{"2":{"724":1}}],["形式",{"2":{"659":1}}],["形如",{"2":{"77":1}}],["固定值",{"2":{"659":1}}],["魅力",{"2":{"658":5,"665":3}}],["魅惑",{"2":{"582":1}}],["组织本身是非官方且非法的存在",{"2":{"739":1}}],["组",{"2":{"658":1}}],["组合键",{"2":{"457":1}}],["夜空下的某座高耸古堡",{"2":{"657":1}}],["夜神模拟器路径示例如下",{"2":{"259":1}}],["夜神模拟器",{"2":{"255":1}}],["依照惯例",{"2":{"722":1}}],["依靠的是玩家无穷的想象力",{"2":{"657":1}}],["依赖可以是多个",{"2":{"166":1}}],["依赖多个扩展",{"0":{"166":1}}],["依赖于",{"2":{"164":1,"165":1}}],["依赖其他扩展",{"0":{"164":1},"2":{"159":1}}],["龙与地下城常用格式",{"2":{"733":1}}],["龙与地下城",{"0":{"657":1},"1":{"658":1,"659":1,"660":1,"661":1,"662":1,"663":1,"664":1,"665":1,"666":1,"667":1,"668":1,"669":1,"670":1,"671":1,"672":1,"673":1,"674":1,"675":1,"676":1,"677":1,"678":1,"679":1},"2":{"657":2}}],["苦行",{"2":{"653":1}}],["朴素",{"2":{"653":1}}],["严重失误",{"2":{"715":1}}],["严重影响代码的可读性",{"2":{"224":1}}],["严厉",{"2":{"653":1}}],["钻塔",{"2":{"653":1}}],["钻探平台",{"2":{"653":1}}],["钻探设备",{"2":{"653":1}}],["货物",{"2":{"653":1}}],["谨慎使用",{"2":{"652":1}}],["谨慎删除",{"2":{"414":1}}],["去除",{"2":{"649":1}}],["去尝试加载使用了新",{"2":{"167":1}}],["甚为遗憾",{"2":{"646":1}}],["甚至一段话",{"2":{"720":1}}],["甚至永久冻结",{"2":{"718":1}}],["甚至安卓手机上搭建和部署海豹核心",{"2":{"537":1}}],["甚至是被打击的目标",{"2":{"512":1}}],["甚至是开发者",{"2":{"187":1,"201":1}}],["甚至强制使它们退出",{"2":{"446":1}}],["赵小安等",{"2":{"646":1}}],["赵骰核心和塔骰核心的绝大部分主流指令",{"2":{"548":1}}],["惠惠",{"2":{"646":1}}],["邪恶",{"2":{"646":1}}],["花作噫",{"2":{"646":1}}],["梨子",{"2":{"646":1}}],["致谢",{"0":{"646":1}}],["乘",{"2":{"637":1}}],["乘方等",{"2":{"637":1}}],["乘方",{"2":{"176":1}}],["减",{"2":{"637":1}}],["减少因沟通产生的不必要的麻烦",{"2":{"185":1,"213":1}}],["混合运算",{"0":{"637":1}}],["混淆",{"2":{"173":1}}],["统计当前日志",{"2":{"728":1}}],["统计指定日志中检定的成功失败数量",{"2":{"728":1}}],["统计暴击数",{"2":{"636":1}}],["统一",{"2":{"623":5}}],["统一id",{"2":{"120":1}}],["暴击轮数",{"2":{"636":1}}],["暴击",{"2":{"636":1}}],["暴击线",{"2":{"636":1}}],["暴力",{"2":{"15":1}}],["轮数",{"2":{"635":3,"636":1,"711":1}}],["国内多见于无限团",{"2":{"635":1}}],["额外",{"0":{"710":1},"1":{"711":1,"712":1,"713":1,"714":1,"715":1}}],["额外内存占用",{"2":{"644":1}}],["额外骰一次",{"2":{"632":1}}],["额外地再提交一份",{"2":{"193":1,"202":1}}],["掷骰5次",{"2":{"703":1}}],["掷骰",{"2":{"659":3,"746":3,"747":1}}],["掷骰2次",{"2":{"629":1}}],["掷出了",{"2":{"24":2,"562":2,"591":1,"628":6,"630":1,"631":3,"632":4,"633":4,"634":2,"635":3,"636":1,"637":5,"639":1,"640":1,"704":2,"709":1,"711":2}}],["停止的日志并不会丢失",{"2":{"727":1}}],["停止记录当前日志",{"2":{"727":1}}],["停止服务",{"2":{"624":1}}],["停止海豹核心",{"2":{"541":1}}],["停止海豹运行",{"2":{"457":1}}],["做一次备份",{"2":{"622":1}}],["做出判断",{"2":{"605":1}}],["做出灵活的回应",{"2":{"412":1}}],["做出贡献",{"2":{"206":1}}],["房规序号",{"2":{"620":1}}],["满",{"2":{"619":4}}],["满足",{"2":{"78":1}}],["幸运",{"2":{"616":2}}],["幸运转盘",{"2":{"59":2}}],["意志",{"2":{"616":2}}],["意味着只有",{"2":{"196":1}}],["意味着指定的依赖版本需要在",{"2":{"165":1}}],["总结性疯狂症状",{"2":{"746":1}}],["总值包括两个",{"2":{"616":1}}],["总之所有骰子发的内容",{"2":{"354":1}}],["总之请记住这个端口号",{"2":{"242":1}}],["聆听",{"2":{"614":1}}],["守秘人将考验调查员的心智",{"2":{"607":1}}],["守秘人会要求进行一个",{"2":{"594":1}}],["们进行对抗",{"2":{"606":1}}],["攻击对闪避",{"2":{"605":1}}],["攻击对反击",{"2":{"605":1}}],["外的其他系统",{"0":{"695":1}}],["外貌",{"2":{"616":2}}],["外",{"2":{"603":1}}],["外挂软件",{"2":{"512":1}}],["心理学",{"2":{"602":1}}],["惩罚",{"2":{"600":3,"631":1,"637":1}}],["惩罚骰",{"2":{"178":1,"631":1}}],["奖励",{"2":{"598":1,"605":1,"631":2}}],["奖励骰与惩罚骰",{"0":{"631":1},"2":{"746":1}}],["奖励骰和惩罚骰",{"0":{"598":1,"610":1}}],["奖励骰",{"2":{"178":1,"713":1}}],["难度",{"2":{"597":1}}],["难免存在错误和缺失",{"2":{"94":1}}],["扣除1=1点",{"2":{"608":1,"611":1}}],["扣除",{"2":{"593":1}}],["±",{"2":{"590":1,"665":1,"670":1,"678":1}}],["揭开邪恶的阴谋",{"2":{"584":1}}],["奔波在奇怪而危险的场所之间",{"2":{"584":1}}],["神秘和恐怖的游戏",{"2":{"584":1}}],["裝甲",{"2":{"583":1}}],["護甲",{"2":{"583":1}}],["護甲值",{"2":{"583":1}}],["護甲等級",{"2":{"583":1}}],["护甲",{"2":{"583":1}}],["护甲值",{"2":{"583":1}}],["护甲等级",{"2":{"583":1}}],["敬请理解",{"2":{"583":1}}],["克苏鲁的呼唤常用格式",{"2":{"733":1}}],["克苏鲁的呼唤",{"0":{"584":1},"1":{"585":1,"586":1,"587":1,"588":1,"589":1,"590":1,"591":1,"592":1,"593":1,"594":1,"595":1,"596":1,"597":1,"598":1,"599":1,"600":1,"601":1,"602":1,"603":1,"604":1,"605":1,"606":1,"607":1,"608":1,"609":1,"610":1,"611":1,"612":1,"613":1,"614":1,"615":1,"616":1,"617":1,"618":1,"619":1,"620":1},"2":{"584":2,"612":1,"739":1}}],["克苏鲁",{"2":{"582":1}}],["克苏鲁神话知识",{"2":{"582":1}}],["克苏鲁神话",{"2":{"582":1}}],["别名",{"2":{"627":1,"642":1,"709":8}}],["别称与其正式名称等价",{"2":{"582":1}}],["别忘了回顾一遍本节内容",{"2":{"230":1}}],["體質",{"2":{"582":1}}],["体质",{"2":{"582":1,"658":5,"665":3}}],["话术",{"2":{"582":1}}],["侦察",{"2":{"582":1}}],["侦查=80",{"2":{"639":1}}],["侦查=75",{"2":{"639":1}}],["侦查=53",{"2":{"630":1}}],["侦查+1d20",{"2":{"639":3}}],["侦查+10=53",{"2":{"630":1}}],["侦查+10",{"2":{"595":1,"603":1,"604":1}}],["侦查99",{"2":{"595":1}}],["侦查",{"2":{"582":1,"595":3,"596":1,"599":1,"603":1,"605":1,"614":1}}],["知识",{"2":{"582":1}}],["知道问题出在哪里之后",{"2":{"187":1,"201":1}}],["射击",{"2":{"582":1}}],["射击检定",{"2":{"368":1}}],["冲锋枪",{"2":{"582":2}}],["➯",{"2":{"582":1,"593":1,"608":1,"611":1,"665":4,"678":2}}],["场景举例",{"2":{"582":1}}],["互相可以替代使用",{"2":{"582":1}}],["互联网上的英文内容数量是具有压倒性的优势的",{"2":{"207":1}}],["五群",{"2":{"580":1}}],["五要素",{"2":{"189":1,"217":1}}],["四群",{"2":{"580":1}}],["四项权限",{"2":{"448":1}}],["三群",{"2":{"580":1}}],["三目运算符",{"0":{"182":1}}],["步骤与普通跨平台迁移一致",{"2":{"576":1}}],["步骤如下",{"2":{"240":1,"577":1}}],["→",{"0":{"576":1}}],["明日方舟跑团规则",{"2":{"572":1}}],["剑世界",{"2":{"572":1}}],["跨平台迁移时不能使用旧的可执行文件",{"2":{"575":1}}],["跨平台迁移",{"0":{"575":1},"1":{"576":1}}],["跨平台",{"0":{"571":1}}],["跨群存在",{"2":{"172":1}}],["彩蛋",{"2":{"570":1}}],["丢进指令虚拟机里执行",{"2":{"570":1}}],["丢失这段时间以来录入的角色卡",{"2":{"442":1,"577":1}}],["魔都模组查询",{"0":{"765":1}}],["魔都查询",{"2":{"569":1}}],["魔骨",{"2":{"646":1}}],["魔法大典的整理者为",{"2":{"646":1}}],["魔法大典",{"2":{"642":1}}],["魔术师逆位",{"2":{"67":1}}],["团为例",{"2":{"569":1}}],["休息",{"0":{"567":1}}],["休眠时始终保持网络连接",{"2":{"450":1}}],["攀爬检定",{"2":{"594":1}}],["攀爬",{"2":{"558":1}}],["园艺",{"2":{"558":1}}],["各种武器等等",{"2":{"558":1}}],["各种旧版翻译",{"2":{"557":1,"561":1}}],["各个模块的特化文件放在这里",{"2":{"430":1}}],["细节可参见",{"2":{"553":1}}],["法术位得到了恢复",{"2":{"676":1}}],["法术位",{"0":{"672":1,"758":1},"1":{"673":1}}],["法术位支持",{"0":{"565":1}}],["法术",{"2":{"553":1}}],["法则来思考遇到的程序错误问题",{"2":{"189":1,"217":1}}],["系列指令和",{"2":{"569":1}}],["系列资料的整理者主要为",{"2":{"646":1}}],["系列资料",{"2":{"550":1}}],["系统指定端口",{"0":{"694":1}}],["系统运行两个是很简单的",{"2":{"693":1}}],["系统的",{"2":{"543":1}}],["系统的服务器和个人电脑举例",{"2":{"272":1}}],["系统服务已删除",{"2":{"541":1}}],["系统为例",{"2":{"460":1}}],["系统中使用的格式",{"2":{"314":1}}],["系统中存在众多的",{"2":{"302":1}}],["系统推荐使用",{"2":{"302":1}}],["系统默认使用",{"2":{"302":1}}],["系统未提供对应的",{"2":{"262":1}}],["系统可能会出现无法运行的问题",{"2":{"252":1}}],["系统会运行一些进程以保证系统的正常运行",{"2":{"252":1}}],["系统上",{"2":{"227":1,"292":1,"457":1}}],["系统",{"0":{"693":1},"1":{"694":1},"2":{"224":1,"272":1}}],["系统角色卡的功能",{"2":{"146":1}}],["系统与",{"2":{"146":1}}],["极少的资源占用",{"0":{"550":1}}],["极难成功",{"2":{"604":1,"608":1}}],["极难成功等",{"2":{"136":1}}],["极难",{"2":{"136":1,"597":1}}],["易于部署和使用",{"0":{"549":1}}],["敏捷+2",{"2":{"590":1}}],["敏捷50",{"2":{"589":1}}],["敏捷",{"2":{"548":1,"616":2,"658":5,"665":3}}],["敏感词数据库文件",{"2":{"431":1}}],["敏感词库",{"2":{"457":1}}],["敏感词库文件",{"2":{"430":1}}],["敏感词库本身属于敏感信息",{"2":{"356":1}}],["敏感词库通常为",{"2":{"356":1}}],["敏感词库等的编写中",{"2":{"93":1}}],["敏感词列表",{"2":{"356":1}}],["敏感词管理",{"0":{"356":1},"2":{"356":1,"359":1}}],["隔离属性",{"2":{"539":1}}],["隔开不同的路径",{"2":{"262":1}}],["隔开",{"2":{"77":1}}],["考虑到后续升级",{"2":{"539":1}}],["镜像",{"2":{"538":1,"539":1}}],["芯片请下载",{"2":{"539":1}}],["芯片请使用",{"2":{"538":1}}],["芯片的",{"2":{"539":1}}],["芯片",{"2":{"538":1}}],["版的",{"2":{"582":3}}],["版",{"0":{"584":1},"1":{"585":1,"586":1,"587":1,"588":1,"589":1,"590":1,"591":1,"592":1,"593":1,"594":1,"595":1,"596":1,"597":1,"598":1,"599":1,"600":1,"601":1,"602":1,"603":1,"604":1,"605":1,"606":1,"607":1,"608":1,"609":1,"610":1,"611":1,"612":1,"613":1,"614":1,"615":1,"616":1,"617":1,"618":1,"619":1,"620":1},"2":{"538":3,"553":1,"722":1,"739":1}}],["版本1",{"2":{"625":1}}],["版本高于",{"2":{"539":1}}],["版本过低会导致程序无法正常启动",{"2":{"522":1}}],["版本是否匹配",{"2":{"478":1}}],["版本起",{"2":{"395":1,"397":1,"642":1,"643":1,"708":1,"709":1}}],["版本起弃用",{"2":{"254":1}}],["版本做了优化调整",{"2":{"350":1}}],["版本新增的功能",{"2":{"350":1}}],["版本要求",{"2":{"261":1}}],["版本选择",{"2":{"241":1}}],["版本弃用此方案",{"2":{"236":1,"253":1}}],["版本的海豹骰",{"2":{"227":1}}],["版本的海豹骰中",{"2":{"190":1}}],["版本限制是可选的",{"2":{"165":1}}],["版本号+发布日期",{"2":{"538":1}}],["版本号是否大于",{"2":{"295":1}}],["版本号",{"2":{"159":1,"165":1,"172":1}}],["版本开始支持通过",{"2":{"519":1}}],["版本开始支持尾逗号",{"2":{"39":1,"40":1}}],["版本开始",{"2":{"140":1,"417":1,"427":1,"428":1}}],["版本为",{"2":{"94":1,"253":1}}],["版本",{"2":{"90":1,"112":1,"239":1,"478":4,"652":1}}],["树莓派等",{"2":{"538":1}}],["树莓派等设备",{"2":{"538":1}}],["适合绝大多数用户使用",{"2":{"538":1}}],["适用于规则书中的关键连接自救规则",{"2":{"559":1}}],["适用于服务器",{"2":{"538":1}}],["适用于",{"2":{"538":1}}],["需以",{"2":{"535":1}}],["需要产生一个随机数的时候",{"2":{"747":1}}],["需要骰子账号有适当的权限",{"2":{"732":1}}],["需要骰主上号同意",{"2":{"691":1}}],["需要知道对应的群号",{"2":{"730":1}}],["需要知道的是",{"2":{"514":1}}],["需要更多结果",{"2":{"722":1}}],["需要一点操作",{"0":{"694":1}}],["需要关闭系统内置防火墙或设置端口放行",{"2":{"684":1}}],["需要说明",{"2":{"652":1}}],["需要二次确认",{"2":{"622":2}}],["需要自行下载安装",{"2":{"514":1}}],["需要自行开放",{"2":{"482":1}}],["需要比较简单的部署流程",{"2":{"513":2}}],["需要连接时",{"2":{"496":1}}],["需要将监听地址修改为",{"2":{"493":1}}],["需要特别注意的是",{"2":{"493":1}}],["需要权限",{"2":{"471":1}}],["需要调整一些系统设置来确保其能够在后台存活",{"2":{"446":1}}],["需要点击",{"2":{"395":1,"405":1}}],["需要回答问题并由我确认",{"2":{"334":1}}],["需要验证消息",{"2":{"334":1}}],["需要手动抓取",{"2":{"248":1}}],["需要端口不重复",{"2":{"245":1}}],["需要抓",{"2":{"242":1}}],["需要先介绍海豹核心管理你角色卡的方式",{"2":{"641":1}}],["需要先停止核心",{"2":{"442":1}}],["需要先运行",{"2":{"239":1}}],["需要先找到个和别人不重复的柜子",{"2":{"128":1}}],["需要具体问题具体分析",{"2":{"197":1}}],["需要把压缩包解压之后再双击运行海豹核心",{"2":{"196":1}}],["需要注意引擎的整型为",{"2":{"158":1}}],["需要工程编译为插件的单",{"2":{"151":1}}],["需要在同一",{"0":{"685":1},"1":{"686":1,"687":1}}],["需要在",{"2":{"504":1}}],["需要在插件注册后调用",{"2":{"138":1}}],["需要在最外面写",{"2":{"84":1}}],["需要移除的选项的序号",{"2":{"130":1}}],["需要添加的选项的内容",{"2":{"130":1}}],["需要取出的时候",{"2":{"128":1}}],["需要使用终端启动",{"2":{"538":2}}],["需要使用",{"2":{"116":1,"173":1,"478":2}}],["需要返回指令结果对象",{"2":{"115":1}}],["需要",{"2":{"94":1,"104":1,"491":1}}],["需要输出不同回复的机制",{"2":{"81":1}}],["需要的值",{"2":{"74":1}}],["需要用",{"2":{"59":1}}],["需要提到",{"2":{"51":1}}],["需要包裹在",{"2":{"38":1}}],["需要你先手动解决冲突",{"2":{"14":1}}],["二群",{"2":{"580":1}}],["二维码会在十秒左右出现",{"2":{"514":1}}],["二流角色",{"2":{"67":1}}],["倘若出现账号被封禁等情况",{"2":{"512":1}}],["临时的技能熟练",{"2":{"670":1}}],["临时属性",{"0":{"564":1,"670":1},"1":{"671":1}}],["临时甚至",{"2":{"512":1}}],["临时疯狂",{"2":{"370":1}}],["封禁",{"2":{"512":1,"718":1}}],["遇见这种情况请点击",{"2":{"509":1}}],["遇到问题时请先检查",{"2":{"501":1}}],["遇到问题先查询资料",{"0":{"189":1}}],["沙盒频道",{"2":{"508":1}}],["资源",{"2":{"550":1}}],["资源管理",{"0":{"428":1},"2":{"426":1}}],["资料卡",{"2":{"508":1}}],["期间的等待时间可能较久",{"2":{"507":1}}],["企业账号的开发者资质审核",{"0":{"507":1}}],["企鹅早该爆金币辣",{"2":{"52":3}}],["审核主要是测试机器人能否在所选支持的场景下",{"2":{"504":1}}],["审核",{"2":{"504":1}}],["审核通过后",{"2":{"504":1}}],["预设模板",{"0":{"733":1}}],["预设模式",{"2":{"658":1}}],["预期输出",{"2":{"504":1}}],["预料之中而情理之外的事情又再次发生了",{"2":{"214":1}}],["绝大多数使用",{"2":{"538":1}}],["绝大部分群聊中的",{"2":{"512":1}}],["绝大部分指令的文案都可以进行修改",{"2":{"361":1}}],["绝对不要原样上传",{"2":{"504":1}}],["扫码添加即可",{"2":{"505":1}}],["扫码确认修改",{"2":{"503":1}}],["扫码连接",{"2":{"493":1}}],["变化值",{"2":{"678":1}}],["变动",{"2":{"501":1}}],["变量机制等",{"2":{"425":1}}],["变量不生效",{"2":{"172":1}}],["变量的值固定并不代表它们是持久变量",{"2":{"172":1}}],["变量的名称可以是汉字",{"2":{"172":1}}],["变量值变成",{"2":{"172":1}}],["变量值变为随机数",{"2":{"172":1}}],["变量值被覆盖",{"2":{"172":1}}],["变量值丢失",{"2":{"172":1}}],["变量属于未定义行为",{"2":{"172":1}}],["变量为空",{"2":{"82":1}}],["变量赋值时",{"2":{"82":1}}],["变量运算",{"0":{"79":1}}],["变量",{"0":{"172":1},"2":{"75":1,"97":1,"116":1}}],["变量名字",{"2":{"172":1}}],["变量名",{"2":{"74":1,"172":1,"376":1}}],["家庭网络的",{"2":{"501":1}}],["公骰是免费的",{"2":{"718":1}}],["公骰",{"2":{"718":1}}],["公骰列表",{"2":{"718":1}}],["公网",{"2":{"501":1}}],["公共条件属于当前自定义回复文件",{"2":{"417":1}}],["公共条件",{"0":{"417":1},"2":{"417":1}}],["子网中的",{"2":{"497":2}}],["子元素由",{"2":{"37":1}}],["宿主机上的",{"2":{"496":1}}],["得以访问图片",{"2":{"491":1}}],["得到的三个结果将互不相同",{"2":{"51":1}}],["得到的三个结果可能有重复",{"2":{"51":1}}],["容器模式下功能受限",{"2":{"539":1}}],["容器中的海豹不能直接访问宿主机监听本地端口的",{"2":{"496":1}}],["容器默认接入此网络",{"2":{"496":1}}],["容器",{"0":{"495":1},"2":{"494":1}}],["容器配置",{"0":{"493":1}}],["容器完成下述配置文件修改及扫码登录过程",{"2":{"491":1}}],["容器以使",{"2":{"491":1}}],["容器的日志",{"2":{"493":1}}],["容器的",{"2":{"491":1}}],["容器共同构成一个服务栈",{"2":{"490":1}}],["容易成功",{"2":{"459":1}}],["容易误解的",{"2":{"78":1}}],["至此",{"2":{"481":1}}],["至少需要保留一个选项",{"2":{"363":1}}],["供",{"2":{"703":1}}],["供海豹使用",{"2":{"481":1}}],["供你查看大图",{"2":{"428":1}}],["证明海豹核心已和",{"2":{"482":1}}],["证明",{"2":{"481":1}}],["架设",{"0":{"478":1},"1":{"479":1,"480":1,"481":1},"2":{"478":1}}],["凭证和基础信息",{"2":{"469":1}}],["建立好应用后点击侧边导航栏",{"2":{"473":1}}],["建立好应用后上滑",{"2":{"464":1}}],["建立应用",{"0":{"468":1}}],["建议尽量将",{"2":{"539":1}}],["建议迁移到其它平台",{"2":{"512":1}}],["建议对数据库进行完整性检查",{"2":{"457":1}}],["建议放在",{"2":{"375":1}}],["建议优先选择高位端口",{"2":{"278":1}}],["建议使用",{"2":{"265":1}}],["建议使用语义化版本号",{"2":{"90":1}}],["建议换成别的前缀",{"2":{"73":1}}],["建议通过更系统的教程学习",{"2":{"47":1}}],["建议选择使用适用性最广的",{"2":{"30":1}}],["建议选择熟悉的格式",{"2":{"30":1}}],["建议你回到本节",{"2":{"16":1}}],["建议先同步上游的主分支",{"2":{"14":1}}],["建议为形如",{"2":{"12":1}}],["建议不要在主分支操作",{"2":{"12":1}}],["施工中",{"2":{"462":1}}],["找出",{"2":{"460":1}}],["找到以下牌组",{"2":{"652":1}}],["找到这项功能",{"2":{"545":1}}],["找到各个版本的镜像",{"2":{"539":1}}],["找到海豹核心",{"2":{"450":1}}],["找到海豹核心安装包",{"2":{"441":1}}],["找到",{"2":{"447":1,"460":1}}],["找到任务管理器",{"2":{"252":1}}],["找到了",{"2":{"210":1}}],["酌情进行使用",{"2":{"460":1}}],["人物昏迷",{"2":{"665":1}}],["人物属性设置如下",{"2":{"665":1}}],["人物卡和群内临时卡",{"2":{"457":1}}],["人工智能鸽子",{"0":{"552":1,"702":1}}],["人品还行吧",{"2":{"181":1}}],["人品爆表",{"2":{"181":1}}],["硬盘受到物理损坏",{"2":{"456":1}}],["首选",{"0":{"686":1}}],["首次启动容器后",{"2":{"492":1}}],["首次启动容器",{"0":{"492":1}}],["首次启动海豹核心时",{"2":{"454":1}}],["首次打开",{"2":{"480":1}}],["首先使用",{"2":{"730":1}}],["首先使用以下命令停止容器运行",{"2":{"493":1}}],["首先彻底关闭海豹",{"2":{"699":1}}],["首先确定是否为网络问题",{"2":{"689":1}}],["首先确认使用安卓协议",{"2":{"685":1}}],["首先修改",{"2":{"497":1}}],["首先按照",{"2":{"496":1}}],["首先安装海豹安卓端",{"2":{"265":1}}],["首先需要在你的手机安装",{"2":{"262":1}}],["首先需要创建一个扩展",{"2":{"113":1}}],["首先下载",{"2":{"259":1}}],["首先启动",{"2":{"258":1}}],["首先检查是否已经存在",{"2":{"112":1}}],["首先给",{"2":{"78":1}}],["首先我们打开",{"2":{"70":1}}],["首先熟悉海豹核心能做到",{"2":{"19":1}}],["首先感谢你选用海豹核心",{"2":{"16":1}}],["首先",{"2":{"10":1,"11":1,"17":1,"20":1,"229":1,"457":1,"460":1,"491":1}}],["锁定",{"2":{"451":1}}],["锁屏显示",{"2":{"448":1}}],["优先开启所有选项",{"2":{"451":1}}],["优势|劣势",{"2":{"667":1,"746":2}}],["优势+2",{"2":{"659":1}}],["优势骰与劣势骰也可使用通用的表达式表达",{"2":{"632":1}}],["优势骰与劣势骰",{"0":{"632":1}}],["优势骰劣势骰",{"0":{"562":1}}],["优势",{"2":{"178":1,"667":1,"746":1}}],["耗电管理",{"2":{"451":1}}],["电子邮箱作为接收者",{"2":{"690":1}}],["电池优化",{"2":{"450":1}}],["电池",{"2":{"450":1}}],["电脑海豹转安卓端海豹",{"0":{"445":1}}],["华为",{"0":{"450":1}}],["鸿蒙系统",{"0":{"450":1}}],["始终允许",{"2":{"449":1}}],["音乐和音频",{"2":{"448":1}}],["照片和视频",{"2":{"448":1}}],["澎湃系统",{"2":{"448":1}}],["红米",{"0":{"448":1,"449":1}}],["品牌手机",{"2":{"447":1}}],["授予海豹核心必要权限",{"0":{"447":1}}],["遵循下面介绍的步骤总是最保险的",{"2":{"446":1}}],["利用导入导出功能将图片放入海豹的导出文件夹",{"2":{"443":1}}],["利用海豹从上往下逐个匹配的机制达成相同效果",{"2":{"83":1}}],["涉及到的符号均是英文符号",{"2":{"443":1}}],["涉及网络请求或延迟执行的内容",{"2":{"158":1}}],["姓名文件",{"2":{"430":1}}],["├─",{"2":{"430":1}}],["├─images",{"2":{"430":1}}],["├─helpdoc",{"2":{"430":1}}],["├─log",{"2":{"430":1}}],["├─extra",{"2":{"430":1}}],["├─extensions",{"2":{"430":1}}],["├─coc7",{"2":{"430":1}}],["├─configs",{"2":{"430":1}}],["├─censor",{"2":{"430":1}}],["├─dnd5e",{"2":{"430":1}}],["├─default",{"2":{"430":1}}],["├─decks",{"2":{"430":1}}],["├─data",{"2":{"430":1}}],["├─assets",{"2":{"56":1}}],["共计0条",{"2":{"670":1}}],["共计",{"2":{"658":5}}],["共用属性表达式",{"2":{"606":1}}],["共鸣性怪异掷骰",{"2":{"746":1}}],["共鸣性怪异规则属性生成",{"0":{"714":1}}],["共鸣性怪异规则骰点",{"0":{"713":1},"2":{"743":1}}],["共鸣性怪异",{"0":{"743":1},"2":{"572":1,"743":1}}],["共存",{"2":{"441":1}}],["共同归于",{"2":{"426":1}}],["共有两种实现方式",{"2":{"119":1}}],["辅助工具",{"0":{"426":1},"1":{"427":1,"428":1},"2":{"426":1,"686":1}}],["听说可以用正则匹配解决",{"2":{"425":1}}],["听起来是废话文学",{"2":{"116":1,"117":1}}],["均可作为运算符使用",{"2":{"637":1}}],["均可触发",{"2":{"420":1}}],["均为字符串",{"2":{"94":1}}],["精灵",{"2":{"763":1}}],["精准匹配",{"2":{"420":2}}],["精确匹配",{"2":{"26":1}}],["收不到结果",{"2":{"638":1}}],["收缩",{"2":{"418":1}}],["收到好友邀请",{"2":{"690":1}}],["收到加群邀请",{"2":{"690":1}}],["收到指令",{"2":{"624":1}}],["收到符合任意一个内容的消息时",{"2":{"420":1}}],["收到的所有消息",{"2":{"354":1}}],["收到的指令",{"2":{"354":1}}],["收到响应之后再回应发送者",{"2":{"135":1}}],["右上角可以删除这一条回复项",{"2":{"418":1}}],["右键菜单中的",{"2":{"56":1}}],["才会触发该回复项",{"2":{"419":1}}],["才会依次判断每个回复项的条件",{"2":{"417":1}}],["才能使用",{"2":{"624":1}}],["才能将你的机器人邀请至服务器中",{"2":{"466":1}}],["才能尝试关闭此进程",{"2":{"199":1}}],["才能正常加载",{"2":{"166":1}}],["才能更好的支持你进行版本限制",{"2":{"165":1}}],["才能让扩展起效",{"2":{"112":1}}],["才能发送给触发者",{"2":{"94":1}}],["才能获得作者们提供的最新内容",{"2":{"58":1}}],["晚安",{"2":{"412":1}}],["晚上",{"2":{"50":3,"57":6}}],["午安",{"2":{"412":1}}],["机器人列表",{"0":{"649":1}}],["机器人采用",{"2":{"512":1}}],["机器人官方频道跳转",{"0":{"508":1},"2":{"508":1}}],["机器人官方频道",{"2":{"504":1}}],["机器人需要正常发出回应",{"2":{"504":1}}],["机器人自测报告",{"2":{"504":1}}],["机器人上线",{"0":{"504":1},"2":{"509":1}}],["机器人密钥",{"2":{"501":1}}],["机器人令牌",{"2":{"501":1}}],["机器人应用",{"2":{"501":1}}],["机器人文档",{"2":{"499":1,"506":1}}],["机器人",{"2":{"473":1,"475":1,"499":1,"501":1,"508":1}}],["机器人管理",{"2":{"471":1}}],["机器性能有关",{"2":{"395":1}}],["机制添加了自设规则",{"2":{"648":1}}],["机制",{"2":{"94":2}}],["折叠无变更",{"2":{"388":1,"406":1}}],["千万不要递归嵌套",{"2":{"377":1}}],["禁止玩家设置与海豹连接的端口",{"2":{"488":1}}],["禁止递归嵌套",{"2":{"377":1}}],["禁言骰子",{"2":{"327":1}}],["效果与",{"2":{"653":1}}],["效果如下",{"2":{"375":1}}],["效率会更高",{"2":{"189":1}}],["批量设定多个角色的先攻值",{"2":{"659":1}}],["批量",{"2":{"371":4}}],["技能加值会自动计算",{"2":{"665":1}}],["技能点数",{"2":{"614":1,"615":2}}],["技能应用不同调整值",{"2":{"605":1}}],["技能对抗对手的另一属性",{"2":{"605":1}}],["技能名称",{"2":{"614":2,"615":2}}],["技能名+指定数值",{"2":{"603":1}}],["技能名",{"2":{"603":1,"713":1}}],["技能",{"2":{"582":3,"585":1,"604":1,"605":1,"665":18,"670":3,"746":6,"753":1}}],["技能成长中",{"2":{"371":1}}],["技能成长",{"0":{"371":1,"613":1,"753":1},"1":{"614":1,"615":1},"2":{"371":11,"746":1}}],["技术型的个人博客和知乎平台具有相对优质的内容",{"2":{"207":1}}],["永久冻结",{"2":{"512":1}}],["永久疯狂",{"2":{"370":1}}],["永远不要直接运行压缩包中的海豹核心",{"2":{"539":1}}],["永远不会是你学习计算机领域知识的最佳选择",{"2":{"207":1}}],["永远",{"2":{"30":1}}],["角色卡",{"2":{"746":1}}],["角色卡管理",{"0":{"641":1}}],["角色序号",{"2":{"641":4}}],["角色名被用于在进行各种操作和记录",{"2":{"640":1}}],["角色名中不能带有空格",{"2":{"640":1}}],["角色名设定",{"0":{"640":1}}],["角色名",{"2":{"589":1,"640":1,"641":6,"659":2,"733":3,"746":5,"748":2}}],["角色疯狂",{"2":{"370":1}}],["角色属性",{"0":{"144":1}}],["附加语",{"2":{"370":1}}],["附加在问题中",{"2":{"221":1}}],["增减",{"2":{"369":3}}],["增加一个",{"2":{"672":1}}],["增加一个新的依赖",{"2":{"166":1}}],["增加10=10",{"2":{"582":1}}],["增加",{"2":{"419":1,"422":1}}],["增加怒气值",{"2":{"328":1,"355":1}}],["增加了检测机制",{"2":{"254":1,"261":1}}],["增加指令",{"2":{"158":1}}],["增加功能",{"2":{"8":1}}],["暗影狂奔掷骰",{"2":{"746":1}}],["暗影狂奔规则骰点",{"0":{"715":1},"2":{"742":1}}],["暗影狂奔",{"0":{"742":1},"2":{"572":1,"742":1}}],["暗中检定只在群聊中可用",{"2":{"601":1}}],["暗中检定",{"0":{"601":1},"1":{"602":1},"2":{"746":1}}],["暗中",{"2":{"368":2}}],["暗骰只能在群内触发",{"2":{"133":1}}],["暗骰",{"0":{"638":1},"2":{"133":3,"373":3,"499":1,"746":1}}],["失误的同时成功度为",{"2":{"715":1}}],["失误",{"2":{"715":1}}],["失误中断系统进程可能导致系统崩溃或其他隐患",{"2":{"199":1}}],["失败时失去理智",{"2":{"746":1,"751":1}}],["失败时理智损失",{"2":{"608":1,"609":2,"610":1}}],["失败0项",{"2":{"670":1}}],["失败成长值",{"2":{"615":1}}],["失败变更",{"2":{"371":2}}],["失败",{"2":{"368":1,"371":2,"582":3,"595":1,"596":1,"597":1,"600":2,"611":1}}],["检定时添加",{"2":{"678":1}}],["检定结果将不会发送到使用指令的群聊",{"2":{"601":1}}],["检定结果为",{"2":{"595":3,"597":1,"599":1,"602":1,"667":3}}],["检定一词要与恰当的技能或属性一起使用",{"2":{"594":1}}],["检定",{"0":{"368":1,"594":1,"667":1},"1":{"595":1,"596":1,"597":1,"598":1,"599":1,"600":1,"668":1,"669":1},"2":{"368":7,"669":1,"746":2,"747":1}}],["检查并进行远程更新",{"2":{"622":1}}],["检查",{"2":{"458":2}}],["检查当前群聊中",{"2":{"142":1}}],["检查当前时间点附近",{"2":{"142":1}}],["检查第",{"2":{"110":1}}],["粘贴文案内容时",{"2":{"365":1}}],["全文搜索",{"0":{"644":1}}],["全文搜索索引缓存",{"2":{"430":1}}],["全文粘贴到文本框里即可",{"2":{"568":1}}],["全文案为",{"2":{"375":1}}],["全部",{"2":{"364":1}}],["全球化",{"2":{"309":1}}],["刷子",{"2":{"363":1}}],["刷屏警告工作原理为令牌桶算法",{"2":{"346":1}}],["刷屏警告",{"0":{"346":1}}],["刷屏",{"2":{"327":1}}],["尽快扫码登录",{"2":{"514":1}}],["尽快使用手机",{"2":{"493":1}}],["尽早保存",{"2":{"363":1}}],["尽管不同方案之间的差异很大",{"2":{"512":1}}],["尽管市场份额相对较小",{"2":{"286":1}}],["尽管可能只需要你做相似的操作",{"2":{"210":1}}],["判定线",{"2":{"713":1}}],["判定人物死亡",{"2":{"665":1}}],["判定值",{"2":{"604":2,"605":2}}],["判定",{"2":{"363":1,"368":3}}],["判断进入下一轮或结束",{"2":{"636":1}}],["判断是否抽取成功",{"2":{"119":1}}],["判断时条件中的",{"2":{"84":1}}],["判断3",{"2":{"81":2}}],["判断2",{"2":{"81":2}}],["判断1",{"2":{"81":2}}],["筛选文案",{"0":{"364":1}}],["筛选",{"2":{"362":1,"364":1}}],["左上角的",{"2":{"479":1}}],["左侧是分类",{"2":{"362":1}}],["左键单击它",{"2":{"196":1}}],["符合人设呢",{"2":{"361":1}}],["符号在正则表达式中含有特殊含义",{"2":{"73":1}}],["哪个用户触发了什么等级的敏感词",{"2":{"357":1}}],["哪怕裸键是",{"2":{"34":1}}],["何地",{"2":{"357":1}}],["邀请入频道后",{"2":{"691":1}}],["邀请链接",{"2":{"475":1}}],["邀请海豹",{"0":{"466":1,"471":1,"475":1}}],["邀请人",{"2":{"355":1}}],["邀请者",{"2":{"105":1,"120":2}}],["程度依次升高",{"2":{"355":1}}],["程序",{"2":{"306":1,"460":1}}],["程序可以从这类语言中方便地恢复原有的数据结构",{"2":{"301":1}}],["程序运行中使用的数据",{"2":{"301":1}}],["程序会以工作目录作为索引目录树的起始位置",{"2":{"274":1}}],["程序的日志",{"0":{"225":1}}],["程序实际运行时给出的反馈",{"2":{"211":1}}],["程序日志还是网络资源",{"2":{"205":1}}],["程序上的需求",{"2":{"192":1,"233":1}}],["悬浮在问号上即可看见对应帮助",{"2":{"354":1}}],["响应设置",{"0":{"355":1},"2":{"353":1}}],["响应发送者",{"2":{"131":1}}],["拦截日志",{"2":{"357":1}}],["拦截骰子收到的所有消息进行检查",{"2":{"354":1}}],["拦截骰子收到的命令文本进行检查",{"2":{"354":1}}],["拦截骰子发出的消息文本",{"2":{"354":1}}],["拦截范围",{"2":{"354":1}}],["拦截设置主要分为两部分",{"2":{"353":1}}],["拦截管理",{"2":{"352":2}}],["拦截",{"0":{"351":1},"1":{"352":1,"353":1,"354":1,"355":1,"356":1,"357":1,"358":1,"359":1}}],["天气不错",{"2":{"628":1}}],["天需要重新登录",{"2":{"513":1}}],["天",{"2":{"350":1}}],["频道吗",{"0":{"691":1}}],["频道私信",{"2":{"503":1}}],["频道",{"2":{"348":1,"503":1,"718":1}}],["频道设置",{"0":{"348":1}}],["想认识更多骰主",{"2":{"580":1}}],["想开多个海豹必须修改端口号",{"2":{"347":1}}],["想要创建一条自定义指令",{"2":{"113":1}}],["界面中",{"2":{"625":1}}],["界面添加",{"2":{"515":2}}],["界面切换签名服务",{"2":{"514":1}}],["界面",{"2":{"447":2,"551":1,"730":1}}],["界面地址和启动参数",{"2":{"441":1}}],["界面地址由",{"2":{"347":1}}],["界面的",{"2":{"323":1,"352":1,"362":1,"385":1,"395":1,"404":1,"413":1}}],["速率设置支持以下格式",{"2":{"346":1}}],["条频道私聊消息而没有收到回复",{"2":{"708":1}}],["条",{"2":{"373":1,"642":1}}],["条文本后",{"2":{"345":1}}],["条件语句",{"0":{"183":1}}],["条件语句嵌套条件算符",{"0":{"84":1}}],["条件算符",{"0":{"179":1,"180":1},"1":{"180":1,"181":1,"182":1}}],["条件判断",{"2":{"84":1}}],["条件",{"2":{"70":1,"78":4,"418":1}}],["定义后该群内所有人都可以使用",{"2":{"709":1}}],["定义后用户可以在私聊",{"2":{"709":1}}],["定义为个人快捷指令",{"2":{"709":1}}],["定义为指定指令的快捷触发方式",{"2":{"709":1}}],["定义快捷指令",{"0":{"709":1},"2":{"709":1}}],["定制属于你的骰子",{"2":{"579":1}}],["定期向通知列表发送消息",{"2":{"344":1}}],["定时",{"2":{"320":2}}],["定时任务",{"2":{"141":1,"164":2,"165":6,"166":2}}],["定时任务的实际执行函数",{"2":{"141":1}}],["裸指令",{"0":{"343":1}}],["裸键名不支持中文",{"2":{"34":1}}],["裸键只能包含",{"2":{"34":1}}],["忽略",{"0":{"343":1},"2":{"649":2}}],["忽略级词表",{"2":{"90":1}}],["限制",{"0":{"342":1}}],["限定每人",{"0":{"83":1}}],["戳一戳",{"2":{"341":1,"513":1}}],["端",{"2":{"513":1}}],["端协议",{"2":{"513":2}}],["端协议的",{"2":{"341":1,"513":1}}],["端口已经被占用",{"2":{"693":1}}],["端口已被第一只海豹占用",{"2":{"278":1}}],["端口输入",{"2":{"686":1}}],["端口为默认的",{"2":{"693":1}}],["端口为",{"2":{"521":1}}],["端口映射到海豹容器的",{"2":{"491":1}}],["端口访问海豹的管理后台时",{"2":{"307":1}}],["端口等",{"2":{"278":1}}],["端口需要输入不同于前面的端口",{"2":{"249":1}}],["端口",{"0":{"270":1,"486":1},"2":{"242":1,"259":1,"265":1,"278":3,"307":1,"481":2,"482":2,"491":1,"493":1,"686":4}}],["端口和",{"2":{"239":1}}],["端口号>",{"2":{"694":1,"695":1}}],["端口号也不能随意指定",{"2":{"278":1}}],["端口号则是范围在",{"2":{"278":1}}],["端口号",{"2":{"187":1,"201":1,"242":1,"694":1}}],["密钥并不是登陆密码",{"2":{"337":1}}],["密码",{"0":{"699":1},"2":{"187":1,"201":1,"238":1,"347":1}}],["邮箱地址",{"2":{"729":1}}],["邮箱为",{"2":{"338":1}}],["邮箱的",{"2":{"337":1}}],["邮箱密钥",{"0":{"337":1}}],["邮箱通知",{"0":{"335":1},"1":{"336":1,"337":1,"338":1},"2":{"333":1}}],["特工",{"2":{"739":1}}],["特技",{"2":{"665":3}}],["特别的",{"2":{"686":1,"691":1}}],["特别地",{"2":{"637":1,"711":1}}],["特别提醒",{"2":{"336":1}}],["特化支持",{"0":{"556":1,"560":1},"1":{"557":1,"558":1,"559":1,"561":1,"562":1,"563":1,"564":1,"565":1,"566":1,"567":1}}],["特色功能",{"0":{"547":1},"1":{"548":1,"549":1,"550":1,"551":1,"552":1,"553":1,"554":1,"555":1,"556":1,"557":1,"558":1,"559":1,"560":1,"561":1,"562":1,"563":1,"564":1,"565":1,"566":1,"567":1,"568":1,"569":1,"570":1,"571":1,"572":1},"2":{"579":1}}],["特殊骰点",{"0":{"639":1}}],["特殊说明",{"2":{"504":1}}],["特殊访问权限",{"2":{"450":1}}],["特殊的执行次数",{"2":{"110":1}}],["特殊的括号",{"2":{"59":1}}],["号与群号",{"2":{"623":1}}],["号和",{"2":{"518":1,"524":1}}],["号和要开放的",{"2":{"265":1}}],["号",{"2":{"491":1,"499":1,"514":1}}],["号被冻结后对应账号的邮箱也无法使用",{"2":{"336":1}}],["号发送通知时会自动转换成对应邮箱",{"2":{"333":1}}],["连带责任",{"2":{"328":1}}],["连接服务和代理服务的默认配置皆是如此",{"2":{"539":1}}],["连接地址填",{"2":{"521":1}}],["连接地址",{"2":{"515":2,"518":1,"524":1}}],["连接地址中写",{"2":{"265":1}}],["连接到宿主机上的",{"0":{"496":1},"1":{"497":1,"498":1}}],["连接时",{"2":{"278":1}}],["连接海豹",{"0":{"260":1,"465":1,"470":1,"474":1,"502":1,"533":1,"536":1}}],["连接的端口",{"2":{"259":1}}],["连接的社交平台",{"2":{"227":1}}],["连接",{"2":{"227":1}}],["连接平台",{"0":{"18":1,"540":1},"2":{"285":1,"287":1,"294":1,"540":1}}],["拒绝邀请",{"2":{"328":1}}],["拒绝回复",{"2":{"328":1}}],["踢骰等",{"2":{"327":1}}],["踢了3格",{"2":{"82":1}}],["白",{"2":{"325":1}}],["白名单用户即通过骰主手动添加的信任名单用户",{"2":{"120":1}}],["白名单用户和黑名单用户",{"2":{"120":2}}],["白名单",{"2":{"120":1,"501":1}}],["黑暗世界",{"0":{"740":1},"2":{"740":1}}],["黑暗录卡",{"2":{"665":1}}],["黑白名单指令",{"0":{"623":1}}],["黑白名单设置",{"0":{"328":1}}],["黑白名单是骰子拉黑",{"2":{"323":1}}],["黑白名单",{"0":{"322":1},"1":{"323":1,"324":1,"325":1,"326":1,"327":1,"328":1},"2":{"323":1,"355":1,"358":1}}],["黑名单惩罚",{"2":{"328":1}}],["黑名单和信任名单存储在同一个数据库中",{"2":{"124":1}}],["黑名单操作的函数",{"0":{"123":1}}],["黑名单",{"0":{"122":1,"127":1},"1":{"123":1,"124":1,"125":1,"126":1,"127":1},"2":{"127":1}}],["黑名单用户",{"2":{"120":2,"121":1}}],["清除法术位设置",{"2":{"672":1}}],["清除",{"2":{"670":1}}],["清除先攻列表",{"2":{"660":1}}],["清除个人骰子面数设置",{"2":{"648":1}}],["清除当前群组的默认查询分组",{"2":{"643":1}}],["清除群内骰子面数设置",{"2":{"626":1,"648":1}}],["清空",{"2":{"622":1}}],["清理模式",{"2":{"318":1}}],["清晰说明你的意图和",{"0":{"223":1}}],["项基础属性的总值",{"2":{"616":1}}],["项基础属性与幸运",{"2":{"616":1}}],["项目组成员",{"2":{"646":1}}],["项目找到海豹核心",{"2":{"450":1}}],["项目",{"2":{"450":1}}],["项目编译出海豹可使用的插件",{"2":{"148":1}}],["项",{"2":{"317":1,"414":1}}],["项可以通过",{"2":{"317":1}}],["勾选对应文档前的选框后点击",{"2":{"398":1}}],["勾选",{"2":{"317":1,"320":1}}],["立即备份",{"2":{"316":1}}],["立刻设定当前",{"2":{"103":1}}],["综合设置",{"2":{"315":1,"323":1,"341":1,"513":1,"545":1,"622":1,"625":1,"690":1,"691":1,"729":1}}],["备份的时间可以直接查看文件创建时间",{"2":{"459":1}}],["备份文件也是通用的",{"2":{"575":1}}],["备份文件目录",{"2":{"430":1}}],["备份文件的命名遵循以下格式",{"2":{"315":1}}],["备份列表",{"0":{"321":1}}],["备份范围",{"2":{"317":1}}],["备份间隔",{"2":{"317":1}}],["备份",{"0":{"314":1},"1":{"315":1,"316":1,"317":1,"318":1,"319":1,"320":1,"321":1},"2":{"315":1}}],["备注",{"2":{"66":1}}],["集成的",{"2":{"309":1}}],["富文本",{"2":{"309":1}}],["交互",{"2":{"307":1}}],["交互的用户界面",{"2":{"307":1}}],["交互的界面",{"2":{"283":1}}],["拖拽的交互方式",{"2":{"302":1}}],["腾讯官方称之为",{"2":{"295":1}}],["腾出空间就可以解决",{"2":{"198":1}}],["具有诸多弊端",{"2":{"292":1}}],["具体目录是",{"2":{"687":1}}],["具体做法搜索关键字",{"2":{"686":1}}],["具体步骤",{"2":{"535":1}}],["具体占用会因人而异",{"2":{"522":1}}],["具体列表可以见",{"2":{"376":1}}],["具体的编写帮助见",{"2":{"359":1}}],["具体的内容是什么",{"2":{"357":1}}],["具体请看",{"2":{"346":1,"543":1}}],["具体来说",{"2":{"223":1}}],["具体地说",{"2":{"146":1}}],["具体见",{"2":{"98":2}}],["具体实现",{"2":{"87":1}}],["具体使用哪种请自行决断",{"2":{"83":1}}],["广泛应用于服务器",{"2":{"286":1}}],["广度优先的学习即是在遇到新概念时",{"2":{"210":1}}],["广度优先学习",{"0":{"210":1}}],["拉格兰",{"2":{"285":1,"516":2}}],["拉黑和怒气值机制",{"2":{"355":1}}],["拉黑用户",{"2":{"355":1}}],["拉黑",{"2":{"125":4,"127":1}}],["拉黑原因",{"2":{"123":1}}],["拉黑的地方",{"2":{"123":1}}],["控制台是",{"2":{"283":1}}],["控制台",{"0":{"283":1,"407":1},"2":{"283":2,"290":3,"292":3,"299":1,"302":2,"309":1,"313":2,"407":1}}],["议题",{"2":{"279":1}}],["监听",{"2":{"278":1,"307":1}}],["处粘贴你得到的",{"2":{"465":1,"474":1,"536":1}}],["处于",{"2":{"274":1}}],["处理不成功的请求",{"2":{"135":1}}],["处理数据",{"2":{"131":1}}],["工作目录是用户在使用",{"2":{"274":1}}],["工作目录",{"0":{"274":1},"2":{"299":1}}],["工具下载见",{"2":{"262":1}}],["工具赋予权限",{"2":{"262":1}}],["工具",{"2":{"93":1,"259":1,"686":1}}],["他们的敌人不仅是旧日支配者的眷族或崇拜者",{"2":{"739":1}}],["他们要如何导入进去",{"2":{"365":1}}],["他们所指代的东西往往是一体的",{"2":{"283":1,"290":1,"292":1,"302":1,"313":1}}],["他们可能以",{"2":{"272":1}}],["他会返回一个抽取牌堆的结果",{"2":{"94":1}}],["术语的含义",{"2":{"266":1}}],["术语速查表",{"0":{"266":1},"1":{"267":1,"268":1,"269":1,"270":1,"271":1,"272":1,"273":1,"274":1,"275":1,"276":1,"277":1,"278":1,"279":1,"280":1,"281":1,"282":1,"283":1,"284":1,"285":1,"286":1,"287":1,"288":1,"289":1,"290":1,"291":1,"292":1,"293":1,"294":1,"295":1,"296":1,"297":1,"298":1,"299":1,"300":1,"301":1,"302":1,"303":1,"304":1,"305":1,"306":1,"307":1,"308":1,"309":1,"310":1,"311":1,"312":1,"313":1},"2":{"184":1,"195":1,"203":1,"206":1,"210":1,"213":1,"225":1}}],["激活",{"2":{"264":1}}],["替换成你希望指定的端口号",{"2":{"694":1}}],["替换成",{"2":{"635":1}}],["替换为",{"2":{"498":2}}],["替换为对应路径",{"2":{"262":1}}],["替换完成后",{"2":{"459":1}}],["替换掉你发现损坏的数据库",{"2":{"459":1}}],["替换安装",{"2":{"444":1}}],["替代",{"2":{"134":1,"686":1}}],["放入",{"0":{"481":1}}],["放入服务端核心",{"2":{"480":1}}],["放到空目录备用",{"2":{"460":1}}],["放置于迁入海豹的对应目录",{"2":{"575":1}}],["放置图片资源的文件夹",{"2":{"430":1}}],["放置你使用的qq客户端配置文件",{"2":{"430":1}}],["放在和",{"2":{"460":1}}],["放在",{"2":{"262":1}}],["放回抽取牌堆",{"2":{"102":1}}],["放回抽取",{"2":{"51":1,"386":2}}],["放回抽取与不放回抽取",{"0":{"51":1}}],["路径填入至系统变量中的",{"2":{"262":1}}],["窗口",{"2":{"262":1}}],["劫持",{"2":{"261":1}}],["修复数据库",{"0":{"459":1,"460":1}}],["修补后的",{"2":{"261":1}}],["修改你服务器的防火墙",{"2":{"684":1}}],["修改配置",{"2":{"684":1}}],["修改指定属性的",{"2":{"670":1}}],["修改角色名",{"2":{"640":1,"746":1}}],["修改签名时请勿随意修改签名版本",{"2":{"514":1}}],["修改为",{"2":{"497":1}}],["修改后再次提交审核",{"2":{"509":1}}],["修改后文件夹如下所示",{"2":{"480":1}}],["修改后缀只是便于海豹识别",{"2":{"56":1}}],["修改文件后缀",{"2":{"480":1}}],["修改文件后缀为",{"2":{"56":1}}],["修改完文件后需要点击",{"2":{"442":1}}],["修改完成后点击右上角提交变更",{"2":{"12":1}}],["修改海豹核心安装包",{"2":{"441":1}}],["修改帮助文档后",{"2":{"395":1}}],["修改过",{"2":{"364":1}}],["修改好之后",{"2":{"363":1}}],["修改的自定义文案等海豹内部的数据",{"2":{"442":1,"577":1}}],["修改的文案内容还支持插入图片和",{"2":{"361":1}}],["修改的话就是删除之后增加",{"2":{"130":1}}],["修改",{"2":{"245":1,"441":1,"539":1}}],["修改以及使用这份源代码",{"2":{"186":1,"200":1}}],["修改其中",{"2":{"150":1}}],["修改定时任务表达式",{"2":{"141":1}}],["修改内置功能",{"2":{"112":1}}],["里点击",{"2":{"521":1}}],["里面输入对应指令",{"2":{"503":1}}],["里面是备份的压缩包",{"2":{"430":1}}],["里面包含了目前开放的接口的定义及其注释说明",{"2":{"114":1}}],["里新建一个",{"2":{"259":1}}],["里打开终端",{"2":{"259":1}}],["启用上面的系统设置已经足够",{"2":{"455":1}}],["启用了的回复文件会显示",{"2":{"414":1}}],["启用戳一戳",{"0":{"341":1},"2":{"513":1}}],["启用自动清理",{"2":{"318":1}}],["启用自动备份",{"2":{"317":1}}],["启用",{"2":{"258":1}}],["启动一个不向互联网公开的新海豹核心",{"2":{"695":1}}],["启动或重启海豹核心",{"2":{"541":1}}],["启动时若出现",{"2":{"539":1}}],["启动脚本内容如下",{"2":{"480":1}}],["启动脚本",{"2":{"480":2}}],["启动服务端",{"0":{"480":1}}],["启动核心前请全部允许这些权限",{"2":{"448":1}}],["启动核心",{"2":{"441":1}}],["启动海豹核心",{"2":{"541":1}}],["启动海豹失败问题排查",{"2":{"539":1}}],["启动海豹",{"2":{"241":1}}],["启动",{"0":{"539":1},"2":{"239":1,"480":1,"694":2}}],["库成功",{"2":{"258":1}}],["库的文档",{"2":{"165":1}}],["加",{"2":{"637":1}}],["加骰数加",{"2":{"635":1}}],["加骰线",{"2":{"635":1,"711":2}}],["加在一起为结果",{"2":{"634":1}}],["加号",{"2":{"363":1}}],["加好友验证",{"0":{"349":1}}],["加我为好友时需要的验证方式",{"2":{"334":1}}],["加群邀请",{"2":{"333":1}}],["加载",{"2":{"258":1}}],["加入环境变量后再启用终端",{"2":{"259":1}}],["加入",{"2":{"159":2}}],["理由可不填",{"2":{"623":1}}],["理由",{"2":{"622":1}}],["理论上",{"2":{"257":1}}],["理智损失均可以是包含骰点的表达式",{"2":{"608":1}}],["理智值",{"2":{"582":1}}],["理智检定",{"0":{"370":1,"607":1,"751":1},"1":{"608":1,"609":1,"610":1,"611":1},"2":{"370":3,"746":1}}],["理智",{"2":{"172":1,"582":1}}],["使每一次的结果都不相同",{"2":{"703":1}}],["使目标进行指定的理智检定",{"2":{"611":1}}],["使你的骰子更加鲜活",{"2":{"551":1}}],["使容器和宿主机位于同一网络中",{"2":{"539":1}}],["使前缀",{"2":{"371":1}}],["使之生效",{"2":{"315":1}}],["使得",{"2":{"256":1}}],["使用关键字对编辑推荐模组进行搜索",{"2":{"765":1}}],["使用关键字进行搜索",{"2":{"765":1}}],["使用其模板",{"2":{"734":1}}],["使用骰子有许多约定俗成的规则",{"2":{"718":1}}],["使用前请使用",{"2":{"718":1}}],["使用快捷指令的方式如下",{"2":{"709":1}}],["使用快捷指令",{"0":{"709":1}}],["使用以下命令",{"2":{"695":1}}],["使用这个指令将其他骰子进行标记",{"2":{"688":1}}],["使用密码登录",{"2":{"687":1}}],["使用法术位",{"0":{"674":1},"1":{"675":1}}],["使用可带调整值的表达式进行检定",{"2":{"667":1}}],["使用指定角色卡的数据覆盖当前群聊的独立卡",{"2":{"641":1}}],["使用指定的房规",{"2":{"620":1}}],["使用指定的属性或技能进行检定",{"2":{"595":1}}],["使用统一",{"2":{"623":3}}],["使用自己的一个属性",{"2":{"605":1}}],["使用不同技能对抗",{"0":{"605":1}}],["使用相同技能对抗",{"0":{"604":1}}],["使用相对路径",{"2":{"56":1}}],["使用有问题",{"2":{"580":1}}],["使用此方案的用户请注意不要随意",{"2":{"522":1}}],["使用此方案的用户请注意不要随意更新",{"2":{"519":1}}],["使用此方案应当尽快更新到",{"2":{"514":1}}],["使用此方法你可能需要对",{"2":{"515":1}}],["使用此方法请将",{"2":{"262":1}}],["使用人员与范围",{"2":{"505":1}}],["使用海豹",{"0":{"505":1}}],["使用范围和人员页面",{"2":{"504":1}}],["使用场景",{"2":{"503":1}}],["使用云服务器时",{"2":{"501":1}}],["使用该指令以抽取疯狂发作的总结症状与消耗时间",{"2":{"612":1}}],["使用该指令以抽取疯狂发作的即时症状与发作时间",{"2":{"612":1}}],["使用该指令需要",{"2":{"486":1}}],["使用该指令的玩家视为向海豹私聊发送了一条消息",{"2":{"485":1}}],["使用该模板在自己的",{"2":{"149":1}}],["使用在控制台使用",{"2":{"481":1}}],["使用系统的双开功能",{"0":{"440":1}}],["使用于指定检定难度的情况",{"2":{"368":1}}],["使用教程",{"2":{"263":1}}],["使用数据线连接电脑和手机",{"2":{"262":1}}],["使用运行开启的",{"2":{"262":1}}],["使用更为老旧的",{"2":{"257":1}}],["使用时立即退出群",{"2":{"328":1}}],["使用时",{"2":{"255":1}}],["使用时会出现报错",{"2":{"253":1}}],["使用共享签名服务可能会提高账号被封禁的概率",{"2":{"238":1}}],["使用他人的签名服务可能会泄漏以下信息",{"2":{"238":1}}],["使用签名服务",{"0":{"237":1},"1":{"238":1,"239":1}}],["使用的",{"2":{"227":1}}],["使用页面左上角的搜索按钮有助于提高你的信息效率",{"2":{"218":1}}],["使用百度搜索一下",{"2":{"196":1}}],["使用正向",{"2":{"190":1}}],["使用正则匹配时",{"2":{"73":1}}],["使用和编译",{"0":{"151":1}}],["使用单",{"2":{"148":1,"162":1}}],["使用定时任务",{"2":{"141":1}}],["使用非指令关键词",{"0":{"137":1}}],["使用了之后就不要修改了",{"2":{"131":1}}],["使用命令行工具打开这个目录",{"2":{"460":1}}],["使用命令行程序进入海豹的目录",{"2":{"457":1}}],["使用命令行程序等有所了解",{"2":{"254":1}}],["使用命令",{"2":{"121":1}}],["使用示例",{"0":{"142":1},"2":{"94":1}}],["使用中文作为键名时",{"2":{"34":1}}],["使用专业的编辑器能帮助你检查这些问题",{"2":{"31":1}}],["使用",{"0":{"78":1,"441":1},"2":{"30":1,"35":1,"39":1,"40":1,"56":1,"68":1,"70":1,"78":1,"90":2,"119":3,"121":1,"125":1,"126":1,"127":5,"133":1,"139":1,"141":1,"165":1,"224":1,"236":1,"256":1,"257":1,"326":1,"386":1,"394":1,"395":1,"416":1,"437":1,"443":1,"582":1,"612":1,"623":1,"655":1,"684":1,"711":1,"730":1,"733":1,"739":1}}],["使用造成的任何后果与海豹开发组无关",{"2":{"15":1}}],["使用即代表您已同意使用须知的内容",{"2":{"15":1}}],["软件扫码登录",{"2":{"514":1}}],["软件中获取的一切权限都给予",{"2":{"256":1}}],["软件名",{"2":{"172":1}}],["准备模拟器",{"0":{"255":1}}],["轻量级服务器",{"2":{"254":1}}],["低版本",{"2":{"539":1}}],["低成本",{"2":{"286":1}}],["低位端口通常已经被占用",{"2":{"278":1}}],["低配置设备可能无法使用",{"2":{"254":1}}],["低于该版本",{"2":{"253":1}}],["寻求||审核和及",{"2":{"504":1}}],["寻求资源",{"0":{"206":1}}],["寻找最新的",{"2":{"479":1}}],["寻找更详细的教程",{"2":{"254":1}}],["酷安",{"2":{"254":1}}],["管控愈加严格",{"2":{"254":1}}],["管理所有群的所有日志",{"2":{"730":1}}],["管理日志",{"0":{"729":1}}],["管理自定义回复",{"0":{"656":1}}],["管理牌堆",{"0":{"651":1},"1":{"652":1,"653":1,"654":1,"655":1}}],["管理和开发者们都有自己的生活",{"2":{"191":1,"232":1}}],["管理更快速地知道问题所在",{"2":{"190":1}}],["管理黑白名单",{"2":{"158":1}}],["管理员和",{"2":{"340":1}}],["管理员",{"2":{"120":2,"466":1}}],["管理机制",{"2":{"112":1}}],["管理",{"0":{"330":1},"1":{"331":1,"332":1,"333":1,"334":1},"2":{"105":1,"187":1,"190":1,"201":1,"543":1}}],["管理器的",{"2":{"443":1}}],["管理器并安装",{"2":{"441":1}}],["管理器等软件",{"0":{"441":1}}],["管理器",{"2":{"93":1,"441":2}}],["遗憾的是",{"2":{"254":1,"446":1}}],["框架",{"2":{"254":1,"263":1,"294":1,"522":1}}],["宣布",{"2":{"254":1}}],["宣扬",{"2":{"15":1}}],["宣扬邪教和封建迷信的",{"2":{"15":1}}],["客户端后可能导致方案不可用",{"2":{"519":1,"522":1}}],["客户端检测机制的变化",{"2":{"519":1,"522":1}}],["客户端",{"2":{"295":1,"519":2,"522":2}}],["客户端上",{"2":{"254":1,"261":1}}],["客户端针对",{"2":{"254":1,"261":1}}],["缺失该功能",{"2":{"341":1,"513":1}}],["缺少必要接口",{"2":{"253":1}}],["缺乏上进心",{"2":{"67":1}}],["缺乏热忱和创造力",{"2":{"67":1}}],["崩溃闪退可能的一种情况",{"0":{"252":1}}],["把下面的命令写到文件里面",{"2":{"259":1}}],["把文件上传到模拟器中",{"2":{"257":1}}],["把它安装到模拟器",{"2":{"256":1}}],["把手机",{"2":{"251":1}}],["把黑框框里的文字截图发了出去",{"2":{"210":1}}],["抓取工具失效",{"2":{"248":1}}],["抓到一只海豹",{"2":{"114":1,"117":1}}],["过于完善的兼容性",{"2":{"292":1}}],["过段时间重新尝试登录",{"2":{"247":1}}],["过仓库",{"2":{"11":1}}],["换台电脑等",{"2":{"247":1}}],["换成",{"2":{"83":1}}],["升级版本",{"2":{"246":1}}],["没连上",{"2":{"246":1}}],["没有设置hpmax",{"2":{"676":1}}],["没有提供",{"2":{"549":1}}],["没有提示",{"2":{"161":1}}],["没有界面",{"2":{"522":1}}],["没有相关权限",{"2":{"453":1}}],["没有选项",{"2":{"242":1}}],["没有可以不填",{"2":{"241":1}}],["没有特殊设置的话",{"2":{"238":1}}],["没有专门的布尔类型",{"2":{"173":1}}],["没有则可以填海豹官方插件仓库",{"2":{"159":1}}],["没有被自动提示",{"0":{"155":1}}],["没有传入参数时的代码",{"2":{"115":1}}],["没有参数",{"2":{"94":1}}],["没有实际作用",{"2":{"90":1}}],["盘之外的路径",{"2":{"262":1}}],["盘",{"2":{"245":2,"262":1}}],["闪退",{"0":{"245":1}}],["视频教程操作",{"2":{"242":1}}],["视为",{"2":{"94":1}}],["哔哩哔哩",{"2":{"242":1}}],["终端中手动启动这些程序",{"2":{"309":1}}],["终端是一个为命令行用户准备的全新的",{"2":{"309":1}}],["终端打开",{"2":{"292":1}}],["终端",{"0":{"309":1,"313":1},"2":{"283":2,"290":2,"292":3,"302":2,"308":1,"309":4,"313":2,"695":1}}],["终端选中后右键即可复制粘贴",{"2":{"242":1}}],["终将有所回报",{"2":{"205":1}}],["复制到此处即可",{"2":{"706":1}}],["复制到浏览器打开",{"2":{"466":1,"471":1,"475":1}}],["复制电脑海豹的",{"2":{"577":1}}],["复制并保存",{"2":{"469":1,"532":1}}],["复制链接发给手机滑条",{"2":{"247":1}}],["复制链接到浏览器",{"2":{"242":1}}],["复制错误",{"2":{"247":1}}],["复制",{"2":{"242":1,"464":1}}],["复杂牌组提供以下选项",{"2":{"61":1}}],["复杂牌组",{"2":{"61":1}}],["复杂牌组和普通牌组在使用上没有什么区别",{"2":{"61":1}}],["复杂的",{"2":{"47":1}}],["手枪伤害=5",{"2":{"591":1}}],["手枪伤害=",{"2":{"591":1}}],["手枪伤害",{"2":{"591":1}}],["手动更新",{"0":{"544":1}}],["手动添加",{"0":{"325":1}}],["手动备份",{"0":{"316":1}}],["手动抓取",{"0":{"240":1},"1":{"241":1,"242":1},"2":{"242":1}}],["手机海豹已经公测啦",{"2":{"697":1}}],["手机海豹不会实时更新导出的文件",{"2":{"577":1}}],["手机上打开浏览器进入",{"2":{"686":1}}],["手机端连接",{"2":{"686":1}}],["手机版海豹核心也往往遭到误杀",{"2":{"446":1}}],["手机版不能通过指令或",{"2":{"444":1}}],["手机转电脑同理",{"2":{"445":1}}],["手机可以参阅",{"2":{"254":1}}],["手机造成的后果负责",{"2":{"254":1}}],["手机",{"2":{"251":1,"254":3,"347":1,"686":1}}],["手册自行部署",{"2":{"517":1}}],["手册不会介绍相关内容",{"2":{"162":1}}],["手册不会介绍这些相关背景知识",{"2":{"148":1}}],["手册",{"2":{"5":1}}],["手册贡献者",{"0":{"3":1}}],["看机器人哪方面没过审",{"2":{"509":1}}],["看",{"2":{"239":1}}],["看得很清楚吗",{"2":{"181":1}}],["及以上系统",{"2":{"686":2}}],["及以上的",{"2":{"478":1}}],["及以上",{"2":{"478":1}}],["及以上版本需要使用",{"2":{"478":1}}],["及以上版本的海豹",{"2":{"514":2}}],["及以上版本的",{"2":{"254":1}}],["及之后版本的",{"2":{"254":1}}],["及运行",{"2":{"239":1}}],["及",{"2":{"239":1,"491":1}}],["签名服务",{"2":{"238":1}}],["签名服务彻底被官方封死之后",{"2":{"236":1}}],["账号处随便填写",{"2":{"521":1}}],["账号用作机器人并被检测到时",{"2":{"512":1}}],["账号类型",{"2":{"482":1,"518":1,"524":1}}],["账号类型选",{"2":{"241":1}}],["账号使用新的",{"2":{"474":1}}],["账号协议配置文件",{"2":{"431":1}}],["账号选用",{"2":{"349":1}}],["账号添加中选择",{"2":{"265":1}}],["账号设置",{"2":{"241":1,"482":1,"514":2,"518":1,"524":1}}],["账号",{"2":{"238":1,"241":1,"474":1,"491":1,"640":2,"706":4}}],["账号密码错误",{"2":{"244":1}}],["账号密码",{"2":{"238":1,"241":1}}],["登录服务器开浏览器使用好麻烦",{"0":{"684":1}}],["登录框架主动连接海豹核心",{"2":{"515":1}}],["登录框架",{"2":{"515":2}}],["登录框架连接起来",{"2":{"515":1}}],["登录框架分别启动",{"2":{"515":1}}],["登录的账号由扫码的账号决定",{"2":{"514":1}}],["登录二维码",{"2":{"493":1}}],["登录多个",{"2":{"491":1}}],["登录海豹并添加账号",{"2":{"465":1,"470":1,"474":1,"502":1,"533":1,"536":1}}],["登录后会自动记住一段时间",{"2":{"347":1}}],["登录后发送消息的群号",{"2":{"238":1}}],["登录后发送的消息内容",{"2":{"238":1}}],["登录",{"0":{"517":1},"2":{"250":1,"464":1,"473":1,"530":1}}],["登录过于频繁",{"2":{"248":1}}],["登录频繁",{"2":{"247":1}}],["登录成功",{"2":{"242":1}}],["登录时间",{"2":{"238":1}}],["登录账号",{"2":{"238":1}}],["截取自",{"2":{"238":1}}],["截图都在下面了",{"2":{"190":1}}],["服务名称和服务的启动用户均可以通过提供命令行参数自定义",{"2":{"541":1}}],["服务项",{"2":{"541":1}}],["服务端所在服务器的",{"2":{"482":1}}],["服务端部署在不同的服务器",{"2":{"482":1}}],["服务端部署在同一台服务器",{"2":{"482":1}}],["服务端连接完毕",{"2":{"482":1}}],["服务端连接",{"0":{"482":1}}],["服务端的准备工作已经完毕",{"2":{"481":1}}],["服务端的架设",{"2":{"478":1}}],["服务端版本",{"2":{"478":4}}],["服务端",{"0":{"478":1},"1":{"479":1,"480":1,"481":1},"2":{"479":2}}],["服务端接入海豹核心需要了解的特定内容",{"2":{"476":1}}],["服务端应用程序会",{"2":{"278":1}}],["服务有困难",{"2":{"465":1,"536":1}}],["服务密码",{"2":{"241":1}}],["服务地址",{"2":{"241":1}}],["服务鉴权不填写",{"2":{"241":1}}],["服务鉴权",{"2":{"238":1}}],["服务",{"2":{"238":3,"241":2,"258":1,"686":1}}],["服务器等",{"2":{"747":1}}],["服务器等相关知识没有任何了解",{"2":{"537":1}}],["服务器端运行工具",{"2":{"686":1}}],["服务器ip地址",{"2":{"684":1}}],["服务器间跨架构迁移",{"0":{"576":1}}],["服务器部署",{"2":{"541":1}}],["服务器首次启动完毕",{"2":{"480":1}}],["服务器首先需要根据选定对应的",{"2":{"478":1}}],["服务器的邀请链接",{"2":{"466":1,"475":1}}],["服务器一开始并不容易熟练操作",{"2":{"272":1}}],["服务器使用的是微软特地为了服务器开发的",{"2":{"272":1}}],["服务器从运行系统上就与其稍有不同",{"2":{"272":1}}],["服务器和个人计算机在使用上有明显差异",{"2":{"272":1}}],["服务器可以简单地理解为持续保持开机的电脑",{"2":{"272":1}}],["服务器",{"0":{"272":1},"2":{"477":1,"537":1,"684":1,"686":1}}],["服务器已启动",{"2":{"242":1}}],["服务器运行的是",{"2":{"224":1}}],["服务器上部署海豹",{"2":{"199":1}}],["服务器群组号",{"2":{"109":1}}],["啰嗦总好过一个信息不完整的问题",{"2":{"230":1}}],["回到手机海豹的界面中点击",{"2":{"577":1}}],["回到",{"2":{"450":1}}],["回答问题并由我确认",{"2":{"349":1}}],["回答者可以更加高效的帮助你定位问题",{"2":{"226":1}}],["回车",{"2":{"242":1,"256":5}}],["回复消息",{"0":{"706":1}}],["回复语中看见新版本提示",{"2":{"542":1}}],["回复项有几个结果",{"2":{"422":1}}],["回复项的结果",{"0":{"422":1},"1":{"423":1}}],["回复项的条件支持多个",{"2":{"419":1}}],["回复项的条件",{"0":{"419":1},"1":{"420":1,"421":1}}],["回复可以是直接的回复",{"2":{"422":1}}],["回复结果延迟",{"0":{"423":1}}],["回复结果",{"0":{"75":1},"1":{"76":1,"77":1,"78":1,"79":1},"2":{"422":1}}],["回复",{"2":{"26":2,"83":3,"85":1,"97":1,"420":1}}],["屏幕截图",{"2":{"224":1}}],["屏幕因反射光线而不能让摄像头拍到真正的图片",{"2":{"187":1,"201":1}}],["尤其是用你自己的话描述一遍你是如何执行回答者所给出的解决方案的",{"2":{"230":1}}],["尤其是",{"2":{"218":1,"747":1}}],["强大的查询功能",{"0":{"553":1}}],["强自定义",{"0":{"551":1}}],["强行停止",{"2":{"258":1}}],["强烈建议你按自身情况进行修改",{"2":{"504":1}}],["强烈建议你使用",{"2":{"292":1}}],["强烈建议全文阅读此文章",{"2":{"215":1}}],["强烈推荐",{"2":{"238":1}}],["强制依赖",{"2":{"166":2}}],["尝试删除账号重新添加",{"2":{"514":1}}],["尝试一下",{"0":{"500":1}}],["尝试以下方案",{"2":{"460":1}}],["尝试上网搜索以找到答案",{"0":{"220":1}}],["尝试浏览用户群内的信息以找到答案",{"0":{"219":1}}],["尝试阅读本手册以找到答案",{"0":{"218":1}}],["尝试自行排查问题",{"0":{"217":1}}],["尝试自己思考问题所在",{"0":{"189":1}}],["尝试敲出你理解的方案",{"2":{"211":1}}],["执着于过于深入的细节只会拖慢你的学习速度",{"2":{"211":1}}],["执行下面的指令",{"2":{"460":1}}],["执行以下命令",{"2":{"457":1}}],["执行代码",{"2":{"407":1}}],["执行完毕后不应当认为该变量值还保留",{"2":{"172":1}}],["执行时所运行的脚本",{"2":{"152":1}}],["执行",{"2":{"78":5,"262":1,"458":1,"543":1}}],["执行块中的两个语句之间要使用",{"2":{"77":1}}],["执行块",{"0":{"77":1},"1":{"78":1,"79":1}}],["虽让你搞不懂什么",{"2":{"210":1}}],["虽然海豹在一定程度上可以兼容",{"2":{"722":1}}],["虽然海豹尽可能提高兼容性",{"2":{"548":1}}],["虽然你对什么是",{"2":{"210":1}}],["虽然作为",{"2":{"158":1}}],["又如",{"2":{"582":1}}],["又一个小例子",{"2":{"210":1}}],["又不会引入过多的非标准特性造成混乱",{"2":{"37":1}}],["便开始学习下一项内容",{"2":{"210":1}}],["便于分享最新的牌堆内容",{"2":{"58":1}}],["便于分享",{"2":{"48":1}}],["皓首穷经地学习每一个细节真的值得么",{"2":{"209":1}}],["然而在服务器无法启动海豹",{"2":{"224":1}}],["然而",{"2":{"209":1,"210":1}}],["然后拉入群组使用",{"2":{"718":1}}],["然后双击",{"2":{"694":1}}],["然后将登录过的配置文件覆盖到服务器上",{"0":{"687":1}}],["然后点击添加规则",{"2":{"686":1}}],["然后点击添加代理服务器",{"2":{"686":1}}],["然后想象奇幻世界中的冒险者们会如何迎接即将到来的挑战",{"2":{"657":1}}],["然后比较成功等级",{"2":{"604":1}}],["然后设定属性值",{"2":{"589":1}}],["然后启动海豹即可",{"2":{"544":1}}],["然后启动软件",{"2":{"256":1}}],["然后按照",{"2":{"523":1}}],["然后按照各个框架的连接协议将海豹核心和",{"2":{"515":1}}],["然后在你将要扫码的手机上启动它",{"2":{"686":1}}],["然后在海豹的新添账号选择",{"2":{"521":1}}],["然后在",{"2":{"501":1,"503":2}}],["然后在配置海豹时",{"2":{"497":1}}],["然后导入",{"2":{"443":1}}],["然后重启",{"2":{"264":1}}],["然后重新添加账号",{"2":{"242":1}}],["然后就可以安装了",{"2":{"263":1}}],["然后输入",{"2":{"256":1}}],["然后输入你想要的文件夹名字",{"2":{"196":1}}],["然后退出海豹",{"2":{"241":1}}],["然后运行里面的",{"2":{"239":1}}],["然后转向下一个概念进行学习",{"2":{"211":1}}],["然后通过海豹的",{"2":{"158":1}}],["然后根据",{"2":{"84":1}}],["然后判断",{"2":{"79":1}}],["然后进入判断",{"2":{"78":1}}],["然后阅读此章中你感兴趣的节",{"2":{"21":1}}],["然后",{"2":{"16":1,"19":1,"20":1,"730":1}}],["针对性地进行自定义回复的功能",{"2":{"209":1}}],["深渊也正在凝视着你",{"2":{"356":1}}],["深度优先的学习即是每遇到一个新概念",{"2":{"209":1}}],["深度优先学习",{"0":{"209":1}}],["深入学习",{"2":{"31":1}}],["幻觉",{"2":{"207":1}}],["搜索作者符合关键字的模组",{"2":{"765":1}}],["搜索词条",{"2":{"746":1}}],["搜索功能会暂时不可用",{"2":{"395":1}}],["搜索文案的小类和具体文案名",{"2":{"364":1}}],["搜索",{"2":{"207":1,"364":1}}],["搜索结果偏见更少的搜索引擎能显著提高你的信息获取效率",{"2":{"207":1}}],["许多时候",{"2":{"283":1,"290":1,"292":1,"302":1,"313":1}}],["许多问题的直接原因本身就记录在日志中",{"2":{"225":1}}],["许多都源于对这些外文内容的翻译和多次搬运",{"2":{"207":1}}],["许可协议",{"0":{"15":1}}],["另一种写法",{"2":{"672":1}}],["另一方面",{"2":{"207":1,"222":1,"230":1}}],["另外",{"2":{"147":1,"206":1,"211":1,"229":1,"595":1}}],["学会筛选更可靠的平台也将大大提高你的知识获取效率",{"2":{"207":1}}],["百度",{"2":{"207":1}}],["百度应该是你更好的选择",{"2":{"193":1,"202":1}}],["高效搜索",{"0":{"207":1},"2":{"220":1}}],["安全组",{"2":{"684":1}}],["安全性",{"2":{"286":1}}],["安卓豹更新",{"0":{"546":1}}],["安卓端尚在公测",{"2":{"444":1}}],["安卓端海豹核心无法使用以上方法进行更新",{"2":{"546":1}}],["安卓端海豹扫码",{"2":{"514":1}}],["安卓端海豹不会实时更新导出的文件",{"2":{"442":1}}],["安卓端海豹文件无法直接被读取",{"2":{"442":1}}],["安卓端登录",{"0":{"436":1}}],["安卓端文件路径",{"0":{"432":1}}],["安卓海豹常见问题",{"0":{"435":1},"1":{"436":1,"437":1,"438":1,"439":1,"440":1,"441":1,"442":1,"443":1,"444":1,"445":1}}],["安装完成",{"2":{"541":1}}],["安装完成后重新登录",{"2":{"521":1}}],["安装完成后",{"2":{"258":1,"541":2}}],["安装完成后应该如下所示",{"2":{"257":1}}],["安装为系统服务",{"0":{"541":1}}],["安装改过的安装包",{"2":{"441":1}}],["安装下载的",{"2":{"436":1}}],["安装方式",{"2":{"264":1}}],["安装并激活",{"0":{"264":1}}],["安装后需要在电脑中使用",{"2":{"262":1}}],["安装经",{"2":{"261":1}}],["安装到模拟器中",{"2":{"258":1}}],["安装包",{"2":{"258":1,"538":1}}],["安装",{"0":{"257":1,"258":1,"262":1,"263":1,"520":1,"526":1},"2":{"262":1,"526":1}}],["安心等待开发者解决就好",{"2":{"206":1}}],["安价",{"2":{"130":3}}],["访问海豹端口",{"2":{"684":1}}],["访问密码",{"2":{"684":1}}],["访问",{"2":{"493":1,"684":1}}],["访问存储空间",{"2":{"448":1,"453":1}}],["访问时请确认你的网络状况",{"2":{"384":1,"393":1,"403":1,"416":1}}],["访问控制",{"0":{"347":1}}],["访问常见问题页面或许可以解决你的问题",{"2":{"206":1}}],["访问网址",{"2":{"135":1}}],["阅读它们也能为编写自定义回复带来帮助",{"2":{"413":1}}],["阅读本手册",{"2":{"218":1}}],["阅读帮助文档远比直接使用搜素引擎高效得多",{"2":{"206":1}}],["阅读完小节教程后",{"2":{"91":1}}],["亦即帮助文档",{"2":{"206":1}}],["描述问题发生后",{"0":{"226":1}}],["描述问题发生前",{"0":{"224":1}}],["描述了使用这个项目的过程中可能涉及的方方面面",{"2":{"206":1}}],["描述修改内容并确认自动测试流程通过",{"2":{"10":1}}],["往往都具备相对详尽的帮助文档",{"2":{"206":1}}],["英文",{"2":{"314":1}}],["英文字母和数字长度为",{"2":{"172":1}}],["英语学习得再努力一点",{"2":{"205":1}}],["英语目前是",{"2":{"205":1}}],["掌握语言",{"0":{"205":1}}],["归档原因",{"2":{"203":1,"213":1}}],["归档内容",{"0":{"184":1},"2":{"184":1}}],["月",{"2":{"203":2,"213":2,"236":1,"253":1,"254":3,"261":1}}],["年月日",{"2":{"315":2}}],["年",{"2":{"203":2,"213":2,"236":1,"253":1,"254":3,"261":1}}],["日常用语中基本等价且易混淆的词汇等价",{"2":{"582":1}}],["日归档",{"2":{"254":1}}],["日",{"2":{"203":1,"213":1,"236":1,"253":1,"254":2,"261":1}}],["日停止维护以下内容",{"2":{"203":1,"213":1}}],["日志名",{"2":{"727":3,"728":2,"729":4,"730":1,"746":2}}],["日志记录是本群记录过的所有日志",{"2":{"727":1}}],["日志记录",{"2":{"717":1}}],["日志记录提示",{"0":{"345":1}}],["日志在线染色器",{"2":{"568":1}}],["日志通常分为信息",{"2":{"299":1}}],["日志通常指程序在运行时生成的一系列记录",{"2":{"299":1}}],["日志中通常也会有所反映",{"2":{"299":1}}],["日志中每条记录都相对较长",{"2":{"225":1}}],["日志还会使用特定格式输出堆栈信息",{"2":{"225":1}}],["日志是这样显示的",{"2":{"225":1}}],["日志是这样的",{"2":{"225":1}}],["日志截图",{"2":{"225":2}}],["日志",{"0":{"299":1,"725":1},"1":{"726":1,"727":1,"728":1,"729":1,"730":1,"731":1,"732":1,"733":1,"734":1,"735":1,"736":1,"737":1},"2":{"199":1,"225":1,"288":1,"299":1,"362":1,"431":1}}],["日期以及正则表达式等",{"2":{"402":1}}],["日期",{"2":{"45":1}}],["日期或时刻",{"2":{"33":1}}],["翻译一下这里的报错",{"2":{"198":1}}],["压缩包便解压到了你指定的文件夹",{"2":{"196":1}}],["压缩为",{"2":{"56":1}}],["到的指令和消息",{"2":{"531":1}}],["到终端后回车",{"2":{"242":1}}],["到海豹的",{"2":{"193":1,"202":1}}],["到本地",{"2":{"149":1}}],["到本地操作",{"2":{"12":1}}],["怎么帮人取出",{"0":{"698":1}}],["怎么同时运行多个海豹",{"0":{"692":1},"1":{"693":1,"694":1,"695":1}}],["怎么办",{"0":{"685":1,"688":1},"1":{"686":1,"687":1}}],["怎么使用牌堆",{"0":{"386":1}}],["怎么使用签名服务",{"0":{"238":1}}],["怎么管理牌堆",{"0":{"385":1}}],["怎么上传牌堆到骰子",{"0":{"385":1}}],["怎么修改那些固定的回复词",{"2":{"361":1}}],["怎么样解压压缩包",{"0":{"196":1}}],["怎么样提",{"2":{"193":1,"202":1}}],["怎么提",{"0":{"193":1,"202":1}}],["怎么辉石呢",{"2":{"85":1}}],["配合",{"2":{"443":1}}],["配合他们进行操作",{"2":{"191":1,"232":1}}],["配置你的服务器",{"2":{"686":1}}],["配置防火墙",{"2":{"686":1}}],["配置完成后",{"2":{"504":1}}],["配置容器使用宿主机网络",{"0":{"498":1}}],["配置文件选择",{"2":{"518":1}}],["配置文件",{"2":{"491":1}}],["配置安卓端保活",{"0":{"446":1},"1":{"447":1,"448":1,"449":1,"450":1,"451":1,"452":1,"453":1,"454":1,"455":1}}],["配置核心文件",{"2":{"431":1}}],["配置拦截",{"0":{"353":1},"1":{"354":1,"355":1}}],["配置清理时机",{"0":{"320":1}}],["配置清理范围",{"0":{"319":1}}],["配置项不存在",{"2":{"139":1}}],["配置项的用法",{"2":{"139":1}}],["配置项的",{"2":{"94":6}}],["配置云端内容的",{"2":{"64":1}}],["配置了接口的牌组被抽取的时候",{"2":{"62":1}}],["配置牌堆文件的",{"2":{"58":3}}],["配置牌堆更新",{"0":{"58":1}}],["配置",{"0":{"521":1},"2":{"19":1,"69":1,"70":1,"238":1,"651":1,"656":1,"744":1}}],["初次启动时提示是否运行",{"2":{"449":1}}],["初次启动会选择",{"2":{"239":1}}],["初步排查",{"2":{"190":1}}],["初阶豹语",{"2":{"94":3}}],["问出下一个问题吧",{"2":{"230":1}}],["问题",{"2":{"279":1,"349":2}}],["问题尚未得到有效解决之前",{"2":{"207":1}}],["问题才能更快速地解决",{"2":{"191":1,"232":1}}],["问题发生的可能原因和你所尝试但是无法解决的措施",{"2":{"190":1}}],["问题既然已经发生了",{"2":{"190":1}}],["问问题要有前因后果",{"0":{"190":1}}],["很有可能在其中就有所描述",{"2":{"206":1}}],["很显然",{"2":{"198":1,"252":1}}],["很急",{"2":{"190":1,"223":1}}],["很多时候一个解决方案是有效的",{"2":{"230":1}}],["很多时候",{"2":{"58":1,"189":1}}],["呜呜我的骰子怎么不能用了",{"2":{"190":1,"223":1}}],["让使用者成为观众",{"2":{"731":1}}],["让手机跟服务器真的处于同一个网络",{"0":{"686":1}}],["让海豹",{"2":{"684":1}}],["让你想咕就咕",{"2":{"552":1}}],["让",{"2":{"361":1}}],["让它识别是不是人",{"2":{"251":1}}],["让他人帮助你滑条",{"2":{"248":1}}],["让他们清晰地知道你的操作流程",{"2":{"189":1}}],["让回答者清晰地知道你的操作流程",{"2":{"217":1}}],["让我们用更易懂的方式解释它所想宣传的思想",{"2":{"188":1}}],["让我们从最简单的扩展开始",{"2":{"158":1}}],["乃至群内作为帮助骰的",{"2":{"189":1}}],["排列元素",{"2":{"764":1}}],["排序",{"2":{"569":1}}],["排除了程序内部错误的可能性",{"2":{"199":1}}],["排除问题",{"0":{"189":1}}],["排查问题或复现",{"2":{"187":1,"201":1}}],["除",{"0":{"695":1},"2":{"637":1}}],["除此之外",{"2":{"376":1}}],["除发送消息外的任何历史记录",{"2":{"238":1}}],["除非你知道自己在干什么",{"2":{"514":1}}],["除非你非常确定你遇到的问题与海豹本身的运行无关",{"2":{"225":1}}],["除非敏感信息的范围过大",{"2":{"187":1,"201":1}}],["除了上述由官方提供支持的规则之外",{"2":{"744":1}}],["除了上面提到的",{"2":{"165":1}}],["除了本节所述的",{"2":{"625":1}}],["除了使用",{"2":{"603":1}}],["除了海豹",{"2":{"568":1}}],["除了",{"2":{"158":1}}],["除了骰主",{"2":{"120":1}}],["除了形如",{"2":{"81":1}}],["除了这个牌组以外的牌组都被视为不导出",{"2":{"57":1}}],["俗称",{"2":{"557":1,"561":1}}],["俗称签名服务器",{"0":{"252":1}}],["俗称打码",{"2":{"187":1,"201":1}}],["俗称反光",{"2":{"187":1,"201":1}}],["拍摄屏幕时会出现各种各样的问题",{"2":{"187":1,"201":1}}],["计算机小白常见问题",{"0":{"195":1},"1":{"196":1,"197":1,"198":1,"199":1,"200":1,"201":1,"202":1},"2":{"203":1,"206":1,"213":1,"218":1,"266":1}}],["计算机相关科普",{"2":{"185":1}}],["计算机基础知识",{"0":{"194":1},"1":{"195":1,"196":1,"197":1,"198":1,"199":1,"200":1,"201":1,"202":1,"203":1,"204":1,"205":1,"206":1,"207":1,"208":1,"209":1,"210":1,"211":1,"212":1,"213":1,"214":1,"215":1,"216":1,"217":1,"218":1,"219":1,"220":1,"221":1,"222":1,"223":1,"224":1,"225":1,"226":1,"227":1,"228":1,"229":1,"230":1,"231":1,"232":1,"233":1,"234":1},"2":{"184":1}}],["计算总积分",{"2":{"147":1}}],["流年不利啊",{"2":{"181":1}}],["流溪",{"2":{"3":1,"133":2}}],["今天不太行",{"2":{"181":1}}],["今日人品是一个每个用户独立",{"2":{"701":1}}],["今日人品为",{"2":{"181":1}}],["今日人品",{"0":{"701":1},"2":{"172":1}}],["运动=6",{"2":{"667":1}}],["运动",{"2":{"665":5,"667":1,"670":8}}],["运营商随时可能会更换你的",{"2":{"501":1}}],["运作了",{"2":{"465":1,"470":1,"474":1,"536":1}}],["运气不错",{"2":{"363":1}}],["运气还不错",{"2":{"181":1}}],["运行起来之后",{"2":{"686":1}}],["运行在公开端口而不是本地端口",{"2":{"684":1}}],["运行得到",{"2":{"541":1}}],["运行以下命令",{"2":{"495":1}}],["运行日志文件",{"2":{"431":1}}],["运行结果将显示在下方",{"2":{"407":1}}],["运行着海豹核心的",{"2":{"299":1}}],["运行",{"2":{"262":1,"539":2,"694":1}}],["运行内存",{"2":{"199":1}}],["运算符",{"0":{"175":1},"1":{"176":1,"177":1,"178":1,"179":1,"180":1,"181":1,"182":1}}],["呵",{"2":{"181":1}}],["仔细听",{"2":{"181":1}}],["灵感",{"2":{"582":2}}],["灵视",{"2":{"180":2,"181":3}}],["灵魂堕落",{"2":{"67":1}}],["次左右",{"2":{"687":1}}],["次数",{"2":{"596":1,"703":1}}],["次的频繁冻结等情况",{"2":{"236":1}}],["次",{"2":{"178":1,"368":1,"371":1,"634":1,"704":1}}],["次方",{"2":{"176":1}}],["逻辑非",{"2":{"177":1}}],["逻辑或",{"2":{"177":1}}],["逻辑与",{"2":{"177":1}}],["逻辑运算",{"0":{"177":1}}],["常用指令速查",{"0":{"746":1}}],["常用示例",{"0":{"628":1}}],["常用",{"2":{"619":1}}],["常用文件",{"0":{"431":1}}],["常用方式",{"2":{"420":1}}],["常规抽取",{"2":{"386":3}}],["常规抽取与放回抽取示例",{"2":{"385":1,"386":1}}],["常规",{"2":{"363":1,"368":1}}],["常规骰子算符",{"2":{"178":1}}],["常见于软路由设备",{"2":{"696":1}}],["常见的数据序列化语言包括",{"2":{"301":1}}],["常见问题也是众多开源项目都拥有的页面",{"2":{"206":1}}],["常见问题",{"0":{"680":1},"1":{"681":1,"682":1,"683":1,"684":1,"685":1,"686":1,"687":1,"688":1,"689":1,"690":1,"691":1,"692":1,"693":1,"694":1,"695":1,"696":1,"697":1,"698":1,"699":1},"2":{"206":2,"218":1}}],["常见用法示例",{"0":{"111":1},"1":{"112":1,"113":1,"114":1,"115":1,"116":1,"117":1,"118":1,"119":1,"120":1,"121":1,"122":1,"123":1,"124":1,"125":1,"126":1,"127":1,"128":1,"129":1,"130":1,"131":1,"132":1,"133":1,"134":1,"135":1,"136":1,"137":1,"138":1,"139":1,"140":1,"141":1,"142":1},"2":{"143":1,"157":1}}],["常量",{"2":{"172":2}}],["娱乐",{"2":{"172":1}}],["娱乐功能定制化请自便",{"2":{"15":1}}],["改为",{"2":{"480":1}}],["改成",{"2":{"441":1}}],["改成你中意的名字",{"2":{"150":1}}],["改变海豹核心判定大成功与大失败的方式",{"2":{"617":1}}],["改变",{"2":{"172":1}}],["汉字长度为",{"2":{"172":1}}],["秒后重新登录",{"2":{"622":1}}],["秒一个",{"2":{"346":1}}],["秒",{"2":{"172":1,"344":1,"350":1,"689":1}}],["小众规则指令暂时也放在本扩展中",{"2":{"700":1}}],["小米",{"0":{"448":1,"449":1}}],["小米手机安装面具教程",{"2":{"254":1}}],["小于等于",{"2":{"421":1}}],["小数字",{"2":{"278":1}}],["小主机等配置较低的设备可能无法支持使用",{"2":{"254":1}}],["小节",{"2":{"220":1}}],["小时进行一次备份",{"2":{"459":1}}],["小时一次的自动备份",{"2":{"315":1}}],["小时随时回复我们的指令了",{"2":{"272":1}}],["小时都可以回应我们的指令",{"2":{"272":1}}],["小时",{"2":{"172":1,"344":1}}],["小心嵌套文件夹",{"2":{"56":1}}],["昵称",{"2":{"172":2,"499":1}}],["力量=12",{"2":{"667":2}}],["力量+4",{"2":{"667":3}}],["力量+3",{"2":{"667":1}}],["力量检定",{"2":{"594":1}}],["力量3d6",{"2":{"589":1}}],["力量50str50",{"2":{"582":2}}],["力量",{"2":{"172":1,"173":2,"363":1,"582":10,"665":5,"670":6}}],["普通名字",{"2":{"172":1}}],["普通用户首选",{"2":{"538":1}}],["普通用户无需纠结什么叫相似",{"2":{"420":1}}],["普通用户",{"2":{"120":2,"121":1}}],["举例",{"2":{"172":1,"582":1}}],["典型的像",{"2":{"170":1}}],["兼容的海豹版本",{"2":{"167":1}}],["支持携带参数",{"2":{"709":1}}],["支持每次抽取一个",{"2":{"704":1}}],["支持个人",{"2":{"690":1}}],["支持各种文本匹配和简易脚本",{"2":{"625":1}}],["支持单进程多号",{"2":{"571":1}}],["支持多种架构",{"2":{"538":1}}],["支持多个设置文件",{"2":{"414":1}}],["支持两种方式与海豹对接",{"2":{"521":1}}],["支持通过指令在每个群组中设置默认搜索分组",{"2":{"395":1}}],["支持相关的文案",{"2":{"362":2}}],["支持",{"0":{"477":1,"529":1,"559":1,"691":1},"2":{"253":1,"254":1,"539":1,"568":1,"691":1,"739":1}}],["支持了在使用",{"2":{"161":1}}],["支持转义",{"2":{"34":1,"35":1}}],["详见",{"2":{"159":2,"395":1,"697":1,"698":1}}],["详细操作请查看对应平台的相关使用文档",{"2":{"718":1}}],["详细文档见链接",{"2":{"135":1}}],["详细可见",{"2":{"114":1}}],["允许外部访问",{"2":{"686":1}}],["允许自由开关",{"0":{"340":1}}],["允许任何人执行",{"2":{"340":1}}],["允许任何人",{"2":{"334":1}}],["允许任意使用和分发",{"2":{"159":1}}],["允许通过插件注入",{"2":{"287":1,"519":1}}],["允许后台存活和关闭后台高耗电等",{"2":{"264":1}}],["允许",{"2":{"264":1}}],["允许在文件中使用",{"2":{"37":1}}],["属性调整值会自动变更",{"2":{"665":1}}],["属性调整值和熟练自动计算",{"0":{"563":1}}],["属性修改后",{"2":{"665":1}}],["属性2",{"2":{"663":1,"664":1,"670":1}}],["属性1",{"2":{"663":1,"664":1,"670":1}}],["属性值",{"2":{"604":2,"605":2}}],["属性可以被包含在表达式中进行调整",{"2":{"595":1}}],["属性表达式",{"2":{"595":1,"596":1,"597":1,"598":1,"603":1,"604":1}}],["属性与技能",{"2":{"585":1}}],["属性的英文缩写法",{"2":{"582":1}}],["属性未录入",{"2":{"371":1}}],["属性设置",{"0":{"369":1},"2":{"369":3}}],["属性",{"2":{"159":1,"585":2,"587":1,"588":1,"589":3,"590":1,"591":1,"665":3,"667":2,"670":2,"746":2}}],["属性同义词是在录入和存储角色数据时",{"2":{"582":1}}],["属性同义词",{"0":{"557":1,"561":1,"581":1},"1":{"582":1,"583":1},"2":{"146":1}}],["位置上的名字是海豹核心选用的主要名字",{"2":{"583":1}}],["位版本",{"2":{"538":1}}],["位版本的情况下使用",{"2":{"538":1}}],["位于",{"2":{"341":1}}],["位时间戳",{"2":{"172":1}}],["位",{"2":{"158":1,"514":1,"538":2}}],["专门与海豹的日志模块进行交互",{"2":{"158":1}}],["几率性断连",{"2":{"474":1}}],["几乎所有与海豹本体有关的",{"2":{"158":1}}],["几个比较重要的仓库",{"2":{"5":1}}],["廖雪峰",{"2":{"157":1}}],["现为12",{"2":{"676":1}}],["现各大骰系都用此程序",{"2":{"250":1}}],["现代的终端通常会生成一个窗口",{"2":{"313":1}}],["现代的",{"2":{"309":1}}],["现代",{"2":{"157":1}}],["现在关闭",{"2":{"704":1}}],["现在可以进入海豹",{"2":{"686":1}}],["现在就配置完成了",{"2":{"686":1}}],["现在已经很不好用了",{"2":{"685":1}}],["现在",{"2":{"158":1,"693":1}}],["现在要写一个名为",{"2":{"114":1}}],["现在请不要这么做了",{"2":{"52":1,"54":1}}],["现在需要将旧部署转移到新的机器",{"2":{"17":1}}],["调查",{"2":{"665":2}}],["调试",{"2":{"262":2}}],["调试桥",{"2":{"262":1}}],["调整值",{"2":{"746":1}}],["调整端口暴露等",{"2":{"539":1}}],["调整",{"2":{"156":1}}],["调用时请使用",{"2":{"138":1}}],["调用自定义文案",{"2":{"94":1}}],["影响",{"2":{"152":1,"354":2}}],["补上来解决报错",{"2":{"155":1}}],["补全信息",{"0":{"150":1}}],["补充",{"0":{"137":1},"2":{"52":1,"54":1,"81":1,"143":1,"491":1,"686":1,"763":1}}],["解锁码的用法参见",{"2":{"331":1}}],["解锁码",{"0":{"331":1},"2":{"331":1,"622":1}}],["解释器",{"2":{"314":1}}],["解压后请勿运行",{"2":{"544":1}}],["解压后进行开发",{"2":{"149":1}}],["解压好的",{"2":{"262":1}}],["解压到电脑中任何可用的位置",{"2":{"259":1}}],["解压一个新的",{"2":{"249":1}}],["解压缩软件时常不会自动帮你创建文件夹",{"2":{"196":1}}],["解压压缩包需要解压缩的应用",{"2":{"196":1}}],["解决后再次提交",{"2":{"504":1}}],["解决问题",{"2":{"190":1}}],["解决方法",{"2":{"183":1}}],["解析",{"2":{"135":1}}],["解析新的游戏规则",{"2":{"94":2,"103":2}}],["希望资源占用低的",{"2":{"513":1}}],["希望能够帮助你掌握一些快速学习新知识的小技巧",{"2":{"204":1}}],["希望你通过这两篇科普",{"2":{"193":1}}],["希望通过这样的办法",{"2":{"192":1,"212":1,"234":1}}],["希望在缺失对应扩展时不进行这个插件的加载",{"2":{"164":1}}],["希望先在本地编写",{"2":{"149":1}}],["希望更加工程化以方便维护",{"2":{"148":1,"162":1}}],["托管仓库",{"2":{"149":1}}],["托管在",{"2":{"4":1}}],["面骰",{"2":{"635":2,"636":2}}],["面骰的一种补偿骰法",{"2":{"632":1}}],["面具安装工具",{"2":{"256":1}}],["面具",{"2":{"256":1}}],["面向有前端经验的开发者",{"2":{"148":1}}],["面数",{"2":{"133":1,"626":1,"648":2,"703":1,"704":1,"711":1,"746":1}}],["投掷指定面数的骰子指定次数",{"2":{"703":1}}],["投掷",{"2":{"147":2}}],["投喂插件",{"0":{"129":1}}],["投喂",{"0":{"2":1},"2":{"2":1,"129":8}}],["制卡",{"0":{"616":1,"658":1},"2":{"147":1}}],["制作一个",{"2":{"94":1,"104":1}}],["打个比方",{"2":{"278":1}}],["打开扩展",{"2":{"625":1}}],["打开扩展并设定默认骰子为",{"2":{"146":1}}],["打开开关后在",{"2":{"531":1}}],["打开在文件夹内新创建的",{"2":{"480":1}}],["打开记事本",{"2":{"458":1}}],["打开系统设置",{"2":{"447":1}}],["打开这一功能",{"2":{"413":1}}],["打开程序",{"2":{"292":1}}],["打开",{"2":{"258":1,"262":1,"441":1,"464":1,"521":1,"531":1}}],["打开面具模块",{"2":{"256":1}}],["打开海豹核心",{"2":{"441":1}}],["打开海豹",{"2":{"242":1}}],["打开海豹的管理",{"2":{"241":1}}],["打印出来的东西不仅会在控制台中出现",{"2":{"158":1}}],["打印日志",{"2":{"158":1}}],["打印解析出的数据",{"2":{"135":1}}],["积分最大的人取胜",{"2":{"145":1}}],["游戏主持人邀请你进入群聊",{"2":{"747":1}}],["游戏",{"0":{"749":1,"754":1},"1":{"750":1,"751":1,"752":1,"753":1,"755":1,"756":1,"757":1,"758":1,"759":1,"760":1},"2":{"740":1,"741":1,"742":1}}],["游戏结束",{"2":{"145":1}}],["游戏规则",{"0":{"145":1}}],["张",{"2":{"145":1,"653":1}}],["张三",{"2":{"134":1}}],["玩家视角",{"2":{"747":1}}],["玩家提供方便的机器人",{"2":{"717":1}}],["玩家应该勾上角色卡上该技能旁的方框",{"2":{"613":1}}],["玩家所需指令",{"2":{"584":1,"657":1}}],["玩家喜爱和使用",{"2":{"549":1}}],["玩家自动消耗",{"2":{"145":1}}],["玩家的当前昵称为",{"2":{"640":1}}],["玩家的力量数值",{"2":{"173":1}}],["玩家的角色属性",{"2":{"172":1}}],["玩家的目标是尽可能使得自己的积分接近",{"2":{"145":1}}],["玩家的",{"2":{"98":2}}],["玩家的名片格式",{"2":{"103":1}}],["玩家的名片",{"2":{"94":1}}],["玩家的自动名片格式",{"2":{"94":1,"103":1}}],["获得服务端核心文件",{"2":{"479":1}}],["获得",{"2":{"145":1}}],["获取指定日志记录的染色器链接",{"2":{"730":1}}],["获取指令帮助",{"2":{"722":1}}],["获取和使用",{"0":{"718":1},"1":{"719":1,"720":1,"721":1,"722":1,"723":1,"724":1}}],["获取角色卡录入模板",{"2":{"665":1}}],["获取帮助",{"2":{"746":1}}],["获取帮助信息",{"0":{"586":1,"662":1}}],["获取帮助文档",{"0":{"393":1}}],["获取最新的正式版海豹核心安装包",{"2":{"538":1}}],["获取海豹核心安装包",{"2":{"538":1}}],["获取海豹",{"0":{"538":1}}],["获取连接所需信息",{"0":{"501":1}}],["获取服务端核心",{"0":{"479":1}}],["获取自定义回复文件",{"0":{"416":1}}],["获取牌堆",{"0":{"384":1}}],["获取",{"0":{"256":1,"403":1,"464":1,"469":1,"473":1,"530":1,"535":1},"1":{"531":1,"532":1},"2":{"331":1,"622":1}}],["获取对方数据",{"2":{"134":1}}],["获取用户在黑名单",{"0":{"126":1}}],["获取黑名单",{"0":{"125":1}}],["获取当前用户的权限等级",{"2":{"120":1}}],["获取不到就使用默认值",{"2":{"116":1}}],["获取到",{"2":{"115":3}}],["获取从第",{"2":{"110":1}}],["获取第一个参数",{"2":{"115":1,"116":1,"117":1}}],["获取第",{"2":{"94":1}}],["获取被",{"2":{"94":1}}],["获取云端内容",{"2":{"64":1}}],["获取更多信息",{"2":{"5":1}}],["摸鱼等级",{"2":{"145":1,"147":1}}],["摸鱼",{"2":{"145":1,"147":1}}],["摸鱼大赛",{"2":{"143":1,"147":2}}],["点入",{"2":{"686":1}}],["点数",{"2":{"616":1}}],["点左侧",{"2":{"363":1}}],["点开",{"2":{"328":1,"503":1,"504":1}}],["点开以后删掉文件夹里的",{"2":{"239":1}}],["点赞或评论",{"2":{"206":1}}],["点生命值",{"2":{"145":1}}],["点游戏",{"2":{"145":1}}],["点击配置规则",{"2":{"686":1}}],["点击默认存在在的代理",{"2":{"686":1}}],["点击图中",{"2":{"686":1}}],["点击确定",{"2":{"686":1}}],["点击确定后",{"2":{"363":1}}],["点击手机海豹的",{"2":{"577":1}}],["点击即可打开后台",{"2":{"539":1}}],["点击侧边栏前往",{"2":{"532":1}}],["点击侧边导航栏",{"2":{"464":1}}],["点击右下角的",{"2":{"479":1}}],["点击右上角的",{"2":{"363":1,"504":1}}],["点击应用卡片可在",{"2":{"469":1}}],["点击连接",{"2":{"465":1,"470":1,"474":1,"533":1,"536":1}}],["点击可以向当前文件中添加一条回复项",{"2":{"418":1}}],["点击页面上的",{"2":{"397":1}}],["点击页面右上角的",{"2":{"316":1}}],["点击它选择本地的牌堆文件上传后即可读取牌堆",{"2":{"385":1}}],["点击左上角开关来启用拦截",{"2":{"352":1}}],["点击海豹",{"2":{"323":1,"352":1,"385":1,"395":1,"404":1,"413":1}}],["点击垃圾桶图标按钮以删除单个备份文件",{"2":{"321":1}}],["点击每一个备份文件右边的",{"2":{"321":1}}],["点击等待重启",{"2":{"257":1}}],["点击下面的",{"2":{"238":1}}],["点击重载牌堆",{"2":{"225":1}}],["点击你想要修改的文件",{"2":{"12":1}}],["点击按钮后进入如下页面",{"2":{"11":1}}],["点击",{"2":{"11":1,"14":1,"149":2,"325":1,"388":2,"396":2,"405":1,"406":2,"407":1,"414":1,"419":1,"422":1,"442":1,"464":2,"473":1,"503":2,"504":2,"505":1,"530":1,"686":1}}],["脸皮厚度",{"2":{"144":1}}],["生存",{"2":{"665":2}}],["生命+1d4",{"2":{"665":1}}],["生命值降至0",{"2":{"665":1,"678":1}}],["生命值更大的人取胜",{"2":{"145":1}}],["生命值上限",{"2":{"144":1}}],["生成指定数量的随机属性",{"2":{"750":1,"755":1}}],["生成指定数量的共鸣性怪异角色属性",{"2":{"714":1}}],["生成属性",{"2":{"746":1}}],["生成随机属性值",{"2":{"746":1}}],["生成随机属性数值",{"2":{"746":1}}],["生成随机属性",{"0":{"616":1,"658":1}}],["生成的属性包括",{"2":{"616":1}}],["生成的提示符",{"2":{"290":1}}],["生成的",{"2":{"283":1}}],["生成的内容",{"2":{"207":1}}],["生成的内容心存警惕",{"2":{"207":1}}],["生成角色的属性点",{"2":{"147":1}}],["生成骰子出招并获取玩家出招之后",{"2":{"84":1}}],["尚未执行的所有任务",{"2":{"142":1}}],["任意相符",{"2":{"419":1,"420":4}}],["任意一个都能触发同样的回复",{"2":{"419":1}}],["任务",{"2":{"141":1}}],["任何人都可以搭建一个",{"2":{"549":1}}],["任何人都可以在开源许可协议允许的范围内下载",{"2":{"186":1,"200":1}}],["任何不按教程的行动请自行处理疑难问题",{"2":{"257":1}}],["任何",{"2":{"35":1}}],["阿里云文档",{"2":{"140":1}}],["|",{"2":{"140":1,"157":1,"430":25,"562":2,"576":2,"628":1,"632":4,"633":4,"641":4,"659":1,"667":2,"722":2}}],["||",{"2":{"84":5,"129":3,"130":4,"131":1,"177":1}}],["||$t1==",{"2":{"26":1}}],["六个面分别为",{"2":{"634":1}}],["六种类型",{"2":{"138":1}}],["六块",{"2":{"68":1}}],["匹配拼音",{"2":{"356":1}}],["匹配选项中最重要的设置就是",{"2":{"354":1}}],["匹配选项",{"0":{"354":1},"2":{"353":1}}],["匹配到关键词了",{"2":{"137":1}}],["匹配中",{"2":{"74":1}}],["足够你玩出花来",{"2":{"137":1}}],["必填",{"2":{"159":3}}],["必要流程",{"2":{"137":1}}],["必须为",{"2":{"678":1}}],["必须在同一平台使用",{"2":{"622":1}}],["必须在同一行内",{"2":{"36":1}}],["必须同时满足所有条件",{"2":{"419":1}}],["必须",{"2":{"368":1}}],["必须保留首行",{"2":{"68":1}}],["必须用引号包裹",{"2":{"34":1}}],["试试非指令关键词",{"2":{"137":1}}],["试图捕捉某人",{"2":{"134":1}}],["区别在于允许额外",{"2":{"639":1}}],["区别在于发送骰点结果的方式",{"2":{"638":1}}],["区别主要在于对大成功",{"2":{"594":1}}],["区别是",{"2":{"601":1}}],["区别是群内收到就群内发送",{"2":{"94":1}}],["区别是设定的为",{"2":{"94":1}}],["区分大成功",{"2":{"136":1}}],["大多在政府部门工作",{"2":{"739":1}}],["大多数服务器不会默认开放所需要的端口",{"2":{"482":1}}],["大多数情况下都会有热心的网友在页面下方给出他们的解决方案",{"2":{"206":1}}],["大致来说",{"2":{"644":1}}],["大致了解",{"2":{"490":1}}],["大致了解其含义",{"2":{"210":1}}],["大于等于",{"2":{"421":1}}],["大部分事项",{"2":{"506":1}}],["大部分系统往往会限制应用程序在后台的活动",{"2":{"446":1}}],["大部分",{"2":{"286":1}}],["大数字",{"2":{"278":1}}],["大概有",{"2":{"190":1}}],["大失败时无视判定结果",{"2":{"619":1}}],["大失败的判定方式",{"2":{"594":1}}],["大失败",{"2":{"136":3,"370":1,"619":8}}],["大成功",{"2":{"136":3,"363":4,"596":1,"597":1,"598":1,"619":3}}],["给骰主发送消息",{"2":{"746":1}}],["给定的字数时触发对应回复项",{"2":{"421":1}}],["给用户",{"2":{"358":1}}],["给通知列表中的",{"2":{"333":1}}],["给予其足够的运行权限",{"2":{"539":1}}],["给予适当的权限并配置安卓端保活",{"2":{"436":1}}],["给予通过",{"2":{"262":1}}],["给予",{"2":{"256":2}}],["给解决带来更高的效率",{"2":{"187":1,"201":1}}],["给",{"2":{"135":1}}],["给消息发送者回应",{"2":{"116":1}}],["填你的",{"2":{"241":2}}],["填入宿主机在",{"2":{"497":1}}],["填入对应服务的名称",{"2":{"494":1}}],["填入骰子",{"2":{"265":1}}],["填入",{"2":{"141":2}}],["填入你的",{"2":{"135":1}}],["填入你的骰娘的大脑的",{"2":{"135":1}}],["填写对应的信息点击连接",{"2":{"502":1}}],["填写为",{"2":{"494":1}}],["填写你骰子所在电脑的",{"2":{"501":1}}],["填写你邮箱服务提供商的",{"2":{"338":1}}],["填写你希望的发件邮箱",{"2":{"336":1}}],["填写邮箱密钥",{"2":{"337":1}}],["填写相应信息进行连接",{"2":{"253":1,"527":1}}],["填写",{"2":{"241":1,"491":1,"514":1,"518":1,"524":1}}],["填写一些信息",{"2":{"48":1}}],["填写完成后点击下一步",{"2":{"242":1}}],["填写完成后",{"2":{"13":1}}],["填写变更内容信息",{"2":{"12":1}}],["填写新分支名",{"2":{"12":1}}],["套用这个模板",{"2":{"135":1}}],["传输与重建",{"2":{"301":1}}],["传统的写法是这样",{"2":{"135":1}}],["传参为",{"2":{"115":1,"116":1,"117":1}}],["网络请求",{"0":{"135":1}}],["网站时",{"2":{"69":1}}],["某人时",{"2":{"134":1}}],["某些情况下",{"2":{"62":1}}],["哒",{"2":{"133":1}}],["感谢魔都的章鱼站长给予的许可和支持",{"2":{"765":1}}],["感知",{"2":{"658":5,"665":2}}],["感觉是对的",{"2":{"133":1}}],["感情勉强",{"2":{"67":1}}],["感情挫折",{"2":{"67":1}}],["感情轻浮",{"2":{"67":1}}],["读取玩家或群组数据",{"0":{"132":1}}],["读完对应内容后",{"2":{"16":1}}],["抽出了",{"2":{"653":3}}],["抽出来单独作为一个常量",{"2":{"131":1}}],["抽牌",{"0":{"651":1,"653":1},"1":{"652":1,"653":1,"654":1,"655":1}}],["抽取指定种族的随机名字",{"2":{"763":1}}],["抽取随机名字",{"2":{"762":1}}],["抽取总结性疯狂症状",{"2":{"752":1}}],["抽取即时疯狂症状",{"2":{"752":1}}],["抽取即时症状",{"2":{"612":1}}],["抽取疯狂症状",{"0":{"752":1}}],["抽取失败的原因",{"2":{"118":1}}],["抽取结果",{"2":{"118":1,"119":1}}],["抽取结果字符串中可以插入",{"2":{"55":1,"59":1}}],["抽取结果字符串中最前面的",{"2":{"53":1}}],["抽取结果字符串中的",{"2":{"52":1}}],["抽取牌堆的另一种写法",{"2":{"119":1}}],["抽取牌堆的函数是",{"2":{"118":1}}],["抽取牌堆失败",{"2":{"119":1}}],["抽取牌堆示例",{"2":{"119":1}}],["抽取牌堆",{"0":{"118":1,"119":1},"1":{"119":1},"2":{"119":1}}],["抽取牌组时",{"2":{"64":1}}],["抽取本牌组时将请求接口获取云端数据",{"2":{"64":1}}],["抽取了",{"2":{"57":1}}],["抽取",{"2":{"52":1,"57":1}}],["序列号即为",{"2":{"623":1}}],["序列号",{"2":{"623":2}}],["序列为止的所有文本",{"2":{"43":1}}],["序号",{"2":{"130":1,"619":1,"746":1}}],["查找指定分组下的文档",{"2":{"722":1}}],["查找文档",{"2":{"722":1}}],["查阅详细说明",{"2":{"541":1}}],["查询功能在不同设备上的实现是不同的",{"2":{"642":1}}],["查询",{"2":{"642":1,"721":1,"722":1}}],["查询指定扩展的信息",{"2":{"625":1}}],["查询指令",{"2":{"553":1}}],["查询文档放置位置",{"2":{"430":1}}],["查询等操作的实现示例",{"2":{"130":1}}],["查看编辑推荐",{"2":{"765":1}}],["查看用法",{"2":{"758":2,"760":1}}],["查看用户的需求和",{"2":{"193":1,"202":1}}],["查看鸽子背后的故事",{"2":{"702":1}}],["查看先攻列表",{"2":{"660":1}}],["查看牌组所属牌堆的详细信息",{"2":{"652":1}}],["查看特定牌堆可抽取的牌组列表",{"2":{"652":1}}],["查看扩展列表和开启情况",{"2":{"625":1}}],["查看指定模组的详细内容",{"2":{"765":1}}],["查看指定用户黑白名单情况",{"2":{"623":1}}],["查看指令列表",{"2":{"375":1}}],["查看当前欢迎语",{"2":{"707":1}}],["查看当前死亡豁免情况",{"2":{"678":1}}],["查看当前法术位状况",{"2":{"672":1}}],["查看当前标记列表",{"2":{"649":1}}],["查看当前默认骰子面数",{"2":{"648":1}}],["查看当前群组的默认查询分组",{"2":{"643":1}}],["查看当前角色名",{"2":{"640":1}}],["查看当前面数设置",{"2":{"626":1}}],["查看当前",{"2":{"622":1}}],["查看运行状态",{"2":{"541":1}}],["查看你的机器人对应的邀请二维码",{"2":{"505":1}}],["查看原因",{"2":{"504":1}}],["查看迁移数据到手机",{"2":{"445":1}}],["查看拦截日志",{"0":{"357":1}}],["查看日志",{"2":{"225":1,"541":1,"681":1}}],["查看帮助文档词条",{"0":{"399":1}}],["查看帮助",{"2":{"130":1,"623":1,"678":1}}],["查看记录",{"2":{"129":1}}],["查看自己的权限",{"2":{"121":1}}],["查看",{"2":{"120":1,"572":1}}],["删除角色卡",{"2":{"746":1}}],["删除的日志在海豹核心中永远失去",{"2":{"729":1}}],["删除的文件将无法找回",{"2":{"414":1}}],["删除个人快捷指令",{"2":{"709":1}}],["删除快捷指令",{"2":{"709":1}}],["删除掉默认的规则",{"2":{"686":1}}],["删除和清空",{"2":{"670":1}}],["删除指定日志",{"2":{"729":1}}],["删除指定角色卡",{"2":{"641":1}}],["删除指定属性的",{"2":{"670":1}}],["删除指定属性",{"2":{"588":1,"664":1}}],["删除所有属性数值和法术位",{"2":{"664":1}}],["删除所有属性数值",{"2":{"588":1}}],["删除所选",{"2":{"398":1}}],["删除属性",{"0":{"588":1,"664":1}}],["删除结果",{"2":{"422":1}}],["删除帮助文档",{"0":{"398":1}}],["删除牌堆通常会自动重载",{"2":{"385":1}}],["删除或更改",{"2":{"332":1}}],["删除之前添加的账号",{"2":{"242":1}}],["删除",{"2":{"130":1,"363":1,"385":1,"405":1,"414":2,"699":1}}],["要注意家庭网络的",{"2":{"501":1}}],["要申请用于邀请海豹至",{"2":{"466":1,"471":1,"475":1}}],["要获取用于连接海豹的信息之前",{"2":{"501":1}}],["要获取用于连接海豹的",{"2":{"464":1,"473":1,"530":1,"535":1}}],["要如何设置",{"2":{"381":1}}],["要怎样使用呢",{"2":{"425":1}}],["要怎样设置",{"2":{"425":1}}],["要怎样让它简洁起来呢",{"2":{"361":1}}],["要怎样让它丰富起来呢",{"2":{"361":1}}],["要怎么实现",{"2":{"381":1}}],["要怎么做",{"0":{"147":1}}],["要求在骰子回应后才能再次发送",{"2":{"708":1}}],["要求使用心理学技能",{"2":{"602":1}}],["要求一定难度的检定",{"0":{"597":1}}],["要求安卓版本",{"2":{"261":1}}],["要求你发送截图也只是为了更好地了解你的问题究竟出在哪里",{"2":{"187":1,"201":1}}],["要在使用",{"2":{"212":1}}],["要在",{"2":{"192":1,"234":1,"468":1}}],["要干什么",{"2":{"137":1}}],["要发送给骰娘的具体消息",{"2":{"135":1}}],["要爱护动物",{"2":{"129":1}}],["要看懂这里你可能需要学习一下初阶豹语",{"2":{"99":1}}],["物品>",{"2":{"129":2}}],["答案是使用",{"2":{"128":1}}],["且≤",{"2":{"619":2}}],["且判定失败为大失败",{"2":{"619":1}}],["且判定成功为大成功",{"2":{"619":1}}],["且文件一般在",{"2":{"257":1}}],["且版本大于等于",{"2":{"166":1}}],["且后者的版本必须大于等于",{"2":{"165":1}}],["且只能存一个",{"2":{"128":1}}],["且不与第一个",{"2":{"78":1}}],["且不支持尾逗号",{"2":{"36":1}}],["避免他人访问",{"2":{"347":1}}],["避免忘记",{"2":{"345":1}}],["避免出现预期外情况",{"2":{"722":1}}],["避免出现",{"2":{"335":1}}],["避免出现看上去保存了",{"2":{"48":1}}],["避免放错地方或者取错东西",{"2":{"128":1}}],["重置默认值为",{"2":{"711":1}}],["重置角色名",{"2":{"640":1}}],["重试",{"2":{"687":1}}],["重复进行计算",{"2":{"635":1}}],["重复进行指定次数的相同检定",{"2":{"596":1}}],["重载",{"2":{"405":1}}],["重载过程需要一定时间",{"2":{"395":1}}],["重载帮助文档",{"2":{"395":2}}],["重载牌堆",{"2":{"385":2}}],["重载拦截",{"2":{"356":1}}],["重新获取日志",{"2":{"746":1}}],["重新获取指定日志的染色器链接",{"2":{"729":1}}],["重新进行登录流程了",{"2":{"686":1}}],["重新装载帮助文档",{"2":{"647":1}}],["重新启动海豹",{"2":{"699":1}}],["重新启动海豹核心",{"2":{"622":1}}],["重新启动容器",{"2":{"493":1}}],["重新启动你的模拟器",{"2":{"256":1}}],["重新添加",{"2":{"474":1}}],["重新计算",{"2":{"355":1}}],["重新设计了用户界面的",{"2":{"295":1}}],["重新配置",{"2":{"249":1,"503":1}}],["重新登录",{"2":{"246":1,"247":1}}],["重新加载牌堆",{"2":{"94":1,"102":1,"622":1,"655":1}}],["重启骰子后生效",{"2":{"347":1}}],["重启骰子后重新计时",{"2":{"344":1}}],["重启后生效",{"2":{"346":1}}],["重启",{"2":{"246":1}}],["重名就可以了",{"2":{"128":1}}],["相当于计算器",{"2":{"628":1}}],["相比之下分离部署有更强的稳定性",{"2":{"515":1}}],["相比开机激活之后马上就可以投入使用的个人计算机",{"2":{"272":1}}],["相对客观地陈述问题会比只表示主观情绪有用",{"0":{"190":1}}],["相关内容",{"2":{"491":1}}],["相关设置均位于",{"2":{"315":1}}],["相关截图",{"2":{"190":1}}],["相关文档默认你了解如何使用前端工具链",{"2":{"162":1}}],["相关的消息",{"2":{"649":1}}],["相关的问题会更有效率",{"2":{"193":1}}],["相关的包可能存在兼容性问题",{"2":{"154":1}}],["相关的",{"2":{"128":1}}],["相同技能不能被反复列出",{"2":{"614":1}}],["相同平台间迁移",{"0":{"574":1}}],["相同的移除函数",{"2":{"124":1}}],["相同",{"2":{"94":1,"104":1,"417":1}}],["存有拦截日志等信息",{"2":{"431":1}}],["存有",{"2":{"431":1}}],["存有人物卡",{"2":{"431":1}}],["存活消息间隔写法",{"2":{"344":1}}],["存活确认",{"0":{"344":1}}],["存在大量用户",{"2":{"199":1}}],["存在一个即可",{"2":{"90":2}}],["存储权限",{"0":{"453":1}}],["存储数据",{"2":{"129":1}}],["存储起来",{"2":{"128":1}}],["存储时需要指定",{"2":{"128":1}}],["存放的数据是字符串类型",{"2":{"128":1}}],["存取数据",{"0":{"128":1},"1":{"129":1,"130":1}}],["警告后继续使用指令会增加怒气值",{"2":{"346":1}}],["警告",{"2":{"127":1,"158":1,"355":1}}],["警告级词表",{"2":{"90":1}}],["警告级词汇",{"2":{"89":1,"90":2}}],["已设置",{"2":{"660":1}}],["已连接",{"2":{"514":1}}],["已知护眼模式可能会导致海豹核心意外关闭",{"2":{"451":1}}],["已启用",{"2":{"414":2,"624":1}}],["已经设置了先攻列表的情况",{"2":{"660":1}}],["已经基本不可用",{"2":{"512":1}}],["已经就绪",{"2":{"375":1}}],["已经成功注入了",{"2":{"258":1}}],["已修改过的文案",{"2":{"364":1}}],["已备份文件",{"2":{"321":1}}],["已于",{"2":{"254":1}}],["已停止更新",{"2":{"254":1}}],["已停止维护",{"2":{"236":1,"237":1}}],["已无法使用",{"2":{"254":1,"261":1}}],["已发现",{"2":{"254":1,"261":1}}],["已失效",{"2":{"246":1}}],["已切换至规则文本",{"2":{"136":1}}],["已移除第$",{"2":{"130":1}}],["已添加第$",{"2":{"130":1}}],["已信任用户",{"2":{"127":1}}],["已解除拉黑",{"2":{"127":1}}],["已拉黑用户",{"2":{"127":1}}],["已有详细示例",{"2":{"100":1,"101":1}}],["演示图片中为",{"2":{"686":1}}],["演示",{"2":{"127":1,"139":1}}],["怒气值超过拉黑阈值",{"2":{"327":1}}],["怒气值",{"2":{"125":1,"127":2}}],["添加规则",{"2":{"686":1}}],["添加海豹运作需要的权限",{"2":{"532":1}}],["添加本地储存",{"2":{"443":1}}],["添加图片的方法",{"2":{"443":1}}],["添加一项",{"2":{"418":1}}],["添加的好友为单向好友",{"2":{"334":1}}],["添加黑白名单",{"0":{"324":1},"1":{"325":1,"326":1,"327":1}}],["添加至系统环境变量",{"2":{"262":1}}],["添加账号",{"2":{"241":1}}],["添加选项",{"2":{"131":1}}],["添加",{"2":{"120":1,"123":1,"124":1,"325":1,"521":1,"622":1}}],["身份",{"2":{"120":1}}],["部署的海豹功能有所限制",{"2":{"539":1}}],["部署",{"2":{"278":1,"285":1,"491":1,"516":1,"716":1}}],["部署签名服务",{"2":{"237":1}}],["部署在",{"2":{"227":1}}],["部署海豹的",{"2":{"513":1}}],["部署海豹与通过",{"2":{"491":1}}],["部署海豹时",{"2":{"489":1}}],["部署海豹核心为什么要解压压缩包",{"0":{"196":1}}],["部署海豹",{"0":{"17":1}}],["部分过时系统不支持",{"2":{"514":1}}],["部分修改",{"2":{"493":1}}],["部分服务端会推荐对应",{"2":{"478":1}}],["部分",{"2":{"225":1,"490":1,"494":1}}],["部分权限等级仅在群聊中有效",{"2":{"120":1}}],["省略消耗数量时",{"2":{"674":1}}],["省去你一一发送日志文件的麻烦",{"2":{"568":1}}],["省去了判断是否抽取成功的步骤",{"2":{"119":1}}],["省事之外",{"2":{"84":1}}],["错误的用例",{"2":{"722":1}}],["错误的值",{"2":{"369":1}}],["错误写法",{"2":{"174":1}}],["错误原因",{"2":{"119":1}}],["错误检查",{"2":{"93":1}}],["本机上完成扫码登录",{"0":{"687":1}}],["本次录入了1条数据",{"2":{"591":1,"593":1,"669":1}}],["本次共记录了2条数据",{"2":{"582":1}}],["本例中为",{"2":{"497":1}}],["本文件所有回复项目上方新增了",{"2":{"417":1}}],["本文中将涉及使用",{"2":{"143":1}}],["本体实现一套",{"2":{"294":1}}],["本身则需要通过电脑使用",{"2":{"262":1}}],["本教程不涉及说明如何",{"2":{"254":1}}],["本部分中将会为一些涉及的要素提供正例与反例",{"2":{"222":1}}],["本手册特别提供了",{"2":{"206":1}}],["本篇的科普希望大家能知道如何方便自己也方便他人地提问",{"2":{"185":1}}],["本脚本用于演示如何抽取牌堆",{"2":{"119":1}}],["本节以群聊代称",{"2":{"747":1}}],["本节是海豹支持的其他",{"2":{"738":1}}],["本节只涉及如何使用海豹核心完成规则中指定的操作",{"2":{"584":1,"657":1}}],["本节提供了多种对接途径的引导",{"2":{"513":1}}],["本节假定你对",{"2":{"489":1}}],["本节包括两项内容",{"2":{"456":1}}],["本节包含在主流安卓操作系统上允许海豹核心在后台运行",{"2":{"446":1}}],["本节主要讲解如何使用模拟器实现",{"2":{"254":1}}],["本节为计算机小白指南中的第四部分",{"2":{"266":1}}],["本节为计算机小白指南中的第一部分",{"2":{"213":1}}],["本节为计算机小白指南中的第二部分",{"2":{"203":1}}],["本节为海豹提供的",{"2":{"94":1}}],["本节不能代替权威解释或各项目的官方文档",{"2":{"195":1,"266":1}}],["本节旨在帮助先前未曾接触过计算机以及服务器",{"2":{"195":1,"203":1,"213":1,"266":1}}],["本节将提供一些常见问题的解决方式",{"2":{"680":1}}],["本节将会指导你如何迁移现有的海豹核心",{"2":{"573":1}}],["本节将会指导你如何在你的",{"2":{"537":1}}],["本节将会介绍海豹的特色功能",{"2":{"547":1}}],["本节将包含通过",{"2":{"489":1}}],["本节将包含你在",{"2":{"463":1,"467":1,"472":1,"476":1,"499":1,"510":1,"528":1,"534":1}}],["本节将包含你在钉钉平台接入海豹核心需要了解的特定内容",{"2":{"461":1}}],["本节将针对先前未曾接触过计算机以及服务器",{"2":{"185":1}}],["本节将展示对故事发展有帮助的一些指令",{"2":{"761":1}}],["本节将展示记录跑团日志相关的指令",{"2":{"725":1}}],["本节将展示海豹的",{"2":{"700":1}}],["本节将展示牌堆和自定义回复相关的指令",{"2":{"650":1}}],["本节将展示",{"2":{"584":1,"657":1,"745":1}}],["本节将展示自定义回复编写的进阶部分",{"2":{"69":1}}],["本节将展示复杂文案的编写技巧",{"2":{"22":1}}],["本节将介绍安卓端海豹核心常见问题和解决方法",{"2":{"435":1}}],["本节将介绍自定义回复功能",{"2":{"411":1}}],["本节将介绍自定义文案的设置",{"2":{"360":1}}],["本节将介绍帮助文档功能",{"2":{"391":1}}],["本节将介绍帮助文档的编写",{"2":{"65":1}}],["本节将介绍牌堆功能",{"2":{"382":1}}],["本节将介绍牌堆的编写",{"2":{"29":1}}],["本节将介绍拦截功能和相关设置",{"2":{"351":1}}],["本节将介绍基础设置内的内容",{"2":{"329":1}}],["本节将介绍黑白名单的设置",{"2":{"322":1}}],["本节将介绍关于备份",{"2":{"314":1}}],["本节将介绍海豹核心的核心指令",{"2":{"621":1}}],["本节将介绍海豹核心主要的本地文件和它们的作用",{"2":{"429":1}}],["本节将介绍海豹在",{"2":{"581":1}}],["本节将介绍海豹内置的脚本语言",{"2":{"171":1}}],["本节将介绍海豹扩展功能的进阶内容",{"2":{"91":1}}],["本节将介绍",{"2":{"157":1,"401":1,"426":1}}],["本节将介绍如何使用",{"2":{"148":1}}],["本节将介绍如何为你的海豹核心编写和添加一个新的",{"2":{"143":1}}],["本节将介绍敏感词库的编写",{"2":{"88":1}}],["本节内容",{"2":{"22":1,"29":1,"65":1,"69":1,"88":1,"91":1,"94":1,"143":1,"148":1,"157":1,"171":1,"184":1,"185":1,"195":1,"203":1,"213":1,"266":1,"314":1,"322":1,"329":1,"351":1,"360":1,"382":1,"391":1,"401":1,"411":1,"426":1,"429":1,"435":1,"446":1,"456":1,"461":1,"463":1,"467":1,"472":1,"476":1,"489":1,"499":1,"510":1,"528":1,"534":1,"537":1,"547":1,"573":1,"581":1,"584":1,"621":1,"650":1,"657":1,"680":1,"700":1,"716":1,"725":1,"738":1,"745":1,"761":1}}],["完成",{"2":{"496":1}}],["完成后回到",{"2":{"532":1}}],["完成后复制下方生成的",{"2":{"466":1,"471":1,"475":1}}],["完成后点击",{"2":{"464":1}}],["完成后",{"2":{"464":1,"469":1,"535":1}}],["完全由骰主自行设定",{"2":{"724":1}}],["完全相同",{"2":{"638":1,"639":1}}],["完全等价于",{"2":{"609":1}}],["完全一致",{"2":{"420":1}}],["完全没有关系",{"2":{"203":1}}],["完全了吧",{"2":{"94":1}}],["完整的代码如下",{"2":{"117":1}}],["取较高或较低结果",{"2":{"632":1}}],["取悦",{"2":{"582":1}}],["取决于你",{"2":{"185":1,"214":1}}],["取分隔后的最后一项的值",{"2":{"174":1}}],["取值分别为",{"2":{"144":1}}],["取出数据",{"2":{"131":1}}],["取名为$",{"2":{"116":1,"117":1}}],["取第一个参数为名字",{"2":{"116":1,"117":1}}],["前一用法的特殊情况",{"2":{"665":1}}],["前往官网的",{"2":{"578":1}}],["前往",{"2":{"479":3,"481":1}}],["前往侧边导航栏",{"2":{"466":1,"471":1,"475":1}}],["前三个策略可能需要相应权限才能生效",{"2":{"455":1}}],["前缀",{"2":{"368":1,"373":2,"374":1,"425":1}}],["前缀匹配",{"2":{"85":1,"420":1}}],["前置工作",{"0":{"241":1}}],["前者用于赋值而后者用于比较",{"2":{"173":1}}],["前言部分的阅读",{"2":{"489":1}}],["前言",{"0":{"157":1,"204":1,"214":1,"511":1},"1":{"158":1,"159":1,"160":1,"161":1,"162":1,"163":1,"164":1,"165":1,"166":1,"167":1,"168":1,"169":1,"170":1,"512":1,"513":1}}],["前请先判断是否符合预期",{"2":{"127":1}}],["前两个参数和",{"2":{"116":1}}],["函数的参数为",{"2":{"139":1}}],["函数进行注册",{"2":{"138":1}}],["函数也是可以使用的",{"2":{"138":1}}],["函数获取配置项的值",{"2":{"138":2}}],["函数注册配置项",{"2":{"138":1}}],["函数返回一个",{"2":{"135":1}}],["函数将数据再转换为",{"2":{"128":1}}],["函数将存储了数据的",{"2":{"128":1}}],["函数和",{"2":{"128":1}}],["函数传进来的第一个参数",{"2":{"118":1,"123":1}}],["函数接收的参数一致",{"2":{"116":1}}],["函数",{"2":{"114":1,"116":1,"119":1,"131":1}}],["召唤一只海豹",{"2":{"114":1,"117":2}}],["氪豹",{"2":{"114":1,"116":1,"117":2}}],["显示目前可用的快捷指令",{"2":{"709":1}}],["显示一串这样的文本",{"2":{"686":1}}],["显示帮助",{"2":{"660":1,"670":1,"765":1}}],["显示帮助信息",{"2":{"651":1}}],["显示指定词条的帮助文档",{"2":{"647":1}}],["显示随机词条",{"2":{"642":1,"722":1}}],["显示该",{"2":{"642":1,"722":1}}],["显示第",{"2":{"642":1}}],["显示当前房规",{"0":{"618":1}}],["显示当前大类下未修改过的文案",{"2":{"364":1}}],["显示所有权限",{"2":{"453":1}}],["显示悬浮窗",{"2":{"448":1}}],["显示全部文案",{"2":{"364":1}}],["显示",{"2":{"114":1,"117":1,"134":1}}],["写骰点式",{"2":{"756":1}}],["写调整值",{"2":{"756":1}}],["写为类似",{"2":{"498":1}}],["写的",{"2":{"224":1}}],["写在前面",{"2":{"185":1}}],["写入如下内容",{"2":{"158":1}}],["写好自定义指令的实现逻辑之后",{"2":{"113":1}}],["写法",{"2":{"83":2}}],["脚本添加第三方扩展",{"2":{"625":1}}],["脚本的名字",{"2":{"159":1}}],["脚本的编写的前置知识",{"2":{"157":1}}],["脚本引擎所提供的环境",{"2":{"158":1}}],["脚本不能替换内置指令和内置扩展",{"2":{"112":1}}],["脚本文件只会注册一个扩展",{"2":{"112":1}}],["脚本文件中注册多个扩展",{"2":{"112":1}}],["脚本和扩展",{"2":{"112":1}}],["脚本中创建扩展的方式如下",{"2":{"112":1}}],["命中时进行相应处理的能力",{"2":{"352":1}}],["命中的字符串也将额外存入变量",{"2":{"73":1}}],["命运骰",{"0":{"634":1},"2":{"178":1}}],["命名角色卡",{"2":{"747":1}}],["命名的最新构建",{"2":{"538":1}}],["命名的正式版",{"2":{"538":1}}],["命名",{"2":{"114":1,"117":2}}],["命令中的",{"2":{"498":1}}],["命令来抽取它们",{"2":{"386":1}}],["命令来随机抽取其中的内容发送",{"2":{"383":1}}],["命令提示符默认使用",{"2":{"292":1}}],["命令提示符本身集成了",{"2":{"292":1}}],["命令提示符",{"0":{"292":1},"2":{"283":1,"290":1,"292":1,"302":1,"309":1,"313":1}}],["命令行社区经常希望加入的新功能",{"2":{"309":1}}],["命令行行首会有",{"2":{"290":1}}],["命令行是",{"2":{"290":1}}],["命令行与",{"2":{"283":1,"290":1,"292":1,"313":1}}],["命令行",{"0":{"290":1},"2":{"283":1,"291":1,"292":1,"302":2,"313":1}}],["命令行界面即基于",{"2":{"291":1}}],["命令行界面",{"0":{"291":1},"2":{"274":1,"302":1}}],["命令切换至",{"2":{"262":1}}],["命令为其赋予权限",{"2":{"262":1}}],["命令为",{"2":{"115":1,"116":2,"117":2,"134":1}}],["命令的帮助信息是在使用",{"2":{"114":1}}],["命令的帮助信息",{"2":{"114":1}}],["命令",{"2":{"112":1,"114":1,"140":1,"152":1,"262":1,"457":1,"624":1}}],["平时推荐关闭这个选项",{"2":{"577":1}}],["平台的昵称",{"2":{"640":1}}],["平台的机制使没有公开发布的应用无法加入被指定的单个工作区之外的地方",{"2":{"530":1}}],["平台上",{"2":{"638":1}}],["平台上搭建骰子",{"2":{"549":1}}],["平台运作了",{"2":{"533":1}}],["平台选择何种方式取决于你自己的选择",{"2":{"512":1}}],["平台搭建这样的非官方机器人取决于你的慎重考虑",{"2":{"512":1}}],["平台机器人的说明",{"0":{"512":1}}],["平台为例",{"2":{"478":1}}],["平台做出适当的修正",{"2":{"471":1}}],["平台本身的问题",{"2":{"471":1}}],["平台接入海豹核心需要了解的特定内容",{"2":{"463":1,"467":1,"472":1,"489":1,"510":1,"528":1,"534":1}}],["平台有效",{"2":{"346":1}}],["平台下",{"2":{"292":1}}],["平台下的",{"2":{"199":1}}],["平台下的任务管理器",{"2":{"199":1}}],["平台发生的",{"2":{"227":1}}],["平台时使用的连接方式",{"2":{"227":1}}],["平台",{"2":{"109":1,"236":1,"341":1,"530":1,"623":3,"681":1,"689":1}}],["平均值高于阈值",{"2":{"72":1}}],["群快捷指令",{"2":{"709":2}}],["群控",{"2":{"499":1}}],["群组",{"2":{"622":1}}],["群组状态等信息",{"2":{"431":1}}],["群组中最后一次发送消息的时间",{"2":{"350":1}}],["群的",{"2":{"427":1}}],["群的列表",{"2":{"323":1}}],["群配置白名单",{"2":{"358":1}}],["群豁免检查",{"0":{"358":1}}],["群",{"2":{"355":1,"374":1,"427":1,"503":1,"522":1,"580":2}}],["群列表",{"2":{"238":1,"580":1}}],["群里可以正常使用",{"2":{"223":1}}],["群员",{"2":{"191":1,"232":1}}],["群员和管理也很希望能帮你解决问题",{"2":{"190":1}}],["群友来帮我看看吗",{"2":{"190":1}}],["群精华消息和历史聊天记录中",{"2":{"219":1}}],["群精华消息",{"2":{"189":1}}],["群公告",{"2":{"189":1}}],["群名",{"2":{"172":1}}],["群内回复",{"2":{"422":1}}],["群内",{"2":{"188":1,"368":1,"373":1}}],["群内所有人共享",{"2":{"172":1}}],["群内安价收集",{"0":{"130":1},"2":{"130":1}}],["群变量",{"2":{"172":1}}],["群号",{"2":{"109":1,"602":1,"638":1,"706":2,"730":2}}],["群聊",{"2":{"109":1,"690":1}}],["群主",{"2":{"105":1,"120":2}}],["群主的人品为",{"2":{"97":1}}],["群主女装",{"2":{"78":2}}],["ob",{"0":{"731":1},"2":{"731":4}}],["object",{"2":{"129":1}}],["o",{"2":{"696":1}}],["oracle",{"2":{"684":1}}],["over",{"2":{"665":1}}],["overflow",{"2":{"207":1}}],["october",{"2":{"646":1}}],["oauth",{"2":{"532":4}}],["oauth2",{"2":{"466":1}}],["our",{"2":{"480":1}}],["output",{"2":{"460":1,"479":1}}],["op",{"2":{"486":1}}],["oppo",{"0":{"451":1}}],["openshamrock",{"2":{"254":1}}],["open",{"2":{"186":1,"200":1,"242":1}}],["optval",{"2":{"139":2}}],["optstr",{"2":{"130":8}}],["optional",{"2":{"479":1}}],["option",{"2":{"61":1,"94":2,"130":7,"131":3,"138":4}}],["options",{"2":{"61":3,"64":5,"130":13,"131":3,"139":1}}],["omitempty",{"2":{"138":3}}],["on|off",{"2":{"625":1,"656":2,"707":1}}],["onebot",{"2":{"254":3,"285":3,"491":3,"516":3,"519":1,"539":2}}],["onebot11反向ws",{"2":{"265":1,"515":2,"521":1}}],["onebot11正向ws",{"2":{"260":1,"515":2,"521":1}}],["onebot11",{"2":{"242":1,"515":2,"518":1,"524":1}}],["on",{"0":{"198":1},"2":{"340":2,"481":1,"569":1,"625":2,"681":1,"691":1,"727":2,"746":3}}],["onnotcommandreceived",{"2":{"137":2}}],["onlinetotaltime",{"2":{"108":1}}],["oick",{"2":{"135":1}}],["ok",{"2":{"135":2,"686":1}}],["off",{"2":{"340":2,"345":1,"354":2,"569":6,"624":1,"625":2,"727":2,"736":1,"746":3}}],["of",{"0":{"740":1},"2":{"129":1,"142":2,"584":1,"740":1}}],["owner",{"2":{"121":1}}],["懒",{"2":{"105":1}}],["太长",{"2":{"105":1}}],["代价是无法使用查询指令",{"2":{"696":1}}],["代价是损失从备份时间点到当前时间的数据",{"2":{"459":1}}],["代骰",{"0":{"593":1,"599":1,"602":1,"611":1,"666":1,"668":1,"671":1,"673":1,"675":1,"677":1,"679":1},"2":{"593":1,"599":1,"600":1,"602":1,"611":1,"639":1}}],["代骰附加文本",{"2":{"105":1}}],["代理组",{"2":{"686":1}}],["代理服务",{"2":{"686":1}}],["代理访问的途径",{"2":{"465":1,"536":1}}],["代理模式",{"2":{"465":1,"536":1}}],["代指你骰子的qq",{"2":{"430":1}}],["代表该对接方式为实验性的",{"2":{"515":1}}],["代表位于文档根目录的帮助文档位置",{"2":{"396":1}}],["代表可以在公网中用你的手机和电脑访问",{"2":{"347":1}}],["代表可用",{"2":{"136":2}}],["代码都遵守着相应的格式规范",{"2":{"224":1}}],["代码仓库上提交",{"0":{"192":1,"233":1}}],["代替目标",{"2":{"746":1}}],["代替检定",{"2":{"746":1}}],["代替他人检定",{"0":{"555":1}}],["代替已经停止开发的",{"2":{"254":1}}],["代替",{"2":{"59":1,"172":1,"254":1}}],["信任信息",{"2":{"127":1}}],["信任列表",{"2":{"127":1,"623":1}}],["信任用户",{"2":{"127":1,"623":1}}],["信任用户和拉黑用户存在同一个列表中",{"2":{"127":1}}],["信任用户名单",{"0":{"124":1}}],["信任的时间",{"2":{"125":1}}],["信任的发生地点",{"2":{"125":1}}],["信任原因",{"2":{"125":1}}],["信任等级",{"2":{"125":1}}],["信任名单中",{"2":{"126":1}}],["信任名单中的信息",{"0":{"126":1}}],["信任名单列表",{"0":{"125":1}}],["信任名单操作",{"0":{"122":1,"127":1},"1":{"123":1,"124":1,"125":1,"126":1,"127":1}}],["信任名单可以通过",{"2":{"120":1}}],["信任",{"2":{"105":1,"127":2}}],["信息查询",{"0":{"652":1}}],["信息",{"2":{"56":1,"120":1,"441":1,"462":1,"641":1}}],["权限授予若干位维护人员",{"2":{"622":1}}],["权限列表",{"2":{"622":2}}],["权限的交互平台做以下操作",{"2":{"730":1}}],["权限的用户将看到消息内容和发送者的",{"2":{"706":1}}],["权限的用户使用",{"2":{"622":1,"623":1}}],["权限的门槛很高",{"2":{"254":1}}],["权限不足",{"2":{"466":1,"471":1,"475":1}}],["权限管理",{"2":{"450":1,"453":1}}],["权限问题",{"2":{"262":1}}],["权限",{"0":{"256":1,"487":1},"1":{"488":1},"2":{"120":1,"254":1,"256":3,"332":1,"453":1,"466":1,"486":1,"491":1,"541":1,"543":1,"622":3}}],["权限值",{"2":{"120":1}}],["权限识别样例",{"2":{"121":1}}],["权限识别",{"0":{"120":1,"121":1},"1":{"121":1}}],["权限等级",{"2":{"105":1}}],["权重影响的是抽出的顺序",{"2":{"54":1}}],["权重与不放回抽取",{"0":{"54":1}}],["权重",{"0":{"53":1},"1":{"54":1}}],["接入",{"2":{"513":1}}],["接入点数据",{"2":{"105":1}}],["接下来请根据你所需要对接平台的接入手册",{"2":{"540":1}}],["接下来这个",{"2":{"460":1}}],["接下来将依次介绍它们",{"2":{"362":1}}],["接着点击登录",{"2":{"241":1}}],["接收的消息",{"2":{"238":1}}],["接受两种类型的定时任务表达式",{"2":{"141":1}}],["接上面的代码",{"2":{"114":1}}],["接口返回的数据将和牌组本身配置的",{"2":{"64":1}}],["接口应当返回一个",{"2":{"63":1}}],["接口要求",{"0":{"63":1}}],["接口",{"2":{"62":1}}],["成长值可以是负数",{"2":{"615":1}}],["成为开发者后你即可建立一个应用并获取",{"2":{"469":1}}],["成功时失去理智",{"2":{"746":1,"751":1}}],["成功时理智损失",{"2":{"608":1,"610":1}}],["成功度",{"2":{"715":1}}],["成功1",{"2":{"711":1}}],["成功11",{"2":{"635":1}}],["成功0",{"2":{"711":1}}],["成功和失败可分别简写为",{"2":{"678":1}}],["成功|失败",{"2":{"678":1}}],["成功4",{"2":{"635":1}}],["成功2",{"2":{"635":1}}],["成功数加",{"2":{"635":1}}],["成功线默认为",{"2":{"635":1}}],["成功线",{"2":{"635":1,"711":2}}],["成功率",{"2":{"619":3}}],["成功率为$",{"2":{"134":1}}],["成功成长值",{"2":{"615":2}}],["成功连接后即可使用",{"2":{"260":1,"518":1,"524":1}}],["成功注入后",{"2":{"258":1}}],["成功滑条后",{"2":{"242":1}}],["成功",{"2":{"136":2,"371":2,"596":1,"599":1,"600":1,"602":1}}],["成功判定",{"2":{"136":1}}],["成功获取后进行合并并去重",{"2":{"64":1}}],["成员",{"2":{"105":1,"106":1,"107":1,"108":1,"109":1,"110":1}}],["煤气灯",{"2":{"102":2}}],["村规的",{"2":{"101":1}}],["输入以下命令",{"2":{"539":2}}],["输入机器人的账号名",{"2":{"535":1}}],["输入机器人的显示名",{"2":{"535":1}}],["输入指令",{"2":{"535":1}}],["输入账号",{"2":{"521":1}}],["输入正确的账号密码",{"2":{"244":1}}],["输入",{"2":{"98":2,"256":2,"309":1,"521":1,"723":1}}],["输出游戏结果",{"2":{"84":1}}],["输出变量",{"2":{"78":1}}],["输出最后一个语句的结果",{"2":{"77":1}}],["输出文本",{"2":{"73":1}}],["触发快捷指令",{"2":{"709":1}}],["触发骰子的回应了",{"2":{"708":1}}],["触发该回复项",{"2":{"420":1}}],["触发机制多样",{"2":{"412":1,"724":1}}],["触发敏感词拦截",{"2":{"327":1}}],["触发某些自动规则时",{"2":{"327":1}}],["触发方式",{"2":{"320":1}}],["触发位置为群还是私聊",{"2":{"172":1}}],["触发的平台",{"2":{"172":1}}],["触发消息的文本",{"2":{"172":1}}],["触发者会收到",{"2":{"95":3}}],["触发条件",{"0":{"71":1},"1":{"72":1,"73":1,"74":1}}],["声明和注册扩展的代码部分已省略",{"2":{"94":1}}],["设备上",{"2":{"642":1}}],["设备请使用",{"2":{"538":1}}],["设备的命令行工具",{"2":{"262":1}}],["设备选",{"2":{"241":1}}],["设定临时属性",{"0":{"757":1},"2":{"757":1}}],["设定自己的先攻值",{"2":{"756":1}}],["设定先攻值",{"0":{"756":1}}],["设定默认值",{"2":{"711":1}}],["设定默认骰子面数",{"0":{"648":1},"2":{"746":1}}],["设定欢迎语",{"2":{"707":1}}],["设定个人专属默认骰子面数",{"2":{"648":1}}],["设定群内默认骰子面数",{"2":{"648":1}}],["设定游戏系统",{"0":{"648":1}}],["设定房规",{"0":{"620":1},"2":{"746":1}}],["设定计算表达式",{"0":{"591":1}}],["设定属性值",{"0":{"589":1}}],["设定",{"2":{"239":1,"513":1}}],["设定当前",{"2":{"94":1,"103":1}}],["设置自动名片",{"2":{"747":1}}],["设置和修改角色卡属性",{"2":{"747":1}}],["设置法术位",{"2":{"672":1}}],["设置指定属性",{"2":{"665":1}}],["设置群内骰子面数为",{"2":{"648":2}}],["设置群内骰子面数为100",{"2":{"626":1}}],["设置群内骰子面数为20",{"2":{"626":1}}],["设置群内骰子面数",{"2":{"626":1}}],["设置各个扩展及其指令的默认开启状态",{"2":{"625":1}}],["设置房规",{"0":{"617":1},"1":{"618":1,"619":1,"620":1},"2":{"739":1}}],["设置中",{"2":{"521":1}}],["设置回复项",{"0":{"418":1},"1":{"419":1,"420":1,"421":1,"422":1,"423":1}}],["设置白名单见",{"2":{"358":1}}],["设置为",{"2":{"334":1}}],["设置的比例",{"2":{"328":1}}],["设置的选项未生效",{"2":{"61":1}}],["设置选项",{"2":{"328":1}}],["设置",{"2":{"265":1,"397":1,"420":1,"450":2,"672":1}}],["设置好名字和帮助信息",{"2":{"114":1}}],["设置当前群组的默认查询分组",{"2":{"643":1}}],["设置当前",{"2":{"94":1}}],["结束并获取日志",{"2":{"746":1}}],["结束当前的回合",{"2":{"660":1}}],["结束进程",{"2":{"241":1}}],["结尾",{"2":{"535":1}}],["结尾的包",{"2":{"257":1}}],["结尾的",{"2":{"242":1}}],["结语",{"0":{"212":1,"234":1}}],["结构与收到消息的",{"2":{"94":1,"104":1}}],["结果为",{"2":{"596":1,"600":1,"669":1}}],["结果会在这些文本中",{"2":{"422":1}}],["结果有两行文案",{"2":{"363":1}}],["结果中调用变量",{"2":{"77":1}}],["结果",{"2":{"70":1,"371":6,"418":1}}],["规定的同义词等价",{"2":{"582":1}}],["规则骰点",{"0":{"711":1},"2":{"740":1}}],["规则支持",{"0":{"710":1},"1":{"711":1,"712":1,"713":1,"714":1,"715":1}}],["规则支持列表",{"0":{"572":1}}],["规则名",{"2":{"648":1,"734":1}}],["规则中对",{"2":{"632":1}}],["规则中",{"2":{"631":1}}],["规则中切换",{"2":{"626":1}}],["规则中默认使用的同义词",{"2":{"581":1}}],["规则书",{"2":{"619":1}}],["规则有适当了解",{"2":{"584":1,"657":1}}],["规则来说",{"2":{"147":1}}],["规则的索引",{"2":{"738":1}}],["规则的一系列资料",{"2":{"642":1}}],["规则的同义词可在骰子启动后",{"2":{"583":1}}],["规则的同义词",{"2":{"583":1}}],["规则的自动群名片格式",{"2":{"146":1}}],["规则的属性同义词",{"2":{"146":1}}],["规则的二级属性计算公式",{"2":{"146":1}}],["规则的角色卡属性展示顺序",{"2":{"146":1}}],["规则的角色卡",{"2":{"146":1}}],["规则自己的技能默认值",{"2":{"146":1}}],["规则提供以下功能",{"2":{"146":1}}],["规则模板",{"2":{"648":1}}],["规则模板能为",{"2":{"146":1}}],["规则模板是海豹核心中几种功能的整合发展",{"2":{"146":1}}],["规则模板是什么",{"0":{"146":1}}],["规则详细内容",{"2":{"143":1}}],["规则相关",{"0":{"103":1}}],["规则",{"0":{"136":1,"143":1},"1":{"144":1,"145":1,"146":1,"147":1},"2":{"94":1,"136":1,"143":3,"147":2,"619":1,"746":2}}],["规范",{"2":{"69":1}}],["否则计算最终骰点",{"2":{"636":1}}],["否则可能造成不可逆的数据损坏",{"2":{"573":1}}],["否则会发不出消息",{"2":{"521":1}}],["否则将导致挤占下线",{"2":{"513":1}}],["否则",{"2":{"417":1}}],["否则未保存的修改将丢失",{"2":{"363":1}}],["否则只有邀请者",{"2":{"340":1}}],["否则返回",{"2":{"94":1,"110":1}}],["否则海豹将无法正确解析",{"2":{"61":1}}],["之类的工具定时清理过高的内存占用",{"2":{"521":1}}],["之类的问题",{"2":{"514":1}}],["之前",{"2":{"464":1,"473":1,"530":1,"535":1}}],["之前的",{"2":{"341":3,"513":3}}],["之前的内置客户端",{"2":{"341":1,"513":1}}],["之间的",{"2":{"480":1}}],["之间",{"2":{"165":1}}],["之外",{"2":{"165":1,"625":1}}],["之后",{"2":{"718":1}}],["之后会自动填入代理",{"2":{"686":1}}],["之后同上",{"2":{"458":1}}],["之后双击那个文件夹",{"2":{"196":1}}],["之后用",{"2":{"134":1}}],["之后的仓库上执行",{"2":{"10":1}}],["之所以会有这么奇怪的说法是因为",{"2":{"94":2}}],["转译并返回",{"2":{"94":1}}],["经常掉线",{"0":{"438":1}}],["经常备份是避免数据损失的最佳手段",{"2":{"315":1}}],["经常会需要用到辅助的牌组",{"2":{"57":1}}],["经过一层",{"2":{"94":1}}],["似乎是从",{"2":{"110":1}}],["似乎目前没有",{"2":{"109":1}}],["似乎也只实现了",{"2":{"94":1}}],["似乎只实现了",{"2":{"94":1}}],["私骰",{"2":{"718":1}}],["私骰模式",{"0":{"339":1},"2":{"530":1}}],["私聊也被认为是一个特殊的群聊",{"2":{"641":1}}],["私聊回复",{"2":{"422":1}}],["私聊不回复的问题是在",{"2":{"227":1}}],["私聊中除了骰主",{"2":{"120":1}}],["私聊发送则在私聊回复",{"2":{"116":1,"117":1}}],["私聊",{"2":{"109":1,"368":1,"373":2,"427":1,"499":1}}],["私聊收到就私聊发送",{"2":{"94":1}}],["私信",{"2":{"94":1,"535":1}}],["私服",{"2":{"15":1}}],["顾名思义就是开放了源代码在公共平台的程序",{"2":{"186":1,"200":1}}],["顾名思义",{"2":{"94":1,"272":1,"307":1,"717":1}}],["类目下",{"2":{"426":1}}],["类型文件",{"2":{"152":1}}],["类型",{"2":{"118":1,"123":1}}],["类型配置项的值",{"2":{"94":6}}],["类型的配置项",{"2":{"94":6}}],["类型的触发者的该变量的值",{"2":{"94":2}}],["类型的",{"2":{"94":4}}],["类似前文删除代理",{"2":{"686":1}}],["类似地",{"2":{"582":1}}],["类似每日新闻",{"2":{"142":1}}],["类似暗骰",{"2":{"94":1}}],["类似",{"2":{"64":1,"516":1,"653":1}}],["参考说明",{"2":{"746":1}}],["参考",{"2":{"539":1,"747":1}}],["参考以下命令运行镜像",{"2":{"539":1}}],["参考下面图片中编辑使用范围与人员",{"2":{"504":1}}],["参考本节时请注意识别",{"2":{"94":1}}],["参见",{"2":{"270":1,"276":1,"288":1,"297":1,"308":1}}],["参阅",{"2":{"239":1,"739":1,"740":1,"741":1,"742":1,"743":1,"744":1}}],["参数的写法参考角色数据录入的",{"2":{"757":1}}],["参数与参数之间添加空格能保证海豹骰识别指令时准确无误",{"2":{"722":1}}],["参数提供指令所需要的信息",{"2":{"722":1}}],["参数说明同上",{"2":{"124":1}}],["参数3",{"2":{"119":1}}],["参数2",{"2":{"119":2}}],["参数1",{"2":{"119":2}}],["参数",{"0":{"141":1},"2":{"114":1,"239":1,"757":1}}],["参数为扩展对象",{"2":{"94":6}}],["参数为扩展对象和配置项的",{"2":{"94":7}}],["参数为",{"2":{"94":1}}],["参与项目",{"0":{"5":1},"1":{"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1}}],["捆绑大量流氓软件的安装包",{"2":{"93":1}}],["记得考虑这点",{"2":{"423":1}}],["记得随时保存自己的修改",{"2":{"418":1}}],["记得检查是否在输入法的中文输入状态",{"2":{"31":1}}],["记住这个端口号",{"2":{"259":1}}],["记住你所做的",{"2":{"221":1}}],["记住你做了什么",{"0":{"221":1}}],["记为",{"2":{"178":1}}],["记录日志",{"0":{"727":1}}],["记录",{"2":{"129":2}}],["记事本",{"2":{"93":1}}],["能在手机上搭建吗",{"0":{"697":1}}],["能远程直接访问",{"0":{"684":1}}],["能被任何",{"2":{"549":1}}],["能想到这个系列就最好了",{"2":{"214":1}}],["能够高效学习上手相关知识",{"2":{"203":1}}],["能够完成什么功能",{"2":{"20":1}}],["能更清晰地知道如何提问",{"2":{"193":1}}],["能让你更有效率地解决在部署",{"2":{"192":1,"212":1,"234":1}}],["能为你带来更好的编写体验",{"2":{"93":1}}],["扩展规则",{"0":{"734":1}}],["扩展提供的指令",{"2":{"700":1}}],["扩展关闭时",{"2":{"681":1}}],["扩展被关闭了",{"2":{"681":1}}],["扩展名",{"2":{"625":2}}],["扩展管理",{"0":{"625":1}}],["扩展指令可以被关闭",{"2":{"621":1}}],["扩展的文案介绍",{"2":{"367":1}}],["扩展的名称",{"2":{"159":1}}],["扩展功能",{"2":{"352":1,"385":1,"395":1,"404":1,"413":1,"642":1,"730":1}}],["扩展依赖",{"0":{"163":1},"1":{"164":1,"165":1,"166":1}}],["扩展需要在开头以固定格式注释的形式留下信息",{"2":{"159":1}}],["扩展头信息",{"2":{"152":1}}],["扩展文件",{"2":{"148":1}}],["扩展操作黑名单",{"2":{"127":1}}],["扩展机制可以看做是海豹的",{"2":{"112":1}}],["扩展机制",{"2":{"112":1}}],["扩展",{"2":{"92":1,"112":2,"135":3,"164":1,"386":1,"404":1,"625":1,"648":2,"706":1,"707":1,"708":1,"709":1,"721":1}}],["先攻",{"2":{"746":1}}],["先攻表达式",{"2":{"660":1}}],["先攻列表",{"0":{"660":1},"2":{"746":1}}],["先攻值支持以下三种写法",{"2":{"756":1}}],["先攻值部分支持以下四种写法",{"2":{"659":1}}],["先攻值",{"2":{"659":2,"756":1}}],["先攻设置",{"0":{"659":1}}],["先将扩展模块创建出来",{"2":{"117":1,"129":1,"134":1}}],["先了解海豹语",{"2":{"92":1}}],["先阅读本章的对应小节",{"2":{"91":1}}],["协议连接",{"2":{"519":1,"525":1}}],["协议连接到了我在腾讯云的服务器上",{"2":{"224":1}}],["协议发信",{"2":{"336":1}}],["协议的",{"2":{"285":1,"512":1,"516":1}}],["协议相关的开源项目",{"2":{"285":1,"516":1}}],["协议进行适配",{"2":{"254":1}}],["协议所适配的目标",{"2":{"253":1}}],["协议版本没对应",{"2":{"246":1}}],["协议版本和",{"2":{"246":1}}],["协议可用",{"2":{"241":1}}],["协议和",{"2":{"241":1}}],["协议上实现",{"2":{"96":1}}],["协议",{"0":{"253":1,"527":1},"2":{"90":1,"94":2,"253":1,"254":1,"686":2,"718":1,"720":1,"721":1,"722":2}}],["协议开源",{"2":{"4":1}}],["匿名>",{"2":{"90":1}}],["词库同时生效",{"2":{"356":1}}],["词库列表",{"2":{"356":1}}],["词库名称",{"2":{"90":1}}],["词表",{"2":{"90":1}}],["词条名",{"2":{"647":1}}],["词条查询指令",{"0":{"642":1},"1":{"643":1,"644":1,"645":1,"646":1}}],["词条查询的格式",{"2":{"68":1}}],["词条内容",{"2":{"68":1}}],["词条同义词",{"2":{"68":1}}],["词条c",{"2":{"66":2}}],["词条b",{"2":{"66":3}}],["词条",{"2":{"66":8,"68":2,"399":1}}],["词条a",{"2":{"66":4,"394":2}}],["元信息",{"2":{"90":1}}],["元信息表",{"2":{"48":1}}],["危险",{"2":{"236":2,"237":1,"253":1,"254":2,"355":1,"377":1,"414":1,"479":2,"512":1,"514":1,"718":1}}],["危险级词表",{"2":{"90":1}}],["危险级词汇",{"2":{"89":1,"90":2}}],["危害国家安全",{"2":{"15":1}}],["门前有两棵树",{"2":{"87":1}}],["随时保存修改",{"2":{"418":1}}],["随着终端关闭",{"2":{"541":1}}],["随着学习的不断深入",{"2":{"209":1}}],["随着大语言模型的兴起",{"2":{"207":1}}],["随",{"2":{"172":1}}],["随机打乱提供的元素",{"2":{"764":1}}],["随机排列顺序",{"0":{"764":1}}],["随机名字",{"0":{"762":1}}],["随机",{"0":{"763":1},"2":{"746":1}}],["随机延迟间隔",{"2":{"689":1}}],["随机生成带属性名的结果",{"2":{"658":1}}],["随机生成指定组数的待分配属性",{"2":{"658":1}}],["随机生成指定数量的调查员属性",{"2":{"616":1}}],["随机指令",{"2":{"569":1}}],["随机数",{"2":{"315":1,"701":1}}],["随机骰",{"2":{"178":1}}],["随机弃牌",{"2":{"145":1}}],["随机二次元图片",{"2":{"135":1}}],["随机猫猫图片",{"2":{"135":1}}],["随机抽取一个模组",{"2":{"765":1}}],["随机抽取",{"2":{"130":2,"363":1,"422":1}}],["随机看图",{"0":{"86":1}}],["随便写",{"2":{"123":2}}],["随后使用登录了目标账号的手机",{"2":{"514":1}}],["随后",{"2":{"457":1,"493":2,"539":2,"686":1}}],["随后弹出获取到的新数据与当前插件数据的对比",{"2":{"406":1}}],["随后弹出获取到的新牌堆与当前牌堆的对比",{"2":{"388":1}}],["随后会弹出确认框",{"2":{"363":1}}],["随后在你的手机中出现指纹调试弹框",{"2":{"262":1}}],["随后在",{"2":{"262":1,"265":1}}],["随后将",{"2":{"262":1}}],["随后再执行",{"2":{"259":1}}],["随后再打开",{"2":{"258":1}}],["随后找到模拟器供",{"2":{"259":1}}],["随后你可以在右下角看到重启按钮",{"2":{"257":1}}],["随后你需要再次重启模拟器",{"2":{"256":1}}],["随后向消息发送者发送回应",{"2":{"116":1}}],["随后作出响应",{"2":{"115":1}}],["随后按自定义回复的格式进行换行",{"2":{"82":1}}],["型文本",{"0":{"85":1}}],["同义词表",{"0":{"583":1}}],["同一概念的不同常用称呼等价",{"2":{"582":1}}],["同一个目录",{"2":{"460":1}}],["同一个目录内",{"2":{"224":1}}],["同一种形式在",{"2":{"47":1}}],["同样是迁移海豹的",{"2":{"577":1}}],["同样可以部署在",{"2":{"538":1}}],["同样地",{"2":{"206":1,"446":1}}],["同样的",{"2":{"138":1,"278":1}}],["同时还包括技能检定",{"2":{"717":1}}],["同时使用",{"2":{"709":1}}],["同时使用前缀和后缀匹配",{"0":{"85":1}}],["同时也包括操弄禁忌知识的人类势力",{"2":{"739":1}}],["同时也包括今日人品",{"2":{"700":1}}],["同时也是作为游戏核心的秘密组织的名字",{"2":{"739":1}}],["同时也做了很强的兼容性处理",{"2":{"570":1}}],["同时是牌堆名与牌组名",{"2":{"652":1}}],["同时会计算",{"2":{"616":1}}],["同时对于自定义回复功能进行了强化",{"2":{"551":1}}],["同时对程序进行修改",{"2":{"193":1,"202":1}}],["同时秉持",{"2":{"549":1}}],["同时更新前请做好备份",{"2":{"542":1}}],["同时强烈建议正在使用该方案的用户迁移",{"2":{"513":1}}],["同时在功能上非常受限",{"2":{"512":1}}],["同时在程序中修复它",{"2":{"193":1,"202":1}}],["同时部署海豹与",{"0":{"490":1},"1":{"491":1,"492":1,"493":1,"494":1,"495":1}}],["同时开启两个海豹实例",{"0":{"439":1},"1":{"440":1,"441":1}}],["同时注意",{"2":{"363":1}}],["同时清空用户该等级的计数",{"2":{"355":1}}],["同时一般包含时间信息以方便定位对应的事件",{"2":{"299":1}}],["同时你应当在下方看到一条类似于",{"2":{"242":1}}],["同时",{"2":{"191":1,"211":1,"232":1,"493":1,"499":1,"505":1,"512":1,"625":1}}],["同上",{"2":{"94":5,"172":1,"649":1,"672":1}}],["我收到了",{"2":{"706":1}}],["我机器上启动非常慢",{"0":{"696":1}}],["我该选择从哪里获取",{"2":{"538":1}}],["我该不会需要编写两条相同的回复项吧",{"2":{"419":1}}],["我希望在我的骰子进群或者被踢出时通知我",{"0":{"690":1}}],["我希望编写有一定逻辑的自定义回复",{"2":{"425":1}}],["我希望",{"2":{"419":1}}],["我希望让骰子能回复用户发送的早安",{"2":{"412":1}}],["我希望骰子能有多套回复词",{"2":{"381":1}}],["我希望能根据骰点结果显示不同的文案",{"2":{"381":1}}],["我希望写一个插件",{"2":{"223":1}}],["我想控制只有私聊才触发回复",{"2":{"425":1}}],["我想给我的小伙伴分享我的文案",{"2":{"365":1}}],["我想使用的",{"0":{"155":1}}],["我不想自己一条条修改文案",{"2":{"365":1}}],["我不希望我的骰子被用来跑粉红团",{"2":{"352":1}}],["我不会",{"0":{"170":1},"2":{"412":1}}],["我忘了",{"0":{"699":1},"2":{"347":1}}],["我是开发者",{"2":{"579":1}}],["我是骰主",{"2":{"579":1}}],["我是",{"0":{"698":1},"2":{"579":3}}],["我是一个示例",{"2":{"377":2}}],["我是通过分离部署连接的",{"2":{"227":1}}],["我是在哪里做了一些事情让我的骰子出现问题了",{"2":{"189":1,"217":1}}],["我使用的是",{"2":{"227":1}}],["我试过重启海豹",{"2":{"226":1}}],["我试过对我的海豹骰进行重启",{"2":{"190":1,"226":1}}],["我修改过的牌堆上传到海豹之后",{"2":{"225":1}}],["我修改的部分是这样的",{"2":{"224":1}}],["我发出指令但是骰子在私聊中没有回复我",{"2":{"225":1}}],["我直接把",{"2":{"224":1}}],["我怀疑是海豹的数据库文件",{"2":{"190":1}}],["我现在使用的是",{"2":{"190":1}}],["我在群里",{"2":{"224":1}}],["我在本地的",{"2":{"224":1}}],["我在使用",{"2":{"190":1}}],["我在什么时候做了这些事情让骰子出现问题了",{"2":{"189":1,"217":1}}],["我的骰子",{"2":{"720":1}}],["我的骰子有自己的人设",{"2":{"361":1}}],["我的骰子突然不响应指令了",{"2":{"223":1}}],["我的骰子怎么突然不回复了急急急",{"2":{"190":1}}],["我的朋友",{"2":{"137":1}}],["我怎么做才能去修复这个问题",{"2":{"189":1,"217":1}}],["我做了什么让我的骰子出现了问题",{"2":{"189":1,"217":1}}],["我能在项目中引用",{"0":{"154":1}}],["我连接不上主脑了",{"2":{"135":1}}],["我知道这里有更好的判断是否为数字的方法但是我不会",{"2":{"133":1}}],["我要怎么做",{"2":{"425":1}}],["我要",{"2":{"99":2}}],["我讲完了",{"2":{"87":1}}],["我赢了",{"2":{"84":1}}],["我们假设你的第一只海豹已经配置好了",{"2":{"693":1}}],["我们假定你熟悉",{"2":{"157":1}}],["我们假定你了解如何使用前端工具链",{"2":{"148":1}}],["我们假定你了解海豹变量机制和正则表达式",{"2":{"69":1}}],["我们假定你已对",{"2":{"584":1,"657":1}}],["我们假定你已经阅读了自定义回复编写的",{"2":{"69":1}}],["我们假定你已了解",{"2":{"65":1,"90":1}}],["我们认为",{"2":{"622":1}}],["我们认为这种扩展有益于减少编写者的负担",{"2":{"37":1}}],["我们决定不将列表放在手册中",{"2":{"583":1}}],["我们在选择同义词时遵循以下几条原则",{"2":{"582":1}}],["我们期待这样的指令实际只录入一条属性",{"2":{"582":1}}],["我们仍推荐适当使用空格",{"2":{"548":1}}],["我们无法得知具体的检测细节",{"2":{"512":1}}],["我们提供了通过",{"2":{"465":1,"536":1}}],["我们可以看到默认置入的",{"2":{"395":1}}],["我们可以看见有名为",{"2":{"386":1}}],["我们可以看见",{"2":{"364":1}}],["我们可以通过一定方式来隐藏这些项",{"2":{"57":1}}],["我们以",{"2":{"363":1}}],["我们第一个打开的程序通常就是",{"2":{"302":1}}],["我们日常使用的程序通常使用图形用户界面",{"2":{"302":1}}],["我们知道",{"2":{"272":1,"582":1}}],["我们不建议任何用户再使用此方式部署",{"2":{"513":1}}],["我们不对信息的及时性做任何保证",{"2":{"239":1}}],["我们不推荐任何用户再使用此方案连接",{"2":{"236":1}}],["我们不希望你就此放弃",{"2":{"204":1}}],["我们觉得",{"2":{"214":1}}],["我们很可能遇到用于解释新概念的描述中",{"2":{"209":1}}],["我们尽力提供了深度恰到好处的知识",{"2":{"206":1}}],["我们的第一反应往往是去搜索引擎寻求答案",{"2":{"206":1}}],["我们撰写了本篇文档",{"2":{"204":1}}],["我们也不希望你放弃自己思考的权利",{"2":{"204":1}}],["我们也非常建议你系统地学习它们",{"2":{"31":1}}],["我们也非常推荐你尝试",{"2":{"30":1}}],["我们非常建议你使用从官网获取的正式版海豹",{"2":{"538":1}}],["我们非常建议你先自行学习",{"2":{"537":1}}],["我们非常建议你在扩展功能的编写中",{"2":{"92":1}}],["我们非常能理解你以及问出这些问题的用户的心情",{"2":{"190":1}}],["我们没有资格教屏幕前的你如何做人",{"2":{"185":1,"214":1}}],["我们更推荐其他的分离部署方案",{"2":{"513":1}}],["我们更推荐使用",{"2":{"161":1}}],["我们更建议你使用",{"2":{"72":1}}],["我们已经写了一个比较完善且有详细注释的示例",{"2":{"147":1}}],["我们已经了解了一些简单的回复编写",{"2":{"70":1}}],["我们使用",{"2":{"137":1}}],["我们需要获取作为海豹名字的参数",{"2":{"116":1}}],["我们通常需要在对应格式的文件进行编写",{"2":{"93":1}}],["我们建议",{"2":{"91":1}}],["我们建议你读完整段再点击链接跳转到对应内容",{"2":{"16":1}}],["我们平局了",{"2":{"84":1}}],["我们先给",{"2":{"79":1}}],["我们为牌堆提供了配置更新链接的机制",{"2":{"58":1}}],["我们希望你如果真的非常需要加入功能",{"2":{"193":1,"202":1}}],["我们希望在骰主仅安装了",{"2":{"164":1}}],["我们希望牌堆内容能够自动更新",{"2":{"62":1}}],["我们希望",{"2":{"48":1}}],["我们从编写一个最简单的牌堆开始",{"2":{"48":1}}],["我们将",{"2":{"582":1}}],["我们将简单介绍",{"2":{"31":1}}],["我们将本手册的所有内容按照从零开始到深入定制的操作顺序重新排列成了本节的内容",{"2":{"16":1}}],["我们推荐你较为完整地了解海豹核心提供的各种指令",{"2":{"747":1}}],["我们推荐你简单浏览一遍各种指令",{"2":{"20":1}}],["我们推荐如下",{"2":{"513":1}}],["我们推荐使用",{"2":{"513":1}}],["我们推荐直接回滚到备份文件的状态",{"2":{"459":1}}],["我们推荐采用这种方式",{"2":{"37":1}}],["我们推荐新用户按此顺序阅读手册",{"2":{"16":1}}],["我们会尽可能满足你的需求",{"2":{"18":1}}],["我们还是建议在",{"2":{"7":1}}],["我们都非常欢迎你参与海豹的开发",{"2":{"5":1}}],["啊",{"2":{"84":3}}],["实名注册后",{"2":{"501":1}}],["实质上以",{"2":{"512":1}}],["实质上就是在与海豹的",{"2":{"307":1}}],["实质上没有太大区别",{"2":{"81":1}}],["实例无法访问",{"2":{"262":1}}],["实体手机获取",{"2":{"254":1}}],["实现的",{"2":{"522":1}}],["实现某些特定的功能",{"2":{"287":1,"519":1}}],["实现劫持",{"2":{"254":1}}],["实现任意定时功能",{"2":{"142":1}}],["实践永远是学习的最佳方法",{"2":{"211":1}}],["实践学习",{"0":{"208":1},"1":{"209":1,"210":1,"211":1}}],["实在是无法自己解决",{"2":{"190":1}}],["实际上只有一条属性",{"2":{"582":1}}],["实际上没有差别",{"2":{"84":1}}],["实际内容为",{"2":{"373":1}}],["实际发送内容为前缀",{"2":{"368":1}}],["实际测试",{"2":{"183":1}}],["实际被唤起时的",{"2":{"141":1}}],["布尔类型",{"2":{"118":2,"173":1}}],["布尔值",{"2":{"33":1,"38":1,"45":1}}],["布",{"2":{"84":6}}],["剪刀",{"2":{"84":6}}],["石头剪刀布内在这里采用了第一种",{"2":{"84":1}}],["石头",{"2":{"84":6}}],["令人理智崩溃",{"2":{"584":1}}],["令",{"2":{"84":1}}],["选3个最大的",{"2":{"628":2}}],["选中后会多出一个",{"2":{"364":1}}],["选中的文件就是要找的文件",{"2":{"259":1}}],["选中",{"2":{"258":1}}],["选中牌堆文件和",{"2":{"56":1}}],["选择组成的最好结果或最坏结果",{"2":{"631":1}}],["选择账号类型",{"2":{"514":1}}],["选择任一方式",{"2":{"493":1}}],["选择编译文件输出位置",{"2":{"479":1}}],["选择版本",{"2":{"479":1}}],["选择要构建的版本进行编译",{"2":{"479":1}}],["选择你希望海豹拥有的权限",{"2":{"475":1}}],["选择右上角的设置图标",{"2":{"455":1}}],["选择右上角小齿轮",{"2":{"441":1}}],["选择海豹核心任务卡片右上角的三个点",{"2":{"451":1}}],["选择获取的插件文件",{"2":{"405":1}}],["选择分组和相应文档后",{"2":{"396":1}}],["选择本地修补",{"2":{"263":1}}],["选择已经下载的",{"2":{"263":1}}],["选择",{"2":{"242":1,"253":1,"258":1,"260":1,"262":1,"441":1,"449":1,"450":3,"451":1,"465":1,"470":1,"474":1,"482":1,"502":1,"527":1,"533":1,"536":1}}],["选择简易配置",{"2":{"241":1}}],["选择放到相较于上一条的后面",{"2":{"83":1}}],["选项来指定目录挂载",{"2":{"539":1}}],["选项卡中的",{"2":{"466":1}}],["选项中选中",{"2":{"466":1}}],["选项中",{"2":{"362":1}}],["选项",{"2":{"130":1,"256":1,"323":1,"352":1,"385":1,"395":1,"404":1,"413":1,"417":1,"447":1}}],["好友越多占用越高",{"2":{"522":1}}],["好友邀请",{"0":{"334":1},"2":{"333":1,"334":1}}],["好友列表",{"2":{"238":1}}],["好友",{"2":{"238":1}}],["好好规划一下换行符",{"2":{"82":1}}],["好耶",{"2":{"35":1}}],["就称本轮暴击",{"2":{"636":1}}],["就只剩下",{"2":{"569":1}}],["就能快速分享相关设置了",{"2":{"365":1}}],["就是指令参数",{"2":{"722":1}}],["就是指令名",{"2":{"721":1}}],["就是",{"2":{"721":1}}],["就是不用担心被风控",{"2":{"499":1}}],["就是修好的数据库了",{"2":{"460":1}}],["就是通过网络生成",{"2":{"307":1}}],["就是把程序的源代码放在公共平台",{"2":{"186":1,"200":1}}],["就像是地址",{"2":{"278":1}}],["就填上吧",{"2":{"238":1}}],["就新建了一个文件夹",{"2":{"196":1}}],["就无法正常运行",{"2":{"196":1}}],["就把这些问题完整地说出来",{"2":{"190":1}}],["就会更简单",{"2":{"187":1,"201":1}}],["就作为一个开源程序活动在大家的视线中",{"2":{"186":1,"200":1}}],["就可以完成指令配置",{"2":{"503":1}}],["就可以完成了",{"2":{"116":1}}],["就可以在海豹中使用了",{"2":{"170":1}}],["就不存在了",{"2":{"145":1}}],["就好比你在商场门口想要把随身物品存进暂存柜中",{"2":{"128":1}}],["就开始判断",{"2":{"84":1}}],["就最好多做几次实验",{"2":{"82":1}}],["就很足够了",{"2":{"20":1}}],["于是你又看了一眼日志是什么意思",{"2":{"210":1}}],["于是你在",{"2":{"210":1}}],["于是你搜索引擎中开始查找",{"2":{"209":1}}],["于是你访问了教程开头的链接",{"2":{"209":1}}],["于内部写入",{"2":{"82":1}}],["于言诺",{"2":{"3":1,"652":1}}],["赋值为",{"2":{"79":1}}],["构成",{"2":{"78":1}}],["构建",{"2":{"5":1}}],["第",{"2":{"704":1}}],["第三方方案的可用性也可能会随时间推移而存在变化",{"2":{"512":1}}],["第三方机器人隐私保护指引",{"2":{"504":1}}],["第三步",{"2":{"117":1,"449":1}}],["第三个参数是你要发送的文本",{"2":{"116":1}}],["第三个被",{"2":{"98":1}}],["第三段开始变形了",{"2":{"87":1}}],["第三档猫好感",{"2":{"81":1}}],["第六档猫好感",{"2":{"81":1}}],["第五档猫好感",{"2":{"81":1}}],["第四档猫好感",{"2":{"81":1}}],["第二轮中",{"2":{"636":1}}],["第二步",{"2":{"114":1,"449":1}}],["第二段",{"2":{"87":1}}],["第二档猫好感",{"2":{"81":1}}],["第二个",{"2":{"78":1}}],["第一个参数为",{"2":{"722":1}}],["第一个自定义回复",{"0":{"70":1}}],["第一次接入",{"2":{"474":1}}],["第一步",{"2":{"114":1}}],["第一段",{"2":{"87":1}}],["第一档猫好感",{"2":{"81":1}}],["既不等于",{"2":{"78":1}}],["赞美木落",{"2":{"78":2}}],["若伤害小于血量上限",{"2":{"665":1}}],["若伤害大于等于血量上限",{"2":{"665":1}}],["若临时生命不足以抵挡伤害",{"2":{"665":1}}],["若使用了奖励骰则不能获得技能成长标记",{"2":{"613":1}}],["若有新版本",{"2":{"543":1}}],["若",{"2":{"522":1}}],["若你遇见这种情况",{"2":{"474":1}}],["若你不确定具体应该添加哪些权限",{"2":{"466":1,"471":1,"475":1}}],["若你的文本需要换行",{"2":{"66":1}}],["若没有快捷指令则调用",{"2":{"374":1}}],["若设置为",{"2":{"334":1}}],["若重复",{"2":{"245":1}}],["若存在则返回",{"2":{"94":1}}],["若一切正常则为",{"2":{"94":1}}],["若为好友",{"2":{"94":1}}],["若通过则",{"2":{"79":1}}],["若想在结果中调用变量",{"2":{"77":1}}],["例",{"2":{"77":1}}],["例如伤害值",{"2":{"747":1}}],["例如必须使用指令使骰子退群",{"2":{"718":1}}],["例如当",{"2":{"681":1}}],["例如虚假生命",{"2":{"670":1}}],["例如两位调查员相互对抗时",{"2":{"603":1}}],["例如将",{"2":{"497":1}}],["例如修改骰子进群的文案",{"2":{"375":1}}],["例如标签页",{"2":{"309":1}}],["例如在分离部署",{"2":{"278":1}}],["例如允许自启动",{"2":{"264":1}}],["例如本手册中的",{"2":{"206":1}}],["例如希望加入一个新的接口",{"2":{"192":1,"233":1}}],["例如这个手册",{"2":{"189":1}}],["例如我们给上面的",{"2":{"166":1}}],["例如",{"2":{"62":1,"115":1,"116":2,"117":1,"118":1,"123":1,"141":2,"158":1,"164":1,"165":1,"167":1,"173":1,"174":1,"206":1,"209":1,"210":1,"225":1,"262":1,"265":1,"278":1,"292":1,"302":1,"337":1,"338":1,"349":1,"363":1,"376":1,"377":1,"480":1,"497":1,"503":1,"591":1,"721":2,"722":1,"735":1,"751":1}}],["括上",{"2":{"77":1}}],["括起来的部分会被作为代码执行",{"2":{"77":1}}],["^",{"2":{"73":1,"176":2}}],["^购买",{"2":{"73":1}}],["猫粮",{"2":{"73":1}}],["捕捉某人",{"2":{"134":2}}],["捕捉海豹",{"2":{"53":2,"54":2}}],["捕获组命中的字符串",{"2":{"73":1}}],["购买了猫粮",{"2":{"73":1}}],["购买了",{"2":{"73":1}}],["\\treturn",{"2":{"72":1}}],["\\tvb",{"2":{"72":1}}],["\\tva",{"2":{"72":1}}],["比较两个值时",{"2":{"173":1}}],["比较定义在",{"2":{"72":1}}],["比如说",{"2":{"594":1}}],["比如基于",{"2":{"512":1}}],["比如你的自定义回复文件",{"2":{"430":1}}],["比如禁言骰子触发了黑名单事件",{"2":{"328":1}}],["比如写一个自定义回复",{"2":{"209":1}}],["比如下文里写到的那些",{"2":{"205":1}}],["比如一些",{"2":{"170":1}}],["比如上面示例中的",{"2":{"165":1}}],["比如模板项目中就为你引入了常用的",{"2":{"154":1}}],["比如核心代码只有一行的",{"2":{"135":1}}],["比如",{"2":{"55":1,"135":1,"165":1,"187":1,"201":1,"686":1}}],["比如应该为",{"2":{"31":1}}],["模糊搜索指定牌组",{"2":{"652":1}}],["模糊匹配可能出现感觉能匹配上",{"2":{"72":1}}],["模糊匹配未命中",{"2":{"72":1}}],["模糊匹配将比较收到的消息与指定文本",{"2":{"72":1}}],["模糊匹配",{"0":{"72":1},"2":{"420":1}}],["模版",{"2":{"504":1}}],["模板的等价写法是",{"2":{"735":1}}],["模板",{"2":{"504":1,"665":1,"735":1}}],["模板项目仓库",{"2":{"149":2}}],["模板项目",{"2":{"148":1}}],["模块有三个前提",{"2":{"264":1}}],["模块生效",{"2":{"256":1}}],["模块",{"0":{"257":1},"2":{"256":1,"257":1}}],["模拟器中使用",{"2":{"254":1}}],["模式",{"2":{"427":1}}],["模式下",{"2":{"319":2}}],["模式2启用",{"2":{"26":1}}],["模式2",{"2":{"26":2}}],["模式1启用",{"2":{"26":1}}],["模式1",{"2":{"26":2}}],["返回值为空值",{"2":{"126":1}}],["返回值为一个数组",{"2":{"125":1}}],["返回值",{"2":{"119":1}}],["返回值是一个",{"2":{"118":1}}],["返回执行结果",{"2":{"115":1}}],["返回对象",{"2":{"110":1}}],["返回骰子",{"2":{"104":1}}],["返回",{"2":{"98":2,"99":2,"102":2,"110":1}}],["返回被解码的",{"2":{"94":1}}],["返回一个",{"2":{"94":1,"104":1}}],["返回一个空白的",{"2":{"94":1,"104":1}}],["返回一个数组",{"2":{"94":2}}],["返回内容可以嵌入",{"2":{"70":1}}],["返回结果示例如下",{"2":{"63":1}}],["码是酷",{"2":{"268":1}}],["码列表",{"2":{"70":1}}],["码文档见",{"2":{"70":1}}],["码",{"0":{"268":1,"375":1},"2":{"70":2,"73":2,"116":1,"361":1}}],["码和海豹码",{"2":{"55":1}}],["嵌入式系统",{"2":{"286":1}}],["嵌入脚本语言",{"0":{"76":1}}],["嵌入",{"2":{"70":1}}],["页码",{"2":{"642":1,"765":4}}],["页大小",{"2":{"642":1}}],["页添加指令",{"2":{"503":1}}],["页后",{"2":{"257":1}}],["页下载模块",{"2":{"257":1}}],["页面左上角的开关",{"2":{"413":1}}],["页面中",{"2":{"509":1}}],["页面中资料卡设置一栏中",{"2":{"508":1}}],["页面中点击",{"2":{"504":1}}],["页面中也提供了相应的帮助信息",{"2":{"356":1}}],["页面中的脚本语言被人所熟知",{"2":{"158":1}}],["页面",{"2":{"285":1,"287":1,"294":1,"315":1,"501":1,"503":1,"504":1,"505":1,"532":2,"690":1}}],["页面就像一个讨论区",{"2":{"206":1}}],["页",{"2":{"70":1,"405":1,"482":1,"504":1,"642":1}}],["栏选中",{"2":{"69":1}}],["该链接仍然可以使用",{"2":{"729":1}}],["该骰发出的指令和消息",{"2":{"688":1}}],["该骰发指令",{"2":{"688":1}}],["该解锁码仅能通过",{"2":{"622":1}}],["该方案也是前言中提到的非官方机器人",{"2":{"514":1}}],["该方案可用性由",{"2":{"512":1}}],["该方法会在未来逐渐失效",{"2":{"237":1}}],["该",{"2":{"512":1}}],["该审核需要将对应企业的银行卡号上传至腾讯审核",{"2":{"507":1}}],["该权限允许",{"2":{"488":1}}],["该指令用于设置与海豹连接的端口",{"2":{"486":1}}],["该回复项就会发送几条消息",{"2":{"422":1}}],["该版本",{"2":{"246":1}}],["该环境目前支持了",{"2":{"158":1}}],["该条件得到满足",{"2":{"73":1}}],["该规范与其他规范在个别扩展语法上存在细微差别",{"2":{"69":1}}],["该牌组的项",{"2":{"61":1}}],["该牌组是否可见",{"2":{"61":1}}],["并有诸多扩展写法",{"2":{"746":1}}],["并有相关配置",{"2":{"648":1}}],["并未提供公开的机器人接口",{"2":{"718":1}}],["并开始下一回合",{"2":{"660":1}}],["并自动开启",{"2":{"648":2}}],["并自动开启对应扩展",{"2":{"626":2}}],["并支持使用此指令进行查询",{"2":{"642":1}}],["并绑定到当前群聊",{"2":{"641":1}}],["并可以单独开关",{"2":{"625":1}}],["并给自己重新添加",{"2":{"622":1}}],["并给予其足够的运行权限",{"2":{"539":1}}],["并给出成功率",{"2":{"134":1}}],["并不受到",{"2":{"514":1}}],["并不受到官方支持",{"2":{"512":1}}],["并不会出现某些功能无法使用的差异",{"2":{"162":1}}],["并通过端口映射将容器端口暴露在宿主机",{"2":{"496":1}}],["并填入以下内容",{"2":{"491":1}}],["并删除海豹",{"2":{"474":1}}],["并删除无效数据",{"2":{"460":1}}],["并复制保存",{"2":{"531":1}}],["并复制",{"2":{"473":1}}],["并改名回",{"2":{"460":1}}],["并选择你想要海豹被部署到的工作区后点击",{"2":{"530":1}}],["并选择开发应用",{"2":{"469":1}}],["并选择",{"2":{"451":1}}],["并进入",{"2":{"450":1}}],["并点击锁图标",{"2":{"448":1,"449":1}}],["并以文本的方式存储或传输",{"2":{"301":1}}],["并重启",{"2":{"263":1}}],["并回车",{"2":{"262":1}}],["并对外开放",{"2":{"261":1}}],["并长按",{"2":{"258":1}}],["并实现接入",{"2":{"223":1}}],["并按照手册和自己的需求填写配置文件",{"2":{"517":1}}],["并按照下文中的指导",{"2":{"221":1}}],["并按照配置进行编译",{"2":{"152":1}}],["并附加开源许可协议的行为",{"2":{"200":1}}],["并且需要数据互相同步",{"2":{"748":1}}],["并且不在这个群聊使用",{"2":{"747":1}}],["并且开始记录",{"2":{"727":1}}],["并且能配合海豹核心独特的变量系统使用",{"2":{"724":1}}],["并且能配合海豹核心的变量系统与牌堆功能使用",{"2":{"412":1}}],["并且输入密码登录",{"2":{"685":1}}],["并且使用指定个数",{"2":{"598":1}}],["并且支持同时连接不同平台",{"2":{"571":1}}],["并且更新后需要重新安装登录框架",{"2":{"519":1,"522":1}}],["并且插件将会开启一个端口",{"2":{"481":1}}],["并且确保你的硬盘有适当的空闲空间",{"2":{"459":1}}],["并且很难处理",{"2":{"365":1}}],["并且已经有其他用户向开发者请求加入此功能",{"2":{"206":1}}],["并且存在",{"2":{"206":2}}],["并且你的海豹是公骰",{"2":{"199":1}}],["并且在未来很长一段时间里仍将是",{"2":{"205":1}}],["并且在",{"2":{"193":1,"202":1}}],["并且",{"2":{"192":1,"233":1,"272":1}}],["并且协助你排查问题",{"2":{"190":1}}],["并且自己解决了问题",{"2":{"189":1}}],["并且为表达式中不同元素给出解释",{"2":{"69":1}}],["并没有任何实际作用",{"2":{"158":1,"159":1}}],["并设置为自己的扩展的名字",{"2":{"149":1}}],["并把规则中的动作编写成指令",{"2":{"147":1}}],["并掷骰得出结果",{"2":{"130":1}}],["并储存在几个参数中",{"2":{"117":1}}],["并将其安装到你的设备上",{"2":{"446":1}}],["并将",{"2":{"115":1,"116":1,"117":1,"491":1}}],["并返回一个获取链接",{"2":{"727":1}}],["并返回",{"2":{"94":1}}],["并记录场次",{"2":{"84":1}}],["并在下述海豹连接",{"2":{"491":1}}],["并在",{"2":{"78":1}}],["并允许自启动",{"2":{"450":1}}],["并允许",{"2":{"37":1,"453":1}}],["节俭",{"2":{"653":1}}],["节",{"2":{"69":1,"711":1,"712":1}}],["节选",{"0":{"67":1}}],["原则上不允许机器人账号",{"2":{"549":1}}],["原理是利用",{"2":{"261":1}}],["原",{"2":{"237":1}}],["原本有图形化用户界面的",{"2":{"306":1}}],["原本的文件上传到海豹后",{"2":{"224":1}}],["原本是梨骰用于",{"2":{"68":1}}],["原因",{"2":{"119":1,"133":1,"373":1,"623":1,"627":1,"703":1}}],["原因见",{"2":{"12":1}}],["原始格式的",{"2":{"172":2}}],["原始指令内容",{"2":{"114":1}}],["原始信息",{"2":{"109":1}}],["测试50",{"2":{"570":1}}],["测试你提交的自测报告中",{"2":{"504":1}}],["测试词库",{"2":{"90":1}}],["测试",{"2":{"68":2,"136":2,"570":1}}],["因",{"2":{"339":1}}],["因拍摄角度而看不到部分信息",{"2":{"187":1,"201":1}}],["因为",{"2":{"693":1}}],["因为多个文本匹配度相近",{"2":{"644":1}}],["因为在实际交互中",{"2":{"283":1,"290":1,"292":1,"302":1,"313":1}}],["因为你从没在电脑上截屏过",{"2":{"210":1}}],["因为帮助文档中提供的信息都是服务于特定项目的",{"2":{"206":1}}],["因为摸到",{"2":{"145":1}}],["因为黑名单用户的消息会被过滤掉",{"2":{"120":1}}],["因为第一行的空换行也直接读取了",{"2":{"35":1}}],["因此每个骰子使用自定义回复的方法可能完全不同",{"2":{"724":1}}],["因此机器人只能使用第三方软件作为假用户接入",{"2":{"718":1}}],["因此没有列出最佳匹配条目的正文内容",{"2":{"644":1}}],["因此在跑团时",{"2":{"569":1}}],["因此在开始前",{"2":{"522":1}}],["因此在对应",{"2":{"82":1}}],["因此可能无法正常发送图片",{"2":{"496":1}}],["因此可以方便开发者与用户高效地共享信息",{"2":{"279":1}}],["因此本节中介绍的手段并不总是万无一失",{"2":{"446":1}}],["因此当你通过",{"2":{"307":1}}],["因此你的安卓手机版本必须超过安卓",{"2":{"261":1}}],["因此",{"2":{"196":1,"204":1,"205":2,"206":1,"207":2,"211":1,"221":1,"224":1,"225":2,"227":1,"230":1,"254":1,"292":1,"295":1,"491":1,"496":1,"512":1,"573":1,"582":1,"622":1,"718":1,"720":1}}],["因此移除时使用的是同一个函数",{"2":{"124":1}}],["因此作为前缀时可能导致将其识别为指令而非自定义回复的情况",{"2":{"73":1}}],["因此它常用来快速编写有大段文字的帮助文档",{"2":{"68":1}}],["列出房规",{"2":{"746":1}}],["列出角色卡",{"2":{"746":1}}],["列出角色卡所有属性",{"2":{"663":1}}],["列出数据",{"2":{"746":1}}],["列出该群的所有日志记录",{"2":{"730":1}}],["列出本群的所有日志记录",{"2":{"729":1}}],["列出高于指定数值的属性",{"2":{"663":1}}],["列出指定的属性数值",{"2":{"663":1}}],["列出当前装载的牌堆列表",{"2":{"652":1}}],["列出你所保存的所有角色",{"2":{"641":1}}],["列出所有可抽取的牌组列表",{"2":{"652":1}}],["列出所有内置或通过扩展加入的房规",{"2":{"619":1}}],["列出所有选项时",{"2":{"130":1}}],["列出可用房规",{"0":{"619":1}}],["列出属性",{"0":{"587":1,"663":1}}],["列出几个常用功能供参考",{"2":{"586":1}}],["列出的是海豹核心使用的",{"2":{"457":1}}],["列出目前所有选项",{"2":{"130":1}}],["列表",{"0":{"94":1,"332":1},"1":{"95":1,"96":1,"97":1,"98":1,"99":1,"100":1,"101":1,"102":1,"103":1,"104":1,"105":1,"106":1,"107":1,"108":1,"109":1,"110":1},"2":{"94":1,"129":1,"157":1,"330":1,"374":4}}],["列表中存在",{"2":{"206":2}}],["列表中",{"2":{"61":1}}],["列可以填写多个同义词",{"2":{"68":1}}],["豹子骰",{"2":{"578":1}}],["豹子骰之类",{"2":{"68":1}}],["豹语",{"2":{"92":1,"171":1}}],["豹语语法中",{"2":{"84":1}}],["豹骰",{"2":{"68":2,"578":1}}],["所述的",{"2":{"603":1}}],["所在的目录启动终端",{"2":{"539":2}}],["所提供的正式版也适合绝大多数用户使用",{"2":{"538":1}}],["所提到的指令是否都能正常工作",{"2":{"504":1}}],["所说",{"2":{"185":1}}],["所以还请各位选择自己信任的骰主",{"2":{"698":1}}],["所以不必担心暗骰会影响帐号安全",{"2":{"682":1}}],["所以不建议用户随意更新",{"2":{"519":1,"522":1}}],["所以需要将海豹数据也挂载到",{"2":{"491":1}}],["所以建议在骰子使用的低峰期进行重载",{"2":{"395":1}}],["所以会报错",{"2":{"183":1}}],["所以实际上这里并不会执行",{"2":{"121":1}}],["所以代码的执行效率会更慢",{"2":{"119":1}}],["所以请套一层",{"2":{"97":1}}],["所以",{"0":{"211":1},"2":{"82":1,"188":1,"191":1,"193":1,"202":1,"209":1,"210":1,"224":1,"232":1,"272":1,"278":2}}],["所以当形如",{"2":{"78":1}}],["所以它的结果会被输出",{"2":{"77":1}}],["所以你不必担心前缀对查询带来的影响",{"2":{"68":1}}],["所有阴谋论都是真的",{"2":{"740":1}}],["所有支持的途径参见目录",{"2":{"513":1}}],["所有含有云端内容的牌堆",{"2":{"389":1}}],["所有",{"2":{"187":1,"201":1}}],["所有自定义文案也均为可用变量",{"2":{"172":1}}],["所有变量均可以在",{"2":{"172":1}}],["所有变量在未被赋值时被调用的值都为",{"2":{"76":1}}],["所有需要发送每日新闻的群聊",{"2":{"142":1}}],["所有指令必须归属于某个扩展",{"2":{"112":1}}],["所有的自定义文案都可以嵌套使用",{"2":{"377":1}}],["所有的",{"2":{"7":1}}],["所属目录",{"2":{"68":1}}],["冷酷",{"2":{"67":1}}],["冷淡",{"2":{"67":1}}],["滥用权利",{"2":{"67":1}}],["武断",{"2":{"67":1}}],["挫折",{"2":{"67":1}}],["幼稚",{"2":{"67":1}}],["皇帝逆位",{"2":{"67":1}}],["纠纷",{"2":{"67":1}}],["贴近自然",{"2":{"67":1}}],["享乐",{"2":{"67":1}}],["困难侦查",{"2":{"603":1}}],["困难侦查+10",{"2":{"597":1,"600":1}}],["困难侦察",{"2":{"368":1}}],["困难成功",{"2":{"136":1,"595":2,"604":1,"605":2}}],["困难极难等保持原样",{"2":{"136":1}}],["困难",{"2":{"67":1,"136":1,"368":1,"597":1}}],["女皇逆位",{"2":{"67":1}}],["女祭司逆位",{"2":{"67":1}}],["单独设置某一环的法术位上限",{"2":{"672":1}}],["单词",{"2":{"652":1}}],["单个回复项的条件",{"2":{"417":1}}],["单行",{"2":{"374":1}}],["单条",{"2":{"371":2}}],["单项",{"2":{"369":1,"659":2}}],["单项结果文本",{"2":{"24":1,"368":3,"370":1,"373":2}}],["单位名称",{"2":{"660":1}}],["单位2",{"2":{"660":1}}],["单位1",{"2":{"660":1}}],["单位是秒",{"2":{"423":1}}],["单位是",{"2":{"350":1}}],["单位未知",{"2":{"96":1}}],["单击加号",{"2":{"263":1}}],["单击你刚刚传到模拟器里的文件",{"2":{"257":1}}],["单",{"0":{"161":1}}],["单人模组",{"0":{"87":1}}],["单相思",{"2":{"67":1}}],["锋芒外露",{"2":{"67":1}}],["自身技能",{"2":{"746":1}}],["自然",{"2":{"665":2}}],["自由分配模式",{"2":{"658":1}}],["自己的属性表达式",{"2":{"605":1}}],["自己与对手均使用相同属性",{"2":{"604":1}}],["自己搭建本地签名服务器",{"2":{"238":1}}],["自用之外",{"2":{"568":1}}],["自带的",{"2":{"550":1}}],["自测报告",{"2":{"504":4}}],["自启动",{"2":{"448":1}}],["自行修改",{"2":{"521":1}}],["自行搭建签名服务",{"2":{"238":1}}],["自行排查问题的参考步骤",{"2":{"189":1}}],["自近期用户量剧增后",{"2":{"214":1}}],["自动名片",{"2":{"746":1}}],["自动群名片",{"0":{"732":1},"1":{"733":1,"734":1,"735":1,"736":1}}],["自动转换为短画线",{"2":{"723":1}}],["自动优先消耗",{"2":{"665":1}}],["自动更新用户的群名片",{"2":{"732":1}}],["自动更新",{"0":{"543":1}}],["自动为容器构建了一个子网",{"2":{"496":1}}],["自动管理",{"2":{"450":1}}],["自动退群将会按批次执行",{"2":{"350":1}}],["自动退出不活跃群组",{"0":{"350":1}}],["自动激活",{"2":{"333":1,"690":1}}],["自动添加",{"0":{"327":1}}],["自动清理时将保留创建时间在指定时间范围内的备份文件",{"2":{"319":1}}],["自动清理时将保留最新的指定数量的备份文件",{"2":{"319":1}}],["自动清理",{"0":{"318":1},"1":{"319":1,"320":1}}],["自动清理设置",{"2":{"315":1}}],["自动清理旧备份的相关设置",{"2":{"314":1}}],["自动备份后",{"2":{"320":2}}],["自动备份设置",{"2":{"315":1}}],["自动备份",{"0":{"317":1},"2":{"314":1}}],["自动修改群名片等",{"2":{"146":1}}],["自动补全",{"2":{"93":1}}],["自设规则",{"2":{"136":2}}],["自定义模板",{"0":{"735":1}}],["自定义骰点回执",{"2":{"430":1}}],["自定义工具",{"2":{"256":1}}],["自定义文案的本体",{"2":{"431":1}}],["自定义文案引用牌堆",{"0":{"378":1}}],["自定义文案组合",{"0":{"366":1},"1":{"367":1,"368":1,"369":1,"370":1,"371":1,"372":1,"373":1,"374":1}}],["自定义文案",{"0":{"360":1},"1":{"361":1,"362":1,"363":1,"364":1,"365":1,"366":1,"367":1,"368":1,"369":1,"370":1,"371":1,"372":1,"373":1,"374":1,"375":1,"376":1,"377":1,"378":1,"379":1,"380":1,"381":1},"2":{"172":2,"362":1,"366":1,"701":1}}],["自定义序号必须大于等于",{"2":{"136":1}}],["自定义指令",{"0":{"113":1},"1":{"114":1,"115":1,"116":1,"117":1}}],["自定义",{"0":{"103":1,"136":1},"2":{"136":1}}],["自定义回复模块",{"2":{"625":1}}],["自定义回复要怎么抽取牌堆",{"2":{"425":1}}],["自定义回复引用牌堆",{"0":{"424":1,"654":1}}],["自定义回复仓库",{"2":{"416":1}}],["自定义回复功能是被关闭的",{"2":{"413":1}}],["自定义回复的形式自由",{"2":{"412":1}}],["自定义回复教程",{"2":{"209":1}}],["自定义回复和",{"2":{"199":1}}],["自定义回复中则采用",{"2":{"82":1}}],["自定义回复中的多行输出通常并不是",{"2":{"82":1}}],["自定义回复中分",{"2":{"70":1}}],["自定义回复",{"0":{"411":1,"650":1,"724":1},"1":{"412":1,"413":1,"414":1,"415":1,"416":1,"417":1,"418":1,"419":1,"420":1,"421":1,"422":1,"423":1,"424":1,"425":1,"651":1,"652":1,"653":1,"654":1,"655":1,"656":1},"2":{"25":1,"69":1,"70":2,"386":1,"412":2,"413":2,"414":1,"656":1,"718":1,"724":1}}],["自负",{"2":{"67":1}}],["自尊心太强",{"2":{"67":1}}],["洁癖",{"2":{"67":1}}],["目标",{"2":{"706":1}}],["目标依赖的版本号需要符合",{"2":{"165":1}}],["目标海豹版本",{"0":{"167":1},"2":{"159":1}}],["目录寻找日志的文件快照",{"2":{"729":1}}],["目录来提速",{"2":{"696":1}}],["目录替换这里面的",{"2":{"577":1}}],["目录发送到手机上",{"2":{"577":1}}],["目录以你习惯的任何方式打包",{"2":{"575":1}}],["目录中的内容",{"2":{"491":1,"575":1}}],["目录中复制出来",{"2":{"460":1}}],["目录分别挂载到",{"2":{"491":1}}],["目录分别挂载到海豹容器的",{"2":{"491":1}}],["目录",{"2":{"262":1,"274":2,"491":2,"492":1,"577":2}}],["目录后重新运行",{"2":{"242":1}}],["目录结构",{"0":{"152":1}}],["目录下的子目录名",{"2":{"642":1}}],["目录下的不同文件中被整理成词条",{"2":{"642":1}}],["目录下的图片资源",{"2":{"428":1}}],["目录下全部三个开关",{"2":{"464":1}}],["目录下找到所有的备份文件",{"2":{"459":1}}],["目录下",{"2":{"151":1,"315":1}}],["目光短浅",{"2":{"67":1}}],["目前有",{"2":{"569":1}}],["目前官方机器人只响应包含",{"2":{"505":1}}],["目前对接官方接口的骰子很多功能无法支持",{"2":{"499":1}}],["目前提供了三种匹配模式",{"2":{"419":1}}],["目前",{"2":{"240":1,"499":1,"504":1,"512":1,"625":1}}],["目前并不支持写注释",{"2":{"173":1}}],["目前支持",{"2":{"138":1}}],["目前的内容是从上古文档中直接迁移过来的",{"2":{"94":1}}],["目前海豹有三种更新方法",{"2":{"542":1}}],["目前海豹语并不支持",{"2":{"78":1}}],["目前海豹只支持在反引号中调用变量",{"2":{"77":1}}],["目前暂不考虑支持",{"2":{"66":1}}],["目前仅有",{"2":{"64":1}}],["目前尚未更新蓝绿修改器",{"2":{"2":1}}],["贪心",{"2":{"67":1}}],["挑剔",{"2":{"67":1}}],["爱情难有进展",{"2":{"67":1}}],["局面失控",{"2":{"67":1}}],["被",{"2":{"649":1}}],["被警告",{"2":{"623":1}}],["被官方予以警告",{"2":{"512":1}}],["被拆分为三个权限",{"2":{"448":1}}],["被禁言",{"2":{"333":1,"690":1}}],["被踢出群",{"2":{"333":1,"690":1}}],["被注释掉的",{"2":{"94":1}}],["被称为执行块",{"2":{"77":1}}],["被存储于变量",{"2":{"73":1}}],["被认为是相似",{"2":{"72":1}}],["被骗或失败",{"2":{"67":1}}],["被隐藏的项不会在",{"2":{"57":1}}],["方式",{"2":{"419":1,"512":1}}],["方式来实现",{"2":{"419":1}}],["方式时有效",{"2":{"349":1}}],["方案因可用性原因已被弃用",{"2":{"513":1}}],["方案",{"2":{"341":1,"513":1}}],["方案时",{"2":{"341":1,"513":1}}],["方案成功连接的成功率已经越来越低",{"2":{"236":1}}],["方便快速解决",{"2":{"680":1}}],["方便快速取用",{"2":{"114":1,"117":1}}],["方便管理的时候",{"2":{"415":1}}],["方便你管理和分享它们",{"2":{"414":1}}],["方便你快速获取最新的插件",{"2":{"406":1}}],["方便你快速获取最新的牌堆内容",{"2":{"388":1}}],["方便直接测试代码",{"2":{"407":1}}],["方便用户快速编写指定类型",{"2":{"268":1}}],["方便用户在提问的过程中表述得简单直接",{"2":{"185":1}}],["方便开发阶段修改",{"2":{"131":1}}],["方便骰主快速获取牌堆更新",{"2":{"58":1}}],["方法二",{"0":{"441":1}}],["方法一",{"0":{"440":1}}],["方法",{"2":{"105":1,"106":1,"107":1,"108":1,"109":1,"110":1}}],["方向错误",{"2":{"67":1}}],["内键入",{"2":{"480":1}}],["内核",{"2":{"295":1}}],["内存占用也不会超过数百",{"2":{"550":1}}],["内存占用会随着持续运行而稍稍增长并有所波动",{"2":{"550":1}}],["内存",{"2":{"550":2}}],["内存指代的是",{"2":{"199":1}}],["内存不足到底指的是哪里的内存不足",{"0":{"197":1}}],["内",{"2":{"141":1}}],["内部元素为字符串",{"2":{"125":2}}],["内部元素为整数时间戳",{"2":{"125":1}}],["内置部分人物卡上没有的默认技能等级",{"2":{"558":1}}],["内置脚本语法",{"2":{"425":1}}],["内置脚本语言",{"0":{"171":1},"1":{"172":1,"173":1,"174":1,"175":1,"176":1,"177":1,"178":1,"179":1,"180":1,"181":1,"182":1,"183":1},"2":{"75":1,"92":1,"376":1}}],["内置",{"2":{"362":1}}],["内置客户端版本",{"2":{"514":1}}],["内置客户端暂不支持",{"2":{"514":1}}],["内置客户端的配置文件夹",{"2":{"431":1}}],["内置客户端的二进制文件",{"2":{"430":1}}],["内置客户端",{"0":{"514":1},"2":{"341":1,"513":3,"514":1}}],["内置客户端或分离部署",{"2":{"227":1}}],["内置的",{"2":{"172":1,"248":1,"362":2}}],["内置对象",{"2":{"158":1}}],["内置文件",{"2":{"93":1}}],["内直接赋值的写法和新开一行使用条件语句的写法",{"2":{"84":1}}],["内容为",{"2":{"694":1}}],["内容相似时触发",{"2":{"72":1}}],["内容",{"2":{"68":1,"72":1,"172":1}}],["内心空虚",{"2":{"67":1}}],["内联表",{"2":{"33":1}}],["疯狂症状",{"2":{"746":1}}],["疯狂状态的持续时间取决于失去的理智值的数量和比例",{"2":{"612":1}}],["疯狂发作症状",{"0":{"612":1}}],["疯狂",{"2":{"67":1}}],["鲁莽",{"2":{"67":1}}],["冒失",{"2":{"67":1}}],["冒险",{"2":{"67":1}}],["冒号后面要加一个空格",{"2":{"45":1}}],["漂泊",{"2":{"67":1}}],["愚者逆位",{"2":{"67":1}}],["释义来源网络",{"2":{"67":1}}],["塔罗牌",{"0":{"67":1},"2":{"67":1}}],["出场了",{"2":{"660":1}}],["出目互不相同的骰点",{"2":{"704":1}}],["出目32",{"2":{"636":1}}],["出目大于等于暴击线的骰子称为此骰子",{"2":{"636":1}}],["出现如下窗口",{"2":{"686":1}}],["出现的小数被立即舍弃",{"2":{"628":1}}],["出现误判",{"2":{"425":1}}],["出现模块作用域",{"2":{"264":1}}],["出现该报错的原因很可能是因为",{"2":{"242":1}}],["出现",{"0":{"244":1,"246":1,"247":1,"248":1},"2":{"242":1}}],["出现以下消息后输入",{"2":{"242":1}}],["出现了异常的问题",{"2":{"190":1}}],["出现了一些以",{"2":{"172":1}}],["出现格式化错误",{"2":{"183":1}}],["出现相同词汇时按最高级别判断",{"2":{"90":1}}],["出",{"2":{"136":3,"619":18}}],["出于对公平性的考虑",{"2":{"112":1}}],["出的数值",{"2":{"97":1}}],["出的是",{"2":{"84":3}}],["出的新仓库",{"2":{"11":1}}],["出错时请严格检查",{"2":{"66":1}}],["尾逗号等语法不属于",{"2":{"66":1}}],["诸如注释",{"2":{"66":1}}],["帮助说明中的的一些符号有特定含义",{"2":{"722":1}}],["帮助指令",{"0":{"647":1}}],["帮助文本会产生约",{"2":{"644":1}}],["帮助文档的文本量较大",{"2":{"395":1}}],["帮助文档列表以文件树的形式展示",{"2":{"395":1}}],["帮助文档仓库",{"2":{"393":1}}],["帮助文档",{"0":{"391":1},"1":{"392":1,"393":1,"394":1,"395":1,"396":1,"397":1,"398":1,"399":1,"400":1},"2":{"392":1,"395":1,"622":1,"642":1}}],["帮助文档通常包含了各个项目从部署到使用的一系列教程",{"2":{"206":1}}],["帮助文档所在工作表的名称会作为前缀加入词条",{"2":{"68":1}}],["帮助文档是",{"2":{"66":1}}],["帮助快速生成模板代码",{"2":{"168":1}}],["帮助信息不要以",{"2":{"114":1}}],["帮助你快速掌握相关内容",{"2":{"91":1}}],["帮助你快速了解它们",{"2":{"31":1}}],["帮助测试",{"2":{"70":1}}],["概念说明",{"0":{"582":1}}],["概述",{"2":{"66":1}}],["概览",{"0":{"30":1}}],["作为骰主",{"2":{"730":1}}],["作为它的同义词",{"2":{"582":1}}],["作为处理等级",{"2":{"355":1}}],["作为服务端默认绑定到",{"2":{"278":1}}],["作为示例",{"2":{"255":1}}],["作为",{"2":{"158":1}}],["作为非指令关键词的标志",{"2":{"137":1}}],["作为标记",{"2":{"83":1}}],["作为标记变量",{"2":{"83":1}}],["作为分页符",{"2":{"66":1}}],["作为换行符",{"2":{"66":1}}],["作为牌组的文件",{"2":{"48":1}}],["作者木落",{"2":{"625":1}}],["作者已因",{"2":{"237":1}}],["作者名和版本号",{"2":{"165":1}}],["作者名为",{"2":{"165":1}}],["作者名",{"2":{"159":1}}],["作者为",{"2":{"94":1}}],["作者",{"2":{"66":1,"90":2,"112":1,"165":2,"579":1,"706":2}}],["名单",{"2":{"325":1}}],["名词或操作时",{"2":{"203":1}}],["名词",{"0":{"266":1},"1":{"267":1,"268":1,"269":1,"270":1,"271":1,"272":1,"273":1,"274":1,"275":1,"276":1,"277":1,"278":1,"279":1,"280":1,"281":1,"282":1,"283":1,"284":1,"285":1,"286":1,"287":1,"288":1,"289":1,"290":1,"291":1,"292":1,"293":1,"294":1,"295":1,"296":1,"297":1,"298":1,"299":1,"300":1,"301":1,"302":1,"303":1,"304":1,"305":1,"306":1,"307":1,"308":1,"309":1,"310":1,"311":1,"312":1,"313":1},"2":{"184":1,"195":1,"203":1,"206":1,"210":1,"213":1,"225":1}}],["名为",{"2":{"112":1,"541":1}}],["名字前缀有",{"2":{"731":1}}],["名字>",{"2":{"114":1,"117":2,"134":2}}],["名字",{"0":{"763":1},"2":{"66":1,"746":1}}],["名称任意",{"2":{"48":3}}],["还会向海豹日志染色器上传日志",{"2":{"727":1}}],["还提供一系列的自定义和娱乐功能",{"2":{"717":1}}],["还提供试用",{"2":{"1":1}}],["还需要在服务器系统中放行端口",{"2":{"684":1}}],["还需要注册扩展",{"2":{"112":1}}],["还是",{"2":{"594":1,"612":1}}],["还是别追究他为什么不在了",{"2":{"552":1,"702":1}}],["还是需要复杂的判断和响应",{"2":{"412":1}}],["还是在使用中遇到了不符合预期的事件",{"2":{"226":1}}],["还可以选择在",{"2":{"262":1}}],["还可以让你看到更高效地获取那些有用的信息",{"2":{"205":1}}],["还可以使用",{"2":{"81":1}}],["还有疯魔的邪教徒们",{"2":{"584":1}}],["还有",{"2":{"207":1}}],["还有撤去一些自定义回复文件以及",{"2":{"190":1,"226":1}}],["还有出现问题的完整截图发到用户群",{"2":{"190":1}}],["还有其它的前缀",{"2":{"172":1}}],["还有一些",{"2":{"94":1}}],["还没有任何选项呢`",{"2":{"130":2}}],["还很陌生",{"2":{"65":1,"90":1}}],["最简单的方法就是自己",{"2":{"718":1}}],["最简单的方式就是使用",{"2":{"412":1}}],["最终的骰点结果为",{"2":{"636":1}}],["最终计算的是小于等于",{"2":{"635":1}}],["最终抽取的牌组相当于直接配置了这样的牌组",{"2":{"64":1}}],["最外层的",{"2":{"395":1}}],["最高等级",{"2":{"355":1}}],["最好使用安卓",{"2":{"255":1}}],["最好的方式是通过在图片上加马赛克进行遮挡",{"2":{"187":1,"201":1}}],["最开头一行",{"2":{"150":1}}],["最后一轮中最大点数",{"2":{"636":1}}],["最后计算总计成功数",{"2":{"635":1}}],["最后点击确定",{"2":{"196":1}}],["最后只要编译成",{"2":{"170":1}}],["最后更新时间",{"2":{"159":1}}],["最后输出结果",{"2":{"79":1}}],["最后",{"2":{"78":1,"210":1,"363":1}}],["最后的抽取是从合并的数组中进行",{"2":{"64":1}}],["确确实实地存在于人们身边的世界",{"2":{"743":1}}],["确定问题",{"0":{"457":1},"1":{"458":1}}],["确认配置完成后",{"2":{"503":1}}],["确认后点击下方",{"2":{"531":1}}],["确认后点击",{"2":{"464":1}}],["确认插件的更新内容之后",{"2":{"406":1}}],["确认更新",{"2":{"388":1,"406":1}}],["确认牌堆的更新内容之后",{"2":{"388":1}}],["确认内容完整再导入",{"2":{"365":1}}],["确认海豹版本",{"2":{"265":1}}],["确认端口没有重复",{"2":{"245":1}}],["确认没有启动多个",{"2":{"245":1}}],["确认前请务必保证是从主分支切出的",{"2":{"12":1}}],["确保你设置了合适的密码",{"2":{"622":1}}],["确保你下载的是",{"2":{"460":1}}],["确保只有你完全信任的人能够接触到你骰子的",{"2":{"622":1}}],["确保海豹核心能够在后台存活",{"2":{"438":1}}],["确保安卓版本在安卓",{"2":{"255":1}}],["确保截图中呈现了对应的日志",{"2":{"225":1}}],["确保最终抽取的牌组中不含重复条目",{"2":{"64":1}}],["正面应对克苏鲁神话中那些毛骨悚然之物的人",{"2":{"585":1}}],["正向连接",{"2":{"521":1}}],["正向服务地址",{"2":{"494":1}}],["正常的用例",{"2":{"722":1}}],["正常回应指令列表里的指令",{"2":{"504":1}}],["正常填写配置文件中设定的监听地址",{"2":{"494":1}}],["正在卸载系统服务",{"2":{"541":1}}],["正在启动服务",{"2":{"686":2}}],["正在启动",{"2":{"541":1}}],["正在安装系统服务",{"2":{"541":1}}],["正在运行的程序会被暂停",{"2":{"292":1}}],["正在等待用户输入命令",{"2":{"290":1}}],["正因如此",{"2":{"272":1}}],["正如上文中提到的",{"2":{"226":1}}],["正如上面示例中看到的那样",{"2":{"64":1}}],["正例并不意味着一个好问题",{"2":{"222":1}}],["正确写法",{"2":{"174":1}}],["正则中匹配",{"2":{"73":1}}],["正则表达式等",{"2":{"412":1,"724":1}}],["正则表达式",{"2":{"69":1}}],["正则匹配",{"0":{"73":1},"2":{"26":1,"72":1,"419":1,"420":2}}],["假用户",{"2":{"512":1}}],["假设角色的侦查技能是40",{"2":{"595":1,"597":1}}],["假设我们创建了一个叫做",{"2":{"143":1}}],["假设用户发送过来的消息是",{"2":{"115":1}}],["假定",{"2":{"599":1}}],["假定目前已经注册好了一个名为",{"2":{"114":1}}],["假定上面填入了",{"2":{"64":1}}],["假如牌堆文件内容如下",{"2":{"56":1}}],["假如你熟悉",{"2":{"12":1}}],["链接能够配置多个",{"2":{"64":1}}],["链接",{"2":{"64":2}}],["云服务器",{"2":{"538":1}}],["云电脑",{"2":{"272":1}}],["云端数据与本地数据合并后会进行去重",{"2":{"64":1}}],["云端内容示例",{"2":{"64":1}}],["云端内容",{"0":{"62":1},"1":{"63":1,"64":1},"2":{"389":1}}],["云内容链接",{"2":{"64":1}}],["云内容与本地内容去重",{"2":{"64":1}}],["其队员",{"2":{"739":1}}],["其形式为",{"2":{"623":2}}],["其二是前者与幸运的总值",{"2":{"616":1}}],["其一是",{"2":{"616":1}}],["其余内容无需修改",{"2":{"514":1}}],["其余选项可以参看对应的提示",{"2":{"354":1}}],["其包括目前实现了",{"2":{"285":1,"516":1}}],["其实是在耽误你个人的时间",{"2":{"190":1}}],["其它规则支持",{"0":{"738":1},"1":{"739":1,"740":1,"741":1,"742":1,"743":1,"744":1}}],["其它插件由海豹社区提供",{"2":{"572":1}}],["其它",{"2":{"362":1,"746":1}}],["其它版本的打开方式请自行搜索",{"2":{"262":1}}],["其它归档内容",{"0":{"235":1},"1":{"236":1,"237":1,"238":1,"239":1,"240":1,"241":1,"242":1,"243":1,"244":1,"245":1,"246":1,"247":1,"248":1,"249":1,"250":1,"251":1,"252":1,"253":1,"254":1,"255":1,"256":1,"257":1,"258":1,"259":1,"260":1,"261":1,"262":1,"263":1,"264":1,"265":1},"2":{"184":1}}],["其它写法",{"2":{"81":1}}],["其值是在每次指令执行的初始阶段设置的",{"2":{"172":1}}],["其值等于",{"2":{"97":1}}],["其各个参数的含义如下",{"2":{"141":1}}],["其参数是是否执行成功",{"2":{"115":1}}],["其他符号如",{"2":{"720":1}}],["其他骰子做检定的时候",{"0":{"688":1}}],["其他服务商大同小异",{"2":{"686":1}}],["其他人",{"2":{"593":1,"599":1,"602":1,"611":1,"639":1,"666":1,"668":1,"671":1,"673":1,"675":1,"677":1,"679":1}}],["其他信息也相应展示",{"2":{"385":1}}],["其他事项",{"0":{"231":1},"1":{"232":1,"233":1}}],["其他格式的支持和更多问题排查",{"2":{"154":1}}],["其他问题",{"0":{"153":1,"169":1},"1":{"154":1,"155":1,"156":1,"170":1}}],["其他用户的权限等级为普通用户",{"2":{"120":1}}],["其他用户被视为拥有与群管理员等同的权限",{"2":{"120":1}}],["其他",{"0":{"104":1}}],["其他的都需要在条件中用多个进行嵌套",{"2":{"84":1}}],["其会将",{"2":{"94":2}}],["其会将$xxx",{"2":{"94":1}}],["其为插件元数据中的",{"2":{"165":1}}],["其为",{"2":{"94":2}}],["其仍会对",{"2":{"78":1}}],["其每个元素均是牌组的一个条目",{"2":{"63":1}}],["其中含有的表达式和变量都将被求值",{"2":{"705":1}}],["其中的",{"2":{"694":1,"721":1}}],["其中的大写字母用相应参数替换",{"2":{"635":1,"636":1}}],["其中的一行文案来使用",{"2":{"363":1}}],["其中1条为同义词",{"2":{"582":1}}],["其中更多使用后者来编写资料查询文档",{"2":{"393":1}}],["其中重复的词取设置的最高等级",{"2":{"356":1}}],["其中第二列",{"2":{"68":1}}],["其中上半部分的一些项不是必须的",{"2":{"48":1}}],["其中以",{"2":{"48":1}}],["其中",{"2":{"48":1,"94":1,"119":1,"141":1,"165":1,"259":1,"497":1,"501":1,"583":1,"595":1,"608":1,"635":1,"636":1,"659":1,"722":1}}],["其中键名必须用",{"2":{"38":1}}],["骰指定数量的",{"2":{"715":1}}],["骰数",{"2":{"715":1}}],["骰池设定已恢复默认",{"2":{"711":1}}],["骰池是每个群组共用的",{"2":{"704":1}}],["骰池",{"2":{"704":1}}],["骰池抽取",{"0":{"704":1}}],["骰池数量",{"2":{"635":1,"636":1}}],["骰法",{"2":{"637":1}}],["骰上一轮中加骰数个",{"2":{"635":1}}],["骰",{"2":{"633":2,"635":1,"636":2}}],["骰4个6面骰",{"2":{"628":1}}],["骰5个24面骰",{"2":{"628":1}}],["骰子的使用注意项",{"2":{"718":1}}],["骰子的回复内容太过繁琐",{"2":{"361":1}}],["骰子的回复内容太过单调",{"2":{"361":1}}],["骰子提供各种基于各种跑团规则",{"2":{"717":1}}],["骰子这里特指在即时聊天软件",{"2":{"717":1}}],["骰子所在的所有群进行使用",{"2":{"709":1}}],["骰子会将模板内容解析后返回",{"2":{"705":1}}],["骰子会立即退群",{"2":{"328":1}}],["骰子不会自动同意频道邀请",{"2":{"691":1}}],["骰子不回复黑名单用户",{"2":{"328":1}}],["骰子b",{"2":{"688":1}}],["骰子a",{"2":{"688":1}}],["骰子面数默认为",{"2":{"635":1}}],["骰子面数",{"2":{"635":1,"636":2,"711":1}}],["骰子面数管理",{"0":{"626":1}}],["骰子账号遭到了风控",{"2":{"681":1}}],["骰子账号",{"2":{"624":1}}],["骰子管理",{"0":{"624":1}}],["骰子",{"2":{"549":1,"691":1}}],["骰子qq",{"2":{"431":1}}],["骰子进群",{"2":{"380":1}}],["骰子进群和成为好友的问候语是哪个",{"0":{"380":1}}],["骰子名字",{"2":{"375":1,"377":1}}],["骰子才会响应",{"2":{"343":1}}],["骰子成为好友",{"2":{"334":1,"380":1}}],["骰子自动拒绝黑名单用户的邀请",{"2":{"328":1}}],["骰子服务",{"2":{"285":1,"516":1}}],["骰子就不能",{"2":{"272":1}}],["骰子本质是在电脑上运行的程序",{"2":{"272":1}}],["骰子算符",{"0":{"178":1}}],["骰子将回复",{"2":{"66":1}}],["骰娘",{"2":{"135":1}}],["骰主代取",{"0":{"730":1}}],["骰主具有很大的权限",{"2":{"698":1}}],["骰主也可以",{"2":{"683":1}}],["骰主指令",{"0":{"622":1},"2":{"331":1}}],["骰主",{"2":{"120":2,"718":1}}],["骰主需要自行确认数据源不会返回你不希望骰子发出的信息",{"2":{"62":1}}],["骰主无需反复更新骰子中装载的牌堆",{"2":{"62":1}}],["骰点结果将由海豹核心私聊给指令发送者",{"2":{"638":1}}],["骰点需要设定以下参数",{"2":{"635":1}}],["骰点规则是一个多轮骰点规则",{"2":{"635":1}}],["骰点时投掷",{"2":{"634":1}}],["骰点兼容",{"0":{"633":1}}],["骰点",{"0":{"373":1,"627":1,"635":1},"1":{"628":1,"629":1,"630":1,"631":1,"632":1,"633":1,"634":1,"635":1,"636":1,"637":1},"2":{"24":1,"373":7,"711":1,"712":1,"715":1}}],["恶臭论证",{"2":{"61":2}}],["恶意攻击海豹骰及开发人员",{"2":{"15":1}}],["恶意代码",{"2":{"15":1}}],["简称",{"2":{"739":1,"740":1,"741":1,"742":1}}],["简称为",{"2":{"143":1}}],["简略写法",{"0":{"609":1}}],["简体与繁体字等价",{"2":{"582":1}}],["简繁汉字的属性被视为同一属性",{"2":{"557":1,"561":1}}],["简短",{"2":{"368":1}}],["简易配置",{"2":{"238":1}}],["简言之",{"2":{"186":1,"200":1}}],["简单介绍",{"2":{"478":1}}],["简单说",{"2":{"145":1}}],["简单牌组表",{"2":{"61":1}}],["简介",{"2":{"36":5,"40":4,"46":4,"90":1}}],["仅限",{"2":{"553":1,"655":1}}],["仅对企业用户和部分受邀个人用户开放",{"2":{"512":1}}],["仅有",{"2":{"512":1}}],["仅当",{"2":{"349":1}}],["仅当需要备用签名或不同协议版本的时候有此需求",{"0":{"249":1}}],["仅自定义回复中可用",{"2":{"172":1}}],["仅承担唤醒功能",{"2":{"141":1}}],["仅",{"2":{"139":1,"241":1,"341":1,"647":1}}],["仅master可用",{"2":{"127":5}}],["仅仅是提供了配置选项的能力",{"2":{"61":1}}],["仅说明牌堆编写中会用到的部分",{"2":{"31":1}}],["更改其他玩家的名片",{"2":{"732":1}}],["更改为文件夹内对应的服务端核心文件文件名",{"2":{"480":1}}],["更强的指令支持",{"0":{"570":1}}],["更复杂的自定义回复编写",{"2":{"425":1}}],["更复杂的回复",{"0":{"425":1},"2":{"419":1,"420":1}}],["更复杂的文案设置涉及到逻辑的编写",{"2":{"381":1}}],["更复杂的文案设置",{"0":{"381":1}}],["更建议使用",{"2":{"394":1}}],["更新属性值",{"0":{"590":1,"665":1}}],["更新前请",{"2":{"546":1}}],["更新海豹",{"0":{"542":1},"1":{"543":1,"544":1,"545":1,"546":1}}],["更新海豹容器或",{"0":{"495":1}}],["更新至最新稳定版本",{"2":{"539":1}}],["更新",{"2":{"388":1,"406":1,"519":1,"522":2}}],["更新日期",{"2":{"90":1}}],["更老的文件将被删除",{"2":{"319":2}}],["更常见的含义是偏向负面的",{"2":{"279":1}}],["更换网络进行滑条",{"2":{"247":1}}],["更快地找到问题所在",{"2":{"189":1,"217":1}}],["更原始的",{"2":{"138":1}}],["更好的方式是参考海豹提供的",{"2":{"94":1}}],["更专业的编辑器能更好地帮助你编写相关格式的文件",{"2":{"93":1}}],["更多规则",{"0":{"744":1}}],["更多规则请看其它规则支持",{"2":{"626":1}}],["更多邮箱地址",{"2":{"729":1}}],["更多技能名称",{"2":{"614":1}}],["更多",{"0":{"580":1}}],["更多电池设置",{"2":{"450":1}}],["更多牌堆命令",{"2":{"386":1}}],["更多牌组设置",{"0":{"61":1}}],["更多请参阅",{"2":{"344":1}}],["更多设置",{"2":{"262":2}}],["更多的内存占用和变慢的启动速度",{"2":{"644":1}}],["更多的",{"2":{"190":1}}],["更多内容请看",{"2":{"157":1}}],["更多示例片段",{"0":{"80":1},"1":{"81":1,"82":1,"83":1,"84":1,"85":1,"86":1,"87":1}}],["更不会显示在列表中",{"2":{"57":3}}],["与我们所生活的现实颇为相似的另一个世界",{"2":{"743":1}}],["与我们交互",{"2":{"302":1}}],["与角色的属性数值变化",{"2":{"728":1}}],["与群关联",{"2":{"709":1}}],["与用户关联",{"2":{"709":1}}],["与前一用法相同",{"2":{"665":1}}],["与孩提时代的过家家扮演游戏相似",{"2":{"657":1}}],["与本地文件",{"2":{"622":1}}],["与之相对的概念是扩展指令",{"2":{"621":1}}],["与之等价的",{"2":{"56":1}}],["与克苏鲁神话相关的痛苦经历和可怖领悟都会诱发疯狂",{"2":{"612":1}}],["与官网一致",{"2":{"538":1}}],["与文档数量",{"2":{"395":1}}],["与上方的",{"2":{"362":1}}],["与命令提示符等名词会被混用",{"2":{"302":1}}],["与端口是互联网应用用于定位彼此的方式之一",{"2":{"278":1}}],["与端口号",{"2":{"278":1}}],["与端口",{"0":{"278":1},"2":{"270":1}}],["与深度优先学习相反",{"2":{"210":1}}],["与其提问后再被要求补充这些信息",{"2":{"227":1}}],["与其拾人牙慧",{"2":{"207":1}}],["与其在用户群里发出主观情绪并且焦急地等待回答",{"2":{"190":1}}],["与",{"2":{"78":2,"141":1,"143":1,"173":2,"210":1,"283":1,"290":1,"292":1,"302":1,"313":1,"395":1,"420":1,"426":1,"480":1,"489":1,"491":4,"504":3,"513":1,"516":1,"582":11,"601":1,"678":1}}],["与在文案和自定义回复中插入海豹语使用",{"2":{"59":1}}],["hyphen",{"2":{"723":1}}],["hyperos",{"0":{"448":1},"2":{"448":1}}],["halt",{"2":{"570":1,"727":1}}],["hamming",{"2":{"72":2}}],["hp10",{"2":{"733":1}}],["hp14",{"2":{"733":1}}],["hp回复1点",{"2":{"678":1}}],["hp得到了恢复",{"2":{"676":1}}],["hpmax",{"2":{"665":3,"678":1,"735":1}}],["hp+1d3",{"2":{"590":1}}],["hp",{"2":{"548":1,"593":2,"616":1,"665":7,"670":5,"672":1,"678":6,"735":2}}],["hiy",{"0":{"737":1}}],["history",{"2":{"532":4}}],["hide",{"2":{"133":6}}],["hkt",{"2":{"480":1}}],["htop",{"2":{"199":1}}],["http",{"2":{"63":1,"64":1,"238":1,"278":1,"465":1,"536":1,"684":1,"686":1}}],["https",{"2":{"58":3,"61":1,"117":1,"119":1,"121":1,"127":1,"129":1,"130":1,"133":1,"134":1,"135":2,"136":1,"158":1,"159":1,"278":1,"480":1,"686":1}}],["hostport",{"2":{"259":1}}],["host",{"2":{"239":1,"347":2,"491":1,"493":1,"494":2,"497":1,"498":3,"515":2,"539":1}}],["how",{"2":{"189":1,"217":1}}],["homepageurl",{"2":{"117":1,"119":1,"121":1,"127":1,"129":1,"130":1,"133":1,"134":1,"136":1,"158":1,"159":2}}],["heartbeatinterval",{"2":{"493":1}}],["headless",{"0":{"276":1},"2":{"306":1}}],["header",{"2":{"150":1,"152":1}}],["help协议",{"2":{"722":1}}],["helpdpc",{"2":{"642":1}}],["helpdoc",{"2":{"66":4,"67":1,"68":3,"393":1,"642":1,"696":1}}],["help",{"0":{"586":1,"647":1,"662":1},"2":{"66":1,"114":2,"115":3,"116":2,"117":3,"119":2,"121":1,"127":10,"129":3,"130":5,"133":2,"134":3,"139":2,"375":1,"394":1,"430":1,"480":2,"623":1,"647":2,"648":1,"651":1,"660":1,"670":1,"678":1,"718":1,"720":1,"721":2,"722":2,"746":1,"747":1,"758":2,"760":1,"765":1}}],["hello",{"2":{"45":1,"158":3}}],["h",{"0":{"275":1},"1":{"276":1},"2":{"141":2,"541":1}}],["hh",{"2":{"141":2}}],["未被单独作为扩展",{"2":{"738":1}}],["未被提示",{"2":{"155":1}}],["未启用",{"2":{"414":1}}],["未赋值的变量",{"2":{"76":1}}],["未导出",{"2":{"57":1}}],["未指定在列表中的牌组将无法使用",{"2":{"57":1}}],["未指定在列表中的牌组将不会暴露在",{"2":{"57":1}}],["灰色的牌组是隐藏的",{"2":{"57":1}}],["双重十字",{"0":{"741":1},"2":{"741":1}}],["双重十字规则骰点",{"0":{"712":1},"2":{"741":1}}],["双方可能都实现某种程度的成功",{"2":{"613":1}}],["双击",{"2":{"458":1}}],["双击运行",{"2":{"242":2,"539":1}}],["双十字掷骰",{"2":{"746":1}}],["双十字规则是一种多轮的骰点规则",{"2":{"636":1}}],["双十字骰点",{"0":{"636":1}}],["双十字",{"2":{"178":1,"572":1}}],["双下划线",{"2":{"57":1}}],["双引号不会对特殊字符转义",{"2":{"45":1}}],["那代价是什么呢",{"2":{"644":1}}],["那里会出现数字",{"2":{"252":1}}],["那样骰子也可以证明自己是正常人了",{"2":{"251":1}}],["那些已经描述过的且未发生改变的信息没有必要再重复一遍",{"2":{"230":1}}],["那常备翻译器显然是一个好选择",{"2":{"205":1}}],["那就再说一遍",{"2":{"230":1}}],["那就不要强行加入这个要素",{"2":{"222":1}}],["那就有可能是由内存不足引起的",{"2":{"199":1}}],["那就把牌堆打包成可以在海豹",{"2":{"56":1}}],["那是因为你的",{"2":{"183":1}}],["那么配置正确",{"2":{"686":1}}],["那么点击左侧",{"2":{"363":1}}],["那么你就需要修改自定义文案",{"2":{"361":1}}],["那么你只需要将该路径填入",{"2":{"262":1}}],["那么强烈建议你在",{"2":{"309":1}}],["那么强烈建议你下载并安装",{"2":{"309":1}}],["那么此时问题所对应的日志通常位于页面底端",{"2":{"225":1}}],["那么请尽可能详细地描述你遇到的困境",{"2":{"223":1}}],["那么请尽可能清晰完整地描述你想实现的功能",{"2":{"223":1}}],["那么请使用英文进行搜索",{"2":{"207":1}}],["那么请使用",{"2":{"207":1}}],["那么认真读完本节也足够你在海豹用户群中问出一个好问题",{"2":{"215":1}}],["那么可能你很快就能达成一开始的目的",{"2":{"210":1}}],["那么可以去插件仓库看一看",{"2":{"572":1}}],["那么可以按照本页后续的内容",{"2":{"206":1}}],["那么可以用",{"2":{"115":1}}],["那么当你最终回到一开始的目的",{"2":{"209":1}}],["那么就需要电脑保持开启的状态",{"2":{"272":1}}],["那么就有更大的概率直接检索到问题的解决方案",{"2":{"207":1}}],["那么就会试着捕捉张三",{"2":{"134":1}}],["那么在国内众多的内容平台中",{"2":{"207":1}}],["那么必应",{"2":{"207":1}}],["那么说明你需要的功能目前尚未实现",{"2":{"206":1}}],["那么很有可能你遇到的是此项目的已知问题",{"2":{"206":1}}],["那么不免会对本手册中的大量概念感到陌生",{"2":{"204":1}}],["那么有可能出现海豹核心突然中断运行的情况",{"2":{"199":1}}],["那么目前是无法使用这些语言编写海豹插件的",{"2":{"170":1}}],["那么",{"0":{"147":1},"2":{"185":1,"196":1,"541":1}}],["那么重复以上过程直到积分小于",{"2":{"145":1}}],["那么多的匹配方法",{"2":{"137":1}}],["那么命名为默认值",{"2":{"114":1,"117":1}}],["那么文案中将海豹命名为",{"2":{"114":1,"117":1}}],["那么建立扩展",{"2":{"112":1}}],["那么这个牌组将不导出",{"2":{"57":2}}],["那么这个牌组将不会暴露在",{"2":{"57":1}}],["└─names",{"2":{"430":1}}],["└─scripts",{"2":{"430":1}}],["└─lagrange",{"2":{"430":2}}],["└─reply",{"2":{"430":1}}],["└─",{"2":{"56":1}}],["└─1",{"2":{"56":1}}],["│",{"2":{"56":1,"430":3}}],["则开始记录指定的日志",{"2":{"727":1}}],["则开始记录本群的当前日志",{"2":{"727":1}}],["则不能创建",{"2":{"727":1}}],["则只在指定分组中进行查询",{"2":{"642":1}}],["则会失去相应的技能点数",{"2":{"615":1}}],["则守秘人可以快速推进行动",{"2":{"612":1}}],["则是",{"2":{"519":1}}],["则是一个布尔值",{"2":{"94":1}}],["则使用更早的一份备份重新替换",{"2":{"459":1}}],["则",{"2":{"420":1}}],["则调用",{"2":{"369":1}}],["则在",{"2":{"349":1}}],["则在生成",{"2":{"84":1}}],["则海豹核心将通过所有好友请求",{"2":{"349":1}}],["则更为常用",{"2":{"302":1}}],["则指定",{"2":{"167":1}}],["则跳过本回合",{"2":{"145":1}}],["则与之相同",{"2":{"141":1}}],["则变量",{"2":{"78":3}}],["则应该用",{"2":{"77":1}}],["则对应的词条会显示为",{"2":{"68":1}}],["则牌堆文件所在文件夹结构应是",{"2":{"56":1}}],["则可以在该项下面缩进一个空格",{"2":{"47":1}}],["告诉你的用户如何解压",{"2":{"56":1}}],["图书馆使用",{"2":{"614":1}}],["图标",{"2":{"363":1}}],["图例中所使用的软件为",{"2":{"56":1}}],["图片要放到那个文件夹下",{"2":{"56":1}}],["图",{"2":{"55":1,"56":1,"66":1,"375":2,"443":1}}],["发货单",{"2":{"653":1}}],["发帖询问",{"2":{"504":1}}],["发布设置",{"2":{"504":1}}],["发布配置",{"2":{"503":1,"504":1}}],["发布带图牌堆最常见的选择是牌堆文件连同图片打包成一个压缩包",{"2":{"56":1}}],["发出的消息",{"2":{"354":1,"649":1}}],["发生了超过普通人类认知的离谱事情",{"2":{"352":1}}],["发件邮箱",{"0":{"336":1}}],["发行版都是免费的",{"2":{"286":1}}],["发现的可能的",{"2":{"206":1}}],["发现我的海豹骰的数据库文件的磁盘占用出现了无法通过重启解决的故障",{"2":{"190":1}}],["发送消息会有随机延迟",{"2":{"689":1}}],["发送本地图片等大量功能目前不支持",{"2":{"499":1}}],["发送通知",{"2":{"449":1}}],["发送警告",{"2":{"355":1}}],["发送分享卡片等功能",{"2":{"116":1}}],["发送图片",{"0":{"443":1},"2":{"116":1}}],["发送图片等",{"0":{"55":1},"1":{"56":1}}],["发送者",{"2":{"116":1}}],["发送者信息",{"2":{"109":1}}],["发送的文本中",{"2":{"116":1}}],["发送平台",{"2":{"114":1,"117":1,"135":1}}],["发送时间等",{"2":{"114":1,"117":1,"135":1}}],["发送时间",{"2":{"109":1}}],["发起",{"0":{"13":1},"2":{"10":1}}],["个最高值",{"2":{"633":1}}],["个最低值",{"2":{"633":1}}],["个排除",{"2":{"633":2}}],["个数学运算",{"2":{"637":1}}],["个数",{"2":{"598":1,"704":1}}],["个数据库文件",{"2":{"457":1}}],["个内置扩展",{"2":{"569":1,"625":1}}],["个部分组成的格式",{"2":{"314":1}}],["个部分组成的",{"2":{"314":1}}],["个关键属性",{"2":{"144":1}}],["个选项",{"2":{"130":2,"131":1}}],["个选项并继续",{"2":{"130":2}}],["个参数之后的所有参数",{"2":{"110":1}}],["个参数是否在",{"2":{"110":1}}],["个被",{"2":{"94":1}}],["个人快捷指令",{"2":{"709":2}}],["个人",{"2":{"374":1}}],["个人骰子面数",{"2":{"172":1}}],["个人临时变量",{"2":{"172":1}}],["个人觉得可以视其为类",{"2":{"94":1}}],["个人变量",{"2":{"94":2,"172":1}}],["个",{"2":{"54":2,"147":1,"346":1,"598":1,"616":1,"635":1,"636":2,"674":1,"762":1,"763":1}}],["个项目",{"2":{"54":1}}],["个金币",{"2":{"52":2}}],["标志通过特定的关键字",{"2":{"723":1}}],["标志可以无序排列",{"2":{"723":1}}],["标志",{"2":{"723":1}}],["标签为",{"2":{"539":2}}],["标签页",{"2":{"357":1,"359":1}}],["标签页下",{"2":{"279":1}}],["标题",{"2":{"130":1}}],["标记",{"2":{"635":2,"636":1,"649":1}}],["标记为",{"2":{"115":1,"116":1,"117":1}}],["标记权重的项目不会被视为单个项目的多个副本",{"2":{"54":1}}],["标准的连接方式",{"2":{"515":1}}],["标准的连接方式之二",{"2":{"515":1}}],["标准的连接方式之一",{"2":{"515":1}}],["标准下",{"2":{"278":1}}],["标准",{"2":{"37":1,"66":3}}],["✨闪光海豹✨",{"2":{"53":3,"54":3}}],["爆金币",{"2":{"52":1}}],["研究旧牌堆",{"2":{"52":1,"54":1}}],["旧版文案",{"2":{"364":1}}],["旧协议本身不支持的原因",{"2":{"341":1,"513":1}}],["旧电脑",{"2":{"254":1}}],["旧文档保留在此处",{"2":{"184":1}}],["旧的实现",{"2":{"52":1,"54":1}}],["旧手册贡献者",{"2":{"3":1}}],["再阅读本节进行部署",{"2":{"537":1}}],["再点击卡片",{"2":{"686":1}}],["再点击",{"2":{"530":1}}],["再点击右上角的",{"2":{"503":1}}],["再次运行脚本",{"2":{"481":1}}],["再次启动脚本",{"2":{"480":1}}],["再进行一次完整性检查",{"2":{"459":1}}],["再按照相应图片的路径插入这样一段文本即可",{"2":{"375":1}}],["再按下键盘上的enter",{"2":{"196":1}}],["再输入",{"2":{"256":2}}],["再和大家说说你是怎么做的吧",{"2":{"230":1}}],["再用鼠标左键单击弹出菜单中带有解压到字样的选项就能解压这个压缩包",{"2":{"196":1}}],["再靠近一点",{"2":{"181":1}}],["再调用",{"2":{"138":1}}],["再发送给网络",{"2":{"135":1}}],["再使用",{"2":{"128":1,"261":1}}],["再注册到扩展中",{"2":{"113":1}}],["再组合到原字符串里",{"2":{"52":1}}],["再从同步后的主分支再新切分支进行操作",{"2":{"14":1}}],["ekgen",{"0":{"714":1},"2":{"572":1,"714":1,"746":1}}],["ek",{"0":{"713":1},"2":{"572":1,"713":1,"746":1}}],["emoklore",{"0":{"743":1},"2":{"572":1}}],["embed",{"2":{"532":1}}],["emulated",{"2":{"262":1,"442":1}}],["events",{"2":{"531":2}}],["every",{"2":{"344":1,"346":1}}],["ether",{"2":{"497":1}}],["edge",{"2":{"491":5,"539":2}}],["edxposed",{"2":{"257":2}}],["eula=true",{"2":{"480":2}}],["eula=false",{"2":{"480":1}}],["eula",{"2":{"480":2}}],["echo",{"2":{"480":1}}],["e",{"2":{"262":1}}],["es6",{"2":{"158":1,"161":1}}],["esbuild",{"2":{"154":2}}],["esm",{"2":{"154":1}}],["es",{"2":{"154":1}}],["error",{"2":{"130":2,"210":1,"299":1}}],["err",{"2":{"118":1,"119":2}}],["eatprefixwith",{"2":{"110":1}}],["end===",{"2":{"570":1}}],["end",{"2":{"430":1,"660":2,"727":2,"746":1}}],["endpoints",{"2":{"104":1}}],["endpoint",{"0":{"108":1},"2":{"94":1,"104":1,"105":1}}],["en",{"0":{"371":1,"613":1},"1":{"614":1,"615":1},"2":{"503":1,"504":1,"614":3,"615":2,"723":1,"746":1,"753":1}}],["enabling",{"2":{"481":1}}],["enable",{"2":{"108":1,"531":2}}],["enahncement",{"2":{"206":1}}],["enough",{"0":{"198":1}}],["entered",{"2":{"482":1}}],["enteredtime",{"2":{"106":1}}],["enter",{"2":{"239":1}}],["entries",{"2":{"129":1}}],["elif",{"2":{"78":1}}],["elseif",{"2":{"78":1}}],["else",{"2":{"78":5,"83":1,"119":1,"127":7,"133":2,"135":1,"136":2,"139":1,"183":2}}],["elementplus",{"2":{"5":1}}],["exit",{"2":{"460":2,"683":1,"731":1}}],["exists",{"2":{"118":1,"119":2}}],["executable",{"2":{"539":1}}],["exe",{"2":{"196":2,"239":1,"242":2,"274":1,"292":1,"460":4,"539":1}}],["examp",{"2":{"114":1}}],["examples",{"2":{"94":1,"105":1}}],["example",{"2":{"64":1,"119":2,"139":3}}],["extensions",{"2":{"583":1}}],["extinfo",{"2":{"113":1,"128":2}}],["extinactivebyname",{"2":{"106":1}}],["extinactive",{"2":{"106":1}}],["extgetactive",{"2":{"106":1}}],["extclear",{"2":{"106":1}}],["extactive",{"2":{"106":1}}],["extauthor",{"2":{"94":3}}],["extname",{"2":{"94":5}}],["ext",{"0":{"100":1,"625":1},"2":{"72":1,"94":35,"98":2,"112":6,"114":1,"115":2,"116":2,"117":12,"119":11,"121":9,"127":26,"129":14,"130":37,"131":3,"133":11,"134":9,"135":3,"137":7,"138":6,"139":39,"141":2,"142":7,"150":1,"151":1,"340":1,"569":7,"625":7,"656":1,"681":1,"721":1}}],["extra",{"2":{"64":2,"242":1,"431":1,"687":1}}],["excel",{"0":{"68":1},"2":{"68":3}}],["expr",{"2":{"735":2}}],["exports",{"2":{"57":2,"156":1,"430":1,"729":1}}],["export",{"2":{"57":1,"61":2,"64":2,"117":1,"592":1,"663":1,"729":2}}],["exp",{"2":{"52":2}}],["插件已经正确安装",{"2":{"481":1}}],["插件不兼容",{"2":{"479":2}}],["插件需要",{"2":{"478":1}}],["插件脚本",{"2":{"430":1}}],["插件设置",{"0":{"408":1}}],["插件列表并进行管理",{"2":{"405":1}}],["插件列表",{"0":{"405":1},"2":{"405":1}}],["插件是什么",{"0":{"402":1}}],["插件功能",{"2":{"401":1}}],["插件功能是否开启",{"2":{"142":1}}],["插件的使用",{"0":{"483":1},"1":{"484":1,"485":1,"486":1,"487":1,"488":1}}],["插件的使用方法不同",{"2":{"409":1}}],["插件的",{"2":{"477":1}}],["插件的更新",{"0":{"406":1}}],["插件的支持",{"2":{"404":1}}],["插件的管理页面",{"2":{"404":1}}],["插件的方式来在海豹中使用",{"2":{"170":1}}],["插件的工程化编写是",{"2":{"162":1}}],["插件的工程化编写",{"0":{"148":1,"162":1},"1":{"149":1,"150":1,"151":1,"152":1,"153":1,"154":1,"155":1,"156":1},"2":{"162":2}}],["插件作者只需要指定目标海豹版本即可",{"2":{"167":1}}],["插件名",{"2":{"165":2}}],["插件编写",{"0":{"160":1},"1":{"161":1,"162":1}}],["插件元数据",{"0":{"159":1},"2":{"159":1,"164":1,"167":1}}],["插件就是运行在一个非浏览器环境中",{"2":{"158":1}}],["插件文件中完成",{"2":{"147":1}}],["插件也可以使用",{"2":{"138":1}}],["插件若要在",{"2":{"138":1}}],["插件仓库",{"2":{"114":1,"403":1,"572":1}}],["插件",{"0":{"401":1,"403":1,"404":1,"409":1,"410":1,"481":1},"1":{"402":1,"403":1,"404":1,"405":2,"406":2,"407":2,"408":2,"409":1,"410":1},"2":{"93":1,"168":1,"170":1,"199":1,"403":1,"408":1,"410":1,"572":2,"744":1}}],["插件实现也是可以的",{"2":{"25":1}}],["插入文本为",{"2":{"375":1}}],["插入海豹内置脚本语言",{"0":{"59":1}}],["插入掷骰表达式",{"0":{"52":1}}],["捏碎所有薯片",{"2":{"51":1}}],["泡面偷走叉子调料包",{"2":{"51":1}}],["拷打木落三次",{"2":{"51":3}}],["拷打木落",{"2":{"51":8}}],["带有权重调整的项目不会被视为在牌组中有多个副本",{"2":{"51":1}}],["指骰主能通过浏览器访问到的管理后台",{"2":{"307":1}}],["指明了其依赖",{"2":{"165":1}}],["指定面数的骰池",{"2":{"704":1}}],["指定默认查询分组",{"0":{"643":1}}],["指定值前面的加号",{"2":{"615":1}}],["指定的成长值",{"2":{"615":1}}],["指定当成长检定成功与失败时的技能成长点数",{"2":{"615":1}}],["指定成长值",{"0":{"615":1}}],["指定损失的理智",{"0":{"608":1}}],["指定两个其他人对抗",{"0":{"606":1}}],["指定字数",{"2":{"421":1}}],["指定分组",{"2":{"364":1}}],["指定类别",{"2":{"364":1}}],["指定依赖插件涉及到对应的插件名",{"2":{"165":1}}],["指定依赖的格式为",{"2":{"165":1}}],["指定依赖的格式",{"0":{"165":1}}],["指定你的扩展的目标海豹版本",{"2":{"159":1}}],["指定你的扩展依赖的其他扩展",{"2":{"159":1}}],["指定所有显示的牌组",{"2":{"57":1}}],["指令使角色进行长休",{"2":{"759":1}}],["指令使用法术",{"2":{"758":1}}],["指令使用",{"2":{"703":1}}],["指令设定角色的法术位",{"2":{"758":1}}],["指令设置角色名",{"2":{"589":1}}],["指令相冲突的部分",{"2":{"747":1}}],["指令与",{"2":{"747":1}}],["指令标志",{"0":{"723":1}}],["指令标志组成",{"2":{"719":1}}],["指令返回的帮助信息",{"2":{"722":1}}],["指令可以有别名",{"2":{"721":1}}],["指令前面都带有前缀",{"2":{"720":1}}],["指令前缀一般是便于输入的中英文句号",{"2":{"720":1}}],["指令前缀",{"0":{"720":1}}],["指令参数",{"0":{"722":1},"2":{"719":1}}],["指令参数与返回值",{"0":{"115":1}}],["指令是和骰子互动的基本方式",{"2":{"719":1}}],["指令回复",{"0":{"719":1},"1":{"720":1,"721":1,"722":1,"723":1},"2":{"718":1}}],["指令时允许省略加骰线",{"2":{"711":1}}],["指令响应测试",{"0":{"708":1}}],["指令对",{"2":{"678":1}}],["指令的行为与预期不符",{"2":{"721":1}}],["指令的作用是管理上述第二种群聊无关角色卡",{"2":{"641":1}}],["指令的表达式在不包含骰子算符时",{"2":{"628":1}}],["指令的特殊说明",{"2":{"504":1}}],["指令查看自己和所在群聊的统一",{"2":{"623":1}}],["指令查看你的账号",{"2":{"332":1}}],["指令格式列出",{"2":{"592":1}}],["指令快速上手",{"2":{"579":1}}],["指令了解你需要注意哪些事项",{"2":{"718":1}}],["指令了",{"2":{"569":1}}],["指令兼容性",{"0":{"548":1}}],["指令下有两个步骤",{"2":{"535":1}}],["指令简介",{"2":{"504":1}}],["指令列表",{"2":{"504":1}}],["指令介绍",{"2":{"503":1}}],["指令名称",{"2":{"746":1}}],["指令名只要求在同一扩展内不重复",{"2":{"721":1}}],["指令名",{"0":{"721":1},"2":{"503":1,"719":1}}],["指令名字",{"2":{"114":1,"117":1}}],["指令配置",{"0":{"503":1},"2":{"503":1}}],["指令无法使用可以看看",{"2":{"430":1}}],["指令测试界面的右上角提供一个切换开关",{"2":{"427":1}}],["指令测试",{"0":{"427":1},"2":{"426":2}}],["指令式编程和函数式编程",{"2":{"402":1}}],["指令退群",{"2":{"333":1,"690":1}}],["指令添加",{"0":{"326":1}}],["指令应该实现以下动作",{"2":{"147":1}}],["指令中添加",{"2":{"146":1}}],["指令上下文",{"2":{"118":1,"123":1}}],["指令解析器会将指令信息解析",{"2":{"117":1}}],["指令",{"0":{"342":1,"484":1,"559":1},"1":{"485":1,"486":1},"2":{"117":2,"146":2,"342":1,"343":1,"503":1,"708":3,"709":2,"746":6,"757":1}}],["指令核心执行流程",{"0":{"116":1}}],["指令信息",{"2":{"114":1}}],["指令进行死亡豁免",{"2":{"760":1}}],["指令进行",{"2":{"70":1}}],["指令会对词条进行模糊检索",{"2":{"68":1}}],["指令会列出所有允许抽取的牌组",{"2":{"57":1}}],["指令执行结束后",{"2":{"51":1}}],["指此次抽取后抽取的牌组保持原样",{"2":{"51":1}}],["尺度是一次抽牌指令",{"2":{"51":1}}],["每有一个骰子骰出",{"2":{"715":1}}],["每有一个大于等于加骰线",{"2":{"635":1}}],["每有一个大于等于成功线",{"2":{"635":1}}],["每位玩家都需要创造一位调查员",{"2":{"585":1}}],["每隔",{"2":{"513":1}}],["每批次内退出两个群将间隔",{"2":{"350":1}}],["每两批之间将会间隔你所指定的分钟数",{"2":{"350":1}}],["每秒",{"2":{"346":1}}],["每",{"2":{"346":1,"644":1}}],["每记录",{"2":{"345":1}}],["每行日志的开头都带有时间戳",{"2":{"225":1}}],["每骰结果可能是",{"2":{"178":1}}],["每一轮骰点被包含在一对花括号",{"2":{"635":1,"636":1}}],["每一轮游戏中",{"2":{"145":1}}],["每一项公共条件是一个逻辑判断",{"2":{"417":1}}],["每一个扩展提供若干指令和其他功能",{"2":{"625":1}}],["每一个回复结果可以有多条回复文本",{"2":{"422":1}}],["每一个回复项可以有一个或者多个",{"2":{"422":1}}],["每一个自定义回复项都包括两个部分",{"2":{"418":1}}],["每一个文案都以类似下图的格式展示",{"2":{"363":1}}],["每一个身份都有一个对应的数字",{"2":{"120":1}}],["每一行指定一个",{"2":{"166":1}}],["每天刷新的",{"2":{"701":1}}],["每天凌晨",{"2":{"350":1}}],["每天触发",{"2":{"142":1}}],["每天定时执行",{"2":{"141":1}}],["每日新闻",{"2":{"142":1,"164":2,"165":3,"166":2}}],["每日",{"2":{"141":1}}],["每页放多少个选项",{"2":{"130":1}}],["每群每天一次",{"0":{"83":1}}],["每个单项都是",{"2":{"659":1}}],["每个",{"2":{"159":1}}],["每个玩家都要决定",{"2":{"145":1}}],["每个玩家创建一个角色",{"2":{"145":1}}],["每个角色有",{"2":{"144":1}}],["每个身份所对应的数字如下表所示",{"2":{"120":1}}],["每个牌组都可以单独控制云端相关设置",{"2":{"64":1}}],["每个模块都存放在对应的仓库中",{"2":{"5":1}}],["每次导入数据前都进行一次导出",{"2":{"442":1,"577":1}}],["每次获取有效期",{"2":{"331":1}}],["每次抽取这个牌组时",{"2":{"64":1}}],["每次",{"2":{"62":1}}],["每次都相当于从全新牌组中抽取",{"2":{"51":1}}],["追尾了一辆高级黑色轿车",{"2":{"50":3,"57":6}}],["追尾了",{"2":{"50":3,"57":9}}],["早上",{"2":{"50":3,"57":6}}],["保护好你的骰子",{"2":{"622":1}}],["保留一定时间内",{"2":{"318":1,"319":1}}],["保留一定数量",{"2":{"318":1,"319":1}}],["保存到角色卡列表",{"2":{"747":1}}],["保存",{"2":{"699":1}}],["保存后重启软件",{"2":{"686":1}}],["保存后点击左上角",{"2":{"686":1}}],["保存计算表达式",{"2":{"591":1}}],["保存在海豹的主程序所在目录",{"2":{"458":1}}],["保存前不要切换左侧的分类",{"2":{"363":1}}],["保存设置",{"2":{"315":1}}],["保存文件时务必确认开启了操作系统的扩展名显示",{"2":{"48":1}}],["保持容器与宿主机网络隔离",{"0":{"497":1}}],["保持耐心",{"0":{"191":1,"232":1},"2":{"191":1,"232":1}}],["保持",{"0":{"14":1}}],["保持和上游同步",{"2":{"12":1}}],["your",{"2":{"480":1,"532":2}}],["you",{"2":{"480":1}}],["y",{"0":{"310":1},"1":{"311":1},"2":{"256":1,"635":6,"636":4,"746":2}}],["yml",{"0":{"491":1},"2":{"48":1,"491":2,"498":1}}],["yamlalias",{"2":{"583":1}}],["yaml幸运转盘",{"2":{"59":1}}],["yamlcommand",{"2":{"57":1}}],["yaml捕捉海豹",{"2":{"53":1}}],["yaml时间点",{"2":{"50":1}}],["yamlname",{"2":{"48":1,"58":1,"491":2}}],["yamltrpg",{"2":{"47":1}}],["yaml海豹核心",{"2":{"46":2}}],["yaml",{"0":{"44":1,"45":1,"46":1,"47":1,"311":1},"2":{"30":1,"31":2,"45":1,"46":2,"47":7,"48":3,"50":2,"57":2,"94":1,"103":1,"301":1,"311":1,"383":1,"414":1,"415":1,"431":3,"583":1,"699":1}}],["应填写为",{"2":{"349":1}}],["应填入有效的",{"2":{"141":1}}],["应填入",{"2":{"141":2}}],["应用内设置",{"0":{"455":1}}],["应用启动管理",{"2":{"450":1}}],["应用和服务",{"2":{"447":1,"450":1}}],["应用管理",{"2":{"447":1}}],["应用详情",{"2":{"447":1}}],["应用信息",{"2":{"447":3,"453":1}}],["应用分身",{"2":{"440":1}}],["应用双开",{"2":{"440":1}}],["应用进行注入等的危险操作需要",{"2":{"256":1}}],["应用举例",{"2":{"181":1}}],["应该怎么做",{"2":{"412":1}}],["应该怎么做的办法",{"2":{"192":1,"234":1}}],["应该",{"2":{"94":1,"104":1}}],["应该为",{"2":{"31":1}}],["应是一个整数",{"2":{"48":1}}],["牌组关键字列表",{"2":{"652":1}}],["牌组数量",{"2":{"652":1}}],["牌组名称",{"2":{"652":2,"653":1}}],["牌组4",{"2":{"81":1}}],["牌组3",{"2":{"81":1}}],["牌组2",{"2":{"81":1}}],["牌组1",{"2":{"81":1}}],["牌组的别名",{"2":{"61":1}}],["牌组的隐藏和导出控制",{"0":{"57":1}}],["牌组中仍被视为只有",{"2":{"54":1}}],["牌组",{"2":{"51":2}}],["牌组表",{"2":{"48":1,"58":1}}],["牌堆信息",{"2":{"652":1}}],["牌堆和自定义回复都是海豹提供的扩展性功能",{"2":{"650":1}}],["牌堆云端内容",{"0":{"389":1}}],["牌堆更新",{"0":{"388":1}}],["牌堆更新与云牌堆",{"0":{"387":1},"1":{"388":1,"389":1}}],["牌堆更新日期",{"2":{"48":2}}],["牌堆被读取到了",{"2":{"385":1}}],["牌堆管理",{"0":{"655":1},"2":{"385":1}}],["牌堆仓库",{"2":{"384":1}}],["牌堆以",{"2":{"383":1}}],["牌堆以某种结构化的格式保存成文件",{"2":{"383":1}}],["牌堆是什么",{"0":{"383":1}}],["牌堆名>",{"2":{"119":2}}],["牌堆名称",{"2":{"118":1,"119":2}}],["牌堆与自定义回复的结合",{"0":{"81":1}}],["牌堆支持云端内容",{"2":{"64":1}}],["牌堆配置云端内容",{"0":{"64":1}}],["牌堆内容不是一成不变的",{"2":{"58":1}}],["牌堆列表里并没有出现那个文件",{"2":{"224":1}}],["牌堆列表",{"2":{"57":1}}],["牌堆没有支持这一功能",{"2":{"57":1}}],["牌堆中定义了",{"2":{"57":1}}],["牌堆中",{"2":{"57":4,"61":1}}],["牌堆中的表示正好相反",{"2":{"50":1}}],["牌堆打包",{"0":{"56":1}}],["牌堆抽取结果字符串中",{"2":{"50":1}}],["牌堆语法",{"0":{"49":1},"1":{"50":1,"51":1,"52":1,"53":1,"54":1,"55":1,"56":1,"57":1,"58":1,"59":1}}],["牌堆文件",{"2":{"190":1,"226":1,"430":1}}],["牌堆文件扩展名正确吗",{"2":{"48":1}}],["牌堆文件的编码",{"2":{"30":1}}],["牌堆协议",{"2":{"48":3}}],["牌堆版本",{"2":{"48":3}}],["牌堆简介",{"2":{"48":3}}],["牌堆创建日期",{"2":{"48":2}}],["牌堆作者可以实时调整云端内容",{"2":{"389":1}}],["牌堆作者",{"2":{"48":3}}],["牌堆的基础上修改了牌堆",{"2":{"224":1}}],["牌堆的更多功能",{"0":{"60":1},"1":{"61":1,"62":1,"63":1,"64":1}}],["牌堆的标题",{"2":{"48":3}}],["牌堆的最基本格式如上",{"2":{"48":3}}],["牌堆时遇上了看不懂的内容",{"2":{"47":1}}],["牌堆区分开",{"2":{"37":1}}],["牌堆",{"0":{"382":1,"650":1},"1":{"383":1,"384":1,"385":1,"386":1,"387":1,"388":1,"389":1,"390":1,"651":1,"652":1,"653":1,"654":1,"655":1,"656":1},"2":{"15":1,"37":1,"199":1,"383":2,"386":1,"651":1,"652":1}}],["恼",{"2":{"48":3}}],["两字可以触发大于等于",{"2":{"421":1}}],["两部分组成",{"2":{"347":1}}],["两部分",{"2":{"285":1,"516":1}}],["两者组合时",{"2":{"278":1}}],["两者仅需保留一行",{"2":{"48":1}}],["两次确认后出现",{"2":{"242":1}}],["两种模式",{"2":{"709":1}}],["两种架构",{"2":{"539":1}}],["两种触发方式可以同时使用",{"2":{"320":1}}],["两种方法往往是相辅相成的",{"2":{"211":1}}],["两种写法实现效果相同",{"2":{"84":1}}],["两个点数都可以是包含骰点的表达式",{"2":{"615":1}}],["两个其他玩家",{"2":{"606":1}}],["两个页面",{"2":{"206":1,"218":1}}],["两个部分",{"2":{"70":1}}],["两个牌组",{"2":{"48":1}}],["田所浩二",{"2":{"48":4}}],["野兽牌堆",{"2":{"48":6,"58":3,"61":1,"64":1}}],["哼哼哼啊啊啊啊啊",{"2":{"48":4,"58":3,"61":1}}],["快速上手",{"0":{"745":1},"1":{"746":1,"747":1,"748":1,"749":1,"750":1,"751":1,"752":1,"753":1,"754":1,"755":1,"756":1,"757":1,"758":1,"759":1,"760":1}}],["快速文档查找",{"0":{"645":1}}],["快速交谈",{"2":{"582":1}}],["快速了解和其它骰系的区别",{"2":{"579":1}}],["快速开始",{"0":{"158":1,"537":1},"1":{"538":1,"539":1,"540":1,"541":1,"542":1,"543":1,"544":1,"545":1,"546":1},"2":{"17":1,"716":1}}],["快捷指令示例",{"2":{"709":1}}],["快捷指令触发",{"2":{"374":1}}],["快捷指令",{"0":{"374":1},"2":{"374":4,"709":1}}],["快点更新",{"2":{"78":2}}],["快端上来罢",{"2":{"48":5,"58":3,"61":1}}],["而严禁直接移出群聊",{"2":{"718":1}}],["而机器人并不会主动向你发送消息",{"2":{"708":1}}],["而且托盘点不出来右键菜单",{"0":{"696":1}}],["而只迁移数据部分",{"2":{"575":1}}],["而再次进行导入",{"2":{"442":1,"577":1}}],["而后两者就对应了上述的程序问题",{"2":{"299":1}}],["而后者应填入",{"2":{"141":1}}],["而低位端口",{"2":{"278":1}}],["而非互联网上的其他设备",{"2":{"278":1}}],["而海豹的",{"2":{"278":1}}],["而海豹会试图连接到这个端口",{"2":{"278":1}}],["而客户端应用程序会试图连接到此端口",{"2":{"278":1}}],["而端口号是这个屋子里住户的编号",{"2":{"278":1}}],["而端口用于区分同一设备上的不同应用",{"2":{"278":1}}],["而服务器正是这样一种尽可能稳定运行的",{"2":{"272":1}}],["而在编程领域和更古早的时期",{"2":{"302":1}}],["而在开源项目领域",{"2":{"279":1}}],["而在安卓",{"2":{"255":1}}],["而在日志中能看到",{"2":{"158":1}}],["而模拟器中使用",{"2":{"254":1}}],["而手机厂商对",{"2":{"254":1}}],["而你在配置海豹的过程中最常见的是",{"2":{"278":1}}],["而你一遇到问题就立刻开始写求助消息",{"2":{"225":1}}],["而你遇到的情况",{"2":{"206":1}}],["而闭门造车只会延长你设计方案到发现错误的时间",{"2":{"211":1}}],["而其出处往往具有更优质的排版",{"2":{"207":1}}],["而其他文件仍然在压缩包之中",{"2":{"196":1}}],["而搜索引擎往往只能找到泛化的知识",{"2":{"206":1}}],["而如果你想要指定这个压缩包解压到指定的文件夹",{"2":{"196":1}}],["而截图能避免这些问题",{"2":{"187":1,"201":1}}],["而当加载该插件的海豹版本为",{"2":{"167":1}}],["而感到焦头烂额",{"2":{"137":1}}],["而一个扩展可以包含多条指令",{"2":{"112":1}}],["而",{"2":{"94":1,"262":1,"302":2,"307":1,"512":1,"594":1}}],["而不包括自己",{"2":{"606":1}}],["而不属于任何一个回复项",{"2":{"417":1}}],["而不得不频繁复制黏贴清空指令的情况",{"2":{"70":1}}],["而不是包含秒数",{"2":{"314":1}}],["而不是继续使用",{"2":{"309":1}}],["而不是海豹的",{"2":{"242":1}}],["而不是对他们发泄自己的主观情绪",{"2":{"191":1,"232":1}}],["而不是",{"2":{"66":1,"539":1}}],["而不是在编写时直接换行",{"2":{"66":1}}],["而是私聊发送给指令发起者",{"2":{"601":1}}],["而是统一使用",{"2":{"585":1}}],["而是在为四个",{"2":{"82":1}}],["而是",{"2":{"66":1,"97":1}}],["而是新切分支进行编辑",{"2":{"12":1}}],["而使用牌堆的用户需要手动去获取最新的牌堆",{"2":{"58":1}}],["而牌堆就是可以提供一些",{"2":{"48":1}}],["b3=",{"2":{"631":1}}],["b3",{"2":{"631":1}}],["b=",{"2":{"631":1}}],["b属性表达式",{"2":{"606":1}}],["b2",{"2":{"603":1}}],["b2=1",{"2":{"598":1}}],["b|p",{"2":{"598":1,"610":1,"746":1}}],["bb",{"2":{"420":1}}],["bbb",{"2":{"183":2}}],["botlist",{"0":{"649":1},"2":{"649":4,"688":1}}],["botfather",{"2":{"535":2}}],["bot",{"0":{"343":1,"469":1,"532":1,"624":1},"2":{"294":1,"340":1,"343":1,"354":2,"464":1,"466":2,"469":2,"470":1,"522":1,"531":1,"532":3,"533":1,"535":1,"542":1,"624":4,"683":2,"691":1,"708":1,"727":1,"746":2}}],["boolval",{"2":{"139":2}}],["bool",{"2":{"94":7,"105":2,"110":2,"138":2}}],["binaries",{"2":{"460":1}}],["bing",{"2":{"207":1}}],["bid=$",{"2":{"135":1}}],["bid",{"2":{"135":2}}],["buff",{"0":{"670":1},"1":{"671":1},"2":{"665":1,"670":15,"671":1,"757":1}}],["bulidtools",{"2":{"479":1}}],["bukkit",{"2":{"479":3}}],["build+日期",{"2":{"538":1}}],["build",{"2":{"150":1,"151":2,"152":4,"154":1,"156":2,"539":2}}],["bug",{"0":{"7":1},"2":{"5":1,"7":2,"187":1,"192":2,"193":2,"201":1,"202":2,"206":3,"233":2,"279":1,"504":1,"538":1}}],["brd",{"2":{"497":2}}],["broadcast",{"2":{"497":1}}],["brainshop",{"2":{"135":1}}],["break",{"2":{"121":4,"139":7}}],["brief",{"2":{"48":2,"66":1,"67":1}}],["beta",{"2":{"539":2}}],["below",{"2":{"480":1}}],["be",{"2":{"110":1}}],["blame",{"2":{"99":3}}],["btoa",{"2":{"94":1,"158":1}}],["backup",{"2":{"622":1}}],["backups",{"2":{"315":1,"459":1,"491":7,"492":1,"539":1,"574":1,"575":1}}],["bad",{"2":{"539":1}}],["bak",{"2":{"315":2}}],["bat",{"0":{"252":1},"2":{"239":2,"242":2,"259":1,"262":1,"480":5,"481":1}}],["basic",{"2":{"532":1}}],["bashsealdice",{"2":{"694":1}}],["bashsudo",{"2":{"684":1}}],["bashfind",{"2":{"576":1}}],["bashchmod",{"2":{"539":1}}],["bash$",{"2":{"497":1,"541":2}}],["bashdocker",{"2":{"492":1,"493":1,"495":1,"539":1}}],["bash",{"2":{"302":1,"695":1}}],["bashpnpm",{"2":{"151":2}}],["bashnpm",{"2":{"151":2}}],["baseinfo",{"2":{"108":1}}],["base64",{"2":{"94":2,"158":1}}],["base64string",{"2":{"94":1}}],["ban|warn|trust",{"2":{"623":1}}],["bantime",{"2":{"125":1}}],["banlistinfoitem",{"2":{"125":1,"126":1}}],["ban",{"0":{"623":1},"2":{"94":5,"120":2,"123":2,"124":2,"125":1,"126":1,"127":8,"460":1,"623":7}}],["bandizip",{"2":{"56":1}}],["bye",{"2":{"624":1,"683":1,"746":1}}],["by",{"2":{"48":3,"90":1,"480":1}}],["b",{"2":{"47":2,"66":4,"72":3,"85":1,"98":2,"115":4,"116":2,"117":2,"178":1,"570":2,"598":1,"606":2,"637":1,"649":5}}],["只要存在暴击的骰子",{"2":{"636":1}}],["只要大概知道有什么指令",{"2":{"20":1}}],["只显示被禁用",{"2":{"623":1}}],["只陈述结果",{"2":{"612":1}}],["只在你明确知道为何要使用",{"2":{"538":1}}],["只需一个不到",{"2":{"549":1}}],["只需简单修改",{"2":{"491":1}}],["只需要直接在匹配文本中写出形如",{"2":{"74":1}}],["只有一个设备",{"0":{"437":1}}],["只有在你完全确定某进程的用途与功能时",{"2":{"199":1}}],["只会看到单独的",{"2":{"426":1}}],["只会减慢排查问题和解决问题的速度",{"2":{"190":1}}],["只能在当前设备上管理海豹",{"2":{"347":1}}],["只能在牌堆内部调用",{"2":{"57":1}}],["只对",{"2":{"346":1}}],["只是编写需要遵循对应的结构方便读取",{"2":{"383":1}}],["只是给你一个或许更好的建议",{"2":{"185":1,"214":1}}],["只是处理了一下发送者传过来的消息",{"2":{"135":1}}],["只列出其中主要的一些文件",{"2":{"152":1}}],["只被视为一次指令",{"2":{"51":1}}],["只允许使用空格",{"2":{"46":1}}],["缩进的空格数并不重要",{"2":{"46":1}}],["缩进的长度表示了层级",{"2":{"46":1}}],["缩进不允许",{"2":{"46":1}}],["缩进是有含义的",{"2":{"46":2}}],["~",{"2":{"45":1}}],["welcome",{"0":{"707":1},"2":{"700":1,"707":3}}],["websocket",{"2":{"242":1}}],["webapi",{"2":{"157":1}}],["webui",{"0":{"307":1,"684":1,"699":1},"2":{"141":3,"158":2,"199":1,"225":1,"278":2,"299":1,"307":4,"315":1,"347":1,"349":1,"350":1,"426":3,"428":1,"444":1,"539":3,"542":1,"543":1,"551":1,"569":1,"622":4,"642":1,"681":1,"683":1,"684":4,"686":1,"690":1,"691":1}}],["web",{"2":{"62":1,"158":1,"514":1,"518":1,"524":1}}],["ww",{"0":{"711":1},"2":{"572":1,"711":5,"746":1}}],["wod",{"0":{"635":1,"711":1},"2":{"572":1,"635":2,"740":2,"746":1}}],["workspace",{"2":{"532":1}}],["workplace",{"2":{"532":1}}],["words",{"2":{"89":1,"90":2}}],["world",{"0":{"740":1},"2":{"45":1,"158":3,"740":1}}],["write",{"2":{"532":6}}],["w",{"0":{"305":1},"1":{"306":1,"307":1,"308":1,"309":1}}],["ws",{"2":{"190":1,"242":2,"258":1,"265":5,"278":1,"491":1,"494":2,"515":1,"521":4}}],["who",{"0":{"764":1},"2":{"569":1,"764":1}}],["whitespace",{"2":{"209":2}}],["why",{"2":{"189":1,"217":1}}],["what",{"2":{"189":1,"209":1,"217":1}}],["when",{"2":{"189":1,"217":1}}],["where",{"2":{"189":1,"217":1,"460":6}}],["wq",{"2":{"96":1}}],["walleq",{"2":{"94":2}}],["warning",{"2":{"89":1,"90":1,"210":1,"299":1}}],["wifi",{"0":{"685":1},"1":{"686":1,"687":1},"2":{"686":1}}],["wip",{"2":{"515":3,"527":1}}],["wiki",{"2":{"346":1,"402":1}}],["win",{"2":{"262":2}}],["window",{"2":{"262":2}}],["windows",{"0":{"308":1,"309":1,"693":1,"694":1},"1":{"694":1},"2":{"56":1,"93":1,"199":1,"224":1,"227":1,"239":1,"252":1,"262":2,"272":2,"285":1,"292":5,"302":1,"308":1,"309":6,"457":1,"460":2,"478":1,"514":4,"516":1,"538":3,"684":1,"686":3,"693":1}}],["winscp",{"2":{"224":1}}],["winrar",{"2":{"196":1}}],["with",{"2":{"37":2}}],["都市传说不再是什么可以轻松无视的",{"2":{"740":1}}],["都存在掷骰检定指令",{"2":{"721":1}}],["都被设计为可插拔的",{"2":{"569":1}}],["都被视为注释",{"2":{"43":1}}],["都占用",{"2":{"513":1}}],["都有说明",{"2":{"506":1}}],["都有可能和你所遇到的问题有关",{"2":{"227":1}}],["都能触发该回复项",{"2":{"420":1}}],["都可以被用作前缀",{"2":{"720":1}}],["都可以进行",{"2":{"414":1}}],["都可以尝试使用自定义回复",{"2":{"412":1}}],["都可以在右侧看见当前分类的",{"2":{"362":1}}],["都会给出",{"2":{"389":1}}],["都会调用该接口获取该牌组的最新数据",{"2":{"62":1}}],["都不会出现用户可直接读出的报错信息",{"2":{"252":1}}],["都不具备未卜先知的能力",{"2":{"187":1,"201":1}}],["都将帮助回答者更有效地了解你的背景信息",{"2":{"221":1}}],["都将被看作是字符串",{"2":{"34":1}}],["都重新去查找学习这个概念所包含的下属知识",{"2":{"209":1}}],["都挂载在这个内置对象上",{"2":{"158":1}}],["都需要用到海豹所提供的一种简单的脚本语言",{"2":{"92":1}}],["行内注释",{"0":{"42":1}}],["行政法规",{"2":{"15":1}}],["分别代表",{"2":{"634":1}}],["分别填入",{"2":{"491":1}}],["分别对每个",{"2":{"491":1}}],["分别对应着该回复项的触发条件和骰子的回复动作",{"2":{"418":1}}],["分组>",{"2":{"722":1}}],["分组名分别是",{"2":{"642":1}}],["分组名",{"2":{"642":2,"643":1}}],["分组选择中存在一个",{"2":{"396":1}}],["分组",{"2":{"364":1,"396":2}}],["分",{"2":{"344":1}}],["分离部署为海豹核心和",{"2":{"515":1}}],["分离部署登录流程",{"0":{"242":1}}],["分离部署",{"0":{"515":1},"1":{"516":1,"517":1,"518":1,"519":1,"520":1,"521":1,"522":1,"523":1,"524":1,"525":1,"526":1,"527":1},"2":{"190":1,"242":1,"515":1}}],["分号的使用",{"2":{"174":1}}],["分钟",{"2":{"172":1,"331":1,"686":2}}],["分为",{"2":{"68":1}}],["分割",{"2":{"39":1,"40":1}}],["分隔符",{"2":{"371":1,"374":1}}],["分隔即可",{"2":{"68":1}}],["分隔",{"2":{"37":1,"174":1}}],["空白名片",{"2":{"733":1}}],["空气",{"2":{"129":1}}],["空",{"2":{"38":1,"374":1}}],["由代骰",{"2":{"593":2,"639":1}}],["由工具生成了录入数据的指令",{"2":{"582":1}}],["由海豹核心主动连接",{"2":{"515":2}}],["由高到低分别是",{"2":{"120":1}}],["由于搜索库的限制",{"2":{"642":1}}],["由于多项式",{"2":{"637":1}}],["由于等于劣势骰",{"2":{"632":1}}],["由于惩罚骰",{"2":{"631":1}}],["由于骰4个6面骰",{"2":{"628":1}}],["由于骰5个24面骰",{"2":{"628":1}}],["由于天气不错",{"2":{"628":1}}],["由于要私聊发送检定结果",{"2":{"601":1}}],["由于属性和技能在检定时基本不做区分",{"2":{"585":1}}],["由于笔者的游戏栈",{"2":{"582":1}}],["由于官方",{"2":{"513":1}}],["由于通过",{"2":{"491":1,"496":1}}],["由于模拟器对性能要求较高",{"2":{"254":1}}],["由于项目的特殊性",{"2":{"239":1}}],["由于你并没有领会每一个细节",{"2":{"210":1}}],["由于经过了",{"2":{"119":1}}],["由于",{"2":{"73":2,"236":1,"261":1,"262":1,"292":1,"334":1,"471":1,"499":1,"514":1,"519":1,"522":1,"549":1,"550":1}}],["由于海豹的",{"2":{"68":1}}],["由",{"2":{"38":3,"39":1,"40":1,"77":1,"314":2,"515":1,"602":1}}],["值直葬",{"2":{"584":1}}],["值为",{"2":{"259":1}}],["值",{"2":{"138":1,"665":2,"670":1,"746":1}}],["值可以是如下类型",{"2":{"38":1,"45":1}}],["值需要是下述类型之一",{"2":{"33":1}}],["将本群的当前日志设定为空",{"2":{"727":1}}],["将本群的当前日志设定成新日志",{"2":{"727":1}}],["将本群的绑定关系解除",{"2":{"641":1}}],["将机器人邀请进服务器",{"2":{"718":1}}],["将收到的消息中的对应",{"2":{"706":1}}],["将在你系统上",{"2":{"695":1}}],["将在服务器上开启一个",{"2":{"686":2}}],["将安装包解压到你为新海豹准备的目录",{"2":{"695":1}}],["将安装包解压到合适的目录",{"2":{"539":1}}],["将他删除",{"2":{"686":1}}],["将要行动的玩家",{"2":{"660":1}}],["将会进行模糊搜索",{"2":{"653":1}}],["将会从",{"2":{"254":1}}],["将显示为",{"2":{"648":1}}],["将使用当前群聊中你的角色名",{"2":{"641":1}}],["将使用扩展语法的牌堆与标准",{"2":{"37":1}}],["将角色名设置为",{"2":{"640":1}}],["将无法进行私聊",{"2":{"638":1}}],["将无法继续使用",{"2":{"236":1}}],["将生成",{"2":{"616":1}}],["将以下单位从先攻列表中移除",{"2":{"660":1}}],["将以下内容复制进去",{"2":{"458":1}}],["将以给出的数值进行检定",{"2":{"595":1}}],["将保存的属性数值以",{"2":{"592":1}}],["将指定角色卡从其绑定的所有群解绑",{"2":{"641":1}}],["将指定角色卡绑定到当前群聊",{"2":{"641":1,"748":1}}],["将指定用户移出黑名单",{"2":{"623":1}}],["将指定用户添加至信任列表",{"2":{"623":1}}],["将指定用户拉入黑名单",{"2":{"623":1}}],["将指定属性增加或减去表达式的计算结果",{"2":{"590":1,"665":1}}],["将指定属性设定为指定表达式的计算结果",{"2":{"589":1}}],["将指定群的指定用户踢出",{"2":{"94":1}}],["将指定群的指定用户封禁指定时间",{"2":{"94":1}}],["将若干个属性名视为同一个属性",{"2":{"582":1}}],["将迁出海豹核心中的",{"2":{"575":1}}],["将整个海豹核心目录复制到新的位置即可",{"2":{"574":1}}],["将目录名中的版本号删去或许是更好的做法",{"2":{"539":1}}],["将它们视为诈骗而予以警告",{"2":{"718":1}}],["将它复制保存",{"2":{"535":1}}],["将它命名为",{"2":{"458":1}}],["将该文件后缀改为",{"2":{"480":1}}],["将损坏的数据文件",{"2":{"460":1}}],["将你当前群聊中的独立卡数据保存为个人角色卡",{"2":{"641":1}}],["将你损坏的数据库文件另外保存一份以防万一",{"2":{"459":1}}],["将你的",{"2":{"131":1,"568":1}}],["将海豹核心的任务卡片下拉并释放",{"2":{"450":1}}],["将里面的",{"2":{"441":1}}],["将跳过本文件内的所有回复项",{"2":{"417":1}}],["将列出现有的所有分组和它们的别名",{"2":{"397":1}}],["将图片放在骰子的适当目录",{"2":{"375":1}}],["将替换",{"2":{"373":1}}],["将调用",{"2":{"368":1}}],["将标签页切换到",{"2":{"356":1}}],["将进行对应等级配置的操作",{"2":{"355":1}}],["将取命中词汇中的",{"2":{"355":1}}],["将时间线设置为",{"2":{"350":1}}],["将所有答案用空格连接起来",{"2":{"349":1}}],["将不再支持",{"2":{"254":1}}],["将不再进行更新",{"2":{"254":1}}],["将这作为你的第一个新知识开始学习",{"2":{"206":1}}],["将一切不明了的问题诉诸他人的帮助",{"2":{"204":1}}],["将其复制回海豹的原路径",{"2":{"460":1}}],["将其保存在和你要编写的",{"2":{"161":1}}],["将其按顺序存储于多个变量",{"2":{"73":1}}],["将文本流作为",{"2":{"135":1}}],["将处理完的数据写回去",{"2":{"131":1}}],["将命令注册到扩展中",{"2":{"117":2,"129":1,"134":1}}],["将群内的该群组变量设置为",{"2":{"99":1}}],["将群为",{"2":{"96":2}}],["将触发者的该个人变量设置为",{"2":{"99":1}}],["将扩展",{"2":{"94":1}}],["将",{"2":{"94":3,"242":1,"245":1,"262":1,"480":1,"491":1,"709":2}}],["将是你的一大助力",{"2":{"70":1}}],["将首先调用",{"2":{"64":1}}],["将提示找不到牌组",{"2":{"57":1}}],["将只列出",{"2":{"57":1}}],["将重置所有牌组到初始状态",{"2":{"51":1}}],["将内容拼接进该结果",{"2":{"50":1}}],["将修改后的内容提交到远程后",{"2":{"10":1}}],["风格的注释",{"2":{"37":1,"41":1}}],["起",{"2":{"37":1,"120":1,"315":1,"316":1,"317":1,"426":1,"545":1,"706":1,"707":1,"708":1,"709":1}}],["根目录",{"2":{"577":1}}],["根据你使用的规则",{"2":{"747":1}}],["根据平台不同",{"2":{"747":1}}],["根据服务提供商",{"2":{"684":1}}],["根据当前房规确定",{"2":{"597":1}}],["根据原则",{"2":{"582":1}}],["根据我们的观察",{"2":{"550":1}}],["根据系统不同",{"2":{"539":1}}],["根据猫好感度",{"2":{"81":1}}],["根据骰点结果展示不同文案",{"0":{"24":1}}],["根本不存在",{"2":{"36":2,"40":2,"46":2}}],["什么是骰子",{"0":{"717":1}}],["什么是自定义回复",{"0":{"412":1}}],["什么是自定义文案",{"0":{"361":1}}],["什么是帮助文档",{"0":{"392":1}}],["什么是拦截功能",{"0":{"352":1}}],["什么是签名",{"0":{"251":1}}],["什么是命令行一知半解",{"2":{"210":1}}],["什么是",{"0":{"193":1,"202":1,"250":1}}],["什么是开源程序",{"0":{"186":1,"200":1}}],["什么是开源",{"0":{"186":1,"200":1}}],["什么是相对路径",{"2":{"56":1}}],["什",{"2":{"36":2,"40":2,"46":2}}],["狐狸核心",{"2":{"36":2,"40":2,"46":2}}],["持续开发中",{"2":{"36":3,"40":2,"46":2}}],["状态",{"2":{"36":5,"40":4,"46":4}}],["含义",{"2":{"159":1}}],["含义相同",{"2":{"36":1}}],["含有中华人民共和国法律",{"2":{"15":1}}],["哈希表",{"2":{"36":1}}],["表演",{"2":{"665":2}}],["表述时不以",{"2":{"585":1}}],["表格",{"2":{"504":1}}],["表达式用法请参考",{"2":{"711":1,"712":1}}],["表达式形如",{"2":{"635":1,"636":1}}],["表达式中可以包含骰点",{"2":{"590":1,"665":1}}],["表达式指定自动清理的时机",{"2":{"320":1}}],["表达式规定自动备份的时机",{"2":{"317":1}}],["表达式定时执行",{"2":{"141":1}}],["表达式或使用",{"2":{"141":1}}],["表达式并不熟悉",{"2":{"140":1}}],["表达式",{"2":{"140":2,"141":1,"314":2,"589":3,"590":1,"591":1,"627":1,"665":1,"667":2,"670":1,"711":1,"712":1}}],["表达式为真",{"0":{"74":1},"2":{"74":1,"83":2,"419":1}}],["表名将作为这个牌组的名称",{"2":{"61":1}}],["表中的信息不是必须的",{"2":{"48":1}}],["表示可以在所列各项中选择一个",{"2":{"722":1}}],["表示必须在所列各项中选择一个",{"2":{"722":1}}],["表示此参数可以被省略",{"2":{"722":1}}],["表示你应以相应内容替换此处内容",{"2":{"722":1}}],["表示该项的权重",{"2":{"53":1}}],["表示放回抽取",{"2":{"50":2}}],["表示不放回抽取",{"2":{"50":2}}],["表示",{"2":{"45":1,"344":1,"756":1}}],["表还有一种更紧凑的内联表示法",{"2":{"36":1}}],["表头",{"2":{"36":1}}],["表",{"0":{"36":1},"2":{"36":1}}],["表的一种紧凑表示法",{"2":{"33":1}}],["直至目前",{"2":{"512":1}}],["直接写数值",{"2":{"756":1}}],["直接点是就可以了",{"2":{"693":1}}],["直接点击",{"2":{"11":1}}],["直接重复步骤",{"2":{"686":1}}],["直接指明技能名和数值",{"2":{"595":1}}],["直接覆盖替换旧版本海豹",{"2":{"544":1}}],["直接下载对应版本的服务端核心文件",{"2":{"479":1}}],["直接下载最新版即可",{"2":{"460":1}}],["直接上传",{"2":{"415":1}}],["直接上传的",{"2":{"56":1}}],["直接把文件拖动到模拟器就可以传文件了",{"2":{"257":1}}],["直接将",{"2":{"258":1}}],["直接将日志复制到聊天窗口中会严重影响日志的可读性",{"2":{"225":1}}],["直接将代码复制到聊天窗口中会极大地破坏这种代码规范",{"2":{"224":1}}],["直接使用被提示错误",{"0":{"155":1}}],["直接在要匹配的文本一栏中写入正则表达式即可",{"2":{"73":1}}],["直接表示",{"2":{"45":1}}],["直到数据库文件正常",{"2":{"459":1}}],["直到这些细节足够你应对眼前的问题和未来可能遇到的相似的问题",{"2":{"211":1}}],["直到对每一个细节再无疑惑的方式",{"2":{"209":1}}],["直到该行结束的所有文本都被视为注释",{"2":{"42":1}}],["直到下一个非空白字符或结束引号为止",{"2":{"35":1}}],["时请注意辨别",{"2":{"723":1}}],["时显示",{"2":{"640":1}}],["时附加一个奖励骰",{"2":{"559":1}}],["时响应",{"2":{"499":1}}],["时分秒",{"2":{"315":2}}],["时代定义的一套接口语言",{"2":{"268":1}}],["时更快地学习新概念的办法",{"2":{"212":1}}],["时常",{"2":{"190":1}}],["时就在安装这个文件里面所指示的依赖包",{"2":{"152":1}}],["时会返回的帮助内容",{"2":{"114":1}}],["时间不定",{"2":{"504":1}}],["时间不确定",{"2":{"247":1}}],["时间戳",{"2":{"141":1,"159":1}}],["时间点",{"2":{"50":5,"57":17}}],["时间",{"2":{"45":1}}],["时",{"2":{"35":1,"64":2,"66":1,"70":1,"94":2,"141":4,"164":1,"167":1,"209":1,"274":1,"302":1,"334":1,"350":1,"354":1,"414":1,"480":1,"491":1,"494":1,"594":1,"690":1}}],["多数情况下",{"2":{"722":1}}],["多项式",{"2":{"637":1}}],["多开指同时运行多个海豹核心",{"2":{"571":1}}],["多号指每个骰子上连接多个帐号",{"2":{"571":1}}],["多试验几次来找到最适合你设备的策略",{"2":{"446":1}}],["多轮骰点",{"0":{"629":1}}],["多轮检定",{"0":{"596":1}}],["多轮",{"2":{"368":1,"373":1}}],["多次点击软件版本号",{"2":{"262":1}}],["多次抽取指令",{"2":{"51":1}}],["多复制了",{"2":{"247":1}}],["多重条件算符",{"0":{"181":1}}],["多个收件邮箱用空格隔开",{"2":{"729":1}}],["多个回复结果将",{"2":{"422":1}}],["多个语句可以用",{"2":{"174":1}}],["多个",{"2":{"90":1,"245":1}}],["多条件条件语句",{"0":{"84":1}}],["多行回复的错误使用",{"0":{"82":1}}],["多行换行符中",{"2":{"35":1}}],["多出一个逗号也是可以的",{"2":{"37":1}}],["多套文案的实现一般需要用到",{"2":{"25":1}}],["多套文案的实现",{"0":{"25":1},"1":{"26":1,"27":1,"28":1}}],["它作为牌组名出现",{"2":{"652":1}}],["它作为牌堆名出现",{"2":{"652":1}}],["它能够在收到的消息符合一定条件时",{"2":{"412":1}}],["它提供方法来操控文本",{"2":{"402":1}}],["它提供了一种访问",{"2":{"313":1}}],["它支持面向对象程序设计",{"2":{"402":1}}],["它支持你直接使用换行",{"2":{"35":1}}],["它的含义与",{"2":{"417":1}}],["它的版本号是",{"2":{"385":1}}],["它的核心代码如下",{"2":{"135":1}}],["它归属于",{"2":{"363":1}}],["它包含了",{"2":{"309":1}}],["它给用户提供了通过输入命令与操作系统进行交互的交互方式",{"2":{"302":1}}],["它也可以用于桌面计算",{"2":{"286":1}}],["它也将极大地帮助回答者排查你所遇到的问题",{"2":{"225":1}}],["它也应提供帮助文本",{"2":{"147":1}}],["它是一个好问题的一部分",{"2":{"222":1}}],["它只是一个私骰",{"2":{"190":1}}],["它变得非常大",{"2":{"190":1}}],["它传递过来的信息是",{"2":{"135":1}}],["它决定是否放回抽取",{"2":{"94":1}}],["它会自动检测端口",{"2":{"693":1}}],["它会解析并执行用户输入的命令",{"2":{"302":1}}],["它会输出后面文本的执行结果",{"2":{"70":1}}],["它会返回上一节中的示例",{"2":{"64":1}}],["它会连同它后面的所有空白",{"2":{"35":1}}],["它们的详细信息在本章的后续内容中逐一介绍",{"2":{"625":1}}],["它们也被视为同义词",{"2":{"582":1}}],["它们完全指代的是同一属性",{"2":{"582":1}}],["它们是海豹数据在导出时的一份快照",{"2":{"442":1,"577":1}}],["它们是快速创建新自定义回复的不同方式",{"2":{"415":1}}],["它们是",{"2":{"290":1}}],["它们是所有功能的中坚",{"2":{"19":1}}],["它们往往能比传统搜索更快地获得信息",{"2":{"207":1}}],["它们很可能会提供二次封装后",{"2":{"93":1}}],["它们能在分享时说明更多信息",{"2":{"48":3}}],["它们按照扩展列出了每个指令的详细用法",{"2":{"20":1}}],["n我收到了",{"2":{"706":1}}],["n骰主你好",{"2":{"706":2}}],["n骰池已经抽空",{"2":{"704":1}}],["n你获得了3次死亡豁免检定失败",{"2":{"678":1}}],["n在昏迷状态下遭受了1点过量伤害",{"2":{"678":1}}],["n在昏迷状态下遭受了3点过量伤害",{"2":{"665":2}}],["n遭受了7点过量伤害",{"2":{"678":1}}],["n遭受了1点过量伤害",{"2":{"665":1}}],["n8",{"2":{"667":1}}],["n修改",{"2":{"665":2,"678":2}}],["n感知",{"2":{"665":1}}],["n读入",{"2":{"665":1,"670":6,"678":1}}],["n4",{"2":{"659":1}}],["n3",{"2":{"659":1}}],["n2",{"2":{"659":1}}],["n16",{"2":{"669":1}}],["n17",{"2":{"667":2}}],["n1",{"2":{"659":6,"660":1}}],["n自由分配模式请用",{"2":{"658":1}}],["n获取带属性名的预设请用",{"2":{"658":1}}],["n严峻",{"2":{"653":1}}],["n索具装备",{"2":{"653":1}}],["nrig",{"2":{"653":1}}],["n发票",{"2":{"653":1}}],["ninvoice",{"2":{"653":1}}],["nickname",{"2":{"108":1,"109":1}}],["ngre5421",{"2":{"653":1}}],["ngre4889",{"2":{"653":1}}],["ngre3178",{"2":{"653":1}}],["ngre单词",{"2":{"652":1}}],["n更新时间",{"2":{"652":1}}],["n时间",{"2":{"652":1}}],["n牌组",{"2":{"652":1}}],["n牌组数量",{"2":{"652":1}}],["n牌堆",{"2":{"652":1}}],["n版本",{"2":{"652":1}}],["n作者",{"2":{"652":1}}],["n格式",{"2":{"652":1}}],["n掷出了",{"2":{"638":1,"639":1}}],["nd10=",{"2":{"629":2}}],["nd100=2",{"2":{"703":1}}],["nd100=24",{"2":{"596":1}}],["nd100=31",{"2":{"703":1}}],["nd100=53",{"2":{"703":1}}],["nd100=71",{"2":{"703":1}}],["nd100=6",{"2":{"703":1}}],["nd100=82",{"2":{"611":1}}],["nd100=87",{"2":{"596":1}}],["nd100=9",{"2":{"608":1}}],["nd100=1",{"2":{"596":1}}],["n>",{"2":{"625":1}}],["n命令",{"2":{"625":1}}],["nhp",{"2":{"616":2,"670":1}}],["n体型",{"2":{"616":2}}],["n体质",{"2":{"616":2}}],["n力量",{"2":{"616":2,"658":5,"665":2,"670":2}}],["n理智变化",{"2":{"608":1,"611":1}}],["n平手",{"2":{"605":1}}],["n木落胜出",{"2":{"604":1}}],["nszz",{"2":{"604":1,"605":1}}],["n悄悄进行了一项心理学检定",{"2":{"602":1}}],["n对的",{"2":{"600":1}}],["n生命值",{"2":{"593":2}}],["n的理智检定",{"2":{"611":1}}],["n的",{"2":{"599":1,"602":1}}],["n的个人属性为",{"2":{"593":1}}],["n的属性变化",{"2":{"593":1}}],["n的coc7属性录入完成",{"2":{"593":1}}],["nn",{"0":{"640":1},"2":{"589":1,"640":5,"746":1,"747":1}}],["np=75",{"2":{"600":1}}],["np=91",{"2":{"600":1}}],["np=36",{"2":{"600":1}}],["np",{"0":{"441":1},"2":{"441":3}}],["npm",{"0":{"154":1},"2":{"148":1,"152":2,"154":1,"162":1}}],["nt",{"2":{"295":1}}],["ntqq",{"0":{"295":1},"2":{"285":2,"287":1,"294":1,"295":1,"297":1,"341":3,"348":1,"512":1,"513":3,"516":2,"519":1,"522":2}}],["nausterity",{"2":{"653":1}}],["napcatqq",{"0":{"294":1,"522":1,"523":1},"1":{"523":1,"524":1},"2":{"294":2,"309":1,"522":3}}],["napcat",{"2":{"227":1,"341":2,"513":3,"522":2,"523":1}}],["native",{"2":{"154":1}}],["namednd",{"0":{"763":1},"2":{"746":1,"763":1}}],["name",{"0":{"762":1},"2":{"37":2,"47":2,"48":1,"90":1,"98":2,"107":1,"114":1,"117":2,"119":3,"121":2,"125":1,"127":8,"129":7,"130":2,"133":2,"134":3,"136":3,"139":2,"150":1,"158":1,"159":2,"165":3,"166":1,"430":1,"539":1,"569":1,"762":1}}],["none",{"2":{"733":1}}],["noqueue",{"2":{"497":1}}],["no",{"2":{"497":1}}],["nogui",{"2":{"480":2}}],["nox",{"2":{"259":2}}],["node",{"2":{"148":2,"158":1,"162":1}}],["now",{"2":{"141":2,"142":1}}],["not",{"0":{"198":1}}],["notepad++",{"2":{"93":1}}],["notice",{"2":{"89":1,"90":1,"105":1}}],["n出",{"2":{"136":1}}],["n已添加第$",{"2":{"131":1}}],["num=10",{"2":{"722":1}}],["num=",{"2":{"642":1}}],["number",{"2":{"130":2,"133":1,"141":1}}],["num",{"2":{"130":7}}],["null",{"2":{"38":1,"45":1,"110":1,"460":6,"646":1}}],["n$",{"2":{"129":1}}],["n`",{"2":{"127":1}}],["n它的逃跑意愿为$",{"2":{"116":1,"117":1}}],["n海豹的逃走骰",{"2":{"82":1}}],["n海豹现在离终点还有37格",{"2":{"82":1}}],["n形象是海豹",{"2":{"68":1}}],["nc",{"2":{"48":3,"90":1}}],["n",{"0":{"293":1},"1":{"294":1,"295":1},"2":{"35":2,"66":2,"68":1,"82":3,"110":5,"127":1,"129":2,"130":2,"345":1,"368":1,"371":1,"373":1,"375":1,"552":1,"616":1,"635":5,"652":3,"653":3,"658":5,"665":1,"702":1}}],["nexp",{"2":{"665":1}}],["next",{"2":{"11":1}}],["network",{"2":{"498":2,"539":1}}],["newbot",{"2":{"535":2}}],["news",{"2":{"142":1}}],["newconfigitem",{"2":{"94":1,"138":1}}],["newcmdexecuteresult",{"2":{"94":1,"115":2,"116":2,"117":2,"119":2,"121":2,"127":11,"129":3,"130":7,"133":4,"134":2,"135":3,"139":3}}],["newcmditeminfo",{"2":{"94":1,"114":1,"117":1,"119":2,"121":1,"127":5,"129":1,"130":1,"133":1,"134":1,"139":1}}],["newtemplatebyyaml",{"2":{"94":1,"103":1}}],["newtemplate",{"2":{"94":1,"103":1}}],["newmessage",{"2":{"94":1,"104":1}}],["newrulecheckresult",{"2":{"94":1,"136":1}}],["newrule",{"2":{"94":1,"136":1}}],["newext",{"2":{"94":3}}],["new",{"2":{"11":1,"94":3,"112":1,"117":1,"119":1,"121":1,"127":1,"129":1,"130":1,"133":1,"134":1,"137":1,"139":1,"464":1,"530":1,"641":1,"704":1,"727":1,"746":2,"748":1}}],["引用图片正确格式示例",{"2":{"443":1}}],["引用自说明",{"2":{"239":1}}],["引号键则允许包含任何",{"2":{"34":1}}],["引起来的字符串",{"2":{"34":1}}],["z",{"0":{"312":1},"1":{"313":1},"2":{"635":4,"636":5}}],["zygisk",{"2":{"256":2,"257":2}}],["zshchmod",{"2":{"539":1}}],["zsh",{"2":{"239":1,"302":1}}],["zip",{"2":{"56":3,"149":1,"315":2}}],["z0",{"2":{"34":1}}],["za",{"2":{"34":1}}],["数值",{"2":{"663":1}}],["数秒钟后",{"2":{"539":1}}],["数学运算",{"0":{"176":1}}],["数据统计",{"0":{"728":1,"737":1}}],["数据使用等",{"2":{"447":1}}],["数据导出路径为",{"2":{"442":1}}],["数据迁移",{"0":{"434":1}}],["数据库损坏发生的原因很多",{"2":{"456":1}}],["数据库检查和修复",{"0":{"433":1,"456":1},"1":{"457":1,"458":1,"459":1,"460":1}}],["数据库文件",{"2":{"431":2}}],["数据目录",{"2":{"430":1}}],["数据序列化语言被发明出来",{"2":{"301":1}}],["数据序列化语言",{"0":{"301":1},"2":{"281":1,"304":1,"311":1}}],["数据类型和赋值",{"0":{"173":1}}],["数据处理模板",{"0":{"131":1}}],["数据结构",{"2":{"98":2}}],["数据结构的子成员是一个数组",{"2":{"47":1}}],["数量",{"2":{"129":1,"610":1,"616":1,"653":1,"658":2,"714":1,"746":4,"750":1,"755":1,"762":1,"763":1}}],["数字id",{"2":{"642":1}}],["数字类型",{"2":{"173":1}}],["数字格式的",{"2":{"172":1}}],["数字格式的星期",{"2":{"172":1}}],["数字格式的现时间",{"2":{"172":3}}],["数字格式的现月份",{"2":{"172":1}}],["数字格式的现日期",{"2":{"172":2}}],["数字格式的年份",{"2":{"172":1}}],["数字论证",{"2":{"48":5,"58":3,"61":2}}],["数字",{"2":{"34":1,"52":2,"722":1}}],["数组类型",{"2":{"125":3}}],["数组中的每一项都是一个",{"2":{"125":1}}],["数组合并",{"2":{"64":1}}],["数组是用",{"2":{"37":1}}],["数组",{"0":{"37":1,"39":1,"47":1},"2":{"33":1,"38":1,"402":1}}],["字样的是自动生成的备份",{"2":{"315":1}}],["字段同上",{"2":{"126":1}}],["字段的值为内容组成一个牌组",{"2":{"57":1}}],["字段的值为关键字",{"2":{"57":1}}],["字段",{"2":{"57":1}}],["字典",{"2":{"36":1}}],["字符都可以使用",{"2":{"35":1}}],["字符",{"2":{"34":1}}],["字符串当然不能和数值比较大小",{"2":{"183":1}}],["字符串类型",{"2":{"118":3,"123":3,"125":2}}],["字符串数组",{"2":{"64":1}}],["字符串数组数据",{"2":{"63":1}}],["字符串",{"0":{"35":1},"2":{"33":1,"38":1,"45":1,"128":1}}],["字母和数字",{"2":{"172":1}}],["字母",{"2":{"34":1}}],["也能看到群号",{"2":{"706":1}}],["也能正常响应用户的命令",{"2":{"223":1}}],["也请各位骰主谨慎对待大家的信任",{"2":{"698":1}}],["也在此感谢一代又一代无名作者和译者做出的工作",{"2":{"646":1}}],["也就无法收到暗骰结果",{"2":{"638":1}}],["也就是说",{"2":{"594":1}}],["也就是增加一个触发词",{"2":{"117":1}}],["也就是中间所有分隔符都用一个空格替代",{"2":{"110":1}}],["也只有胜者可以获得技能成长标记",{"2":{"613":1}}],["也只是兴趣的一部分",{"2":{"191":1,"232":1}}],["也相同应用",{"2":{"604":1}}],["也指向同一属性",{"2":{"582":1}}],["也支持很方便地多开",{"2":{"571":1}}],["也提供自动卸载",{"2":{"541":1}}],["也提供了此文章的文件",{"2":{"215":1}}],["也不自动开启",{"2":{"691":1}}],["也不要在临时目录中运行海豹核心",{"2":{"539":1}}],["也不可用",{"2":{"514":1}}],["也不对相应后果负责",{"2":{"512":1}}],["也不等于",{"2":{"78":1}}],["也即各种暗骰指令不受影响",{"2":{"471":1}}],["也即默认页面下",{"2":{"299":1}}],["也会暂停",{"2":{"727":1}}],["也会计算属性的总值供用户参考",{"2":{"616":1}}],["也会同时抽取具体条目",{"2":{"612":2}}],["也会将实际去匹配的拼音展示出来",{"2":{"356":1}}],["也会更方便开发者们归档问题和修改程序",{"2":{"192":1,"233":1}}],["也经常被使用到的一种",{"2":{"292":1}}],["也应该把你尝试过的方法描述出来",{"2":{"226":1}}],["也希望你通过本系列科普有所收获",{"2":{"212":1,"234":1}}],["也希望你能友善且相对客观地叙述问题",{"2":{"191":1,"232":1}}],["也包含着我们不理解的知识的情况",{"2":{"209":1}}],["也有可能要求你有其它知识的了解",{"2":{"425":1}}],["也有可能是胡编乱造",{"2":{"207":1}}],["也有助于你更快地解决问题",{"2":{"187":1,"201":1}}],["也有稍微复杂的",{"2":{"135":1}}],["也是娱乐骰",{"0":{"569":1}}],["也是登录二维码",{"2":{"493":1}}],["也是插件的数据目录",{"2":{"430":1}}],["也是经常被使用的",{"2":{"420":1}}],["也是一种",{"2":{"302":1}}],["也是大部分开源项目正式的反馈渠道",{"2":{"279":1}}],["也是维护海豹社区良好氛围的行为",{"2":{"229":1}}],["也是文本",{"2":{"173":1}}],["也是这样",{"2":{"34":1}}],["也更好地提示使用插件的骰主",{"2":{"167":1}}],["也非常欢迎你向模板仓库提",{"2":{"155":1}}],["也可手动填写新的分组名来创建文件夹",{"2":{"396":1}}],["也可用于编写骰子的使用帮助",{"2":{"392":1}}],["也可能是频道",{"2":{"747":1}}],["也可能是因为触发了某些自动规则添加的",{"2":{"323":1}}],["也可能登上电梯后不慎消失在超市的某个漆黑楼层中",{"2":{"740":1}}],["也可能称为",{"2":{"684":1}}],["也可能面临高达每月",{"2":{"236":1}}],["也可达成类似的效果",{"2":{"51":1}}],["也可以从",{"2":{"718":1}}],["也可以从文件名中确定",{"2":{"459":1}}],["也可以用来设置其他属性",{"2":{"670":1}}],["也可以略去不写",{"2":{"615":1}}],["也可以强制指定一个技能的数值",{"2":{"614":1}}],["也可以写成一行",{"2":{"569":1}}],["也可以找到该时间点前的最后一份",{"2":{"459":1}}],["也可以指定是",{"2":{"422":1}}],["也可以通过",{"2":{"422":1}}],["也可以视为",{"2":{"313":1}}],["也可以选择使用",{"2":{"262":1}}],["也可以在",{"2":{"259":1}}],["也可以前往",{"2":{"254":1}}],["也可以参考本节内容",{"2":{"254":1}}],["也可以很好地根据这五个要素的思考过程组织问题",{"2":{"217":1}}],["也可以很好地通过复述这五个要素的思考过程向",{"2":{"189":1}}],["也可以换成",{"2":{"130":1}}],["也可以设定为其他的",{"2":{"128":1}}],["也可以包含",{"2":{"116":1}}],["也可以嵌入",{"2":{"75":1}}],["也可以使用别人搭好的",{"2":{"238":1}}],["也可以使用",{"2":{"68":1}}],["也可以使用以",{"2":{"47":1}}],["也可以使用缩进层级表示对象关系",{"2":{"46":1}}],["也可以是个人的",{"2":{"706":1}}],["也可以是你",{"2":{"207":1}}],["也可以是用",{"2":{"34":1}}],["也可以是完善文档等等",{"2":{"8":1}}],["采用了不放回抽取",{"2":{"51":1}}],["采用",{"2":{"33":1,"45":1,"69":1}}],["浮点数",{"2":{"33":1,"38":1,"45":1}}],["整数时间戳",{"2":{"125":1}}],["整数类型",{"2":{"125":1}}],["整数",{"2":{"33":1,"38":1,"45":1}}],["整体流程",{"0":{"10":1}}],["包",{"2":{"154":1,"436":1}}],["包吗",{"0":{"154":1}}],["包含等文本匹配方式不够用",{"2":{"425":1}}],["包含",{"2":{"274":1}}],["包含了配置项的类型",{"2":{"138":1}}],["包含以下字段",{"2":{"118":1,"125":1}}],["包含文本",{"2":{"72":1,"420":1}}],["包括farevell",{"2":{"646":1}}],["包括不限于速记",{"2":{"558":1}}],["包括不以",{"2":{"354":1}}],["包括但不限于",{"2":{"543":1}}],["包括但不限于突发断电",{"2":{"456":1}}],["包括获取",{"2":{"499":1}}],["包括指令回复和自定义回复",{"2":{"354":1}}],["包括商用",{"2":{"159":1}}],["包括",{"2":{"158":1,"190":1,"254":1,"256":1,"491":1,"540":1,"717":1}}],["包括角色卡",{"2":{"146":1}}],["包括编写规则模板和编写指令",{"2":{"143":1}}],["包括换行",{"2":{"35":1,"43":1}}],["包括自定义回复",{"2":{"15":1}}],["包裹",{"2":{"38":2,"45":1}}],["包裹的一组键值对",{"2":{"38":1,"40":1}}],["包裹的一组值",{"2":{"38":1,"39":1}}],["包裹的一系列键值对",{"2":{"33":1}}],["包裹的一系列值",{"2":{"33":1,"37":1}}],["包裹的行作为表名",{"2":{"36":1}}],["包裹的内容作为字符串",{"2":{"35":1}}],["包裹起来的一串文字",{"2":{"33":1}}],["有若干个日志记录和一个当前日志",{"2":{"727":1}}],["有概率直接上号",{"2":{"687":1}}],["有几种办法",{"2":{"685":1}}],["有可能是没有开启正确的扩展",{"2":{"721":1}}],["有可能使骰子失联",{"2":{"622":1}}],["有可能找到你问题的答案",{"2":{"219":1}}],["有关",{"0":{"512":1}}],["有关的部分",{"2":{"285":1,"287":1,"294":1}}],["有两种解决方案",{"2":{"496":1}}],["有足够的了解",{"2":{"489":1}}],["有没有更简单的方式给骰子编写功能呢",{"2":{"412":1}}],["有黑名单用户在其他群尝试使用骰子时",{"2":{"328":1}}],["有提及",{"2":{"264":1}}],["有难度的操作",{"2":{"254":1,"261":1}}],["有内置的签名程序",{"2":{"251":1}}],["有能力的用户可以自行搭建服务",{"2":{"239":1}}],["有能力的牌堆作者可以配置更新链接",{"2":{"58":1}}],["有趣的世界",{"2":{"204":1}}],["有知道这个解决办法的管理",{"2":{"190":1}}],["有更复杂的指定依赖版本需求",{"2":{"165":1}}],["有些插件提供的扩展规则也定义了名片模板",{"2":{"734":1}}],["有些不妙",{"2":{"678":1}}],["有些情况",{"2":{"603":1}}],["有些变量可以在所有文案中使用",{"2":{"376":1}}],["有些词条下面有这样的内容",{"2":{"376":1}}],["有些调过设置了的会出现占用的运行内存占可用运行内存的百分比",{"2":{"252":1}}],["有些时候",{"2":{"164":1}}],["有些值可以跨多行",{"2":{"33":1}}],["有的话可以替换到你的项目中",{"2":{"155":1}}],["有时候",{"2":{"509":1}}],["有时候不会在控制台调试面板上显示出来",{"2":{"158":1}}],["有时原作者也会对其进行更新",{"2":{"207":1}}],["有时",{"2":{"155":1}}],["有时会给你提出一些修改建议",{"2":{"13":1}}],["有什么功能",{"0":{"146":1}}],["有一些云端内容的相关配置项",{"2":{"64":1}}],["有其他含义",{"2":{"59":1}}],["有多个更新链接时",{"2":{"58":1}}],["有多个作者时可以使用",{"2":{"48":1}}],["有",{"2":{"53":1,"159":1}}],["键启动",{"2":{"262":1}}],["键值为",{"2":{"104":1}}],["键值",{"0":{"38":1,"45":1}}],["键值对使用冒号结构表示",{"2":{"45":1}}],["键值对以",{"2":{"38":1}}],["键值对后必须换行",{"2":{"33":1}}],["键值对",{"0":{"33":1},"2":{"33":1}}],["键名可以是裸键名",{"2":{"34":1}}],["键名",{"0":{"34":1}}],["键名在等号的左边而值在右边",{"2":{"33":1}}],["键",{"2":{"33":1}}],["是克苏鲁的呼唤",{"2":{"739":1}}],["是指海豹",{"2":{"642":1}}],["是必须的",{"2":{"615":1,"635":1,"636":1}}],["是房规检定",{"2":{"594":1}}],["是规则书检定",{"2":{"594":1}}],["是规则书规定的同一属性的两个名字",{"2":{"582":1}}],["是纯净骰",{"0":{"569":1}}],["是被",{"2":{"512":1}}],["是内置客户端的配置文件夹",{"2":{"430":1}}],["是最常用的模式",{"2":{"420":1}}],["是海豹核心提供的一种功能扩展方式",{"2":{"412":1}}],["是提供给骰子使用的查询资料",{"2":{"392":1}}],["是腾讯公司基于",{"2":{"295":1}}],["是基于官方",{"2":{"522":1}}],["是基于",{"2":{"294":1}}],["是形如",{"2":{"278":1}}],["是安卓官方提供的帮助在电脑端调试",{"2":{"262":1}}],["是在后台低占用运行的无头",{"2":{"522":1}}],["是在无",{"2":{"261":1}}],["是在服务器还是在我自己的电脑上",{"2":{"189":1,"217":1}}],["是模拟器的编号",{"2":{"259":1}}],["是模拟器根路径",{"2":{"259":1}}],["是其它版本",{"2":{"241":1}}],["是目前用来绕过检测的最有效手段",{"2":{"237":1}}],["是什么",{"2":{"206":2}}],["是多数开源程序发布代码的地方",{"2":{"193":1,"202":1}}],["是小白常犯的错误之一",{"2":{"173":1}}],["是临时变量",{"2":{"172":1}}],["是分隔符",{"2":{"165":1}}],["是アンカー罗马字缩写",{"2":{"130":1}}],["是两个函数",{"2":{"128":1}}],["是一款科学奇幻",{"2":{"742":1}}],["是一款日系超能力战斗",{"2":{"741":1}}],["是一款超自然题材的",{"2":{"740":1}}],["是一款剑与魔法奇幻背景的叙事性角色扮演游戏",{"2":{"657":1}}],["是一组来自相同面数骰子",{"2":{"704":1}}],["是一组有名字的文本",{"2":{"383":1}}],["是一门基于原型和头等函数的多范式高级解释型编程语言",{"2":{"402":1}}],["是一种基于",{"2":{"286":1}}],["是一种",{"2":{"281":1,"304":1,"311":1}}],["是一套开源的",{"2":{"256":1}}],["是一个充满了秘密",{"2":{"584":1}}],["是一个特殊的程序",{"2":{"313":1}}],["是一个特殊的命令行界面程序",{"2":{"302":1}}],["是一个特殊的变量前缀",{"2":{"172":1}}],["是一个帮助其他应用直接使用系统",{"2":{"262":1}}],["是一个基于",{"2":{"254":1}}],["是一个比较自由的协议",{"2":{"159":1}}],["是一个",{"2":{"97":1,"285":1,"516":1}}],["是一对一匹配的",{"2":{"78":1}}],["是错误的",{"2":{"94":1}}],["是可以提供的",{"2":{"94":1}}],["是从左往右计算的",{"2":{"84":1}}],["是防止它出现在回复文本中",{"2":{"83":1}}],["是否正确做出了响应",{"2":{"681":1}}],["是否在",{"2":{"512":1}}],["是否允许海豹核心发送通知",{"2":{"454":1}}],["是否跟着这么做",{"2":{"185":1,"214":1}}],["是否抽取成功",{"2":{"118":1}}],["是否放回抽取",{"2":{"118":1,"119":1}}],["是否私聊",{"2":{"105":1}}],["是否保留待议",{"2":{"96":1}}],["是否等于",{"2":{"79":1}}],["是否导出该牌组",{"2":{"61":1}}],["是键值对的集合",{"2":{"36":1}}],["是",{"2":{"33":1,"94":1,"127":1,"278":2,"287":1,"292":1,"349":1,"427":3,"503":1,"519":1,"582":1}}],["vm",{"2":{"570":2}}],["vme50",{"2":{"419":1}}],["volumes",{"2":{"491":5}}],["void",{"2":{"141":1}}],["virtualxposed",{"2":{"257":1}}],["visible",{"2":{"61":2,"64":2}}],["vs",{"2":{"168":1}}],["vscode",{"2":{"93":1,"161":1,"259":1}}],["v11",{"2":{"254":2,"285":2,"516":2}}],["v1",{"2":{"140":1,"481":1}}],["v",{"2":{"127":5,"129":2,"539":1}}],["vb",{"2":{"72":1}}],["valid",{"2":{"497":2}}],["val",{"2":{"115":2,"116":5,"117":5,"127":17,"129":3,"130":2,"134":2,"135":1,"139":4}}],["valuetoset",{"2":{"94":9}}],["value",{"2":{"32":1,"33":1,"38":2,"45":1,"53":1,"128":2,"130":2,"138":3,"139":1,"141":4}}],["var",{"2":{"150":1}}],["varget",{"2":{"94":1}}],["varset",{"2":{"94":1}}],["vars",{"0":{"99":1},"2":{"94":6,"99":4}}],["va",{"2":{"72":1}}],["v我50",{"2":{"419":1}}],["v我1个金币",{"2":{"52":1}}],["v我",{"2":{"52":2}}],["versioning",{"2":{"159":1}}],["versioncode",{"2":{"104":1}}],["version",{"2":{"37":2,"47":2,"48":6,"90":1,"94":3,"104":1,"117":1,"119":1,"121":1,"127":1,"129":1,"130":1,"133":1,"134":1,"136":1,"139":1,"150":1,"158":1,"159":2,"165":3,"166":1,"172":1,"239":1,"479":1}}],["vue3",{"2":{"5":1}}],["kn",{"2":{"711":1}}],["kp",{"2":{"602":1}}],["kernel",{"2":{"497":1}}],["key的值",{"2":{"239":1}}],["key=value",{"2":{"723":1}}],["key=",{"2":{"141":1}}],["key=$",{"2":{"135":1}}],["key>",{"2":{"139":1}}],["keywords=稻香",{"2":{"135":2}}],["keys",{"2":{"57":9,"61":1,"652":4}}],["key2",{"2":{"35":1}}],["key",{"2":{"32":1,"38":2,"45":1,"48":2,"50":4,"57":5,"68":3,"94":26,"128":5,"130":9,"131":4,"135":3,"136":1,"138":4,"139":2,"141":6,"187":1,"201":1,"238":2,"239":1,"241":1,"723":2}}],["kritor",{"2":{"254":2}}],["k",{"0":{"282":1},"1":{"283":1},"2":{"129":2,"635":2}}],["kwarg",{"2":{"110":2}}],["kwargs",{"2":{"110":1}}],["kiy",{"2":{"67":1}}],["kiytarot",{"2":{"67":1}}],["kook",{"0":{"472":1},"1":{"473":1,"474":1,"475":1},"2":{"18":1,"109":1,"472":1,"473":1,"474":4,"475":1,"540":1,"580":1,"717":1}}],["用空格分割",{"2":{"722":2}}],["用空格拼接成一个字符串",{"2":{"110":1}}],["用文本编辑器打开",{"2":{"699":1}}],["用文本编辑器编辑",{"2":{"694":1}}],["用这条指令可以查看",{"2":{"644":1}}],["用关键字进行词条查询",{"2":{"642":1}}],["用迁出海豹的",{"2":{"577":1}}],["用打包的数据覆盖迁入海豹的对应目录",{"2":{"575":1}}],["用以下方法即可启动海豹",{"2":{"539":1}}],["用鼠标右击压缩包",{"2":{"196":1}}],["用法举例",{"2":{"178":1}}],["用途",{"2":{"172":1}}],["用户可能使用某些自动工具创建了一名调查员",{"2":{"582":1}}],["用户可以去频道公屏发送一个",{"2":{"708":1}}],["用户可以自行选择自己喜欢的方式",{"2":{"542":1}}],["用户可以查看和修改源代码",{"2":{"286":1}}],["用户运行的",{"2":{"541":1}}],["用户使用",{"2":{"538":1}}],["用户生成容器进程",{"2":{"491":1}}],["用户执行海豹进程可能会导致一些权限问题",{"2":{"491":1}}],["用户界面",{"2":{"307":1}}],["用户通常使用输入指令的方式与操作系统或程序进行交互",{"2":{"291":1}}],["用户需要这样一个科普性质的界面",{"2":{"214":1}}],["用户社区里更快地解决问题",{"2":{"192":1,"234":1}}],["用户群的群公告",{"2":{"219":1}}],["用户群的群员或管理员提问",{"2":{"189":1}}],["用户群的群员",{"2":{"187":1,"201":1}}],["用户群的社区氛围似乎又有些不尽如人意",{"2":{"214":1}}],["用户群中向管理说明以外",{"2":{"193":1,"202":1}}],["用户群中会看到以下这样的问题",{"2":{"190":1}}],["用户群里都在问几乎一样的问题",{"2":{"189":1}}],["用户群问问题会被要求发送截图",{"0":{"187":1,"201":1},"2":{"224":1,"225":1}}],["用户群出现了预料之中但情理之外的问题",{"2":{"185":1}}],["用户群",{"2":{"172":1}}],["用户不存在或未被拉黑",{"2":{"127":1}}],["用户id>",{"2":{"127":4}}],["用户昵称",{"2":{"125":1}}],["用户",{"2":{"123":1,"125":1,"706":2}}],["用户也能抽取到最新内容",{"2":{"62":1}}],["用什么编写",{"0":{"93":1}}],["用于指示海豹回复你一条消息",{"2":{"708":1}}],["用于设置临时属性",{"2":{"670":1}}],["用于在",{"2":{"559":1}}],["用于精确控制查询范围的分组",{"2":{"395":1}}],["用于筛选出指定小类下的文案条目",{"2":{"364":1}}],["用于交互",{"2":{"313":1}}],["用于提示用户",{"2":{"290":1}}],["用于与",{"2":{"283":1}}],["用于区分网络中的不同设备",{"2":{"278":1}}],["用于",{"2":{"158":1}}],["用于网络请求",{"2":{"158":1}}],["用于自定义扩展",{"2":{"158":1}}],["用于自动化发布海豹的每日构建包与",{"2":{"5":1}}],["用于读取",{"2":{"152":1}}],["用于演示如何抽取牌堆",{"2":{"119":1}}],["用于消除编译报错",{"2":{"117":1}}],["用于撤回等",{"2":{"109":1}}],["用于创建",{"2":{"101":1}}],["用于创建一个新的配置项",{"2":{"94":1}}],["用于注册扩展和定义指令的",{"2":{"100":1}}],["用于注册一个",{"2":{"94":6}}],["用于注册一个配置项",{"2":{"94":1}}],["用于获取一个",{"2":{"94":6}}],["用于获取一个配置项的值",{"2":{"94":1}}],["用于查找名为",{"2":{"94":1}}],["用于建立一个名为",{"2":{"94":1}}],["用于判断指令执行结果",{"2":{"94":1}}],["用于填写一些额外的展示内容",{"2":{"90":1}}],["用来单独控制这个插件是否开启",{"2":{"405":1}}],["用来实现回复发送者",{"2":{"116":1}}],["用来创建自定义",{"2":{"94":1}}],["用来定义新的指令",{"2":{"94":1}}],["用来测试",{"2":{"70":1}}],["用来记录相关说明性内容",{"2":{"32":1}}],["用勺子把西瓜最中间的一块全挖走",{"2":{"51":1}}],["用",{"2":{"45":1,"83":1,"127":1}}],["注册定时任务",{"0":{"140":1},"1":{"141":1,"142":1}}],["注册后的配置项会在",{"2":{"139":1}}],["注册后进行",{"2":{"139":1}}],["注册单选项函数的参数为",{"2":{"139":1}}],["注册配置项需在",{"2":{"139":1}}],["注册配置项",{"0":{"139":1}}],["注册插件配置项",{"0":{"138":1},"1":{"139":1},"2":{"408":1}}],["注册规则",{"2":{"136":1}}],["注册命令",{"2":{"119":2,"121":1,"127":5,"139":1}}],["注册",{"2":{"117":2}}],["注册指令",{"0":{"117":1}}],["注册扩展和指令的代码已经写好",{"2":{"148":1}}],["注册扩展",{"2":{"112":1,"119":1,"121":1,"127":1,"137":1,"139":1}}],["注册到系统中",{"2":{"94":1}}],["注释块",{"0":{"43":1}}],["注释也可以放在行尾",{"2":{"32":1}}],["注释以",{"2":{"32":1,"44":1}}],["注释",{"0":{"32":1,"41":1,"44":1},"1":{"42":1,"43":1}}],["注意事项",{"0":{"506":1},"1":{"507":1,"508":1,"509":1}}],["注意汉字的长度",{"2":{"421":1}}],["注意检查自己导入的内容是不是完整复制进来的",{"2":{"365":1}}],["注意对方是否支持",{"2":{"341":1,"513":1}}],["注意是",{"2":{"242":1}}],["注意必须是半角符号",{"2":{"165":1}}],["注意不要与现有的重名",{"2":{"150":1}}],["注意不要和别的扩展的",{"2":{"128":1}}],["注意按照小驼峰命名法大写",{"2":{"138":1}}],["注意即使是非指令关键词也是依附于扩展的",{"2":{"137":1}}],["注意这些似乎只能在",{"2":{"96":1}}],["注意需要配合",{"2":{"94":1}}],["注意级词表",{"2":{"90":1}}],["注意级词汇",{"2":{"89":2,"90":2}}],["注意",{"2":{"12":1,"30":1,"31":1,"34":1,"37":1,"46":1,"48":1,"50":1,"56":1,"61":2,"62":1,"66":2,"68":1,"73":1,"84":1,"94":2,"97":1,"112":2,"114":1,"115":1,"120":1,"130":1,"157":1,"172":1,"173":2,"174":1,"187":1,"199":1,"201":1,"203":1,"213":1,"224":1,"225":1,"236":1,"238":1,"239":1,"252":1,"253":1,"254":3,"257":1,"261":3,"265":1,"299":1,"341":1,"344":1,"346":1,"347":1,"355":1,"363":1,"365":1,"371":1,"389":1,"421":1,"423":1,"442":1,"466":1,"471":2,"474":1,"475":1,"478":1,"491":1,"496":1,"501":1,"505":1,"513":2,"514":1,"531":1,"539":2,"573":1,"577":1,"614":1,"622":1,"623":1,"652":1,"723":1,"727":1,"729":1}}],["query",{"2":{"623":1}}],["quitgroup",{"2":{"622":1}}],["quarantine",{"2":{"539":2}}],["quot检定结果为",{"2":{"598":1}}],["quot侦查",{"2":{"598":1}}],["quot",{"2":{"31":2,"33":8,"34":2,"35":2,"38":6,"45":2,"64":6,"77":3,"78":6,"141":16,"247":2,"480":2,"595":6,"596":2,"597":2,"599":2,"600":2,"602":2}}],["qdisc",{"2":{"497":1}}],["qr",{"2":{"493":1}}],["q",{"0":{"296":1},"1":{"297":1},"2":{"268":1,"635":1}}],["qsign",{"0":{"245":1,"249":1,"252":1},"2":{"236":1,"237":3,"238":5,"239":5,"241":4,"245":4,"246":4,"249":1,"251":2,"513":1}}],["qq12345",{"2":{"687":1}}],["qq123456",{"2":{"430":1}}],["qqnt",{"0":{"297":1},"2":{"295":1}}],["qq",{"0":{"348":1,"489":1,"496":1,"499":1,"510":1,"512":1,"691":1},"1":{"490":1,"491":1,"492":1,"493":1,"494":1,"495":1,"496":1,"497":2,"498":2,"500":1,"501":1,"502":1,"503":1,"504":1,"505":1,"506":1,"507":1,"508":1,"509":1,"511":1,"512":1,"513":1,"514":1,"515":1,"516":1,"517":1,"518":1,"519":1,"520":1,"521":1,"522":1,"523":1,"524":1,"525":1,"526":1,"527":1},"2":{"18":1,"123":1,"172":6,"227":4,"236":2,"241":2,"242":1,"250":1,"251":2,"253":1,"254":3,"256":1,"258":6,"260":1,"261":4,"263":1,"264":2,"265":2,"268":1,"278":8,"285":2,"287":2,"294":1,"295":4,"333":1,"334":2,"336":1,"337":1,"338":2,"339":1,"341":3,"346":1,"348":1,"349":1,"350":1,"423":1,"431":1,"489":2,"490":1,"491":4,"493":3,"494":1,"496":6,"497":1,"498":1,"499":10,"501":2,"502":1,"503":3,"504":5,"506":1,"510":1,"512":12,"513":7,"514":5,"515":9,"516":1,"518":1,"519":5,"521":4,"522":7,"524":1,"539":1,"540":1,"549":2,"568":1,"580":5,"623":2,"638":1,"681":1,"689":1,"708":2,"717":1,"718":5,"732":1}}],["却使用了",{"2":{"31":2}}],["导出属性值和法术位",{"2":{"663":1}}],["导出属性值",{"0":{"592":1}}],["导出后不要再运行海豹核心",{"2":{"442":1,"577":1}}],["导出数据",{"2":{"442":1,"460":1,"546":1,"577":1}}],["导出文案内容",{"2":{"365":1}}],["导出",{"0":{"365":1},"2":{"365":1}}],["导入完成后也可以把",{"2":{"577":1}}],["导入完成后再点击启动核心",{"2":{"577":1}}],["导入数据",{"2":{"442":1,"577":1}}],["导入自定义回复文件",{"0":{"415":1}}],["导入后点击",{"2":{"356":1}}],["导入",{"2":{"356":1,"365":1}}],["导入包括但不限于以下情形的内容",{"2":{"15":1}}],["导航栏",{"2":{"299":1}}],["导航栏顶部的内存占用",{"2":{"199":1}}],["导致",{"2":{"531":1}}],["导致海豹无法响应直接发起的私聊",{"2":{"471":1}}],["导致缺少条目",{"2":{"365":1}}],["导致它没能被正确执行",{"2":{"230":1}}],["导致发生空行",{"2":{"82":1}}],["导致输入了错误的符号",{"2":{"31":1}}],["半角符号",{"2":{"31":1}}],["务必在删除时小心确认",{"2":{"414":1}}],["务必在本地测试通过",{"2":{"10":1}}],["务必选择以",{"2":{"257":1}}],["务必区分",{"2":{"173":1}}],["务必使用更专业的编辑器",{"2":{"93":1}}],["务必注意使用半角符号",{"2":{"31":1}}],["语句",{"0":{"174":1}}],["语义版本控制",{"2":{"159":1}}],["语言编写扩展插件",{"2":{"402":1}}],["语言规范所提供的",{"2":{"158":1}}],["语言本身",{"2":{"157":1}}],["语言",{"2":{"69":1}}],["语言教程",{"2":{"31":1}}],["语法入门可以参考",{"2":{"281":1,"304":1,"311":1}}],["语法",{"2":{"66":1}}],["语法的扩展",{"2":{"37":1}}],["语法快速入门",{"0":{"31":1},"1":{"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1}}],["语法支持更多现代特性",{"2":{"30":1}}],["菜鸟教程",{"2":{"31":1,"65":1,"69":1,"140":1,"157":1,"314":1}}],["教育",{"2":{"582":1,"616":2}}],["教授如何高效学习亦不是海豹手册应该去做的事",{"2":{"203":1}}],["教程",{"2":{"31":1,"90":1,"157":2,"242":1}}],["教唆使用外挂",{"2":{"15":1}}],["文本文件的形式发送指定日志的全文",{"2":{"729":1}}],["文本模板",{"2":{"705":1}}],["文本模板测试",{"0":{"705":1}}],["文本长度",{"0":{"421":1},"2":{"419":1}}],["文本类型",{"2":{"173":1}}],["文本匹配支持多种方式",{"2":{"420":1}}],["文本匹配",{"0":{"72":1,"73":1,"420":1},"2":{"83":3,"419":2}}],["文本",{"0":{"485":1},"2":{"70":1,"173":1,"420":1}}],["文本时",{"2":{"46":1}}],["文件附件的形式",{"2":{"729":1}}],["文件同步模式",{"2":{"577":2}}],["文件同级的目录下",{"2":{"161":1}}],["文件中将",{"2":{"498":1}}],["文件中维护了海豹提供的",{"2":{"155":1}}],["文件放进",{"2":{"481":1}}],["文件后",{"2":{"480":1}}],["文件目录树",{"0":{"430":1}}],["文件名中含有",{"2":{"315":1}}],["文件名格式是",{"2":{"315":1}}],["文件内",{"2":{"299":1}}],["文件和文档",{"2":{"448":1}}],["文件和",{"2":{"274":1}}],["文件拖动到模拟器即可进行安装",{"2":{"258":1}}],["文件复制到",{"2":{"242":1}}],["文件已经说得足够清楚",{"2":{"188":1}}],["文件夹内部的文档在一级文件夹下平铺展示",{"2":{"395":1}}],["文件夹内布局",{"2":{"187":1,"201":1}}],["文件夹",{"2":{"274":1,"481":1}}],["文件夹单击",{"2":{"262":1}}],["文件夹中新建",{"2":{"262":1}}],["文件夹中",{"2":{"257":1,"262":1}}],["文件夹放到硬盘根目录试试",{"2":{"245":1}}],["文件夹拖到了",{"2":{"224":1}}],["文件夹压缩",{"2":{"56":1}}],["文件夹压缩为",{"2":{"56":1}}],["文件随时可能会有更新",{"2":{"161":1}}],["文件的方式",{"2":{"152":1}}],["文件在",{"2":{"151":1}}],["文件在本质上依然是",{"2":{"56":1}}],["文件以便上传到海豹骰时",{"2":{"151":1}}],["文件编写插件与使用模板工程编写本质上是没有区别的",{"2":{"162":1}}],["文件编写插件",{"0":{"161":1}}],["文件编写",{"2":{"148":1}}],["文件编码",{"2":{"66":1}}],["文件吧",{"2":{"56":1}}],["文件",{"2":{"48":1,"56":3,"94":1,"114":1,"147":1,"158":1,"161":1,"196":1,"242":1,"249":1,"259":1,"262":1,"263":1,"430":1,"480":1,"491":1,"493":1}}],["文档最基本的元素",{"2":{"33":1}}],["文档",{"2":{"31":1,"90":1,"158":1,"258":1,"344":1,"541":1}}],["文案常见问题",{"0":{"379":1},"1":{"380":1}}],["文案下方的标签代表了被默认文案所使用的特殊变量",{"2":{"376":1}}],["文案变量标签",{"0":{"376":1}}],["文案插入图片和",{"0":{"375":1}}],["文案的导入",{"0":{"365":1}}],["文案",{"2":{"363":1}}],["文案列表",{"0":{"363":1},"2":{"362":1,"363":1}}],["文案目前被分为以下几个大类",{"2":{"362":1}}],["文案和",{"2":{"334":1}}],["文案调整",{"0":{"27":1}}],["文案为例",{"2":{"24":1}}],["来辅助识别",{"2":{"723":1}}],["来组织功能和指令",{"2":{"721":1}}],["来源",{"2":{"702":1}}],["来源可能是骰主在后台设置的",{"2":{"323":1}}],["来令对方进行死亡豁免",{"2":{"679":1}}],["来令对方进行长休",{"2":{"677":1}}],["来消耗对方的法术位",{"2":{"675":1}}],["来操作对方的法术位",{"2":{"673":1}}],["来操作对方的",{"2":{"671":1}}],["来操作对方的属性值",{"2":{"593":1,"666":1}}],["来使用骰子机器人了",{"2":{"718":1}}],["来使用对方的技能进行检定",{"2":{"599":1,"668":1}}],["来使修改生效",{"2":{"405":1}}],["来代指",{"2":{"585":1}}],["来管理服务",{"2":{"541":1}}],["来连接海豹和对应平台",{"2":{"540":1}}],["来访问后台",{"2":{"539":2}}],["来启动海豹核心",{"2":{"695":1}}],["来启动海豹",{"2":{"539":2}}],["来区分出账号是否是正常用户",{"2":{"512":1}}],["来将不重要的项折叠起来",{"2":{"418":1}}],["来为你编写回复提供更多有用信息",{"2":{"414":1}}],["来刷新",{"2":{"395":1}}],["来搜索词条内容",{"2":{"394":1}}],["来插入他们",{"2":{"376":1}}],["来提供",{"2":{"285":1,"516":1}}],["来提供切换命令",{"2":{"25":1}}],["来给予权限",{"2":{"239":1}}],["来个大佬救救",{"2":{"223":1}}],["来指定插件的目标海豹版本",{"2":{"167":1}}],["来指定扩展依赖的其他扩展",{"2":{"164":1}}],["来进行更复杂的限制",{"2":{"165":1}}],["来编写插件",{"2":{"161":1}}],["来编写牌堆",{"2":{"30":1}}],["来自",{"2":{"158":1}}],["来帮忙完善",{"2":{"155":1}}],["来开启其中一个",{"2":{"721":1}}],["来开启",{"2":{"146":1}}],["来生成",{"2":{"144":1}}],["来获取配置项",{"2":{"139":1}}],["来获取一个新的",{"2":{"138":1}}],["来简化代码",{"2":{"135":1}}],["来重写这段代码",{"2":{"135":1}}],["来查看当前可用的关键字",{"2":{"648":1}}],["来查看目标用户的黑名单",{"2":{"127":1}}],["来查看黑名单和信任列表",{"2":{"127":1}}],["来信任目标用户",{"2":{"127":1}}],["来解除拉黑",{"2":{"127":1}}],["来拉黑目标用户",{"2":{"127":1}}],["来了解更多",{"2":{"112":1}}],["来换行",{"2":{"68":1}}],["来换行了",{"2":{"35":1}}],["来抽取牌堆",{"2":{"119":2}}],["来抽取",{"2":{"61":1,"612":1}}],["来识别牌组是否隐藏",{"2":{"57":1}}],["u",{"2":{"541":1}}],["up>",{"2":{"497":1}}],["up",{"2":{"492":1,"493":1,"495":1}}],["updateurl",{"2":{"58":3,"61":1}}],["updateurls",{"2":{"58":4,"61":1}}],["updatedate",{"2":{"48":3,"90":1}}],["update",{"2":{"48":1,"58":2}}],["usb",{"2":{"262":2}}],["use",{"2":{"149":1}}],["user",{"2":{"307":1,"460":2,"532":1}}],["userscript==",{"2":{"117":1,"119":1,"121":1,"127":1,"129":1,"130":1,"133":1,"134":1,"136":1,"139":1,"158":1,"159":1}}],["userid",{"2":{"94":3,"96":6,"104":1,"107":1,"108":1,"109":1,"135":1,"332":1,"623":1}}],["url",{"2":{"238":3,"241":1,"466":2,"471":1,"475":1,"482":1}}],["urls",{"2":{"58":2,"64":2}}],["ubuntu",{"2":{"224":1,"302":1}}],["untagall",{"2":{"641":1}}],["unlock",{"2":{"622":1}}],["unless",{"2":{"491":5}}],["uninstall",{"2":{"541":1}}],["unix",{"2":{"141":1,"159":1,"286":1,"302":1}}],["unicode",{"2":{"34":1,"35":1}}],["undefined",{"2":{"110":1,"129":1}}],["unmarshalyaml",{"2":{"108":1}}],["unknown",{"2":{"97":1}}],["utf",{"2":{"30":1,"66":1}}],["uipasswordhash",{"2":{"699":1}}],["uid=$",{"2":{"135":1}}],["uid",{"2":{"123":3,"124":2,"126":1}}],["ui",{"0":{"325":1},"2":{"5":1,"56":1,"57":1,"62":1,"138":1,"139":2,"241":1,"307":1,"323":1,"347":1,"352":1,"362":1,"385":1,"389":1,"395":1,"404":1,"413":1,"427":3,"441":1,"479":1,"514":1,"515":2,"518":1,"521":1,"524":1,"549":1,"625":1,"729":1,"730":1}}],["当角色名变化时也会自动更新",{"2":{"733":1}}],["当用户角色卡的数值变化时",{"2":{"732":1}}],["当人物已经昏迷",{"2":{"665":1}}],["当生命值归零",{"2":{"665":2}}],["当存在临时生命",{"2":{"665":1}}],["当指定的牌组名称不存在时",{"2":{"653":1}}],["当一个账号被标记后",{"2":{"649":1}}],["当调查员在游戏中成功使用了技能",{"2":{"613":1}}],["当房规设定为规则书标准",{"2":{"594":1}}],["当遇到登录失败",{"2":{"514":1}}],["当遇到不理解的概念时",{"2":{"206":1}}],["当任一镜像有更新时",{"2":{"495":1}}],["当服务器后台日志中出现",{"2":{"482":1}}],["当出现",{"2":{"480":1}}],["当消息长度",{"2":{"421":1}}],["当消息命中敏感词的时候",{"2":{"355":1}}],["当骰子收到和内容",{"2":{"420":1}}],["当回复项有多个条件时",{"2":{"419":1}}],["当回复项较多的时候",{"2":{"418":1}}],["当成长失败且有失败成长值时则调用",{"2":{"371":2}}],["当成长失败且没有失败成长值时则调用",{"2":{"371":2}}],["当理智归零时则调用",{"2":{"370":1}}],["当同一个用户触发同一等级的次数超过对应设置时",{"2":{"355":1}}],["当同时填写了",{"2":{"141":1}}],["当有人",{"2":{"688":1}}],["当有新版本海豹核心时",{"2":{"542":1}}],["当有多条指令时以",{"2":{"374":1}}],["当有用户触发黑名单事件时",{"2":{"328":1}}],["当有群员或管理进一步地询问相关问题",{"2":{"191":1,"232":1}}],["当插件使用了在",{"2":{"167":1}}],["当插件开发完成后",{"2":{"150":1}}],["当你的增减表达式错误时",{"2":{"369":1}}],["当你的检定为多轮检定时",{"2":{"368":1}}],["当你的海豹核心运行在公网时可设置密码",{"2":{"347":1}}],["当你的海豹与",{"2":{"278":1}}],["当你在帮助文档中写下",{"2":{"394":1}}],["当你在凝视深渊的时候",{"2":{"356":1}}],["当你在复制粘贴",{"2":{"46":1}}],["当你",{"2":{"334":1}}],["当你用鼠标选中控制台内的文本时",{"2":{"292":1}}],["当你访问",{"2":{"278":1}}],["当你试图在下文所述的条件算符或条件语句中",{"2":{"173":1}}],["当你写好了代码",{"2":{"151":1}}],["当连续两轮所有玩家都选择不摸鱼时",{"2":{"145":1}}],["当填写了",{"2":{"141":1}}],["当使用前者时",{"2":{"141":1}}],["当",{"2":{"94":2,"141":2,"512":1}}],["当前日志设定为指定的日志",{"2":{"727":1}}],["当前日志指向本群的其中一个日志记录",{"2":{"727":1}}],["当前正在运行",{"2":{"693":1}}],["当前角色需已设定最大生命值且当前生命值大于",{"2":{"676":1}}],["当前判定线的五分之一",{"2":{"597":1}}],["当前判定线的二分之一",{"2":{"597":1}}],["当前回复文件",{"0":{"414":1}}],["当前备份文件列表",{"2":{"315":1}}],["当前",{"2":{"274":1,"686":1}}],["当前人物卡的名字",{"2":{"172":1}}],["当前等级",{"2":{"127":2}}],["当前群组信息等",{"2":{"114":1,"117":1,"135":1}}],["当前群信息",{"2":{"105":1}}],["当前玩家数据",{"2":{"105":1}}],["当前只能查阅海豹源码",{"2":{"94":1}}],["当前在模式2",{"2":{"26":1}}],["当前在模式1",{"2":{"26":1}}],["当前在默认模式",{"2":{"26":1}}],["当正则表达式获得匹配时",{"2":{"73":1}}],["当执行",{"2":{"64":1}}],["当牌组的名称以",{"2":{"57":3}}],["当然如果你没做过自定义配置",{"2":{"687":1}}],["当然不用",{"2":{"419":1}}],["当然你也可以使用其它协议",{"2":{"159":1}}],["当然可以",{"2":{"154":1}}],["当然",{"2":{"30":1,"70":1,"135":1,"185":1,"207":1,"214":1,"215":1,"230":1,"252":1,"363":1,"420":1,"446":1}}],["格式和塔骰格式",{"2":{"568":1}}],["格式应当为",{"2":{"515":2}}],["格式为",{"2":{"393":1}}],["格式是",{"2":{"385":1}}],["格式组织起来",{"2":{"383":1}}],["格式化错误",{"2":{"183":1}}],["格式化",{"2":{"93":1}}],["格式的自定义回复文件",{"2":{"415":1}}],["格式的文件",{"2":{"356":1}}],["格式的包也是可以使用的",{"2":{"154":1}}],["格式的包",{"2":{"154":1}}],["格式的时间",{"2":{"141":1}}],["格式的敏感词库",{"0":{"90":1}}],["格式的",{"2":{"68":1,"141":1}}],["格式的帮助文档中嵌套引用其它条目",{"2":{"66":1}}],["格式的帮助文档",{"0":{"66":1,"68":1},"1":{"67":1},"2":{"68":1}}],["格式的复杂牌组中",{"2":{"64":1}}],["格式的牌堆编写",{"2":{"30":1}}],["格式的牌堆",{"2":{"30":1}}],["格式错乱会无法识别",{"2":{"46":1}}],["格式诞生较晚",{"2":{"30":1}}],["格式",{"2":{"30":1,"33":1,"45":1,"65":1,"66":1,"90":4,"129":2,"133":1,"134":2,"314":1}}],["journalctl",{"2":{"541":1}}],["join",{"2":{"129":1}}],["j",{"0":{"280":1},"1":{"281":1},"2":{"684":1}}],["jar",{"2":{"480":5,"481":1}}],["jaro",{"2":{"72":2}}],["java",{"2":{"478":12,"480":1}}],["javascriptext",{"2":{"117":2}}],["javascriptconst",{"2":{"114":1,"131":1,"135":2}}],["javascriptcmdseal",{"2":{"114":1,"115":1,"116":1}}],["javascriptcmd",{"2":{"94":1,"98":1}}],["javascriptseal",{"2":{"102":1,"104":1,"135":2,"141":1}}],["javascript",{"0":{"170":1,"401":1,"402":1},"1":{"402":1,"403":1,"404":1,"405":1,"406":1,"407":1,"408":1,"409":1,"410":1},"2":{"94":2,"95":1,"96":1,"97":1,"99":1,"100":1,"101":1,"103":1,"105":2,"106":1,"107":1,"108":1,"109":1,"110":1,"112":1,"117":2,"119":2,"121":1,"127":1,"129":2,"130":1,"133":2,"134":2,"135":1,"136":2,"137":1,"142":2,"143":1,"147":2,"157":7,"158":3,"159":2,"161":1,"165":2,"166":1,"170":4,"401":1,"402":3,"412":1,"625":1,"744":1}}],["jpg",{"2":{"56":2,"133":1,"443":1}}],["jwcc",{"2":{"37":1}}],["jrrp和",{"2":{"569":1}}],["jrrp",{"0":{"701":1},"2":{"28":1,"97":1,"181":1,"362":1,"701":1}}],["jsr",{"0":{"703":1},"2":{"703":1}}],["jsmodule",{"2":{"156":1}}],["jsscripttaskctx",{"2":{"141":2}}],["jsbind",{"2":{"138":7}}],["js扩展信任测试",{"2":{"127":1}}],["js扩展信任",{"2":{"127":1}}],["js扩展拉黑测试",{"2":{"127":1}}],["js扩展拉黑",{"2":{"127":1}}],["jsvm",{"2":{"94":1}}],["json5",{"2":{"66":3}}],["jsonc",{"2":{"37":1}}],["json",{"0":{"38":1,"39":1,"40":1,"66":1,"281":1},"1":{"67":1},"2":{"30":2,"31":2,"36":2,"37":6,"38":2,"39":2,"40":2,"48":6,"50":1,"52":1,"53":1,"54":1,"56":2,"57":5,"58":1,"59":1,"63":2,"64":1,"65":3,"66":8,"67":1,"94":1,"103":1,"128":3,"129":3,"130":8,"131":2,"135":6,"150":1,"152":2,"190":1,"226":1,"281":1,"301":1,"383":1,"385":1,"393":1,"493":3}}],["js",{"0":{"161":1,"403":1,"404":1,"409":1,"410":1},"1":{"405":1,"406":1,"407":1,"408":1},"2":{"25":1,"93":1,"94":1,"112":5,"127":4,"128":2,"130":1,"137":1,"139":5,"147":1,"148":4,"150":3,"151":4,"152":3,"154":2,"156":1,"158":7,"159":2,"161":1,"162":2,"402":1,"403":2,"404":3,"405":2,"408":1,"409":1,"410":1,"622":1}}],["以在名片中使用小写字母",{"2":{"733":1}}],["以控制指令的行为",{"2":{"721":1}}],["以打破死锁",{"2":{"708":1}}],["以打卡指令为例",{"2":{"83":1}}],["以这种方式骰出的点数会自动成为一个骰池",{"2":{"703":1}}],["以腾讯云轻量服务器为例",{"2":{"686":1}}],["以允许远程",{"2":{"684":1}}],["以确定海豹核心是否收到了指令",{"2":{"681":1}}],["以确保其接受任何来源的连接",{"2":{"497":1}}],["以确保数据被写入硬盘",{"2":{"457":1}}],["以确保正则表达式的表现一致",{"2":{"69":1}}],["以使用对方的属性",{"2":{"639":1}}],["以使用对方的技能进行检定",{"2":{"602":1}}],["以进行更复杂的运算",{"2":{"637":1}}],["以此类推",{"2":{"635":1,"636":1,"672":1}}],["以更方便地计算某些固定骰点",{"2":{"591":1}}],["以适配尽量多的用法",{"2":{"582":1}}],["以提供各自不同的服务内容",{"2":{"571":1}}],["以避免预期外结果",{"2":{"548":1}}],["以备份数据",{"2":{"546":1}}],["以不合理的速度在多地区登录等等",{"2":{"512":1}}],["以启动服务器",{"2":{"481":1}}],["以防万一最好导出一次保留数据",{"2":{"444":1}}],["以图片",{"2":{"375":1}}],["以便顺畅使用的方法",{"2":{"446":1}}],["以便于骰主知晓存活状态",{"2":{"344":1}}],["以便使用和分享",{"2":{"159":1}}],["以免数据丢失",{"2":{"542":1}}],["以免更新失败",{"2":{"542":1}}],["以免产生不必要的报错信息",{"2":{"341":1,"513":1}}],["以免造成麻烦",{"2":{"254":1}}],["以设置自动清理时机",{"2":{"320":1}}],["以对外暴露",{"2":{"254":1}}],["以对方身份进行骰点",{"2":{"134":1}}],["以至于错失了一个全新的",{"2":{"204":1}}],["以及括号",{"2":{"637":1}}],["以及极少的",{"2":{"550":1}}],["以及一些与文件相关的问题",{"2":{"429":1}}],["以及",{"2":{"393":1,"492":1}}],["以及你的操作系统等",{"2":{"227":1}}],["以及你使用的程序版本号",{"2":{"190":1}}],["以及如何在",{"2":{"193":1,"202":1}}],["以及帮助社畜制作者们稍微抵抗来自现实的引力",{"2":{"2":1}}],["以秒为单位的",{"2":{"159":1}}],["以供参考",{"2":{"147":1}}],["以结构体方法的形式存在",{"2":{"94":1}}],["以匹配",{"0":{"85":1}}],["以下内容针对从未接触过骰子的用户准备",{"2":{"716":1}}],["以下内容归档于",{"2":{"203":1,"213":1,"236":1,"253":1,"254":1,"261":1}}],["以下指令均可",{"2":{"683":1}}],["以下的角色名部分相同",{"2":{"659":1}}],["以下载对应文件",{"2":{"321":1}}],["以下",{"2":{"255":1}}],["以下教程也不再适用",{"2":{"254":1}}],["以下是一些典型的反例",{"2":{"223":1}}],["以下是一些合适的措辞",{"2":{"223":1,"224":1,"225":1,"226":1,"227":1}}],["以下代码处理的是",{"2":{"115":1}}],["以下为",{"2":{"367":1}}],["以下为部分",{"2":{"94":1}}],["以下为简要说明",{"2":{"41":1}}],["以下给出在同一个",{"2":{"84":1}}],["以石头剪刀布为例",{"2":{"84":1}}],["以养猫功能中猫好感度为例",{"2":{"81":1}}],["以显示该牌堆提供了云端内容",{"2":{"62":1}}],["以指定对应的更新链接",{"2":{"58":3}}],["以示例图中路径为例",{"2":{"56":1}}],["以示它们的不同",{"2":{"37":1}}],["以上指令等价于",{"2":{"656":1}}],["以上所有骰法",{"2":{"637":1}}],["以上功能可以组合使用",{"0":{"600":1}}],["以上功能均可以通过附加",{"2":{"593":1,"599":1,"666":1,"668":1,"671":1,"673":1,"675":1,"677":1,"679":1}}],["以上命令的详细用法",{"2":{"541":1}}],["以上命令会完成容器更新",{"2":{"495":1}}],["以上版本",{"2":{"460":1}}],["以上的安卓端海豹",{"2":{"265":1}}],["以上的规则模板和指令都可以在同一个",{"2":{"147":1}}],["以上就是我们总结出的",{"2":{"212":1}}],["以上就是提问的智慧中我们总结出的",{"2":{"192":1,"234":1}}],["以上",{"2":{"180":1,"182":1,"255":1,"261":1,"457":1}}],["以上三个对象内容暂略",{"2":{"105":1}}],["以上两种写法实现效果没有差别",{"2":{"83":1}}],["以上述牌组为例",{"2":{"64":1}}],["以上文的例子而言",{"2":{"54":1}}],["以上结构相当于",{"2":{"36":1}}],["以两个斜杠",{"2":{"42":1}}],["以",{"2":{"33":1,"54":1,"349":1,"538":2,"569":1,"721":1,"722":1}}],["以修改了",{"2":{"28":1}}],["展示当前",{"2":{"670":1}}],["展示列表",{"2":{"623":1}}],["展示我的权限",{"2":{"121":1}}],["展示",{"0":{"28":1}}],["`另一种插入表达式的写法",{"2":{"173":1}}],["`特殊文本类型",{"2":{"173":1}}],["`json",{"2":{"138":6}}],["`抱歉",{"2":{"135":1}}],["`http",{"2":{"135":1}}],["`正在试图捕捉$",{"2":{"134":1}}],["`骰子面数应是数字`",{"2":{"133":1}}],["`结果是",{"2":{"130":1}}],["`当前分歧",{"2":{"130":6,"131":1}}],["`已新建分歧",{"2":{"130":1}}],["`群内安价收集",{"2":{"130":1}}],["`投喂记录",{"2":{"129":1}}],["`用户$",{"2":{"127":1}}],["`你在群$",{"2":{"133":1}}],["`你给海豹投喂了$",{"2":{"129":1}}],["`你抓到一只海豹",{"2":{"116":1,"117":1}}],["`你需要的回复文本`",{"2":{"83":1}}],["`煤气灯`",{"2":{"102":2}}],["`我要",{"2":{"99":1}}],["`$",{"2":{"127":1,"130":2}}],["`$g群友经典语录`",{"2":{"99":2}}],["`$m今日打卡次数`",{"2":{"99":2}}],["`$xxx`即",{"2":{"94":1}}],["`$xxx`",{"2":{"94":10}}],["`那我出",{"2":{"84":3}}],["`在一天触发多次时的回复`",{"2":{"83":1}}],["`内容6`",{"2":{"81":1}}],["`内容5`",{"2":{"81":1}}],["`内容4`",{"2":{"81":1}}],["`内容3`",{"2":{"81":1}}],["`内容2`",{"2":{"81":1}}],["`内容1`",{"2":{"81":3}}],["`",{"2":{"26":1,"27":6,"77":1,"81":20,"84":3,"94":4,"97":2,"116":1,"117":1,"119":2,"127":1,"129":4,"130":9,"131":1,"133":1,"134":1,"135":6,"138":6,"173":2}}],["x86",{"2":{"642":1,"722":1}}],["xargs",{"2":{"576":2}}],["xattr",{"2":{"539":2}}],["xe",{"2":{"541":1}}],["x64",{"2":{"538":3,"539":1}}],["xmx2g",{"2":{"480":2}}],["xms2g",{"2":{"480":2}}],["xposed",{"2":{"254":1,"257":2}}],["x",{"2":{"133":6,"137":3,"239":1,"478":1,"635":4,"636":4,"746":2}}],["x3c",{"2":{"78":5,"81":5,"90":1,"114":1,"117":2,"119":2,"127":4,"129":2,"130":1,"134":2,"136":4,"139":1,"173":2,"375":1,"497":1,"570":1,"582":6,"694":1,"695":1,"722":5}}],["xx",{"2":{"224":2}}],["xx=xxx",{"2":{"73":1}}],["xxxxxxxx",{"2":{"315":1}}],["xxxx",{"2":{"116":1,"117":1}}],["xxx",{"2":{"12":1,"48":2,"64":1,"73":1,"137":5,"138":1,"223":1,"242":1}}],["xlsx",{"2":{"68":2,"393":1,"504":1}}],["x26",{"2":{"26":6,"37":1,"39":2,"47":1,"78":2,"84":12,"135":3,"177":2,"539":4}}],["07",{"2":{"481":3}}],["01",{"2":{"480":1}}],["06",{"2":{"242":2}}],["05",{"2":{"242":2}}],["00",{"2":{"141":2,"242":4,"480":2,"481":6,"482":2}}],["02",{"2":{"130":1,"497":1}}],["0=没事",{"2":{"125":1}}],["08",{"2":{"33":2,"48":4,"141":1,"142":1}}],["0",{"2":{"26":1,"27":1,"48":5,"72":1,"76":1,"90":2,"94":2,"98":1,"112":4,"117":4,"119":4,"120":2,"121":4,"127":4,"129":5,"130":11,"133":4,"134":4,"136":3,"139":4,"158":2,"159":4,"165":14,"166":6,"172":2,"173":1,"178":2,"181":1,"253":6,"254":3,"259":4,"261":1,"262":1,"278":8,"347":6,"350":1,"442":1,"478":1,"481":1,"482":7,"493":9,"497":9,"498":2,"521":2,"570":3,"594":1,"598":1,"605":1,"609":1,"615":1,"619":1,"625":1,"634":4,"635":1,"648":1,"652":2,"665":40,"670":6,"676":1,"678":4,"684":5,"686":8,"689":2,"694":3,"695":2,"715":1,"751":1}}],["$",{"2":{"119":1,"127":6,"129":2,"130":14,"131":2,"133":1,"135":1,"290":1,"582":5}}],["$xxx",{"2":{"94":2}}],["$g群主体重",{"2":{"172":1}}],["$g开头",{"2":{"172":1}}],["$g",{"2":{"83":1,"172":1}}],["$g文案模式==2",{"2":{"26":1}}],["$g文案模式==1",{"2":{"26":1}}],["$g文案模式==0",{"2":{"26":1}}],["$g文案模式",{"2":{"26":3,"27":3}}],["$m今日人品",{"2":{"172":1}}],["$m开头",{"2":{"172":1}}],["$mstory=0",{"2":{"87":1}}],["$mstory",{"2":{"87":10}}],["$mplayerwin",{"2":{"84":2}}],["$mplayerlose",{"2":{"84":2}}],["$mplayertime",{"2":{"84":6}}],["$m变量==$tdate",{"2":{"83":1}}],["$m变量=$tdate",{"2":{"83":1}}],["$m变量",{"2":{"83":4}}],["$m",{"2":{"83":1,"172":1}}],["$mcatfavor不同",{"2":{"81":1}}],["$mcatfavor",{"2":{"81":5}}],["$m金币=$m金币",{"2":{"59":3}}],["$m金币=$m金币+114",{"2":{"59":3}}],["$t目标指令",{"2":{"374":1}}],["$t目标文案",{"2":{"27":4}}],["$t指令来源",{"2":{"374":1}}],["$t列表内容",{"2":{"374":1}}],["$t原因句子",{"2":{"373":1}}],["$t总结果文本",{"2":{"371":1}}],["$t提示",{"2":{"370":1}}],["$t附加语",{"2":{"370":1}}],["$t变更列表",{"2":{"369":1}}],["$t判定结果",{"2":{"368":1}}],["$t结果文本",{"2":{"368":2,"370":1,"371":2,"373":2}}],["$t消息类型",{"2":{"172":1}}],["$t游戏模式",{"2":{"172":1}}],["$t平台",{"2":{"172":1}}],["$t文本长度",{"2":{"172":1}}],["$ttimestamp",{"2":{"172":1}}],["$tsecond",{"2":{"172":1}}],["$tmsgid",{"2":{"172":1}}],["$tminute",{"2":{"172":1}}],["$tmonth",{"2":{"172":1}}],["$thour",{"2":{"172":1}}],["$tweekday",{"2":{"172":1}}],["$tyear",{"2":{"172":1}}],["$t个人骰子面数",{"2":{"172":1}}],["$t群组骰子面数",{"2":{"376":2}}],["$t群号",{"2":{"172":2}}],["$t群名",{"2":{"172":1}}],["$tqq",{"2":{"172":1}}],["$tqq昵称",{"2":{"172":1}}],["$t账号id",{"2":{"172":2}}],["$t随机点数",{"2":{"172":1}}],["$t开头",{"2":{"172":1}}],["$t",{"2":{"172":6}}],["$t人品",{"2":{"97":2,"181":5}}],["$tday",{"2":{"172":1}}],["$tdate",{"2":{"83":3,"172":1}}],["$tdiceplay==",{"2":{"84":6}}],["$tdiceplay==$t0",{"2":{"84":1}}],["$tdiceplay=",{"2":{"84":3}}],["$tdiceplay=条件算符",{"2":{"84":1}}],["$tdiceplay",{"2":{"84":6}}],["$trand之后再次判断的时候",{"2":{"84":1}}],["$trand==3",{"2":{"84":1}}],["$trand==2",{"2":{"84":2}}],["$trand==1",{"2":{"81":2,"84":2}}],["$trand=d3",{"2":{"84":3}}],["$trand=d10",{"2":{"81":2}}],["$trand=d6",{"2":{"81":1}}],["$trand",{"2":{"79":2,"84":1}}],["$t测试赋值为",{"2":{"78":1}}],["$t测试",{"2":{"78":5}}],["$t测试==2",{"2":{"78":1}}],["$t测试==1",{"2":{"78":1}}],["$t测试=1",{"2":{"77":1,"78":1}}],["$ta",{"2":{"73":1}}],["$t0=0",{"2":{"183":1}}],["$t0==",{"2":{"84":6}}],["$t0",{"2":{"73":1,"79":8,"84":4,"173":11,"174":3,"183":3}}],["$t玩家",{"2":{"73":1,"84":3,"97":1,"116":1,"172":2,"181":1,"735":1}}],["$t2",{"2":{"73":1}}],["$t输出3",{"2":{"82":2}}],["$t输出2",{"2":{"82":5}}],["$t输出1",{"2":{"82":2}}],["$t输出0",{"2":{"82":2}}],["$t输出",{"2":{"26":1,"78":5,"81":2,"82":1,"83":3,"84":3}}],["$t输出=$trand==6",{"2":{"81":1}}],["$t输出=$trand==5",{"2":{"81":1}}],["$t输出=$trand==4",{"2":{"81":1}}],["$t输出=$trand==3",{"2":{"81":1}}],["$t输出=$trand==2",{"2":{"81":1}}],["$t输出=$trand==1",{"2":{"81":1}}],["$t输出=`不存在指定模式",{"2":{"26":1}}],["$t输出=",{"2":{"26":3,"78":3}}],["$t1=",{"2":{"77":1,"183":1}}],["$t1==",{"2":{"26":3}}],["$t1",{"2":{"26":5,"73":3,"174":2,"183":4}}],["$t计算结果",{"2":{"24":3}}],["$t计算过程",{"2":{"24":1}}],["$t表达式文本",{"2":{"24":1}}],["默认随机生成",{"2":{"762":1}}],["默认是",{"2":{"762":1,"763":1}}],["默认是中文",{"2":{"762":1}}],["默认不记录频道消息",{"2":{"691":1}}],["默认持续时长为",{"2":{"686":2}}],["默认技能等级",{"0":{"558":1}}],["默认开放的正向",{"2":{"521":1}}],["默认开启",{"2":{"342":1}}],["默认端口为",{"2":{"482":1}}],["默认状态下",{"2":{"414":1}}],["默认情况下",{"2":{"413":1,"541":1}}],["默认分组",{"2":{"396":1}}],["默认会被解析为",{"2":{"377":1}}],["默认文案",{"2":{"364":1}}],["默认为抽",{"2":{"653":1}}],["默认为每页",{"2":{"642":1}}],["默认为",{"2":{"347":1,"488":1,"636":1}}],["默认为空",{"2":{"238":1}}],["默认关闭",{"2":{"343":1,"346":1}}],["默认使用",{"2":{"302":1}}],["默认的",{"2":{"181":1,"238":1}}],["默认的名字是",{"2":{"151":1}}],["默认输出的插件代码是压缩过的",{"0":{"156":1}}],["默认值的生效范围是当前群组",{"2":{"711":1}}],["默认值可以由",{"2":{"711":1}}],["默认值",{"2":{"711":1}}],["默认值等信息",{"2":{"138":1}}],["默认值和可选项",{"2":{"94":1}}],["默认模式启用",{"2":{"26":1}}],["默认",{"2":{"26":2,"396":1,"619":1}}],["ielts单词",{"2":{"652":1}}],["ios",{"2":{"686":1,"723":1}}],["io",{"2":{"491":5,"539":1}}],["ip138",{"2":{"686":1}}],["iptables",{"2":{"684":1}}],["ipv4",{"2":{"278":1}}],["ip",{"0":{"278":1},"2":{"187":1,"201":1,"270":1,"278":7,"482":3,"497":5,"501":6,"684":1,"686":3}}],["im",{"2":{"531":1,"532":3,"640":3,"706":4}}],["implementations",{"2":{"493":1}}],["image",{"2":{"135":2,"242":1,"491":5}}],["images",{"2":{"55":1,"66":1,"375":4,"428":1,"443":1}}],["imsyy",{"2":{"135":2}}],["i",{"0":{"277":1},"1":{"278":1,"279":1},"2":{"130":3,"447":1,"541":1,"684":1,"696":1}}],["input",{"2":{"684":1}}],["init",{"0":{"660":1},"2":{"660":8,"672":1,"746":1}}],["in",{"2":{"539":1}}],["inet6",{"2":{"497":1}}],["inet",{"2":{"497":1}}],["indicating",{"2":{"480":1}}],["index",{"2":{"130":8,"136":1,"152":2}}],["installation",{"2":{"466":1}}],["install",{"2":{"151":2,"152":1,"466":1,"532":2}}],["information",{"2":{"532":1}}],["info",{"2":{"127":9,"242":2,"299":1,"460":3,"481":3,"482":1,"626":1,"648":1}}],["inviter",{"2":{"121":1}}],["inviteuserid",{"2":{"106":1}}],["intel",{"2":{"538":2,"539":1}}],["intent",{"2":{"464":3}}],["intents",{"2":{"464":1}}],["interface",{"2":{"138":3,"307":1}}],["intval",{"2":{"139":2}}],["int64",{"2":{"109":1}}],["intset",{"2":{"94":1,"99":1}}],["intget",{"2":{"94":3,"99":1}}],["int",{"2":{"94":8,"105":1,"138":1}}],["id>",{"2":{"722":1}}],["id",{"0":{"469":1},"2":{"94":4,"108":1,"109":1,"123":2,"125":2,"127":2,"135":1,"172":6,"238":1,"332":3,"333":1,"427":3,"460":6,"469":2,"470":1,"501":1,"622":1,"623":10,"642":1,"706":2,"722":1}}],["ignore",{"2":{"90":1}}],["is",{"0":{"198":1},"2":{"460":6}}],["isnan",{"2":{"133":1}}],["isargequal",{"2":{"110":1}}],["isactive",{"2":{"106":1}}],["isprivate",{"2":{"105":1}}],["iscurgroupboton",{"2":{"105":1}}],["isshuffle",{"2":{"94":2}}],["issues",{"2":{"279":1}}],["issue",{"0":{"192":1,"193":1,"202":1,"233":1,"279":1},"2":{"5":1,"7":1,"18":1,"192":1,"193":3,"202":3,"206":8,"233":1,"236":1,"279":3}}],["iso8601",{"2":{"45":1}}],["if",{"0":{"78":1},"2":{"26":4,"27":3,"78":10,"79":1,"81":3,"83":3,"84":9,"87":4,"112":1,"116":1,"117":2,"119":2,"121":1,"127":10,"129":2,"130":6,"133":4,"134":1,"135":2,"136":6,"137":2,"139":3,"142":1,"174":2,"183":1}}],["见到卡片右上角出现锁图标即可",{"2":{"450":1}}],["见",{"2":{"25":1,"92":1,"162":1,"236":1,"326":1,"355":1,"381":1,"386":1,"390":1,"394":1,"400":1,"408":1,"410":1,"419":2,"420":1,"513":4,"540":1,"729":1}}],["了解海豹的扩展能力",{"2":{"579":1}}],["了解海豹语",{"0":{"92":1}}],["了解如何快速搭建海豹",{"2":{"579":1}}],["了解全部指令",{"2":{"579":1}}],["了解更多",{"2":{"263":1}}],["了解一个概念背后的一些细节",{"2":{"211":1}}],["了解自定义回复的编写",{"2":{"25":1}}],["了解指令的基本格式",{"2":{"19":1}}],[">=2",{"2":{"165":1,"166":1}}],[">=",{"2":{"130":2,"136":1,"173":1,"180":2,"181":4,"182":1}}],[">",{"2":{"24":1,"73":1,"76":1,"82":1,"110":3,"130":1,"173":1,"181":4,"183":2,"363":1,"375":1,"552":2,"562":1,"591":1,"593":1,"595":1,"596":1,"597":1,"598":1,"599":1,"600":1,"602":2,"604":2,"605":2,"608":1,"611":1,"616":1,"624":1,"625":2,"628":1,"629":1,"630":1,"631":1,"632":2,"633":4,"634":2,"635":2,"636":1,"637":2,"638":1,"639":1,"640":1,"652":1,"653":1,"658":1,"659":1,"660":1,"665":2,"667":1,"669":1,"670":4,"672":1,"674":1,"676":1,"678":4,"702":1,"703":1,"704":1,"706":3,"709":1,"711":2}}],["啧",{"2":{"24":2}}],["乐",{"2":{"24":2}}],["=0",{"2":{"711":1}}],["=d30",{"2":{"659":1}}],["=d20+2",{"2":{"659":1,"756":1}}],["=d20+3",{"2":{"659":1}}],["=399",{"2":{"639":1}}],["=3942",{"2":{"637":1}}],["=3",{"2":{"638":1,"678":1}}],["=32",{"2":{"636":1}}],["=36",{"2":{"631":1}}],["=87",{"2":{"631":1}}],["=8",{"2":{"629":1}}],["=42",{"2":{"631":1}}],["=4",{"2":{"628":1,"635":1}}],["=48",{"2":{"628":1}}],["=96+",{"2":{"619":1}}],["=60",{"2":{"628":1}}],["=600",{"2":{"81":1}}],["=6",{"2":{"591":1,"633":1}}],["=7",{"2":{"562":1,"629":1,"632":1}}],["=>",{"2":{"94":1,"98":2,"114":1,"115":1,"116":1,"117":1,"119":2,"121":1,"127":6,"129":1,"130":3,"133":1,"134":1,"135":4,"136":1,"137":1,"139":1,"142":2}}],["=13",{"2":{"637":1}}],["=11",{"2":{"633":1,"635":1,"637":1}}],["=10",{"2":{"633":2}}],["=100",{"2":{"81":1}}],["=17",{"2":{"632":1}}],["=19",{"2":{"632":1}}],["=14",{"2":{"628":1}}],["=16",{"2":{"562":1,"632":1}}],["=1500",{"2":{"81":1}}],["=1",{"2":{"78":1,"711":1}}],["=20",{"2":{"678":1}}],["=224",{"2":{"639":1}}],["=25",{"2":{"637":1}}],["=2500",{"2":{"81":1}}],["=250",{"2":{"81":1}}],["=2",{"2":{"78":1,"165":3,"635":1}}],["===",{"2":{"127":6,"129":1,"130":2,"133":1,"570":3}}],["==userscript==",{"2":{"117":1,"119":1,"121":1,"127":1,"129":1,"130":1,"133":1,"134":1,"136":1,"139":1,"158":1,"159":1,"165":2,"166":1}}],["==",{"2":{"24":2,"27":3,"74":1,"79":1,"84":1,"87":7,"117":1,"119":1,"121":1,"127":4,"129":1,"130":1,"133":2,"134":1,"136":2,"139":2,"158":1,"159":1,"173":4}}],["=",{"2":{"24":1,"26":7,"27":3,"32":1,"33":1,"35":2,"36":7,"37":5,"48":10,"50":2,"51":3,"53":1,"57":4,"58":4,"59":1,"61":7,"63":3,"64":21,"72":2,"79":3,"81":2,"83":5,"84":9,"87":3,"90":13,"94":1,"98":6,"112":1,"114":4,"115":4,"116":5,"117":14,"119":13,"121":11,"127":48,"129":15,"130":37,"131":2,"133":8,"134":12,"135":4,"136":26,"137":3,"139":17,"141":1,"142":2,"144":1,"150":1,"156":1,"173":9,"174":5,"183":3,"591":1,"634":1,"635":1,"658":5,"665":1,"667":3,"669":1}}],["ri",{"0":{"659":1},"2":{"659":11,"746":1,"756":1}}],["rh",{"0":{"638":1},"2":{"746":1}}],["rm",{"2":{"623":1,"641":1,"709":2}}],["rsr",{"0":{"715":1},"2":{"572":1,"715":1,"746":1}}],["r1d20",{"2":{"548":1}}],["rcv",{"0":{"603":1},"1":{"604":1,"605":1,"606":1}}],["rch",{"0":{"601":1},"1":{"602":1}}],["rc",{"0":{"368":1,"594":1,"667":1},"1":{"595":1,"596":1,"597":1,"598":1,"599":1,"600":1,"668":1,"669":1},"2":{"594":3,"601":1,"667":6,"669":1,"721":1,"746":1,"747":1}}],["rxx",{"2":{"315":1}}],["rxh",{"0":{"639":1},"2":{"172":1}}],["rx",{"0":{"639":1},"2":{"172":1,"639":1}}],["run",{"2":{"151":2,"152":1,"498":1,"539":1}}],["rule",{"2":{"94":1,"136":7}}],["roll",{"2":{"627":1,"765":1}}],["rollvm",{"2":{"94":6,"97":1,"119":1}}],["room",{"2":{"482":1}}],["root",{"0":{"256":1},"2":{"254":9,"256":5,"261":1,"263":1,"491":3,"541":2}}],["round",{"2":{"133":1}}],["rd",{"2":{"133":2,"354":1,"539":2}}],["rav",{"0":{"603":1},"1":{"604":1,"605":1,"606":1},"2":{"604":1,"605":1,"606":2,"746":1}}],["rah",{"0":{"601":1},"1":{"602":1},"2":{"746":1}}],["ra",{"0":{"368":1,"594":1},"1":{"595":1,"596":1,"597":1,"598":1,"599":1,"600":1},"2":{"172":1,"363":1,"368":1,"503":1,"504":1,"570":2,"582":3,"594":3,"595":3,"596":1,"597":1,"598":1,"601":1,"746":3,"747":1}}],["rand",{"2":{"642":1,"722":1}}],["randomint",{"2":{"130":2}}],["random",{"2":{"116":1,"117":1,"130":1,"133":1,"134":1,"135":1}}],["rank",{"2":{"125":1,"127":5}}],["raw",{"2":{"172":3,"735":1}}],["rawargs",{"2":{"110":1}}],["rawid",{"2":{"109":1}}],["rfc",{"2":{"33":1,"90":2}}],["r",{"0":{"298":1,"373":1,"627":1},"1":{"299":1,"628":1,"629":1,"630":1,"631":1,"632":1,"633":1,"634":1,"635":1,"636":1,"637":1},"2":{"24":2,"130":2,"262":1,"503":1,"548":1,"562":1,"570":4,"591":1,"627":1,"628":6,"631":2,"632":2,"635":1,"637":3,"638":1,"639":1,"640":1,"746":2,"747":1}}],["reboot",{"2":{"622":1}}],["rec",{"2":{"765":1}}],["recover",{"2":{"460":1}}],["record",{"2":{"299":1,"431":1}}],["recentdicesendtime",{"2":{"106":1}}],["reduct",{"2":{"521":1}}],["red",{"0":{"253":1},"2":{"253":2}}],["rest",{"2":{"672":2}}],["restart",{"2":{"491":5,"541":1}}],["reset",{"2":{"464":1}}],["response",{"2":{"135":7}}],["resp",{"2":{"135":2}}],["result",{"2":{"118":1,"119":2,"130":2}}],["ret",{"2":{"115":3,"116":3,"117":3,"127":15,"129":3,"130":3,"134":3,"136":4,"139":3}}],["return",{"2":{"97":1,"115":2,"116":2,"117":2,"119":2,"121":2,"127":11,"129":3,"130":10,"133":5,"134":2,"135":3,"136":1,"139":3}}],["refreshgroupnum",{"2":{"108":1}}],["removed",{"2":{"130":2}}],["remove",{"2":{"94":1,"123":1,"124":1,"127":2}}],["read",{"2":{"460":1,"532":4}}],["readme",{"2":{"5":1}}],["reasons",{"2":{"125":1}}],["reason",{"2":{"94":2,"123":2,"124":1}}],["relogin",{"2":{"622":1}}],["reload",{"2":{"94":1,"102":1,"622":1,"647":1,"655":1}}],["releases",{"2":{"257":1,"258":1}}],["release",{"2":{"5":1,"481":1,"538":1}}],["registertask",{"2":{"141":4,"142":2}}],["registertemplateconfig",{"2":{"94":1,"139":1}}],["registerxxxconfig",{"2":{"138":1}}],["registeroptionconfig",{"2":{"94":1,"139":1}}],["registerboolconfig",{"2":{"94":1,"139":1}}],["registerfloatconfig",{"2":{"94":1,"139":1}}],["registerintconfig",{"2":{"94":1,"139":1}}],["registerstringconfig",{"2":{"94":1,"139":1}}],["registerconfig",{"2":{"94":1,"138":2}}],["registerrule",{"2":{"94":1,"136":1}}],["register",{"2":{"94":2,"112":1,"117":1,"119":1,"121":1,"127":1,"129":1,"130":1,"133":1,"134":1,"137":1,"139":2}}],["regex",{"2":{"69":2}}],["replytosender",{"0":{"95":1},"2":{"94":2,"95":1,"97":2,"98":2,"116":2,"117":1,"119":3,"121":1,"127":11,"129":2,"130":9,"131":1,"133":2,"134":1,"135":4,"139":9}}],["replyperson做到暗骰的效果",{"2":{"133":1}}],["replyperson",{"0":{"95":1},"2":{"94":1,"95":1,"133":1}}],["replygroup",{"0":{"95":1},"2":{"94":1,"95":2}}],["reply",{"0":{"656":1},"2":{"72":1,"97":2,"414":1,"569":2,"625":4,"656":2,"746":1}}],["re2",{"2":{"69":1}}],["review",{"2":{"10":1,"13":2}}],["request",{"0":{"13":1},"2":{"9":1,"10":1,"13":1,"206":1}}],["示例文件以",{"2":{"491":1}}],["示例文档",{"0":{"67":1}}],["示例结果",{"2":{"172":1}}],["示例中的",{"2":{"159":1}}],["示例代码",{"0":{"119":1,"121":1,"127":1,"129":1,"130":1,"139":1}}],["示例为每人每天一次",{"2":{"83":1}}],["示例如下",{"2":{"64":1}}],["示例",{"0":{"23":1,"78":1,"79":1},"1":{"24":1,"25":1,"26":1,"27":1,"28":1},"2":{"24":1,"28":1,"51":1,"53":1,"73":2,"76":1,"82":1,"85":1,"87":1,"117":1,"129":1,"133":1,"134":1,"136":1,"158":1,"363":1,"412":1,"420":1,"552":1,"562":1,"591":1,"593":1,"595":1,"596":1,"597":1,"598":1,"599":1,"600":1,"602":1,"604":1,"605":1,"608":1,"611":1,"616":1,"624":1,"625":1,"628":1,"629":1,"630":1,"631":1,"632":2,"633":1,"634":1,"635":2,"636":1,"637":2,"638":1,"639":1,"640":1,"643":1,"644":2,"645":1,"648":1,"652":1,"653":2,"658":1,"659":1,"660":1,"665":1,"667":1,"669":1,"670":4,"672":1,"674":1,"676":1,"678":1,"702":2,"703":1,"704":1,"705":1,"706":2,"711":2,"764":1}}],["充分利用海豹核心提供的自定义能力",{"2":{"21":1}}],["会将两个连字符",{"2":{"723":1}}],["会将用户发的信息进行分段",{"2":{"114":1,"117":1}}],["会提示你已经禁止再向骰子发送私聊消息",{"2":{"708":1}}],["会提示快捷发起",{"2":{"13":1}}],["会弹窗询问是否更换端口",{"2":{"693":1}}],["会弹出二次确认框",{"2":{"414":1}}],["会给消息通知列表的各个接收者发送通知",{"2":{"690":1}}],["会",{"2":{"660":1}}],["会使调查员陷入临时性或不定性疯狂",{"2":{"607":1}}],["会另外占用",{"2":{"550":1}}],["会显示一个较为显眼的更新按钮",{"2":{"543":1}}],["会发送一条含有",{"2":{"535":1}}],["会发生很糟糕的事情",{"2":{"377":1}}],["会视为风险账号",{"2":{"512":1}}],["会自动替换旧版本海豹核心",{"2":{"546":1}}],["会自动处理主机名解析",{"2":{"494":1}}],["会自动创建",{"2":{"492":1}}],["会下载",{"2":{"480":1}}],["会导致新产生的数据被之前导出的数据覆盖",{"2":{"442":1,"577":1}}],["会涉及到海豹提供的其他系统",{"2":{"425":1}}],["会首先判断文件的公共条件是否全部满足",{"2":{"417":1}}],["会有如下效果",{"2":{"688":1}}],["会有一个名为",{"2":{"414":1}}],["会有更新",{"2":{"155":1}}],["会通知骰主",{"2":{"355":1}}],["会向触发用户发送警告信息",{"2":{"355":1}}],["会向骰主提示海豹版本不兼容而拒绝加载",{"2":{"167":1}}],["会检查其中的",{"2":{"354":1}}],["会对以下消息进行通知",{"2":{"333":1}}],["会对你的使用大有帮助",{"2":{"19":1}}],["会退出禁言的事发群",{"2":{"328":1}}],["会索取超级用户权限",{"2":{"256":1}}],["会大大帮助你找到正确的方向",{"2":{"211":1}}],["会变得不幸",{"2":{"174":1}}],["会展示在插件列表页面",{"2":{"159":1}}],["会根据时间",{"2":{"141":1}}],["会根据",{"2":{"141":1}}],["会被替换为抽取结果",{"2":{"119":1}}],["会在重启海豹后丢失",{"2":{"457":1}}],["会在编译时自动加到目标文件头部",{"2":{"152":1}}],["会在",{"2":{"109":1}}],["会出现这样的效果",{"2":{"82":1}}],["会依次调用配置的",{"2":{"64":1}}],["会强制增加相应标识",{"2":{"62":1}}],["会先执行其中的掷骰表达式",{"2":{"52":1}}],["但他们的维护者",{"2":{"718":1}}],["但用户已经无法再通过私聊发送正确的指令",{"2":{"708":1}}],["但并非是海豹账号的好友",{"2":{"681":1}}],["但提示不包含骰点结果",{"2":{"638":1}}],["但只有一方获胜",{"2":{"613":1}}],["但只有成功等级达到要求的难度才判定为成功",{"2":{"597":1}}],["但能提供极为强大的资料查询功能",{"2":{"550":1}}],["但能够被",{"2":{"57":1}}],["但操作难度也有一定程度的增加",{"2":{"515":1}}],["但目前",{"2":{"512":1}}],["但目前来说维护的并不完全",{"2":{"155":1}}],["但需要明白的是",{"2":{"512":1}}],["但已证实的是",{"2":{"512":1}}],["但实际并没有通过",{"2":{"509":1}}],["但实际上没办法匹配上的情况",{"2":{"72":1}}],["但实际上的文件名是",{"2":{"48":1}}],["但官方文档没有及时更新",{"2":{"499":1}}],["但推荐使用",{"2":{"478":1}}],["但登录需要扫码",{"0":{"437":1}}],["但其本质只是一段文本",{"2":{"383":1}}],["但旧的数据不会删除",{"2":{"364":1}}],["但从本质上来说",{"2":{"272":1}}],["但这样做的不稳定性非常大",{"2":{"272":1}}],["但由于其过于古老",{"2":{"292":1}}],["但由于沟通上的歧义或误解",{"2":{"230":1}}],["但由于各种原因",{"2":{"93":1}}],["但反例显然不应该出现在你的问题里",{"2":{"222":1}}],["但你知道黑框框里那堆文字就是日志",{"2":{"210":1}}],["但排版混乱或内容过于老旧已经不再适用",{"2":{"207":1}}],["但又足够你解决问题",{"2":{"206":1}}],["但又不至于直接使用学习门槛较高的正式编程语言",{"2":{"171":1}}],["但切忌评论轰炸",{"2":{"206":1}}],["但考虑到在看这个界面的你可能会对一些部分有所疑惑",{"2":{"188":1}}],["但没有",{"2":{"172":1}}],["但会出现使用旧版本海豹的骰主",{"2":{"167":1}}],["但建议遵循",{"2":{"159":1}}],["但也没有太复杂",{"2":{"135":1}}],["但如果你发现海豹核心仍然时常掉线",{"2":{"455":1}}],["但如果出现牌堆未更新等情况时",{"2":{"385":1}}],["但如果想要存放更多的数据以及非字符串类型的数据怎么办",{"2":{"128":1}}],["但如果有条件",{"2":{"7":1}}],["但不会存在多个",{"2":{"727":1}}],["但不同于参数往往需要处于按照一定的顺序出现",{"2":{"723":1}}],["但不能大于等于",{"2":{"145":1}}],["但不具备",{"2":{"120":1}}],["但不支持其它换行符与分页符",{"2":{"68":1}}],["但详细区别见暗骰例子",{"2":{"116":1,"117":1}}],["但我们不推荐也未尝试过使用它们",{"2":{"257":1}}],["但我们不建议这样做",{"2":{"112":1}}],["但我们非常建议你保留并填写这些项",{"2":{"48":1}}],["但同样存在缺失",{"2":{"94":1}}],["但通常也需要你具备一些知识",{"2":{"91":1}}],["但海豹同样可以读取它",{"2":{"68":1}}],["但依然可以通过指定",{"2":{"57":1}}],["但在牌堆编写过程中",{"2":{"57":1}}],["但顺序是随机的",{"2":{"51":1}}],["但必须是以",{"2":{"48":3}}],["但相同层级的元素必须左对齐",{"2":{"46":1}}],["但是在指令名与参数",{"2":{"722":1}}],["但是在源码中被注释",{"2":{"94":1}}],["但是需要你进行一些配置",{"2":{"684":1}}],["但是用户仍然可以用",{"2":{"582":1}}],["但是命令方块和控制台使用该指令会被视为公屏发送",{"2":{"485":1}}],["但是消息记录会随页面刷新而丢失",{"2":{"427":1}}],["但是没有重启分离部署的",{"2":{"226":1}}],["但是你差不多知道他指的是那个在电脑上弹出来的黑框框",{"2":{"210":1}}],["但是基本对数据库文件夹的异常磁盘占用问题没有效果",{"2":{"190":1,"226":1}}],["但是我修改之后",{"2":{"224":1}}],["但是我私聊它就不行",{"2":{"223":1}}],["但是我的骰子并没有如此大的数据量",{"2":{"190":1}}],["但是我们非常建议你保留并填写这些项",{"2":{"48":2}}],["但是有些编程语言是可以编译为",{"2":{"170":1}}],["但是它也被用到了很多",{"2":{"158":1}}],["但是由于黑名单会被过滤掉",{"2":{"121":1}}],["但是这样做有诸多不便之处",{"2":{"56":1}}],["但是这样写在最前面会多出换行",{"2":{"35":1}}],["但是否这样做取决于你的选择",{"2":{"37":1}}],["但是",{"2":{"19":1,"73":1,"165":1,"189":1,"190":1,"206":1,"207":1,"612":1,"622":1,"682":1}}],["基本设置",{"2":{"341":1,"513":1,"545":1,"622":1,"625":1,"690":1,"691":1,"729":1}}],["基本上全部的特性",{"2":{"158":1}}],["基础值3",{"2":{"665":2}}],["基础值1",{"2":{"665":1}}],["基础配置",{"2":{"523":1}}],["基础设置",{"0":{"329":1},"1":{"330":1,"331":1,"332":1,"333":1,"334":1,"335":1,"336":1,"337":1,"338":1,"339":1,"340":1,"341":1,"342":1,"343":1,"344":1,"345":1,"346":1,"347":1,"348":1,"349":1,"350":1}}],["基础部分",{"2":{"69":1}}],["基础牌堆编写",{"0":{"48":1}}],["基础概念",{"0":{"716":1},"1":{"717":1,"718":1,"719":1,"720":1,"721":1,"722":1,"723":1,"724":1},"2":{"19":1}}],["基于",{"2":{"5":1,"348":1}}],["钉钉支持",{"0":{"462":1}}],["钉钉",{"0":{"461":1},"1":{"462":1},"2":{"18":1,"540":1}}],["t",{"0":{"303":1},"1":{"304":1},"2":{"552":1,"702":1}}],["tcp",{"2":{"259":2,"684":2,"686":2}}],["txlib",{"2":{"239":2}}],["txt",{"2":{"48":1,"89":1,"150":1,"152":1,"356":1,"480":2,"729":2}}],["twenty",{"2":{"189":1}}],["types",{"2":{"152":1,"155":2}}],["typescript",{"2":{"143":1,"147":1,"148":1,"152":1,"157":1,"161":1,"162":1,"170":1}}],["typescripttype",{"2":{"141":1}}],["type",{"2":{"138":3,"480":1,"493":1,"539":1,"576":2}}],["type=$",{"2":{"135":1}}],["the",{"0":{"198":1},"2":{"480":1,"482":1}}],["there",{"0":{"198":1}}],["then",{"2":{"135":4}}],["this",{"2":{"149":1}}],["thiscatdoesnotexist",{"2":{"135":1}}],["tg",{"2":{"123":1}}],["ti",{"0":{"612":1},"2":{"612":3,"746":1,"752":1}}],["tim",{"2":{"437":1,"514":1}}],["times",{"2":{"125":1}}],["timestamp",{"2":{"117":1,"119":1,"121":1,"127":1,"129":1,"130":1,"133":1,"134":1,"136":1,"139":1,"158":1,"159":2}}],["time",{"2":{"109":1}}],["ticket",{"0":{"240":1},"1":{"241":1,"242":1},"2":{"240":1,"242":3,"247":1,"248":1}}],["title",{"2":{"48":4,"58":2,"61":1,"64":1,"130":16,"131":2}}],["tmplval",{"2":{"139":2}}],["tmpl",{"2":{"94":2,"103":2}}],["tsconfig",{"2":{"152":1}}],["ts",{"2":{"94":1,"105":2,"114":2,"130":1,"147":1,"152":3,"155":3,"161":3}}],["ta",{"2":{"361":1,"606":1,"649":3}}],["task",{"2":{"142":3}}],["tasks",{"2":{"142":3}}],["taskctx",{"2":{"141":4,"142":3}}],["tasktype",{"2":{"141":5}}],["tag",{"2":{"68":3,"641":2,"746":1,"748":1}}],["tab",{"2":{"46":1}}],["toefl单词",{"2":{"652":1}}],["to",{"2":{"480":2,"531":1,"532":1,"706":2}}],["tokens",{"2":{"532":1}}],["token",{"0":{"464":1,"469":1,"473":1,"530":1,"531":1,"532":1,"535":1},"1":{"531":1,"532":1},"2":{"464":2,"465":2,"469":2,"470":1,"473":3,"474":4,"530":1,"531":1,"532":3,"533":2,"535":2,"536":2}}],["tools",{"2":{"150":1,"152":1,"154":1,"156":1,"259":3,"262":4,"460":1}}],["top",{"2":{"56":1,"135":2}}],["toml等",{"2":{"301":1}}],["tomltrpg",{"2":{"37":1}}],["tomlkey",{"2":{"33":1,"35":1}}],["toml",{"0":{"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"60":1,"90":1,"304":1},"1":{"61":1,"62":1,"63":1,"64":1},"2":{"30":3,"31":3,"32":1,"33":1,"36":2,"48":4,"50":1,"51":1,"53":1,"57":4,"58":1,"59":1,"61":2,"64":4,"90":7,"304":1,"356":1,"383":1}}],["try",{"2":{"130":1}}],["trust",{"2":{"120":2,"623":1}}],["true",{"2":{"24":1,"33":1,"38":1,"45":1,"61":2,"64":8,"76":1,"94":6,"99":2,"102":1,"115":4,"116":4,"117":4,"118":1,"119":4,"121":1,"127":16,"129":4,"130":8,"133":5,"134":4,"135":2,"139":6,"173":1,"363":1,"457":3,"480":2,"562":1,"591":1,"593":2,"595":2,"624":3,"625":3,"628":5,"631":2,"632":2,"635":1,"637":3,"639":1,"640":3,"652":3,"658":1,"659":5,"660":2,"665":3,"667":2,"669":1,"670":7,"672":4,"676":1,"678":1,"704":1,"706":1,"711":1}}],["trpg",{"0":{"103":1,"143":1,"572":1,"710":1},"1":{"144":1,"145":1,"146":1,"147":1,"711":1,"712":1,"713":1,"714":1,"715":1},"2":{"15":1,"143":2,"147":2,"549":2,"717":1,"738":1,"740":1,"741":1,"742":1,"743":1,"745":1}}],["temple",{"2":{"431":1}}],["template",{"2":{"94":2,"138":1,"149":1}}],["terminal",{"0":{"308":1},"2":{"313":1}}],["testvalue",{"2":{"139":1}}],["testkey6",{"2":{"139":2}}],["testkey5",{"2":{"139":2}}],["testkey4",{"2":{"139":2}}],["testkey3",{"2":{"139":2}}],["testkey2",{"2":{"139":2}}],["testkey1",{"2":{"139":2}}],["test",{"2":{"56":2,"98":4,"112":3,"114":1,"117":2,"129":2,"134":2}}],["text查询指令",{"2":{"722":1}}],["texthttp",{"2":{"686":1}}],["text$",{"2":{"582":1}}],["text$t0",{"2":{"174":1}}],["text数据库检查结果",{"2":{"457":1}}],["text├─backups",{"2":{"430":1}}],["text这里是海豹",{"2":{"377":1}}],["text这里是",{"2":{"377":1}}],["text灵视",{"2":{"180":1,"181":1,"182":1}}],["text加减乘除余",{"2":{"176":1}}],["text或",{"2":{"93":1}}],["textif",{"2":{"78":1,"84":1,"183":1}}],["text正则匹配",{"2":{"73":1}}],["text",{"0":{"342":1,"705":1},"2":{"24":1,"26":2,"27":1,"56":1,"70":3,"76":1,"77":2,"78":1,"79":1,"81":3,"82":1,"83":1,"84":1,"87":1,"89":1,"121":6,"127":5,"134":2,"172":1,"173":1,"174":1,"177":1,"180":2,"181":1,"183":3,"342":1,"375":1,"386":1,"431":1,"480":1,"553":1,"569":2,"570":2,"582":1,"614":1,"665":1,"683":1,"688":1,"705":1}}],["telegram账号",{"2":{"536":1}}],["telegram",{"0":{"534":1},"1":{"535":1,"536":1},"2":{"18":1,"534":1,"535":1,"536":2,"540":1}}],["dc6",{"2":{"733":1}}],["dport",{"2":{"684":1}}],["ds",{"0":{"678":1},"1":{"679":1},"2":{"678":5,"760":2}}],["dungeons",{"2":{"657":1}}],["dur",{"2":{"94":1,"96":2}}],["d10=",{"2":{"638":1}}],["d1000=539",{"2":{"704":1}}],["d1000=568",{"2":{"704":1}}],["d100=72",{"2":{"631":1}}],["d100=70",{"2":{"602":1}}],["d100=78",{"2":{"582":1}}],["d100=5",{"2":{"600":1}}],["d100=51",{"2":{"598":1}}],["d100=96",{"2":{"631":1}}],["d100=97",{"2":{"605":1}}],["d100=91",{"2":{"600":1}}],["d100=90",{"2":{"582":1}}],["d100=6",{"2":{"637":1}}],["d100=69",{"2":{"628":1}}],["d100=65",{"2":{"599":1}}],["d100=64",{"2":{"582":1,"595":1}}],["d100=27",{"2":{"631":1}}],["d100=2",{"2":{"363":1}}],["d100=30",{"2":{"595":1,"597":1}}],["d100=3",{"2":{"363":1}}],["d100=16",{"2":{"600":1,"640":1}}],["d100=15",{"2":{"595":1}}],["d100=100",{"2":{"24":1}}],["d100=1",{"2":{"24":1}}],["d100",{"2":{"76":1,"136":7,"701":1}}],["d50=",{"2":{"628":2}}],["d50",{"2":{"628":2,"637":4}}],["dx",{"0":{"712":1},"2":{"572":1,"712":1,"741":1,"746":1}}],["dg",{"2":{"572":1,"619":1,"739":3}}],["d劣势=",{"2":{"562":1,"632":1}}],["d劣势",{"2":{"562":1,"632":1}}],["db",{"2":{"190":1,"242":1,"431":3,"457":8,"458":1,"460":6}}],["dt",{"2":{"189":1}}],["d20+3",{"2":{"659":1}}],["d20+2",{"2":{"659":1,"756":1}}],["d20+1d8",{"2":{"659":1}}],["d20+1",{"2":{"548":1}}],["d20=1",{"2":{"637":1}}],["d20kl=",{"2":{"633":1}}],["d20kh=",{"2":{"633":1}}],["d20优势=",{"2":{"562":1,"632":1}}],["d20",{"2":{"178":2,"570":1,"637":1}}],["d3",{"2":{"144":1,"147":1}}],["double",{"0":{"741":1},"2":{"741":1}}],["doublecross",{"2":{"572":1}}],["down",{"2":{"497":1}}],["download",{"2":{"149":1}}],["document",{"2":{"577":1}}],["documents",{"2":{"442":1}}],["docx",{"2":{"504":1}}],["docker0",{"2":{"497":2}}],["docker",{"0":{"489":1,"490":1,"491":1},"1":{"490":1,"491":2,"492":2,"493":2,"494":2,"495":2,"496":1,"497":1,"498":1},"2":{"489":3,"491":4,"492":1,"493":2,"494":1,"495":1,"496":1,"497":3,"498":2,"513":2,"538":2,"539":2}}],["done",{"2":{"480":1}}],["does",{"2":{"209":1}}],["dotask",{"2":{"142":1}}],["dodo语音",{"2":{"470":1}}],["dodo",{"0":{"467":1},"1":{"468":1,"469":1,"470":1,"471":1},"2":{"18":1,"109":1,"467":1,"468":2,"469":1,"470":1,"471":3,"540":1,"580":1}}],["drlh",{"2":{"704":1}}],["drl",{"0":{"704":1},"2":{"703":1,"704":3}}],["dragons",{"2":{"657":1}}],["draw",{"0":{"651":1},"1":{"652":1,"653":1,"654":1,"655":1},"2":{"48":3,"51":4,"54":1,"57":14,"61":3,"64":1,"81":10,"94":1,"102":2,"118":1,"119":5,"378":1,"383":1,"386":4,"424":1,"569":1,"651":1,"652":10,"653":2,"654":1,"655":1,"704":1}}],["dr2",{"2":{"119":3}}],["dr",{"2":{"119":3,"646":1}}],["dndx",{"0":{"658":1},"2":{"658":3}}],["dnd5e",{"2":{"569":2,"572":1,"583":1,"669":1}}],["dnd",{"0":{"658":1,"763":1},"2":{"112":1,"172":1,"362":2,"626":2,"642":1,"648":1,"657":1,"658":2,"733":1,"746":2,"755":1}}],["darkness",{"0":{"740":1},"2":{"740":1}}],["darwin",{"2":{"539":2}}],["dash",{"2":{"723":1}}],["dayjs",{"2":{"154":1}}],["daily",{"2":{"141":2,"142":2}}],["danger",{"2":{"89":1,"90":1}}],["data",{"2":{"55":1,"66":1,"129":7,"130":23,"131":5,"135":6,"190":1,"224":1,"242":3,"262":1,"274":1,"299":2,"375":4,"428":1,"431":12,"443":1,"457":6,"460":4,"491":24,"492":2,"493":2,"539":1,"575":1,"577":4,"583":1,"642":2,"687":1,"696":1,"729":1}}],["date",{"2":{"48":5,"90":1}}],["d6",{"2":{"79":1,"145":1,"146":1,"147":1,"715":1}}],["directory",{"2":{"479":1}}],["dicepp",{"2":{"646":1}}],["dice",{"2":{"72":1,"94":1,"189":1,"431":1,"442":1,"570":1,"577":1,"652":1,"699":2}}],["dictinct",{"2":{"64":1}}],["dismiss",{"2":{"349":1,"683":1,"746":1}}],["dis",{"2":{"349":1}}],["discussion",{"2":{"254":1}}],["discord账号",{"2":{"465":1}}],["discord",{"0":{"463":1},"1":{"464":1,"465":1,"466":1},"2":{"18":1,"109":1,"463":1,"464":1,"465":2,"466":1,"540":1,"580":1,"717":1}}],["disk",{"0":{"198":1}}],["dist",{"2":{"151":1}}],["distinct",{"2":{"64":1}}],["dex",{"2":{"735":2}}],["dex60",{"2":{"733":1}}],["details",{"2":{"619":1,"746":1}}],["delta",{"0":{"739":1},"2":{"739":1}}],["deltagreen",{"2":{"572":1}}],["del",{"2":{"588":1,"622":1,"641":1,"649":1,"660":1,"664":1,"670":1,"709":2,"729":1,"746":1}}],["delete",{"2":{"252":1,"460":6}}],["delegatetext",{"2":{"105":1}}],["dev",{"2":{"538":1,"539":1}}],["denied",{"2":{"239":1}}],["demo",{"2":{"159":1}}],["depends",{"2":{"159":2,"164":1,"165":3,"166":3}}],["deprecated",{"2":{"138":3}}],["debug",{"2":{"70":1}}],["defaultvalue",{"2":{"94":1,"138":3,"139":2}}],["default",{"2":{"57":3,"115":1,"116":1,"117":1,"127":5,"129":1,"130":1,"134":1,"139":2,"242":1,"299":1,"431":7,"460":1,"497":1,"583":1,"687":1,"729":1}}],["deck|js|helpdoc",{"2":{"622":1}}],["deckname",{"2":{"94":2,"118":2}}],["deck",{"0":{"102":1},"2":{"56":3,"94":2,"102":3,"118":1,"119":1,"569":2}}],["decks",{"2":{"48":1,"50":1,"51":1,"53":1,"57":2,"58":1,"59":1,"61":1,"119":8}}],["description=",{"2":{"141":1}}],["description",{"2":{"68":2,"117":1,"119":1,"121":1,"127":1,"129":1,"130":1,"133":1,"134":1,"136":1,"139":1,"141":2,"150":1,"158":1,"159":2}}],["desc",{"2":{"48":4,"90":1,"136":2,"652":3}}],["d",{"0":{"269":1,"560":2,"754":2},"1":{"270":1,"561":2,"562":2,"563":2,"564":2,"565":2,"566":2,"567":2,"755":2,"756":2,"757":2,"758":2,"759":2,"760":2},"2":{"37":2,"39":4,"47":2,"68":2,"94":1,"105":1,"114":1,"145":1,"146":2,"147":1,"152":1,"155":3,"161":3,"178":1,"245":1,"393":2,"395":2,"492":1,"493":1,"495":1,"539":1,"550":2,"570":1,"576":1,"581":2,"583":2,"632":2,"637":3,"642":2,"646":2,"648":2,"657":8,"717":2,"721":2,"746":9,"747":2}}],["这就造成了死锁",{"2":{"708":1}}],["这就是",{"2":{"743":1}}],["这就是为什么当你部署多只海豹时需要切换端口",{"2":{"278":1}}],["这就是服务器",{"2":{"272":1}}],["这就是暗骰",{"2":{"133":1}}],["这就是最基本的模板了",{"2":{"117":1}}],["这可以有效避免关键词触发的无限复读",{"2":{"688":1}}],["这可避免机器人互相响应造成的危险的循环",{"2":{"649":1}}],["这可能花费你更多时间和精力",{"2":{"549":1}}],["这么好用",{"2":{"644":1}}],["这赋予了查询指令强大的获取能力",{"2":{"642":1}}],["这都将使用新的技能值覆盖现有的技能值",{"2":{"614":1}}],["这提供了调查员从经验中学习的机会",{"2":{"613":1}}],["这被称为疯狂发作的总结症状",{"2":{"612":1}}],["这相当于分别使用",{"2":{"589":1}}],["这指令可能包含了类似这样的内容",{"2":{"582":1}}],["这配置对于海豹核心新加入的群聊生效",{"2":{"569":1}}],["这要求海豹核心拥有",{"2":{"541":1}}],["这将会是你的",{"2":{"531":1}}],["这涉及到你的机器人是否能被",{"2":{"504":1}}],["这三项是海豹进行连接所需要的",{"2":{"501":1}}],["这三个按键",{"2":{"252":1}}],["这通常在安装应用时就已经默认开启",{"2":{"453":1}}],["这主要是为了批量成长时便于引用无前缀",{"2":{"371":1}}],["这也是默认选项",{"2":{"514":1}}],["这也是",{"2":{"314":1}}],["这类语言通过特定的语法描述了数据之间的关系",{"2":{"301":1}}],["这篇速查表的目的就是让屏幕前不太明白计算机相关知识的用户可以快速入门",{"2":{"272":1}}],["这篇科普也一样",{"2":{"185":1,"214":1}}],["这代表数据库是正常的",{"2":{"457":1}}],["这代表",{"2":{"258":1}}],["这时将使用默认值进行骰点",{"2":{"711":1}}],["这时需要执行",{"2":{"681":1}}],["这时",{"2":{"635":1,"641":1}}],["这时不进行加骰而只骰一轮",{"2":{"635":1}}],["这时你的手机海豹里就应该是旧海豹的数据了",{"2":{"577":1}}],["这时点击",{"2":{"509":1}}],["这时候通过在任务管理器关闭部分没有在使用的进程就可以解决",{"2":{"252":1}}],["这时候通常通过删除磁盘内部分不需要的文件",{"2":{"198":1}}],["这时再来询问",{"2":{"189":1}}],["这不会将角色卡绑定到当前群聊",{"2":{"641":1}}],["这不会造成数据损失",{"2":{"574":1}}],["这不只是影响到群员",{"2":{"190":1}}],["这不仅方便了群员和管理回答你的问题",{"2":{"187":1,"201":1}}],["这意味着这个牌堆在抽取时",{"2":{"389":1}}],["这意味着这个插件需要同时满足所有的依赖才能工作",{"2":{"166":1}}],["这意味着骰子会",{"2":{"363":1}}],["这意味着",{"2":{"254":1}}],["这意味着该插件需要同时安装一个名为",{"2":{"165":1}}],["这在你需要依赖高版本插件的情况下很有用",{"2":{"165":1}}],["这表示",{"2":{"165":1}}],["这决定了编译时输出的插件文件名",{"2":{"150":1}}],["这包括",{"2":{"146":1}}],["这限定了只有在未收到命令且未达成自定义回复时",{"2":{"137":1}}],["这会要求场景中每位调查员进行一次理智检定",{"2":{"607":1}}],["这会让开发者们可能记住这个问题",{"2":{"193":1,"202":1}}],["这会非常有用",{"2":{"137":1}}],["这会自动给用户发送帮助",{"2":{"115":1,"116":1,"117":1}}],["这会导致格式错误",{"2":{"66":1}}],["这种情况",{"2":{"722":1}}],["这种情况可以删除",{"2":{"696":1}}],["这种操作称为",{"2":{"639":1}}],["这种办法有一定的操作难度",{"2":{"460":1}}],["这种方法简便",{"2":{"459":1}}],["这种做法会绕过文案版本的迁移变更",{"2":{"365":1}}],["这种解决方案适合个人与朋友使用骰子的场景",{"2":{"254":1}}],["这种",{"2":{"110":1}}],["这些规则因指令数量少或仍在预览阶段的原因",{"2":{"738":1}}],["这些资料的原始出处和译者很多已经不可考",{"2":{"646":1}}],["这些资料在海豹的",{"2":{"642":1}}],["这些角色卡可以被绑定到任意数量的群聊",{"2":{"641":1}}],["这些角色卡互相无任何影响",{"2":{"641":1}}],["这些同义词都是符合直觉的",{"2":{"583":1}}],["这些名字等价",{"2":{"582":1}}],["这些方案都由社区第三方软件提供",{"2":{"512":1}}],["这些记录通常反映了程序的运行状态",{"2":{"299":1}}],["这些议题主要包括了使用求助",{"2":{"279":1}}],["这些进程一旦关闭",{"2":{"252":1}}],["这些页面中",{"2":{"206":1}}],["这些问题的解决方法在很多地方写有",{"2":{"189":1}}],["这些是海豹中的变量",{"2":{"172":1}}],["这些语言在编写时使用它们自己",{"2":{"170":1}}],["这些信息通常被称为",{"2":{"159":1}}],["这些编辑器提供的语法高亮",{"2":{"93":1}}],["这些都是被广泛使用的优秀编辑器",{"2":{"93":1}}],["这些功能能让你实现更多的个性化功能",{"2":{"91":1}}],["这些辅助项是不希望暴露给用户的",{"2":{"57":1}}],["这两条命令移除海豹核心程序和",{"2":{"539":1}}],["这两个功能访问海豹的私有目录",{"2":{"443":1}}],["这两个插件时",{"2":{"166":1}}],["这两个结果",{"2":{"48":2}}],["这两段较为常规",{"2":{"87":1}}],["这需要牌堆作者有能力提供一个",{"2":{"62":1}}],["这允许你更精细的控制每个牌组的选项",{"2":{"61":1}}],["这一段落是以玩家视角而非主持人视角编写的",{"2":{"747":1}}],["这一章节",{"2":{"698":1}}],["这一指令会将所有可抽取的牌组列出",{"2":{"652":1}}],["这一设计是为了解决下面这样的问题",{"2":{"582":1}}],["这一渠道提供两个版本",{"2":{"538":1}}],["这一截图工具",{"2":{"210":1}}],["这一个文件被解压出来了",{"2":{"196":1}}],["这一牌组无法再用",{"2":{"57":1}}],["这一牌组",{"2":{"57":2}}],["这一节介绍了海豹核心最重要的一些指令",{"2":{"20":1}}],["这个权限是群主或群管理员",{"2":{"732":1}}],["这个权限会让海豹只接收被",{"2":{"531":1}}],["这个端口号会被写入配置中供后续启动使用",{"2":{"694":1}}],["这个指令将其去除",{"2":{"731":1}}],["这个指令的作用实际是给使用者的名字上前缀",{"2":{"731":1}}],["这个指令的存在是为了解决",{"2":{"708":1}}],["这个指令的格式与普通骰点",{"2":{"638":1,"639":1}}],["这个指令似乎都没有实际作用",{"2":{"708":1}}],["这个指令用于标记同一群聊内的其他机器人",{"2":{"649":1}}],["这个改动在当前群聊持续生效",{"2":{"569":1}}],["这个小类中",{"2":{"363":1}}],["这个选项决定了什么范围的内容会进行拦截检查",{"2":{"354":1}}],["这个系统就是专为服务器开发的",{"2":{"272":1}}],["这个页面",{"2":{"268":1}}],["这个文件遵守以下格式",{"2":{"583":1}}],["这个文件夹下",{"2":{"242":1}}],["这个文件是你插件的描述信息",{"2":{"150":1}}],["这个操作非常简单",{"2":{"196":1}}],["这个问题分为两个部分",{"2":{"170":1}}],["这个插件需要同时安装",{"2":{"166":1}}],["这个扩展只会在日志中打印一条",{"2":{"158":1}}],["这个扩展标准的语法",{"2":{"66":1}}],["这个函数会返回一个",{"2":{"138":1}}],["这个命令的功能为",{"2":{"114":1,"117":1,"134":1}}],["这个村子有一户人家",{"2":{"87":1}}],["这个示例牌堆怎么这么臭",{"2":{"48":3}}],["这个牌堆编写如下",{"2":{"48":1}}],["这个牌堆有",{"2":{"48":1}}],["这个仓库也作为海豹的主仓库",{"2":{"5":1}}],["这里讲的是使用海豹核心的相关事项",{"2":{"716":1}}],["这里选择",{"2":{"686":1}}],["这里是为了替换数据库特别地需要开启",{"2":{"577":1}}],["这里是你需要编写的内容",{"2":{"114":1}}],["这里补充一些文档中没有说明的其他事项",{"2":{"506":1}}],["这里提供了海豹骰的机器人",{"2":{"504":1}}],["这里我们以",{"2":{"460":1}}],["这里以",{"2":{"272":1}}],["这里的内存就是指电脑",{"2":{"252":1}}],["这里的内存不足代指的是磁盘可存储的空间不足",{"2":{"198":1}}],["这里的第一句也是最后一句",{"2":{"77":1}}],["这里请自己处理要如何达成",{"2":{"137":1}}],["这里其实是编写处理函数",{"2":{"137":1}}],["这里其实获取的是",{"2":{"98":2}}],["这里写的时候有点不清醒了",{"2":{"133":1}}],["这里只是为了演示",{"2":{"121":1}}],["这里只列出了常见的",{"2":{"47":1}}],["这里",{"2":{"115":1,"116":1,"117":1,"239":1}}],["这里仅说明需要用到的接口",{"2":{"114":1}}],["这里实在不知道如何举例了",{"2":{"103":1}}],["这里等大佬来了再研究",{"2":{"97":1}}],["这里有些复杂",{"2":{"94":1}}],["这里除了平局可以使用",{"2":{"84":1}}],["这里填你个性化的模式2文案",{"2":{"27":1}}],["这里填你个性化的模式1文案",{"2":{"27":1}}],["这里填你个性化的默认模式文案",{"2":{"27":1}}],["这样一来",{"2":{"569":1}}],["这样也很费电",{"2":{"272":1}}],["这样才有助于问题的快速解决",{"2":{"230":1}}],["这样草草浏览知识真的正确么",{"2":{"210":1}}],["这样你就能自己解决问题",{"2":{"205":1}}],["这样的名字出现",{"2":{"272":1}}],["这样的页面与",{"2":{"203":1}}],["这样的大小",{"2":{"190":1}}],["这样能比上面那些不能一眼看出问题的语句能让群员",{"2":{"190":1}}],["这样就会下载一个压缩包",{"2":{"149":1}}],["这样",{"2":{"57":1,"191":1,"232":1}}],["这样在",{"2":{"57":2}}],["这样写就没有开头的空行问题了",{"2":{"35":1}}],["这样它才能接收和发送消息",{"2":{"18":1}}],["这是为了防止引起企鹅的警惕",{"2":{"689":1}}],["这是海豹核心用于标识不同平台的用户和群组的通用格式",{"2":{"623":1}}],["这是连接机器人所需要的凭证",{"2":{"535":1}}],["这是你的",{"2":{"532":1}}],["这是面向一般用户提供的简单对接方式",{"2":{"513":1}}],["这是保活策略的一部分",{"2":{"454":1}}],["这是",{"2":{"350":1}}],["这是由海豹核心自动处理的",{"2":{"167":1}}],["这是关于数据的增加",{"2":{"130":1}}],["这是因为",{"2":{"442":1,"577":1}}],["这是因为虽然",{"2":{"82":1}}],["这是因为如果某一变量可能为空时",{"2":{"82":1}}],["这是一群用禁忌知识武装自己头脑",{"2":{"585":1}}],["这是一群搜索遗忘之地的人",{"2":{"585":1}}],["这是一群发掘深层秘密的人",{"2":{"585":1}}],["这是一种表达一个或一系列时间点的语法",{"2":{"314":1}}],["这是一种对标准",{"2":{"37":1}}],["这是一个演示脚本",{"2":{"158":1,"159":1}}],["这是一个类",{"2":{"145":1}}],["这是一段字符串",{"2":{"45":1}}],["这是多行字符串的语法",{"2":{"35":1}}],["这是注释",{"2":{"32":1}}],["迁移数据到手机",{"0":{"577":1}}],["迁移至新的",{"2":{"254":1}}],["迁移",{"0":{"573":1},"1":{"574":1,"575":1,"576":1,"577":1},"2":{"17":1}}],["你使用一个技能",{"2":{"747":1}}],["你使用的指令",{"2":{"681":1}}],["你尝试私聊海豹核心",{"2":{"681":1}}],["你尝试过的方法可能就是排查问题的手段之一",{"2":{"226":1}}],["你尝试过的解决方案",{"0":{"226":1}}],["你觉得你还可以抢救一下",{"2":{"678":1}}],["你所需要做的",{"2":{"657":1}}],["你必须",{"2":{"624":1}}],["你必须允许海豹核心访问存储空间",{"2":{"453":1}}],["你会在许多其他指令中看到代骰用法",{"2":{"639":1}}],["你会经常用到统一",{"2":{"623":1}}],["你会希望双方都进行掷骰来决出胜者",{"2":{"603":1}}],["你会发现不应当为人类所知晓的秘密",{"2":{"584":1}}],["你会需要使用一些特殊技术",{"2":{"549":1}}],["你已经成功启动了海豹核心",{"2":{"540":1}}],["你才能将官方机器人送审",{"2":{"507":1}}],["你通常也无需专门查阅列表",{"2":{"583":1}}],["你通常会看到展示设备上所有应用的列表",{"2":{"447":1}}],["你通常需要以深度优先的方式",{"2":{"211":1}}],["你好",{"2":{"421":1}}],["你设定的答案不应含有空格",{"2":{"349":1}}],["你指定的邮箱需支持通过",{"2":{"336":1}}],["你就可以看到自定义回复的设置页面",{"2":{"413":1}}],["你就可以进入",{"2":{"404":1,"413":1}}],["你就可以进入帮助文档的管理页面",{"2":{"395":1}}],["你就可以进入牌堆的管理页面",{"2":{"385":1}}],["你就可以进入拦截管理页面",{"2":{"352":1}}],["你就可以进入黑白名单管理页面",{"2":{"323":1}}],["你就能看到这句话",{"2":{"180":2,"182":1}}],["你将无法继续发送频道私聊消息",{"2":{"708":1}}],["你将面对令人",{"2":{"584":1}}],["你将扮演一位坚定的侦探",{"2":{"584":1}}],["你将看到类似的输出",{"2":{"457":1}}],["你将看到",{"2":{"315":1}}],["你将使用到",{"2":{"314":1}}],["你将以",{"2":{"54":1}}],["你实际输入命令的位置",{"2":{"290":1}}],["你都自动拥有一张独立的角色卡",{"2":{"641":1}}],["你都应确保迁出和迁入的海豹核心都未在运行",{"2":{"573":1}}],["你都应该尝试根据参考信息自行解决问题",{"2":{"226":1}}],["你都需要正确处理",{"2":{"278":1}}],["你有多种方式使用",{"2":{"262":1}}],["你登录骰娘的qq号",{"2":{"242":1}}],["你要链接的",{"2":{"238":1}}],["你也不一定需要诉诸所有方法才能保证海豹核心的存活",{"2":{"446":1}}],["你也不必对这些问题有太大的压力",{"2":{"272":1}}],["你也可添加群组",{"2":{"332":1}}],["你也可以在管理后台的",{"2":{"730":1}}],["你也可以在海豹核心中的",{"2":{"729":1}}],["你也可以在用户群里找到它",{"2":{"686":1}}],["你也可以在",{"2":{"569":1}}],["你也可以再打开相应扩展",{"2":{"569":1}}],["你也可以通过这个功能上传本地图片到海豹核心",{"2":{"428":1}}],["你也可以对备份行为进行设置",{"2":{"315":1}}],["你也可以直接使用",{"2":{"138":1}}],["你也可以使用异步编程",{"2":{"135":1}}],["你也需要在浏览器地址栏填入此",{"2":{"278":1}}],["你也应该额外补充一些信息",{"2":{"230":1}}],["你正在为建设海豹社区做出有力的贡献",{"2":{"229":1}}],["你正在阅读的就是海豹骰点核心的用户手册",{"2":{"206":1}}],["你做了什么",{"0":{"224":1}}],["你该这样做",{"0":{"216":1,"222":1,"228":1},"1":{"217":1,"218":1,"219":1,"220":1,"221":1,"223":1,"224":1,"225":1,"226":1,"227":1,"229":1,"230":1}}],["你依然不得不求助于人",{"2":{"210":1}}],["你对所有涉及的概念都一知半解",{"2":{"210":1}}],["你去搜索了一下",{"2":{"210":1}}],["你遇到了一些故障",{"2":{"210":1}}],["你发现",{"2":{"209":1}}],["你发现你可能需要学习正则表达式",{"2":{"209":1}}],["你找到了海豹手册的",{"2":{"209":1}}],["你不知道终端是什么意思",{"2":{"210":1}}],["你不应该不加校验地使用",{"2":{"207":1}}],["你不需要记住每个指令的所有细节",{"2":{"20":1}}],["你应该原样输入这里的内容",{"2":{"722":1}}],["你应该遵守这些规则",{"2":{"718":1}}],["你应该先从官网下载安卓版海豹核心",{"2":{"446":1}}],["你应该做出反馈",{"2":{"229":1}}],["你应该下拉页面",{"2":{"225":1}}],["你应该描述在问题发生之前你做了什么",{"2":{"224":1}}],["你应该已经掌握了隐藏在触发条件与回复结果背后的全部知识",{"2":{"209":1}}],["你应该永远对",{"2":{"207":1}}],["你应当确保应用程序已经拥有充足的权限",{"2":{"447":1}}],["你应当能看到一条类似于",{"2":{"242":1}}],["你应当能在控制台中观察到一条",{"2":{"158":1}}],["你应当具备诸如命令行",{"2":{"148":1,"162":1}}],["你在这些系统上是通过命令行",{"2":{"695":1}}],["你在本群的角色将会恢复为独立卡的数据",{"2":{"641":1}}],["你在该虚拟群聊中拥有群主权限",{"2":{"427":1}}],["你在",{"2":{"225":1,"426":1,"489":1}}],["你在解决问题时所做的努力",{"2":{"221":1}}],["你在运行海豹的终端把日志截图一下",{"2":{"210":1}}],["你在中文互联网上找到的技术性信息",{"2":{"207":1}}],["你在进行移除操作时需要自己判断是否符合你的预期",{"2":{"124":1}}],["你很可能找到一些使用上的问题",{"2":{"206":1}}],["你希望",{"2":{"192":1,"233":1}}],["你猜测的",{"2":{"190":1}}],["你即使猜测不出问题所在",{"2":{"189":1,"217":1}}],["你只需在第一次启动时这样做",{"2":{"694":1}}],["你只需要准备每个平台的可执行文件",{"2":{"573":1}}],["你只需要学习",{"2":{"157":1}}],["你只能通过按原逻辑重写为海豹",{"2":{"170":1}}],["你还会用到其他指令才能在其他群聊使用这张角色卡",{"2":{"747":1}}],["你还可能用到其他指令",{"2":{"747":1}}],["你还可以拥有若干与特定群聊无关的角色卡",{"2":{"641":1}}],["你还可以参阅海豹所使用的",{"2":{"165":1}}],["你还可以选择从海豹官方群的群文件中获取安装包",{"2":{"93":1}}],["你还可以按照以下格式书写",{"2":{"68":1}}],["你还可以",{"2":{"66":1}}],["你还可以使用命令更新",{"2":{"543":1}}],["你还可以使用",{"2":{"66":1}}],["你还需要修改几处地方",{"2":{"150":1}}],["你是否已阅读使用说明",{"2":{"349":1}}],["你是否因为自定义回复只能调用图片",{"2":{"137":1}}],["你是否因为自定义回复的匹配方式不全而愤怒",{"2":{"137":1}}],["你是否因为自定义回复能实现的功能有限而烦恼",{"2":{"137":1}}],["你是一个一个一个牌堆结果",{"2":{"48":4,"58":3,"61":1}}],["你没有权限执行此命令",{"2":{"127":5,"139":1}}],["你赢了",{"2":{"84":1}}],["你失去了514金币",{"2":{"59":3}}],["你现在有",{"2":{"59":6}}],["你抽到了114金币",{"2":{"59":3}}],["你仍可能抽到相同结果",{"2":{"51":1}}],["你仍必须使用",{"2":{"37":1}}],["你可将",{"2":{"635":1}}],["你可指定保存的角色名",{"2":{"641":1}}],["你可指定",{"2":{"635":1}}],["你可在不同群聊之间使用同一角色卡",{"2":{"748":1}}],["你可在任意有",{"2":{"730":1}}],["你可在表达式中包含属性值或其他变量",{"2":{"630":1}}],["你可在每个群聊中启用不同的扩展",{"2":{"625":1}}],["你可在",{"2":{"459":1}}],["你可在这个页面查看目前在",{"2":{"428":1}}],["你可按需要进行编辑",{"2":{"397":1}}],["你可通过指令测试功能测试你的海豹核心对于消息的反应",{"2":{"427":1}}],["你可通过",{"2":{"321":1,"701":1}}],["你可选择每次自动备份的范围",{"2":{"317":1}}],["你可能用到以下指令",{"2":{"747":1}}],["你可能会从镜子里召唤出血腥玛丽",{"2":{"740":1}}],["你可能会收到",{"2":{"454":1}}],["你可能会发现一些牌堆拥有特殊的功能",{"2":{"387":1}}],["你可能还想了解",{"2":{"283":1,"290":1,"292":1,"302":1,"313":1}}],["你可能需要先将骰子加为好友",{"2":{"601":1}}],["你可能需要自行通过",{"2":{"539":1}}],["你可能需要自己新建文件夹",{"2":{"196":1}}],["你可能需要选择",{"2":{"453":1}}],["你可能需要对使用命令行程序有所了解",{"2":{"261":1}}],["你可能需要对",{"2":{"254":1}}],["你可能想编写一个能够在用户发出符合某种规则的消息时",{"2":{"209":1}}],["你可能已经注意到了",{"2":{"206":1}}],["你可能注意到",{"2":{"172":1,"376":1}}],["你可能暂时不会用到所有的功能",{"2":{"19":1}}],["你可以将",{"2":{"622":1}}],["你可以将它看成不需要触发词的自定义回复",{"2":{"70":1}}],["你可以复制迁出海豹",{"2":{"575":1}}],["你可以自行删除",{"2":{"574":1}}],["你可以自己在本地搭一个",{"2":{"238":1}}],["你可以",{"2":{"569":1}}],["你可以编写一些复杂逻辑",{"2":{"551":1}}],["你可以从",{"2":{"542":1}}],["你可以从其官网下载页",{"2":{"460":1}}],["你可以右键点击托盘图标并选择退出",{"2":{"457":1}}],["你可以右键单击压缩包后选择解压到",{"2":{"196":1}}],["你可以选择性地采用本节介绍的方法",{"2":{"446":1}}],["你可以选择以下任意一种格式来学习",{"2":{"48":1}}],["你可以分别控制回复文件的启用与否",{"2":{"414":1}}],["你可以点击",{"2":{"413":1}}],["你可以为每个分组添加若干别名",{"2":{"397":1}}],["你可以把它想象成一组扑克牌",{"2":{"383":1}}],["你可以参考模板中对",{"2":{"504":1}}],["你可以参考上面的内容自行对比理解",{"2":{"371":1}}],["你可以参考以下内容以学习",{"2":{"314":1}}],["你可以看见一些帮助信息",{"2":{"413":1}}],["你可以看见文案被按照几个大类放置在一起",{"2":{"362":1}}],["你可以看出很多回复语都有普通和无前缀",{"2":{"371":1}}],["你可以看到在何时",{"2":{"357":1}}],["你可以看到一个开源项目的全部进行中的议题",{"2":{"279":1}}],["你可以看到",{"2":{"258":1}}],["你可以看到从本地安装的选项",{"2":{"257":1}}],["你可以对不同等级的处理方式做不同的设置",{"2":{"355":1}}],["你可以设定一个时间线",{"2":{"350":1}}],["你可以设定为你的扩展的名字",{"2":{"128":1}}],["你可以直接下载新版本海豹进行安装",{"2":{"546":1}}],["你可以直接右键",{"2":{"262":1}}],["你可以直接按照以下格式书写",{"2":{"66":1,"89":1,"90":1}}],["你可以打开",{"2":{"258":1}}],["你可以尝试在内容的开头和结尾去寻找原文链接",{"2":{"207":1}}],["你可以提出一个",{"2":{"206":1}}],["你可以给此",{"2":{"206":1}}],["你可以通过触发",{"2":{"718":1}}],["你可以通过如下方式记录武器的熟练项",{"2":{"669":1}}],["你可以通过以下指令在",{"2":{"626":1}}],["你可以通过以下方法访问这个界面",{"2":{"447":1}}],["你可以通过",{"2":{"385":1,"648":1}}],["你可以通过在",{"2":{"192":1,"233":1}}],["你可以通过查看牌堆管理界面中的",{"2":{"57":1}}],["你可以写出很多调用",{"2":{"135":1}}],["你可以在频道中向海豹核心发送",{"2":{"708":1}}],["你可以在海豹核心的设置中选择",{"2":{"451":1}}],["你可以在应用信息界面管理海豹核心的权限",{"2":{"447":1}}],["你可以在下拉框选择进行切换",{"2":{"414":1}}],["你可以在手动备份时调整备份范围",{"2":{"316":1}}],["你可以在多开助手中看到你的编号",{"2":{"259":1}}],["你可以在其中引用其他",{"2":{"154":1}}],["你可以在",{"2":{"66":1,"164":1,"167":1,"254":1,"350":1,"384":1,"393":1,"403":1,"416":1,"539":1,"545":1,"642":1}}],["你可以使用指定的压缩包对当前海豹进行覆盖",{"2":{"545":1}}],["你可以使用文本匹配中的",{"2":{"419":1}}],["你可以使用",{"2":{"66":1,"135":1,"376":1,"548":1}}],["你可以以表的形式来创建更复杂的牌组",{"2":{"61":1}}],["你可以阅读此章的剩余各节",{"2":{"20":1}}],["你可以跳过一些细节问题",{"2":{"19":1}}],["你可以熟悉一下海豹核心提供的不同自定义功能",{"2":{"19":1}}],["你可以立即付诸实践",{"2":{"16":1}}],["你需要通过扩展管理指令",{"2":{"721":1}}],["你需要和骰子成为好友",{"2":{"718":1}}],["你需要一个代理软件",{"2":{"686":1}}],["你需要指定",{"2":{"539":1}}],["你需要根据",{"2":{"522":1}}],["你需要根据规则编写规则模板",{"2":{"147":1}}],["你需要两个手机",{"2":{"514":1}}],["你需要建立好一个机器人",{"2":{"535":1}}],["你需要建立好一个",{"2":{"501":1}}],["你需要建立好一个应用",{"2":{"464":1,"473":1,"530":1}}],["你需要前往",{"2":{"468":1}}],["你需要安装或下载一个",{"2":{"460":1}}],["你需要访问系统设置的",{"2":{"447":1}}],["你需要下载新版",{"2":{"444":1}}],["你需要点击右上角的",{"2":{"315":1}}],["你需要在不同群聊中使用同一角色卡",{"2":{"748":1}}],["你需要在侧边栏",{"2":{"466":1}}],["你需要在",{"2":{"263":1}}],["你需要开启",{"2":{"262":1}}],["你需要使用安装包",{"2":{"693":1}}],["你需要使用",{"2":{"262":1}}],["你需要学习的内容会爆炸式增长",{"2":{"209":1}}],["你需要自行抓取",{"2":{"240":1}}],["你需要自行尝试",{"2":{"154":1}}],["你需要自己通过",{"2":{"138":1}}],["你需要编写指令对象的",{"2":{"114":1}}],["你需要的回复文本",{"2":{"83":1}}],["你需要的文本",{"2":{"83":3}}],["你需要对于海豹核心对不同功能的约定有所了解",{"2":{"21":1}}],["你需要将它接入你希望的即时通讯平台",{"2":{"18":1}}],["你需要让海豹核心在你的服务器或电脑上运行起来",{"2":{"17":1}}],["你的海豹应该可以正常连接官方机器人运作了",{"2":{"502":1}}],["你的海豹应该可以正常在",{"2":{"465":1,"470":1,"474":1,"533":1,"536":1}}],["你的操作系统会不断调整各个程序的活动策略",{"2":{"446":1}}],["你的用户",{"2":{"427":2}}],["你的指令测试只能模拟私聊",{"2":{"427":1}}],["你的浏览器则试图连接到",{"2":{"278":1}}],["你的账号应当已经成功连接",{"2":{"242":1}}],["你的端口号可能不同",{"2":{"242":1}}],["你的追问同样应该是一个良好的问题",{"2":{"230":1}}],["你的扩展依赖于另一个扩展提供的功能",{"2":{"164":1}}],["你的扩展的主页链接",{"2":{"159":1}}],["你的扩展的代码就写在这个文件里",{"2":{"152":1}}],["你的修改完成后",{"2":{"13":1}}],["你的投喂将用于支付服务器费用",{"2":{"2":1}}],["从而执行了来自其他扩展的指令",{"2":{"721":1}}],["从当前骰池抽取一个数值",{"2":{"704":1}}],["从先攻列表中删除指定单位",{"2":{"660":1}}],["从指定群组中退出",{"2":{"622":1}}],["从海豹官网下载全新的安装包",{"2":{"544":1}}],["从海豹的",{"2":{"460":1}}],["从目前的表现看来",{"2":{"512":1}}],["从群聊中触发的私聊",{"2":{"471":1}}],["从中解压出数据库文件",{"2":{"459":1}}],["从任务列表隐藏",{"2":{"451":1}}],["从上到下依次执行",{"2":{"422":1}}],["从此只要是自定义回复能实现的功能",{"2":{"209":1}}],["从类似",{"2":{"207":1}}],["从序列",{"2":{"43":1}}],["从",{"2":{"37":2,"39":1,"40":1,"41":1,"94":3,"98":1,"103":2,"120":1,"140":1,"159":2,"164":1,"167":1,"315":1,"316":1,"317":1,"395":1,"397":1,"417":1,"426":1,"427":1,"428":1,"513":1,"525":1,"538":2,"545":1,"589":1,"642":1,"643":1,"706":1,"707":1,"708":2,"709":2}}],["从零开始",{"0":{"16":1},"1":{"17":1,"18":1,"19":1,"20":1,"21":1}}],["从主分支",{"2":{"10":1}}],["一行",{"2":{"699":1}}],["一种特殊的六面骰",{"2":{"634":1}}],["一种格式化后的参数",{"2":{"110":1}}],["一群",{"2":{"580":1}}],["一节",{"2":{"553":1}}],["一节中的介绍",{"2":{"496":1}}],["一节中海豹连接",{"2":{"494":1}}],["一节中运行",{"2":{"493":1}}],["一节中",{"2":{"220":1,"489":1,"490":1}}],["一章",{"2":{"540":1}}],["一次性发送消息太多",{"2":{"505":1}}],["一栏里",{"2":{"504":1}}],["一栏里补充说明",{"2":{"504":1}}],["一栏填",{"2":{"504":1}}],["一栏填写指令的简介",{"2":{"503":1}}],["一栏点击",{"2":{"503":1}}],["一栏中",{"2":{"501":1}}],["一栏的",{"2":{"238":1}}],["一加",{"0":{"451":1}}],["一条作为结果",{"2":{"422":1}}],["一旦点击确认",{"2":{"414":1}}],["一旦您有以上禁止行为",{"2":{"15":1}}],["一级文件夹名将作为其中所有文档的分组名",{"2":{"395":1}}],["一切就是刚开始的样子了",{"2":{"363":1}}],["一定要开启",{"2":{"342":1}}],["一定会比在群里问群员快",{"2":{"189":1}}],["一定会获得",{"2":{"54":1}}],["一词更多地被翻译为中性的",{"2":{"279":1}}],["一键注入文件提供器功能",{"2":{"443":1}}],["一键",{"2":{"239":1}}],["一文广为流传",{"2":{"215":1}}],["一些系统",{"2":{"723":1}}],["一些系统也称",{"2":{"447":1}}],["一些骰子服务",{"2":{"717":1}}],["一些分支专精技能的名字",{"2":{"582":1}}],["一些插件作者为扩展提供了更新链接",{"2":{"406":1}}],["一些牌堆作者为牌堆提供了云端内容",{"2":{"389":1}}],["一些牌堆作者为牌堆提供了更新链接",{"2":{"388":1}}],["一些杂项文案设置",{"2":{"362":1}}],["一些看起来详尽的指导细细读来却可能完全看不懂",{"2":{"204":1}}],["一些内置变量",{"2":{"172":1}}],["一些有帮助的资源",{"0":{"168":1}}],["一些强",{"2":{"154":1}}],["一些编译的配置",{"2":{"152":1}}],["一下看看是谁写的",{"2":{"99":2}}],["一下看看是谁写的`",{"2":{"99":1}}],["一般形式为",{"2":{"723":1}}],["一般使用邀请链接或者其他方式",{"2":{"718":1}}],["一般都要求用户严格遵循使用协议",{"2":{"718":1}}],["一般为",{"2":{"686":1}}],["一般用于各种规则的资料查询",{"2":{"392":1}}],["一般情况下",{"2":{"257":1,"278":1}}],["一般情况下你都可以留空",{"2":{"68":1}}],["一般而言",{"2":{"196":1,"718":1}}],["一般来说是磁盘",{"2":{"696":1}}],["一般来说纯",{"2":{"154":1}}],["一般来说在群内拉黑就写群",{"2":{"123":1}}],["一般来说",{"2":{"112":1}}],["一般会在定义指令函数时就声明",{"2":{"94":1}}],["一棵是反函树",{"2":{"87":1}}],["一棵是函树",{"2":{"87":1}}],["一脚踢向海豹",{"2":{"82":1}}],["一个指令由指令前缀",{"2":{"719":1}}],["一个海豹骰自用",{"2":{"718":1}}],["一个较为常见的用法是",{"2":{"602":1}}],["一个可用的机器人账号",{"2":{"549":1}}],["一个扫码",{"2":{"514":1}}],["一个运行海豹",{"2":{"514":1}}],["一个汉字算作两个字符",{"2":{"421":1}}],["一个端口只能被一个服务端监听使用",{"2":{"278":1}}],["一个端口",{"2":{"278":1}}],["一个有效的问题解决方案可以扩充海豹社区对问题的经验",{"2":{"229":1}}],["一个问题可能是也可能不是由用户错误的操作引起的",{"2":{"224":1}}],["一个小例子",{"2":{"209":1}}],["一个更高效",{"2":{"207":1}}],["一个更加简单易用的跑团骰子系统",{"2":{"36":2,"40":2,"46":2}}],["一个合理的开源项目",{"2":{"206":1}}],["一个建议",{"2":{"196":1}}],["一个便于理解的提问",{"2":{"190":1}}],["一个完整的非指令关键词模板如下",{"2":{"137":1}}],["一个取",{"2":{"128":1}}],["一个存",{"2":{"128":1}}],["一个测试词库",{"2":{"90":1}}],["一个实时更新的公骰列表牌堆",{"2":{"62":1}}],["一个项中抽取其他项",{"0":{"50":1},"1":{"51":1}}],["一个",{"2":{"48":3,"94":4,"112":1}}],["一个简单易用的跑团骰子系统",{"2":{"36":3,"40":2,"46":2,"68":1,"578":1}}],["一起开始海豹的开发吧",{"2":{"579":1}}],["一起被去除",{"2":{"35":1}}],["一起努力让海豹变得更好",{"2":{"5":1}}],["上",{"2":{"718":1}}],["上限4个",{"2":{"674":1}}],["上限3个",{"2":{"672":1}}],["上不封顶",{"2":{"672":1}}],["上一轮中暴击的骰子数",{"2":{"636":1}}],["上线机器人",{"2":{"504":1}}],["上文所述的",{"2":{"637":1}}],["上文",{"2":{"262":1,"264":1}}],["上传完成后会自动重启海豹",{"2":{"545":1}}],["上传固件",{"0":{"545":1}}],["上传插件",{"2":{"405":1}}],["上传",{"2":{"396":2,"415":1,"416":1,"504":1}}],["上传帮助文档",{"0":{"396":1}}],["上传牌堆",{"2":{"385":1}}],["上传到海豹",{"2":{"224":1}}],["上传并重载",{"2":{"158":1}}],["上通过",{"2":{"224":1}}],["上的",{"2":{"206":1,"519":1}}],["上面已经陈述了一些应用",{"2":{"196":1}}],["上下载文件之类的问题",{"2":{"193":1,"202":1}}],["上同步发布更新",{"2":{"193":1,"202":1}}],["上创建一个扩展的仓库",{"2":{"149":1}}],["上级主管部门下发通知中所禁止的其他内容的",{"2":{"15":1}}],["上提",{"2":{"9":1}}],["政策",{"2":{"15":1}}],["关联启动和后台活动",{"2":{"450":1}}],["关联合作者的",{"2":{"15":1}}],["关键字1|关键字2",{"2":{"722":2}}],["关键字可以多个",{"2":{"722":2}}],["关键字>",{"2":{"722":3}}],["关键字",{"2":{"412":1,"642":1,"722":2,"724":1,"746":1,"765":3}}],["关键词",{"2":{"378":1,"424":1,"654":1}}],["关闭自动修改",{"0":{"736":1}}],["关闭自动回复等",{"2":{"112":1}}],["关闭另一个",{"2":{"721":1}}],["关闭功能",{"2":{"707":1}}],["关闭防火墙",{"2":{"686":1}}],["关闭本群的自定义回复功能",{"2":{"656":1}}],["关闭扩展",{"2":{"625":1}}],["关闭指定扩展",{"2":{"625":1}}],["关闭了骰子",{"2":{"727":1}}],["关闭了",{"2":{"577":1}}],["关闭你的电脑海豹",{"2":{"577":1}}],["关闭你的超级用户权限",{"2":{"256":1}}],["关闭dnd5e系列指令",{"2":{"569":1}}],["关闭抽牌",{"2":{"569":1}}],["关闭关键字回复",{"2":{"569":1}}],["关闭对应扩展会连同扩展带来的指令一块关闭",{"2":{"569":1}}],["关闭其",{"2":{"450":1}}],["关闭其他未在使用的进程或更换资源更为充足的平台来解决问题",{"2":{"199":1}}],["关闭后不回应戳一戳",{"2":{"341":1}}],["关闭应用程序是更好的选择",{"2":{"252":1}}],["关闭应用进程跟直接退出应用程序差别不大",{"2":{"252":1}}],["关闭",{"2":{"112":1,"156":1,"521":1,"569":2}}],["关于自定义回复功能的一般性介绍",{"2":{"656":1}}],["关于牌堆功能的一般性介绍",{"2":{"651":1}}],["关于备份",{"0":{"315":1}}],["关于手机",{"2":{"262":1}}],["关于一些小白常见的问题",{"2":{"203":1,"213":1,"266":1}}],["关于特定的名词术语解释",{"2":{"195":1,"203":1,"213":1}}],["关于如何高效地进行搜索可以参考",{"2":{"220":1}}],["关于如何快速学习相关背景知识",{"2":{"195":1,"213":1,"266":1}}],["关于如何正确地提问",{"2":{"195":1,"203":1,"266":1}}],["关于取出数据来修改的函数",{"2":{"131":1}}],["关于黑名单用户",{"2":{"120":1}}],["关于白名单用户",{"2":{"120":1}}],["关于",{"0":{"0":1},"1":{"1":1,"2":1,"3":1,"4":1},"2":{"128":2,"504":1}}],["编号",{"2":{"765":1}}],["编辑",{"2":{"504":1}}],["编辑页填写信息",{"2":{"13":1}}],["编译到",{"2":{"161":1}}],["编译成",{"2":{"152":1}}],["编译成功的",{"2":{"151":1}}],["编解码",{"2":{"158":1}}],["编程语言的教学超出了本文档的目的",{"2":{"157":1}}],["编码为",{"2":{"94":1}}],["编码转换等诸多功能",{"2":{"93":1}}],["编码编写",{"2":{"66":1}}],["编码",{"2":{"30":1,"94":1}}],["编写对它的解读",{"2":{"701":1}}],["编写一个简单的",{"2":{"480":1}}],["编写一条自定义指令",{"2":{"117":2}}],["编写插件时",{"2":{"161":1}}],["编写插件的内容",{"2":{"143":1}}],["编写的包都是可以引用的",{"2":{"154":1}}],["编写新的",{"0":{"143":1},"1":{"144":1,"145":1,"146":1,"147":1}}],["编写代骰指令",{"0":{"134":1},"2":{"134":2}}],["编写暗骰指令",{"0":{"133":1},"2":{"133":1}}],["编写指令的具体处理代码",{"2":{"114":1}}],["编写",{"2":{"93":1,"408":1,"410":1}}],["编写敏感词库",{"0":{"88":1},"1":{"89":1,"90":1},"2":{"359":1}}],["编写帮助文档",{"0":{"65":1},"1":{"66":1,"67":1,"68":1},"2":{"400":1}}],["编写牌堆",{"0":{"29":1},"1":{"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1,"50":1,"51":1,"52":1,"53":1,"54":1,"55":1,"56":1,"57":1,"58":1,"59":1,"60":1,"61":1,"62":1,"63":1,"64":1},"2":{"281":1,"304":1,"311":1,"390":1}}],["编写自定义回复",{"0":{"69":1},"1":{"70":1,"71":1,"72":1,"73":1,"74":1,"75":1,"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":1,"83":1,"84":1,"85":1,"86":1,"87":1},"2":{"25":1,"425":1}}],["编写复杂文案",{"0":{"22":1},"1":{"23":1,"24":1,"25":1,"26":1,"27":1,"28":1},"2":{"381":1}}],["编写人员",{"2":{"15":1}}],["海族",{"2":{"763":1}}],["海外版或许是一个尚可接受的选择",{"2":{"207":1}}],["海洋馆工作人员",{"2":{"15":1}}],["海豹社区还通过插件的形式为其它规则提供了支持",{"2":{"744":1}}],["海豹通过",{"2":{"721":1}}],["海豹回复你一条消息",{"2":{"708":1}}],["海豹不会回应",{"2":{"688":1}}],["海豹不会做出回应",{"2":{"688":1}}],["海豹不会与非好友帐号私聊",{"2":{"682":1}}],["海豹也会回应",{"0":{"688":1}}],["海豹也支持使用",{"2":{"503":1}}],["海豹默认骰子面数为100",{"2":{"626":1}}],["海豹默认的",{"2":{"307":1}}],["海豹提供",{"2":{"625":1}}],["海豹提供了官方的",{"2":{"539":1}}],["海豹提供了多个平台的安装包",{"2":{"538":1}}],["海豹提供了一种简单易学的脚本语言",{"2":{"171":1}}],["海豹提供了一系列时间变量来调用",{"2":{"83":1}}],["海豹提供了相应的",{"2":{"148":1}}],["海豹除了核心指令之外",{"2":{"569":1}}],["海豹搭载了全文搜索技术",{"2":{"553":1}}],["海豹连接",{"0":{"494":1,"518":1,"524":1}}],["海豹数据等",{"2":{"491":1}}],["海豹文件路径",{"0":{"442":1}}],["海豹为了安全不允许调用非海豹文件夹内的图片",{"2":{"430":1}}],["海豹为这种格式的牌堆支持了更多功能",{"2":{"30":1}}],["海豹版本",{"2":{"341":1,"513":1}}],["海豹中必须填入与你的",{"2":{"278":1}}],["海豹中的权限等级",{"2":{"120":1}}],["海豹工作目录内的文件结构可以参考",{"2":{"274":1}}],["海豹官方无力解决此类问题",{"2":{"512":1}}],["海豹官方无法做出任何保证",{"2":{"512":1}}],["海豹官方安装包中也默认提供了",{"2":{"393":1}}],["海豹官方不对此提供帮助",{"2":{"257":1}}],["海豹官方也不对",{"2":{"254":1}}],["海豹官网",{"2":{"1":1}}],["海豹从旧版升级后",{"2":{"364":1}}],["海豹从",{"2":{"254":1,"462":1,"499":1,"514":1,"516":1,"519":1,"529":1}}],["海豹目前可以健康食用的",{"2":{"393":1}}],["海豹目前支持了许多平台",{"2":{"18":1}}],["海豹目录",{"2":{"242":1}}],["海豹已于",{"2":{"236":1,"253":1}}],["海豹依然不会在私聊中回复我",{"2":{"226":1}}],["海豹用户群的群员们并不会如此严苛",{"2":{"215":1}}],["海豹手册不应该分走大部分篇幅去讲述应该如何提问",{"2":{"213":1}}],["海豹手册已于",{"2":{"203":1,"213":1}}],["海豹开发了",{"2":{"568":1}}],["海豹开发组也正在着手对新的",{"2":{"254":1}}],["海豹开发组认为",{"2":{"203":1,"213":1}}],["海豹开源组织",{"2":{"1":1,"5":1}}],["海豹格式的",{"2":{"172":3}}],["海豹会将图片在容器内的绝对路径传递给",{"2":{"491":1,"496":1}}],["海豹会向通知列表发送一条通知",{"2":{"350":1}}],["海豹会按照加好友验证设置自动通过或拒绝",{"2":{"334":1}}],["海豹会尝试在兼容的情况下尽可能地加载插件",{"2":{"167":1}}],["海豹会首先输出空变量",{"2":{"82":1}}],["海豹额外在环境中提供了如下全局对象",{"2":{"158":1}}],["海豹才会触发此流程",{"2":{"137":1}}],["海豹允许你在一个",{"2":{"112":1}}],["海豹仍会按照自定义回复中设置的格式输出",{"2":{"82":1}}],["海豹没能逃脱凶猛恶汉们的掌控",{"2":{"82":1}}],["海豹遵循命令行脚本的通行做法",{"2":{"73":1}}],["海豹骰子的回复内容几乎可以进行完全的自定义",{"2":{"361":1}}],["海豹骰",{"2":{"68":1,"578":1}}],["海豹骰不对非自身提供以外的内容合法性负责",{"2":{"15":1}}],["海豹语表达式",{"2":{"119":1}}],["海豹语",{"2":{"59":1,"92":1,"171":1}}],["海豹将此指令迁移至",{"2":{"706":1,"707":1,"708":1,"709":1}}],["海豹将依次从上往下检查更新",{"2":{"58":1}}],["海豹将以",{"2":{"57":1,"63":1}}],["海豹",{"2":{"53":3,"54":11,"68":1,"117":2,"253":1,"299":1,"389":1,"545":1}}],["海豹支持使用",{"2":{"709":1}}],["海豹支持",{"2":{"708":1,"709":1}}],["海豹支持在每个群组中分别设置默认的查询分组",{"2":{"643":1}}],["海豹支持在牌堆中使用",{"2":{"37":1}}],["海豹支持后台固件升级功能",{"2":{"545":1}}],["海豹支持其他编程语言编写插件吗",{"0":{"170":1}}],["海豹支持用正则匹配",{"2":{"73":1}}],["海豹支持的",{"2":{"66":1}}],["海豹支持为牌堆提供云端内容",{"2":{"62":1}}],["海豹支持读取以",{"2":{"37":1}}],["海豹新版官方手册",{"2":{"5":1}}],["海豹的计算只支持整数",{"2":{"628":1}}],["海豹的其他功能都作为",{"2":{"625":1}}],["海豹的设计初衷是",{"2":{"549":1}}],["海豹的更新有时会调整和删除部分文案条目",{"2":{"364":1}}],["海豹的日志通常可以在三个地方找到",{"2":{"299":1}}],["海豹的日志中包含了大量的有效信息",{"2":{"225":1}}],["海豹的本地文件",{"0":{"429":1},"1":{"430":1,"431":1,"432":1,"433":1,"434":1},"2":{"274":1,"539":1}}],["海豹的抽取指令为",{"2":{"48":1}}],["海豹的自动构建仓库",{"2":{"5":1}}],["海豹的前端代码",{"2":{"5":1}}],["海豹的",{"2":{"5":1,"158":1}}],["海豹的所有源代码都托管在",{"2":{"5":1}}],["海豹的源代码以",{"2":{"4":1}}],["海豹核心不提供统计整体成功率的功能",{"2":{"737":1}}],["海豹核心不支持关闭暗骰",{"2":{"682":1}}],["海豹核心可以以",{"2":{"729":1}}],["海豹核心可以对接其提供的",{"2":{"285":1,"516":1}}],["海豹核心没有预置的自定义回复",{"2":{"724":1}}],["海豹核心使用词条标题模糊搜索",{"2":{"642":1}}],["海豹核心使用稍微更多的内存使用全文搜索",{"2":{"642":1}}],["海豹核心使用不含秒数",{"2":{"314":1}}],["海豹核心也支持通过装载",{"2":{"625":1}}],["海豹核心内置的房规列出如下",{"2":{"619":1}}],["海豹核心兼容了简化卡格式",{"2":{"589":1}}],["海豹核心兼容了溯洄核心",{"2":{"548":1}}],["海豹核心只占用大概",{"2":{"550":1}}],["海豹核心对指令格式不敏感",{"2":{"548":1}}],["海豹核心在容器中的工作目录是根目录",{"2":{"539":1}}],["海豹核心将以",{"2":{"729":1}}],["海豹核心将表达式翻译成字节码",{"2":{"570":1}}],["海豹核心将尝试安装一个由",{"2":{"541":1}}],["海豹核心将会在后台运行并弹出提示",{"2":{"539":1}}],["海豹核心将无法正常运行",{"2":{"453":1}}],["海豹核心与",{"0":{"482":1},"2":{"482":2}}],["海豹核心支持与安装了",{"2":{"477":1}}],["海豹核心支持使用",{"2":{"402":1}}],["海豹核心默认搭载了",{"2":{"642":1}}],["海豹核心默认每",{"2":{"459":1}}],["海豹核心默认提供每",{"2":{"315":1}}],["海豹核心正在运行",{"2":{"454":1}}],["海豹核心需要必要的权限来正常运行",{"2":{"447":1}}],["海豹核心添加了",{"2":{"426":1}}],["海豹核心功能的文案",{"2":{"362":1}}],["海豹核心会在频道私聊中回复你",{"2":{"708":1}}],["海豹核心会按以下规则进行忽略",{"2":{"649":1}}],["海豹核心会进行提示",{"2":{"638":1}}],["海豹核心会第一时间跟进以解决这一问题",{"2":{"471":1}}],["海豹核心会自动从该群组中退出",{"2":{"350":1}}],["海豹核心会检查在每个",{"2":{"350":1}}],["海豹核心会调用你写的这个函数",{"2":{"114":1}}],["海豹核心产生的所有备份都位于",{"2":{"315":1}}],["海豹核心要求的",{"2":{"274":1}}],["海豹核心的日志记录只在骰子启用时进行",{"2":{"727":1}}],["海豹核心的数据文件全平台通用",{"2":{"573":1}}],["海豹核心的底层架构",{"2":{"571":1}}],["海豹核心的敏感词主要分为四个等级",{"2":{"355":1}}],["海豹核心的版本号",{"2":{"227":1}}],["海豹核心的诞生离不开开源社区和其它开源软件的支持",{"2":{"4":1}}],["海豹核心检测不到其他必要的文件",{"2":{"196":1}}],["海豹核心提供的扩展",{"2":{"152":1}}],["海豹核心提供了自定义指令前缀功能",{"2":{"720":1}}],["海豹核心提供了一种自动安装为系统服务",{"2":{"541":1}}],["海豹核心提供了",{"2":{"407":1}}],["海豹核心提供了多种扩展功能",{"2":{"91":1}}],["海豹核心提供了许多指令",{"2":{"19":1}}],["海豹核心新增了用于定时任务的",{"2":{"140":1}}],["海豹核心跟随",{"2":{"69":1}}],["海豹核心无法核查从接口处获取的数据",{"2":{"62":1}}],["海豹核心",{"0":{"578":1},"2":{"36":3,"40":2,"172":1,"428":1,"447":1,"449":1}}],["海豹核心目前支持",{"2":{"30":1}}],["海豹核心成功运行后",{"2":{"18":1}}],["海豹核心官方版只支持",{"2":{"15":1}}],["海豹核心源码的托管地址",{"2":{"1":1}}],["诋毁",{"2":{"15":1}}],["侵犯他人知识产权或涉及第三方商业秘密及其他专有权利的",{"2":{"15":1}}],["侵害他人合法权益的",{"2":{"15":1}}],["木马及其相关内容的",{"2":{"15":1}}],["木落>尝试使用",{"2":{"582":3}}],["木落>的属性变化",{"2":{"582":1}}],["木落>的属性录入完成",{"2":{"582":1}}],["木落>的个人属性为",{"2":{"582":1}}],["木落>掷出了",{"2":{"570":1}}],["木落",{"2":{"3":1,"112":2,"117":2,"129":2,"134":2,"136":1,"158":1,"159":1,"172":4,"659":2,"660":1}}],["96",{"2":{"619":5}}],["90",{"2":{"604":1,"616":1}}],["99",{"2":{"595":1,"619":1}}],["917654757",{"2":{"580":1}}],["95",{"2":{"181":1}}],["987654321",{"2":{"172":2}}],["9",{"2":{"15":1,"34":1,"52":1,"53":3,"54":1,"94":1,"139":1,"172":1,"241":1,"255":1,"261":2,"295":2,"497":1,"593":2,"635":1,"636":1,"658":7,"689":1}}],["侮辱或者诽谤他人",{"2":{"15":1}}],["85",{"2":{"658":1}}],["83",{"2":{"658":1}}],["837s",{"2":{"480":1}}],["8887",{"2":{"481":2,"482":1}}],["8081",{"2":{"493":1,"494":1}}],["8080",{"2":{"242":3}}],["80",{"2":{"181":2,"278":1,"599":1,"605":1,"616":1,"639":1}}],["87",{"2":{"97":1}}],["8",{"0":{"252":1},"2":{"15":1,"30":1,"52":1,"66":1,"94":1,"99":3,"139":1,"203":2,"213":2,"241":1,"255":1,"478":2,"570":1,"600":1,"616":2,"631":1,"635":2,"652":2,"658":6,"711":1}}],["恐怖或者教唆犯罪的",{"2":{"15":1}}],["凶杀",{"2":{"15":1}}],["赌博",{"2":{"15":1}}],["色情",{"2":{"15":1}}],["散布任何贬损",{"2":{"15":1}}],["散布淫秽",{"2":{"15":1}}],["散布谣言",{"2":{"15":1}}],["78",{"2":{"686":1}}],["72",{"2":{"658":1}}],["73",{"2":{"658":3}}],["76",{"2":{"658":2}}],["7+20+15+1+17",{"2":{"628":1}}],["75",{"2":{"616":3,"639":1}}],["755",{"2":{"576":1}}],["747114944",{"2":{"580":1}}],["715664650",{"2":{"580":1}}],["7zip",{"2":{"196":1}}],["7th",{"2":{"146":1,"550":1,"584":1,"746":1}}],["70",{"2":{"105":1,"120":1,"241":1,"550":1,"602":1,"616":1}}],["7",{"0":{"251":1,"584":1},"1":{"585":1,"586":1,"587":1,"588":1,"589":1,"590":1,"591":1,"592":1,"593":1,"594":1,"595":1,"596":1,"597":1,"598":1,"599":1,"600":1,"601":1,"602":1,"603":1,"604":1,"605":1,"606":1,"607":1,"608":1,"609":1,"610":1,"611":1,"612":1,"613":1,"614":1,"615":1,"616":1,"617":1,"618":1,"619":1,"620":1},"2":{"15":1,"37":1,"47":1,"52":1,"72":1,"94":1,"139":1,"172":1,"203":2,"213":2,"236":1,"253":1,"254":1,"261":1,"262":1,"478":1,"480":1,"514":1,"538":1,"562":1,"569":1,"582":2,"600":1,"605":1,"625":1,"631":1,"632":1,"670":1,"711":1,"739":1}}],["扰乱社会秩序",{"2":{"15":1}}],["6=106",{"2":{"628":1}}],["644",{"2":{"576":1}}],["64",{"2":{"497":1,"538":1,"637":1,"658":1}}],["6g",{"2":{"480":1}}],["65",{"2":{"616":2}}],["65535",{"2":{"278":1}}],["6544",{"2":{"265":2}}],["62828",{"2":{"259":1}}],["62028",{"2":{"259":2}}],["60",{"2":{"105":1,"120":1,"121":1,"582":2,"608":2,"611":2,"616":3}}],["6",{"0":{"250":1},"2":{"15":1,"52":1,"94":1,"139":2,"140":1,"167":2,"172":1,"314":1,"441":1,"478":1,"562":1,"582":1,"628":1,"631":2,"632":1,"633":2,"637":3,"658":1,"665":2,"667":1,"670":3,"711":1,"715":1}}],["5a10=",{"2":{"711":1}}],["5a6q4=",{"2":{"635":1}}],["5a6=",{"2":{"635":1,"711":1}}],["56",{"2":{"686":1}}],["562897832",{"2":{"580":1}}],["57",{"2":{"658":1}}],["575",{"2":{"616":1}}],["53",{"2":{"630":1}}],["530",{"2":{"616":1}}],["5d24=60",{"2":{"628":1}}],["5d24=",{"2":{"628":1}}],["5d24",{"2":{"628":1}}],["5s后将退出当前群组",{"2":{"624":1}}],["59",{"2":{"608":1,"611":1}}],["5800",{"2":{"259":2}}],["524364253",{"2":{"580":1}}],["52",{"2":{"253":1}}],["540",{"2":{"616":1}}],["54",{"2":{"253":2}}],["5555",{"2":{"259":1}}],["55",{"2":{"130":1,"172":1,"616":2}}],["5000",{"2":{"493":1}}],["50",{"2":{"105":1,"120":2,"121":1,"181":2,"497":1,"550":1,"570":1,"582":4,"595":1,"616":2,"619":9}}],["5+14",{"2":{"64":2}}],["514",{"2":{"59":3,"63":1,"64":2}}],["5e",{"0":{"657":1},"1":{"658":1,"659":1,"660":1,"661":1,"662":1,"663":1,"664":1,"665":1,"666":1,"667":1,"668":1,"669":1,"670":1,"671":1,"672":1,"673":1,"674":1,"675":1,"676":1,"677":1,"678":1,"679":1},"2":{"37":1,"47":1,"146":1,"657":1,"746":1}}],["5",{"0":{"21":1,"248":1,"249":1},"2":{"15":1,"52":1,"87":3,"94":1,"136":1,"139":2,"141":1,"159":1,"165":2,"167":3,"236":1,"253":1,"314":1,"441":1,"478":1,"572":1,"589":1,"619":5,"628":1,"631":1,"633":2,"635":7,"637":2,"652":1,"658":1,"672":2,"711":3,"715":1,"762":1,"763":1}}],["破坏社会稳定的",{"2":{"15":1}}],["破坏国家宗教政策",{"2":{"15":1}}],["破坏国家统一的",{"2":{"15":1}}],["破坏民族团结的",{"2":{"15":1}}],["民族歧视",{"2":{"15":1}}],["煽动民族仇恨",{"2":{"15":1}}],["4环3个",{"2":{"672":1}}],["4环",{"2":{"672":1}}],["4c3m7=",{"2":{"636":1}}],["4d6dh1=",{"2":{"633":1}}],["4d6dl1=",{"2":{"633":1}}],["4d6k3=",{"2":{"628":1}}],["4d6k3",{"2":{"628":1,"665":6}}],["485",{"2":{"616":1}}],["4=1",{"2":{"570":1}}],["4+2d10",{"2":{"570":1}}],["4+5",{"2":{"63":1,"64":2}}],["4+514",{"2":{"63":1,"64":2}}],["4+51",{"2":{"63":1,"64":3}}],["49=78",{"2":{"637":1}}],["49=30",{"2":{"637":1}}],["49",{"2":{"570":1}}],["42",{"2":{"497":2}}],["443",{"2":{"278":1}}],["41",{"2":{"172":1,"180":1}}],["4001",{"2":{"521":1}}],["40",{"2":{"105":1,"120":1,"121":1,"180":3,"182":2,"460":1,"550":1,"595":1,"596":3,"598":1,"616":1}}],["456",{"2":{"94":1,"139":1}}],["45",{"0":{"246":1},"2":{"33":1,"64":2,"600":3,"616":2}}],["4",{"0":{"20":1,"247":1},"2":{"15":1,"48":3,"52":1,"63":1,"64":5,"87":3,"90":1,"94":5,"136":1,"139":3,"140":1,"159":1,"165":4,"167":5,"172":1,"178":1,"254":2,"259":1,"265":1,"350":1,"421":1,"441":1,"480":3,"570":2,"619":1,"631":2,"633":2,"634":1,"635":2,"636":1,"637":3,"642":1,"667":2,"669":1,"672":4,"689":1,"711":3}}],["损害国家荣誉和利益的",{"2":{"15":1}}],["34",{"2":{"686":1}}],["3456",{"2":{"278":1}}],["3环5个",{"2":{"672":1}}],["3环",{"2":{"672":3}}],["3=22",{"2":{"659":1}}],["3=18",{"2":{"659":1}}],["384d20=3941",{"2":{"637":1}}],["386",{"2":{"239":1}}],["3941",{"2":{"637":1}}],["3+2",{"2":{"570":1}}],["33d24=384",{"2":{"637":1}}],["33ff",{"2":{"497":1}}],["33",{"2":{"497":1,"667":2}}],["3339",{"2":{"33":1,"90":2}}],["3s",{"2":{"346":1}}],["324",{"2":{"639":1}}],["3212",{"2":{"441":1}}],["3211",{"2":{"278":3,"307":2,"347":1,"441":1,"491":6,"539":4,"684":2,"693":2}}],["32",{"2":{"158":1,"514":1,"538":3}}],["35",{"2":{"141":1,"604":1}}],["31",{"2":{"129":1}}],["30尺",{"2":{"553":1}}],["3001",{"2":{"521":2}}],["300",{"2":{"190":1}}],["30=",{"2":{"363":2}}],["30=信任",{"2":{"125":1}}],["30=禁止",{"2":{"125":1}}],["30",{"2":{"90":2,"120":1,"121":1,"127":2,"142":1,"159":1,"181":1,"344":1,"480":1,"513":1,"570":1,"622":1,"637":1,"659":2}}],["3>",{"2":{"78":1}}],["3",{"0":{"19":1,"246":1},"2":{"15":1,"51":2,"52":1,"63":1,"64":3,"78":1,"87":3,"94":2,"110":1,"115":1,"136":1,"139":3,"141":1,"144":1,"172":1,"174":2,"176":3,"346":3,"441":1,"457":1,"460":3,"570":7,"600":1,"604":1,"619":1,"628":3,"631":1,"633":4,"635":6,"637":6,"659":2,"665":1,"670":2,"672":6,"678":2,"686":1,"687":1,"708":1,"711":2}}],["颠覆国家政权",{"2":{"15":1}}],["泄露国家秘密",{"2":{"15":1}}],["2环4个",{"2":{"672":1}}],["2环",{"2":{"672":2}}],["2=15",{"2":{"659":1}}],["2=17",{"2":{"659":2}}],["2=100",{"2":{"628":1}}],["2=80",{"2":{"639":1}}],["2=75",{"2":{"639":1}}],["2=65",{"2":{"637":1}}],["2=21",{"2":{"637":1}}],["28",{"2":{"605":1}}],["25",{"2":{"549":1,"597":1,"686":2}}],["255",{"2":{"497":2}}],["2d20q1",{"2":{"632":1}}],["2d20k1=",{"2":{"632":2}}],["2d20k1",{"2":{"178":1}}],["2d",{"2":{"497":1}}],["272",{"2":{"254":1}}],["23",{"2":{"604":1,"652":1}}],["237",{"0":{"248":1}}],["235",{"0":{"247":1}}],["21w19a",{"2":{"478":1}}],["21w18a",{"2":{"478":1}}],["21",{"2":{"145":2}}],["2471",{"2":{"236":1}}],["24",{"2":{"136":1,"272":2}}],["20+1d3",{"2":{"637":1}}],["2012r2",{"2":{"686":2}}],["2012",{"2":{"514":1}}],["2008",{"2":{"514":1}}],["200mb",{"2":{"457":1}}],["2001",{"2":{"427":1}}],["20",{"2":{"133":1,"134":1,"136":3,"141":1,"242":2,"254":1,"331":1,"480":3,"605":1,"632":1,"648":1,"669":1}}],["2024",{"2":{"203":2,"213":2,"236":1,"253":1,"254":3,"261":1,"480":1}}],["2022",{"2":{"117":1,"129":1,"133":1,"134":1,"136":1,"158":1,"242":2,"652":2}}],["20230109",{"2":{"172":1}}],["2023",{"2":{"90":2,"130":1,"159":1,"172":1}}],["22",{"2":{"130":1,"145":5}}],["2>",{"2":{"78":2}}],["2",{"0":{"18":1,"43":1,"245":1,"687":1},"2":{"15":1,"26":1,"27":1,"52":1,"54":2,"64":2,"72":1,"78":4,"83":1,"87":1,"89":2,"90":4,"94":3,"98":1,"115":2,"116":1,"117":2,"129":1,"130":5,"133":1,"134":1,"136":4,"139":3,"144":2,"147":1,"158":1,"159":2,"165":3,"166":2,"174":3,"176":3,"236":1,"242":1,"254":1,"265":1,"349":1,"441":1,"481":1,"491":3,"570":3,"572":1,"582":1,"598":1,"619":2,"625":1,"628":1,"633":1,"634":1,"635":4,"636":3,"637":3,"639":1,"652":1,"665":6,"672":3,"686":2,"711":2}}],["反向websocket监听地址",{"2":{"521":1}}],["反向连接",{"2":{"521":1}}],["反向",{"2":{"265":1}}],["反例",{"2":{"224":1,"225":1,"226":1,"227":1}}],["反斜杠",{"2":{"35":1}}],["反对中华人民共和国宪法所确定的基本原则的",{"2":{"15":1}}],["反馈以及功能请求",{"2":{"279":1}}],["反馈",{"0":{"7":1},"2":{"193":1,"202":1}}],["1环",{"2":{"672":2}}],["1环3个",{"2":{"672":1}}],["13326",{"2":{"686":3}}],["13325",{"2":{"686":6}}],["13",{"2":{"658":9,"659":3}}],["13579",{"2":{"238":1}}],["1=1",{"2":{"634":1}}],["1=",{"2":{"593":1}}],["1+32",{"2":{"637":2}}],["1+d10",{"2":{"570":2}}],["1+2",{"2":{"570":1}}],["1h30m10s",{"2":{"344":1}}],["19",{"2":{"632":2,"659":1}}],["192",{"2":{"278":1}}],["1919810",{"2":{"48":4,"58":3,"61":1}}],["1919",{"2":{"33":2,"48":4}}],["1500",{"2":{"497":1}}],["15",{"2":{"130":1,"172":1,"633":1,"644":1,"658":6,"659":3}}],["172",{"2":{"497":4}}],["17w13a",{"2":{"478":1}}],["17",{"2":{"130":1,"254":1,"261":1,"478":4,"497":4,"632":2,"658":2,"659":1,"667":2,"670":1}}],["1706684850",{"2":{"127":1}}],["16",{"2":{"478":2,"497":1,"562":1,"632":1,"635":1,"652":1,"658":6,"660":2,"670":2}}],["168",{"2":{"278":1}}],["1698636875",{"2":{"139":1}}],["1699086084",{"2":{"121":1}}],["1699077659",{"2":{"119":1}}],["1673250115",{"2":{"172":1}}],["1672066028",{"2":{"159":1}}],["1672423909",{"2":{"129":1}}],["1671886435",{"2":{"136":1}}],["1671540835",{"2":{"133":1,"134":1}}],["1671368035",{"2":{"117":1,"158":1}}],["1676386517",{"2":{"130":1}}],["18",{"2":{"117":1,"158":1,"478":3,"562":1,"632":1,"658":1,"667":1}}],["1d1d1d1d1d1d1d1d1d1d1d1d1d1d",{"2":{"637":1}}],["1d100",{"2":{"751":1}}],["1d100=3",{"2":{"363":2}}],["1d100=60",{"2":{"82":1}}],["1d10+",{"2":{"637":2}}],["1d10=1",{"2":{"637":1}}],["1d10=8",{"2":{"629":1}}],["1d10=7",{"2":{"629":1}}],["1d10=3",{"2":{"570":1,"638":1}}],["1d10",{"2":{"52":1,"751":1}}],["1d50=25",{"2":{"637":1}}],["1d50=21",{"2":{"637":1}}],["1d50=4",{"2":{"628":1}}],["1d50=48",{"2":{"628":1}}],["1d4+4",{"2":{"670":1}}],["1d4+",{"2":{"570":1}}],["1d4",{"2":{"570":1,"678":1,"751":1}}],["1d20=20",{"2":{"678":1}}],["1d20=3",{"2":{"678":1}}],["1d20=8",{"2":{"667":1}}],["1d20=16",{"2":{"669":1}}],["1d20=19",{"2":{"659":1}}],["1d20=15",{"2":{"659":3}}],["1d20=12",{"2":{"639":1}}],["1d20=18",{"2":{"639":1}}],["1d20=1",{"2":{"637":1}}],["1d20",{"2":{"570":1,"637":1}}],["1d6=5",{"2":{"591":1}}],["1d6",{"2":{"79":1,"665":1}}],["1>",{"2":{"78":2}}],["14=42",{"2":{"709":1}}],["14=11+45",{"2":{"709":1}}],["144",{"2":{"639":1}}],["14",{"2":{"33":1,"63":1,"64":2,"130":1,"658":7,"665":1,"667":1,"733":1}}],["12=",{"2":{"570":1}}],["127",{"2":{"259":2,"278":3,"347":1,"497":1,"498":1,"521":1}}],["123",{"2":{"94":2,"139":2,"172":1}}],["123456",{"2":{"430":1}}],["123456789",{"2":{"123":2,"172":3}}],["1234",{"2":{"34":1}}],["12",{"2":{"15":1,"117":1,"129":1,"133":1,"134":1,"136":1,"158":1,"315":1,"459":1,"478":1,"539":1,"616":1,"658":5,"659":2,"665":4,"667":2,"678":1,"686":1,"756":1}}],["11+45",{"2":{"709":1}}],["11+4",{"2":{"64":2}}],["114",{"2":{"63":1,"64":2}}],["114514种论证",{"2":{"64":3}}],["114514",{"2":{"48":4,"58":3,"61":1,"77":2,"172":1,"238":1}}],["11",{"2":{"15":1,"33":1,"63":2,"64":7,"227":1,"255":1,"262":1,"478":1,"616":1,"658":2,"659":1,"667":1,"711":1}}],["10a6k4m9=",{"2":{"635":1}}],["10a6k4m9",{"2":{"635":1}}],["10=63",{"2":{"630":1}}],["10=警告",{"2":{"125":1}}],["1024m",{"2":{"480":1}}],["101",{"2":{"69":2}}],["1002",{"2":{"427":1}}],["1001",{"2":{"427":1}}],["100",{"2":{"24":1,"105":1,"116":1,"117":1,"120":1,"121":1,"127":5,"134":1,"136":3,"139":1,"172":1,"619":10,"628":2,"648":1}}],["10",{"2":{"15":1,"33":2,"48":4,"52":1,"53":1,"54":2,"90":2,"94":1,"127":1,"139":1,"159":1,"172":1,"181":1,"183":2,"344":1,"350":1,"482":1,"539":1,"570":1,"593":2,"619":2,"633":1,"635":1,"636":2,"658":8,"665":16,"670":6,"678":1,"704":1,"711":2,"733":1}}],["1",{"0":{"17":1,"42":1,"244":2,"686":1},"2":{"15":1,"24":1,"26":1,"27":1,"48":3,"52":1,"53":2,"54":3,"56":1,"63":2,"64":8,"73":1,"76":1,"78":4,"79":4,"81":2,"83":2,"84":9,"87":1,"89":2,"90":5,"94":7,"112":2,"115":3,"116":2,"117":4,"119":4,"121":2,"127":7,"129":4,"130":14,"133":5,"134":3,"136":7,"139":7,"144":1,"145":2,"158":1,"159":3,"165":6,"167":5,"172":5,"173":7,"174":5,"178":2,"181":1,"254":6,"256":2,"259":2,"265":1,"278":4,"344":1,"347":1,"349":1,"385":2,"441":1,"443":1,"460":2,"478":10,"480":3,"482":1,"491":3,"497":4,"498":1,"521":1,"548":1,"570":6,"591":1,"593":2,"598":1,"616":1,"619":8,"628":1,"633":3,"634":2,"635":6,"636":1,"637":1,"642":1,"644":1,"652":4,"653":1,"658":1,"665":2,"672":3,"674":1,"686":1,"695":1,"715":2,"751":2}}],["非",{"2":{"499":1}}],["非常欢迎你使用海豹官方的骰子",{"2":{"500":1}}],["非常不建议你将文档放在这个文件夹中进行管理",{"2":{"396":1}}],["非常感谢",{"2":{"2":1}}],["非零和非空字符串为",{"2":{"173":1}}],["非浏览器环境",{"2":{"158":1}}],["非自带的插件",{"2":{"15":1}}],["您不得在使用海豹骰服务时",{"2":{"15":1}}],["您清楚并明白您对通过骰子提供的全部内容负责",{"2":{"15":1}}],["您需了解",{"2":{"15":1}}],["和参数相似",{"2":{"723":1}}],["和规则",{"2":{"686":1}}],["和一小段空闲时间",{"2":{"549":1}}],["和一级文件夹同级",{"2":{"396":1}}],["和自己的需求修改配置文件",{"2":{"523":1}}],["和信任用户可使用",{"2":{"342":1}}],["和错误",{"2":{"299":1}}],["和开源性",{"2":{"286":1}}],["和提供",{"2":{"285":1,"516":1}}],["和提出的功能请求",{"2":{"206":1}}],["和实际运行时的工作目录即为",{"2":{"274":1}}],["和默认值",{"2":{"94":5}}],["和",{"0":{"469":1},"2":{"30":1,"33":1,"48":1,"54":1,"70":1,"72":1,"78":1,"84":1,"90":2,"94":2,"104":2,"120":1,"145":1,"157":1,"158":1,"165":2,"166":1,"206":2,"218":1,"285":1,"287":1,"294":1,"299":1,"320":1,"340":1,"341":1,"356":1,"393":1,"414":1,"418":1,"419":1,"469":2,"470":1,"478":1,"512":1,"513":2,"533":1,"539":2,"550":1,"581":1,"582":1,"594":1,"642":2,"709":1,"718":1,"720":1,"721":1}}],["和海豹无关",{"2":{"15":1}}],["和功能建议都可反馈在",{"2":{"7":1}}],["欢迎语",{"2":{"707":1}}],["欢迎加入官方答疑群",{"2":{"681":1}}],["欢迎加入官方群寻求帮助",{"2":{"680":1}}],["欢迎加入官方群",{"2":{"580":1}}],["欢迎前去",{"2":{"572":1}}],["欢迎使用",{"2":{"242":1}}],["欢迎",{"2":{"135":1}}],["欢迎您选择由木落等研发的海豹骰点核心",{"2":{"15":1}}],["欢迎各种类型的",{"2":{"8":1}}],["sr",{"2":{"742":1}}],["src",{"2":{"130":1,"152":1}}],["slots",{"0":{"672":1},"1":{"673":1}}],["slack",{"0":{"528":1,"529":1},"1":{"529":1,"530":1,"531":1,"532":1,"533":1},"2":{"18":1,"528":1,"529":1,"530":3,"533":2,"540":1}}],["szz",{"2":{"593":2,"599":1,"639":2}}],["szzrain",{"2":{"119":2,"121":3,"127":3,"139":2,"159":1,"164":4,"165":9,"166":4}}],["silicon",{"2":{"538":1,"539":1}}],["signserver",{"0":{"252":1},"2":{"252":1}}],["sql",{"2":{"460":2}}],["sqlite",{"2":{"460":5}}],["systemd",{"2":{"541":2,"543":1}}],["systemctl",{"2":{"457":1,"541":4}}],["synonym",{"2":{"68":4}}],["sync",{"2":{"14":1}}],["scb",{"0":{"559":1}}],["scratch",{"2":{"530":1}}],["scopes",{"2":{"532":1}}],["scope",{"2":{"466":1,"497":2}}],["score",{"2":{"125":1,"127":2}}],["sc",{"0":{"370":1,"607":1},"1":{"608":1,"609":1,"610":1,"611":1},"2":{"504":1,"559":1,"570":5,"608":1,"609":2,"610":1,"681":1,"746":1,"751":4}}],["smtp",{"0":{"338":1},"2":{"336":1,"337":1,"338":2}}],["s",{"0":{"300":1},"1":{"301":1,"302":1},"2":{"209":1,"649":1,"678":1,"684":1}}],["snipaste",{"2":{"210":1}}],["snippets",{"2":{"168":1}}],["sn",{"0":{"732":1},"1":{"733":1,"734":1,"735":1,"736":1},"2":{"146":2,"733":4,"734":1,"735":2,"736":1,"746":1,"747":1}}],["sudo",{"2":{"541":1}}],["sub",{"2":{"570":1}}],["subscribe",{"2":{"531":1}}],["sublime",{"2":{"93":1}}],["suffix",{"2":{"136":4}}],["successrank",{"2":{"136":10}}],["spell",{"0":{"672":1},"1":{"673":1}}],["specialexecutetimes",{"2":{"110":1}}],["spigot",{"2":{"479":3,"480":2}}],["space",{"0":{"198":1}}],["splice",{"2":{"130":2}}],["shadowrun",{"0":{"742":1},"2":{"742":1}}],["shamrock",{"0":{"254":1,"258":1,"261":1,"264":1},"1":{"255":1,"256":1,"257":1,"258":1,"259":1,"260":1,"262":1,"263":1,"264":1,"265":1},"2":{"254":17,"258":10,"261":4,"262":1,"264":3,"265":1,"519":1}}],["shizuku",{"0":{"262":1},"2":{"261":1,"262":5,"263":2}}],["sh",{"2":{"239":2,"262":2}}],["shellsystemctl",{"2":{"541":1}}],["shellsqlite3",{"2":{"460":2}}],["shellsealdice",{"2":{"457":1,"458":1}}],["shell",{"0":{"302":1},"2":{"210":1,"262":1,"283":3,"290":4,"292":3,"302":5,"313":4,"457":1}}],["shufflepool",{"2":{"118":2}}],["showhelp",{"2":{"115":2,"116":2,"117":2,"127":5,"129":1,"130":1,"133":1,"134":1,"139":1}}],["showgroupwelcome",{"2":{"106":1}}],["show",{"2":{"26":1,"582":1,"587":1,"593":1,"663":3,"665":2,"670":3,"707":1,"709":1,"746":1}}],["ssh",{"2":{"224":1}}],["ss",{"0":{"672":1},"1":{"673":1},"2":{"110":5,"672":12,"758":2}}],["stshow力量",{"2":{"548":1}}],["story",{"2":{"569":2}}],["storage",{"2":{"130":9,"131":3,"262":1,"442":1}}],["storageget",{"2":{"128":1,"129":2,"130":4,"131":1,"142":3}}],["storageset",{"2":{"128":1,"129":1,"130":4,"131":1}}],["stopped",{"2":{"491":5}}],["stop",{"2":{"457":1,"480":1,"493":1,"541":1}}],["started",{"2":{"481":2}}],["start",{"0":{"252":1},"2":{"239":3,"262":1,"480":3,"481":1,"535":1,"541":1}}],["stack",{"2":{"207":1}}],["stat",{"2":{"678":1,"728":2}}],["status",{"2":{"135":1,"142":1,"541":1}}],["state",{"2":{"108":1,"497":1}}],["st",{"0":{"369":1,"585":1,"586":1,"661":1,"662":1},"1":{"586":1,"587":1,"588":1,"589":1,"590":1,"591":1,"592":1,"593":1,"662":1,"663":1,"664":1,"665":1,"666":1},"2":{"146":1,"180":1,"548":1,"582":4,"587":1,"588":2,"589":3,"590":2,"591":1,"592":2,"593":2,"663":4,"664":2,"665":10,"670":3,"678":2,"746":2,"747":1,"757":1}}],["str+10",{"2":{"582":1}}],["strval",{"2":{"139":2}}],["struct",{"2":{"138":1}}],["strset",{"2":{"94":1,"99":1}}],["strsim",{"2":{"72":4}}],["strget",{"2":{"94":3,"99":1}}],["str",{"2":{"94":6,"110":2,"582":4}}],["stringify",{"2":{"128":1,"129":1,"130":4,"131":1,"135":2}}],["string",{"2":{"72":2,"94":6,"103":2,"105":1,"109":3,"110":6,"138":3,"141":5}}],["strcompare",{"2":{"72":1}}],["socks5",{"2":{"686":1}}],["socks5简易工具©sealdice",{"2":{"686":1}}],["socks",{"2":{"686":2}}],["socket",{"2":{"531":2}}],["source",{"2":{"186":1,"200":1}}],["something",{"2":{"94":9,"95":6}}],["somefunction",{"2":{"94":1}}],["solve",{"2":{"94":1,"98":2,"114":2,"115":1,"116":2,"117":1,"118":1,"119":2,"121":1,"123":1,"127":5,"129":1,"130":1,"133":1,"134":1,"139":1}}],["san70",{"2":{"733":1}}],["san值",{"2":{"582":1}}],["san",{"0":{"751":1},"2":{"582":1,"584":1,"735":2}}],["satori",{"0":{"527":1},"2":{"515":3,"525":1,"527":1}}],["save",{"2":{"464":1,"641":1,"747":1}}],["salt",{"2":{"187":1,"201":1}}],["sa",{"2":{"48":3,"90":1}}],["switch",{"2":{"26":1,"115":1,"116":1,"117":1,"121":1,"127":5,"129":1,"130":1,"134":1,"139":2}}],["search",{"2":{"652":2,"653":1,"765":1}}],["sealport",{"0":{"486":1},"2":{"481":2}}],["sealversion",{"2":{"159":2,"167":3}}],["sealdce",{"2":{"150":1,"151":1}}],["sealdice将自动随系统启动",{"2":{"541":1}}],["sealdiceplugin",{"2":{"481":4,"482":1}}],["sealdice",{"0":{"187":1,"201":1,"430":1,"481":1,"483":1,"485":1,"488":1},"1":{"484":1,"485":1,"486":1,"487":1,"488":1},"2":{"11":1,"15":1,"55":1,"66":1,"68":1,"94":1,"105":1,"117":1,"119":1,"129":1,"130":1,"133":1,"134":1,"136":1,"158":1,"159":1,"166":2,"168":1,"172":2,"186":1,"187":1,"189":2,"190":1,"191":1,"192":5,"193":3,"196":2,"200":1,"201":1,"202":2,"203":1,"212":2,"214":1,"224":2,"225":1,"232":1,"233":3,"234":2,"274":1,"375":3,"442":2,"457":2,"477":1,"478":1,"479":2,"481":2,"491":8,"539":11,"541":9,"577":2,"624":2,"695":1,"717":1,"718":1}}],["seal",{"2":{"94":56,"95":3,"96":2,"97":4,"98":4,"99":4,"102":2,"103":4,"104":3,"105":1,"112":3,"113":1,"114":6,"115":6,"116":7,"117":20,"118":1,"119":12,"121":7,"123":2,"124":2,"125":1,"126":1,"127":35,"129":9,"130":20,"131":1,"133":11,"134":8,"135":5,"136":3,"137":3,"138":6,"139":29,"142":2,"152":1,"155":3,"158":1,"161":3,"491":12,"492":2}}],["service",{"2":{"541":2}}],["services",{"2":{"491":2}}],["serve",{"2":{"431":1}}],["server",{"2":{"272":1,"464":1,"481":1,"514":2,"580":1,"686":3}}],["select",{"2":{"479":1}}],["session",{"2":{"238":1}}],["semver",{"2":{"165":2}}],["semver版本约束",{"2":{"165":1}}],["semantic",{"2":{"159":1}}],["setting",{"2":{"480":1}}],["settimeout",{"2":{"158":1}}],["setinterval",{"2":{"158":1}}],["set",{"0":{"626":1,"648":1},"2":{"146":2,"172":1,"626":5,"648":9,"660":2,"672":2,"707":1,"711":3,"746":3}}],["setcoc",{"0":{"617":1},"1":{"618":1,"619":1,"620":1},"2":{"136":2,"572":1,"594":1,"618":1,"619":1,"620":1,"739":1,"746":2}}],["setenable",{"2":{"108":1}}],["setplayergroupcard",{"2":{"94":1,"103":1}}],["setvarstr",{"2":{"94":1}}],["setvarint",{"2":{"94":1}}],["senddailynews",{"2":{"142":1}}],["sender",{"2":{"94":1,"104":1,"109":3,"135":1}}],["send",{"0":{"706":1},"2":{"24":1,"76":1,"363":1,"562":1,"591":1,"593":2,"595":2,"624":3,"625":3,"628":5,"631":2,"632":2,"635":1,"637":3,"639":1,"640":3,"652":3,"658":1,"659":5,"660":2,"665":3,"667":2,"669":1,"670":7,"672":4,"676":1,"678":1,"704":1,"706":4,"711":1,"746":1}}],["通用特化支持",{"0":{"554":1},"1":{"555":1}}],["通用设置",{"0":{"452":1},"1":{"453":1,"454":1,"455":1}}],["通知权限",{"0":{"454":1}}],["通知",{"2":{"355":1,"504":1,"509":1}}],["通常流程",{"0":{"747":1},"1":{"748":1,"749":1,"750":1,"751":1,"752":1,"753":1,"754":1,"755":1,"756":1,"757":1,"758":1,"759":1,"760":1}}],["通常的疯狂发作应该使用",{"2":{"612":1}}],["通常由",{"2":{"541":1}}],["通常海豹核心也会一同关闭",{"2":{"541":1}}],["通常在",{"2":{"457":1}}],["通常而言",{"2":{"447":1}}],["通常为几分钟",{"2":{"395":1}}],["通常指用户与程序发生交互的位置",{"2":{"307":1}}],["通常指通过不生成图形化用户界面方式运行",{"2":{"306":1}}],["通常以特定的数据结构存储在内存之中",{"2":{"301":1}}],["通常有其约定",{"2":{"278":1}}],["通常使用全文搜索",{"2":{"722":1}}],["通常使用",{"2":{"278":1}}],["通常还包含",{"2":{"274":1}}],["通常用于获取",{"2":{"256":1}}],["通常",{"2":{"252":1,"290":1,"539":1}}],["通常简称",{"0":{"250":1}}],["通常默认为",{"2":{"238":2}}],["通常这类文章是搬运而来",{"2":{"207":1}}],["通常包含了此开源项目的用户所遇到的问题",{"2":{"206":1}}],["通常包含使用此项目的用户高频提出的问题",{"2":{"206":1}}],["通常来说这是其他人分享给你的",{"2":{"415":1}}],["通常来说",{"2":{"139":1,"207":1,"224":1,"225":1,"278":1,"455":1,"460":1,"695":1}}],["通常情况下无需修改",{"2":{"258":1}}],["通常情况下",{"2":{"137":1,"239":1,"252":1}}],["通常情况下你不需要考虑黑名单用户的情况",{"2":{"120":1}}],["通常会对参数值进行判断",{"2":{"115":1}}],["通常群文件的",{"2":{"93":1}}],["通常是不固定的",{"2":{"501":1}}],["通常是使用",{"2":{"457":1}}],["通常是在执行海豹核心的终端使用",{"2":{"457":1}}],["通常是",{"2":{"10":1,"720":1}}],["通过这种方式",{"2":{"748":1}}],["通过这样的思考过程",{"2":{"189":1,"217":1}}],["通过指令发送",{"2":{"706":1}}],["通过额外骰一定数量的十位骰",{"2":{"631":1}}],["通过将",{"2":{"498":1}}],["通过此方式部署的海豹与",{"2":{"490":1}}],["通过数据库修复指令",{"0":{"460":1}}],["通过回滚备份",{"0":{"459":1}}],["通过筛选可以快速查找到相应的词条内容",{"2":{"399":1}}],["通过明确地告诉大家问题已经解决",{"2":{"229":1}}],["通过你提供的这些信息",{"2":{"226":1}}],["通过搜素自定义回复",{"2":{"209":1}}],["通过投掷",{"2":{"144":1}}],["通过骰子出招和玩家出招两个变量判断",{"2":{"84":1}}],["通过配置牌堆文件的",{"2":{"57":1}}],["通过",{"0":{"490":1},"1":{"491":1,"492":1,"493":1,"494":1,"495":1},"2":{"51":1,"120":1,"165":1,"199":1,"256":1,"334":1,"356":1,"383":1,"394":1,"493":2,"513":1,"606":1}}],["通过对结果变量的判断来实现展示不同文案",{"2":{"24":1}}],["通过并合并后",{"2":{"13":1}}],["功能相同",{"2":{"601":1}}],["功能相关的文案",{"2":{"362":1}}],["功能审核未通过",{"0":{"509":1}}],["功能配置与提审",{"2":{"509":1}}],["功能配置",{"2":{"503":1,"509":1}}],["功能导入它们",{"2":{"416":1}}],["功能需使用单独生成的授权码",{"2":{"337":1}}],["功能丰富的生产力",{"2":{"309":1}}],["功能",{"0":{"700":1},"1":{"701":1,"702":1,"703":1,"704":1,"705":1,"706":1,"707":1,"708":1,"709":1,"710":1,"711":1,"712":1,"713":1,"714":1,"715":1},"2":{"15":1,"341":1,"362":2,"364":1,"412":1,"426":1,"441":1,"513":1,"700":1,"706":1,"707":1,"708":1,"709":1,"740":1,"741":1,"742":1,"743":1}}],["功能分支就可以被删除了",{"2":{"13":1}}],["功能分支",{"2":{"13":1}}],["功能建议",{"0":{"7":1}}],["luck",{"2":{"765":1}}],["lua",{"2":{"170":2}}],["lv3",{"2":{"672":1}}],["ll",{"2":{"497":1}}],["llonebot",{"0":{"519":1,"520":1,"521":1},"1":{"520":1,"521":1},"2":{"341":2,"512":1,"513":4,"519":3,"521":4}}],["lft",{"2":{"497":4}}],["l",{"0":{"284":1},"1":{"285":1,"286":1,"287":1,"288":1}}],["lspatch",{"0":{"261":1,"263":1},"1":{"262":1,"263":1,"264":1,"265":1},"2":{"261":4,"263":4,"264":3}}],["lsposed",{"0":{"257":1},"2":{"254":1,"257":1,"258":1,"263":1}}],["lst",{"2":{"129":3}}],["latest",{"2":{"538":1,"539":2}}],["lagrangedev",{"2":{"491":3}}],["lagrange",{"0":{"285":1,"490":1,"493":1,"494":1,"495":1,"516":1,"517":1,"518":1},"1":{"491":1,"492":1,"493":1,"494":1,"495":1,"517":1,"518":1},"2":{"190":1,"226":1,"274":1,"285":5,"309":1,"341":2,"431":1,"490":3,"491":20,"492":1,"493":6,"494":3,"512":1,"513":4,"516":6,"517":2,"518":1,"539":5}}],["lastcommandtime",{"2":{"107":1}}],["left",{"2":{"570":4}}],["length",{"2":{"130":5,"131":1}}],["level",{"2":{"127":5}}],["let",{"2":{"98":2,"115":1,"116":1,"117":2,"121":1,"127":9,"129":2,"130":7,"133":1,"134":1,"136":2,"137":1,"139":2}}],["li",{"0":{"612":1},"2":{"612":3,"746":1,"752":1}}],["links",{"2":{"532":2}}],["link",{"2":{"497":2}}],["linux",{"0":{"286":1,"576":1},"2":{"140":1,"199":1,"285":2,"286":4,"314":1,"516":2,"538":1,"541":1,"543":1,"684":1}}],["liteloaderqqnt",{"2":{"287":1,"519":1}}],["liteloader",{"0":{"287":1},"2":{"287":2,"295":1,"519":2}}],["list",{"2":{"120":1,"129":1,"622":1,"623":2,"625":1,"641":1,"649":1,"652":1,"709":1,"729":1,"730":1,"746":1}}],["license",{"2":{"48":6,"90":1,"117":1,"119":1,"121":1,"127":1,"129":1,"130":1,"133":1,"134":1,"136":1,"139":1,"158":1,"159":2}}],["lot",{"2":{"704":1}}],["longrest",{"0":{"676":1},"1":{"677":1},"2":{"676":1,"759":1}}],["localhost",{"2":{"238":1,"242":1,"265":1,"278":1,"482":1,"498":1,"521":1,"539":3}}],["lodash",{"2":{"154":1}}],["load",{"2":{"641":1}}],["loading",{"2":{"209":1}}],["loadplayergroupvars",{"2":{"105":1}}],["loadplayerglobalvars",{"2":{"105":1}}],["loadgroupvars",{"2":{"105":1}}],["logs",{"2":{"431":1,"457":2,"493":1}}],["logon",{"2":{"106":1}}],["logcurname",{"2":{"106":1}}],["logic",{"2":{"72":1}}],["log",{"0":{"288":1,"698":1,"726":1,"730":1},"1":{"727":1,"728":1,"729":1,"730":1},"2":{"1":1,"121":1,"135":2,"158":1,"299":2,"345":1,"430":2,"431":4,"442":1,"457":1,"499":1,"531":1,"568":2,"569":1,"577":1,"640":1,"717":1,"727":7,"728":2,"729":6,"730":3,"746":4}}],["lt",{"2":{"13":1,"48":1,"57":5,"66":1,"68":2,"70":1,"73":1,"78":4,"89":1,"90":1,"114":1,"120":1,"172":4,"224":1,"225":2,"262":1,"585":2,"587":1,"588":1,"589":7,"590":2,"591":2,"595":1,"596":2,"597":2,"598":2,"604":1,"605":2,"606":3,"608":2,"609":2,"610":3,"614":4,"615":7,"616":1,"620":1,"622":3,"623":5,"625":2,"626":1,"627":2,"635":7,"636":4,"640":1,"641":10,"642":5,"643":1,"647":1,"648":3,"652":3,"653":2,"658":2,"659":6,"660":4,"663":3,"664":2,"665":6,"667":4,"670":6,"674":2,"678":1,"684":1,"694":1,"703":3,"704":2,"705":1,"706":3,"707":1,"709":11,"711":2,"712":1,"713":3,"714":1,"715":1,"722":3,"727":3,"728":2,"729":6,"730":3,"734":1,"735":1,"746":35,"748":2,"750":1,"751":2,"753":1,"755":1,"756":1,"757":1,"762":1,"763":2,"764":1,"765":8}}],["主页",{"2":{"450":1,"543":1}}],["主动发送一条提醒信息",{"2":{"345":1}}],["主流的语言",{"2":{"205":1}}],["主脑发送消息并接收回复",{"2":{"135":1}}],["主函数",{"2":{"117":1}}],["主要用于自己的电脑",{"2":{"347":1}}],["主要用于服务器",{"2":{"347":1}}],["主要为快捷指令",{"2":{"700":1}}],["主要为",{"2":{"253":1}}],["主要使用",{"2":{"135":1}}],["主要是和当前环境以及用户相关的内容",{"2":{"114":1,"117":1,"135":1}}],["主要查看",{"2":{"94":1}}],["主分支",{"2":{"13":1}}],["主仓库",{"2":{"13":1}}],["进程存活",{"2":{"264":1}}],["进程和",{"2":{"264":1}}],["进程",{"2":{"264":1}}],["进程不能轻易关闭",{"2":{"252":1}}],["进阶",{"2":{"359":1,"376":1,"381":1,"390":1,"400":1,"408":1,"410":1,"425":1}}],["进阶介绍",{"0":{"91":1},"1":{"92":1,"93":1},"2":{"21":1,"650":1}}],["进阶自定义",{"0":{"21":1}}],["进行优势或劣势检定",{"2":{"667":1}}],["进行豁免检定",{"2":{"667":1}}],["进行双十字骰点需要设定以下参数",{"2":{"636":1}}],["进行",{"0":{"749":1,"754":1},"1":{"750":1,"751":1,"752":1,"753":1,"755":1,"756":1,"757":1,"758":1,"759":1,"760":1},"2":{"635":1}}],["进行技能成长",{"0":{"614":1}}],["进行一次死亡豁免检定",{"2":{"678":1}}],["进行一次检定",{"2":{"604":1}}],["进行一次骰点",{"2":{"354":2}}],["进行运算",{"2":{"603":1}}],["进行暗中代骰",{"2":{"602":1}}],["进行了3次检定",{"2":{"596":1,"600":1}}],["进行检定",{"0":{"595":1},"2":{"597":1,"598":1,"667":1}}],["进行检查",{"2":{"354":1}}],["进行连接",{"2":{"513":1}}],["进行申请",{"2":{"499":1,"501":1}}],["进行编译",{"2":{"479":1}}],["进行编写",{"2":{"268":1}}],["进行对接",{"2":{"477":1}}],["进行阅读",{"2":{"425":1}}],["进行调用",{"2":{"378":1,"386":1,"424":1,"654":1}}],["进行多轮骰点时",{"2":{"373":1}}],["进行操作",{"2":{"340":1}}],["进行手动批量删除",{"2":{"321":1}}],["进行登录",{"2":{"240":1}}],["进行搜索",{"2":{"207":1}}],["进行部署",{"2":{"190":1}}],["进行开发",{"2":{"149":1}}],["进行网络请求",{"2":{"135":1}}],["进行回复",{"2":{"116":1,"117":1,"373":1}}],["进行赋值导致的变量显示",{"2":{"84":1}}],["进行判断",{"2":{"78":1}}],["进行测试",{"2":{"76":1}}],["进行抽取",{"2":{"54":1,"57":3}}],["进行使用即代表同意此声明",{"2":{"15":1}}],["进行同步",{"2":{"14":1}}],["进行在线编辑",{"2":{"12":1}}],["进入新的目录",{"2":{"693":1}}],["进入后点击",{"2":{"686":1}}],["进入下一轮",{"2":{"635":1,"636":1}}],["进入海豹",{"2":{"514":1,"518":1,"524":1}}],["进入机器人管理后台",{"2":{"501":1}}],["进入应用管理后",{"2":{"447":1}}],["进入群组",{"2":{"333":1,"690":1}}],["进入批量删除页面",{"2":{"321":1}}],["进入勾选",{"2":{"258":1}}],["进入",{"2":{"13":1,"503":1,"504":1}}],["进度条完成",{"2":{"11":1}}],["f+1=0",{"2":{"634":1}}],["f=",{"2":{"634":1}}],["fvtt",{"0":{"633":1}}],["ff",{"2":{"497":6}}],["fri",{"2":{"480":1}}],["from",{"2":{"460":6,"530":1}}],["fate",{"0":{"634":1}}],["failed",{"2":{"242":1}}],["faq",{"0":{"243":1},"1":{"244":1,"245":1,"246":1,"247":1,"248":1,"249":1,"250":1,"251":1,"252":1},"2":{"206":1}}],["false",{"2":{"33":1,"38":1,"45":1,"94":5,"102":1,"118":1,"121":1,"127":1,"135":1,"156":1,"173":1,"457":1,"488":1}}],["fun",{"2":{"569":3}}],["func",{"2":{"141":6}}],["function",{"2":{"130":7,"131":1,"133":1,"135":1}}],["fumblevalue",{"2":{"136":2}}],["files",{"2":{"532":1}}],["filename",{"2":{"150":1}}],["file=https",{"2":{"135":2}}],["fish",{"2":{"143":1,"146":9,"147":1}}],["find",{"0":{"642":1},"1":{"643":1,"644":1,"645":1,"646":1},"2":{"68":1,"94":1,"112":1,"117":1,"119":1,"121":1,"127":1,"129":1,"130":1,"133":1,"134":1,"137":1,"139":1,"394":1,"553":1,"576":1,"642":3,"643":3,"721":1,"722":8,"746":1}}],["fe50",{"2":{"497":1}}],["fe80",{"2":{"497":1}}],["feb",{"2":{"480":1}}],["fetch",{"2":{"135":5,"158":1}}],["feed",{"2":{"129":1}}],["feedinfo",{"2":{"129":3}}],["feature",{"2":{"12":1,"206":1}}],["floor",{"2":{"130":1}}],["floatval",{"2":{"139":2}}],["float",{"2":{"94":2,"138":1}}],["float64",{"2":{"72":1}}],["flag",{"2":{"110":1,"723":2}}],["flavor",{"2":{"69":1}}],["forever",{"2":{"497":4}}],["foreach",{"2":{"127":1,"130":1}}],["forwardwebsocket",{"2":{"493":1}}],["forward",{"2":{"259":1}}],["for",{"2":{"129":1,"130":1,"142":2,"460":1,"480":1,"532":1}}],["formattmpl",{"0":{"97":1},"2":{"94":1,"97":1}}],["format",{"0":{"97":1},"2":{"94":1,"97":2,"119":2}}],["formfeed",{"2":{"66":1}}],["fork仓库",{"2":{"13":1}}],["fork",{"0":{"11":1,"14":1},"2":{"10":2,"11":7,"13":1,"14":1}}],["f",{"0":{"271":1},"1":{"272":1},"2":{"66":1,"178":1,"576":1,"637":1,"678":1}}],["切勿使用自动更新",{"2":{"543":1}}],["切记不能选中",{"2":{"503":1}}],["切换房规",{"2":{"746":1}}],["切换为对应规则的默认骰面数",{"2":{"648":1}}],["切换到",{"2":{"501":1,"739":1,"746":2}}],["切换到新仓库的分支页面",{"2":{"12":1}}],["切换标签页到",{"2":{"399":1}}],["切换对应协议后重新登录",{"2":{"246":1}}],["切换",{"2":{"136":2}}],["切换命令实现",{"0":{"26":1}}],["切出工作分支",{"0":{"12":1}}],["切出一个新分支作为工作分支",{"2":{"10":1}}],["不带有尖括号的内容是字面量",{"2":{"722":1}}],["不带有角色名参数",{"2":{"641":1}}],["不重复骰点",{"0":{"703":1}}],["不一样",{"2":{"686":1}}],["不幸去世了",{"2":{"678":1}}],["不回复",{"2":{"672":1}}],["不足致死的伤害自动折算为死亡豁免失败",{"2":{"665":1}}],["不用再行关注",{"2":{"665":1}}],["不用再拼接",{"2":{"35":1}}],["不计算临时生命扣血",{"2":{"665":1}}],["不满",{"2":{"619":5}}],["不加参数的使用",{"2":{"618":1}}],["不论成功与否",{"2":{"614":1}}],["不支持运行",{"2":{"539":1}}],["不推荐一般用户使用",{"2":{"538":1}}],["不推荐关闭这些进程",{"2":{"252":1}}],["不允许",{"2":{"450":1}}],["不允许没有值",{"2":{"33":1}}],["不断尝试",{"2":{"446":1}}],["不含文本",{"2":{"420":1}}],["不含有该标记的项目被视为拥有默认权重",{"2":{"53":1}}],["不受",{"2":{"354":2}}],["不受控的云端内容",{"2":{"62":1}}],["不能访问网络",{"2":{"686":1}}],["不能是骰子的",{"2":{"508":1}}],["不能正确加载",{"2":{"295":1}}],["不能做到哪些事",{"2":{"19":1}}],["不适用以下教程",{"2":{"254":1}}],["不适宜的激情",{"2":{"67":1}}],["不只是滑条",{"2":{"242":1}}],["不提供参数则列出所有属性数值",{"2":{"587":1}}],["不提供日志",{"2":{"225":1}}],["不提供此类信息",{"2":{"224":1,"226":1,"227":1}}],["不提倡拍屏而是提倡截图的原因是",{"2":{"187":1,"201":1}}],["不如一开始就将它们包含在你的问题之中",{"2":{"227":1}}],["不如把手放在键盘上",{"2":{"211":1}}],["不如直抵源头",{"2":{"207":1}}],["不如先试试看自己解决",{"2":{"190":1}}],["不至于过于专业",{"2":{"206":1}}],["不妨先看看此项目的帮助文档",{"2":{"206":1}}],["不仅可以帮助你看懂程序日志上的故障原因",{"2":{"205":1}}],["不建议进行剪裁",{"2":{"187":1,"201":1}}],["不建议使用",{"2":{"93":1,"253":1}}],["不是特别在意资源占用的",{"2":{"513":1}}],["不是数值",{"2":{"183":1}}],["不是所有人都能顺利访问",{"2":{"7":1}}],["不错",{"2":{"181":1}}],["不存数据库",{"2":{"172":1}}],["不存在",{"2":{"112":1}}],["不包括",{"2":{"157":1}}],["不摸鱼",{"2":{"145":1,"147":1}}],["不知道为什么",{"2":{"127":1}}],["不过骰子不会做出回复",{"2":{"649":1}}],["不过一般都是提供了一些",{"2":{"409":1}}],["不过先从",{"2":{"161":1}}],["不过",{"2":{"154":1,"272":1}}],["不过不修改也不会影响编译",{"2":{"150":1}}],["不过这种写法的返回值固定为字符串",{"2":{"119":1}}],["不过示例以更简单的自定义回复为例",{"2":{"25":1}}],["不确定",{"2":{"110":1}}],["不懂",{"2":{"110":1}}],["不会造成其他的效果",{"2":{"731":1}}],["不会超过上限",{"2":{"672":1}}],["不会关机的电脑",{"2":{"272":1}}],["不会泄露的信息",{"2":{"238":1}}],["不会被关闭",{"2":{"193":1,"202":1}}],["不会触发任何指令",{"2":{"120":1}}],["不会自动",{"2":{"97":1}}],["不会回复",{"2":{"95":1}}],["不多赘述",{"2":{"94":3,"100":1,"101":1}}],["不让用户注意到突兀的空缺",{"2":{"82":1}}],["不需要使用任何",{"2":{"74":1}}],["不可同时登录",{"2":{"513":1}}],["不可抗力",{"2":{"237":1}}],["不可见的将不展示在",{"2":{"61":1}}],["不可以是",{"2":{"38":1}}],["不同版本规则之间的同一技能更换了用词",{"2":{"582":1}}],["不同于内置客户端",{"2":{"515":1}}],["不同系统可能名称不同",{"2":{"440":1}}],["不同的对接方式",{"2":{"515":1}}],["不同的对接方式适应不同的情况",{"2":{"513":1}}],["不同的",{"2":{"409":1}}],["不同范围的",{"2":{"278":1}}],["不同前缀代表不同的作用域",{"2":{"172":1}}],["不同",{"2":{"59":1}}],["不同方式拷打木落三次",{"2":{"51":3}}],["不展示也不能抽取",{"2":{"57":1}}],["不要同时打开",{"2":{"521":1}}],["不要使用无密码的扫码登录",{"2":{"685":1}}],["不要使用",{"2":{"443":1}}],["不要使用某些前缀",{"2":{"73":1}}],["不要忘记保存",{"2":{"363":1}}],["不要将日志内容复制到聊天窗口中",{"2":{"225":1}}],["不要将代码内容复制到聊天窗口中",{"2":{"224":1}}],["不要随意关闭你不认识的进程",{"2":{"199":1}}],["不要在最后一条语句的后面再使用分号",{"2":{"174":1}}],["不要紧张",{"2":{"137":1}}],["不要漏掉哦",{"2":{"112":1}}],["不要删去第一行的",{"2":{"68":1}}],["不要误写成",{"2":{"61":2}}],["不要回退到上一级目录然后选中",{"2":{"56":1}}],["不要修改主分支",{"2":{"12":1}}],["不放回抽取牌堆",{"2":{"102":1}}],["不放回抽取生效",{"2":{"51":1}}],["不放回抽取",{"2":{"51":2}}],["仓库位于",{"2":{"384":1,"393":1,"403":1,"416":1}}],["仓库中提交一个",{"2":{"192":1,"233":1}}],["仓库可以填仓库链接",{"2":{"159":1}}],["仓库与上游同步",{"0":{"14":1}}],["仓库到本地后进行修改",{"2":{"12":1}}],["仓库的",{"2":{"7":1}}],["censor",{"2":{"431":1,"457":2}}],["ceil",{"2":{"116":1,"117":1,"134":1}}],["cd",{"2":{"262":2}}],["cpu",{"2":{"252":1,"538":1,"539":1,"550":1}}],["csdn",{"2":{"207":1}}],["cross",{"0":{"741":1},"2":{"741":1}}],["crontab",{"2":{"140":1}}],["cron",{"2":{"140":4,"141":5,"142":1,"314":4,"317":1,"320":1,"344":1}}],["criticalsuccessvalue",{"2":{"136":4}}],["createtempctx",{"2":{"94":1,"104":1}}],["create",{"2":{"11":2,"530":2}}],["cn|en|jp",{"2":{"762":1}}],["cnt",{"2":{"135":1}}],["cn",{"2":{"135":1}}],["customize",{"2":{"532":1}}],["curpagerows",{"2":{"130":4}}],["cunban",{"2":{"127":3}}],["cget",{"2":{"127":3}}],["cthulhu",{"2":{"584":1}}],["ctrl+c",{"2":{"457":1}}],["ctrl",{"2":{"252":1}}],["ctrust",{"2":{"127":3}}],["ctx3",{"2":{"98":1}}],["ctx2",{"2":{"98":1}}],["ctxfirst",{"2":{"98":2}}],["ctx",{"0":{"105":1,"106":1,"107":1,"108":1},"2":{"94":29,"95":3,"96":2,"97":4,"98":10,"99":4,"102":2,"103":4,"104":1,"105":7,"114":2,"115":1,"116":2,"117":3,"118":2,"119":9,"120":1,"121":4,"123":3,"124":2,"127":24,"129":3,"130":21,"131":2,"133":4,"134":3,"135":6,"136":1,"137":1,"139":11}}],["cbanlist",{"2":{"127":3}}],["cban",{"2":{"127":3}}],["chronocat",{"0":{"253":1,"525":1,"526":1,"527":1},"1":{"526":1,"527":1},"2":{"253":2,"525":1,"526":1}}],["chmod",{"2":{"239":1,"539":1,"576":2}}],["checkupdate",{"2":{"543":1,"622":1}}],["checkgroupstatus",{"2":{"142":1}}],["check",{"0":{"751":1},"2":{"136":1,"457":2,"458":1}}],["checkvalue",{"2":{"136":5}}],["chexists",{"2":{"105":1}}],["channels",{"2":{"531":1,"532":2}}],["changing",{"2":{"480":1}}],["changingself",{"2":{"130":1}}],["changes",{"2":{"464":1}}],["chat",{"2":{"532":2}}],["chatserver",{"2":{"481":1}}],["chatgpt",{"2":{"223":1}}],["chatwithbot",{"2":{"135":1}}],["chopprefixtoargswith",{"2":{"110":1}}],["chvarsupdatetime",{"2":{"105":1}}],["chvarsnumget",{"2":{"105":1}}],["chvarsget",{"2":{"105":1}}],["chvarsclear",{"2":{"105":1}}],["chunbindcur",{"2":{"105":1}}],["chunbind",{"2":{"105":1}}],["chnew",{"2":{"105":1}}],["chload",{"2":{"105":1}}],["chget",{"2":{"105":1}}],["chbindgetlist",{"2":{"105":1}}],["chbindget",{"2":{"105":1}}],["chbindcurget",{"2":{"105":1}}],["chbindcur",{"2":{"105":1}}],["cmdadb",{"2":{"262":1}}],["cmdargs",{"0":{"110":1},"2":{"94":4,"98":3,"114":2,"115":6,"116":3,"117":4,"119":4,"121":1,"127":10,"129":2,"130":7,"133":2,"134":3,"139":2}}],["cmdgetconfig",{"2":{"139":6}}],["cmdhide",{"2":{"133":5}}],["cmdfeed",{"2":{"129":6}}],["cmdcatch",{"2":{"134":6}}],["cmdcget",{"2":{"127":5}}],["cmdctrust",{"2":{"127":5}}],["cmdcunban",{"2":{"127":5}}],["cmdcbanlist",{"2":{"127":5}}],["cmdcban",{"2":{"127":5}}],["cmdmyperm",{"2":{"121":5}}],["cmdmap",{"2":{"98":2,"117":4,"119":2,"121":1,"127":5,"129":2,"130":2,"133":1,"134":1,"139":1}}],["cmddrawdecks2",{"2":{"119":5}}],["cmddrawdecks",{"2":{"119":5}}],["cmdseal",{"2":{"114":3,"117":8,"130":6}}],["cmdexecutedlasttime",{"2":{"108":1}}],["cmdexecutednum",{"2":{"108":1}}],["cmd",{"2":{"98":3,"259":3,"262":4,"292":1,"458":2,"480":2,"481":1,"482":1,"694":2}}],["clr|clear",{"2":{"664":1}}],["clr",{"2":{"588":1,"626":1,"640":2,"648":2,"660":1,"670":2,"672":1,"711":2}}],["client",{"0":{"469":1},"2":{"469":2,"470":1}}],["cli",{"2":{"302":2}}],["cleanargs",{"2":{"110":2}}],["class",{"2":{"94":1}}],["cloudsearch",{"2":{"135":2}}],["cloud",{"2":{"64":2}}],["clone",{"0":{"149":1},"2":{"12":2,"149":1}}],["cast",{"0":{"674":1},"1":{"675":1},"2":{"674":1,"758":2}}],["case",{"2":{"115":1,"116":1,"117":1,"121":5,"127":5,"129":5,"130":7,"134":1,"139":7}}],["call",{"2":{"584":1}}],["ca2d",{"2":{"497":1}}],["ca",{"2":{"497":1}}],["carrier",{"2":{"497":1}}],["cache",{"2":{"242":1,"430":1}}],["cache=0",{"2":{"135":2}}],["catch",{"2":{"130":1,"134":7}}],["catalogue",{"2":{"68":2}}],["caution",{"2":{"89":1,"90":1}}],["cqhttp",{"0":{"236":1,"250":1},"1":{"237":1,"238":1,"239":1,"240":1,"241":1,"242":1,"243":1,"244":1,"245":1,"246":1,"247":1,"248":1,"249":1,"250":1,"251":1,"252":1},"2":{"236":5,"239":2,"242":5,"512":1,"513":1,"687":1}}],["cq",{"0":{"268":1,"375":1},"2":{"55":1,"70":4,"73":3,"116":1,"135":2,"242":1,"268":1,"361":1}}],["cc",{"2":{"48":3,"73":1,"90":1}}],["c++",{"2":{"37":1,"41":1}}],["c",{"0":{"267":1},"1":{"268":1},"2":{"37":1,"41":1,"47":2,"66":1,"98":3,"115":3,"116":1,"117":1,"178":1,"245":1,"262":2,"420":1,"636":1,"637":1,"649":4}}],["copy",{"2":{"464":1}}],["coloros",{"0":{"451":1}}],["coolq",{"2":{"268":1}}],["core",{"2":{"192":1,"196":2,"224":1,"233":1,"274":1,"285":1,"457":2,"458":1,"516":1,"539":8,"541":3,"694":1,"695":1}}],["coffeescript",{"2":{"170":1}}],["couchdb",{"2":{"158":1}}],["code",{"0":{"244":1,"246":1,"247":1,"248":1},"2":{"149":1,"168":1,"570":2}}],["connect",{"2":{"259":2}}],["continue",{"2":{"142":1}}],["content",{"2":{"24":2,"68":2,"76":2,"363":2,"464":1,"562":2,"591":2,"593":4,"595":4,"624":6,"625":6,"628":10,"631":4,"632":4,"635":2,"637":6,"639":2,"640":6,"652":6,"653":2,"658":2,"659":10,"660":4,"665":6,"667":4,"669":2,"670":14,"672":8,"676":2,"678":2,"704":2,"706":1,"711":2}}],["configs",{"2":{"431":1}}],["config",{"2":{"139":6,"150":1,"152":2,"154":1,"156":1,"643":3}}],["configitem",{"2":{"94":3,"138":5}}],["console",{"2":{"121":1,"135":2,"158":3}}],["const",{"2":{"112":1,"115":1,"116":1,"117":2,"119":5,"121":2,"127":11,"129":7,"130":16,"131":1,"133":2,"134":5,"135":2,"136":3,"137":1,"139":3,"142":4}}],["compose",{"0":{"490":1,"491":1},"1":{"491":1,"492":1,"493":1,"494":1,"495":1},"2":{"489":1,"491":2,"492":2,"493":3,"494":1,"495":2,"498":1}}],["compile",{"2":{"479":1}}],["compare",{"2":{"72":2}}],["com",{"2":{"58":3,"61":1,"64":1,"94":1,"105":1,"117":1,"119":1,"121":1,"127":1,"129":1,"130":1,"133":1,"134":1,"135":1,"136":1,"158":1,"159":1,"338":1,"442":1,"539":2,"577":1,"686":2}}],["commonjs",{"2":{"154":1}}],["command",{"2":{"48":1,"57":1,"110":1}}],["commas",{"2":{"37":1}}],["comments",{"2":{"37":1}}],["comment",{"2":{"37":1,"66":1,"67":1}}],["cocl",{"2":{"733":2}}],["coc|coc7",{"2":{"626":1,"648":1}}],["coc7th",{"2":{"619":1}}],["coc7",{"2":{"172":1,"572":1,"625":2,"681":2}}],["cocruleindex",{"2":{"106":1}}],["coc",{"0":{"101":1,"136":1,"367":1,"556":1,"616":1,"749":1},"1":{"368":1,"369":1,"370":1,"371":1,"557":1,"558":1,"559":1,"750":1,"751":1,"752":1,"753":1},"2":{"37":1,"39":2,"47":1,"94":4,"101":1,"112":1,"136":4,"146":1,"172":1,"178":2,"362":2,"367":1,"393":1,"395":1,"550":1,"569":2,"572":1,"581":1,"582":3,"583":1,"584":2,"616":1,"626":1,"631":1,"642":2,"646":2,"648":1,"717":1,"721":1,"733":1,"735":1,"739":1,"746":4,"747":1,"750":1}}],["操作角色卡",{"0":{"661":1},"1":{"662":1,"663":1,"664":1,"665":1,"666":1}}],["操作人物卡",{"0":{"585":1},"1":{"586":1,"587":1,"588":1,"589":1,"590":1,"591":1,"592":1,"593":1}}],["操作他人属性",{"0":{"555":1}}],["操作时请注意",{"2":{"505":1}}],["操作更新",{"2":{"444":1}}],["操作系统设计的开源操作系统",{"2":{"286":1}}],["操作系统",{"2":{"262":1}}],["操作",{"2":{"12":2,"414":1}}],["此规则无困难成功或极难成功",{"2":{"619":1}}],["此功能同样支持通过附加",{"2":{"602":1}}],["此功能暂无实际作用",{"2":{"339":1}}],["此指令只能由具有",{"2":{"622":1,"623":1}}],["此指令支持附加",{"2":{"611":1}}],["此指令用来操作骰子程序模拟的人物卡",{"2":{"585":1}}],["此指令需要",{"2":{"543":1}}],["此源文件",{"2":{"583":1}}],["此种部署方式可能不能正常发送本地图片",{"2":{"496":1}}],["此文件将工作目录下",{"2":{"491":1}}],["此文件将宿主机",{"2":{"491":1}}],["此文件参考了通过",{"2":{"491":1}}],["此项设定服务器占用的内存",{"2":{"480":1}}],["此为一般情况",{"2":{"478":1}}],["此为教程中便于展示",{"2":{"173":1}}],["此后你可能会在通知栏看到",{"2":{"454":1}}],["此类必须判定的回复词",{"2":{"368":1}}],["此地址一般用于指向本机",{"2":{"278":1}}],["此方式存在一定难度",{"2":{"254":1,"261":1}}],["此方案已经接近不可用",{"2":{"236":1}}],["此协议登录手机可同时在线",{"2":{"241":1}}],["此玩家就无法再摸鱼了",{"2":{"145":1}}],["此定时任务也会出现在",{"2":{"141":1}}],["此时角色",{"2":{"678":1}}],["此时木落的侦查是",{"2":{"639":1}}],["此时木落的侦查技能点是",{"2":{"630":1}}],["此时输入",{"2":{"482":1}}],["此时输入使用",{"2":{"482":1}}],["此时不会发送",{"2":{"334":1}}],["此时默认的",{"2":{"278":1}}],["此时你已经成功开启端口了",{"2":{"259":1}}],["此时你还需要将",{"2":{"258":1}}],["此时你会发现你的超级用户模块已经激活",{"2":{"256":1}}],["此时你会发现你的超级用户权限那里是灰的",{"2":{"256":1}}],["此时你应当自动跳转到了",{"2":{"11":1}}],["此时面具会索取超级用户权限",{"2":{"256":1}}],["此时面具就安装到你的模拟器上了",{"2":{"256":1}}],["此时",{"2":{"166":1,"174":1,"497":1,"498":1,"708":2}}],["此时建议专门开一个一两个字即可触发的自定义回复",{"2":{"70":1}}],["此外还有",{"2":{"250":1}}],["此外有生命值",{"2":{"144":1}}],["此外",{"2":{"57":1,"73":1,"254":1,"505":1,"603":1,"616":1,"700":1}}],["此处只展示相关控制指令",{"2":{"650":1}}],["此处无法一一列出",{"2":{"646":1}}],["此处会弹出一个窗口",{"2":{"531":1}}],["此处不介绍",{"2":{"419":1,"420":1}}],["此处不予重复",{"2":{"264":1}}],["此处内容较为复杂",{"2":{"371":1}}],["此处应使用统一",{"2":{"333":1}}],["此处",{"2":{"199":1,"430":1,"539":1}}],["此处为海豹不再进行维护的文档索引",{"2":{"184":1}}],["此处替换为对应的",{"2":{"64":1}}],["此处填写你的更新链接",{"2":{"58":1,"61":1}}],["此处可以多出一个逗号",{"2":{"39":1,"40":3}}],["此处很可能会出现和上游分支有冲突的问题",{"2":{"14":1}}],["此处以手册仓库",{"2":{"11":1}}],["按需填写名字",{"2":{"531":1}}],["按需阅读文档",{"2":{"22":1,"29":1,"65":1,"69":1,"88":1,"91":1,"157":1,"171":1,"322":1,"351":1,"360":1,"382":1,"391":1,"401":1,"411":1,"584":1,"650":1,"657":1,"700":1,"725":1,"745":1,"761":1}}],["按输入的",{"2":{"320":1}}],["按默认设置",{"2":{"279":1}}],["按照主持人的要求",{"2":{"748":1}}],["按照习惯",{"2":{"720":1}}],["按照下图填写",{"2":{"686":1}}],["按照下面的格式进行填写",{"2":{"260":1}}],["按照自己的配置文件选择",{"2":{"524":1}}],["按照自己的",{"2":{"518":1}}],["按照需求更换数字",{"2":{"480":1}}],["按照要求填写应用名字",{"2":{"469":1,"530":1}}],["按照要求填写应用名字并确认创建",{"2":{"464":1,"473":1}}],["按照",{"2":{"242":1,"493":1}}],["按照提示依次键入",{"2":{"239":1}}],["按照模板填写可方便开发组快速定位问题",{"2":{"7":1}}],["按规则扣除生命值",{"2":{"147":1}}],["按如下模式调整你的自定义文案项",{"2":{"27":1}}],["按钮才可被海豹核心读取",{"2":{"442":1}}],["按钮去掉对应结果",{"2":{"422":1}}],["按钮禁用它来代替删除",{"2":{"414":1}}],["按钮后会取获取最新的插件数据",{"2":{"406":1}}],["按钮后会取获取最新的牌堆",{"2":{"388":1}}],["按钮来删除不想要的插件",{"2":{"405":1}}],["按钮来删掉对应的牌堆",{"2":{"385":1}}],["按钮进行刷新",{"2":{"385":1}}],["按钮进入页面复制粘贴",{"2":{"365":1}}],["按钮以生效变更",{"2":{"356":1}}],["按钮可以导入多个词库",{"2":{"356":1}}],["按钮",{"2":{"11":2,"149":2,"316":1,"325":1,"363":2,"385":1,"396":1,"397":1,"418":1,"442":1,"577":1,"686":1}}],["a10m10k8",{"2":{"711":1}}],["ay",{"2":{"711":2}}],["a属性表达式",{"2":{"606":1}}],["agreement",{"2":{"480":1}}],["arm",{"2":{"538":1,"722":1}}],["arm64",{"0":{"576":1},"2":{"538":5,"539":2}}],["are",{"2":{"480":1}}],["args",{"2":{"110":1,"130":1}}],["a|b",{"2":{"420":1}}],["aa",{"2":{"420":1}}],["aa|bb",{"2":{"420":1}}],["aaa",{"2":{"183":2}}],["ac8",{"2":{"733":1}}],["accept",{"2":{"684":1}}],["accesstoken",{"2":{"493":1}}],["access",{"2":{"239":1}}],["ac",{"2":{"583":3}}],["achieve",{"2":{"262":1}}],["acrobat",{"2":{"158":1}}],["active",{"2":{"106":1}}],["ai",{"2":{"135":3,"207":4}}],["await",{"2":{"135":3,"158":1}}],["alt",{"2":{"252":1}}],["allowdelegate",{"2":{"134":1,"139":1}}],["alias",{"0":{"374":1,"709":1},"2":{"61":1,"709":6}}],["aliases",{"2":{"61":3}}],["aka",{"2":{"480":1}}],["akadd",{"2":{"130":2,"131":1}}],["akget",{"2":{"130":2}}],["aklist",{"2":{"130":3}}],["akdel",{"2":{"130":2}}],["aknew",{"2":{"130":2}}],["ak",{"2":{"130":11}}],["anchor",{"2":{"130":4,"131":1}}],["andriod",{"2":{"261":1}}],["android",{"0":{"695":1},"2":{"93":1,"241":3,"254":2,"256":2,"262":3,"512":1,"538":2}}],["and",{"2":{"37":1}}],["abc",{"2":{"114":2,"117":2}}],["amber",{"2":{"646":1}}],["amd64",{"0":{"576":1},"2":{"538":1,"539":1}}],["amd",{"2":{"538":1}}],["amibementioned",{"2":{"110":1}}],["amp",{"0":{"560":1,"709":2,"754":1},"1":{"561":1,"562":1,"563":1,"564":1,"565":1,"566":1,"567":1,"755":1,"756":1,"757":1,"758":1,"759":1,"760":1},"2":{"68":1,"84":2,"146":1,"393":1,"395":1,"532":2,"550":1,"581":1,"583":1,"591":1,"632":1,"642":1,"646":1,"648":1,"657":5,"709":4,"717":1,"721":1,"746":3,"747":1}}],["adb",{"2":{"259":5,"262":10}}],["adobe",{"2":{"158":1}}],["administrator",{"2":{"466":1}}],["admin",{"0":{"488":1},"2":{"121":1}}],["adaptersetup",{"2":{"108":1}}],["address=127",{"2":{"695":1}}],["address=0",{"2":{"694":1}}],["add",{"2":{"570":1,"622":1,"623":1,"649":2,"688":1}}],["addtrust",{"2":{"94":1,"124":1,"127":1}}],["addban",{"2":{"94":1,"123":1,"127":1}}],["auto",{"2":{"315":3}}],["autoqsignformac",{"2":{"239":1}}],["autosetnametemplate",{"2":{"107":1}}],["auth",{"2":{"187":1,"201":1}}],["authorization",{"2":{"466":1}}],["authors",{"2":{"48":2,"90":2}}],["author",{"2":{"48":6,"66":1,"67":1,"90":2,"117":1,"119":1,"121":1,"127":1,"129":1,"130":1,"133":1,"134":1,"136":1,"139":1,"158":1,"159":2,"165":3,"166":1,"765":1}}],["apk",{"2":{"258":2,"263":1,"436":1,"441":1,"443":1,"444":1,"538":1}}],["appsettings",{"2":{"493":2}}],["app",{"0":{"531":1},"2":{"491":4,"530":2,"531":2,"532":1,"533":1}}],["apple",{"2":{"538":1,"539":3}}],["application",{"2":{"464":1}}],["applyplayergroupcardbytemplate",{"2":{"94":1,"103":1}}],["appname",{"2":{"172":1}}],["apache",{"2":{"117":1,"129":1,"133":1,"134":1,"136":1,"158":2,"159":2}}],["api",{"0":{"63":1,"94":1,"141":1,"155":1},"1":{"95":1,"96":1,"97":1,"98":1,"99":1,"100":1,"101":1,"102":1,"103":1,"104":1,"105":1,"106":1,"107":1,"108":1,"109":1,"110":1},"2":{"62":1,"64":5,"94":8,"100":1,"101":1,"128":1,"132":1,"133":1,"135":8,"137":1,"138":1,"140":1,"141":2,"152":1,"155":2,"157":1,"158":1,"161":2,"167":4,"223":1,"239":1,"254":1,"261":1,"262":2,"285":2,"516":2,"519":1,"530":1}}],["attribute",{"2":{"583":1}}],["attrs",{"2":{"460":3}}],["atinfo",{"2":{"110":1}}],["atob",{"2":{"94":1,"158":1}}],["at",{"0":{"688":1},"2":{"94":2,"110":1,"343":1,"606":1,"624":2,"639":1,"649":1,"660":1}}],["axxxxxxxb",{"0":{"85":1}}],["asm",{"2":{"570":1}}],["async",{"2":{"135":1,"158":1}}],["assets",{"2":{"56":3}}],["ascii",{"2":{"34":2}}],["a",{"2":{"11":1,"34":1,"47":2,"66":3,"68":2,"72":3,"73":2,"85":1,"98":4,"115":4,"116":2,"117":2,"256":1,"460":3,"497":2,"606":2,"622":4,"635":1,"637":1,"649":5,"709":2}}],["为啥好像反应慢一拍",{"0":{"689":1}}],["为啥海豹不理我",{"0":{"681":1}}],["为设置法术位",{"2":{"672":1}}],["为指定属性设定",{"2":{"670":1}}],["为指定单位设定先攻值",{"2":{"660":1}}],["为指定角色设定先攻值",{"2":{"659":1}}],["为指令信息",{"2":{"117":1}}],["为机器人",{"2":{"649":1}}],["为大失败",{"2":{"619":1}}],["为大成功",{"2":{"619":2}}],["为人工审核",{"2":{"504":1}}],["为宿主机在",{"2":{"497":1}}],["为宿主机也分配了子网中的",{"2":{"497":1}}],["为分组添加别名",{"0":{"397":1}}],["为分隔符",{"2":{"374":1}}],["为私聊发指令者的回复语的前缀",{"2":{"373":1}}],["为暗骰时发送到群内的回复语",{"2":{"373":1}}],["为每一单条中间的分隔符",{"2":{"371":1}}],["为海豹核心运行的端口",{"2":{"347":1}}],["为处理某些平台通知频繁引起的问题",{"2":{"335":1}}],["为提供此功能做出贡献",{"2":{"206":1}}],["为修复此",{"2":{"206":1}}],["为你解决问题",{"2":{"189":1,"217":1}}],["为什么要有这个指令",{"2":{"708":1}}],["为什么没有结果",{"2":{"601":1}}],["为什么没有默认的敏感词库",{"2":{"356":1}}],["为什么登录的是我自己的账号",{"2":{"514":1}}],["为什么我的骰娘不发通知了",{"2":{"335":1}}],["为什么我这么做会让骰子出现问题",{"2":{"189":1,"217":1}}],["为什么我在",{"0":{"187":1,"201":1},"2":{"224":1,"225":1}}],["为什么不能拍屏",{"0":{"187":1,"201":1},"2":{"224":1,"225":1}}],["为什么这个页面会诞生",{"2":{"185":1}}],["为整个表达式的值",{"2":{"174":1}}],["为有一定经验的开发者准备的",{"2":{"162":1}}],["为此定时任务提供可读性更高的描述",{"2":{"141":1}}],["为此定时任务提供唯一索引",{"2":{"141":1}}],["为配置项的类型",{"2":{"138":1}}],["为技能点数",{"2":{"136":1}}],["为出目",{"2":{"136":1}}],["为原生态的指令内容",{"2":{"117":1,"135":1}}],["为何要加一个",{"2":{"110":1}}],["为不放回抽取",{"2":{"118":1}}],["为不放回",{"2":{"94":1}}],["为放回抽取",{"2":{"118":1}}],["为放回",{"2":{"94":1}}],["为需要抽取的牌堆名",{"2":{"94":1}}],["为失败",{"2":{"94":1}}],["为成功",{"2":{"94":1}}],["为信息的",{"2":{"94":2}}],["为了避免意外触发",{"2":{"720":1}}],["为了尊重骰主的劳动成果",{"2":{"718":1}}],["为了使用这个指令",{"2":{"641":1}}],["为了使海豹在后台运行",{"2":{"438":1}}],["为了简单",{"2":{"624":1}}],["为了确保你不会获取到过时内容",{"2":{"583":1}}],["为了确保海豹核心不会在使用其他应用程序或手机熄屏时掉线",{"2":{"446":1}}],["为了允许海豹容器正常访问",{"2":{"493":1}}],["为了海豹持续运行",{"2":{"451":1}}],["为了应付流氓软件",{"2":{"446":1}}],["为了方便插件作者编写插件",{"2":{"407":1}}],["为了方便在本组中查找到对应的条目",{"2":{"364":1}}],["为了给有能力的用户提供更大的自定义空间",{"2":{"402":1}}],["为了便于骰子读取增加相应的说明内容",{"2":{"383":1}}],["为了稳定性还是不要更改比较好",{"2":{"346":1}}],["为了更方便地对数据进行存储",{"2":{"301":1}}],["为了帮助回答者分析定位问题",{"2":{"224":1}}],["为了在很多地方支持实现一些逻辑",{"2":{"171":1}}],["为了让插件作者无需反复说明",{"2":{"167":1}}],["为了防止直接使用",{"2":{"84":1}}],["为了实现骰子随机出招的效果",{"2":{"84":1}}],["为一个整体",{"2":{"78":1}}],["为一个单独的",{"2":{"36":1}}],["为",{"2":{"64":2,"94":2,"96":2,"253":1,"307":1,"482":2,"515":3,"598":1,"622":1}}],["为后缀扩展名",{"2":{"48":3}}],["为扩展名的牌堆文件",{"2":{"37":1}}],["为例",{"2":{"11":1,"375":1,"721":1,"722":1}}],["为还不清楚怎么在",{"2":{"9":1}}],["对技能进行一次成长",{"2":{"753":1}}],["对方id",{"2":{"706":1}}],["对生命值的特殊支持",{"2":{"665":1}}],["对先攻点数设置如下",{"2":{"659":6}}],["对指定的技能分别进行一次成长检定",{"2":{"614":1}}],["对指定分组的搜索需要有意义的分组名",{"2":{"396":1}}],["对手技能",{"2":{"746":1}}],["对手的属性表达式",{"2":{"605":1}}],["对手",{"2":{"604":1,"605":1,"746":1}}],["对抗检定也是近战的标准处理方式",{"2":{"603":1}}],["对抗检定",{"0":{"603":1},"1":{"604":1,"605":1,"606":1},"2":{"746":1}}],["对抗暗夜的恐怖",{"2":{"584":1}}],["对抗等",{"2":{"499":1}}],["对功能有新想法",{"2":{"580":1}}],["对基本计算机知识有所了解之后",{"2":{"537":1}}],["对内容中的一些名词完全不理解",{"2":{"537":1}}],["对比弹窗的右上角可以控制显示的样式",{"2":{"388":1,"406":1}}],["对文案的修改建议及时保存",{"2":{"363":1}}],["对速率限制的所有更改",{"2":{"346":1}}],["对接引导",{"0":{"513":1}}],["对接基于",{"2":{"341":1,"513":1}}],["对接海豹",{"0":{"265":1}}],["对回答者表示感谢是最基本的礼貌",{"2":{"229":1}}],["对回答问题者表现出友善和配合的态度",{"0":{"191":1,"232":1}}],["对你来说都不再有任何困难",{"2":{"209":1}}],["对海豹提供的",{"2":{"161":1}}],["对扩展的功能的描述",{"2":{"159":1}}],["对这个指令启用使用代骰功能",{"2":{"134":1}}],["对其赋值",{"2":{"83":1}}],["对于这样的扩展规则",{"2":{"734":1}}],["对于这里",{"2":{"641":1}}],["对于海豹日志染色器",{"2":{"731":1}}],["对于海豹核心的日志界面中",{"0":{"198":1}}],["对于已经解散",{"2":{"730":1}}],["对于绝大多数情况",{"2":{"708":1}}],["对于绝大多数用户来说",{"2":{"538":1}}],["对于大部分有公网",{"2":{"684":1}}],["对于大多数情况",{"2":{"459":1}}],["对于与",{"2":{"649":1}}],["对于内置的帮助文档",{"2":{"642":1}}],["对于内存不足的情况",{"2":{"197":1}}],["对于百分骰的一种补偿骰法",{"2":{"631":1}}],["对于群组",{"2":{"623":1}}],["对于每个群组",{"2":{"727":1}}],["对于每个用户",{"2":{"623":1}}],["对于每一个自定义回复文件",{"2":{"414":1}}],["对于对抗检定",{"2":{"613":1}}],["对于安卓端用户请看安卓豹更新",{"2":{"542":1}}],["对于需要使用更加灵活的方案的用户",{"2":{"513":1}}],["对于有能力的骰主",{"2":{"513":1}}],["对于以下未提及的系统",{"2":{"447":1}}],["对于以下内容",{"2":{"146":1}}],["对于了解正则表达式的用户",{"2":{"420":1}}],["对于资料查询",{"2":{"394":1}}],["对于想要在自定义文案或自定义回复中引用牌堆的骰主",{"2":{"378":1,"386":1,"424":1,"654":1}}],["对于一些邮箱",{"2":{"337":1}}],["对于一个合适的指令",{"2":{"147":1}}],["对于在看这个界面的你来说",{"2":{"252":1}}],["对于如何提",{"2":{"193":1,"202":1}}],["对于屏幕前或许没有编程经验的你",{"2":{"189":1,"217":1}}],["对于",{"0":{"252":1},"2":{"147":1,"347":1,"363":1,"368":1,"371":1,"514":1,"689":1,"732":1}}],["对于正则表达式匹配的完整内容将被存储于变量",{"2":{"73":1}}],["对于正则表达式中的捕获组",{"2":{"73":1}}],["对于提供了云端内容的牌堆",{"2":{"62":1}}],["对词条的简述",{"2":{"68":1}}],["对应的数据目录路径是",{"2":{"539":1}}],["对应的回复词",{"2":{"368":1}}],["对应的群组和邀请人会按",{"2":{"328":1}}],["对应的选项名需要完全一致",{"2":{"61":1}}],["对应原代码仓库也已删除",{"2":{"237":1}}],["对应",{"2":{"110":1}}],["对应想要修改的仓库",{"2":{"10":1,"11":1}}],["对象进行修改后",{"2":{"138":1}}],["对象的类型定义如下",{"2":{"138":1}}],["对象转换为",{"2":{"128":1}}],["对象和数组的最后一个键值对和元素后带有逗号",{"2":{"37":1}}],["对象",{"0":{"40":1,"46":1},"2":{"36":1,"38":1,"94":3,"104":1,"105":3,"109":1,"125":1,"126":1,"128":1,"138":2}}],["对目标仓库进行",{"0":{"11":1}}],["等功能",{"2":{"717":1}}],["等功能无法正常工作",{"2":{"531":1}}],["等额外指令",{"2":{"700":1}}],["等指令是不会回应的",{"2":{"681":1}}],["等指令以及",{"2":{"172":1}}],["等价",{"2":{"594":1}}],["等价于",{"2":{"94":1}}],["等等各种写法",{"2":{"548":1}}],["等方法",{"2":{"514":1}}],["等方案的用户及时更新或关闭位于",{"2":{"513":1}}],["等方案的用户及时更新或关闭此开关",{"2":{"341":1}}],["等命令查看",{"2":{"497":1}}],["等一系列的文件并创建文件夹",{"2":{"480":1}}],["等回复语",{"2":{"371":1}}],["等对应的回复词",{"2":{"370":1}}],["等开头的消息",{"2":{"354":1}}],["等基于",{"2":{"341":1,"512":1,"513":1}}],["等程序时",{"2":{"309":1}}],["等不同的等级",{"2":{"299":1}}],["等插件",{"2":{"295":1}}],["等符号",{"2":{"290":1}}],["等符号会作为海豹中指令的前缀",{"2":{"73":1}}],["等其他程序",{"2":{"250":1}}],["等任何情况",{"2":{"172":1}}],["等与",{"2":{"170":1}}],["等与事件循环相关的函数",{"2":{"158":1}}],["等工具对海豹核心的内存使用量和占用比例进行监测",{"2":{"199":1}}],["等工具编写时",{"2":{"161":1}}],["等工具的使用知识",{"2":{"148":1,"162":1}}],["等异步编程友好的特性",{"2":{"158":1}}],["等项目描述信息",{"2":{"150":1}}],["等效于",{"2":{"117":1}}],["等平台见到",{"2":{"109":1}}],["等于劣势骰",{"2":{"632":1}}],["等于",{"2":{"78":5}}],["等",{"2":{"73":1,"92":1,"93":1,"158":1,"159":1,"171":1,"186":1,"187":1,"196":1,"200":1,"201":1,"440":1,"538":1,"543":1,"569":1,"684":1}}],["等词",{"2":{"68":1}}],["等号和值必须在同一行",{"2":{"33":1}}],["等待状态变为",{"2":{"514":1}}],["等待服务器保存并关闭",{"2":{"480":1}}],["等待一会",{"2":{"263":1}}],["等待安装完成即可",{"2":{"257":1}}],["等待",{"2":{"11":1,"504":1}}],["等待开发组进行",{"2":{"13":1}}],["等待开发组",{"2":{"10":1}}],["等多项功能",{"2":{"1":1}}],["请再额外关闭系统防火墙或设置规则放行",{"2":{"686":2}}],["请转到",{"2":{"650":1}}],["请多次使用成长指令",{"2":{"614":1}}],["请以海豹核心最新帮助信息为准",{"2":{"586":1}}],["请稳妥地停止进程后进行手动替换更新",{"2":{"543":1}}],["请骰主进行更新时确保自己可以接触海豹后台",{"2":{"542":1}}],["请运行",{"2":{"541":1}}],["请下载",{"2":{"539":1}}],["请按照",{"2":{"517":1,"523":1,"526":1}}],["请按需安装对应",{"2":{"478":1}}],["请根据自己的情况选择适合的方式",{"2":{"513":1}}],["请根据实际情况自行调整挂载的目录",{"2":{"491":1}}],["请根据实际情况自行调整端口映射",{"2":{"491":1}}],["请记得在资料一栏中进行开发者资质状态审核",{"2":{"507":1}}],["请填写对应云服务商在控制台提供的",{"2":{"501":1}}],["请首先阅读",{"2":{"490":1}}],["请至少完成",{"2":{"489":1}}],["请把该项修改为",{"2":{"480":1}}],["请把8080替换为你的",{"2":{"242":1}}],["请尝试重新刷新",{"2":{"474":1}}],["请尝试在应用信息界面中开启",{"2":{"448":1}}],["请始终允许海豹核心发送通知",{"2":{"454":1}}],["请始终开启",{"2":{"448":1}}],["请参阅相应的使用文档以了解骰主设定的自定义回复",{"2":{"724":1}}],["请参阅",{"2":{"651":1,"656":1}}],["请参考下面的段落",{"2":{"747":1}}],["请参考以下内容",{"2":{"583":1}}],["请参考以下内容自行配置保活",{"2":{"447":1}}],["请参考",{"2":{"520":1,"716":1}}],["请参见",{"2":{"2":1,"494":1}}],["请查阅你系统的",{"2":{"541":1}}],["请查阅模板项目所使用的构建工具",{"2":{"154":1}}],["请查看安卓端登录",{"2":{"539":1}}],["请查看安卓端文件路径一节",{"2":{"432":1}}],["请查看配置安卓端保活对应系统修改系统设置",{"2":{"438":1}}],["请查看数据库检查和修复一节",{"2":{"433":1}}],["请不要添加",{"2":{"531":1}}],["请不要询问",{"2":{"514":1}}],["请不要将海豹从任务列表中划除",{"2":{"451":1}}],["请不要开启",{"2":{"451":1}}],["请不要在新版本导入旧版本的文案",{"2":{"365":1}}],["请不要被搜索引擎等误导进各种下载站",{"2":{"93":1}}],["请慎重决定是否开启",{"2":{"335":1}}],["请先检查",{"2":{"295":1}}],["请先阅读它",{"2":{"143":1}}],["请先阅读这一节",{"2":{"69":1}}],["请于服务器管理面板放行你要用的端口",{"2":{"686":1}}],["请于",{"2":{"257":1,"258":1}}],["请自行根据场景",{"2":{"605":1}}],["请自行理解",{"2":{"583":1}}],["请自行修改",{"2":{"504":1}}],["请自行考虑是否使用这样的牌堆",{"2":{"389":1}}],["请自行配置保活策略",{"2":{"264":1}}],["请自行斟酌",{"2":{"254":1}}],["请自行了解或放弃使用",{"2":{"162":1}}],["请自行了解或转至",{"2":{"148":1}}],["请耐心等待",{"2":{"254":1,"514":1}}],["请仔细分辨",{"2":{"254":1}}],["请等待一段时间继续",{"2":{"248":1}}],["请重新配置",{"2":{"245":1}}],["请选择对应版本",{"2":{"241":1}}],["请直接依次按下",{"2":{"239":1}}],["请做好预期准备",{"2":{"237":1}}],["请做好截图保护",{"2":{"187":1,"201":1}}],["请确认",{"2":{"539":1}}],["请确认你的硬盘状态是否还好",{"2":{"696":1}}],["请确认你的操作系统并选择对应版本的安装包",{"2":{"538":1}}],["请确认你是否下载的是正确版本的海豹",{"2":{"539":1}}],["请确认是从你的仓库的新分支",{"2":{"13":1}}],["请确保你有良好的计算机使用能力",{"2":{"254":1}}],["请确保你发送的日志是问题发生那一刻前后一段时间内的日志",{"2":{"225":1}}],["请看迁移一节",{"2":{"434":1}}],["请看",{"2":{"195":3,"203":3,"213":3,"225":1,"266":3}}],["请在",{"2":{"453":1}}],["请在列表中选择",{"2":{"447":1}}],["请在模拟器设置中打开",{"2":{"256":1}}],["请在没有必须要展示的情况下隐藏好截图内可能存在的敏感信息",{"2":{"187":1,"201":1}}],["请在阅读过新平台的部署方法后阅读",{"2":{"17":1}}],["请检查海豹是否为最新版本",{"2":{"172":1}}],["请使用该页面展示的路径",{"2":{"428":1}}],["请使用统一",{"2":{"332":1}}],["请使用版本为",{"2":{"265":1}}],["请使用屏幕截图",{"2":{"224":2,"225":2}}],["请使用",{"2":{"172":1,"341":1,"513":1,"538":1,"758":2,"760":1}}],["请小心溢出问题",{"2":{"158":1}}],["请善用沙盒群",{"2":{"504":1}}],["请善用搜索",{"2":{"93":1,"745":1}}],["请善用侧边栏和搜索",{"2":{"22":1,"29":1,"65":1,"69":1,"88":1,"91":1,"157":1,"171":1,"322":1,"351":1,"360":1,"382":1,"391":1,"401":1,"411":1,"584":1,"650":1,"657":1,"700":1,"725":1,"761":1}}],["请加好括号",{"2":{"84":1}}],["请用反引号",{"2":{"77":1}}],["请对它们进行转义",{"2":{"73":1}}],["请注意查阅它的使用说明",{"2":{"720":1}}],["请注意设置中的正向连接和反向连接请",{"2":{"521":1}}],["请注意",{"2":{"314":1,"482":1}}],["请注意在左侧的",{"2":{"69":1}}],["请注意辨析",{"2":{"69":1}}],["请从第二行开始编写词条",{"2":{"68":1}}],["请永远使用",{"2":{"66":1}}],["请务必在",{"2":{"504":1}}],["请务必提供日志截图",{"2":{"225":1}}],["请务必注意这一点",{"2":{"46":1}}],["请务必仔细阅读使用须知",{"2":{"15":1}}],["请你按自己的需求选择其他的验证方式",{"2":{"334":1}}],["请你首先阅读",{"2":{"21":1}}],["请你提出",{"2":{"18":1}}],["请你直接从导航栏查找对应分类",{"2":{"16":1}}],["请阅读这一章下面的各节",{"2":{"19":1}}],["请阅读",{"2":{"17":1,"19":1,"20":1}}],["请立即停用海豹骰",{"2":{"15":1}}],["请求",{"0":{"13":1},"2":{"10":1}}],["在主持人要求时",{"2":{"752":1}}],["在主持人要求你使用骰子时才动作",{"2":{"747":1}}],["在插件仓库中获取相应插件",{"2":{"744":1}}],["在插件的右侧有",{"2":{"405":1}}],["在病毒感染了绝大多数人类使得他们进化为超能力者的时代",{"2":{"741":1}}],["在模板中使用变量以自动更新",{"2":{"735":1}}],["在模块一栏中启用",{"2":{"258":1}}],["在机器人回复你之前",{"2":{"708":1}}],["在频道私聊中的以下问题",{"2":{"708":1}}],["在初次启动海豹时",{"2":{"695":1}}],["在初次启动海豹核心前",{"2":{"453":1}}],["在另一个目录再解压一份海豹核心",{"2":{"693":1}}],["在服务器上登录时说",{"0":{"685":1},"1":{"686":1,"687":1}}],["在服务器日志中出现",{"2":{"481":1}}],["在基本设置中设置",{"2":{"684":1}}],["在牌组较多时造成刷屏",{"2":{"652":1}}],["在牌堆",{"2":{"93":1}}],["在牌堆中",{"2":{"59":1}}],["在其他平台",{"2":{"718":1}}],["在其他平台上",{"2":{"642":1}}],["在其他系统上",{"2":{"457":1}}],["在发送指令的群聊中",{"2":{"638":1}}],["在计算过程中",{"2":{"635":1,"636":1}}],["在计算机领域",{"2":{"306":1}}],["在计算机领域中",{"2":{"299":1}}],["在计算机技术领域内",{"2":{"215":1}}],["在第二轮中",{"2":{"635":1}}],["在骰点中使用属性值",{"0":{"630":1}}],["在以上的例子中",{"2":{"652":1}}],["在以上例子中",{"2":{"57":1}}],["在以下示例中略去",{"2":{"624":1}}],["在进行理智检定时使用指定数量的奖励骰或惩罚骰",{"2":{"610":1}}],["在进行任何迁移时",{"2":{"573":1}}],["在较短的时间内失去过多理智值",{"2":{"607":1}}],["在较新的",{"2":{"292":1}}],["在令人不安或恐怖的情景中",{"2":{"607":1}}],["在后面附加奖励骰与惩罚骰",{"2":{"603":1}}],["在前面附加难度等级",{"2":{"603":1}}],["在克苏鲁的呼唤中",{"2":{"585":1}}],["在被人遗忘的奇异书卷中",{"2":{"584":1}}],["在玩家中广泛使用的简称",{"2":{"582":1}}],["在线试用",{"2":{"578":1}}],["在设置中勾选",{"2":{"577":1}}],["在迁入平台准备一份全新的海豹核心",{"2":{"575":1}}],["在不同平台间迁移时",{"2":{"573":1}}],["在来开团的路上被巨龙叼走了",{"2":{"552":1}}],["在完成上面的步骤后",{"2":{"540":1}}],["在挂载目录时请注意",{"2":{"539":1}}],["在浏览器中输入",{"2":{"539":2}}],["在任意群聊产生的数据修改都会自动同步到其他绑定的群聊",{"2":{"748":1}}],["在任意一个接口成功返回数据后即停止",{"2":{"64":1}}],["在任务栏中找到海豹图标",{"2":{"539":1}}],["在侧边栏点击",{"2":{"531":1,"532":1}}],["在开发者资质状态通过后",{"2":{"507":1}}],["在开源项目网站如",{"2":{"279":1}}],["在没有添加任何其他内容前提下",{"2":{"504":1}}],["在本地文件",{"2":{"583":1}}],["在本地电脑运行海豹",{"2":{"501":1}}],["在本节中的一些部分",{"2":{"314":1}}],["在本节中",{"2":{"143":1}}],["在页面中你可以看到这样的信息",{"2":{"501":1}}],["在页面的上半部分",{"2":{"413":1}}],["在填写",{"2":{"494":1}}],["在日志中即可看到",{"2":{"493":1}}],["在日志中也会显示",{"2":{"158":1}}],["在工作目录下使用以下命令启动容器",{"2":{"492":1}}],["在工作目录下创建",{"2":{"491":1}}],["在容器内以非",{"2":{"491":1}}],["在备份文件中找到最新的一份",{"2":{"459":1}}],["在损坏时如何修复",{"2":{"456":1}}],["在桌面长按海豹核心图标",{"2":{"447":1}}],["在授予海豹核心权限或允许一些行为时",{"2":{"447":1}}],["在安装后或首次启动时",{"2":{"447":1}}],["在安卓端海豹上",{"2":{"442":1}}],["在继续之前",{"2":{"446":1}}],["在引用图片时",{"2":{"428":1}}],["在群聊中默认删除群快捷指令",{"2":{"709":1}}],["在群聊中默认定义群快捷指令",{"2":{"709":1}}],["在群聊模式下",{"2":{"427":1}}],["在群内收集群友给出的安价选项",{"2":{"130":1}}],["在指定牌组抽指定数量的牌",{"2":{"653":1}}],["在指定的群中所有人均视为有",{"2":{"332":1}}],["在指令测试中产生的角色卡等数据都会被保留",{"2":{"427":1}}],["在文本长度匹配中",{"2":{"421":1}}],["在文案列表的上方都有着对应的",{"2":{"364":1}}],["在文案中通常会有结果变量",{"2":{"24":1}}],["在内容中填写要匹配的内容",{"2":{"420":1}}],["在回复项的左上角是该项的匹配模式",{"2":{"419":1}}],["在回复项的左上角可以控制该项的启用与否",{"2":{"418":1}}],["在回复文本中",{"2":{"75":1}}],["在自定义回复页的左下角有一个",{"2":{"418":1}}],["在自定义文案等地方",{"2":{"172":1}}],["在判定一个自定义回复是否能执行时",{"2":{"417":1}}],["在当前文件信息的下面",{"2":{"417":1}}],["在当前文件的右侧有几个按钮",{"2":{"415":1}}],["在编写过程中",{"2":{"414":1}}],["在同意许可协议后",{"2":{"413":1}}],["在同一个if内直接赋值",{"2":{"84":1}}],["在哪编写自定义回复",{"0":{"413":1},"1":{"414":1,"415":1,"416":1,"417":1}}],["在代码框中编写代码",{"2":{"407":1}}],["在对抗检定这一节中",{"2":{"603":1}}],["在对抗检定中应用调整",{"2":{"603":1}}],["在对应的区域填入",{"2":{"533":1}}],["在对插件进行调整后",{"2":{"405":1}}],["在对你的",{"2":{"138":1}}],["在管理界面中有多个标签页",{"2":{"404":1}}],["在管理中",{"2":{"263":1}}],["在重载期间",{"2":{"395":1}}],["在加载某些牌堆之后",{"2":{"387":1}}],["在每个群聊",{"2":{"641":1}}],["在每个图片右侧提供三个按钮",{"2":{"428":1}}],["在每一个你需要指定端口的海豹核心目录下创建一个",{"2":{"694":1}}],["在每一个插件名前都有一个开关",{"2":{"405":1}}],["在每一个分类中",{"2":{"362":1}}],["在每次自动备份完成后将执行一次自动清理",{"2":{"320":1}}],["在旧版本中由于",{"2":{"341":1,"513":1}}],["在更改任何设置后",{"2":{"315":1}}],["在类",{"2":{"302":1}}],["在程序运行发生故障或不符合预期的行为时",{"2":{"299":1}}],["在如今",{"2":{"292":1}}],["在上文的例子中为",{"2":{"494":1}}],["在上面的",{"2":{"386":1}}],["在上面的示例中",{"2":{"165":1}}],["在上图中已经有一个名为",{"2":{"385":1}}],["在上个世代常用",{"2":{"292":1}}],["在配置海豹时",{"2":{"498":1}}],["在配置分离部署的",{"2":{"278":1}}],["在配置后可以对接",{"2":{"251":1}}],["在目前主流使用的",{"2":{"278":1}}],["在分离部署",{"2":{"278":1}}],["在运行新海豹核心时",{"2":{"576":1}}],["在运行程序时",{"2":{"274":1}}],["在运行中输入",{"2":{"262":1}}],["在部分设置的选项中也与个人计算机有所不同",{"2":{"272":1}}],["在部分内容中",{"2":{"69":1}}],["在电脑中使用命令",{"2":{"262":1}}],["在手机海豹上",{"2":{"577":1}}],["在手机上确认登录以后",{"2":{"514":1}}],["在手机设置中",{"2":{"262":1}}],["在手机中",{"2":{"262":1}}],["在打开的黑框框中输入命令",{"2":{"262":1}}],["在打开的终端中输入命令",{"2":{"259":1}}],["在系统开始一栏中可以直接搜索到该功能",{"2":{"262":1}}],["在此目录下",{"2":{"460":1}}],["在此页面上",{"2":{"315":1}}],["在此界面下",{"2":{"291":1}}],["在此处打开命令行",{"2":{"262":1}}],["在此示例中",{"2":{"51":1}}],["在通知上",{"2":{"258":1}}],["在最右侧切换到",{"2":{"257":1}}],["在面具的设置里启动",{"2":{"256":1}}],["在尝试通过模拟器使用",{"2":{"254":1}}],["在尝试使用对应功能进行个性化前",{"2":{"91":1}}],["在新界面中开启",{"2":{"450":1}}],["在新版",{"2":{"254":1,"261":1}}],["在新工作分支上提交修改",{"2":{"10":1}}],["在账号添加中",{"2":{"253":1,"260":1,"527":1}}],["在右上角的内存一栏",{"2":{"252":1}}],["在连接地址中填写",{"2":{"242":1}}],["在终端运行",{"2":{"239":1}}],["在登录账号的时候会看到这样一个界面",{"2":{"238":1}}],["在未来",{"2":{"236":1}}],["在提交审核前",{"2":{"504":1}}],["在提问时",{"2":{"226":1}}],["在提供日志时",{"2":{"225":1}}],["在提供代码相关的信息时",{"2":{"224":1}}],["在一处的修改就会影响其他各处",{"2":{"641":1}}],["在一些系统上可能也称作",{"2":{"447":1}}],["在一些情况下",{"2":{"225":1}}],["在一个文案中使用另一个文案",{"0":{"377":1}}],["在一般情况下",{"2":{"252":1}}],["在一天触发多次时的回复",{"2":{"83":1}}],["在我的",{"2":{"223":1}}],["在用户不使用指令前缀的情况下",{"2":{"223":1}}],["在用户群的群文件中",{"2":{"215":1}}],["在用户群里有人和你说",{"2":{"210":1}}],["在脑海中思考千遍",{"2":{"211":1}}],["在合适的位置停下是最为高效的方案",{"2":{"211":1}}],["在实际学习新知的过程中",{"2":{"211":1}}],["在实现上",{"2":{"112":1}}],["在正则表达式教程中",{"2":{"209":1}}],["在触发条件部分",{"2":{"209":1}}],["在学习新概念的过程中",{"2":{"209":1}}],["在严肃场合",{"2":{"207":1}}],["在速查表中",{"2":{"206":1}}],["在求助搜索引擎或用户群之前",{"2":{"206":1}}],["在磁盘中没有足够的空间",{"2":{"198":1}}],["在弹出的菜单里选择",{"2":{"447":1}}],["在弹出的菜单中找到新建文件夹这个选项",{"2":{"196":1}}],["在弹出的界面上找到你希望压缩包解压到那里的文件夹",{"2":{"196":1}}],["在希望解压的文件夹下单击鼠标右键",{"2":{"196":1}}],["在下载和创建完成后会首次启动会自行关闭",{"2":{"480":1}}],["在下方",{"2":{"471":1}}],["在下一次指令中使用上一次指令设置的",{"2":{"172":1}}],["在下文中有详细讨论",{"2":{"51":1}}],["在命令",{"2":{"152":1}}],["在命令行使用如下命令",{"2":{"151":1}}],["在命令行使用如下命令安装依赖",{"2":{"151":1}}],["在确认你所使用的包管理器后",{"2":{"151":1}}],["在出现的浮窗中选择",{"2":{"149":1}}],["在返回对象的基础上",{"2":{"135":1}}],["在私聊模式下",{"2":{"427":1}}],["在私聊中",{"2":{"120":1}}],["在私聊触发",{"2":{"95":1}}],["在刚刚的位置填入核心代码",{"2":{"116":1}}],["在执行完自己的代码之后",{"2":{"115":1}}],["在创建扩展后",{"2":{"112":1}}],["在很多地方为了实现一些逻辑",{"2":{"92":1}}],["在中间会出现突兀的空行",{"2":{"82":1}}],["在采用",{"2":{"70":1}}],["在使用这些连接方式时",{"2":{"513":1}}],["在使用之前",{"2":{"256":1}}],["在使用该指令的时候",{"2":{"114":1}}],["在使用",{"2":{"69":1,"302":1}}],["在使用不放回抽取的情况下",{"2":{"54":1}}],["在海豹骰中集成了",{"2":{"686":1}}],["在海豹的新添账号选择",{"2":{"521":1}}],["在海豹的相关语境下",{"2":{"307":1}}],["在海豹核心发生",{"2":{"690":1}}],["在海豹核心的指令和后台设置中",{"2":{"623":1}}],["在海豹核心的后台配置中选择",{"2":{"449":1}}],["在海豹核心应用中",{"2":{"455":1}}],["在海豹中记录的日志会自动上传",{"2":{"568":1}}],["在海豹中需要通过此地址指向",{"2":{"278":1}}],["在海豹中",{"2":{"112":1,"265":1}}],["在海豹",{"2":{"62":1,"362":1}}],["在这个世界中",{"2":{"740":1}}],["在这个例子中",{"2":{"116":1}}],["在这个例子里",{"2":{"79":1}}],["在这里你可以添加",{"2":{"332":1}}],["在这里你可以管理你的骰娘的",{"2":{"330":1}}],["在这里的讨论是所有人可见的",{"2":{"279":1}}],["在这一脚本中",{"2":{"81":1}}],["在这一次指令的执行过程中不会再从该牌组中抽到相同结果",{"2":{"51":1}}],["在这种情况下",{"2":{"54":1}}],["在阅读本节时",{"2":{"16":1}}],["在您使用海豹骰点核心前",{"2":{"15":1}}],["在你习惯的手机文件管理软件中找到",{"2":{"577":1}}],["在你想要将不同的回复区分开",{"2":{"415":1}}],["在你开启",{"2":{"333":1}}],["在你解压的",{"2":{"259":1}}],["在你传完文件之后",{"2":{"257":1}}],["在你具备相关背景的情况下",{"2":{"206":1}}],["在你的问题看起来没有获得回答的时候",{"2":{"191":1,"232":1}}],["在你的",{"2":{"13":1}}],["在你",{"2":{"13":1}}],["在",{"2":{"10":1,"46":1,"50":3,"57":10,"64":1,"70":1,"74":1,"105":1,"120":1,"146":3,"149":2,"190":1,"206":1,"207":1,"259":1,"262":2,"264":1,"317":2,"318":1,"319":2,"321":1,"350":1,"357":1,"359":1,"363":1,"366":1,"405":1,"426":1,"448":1,"450":2,"457":1,"465":1,"466":1,"469":1,"470":1,"473":1,"474":1,"479":3,"480":1,"482":1,"504":2,"512":1,"514":1,"515":2,"521":2,"532":2,"535":1,"536":1,"539":2,"582":1,"612":1,"623":1,"638":1,"642":1,"652":2,"684":1,"690":2,"691":1,"693":1,"718":2,"741":1}}],["或不选择此项",{"2":{"722":1}}],["或快速查询",{"2":{"722":1}}],["或群组",{"2":{"718":1}}],["或类似服务器",{"2":{"684":1}}],["或检定失败基础上个位十位相同为大失败",{"2":{"619":1}}],["或检定成功基础上个位十位相同为大成功",{"2":{"619":1}}],["或惩罚骰",{"2":{"598":1}}],["或一个",{"2":{"594":1}}],["或翻译有变化",{"2":{"582":1}}],["或数据库文件变得很大",{"2":{"457":1}}],["或硬盘空间占满",{"2":{"456":1}}],["或发掘一些新的手段",{"2":{"446":1}}],["或想了解更多细节",{"2":{"425":1}}],["或官方群的群文件中找到其他骰主分享的文件",{"2":{"416":1}}],["或官方群的群文件中找到其他骰主分享的",{"2":{"403":1}}],["或官方群的群文件中找到其他骰主分享的帮助文档",{"2":{"393":1}}],["或官方群的群文件中找到其他骰主分享的牌堆",{"2":{"384":1}}],["或之前版本",{"2":{"315":1,"426":1,"427":1}}],["或命令提示符等名词会被混用",{"2":{"283":1,"290":1,"292":1,"313":1}}],["或系统安全策略不允许随意监听此类端口",{"2":{"278":1}}],["或在场的所有调查员同时疯狂发作",{"2":{"612":1}}],["或在",{"2":{"498":1}}],["或在游戏中使用",{"2":{"481":1}}],["或在手机上运行虚拟机的",{"2":{"257":1}}],["或在互联网自行搜索学习",{"2":{"69":1}}],["或少复制了内容",{"2":{"247":1}}],["或未反映在日志中",{"2":{"225":1}}],["或困难",{"0":{"223":1}}],["或许你已注意到",{"2":{"628":1}}],["或许你也可以学习编程",{"2":{"206":1}}],["或许可以增加此功能的优先级",{"2":{"206":1}}],["或插件",{"2":{"199":1}}],["或加载了大量牌堆",{"2":{"199":1}}],["或空字符串被视为",{"2":{"173":1}}],["或是类似小写字母",{"2":{"447":1}}],["或是直接复制到海豹",{"2":{"158":1}}],["或是再新开一行用条件算符或者条件语句实现",{"2":{"84":1}}],["或下载",{"2":{"514":1}}],["或下载模板项目",{"0":{"149":1}}],["或下文中提到的",{"2":{"140":1}}],["或生命值归零",{"2":{"145":1}}],["或更早版本",{"2":{"120":1}}],["或更早版本的海豹核心",{"2":{"37":1}}],["或者没有正确提供指令所需参数时会返回指令的帮助信息",{"2":{"722":1}}],["或者没有可用的备份文件",{"2":{"460":1}}],["或者需要更多帮助",{"2":{"681":1}}],["或者需要编写大型插件",{"2":{"148":1,"162":1}}],["或者相同属性",{"2":{"605":1}}],["或者自己编写规则模板插件",{"2":{"572":1}}],["或者觉得并无必要",{"2":{"572":1}}],["或者使用终端启动海豹核心",{"2":{"541":1}}],["或者更高",{"2":{"538":1}}],["或者在动作前请求主持人的许可",{"2":{"747":1}}],["或者在阅读本节时",{"2":{"537":1}}],["或者在搜索引擎中查找了正则表达式教程",{"2":{"209":1}}],["或者新增了其他功能",{"2":{"504":1}}],["或者保存完复制过去",{"2":{"458":1}}],["或者直接使用",{"2":{"419":1}}],["或者把",{"2":{"259":1}}],["或者其它文本编辑器",{"2":{"259":1}}],["或者一些你认为本该正常运行的功能表现得不正常",{"2":{"223":1}}],["或者不清楚某些术语该怎么说的情况下",{"2":{"214":1}}],["或者你也可以学习编程",{"2":{"206":1}}],["或者你的问题明确了是一个",{"2":{"192":1,"233":1}}],["或者对计算机及服务器知之甚少的用户快速查询特定名词",{"2":{"266":1}}],["或者对计算机及服务器知之甚少的用户快速查询一些常见问题以及对应的答案",{"2":{"195":1}}],["或者对计算机及服务器知之甚少的用户问出更加明晰高效的问题",{"2":{"213":1}}],["或者对计算机及服务器知之甚少的用户在遇到不理解的教程",{"2":{"203":1}}],["或者对计算机或服务器知之甚少的用户进行更易懂的科普",{"2":{"185":1}}],["或者反馈",{"2":{"193":1,"202":1}}],["或者带着这些去问其他有经验者",{"2":{"190":1}}],["或者开始开发时",{"2":{"150":1}}],["或者",{"2":{"35":1,"45":1,"422":1,"447":1,"451":1,"723":1,"752":1}}],["或结束文件",{"2":{"33":1}}],["或",{"2":{"10":1,"33":1,"38":2,"48":1,"61":1,"66":1,"72":1,"94":3,"140":1,"141":1,"147":1,"172":1,"176":1,"206":1,"278":1,"290":1,"309":1,"318":1,"320":1,"334":1,"356":1,"383":1,"420":1,"421":1,"427":1,"440":1,"498":1,"538":1,"542":1,"582":1,"603":1,"702":1,"709":1,"715":1}}],["mz",{"2":{"711":1}}],["my",{"2":{"648":2,"709":2}}],["myperm",{"2":{"121":6}}],["m的骰子总数",{"2":{"635":1}}],["m2",{"2":{"538":1}}],["m1",{"2":{"538":1}}],["mpim",{"2":{"531":1,"532":2}}],["mul",{"2":{"570":1}}],["multicast",{"2":{"497":1}}],["music",{"2":{"135":2}}],["ms",{"2":{"480":1}}],["msg=$",{"2":{"135":1}}],["msg",{"0":{"109":1},"2":{"94":9,"95":3,"97":2,"98":4,"104":4,"109":8,"114":2,"115":1,"116":2,"117":3,"119":5,"121":2,"127":16,"129":3,"130":21,"131":2,"133":6,"134":2,"135":7,"137":2,"139":10}}],["msgcontext",{"2":{"94":1,"118":1,"123":1}}],["mc",{"2":{"479":3}}],["mctx",{"2":{"134":5}}],["mojang",{"2":{"480":1}}],["moe",{"2":{"262":1}}],["modu",{"0":{"765":1},"2":{"569":1,"765":7}}],["mode",{"2":{"26":2,"498":1,"531":2}}],["mod",{"2":{"15":1,"66":1,"67":1,"112":1,"579":1}}],["m",{"0":{"289":1},"1":{"290":1,"291":1,"292":1},"2":{"256":1,"635":2,"636":1,"694":1}}],["mb",{"2":{"190":1,"549":1,"550":3,"644":2}}],["mdn",{"2":{"157":1,"158":1}}],["mm",{"2":{"141":4}}],["miui",{"0":{"449":1}}],["mirai",{"0":{"236":1},"1":{"237":1,"238":1,"239":1,"240":1,"241":1,"242":1,"243":1,"244":1,"245":1,"246":1,"247":1,"248":1,"249":1,"250":1,"251":1,"252":1},"2":{"250":1}}],["minecrafteula",{"2":{"480":1}}],["minecraft",{"0":{"476":1,"477":1,"478":1,"481":1,"482":1,"483":1},"1":{"477":1,"478":1,"479":2,"480":2,"481":2,"482":1,"483":1,"484":2,"485":2,"486":2,"487":2,"488":2},"2":{"476":1,"477":2,"478":3,"479":2,"481":3,"482":5}}],["minify",{"2":{"156":2}}],["min",{"2":{"130":3}}],["mit",{"2":{"4":1,"119":1,"121":1,"127":1,"130":1,"139":1,"159":1}}],["mention",{"2":{"531":1}}],["mem",{"2":{"521":1}}],["members",{"2":{"464":1}}],["memberkick",{"0":{"96":1},"2":{"94":1,"96":1}}],["memberban",{"0":{"96":1},"2":{"94":1,"96":1}}],["methods",{"2":{"466":1}}],["meta",{"2":{"48":2,"58":1,"61":1,"64":1,"90":1}}],["mean",{"2":{"209":1}}],["messagetype",{"2":{"94":1,"104":1,"109":1,"133":1}}],["message",{"2":{"94":2,"104":1,"109":1,"130":1,"135":3,"137":3,"464":1,"531":4}}],["mtu",{"2":{"497":1}}],["mt",{"2":{"93":1,"443":1}}],["mark",{"2":{"570":4}}],["macos",{"2":{"302":1,"538":1,"539":4}}],["mac",{"2":{"285":1,"516":1,"538":1,"539":1}}],["magisk",{"2":{"256":2}}],["max",{"2":{"130":2}}],["math",{"2":{"116":2,"117":2,"130":2,"133":2,"134":2}}],["map",{"2":{"104":1,"118":1}}],["manual",{"2":{"11":1}}],["masterget",{"2":{"730":1}}],["master",{"0":{"330":1,"331":1,"332":1,"622":1,"698":1},"1":{"331":1,"332":1,"333":1,"334":1},"2":{"10":1,"105":1,"120":1,"121":1,"139":1,"330":1,"331":2,"332":2,"340":1,"342":1,"355":1,"543":3,"622":17,"623":1,"647":1,"655":1,"706":2,"730":1}}],["main",{"2":{"10":1,"130":2,"299":1,"431":1}}],["后者将结果私聊发送",{"2":{"704":1}}],["后使用",{"2":{"535":1}}],["后使用即可",{"2":{"161":1}}],["后续列出的是它的同义词",{"2":{"583":1}}],["后续需要修改",{"2":{"491":1}}],["后续所有操作均在",{"2":{"10":1}}],["后在下方",{"2":{"466":1}}],["后台",{"2":{"543":1}}],["后台弹出界面",{"2":{"448":1}}],["后台行为",{"2":{"447":1}}],["后导出的",{"2":{"430":1}}],["后缀",{"2":{"425":1}}],["后缀不会反复出现在批量成长中",{"2":{"371":1}}],["后缀匹配",{"2":{"85":1,"420":1}}],["后",{"2":{"333":1,"394":1,"504":1}}],["后并没有出现如上所示的图标",{"2":{"309":1}}],["后端的监听设置",{"2":{"497":1}}],["后端的配置",{"2":{"496":1}}],["后端无法正确解析海豹数据目录的路径",{"2":{"496":1}}],["后端发送本地图片时",{"2":{"491":1,"496":1}}],["后端及海豹",{"2":{"278":1}}],["后端",{"0":{"496":1},"1":{"497":1,"498":1},"2":{"278":1,"491":1,"496":2,"498":1}}],["后端位于同一主机上",{"2":{"278":1}}],["后端配置相同的端口号",{"2":{"278":1}}],["后端时",{"2":{"278":1}}],["后端会监听你在配置中指定的端口",{"2":{"278":1}}],["后端并采用正向",{"2":{"278":1}}],["后端和部署多只海豹时",{"2":{"278":1}}],["后端是",{"2":{"227":1}}],["后端代码仓库",{"2":{"5":1}}],["后面有一个简化的替代方案",{"2":{"457":1}}],["后面有空格",{"2":{"130":1}}],["后面的行都是该表的内容",{"2":{"36":1}}],["后三项为选填",{"2":{"68":1}}],["后合并你的代码",{"2":{"10":1}}],["的舞台",{"2":{"743":1}}],["的指引下为了守护重要的人或者日常生活而战斗",{"2":{"741":1}}],["的指令进行了修改",{"2":{"504":1}}],["的指令",{"2":{"114":1}}],["的拓展规则",{"2":{"739":1}}],["的圆括号",{"2":{"722":1}}],["的括号",{"2":{"722":1}}],["的尖括号",{"2":{"722":1}}],["的别名",{"2":{"721":1}}],["的留言",{"2":{"706":2}}],["的群组管理中操作退群",{"2":{"683":1}}],["的死亡豁免检定",{"2":{"678":2}}],["的操作也会自动触发死亡豁免",{"2":{"678":1}}],["的操作按钮",{"2":{"13":1}}],["的加值",{"2":{"678":1}}],["的长休",{"2":{"676":2}}],["的2环法术位消耗至3个",{"2":{"674":1}}],["的法术位已经完全恢复",{"2":{"672":1}}],["的法术位状况",{"2":{"672":1}}],["的1环法术位消耗至2个",{"2":{"672":1}}],["的buff数据已经清除",{"2":{"670":1}}],["的如下buff属性被成功删除",{"2":{"670":1}}],["的属性录入完成",{"2":{"669":1}}],["的个人属性为",{"2":{"665":2,"670":3}}],["的dnd5e人物buff属性设置如下",{"2":{"670":3}}],["的dnd5e人物属性设置如下",{"2":{"665":2,"670":3,"678":3}}],["的dnd5e人物作成",{"2":{"658":2}}],["的先攻点为16",{"2":{"660":1}}],["的标记",{"2":{"649":1}}],["的整理者为",{"2":{"646":1}}],["的词条",{"2":{"642":1,"722":1}}],["的昵称已重置为",{"2":{"640":1}}],["的昵称被设定为",{"2":{"640":1}}],["的侦查是",{"2":{"639":1}}],["的侦查技能是80",{"2":{"599":1}}],["的暗骰",{"2":{"638":1}}],["的暗中检定",{"2":{"602":1}}],["的骰点服务",{"2":{"717":1}}],["的骰点用",{"2":{"635":2,"636":1}}],["的骰",{"2":{"635":2}}],["的最底下",{"2":{"625":1}}],["的最新构建二进制发布内容一致",{"2":{"539":2}}],["的部分",{"2":{"624":1}}],["的部署过程",{"2":{"490":1}}],["的七版coc人物作成",{"2":{"616":1}}],["的理智检定",{"2":{"608":1}}],["的理念",{"2":{"549":1}}],["的奖励骰",{"2":{"598":1}}],["的coc7属性录入完成",{"2":{"591":1}}],["的存在",{"2":{"584":1}}],["的任何一个名字使用这一属性",{"2":{"582":1}}],["的任何内容",{"2":{"258":1}}],["的短信",{"2":{"552":1,"702":1}}],["的高效",{"2":{"550":1}}],["的安装包",{"2":{"549":1}}],["的安全策略并不支持图片识别或长按扫描二维码登录",{"2":{"514":1}}],["的服务器都可以",{"2":{"684":1}}],["的服务器都应使用此版本",{"2":{"538":1}}],["的服务",{"2":{"539":1,"541":1}}],["的镜像与名为",{"2":{"539":2}}],["的开关",{"2":{"531":1}}],["的开发者已无力维护项目",{"2":{"236":1}}],["的手册安装官方",{"2":{"522":1}}],["的手机",{"2":{"254":1}}],["的反向连接开关",{"2":{"521":1}}],["的正向连接开关",{"2":{"521":1}}],["的区别有一定了解",{"2":{"515":1}}],["的惩罚",{"2":{"512":1}}],["的会显示发送错误",{"2":{"509":1}}],["的填写请根据下列情况选择",{"2":{"482":1}}],["的海豹有几率在显示连接后仍然离线",{"2":{"474":1}}],["的消息",{"2":{"454":1,"505":1,"535":1}}],["的消息时",{"2":{"420":1}}],["的对话框",{"2":{"454":1}}],["的对象",{"2":{"207":1}}],["的图标",{"2":{"447":1,"686":1}}],["的图片与内容",{"2":{"66":1}}],["的初始自定义回复文件",{"2":{"414":1}}],["的设置",{"2":{"521":1}}],["的设置页",{"2":{"521":1}}],["的设置页面",{"2":{"413":1}}],["的设备与海豹所在的是同一主机",{"2":{"278":1}}],["的资料文档已经在列表中展示出来了",{"2":{"395":1}}],["的资料查询文档",{"2":{"393":1}}],["的两个牌组",{"2":{"386":1}}],["的力量检定结果为",{"2":{"363":2}}],["的相关文案",{"2":{"362":1}}],["的实现变更",{"2":{"339":1}}],["的限制",{"2":{"334":1}}],["的搜素功能中",{"2":{"309":1}}],["的用户发言可以被一键去除",{"2":{"731":1}}],["的用户界面",{"2":{"291":1}}],["的用户应该将实际业务逻辑放置在",{"2":{"141":1}}],["的主要优点包括稳定性",{"2":{"286":1}}],["的主机",{"2":{"239":1}}],["的官方",{"2":{"285":1,"287":1,"294":1}}],["的目录",{"2":{"274":2}}],["的应用",{"2":{"262":1}}],["的一层包装",{"2":{"313":1}}],["的一个整数",{"2":{"278":1}}],["的一串数字",{"2":{"278":1}}],["的一种途径",{"2":{"261":1}}],["的一行中",{"2":{"82":1}}],["的提示",{"2":{"258":1,"389":1}}],["的页面",{"2":{"258":1}}],["的超级用户权限",{"2":{"256":1}}],["的场景下",{"2":{"254":1}}],["的效果也不是很可观",{"2":{"254":1}}],["的使用依赖于",{"2":{"254":1}}],["的软件",{"2":{"254":1}}],["的连接方案暂不支持",{"2":{"348":1}}],["的连接",{"2":{"254":1,"516":1}}],["的可用运行内存不足",{"2":{"252":1}}],["的签名程序偷了出来",{"2":{"251":1}}],["的程序",{"2":{"250":1}}],["的缓存数据库损坏",{"2":{"242":1}}],["的过验证码网站已经停止服务",{"2":{"240":1}}],["的过程中遇到的问题",{"2":{"192":1,"212":1,"234":1}}],["的功能等于不存在",{"2":{"549":1}}],["的功能",{"2":{"223":1,"541":1}}],["的每一个回复都有可能是真材实料的信息",{"2":{"207":1}}],["的问答网站到个人博客",{"2":{"207":1}}],["的字样",{"2":{"206":2}}],["的报错",{"0":{"198":1}}],["的代码仓库中",{"2":{"193":1,"202":1}}],["的代码补全",{"2":{"161":1}}],["的自定义回复的触发词里也有许多你可能关心的问题在内",{"2":{"189":1}}],["的今日人品为",{"2":{"172":1}}],["的插件之一",{"2":{"519":1}}],["的插件加载器",{"2":{"287":1,"519":1}}],["的插件而出错的情况",{"2":{"167":1}}],["的插件才可正常工作",{"2":{"165":1}}],["的插件配置项中将会显示关于此定时任务的描述",{"2":{"141":1}}],["的插件配置项中",{"2":{"141":1}}],["的日志",{"2":{"158":1,"242":2}}],["的调试控制台中运行",{"2":{"158":1}}],["的配置项",{"2":{"154":1}}],["的配置文件",{"2":{"152":1}}],["的积分",{"2":{"145":1}}],["的时间",{"2":{"142":1}}],["的时候",{"2":{"64":1}}],["的数据类型为",{"2":{"141":1}}],["的匹配条件",{"2":{"137":1}}],["的简单扩展",{"2":{"135":1}}],["的掷骰结果为",{"2":{"133":1}}],["的处理",{"2":{"119":1}}],["的话结果是",{"2":{"115":1,"116":1,"117":1}}],["的情况",{"2":{"335":1}}],["的情况赋值",{"2":{"84":1}}],["的情形",{"2":{"115":1}}],["的内容",{"0":{"105":1,"106":1,"107":1,"108":1,"109":1,"110":1},"2":{"583":1}}],["的结果即是",{"2":{"115":1,"116":1,"117":1}}],["的结果",{"2":{"102":2}}],["的结果可能是",{"2":{"52":1}}],["的名称",{"2":{"98":2}}],["的私聊回复",{"2":{"95":1}}],["的回复",{"2":{"95":2}}],["的人品为",{"2":{"97":1}}],["的人踢出那个群",{"2":{"96":1}}],["的人封禁",{"2":{"96":1}}],["的人",{"2":{"94":1,"98":1}}],["的返回值",{"2":{"94":1}}],["的扩展",{"2":{"94":2,"114":1}}],["的",{"2":{"94":2,"104":1,"110":1,"143":1,"170":1,"176":1,"192":1,"233":1,"238":1,"242":3,"254":1,"258":1,"259":1,"279":1,"285":1,"299":1,"315":1,"334":1,"341":1,"371":1,"513":2,"514":1,"516":1,"518":1,"522":1,"524":1,"525":1,"538":1,"539":1,"543":1,"595":3,"596":1,"597":1,"598":1,"622":2,"642":2,"667":3,"669":1,"690":1,"691":1}}],["的第一个人",{"2":{"94":1}}],["的值为",{"2":{"174":1}}],["的值设定为",{"2":{"94":3}}],["的值增加",{"2":{"79":1}}],["的说明",{"2":{"94":1,"238":1}}],["的位置",{"2":{"82":1}}],["的写法外",{"2":{"81":1}}],["的关系",{"2":{"78":1}}],["的语句出现时",{"2":{"78":1}}],["的语法极其灵活",{"2":{"47":1}}],["的语法",{"2":{"31":1}}],["的式子会输出",{"2":{"77":1}}],["的形式表明这里既可以使用技能名又可以使用属性名",{"2":{"585":1}}],["的形式表达",{"2":{"38":1}}],["的形式",{"2":{"82":1}}],["的形式即可",{"2":{"74":1}}],["的捕获组",{"2":{"73":1}}],["的具体内容",{"2":{"66":6}}],["的方括号",{"2":{"722":1}}],["的方案目前比较稳定",{"2":{"512":1}}],["的方案也是可行的",{"2":{"257":1}}],["的方式",{"2":{"313":1}}],["的方式描述",{"2":{"278":1}}],["的方式请求对应接口",{"2":{"63":1}}],["的方法抽取",{"2":{"57":1}}],["的牌端管理界面",{"2":{"62":1}}],["的牌组不展示在该列表中",{"2":{"57":1}}],["的概率先抽出",{"2":{"54":2}}],["的几率出现闪光海豹",{"2":{"53":1}}],["的项目采用了放回抽取",{"2":{"51":1}}],["的放回表示",{"2":{"50":1}}],["的文本长度匹配",{"2":{"421":1}}],["的文档",{"2":{"154":1}}],["的文案来举例",{"2":{"363":1}}],["的文案",{"2":{"114":1,"117":1,"362":1}}],["的文案为例",{"2":{"28":1}}],["的文件进行测试",{"2":{"48":3}}],["的新仓库向主仓库发起",{"2":{"13":1}}],["的有意义的英文",{"2":{"12":1}}],["的准贡献者做个示范",{"2":{"9":1}}],["的源码",{"2":{"5":1}}],["pp8",{"2":{"733":1}}],["ping",{"0":{"708":1},"2":{"700":1,"708":4}}],["picture",{"2":{"257":1}}],["p2",{"2":{"637":2}}],["p4=",{"2":{"631":1}}],["p4",{"2":{"631":1}}],["pl",{"2":{"579":1,"602":1,"741":1}}],["plugins",{"2":{"481":1}}],["play",{"2":{"686":1}}],["playerget",{"2":{"106":1}}],["player",{"0":{"107":1},"2":{"98":2,"105":1,"134":1,"460":1}}],["platform",{"2":{"108":1,"109":1,"259":3,"262":4}}],["places",{"2":{"125":1}}],["place",{"2":{"94":2,"123":2,"124":1}}],["pc",{"0":{"641":1},"2":{"294":1,"341":2,"513":5,"519":1,"537":1,"553":1,"641":9,"746":4,"747":2,"748":2}}],["potatso",{"2":{"686":1}}],["powershell",{"2":{"302":1}}],["ports",{"2":{"491":2,"498":1}}],["port",{"2":{"239":1,"245":1,"347":2,"481":1,"493":1,"494":2,"515":2}}],["postern",{"2":{"686":3}}],["pos",{"2":{"94":3}}],["python",{"2":{"170":1}}],["pnpm",{"2":{"148":1,"162":1}}],["png",{"2":{"55":1,"66":1,"375":3,"493":1}}],["php",{"2":{"135":1}}],["paper",{"2":{"477":1,"479":1,"482":1}}],["pause",{"2":{"458":1}}],["path",{"2":{"262":2}}],["pad",{"2":{"241":2}}],["package",{"2":{"150":1,"152":1}}],["param",{"2":{"135":3}}],["parse",{"2":{"128":1,"129":2,"130":4,"131":1}}],["page=",{"2":{"642":1}}],["page",{"2":{"130":2}}],["permissions",{"2":{"466":1,"532":2}}],["per",{"2":{"130":2}}],["purpur",{"2":{"477":1,"479":1}}],["push",{"2":{"129":1,"130":1,"131":1,"570":5}}],["pull",{"0":{"13":1},"2":{"9":1,"10":1,"13":1,"495":1}}],["p",{"2":{"73":1,"178":1,"498":1,"539":3,"598":1,"637":1,"684":1}}],["proto",{"2":{"497":1}}],["prompt",{"2":{"290":1}}],["promise",{"2":{"135":1,"158":1}}],["preferred",{"2":{"497":2}}],["pre2",{"2":{"478":1}}],["presence",{"2":{"464":1}}],["precompiled",{"2":{"460":1}}],["privileged",{"2":{"262":1,"464":1}}],["privilegelevel",{"2":{"105":1,"120":1,"121":2,"127":5,"139":1}}],["private",{"2":{"109":1,"172":1}}],["pr",{"2":{"5":1,"8":2,"13":3,"14":1,"135":1,"155":1,"206":2}}],["贡献指南",{"0":{"9":1},"1":{"10":1,"11":1,"12":1,"13":1,"14":1},"2":{"9":1}}],["即时疯狂症状",{"2":{"746":1}}],["即是描述场景如暴风骤雨里",{"2":{"657":1}}],["即是一级文件夹",{"2":{"396":1}}],["即大成功",{"2":{"619":1}}],["即显示当前设定的房规",{"2":{"618":1}}],["即以上四种登录方式",{"2":{"513":1}}],["即通过第三方软件接入注册的另一个",{"2":{"512":1}}],["即当回复内容的长度满足什么条件时会触发这条回复项",{"2":{"419":1}}],["即当前的手册",{"2":{"5":1}}],["即设置什么样的内容会触发这条回复项",{"2":{"419":1}}],["即设置拦截什么样的消息",{"2":{"353":1}}],["即快捷指令指向的原指令",{"2":{"374":1}}],["即进行暗骰时发送到私聊的回复词的前缀",{"2":{"368":1}}],["即进行暗骰时发在群里的回复词",{"2":{"368":1}}],["即调用",{"2":{"368":3,"369":1,"370":3,"371":3,"373":3,"374":1}}],["即命中敏感词后要如何处理",{"2":{"353":1}}],["即基于图形渲染和鼠标点击",{"2":{"302":1}}],["即持续提供服务的机器",{"2":{"272":1}}],["即为所需端口",{"2":{"259":1}}],["即为",{"2":{"242":1}}],["即脸皮厚度和摸鱼技能等级",{"2":{"144":1}}],["即权限值",{"2":{"120":1}}],["即使有记录中的日志",{"2":{"727":1}}],["即使是持续运行数月的大型公骰",{"2":{"550":1}}],["即使用开源签名服务",{"2":{"237":1}}],["即使成功连接",{"2":{"236":1}}],["即使你的尝试没有效果",{"2":{"226":1}}],["即使你不能完全理解日志的内容",{"2":{"225":1}}],["即使",{"2":{"78":1}}],["即",{"0":{"252":1},"2":{"64":1,"94":2,"134":1,"176":1,"186":1,"200":1,"256":1,"262":1,"264":1,"307":1,"313":1,"374":1,"640":1,"686":1,"711":1,"727":1}}],["即不展示在列表中",{"2":{"57":1}}],["即无法使用",{"2":{"57":2}}],["即在对象尾部有多余逗号时不再报错",{"2":{"40":1}}],["即在数组尾部有多余逗号时不再报错",{"2":{"39":1}}],["即只有",{"2":{"34":1}}],["即小数",{"2":{"33":1,"38":1,"45":1}}],["即可开启",{"2":{"691":1}}],["即可开始运行服务端",{"2":{"480":1}}],["即可正常访问监听本地端口的",{"2":{"498":1}}],["即可令容器使用宿主机网络",{"2":{"498":1}}],["即可登录到多个",{"2":{"491":1}}],["即可完成连接",{"2":{"482":1}}],["即可进入下一个步骤",{"2":{"480":1}}],["即可进入开发者模式",{"2":{"262":1}}],["即可按设置的方式匹配触发回复项",{"2":{"420":1}}],["即可为该回复项增加一个条件",{"2":{"419":1}}],["即可运行",{"2":{"407":1}}],["即可升级到最新",{"2":{"406":1}}],["即可升级到最新的牌堆",{"2":{"388":1}}],["即可上传到海豹核心",{"2":{"405":1}}],["即可浏览当前已经加载的帮助文档词条",{"2":{"399":1}}],["即可批量删除帮助文档",{"2":{"398":1}}],["即可将文档上传至骰子",{"2":{"396":1}}],["即可弹出帮助文档的上传框",{"2":{"396":1}}],["即可返回对应词条内容",{"2":{"394":1}}],["即可豁免检查",{"2":{"358":1}}],["即可关闭自动退群功能",{"2":{"350":1}}],["即可配置和启动签名服务器",{"2":{"239":1}}],["即可",{"2":{"8":1,"262":1,"491":1,"494":1,"514":1,"686":1}}],["向你所使用的骰子主人请求安装相应插件吧",{"2":{"744":1}}],["向每个指定的邮箱地址发送指定日志的全文",{"2":{"729":1}}],["向骰主发送消息",{"0":{"706":1}}],["向指令触发者",{"2":{"94":1}}],["向收到指令的群中发送",{"2":{"94":1}}],["向对应仓库发起",{"2":{"8":1}}],["向开发组反馈问题",{"2":{"7":1}}],["提醒",{"2":{"355":1}}],["提醒级词表",{"2":{"90":1}}],["提醒级词汇",{"2":{"89":2,"90":2}}],["提问后",{"0":{"228":1},"1":{"229":1,"230":1}}],["提问时",{"0":{"222":1},"1":{"223":1,"224":1,"225":1,"226":1,"227":1}}],["提问前",{"0":{"216":1},"1":{"217":1,"218":1,"219":1,"220":1,"221":1}}],["提问的智慧一书中已经写明该如何提问",{"2":{"213":1}}],["提问的智慧",{"0":{"215":1},"2":{"188":1,"215":1}}],["提问的智慧到底该怎么实现",{"0":{"188":1},"1":{"189":1,"190":1,"191":1,"192":1}}],["提高你的英文水平",{"2":{"205":1}}],["提供属性名则列出特定属性数值",{"2":{"587":1}}],["提供",{"2":{"538":1,"625":1}}],["提供对应",{"2":{"538":1}}],["提供给",{"2":{"538":1}}],["提供给更专业的用户使用",{"2":{"538":1}}],["提供的平台如下",{"2":{"538":1}}],["提供的发布指引",{"2":{"530":1}}],["提供的完整教程",{"2":{"239":1}}],["提供一个权限",{"2":{"487":1}}],["提供两个插件指令",{"2":{"484":1}}],["提供资源管理功能",{"2":{"428":1}}],["提供云端内容",{"2":{"389":1}}],["提供检查骰子收到的消息内容中是否有敏感词汇",{"2":{"352":1}}],["提供其他有价值的背景信息",{"0":{"227":1}}],["提供问题发生时",{"0":{"225":1}}],["提供了友好的",{"2":{"551":1}}],["提供了词库模板的下载",{"2":{"359":1}}],["提供了让我们自己生成密码的功能",{"2":{"251":1}}],["提供了一些常见代码片段",{"2":{"168":1}}],["提供了",{"2":{"141":1}}],["提供正则表达式在线解析和验证",{"2":{"69":1}}],["提向主仓库的主分支的",{"2":{"13":1}}],["提交审核",{"2":{"504":1}}],["提交时间很近的时候",{"2":{"13":1}}],["提交",{"2":{"8":1}}],["提交修改",{"0":{"8":1}}],["提示需要安装其依赖的",{"2":{"164":1}}],["提示",{"2":{"7":1,"12":1,"25":1,"31":1,"47":1,"57":1,"59":1,"68":1,"70":2,"72":1,"73":1,"76":1,"77":1,"78":1,"93":1,"94":1,"112":1,"120":2,"124":1,"138":1,"140":1,"158":1,"161":1,"172":1,"183":1,"238":1,"239":1,"242":1,"254":1,"257":1,"272":1,"356":1,"370":2,"383":1,"384":1,"385":1,"393":1,"395":1,"396":1,"403":1,"416":1,"418":1,"419":1,"420":1,"422":1,"446":1,"447":1,"465":1,"480":1,"482":1,"499":1,"504":1,"515":1,"521":1,"530":1,"535":1,"536":1,"538":1,"548":1,"549":1,"650":1,"708":1,"722":1,"747":1}}],["无限团",{"2":{"572":1}}],["无限制",{"2":{"449":1}}],["无需额外下载即可使用相关内容搜索",{"2":{"393":1}}],["无前缀",{"2":{"371":1}}],["无后缀的回复",{"2":{"371":1}}],["无后缀两条区分",{"2":{"371":1}}],["无后缀",{"2":{"371":4}}],["无头",{"0":{"306":1},"2":{"276":1,"294":1,"306":1}}],["无论之前用过哪一个都可以轻松上手",{"2":{"548":1}}],["无论你只是想增加简单的回复",{"2":{"412":1}}],["无论仅仅是搜索还是尝试了具体的操作",{"2":{"221":1}}],["无论是试图实现一个功能",{"2":{"226":1}}],["无论是有效的还是无效的",{"2":{"221":1}}],["无论是帮助文档",{"2":{"205":1}}],["无论是普通用户还是开发者",{"2":{"5":1}}],["无法再继续记录",{"2":{"729":1}}],["无法再维护此项目",{"2":{"237":1}}],["无法回复hp",{"2":{"676":1}}],["无法回复等情况请先",{"2":{"514":1}}],["无法在线更新等",{"2":{"539":1}}],["无法使用命令行",{"0":{"458":1}}],["无法通过第一眼就看到问题的来龙去脉",{"2":{"190":1}}],["无法访问仓库",{"2":{"384":1,"393":1,"403":1,"416":1}}],["无法访问",{"2":{"7":1}}],["无知亦是幸运",{"2":{"182":1}}],["无知之人",{"2":{"181":1}}],["无关的编程语言",{"2":{"170":1}}],["无实际意义",{"2":{"117":1}}],["无视物质损失",{"2":{"67":1}}],["如图选择匹配类型和动作",{"2":{"686":1}}],["如图所示",{"2":{"209":1}}],["如不指定",{"2":{"641":1}}],["如不正常的登录方式",{"2":{"512":1}}],["如属性比较",{"2":{"605":1}}],["如无法使用内置客户端登录",{"2":{"539":1}}],["如若想修改端口请在",{"2":{"521":1}}],["如跑团",{"2":{"499":1}}],["如需要在低版本运行请自行验证服务端与",{"2":{"478":1}}],["如需删除某些帮助文档",{"2":{"398":1}}],["如正则表达式等",{"2":{"425":1}}],["如牌堆",{"2":{"425":1}}],["如勾选",{"2":{"388":1,"406":1}}],["如收到",{"2":{"354":1}}],["如替换为上面示例中的",{"2":{"259":1}}],["如示例中就是",{"2":{"259":1}}],["如对",{"2":{"256":1}}],["如对手册有什么改进内容可以在该项目提交",{"2":{"5":1}}],["如电脑连手机热点",{"2":{"247":1}}],["如上一条所说",{"2":{"190":1}}],["如上述示例中可以使用",{"2":{"61":1}}],["如前篇",{"2":{"185":1}}],["如下图的",{"2":{"376":1}}],["如下",{"2":{"133":1}}],["如指令文本",{"2":{"114":1,"117":1,"135":1}}],["如当前发指令用户",{"2":{"114":1,"117":1,"135":1}}],["如常用的开启",{"2":{"112":1}}],["如何自定义",{"2":{"650":1}}],["如何判断海豹的数据库是否损坏",{"2":{"456":1}}],["如何更新",{"0":{"444":1}}],["如何更快更便捷地自行排查问题等人文层面的科普",{"2":{"185":1}}],["如何实现多个内容中任意一个均可触发回复项",{"2":{"419":1}}],["如何使用",{"0":{"409":1}}],["如何使用帮助文档",{"0":{"394":1}}],["如何安装和管理",{"0":{"404":1},"1":{"405":1,"406":1,"407":1,"408":1}}],["如何管理帮助文档",{"0":{"395":1},"1":{"396":1,"397":1,"398":1,"399":1}}],["如何编写",{"0":{"410":1}}],["如何编写帮助文档",{"0":{"400":1}}],["如何编写牌堆",{"0":{"390":1}}],["如何编写敏感词库",{"0":{"359":1}}],["如何快速导入",{"2":{"365":1}}],["如何修改文案",{"0":{"362":1},"1":{"363":1,"364":1,"365":1}}],["如何让用户",{"0":{"358":1}}],["如何设置骰子收到了某些词语时自动拦截掉这些用户",{"2":{"352":1}}],["如何设置黑白名单",{"0":{"323":1}}],["如何避免",{"2":{"352":1}}],["如何",{"2":{"254":1}}],["如何启动多个",{"0":{"249":1}}],["如何搭建签名服务",{"0":{"239":1}}],["如何高效学习",{"0":{"203":1},"1":{"204":1,"205":1,"206":1,"207":1,"208":1,"209":1,"210":1,"211":1,"212":1},"2":{"195":1,"213":1,"220":1,"266":1}}],["如何正确提问",{"0":{"213":1},"1":{"214":1,"215":1,"216":1,"217":1,"218":1,"219":1,"220":1,"221":1,"222":1,"223":1,"224":1,"225":1,"226":1,"227":1,"228":1,"229":1,"230":1,"231":1,"232":1,"233":1,"234":1},"2":{"195":1,"203":1,"266":1}}],["如何开始",{"2":{"158":1}}],["如何尽量保持产物的可读性",{"0":{"156":1}}],["如何解决内存不足",{"0":{"197":1}}],["如何解决",{"0":{"155":1}}],["如何建立一个扩展",{"2":{"112":1}}],["如何获取安装包",{"2":{"93":1}}],["如何参与项目",{"0":{"6":1},"1":{"7":1,"8":1}}],["如要每群自行将",{"2":{"83":1}}],["如命名为",{"2":{"73":1}}],["如将工作表命名为",{"2":{"68":1}}],["如此一来当你发送",{"2":{"66":1}}],["如作者",{"2":{"48":1}}],["如换行",{"2":{"35":1}}],["如中文",{"2":{"34":1}}],["如",{"2":{"33":1,"52":1,"61":1,"94":1,"154":1,"157":1,"159":1,"167":1,"186":1,"196":1,"200":1,"245":1,"262":1,"327":1,"362":1,"368":1,"420":1,"421":1,"460":1,"477":1,"582":8,"589":1,"590":1,"603":3,"665":1,"667":1,"717":2,"720":1,"723":1}}],["如修改",{"2":{"24":1}}],["如果还需要使用这张人物卡",{"2":{"747":1}}],["如果还想要取出其中的日志",{"2":{"730":1}}],["如果骰子配置了发件邮箱",{"2":{"729":1}}],["如果平台支持发送文件",{"2":{"729":1}}],["如果已经上传到染色器",{"2":{"729":1}}],["如果已创建就直接使用",{"2":{"117":1,"129":1,"134":1}}],["如果指定日志名",{"2":{"727":1}}],["如果当前日志存在",{"2":{"727":1}}],["如果创建成功",{"2":{"727":1}}],["如果本群的当前日志不为空",{"2":{"727":1,"728":1}}],["如果要了解如何搭建和部署骰子",{"2":{"716":1}}],["如果超过半数的骰子骰出",{"2":{"715":1}}],["如果以后再出类似情况",{"2":{"686":1}}],["如果打不开网页或提示",{"2":{"686":1}}],["如果可能的话你可以从",{"2":{"686":1}}],["如果轮到玩家行动",{"2":{"660":1}}],["如果省略角色名则默认为当前角色",{"2":{"659":1}}],["如果省略数量将生成",{"2":{"658":1}}],["如果省略数量",{"2":{"616":1}}],["如果通过",{"2":{"648":1}}],["如果通过日志",{"2":{"199":1}}],["如果从未设置过",{"2":{"648":1}}],["如果提供了分组名",{"2":{"642":1}}],["如果提示",{"2":{"239":1}}],["如果命中",{"2":{"615":1}}],["如果命令中没写名字",{"2":{"114":1,"117":1}}],["如果命令写",{"2":{"114":1,"117":1,"134":1}}],["如果检定失败时成长为",{"2":{"615":1}}],["如果检定成功时不失去理智",{"2":{"609":1}}],["如果抽到的是恐惧症与躁狂症",{"2":{"612":2}}],["如果抽取",{"2":{"51":2}}],["如果疯狂发作时调查员周围没有其他调查员陪伴",{"2":{"612":1}}],["如果文件权限不正确",{"2":{"576":1}}],["如果目录体积较大",{"2":{"574":1}}],["如果这不是你期望的情况",{"2":{"531":1}}],["如果实在无法解决",{"2":{"504":1}}],["如果实在没有思路该如何说",{"2":{"190":1}}],["如果审核未通过",{"2":{"504":1}}],["如果配置了多个",{"2":{"494":1}}],["如果给予海豹的权限不充分",{"2":{"466":1,"471":1,"475":1}}],["如果仍然提示损坏",{"2":{"459":1}}],["如果对使用命令行感到困难",{"2":{"457":1}}],["如果对其中某种格式的语法有了解",{"2":{"30":1}}],["如果保活仍然失效",{"2":{"448":1}}],["如果条件允许的话",{"2":{"446":1}}],["如果全部满足",{"2":{"417":1}}],["如果显示的",{"2":{"686":1}}],["如果显示",{"2":{"414":1}}],["如果显示未启用的话",{"2":{"352":1}}],["如果左上角的开关未打开",{"2":{"404":1}}],["如果设置中勾选了",{"2":{"356":1}}],["如果设置了多个问题",{"2":{"349":1}}],["如果未发送消息的天数超过了你的设定",{"2":{"350":1}}],["如果留空",{"2":{"349":1}}],["如果忘记密码请看",{"2":{"347":1}}],["如果您感觉难以理解",{"2":{"346":1}}],["如果勾选了",{"2":{"320":2}}],["如果发现自己使用的",{"2":{"295":1}}],["如果希望骰子能对某些关键词做出响应",{"2":{"412":1}}],["如果希望骰子",{"2":{"272":1}}],["如果模拟器中没有安装",{"2":{"258":1}}],["如果没有请参照你使用的模拟器说明",{"2":{"257":1}}],["如果需要对一个技能进行多次成长",{"2":{"614":1}}],["如果需要导入",{"2":{"365":1}}],["如果需要通过关闭进程来腾出运行内存",{"2":{"252":1}}],["如果需要发送截图",{"2":{"187":1,"201":1}}],["如果出现类似场景",{"2":{"708":1}}],["如果出现例如家里突然停电了这样的情况",{"2":{"272":1}}],["如果出现了崩溃或闪退的情况",{"2":{"252":1}}],["如果出现莫名其妙的程序中断",{"0":{"199":1}}],["如果登录成功",{"2":{"242":1}}],["如果问题没能解决",{"0":{"230":1}}],["如果问题解决了",{"0":{"229":1}}],["如果回答者提供的解决方案解决了你的问题",{"2":{"229":1}}],["如果再遇到类似的问题",{"2":{"210":1}}],["如果确实存在占用过高的情况",{"2":{"199":1}}],["如果确定需要通过你的反馈对程序进行改动",{"2":{"192":1,"233":1}}],["如果直接在解压缩应用",{"2":{"196":1}}],["如果真的按照了方法去做",{"2":{"189":1}}],["如果说前篇的科普是知识层面的科普较多",{"2":{"185":1}}],["如果上面的代码输出",{"2":{"183":1}}],["如果灵视达到",{"2":{"180":1,"182":1}}],["如果灵视达到40以上",{"2":{"180":1}}],["如果不指定日志名",{"2":{"727":1}}],["如果不指定",{"2":{"598":1,"762":3}}],["如果不知道这些是干什么的",{"2":{"239":1}}],["如果不知道方法的你通过这些途径知道了如何解决这个问题",{"2":{"189":1}}],["如果不存在则为群昵称或",{"2":{"172":1}}],["如果不打算使用",{"2":{"149":1}}],["如果不对请拷打我",{"2":{"133":1}}],["如果积分相同",{"2":{"145":1}}],["如果生命值归零",{"2":{"145":1}}],["如果累计积分仍大于",{"2":{"145":1}}],["如果选择不摸鱼",{"2":{"145":1}}],["如果选择摸鱼后累计积分超过",{"2":{"145":1}}],["如果选择摸鱼",{"2":{"145":1}}],["如果填写了可选参数",{"2":{"141":1}}],["如果有调整值",{"2":{"604":1}}],["如果有可能",{"2":{"512":1}}],["如果有某个数据库文件后输出了",{"2":{"457":1}}],["如果有的服务器要求特定的鉴权",{"2":{"238":1}}],["如果有需要",{"0":{"192":1,"233":1}}],["如果有则返回一个",{"2":{"126":1}}],["如果有名为",{"2":{"110":1}}],["如果用户没有在黑名单",{"2":{"126":1}}],["如果是来自群组",{"2":{"706":1}}],["如果是",{"2":{"649":1,"681":1,"686":2}}],["如果是群聊发送那么在群里回复",{"2":{"116":1,"117":1}}],["如果是群聊",{"2":{"109":1}}],["如果是对代码仓库进行修改",{"2":{"10":1}}],["如果一部分变量无效",{"2":{"172":1}}],["如果一切正常则为",{"2":{"94":1}}],["如果一行的最后一个非空白字符是未被转义的",{"2":{"35":1}}],["如果后面有需要优先计算与或的东西",{"2":{"84":1}}],["如果想要添加一行",{"2":{"363":1}}],["如果想要在某个变量为空时",{"2":{"82":1}}],["如果想要输出字符串",{"2":{"77":1}}],["如果采用第一种分行的写法",{"2":{"82":1}}],["如果捕获组存在命名",{"2":{"73":1}}],["如果在上次导出后产生了新数据",{"2":{"442":1,"577":1}}],["如果在不知道如何在用户群提问能尽量干脆利落",{"2":{"214":1}}],["如果在手册的一般教程中没能找到答案",{"2":{"206":1}}],["如果在使用中依然存在疑问",{"2":{"91":1}}],["如果在",{"2":{"57":1}}],["如果使用者的名字有ob前缀",{"2":{"731":1}}],["如果使用的是",{"2":{"727":1}}],["如果使用",{"2":{"54":1}}],["如果字符串有很多行",{"2":{"35":1}}],["如果都不了解",{"2":{"30":1}}],["如果你已经有使用其他骰系的经验",{"2":{"716":1}}],["如果你向机器人连续发送",{"2":{"708":1}}],["如果你无法理解发生了什么",{"2":{"681":1}}],["如果你无法访问上述资源",{"2":{"207":1}}],["如果你无法访问",{"2":{"207":1}}],["如果你确实想了解",{"2":{"583":1}}],["如果你喜欢的规则这里没有",{"2":{"572":1}}],["如果你采用了任何自动拉起进程的手段",{"2":{"543":1}}],["如果你海豹所处的位置直接访问",{"2":{"465":1,"536":1}}],["如果你能确定导致你数据库出问题的事件",{"2":{"459":1}}],["如果你能用英文提出问题",{"2":{"207":1}}],["如果你注册了系统服务",{"2":{"457":1}}],["如果你并不确定该怎么做",{"2":{"446":1}}],["如果你有",{"2":{"513":1}}],["如果你有复杂回复编写的需要",{"2":{"425":1}}],["如果你有一台已经",{"2":{"254":1}}],["如果你有一些其它骰系的插件",{"2":{"170":1}}],["如果你觉得某一行不满意",{"2":{"363":1}}],["如果你是骰主",{"2":{"569":1,"681":1,"689":1}}],["如果你是在服务器上部署",{"2":{"521":1}}],["如果你是旧版本",{"2":{"262":1}}],["如果你是从零开始部署",{"2":{"17":1}}],["如果你的问题并没有在这里得到答案",{"2":{"680":1}}],["如果你的问题并不涉及某个的要素",{"2":{"222":1}}],["如果你的指令包含一些需要填写的参数",{"2":{"504":1}}],["如果你的系统没有自动允许海豹核心访问存储空间",{"2":{"453":1}}],["如果你的手机系统支持",{"2":{"440":1}}],["如果你的电脑是",{"2":{"262":1}}],["如果你的",{"2":{"241":1,"622":1}}],["如果你的动手能力足够强或者有足够的电脑知识",{"2":{"238":1}}],["如果你的海豹版本较新",{"2":{"30":1}}],["如果你暂时没有时间完整地阅读上述文章",{"2":{"215":1}}],["如果你只使用广度优先的方式学习知识",{"2":{"210":1}}],["如果你只使用深度优先的方式学习知识",{"2":{"209":1}}],["如果你只需要详细了解某个特定话题",{"2":{"16":1}}],["如果你英文足够熟练",{"2":{"207":1}}],["如果你知道如何访问",{"2":{"207":1}}],["如果你发现指令的回复与预期不符合",{"2":{"721":1}}],["如果你发现角色卡或",{"2":{"457":1}}],["如果你发现你在启动海豹核心",{"2":{"309":1}}],["如果你发现你的问题在",{"2":{"206":2}}],["如果你发现某个页面包含你需要的信息",{"2":{"207":1}}],["如果你发现有一些存在的",{"2":{"155":1}}],["如果你正在解决特定项目中遇到的问题",{"2":{"206":1}}],["如果你仍在上学",{"2":{"205":1}}],["如果你从未接触过计算机以及服务器",{"2":{"204":1}}],["如果你在一个群中通过",{"2":{"727":1}}],["如果你在",{"2":{"309":1}}],["如果你在实现某功能的过程中遇到了麻烦",{"2":{"223":1}}],["如果你在资源有限的小型计算机",{"2":{"199":1}}],["如果你在阅读其它人的",{"2":{"47":1}}],["如果你所说的其他编程语言为",{"2":{"170":1}}],["如果你需要把电脑海豹的数据迁移到手机海豹上",{"2":{"577":1}}],["如果你需要访问宿主机上监听",{"2":{"539":1}}],["如果你需要这样的持久变量",{"2":{"172":1}}],["如果你需要的",{"2":{"161":1}}],["如果你需要最准确的内容",{"2":{"94":1}}],["如果你打算使用",{"2":{"148":1,"162":1}}],["如果你尚未阅读",{"2":{"143":1}}],["如果你想主持游戏",{"2":{"747":1}}],["如果你想在",{"0":{"694":1}}],["如果你想知道如何进行自定义",{"2":{"650":1}}],["如果你想尝试一下这样的机器人",{"2":{"500":1}}],["如果你想回到初始设置",{"2":{"363":1}}],["如果你想认真地学习如何问出一个好问题",{"2":{"215":1}}],["如果你想改进速查表的内容",{"2":{"206":1}}],["如果你想要修改骰子向用户回复的提示词",{"2":{"361":1}}],["如果你想要让海豹实现某些功能",{"2":{"223":1}}],["如果你想要问的问题是新的",{"2":{"192":1,"233":1}}],["如果你想要给这个命令起一个别名",{"2":{"117":1}}],["如果你想使用",{"2":{"25":1,"254":1}}],["如果你不是海豹账号的好友",{"2":{"638":1}}],["如果你不跑这些规则",{"2":{"572":1}}],["如果你不想要任何娱乐功能",{"2":{"569":1}}],["如果你不想发布时在压缩包里添加一个教程",{"2":{"56":1}}],["如果你不慎拒绝通知权限",{"2":{"454":1}}],["如果你不了解这个指令",{"2":{"342":1}}],["如果你不确定某些信息是否应该重新描述",{"2":{"230":1}}],["如果你不清楚什么是日志",{"2":{"225":1}}],["如果你不知道",{"2":{"206":2}}],["如果你不知道选择什么",{"2":{"93":1}}],["如果你不得不在短时间内理解特定的英文内容",{"2":{"205":1}}],["如果你这么做了",{"2":{"73":1}}],["如果你还不熟悉它们",{"2":{"157":1}}],["如果你还没有阅读该章节",{"2":{"69":1}}],["如果你还希望海豹接入更多平台",{"2":{"18":1}}],["如果你对于玩法还不熟悉",{"2":{"747":1}}],["如果你对计算机",{"2":{"537":1}}],["如果你对使用命令行感到困难",{"2":{"458":1}}],["如果你对上面的内容感到陌生",{"2":{"162":1}}],["如果你对这些内容感到陌生",{"2":{"148":1}}],["如果你对正则表达式还很陌生",{"2":{"69":1}}],["如果你对",{"2":{"65":1,"90":1,"140":1,"504":1}}],["如果你希望保留旧的备份文件",{"2":{"575":1}}],["如果你希望保证发言顺序",{"2":{"423":1}}],["如果你希望在",{"2":{"549":1}}],["如果你希望直接尝试以上插件的效果",{"2":{"147":1}}],["如果你希望某些牌组彻底隐藏",{"2":{"57":1}}],["如果你希望自己动手",{"2":{"21":1}}],["如果你使用公骰",{"2":{"720":1,"724":1}}],["如果你使用远程",{"2":{"541":1}}],["如果你使用企业账号进行了注册",{"2":{"507":1}}],["如果你使用的是家用网络",{"2":{"501":1}}],["如果你使用的是",{"2":{"315":1,"426":1,"427":1,"684":1}}],["如果你使用",{"2":{"37":1,"684":1,"686":1}}],["如果你出现了奇怪的问题",{"2":{"31":1}}],["如果你之前部署过海豹核心",{"2":{"17":1}}],["如果你曾经修改了主分支",{"2":{"14":1}}],["如果你熟悉",{"2":{"12":1,"460":1}}],["如果之后还要提交新的",{"2":{"14":1}}],["如果",{"2":{"12":1,"78":3,"471":1,"649":1,"686":1}}],["如果此处已经有",{"2":{"11":1}}],["如有需求",{"2":{"530":1}}],["如有需要",{"2":{"491":2}}],["如有其它需求请阅读",{"2":{"258":1}}],["如有",{"2":{"7":1}}],["开黑啦",{"2":{"472":1,"474":1}}],["开放平台",{"2":{"499":1,"501":1}}],["开放平台点击",{"2":{"469":1}}],["开放平台注册账号并申请个人开发者",{"2":{"468":1}}],["开放模拟器端口供海豹对接",{"0":{"259":1}}],["开关自定义回复",{"2":{"746":1}}],["开关骰子",{"2":{"746":1}}],["开关",{"2":{"450":1,"513":1}}],["开启对应扩展",{"2":{"681":1}}],["开启性能模式",{"2":{"450":1}}],["开启回复调试日志",{"2":{"414":1}}],["开启后将回应频道消息",{"2":{"348":1}}],["开启后会对使用指令过快的用户和群组进行警告",{"2":{"346":1}}],["开启后",{"2":{"345":1,"732":1}}],["开启后在群聊中只有",{"2":{"343":1}}],["开启后只有",{"2":{"342":1}}],["开启此功能后只会通过邮件进行通知",{"2":{"335":1}}],["开启",{"2":{"317":1,"625":1,"656":1,"707":1}}],["开启云内容",{"2":{"64":1}}],["开始使用",{"0":{"579":1}}],["开始提供了内置客户端的连接方式",{"2":{"514":1}}],["开始编辑",{"2":{"503":1}}],["开始菜单",{"2":{"309":1}}],["开始适配了与",{"2":{"525":1}}],["开始适配了",{"2":{"254":1,"516":1}}],["开始也是没有任何问题的",{"2":{"161":1}}],["开始游戏时",{"2":{"145":1}}],["开始计算",{"2":{"98":1}}],["开始计数",{"2":{"94":1}}],["开始到随后出现的第一个",{"2":{"43":1}}],["开始支持对接",{"2":{"499":1,"529":1}}],["开始支持对接钉钉",{"2":{"462":1}}],["开始支持",{"2":{"41":1}}],["开始",{"2":{"37":1,"164":1,"167":1,"513":1,"589":1}}],["开头的命令",{"2":{"409":1}}],["开头的退群指令是什么",{"2":{"349":1}}],["开头的临时变量的存活周期仅为单次指令执行",{"2":{"172":1}}],["开头的东西",{"2":{"172":1}}],["开头的项不是必须的",{"2":{"48":1}}],["开头的行表示构成一个数组",{"2":{"47":1}}],["开头",{"2":{"32":1,"42":1,"44":1,"57":3,"114":1}}],["开列如下",{"2":{"18":1}}],["开发设置",{"2":{"501":2}}],["开发用于连接海豹的应用前",{"2":{"468":1}}],["开发者平台",{"2":{"464":1,"473":1}}],["开发者选项",{"2":{"262":1}}],["开发者们平时也通过",{"2":{"193":1,"202":1}}],["开发组于",{"2":{"254":1}}],["开发组的开发者们会通过讨论进行回复",{"2":{"192":1,"233":1}}],["开发组尽快满足这个需求或修复这个",{"2":{"192":1,"233":1}}],["开发",{"2":{"5":1}}],["开源程序",{"2":{"186":1,"200":1}}],["开源程序相关",{"0":{"185":1},"1":{"186":1,"187":1,"188":1,"189":1,"190":1,"191":1,"192":1,"193":1},"2":{"184":1}}],["开源协议",{"2":{"159":1}}],["开源",{"0":{"4":1},"2":{"186":1,"200":1}}],["+3",{"2":{"659":2}}],["+2",{"2":{"659":2,"756":1}}],["+0",{"2":{"634":1}}],["+1d4",{"2":{"678":1}}],["+1d8",{"2":{"659":1}}],["+1",{"2":{"548":1,"672":2}}],["+x",{"2":{"539":3}}],["++i",{"2":{"130":1}}],["++curpagerows",{"2":{"130":1}}],["+=",{"2":{"127":1,"129":1,"130":2}}],["+",{"2":{"5":1,"72":1,"73":1,"79":1,"84":5,"119":1,"127":3,"130":6,"133":1,"145":1,"147":1,"176":1,"178":1,"262":1,"368":1,"373":1,"570":7,"591":1,"615":3,"628":3,"630":1,"634":4,"636":1,"637":11,"639":2,"659":5,"665":1,"667":5,"669":1,"713":1,"746":1}}],["中管理跑团",{"2":{"730":1}}],["中寻找一个面向公众提供服务的骰子",{"2":{"718":1}}],["中为",{"2":{"717":1}}],["中可以添加消息通知的接收者",{"2":{"690":1}}],["中可以有多种等价表示方法",{"2":{"47":1}}],["中查看",{"2":{"583":1}}],["中文和英文缩写等价",{"2":{"582":1}}],["中快速尝试",{"2":{"578":1}}],["中设置分组的别名",{"2":{"642":1}}],["中设置各个扩展是否默认开启",{"2":{"569":1}}],["中设置每个批次的数量和批次间隔时间",{"2":{"350":1}}],["中提供的一些辅助工具",{"2":{"426":1}}],["中你可以经常看见一个文案调用其他文案的情况",{"2":{"366":1}}],["中按时间从新到旧列出了当前存在的备份文件",{"2":{"321":1}}],["中选择你希望海豹拥有的权限",{"2":{"466":1}}],["中选择",{"2":{"318":1,"453":1,"466":1}}],["中启用",{"2":{"263":1}}],["中打开",{"2":{"259":1,"262":1}}],["中翻阅了一下",{"2":{"210":1}}],["中反复刷屏同样的内容只会带来负面后果",{"2":{"206":1}}],["中双击运行压缩包内的",{"2":{"196":1}}],["中使用",{"2":{"172":1,"262":1}}],["中通过",{"2":{"164":1,"167":1}}],["中即是",{"2":{"154":1}}],["中添加",{"2":{"146":1}}],["中注册这个游戏系统",{"2":{"146":1}}],["中注册可供用户修改的配置项",{"2":{"138":1}}],["中修改配置项的值",{"2":{"139":1}}],["中显示",{"2":{"139":1}}],["中第一个匹配的前缀",{"2":{"110":1}}],["中去除",{"2":{"110":1}}],["中有完整内容",{"2":{"105":1}}],["中已有详细例子",{"2":{"94":1}}],["中择一执行",{"2":{"78":1}}],["中识别隐藏的牌组",{"2":{"57":1}}],["中展示",{"2":{"57":1}}],["中就不会展示",{"2":{"57":2}}],["中午",{"2":{"50":3,"57":6}}],["中的部分任意组合",{"2":{"711":1}}],["中的说明",{"2":{"520":1}}],["中的海豹",{"0":{"489":1},"1":{"490":1,"491":1,"492":1,"493":1,"494":1,"495":1,"496":1,"497":1,"498":1},"2":{"513":1}}],["中的被动",{"2":{"265":1}}],["中的选项",{"2":{"156":1}}],["中的值作为",{"2":{"138":1}}],["中的变量",{"2":{"94":3}}],["中的词条内容可以直接换行",{"2":{"68":1}}],["中的",{"2":{"36":1,"225":1,"320":1,"368":3,"369":1,"370":1,"371":2,"374":2,"720":1}}],["中",{"2":{"5":1,"7":1,"38":1,"46":1,"57":2,"70":1,"72":1,"73":1,"93":1,"110":1,"158":1,"259":1,"264":1,"285":1,"287":1,"290":1,"294":1,"363":1,"373":1,"386":1,"448":1,"450":1,"582":1,"612":1,"635":1,"636":1,"641":1,"652":2}}],["可在后台的日志中检查收到指令的实际时间和发出响应的实际时间",{"2":{"689":1}}],["可在后台手动添加黑",{"2":{"325":1}}],["可避免中英文冒号的识别问题",{"2":{"665":1}}],["可指定每页大小和页码",{"2":{"642":1}}],["可查看",{"2":{"530":1}}],["可加入",{"2":{"504":1}}],["可前往",{"2":{"501":1}}],["可进入",{"2":{"499":1}}],["可新建一个",{"2":{"480":1}}],["可直接添加管理员权限",{"2":{"475":1}}],["可直接添加",{"2":{"466":1,"471":1}}],["可通过",{"2":{"375":1}}],["可分为两种",{"2":{"347":1}}],["可使用",{"2":{"332":1,"378":1,"386":1,"424":1,"654":1}}],["可配置性和主题与风格化等等",{"2":{"309":1}}],["可共存",{"2":{"241":1}}],["可获取对方的数据",{"2":{"134":1}}],["可用逗号分隔地连写多组",{"2":{"672":1}}],["可用让",{"2":{"606":1}}],["可用",{"2":{"114":1,"117":2,"139":1,"647":1}}],["可用中文",{"2":{"114":1,"117":1}}],["可根据喜好选择",{"2":{"81":1}}],["可能的参数",{"2":{"709":2}}],["可能的公网",{"2":{"686":1}}],["可能是代理没配置上",{"2":{"686":1}}],["可能是防火墙没配置好",{"2":{"686":1}}],["可能是根据数据类型自动推断",{"2":{"94":1}}],["可能性三",{"2":{"681":1}}],["可能性二",{"2":{"681":1}}],["可能性一",{"2":{"681":1}}],["可能有各种",{"2":{"538":1}}],["可能需要使用",{"2":{"521":1}}],["可能存在风险",{"2":{"389":1}}],["可能会检测到这些机器人",{"2":{"718":1}}],["可能会在未来发生变化",{"2":{"515":1}}],["可能会缺少部分运行库",{"2":{"514":1}}],["可能会存在途径特有的功能缺失和其它问题",{"2":{"513":1}}],["可能会导致无法发送消息或图片",{"2":{"466":1,"471":1,"475":1}}],["可能会去拉取远程内容作为牌堆项",{"2":{"389":1}}],["可能会自动添加用户进黑名单",{"2":{"327":1}}],["可能会出现包括但不限于变量值不变",{"2":{"172":1}}],["可能会发现有牌堆通过下面这样的写法来实现这个功能",{"2":{"52":1,"54":1}}],["可能出现因为测试的内容对变量造成影响",{"2":{"70":1}}],["可选参数",{"2":{"141":2}}],["可选",{"0":{"14":1,"541":1},"2":{"150":1,"159":6,"165":1}}],["可不做任何修改",{"2":{"11":1}}],["可以选用的种族",{"2":{"763":1}}],["可以选择",{"2":{"427":1}}],["可以选择点击",{"2":{"414":1}}],["可以选择已有的分组",{"2":{"396":1}}],["可以选择关闭其他应用程序运行的进程",{"2":{"252":1}}],["可以省略日志名",{"2":{"728":1}}],["可以为空",{"2":{"727":1}}],["可以",{"2":{"716":1}}],["可以发现",{"2":{"708":1}}],["可以发现第",{"2":{"73":1}}],["可以是群号",{"2":{"706":1}}],["可以是小数",{"2":{"423":1}}],["可以进行配置",{"2":{"691":1}}],["可以进行以下调整",{"2":{"603":1}}],["可以整个复制",{"2":{"687":1}}],["可以关闭暗骰吗",{"0":{"682":1}}],["可以被组合使用",{"2":{"637":1}}],["可以被叫做",{"2":{"578":1}}],["可以被叫做海豹骰",{"2":{"68":1}}],["可以只指定失败时的理智损失",{"2":{"609":1}}],["可以实时编辑的跑团日志",{"0":{"568":1}}],["可以实现劫持客户端对外开放",{"2":{"519":1}}],["可以实现抽取其他项",{"2":{"50":1}}],["可以免去手动配置",{"2":{"541":1}}],["可以理解为装在",{"2":{"519":1}}],["可以理解为当什么情况下会触发这一条回复项",{"2":{"419":1}}],["可以方便地进行集中管理",{"2":{"490":1}}],["可以修改连接端口",{"2":{"481":1}}],["可以这样做",{"2":{"458":1}}],["可以这样写",{"2":{"117":1}}],["可以考虑这里的额外手段",{"2":{"455":1}}],["可以考虑减少用户群体",{"2":{"199":1}}],["可以稍后在系统设置中授予海豹核心相关权限",{"2":{"454":1}}],["可以跳转到",{"2":{"425":1}}],["可以给回复结果设置延迟",{"2":{"423":1}}],["可以新增一条结果",{"2":{"422":1}}],["可以新建一个文件",{"2":{"415":1}}],["可以勾选",{"2":{"414":1}}],["可以收起过长的内容",{"2":{"388":1,"406":1}}],["可以手动点击",{"2":{"385":1}}],["可以手动在",{"2":{"155":1}}],["可以点击",{"2":{"418":1}}],["可以点击它启用该文件",{"2":{"414":1}}],["可以点击启用",{"2":{"404":1}}],["可以点击右上角的",{"2":{"365":1}}],["可以点击本部分第一段中的超链接查看",{"2":{"206":1}}],["可以点开查看",{"2":{"356":1}}],["可以对黑白名单进行一些设置",{"2":{"328":1}}],["可以立即生成一份备份",{"2":{"316":1}}],["可以很方便的在多个平台",{"2":{"285":1,"516":1}}],["可以定位到某个特定的房屋",{"2":{"278":1}}],["可以同时按下键盘上",{"2":{"252":1}}],["可以尝试删除",{"2":{"242":1}}],["可以尝试使用",{"2":{"93":1,"239":2}}],["可以回车跳过而使用默认配置",{"2":{"239":1}}],["可以加入海豹官方群寻求帮助",{"2":{"239":1}}],["可以加入官方群进行反馈",{"2":{"7":1}}],["可以正确识别",{"2":{"224":1}}],["可以预见的",{"2":{"209":1}}],["可以用各种名字修改",{"2":{"582":1}}],["可以用各种名字使用",{"2":{"582":1}}],["可以用于判断该联系这户人中的哪一位",{"2":{"278":1}}],["可以用于匹配",{"2":{"209":1}}],["可以用这个指令测试",{"2":{"180":1}}],["可以去",{"0":{"192":1,"233":1}}],["可以去模板项目仓库看看有没有最新的",{"2":{"155":1}}],["可以插入表达式",{"2":{"173":1}}],["可以安装",{"2":{"168":1}}],["可以指定性别",{"2":{"762":1}}],["可以指定数量",{"2":{"762":1,"763":1}}],["可以指定语言",{"2":{"762":1}}],["可以指定的难度有",{"2":{"597":1}}],["可以指定目标海豹版本",{"2":{"167":1}}],["可以指定所有的导出项",{"2":{"57":1}}],["可以检查一下是否是最新版本",{"2":{"161":1}}],["可以下载海豹提供的",{"2":{"161":1}}],["可以不太准确的简单理解为会生成一些密码发给腾讯",{"2":{"251":1}}],["可以不含此行或含有多行",{"2":{"159":1}}],["可以不写在另一条里",{"2":{"83":1}}],["可以自定义大部分指令的回复语句",{"2":{"551":1}}],["可以自己试试看除了在",{"2":{"193":1,"202":1}}],["可以自己定义",{"2":{"159":1}}],["可以自行进行替换",{"2":{"190":1}}],["可以自行",{"2":{"12":1}}],["可以从以下两个渠道获取海豹核心安装包",{"2":{"538":1}}],["可以从以下链接获取经过编译的",{"2":{"147":1}}],["可以从相册扫码",{"2":{"437":1}}],["可以从互联网上寻找到很多优秀的教程",{"2":{"157":1}}],["可以创建项目使用前端工具链来编译出插件",{"2":{"148":1}}],["可以直接复制到其他骰子使用",{"2":{"592":1}}],["可以直接点击按钮更新",{"2":{"543":1}}],["可以直接在该文件中进行自定义回复的编写",{"2":{"414":1}}],["可以直接编译出一个可直接装载的",{"2":{"148":1}}],["可以直接使用系统的双开功能",{"2":{"440":1}}],["可以直接使用",{"2":{"146":1}}],["可以直接进行后续步骤无需再次",{"2":{"11":1}}],["可以互换交换一次属性点位置",{"2":{"145":1}}],["可以看作是一个微型搜索引擎",{"2":{"553":1}}],["可以看到一些保活策略",{"2":{"455":1}}],["可以看到如下的两个列表",{"2":{"356":1}}],["可以看到如下配置项",{"2":{"238":1}}],["可以看到使用seal",{"2":{"133":1}}],["可以看看里面是否已经包含了你想了解的概念",{"2":{"206":1}}],["可以看见有一个",{"2":{"385":1}}],["可以看见",{"2":{"82":1,"165":1,"362":1,"363":1,"404":1}}],["可以通过这个指令进行回复",{"2":{"706":1}}],["可以通过公开互联网访问",{"2":{"622":1}}],["可以通过此项筛选出那些不用的条目",{"2":{"364":1}}],["可以通过平日里学的",{"2":{"189":1,"217":1}}],["可以通过",{"2":{"120":1,"141":1,"497":1}}],["可以通过配置它们的导出来实现",{"2":{"57":1}}],["可以通过配置牌堆文件的",{"2":{"57":1}}],["可以包含",{"2":{"116":1}}],["可以查看扩展介绍及帮助",{"2":{"625":1}}],["可以查看报错信息",{"2":{"431":1}}],["可以查看报错消息",{"2":{"431":1}}],["可以查看相应扩展的说明来获取使用帮助",{"2":{"409":1}}],["可以查看当前的",{"2":{"405":1}}],["可以查看下文的",{"2":{"132":1}}],["可以查看",{"2":{"112":1}}],["可以模块化开关海豹的任意一部分",{"2":{"112":1}}],["可以称为",{"2":{"92":1,"171":1}}],["可以在设置中调整",{"2":{"689":1}}],["可以在当前群开启或关闭某扩展",{"2":{"625":1}}],["可以在海豹核心目录下执行以下两条命令",{"2":{"576":1}}],["可以在海豹运行时",{"2":{"199":1}}],["可以在后台关闭对应的指令",{"2":{"572":1}}],["可以在不同骰系下测试一下这些指令",{"2":{"570":1}}],["可以在无",{"2":{"263":1}}],["可以在",{"2":{"139":1,"625":1,"681":1}}],["可以在官方群内寻求帮助",{"2":{"91":1}}],["可以在赋值时使用条件算符",{"2":{"84":1}}],["可以采用如下两种写法中的一种",{"2":{"83":1}}],["可以调用一些",{"2":{"75":1}}],["可以参看",{"2":{"263":1}}],["可以参考海豹核心内置的",{"2":{"146":1}}],["可以参考",{"2":{"140":1,"268":1,"285":1,"287":1,"294":1}}],["可以参考如下代码",{"2":{"131":1}}],["可以参考以下材料",{"2":{"69":1}}],["可以参见这些文档或自行搜索",{"2":{"31":1}}],["可以阅读以下教程或自行在互联网搜索",{"2":{"65":1,"90":1}}],["可以将上述内容保存名为",{"2":{"48":3}}],["可以抽取出",{"2":{"48":2}}],["可以使用所有需要群管理权限的功能",{"2":{"120":1}}],["可以使用别名抽取改牌组",{"2":{"61":1}}],["可以使用行内语法表示数组",{"2":{"47":1}}],["可以使用行内语法表示对象",{"2":{"46":1}}],["可以使用",{"2":{"45":1,"84":1,"146":1,"386":1,"478":1,"541":1,"648":1,"686":1,"727":1,"734":1}}],["可以使用多行字符串语法",{"2":{"35":1}}],["可以帮助改进代码",{"2":{"8":1}}],["可反馈在该仓库的",{"2":{"5":1}}],["可阅读对应仓库的",{"2":{"5":1}}],["gm",{"2":{"579":1,"741":1}}],["global",{"2":{"497":1}}],["ghcr",{"2":{"491":5,"539":1}}],["gateway",{"2":{"464":1}}],["gamesystem",{"2":{"94":2,"103":2}}],["g",{"0":{"273":1},"1":{"274":1}}],["gugu",{"0":{"702":1},"2":{"569":1,"702":2}}],["guild",{"2":{"466":1}}],["guildid",{"2":{"106":1,"109":1}}],["gui",{"2":{"262":1,"302":1}}],["guestport",{"2":{"259":1}}],["gpl",{"2":{"159":1}}],["generator",{"2":{"135":1,"158":1,"466":1}}],["getgroups",{"2":{"142":1}}],["gettasks",{"2":{"142":1}}],["gettemplateconfig",{"2":{"94":1,"139":1}}],["getxxxconfig",{"2":{"138":1}}],["getrestargsfrom",{"2":{"110":1}}],["getkwarg",{"2":{"110":1}}],["getargn",{"2":{"110":1,"115":5,"116":2,"117":2,"119":2,"127":5,"129":1,"130":5,"133":1,"134":1,"139":1}}],["getvaluenamebyalias",{"2":{"107":1}}],["getversion",{"2":{"104":1}}],["getendpoints",{"2":{"104":1}}],["getuser",{"2":{"94":1,"126":1,"127":1}}],["getlist",{"2":{"94":1,"125":1,"127":1}}],["getoptionconfig",{"2":{"94":1,"139":1}}],["getboolconfig",{"2":{"94":1,"139":1}}],["getfloatconfig",{"2":{"94":1,"139":1}}],["getintconfig",{"2":{"94":1,"139":1}}],["getstringconfig",{"2":{"94":1,"139":1}}],["getchartemplate",{"2":{"106":1}}],["getconfig",{"2":{"94":1,"138":1,"139":4}}],["getctxproxyatpos",{"0":{"98":1},"2":{"94":2,"98":1}}],["getctxproxyfirst",{"0":{"98":1},"2":{"94":1,"98":1,"134":1}}],["get",{"2":{"63":1,"135":1,"479":1,"729":1,"746":1,"765":1}}],["green",{"0":{"739":1},"2":{"739":1}}],["gre单词",{"2":{"118":1,"652":8}}],["groupclr",{"2":{"643":1}}],["group=",{"2":{"643":1}}],["groups",{"2":{"142":3,"531":1,"532":2}}],["groupnum",{"2":{"108":1}}],["groupname",{"2":{"106":1}}],["groupwelcomemessage",{"2":{"106":1}}],["group",{"0":{"106":1},"2":{"105":1,"109":1,"133":1,"142":2,"172":3,"427":1,"460":4,"497":1,"623":1,"643":1}}],["groupid",{"2":{"94":2,"96":4,"106":1,"109":1,"133":1,"142":1}}],["gt",{"2":{"48":1,"57":5,"66":1,"68":2,"70":1,"73":1,"78":4,"89":1,"90":1,"114":1,"120":1,"141":1,"165":3,"172":4,"224":1,"225":2,"262":1,"290":1,"450":4,"585":2,"587":1,"588":1,"589":7,"590":2,"591":2,"595":1,"596":2,"597":2,"598":2,"604":1,"605":2,"606":3,"608":2,"609":2,"610":3,"614":4,"615":7,"616":1,"619":1,"620":1,"622":3,"623":5,"625":2,"626":1,"627":2,"635":7,"636":4,"640":1,"641":10,"642":5,"643":1,"647":1,"648":3,"652":3,"653":2,"658":2,"659":6,"660":4,"663":3,"664":2,"665":6,"667":4,"670":6,"674":2,"678":1,"684":1,"694":1,"703":3,"704":2,"705":1,"706":3,"707":1,"709":11,"711":2,"712":1,"713":3,"714":1,"715":1,"722":3,"727":3,"728":2,"729":6,"730":3,"734":1,"735":1,"746":35,"748":2,"750":1,"751":2,"753":1,"755":1,"756":1,"757":1,"762":1,"763":2,"764":1,"765":8}}],["git",{"2":{"12":2,"99":3,"149":1}}],["github",{"0":{"192":1,"193":1,"202":1,"233":1},"2":{"1":1,"4":1,"5":1,"7":3,"9":1,"10":1,"13":1,"94":1,"105":1,"117":1,"119":1,"121":1,"127":1,"129":1,"130":1,"133":1,"134":1,"136":1,"149":2,"158":1,"159":2,"186":1,"192":1,"193":5,"200":1,"202":5,"206":1,"233":1,"279":1,"285":1,"287":1,"294":1,"384":1,"393":1,"403":1,"416":1,"481":1,"538":2}}],["gocqhttp",{"0":{"243":1},"1":{"244":1,"245":1,"246":1,"247":1,"248":1,"249":1,"250":1,"251":1,"252":1},"2":{"516":1}}],["gocqqq号",{"2":{"242":1}}],["gocq",{"0":{"250":1},"2":{"240":1,"242":6,"246":1,"251":1,"254":2}}],["google",{"2":{"207":3,"686":1}}],["goja",{"2":{"158":1}}],["gotype",{"2":{"138":1}}],["gofunc",{"2":{"72":1}}],["golang",{"2":{"69":1,"550":1}}],["go",{"0":{"236":1,"250":1},"1":{"237":1,"238":1,"239":1,"240":1,"241":1,"242":1,"243":1,"244":1,"245":1,"246":1,"247":1,"248":1,"249":1,"250":1,"251":1,"252":1},"2":{"5":1,"69":1,"72":1,"94":1,"165":1,"236":5,"239":2,"242":5,"512":1,"513":1,"687":1}}],["核心日志",{"2":{"431":1}}],["核心代码同样只有一行的",{"2":{"135":1}}],["核心指令是无法被关闭的指令",{"2":{"621":1}}],["核心指令",{"0":{"621":1},"1":{"622":1,"623":1,"624":1,"625":1,"626":1,"627":1,"628":1,"629":1,"630":1,"631":1,"632":1,"633":1,"634":1,"635":1,"636":1,"637":1,"638":1,"639":1,"640":1,"641":1,"642":1,"643":1,"644":1,"645":1,"646":1,"647":1,"648":1,"649":1},"2":{"20":1,"326":1,"394":1,"395":1,"625":1,"711":1,"712":1,"746":1}}],["核心",{"0":{"372":1},"1":{"373":1,"374":1},"2":{"5":1,"7":1,"362":1,"375":1,"377":1,"380":2}}],["下扫码",{"0":{"685":1},"1":{"686":1,"687":1}}],["下略",{"2":{"665":1}}],["下点击",{"2":{"532":1}}],["下滑在",{"2":{"532":1}}],["下添加如下事件",{"2":{"531":1}}],["下选择你希望海豹拥有的权限",{"2":{"471":1}}],["下填写对应的信息",{"2":{"470":1}}],["下找到",{"2":{"469":1,"473":1,"532":1}}],["下方的子目录",{"2":{"466":1,"475":1}}],["下方的敏感词列表会展示当前加载的敏感词",{"2":{"356":1}}],["下拉框",{"2":{"364":1}}],["下载安装",{"2":{"523":1}}],["下载安装就可以了",{"2":{"196":1}}],["下载对应版本的服务端核心文件",{"2":{"479":2}}],["下载其中的",{"2":{"460":1}}],["下载原图和删除图片文件",{"2":{"428":1}}],["下载",{"0":{"523":1},"2":{"258":1,"321":1,"414":1,"441":2,"481":1,"686":1}}],["下载完成后",{"2":{"257":1,"460":1}}],["下同",{"2":{"180":1}}],["下读出的数据即被代骰者的个人数据",{"2":{"134":1}}],["下的备份文件",{"2":{"574":1}}],["下的",{"2":{"114":1}}],["下划线和短横线",{"2":{"34":1}}],["下面该",{"2":{"660":1}}],["下面以",{"2":{"478":1}}],["下面我们将一一介绍其中的功能",{"2":{"413":1}}],["下面我们将一一介绍",{"2":{"353":1}}],["下面的方法随时可能失效",{"2":{"239":1}}],["下面的语法中涉及到的符号都是",{"2":{"31":1}}],["下面是一个可以作为参考的问问题的方式",{"2":{"190":1}}],["下面是一个可行的思考过程",{"2":{"189":1,"217":1}}],["下面是一个简单的示例",{"2":{"77":1}}],["下面是",{"2":{"94":4,"722":1}}],["下面将引导你跳转到对应规则的具体命令支持页",{"2":{"738":1}}],["下面将一一介绍",{"2":{"404":1}}],["下面将简单介绍他们之间的关系",{"2":{"366":1}}],["下面将使用",{"2":{"255":1}}],["下面将补充介绍进阶内容",{"2":{"70":1}}],["下面将以提交对手册的改进为示例",{"2":{"9":1}}],["下",{"2":{"4":1,"5":1,"299":1,"532":1}}],["浣熊旅記",{"2":{"3":1,"67":1}}],["憧憬少",{"2":{"3":1,"130":2}}],["病毒",{"2":{"15":1}}],["病",{"2":{"3":1}}],["蜜瓜包",{"2":{"3":1,"646":1}}],["鹊鹊结合实际经历创作",{"2":{"552":1,"702":1}}],["鹊鹊",{"2":{"3":1}}],["新人入群欢迎",{"0":{"707":1}}],["新建空白卡",{"2":{"746":1}}],["新建日志",{"2":{"746":1}}],["新建",{"0":{"415":1},"2":{"415":1}}],["新建一份日志",{"2":{"727":1}}],["新建一张角色卡",{"2":{"641":1}}],["新建一个空白文件夹",{"2":{"480":1}}],["新建一个",{"2":{"158":1}}],["新建一轮分歧并设标题",{"2":{"130":1}}],["新建一项自定义回复",{"2":{"70":1}}],["新版本的海豹有时会增加更多插件可以调用的",{"2":{"167":1}}],["新版本支持了直接使用时间字符串",{"2":{"159":1}}],["新版本发布的正式地址",{"2":{"1":1}}],["新增链接",{"2":{"518":1,"524":1}}],["新增连接",{"2":{"514":1}}],["新增的",{"2":{"167":2}}],["新增",{"2":{"94":3,"385":1}}],["新开一行赋值",{"2":{"84":1}}],["新",{"2":{"5":1}}],["新手册贡献者",{"2":{"3":1}}],["染色",{"2":{"1":1}}],["官方",{"2":{"708":1}}],["官方手册",{"2":{"523":1,"526":1}}],["官方文档",{"2":{"520":1,"522":1}}],["官方认可",{"2":{"514":1}}],["官方认可的机器人方案",{"2":{"512":1}}],["官方保证",{"2":{"512":1}}],["官方角度等同于",{"2":{"512":1}}],["官方会对账号行为进行检测",{"2":{"512":1}}],["官方一直在对第三方实现进行技术与非技术层面的多重打击",{"2":{"512":1}}],["官方人员测试并审核",{"2":{"504":1}}],["官方对机器人能力的严格限制",{"2":{"499":1}}],["官方目前已开放了机器人功能",{"2":{"499":1}}],["官方的工作人员审核通过",{"2":{"504":1}}],["官方的机器人服务",{"2":{"499":1}}],["官方的检测",{"2":{"236":1}}],["官方机器人权限",{"2":{"513":1}}],["官方机器人服务",{"2":{"512":1}}],["官方机器人目前无法发送本地图片",{"2":{"505":1}}],["官方机器人会因为消息发送过于频繁而报错",{"2":{"505":1}}],["官方机器人一次只能发一条消息",{"2":{"505":1}}],["官方机器人默认的指令前缀",{"2":{"503":1}}],["官方机器人的优点",{"2":{"499":1}}],["官方机器人已开放个体使用权限",{"2":{"499":1}}],["官方机器人平台接入海豹核心需要了解的特定内容",{"2":{"499":1}}],["官方机器人",{"0":{"499":1},"1":{"500":1,"501":1,"502":1,"503":1,"504":1,"505":1,"506":1,"507":1,"508":1,"509":1},"2":{"502":1,"513":1}}],["官方站点",{"0":{"1":1}}],["官网的下载最顺畅和便捷",{"2":{"538":1}}],["官网下载页",{"2":{"538":1}}],["官网下载可能会十分缓慢",{"2":{"93":1}}],["官网应当是你下载软件的首选途径",{"2":{"93":1}}],["官网",{"2":{"1":1,"2":1,"538":1}}]],"serializationVersion":2}';export{e as default}; diff --git a/assets/chunks/VPLocalSearchBox.B3c5Vn6E.js b/assets/chunks/VPLocalSearchBox.B3c5Vn6E.js new file mode 100644 index 000000000..4a89cb9ce --- /dev/null +++ b/assets/chunks/VPLocalSearchBox.B3c5Vn6E.js @@ -0,0 +1,7 @@ +var Ft=Object.defineProperty;var Ot=(a,e,t)=>e in a?Ft(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t;var Me=(a,e,t)=>Ot(a,typeof e!="symbol"?e+"":e,t);import{V as Rt,p as ie,h as me,a8 as et,a9 as Ct,aa as Mt,q as $e,ab as At,d as Lt,D as xe,ac as tt,ad as Dt,ae as zt,s as Pt,af as jt,v as Ae,P as he,O as Se,ag as Vt,ah as $t,W as Bt,R as Wt,$ as Kt,o as H,b as Jt,j as S,a0 as Ut,k as L,ai as qt,aj as Gt,ak as Ht,c as Z,n as st,e as _e,C as nt,F as it,a as fe,t as pe,al as Qt,am as rt,an as Yt,ao as Zt,ap as Xt,aq as es,_ as ts}from"./framework.B1keMFNq.js";import{u as ss,c as ns}from"./theme.8WvZWF-M.js";const is={root:()=>Rt(()=>import("./@localSearchIndexroot.BrUPPGVN.js"),[])};/*! +* tabbable 6.2.0 +* @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE +*/var mt=["input:not([inert])","select:not([inert])","textarea:not([inert])","a[href]:not([inert])","button:not([inert])","[tabindex]:not(slot):not([inert])","audio[controls]:not([inert])","video[controls]:not([inert])",'[contenteditable]:not([contenteditable="false"]):not([inert])',"details>summary:first-of-type:not([inert])","details:not([inert])"],Ne=mt.join(","),gt=typeof Element>"u",ae=gt?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,Fe=!gt&&Element.prototype.getRootNode?function(a){var e;return a==null||(e=a.getRootNode)===null||e===void 0?void 0:e.call(a)}:function(a){return a==null?void 0:a.ownerDocument},Oe=function a(e,t){var s;t===void 0&&(t=!0);var n=e==null||(s=e.getAttribute)===null||s===void 0?void 0:s.call(e,"inert"),r=n===""||n==="true",i=r||t&&e&&a(e.parentNode);return i},rs=function(e){var t,s=e==null||(t=e.getAttribute)===null||t===void 0?void 0:t.call(e,"contenteditable");return s===""||s==="true"},bt=function(e,t,s){if(Oe(e))return[];var n=Array.prototype.slice.apply(e.querySelectorAll(Ne));return t&&ae.call(e,Ne)&&n.unshift(e),n=n.filter(s),n},yt=function a(e,t,s){for(var n=[],r=Array.from(e);r.length;){var i=r.shift();if(!Oe(i,!1))if(i.tagName==="SLOT"){var o=i.assignedElements(),l=o.length?o:i.children,c=a(l,!0,s);s.flatten?n.push.apply(n,c):n.push({scopeParent:i,candidates:c})}else{var h=ae.call(i,Ne);h&&s.filter(i)&&(t||!e.includes(i))&&n.push(i);var m=i.shadowRoot||typeof s.getShadowRoot=="function"&&s.getShadowRoot(i),f=!Oe(m,!1)&&(!s.shadowRootFilter||s.shadowRootFilter(i));if(m&&f){var b=a(m===!0?i.children:m.children,!0,s);s.flatten?n.push.apply(n,b):n.push({scopeParent:i,candidates:b})}else r.unshift.apply(r,i.children)}}return n},wt=function(e){return!isNaN(parseInt(e.getAttribute("tabindex"),10))},re=function(e){if(!e)throw new Error("No node provided");return e.tabIndex<0&&(/^(AUDIO|VIDEO|DETAILS)$/.test(e.tagName)||rs(e))&&!wt(e)?0:e.tabIndex},as=function(e,t){var s=re(e);return s<0&&t&&!wt(e)?0:s},os=function(e,t){return e.tabIndex===t.tabIndex?e.documentOrder-t.documentOrder:e.tabIndex-t.tabIndex},xt=function(e){return e.tagName==="INPUT"},ls=function(e){return xt(e)&&e.type==="hidden"},cs=function(e){var t=e.tagName==="DETAILS"&&Array.prototype.slice.apply(e.children).some(function(s){return s.tagName==="SUMMARY"});return t},us=function(e,t){for(var s=0;ssummary:first-of-type"),i=r?e.parentElement:e;if(ae.call(i,"details:not([open]) *"))return!0;if(!s||s==="full"||s==="legacy-full"){if(typeof n=="function"){for(var o=e;e;){var l=e.parentElement,c=Fe(e);if(l&&!l.shadowRoot&&n(l)===!0)return at(e);e.assignedSlot?e=e.assignedSlot:!l&&c!==e.ownerDocument?e=c.host:e=l}e=o}if(ps(e))return!e.getClientRects().length;if(s!=="legacy-full")return!0}else if(s==="non-zero-area")return at(e);return!1},ms=function(e){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(e.tagName))for(var t=e.parentElement;t;){if(t.tagName==="FIELDSET"&&t.disabled){for(var s=0;s=0)},bs=function a(e){var t=[],s=[];return e.forEach(function(n,r){var i=!!n.scopeParent,o=i?n.scopeParent:n,l=as(o,i),c=i?a(n.candidates):o;l===0?i?t.push.apply(t,c):t.push(o):s.push({documentOrder:r,tabIndex:l,item:n,isScope:i,content:c})}),s.sort(os).reduce(function(n,r){return r.isScope?n.push.apply(n,r.content):n.push(r.content),n},[]).concat(t)},ys=function(e,t){t=t||{};var s;return t.getShadowRoot?s=yt([e],t.includeContainer,{filter:Be.bind(null,t),flatten:!1,getShadowRoot:t.getShadowRoot,shadowRootFilter:gs}):s=bt(e,t.includeContainer,Be.bind(null,t)),bs(s)},ws=function(e,t){t=t||{};var s;return t.getShadowRoot?s=yt([e],t.includeContainer,{filter:Re.bind(null,t),flatten:!0,getShadowRoot:t.getShadowRoot}):s=bt(e,t.includeContainer,Re.bind(null,t)),s},oe=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return ae.call(e,Ne)===!1?!1:Be(t,e)},xs=mt.concat("iframe").join(","),Le=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return ae.call(e,xs)===!1?!1:Re(t,e)};/*! +* focus-trap 7.6.0 +* @license MIT, https://github.com/focus-trap/focus-trap/blob/master/LICENSE +*/function Ss(a,e,t){return(e=Es(e))in a?Object.defineProperty(a,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):a[e]=t,a}function ot(a,e){var t=Object.keys(a);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(a);e&&(s=s.filter(function(n){return Object.getOwnPropertyDescriptor(a,n).enumerable})),t.push.apply(t,s)}return t}function lt(a){for(var e=1;e0){var s=e[e.length-1];s!==t&&s.pause()}var n=e.indexOf(t);n===-1||e.splice(n,1),e.push(t)},deactivateTrap:function(e,t){var s=e.indexOf(t);s!==-1&&e.splice(s,1),e.length>0&&e[e.length-1].unpause()}},Ts=function(e){return e.tagName&&e.tagName.toLowerCase()==="input"&&typeof e.select=="function"},Is=function(e){return(e==null?void 0:e.key)==="Escape"||(e==null?void 0:e.key)==="Esc"||(e==null?void 0:e.keyCode)===27},ge=function(e){return(e==null?void 0:e.key)==="Tab"||(e==null?void 0:e.keyCode)===9},ks=function(e){return ge(e)&&!e.shiftKey},Ns=function(e){return ge(e)&&e.shiftKey},ut=function(e){return setTimeout(e,0)},dt=function(e,t){var s=-1;return e.every(function(n,r){return t(n)?(s=r,!1):!0}),s},ve=function(e){for(var t=arguments.length,s=new Array(t>1?t-1:0),n=1;n1?g-1:0),T=1;T=0)d=s.activeElement;else{var u=i.tabbableGroups[0],g=u&&u.firstTabbableNode;d=g||h("fallbackFocus")}if(!d)throw new Error("Your focus-trap needs to have at least one focusable element");return d},f=function(){if(i.containerGroups=i.containers.map(function(d){var u=ys(d,r.tabbableOptions),g=ws(d,r.tabbableOptions),E=u.length>0?u[0]:void 0,T=u.length>0?u[u.length-1]:void 0,N=g.find(function(v){return oe(v)}),O=g.slice().reverse().find(function(v){return oe(v)}),A=!!u.find(function(v){return re(v)>0});return{container:d,tabbableNodes:u,focusableNodes:g,posTabIndexesFound:A,firstTabbableNode:E,lastTabbableNode:T,firstDomTabbableNode:N,lastDomTabbableNode:O,nextTabbableNode:function(p){var _=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,F=u.indexOf(p);return F<0?_?g.slice(g.indexOf(p)+1).find(function(z){return oe(z)}):g.slice(0,g.indexOf(p)).reverse().find(function(z){return oe(z)}):u[F+(_?1:-1)]}}}),i.tabbableGroups=i.containerGroups.filter(function(d){return d.tabbableNodes.length>0}),i.tabbableGroups.length<=0&&!h("fallbackFocus"))throw new Error("Your focus-trap must have at least one container with at least one tabbable node in it at all times");if(i.containerGroups.find(function(d){return d.posTabIndexesFound})&&i.containerGroups.length>1)throw new Error("At least one node with a positive tabindex was found in one of your focus-trap's multiple containers. Positive tabindexes are only supported in single-container focus-traps.")},b=function(d){var u=d.activeElement;if(u)return u.shadowRoot&&u.shadowRoot.activeElement!==null?b(u.shadowRoot):u},y=function(d){if(d!==!1&&d!==b(document)){if(!d||!d.focus){y(m());return}d.focus({preventScroll:!!r.preventScroll}),i.mostRecentlyFocusedNode=d,Ts(d)&&d.select()}},x=function(d){var u=h("setReturnFocus",d);return u||(u===!1?!1:d)},w=function(d){var u=d.target,g=d.event,E=d.isBackward,T=E===void 0?!1:E;u=u||Ee(g),f();var N=null;if(i.tabbableGroups.length>0){var O=c(u,g),A=O>=0?i.containerGroups[O]:void 0;if(O<0)T?N=i.tabbableGroups[i.tabbableGroups.length-1].lastTabbableNode:N=i.tabbableGroups[0].firstTabbableNode;else if(T){var v=dt(i.tabbableGroups,function(j){var I=j.firstTabbableNode;return u===I});if(v<0&&(A.container===u||Le(u,r.tabbableOptions)&&!oe(u,r.tabbableOptions)&&!A.nextTabbableNode(u,!1))&&(v=O),v>=0){var p=v===0?i.tabbableGroups.length-1:v-1,_=i.tabbableGroups[p];N=re(u)>=0?_.lastTabbableNode:_.lastDomTabbableNode}else ge(g)||(N=A.nextTabbableNode(u,!1))}else{var F=dt(i.tabbableGroups,function(j){var I=j.lastTabbableNode;return u===I});if(F<0&&(A.container===u||Le(u,r.tabbableOptions)&&!oe(u,r.tabbableOptions)&&!A.nextTabbableNode(u))&&(F=O),F>=0){var z=F===i.tabbableGroups.length-1?0:F+1,P=i.tabbableGroups[z];N=re(u)>=0?P.firstTabbableNode:P.firstDomTabbableNode}else ge(g)||(N=A.nextTabbableNode(u))}}else N=h("fallbackFocus");return N},R=function(d){var u=Ee(d);if(!(c(u,d)>=0)){if(ve(r.clickOutsideDeactivates,d)){o.deactivate({returnFocus:r.returnFocusOnDeactivate});return}ve(r.allowOutsideClick,d)||d.preventDefault()}},C=function(d){var u=Ee(d),g=c(u,d)>=0;if(g||u instanceof Document)g&&(i.mostRecentlyFocusedNode=u);else{d.stopImmediatePropagation();var E,T=!0;if(i.mostRecentlyFocusedNode)if(re(i.mostRecentlyFocusedNode)>0){var N=c(i.mostRecentlyFocusedNode),O=i.containerGroups[N].tabbableNodes;if(O.length>0){var A=O.findIndex(function(v){return v===i.mostRecentlyFocusedNode});A>=0&&(r.isKeyForward(i.recentNavEvent)?A+1=0&&(E=O[A-1],T=!1))}}else i.containerGroups.some(function(v){return v.tabbableNodes.some(function(p){return re(p)>0})})||(T=!1);else T=!1;T&&(E=w({target:i.mostRecentlyFocusedNode,isBackward:r.isKeyBackward(i.recentNavEvent)})),y(E||i.mostRecentlyFocusedNode||m())}i.recentNavEvent=void 0},J=function(d){var u=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;i.recentNavEvent=d;var g=w({event:d,isBackward:u});g&&(ge(d)&&d.preventDefault(),y(g))},Q=function(d){(r.isKeyForward(d)||r.isKeyBackward(d))&&J(d,r.isKeyBackward(d))},W=function(d){Is(d)&&ve(r.escapeDeactivates,d)!==!1&&(d.preventDefault(),o.deactivate())},V=function(d){var u=Ee(d);c(u,d)>=0||ve(r.clickOutsideDeactivates,d)||ve(r.allowOutsideClick,d)||(d.preventDefault(),d.stopImmediatePropagation())},$=function(){if(i.active)return ct.activateTrap(n,o),i.delayInitialFocusTimer=r.delayInitialFocus?ut(function(){y(m())}):y(m()),s.addEventListener("focusin",C,!0),s.addEventListener("mousedown",R,{capture:!0,passive:!1}),s.addEventListener("touchstart",R,{capture:!0,passive:!1}),s.addEventListener("click",V,{capture:!0,passive:!1}),s.addEventListener("keydown",Q,{capture:!0,passive:!1}),s.addEventListener("keydown",W),o},be=function(){if(i.active)return s.removeEventListener("focusin",C,!0),s.removeEventListener("mousedown",R,!0),s.removeEventListener("touchstart",R,!0),s.removeEventListener("click",V,!0),s.removeEventListener("keydown",Q,!0),s.removeEventListener("keydown",W),o},M=function(d){var u=d.some(function(g){var E=Array.from(g.removedNodes);return E.some(function(T){return T===i.mostRecentlyFocusedNode})});u&&y(m())},U=typeof window<"u"&&"MutationObserver"in window?new MutationObserver(M):void 0,q=function(){U&&(U.disconnect(),i.active&&!i.paused&&i.containers.map(function(d){U.observe(d,{subtree:!0,childList:!0})}))};return o={get active(){return i.active},get paused(){return i.paused},activate:function(d){if(i.active)return this;var u=l(d,"onActivate"),g=l(d,"onPostActivate"),E=l(d,"checkCanFocusTrap");E||f(),i.active=!0,i.paused=!1,i.nodeFocusedBeforeActivation=s.activeElement,u==null||u();var T=function(){E&&f(),$(),q(),g==null||g()};return E?(E(i.containers.concat()).then(T,T),this):(T(),this)},deactivate:function(d){if(!i.active)return this;var u=lt({onDeactivate:r.onDeactivate,onPostDeactivate:r.onPostDeactivate,checkCanReturnFocus:r.checkCanReturnFocus},d);clearTimeout(i.delayInitialFocusTimer),i.delayInitialFocusTimer=void 0,be(),i.active=!1,i.paused=!1,q(),ct.deactivateTrap(n,o);var g=l(u,"onDeactivate"),E=l(u,"onPostDeactivate"),T=l(u,"checkCanReturnFocus"),N=l(u,"returnFocus","returnFocusOnDeactivate");g==null||g();var O=function(){ut(function(){N&&y(x(i.nodeFocusedBeforeActivation)),E==null||E()})};return N&&T?(T(x(i.nodeFocusedBeforeActivation)).then(O,O),this):(O(),this)},pause:function(d){if(i.paused||!i.active)return this;var u=l(d,"onPause"),g=l(d,"onPostPause");return i.paused=!0,u==null||u(),be(),q(),g==null||g(),this},unpause:function(d){if(!i.paused||!i.active)return this;var u=l(d,"onUnpause"),g=l(d,"onPostUnpause");return i.paused=!1,u==null||u(),f(),$(),q(),g==null||g(),this},updateContainerElements:function(d){var u=[].concat(d).filter(Boolean);return i.containers=u.map(function(g){return typeof g=="string"?s.querySelector(g):g}),i.active&&f(),q(),this}},o.updateContainerElements(e),o};function Rs(a,e={}){let t;const{immediate:s,...n}=e,r=ie(!1),i=ie(!1),o=f=>t&&t.activate(f),l=f=>t&&t.deactivate(f),c=()=>{t&&(t.pause(),i.value=!0)},h=()=>{t&&(t.unpause(),i.value=!1)},m=me(()=>{const f=et(a);return(Array.isArray(f)?f:[f]).map(b=>{const y=et(b);return typeof y=="string"?y:Ct(y)}).filter(Mt)});return $e(m,f=>{f.length&&(t=Os(f,{...n,onActivate(){r.value=!0,e.onActivate&&e.onActivate()},onDeactivate(){r.value=!1,e.onDeactivate&&e.onDeactivate()}}),s&&o())},{flush:"post"}),At(()=>l()),{hasFocus:r,isPaused:i,activate:o,deactivate:l,pause:c,unpause:h}}class ce{constructor(e,t=!0,s=[],n=5e3){this.ctx=e,this.iframes=t,this.exclude=s,this.iframesTimeout=n}static matches(e,t){const s=typeof t=="string"?[t]:t,n=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector;if(n){let r=!1;return s.every(i=>n.call(e,i)?(r=!0,!1):!0),r}else return!1}getContexts(){let e,t=[];return typeof this.ctx>"u"||!this.ctx?e=[]:NodeList.prototype.isPrototypeOf(this.ctx)?e=Array.prototype.slice.call(this.ctx):Array.isArray(this.ctx)?e=this.ctx:typeof this.ctx=="string"?e=Array.prototype.slice.call(document.querySelectorAll(this.ctx)):e=[this.ctx],e.forEach(s=>{const n=t.filter(r=>r.contains(s)).length>0;t.indexOf(s)===-1&&!n&&t.push(s)}),t}getIframeContents(e,t,s=()=>{}){let n;try{const r=e.contentWindow;if(n=r.document,!r||!n)throw new Error("iframe inaccessible")}catch{s()}n&&t(n)}isIframeBlank(e){const t="about:blank",s=e.getAttribute("src").trim();return e.contentWindow.location.href===t&&s!==t&&s}observeIframeLoad(e,t,s){let n=!1,r=null;const i=()=>{if(!n){n=!0,clearTimeout(r);try{this.isIframeBlank(e)||(e.removeEventListener("load",i),this.getIframeContents(e,t,s))}catch{s()}}};e.addEventListener("load",i),r=setTimeout(i,this.iframesTimeout)}onIframeReady(e,t,s){try{e.contentWindow.document.readyState==="complete"?this.isIframeBlank(e)?this.observeIframeLoad(e,t,s):this.getIframeContents(e,t,s):this.observeIframeLoad(e,t,s)}catch{s()}}waitForIframes(e,t){let s=0;this.forEachIframe(e,()=>!0,n=>{s++,this.waitForIframes(n.querySelector("html"),()=>{--s||t()})},n=>{n||t()})}forEachIframe(e,t,s,n=()=>{}){let r=e.querySelectorAll("iframe"),i=r.length,o=0;r=Array.prototype.slice.call(r);const l=()=>{--i<=0&&n(o)};i||l(),r.forEach(c=>{ce.matches(c,this.exclude)?l():this.onIframeReady(c,h=>{t(c)&&(o++,s(h)),l()},l)})}createIterator(e,t,s){return document.createNodeIterator(e,t,s,!1)}createInstanceOnIframe(e){return new ce(e.querySelector("html"),this.iframes)}compareNodeIframe(e,t,s){const n=e.compareDocumentPosition(s),r=Node.DOCUMENT_POSITION_PRECEDING;if(n&r)if(t!==null){const i=t.compareDocumentPosition(s),o=Node.DOCUMENT_POSITION_FOLLOWING;if(i&o)return!0}else return!0;return!1}getIteratorNode(e){const t=e.previousNode();let s;return t===null?s=e.nextNode():s=e.nextNode()&&e.nextNode(),{prevNode:t,node:s}}checkIframeFilter(e,t,s,n){let r=!1,i=!1;return n.forEach((o,l)=>{o.val===s&&(r=l,i=o.handled)}),this.compareNodeIframe(e,t,s)?(r===!1&&!i?n.push({val:s,handled:!0}):r!==!1&&!i&&(n[r].handled=!0),!0):(r===!1&&n.push({val:s,handled:!1}),!1)}handleOpenIframes(e,t,s,n){e.forEach(r=>{r.handled||this.getIframeContents(r.val,i=>{this.createInstanceOnIframe(i).forEachNode(t,s,n)})})}iterateThroughNodes(e,t,s,n,r){const i=this.createIterator(t,e,n);let o=[],l=[],c,h,m=()=>({prevNode:h,node:c}=this.getIteratorNode(i),c);for(;m();)this.iframes&&this.forEachIframe(t,f=>this.checkIframeFilter(c,h,f,o),f=>{this.createInstanceOnIframe(f).forEachNode(e,b=>l.push(b),n)}),l.push(c);l.forEach(f=>{s(f)}),this.iframes&&this.handleOpenIframes(o,e,s,n),r()}forEachNode(e,t,s,n=()=>{}){const r=this.getContexts();let i=r.length;i||n(),r.forEach(o=>{const l=()=>{this.iterateThroughNodes(e,o,t,s,()=>{--i<=0&&n()})};this.iframes?this.waitForIframes(o,l):l()})}}let Cs=class{constructor(e){this.ctx=e,this.ie=!1;const t=window.navigator.userAgent;(t.indexOf("MSIE")>-1||t.indexOf("Trident")>-1)&&(this.ie=!0)}set opt(e){this._opt=Object.assign({},{element:"",className:"",exclude:[],iframes:!1,iframesTimeout:5e3,separateWordSearch:!0,diacritics:!0,synonyms:{},accuracy:"partially",acrossElements:!1,caseSensitive:!1,ignoreJoiners:!1,ignoreGroups:0,ignorePunctuation:[],wildcards:"disabled",each:()=>{},noMatch:()=>{},filter:()=>!0,done:()=>{},debug:!1,log:window.console},e)}get opt(){return this._opt}get iterator(){return new ce(this.ctx,this.opt.iframes,this.opt.exclude,this.opt.iframesTimeout)}log(e,t="debug"){const s=this.opt.log;this.opt.debug&&typeof s=="object"&&typeof s[t]=="function"&&s[t](`mark.js: ${e}`)}escapeStr(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}createRegExp(e){return this.opt.wildcards!=="disabled"&&(e=this.setupWildcardsRegExp(e)),e=this.escapeStr(e),Object.keys(this.opt.synonyms).length&&(e=this.createSynonymsRegExp(e)),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),this.opt.diacritics&&(e=this.createDiacriticsRegExp(e)),e=this.createMergedBlanksRegExp(e),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.createJoinersRegExp(e)),this.opt.wildcards!=="disabled"&&(e=this.createWildcardsRegExp(e)),e=this.createAccuracyRegExp(e),e}createSynonymsRegExp(e){const t=this.opt.synonyms,s=this.opt.caseSensitive?"":"i",n=this.opt.ignoreJoiners||this.opt.ignorePunctuation.length?"\0":"";for(let r in t)if(t.hasOwnProperty(r)){const i=t[r],o=this.opt.wildcards!=="disabled"?this.setupWildcardsRegExp(r):this.escapeStr(r),l=this.opt.wildcards!=="disabled"?this.setupWildcardsRegExp(i):this.escapeStr(i);o!==""&&l!==""&&(e=e.replace(new RegExp(`(${this.escapeStr(o)}|${this.escapeStr(l)})`,`gm${s}`),n+`(${this.processSynomyms(o)}|${this.processSynomyms(l)})`+n))}return e}processSynomyms(e){return(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),e}setupWildcardsRegExp(e){return e=e.replace(/(?:\\)*\?/g,t=>t.charAt(0)==="\\"?"?":""),e.replace(/(?:\\)*\*/g,t=>t.charAt(0)==="\\"?"*":"")}createWildcardsRegExp(e){let t=this.opt.wildcards==="withSpaces";return e.replace(/\u0001/g,t?"[\\S\\s]?":"\\S?").replace(/\u0002/g,t?"[\\S\\s]*?":"\\S*")}setupIgnoreJoinersRegExp(e){return e.replace(/[^(|)\\]/g,(t,s,n)=>{let r=n.charAt(s+1);return/[(|)\\]/.test(r)||r===""?t:t+"\0"})}createJoinersRegExp(e){let t=[];const s=this.opt.ignorePunctuation;return Array.isArray(s)&&s.length&&t.push(this.escapeStr(s.join(""))),this.opt.ignoreJoiners&&t.push("\\u00ad\\u200b\\u200c\\u200d"),t.length?e.split(/\u0000+/).join(`[${t.join("")}]*`):e}createDiacriticsRegExp(e){const t=this.opt.caseSensitive?"":"i",s=this.opt.caseSensitive?["aàáảãạăằắẳẵặâầấẩẫậäåāą","AÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćč","CÇĆČ","dđď","DĐĎ","eèéẻẽẹêềếểễệëěēę","EÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïī","IÌÍỈĨỊÎÏĪ","lł","LŁ","nñňń","NÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøō","OÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rř","RŘ","sšśșş","SŠŚȘŞ","tťțţ","TŤȚŢ","uùúủũụưừứửữựûüůū","UÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿ","YÝỲỶỸỴŸ","zžżź","ZŽŻŹ"]:["aàáảãạăằắẳẵặâầấẩẫậäåāąAÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćčCÇĆČ","dđďDĐĎ","eèéẻẽẹêềếểễệëěēęEÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïīIÌÍỈĨỊÎÏĪ","lłLŁ","nñňńNÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøōOÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rřRŘ","sšśșşSŠŚȘŞ","tťțţTŤȚŢ","uùúủũụưừứửữựûüůūUÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿYÝỲỶỸỴŸ","zžżźZŽŻŹ"];let n=[];return e.split("").forEach(r=>{s.every(i=>{if(i.indexOf(r)!==-1){if(n.indexOf(i)>-1)return!1;e=e.replace(new RegExp(`[${i}]`,`gm${t}`),`[${i}]`),n.push(i)}return!0})}),e}createMergedBlanksRegExp(e){return e.replace(/[\s]+/gmi,"[\\s]+")}createAccuracyRegExp(e){const t="!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~¡¿";let s=this.opt.accuracy,n=typeof s=="string"?s:s.value,r=typeof s=="string"?[]:s.limiters,i="";switch(r.forEach(o=>{i+=`|${this.escapeStr(o)}`}),n){case"partially":default:return`()(${e})`;case"complementary":return i="\\s"+(i||this.escapeStr(t)),`()([^${i}]*${e}[^${i}]*)`;case"exactly":return`(^|\\s${i})(${e})(?=$|\\s${i})`}}getSeparatedKeywords(e){let t=[];return e.forEach(s=>{this.opt.separateWordSearch?s.split(" ").forEach(n=>{n.trim()&&t.indexOf(n)===-1&&t.push(n)}):s.trim()&&t.indexOf(s)===-1&&t.push(s)}),{keywords:t.sort((s,n)=>n.length-s.length),length:t.length}}isNumeric(e){return Number(parseFloat(e))==e}checkRanges(e){if(!Array.isArray(e)||Object.prototype.toString.call(e[0])!=="[object Object]")return this.log("markRanges() will only accept an array of objects"),this.opt.noMatch(e),[];const t=[];let s=0;return e.sort((n,r)=>n.start-r.start).forEach(n=>{let{start:r,end:i,valid:o}=this.callNoMatchOnInvalidRanges(n,s);o&&(n.start=r,n.length=i-r,t.push(n),s=i)}),t}callNoMatchOnInvalidRanges(e,t){let s,n,r=!1;return e&&typeof e.start<"u"?(s=parseInt(e.start,10),n=s+parseInt(e.length,10),this.isNumeric(e.start)&&this.isNumeric(e.length)&&n-t>0&&n-s>0?r=!0:(this.log(`Ignoring invalid or overlapping range: ${JSON.stringify(e)}`),this.opt.noMatch(e))):(this.log(`Ignoring invalid range: ${JSON.stringify(e)}`),this.opt.noMatch(e)),{start:s,end:n,valid:r}}checkWhitespaceRanges(e,t,s){let n,r=!0,i=s.length,o=t-i,l=parseInt(e.start,10)-o;return l=l>i?i:l,n=l+parseInt(e.length,10),n>i&&(n=i,this.log(`End range automatically set to the max value of ${i}`)),l<0||n-l<0||l>i||n>i?(r=!1,this.log(`Invalid range: ${JSON.stringify(e)}`),this.opt.noMatch(e)):s.substring(l,n).replace(/\s+/g,"")===""&&(r=!1,this.log("Skipping whitespace only range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:l,end:n,valid:r}}getTextNodes(e){let t="",s=[];this.iterator.forEachNode(NodeFilter.SHOW_TEXT,n=>{s.push({start:t.length,end:(t+=n.textContent).length,node:n})},n=>this.matchesExclude(n.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT,()=>{e({value:t,nodes:s})})}matchesExclude(e){return ce.matches(e,this.opt.exclude.concat(["script","style","title","head","html"]))}wrapRangeInTextNode(e,t,s){const n=this.opt.element?this.opt.element:"mark",r=e.splitText(t),i=r.splitText(s-t);let o=document.createElement(n);return o.setAttribute("data-markjs","true"),this.opt.className&&o.setAttribute("class",this.opt.className),o.textContent=r.textContent,r.parentNode.replaceChild(o,r),i}wrapRangeInMappedTextNode(e,t,s,n,r){e.nodes.every((i,o)=>{const l=e.nodes[o+1];if(typeof l>"u"||l.start>t){if(!n(i.node))return!1;const c=t-i.start,h=(s>i.end?i.end:s)-i.start,m=e.value.substr(0,i.start),f=e.value.substr(h+i.start);if(i.node=this.wrapRangeInTextNode(i.node,c,h),e.value=m+f,e.nodes.forEach((b,y)=>{y>=o&&(e.nodes[y].start>0&&y!==o&&(e.nodes[y].start-=h),e.nodes[y].end-=h)}),s-=h,r(i.node.previousSibling,i.start),s>i.end)t=i.end;else return!1}return!0})}wrapMatches(e,t,s,n,r){const i=t===0?0:t+1;this.getTextNodes(o=>{o.nodes.forEach(l=>{l=l.node;let c;for(;(c=e.exec(l.textContent))!==null&&c[i]!=="";){if(!s(c[i],l))continue;let h=c.index;if(i!==0)for(let m=1;m{let l;for(;(l=e.exec(o.value))!==null&&l[i]!=="";){let c=l.index;if(i!==0)for(let m=1;ms(l[i],m),(m,f)=>{e.lastIndex=f,n(m)})}r()})}wrapRangeFromIndex(e,t,s,n){this.getTextNodes(r=>{const i=r.value.length;e.forEach((o,l)=>{let{start:c,end:h,valid:m}=this.checkWhitespaceRanges(o,i,r.value);m&&this.wrapRangeInMappedTextNode(r,c,h,f=>t(f,o,r.value.substring(c,h),l),f=>{s(f,o)})}),n()})}unwrapMatches(e){const t=e.parentNode;let s=document.createDocumentFragment();for(;e.firstChild;)s.appendChild(e.removeChild(e.firstChild));t.replaceChild(s,e),this.ie?this.normalizeTextNode(t):t.normalize()}normalizeTextNode(e){if(e){if(e.nodeType===3)for(;e.nextSibling&&e.nextSibling.nodeType===3;)e.nodeValue+=e.nextSibling.nodeValue,e.parentNode.removeChild(e.nextSibling);else this.normalizeTextNode(e.firstChild);this.normalizeTextNode(e.nextSibling)}}markRegExp(e,t){this.opt=t,this.log(`Searching with expression "${e}"`);let s=0,n="wrapMatches";const r=i=>{s++,this.opt.each(i)};this.opt.acrossElements&&(n="wrapMatchesAcrossElements"),this[n](e,this.opt.ignoreGroups,(i,o)=>this.opt.filter(o,i,s),r,()=>{s===0&&this.opt.noMatch(e),this.opt.done(s)})}mark(e,t){this.opt=t;let s=0,n="wrapMatches";const{keywords:r,length:i}=this.getSeparatedKeywords(typeof e=="string"?[e]:e),o=this.opt.caseSensitive?"":"i",l=c=>{let h=new RegExp(this.createRegExp(c),`gm${o}`),m=0;this.log(`Searching with expression "${h}"`),this[n](h,1,(f,b)=>this.opt.filter(b,c,s,m),f=>{m++,s++,this.opt.each(f)},()=>{m===0&&this.opt.noMatch(c),r[i-1]===c?this.opt.done(s):l(r[r.indexOf(c)+1])})};this.opt.acrossElements&&(n="wrapMatchesAcrossElements"),i===0?this.opt.done(s):l(r[0])}markRanges(e,t){this.opt=t;let s=0,n=this.checkRanges(e);n&&n.length?(this.log("Starting to mark with the following ranges: "+JSON.stringify(n)),this.wrapRangeFromIndex(n,(r,i,o,l)=>this.opt.filter(r,i,o,l),(r,i)=>{s++,this.opt.each(r,i)},()=>{this.opt.done(s)})):this.opt.done(s)}unmark(e){this.opt=e;let t=this.opt.element?this.opt.element:"*";t+="[data-markjs]",this.opt.className&&(t+=`.${this.opt.className}`),this.log(`Removal selector "${t}"`),this.iterator.forEachNode(NodeFilter.SHOW_ELEMENT,s=>{this.unwrapMatches(s)},s=>{const n=ce.matches(s,t),r=this.matchesExclude(s);return!n||r?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT},this.opt.done)}};function Ms(a){const e=new Cs(a);return this.mark=(t,s)=>(e.mark(t,s),this),this.markRegExp=(t,s)=>(e.markRegExp(t,s),this),this.markRanges=(t,s)=>(e.markRanges(t,s),this),this.unmark=t=>(e.unmark(t),this),this}function ke(a,e,t,s){function n(r){return r instanceof t?r:new t(function(i){i(r)})}return new(t||(t=Promise))(function(r,i){function o(h){try{c(s.next(h))}catch(m){i(m)}}function l(h){try{c(s.throw(h))}catch(m){i(m)}}function c(h){h.done?r(h.value):n(h.value).then(o,l)}c((s=s.apply(a,[])).next())})}const As="ENTRIES",St="KEYS",_t="VALUES",D="";class De{constructor(e,t){const s=e._tree,n=Array.from(s.keys());this.set=e,this._type=t,this._path=n.length>0?[{node:s,keys:n}]:[]}next(){const e=this.dive();return this.backtrack(),e}dive(){if(this._path.length===0)return{done:!0,value:void 0};const{node:e,keys:t}=le(this._path);if(le(t)===D)return{done:!1,value:this.result()};const s=e.get(le(t));return this._path.push({node:s,keys:Array.from(s.keys())}),this.dive()}backtrack(){if(this._path.length===0)return;const e=le(this._path).keys;e.pop(),!(e.length>0)&&(this._path.pop(),this.backtrack())}key(){return this.set._prefix+this._path.map(({keys:e})=>le(e)).filter(e=>e!==D).join("")}value(){return le(this._path).node.get(D)}result(){switch(this._type){case _t:return this.value();case St:return this.key();default:return[this.key(),this.value()]}}[Symbol.iterator](){return this}}const le=a=>a[a.length-1],Ls=(a,e,t)=>{const s=new Map;if(e===void 0)return s;const n=e.length+1,r=n+t,i=new Uint8Array(r*n).fill(t+1);for(let o=0;o{const l=r*i;e:for(const c of a.keys())if(c===D){const h=n[l-1];h<=t&&s.set(o,[a.get(c),h])}else{let h=r;for(let m=0;mt)continue e}Et(a.get(c),e,t,s,n,h,i,o+c)}};class X{constructor(e=new Map,t=""){this._size=void 0,this._tree=e,this._prefix=t}atPrefix(e){if(!e.startsWith(this._prefix))throw new Error("Mismatched prefix");const[t,s]=Ce(this._tree,e.slice(this._prefix.length));if(t===void 0){const[n,r]=Ue(s);for(const i of n.keys())if(i!==D&&i.startsWith(r)){const o=new Map;return o.set(i.slice(r.length),n.get(i)),new X(o,e)}}return new X(t,e)}clear(){this._size=void 0,this._tree.clear()}delete(e){return this._size=void 0,Ds(this._tree,e)}entries(){return new De(this,As)}forEach(e){for(const[t,s]of this)e(t,s,this)}fuzzyGet(e,t){return Ls(this._tree,e,t)}get(e){const t=We(this._tree,e);return t!==void 0?t.get(D):void 0}has(e){const t=We(this._tree,e);return t!==void 0&&t.has(D)}keys(){return new De(this,St)}set(e,t){if(typeof e!="string")throw new Error("key must be a string");return this._size=void 0,ze(this._tree,e).set(D,t),this}get size(){if(this._size)return this._size;this._size=0;const e=this.entries();for(;!e.next().done;)this._size+=1;return this._size}update(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;const s=ze(this._tree,e);return s.set(D,t(s.get(D))),this}fetch(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;const s=ze(this._tree,e);let n=s.get(D);return n===void 0&&s.set(D,n=t()),n}values(){return new De(this,_t)}[Symbol.iterator](){return this.entries()}static from(e){const t=new X;for(const[s,n]of e)t.set(s,n);return t}static fromObject(e){return X.from(Object.entries(e))}}const Ce=(a,e,t=[])=>{if(e.length===0||a==null)return[a,t];for(const s of a.keys())if(s!==D&&e.startsWith(s))return t.push([a,s]),Ce(a.get(s),e.slice(s.length),t);return t.push([a,e]),Ce(void 0,"",t)},We=(a,e)=>{if(e.length===0||a==null)return a;for(const t of a.keys())if(t!==D&&e.startsWith(t))return We(a.get(t),e.slice(t.length))},ze=(a,e)=>{const t=e.length;e:for(let s=0;a&&s{const[t,s]=Ce(a,e);if(t!==void 0){if(t.delete(D),t.size===0)Tt(s);else if(t.size===1){const[n,r]=t.entries().next().value;It(s,n,r)}}},Tt=a=>{if(a.length===0)return;const[e,t]=Ue(a);if(e.delete(t),e.size===0)Tt(a.slice(0,-1));else if(e.size===1){const[s,n]=e.entries().next().value;s!==D&&It(a.slice(0,-1),s,n)}},It=(a,e,t)=>{if(a.length===0)return;const[s,n]=Ue(a);s.set(n+e,t),s.delete(n)},Ue=a=>a[a.length-1],qe="or",kt="and",zs="and_not";class ue{constructor(e){if((e==null?void 0:e.fields)==null)throw new Error('MiniSearch: option "fields" must be provided');const t=e.autoVacuum==null||e.autoVacuum===!0?Ve:e.autoVacuum;this._options=Object.assign(Object.assign(Object.assign({},je),e),{autoVacuum:t,searchOptions:Object.assign(Object.assign({},ht),e.searchOptions||{}),autoSuggestOptions:Object.assign(Object.assign({},Bs),e.autoSuggestOptions||{})}),this._index=new X,this._documentCount=0,this._documentIds=new Map,this._idToShortId=new Map,this._fieldIds={},this._fieldLength=new Map,this._avgFieldLength=[],this._nextId=0,this._storedFields=new Map,this._dirtCount=0,this._currentVacuum=null,this._enqueuedVacuum=null,this._enqueuedVacuumConditions=Je,this.addFields(this._options.fields)}add(e){const{extractField:t,tokenize:s,processTerm:n,fields:r,idField:i}=this._options,o=t(e,i);if(o==null)throw new Error(`MiniSearch: document does not have ID field "${i}"`);if(this._idToShortId.has(o))throw new Error(`MiniSearch: duplicate ID ${o}`);const l=this.addDocumentId(o);this.saveStoredFields(l,e);for(const c of r){const h=t(e,c);if(h==null)continue;const m=s(h.toString(),c),f=this._fieldIds[c],b=new Set(m).size;this.addFieldLength(l,f,this._documentCount-1,b);for(const y of m){const x=n(y,c);if(Array.isArray(x))for(const w of x)this.addTerm(f,l,w);else x&&this.addTerm(f,l,x)}}}addAll(e){for(const t of e)this.add(t)}addAllAsync(e,t={}){const{chunkSize:s=10}=t,n={chunk:[],promise:Promise.resolve()},{chunk:r,promise:i}=e.reduce(({chunk:o,promise:l},c,h)=>(o.push(c),(h+1)%s===0?{chunk:[],promise:l.then(()=>new Promise(m=>setTimeout(m,0))).then(()=>this.addAll(o))}:{chunk:o,promise:l}),n);return i.then(()=>this.addAll(r))}remove(e){const{tokenize:t,processTerm:s,extractField:n,fields:r,idField:i}=this._options,o=n(e,i);if(o==null)throw new Error(`MiniSearch: document does not have ID field "${i}"`);const l=this._idToShortId.get(o);if(l==null)throw new Error(`MiniSearch: cannot remove document with ID ${o}: it is not in the index`);for(const c of r){const h=n(e,c);if(h==null)continue;const m=t(h.toString(),c),f=this._fieldIds[c],b=new Set(m).size;this.removeFieldLength(l,f,this._documentCount,b);for(const y of m){const x=s(y,c);if(Array.isArray(x))for(const w of x)this.removeTerm(f,l,w);else x&&this.removeTerm(f,l,x)}}this._storedFields.delete(l),this._documentIds.delete(l),this._idToShortId.delete(o),this._fieldLength.delete(l),this._documentCount-=1}removeAll(e){if(e)for(const t of e)this.remove(t);else{if(arguments.length>0)throw new Error("Expected documents to be present. Omit the argument to remove all documents.");this._index=new X,this._documentCount=0,this._documentIds=new Map,this._idToShortId=new Map,this._fieldLength=new Map,this._avgFieldLength=[],this._storedFields=new Map,this._nextId=0}}discard(e){const t=this._idToShortId.get(e);if(t==null)throw new Error(`MiniSearch: cannot discard document with ID ${e}: it is not in the index`);this._idToShortId.delete(e),this._documentIds.delete(t),this._storedFields.delete(t),(this._fieldLength.get(t)||[]).forEach((s,n)=>{this.removeFieldLength(t,n,this._documentCount,s)}),this._fieldLength.delete(t),this._documentCount-=1,this._dirtCount+=1,this.maybeAutoVacuum()}maybeAutoVacuum(){if(this._options.autoVacuum===!1)return;const{minDirtFactor:e,minDirtCount:t,batchSize:s,batchWait:n}=this._options.autoVacuum;this.conditionalVacuum({batchSize:s,batchWait:n},{minDirtCount:t,minDirtFactor:e})}discardAll(e){const t=this._options.autoVacuum;try{this._options.autoVacuum=!1;for(const s of e)this.discard(s)}finally{this._options.autoVacuum=t}this.maybeAutoVacuum()}replace(e){const{idField:t,extractField:s}=this._options,n=s(e,t);this.discard(n),this.add(e)}vacuum(e={}){return this.conditionalVacuum(e)}conditionalVacuum(e,t){return this._currentVacuum?(this._enqueuedVacuumConditions=this._enqueuedVacuumConditions&&t,this._enqueuedVacuum!=null?this._enqueuedVacuum:(this._enqueuedVacuum=this._currentVacuum.then(()=>{const s=this._enqueuedVacuumConditions;return this._enqueuedVacuumConditions=Je,this.performVacuuming(e,s)}),this._enqueuedVacuum)):this.vacuumConditionsMet(t)===!1?Promise.resolve():(this._currentVacuum=this.performVacuuming(e),this._currentVacuum)}performVacuuming(e,t){return ke(this,void 0,void 0,function*(){const s=this._dirtCount;if(this.vacuumConditionsMet(t)){const n=e.batchSize||Ke.batchSize,r=e.batchWait||Ke.batchWait;let i=1;for(const[o,l]of this._index){for(const[c,h]of l)for(const[m]of h)this._documentIds.has(m)||(h.size<=1?l.delete(c):h.delete(m));this._index.get(o).size===0&&this._index.delete(o),i%n===0&&(yield new Promise(c=>setTimeout(c,r))),i+=1}this._dirtCount-=s}yield null,this._currentVacuum=this._enqueuedVacuum,this._enqueuedVacuum=null})}vacuumConditionsMet(e){if(e==null)return!0;let{minDirtCount:t,minDirtFactor:s}=e;return t=t||Ve.minDirtCount,s=s||Ve.minDirtFactor,this.dirtCount>=t&&this.dirtFactor>=s}get isVacuuming(){return this._currentVacuum!=null}get dirtCount(){return this._dirtCount}get dirtFactor(){return this._dirtCount/(1+this._documentCount+this._dirtCount)}has(e){return this._idToShortId.has(e)}getStoredFields(e){const t=this._idToShortId.get(e);if(t!=null)return this._storedFields.get(t)}search(e,t={}){const s=this.executeQuery(e,t),n=[];for(const[r,{score:i,terms:o,match:l}]of s){const c=o.length||1,h={id:this._documentIds.get(r),score:i*c,terms:Object.keys(l),queryTerms:o,match:l};Object.assign(h,this._storedFields.get(r)),(t.filter==null||t.filter(h))&&n.push(h)}return e===ue.wildcard&&t.boostDocument==null&&this._options.searchOptions.boostDocument==null||n.sort(pt),n}autoSuggest(e,t={}){t=Object.assign(Object.assign({},this._options.autoSuggestOptions),t);const s=new Map;for(const{score:r,terms:i}of this.search(e,t)){const o=i.join(" "),l=s.get(o);l!=null?(l.score+=r,l.count+=1):s.set(o,{score:r,terms:i,count:1})}const n=[];for(const[r,{score:i,terms:o,count:l}]of s)n.push({suggestion:r,terms:o,score:i/l});return n.sort(pt),n}get documentCount(){return this._documentCount}get termCount(){return this._index.size}static loadJSON(e,t){if(t==null)throw new Error("MiniSearch: loadJSON should be given the same options used when serializing the index");return this.loadJS(JSON.parse(e),t)}static loadJSONAsync(e,t){return ke(this,void 0,void 0,function*(){if(t==null)throw new Error("MiniSearch: loadJSON should be given the same options used when serializing the index");return this.loadJSAsync(JSON.parse(e),t)})}static getDefault(e){if(je.hasOwnProperty(e))return Pe(je,e);throw new Error(`MiniSearch: unknown option "${e}"`)}static loadJS(e,t){const{index:s,documentIds:n,fieldLength:r,storedFields:i,serializationVersion:o}=e,l=this.instantiateMiniSearch(e,t);l._documentIds=Te(n),l._fieldLength=Te(r),l._storedFields=Te(i);for(const[c,h]of l._documentIds)l._idToShortId.set(h,c);for(const[c,h]of s){const m=new Map;for(const f of Object.keys(h)){let b=h[f];o===1&&(b=b.ds),m.set(parseInt(f,10),Te(b))}l._index.set(c,m)}return l}static loadJSAsync(e,t){return ke(this,void 0,void 0,function*(){const{index:s,documentIds:n,fieldLength:r,storedFields:i,serializationVersion:o}=e,l=this.instantiateMiniSearch(e,t);l._documentIds=yield Ie(n),l._fieldLength=yield Ie(r),l._storedFields=yield Ie(i);for(const[h,m]of l._documentIds)l._idToShortId.set(m,h);let c=0;for(const[h,m]of s){const f=new Map;for(const b of Object.keys(m)){let y=m[b];o===1&&(y=y.ds),f.set(parseInt(b,10),yield Ie(y))}++c%1e3===0&&(yield Nt(0)),l._index.set(h,f)}return l})}static instantiateMiniSearch(e,t){const{documentCount:s,nextId:n,fieldIds:r,averageFieldLength:i,dirtCount:o,serializationVersion:l}=e;if(l!==1&&l!==2)throw new Error("MiniSearch: cannot deserialize an index created with an incompatible version");const c=new ue(t);return c._documentCount=s,c._nextId=n,c._idToShortId=new Map,c._fieldIds=r,c._avgFieldLength=i,c._dirtCount=o||0,c._index=new X,c}executeQuery(e,t={}){if(e===ue.wildcard)return this.executeWildcardQuery(t);if(typeof e!="string"){const f=Object.assign(Object.assign(Object.assign({},t),e),{queries:void 0}),b=e.queries.map(y=>this.executeQuery(y,f));return this.combineResults(b,f.combineWith)}const{tokenize:s,processTerm:n,searchOptions:r}=this._options,i=Object.assign(Object.assign({tokenize:s,processTerm:n},r),t),{tokenize:o,processTerm:l}=i,m=o(e).flatMap(f=>l(f)).filter(f=>!!f).map($s(i)).map(f=>this.executeQuerySpec(f,i));return this.combineResults(m,i.combineWith)}executeQuerySpec(e,t){const s=Object.assign(Object.assign({},this._options.searchOptions),t),n=(s.fields||this._options.fields).reduce((x,w)=>Object.assign(Object.assign({},x),{[w]:Pe(s.boost,w)||1}),{}),{boostDocument:r,weights:i,maxFuzzy:o,bm25:l}=s,{fuzzy:c,prefix:h}=Object.assign(Object.assign({},ht.weights),i),m=this._index.get(e.term),f=this.termResults(e.term,e.term,1,e.termBoost,m,n,r,l);let b,y;if(e.prefix&&(b=this._index.atPrefix(e.term)),e.fuzzy){const x=e.fuzzy===!0?.2:e.fuzzy,w=x<1?Math.min(o,Math.round(e.term.length*x)):x;w&&(y=this._index.fuzzyGet(e.term,w))}if(b)for(const[x,w]of b){const R=x.length-e.term.length;if(!R)continue;y==null||y.delete(x);const C=h*x.length/(x.length+.3*R);this.termResults(e.term,x,C,e.termBoost,w,n,r,l,f)}if(y)for(const x of y.keys()){const[w,R]=y.get(x);if(!R)continue;const C=c*x.length/(x.length+R);this.termResults(e.term,x,C,e.termBoost,w,n,r,l,f)}return f}executeWildcardQuery(e){const t=new Map,s=Object.assign(Object.assign({},this._options.searchOptions),e);for(const[n,r]of this._documentIds){const i=s.boostDocument?s.boostDocument(r,"",this._storedFields.get(n)):1;t.set(n,{score:i,terms:[],match:{}})}return t}combineResults(e,t=qe){if(e.length===0)return new Map;const s=t.toLowerCase(),n=Ps[s];if(!n)throw new Error(`Invalid combination operator: ${t}`);return e.reduce(n)||new Map}toJSON(){const e=[];for(const[t,s]of this._index){const n={};for(const[r,i]of s)n[r]=Object.fromEntries(i);e.push([t,n])}return{documentCount:this._documentCount,nextId:this._nextId,documentIds:Object.fromEntries(this._documentIds),fieldIds:this._fieldIds,fieldLength:Object.fromEntries(this._fieldLength),averageFieldLength:this._avgFieldLength,storedFields:Object.fromEntries(this._storedFields),dirtCount:this._dirtCount,index:e,serializationVersion:2}}termResults(e,t,s,n,r,i,o,l,c=new Map){if(r==null)return c;for(const h of Object.keys(i)){const m=i[h],f=this._fieldIds[h],b=r.get(f);if(b==null)continue;let y=b.size;const x=this._avgFieldLength[f];for(const w of b.keys()){if(!this._documentIds.has(w)){this.removeTerm(f,w,t),y-=1;continue}const R=o?o(this._documentIds.get(w),t,this._storedFields.get(w)):1;if(!R)continue;const C=b.get(w),J=this._fieldLength.get(w)[f],Q=Vs(C,y,this._documentCount,J,x,l),W=s*n*m*R*Q,V=c.get(w);if(V){V.score+=W,Ws(V.terms,e);const $=Pe(V.match,t);$?$.push(h):V.match[t]=[h]}else c.set(w,{score:W,terms:[e],match:{[t]:[h]}})}}return c}addTerm(e,t,s){const n=this._index.fetch(s,vt);let r=n.get(e);if(r==null)r=new Map,r.set(t,1),n.set(e,r);else{const i=r.get(t);r.set(t,(i||0)+1)}}removeTerm(e,t,s){if(!this._index.has(s)){this.warnDocumentChanged(t,e,s);return}const n=this._index.fetch(s,vt),r=n.get(e);r==null||r.get(t)==null?this.warnDocumentChanged(t,e,s):r.get(t)<=1?r.size<=1?n.delete(e):r.delete(t):r.set(t,r.get(t)-1),this._index.get(s).size===0&&this._index.delete(s)}warnDocumentChanged(e,t,s){for(const n of Object.keys(this._fieldIds))if(this._fieldIds[n]===t){this._options.logger("warn",`MiniSearch: document with ID ${this._documentIds.get(e)} has changed before removal: term "${s}" was not present in field "${n}". Removing a document after it has changed can corrupt the index!`,"version_conflict");return}}addDocumentId(e){const t=this._nextId;return this._idToShortId.set(e,t),this._documentIds.set(t,e),this._documentCount+=1,this._nextId+=1,t}addFields(e){for(let t=0;tObject.prototype.hasOwnProperty.call(a,e)?a[e]:void 0,Ps={[qe]:(a,e)=>{for(const t of e.keys()){const s=a.get(t);if(s==null)a.set(t,e.get(t));else{const{score:n,terms:r,match:i}=e.get(t);s.score=s.score+n,s.match=Object.assign(s.match,i),ft(s.terms,r)}}return a},[kt]:(a,e)=>{const t=new Map;for(const s of e.keys()){const n=a.get(s);if(n==null)continue;const{score:r,terms:i,match:o}=e.get(s);ft(n.terms,i),t.set(s,{score:n.score+r,terms:n.terms,match:Object.assign(n.match,o)})}return t},[zs]:(a,e)=>{for(const t of e.keys())a.delete(t);return a}},js={k:1.2,b:.7,d:.5},Vs=(a,e,t,s,n,r)=>{const{k:i,b:o,d:l}=r;return Math.log(1+(t-e+.5)/(e+.5))*(l+a*(i+1)/(a+i*(1-o+o*s/n)))},$s=a=>(e,t,s)=>{const n=typeof a.fuzzy=="function"?a.fuzzy(e,t,s):a.fuzzy||!1,r=typeof a.prefix=="function"?a.prefix(e,t,s):a.prefix===!0,i=typeof a.boostTerm=="function"?a.boostTerm(e,t,s):1;return{term:e,fuzzy:n,prefix:r,termBoost:i}},je={idField:"id",extractField:(a,e)=>a[e],tokenize:a=>a.split(Ks),processTerm:a=>a.toLowerCase(),fields:void 0,searchOptions:void 0,storeFields:[],logger:(a,e)=>{typeof(console==null?void 0:console[a])=="function"&&console[a](e)},autoVacuum:!0},ht={combineWith:qe,prefix:!1,fuzzy:!1,maxFuzzy:6,boost:{},weights:{fuzzy:.45,prefix:.375},bm25:js},Bs={combineWith:kt,prefix:(a,e,t)=>e===t.length-1},Ke={batchSize:1e3,batchWait:10},Je={minDirtFactor:.1,minDirtCount:20},Ve=Object.assign(Object.assign({},Ke),Je),Ws=(a,e)=>{a.includes(e)||a.push(e)},ft=(a,e)=>{for(const t of e)a.includes(t)||a.push(t)},pt=({score:a},{score:e})=>e-a,vt=()=>new Map,Te=a=>{const e=new Map;for(const t of Object.keys(a))e.set(parseInt(t,10),a[t]);return e},Ie=a=>ke(void 0,void 0,void 0,function*(){const e=new Map;let t=0;for(const s of Object.keys(a))e.set(parseInt(s,10),a[s]),++t%1e3===0&&(yield Nt(0));return e}),Nt=a=>new Promise(e=>setTimeout(e,a)),Ks=/[\n\r\p{Z}\p{P}]+/u;class Js{constructor(e=10){Me(this,"max");Me(this,"cache");this.max=e,this.cache=new Map}get(e){let t=this.cache.get(e);return t!==void 0&&(this.cache.delete(e),this.cache.set(e,t)),t}set(e,t){this.cache.has(e)?this.cache.delete(e):this.cache.size===this.max&&this.cache.delete(this.first()),this.cache.set(e,t)}first(){return this.cache.keys().next().value}clear(){this.cache.clear()}}const Us=["aria-owns"],qs={class:"shell"},Gs=["title"],Hs={class:"search-actions before"},Qs=["title"],Ys=["aria-activedescendant","aria-controls","placeholder"],Zs={class:"search-actions"},Xs=["title"],en=["disabled","title"],tn=["id","role","aria-labelledby"],sn=["id","aria-selected"],nn=["href","aria-label","onMouseenter","onFocusin","data-index"],rn={class:"titles"},an=["innerHTML"],on={class:"title main"},ln=["innerHTML"],cn={key:0,class:"excerpt-wrapper"},un={key:0,class:"excerpt",inert:""},dn=["innerHTML"],hn={key:0,class:"no-results"},fn={class:"search-keyboard-shortcuts"},pn=["aria-label"],vn=["aria-label"],mn=["aria-label"],gn=["aria-label"],bn=Lt({__name:"VPLocalSearchBox",emits:["close"],setup(a,{emit:e}){var O,A;const t=e,s=xe(),n=xe(),r=xe(is),i=ss(),{activate:o}=Rs(s,{immediate:!0,allowOutsideClick:!0,clickOutsideDeactivates:!0,escapeDeactivates:!0}),{localeIndex:l,theme:c}=i,h=tt(async()=>{var v,p,_,F,z,P,j,I,K;return rt(ue.loadJSON((_=await((p=(v=r.value)[l.value])==null?void 0:p.call(v)))==null?void 0:_.default,{fields:["title","titles","text"],storeFields:["title","titles"],searchOptions:{fuzzy:.2,prefix:!0,boost:{title:4,text:2,titles:1},...((F=c.value.search)==null?void 0:F.provider)==="local"&&((P=(z=c.value.search.options)==null?void 0:z.miniSearch)==null?void 0:P.searchOptions)},...((j=c.value.search)==null?void 0:j.provider)==="local"&&((K=(I=c.value.search.options)==null?void 0:I.miniSearch)==null?void 0:K.options)}))}),f=me(()=>{var v,p;return((v=c.value.search)==null?void 0:v.provider)==="local"&&((p=c.value.search.options)==null?void 0:p.disableQueryPersistence)===!0}).value?ie(""):Dt("vitepress:local-search-filter",""),b=zt("vitepress:local-search-detailed-list",((O=c.value.search)==null?void 0:O.provider)==="local"&&((A=c.value.search.options)==null?void 0:A.detailedView)===!0),y=me(()=>{var v,p,_;return((v=c.value.search)==null?void 0:v.provider)==="local"&&(((p=c.value.search.options)==null?void 0:p.disableDetailedView)===!0||((_=c.value.search.options)==null?void 0:_.detailedView)===!1)}),x=me(()=>{var p,_,F,z,P,j,I;const v=((p=c.value.search)==null?void 0:p.options)??c.value.algolia;return((P=(z=(F=(_=v==null?void 0:v.locales)==null?void 0:_[l.value])==null?void 0:F.translations)==null?void 0:z.button)==null?void 0:P.buttonText)||((I=(j=v==null?void 0:v.translations)==null?void 0:j.button)==null?void 0:I.buttonText)||"Search"});Pt(()=>{y.value&&(b.value=!1)});const w=xe([]),R=ie(!1);$e(f,()=>{R.value=!1});const C=tt(async()=>{if(n.value)return rt(new Ms(n.value))},null),J=new Js(16);jt(()=>[h.value,f.value,b.value],async([v,p,_],F,z)=>{var ee,ye,Ge,He;(F==null?void 0:F[0])!==v&&J.clear();let P=!1;if(z(()=>{P=!0}),!v)return;w.value=v.search(p).slice(0,16),R.value=!0;const j=_?await Promise.all(w.value.map(B=>Q(B.id))):[];if(P)return;for(const{id:B,mod:te}of j){const se=B.slice(0,B.indexOf("#"));let Y=J.get(se);if(Y)continue;Y=new Map,J.set(se,Y);const G=te.default??te;if(G!=null&&G.render||G!=null&&G.setup){const ne=Yt(G);ne.config.warnHandler=()=>{},ne.provide(Zt,i),Object.defineProperties(ne.config.globalProperties,{$frontmatter:{get(){return i.frontmatter.value}},$params:{get(){return i.page.value.params}}});const Qe=document.createElement("div");ne.mount(Qe),Qe.querySelectorAll("h1, h2, h3, h4, h5, h6").forEach(de=>{var Xe;const we=(Xe=de.querySelector("a"))==null?void 0:Xe.getAttribute("href"),Ye=(we==null?void 0:we.startsWith("#"))&&we.slice(1);if(!Ye)return;let Ze="";for(;(de=de.nextElementSibling)&&!/^h[1-6]$/i.test(de.tagName);)Ze+=de.outerHTML;Y.set(Ye,Ze)}),ne.unmount()}if(P)return}const I=new Set;if(w.value=w.value.map(B=>{const[te,se]=B.id.split("#"),Y=J.get(te),G=(Y==null?void 0:Y.get(se))??"";for(const ne in B.match)I.add(ne);return{...B,text:G}}),await he(),P)return;await new Promise(B=>{var te;(te=C.value)==null||te.unmark({done:()=>{var se;(se=C.value)==null||se.markRegExp(T(I),{done:B})}})});const K=((ee=s.value)==null?void 0:ee.querySelectorAll(".result .excerpt"))??[];for(const B of K)(ye=B.querySelector('mark[data-markjs="true"]'))==null||ye.scrollIntoView({block:"center"});(He=(Ge=n.value)==null?void 0:Ge.firstElementChild)==null||He.scrollIntoView({block:"start"})},{debounce:200,immediate:!0});async function Q(v){const p=Xt(v.slice(0,v.indexOf("#")));try{if(!p)throw new Error(`Cannot find file for id: ${v}`);return{id:v,mod:await import(p)}}catch(_){return console.error(_),{id:v,mod:{}}}}const W=ie(),V=me(()=>{var v;return((v=f.value)==null?void 0:v.length)<=0});function $(v=!0){var p,_;(p=W.value)==null||p.focus(),v&&((_=W.value)==null||_.select())}Ae(()=>{$()});function be(v){v.pointerType==="mouse"&&$()}const M=ie(-1),U=ie(!0);$e(w,v=>{M.value=v.length?0:-1,q()});function q(){he(()=>{const v=document.querySelector(".result.selected");v==null||v.scrollIntoView({block:"nearest"})})}Se("ArrowUp",v=>{v.preventDefault(),M.value--,M.value<0&&(M.value=w.value.length-1),U.value=!0,q()}),Se("ArrowDown",v=>{v.preventDefault(),M.value++,M.value>=w.value.length&&(M.value=0),U.value=!0,q()});const k=Vt();Se("Enter",v=>{if(v.isComposing||v.target instanceof HTMLButtonElement&&v.target.type!=="submit")return;const p=w.value[M.value];if(v.target instanceof HTMLInputElement&&!p){v.preventDefault();return}p&&(k.go(p.id),t("close"))}),Se("Escape",()=>{t("close")});const u=ns({modal:{displayDetails:"Display detailed list",resetButtonTitle:"Reset search",backButtonTitle:"Close search",noResultsText:"No results for",footer:{selectText:"to select",selectKeyAriaLabel:"enter",navigateText:"to navigate",navigateUpKeyAriaLabel:"up arrow",navigateDownKeyAriaLabel:"down arrow",closeText:"to close",closeKeyAriaLabel:"escape"}}});Ae(()=>{window.history.pushState(null,"",null)}),$t("popstate",v=>{v.preventDefault(),t("close")});const g=Bt(Wt?document.body:null);Ae(()=>{he(()=>{g.value=!0,he().then(()=>o())})}),Kt(()=>{g.value=!1});function E(){f.value="",he().then(()=>$(!1))}function T(v){return new RegExp([...v].sort((p,_)=>_.length-p.length).map(p=>`(${es(p)})`).join("|"),"gi")}function N(v){var F;if(!U.value)return;const p=(F=v.target)==null?void 0:F.closest(".result"),_=Number.parseInt(p==null?void 0:p.dataset.index);_>=0&&_!==M.value&&(M.value=_),U.value=!1}return(v,p)=>{var _,F,z,P,j;return H(),Jt(Qt,{to:"body"},[S("div",{ref_key:"el",ref:s,role:"button","aria-owns":(_=w.value)!=null&&_.length?"localsearch-list":void 0,"aria-expanded":"true","aria-haspopup":"listbox","aria-labelledby":"localsearch-label",class:"VPLocalSearchBox"},[S("div",{class:"backdrop",onClick:p[0]||(p[0]=I=>v.$emit("close"))}),S("div",qs,[S("form",{class:"search-bar",onPointerup:p[4]||(p[4]=I=>be(I)),onSubmit:p[5]||(p[5]=Ut(()=>{},["prevent"]))},[S("label",{title:x.value,id:"localsearch-label",for:"localsearch-input"},p[7]||(p[7]=[S("span",{"aria-hidden":"true",class:"vpi-search search-icon local-search-icon"},null,-1)]),8,Gs),S("div",Hs,[S("button",{class:"back-button",title:L(u)("modal.backButtonTitle"),onClick:p[1]||(p[1]=I=>v.$emit("close"))},p[8]||(p[8]=[S("span",{class:"vpi-arrow-left local-search-icon"},null,-1)]),8,Qs)]),qt(S("input",{ref_key:"searchInput",ref:W,"onUpdate:modelValue":p[2]||(p[2]=I=>Ht(f)?f.value=I:null),"aria-activedescendant":M.value>-1?"localsearch-item-"+M.value:void 0,"aria-autocomplete":"both","aria-controls":(F=w.value)!=null&&F.length?"localsearch-list":void 0,"aria-labelledby":"localsearch-label",autocapitalize:"off",autocomplete:"off",autocorrect:"off",class:"search-input",id:"localsearch-input",enterkeyhint:"go",maxlength:"64",placeholder:x.value,spellcheck:"false",type:"search"},null,8,Ys),[[Gt,L(f)]]),S("div",Zs,[y.value?_e("",!0):(H(),Z("button",{key:0,class:st(["toggle-layout-button",{"detailed-list":L(b)}]),type:"button",title:L(u)("modal.displayDetails"),onClick:p[3]||(p[3]=I=>M.value>-1&&(b.value=!L(b)))},p[9]||(p[9]=[S("span",{class:"vpi-layout-list local-search-icon"},null,-1)]),10,Xs)),S("button",{class:"clear-button",type:"reset",disabled:V.value,title:L(u)("modal.resetButtonTitle"),onClick:E},p[10]||(p[10]=[S("span",{class:"vpi-delete local-search-icon"},null,-1)]),8,en)])],32),S("ul",{ref_key:"resultsEl",ref:n,id:(z=w.value)!=null&&z.length?"localsearch-list":void 0,role:(P=w.value)!=null&&P.length?"listbox":void 0,"aria-labelledby":(j=w.value)!=null&&j.length?"localsearch-label":void 0,class:"results",onMousemove:N},[(H(!0),Z(it,null,nt(w.value,(I,K)=>(H(),Z("li",{key:I.id,id:"localsearch-item-"+K,"aria-selected":M.value===K?"true":"false",role:"option"},[S("a",{href:I.id,class:st(["result",{selected:M.value===K}]),"aria-label":[...I.titles,I.title].join(" > "),onMouseenter:ee=>!U.value&&(M.value=K),onFocusin:ee=>M.value=K,onClick:p[6]||(p[6]=ee=>v.$emit("close")),"data-index":K},[S("div",null,[S("div",rn,[p[12]||(p[12]=S("span",{class:"title-icon"},"#",-1)),(H(!0),Z(it,null,nt(I.titles,(ee,ye)=>(H(),Z("span",{key:ye,class:"title"},[S("span",{class:"text",innerHTML:ee},null,8,an),p[11]||(p[11]=S("span",{class:"vpi-chevron-right local-search-icon"},null,-1))]))),128)),S("span",on,[S("span",{class:"text",innerHTML:I.title},null,8,ln)])]),L(b)?(H(),Z("div",cn,[I.text?(H(),Z("div",un,[S("div",{class:"vp-doc",innerHTML:I.text},null,8,dn)])):_e("",!0),p[13]||(p[13]=S("div",{class:"excerpt-gradient-bottom"},null,-1)),p[14]||(p[14]=S("div",{class:"excerpt-gradient-top"},null,-1))])):_e("",!0)])],42,nn)],8,sn))),128)),L(f)&&!w.value.length&&R.value?(H(),Z("li",hn,[fe(pe(L(u)("modal.noResultsText"))+' "',1),S("strong",null,pe(L(f)),1),p[15]||(p[15]=fe('" '))])):_e("",!0)],40,tn),S("div",fn,[S("span",null,[S("kbd",{"aria-label":L(u)("modal.footer.navigateUpKeyAriaLabel")},p[16]||(p[16]=[S("span",{class:"vpi-arrow-up navigate-icon"},null,-1)]),8,pn),S("kbd",{"aria-label":L(u)("modal.footer.navigateDownKeyAriaLabel")},p[17]||(p[17]=[S("span",{class:"vpi-arrow-down navigate-icon"},null,-1)]),8,vn),fe(" "+pe(L(u)("modal.footer.navigateText")),1)]),S("span",null,[S("kbd",{"aria-label":L(u)("modal.footer.selectKeyAriaLabel")},p[18]||(p[18]=[S("span",{class:"vpi-corner-down-left navigate-icon"},null,-1)]),8,mn),fe(" "+pe(L(u)("modal.footer.selectText")),1)]),S("span",null,[S("kbd",{"aria-label":L(u)("modal.footer.closeKeyAriaLabel")},"esc",8,gn),fe(" "+pe(L(u)("modal.footer.closeText")),1)])])])],8,Us)])}}}),En=ts(bn,[["__scopeId","data-v-d42b7272"]]);export{En as default}; diff --git a/assets/chunks/arc.DjT8Zpi0.js b/assets/chunks/arc.DjT8Zpi0.js new file mode 100644 index 000000000..95a771728 --- /dev/null +++ b/assets/chunks/arc.DjT8Zpi0.js @@ -0,0 +1 @@ +import{L as ln,M as un,N as y,O as tn,P as X,Q as O,R as _,S as an,T as rn,V as $,W as o,X as N,Y as sn,Z as on,$ as fn}from"../app.D0Wo8w0i.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function dn(l){return l.endAngle}function mn(l){return l&&l.padAngle}function pn(l,h,D,S,v,R,Q,u){var E=D-l,i=S-h,n=Q-v,d=u-R,a=d*E-n*i;if(!(a*ar*r+W*W&&(L=w,M=p),{cx:L,cy:M,x01:-n,y01:-d,x11:L*(v/T-1),y11:M*(v/T-1)}}function hn(){var l=cn,h=yn,D=N(0),S=null,v=gn,R=dn,Q=mn,u=null,E=ln(i);function i(){var n,d,a=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-un,c=R.apply(this,arguments)-un,V=an(c-f),t=c>f;if(u||(u=n=E()),sy))u.moveTo(0,0);else if(V>tn-y)u.moveTo(s*X(f),s*O(f)),u.arc(0,0,s,f,c,!t),a>y&&(u.moveTo(a*X(c),a*O(c)),u.arc(0,0,a,c,f,t));else{var m=f,g=c,A=f,T=c,P=V,I=V,L=Q.apply(this,arguments)/2,M=L>y&&(S?+S.apply(this,arguments):$(a*a+s*s)),w=_(an(s-a)/2,+D.apply(this,arguments)),p=w,x=w,e,r;if(M>y){var W=sn(M/a*O(L)),j=sn(M/s*O(L));(P-=W*2)>y?(W*=t?1:-1,A+=W,T-=W):(P=0,A=T=(f+c)/2),(I-=j*2)>y?(j*=t?1:-1,m+=j,g-=j):(I=0,m=g=(f+c)/2)}var Y=s*X(m),Z=s*O(m),z=a*X(T),B=a*O(T);if(w>y){var C=s*X(g),F=s*O(g),H=a*X(A),J=a*O(A),q;if(Vy?x>y?(e=G(H,J,Y,Z,s,x,t),r=G(C,F,z,B,s,x,t),u.moveTo(e.cx+e.x01,e.cy+e.y01),xy)||!(P>y)?u.lineTo(z,B):p>y?(e=G(z,B,C,F,a,-p,t),r=G(Y,Z,H,J,a,-p,t),u.lineTo(e.cx+e.x01,e.cy+e.y01),ph?(this.rect.x-=(this.labelWidth-h)/2,this.setWidth(this.labelWidth)):this.labelPosHorizontal=="right"&&this.setWidth(h+this.labelWidth)),this.labelHeight&&(this.labelPosVertical=="top"?(this.rect.y-=this.labelHeight,this.setHeight(o+this.labelHeight)):this.labelPosVertical=="center"&&this.labelHeight>o?(this.rect.y-=(this.labelHeight-o)/2,this.setHeight(this.labelHeight)):this.labelPosVertical=="bottom"&&this.setHeight(o+this.labelHeight))}}},a.prototype.getInclusionTreeDepth=function(){if(this.inclusionTreeDepth==s.MAX_VALUE)throw"assert failed";return this.inclusionTreeDepth},a.prototype.transform=function(t){var h=this.rect.x;h>r.WORLD_BOUNDARY?h=r.WORLD_BOUNDARY:h<-r.WORLD_BOUNDARY&&(h=-r.WORLD_BOUNDARY);var o=this.rect.y;o>r.WORLD_BOUNDARY?o=r.WORLD_BOUNDARY:o<-r.WORLD_BOUNDARY&&(o=-r.WORLD_BOUNDARY);var c=new f(h,o),l=t.inverseTransformPoint(c);this.setLocation(l.x,l.y)},a.prototype.getLeft=function(){return this.rect.x},a.prototype.getRight=function(){return this.rect.x+this.rect.width},a.prototype.getTop=function(){return this.rect.y},a.prototype.getBottom=function(){return this.rect.y+this.rect.height},a.prototype.getParent=function(){return this.owner==null?null:this.owner.getParent()},A.exports=a},function(A,G,N){var g=N(0);function s(){}for(var i in g)s[i]=g[i];s.MAX_ITERATIONS=2500,s.DEFAULT_EDGE_LENGTH=50,s.DEFAULT_SPRING_STRENGTH=.45,s.DEFAULT_REPULSION_STRENGTH=4500,s.DEFAULT_GRAVITY_STRENGTH=.4,s.DEFAULT_COMPOUND_GRAVITY_STRENGTH=1,s.DEFAULT_GRAVITY_RANGE_FACTOR=3.8,s.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=1.5,s.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION=!0,s.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION=!0,s.DEFAULT_COOLING_FACTOR_INCREMENTAL=.3,s.COOLING_ADAPTATION_FACTOR=.33,s.ADAPTATION_LOWER_NODE_LIMIT=1e3,s.ADAPTATION_UPPER_NODE_LIMIT=5e3,s.MAX_NODE_DISPLACEMENT_INCREMENTAL=100,s.MAX_NODE_DISPLACEMENT=s.MAX_NODE_DISPLACEMENT_INCREMENTAL*3,s.MIN_REPULSION_DIST=s.DEFAULT_EDGE_LENGTH/10,s.CONVERGENCE_CHECK_PERIOD=100,s.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=.1,s.MIN_EDGE_LENGTH=1,s.GRID_CALCULATION_CHECK_PERIOD=10,A.exports=s},function(A,G,N){function g(s,i){s==null&&i==null?(this.x=0,this.y=0):(this.x=s,this.y=i)}g.prototype.getX=function(){return this.x},g.prototype.getY=function(){return this.y},g.prototype.setX=function(s){this.x=s},g.prototype.setY=function(s){this.y=s},g.prototype.getDifference=function(s){return new DimensionD(this.x-s.x,this.y-s.y)},g.prototype.getCopy=function(){return new g(this.x,this.y)},g.prototype.translate=function(s){return this.x+=s.width,this.y+=s.height,this},A.exports=g},function(A,G,N){var g=N(2),s=N(10),i=N(0),r=N(7),e=N(3),f=N(1),a=N(13),y=N(12),t=N(11);function h(c,l,T){g.call(this,T),this.estimatedSize=s.MIN_VALUE,this.margin=i.DEFAULT_GRAPH_MARGIN,this.edges=[],this.nodes=[],this.isConnected=!1,this.parent=c,l!=null&&l instanceof r?this.graphManager=l:l!=null&&l instanceof Layout&&(this.graphManager=l.graphManager)}h.prototype=Object.create(g.prototype);for(var o in g)h[o]=g[o];h.prototype.getNodes=function(){return this.nodes},h.prototype.getEdges=function(){return this.edges},h.prototype.getGraphManager=function(){return this.graphManager},h.prototype.getParent=function(){return this.parent},h.prototype.getLeft=function(){return this.left},h.prototype.getRight=function(){return this.right},h.prototype.getTop=function(){return this.top},h.prototype.getBottom=function(){return this.bottom},h.prototype.isConnected=function(){return this.isConnected},h.prototype.add=function(c,l,T){if(l==null&&T==null){var u=c;if(this.graphManager==null)throw"Graph has no graph mgr!";if(this.getNodes().indexOf(u)>-1)throw"Node already in graph!";return u.owner=this,this.getNodes().push(u),u}else{var d=c;if(!(this.getNodes().indexOf(l)>-1&&this.getNodes().indexOf(T)>-1))throw"Source or target not in graph!";if(!(l.owner==T.owner&&l.owner==this))throw"Both owners must be this graph!";return l.owner!=T.owner?null:(d.source=l,d.target=T,d.isInterGraph=!1,this.getEdges().push(d),l.edges.push(d),T!=l&&T.edges.push(d),d)}},h.prototype.remove=function(c){var l=c;if(c instanceof e){if(l==null)throw"Node is null!";if(!(l.owner!=null&&l.owner==this))throw"Owner graph is invalid!";if(this.graphManager==null)throw"Owner graph manager is invalid!";for(var T=l.edges.slice(),u,d=T.length,L=0;L-1&&P>-1))throw"Source and/or target doesn't know this edge!";u.source.edges.splice(M,1),u.target!=u.source&&u.target.edges.splice(P,1);var F=u.source.owner.getEdges().indexOf(u);if(F==-1)throw"Not in owner's edge list!";u.source.owner.getEdges().splice(F,1)}},h.prototype.updateLeftTop=function(){for(var c=s.MAX_VALUE,l=s.MAX_VALUE,T,u,d,L=this.getNodes(),F=L.length,M=0;MT&&(c=T),l>u&&(l=u)}return c==s.MAX_VALUE?null:(L[0].getParent().paddingLeft!=null?d=L[0].getParent().paddingLeft:d=this.margin,this.left=l-d,this.top=c-d,new y(this.left,this.top))},h.prototype.updateBounds=function(c){for(var l=s.MAX_VALUE,T=-s.MAX_VALUE,u=s.MAX_VALUE,d=-s.MAX_VALUE,L,F,M,P,J,V=this.nodes,Q=V.length,D=0;DL&&(l=L),TM&&(u=M),dL&&(l=L),TM&&(u=M),d=this.nodes.length){var Q=0;T.forEach(function(D){D.owner==c&&Q++}),Q==this.nodes.length&&(this.isConnected=!0)}},A.exports=h},function(A,G,N){var g,s=N(1);function i(r){g=N(6),this.layout=r,this.graphs=[],this.edges=[]}i.prototype.addRoot=function(){var r=this.layout.newGraph(),e=this.layout.newNode(null),f=this.add(r,e);return this.setRootGraph(f),this.rootGraph},i.prototype.add=function(r,e,f,a,y){if(f==null&&a==null&&y==null){if(r==null)throw"Graph is null!";if(e==null)throw"Parent node is null!";if(this.graphs.indexOf(r)>-1)throw"Graph already in this graph mgr!";if(this.graphs.push(r),r.parent!=null)throw"Already has a parent!";if(e.child!=null)throw"Already has a child!";return r.parent=e,e.child=r,r}else{y=f,a=e,f=r;var t=a.getOwner(),h=y.getOwner();if(!(t!=null&&t.getGraphManager()==this))throw"Source not in this graph mgr!";if(!(h!=null&&h.getGraphManager()==this))throw"Target not in this graph mgr!";if(t==h)return f.isInterGraph=!1,t.add(f,a,y);if(f.isInterGraph=!0,f.source=a,f.target=y,this.edges.indexOf(f)>-1)throw"Edge already in inter-graph edge list!";if(this.edges.push(f),!(f.source!=null&&f.target!=null))throw"Edge source and/or target is null!";if(!(f.source.edges.indexOf(f)==-1&&f.target.edges.indexOf(f)==-1))throw"Edge already in source and/or target incidency list!";return f.source.edges.push(f),f.target.edges.push(f),f}},i.prototype.remove=function(r){if(r instanceof g){var e=r;if(e.getGraphManager()!=this)throw"Graph not in this graph mgr";if(!(e==this.rootGraph||e.parent!=null&&e.parent.graphManager==this))throw"Invalid parent node!";var f=[];f=f.concat(e.getEdges());for(var a,y=f.length,t=0;t=r.getRight()?e[0]+=Math.min(r.getX()-i.getX(),i.getRight()-r.getRight()):r.getX()<=i.getX()&&r.getRight()>=i.getRight()&&(e[0]+=Math.min(i.getX()-r.getX(),r.getRight()-i.getRight())),i.getY()<=r.getY()&&i.getBottom()>=r.getBottom()?e[1]+=Math.min(r.getY()-i.getY(),i.getBottom()-r.getBottom()):r.getY()<=i.getY()&&r.getBottom()>=i.getBottom()&&(e[1]+=Math.min(i.getY()-r.getY(),r.getBottom()-i.getBottom()));var y=Math.abs((r.getCenterY()-i.getCenterY())/(r.getCenterX()-i.getCenterX()));r.getCenterY()===i.getCenterY()&&r.getCenterX()===i.getCenterX()&&(y=1);var t=y*e[0],h=e[1]/y;e[0]t)return e[0]=f,e[1]=o,e[2]=y,e[3]=V,!1;if(ay)return e[0]=h,e[1]=a,e[2]=P,e[3]=t,!1;if(fy?(e[0]=l,e[1]=T,n=!0):(e[0]=c,e[1]=o,n=!0):v===p&&(f>y?(e[0]=h,e[1]=o,n=!0):(e[0]=u,e[1]=T,n=!0)),-E===p?y>f?(e[2]=J,e[3]=V,m=!0):(e[2]=P,e[3]=M,m=!0):E===p&&(y>f?(e[2]=F,e[3]=M,m=!0):(e[2]=Q,e[3]=V,m=!0)),n&&m)return!1;if(f>y?a>t?(I=this.getCardinalDirection(v,p,4),w=this.getCardinalDirection(E,p,2)):(I=this.getCardinalDirection(-v,p,3),w=this.getCardinalDirection(-E,p,1)):a>t?(I=this.getCardinalDirection(-v,p,1),w=this.getCardinalDirection(-E,p,3)):(I=this.getCardinalDirection(v,p,2),w=this.getCardinalDirection(E,p,4)),!n)switch(I){case 1:H=o,R=f+-L/p,e[0]=R,e[1]=H;break;case 2:R=u,H=a+d*p,e[0]=R,e[1]=H;break;case 3:H=T,R=f+L/p,e[0]=R,e[1]=H;break;case 4:R=l,H=a+-d*p,e[0]=R,e[1]=H;break}if(!m)switch(w){case 1:k=M,x=y+-rt/p,e[2]=x,e[3]=k;break;case 2:x=Q,k=t+D*p,e[2]=x,e[3]=k;break;case 3:k=V,x=y+rt/p,e[2]=x,e[3]=k;break;case 4:x=J,k=t+-D*p,e[2]=x,e[3]=k;break}}return!1},s.getCardinalDirection=function(i,r,e){return i>r?e:1+e%4},s.getIntersection=function(i,r,e,f){if(f==null)return this.getIntersection2(i,r,e);var a=i.x,y=i.y,t=r.x,h=r.y,o=e.x,c=e.y,l=f.x,T=f.y,u=void 0,d=void 0,L=void 0,F=void 0,M=void 0,P=void 0,J=void 0,V=void 0,Q=void 0;return L=h-y,M=a-t,J=t*y-a*h,F=T-c,P=o-l,V=l*c-o*T,Q=L*P-F*M,Q===0?null:(u=(M*V-P*J)/Q,d=(F*J-L*V)/Q,new g(u,d))},s.angleOfVector=function(i,r,e,f){var a=void 0;return i!==e?(a=Math.atan((f-r)/(e-i)),e=0){var T=(-o+Math.sqrt(o*o-4*h*c))/(2*h),u=(-o-Math.sqrt(o*o-4*h*c))/(2*h),d=null;return T>=0&&T<=1?[T]:u>=0&&u<=1?[u]:d}else return null},s.HALF_PI=.5*Math.PI,s.ONE_AND_HALF_PI=1.5*Math.PI,s.TWO_PI=2*Math.PI,s.THREE_PI=3*Math.PI,A.exports=s},function(A,G,N){function g(){}g.sign=function(s){return s>0?1:s<0?-1:0},g.floor=function(s){return s<0?Math.ceil(s):Math.floor(s)},g.ceil=function(s){return s<0?Math.floor(s):Math.ceil(s)},A.exports=g},function(A,G,N){function g(){}g.MAX_VALUE=2147483647,g.MIN_VALUE=-2147483648,A.exports=g},function(A,G,N){var g=function(){function a(y,t){for(var h=0;h"u"?"undefined":g(i);return i==null||r!="object"&&r!="function"},A.exports=s},function(A,G,N){function g(o){if(Array.isArray(o)){for(var c=0,l=Array(o.length);c0&&c;){for(L.push(M[0]);L.length>0&&c;){var P=L[0];L.splice(0,1),d.add(P);for(var J=P.getEdges(),u=0;u-1&&M.splice(rt,1)}d=new Set,F=new Map}}return o},h.prototype.createDummyNodesForBendpoints=function(o){for(var c=[],l=o.source,T=this.graphManager.calcLowestCommonAncestor(o.source,o.target),u=0;u0){for(var T=this.edgeToDummyNodes.get(l),u=0;u=0&&c.splice(V,1);var Q=F.getNeighborsList();Q.forEach(function(n){if(l.indexOf(n)<0){var m=T.get(n),v=m-1;v==1&&P.push(n),T.set(n,v)}})}l=l.concat(P),(c.length==1||c.length==2)&&(u=!0,d=c[0])}return d},h.prototype.setGraphManager=function(o){this.graphManager=o},A.exports=h},function(A,G,N){function g(){}g.seed=1,g.x=0,g.nextDouble=function(){return g.x=Math.sin(g.seed++)*1e4,g.x-Math.floor(g.x)},A.exports=g},function(A,G,N){var g=N(5);function s(i,r){this.lworldOrgX=0,this.lworldOrgY=0,this.ldeviceOrgX=0,this.ldeviceOrgY=0,this.lworldExtX=1,this.lworldExtY=1,this.ldeviceExtX=1,this.ldeviceExtY=1}s.prototype.getWorldOrgX=function(){return this.lworldOrgX},s.prototype.setWorldOrgX=function(i){this.lworldOrgX=i},s.prototype.getWorldOrgY=function(){return this.lworldOrgY},s.prototype.setWorldOrgY=function(i){this.lworldOrgY=i},s.prototype.getWorldExtX=function(){return this.lworldExtX},s.prototype.setWorldExtX=function(i){this.lworldExtX=i},s.prototype.getWorldExtY=function(){return this.lworldExtY},s.prototype.setWorldExtY=function(i){this.lworldExtY=i},s.prototype.getDeviceOrgX=function(){return this.ldeviceOrgX},s.prototype.setDeviceOrgX=function(i){this.ldeviceOrgX=i},s.prototype.getDeviceOrgY=function(){return this.ldeviceOrgY},s.prototype.setDeviceOrgY=function(i){this.ldeviceOrgY=i},s.prototype.getDeviceExtX=function(){return this.ldeviceExtX},s.prototype.setDeviceExtX=function(i){this.ldeviceExtX=i},s.prototype.getDeviceExtY=function(){return this.ldeviceExtY},s.prototype.setDeviceExtY=function(i){this.ldeviceExtY=i},s.prototype.transformX=function(i){var r=0,e=this.lworldExtX;return e!=0&&(r=this.ldeviceOrgX+(i-this.lworldOrgX)*this.ldeviceExtX/e),r},s.prototype.transformY=function(i){var r=0,e=this.lworldExtY;return e!=0&&(r=this.ldeviceOrgY+(i-this.lworldOrgY)*this.ldeviceExtY/e),r},s.prototype.inverseTransformX=function(i){var r=0,e=this.ldeviceExtX;return e!=0&&(r=this.lworldOrgX+(i-this.ldeviceOrgX)*this.lworldExtX/e),r},s.prototype.inverseTransformY=function(i){var r=0,e=this.ldeviceExtY;return e!=0&&(r=this.lworldOrgY+(i-this.ldeviceOrgY)*this.lworldExtY/e),r},s.prototype.inverseTransformPoint=function(i){var r=new g(this.inverseTransformX(i.x),this.inverseTransformY(i.y));return r},A.exports=s},function(A,G,N){function g(t){if(Array.isArray(t)){for(var h=0,o=Array(t.length);hi.ADAPTATION_LOWER_NODE_LIMIT&&(this.coolingFactor=Math.max(this.coolingFactor*i.COOLING_ADAPTATION_FACTOR,this.coolingFactor-(t-i.ADAPTATION_LOWER_NODE_LIMIT)/(i.ADAPTATION_UPPER_NODE_LIMIT-i.ADAPTATION_LOWER_NODE_LIMIT)*this.coolingFactor*(1-i.COOLING_ADAPTATION_FACTOR))),this.maxNodeDisplacement=i.MAX_NODE_DISPLACEMENT_INCREMENTAL):(t>i.ADAPTATION_LOWER_NODE_LIMIT?this.coolingFactor=Math.max(i.COOLING_ADAPTATION_FACTOR,1-(t-i.ADAPTATION_LOWER_NODE_LIMIT)/(i.ADAPTATION_UPPER_NODE_LIMIT-i.ADAPTATION_LOWER_NODE_LIMIT)*(1-i.COOLING_ADAPTATION_FACTOR)):this.coolingFactor=1,this.initialCoolingFactor=this.coolingFactor,this.maxNodeDisplacement=i.MAX_NODE_DISPLACEMENT),this.maxIterations=Math.max(this.getAllNodes().length*5,this.maxIterations),this.displacementThresholdPerNode=3*i.DEFAULT_EDGE_LENGTH/100,this.totalDisplacementThreshold=this.displacementThresholdPerNode*this.getAllNodes().length,this.repulsionRange=this.calcRepulsionRange()},a.prototype.calcSpringForces=function(){for(var t=this.getAllEdges(),h,o=0;o0&&arguments[0]!==void 0?arguments[0]:!0,h=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,o,c,l,T,u=this.getAllNodes(),d;if(this.useFRGridVariant)for(this.totalIterations%i.GRID_CALCULATION_CHECK_PERIOD==1&&t&&this.updateGrid(),d=new Set,o=0;oL||d>L)&&(t.gravitationForceX=-this.gravityConstant*l,t.gravitationForceY=-this.gravityConstant*T)):(L=h.getEstimatedSize()*this.compoundGravityRangeFactor,(u>L||d>L)&&(t.gravitationForceX=-this.gravityConstant*l*this.compoundGravityConstant,t.gravitationForceY=-this.gravityConstant*T*this.compoundGravityConstant))},a.prototype.isConverged=function(){var t,h=!1;return this.totalIterations>this.maxIterations/3&&(h=Math.abs(this.totalDisplacement-this.oldTotalDisplacement)<2),t=this.totalDisplacement=u.length||L>=u[0].length)){for(var F=0;Fa}}]),e}();A.exports=r},function(A,G,N){function g(){}g.svd=function(s){this.U=null,this.V=null,this.s=null,this.m=0,this.n=0,this.m=s.length,this.n=s[0].length;var i=Math.min(this.m,this.n);this.s=function(Nt){for(var Mt=[];Nt-- >0;)Mt.push(0);return Mt}(Math.min(this.m+1,this.n)),this.U=function(Nt){var Mt=function Zt(Gt){if(Gt.length==0)return 0;for(var $t=[],Ft=0;Ft0;)Mt.push(0);return Mt}(this.n),e=function(Nt){for(var Mt=[];Nt-- >0;)Mt.push(0);return Mt}(this.m),f=!0,a=Math.min(this.m-1,this.n),y=Math.max(0,Math.min(this.n-2,this.m)),t=0;t=0;E--)if(this.s[E]!==0){for(var p=E+1;p=0;W--){if(function(Nt,Mt){return Nt&&Mt}(W0;){var q=void 0,Rt=void 0;for(q=n-2;q>=-1&&q!==-1;q--)if(Math.abs(r[q])<=lt+_*(Math.abs(this.s[q])+Math.abs(this.s[q+1]))){r[q]=0;break}if(q===n-2)Rt=4;else{var Lt=void 0;for(Lt=n-1;Lt>=q&&Lt!==q;Lt--){var vt=(Lt!==n?Math.abs(r[Lt]):0)+(Lt!==q+1?Math.abs(r[Lt-1]):0);if(Math.abs(this.s[Lt])<=lt+_*vt){this.s[Lt]=0;break}}Lt===q?Rt=3:Lt===n-1?Rt=1:(Rt=2,q=Lt)}switch(q++,Rt){case 1:{var it=r[n-2];r[n-2]=0;for(var ut=n-2;ut>=q;ut--){var Tt=g.hypot(this.s[ut],it),At=this.s[ut]/Tt,Dt=it/Tt;this.s[ut]=Tt,ut!==q&&(it=-Dt*r[ut-1],r[ut-1]=At*r[ut-1]);for(var mt=0;mt=this.s[q+1]);){var Ct=this.s[q];if(this.s[q]=this.s[q+1],this.s[q+1]=Ct,qMath.abs(i)?(r=i/s,r=Math.abs(s)*Math.sqrt(1+r*r)):i!=0?(r=s/i,r=Math.abs(i)*Math.sqrt(1+r*r)):r=0,r},A.exports=g},function(A,G,N){var g=function(){function r(e,f){for(var a=0;a2&&arguments[2]!==void 0?arguments[2]:1,y=arguments.length>3&&arguments[3]!==void 0?arguments[3]:-1,t=arguments.length>4&&arguments[4]!==void 0?arguments[4]:-1;s(this,r),this.sequence1=e,this.sequence2=f,this.match_score=a,this.mismatch_penalty=y,this.gap_penalty=t,this.iMax=e.length+1,this.jMax=f.length+1,this.grid=new Array(this.iMax);for(var h=0;h=0;e--){var f=this.listeners[e];f.event===i&&f.callback===r&&this.listeners.splice(e,1)}},s.emit=function(i,r){for(var e=0;e{var G={45:(i,r,e)=>{var f={};f.layoutBase=e(551),f.CoSEConstants=e(806),f.CoSEEdge=e(767),f.CoSEGraph=e(880),f.CoSEGraphManager=e(578),f.CoSELayout=e(765),f.CoSENode=e(991),f.ConstraintHandler=e(902),i.exports=f},806:(i,r,e)=>{var f=e(551).FDLayoutConstants;function a(){}for(var y in f)a[y]=f[y];a.DEFAULT_USE_MULTI_LEVEL_SCALING=!1,a.DEFAULT_RADIAL_SEPARATION=f.DEFAULT_EDGE_LENGTH,a.DEFAULT_COMPONENT_SEPERATION=60,a.TILE=!0,a.TILING_PADDING_VERTICAL=10,a.TILING_PADDING_HORIZONTAL=10,a.TRANSFORM_ON_CONSTRAINT_HANDLING=!0,a.ENFORCE_CONSTRAINTS=!0,a.APPLY_LAYOUT=!0,a.RELAX_MOVEMENT_ON_CONSTRAINTS=!0,a.TREE_REDUCTION_ON_INCREMENTAL=!0,a.PURE_INCREMENTAL=a.DEFAULT_INCREMENTAL,i.exports=a},767:(i,r,e)=>{var f=e(551).FDLayoutEdge;function a(t,h,o){f.call(this,t,h,o)}a.prototype=Object.create(f.prototype);for(var y in f)a[y]=f[y];i.exports=a},880:(i,r,e)=>{var f=e(551).LGraph;function a(t,h,o){f.call(this,t,h,o)}a.prototype=Object.create(f.prototype);for(var y in f)a[y]=f[y];i.exports=a},578:(i,r,e)=>{var f=e(551).LGraphManager;function a(t){f.call(this,t)}a.prototype=Object.create(f.prototype);for(var y in f)a[y]=f[y];i.exports=a},765:(i,r,e)=>{var f=e(551).FDLayout,a=e(578),y=e(880),t=e(991),h=e(767),o=e(806),c=e(902),l=e(551).FDLayoutConstants,T=e(551).LayoutConstants,u=e(551).Point,d=e(551).PointD,L=e(551).DimensionD,F=e(551).Layout,M=e(551).Integer,P=e(551).IGeometry,J=e(551).LGraph,V=e(551).Transform,Q=e(551).LinkedList;function D(){f.call(this),this.toBeTiled={},this.constraints={}}D.prototype=Object.create(f.prototype);for(var rt in f)D[rt]=f[rt];D.prototype.newGraphManager=function(){var n=new a(this);return this.graphManager=n,n},D.prototype.newGraph=function(n){return new y(null,this.graphManager,n)},D.prototype.newNode=function(n){return new t(this.graphManager,n)},D.prototype.newEdge=function(n){return new h(null,null,n)},D.prototype.initParameters=function(){f.prototype.initParameters.call(this,arguments),this.isSubLayout||(o.DEFAULT_EDGE_LENGTH<10?this.idealEdgeLength=10:this.idealEdgeLength=o.DEFAULT_EDGE_LENGTH,this.useSmartIdealEdgeLengthCalculation=o.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION,this.gravityConstant=l.DEFAULT_GRAVITY_STRENGTH,this.compoundGravityConstant=l.DEFAULT_COMPOUND_GRAVITY_STRENGTH,this.gravityRangeFactor=l.DEFAULT_GRAVITY_RANGE_FACTOR,this.compoundGravityRangeFactor=l.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR,this.prunedNodesAll=[],this.growTreeIterations=0,this.afterGrowthIterations=0,this.isTreeGrowing=!1,this.isGrowthFinished=!1)},D.prototype.initSpringEmbedder=function(){f.prototype.initSpringEmbedder.call(this),this.coolingCycle=0,this.maxCoolingCycle=this.maxIterations/l.CONVERGENCE_CHECK_PERIOD,this.finalTemperature=.04,this.coolingAdjuster=1},D.prototype.layout=function(){var n=T.DEFAULT_CREATE_BENDS_AS_NEEDED;return n&&(this.createBendpoints(),this.graphManager.resetAllEdges()),this.level=0,this.classicLayout()},D.prototype.classicLayout=function(){if(this.nodesWithGravity=this.calculateNodesToApplyGravitationTo(),this.graphManager.setAllNodesToApplyGravitation(this.nodesWithGravity),this.calcNoOfChildrenForAllNodes(),this.graphManager.calcLowestCommonAncestors(),this.graphManager.calcInclusionTreeDepths(),this.graphManager.getRoot().calcEstimatedSize(),this.calcIdealEdgeLengths(),this.incremental){if(o.TREE_REDUCTION_ON_INCREMENTAL){this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var m=new Set(this.getAllNodes()),v=this.nodesWithGravity.filter(function(I){return m.has(I)});this.graphManager.setAllNodesToApplyGravitation(v)}}else{var n=this.getFlatForest();if(n.length>0)this.positionNodesRadially(n);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var m=new Set(this.getAllNodes()),v=this.nodesWithGravity.filter(function(E){return m.has(E)});this.graphManager.setAllNodesToApplyGravitation(v),this.positionNodesRandomly()}}return Object.keys(this.constraints).length>0&&(c.handleConstraints(this),this.initConstraintVariables()),this.initSpringEmbedder(),o.APPLY_LAYOUT&&this.runSpringEmbedder(),!0},D.prototype.tick=function(){if(this.totalIterations++,this.totalIterations===this.maxIterations&&!this.isTreeGrowing&&!this.isGrowthFinished)if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;if(this.totalIterations%l.CONVERGENCE_CHECK_PERIOD==0&&!this.isTreeGrowing&&!this.isGrowthFinished){if(this.isConverged())if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;this.coolingCycle++,this.layoutQuality==0?this.coolingAdjuster=this.coolingCycle:this.layoutQuality==1&&(this.coolingAdjuster=this.coolingCycle/3),this.coolingFactor=Math.max(this.initialCoolingFactor-Math.pow(this.coolingCycle,Math.log(100*(this.initialCoolingFactor-this.finalTemperature))/Math.log(this.maxCoolingCycle))/100*this.coolingAdjuster,this.finalTemperature),this.animationPeriod=Math.ceil(this.initialAnimationPeriod*Math.sqrt(this.coolingFactor))}if(this.isTreeGrowing){if(this.growTreeIterations%10==0)if(this.prunedNodesAll.length>0){this.graphManager.updateBounds(),this.updateGrid(),this.growTree(this.prunedNodesAll),this.graphManager.resetAllNodesToApplyGravitation();var n=new Set(this.getAllNodes()),m=this.nodesWithGravity.filter(function(p){return n.has(p)});this.graphManager.setAllNodesToApplyGravitation(m),this.graphManager.updateBounds(),this.updateGrid(),o.PURE_INCREMENTAL?this.coolingFactor=l.DEFAULT_COOLING_FACTOR_INCREMENTAL/2:this.coolingFactor=l.DEFAULT_COOLING_FACTOR_INCREMENTAL}else this.isTreeGrowing=!1,this.isGrowthFinished=!0;this.growTreeIterations++}if(this.isGrowthFinished){if(this.isConverged())return!0;this.afterGrowthIterations%10==0&&(this.graphManager.updateBounds(),this.updateGrid()),o.PURE_INCREMENTAL?this.coolingFactor=l.DEFAULT_COOLING_FACTOR_INCREMENTAL/2*((100-this.afterGrowthIterations)/100):this.coolingFactor=l.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var v=!this.isTreeGrowing&&!this.isGrowthFinished,E=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(v,E),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},D.prototype.getPositionsData=function(){for(var n=this.graphManager.getAllNodes(),m={},v=0;v0&&this.updateDisplacements();for(var v=0;v0&&(E.fixedNodeWeight=I)}}if(this.constraints.relativePlacementConstraint){var w=new Map,R=new Map;if(this.dummyToNodeForVerticalAlignment=new Map,this.dummyToNodeForHorizontalAlignment=new Map,this.fixedNodesOnHorizontal=new Set,this.fixedNodesOnVertical=new Set,this.fixedNodeSet.forEach(function(O){n.fixedNodesOnHorizontal.add(O),n.fixedNodesOnVertical.add(O)}),this.constraints.alignmentConstraint){if(this.constraints.alignmentConstraint.vertical)for(var H=this.constraints.alignmentConstraint.vertical,v=0;v=2*O.length/3;_--)X=Math.floor(Math.random()*(_+1)),B=O[_],O[_]=O[X],O[X]=B;return O},this.nodesInRelativeHorizontal=[],this.nodesInRelativeVertical=[],this.nodeToRelativeConstraintMapHorizontal=new Map,this.nodeToRelativeConstraintMapVertical=new Map,this.nodeToTempPositionMapHorizontal=new Map,this.nodeToTempPositionMapVertical=new Map,this.constraints.relativePlacementConstraint.forEach(function(O){if(O.left){var X=w.has(O.left)?w.get(O.left):O.left,B=w.has(O.right)?w.get(O.right):O.right;n.nodesInRelativeHorizontal.includes(X)||(n.nodesInRelativeHorizontal.push(X),n.nodeToRelativeConstraintMapHorizontal.set(X,[]),n.dummyToNodeForVerticalAlignment.has(X)?n.nodeToTempPositionMapHorizontal.set(X,n.idToNodeMap.get(n.dummyToNodeForVerticalAlignment.get(X)[0]).getCenterX()):n.nodeToTempPositionMapHorizontal.set(X,n.idToNodeMap.get(X).getCenterX())),n.nodesInRelativeHorizontal.includes(B)||(n.nodesInRelativeHorizontal.push(B),n.nodeToRelativeConstraintMapHorizontal.set(B,[]),n.dummyToNodeForVerticalAlignment.has(B)?n.nodeToTempPositionMapHorizontal.set(B,n.idToNodeMap.get(n.dummyToNodeForVerticalAlignment.get(B)[0]).getCenterX()):n.nodeToTempPositionMapHorizontal.set(B,n.idToNodeMap.get(B).getCenterX())),n.nodeToRelativeConstraintMapHorizontal.get(X).push({right:B,gap:O.gap}),n.nodeToRelativeConstraintMapHorizontal.get(B).push({left:X,gap:O.gap})}else{var _=R.has(O.top)?R.get(O.top):O.top,lt=R.has(O.bottom)?R.get(O.bottom):O.bottom;n.nodesInRelativeVertical.includes(_)||(n.nodesInRelativeVertical.push(_),n.nodeToRelativeConstraintMapVertical.set(_,[]),n.dummyToNodeForHorizontalAlignment.has(_)?n.nodeToTempPositionMapVertical.set(_,n.idToNodeMap.get(n.dummyToNodeForHorizontalAlignment.get(_)[0]).getCenterY()):n.nodeToTempPositionMapVertical.set(_,n.idToNodeMap.get(_).getCenterY())),n.nodesInRelativeVertical.includes(lt)||(n.nodesInRelativeVertical.push(lt),n.nodeToRelativeConstraintMapVertical.set(lt,[]),n.dummyToNodeForHorizontalAlignment.has(lt)?n.nodeToTempPositionMapVertical.set(lt,n.idToNodeMap.get(n.dummyToNodeForHorizontalAlignment.get(lt)[0]).getCenterY()):n.nodeToTempPositionMapVertical.set(lt,n.idToNodeMap.get(lt).getCenterY())),n.nodeToRelativeConstraintMapVertical.get(_).push({bottom:lt,gap:O.gap}),n.nodeToRelativeConstraintMapVertical.get(lt).push({top:_,gap:O.gap})}});else{var k=new Map,W=new Map;this.constraints.relativePlacementConstraint.forEach(function(O){if(O.left){var X=w.has(O.left)?w.get(O.left):O.left,B=w.has(O.right)?w.get(O.right):O.right;k.has(X)?k.get(X).push(B):k.set(X,[B]),k.has(B)?k.get(B).push(X):k.set(B,[X])}else{var _=R.has(O.top)?R.get(O.top):O.top,lt=R.has(O.bottom)?R.get(O.bottom):O.bottom;W.has(_)?W.get(_).push(lt):W.set(_,[lt]),W.has(lt)?W.get(lt).push(_):W.set(lt,[_])}});var U=function(X,B){var _=[],lt=[],q=new Q,Rt=new Set,Lt=0;return X.forEach(function(vt,it){if(!Rt.has(it)){_[Lt]=[],lt[Lt]=!1;var ut=it;for(q.push(ut),Rt.add(ut),_[Lt].push(ut);q.length!=0;){ut=q.shift(),B.has(ut)&&(lt[Lt]=!0);var Tt=X.get(ut);Tt.forEach(function(At){Rt.has(At)||(q.push(At),Rt.add(At),_[Lt].push(At))})}Lt++}}),{components:_,isFixed:lt}},et=U(k,n.fixedNodesOnHorizontal);this.componentsOnHorizontal=et.components,this.fixedComponentsOnHorizontal=et.isFixed;var z=U(W,n.fixedNodesOnVertical);this.componentsOnVertical=z.components,this.fixedComponentsOnVertical=z.isFixed}}},D.prototype.updateDisplacements=function(){var n=this;if(this.constraints.fixedNodeConstraint&&this.constraints.fixedNodeConstraint.forEach(function(z){var O=n.idToNodeMap.get(z.nodeId);O.displacementX=0,O.displacementY=0}),this.constraints.alignmentConstraint){if(this.constraints.alignmentConstraint.vertical)for(var m=this.constraints.alignmentConstraint.vertical,v=0;v1){var R;for(R=0;RE&&(E=Math.floor(w.y)),I=Math.floor(w.x+o.DEFAULT_COMPONENT_SEPERATION)}this.transform(new d(T.WORLD_CENTER_X-w.x/2,T.WORLD_CENTER_Y-w.y/2))},D.radialLayout=function(n,m,v){var E=Math.max(this.maxDiagonalInTree(n),o.DEFAULT_RADIAL_SEPARATION);D.branchRadialLayout(m,null,0,359,0,E);var p=J.calculateBounds(n),I=new V;I.setDeviceOrgX(p.getMinX()),I.setDeviceOrgY(p.getMinY()),I.setWorldOrgX(v.x),I.setWorldOrgY(v.y);for(var w=0;w1;){var B=X[0];X.splice(0,1);var _=W.indexOf(B);_>=0&&W.splice(_,1),z--,U--}m!=null?O=(W.indexOf(X[0])+1)%z:O=0;for(var lt=Math.abs(E-v)/U,q=O;et!=U;q=++q%z){var Rt=W[q].getOtherEnd(n);if(Rt!=m){var Lt=(v+et*lt)%360,vt=(Lt+lt)%360;D.branchRadialLayout(Rt,n,Lt,vt,p+I,I),et++}}},D.maxDiagonalInTree=function(n){for(var m=M.MIN_VALUE,v=0;vm&&(m=p)}return m},D.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},D.prototype.groupZeroDegreeMembers=function(){var n=this,m={};this.memberGroups={},this.idToDummyNode={};for(var v=[],E=this.graphManager.getAllNodes(),p=0;p"u"&&(m[R]=[]),m[R]=m[R].concat(I)}Object.keys(m).forEach(function(H){if(m[H].length>1){var x="DummyCompound_"+H;n.memberGroups[x]=m[H];var k=m[H][0].getParent(),W=new t(n.graphManager);W.id=x,W.paddingLeft=k.paddingLeft||0,W.paddingRight=k.paddingRight||0,W.paddingBottom=k.paddingBottom||0,W.paddingTop=k.paddingTop||0,n.idToDummyNode[x]=W;var U=n.getGraphManager().add(n.newGraph(),W),et=k.getChild();et.add(W);for(var z=0;zp?(E.rect.x-=(E.labelWidth-p)/2,E.setWidth(E.labelWidth),E.labelMarginLeft=(E.labelWidth-p)/2):E.labelPosHorizontal=="right"&&E.setWidth(p+E.labelWidth)),E.labelHeight&&(E.labelPosVertical=="top"?(E.rect.y-=E.labelHeight,E.setHeight(I+E.labelHeight),E.labelMarginTop=E.labelHeight):E.labelPosVertical=="center"&&E.labelHeight>I?(E.rect.y-=(E.labelHeight-I)/2,E.setHeight(E.labelHeight),E.labelMarginTop=(E.labelHeight-I)/2):E.labelPosVertical=="bottom"&&E.setHeight(I+E.labelHeight))}})},D.prototype.repopulateCompounds=function(){for(var n=this.compoundOrder.length-1;n>=0;n--){var m=this.compoundOrder[n],v=m.id,E=m.paddingLeft,p=m.paddingTop,I=m.labelMarginLeft,w=m.labelMarginTop;this.adjustLocations(this.tiledMemberPack[v],m.rect.x,m.rect.y,E,p,I,w)}},D.prototype.repopulateZeroDegreeMembers=function(){var n=this,m=this.tiledZeroDegreePack;Object.keys(m).forEach(function(v){var E=n.idToDummyNode[v],p=E.paddingLeft,I=E.paddingTop,w=E.labelMarginLeft,R=E.labelMarginTop;n.adjustLocations(m[v],E.rect.x,E.rect.y,p,I,w,R)})},D.prototype.getToBeTiled=function(n){var m=n.id;if(this.toBeTiled[m]!=null)return this.toBeTiled[m];var v=n.getChild();if(v==null)return this.toBeTiled[m]=!1,!1;for(var E=v.getNodes(),p=0;p0)return this.toBeTiled[m]=!1,!1;if(I.getChild()==null){this.toBeTiled[I.id]=!1;continue}if(!this.getToBeTiled(I))return this.toBeTiled[m]=!1,!1}return this.toBeTiled[m]=!0,!0},D.prototype.getNodeDegree=function(n){n.id;for(var m=n.getEdges(),v=0,E=0;Ek&&(k=U.rect.height)}v+=k+n.verticalPadding}},D.prototype.tileCompoundMembers=function(n,m){var v=this;this.tiledMemberPack=[],Object.keys(n).forEach(function(E){var p=m[E];if(v.tiledMemberPack[E]=v.tileNodes(n[E],p.paddingLeft+p.paddingRight),p.rect.width=v.tiledMemberPack[E].width,p.rect.height=v.tiledMemberPack[E].height,p.setCenter(v.tiledMemberPack[E].centerX,v.tiledMemberPack[E].centerY),p.labelMarginLeft=0,p.labelMarginTop=0,o.NODE_DIMENSIONS_INCLUDE_LABELS){var I=p.rect.width,w=p.rect.height;p.labelWidth&&(p.labelPosHorizontal=="left"?(p.rect.x-=p.labelWidth,p.setWidth(I+p.labelWidth),p.labelMarginLeft=p.labelWidth):p.labelPosHorizontal=="center"&&p.labelWidth>I?(p.rect.x-=(p.labelWidth-I)/2,p.setWidth(p.labelWidth),p.labelMarginLeft=(p.labelWidth-I)/2):p.labelPosHorizontal=="right"&&p.setWidth(I+p.labelWidth)),p.labelHeight&&(p.labelPosVertical=="top"?(p.rect.y-=p.labelHeight,p.setHeight(w+p.labelHeight),p.labelMarginTop=p.labelHeight):p.labelPosVertical=="center"&&p.labelHeight>w?(p.rect.y-=(p.labelHeight-w)/2,p.setHeight(p.labelHeight),p.labelMarginTop=(p.labelHeight-w)/2):p.labelPosVertical=="bottom"&&p.setHeight(w+p.labelHeight))}})},D.prototype.tileNodes=function(n,m){var v=this.tileNodesByFavoringDim(n,m,!0),E=this.tileNodesByFavoringDim(n,m,!1),p=this.getOrgRatio(v),I=this.getOrgRatio(E),w;return IR&&(R=z.getWidth())});var H=I/p,x=w/p,k=Math.pow(v-E,2)+4*(H+E)*(x+v)*p,W=(E-v+Math.sqrt(k))/(2*(H+E)),U;m?(U=Math.ceil(W),U==W&&U++):U=Math.floor(W);var et=U*(H+E)-E;return R>et&&(et=R),et+=E*2,et},D.prototype.tileNodesByFavoringDim=function(n,m,v){var E=o.TILING_PADDING_VERTICAL,p=o.TILING_PADDING_HORIZONTAL,I=o.TILING_COMPARE_BY,w={rows:[],rowWidth:[],rowHeight:[],width:0,height:m,verticalPadding:E,horizontalPadding:p,centerX:0,centerY:0};I&&(w.idealRowWidth=this.calcIdealRowWidth(n,v));var R=function(O){return O.rect.width*O.rect.height},H=function(O,X){return R(X)-R(O)};n.sort(function(z,O){var X=H;return w.idealRowWidth?(X=I,X(z.id,O.id)):X(z,O)});for(var x=0,k=0,W=0;W0&&(w+=n.horizontalPadding),n.rowWidth[v]=w,n.width0&&(R+=n.verticalPadding);var H=0;R>n.rowHeight[v]&&(H=n.rowHeight[v],n.rowHeight[v]=R,H=n.rowHeight[v]-H),n.height+=H,n.rows[v].push(m)},D.prototype.getShortestRowIndex=function(n){for(var m=-1,v=Number.MAX_VALUE,E=0;Ev&&(m=E,v=n.rowWidth[E]);return m},D.prototype.canAddHorizontal=function(n,m,v){if(n.idealRowWidth){var E=n.rows.length-1,p=n.rowWidth[E];return p+m+n.horizontalPadding<=n.idealRowWidth}var I=this.getShortestRowIndex(n);if(I<0)return!0;var w=n.rowWidth[I];if(w+n.horizontalPadding+m<=n.width)return!0;var R=0;n.rowHeight[I]0&&(R=v+n.verticalPadding-n.rowHeight[I]);var H;n.width-w>=m+n.horizontalPadding?H=(n.height+R)/(w+m+n.horizontalPadding):H=(n.height+R)/n.width,R=v+n.verticalPadding;var x;return n.widthI&&m!=v){E.splice(-1,1),n.rows[v].push(p),n.rowWidth[m]=n.rowWidth[m]-I,n.rowWidth[v]=n.rowWidth[v]+I,n.width=n.rowWidth[instance.getLongestRowIndex(n)];for(var w=Number.MIN_VALUE,R=0;Rw&&(w=E[R].height);m>0&&(w+=n.verticalPadding);var H=n.rowHeight[m]+n.rowHeight[v];n.rowHeight[m]=w,n.rowHeight[v]0)for(var et=p;et<=I;et++)U[0]+=this.grid[et][w-1].length+this.grid[et][w].length-1;if(I0)for(var et=w;et<=R;et++)U[3]+=this.grid[p-1][et].length+this.grid[p][et].length-1;for(var z=M.MAX_VALUE,O,X,B=0;B{var f=e(551).FDLayoutNode,a=e(551).IMath;function y(h,o,c,l){f.call(this,h,o,c,l)}y.prototype=Object.create(f.prototype);for(var t in f)y[t]=f[t];y.prototype.calculateDisplacement=function(){var h=this.graphManager.getLayout();this.getChild()!=null&&this.fixedNodeWeight?(this.displacementX+=h.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.fixedNodeWeight,this.displacementY+=h.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.fixedNodeWeight):(this.displacementX+=h.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.noOfChildren,this.displacementY+=h.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.noOfChildren),Math.abs(this.displacementX)>h.coolingFactor*h.maxNodeDisplacement&&(this.displacementX=h.coolingFactor*h.maxNodeDisplacement*a.sign(this.displacementX)),Math.abs(this.displacementY)>h.coolingFactor*h.maxNodeDisplacement&&(this.displacementY=h.coolingFactor*h.maxNodeDisplacement*a.sign(this.displacementY)),this.child&&this.child.getNodes().length>0&&this.propogateDisplacementToChildren(this.displacementX,this.displacementY)},y.prototype.propogateDisplacementToChildren=function(h,o){for(var c=this.getChild().getNodes(),l,T=0;T{function f(c){if(Array.isArray(c)){for(var l=0,T=Array(c.length);l0){var Ct=0;st.forEach(function(ht){$=="horizontal"?(tt.set(ht,u.has(ht)?d[u.get(ht)]:Z.get(ht)),Ct+=tt.get(ht)):(tt.set(ht,u.has(ht)?L[u.get(ht)]:Z.get(ht)),Ct+=tt.get(ht))}),Ct=Ct/st.length,ft.forEach(function(ht){K.has(ht)||tt.set(ht,Ct)})}else{var ct=0;ft.forEach(function(ht){$=="horizontal"?ct+=u.has(ht)?d[u.get(ht)]:Z.get(ht):ct+=u.has(ht)?L[u.get(ht)]:Z.get(ht)}),ct=ct/ft.length,ft.forEach(function(ht){tt.set(ht,ct)})}});for(var wt=function(){var st=dt.shift(),Ct=b.get(st);Ct.forEach(function(ct){if(tt.get(ct.id)ht&&(ht=qt),_tWt&&(Wt=_t)}}catch(ie){Mt=!0,Zt=ie}finally{try{!Nt&&Gt.return&&Gt.return()}finally{if(Mt)throw Zt}}var ce=(Ct+ht)/2-(ct+Wt)/2,Kt=!0,te=!1,ee=void 0;try{for(var jt=ft[Symbol.iterator](),se;!(Kt=(se=jt.next()).done);Kt=!0){var re=se.value;tt.set(re,tt.get(re)+ce)}}catch(ie){te=!0,ee=ie}finally{try{!Kt&&jt.return&&jt.return()}finally{if(te)throw ee}}})}return tt},rt=function(b){var $=0,K=0,Z=0,at=0;if(b.forEach(function(j){j.left?d[u.get(j.left)]-d[u.get(j.right)]>=0?$++:K++:L[u.get(j.top)]-L[u.get(j.bottom)]>=0?Z++:at++}),$>K&&Z>at)for(var gt=0;gtK)for(var ot=0;otat)for(var tt=0;tt1)l.fixedNodeConstraint.forEach(function(S,b){E[b]=[S.position.x,S.position.y],p[b]=[d[u.get(S.nodeId)],L[u.get(S.nodeId)]]}),I=!0;else if(l.alignmentConstraint)(function(){var S=0;if(l.alignmentConstraint.vertical){for(var b=l.alignmentConstraint.vertical,$=function(tt){var j=new Set;b[tt].forEach(function(yt){j.add(yt)});var dt=new Set([].concat(f(j)).filter(function(yt){return R.has(yt)})),wt=void 0;dt.size>0?wt=d[u.get(dt.values().next().value)]:wt=Q(j).x,b[tt].forEach(function(yt){E[S]=[wt,L[u.get(yt)]],p[S]=[d[u.get(yt)],L[u.get(yt)]],S++})},K=0;K0?wt=d[u.get(dt.values().next().value)]:wt=Q(j).y,Z[tt].forEach(function(yt){E[S]=[d[u.get(yt)],wt],p[S]=[d[u.get(yt)],L[u.get(yt)]],S++})},gt=0;gtW&&(W=k[et].length,U=et);if(W0){var mt={x:0,y:0};l.fixedNodeConstraint.forEach(function(S,b){var $={x:d[u.get(S.nodeId)],y:L[u.get(S.nodeId)]},K=S.position,Z=V(K,$);mt.x+=Z.x,mt.y+=Z.y}),mt.x/=l.fixedNodeConstraint.length,mt.y/=l.fixedNodeConstraint.length,d.forEach(function(S,b){d[b]+=mt.x}),L.forEach(function(S,b){L[b]+=mt.y}),l.fixedNodeConstraint.forEach(function(S){d[u.get(S.nodeId)]=S.position.x,L[u.get(S.nodeId)]=S.position.y})}if(l.alignmentConstraint){if(l.alignmentConstraint.vertical)for(var xt=l.alignmentConstraint.vertical,St=function(b){var $=new Set;xt[b].forEach(function(at){$.add(at)});var K=new Set([].concat(f($)).filter(function(at){return R.has(at)})),Z=void 0;K.size>0?Z=d[u.get(K.values().next().value)]:Z=Q($).x,$.forEach(function(at){R.has(at)||(d[u.get(at)]=Z)})},Vt=0;Vt0?Z=L[u.get(K.values().next().value)]:Z=Q($).y,$.forEach(function(at){R.has(at)||(L[u.get(at)]=Z)})},bt=0;bt{i.exports=A}},N={};function g(i){var r=N[i];if(r!==void 0)return r.exports;var e=N[i]={exports:{}};return G[i](e,e.exports,g),e.exports}var s=g(45);return s})()})}(pe)),pe.exports}(function(C,Y){(function(G,N){C.exports=N(cr())})(Te,function(A){return(()=>{var G={658:i=>{i.exports=Object.assign!=null?Object.assign.bind(Object):function(r){for(var e=arguments.length,f=Array(e>1?e-1:0),a=1;a{var f=function(){function t(h,o){var c=[],l=!0,T=!1,u=void 0;try{for(var d=h[Symbol.iterator](),L;!(l=(L=d.next()).done)&&(c.push(L.value),!(o&&c.length===o));l=!0);}catch(F){T=!0,u=F}finally{try{!l&&d.return&&d.return()}finally{if(T)throw u}}return c}return function(h,o){if(Array.isArray(h))return h;if(Symbol.iterator in Object(h))return t(h,o);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),a=e(140).layoutBase.LinkedList,y={};y.getTopMostNodes=function(t){for(var h={},o=0;o0&&I.merge(x)});for(var w=0;w1){L=u[0],F=L.connectedEdges().length,u.forEach(function(p){p.connectedEdges().length0&&c.set("dummy"+(c.size+1),J),V},y.relocateComponent=function(t,h,o){if(!o.fixedNodeConstraint){var c=Number.POSITIVE_INFINITY,l=Number.NEGATIVE_INFINITY,T=Number.POSITIVE_INFINITY,u=Number.NEGATIVE_INFINITY;if(o.quality=="draft"){var d=!0,L=!1,F=void 0;try{for(var M=h.nodeIndexes[Symbol.iterator](),P;!(d=(P=M.next()).done);d=!0){var J=P.value,V=f(J,2),Q=V[0],D=V[1],rt=o.cy.getElementById(Q);if(rt){var n=rt.boundingBox(),m=h.xCoords[D]-n.w/2,v=h.xCoords[D]+n.w/2,E=h.yCoords[D]-n.h/2,p=h.yCoords[D]+n.h/2;ml&&(l=v),Eu&&(u=p)}}}catch(x){L=!0,F=x}finally{try{!d&&M.return&&M.return()}finally{if(L)throw F}}var I=t.x-(l+c)/2,w=t.y-(u+T)/2;h.xCoords=h.xCoords.map(function(x){return x+I}),h.yCoords=h.yCoords.map(function(x){return x+w})}else{Object.keys(h).forEach(function(x){var k=h[x],W=k.getRect().x,U=k.getRect().x+k.getRect().width,et=k.getRect().y,z=k.getRect().y+k.getRect().height;Wl&&(l=U),etu&&(u=z)});var R=t.x-(l+c)/2,H=t.y-(u+T)/2;Object.keys(h).forEach(function(x){var k=h[x];k.setCenter(k.getCenterX()+R,k.getCenterY()+H)})}}},y.calcBoundingBox=function(t,h,o,c){for(var l=Number.MAX_SAFE_INTEGER,T=Number.MIN_SAFE_INTEGER,u=Number.MAX_SAFE_INTEGER,d=Number.MIN_SAFE_INTEGER,L=void 0,F=void 0,M=void 0,P=void 0,J=t.descendants().not(":parent"),V=J.length,Q=0;QL&&(l=L),TM&&(u=M),d{var f=e(548),a=e(140).CoSELayout,y=e(140).CoSENode,t=e(140).layoutBase.PointD,h=e(140).layoutBase.DimensionD,o=e(140).layoutBase.LayoutConstants,c=e(140).layoutBase.FDLayoutConstants,l=e(140).CoSEConstants,T=function(d,L){var F=d.cy,M=d.eles,P=M.nodes(),J=M.edges(),V=void 0,Q=void 0,D=void 0,rt={};d.randomize&&(V=L.nodeIndexes,Q=L.xCoords,D=L.yCoords);var n=function(x){return typeof x=="function"},m=function(x,k){return n(x)?x(k):x},v=f.calcParentsWithoutChildren(F,M),E=function H(x,k,W,U){for(var et=k.length,z=0;z0){var q=void 0;q=W.getGraphManager().add(W.newGraph(),B),H(q,X,W,U)}}},p=function(x,k,W){for(var U=0,et=0,z=0;z0?l.DEFAULT_EDGE_LENGTH=c.DEFAULT_EDGE_LENGTH=U/et:n(d.idealEdgeLength)?l.DEFAULT_EDGE_LENGTH=c.DEFAULT_EDGE_LENGTH=50:l.DEFAULT_EDGE_LENGTH=c.DEFAULT_EDGE_LENGTH=d.idealEdgeLength,l.MIN_REPULSION_DIST=c.MIN_REPULSION_DIST=c.DEFAULT_EDGE_LENGTH/10,l.DEFAULT_RADIAL_SEPARATION=c.DEFAULT_EDGE_LENGTH)},I=function(x,k){k.fixedNodeConstraint&&(x.constraints.fixedNodeConstraint=k.fixedNodeConstraint),k.alignmentConstraint&&(x.constraints.alignmentConstraint=k.alignmentConstraint),k.relativePlacementConstraint&&(x.constraints.relativePlacementConstraint=k.relativePlacementConstraint)};d.nestingFactor!=null&&(l.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=c.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=d.nestingFactor),d.gravity!=null&&(l.DEFAULT_GRAVITY_STRENGTH=c.DEFAULT_GRAVITY_STRENGTH=d.gravity),d.numIter!=null&&(l.MAX_ITERATIONS=c.MAX_ITERATIONS=d.numIter),d.gravityRange!=null&&(l.DEFAULT_GRAVITY_RANGE_FACTOR=c.DEFAULT_GRAVITY_RANGE_FACTOR=d.gravityRange),d.gravityCompound!=null&&(l.DEFAULT_COMPOUND_GRAVITY_STRENGTH=c.DEFAULT_COMPOUND_GRAVITY_STRENGTH=d.gravityCompound),d.gravityRangeCompound!=null&&(l.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=c.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=d.gravityRangeCompound),d.initialEnergyOnIncremental!=null&&(l.DEFAULT_COOLING_FACTOR_INCREMENTAL=c.DEFAULT_COOLING_FACTOR_INCREMENTAL=d.initialEnergyOnIncremental),d.tilingCompareBy!=null&&(l.TILING_COMPARE_BY=d.tilingCompareBy),d.quality=="proof"?o.QUALITY=2:o.QUALITY=0,l.NODE_DIMENSIONS_INCLUDE_LABELS=c.NODE_DIMENSIONS_INCLUDE_LABELS=o.NODE_DIMENSIONS_INCLUDE_LABELS=d.nodeDimensionsIncludeLabels,l.DEFAULT_INCREMENTAL=c.DEFAULT_INCREMENTAL=o.DEFAULT_INCREMENTAL=!d.randomize,l.ANIMATE=c.ANIMATE=o.ANIMATE=d.animate,l.TILE=d.tile,l.TILING_PADDING_VERTICAL=typeof d.tilingPaddingVertical=="function"?d.tilingPaddingVertical.call():d.tilingPaddingVertical,l.TILING_PADDING_HORIZONTAL=typeof d.tilingPaddingHorizontal=="function"?d.tilingPaddingHorizontal.call():d.tilingPaddingHorizontal,l.DEFAULT_INCREMENTAL=c.DEFAULT_INCREMENTAL=o.DEFAULT_INCREMENTAL=!0,l.PURE_INCREMENTAL=!d.randomize,o.DEFAULT_UNIFORM_LEAF_NODE_SIZES=d.uniformNodeDimensions,d.step=="transformed"&&(l.TRANSFORM_ON_CONSTRAINT_HANDLING=!0,l.ENFORCE_CONSTRAINTS=!1,l.APPLY_LAYOUT=!1),d.step=="enforced"&&(l.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,l.ENFORCE_CONSTRAINTS=!0,l.APPLY_LAYOUT=!1),d.step=="cose"&&(l.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,l.ENFORCE_CONSTRAINTS=!1,l.APPLY_LAYOUT=!0),d.step=="all"&&(d.randomize?l.TRANSFORM_ON_CONSTRAINT_HANDLING=!0:l.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,l.ENFORCE_CONSTRAINTS=!0,l.APPLY_LAYOUT=!0),d.fixedNodeConstraint||d.alignmentConstraint||d.relativePlacementConstraint?l.TREE_REDUCTION_ON_INCREMENTAL=!1:l.TREE_REDUCTION_ON_INCREMENTAL=!0;var w=new a,R=w.newGraphManager();return E(R.addRoot(),f.getTopMostNodes(P),w,d),p(w,R,J),I(w,d),w.runLayout(),rt};i.exports={coseLayout:T}},212:(i,r,e)=>{var f=function(){function d(L,F){for(var M=0;M0)if(v){var I=t.getTopMostNodes(M.eles.nodes());if(D=t.connectComponents(P,M.eles,I),D.forEach(function(vt){var it=vt.boundingBox();rt.push({x:it.x1+it.w/2,y:it.y1+it.h/2})}),M.randomize&&D.forEach(function(vt){M.eles=vt,V.push(o(M))}),M.quality=="default"||M.quality=="proof"){var w=P.collection();if(M.tile){var R=new Map,H=[],x=[],k=0,W={nodeIndexes:R,xCoords:H,yCoords:x},U=[];if(D.forEach(function(vt,it){vt.edges().length==0&&(vt.nodes().forEach(function(ut,Tt){w.merge(vt.nodes()[Tt]),ut.isParent()||(W.nodeIndexes.set(vt.nodes()[Tt].id(),k++),W.xCoords.push(vt.nodes()[0].position().x),W.yCoords.push(vt.nodes()[0].position().y))}),U.push(it))}),w.length>1){var et=w.boundingBox();rt.push({x:et.x1+et.w/2,y:et.y1+et.h/2}),D.push(w),V.push(W);for(var z=U.length-1;z>=0;z--)D.splice(U[z],1),V.splice(U[z],1),rt.splice(U[z],1)}}D.forEach(function(vt,it){M.eles=vt,Q.push(l(M,V[it])),t.relocateComponent(rt[it],Q[it],M)})}else D.forEach(function(vt,it){t.relocateComponent(rt[it],V[it],M)});var O=new Set;if(D.length>1){var X=[],B=J.filter(function(vt){return vt.css("display")=="none"});D.forEach(function(vt,it){var ut=void 0;if(M.quality=="draft"&&(ut=V[it].nodeIndexes),vt.nodes().not(B).length>0){var Tt={};Tt.edges=[],Tt.nodes=[];var At=void 0;vt.nodes().not(B).forEach(function(Dt){if(M.quality=="draft")if(!Dt.isParent())At=ut.get(Dt.id()),Tt.nodes.push({x:V[it].xCoords[At]-Dt.boundingbox().w/2,y:V[it].yCoords[At]-Dt.boundingbox().h/2,width:Dt.boundingbox().w,height:Dt.boundingbox().h});else{var mt=t.calcBoundingBox(Dt,V[it].xCoords,V[it].yCoords,ut);Tt.nodes.push({x:mt.topLeftX,y:mt.topLeftY,width:mt.width,height:mt.height})}else Q[it][Dt.id()]&&Tt.nodes.push({x:Q[it][Dt.id()].getLeft(),y:Q[it][Dt.id()].getTop(),width:Q[it][Dt.id()].getWidth(),height:Q[it][Dt.id()].getHeight()})}),vt.edges().forEach(function(Dt){var mt=Dt.source(),xt=Dt.target();if(mt.css("display")!="none"&&xt.css("display")!="none")if(M.quality=="draft"){var St=ut.get(mt.id()),Vt=ut.get(xt.id()),Xt=[],Ut=[];if(mt.isParent()){var bt=t.calcBoundingBox(mt,V[it].xCoords,V[it].yCoords,ut);Xt.push(bt.topLeftX+bt.width/2),Xt.push(bt.topLeftY+bt.height/2)}else Xt.push(V[it].xCoords[St]),Xt.push(V[it].yCoords[St]);if(xt.isParent()){var Ht=t.calcBoundingBox(xt,V[it].xCoords,V[it].yCoords,ut);Ut.push(Ht.topLeftX+Ht.width/2),Ut.push(Ht.topLeftY+Ht.height/2)}else Ut.push(V[it].xCoords[Vt]),Ut.push(V[it].yCoords[Vt]);Tt.edges.push({startX:Xt[0],startY:Xt[1],endX:Ut[0],endY:Ut[1]})}else Q[it][mt.id()]&&Q[it][xt.id()]&&Tt.edges.push({startX:Q[it][mt.id()].getCenterX(),startY:Q[it][mt.id()].getCenterY(),endX:Q[it][xt.id()].getCenterX(),endY:Q[it][xt.id()].getCenterY()})}),Tt.nodes.length>0&&(X.push(Tt),O.add(it))}});var _=m.packComponents(X,M.randomize).shifts;if(M.quality=="draft")V.forEach(function(vt,it){var ut=vt.xCoords.map(function(At){return At+_[it].dx}),Tt=vt.yCoords.map(function(At){return At+_[it].dy});vt.xCoords=ut,vt.yCoords=Tt});else{var lt=0;O.forEach(function(vt){Object.keys(Q[vt]).forEach(function(it){var ut=Q[vt][it];ut.setCenter(ut.getCenterX()+_[lt].dx,ut.getCenterY()+_[lt].dy)}),lt++})}}}else{var E=M.eles.boundingBox();if(rt.push({x:E.x1+E.w/2,y:E.y1+E.h/2}),M.randomize){var p=o(M);V.push(p)}M.quality=="default"||M.quality=="proof"?(Q.push(l(M,V[0])),t.relocateComponent(rt[0],Q[0],M)):t.relocateComponent(rt[0],V[0],M)}var q=function(it,ut){if(M.quality=="default"||M.quality=="proof"){typeof it=="number"&&(it=ut);var Tt=void 0,At=void 0,Dt=it.data("id");return Q.forEach(function(xt){Dt in xt&&(Tt={x:xt[Dt].getRect().getCenterX(),y:xt[Dt].getRect().getCenterY()},At=xt[Dt])}),M.nodeDimensionsIncludeLabels&&(At.labelWidth&&(At.labelPosHorizontal=="left"?Tt.x+=At.labelWidth/2:At.labelPosHorizontal=="right"&&(Tt.x-=At.labelWidth/2)),At.labelHeight&&(At.labelPosVertical=="top"?Tt.y+=At.labelHeight/2:At.labelPosVertical=="bottom"&&(Tt.y-=At.labelHeight/2))),Tt==null&&(Tt={x:it.position("x"),y:it.position("y")}),{x:Tt.x,y:Tt.y}}else{var mt=void 0;return V.forEach(function(xt){var St=xt.nodeIndexes.get(it.id());St!=null&&(mt={x:xt.xCoords[St],y:xt.yCoords[St]})}),mt==null&&(mt={x:it.position("x"),y:it.position("y")}),{x:mt.x,y:mt.y}}};if(M.quality=="default"||M.quality=="proof"||M.randomize){var Rt=t.calcParentsWithoutChildren(P,J),Lt=J.filter(function(vt){return vt.css("display")=="none"});M.eles=J.not(Lt),J.nodes().not(":parent").not(Lt).layoutPositions(F,M,q),Rt.length>0&&Rt.forEach(function(vt){vt.position(q(vt))})}else console.log("If randomize option is set to false, then quality option must be 'default' or 'proof'.")}}]),d}();i.exports=u},657:(i,r,e)=>{var f=e(548),a=e(140).layoutBase.Matrix,y=e(140).layoutBase.SVD,t=function(o){var c=o.cy,l=o.eles,T=l.nodes(),u=l.nodes(":parent"),d=new Map,L=new Map,F=new Map,M=[],P=[],J=[],V=[],Q=[],D=[],rt=[],n=[],m=void 0,v=1e8,E=1e-9,p=o.piTol,I=o.samplingType,w=o.nodeSeparation,R=void 0,H=function(){for(var b=0,$=0,K=!1;$=at;){ot=Z[at++];for(var It=M[ot],ft=0;ftdt&&(dt=Q[Ct],wt=Ct)}return wt},k=function(b){var $=void 0;if(b){$=Math.floor(Math.random()*m);for(var Z=0;Z=1)break;j=tt}for(var yt=0;yt=1)break;j=tt}for(var ft=0;ft0&&($.isParent()?M[b].push(F.get($.id())):M[b].push($.id()))})});var Lt=function(b){var $=L.get(b),K=void 0;d.get(b).forEach(function(Z){c.getElementById(Z).isParent()?K=F.get(Z):K=Z,M[$].push(K),M[L.get(K)].push(b)})},vt=!0,it=!1,ut=void 0;try{for(var Tt=d.keys()[Symbol.iterator](),At;!(vt=(At=Tt.next()).done);vt=!0){var Dt=At.value;Lt(Dt)}}catch(S){it=!0,ut=S}finally{try{!vt&&Tt.return&&Tt.return()}finally{if(it)throw ut}}m=L.size;var mt=void 0;if(m>2){R=m{var f=e(212),a=function(t){t&&t("layout","fcose",f)};typeof cytoscape<"u"&&a(cytoscape),i.exports=a},140:i=>{i.exports=A}},N={};function g(i){var r=N[i];if(r!==void 0)return r.exports;var e=N[i]={exports:{}};return G[i](e,e.exports,g),e.exports}var s=g(579);return s})()})})(be);var gr=be.exports;const ur=ke(gr);var xe={L:"left",R:"right",T:"top",B:"bottom"},Ie={L:nt(C=>`${C},${C/2} 0,${C} 0,0`,"L"),R:nt(C=>`0,${C/2} ${C},0 ${C},${C}`,"R"),T:nt(C=>`0,0 ${C},0 ${C/2},${C}`,"T"),B:nt(C=>`${C/2},0 ${C},${C} 0,${C}`,"B")},he={L:nt((C,Y)=>C-Y+2,"L"),R:nt((C,Y)=>C-2,"R"),T:nt((C,Y)=>C-Y+2,"T"),B:nt((C,Y)=>C-2,"B")},dr=nt(function(C){return zt(C)?C==="L"?"R":"L":C==="T"?"B":"T"},"getOppositeArchitectureDirection"),Re=nt(function(C){const Y=C;return Y==="L"||Y==="R"||Y==="T"||Y==="B"},"isArchitectureDirection"),zt=nt(function(C){const Y=C;return Y==="L"||Y==="R"},"isArchitectureDirectionX"),Qt=nt(function(C){const Y=C;return Y==="T"||Y==="B"},"isArchitectureDirectionY"),Pe=nt(function(C,Y){const A=zt(C)&&Qt(Y),G=Qt(C)&&zt(Y);return A||G},"isArchitectureDirectionXY"),vr=nt(function(C){const Y=C[0],A=C[1],G=zt(Y)&&Qt(A),N=Qt(Y)&&zt(A);return G||N},"isArchitecturePairXY"),pr=nt(function(C){return C!=="LL"&&C!=="RR"&&C!=="TT"&&C!=="BB"},"isValidArchitectureDirectionPair"),me=nt(function(C,Y){const A=`${C}${Y}`;return pr(A)?A:void 0},"getArchitectureDirectionPair"),yr=nt(function([C,Y],A){const G=A[0],N=A[1];return zt(G)?Qt(N)?[C+(G==="L"?-1:1),Y+(N==="T"?1:-1)]:[C+(G==="L"?-1:1),Y]:zt(N)?[C+(N==="L"?1:-1),Y+(G==="T"?1:-1)]:[C,Y+(G==="T"?1:-1)]},"shiftPositionByArchitectureDirectionPair"),Er=nt(function(C){return C==="LT"||C==="TL"?[1,1]:C==="BL"||C==="LB"?[1,-1]:C==="BR"||C==="RB"?[-1,-1]:[-1,1]},"getArchitectureDirectionXYFactors"),mr=nt(function(C){return C.type==="service"},"isArchitectureService"),Tr=nt(function(C){return C.type==="junction"},"isArchitectureJunction"),Ge=nt(C=>C.data(),"edgeData"),ne=nt(C=>C.data(),"nodeData"),Ue=qe.architecture,pt=new hr(()=>({nodes:{},groups:{},edges:[],registeredIds:{},config:Ue,dataStructures:void 0,elements:{}})),Nr=nt(()=>{pt.reset(),ar()},"clear"),Lr=nt(function({id:C,icon:Y,in:A,title:G,iconText:N}){if(pt.records.registeredIds[C]!==void 0)throw new Error(`The service id [${C}] is already in use by another ${pt.records.registeredIds[C]}`);if(A!==void 0){if(C===A)throw new Error(`The service [${C}] cannot be placed within itself`);if(pt.records.registeredIds[A]===void 0)throw new Error(`The service [${C}]'s parent does not exist. Please make sure the parent is created before this service`);if(pt.records.registeredIds[A]==="node")throw new Error(`The service [${C}]'s parent is not a group`)}pt.records.registeredIds[C]="node",pt.records.nodes[C]={id:C,type:"service",icon:Y,iconText:N,title:G,edges:[],in:A}},"addService"),Cr=nt(()=>Object.values(pt.records.nodes).filter(mr),"getServices"),Mr=nt(function({id:C,in:Y}){pt.records.registeredIds[C]="node",pt.records.nodes[C]={id:C,type:"junction",edges:[],in:Y}},"addJunction"),Ar=nt(()=>Object.values(pt.records.nodes).filter(Tr),"getJunctions"),wr=nt(()=>Object.values(pt.records.nodes),"getNodes"),Or=nt(C=>pt.records.nodes[C],"getNode"),Dr=nt(function({id:C,icon:Y,in:A,title:G}){if(pt.records.registeredIds[C]!==void 0)throw new Error(`The group id [${C}] is already in use by another ${pt.records.registeredIds[C]}`);if(A!==void 0){if(C===A)throw new Error(`The group [${C}] cannot be placed within itself`);if(pt.records.registeredIds[A]===void 0)throw new Error(`The group [${C}]'s parent does not exist. Please make sure the parent is created before this group`);if(pt.records.registeredIds[A]==="node")throw new Error(`The group [${C}]'s parent is not a group`)}pt.records.registeredIds[C]="group",pt.records.groups[C]={id:C,icon:Y,title:G,in:A}},"addGroup"),xr=nt(()=>Object.values(pt.records.groups),"getGroups"),Ir=nt(function({lhsId:C,rhsId:Y,lhsDir:A,rhsDir:G,lhsInto:N,rhsInto:g,lhsGroup:s,rhsGroup:i,title:r}){if(!Re(A))throw new Error(`Invalid direction given for left hand side of edge ${C}--${Y}. Expected (L,R,T,B) got ${A}`);if(!Re(G))throw new Error(`Invalid direction given for right hand side of edge ${C}--${Y}. Expected (L,R,T,B) got ${G}`);if(pt.records.nodes[C]===void 0&&pt.records.groups[C]===void 0)throw new Error(`The left-hand id [${C}] does not yet exist. Please create the service/group before declaring an edge to it.`);if(pt.records.nodes[Y]===void 0&&pt.records.groups[C]===void 0)throw new Error(`The right-hand id [${Y}] does not yet exist. Please create the service/group before declaring an edge to it.`);const e=pt.records.nodes[C].in,f=pt.records.nodes[Y].in;if(s&&e&&f&&e==f)throw new Error(`The left-hand id [${C}] is modified to traverse the group boundary, but the edge does not pass through two groups.`);if(i&&e&&f&&e==f)throw new Error(`The right-hand id [${Y}] is modified to traverse the group boundary, but the edge does not pass through two groups.`);const a={lhsId:C,lhsDir:A,lhsInto:N,lhsGroup:s,rhsId:Y,rhsDir:G,rhsInto:g,rhsGroup:i,title:r};pt.records.edges.push(a),pt.records.nodes[C]&&pt.records.nodes[Y]&&(pt.records.nodes[C].edges.push(pt.records.edges[pt.records.edges.length-1]),pt.records.nodes[Y].edges.push(pt.records.edges[pt.records.edges.length-1]))},"addEdge"),Rr=nt(()=>pt.records.edges,"getEdges"),Sr=nt(()=>{if(pt.records.dataStructures===void 0){const C=Object.entries(pt.records.nodes).reduce((s,[i,r])=>(s[i]=r.edges.reduce((e,f)=>{if(f.lhsId===i){const a=me(f.lhsDir,f.rhsDir);a&&(e[a]=f.rhsId)}else{const a=me(f.rhsDir,f.lhsDir);a&&(e[a]=f.lhsId)}return e},{}),s),{}),Y=Object.keys(C)[0],A={[Y]:1},G=Object.keys(C).reduce((s,i)=>i===Y?s:{...s,[i]:1},{}),N=nt(s=>{const i={[s]:[0,0]},r=[s];for(;r.length>0;){const e=r.shift();if(e){A[e]=1,delete G[e];const f=C[e],[a,y]=i[e];Object.entries(f).forEach(([t,h])=>{A[h]||(i[h]=yr([a,y],t),r.push(h))})}}return i},"BFS"),g=[N(Y)];for(;Object.keys(G).length>0;)g.push(N(Object.keys(G)[0]));pt.records.dataStructures={adjList:C,spatialMaps:g}}return pt.records.dataStructures},"getDataStructures"),Fr=nt((C,Y)=>{pt.records.elements[C]=Y},"setElementForId"),br=nt(C=>pt.records.elements[C],"getElementById"),le={clear:Nr,setDiagramTitle:Ke,getDiagramTitle:je,setAccTitle:_e,getAccTitle:tr,setAccDescription:er,getAccDescription:rr,addService:Lr,getServices:Cr,addJunction:Mr,getJunctions:Ar,getNodes:wr,getNode:Or,addGroup:Dr,getGroups:xr,addEdge:Ir,getEdges:Rr,setElementForId:Fr,getElementById:br,getDataStructures:Sr};function Pt(C){const Y=fe().architecture;return Y!=null&&Y[C]?Y[C]:Ue[C]}nt(Pt,"getConfigField");var Pr=nt((C,Y)=>{sr(C,Y),C.groups.map(Y.addGroup),C.services.map(A=>Y.addService({...A,type:"service"})),C.junctions.map(A=>Y.addJunction({...A,type:"junction"})),C.edges.map(Y.addEdge)},"populateDb"),Gr={parse:nt(async C=>{const Y=await lr("architecture",C);Se.debug(Y),Pr(Y,le)},"parse")},Ur=nt(C=>` + .edge { + stroke-width: ${C.archEdgeWidth}; + stroke: ${C.archEdgeColor}; + fill: none; + } + + .arrow { + fill: ${C.archEdgeArrowColor}; + } + + .node-bkg { + fill: none; + stroke: ${C.archGroupBorderColor}; + stroke-width: ${C.archGroupBorderWidth}; + stroke-dasharray: 8; + } + .node-icon-text { + display: flex; + align-items: center; + } + + .node-icon-text > div { + color: #fff; + margin: 1px; + height: fit-content; + text-align: center; + overflow: hidden; + display: -webkit-box; + -webkit-box-orient: vertical; + } +`,"getStyles"),Yr=Ur,ae=nt(C=>`${C}`,"wrapIcon"),oe={prefix:"mermaid-architecture",height:80,width:80,icons:{database:{body:ae('')},server:{body:ae('')},disk:{body:ae('')},internet:{body:ae('')},cloud:{body:ae('')},unknown:Je,blank:{body:ae("")}}},Xr=nt(async function(C,Y){const A=Pt("padding"),G=Pt("iconSize"),N=G/2,g=G/6,s=g/2;await Promise.all(Y.edges().map(async i=>{var P,J;const{source:r,sourceDir:e,sourceArrow:f,sourceGroup:a,target:y,targetDir:t,targetArrow:h,targetGroup:o,label:c}=Ge(i);let{x:l,y:T}=i[0].sourceEndpoint();const{x:u,y:d}=i[0].midpoint();let{x:L,y:F}=i[0].targetEndpoint();const M=A+4;if(a&&(zt(e)?l+=e==="L"?-M:M:T+=e==="T"?-M:M+18),o&&(zt(t)?L+=t==="L"?-M:M:F+=t==="T"?-M:M+18),!a&&((P=le.getNode(r))==null?void 0:P.type)==="junction"&&(zt(e)?l+=e==="L"?N:-N:T+=e==="T"?N:-N),!o&&((J=le.getNode(y))==null?void 0:J.type)==="junction"&&(zt(t)?L+=t==="L"?N:-N:F+=t==="T"?N:-N),i[0]._private.rscratch){const V=C.insert("g");if(V.insert("path").attr("d",`M ${l},${T} L ${u},${d} L${L},${F} `).attr("class","edge"),f){const Q=zt(e)?he[e](l,g):l-s,D=Qt(e)?he[e](T,g):T-s;V.insert("polygon").attr("points",Ie[e](g)).attr("transform",`translate(${Q},${D})`).attr("class","arrow")}if(h){const Q=zt(t)?he[t](L,g):L-s,D=Qt(t)?he[t](F,g):F-s;V.insert("polygon").attr("points",Ie[t](g)).attr("transform",`translate(${Q},${D})`).attr("class","arrow")}if(c){const Q=Pe(e,t)?"XY":zt(e)?"X":"Y";let D=0;Q==="X"?D=Math.abs(l-L):Q==="Y"?D=Math.abs(T-F)/1.5:D=Math.abs(l-L)/2;const rt=V.append("g");if(await Ne(rt,c,{useHtmlLabels:!1,width:D,classes:"architecture-service-label"},fe()),rt.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle"),Q==="X")rt.attr("transform","translate("+u+", "+d+")");else if(Q==="Y")rt.attr("transform","translate("+u+", "+d+") rotate(-90)");else if(Q==="XY"){const n=me(e,t);if(n&&vr(n)){const m=rt.node().getBoundingClientRect(),[v,E]=Er(n);rt.attr("dominant-baseline","auto").attr("transform",`rotate(${-1*v*E*45})`);const p=rt.node().getBoundingClientRect();rt.attr("transform",` + translate(${u}, ${d-m.height/2}) + translate(${v*p.width/2}, ${E*p.height/2}) + rotate(${-1*v*E*45}, 0, ${m.height/2}) + `)}}}}}))},"drawEdges"),Hr=nt(async function(C,Y){const G=Pt("padding")*.75,N=Pt("fontSize"),s=Pt("iconSize")/2;await Promise.all(Y.nodes().map(async i=>{const r=ne(i);if(r.type==="group"){const{h:e,w:f,x1:a,y1:y}=i.boundingBox();C.append("rect").attr("x",a+s).attr("y",y+s).attr("width",f).attr("height",e).attr("class","node-bkg");const t=C.append("g");let h=a,o=y;if(r.icon){const c=t.append("g");c.html(`${await Ee(r.icon,{height:G,width:G,fallbackPrefix:oe.prefix})}`),c.attr("transform","translate("+(h+s+1)+", "+(o+s+1)+")"),h+=G,o+=N/2-1-2}if(r.label){const c=t.append("g");await Ne(c,r.label,{useHtmlLabels:!1,width:f,classes:"architecture-service-label"},fe()),c.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","start").attr("text-anchor","start"),c.attr("transform","translate("+(h+s+4)+", "+(o+s+2)+")")}}}))},"drawGroups"),Wr=nt(async function(C,Y,A){for(const G of A){const N=Y.append("g"),g=Pt("iconSize");if(G.title){const e=N.append("g");await Ne(e,G.title,{useHtmlLabels:!1,width:g*1.5,classes:"architecture-service-label"},fe()),e.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle"),e.attr("transform","translate("+g/2+", "+g+")")}const s=N.append("g");if(G.icon)s.html(`${await Ee(G.icon,{height:g,width:g,fallbackPrefix:oe.prefix})}`);else if(G.iconText){s.html(`${await Ee("blank",{height:g,width:g,fallbackPrefix:oe.prefix})}`);const a=s.append("g").append("foreignObject").attr("width",g).attr("height",g).append("div").attr("class","node-icon-text").attr("style",`height: ${g}px;`).append("div").html(G.iconText),y=parseInt(window.getComputedStyle(a.node(),null).getPropertyValue("font-size").replace(/\D/g,""))??16;a.attr("style",`-webkit-line-clamp: ${Math.floor((g-2)/y)};`)}else s.append("path").attr("class","node-bkg").attr("id","node-"+G.id).attr("d",`M0 ${g} v${-g} q0,-5 5,-5 h${g} q5,0 5,5 v${g} H0 Z`);N.attr("class","architecture-service");const{width:i,height:r}=N._groups[0][0].getBBox();G.width=i,G.height=r,C.setElementForId(G.id,N)}return 0},"drawServices"),Vr=nt(function(C,Y,A){A.forEach(G=>{const N=Y.append("g"),g=Pt("iconSize");N.append("g").append("rect").attr("id","node-"+G.id).attr("fill-opacity","0").attr("width",g).attr("height",g),N.attr("class","architecture-junction");const{width:i,height:r}=N._groups[0][0].getBBox();N.width=i,N.height=r,C.setElementForId(G.id,N)})},"drawJunctions");Qe([{name:oe.prefix,icons:oe}]);Fe.use(ur);function Ye(C,Y){C.forEach(A=>{Y.add({group:"nodes",data:{type:"service",id:A.id,icon:A.icon,label:A.title,parent:A.in,width:Pt("iconSize"),height:Pt("iconSize")},classes:"node-service"})})}nt(Ye,"addServices");function Xe(C,Y){C.forEach(A=>{Y.add({group:"nodes",data:{type:"junction",id:A.id,parent:A.in,width:Pt("iconSize"),height:Pt("iconSize")},classes:"node-junction"})})}nt(Xe,"addJunctions");function He(C,Y){Y.nodes().map(A=>{const G=ne(A);if(G.type==="group")return;G.x=A.position().x,G.y=A.position().y,C.getElementById(G.id).attr("transform","translate("+(G.x||0)+","+(G.y||0)+")")})}nt(He,"positionNodes");function We(C,Y){C.forEach(A=>{Y.add({group:"nodes",data:{type:"group",id:A.id,icon:A.icon,label:A.title,parent:A.in},classes:"node-group"})})}nt(We,"addGroups");function Ve(C,Y){C.forEach(A=>{const{lhsId:G,rhsId:N,lhsInto:g,lhsGroup:s,rhsInto:i,lhsDir:r,rhsDir:e,rhsGroup:f,title:a}=A,y=Pe(A.lhsDir,A.rhsDir)?"segments":"straight",t={id:`${G}-${N}`,label:a,source:G,sourceDir:r,sourceArrow:g,sourceGroup:s,sourceEndpoint:r==="L"?"0 50%":r==="R"?"100% 50%":r==="T"?"50% 0":"50% 100%",target:N,targetDir:e,targetArrow:i,targetGroup:f,targetEndpoint:e==="L"?"0 50%":e==="R"?"100% 50%":e==="T"?"50% 0":"50% 100%"};Y.add({group:"edges",data:t,classes:y})})}nt(Ve,"addEdges");function ze(C){const Y=C.map(N=>{const g={},s={};return Object.entries(N).forEach(([i,[r,e]])=>{g[e]||(g[e]=[]),s[r]||(s[r]=[]),g[e].push(i),s[r].push(i)}),{horiz:Object.values(g).filter(i=>i.length>1),vert:Object.values(s).filter(i=>i.length>1)}}),[A,G]=Y.reduce(([N,g],{horiz:s,vert:i})=>[[...N,...s],[...g,...i]],[[],[]]);return{horizontal:A,vertical:G}}nt(ze,"getAlignments");function Be(C){const Y=[],A=nt(N=>`${N[0]},${N[1]}`,"posToStr"),G=nt(N=>N.split(",").map(g=>parseInt(g)),"strToPos");return C.forEach(N=>{const g=Object.fromEntries(Object.entries(N).map(([e,f])=>[A(f),e])),s=[A([0,0])],i={},r={L:[-1,0],R:[1,0],T:[0,1],B:[0,-1]};for(;s.length>0;){const e=s.shift();if(e){i[e]=1;const f=g[e];if(f){const a=G(e);Object.entries(r).forEach(([y,t])=>{const h=A([a[0]+t[0],a[1]+t[1]]),o=g[h];o&&!i[h]&&(s.push(h),Y.push({[xe[y]]:o,[xe[dr(y)]]:f,gap:1.5*Pt("iconSize")}))})}}}}),Y}nt(Be,"getRelativeConstraints");function $e(C,Y,A,G,{spatialMaps:N}){return new Promise(g=>{const s=ir("body").append("div").attr("id","cy").attr("style","display:none"),i=Fe({container:document.getElementById("cy"),style:[{selector:"edge",style:{"curve-style":"straight",label:"data(label)","source-endpoint":"data(sourceEndpoint)","target-endpoint":"data(targetEndpoint)"}},{selector:"edge.segments",style:{"curve-style":"segments","segment-weights":"0","segment-distances":[.5],"edge-distances":"endpoints","source-endpoint":"data(sourceEndpoint)","target-endpoint":"data(targetEndpoint)"}},{selector:"node",style:{"compound-sizing-wrt-labels":"include"}},{selector:"node[label]",style:{"text-valign":"bottom","text-halign":"center","font-size":`${Pt("fontSize")}px`}},{selector:".node-service",style:{label:"data(label)",width:"data(width)",height:"data(height)"}},{selector:".node-junction",style:{width:"data(width)",height:"data(height)"}},{selector:".node-group",style:{padding:`${Pt("padding")}px`}}]});s.remove(),We(A,i),Ye(C,i),Xe(Y,i),Ve(G,i);const r=ze(N),e=Be(N),f=i.layout({name:"fcose",quality:"proof",styleEnabled:!1,animate:!1,nodeDimensionsIncludeLabels:!1,idealEdgeLength(a){const[y,t]=a.connectedNodes(),{parent:h}=ne(y),{parent:o}=ne(t);return h===o?1.5*Pt("iconSize"):.5*Pt("iconSize")},edgeElasticity(a){const[y,t]=a.connectedNodes(),{parent:h}=ne(y),{parent:o}=ne(t);return h===o?.45:.001},alignmentConstraint:r,relativePlacementConstraint:e});f.one("layoutstop",()=>{var y;function a(t,h,o,c){let l,T;const{x:u,y:d}=t,{x:L,y:F}=h;T=(c-d+(u-o)*(d-F)/(u-L))/Math.sqrt(1+Math.pow((d-F)/(u-L),2)),l=Math.sqrt(Math.pow(c-d,2)+Math.pow(o-u,2)-Math.pow(T,2));const M=Math.sqrt(Math.pow(L-u,2)+Math.pow(F-d,2));l=l/M;let P=(L-u)*(c-d)-(F-d)*(o-u);switch(!0){case P>=0:P=1;break;case P<0:P=-1;break}let J=(L-u)*(o-u)+(F-d)*(c-d);switch(!0){case J>=0:J=1;break;case J<0:J=-1;break}return T=Math.abs(T)*P,l=l*J,{distances:T,weights:l}}nt(a,"getSegmentWeights"),i.startBatch();for(const t of Object.values(i.edges()))if((y=t.data)!=null&&y.call(t)){const{x:h,y:o}=t.source().position(),{x:c,y:l}=t.target().position();if(h!==c&&o!==l){const T=t.sourceEndpoint(),u=t.targetEndpoint(),{sourceDir:d}=Ge(t),[L,F]=Qt(d)?[T.x,u.y]:[u.x,T.y],{weights:M,distances:P}=a(T,u,L,F);t.style("segment-distances",P),t.style("segment-weights",M)}}i.endBatch(),f.run()}),f.run(),i.ready(a=>{Se.info("Ready",a),g(i)})})}nt($e,"layoutArchitecture");var zr=nt(async(C,Y,A,G)=>{const N=G.db,g=N.getServices(),s=N.getJunctions(),i=N.getGroups(),r=N.getEdges(),e=N.getDataStructures(),f=nr(Y),a=f.append("g");a.attr("class","architecture-edges");const y=f.append("g");y.attr("class","architecture-services");const t=f.append("g");t.attr("class","architecture-groups"),await Wr(N,y,g),Vr(N,y,s);const h=await $e(g,s,i,r,e);await Xr(a,h),await Hr(t,h),He(N,h),or(void 0,f,Pt("padding"),Pt("useMaxWidth"))},"draw"),Br={draw:zr},ei={parser:Gr,db:le,renderer:Br,styles:Yr};export{ei as diagram}; diff --git a/assets/chunks/basePickBy.BafM5tVf.js b/assets/chunks/basePickBy.BafM5tVf.js new file mode 100644 index 000000000..b30eb70d0 --- /dev/null +++ b/assets/chunks/basePickBy.BafM5tVf.js @@ -0,0 +1 @@ +import{e as x,c as b,g as m,k as P,h as p,j as w,l as N,m as c,n as I,t as A,o as M}from"./baseUniq.DoVpE4hx.js";import{aL as g,aq as E,aM as F,aN as T,aO as _,aP as l,aQ as $,aR as B,aS as S,aT as y}from"../app.D0Wo8w0i.js";var L=/\s/;function R(n){for(var r=n.length;r--&&L.test(n.charAt(r)););return r}var q=/^\s+/;function G(n){return n&&n.slice(0,R(n)+1).replace(q,"")}var o=NaN,H=/^[-+]0x[0-9a-f]+$/i,z=/^0b[01]+$/i,C=/^0o[0-7]+$/i,K=parseInt;function Q(n){if(typeof n=="number")return n;if(x(n))return o;if(g(n)){var r=typeof n.valueOf=="function"?n.valueOf():n;n=g(r)?r+"":r}if(typeof n!="string")return n===0?n:+n;n=G(n);var t=z.test(n);return t||C.test(n)?K(n.slice(2),t?2:8):H.test(n)?o:+n}var v=1/0,W=17976931348623157e292;function X(n){if(!n)return n===0?n:0;if(n=Q(n),n===v||n===-v){var r=n<0?-1:1;return r*W}return n===n?n:0}function Y(n){var r=X(n),t=r%1;return r===r?t?r-t:r:0}function fn(n){var r=n==null?0:n.length;return r?b(n):[]}var O=Object.prototype,D=O.hasOwnProperty,dn=E(function(n,r){n=Object(n);var t=-1,i=r.length,a=i>2?r[2]:void 0;for(a&&F(r[0],r[1],a)&&(i=1);++t-1?a[f?r[e]:e]:void 0}}var U=Math.max;function Z(n,r,t){var i=n==null?0:n.length;if(!i)return-1;var a=t==null?0:Y(t);return a<0&&(a=U(i+a,0)),p(n,m(r),a)}var hn=J(Z);function V(n,r){var t=-1,i=l(n)?Array(n.length):[];return w(n,function(a,f,e){i[++t]=r(a,f,e)}),i}function gn(n,r){var t=$(n)?N:V;return t(n,m(r))}var j=Object.prototype,k=j.hasOwnProperty;function nn(n,r){return n!=null&&k.call(n,r)}function mn(n,r){return n!=null&&c(n,r,nn)}function rn(n,r){return n-1}function $(n){return sn(n)?xn(n):mn(n)}var nr=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,rr=/^\w*$/;function B(n,r){if(T(n))return!1;var e=typeof n;return e=="number"||e=="symbol"||e=="boolean"||n==null||U(n)?!0:rr.test(n)||!nr.test(n)||r!=null&&n in Object(r)}var er=500;function tr(n){var r=Fn(n,function(t){return e.size===er&&e.clear(),t}),e=r.cache;return r}var ir=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,ar=/\\(\\)?/g,fr=tr(function(n){var r=[];return n.charCodeAt(0)===46&&r.push(""),n.replace(ir,function(e,t,a,i){r.push(a?i.replace(ar,"$1"):t||e)}),r});function sr(n){return n==null?"":dn(n)}function An(n,r){return T(n)?n:B(n,r)?[n]:fr(sr(n))}var ur=1/0;function m(n){if(typeof n=="string"||U(n))return n;var r=n+"";return r=="0"&&1/n==-ur?"-0":r}function yn(n,r){r=An(r,n);for(var e=0,t=r.length;n!=null&&es))return!1;var b=i.get(n),l=i.get(r);if(b&&l)return b==r&&l==n;var o=-1,c=!0,h=e&Re?new E:void 0;for(i.set(n,r),i.set(r,n);++o=Ot){var b=r?null:wt(n);if(b)return H(b);f=!1,a=Sn,u=new E}else u=r?[]:s;n:for(;++t"u"&&(M.yylloc={});var ut=M.yylloc;c.push(ut);var oe=M.options&&M.options.ranges;typeof J.yy.parseError=="function"?this.parseError=J.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function he(H){u.length=u.length-2*H,S.length=S.length-H,c.length=c.length-H}d(he,"popStack");function Dt(){var H;return H=w.pop()||M.lex()||W,typeof H!="number"&&(H instanceof Array&&(w=H,H=w.pop()),H=g.symbols_[H]||H),H}d(Dt,"lex");for(var Y,Q,U,pt,$={},st,q,Nt,it;;){if(Q=u[u.length-1],this.defaultActions[Q]?U=this.defaultActions[Q]:((Y===null||typeof Y>"u")&&(Y=Dt()),U=_[Q]&&_[Q][Y]),typeof U>"u"||!U.length||!U[0]){var ft="";it=[];for(st in _[Q])this.terminals_[st]&&st>X&&it.push("'"+this.terminals_[st]+"'");M.showPosition?ft="Parse error on line "+(A+1)+`: +`+M.showPosition()+` +Expecting `+it.join(", ")+", got '"+(this.terminals_[Y]||Y)+"'":ft="Parse error on line "+(A+1)+": Unexpected "+(Y==W?"end of input":"'"+(this.terminals_[Y]||Y)+"'"),this.parseError(ft,{text:M.match,token:this.terminals_[Y]||Y,line:M.yylineno,loc:ut,expected:it})}if(U[0]instanceof Array&&U.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Q+", token: "+Y);switch(U[0]){case 1:u.push(Y),S.push(M.yytext),c.push(M.yylloc),u.push(U[1]),Y=null,O=M.yyleng,p=M.yytext,A=M.yylineno,ut=M.yylloc;break;case 2:if(q=this.productions_[U[1]][1],$.$=S[S.length-q],$._$={first_line:c[c.length-(q||1)].first_line,last_line:c[c.length-1].last_line,first_column:c[c.length-(q||1)].first_column,last_column:c[c.length-1].last_column},oe&&($._$.range=[c[c.length-(q||1)].range[0],c[c.length-1].range[1]]),pt=this.performAction.apply($,[p,O,A,J.yy,U[1],S,c].concat(ce)),typeof pt<"u")return pt;q&&(u=u.slice(0,-1*q*2),S=S.slice(0,-1*q),c=c.slice(0,-1*q)),u.push(this.productions_[U[1]][0]),S.push($.$),c.push($._$),Nt=_[u[u.length-2]][u[u.length-1]],u.push(Nt);break;case 3:return!0}}return!0},"parse")},T=function(){var N={EOF:1,parseError:d(function(g,u){if(this.yy.parser)this.yy.parser.parseError(g,u);else throw new Error(g)},"parseError"),setInput:d(function(x,g){return this.yy=g||this.yy||{},this._input=x,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:d(function(){var x=this._input[0];this.yytext+=x,this.yyleng++,this.offset++,this.match+=x,this.matched+=x;var g=x.match(/(?:\r\n?|\n).*/g);return g?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),x},"input"),unput:d(function(x){var g=x.length,u=x.split(/(?:\r\n?|\n)/g);this._input=x+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-g),this.offset-=g;var w=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),u.length-1&&(this.yylineno-=u.length-1);var S=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:u?(u.length===w.length?this.yylloc.first_column:0)+w[w.length-u.length].length-u[0].length:this.yylloc.first_column-g},this.options.ranges&&(this.yylloc.range=[S[0],S[0]+this.yyleng-g]),this.yyleng=this.yytext.length,this},"unput"),more:d(function(){return this._more=!0,this},"more"),reject:d(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:d(function(x){this.unput(this.match.slice(x))},"less"),pastInput:d(function(){var x=this.matched.substr(0,this.matched.length-this.match.length);return(x.length>20?"...":"")+x.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:d(function(){var x=this.match;return x.length<20&&(x+=this._input.substr(0,20-x.length)),(x.substr(0,20)+(x.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:d(function(){var x=this.pastInput(),g=new Array(x.length+1).join("-");return x+this.upcomingInput()+` +`+g+"^"},"showPosition"),test_match:d(function(x,g){var u,w,S;if(this.options.backtrack_lexer&&(S={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(S.yylloc.range=this.yylloc.range.slice(0))),w=x[0].match(/(?:\r\n?|\n).*/g),w&&(this.yylineno+=w.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:w?w[w.length-1].length-w[w.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+x[0].length},this.yytext+=x[0],this.match+=x[0],this.matches=x,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(x[0].length),this.matched+=x[0],u=this.performAction.call(this,this.yy,this,g,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),u)return u;if(this._backtrack){for(var c in S)this[c]=S[c];return!1}return!1},"test_match"),next:d(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var x,g,u,w;this._more||(this.yytext="",this.match="");for(var S=this._currentRules(),c=0;cg[0].length)){if(g=u,w=c,this.options.backtrack_lexer){if(x=this.test_match(u,S[c]),x!==!1)return x;if(this._backtrack){g=!1;continue}else return!1}else if(!this.options.flex)break}return g?(x=this.test_match(g,S[w]),x!==!1?x:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:d(function(){var g=this.next();return g||this.lex()},"lex"),begin:d(function(g){this.conditionStack.push(g)},"begin"),popState:d(function(){var g=this.conditionStack.length-1;return g>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:d(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:d(function(g){return g=this.conditionStack.length-1-Math.abs(g||0),g>=0?this.conditionStack[g]:"INITIAL"},"topState"),pushState:d(function(g){this.begin(g)},"pushState"),stateStackSize:d(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:d(function(g,u,w,S){switch(w){case 0:return 10;case 1:return g.getLogger().debug("Found space-block"),31;case 2:return g.getLogger().debug("Found nl-block"),31;case 3:return g.getLogger().debug("Found space-block"),29;case 4:g.getLogger().debug(".",u.yytext);break;case 5:g.getLogger().debug("_",u.yytext);break;case 6:return 5;case 7:return u.yytext=-1,28;case 8:return u.yytext=u.yytext.replace(/columns\s+/,""),g.getLogger().debug("COLUMNS (LEX)",u.yytext),28;case 9:this.pushState("md_string");break;case 10:return"MD_STR";case 11:this.popState();break;case 12:this.pushState("string");break;case 13:g.getLogger().debug("LEX: POPPING STR:",u.yytext),this.popState();break;case 14:return g.getLogger().debug("LEX: STR end:",u.yytext),"STR";case 15:return u.yytext=u.yytext.replace(/space\:/,""),g.getLogger().debug("SPACE NUM (LEX)",u.yytext),21;case 16:return u.yytext="1",g.getLogger().debug("COLUMNS (LEX)",u.yytext),21;case 17:return 43;case 18:return"LINKSTYLE";case 19:return"INTERPOLATE";case 20:return this.pushState("CLASSDEF"),40;case 21:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";case 22:return this.popState(),this.pushState("CLASSDEFID"),41;case 23:return this.popState(),42;case 24:return this.pushState("CLASS"),44;case 25:return this.popState(),this.pushState("CLASS_STYLE"),45;case 26:return this.popState(),46;case 27:return this.pushState("STYLE_STMNT"),47;case 28:return this.popState(),this.pushState("STYLE_DEFINITION"),48;case 29:return this.popState(),49;case 30:return this.pushState("acc_title"),"acc_title";case 31:return this.popState(),"acc_title_value";case 32:return this.pushState("acc_descr"),"acc_descr";case 33:return this.popState(),"acc_descr_value";case 34:this.pushState("acc_descr_multiline");break;case 35:this.popState();break;case 36:return"acc_descr_multiline_value";case 37:return 30;case 38:return this.popState(),g.getLogger().debug("Lex: (("),"NODE_DEND";case 39:return this.popState(),g.getLogger().debug("Lex: (("),"NODE_DEND";case 40:return this.popState(),g.getLogger().debug("Lex: ))"),"NODE_DEND";case 41:return this.popState(),g.getLogger().debug("Lex: (("),"NODE_DEND";case 42:return this.popState(),g.getLogger().debug("Lex: (("),"NODE_DEND";case 43:return this.popState(),g.getLogger().debug("Lex: (-"),"NODE_DEND";case 44:return this.popState(),g.getLogger().debug("Lex: -)"),"NODE_DEND";case 45:return this.popState(),g.getLogger().debug("Lex: (("),"NODE_DEND";case 46:return this.popState(),g.getLogger().debug("Lex: ]]"),"NODE_DEND";case 47:return this.popState(),g.getLogger().debug("Lex: ("),"NODE_DEND";case 48:return this.popState(),g.getLogger().debug("Lex: ])"),"NODE_DEND";case 49:return this.popState(),g.getLogger().debug("Lex: /]"),"NODE_DEND";case 50:return this.popState(),g.getLogger().debug("Lex: /]"),"NODE_DEND";case 51:return this.popState(),g.getLogger().debug("Lex: )]"),"NODE_DEND";case 52:return this.popState(),g.getLogger().debug("Lex: )"),"NODE_DEND";case 53:return this.popState(),g.getLogger().debug("Lex: ]>"),"NODE_DEND";case 54:return this.popState(),g.getLogger().debug("Lex: ]"),"NODE_DEND";case 55:return g.getLogger().debug("Lexa: -)"),this.pushState("NODE"),36;case 56:return g.getLogger().debug("Lexa: (-"),this.pushState("NODE"),36;case 57:return g.getLogger().debug("Lexa: ))"),this.pushState("NODE"),36;case 58:return g.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;case 59:return g.getLogger().debug("Lex: ((("),this.pushState("NODE"),36;case 60:return g.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;case 61:return g.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;case 62:return g.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;case 63:return g.getLogger().debug("Lexc: >"),this.pushState("NODE"),36;case 64:return g.getLogger().debug("Lexa: (["),this.pushState("NODE"),36;case 65:return g.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;case 66:return this.pushState("NODE"),36;case 67:return this.pushState("NODE"),36;case 68:return this.pushState("NODE"),36;case 69:return this.pushState("NODE"),36;case 70:return this.pushState("NODE"),36;case 71:return this.pushState("NODE"),36;case 72:return this.pushState("NODE"),36;case 73:return g.getLogger().debug("Lexa: ["),this.pushState("NODE"),36;case 74:return this.pushState("BLOCK_ARROW"),g.getLogger().debug("LEX ARR START"),38;case 75:return g.getLogger().debug("Lex: NODE_ID",u.yytext),32;case 76:return g.getLogger().debug("Lex: EOF",u.yytext),8;case 77:this.pushState("md_string");break;case 78:this.pushState("md_string");break;case 79:return"NODE_DESCR";case 80:this.popState();break;case 81:g.getLogger().debug("Lex: Starting string"),this.pushState("string");break;case 82:g.getLogger().debug("LEX ARR: Starting string"),this.pushState("string");break;case 83:return g.getLogger().debug("LEX: NODE_DESCR:",u.yytext),"NODE_DESCR";case 84:g.getLogger().debug("LEX POPPING"),this.popState();break;case 85:g.getLogger().debug("Lex: =>BAE"),this.pushState("ARROW_DIR");break;case 86:return u.yytext=u.yytext.replace(/^,\s*/,""),g.getLogger().debug("Lex (right): dir:",u.yytext),"DIR";case 87:return u.yytext=u.yytext.replace(/^,\s*/,""),g.getLogger().debug("Lex (left):",u.yytext),"DIR";case 88:return u.yytext=u.yytext.replace(/^,\s*/,""),g.getLogger().debug("Lex (x):",u.yytext),"DIR";case 89:return u.yytext=u.yytext.replace(/^,\s*/,""),g.getLogger().debug("Lex (y):",u.yytext),"DIR";case 90:return u.yytext=u.yytext.replace(/^,\s*/,""),g.getLogger().debug("Lex (up):",u.yytext),"DIR";case 91:return u.yytext=u.yytext.replace(/^,\s*/,""),g.getLogger().debug("Lex (down):",u.yytext),"DIR";case 92:return u.yytext="]>",g.getLogger().debug("Lex (ARROW_DIR end):",u.yytext),this.popState(),this.popState(),"BLOCK_ARROW_END";case 93:return g.getLogger().debug("Lex: LINK","#"+u.yytext+"#"),15;case 94:return g.getLogger().debug("Lex: LINK",u.yytext),15;case 95:return g.getLogger().debug("Lex: LINK",u.yytext),15;case 96:return g.getLogger().debug("Lex: LINK",u.yytext),15;case 97:return g.getLogger().debug("Lex: START_LINK",u.yytext),this.pushState("LLABEL"),16;case 98:return g.getLogger().debug("Lex: START_LINK",u.yytext),this.pushState("LLABEL"),16;case 99:return g.getLogger().debug("Lex: START_LINK",u.yytext),this.pushState("LLABEL"),16;case 100:this.pushState("md_string");break;case 101:return g.getLogger().debug("Lex: Starting string"),this.pushState("string"),"LINK_LABEL";case 102:return this.popState(),g.getLogger().debug("Lex: LINK","#"+u.yytext+"#"),15;case 103:return this.popState(),g.getLogger().debug("Lex: LINK",u.yytext),15;case 104:return this.popState(),g.getLogger().debug("Lex: LINK",u.yytext),15;case 105:return g.getLogger().debug("Lex: COLON",u.yytext),u.yytext=u.yytext.slice(1),27}},"anonymous"),rules:[/^(?:block-beta\b)/,/^(?:block\s+)/,/^(?:block\n+)/,/^(?:block:)/,/^(?:[\s]+)/,/^(?:[\n]+)/,/^(?:((\u000D\u000A)|(\u000A)))/,/^(?:columns\s+auto\b)/,/^(?:columns\s+[\d]+)/,/^(?:["][`])/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:space[:]\d+)/,/^(?:space\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\s+)/,/^(?:DEFAULT\s+)/,/^(?:\w+\s+)/,/^(?:[^\n]*)/,/^(?:class\s+)/,/^(?:(\w+)+((,\s*\w+)*))/,/^(?:[^\n]*)/,/^(?:style\s+)/,/^(?:(\w+)+((,\s*\w+)*))/,/^(?:[^\n]*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:end\b\s*)/,/^(?:\(\(\()/,/^(?:\)\)\))/,/^(?:[\)]\))/,/^(?:\}\})/,/^(?:\})/,/^(?:\(-)/,/^(?:-\))/,/^(?:\(\()/,/^(?:\]\])/,/^(?:\()/,/^(?:\]\))/,/^(?:\\\])/,/^(?:\/\])/,/^(?:\)\])/,/^(?:[\)])/,/^(?:\]>)/,/^(?:[\]])/,/^(?:-\))/,/^(?:\(-)/,/^(?:\)\))/,/^(?:\))/,/^(?:\(\(\()/,/^(?:\(\()/,/^(?:\{\{)/,/^(?:\{)/,/^(?:>)/,/^(?:\(\[)/,/^(?:\()/,/^(?:\[\[)/,/^(?:\[\|)/,/^(?:\[\()/,/^(?:\)\)\))/,/^(?:\[\\)/,/^(?:\[\/)/,/^(?:\[\\)/,/^(?:\[)/,/^(?:<\[)/,/^(?:[^\(\[\n\-\)\{\}\s\<\>:]+)/,/^(?:$)/,/^(?:["][`])/,/^(?:["][`])/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["])/,/^(?:["])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:\]>\s*\()/,/^(?:,?\s*right\s*)/,/^(?:,?\s*left\s*)/,/^(?:,?\s*x\s*)/,/^(?:,?\s*y\s*)/,/^(?:,?\s*up\s*)/,/^(?:,?\s*down\s*)/,/^(?:\)\s*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*~~[\~]+\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:["][`])/,/^(?:["])/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?::\d+)/],conditions:{STYLE_DEFINITION:{rules:[29],inclusive:!1},STYLE_STMNT:{rules:[28],inclusive:!1},CLASSDEFID:{rules:[23],inclusive:!1},CLASSDEF:{rules:[21,22],inclusive:!1},CLASS_STYLE:{rules:[26],inclusive:!1},CLASS:{rules:[25],inclusive:!1},LLABEL:{rules:[100,101,102,103,104],inclusive:!1},ARROW_DIR:{rules:[86,87,88,89,90,91,92],inclusive:!1},BLOCK_ARROW:{rules:[77,82,85],inclusive:!1},NODE:{rules:[38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,78,81],inclusive:!1},md_string:{rules:[10,11,79,80],inclusive:!1},space:{rules:[],inclusive:!1},string:{rules:[13,14,83,84],inclusive:!1},acc_descr_multiline:{rules:[35,36],inclusive:!1},acc_descr:{rules:[33],inclusive:!1},acc_title:{rules:[31],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,12,15,16,17,18,19,20,24,27,30,32,34,37,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,93,94,95,96,97,98,99,105],inclusive:!0}}};return N}();v.lexer=T;function k(){this.yy={}}return d(k,"Parser"),k.prototype=v,v.Parser=k,new k}();yt.parser=yt;var Ee=yt,V=new Map,St=[],bt=new Map,Ct="color",Bt="fill",_e="bgFill",Ht=",",ke=z(),ct=new Map,De=d(e=>me.sanitizeText(e,ke),"sanitizeText"),Ne=d(function(e,t=""){let r=ct.get(e);r||(r={id:e,styles:[],textStyles:[]},ct.set(e,r)),t!=null&&t.split(Ht).forEach(n=>{const i=n.replace(/([^;]*);/,"$1").trim();if(RegExp(Ct).exec(n)){const s=i.replace(Bt,_e).replace(Ct,Bt);r.textStyles.push(s)}r.styles.push(i)})},"addStyleClass"),Te=d(function(e,t=""){const r=V.get(e);t!=null&&(r.styles=t.split(Ht))},"addStyle2Node"),Ce=d(function(e,t){e.split(",").forEach(function(r){let n=V.get(r);if(n===void 0){const i=r.trim();n={id:i,type:"na",children:[]},V.set(i,n)}n.classes||(n.classes=[]),n.classes.push(t)})},"setCssClass"),Kt=d((e,t)=>{const r=e.flat(),n=[];for(const i of r){if(i.label&&(i.label=De(i.label)),i.type==="classDef"){Ne(i.id,i.css);continue}if(i.type==="applyClass"){Ce(i.id,(i==null?void 0:i.styleClass)??"");continue}if(i.type==="applyStyles"){i!=null&&i.stylesStr&&Te(i.id,i==null?void 0:i.stylesStr);continue}if(i.type==="column-setting")t.columns=i.columns??-1;else if(i.type==="edge"){const a=(bt.get(i.id)??0)+1;bt.set(i.id,a),i.id=a+"-"+i.id,St.push(i)}else{i.label||(i.type==="composite"?i.label="":i.label=i.id);const a=V.get(i.id);if(a===void 0?V.set(i.id,i):(i.type!=="na"&&(a.type=i.type),i.label!==i.id&&(a.label=i.label)),i.children&&Kt(i.children,i),i.type==="space"){const s=i.width??1;for(let l=0;l{L.debug("Clear called"),xe(),rt={id:"root",type:"composite",children:[],columns:-1},V=new Map([["root",rt]]),vt=[],ct=new Map,St=[],bt=new Map},"clear");function Xt(e){switch(L.debug("typeStr2Type",e),e){case"[]":return"square";case"()":return L.debug("we have a round"),"round";case"(())":return"circle";case">]":return"rect_left_inv_arrow";case"{}":return"diamond";case"{{}}":return"hexagon";case"([])":return"stadium";case"[[]]":return"subroutine";case"[()]":return"cylinder";case"((()))":return"doublecircle";case"[//]":return"lean_right";case"[\\\\]":return"lean_left";case"[/\\]":return"trapezoid";case"[\\/]":return"inv_trapezoid";case"<[]>":return"block_arrow";default:return"na"}}d(Xt,"typeStr2Type");function Ut(e){switch(L.debug("typeStr2Type",e),e){case"==":return"thick";default:return"normal"}}d(Ut,"edgeTypeStr2Type");function jt(e){switch(e.trim()){case"--x":return"arrow_cross";case"--o":return"arrow_circle";default:return"arrow_point"}}d(jt,"edgeStrToEdgeData");var It=0,Ie=d(()=>(It++,"id-"+Math.random().toString(36).substr(2,12)+"-"+It),"generateId"),Oe=d(e=>{rt.children=e,Kt(e,rt),vt=rt.children},"setHierarchy"),Re=d(e=>{const t=V.get(e);return t?t.columns?t.columns:t.children?t.children.length:-1:-1},"getColumns"),ze=d(()=>[...V.values()],"getBlocksFlat"),Ae=d(()=>vt||[],"getBlocks"),Me=d(()=>St,"getEdges"),Fe=d(e=>V.get(e),"getBlock"),We=d(e=>{V.set(e.id,e)},"setBlock"),Pe=d(()=>console,"getLogger"),Ye=d(function(){return ct},"getClasses"),He={getConfig:d(()=>at().block,"getConfig"),typeStr2Type:Xt,edgeTypeStr2Type:Ut,edgeStrToEdgeData:jt,getLogger:Pe,getBlocksFlat:ze,getBlocks:Ae,getEdges:Me,setHierarchy:Oe,getBlock:Fe,setBlock:We,getColumns:Re,getClasses:Ye,clear:Be,generateId:Ie},Ke=He,nt=d((e,t)=>{const r=ve,n=r(e,"r"),i=r(e,"g"),a=r(e,"b");return ye(n,i,a,t)},"fade"),Xe=d(e=>`.label { + font-family: ${e.fontFamily}; + color: ${e.nodeTextColor||e.textColor}; + } + .cluster-label text { + fill: ${e.titleColor}; + } + .cluster-label span,p { + color: ${e.titleColor}; + } + + + + .label text,span,p { + fill: ${e.nodeTextColor||e.textColor}; + color: ${e.nodeTextColor||e.textColor}; + } + + .node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${e.mainBkg}; + stroke: ${e.nodeBorder}; + stroke-width: 1px; + } + .flowchart-label text { + text-anchor: middle; + } + // .flowchart-label .text-outer-tspan { + // text-anchor: middle; + // } + // .flowchart-label .text-inner-tspan { + // text-anchor: start; + // } + + .node .label { + text-align: center; + } + .node.clickable { + cursor: pointer; + } + + .arrowheadPath { + fill: ${e.arrowheadColor}; + } + + .edgePath .path { + stroke: ${e.lineColor}; + stroke-width: 2.0px; + } + + .flowchart-link { + stroke: ${e.lineColor}; + fill: none; + } + + .edgeLabel { + background-color: ${e.edgeLabelBackground}; + rect { + opacity: 0.5; + background-color: ${e.edgeLabelBackground}; + fill: ${e.edgeLabelBackground}; + } + text-align: center; + } + + /* For html labels only */ + .labelBkg { + background-color: ${nt(e.edgeLabelBackground,.5)}; + // background-color: + } + + .node .cluster { + // fill: ${nt(e.mainBkg,.5)}; + fill: ${nt(e.clusterBkg,.5)}; + stroke: ${nt(e.clusterBorder,.2)}; + box-shadow: rgba(50, 50, 93, 0.25) 0px 13px 27px -5px, rgba(0, 0, 0, 0.3) 0px 8px 16px -8px; + stroke-width: 1px; + } + + .cluster text { + fill: ${e.titleColor}; + } + + .cluster span,p { + color: ${e.titleColor}; + } + /* .cluster div { + color: ${e.titleColor}; + } */ + + div.mermaidTooltip { + position: absolute; + text-align: center; + max-width: 200px; + padding: 2px; + font-family: ${e.fontFamily}; + font-size: 12px; + background: ${e.tertiaryColor}; + border: 1px solid ${e.border2}; + border-radius: 2px; + pointer-events: none; + z-index: 100; + } + + .flowchartTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${e.textColor}; + } +`,"getStyles"),Ue=Xe,je=d((e,t,r,n)=>{t.forEach(i=>{rr[i](e,r,n)})},"insertMarkers"),Ve=d((e,t,r)=>{L.trace("Making markers for ",r),e.append("defs").append("marker").attr("id",r+"_"+t+"-extensionStart").attr("class","marker extension "+t).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),e.append("defs").append("marker").attr("id",r+"_"+t+"-extensionEnd").attr("class","marker extension "+t).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z")},"extension"),Ge=d((e,t,r)=>{e.append("defs").append("marker").attr("id",r+"_"+t+"-compositionStart").attr("class","marker composition "+t).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),e.append("defs").append("marker").attr("id",r+"_"+t+"-compositionEnd").attr("class","marker composition "+t).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"composition"),Ze=d((e,t,r)=>{e.append("defs").append("marker").attr("id",r+"_"+t+"-aggregationStart").attr("class","marker aggregation "+t).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),e.append("defs").append("marker").attr("id",r+"_"+t+"-aggregationEnd").attr("class","marker aggregation "+t).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"aggregation"),qe=d((e,t,r)=>{e.append("defs").append("marker").attr("id",r+"_"+t+"-dependencyStart").attr("class","marker dependency "+t).attr("refX",6).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),e.append("defs").append("marker").attr("id",r+"_"+t+"-dependencyEnd").attr("class","marker dependency "+t).attr("refX",13).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"dependency"),Je=d((e,t,r)=>{e.append("defs").append("marker").attr("id",r+"_"+t+"-lollipopStart").attr("class","marker lollipop "+t).attr("refX",13).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6),e.append("defs").append("marker").attr("id",r+"_"+t+"-lollipopEnd").attr("class","marker lollipop "+t).attr("refX",1).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6)},"lollipop"),Qe=d((e,t,r)=>{e.append("marker").attr("id",r+"_"+t+"-pointEnd").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",6).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),e.append("marker").attr("id",r+"_"+t+"-pointStart").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",4.5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"point"),$e=d((e,t,r)=>{e.append("marker").attr("id",r+"_"+t+"-circleEnd").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),e.append("marker").attr("id",r+"_"+t+"-circleStart").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"circle"),tr=d((e,t,r)=>{e.append("marker").attr("id",r+"_"+t+"-crossEnd").attr("class","marker cross "+t).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),e.append("marker").attr("id",r+"_"+t+"-crossStart").attr("class","marker cross "+t).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0")},"cross"),er=d((e,t,r)=>{e.append("defs").append("marker").attr("id",r+"_"+t+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","strokeWidth").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},"barb"),rr={extension:Ve,composition:Ge,aggregation:Ze,dependency:qe,lollipop:Je,point:Qe,circle:$e,cross:tr,barb:er},ar=je,Wt,Pt,I=((Pt=(Wt=z())==null?void 0:Wt.block)==null?void 0:Pt.padding)??8;function Vt(e,t){if(e===0||!Number.isInteger(e))throw new Error("Columns must be an integer !== 0.");if(t<0||!Number.isInteger(t))throw new Error("Position must be a non-negative integer."+t);if(e<0)return{px:t,py:0};if(e===1)return{px:0,py:t};const r=t%e,n=Math.floor(t/e);return{px:r,py:n}}d(Vt,"calculateBlockPosition");var sr=d(e=>{let t=0,r=0;for(const n of e.children){const{width:i,height:a,x:s,y:l}=n.size??{width:0,height:0,x:0,y:0};L.debug("getMaxChildSize abc95 child:",n.id,"width:",i,"height:",a,"x:",s,"y:",l,n.type),n.type!=="space"&&(i>t&&(t=i/(e.widthInColumns??1)),a>r&&(r=a))}return{width:t,height:r}},"getMaxChildSize");function ot(e,t,r=0,n=0){var s,l,o,f,h,y,b,m,E,D,v;L.debug("setBlockSizes abc95 (start)",e.id,(s=e==null?void 0:e.size)==null?void 0:s.x,"block width =",e==null?void 0:e.size,"sieblingWidth",r),(l=e==null?void 0:e.size)!=null&&l.width||(e.size={width:r,height:n,x:0,y:0});let i=0,a=0;if(((o=e.children)==null?void 0:o.length)>0){for(const S of e.children)ot(S,t);const T=sr(e);i=T.width,a=T.height,L.debug("setBlockSizes abc95 maxWidth of",e.id,":s children is ",i,a);for(const S of e.children)S.size&&(L.debug(`abc95 Setting size of children of ${e.id} id=${S.id} ${i} ${a} ${JSON.stringify(S.size)}`),S.size.width=i*(S.widthInColumns??1)+I*((S.widthInColumns??1)-1),S.size.height=a,S.size.x=0,S.size.y=0,L.debug(`abc95 updating size of ${e.id} children child:${S.id} maxWidth:${i} maxHeight:${a}`));for(const S of e.children)ot(S,t,i,a);const k=e.columns??-1;let N=0;for(const S of e.children)N+=S.widthInColumns??1;let x=e.children.length;k>0&&k0?Math.min(e.children.length,k):e.children.length;if(S>0){const c=(u-S*I-I)/S;L.debug("abc95 (growing to fit) width",e.id,u,(b=e.size)==null?void 0:b.width,c);for(const _ of e.children)_.size&&(_.size.width=c)}}e.size={width:u,height:w,x:0,y:0}}L.debug("setBlockSizes abc94 (done)",e.id,(m=e==null?void 0:e.size)==null?void 0:m.x,(E=e==null?void 0:e.size)==null?void 0:E.width,(D=e==null?void 0:e.size)==null?void 0:D.y,(v=e==null?void 0:e.size)==null?void 0:v.height)}d(ot,"setBlockSizes");function Et(e,t){var n,i,a,s,l,o,f,h,y,b,m,E,D,v,T,k,N;L.debug(`abc85 layout blocks (=>layoutBlocks) ${e.id} x: ${(n=e==null?void 0:e.size)==null?void 0:n.x} y: ${(i=e==null?void 0:e.size)==null?void 0:i.y} width: ${(a=e==null?void 0:e.size)==null?void 0:a.width}`);const r=e.columns??-1;if(L.debug("layoutBlocks columns abc95",e.id,"=>",r,e),e.children&&e.children.length>0){const x=((l=(s=e==null?void 0:e.children[0])==null?void 0:s.size)==null?void 0:l.width)??0,g=e.children.length*x+(e.children.length-1)*I;L.debug("widthOfChildren 88",g,"posX");let u=0;L.debug("abc91 block?.size?.x",e.id,(o=e==null?void 0:e.size)==null?void 0:o.x);let w=(f=e==null?void 0:e.size)!=null&&f.x?((h=e==null?void 0:e.size)==null?void 0:h.x)+(-((y=e==null?void 0:e.size)==null?void 0:y.width)/2||0):-I,S=0;for(const c of e.children){const _=e;if(!c.size)continue;const{width:p,height:A}=c.size,{px:O,py:X}=Vt(r,u);if(X!=S&&(S=X,w=(b=e==null?void 0:e.size)!=null&&b.x?((m=e==null?void 0:e.size)==null?void 0:m.x)+(-((E=e==null?void 0:e.size)==null?void 0:E.width)/2||0):-I,L.debug("New row in layout for block",e.id," and child ",c.id,S)),L.debug(`abc89 layout blocks (child) id: ${c.id} Pos: ${u} (px, py) ${O},${X} (${(D=_==null?void 0:_.size)==null?void 0:D.x},${(v=_==null?void 0:_.size)==null?void 0:v.y}) parent: ${_.id} width: ${p}${I}`),_.size){const W=p/2;c.size.x=w+I+W,L.debug(`abc91 layout blocks (calc) px, pyid:${c.id} startingPos=X${w} new startingPosX${c.size.x} ${W} padding=${I} width=${p} halfWidth=${W} => x:${c.size.x} y:${c.size.y} ${c.widthInColumns} (width * (child?.w || 1)) / 2 ${p*((c==null?void 0:c.widthInColumns)??1)/2}`),w=c.size.x+W,c.size.y=_.size.y-_.size.height/2+X*(A+I)+A/2+I,L.debug(`abc88 layout blocks (calc) px, pyid:${c.id}startingPosX${w}${I}${W}=>x:${c.size.x}y:${c.size.y}${c.widthInColumns}(width * (child?.w || 1)) / 2${p*((c==null?void 0:c.widthInColumns)??1)/2}`)}c.children&&Et(c),u+=(c==null?void 0:c.widthInColumns)??1,L.debug("abc88 columnsPos",c,u)}}L.debug(`layout blocks (<==layoutBlocks) ${e.id} x: ${(T=e==null?void 0:e.size)==null?void 0:T.x} y: ${(k=e==null?void 0:e.size)==null?void 0:k.y} width: ${(N=e==null?void 0:e.size)==null?void 0:N.width}`)}d(Et,"layoutBlocks");function _t(e,{minX:t,minY:r,maxX:n,maxY:i}={minX:0,minY:0,maxX:0,maxY:0}){if(e.size&&e.id!=="root"){const{x:a,y:s,width:l,height:o}=e.size;a-l/2n&&(n=a+l/2),s+o/2>i&&(i=s+o/2)}if(e.children)for(const a of e.children)({minX:t,minY:r,maxX:n,maxY:i}=_t(a,{minX:t,minY:r,maxX:n,maxY:i}));return{minX:t,minY:r,maxX:n,maxY:i}}d(_t,"findBounds");function Gt(e){const t=e.getBlock("root");if(!t)return;ot(t,e,0,0),Et(t),L.debug("getBlocks",JSON.stringify(t,null,2));const{minX:r,minY:n,maxX:i,maxY:a}=_t(t),s=a-n,l=i-r;return{x:r,y:n,width:l,height:s}}d(Gt,"layout");function wt(e,t){t&&e.attr("style",t)}d(wt,"applyStyle");function Zt(e){const t=R(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),r=t.append("xhtml:div"),n=e.label,i=e.isNode?"nodeLabel":"edgeLabel",a=r.append("span");return a.html(n),wt(a,e.labelStyle),a.attr("class",i),wt(r,e.labelStyle),r.style("display","inline-block"),r.style("white-space","nowrap"),r.attr("xmlns","http://www.w3.org/1999/xhtml"),t.node()}d(Zt,"addHtmlLabel");var ir=d((e,t,r,n)=>{let i=e||"";if(typeof i=="object"&&(i=i[0]),Z(z().flowchart.htmlLabels)){i=i.replace(/\\n|\n/g,"
    "),L.debug("vertexText"+i);const a={isNode:n,label:we(xt(i)),labelStyle:t.replace("fill:","color:")};return Zt(a)}else{const a=document.createElementNS("http://www.w3.org/2000/svg","text");a.setAttribute("style",t.replace("color:","fill:"));let s=[];typeof i=="string"?s=i.split(/\\n|\n|/gi):Array.isArray(i)?s=i:s=[];for(const l of s){const o=document.createElementNS("http://www.w3.org/2000/svg","tspan");o.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),o.setAttribute("dy","1em"),o.setAttribute("x","0"),r?o.setAttribute("class","title-row"):o.setAttribute("class","row"),o.textContent=l.trim(),a.appendChild(o)}return a}},"createLabel"),j=ir,nr=d((e,t,r,n,i)=>{t.arrowTypeStart&&Ot(e,"start",t.arrowTypeStart,r,n,i),t.arrowTypeEnd&&Ot(e,"end",t.arrowTypeEnd,r,n,i)},"addEdgeMarkers"),lr={arrow_cross:"cross",arrow_point:"point",arrow_barb:"barb",arrow_circle:"circle",aggregation:"aggregation",extension:"extension",composition:"composition",dependency:"dependency",lollipop:"lollipop"},Ot=d((e,t,r,n,i,a)=>{const s=lr[r];if(!s){L.warn(`Unknown arrow type: ${r}`);return}const l=t==="start"?"Start":"End";e.attr(`marker-${t}`,`url(${n}#${i}_${a}-${s}${l})`)},"addEdgeMarker"),mt={},P={},cr=d((e,t)=>{const r=z(),n=Z(r.flowchart.htmlLabels),i=t.labelType==="markdown"?Yt(e,t.label,{style:t.labelStyle,useHtmlLabels:n,addSvgBackground:!0},r):j(t.label,t.labelStyle),a=e.insert("g").attr("class","edgeLabel"),s=a.insert("g").attr("class","label");s.node().appendChild(i);let l=i.getBBox();if(n){const f=i.children[0],h=R(i);l=f.getBoundingClientRect(),h.attr("width",l.width),h.attr("height",l.height)}s.attr("transform","translate("+-l.width/2+", "+-l.height/2+")"),mt[t.id]=a,t.width=l.width,t.height=l.height;let o;if(t.startLabelLeft){const f=j(t.startLabelLeft,t.labelStyle),h=e.insert("g").attr("class","edgeTerminals"),y=h.insert("g").attr("class","inner");o=y.node().appendChild(f);const b=f.getBBox();y.attr("transform","translate("+-b.width/2+", "+-b.height/2+")"),P[t.id]||(P[t.id]={}),P[t.id].startLeft=h,et(o,t.startLabelLeft)}if(t.startLabelRight){const f=j(t.startLabelRight,t.labelStyle),h=e.insert("g").attr("class","edgeTerminals"),y=h.insert("g").attr("class","inner");o=h.node().appendChild(f),y.node().appendChild(f);const b=f.getBBox();y.attr("transform","translate("+-b.width/2+", "+-b.height/2+")"),P[t.id]||(P[t.id]={}),P[t.id].startRight=h,et(o,t.startLabelRight)}if(t.endLabelLeft){const f=j(t.endLabelLeft,t.labelStyle),h=e.insert("g").attr("class","edgeTerminals"),y=h.insert("g").attr("class","inner");o=y.node().appendChild(f);const b=f.getBBox();y.attr("transform","translate("+-b.width/2+", "+-b.height/2+")"),h.node().appendChild(f),P[t.id]||(P[t.id]={}),P[t.id].endLeft=h,et(o,t.endLabelLeft)}if(t.endLabelRight){const f=j(t.endLabelRight,t.labelStyle),h=e.insert("g").attr("class","edgeTerminals"),y=h.insert("g").attr("class","inner");o=y.node().appendChild(f);const b=f.getBBox();y.attr("transform","translate("+-b.width/2+", "+-b.height/2+")"),h.node().appendChild(f),P[t.id]||(P[t.id]={}),P[t.id].endRight=h,et(o,t.endLabelRight)}return i},"insertEdgeLabel");function et(e,t){z().flowchart.htmlLabels&&e&&(e.style.width=t.length*9+"px",e.style.height="12px")}d(et,"setTerminalWidth");var or=d((e,t)=>{L.debug("Moving label abc88 ",e.id,e.label,mt[e.id],t);let r=t.updatedPath?t.updatedPath:t.originalPath;const n=z(),{subGraphTitleTotalMargin:i}=ge(n);if(e.label){const a=mt[e.id];let s=e.x,l=e.y;if(r){const o=tt.calcLabelPosition(r);L.debug("Moving label "+e.label+" from (",s,",",l,") to (",o.x,",",o.y,") abc88"),t.updatedPath&&(s=o.x,l=o.y)}a.attr("transform",`translate(${s}, ${l+i/2})`)}if(e.startLabelLeft){const a=P[e.id].startLeft;let s=e.x,l=e.y;if(r){const o=tt.calcTerminalLabelPosition(e.arrowTypeStart?10:0,"start_left",r);s=o.x,l=o.y}a.attr("transform",`translate(${s}, ${l})`)}if(e.startLabelRight){const a=P[e.id].startRight;let s=e.x,l=e.y;if(r){const o=tt.calcTerminalLabelPosition(e.arrowTypeStart?10:0,"start_right",r);s=o.x,l=o.y}a.attr("transform",`translate(${s}, ${l})`)}if(e.endLabelLeft){const a=P[e.id].endLeft;let s=e.x,l=e.y;if(r){const o=tt.calcTerminalLabelPosition(e.arrowTypeEnd?10:0,"end_left",r);s=o.x,l=o.y}a.attr("transform",`translate(${s}, ${l})`)}if(e.endLabelRight){const a=P[e.id].endRight;let s=e.x,l=e.y;if(r){const o=tt.calcTerminalLabelPosition(e.arrowTypeEnd?10:0,"end_right",r);s=o.x,l=o.y}a.attr("transform",`translate(${s}, ${l})`)}},"positionEdgeLabel"),hr=d((e,t)=>{const r=e.x,n=e.y,i=Math.abs(t.x-r),a=Math.abs(t.y-n),s=e.width/2,l=e.height/2;return i>=s||a>=l},"outsideNode"),dr=d((e,t,r)=>{L.debug(`intersection calc abc89: + outsidePoint: ${JSON.stringify(t)} + insidePoint : ${JSON.stringify(r)} + node : x:${e.x} y:${e.y} w:${e.width} h:${e.height}`);const n=e.x,i=e.y,a=Math.abs(n-r.x),s=e.width/2;let l=r.xMath.abs(n-t.x)*o){let y=r.y{L.debug("abc88 cutPathAtIntersect",e,t);let r=[],n=e[0],i=!1;return e.forEach(a=>{if(!hr(t,a)&&!i){const s=dr(t,n,a);let l=!1;r.forEach(o=>{l=l||o.x===s.x&&o.y===s.y}),r.some(o=>o.x===s.x&&o.y===s.y)||r.push(s),i=!0}else n=a,i||r.push(a)}),r},"cutPathAtIntersect"),gr=d(function(e,t,r,n,i,a,s){let l=r.points;L.debug("abc88 InsertEdge: edge=",r,"e=",t);let o=!1;const f=a.node(t.v);var h=a.node(t.w);h!=null&&h.intersect&&(f!=null&&f.intersect)&&(l=l.slice(1,r.points.length-1),l.unshift(f.intersect(l[0])),l.push(h.intersect(l[l.length-1]))),r.toCluster&&(L.debug("to cluster abc88",n[r.toCluster]),l=Rt(r.points,n[r.toCluster].node),o=!0),r.fromCluster&&(L.debug("from cluster abc88",n[r.fromCluster]),l=Rt(l.reverse(),n[r.fromCluster].node).reverse(),o=!0);const y=l.filter(x=>!Number.isNaN(x.y));let b=be;r.curve&&(i==="graph"||i==="flowchart")&&(b=r.curve);const{x:m,y:E}=ue(r),D=pe().x(m).y(E).curve(b);let v;switch(r.thickness){case"normal":v="edge-thickness-normal";break;case"thick":v="edge-thickness-thick";break;case"invisible":v="edge-thickness-thick";break;default:v=""}switch(r.pattern){case"solid":v+=" edge-pattern-solid";break;case"dotted":v+=" edge-pattern-dotted";break;case"dashed":v+=" edge-pattern-dashed";break}const T=e.append("path").attr("d",D(y)).attr("id",r.id).attr("class"," "+v+(r.classes?" "+r.classes:"")).attr("style",r.style);let k="";(z().flowchart.arrowMarkerAbsolute||z().state.arrowMarkerAbsolute)&&(k=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,k=k.replace(/\(/g,"\\("),k=k.replace(/\)/g,"\\)")),nr(T,r,k,s,i);let N={};return o&&(N.updatedPath=l),N.originalPath=r.points,N},"insertEdge"),ur=d(e=>{const t=new Set;for(const r of e)switch(r){case"x":t.add("right"),t.add("left");break;case"y":t.add("up"),t.add("down");break;default:t.add(r);break}return t},"expandAndDeduplicateDirections"),pr=d((e,t,r)=>{const n=ur(e),i=2,a=t.height+2*r.padding,s=a/i,l=t.width+2*s+r.padding,o=r.padding/2;return n.has("right")&&n.has("left")&&n.has("up")&&n.has("down")?[{x:0,y:0},{x:s,y:0},{x:l/2,y:2*o},{x:l-s,y:0},{x:l,y:0},{x:l,y:-a/3},{x:l+2*o,y:-a/2},{x:l,y:-2*a/3},{x:l,y:-a},{x:l-s,y:-a},{x:l/2,y:-a-2*o},{x:s,y:-a},{x:0,y:-a},{x:0,y:-2*a/3},{x:-2*o,y:-a/2},{x:0,y:-a/3}]:n.has("right")&&n.has("left")&&n.has("up")?[{x:s,y:0},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:s,y:-a},{x:0,y:-a/2}]:n.has("right")&&n.has("left")&&n.has("down")?[{x:0,y:0},{x:s,y:-a},{x:l-s,y:-a},{x:l,y:0}]:n.has("right")&&n.has("up")&&n.has("down")?[{x:0,y:0},{x:l,y:-s},{x:l,y:-a+s},{x:0,y:-a}]:n.has("left")&&n.has("up")&&n.has("down")?[{x:l,y:0},{x:0,y:-s},{x:0,y:-a+s},{x:l,y:-a}]:n.has("right")&&n.has("left")?[{x:s,y:0},{x:s,y:-o},{x:l-s,y:-o},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:l-s,y:-a+o},{x:s,y:-a+o},{x:s,y:-a},{x:0,y:-a/2}]:n.has("up")&&n.has("down")?[{x:l/2,y:0},{x:0,y:-o},{x:s,y:-o},{x:s,y:-a+o},{x:0,y:-a+o},{x:l/2,y:-a},{x:l,y:-a+o},{x:l-s,y:-a+o},{x:l-s,y:-o},{x:l,y:-o}]:n.has("right")&&n.has("up")?[{x:0,y:0},{x:l,y:-s},{x:0,y:-a}]:n.has("right")&&n.has("down")?[{x:0,y:0},{x:l,y:0},{x:0,y:-a}]:n.has("left")&&n.has("up")?[{x:l,y:0},{x:0,y:-s},{x:l,y:-a}]:n.has("left")&&n.has("down")?[{x:l,y:0},{x:0,y:0},{x:l,y:-a}]:n.has("right")?[{x:s,y:-o},{x:s,y:-o},{x:l-s,y:-o},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:l-s,y:-a+o},{x:s,y:-a+o},{x:s,y:-a+o}]:n.has("left")?[{x:s,y:0},{x:s,y:-o},{x:l-s,y:-o},{x:l-s,y:-a+o},{x:s,y:-a+o},{x:s,y:-a},{x:0,y:-a/2}]:n.has("up")?[{x:s,y:-o},{x:s,y:-a+o},{x:0,y:-a+o},{x:l/2,y:-a},{x:l,y:-a+o},{x:l-s,y:-a+o},{x:l-s,y:-o}]:n.has("down")?[{x:l/2,y:0},{x:0,y:-o},{x:s,y:-o},{x:s,y:-a+o},{x:l-s,y:-a+o},{x:l-s,y:-o},{x:l,y:-o}]:[{x:0,y:0}]},"getArrowPoints");function qt(e,t){return e.intersect(t)}d(qt,"intersectNode");var fr=qt;function Jt(e,t,r,n){var i=e.x,a=e.y,s=i-n.x,l=a-n.y,o=Math.sqrt(t*t*l*l+r*r*s*s),f=Math.abs(t*r*s/o);n.x0}d(Lt,"sameSign");var yr=te,br=ee;function ee(e,t,r){var n=e.x,i=e.y,a=[],s=Number.POSITIVE_INFINITY,l=Number.POSITIVE_INFINITY;typeof t.forEach=="function"?t.forEach(function(E){s=Math.min(s,E.x),l=Math.min(l,E.y)}):(s=Math.min(s,t.x),l=Math.min(l,t.y));for(var o=n-e.width/2-s,f=i-e.height/2-l,h=0;h1&&a.sort(function(E,D){var v=E.x-r.x,T=E.y-r.y,k=Math.sqrt(v*v+T*T),N=D.x-r.x,x=D.y-r.y,g=Math.sqrt(N*N+x*x);return k{var r=e.x,n=e.y,i=t.x-r,a=t.y-n,s=e.width/2,l=e.height/2,o,f;return Math.abs(a)*s>Math.abs(i)*l?(a<0&&(l=-l),o=a===0?0:l*i/a,f=l):(i<0&&(s=-s),o=s,f=i===0?0:s*a/i),{x:r+o,y:n+f}},"intersectRect"),mr=wr,C={node:fr,circle:xr,ellipse:Qt,polygon:br,rect:mr},F=d(async(e,t,r,n)=>{const i=z();let a;const s=t.useHtmlLabels||Z(i.flowchart.htmlLabels);r?a=r:a="node default";const l=e.insert("g").attr("class",a).attr("id",t.domId||t.id),o=l.insert("g").attr("class","label").attr("style",t.labelStyle);let f;t.labelText===void 0?f="":f=typeof t.labelText=="string"?t.labelText:t.labelText[0];const h=o.node();let y;t.labelType==="markdown"?y=Yt(o,Tt(xt(f),i),{useHtmlLabels:s,width:t.width||i.flowchart.wrappingWidth,classes:"markdown-node-label"},i):y=h.appendChild(j(Tt(xt(f),i),t.labelStyle,!1,n));let b=y.getBBox();const m=t.padding/2;if(Z(i.flowchart.htmlLabels)){const E=y.children[0],D=R(y),v=E.getElementsByTagName("img");if(v){const T=f.replace(/]*>/g,"").trim()==="";await Promise.all([...v].map(k=>new Promise(N=>{function x(){if(k.style.display="flex",k.style.flexDirection="column",T){const g=i.fontSize?i.fontSize:window.getComputedStyle(document.body).fontSize,w=parseInt(g,10)*5+"px";k.style.minWidth=w,k.style.maxWidth=w}else k.style.width="100%";N(k)}d(x,"setupImage"),setTimeout(()=>{k.complete&&x()}),k.addEventListener("error",x),k.addEventListener("load",x)})))}b=E.getBoundingClientRect(),D.attr("width",b.width),D.attr("height",b.height)}return s?o.attr("transform","translate("+-b.width/2+", "+-b.height/2+")"):o.attr("transform","translate(0, "+-b.height/2+")"),t.centerLabel&&o.attr("transform","translate("+-b.width/2+", "+-b.height/2+")"),o.insert("rect",":first-child"),{shapeSvg:l,bbox:b,halfPadding:m,label:o}},"labelHelper"),B=d((e,t)=>{const r=t.node().getBBox();e.width=r.width,e.height=r.height},"updateNodeBounds");function G(e,t,r,n){return e.insert("polygon",":first-child").attr("points",n.map(function(i){return i.x+","+i.y}).join(" ")).attr("class","label-container").attr("transform","translate("+-t/2+","+r/2+")")}d(G,"insertPolygonShape");var Lr=d(async(e,t)=>{t.useHtmlLabels||z().flowchart.htmlLabels||(t.centerLabel=!0);const{shapeSvg:n,bbox:i,halfPadding:a}=await F(e,t,"node "+t.classes,!0);L.info("Classes = ",t.classes);const s=n.insert("rect",":first-child");return s.attr("rx",t.rx).attr("ry",t.ry).attr("x",-i.width/2-a).attr("y",-i.height/2-a).attr("width",i.width+t.padding).attr("height",i.height+t.padding),B(t,s),t.intersect=function(l){return C.rect(t,l)},n},"note"),Sr=Lr,zt=d(e=>e?" "+e:"","formatClass"),K=d((e,t)=>`${t||"node default"}${zt(e.classes)} ${zt(e.class)}`,"getClassesFromNode"),At=d(async(e,t)=>{const{shapeSvg:r,bbox:n}=await F(e,t,K(t,void 0),!0),i=n.width+t.padding,a=n.height+t.padding,s=i+a,l=[{x:s/2,y:0},{x:s,y:-s/2},{x:s/2,y:-s},{x:0,y:-s/2}];L.info("Question main (Circle)");const o=G(r,s,s,l);return o.attr("style",t.style),B(t,o),t.intersect=function(f){return L.warn("Intersect called"),C.polygon(t,l,f)},r},"question"),vr=d((e,t)=>{const r=e.insert("g").attr("class","node default").attr("id",t.domId||t.id),n=28,i=[{x:0,y:n/2},{x:n/2,y:0},{x:0,y:-n/2},{x:-n/2,y:0}];return r.insert("polygon",":first-child").attr("points",i.map(function(s){return s.x+","+s.y}).join(" ")).attr("class","state-start").attr("r",7).attr("width",28).attr("height",28),t.width=28,t.height=28,t.intersect=function(s){return C.circle(t,14,s)},r},"choice"),Er=d(async(e,t)=>{const{shapeSvg:r,bbox:n}=await F(e,t,K(t,void 0),!0),i=4,a=n.height+t.padding,s=a/i,l=n.width+2*s+t.padding,o=[{x:s,y:0},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:s,y:-a},{x:0,y:-a/2}],f=G(r,l,a,o);return f.attr("style",t.style),B(t,f),t.intersect=function(h){return C.polygon(t,o,h)},r},"hexagon"),_r=d(async(e,t)=>{const{shapeSvg:r,bbox:n}=await F(e,t,void 0,!0),i=2,a=n.height+2*t.padding,s=a/i,l=n.width+2*s+t.padding,o=pr(t.directions,n,t),f=G(r,l,a,o);return f.attr("style",t.style),B(t,f),t.intersect=function(h){return C.polygon(t,o,h)},r},"block_arrow"),kr=d(async(e,t)=>{const{shapeSvg:r,bbox:n}=await F(e,t,K(t,void 0),!0),i=n.width+t.padding,a=n.height+t.padding,s=[{x:-a/2,y:0},{x:i,y:0},{x:i,y:-a},{x:-a/2,y:-a},{x:0,y:-a/2}];return G(r,i,a,s).attr("style",t.style),t.width=i+a,t.height=a,t.intersect=function(o){return C.polygon(t,s,o)},r},"rect_left_inv_arrow"),Dr=d(async(e,t)=>{const{shapeSvg:r,bbox:n}=await F(e,t,K(t),!0),i=n.width+t.padding,a=n.height+t.padding,s=[{x:-2*a/6,y:0},{x:i-a/6,y:0},{x:i+2*a/6,y:-a},{x:a/6,y:-a}],l=G(r,i,a,s);return l.attr("style",t.style),B(t,l),t.intersect=function(o){return C.polygon(t,s,o)},r},"lean_right"),Nr=d(async(e,t)=>{const{shapeSvg:r,bbox:n}=await F(e,t,K(t,void 0),!0),i=n.width+t.padding,a=n.height+t.padding,s=[{x:2*a/6,y:0},{x:i+a/6,y:0},{x:i-2*a/6,y:-a},{x:-a/6,y:-a}],l=G(r,i,a,s);return l.attr("style",t.style),B(t,l),t.intersect=function(o){return C.polygon(t,s,o)},r},"lean_left"),Tr=d(async(e,t)=>{const{shapeSvg:r,bbox:n}=await F(e,t,K(t,void 0),!0),i=n.width+t.padding,a=n.height+t.padding,s=[{x:-2*a/6,y:0},{x:i+2*a/6,y:0},{x:i-a/6,y:-a},{x:a/6,y:-a}],l=G(r,i,a,s);return l.attr("style",t.style),B(t,l),t.intersect=function(o){return C.polygon(t,s,o)},r},"trapezoid"),Cr=d(async(e,t)=>{const{shapeSvg:r,bbox:n}=await F(e,t,K(t,void 0),!0),i=n.width+t.padding,a=n.height+t.padding,s=[{x:a/6,y:0},{x:i-a/6,y:0},{x:i+2*a/6,y:-a},{x:-2*a/6,y:-a}],l=G(r,i,a,s);return l.attr("style",t.style),B(t,l),t.intersect=function(o){return C.polygon(t,s,o)},r},"inv_trapezoid"),Br=d(async(e,t)=>{const{shapeSvg:r,bbox:n}=await F(e,t,K(t,void 0),!0),i=n.width+t.padding,a=n.height+t.padding,s=[{x:0,y:0},{x:i+a/2,y:0},{x:i,y:-a/2},{x:i+a/2,y:-a},{x:0,y:-a}],l=G(r,i,a,s);return l.attr("style",t.style),B(t,l),t.intersect=function(o){return C.polygon(t,s,o)},r},"rect_right_inv_arrow"),Ir=d(async(e,t)=>{const{shapeSvg:r,bbox:n}=await F(e,t,K(t,void 0),!0),i=n.width+t.padding,a=i/2,s=a/(2.5+i/50),l=n.height+s+t.padding,o="M 0,"+s+" a "+a+","+s+" 0,0,0 "+i+" 0 a "+a+","+s+" 0,0,0 "+-i+" 0 l 0,"+l+" a "+a+","+s+" 0,0,0 "+i+" 0 l 0,"+-l,f=r.attr("label-offset-y",s).insert("path",":first-child").attr("style",t.style).attr("d",o).attr("transform","translate("+-i/2+","+-(l/2+s)+")");return B(t,f),t.intersect=function(h){const y=C.rect(t,h),b=y.x-t.x;if(a!=0&&(Math.abs(b)t.height/2-s)){let m=s*s*(1-b*b/(a*a));m!=0&&(m=Math.sqrt(m)),m=s-m,h.y-t.y>0&&(m=-m),y.y+=m}return y},r},"cylinder"),Or=d(async(e,t)=>{const{shapeSvg:r,bbox:n,halfPadding:i}=await F(e,t,"node "+t.classes+" "+t.class,!0),a=r.insert("rect",":first-child"),s=t.positioned?t.width:n.width+t.padding,l=t.positioned?t.height:n.height+t.padding,o=t.positioned?-s/2:-n.width/2-i,f=t.positioned?-l/2:-n.height/2-i;if(a.attr("class","basic label-container").attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("x",o).attr("y",f).attr("width",s).attr("height",l),t.props){const h=new Set(Object.keys(t.props));t.props.borders&&(ht(a,t.props.borders,s,l),h.delete("borders")),h.forEach(y=>{L.warn(`Unknown node property ${y}`)})}return B(t,a),t.intersect=function(h){return C.rect(t,h)},r},"rect"),Rr=d(async(e,t)=>{const{shapeSvg:r,bbox:n,halfPadding:i}=await F(e,t,"node "+t.classes,!0),a=r.insert("rect",":first-child"),s=t.positioned?t.width:n.width+t.padding,l=t.positioned?t.height:n.height+t.padding,o=t.positioned?-s/2:-n.width/2-i,f=t.positioned?-l/2:-n.height/2-i;if(a.attr("class","basic cluster composite label-container").attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("x",o).attr("y",f).attr("width",s).attr("height",l),t.props){const h=new Set(Object.keys(t.props));t.props.borders&&(ht(a,t.props.borders,s,l),h.delete("borders")),h.forEach(y=>{L.warn(`Unknown node property ${y}`)})}return B(t,a),t.intersect=function(h){return C.rect(t,h)},r},"composite"),zr=d(async(e,t)=>{const{shapeSvg:r}=await F(e,t,"label",!0);L.trace("Classes = ",t.class);const n=r.insert("rect",":first-child"),i=0,a=0;if(n.attr("width",i).attr("height",a),r.attr("class","label edgeLabel"),t.props){const s=new Set(Object.keys(t.props));t.props.borders&&(ht(n,t.props.borders,i,a),s.delete("borders")),s.forEach(l=>{L.warn(`Unknown node property ${l}`)})}return B(t,n),t.intersect=function(s){return C.rect(t,s)},r},"labelRect");function ht(e,t,r,n){const i=[],a=d(l=>{i.push(l,0)},"addBorder"),s=d(l=>{i.push(0,l)},"skipBorder");t.includes("t")?(L.debug("add top border"),a(r)):s(r),t.includes("r")?(L.debug("add right border"),a(n)):s(n),t.includes("b")?(L.debug("add bottom border"),a(r)):s(r),t.includes("l")?(L.debug("add left border"),a(n)):s(n),e.attr("stroke-dasharray",i.join(" "))}d(ht,"applyNodePropertyBorders");var Ar=d((e,t)=>{let r;t.classes?r="node "+t.classes:r="node default";const n=e.insert("g").attr("class",r).attr("id",t.domId||t.id),i=n.insert("rect",":first-child"),a=n.insert("line"),s=n.insert("g").attr("class","label"),l=t.labelText.flat?t.labelText.flat():t.labelText;let o="";typeof l=="object"?o=l[0]:o=l,L.info("Label text abc79",o,l,typeof l=="object");const f=s.node().appendChild(j(o,t.labelStyle,!0,!0));let h={width:0,height:0};if(Z(z().flowchart.htmlLabels)){const D=f.children[0],v=R(f);h=D.getBoundingClientRect(),v.attr("width",h.width),v.attr("height",h.height)}L.info("Text 2",l);const y=l.slice(1,l.length);let b=f.getBBox();const m=s.node().appendChild(j(y.join?y.join("
    "):y,t.labelStyle,!0,!0));if(Z(z().flowchart.htmlLabels)){const D=m.children[0],v=R(m);h=D.getBoundingClientRect(),v.attr("width",h.width),v.attr("height",h.height)}const E=t.padding/2;return R(m).attr("transform","translate( "+(h.width>b.width?0:(b.width-h.width)/2)+", "+(b.height+E+5)+")"),R(f).attr("transform","translate( "+(h.width{const{shapeSvg:r,bbox:n}=await F(e,t,K(t,void 0),!0),i=n.height+t.padding,a=n.width+i/4+t.padding,s=r.insert("rect",":first-child").attr("style",t.style).attr("rx",i/2).attr("ry",i/2).attr("x",-a/2).attr("y",-i/2).attr("width",a).attr("height",i);return B(t,s),t.intersect=function(l){return C.rect(t,l)},r},"stadium"),Fr=d(async(e,t)=>{const{shapeSvg:r,bbox:n,halfPadding:i}=await F(e,t,K(t,void 0),!0),a=r.insert("circle",":first-child");return a.attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("r",n.width/2+i).attr("width",n.width+t.padding).attr("height",n.height+t.padding),L.info("Circle main"),B(t,a),t.intersect=function(s){return L.info("Circle intersect",t,n.width/2+i,s),C.circle(t,n.width/2+i,s)},r},"circle"),Wr=d(async(e,t)=>{const{shapeSvg:r,bbox:n,halfPadding:i}=await F(e,t,K(t,void 0),!0),a=5,s=r.insert("g",":first-child"),l=s.insert("circle"),o=s.insert("circle");return s.attr("class",t.class),l.attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("r",n.width/2+i+a).attr("width",n.width+t.padding+a*2).attr("height",n.height+t.padding+a*2),o.attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("r",n.width/2+i).attr("width",n.width+t.padding).attr("height",n.height+t.padding),L.info("DoubleCircle main"),B(t,l),t.intersect=function(f){return L.info("DoubleCircle intersect",t,n.width/2+i+a,f),C.circle(t,n.width/2+i+a,f)},r},"doublecircle"),Pr=d(async(e,t)=>{const{shapeSvg:r,bbox:n}=await F(e,t,K(t,void 0),!0),i=n.width+t.padding,a=n.height+t.padding,s=[{x:0,y:0},{x:i,y:0},{x:i,y:-a},{x:0,y:-a},{x:0,y:0},{x:-8,y:0},{x:i+8,y:0},{x:i+8,y:-a},{x:-8,y:-a},{x:-8,y:0}],l=G(r,i,a,s);return l.attr("style",t.style),B(t,l),t.intersect=function(o){return C.polygon(t,s,o)},r},"subroutine"),Yr=d((e,t)=>{const r=e.insert("g").attr("class","node default").attr("id",t.domId||t.id),n=r.insert("circle",":first-child");return n.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),B(t,n),t.intersect=function(i){return C.circle(t,7,i)},r},"start"),Mt=d((e,t,r)=>{const n=e.insert("g").attr("class","node default").attr("id",t.domId||t.id);let i=70,a=10;r==="LR"&&(i=10,a=70);const s=n.append("rect").attr("x",-1*i/2).attr("y",-1*a/2).attr("width",i).attr("height",a).attr("class","fork-join");return B(t,s),t.height=t.height+t.padding/2,t.width=t.width+t.padding/2,t.intersect=function(l){return C.rect(t,l)},n},"forkJoin"),Hr=d((e,t)=>{const r=e.insert("g").attr("class","node default").attr("id",t.domId||t.id),n=r.insert("circle",":first-child"),i=r.insert("circle",":first-child");return i.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),n.attr("class","state-end").attr("r",5).attr("width",10).attr("height",10),B(t,i),t.intersect=function(a){return C.circle(t,7,a)},r},"end"),Kr=d((e,t)=>{var S;const r=t.padding/2,n=4,i=8;let a;t.classes?a="node "+t.classes:a="node default";const s=e.insert("g").attr("class",a).attr("id",t.domId||t.id),l=s.insert("rect",":first-child"),o=s.insert("line"),f=s.insert("line");let h=0,y=n;const b=s.insert("g").attr("class","label");let m=0;const E=(S=t.classData.annotations)==null?void 0:S[0],D=t.classData.annotations[0]?"«"+t.classData.annotations[0]+"»":"",v=b.node().appendChild(j(D,t.labelStyle,!0,!0));let T=v.getBBox();if(Z(z().flowchart.htmlLabels)){const c=v.children[0],_=R(v);T=c.getBoundingClientRect(),_.attr("width",T.width),_.attr("height",T.height)}t.classData.annotations[0]&&(y+=T.height+n,h+=T.width);let k=t.classData.label;t.classData.type!==void 0&&t.classData.type!==""&&(z().flowchart.htmlLabels?k+="<"+t.classData.type+">":k+="<"+t.classData.type+">");const N=b.node().appendChild(j(k,t.labelStyle,!0,!0));R(N).attr("class","classTitle");let x=N.getBBox();if(Z(z().flowchart.htmlLabels)){const c=N.children[0],_=R(N);x=c.getBoundingClientRect(),_.attr("width",x.width),_.attr("height",x.height)}y+=x.height+n,x.width>h&&(h=x.width);const g=[];t.classData.members.forEach(c=>{const _=c.getDisplayDetails();let p=_.displayText;z().flowchart.htmlLabels&&(p=p.replace(//g,">"));const A=b.node().appendChild(j(p,_.cssStyle?_.cssStyle:t.labelStyle,!0,!0));let O=A.getBBox();if(Z(z().flowchart.htmlLabels)){const X=A.children[0],W=R(A);O=X.getBoundingClientRect(),W.attr("width",O.width),W.attr("height",O.height)}O.width>h&&(h=O.width),y+=O.height+n,g.push(A)}),y+=i;const u=[];if(t.classData.methods.forEach(c=>{const _=c.getDisplayDetails();let p=_.displayText;z().flowchart.htmlLabels&&(p=p.replace(//g,">"));const A=b.node().appendChild(j(p,_.cssStyle?_.cssStyle:t.labelStyle,!0,!0));let O=A.getBBox();if(Z(z().flowchart.htmlLabels)){const X=A.children[0],W=R(A);O=X.getBoundingClientRect(),W.attr("width",O.width),W.attr("height",O.height)}O.width>h&&(h=O.width),y+=O.height+n,u.push(A)}),y+=i,E){let c=(h-T.width)/2;R(v).attr("transform","translate( "+(-1*h/2+c)+", "+-1*y/2+")"),m=T.height+n}let w=(h-x.width)/2;return R(N).attr("transform","translate( "+(-1*h/2+w)+", "+(-1*y/2+m)+")"),m+=x.height+n,o.attr("class","divider").attr("x1",-h/2-r).attr("x2",h/2+r).attr("y1",-y/2-r+i+m).attr("y2",-y/2-r+i+m),m+=i,g.forEach(c=>{R(c).attr("transform","translate( "+-h/2+", "+(-1*y/2+m+i/2)+")");const _=c==null?void 0:c.getBBox();m+=((_==null?void 0:_.height)??0)+n}),m+=i,f.attr("class","divider").attr("x1",-h/2-r).attr("x2",h/2+r).attr("y1",-y/2-r+i+m).attr("y2",-y/2-r+i+m),m+=i,u.forEach(c=>{R(c).attr("transform","translate( "+-h/2+", "+(-1*y/2+m)+")");const _=c==null?void 0:c.getBBox();m+=((_==null?void 0:_.height)??0)+n}),l.attr("style",t.style).attr("class","outer title-state").attr("x",-h/2-r).attr("y",-(y/2)-r).attr("width",h+t.padding).attr("height",y+t.padding),B(t,l),t.intersect=function(c){return C.rect(t,c)},s},"class_box"),Ft={rhombus:At,composite:Rr,question:At,rect:Or,labelRect:zr,rectWithTitle:Ar,choice:vr,circle:Fr,doublecircle:Wr,stadium:Mr,hexagon:Er,block_arrow:_r,rect_left_inv_arrow:kr,lean_right:Dr,lean_left:Nr,trapezoid:Tr,inv_trapezoid:Cr,rect_right_inv_arrow:Br,cylinder:Ir,start:Yr,end:Hr,note:Sr,subroutine:Pr,fork:Mt,join:Mt,class_box:Kr},lt={},re=d(async(e,t,r)=>{let n,i;if(t.link){let a;z().securityLevel==="sandbox"?a="_top":t.linkTarget&&(a=t.linkTarget||"_blank"),n=e.insert("svg:a").attr("xlink:href",t.link).attr("target",a),i=await Ft[t.shape](n,t,r)}else i=await Ft[t.shape](e,t,r),n=i;return t.tooltip&&i.attr("title",t.tooltip),t.class&&i.attr("class","node default "+t.class),lt[t.id]=n,t.haveCallback&<[t.id].attr("class",lt[t.id].attr("class")+" clickable"),n},"insertNode"),Xr=d(e=>{const t=lt[e.id];L.trace("Transforming node",e.diff,e,"translate("+(e.x-e.width/2-5)+", "+e.width/2+")");const r=8,n=e.diff||0;return e.clusterNode?t.attr("transform","translate("+(e.x+n-e.width/2)+", "+(e.y-e.height/2-r)+")"):t.attr("transform","translate("+e.x+", "+e.y+")"),n},"positionNode");function kt(e,t,r=!1){var b,m,E;const n=e;let i="default";(((b=n==null?void 0:n.classes)==null?void 0:b.length)||0)>0&&(i=((n==null?void 0:n.classes)??[]).join(" ")),i=i+" flowchart-label";let a=0,s="",l;switch(n.type){case"round":a=5,s="rect";break;case"composite":a=0,s="composite",l=0;break;case"square":s="rect";break;case"diamond":s="question";break;case"hexagon":s="hexagon";break;case"block_arrow":s="block_arrow";break;case"odd":s="rect_left_inv_arrow";break;case"lean_right":s="lean_right";break;case"lean_left":s="lean_left";break;case"trapezoid":s="trapezoid";break;case"inv_trapezoid":s="inv_trapezoid";break;case"rect_left_inv_arrow":s="rect_left_inv_arrow";break;case"circle":s="circle";break;case"ellipse":s="ellipse";break;case"stadium":s="stadium";break;case"subroutine":s="subroutine";break;case"cylinder":s="cylinder";break;case"group":s="rect";break;case"doublecircle":s="doublecircle";break;default:s="rect"}const o=de((n==null?void 0:n.styles)??[]),f=n.label,h=n.size??{width:0,height:0,x:0,y:0};return{labelStyle:o.labelStyle,shape:s,labelText:f,rx:a,ry:a,class:i,style:o.style,id:n.id,directions:n.directions,width:h.width,height:h.height,x:h.x,y:h.y,positioned:r,intersect:void 0,type:n.type,padding:l??((E=(m=at())==null?void 0:m.block)==null?void 0:E.padding)??0}}d(kt,"getNodeFromBlock");async function ae(e,t,r){const n=kt(t,r,!1);if(n.type==="group")return;const i=at(),a=await re(e,n,{config:i}),s=a.node().getBBox(),l=r.getBlock(n.id);l.size={width:s.width,height:s.height,x:0,y:0,node:a},r.setBlock(l),a.remove()}d(ae,"calculateBlockSize");async function se(e,t,r){const n=kt(t,r,!0);if(r.getBlock(n.id).type!=="space"){const a=at();await re(e,n,{config:a}),t.intersect=n==null?void 0:n.intersect,Xr(n)}}d(se,"insertBlockPositioned");async function dt(e,t,r,n){for(const i of t)await n(e,i,r),i.children&&await dt(e,i.children,r,n)}d(dt,"performOperations");async function ie(e,t,r){await dt(e,t,r,ae)}d(ie,"calculateBlockSizes");async function ne(e,t,r){await dt(e,t,r,se)}d(ne,"insertBlocks");async function le(e,t,r,n,i){const a=new Se({multigraph:!0,compound:!0});a.setGraph({rankdir:"TB",nodesep:10,ranksep:10,marginx:8,marginy:8});for(const s of r)s.size&&a.setNode(s.id,{width:s.size.width,height:s.size.height,intersect:s.intersect});for(const s of t)if(s.start&&s.end){const l=n.getBlock(s.start),o=n.getBlock(s.end);if(l!=null&&l.size&&(o!=null&&o.size)){const f=l.size,h=o.size,y=[{x:f.x,y:f.y},{x:f.x+(h.x-f.x)/2,y:f.y+(h.y-f.y)/2},{x:h.x,y:h.y}];gr(e,{v:s.start,w:s.end,name:s.id},{...s,arrowTypeEnd:s.arrowTypeEnd,arrowTypeStart:s.arrowTypeStart,points:y,classes:"edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1"},void 0,"block",a,i),s.label&&(await cr(e,{...s,label:s.label,labelStyle:"stroke: #333; stroke-width: 1.5px;fill:none;",arrowTypeEnd:s.arrowTypeEnd,arrowTypeStart:s.arrowTypeStart,points:y,classes:"edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1"}),or({...s,x:y[1].x,y:y[1].y},{originalPath:y}))}}}d(le,"insertEdges");var Ur=d(function(e,t){return t.db.getClasses()},"getClasses"),jr=d(async function(e,t,r,n){const{securityLevel:i,block:a}=at(),s=n.db;let l;i==="sandbox"&&(l=R("#i"+t));const o=i==="sandbox"?R(l.nodes()[0].contentDocument.body):R("body"),f=i==="sandbox"?o.select(`[id="${t}"]`):R(`[id="${t}"]`);ar(f,["point","circle","cross"],n.type,t);const y=s.getBlocks(),b=s.getBlocksFlat(),m=s.getEdges(),E=f.insert("g").attr("class","block");await ie(E,y,s);const D=Gt(s);if(await ne(E,y,s),await le(E,m,b,s,t),D){const v=D,T=Math.max(1,Math.round(.125*(v.width/v.height))),k=v.height+T+10,N=v.width+10,{useMaxWidth:x}=a;fe(f,k,N,!!x),L.debug("Here Bounds",D,v),f.attr("viewBox",`${v.x-5} ${v.y-5} ${v.width+10} ${v.height+10}`)}},"draw"),Vr={draw:jr,getClasses:Ur},ea={parser:Ee,db:Ke,renderer:Vr,styles:Ue};export{ea as diagram}; diff --git a/assets/chunks/c4Diagram-GPMAACGM.CNlRe1Ho.js b/assets/chunks/c4Diagram-GPMAACGM.CNlRe1Ho.js new file mode 100644 index 000000000..1c3ed9b66 --- /dev/null +++ b/assets/chunks/c4Diagram-GPMAACGM.CNlRe1Ho.js @@ -0,0 +1,10 @@ +import{d as Se,g as De}from"./chunk-VCFP4HPQ.DyTG-ln4.js";import{_ as g,a as Pe,s as Be,g as Ie,b as Me,c as Le,d as Bt,w as Ne,e as $t,f as de,h as Tt,i as ge,j as jt,l as fe,k as Ye,m as je}from"../app.D0Wo8w0i.js";import"./framework.B1keMFNq.js";import"./theme.8WvZWF-M.js";var Ft=function(){var e=g(function(_t,x,m,v){for(m=m||{},v=_t.length;v--;m[_t[v]]=x);return m},"o"),t=[1,24],s=[1,25],o=[1,26],l=[1,27],a=[1,28],r=[1,63],n=[1,64],i=[1,65],u=[1,66],d=[1,67],f=[1,68],y=[1,69],E=[1,29],O=[1,30],S=[1,31],P=[1,32],M=[1,33],U=[1,34],H=[1,35],q=[1,36],G=[1,37],K=[1,38],J=[1,39],Z=[1,40],$=[1,41],tt=[1,42],et=[1,43],at=[1,44],it=[1,45],nt=[1,46],rt=[1,47],st=[1,48],lt=[1,50],ot=[1,51],ct=[1,52],ht=[1,53],ut=[1,54],dt=[1,55],ft=[1,56],pt=[1,57],yt=[1,58],gt=[1,59],bt=[1,60],Ct=[14,42],Qt=[14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],St=[12,14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],k=[1,82],A=[1,83],C=[1,84],w=[1,85],T=[12,14,42],le=[12,14,33,42],Mt=[12,14,33,42,76,77,79,80],vt=[12,33],Ht=[34,36,37,38,39,40,41,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],qt={trace:g(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mermaidDoc:4,direction:5,direction_tb:6,direction_bt:7,direction_rl:8,direction_lr:9,graphConfig:10,C4_CONTEXT:11,NEWLINE:12,statements:13,EOF:14,C4_CONTAINER:15,C4_COMPONENT:16,C4_DYNAMIC:17,C4_DEPLOYMENT:18,otherStatements:19,diagramStatements:20,otherStatement:21,title:22,accDescription:23,acc_title:24,acc_title_value:25,acc_descr:26,acc_descr_value:27,acc_descr_multiline_value:28,boundaryStatement:29,boundaryStartStatement:30,boundaryStopStatement:31,boundaryStart:32,LBRACE:33,ENTERPRISE_BOUNDARY:34,attributes:35,SYSTEM_BOUNDARY:36,BOUNDARY:37,CONTAINER_BOUNDARY:38,NODE:39,NODE_L:40,NODE_R:41,RBRACE:42,diagramStatement:43,PERSON:44,PERSON_EXT:45,SYSTEM:46,SYSTEM_DB:47,SYSTEM_QUEUE:48,SYSTEM_EXT:49,SYSTEM_EXT_DB:50,SYSTEM_EXT_QUEUE:51,CONTAINER:52,CONTAINER_DB:53,CONTAINER_QUEUE:54,CONTAINER_EXT:55,CONTAINER_EXT_DB:56,CONTAINER_EXT_QUEUE:57,COMPONENT:58,COMPONENT_DB:59,COMPONENT_QUEUE:60,COMPONENT_EXT:61,COMPONENT_EXT_DB:62,COMPONENT_EXT_QUEUE:63,REL:64,BIREL:65,REL_U:66,REL_D:67,REL_L:68,REL_R:69,REL_B:70,REL_INDEX:71,UPDATE_EL_STYLE:72,UPDATE_REL_STYLE:73,UPDATE_LAYOUT_CONFIG:74,attribute:75,STR:76,STR_KEY:77,STR_VALUE:78,ATTRIBUTE:79,ATTRIBUTE_EMPTY:80,$accept:0,$end:1},terminals_:{2:"error",6:"direction_tb",7:"direction_bt",8:"direction_rl",9:"direction_lr",11:"C4_CONTEXT",12:"NEWLINE",14:"EOF",15:"C4_CONTAINER",16:"C4_COMPONENT",17:"C4_DYNAMIC",18:"C4_DEPLOYMENT",22:"title",23:"accDescription",24:"acc_title",25:"acc_title_value",26:"acc_descr",27:"acc_descr_value",28:"acc_descr_multiline_value",33:"LBRACE",34:"ENTERPRISE_BOUNDARY",36:"SYSTEM_BOUNDARY",37:"BOUNDARY",38:"CONTAINER_BOUNDARY",39:"NODE",40:"NODE_L",41:"NODE_R",42:"RBRACE",44:"PERSON",45:"PERSON_EXT",46:"SYSTEM",47:"SYSTEM_DB",48:"SYSTEM_QUEUE",49:"SYSTEM_EXT",50:"SYSTEM_EXT_DB",51:"SYSTEM_EXT_QUEUE",52:"CONTAINER",53:"CONTAINER_DB",54:"CONTAINER_QUEUE",55:"CONTAINER_EXT",56:"CONTAINER_EXT_DB",57:"CONTAINER_EXT_QUEUE",58:"COMPONENT",59:"COMPONENT_DB",60:"COMPONENT_QUEUE",61:"COMPONENT_EXT",62:"COMPONENT_EXT_DB",63:"COMPONENT_EXT_QUEUE",64:"REL",65:"BIREL",66:"REL_U",67:"REL_D",68:"REL_L",69:"REL_R",70:"REL_B",71:"REL_INDEX",72:"UPDATE_EL_STYLE",73:"UPDATE_REL_STYLE",74:"UPDATE_LAYOUT_CONFIG",76:"STR",77:"STR_KEY",78:"STR_VALUE",79:"ATTRIBUTE",80:"ATTRIBUTE_EMPTY"},productions_:[0,[3,1],[3,1],[5,1],[5,1],[5,1],[5,1],[4,1],[10,4],[10,4],[10,4],[10,4],[10,4],[13,1],[13,1],[13,2],[19,1],[19,2],[19,3],[21,1],[21,1],[21,2],[21,2],[21,1],[29,3],[30,3],[30,3],[30,4],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[31,1],[20,1],[20,2],[20,3],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,1],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[35,1],[35,2],[75,1],[75,2],[75,1],[75,1]],performAction:g(function(x,m,v,b,R,h,Dt){var p=h.length-1;switch(R){case 3:b.setDirection("TB");break;case 4:b.setDirection("BT");break;case 5:b.setDirection("RL");break;case 6:b.setDirection("LR");break;case 8:case 9:case 10:case 11:case 12:b.setC4Type(h[p-3]);break;case 19:b.setTitle(h[p].substring(6)),this.$=h[p].substring(6);break;case 20:b.setAccDescription(h[p].substring(15)),this.$=h[p].substring(15);break;case 21:this.$=h[p].trim(),b.setTitle(this.$);break;case 22:case 23:this.$=h[p].trim(),b.setAccDescription(this.$);break;case 28:h[p].splice(2,0,"ENTERPRISE"),b.addPersonOrSystemBoundary(...h[p]),this.$=h[p];break;case 29:h[p].splice(2,0,"SYSTEM"),b.addPersonOrSystemBoundary(...h[p]),this.$=h[p];break;case 30:b.addPersonOrSystemBoundary(...h[p]),this.$=h[p];break;case 31:h[p].splice(2,0,"CONTAINER"),b.addContainerBoundary(...h[p]),this.$=h[p];break;case 32:b.addDeploymentNode("node",...h[p]),this.$=h[p];break;case 33:b.addDeploymentNode("nodeL",...h[p]),this.$=h[p];break;case 34:b.addDeploymentNode("nodeR",...h[p]),this.$=h[p];break;case 35:b.popBoundaryParseStack();break;case 39:b.addPersonOrSystem("person",...h[p]),this.$=h[p];break;case 40:b.addPersonOrSystem("external_person",...h[p]),this.$=h[p];break;case 41:b.addPersonOrSystem("system",...h[p]),this.$=h[p];break;case 42:b.addPersonOrSystem("system_db",...h[p]),this.$=h[p];break;case 43:b.addPersonOrSystem("system_queue",...h[p]),this.$=h[p];break;case 44:b.addPersonOrSystem("external_system",...h[p]),this.$=h[p];break;case 45:b.addPersonOrSystem("external_system_db",...h[p]),this.$=h[p];break;case 46:b.addPersonOrSystem("external_system_queue",...h[p]),this.$=h[p];break;case 47:b.addContainer("container",...h[p]),this.$=h[p];break;case 48:b.addContainer("container_db",...h[p]),this.$=h[p];break;case 49:b.addContainer("container_queue",...h[p]),this.$=h[p];break;case 50:b.addContainer("external_container",...h[p]),this.$=h[p];break;case 51:b.addContainer("external_container_db",...h[p]),this.$=h[p];break;case 52:b.addContainer("external_container_queue",...h[p]),this.$=h[p];break;case 53:b.addComponent("component",...h[p]),this.$=h[p];break;case 54:b.addComponent("component_db",...h[p]),this.$=h[p];break;case 55:b.addComponent("component_queue",...h[p]),this.$=h[p];break;case 56:b.addComponent("external_component",...h[p]),this.$=h[p];break;case 57:b.addComponent("external_component_db",...h[p]),this.$=h[p];break;case 58:b.addComponent("external_component_queue",...h[p]),this.$=h[p];break;case 60:b.addRel("rel",...h[p]),this.$=h[p];break;case 61:b.addRel("birel",...h[p]),this.$=h[p];break;case 62:b.addRel("rel_u",...h[p]),this.$=h[p];break;case 63:b.addRel("rel_d",...h[p]),this.$=h[p];break;case 64:b.addRel("rel_l",...h[p]),this.$=h[p];break;case 65:b.addRel("rel_r",...h[p]),this.$=h[p];break;case 66:b.addRel("rel_b",...h[p]),this.$=h[p];break;case 67:h[p].splice(0,1),b.addRel("rel",...h[p]),this.$=h[p];break;case 68:b.updateElStyle("update_el_style",...h[p]),this.$=h[p];break;case 69:b.updateRelStyle("update_rel_style",...h[p]),this.$=h[p];break;case 70:b.updateLayoutConfig("update_layout_config",...h[p]),this.$=h[p];break;case 71:this.$=[h[p]];break;case 72:h[p].unshift(h[p-1]),this.$=h[p];break;case 73:case 75:this.$=h[p].trim();break;case 74:let Et={};Et[h[p-1].trim()]=h[p].trim(),this.$=Et;break;case 76:this.$="";break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],7:[1,6],8:[1,7],9:[1,8],10:4,11:[1,9],15:[1,10],16:[1,11],17:[1,12],18:[1,13]},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,7]},{1:[2,3]},{1:[2,4]},{1:[2,5]},{1:[2,6]},{12:[1,14]},{12:[1,15]},{12:[1,16]},{12:[1,17]},{12:[1,18]},{13:19,19:20,20:21,21:22,22:t,23:s,24:o,26:l,28:a,29:49,30:61,32:62,34:r,36:n,37:i,38:u,39:d,40:f,41:y,43:23,44:E,45:O,46:S,47:P,48:M,49:U,50:H,51:q,52:G,53:K,54:J,55:Z,56:$,57:tt,58:et,59:at,60:it,61:nt,62:rt,63:st,64:lt,65:ot,66:ct,67:ht,68:ut,69:dt,70:ft,71:pt,72:yt,73:gt,74:bt},{13:70,19:20,20:21,21:22,22:t,23:s,24:o,26:l,28:a,29:49,30:61,32:62,34:r,36:n,37:i,38:u,39:d,40:f,41:y,43:23,44:E,45:O,46:S,47:P,48:M,49:U,50:H,51:q,52:G,53:K,54:J,55:Z,56:$,57:tt,58:et,59:at,60:it,61:nt,62:rt,63:st,64:lt,65:ot,66:ct,67:ht,68:ut,69:dt,70:ft,71:pt,72:yt,73:gt,74:bt},{13:71,19:20,20:21,21:22,22:t,23:s,24:o,26:l,28:a,29:49,30:61,32:62,34:r,36:n,37:i,38:u,39:d,40:f,41:y,43:23,44:E,45:O,46:S,47:P,48:M,49:U,50:H,51:q,52:G,53:K,54:J,55:Z,56:$,57:tt,58:et,59:at,60:it,61:nt,62:rt,63:st,64:lt,65:ot,66:ct,67:ht,68:ut,69:dt,70:ft,71:pt,72:yt,73:gt,74:bt},{13:72,19:20,20:21,21:22,22:t,23:s,24:o,26:l,28:a,29:49,30:61,32:62,34:r,36:n,37:i,38:u,39:d,40:f,41:y,43:23,44:E,45:O,46:S,47:P,48:M,49:U,50:H,51:q,52:G,53:K,54:J,55:Z,56:$,57:tt,58:et,59:at,60:it,61:nt,62:rt,63:st,64:lt,65:ot,66:ct,67:ht,68:ut,69:dt,70:ft,71:pt,72:yt,73:gt,74:bt},{13:73,19:20,20:21,21:22,22:t,23:s,24:o,26:l,28:a,29:49,30:61,32:62,34:r,36:n,37:i,38:u,39:d,40:f,41:y,43:23,44:E,45:O,46:S,47:P,48:M,49:U,50:H,51:q,52:G,53:K,54:J,55:Z,56:$,57:tt,58:et,59:at,60:it,61:nt,62:rt,63:st,64:lt,65:ot,66:ct,67:ht,68:ut,69:dt,70:ft,71:pt,72:yt,73:gt,74:bt},{14:[1,74]},e(Ct,[2,13],{43:23,29:49,30:61,32:62,20:75,34:r,36:n,37:i,38:u,39:d,40:f,41:y,44:E,45:O,46:S,47:P,48:M,49:U,50:H,51:q,52:G,53:K,54:J,55:Z,56:$,57:tt,58:et,59:at,60:it,61:nt,62:rt,63:st,64:lt,65:ot,66:ct,67:ht,68:ut,69:dt,70:ft,71:pt,72:yt,73:gt,74:bt}),e(Ct,[2,14]),e(Qt,[2,16],{12:[1,76]}),e(Ct,[2,36],{12:[1,77]}),e(St,[2,19]),e(St,[2,20]),{25:[1,78]},{27:[1,79]},e(St,[2,23]),{35:80,75:81,76:k,77:A,79:C,80:w},{35:86,75:81,76:k,77:A,79:C,80:w},{35:87,75:81,76:k,77:A,79:C,80:w},{35:88,75:81,76:k,77:A,79:C,80:w},{35:89,75:81,76:k,77:A,79:C,80:w},{35:90,75:81,76:k,77:A,79:C,80:w},{35:91,75:81,76:k,77:A,79:C,80:w},{35:92,75:81,76:k,77:A,79:C,80:w},{35:93,75:81,76:k,77:A,79:C,80:w},{35:94,75:81,76:k,77:A,79:C,80:w},{35:95,75:81,76:k,77:A,79:C,80:w},{35:96,75:81,76:k,77:A,79:C,80:w},{35:97,75:81,76:k,77:A,79:C,80:w},{35:98,75:81,76:k,77:A,79:C,80:w},{35:99,75:81,76:k,77:A,79:C,80:w},{35:100,75:81,76:k,77:A,79:C,80:w},{35:101,75:81,76:k,77:A,79:C,80:w},{35:102,75:81,76:k,77:A,79:C,80:w},{35:103,75:81,76:k,77:A,79:C,80:w},{35:104,75:81,76:k,77:A,79:C,80:w},e(T,[2,59]),{35:105,75:81,76:k,77:A,79:C,80:w},{35:106,75:81,76:k,77:A,79:C,80:w},{35:107,75:81,76:k,77:A,79:C,80:w},{35:108,75:81,76:k,77:A,79:C,80:w},{35:109,75:81,76:k,77:A,79:C,80:w},{35:110,75:81,76:k,77:A,79:C,80:w},{35:111,75:81,76:k,77:A,79:C,80:w},{35:112,75:81,76:k,77:A,79:C,80:w},{35:113,75:81,76:k,77:A,79:C,80:w},{35:114,75:81,76:k,77:A,79:C,80:w},{35:115,75:81,76:k,77:A,79:C,80:w},{20:116,29:49,30:61,32:62,34:r,36:n,37:i,38:u,39:d,40:f,41:y,43:23,44:E,45:O,46:S,47:P,48:M,49:U,50:H,51:q,52:G,53:K,54:J,55:Z,56:$,57:tt,58:et,59:at,60:it,61:nt,62:rt,63:st,64:lt,65:ot,66:ct,67:ht,68:ut,69:dt,70:ft,71:pt,72:yt,73:gt,74:bt},{12:[1,118],33:[1,117]},{35:119,75:81,76:k,77:A,79:C,80:w},{35:120,75:81,76:k,77:A,79:C,80:w},{35:121,75:81,76:k,77:A,79:C,80:w},{35:122,75:81,76:k,77:A,79:C,80:w},{35:123,75:81,76:k,77:A,79:C,80:w},{35:124,75:81,76:k,77:A,79:C,80:w},{35:125,75:81,76:k,77:A,79:C,80:w},{14:[1,126]},{14:[1,127]},{14:[1,128]},{14:[1,129]},{1:[2,8]},e(Ct,[2,15]),e(Qt,[2,17],{21:22,19:130,22:t,23:s,24:o,26:l,28:a}),e(Ct,[2,37],{19:20,20:21,21:22,43:23,29:49,30:61,32:62,13:131,22:t,23:s,24:o,26:l,28:a,34:r,36:n,37:i,38:u,39:d,40:f,41:y,44:E,45:O,46:S,47:P,48:M,49:U,50:H,51:q,52:G,53:K,54:J,55:Z,56:$,57:tt,58:et,59:at,60:it,61:nt,62:rt,63:st,64:lt,65:ot,66:ct,67:ht,68:ut,69:dt,70:ft,71:pt,72:yt,73:gt,74:bt}),e(St,[2,21]),e(St,[2,22]),e(T,[2,39]),e(le,[2,71],{75:81,35:132,76:k,77:A,79:C,80:w}),e(Mt,[2,73]),{78:[1,133]},e(Mt,[2,75]),e(Mt,[2,76]),e(T,[2,40]),e(T,[2,41]),e(T,[2,42]),e(T,[2,43]),e(T,[2,44]),e(T,[2,45]),e(T,[2,46]),e(T,[2,47]),e(T,[2,48]),e(T,[2,49]),e(T,[2,50]),e(T,[2,51]),e(T,[2,52]),e(T,[2,53]),e(T,[2,54]),e(T,[2,55]),e(T,[2,56]),e(T,[2,57]),e(T,[2,58]),e(T,[2,60]),e(T,[2,61]),e(T,[2,62]),e(T,[2,63]),e(T,[2,64]),e(T,[2,65]),e(T,[2,66]),e(T,[2,67]),e(T,[2,68]),e(T,[2,69]),e(T,[2,70]),{31:134,42:[1,135]},{12:[1,136]},{33:[1,137]},e(vt,[2,28]),e(vt,[2,29]),e(vt,[2,30]),e(vt,[2,31]),e(vt,[2,32]),e(vt,[2,33]),e(vt,[2,34]),{1:[2,9]},{1:[2,10]},{1:[2,11]},{1:[2,12]},e(Qt,[2,18]),e(Ct,[2,38]),e(le,[2,72]),e(Mt,[2,74]),e(T,[2,24]),e(T,[2,35]),e(Ht,[2,25]),e(Ht,[2,26],{12:[1,138]}),e(Ht,[2,27])],defaultActions:{2:[2,1],3:[2,2],4:[2,7],5:[2,3],6:[2,4],7:[2,5],8:[2,6],74:[2,8],126:[2,9],127:[2,10],128:[2,11],129:[2,12]},parseError:g(function(x,m){if(m.recoverable)this.trace(x);else{var v=new Error(x);throw v.hash=m,v}},"parseError"),parse:g(function(x){var m=this,v=[0],b=[],R=[null],h=[],Dt=this.table,p="",Et=0,oe=0,we=2,ce=1,Te=h.slice.call(arguments,1),D=Object.create(this.lexer),kt={yy:{}};for(var Gt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Gt)&&(kt.yy[Gt]=this.yy[Gt]);D.setInput(x,kt.yy),kt.yy.lexer=D,kt.yy.parser=this,typeof D.yylloc>"u"&&(D.yylloc={});var Kt=D.yylloc;h.push(Kt);var Oe=D.options&&D.options.ranges;typeof kt.yy.parseError=="function"?this.parseError=kt.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Re(L){v.length=v.length-2*L,R.length=R.length-L,h.length=h.length-L}g(Re,"popStack");function he(){var L;return L=b.pop()||D.lex()||ce,typeof L!="number"&&(L instanceof Array&&(b=L,L=b.pop()),L=m.symbols_[L]||L),L}g(he,"lex");for(var I,At,N,Jt,wt={},Nt,W,ue,Yt;;){if(At=v[v.length-1],this.defaultActions[At]?N=this.defaultActions[At]:((I===null||typeof I>"u")&&(I=he()),N=Dt[At]&&Dt[At][I]),typeof N>"u"||!N.length||!N[0]){var Zt="";Yt=[];for(Nt in Dt[At])this.terminals_[Nt]&&Nt>we&&Yt.push("'"+this.terminals_[Nt]+"'");D.showPosition?Zt="Parse error on line "+(Et+1)+`: +`+D.showPosition()+` +Expecting `+Yt.join(", ")+", got '"+(this.terminals_[I]||I)+"'":Zt="Parse error on line "+(Et+1)+": Unexpected "+(I==ce?"end of input":"'"+(this.terminals_[I]||I)+"'"),this.parseError(Zt,{text:D.match,token:this.terminals_[I]||I,line:D.yylineno,loc:Kt,expected:Yt})}if(N[0]instanceof Array&&N.length>1)throw new Error("Parse Error: multiple actions possible at state: "+At+", token: "+I);switch(N[0]){case 1:v.push(I),R.push(D.yytext),h.push(D.yylloc),v.push(N[1]),I=null,oe=D.yyleng,p=D.yytext,Et=D.yylineno,Kt=D.yylloc;break;case 2:if(W=this.productions_[N[1]][1],wt.$=R[R.length-W],wt._$={first_line:h[h.length-(W||1)].first_line,last_line:h[h.length-1].last_line,first_column:h[h.length-(W||1)].first_column,last_column:h[h.length-1].last_column},Oe&&(wt._$.range=[h[h.length-(W||1)].range[0],h[h.length-1].range[1]]),Jt=this.performAction.apply(wt,[p,oe,Et,kt.yy,N[1],R,h].concat(Te)),typeof Jt<"u")return Jt;W&&(v=v.slice(0,-1*W*2),R=R.slice(0,-1*W),h=h.slice(0,-1*W)),v.push(this.productions_[N[1]][0]),R.push(wt.$),h.push(wt._$),ue=Dt[v[v.length-2]][v[v.length-1]],v.push(ue);break;case 3:return!0}}return!0},"parse")},Ce=function(){var _t={EOF:1,parseError:g(function(m,v){if(this.yy.parser)this.yy.parser.parseError(m,v);else throw new Error(m)},"parseError"),setInput:g(function(x,m){return this.yy=m||this.yy||{},this._input=x,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:g(function(){var x=this._input[0];this.yytext+=x,this.yyleng++,this.offset++,this.match+=x,this.matched+=x;var m=x.match(/(?:\r\n?|\n).*/g);return m?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),x},"input"),unput:g(function(x){var m=x.length,v=x.split(/(?:\r\n?|\n)/g);this._input=x+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-m),this.offset-=m;var b=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),v.length-1&&(this.yylineno-=v.length-1);var R=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:v?(v.length===b.length?this.yylloc.first_column:0)+b[b.length-v.length].length-v[0].length:this.yylloc.first_column-m},this.options.ranges&&(this.yylloc.range=[R[0],R[0]+this.yyleng-m]),this.yyleng=this.yytext.length,this},"unput"),more:g(function(){return this._more=!0,this},"more"),reject:g(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:g(function(x){this.unput(this.match.slice(x))},"less"),pastInput:g(function(){var x=this.matched.substr(0,this.matched.length-this.match.length);return(x.length>20?"...":"")+x.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:g(function(){var x=this.match;return x.length<20&&(x+=this._input.substr(0,20-x.length)),(x.substr(0,20)+(x.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:g(function(){var x=this.pastInput(),m=new Array(x.length+1).join("-");return x+this.upcomingInput()+` +`+m+"^"},"showPosition"),test_match:g(function(x,m){var v,b,R;if(this.options.backtrack_lexer&&(R={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(R.yylloc.range=this.yylloc.range.slice(0))),b=x[0].match(/(?:\r\n?|\n).*/g),b&&(this.yylineno+=b.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:b?b[b.length-1].length-b[b.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+x[0].length},this.yytext+=x[0],this.match+=x[0],this.matches=x,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(x[0].length),this.matched+=x[0],v=this.performAction.call(this,this.yy,this,m,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),v)return v;if(this._backtrack){for(var h in R)this[h]=R[h];return!1}return!1},"test_match"),next:g(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var x,m,v,b;this._more||(this.yytext="",this.match="");for(var R=this._currentRules(),h=0;hm[0].length)){if(m=v,b=h,this.options.backtrack_lexer){if(x=this.test_match(v,R[h]),x!==!1)return x;if(this._backtrack){m=!1;continue}else return!1}else if(!this.options.flex)break}return m?(x=this.test_match(m,R[b]),x!==!1?x:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:g(function(){var m=this.next();return m||this.lex()},"lex"),begin:g(function(m){this.conditionStack.push(m)},"begin"),popState:g(function(){var m=this.conditionStack.length-1;return m>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:g(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:g(function(m){return m=this.conditionStack.length-1-Math.abs(m||0),m>=0?this.conditionStack[m]:"INITIAL"},"topState"),pushState:g(function(m){this.begin(m)},"pushState"),stateStackSize:g(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:g(function(m,v,b,R){switch(b){case 0:return 6;case 1:return 7;case 2:return 8;case 3:return 9;case 4:return 22;case 5:return 23;case 6:return this.begin("acc_title"),24;case 7:return this.popState(),"acc_title_value";case 8:return this.begin("acc_descr"),26;case 9:return this.popState(),"acc_descr_value";case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:break;case 14:c;break;case 15:return 12;case 16:break;case 17:return 11;case 18:return 15;case 19:return 16;case 20:return 17;case 21:return 18;case 22:return this.begin("person_ext"),45;case 23:return this.begin("person"),44;case 24:return this.begin("system_ext_queue"),51;case 25:return this.begin("system_ext_db"),50;case 26:return this.begin("system_ext"),49;case 27:return this.begin("system_queue"),48;case 28:return this.begin("system_db"),47;case 29:return this.begin("system"),46;case 30:return this.begin("boundary"),37;case 31:return this.begin("enterprise_boundary"),34;case 32:return this.begin("system_boundary"),36;case 33:return this.begin("container_ext_queue"),57;case 34:return this.begin("container_ext_db"),56;case 35:return this.begin("container_ext"),55;case 36:return this.begin("container_queue"),54;case 37:return this.begin("container_db"),53;case 38:return this.begin("container"),52;case 39:return this.begin("container_boundary"),38;case 40:return this.begin("component_ext_queue"),63;case 41:return this.begin("component_ext_db"),62;case 42:return this.begin("component_ext"),61;case 43:return this.begin("component_queue"),60;case 44:return this.begin("component_db"),59;case 45:return this.begin("component"),58;case 46:return this.begin("node"),39;case 47:return this.begin("node"),39;case 48:return this.begin("node_l"),40;case 49:return this.begin("node_r"),41;case 50:return this.begin("rel"),64;case 51:return this.begin("birel"),65;case 52:return this.begin("rel_u"),66;case 53:return this.begin("rel_u"),66;case 54:return this.begin("rel_d"),67;case 55:return this.begin("rel_d"),67;case 56:return this.begin("rel_l"),68;case 57:return this.begin("rel_l"),68;case 58:return this.begin("rel_r"),69;case 59:return this.begin("rel_r"),69;case 60:return this.begin("rel_b"),70;case 61:return this.begin("rel_index"),71;case 62:return this.begin("update_el_style"),72;case 63:return this.begin("update_rel_style"),73;case 64:return this.begin("update_layout_config"),74;case 65:return"EOF_IN_STRUCT";case 66:return this.begin("attribute"),"ATTRIBUTE_EMPTY";case 67:this.begin("attribute");break;case 68:this.popState(),this.popState();break;case 69:return 80;case 70:break;case 71:return 80;case 72:this.begin("string");break;case 73:this.popState();break;case 74:return"STR";case 75:this.begin("string_kv");break;case 76:return this.begin("string_kv_key"),"STR_KEY";case 77:this.popState(),this.begin("string_kv_value");break;case 78:return"STR_VALUE";case 79:this.popState(),this.popState();break;case 80:return"STR";case 81:return"LBRACE";case 82:return"RBRACE";case 83:return"SPACE";case 84:return"EOL";case 85:return 14}},"anonymous"),rules:[/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:title\s[^#\n;]+)/,/^(?:accDescription\s[^#\n;]+)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:C4Context\b)/,/^(?:C4Container\b)/,/^(?:C4Component\b)/,/^(?:C4Dynamic\b)/,/^(?:C4Deployment\b)/,/^(?:Person_Ext\b)/,/^(?:Person\b)/,/^(?:SystemQueue_Ext\b)/,/^(?:SystemDb_Ext\b)/,/^(?:System_Ext\b)/,/^(?:SystemQueue\b)/,/^(?:SystemDb\b)/,/^(?:System\b)/,/^(?:Boundary\b)/,/^(?:Enterprise_Boundary\b)/,/^(?:System_Boundary\b)/,/^(?:ContainerQueue_Ext\b)/,/^(?:ContainerDb_Ext\b)/,/^(?:Container_Ext\b)/,/^(?:ContainerQueue\b)/,/^(?:ContainerDb\b)/,/^(?:Container\b)/,/^(?:Container_Boundary\b)/,/^(?:ComponentQueue_Ext\b)/,/^(?:ComponentDb_Ext\b)/,/^(?:Component_Ext\b)/,/^(?:ComponentQueue\b)/,/^(?:ComponentDb\b)/,/^(?:Component\b)/,/^(?:Deployment_Node\b)/,/^(?:Node\b)/,/^(?:Node_L\b)/,/^(?:Node_R\b)/,/^(?:Rel\b)/,/^(?:BiRel\b)/,/^(?:Rel_Up\b)/,/^(?:Rel_U\b)/,/^(?:Rel_Down\b)/,/^(?:Rel_D\b)/,/^(?:Rel_Left\b)/,/^(?:Rel_L\b)/,/^(?:Rel_Right\b)/,/^(?:Rel_R\b)/,/^(?:Rel_Back\b)/,/^(?:RelIndex\b)/,/^(?:UpdateElementStyle\b)/,/^(?:UpdateRelStyle\b)/,/^(?:UpdateLayoutConfig\b)/,/^(?:$)/,/^(?:[(][ ]*[,])/,/^(?:[(])/,/^(?:[)])/,/^(?:,,)/,/^(?:,)/,/^(?:[ ]*["]["])/,/^(?:[ ]*["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:[ ]*[\$])/,/^(?:[^=]*)/,/^(?:[=][ ]*["])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:[^,]+)/,/^(?:\{)/,/^(?:\})/,/^(?:[\s]+)/,/^(?:[\n\r]+)/,/^(?:$)/],conditions:{acc_descr_multiline:{rules:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},string_kv_value:{rules:[78,79],inclusive:!1},string_kv_key:{rules:[77],inclusive:!1},string_kv:{rules:[76],inclusive:!1},string:{rules:[73,74],inclusive:!1},attribute:{rules:[68,69,70,71,72,75,80],inclusive:!1},update_layout_config:{rules:[65,66,67,68],inclusive:!1},update_rel_style:{rules:[65,66,67,68],inclusive:!1},update_el_style:{rules:[65,66,67,68],inclusive:!1},rel_b:{rules:[65,66,67,68],inclusive:!1},rel_r:{rules:[65,66,67,68],inclusive:!1},rel_l:{rules:[65,66,67,68],inclusive:!1},rel_d:{rules:[65,66,67,68],inclusive:!1},rel_u:{rules:[65,66,67,68],inclusive:!1},rel_bi:{rules:[],inclusive:!1},rel:{rules:[65,66,67,68],inclusive:!1},node_r:{rules:[65,66,67,68],inclusive:!1},node_l:{rules:[65,66,67,68],inclusive:!1},node:{rules:[65,66,67,68],inclusive:!1},index:{rules:[],inclusive:!1},rel_index:{rules:[65,66,67,68],inclusive:!1},component_ext_queue:{rules:[],inclusive:!1},component_ext_db:{rules:[65,66,67,68],inclusive:!1},component_ext:{rules:[65,66,67,68],inclusive:!1},component_queue:{rules:[65,66,67,68],inclusive:!1},component_db:{rules:[65,66,67,68],inclusive:!1},component:{rules:[65,66,67,68],inclusive:!1},container_boundary:{rules:[65,66,67,68],inclusive:!1},container_ext_queue:{rules:[65,66,67,68],inclusive:!1},container_ext_db:{rules:[65,66,67,68],inclusive:!1},container_ext:{rules:[65,66,67,68],inclusive:!1},container_queue:{rules:[65,66,67,68],inclusive:!1},container_db:{rules:[65,66,67,68],inclusive:!1},container:{rules:[65,66,67,68],inclusive:!1},birel:{rules:[65,66,67,68],inclusive:!1},system_boundary:{rules:[65,66,67,68],inclusive:!1},enterprise_boundary:{rules:[65,66,67,68],inclusive:!1},boundary:{rules:[65,66,67,68],inclusive:!1},system_ext_queue:{rules:[65,66,67,68],inclusive:!1},system_ext_db:{rules:[65,66,67,68],inclusive:!1},system_ext:{rules:[65,66,67,68],inclusive:!1},system_queue:{rules:[65,66,67,68],inclusive:!1},system_db:{rules:[65,66,67,68],inclusive:!1},system:{rules:[65,66,67,68],inclusive:!1},person_ext:{rules:[65,66,67,68],inclusive:!1},person:{rules:[65,66,67,68],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,8,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,81,82,83,84,85],inclusive:!0}}};return _t}();qt.lexer=Ce;function Lt(){this.yy={}}return g(Lt,"Parser"),Lt.prototype=qt,qt.Parser=Lt,new Lt}();Ft.parser=Ft;var Ue=Ft,V=[],xt=[""],B="global",F="",X=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],It=[],ie="",ne=!1,Vt=4,zt=2,be,Fe=g(function(){return be},"getC4Type"),Ve=g(function(e){be=ge(e,Bt())},"setC4Type"),ze=g(function(e,t,s,o,l,a,r,n,i){if(e==null||t===void 0||t===null||s===void 0||s===null||o===void 0||o===null)return;let u={};const d=It.find(f=>f.from===t&&f.to===s);if(d?u=d:It.push(u),u.type=e,u.from=t,u.to=s,u.label={text:o},l==null)u.techn={text:""};else if(typeof l=="object"){let[f,y]=Object.entries(l)[0];u[f]={text:y}}else u.techn={text:l};if(a==null)u.descr={text:""};else if(typeof a=="object"){let[f,y]=Object.entries(a)[0];u[f]={text:y}}else u.descr={text:a};if(typeof r=="object"){let[f,y]=Object.entries(r)[0];u[f]=y}else u.sprite=r;if(typeof n=="object"){let[f,y]=Object.entries(n)[0];u[f]=y}else u.tags=n;if(typeof i=="object"){let[f,y]=Object.entries(i)[0];u[f]=y}else u.link=i;u.wrap=mt()},"addRel"),Xe=g(function(e,t,s,o,l,a,r){if(t===null||s===null)return;let n={};const i=V.find(u=>u.alias===t);if(i&&t===i.alias?n=i:(n.alias=t,V.push(n)),s==null?n.label={text:""}:n.label={text:s},o==null)n.descr={text:""};else if(typeof o=="object"){let[u,d]=Object.entries(o)[0];n[u]={text:d}}else n.descr={text:o};if(typeof l=="object"){let[u,d]=Object.entries(l)[0];n[u]=d}else n.sprite=l;if(typeof a=="object"){let[u,d]=Object.entries(a)[0];n[u]=d}else n.tags=a;if(typeof r=="object"){let[u,d]=Object.entries(r)[0];n[u]=d}else n.link=r;n.typeC4Shape={text:e},n.parentBoundary=B,n.wrap=mt()},"addPersonOrSystem"),We=g(function(e,t,s,o,l,a,r,n){if(t===null||s===null)return;let i={};const u=V.find(d=>d.alias===t);if(u&&t===u.alias?i=u:(i.alias=t,V.push(i)),s==null?i.label={text:""}:i.label={text:s},o==null)i.techn={text:""};else if(typeof o=="object"){let[d,f]=Object.entries(o)[0];i[d]={text:f}}else i.techn={text:o};if(l==null)i.descr={text:""};else if(typeof l=="object"){let[d,f]=Object.entries(l)[0];i[d]={text:f}}else i.descr={text:l};if(typeof a=="object"){let[d,f]=Object.entries(a)[0];i[d]=f}else i.sprite=a;if(typeof r=="object"){let[d,f]=Object.entries(r)[0];i[d]=f}else i.tags=r;if(typeof n=="object"){let[d,f]=Object.entries(n)[0];i[d]=f}else i.link=n;i.wrap=mt(),i.typeC4Shape={text:e},i.parentBoundary=B},"addContainer"),Qe=g(function(e,t,s,o,l,a,r,n){if(t===null||s===null)return;let i={};const u=V.find(d=>d.alias===t);if(u&&t===u.alias?i=u:(i.alias=t,V.push(i)),s==null?i.label={text:""}:i.label={text:s},o==null)i.techn={text:""};else if(typeof o=="object"){let[d,f]=Object.entries(o)[0];i[d]={text:f}}else i.techn={text:o};if(l==null)i.descr={text:""};else if(typeof l=="object"){let[d,f]=Object.entries(l)[0];i[d]={text:f}}else i.descr={text:l};if(typeof a=="object"){let[d,f]=Object.entries(a)[0];i[d]=f}else i.sprite=a;if(typeof r=="object"){let[d,f]=Object.entries(r)[0];i[d]=f}else i.tags=r;if(typeof n=="object"){let[d,f]=Object.entries(n)[0];i[d]=f}else i.link=n;i.wrap=mt(),i.typeC4Shape={text:e},i.parentBoundary=B},"addComponent"),He=g(function(e,t,s,o,l){if(e===null||t===null)return;let a={};const r=X.find(n=>n.alias===e);if(r&&e===r.alias?a=r:(a.alias=e,X.push(a)),t==null?a.label={text:""}:a.label={text:t},s==null)a.type={text:"system"};else if(typeof s=="object"){let[n,i]=Object.entries(s)[0];a[n]={text:i}}else a.type={text:s};if(typeof o=="object"){let[n,i]=Object.entries(o)[0];a[n]=i}else a.tags=o;if(typeof l=="object"){let[n,i]=Object.entries(l)[0];a[n]=i}else a.link=l;a.parentBoundary=B,a.wrap=mt(),F=B,B=e,xt.push(F)},"addPersonOrSystemBoundary"),qe=g(function(e,t,s,o,l){if(e===null||t===null)return;let a={};const r=X.find(n=>n.alias===e);if(r&&e===r.alias?a=r:(a.alias=e,X.push(a)),t==null?a.label={text:""}:a.label={text:t},s==null)a.type={text:"container"};else if(typeof s=="object"){let[n,i]=Object.entries(s)[0];a[n]={text:i}}else a.type={text:s};if(typeof o=="object"){let[n,i]=Object.entries(o)[0];a[n]=i}else a.tags=o;if(typeof l=="object"){let[n,i]=Object.entries(l)[0];a[n]=i}else a.link=l;a.parentBoundary=B,a.wrap=mt(),F=B,B=e,xt.push(F)},"addContainerBoundary"),Ge=g(function(e,t,s,o,l,a,r,n){if(t===null||s===null)return;let i={};const u=X.find(d=>d.alias===t);if(u&&t===u.alias?i=u:(i.alias=t,X.push(i)),s==null?i.label={text:""}:i.label={text:s},o==null)i.type={text:"node"};else if(typeof o=="object"){let[d,f]=Object.entries(o)[0];i[d]={text:f}}else i.type={text:o};if(l==null)i.descr={text:""};else if(typeof l=="object"){let[d,f]=Object.entries(l)[0];i[d]={text:f}}else i.descr={text:l};if(typeof r=="object"){let[d,f]=Object.entries(r)[0];i[d]=f}else i.tags=r;if(typeof n=="object"){let[d,f]=Object.entries(n)[0];i[d]=f}else i.link=n;i.nodeType=e,i.parentBoundary=B,i.wrap=mt(),F=B,B=t,xt.push(F)},"addDeploymentNode"),Ke=g(function(){B=F,xt.pop(),F=xt.pop(),xt.push(F)},"popBoundaryParseStack"),Je=g(function(e,t,s,o,l,a,r,n,i,u,d){let f=V.find(y=>y.alias===t);if(!(f===void 0&&(f=X.find(y=>y.alias===t),f===void 0))){if(s!=null)if(typeof s=="object"){let[y,E]=Object.entries(s)[0];f[y]=E}else f.bgColor=s;if(o!=null)if(typeof o=="object"){let[y,E]=Object.entries(o)[0];f[y]=E}else f.fontColor=o;if(l!=null)if(typeof l=="object"){let[y,E]=Object.entries(l)[0];f[y]=E}else f.borderColor=l;if(a!=null)if(typeof a=="object"){let[y,E]=Object.entries(a)[0];f[y]=E}else f.shadowing=a;if(r!=null)if(typeof r=="object"){let[y,E]=Object.entries(r)[0];f[y]=E}else f.shape=r;if(n!=null)if(typeof n=="object"){let[y,E]=Object.entries(n)[0];f[y]=E}else f.sprite=n;if(i!=null)if(typeof i=="object"){let[y,E]=Object.entries(i)[0];f[y]=E}else f.techn=i;if(u!=null)if(typeof u=="object"){let[y,E]=Object.entries(u)[0];f[y]=E}else f.legendText=u;if(d!=null)if(typeof d=="object"){let[y,E]=Object.entries(d)[0];f[y]=E}else f.legendSprite=d}},"updateElStyle"),Ze=g(function(e,t,s,o,l,a,r){const n=It.find(i=>i.from===t&&i.to===s);if(n!==void 0){if(o!=null)if(typeof o=="object"){let[i,u]=Object.entries(o)[0];n[i]=u}else n.textColor=o;if(l!=null)if(typeof l=="object"){let[i,u]=Object.entries(l)[0];n[i]=u}else n.lineColor=l;if(a!=null)if(typeof a=="object"){let[i,u]=Object.entries(a)[0];n[i]=parseInt(u)}else n.offsetX=parseInt(a);if(r!=null)if(typeof r=="object"){let[i,u]=Object.entries(r)[0];n[i]=parseInt(u)}else n.offsetY=parseInt(r)}},"updateRelStyle"),$e=g(function(e,t,s){let o=Vt,l=zt;if(typeof t=="object"){const a=Object.values(t)[0];o=parseInt(a)}else o=parseInt(t);if(typeof s=="object"){const a=Object.values(s)[0];l=parseInt(a)}else l=parseInt(s);o>=1&&(Vt=o),l>=1&&(zt=l)},"updateLayoutConfig"),t0=g(function(){return Vt},"getC4ShapeInRow"),e0=g(function(){return zt},"getC4BoundaryInRow"),a0=g(function(){return B},"getCurrentBoundaryParse"),i0=g(function(){return F},"getParentBoundaryParse"),_e=g(function(e){return e==null?V:V.filter(t=>t.parentBoundary===e)},"getC4ShapeArray"),n0=g(function(e){return V.find(t=>t.alias===e)},"getC4Shape"),r0=g(function(e){return Object.keys(_e(e))},"getC4ShapeKeys"),xe=g(function(e){return e==null?X:X.filter(t=>t.parentBoundary===e)},"getBoundaries"),s0=xe,l0=g(function(){return It},"getRels"),o0=g(function(){return ie},"getTitle"),c0=g(function(e){ne=e},"setWrap"),mt=g(function(){return ne},"autoWrap"),h0=g(function(){V=[],X=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],F="",B="global",xt=[""],It=[],xt=[""],ie="",ne=!1,Vt=4,zt=2},"clear"),u0={SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25},d0={FILLED:0,OPEN:1},f0={LEFTOF:0,RIGHTOF:1,OVER:2},p0=g(function(e){ie=ge(e,Bt())},"setTitle"),te={addPersonOrSystem:Xe,addPersonOrSystemBoundary:He,addContainer:We,addContainerBoundary:qe,addComponent:Qe,addDeploymentNode:Ge,popBoundaryParseStack:Ke,addRel:ze,updateElStyle:Je,updateRelStyle:Ze,updateLayoutConfig:$e,autoWrap:mt,setWrap:c0,getC4ShapeArray:_e,getC4Shape:n0,getC4ShapeKeys:r0,getBoundaries:xe,getBoundarys:s0,getCurrentBoundaryParse:a0,getParentBoundaryParse:i0,getRels:l0,getTitle:o0,getC4Type:Fe,getC4ShapeInRow:t0,getC4BoundaryInRow:e0,setAccTitle:Be,getAccTitle:Ie,getAccDescription:Me,setAccDescription:Le,getConfig:g(()=>Bt().c4,"getConfig"),clear:h0,LINETYPE:u0,ARROWTYPE:d0,PLACEMENT:f0,setTitle:p0,setC4Type:Ve},re=g(function(e,t){return Se(e,t)},"drawRect"),me=g(function(e,t,s,o,l,a){const r=e.append("image");r.attr("width",t),r.attr("height",s),r.attr("x",o),r.attr("y",l);let n=a.startsWith("data:image/png;base64")?a:je(a);r.attr("xlink:href",n)},"drawImage"),y0=g((e,t,s)=>{const o=e.append("g");let l=0;for(let a of t){let r=a.textColor?a.textColor:"#444444",n=a.lineColor?a.lineColor:"#444444",i=a.offsetX?parseInt(a.offsetX):0,u=a.offsetY?parseInt(a.offsetY):0,d="";if(l===0){let y=o.append("line");y.attr("x1",a.startPoint.x),y.attr("y1",a.startPoint.y),y.attr("x2",a.endPoint.x),y.attr("y2",a.endPoint.y),y.attr("stroke-width","1"),y.attr("stroke",n),y.style("fill","none"),a.type!=="rel_b"&&y.attr("marker-end","url("+d+"#arrowhead)"),(a.type==="birel"||a.type==="rel_b")&&y.attr("marker-start","url("+d+"#arrowend)"),l=-1}else{let y=o.append("path");y.attr("fill","none").attr("stroke-width","1").attr("stroke",n).attr("d","Mstartx,starty Qcontrolx,controly stopx,stopy ".replaceAll("startx",a.startPoint.x).replaceAll("starty",a.startPoint.y).replaceAll("controlx",a.startPoint.x+(a.endPoint.x-a.startPoint.x)/2-(a.endPoint.x-a.startPoint.x)/4).replaceAll("controly",a.startPoint.y+(a.endPoint.y-a.startPoint.y)/2).replaceAll("stopx",a.endPoint.x).replaceAll("stopy",a.endPoint.y)),a.type!=="rel_b"&&y.attr("marker-end","url("+d+"#arrowhead)"),(a.type==="birel"||a.type==="rel_b")&&y.attr("marker-start","url("+d+"#arrowend)")}let f=s.messageFont();Q(s)(a.label.text,o,Math.min(a.startPoint.x,a.endPoint.x)+Math.abs(a.endPoint.x-a.startPoint.x)/2+i,Math.min(a.startPoint.y,a.endPoint.y)+Math.abs(a.endPoint.y-a.startPoint.y)/2+u,a.label.width,a.label.height,{fill:r},f),a.techn&&a.techn.text!==""&&(f=s.messageFont(),Q(s)("["+a.techn.text+"]",o,Math.min(a.startPoint.x,a.endPoint.x)+Math.abs(a.endPoint.x-a.startPoint.x)/2+i,Math.min(a.startPoint.y,a.endPoint.y)+Math.abs(a.endPoint.y-a.startPoint.y)/2+s.messageFontSize+5+u,Math.max(a.label.width,a.techn.width),a.techn.height,{fill:r,"font-style":"italic"},f))}},"drawRels"),g0=g(function(e,t,s){const o=e.append("g");let l=t.bgColor?t.bgColor:"none",a=t.borderColor?t.borderColor:"#444444",r=t.fontColor?t.fontColor:"black",n={"stroke-width":1,"stroke-dasharray":"7.0,7.0"};t.nodeType&&(n={"stroke-width":1});let i={x:t.x,y:t.y,fill:l,stroke:a,width:t.width,height:t.height,rx:2.5,ry:2.5,attrs:n};re(o,i);let u=s.boundaryFont();u.fontWeight="bold",u.fontSize=u.fontSize+2,u.fontColor=r,Q(s)(t.label.text,o,t.x,t.y+t.label.Y,t.width,t.height,{fill:"#444444"},u),t.type&&t.type.text!==""&&(u=s.boundaryFont(),u.fontColor=r,Q(s)(t.type.text,o,t.x,t.y+t.type.Y,t.width,t.height,{fill:"#444444"},u)),t.descr&&t.descr.text!==""&&(u=s.boundaryFont(),u.fontSize=u.fontSize-2,u.fontColor=r,Q(s)(t.descr.text,o,t.x,t.y+t.descr.Y,t.width,t.height,{fill:"#444444"},u))},"drawBoundary"),b0=g(function(e,t,s){var f;let o=t.bgColor?t.bgColor:s[t.typeC4Shape.text+"_bg_color"],l=t.borderColor?t.borderColor:s[t.typeC4Shape.text+"_border_color"],a=t.fontColor?t.fontColor:"#FFFFFF",r="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";switch(t.typeC4Shape.text){case"person":r="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";break;case"external_person":r="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAB6ElEQVR4Xu2YLY+EMBCG9+dWr0aj0Wg0Go1Go0+j8Xdv2uTCvv1gpt0ebHKPuhDaeW4605Z9mJvx4AdXUyTUdd08z+u6flmWZRnHsWkafk9DptAwDPu+f0eAYtu2PEaGWuj5fCIZrBAC2eLBAnRCsEkkxmeaJp7iDJ2QMDdHsLg8SxKFEJaAo8lAXnmuOFIhTMpxxKATebo4UiFknuNo4OniSIXQyRxEA3YsnjGCVEjVXD7yLUAqxBGUyPv/Y4W2beMgGuS7kVQIBycH0fD+oi5pezQETxdHKmQKGk1eQEYldK+jw5GxPfZ9z7Mk0Qnhf1W1m3w//EUn5BDmSZsbR44QQLBEqrBHqOrmSKaQAxdnLArCrxZcM7A7ZKs4ioRq8LFC+NpC3WCBJsvpVw5edm9iEXFuyNfxXAgSwfrFQ1c0iNda8AdejvUgnktOtJQQxmcfFzGglc5WVCj7oDgFqU18boeFSs52CUh8LE8BIVQDT1ABrB0HtgSEYlX5doJnCwv9TXocKCaKbnwhdDKPq4lf3SwU3HLq4V/+WYhHVMa/3b4IlfyikAduCkcBc7mQ3/z/Qq/cTuikhkzB12Ae/mcJC9U+Vo8Ej1gWAtgbeGgFsAMHr50BIWOLCbezvhpBFUdY6EJuJ/QDW0XoMX60zZ0AAAAASUVORK5CYII=";break}const n=e.append("g");n.attr("class","person-man");const i=De();switch(t.typeC4Shape.text){case"person":case"external_person":case"system":case"external_system":case"container":case"external_container":case"component":case"external_component":i.x=t.x,i.y=t.y,i.fill=o,i.width=t.width,i.height=t.height,i.stroke=l,i.rx=2.5,i.ry=2.5,i.attrs={"stroke-width":.5},re(n,i);break;case"system_db":case"external_system_db":case"container_db":case"external_container_db":case"component_db":case"external_component_db":n.append("path").attr("fill",o).attr("stroke-width","0.5").attr("stroke",l).attr("d","Mstartx,startyc0,-10 half,-10 half,-10c0,0 half,0 half,10l0,heightc0,10 -half,10 -half,10c0,0 -half,0 -half,-10l0,-height".replaceAll("startx",t.x).replaceAll("starty",t.y).replaceAll("half",t.width/2).replaceAll("height",t.height)),n.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",l).attr("d","Mstartx,startyc0,10 half,10 half,10c0,0 half,0 half,-10".replaceAll("startx",t.x).replaceAll("starty",t.y).replaceAll("half",t.width/2));break;case"system_queue":case"external_system_queue":case"container_queue":case"external_container_queue":case"component_queue":case"external_component_queue":n.append("path").attr("fill",o).attr("stroke-width","0.5").attr("stroke",l).attr("d","Mstartx,startylwidth,0c5,0 5,half 5,halfc0,0 0,half -5,halfl-width,0c-5,0 -5,-half -5,-halfc0,0 0,-half 5,-half".replaceAll("startx",t.x).replaceAll("starty",t.y).replaceAll("width",t.width).replaceAll("half",t.height/2)),n.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",l).attr("d","Mstartx,startyc-5,0 -5,half -5,halfc0,half 5,half 5,half".replaceAll("startx",t.x+t.width).replaceAll("starty",t.y).replaceAll("half",t.height/2));break}let u=w0(s,t.typeC4Shape.text);switch(n.append("text").attr("fill",a).attr("font-family",u.fontFamily).attr("font-size",u.fontSize-2).attr("font-style","italic").attr("lengthAdjust","spacing").attr("textLength",t.typeC4Shape.width).attr("x",t.x+t.width/2-t.typeC4Shape.width/2).attr("y",t.y+t.typeC4Shape.Y).text("<<"+t.typeC4Shape.text+">>"),t.typeC4Shape.text){case"person":case"external_person":me(n,48,48,t.x+t.width/2-24,t.y+t.image.Y,r);break}let d=s[t.typeC4Shape.text+"Font"]();return d.fontWeight="bold",d.fontSize=d.fontSize+2,d.fontColor=a,Q(s)(t.label.text,n,t.x,t.y+t.label.Y,t.width,t.height,{fill:a},d),d=s[t.typeC4Shape.text+"Font"](),d.fontColor=a,t.techn&&((f=t.techn)==null?void 0:f.text)!==""?Q(s)(t.techn.text,n,t.x,t.y+t.techn.Y,t.width,t.height,{fill:a,"font-style":"italic"},d):t.type&&t.type.text!==""&&Q(s)(t.type.text,n,t.x,t.y+t.type.Y,t.width,t.height,{fill:a,"font-style":"italic"},d),t.descr&&t.descr.text!==""&&(d=s.personFont(),d.fontColor=a,Q(s)(t.descr.text,n,t.x,t.y+t.descr.Y,t.width,t.height,{fill:a},d)),t.height},"drawC4Shape"),_0=g(function(e){e.append("defs").append("symbol").attr("id","database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")},"insertDatabaseIcon"),x0=g(function(e){e.append("defs").append("symbol").attr("id","computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z")},"insertComputerIcon"),m0=g(function(e){e.append("defs").append("symbol").attr("id","clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")},"insertClockIcon"),v0=g(function(e){e.append("defs").append("marker").attr("id","arrowhead").attr("refX",9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z")},"insertArrowHead"),E0=g(function(e){e.append("defs").append("marker").attr("id","arrowend").attr("refX",1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 10 0 L 0 5 L 10 10 z")},"insertArrowEnd"),k0=g(function(e){e.append("defs").append("marker").attr("id","filled-head").attr("refX",18).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"insertArrowFilledHead"),A0=g(function(e){e.append("defs").append("marker").attr("id","sequencenumber").attr("refX",15).attr("refY",15).attr("markerWidth",60).attr("markerHeight",40).attr("orient","auto").append("circle").attr("cx",15).attr("cy",15).attr("r",6)},"insertDynamicNumber"),C0=g(function(e){const s=e.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",16).attr("refY",4);s.append("path").attr("fill","black").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 9,2 V 6 L16,4 Z"),s.append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 0,1 L 6,7 M 6,1 L 0,7")},"insertArrowCrossHead"),w0=g((e,t)=>({fontFamily:e[t+"FontFamily"],fontSize:e[t+"FontSize"],fontWeight:e[t+"FontWeight"]}),"getC4ShapeFont"),Q=function(){function e(l,a,r,n,i,u,d){const f=a.append("text").attr("x",r+i/2).attr("y",n+u/2+5).style("text-anchor","middle").text(l);o(f,d)}g(e,"byText");function t(l,a,r,n,i,u,d,f){const{fontSize:y,fontFamily:E,fontWeight:O}=f,S=l.split($t.lineBreakRegex);for(let P=0;P=this.data.widthLimit||o>=this.data.widthLimit||this.nextData.cnt>ve)&&(s=this.nextData.startx+t.margin+_.nextLinePaddingX,l=this.nextData.stopy+t.margin*2,this.nextData.stopx=o=s+t.width,this.nextData.starty=this.nextData.stopy,this.nextData.stopy=a=l+t.height,this.nextData.cnt=1),t.x=s,t.y=l,this.updateVal(this.data,"startx",s,Math.min),this.updateVal(this.data,"starty",l,Math.min),this.updateVal(this.data,"stopx",o,Math.max),this.updateVal(this.data,"stopy",a,Math.max),this.updateVal(this.nextData,"startx",s,Math.min),this.updateVal(this.nextData,"starty",l,Math.min),this.updateVal(this.nextData,"stopx",o,Math.max),this.updateVal(this.nextData,"stopy",a,Math.max)}init(t){this.name="",this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,widthLimit:void 0},this.nextData={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,cnt:0},ae(t.db.getConfig())}bumpLastMargin(t){this.data.stopx+=t,this.data.stopy+=t}},g(Ot,"Bounds"),Ot),ae=g(function(e){Pe(_,e),e.fontFamily&&(_.personFontFamily=_.systemFontFamily=_.messageFontFamily=e.fontFamily),e.fontSize&&(_.personFontSize=_.systemFontSize=_.messageFontSize=e.fontSize),e.fontWeight&&(_.personFontWeight=_.systemFontWeight=_.messageFontWeight=e.fontWeight)},"setConf"),Pt=g((e,t)=>({fontFamily:e[t+"FontFamily"],fontSize:e[t+"FontSize"],fontWeight:e[t+"FontWeight"]}),"c4ShapeFont"),Ut=g(e=>({fontFamily:e.boundaryFontFamily,fontSize:e.boundaryFontSize,fontWeight:e.boundaryFontWeight}),"boundaryFont"),T0=g(e=>({fontFamily:e.messageFontFamily,fontSize:e.messageFontSize,fontWeight:e.messageFontWeight}),"messageFont");function j(e,t,s,o,l){if(!t[e].width)if(s)t[e].text=Ne(t[e].text,l,o),t[e].textLines=t[e].text.split($t.lineBreakRegex).length,t[e].width=l,t[e].height=de(t[e].text,o);else{let a=t[e].text.split($t.lineBreakRegex);t[e].textLines=a.length;let r=0;t[e].height=0,t[e].width=0;for(const n of a)t[e].width=Math.max(Tt(n,o),t[e].width),r=de(n,o),t[e].height=t[e].height+r}}g(j,"calcC4ShapeTextWH");var ke=g(function(e,t,s){t.x=s.data.startx,t.y=s.data.starty,t.width=s.data.stopx-s.data.startx,t.height=s.data.stopy-s.data.starty,t.label.y=_.c4ShapeMargin-35;let o=t.wrap&&_.wrap,l=Ut(_);l.fontSize=l.fontSize+2,l.fontWeight="bold";let a=Tt(t.label.text,l);j("label",t,o,l,a),z.drawBoundary(e,t,_)},"drawBoundary"),Ae=g(function(e,t,s,o){let l=0;for(const a of o){l=0;const r=s[a];let n=Pt(_,r.typeC4Shape.text);switch(n.fontSize=n.fontSize-2,r.typeC4Shape.width=Tt("«"+r.typeC4Shape.text+"»",n),r.typeC4Shape.height=n.fontSize+2,r.typeC4Shape.Y=_.c4ShapePadding,l=r.typeC4Shape.Y+r.typeC4Shape.height-4,r.image={width:0,height:0,Y:0},r.typeC4Shape.text){case"person":case"external_person":r.image.width=48,r.image.height=48,r.image.Y=l,l=r.image.Y+r.image.height;break}r.sprite&&(r.image.width=48,r.image.height=48,r.image.Y=l,l=r.image.Y+r.image.height);let i=r.wrap&&_.wrap,u=_.width-_.c4ShapePadding*2,d=Pt(_,r.typeC4Shape.text);if(d.fontSize=d.fontSize+2,d.fontWeight="bold",j("label",r,i,d,u),r.label.Y=l+8,l=r.label.Y+r.label.height,r.type&&r.type.text!==""){r.type.text="["+r.type.text+"]";let E=Pt(_,r.typeC4Shape.text);j("type",r,i,E,u),r.type.Y=l+5,l=r.type.Y+r.type.height}else if(r.techn&&r.techn.text!==""){r.techn.text="["+r.techn.text+"]";let E=Pt(_,r.techn.text);j("techn",r,i,E,u),r.techn.Y=l+5,l=r.techn.Y+r.techn.height}let f=l,y=r.label.width;if(r.descr&&r.descr.text!==""){let E=Pt(_,r.typeC4Shape.text);j("descr",r,i,E,u),r.descr.Y=l+20,l=r.descr.Y+r.descr.height,y=Math.max(r.label.width,r.descr.width),f=l-r.descr.textLines*5}y=y+_.c4ShapePadding,r.width=Math.max(r.width||_.width,y,_.width),r.height=Math.max(r.height||_.height,f,_.height),r.margin=r.margin||_.c4ShapeMargin,e.insert(r),z.drawC4Shape(t,r,_)}e.bumpLastMargin(_.c4ShapeMargin)},"drawC4ShapeArray"),Rt,Y=(Rt=class{constructor(t,s){this.x=t,this.y=s}},g(Rt,"Point"),Rt),pe=g(function(e,t){let s=e.x,o=e.y,l=t.x,a=t.y,r=s+e.width/2,n=o+e.height/2,i=Math.abs(s-l),u=Math.abs(o-a),d=u/i,f=e.height/e.width,y=null;return o==a&&sl?y=new Y(s,n):s==l&&oa&&(y=new Y(r,o)),s>l&&o=d?y=new Y(s,n+d*e.width/2):y=new Y(r-i/u*e.height/2,o+e.height):s=d?y=new Y(s+e.width,n+d*e.width/2):y=new Y(r+i/u*e.height/2,o+e.height):sa?f>=d?y=new Y(s+e.width,n-d*e.width/2):y=new Y(r+e.height/2*i/u,o):s>l&&o>a&&(f>=d?y=new Y(s,n-e.width/2*d):y=new Y(r-e.height/2*i/u,o)),y},"getIntersectPoint"),O0=g(function(e,t){let s={x:0,y:0};s.x=t.x+t.width/2,s.y=t.y+t.height/2;let o=pe(e,s);s.x=e.x+e.width/2,s.y=e.y+e.height/2;let l=pe(t,s);return{startPoint:o,endPoint:l}},"getIntersectPoints"),R0=g(function(e,t,s,o){let l=0;for(let a of t){l=l+1;let r=a.wrap&&_.wrap,n=T0(_);o.db.getC4Type()==="C4Dynamic"&&(a.label.text=l+": "+a.label.text);let u=Tt(a.label.text,n);j("label",a,r,n,u),a.techn&&a.techn.text!==""&&(u=Tt(a.techn.text,n),j("techn",a,r,n,u)),a.descr&&a.descr.text!==""&&(u=Tt(a.descr.text,n),j("descr",a,r,n,u));let d=s(a.from),f=s(a.to),y=O0(d,f);a.startPoint=y.startPoint,a.endPoint=y.endPoint}z.drawRels(e,t,_)},"drawRels");function se(e,t,s,o,l){let a=new Ee(l);a.data.widthLimit=s.data.widthLimit/Math.min(ee,o.length);for(let[r,n]of o.entries()){let i=0;n.image={width:0,height:0,Y:0},n.sprite&&(n.image.width=48,n.image.height=48,n.image.Y=i,i=n.image.Y+n.image.height);let u=n.wrap&&_.wrap,d=Ut(_);if(d.fontSize=d.fontSize+2,d.fontWeight="bold",j("label",n,u,d,a.data.widthLimit),n.label.Y=i+8,i=n.label.Y+n.label.height,n.type&&n.type.text!==""){n.type.text="["+n.type.text+"]";let O=Ut(_);j("type",n,u,O,a.data.widthLimit),n.type.Y=i+5,i=n.type.Y+n.type.height}if(n.descr&&n.descr.text!==""){let O=Ut(_);O.fontSize=O.fontSize-2,j("descr",n,u,O,a.data.widthLimit),n.descr.Y=i+20,i=n.descr.Y+n.descr.height}if(r==0||r%ee===0){let O=s.data.startx+_.diagramMarginX,S=s.data.stopy+_.diagramMarginY+i;a.setData(O,O,S,S)}else{let O=a.data.stopx!==a.data.startx?a.data.stopx+_.diagramMarginX:a.data.startx,S=a.data.starty;a.setData(O,O,S,S)}a.name=n.alias;let f=l.db.getC4ShapeArray(n.alias),y=l.db.getC4ShapeKeys(n.alias);y.length>0&&Ae(a,e,f,y),t=n.alias;let E=l.db.getBoundarys(t);E.length>0&&se(e,t,a,E,l),n.alias!=="global"&&ke(e,n,a),s.data.stopy=Math.max(a.data.stopy+_.c4ShapeMargin,s.data.stopy),s.data.stopx=Math.max(a.data.stopx+_.c4ShapeMargin,s.data.stopx),Xt=Math.max(Xt,s.data.stopx),Wt=Math.max(Wt,s.data.stopy)}}g(se,"drawInsideBoundary");var S0=g(function(e,t,s,o){_=Bt().c4;const l=Bt().securityLevel;let a;l==="sandbox"&&(a=jt("#i"+t));const r=l==="sandbox"?jt(a.nodes()[0].contentDocument.body):jt("body");let n=o.db;o.db.setWrap(_.wrap),ve=n.getC4ShapeInRow(),ee=n.getC4BoundaryInRow(),fe.debug(`C:${JSON.stringify(_,null,2)}`);const i=l==="sandbox"?r.select(`[id="${t}"]`):jt(`[id="${t}"]`);z.insertComputerIcon(i),z.insertDatabaseIcon(i),z.insertClockIcon(i);let u=new Ee(o);u.setData(_.diagramMarginX,_.diagramMarginX,_.diagramMarginY,_.diagramMarginY),u.data.widthLimit=screen.availWidth,Xt=_.diagramMarginX,Wt=_.diagramMarginY;const d=o.db.getTitle();let f=o.db.getBoundarys("");se(i,"",u,f,o),z.insertArrowHead(i),z.insertArrowEnd(i),z.insertArrowCrossHead(i),z.insertArrowFilledHead(i),R0(i,o.db.getRels(),o.db.getC4Shape,o),u.data.stopx=Xt,u.data.stopy=Wt;const y=u.data;let O=y.stopy-y.starty+2*_.diagramMarginY;const P=y.stopx-y.startx+2*_.diagramMarginX;d&&i.append("text").text(d).attr("x",(y.stopx-y.startx)/2-4*_.diagramMarginX).attr("y",y.starty+_.diagramMarginY),Ye(i,O,P,_.useMaxWidth);const M=d?60:0;i.attr("viewBox",y.startx-_.diagramMarginX+" -"+(_.diagramMarginY+M)+" "+P+" "+(O+M)),fe.debug("models:",y)},"draw"),ye={drawPersonOrSystemArray:Ae,drawBoundary:ke,setConf:ae,draw:S0},D0=g(e=>`.person { + stroke: ${e.personBorder}; + fill: ${e.personBkg}; + } +`,"getStyles"),P0=D0,N0={parser:Ue,db:te,renderer:ye,styles:P0,init:g(({c4:e,wrap:t})=>{ye.setConf(e),te.setWrap(t)},"init")};export{N0 as diagram}; diff --git a/assets/chunks/channel.DuUz04Yy.js b/assets/chunks/channel.DuUz04Yy.js new file mode 100644 index 000000000..870a9e1e5 --- /dev/null +++ b/assets/chunks/channel.DuUz04Yy.js @@ -0,0 +1 @@ +import{U as a,C as n}from"../app.D0Wo8w0i.js";const t=(r,o)=>a.lang.round(n.parse(r)[o]);export{t as c}; diff --git a/assets/chunks/chunk-BAOP5US2.FIn-rUo8.js b/assets/chunks/chunk-BAOP5US2.FIn-rUo8.js new file mode 100644 index 000000000..96d96318f --- /dev/null +++ b/assets/chunks/chunk-BAOP5US2.FIn-rUo8.js @@ -0,0 +1 @@ +import{_ as l}from"../app.D0Wo8w0i.js";function m(e,c){var i,t,o;e.accDescr&&((i=c.setAccDescription)==null||i.call(c,e.accDescr)),e.accTitle&&((t=c.setAccTitle)==null||t.call(c,e.accTitle)),e.title&&((o=c.setDiagramTitle)==null||o.call(c,e.title))}l(m,"populateCommonDb");export{m as p}; diff --git a/assets/chunks/chunk-CXDZ2C6O.BtvA2Emb.js b/assets/chunks/chunk-CXDZ2C6O.BtvA2Emb.js new file mode 100644 index 000000000..05e2e6918 --- /dev/null +++ b/assets/chunks/chunk-CXDZ2C6O.BtvA2Emb.js @@ -0,0 +1,164 @@ +import{g as mt,s as Et}from"./chunk-EICJXIV7.Cx-DrDyu.js";import{_ as u,i as bt,d as D,a7 as z,s as kt,g as yt,b as Tt,c as Ft,q as Dt,r as _t,e as I,x as Bt,l as ze,v as Qe,j as ie,y as St,z as vt,A as Nt}from"../app.D0Wo8w0i.js";var Ke=function(){var e=u(function(O,o,h,d){for(h=h||{},d=O.length;d--;h[O[d]]=o);return h},"o"),i=[1,18],a=[1,19],l=[1,20],c=[1,41],r=[1,42],A=[1,26],f=[1,24],T=[1,25],S=[1,32],ke=[1,33],ye=[1,34],m=[1,45],Te=[1,35],Fe=[1,36],De=[1,37],_e=[1,38],Be=[1,27],Se=[1,28],ve=[1,29],Ne=[1,30],Le=[1,31],E=[1,44],b=[1,46],k=[1,43],F=[1,47],xe=[1,9],p=[1,8,9],re=[1,58],ue=[1,59],le=[1,60],oe=[1,61],ce=[1,62],Ie=[1,63],Oe=[1,64],he=[1,8,9,41],qe=[1,76],G=[1,8,9,12,13,22,39,41,44,66,67,68,69,70,71,72,77,79],pe=[1,8,9,12,13,17,20,22,39,41,44,48,58,66,67,68,69,70,71,72,77,79,84,99,101,102],de=[13,58,84,99,101,102],Q=[13,58,71,72,84,99,101,102],He=[13,58,66,67,68,69,70,84,99,101,102],we=[1,98],W=[1,115],X=[1,107],q=[1,113],H=[1,108],J=[1,109],Z=[1,110],$=[1,111],ee=[1,112],te=[1,114],Je=[22,58,59,80,84,85,86,87,88,89],Ve=[1,8,9,39,41,44],Ae=[1,8,9,22],Ze=[1,143],$e=[1,8,9,59],N=[1,8,9,22,58,59,80,84,85,86,87,88,89],Pe={trace:u(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mermaidDoc:4,statements:5,graphConfig:6,CLASS_DIAGRAM:7,NEWLINE:8,EOF:9,statement:10,classLabel:11,SQS:12,STR:13,SQE:14,namespaceName:15,alphaNumToken:16,DOT:17,className:18,classLiteralName:19,GENERICTYPE:20,relationStatement:21,LABEL:22,namespaceStatement:23,classStatement:24,memberStatement:25,annotationStatement:26,clickStatement:27,styleStatement:28,cssClassStatement:29,noteStatement:30,classDefStatement:31,direction:32,acc_title:33,acc_title_value:34,acc_descr:35,acc_descr_value:36,acc_descr_multiline_value:37,namespaceIdentifier:38,STRUCT_START:39,classStatements:40,STRUCT_STOP:41,NAMESPACE:42,classIdentifier:43,STYLE_SEPARATOR:44,members:45,CLASS:46,ANNOTATION_START:47,ANNOTATION_END:48,MEMBER:49,SEPARATOR:50,relation:51,NOTE_FOR:52,noteText:53,NOTE:54,CLASSDEF:55,classList:56,stylesOpt:57,ALPHA:58,COMMA:59,direction_tb:60,direction_bt:61,direction_rl:62,direction_lr:63,relationType:64,lineType:65,AGGREGATION:66,EXTENSION:67,COMPOSITION:68,DEPENDENCY:69,LOLLIPOP:70,LINE:71,DOTTED_LINE:72,CALLBACK:73,LINK:74,LINK_TARGET:75,CLICK:76,CALLBACK_NAME:77,CALLBACK_ARGS:78,HREF:79,STYLE:80,CSSCLASS:81,style:82,styleComponent:83,NUM:84,COLON:85,UNIT:86,SPACE:87,BRKT:88,PCT:89,commentToken:90,textToken:91,graphCodeTokens:92,textNoTagsToken:93,TAGSTART:94,TAGEND:95,"==":96,"--":97,DEFAULT:98,MINUS:99,keywords:100,UNICODE_TEXT:101,BQUOTE_STR:102,$accept:0,$end:1},terminals_:{2:"error",7:"CLASS_DIAGRAM",8:"NEWLINE",9:"EOF",12:"SQS",13:"STR",14:"SQE",17:"DOT",20:"GENERICTYPE",22:"LABEL",33:"acc_title",34:"acc_title_value",35:"acc_descr",36:"acc_descr_value",37:"acc_descr_multiline_value",39:"STRUCT_START",41:"STRUCT_STOP",42:"NAMESPACE",44:"STYLE_SEPARATOR",46:"CLASS",47:"ANNOTATION_START",48:"ANNOTATION_END",49:"MEMBER",50:"SEPARATOR",52:"NOTE_FOR",54:"NOTE",55:"CLASSDEF",58:"ALPHA",59:"COMMA",60:"direction_tb",61:"direction_bt",62:"direction_rl",63:"direction_lr",66:"AGGREGATION",67:"EXTENSION",68:"COMPOSITION",69:"DEPENDENCY",70:"LOLLIPOP",71:"LINE",72:"DOTTED_LINE",73:"CALLBACK",74:"LINK",75:"LINK_TARGET",76:"CLICK",77:"CALLBACK_NAME",78:"CALLBACK_ARGS",79:"HREF",80:"STYLE",81:"CSSCLASS",84:"NUM",85:"COLON",86:"UNIT",87:"SPACE",88:"BRKT",89:"PCT",92:"graphCodeTokens",94:"TAGSTART",95:"TAGEND",96:"==",97:"--",98:"DEFAULT",99:"MINUS",100:"keywords",101:"UNICODE_TEXT",102:"BQUOTE_STR"},productions_:[0,[3,1],[3,1],[4,1],[6,4],[5,1],[5,2],[5,3],[11,3],[15,1],[15,3],[15,2],[18,1],[18,3],[18,1],[18,2],[18,2],[18,2],[10,1],[10,2],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,2],[10,2],[10,1],[23,4],[23,5],[38,2],[40,1],[40,2],[40,3],[24,1],[24,3],[24,4],[24,6],[43,2],[43,3],[26,4],[45,1],[45,2],[25,1],[25,2],[25,1],[25,1],[21,3],[21,4],[21,4],[21,5],[30,3],[30,2],[31,3],[56,1],[56,3],[32,1],[32,1],[32,1],[32,1],[51,3],[51,2],[51,2],[51,1],[64,1],[64,1],[64,1],[64,1],[64,1],[65,1],[65,1],[27,3],[27,4],[27,3],[27,4],[27,4],[27,5],[27,3],[27,4],[27,4],[27,5],[27,4],[27,5],[27,5],[27,6],[28,3],[29,3],[57,1],[57,3],[82,1],[82,2],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[90,1],[90,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[93,1],[93,1],[93,1],[93,1],[16,1],[16,1],[16,1],[16,1],[19,1],[53,1]],performAction:u(function(o,h,d,n,C,t,se){var s=t.length-1;switch(C){case 8:this.$=t[s-1];break;case 9:case 12:case 14:this.$=t[s];break;case 10:case 13:this.$=t[s-2]+"."+t[s];break;case 11:case 15:this.$=t[s-1]+t[s];break;case 16:case 17:this.$=t[s-1]+"~"+t[s]+"~";break;case 18:n.addRelation(t[s]);break;case 19:t[s-1].title=n.cleanupLabel(t[s]),n.addRelation(t[s-1]);break;case 30:this.$=t[s].trim(),n.setAccTitle(this.$);break;case 31:case 32:this.$=t[s].trim(),n.setAccDescription(this.$);break;case 33:n.addClassesToNamespace(t[s-3],t[s-1]);break;case 34:n.addClassesToNamespace(t[s-4],t[s-1]);break;case 35:this.$=t[s],n.addNamespace(t[s]);break;case 36:this.$=[t[s]];break;case 37:this.$=[t[s-1]];break;case 38:t[s].unshift(t[s-2]),this.$=t[s];break;case 40:n.setCssClass(t[s-2],t[s]);break;case 41:n.addMembers(t[s-3],t[s-1]);break;case 42:n.setCssClass(t[s-5],t[s-3]),n.addMembers(t[s-5],t[s-1]);break;case 43:this.$=t[s],n.addClass(t[s]);break;case 44:this.$=t[s-1],n.addClass(t[s-1]),n.setClassLabel(t[s-1],t[s]);break;case 45:n.addAnnotation(t[s],t[s-2]);break;case 46:case 59:this.$=[t[s]];break;case 47:t[s].push(t[s-1]),this.$=t[s];break;case 48:break;case 49:n.addMember(t[s-1],n.cleanupLabel(t[s]));break;case 50:break;case 51:break;case 52:this.$={id1:t[s-2],id2:t[s],relation:t[s-1],relationTitle1:"none",relationTitle2:"none"};break;case 53:this.$={id1:t[s-3],id2:t[s],relation:t[s-1],relationTitle1:t[s-2],relationTitle2:"none"};break;case 54:this.$={id1:t[s-3],id2:t[s],relation:t[s-2],relationTitle1:"none",relationTitle2:t[s-1]};break;case 55:this.$={id1:t[s-4],id2:t[s],relation:t[s-2],relationTitle1:t[s-3],relationTitle2:t[s-1]};break;case 56:n.addNote(t[s],t[s-1]);break;case 57:n.addNote(t[s]);break;case 58:this.$=t[s-2],n.defineClass(t[s-1],t[s]);break;case 60:this.$=t[s-2].concat([t[s]]);break;case 61:n.setDirection("TB");break;case 62:n.setDirection("BT");break;case 63:n.setDirection("RL");break;case 64:n.setDirection("LR");break;case 65:this.$={type1:t[s-2],type2:t[s],lineType:t[s-1]};break;case 66:this.$={type1:"none",type2:t[s],lineType:t[s-1]};break;case 67:this.$={type1:t[s-1],type2:"none",lineType:t[s]};break;case 68:this.$={type1:"none",type2:"none",lineType:t[s]};break;case 69:this.$=n.relationType.AGGREGATION;break;case 70:this.$=n.relationType.EXTENSION;break;case 71:this.$=n.relationType.COMPOSITION;break;case 72:this.$=n.relationType.DEPENDENCY;break;case 73:this.$=n.relationType.LOLLIPOP;break;case 74:this.$=n.lineType.LINE;break;case 75:this.$=n.lineType.DOTTED_LINE;break;case 76:case 82:this.$=t[s-2],n.setClickEvent(t[s-1],t[s]);break;case 77:case 83:this.$=t[s-3],n.setClickEvent(t[s-2],t[s-1]),n.setTooltip(t[s-2],t[s]);break;case 78:this.$=t[s-2],n.setLink(t[s-1],t[s]);break;case 79:this.$=t[s-3],n.setLink(t[s-2],t[s-1],t[s]);break;case 80:this.$=t[s-3],n.setLink(t[s-2],t[s-1]),n.setTooltip(t[s-2],t[s]);break;case 81:this.$=t[s-4],n.setLink(t[s-3],t[s-2],t[s]),n.setTooltip(t[s-3],t[s-1]);break;case 84:this.$=t[s-3],n.setClickEvent(t[s-2],t[s-1],t[s]);break;case 85:this.$=t[s-4],n.setClickEvent(t[s-3],t[s-2],t[s-1]),n.setTooltip(t[s-3],t[s]);break;case 86:this.$=t[s-3],n.setLink(t[s-2],t[s]);break;case 87:this.$=t[s-4],n.setLink(t[s-3],t[s-1],t[s]);break;case 88:this.$=t[s-4],n.setLink(t[s-3],t[s-1]),n.setTooltip(t[s-3],t[s]);break;case 89:this.$=t[s-5],n.setLink(t[s-4],t[s-2],t[s]),n.setTooltip(t[s-4],t[s-1]);break;case 90:this.$=t[s-2],n.setCssStyle(t[s-1],t[s]);break;case 91:n.setCssClass(t[s-1],t[s]);break;case 92:this.$=[t[s]];break;case 93:t[s-2].push(t[s]),this.$=t[s-2];break;case 95:this.$=t[s-1]+t[s];break}},"anonymous"),table:[{3:1,4:2,5:3,6:4,7:[1,6],10:5,16:39,18:21,19:40,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,33:i,35:a,37:l,38:22,42:c,43:23,46:r,47:A,49:f,50:T,52:S,54:ke,55:ye,58:m,60:Te,61:Fe,62:De,63:_e,73:Be,74:Se,76:ve,80:Ne,81:Le,84:E,99:b,101:k,102:F},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,3]},e(xe,[2,5],{8:[1,48]}),{8:[1,49]},e(p,[2,18],{22:[1,50]}),e(p,[2,20]),e(p,[2,21]),e(p,[2,22]),e(p,[2,23]),e(p,[2,24]),e(p,[2,25]),e(p,[2,26]),e(p,[2,27]),e(p,[2,28]),e(p,[2,29]),{34:[1,51]},{36:[1,52]},e(p,[2,32]),e(p,[2,48],{51:53,64:56,65:57,13:[1,54],22:[1,55],66:re,67:ue,68:le,69:oe,70:ce,71:Ie,72:Oe}),{39:[1,65]},e(he,[2,39],{39:[1,67],44:[1,66]}),e(p,[2,50]),e(p,[2,51]),{16:68,58:m,84:E,99:b,101:k},{16:39,18:69,19:40,58:m,84:E,99:b,101:k,102:F},{16:39,18:70,19:40,58:m,84:E,99:b,101:k,102:F},{16:39,18:71,19:40,58:m,84:E,99:b,101:k,102:F},{58:[1,72]},{13:[1,73]},{16:39,18:74,19:40,58:m,84:E,99:b,101:k,102:F},{13:qe,53:75},{56:77,58:[1,78]},e(p,[2,61]),e(p,[2,62]),e(p,[2,63]),e(p,[2,64]),e(G,[2,12],{16:39,19:40,18:80,17:[1,79],20:[1,81],58:m,84:E,99:b,101:k,102:F}),e(G,[2,14],{20:[1,82]}),{15:83,16:84,58:m,84:E,99:b,101:k},{16:39,18:85,19:40,58:m,84:E,99:b,101:k,102:F},e(pe,[2,118]),e(pe,[2,119]),e(pe,[2,120]),e(pe,[2,121]),e([1,8,9,12,13,20,22,39,41,44,66,67,68,69,70,71,72,77,79],[2,122]),e(xe,[2,6],{10:5,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,18:21,38:22,43:23,16:39,19:40,5:86,33:i,35:a,37:l,42:c,46:r,47:A,49:f,50:T,52:S,54:ke,55:ye,58:m,60:Te,61:Fe,62:De,63:_e,73:Be,74:Se,76:ve,80:Ne,81:Le,84:E,99:b,101:k,102:F}),{5:87,10:5,16:39,18:21,19:40,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,33:i,35:a,37:l,38:22,42:c,43:23,46:r,47:A,49:f,50:T,52:S,54:ke,55:ye,58:m,60:Te,61:Fe,62:De,63:_e,73:Be,74:Se,76:ve,80:Ne,81:Le,84:E,99:b,101:k,102:F},e(p,[2,19]),e(p,[2,30]),e(p,[2,31]),{13:[1,89],16:39,18:88,19:40,58:m,84:E,99:b,101:k,102:F},{51:90,64:56,65:57,66:re,67:ue,68:le,69:oe,70:ce,71:Ie,72:Oe},e(p,[2,49]),{65:91,71:Ie,72:Oe},e(de,[2,68],{64:92,66:re,67:ue,68:le,69:oe,70:ce}),e(Q,[2,69]),e(Q,[2,70]),e(Q,[2,71]),e(Q,[2,72]),e(Q,[2,73]),e(He,[2,74]),e(He,[2,75]),{8:[1,94],24:95,40:93,43:23,46:r},{16:96,58:m,84:E,99:b,101:k},{45:97,49:we},{48:[1,99]},{13:[1,100]},{13:[1,101]},{77:[1,102],79:[1,103]},{22:W,57:104,58:X,80:q,82:105,83:106,84:H,85:J,86:Z,87:$,88:ee,89:te},{58:[1,116]},{13:qe,53:117},e(p,[2,57]),e(p,[2,123]),{22:W,57:118,58:X,59:[1,119],80:q,82:105,83:106,84:H,85:J,86:Z,87:$,88:ee,89:te},e(Je,[2,59]),{16:39,18:120,19:40,58:m,84:E,99:b,101:k,102:F},e(G,[2,15]),e(G,[2,16]),e(G,[2,17]),{39:[2,35]},{15:122,16:84,17:[1,121],39:[2,9],58:m,84:E,99:b,101:k},e(Ve,[2,43],{11:123,12:[1,124]}),e(xe,[2,7]),{9:[1,125]},e(Ae,[2,52]),{16:39,18:126,19:40,58:m,84:E,99:b,101:k,102:F},{13:[1,128],16:39,18:127,19:40,58:m,84:E,99:b,101:k,102:F},e(de,[2,67],{64:129,66:re,67:ue,68:le,69:oe,70:ce}),e(de,[2,66]),{41:[1,130]},{24:95,40:131,43:23,46:r},{8:[1,132],41:[2,36]},e(he,[2,40],{39:[1,133]}),{41:[1,134]},{41:[2,46],45:135,49:we},{16:39,18:136,19:40,58:m,84:E,99:b,101:k,102:F},e(p,[2,76],{13:[1,137]}),e(p,[2,78],{13:[1,139],75:[1,138]}),e(p,[2,82],{13:[1,140],78:[1,141]}),{13:[1,142]},e(p,[2,90],{59:Ze}),e($e,[2,92],{83:144,22:W,58:X,80:q,84:H,85:J,86:Z,87:$,88:ee,89:te}),e(N,[2,94]),e(N,[2,96]),e(N,[2,97]),e(N,[2,98]),e(N,[2,99]),e(N,[2,100]),e(N,[2,101]),e(N,[2,102]),e(N,[2,103]),e(N,[2,104]),e(p,[2,91]),e(p,[2,56]),e(p,[2,58],{59:Ze}),{58:[1,145]},e(G,[2,13]),{15:146,16:84,58:m,84:E,99:b,101:k},{39:[2,11]},e(Ve,[2,44]),{13:[1,147]},{1:[2,4]},e(Ae,[2,54]),e(Ae,[2,53]),{16:39,18:148,19:40,58:m,84:E,99:b,101:k,102:F},e(de,[2,65]),e(p,[2,33]),{41:[1,149]},{24:95,40:150,41:[2,37],43:23,46:r},{45:151,49:we},e(he,[2,41]),{41:[2,47]},e(p,[2,45]),e(p,[2,77]),e(p,[2,79]),e(p,[2,80],{75:[1,152]}),e(p,[2,83]),e(p,[2,84],{13:[1,153]}),e(p,[2,86],{13:[1,155],75:[1,154]}),{22:W,58:X,80:q,82:156,83:106,84:H,85:J,86:Z,87:$,88:ee,89:te},e(N,[2,95]),e(Je,[2,60]),{39:[2,10]},{14:[1,157]},e(Ae,[2,55]),e(p,[2,34]),{41:[2,38]},{41:[1,158]},e(p,[2,81]),e(p,[2,85]),e(p,[2,87]),e(p,[2,88],{75:[1,159]}),e($e,[2,93],{83:144,22:W,58:X,80:q,84:H,85:J,86:Z,87:$,88:ee,89:te}),e(Ve,[2,8]),e(he,[2,42]),e(p,[2,89])],defaultActions:{2:[2,1],3:[2,2],4:[2,3],83:[2,35],122:[2,11],125:[2,4],135:[2,47],146:[2,10],150:[2,38]},parseError:u(function(o,h){if(h.recoverable)this.trace(o);else{var d=new Error(o);throw d.hash=h,d}},"parseError"),parse:u(function(o){var h=this,d=[0],n=[],C=[null],t=[],se=this.table,s="",ge=0,et=0,At=2,tt=1,ft=t.slice.call(arguments,1),y=Object.create(this.lexer),V={yy:{}};for(var Re in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Re)&&(V.yy[Re]=this.yy[Re]);y.setInput(o,V.yy),V.yy.lexer=y,V.yy.parser=this,typeof y.yylloc>"u"&&(y.yylloc={});var Me=y.yylloc;t.push(Me);var gt=y.options&&y.options.ranges;typeof V.yy.parseError=="function"?this.parseError=V.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Ct(B){d.length=d.length-2*B,C.length=C.length-B,t.length=t.length-B}u(Ct,"popStack");function st(){var B;return B=n.pop()||y.lex()||tt,typeof B!="number"&&(B instanceof Array&&(n=B,B=n.pop()),B=h.symbols_[B]||B),B}u(st,"lex");for(var _,P,v,Ge,U={},Ce,x,it,me;;){if(P=d[d.length-1],this.defaultActions[P]?v=this.defaultActions[P]:((_===null||typeof _>"u")&&(_=st()),v=se[P]&&se[P][_]),typeof v>"u"||!v.length||!v[0]){var Ue="";me=[];for(Ce in se[P])this.terminals_[Ce]&&Ce>At&&me.push("'"+this.terminals_[Ce]+"'");y.showPosition?Ue="Parse error on line "+(ge+1)+`: +`+y.showPosition()+` +Expecting `+me.join(", ")+", got '"+(this.terminals_[_]||_)+"'":Ue="Parse error on line "+(ge+1)+": Unexpected "+(_==tt?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(Ue,{text:y.match,token:this.terminals_[_]||_,line:y.yylineno,loc:Me,expected:me})}if(v[0]instanceof Array&&v.length>1)throw new Error("Parse Error: multiple actions possible at state: "+P+", token: "+_);switch(v[0]){case 1:d.push(_),C.push(y.yytext),t.push(y.yylloc),d.push(v[1]),_=null,et=y.yyleng,s=y.yytext,ge=y.yylineno,Me=y.yylloc;break;case 2:if(x=this.productions_[v[1]][1],U.$=C[C.length-x],U._$={first_line:t[t.length-(x||1)].first_line,last_line:t[t.length-1].last_line,first_column:t[t.length-(x||1)].first_column,last_column:t[t.length-1].last_column},gt&&(U._$.range=[t[t.length-(x||1)].range[0],t[t.length-1].range[1]]),Ge=this.performAction.apply(U,[s,et,ge,V.yy,v[1],C,t].concat(ft)),typeof Ge<"u")return Ge;x&&(d=d.slice(0,-1*x*2),C=C.slice(0,-1*x),t=t.slice(0,-1*x)),d.push(this.productions_[v[1]][0]),C.push(U.$),t.push(U._$),it=se[d[d.length-2]][d[d.length-1]],d.push(it);break;case 3:return!0}}return!0},"parse")},dt=function(){var O={EOF:1,parseError:u(function(h,d){if(this.yy.parser)this.yy.parser.parseError(h,d);else throw new Error(h)},"parseError"),setInput:u(function(o,h){return this.yy=h||this.yy||{},this._input=o,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:u(function(){var o=this._input[0];this.yytext+=o,this.yyleng++,this.offset++,this.match+=o,this.matched+=o;var h=o.match(/(?:\r\n?|\n).*/g);return h?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),o},"input"),unput:u(function(o){var h=o.length,d=o.split(/(?:\r\n?|\n)/g);this._input=o+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-h),this.offset-=h;var n=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),d.length-1&&(this.yylineno-=d.length-1);var C=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:d?(d.length===n.length?this.yylloc.first_column:0)+n[n.length-d.length].length-d[0].length:this.yylloc.first_column-h},this.options.ranges&&(this.yylloc.range=[C[0],C[0]+this.yyleng-h]),this.yyleng=this.yytext.length,this},"unput"),more:u(function(){return this._more=!0,this},"more"),reject:u(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:u(function(o){this.unput(this.match.slice(o))},"less"),pastInput:u(function(){var o=this.matched.substr(0,this.matched.length-this.match.length);return(o.length>20?"...":"")+o.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:u(function(){var o=this.match;return o.length<20&&(o+=this._input.substr(0,20-o.length)),(o.substr(0,20)+(o.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:u(function(){var o=this.pastInput(),h=new Array(o.length+1).join("-");return o+this.upcomingInput()+` +`+h+"^"},"showPosition"),test_match:u(function(o,h){var d,n,C;if(this.options.backtrack_lexer&&(C={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(C.yylloc.range=this.yylloc.range.slice(0))),n=o[0].match(/(?:\r\n?|\n).*/g),n&&(this.yylineno+=n.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:n?n[n.length-1].length-n[n.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+o[0].length},this.yytext+=o[0],this.match+=o[0],this.matches=o,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(o[0].length),this.matched+=o[0],d=this.performAction.call(this,this.yy,this,h,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),d)return d;if(this._backtrack){for(var t in C)this[t]=C[t];return!1}return!1},"test_match"),next:u(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var o,h,d,n;this._more||(this.yytext="",this.match="");for(var C=this._currentRules(),t=0;th[0].length)){if(h=d,n=t,this.options.backtrack_lexer){if(o=this.test_match(d,C[t]),o!==!1)return o;if(this._backtrack){h=!1;continue}else return!1}else if(!this.options.flex)break}return h?(o=this.test_match(h,C[n]),o!==!1?o:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:u(function(){var h=this.next();return h||this.lex()},"lex"),begin:u(function(h){this.conditionStack.push(h)},"begin"),popState:u(function(){var h=this.conditionStack.length-1;return h>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:u(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:u(function(h){return h=this.conditionStack.length-1-Math.abs(h||0),h>=0?this.conditionStack[h]:"INITIAL"},"topState"),pushState:u(function(h){this.begin(h)},"pushState"),stateStackSize:u(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:u(function(h,d,n,C){switch(n){case 0:return 60;case 1:return 61;case 2:return 62;case 3:return 63;case 4:break;case 5:break;case 6:return this.begin("acc_title"),33;case 7:return this.popState(),"acc_title_value";case 8:return this.begin("acc_descr"),35;case 9:return this.popState(),"acc_descr_value";case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:return 8;case 14:break;case 15:return 7;case 16:return 7;case 17:return"EDGE_STATE";case 18:this.begin("callback_name");break;case 19:this.popState();break;case 20:this.popState(),this.begin("callback_args");break;case 21:return 77;case 22:this.popState();break;case 23:return 78;case 24:this.popState();break;case 25:return"STR";case 26:this.begin("string");break;case 27:return 80;case 28:return 55;case 29:return this.begin("namespace"),42;case 30:return this.popState(),8;case 31:break;case 32:return this.begin("namespace-body"),39;case 33:return this.popState(),41;case 34:return"EOF_IN_STRUCT";case 35:return 8;case 36:break;case 37:return"EDGE_STATE";case 38:return this.begin("class"),46;case 39:return this.popState(),8;case 40:break;case 41:return this.popState(),this.popState(),41;case 42:return this.begin("class-body"),39;case 43:return this.popState(),41;case 44:return"EOF_IN_STRUCT";case 45:return"EDGE_STATE";case 46:return"OPEN_IN_STRUCT";case 47:break;case 48:return"MEMBER";case 49:return 81;case 50:return 73;case 51:return 74;case 52:return 76;case 53:return 52;case 54:return 54;case 55:return 47;case 56:return 48;case 57:return 79;case 58:this.popState();break;case 59:return"GENERICTYPE";case 60:this.begin("generic");break;case 61:this.popState();break;case 62:return"BQUOTE_STR";case 63:this.begin("bqstring");break;case 64:return 75;case 65:return 75;case 66:return 75;case 67:return 75;case 68:return 67;case 69:return 67;case 70:return 69;case 71:return 69;case 72:return 68;case 73:return 66;case 74:return 70;case 75:return 71;case 76:return 72;case 77:return 22;case 78:return 44;case 79:return 99;case 80:return 17;case 81:return"PLUS";case 82:return 85;case 83:return 59;case 84:return 88;case 85:return 88;case 86:return 89;case 87:return"EQUALS";case 88:return"EQUALS";case 89:return 58;case 90:return 12;case 91:return 14;case 92:return"PUNCTUATION";case 93:return 84;case 94:return 101;case 95:return 87;case 96:return 87;case 97:return 9}},"anonymous"),rules:[/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:classDiagram-v2\b)/,/^(?:classDiagram\b)/,/^(?:\[\*\])/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:["])/,/^(?:[^"]*)/,/^(?:["])/,/^(?:style\b)/,/^(?:classDef\b)/,/^(?:namespace\b)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:[{])/,/^(?:[}])/,/^(?:$)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:\[\*\])/,/^(?:class\b)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:[}])/,/^(?:[{])/,/^(?:[}])/,/^(?:$)/,/^(?:\[\*\])/,/^(?:[{])/,/^(?:[\n])/,/^(?:[^{}\n]*)/,/^(?:cssClass\b)/,/^(?:callback\b)/,/^(?:link\b)/,/^(?:click\b)/,/^(?:note for\b)/,/^(?:note\b)/,/^(?:<<)/,/^(?:>>)/,/^(?:href\b)/,/^(?:[~])/,/^(?:[^~]*)/,/^(?:~)/,/^(?:[`])/,/^(?:[^`]+)/,/^(?:[`])/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:\s*<\|)/,/^(?:\s*\|>)/,/^(?:\s*>)/,/^(?:\s*<)/,/^(?:\s*\*)/,/^(?:\s*o\b)/,/^(?:\s*\(\))/,/^(?:--)/,/^(?:\.\.)/,/^(?::{1}[^:\n;]+)/,/^(?::{3})/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?::)/,/^(?:,)/,/^(?:#)/,/^(?:#)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:\w+)/,/^(?:\[)/,/^(?:\])/,/^(?:[!"#$%&'*+,-.`?\\/])/,/^(?:[0-9]+)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\s)/,/^(?:\s)/,/^(?:$)/],conditions:{"namespace-body":{rules:[26,33,34,35,36,37,38,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},namespace:{rules:[26,29,30,31,32,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},"class-body":{rules:[26,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},class:{rules:[26,39,40,41,42,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},acc_descr_multiline:{rules:[11,12,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},acc_descr:{rules:[9,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},acc_title:{rules:[7,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},callback_args:{rules:[22,23,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},callback_name:{rules:[19,20,21,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},href:{rules:[26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},struct:{rules:[26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},generic:{rules:[26,49,50,51,52,53,54,55,56,57,58,59,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},bqstring:{rules:[26,49,50,51,52,53,54,55,56,57,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},string:{rules:[24,25,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,8,10,13,14,15,16,17,18,26,27,28,29,38,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97],inclusive:!0}}};return O}();Pe.lexer=dt;function fe(){this.yy={}}return u(fe,"Parser"),fe.prototype=Pe,Pe.Parser=fe,new fe}();Ke.parser=Ke;var os=Ke,nt=["#","+","~","-",""],Y,at=(Y=class{constructor(i,a){this.memberType=a,this.visibility="",this.classifier="",this.text="";const l=bt(i,D());this.parseMember(l)}getDisplayDetails(){let i=this.visibility+z(this.id);this.memberType==="method"&&(i+=`(${z(this.parameters.trim())})`,this.returnType&&(i+=" : "+z(this.returnType))),i=i.trim();const a=this.parseClassifier();return{displayText:i,cssStyle:a}}parseMember(i){let a="";if(this.memberType==="method"){const r=/([#+~-])?(.+)\((.*)\)([\s$*])?(.*)([$*])?/.exec(i);if(r){const A=r[1]?r[1].trim():"";if(nt.includes(A)&&(this.visibility=A),this.id=r[2],this.parameters=r[3]?r[3].trim():"",a=r[4]?r[4].trim():"",this.returnType=r[5]?r[5].trim():"",a===""){const f=this.returnType.substring(this.returnType.length-1);/[$*]/.exec(f)&&(a=f,this.returnType=this.returnType.substring(0,this.returnType.length-1))}}}else{const c=i.length,r=i.substring(0,1),A=i.substring(c-1);nt.includes(r)&&(this.visibility=r),/[$*]/.exec(A)&&(a=A),this.id=i.substring(this.visibility===""?0:1,a===""?c:c-1)}this.classifier=a,this.id=this.id.startsWith(" ")?" "+this.id.trim():this.id.trim();const l=`${this.visibility?"\\"+this.visibility:""}${z(this.id)}${this.memberType==="method"?`(${z(this.parameters)})${this.returnType?" : "+z(this.returnType):""}`:""}`;this.text=l.replaceAll("<","<").replaceAll(">",">"),this.text.startsWith("\\<")&&(this.text=this.text.replace("\\<","~"))}parseClassifier(){switch(this.classifier){case"*":return"font-style:italic;";case"$":return"text-decoration:underline;";default:return""}}},u(Y,"ClassMember"),Y),Ee="classId-",be=[],g=new Map,rt=new Map,ne=[],j=[],ut=0,L=new Map,Ye=0,ae=[],R=u(e=>I.sanitizeText(e,D()),"sanitizeText"),M=u(function(e){const i=I.sanitizeText(e,D());let a="",l=i;if(i.indexOf("~")>0){const c=i.split("~");l=R(c[0]),a=R(c[1])}return{className:l,type:a}},"splitClassNameAndType"),Lt=u(function(e,i){const a=I.sanitizeText(e,D());i&&(i=R(i));const{className:l}=M(a);g.get(l).label=i,g.get(l).text=`${i}${g.get(l).type?`<${g.get(l).type}>`:""}`},"setClassLabel"),K=u(function(e){const i=I.sanitizeText(e,D()),{className:a,type:l}=M(i);if(g.has(a))return;const c=I.sanitizeText(a,D());g.set(c,{id:c,type:l,label:c,text:`${c}${l?`<${l}>`:""}`,shape:"classBox",cssClasses:"default",methods:[],members:[],annotations:[],styles:[],domId:Ee+c+"-"+ut}),ut++},"addClass"),lt=u(function(e,i){const a={id:`interface${j.length}`,label:e,classId:i};j.push(a)},"addInterface"),ot=u(function(e){const i=I.sanitizeText(e,D());if(g.has(i))return g.get(i).domId;throw new Error("Class not found: "+i)},"lookUpDomId"),xt=u(function(){be=[],g=new Map,ne=[],j=[],ae=[],ae.push(ht),L=new Map,Ye=0,Xe="TB",Bt()},"clear"),It=u(function(e){return g.get(e)},"getClass"),Ot=u(function(){return g},"getClasses"),wt=u(function(){return be},"getRelations"),Vt=u(function(){return ne},"getNotes"),Pt=u(function(e){ze.debug("Adding relation: "+JSON.stringify(e));const i=[w.LOLLIPOP,w.AGGREGATION,w.COMPOSITION,w.DEPENDENCY,w.EXTENSION];e.relation.type1===w.LOLLIPOP&&!i.includes(e.relation.type2)?(K(e.id2),lt(e.id1,e.id2),e.id1=`interface${j.length-1}`):e.relation.type2===w.LOLLIPOP&&!i.includes(e.relation.type1)?(K(e.id1),lt(e.id2,e.id1),e.id2=`interface${j.length-1}`):(K(e.id1),K(e.id2)),e.id1=M(e.id1).className,e.id2=M(e.id2).className,e.relationTitle1=I.sanitizeText(e.relationTitle1.trim(),D()),e.relationTitle2=I.sanitizeText(e.relationTitle2.trim(),D()),be.push(e)},"addRelation"),Rt=u(function(e,i){const a=M(e).className;g.get(a).annotations.push(i)},"addAnnotation"),ct=u(function(e,i){K(e);const a=M(e).className,l=g.get(a);if(typeof i=="string"){const c=i.trim();c.startsWith("<<")&&c.endsWith(">>")?l.annotations.push(R(c.substring(2,c.length-2))):c.indexOf(")")>0?l.methods.push(new at(c,"method")):c&&l.members.push(new at(c,"attribute"))}},"addMember"),Mt=u(function(e,i){Array.isArray(i)&&(i.reverse(),i.forEach(a=>ct(e,a)))},"addMembers"),Gt=u(function(e,i){const a={id:`note${ne.length}`,class:i,text:e};ne.push(a)},"addNote"),Ut=u(function(e){return e.startsWith(":")&&(e=e.substring(1)),R(e.trim())},"cleanupLabel"),We=u(function(e,i){e.split(",").forEach(function(a){let l=a;/\d/.exec(a[0])&&(l=Ee+l);const c=g.get(l);c&&(c.cssClasses+=" "+i)})},"setCssClass"),zt=u(function(e,i){for(const a of e){let l=rt.get(a);l===void 0&&(l={id:a,styles:[],textStyles:[]},rt.set(a,l)),i&&i.forEach(function(c){if(/color/.exec(c)){const r=c.replace("fill","bgFill");l.textStyles.push(r)}l.styles.push(c)}),g.forEach(c=>{c.cssClasses.includes(a)&&c.styles.push(...i.flatMap(r=>r.split(",")))})}},"defineClass"),Kt=u(function(e,i){e.split(",").forEach(function(a){i!==void 0&&(g.get(a).tooltip=R(i))})},"setTooltip"),Yt=u(function(e,i){return i&&L.has(i)?L.get(i).classes.get(e).tooltip:g.get(e).tooltip},"getTooltip"),jt=u(function(e,i,a){const l=D();e.split(",").forEach(function(c){let r=c;/\d/.exec(c[0])&&(r=Ee+r);const A=g.get(r);A&&(A.link=Qe.formatUrl(i,l),l.securityLevel==="sandbox"?A.linkTarget="_top":typeof a=="string"?A.linkTarget=R(a):A.linkTarget="_blank")}),We(e,"clickable")},"setLink"),Qt=u(function(e,i,a){e.split(",").forEach(function(l){Wt(l,i,a),g.get(l).haveCallback=!0}),We(e,"clickable")},"setClickEvent"),Wt=u(function(e,i,a){const l=I.sanitizeText(e,D());if(D().securityLevel!=="loose"||i===void 0)return;const r=l;if(g.has(r)){const A=ot(r);let f=[];if(typeof a=="string"){f=a.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let T=0;T")),c.classed("hover",!0)}).on("mouseout",function(){i.transition().duration(500).style("opacity",0),ie(this).classed("hover",!1)})},"setupToolTips");ae.push(ht);var Xe="TB",pt=u(()=>Xe,"getDirection"),Ht=u(e=>{Xe=e},"setDirection"),Jt=u(function(e){L.has(e)||(L.set(e,{id:e,classes:new Map,children:{},domId:Ee+e+"-"+Ye}),Ye++)},"addNamespace"),Zt=u(function(e){return L.get(e)},"getNamespace"),$t=u(function(){return L},"getNamespaces"),es=u(function(e,i){if(L.has(e))for(const a of i){const{className:l}=M(a);g.get(l).parent=e,L.get(e).classes.set(l,g.get(l))}},"addClassesToNamespace"),ts=u(function(e,i){const a=g.get(e);if(!(!i||!a))for(const l of i)l.includes(",")?a.styles.push(...l.split(",")):a.styles.push(l)},"setCssStyle");function je(e){let i;switch(e){case 0:i="aggregation";break;case 1:i="extension";break;case 2:i="composition";break;case 3:i="dependency";break;case 4:i="lollipop";break;default:i="none"}return i}u(je,"getArrowMarker");var ss=u(()=>{var c;const e=[],i=[],a=D();for(const r of L.keys()){const A=L.get(r);if(A){const f={id:A.id,label:A.id,isGroup:!0,padding:a.class.padding??16,shape:"rect",cssStyles:["fill: none","stroke: black"],look:a.look};e.push(f)}}for(const r of g.keys()){const A=g.get(r);if(A){const f=A;f.parentId=A.parent,f.look=a.look,e.push(f)}}let l=0;for(const r of ne){l++;const A={id:r.id,label:r.text,isGroup:!1,shape:"note",padding:a.class.padding??6,cssStyles:["text-align: left","white-space: nowrap",`fill: ${a.themeVariables.noteBkgColor}`,`stroke: ${a.themeVariables.noteBorderColor}`],look:a.look};e.push(A);const f=((c=g.get(r.class))==null?void 0:c.id)??"";if(f){const T={id:`edgeNote${l}`,start:r.id,end:f,type:"normal",thickness:"normal",classes:"relation",arrowTypeStart:"none",arrowTypeEnd:"none",arrowheadStyle:"",labelStyle:[""],style:["fill: none"],pattern:"dotted",look:a.look};i.push(T)}}for(const r of j){const A={id:r.id,label:r.label,isGroup:!1,shape:"rect",cssStyles:["opacity: 0;"],look:a.look};e.push(A)}l=0;for(const r of be){l++;const A={id:St(r.id1,r.id2,{prefix:"id",counter:l}),start:r.id1,end:r.id2,type:"normal",label:r.title,labelpos:"c",thickness:"normal",classes:"relation",arrowTypeStart:je(r.relation.type1),arrowTypeEnd:je(r.relation.type2),startLabelRight:r.relationTitle1==="none"?"":r.relationTitle1,endLabelLeft:r.relationTitle2==="none"?"":r.relationTitle2,arrowheadStyle:"",labelStyle:["display: inline-block"],style:r.style||"",pattern:r.relation.lineType==1?"dashed":"solid",look:a.look};i.push(A)}return{nodes:e,edges:i,other:{},config:a,direction:pt()}},"getData"),cs={setAccTitle:kt,getAccTitle:yt,getAccDescription:Tt,setAccDescription:Ft,getConfig:u(()=>D().class,"getConfig"),addClass:K,bindFunctions:Xt,clear:xt,getClass:It,getClasses:Ot,getNotes:Vt,addAnnotation:Rt,addNote:Gt,getRelations:wt,addRelation:Pt,getDirection:pt,setDirection:Ht,addMember:ct,addMembers:Mt,cleanupLabel:Ut,lineType:qt,relationType:w,setClickEvent:Qt,setCssClass:We,defineClass:zt,setLink:jt,getTooltip:Yt,setTooltip:Kt,lookUpDomId:ot,setDiagramTitle:Dt,getDiagramTitle:_t,setClassLabel:Lt,addNamespace:Jt,addClassesToNamespace:es,getNamespace:Zt,getNamespaces:$t,setCssStyle:ts,getData:ss},is=u(e=>`g.classGroup text { + fill: ${e.nodeBorder||e.classText}; + stroke: none; + font-family: ${e.fontFamily}; + font-size: 10px; + + .title { + font-weight: bolder; + } + +} + +.nodeLabel, .edgeLabel { + color: ${e.classText}; +} +.edgeLabel .label rect { + fill: ${e.mainBkg}; +} +.label text { + fill: ${e.classText}; +} + +.labelBkg { + background: ${e.mainBkg}; +} +.edgeLabel .label span { + background: ${e.mainBkg}; +} + +.classTitle { + font-weight: bolder; +} +.node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${e.mainBkg}; + stroke: ${e.nodeBorder}; + stroke-width: 1px; + } + + +.divider { + stroke: ${e.nodeBorder}; + stroke-width: 1; +} + +g.clickable { + cursor: pointer; +} + +g.classGroup rect { + fill: ${e.mainBkg}; + stroke: ${e.nodeBorder}; +} + +g.classGroup line { + stroke: ${e.nodeBorder}; + stroke-width: 1; +} + +.classLabel .box { + stroke: none; + stroke-width: 0; + fill: ${e.mainBkg}; + opacity: 0.5; +} + +.classLabel .label { + fill: ${e.nodeBorder}; + font-size: 10px; +} + +.relation { + stroke: ${e.lineColor}; + stroke-width: 1; + fill: none; +} + +.dashed-line{ + stroke-dasharray: 3; +} + +.dotted-line{ + stroke-dasharray: 1 2; +} + +#compositionStart, .composition { + fill: ${e.lineColor} !important; + stroke: ${e.lineColor} !important; + stroke-width: 1; +} + +#compositionEnd, .composition { + fill: ${e.lineColor} !important; + stroke: ${e.lineColor} !important; + stroke-width: 1; +} + +#dependencyStart, .dependency { + fill: ${e.lineColor} !important; + stroke: ${e.lineColor} !important; + stroke-width: 1; +} + +#dependencyStart, .dependency { + fill: ${e.lineColor} !important; + stroke: ${e.lineColor} !important; + stroke-width: 1; +} + +#extensionStart, .extension { + fill: transparent !important; + stroke: ${e.lineColor} !important; + stroke-width: 1; +} + +#extensionEnd, .extension { + fill: transparent !important; + stroke: ${e.lineColor} !important; + stroke-width: 1; +} + +#aggregationStart, .aggregation { + fill: transparent !important; + stroke: ${e.lineColor} !important; + stroke-width: 1; +} + +#aggregationEnd, .aggregation { + fill: transparent !important; + stroke: ${e.lineColor} !important; + stroke-width: 1; +} + +#lollipopStart, .lollipop { + fill: ${e.mainBkg} !important; + stroke: ${e.lineColor} !important; + stroke-width: 1; +} + +#lollipopEnd, .lollipop { + fill: ${e.mainBkg} !important; + stroke: ${e.lineColor} !important; + stroke-width: 1; +} + +.edgeTerminals { + font-size: 11px; + line-height: initial; +} + +.classTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${e.textColor}; +} +`,"getStyles"),hs=is,ns=u((e,i="TB")=>{if(!e.doc)return i;let a=i;for(const l of e.doc)l.stmt==="dir"&&(a=l.value);return a},"getDir"),as=u(function(e,i){return i.db.getClasses()},"getClasses"),rs=u(async function(e,i,a,l){ze.info("REF0:"),ze.info("Drawing class diagram (v3)",i);const{securityLevel:c,state:r,layout:A}=D(),f=l.db.getData(),T=mt(i,c);f.type=l.type,f.layoutAlgorithm=vt(A),f.nodeSpacing=(r==null?void 0:r.nodeSpacing)||50,f.rankSpacing=(r==null?void 0:r.rankSpacing)||50,f.markers=["aggregation","extension","composition","dependency","lollipop"],f.diagramId=i,await Nt(f,T);const S=8;Qe.insertTitle(T,"classDiagramTitleText",(r==null?void 0:r.titleTopMargin)??25,l.db.getDiagramTitle()),Et(T,S,"classDiagram",(r==null?void 0:r.useMaxWidth)??!0)},"draw"),ps={getClasses:as,draw:rs,getDir:ns};export{cs as a,ps as b,os as c,hs as s}; diff --git a/assets/chunks/chunk-EICJXIV7.Cx-DrDyu.js b/assets/chunks/chunk-EICJXIV7.Cx-DrDyu.js new file mode 100644 index 000000000..0949ef858 --- /dev/null +++ b/assets/chunks/chunk-EICJXIV7.Cx-DrDyu.js @@ -0,0 +1 @@ +import{_ as n,j as r,k as g,l as d}from"../app.D0Wo8w0i.js";var u=n((t,e)=>{let o;return e==="sandbox"&&(o=r("#i"+t)),(e==="sandbox"?r(o.nodes()[0].contentDocument.body):r("body")).select(`[id="${t}"]`)},"getDiagramElement"),b=n((t,e,o,i)=>{t.attr("class",o);const{width:a,height:s,x:h,y:x}=l(t,e);g(t,s,a,i);const c=w(h,x,a,s,e);t.attr("viewBox",c),d.debug(`viewBox configured: ${c} with padding: ${e}`)},"setupViewPortForSVG"),l=n((t,e)=>{var i;const o=((i=t.node())==null?void 0:i.getBBox())||{width:0,height:0,x:0,y:0};return{width:o.width+e*2,height:o.height+e*2,x:o.x,y:o.y}},"calculateDimensionsWithPadding"),w=n((t,e,o,i,a)=>`${t-a} ${e-a} ${o} ${i}`,"createViewBox");export{u as g,b as s}; diff --git a/assets/chunks/chunk-JZAHL7AJ.Ca2Vb27U.js b/assets/chunks/chunk-JZAHL7AJ.Ca2Vb27U.js new file mode 100644 index 000000000..afc7b1b90 --- /dev/null +++ b/assets/chunks/chunk-JZAHL7AJ.Ca2Vb27U.js @@ -0,0 +1,220 @@ +import{g as De,s as Ce}from"./chunk-EICJXIV7.Cx-DrDyu.js";import{_ as r,e as H,d as x,g as xe,s as Ae,b as Le,c as Ie,q as Re,r as Oe,l as b,A as Ne,v as we,x as $e,a9 as Pe}from"../app.D0Wo8w0i.js";var Ot=function(){var t=r(function($,o,u,n){for(u=u||{},n=$.length;n--;u[$[n]]=o);return u},"o"),e=[1,2],c=[1,3],a=[1,4],d=[2,4],s=[1,9],p=[1,11],g=[1,16],l=[1,17],_=[1,18],v=[1,19],A=[1,32],B=[1,20],Y=[1,21],I=[1,22],f=[1,23],L=[1,24],R=[1,26],F=[1,27],V=[1,28],N=[1,29],w=[1,30],rt=[1,31],at=[1,34],nt=[1,35],lt=[1,36],ot=[1,37],J=[1,33],S=[1,4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,42,45,48,49,50,51,54],ct=[1,4,5,14,15,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,42,45,48,49,50,51,54],Vt=[4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,42,45,48,49,50,51,54],kt={trace:r(function(){},"trace"),yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,SD:6,document:7,line:8,statement:9,classDefStatement:10,styleStatement:11,cssClassStatement:12,idStatement:13,DESCR:14,"-->":15,HIDE_EMPTY:16,scale:17,WIDTH:18,COMPOSIT_STATE:19,STRUCT_START:20,STRUCT_STOP:21,STATE_DESCR:22,AS:23,ID:24,FORK:25,JOIN:26,CHOICE:27,CONCURRENT:28,note:29,notePosition:30,NOTE_TEXT:31,direction:32,acc_title:33,acc_title_value:34,acc_descr:35,acc_descr_value:36,acc_descr_multiline_value:37,classDef:38,CLASSDEF_ID:39,CLASSDEF_STYLEOPTS:40,DEFAULT:41,style:42,STYLE_IDS:43,STYLEDEF_STYLEOPTS:44,class:45,CLASSENTITY_IDS:46,STYLECLASS:47,direction_tb:48,direction_bt:49,direction_rl:50,direction_lr:51,eol:52,";":53,EDGE_STATE:54,STYLE_SEPARATOR:55,left_of:56,right_of:57,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",6:"SD",14:"DESCR",15:"-->",16:"HIDE_EMPTY",17:"scale",18:"WIDTH",19:"COMPOSIT_STATE",20:"STRUCT_START",21:"STRUCT_STOP",22:"STATE_DESCR",23:"AS",24:"ID",25:"FORK",26:"JOIN",27:"CHOICE",28:"CONCURRENT",29:"note",31:"NOTE_TEXT",33:"acc_title",34:"acc_title_value",35:"acc_descr",36:"acc_descr_value",37:"acc_descr_multiline_value",38:"classDef",39:"CLASSDEF_ID",40:"CLASSDEF_STYLEOPTS",41:"DEFAULT",42:"style",43:"STYLE_IDS",44:"STYLEDEF_STYLEOPTS",45:"class",46:"CLASSENTITY_IDS",47:"STYLECLASS",48:"direction_tb",49:"direction_bt",50:"direction_rl",51:"direction_lr",53:";",54:"EDGE_STATE",55:"STYLE_SEPARATOR",56:"left_of",57:"right_of"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[9,1],[9,1],[9,1],[9,1],[9,2],[9,3],[9,4],[9,1],[9,2],[9,1],[9,4],[9,3],[9,6],[9,1],[9,1],[9,1],[9,1],[9,4],[9,4],[9,1],[9,2],[9,2],[9,1],[10,3],[10,3],[11,3],[12,3],[32,1],[32,1],[32,1],[32,1],[52,1],[52,1],[13,1],[13,1],[13,3],[13,3],[30,1],[30,1]],performAction:r(function(o,u,n,y,T,i,q){var h=i.length-1;switch(T){case 3:return y.setRootDoc(i[h]),i[h];case 4:this.$=[];break;case 5:i[h]!="nl"&&(i[h-1].push(i[h]),this.$=i[h-1]);break;case 6:case 7:this.$=i[h];break;case 8:this.$="nl";break;case 12:this.$=i[h];break;case 13:const Q=i[h-1];Q.description=y.trimColon(i[h]),this.$=Q;break;case 14:this.$={stmt:"relation",state1:i[h-2],state2:i[h]};break;case 15:const Dt=y.trimColon(i[h]);this.$={stmt:"relation",state1:i[h-3],state2:i[h-1],description:Dt};break;case 19:this.$={stmt:"state",id:i[h-3],type:"default",description:"",doc:i[h-1]};break;case 20:var M=i[h],W=i[h-2].trim();if(i[h].match(":")){var ht=i[h].split(":");M=ht[0],W=[W,ht[1]]}this.$={stmt:"state",id:M,type:"default",description:W};break;case 21:this.$={stmt:"state",id:i[h-3],type:"default",description:i[h-5],doc:i[h-1]};break;case 22:this.$={stmt:"state",id:i[h],type:"fork"};break;case 23:this.$={stmt:"state",id:i[h],type:"join"};break;case 24:this.$={stmt:"state",id:i[h],type:"choice"};break;case 25:this.$={stmt:"state",id:y.getDividerId(),type:"divider"};break;case 26:this.$={stmt:"state",id:i[h-1].trim(),note:{position:i[h-2].trim(),text:i[h].trim()}};break;case 29:this.$=i[h].trim(),y.setAccTitle(this.$);break;case 30:case 31:this.$=i[h].trim(),y.setAccDescription(this.$);break;case 32:case 33:this.$={stmt:"classDef",id:i[h-1].trim(),classes:i[h].trim()};break;case 34:this.$={stmt:"style",id:i[h-1].trim(),styleClass:i[h].trim()};break;case 35:this.$={stmt:"applyClass",id:i[h-1].trim(),styleClass:i[h].trim()};break;case 36:y.setDirection("TB"),this.$={stmt:"dir",value:"TB"};break;case 37:y.setDirection("BT"),this.$={stmt:"dir",value:"BT"};break;case 38:y.setDirection("RL"),this.$={stmt:"dir",value:"RL"};break;case 39:y.setDirection("LR"),this.$={stmt:"dir",value:"LR"};break;case 42:case 43:this.$={stmt:"state",id:i[h].trim(),type:"default",description:""};break;case 44:this.$={stmt:"state",id:i[h-2].trim(),classes:[i[h].trim()],type:"default",description:""};break;case 45:this.$={stmt:"state",id:i[h-2].trim(),classes:[i[h].trim()],type:"default",description:""};break}},"anonymous"),table:[{3:1,4:e,5:c,6:a},{1:[3]},{3:5,4:e,5:c,6:a},{3:6,4:e,5:c,6:a},t([1,4,5,16,17,19,22,24,25,26,27,28,29,33,35,37,38,42,45,48,49,50,51,54],d,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:s,5:p,8:8,9:10,10:12,11:13,12:14,13:15,16:g,17:l,19:_,22:v,24:A,25:B,26:Y,27:I,28:f,29:L,32:25,33:R,35:F,37:V,38:N,42:w,45:rt,48:at,49:nt,50:lt,51:ot,54:J},t(S,[2,5]),{9:38,10:12,11:13,12:14,13:15,16:g,17:l,19:_,22:v,24:A,25:B,26:Y,27:I,28:f,29:L,32:25,33:R,35:F,37:V,38:N,42:w,45:rt,48:at,49:nt,50:lt,51:ot,54:J},t(S,[2,7]),t(S,[2,8]),t(S,[2,9]),t(S,[2,10]),t(S,[2,11]),t(S,[2,12],{14:[1,39],15:[1,40]}),t(S,[2,16]),{18:[1,41]},t(S,[2,18],{20:[1,42]}),{23:[1,43]},t(S,[2,22]),t(S,[2,23]),t(S,[2,24]),t(S,[2,25]),{30:44,31:[1,45],56:[1,46],57:[1,47]},t(S,[2,28]),{34:[1,48]},{36:[1,49]},t(S,[2,31]),{39:[1,50],41:[1,51]},{43:[1,52]},{46:[1,53]},t(ct,[2,42],{55:[1,54]}),t(ct,[2,43],{55:[1,55]}),t(S,[2,36]),t(S,[2,37]),t(S,[2,38]),t(S,[2,39]),t(S,[2,6]),t(S,[2,13]),{13:56,24:A,54:J},t(S,[2,17]),t(Vt,d,{7:57}),{24:[1,58]},{24:[1,59]},{23:[1,60]},{24:[2,46]},{24:[2,47]},t(S,[2,29]),t(S,[2,30]),{40:[1,61]},{40:[1,62]},{44:[1,63]},{47:[1,64]},{24:[1,65]},{24:[1,66]},t(S,[2,14],{14:[1,67]}),{4:s,5:p,8:8,9:10,10:12,11:13,12:14,13:15,16:g,17:l,19:_,21:[1,68],22:v,24:A,25:B,26:Y,27:I,28:f,29:L,32:25,33:R,35:F,37:V,38:N,42:w,45:rt,48:at,49:nt,50:lt,51:ot,54:J},t(S,[2,20],{20:[1,69]}),{31:[1,70]},{24:[1,71]},t(S,[2,32]),t(S,[2,33]),t(S,[2,34]),t(S,[2,35]),t(ct,[2,44]),t(ct,[2,45]),t(S,[2,15]),t(S,[2,19]),t(Vt,d,{7:72}),t(S,[2,26]),t(S,[2,27]),{4:s,5:p,8:8,9:10,10:12,11:13,12:14,13:15,16:g,17:l,19:_,21:[1,73],22:v,24:A,25:B,26:Y,27:I,28:f,29:L,32:25,33:R,35:F,37:V,38:N,42:w,45:rt,48:at,49:nt,50:lt,51:ot,54:J},t(S,[2,21])],defaultActions:{5:[2,1],6:[2,2],46:[2,46],47:[2,47]},parseError:r(function(o,u){if(u.recoverable)this.trace(o);else{var n=new Error(o);throw n.hash=u,n}},"parseError"),parse:r(function(o){var u=this,n=[0],y=[],T=[null],i=[],q=this.table,h="",M=0,W=0,ht=2,Q=1,Dt=i.slice.call(arguments,1),E=Object.create(this.lexer),U={yy:{}};for(var Ct in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Ct)&&(U.yy[Ct]=this.yy[Ct]);E.setInput(o,U.yy),U.yy.lexer=E,U.yy.parser=this,typeof E.yylloc>"u"&&(E.yylloc={});var xt=E.yylloc;i.push(xt);var me=E.options&&E.options.ranges;typeof U.yy.parseError=="function"?this.parseError=U.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ke(D){n.length=n.length-2*D,T.length=T.length-D,i.length=i.length-D}r(ke,"popStack");function Mt(){var D;return D=y.pop()||E.lex()||Q,typeof D!="number"&&(D instanceof Array&&(y=D,D=y.pop()),D=u.symbols_[D]||D),D}r(Mt,"lex");for(var m,j,C,At,X={},dt,O,Ut,ft;;){if(j=n[n.length-1],this.defaultActions[j]?C=this.defaultActions[j]:((m===null||typeof m>"u")&&(m=Mt()),C=q[j]&&q[j][m]),typeof C>"u"||!C.length||!C[0]){var Lt="";ft=[];for(dt in q[j])this.terminals_[dt]&&dt>ht&&ft.push("'"+this.terminals_[dt]+"'");E.showPosition?Lt="Parse error on line "+(M+1)+`: +`+E.showPosition()+` +Expecting `+ft.join(", ")+", got '"+(this.terminals_[m]||m)+"'":Lt="Parse error on line "+(M+1)+": Unexpected "+(m==Q?"end of input":"'"+(this.terminals_[m]||m)+"'"),this.parseError(Lt,{text:E.match,token:this.terminals_[m]||m,line:E.yylineno,loc:xt,expected:ft})}if(C[0]instanceof Array&&C.length>1)throw new Error("Parse Error: multiple actions possible at state: "+j+", token: "+m);switch(C[0]){case 1:n.push(m),T.push(E.yytext),i.push(E.yylloc),n.push(C[1]),m=null,W=E.yyleng,h=E.yytext,M=E.yylineno,xt=E.yylloc;break;case 2:if(O=this.productions_[C[1]][1],X.$=T[T.length-O],X._$={first_line:i[i.length-(O||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(O||1)].first_column,last_column:i[i.length-1].last_column},me&&(X._$.range=[i[i.length-(O||1)].range[0],i[i.length-1].range[1]]),At=this.performAction.apply(X,[h,W,M,U.yy,C[1],T,i].concat(Dt)),typeof At<"u")return At;O&&(n=n.slice(0,-1*O*2),T=T.slice(0,-1*O),i=i.slice(0,-1*O)),n.push(this.productions_[C[1]][0]),T.push(X.$),i.push(X._$),Ut=q[n[n.length-2]][n[n.length-1]],n.push(Ut);break;case 3:return!0}}return!0},"parse")},be=function(){var $={EOF:1,parseError:r(function(u,n){if(this.yy.parser)this.yy.parser.parseError(u,n);else throw new Error(u)},"parseError"),setInput:r(function(o,u){return this.yy=u||this.yy||{},this._input=o,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:r(function(){var o=this._input[0];this.yytext+=o,this.yyleng++,this.offset++,this.match+=o,this.matched+=o;var u=o.match(/(?:\r\n?|\n).*/g);return u?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),o},"input"),unput:r(function(o){var u=o.length,n=o.split(/(?:\r\n?|\n)/g);this._input=o+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-u),this.offset-=u;var y=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var T=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===y.length?this.yylloc.first_column:0)+y[y.length-n.length].length-n[0].length:this.yylloc.first_column-u},this.options.ranges&&(this.yylloc.range=[T[0],T[0]+this.yyleng-u]),this.yyleng=this.yytext.length,this},"unput"),more:r(function(){return this._more=!0,this},"more"),reject:r(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:r(function(o){this.unput(this.match.slice(o))},"less"),pastInput:r(function(){var o=this.matched.substr(0,this.matched.length-this.match.length);return(o.length>20?"...":"")+o.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:r(function(){var o=this.match;return o.length<20&&(o+=this._input.substr(0,20-o.length)),(o.substr(0,20)+(o.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:r(function(){var o=this.pastInput(),u=new Array(o.length+1).join("-");return o+this.upcomingInput()+` +`+u+"^"},"showPosition"),test_match:r(function(o,u){var n,y,T;if(this.options.backtrack_lexer&&(T={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(T.yylloc.range=this.yylloc.range.slice(0))),y=o[0].match(/(?:\r\n?|\n).*/g),y&&(this.yylineno+=y.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:y?y[y.length-1].length-y[y.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+o[0].length},this.yytext+=o[0],this.match+=o[0],this.matches=o,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(o[0].length),this.matched+=o[0],n=this.performAction.call(this,this.yy,this,u,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var i in T)this[i]=T[i];return!1}return!1},"test_match"),next:r(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var o,u,n,y;this._more||(this.yytext="",this.match="");for(var T=this._currentRules(),i=0;iu[0].length)){if(u=n,y=i,this.options.backtrack_lexer){if(o=this.test_match(n,T[i]),o!==!1)return o;if(this._backtrack){u=!1;continue}else return!1}else if(!this.options.flex)break}return u?(o=this.test_match(u,T[y]),o!==!1?o:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:r(function(){var u=this.next();return u||this.lex()},"lex"),begin:r(function(u){this.conditionStack.push(u)},"begin"),popState:r(function(){var u=this.conditionStack.length-1;return u>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:r(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:r(function(u){return u=this.conditionStack.length-1-Math.abs(u||0),u>=0?this.conditionStack[u]:"INITIAL"},"topState"),pushState:r(function(u){this.begin(u)},"pushState"),stateStackSize:r(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:r(function(u,n,y,T){switch(y){case 0:return 41;case 1:return 48;case 2:return 49;case 3:return 50;case 4:return 51;case 5:break;case 6:break;case 7:return 5;case 8:break;case 9:break;case 10:break;case 11:break;case 12:return this.pushState("SCALE"),17;case 13:return 18;case 14:this.popState();break;case 15:return this.begin("acc_title"),33;case 16:return this.popState(),"acc_title_value";case 17:return this.begin("acc_descr"),35;case 18:return this.popState(),"acc_descr_value";case 19:this.begin("acc_descr_multiline");break;case 20:this.popState();break;case 21:return"acc_descr_multiline_value";case 22:return this.pushState("CLASSDEF"),38;case 23:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";case 24:return this.popState(),this.pushState("CLASSDEFID"),39;case 25:return this.popState(),40;case 26:return this.pushState("CLASS"),45;case 27:return this.popState(),this.pushState("CLASS_STYLE"),46;case 28:return this.popState(),47;case 29:return this.pushState("STYLE"),42;case 30:return this.popState(),this.pushState("STYLEDEF_STYLES"),43;case 31:return this.popState(),44;case 32:return this.pushState("SCALE"),17;case 33:return 18;case 34:this.popState();break;case 35:this.pushState("STATE");break;case 36:return this.popState(),n.yytext=n.yytext.slice(0,-8).trim(),25;case 37:return this.popState(),n.yytext=n.yytext.slice(0,-8).trim(),26;case 38:return this.popState(),n.yytext=n.yytext.slice(0,-10).trim(),27;case 39:return this.popState(),n.yytext=n.yytext.slice(0,-8).trim(),25;case 40:return this.popState(),n.yytext=n.yytext.slice(0,-8).trim(),26;case 41:return this.popState(),n.yytext=n.yytext.slice(0,-10).trim(),27;case 42:return 48;case 43:return 49;case 44:return 50;case 45:return 51;case 46:this.pushState("STATE_STRING");break;case 47:return this.pushState("STATE_ID"),"AS";case 48:return this.popState(),"ID";case 49:this.popState();break;case 50:return"STATE_DESCR";case 51:return 19;case 52:this.popState();break;case 53:return this.popState(),this.pushState("struct"),20;case 54:break;case 55:return this.popState(),21;case 56:break;case 57:return this.begin("NOTE"),29;case 58:return this.popState(),this.pushState("NOTE_ID"),56;case 59:return this.popState(),this.pushState("NOTE_ID"),57;case 60:this.popState(),this.pushState("FLOATING_NOTE");break;case 61:return this.popState(),this.pushState("FLOATING_NOTE_ID"),"AS";case 62:break;case 63:return"NOTE_TEXT";case 64:return this.popState(),"ID";case 65:return this.popState(),this.pushState("NOTE_TEXT"),24;case 66:return this.popState(),n.yytext=n.yytext.substr(2).trim(),31;case 67:return this.popState(),n.yytext=n.yytext.slice(0,-8).trim(),31;case 68:return 6;case 69:return 6;case 70:return 16;case 71:return 54;case 72:return 24;case 73:return n.yytext=n.yytext.trim(),14;case 74:return 15;case 75:return 28;case 76:return 55;case 77:return 5;case 78:return"INVALID"}},"anonymous"),rules:[/^(?:default\b)/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:[\s]+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:classDef\s+)/i,/^(?:DEFAULT\s+)/i,/^(?:\w+\s+)/i,/^(?:[^\n]*)/i,/^(?:class\s+)/i,/^(?:(\w+)+((,\s*\w+)*))/i,/^(?:[^\n]*)/i,/^(?:style\s+)/i,/^(?:[\w,]+\s+)/i,/^(?:[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:state\s+)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*\[\[fork\]\])/i,/^(?:.*\[\[join\]\])/i,/^(?:.*\[\[choice\]\])/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:["])/i,/^(?:\s*as\s+)/i,/^(?:[^\n\{]*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n\s\{]+)/i,/^(?:\n)/i,/^(?:\{)/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:\})/i,/^(?:[\n])/i,/^(?:note\s+)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:")/i,/^(?:\s*as\s*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n]*)/i,/^(?:\s*[^:\n\s\-]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:[\s\S]*?end note\b)/i,/^(?:stateDiagram\s+)/i,/^(?:stateDiagram-v2\s+)/i,/^(?:hide empty description\b)/i,/^(?:\[\*\])/i,/^(?:[^:\n\s\-\{]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:-->)/i,/^(?:--)/i,/^(?::::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{LINE:{rules:[9,10],inclusive:!1},struct:{rules:[9,10,22,26,29,35,42,43,44,45,54,55,56,57,71,72,73,74,75],inclusive:!1},FLOATING_NOTE_ID:{rules:[64],inclusive:!1},FLOATING_NOTE:{rules:[61,62,63],inclusive:!1},NOTE_TEXT:{rules:[66,67],inclusive:!1},NOTE_ID:{rules:[65],inclusive:!1},NOTE:{rules:[58,59,60],inclusive:!1},STYLEDEF_STYLEOPTS:{rules:[],inclusive:!1},STYLEDEF_STYLES:{rules:[31],inclusive:!1},STYLE_IDS:{rules:[],inclusive:!1},STYLE:{rules:[30],inclusive:!1},CLASS_STYLE:{rules:[28],inclusive:!1},CLASS:{rules:[27],inclusive:!1},CLASSDEFID:{rules:[25],inclusive:!1},CLASSDEF:{rules:[23,24],inclusive:!1},acc_descr_multiline:{rules:[20,21],inclusive:!1},acc_descr:{rules:[18],inclusive:!1},acc_title:{rules:[16],inclusive:!1},SCALE:{rules:[13,14,33,34],inclusive:!1},ALIAS:{rules:[],inclusive:!1},STATE_ID:{rules:[48],inclusive:!1},STATE_STRING:{rules:[49,50],inclusive:!1},FORK_STATE:{rules:[],inclusive:!1},STATE:{rules:[9,10,36,37,38,39,40,41,46,47,51,52,53],inclusive:!1},ID:{rules:[9,10],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,10,11,12,15,17,19,22,26,29,32,35,53,57,68,69,70,71,72,73,74,76,77,78],inclusive:!0}}};return $}();kt.lexer=be;function ut(){this.yy={}}return r(ut,"Parser"),ut.prototype=kt,kt.Parser=ut,new ut}();Ot.parser=Ot;var As=Ot,Ge="LR",qt="TB",_t="state",wt="relation",Be="classDef",Ye="style",Fe="applyClass",st="default",Qt="divider",Zt="fill:none",te="fill: #333",ee="c",se="text",ie="normal",It="rect",Rt="rectWithTitle",Ve="stateStart",Me="stateEnd",jt="divider",Ht="roundedWithTitle",Ue="note",je="noteGroup",it="statediagram",He="state",ze=`${it}-${He}`,re="transition",We="note",Xe="note-edge",Ke=`${re} ${Xe}`,Je=`${it}-${We}`,qe="cluster",Qe=`${it}-${qe}`,Ze="cluster-alt",ts=`${it}-${Ze}`,ae="parent",ne="note",es="state",$t="----",ss=`${$t}${ne}`,zt=`${$t}${ae}`,le=r((t,e=qt)=>{if(!t.doc)return e;let c=e;for(const a of t.doc)a.stmt==="dir"&&(c=a.value);return c},"getDir"),is=r(function(t,e){return e.db.extract(e.db.getRootDocV2()),e.db.getClasses()},"getClasses"),rs=r(async function(t,e,c,a){b.info("REF0:"),b.info("Drawing state diagram (v2)",e);const{securityLevel:d,state:s,layout:p}=x();a.db.extract(a.db.getRootDocV2());const g=a.db.getData(),l=De(e,d);g.type=a.type,g.layoutAlgorithm=p,g.nodeSpacing=(s==null?void 0:s.nodeSpacing)||50,g.rankSpacing=(s==null?void 0:s.rankSpacing)||50,g.markers=["barb"],g.diagramId=e,await Ne(g,l);const _=8;we.insertTitle(l,"statediagramTitleText",(s==null?void 0:s.titleTopMargin)??25,a.db.getDiagramTitle()),Ce(l,_,it,(s==null?void 0:s.useMaxWidth)??!0)},"draw"),Ls={getClasses:is,draw:rs,getDir:le},St=new Map,P=0;function yt(t="",e=0,c="",a=$t){const d=c!==null&&c.length>0?`${a}${c}`:"";return`${es}-${t}${d}-${e}`}r(yt,"stateDomId");var as=r((t,e,c,a,d,s,p,g)=>{b.trace("items",e),e.forEach(l=>{switch(l.stmt){case _t:tt(t,l,c,a,d,s,p,g);break;case st:tt(t,l,c,a,d,s,p,g);break;case wt:{tt(t,l.state1,c,a,d,s,p,g),tt(t,l.state2,c,a,d,s,p,g);const _={id:"edge"+P,start:l.state1.id,end:l.state2.id,arrowhead:"normal",arrowTypeEnd:"arrow_barb",style:Zt,labelStyle:"",label:H.sanitizeText(l.description,x()),arrowheadStyle:te,labelpos:ee,labelType:se,thickness:ie,classes:re,look:p};d.push(_),P++}break}})},"setupDoc"),Wt=r((t,e=qt)=>{let c=e;if(t.doc)for(const a of t.doc)a.stmt==="dir"&&(c=a.value);return c},"getDir");function Z(t,e,c){if(!e.id||e.id===""||e.id==="")return;e.cssClasses&&(Array.isArray(e.cssCompiledStyles)||(e.cssCompiledStyles=[]),e.cssClasses.split(" ").forEach(d=>{if(c.get(d)){const s=c.get(d);e.cssCompiledStyles=[...e.cssCompiledStyles,...s.styles]}}));const a=t.find(d=>d.id===e.id);a?Object.assign(a,e):t.push(e)}r(Z,"insertOrUpdateNode");function oe(t){var e;return((e=t==null?void 0:t.classes)==null?void 0:e.join(" "))??""}r(oe,"getClassesFromDbInfo");function ce(t){return(t==null?void 0:t.styles)??[]}r(ce,"getStylesFromDbInfo");var tt=r((t,e,c,a,d,s,p,g)=>{var B,Y;const l=e.id,_=c.get(l),v=oe(_),A=ce(_);if(b.info("dataFetcher parsedItem",e,_,A),l!=="root"){let I=It;e.start===!0?I=Ve:e.start===!1&&(I=Me),e.type!==st&&(I=e.type),St.get(l)||St.set(l,{id:l,shape:I,description:H.sanitizeText(l,x()),cssClasses:`${v} ${ze}`,cssStyles:A});const f=St.get(l);e.description&&(Array.isArray(f.description)?(f.shape=Rt,f.description.push(e.description)):((B=f.description)==null?void 0:B.length)>0?(f.shape=Rt,f.description===l?f.description=[e.description]:f.description=[f.description,e.description]):(f.shape=It,f.description=e.description),f.description=H.sanitizeTextOrArray(f.description,x())),((Y=f.description)==null?void 0:Y.length)===1&&f.shape===Rt&&(f.type==="group"?f.shape=Ht:f.shape=It),!f.type&&e.doc&&(b.info("Setting cluster for XCX",l,Wt(e)),f.type="group",f.isGroup=!0,f.dir=Wt(e),f.shape=e.type===Qt?jt:Ht,f.cssClasses=`${f.cssClasses} ${Qe} ${s?ts:""}`);const L={labelStyle:"",shape:f.shape,label:f.description,cssClasses:f.cssClasses,cssCompiledStyles:[],cssStyles:f.cssStyles,id:l,dir:f.dir,domId:yt(l,P),type:f.type,isGroup:f.type==="group",padding:8,rx:10,ry:10,look:p};if(L.shape===jt&&(L.label=""),t&&t.id!=="root"&&(b.trace("Setting node ",l," to be child of its parent ",t.id),L.parentId=t.id),L.centerLabel=!0,e.note){const R={labelStyle:"",shape:Ue,label:e.note.text,cssClasses:Je,cssStyles:[],cssCompilesStyles:[],id:l+ss+"-"+P,domId:yt(l,P,ne),type:f.type,isGroup:f.type==="group",padding:x().flowchart.padding,look:p,position:e.note.position},F=l+zt,V={labelStyle:"",shape:je,label:e.note.text,cssClasses:f.cssClasses,cssStyles:[],id:l+zt,domId:yt(l,P,ae),type:"group",isGroup:!0,padding:16,look:p,position:e.note.position};P++,V.id=F,R.parentId=F,Z(a,V,g),Z(a,R,g),Z(a,L,g);let N=l,w=R.id;e.note.position==="left of"&&(N=R.id,w=l),d.push({id:N+"-"+w,start:N,end:w,arrowhead:"none",arrowTypeEnd:"",style:Zt,labelStyle:"",classes:Ke,arrowheadStyle:te,labelpos:ee,labelType:se,thickness:ie,look:p})}else Z(a,L,g)}e.doc&&(b.trace("Adding nodes children "),as(e,e.doc,c,a,d,!s,p,g))},"dataFetcher"),ns=r(()=>{St.clear(),P=0},"reset"),Pt="[*]",ue="start",he=Pt,de="end",Xt="color",Kt="fill",ls="bgFill",os=",";function Gt(){return new Map}r(Gt,"newClassesList");var Tt=[],Bt=[],fe=Ge,Et=[],K=Gt(),pe=r(()=>({relations:[],states:new Map,documents:{}}),"newDoc"),vt={root:pe()},k=vt.root,et=0,Jt=0,cs={LINE:0,DOTTED_LINE:1},us={AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3},pt=r(t=>JSON.parse(JSON.stringify(t)),"clone"),hs=r(t=>{b.info("Setting root doc",t),Et=t},"setRootDoc"),ds=r(()=>Et,"getRootDoc"),gt=r((t,e,c)=>{if(e.stmt===wt)gt(t,e.state1,!0),gt(t,e.state2,!1);else if(e.stmt===_t&&(e.id==="[*]"?(e.id=c?t.id+"_start":t.id+"_end",e.start=c):e.id=e.id.trim()),e.doc){const a=[];let d=[],s;for(s=0;s0&&d.length>0){const p={stmt:_t,id:Pe(),type:"divider",doc:pt(d)};a.push(pt(p)),e.doc=a}e.doc.forEach(p=>gt(e,p,!0))}},"docTranslator"),Yt=r(()=>(gt({id:"root"},{id:"root",doc:Et},!0),{id:"root",doc:Et}),"getRootDocV2"),fs=r(t=>{let e;t.doc?e=t.doc:e=t,b.info(e),Se(!0),b.info("Extract initial document:",e),e.forEach(s=>{switch(b.warn("Statement",s.stmt),s.stmt){case _t:G(s.id.trim(),s.type,s.doc,s.description,s.note,s.classes,s.styles,s.textStyles);break;case wt:Ee(s.state1,s.state2,s.description);break;case Be:ve(s.id.trim(),s.classes);break;case Ye:{const p=s.id.trim().split(","),g=s.styleClass.split(",");p.forEach(l=>{let _=z(l);if(_===void 0){const v=l.trim();G(v),_=z(v)}_.styles=g.map(v=>{var A;return(A=v.replace(/;/g,""))==null?void 0:A.trim()})})}break;case Fe:Ft(s.id.trim(),s.styleClass);break}});const c=ye(),d=x().look;ns(),tt(void 0,Yt(),c,Tt,Bt,!0,d,K),Tt.forEach(s=>{if(Array.isArray(s.label)){if(s.description=s.label.slice(1),s.isGroup&&s.description.length>0)throw new Error("Group nodes can only have label. Remove the additional description for node ["+s.id+"]");s.label=s.label[0]}})},"extract"),G=r(function(t,e=st,c=null,a=null,d=null,s=null,p=null,g=null){const l=t==null?void 0:t.trim();if(k.states.has(l)?(k.states.get(l).doc||(k.states.get(l).doc=c),k.states.get(l).type||(k.states.get(l).type=e)):(b.info("Adding state ",l,a),k.states.set(l,{id:l,descriptions:[],type:e,doc:c,note:d,classes:[],styles:[],textStyles:[]})),a&&(b.info("Setting state description",l,a),typeof a=="string"&&Nt(l,a.trim()),typeof a=="object"&&a.forEach(_=>Nt(l,_.trim()))),d){const _=k.states.get(l);_.note=d,_.note.text=H.sanitizeText(_.note.text,x())}s&&(b.info("Setting state classes",l,s),(typeof s=="string"?[s]:s).forEach(v=>Ft(l,v.trim()))),p&&(b.info("Setting state styles",l,p),(typeof p=="string"?[p]:p).forEach(v=>Ts(l,v.trim()))),g&&(b.info("Setting state styles",l,p),(typeof g=="string"?[g]:g).forEach(v=>Es(l,v.trim())))},"addState"),Se=r(function(t){Tt=[],Bt=[],vt={root:pe()},k=vt.root,et=0,K=Gt(),t||$e()},"clear"),z=r(function(t){return k.states.get(t)},"getState"),ye=r(function(){return k.states},"getStates"),ps=r(function(){b.info("Documents = ",vt)},"logDocuments"),Ss=r(function(){return k.relations},"getRelations");function bt(t=""){let e=t;return t===Pt&&(et++,e=`${ue}${et}`),e}r(bt,"startIdIfNeeded");function mt(t="",e=st){return t===Pt?ue:e}r(mt,"startTypeIfNeeded");function ge(t=""){let e=t;return t===he&&(et++,e=`${de}${et}`),e}r(ge,"endIdIfNeeded");function _e(t="",e=st){return t===he?de:e}r(_e,"endTypeIfNeeded");function Te(t,e,c){let a=bt(t.id.trim()),d=mt(t.id.trim(),t.type),s=bt(e.id.trim()),p=mt(e.id.trim(),e.type);G(a,d,t.doc,t.description,t.note,t.classes,t.styles,t.textStyles),G(s,p,e.doc,e.description,e.note,e.classes,e.styles,e.textStyles),k.relations.push({id1:a,id2:s,relationTitle:H.sanitizeText(c,x())})}r(Te,"addRelationObjs");var Ee=r(function(t,e,c){if(typeof t=="object")Te(t,e,c);else{const a=bt(t.trim()),d=mt(t),s=ge(e.trim()),p=_e(e);G(a,d),G(s,p),k.relations.push({id1:a,id2:s,title:H.sanitizeText(c,x())})}},"addRelation"),Nt=r(function(t,e){const c=k.states.get(t),a=e.startsWith(":")?e.replace(":","").trim():e;c.descriptions.push(H.sanitizeText(a,x()))},"addDescription"),ys=r(function(t){return t.substring(0,1)===":"?t.substr(2).trim():t.trim()},"cleanupLabel"),gs=r(()=>(Jt++,"divider-id-"+Jt),"getDividerId"),ve=r(function(t,e=""){K.has(t)||K.set(t,{id:t,styles:[],textStyles:[]});const c=K.get(t);e!=null&&e.split(os).forEach(a=>{const d=a.replace(/([^;]*);/,"$1").trim();if(RegExp(Xt).exec(a)){const p=d.replace(Kt,ls).replace(Xt,Kt);c.textStyles.push(p)}c.styles.push(d)})},"addStyleClass"),_s=r(function(){return K},"getClasses"),Ft=r(function(t,e){t.split(",").forEach(function(c){let a=z(c);if(a===void 0){const d=c.trim();G(d),a=z(d)}a.classes.push(e)})},"setCssClass"),Ts=r(function(t,e){const c=z(t);c!==void 0&&c.styles.push(e)},"setStyle"),Es=r(function(t,e){const c=z(t);c!==void 0&&c.textStyles.push(e)},"setTextStyle"),vs=r(()=>fe,"getDirection"),bs=r(t=>{fe=t},"setDirection"),ms=r(t=>t&&t[0]===":"?t.substr(1).trim():t.trim(),"trimColon"),ks=r(()=>{const t=x();return{nodes:Tt,edges:Bt,other:{},config:t,direction:le(Yt())}},"getData"),Is={getConfig:r(()=>x().state,"getConfig"),getData:ks,addState:G,clear:Se,getState:z,getStates:ye,getRelations:Ss,getClasses:_s,getDirection:vs,addRelation:Ee,getDividerId:gs,setDirection:bs,cleanupLabel:ys,lineType:cs,relationType:us,logDocuments:ps,getRootDoc:ds,setRootDoc:hs,getRootDocV2:Yt,extract:fs,trimColon:ms,getAccTitle:xe,setAccTitle:Ae,getAccDescription:Le,setAccDescription:Ie,addStyleClass:ve,setCssClass:Ft,addDescription:Nt,setDiagramTitle:Re,getDiagramTitle:Oe},Ds=r(t=>` +defs #statediagram-barbEnd { + fill: ${t.transitionColor}; + stroke: ${t.transitionColor}; + } +g.stateGroup text { + fill: ${t.nodeBorder}; + stroke: none; + font-size: 10px; +} +g.stateGroup text { + fill: ${t.textColor}; + stroke: none; + font-size: 10px; + +} +g.stateGroup .state-title { + font-weight: bolder; + fill: ${t.stateLabelColor}; +} + +g.stateGroup rect { + fill: ${t.mainBkg}; + stroke: ${t.nodeBorder}; +} + +g.stateGroup line { + stroke: ${t.lineColor}; + stroke-width: 1; +} + +.transition { + stroke: ${t.transitionColor}; + stroke-width: 1; + fill: none; +} + +.stateGroup .composit { + fill: ${t.background}; + border-bottom: 1px +} + +.stateGroup .alt-composit { + fill: #e0e0e0; + border-bottom: 1px +} + +.state-note { + stroke: ${t.noteBorderColor}; + fill: ${t.noteBkgColor}; + + text { + fill: ${t.noteTextColor}; + stroke: none; + font-size: 10px; + } +} + +.stateLabel .box { + stroke: none; + stroke-width: 0; + fill: ${t.mainBkg}; + opacity: 0.5; +} + +.edgeLabel .label rect { + fill: ${t.labelBackgroundColor}; + opacity: 0.5; +} +.edgeLabel { + background-color: ${t.edgeLabelBackground}; + p { + background-color: ${t.edgeLabelBackground}; + } + rect { + opacity: 0.5; + background-color: ${t.edgeLabelBackground}; + fill: ${t.edgeLabelBackground}; + } + text-align: center; +} +.edgeLabel .label text { + fill: ${t.transitionLabelColor||t.tertiaryTextColor}; +} +.label div .edgeLabel { + color: ${t.transitionLabelColor||t.tertiaryTextColor}; +} + +.stateLabel text { + fill: ${t.stateLabelColor}; + font-size: 10px; + font-weight: bold; +} + +.node circle.state-start { + fill: ${t.specialStateColor}; + stroke: ${t.specialStateColor}; +} + +.node .fork-join { + fill: ${t.specialStateColor}; + stroke: ${t.specialStateColor}; +} + +.node circle.state-end { + fill: ${t.innerEndBackground}; + stroke: ${t.background}; + stroke-width: 1.5 +} +.end-state-inner { + fill: ${t.compositeBackground||t.background}; + // stroke: ${t.background}; + stroke-width: 1.5 +} + +.node rect { + fill: ${t.stateBkg||t.mainBkg}; + stroke: ${t.stateBorder||t.nodeBorder}; + stroke-width: 1px; +} +.node polygon { + fill: ${t.mainBkg}; + stroke: ${t.stateBorder||t.nodeBorder};; + stroke-width: 1px; +} +#statediagram-barbEnd { + fill: ${t.lineColor}; +} + +.statediagram-cluster rect { + fill: ${t.compositeTitleBackground}; + stroke: ${t.stateBorder||t.nodeBorder}; + stroke-width: 1px; +} + +.cluster-label, .nodeLabel { + color: ${t.stateLabelColor}; + // line-height: 1; +} + +.statediagram-cluster rect.outer { + rx: 5px; + ry: 5px; +} +.statediagram-state .divider { + stroke: ${t.stateBorder||t.nodeBorder}; +} + +.statediagram-state .title-state { + rx: 5px; + ry: 5px; +} +.statediagram-cluster.statediagram-cluster .inner { + fill: ${t.compositeBackground||t.background}; +} +.statediagram-cluster.statediagram-cluster-alt .inner { + fill: ${t.altBackground?t.altBackground:"#efefef"}; +} + +.statediagram-cluster .inner { + rx:0; + ry:0; +} + +.statediagram-state rect.basic { + rx: 5px; + ry: 5px; +} +.statediagram-state rect.divider { + stroke-dasharray: 10,10; + fill: ${t.altBackground?t.altBackground:"#efefef"}; +} + +.note-edge { + stroke-dasharray: 5; +} + +.statediagram-note rect { + fill: ${t.noteBkgColor}; + stroke: ${t.noteBorderColor}; + stroke-width: 1px; + rx: 0; + ry: 0; +} +.statediagram-note rect { + fill: ${t.noteBkgColor}; + stroke: ${t.noteBorderColor}; + stroke-width: 1px; + rx: 0; + ry: 0; +} + +.statediagram-note text { + fill: ${t.noteTextColor}; +} + +.statediagram-note .nodeLabel { + color: ${t.noteTextColor}; +} +.statediagram .edgeLabel { + color: red; // ${t.noteTextColor}; +} + +#dependencyStart, #dependencyEnd { + fill: ${t.lineColor}; + stroke: ${t.lineColor}; + stroke-width: 1; +} + +.statediagramTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${t.textColor}; +} +`,"getStyles"),Rs=Ds;export{Is as a,Rs as b,Ls as c,As as s}; diff --git a/assets/chunks/chunk-RGXPSUNZ.e_30X0ct.js b/assets/chunks/chunk-RGXPSUNZ.e_30X0ct.js new file mode 100644 index 000000000..007727c53 --- /dev/null +++ b/assets/chunks/chunk-RGXPSUNZ.e_30X0ct.js @@ -0,0 +1 @@ +import{_ as s}from"../app.D0Wo8w0i.js";var t,e=(t=class{constructor(i){this.init=i,this.records=this.init()}reset(){this.records=this.init()}},s(t,"ImperativeState"),t);export{e as I}; diff --git a/assets/chunks/chunk-VCFP4HPQ.DyTG-ln4.js b/assets/chunks/chunk-VCFP4HPQ.DyTG-ln4.js new file mode 100644 index 000000000..18eabbb88 --- /dev/null +++ b/assets/chunks/chunk-VCFP4HPQ.DyTG-ln4.js @@ -0,0 +1 @@ +import{_ as n,n as c,m as l}from"../app.D0Wo8w0i.js";var o=n((a,t)=>{const e=a.append("rect");if(e.attr("x",t.x),e.attr("y",t.y),e.attr("fill",t.fill),e.attr("stroke",t.stroke),e.attr("width",t.width),e.attr("height",t.height),t.name&&e.attr("name",t.name),t.rx&&e.attr("rx",t.rx),t.ry&&e.attr("ry",t.ry),t.attrs!==void 0)for(const r in t.attrs)e.attr(r,t.attrs[r]);return t.class&&e.attr("class",t.class),e},"drawRect"),d=n((a,t)=>{const e={x:t.startx,y:t.starty,width:t.stopx-t.startx,height:t.stopy-t.starty,fill:t.fill,stroke:t.stroke,class:"rect"};o(a,e).lower()},"drawBackgroundRect"),g=n((a,t)=>{const e=t.text.replace(c," "),r=a.append("text");r.attr("x",t.x),r.attr("y",t.y),r.attr("class","legend"),r.style("text-anchor",t.anchor),t.class&&r.attr("class",t.class);const s=r.append("tspan");return s.attr("x",t.x+t.textMargin*2),s.text(e),r},"drawText"),m=n((a,t,e,r)=>{const s=a.append("image");s.attr("x",t),s.attr("y",e);const i=l(r);s.attr("xlink:href",i)},"drawImage"),h=n((a,t,e,r)=>{const s=a.append("use");s.attr("x",t),s.attr("y",e);const i=l(r);s.attr("xlink:href",`#${i}`)},"drawEmbeddedImage"),y=n(()=>({x:0,y:0,width:100,height:100,fill:"#EDF2AE",stroke:"#666",anchor:"start",rx:0,ry:0}),"getNoteRect"),p=n(()=>({x:0,y:0,width:100,height:100,"text-anchor":"start",style:"#666",textMargin:0,rx:0,ry:0,tspan:!0}),"getTextObj");export{p as a,d as b,h as c,o as d,m as e,g as f,y as g}; diff --git a/assets/chunks/classDiagram-FEGYTUDG.x7pZn-YP.js b/assets/chunks/classDiagram-FEGYTUDG.x7pZn-YP.js new file mode 100644 index 000000000..c71972a58 --- /dev/null +++ b/assets/chunks/classDiagram-FEGYTUDG.x7pZn-YP.js @@ -0,0 +1 @@ +import{c as s,a as r,b as e,s as t}from"./chunk-CXDZ2C6O.BtvA2Emb.js";import{_ as l}from"../app.D0Wo8w0i.js";import"./chunk-EICJXIV7.Cx-DrDyu.js";import"./framework.B1keMFNq.js";import"./theme.8WvZWF-M.js";var p={parser:s,db:r,renderer:e,styles:t,init:l(a=>{a.class||(a.class={}),a.class.arrowMarkerAbsolute=a.arrowMarkerAbsolute,r.clear()},"init")};export{p as diagram}; diff --git a/assets/chunks/classDiagram-v2-R65JCUOM.x7pZn-YP.js b/assets/chunks/classDiagram-v2-R65JCUOM.x7pZn-YP.js new file mode 100644 index 000000000..c71972a58 --- /dev/null +++ b/assets/chunks/classDiagram-v2-R65JCUOM.x7pZn-YP.js @@ -0,0 +1 @@ +import{c as s,a as r,b as e,s as t}from"./chunk-CXDZ2C6O.BtvA2Emb.js";import{_ as l}from"../app.D0Wo8w0i.js";import"./chunk-EICJXIV7.Cx-DrDyu.js";import"./framework.B1keMFNq.js";import"./theme.8WvZWF-M.js";var p={parser:s,db:r,renderer:e,styles:t,init:l(a=>{a.class||(a.class={}),a.class.arrowMarkerAbsolute=a.arrowMarkerAbsolute,r.clear()},"init")};export{p as diagram}; diff --git a/assets/chunks/clone.CgQKvgpz.js b/assets/chunks/clone.CgQKvgpz.js new file mode 100644 index 000000000..e32a70d42 --- /dev/null +++ b/assets/chunks/clone.CgQKvgpz.js @@ -0,0 +1 @@ +import{b as r}from"./baseUniq.DoVpE4hx.js";var e=4;function a(o){return r(o,e)}export{a as c}; diff --git a/assets/chunks/cytoscape.esm.YXkLVt_w.js b/assets/chunks/cytoscape.esm.YXkLVt_w.js new file mode 100644 index 000000000..337cf73c5 --- /dev/null +++ b/assets/chunks/cytoscape.esm.YXkLVt_w.js @@ -0,0 +1,16 @@ +function Ue(r){"@babel/helpers - typeof";return Ue=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ue(r)}function ii(r,e){if(!(r instanceof e))throw new TypeError("Cannot call a class as a function")}function Hu(r,e){for(var t=0;tr.length)&&(e=r.length);for(var t=0,a=new Array(e);t=r.length?{done:!0}:{done:!1,value:r[a++]}},e:function(l){throw l},f:n}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var i=!0,s=!1,o;return{s:function(){t=t.call(r)},n:function(){var l=t.next();return i=l.done,l},e:function(l){s=!0,o=l},f:function(){try{!i&&t.return!=null&&t.return()}finally{if(s)throw o}}}}var Ke=typeof window>"u"?null:window,Oi=Ke?Ke.navigator:null;Ke&&Ke.document;var Uu=Ue(""),Qs=Ue({}),Yu=Ue(function(){}),Xu=typeof HTMLElement>"u"?"undefined":Ue(HTMLElement),wa=function(e){return e&&e.instanceString&&qe(e.instanceString)?e.instanceString():null},ce=function(e){return e!=null&&Ue(e)==Uu},qe=function(e){return e!=null&&Ue(e)===Yu},Oe=function(e){return!yr(e)&&(Array.isArray?Array.isArray(e):e!=null&&e instanceof Array)},Te=function(e){return e!=null&&Ue(e)===Qs&&!Oe(e)&&e.constructor===Object},Zu=function(e){return e!=null&&Ue(e)===Qs},ne=function(e){return e!=null&&Ue(e)===Ue(1)&&!isNaN(e)},Qu=function(e){return ne(e)&&Math.floor(e)===e},_a=function(e){if(Xu!=="undefined")return e!=null&&e instanceof HTMLElement},yr=function(e){return xa(e)||Js(e)},xa=function(e){return wa(e)==="collection"&&e._private.single},Js=function(e){return wa(e)==="collection"&&!e._private.single},oi=function(e){return wa(e)==="core"},_s=function(e){return wa(e)==="stylesheet"},Ju=function(e){return wa(e)==="event"},jr=function(e){return e==null?!0:!!(e===""||e.match(/^\s+$/))},_u=function(e){return typeof HTMLElement>"u"?!1:e instanceof HTMLElement},ju=function(e){return Te(e)&&ne(e.x1)&&ne(e.x2)&&ne(e.y1)&&ne(e.y2)},el=function(e){return Zu(e)&&qe(e.then)},rl=function(){return Oi&&Oi.userAgent.match(/msie|trident|edge/i)},la=function(e,t){t||(t=function(){if(arguments.length===1)return arguments[0];if(arguments.length===0)return"undefined";for(var i=[],s=0;st?1:0},ul=function(e,t){return-1*eo(e,t)},pe=Object.assign!=null?Object.assign.bind(Object):function(r){for(var e=arguments,t=1;t1&&(p-=1),p<1/6?d+(y-d)*6*p:p<1/2?y:p<2/3?d+(y-d)*(2/3-p)*6:d}var f=new RegExp("^"+nl+"$").exec(e);if(f){if(a=parseInt(f[1]),a<0?a=(360- -1*a%360)%360:a>360&&(a=a%360),a/=360,n=parseFloat(f[2]),n<0||n>100||(n=n/100,i=parseFloat(f[3]),i<0||i>100)||(i=i/100,s=f[4],s!==void 0&&(s=parseFloat(s),s<0||s>1)))return;if(n===0)o=l=u=Math.round(i*255);else{var c=i<.5?i*(1+n):i+n-i*n,h=2*i-c;o=Math.round(255*v(h,c,a+1/3)),l=Math.round(255*v(h,c,a)),u=Math.round(255*v(h,c,a-1/3))}t=[o,l,u,s]}return t},fl=function(e){var t,a=new RegExp("^"+tl+"$").exec(e);if(a){t=[];for(var n=[],i=1;i<=3;i++){var s=a[i];if(s[s.length-1]==="%"&&(n[i]=!0),s=parseFloat(s),n[i]&&(s=s/100*255),s<0||s>255)return;t.push(Math.floor(s))}var o=n[1]||n[2]||n[3],l=n[1]&&n[2]&&n[3];if(o&&!l)return;var u=a[4];if(u!==void 0){if(u=parseFloat(u),u<0||u>1)return;t.push(u)}}return t},cl=function(e){return hl[e.toLowerCase()]},dl=function(e){return(Oe(e)?e:null)||cl(e)||ll(e)||fl(e)||vl(e)},hl={transparent:[0,0,0,0],aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],grey:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},ro=function(e){for(var t=e.map,a=e.keys,n=a.length,i=0;i=e||x<0||f&&D>=i}function g(){var E=Mn();if(p(E))return m(E);o=setTimeout(g,y(E))}function m(E){return o=void 0,c&&a?h(E):(a=n=void 0,s)}function b(){o!==void 0&&clearTimeout(o),u=0,a=l=n=o=void 0}function w(){return o===void 0?s:m(Mn())}function S(){var E=Mn(),x=p(E);if(a=arguments,n=this,l=E,x){if(o===void 0)return d(l);if(f)return clearTimeout(o),o=setTimeout(g,e),h(l)}return o===void 0&&(o=setTimeout(g,e)),s}return S.cancel=b,S.flush=w,S}var cn=_l,Ln=Ke?Ke.performance:null,io=Ln&&Ln.now?function(){return Ln.now()}:function(){return Date.now()},jl=function(){if(Ke){if(Ke.requestAnimationFrame)return function(r){Ke.requestAnimationFrame(r)};if(Ke.mozRequestAnimationFrame)return function(r){Ke.mozRequestAnimationFrame(r)};if(Ke.webkitRequestAnimationFrame)return function(r){Ke.webkitRequestAnimationFrame(r)};if(Ke.msRequestAnimationFrame)return function(r){Ke.msRequestAnimationFrame(r)}}return function(r){r&&setTimeout(function(){r(io())},1e3/60)}}(),ja=function(e){return jl(e)},Hr=io,kt=9261,so=65599,aa=5381,oo=function(e){for(var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:kt,a=t,n;n=e.next(),!n.done;)a=a*so+n.value|0;return a},va=function(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:kt;return t*so+e|0},fa=function(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:aa;return(t<<5)+t+e|0},ev=function(e,t){return e*2097152+t},Yr=function(e){return e[0]*2097152+e[1]},La=function(e,t){return[va(e[0],t[0]),fa(e[1],t[1])]},rv=function(e,t){var a={value:0,done:!1},n=0,i=e.length,s={next:function(){return n=0;n--)e[n]===t&&e.splice(n,1)},fi=function(e){e.splice(0,e.length)},uv=function(e,t){for(var a=0;a"u"?"undefined":Ue(Set))!==vv?Set:fv,dn=function(e,t){var a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(e===void 0||t===void 0||!oi(e)){$e("An element must have a core reference and parameters set");return}var n=t.group;if(n==null&&(t.data&&t.data.source!=null&&t.data.target!=null?n="edges":n="nodes"),n!=="nodes"&&n!=="edges"){$e("An element must be of type `nodes` or `edges`; you specified `"+n+"`");return}this.length=1,this[0]=this;var i=this._private={cy:e,single:!0,data:t.data||{},position:t.position||{x:0,y:0},autoWidth:void 0,autoHeight:void 0,autoPadding:void 0,compoundBoundsClean:!1,listeners:[],group:n,style:{},rstyle:{},styleCxts:[],styleKeys:{},removed:!0,selected:!!t.selected,selectable:t.selectable===void 0?!0:!!t.selectable,locked:!!t.locked,grabbed:!1,grabbable:t.grabbable===void 0?!0:!!t.grabbable,pannable:t.pannable===void 0?n==="edges":!!t.pannable,active:!1,classes:new Vt,animation:{current:[],queue:[]},rscratch:{},scratch:t.scratch||{},edges:[],children:[],parent:t.parent&&t.parent.isNode()?t.parent:null,traversalCache:{},backgrounding:!1,bbCache:null,bbCacheShift:{x:0,y:0},bodyBounds:null,overlayBounds:null,labelBounds:{all:null,source:null,target:null,main:null},arrowBounds:{source:null,target:null,"mid-source":null,"mid-target":null}};if(i.position.x==null&&(i.position.x=0),i.position.y==null&&(i.position.y=0),t.renderedPosition){var s=t.renderedPosition,o=e.pan(),l=e.zoom();i.position={x:(s.x-o.x)/l,y:(s.y-o.y)/l}}var u=[];Oe(t.classes)?u=t.classes:ce(t.classes)&&(u=t.classes.split(/\s+/));for(var v=0,f=u.length;vm?1:0},v=function(g,m,b,w,S){var E;if(b==null&&(b=0),S==null&&(S=a),b<0)throw new Error("lo must be non-negative");for(w==null&&(w=g.length);bM;0<=M?C++:C--)D.push(C);return D}).apply(this).reverse(),x=[],w=0,S=E.length;wP;0<=P?++D:--D)B.push(s(g,b));return B},y=function(g,m,b,w){var S,E,x;for(w==null&&(w=a),S=g[b];b>m;){if(x=b-1>>1,E=g[x],w(S,E)<0){g[b]=E,b=x;continue}break}return g[b]=S},p=function(g,m,b){var w,S,E,x,D;for(b==null&&(b=a),S=g.length,D=m,E=g[m],w=2*m+1;w0;){var E=m.pop(),x=p(E),D=E.id();if(c[D]=x,x!==1/0)for(var C=E.neighborhood().intersect(d),M=0;M0)for(I.unshift(R);f[G];){var F=f[G];I.unshift(F.edge),I.unshift(F.node),V=F.node,G=V.id()}return o.spawn(I)}}}},gv={kruskal:function(e){e=e||function(b){return 1};for(var t=this.byGroup(),a=t.nodes,n=t.edges,i=a.length,s=new Array(i),o=a,l=function(w){for(var S=0;S0;){if(S(),x++,w===v){for(var D=[],C=i,M=v,P=g[M];D.unshift(C),P!=null&&D.unshift(P),C=p[M],C!=null;)M=C.id(),P=g[M];return{found:!0,distance:f[w],path:this.spawn(D),steps:x}}h[w]=!0;for(var B=b._private.edges,L=0;LP&&(d[M]=P,m[M]=C,b[M]=S),!i){var B=C*v+D;!i&&d[B]>P&&(d[B]=P,m[B]=D,b[B]=S)}}}for(var L=0;L1&&arguments[1]!==void 0?arguments[1]:s,Le=b(oe),Ce=[],xe=Le;;){if(xe==null)return t.spawn();var Ae=m(xe),Ee=Ae.edge,Pe=Ae.pred;if(Ce.unshift(xe[0]),xe.same(de)&&Ce.length>0)break;Ee!=null&&Ce.unshift(Ee),xe=Pe}return l.spawn(Ce)},E=0;E=0;v--){var f=u[v],c=f[1],h=f[2];(t[c]===o&&t[h]===l||t[c]===l&&t[h]===o)&&u.splice(v,1)}for(var d=0;dn;){var i=Math.floor(Math.random()*t.length);t=Cv(i,e,t),a--}return t},Sv={kargerStein:function(){var e=this,t=this.byGroup(),a=t.nodes,n=t.edges;n.unmergeBy(function(I){return I.isLoop()});var i=a.length,s=n.length,o=Math.ceil(Math.pow(Math.log(i)/Math.LN2,2)),l=Math.floor(i/Ev);if(i<2){$e("At least 2 nodes are required for Karger-Stein algorithm");return}for(var u=[],v=0;v1&&arguments[1]!==void 0?arguments[1]:0,a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,n=1/0,i=t;i1&&arguments[1]!==void 0?arguments[1]:0,a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,n=-1/0,i=t;i1&&arguments[1]!==void 0?arguments[1]:0,a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,n=0,i=0,s=t;s1&&arguments[1]!==void 0?arguments[1]:0,a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,s=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0;n?e=e.slice(t,a):(a0&&e.splice(0,t));for(var o=0,l=e.length-1;l>=0;l--){var u=e[l];s?isFinite(u)||(e[l]=-1/0,o++):e.splice(l,1)}i&&e.sort(function(c,h){return c-h});var v=e.length,f=Math.floor(v/2);return v%2!==0?e[f+1+o]:(e[f-1+o]+e[f+o])/2},Mv=function(e){return Math.PI*e/180},Aa=function(e,t){return Math.atan2(t,e)-Math.PI/2},ci=Math.log2||function(r){return Math.log(r)/Math.log(2)},go=function(e){return e>0?1:e<0?-1:0},ht=function(e,t){return Math.sqrt(ot(e,t))},ot=function(e,t){var a=t.x-e.x,n=t.y-e.y;return a*a+n*n},Lv=function(e){for(var t=e.length,a=0,n=0;n=e.x1&&e.y2>=e.y1)return{x1:e.x1,y1:e.y1,x2:e.x2,y2:e.y2,w:e.x2-e.x1,h:e.y2-e.y1};if(e.w!=null&&e.h!=null&&e.w>=0&&e.h>=0)return{x1:e.x1,y1:e.y1,x2:e.x1+e.w,y2:e.y1+e.h,w:e.w,h:e.h}}},Rv=function(e){return{x1:e.x1,x2:e.x2,w:e.w,y1:e.y1,y2:e.y2,h:e.h}},Ov=function(e){e.x1=1/0,e.y1=1/0,e.x2=-1/0,e.y2=-1/0,e.w=0,e.h=0},Iv=function(e,t,a){return{x1:e.x1+t,x2:e.x2+t,y1:e.y1+a,y2:e.y2+a,w:e.w,h:e.h}},po=function(e,t){e.x1=Math.min(e.x1,t.x1),e.x2=Math.max(e.x2,t.x2),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,t.y1),e.y2=Math.max(e.y2,t.y2),e.h=e.y2-e.y1},zv=function(e,t,a){e.x1=Math.min(e.x1,t),e.x2=Math.max(e.x2,t),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,a),e.y2=Math.max(e.y2,a),e.h=e.y2-e.y1},Ga=function(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return e.x1-=t,e.x2+=t,e.y1-=t,e.y2+=t,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},Ka=function(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[0],a,n,i,s;if(t.length===1)a=n=i=s=t[0];else if(t.length===2)a=i=t[0],s=n=t[1];else if(t.length===4){var o=Tr(t,4);a=o[0],n=o[1],i=o[2],s=o[3]}return e.x1-=s,e.x2+=n,e.y1-=a,e.y2+=i,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},Hi=function(e,t){e.x1=t.x1,e.y1=t.y1,e.x2=t.x2,e.y2=t.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1},di=function(e,t){return!(e.x1>t.x2||t.x1>e.x2||e.x2t.y2||t.y1>e.y2)},It=function(e,t,a){return e.x1<=t&&t<=e.x2&&e.y1<=a&&a<=e.y2},Nv=function(e,t){return It(e,t.x,t.y)},yo=function(e,t){return It(e,t.x1,t.y1)&&It(e,t.x2,t.y2)},mo=function(e,t,a,n,i,s,o){var l=arguments.length>7&&arguments[7]!==void 0?arguments[7]:"auto",u=l==="auto"?gt(i,s):l,v=i/2,f=s/2;u=Math.min(u,v,f);var c=u!==v,h=u!==f,d;if(c){var y=a-v+u-o,p=n-f-o,g=a+v-u+o,m=p;if(d=Qr(e,t,a,n,y,p,g,m,!1),d.length>0)return d}if(h){var b=a+v+o,w=n-f+u-o,S=b,E=n+f-u+o;if(d=Qr(e,t,a,n,b,w,S,E,!1),d.length>0)return d}if(c){var x=a-v+u-o,D=n+f+o,C=a+v-u+o,M=D;if(d=Qr(e,t,a,n,x,D,C,M,!1),d.length>0)return d}if(h){var P=a-v-o,B=n-f+u-o,L=P,k=n+f-u+o;if(d=Qr(e,t,a,n,P,B,L,k,!1),d.length>0)return d}var O;{var A=a-v+u,R=n-f+u;if(O=na(e,t,a,n,A,R,u+o),O.length>0&&O[0]<=A&&O[1]<=R)return[O[0],O[1]]}{var I=a+v-u,V=n-f+u;if(O=na(e,t,a,n,I,V,u+o),O.length>0&&O[0]>=I&&O[1]<=V)return[O[0],O[1]]}{var G=a+v-u,F=n+f-u;if(O=na(e,t,a,n,G,F,u+o),O.length>0&&O[0]>=G&&O[1]>=F)return[O[0],O[1]]}{var q=a-v+u,Y=n+f-u;if(O=na(e,t,a,n,q,Y,u+o),O.length>0&&O[0]<=q&&O[1]>=Y)return[O[0],O[1]]}return[]},Fv=function(e,t,a,n,i,s,o){var l=o,u=Math.min(a,i),v=Math.max(a,i),f=Math.min(n,s),c=Math.max(n,s);return u-l<=e&&e<=v+l&&f-l<=t&&t<=c+l},Vv=function(e,t,a,n,i,s,o,l,u){var v={x1:Math.min(a,o,i)-u,x2:Math.max(a,o,i)+u,y1:Math.min(n,l,s)-u,y2:Math.max(n,l,s)+u};return!(ev.x2||tv.y2)},qv=function(e,t,a,n){a-=n;var i=t*t-4*e*a;if(i<0)return[];var s=Math.sqrt(i),o=2*e,l=(-t+s)/o,u=(-t-s)/o;return[l,u]},$v=function(e,t,a,n,i){var s=1e-5;e===0&&(e=s),t/=e,a/=e,n/=e;var o,l,u,v,f,c,h,d;if(l=(3*a-t*t)/9,u=-(27*n)+t*(9*a-2*(t*t)),u/=54,o=l*l*l+u*u,i[1]=0,h=t/3,o>0){f=u+Math.sqrt(o),f=f<0?-Math.pow(-f,1/3):Math.pow(f,1/3),c=u-Math.sqrt(o),c=c<0?-Math.pow(-c,1/3):Math.pow(c,1/3),i[0]=-h+f+c,h+=(f+c)/2,i[4]=i[2]=-h,h=Math.sqrt(3)*(-c+f)/2,i[3]=h,i[5]=-h;return}if(i[5]=i[3]=0,o===0){d=u<0?-Math.pow(-u,1/3):Math.pow(u,1/3),i[0]=-h+2*d,i[4]=i[2]=-(d+h);return}l=-l,v=l*l*l,v=Math.acos(u/Math.sqrt(v)),d=2*Math.sqrt(l),i[0]=-h+d*Math.cos(v/3),i[2]=-h+d*Math.cos((v+2*Math.PI)/3),i[4]=-h+d*Math.cos((v+4*Math.PI)/3)},Hv=function(e,t,a,n,i,s,o,l){var u=1*a*a-4*a*i+2*a*o+4*i*i-4*i*o+o*o+n*n-4*n*s+2*n*l+4*s*s-4*s*l+l*l,v=1*9*a*i-3*a*a-3*a*o-6*i*i+3*i*o+9*n*s-3*n*n-3*n*l-6*s*s+3*s*l,f=1*3*a*a-6*a*i+a*o-a*e+2*i*i+2*i*e-o*e+3*n*n-6*n*s+n*l-n*t+2*s*s+2*s*t-l*t,c=1*a*i-a*a+a*e-i*e+n*s-n*n+n*t-s*t,h=[];$v(u,v,f,c,h);for(var d=1e-7,y=[],p=0;p<6;p+=2)Math.abs(h[p+1])=0&&h[p]<=1&&y.push(h[p]);y.push(1),y.push(0);for(var g=-1,m,b,w,S=0;S=0?wu?(e-i)*(e-i)+(t-s)*(t-s):v-c},dr=function(e,t,a){for(var n,i,s,o,l,u=0,v=0;v=e&&e>=s||n<=e&&e<=s)l=(e-n)/(s-n)*(o-i)+i,l>t&&u++;else continue;return u%2!==0},Gr=function(e,t,a,n,i,s,o,l,u){var v=new Array(a.length),f;l[0]!=null?(f=Math.atan(l[1]/l[0]),l[0]<0?f=f+Math.PI/2:f=-f-Math.PI/2):f=l;for(var c=Math.cos(-f),h=Math.sin(-f),d=0;d0){var p=tn(v,-u);y=rn(p)}else y=v;return dr(e,t,y)},Kv=function(e,t,a,n,i,s,o,l){for(var u=new Array(a.length*2),v=0;v=0&&p<=1&&m.push(p),g>=0&&g<=1&&m.push(g),m.length===0)return[];var b=m[0]*l[0]+e,w=m[0]*l[1]+t;if(m.length>1){if(m[0]==m[1])return[b,w];var S=m[1]*l[0]+e,E=m[1]*l[1]+t;return[b,w,S,E]}else return[b,w]},Rn=function(e,t,a){return t<=e&&e<=a||a<=e&&e<=t?e:e<=t&&t<=a||a<=t&&t<=e?t:a},Qr=function(e,t,a,n,i,s,o,l,u){var v=e-i,f=a-e,c=o-i,h=t-s,d=n-t,y=l-s,p=c*h-y*v,g=f*h-d*v,m=y*f-c*d;if(m!==0){var b=p/m,w=g/m,S=.001,E=0-S,x=1+S;return E<=b&&b<=x&&E<=w&&w<=x?[e+b*f,t+b*d]:u?[e+b*f,t+b*d]:[]}else return p===0||g===0?Rn(e,a,o)===o?[o,l]:Rn(e,a,i)===i?[i,s]:Rn(i,o,a)===a?[a,n]:[]:[]},ha=function(e,t,a,n,i,s,o,l){var u=[],v,f=new Array(a.length),c=!0;s==null&&(c=!1);var h;if(c){for(var d=0;d0){var y=tn(f,-l);h=rn(y)}else h=f}else h=a;for(var p,g,m,b,w=0;w2){for(var d=[v[0],v[1]],y=Math.pow(d[0]-e,2)+Math.pow(d[1]-t,2),p=1;pv&&(v=w)},get:function(b){return u[b]}},c=0;c0?A=O.edgesTo(k)[0]:A=k.edgesTo(O)[0];var R=n(A);k=k.id(),D[k]>D[B]+R&&(D[k]=D[B]+R,C.nodes.indexOf(k)<0?C.push(k):C.updateItem(k),x[k]=0,E[k]=[]),D[k]==D[B]+R&&(x[k]=x[k]+x[B],E[k].push(B))}else for(var I=0;I0;){for(var q=S.pop(),Y=0;Y0&&o.push(a[l]);o.length!==0&&i.push(n.collection(o))}return i},of=function(e,t){for(var a=0;a5&&arguments[5]!==void 0?arguments[5]:vf,o=n,l,u,v=0;v=2?_t(e,t,a,0,Yi,ff):_t(e,t,a,0,Ui)},squaredEuclidean:function(e,t,a){return _t(e,t,a,0,Yi)},manhattan:function(e,t,a){return _t(e,t,a,0,Ui)},max:function(e,t,a){return _t(e,t,a,-1/0,cf)}};zt["squared-euclidean"]=zt.squaredEuclidean;zt.squaredeuclidean=zt.squaredEuclidean;function gn(r,e,t,a,n,i){var s;return qe(r)?s=r:s=zt[r]||zt.euclidean,e===0&&qe(r)?s(n,i):s(e,t,a,n,i)}var df=rr({k:2,m:2,sensitivityThreshold:1e-4,distance:"euclidean",maxIterations:10,attributes:[],testMode:!1,testCentroids:null}),gi=function(e){return df(e)},an=function(e,t,a,n,i){var s=i!=="kMedoids",o=s?function(f){return a[f]}:function(f){return n[f](a)},l=function(c){return n[c](t)},u=a,v=t;return gn(e,n.length,o,l,u,v)},On=function(e,t,a){for(var n=a.length,i=new Array(n),s=new Array(n),o=new Array(t),l=null,u=0;ua)return!1}return!0},pf=function(e,t,a){for(var n=0;no&&(o=t[u][v],l=v);i[l].push(e[u])}for(var f=0;f=i.threshold||i.mode==="dendrogram"&&e.length===1)return!1;var d=t[s],y=t[n[s]],p;i.mode==="dendrogram"?p={left:d,right:y,key:d.key}:p={value:d.value.concat(y.value),key:d.key},e[d.index]=p,e.splice(y.index,1),t[d.key]=p;for(var g=0;ga[y.key][m.key]&&(l=a[y.key][m.key])):i.linkage==="max"?(l=a[d.key][m.key],a[d.key][m.key]0&&n.push(i);return n},ji=function(e,t,a){for(var n=[],i=0;io&&(s=u,o=t[i*e+u])}s>0&&n.push(s)}for(var v=0;vu&&(l=v,u=f)}a[i]=s[l]}return n=ji(e,t,a),n},es=function(e){for(var t=this.cy(),a=this.nodes(),n=Mf(e),i={},s=0;s=P?(B=P,P=k,L=O):k>B&&(B=k);for(var A=0;A0?1:0;x[C%n.minIterations*o+q]=Y,F+=Y}if(F>0&&(C>=n.minIterations-1||C==n.maxIterations-1)){for(var Q=0,J=0;J1||E>1)&&(o=!0),f[b]=[],m.outgoers().forEach(function(D){D.isEdge()&&f[b].push(D.id())})}else c[b]=[void 0,m.target().id()]}):s.forEach(function(m){var b=m.id();if(m.isNode()){var w=m.degree(!0);w%2&&(l?u?o=!0:u=b:l=b),f[b]=[],m.connectedEdges().forEach(function(S){return f[b].push(S.id())})}else c[b]=[m.source().id(),m.target().id()]});var h={found:!1,trail:void 0};if(o)return h;if(u&&l)if(i){if(v&&u!=v)return h;v=u}else{if(v&&u!=v&&l!=v)return h;v||(v=u)}else v||(v=s[0].id());var d=function(b){for(var w=b,S=[b],E,x,D;f[w].length;)E=f[w].shift(),x=c[E][0],D=c[E][1],w!=D?(f[D]=f[D].filter(function(C){return C!=E}),w=D):!i&&w!=x&&(f[x]=f[x].filter(function(C){return C!=E}),w=x),S.unshift(E),S.unshift(w);return S},y=[],p=[];for(p=d(v);p.length!=1;)f[p[0]].length==0?(y.unshift(s.getElementById(p.shift())),y.unshift(s.getElementById(p.shift()))):p=d(p.shift()).concat(p);y.unshift(s.getElementById(p.shift()));for(var g in f)if(f[g].length)return h;return h.found=!0,h.trail=this.spawn(y,!0),h}},Ia=function(){var e=this,t={},a=0,n=0,i=[],s=[],o={},l=function(c,h){for(var d=s.length-1,y=[],p=e.spawn();s[d].x!=c||s[d].y!=h;)y.push(s.pop().edge),d--;y.push(s.pop().edge),y.forEach(function(g){var m=g.connectedNodes().intersection(e);p.merge(g),m.forEach(function(b){var w=b.id(),S=b.connectedEdges().intersection(e);p.merge(b),t[w].cutVertex?p.merge(S.filter(function(E){return E.isLoop()})):p.merge(S)})}),i.push(p)},u=function f(c,h,d){c===d&&(n+=1),t[h]={id:a,low:a++,cutVertex:!1};var y=e.getElementById(h).connectedEdges().intersection(e);if(y.size()===0)i.push(e.spawn(e.getElementById(h)));else{var p,g,m,b;y.forEach(function(w){p=w.source().id(),g=w.target().id(),m=p===h?g:p,m!==d&&(b=w.id(),o[b]||(o[b]=!0,s.push({x:h,y:m,edge:w})),m in t?t[h].low=Math.min(t[h].low,t[m].id):(f(c,m,h),t[h].low=Math.min(t[h].low,t[m].low),t[h].id<=t[m].low&&(t[h].cutVertex=!0,l(h,m))))})}};e.forEach(function(f){if(f.isNode()){var c=f.id();c in t||(n=0,u(c,c),t[c].cutVertex=n>1)}});var v=Object.keys(t).filter(function(f){return t[f].cutVertex}).map(function(f){return e.getElementById(f)});return{cut:e.spawn(v),components:i}},Ff={hopcroftTarjanBiconnected:Ia,htbc:Ia,htb:Ia,hopcroftTarjanBiconnectedComponents:Ia},za=function(){var e=this,t={},a=0,n=[],i=[],s=e.spawn(e),o=function l(u){i.push(u),t[u]={index:a,low:a++,explored:!1};var v=e.getElementById(u).connectedEdges().intersection(e);if(v.forEach(function(y){var p=y.target().id();p!==u&&(p in t||l(p),t[p].explored||(t[u].low=Math.min(t[u].low,t[p].low)))}),t[u].index===t[u].low){for(var f=e.spawn();;){var c=i.pop();if(f.merge(e.getElementById(c)),t[c].low=t[u].index,t[c].explored=!0,c===u)break}var h=f.edgesWith(f),d=f.merge(h);n.push(d),s=s.difference(d)}};return e.forEach(function(l){if(l.isNode()){var u=l.id();u in t||o(u)}}),{cut:s,components:n}},Vf={tarjanStronglyConnected:za,tsc:za,tscc:za,tarjanStronglyConnectedComponents:za},To={};[ca,hv,gv,yv,bv,xv,Sv,Zv,Lt,At,Wn,lf,Ef,Pf,If,Nf,Ff,Vf].forEach(function(r){pe(To,r)});/*! +Embeddable Minimum Strictly-Compliant Promises/A+ 1.1.1 Thenable +Copyright (c) 2013-2014 Ralf S. Engelschall (http://engelschall.com) +Licensed under The MIT License (http://opensource.org/licenses/MIT) +*/var Do=0,ko=1,Po=2,Kr=function r(e){if(!(this instanceof r))return new r(e);this.id="Thenable/1.0.7",this.state=Do,this.fulfillValue=void 0,this.rejectReason=void 0,this.onFulfilled=[],this.onRejected=[],this.proxy={then:this.then.bind(this)},typeof e=="function"&&e.call(this,this.fulfill.bind(this),this.reject.bind(this))};Kr.prototype={fulfill:function(e){return rs(this,ko,"fulfillValue",e)},reject:function(e){return rs(this,Po,"rejectReason",e)},then:function(e,t){var a=this,n=new Kr;return a.onFulfilled.push(as(e,n,"fulfill")),a.onRejected.push(as(t,n,"reject")),Bo(a),n.proxy}};var rs=function(e,t,a,n){return e.state===Do&&(e.state=t,e[a]=n,Bo(e)),e},Bo=function(e){e.state===ko?ts(e,"onFulfilled",e.fulfillValue):e.state===Po&&ts(e,"onRejected",e.rejectReason)},ts=function(e,t,a){if(e[t].length!==0){var n=e[t];e[t]=[];var i=function(){for(var o=0;o0}},clearQueue:function(){return function(){var t=this,a=t.length!==void 0,n=a?t:[t],i=this._private.cy||this;if(!i.styleEnabled())return this;for(var s=0;s-1}var Uc=Wc;function Yc(r,e){var t=this.__data__,a=yn(t,r);return a<0?(++this.size,t.push([r,e])):t[a][1]=e,this}var Xc=Yc;function Ht(r){var e=-1,t=r==null?0:r.length;for(this.clear();++e-1&&r%1==0&&r0&&this.spawn(n).updateStyle().emit("class"),t},addClass:function(e){return this.toggleClass(e,!0)},hasClass:function(e){var t=this[0];return t!=null&&t._private.classes.has(e)},toggleClass:function(e,t){Oe(e)||(e=e.match(/\S+/g)||[]);for(var a=this,n=t===void 0,i=[],s=0,o=a.length;s0&&this.spawn(i).updateStyle().emit("class"),a},removeClass:function(e){return this.toggleClass(e,!1)},flashClass:function(e,t){var a=this;if(t==null)t=250;else if(t===0)return a;return a.addClass(e),setTimeout(function(){a.removeClass(e)},t),a}};Wa.className=Wa.classNames=Wa.classes;var Se={metaChar:"[\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]",comparatorOp:"=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=",boolOp:"\\?|\\!|\\^",string:`"(?:\\\\"|[^"])*"|'(?:\\\\'|[^'])*'`,number:We,meta:"degree|indegree|outdegree",separator:"\\s*,\\s*",descendant:"\\s+",child:"\\s+>\\s+",subject:"\\$",group:"node|edge|\\*",directedEdge:"\\s+->\\s+",undirectedEdge:"\\s+<->\\s+"};Se.variable="(?:[\\w-.]|(?:\\\\"+Se.metaChar+"))+";Se.className="(?:[\\w-]|(?:\\\\"+Se.metaChar+"))+";Se.value=Se.string+"|"+Se.number;Se.id=Se.variable;(function(){var r,e,t;for(r=Se.comparatorOp.split("|"),t=0;t=0)&&e!=="="&&(Se.comparatorOp+="|\\!"+e)})();var Re=function(){return{checks:[]}},ue={GROUP:0,COLLECTION:1,FILTER:2,DATA_COMPARE:3,DATA_EXIST:4,DATA_BOOL:5,META_COMPARE:6,STATE:7,ID:8,CLASS:9,UNDIRECTED_EDGE:10,DIRECTED_EDGE:11,NODE_SOURCE:12,NODE_TARGET:13,NODE_NEIGHBOR:14,CHILD:15,DESCENDANT:16,PARENT:17,ANCESTOR:18,COMPOUND_SPLIT:19,TRUE:20},Yn=[{selector:":selected",matches:function(e){return e.selected()}},{selector:":unselected",matches:function(e){return!e.selected()}},{selector:":selectable",matches:function(e){return e.selectable()}},{selector:":unselectable",matches:function(e){return!e.selectable()}},{selector:":locked",matches:function(e){return e.locked()}},{selector:":unlocked",matches:function(e){return!e.locked()}},{selector:":visible",matches:function(e){return e.visible()}},{selector:":hidden",matches:function(e){return!e.visible()}},{selector:":transparent",matches:function(e){return e.transparent()}},{selector:":grabbed",matches:function(e){return e.grabbed()}},{selector:":free",matches:function(e){return!e.grabbed()}},{selector:":removed",matches:function(e){return e.removed()}},{selector:":inside",matches:function(e){return!e.removed()}},{selector:":grabbable",matches:function(e){return e.grabbable()}},{selector:":ungrabbable",matches:function(e){return!e.grabbable()}},{selector:":animated",matches:function(e){return e.animated()}},{selector:":unanimated",matches:function(e){return!e.animated()}},{selector:":parent",matches:function(e){return e.isParent()}},{selector:":childless",matches:function(e){return e.isChildless()}},{selector:":child",matches:function(e){return e.isChild()}},{selector:":orphan",matches:function(e){return e.isOrphan()}},{selector:":nonorphan",matches:function(e){return e.isChild()}},{selector:":compound",matches:function(e){return e.isNode()?e.isParent():e.source().isParent()||e.target().isParent()}},{selector:":loop",matches:function(e){return e.isLoop()}},{selector:":simple",matches:function(e){return e.isSimple()}},{selector:":active",matches:function(e){return e.active()}},{selector:":inactive",matches:function(e){return!e.active()}},{selector:":backgrounding",matches:function(e){return e.backgrounding()}},{selector:":nonbackgrounding",matches:function(e){return!e.backgrounding()}}].sort(function(r,e){return ul(r.selector,e.selector)}),_d=function(){for(var r={},e,t=0;t0&&v.edgeCount>0)return Me("The selector `"+e+"` is invalid because it uses both a compound selector and an edge selector"),!1;if(v.edgeCount>1)return Me("The selector `"+e+"` is invalid because it uses multiple edge selectors"),!1;v.edgeCount===1&&Me("The selector `"+e+"` is deprecated. Edge selectors do not take effect on changes to source and target nodes after an edge is added, for performance reasons. Use a class or data selector on edges instead, updating the class or data of an edge when your app detects a change in source or target nodes.")}return!0},nh=function(){if(this.toStringCache!=null)return this.toStringCache;for(var e=function(v){return v??""},t=function(v){return ce(v)?'"'+v+'"':e(v)},a=function(v){return" "+v+" "},n=function(v,f){var c=v.type,h=v.value;switch(c){case ue.GROUP:{var d=e(h);return d.substring(0,d.length-1)}case ue.DATA_COMPARE:{var y=v.field,p=v.operator;return"["+y+a(e(p))+t(h)+"]"}case ue.DATA_BOOL:{var g=v.operator,m=v.field;return"["+e(g)+m+"]"}case ue.DATA_EXIST:{var b=v.field;return"["+b+"]"}case ue.META_COMPARE:{var w=v.operator,S=v.field;return"[["+S+a(e(w))+t(h)+"]]"}case ue.STATE:return h;case ue.ID:return"#"+h;case ue.CLASS:return"."+h;case ue.PARENT:case ue.CHILD:return i(v.parent,f)+a(">")+i(v.child,f);case ue.ANCESTOR:case ue.DESCENDANT:return i(v.ancestor,f)+" "+i(v.descendant,f);case ue.COMPOUND_SPLIT:{var E=i(v.left,f),x=i(v.subject,f),D=i(v.right,f);return E+(E.length>0?" ":"")+x+D}case ue.TRUE:return""}},i=function(v,f){return v.checks.reduce(function(c,h,d){return c+(f===v&&d===0?"$":"")+n(h,f)},"")},s="",o=0;o1&&o=0&&(t=t.replace("!",""),f=!0),t.indexOf("@")>=0&&(t=t.replace("@",""),v=!0),(i||o||v)&&(l=!i&&!s?"":""+e,u=""+a),v&&(e=l=l.toLowerCase(),a=u=u.toLowerCase()),t){case"*=":n=l.indexOf(u)>=0;break;case"$=":n=l.indexOf(u,l.length-u.length)>=0;break;case"^=":n=l.indexOf(u)===0;break;case"=":n=e===a;break;case">":c=!0,n=e>a;break;case">=":c=!0,n=e>=a;break;case"<":c=!0,n=e0;){var v=n.shift();e(v),i.add(v.id()),o&&a(n,i,v)}return r}function Fo(r,e,t){if(t.isParent())for(var a=t._private.children,n=0;n1&&arguments[1]!==void 0?arguments[1]:!0;return wi(this,r,e,Fo)};function Vo(r,e,t){if(t.isChild()){var a=t._private.parent;e.has(a.id())||r.push(a)}}Nt.forEachUp=function(r){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return wi(this,r,e,Vo)};function ch(r,e,t){Vo(r,e,t),Fo(r,e,t)}Nt.forEachUpAndDown=function(r){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return wi(this,r,e,ch)};Nt.ancestors=Nt.parents;var pa,qo;pa=qo={data:Be.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),removeData:Be.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),scratch:Be.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:Be.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),rscratch:Be.data({field:"rscratch",allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!0}),removeRscratch:Be.removeData({field:"rscratch",triggerEvent:!1}),id:function(){var e=this[0];if(e)return e._private.data.id}};pa.attr=pa.data;pa.removeAttr=pa.removeData;var dh=qo,bn={};function zn(r){return function(e){var t=this;if(e===void 0&&(e=!0),t.length!==0)if(t.isNode()&&!t.removed()){for(var a=0,n=t[0],i=n._private.edges,s=0;se}),minIndegree:Et("indegree",function(r,e){return re}),minOutdegree:Et("outdegree",function(r,e){return re})});pe(bn,{totalDegree:function(e){for(var t=0,a=this.nodes(),n=0;n0,c=f;f&&(v=v[0]);var h=c?v.position():{x:0,y:0};t!==void 0?u.position(e,t+h[e]):i!==void 0&&u.position({x:i.x+h.x,y:i.y+h.y})}else{var d=a.position(),y=o?a.parent():null,p=y&&y.length>0,g=p;p&&(y=y[0]);var m=g?y.position():{x:0,y:0};return i={x:d.x-m.x,y:d.y-m.y},e===void 0?i:i[e]}else if(!s)return;return this}};Pr.modelPosition=Pr.point=Pr.position;Pr.modelPositions=Pr.points=Pr.positions;Pr.renderedPoint=Pr.renderedPosition;Pr.relativePoint=Pr.relativePosition;var hh=$o,Rt,nt;Rt=nt={};nt.renderedBoundingBox=function(r){var e=this.boundingBox(r),t=this.cy(),a=t.zoom(),n=t.pan(),i=e.x1*a+n.x,s=e.x2*a+n.x,o=e.y1*a+n.y,l=e.y2*a+n.y;return{x1:i,x2:s,y1:o,y2:l,w:s-i,h:l-o}};nt.dirtyCompoundBoundsCache=function(){var r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,e=this.cy();return!e.styleEnabled()||!e.hasCompoundNodes()?this:(this.forEachUp(function(t){if(t.isParent()){var a=t._private;a.compoundBoundsClean=!1,a.bbCache=null,r||t.emitAndNotify("bounds")}}),this)};nt.updateCompoundBounds=function(){var r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,e=this.cy();if(!e.styleEnabled()||!e.hasCompoundNodes())return this;if(!r&&e.batching())return this;function t(s){if(!s.isParent())return;var o=s._private,l=s.children(),u=s.pstyle("compound-sizing-wrt-labels").value==="include",v={width:{val:s.pstyle("min-width").pfValue,left:s.pstyle("min-width-bias-left"),right:s.pstyle("min-width-bias-right")},height:{val:s.pstyle("min-height").pfValue,top:s.pstyle("min-height-bias-top"),bottom:s.pstyle("min-height-bias-bottom")}},f=l.boundingBox({includeLabels:u,includeOverlays:!1,useCache:!1}),c=o.position;(f.w===0||f.h===0)&&(f={w:s.pstyle("width").pfValue,h:s.pstyle("height").pfValue},f.x1=c.x-f.w/2,f.x2=c.x+f.w/2,f.y1=c.y-f.h/2,f.y2=c.y+f.h/2);function h(C,M,P){var B=0,L=0,k=M+P;return C>0&&k>0&&(B=M/k*C,L=P/k*C),{biasDiff:B,biasComplementDiff:L}}function d(C,M,P,B){if(P.units==="%")switch(B){case"width":return C>0?P.pfValue*C:0;case"height":return M>0?P.pfValue*M:0;case"average":return C>0&&M>0?P.pfValue*(C+M)/2:0;case"min":return C>0&&M>0?C>M?P.pfValue*M:P.pfValue*C:0;case"max":return C>0&&M>0?C>M?P.pfValue*C:P.pfValue*M:0;default:return 0}else return P.units==="px"?P.pfValue:0}var y=v.width.left.value;v.width.left.units==="px"&&v.width.val>0&&(y=y*100/v.width.val);var p=v.width.right.value;v.width.right.units==="px"&&v.width.val>0&&(p=p*100/v.width.val);var g=v.height.top.value;v.height.top.units==="px"&&v.height.val>0&&(g=g*100/v.height.val);var m=v.height.bottom.value;v.height.bottom.units==="px"&&v.height.val>0&&(m=m*100/v.height.val);var b=h(v.width.val-f.w,y,p),w=b.biasDiff,S=b.biasComplementDiff,E=h(v.height.val-f.h,g,m),x=E.biasDiff,D=E.biasComplementDiff;o.autoPadding=d(f.w,f.h,s.pstyle("padding"),s.pstyle("padding-relative-to").value),o.autoWidth=Math.max(f.w,v.width.val),c.x=(-w+f.x1+f.x2+S)/2,o.autoHeight=Math.max(f.h,v.height.val),c.y=(-x+f.y1+f.y2+D)/2}for(var a=0;ae.x2?n:e.x2,e.y1=ae.y2?i:e.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1)},ut=function(e,t){return t==null?e:Dr(e,t.x1,t.y1,t.x2,t.y2)},jt=function(e,t,a){return kr(e,t,a)},Na=function(e,t,a){if(!t.cy().headless()){var n=t._private,i=n.rstyle,s=i.arrowWidth/2,o=t.pstyle(a+"-arrow-shape").value,l,u;if(o!=="none"){a==="source"?(l=i.srcX,u=i.srcY):a==="target"?(l=i.tgtX,u=i.tgtY):(l=i.midX,u=i.midY);var v=n.arrowBounds=n.arrowBounds||{},f=v[a]=v[a]||{};f.x1=l-s,f.y1=u-s,f.x2=l+s,f.y2=u+s,f.w=f.x2-f.x1,f.h=f.y2-f.y1,Ga(f,1),Dr(e,f.x1,f.y1,f.x2,f.y2)}}},Nn=function(e,t,a){if(!t.cy().headless()){var n;a?n=a+"-":n="";var i=t._private,s=i.rstyle,o=t.pstyle(n+"label").strValue;if(o){var l=t.pstyle("text-halign"),u=t.pstyle("text-valign"),v=jt(s,"labelWidth",a),f=jt(s,"labelHeight",a),c=jt(s,"labelX",a),h=jt(s,"labelY",a),d=t.pstyle(n+"text-margin-x").pfValue,y=t.pstyle(n+"text-margin-y").pfValue,p=t.isEdge(),g=t.pstyle(n+"text-rotation"),m=t.pstyle("text-outline-width").pfValue,b=t.pstyle("text-border-width").pfValue,w=b/2,S=t.pstyle("text-background-padding").pfValue,E=2,x=f,D=v,C=D/2,M=x/2,P,B,L,k;if(p)P=c-C,B=c+C,L=h-M,k=h+M;else{switch(l.value){case"left":P=c-D,B=c;break;case"center":P=c-C,B=c+C;break;case"right":P=c,B=c+D;break}switch(u.value){case"top":L=h-x,k=h;break;case"center":L=h-M,k=h+M;break;case"bottom":L=h,k=h+x;break}}var O=d-Math.max(m,w)-S-E,A=d+Math.max(m,w)+S+E,R=y-Math.max(m,w)-S-E,I=y+Math.max(m,w)+S+E;P+=O,B+=A,L+=R,k+=I;var V=a||"main",G=i.labelBounds,F=G[V]=G[V]||{};F.x1=P,F.y1=L,F.x2=B,F.y2=k,F.w=B-P,F.h=k-L,F.leftPad=O,F.rightPad=A,F.topPad=R,F.botPad=I;var q=p&&g.strValue==="autorotate",Y=g.pfValue!=null&&g.pfValue!==0;if(q||Y){var Q=q?jt(i.rstyle,"labelAngle",a):g.pfValue,J=Math.cos(Q),_=Math.sin(Q),j=(P+B)/2,W=(L+k)/2;if(!p){switch(l.value){case"left":j=B;break;case"right":j=P;break}switch(u.value){case"top":W=k;break;case"bottom":W=L;break}}var z=function(le,oe){return le=le-j,oe=oe-W,{x:le*J-oe*_+j,y:le*_+oe*J+W}},K=z(P,L),X=z(P,k),ae=z(B,L),he=z(B,k);P=Math.min(K.x,X.x,ae.x,he.x),B=Math.max(K.x,X.x,ae.x,he.x),L=Math.min(K.y,X.y,ae.y,he.y),k=Math.max(K.y,X.y,ae.y,he.y)}var te=V+"Rot",re=G[te]=G[te]||{};re.x1=P,re.y1=L,re.x2=B,re.y2=k,re.w=B-P,re.h=k-L,Dr(e,P,L,B,k),Dr(i.labelBounds.all,P,L,B,k)}return e}},gh=function(e,t){if(!t.cy().headless()){var a=t.pstyle("outline-opacity").value,n=t.pstyle("outline-width").value;if(a>0&&n>0){var i=t.pstyle("outline-offset").value,s=t.pstyle("shape").value,o=n+i,l=(e.w+o*2)/e.w,u=(e.h+o*2)/e.h,v=0,f=0;["diamond","pentagon","round-triangle"].includes(s)?(l=(e.w+o*2.4)/e.w,f=-o/3.6):["concave-hexagon","rhomboid","right-rhomboid"].includes(s)?l=(e.w+o*2.4)/e.w:s==="star"?(l=(e.w+o*2.8)/e.w,u=(e.h+o*2.6)/e.h,f=-o/3.8):s==="triangle"?(l=(e.w+o*2.8)/e.w,u=(e.h+o*2.4)/e.h,f=-o/1.4):s==="vee"&&(l=(e.w+o*4.4)/e.w,u=(e.h+o*3.8)/e.h,f=-o*.5);var c=e.h*u-e.h,h=e.w*l-e.w;if(Ka(e,[Math.ceil(c/2),Math.ceil(h/2)]),v!=0||f!==0){var d=Iv(e,v,f);po(e,d)}}}},ph=function(e,t){var a=e._private.cy,n=a.styleEnabled(),i=a.headless(),s=hr(),o=e._private,l=e.isNode(),u=e.isEdge(),v,f,c,h,d,y,p=o.rstyle,g=l&&n?e.pstyle("bounds-expansion").pfValue:[0],m=function(ve){return ve.pstyle("display").value!=="none"},b=!n||m(e)&&(!u||m(e.source())&&m(e.target()));if(b){var w=0,S=0;n&&t.includeOverlays&&(w=e.pstyle("overlay-opacity").value,w!==0&&(S=e.pstyle("overlay-padding").value));var E=0,x=0;n&&t.includeUnderlays&&(E=e.pstyle("underlay-opacity").value,E!==0&&(x=e.pstyle("underlay-padding").value));var D=Math.max(S,x),C=0,M=0;if(n&&(C=e.pstyle("width").pfValue,M=C/2),l&&t.includeNodes){var P=e.position();d=P.x,y=P.y;var B=e.outerWidth(),L=B/2,k=e.outerHeight(),O=k/2;v=d-L,f=d+L,c=y-O,h=y+O,Dr(s,v,c,f,h),n&&t.includeOutlines&&gh(s,e)}else if(u&&t.includeEdges)if(n&&!i){var A=e.pstyle("curve-style").strValue;if(v=Math.min(p.srcX,p.midX,p.tgtX),f=Math.max(p.srcX,p.midX,p.tgtX),c=Math.min(p.srcY,p.midY,p.tgtY),h=Math.max(p.srcY,p.midY,p.tgtY),v-=M,f+=M,c-=M,h+=M,Dr(s,v,c,f,h),A==="haystack"){var R=p.haystackPts;if(R&&R.length===2){if(v=R[0].x,c=R[0].y,f=R[1].x,h=R[1].y,v>f){var I=v;v=f,f=I}if(c>h){var V=c;c=h,h=V}Dr(s,v-M,c-M,f+M,h+M)}}else if(A==="bezier"||A==="unbundled-bezier"||A.endsWith("segments")||A.endsWith("taxi")){var G;switch(A){case"bezier":case"unbundled-bezier":G=p.bezierPts;break;case"segments":case"taxi":case"round-segments":case"round-taxi":G=p.linePts;break}if(G!=null)for(var F=0;Ff){var j=v;v=f,f=j}if(c>h){var W=c;c=h,h=W}v-=M,f+=M,c-=M,h+=M,Dr(s,v,c,f,h)}if(n&&t.includeEdges&&u&&(Na(s,e,"mid-source"),Na(s,e,"mid-target"),Na(s,e,"source"),Na(s,e,"target")),n){var z=e.pstyle("ghost").value==="yes";if(z){var K=e.pstyle("ghost-offset-x").pfValue,X=e.pstyle("ghost-offset-y").pfValue;Dr(s,s.x1+K,s.y1+X,s.x2+K,s.y2+X)}}var ae=o.bodyBounds=o.bodyBounds||{};Hi(ae,s),Ka(ae,g),Ga(ae,1),n&&(v=s.x1,f=s.x2,c=s.y1,h=s.y2,Dr(s,v-D,c-D,f+D,h+D));var he=o.overlayBounds=o.overlayBounds||{};Hi(he,s),Ka(he,g),Ga(he,1);var te=o.labelBounds=o.labelBounds||{};te.all!=null?Ov(te.all):te.all=hr(),n&&t.includeLabels&&(t.includeMainLabels&&Nn(s,e,null),u&&(t.includeSourceLabels&&Nn(s,e,"source"),t.includeTargetLabels&&Nn(s,e,"target")))}return s.x1=xr(s.x1),s.y1=xr(s.y1),s.x2=xr(s.x2),s.y2=xr(s.y2),s.w=xr(s.x2-s.x1),s.h=xr(s.y2-s.y1),s.w>0&&s.h>0&&b&&(Ka(s,g),Ga(s,1)),s},Go=function(e){var t=0,a=function(s){return(s?1:0)<0&&arguments[0]!==void 0?arguments[0]:Lh,e=arguments.length>1?arguments[1]:void 0,t=0;t=0;o--)s(o);return this};at.removeAllListeners=function(){return this.removeListener("*")};at.emit=at.trigger=function(r,e,t){var a=this.listeners,n=a.length;return this.emitting++,Oe(e)||(e=[e]),Ah(this,function(i,s){t!=null&&(a=[{event:s.event,type:s.type,namespace:s.namespace,callback:t}],n=a.length);for(var o=function(v){var f=a[v];if(f.type===s.type&&(!f.namespace||f.namespace===s.namespace||f.namespace===Mh)&&i.eventMatches(i.context,f,s)){var c=[s];e!=null&&uv(c,e),i.beforeEmit(i.context,f,s),f.conf&&f.conf.one&&(i.listeners=i.listeners.filter(function(y){return y!==f}));var h=i.callbackContext(i.context,f,s),d=f.callback.apply(h,c);i.afterEmit(i.context,f,s),d===!1&&(s.stopPropagation(),s.preventDefault())}},l=0;l1&&!s){var o=this.length-1,l=this[o],u=l._private.data.id;this[o]=void 0,this[e]=l,i.set(u,{ele:l,index:e})}return this.length--,this},unmergeOne:function(e){e=e[0];var t=this._private,a=e._private.data.id,n=t.map,i=n.get(a);if(!i)return this;var s=i.index;return this.unmergeAt(s),this},unmerge:function(e){var t=this._private.cy;if(!e)return this;if(e&&ce(e)){var a=e;e=t.mutableElements().filter(a)}for(var n=0;n=0;t--){var a=this[t];e(a)&&this.unmergeAt(t)}return this},map:function(e,t){for(var a=[],n=this,i=0;ia&&(a=l,n=o)}return{value:a,ele:n}},min:function(e,t){for(var a=1/0,n,i=this,s=0;s=0&&i"u"?"undefined":Ue(Symbol))!=e&&Ue(Symbol.iterator)!=e;t&&(nn[Symbol.iterator]=function(){var a=this,n={value:void 0,done:!1},i=0,s=this.length;return Ys({next:function(){return i1&&arguments[1]!==void 0?arguments[1]:!0,a=this[0],n=a.cy();if(n.styleEnabled()&&a){this.cleanStyle();var i=a._private.style[e];return i??(t?n.style().getDefaultProperty(e):null)}},numericStyle:function(e){var t=this[0];if(t.cy().styleEnabled()&&t){var a=t.pstyle(e);return a.pfValue!==void 0?a.pfValue:a.value}},numericStyleUnits:function(e){var t=this[0];if(t.cy().styleEnabled()&&t)return t.pstyle(e).units},renderedStyle:function(e){var t=this.cy();if(!t.styleEnabled())return this;var a=this[0];if(a)return t.style().getRenderedStyle(a,e)},style:function(e,t){var a=this.cy();if(!a.styleEnabled())return this;var n=!1,i=a.style();if(Te(e)){var s=e;i.applyBypass(this,s,n),this.emitAndNotify("style")}else if(ce(e))if(t===void 0){var o=this[0];return o?i.getStylePropertyValue(o,e):void 0}else i.applyBypass(this,e,t,n),this.emitAndNotify("style");else if(e===void 0){var l=this[0];return l?i.getRawStyle(l):void 0}return this},removeStyle:function(e){var t=this.cy();if(!t.styleEnabled())return this;var a=!1,n=t.style(),i=this;if(e===void 0)for(var s=0;s0&&e.push(v[0]),e.push(o[0])}return this.spawn(e,!0).filter(r)},"neighborhood"),closedNeighborhood:function(e){return this.neighborhood().add(this).filter(e)},openNeighborhood:function(e){return this.neighborhood(e)}});ir.neighbourhood=ir.neighborhood;ir.closedNeighbourhood=ir.closedNeighborhood;ir.openNeighbourhood=ir.openNeighborhood;pe(ir,{source:Er(function(e){var t=this[0],a;return t&&(a=t._private.source||t.cy().collection()),a&&e?a.filter(e):a},"source"),target:Er(function(e){var t=this[0],a;return t&&(a=t._private.target||t.cy().collection()),a&&e?a.filter(e):a},"target"),sources:ws({attr:"source"}),targets:ws({attr:"target"})});function ws(r){return function(t){for(var a=[],n=0;n0);return s},component:function(){var e=this[0];return e.cy().mutableElements().components(e)[0]}});ir.componentsOf=ir.components;var er=function(e,t){var a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(e===void 0){$e("A collection must have a reference to the core");return}var i=new Ir,s=!1;if(!t)t=[];else if(t.length>0&&Te(t[0])&&!xa(t[0])){s=!0;for(var o=[],l=new Vt,u=0,v=t.length;u0&&arguments[0]!==void 0?arguments[0]:!0,e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,t=this,a=t.cy(),n=a._private,i=[],s=[],o,l=0,u=t.length;l0){for(var V=o.length===t.length?t:new er(a,o),G=0;G0&&arguments[0]!==void 0?arguments[0]:!0,e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,t=this,a=[],n={},i=t._private.cy;function s(k){for(var O=k._private.edges,A=0;A0&&(r?P.emitAndNotify("remove"):e&&P.emit("remove"));for(var B=0;B0?B=k:P=k;while(Math.abs(L)>s&&++O=i?m(M,O):A===0?O:w(M,P,P+u)}var E=!1;function x(){E=!0,(r!==e||t!==a)&&b()}var D=function(P){return E||x(),r===e&&t===a?P:P===0?0:P===1?1:p(S(P),e,a)};D.getControlPoints=function(){return[{x:r,y:e},{x:t,y:a}]};var C="generateBezier("+[r,e,t,a]+")";return D.toString=function(){return C},D}/*! Runge-Kutta spring physics function generator. Adapted from Framer.js, copyright Koen Bok. MIT License: http://en.wikipedia.org/wiki/MIT_License */var Gh=function(){function r(a){return-a.tension*a.x-a.friction*a.v}function e(a,n,i){var s={x:a.x+i.dx*n,v:a.v+i.dv*n,tension:a.tension,friction:a.friction};return{dx:s.v,dv:r(s)}}function t(a,n){var i={dx:a.v,dv:r(a)},s=e(a,n*.5,i),o=e(a,n*.5,s),l=e(a,n,o),u=1/6*(i.dx+2*(s.dx+o.dx)+l.dx),v=1/6*(i.dv+2*(s.dv+o.dv)+l.dv);return a.x=a.x+u*n,a.v=a.v+v*n,a}return function a(n,i,s){var o={x:-1,v:0,tension:null,friction:null},l=[0],u=0,v=1/1e4,f=16/1e3,c,h,d;for(n=parseFloat(n)||500,i=parseFloat(i)||20,s=s||null,o.tension=n,o.friction=i,c=s!==null,c?(u=a(n,i),h=u/s*f):h=f;d=t(d||o,h),l.push(1+d.x),u+=16,Math.abs(d.x)>v&&Math.abs(d.v)>v;);return c?function(y){return l[y*(l.length-1)|0]}:u}}(),ze=function(e,t,a,n){var i=Hh(e,t,a,n);return function(s,o,l){return s+(o-s)*i(l)}},Ya={linear:function(e,t,a){return e+(t-e)*a},ease:ze(.25,.1,.25,1),"ease-in":ze(.42,0,1,1),"ease-out":ze(0,0,.58,1),"ease-in-out":ze(.42,0,.58,1),"ease-in-sine":ze(.47,0,.745,.715),"ease-out-sine":ze(.39,.575,.565,1),"ease-in-out-sine":ze(.445,.05,.55,.95),"ease-in-quad":ze(.55,.085,.68,.53),"ease-out-quad":ze(.25,.46,.45,.94),"ease-in-out-quad":ze(.455,.03,.515,.955),"ease-in-cubic":ze(.55,.055,.675,.19),"ease-out-cubic":ze(.215,.61,.355,1),"ease-in-out-cubic":ze(.645,.045,.355,1),"ease-in-quart":ze(.895,.03,.685,.22),"ease-out-quart":ze(.165,.84,.44,1),"ease-in-out-quart":ze(.77,0,.175,1),"ease-in-quint":ze(.755,.05,.855,.06),"ease-out-quint":ze(.23,1,.32,1),"ease-in-out-quint":ze(.86,0,.07,1),"ease-in-expo":ze(.95,.05,.795,.035),"ease-out-expo":ze(.19,1,.22,1),"ease-in-out-expo":ze(1,0,0,1),"ease-in-circ":ze(.6,.04,.98,.335),"ease-out-circ":ze(.075,.82,.165,1),"ease-in-out-circ":ze(.785,.135,.15,.86),spring:function(e,t,a){if(a===0)return Ya.linear;var n=Gh(e,t,a);return function(i,s,o){return i+(s-i)*n(o)}},"cubic-bezier":ze};function Cs(r,e,t,a,n){if(a===1||e===t)return t;var i=n(e,t,a);return r==null||((r.roundValue||r.color)&&(i=Math.round(i)),r.min!==void 0&&(i=Math.max(i,r.min)),r.max!==void 0&&(i=Math.min(i,r.max))),i}function Ss(r,e){return r.pfValue!=null||r.value!=null?r.pfValue!=null&&(e==null||e.type.units!=="%")?r.pfValue:r.value:r}function Ct(r,e,t,a,n){var i=n!=null?n.type:null;t<0?t=0:t>1&&(t=1);var s=Ss(r,n),o=Ss(e,n);if(ne(s)&&ne(o))return Cs(i,s,o,t,a);if(Oe(s)&&Oe(o)){for(var l=[],u=0;u0?(h==="spring"&&d.push(s.duration),s.easingImpl=Ya[h].apply(null,d)):s.easingImpl=Ya[h]}var y=s.easingImpl,p;if(s.duration===0?p=1:p=(t-l)/s.duration,s.applying&&(p=s.progress),p<0?p=0:p>1&&(p=1),s.delay==null){var g=s.startPosition,m=s.position;if(m&&n&&!r.locked()){var b={};ra(g.x,m.x)&&(b.x=Ct(g.x,m.x,p,y)),ra(g.y,m.y)&&(b.y=Ct(g.y,m.y,p,y)),r.position(b)}var w=s.startPan,S=s.pan,E=i.pan,x=S!=null&&a;x&&(ra(w.x,S.x)&&(E.x=Ct(w.x,S.x,p,y)),ra(w.y,S.y)&&(E.y=Ct(w.y,S.y,p,y)),r.emit("pan"));var D=s.startZoom,C=s.zoom,M=C!=null&&a;M&&(ra(D,C)&&(i.zoom=da(i.minZoom,Ct(D,C,p,y),i.maxZoom)),r.emit("zoom")),(x||M)&&r.emit("viewport");var P=s.style;if(P&&P.length>0&&n){for(var B=0;B=0;x--){var D=E[x];D()}E.splice(0,E.length)},m=h.length-1;m>=0;m--){var b=h[m],w=b._private;if(w.stopped){h.splice(m,1),w.hooked=!1,w.playing=!1,w.started=!1,g(w.frames);continue}!w.playing&&!w.applying||(w.playing&&w.applying&&(w.applying=!1),w.started||Wh(v,b,r),Kh(v,b,r,f),w.applying&&(w.applying=!1),g(w.frames),w.step!=null&&w.step(r),b.completed()&&(h.splice(m,1),w.hooked=!1,w.playing=!1,w.started=!1,g(w.completes)),y=!0)}return!f&&h.length===0&&d.length===0&&a.push(v),y}for(var i=!1,s=0;s0?e.notify("draw",t):e.notify("draw")),t.unmerge(a),e.emit("step")}var Uh={animate:Be.animate(),animation:Be.animation(),animated:Be.animated(),clearQueue:Be.clearQueue(),delay:Be.delay(),delayAnimation:Be.delayAnimation(),stop:Be.stop(),addToAnimationPool:function(e){var t=this;t.styleEnabled()&&t._private.aniEles.merge(e)},stopAnimationLoop:function(){this._private.animationsRunning=!1},startAnimationLoop:function(){var e=this;if(e._private.animationsRunning=!0,!e.styleEnabled())return;function t(){e._private.animationsRunning&&ja(function(i){Ts(i,e),t()})}var a=e.renderer();a&&a.beforeRender?a.beforeRender(function(i,s){Ts(s,e)},a.beforeRenderPriorities.animations):t()}},Yh={qualifierCompare:function(e,t){return e==null||t==null?e==null&&t==null:e.sameText(t)},eventMatches:function(e,t,a){var n=t.qualifier;return n!=null?e!==a.target&&xa(a.target)&&n.matches(a.target):!0},addEventFields:function(e,t){t.cy=e,t.target=e},callbackContext:function(e,t,a){return t.qualifier!=null?a.target:e}},qa=function(e){return ce(e)?new rt(e):e},eu={createEmitter:function(){var e=this._private;return e.emitter||(e.emitter=new wn(Yh,this)),this},emitter:function(){return this._private.emitter},on:function(e,t,a){return this.emitter().on(e,qa(t),a),this},removeListener:function(e,t,a){return this.emitter().removeListener(e,qa(t),a),this},removeAllListeners:function(){return this.emitter().removeAllListeners(),this},one:function(e,t,a){return this.emitter().one(e,qa(t),a),this},once:function(e,t,a){return this.emitter().one(e,qa(t),a),this},emit:function(e,t){return this.emitter().emit(e,t),this},emitAndNotify:function(e,t){return this.emit(e),this.notify(e,t),this}};Be.eventAliasesOn(eu);var Zn={png:function(e){var t=this._private.renderer;return e=e||{},t.png(e)},jpg:function(e){var t=this._private.renderer;return e=e||{},e.bg=e.bg||"#fff",t.jpg(e)}};Zn.jpeg=Zn.jpg;var Xa={layout:function(e){var t=this;if(e==null){$e("Layout options must be specified to make a layout");return}if(e.name==null){$e("A `name` must be specified to make a layout");return}var a=e.name,n=t.extension("layout",a);if(n==null){$e("No such layout `"+a+"` found. Did you forget to import it and `cytoscape.use()` it?");return}var i;ce(e.eles)?i=t.$(e.eles):i=e.eles!=null?e.eles:t.$();var s=new n(pe({},e,{cy:t,eles:i}));return s}};Xa.createLayout=Xa.makeLayout=Xa.layout;var Xh={notify:function(e,t){var a=this._private;if(this.batching()){a.batchNotifications=a.batchNotifications||{};var n=a.batchNotifications[e]=a.batchNotifications[e]||this.collection();t!=null&&n.merge(t);return}if(a.notificationsEnabled){var i=this.renderer();this.destroyed()||!i||i.notify(e,t)}},notifications:function(e){var t=this._private;return e===void 0?t.notificationsEnabled:(t.notificationsEnabled=!!e,this)},noNotifications:function(e){this.notifications(!1),e(),this.notifications(!0)},batching:function(){return this._private.batchCount>0},startBatch:function(){var e=this._private;return e.batchCount==null&&(e.batchCount=0),e.batchCount===0&&(e.batchStyleEles=this.collection(),e.batchNotifications={}),e.batchCount++,this},endBatch:function(){var e=this._private;if(e.batchCount===0)return this;if(e.batchCount--,e.batchCount===0){e.batchStyleEles.updateStyle();var t=this.renderer();Object.keys(e.batchNotifications).forEach(function(a){var n=e.batchNotifications[a];n.empty()?t.notify(a):t.notify(a,n)})}return this},batch:function(e){return this.startBatch(),e(),this.endBatch(),this},batchData:function(e){var t=this;return this.batch(function(){for(var a=Object.keys(e),n=0;n0;)t.removeChild(t.childNodes[0]);e._private.renderer=null,e.mutableElements().forEach(function(a){var n=a._private;n.rscratch={},n.rstyle={},n.animation.current=[],n.animation.queue=[]})},onRender:function(e){return this.on("render",e)},offRender:function(e){return this.off("render",e)}};Qn.invalidateDimensions=Qn.resize;var Za={collection:function(e,t){return ce(e)?this.$(e):yr(e)?e.collection():Oe(e)?(t||(t={}),new er(this,e,t.unique,t.removed)):new er(this)},nodes:function(e){var t=this.$(function(a){return a.isNode()});return e?t.filter(e):t},edges:function(e){var t=this.$(function(a){return a.isEdge()});return e?t.filter(e):t},$:function(e){var t=this._private.elements;return e?t.filter(e):t.spawnSelf()},mutableElements:function(){return this._private.elements}};Za.elements=Za.filter=Za.$;var or={},oa="t",Qh="f";or.apply=function(r){for(var e=this,t=e._private,a=t.cy,n=a.collection(),i=0;i0;if(c||f&&h){var d=void 0;c&&h||c?d=u.properties:h&&(d=u.mappedProperties);for(var y=0;y1&&(w=1),o.color){var E=a.valueMin[0],x=a.valueMax[0],D=a.valueMin[1],C=a.valueMax[1],M=a.valueMin[2],P=a.valueMax[2],B=a.valueMin[3]==null?1:a.valueMin[3],L=a.valueMax[3]==null?1:a.valueMax[3],k=[Math.round(E+(x-E)*w),Math.round(D+(C-D)*w),Math.round(M+(P-M)*w),Math.round(B+(L-B)*w)];i={bypass:a.bypass,name:a.name,value:k,strValue:"rgb("+k[0]+", "+k[1]+", "+k[2]+")"}}else if(o.number){var O=a.valueMin+(a.valueMax-a.valueMin)*w;i=this.parse(a.name,O,a.bypass,c)}else return!1;if(!i)return y(),!1;i.mapping=a,a=i;break}case s.data:{for(var A=a.field.split("."),R=f.data,I=0;I0&&i>0){for(var o={},l=!1,u=0;u0?r.delayAnimation(s).play().promise().then(b):b()}).then(function(){return r.animation({style:o,duration:i,easing:r.pstyle("transition-timing-function").value,queue:!1}).play().promise()}).then(function(){t.removeBypasses(r,n),r.emitAndNotify("style"),a.transitioning=!1})}else a.transitioning&&(this.removeBypasses(r,n),r.emitAndNotify("style"),a.transitioning=!1)};or.checkTrigger=function(r,e,t,a,n,i){var s=this.properties[e],o=n(s);o!=null&&o(t,a)&&i(s)};or.checkZOrderTrigger=function(r,e,t,a){var n=this;this.checkTrigger(r,e,t,a,function(i){return i.triggersZOrder},function(){n._private.cy.notify("zorder",r)})};or.checkBoundsTrigger=function(r,e,t,a){this.checkTrigger(r,e,t,a,function(n){return n.triggersBounds},function(n){r.dirtyCompoundBoundsCache(),r.dirtyBoundingBoxCache(),n.triggersBoundsOfParallelBeziers&&e==="curve-style"&&(t==="bezier"||a==="bezier")&&r.parallelEdges().forEach(function(i){i.isBundledBezier()&&i.dirtyBoundingBoxCache()}),n.triggersBoundsOfConnectedEdges&&e==="display"&&(t==="none"||a==="none")&&r.connectedEdges().forEach(function(i){i.dirtyBoundingBoxCache()})})};or.checkTriggers=function(r,e,t,a){r.dirtyStyleCache(),this.checkZOrderTrigger(r,e,t,a),this.checkBoundsTrigger(r,e,t,a)};var Ta={};Ta.applyBypass=function(r,e,t,a){var n=this,i=[],s=!0;if(e==="*"||e==="**"){if(t!==void 0)for(var o=0;on.length?a=a.substr(n.length):a=""}function l(){i.length>s.length?i=i.substr(s.length):i=""}for(;;){var u=a.match(/^\s*$/);if(u)break;var v=a.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/);if(!v){Me("Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: "+a);break}n=v[0];var f=v[1];if(f!=="core"){var c=new rt(f);if(c.invalid){Me("Skipping parsing of block: Invalid selector found in string stylesheet: "+f),o();continue}}var h=v[2],d=!1;i=h;for(var y=[];;){var p=i.match(/^\s*$/);if(p)break;var g=i.match(/^\s*(.+?)\s*:\s*(.+?)(?:\s*;|\s*$)/);if(!g){Me("Skipping parsing of block: Invalid formatting of style property and value definitions found in:"+h),d=!0;break}s=g[0];var m=g[1],b=g[2],w=e.properties[m];if(!w){Me("Skipping property: Invalid property name in: "+s),l();continue}var S=t.parse(m,b);if(!S){Me("Skipping property: Invalid property definition in: "+s),l();continue}y.push({name:m,val:b}),l()}if(d){o();break}t.selector(f);for(var E=0;E=7&&e[0]==="d"&&(v=new RegExp(o.data.regex).exec(e))){if(t)return!1;var c=o.data;return{name:r,value:v,strValue:""+e,mapped:c,field:v[1],bypass:t}}else if(e.length>=10&&e[0]==="m"&&(f=new RegExp(o.mapData.regex).exec(e))){if(t||u.multiple)return!1;var h=o.mapData;if(!(u.color||u.number))return!1;var d=this.parse(r,f[4]);if(!d||d.mapped)return!1;var y=this.parse(r,f[5]);if(!y||y.mapped)return!1;if(d.pfValue===y.pfValue||d.strValue===y.strValue)return Me("`"+r+": "+e+"` is not a valid mapper because the output range is zero; converting to `"+r+": "+d.strValue+"`"),this.parse(r,d.strValue);if(u.color){var p=d.value,g=y.value,m=p[0]===g[0]&&p[1]===g[1]&&p[2]===g[2]&&(p[3]===g[3]||(p[3]==null||p[3]===1)&&(g[3]==null||g[3]===1));if(m)return!1}return{name:r,value:f,strValue:""+e,mapped:h,field:f[1],fieldMin:parseFloat(f[2]),fieldMax:parseFloat(f[3]),valueMin:d.value,valueMax:y.value,bypass:t}}}if(u.multiple&&a!=="multiple"){var b;if(l?b=e.split(/\s+/):Oe(e)?b=e:b=[e],u.evenMultiple&&b.length%2!==0)return null;for(var w=[],S=[],E=[],x="",D=!1,C=0;C0?" ":"")+M.strValue}return u.validate&&!u.validate(w,S)?null:u.singleEnum&&D?w.length===1&&ce(w[0])?{name:r,value:w[0],strValue:w[0],bypass:t}:null:{name:r,value:w,pfValue:E,strValue:x,bypass:t,units:S}}var P=function(){for(var z=0;zu.max||u.strictMax&&e===u.max))return null;var A={name:r,value:e,strValue:""+e+(B||""),units:B,bypass:t};return u.unitless||B!=="px"&&B!=="em"?A.pfValue=e:A.pfValue=B==="px"||!B?e:this.getEmSizeInPixels()*e,(B==="ms"||B==="s")&&(A.pfValue=B==="ms"?e:1e3*e),(B==="deg"||B==="rad")&&(A.pfValue=B==="rad"?e:Mv(e)),B==="%"&&(A.pfValue=e/100),A}else if(u.propList){var R=[],I=""+e;if(I!=="none"){for(var V=I.split(/\s*,\s*|\s+/),G=0;G0&&o>0&&!isNaN(a.w)&&!isNaN(a.h)&&a.w>0&&a.h>0){l=Math.min((s-2*t)/a.w,(o-2*t)/a.h),l=l>this._private.maxZoom?this._private.maxZoom:l,l=l=a.minZoom&&(a.maxZoom=t),this},minZoom:function(e){return e===void 0?this._private.minZoom:this.zoomRange({min:e})},maxZoom:function(e){return e===void 0?this._private.maxZoom:this.zoomRange({max:e})},getZoomedViewport:function(e){var t=this._private,a=t.pan,n=t.zoom,i,s,o=!1;if(t.zoomingEnabled||(o=!0),ne(e)?s=e:Te(e)&&(s=e.level,e.position!=null?i=hn(e.position,n,a):e.renderedPosition!=null&&(i=e.renderedPosition),i!=null&&!t.panningEnabled&&(o=!0)),s=s>t.maxZoom?t.maxZoom:s,s=st.maxZoom||!t.zoomingEnabled?s=!0:(t.zoom=l,i.push("zoom"))}if(n&&(!s||!e.cancelOnFailedZoom)&&t.panningEnabled){var u=e.pan;ne(u.x)&&(t.pan.x=u.x,o=!1),ne(u.y)&&(t.pan.y=u.y,o=!1),o||i.push("pan")}return i.length>0&&(i.push("viewport"),this.emit(i.join(" ")),this.notify("viewport")),this},center:function(e){var t=this.getCenterPan(e);return t&&(this._private.pan=t,this.emit("pan viewport"),this.notify("viewport")),this},getCenterPan:function(e,t){if(this._private.panningEnabled){if(ce(e)){var a=e;e=this.mutableElements().filter(a)}else yr(e)||(e=this.mutableElements());if(e.length!==0){var n=e.boundingBox(),i=this.width(),s=this.height();t=t===void 0?this._private.zoom:t;var o={x:(i-t*(n.x1+n.x2))/2,y:(s-t*(n.y1+n.y2))/2};return o}}},reset:function(){return!this._private.panningEnabled||!this._private.zoomingEnabled?this:(this.viewport({pan:{x:0,y:0},zoom:1}),this)},invalidateSize:function(){this._private.sizeCache=null},size:function(){var e=this._private,t=e.container,a=this;return e.sizeCache=e.sizeCache||(t?function(){var n=a.window().getComputedStyle(t),i=function(o){return parseFloat(n.getPropertyValue(o))};return{width:t.clientWidth-i("padding-left")-i("padding-right"),height:t.clientHeight-i("padding-top")-i("padding-bottom")}}():{width:1,height:1})},width:function(){return this.size().width},height:function(){return this.size().height},extent:function(){var e=this._private.pan,t=this._private.zoom,a=this.renderedExtent(),n={x1:(a.x1-e.x)/t,x2:(a.x2-e.x)/t,y1:(a.y1-e.y)/t,y2:(a.y2-e.y)/t};return n.w=n.x2-n.x1,n.h=n.y2-n.y1,n},renderedExtent:function(){var e=this.width(),t=this.height();return{x1:0,y1:0,x2:e,y2:t,w:e,h:t}},multiClickDebounceTime:function(e){if(e)this._private.multiClickDebounceTime=e;else return this._private.multiClickDebounceTime;return this}};yt.centre=yt.center;yt.autolockNodes=yt.autolock;yt.autoungrabifyNodes=yt.autoungrabify;var ma={data:Be.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeData:Be.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),scratch:Be.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:Be.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0})};ma.attr=ma.data;ma.removeAttr=ma.removeData;var ba=function(e){var t=this;e=pe({},e);var a=e.container;a&&!_a(a)&&_a(a[0])&&(a=a[0]);var n=a?a._cyreg:null;n=n||{},n&&n.cy&&(n.cy.destroy(),n={});var i=n.readies=n.readies||[];a&&(a._cyreg=n),n.cy=t;var s=Ke!==void 0&&a!==void 0&&!e.headless,o=e;o.layout=pe({name:s?"grid":"null"},o.layout),o.renderer=pe({name:s?"canvas":"null"},o.renderer);var l=function(d,y,p){return y!==void 0?y:p!==void 0?p:d},u=this._private={container:a,ready:!1,options:o,elements:new er(this),listeners:[],aniEles:new er(this),data:o.data||{},scratch:{},layout:null,renderer:null,destroyed:!1,notificationsEnabled:!0,minZoom:1e-50,maxZoom:1e50,zoomingEnabled:l(!0,o.zoomingEnabled),userZoomingEnabled:l(!0,o.userZoomingEnabled),panningEnabled:l(!0,o.panningEnabled),userPanningEnabled:l(!0,o.userPanningEnabled),boxSelectionEnabled:l(!0,o.boxSelectionEnabled),autolock:l(!1,o.autolock,o.autolockNodes),autoungrabify:l(!1,o.autoungrabify,o.autoungrabifyNodes),autounselectify:l(!1,o.autounselectify),styleEnabled:o.styleEnabled===void 0?s:o.styleEnabled,zoom:ne(o.zoom)?o.zoom:1,pan:{x:Te(o.pan)&&ne(o.pan.x)?o.pan.x:0,y:Te(o.pan)&&ne(o.pan.y)?o.pan.y:0},animation:{current:[],queue:[]},hasCompoundNodes:!1,multiClickDebounceTime:l(250,o.multiClickDebounceTime)};this.createEmitter(),this.selectionType(o.selectionType),this.zoomRange({min:o.minZoom,max:o.maxZoom});var v=function(d,y){var p=d.some(el);if(p)return qt.all(d).then(y);y(d)};u.styleEnabled&&t.setStyle([]);var f=pe({},o,o.renderer);t.initRenderer(f);var c=function(d,y,p){t.notifications(!1);var g=t.mutableElements();g.length>0&&g.remove(),d!=null&&(Te(d)||Oe(d))&&t.add(d),t.one("layoutready",function(b){t.notifications(!0),t.emit(b),t.one("load",y),t.emitAndNotify("load")}).one("layoutstop",function(){t.one("done",p),t.emit("done")});var m=pe({},t._private.options.layout);m.eles=t.elements(),t.layout(m).run()};v([o.style,o.elements],function(h){var d=h[0],y=h[1];u.styleEnabled&&t.style().append(d),c(y,function(){t.startAnimationLoop(),u.ready=!0,qe(o.ready)&&t.on("ready",o.ready);for(var p=0;p0,l=hr(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:t.width(),h:t.height()}),u;if(yr(e.roots))u=e.roots;else if(Oe(e.roots)){for(var v=[],f=0;f0;){var O=k(),A=M(O,B);if(A)O.outgoers().filter(function(te){return te.isNode()&&a.has(te)}).forEach(L);else if(A===null){Me("Detected double maximal shift for node `"+O.id()+"`. Bailing maximal adjustment due to cycle. Use `options.maximal: true` only on DAGs.");break}}}C();var R=0;if(e.avoidOverlap)for(var I=0;I0&&g[0].length<=3?xe/2:0),Pe=2*Math.PI/g[le].length*oe;return le===0&&g[0].length===1&&(Ee=1),{x:X.x+Ee*Math.cos(Pe),y:X.y+Ee*Math.sin(Pe)}}else{var Ae={x:X.x+(oe+1-(de+1)/2)*Le,y:(le+1)*Ce};return Ae}};return a.nodes().layoutPositions(this,e,he),this};var rg={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,radius:void 0,startAngle:3/2*Math.PI,sweep:void 0,clockwise:!0,sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function tu(r){this.options=pe({},rg,r)}tu.prototype.run=function(){var r=this.options,e=r,t=r.cy,a=e.eles,n=e.counterclockwise!==void 0?!e.counterclockwise:e.clockwise,i=a.nodes().not(":parent");e.sort&&(i=i.sort(e.sort));for(var s=hr(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:t.width(),h:t.height()}),o={x:s.x1+s.w/2,y:s.y1+s.h/2},l=e.sweep===void 0?2*Math.PI-2*Math.PI/i.length:e.sweep,u=l/Math.max(1,i.length-1),v,f=0,c=0;c1&&e.avoidOverlap){f*=1.75;var g=Math.cos(u)-Math.cos(0),m=Math.sin(u)-Math.sin(0),b=Math.sqrt(f*f/(g*g+m*m));v=Math.max(b,v)}var w=function(E,x){var D=e.startAngle+x*u*(n?1:-1),C=v*Math.cos(D),M=v*Math.sin(D),P={x:o.x+C,y:o.y+M};return P};return a.nodes().layoutPositions(this,e,w),this};var tg={fit:!0,padding:30,startAngle:3/2*Math.PI,sweep:void 0,clockwise:!0,equidistant:!1,minNodeSpacing:10,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,height:void 0,width:void 0,spacingFactor:void 0,concentric:function(e){return e.degree()},levelWidth:function(e){return e.maxDegree()/4},animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function au(r){this.options=pe({},tg,r)}au.prototype.run=function(){for(var r=this.options,e=r,t=e.counterclockwise!==void 0?!e.counterclockwise:e.clockwise,a=r.cy,n=e.eles,i=n.nodes().not(":parent"),s=hr(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:a.width(),h:a.height()}),o={x:s.x1+s.w/2,y:s.y1+s.h/2},l=[],u=0,v=0;v0){var S=Math.abs(m[0].value-w.value);S>=p&&(m=[],g.push(m))}m.push(w)}var E=u+e.minNodeSpacing;if(!e.avoidOverlap){var x=g.length>0&&g[0].length>1,D=Math.min(s.w,s.h)/2-E,C=D/(g.length+x?1:0);E=Math.min(E,C)}for(var M=0,P=0;P1&&e.avoidOverlap){var O=Math.cos(k)-Math.cos(0),A=Math.sin(k)-Math.sin(0),R=Math.sqrt(E*E/(O*O+A*A));M=Math.max(R,M)}B.r=M,M+=E}if(e.equidistant){for(var I=0,V=0,G=0;G=r.numIter||(vg(a,r),a.temperature=a.temperature*r.coolingFactor,a.temperature=r.animationThreshold&&i(),ja(f)}};v()}else{for(;u;)u=s(l),l++;Ps(a,r),o()}return this};Tn.prototype.stop=function(){return this.stopped=!0,this.thread&&this.thread.stop(),this.emit("layoutstop"),this};Tn.prototype.destroy=function(){return this.thread&&this.thread.stop(),this};var ng=function(e,t,a){for(var n=a.eles.edges(),i=a.eles.nodes(),s=hr(a.boundingBox?a.boundingBox:{x1:0,y1:0,w:e.width(),h:e.height()}),o={isCompound:e.hasCompoundNodes(),layoutNodes:[],idToIndex:{},nodeSize:i.size(),graphSet:[],indexToGraph:[],layoutEdges:[],edgeSize:n.size(),temperature:a.initialTemp,clientWidth:s.w,clientHeight:s.h,boundingBox:s},l=a.eles.components(),u={},v=0;v0){o.graphSet.push(D);for(var v=0;vn.count?0:n.graph},sg=function r(e,t,a,n){var i=n.graphSet[a];if(-10)var f=n.nodeOverlap*v,c=Math.sqrt(o*o+l*l),h=f*o/c,d=f*l/c;else var y=on(e,o,l),p=on(t,-1*o,-1*l),g=p.x-y.x,m=p.y-y.y,b=g*g+m*m,c=Math.sqrt(b),f=(e.nodeRepulsion+t.nodeRepulsion)/b,h=f*g/c,d=f*m/c;e.isLocked||(e.offsetX-=h,e.offsetY-=d),t.isLocked||(t.offsetX+=h,t.offsetY+=d)}},dg=function(e,t,a,n){if(a>0)var i=e.maxX-t.minX;else var i=t.maxX-e.minX;if(n>0)var s=e.maxY-t.minY;else var s=t.maxY-e.minY;return i>=0&&s>=0?Math.sqrt(i*i+s*s):0},on=function(e,t,a){var n=e.positionX,i=e.positionY,s=e.height||1,o=e.width||1,l=a/t,u=s/o,v={};return t===0&&0a?(v.x=n,v.y=i+s/2,v):0t&&-1*u<=l&&l<=u?(v.x=n-o/2,v.y=i-o*a/2/t,v):0=u)?(v.x=n+s*t/2/a,v.y=i+s/2,v):(0>a&&(l<=-1*u||l>=u)&&(v.x=n-s*t/2/a,v.y=i-s/2),v)},hg=function(e,t){for(var a=0;aa){var p=t.gravity*h/y,g=t.gravity*d/y;c.offsetX+=p,c.offsetY+=g}}}}},pg=function(e,t){var a=[],n=0,i=-1;for(a.push.apply(a,e.graphSet[0]),i+=e.graphSet[0].length;n<=i;){var s=a[n++],o=e.idToIndex[s],l=e.layoutNodes[o],u=l.children;if(0a)var i={x:a*e/n,y:a*t/n};else var i={x:e,y:t};return i},bg=function r(e,t){var a=e.parentId;if(a!=null){var n=t.layoutNodes[t.idToIndex[a]],i=!1;if((n.maxX==null||e.maxX+n.padRight>n.maxX)&&(n.maxX=e.maxX+n.padRight,i=!0),(n.minX==null||e.minX-n.padLeftn.maxY)&&(n.maxY=e.maxY+n.padBottom,i=!0),(n.minY==null||e.minY-n.padTopg&&(d+=p+t.componentSpacing,h=0,y=0,p=0)}}},wg={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,avoidOverlapPadding:10,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,condense:!1,rows:void 0,cols:void 0,position:function(e){},sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function iu(r){this.options=pe({},wg,r)}iu.prototype.run=function(){var r=this.options,e=r,t=r.cy,a=e.eles,n=a.nodes().not(":parent");e.sort&&(n=n.sort(e.sort));var i=hr(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:t.width(),h:t.height()});if(i.h===0||i.w===0)a.nodes().layoutPositions(this,e,function(Y){return{x:i.x1,y:i.y1}});else{var s=n.size(),o=Math.sqrt(s*i.h/i.w),l=Math.round(o),u=Math.round(i.w/i.h*o),v=function(Q){if(Q==null)return Math.min(l,u);var J=Math.min(l,u);J==l?l=Q:u=Q},f=function(Q){if(Q==null)return Math.max(l,u);var J=Math.max(l,u);J==l?l=Q:u=Q},c=e.rows,h=e.cols!=null?e.cols:e.columns;if(c!=null&&h!=null)l=c,u=h;else if(c!=null&&h==null)l=c,u=Math.ceil(s/l);else if(c==null&&h!=null)u=h,l=Math.ceil(s/u);else if(u*l>s){var d=v(),y=f();(d-1)*y>=s?v(d-1):(y-1)*d>=s&&f(y-1)}else for(;u*l=s?f(g+1):v(p+1)}var m=i.w/u,b=i.h/l;if(e.condense&&(m=0,b=0),e.avoidOverlap)for(var w=0;w=u&&(O=0,k++)},R={},I=0;I(O=Gv(r,e,A[R],A[R+1],A[R+2],A[R+3])))return p(x,O),!0}else if(C.edgeType==="bezier"||C.edgeType==="multibezier"||C.edgeType==="self"||C.edgeType==="compound"){for(var A=C.allpts,R=0;R+5(O=Hv(r,e,A[R],A[R+1],A[R+2],A[R+3],A[R+4],A[R+5])))return p(x,O),!0}for(var I=I||D.source,V=V||D.target,G=n.getArrowWidth(M,P),F=[{name:"source",x:C.arrowStartX,y:C.arrowStartY,angle:C.srcArrowAngle},{name:"target",x:C.arrowEndX,y:C.arrowEndY,angle:C.tgtArrowAngle},{name:"mid-source",x:C.midX,y:C.midY,angle:C.midsrcArrowAngle},{name:"mid-target",x:C.midX,y:C.midY,angle:C.midtgtArrowAngle}],R=0;R0&&(g(I),g(V))}function b(x,D,C){return kr(x,D,C)}function w(x,D){var C=x._private,M=c,P;D?P=D+"-":P="",x.boundingBox();var B=C.labelBounds[D||"main"],L=x.pstyle(P+"label").value,k=x.pstyle("text-events").strValue==="yes";if(!(!k||!L)){var O=b(C.rscratch,"labelX",D),A=b(C.rscratch,"labelY",D),R=b(C.rscratch,"labelAngle",D),I=x.pstyle(P+"text-margin-x").pfValue,V=x.pstyle(P+"text-margin-y").pfValue,G=B.x1-M-I,F=B.x2+M-I,q=B.y1-M-V,Y=B.y2+M-V;if(R){var Q=Math.cos(R),J=Math.sin(R),_=function(he,te){return he=he-O,te=te-A,{x:he*Q-te*J+O,y:he*J+te*Q+A}},j=_(G,q),W=_(G,Y),z=_(F,q),K=_(F,Y),X=[j.x+I,j.y+V,z.x+I,z.y+V,K.x+I,K.y+V,W.x+I,W.y+V];if(dr(r,e,X))return p(x),!0}else if(It(B,r,e))return p(x),!0}}for(var S=s.length-1;S>=0;S--){var E=s[S];E.isNode()?g(E)||w(E):m(E)||w(E)||w(E,"source")||w(E,"target")}return o};bt.getAllInBox=function(r,e,t,a){var n=this.getCachedZSortedEles().interactive,i=[],s=Math.min(r,t),o=Math.max(r,t),l=Math.min(e,a),u=Math.max(e,a);r=s,t=o,e=l,a=u;for(var v=hr({x1:r,y1:e,x2:t,y2:a}),f=0;f0?-(Math.PI-e.ang):Math.PI+e.ang},Dg=function(e,t,a,n,i){if(e!==Rs?Os(t,e,Rr):Tg(wr,Rr),Os(t,a,wr),Ls=Rr.nx*wr.ny-Rr.ny*wr.nx,As=Rr.nx*wr.nx-Rr.ny*-wr.ny,$r=Math.asin(Math.max(-1,Math.min(1,Ls))),Math.abs($r)<1e-6){Jn=t.x,_n=t.y,lt=Tt=0;return}vt=1,Qa=!1,As<0?$r<0?$r=Math.PI+$r:($r=Math.PI-$r,vt=-1,Qa=!0):$r>0&&(vt=-1,Qa=!0),t.radius!==void 0?Tt=t.radius:Tt=n,st=$r/2,$a=Math.min(Rr.len/2,wr.len/2),i?(Ar=Math.abs(Math.cos(st)*Tt/Math.sin(st)),Ar>$a?(Ar=$a,lt=Math.abs(Ar*Math.sin(st)/Math.cos(st))):lt=Tt):(Ar=Math.min($a,Tt),lt=Math.abs(Ar*Math.sin(st)/Math.cos(st))),jn=t.x+wr.nx*Ar,ei=t.y+wr.ny*Ar,Jn=jn-wr.ny*lt*vt,_n=ei+wr.nx*lt*vt,lu=t.x+Rr.nx*Ar,vu=t.y+Rr.ny*Ar,Rs=t};function fu(r,e){e.radius===0?r.lineTo(e.cx,e.cy):r.arc(e.cx,e.cy,e.radius,e.startAngle,e.endAngle,e.counterClockwise)}function Di(r,e,t,a){var n=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0;return a===0||e.radius===0?{cx:e.x,cy:e.y,radius:0,startX:e.x,startY:e.y,stopX:e.x,stopY:e.y,startAngle:void 0,endAngle:void 0,counterClockwise:void 0}:(Dg(r,e,t,a,n),{cx:Jn,cy:_n,radius:lt,startX:lu,startY:vu,stopX:jn,stopY:ei,startAngle:Rr.ang+Math.PI/2*vt,endAngle:wr.ang-Math.PI/2*vt,counterClockwise:Qa})}var ur={};ur.findMidptPtsEtc=function(r,e){var t=e.posPts,a=e.intersectionPts,n=e.vectorNormInverse,i,s=r.pstyle("source-endpoint"),o=r.pstyle("target-endpoint"),l=s.units!=null&&o.units!=null,u=function(S,E,x,D){var C=D-E,M=x-S,P=Math.sqrt(M*M+C*C);return{x:-C/P,y:M/P}},v=r.pstyle("edge-distances").value;switch(v){case"node-position":i=t;break;case"intersection":i=a;break;case"endpoints":{if(l){var f=this.manualEndptToPx(r.source()[0],s),c=Tr(f,2),h=c[0],d=c[1],y=this.manualEndptToPx(r.target()[0],o),p=Tr(y,2),g=p[0],m=p[1],b={x1:h,y1:d,x2:g,y2:m};n=u(h,d,g,m),i=b}else Me("Edge ".concat(r.id()," has edge-distances:endpoints specified without manual endpoints specified via source-endpoint and target-endpoint. Falling back on edge-distances:intersection (default).")),i=a;break}}return{midptPts:i,vectorNormInverse:n}};ur.findHaystackPoints=function(r){for(var e=0;e0?Math.max(Z-se,0):Math.min(Z+se,0)},L=B(M,D),k=B(P,C),O=!1;m===u?g=Math.abs(L)>Math.abs(k)?n:a:m===l||m===o?(g=a,O=!0):(m===i||m===s)&&(g=n,O=!0);var A=g===a,R=A?k:L,I=A?P:M,V=go(I),G=!1;!(O&&(w||E))&&(m===o&&I<0||m===l&&I>0||m===i&&I>0||m===s&&I<0)&&(V*=-1,R=V*Math.abs(R),G=!0);var F;if(w){var q=S<0?1+S:S;F=q*R}else{var Y=S<0?R:0;F=Y+S*V}var Q=function(Z){return Math.abs(Z)=Math.abs(R)},J=Q(F),_=Q(Math.abs(R)-Math.abs(F)),j=J||_;if(j&&!G)if(A){var W=Math.abs(I)<=c/2,z=Math.abs(M)<=h/2;if(W){var K=(v.x1+v.x2)/2,X=v.y1,ae=v.y2;t.segpts=[K,X,K,ae]}else if(z){var he=(v.y1+v.y2)/2,te=v.x1,re=v.x2;t.segpts=[te,he,re,he]}else t.segpts=[v.x1,v.y2]}else{var ve=Math.abs(I)<=f/2,le=Math.abs(P)<=d/2;if(ve){var oe=(v.y1+v.y2)/2,de=v.x1,Le=v.x2;t.segpts=[de,oe,Le,oe]}else if(le){var Ce=(v.x1+v.x2)/2,xe=v.y1,Ae=v.y2;t.segpts=[Ce,xe,Ce,Ae]}else t.segpts=[v.x2,v.y1]}else if(A){var Ee=v.y1+F+(p?c/2*V:0),Pe=v.x1,ee=v.x2;t.segpts=[Pe,Ee,ee,Ee]}else{var T=v.x1+F+(p?f/2*V:0),$=v.y1,U=v.y2;t.segpts=[T,$,T,U]}if(t.isRound){var N=r.pstyle("taxi-radius").value,H=r.pstyle("radius-type").value[0]==="arc-radius";t.radii=new Array(t.segpts.length/2).fill(N),t.isArcRadius=new Array(t.segpts.length/2).fill(H)}};ur.tryToCorrectInvalidPoints=function(r,e){var t=r._private.rscratch;if(t.edgeType==="bezier"){var a=e.srcPos,n=e.tgtPos,i=e.srcW,s=e.srcH,o=e.tgtW,l=e.tgtH,u=e.srcShape,v=e.tgtShape,f=e.srcCornerRadius,c=e.tgtCornerRadius,h=e.srcRs,d=e.tgtRs,y=!ne(t.startX)||!ne(t.startY),p=!ne(t.arrowStartX)||!ne(t.arrowStartY),g=!ne(t.endX)||!ne(t.endY),m=!ne(t.arrowEndX)||!ne(t.arrowEndY),b=3,w=this.getArrowWidth(r.pstyle("width").pfValue,r.pstyle("arrow-scale").value)*this.arrowShapeWidth,S=b*w,E=ht({x:t.ctrlpts[0],y:t.ctrlpts[1]},{x:t.startX,y:t.startY}),x=Ek.poolIndex()){var O=L;L=k,k=O}var A=C.srcPos=L.position(),R=C.tgtPos=k.position(),I=C.srcW=L.outerWidth(),V=C.srcH=L.outerHeight(),G=C.tgtW=k.outerWidth(),F=C.tgtH=k.outerHeight(),q=C.srcShape=t.nodeShapes[e.getNodeShape(L)],Y=C.tgtShape=t.nodeShapes[e.getNodeShape(k)],Q=C.srcCornerRadius=L.pstyle("corner-radius").value==="auto"?"auto":L.pstyle("corner-radius").pfValue,J=C.tgtCornerRadius=k.pstyle("corner-radius").value==="auto"?"auto":k.pstyle("corner-radius").pfValue,_=C.tgtRs=k._private.rscratch,j=C.srcRs=L._private.rscratch;C.dirCounts={north:0,west:0,south:0,east:0,northwest:0,southwest:0,northeast:0,southeast:0};for(var W=0;W0){var ae=i,he=ot(ae,Pt(t)),te=ot(ae,Pt(X)),re=he;if(te2){var ve=ot(ae,{x:X[2],y:X[3]});ve0){var U=s,N=ot(U,Pt(t)),H=ot(U,Pt($)),ie=N;if(H2){var Z=ot(U,{x:$[2],y:$[3]});Z=d||x){p={cp:w,segment:E};break}}if(p)break}var D=p.cp,C=p.segment,M=(d-g)/C.length,P=C.t1-C.t0,B=h?C.t0+P*M:C.t1-P*M;B=da(0,B,1),e=Mt(D.p0,D.p1,D.p2,B),c=Pg(D.p0,D.p1,D.p2,B);break}case"straight":case"segments":case"haystack":{for(var L=0,k,O,A,R,I=a.allpts.length,V=0;V+3=d));V+=2);var G=d-O,F=G/k;F=da(0,F,1),e=Av(A,R,F),c=hu(A,R);break}}s("labelX",f,e.x),s("labelY",f,e.y),s("labelAutoAngle",f,c)}};u("source"),u("target"),this.applyLabelDimensions(r)}};Nr.applyLabelDimensions=function(r){this.applyPrefixedLabelDimensions(r),r.isEdge()&&(this.applyPrefixedLabelDimensions(r,"source"),this.applyPrefixedLabelDimensions(r,"target"))};Nr.applyPrefixedLabelDimensions=function(r,e){var t=r._private,a=this.getLabelText(r,e),n=this.calculateLabelDimensions(r,a),i=r.pstyle("line-height").pfValue,s=r.pstyle("text-wrap").strValue,o=kr(t.rscratch,"labelWrapCachedLines",e)||[],l=s!=="wrap"?1:Math.max(o.length,1),u=n.height/l,v=u*i,f=n.width,c=n.height+(l-1)*(i-1)*u;Zr(t.rstyle,"labelWidth",e,f),Zr(t.rscratch,"labelWidth",e,f),Zr(t.rstyle,"labelHeight",e,c),Zr(t.rscratch,"labelHeight",e,c),Zr(t.rscratch,"labelLineHeight",e,v)};Nr.getLabelText=function(r,e){var t=r._private,a=e?e+"-":"",n=r.pstyle(a+"label").strValue,i=r.pstyle("text-transform").value,s=function(Y,Q){return Q?(Zr(t.rscratch,Y,e,Q),Q):kr(t.rscratch,Y,e)};if(!n)return"";i=="none"||(i=="uppercase"?n=n.toUpperCase():i=="lowercase"&&(n=n.toLowerCase()));var o=r.pstyle("text-wrap").value;if(o==="wrap"){var l=s("labelKey");if(l!=null&&s("labelWrapKey")===l)return s("labelWrapCachedText");for(var u="​",v=n.split(` +`),f=r.pstyle("text-max-width").pfValue,c=r.pstyle("text-overflow-wrap").value,h=c==="anywhere",d=[],y=/[\s\u200b]+|$/g,p=0;pf){var S=g.matchAll(y),E="",x=0,D=Zs(S),C;try{for(D.s();!(C=D.n()).done;){var M=C.value,P=M[0],B=g.substring(x,M.index);x=M.index+P.length;var L=E.length===0?B:E+B+P,k=this.calculateLabelDimensions(r,L),O=k.width;O<=f?E+=B+P:(E&&d.push(E),E=B+P)}}catch(q){D.e(q)}finally{D.f()}E.match(/^[\s\u200b]+$/)||d.push(E)}else d.push(g)}s("labelWrapCachedLines",d),n=s("labelWrapCachedText",d.join(` +`)),s("labelWrapKey",l)}else if(o==="ellipsis"){var A=r.pstyle("text-max-width").pfValue,R="",I="…",V=!1;if(this.calculateLabelDimensions(r,n).widthA)break;R+=n[G],G===n.length-1&&(V=!0)}return V||(R+=I),R}return n};Nr.getLabelJustification=function(r){var e=r.pstyle("text-justification").strValue,t=r.pstyle("text-halign").strValue;if(e==="auto")if(r.isNode())switch(t){case"left":return"right";case"right":return"left";default:return"center"}else return"center";else return e};Nr.calculateLabelDimensions=function(r,e){var t=this,a=t.cy.window(),n=a.document,i=dt(e,r._private.labelDimsKey),s=t.labelDimCache||(t.labelDimCache=[]),o=s[i];if(o!=null)return o;var l=0,u=r.pstyle("font-style").strValue,v=r.pstyle("font-size").pfValue,f=r.pstyle("font-family").strValue,c=r.pstyle("font-weight").strValue,h=this.labelCalcCanvas,d=this.labelCalcCanvasContext;if(!h){h=this.labelCalcCanvas=n.createElement("canvas"),d=this.labelCalcCanvasContext=h.getContext("2d");var y=h.style;y.position="absolute",y.left="-9999px",y.top="-9999px",y.zIndex="-1",y.visibility="hidden",y.pointerEvents="none"}d.font="".concat(u," ").concat(c," ").concat(v,"px ").concat(f);for(var p=0,g=0,m=e.split(` +`),b=0;b1&&arguments[1]!==void 0?arguments[1]:!0;if(e.merge(s),o)for(var l=0;l=r.desktopTapThreshold2}var lr=i(T);Ve&&(r.hoverData.tapholdCancelled=!0);var vr=function(){var Lr=r.hoverData.dragDelta=r.hoverData.dragDelta||[];Lr.length===0?(Lr.push(ye[0]),Lr.push(ye[1])):(Lr[0]+=ye[0],Lr[1]+=ye[1])};U=!0,n(fe,["mousemove","vmousemove","tapdrag"],T,{x:Z[0],y:Z[1]});var Br=function(){r.data.bgActivePosistion=void 0,r.hoverData.selecting||N.emit({originalEvent:T,type:"boxstart",position:{x:Z[0],y:Z[1]}}),we[4]=1,r.hoverData.selecting=!0,r.redrawHint("select",!0),r.redraw()};if(r.hoverData.which===3){if(Ve){var br={originalEvent:T,type:"cxtdrag",position:{x:Z[0],y:Z[1]}};be?be.emit(br):N.emit(br),r.hoverData.cxtDragged=!0,(!r.hoverData.cxtOver||fe!==r.hoverData.cxtOver)&&(r.hoverData.cxtOver&&r.hoverData.cxtOver.emit({originalEvent:T,type:"cxtdragout",position:{x:Z[0],y:Z[1]}}),r.hoverData.cxtOver=fe,fe&&fe.emit({originalEvent:T,type:"cxtdragover",position:{x:Z[0],y:Z[1]}}))}}else if(r.hoverData.dragging){if(U=!0,N.panningEnabled()&&N.userPanningEnabled()){var Mr;if(r.hoverData.justStartedPan){var Vr=r.hoverData.mdownPos;Mr={x:(Z[0]-Vr[0])*H,y:(Z[1]-Vr[1])*H},r.hoverData.justStartedPan=!1}else Mr={x:ye[0]*H,y:ye[1]*H};N.panBy(Mr),N.emit("dragpan"),r.hoverData.dragged=!0}Z=r.projectIntoViewport(T.clientX,T.clientY)}else if(we[4]==1&&(be==null||be.pannable())){if(Ve){if(!r.hoverData.dragging&&N.boxSelectionEnabled()&&(lr||!N.panningEnabled()||!N.userPanningEnabled()))Br();else if(!r.hoverData.selecting&&N.panningEnabled()&&N.userPanningEnabled()){var qr=s(be,r.hoverData.downs);qr&&(r.hoverData.dragging=!0,r.hoverData.justStartedPan=!0,we[4]=0,r.data.bgActivePosistion=Pt(se),r.redrawHint("select",!0),r.redraw())}be&&be.pannable()&&be.active()&&be.unactivate()}}else{if(be&&be.pannable()&&be.active()&&be.unactivate(),(!be||!be.grabbed())&&fe!=me&&(me&&n(me,["mouseout","tapdragout"],T,{x:Z[0],y:Z[1]}),fe&&n(fe,["mouseover","tapdragover"],T,{x:Z[0],y:Z[1]}),r.hoverData.last=fe),be)if(Ve){if(N.boxSelectionEnabled()&&lr)be&&be.grabbed()&&(g(Ie),be.emit("freeon"),Ie.emit("free"),r.dragData.didDrag&&(be.emit("dragfreeon"),Ie.emit("dragfree"))),Br();else if(be&&be.grabbed()&&r.nodeIsDraggable(be)){var ar=!r.dragData.didDrag;ar&&r.redrawHint("eles",!0),r.dragData.didDrag=!0,r.hoverData.draggingEles||y(Ie,{inDragLayer:!0});var Qe={x:0,y:0};if(ne(ye[0])&&ne(ye[1])&&(Qe.x+=ye[0],Qe.y+=ye[1],ar)){var cr=r.hoverData.dragDelta;cr&&ne(cr[0])&&ne(cr[1])&&(Qe.x+=cr[0],Qe.y+=cr[1])}r.hoverData.draggingEles=!0,Ie.silentShift(Qe).emit("position drag"),r.redrawHint("drag",!0),r.redraw()}}else vr();U=!0}if(we[2]=Z[0],we[3]=Z[1],U)return T.stopPropagation&&T.stopPropagation(),T.preventDefault&&T.preventDefault(),!1}},!1);var B,L,k;r.registerBinding(e,"mouseup",function(T){if(!(r.hoverData.which===1&&T.which!==1&&r.hoverData.capture)){var $=r.hoverData.capture;if($){r.hoverData.capture=!1;var U=r.cy,N=r.projectIntoViewport(T.clientX,T.clientY),H=r.selection,ie=r.findNearestElement(N[0],N[1],!0,!1),Z=r.dragData.possibleDragElements,se=r.hoverData.down,ge=i(T);if(r.data.bgActivePosistion&&(r.redrawHint("select",!0),r.redraw()),r.hoverData.tapholdCancelled=!0,r.data.bgActivePosistion=void 0,se&&se.unactivate(),r.hoverData.which===3){var we={originalEvent:T,type:"cxttapend",position:{x:N[0],y:N[1]}};if(se?se.emit(we):U.emit(we),!r.hoverData.cxtDragged){var fe={originalEvent:T,type:"cxttap",position:{x:N[0],y:N[1]}};se?se.emit(fe):U.emit(fe)}r.hoverData.cxtDragged=!1,r.hoverData.which=null}else if(r.hoverData.which===1){if(n(ie,["mouseup","tapend","vmouseup"],T,{x:N[0],y:N[1]}),!r.dragData.didDrag&&!r.hoverData.dragged&&!r.hoverData.selecting&&!r.hoverData.isOverThresholdDrag&&(n(se,["click","tap","vclick"],T,{x:N[0],y:N[1]}),L=!1,T.timeStamp-k<=U.multiClickDebounceTime()?(B&&clearTimeout(B),L=!0,k=null,n(se,["dblclick","dbltap","vdblclick"],T,{x:N[0],y:N[1]})):(B=setTimeout(function(){L||n(se,["oneclick","onetap","voneclick"],T,{x:N[0],y:N[1]})},U.multiClickDebounceTime()),k=T.timeStamp)),se==null&&!r.dragData.didDrag&&!r.hoverData.selecting&&!r.hoverData.dragged&&!i(T)&&(U.$(t).unselect(["tapunselect"]),Z.length>0&&r.redrawHint("eles",!0),r.dragData.possibleDragElements=Z=U.collection()),ie==se&&!r.dragData.didDrag&&!r.hoverData.selecting&&ie!=null&&ie._private.selectable&&(r.hoverData.dragging||(U.selectionType()==="additive"||ge?ie.selected()?ie.unselect(["tapunselect"]):ie.select(["tapselect"]):ge||(U.$(t).unmerge(ie).unselect(["tapunselect"]),ie.select(["tapselect"]))),r.redrawHint("eles",!0)),r.hoverData.selecting){var me=U.collection(r.getAllInBox(H[0],H[1],H[2],H[3]));r.redrawHint("select",!0),me.length>0&&r.redrawHint("eles",!0),U.emit({type:"boxend",originalEvent:T,position:{x:N[0],y:N[1]}});var be=function(Ve){return Ve.selectable()&&!Ve.selected()};U.selectionType()==="additive"||ge||U.$(t).unmerge(me).unselect(),me.emit("box").stdFilter(be).select().emit("boxselect"),r.redraw()}if(r.hoverData.dragging&&(r.hoverData.dragging=!1,r.redrawHint("select",!0),r.redrawHint("eles",!0),r.redraw()),!H[4]){r.redrawHint("drag",!0),r.redrawHint("eles",!0);var ye=se&&se.grabbed();g(Z),ye&&(se.emit("freeon"),Z.emit("free"),r.dragData.didDrag&&(se.emit("dragfreeon"),Z.emit("dragfree")))}}H[4]=0,r.hoverData.down=null,r.hoverData.cxtStarted=!1,r.hoverData.draggingEles=!1,r.hoverData.selecting=!1,r.hoverData.isOverThresholdDrag=!1,r.dragData.didDrag=!1,r.hoverData.dragged=!1,r.hoverData.dragDelta=[],r.hoverData.mdownPos=null,r.hoverData.mdownGPos=null,r.hoverData.which=null}}},!1);var O=function(T){if(!r.scrollingPage){var $=r.cy,U=$.zoom(),N=$.pan(),H=r.projectIntoViewport(T.clientX,T.clientY),ie=[H[0]*U+N.x,H[1]*U+N.y];if(r.hoverData.draggingEles||r.hoverData.dragging||r.hoverData.cxtStarted||C()){T.preventDefault();return}if($.panningEnabled()&&$.userPanningEnabled()&&$.zoomingEnabled()&&$.userZoomingEnabled()){T.preventDefault(),r.data.wheelZooming=!0,clearTimeout(r.data.wheelTimeout),r.data.wheelTimeout=setTimeout(function(){r.data.wheelZooming=!1,r.redrawHint("eles",!0),r.redraw()},150);var Z;T.deltaY!=null?Z=T.deltaY/-250:T.wheelDeltaY!=null?Z=T.wheelDeltaY/1e3:Z=T.wheelDelta/1e3,Z=Z*r.wheelSensitivity;var se=T.deltaMode===1;se&&(Z*=33);var ge=$.zoom()*Math.pow(10,Z);T.type==="gesturechange"&&(ge=r.gestureStartZoom*T.scale),$.zoom({level:ge,renderedPosition:{x:ie[0],y:ie[1]}}),$.emit(T.type==="gesturechange"?"pinchzoom":"scrollzoom")}}};r.registerBinding(r.container,"wheel",O,!0),r.registerBinding(e,"scroll",function(T){r.scrollingPage=!0,clearTimeout(r.scrollingPageTimeout),r.scrollingPageTimeout=setTimeout(function(){r.scrollingPage=!1},250)},!0),r.registerBinding(r.container,"gesturestart",function(T){r.gestureStartZoom=r.cy.zoom(),r.hasTouchStarted||T.preventDefault()},!0),r.registerBinding(r.container,"gesturechange",function(ee){r.hasTouchStarted||O(ee)},!0),r.registerBinding(r.container,"mouseout",function(T){var $=r.projectIntoViewport(T.clientX,T.clientY);r.cy.emit({originalEvent:T,type:"mouseout",position:{x:$[0],y:$[1]}})},!1),r.registerBinding(r.container,"mouseover",function(T){var $=r.projectIntoViewport(T.clientX,T.clientY);r.cy.emit({originalEvent:T,type:"mouseover",position:{x:$[0],y:$[1]}})},!1);var A,R,I,V,G,F,q,Y,Q,J,_,j,W,z=function(T,$,U,N){return Math.sqrt((U-T)*(U-T)+(N-$)*(N-$))},K=function(T,$,U,N){return(U-T)*(U-T)+(N-$)*(N-$)},X;r.registerBinding(r.container,"touchstart",X=function(T){if(r.hasTouchStarted=!0,!!M(T)){b(),r.touchData.capture=!0,r.data.bgActivePosistion=void 0;var $=r.cy,U=r.touchData.now,N=r.touchData.earlier;if(T.touches[0]){var H=r.projectIntoViewport(T.touches[0].clientX,T.touches[0].clientY);U[0]=H[0],U[1]=H[1]}if(T.touches[1]){var H=r.projectIntoViewport(T.touches[1].clientX,T.touches[1].clientY);U[2]=H[0],U[3]=H[1]}if(T.touches[2]){var H=r.projectIntoViewport(T.touches[2].clientX,T.touches[2].clientY);U[4]=H[0],U[5]=H[1]}if(T.touches[1]){r.touchData.singleTouchMoved=!0,g(r.dragData.touchDragEles);var ie=r.findContainerClientCoords();Q=ie[0],J=ie[1],_=ie[2],j=ie[3],A=T.touches[0].clientX-Q,R=T.touches[0].clientY-J,I=T.touches[1].clientX-Q,V=T.touches[1].clientY-J,W=0<=A&&A<=_&&0<=I&&I<=_&&0<=R&&R<=j&&0<=V&&V<=j;var Z=$.pan(),se=$.zoom();G=z(A,R,I,V),F=K(A,R,I,V),q=[(A+I)/2,(R+V)/2],Y=[(q[0]-Z.x)/se,(q[1]-Z.y)/se];var ge=200,we=ge*ge;if(F=1){for(var pr=r.touchData.startPosition=[null,null,null,null,null,null],Ge=0;Ge=r.touchTapThreshold2}if($&&r.touchData.cxt){T.preventDefault();var pr=T.touches[0].clientX-Q,Ge=T.touches[0].clientY-J,Xe=T.touches[1].clientX-Q,Ze=T.touches[1].clientY-J,lr=K(pr,Ge,Xe,Ze),vr=lr/F,Br=150,br=Br*Br,Mr=1.5,Vr=Mr*Mr;if(vr>=Vr||lr>=br){r.touchData.cxt=!1,r.data.bgActivePosistion=void 0,r.redrawHint("select",!0);var qr={originalEvent:T,type:"cxttapend",position:{x:H[0],y:H[1]}};r.touchData.start?(r.touchData.start.unactivate().emit(qr),r.touchData.start=null):N.emit(qr)}}if($&&r.touchData.cxt){var qr={originalEvent:T,type:"cxtdrag",position:{x:H[0],y:H[1]}};r.data.bgActivePosistion=void 0,r.redrawHint("select",!0),r.touchData.start?r.touchData.start.emit(qr):N.emit(qr),r.touchData.start&&(r.touchData.start._private.grabbed=!1),r.touchData.cxtDragged=!0;var ar=r.findNearestElement(H[0],H[1],!0,!0);(!r.touchData.cxtOver||ar!==r.touchData.cxtOver)&&(r.touchData.cxtOver&&r.touchData.cxtOver.emit({originalEvent:T,type:"cxtdragout",position:{x:H[0],y:H[1]}}),r.touchData.cxtOver=ar,ar&&ar.emit({originalEvent:T,type:"cxtdragover",position:{x:H[0],y:H[1]}}))}else if($&&T.touches[2]&&N.boxSelectionEnabled())T.preventDefault(),r.data.bgActivePosistion=void 0,this.lastThreeTouch=+new Date,r.touchData.selecting||N.emit({originalEvent:T,type:"boxstart",position:{x:H[0],y:H[1]}}),r.touchData.selecting=!0,r.touchData.didSelect=!0,U[4]=1,!U||U.length===0||U[0]===void 0?(U[0]=(H[0]+H[2]+H[4])/3,U[1]=(H[1]+H[3]+H[5])/3,U[2]=(H[0]+H[2]+H[4])/3+1,U[3]=(H[1]+H[3]+H[5])/3+1):(U[2]=(H[0]+H[2]+H[4])/3,U[3]=(H[1]+H[3]+H[5])/3),r.redrawHint("select",!0),r.redraw();else if($&&T.touches[1]&&!r.touchData.didSelect&&N.zoomingEnabled()&&N.panningEnabled()&&N.userZoomingEnabled()&&N.userPanningEnabled()){T.preventDefault(),r.data.bgActivePosistion=void 0,r.redrawHint("select",!0);var Qe=r.dragData.touchDragEles;if(Qe){r.redrawHint("drag",!0);for(var cr=0;cr0&&!r.hoverData.draggingEles&&!r.swipePanning&&r.data.bgActivePosistion!=null&&(r.data.bgActivePosistion=void 0,r.redrawHint("select",!0),r.redraw())}},!1);var he;r.registerBinding(e,"touchcancel",he=function(T){var $=r.touchData.start;r.touchData.capture=!1,$&&$.unactivate()});var te,re,ve,le;if(r.registerBinding(e,"touchend",te=function(T){var $=r.touchData.start,U=r.touchData.capture;if(U)T.touches.length===0&&(r.touchData.capture=!1),T.preventDefault();else return;var N=r.selection;r.swipePanning=!1,r.hoverData.draggingEles=!1;var H=r.cy,ie=H.zoom(),Z=r.touchData.now,se=r.touchData.earlier;if(T.touches[0]){var ge=r.projectIntoViewport(T.touches[0].clientX,T.touches[0].clientY);Z[0]=ge[0],Z[1]=ge[1]}if(T.touches[1]){var ge=r.projectIntoViewport(T.touches[1].clientX,T.touches[1].clientY);Z[2]=ge[0],Z[3]=ge[1]}if(T.touches[2]){var ge=r.projectIntoViewport(T.touches[2].clientX,T.touches[2].clientY);Z[4]=ge[0],Z[5]=ge[1]}$&&$.unactivate();var we;if(r.touchData.cxt){if(we={originalEvent:T,type:"cxttapend",position:{x:Z[0],y:Z[1]}},$?$.emit(we):H.emit(we),!r.touchData.cxtDragged){var fe={originalEvent:T,type:"cxttap",position:{x:Z[0],y:Z[1]}};$?$.emit(fe):H.emit(fe)}r.touchData.start&&(r.touchData.start._private.grabbed=!1),r.touchData.cxt=!1,r.touchData.start=null,r.redraw();return}if(!T.touches[2]&&H.boxSelectionEnabled()&&r.touchData.selecting){r.touchData.selecting=!1;var me=H.collection(r.getAllInBox(N[0],N[1],N[2],N[3]));N[0]=void 0,N[1]=void 0,N[2]=void 0,N[3]=void 0,N[4]=0,r.redrawHint("select",!0),H.emit({type:"boxend",originalEvent:T,position:{x:Z[0],y:Z[1]}});var be=function(br){return br.selectable()&&!br.selected()};me.emit("box").stdFilter(be).select().emit("boxselect"),me.nonempty()&&r.redrawHint("eles",!0),r.redraw()}if($!=null&&$.unactivate(),T.touches[2])r.data.bgActivePosistion=void 0,r.redrawHint("select",!0);else if(!T.touches[1]){if(!T.touches[0]){if(!T.touches[0]){r.data.bgActivePosistion=void 0,r.redrawHint("select",!0);var ye=r.dragData.touchDragEles;if($!=null){var Ie=$._private.grabbed;g(ye),r.redrawHint("drag",!0),r.redrawHint("eles",!0),Ie&&($.emit("freeon"),ye.emit("free"),r.dragData.didDrag&&($.emit("dragfreeon"),ye.emit("dragfree"))),n($,["touchend","tapend","vmouseup","tapdragout"],T,{x:Z[0],y:Z[1]}),$.unactivate(),r.touchData.start=null}else{var Ve=r.findNearestElement(Z[0],Z[1],!0,!0);n(Ve,["touchend","tapend","vmouseup","tapdragout"],T,{x:Z[0],y:Z[1]})}var gr=r.touchData.startPosition[0]-Z[0],pr=gr*gr,Ge=r.touchData.startPosition[1]-Z[1],Xe=Ge*Ge,Ze=pr+Xe,lr=Ze*ie*ie;r.touchData.singleTouchMoved||($||H.$(":selected").unselect(["tapunselect"]),n($,["tap","vclick"],T,{x:Z[0],y:Z[1]}),re=!1,T.timeStamp-le<=H.multiClickDebounceTime()?(ve&&clearTimeout(ve),re=!0,le=null,n($,["dbltap","vdblclick"],T,{x:Z[0],y:Z[1]})):(ve=setTimeout(function(){re||n($,["onetap","voneclick"],T,{x:Z[0],y:Z[1]})},H.multiClickDebounceTime()),le=T.timeStamp)),$!=null&&!r.dragData.didDrag&&$._private.selectable&&lr"u"){var oe=[],de=function(T){return{clientX:T.clientX,clientY:T.clientY,force:1,identifier:T.pointerId,pageX:T.pageX,pageY:T.pageY,radiusX:T.width/2,radiusY:T.height/2,screenX:T.screenX,screenY:T.screenY,target:T.target}},Le=function(T){return{event:T,touch:de(T)}},Ce=function(T){oe.push(Le(T))},xe=function(T){for(var $=0;$0)return q[0]}return null},d=Object.keys(c),y=0;y0?h:mo(i,s,e,t,a,n,o,l)},checkPoint:function(e,t,a,n,i,s,o,l){l=l==="auto"?gt(n,i):l;var u=2*l;if(Gr(e,t,this.points,s,o,n,i-u,[0,-1],a)||Gr(e,t,this.points,s,o,n-u,i,[0,-1],a))return!0;var v=n/2+2*a,f=i/2+2*a,c=[s-v,o-f,s-v,o,s+v,o,s+v,o-f];return!!(dr(e,t,c)||ft(e,t,u,u,s+n/2-l,o+i/2-l,a)||ft(e,t,u,u,s-n/2+l,o+i/2-l,a))}}};Wr.registerNodeShapes=function(){var r=this.nodeShapes={},e=this;this.generateEllipse(),this.generatePolygon("triangle",fr(3,0)),this.generateRoundPolygon("round-triangle",fr(3,0)),this.generatePolygon("rectangle",fr(4,0)),r.square=r.rectangle,this.generateRoundRectangle(),this.generateCutRectangle(),this.generateBarrel(),this.generateBottomRoundrectangle();{var t=[0,1,1,0,0,-1,-1,0];this.generatePolygon("diamond",t),this.generateRoundPolygon("round-diamond",t)}this.generatePolygon("pentagon",fr(5,0)),this.generateRoundPolygon("round-pentagon",fr(5,0)),this.generatePolygon("hexagon",fr(6,0)),this.generateRoundPolygon("round-hexagon",fr(6,0)),this.generatePolygon("heptagon",fr(7,0)),this.generateRoundPolygon("round-heptagon",fr(7,0)),this.generatePolygon("octagon",fr(8,0)),this.generateRoundPolygon("round-octagon",fr(8,0));var a=new Array(20);{var n=Gn(5,0),i=Gn(5,Math.PI/5),s=.5*(3-Math.sqrt(5));s*=1.57;for(var o=0;o=e.deqFastCost*w)break}else if(u){if(m>=e.deqCost*h||m>=e.deqAvgCost*c)break}else if(b>=e.deqNoDrawCost*qn)break;var S=e.deq(a,p,y);if(S.length>0)for(var E=0;E0&&(e.onDeqd(a,d),!u&&e.shouldRedraw(a,d,p,y)&&i())},o=e.priority||vi;n.beforeRender(s,o(a))}}}},Mg=function(){function r(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:en;ii(this,r),this.idsByKey=new Ir,this.keyForId=new Ir,this.cachesByLvl=new Ir,this.lvls=[],this.getKey=e,this.doesEleInvalidateKey=t}return si(r,[{key:"getIdsFor",value:function(t){t==null&&$e("Can not get id list for null key");var a=this.idsByKey,n=this.idsByKey.get(t);return n||(n=new Vt,a.set(t,n)),n}},{key:"addIdForKey",value:function(t,a){t!=null&&this.getIdsFor(t).add(a)}},{key:"deleteIdForKey",value:function(t,a){t!=null&&this.getIdsFor(t).delete(a)}},{key:"getNumberOfIdsForKey",value:function(t){return t==null?0:this.getIdsFor(t).size}},{key:"updateKeyMappingFor",value:function(t){var a=t.id(),n=this.keyForId.get(a),i=this.getKey(t);this.deleteIdForKey(n,a),this.addIdForKey(i,a),this.keyForId.set(a,i)}},{key:"deleteKeyMappingFor",value:function(t){var a=t.id(),n=this.keyForId.get(a);this.deleteIdForKey(n,a),this.keyForId.delete(a)}},{key:"keyHasChangedFor",value:function(t){var a=t.id(),n=this.keyForId.get(a),i=this.getKey(t);return n!==i}},{key:"isInvalid",value:function(t){return this.keyHasChangedFor(t)||this.doesEleInvalidateKey(t)}},{key:"getCachesAt",value:function(t){var a=this.cachesByLvl,n=this.lvls,i=a.get(t);return i||(i=new Ir,a.set(t,i),n.push(t)),i}},{key:"getCache",value:function(t,a){return this.getCachesAt(a).get(t)}},{key:"get",value:function(t,a){var n=this.getKey(t),i=this.getCache(n,a);return i!=null&&this.updateKeyMappingFor(t),i}},{key:"getForCachedKey",value:function(t,a){var n=this.keyForId.get(t.id()),i=this.getCache(n,a);return i}},{key:"hasCache",value:function(t,a){return this.getCachesAt(a).has(t)}},{key:"has",value:function(t,a){var n=this.getKey(t);return this.hasCache(n,a)}},{key:"setCache",value:function(t,a,n){n.key=t,this.getCachesAt(a).set(t,n)}},{key:"set",value:function(t,a,n){var i=this.getKey(t);this.setCache(i,a,n),this.updateKeyMappingFor(t)}},{key:"deleteCache",value:function(t,a){this.getCachesAt(a).delete(t)}},{key:"delete",value:function(t,a){var n=this.getKey(t);this.deleteCache(n,a)}},{key:"invalidateKey",value:function(t){var a=this;this.lvls.forEach(function(n){return a.deleteCache(t,n)})}},{key:"invalidate",value:function(t){var a=t.id(),n=this.keyForId.get(a);this.deleteKeyMappingFor(t);var i=this.doesEleInvalidateKey(t);return i&&this.invalidateKey(n),i||this.getNumberOfIdsForKey(n)===0}}]),r}(),Fs=25,Ha=50,Ja=-4,ri=3,Lg=7.99,Ag=8,Rg=1024,Og=1024,Ig=1024,zg=.2,Ng=.8,Fg=10,Vg=.15,qg=.1,$g=.9,Hg=.9,Gg=100,Kg=1,Bt={dequeue:"dequeue",downscale:"downscale",highQuality:"highQuality"},Wg=rr({getKey:null,doesEleInvalidateKey:en,drawElement:null,getBoundingBox:null,getRotationPoint:null,getRotationOffset:null,isVisible:lo,allowEdgeTxrCaching:!0,allowParentTxrCaching:!0}),sa=function(e,t){var a=this;a.renderer=e,a.onDequeues=[];var n=Wg(t);pe(a,n),a.lookup=new Mg(n.getKey,n.doesEleInvalidateKey),a.setupDequeueing()},Ye=sa.prototype;Ye.reasons=Bt;Ye.getTextureQueue=function(r){var e=this;return e.eleImgCaches=e.eleImgCaches||{},e.eleImgCaches[r]=e.eleImgCaches[r]||[]};Ye.getRetiredTextureQueue=function(r){var e=this,t=e.eleImgCaches.retired=e.eleImgCaches.retired||{},a=t[r]=t[r]||[];return a};Ye.getElementQueue=function(){var r=this,e=r.eleCacheQueue=r.eleCacheQueue||new Ca(function(t,a){return a.reqs-t.reqs});return e};Ye.getElementKeyToQueue=function(){var r=this,e=r.eleKeyToCacheQueue=r.eleKeyToCacheQueue||{};return e};Ye.getElement=function(r,e,t,a,n){var i=this,s=this.renderer,o=s.cy.zoom(),l=this.lookup;if(!e||e.w===0||e.h===0||isNaN(e.w)||isNaN(e.h)||!r.visible()||r.removed()||!i.allowEdgeTxrCaching&&r.isEdge()||!i.allowParentTxrCaching&&r.isParent())return null;if(a==null&&(a=Math.ceil(ci(o*t))),a=Lg||a>ri)return null;var u=Math.pow(2,a),v=e.h*u,f=e.w*u,c=s.eleTextBiggerThanMin(r,u);if(!this.isVisible(r,c))return null;var h=l.get(r,a);if(h&&h.invalidated&&(h.invalidated=!1,h.texture.invalidatedWidth-=h.width),h)return h;var d;if(v<=Fs?d=Fs:v<=Ha?d=Ha:d=Math.ceil(v/Ha)*Ha,v>Ig||f>Og)return null;var y=i.getTextureQueue(d),p=y[y.length-2],g=function(){return i.recycleTexture(d,f)||i.addTexture(d,f)};p||(p=y[y.length-1]),p||(p=g()),p.width-p.usedWidtha;P--)C=i.getElement(r,e,t,P,Bt.downscale);M()}else return i.queueElement(r,E.level-1),E;else{var B;if(!b&&!w&&!S)for(var L=a-1;L>=Ja;L--){var k=l.get(r,L);if(k){B=k;break}}if(m(B))return i.queueElement(r,a),B;p.context.translate(p.usedWidth,0),p.context.scale(u,u),this.drawElement(p.context,r,e,c,!1),p.context.scale(1/u,1/u),p.context.translate(-p.usedWidth,0)}return h={x:p.usedWidth,texture:p,level:a,scale:u,width:f,height:v,scaledLabelShown:c},p.usedWidth+=Math.ceil(f+Ag),p.eleCaches.push(h),l.set(r,a,h),i.checkTextureFullness(p),h};Ye.invalidateElements=function(r){for(var e=0;e=zg*r.width&&this.retireTexture(r)};Ye.checkTextureFullness=function(r){var e=this,t=e.getTextureQueue(r.height);r.usedWidth/r.width>Ng&&r.fullnessChecks>=Fg?et(t,r):r.fullnessChecks++};Ye.retireTexture=function(r){var e=this,t=r.height,a=e.getTextureQueue(t),n=this.lookup;et(a,r),r.retired=!0;for(var i=r.eleCaches,s=0;s=e)return s.retired=!1,s.usedWidth=0,s.invalidatedWidth=0,s.fullnessChecks=0,fi(s.eleCaches),s.context.setTransform(1,0,0,1,0,0),s.context.clearRect(0,0,s.width,s.height),et(n,s),a.push(s),s}};Ye.queueElement=function(r,e){var t=this,a=t.getElementQueue(),n=t.getElementKeyToQueue(),i=this.getKey(r),s=n[i];if(s)s.level=Math.max(s.level,e),s.eles.merge(r),s.reqs++,a.updateItem(s);else{var o={eles:r.spawn().merge(r),level:e,reqs:1,key:i};a.push(o),n[i]=o}};Ye.dequeue=function(r){for(var e=this,t=e.getElementQueue(),a=e.getElementKeyToQueue(),n=[],i=e.lookup,s=0;s0;s++){var o=t.pop(),l=o.key,u=o.eles[0],v=i.hasCache(u,o.level);if(a[l]=null,v)continue;n.push(o);var f=e.getBoundingBox(u);e.getElement(u,f,r,o.level,Bt.dequeue)}return n};Ye.removeFromQueue=function(r){var e=this,t=e.getElementQueue(),a=e.getElementKeyToQueue(),n=this.getKey(r),i=a[n];i!=null&&(i.eles.length===1?(i.reqs=li,t.updateItem(i),t.pop(),a[n]=null):i.eles.unmerge(r))};Ye.onDequeue=function(r){this.onDequeues.push(r)};Ye.offDequeue=function(r){et(this.onDequeues,r)};Ye.setupDequeueing=bu.setupDequeueing({deqRedrawThreshold:Gg,deqCost:Vg,deqAvgCost:qg,deqNoDrawCost:$g,deqFastCost:Hg,deq:function(e,t,a){return e.dequeue(t,a)},onDeqd:function(e,t){for(var a=0;a=Yg||t>ln)return null}a.validateLayersElesOrdering(t,r);var l=a.layersByLevel,u=Math.pow(2,t),v=l[t]=l[t]||[],f,c=a.levelIsComplete(t,r),h,d=function(){var M=function(O){if(a.validateLayersElesOrdering(O,r),a.levelIsComplete(O,r))return h=l[O],!0},P=function(O){if(!h)for(var A=t+O;ua<=A&&A<=ln&&!M(A);A+=O);};P(1),P(-1);for(var B=v.length-1;B>=0;B--){var L=v[B];L.invalid&&et(v,L)}};if(!c)d();else return v;var y=function(){if(!f){f=hr();for(var M=0;Mqs||L>qs)return null;var k=B*L;if(k>rp)return null;var O=a.makeLayer(f,t);if(P!=null){var A=v.indexOf(P)+1;v.splice(A,0,O)}else(M.insert===void 0||M.insert)&&v.unshift(O);return O};if(a.skipping&&!o)return null;for(var g=null,m=r.length/Ug,b=!o,w=0;w=m||!yo(g.bb,S.boundingBox()))&&(g=p({insert:!0,after:g}),!g))return null;h||b?a.queueLayer(g,S):a.drawEleInLayer(g,S,t,e),g.eles.push(S),x[t]=g}return h||(b?null:v)};tr.getEleLevelForLayerLevel=function(r,e){return r};tr.drawEleInLayer=function(r,e,t,a){var n=this,i=this.renderer,s=r.context,o=e.boundingBox();o.w===0||o.h===0||!e.visible()||(t=n.getEleLevelForLayerLevel(t,a),i.setImgSmoothing(s,!1),i.drawCachedElement(s,e,null,null,t,tp),i.setImgSmoothing(s,!0))};tr.levelIsComplete=function(r,e){var t=this,a=t.layersByLevel[r];if(!a||a.length===0)return!1;for(var n=0,i=0;i0||s.invalid)return!1;n+=s.eles.length}return n===e.length};tr.validateLayersElesOrdering=function(r,e){var t=this.layersByLevel[r];if(t)for(var a=0;a0){e=!0;break}}return e};tr.invalidateElements=function(r){var e=this;r.length!==0&&(e.lastInvalidationTime=Hr(),!(r.length===0||!e.haveLayers())&&e.updateElementsInLayers(r,function(a,n,i){e.invalidateLayer(a)}))};tr.invalidateLayer=function(r){if(this.lastInvalidationTime=Hr(),!r.invalid){var e=r.level,t=r.eles,a=this.layersByLevel[e];et(a,r),r.elesQueue=[],r.invalid=!0,r.replacement&&(r.replacement.invalid=!0);for(var n=0;n3&&arguments[3]!==void 0?arguments[3]:!0,n=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,i=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0,s=this,o=e._private.rscratch;if(!(i&&!e.visible())&&!(o.badLine||o.allpts==null||isNaN(o.allpts[0]))){var l;t&&(l=t,r.translate(-l.x1,-l.y1));var u=i?e.pstyle("opacity").value:1,v=i?e.pstyle("line-opacity").value:1,f=e.pstyle("curve-style").value,c=e.pstyle("line-style").value,h=e.pstyle("width").pfValue,d=e.pstyle("line-cap").value,y=e.pstyle("line-outline-width").value,p=e.pstyle("line-outline-color").value,g=u*v,m=u*v,b=function(){var O=arguments.length>0&&arguments[0]!==void 0?arguments[0]:g;f==="straight-triangle"?(s.eleStrokeStyle(r,e,O),s.drawEdgeTrianglePath(e,r,o.allpts)):(r.lineWidth=h,r.lineCap=d,s.eleStrokeStyle(r,e,O),s.drawEdgePath(e,r,o.allpts,c),r.lineCap="butt")},w=function(){var O=arguments.length>0&&arguments[0]!==void 0?arguments[0]:g;if(r.lineWidth=h+y,r.lineCap=d,y>0)s.colorStrokeStyle(r,p[0],p[1],p[2],O);else{r.lineCap="butt";return}f==="straight-triangle"?s.drawEdgeTrianglePath(e,r,o.allpts):(s.drawEdgePath(e,r,o.allpts,c),r.lineCap="butt")},S=function(){n&&s.drawEdgeOverlay(r,e)},E=function(){n&&s.drawEdgeUnderlay(r,e)},x=function(){var O=arguments.length>0&&arguments[0]!==void 0?arguments[0]:m;s.drawArrowheads(r,e,O)},D=function(){s.drawElementText(r,e,null,a)};r.lineJoin="round";var C=e.pstyle("ghost").value==="yes";if(C){var M=e.pstyle("ghost-offset-x").pfValue,P=e.pstyle("ghost-offset-y").pfValue,B=e.pstyle("ghost-opacity").value,L=g*B;r.translate(M,P),b(L),x(L),r.translate(-M,-P)}else w();E(),b(),x(),S(),D(),t&&r.translate(l.x1,l.y1)}};var Eu=function(e){if(!["overlay","underlay"].includes(e))throw new Error("Invalid state");return function(t,a){if(a.visible()){var n=a.pstyle("".concat(e,"-opacity")).value;if(n!==0){var i=this,s=i.usePaths(),o=a._private.rscratch,l=a.pstyle("".concat(e,"-padding")).pfValue,u=2*l,v=a.pstyle("".concat(e,"-color")).value;t.lineWidth=u,o.edgeType==="self"&&!s?t.lineCap="butt":t.lineCap="round",i.colorStrokeStyle(t,v[0],v[1],v[2],n),i.drawEdgePath(a,t,o.allpts,"solid")}}}};Ur.drawEdgeOverlay=Eu("overlay");Ur.drawEdgeUnderlay=Eu("underlay");Ur.drawEdgePath=function(r,e,t,a){var n=r._private.rscratch,i=e,s,o=!1,l=this.usePaths(),u=r.pstyle("line-dash-pattern").pfValue,v=r.pstyle("line-dash-offset").pfValue;if(l){var f=t.join("$"),c=n.pathCacheKey&&n.pathCacheKey===f;c?(s=e=n.pathCache,o=!0):(s=e=new Path2D,n.pathCacheKey=f,n.pathCache=s)}if(i.setLineDash)switch(a){case"dotted":i.setLineDash([1,1]);break;case"dashed":i.setLineDash(u),i.lineDashOffset=v;break;case"solid":i.setLineDash([]);break}if(!o&&!n.badLine)switch(e.beginPath&&e.beginPath(),e.moveTo(t[0],t[1]),n.edgeType){case"bezier":case"self":case"compound":case"multibezier":for(var h=2;h+35&&arguments[5]!==void 0?arguments[5]:!0,s=this;if(a==null){if(i&&!s.eleTextBiggerThanMin(e))return}else if(a===!1)return;if(e.isNode()){var o=e.pstyle("label");if(!o||!o.value)return;var l=s.getLabelJustification(e);r.textAlign=l,r.textBaseline="bottom"}else{var u=e.element()._private.rscratch.badLine,v=e.pstyle("label"),f=e.pstyle("source-label"),c=e.pstyle("target-label");if(u||(!v||!v.value)&&(!f||!f.value)&&(!c||!c.value))return;r.textAlign="center",r.textBaseline="bottom"}var h=!t,d;t&&(d=t,r.translate(-d.x1,-d.y1)),n==null?(s.drawText(r,e,null,h,i),e.isEdge()&&(s.drawText(r,e,"source",h,i),s.drawText(r,e,"target",h,i))):s.drawText(r,e,n,h,i),t&&r.translate(d.x1,d.y1)};wt.getFontCache=function(r){var e;this.fontCaches=this.fontCaches||[];for(var t=0;t2&&arguments[2]!==void 0?arguments[2]:!0,a=e.pstyle("font-style").strValue,n=e.pstyle("font-size").pfValue+"px",i=e.pstyle("font-family").strValue,s=e.pstyle("font-weight").strValue,o=t?e.effectiveOpacity()*e.pstyle("text-opacity").value:1,l=e.pstyle("text-outline-opacity").value*o,u=e.pstyle("color").value,v=e.pstyle("text-outline-color").value;r.font=a+" "+s+" "+n+" "+i,r.lineJoin="round",this.colorFillStyle(r,u[0],u[1],u[2],o),this.colorStrokeStyle(r,v[0],v[1],v[2],l)};function Hn(r,e,t,a,n){var i=arguments.length>5&&arguments[5]!==void 0?arguments[5]:5,s=arguments.length>6?arguments[6]:void 0;r.beginPath(),r.moveTo(e+i,t),r.lineTo(e+a-i,t),r.quadraticCurveTo(e+a,t,e+a,t+i),r.lineTo(e+a,t+n-i),r.quadraticCurveTo(e+a,t+n,e+a-i,t+n),r.lineTo(e+i,t+n),r.quadraticCurveTo(e,t+n,e,t+n-i),r.lineTo(e,t+i),r.quadraticCurveTo(e,t,e+i,t),r.closePath(),s?r.stroke():r.fill()}wt.getTextAngle=function(r,e){var t,a=r._private,n=a.rscratch,i=e?e+"-":"",s=r.pstyle(i+"text-rotation"),o=kr(n,"labelAngle",e);return s.strValue==="autorotate"?t=r.isEdge()?o:0:s.strValue==="none"?t=0:t=s.pfValue,t};wt.drawText=function(r,e,t){var a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,n=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,i=e._private,s=i.rscratch,o=n?e.effectiveOpacity():1;if(!(n&&(o===0||e.pstyle("text-opacity").value===0))){t==="main"&&(t=null);var l=kr(s,"labelX",t),u=kr(s,"labelY",t),v,f,c=this.getLabelText(e,t);if(c!=null&&c!==""&&!isNaN(l)&&!isNaN(u)){this.setupTextStyle(r,e,n);var h=t?t+"-":"",d=kr(s,"labelWidth",t),y=kr(s,"labelHeight",t),p=e.pstyle(h+"text-margin-x").pfValue,g=e.pstyle(h+"text-margin-y").pfValue,m=e.isEdge(),b=e.pstyle("text-halign").value,w=e.pstyle("text-valign").value;m&&(b="center",w="center"),l+=p,u+=g;var S;switch(a?S=this.getTextAngle(e,t):S=0,S!==0&&(v=l,f=u,r.translate(v,f),r.rotate(S),l=0,u=0),w){case"top":break;case"center":u+=y/2;break;case"bottom":u+=y;break}var E=e.pstyle("text-background-opacity").value,x=e.pstyle("text-border-opacity").value,D=e.pstyle("text-border-width").pfValue,C=e.pstyle("text-background-padding").pfValue,M=e.pstyle("text-background-shape").strValue,P=M.indexOf("round")===0,B=2;if(E>0||D>0&&x>0){var L=l-C;switch(b){case"left":L-=d;break;case"center":L-=d/2;break}var k=u-y-C,O=d+2*C,A=y+2*C;if(E>0){var R=r.fillStyle,I=e.pstyle("text-background-color").value;r.fillStyle="rgba("+I[0]+","+I[1]+","+I[2]+","+E*o+")",P?Hn(r,L,k,O,A,B):r.fillRect(L,k,O,A),r.fillStyle=R}if(D>0&&x>0){var V=r.strokeStyle,G=r.lineWidth,F=e.pstyle("text-border-color").value,q=e.pstyle("text-border-style").value;if(r.strokeStyle="rgba("+F[0]+","+F[1]+","+F[2]+","+x*o+")",r.lineWidth=D,r.setLineDash)switch(q){case"dotted":r.setLineDash([1,1]);break;case"dashed":r.setLineDash([4,2]);break;case"double":r.lineWidth=D/4,r.setLineDash([]);break;case"solid":r.setLineDash([]);break}if(P?Hn(r,L,k,O,A,B,"stroke"):r.strokeRect(L,k,O,A),q==="double"){var Y=D/2;P?Hn(r,L+Y,k+Y,O-Y*2,A-Y*2,B,"stroke"):r.strokeRect(L+Y,k+Y,O-Y*2,A-Y*2)}r.setLineDash&&r.setLineDash([]),r.lineWidth=G,r.strokeStyle=V}}var Q=2*e.pstyle("text-outline-width").pfValue;if(Q>0&&(r.lineWidth=Q),e.pstyle("text-wrap").value==="wrap"){var J=kr(s,"labelWrapCachedLines",t),_=kr(s,"labelLineHeight",t),j=d/2,W=this.getLabelJustification(e);switch(W==="auto"||(b==="left"?W==="left"?l+=-d:W==="center"&&(l+=-j):b==="center"?W==="left"?l+=-j:W==="right"&&(l+=j):b==="right"&&(W==="center"?l+=j:W==="right"&&(l+=d))),w){case"top":u-=(J.length-1)*_;break;case"center":case"bottom":u-=(J.length-1)*_;break}for(var z=0;z0&&r.strokeText(J[z],l,u),r.fillText(J[z],l,u),u+=_}else Q>0&&r.strokeText(c,l,u),r.fillText(c,l,u);S!==0&&(r.rotate(-S),r.translate(-v,-f))}}};var Xt={};Xt.drawNode=function(r,e,t){var a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,n=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,i=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0,s=this,o,l,u=e._private,v=u.rscratch,f=e.position();if(!(!ne(f.x)||!ne(f.y))&&!(i&&!e.visible())){var c=i?e.effectiveOpacity():1,h=s.usePaths(),d,y=!1,p=e.padding();o=e.width()+2*p,l=e.height()+2*p;var g;t&&(g=t,r.translate(-g.x1,-g.y1));for(var m=e.pstyle("background-image"),b=m.value,w=new Array(b.length),S=new Array(b.length),E=0,x=0;x0&&arguments[0]!==void 0?arguments[0]:L;s.eleFillStyle(r,e,N)},z=function(){var N=arguments.length>0&&arguments[0]!==void 0?arguments[0]:F;s.colorStrokeStyle(r,k[0],k[1],k[2],N)},K=function(){var N=arguments.length>0&&arguments[0]!==void 0?arguments[0]:J;s.colorStrokeStyle(r,Y[0],Y[1],Y[2],N)},X=function(N,H,ie,Z){var se=s.nodePathCache=s.nodePathCache||[],ge=uo(ie==="polygon"?ie+","+Z.join(","):ie,""+H,""+N,""+j),we=se[ge],fe,me=!1;return we!=null?(fe=we,me=!0,v.pathCache=fe):(fe=new Path2D,se[ge]=v.pathCache=fe),{path:fe,cacheHit:me}},ae=e.pstyle("shape").strValue,he=e.pstyle("shape-polygon-points").pfValue;if(h){r.translate(f.x,f.y);var te=X(o,l,ae,he);d=te.path,y=te.cacheHit}var re=function(){if(!y){var N=f;h&&(N={x:0,y:0}),s.nodeShapes[s.getNodeShape(e)].draw(d||r,N.x,N.y,o,l,j,v)}h?r.fill(d):r.fill()},ve=function(){for(var N=arguments.length>0&&arguments[0]!==void 0?arguments[0]:c,H=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,ie=u.backgrounding,Z=0,se=0;se0&&arguments[0]!==void 0?arguments[0]:!1,H=arguments.length>1&&arguments[1]!==void 0?arguments[1]:c;s.hasPie(e)&&(s.drawPie(r,e,H),N&&(h||s.nodeShapes[s.getNodeShape(e)].draw(r,f.x,f.y,o,l,j,v)))},oe=function(){var N=arguments.length>0&&arguments[0]!==void 0?arguments[0]:c,H=(P>0?P:-P)*N,ie=P>0?0:255;P!==0&&(s.colorFillStyle(r,ie,ie,ie,H),h?r.fill(d):r.fill())},de=function(){if(B>0){if(r.lineWidth=B,r.lineCap=R,r.lineJoin=A,r.setLineDash)switch(O){case"dotted":r.setLineDash([1,1]);break;case"dashed":r.setLineDash(V),r.lineDashOffset=G;break;case"solid":case"double":r.setLineDash([]);break}if(I!=="center"){if(r.save(),r.lineWidth*=2,I==="inside")h?r.clip(d):r.clip();else{var N=new Path2D;N.rect(-o/2-B,-l/2-B,o+2*B,l+2*B),N.addPath(d),r.clip(N,"evenodd")}h?r.stroke(d):r.stroke(),r.restore()}else h?r.stroke(d):r.stroke();if(O==="double"){r.lineWidth=B/3;var H=r.globalCompositeOperation;r.globalCompositeOperation="destination-out",h?r.stroke(d):r.stroke(),r.globalCompositeOperation=H}r.setLineDash&&r.setLineDash([])}},Le=function(){if(q>0){if(r.lineWidth=q,r.lineCap="butt",r.setLineDash)switch(Q){case"dotted":r.setLineDash([1,1]);break;case"dashed":r.setLineDash([4,2]);break;case"solid":case"double":r.setLineDash([]);break}var N=f;h&&(N={x:0,y:0});var H=s.getNodeShape(e),ie=B;I==="inside"&&(ie=0),I==="outside"&&(ie*=2);var Z=(o+ie+(q+_))/o,se=(l+ie+(q+_))/l,ge=o*Z,we=l*se,fe=s.nodeShapes[H].points,me;if(h){var be=X(ge,we,H,fe);me=be.path}if(H==="ellipse")s.drawEllipsePath(me||r,N.x,N.y,ge,we);else if(["round-diamond","round-heptagon","round-hexagon","round-octagon","round-pentagon","round-polygon","round-triangle","round-tag"].includes(H)){var ye=0,Ie=0,Ve=0;H==="round-diamond"?ye=(ie+_+q)*1.4:H==="round-heptagon"?(ye=(ie+_+q)*1.075,Ve=-(ie/2+_+q)/35):H==="round-hexagon"?ye=(ie+_+q)*1.12:H==="round-pentagon"?(ye=(ie+_+q)*1.13,Ve=-(ie/2+_+q)/15):H==="round-tag"?(ye=(ie+_+q)*1.12,Ie=(ie/2+q+_)*.07):H==="round-triangle"&&(ye=(ie+_+q)*(Math.PI/2),Ve=-(ie+_/2+q)/Math.PI),ye!==0&&(Z=(o+ye)/o,ge=o*Z,["round-hexagon","round-tag"].includes(H)||(se=(l+ye)/l,we=l*se)),j=j==="auto"?wo(ge,we):j;for(var gr=ge/2,pr=we/2,Ge=j+(ie+q+_)/2,Xe=new Array(fe.length/2),Ze=new Array(fe.length/2),lr=0;lr0){if(n=n||a.position(),i==null||s==null){var h=a.padding();i=a.width()+2*h,s=a.height()+2*h}o.colorFillStyle(t,v[0],v[1],v[2],u),o.nodeShapes[f].draw(t,n.x,n.y,i+l*2,s+l*2,c),t.fill()}}}};Xt.drawNodeOverlay=Cu("overlay");Xt.drawNodeUnderlay=Cu("underlay");Xt.hasPie=function(r){return r=r[0],r._private.hasPie};Xt.drawPie=function(r,e,t,a){e=e[0],a=a||e.position();var n=e.cy().style(),i=e.pstyle("pie-size"),s=a.x,o=a.y,l=e.width(),u=e.height(),v=Math.min(l,u)/2,f=0,c=this.usePaths();c&&(s=0,o=0),i.units==="%"?v=v*i.pfValue:i.pfValue!==void 0&&(v=i.pfValue/2);for(var h=1;h<=n.pieBackgroundN;h++){var d=e.pstyle("pie-"+h+"-background-size").value,y=e.pstyle("pie-"+h+"-background-color").value,p=e.pstyle("pie-"+h+"-background-opacity").value*t,g=d/100;g+f>1&&(g=1-f);var m=1.5*Math.PI+2*Math.PI*f,b=2*Math.PI*g,w=m+b;d===0||f>=1||f+g>1||(r.beginPath(),r.moveTo(s,o),r.arc(s,o,v,m,w),r.closePath(),this.colorFillStyle(r,y[0],y[1],y[2],p),r.fill(),f+=g)}};var mr={},dp=100;mr.getPixelRatio=function(){var r=this.data.contexts[0];if(this.forcedPixelRatio!=null)return this.forcedPixelRatio;var e=this.cy.window(),t=r.backingStorePixelRatio||r.webkitBackingStorePixelRatio||r.mozBackingStorePixelRatio||r.msBackingStorePixelRatio||r.oBackingStorePixelRatio||r.backingStorePixelRatio||1;return(e.devicePixelRatio||1)/t};mr.paintCache=function(r){for(var e=this.paintCaches=this.paintCaches||[],t=!0,a,n=0;ns.minMbLowQualFrames&&(s.motionBlurPxRatio=s.mbPxRBlurry)),s.clearingMotionBlur&&(s.motionBlurPxRatio=1),s.textureDrawLastFrame&&!f&&(v[s.NODE]=!0,v[s.SELECT_BOX]=!0);var m=l.style(),b=l.zoom(),w=n!==void 0?n:b,S=l.pan(),E={x:S.x,y:S.y},x={zoom:b,pan:{x:S.x,y:S.y}},D=s.prevViewport,C=D===void 0||x.zoom!==D.zoom||x.pan.x!==D.pan.x||x.pan.y!==D.pan.y;!C&&!(y&&!d)&&(s.motionBlurPxRatio=1),i&&(E=i),w*=o,E.x*=o,E.y*=o;var M=s.getCachedZSortedEles();function P(te,re,ve,le,oe){var de=te.globalCompositeOperation;te.globalCompositeOperation="destination-out",s.colorFillStyle(te,255,255,255,s.motionBlurTransparency),te.fillRect(re,ve,le,oe),te.globalCompositeOperation=de}function B(te,re){var ve,le,oe,de;!s.clearingMotionBlur&&(te===u.bufferContexts[s.MOTIONBLUR_BUFFER_NODE]||te===u.bufferContexts[s.MOTIONBLUR_BUFFER_DRAG])?(ve={x:S.x*h,y:S.y*h},le=b*h,oe=s.canvasWidth*h,de=s.canvasHeight*h):(ve=E,le=w,oe=s.canvasWidth,de=s.canvasHeight),te.setTransform(1,0,0,1,0,0),re==="motionBlur"?P(te,0,0,oe,de):!e&&(re===void 0||re)&&te.clearRect(0,0,oe,de),t||(te.translate(ve.x,ve.y),te.scale(le,le)),i&&te.translate(i.x,i.y),n&&te.scale(n,n)}if(f||(s.textureDrawLastFrame=!1),f){if(s.textureDrawLastFrame=!0,!s.textureCache){s.textureCache={},s.textureCache.bb=l.mutableElements().boundingBox(),s.textureCache.texture=s.data.bufferCanvases[s.TEXTURE_BUFFER];var L=s.data.bufferContexts[s.TEXTURE_BUFFER];L.setTransform(1,0,0,1,0,0),L.clearRect(0,0,s.canvasWidth*s.textureMult,s.canvasHeight*s.textureMult),s.render({forcedContext:L,drawOnlyNodeLayer:!0,forcedPxRatio:o*s.textureMult});var x=s.textureCache.viewport={zoom:l.zoom(),pan:l.pan(),width:s.canvasWidth,height:s.canvasHeight};x.mpan={x:(0-x.pan.x)/x.zoom,y:(0-x.pan.y)/x.zoom}}v[s.DRAG]=!1,v[s.NODE]=!1;var k=u.contexts[s.NODE],O=s.textureCache.texture,x=s.textureCache.viewport;k.setTransform(1,0,0,1,0,0),c?P(k,0,0,x.width,x.height):k.clearRect(0,0,x.width,x.height);var A=m.core("outside-texture-bg-color").value,R=m.core("outside-texture-bg-opacity").value;s.colorFillStyle(k,A[0],A[1],A[2],R),k.fillRect(0,0,x.width,x.height);var b=l.zoom();B(k,!1),k.clearRect(x.mpan.x,x.mpan.y,x.width/x.zoom/o,x.height/x.zoom/o),k.drawImage(O,x.mpan.x,x.mpan.y,x.width/x.zoom/o,x.height/x.zoom/o)}else s.textureOnViewport&&!e&&(s.textureCache=null);var I=l.extent(),V=s.pinching||s.hoverData.dragging||s.swipePanning||s.data.wheelZooming||s.hoverData.draggingEles||s.cy.animated(),G=s.hideEdgesOnViewport&&V,F=[];if(F[s.NODE]=!v[s.NODE]&&c&&!s.clearedForMotionBlur[s.NODE]||s.clearingMotionBlur,F[s.NODE]&&(s.clearedForMotionBlur[s.NODE]=!0),F[s.DRAG]=!v[s.DRAG]&&c&&!s.clearedForMotionBlur[s.DRAG]||s.clearingMotionBlur,F[s.DRAG]&&(s.clearedForMotionBlur[s.DRAG]=!0),v[s.NODE]||t||a||F[s.NODE]){var q=c&&!F[s.NODE]&&h!==1,k=e||(q?s.data.bufferContexts[s.MOTIONBLUR_BUFFER_NODE]:u.contexts[s.NODE]),Y=c&&!q?"motionBlur":void 0;B(k,Y),G?s.drawCachedNodes(k,M.nondrag,o,I):s.drawLayeredElements(k,M.nondrag,o,I),s.debug&&s.drawDebugPoints(k,M.nondrag),!t&&!c&&(v[s.NODE]=!1)}if(!a&&(v[s.DRAG]||t||F[s.DRAG])){var q=c&&!F[s.DRAG]&&h!==1,k=e||(q?s.data.bufferContexts[s.MOTIONBLUR_BUFFER_DRAG]:u.contexts[s.DRAG]);B(k,c&&!q?"motionBlur":void 0),G?s.drawCachedNodes(k,M.drag,o,I):s.drawCachedElements(k,M.drag,o,I),s.debug&&s.drawDebugPoints(k,M.drag),!t&&!c&&(v[s.DRAG]=!1)}if(s.showFps||!a&&v[s.SELECT_BOX]&&!t){var k=e||u.contexts[s.SELECT_BOX];if(B(k),s.selection[4]==1&&(s.hoverData.selecting||s.touchData.selecting)){var b=s.cy.zoom(),Q=m.core("selection-box-border-width").value/b;k.lineWidth=Q,k.fillStyle="rgba("+m.core("selection-box-color").value[0]+","+m.core("selection-box-color").value[1]+","+m.core("selection-box-color").value[2]+","+m.core("selection-box-opacity").value+")",k.fillRect(s.selection[0],s.selection[1],s.selection[2]-s.selection[0],s.selection[3]-s.selection[1]),Q>0&&(k.strokeStyle="rgba("+m.core("selection-box-border-color").value[0]+","+m.core("selection-box-border-color").value[1]+","+m.core("selection-box-border-color").value[2]+","+m.core("selection-box-opacity").value+")",k.strokeRect(s.selection[0],s.selection[1],s.selection[2]-s.selection[0],s.selection[3]-s.selection[1]))}if(u.bgActivePosistion&&!s.hoverData.selecting){var b=s.cy.zoom(),J=u.bgActivePosistion;k.fillStyle="rgba("+m.core("active-bg-color").value[0]+","+m.core("active-bg-color").value[1]+","+m.core("active-bg-color").value[2]+","+m.core("active-bg-opacity").value+")",k.beginPath(),k.arc(J.x,J.y,m.core("active-bg-size").pfValue/b,0,2*Math.PI),k.fill()}var _=s.lastRedrawTime;if(s.showFps&&_){_=Math.round(_);var j=Math.round(1e3/_);k.setTransform(1,0,0,1,0,0),k.fillStyle="rgba(255, 0, 0, 0.75)",k.strokeStyle="rgba(255, 0, 0, 0.75)",k.lineWidth=1,k.fillText("1 frame = "+_+" ms = "+j+" fps",0,20);var W=60;k.strokeRect(0,30,250,20),k.fillRect(0,30,250*Math.min(j/W,1),20)}t||(v[s.SELECT_BOX]=!1)}if(c&&h!==1){var z=u.contexts[s.NODE],K=s.data.bufferCanvases[s.MOTIONBLUR_BUFFER_NODE],X=u.contexts[s.DRAG],ae=s.data.bufferCanvases[s.MOTIONBLUR_BUFFER_DRAG],he=function(re,ve,le){re.setTransform(1,0,0,1,0,0),le||!g?re.clearRect(0,0,s.canvasWidth,s.canvasHeight):P(re,0,0,s.canvasWidth,s.canvasHeight);var oe=h;re.drawImage(ve,0,0,s.canvasWidth*oe,s.canvasHeight*oe,0,0,s.canvasWidth,s.canvasHeight)};(v[s.NODE]||F[s.NODE])&&(he(z,K,F[s.NODE]),v[s.NODE]=!1),(v[s.DRAG]||F[s.DRAG])&&(he(X,ae,F[s.DRAG]),v[s.DRAG]=!1)}s.prevViewport=x,s.clearingMotionBlur&&(s.clearingMotionBlur=!1,s.motionBlurCleared=!0,s.motionBlur=!0),c&&(s.motionBlurTimeout=setTimeout(function(){s.motionBlurTimeout=null,s.clearedForMotionBlur[s.NODE]=!1,s.clearedForMotionBlur[s.DRAG]=!1,s.motionBlur=!1,s.clearingMotionBlur=!f,s.mbFrames=0,v[s.NODE]=!0,v[s.DRAG]=!0,s.redraw()},dp)),e||l.emit("render")};var it={};it.drawPolygonPath=function(r,e,t,a,n,i){var s=a/2,o=n/2;r.beginPath&&r.beginPath(),r.moveTo(e+s*i[0],t+o*i[1]);for(var l=1;l0&&s>0){h.clearRect(0,0,i,s),h.globalCompositeOperation="source-over";var d=this.getCachedZSortedEles();if(r.full)h.translate(-a.x1*u,-a.y1*u),h.scale(u,u),this.drawElements(h,d),h.scale(1/u,1/u),h.translate(a.x1*u,a.y1*u);else{var y=e.pan(),p={x:y.x*u,y:y.y*u};u*=e.zoom(),h.translate(p.x,p.y),h.scale(u,u),this.drawElements(h,d),h.scale(1/u,1/u),h.translate(-p.x,-p.y)}r.bg&&(h.globalCompositeOperation="destination-over",h.fillStyle=r.bg,h.rect(0,0,i,s),h.fill())}return c};function hp(r,e){for(var t=atob(r),a=new ArrayBuffer(t.length),n=new Uint8Array(a),i=0;i"u"?"undefined":Ue(OffscreenCanvas))!=="undefined")t=new OffscreenCanvas(r,e);else{var a=this.cy.window(),n=a.document;t=n.createElement("canvas"),t.width=r,t.height=e}return t};[xu,Fr,Ur,Pi,wt,Xt,mr,it,Pa,Du].forEach(function(r){pe(De,r)});var yp=[{name:"null",impl:uu},{name:"base",impl:mu},{name:"canvas",impl:gp}],mp=[{type:"layout",extensions:Sg},{type:"renderer",extensions:yp}],Pu={},Bu={};function Mu(r,e,t){var a=t,n=function(D){Me("Can not register `"+e+"` for `"+r+"` since `"+D+"` already exists in the prototype and can not be overridden")};if(r==="core"){if(ba.prototype[e])return n(e);ba.prototype[e]=t}else if(r==="collection"){if(er.prototype[e])return n(e);er.prototype[e]=t}else if(r==="layout"){for(var i=function(D){this.options=D,t.call(this,D),Te(this._private)||(this._private={}),this._private.cy=D.cy,this._private.listeners=[],this.createEmitter()},s=i.prototype=Object.create(t.prototype),o=[],l=0;l{b.clear(),J.clear(),f.clear()},"clear"),O=X((e,t)=>{const n=b.get(t)||[];return i.trace("In isDescendant",t," ",e," = ",n.includes(e)),n.includes(e)},"isDescendant"),se=X((e,t)=>{const n=b.get(t)||[];return i.info("Descendants of ",t," is ",n),i.info("Edge is ",e),e.v===t||e.w===t?!1:n?n.includes(e.v)||O(e.v,t)||O(e.w,t)||n.includes(e.w):(i.debug("Tilt, ",t,",not in descendants"),!1)},"edgeInCluster"),G=X((e,t,n,o)=>{i.warn("Copying children of ",e,"root",o,"data",t.node(e),o);const c=t.children(e)||[];e!==o&&c.push(e),i.warn("Copying (nodes) clusterId",e,"nodes",c),c.forEach(a=>{if(t.children(a).length>0)G(a,t,n,o);else{const r=t.node(a);i.info("cp ",a," to ",o," with parent ",e),n.setNode(a,r),o!==t.parent(a)&&(i.warn("Setting parent",a,t.parent(a)),n.setParent(a,t.parent(a))),e!==o&&a!==e?(i.debug("Setting parent",a,e),n.setParent(a,e)):(i.info("In copy ",e,"root",o,"data",t.node(e),o),i.debug("Not Setting parent for node=",a,"cluster!==rootId",e!==o,"node!==clusterId",a!==e));const u=t.edges(a);i.debug("Copying Edges",u),u.forEach(l=>{i.info("Edge",l);const v=t.edge(l.v,l.w,l.name);i.info("Edge data",v,o);try{se(l,o)?(i.info("Copying as ",l.v,l.w,v,l.name),n.setEdge(l.v,l.w,v,l.name),i.info("newGraph edges ",n.edges(),n.edge(n.edges()[0]))):i.info("Skipping copy of edge ",l.v,"-->",l.w," rootId: ",o," clusterId:",e)}catch(C){i.error(C)}})}i.debug("Removing node",a),t.removeNode(a)})},"copy"),R=X((e,t)=>{const n=t.children(e);let o=[...n];for(const c of n)J.set(c,e),o=[...o,...R(c,t)];return o},"extractDescendants"),ie=X((e,t,n)=>{const o=e.edges().filter(l=>l.v===t||l.w===t),c=e.edges().filter(l=>l.v===n||l.w===n),a=o.map(l=>({v:l.v===t?n:l.v,w:l.w===t?t:l.w})),r=c.map(l=>({v:l.v,w:l.w}));return a.filter(l=>r.some(v=>l.v===v.v&&l.w===v.w))},"findCommonEdges"),D=X((e,t,n)=>{const o=t.children(e);if(i.trace("Searching children of id ",e,o),o.length<1)return e;let c;for(const a of o){const r=D(a,t,n),u=ie(t,n,r);if(r)if(u.length>0)c=r;else return r}return c},"findNonClusterChild"),k=X(e=>!f.has(e)||!f.get(e).externalConnections?e:f.has(e)?f.get(e).id:e,"getAnchorId"),re=X((e,t)=>{if(!e||t>10){i.debug("Opting out, no graph ");return}else i.debug("Opting in, graph ");e.nodes().forEach(function(n){e.children(n).length>0&&(i.warn("Cluster identified",n," Replacement id in edges: ",D(n,e,n)),b.set(n,R(n,e)),f.set(n,{id:D(n,e,n),clusterData:e.node(n)}))}),e.nodes().forEach(function(n){const o=e.children(n),c=e.edges();o.length>0?(i.debug("Cluster identified",n,b),c.forEach(a=>{const r=O(a.v,n),u=O(a.w,n);r^u&&(i.warn("Edge: ",a," leaves cluster ",n),i.warn("Descendants of XXX ",n,": ",b.get(n)),f.get(n).externalConnections=!0)})):i.debug("Not a cluster ",n,b)});for(let n of f.keys()){const o=f.get(n).id,c=e.parent(o);c!==n&&f.has(c)&&!f.get(c).externalConnections&&(f.get(n).id=c)}e.edges().forEach(function(n){const o=e.edge(n);i.warn("Edge "+n.v+" -> "+n.w+": "+JSON.stringify(n)),i.warn("Edge "+n.v+" -> "+n.w+": "+JSON.stringify(e.edge(n)));let c=n.v,a=n.w;if(i.warn("Fix XXX",f,"ids:",n.v,n.w,"Translating: ",f.get(n.v)," --- ",f.get(n.w)),f.get(n.v)||f.get(n.w)){if(i.warn("Fixing and trying - removing XXX",n.v,n.w,n.name),c=k(n.v),a=k(n.w),e.removeEdge(n.v,n.w,n.name),c!==n.v){const r=e.parent(c);f.get(r).externalConnections=!0,o.fromCluster=n.v}if(a!==n.w){const r=e.parent(a);f.get(r).externalConnections=!0,o.toCluster=n.w}i.warn("Fix Replacing with XXX",c,a,n.name),e.setEdge(c,a,o,n.name)}}),i.warn("Adjusted Graph",p(e)),T(e,0),i.trace(f)},"adjustClustersAndEdges"),T=X((e,t)=>{var c,a;if(i.warn("extractor - ",t,p(e),e.children("D")),t>10){i.error("Bailing out");return}let n=e.nodes(),o=!1;for(const r of n){const u=e.children(r);o=o||u.length>0}if(!o){i.debug("Done, no node has children",e.nodes());return}i.debug("Nodes = ",n,t);for(const r of n)if(i.debug("Extracting node",r,f,f.has(r)&&!f.get(r).externalConnections,!e.parent(r),e.node(r),e.children("D")," Depth ",t),!f.has(r))i.debug("Not a cluster",r,t);else if(!f.get(r).externalConnections&&e.children(r)&&e.children(r).length>0){i.warn("Cluster without external connections, without a parent and with children",r,t);let l=e.graph().rankdir==="TB"?"LR":"TB";(a=(c=f.get(r))==null?void 0:c.clusterData)!=null&&a.dir&&(l=f.get(r).clusterData.dir,i.warn("Fixing dir",f.get(r).clusterData.dir,l));const v=new B({multigraph:!0,compound:!0}).setGraph({rankdir:l,nodesep:50,ranksep:50,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}});i.warn("Old graph before copy",p(e)),G(r,e,v,r),e.setNode(r,{clusterNode:!0,id:r,clusterData:f.get(r).clusterData,label:f.get(r).label,graph:v}),i.warn("New graph after copy node: (",r,")",p(v)),i.debug("Old graph after copy",p(e))}else i.warn("Cluster ** ",r," **not meeting the criteria !externalConnections:",!f.get(r).externalConnections," no parent: ",!e.parent(r)," children ",e.children(r)&&e.children(r).length>0,e.children("D"),t),i.debug(f);n=e.nodes(),i.warn("New list of nodes",n);for(const r of n){const u=e.node(r);i.warn(" Now next level",r,u),u!=null&&u.clusterNode&&T(u.graph,t+1)}},"extractor"),M=X((e,t)=>{if(t.length===0)return[];let n=Object.assign([],t);return t.forEach(o=>{const c=e.children(o),a=M(e,c);n=[...n,...a]}),n},"sorter"),oe=X(e=>M(e,e.children()),"sortNodesByHierarchy"),j=X(async(e,t,n,o,c,a)=>{i.warn("Graph in recursive render:XAX",p(t),c);const r=t.graph().rankdir;i.trace("Dir in recursive render - dir:",r);const u=e.insert("g").attr("class","root");t.nodes()?i.info("Recursive render XXX",t.nodes()):i.info("No nodes found for",t),t.edges().length>0&&i.info("Recursive edges",t.edge(t.edges()[0]));const l=u.insert("g").attr("class","clusters"),v=u.insert("g").attr("class","edgePaths"),C=u.insert("g").attr("class","edgeLabels"),g=u.insert("g").attr("class","nodes");await Promise.all(t.nodes().map(async function(d){const s=t.node(d);if(c!==void 0){const m=JSON.parse(JSON.stringify(c.clusterData));i.trace(`Setting data for parent cluster XXX + Node.id = `,d,` + data=`,m.height,` +Parent cluster`,c.height),t.setNode(c.id,m),t.parent(d)||(i.trace("Setting parent",d,c.id),t.setParent(d,c.id,m))}if(i.info("(Insert) Node XXX"+d+": "+JSON.stringify(t.node(d))),s!=null&&s.clusterNode){i.info("Cluster identified XBX",d,s.width,t.node(d));const{ranksep:m,nodesep:h}=t.graph();s.graph.setGraph({...s.graph.graph(),ranksep:m+25,nodesep:h});const N=await j(g,s.graph,n,o,t.node(d),a),x=N.elem;z(s,x),s.diff=N.diff||0,i.info("New compound node after recursive render XAX",d,"width",s.width,"height",s.height),U(x,s)}else t.children(d).length>0?(i.trace("Cluster - the non recursive path XBX",d,s.id,s,s.width,"Graph:",t),i.trace(D(s.id,t)),f.set(s.id,{id:D(s.id,t),node:s})):(i.trace("Node - the non recursive path XAX",d,g,t.node(d),r),await $(g,t.node(d),{config:a,dir:r}))})),await X(async()=>{const d=t.edges().map(async function(s){const m=t.edge(s.v,s.w,s.name);i.info("Edge "+s.v+" -> "+s.w+": "+JSON.stringify(s)),i.info("Edge "+s.v+" -> "+s.w+": ",s," ",JSON.stringify(t.edge(s))),i.info("Fix",f,"ids:",s.v,s.w,"Translating: ",f.get(s.v),f.get(s.w)),await Z(C,m)});await Promise.all(d)},"processEdges")(),i.info("Graph before layout:",JSON.stringify(p(t))),i.info("############################################# XXX"),i.info("### Layout ### XXX"),i.info("############################################# XXX"),I(t),i.info("Graph after layout:",JSON.stringify(p(t)));let E=0,{subGraphTitleTotalMargin:y}=q(a);return await Promise.all(oe(t).map(async function(d){var m;const s=t.node(d);if(i.info("Position XBX => "+d+": ("+s.x,","+s.y,") width: ",s.width," height: ",s.height),s!=null&&s.clusterNode)s.y+=y,i.info("A tainted cluster node XBX1",d,s.id,s.width,s.height,s.x,s.y,t.parent(d)),f.get(s.id).node=s,P(s);else if(t.children(d).length>0){i.info("A pure cluster node XBX1",d,s.id,s.x,s.y,s.width,s.height,t.parent(d)),s.height+=y,t.node(s.parentId);const h=(s==null?void 0:s.padding)/2||0,N=((m=s==null?void 0:s.labelBBox)==null?void 0:m.height)||0,x=N-h||0;i.debug("OffsetY",x,"labelHeight",N,"halfPadding",h),await K(l,s),f.get(s.id).node=s}else{const h=t.node(s.parentId);s.y+=y/2,i.info("A regular node XBX1 - using the padding",s.id,"parent",s.parentId,s.width,s.height,s.x,s.y,"offsetY",s.offsetY,"parent",h,h==null?void 0:h.offsetY,s),P(s)}})),t.edges().forEach(function(d){const s=t.edge(d);i.info("Edge "+d.v+" -> "+d.w+": "+JSON.stringify(s),s),s.points.forEach(x=>x.y+=y/2);const m=t.node(d.v);var h=t.node(d.w);const N=Q(v,s,f,n,m,h,o);W(s,N)}),t.nodes().forEach(function(d){const s=t.node(d);i.info(d,s.type,s.diff),s.isGroup&&(E=s.diff)}),i.warn("Returning from recursive render XAX",u,E),{elem:u,diff:E}},"recursiveRender"),me=X(async(e,t)=>{var a,r,u,l,v,C;const n=new B({multigraph:!0,compound:!0}).setGraph({rankdir:e.direction,nodesep:((a=e.config)==null?void 0:a.nodeSpacing)||((u=(r=e.config)==null?void 0:r.flowchart)==null?void 0:u.nodeSpacing)||e.nodeSpacing,ranksep:((l=e.config)==null?void 0:l.rankSpacing)||((C=(v=e.config)==null?void 0:v.flowchart)==null?void 0:C.rankSpacing)||e.rankSpacing,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}}),o=t.select("g");F(o,e.markers,e.type,e.diagramId),Y(),_(),H(),te(),e.nodes.forEach(g=>{n.setNode(g.id,{...g}),g.parentId&&n.setParent(g.id,g.parentId)}),i.debug("Edges:",e.edges),e.edges.forEach(g=>{if(g.start===g.end){const w=g.start,E=w+"---"+w+"---1",y=w+"---"+w+"---2",d=n.node(w);n.setNode(E,{domId:E,id:E,parentId:d.parentId,labelStyle:"",label:"",padding:0,shape:"labelRect",style:"",width:10,height:10}),n.setParent(E,d.parentId),n.setNode(y,{domId:y,id:y,parentId:d.parentId,labelStyle:"",padding:0,shape:"labelRect",label:"",style:"",width:10,height:10}),n.setParent(y,d.parentId);const s=structuredClone(g),m=structuredClone(g),h=structuredClone(g);s.label="",s.arrowTypeEnd="none",s.id=w+"-cyclic-special-1",m.arrowTypeEnd="none",m.id=w+"-cyclic-special-mid",h.label="",d.isGroup&&(s.fromCluster=w,h.toCluster=w),h.id=w+"-cyclic-special-2",n.setEdge(w,E,s,w+"-cyclic-special-0"),n.setEdge(E,y,m,w+"-cyclic-special-1"),n.setEdge(y,w,h,w+"-cyc{const t=v({...I,...T().packet});return t.showBits&&(t.paddingY+=10),t},"getConfig"),Y=n(()=>m.packet,"getPacket"),M=n(t=>{t.length>0&&m.packet.push(t)},"pushWord"),O=n(()=>{E(),m=structuredClone(C)},"clear"),h={pushWord:M,getPacket:Y,getConfig:L,clear:O,setAccTitle:S,getAccTitle:F,setDiagramTitle:z,getDiagramTitle:P,getAccDescription:W,setAccDescription:D},q=1e4,G=n(t=>{w(t,h);let e=-1,o=[],s=1;const{bitsPerRow:i}=h.getConfig();for(let{start:a,end:r,label:p}of t.blocks){if(r&&r{if(t.end===void 0&&(t.end=t.start),t.start>t.end)throw new Error(`Block start ${t.start} is greater than block end ${t.end}.`);return t.end+1<=e*o?[t,void 0]:[{start:t.start,end:e*o-1,label:t.label},{start:e*o,end:t.end,label:t.label}]},"getNextFittingBlock"),K={parse:n(async t=>{const e=await N("packet",t);x.debug(e),G(e)},"parse")},R=n((t,e,o,s)=>{const i=s.db,a=i.getConfig(),{rowHeight:r,paddingY:p,bitWidth:b,bitsPerRow:c}=a,u=i.getPacket(),l=i.getDiagramTitle(),g=r+p,d=g*(u.length+1)-(l?0:r),k=b*c+2,f=_(e);f.attr("viewbox",`0 0 ${k} ${d}`),A(f,d,k,a.useMaxWidth);for(const[$,y]of u.entries())U(f,y,$,a);f.append("text").text(l).attr("x",k/2).attr("y",d-g/2).attr("dominant-baseline","middle").attr("text-anchor","middle").attr("class","packetTitle")},"draw"),U=n((t,e,o,{rowHeight:s,paddingX:i,paddingY:a,bitWidth:r,bitsPerRow:p,showBits:b})=>{const c=t.append("g"),u=o*(s+a)+a;for(const l of e){const g=l.start%p*r+1,d=(l.end-l.start+1)*r-i;if(c.append("rect").attr("x",g).attr("y",u).attr("width",d).attr("height",s).attr("class","packetBlock"),c.append("text").attr("x",g+d/2).attr("y",u+s/2).attr("class","packetLabel").attr("dominant-baseline","middle").attr("text-anchor","middle").text(l.label),!b)continue;const k=l.end===l.start,f=u-2;c.append("text").attr("x",g+(k?d/2:0)).attr("y",f).attr("class","packetByte start").attr("dominant-baseline","auto").attr("text-anchor",k?"middle":"start").text(l.start),k||c.append("text").attr("x",g+d).attr("y",f).attr("class","packetByte end").attr("dominant-baseline","auto").attr("text-anchor","end").text(l.end)}},"drawWord"),X={draw:R},j={byteFontSize:"10px",startByteColor:"black",endByteColor:"black",labelColor:"black",labelFontSize:"12px",titleColor:"black",titleFontSize:"14px",blockStrokeColor:"black",blockStrokeWidth:"1",blockFillColor:"#efefef"},J=n(({packet:t}={})=>{const e=v(j,t);return` + .packetByte { + font-size: ${e.byteFontSize}; + } + .packetByte.start { + fill: ${e.startByteColor}; + } + .packetByte.end { + fill: ${e.endByteColor}; + } + .packetLabel { + fill: ${e.labelColor}; + font-size: ${e.labelFontSize}; + } + .packetTitle { + fill: ${e.titleColor}; + font-size: ${e.titleFontSize}; + } + .packetBlock { + stroke: ${e.blockStrokeColor}; + stroke-width: ${e.blockStrokeWidth}; + fill: ${e.blockFillColor}; + } + `},"styles"),lt={parser:K,db:h,renderer:X,styles:J};export{lt as diagram}; diff --git a/assets/chunks/erDiagram-WO52GFNT.BtSPEK0o.js b/assets/chunks/erDiagram-WO52GFNT.BtSPEK0o.js new file mode 100644 index 000000000..5064b64ee --- /dev/null +++ b/assets/chunks/erDiagram-WO52GFNT.BtSPEK0o.js @@ -0,0 +1,51 @@ +import{_ as u,d as U,s as kt,g as xt,c as Rt,b as Ot,q as bt,r as Nt,l as X,x as Tt,j as at,v as At,k as Mt,a1 as vt,a8 as St,a7 as wt}from"../app.D0Wo8w0i.js";import{G as It}from"./graph.Bl1hHz-h.js";import{l as Dt}from"./layout.BQOWCxFK.js";import"./framework.B1keMFNq.js";import"./theme.8WvZWF-M.js";import"./baseUniq.DoVpE4hx.js";import"./basePickBy.BafM5tVf.js";const Lt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function Bt(t){return typeof t=="string"&&Lt.test(t)}const v=[];for(let t=0;t<256;++t)v.push((t+256).toString(16).slice(1));function Ct(t,e=0){return v[t[e+0]]+v[t[e+1]]+v[t[e+2]]+v[t[e+3]]+"-"+v[t[e+4]]+v[t[e+5]]+"-"+v[t[e+6]]+v[t[e+7]]+"-"+v[t[e+8]]+v[t[e+9]]+"-"+v[t[e+10]]+v[t[e+11]]+v[t[e+12]]+v[t[e+13]]+v[t[e+14]]+v[t[e+15]]}function Pt(t){if(!Bt(t))throw TypeError("Invalid UUID");let e;const r=new Uint8Array(16);return r[0]=(e=parseInt(t.slice(0,8),16))>>>24,r[1]=e>>>16&255,r[2]=e>>>8&255,r[3]=e&255,r[4]=(e=parseInt(t.slice(9,13),16))>>>8,r[5]=e&255,r[6]=(e=parseInt(t.slice(14,18),16))>>>8,r[7]=e&255,r[8]=(e=parseInt(t.slice(19,23),16))>>>8,r[9]=e&255,r[10]=(e=parseInt(t.slice(24,36),16))/1099511627776&255,r[11]=e/4294967296&255,r[12]=e>>>24&255,r[13]=e>>>16&255,r[14]=e>>>8&255,r[15]=e&255,r}function Yt(t){t=unescape(encodeURIComponent(t));const e=[];for(let r=0;r>>32-e}function Ht(t){const e=[1518500249,1859775393,2400959708,3395469782],r=[1732584193,4023233417,2562383102,271733878,3285377520];if(typeof t=="string"){const y=unescape(encodeURIComponent(t));t=[];for(let o=0;o>>0;x=k,k=m,m=it(g,30)>>>0,g=h,h=b}r[0]=r[0]+h>>>0,r[1]=r[1]+g>>>0,r[2]=r[2]+m>>>0,r[3]=r[3]+k>>>0,r[4]=r[4]+x>>>0}return[r[0]>>24&255,r[0]>>16&255,r[0]>>8&255,r[0]&255,r[1]>>24&255,r[1]>>16&255,r[1]>>8&255,r[1]&255,r[2]>>24&255,r[2]>>16&255,r[2]>>8&255,r[2]&255,r[3]>>24&255,r[3]>>16&255,r[3]>>8&255,r[3]&255,r[4]>>24&255,r[4]>>16&255,r[4]>>8&255,r[4]&255]}const zt=Wt("v5",80,Ht);var nt=function(){var t=u(function(w,i,n,l){for(n=n||{},l=w.length;l--;n[w[l]]=i);return n},"o"),e=[6,8,10,20,22,24,26,27,28],r=[1,10],f=[1,11],c=[1,12],_=[1,13],y=[1,14],o=[1,15],h=[1,21],g=[1,22],m=[1,23],k=[1,24],x=[1,25],p=[6,8,10,13,15,18,19,20,22,24,26,27,28,41,42,43,44,45],O=[1,34],b=[27,28,46,47],Y=[41,42,43,44,45],Z=[17,34],F=[1,54],M=[1,53],S=[17,34,36,38],N={trace:u(function(){},"trace"),yy:{},symbols_:{error:2,start:3,ER_DIAGRAM:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,entityName:11,relSpec:12,":":13,role:14,BLOCK_START:15,attributes:16,BLOCK_STOP:17,SQS:18,SQE:19,title:20,title_value:21,acc_title:22,acc_title_value:23,acc_descr:24,acc_descr_value:25,acc_descr_multiline_value:26,ALPHANUM:27,ENTITY_NAME:28,attribute:29,attributeType:30,attributeName:31,attributeKeyTypeList:32,attributeComment:33,ATTRIBUTE_WORD:34,attributeKeyType:35,COMMA:36,ATTRIBUTE_KEY:37,COMMENT:38,cardinality:39,relType:40,ZERO_OR_ONE:41,ZERO_OR_MORE:42,ONE_OR_MORE:43,ONLY_ONE:44,MD_PARENT:45,NON_IDENTIFYING:46,IDENTIFYING:47,WORD:48,$accept:0,$end:1},terminals_:{2:"error",4:"ER_DIAGRAM",6:"EOF",8:"SPACE",10:"NEWLINE",13:":",15:"BLOCK_START",17:"BLOCK_STOP",18:"SQS",19:"SQE",20:"title",21:"title_value",22:"acc_title",23:"acc_title_value",24:"acc_descr",25:"acc_descr_value",26:"acc_descr_multiline_value",27:"ALPHANUM",28:"ENTITY_NAME",34:"ATTRIBUTE_WORD",36:"COMMA",37:"ATTRIBUTE_KEY",38:"COMMENT",41:"ZERO_OR_ONE",42:"ZERO_OR_MORE",43:"ONE_OR_MORE",44:"ONLY_ONE",45:"MD_PARENT",46:"NON_IDENTIFYING",47:"IDENTIFYING",48:"WORD"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,5],[9,4],[9,3],[9,1],[9,7],[9,6],[9,4],[9,2],[9,2],[9,2],[9,1],[11,1],[11,1],[16,1],[16,2],[29,2],[29,3],[29,3],[29,4],[30,1],[31,1],[32,1],[32,3],[35,1],[33,1],[12,3],[39,1],[39,1],[39,1],[39,1],[39,1],[40,1],[40,1],[14,1],[14,1],[14,1]],performAction:u(function(i,n,l,d,E,a,V){var s=a.length-1;switch(E){case 1:break;case 2:this.$=[];break;case 3:a[s-1].push(a[s]),this.$=a[s-1];break;case 4:case 5:this.$=a[s];break;case 6:case 7:this.$=[];break;case 8:d.addEntity(a[s-4]),d.addEntity(a[s-2]),d.addRelationship(a[s-4],a[s],a[s-2],a[s-3]);break;case 9:d.addEntity(a[s-3]),d.addAttributes(a[s-3],a[s-1]);break;case 10:d.addEntity(a[s-2]);break;case 11:d.addEntity(a[s]);break;case 12:d.addEntity(a[s-6],a[s-4]),d.addAttributes(a[s-6],a[s-1]);break;case 13:d.addEntity(a[s-5],a[s-3]);break;case 14:d.addEntity(a[s-3],a[s-1]);break;case 15:case 16:this.$=a[s].trim(),d.setAccTitle(this.$);break;case 17:case 18:this.$=a[s].trim(),d.setAccDescription(this.$);break;case 19:case 43:this.$=a[s];break;case 20:case 41:case 42:this.$=a[s].replace(/"/g,"");break;case 21:case 29:this.$=[a[s]];break;case 22:a[s].push(a[s-1]),this.$=a[s];break;case 23:this.$={attributeType:a[s-1],attributeName:a[s]};break;case 24:this.$={attributeType:a[s-2],attributeName:a[s-1],attributeKeyTypeList:a[s]};break;case 25:this.$={attributeType:a[s-2],attributeName:a[s-1],attributeComment:a[s]};break;case 26:this.$={attributeType:a[s-3],attributeName:a[s-2],attributeKeyTypeList:a[s-1],attributeComment:a[s]};break;case 27:case 28:case 31:this.$=a[s];break;case 30:a[s-2].push(a[s]),this.$=a[s-2];break;case 32:this.$=a[s].replace(/"/g,"");break;case 33:this.$={cardA:a[s],relType:a[s-1],cardB:a[s-2]};break;case 34:this.$=d.Cardinality.ZERO_OR_ONE;break;case 35:this.$=d.Cardinality.ZERO_OR_MORE;break;case 36:this.$=d.Cardinality.ONE_OR_MORE;break;case 37:this.$=d.Cardinality.ONLY_ONE;break;case 38:this.$=d.Cardinality.MD_PARENT;break;case 39:this.$=d.Identification.NON_IDENTIFYING;break;case 40:this.$=d.Identification.IDENTIFYING;break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:9,20:r,22:f,24:c,26:_,27:y,28:o},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:16,11:9,20:r,22:f,24:c,26:_,27:y,28:o},t(e,[2,5]),t(e,[2,6]),t(e,[2,11],{12:17,39:20,15:[1,18],18:[1,19],41:h,42:g,43:m,44:k,45:x}),{21:[1,26]},{23:[1,27]},{25:[1,28]},t(e,[2,18]),t(p,[2,19]),t(p,[2,20]),t(e,[2,4]),{11:29,27:y,28:o},{16:30,17:[1,31],29:32,30:33,34:O},{11:35,27:y,28:o},{40:36,46:[1,37],47:[1,38]},t(b,[2,34]),t(b,[2,35]),t(b,[2,36]),t(b,[2,37]),t(b,[2,38]),t(e,[2,15]),t(e,[2,16]),t(e,[2,17]),{13:[1,39]},{17:[1,40]},t(e,[2,10]),{16:41,17:[2,21],29:32,30:33,34:O},{31:42,34:[1,43]},{34:[2,27]},{19:[1,44]},{39:45,41:h,42:g,43:m,44:k,45:x},t(Y,[2,39]),t(Y,[2,40]),{14:46,27:[1,49],28:[1,48],48:[1,47]},t(e,[2,9]),{17:[2,22]},t(Z,[2,23],{32:50,33:51,35:52,37:F,38:M}),t([17,34,37,38],[2,28]),t(e,[2,14],{15:[1,55]}),t([27,28],[2,33]),t(e,[2,8]),t(e,[2,41]),t(e,[2,42]),t(e,[2,43]),t(Z,[2,24],{33:56,36:[1,57],38:M}),t(Z,[2,25]),t(S,[2,29]),t(Z,[2,32]),t(S,[2,31]),{16:58,17:[1,59],29:32,30:33,34:O},t(Z,[2,26]),{35:60,37:F},{17:[1,61]},t(e,[2,13]),t(S,[2,30]),t(e,[2,12])],defaultActions:{34:[2,27],41:[2,22]},parseError:u(function(i,n){if(n.recoverable)this.trace(i);else{var l=new Error(i);throw l.hash=n,l}},"parseError"),parse:u(function(i){var n=this,l=[0],d=[],E=[null],a=[],V=this.table,s="",j=0,lt=0,_t=2,ct=1,Et=a.slice.call(arguments,1),A=Object.create(this.lexer),H={yy:{}};for(var $ in this.yy)Object.prototype.hasOwnProperty.call(this.yy,$)&&(H.yy[$]=this.yy[$]);A.setInput(i,H.yy),H.yy.lexer=A,H.yy.parser=this,typeof A.yylloc>"u"&&(A.yylloc={});var tt=A.yylloc;a.push(tt);var gt=A.options&&A.options.ranges;typeof H.yy.parseError=="function"?this.parseError=H.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function mt(D){l.length=l.length-2*D,E.length=E.length-D,a.length=a.length-D}u(mt,"popStack");function ht(){var D;return D=d.pop()||A.lex()||ct,typeof D!="number"&&(D instanceof Array&&(d=D,D=d.pop()),D=n.symbols_[D]||D),D}u(ht,"lex");for(var I,z,B,et,K={},q,W,dt,J;;){if(z=l[l.length-1],this.defaultActions[z]?B=this.defaultActions[z]:((I===null||typeof I>"u")&&(I=ht()),B=V[z]&&V[z][I]),typeof B>"u"||!B.length||!B[0]){var rt="";J=[];for(q in V[z])this.terminals_[q]&&q>_t&&J.push("'"+this.terminals_[q]+"'");A.showPosition?rt="Parse error on line "+(j+1)+`: +`+A.showPosition()+` +Expecting `+J.join(", ")+", got '"+(this.terminals_[I]||I)+"'":rt="Parse error on line "+(j+1)+": Unexpected "+(I==ct?"end of input":"'"+(this.terminals_[I]||I)+"'"),this.parseError(rt,{text:A.match,token:this.terminals_[I]||I,line:A.yylineno,loc:tt,expected:J})}if(B[0]instanceof Array&&B.length>1)throw new Error("Parse Error: multiple actions possible at state: "+z+", token: "+I);switch(B[0]){case 1:l.push(I),E.push(A.yytext),a.push(A.yylloc),l.push(B[1]),I=null,lt=A.yyleng,s=A.yytext,j=A.yylineno,tt=A.yylloc;break;case 2:if(W=this.productions_[B[1]][1],K.$=E[E.length-W],K._$={first_line:a[a.length-(W||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(W||1)].first_column,last_column:a[a.length-1].last_column},gt&&(K._$.range=[a[a.length-(W||1)].range[0],a[a.length-1].range[1]]),et=this.performAction.apply(K,[s,lt,j,H.yy,B[1],E,a].concat(Et)),typeof et<"u")return et;W&&(l=l.slice(0,-1*W*2),E=E.slice(0,-1*W),a=a.slice(0,-1*W)),l.push(this.productions_[B[1]][0]),E.push(K.$),a.push(K._$),dt=V[l[l.length-2]][l[l.length-1]],l.push(dt);break;case 3:return!0}}return!0},"parse")},T=function(){var w={EOF:1,parseError:u(function(n,l){if(this.yy.parser)this.yy.parser.parseError(n,l);else throw new Error(n)},"parseError"),setInput:u(function(i,n){return this.yy=n||this.yy||{},this._input=i,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:u(function(){var i=this._input[0];this.yytext+=i,this.yyleng++,this.offset++,this.match+=i,this.matched+=i;var n=i.match(/(?:\r\n?|\n).*/g);return n?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),i},"input"),unput:u(function(i){var n=i.length,l=i.split(/(?:\r\n?|\n)/g);this._input=i+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-n),this.offset-=n;var d=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),l.length-1&&(this.yylineno-=l.length-1);var E=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:l?(l.length===d.length?this.yylloc.first_column:0)+d[d.length-l.length].length-l[0].length:this.yylloc.first_column-n},this.options.ranges&&(this.yylloc.range=[E[0],E[0]+this.yyleng-n]),this.yyleng=this.yytext.length,this},"unput"),more:u(function(){return this._more=!0,this},"more"),reject:u(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:u(function(i){this.unput(this.match.slice(i))},"less"),pastInput:u(function(){var i=this.matched.substr(0,this.matched.length-this.match.length);return(i.length>20?"...":"")+i.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:u(function(){var i=this.match;return i.length<20&&(i+=this._input.substr(0,20-i.length)),(i.substr(0,20)+(i.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:u(function(){var i=this.pastInput(),n=new Array(i.length+1).join("-");return i+this.upcomingInput()+` +`+n+"^"},"showPosition"),test_match:u(function(i,n){var l,d,E;if(this.options.backtrack_lexer&&(E={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(E.yylloc.range=this.yylloc.range.slice(0))),d=i[0].match(/(?:\r\n?|\n).*/g),d&&(this.yylineno+=d.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:d?d[d.length-1].length-d[d.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+i[0].length},this.yytext+=i[0],this.match+=i[0],this.matches=i,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(i[0].length),this.matched+=i[0],l=this.performAction.call(this,this.yy,this,n,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),l)return l;if(this._backtrack){for(var a in E)this[a]=E[a];return!1}return!1},"test_match"),next:u(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var i,n,l,d;this._more||(this.yytext="",this.match="");for(var E=this._currentRules(),a=0;an[0].length)){if(n=l,d=a,this.options.backtrack_lexer){if(i=this.test_match(l,E[a]),i!==!1)return i;if(this._backtrack){n=!1;continue}else return!1}else if(!this.options.flex)break}return n?(i=this.test_match(n,E[d]),i!==!1?i:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:u(function(){var n=this.next();return n||this.lex()},"lex"),begin:u(function(n){this.conditionStack.push(n)},"begin"),popState:u(function(){var n=this.conditionStack.length-1;return n>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:u(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:u(function(n){return n=this.conditionStack.length-1-Math.abs(n||0),n>=0?this.conditionStack[n]:"INITIAL"},"topState"),pushState:u(function(n){this.begin(n)},"pushState"),stateStackSize:u(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:u(function(n,l,d,E){switch(d){case 0:return this.begin("acc_title"),22;case 1:return this.popState(),"acc_title_value";case 2:return this.begin("acc_descr"),24;case 3:return this.popState(),"acc_descr_value";case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return 10;case 8:break;case 9:return 8;case 10:return 28;case 11:return 48;case 12:return 4;case 13:return this.begin("block"),15;case 14:return 36;case 15:break;case 16:return 37;case 17:return 34;case 18:return 34;case 19:return 38;case 20:break;case 21:return this.popState(),17;case 22:return l.yytext[0];case 23:return 18;case 24:return 19;case 25:return 41;case 26:return 43;case 27:return 43;case 28:return 43;case 29:return 41;case 30:return 41;case 31:return 42;case 32:return 42;case 33:return 42;case 34:return 42;case 35:return 42;case 36:return 43;case 37:return 42;case 38:return 43;case 39:return 44;case 40:return 44;case 41:return 44;case 42:return 44;case 43:return 41;case 44:return 42;case 45:return 43;case 46:return 45;case 47:return 46;case 48:return 47;case 49:return 47;case 50:return 46;case 51:return 46;case 52:return 46;case 53:return 27;case 54:return l.yytext[0];case 55:return 6}},"anonymous"),rules:[/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:[\s]+)/i,/^(?:"[^"%\r\n\v\b\\]+")/i,/^(?:"[^"]*")/i,/^(?:erDiagram\b)/i,/^(?:\{)/i,/^(?:,)/i,/^(?:\s+)/i,/^(?:\b((?:PK)|(?:FK)|(?:UK))\b)/i,/^(?:(.*?)[~](.*?)*[~])/i,/^(?:[\*A-Za-z_][A-Za-z0-9\-_\[\]\(\)]*)/i,/^(?:"[^"]*")/i,/^(?:[\n]+)/i,/^(?:\})/i,/^(?:.)/i,/^(?:\[)/i,/^(?:\])/i,/^(?:one or zero\b)/i,/^(?:one or more\b)/i,/^(?:one or many\b)/i,/^(?:1\+)/i,/^(?:\|o\b)/i,/^(?:zero or one\b)/i,/^(?:zero or more\b)/i,/^(?:zero or many\b)/i,/^(?:0\+)/i,/^(?:\}o\b)/i,/^(?:many\(0\))/i,/^(?:many\(1\))/i,/^(?:many\b)/i,/^(?:\}\|)/i,/^(?:one\b)/i,/^(?:only one\b)/i,/^(?:1\b)/i,/^(?:\|\|)/i,/^(?:o\|)/i,/^(?:o\{)/i,/^(?:\|\{)/i,/^(?:\s*u\b)/i,/^(?:\.\.)/i,/^(?:--)/i,/^(?:to\b)/i,/^(?:optionally to\b)/i,/^(?:\.-)/i,/^(?:-\.)/i,/^(?:[A-Za-z_][A-Za-z0-9\-_]*)/i,/^(?:.)/i,/^(?:$)/i],conditions:{acc_descr_multiline:{rules:[5,6],inclusive:!1},acc_descr:{rules:[3],inclusive:!1},acc_title:{rules:[1],inclusive:!1},block:{rules:[14,15,16,17,18,19,20,21,22],inclusive:!1},INITIAL:{rules:[0,2,4,7,8,9,10,11,12,13,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55],inclusive:!0}}};return w}();N.lexer=T;function L(){this.yy={}}return u(L,"Parser"),L.prototype=N,N.Parser=L,new L}();nt.parser=nt;var Gt=nt,G=new Map,ot=[],Kt={ZERO_OR_ONE:"ZERO_OR_ONE",ZERO_OR_MORE:"ZERO_OR_MORE",ONE_OR_MORE:"ONE_OR_MORE",ONLY_ONE:"ONLY_ONE",MD_PARENT:"MD_PARENT"},Vt={NON_IDENTIFYING:"NON_IDENTIFYING",IDENTIFYING:"IDENTIFYING"},ft=u(function(t,e=void 0){return G.has(t)?!G.get(t).alias&&e&&(G.get(t).alias=e,X.info(`Add alias '${e}' to entity '${t}'`)):(G.set(t,{attributes:[],alias:e}),X.info("Added new entity :",t)),G.get(t)},"addEntity"),Xt=u(()=>G,"getEntities"),Qt=u(function(t,e){let r=ft(t),f;for(f=e.length-1;f>=0;f--)r.attributes.push(e[f]),X.debug("Added attribute ",e[f].attributeName)},"addAttributes"),jt=u(function(t,e,r,f){let c={entityA:t,roleA:e,entityB:r,relSpec:f};ot.push(c),X.debug("Added new relationship :",c)},"addRelationship"),qt=u(()=>ot,"getRelationships"),Jt=u(function(){G=new Map,ot=[],Tt()},"clear"),$t={Cardinality:Kt,Identification:Vt,getConfig:u(()=>U().er,"getConfig"),addEntity:ft,addAttributes:Qt,getEntities:Xt,addRelationship:jt,getRelationships:qt,clear:Jt,setAccTitle:kt,getAccTitle:xt,setAccDescription:Rt,getAccDescription:Ot,setDiagramTitle:bt,getDiagramTitle:Nt},C={ONLY_ONE_START:"ONLY_ONE_START",ONLY_ONE_END:"ONLY_ONE_END",ZERO_OR_ONE_START:"ZERO_OR_ONE_START",ZERO_OR_ONE_END:"ZERO_OR_ONE_END",ONE_OR_MORE_START:"ONE_OR_MORE_START",ONE_OR_MORE_END:"ONE_OR_MORE_END",ZERO_OR_MORE_START:"ZERO_OR_MORE_START",ZERO_OR_MORE_END:"ZERO_OR_MORE_END",MD_PARENT_END:"MD_PARENT_END",MD_PARENT_START:"MD_PARENT_START"},te=u(function(t,e){let r;t.append("defs").append("marker").attr("id",C.MD_PARENT_START).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",C.MD_PARENT_END).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",C.ONLY_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M9,0 L9,18 M15,0 L15,18"),t.append("defs").append("marker").attr("id",C.ONLY_ONE_END).attr("refX",18).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M3,0 L3,18 M9,0 L9,18"),r=t.append("defs").append("marker").attr("id",C.ZERO_OR_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto"),r.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",21).attr("cy",9).attr("r",6),r.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M9,0 L9,18"),r=t.append("defs").append("marker").attr("id",C.ZERO_OR_ONE_END).attr("refX",30).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto"),r.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",9).attr("cy",9).attr("r",6),r.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M21,0 L21,18"),t.append("defs").append("marker").attr("id",C.ONE_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27"),t.append("defs").append("marker").attr("id",C.ONE_OR_MORE_END).attr("refX",27).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18"),r=t.append("defs").append("marker").attr("id",C.ZERO_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto"),r.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",48).attr("cy",18).attr("r",6),r.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M0,18 Q18,0 36,18 Q18,36 0,18"),r=t.append("defs").append("marker").attr("id",C.ZERO_OR_MORE_END).attr("refX",39).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto"),r.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",9).attr("cy",18).attr("r",6),r.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M21,18 Q39,0 57,18 Q39,36 21,18")},"insertMarkers"),P={ERMarkers:C,insertMarkers:te},ee=/[^\dA-Za-z](\W)*/g,R={},Q=new Map,re=u(function(t){const e=Object.keys(t);for(const r of e)R[r]=t[r]},"setConf"),ae=u((t,e,r)=>{const f=R.entityPadding/3,c=R.entityPadding/3,_=R.fontSize*.85,y=e.node().getBBox(),o=[];let h=!1,g=!1,m=0,k=0,x=0,p=0,O=y.height+f*2,b=1;r.forEach(M=>{M.attributeKeyTypeList!==void 0&&M.attributeKeyTypeList.length>0&&(h=!0),M.attributeComment!==void 0&&(g=!0)}),r.forEach(M=>{const S=`${e.node().id}-attr-${b}`;let N=0;const T=wt(M.attributeType),L=t.append("text").classed("er entityLabel",!0).attr("id",`${S}-type`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",U().fontFamily).style("font-size",_+"px").text(T),w=t.append("text").classed("er entityLabel",!0).attr("id",`${S}-name`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",U().fontFamily).style("font-size",_+"px").text(M.attributeName),i={};i.tn=L,i.nn=w;const n=L.node().getBBox(),l=w.node().getBBox();if(m=Math.max(m,n.width),k=Math.max(k,l.width),N=Math.max(n.height,l.height),h){const d=M.attributeKeyTypeList!==void 0?M.attributeKeyTypeList.join(","):"",E=t.append("text").classed("er entityLabel",!0).attr("id",`${S}-key`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",U().fontFamily).style("font-size",_+"px").text(d);i.kn=E;const a=E.node().getBBox();x=Math.max(x,a.width),N=Math.max(N,a.height)}if(g){const d=t.append("text").classed("er entityLabel",!0).attr("id",`${S}-comment`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",U().fontFamily).style("font-size",_+"px").text(M.attributeComment||"");i.cn=d;const E=d.node().getBBox();p=Math.max(p,E.width),N=Math.max(N,E.height)}i.height=N,o.push(i),O+=N+f*2,b+=1});let Y=4;h&&(Y+=2),g&&(Y+=2);const Z=m+k+x+p,F={width:Math.max(R.minEntityWidth,Math.max(y.width+R.entityPadding*2,Z+c*Y)),height:r.length>0?O:Math.max(R.minEntityHeight,y.height+R.entityPadding*2)};if(r.length>0){const M=Math.max(0,(F.width-Z-c*Y)/(Y/2));e.attr("transform","translate("+F.width/2+","+(f+y.height/2)+")");let S=y.height+f*2,N="attributeBoxOdd";o.forEach(T=>{const L=S+f+T.height/2;T.tn.attr("transform","translate("+c+","+L+")");const w=t.insert("rect","#"+T.tn.node().id).classed(`er ${N}`,!0).attr("x",0).attr("y",S).attr("width",m+c*2+M).attr("height",T.height+f*2),i=parseFloat(w.attr("x"))+parseFloat(w.attr("width"));T.nn.attr("transform","translate("+(i+c)+","+L+")");const n=t.insert("rect","#"+T.nn.node().id).classed(`er ${N}`,!0).attr("x",i).attr("y",S).attr("width",k+c*2+M).attr("height",T.height+f*2);let l=parseFloat(n.attr("x"))+parseFloat(n.attr("width"));if(h){T.kn.attr("transform","translate("+(l+c)+","+L+")");const d=t.insert("rect","#"+T.kn.node().id).classed(`er ${N}`,!0).attr("x",l).attr("y",S).attr("width",x+c*2+M).attr("height",T.height+f*2);l=parseFloat(d.attr("x"))+parseFloat(d.attr("width"))}g&&(T.cn.attr("transform","translate("+(l+c)+","+L+")"),t.insert("rect","#"+T.cn.node().id).classed(`er ${N}`,"true").attr("x",l).attr("y",S).attr("width",p+c*2+M).attr("height",T.height+f*2)),S+=T.height+f*2,N=N==="attributeBoxOdd"?"attributeBoxEven":"attributeBoxOdd"})}else F.height=Math.max(R.minEntityHeight,O),e.attr("transform","translate("+F.width/2+","+F.height/2+")");return F},"drawAttributes"),ie=u(function(t,e,r){const f=[...e.keys()];let c;return f.forEach(function(_){const y=pt(_,"entity");Q.set(_,y);const o=t.append("g").attr("id",y);c=c===void 0?y:c;const h="text-"+y,g=o.append("text").classed("er entityLabel",!0).attr("id",h).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","middle").style("font-family",U().fontFamily).style("font-size",R.fontSize+"px").text(e.get(_).alias??_),{width:m,height:k}=ae(o,g,e.get(_).attributes),p=o.insert("rect","#"+h).classed("er entityBox",!0).attr("x",0).attr("y",0).attr("width",m).attr("height",k).node().getBBox();r.setNode(y,{width:p.width,height:p.height,shape:"rect",id:y})}),c},"drawEntities"),ne=u(function(t,e){e.nodes().forEach(function(r){r!==void 0&&e.node(r)!==void 0&&t.select("#"+r).attr("transform","translate("+(e.node(r).x-e.node(r).width/2)+","+(e.node(r).y-e.node(r).height/2)+" )")})},"adjustEntities"),yt=u(function(t){return(t.entityA+t.roleA+t.entityB).replace(/\s/g,"")},"getEdgeName"),se=u(function(t,e){return t.forEach(function(r){e.setEdge(Q.get(r.entityA),Q.get(r.entityB),{relationship:r},yt(r))}),t},"addRelationships"),ut=0,oe=u(function(t,e,r,f,c){ut++;const _=r.edge(Q.get(e.entityA),Q.get(e.entityB),yt(e)),y=vt().x(function(b){return b.x}).y(function(b){return b.y}).curve(St),o=t.insert("path","#"+f).classed("er relationshipLine",!0).attr("d",y(_.points)).style("stroke",R.stroke).style("fill","none");e.relSpec.relType===c.db.Identification.NON_IDENTIFYING&&o.attr("stroke-dasharray","8,8");let h="";switch(R.arrowMarkerAbsolute&&(h=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,h=h.replace(/\(/g,"\\("),h=h.replace(/\)/g,"\\)")),e.relSpec.cardA){case c.db.Cardinality.ZERO_OR_ONE:o.attr("marker-end","url("+h+"#"+P.ERMarkers.ZERO_OR_ONE_END+")");break;case c.db.Cardinality.ZERO_OR_MORE:o.attr("marker-end","url("+h+"#"+P.ERMarkers.ZERO_OR_MORE_END+")");break;case c.db.Cardinality.ONE_OR_MORE:o.attr("marker-end","url("+h+"#"+P.ERMarkers.ONE_OR_MORE_END+")");break;case c.db.Cardinality.ONLY_ONE:o.attr("marker-end","url("+h+"#"+P.ERMarkers.ONLY_ONE_END+")");break;case c.db.Cardinality.MD_PARENT:o.attr("marker-end","url("+h+"#"+P.ERMarkers.MD_PARENT_END+")");break}switch(e.relSpec.cardB){case c.db.Cardinality.ZERO_OR_ONE:o.attr("marker-start","url("+h+"#"+P.ERMarkers.ZERO_OR_ONE_START+")");break;case c.db.Cardinality.ZERO_OR_MORE:o.attr("marker-start","url("+h+"#"+P.ERMarkers.ZERO_OR_MORE_START+")");break;case c.db.Cardinality.ONE_OR_MORE:o.attr("marker-start","url("+h+"#"+P.ERMarkers.ONE_OR_MORE_START+")");break;case c.db.Cardinality.ONLY_ONE:o.attr("marker-start","url("+h+"#"+P.ERMarkers.ONLY_ONE_START+")");break;case c.db.Cardinality.MD_PARENT:o.attr("marker-start","url("+h+"#"+P.ERMarkers.MD_PARENT_START+")");break}const g=o.node().getTotalLength(),m=o.node().getPointAtLength(g*.5),k="rel"+ut,x=e.roleA.split(/
    /g),p=t.append("text").classed("er relationshipLabel",!0).attr("id",k).attr("x",m.x).attr("y",m.y).style("text-anchor","middle").style("dominant-baseline","middle").style("font-family",U().fontFamily).style("font-size",R.fontSize+"px");if(x.length==1)p.text(e.roleA);else{const b=-(x.length-1)*.5;x.forEach((Y,Z)=>{p.append("tspan").attr("x",m.x).attr("dy",`${Z===0?b:1}em`).text(Y)})}const O=p.node().getBBox();t.insert("rect","#"+k).classed("er relationshipLabelBox",!0).attr("x",m.x-O.width/2).attr("y",m.y-O.height/2).attr("width",O.width).attr("height",O.height)},"drawRelationshipFromLayout"),le=u(function(t,e,r,f){R=U().er,X.info("Drawing ER diagram");const c=U().securityLevel;let _;c==="sandbox"&&(_=at("#i"+e));const o=(c==="sandbox"?at(_.nodes()[0].contentDocument.body):at("body")).select(`[id='${e}']`);P.insertMarkers(o,R);let h;h=new It({multigraph:!0,directed:!0,compound:!1}).setGraph({rankdir:R.layoutDirection,marginx:20,marginy:20,nodesep:100,edgesep:100,ranksep:100}).setDefaultEdgeLabel(function(){return{}});const g=ie(o,f.db.getEntities(),h),m=se(f.db.getRelationships(),h);Dt(h),ne(o,h),m.forEach(function(b){oe(o,b,h,g,f)});const k=R.diagramPadding;At.insertTitle(o,"entityTitleText",R.titleTopMargin,f.db.getDiagramTitle());const x=o.node().getBBox(),p=x.width+k*2,O=x.height+k*2;Mt(o,O,p,R.useMaxWidth),o.attr("viewBox",`${x.x-k} ${x.y-k} ${p} ${O}`)},"draw"),ce="28e9f9db-3c8d-5aa5-9faf-44286ae5937c";function pt(t="",e=""){const r=t.replace(ee,"");return`${st(e)}${st(r)}${zt(t,ce)}`}u(pt,"generateId");function st(t=""){return t.length>0?`${t}-`:""}u(st,"strWithHyphen");var he={setConf:re,draw:le},de=u(t=>` + .entityBox { + fill: ${t.mainBkg}; + stroke: ${t.nodeBorder}; + } + + .attributeBoxOdd { + fill: ${t.attributeBackgroundColorOdd}; + stroke: ${t.nodeBorder}; + } + + .attributeBoxEven { + fill: ${t.attributeBackgroundColorEven}; + stroke: ${t.nodeBorder}; + } + + .relationshipLabelBox { + fill: ${t.tertiaryColor}; + opacity: 0.7; + background-color: ${t.tertiaryColor}; + rect { + opacity: 0.5; + } + } + + .relationshipLine { + stroke: ${t.lineColor}; + } + + .entityTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${t.textColor}; + } + #MD_PARENT_START { + fill: #f5f5f5 !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; + } + #MD_PARENT_END { + fill: #f5f5f5 !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; + } + +`,"getStyles"),ue=de,ke={parser:Gt,db:$t,renderer:he,styles:ue};export{ke as diagram}; diff --git a/assets/chunks/flowDiagram-TSWR6T2D.DT_kmiql.js b/assets/chunks/flowDiagram-TSWR6T2D.DT_kmiql.js new file mode 100644 index 000000000..f8ac5b2c4 --- /dev/null +++ b/assets/chunks/flowDiagram-TSWR6T2D.DT_kmiql.js @@ -0,0 +1,160 @@ +import{g as gt,s as At}from"./chunk-EICJXIV7.Cx-DrDyu.js";import{d as U1,_ as l,o as Ze,p as bt,s as kt,g as mt,b as Et,c as St,q as Dt,r as xt,t as Ct,J as Tt,u as yt,l as e1,v as ge,x as Ft,y as vt,j as C1,z as _t,A as Bt,e as Vt,B as Lt}from"../app.D0Wo8w0i.js";import{c as wt}from"./channel.DuUz04Yy.js";import"./framework.B1keMFNq.js";import"./theme.8WvZWF-M.js";var It="flowchart-",$e=0,M1=U1(),b1=new Map,K=[],K1=new Map,p1=[],Ae=new Map,be=new Map,ee=0,pe=!0,J,se,re=[],ie=l(e=>Vt.sanitizeText(e,M1),"sanitizeText"),ae=l(function(e){for(const r of b1.values())if(r.id===e)return r.domId;return e},"lookUpDomId"),Rt=l(function(e,r,i,a,u,d,g={},D){var v,z;if(!e||e.trim().length===0)return;let c,o=b1.get(e);if(o===void 0&&(o={id:e,labelType:"text",domId:It+e+"-"+$e,styles:[],classes:[]},b1.set(e,o)),$e++,r!==void 0?(M1=U1(),c=ie(r.text.trim()),o.labelType=r.type,c.startsWith('"')&&c.endsWith('"')&&(c=c.substring(1,c.length-1)),o.text=c):o.text===void 0&&(o.text=e),i!==void 0&&(o.type=i),a!=null&&a.forEach(function(_){o.styles.push(_)}),u!=null&&u.forEach(function(_){o.classes.push(_)}),d!==void 0&&(o.dir=d),o.props===void 0?o.props=g:g!==void 0&&Object.assign(o.props,g),D!==void 0){let _;D.includes(` +`)?_=D+` +`:_=`{ +`+D+` +}`;const h=Ct(_,{schema:Tt});if(h.shape){if(h.shape!==h.shape.toLowerCase()||h.shape.includes("_"))throw new Error(`No such shape: ${h.shape}. Shape names should be lowercase.`);if(!yt(h.shape))throw new Error(`No such shape: ${h.shape}.`);o.type=h==null?void 0:h.shape}h!=null&&h.label&&(o.text=h==null?void 0:h.label),h!=null&&h.icon&&(o.icon=h==null?void 0:h.icon,!((v=h.label)!=null&&v.trim())&&o.text===e&&(o.text="")),h!=null&&h.form&&(o.form=h==null?void 0:h.form),h!=null&&h.pos&&(o.pos=h==null?void 0:h.pos),h!=null&&h.img&&(o.img=h==null?void 0:h.img,!((z=h.label)!=null&&z.trim())&&o.text===e&&(o.text="")),h!=null&&h.constraint&&(o.constraint=h.constraint),h.w&&(o.assetWidth=Number(h.w)),h.h&&(o.assetHeight=Number(h.h))}},"addVertex"),Nt=l(function(e,r,i){const d={start:e,end:r,type:void 0,text:"",labelType:"text"};e1.info("abc78 Got edge...",d);const g=i.text;if(g!==void 0&&(d.text=ie(g.text.trim()),d.text.startsWith('"')&&d.text.endsWith('"')&&(d.text=d.text.substring(1,d.text.length-1)),d.labelType=g.type),i!==void 0&&(d.type=i.type,d.stroke=i.stroke,d.length=i.length>10?10:i.length),K.length<(M1.maxEdges??500))e1.info("Pushing edge..."),K.push(d);else throw new Error(`Edge limit exceeded. ${K.length} edges found, but the limit is ${M1.maxEdges}. + +Initialize mermaid with maxEdges set to a higher number to allow more edges. +You cannot set this config via configuration inside the diagram as it is a secure config. +You have to call mermaid.initialize.`)},"addSingleLink"),Pt=l(function(e,r,i){e1.info("addLink",e,r,i);for(const a of e)for(const u of r)Nt(a,u,i)},"addLink"),Ot=l(function(e,r){e.forEach(function(i){i==="default"?K.defaultInterpolate=r:K[i].interpolate=r})},"updateLinkInterpolate"),Gt=l(function(e,r){e.forEach(function(i){var a,u,d,g,D,c;if(typeof i=="number"&&i>=K.length)throw new Error(`The index ${i} for linkStyle is out of bounds. Valid indices for linkStyle are between 0 and ${K.length-1}. (Help: Ensure that the index is within the range of existing edges.)`);i==="default"?K.defaultStyle=r:(K[i].style=r,(((u=(a=K[i])==null?void 0:a.style)==null?void 0:u.length)??0)>0&&!((g=(d=K[i])==null?void 0:d.style)!=null&&g.some(o=>o==null?void 0:o.startsWith("fill")))&&((c=(D=K[i])==null?void 0:D.style)==null||c.push("fill:none")))})},"updateLink"),Mt=l(function(e,r){e.split(",").forEach(function(i){let a=K1.get(i);a===void 0&&(a={id:i,styles:[],textStyles:[]},K1.set(i,a)),r!=null&&r.forEach(function(u){if(/color/.exec(u)){const d=u.replace("fill","bgFill");a.textStyles.push(d)}a.styles.push(u)})})},"addClass"),Ut=l(function(e){J=e,/.*/.exec(J)&&(J="LR"),/.*v/.exec(J)&&(J="TB"),J==="TD"&&(J="TB")},"setDirection"),ke=l(function(e,r){for(const i of e.split(",")){const a=b1.get(i);a&&a.classes.push(r);const u=Ae.get(i);u&&u.classes.push(r)}},"setClass"),Wt=l(function(e,r){if(r!==void 0){r=ie(r);for(const i of e.split(","))be.set(se==="gen-1"?ae(i):i,r)}},"setTooltip"),zt=l(function(e,r,i){const a=ae(e);if(U1().securityLevel!=="loose"||r===void 0)return;let u=[];if(typeof i=="string"){u=i.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let g=0;g")),u.classed("hover",!0)}).on("mouseout",function(){r.transition().duration(500).style("opacity",0),C1(this).classed("hover",!1)})},"setupToolTips");re.push(it);var Ht=l(function(e="gen-1"){b1=new Map,K1=new Map,K=[],re=[it],p1=[],Ae=new Map,ee=0,be=new Map,pe=!0,se=e,M1=U1(),Ft()},"clear"),Xt=l(e=>{se=e||"gen-2"},"setGen"),Qt=l(function(){return"fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"},"defaultStyle"),Jt=l(function(e,r,i){let a=e.text.trim(),u=i.text;e===i&&/\s/.exec(i.text)&&(a=void 0);function d(o){const v={boolean:{},number:{},string:{}},z=[];let _;return{nodeList:o.filter(function(b){const x=typeof b;return b.stmt&&b.stmt==="dir"?(_=b.value,!1):b.trim()===""?!1:x in v?v[x].hasOwnProperty(b)?!1:v[x][b]=!0:z.includes(b)?!1:z.push(b)}),dir:_}}l(d,"uniq");const{nodeList:g,dir:D}=d(r.flat());if(se==="gen-1")for(let o=0;o2e3)return{result:!1,count:0};if(at[j1]=r,p1[r].id===e)return{result:!0,count:0};let a=0,u=1;for(;a=0){const g=nt(e,d);if(g.result)return{result:!0,count:u+g.count};u=u+g.count}a=a+1}return{result:!1,count:u}},"indexNodes2"),$t=l(function(e){return at[e]},"getDepthFirstPos"),es=l(function(){j1=-1,p1.length>0&&nt("none",p1.length-1)},"indexNodes"),ut=l(function(){return p1},"getSubGraphs"),ts=l(()=>pe?(pe=!1,!0):!1,"firstGraph"),ss=l(e=>{let r=e.trim(),i="arrow_open";switch(r[0]){case"<":i="arrow_point",r=r.slice(1);break;case"x":i="arrow_cross",r=r.slice(1);break;case"o":i="arrow_circle",r=r.slice(1);break}let a="normal";return r.includes("=")&&(a="thick"),r.includes(".")&&(a="dotted"),{type:i,stroke:a}},"destructStartLink"),rs=l((e,r)=>{const i=r.length;let a=0;for(let u=0;u{const r=e.trim();let i=r.slice(0,-1),a="arrow_open";switch(r.slice(-1)){case"x":a="arrow_cross",r.startsWith("x")&&(a="double_"+a,i=i.slice(1));break;case">":a="arrow_point",r.startsWith("<")&&(a="double_"+a,i=i.slice(1));break;case"o":a="arrow_circle",r.startsWith("o")&&(a="double_"+a,i=i.slice(1));break}let u="normal",d=i.length-1;i.startsWith("=")&&(u="thick"),i.startsWith("~")&&(u="invisible");const g=rs(".",i);return g&&(u="dotted",d=g),{type:a,stroke:u,length:d}},"destructEndLink"),as=l((e,r)=>{const i=is(e);let a;if(r){if(a=ss(r),a.stroke!==i.stroke)return{type:"INVALID",stroke:"INVALID"};if(a.type==="arrow_open")a.type=i.type;else{if(a.type!==i.type)return{type:"INVALID",stroke:"INVALID"};a.type="double_"+a.type}return a.type==="double_arrow"&&(a.type="double_arrow_point"),a.length=i.length,a}return i},"destructLink"),lt=l((e,r)=>{for(const i of e)if(i.nodes.includes(r))return!0;return!1},"exists"),ot=l((e,r)=>{const i=[];return e.nodes.forEach((a,u)=>{lt(r,a)||i.push(e.nodes[u])}),{nodes:i}},"makeUniq"),ns={firstGraph:ts},us=l(e=>{if(e.img)return"imageSquare";if(e.icon)return e.form==="circle"?"iconCircle":e.form==="square"?"iconSquare":e.form==="rounded"?"iconRounded":"icon";switch(e.type){case"square":case void 0:return"squareRect";case"round":return"roundedRect";case"ellipse":return"ellipse";default:return e.type}},"getTypeFromVertex"),ls=l((e,r)=>e.find(i=>i.id===r),"findNode"),os=l(e=>{let r="none",i="arrow_point";switch(e){case"arrow_point":case"arrow_circle":case"arrow_cross":i=e;break;case"double_arrow_point":case"double_arrow_circle":case"double_arrow_cross":r=e.replace("double_",""),i=r;break}return{arrowTypeStart:r,arrowTypeEnd:i}},"destructEdgeType"),cs=l((e,r,i,a,u,d)=>{var o;const g=i.get(e.id),D=a.get(e.id)??!1,c=ls(r,e.id);if(c)c.cssStyles=e.styles,c.cssCompiledStyles=te(e.classes),c.cssClasses=e.classes.join(" ");else{const v={id:e.id,label:e.text,labelStyle:"",parentId:g,padding:((o=u.flowchart)==null?void 0:o.padding)||8,cssStyles:e.styles,cssCompiledStyles:te(["default","node",...e.classes]),cssClasses:"default "+e.classes.join(" "),dir:e.dir,domId:e.domId,look:d,link:e.link,linkTarget:e.linkTarget,tooltip:et(e.id),icon:e.icon,pos:e.pos,img:e.img,assetWidth:e.assetWidth,assetHeight:e.assetHeight,constraint:e.constraint};D?r.push({...v,isGroup:!0,shape:"rect"}):r.push({...v,isGroup:!1,shape:us(e)})}},"addNodeFromVertex");function te(e){let r=[];for(const i of e){const a=K1.get(i);a!=null&&a.styles&&(r=[...r,...a.styles??[]].map(u=>u.trim())),a!=null&&a.textStyles&&(r=[...r,...a.textStyles??[]].map(u=>u.trim()))}return r}l(te,"getCompiledStyles");var hs=l(()=>{const e=U1(),r=[],i=[],a=ut(),u=new Map,d=new Map;for(let c=a.length-1;c>=0;c--){const o=a[c];o.nodes.length>0&&d.set(o.id,!0);for(const v of o.nodes)u.set(v,o.id)}for(let c=a.length-1;c>=0;c--){const o=a[c];r.push({id:o.id,label:o.title,labelStyle:"",parentId:u.get(o.id),padding:8,cssCompiledStyles:te(o.classes),cssClasses:o.classes.join(" "),shape:"rect",dir:o.dir,isGroup:!0,look:e.look})}st().forEach(c=>{cs(c,r,u,d,e,e.look||"classic")});const D=rt();return D.forEach((c,o)=>{const{arrowTypeStart:v,arrowTypeEnd:z}=os(c.type),_=[...D.defaultStyle??[]];c.style&&_.push(...c.style);const h={id:vt(c.start,c.end,{counter:o,prefix:"L"}),start:c.start,end:c.end,type:c.type??"normal",label:c.text,labelpos:"c",thickness:c.stroke,minlen:c.length,classes:(c==null?void 0:c.stroke)==="invisible"?"":"edge-thickness-normal edge-pattern-solid flowchart-link",arrowTypeStart:(c==null?void 0:c.stroke)==="invisible"?"none":v,arrowTypeEnd:(c==null?void 0:c.stroke)==="invisible"?"none":z,arrowheadStyle:"fill: #333",labelStyle:_,style:_,pattern:c.stroke,look:e.look};i.push(h)}),{nodes:r,edges:i,other:{},config:e}},"getData"),de={defaultConfig:l(()=>bt.flowchart,"defaultConfig"),setAccTitle:kt,getAccTitle:mt,getAccDescription:Et,getData:hs,setAccDescription:St,addVertex:Rt,lookUpDomId:ae,addLink:Pt,updateLinkInterpolate:Ot,updateLink:Gt,addClass:Mt,setDirection:Ut,setClass:ke,setTooltip:Wt,getTooltip:et,setClickEvent:Kt,setLink:jt,bindFunctions:Yt,getDirection:tt,getVertices:st,getEdges:rt,getClasses:qt,clear:Ht,setGen:Xt,defaultStyle:Qt,addSubGraph:Jt,getDepthFirstPos:$t,indexNodes:es,getSubGraphs:ut,destructLink:as,lex:ns,exists:lt,makeUniq:ot,setDiagramTitle:Dt,getDiagramTitle:xt},ds=l(function(e,r){return r.db.getClasses()},"getClasses"),ps=l(async function(e,r,i,a){var h;e1.info("REF0:"),e1.info("Drawing state diagram (v2)",r);const{securityLevel:u,flowchart:d,layout:g}=U1();let D;u==="sandbox"&&(D=C1("#i"+r));const c=u==="sandbox"?D.nodes()[0].contentDocument:document;e1.debug("Before getData: ");const o=a.db.getData();e1.debug("Data: ",o);const v=gt(r,u),z=tt();o.type=a.type,o.layoutAlgorithm=_t(g),o.layoutAlgorithm==="dagre"&&g==="elk"&&e1.warn("flowchart-elk was moved to an external package in Mermaid v11. Please refer [release notes](https://github.com/mermaid-js/mermaid/releases/tag/v11.0.0) for more details. This diagram will be rendered using `dagre` layout as a fallback."),o.direction=z,o.nodeSpacing=(d==null?void 0:d.nodeSpacing)||50,o.rankSpacing=(d==null?void 0:d.rankSpacing)||50,o.markers=["point","circle","cross"],o.diagramId=r,e1.debug("REF1:",o),await Bt(o,v);const _=((h=o.config.flowchart)==null?void 0:h.diagramPadding)??8;ge.insertTitle(v,"flowchartTitleText",(d==null?void 0:d.titleTopMargin)||0,a.db.getDiagramTitle()),At(v,_,"flowchart",(d==null?void 0:d.useMaxWidth)||!1);for(const b of o.nodes){const x=C1(`#${r} [id="${b.id}"]`);if(!x||!b.link)continue;const Z=c.createElementNS("http://www.w3.org/2000/svg","a");Z.setAttributeNS("http://www.w3.org/2000/svg","class",b.cssClasses),Z.setAttributeNS("http://www.w3.org/2000/svg","rel","noopener"),u==="sandbox"?Z.setAttributeNS("http://www.w3.org/2000/svg","target","_top"):b.linkTarget&&Z.setAttributeNS("http://www.w3.org/2000/svg","target",b.linkTarget);const k1=x.insert(function(){return Z},":first-child"),m1=x.select(".label-container");m1&&k1.append(function(){return m1.node()});const E1=x.select(".label");E1&&k1.append(function(){return E1.node()})}},"draw"),fs={getClasses:ds,draw:ps},fe=function(){var e=l(function(A1,p,f,A){for(f=f||{},A=A1.length;A--;f[A1[A]]=p);return f},"o"),r=[1,4],i=[1,3],a=[1,5],u=[1,8,9,10,11,27,34,36,38,44,60,83,84,85,86,87,88,101,104,105,108,110,113,114,115,120,121,122,123],d=[2,2],g=[1,13],D=[1,14],c=[1,15],o=[1,16],v=[1,23],z=[1,25],_=[1,26],h=[1,27],b=[1,49],x=[1,48],Z=[1,29],k1=[1,30],m1=[1,31],E1=[1,32],Y1=[1,33],B=[1,44],V=[1,46],L=[1,42],w=[1,47],I=[1,43],R=[1,50],N=[1,45],P=[1,51],O=[1,52],q1=[1,34],H1=[1,35],X1=[1,36],Q1=[1,37],f1=[1,57],C=[1,8,9,10,11,27,32,34,36,38,44,60,83,84,85,86,87,88,101,104,105,108,110,113,114,115,120,121,122,123],t1=[1,61],s1=[1,60],r1=[1,62],T1=[8,9,11,75,77],me=[1,77],y1=[1,90],F1=[1,95],v1=[1,94],_1=[1,91],B1=[1,87],V1=[1,93],L1=[1,89],w1=[1,96],I1=[1,92],R1=[1,97],N1=[1,88],S1=[8,9,10,11,40,75,77],M=[8,9,10,11,40,46,75,77],Y=[8,9,10,11,29,40,44,46,48,50,52,54,56,58,60,63,65,67,68,70,75,77,88,101,104,105,108,110,113,114,115],Ee=[8,9,11,44,60,75,77,88,101,104,105,108,110,113,114,115],W1=[44,60,88,101,104,105,108,110,113,114,115],Se=[1,123],De=[1,122],xe=[1,130],Ce=[1,144],Te=[1,145],ye=[1,146],Fe=[1,147],ve=[1,132],_e=[1,134],Be=[1,138],Ve=[1,139],Le=[1,140],we=[1,141],Ie=[1,142],Re=[1,143],Ne=[1,148],Pe=[1,149],Oe=[1,128],Ge=[1,129],Me=[1,136],Ue=[1,131],We=[1,135],ze=[1,133],ne=[8,9,10,11,27,32,34,36,38,44,60,83,84,85,86,87,88,101,104,105,108,110,113,114,115,120,121,122,123],je=[1,151],Ke=[1,153],F=[8,9,11],q=[8,9,10,11,14,44,60,88,104,105,108,110,113,114,115],k=[1,173],U=[1,169],W=[1,170],m=[1,174],E=[1,171],S=[1,172],P1=[77,115,118],T=[8,9,10,11,12,14,27,29,32,44,60,75,83,84,85,86,87,88,89,104,108,110,113,114,115],Ye=[10,105],g1=[31,49,51,53,55,57,62,64,66,67,69,71,115,116,117],i1=[1,242],a1=[1,240],n1=[1,244],u1=[1,238],l1=[1,239],o1=[1,241],c1=[1,243],h1=[1,245],O1=[1,263],qe=[8,9,11,105],$=[8,9,10,11,60,83,104,105,108,109,110,111],ue={trace:l(function(){},"trace"),yy:{},symbols_:{error:2,start:3,graphConfig:4,document:5,line:6,statement:7,SEMI:8,NEWLINE:9,SPACE:10,EOF:11,GRAPH:12,NODIR:13,DIR:14,FirstStmtSeparator:15,ending:16,endToken:17,spaceList:18,spaceListNewline:19,vertexStatement:20,separator:21,styleStatement:22,linkStyleStatement:23,classDefStatement:24,classStatement:25,clickStatement:26,subgraph:27,textNoTags:28,SQS:29,text:30,SQE:31,end:32,direction:33,acc_title:34,acc_title_value:35,acc_descr:36,acc_descr_value:37,acc_descr_multiline_value:38,shapeData:39,SHAPE_DATA:40,link:41,node:42,styledVertex:43,AMP:44,vertex:45,STYLE_SEPARATOR:46,idString:47,DOUBLECIRCLESTART:48,DOUBLECIRCLEEND:49,PS:50,PE:51,"(-":52,"-)":53,STADIUMSTART:54,STADIUMEND:55,SUBROUTINESTART:56,SUBROUTINEEND:57,VERTEX_WITH_PROPS_START:58,"NODE_STRING[field]":59,COLON:60,"NODE_STRING[value]":61,PIPE:62,CYLINDERSTART:63,CYLINDEREND:64,DIAMOND_START:65,DIAMOND_STOP:66,TAGEND:67,TRAPSTART:68,TRAPEND:69,INVTRAPSTART:70,INVTRAPEND:71,linkStatement:72,arrowText:73,TESTSTR:74,START_LINK:75,edgeText:76,LINK:77,edgeTextToken:78,STR:79,MD_STR:80,textToken:81,keywords:82,STYLE:83,LINKSTYLE:84,CLASSDEF:85,CLASS:86,CLICK:87,DOWN:88,UP:89,textNoTagsToken:90,stylesOpt:91,"idString[vertex]":92,"idString[class]":93,CALLBACKNAME:94,CALLBACKARGS:95,HREF:96,LINK_TARGET:97,"STR[link]":98,"STR[tooltip]":99,alphaNum:100,DEFAULT:101,numList:102,INTERPOLATE:103,NUM:104,COMMA:105,style:106,styleComponent:107,NODE_STRING:108,UNIT:109,BRKT:110,PCT:111,idStringToken:112,MINUS:113,MULT:114,UNICODE_TEXT:115,TEXT:116,TAGSTART:117,EDGE_TEXT:118,alphaNumToken:119,direction_tb:120,direction_bt:121,direction_rl:122,direction_lr:123,$accept:0,$end:1},terminals_:{2:"error",8:"SEMI",9:"NEWLINE",10:"SPACE",11:"EOF",12:"GRAPH",13:"NODIR",14:"DIR",27:"subgraph",29:"SQS",31:"SQE",32:"end",34:"acc_title",35:"acc_title_value",36:"acc_descr",37:"acc_descr_value",38:"acc_descr_multiline_value",40:"SHAPE_DATA",44:"AMP",46:"STYLE_SEPARATOR",48:"DOUBLECIRCLESTART",49:"DOUBLECIRCLEEND",50:"PS",51:"PE",52:"(-",53:"-)",54:"STADIUMSTART",55:"STADIUMEND",56:"SUBROUTINESTART",57:"SUBROUTINEEND",58:"VERTEX_WITH_PROPS_START",59:"NODE_STRING[field]",60:"COLON",61:"NODE_STRING[value]",62:"PIPE",63:"CYLINDERSTART",64:"CYLINDEREND",65:"DIAMOND_START",66:"DIAMOND_STOP",67:"TAGEND",68:"TRAPSTART",69:"TRAPEND",70:"INVTRAPSTART",71:"INVTRAPEND",74:"TESTSTR",75:"START_LINK",77:"LINK",79:"STR",80:"MD_STR",83:"STYLE",84:"LINKSTYLE",85:"CLASSDEF",86:"CLASS",87:"CLICK",88:"DOWN",89:"UP",92:"idString[vertex]",93:"idString[class]",94:"CALLBACKNAME",95:"CALLBACKARGS",96:"HREF",97:"LINK_TARGET",98:"STR[link]",99:"STR[tooltip]",101:"DEFAULT",103:"INTERPOLATE",104:"NUM",105:"COMMA",108:"NODE_STRING",109:"UNIT",110:"BRKT",111:"PCT",113:"MINUS",114:"MULT",115:"UNICODE_TEXT",116:"TEXT",117:"TAGSTART",118:"EDGE_TEXT",120:"direction_tb",121:"direction_bt",122:"direction_rl",123:"direction_lr"},productions_:[0,[3,2],[5,0],[5,2],[6,1],[6,1],[6,1],[6,1],[6,1],[4,2],[4,2],[4,2],[4,3],[16,2],[16,1],[17,1],[17,1],[17,1],[15,1],[15,1],[15,2],[19,2],[19,2],[19,1],[19,1],[18,2],[18,1],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,9],[7,6],[7,4],[7,1],[7,2],[7,2],[7,1],[21,1],[21,1],[21,1],[39,2],[39,1],[20,4],[20,3],[20,4],[20,2],[20,2],[20,1],[42,1],[42,6],[42,5],[43,1],[43,3],[45,4],[45,4],[45,6],[45,4],[45,4],[45,4],[45,8],[45,4],[45,4],[45,4],[45,6],[45,4],[45,4],[45,4],[45,4],[45,4],[45,1],[41,2],[41,3],[41,3],[41,1],[41,3],[76,1],[76,2],[76,1],[76,1],[72,1],[73,3],[30,1],[30,2],[30,1],[30,1],[82,1],[82,1],[82,1],[82,1],[82,1],[82,1],[82,1],[82,1],[82,1],[82,1],[82,1],[28,1],[28,2],[28,1],[28,1],[24,5],[25,5],[26,2],[26,4],[26,3],[26,5],[26,3],[26,5],[26,5],[26,7],[26,2],[26,4],[26,2],[26,4],[26,4],[26,6],[22,5],[23,5],[23,5],[23,9],[23,9],[23,7],[23,7],[102,1],[102,3],[91,1],[91,3],[106,1],[106,2],[107,1],[107,1],[107,1],[107,1],[107,1],[107,1],[107,1],[107,1],[112,1],[112,1],[112,1],[112,1],[112,1],[112,1],[112,1],[112,1],[112,1],[112,1],[112,1],[81,1],[81,1],[81,1],[81,1],[90,1],[90,1],[90,1],[90,1],[90,1],[90,1],[90,1],[90,1],[90,1],[90,1],[90,1],[78,1],[78,1],[119,1],[119,1],[119,1],[119,1],[119,1],[119,1],[119,1],[119,1],[119,1],[119,1],[119,1],[47,1],[47,2],[100,1],[100,2],[33,1],[33,1],[33,1],[33,1]],performAction:l(function(p,f,A,n,y,t,z1){var s=t.length-1;switch(y){case 2:this.$=[];break;case 3:(!Array.isArray(t[s])||t[s].length>0)&&t[s-1].push(t[s]),this.$=t[s-1];break;case 4:case 181:this.$=t[s];break;case 11:n.setDirection("TB"),this.$="TB";break;case 12:n.setDirection(t[s-1]),this.$=t[s-1];break;case 27:this.$=t[s-1].nodes;break;case 28:case 29:case 30:case 31:case 32:this.$=[];break;case 33:this.$=n.addSubGraph(t[s-6],t[s-1],t[s-4]);break;case 34:this.$=n.addSubGraph(t[s-3],t[s-1],t[s-3]);break;case 35:this.$=n.addSubGraph(void 0,t[s-1],void 0);break;case 37:this.$=t[s].trim(),n.setAccTitle(this.$);break;case 38:case 39:this.$=t[s].trim(),n.setAccDescription(this.$);break;case 43:this.$=t[s-1]+t[s];break;case 44:this.$=t[s];break;case 45:n.addVertex(t[s-1][0],void 0,void 0,void 0,void 0,void 0,void 0,t[s]),n.addLink(t[s-3].stmt,t[s-1],t[s-2]),this.$={stmt:t[s-1],nodes:t[s-1].concat(t[s-3].nodes)};break;case 46:n.addLink(t[s-2].stmt,t[s],t[s-1]),this.$={stmt:t[s],nodes:t[s].concat(t[s-2].nodes)};break;case 47:n.addLink(t[s-3].stmt,t[s-1],t[s-2]),this.$={stmt:t[s-1],nodes:t[s-1].concat(t[s-3].nodes)};break;case 48:this.$={stmt:t[s-1],nodes:t[s-1]};break;case 49:n.addVertex(t[s-1][0],void 0,void 0,void 0,void 0,void 0,void 0,t[s]),this.$={stmt:t[s-1],nodes:t[s-1],shapeData:t[s]};break;case 50:this.$={stmt:t[s],nodes:t[s]};break;case 51:this.$=[t[s]];break;case 52:n.addVertex(t[s-5][0],void 0,void 0,void 0,void 0,void 0,void 0,t[s-4]),this.$=t[s-5].concat(t[s]);break;case 53:this.$=t[s-4].concat(t[s]);break;case 54:this.$=t[s];break;case 55:this.$=t[s-2],n.setClass(t[s-2],t[s]);break;case 56:this.$=t[s-3],n.addVertex(t[s-3],t[s-1],"square");break;case 57:this.$=t[s-3],n.addVertex(t[s-3],t[s-1],"doublecircle");break;case 58:this.$=t[s-5],n.addVertex(t[s-5],t[s-2],"circle");break;case 59:this.$=t[s-3],n.addVertex(t[s-3],t[s-1],"ellipse");break;case 60:this.$=t[s-3],n.addVertex(t[s-3],t[s-1],"stadium");break;case 61:this.$=t[s-3],n.addVertex(t[s-3],t[s-1],"subroutine");break;case 62:this.$=t[s-7],n.addVertex(t[s-7],t[s-1],"rect",void 0,void 0,void 0,Object.fromEntries([[t[s-5],t[s-3]]]));break;case 63:this.$=t[s-3],n.addVertex(t[s-3],t[s-1],"cylinder");break;case 64:this.$=t[s-3],n.addVertex(t[s-3],t[s-1],"round");break;case 65:this.$=t[s-3],n.addVertex(t[s-3],t[s-1],"diamond");break;case 66:this.$=t[s-5],n.addVertex(t[s-5],t[s-2],"hexagon");break;case 67:this.$=t[s-3],n.addVertex(t[s-3],t[s-1],"odd");break;case 68:this.$=t[s-3],n.addVertex(t[s-3],t[s-1],"trapezoid");break;case 69:this.$=t[s-3],n.addVertex(t[s-3],t[s-1],"inv_trapezoid");break;case 70:this.$=t[s-3],n.addVertex(t[s-3],t[s-1],"lean_right");break;case 71:this.$=t[s-3],n.addVertex(t[s-3],t[s-1],"lean_left");break;case 72:this.$=t[s],n.addVertex(t[s]);break;case 73:t[s-1].text=t[s],this.$=t[s-1];break;case 74:case 75:t[s-2].text=t[s-1],this.$=t[s-2];break;case 76:this.$=t[s];break;case 77:var X=n.destructLink(t[s],t[s-2]);this.$={type:X.type,stroke:X.stroke,length:X.length,text:t[s-1]};break;case 78:this.$={text:t[s],type:"text"};break;case 79:this.$={text:t[s-1].text+""+t[s],type:t[s-1].type};break;case 80:this.$={text:t[s],type:"string"};break;case 81:this.$={text:t[s],type:"markdown"};break;case 82:var X=n.destructLink(t[s]);this.$={type:X.type,stroke:X.stroke,length:X.length};break;case 83:this.$=t[s-1];break;case 84:this.$={text:t[s],type:"text"};break;case 85:this.$={text:t[s-1].text+""+t[s],type:t[s-1].type};break;case 86:this.$={text:t[s],type:"string"};break;case 87:case 102:this.$={text:t[s],type:"markdown"};break;case 99:this.$={text:t[s],type:"text"};break;case 100:this.$={text:t[s-1].text+""+t[s],type:t[s-1].type};break;case 101:this.$={text:t[s],type:"text"};break;case 103:this.$=t[s-4],n.addClass(t[s-2],t[s]);break;case 104:this.$=t[s-4],n.setClass(t[s-2],t[s]);break;case 105:case 113:this.$=t[s-1],n.setClickEvent(t[s-1],t[s]);break;case 106:case 114:this.$=t[s-3],n.setClickEvent(t[s-3],t[s-2]),n.setTooltip(t[s-3],t[s]);break;case 107:this.$=t[s-2],n.setClickEvent(t[s-2],t[s-1],t[s]);break;case 108:this.$=t[s-4],n.setClickEvent(t[s-4],t[s-3],t[s-2]),n.setTooltip(t[s-4],t[s]);break;case 109:this.$=t[s-2],n.setLink(t[s-2],t[s]);break;case 110:this.$=t[s-4],n.setLink(t[s-4],t[s-2]),n.setTooltip(t[s-4],t[s]);break;case 111:this.$=t[s-4],n.setLink(t[s-4],t[s-2],t[s]);break;case 112:this.$=t[s-6],n.setLink(t[s-6],t[s-4],t[s]),n.setTooltip(t[s-6],t[s-2]);break;case 115:this.$=t[s-1],n.setLink(t[s-1],t[s]);break;case 116:this.$=t[s-3],n.setLink(t[s-3],t[s-2]),n.setTooltip(t[s-3],t[s]);break;case 117:this.$=t[s-3],n.setLink(t[s-3],t[s-2],t[s]);break;case 118:this.$=t[s-5],n.setLink(t[s-5],t[s-4],t[s]),n.setTooltip(t[s-5],t[s-2]);break;case 119:this.$=t[s-4],n.addVertex(t[s-2],void 0,void 0,t[s]);break;case 120:this.$=t[s-4],n.updateLink([t[s-2]],t[s]);break;case 121:this.$=t[s-4],n.updateLink(t[s-2],t[s]);break;case 122:this.$=t[s-8],n.updateLinkInterpolate([t[s-6]],t[s-2]),n.updateLink([t[s-6]],t[s]);break;case 123:this.$=t[s-8],n.updateLinkInterpolate(t[s-6],t[s-2]),n.updateLink(t[s-6],t[s]);break;case 124:this.$=t[s-6],n.updateLinkInterpolate([t[s-4]],t[s]);break;case 125:this.$=t[s-6],n.updateLinkInterpolate(t[s-4],t[s]);break;case 126:case 128:this.$=[t[s]];break;case 127:case 129:t[s-2].push(t[s]),this.$=t[s-2];break;case 131:this.$=t[s-1]+t[s];break;case 179:this.$=t[s];break;case 180:this.$=t[s-1]+""+t[s];break;case 182:this.$=t[s-1]+""+t[s];break;case 183:this.$={stmt:"dir",value:"TB"};break;case 184:this.$={stmt:"dir",value:"BT"};break;case 185:this.$={stmt:"dir",value:"RL"};break;case 186:this.$={stmt:"dir",value:"LR"};break}},"anonymous"),table:[{3:1,4:2,9:r,10:i,12:a},{1:[3]},e(u,d,{5:6}),{4:7,9:r,10:i,12:a},{4:8,9:r,10:i,12:a},{13:[1,9],14:[1,10]},{1:[2,1],6:11,7:12,8:g,9:D,10:c,11:o,20:17,22:18,23:19,24:20,25:21,26:22,27:v,33:24,34:z,36:_,38:h,42:28,43:38,44:b,45:39,47:40,60:x,83:Z,84:k1,85:m1,86:E1,87:Y1,88:B,101:V,104:L,105:w,108:I,110:R,112:41,113:N,114:P,115:O,120:q1,121:H1,122:X1,123:Q1},e(u,[2,9]),e(u,[2,10]),e(u,[2,11]),{8:[1,54],9:[1,55],10:f1,15:53,18:56},e(C,[2,3]),e(C,[2,4]),e(C,[2,5]),e(C,[2,6]),e(C,[2,7]),e(C,[2,8]),{8:t1,9:s1,11:r1,21:58,41:59,72:63,75:[1,64],77:[1,65]},{8:t1,9:s1,11:r1,21:66},{8:t1,9:s1,11:r1,21:67},{8:t1,9:s1,11:r1,21:68},{8:t1,9:s1,11:r1,21:69},{8:t1,9:s1,11:r1,21:70},{8:t1,9:s1,10:[1,71],11:r1,21:72},e(C,[2,36]),{35:[1,73]},{37:[1,74]},e(C,[2,39]),e(T1,[2,50],{18:75,39:76,10:f1,40:me}),{10:[1,78]},{10:[1,79]},{10:[1,80]},{10:[1,81]},{14:y1,44:F1,60:v1,79:[1,85],88:_1,94:[1,82],96:[1,83],100:84,104:B1,105:V1,108:L1,110:w1,113:I1,114:R1,115:N1,119:86},e(C,[2,183]),e(C,[2,184]),e(C,[2,185]),e(C,[2,186]),e(S1,[2,51]),e(S1,[2,54],{46:[1,98]}),e(M,[2,72],{112:111,29:[1,99],44:b,48:[1,100],50:[1,101],52:[1,102],54:[1,103],56:[1,104],58:[1,105],60:x,63:[1,106],65:[1,107],67:[1,108],68:[1,109],70:[1,110],88:B,101:V,104:L,105:w,108:I,110:R,113:N,114:P,115:O}),e(Y,[2,179]),e(Y,[2,140]),e(Y,[2,141]),e(Y,[2,142]),e(Y,[2,143]),e(Y,[2,144]),e(Y,[2,145]),e(Y,[2,146]),e(Y,[2,147]),e(Y,[2,148]),e(Y,[2,149]),e(Y,[2,150]),e(u,[2,12]),e(u,[2,18]),e(u,[2,19]),{9:[1,112]},e(Ee,[2,26],{18:113,10:f1}),e(C,[2,27]),{42:114,43:38,44:b,45:39,47:40,60:x,88:B,101:V,104:L,105:w,108:I,110:R,112:41,113:N,114:P,115:O},e(C,[2,40]),e(C,[2,41]),e(C,[2,42]),e(W1,[2,76],{73:115,62:[1,117],74:[1,116]}),{76:118,78:119,79:[1,120],80:[1,121],115:Se,118:De},e([44,60,62,74,88,101,104,105,108,110,113,114,115],[2,82]),e(C,[2,28]),e(C,[2,29]),e(C,[2,30]),e(C,[2,31]),e(C,[2,32]),{10:xe,12:Ce,14:Te,27:ye,28:124,32:Fe,44:ve,60:_e,75:Be,79:[1,126],80:[1,127],82:137,83:Ve,84:Le,85:we,86:Ie,87:Re,88:Ne,89:Pe,90:125,104:Oe,108:Ge,110:Me,113:Ue,114:We,115:ze},e(ne,d,{5:150}),e(C,[2,37]),e(C,[2,38]),e(T1,[2,48],{44:je}),e(T1,[2,49],{18:152,10:f1,40:Ke}),e(S1,[2,44]),{44:b,47:154,60:x,88:B,101:V,104:L,105:w,108:I,110:R,112:41,113:N,114:P,115:O},{101:[1,155],102:156,104:[1,157]},{44:b,47:158,60:x,88:B,101:V,104:L,105:w,108:I,110:R,112:41,113:N,114:P,115:O},{44:b,47:159,60:x,88:B,101:V,104:L,105:w,108:I,110:R,112:41,113:N,114:P,115:O},e(F,[2,105],{10:[1,160],95:[1,161]}),{79:[1,162]},e(F,[2,113],{119:164,10:[1,163],14:y1,44:F1,60:v1,88:_1,104:B1,105:V1,108:L1,110:w1,113:I1,114:R1,115:N1}),e(F,[2,115],{10:[1,165]}),e(q,[2,181]),e(q,[2,168]),e(q,[2,169]),e(q,[2,170]),e(q,[2,171]),e(q,[2,172]),e(q,[2,173]),e(q,[2,174]),e(q,[2,175]),e(q,[2,176]),e(q,[2,177]),e(q,[2,178]),{44:b,47:166,60:x,88:B,101:V,104:L,105:w,108:I,110:R,112:41,113:N,114:P,115:O},{30:167,67:k,79:U,80:W,81:168,115:m,116:E,117:S},{30:175,67:k,79:U,80:W,81:168,115:m,116:E,117:S},{30:177,50:[1,176],67:k,79:U,80:W,81:168,115:m,116:E,117:S},{30:178,67:k,79:U,80:W,81:168,115:m,116:E,117:S},{30:179,67:k,79:U,80:W,81:168,115:m,116:E,117:S},{30:180,67:k,79:U,80:W,81:168,115:m,116:E,117:S},{108:[1,181]},{30:182,67:k,79:U,80:W,81:168,115:m,116:E,117:S},{30:183,65:[1,184],67:k,79:U,80:W,81:168,115:m,116:E,117:S},{30:185,67:k,79:U,80:W,81:168,115:m,116:E,117:S},{30:186,67:k,79:U,80:W,81:168,115:m,116:E,117:S},{30:187,67:k,79:U,80:W,81:168,115:m,116:E,117:S},e(Y,[2,180]),e(u,[2,20]),e(Ee,[2,25]),e(T1,[2,46],{39:188,18:189,10:f1,40:me}),e(W1,[2,73],{10:[1,190]}),{10:[1,191]},{30:192,67:k,79:U,80:W,81:168,115:m,116:E,117:S},{77:[1,193],78:194,115:Se,118:De},e(P1,[2,78]),e(P1,[2,80]),e(P1,[2,81]),e(P1,[2,166]),e(P1,[2,167]),{8:t1,9:s1,10:xe,11:r1,12:Ce,14:Te,21:196,27:ye,29:[1,195],32:Fe,44:ve,60:_e,75:Be,82:137,83:Ve,84:Le,85:we,86:Ie,87:Re,88:Ne,89:Pe,90:197,104:Oe,108:Ge,110:Me,113:Ue,114:We,115:ze},e(T,[2,99]),e(T,[2,101]),e(T,[2,102]),e(T,[2,155]),e(T,[2,156]),e(T,[2,157]),e(T,[2,158]),e(T,[2,159]),e(T,[2,160]),e(T,[2,161]),e(T,[2,162]),e(T,[2,163]),e(T,[2,164]),e(T,[2,165]),e(T,[2,88]),e(T,[2,89]),e(T,[2,90]),e(T,[2,91]),e(T,[2,92]),e(T,[2,93]),e(T,[2,94]),e(T,[2,95]),e(T,[2,96]),e(T,[2,97]),e(T,[2,98]),{6:11,7:12,8:g,9:D,10:c,11:o,20:17,22:18,23:19,24:20,25:21,26:22,27:v,32:[1,198],33:24,34:z,36:_,38:h,42:28,43:38,44:b,45:39,47:40,60:x,83:Z,84:k1,85:m1,86:E1,87:Y1,88:B,101:V,104:L,105:w,108:I,110:R,112:41,113:N,114:P,115:O,120:q1,121:H1,122:X1,123:Q1},{10:f1,18:199},{44:[1,200]},e(S1,[2,43]),{10:[1,201],44:b,60:x,88:B,101:V,104:L,105:w,108:I,110:R,112:111,113:N,114:P,115:O},{10:[1,202]},{10:[1,203],105:[1,204]},e(Ye,[2,126]),{10:[1,205],44:b,60:x,88:B,101:V,104:L,105:w,108:I,110:R,112:111,113:N,114:P,115:O},{10:[1,206],44:b,60:x,88:B,101:V,104:L,105:w,108:I,110:R,112:111,113:N,114:P,115:O},{79:[1,207]},e(F,[2,107],{10:[1,208]}),e(F,[2,109],{10:[1,209]}),{79:[1,210]},e(q,[2,182]),{79:[1,211],97:[1,212]},e(S1,[2,55],{112:111,44:b,60:x,88:B,101:V,104:L,105:w,108:I,110:R,113:N,114:P,115:O}),{31:[1,213],67:k,81:214,115:m,116:E,117:S},e(g1,[2,84]),e(g1,[2,86]),e(g1,[2,87]),e(g1,[2,151]),e(g1,[2,152]),e(g1,[2,153]),e(g1,[2,154]),{49:[1,215],67:k,81:214,115:m,116:E,117:S},{30:216,67:k,79:U,80:W,81:168,115:m,116:E,117:S},{51:[1,217],67:k,81:214,115:m,116:E,117:S},{53:[1,218],67:k,81:214,115:m,116:E,117:S},{55:[1,219],67:k,81:214,115:m,116:E,117:S},{57:[1,220],67:k,81:214,115:m,116:E,117:S},{60:[1,221]},{64:[1,222],67:k,81:214,115:m,116:E,117:S},{66:[1,223],67:k,81:214,115:m,116:E,117:S},{30:224,67:k,79:U,80:W,81:168,115:m,116:E,117:S},{31:[1,225],67:k,81:214,115:m,116:E,117:S},{67:k,69:[1,226],71:[1,227],81:214,115:m,116:E,117:S},{67:k,69:[1,229],71:[1,228],81:214,115:m,116:E,117:S},e(T1,[2,45],{18:152,10:f1,40:Ke}),e(T1,[2,47],{44:je}),e(W1,[2,75]),e(W1,[2,74]),{62:[1,230],67:k,81:214,115:m,116:E,117:S},e(W1,[2,77]),e(P1,[2,79]),{30:231,67:k,79:U,80:W,81:168,115:m,116:E,117:S},e(ne,d,{5:232}),e(T,[2,100]),e(C,[2,35]),{43:233,44:b,45:39,47:40,60:x,88:B,101:V,104:L,105:w,108:I,110:R,112:41,113:N,114:P,115:O},{10:f1,18:234},{10:i1,60:a1,83:n1,91:235,104:u1,106:236,107:237,108:l1,109:o1,110:c1,111:h1},{10:i1,60:a1,83:n1,91:246,103:[1,247],104:u1,106:236,107:237,108:l1,109:o1,110:c1,111:h1},{10:i1,60:a1,83:n1,91:248,103:[1,249],104:u1,106:236,107:237,108:l1,109:o1,110:c1,111:h1},{104:[1,250]},{10:i1,60:a1,83:n1,91:251,104:u1,106:236,107:237,108:l1,109:o1,110:c1,111:h1},{44:b,47:252,60:x,88:B,101:V,104:L,105:w,108:I,110:R,112:41,113:N,114:P,115:O},e(F,[2,106]),{79:[1,253]},{79:[1,254],97:[1,255]},e(F,[2,114]),e(F,[2,116],{10:[1,256]}),e(F,[2,117]),e(M,[2,56]),e(g1,[2,85]),e(M,[2,57]),{51:[1,257],67:k,81:214,115:m,116:E,117:S},e(M,[2,64]),e(M,[2,59]),e(M,[2,60]),e(M,[2,61]),{108:[1,258]},e(M,[2,63]),e(M,[2,65]),{66:[1,259],67:k,81:214,115:m,116:E,117:S},e(M,[2,67]),e(M,[2,68]),e(M,[2,70]),e(M,[2,69]),e(M,[2,71]),e([10,44,60,88,101,104,105,108,110,113,114,115],[2,83]),{31:[1,260],67:k,81:214,115:m,116:E,117:S},{6:11,7:12,8:g,9:D,10:c,11:o,20:17,22:18,23:19,24:20,25:21,26:22,27:v,32:[1,261],33:24,34:z,36:_,38:h,42:28,43:38,44:b,45:39,47:40,60:x,83:Z,84:k1,85:m1,86:E1,87:Y1,88:B,101:V,104:L,105:w,108:I,110:R,112:41,113:N,114:P,115:O,120:q1,121:H1,122:X1,123:Q1},e(S1,[2,53]),{43:262,44:b,45:39,47:40,60:x,88:B,101:V,104:L,105:w,108:I,110:R,112:41,113:N,114:P,115:O},e(F,[2,119],{105:O1}),e(qe,[2,128],{107:264,10:i1,60:a1,83:n1,104:u1,108:l1,109:o1,110:c1,111:h1}),e($,[2,130]),e($,[2,132]),e($,[2,133]),e($,[2,134]),e($,[2,135]),e($,[2,136]),e($,[2,137]),e($,[2,138]),e($,[2,139]),e(F,[2,120],{105:O1}),{10:[1,265]},e(F,[2,121],{105:O1}),{10:[1,266]},e(Ye,[2,127]),e(F,[2,103],{105:O1}),e(F,[2,104],{112:111,44:b,60:x,88:B,101:V,104:L,105:w,108:I,110:R,113:N,114:P,115:O}),e(F,[2,108]),e(F,[2,110],{10:[1,267]}),e(F,[2,111]),{97:[1,268]},{51:[1,269]},{62:[1,270]},{66:[1,271]},{8:t1,9:s1,11:r1,21:272},e(C,[2,34]),e(S1,[2,52]),{10:i1,60:a1,83:n1,104:u1,106:273,107:237,108:l1,109:o1,110:c1,111:h1},e($,[2,131]),{14:y1,44:F1,60:v1,88:_1,100:274,104:B1,105:V1,108:L1,110:w1,113:I1,114:R1,115:N1,119:86},{14:y1,44:F1,60:v1,88:_1,100:275,104:B1,105:V1,108:L1,110:w1,113:I1,114:R1,115:N1,119:86},{97:[1,276]},e(F,[2,118]),e(M,[2,58]),{30:277,67:k,79:U,80:W,81:168,115:m,116:E,117:S},e(M,[2,66]),e(ne,d,{5:278}),e(qe,[2,129],{107:264,10:i1,60:a1,83:n1,104:u1,108:l1,109:o1,110:c1,111:h1}),e(F,[2,124],{119:164,10:[1,279],14:y1,44:F1,60:v1,88:_1,104:B1,105:V1,108:L1,110:w1,113:I1,114:R1,115:N1}),e(F,[2,125],{119:164,10:[1,280],14:y1,44:F1,60:v1,88:_1,104:B1,105:V1,108:L1,110:w1,113:I1,114:R1,115:N1}),e(F,[2,112]),{31:[1,281],67:k,81:214,115:m,116:E,117:S},{6:11,7:12,8:g,9:D,10:c,11:o,20:17,22:18,23:19,24:20,25:21,26:22,27:v,32:[1,282],33:24,34:z,36:_,38:h,42:28,43:38,44:b,45:39,47:40,60:x,83:Z,84:k1,85:m1,86:E1,87:Y1,88:B,101:V,104:L,105:w,108:I,110:R,112:41,113:N,114:P,115:O,120:q1,121:H1,122:X1,123:Q1},{10:i1,60:a1,83:n1,91:283,104:u1,106:236,107:237,108:l1,109:o1,110:c1,111:h1},{10:i1,60:a1,83:n1,91:284,104:u1,106:236,107:237,108:l1,109:o1,110:c1,111:h1},e(M,[2,62]),e(C,[2,33]),e(F,[2,122],{105:O1}),e(F,[2,123],{105:O1})],defaultActions:{},parseError:l(function(p,f){if(f.recoverable)this.trace(p);else{var A=new Error(p);throw A.hash=f,A}},"parseError"),parse:l(function(p){var f=this,A=[0],n=[],y=[null],t=[],z1=this.table,s="",X=0,He=0,ht=2,Xe=1,dt=t.slice.call(arguments,1),G=Object.create(this.lexer),D1={yy:{}};for(var le in this.yy)Object.prototype.hasOwnProperty.call(this.yy,le)&&(D1.yy[le]=this.yy[le]);G.setInput(p,D1.yy),D1.yy.lexer=G,D1.yy.parser=this,typeof G.yylloc>"u"&&(G.yylloc={});var oe=G.yylloc;t.push(oe);var pt=G.options&&G.options.ranges;typeof D1.yy.parseError=="function"?this.parseError=D1.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ft(H){A.length=A.length-2*H,y.length=y.length-H,t.length=t.length-H}l(ft,"popStack");function Qe(){var H;return H=n.pop()||G.lex()||Xe,typeof H!="number"&&(H instanceof Array&&(n=H,H=n.pop()),H=f.symbols_[H]||H),H}l(Qe,"lex");for(var j,x1,Q,ce,G1={},Z1,d1,Je,$1;;){if(x1=A[A.length-1],this.defaultActions[x1]?Q=this.defaultActions[x1]:((j===null||typeof j>"u")&&(j=Qe()),Q=z1[x1]&&z1[x1][j]),typeof Q>"u"||!Q.length||!Q[0]){var he="";$1=[];for(Z1 in z1[x1])this.terminals_[Z1]&&Z1>ht&&$1.push("'"+this.terminals_[Z1]+"'");G.showPosition?he="Parse error on line "+(X+1)+`: +`+G.showPosition()+` +Expecting `+$1.join(", ")+", got '"+(this.terminals_[j]||j)+"'":he="Parse error on line "+(X+1)+": Unexpected "+(j==Xe?"end of input":"'"+(this.terminals_[j]||j)+"'"),this.parseError(he,{text:G.match,token:this.terminals_[j]||j,line:G.yylineno,loc:oe,expected:$1})}if(Q[0]instanceof Array&&Q.length>1)throw new Error("Parse Error: multiple actions possible at state: "+x1+", token: "+j);switch(Q[0]){case 1:A.push(j),y.push(G.yytext),t.push(G.yylloc),A.push(Q[1]),j=null,He=G.yyleng,s=G.yytext,X=G.yylineno,oe=G.yylloc;break;case 2:if(d1=this.productions_[Q[1]][1],G1.$=y[y.length-d1],G1._$={first_line:t[t.length-(d1||1)].first_line,last_line:t[t.length-1].last_line,first_column:t[t.length-(d1||1)].first_column,last_column:t[t.length-1].last_column},pt&&(G1._$.range=[t[t.length-(d1||1)].range[0],t[t.length-1].range[1]]),ce=this.performAction.apply(G1,[s,He,X,D1.yy,Q[1],y,t].concat(dt)),typeof ce<"u")return ce;d1&&(A=A.slice(0,-1*d1*2),y=y.slice(0,-1*d1),t=t.slice(0,-1*d1)),A.push(this.productions_[Q[1]][0]),y.push(G1.$),t.push(G1._$),Je=z1[A[A.length-2]][A[A.length-1]],A.push(Je);break;case 3:return!0}}return!0},"parse")},ct=function(){var A1={EOF:1,parseError:l(function(f,A){if(this.yy.parser)this.yy.parser.parseError(f,A);else throw new Error(f)},"parseError"),setInput:l(function(p,f){return this.yy=f||this.yy||{},this._input=p,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:l(function(){var p=this._input[0];this.yytext+=p,this.yyleng++,this.offset++,this.match+=p,this.matched+=p;var f=p.match(/(?:\r\n?|\n).*/g);return f?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),p},"input"),unput:l(function(p){var f=p.length,A=p.split(/(?:\r\n?|\n)/g);this._input=p+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-f),this.offset-=f;var n=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),A.length-1&&(this.yylineno-=A.length-1);var y=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:A?(A.length===n.length?this.yylloc.first_column:0)+n[n.length-A.length].length-A[0].length:this.yylloc.first_column-f},this.options.ranges&&(this.yylloc.range=[y[0],y[0]+this.yyleng-f]),this.yyleng=this.yytext.length,this},"unput"),more:l(function(){return this._more=!0,this},"more"),reject:l(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:l(function(p){this.unput(this.match.slice(p))},"less"),pastInput:l(function(){var p=this.matched.substr(0,this.matched.length-this.match.length);return(p.length>20?"...":"")+p.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:l(function(){var p=this.match;return p.length<20&&(p+=this._input.substr(0,20-p.length)),(p.substr(0,20)+(p.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:l(function(){var p=this.pastInput(),f=new Array(p.length+1).join("-");return p+this.upcomingInput()+` +`+f+"^"},"showPosition"),test_match:l(function(p,f){var A,n,y;if(this.options.backtrack_lexer&&(y={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(y.yylloc.range=this.yylloc.range.slice(0))),n=p[0].match(/(?:\r\n?|\n).*/g),n&&(this.yylineno+=n.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:n?n[n.length-1].length-n[n.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+p[0].length},this.yytext+=p[0],this.match+=p[0],this.matches=p,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(p[0].length),this.matched+=p[0],A=this.performAction.call(this,this.yy,this,f,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),A)return A;if(this._backtrack){for(var t in y)this[t]=y[t];return!1}return!1},"test_match"),next:l(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var p,f,A,n;this._more||(this.yytext="",this.match="");for(var y=this._currentRules(),t=0;tf[0].length)){if(f=A,n=t,this.options.backtrack_lexer){if(p=this.test_match(A,y[t]),p!==!1)return p;if(this._backtrack){f=!1;continue}else return!1}else if(!this.options.flex)break}return f?(p=this.test_match(f,y[n]),p!==!1?p:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:l(function(){var f=this.next();return f||this.lex()},"lex"),begin:l(function(f){this.conditionStack.push(f)},"begin"),popState:l(function(){var f=this.conditionStack.length-1;return f>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:l(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:l(function(f){return f=this.conditionStack.length-1-Math.abs(f||0),f>=0?this.conditionStack[f]:"INITIAL"},"topState"),pushState:l(function(f){this.begin(f)},"pushState"),stateStackSize:l(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:l(function(f,A,n,y){switch(n){case 0:return this.begin("acc_title"),34;case 1:return this.popState(),"acc_title_value";case 2:return this.begin("acc_descr"),36;case 3:return this.popState(),"acc_descr_value";case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return this.pushState("shapeData"),A.yytext="",40;case 8:return this.pushState("shapeDataStr"),40;case 9:return this.popState(),40;case 10:const t=/\n\s*/g;return A.yytext=A.yytext.replace(t,"
    "),40;case 11:return 40;case 12:this.popState();break;case 13:this.begin("callbackname");break;case 14:this.popState();break;case 15:this.popState(),this.begin("callbackargs");break;case 16:return 94;case 17:this.popState();break;case 18:return 95;case 19:return"MD_STR";case 20:this.popState();break;case 21:this.begin("md_string");break;case 22:return"STR";case 23:this.popState();break;case 24:this.pushState("string");break;case 25:return 83;case 26:return 101;case 27:return 84;case 28:return 103;case 29:return 85;case 30:return 86;case 31:return 96;case 32:this.begin("click");break;case 33:this.popState();break;case 34:return 87;case 35:return f.lex.firstGraph()&&this.begin("dir"),12;case 36:return f.lex.firstGraph()&&this.begin("dir"),12;case 37:return f.lex.firstGraph()&&this.begin("dir"),12;case 38:return 27;case 39:return 32;case 40:return 97;case 41:return 97;case 42:return 97;case 43:return 97;case 44:return this.popState(),13;case 45:return this.popState(),14;case 46:return this.popState(),14;case 47:return this.popState(),14;case 48:return this.popState(),14;case 49:return this.popState(),14;case 50:return this.popState(),14;case 51:return this.popState(),14;case 52:return this.popState(),14;case 53:return this.popState(),14;case 54:return this.popState(),14;case 55:return 120;case 56:return 121;case 57:return 122;case 58:return 123;case 59:return 104;case 60:return 110;case 61:return 46;case 62:return 60;case 63:return 44;case 64:return 8;case 65:return 105;case 66:return 114;case 67:return this.popState(),77;case 68:return this.pushState("edgeText"),75;case 69:return 118;case 70:return this.popState(),77;case 71:return this.pushState("thickEdgeText"),75;case 72:return 118;case 73:return this.popState(),77;case 74:return this.pushState("dottedEdgeText"),75;case 75:return 118;case 76:return 77;case 77:return this.popState(),53;case 78:return"TEXT";case 79:return this.pushState("ellipseText"),52;case 80:return this.popState(),55;case 81:return this.pushState("text"),54;case 82:return this.popState(),57;case 83:return this.pushState("text"),56;case 84:return 58;case 85:return this.pushState("text"),67;case 86:return this.popState(),64;case 87:return this.pushState("text"),63;case 88:return this.popState(),49;case 89:return this.pushState("text"),48;case 90:return this.popState(),69;case 91:return this.popState(),71;case 92:return 116;case 93:return this.pushState("trapText"),68;case 94:return this.pushState("trapText"),70;case 95:return 117;case 96:return 67;case 97:return 89;case 98:return"SEP";case 99:return 88;case 100:return 114;case 101:return 110;case 102:return 44;case 103:return 108;case 104:return 113;case 105:return 115;case 106:return this.popState(),62;case 107:return this.pushState("text"),62;case 108:return this.popState(),51;case 109:return this.pushState("text"),50;case 110:return this.popState(),31;case 111:return this.pushState("text"),29;case 112:return this.popState(),66;case 113:return this.pushState("text"),65;case 114:return"TEXT";case 115:return"QUOTE";case 116:return 9;case 117:return 10;case 118:return 11}},"anonymous"),rules:[/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:@\{)/,/^(?:["])/,/^(?:["])/,/^(?:[^\"]+)/,/^(?:[^}^"]+)/,/^(?:\})/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["][`])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:["])/,/^(?:style\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:href[\s])/,/^(?:click[\s]+)/,/^(?:[\s\n])/,/^(?:[^\s\n]*)/,/^(?:flowchart-elk\b)/,/^(?:graph\b)/,/^(?:flowchart\b)/,/^(?:subgraph\b)/,/^(?:end\b\s*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:(\r?\n)*\s*\n)/,/^(?:\s*LR\b)/,/^(?:\s*RL\b)/,/^(?:\s*TB\b)/,/^(?:\s*BT\b)/,/^(?:\s*TD\b)/,/^(?:\s*BR\b)/,/^(?:\s*<)/,/^(?:\s*>)/,/^(?:\s*\^)/,/^(?:\s*v\b)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::::)/,/^(?::)/,/^(?:&)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:[^-]|-(?!-)+)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:[^=]|=(?!))/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:[^\.]|\.(?!))/,/^(?:\s*~~[\~]+\s*)/,/^(?:[-/\)][\)])/,/^(?:[^\(\)\[\]\{\}]|!\)+)/,/^(?:\(-)/,/^(?:\]\))/,/^(?:\(\[)/,/^(?:\]\])/,/^(?:\[\[)/,/^(?:\[\|)/,/^(?:>)/,/^(?:\)\])/,/^(?:\[\()/,/^(?:\)\)\))/,/^(?:\(\(\()/,/^(?:[\\(?=\])][\]])/,/^(?:\/(?=\])\])/,/^(?:\/(?!\])|\\(?!\])|[^\\\[\]\(\)\{\}\/]+)/,/^(?:\[\/)/,/^(?:\[\\)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:\\\|)/,/^(?:v\b)/,/^(?:\*)/,/^(?:#)/,/^(?:&)/,/^(?:([A-Za-z0-9!"\#$%&'*+\.`?\\_\/]|-(?=[^\>\-\.])|(?!))+)/,/^(?:-)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\|)/,/^(?:\|)/,/^(?:\))/,/^(?:\()/,/^(?:\])/,/^(?:\[)/,/^(?:(\}))/,/^(?:\{)/,/^(?:[^\[\]\(\)\{\}\|\"]+)/,/^(?:")/,/^(?:(\r?\n)+)/,/^(?:\s)/,/^(?:$)/],conditions:{shapeDataEndBracket:{rules:[21,24,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},shapeDataStr:{rules:[9,10,21,24,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},shapeData:{rules:[8,11,12,21,24,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},callbackargs:{rules:[17,18,21,24,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},callbackname:{rules:[14,15,16,21,24,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},href:{rules:[21,24,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},click:{rules:[21,24,33,34,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},dottedEdgeText:{rules:[21,24,73,75,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},thickEdgeText:{rules:[21,24,70,72,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},edgeText:{rules:[21,24,67,69,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},trapText:{rules:[21,24,76,79,81,83,87,89,90,91,92,93,94,107,109,111,113],inclusive:!1},ellipseText:{rules:[21,24,76,77,78,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},text:{rules:[21,24,76,79,80,81,82,83,86,87,88,89,93,94,106,107,108,109,110,111,112,113,114],inclusive:!1},vertex:{rules:[21,24,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},dir:{rules:[21,24,44,45,46,47,48,49,50,51,52,53,54,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},acc_descr_multiline:{rules:[5,6,21,24,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},acc_descr:{rules:[3,21,24,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},acc_title:{rules:[1,21,24,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},md_string:{rules:[19,20,21,24,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},string:{rules:[21,22,23,24,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},INITIAL:{rules:[0,2,4,7,13,21,24,25,26,27,28,29,30,31,32,35,36,37,38,39,40,41,42,43,55,56,57,58,59,60,61,62,63,64,65,66,67,68,70,71,73,74,76,79,81,83,84,85,87,89,93,94,95,96,97,98,99,100,101,102,103,104,105,107,109,111,113,115,116,117,118],inclusive:!0}}};return A1}();ue.lexer=ct;function J1(){this.yy={}}return l(J1,"Parser"),J1.prototype=ue,ue.Parser=J1,new J1}();fe.parser=fe;var gs=fe,As=l((e,r)=>{const i=wt,a=i(e,"r"),u=i(e,"g"),d=i(e,"b");return Lt(a,u,d,r)},"fade"),bs=l(e=>`.label { + font-family: ${e.fontFamily}; + color: ${e.nodeTextColor||e.textColor}; + } + .cluster-label text { + fill: ${e.titleColor}; + } + .cluster-label span { + color: ${e.titleColor}; + } + .cluster-label span p { + background-color: transparent; + } + + .label text,span { + fill: ${e.nodeTextColor||e.textColor}; + color: ${e.nodeTextColor||e.textColor}; + } + + .node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${e.mainBkg}; + stroke: ${e.nodeBorder}; + stroke-width: 1px; + } + .rough-node .label text , .node .label text, .image-shape .label, .icon-shape .label { + text-anchor: middle; + } + // .flowchart-label .text-outer-tspan { + // text-anchor: middle; + // } + // .flowchart-label .text-inner-tspan { + // text-anchor: start; + // } + + .node .katex path { + fill: #000; + stroke: #000; + stroke-width: 1px; + } + + .rough-node .label,.node .label, .image-shape .label, .icon-shape .label { + text-align: center; + } + .node.clickable { + cursor: pointer; + } + + + .root .anchor path { + fill: ${e.lineColor} !important; + stroke-width: 0; + stroke: ${e.lineColor}; + } + + .arrowheadPath { + fill: ${e.arrowheadColor}; + } + + .edgePath .path { + stroke: ${e.lineColor}; + stroke-width: 2.0px; + } + + .flowchart-link { + stroke: ${e.lineColor}; + fill: none; + } + + .edgeLabel { + background-color: ${e.edgeLabelBackground}; + p { + background-color: ${e.edgeLabelBackground}; + } + rect { + opacity: 0.5; + background-color: ${e.edgeLabelBackground}; + fill: ${e.edgeLabelBackground}; + } + text-align: center; + } + + /* For html labels only */ + .labelBkg { + background-color: ${As(e.edgeLabelBackground,.5)}; + // background-color: + } + + .cluster rect { + fill: ${e.clusterBkg}; + stroke: ${e.clusterBorder}; + stroke-width: 1px; + } + + .cluster text { + fill: ${e.titleColor}; + } + + .cluster span { + color: ${e.titleColor}; + } + /* .cluster div { + color: ${e.titleColor}; + } */ + + div.mermaidTooltip { + position: absolute; + text-align: center; + max-width: 200px; + padding: 2px; + font-family: ${e.fontFamily}; + font-size: 12px; + background: ${e.tertiaryColor}; + border: 1px solid ${e.border2}; + border-radius: 2px; + pointer-events: none; + z-index: 100; + } + + .flowchartTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${e.textColor}; + } + + rect.text { + fill: none; + stroke-width: 0; + } + + .icon-shape, .image-shape { + background-color: ${e.edgeLabelBackground}; + p { + background-color: ${e.edgeLabelBackground}; + padding: 2px; + } + rect { + opacity: 0.5; + background-color: ${e.edgeLabelBackground}; + fill: ${e.edgeLabelBackground}; + } + text-align: center; + } +`,"getStyles"),ks=bs,Cs={parser:gs,db:de,renderer:fs,styles:ks,init:l(e=>{e.flowchart||(e.flowchart={}),e.layout&&Ze({layout:e.layout}),e.flowchart.arrowMarkerAbsolute=e.arrowMarkerAbsolute,Ze({flowchart:{arrowMarkerAbsolute:e.arrowMarkerAbsolute}}),de.clear(),de.setGen("gen-2")},"init")};export{Cs as diagram}; diff --git a/assets/chunks/framework.B1keMFNq.js b/assets/chunks/framework.B1keMFNq.js new file mode 100644 index 000000000..9cedc187d --- /dev/null +++ b/assets/chunks/framework.B1keMFNq.js @@ -0,0 +1,18 @@ +/** +* @vue/shared v3.5.12 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**//*! #__NO_SIDE_EFFECTS__ */function ks(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const ee={},St=[],Ue=()=>{},el=()=>!1,nn=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Vs=e=>e.startsWith("onUpdate:"),ae=Object.assign,Us=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},tl=Object.prototype.hasOwnProperty,Q=(e,t)=>tl.call(e,t),K=Array.isArray,Ct=e=>Bn(e)==="[object Map]",ui=e=>Bn(e)==="[object Set]",q=e=>typeof e=="function",ie=e=>typeof e=="string",Xe=e=>typeof e=="symbol",se=e=>e!==null&&typeof e=="object",di=e=>(se(e)||q(e))&&q(e.then)&&q(e.catch),hi=Object.prototype.toString,Bn=e=>hi.call(e),nl=e=>Bn(e).slice(8,-1),pi=e=>Bn(e)==="[object Object]",Ws=e=>ie(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,At=ks(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),jn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},sl=/-(\w)/g,Ie=jn(e=>e.replace(sl,(t,n)=>n?n.toUpperCase():"")),rl=/\B([A-Z])/g,rt=jn(e=>e.replace(rl,"-$1").toLowerCase()),kn=jn(e=>e.charAt(0).toUpperCase()+e.slice(1)),xn=jn(e=>e?`on${kn(e)}`:""),nt=(e,t)=>!Object.is(e,t),En=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},xs=e=>{const t=parseFloat(e);return isNaN(t)?e:t},mi=e=>{const t=ie(e)?Number(e):NaN;return isNaN(t)?e:t};let yr;const Vn=()=>yr||(yr=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Ks(e){if(K(e)){const t={};for(let n=0;n{if(n){const s=n.split(ol);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function qs(e){let t="";if(ie(e))t=e;else if(K(e))for(let n=0;n!!(e&&e.__v_isRef===!0),ul=e=>ie(e)?e:e==null?"":K(e)||se(e)&&(e.toString===hi||!q(e.toString))?vi(e)?ul(e.value):JSON.stringify(e,bi,2):String(e),bi=(e,t)=>vi(t)?bi(e,t.value):Ct(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r],i)=>(n[ts(s,i)+" =>"]=r,n),{})}:ui(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>ts(n))}:Xe(t)?ts(t):se(t)&&!K(t)&&!pi(t)?String(t):t,ts=(e,t="")=>{var n;return Xe(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** +* @vue/reactivity v3.5.12 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let we;class dl{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=we,!t&&we&&(this.index=(we.scopes||(we.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t0)return;if(Wt){let t=Wt;for(Wt=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;Ut;){let t=Ut;for(Ut=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function Ti(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Si(e){let t,n=e.depsTail,s=n;for(;s;){const r=s.prevDep;s.version===-1?(s===n&&(n=r),Xs(s),pl(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=r}e.deps=t,e.depsTail=n}function Es(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Ci(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Ci(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Xt))return;e.globalVersion=Xt;const t=e.dep;if(e.flags|=2,t.version>0&&!e.isSSR&&e.deps&&!Es(e)){e.flags&=-3;return}const n=ne,s=Fe;ne=e,Fe=!0;try{Ti(e);const r=e.fn(e._value);(t.version===0||nt(r,e._value))&&(e._value=r,t.version++)}catch(r){throw t.version++,r}finally{ne=n,Fe=s,Si(e),e.flags&=-3}}function Xs(e,t=!1){const{dep:n,prevSub:s,nextSub:r}=e;if(s&&(s.nextSub=r,e.prevSub=void 0),r&&(r.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let i=n.computed.deps;i;i=i.nextDep)Xs(i,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function pl(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let Fe=!0;const Ai=[];function it(){Ai.push(Fe),Fe=!1}function ot(){const e=Ai.pop();Fe=e===void 0?!0:e}function vr(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=ne;ne=void 0;try{t()}finally{ne=n}}}let Xt=0;class gl{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Un{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0}track(t){if(!ne||!Fe||ne===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==ne)n=this.activeLink=new gl(ne,this),ne.deps?(n.prevDep=ne.depsTail,ne.depsTail.nextDep=n,ne.depsTail=n):ne.deps=ne.depsTail=n,Ri(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=ne.depsTail,n.nextDep=void 0,ne.depsTail.nextDep=n,ne.depsTail=n,ne.deps===n&&(ne.deps=s)}return n}trigger(t){this.version++,Xt++,this.notify(t)}notify(t){Gs();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{Ys()}}}function Ri(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)Ri(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const On=new WeakMap,dt=Symbol(""),Ts=Symbol(""),Jt=Symbol("");function ye(e,t,n){if(Fe&&ne){let s=On.get(e);s||On.set(e,s=new Map);let r=s.get(n);r||(s.set(n,r=new Un),r.map=s,r.key=n),r.track()}}function Ge(e,t,n,s,r,i){const o=On.get(e);if(!o){Xt++;return}const l=c=>{c&&c.trigger()};if(Gs(),t==="clear")o.forEach(l);else{const c=K(e),a=c&&Ws(n);if(c&&n==="length"){const f=Number(s);o.forEach((u,g)=>{(g==="length"||g===Jt||!Xe(g)&&g>=f)&&l(u)})}else switch((n!==void 0||o.has(void 0))&&l(o.get(n)),a&&l(o.get(Jt)),t){case"add":c?a&&l(o.get("length")):(l(o.get(dt)),Ct(e)&&l(o.get(Ts)));break;case"delete":c||(l(o.get(dt)),Ct(e)&&l(o.get(Ts)));break;case"set":Ct(e)&&l(o.get(dt));break}}Ys()}function ml(e,t){const n=On.get(e);return n&&n.get(t)}function _t(e){const t=z(e);return t===e?t:(ye(t,"iterate",Jt),Pe(e)?t:t.map(ve))}function Wn(e){return ye(e=z(e),"iterate",Jt),e}const yl={__proto__:null,[Symbol.iterator](){return ss(this,Symbol.iterator,ve)},concat(...e){return _t(this).concat(...e.map(t=>K(t)?_t(t):t))},entries(){return ss(this,"entries",e=>(e[1]=ve(e[1]),e))},every(e,t){return Ke(this,"every",e,t,void 0,arguments)},filter(e,t){return Ke(this,"filter",e,t,n=>n.map(ve),arguments)},find(e,t){return Ke(this,"find",e,t,ve,arguments)},findIndex(e,t){return Ke(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return Ke(this,"findLast",e,t,ve,arguments)},findLastIndex(e,t){return Ke(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return Ke(this,"forEach",e,t,void 0,arguments)},includes(...e){return rs(this,"includes",e)},indexOf(...e){return rs(this,"indexOf",e)},join(e){return _t(this).join(e)},lastIndexOf(...e){return rs(this,"lastIndexOf",e)},map(e,t){return Ke(this,"map",e,t,void 0,arguments)},pop(){return jt(this,"pop")},push(...e){return jt(this,"push",e)},reduce(e,...t){return br(this,"reduce",e,t)},reduceRight(e,...t){return br(this,"reduceRight",e,t)},shift(){return jt(this,"shift")},some(e,t){return Ke(this,"some",e,t,void 0,arguments)},splice(...e){return jt(this,"splice",e)},toReversed(){return _t(this).toReversed()},toSorted(e){return _t(this).toSorted(e)},toSpliced(...e){return _t(this).toSpliced(...e)},unshift(...e){return jt(this,"unshift",e)},values(){return ss(this,"values",ve)}};function ss(e,t,n){const s=Wn(e),r=s[t]();return s!==e&&!Pe(e)&&(r._next=r.next,r.next=()=>{const i=r._next();return i.value&&(i.value=n(i.value)),i}),r}const vl=Array.prototype;function Ke(e,t,n,s,r,i){const o=Wn(e),l=o!==e&&!Pe(e),c=o[t];if(c!==vl[t]){const u=c.apply(e,i);return l?ve(u):u}let a=n;o!==e&&(l?a=function(u,g){return n.call(this,ve(u),g,e)}:n.length>2&&(a=function(u,g){return n.call(this,u,g,e)}));const f=c.call(o,a,s);return l&&r?r(f):f}function br(e,t,n,s){const r=Wn(e);let i=n;return r!==e&&(Pe(e)?n.length>3&&(i=function(o,l,c){return n.call(this,o,l,c,e)}):i=function(o,l,c){return n.call(this,o,ve(l),c,e)}),r[t](i,...s)}function rs(e,t,n){const s=z(e);ye(s,"iterate",Jt);const r=s[t](...n);return(r===-1||r===!1)&&Qs(n[0])?(n[0]=z(n[0]),s[t](...n)):r}function jt(e,t,n=[]){it(),Gs();const s=z(e)[t].apply(e,n);return Ys(),ot(),s}const bl=ks("__proto__,__v_isRef,__isVue"),Oi=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Xe));function _l(e){Xe(e)||(e=String(e));const t=z(this);return ye(t,"has",e),t.hasOwnProperty(e)}class Mi{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){const r=this._isReadonly,i=this._isShallow;if(n==="__v_isReactive")return!r;if(n==="__v_isReadonly")return r;if(n==="__v_isShallow")return i;if(n==="__v_raw")return s===(r?i?Ml:Fi:i?Li:Ii).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const o=K(t);if(!r){let c;if(o&&(c=yl[n]))return c;if(n==="hasOwnProperty")return _l}const l=Reflect.get(t,n,fe(t)?t:s);return(Xe(n)?Oi.has(n):bl(n))||(r||ye(t,"get",n),i)?l:fe(l)?o&&Ws(n)?l:l.value:se(l)?r?qn(l):Kn(l):l}}class Pi extends Mi{constructor(t=!1){super(!1,t)}set(t,n,s,r){let i=t[n];if(!this._isShallow){const c=yt(i);if(!Pe(s)&&!yt(s)&&(i=z(i),s=z(s)),!K(t)&&fe(i)&&!fe(s))return c?!1:(i.value=s,!0)}const o=K(t)&&Ws(n)?Number(n)e,un=e=>Reflect.getPrototypeOf(e);function Sl(e,t,n){return function(...s){const r=this.__v_raw,i=z(r),o=Ct(i),l=e==="entries"||e===Symbol.iterator&&o,c=e==="keys"&&o,a=r[e](...s),f=n?Ss:t?Cs:ve;return!t&&ye(i,"iterate",c?Ts:dt),{next(){const{value:u,done:g}=a.next();return g?{value:u,done:g}:{value:l?[f(u[0]),f(u[1])]:f(u),done:g}},[Symbol.iterator](){return this}}}}function dn(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function Cl(e,t){const n={get(r){const i=this.__v_raw,o=z(i),l=z(r);e||(nt(r,l)&&ye(o,"get",r),ye(o,"get",l));const{has:c}=un(o),a=t?Ss:e?Cs:ve;if(c.call(o,r))return a(i.get(r));if(c.call(o,l))return a(i.get(l));i!==o&&i.get(r)},get size(){const r=this.__v_raw;return!e&&ye(z(r),"iterate",dt),Reflect.get(r,"size",r)},has(r){const i=this.__v_raw,o=z(i),l=z(r);return e||(nt(r,l)&&ye(o,"has",r),ye(o,"has",l)),r===l?i.has(r):i.has(r)||i.has(l)},forEach(r,i){const o=this,l=o.__v_raw,c=z(l),a=t?Ss:e?Cs:ve;return!e&&ye(c,"iterate",dt),l.forEach((f,u)=>r.call(i,a(f),a(u),o))}};return ae(n,e?{add:dn("add"),set:dn("set"),delete:dn("delete"),clear:dn("clear")}:{add(r){!t&&!Pe(r)&&!yt(r)&&(r=z(r));const i=z(this);return un(i).has.call(i,r)||(i.add(r),Ge(i,"add",r,r)),this},set(r,i){!t&&!Pe(i)&&!yt(i)&&(i=z(i));const o=z(this),{has:l,get:c}=un(o);let a=l.call(o,r);a||(r=z(r),a=l.call(o,r));const f=c.call(o,r);return o.set(r,i),a?nt(i,f)&&Ge(o,"set",r,i):Ge(o,"add",r,i),this},delete(r){const i=z(this),{has:o,get:l}=un(i);let c=o.call(i,r);c||(r=z(r),c=o.call(i,r)),l&&l.call(i,r);const a=i.delete(r);return c&&Ge(i,"delete",r,void 0),a},clear(){const r=z(this),i=r.size!==0,o=r.clear();return i&&Ge(r,"clear",void 0,void 0),o}}),["keys","values","entries",Symbol.iterator].forEach(r=>{n[r]=Sl(r,e,t)}),n}function Js(e,t){const n=Cl(e,t);return(s,r,i)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get(Q(n,r)&&r in s?n:s,r,i)}const Al={get:Js(!1,!1)},Rl={get:Js(!1,!0)},Ol={get:Js(!0,!1)};const Ii=new WeakMap,Li=new WeakMap,Fi=new WeakMap,Ml=new WeakMap;function Pl(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Il(e){return e.__v_skip||!Object.isExtensible(e)?0:Pl(nl(e))}function Kn(e){return yt(e)?e:zs(e,!1,xl,Al,Ii)}function Ll(e){return zs(e,!1,Tl,Rl,Li)}function qn(e){return zs(e,!0,El,Ol,Fi)}function zs(e,t,n,s,r){if(!se(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=r.get(e);if(i)return i;const o=Il(e);if(o===0)return e;const l=new Proxy(e,o===2?s:n);return r.set(e,l),l}function ht(e){return yt(e)?ht(e.__v_raw):!!(e&&e.__v_isReactive)}function yt(e){return!!(e&&e.__v_isReadonly)}function Pe(e){return!!(e&&e.__v_isShallow)}function Qs(e){return e?!!e.__v_raw:!1}function z(e){const t=e&&e.__v_raw;return t?z(t):e}function Tn(e){return!Q(e,"__v_skip")&&Object.isExtensible(e)&&gi(e,"__v_skip",!0),e}const ve=e=>se(e)?Kn(e):e,Cs=e=>se(e)?qn(e):e;function fe(e){return e?e.__v_isRef===!0:!1}function le(e){return Ni(e,!1)}function Zs(e){return Ni(e,!0)}function Ni(e,t){return fe(e)?e:new Fl(e,t)}class Fl{constructor(t,n){this.dep=new Un,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:z(t),this._value=n?t:ve(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||Pe(t)||yt(t);t=s?t:z(t),nt(t,n)&&(this._rawValue=t,this._value=s?t:ve(t),this.dep.trigger())}}function Hi(e){return fe(e)?e.value:e}const Nl={get:(e,t,n)=>t==="__v_raw"?e:Hi(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return fe(r)&&!fe(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function $i(e){return ht(e)?e:new Proxy(e,Nl)}class Hl{constructor(t){this.__v_isRef=!0,this._value=void 0;const n=this.dep=new Un,{get:s,set:r}=t(n.track.bind(n),n.trigger.bind(n));this._get=s,this._set=r}get value(){return this._value=this._get()}set value(t){this._set(t)}}function $l(e){return new Hl(e)}class Dl{constructor(t,n,s){this._object=t,this._key=n,this._defaultValue=s,this.__v_isRef=!0,this._value=void 0}get value(){const t=this._object[this._key];return this._value=t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return ml(z(this._object),this._key)}}class Bl{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0}get value(){return this._value=this._getter()}}function jl(e,t,n){return fe(e)?e:q(e)?new Bl(e):se(e)&&arguments.length>1?kl(e,t,n):le(e)}function kl(e,t,n){const s=e[t];return fe(s)?s:new Dl(e,t,n)}class Vl{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new Un(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Xt-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&ne!==this)return Ei(this,!0),!0}get value(){const t=this.dep.track();return Ci(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function Ul(e,t,n=!1){let s,r;return q(e)?s=e:(s=e.get,r=e.set),new Vl(s,r,n)}const hn={},Mn=new WeakMap;let ut;function Wl(e,t=!1,n=ut){if(n){let s=Mn.get(n);s||Mn.set(n,s=[]),s.push(e)}}function Kl(e,t,n=ee){const{immediate:s,deep:r,once:i,scheduler:o,augmentJob:l,call:c}=n,a=m=>r?m:Pe(m)||r===!1||r===0?Ye(m,1):Ye(m);let f,u,g,y,w=!1,b=!1;if(fe(e)?(u=()=>e.value,w=Pe(e)):ht(e)?(u=()=>a(e),w=!0):K(e)?(b=!0,w=e.some(m=>ht(m)||Pe(m)),u=()=>e.map(m=>{if(fe(m))return m.value;if(ht(m))return a(m);if(q(m))return c?c(m,2):m()})):q(e)?t?u=c?()=>c(e,2):e:u=()=>{if(g){it();try{g()}finally{ot()}}const m=ut;ut=f;try{return c?c(e,3,[y]):e(y)}finally{ut=m}}:u=Ue,t&&r){const m=u,x=r===!0?1/0:r;u=()=>Ye(m(),x)}const U=_i(),F=()=>{f.stop(),U&&Us(U.effects,f)};if(i&&t){const m=t;t=(...x)=>{m(...x),F()}}let D=b?new Array(e.length).fill(hn):hn;const p=m=>{if(!(!(f.flags&1)||!f.dirty&&!m))if(t){const x=f.run();if(r||w||(b?x.some((O,H)=>nt(O,D[H])):nt(x,D))){g&&g();const O=ut;ut=f;try{const H=[x,D===hn?void 0:b&&D[0]===hn?[]:D,y];c?c(t,3,H):t(...H),D=x}finally{ut=O}}}else f.run()};return l&&l(p),f=new wi(u),f.scheduler=o?()=>o(p,!1):p,y=m=>Wl(m,!1,f),g=f.onStop=()=>{const m=Mn.get(f);if(m){if(c)c(m,4);else for(const x of m)x();Mn.delete(f)}},t?s?p(!0):D=f.run():o?o(p.bind(null,!0),!0):f.run(),F.pause=f.pause.bind(f),F.resume=f.resume.bind(f),F.stop=F,F}function Ye(e,t=1/0,n){if(t<=0||!se(e)||e.__v_skip||(n=n||new Set,n.has(e)))return e;if(n.add(e),t--,fe(e))Ye(e.value,t,n);else if(K(e))for(let s=0;s{Ye(s,t,n)});else if(pi(e)){for(const s in e)Ye(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&Ye(e[s],t,n)}return e}/** +* @vue/runtime-core v3.5.12 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function sn(e,t,n,s){try{return s?e(...s):e()}catch(r){$t(r,t,n)}}function He(e,t,n,s){if(q(e)){const r=sn(e,t,n,s);return r&&di(r)&&r.catch(i=>{$t(i,t,n)}),r}if(K(e)){const r=[];for(let i=0;i>>1,r=xe[s],i=zt(r);i=zt(n)?xe.push(e):xe.splice(Gl(t),0,e),e.flags|=1,Bi()}}function Bi(){Pn||(Pn=Di.then(ji))}function As(e){K(e)?Rt.push(...e):Ze&&e.id===-1?Ze.splice(xt+1,0,e):e.flags&1||(Rt.push(e),e.flags|=1),Bi()}function _r(e,t,n=je+1){for(;nzt(n)-zt(s));if(Rt.length=0,Ze){Ze.push(...t);return}for(Ze=t,xt=0;xte.id==null?e.flags&2?-1:1/0:e.id;function ji(e){try{for(je=0;je{s._d&&Nr(-1);const i=Ln(t);let o;try{o=e(...r)}finally{Ln(i),s._d&&Nr(1)}return o};return s._n=!0,s._c=!0,s._d=!0,s}function Ff(e,t){if(he===null)return e;const n=zn(he),s=e.dirs||(e.dirs=[]);for(let r=0;re.__isTeleport,Kt=e=>e&&(e.disabled||e.disabled===""),Xl=e=>e&&(e.defer||e.defer===""),wr=e=>typeof SVGElement<"u"&&e instanceof SVGElement,xr=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,Rs=(e,t)=>{const n=e&&e.to;return ie(n)?t?t(n):null:n},Jl={name:"Teleport",__isTeleport:!0,process(e,t,n,s,r,i,o,l,c,a){const{mc:f,pc:u,pbc:g,o:{insert:y,querySelector:w,createText:b,createComment:U}}=a,F=Kt(t.props);let{shapeFlag:D,children:p,dynamicChildren:m}=t;if(e==null){const x=t.el=b(""),O=t.anchor=b("");y(x,n,s),y(O,n,s);const H=(C,_)=>{D&16&&(r&&r.isCE&&(r.ce._teleportTarget=C),f(p,C,_,r,i,o,l,c))},$=()=>{const C=t.target=Rs(t.props,w),_=Wi(C,t,b,y);C&&(o!=="svg"&&wr(C)?o="svg":o!=="mathml"&&xr(C)&&(o="mathml"),F||(H(C,_),Sn(t,!1)))};F&&(H(n,O),Sn(t,!0)),Xl(t.props)?Ee($,i):$()}else{t.el=e.el,t.targetStart=e.targetStart;const x=t.anchor=e.anchor,O=t.target=e.target,H=t.targetAnchor=e.targetAnchor,$=Kt(e.props),C=$?n:O,_=$?x:H;if(o==="svg"||wr(O)?o="svg":(o==="mathml"||xr(O))&&(o="mathml"),m?(g(e.dynamicChildren,m,C,r,i,o,l),ir(e,t,!0)):c||u(e,t,C,_,r,i,o,l,!1),F)$?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):pn(t,n,x,a,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const I=t.target=Rs(t.props,w);I&&pn(t,I,null,a,0)}else $&&pn(t,O,H,a,1);Sn(t,F)}},remove(e,t,n,{um:s,o:{remove:r}},i){const{shapeFlag:o,children:l,anchor:c,targetStart:a,targetAnchor:f,target:u,props:g}=e;if(u&&(r(a),r(f)),i&&r(c),o&16){const y=i||!Kt(g);for(let w=0;w{e.isMounted=!0}),Qi(()=>{e.isUnmounting=!0}),e}const Oe=[Function,Array],Ki={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Oe,onEnter:Oe,onAfterEnter:Oe,onEnterCancelled:Oe,onBeforeLeave:Oe,onLeave:Oe,onAfterLeave:Oe,onLeaveCancelled:Oe,onBeforeAppear:Oe,onAppear:Oe,onAfterAppear:Oe,onAppearCancelled:Oe},qi=e=>{const t=e.subTree;return t.component?qi(t.component):t},Zl={name:"BaseTransition",props:Ki,setup(e,{slots:t}){const n=ln(),s=Ql();return()=>{const r=t.default&&Xi(t.default(),!0);if(!r||!r.length)return;const i=Gi(r),o=z(e),{mode:l}=o;if(s.isLeaving)return is(i);const c=Er(i);if(!c)return is(i);let a=Os(c,o,s,n,g=>a=g);c.type!==ue&&Qt(c,a);const f=n.subTree,u=f&&Er(f);if(u&&u.type!==ue&&!Ve(c,u)&&qi(n).type!==ue){const g=Os(u,o,s,n);if(Qt(u,g),l==="out-in"&&c.type!==ue)return s.isLeaving=!0,g.afterLeave=()=>{s.isLeaving=!1,n.job.flags&8||n.update(),delete g.afterLeave},is(i);l==="in-out"&&c.type!==ue&&(g.delayLeave=(y,w,b)=>{const U=Yi(s,u);U[String(u.key)]=u,y[et]=()=>{w(),y[et]=void 0,delete a.delayedLeave},a.delayedLeave=b})}return i}}};function Gi(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==ue){t=n;break}}return t}const ec=Zl;function Yi(e,t){const{leavingVNodes:n}=e;let s=n.get(t.type);return s||(s=Object.create(null),n.set(t.type,s)),s}function Os(e,t,n,s,r){const{appear:i,mode:o,persisted:l=!1,onBeforeEnter:c,onEnter:a,onAfterEnter:f,onEnterCancelled:u,onBeforeLeave:g,onLeave:y,onAfterLeave:w,onLeaveCancelled:b,onBeforeAppear:U,onAppear:F,onAfterAppear:D,onAppearCancelled:p}=t,m=String(e.key),x=Yi(n,e),O=(C,_)=>{C&&He(C,s,9,_)},H=(C,_)=>{const I=_[1];O(C,_),K(C)?C.every(E=>E.length<=1)&&I():C.length<=1&&I()},$={mode:o,persisted:l,beforeEnter(C){let _=c;if(!n.isMounted)if(i)_=U||c;else return;C[et]&&C[et](!0);const I=x[m];I&&Ve(e,I)&&I.el[et]&&I.el[et](),O(_,[C])},enter(C){let _=a,I=f,E=u;if(!n.isMounted)if(i)_=F||a,I=D||f,E=p||u;else return;let j=!1;const J=C[gn]=re=>{j||(j=!0,re?O(E,[C]):O(I,[C]),$.delayedLeave&&$.delayedLeave(),C[gn]=void 0)};_?H(_,[C,J]):J()},leave(C,_){const I=String(e.key);if(C[gn]&&C[gn](!0),n.isUnmounting)return _();O(g,[C]);let E=!1;const j=C[et]=J=>{E||(E=!0,_(),J?O(b,[C]):O(w,[C]),C[et]=void 0,x[I]===e&&delete x[I])};x[I]=e,y?H(y,[C,j]):j()},clone(C){const _=Os(C,t,n,s,r);return r&&r(_),_}};return $}function is(e){if(rn(e))return e=st(e),e.children=null,e}function Er(e){if(!rn(e))return Ui(e.type)&&e.children?Gi(e.children):e;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&q(n.default))return n.default()}}function Qt(e,t){e.shapeFlag&6&&e.component?(e.transition=t,Qt(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Xi(e,t=!1,n){let s=[],r=0;for(let i=0;i1)for(let i=0;iFn(w,t&&(K(t)?t[b]:t),n,s,r));return}if(pt(s)&&!r)return;const i=s.shapeFlag&4?zn(s.component):s.el,o=r?null:i,{i:l,r:c}=e,a=t&&t.r,f=l.refs===ee?l.refs={}:l.refs,u=l.setupState,g=z(u),y=u===ee?()=>!1:w=>Q(g,w);if(a!=null&&a!==c&&(ie(a)?(f[a]=null,y(a)&&(u[a]=null)):fe(a)&&(a.value=null)),q(c))sn(c,l,12,[o,f]);else{const w=ie(c),b=fe(c);if(w||b){const U=()=>{if(e.f){const F=w?y(c)?u[c]:f[c]:c.value;r?K(F)&&Us(F,i):K(F)?F.includes(i)||F.push(i):w?(f[c]=[i],y(c)&&(u[c]=f[c])):(c.value=[i],e.k&&(f[e.k]=c.value))}else w?(f[c]=o,y(c)&&(u[c]=o)):b&&(c.value=o,e.k&&(f[e.k]=o))};o?(U.id=-1,Ee(U,n)):U()}}}let Tr=!1;const wt=()=>{Tr||(console.error("Hydration completed but contains mismatches."),Tr=!0)},tc=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",nc=e=>e.namespaceURI.includes("MathML"),mn=e=>{if(e.nodeType===1){if(tc(e))return"svg";if(nc(e))return"mathml"}},Tt=e=>e.nodeType===8;function sc(e){const{mt:t,p:n,o:{patchProp:s,createText:r,nextSibling:i,parentNode:o,remove:l,insert:c,createComment:a}}=e,f=(p,m)=>{if(!m.hasChildNodes()){n(null,p,m),In(),m._vnode=p;return}u(m.firstChild,p,null,null,null),In(),m._vnode=p},u=(p,m,x,O,H,$=!1)=>{$=$||!!m.dynamicChildren;const C=Tt(p)&&p.data==="[",_=()=>b(p,m,x,O,H,C),{type:I,ref:E,shapeFlag:j,patchFlag:J}=m;let re=p.nodeType;m.el=p,J===-2&&($=!1,m.dynamicChildren=null);let B=null;switch(I){case gt:re!==3?m.children===""?(c(m.el=r(""),o(p),p),B=p):B=_():(p.data!==m.children&&(wt(),p.data=m.children),B=i(p));break;case ue:D(p)?(B=i(p),F(m.el=p.content.firstChild,p,x)):re!==8||C?B=_():B=i(p);break;case It:if(C&&(p=i(p),re=p.nodeType),re===1||re===3){B=p;const Y=!m.children.length;for(let V=0;V{$=$||!!m.dynamicChildren;const{type:C,props:_,patchFlag:I,shapeFlag:E,dirs:j,transition:J}=m,re=C==="input"||C==="option";if(re||I!==-1){j&&ke(m,null,x,"created");let B=!1;if(D(p)){B=mo(null,J)&&x&&x.vnode.props&&x.vnode.props.appear;const V=p.content.firstChild;B&&J.beforeEnter(V),F(V,p,x),m.el=p=V}if(E&16&&!(_&&(_.innerHTML||_.textContent))){let V=y(p.firstChild,m,p,x,O,H,$);for(;V;){yn(p,1)||wt();const pe=V;V=V.nextSibling,l(pe)}}else if(E&8){let V=m.children;V[0]===` +`&&(p.tagName==="PRE"||p.tagName==="TEXTAREA")&&(V=V.slice(1)),p.textContent!==V&&(yn(p,0)||wt(),p.textContent=m.children)}if(_){if(re||!$||I&48){const V=p.tagName.includes("-");for(const pe in _)(re&&(pe.endsWith("value")||pe==="indeterminate")||nn(pe)&&!At(pe)||pe[0]==="."||V)&&s(p,pe,null,_[pe],void 0,x)}else if(_.onClick)s(p,"onClick",null,_.onClick,void 0,x);else if(I&4&&ht(_.style))for(const V in _.style)_.style[V]}let Y;(Y=_&&_.onVnodeBeforeMount)&&Me(Y,x,m),j&&ke(m,null,x,"beforeMount"),((Y=_&&_.onVnodeMounted)||j||B)&&xo(()=>{Y&&Me(Y,x,m),B&&J.enter(p),j&&ke(m,null,x,"mounted")},O)}return p.nextSibling},y=(p,m,x,O,H,$,C)=>{C=C||!!m.dynamicChildren;const _=m.children,I=_.length;for(let E=0;E{const{slotScopeIds:C}=m;C&&(H=H?H.concat(C):C);const _=o(p),I=y(i(p),m,_,x,O,H,$);return I&&Tt(I)&&I.data==="]"?i(m.anchor=I):(wt(),c(m.anchor=a("]"),_,I),I)},b=(p,m,x,O,H,$)=>{if(yn(p.parentElement,1)||wt(),m.el=null,$){const I=U(p);for(;;){const E=i(p);if(E&&E!==I)l(E);else break}}const C=i(p),_=o(p);return l(p),n(null,m,_,C,x,O,mn(_),H),C},U=(p,m="[",x="]")=>{let O=0;for(;p;)if(p=i(p),p&&Tt(p)&&(p.data===m&&O++,p.data===x)){if(O===0)return i(p);O--}return p},F=(p,m,x)=>{const O=m.parentNode;O&&O.replaceChild(p,m);let H=x;for(;H;)H.vnode.el===m&&(H.vnode.el=H.subTree.el=p),H=H.parent},D=p=>p.nodeType===1&&p.tagName==="TEMPLATE";return[f,u]}const Sr="data-allow-mismatch",rc={0:"text",1:"children",2:"class",3:"style",4:"attribute"};function yn(e,t){if(t===0||t===1)for(;e&&!e.hasAttribute(Sr);)e=e.parentElement;const n=e&&e.getAttribute(Sr);if(n==null)return!1;if(n==="")return!0;{const s=n.split(",");return t===0&&s.includes("children")?!0:n.split(",").includes(rc[t])}}Vn().requestIdleCallback;Vn().cancelIdleCallback;function ic(e,t){if(Tt(e)&&e.data==="["){let n=1,s=e.nextSibling;for(;s;){if(s.nodeType===1){if(t(s)===!1)break}else if(Tt(s))if(s.data==="]"){if(--n===0)break}else s.data==="["&&n++;s=s.nextSibling}}else t(e)}const pt=e=>!!e.type.__asyncLoader;/*! #__NO_SIDE_EFFECTS__ */function Hf(e){q(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:s,delay:r=200,hydrate:i,timeout:o,suspensible:l=!0,onError:c}=e;let a=null,f,u=0;const g=()=>(u++,a=null,y()),y=()=>{let w;return a||(w=a=t().catch(b=>{if(b=b instanceof Error?b:new Error(String(b)),c)return new Promise((U,F)=>{c(b,()=>U(g()),()=>F(b),u+1)});throw b}).then(b=>w!==a&&a?a:(b&&(b.__esModule||b[Symbol.toStringTag]==="Module")&&(b=b.default),f=b,b)))};return tr({name:"AsyncComponentWrapper",__asyncLoader:y,__asyncHydrate(w,b,U){const F=i?()=>{const D=i(U,p=>ic(w,p));D&&(b.bum||(b.bum=[])).push(D)}:U;f?F():y().then(()=>!b.isUnmounted&&F())},get __asyncResolved(){return f},setup(){const w=de;if(nr(w),f)return()=>os(f,w);const b=p=>{a=null,$t(p,w,13,!s)};if(l&&w.suspense||Nt)return y().then(p=>()=>os(p,w)).catch(p=>(b(p),()=>s?ce(s,{error:p}):null));const U=le(!1),F=le(),D=le(!!r);return r&&setTimeout(()=>{D.value=!1},r),o!=null&&setTimeout(()=>{if(!U.value&&!F.value){const p=new Error(`Async component timed out after ${o}ms.`);b(p),F.value=p}},o),y().then(()=>{U.value=!0,w.parent&&rn(w.parent.vnode)&&w.parent.update()}).catch(p=>{b(p),F.value=p}),()=>{if(U.value&&f)return os(f,w);if(F.value&&s)return ce(s,{error:F.value});if(n&&!D.value)return ce(n)}}})}function os(e,t){const{ref:n,props:s,children:r,ce:i}=t.vnode,o=ce(e,s,r);return o.ref=n,o.ce=i,delete t.vnode.ce,o}const rn=e=>e.type.__isKeepAlive;function oc(e,t){Ji(e,"a",t)}function lc(e,t){Ji(e,"da",t)}function Ji(e,t,n=de){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(Yn(t,s,n),n){let r=n.parent;for(;r&&r.parent;)rn(r.parent.vnode)&&cc(s,t,n,r),r=r.parent}}function cc(e,t,n,s){const r=Yn(t,e,s,!0);on(()=>{Us(s[t],r)},n)}function Yn(e,t,n=de,s=!1){if(n){const r=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{it();const l=cn(n),c=He(t,n,e,o);return l(),ot(),c});return s?r.unshift(i):r.push(i),i}}const Je=e=>(t,n=de)=>{(!Nt||e==="sp")&&Yn(e,(...s)=>t(...s),n)},zi=Je("bm"),vt=Je("m"),ac=Je("bu"),fc=Je("u"),Qi=Je("bum"),on=Je("um"),uc=Je("sp"),dc=Je("rtg"),hc=Je("rtc");function pc(e,t=de){Yn("ec",e,t)}const Zi="components";function $f(e,t){return to(Zi,e,!0,t)||e}const eo=Symbol.for("v-ndc");function Df(e){return ie(e)?to(Zi,e,!1)||e:e||eo}function to(e,t,n=!0,s=!1){const r=he||de;if(r){const i=r.type;{const l=ia(i,!1);if(l&&(l===t||l===Ie(t)||l===kn(Ie(t))))return i}const o=Cr(r[e]||i[e],t)||Cr(r.appContext[e],t);return!o&&s?i:o}}function Cr(e,t){return e&&(e[t]||e[Ie(t)]||e[kn(Ie(t))])}function Bf(e,t,n,s){let r;const i=n,o=K(e);if(o||ie(e)){const l=o&&ht(e);let c=!1;l&&(c=!Pe(e),e=Wn(e)),r=new Array(e.length);for(let a=0,f=e.length;at(l,c,void 0,i));else{const l=Object.keys(e);r=new Array(l.length);for(let c=0,a=l.length;cFt(t)?!(t.type===ue||t.type===be&&!no(t.children)):!0)?e:null}function kf(e,t){const n={};for(const s in e)n[/[A-Z]/.test(s)?`on:${s}`:xn(s)]=e[s];return n}const Ms=e=>e?Ro(e)?zn(e):Ms(e.parent):null,qt=ae(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Ms(e.parent),$root:e=>Ms(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>sr(e),$forceUpdate:e=>e.f||(e.f=()=>{er(e.update)}),$nextTick:e=>e.n||(e.n=Gn.bind(e.proxy)),$watch:e=>$c.bind(e)}),ls=(e,t)=>e!==ee&&!e.__isScriptSetup&&Q(e,t),gc={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:r,props:i,accessCache:o,type:l,appContext:c}=e;let a;if(t[0]!=="$"){const y=o[t];if(y!==void 0)switch(y){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return i[t]}else{if(ls(s,t))return o[t]=1,s[t];if(r!==ee&&Q(r,t))return o[t]=2,r[t];if((a=e.propsOptions[0])&&Q(a,t))return o[t]=3,i[t];if(n!==ee&&Q(n,t))return o[t]=4,n[t];Ps&&(o[t]=0)}}const f=qt[t];let u,g;if(f)return t==="$attrs"&&ye(e.attrs,"get",""),f(e);if((u=l.__cssModules)&&(u=u[t]))return u;if(n!==ee&&Q(n,t))return o[t]=4,n[t];if(g=c.config.globalProperties,Q(g,t))return g[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:i}=e;return ls(r,t)?(r[t]=n,!0):s!==ee&&Q(s,t)?(s[t]=n,!0):Q(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,propsOptions:i}},o){let l;return!!n[o]||e!==ee&&Q(e,o)||ls(t,o)||(l=i[0])&&Q(l,o)||Q(s,o)||Q(qt,o)||Q(r.config.globalProperties,o)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:Q(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Vf(){return mc().slots}function mc(){const e=ln();return e.setupContext||(e.setupContext=Mo(e))}function Ar(e){return K(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let Ps=!0;function yc(e){const t=sr(e),n=e.proxy,s=e.ctx;Ps=!1,t.beforeCreate&&Rr(t.beforeCreate,e,"bc");const{data:r,computed:i,methods:o,watch:l,provide:c,inject:a,created:f,beforeMount:u,mounted:g,beforeUpdate:y,updated:w,activated:b,deactivated:U,beforeDestroy:F,beforeUnmount:D,destroyed:p,unmounted:m,render:x,renderTracked:O,renderTriggered:H,errorCaptured:$,serverPrefetch:C,expose:_,inheritAttrs:I,components:E,directives:j,filters:J}=t;if(a&&vc(a,s,null),o)for(const Y in o){const V=o[Y];q(V)&&(s[Y]=V.bind(n))}if(r){const Y=r.call(n,n);se(Y)&&(e.data=Kn(Y))}if(Ps=!0,i)for(const Y in i){const V=i[Y],pe=q(V)?V.bind(n,n):q(V.get)?V.get.bind(n,n):Ue,an=!q(V)&&q(V.set)?V.set.bind(n):Ue,lt=oe({get:pe,set:an});Object.defineProperty(s,Y,{enumerable:!0,configurable:!0,get:()=>lt.value,set:De=>lt.value=De})}if(l)for(const Y in l)so(l[Y],s,n,Y);if(c){const Y=q(c)?c.call(n):c;Reflect.ownKeys(Y).forEach(V=>{Tc(V,Y[V])})}f&&Rr(f,e,"c");function B(Y,V){K(V)?V.forEach(pe=>Y(pe.bind(n))):V&&Y(V.bind(n))}if(B(zi,u),B(vt,g),B(ac,y),B(fc,w),B(oc,b),B(lc,U),B(pc,$),B(hc,O),B(dc,H),B(Qi,D),B(on,m),B(uc,C),K(_))if(_.length){const Y=e.exposed||(e.exposed={});_.forEach(V=>{Object.defineProperty(Y,V,{get:()=>n[V],set:pe=>n[V]=pe})})}else e.exposed||(e.exposed={});x&&e.render===Ue&&(e.render=x),I!=null&&(e.inheritAttrs=I),E&&(e.components=E),j&&(e.directives=j),C&&nr(e)}function vc(e,t,n=Ue){K(e)&&(e=Is(e));for(const s in e){const r=e[s];let i;se(r)?"default"in r?i=Mt(r.from||s,r.default,!0):i=Mt(r.from||s):i=Mt(r),fe(i)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):t[s]=i}}function Rr(e,t,n){He(K(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function so(e,t,n,s){let r=s.includes(".")?vo(n,s):()=>n[s];if(ie(e)){const i=t[e];q(i)&&Ne(r,i)}else if(q(e))Ne(r,e.bind(n));else if(se(e))if(K(e))e.forEach(i=>so(i,t,n,s));else{const i=q(e.handler)?e.handler.bind(n):t[e.handler];q(i)&&Ne(r,i,e)}}function sr(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:i,config:{optionMergeStrategies:o}}=e.appContext,l=i.get(t);let c;return l?c=l:!r.length&&!n&&!s?c=t:(c={},r.length&&r.forEach(a=>Nn(c,a,o,!0)),Nn(c,t,o)),se(t)&&i.set(t,c),c}function Nn(e,t,n,s=!1){const{mixins:r,extends:i}=t;i&&Nn(e,i,n,!0),r&&r.forEach(o=>Nn(e,o,n,!0));for(const o in t)if(!(s&&o==="expose")){const l=bc[o]||n&&n[o];e[o]=l?l(e[o],t[o]):t[o]}return e}const bc={data:Or,props:Mr,emits:Mr,methods:Vt,computed:Vt,beforeCreate:_e,created:_e,beforeMount:_e,mounted:_e,beforeUpdate:_e,updated:_e,beforeDestroy:_e,beforeUnmount:_e,destroyed:_e,unmounted:_e,activated:_e,deactivated:_e,errorCaptured:_e,serverPrefetch:_e,components:Vt,directives:Vt,watch:wc,provide:Or,inject:_c};function Or(e,t){return t?e?function(){return ae(q(e)?e.call(this,this):e,q(t)?t.call(this,this):t)}:t:e}function _c(e,t){return Vt(Is(e),Is(t))}function Is(e){if(K(e)){const t={};for(let n=0;n1)return n&&q(t)?t.call(s&&s.proxy):t}}const io={},oo=()=>Object.create(io),lo=e=>Object.getPrototypeOf(e)===io;function Sc(e,t,n,s=!1){const r={},i=oo();e.propsDefaults=Object.create(null),co(e,t,r,i);for(const o in e.propsOptions[0])o in r||(r[o]=void 0);n?e.props=s?r:Ll(r):e.type.props?e.props=r:e.props=i,e.attrs=i}function Cc(e,t,n,s){const{props:r,attrs:i,vnode:{patchFlag:o}}=e,l=z(r),[c]=e.propsOptions;let a=!1;if((s||o>0)&&!(o&16)){if(o&8){const f=e.vnode.dynamicProps;for(let u=0;u{c=!0;const[g,y]=ao(u,t,!0);ae(o,g),y&&l.push(...y)};!n&&t.mixins.length&&t.mixins.forEach(f),e.extends&&f(e.extends),e.mixins&&e.mixins.forEach(f)}if(!i&&!c)return se(e)&&s.set(e,St),St;if(K(i))for(let f=0;fe[0]==="_"||e==="$stable",rr=e=>K(e)?e.map(Re):[Re(e)],Rc=(e,t,n)=>{if(t._n)return t;const s=Yl((...r)=>rr(t(...r)),n);return s._c=!1,s},uo=(e,t,n)=>{const s=e._ctx;for(const r in e){if(fo(r))continue;const i=e[r];if(q(i))t[r]=Rc(r,i,s);else if(i!=null){const o=rr(i);t[r]=()=>o}}},ho=(e,t)=>{const n=rr(t);e.slots.default=()=>n},po=(e,t,n)=>{for(const s in t)(n||s!=="_")&&(e[s]=t[s])},Oc=(e,t,n)=>{const s=e.slots=oo();if(e.vnode.shapeFlag&32){const r=t._;r?(po(s,t,n),n&&gi(s,"_",r,!0)):uo(t,s)}else t&&ho(e,t)},Mc=(e,t,n)=>{const{vnode:s,slots:r}=e;let i=!0,o=ee;if(s.shapeFlag&32){const l=t._;l?n&&l===1?i=!1:po(r,t,n):(i=!t.$stable,uo(t,r)),o=t}else t&&(ho(e,t),o={default:1});if(i)for(const l in r)!fo(l)&&o[l]==null&&delete r[l]},Ee=xo;function Pc(e){return go(e)}function Ic(e){return go(e,sc)}function go(e,t){const n=Vn();n.__VUE__=!0;const{insert:s,remove:r,patchProp:i,createElement:o,createText:l,createComment:c,setText:a,setElementText:f,parentNode:u,nextSibling:g,setScopeId:y=Ue,insertStaticContent:w}=e,b=(d,h,v,A=null,T=null,S=null,L=void 0,P=null,M=!!h.dynamicChildren)=>{if(d===h)return;d&&!Ve(d,h)&&(A=fn(d),De(d,T,S,!0),d=null),h.patchFlag===-2&&(M=!1,h.dynamicChildren=null);const{type:R,ref:W,shapeFlag:N}=h;switch(R){case gt:U(d,h,v,A);break;case ue:F(d,h,v,A);break;case It:d==null&&D(h,v,A,L);break;case be:E(d,h,v,A,T,S,L,P,M);break;default:N&1?x(d,h,v,A,T,S,L,P,M):N&6?j(d,h,v,A,T,S,L,P,M):(N&64||N&128)&&R.process(d,h,v,A,T,S,L,P,M,bt)}W!=null&&T&&Fn(W,d&&d.ref,S,h||d,!h)},U=(d,h,v,A)=>{if(d==null)s(h.el=l(h.children),v,A);else{const T=h.el=d.el;h.children!==d.children&&a(T,h.children)}},F=(d,h,v,A)=>{d==null?s(h.el=c(h.children||""),v,A):h.el=d.el},D=(d,h,v,A)=>{[d.el,d.anchor]=w(d.children,h,v,A,d.el,d.anchor)},p=({el:d,anchor:h},v,A)=>{let T;for(;d&&d!==h;)T=g(d),s(d,v,A),d=T;s(h,v,A)},m=({el:d,anchor:h})=>{let v;for(;d&&d!==h;)v=g(d),r(d),d=v;r(h)},x=(d,h,v,A,T,S,L,P,M)=>{h.type==="svg"?L="svg":h.type==="math"&&(L="mathml"),d==null?O(h,v,A,T,S,L,P,M):C(d,h,T,S,L,P,M)},O=(d,h,v,A,T,S,L,P)=>{let M,R;const{props:W,shapeFlag:N,transition:k,dirs:G}=d;if(M=d.el=o(d.type,S,W&&W.is,W),N&8?f(M,d.children):N&16&&$(d.children,M,null,A,T,cs(d,S),L,P),G&&ke(d,null,A,"created"),H(M,d,d.scopeId,L,A),W){for(const te in W)te!=="value"&&!At(te)&&i(M,te,null,W[te],S,A);"value"in W&&i(M,"value",null,W.value,S),(R=W.onVnodeBeforeMount)&&Me(R,A,d)}G&&ke(d,null,A,"beforeMount");const X=mo(T,k);X&&k.beforeEnter(M),s(M,h,v),((R=W&&W.onVnodeMounted)||X||G)&&Ee(()=>{R&&Me(R,A,d),X&&k.enter(M),G&&ke(d,null,A,"mounted")},T)},H=(d,h,v,A,T)=>{if(v&&y(d,v),A)for(let S=0;S{for(let R=M;R{const P=h.el=d.el;let{patchFlag:M,dynamicChildren:R,dirs:W}=h;M|=d.patchFlag&16;const N=d.props||ee,k=h.props||ee;let G;if(v&&ct(v,!1),(G=k.onVnodeBeforeUpdate)&&Me(G,v,h,d),W&&ke(h,d,v,"beforeUpdate"),v&&ct(v,!0),(N.innerHTML&&k.innerHTML==null||N.textContent&&k.textContent==null)&&f(P,""),R?_(d.dynamicChildren,R,P,v,A,cs(h,T),S):L||V(d,h,P,null,v,A,cs(h,T),S,!1),M>0){if(M&16)I(P,N,k,v,T);else if(M&2&&N.class!==k.class&&i(P,"class",null,k.class,T),M&4&&i(P,"style",N.style,k.style,T),M&8){const X=h.dynamicProps;for(let te=0;te{G&&Me(G,v,h,d),W&&ke(h,d,v,"updated")},A)},_=(d,h,v,A,T,S,L)=>{for(let P=0;P{if(h!==v){if(h!==ee)for(const S in h)!At(S)&&!(S in v)&&i(d,S,h[S],null,T,A);for(const S in v){if(At(S))continue;const L=v[S],P=h[S];L!==P&&S!=="value"&&i(d,S,P,L,T,A)}"value"in v&&i(d,"value",h.value,v.value,T)}},E=(d,h,v,A,T,S,L,P,M)=>{const R=h.el=d?d.el:l(""),W=h.anchor=d?d.anchor:l("");let{patchFlag:N,dynamicChildren:k,slotScopeIds:G}=h;G&&(P=P?P.concat(G):G),d==null?(s(R,v,A),s(W,v,A),$(h.children||[],v,W,T,S,L,P,M)):N>0&&N&64&&k&&d.dynamicChildren?(_(d.dynamicChildren,k,v,T,S,L,P),(h.key!=null||T&&h===T.subTree)&&ir(d,h,!0)):V(d,h,v,W,T,S,L,P,M)},j=(d,h,v,A,T,S,L,P,M)=>{h.slotScopeIds=P,d==null?h.shapeFlag&512?T.ctx.activate(h,v,A,L,M):J(h,v,A,T,S,L,M):re(d,h,M)},J=(d,h,v,A,T,S,L)=>{const P=d.component=ta(d,A,T);if(rn(d)&&(P.ctx.renderer=bt),na(P,!1,L),P.asyncDep){if(T&&T.registerDep(P,B,L),!d.el){const M=P.subTree=ce(ue);F(null,M,h,v)}}else B(P,d,h,v,T,S,L)},re=(d,h,v)=>{const A=h.component=d.component;if(Uc(d,h,v))if(A.asyncDep&&!A.asyncResolved){Y(A,h,v);return}else A.next=h,A.update();else h.el=d.el,A.vnode=h},B=(d,h,v,A,T,S,L)=>{const P=()=>{if(d.isMounted){let{next:N,bu:k,u:G,parent:X,vnode:te}=d;{const Ce=yo(d);if(Ce){N&&(N.el=te.el,Y(d,N,L)),Ce.asyncDep.then(()=>{d.isUnmounted||P()});return}}let Z=N,Se;ct(d,!1),N?(N.el=te.el,Y(d,N,L)):N=te,k&&En(k),(Se=N.props&&N.props.onVnodeBeforeUpdate)&&Me(Se,X,N,te),ct(d,!0);const ge=as(d),Le=d.subTree;d.subTree=ge,b(Le,ge,u(Le.el),fn(Le),d,T,S),N.el=ge.el,Z===null&&lr(d,ge.el),G&&Ee(G,T),(Se=N.props&&N.props.onVnodeUpdated)&&Ee(()=>Me(Se,X,N,te),T)}else{let N;const{el:k,props:G}=h,{bm:X,m:te,parent:Z,root:Se,type:ge}=d,Le=pt(h);if(ct(d,!1),X&&En(X),!Le&&(N=G&&G.onVnodeBeforeMount)&&Me(N,Z,h),ct(d,!0),k&&es){const Ce=()=>{d.subTree=as(d),es(k,d.subTree,d,T,null)};Le&&ge.__asyncHydrate?ge.__asyncHydrate(k,d,Ce):Ce()}else{Se.ce&&Se.ce._injectChildStyle(ge);const Ce=d.subTree=as(d);b(null,Ce,v,A,d,T,S),h.el=Ce.el}if(te&&Ee(te,T),!Le&&(N=G&&G.onVnodeMounted)){const Ce=h;Ee(()=>Me(N,Z,Ce),T)}(h.shapeFlag&256||Z&&pt(Z.vnode)&&Z.vnode.shapeFlag&256)&&d.a&&Ee(d.a,T),d.isMounted=!0,h=v=A=null}};d.scope.on();const M=d.effect=new wi(P);d.scope.off();const R=d.update=M.run.bind(M),W=d.job=M.runIfDirty.bind(M);W.i=d,W.id=d.uid,M.scheduler=()=>er(W),ct(d,!0),R()},Y=(d,h,v)=>{h.component=d;const A=d.vnode.props;d.vnode=h,d.next=null,Cc(d,h.props,A,v),Mc(d,h.children,v),it(),_r(d),ot()},V=(d,h,v,A,T,S,L,P,M=!1)=>{const R=d&&d.children,W=d?d.shapeFlag:0,N=h.children,{patchFlag:k,shapeFlag:G}=h;if(k>0){if(k&128){an(R,N,v,A,T,S,L,P,M);return}else if(k&256){pe(R,N,v,A,T,S,L,P,M);return}}G&8?(W&16&&Dt(R,T,S),N!==R&&f(v,N)):W&16?G&16?an(R,N,v,A,T,S,L,P,M):Dt(R,T,S,!0):(W&8&&f(v,""),G&16&&$(N,v,A,T,S,L,P,M))},pe=(d,h,v,A,T,S,L,P,M)=>{d=d||St,h=h||St;const R=d.length,W=h.length,N=Math.min(R,W);let k;for(k=0;kW?Dt(d,T,S,!0,!1,N):$(h,v,A,T,S,L,P,M,N)},an=(d,h,v,A,T,S,L,P,M)=>{let R=0;const W=h.length;let N=d.length-1,k=W-1;for(;R<=N&&R<=k;){const G=d[R],X=h[R]=M?tt(h[R]):Re(h[R]);if(Ve(G,X))b(G,X,v,null,T,S,L,P,M);else break;R++}for(;R<=N&&R<=k;){const G=d[N],X=h[k]=M?tt(h[k]):Re(h[k]);if(Ve(G,X))b(G,X,v,null,T,S,L,P,M);else break;N--,k--}if(R>N){if(R<=k){const G=k+1,X=Gk)for(;R<=N;)De(d[R],T,S,!0),R++;else{const G=R,X=R,te=new Map;for(R=X;R<=k;R++){const Ae=h[R]=M?tt(h[R]):Re(h[R]);Ae.key!=null&&te.set(Ae.key,R)}let Z,Se=0;const ge=k-X+1;let Le=!1,Ce=0;const Bt=new Array(ge);for(R=0;R=ge){De(Ae,T,S,!0);continue}let Be;if(Ae.key!=null)Be=te.get(Ae.key);else for(Z=X;Z<=k;Z++)if(Bt[Z-X]===0&&Ve(Ae,h[Z])){Be=Z;break}Be===void 0?De(Ae,T,S,!0):(Bt[Be-X]=R+1,Be>=Ce?Ce=Be:Le=!0,b(Ae,h[Be],v,null,T,S,L,P,M),Se++)}const gr=Le?Lc(Bt):St;for(Z=gr.length-1,R=ge-1;R>=0;R--){const Ae=X+R,Be=h[Ae],mr=Ae+1{const{el:S,type:L,transition:P,children:M,shapeFlag:R}=d;if(R&6){lt(d.component.subTree,h,v,A);return}if(R&128){d.suspense.move(h,v,A);return}if(R&64){L.move(d,h,v,bt);return}if(L===be){s(S,h,v);for(let N=0;NP.enter(S),T);else{const{leave:N,delayLeave:k,afterLeave:G}=P,X=()=>s(S,h,v),te=()=>{N(S,()=>{X(),G&&G()})};k?k(S,X,te):te()}else s(S,h,v)},De=(d,h,v,A=!1,T=!1)=>{const{type:S,props:L,ref:P,children:M,dynamicChildren:R,shapeFlag:W,patchFlag:N,dirs:k,cacheIndex:G}=d;if(N===-2&&(T=!1),P!=null&&Fn(P,null,v,d,!0),G!=null&&(h.renderCache[G]=void 0),W&256){h.ctx.deactivate(d);return}const X=W&1&&k,te=!pt(d);let Z;if(te&&(Z=L&&L.onVnodeBeforeUnmount)&&Me(Z,h,d),W&6)Zo(d.component,v,A);else{if(W&128){d.suspense.unmount(v,A);return}X&&ke(d,null,h,"beforeUnmount"),W&64?d.type.remove(d,h,v,bt,A):R&&!R.hasOnce&&(S!==be||N>0&&N&64)?Dt(R,h,v,!1,!0):(S===be&&N&384||!T&&W&16)&&Dt(M,h,v),A&&hr(d)}(te&&(Z=L&&L.onVnodeUnmounted)||X)&&Ee(()=>{Z&&Me(Z,h,d),X&&ke(d,null,h,"unmounted")},v)},hr=d=>{const{type:h,el:v,anchor:A,transition:T}=d;if(h===be){Qo(v,A);return}if(h===It){m(d);return}const S=()=>{r(v),T&&!T.persisted&&T.afterLeave&&T.afterLeave()};if(d.shapeFlag&1&&T&&!T.persisted){const{leave:L,delayLeave:P}=T,M=()=>L(v,S);P?P(d.el,S,M):M()}else S()},Qo=(d,h)=>{let v;for(;d!==h;)v=g(d),r(d),d=v;r(h)},Zo=(d,h,v)=>{const{bum:A,scope:T,job:S,subTree:L,um:P,m:M,a:R}=d;Ir(M),Ir(R),A&&En(A),T.stop(),S&&(S.flags|=8,De(L,d,h,v)),P&&Ee(P,h),Ee(()=>{d.isUnmounted=!0},h),h&&h.pendingBranch&&!h.isUnmounted&&d.asyncDep&&!d.asyncResolved&&d.suspenseId===h.pendingId&&(h.deps--,h.deps===0&&h.resolve())},Dt=(d,h,v,A=!1,T=!1,S=0)=>{for(let L=S;L{if(d.shapeFlag&6)return fn(d.component.subTree);if(d.shapeFlag&128)return d.suspense.next();const h=g(d.anchor||d.el),v=h&&h[Vi];return v?g(v):h};let Qn=!1;const pr=(d,h,v)=>{d==null?h._vnode&&De(h._vnode,null,null,!0):b(h._vnode||null,d,h,null,null,null,v),h._vnode=d,Qn||(Qn=!0,_r(),In(),Qn=!1)},bt={p:b,um:De,m:lt,r:hr,mt:J,mc:$,pc:V,pbc:_,n:fn,o:e};let Zn,es;return t&&([Zn,es]=t(bt)),{render:pr,hydrate:Zn,createApp:Ec(pr,Zn)}}function cs({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function ct({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function mo(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function ir(e,t,n=!1){const s=e.children,r=t.children;if(K(s)&&K(r))for(let i=0;i>1,e[n[l]]0&&(t[s]=n[i-1]),n[i]=s)}}for(i=n.length,o=n[i-1];i-- >0;)n[i]=o,o=t[o];return n}function yo(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:yo(t)}function Ir(e){if(e)for(let t=0;tMt(Fc);function or(e,t){return Xn(e,null,t)}function Hc(e,t){return Xn(e,null,{flush:"post"})}function Ne(e,t,n){return Xn(e,t,n)}function Xn(e,t,n=ee){const{immediate:s,deep:r,flush:i,once:o}=n,l=ae({},n),c=t&&s||!t&&i!=="post";let a;if(Nt){if(i==="sync"){const y=Nc();a=y.__watcherHandles||(y.__watcherHandles=[])}else if(!c){const y=()=>{};return y.stop=Ue,y.resume=Ue,y.pause=Ue,y}}const f=de;l.call=(y,w,b)=>He(y,f,w,b);let u=!1;i==="post"?l.scheduler=y=>{Ee(y,f&&f.suspense)}:i!=="sync"&&(u=!0,l.scheduler=(y,w)=>{w?y():er(y)}),l.augmentJob=y=>{t&&(y.flags|=4),u&&(y.flags|=2,f&&(y.id=f.uid,y.i=f))};const g=Kl(e,t,l);return Nt&&(a?a.push(g):c&&g()),g}function $c(e,t,n){const s=this.proxy,r=ie(e)?e.includes(".")?vo(s,e):()=>s[e]:e.bind(s,s);let i;q(t)?i=t:(i=t.handler,n=t);const o=cn(this),l=Xn(r,i.bind(s),n);return o(),l}function vo(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;rt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Ie(t)}Modifiers`]||e[`${rt(t)}Modifiers`];function Bc(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||ee;let r=n;const i=t.startsWith("update:"),o=i&&Dc(s,t.slice(7));o&&(o.trim&&(r=n.map(f=>ie(f)?f.trim():f)),o.number&&(r=n.map(xs)));let l,c=s[l=xn(t)]||s[l=xn(Ie(t))];!c&&i&&(c=s[l=xn(rt(t))]),c&&He(c,e,6,r);const a=s[l+"Once"];if(a){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,He(a,e,6,r)}}function bo(e,t,n=!1){const s=t.emitsCache,r=s.get(e);if(r!==void 0)return r;const i=e.emits;let o={},l=!1;if(!q(e)){const c=a=>{const f=bo(a,t,!0);f&&(l=!0,ae(o,f))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!i&&!l?(se(e)&&s.set(e,null),null):(K(i)?i.forEach(c=>o[c]=null):ae(o,i),se(e)&&s.set(e,o),o)}function Jn(e,t){return!e||!nn(t)?!1:(t=t.slice(2).replace(/Once$/,""),Q(e,t[0].toLowerCase()+t.slice(1))||Q(e,rt(t))||Q(e,t))}function as(e){const{type:t,vnode:n,proxy:s,withProxy:r,propsOptions:[i],slots:o,attrs:l,emit:c,render:a,renderCache:f,props:u,data:g,setupState:y,ctx:w,inheritAttrs:b}=e,U=Ln(e);let F,D;try{if(n.shapeFlag&4){const m=r||s,x=m;F=Re(a.call(x,m,f,u,y,g,w)),D=l}else{const m=t;F=Re(m.length>1?m(u,{attrs:l,slots:o,emit:c}):m(u,null)),D=t.props?l:kc(l)}}catch(m){Gt.length=0,$t(m,e,1),F=ce(ue)}let p=F;if(D&&b!==!1){const m=Object.keys(D),{shapeFlag:x}=p;m.length&&x&7&&(i&&m.some(Vs)&&(D=Vc(D,i)),p=st(p,D,!1,!0))}return n.dirs&&(p=st(p,null,!1,!0),p.dirs=p.dirs?p.dirs.concat(n.dirs):n.dirs),n.transition&&Qt(p,n.transition),F=p,Ln(U),F}function jc(e,t=!0){let n;for(let s=0;s{let t;for(const n in e)(n==="class"||n==="style"||nn(n))&&((t||(t={}))[n]=e[n]);return t},Vc=(e,t)=>{const n={};for(const s in e)(!Vs(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function Uc(e,t,n){const{props:s,children:r,component:i}=e,{props:o,children:l,patchFlag:c}=t,a=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return s?Lr(s,o,a):!!o;if(c&8){const f=t.dynamicProps;for(let u=0;ue.__isSuspense;let Fs=0;const Wc={name:"Suspense",__isSuspense:!0,process(e,t,n,s,r,i,o,l,c,a){if(e==null)Kc(t,n,s,r,i,o,l,c,a);else{if(i&&i.deps>0&&!e.suspense.isInFallback){t.suspense=e.suspense,t.suspense.vnode=t,t.el=e.el;return}qc(e,t,n,s,r,o,l,c,a)}},hydrate:Gc,normalize:Yc},Uf=Wc;function Zt(e,t){const n=e.props&&e.props[t];q(n)&&n()}function Kc(e,t,n,s,r,i,o,l,c){const{p:a,o:{createElement:f}}=c,u=f("div"),g=e.suspense=wo(e,r,s,t,u,n,i,o,l,c);a(null,g.pendingBranch=e.ssContent,u,null,s,g,i,o),g.deps>0?(Zt(e,"onPending"),Zt(e,"onFallback"),a(null,e.ssFallback,t,n,s,null,i,o),Pt(g,e.ssFallback)):g.resolve(!1,!0)}function qc(e,t,n,s,r,i,o,l,{p:c,um:a,o:{createElement:f}}){const u=t.suspense=e.suspense;u.vnode=t,t.el=e.el;const g=t.ssContent,y=t.ssFallback,{activeBranch:w,pendingBranch:b,isInFallback:U,isHydrating:F}=u;if(b)u.pendingBranch=g,Ve(g,b)?(c(b,g,u.hiddenContainer,null,r,u,i,o,l),u.deps<=0?u.resolve():U&&(F||(c(w,y,n,s,r,null,i,o,l),Pt(u,y)))):(u.pendingId=Fs++,F?(u.isHydrating=!1,u.activeBranch=b):a(b,r,u),u.deps=0,u.effects.length=0,u.hiddenContainer=f("div"),U?(c(null,g,u.hiddenContainer,null,r,u,i,o,l),u.deps<=0?u.resolve():(c(w,y,n,s,r,null,i,o,l),Pt(u,y))):w&&Ve(g,w)?(c(w,g,n,s,r,u,i,o,l),u.resolve(!0)):(c(null,g,u.hiddenContainer,null,r,u,i,o,l),u.deps<=0&&u.resolve()));else if(w&&Ve(g,w))c(w,g,n,s,r,u,i,o,l),Pt(u,g);else if(Zt(t,"onPending"),u.pendingBranch=g,g.shapeFlag&512?u.pendingId=g.component.suspenseId:u.pendingId=Fs++,c(null,g,u.hiddenContainer,null,r,u,i,o,l),u.deps<=0)u.resolve();else{const{timeout:D,pendingId:p}=u;D>0?setTimeout(()=>{u.pendingId===p&&u.fallback(y)},D):D===0&&u.fallback(y)}}function wo(e,t,n,s,r,i,o,l,c,a,f=!1){const{p:u,m:g,um:y,n:w,o:{parentNode:b,remove:U}}=a;let F;const D=Xc(e);D&&t&&t.pendingBranch&&(F=t.pendingId,t.deps++);const p=e.props?mi(e.props.timeout):void 0,m=i,x={vnode:e,parent:t,parentComponent:n,namespace:o,container:s,hiddenContainer:r,deps:0,pendingId:Fs++,timeout:typeof p=="number"?p:-1,activeBranch:null,pendingBranch:null,isInFallback:!f,isHydrating:f,isUnmounted:!1,effects:[],resolve(O=!1,H=!1){const{vnode:$,activeBranch:C,pendingBranch:_,pendingId:I,effects:E,parentComponent:j,container:J}=x;let re=!1;x.isHydrating?x.isHydrating=!1:O||(re=C&&_.transition&&_.transition.mode==="out-in",re&&(C.transition.afterLeave=()=>{I===x.pendingId&&(g(_,J,i===m?w(C):i,0),As(E))}),C&&(b(C.el)===J&&(i=w(C)),y(C,j,x,!0)),re||g(_,J,i,0)),Pt(x,_),x.pendingBranch=null,x.isInFallback=!1;let B=x.parent,Y=!1;for(;B;){if(B.pendingBranch){B.effects.push(...E),Y=!0;break}B=B.parent}!Y&&!re&&As(E),x.effects=[],D&&t&&t.pendingBranch&&F===t.pendingId&&(t.deps--,t.deps===0&&!H&&t.resolve()),Zt($,"onResolve")},fallback(O){if(!x.pendingBranch)return;const{vnode:H,activeBranch:$,parentComponent:C,container:_,namespace:I}=x;Zt(H,"onFallback");const E=w($),j=()=>{x.isInFallback&&(u(null,O,_,E,C,null,I,l,c),Pt(x,O))},J=O.transition&&O.transition.mode==="out-in";J&&($.transition.afterLeave=j),x.isInFallback=!0,y($,C,null,!0),J||j()},move(O,H,$){x.activeBranch&&g(x.activeBranch,O,H,$),x.container=O},next(){return x.activeBranch&&w(x.activeBranch)},registerDep(O,H,$){const C=!!x.pendingBranch;C&&x.deps++;const _=O.vnode.el;O.asyncDep.catch(I=>{$t(I,O,0)}).then(I=>{if(O.isUnmounted||x.isUnmounted||x.pendingId!==O.suspenseId)return;O.asyncResolved=!0;const{vnode:E}=O;$s(O,I,!1),_&&(E.el=_);const j=!_&&O.subTree.el;H(O,E,b(_||O.subTree.el),_?null:w(O.subTree),x,o,$),j&&U(j),lr(O,E.el),C&&--x.deps===0&&x.resolve()})},unmount(O,H){x.isUnmounted=!0,x.activeBranch&&y(x.activeBranch,n,O,H),x.pendingBranch&&y(x.pendingBranch,n,O,H)}};return x}function Gc(e,t,n,s,r,i,o,l,c){const a=t.suspense=wo(t,s,n,e.parentNode,document.createElement("div"),null,r,i,o,l,!0),f=c(e,a.pendingBranch=t.ssContent,n,a,i,o);return a.deps===0&&a.resolve(!1,!0),f}function Yc(e){const{shapeFlag:t,children:n}=e,s=t&32;e.ssContent=Fr(s?n.default:n),e.ssFallback=s?Fr(n.fallback):ce(ue)}function Fr(e){let t;if(q(e)){const n=Lt&&e._c;n&&(e._d=!1,Hn()),e=e(),n&&(e._d=!0,t=Te,Eo())}return K(e)&&(e=jc(e)),e=Re(e),t&&!e.dynamicChildren&&(e.dynamicChildren=t.filter(n=>n!==e)),e}function xo(e,t){t&&t.pendingBranch?K(e)?t.effects.push(...e):t.effects.push(e):As(e)}function Pt(e,t){e.activeBranch=t;const{vnode:n,parentComponent:s}=e;let r=t.el;for(;!r&&t.component;)t=t.component.subTree,r=t.el;n.el=r,s&&s.subTree===n&&(s.vnode.el=r,lr(s,r))}function Xc(e){const t=e.props&&e.props.suspensible;return t!=null&&t!==!1}const be=Symbol.for("v-fgt"),gt=Symbol.for("v-txt"),ue=Symbol.for("v-cmt"),It=Symbol.for("v-stc"),Gt=[];let Te=null;function Hn(e=!1){Gt.push(Te=e?null:[])}function Eo(){Gt.pop(),Te=Gt[Gt.length-1]||null}let Lt=1;function Nr(e){Lt+=e,e<0&&Te&&(Te.hasOnce=!0)}function To(e){return e.dynamicChildren=Lt>0?Te||St:null,Eo(),Lt>0&&Te&&Te.push(e),e}function Wf(e,t,n,s,r,i){return To(Co(e,t,n,s,r,i,!0))}function Ns(e,t,n,s,r){return To(ce(e,t,n,s,r,!0))}function Ft(e){return e?e.__v_isVNode===!0:!1}function Ve(e,t){return e.type===t.type&&e.key===t.key}const So=({key:e})=>e??null,Cn=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?ie(e)||fe(e)||q(e)?{i:he,r:e,k:t,f:!!n}:e:null);function Co(e,t=null,n=null,s=0,r=null,i=e===be?0:1,o=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&So(t),ref:t&&Cn(t),scopeId:ki,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:he};return l?(cr(c,n),i&128&&e.normalize(c)):n&&(c.shapeFlag|=ie(n)?8:16),Lt>0&&!o&&Te&&(c.patchFlag>0||i&6)&&c.patchFlag!==32&&Te.push(c),c}const ce=Jc;function Jc(e,t=null,n=null,s=0,r=null,i=!1){if((!e||e===eo)&&(e=ue),Ft(e)){const l=st(e,t,!0);return n&&cr(l,n),Lt>0&&!i&&Te&&(l.shapeFlag&6?Te[Te.indexOf(e)]=l:Te.push(l)),l.patchFlag=-2,l}if(oa(e)&&(e=e.__vccOpts),t){t=zc(t);let{class:l,style:c}=t;l&&!ie(l)&&(t.class=qs(l)),se(c)&&(Qs(c)&&!K(c)&&(c=ae({},c)),t.style=Ks(c))}const o=ie(e)?1:_o(e)?128:Ui(e)?64:se(e)?4:q(e)?2:0;return Co(e,t,n,s,r,o,i,!0)}function zc(e){return e?Qs(e)||lo(e)?ae({},e):e:null}function st(e,t,n=!1,s=!1){const{props:r,ref:i,patchFlag:o,children:l,transition:c}=e,a=t?Qc(r||{},t):r,f={__v_isVNode:!0,__v_skip:!0,type:e.type,props:a,key:a&&So(a),ref:t&&t.ref?n&&i?K(i)?i.concat(Cn(t)):[i,Cn(t)]:Cn(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==be?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&st(e.ssContent),ssFallback:e.ssFallback&&st(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&s&&Qt(f,c.clone(f)),f}function Ao(e=" ",t=0){return ce(gt,null,e,t)}function Kf(e,t){const n=ce(It,null,e);return n.staticCount=t,n}function qf(e="",t=!1){return t?(Hn(),Ns(ue,null,e)):ce(ue,null,e)}function Re(e){return e==null||typeof e=="boolean"?ce(ue):K(e)?ce(be,null,e.slice()):Ft(e)?tt(e):ce(gt,null,String(e))}function tt(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:st(e)}function cr(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(K(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),cr(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!lo(t)?t._ctx=he:r===3&&he&&(he.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else q(t)?(t={default:t,_ctx:he},n=32):(t=String(t),s&64?(n=16,t=[Ao(t)]):n=8);e.children=t,e.shapeFlag|=n}function Qc(...e){const t={};for(let n=0;nde||he;let $n,Hs;{const e=Vn(),t=(n,s)=>{let r;return(r=e[n])||(r=e[n]=[]),r.push(s),i=>{r.length>1?r.forEach(o=>o(i)):r[0](i)}};$n=t("__VUE_INSTANCE_SETTERS__",n=>de=n),Hs=t("__VUE_SSR_SETTERS__",n=>Nt=n)}const cn=e=>{const t=de;return $n(e),e.scope.on(),()=>{e.scope.off(),$n(t)}},Hr=()=>{de&&de.scope.off(),$n(null)};function Ro(e){return e.vnode.shapeFlag&4}let Nt=!1;function na(e,t=!1,n=!1){t&&Hs(t);const{props:s,children:r}=e.vnode,i=Ro(e);Sc(e,s,i,t),Oc(e,r,n);const o=i?sa(e,t):void 0;return t&&Hs(!1),o}function sa(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,gc);const{setup:s}=n;if(s){it();const r=e.setupContext=s.length>1?Mo(e):null,i=cn(e),o=sn(s,e,0,[e.props,r]),l=di(o);if(ot(),i(),(l||e.sp)&&!pt(e)&&nr(e),l){if(o.then(Hr,Hr),t)return o.then(c=>{$s(e,c,t)}).catch(c=>{$t(c,e,0)});e.asyncDep=o}else $s(e,o,t)}else Oo(e,t)}function $s(e,t,n){q(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:se(t)&&(e.setupState=$i(t)),Oo(e,n)}let $r;function Oo(e,t,n){const s=e.type;if(!e.render){if(!t&&$r&&!s.render){const r=s.template||sr(e).template;if(r){const{isCustomElement:i,compilerOptions:o}=e.appContext.config,{delimiters:l,compilerOptions:c}=s,a=ae(ae({isCustomElement:i,delimiters:l},o),c);s.render=$r(r,a)}}e.render=s.render||Ue}{const r=cn(e);it();try{yc(e)}finally{ot(),r()}}}const ra={get(e,t){return ye(e,"get",""),e[t]}};function Mo(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,ra),slots:e.slots,emit:e.emit,expose:t}}function zn(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy($i(Tn(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in qt)return qt[n](e)},has(t,n){return n in t||n in qt}})):e.proxy}function ia(e,t=!0){return q(e)?e.displayName||e.name:e.name||t&&e.__name}function oa(e){return q(e)&&"__vccOpts"in e}const oe=(e,t)=>Ul(e,t,Nt);function Ds(e,t,n){const s=arguments.length;return s===2?se(t)&&!K(t)?Ft(t)?ce(e,null,[t]):ce(e,t):ce(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&Ft(n)&&(n=[n]),ce(e,t,n))}const la="3.5.12";/** +* @vue/runtime-dom v3.5.12 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let Bs;const Dr=typeof window<"u"&&window.trustedTypes;if(Dr)try{Bs=Dr.createPolicy("vue",{createHTML:e=>e})}catch{}const Po=Bs?e=>Bs.createHTML(e):e=>e,ca="http://www.w3.org/2000/svg",aa="http://www.w3.org/1998/Math/MathML",qe=typeof document<"u"?document:null,Br=qe&&qe.createElement("template"),fa={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==="svg"?qe.createElementNS(ca,e):t==="mathml"?qe.createElementNS(aa,e):n?qe.createElement(e,{is:n}):qe.createElement(e);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>qe.createTextNode(e),createComment:e=>qe.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>qe.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,i){const o=n?n.previousSibling:t.lastChild;if(r&&(r===i||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===i||!(r=r.nextSibling)););else{Br.innerHTML=Po(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const l=Br.content;if(s==="svg"||s==="mathml"){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},ze="transition",kt="animation",en=Symbol("_vtc"),Io={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},ua=ae({},Ki,Io),da=e=>(e.displayName="Transition",e.props=ua,e),Gf=da((e,{slots:t})=>Ds(ec,ha(e),t)),at=(e,t=[])=>{K(e)?e.forEach(n=>n(...t)):e&&e(...t)},jr=e=>e?K(e)?e.some(t=>t.length>1):e.length>1:!1;function ha(e){const t={};for(const E in e)E in Io||(t[E]=e[E]);if(e.css===!1)return t;const{name:n="v",type:s,duration:r,enterFromClass:i=`${n}-enter-from`,enterActiveClass:o=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:c=i,appearActiveClass:a=o,appearToClass:f=l,leaveFromClass:u=`${n}-leave-from`,leaveActiveClass:g=`${n}-leave-active`,leaveToClass:y=`${n}-leave-to`}=e,w=pa(r),b=w&&w[0],U=w&&w[1],{onBeforeEnter:F,onEnter:D,onEnterCancelled:p,onLeave:m,onLeaveCancelled:x,onBeforeAppear:O=F,onAppear:H=D,onAppearCancelled:$=p}=t,C=(E,j,J)=>{ft(E,j?f:l),ft(E,j?a:o),J&&J()},_=(E,j)=>{E._isLeaving=!1,ft(E,u),ft(E,y),ft(E,g),j&&j()},I=E=>(j,J)=>{const re=E?H:D,B=()=>C(j,E,J);at(re,[j,B]),kr(()=>{ft(j,E?c:i),Qe(j,E?f:l),jr(re)||Vr(j,s,b,B)})};return ae(t,{onBeforeEnter(E){at(F,[E]),Qe(E,i),Qe(E,o)},onBeforeAppear(E){at(O,[E]),Qe(E,c),Qe(E,a)},onEnter:I(!1),onAppear:I(!0),onLeave(E,j){E._isLeaving=!0;const J=()=>_(E,j);Qe(E,u),Qe(E,g),ya(),kr(()=>{E._isLeaving&&(ft(E,u),Qe(E,y),jr(m)||Vr(E,s,U,J))}),at(m,[E,J])},onEnterCancelled(E){C(E,!1),at(p,[E])},onAppearCancelled(E){C(E,!0),at($,[E])},onLeaveCancelled(E){_(E),at(x,[E])}})}function pa(e){if(e==null)return null;if(se(e))return[fs(e.enter),fs(e.leave)];{const t=fs(e);return[t,t]}}function fs(e){return mi(e)}function Qe(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[en]||(e[en]=new Set)).add(t)}function ft(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const n=e[en];n&&(n.delete(t),n.size||(e[en]=void 0))}function kr(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let ga=0;function Vr(e,t,n,s){const r=e._endId=++ga,i=()=>{r===e._endId&&s()};if(n!=null)return setTimeout(i,n);const{type:o,timeout:l,propCount:c}=ma(e,t);if(!o)return s();const a=o+"end";let f=0;const u=()=>{e.removeEventListener(a,g),i()},g=y=>{y.target===e&&++f>=c&&u()};setTimeout(()=>{f(n[w]||"").split(", "),r=s(`${ze}Delay`),i=s(`${ze}Duration`),o=Ur(r,i),l=s(`${kt}Delay`),c=s(`${kt}Duration`),a=Ur(l,c);let f=null,u=0,g=0;t===ze?o>0&&(f=ze,u=o,g=i.length):t===kt?a>0&&(f=kt,u=a,g=c.length):(u=Math.max(o,a),f=u>0?o>a?ze:kt:null,g=f?f===ze?i.length:c.length:0);const y=f===ze&&/\b(transform|all)(,|$)/.test(s(`${ze}Property`).toString());return{type:f,timeout:u,propCount:g,hasTransform:y}}function Ur(e,t){for(;e.lengthWr(n)+Wr(e[s])))}function Wr(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function ya(){return document.body.offsetHeight}function va(e,t,n){const s=e[en];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Kr=Symbol("_vod"),ba=Symbol("_vsh"),Lo=Symbol("");function Yf(e){const t=ln();if(!t)return;const n=t.ut=(r=e(t.proxy))=>{Array.from(document.querySelectorAll(`[data-v-owner="${t.uid}"]`)).forEach(i=>Dn(i,r))},s=()=>{const r=e(t.proxy);t.ce?Dn(t.ce,r):js(t.subTree,r),n(r)};zi(()=>{Hc(s)}),vt(()=>{const r=new MutationObserver(s);r.observe(t.subTree.el.parentNode,{childList:!0}),on(()=>r.disconnect())})}function js(e,t){if(e.shapeFlag&128){const n=e.suspense;e=n.activeBranch,n.pendingBranch&&!n.isHydrating&&n.effects.push(()=>{js(n.activeBranch,t)})}for(;e.component;)e=e.component.subTree;if(e.shapeFlag&1&&e.el)Dn(e.el,t);else if(e.type===be)e.children.forEach(n=>js(n,t));else if(e.type===It){let{el:n,anchor:s}=e;for(;n&&(Dn(n,t),n!==s);)n=n.nextSibling}}function Dn(e,t){if(e.nodeType===1){const n=e.style;let s="";for(const r in t)n.setProperty(`--${r}`,t[r]),s+=`--${r}: ${t[r]};`;n[Lo]=s}}const _a=/(^|;)\s*display\s*:/;function wa(e,t,n){const s=e.style,r=ie(n);let i=!1;if(n&&!r){if(t)if(ie(t))for(const o of t.split(";")){const l=o.slice(0,o.indexOf(":")).trim();n[l]==null&&An(s,l,"")}else for(const o in t)n[o]==null&&An(s,o,"");for(const o in n)o==="display"&&(i=!0),An(s,o,n[o])}else if(r){if(t!==n){const o=s[Lo];o&&(n+=";"+o),s.cssText=n,i=_a.test(n)}}else t&&e.removeAttribute("style");Kr in e&&(e[Kr]=i?s.display:"",e[ba]&&(s.display="none"))}const qr=/\s*!important$/;function An(e,t,n){if(K(n))n.forEach(s=>An(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=xa(e,t);qr.test(n)?e.setProperty(rt(s),n.replace(qr,""),"important"):e[s]=n}}const Gr=["Webkit","Moz","ms"],us={};function xa(e,t){const n=us[t];if(n)return n;let s=Ie(t);if(s!=="filter"&&s in e)return us[t]=s;s=kn(s);for(let r=0;rds||(Ca.then(()=>ds=0),ds=Date.now());function Ra(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;He(Oa(s,n.value),t,5,[s])};return n.value=e,n.attached=Aa(),n}function Oa(e,t){if(K(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 Zr=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Ma=(e,t,n,s,r,i)=>{const o=r==="svg";t==="class"?va(e,s,o):t==="style"?wa(e,n,s):nn(t)?Vs(t)||Ta(e,t,n,s,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Pa(e,t,s,o))?(Jr(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Xr(e,t,s,o,i,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!ie(s))?Jr(e,Ie(t),s,i,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),Xr(e,t,s,o))};function Pa(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&Zr(t)&&q(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return Zr(t)&&ie(n)?!1:t in e}const ei=e=>{const t=e.props["onUpdate:modelValue"]||!1;return K(t)?n=>En(t,n):t};function Ia(e){e.target.composing=!0}function ti(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const hs=Symbol("_assign"),Xf={created(e,{modifiers:{lazy:t,trim:n,number:s}},r){e[hs]=ei(r);const i=s||r.props&&r.props.type==="number";Et(e,t?"change":"input",o=>{if(o.target.composing)return;let l=e.value;n&&(l=l.trim()),i&&(l=xs(l)),e[hs](l)}),n&&Et(e,"change",()=>{e.value=e.value.trim()}),t||(Et(e,"compositionstart",Ia),Et(e,"compositionend",ti),Et(e,"change",ti))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:s,trim:r,number:i}},o){if(e[hs]=ei(o),e.composing)return;const l=(i||e.type==="number")&&!/^0\d/.test(e.value)?xs(e.value):e.value,c=t??"";l!==c&&(document.activeElement===e&&e.type!=="range"&&(s&&t===n||r&&e.value.trim()===c)||(e.value=c))}},La=["ctrl","shift","alt","meta"],Fa={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)=>La.some(n=>e[`${n}Key`]&&!t.includes(n))},Jf=(e,t)=>{const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=(r,...i)=>{for(let o=0;o{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=r=>{if(!("key"in r))return;const i=rt(r.key);if(t.some(o=>o===i||Na[o]===i))return e(r)})},Fo=ae({patchProp:Ma},fa);let Yt,ni=!1;function Ha(){return Yt||(Yt=Pc(Fo))}function $a(){return Yt=ni?Yt:Ic(Fo),ni=!0,Yt}const Qf=(...e)=>{const t=Ha().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=Ho(s);if(!r)return;const i=t._component;!q(i)&&!i.render&&!i.template&&(i.template=r.innerHTML),r.nodeType===1&&(r.textContent="");const o=n(r,!1,No(r));return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),o},t},Zf=(...e)=>{const t=$a().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=Ho(s);if(r)return n(r,!0,No(r))},t};function No(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Ho(e){return ie(e)?document.querySelector(e):e}const eu=(e,t)=>{const n=e.__vccOpts||e;for(const[s,r]of t)n[s]=r;return n},Da="modulepreload",Ba=function(e){return"/sealdice-manual-next/"+e},si={},tu=function(t,n,s){let r=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const o=document.querySelector("meta[property=csp-nonce]"),l=(o==null?void 0:o.nonce)||(o==null?void 0:o.getAttribute("nonce"));r=Promise.allSettled(n.map(c=>{if(c=Ba(c),c in si)return;si[c]=!0;const a=c.endsWith(".css"),f=a?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${f}`))return;const u=document.createElement("link");if(u.rel=a?"stylesheet":Da,a||(u.as="script"),u.crossOrigin="",u.href=c,l&&u.setAttribute("nonce",l),document.head.appendChild(u),a)return new Promise((g,y)=>{u.addEventListener("load",g),u.addEventListener("error",()=>y(new Error(`Unable to preload CSS for ${c}`)))})}))}function i(o){const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=o,window.dispatchEvent(l),!l.defaultPrevented)throw o}return r.then(o=>{for(const l of o||[])l.status==="rejected"&&i(l.reason);return t().catch(i)})},ja=window.__VP_SITE_DATA__;function ar(e){return _i()?(hl(e),!0):!1}function We(e){return typeof e=="function"?e():Hi(e)}const $o=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const nu=e=>e!=null,ka=Object.prototype.toString,Va=e=>ka.call(e)==="[object Object]",tn=()=>{},ri=Ua();function Ua(){var e,t;return $o&&((e=window==null?void 0:window.navigator)==null?void 0:e.userAgent)&&(/iP(?:ad|hone|od)/.test(window.navigator.userAgent)||((t=window==null?void 0:window.navigator)==null?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test(window==null?void 0:window.navigator.userAgent))}function Wa(e,t){function n(...s){return new Promise((r,i)=>{Promise.resolve(e(()=>t.apply(this,s),{fn:t,thisArg:this,args:s})).then(r).catch(i)})}return n}const Do=e=>e();function Ka(e,t={}){let n,s,r=tn;const i=l=>{clearTimeout(l),r(),r=tn};return l=>{const c=We(e),a=We(t.maxWait);return n&&i(n),c<=0||a!==void 0&&a<=0?(s&&(i(s),s=null),Promise.resolve(l())):new Promise((f,u)=>{r=t.rejectOnCancel?u:f,a&&!s&&(s=setTimeout(()=>{n&&i(n),s=null,f(l())},a)),n=setTimeout(()=>{s&&i(s),s=null,f(l())},c)})}}function qa(e=Do){const t=le(!0);function n(){t.value=!1}function s(){t.value=!0}const r=(...i)=>{t.value&&e(...i)};return{isActive:qn(t),pause:n,resume:s,eventFilter:r}}function Ga(e){return ln()}function Bo(...e){if(e.length!==1)return jl(...e);const t=e[0];return typeof t=="function"?qn($l(()=>({get:t,set:tn}))):le(t)}function jo(e,t,n={}){const{eventFilter:s=Do,...r}=n;return Ne(e,Wa(s,t),r)}function Ya(e,t,n={}){const{eventFilter:s,...r}=n,{eventFilter:i,pause:o,resume:l,isActive:c}=qa(s);return{stop:jo(e,t,{...r,eventFilter:i}),pause:o,resume:l,isActive:c}}function fr(e,t=!0,n){Ga()?vt(e,n):t?e():Gn(e)}function su(e,t,n={}){const{debounce:s=0,maxWait:r=void 0,...i}=n;return jo(e,t,{...i,eventFilter:Ka(s,{maxWait:r})})}function ru(e,t,n){let s;fe(n)?s={evaluating:n}:s={};const{lazy:r=!1,evaluating:i=void 0,shallow:o=!0,onError:l=tn}=s,c=le(!r),a=o?Zs(t):le(t);let f=0;return or(async u=>{if(!c.value)return;f++;const g=f;let y=!1;i&&Promise.resolve().then(()=>{i.value=!0});try{const w=await e(b=>{u(()=>{i&&(i.value=!1),y||b()})});g===f&&(a.value=w)}catch(w){l(w)}finally{i&&g===f&&(i.value=!1),y=!0}}),r?oe(()=>(c.value=!0,a.value)):a}const $e=$o?window:void 0;function ko(e){var t;const n=We(e);return(t=n==null?void 0:n.$el)!=null?t:n}function Ht(...e){let t,n,s,r;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,s,r]=e,t=$e):[t,n,s,r]=e,!t)return tn;Array.isArray(n)||(n=[n]),Array.isArray(s)||(s=[s]);const i=[],o=()=>{i.forEach(f=>f()),i.length=0},l=(f,u,g,y)=>(f.addEventListener(u,g,y),()=>f.removeEventListener(u,g,y)),c=Ne(()=>[ko(t),We(r)],([f,u])=>{if(o(),!f)return;const g=Va(u)?{...u}:u;i.push(...n.flatMap(y=>s.map(w=>l(f,y,w,g))))},{immediate:!0,flush:"post"}),a=()=>{c(),o()};return ar(a),a}function Xa(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function iu(...e){let t,n,s={};e.length===3?(t=e[0],n=e[1],s=e[2]):e.length===2?typeof e[1]=="object"?(t=!0,n=e[0],s=e[1]):(t=e[0],n=e[1]):(t=!0,n=e[0]);const{target:r=$e,eventName:i="keydown",passive:o=!1,dedupe:l=!1}=s,c=Xa(t);return Ht(r,i,f=>{f.repeat&&We(l)||c(f)&&n(f)},o)}function Ja(){const e=le(!1),t=ln();return t&&vt(()=>{e.value=!0},t),e}function za(e){const t=Ja();return oe(()=>(t.value,!!e()))}function Vo(e,t={}){const{window:n=$e}=t,s=za(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let r;const i=le(!1),o=a=>{i.value=a.matches},l=()=>{r&&("removeEventListener"in r?r.removeEventListener("change",o):r.removeListener(o))},c=or(()=>{s.value&&(l(),r=n.matchMedia(We(e)),"addEventListener"in r?r.addEventListener("change",o):r.addListener(o),i.value=r.matches)});return ar(()=>{c(),l(),r=void 0}),i}const vn=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},bn="__vueuse_ssr_handlers__",Qa=Za();function Za(){return bn in vn||(vn[bn]=vn[bn]||{}),vn[bn]}function Uo(e,t){return Qa[e]||t}function ur(e){return Vo("(prefers-color-scheme: dark)",e)}function ef(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 tf={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()}},ii="vueuse-storage";function dr(e,t,n,s={}){var r;const{flush:i="pre",deep:o=!0,listenToStorageChanges:l=!0,writeDefaults:c=!0,mergeDefaults:a=!1,shallow:f,window:u=$e,eventFilter:g,onError:y=_=>{console.error(_)},initOnMounted:w}=s,b=(f?Zs:le)(typeof t=="function"?t():t);if(!n)try{n=Uo("getDefaultStorage",()=>{var _;return(_=$e)==null?void 0:_.localStorage})()}catch(_){y(_)}if(!n)return b;const U=We(t),F=ef(U),D=(r=s.serializer)!=null?r:tf[F],{pause:p,resume:m}=Ya(b,()=>O(b.value),{flush:i,deep:o,eventFilter:g});u&&l&&fr(()=>{n instanceof Storage?Ht(u,"storage",$):Ht(u,ii,C),w&&$()}),w||$();function x(_,I){if(u){const E={key:e,oldValue:_,newValue:I,storageArea:n};u.dispatchEvent(n instanceof Storage?new StorageEvent("storage",E):new CustomEvent(ii,{detail:E}))}}function O(_){try{const I=n.getItem(e);if(_==null)x(I,null),n.removeItem(e);else{const E=D.write(_);I!==E&&(n.setItem(e,E),x(I,E))}}catch(I){y(I)}}function H(_){const I=_?_.newValue:n.getItem(e);if(I==null)return c&&U!=null&&n.setItem(e,D.write(U)),U;if(!_&&a){const E=D.read(I);return typeof a=="function"?a(E,U):F==="object"&&!Array.isArray(E)?{...U,...E}:E}else return typeof I!="string"?I:D.read(I)}function $(_){if(!(_&&_.storageArea!==n)){if(_&&_.key==null){b.value=U;return}if(!(_&&_.key!==e)){p();try{(_==null?void 0:_.newValue)!==D.write(b.value)&&(b.value=H(_))}catch(I){y(I)}finally{_?Gn(m):m()}}}}function C(_){$(_.detail)}return b}const nf="*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}";function sf(e={}){const{selector:t="html",attribute:n="class",initialValue:s="auto",window:r=$e,storage:i,storageKey:o="vueuse-color-scheme",listenToStorageChanges:l=!0,storageRef:c,emitAuto:a,disableTransition:f=!0}=e,u={auto:"",light:"light",dark:"dark",...e.modes||{}},g=ur({window:r}),y=oe(()=>g.value?"dark":"light"),w=c||(o==null?Bo(s):dr(o,s,i,{window:r,listenToStorageChanges:l})),b=oe(()=>w.value==="auto"?y.value:w.value),U=Uo("updateHTMLAttrs",(m,x,O)=>{const H=typeof m=="string"?r==null?void 0:r.document.querySelector(m):ko(m);if(!H)return;const $=new Set,C=new Set;let _=null;if(x==="class"){const E=O.split(/\s/g);Object.values(u).flatMap(j=>(j||"").split(/\s/g)).filter(Boolean).forEach(j=>{E.includes(j)?$.add(j):C.add(j)})}else _={key:x,value:O};if($.size===0&&C.size===0&&_===null)return;let I;f&&(I=r.document.createElement("style"),I.appendChild(document.createTextNode(nf)),r.document.head.appendChild(I));for(const E of $)H.classList.add(E);for(const E of C)H.classList.remove(E);_&&H.setAttribute(_.key,_.value),f&&(r.getComputedStyle(I).opacity,document.head.removeChild(I))});function F(m){var x;U(t,n,(x=u[m])!=null?x:m)}function D(m){e.onChanged?e.onChanged(m,F):F(m)}Ne(b,D,{flush:"post",immediate:!0}),fr(()=>D(b.value));const p=oe({get(){return a?w.value:b.value},set(m){w.value=m}});try{return Object.assign(p,{store:w,system:y,state:b})}catch{return p}}function rf(e={}){const{valueDark:t="dark",valueLight:n="",window:s=$e}=e,r=sf({...e,onChanged:(l,c)=>{var a;e.onChanged?(a=e.onChanged)==null||a.call(e,l==="dark",c,l):c(l)},modes:{dark:t,light:n}}),i=oe(()=>r.system?r.system.value:ur({window:s}).value?"dark":"light");return oe({get(){return r.value==="dark"},set(l){const c=l?"dark":"light";i.value===c?r.value="auto":r.value=c}})}function ps(e){return typeof Window<"u"&&e instanceof Window?e.document.documentElement:typeof Document<"u"&&e instanceof Document?e.documentElement:e}function ou(e,t,n={}){const{window:s=$e}=n;return dr(e,t,s==null?void 0:s.localStorage,n)}function Wo(e){const t=window.getComputedStyle(e);if(t.overflowX==="scroll"||t.overflowY==="scroll"||t.overflowX==="auto"&&e.clientWidth1?!0:(t.preventDefault&&t.preventDefault(),!1)}const gs=new WeakMap;function lu(e,t=!1){const n=le(t);let s=null,r="";Ne(Bo(e),l=>{const c=ps(We(l));if(c){const a=c;if(gs.get(a)||gs.set(a,a.style.overflow),a.style.overflow!=="hidden"&&(r=a.style.overflow),a.style.overflow==="hidden")return n.value=!0;if(n.value)return a.style.overflow="hidden"}},{immediate:!0});const i=()=>{const l=ps(We(e));!l||n.value||(ri&&(s=Ht(l,"touchmove",c=>{of(c)},{passive:!1})),l.style.overflow="hidden",n.value=!0)},o=()=>{const l=ps(We(e));!l||!n.value||(ri&&(s==null||s()),l.style.overflow=r,gs.delete(l),n.value=!1)};return ar(o),oe({get(){return n.value},set(l){l?i():o()}})}function cu(e,t,n={}){const{window:s=$e}=n;return dr(e,t,s==null?void 0:s.sessionStorage,n)}function au(e={}){const{window:t=$e,behavior:n="auto"}=e;if(!t)return{x:le(0),y:le(0)};const s=le(t.scrollX),r=le(t.scrollY),i=oe({get(){return s.value},set(l){scrollTo({left:l,behavior:n})}}),o=oe({get(){return r.value},set(l){scrollTo({top:l,behavior:n})}});return Ht(t,"scroll",()=>{s.value=t.scrollX,r.value=t.scrollY},{capture:!1,passive:!0}),{x:i,y:o}}function fu(e={}){const{window:t=$e,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:s=Number.POSITIVE_INFINITY,listenOrientation:r=!0,includeScrollbar:i=!0,type:o="inner"}=e,l=le(n),c=le(s),a=()=>{t&&(o==="outer"?(l.value=t.outerWidth,c.value=t.outerHeight):i?(l.value=t.innerWidth,c.value=t.innerHeight):(l.value=t.document.documentElement.clientWidth,c.value=t.document.documentElement.clientHeight))};if(a(),fr(a),Ht("resize",a,{passive:!0}),r){const f=Vo("(orientation: portrait)");Ne(f,()=>a())}return{width:l,height:c}}const ms={BASE_URL:"/sealdice-manual-next/",DEV:!1,MODE:"production",PROD:!0,SSR:!1};var ys={};const Ko=/^(?:[a-z]+:|\/\/)/i,lf="vitepress-theme-appearance",cf=/#.*$/,af=/[?#].*$/,ff=/(?:(^|\/)index)?\.(?:md|html)$/,me=typeof document<"u",qo={relativePath:"404.md",filePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0,isNotFound:!0};function uf(e,t,n=!1){if(t===void 0)return!1;if(e=oi(`/${e}`),n)return new RegExp(t).test(e);if(oi(t)!==e)return!1;const s=t.match(cf);return s?(me?location.hash:"")===s[0]:!0}function oi(e){return decodeURI(e).replace(af,"").replace(ff,"$1")}function df(e){return Ko.test(e)}function hf(e,t){return Object.keys((e==null?void 0:e.locales)||{}).find(n=>n!=="root"&&!df(n)&&uf(t,`/${n}/`,!0))||"root"}function pf(e,t){var s,r,i,o,l,c,a;const n=hf(e,t);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:((i=e.locales[n])==null?void 0:i.title)??e.title,titleTemplate:((o=e.locales[n])==null?void 0:o.titleTemplate)??e.titleTemplate,description:((l=e.locales[n])==null?void 0:l.description)??e.description,head:Yo(e.head,((c=e.locales[n])==null?void 0:c.head)??[]),themeConfig:{...e.themeConfig,...(a=e.locales[n])==null?void 0:a.themeConfig}})}function Go(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=gf(e.title,s);return n===r.slice(3)?n:`${n}${r}`}function gf(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function mf(e,t){const[n,s]=t;if(n!=="meta")return!1;const r=Object.entries(s)[0];return r==null?!1:e.some(([i,o])=>i===n&&o[r[0]]===r[1])}function Yo(e,t){return[...e.filter(n=>!mf(t,n)),...t]}const yf=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,vf=/^[a-z]:/i;function li(e){const t=vf.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(yf,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const vs=new Set;function bf(e){if(vs.size===0){const n=typeof process=="object"&&(ys==null?void 0:ys.VITE_EXTRA_EXTENSIONS)||(ms==null?void 0:ms.VITE_EXTRA_EXTENSIONS)||"";("3g2,3gp,aac,ai,apng,au,avif,bin,bmp,cer,class,conf,crl,css,csv,dll,doc,eps,epub,exe,gif,gz,ics,ief,jar,jpe,jpeg,jpg,js,json,jsonld,m4a,man,mid,midi,mjs,mov,mp2,mp3,mp4,mpe,mpeg,mpg,mpp,oga,ogg,ogv,ogx,opus,otf,p10,p7c,p7m,p7s,pdf,png,ps,qt,roff,rtf,rtx,ser,svg,t,tif,tiff,tr,ts,tsv,ttf,txt,vtt,wav,weba,webm,webp,woff,woff2,xhtml,xml,yaml,yml,zip"+(n&&typeof n=="string"?","+n:"")).split(",").forEach(s=>vs.add(s))}const t=e.split(".").pop();return t==null||!vs.has(t.toLowerCase())}function uu(e){return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}const _f=Symbol(),mt=Zs(ja);function du(e){const t=oe(()=>pf(mt.value,e.data.relativePath)),n=t.value.appearance,s=n==="force-dark"?le(!0):n==="force-auto"?ur():n?rf({storageKey:lf,initialValue:()=>n==="dark"?"dark":"auto",...typeof n=="object"?n:{}}):le(!1),r=le(me?location.hash:"");return me&&window.addEventListener("hashchange",()=>{r.value=location.hash}),Ne(()=>e.data,()=>{r.value=me?location.hash:""}),{site:t,theme:oe(()=>t.value.themeConfig),page:oe(()=>e.data),frontmatter:oe(()=>e.data.frontmatter),params:oe(()=>e.data.params),lang:oe(()=>t.value.lang),dir:oe(()=>e.data.frontmatter.dir||t.value.dir),localeIndex:oe(()=>t.value.localeIndex||"root"),title:oe(()=>Go(t.value,e.data)),description:oe(()=>e.data.description||t.value.description),isDark:s,hash:oe(()=>r.value)}}function wf(){const e=Mt(_f);if(!e)throw new Error("vitepress data not properly injected in app");return e}function xf(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function ci(e){return Ko.test(e)||!e.startsWith("/")?e:xf(mt.value.base,e)}function Ef(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),me){const n="/sealdice-manual-next/";t=li(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=`./${li(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}let Rn=[];function hu(e){Rn.push(e),on(()=>{Rn=Rn.filter(t=>t!==e)})}function Tf(){let e=mt.value.scrollOffset,t=0,n=24;if(typeof e=="object"&&"padding"in e&&(n=e.padding,e=e.selector),typeof e=="number")t=e;else if(typeof e=="string")t=ai(e,n);else if(Array.isArray(e))for(const s of e){const r=ai(s,n);if(r){t=r;break}}return t}function ai(e,t){const n=document.querySelector(e);if(!n)return 0;const s=n.getBoundingClientRect().bottom;return s<0?0:s+t}const Sf=Symbol(),Xo="http://a.com",Cf=()=>({path:"/",component:null,data:qo});function pu(e,t){const n=Kn(Cf()),s={route:n,go:r};async function r(l=me?location.href:"/"){var c,a;l=bs(l),await((c=s.onBeforeRouteChange)==null?void 0:c.call(s,l))!==!1&&(me&&l!==bs(location.href)&&(history.replaceState({scrollPosition:window.scrollY},""),history.pushState({},"",l)),await o(l),await((a=s.onAfterRouteChanged)==null?void 0:a.call(s,l)))}let i=null;async function o(l,c=0,a=!1){var g,y;if(await((g=s.onBeforePageLoad)==null?void 0:g.call(s,l))===!1)return;const f=new URL(l,Xo),u=i=f.pathname;try{let w=await e(u);if(!w)throw new Error(`Page not found: ${u}`);if(i===u){i=null;const{default:b,__pageData:U}=w;if(!b)throw new Error(`Invalid route component: ${b}`);await((y=s.onAfterPageLoad)==null?void 0:y.call(s,l)),n.path=me?u:ci(u),n.component=Tn(b),n.data=Tn(U),me&&Gn(()=>{let F=mt.value.base+U.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");if(!mt.value.cleanUrls&&!F.endsWith("/")&&(F+=".html"),F!==f.pathname&&(f.pathname=F,l=F+f.search+f.hash,history.replaceState({},"",l)),f.hash&&!c){let D=null;try{D=document.getElementById(decodeURIComponent(f.hash).slice(1))}catch(p){console.warn(p)}if(D){fi(D,f.hash);return}}window.scrollTo(0,c)})}}catch(w){if(!/fetch|Page not found/.test(w.message)&&!/^\/404(\.html|\/)?$/.test(l)&&console.error(w),!a)try{const b=await fetch(mt.value.base+"hashmap.json");window.__VP_HASH_MAP__=await b.json(),await o(l,c,!0);return}catch{}if(i===u){i=null,n.path=me?u:ci(u),n.component=t?Tn(t):null;const b=me?u.replace(/(^|\/)$/,"$1index").replace(/(\.html)?$/,".md").replace(/^\//,""):"404.md";n.data={...qo,relativePath:b}}}}return me&&(history.state===null&&history.replaceState({},""),window.addEventListener("click",l=>{if(l.defaultPrevented||!(l.target instanceof Element)||l.target.closest("button")||l.button!==0||l.ctrlKey||l.shiftKey||l.altKey||l.metaKey)return;const c=l.target.closest("a");if(!c||c.closest(".vp-raw")||c.hasAttribute("download")||c.hasAttribute("target"))return;const a=c.getAttribute("href")??(c instanceof SVGAElement?c.getAttribute("xlink:href"):null);if(a==null)return;const{href:f,origin:u,pathname:g,hash:y,search:w}=new URL(a,c.baseURI),b=new URL(location.href);u===b.origin&&bf(g)&&(l.preventDefault(),g===b.pathname&&w===b.search?(y!==b.hash&&(history.pushState({},"",f),window.dispatchEvent(new HashChangeEvent("hashchange",{oldURL:b.href,newURL:f}))),y?fi(c,y,c.classList.contains("header-anchor")):window.scrollTo(0,0)):r(f))},{capture:!0}),window.addEventListener("popstate",async l=>{var c;l.state!==null&&(await o(bs(location.href),l.state&&l.state.scrollPosition||0),(c=s.onAfterRouteChanged)==null||c.call(s,location.href))}),window.addEventListener("hashchange",l=>{l.preventDefault()})),s}function Af(){const e=Mt(Sf);if(!e)throw new Error("useRouter() is called without provider.");return e}function Jo(){return Af().route}function fi(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 r=function(){!n||Math.abs(o-window.scrollY)>window.innerHeight?window.scrollTo(0,o):window.scrollTo({left:0,top:o,behavior:"smooth"})};const i=parseInt(window.getComputedStyle(s).paddingTop,10),o=window.scrollY+s.getBoundingClientRect().top-Tf()+i;requestAnimationFrame(r)}}function bs(e){const t=new URL(e,Xo);return t.pathname=t.pathname.replace(/(^|\/)index(\.html)?$/,"$1"),mt.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 _n=()=>Rn.forEach(e=>e()),gu=tr({name:"VitePressContent",props:{as:{type:[Object,String],default:"div"}},setup(e){const t=Jo(),{frontmatter:n,site:s}=wf();return Ne(n,_n,{deep:!0,flush:"post"}),()=>Ds(e.as,s.value.contentProps??{style:{position:"relative"}},[t.component?Ds(t.component,{onVnodeMounted:_n,onVnodeUpdated:_n,onVnodeUnmounted:_n}):"404 Page Not Found"])}}),mu=tr({setup(e,{slots:t}){const n=le(!1);return vt(()=>{n.value=!0}),()=>n.value&&t.default?t.default():null}});function yu(){me&&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 i=s.querySelector(".blocks");if(!i)return;const o=Array.from(i.children).find(a=>a.classList.contains("active"));if(!o)return;const l=i.children[r];if(!l||o===l)return;o.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 vu(){if(me){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,i=(s=n.nextElementSibling)==null?void 0:s.nextElementSibling;if(!r||!i)return;const o=/language-(shellscript|shell|bash|sh|zsh)/.test(r.className),l=[".vp-copy-ignore",".diff.remove"],c=i.cloneNode(!0);c.querySelectorAll(l.join(",")).forEach(f=>f.remove());let a=c.textContent||"";o&&(a=a.replace(/^ *(\$|>) /gm,"").trim()),Rf(a).then(()=>{n.classList.add("copied"),clearTimeout(e.get(n));const f=setTimeout(()=>{n.classList.remove("copied"),n.blur(),e.delete(n)},2e3);e.set(n,f)})}})}}async function Rf(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 bu(e,t){let n=!0,s=[];const r=i=>{if(n){n=!1,i.forEach(l=>{const c=_s(l);for(const a of document.head.children)if(a.isEqualNode(c)){s.push(a);return}});return}const o=i.map(_s);s.forEach((l,c)=>{const a=o.findIndex(f=>f==null?void 0:f.isEqualNode(l??null));a!==-1?delete o[a]:(l==null||l.remove(),delete s[c])}),o.forEach(l=>l&&document.head.appendChild(l)),s=[...s,...o].filter(Boolean)};or(()=>{const i=e.data,o=t.value,l=i&&i.description,c=i&&i.frontmatter.head||[],a=Go(o,i);a!==document.title&&(document.title=a);const f=l||o.description;let u=document.querySelector("meta[name=description]");u?u.getAttribute("content")!==f&&u.setAttribute("content",f):_s(["meta",{name:"description",content:f}]),r(Yo(o.head,Mf(c)))})}function _s([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==null&&(s.async=!1),s}function Of(e){return e[0]==="meta"&&e[1]&&e[1].name==="description"}function Mf(e){return e.filter(t=>!Of(t))}const ws=new Set,zo=()=>document.createElement("link"),Pf=e=>{const t=zo();t.rel="prefetch",t.href=e,document.head.appendChild(t)},If=e=>{const t=new XMLHttpRequest;t.open("GET",e,t.withCredentials=!0),t.send()};let wn;const Lf=me&&(wn=zo())&&wn.relList&&wn.relList.supports&&wn.relList.supports("prefetch")?Pf:If;function _u(){if(!me||!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(i=>{i.forEach(o=>{if(o.isIntersecting){const l=o.target;n.unobserve(l);const{pathname:c}=l;if(!ws.has(c)){ws.add(c);const a=Ef(c);a&&Lf(a)}}})}),t(()=>{document.querySelectorAll("#app a").forEach(i=>{const{hostname:o,pathname:l}=new URL(i.href instanceof SVGAnimatedString?i.href.animVal:i.href,i.baseURI),c=l.match(/\.\w+$/);c&&c[0]!==".html"||i.target!=="_blank"&&o===location.hostname&&(l!==location.pathname?n.observe(i):ws.add(l))})})};vt(s);const r=Jo();Ne(()=>r.path,s),on(()=>{n&&n.disconnect()})}export{Qi as $,Tf as A,$f as B,Bf as C,Zs as D,hu as E,be as F,ce as G,Df as H,Ko as I,Jo as J,Qc as K,Mt as L,fu as M,Ks as N,iu as O,Gn as P,au as Q,me as R,qn as S,Gf as T,Hf as U,tu as V,lu as W,Tc as X,kf as Y,zf as Z,eu as _,Ao as a,Jf as a0,Vf as a1,Kn as a2,jl as a3,Yf as a4,Ds as a5,Kf as a6,Uf as a7,We as a8,ko as a9,_u as aA,vu as aB,yu as aC,nu as aa,ar as ab,ru as ac,cu as ad,ou as ae,su as af,Af as ag,Ht as ah,Ff as ai,Xf as aj,fe as ak,Nf as al,Tn as am,Qf as an,_f as ao,Ef as ap,uu as aq,z as ar,bu as as,Sf as at,du as au,gu as av,mu as aw,mt as ax,Zf as ay,pu as az,Ns as b,Wf as c,tr as d,qf as e,bf as f,ci as g,oe as h,df as i,Co as j,Hi as k,uf as l,Vo as m,qs as n,Hn as o,le as p,Ne as q,jf as r,or as s,ul as t,wf as u,vt as v,Yl as w,on as x,Hc as y,fc as z}; diff --git a/assets/chunks/ganttDiagram-FAOCOTIY.DpN8cieg.js b/assets/chunks/ganttDiagram-FAOCOTIY.DpN8cieg.js new file mode 100644 index 000000000..e0616612e --- /dev/null +++ b/assets/chunks/ganttDiagram-FAOCOTIY.DpN8cieg.js @@ -0,0 +1,257 @@ +import{aU as ir,aV as sr,aW as or,aX as cr,aY as Wr,aZ as ct,a_ as Or,_ as f,a$ as ae,d as Ye,s as Hr,g as Nr,q as Vr,r as Pr,c as zr,b as Rr,x as Br,m as Zr,l as tt,j as je,k as qr,e as Xr,v as Gr}from"../app.D0Wo8w0i.js";import{b as Qr,t as Vt,c as jr,a as Jr,l as $r}from"./linear.QGmzl4if.js";import{i as Kr}from"./init.Gi6I4Gst.js";import"./framework.B1keMFNq.js";import"./theme.8WvZWF-M.js";function en(e,t){let r;if(t===void 0)for(const n of e)n!=null&&(r=n)&&(r=n);else{let n=-1;for(let a of e)(a=t(a,++n,e))!=null&&(r=a)&&(r=a)}return r}function tn(e,t){let r;if(t===void 0)for(const n of e)n!=null&&(r>n||r===void 0&&n>=n)&&(r=n);else{let n=-1;for(let a of e)(a=t(a,++n,e))!=null&&(r>a||r===void 0&&a>=a)&&(r=a)}return r}function rn(e){return e}var $e=1,lt=2,bt=3,Je=4,Pt=1e-6;function nn(e){return"translate("+e+",0)"}function an(e){return"translate(0,"+e+")"}function sn(e){return t=>+e(t)}function on(e,t){return t=Math.max(0,e.bandwidth()-t*2)/2,e.round()&&(t=Math.round(t)),r=>+e(r)+t}function cn(){return!this.__axis}function lr(e,t){var r=[],n=null,a=null,i=6,s=6,g=3,k=typeof window<"u"&&window.devicePixelRatio>1?0:.5,v=e===$e||e===Je?-1:1,y=e===Je||e===lt?"x":"y",S=e===$e||e===bt?nn:an;function C(p){var N=n??(t.ticks?t.ticks.apply(t,r):t.domain()),M=a??(t.tickFormat?t.tickFormat.apply(t,r):rn),B=Math.max(i,0)+g,Q=t.range(),K=+Q[0]+k,R=+Q[Q.length-1]+k,Z=(t.bandwidth?on:sn)(t.copy(),k),j=p.selection?p.selection():p,w=j.selectAll(".domain").data([null]),L=j.selectAll(".tick").data(N,t).order(),D=L.exit(),F=L.enter().append("g").attr("class","tick"),_=L.select("line"),Y=L.select("text");w=w.merge(w.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),L=L.merge(F),_=_.merge(F.append("line").attr("stroke","currentColor").attr(y+"2",v*i)),Y=Y.merge(F.append("text").attr("fill","currentColor").attr(y,v*B).attr("dy",e===$e?"0em":e===bt?"0.71em":"0.32em")),p!==j&&(w=w.transition(p),L=L.transition(p),_=_.transition(p),Y=Y.transition(p),D=D.transition(p).attr("opacity",Pt).attr("transform",function(x){return isFinite(x=Z(x))?S(x+k):this.getAttribute("transform")}),F.attr("opacity",Pt).attr("transform",function(x){var A=this.parentNode.__axis;return S((A&&isFinite(A=A(x))?A:Z(x))+k)})),D.remove(),w.attr("d",e===Je||e===lt?s?"M"+v*s+","+K+"H"+k+"V"+R+"H"+v*s:"M"+k+","+K+"V"+R:s?"M"+K+","+v*s+"V"+k+"H"+R+"V"+v*s:"M"+K+","+k+"H"+R),L.attr("opacity",1).attr("transform",function(x){return S(Z(x)+k)}),_.attr(y+"2",v*i),Y.attr(y,v*B).text(M),j.filter(cn).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",e===lt?"start":e===Je?"end":"middle"),j.each(function(){this.__axis=Z})}return C.scale=function(p){return arguments.length?(t=p,C):t},C.ticks=function(){return r=Array.from(arguments),C},C.tickArguments=function(p){return arguments.length?(r=p==null?[]:Array.from(p),C):r.slice()},C.tickValues=function(p){return arguments.length?(n=p==null?null:Array.from(p),C):n&&n.slice()},C.tickFormat=function(p){return arguments.length?(a=p,C):a},C.tickSize=function(p){return arguments.length?(i=s=+p,C):i},C.tickSizeInner=function(p){return arguments.length?(i=+p,C):i},C.tickSizeOuter=function(p){return arguments.length?(s=+p,C):s},C.tickPadding=function(p){return arguments.length?(g=+p,C):g},C.offset=function(p){return arguments.length?(k=+p,C):k},C}function ln(e){return lr($e,e)}function un(e){return lr(bt,e)}const fn=Math.PI/180,hn=180/Math.PI,rt=18,ur=.96422,fr=1,hr=.82521,dr=4/29,Fe=6/29,mr=3*Fe*Fe,dn=Fe*Fe*Fe;function gr(e){if(e instanceof fe)return new fe(e.l,e.a,e.b,e.opacity);if(e instanceof ge)return yr(e);e instanceof or||(e=Wr(e));var t=dt(e.r),r=dt(e.g),n=dt(e.b),a=ut((.2225045*t+.7168786*r+.0606169*n)/fr),i,s;return t===r&&r===n?i=s=a:(i=ut((.4360747*t+.3850649*r+.1430804*n)/ur),s=ut((.0139322*t+.0971045*r+.7141733*n)/hr)),new fe(116*a-16,500*(i-a),200*(a-s),e.opacity)}function mn(e,t,r,n){return arguments.length===1?gr(e):new fe(e,t,r,n??1)}function fe(e,t,r,n){this.l=+e,this.a=+t,this.b=+r,this.opacity=+n}ir(fe,mn,sr(cr,{brighter(e){return new fe(this.l+rt*(e??1),this.a,this.b,this.opacity)},darker(e){return new fe(this.l-rt*(e??1),this.a,this.b,this.opacity)},rgb(){var e=(this.l+16)/116,t=isNaN(this.a)?e:e+this.a/500,r=isNaN(this.b)?e:e-this.b/200;return t=ur*ft(t),e=fr*ft(e),r=hr*ft(r),new or(ht(3.1338561*t-1.6168667*e-.4906146*r),ht(-.9787684*t+1.9161415*e+.033454*r),ht(.0719453*t-.2289914*e+1.4052427*r),this.opacity)}}));function ut(e){return e>dn?Math.pow(e,1/3):e/mr+dr}function ft(e){return e>Fe?e*e*e:mr*(e-dr)}function ht(e){return 255*(e<=.0031308?12.92*e:1.055*Math.pow(e,1/2.4)-.055)}function dt(e){return(e/=255)<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)}function gn(e){if(e instanceof ge)return new ge(e.h,e.c,e.l,e.opacity);if(e instanceof fe||(e=gr(e)),e.a===0&&e.b===0)return new ge(NaN,0(e(i=new Date(+i)),i),a.ceil=i=>(e(i=new Date(i-1)),t(i,1),e(i),i),a.round=i=>{const s=a(i),g=a.ceil(i);return i-s(t(i=new Date(+i),s==null?1:Math.floor(s)),i),a.range=(i,s,g)=>{const k=[];if(i=a.ceil(i),g=g==null?1:Math.floor(g),!(i0))return k;let v;do k.push(v=new Date(+i)),t(i,g),e(i);while(v$(s=>{if(s>=s)for(;e(s),!i(s);)s.setTime(s-1)},(s,g)=>{if(s>=s)if(g<0)for(;++g<=0;)for(;t(s,-1),!i(s););else for(;--g>=0;)for(;t(s,1),!i(s););}),r&&(a.count=(i,s)=>(mt.setTime(+i),gt.setTime(+s),e(mt),e(gt),Math.floor(r(mt,gt))),a.every=i=>(i=Math.floor(i),!isFinite(i)||!(i>0)?null:i>1?a.filter(n?s=>n(s)%i===0:s=>a.count(0,s)%i===0):a)),a}const Ee=$(()=>{},(e,t)=>{e.setTime(+e+t)},(e,t)=>t-e);Ee.every=e=>(e=Math.floor(e),!isFinite(e)||!(e>0)?null:e>1?$(t=>{t.setTime(Math.floor(t/e)*e)},(t,r)=>{t.setTime(+t+r*e)},(t,r)=>(r-t)/e):Ee);Ee.range;const ye=1e3,se=ye*60,ke=se*60,ve=ke*24,St=ve*7,zt=ve*30,yt=ve*365,Te=$(e=>{e.setTime(e-e.getMilliseconds())},(e,t)=>{e.setTime(+e+t*ye)},(e,t)=>(t-e)/ye,e=>e.getUTCSeconds());Te.range;const Ve=$(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*ye)},(e,t)=>{e.setTime(+e+t*se)},(e,t)=>(t-e)/se,e=>e.getMinutes());Ve.range;const pn=$(e=>{e.setUTCSeconds(0,0)},(e,t)=>{e.setTime(+e+t*se)},(e,t)=>(t-e)/se,e=>e.getUTCMinutes());pn.range;const Pe=$(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*ye-e.getMinutes()*se)},(e,t)=>{e.setTime(+e+t*ke)},(e,t)=>(t-e)/ke,e=>e.getHours());Pe.range;const Tn=$(e=>{e.setUTCMinutes(0,0,0)},(e,t)=>{e.setTime(+e+t*ke)},(e,t)=>(t-e)/ke,e=>e.getUTCHours());Tn.range;const xe=$(e=>e.setHours(0,0,0,0),(e,t)=>e.setDate(e.getDate()+t),(e,t)=>(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*se)/ve,e=>e.getDate()-1);xe.range;const _t=$(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/ve,e=>e.getUTCDate()-1);_t.range;const bn=$(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/ve,e=>Math.floor(e/ve));bn.range;function Ce(e){return $(t=>{t.setDate(t.getDate()-(t.getDay()+7-e)%7),t.setHours(0,0,0,0)},(t,r)=>{t.setDate(t.getDate()+r*7)},(t,r)=>(r-t-(r.getTimezoneOffset()-t.getTimezoneOffset())*se)/St)}const Be=Ce(0),ze=Ce(1),kr=Ce(2),vr=Ce(3),we=Ce(4),pr=Ce(5),Tr=Ce(6);Be.range;ze.range;kr.range;vr.range;we.range;pr.range;Tr.range;function Me(e){return $(t=>{t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7),t.setUTCHours(0,0,0,0)},(t,r)=>{t.setUTCDate(t.getUTCDate()+r*7)},(t,r)=>(r-t)/St)}const br=Me(0),nt=Me(1),xn=Me(2),wn=Me(3),Ie=Me(4),Dn=Me(5),Cn=Me(6);br.range;nt.range;xn.range;wn.range;Ie.range;Dn.range;Cn.range;const Re=$(e=>{e.setDate(1),e.setHours(0,0,0,0)},(e,t)=>{e.setMonth(e.getMonth()+t)},(e,t)=>t.getMonth()-e.getMonth()+(t.getFullYear()-e.getFullYear())*12,e=>e.getMonth());Re.range;const Mn=$(e=>{e.setUTCDate(1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCMonth(e.getUTCMonth()+t)},(e,t)=>t.getUTCMonth()-e.getUTCMonth()+(t.getUTCFullYear()-e.getUTCFullYear())*12,e=>e.getUTCMonth());Mn.range;const pe=$(e=>{e.setMonth(0,1),e.setHours(0,0,0,0)},(e,t)=>{e.setFullYear(e.getFullYear()+t)},(e,t)=>t.getFullYear()-e.getFullYear(),e=>e.getFullYear());pe.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:$(t=>{t.setFullYear(Math.floor(t.getFullYear()/e)*e),t.setMonth(0,1),t.setHours(0,0,0,0)},(t,r)=>{t.setFullYear(t.getFullYear()+r*e)});pe.range;const De=$(e=>{e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCFullYear(e.getUTCFullYear()+t)},(e,t)=>t.getUTCFullYear()-e.getUTCFullYear(),e=>e.getUTCFullYear());De.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:$(t=>{t.setUTCFullYear(Math.floor(t.getUTCFullYear()/e)*e),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,r)=>{t.setUTCFullYear(t.getUTCFullYear()+r*e)});De.range;function Sn(e,t,r,n,a,i){const s=[[Te,1,ye],[Te,5,5*ye],[Te,15,15*ye],[Te,30,30*ye],[i,1,se],[i,5,5*se],[i,15,15*se],[i,30,30*se],[a,1,ke],[a,3,3*ke],[a,6,6*ke],[a,12,12*ke],[n,1,ve],[n,2,2*ve],[r,1,St],[t,1,zt],[t,3,3*zt],[e,1,yt]];function g(v,y,S){const C=yB).right(s,C);if(p===s.length)return e.every(Vt(v/yt,y/yt,S));if(p===0)return Ee.every(Math.max(Vt(v,y,S),1));const[N,M]=s[C/s[p-1][2]53)return null;"w"in l||(l.w=1),"Z"in l?(U=vt(Le(l.y,0,1)),G=U.getUTCDay(),U=G>4||G===0?nt.ceil(U):nt(U),U=_t.offset(U,(l.V-1)*7),l.y=U.getUTCFullYear(),l.m=U.getUTCMonth(),l.d=U.getUTCDate()+(l.w+6)%7):(U=kt(Le(l.y,0,1)),G=U.getDay(),U=G>4||G===0?ze.ceil(U):ze(U),U=xe.offset(U,(l.V-1)*7),l.y=U.getFullYear(),l.m=U.getMonth(),l.d=U.getDate()+(l.w+6)%7)}else("W"in l||"U"in l)&&("w"in l||(l.w="u"in l?l.u%7:"W"in l?1:0),G="Z"in l?vt(Le(l.y,0,1)).getUTCDay():kt(Le(l.y,0,1)).getDay(),l.m=0,l.d="W"in l?(l.w+6)%7+l.W*7-(G+5)%7:l.w+l.U*7-(G+6)%7);return"Z"in l?(l.H+=l.Z/100|0,l.M+=l.Z%100,vt(l)):kt(l)}}function D(T,I,W,l){for(var re=0,U=I.length,G=W.length,z,ce;re=G)return-1;if(z=I.charCodeAt(re++),z===37){if(z=I.charAt(re++),ce=j[z in Rt?I.charAt(re++):z],!ce||(l=ce(T,W,l))<0)return-1}else if(z!=W.charCodeAt(l++))return-1}return l}function F(T,I,W){var l=v.exec(I.slice(W));return l?(T.p=y.get(l[0].toLowerCase()),W+l[0].length):-1}function _(T,I,W){var l=p.exec(I.slice(W));return l?(T.w=N.get(l[0].toLowerCase()),W+l[0].length):-1}function Y(T,I,W){var l=S.exec(I.slice(W));return l?(T.w=C.get(l[0].toLowerCase()),W+l[0].length):-1}function x(T,I,W){var l=Q.exec(I.slice(W));return l?(T.m=K.get(l[0].toLowerCase()),W+l[0].length):-1}function A(T,I,W){var l=M.exec(I.slice(W));return l?(T.m=B.get(l[0].toLowerCase()),W+l[0].length):-1}function u(T,I,W){return D(T,t,I,W)}function d(T,I,W){return D(T,r,I,W)}function b(T,I,W){return D(T,n,I,W)}function m(T){return s[T.getDay()]}function E(T){return i[T.getDay()]}function c(T){return k[T.getMonth()]}function h(T){return g[T.getMonth()]}function o(T){return a[+(T.getHours()>=12)]}function P(T){return 1+~~(T.getMonth()/3)}function O(T){return s[T.getUTCDay()]}function V(T){return i[T.getUTCDay()]}function ee(T){return k[T.getUTCMonth()]}function q(T){return g[T.getUTCMonth()]}function X(T){return a[+(T.getUTCHours()>=12)]}function oe(T){return 1+~~(T.getUTCMonth()/3)}return{format:function(T){var I=w(T+="",R);return I.toString=function(){return T},I},parse:function(T){var I=L(T+="",!1);return I.toString=function(){return T},I},utcFormat:function(T){var I=w(T+="",Z);return I.toString=function(){return T},I},utcParse:function(T){var I=L(T+="",!0);return I.toString=function(){return T},I}}}var Rt={"-":"",_:" ",0:"0"},te=/^\s*\d+/,Un=/^%/,En=/[\\^$*+?|[\]().{}]/g;function H(e,t,r){var n=e<0?"-":"",a=(n?-e:e)+"",i=a.length;return n+(i[t.toLowerCase(),r]))}function An(e,t,r){var n=te.exec(t.slice(r,r+1));return n?(e.w=+n[0],r+n[0].length):-1}function Ln(e,t,r){var n=te.exec(t.slice(r,r+1));return n?(e.u=+n[0],r+n[0].length):-1}function Wn(e,t,r){var n=te.exec(t.slice(r,r+2));return n?(e.U=+n[0],r+n[0].length):-1}function On(e,t,r){var n=te.exec(t.slice(r,r+2));return n?(e.V=+n[0],r+n[0].length):-1}function Hn(e,t,r){var n=te.exec(t.slice(r,r+2));return n?(e.W=+n[0],r+n[0].length):-1}function Bt(e,t,r){var n=te.exec(t.slice(r,r+4));return n?(e.y=+n[0],r+n[0].length):-1}function Zt(e,t,r){var n=te.exec(t.slice(r,r+2));return n?(e.y=+n[0]+(+n[0]>68?1900:2e3),r+n[0].length):-1}function Nn(e,t,r){var n=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(t.slice(r,r+6));return n?(e.Z=n[1]?0:-(n[2]+(n[3]||"00")),r+n[0].length):-1}function Vn(e,t,r){var n=te.exec(t.slice(r,r+1));return n?(e.q=n[0]*3-3,r+n[0].length):-1}function Pn(e,t,r){var n=te.exec(t.slice(r,r+2));return n?(e.m=n[0]-1,r+n[0].length):-1}function qt(e,t,r){var n=te.exec(t.slice(r,r+2));return n?(e.d=+n[0],r+n[0].length):-1}function zn(e,t,r){var n=te.exec(t.slice(r,r+3));return n?(e.m=0,e.d=+n[0],r+n[0].length):-1}function Xt(e,t,r){var n=te.exec(t.slice(r,r+2));return n?(e.H=+n[0],r+n[0].length):-1}function Rn(e,t,r){var n=te.exec(t.slice(r,r+2));return n?(e.M=+n[0],r+n[0].length):-1}function Bn(e,t,r){var n=te.exec(t.slice(r,r+2));return n?(e.S=+n[0],r+n[0].length):-1}function Zn(e,t,r){var n=te.exec(t.slice(r,r+3));return n?(e.L=+n[0],r+n[0].length):-1}function qn(e,t,r){var n=te.exec(t.slice(r,r+6));return n?(e.L=Math.floor(n[0]/1e3),r+n[0].length):-1}function Xn(e,t,r){var n=Un.exec(t.slice(r,r+1));return n?r+n[0].length:-1}function Gn(e,t,r){var n=te.exec(t.slice(r));return n?(e.Q=+n[0],r+n[0].length):-1}function Qn(e,t,r){var n=te.exec(t.slice(r));return n?(e.s=+n[0],r+n[0].length):-1}function Gt(e,t){return H(e.getDate(),t,2)}function jn(e,t){return H(e.getHours(),t,2)}function Jn(e,t){return H(e.getHours()%12||12,t,2)}function $n(e,t){return H(1+xe.count(pe(e),e),t,3)}function xr(e,t){return H(e.getMilliseconds(),t,3)}function Kn(e,t){return xr(e,t)+"000"}function ea(e,t){return H(e.getMonth()+1,t,2)}function ta(e,t){return H(e.getMinutes(),t,2)}function ra(e,t){return H(e.getSeconds(),t,2)}function na(e){var t=e.getDay();return t===0?7:t}function aa(e,t){return H(Be.count(pe(e)-1,e),t,2)}function wr(e){var t=e.getDay();return t>=4||t===0?we(e):we.ceil(e)}function ia(e,t){return e=wr(e),H(we.count(pe(e),e)+(pe(e).getDay()===4),t,2)}function sa(e){return e.getDay()}function oa(e,t){return H(ze.count(pe(e)-1,e),t,2)}function ca(e,t){return H(e.getFullYear()%100,t,2)}function la(e,t){return e=wr(e),H(e.getFullYear()%100,t,2)}function ua(e,t){return H(e.getFullYear()%1e4,t,4)}function fa(e,t){var r=e.getDay();return e=r>=4||r===0?we(e):we.ceil(e),H(e.getFullYear()%1e4,t,4)}function ha(e){var t=e.getTimezoneOffset();return(t>0?"-":(t*=-1,"+"))+H(t/60|0,"0",2)+H(t%60,"0",2)}function Qt(e,t){return H(e.getUTCDate(),t,2)}function da(e,t){return H(e.getUTCHours(),t,2)}function ma(e,t){return H(e.getUTCHours()%12||12,t,2)}function ga(e,t){return H(1+_t.count(De(e),e),t,3)}function Dr(e,t){return H(e.getUTCMilliseconds(),t,3)}function ya(e,t){return Dr(e,t)+"000"}function ka(e,t){return H(e.getUTCMonth()+1,t,2)}function va(e,t){return H(e.getUTCMinutes(),t,2)}function pa(e,t){return H(e.getUTCSeconds(),t,2)}function Ta(e){var t=e.getUTCDay();return t===0?7:t}function ba(e,t){return H(br.count(De(e)-1,e),t,2)}function Cr(e){var t=e.getUTCDay();return t>=4||t===0?Ie(e):Ie.ceil(e)}function xa(e,t){return e=Cr(e),H(Ie.count(De(e),e)+(De(e).getUTCDay()===4),t,2)}function wa(e){return e.getUTCDay()}function Da(e,t){return H(nt.count(De(e)-1,e),t,2)}function Ca(e,t){return H(e.getUTCFullYear()%100,t,2)}function Ma(e,t){return e=Cr(e),H(e.getUTCFullYear()%100,t,2)}function Sa(e,t){return H(e.getUTCFullYear()%1e4,t,4)}function _a(e,t){var r=e.getUTCDay();return e=r>=4||r===0?Ie(e):Ie.ceil(e),H(e.getUTCFullYear()%1e4,t,4)}function Ya(){return"+0000"}function jt(){return"%"}function Jt(e){return+e}function $t(e){return Math.floor(+e/1e3)}var _e,at;Fa({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function Fa(e){return _e=Fn(e),at=_e.format,_e.parse,_e.utcFormat,_e.utcParse,_e}function Ua(e){return new Date(e)}function Ea(e){return e instanceof Date?+e:+new Date(+e)}function Mr(e,t,r,n,a,i,s,g,k,v){var y=jr(),S=y.invert,C=y.domain,p=v(".%L"),N=v(":%S"),M=v("%I:%M"),B=v("%I %p"),Q=v("%a %d"),K=v("%b %d"),R=v("%B"),Z=v("%Y");function j(w){return(k(w)4&&(S+=7),y.add(S,pt)},a=function(k){return k.add(4-k.isoWeekday(),pt)},i=t.prototype;i.isoWeekYear=function(){var g=a(this);return g.year()},i.isoWeek=function(g){if(!this.$utils().u(g))return this.add((g-this.isoWeek())*7,pt);var k=a(this),v=n(this.isoWeekYear(),this.$u);return k.diff(v,Aa)+1},i.isoWeekday=function(g){return this.$utils().u(g)?this.day()||7:this.day(this.day()%7?g:g-7)};var s=i.startOf;i.startOf=function(g,k){var v=this.$utils(),y=v.u(k)?!0:k,S=v.p(g);return S===Oa?y?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):s.bind(this)(g,k)}};var Na=function(t){return t.replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,function(r,n,a){return n||a.slice(1)})},Va={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},Pa=function(t,r){return t.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,function(n,a,i){var s=i&&i.toUpperCase();return a||r[i]||Va[i]||Na(r[s])})},za=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,Kt=/\d/,He=/\d\d/,Ra=/\d{3}/,Ba=/\d{4}/,le=/\d\d?/,Za=/[+-]?\d+/,qa=/[+-]\d\d:?(\d\d)?|Z/,Ne=/\d*[^-_:/,()\s\d]+/,be={},Sr=function(t){return t=+t,t+(t>68?1900:2e3)};function Xa(e){if(!e||e==="Z")return 0;var t=e.match(/([+-]|\d\d)/g),r=+(t[1]*60)+(+t[2]||0);return r===0?0:t[0]==="+"?-r:r}var ne=function(t){return function(r){this[t]=+r}},er=[qa,function(e){var t=this.zone||(this.zone={});t.offset=Xa(e)}],Tt=function(t){var r=be[t];return r&&(r.indexOf?r:r.s.concat(r.f))},tr=function(t,r){var n,a=be,i=a.meridiem;if(!i)n=t===(r?"pm":"PM");else for(var s=1;s<=24;s+=1)if(t.indexOf(i(s,0,r))>-1){n=s>12;break}return n},Ga={A:[Ne,function(e){this.afternoon=tr(e,!1)}],a:[Ne,function(e){this.afternoon=tr(e,!0)}],Q:[Kt,function(e){this.month=(e-1)*3+1}],S:[Kt,function(e){this.milliseconds=+e*100}],SS:[He,function(e){this.milliseconds=+e*10}],SSS:[Ra,function(e){this.milliseconds=+e}],s:[le,ne("seconds")],ss:[le,ne("seconds")],m:[le,ne("minutes")],mm:[le,ne("minutes")],H:[le,ne("hours")],h:[le,ne("hours")],HH:[le,ne("hours")],hh:[le,ne("hours")],D:[le,ne("day")],DD:[He,ne("day")],Do:[Ne,function(e){var t=be,r=t.ordinal,n=e.match(/\d+/);if(this.day=n[0],!!r)for(var a=1;a<=31;a+=1)r(a).replace(/\[|\]/g,"")===e&&(this.day=a)}],w:[le,ne("week")],ww:[He,ne("week")],M:[le,ne("month")],MM:[He,ne("month")],MMM:[Ne,function(e){var t=Tt("months"),r=Tt("monthsShort"),n=(r||t.map(function(a){return a.slice(0,3)})).indexOf(e)+1;if(n<1)throw new Error;this.month=n%12||n}],MMMM:[Ne,function(e){var t=Tt("months"),r=t.indexOf(e)+1;if(r<1)throw new Error;this.month=r%12||r}],Y:[Za,ne("year")],YY:[He,function(e){this.year=Sr(e)}],YYYY:[Ba,ne("year")],Z:er,ZZ:er};function Qa(e){var t=e.afternoon;if(t!==void 0){var r=e.hours;t?r<12&&(e.hours+=12):r===12&&(e.hours=0),delete e.afternoon}}function ja(e){e=Pa(e,be&&be.formats);for(var t=e.match(za),r=t.length,n=0;n-1)return new Date((r==="X"?1e3:1)*t);var i=ja(r),s=i(t),g=s.year,k=s.month,v=s.day,y=s.hours,S=s.minutes,C=s.seconds,p=s.milliseconds,N=s.zone,M=s.week,B=new Date,Q=v||(!g&&!k?B.getDate():1),K=g||B.getFullYear(),R=0;g&&!k||(R=k>0?k-1:B.getMonth());var Z=y||0,j=S||0,w=C||0,L=p||0;if(N)return new Date(Date.UTC(K,R,Q,Z,j,w,L+N.offset*60*1e3));if(n)return new Date(Date.UTC(K,R,Q,Z,j,w,L));var D;return D=new Date(K,R,Q,Z,j,w,L),M&&(D=a(D).week(M).toDate()),D}catch{return new Date("")}};const $a=function(e,t,r){r.p.customParseFormat=!0,e&&e.parseTwoDigitYear&&(Sr=e.parseTwoDigitYear);var n=t.prototype,a=n.parse;n.parse=function(i){var s=i.date,g=i.utc,k=i.args;this.$u=g;var v=k[1];if(typeof v=="string"){var y=k[2]===!0,S=k[3]===!0,C=y||S,p=k[2];S&&(p=k[2]),be=this.$locale(),!y&&p&&(be=r.Ls[p]),this.$d=Ja(s,v,g,r),this.init(),p&&p!==!0&&(this.$L=this.locale(p).$L),C&&s!=this.format(v)&&(this.$d=new Date("")),be={}}else if(v instanceof Array)for(var N=v.length,M=1;M<=N;M+=1){k[1]=v[M-1];var B=r.apply(this,k);if(B.isValid()){this.$d=B.$d,this.$L=B.$L,this.init();break}M===N&&(this.$d=new Date(""))}else a.call(this,i)}},Ka=function(e,t){var r=t.prototype,n=r.format;r.format=function(a){var i=this,s=this.$locale();if(!this.isValid())return n.bind(this)(a);var g=this.$utils(),k=a||Wa,v=k.replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,function(y){switch(y){case"Q":return Math.ceil((i.$M+1)/3);case"Do":return s.ordinal(i.$D);case"gggg":return i.weekYear();case"GGGG":return i.isoWeekYear();case"wo":return s.ordinal(i.week(),"W");case"w":case"ww":return g.s(i.week(),y==="w"?1:2,"0");case"W":case"WW":return g.s(i.isoWeek(),y==="W"?1:2,"0");case"k":case"kk":return g.s(String(i.$H===0?24:i.$H),y==="k"?1:2,"0");case"X":return Math.floor(i.$d.getTime()/1e3);case"x":return i.$d.getTime();case"z":return"["+i.offsetName()+"]";case"zzz":return"["+i.offsetName("long")+"]";default:return y}});return n.bind(this)(v)}};var wt=function(){var e=f(function(A,u,d,b){for(d=d||{},b=A.length;b--;d[A[b]]=u);return d},"o"),t=[6,8,10,12,13,14,15,16,17,18,20,21,22,23,24,25,26,27,28,29,30,31,33,35,36,38,40],r=[1,26],n=[1,27],a=[1,28],i=[1,29],s=[1,30],g=[1,31],k=[1,32],v=[1,33],y=[1,34],S=[1,9],C=[1,10],p=[1,11],N=[1,12],M=[1,13],B=[1,14],Q=[1,15],K=[1,16],R=[1,19],Z=[1,20],j=[1,21],w=[1,22],L=[1,23],D=[1,25],F=[1,35],_={trace:f(function(){},"trace"),yy:{},symbols_:{error:2,start:3,gantt:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NL:10,weekday:11,weekday_monday:12,weekday_tuesday:13,weekday_wednesday:14,weekday_thursday:15,weekday_friday:16,weekday_saturday:17,weekday_sunday:18,weekend:19,weekend_friday:20,weekend_saturday:21,dateFormat:22,inclusiveEndDates:23,topAxis:24,axisFormat:25,tickInterval:26,excludes:27,includes:28,todayMarker:29,title:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,section:36,clickStatement:37,taskTxt:38,taskData:39,click:40,callbackname:41,callbackargs:42,href:43,clickStatementDebug:44,$accept:0,$end:1},terminals_:{2:"error",4:"gantt",6:"EOF",8:"SPACE",10:"NL",12:"weekday_monday",13:"weekday_tuesday",14:"weekday_wednesday",15:"weekday_thursday",16:"weekday_friday",17:"weekday_saturday",18:"weekday_sunday",20:"weekend_friday",21:"weekend_saturday",22:"dateFormat",23:"inclusiveEndDates",24:"topAxis",25:"axisFormat",26:"tickInterval",27:"excludes",28:"includes",29:"todayMarker",30:"title",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",36:"section",38:"taskTxt",39:"taskData",40:"click",41:"callbackname",42:"callbackargs",43:"href"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[19,1],[19,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,2],[37,2],[37,3],[37,3],[37,4],[37,3],[37,4],[37,2],[44,2],[44,3],[44,3],[44,4],[44,3],[44,4],[44,2]],performAction:f(function(u,d,b,m,E,c,h){var o=c.length-1;switch(E){case 1:return c[o-1];case 2:this.$=[];break;case 3:c[o-1].push(c[o]),this.$=c[o-1];break;case 4:case 5:this.$=c[o];break;case 6:case 7:this.$=[];break;case 8:m.setWeekday("monday");break;case 9:m.setWeekday("tuesday");break;case 10:m.setWeekday("wednesday");break;case 11:m.setWeekday("thursday");break;case 12:m.setWeekday("friday");break;case 13:m.setWeekday("saturday");break;case 14:m.setWeekday("sunday");break;case 15:m.setWeekend("friday");break;case 16:m.setWeekend("saturday");break;case 17:m.setDateFormat(c[o].substr(11)),this.$=c[o].substr(11);break;case 18:m.enableInclusiveEndDates(),this.$=c[o].substr(18);break;case 19:m.TopAxis(),this.$=c[o].substr(8);break;case 20:m.setAxisFormat(c[o].substr(11)),this.$=c[o].substr(11);break;case 21:m.setTickInterval(c[o].substr(13)),this.$=c[o].substr(13);break;case 22:m.setExcludes(c[o].substr(9)),this.$=c[o].substr(9);break;case 23:m.setIncludes(c[o].substr(9)),this.$=c[o].substr(9);break;case 24:m.setTodayMarker(c[o].substr(12)),this.$=c[o].substr(12);break;case 27:m.setDiagramTitle(c[o].substr(6)),this.$=c[o].substr(6);break;case 28:this.$=c[o].trim(),m.setAccTitle(this.$);break;case 29:case 30:this.$=c[o].trim(),m.setAccDescription(this.$);break;case 31:m.addSection(c[o].substr(8)),this.$=c[o].substr(8);break;case 33:m.addTask(c[o-1],c[o]),this.$="task";break;case 34:this.$=c[o-1],m.setClickEvent(c[o-1],c[o],null);break;case 35:this.$=c[o-2],m.setClickEvent(c[o-2],c[o-1],c[o]);break;case 36:this.$=c[o-2],m.setClickEvent(c[o-2],c[o-1],null),m.setLink(c[o-2],c[o]);break;case 37:this.$=c[o-3],m.setClickEvent(c[o-3],c[o-2],c[o-1]),m.setLink(c[o-3],c[o]);break;case 38:this.$=c[o-2],m.setClickEvent(c[o-2],c[o],null),m.setLink(c[o-2],c[o-1]);break;case 39:this.$=c[o-3],m.setClickEvent(c[o-3],c[o-1],c[o]),m.setLink(c[o-3],c[o-2]);break;case 40:this.$=c[o-1],m.setLink(c[o-1],c[o]);break;case 41:case 47:this.$=c[o-1]+" "+c[o];break;case 42:case 43:case 45:this.$=c[o-2]+" "+c[o-1]+" "+c[o];break;case 44:case 46:this.$=c[o-3]+" "+c[o-2]+" "+c[o-1]+" "+c[o];break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},e(t,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:17,12:r,13:n,14:a,15:i,16:s,17:g,18:k,19:18,20:v,21:y,22:S,23:C,24:p,25:N,26:M,27:B,28:Q,29:K,30:R,31:Z,33:j,35:w,36:L,37:24,38:D,40:F},e(t,[2,7],{1:[2,1]}),e(t,[2,3]),{9:36,11:17,12:r,13:n,14:a,15:i,16:s,17:g,18:k,19:18,20:v,21:y,22:S,23:C,24:p,25:N,26:M,27:B,28:Q,29:K,30:R,31:Z,33:j,35:w,36:L,37:24,38:D,40:F},e(t,[2,5]),e(t,[2,6]),e(t,[2,17]),e(t,[2,18]),e(t,[2,19]),e(t,[2,20]),e(t,[2,21]),e(t,[2,22]),e(t,[2,23]),e(t,[2,24]),e(t,[2,25]),e(t,[2,26]),e(t,[2,27]),{32:[1,37]},{34:[1,38]},e(t,[2,30]),e(t,[2,31]),e(t,[2,32]),{39:[1,39]},e(t,[2,8]),e(t,[2,9]),e(t,[2,10]),e(t,[2,11]),e(t,[2,12]),e(t,[2,13]),e(t,[2,14]),e(t,[2,15]),e(t,[2,16]),{41:[1,40],43:[1,41]},e(t,[2,4]),e(t,[2,28]),e(t,[2,29]),e(t,[2,33]),e(t,[2,34],{42:[1,42],43:[1,43]}),e(t,[2,40],{41:[1,44]}),e(t,[2,35],{43:[1,45]}),e(t,[2,36]),e(t,[2,38],{42:[1,46]}),e(t,[2,37]),e(t,[2,39])],defaultActions:{},parseError:f(function(u,d){if(d.recoverable)this.trace(u);else{var b=new Error(u);throw b.hash=d,b}},"parseError"),parse:f(function(u){var d=this,b=[0],m=[],E=[null],c=[],h=this.table,o="",P=0,O=0,V=2,ee=1,q=c.slice.call(arguments,1),X=Object.create(this.lexer),oe={yy:{}};for(var T in this.yy)Object.prototype.hasOwnProperty.call(this.yy,T)&&(oe.yy[T]=this.yy[T]);X.setInput(u,oe.yy),oe.yy.lexer=X,oe.yy.parser=this,typeof X.yylloc>"u"&&(X.yylloc={});var I=X.yylloc;c.push(I);var W=X.options&&X.options.ranges;typeof oe.yy.parseError=="function"?this.parseError=oe.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function l(ie){b.length=b.length-2*ie,E.length=E.length-ie,c.length=c.length-ie}f(l,"popStack");function re(){var ie;return ie=m.pop()||X.lex()||ee,typeof ie!="number"&&(ie instanceof Array&&(m=ie,ie=m.pop()),ie=d.symbols_[ie]||ie),ie}f(re,"lex");for(var U,G,z,ce,he={},Ge,de,Nt,Qe;;){if(G=b[b.length-1],this.defaultActions[G]?z=this.defaultActions[G]:((U===null||typeof U>"u")&&(U=re()),z=h[G]&&h[G][U]),typeof z>"u"||!z.length||!z[0]){var ot="";Qe=[];for(Ge in h[G])this.terminals_[Ge]&&Ge>V&&Qe.push("'"+this.terminals_[Ge]+"'");X.showPosition?ot="Parse error on line "+(P+1)+`: +`+X.showPosition()+` +Expecting `+Qe.join(", ")+", got '"+(this.terminals_[U]||U)+"'":ot="Parse error on line "+(P+1)+": Unexpected "+(U==ee?"end of input":"'"+(this.terminals_[U]||U)+"'"),this.parseError(ot,{text:X.match,token:this.terminals_[U]||U,line:X.yylineno,loc:I,expected:Qe})}if(z[0]instanceof Array&&z.length>1)throw new Error("Parse Error: multiple actions possible at state: "+G+", token: "+U);switch(z[0]){case 1:b.push(U),E.push(X.yytext),c.push(X.yylloc),b.push(z[1]),U=null,O=X.yyleng,o=X.yytext,P=X.yylineno,I=X.yylloc;break;case 2:if(de=this.productions_[z[1]][1],he.$=E[E.length-de],he._$={first_line:c[c.length-(de||1)].first_line,last_line:c[c.length-1].last_line,first_column:c[c.length-(de||1)].first_column,last_column:c[c.length-1].last_column},W&&(he._$.range=[c[c.length-(de||1)].range[0],c[c.length-1].range[1]]),ce=this.performAction.apply(he,[o,O,P,oe.yy,z[1],E,c].concat(q)),typeof ce<"u")return ce;de&&(b=b.slice(0,-1*de*2),E=E.slice(0,-1*de),c=c.slice(0,-1*de)),b.push(this.productions_[z[1]][0]),E.push(he.$),c.push(he._$),Nt=h[b[b.length-2]][b[b.length-1]],b.push(Nt);break;case 3:return!0}}return!0},"parse")},Y=function(){var A={EOF:1,parseError:f(function(d,b){if(this.yy.parser)this.yy.parser.parseError(d,b);else throw new Error(d)},"parseError"),setInput:f(function(u,d){return this.yy=d||this.yy||{},this._input=u,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:f(function(){var u=this._input[0];this.yytext+=u,this.yyleng++,this.offset++,this.match+=u,this.matched+=u;var d=u.match(/(?:\r\n?|\n).*/g);return d?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),u},"input"),unput:f(function(u){var d=u.length,b=u.split(/(?:\r\n?|\n)/g);this._input=u+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-d),this.offset-=d;var m=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),b.length-1&&(this.yylineno-=b.length-1);var E=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:b?(b.length===m.length?this.yylloc.first_column:0)+m[m.length-b.length].length-b[0].length:this.yylloc.first_column-d},this.options.ranges&&(this.yylloc.range=[E[0],E[0]+this.yyleng-d]),this.yyleng=this.yytext.length,this},"unput"),more:f(function(){return this._more=!0,this},"more"),reject:f(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:f(function(u){this.unput(this.match.slice(u))},"less"),pastInput:f(function(){var u=this.matched.substr(0,this.matched.length-this.match.length);return(u.length>20?"...":"")+u.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:f(function(){var u=this.match;return u.length<20&&(u+=this._input.substr(0,20-u.length)),(u.substr(0,20)+(u.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:f(function(){var u=this.pastInput(),d=new Array(u.length+1).join("-");return u+this.upcomingInput()+` +`+d+"^"},"showPosition"),test_match:f(function(u,d){var b,m,E;if(this.options.backtrack_lexer&&(E={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(E.yylloc.range=this.yylloc.range.slice(0))),m=u[0].match(/(?:\r\n?|\n).*/g),m&&(this.yylineno+=m.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:m?m[m.length-1].length-m[m.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+u[0].length},this.yytext+=u[0],this.match+=u[0],this.matches=u,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(u[0].length),this.matched+=u[0],b=this.performAction.call(this,this.yy,this,d,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),b)return b;if(this._backtrack){for(var c in E)this[c]=E[c];return!1}return!1},"test_match"),next:f(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var u,d,b,m;this._more||(this.yytext="",this.match="");for(var E=this._currentRules(),c=0;cd[0].length)){if(d=b,m=c,this.options.backtrack_lexer){if(u=this.test_match(b,E[c]),u!==!1)return u;if(this._backtrack){d=!1;continue}else return!1}else if(!this.options.flex)break}return d?(u=this.test_match(d,E[m]),u!==!1?u:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:f(function(){var d=this.next();return d||this.lex()},"lex"),begin:f(function(d){this.conditionStack.push(d)},"begin"),popState:f(function(){var d=this.conditionStack.length-1;return d>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:f(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:f(function(d){return d=this.conditionStack.length-1-Math.abs(d||0),d>=0?this.conditionStack[d]:"INITIAL"},"topState"),pushState:f(function(d){this.begin(d)},"pushState"),stateStackSize:f(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:f(function(d,b,m,E){switch(m){case 0:return this.begin("open_directive"),"open_directive";case 1:return this.begin("acc_title"),31;case 2:return this.popState(),"acc_title_value";case 3:return this.begin("acc_descr"),33;case 4:return this.popState(),"acc_descr_value";case 5:this.begin("acc_descr_multiline");break;case 6:this.popState();break;case 7:return"acc_descr_multiline_value";case 8:break;case 9:break;case 10:break;case 11:return 10;case 12:break;case 13:break;case 14:this.begin("href");break;case 15:this.popState();break;case 16:return 43;case 17:this.begin("callbackname");break;case 18:this.popState();break;case 19:this.popState(),this.begin("callbackargs");break;case 20:return 41;case 21:this.popState();break;case 22:return 42;case 23:this.begin("click");break;case 24:this.popState();break;case 25:return 40;case 26:return 4;case 27:return 22;case 28:return 23;case 29:return 24;case 30:return 25;case 31:return 26;case 32:return 28;case 33:return 27;case 34:return 29;case 35:return 12;case 36:return 13;case 37:return 14;case 38:return 15;case 39:return 16;case 40:return 17;case 41:return 18;case 42:return 20;case 43:return 21;case 44:return"date";case 45:return 30;case 46:return"accDescription";case 47:return 36;case 48:return 38;case 49:return 39;case 50:return":";case 51:return 6;case 52:return"INVALID"}},"anonymous"),rules:[/^(?:%%\{)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:%%(?!\{)*[^\n]*)/i,/^(?:[^\}]%%*[^\n]*)/i,/^(?:%%*[^\n]*[\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:%[^\n]*)/i,/^(?:href[\s]+["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:call[\s]+)/i,/^(?:\([\s]*\))/i,/^(?:\()/i,/^(?:[^(]*)/i,/^(?:\))/i,/^(?:[^)]*)/i,/^(?:click[\s]+)/i,/^(?:[\s\n])/i,/^(?:[^\s\n]*)/i,/^(?:gantt\b)/i,/^(?:dateFormat\s[^#\n;]+)/i,/^(?:inclusiveEndDates\b)/i,/^(?:topAxis\b)/i,/^(?:axisFormat\s[^#\n;]+)/i,/^(?:tickInterval\s[^#\n;]+)/i,/^(?:includes\s[^#\n;]+)/i,/^(?:excludes\s[^#\n;]+)/i,/^(?:todayMarker\s[^\n;]+)/i,/^(?:weekday\s+monday\b)/i,/^(?:weekday\s+tuesday\b)/i,/^(?:weekday\s+wednesday\b)/i,/^(?:weekday\s+thursday\b)/i,/^(?:weekday\s+friday\b)/i,/^(?:weekday\s+saturday\b)/i,/^(?:weekday\s+sunday\b)/i,/^(?:weekend\s+friday\b)/i,/^(?:weekend\s+saturday\b)/i,/^(?:\d\d\d\d-\d\d-\d\d\b)/i,/^(?:title\s[^\n]+)/i,/^(?:accDescription\s[^#\n;]+)/i,/^(?:section\s[^\n]+)/i,/^(?:[^:\n]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[6,7],inclusive:!1},acc_descr:{rules:[4],inclusive:!1},acc_title:{rules:[2],inclusive:!1},callbackargs:{rules:[21,22],inclusive:!1},callbackname:{rules:[18,19,20],inclusive:!1},href:{rules:[15,16],inclusive:!1},click:{rules:[24,25],inclusive:!1},INITIAL:{rules:[0,1,3,5,8,9,10,11,12,13,14,17,23,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52],inclusive:!0}}};return A}();_.lexer=Y;function x(){this.yy={}}return f(x,"Parser"),x.prototype=_,_.Parser=x,new x}();wt.parser=wt;var ei=wt;ae.extend(Ha);ae.extend($a);ae.extend(Ka);var rr={friday:5,saturday:6},ue="",Yt="",Ft=void 0,Ut="",Ze=[],qe=[],Et=new Map,It=[],it=[],Ae="",At="",_r=["active","done","crit","milestone"],Lt=[],Xe=!1,Wt=!1,Ot="sunday",st="saturday",Dt=0,ti=f(function(){It=[],it=[],Ae="",Lt=[],Ke=0,Mt=void 0,et=void 0,J=[],ue="",Yt="",At="",Ft=void 0,Ut="",Ze=[],qe=[],Xe=!1,Wt=!1,Dt=0,Et=new Map,Br(),Ot="sunday",st="saturday"},"clear"),ri=f(function(e){Yt=e},"setAxisFormat"),ni=f(function(){return Yt},"getAxisFormat"),ai=f(function(e){Ft=e},"setTickInterval"),ii=f(function(){return Ft},"getTickInterval"),si=f(function(e){Ut=e},"setTodayMarker"),oi=f(function(){return Ut},"getTodayMarker"),ci=f(function(e){ue=e},"setDateFormat"),li=f(function(){Xe=!0},"enableInclusiveEndDates"),ui=f(function(){return Xe},"endDatesAreInclusive"),fi=f(function(){Wt=!0},"enableTopAxis"),hi=f(function(){return Wt},"topAxisEnabled"),di=f(function(e){At=e},"setDisplayMode"),mi=f(function(){return At},"getDisplayMode"),gi=f(function(){return ue},"getDateFormat"),yi=f(function(e){Ze=e.toLowerCase().split(/[\s,]+/)},"setIncludes"),ki=f(function(){return Ze},"getIncludes"),vi=f(function(e){qe=e.toLowerCase().split(/[\s,]+/)},"setExcludes"),pi=f(function(){return qe},"getExcludes"),Ti=f(function(){return Et},"getLinks"),bi=f(function(e){Ae=e,It.push(e)},"addSection"),xi=f(function(){return It},"getSections"),wi=f(function(){let e=nr();const t=10;let r=0;for(;!e&&r[\d\w- ]+)/.exec(r);if(a!==null){let s=null;for(const k of a.groups.ids.split(" ")){let v=Se(k);v!==void 0&&(!s||v.endTime>s.endTime)&&(s=v)}if(s)return s.endTime;const g=new Date;return g.setHours(0,0,0,0),g}let i=ae(r,t.trim(),!0);if(i.isValid())return i.toDate();{tt.debug("Invalid date:"+r),tt.debug("With date format:"+t.trim());const s=new Date(r);if(s===void 0||isNaN(s.getTime())||s.getFullYear()<-1e4||s.getFullYear()>1e4)throw new Error("Invalid date:"+r);return s}},"getStartDate"),Ur=f(function(e){const t=/^(\d+(?:\.\d+)?)([Mdhmswy]|ms)$/.exec(e.trim());return t!==null?[Number.parseFloat(t[1]),t[2]]:[NaN,"ms"]},"parseDuration"),Er=f(function(e,t,r,n=!1){r=r.trim();const i=/^until\s+(?[\d\w- ]+)/.exec(r);if(i!==null){let y=null;for(const C of i.groups.ids.split(" ")){let p=Se(C);p!==void 0&&(!y||p.startTime{window.open(r,"_self")}),Et.set(n,r))}),Ar(e,"clickable")},"setLink"),Ar=f(function(e,t){e.split(",").forEach(function(r){let n=Se(r);n!==void 0&&n.classes.push(t)})},"setClass"),Ii=f(function(e,t,r){if(Ye().securityLevel!=="loose"||t===void 0)return;let n=[];if(typeof r=="string"){n=r.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let i=0;i{Gr.runFunc(t,...n)})},"setClickFun"),Lr=f(function(e,t){Lt.push(function(){const r=document.querySelector(`[id="${e}"]`);r!==null&&r.addEventListener("click",function(){t()})},function(){const r=document.querySelector(`[id="${e}-text"]`);r!==null&&r.addEventListener("click",function(){t()})})},"pushFun"),Ai=f(function(e,t,r){e.split(",").forEach(function(n){Ii(n,t,r)}),Ar(e,"clickable")},"setClickEvent"),Li=f(function(e){Lt.forEach(function(t){t(e)})},"bindFunctions"),Wi={getConfig:f(()=>Ye().gantt,"getConfig"),clear:ti,setDateFormat:ci,getDateFormat:gi,enableInclusiveEndDates:li,endDatesAreInclusive:ui,enableTopAxis:fi,topAxisEnabled:hi,setAxisFormat:ri,getAxisFormat:ni,setTickInterval:ai,getTickInterval:ii,setTodayMarker:si,getTodayMarker:oi,setAccTitle:Hr,getAccTitle:Nr,setDiagramTitle:Vr,getDiagramTitle:Pr,setDisplayMode:di,getDisplayMode:mi,setAccDescription:zr,getAccDescription:Rr,addSection:bi,getSections:xi,getTasks:wi,addTask:Fi,findTaskById:Se,addTaskOrg:Ui,setIncludes:yi,getIncludes:ki,setExcludes:vi,getExcludes:pi,setClickEvent:Ai,setLink:Ei,getLinks:Ti,bindFunctions:Li,parseDuration:Ur,isInvalidDate:Yr,setWeekday:Di,getWeekday:Ci,setWeekend:Mi};function Ht(e,t,r){let n=!0;for(;n;)n=!1,r.forEach(function(a){const i="^\\s*"+a+"\\s*$",s=new RegExp(i);e[0].match(s)&&(t[a]=!0,e.shift(1),n=!0)})}f(Ht,"getTaskTags");var Oi=f(function(){tt.debug("Something is calling, setConf, remove the call")},"setConf"),ar={monday:ze,tuesday:kr,wednesday:vr,thursday:we,friday:pr,saturday:Tr,sunday:Be},Hi=f((e,t)=>{let r=[...e].map(()=>-1/0),n=[...e].sort((i,s)=>i.startTime-s.startTime||i.order-s.order),a=0;for(const i of n)for(let s=0;s=r[s]){r[s]=i.endTime,i.order=s+t,s>a&&(a=s);break}return a},"getMaxIntersections"),me,Ni=f(function(e,t,r,n){const a=Ye().gantt,i=Ye().securityLevel;let s;i==="sandbox"&&(s=je("#i"+t));const g=i==="sandbox"?je(s.nodes()[0].contentDocument.body):je("body"),k=i==="sandbox"?s.nodes()[0].contentDocument:document,v=k.getElementById(t);me=v.parentElement.offsetWidth,me===void 0&&(me=1200),a.useWidth!==void 0&&(me=a.useWidth);const y=n.db.getTasks();let S=[];for(const D of y)S.push(D.type);S=L(S);const C={};let p=2*a.topPadding;if(n.db.getDisplayMode()==="compact"||a.displayMode==="compact"){const D={};for(const _ of y)D[_.section]===void 0?D[_.section]=[_]:D[_.section].push(_);let F=0;for(const _ of Object.keys(D)){const Y=Hi(D[_],F)+1;F+=Y,p+=Y*(a.barHeight+a.barGap),C[_]=Y}}else{p+=y.length*(a.barHeight+a.barGap);for(const D of S)C[D]=y.filter(F=>F.type===D).length}v.setAttribute("viewBox","0 0 "+me+" "+p);const N=g.select(`[id="${t}"]`),M=Ia().domain([tn(y,function(D){return D.startTime}),en(y,function(D){return D.endTime})]).rangeRound([0,me-a.leftPadding-a.rightPadding]);function B(D,F){const _=D.startTime,Y=F.startTime;let x=0;return _>Y?x=1:_h.order))].map(h=>D.find(o=>o.order===h));N.append("g").selectAll("rect").data(b).enter().append("rect").attr("x",0).attr("y",function(h,o){return o=h.order,o*F+_-2}).attr("width",function(){return u-a.rightPadding/2}).attr("height",F).attr("class",function(h){for(const[o,P]of S.entries())if(h.type===P)return"section section"+o%a.numberSectionStyles;return"section section0"});const m=N.append("g").selectAll("rect").data(D).enter(),E=n.db.getLinks();if(m.append("rect").attr("id",function(h){return h.id}).attr("rx",3).attr("ry",3).attr("x",function(h){return h.milestone?M(h.startTime)+Y+.5*(M(h.endTime)-M(h.startTime))-.5*x:M(h.startTime)+Y}).attr("y",function(h,o){return o=h.order,o*F+_}).attr("width",function(h){return h.milestone?x:M(h.renderEndTime||h.endTime)-M(h.startTime)}).attr("height",x).attr("transform-origin",function(h,o){return o=h.order,(M(h.startTime)+Y+.5*(M(h.endTime)-M(h.startTime))).toString()+"px "+(o*F+_+.5*x).toString()+"px"}).attr("class",function(h){const o="task";let P="";h.classes.length>0&&(P=h.classes.join(" "));let O=0;for(const[ee,q]of S.entries())h.type===q&&(O=ee%a.numberSectionStyles);let V="";return h.active?h.crit?V+=" activeCrit":V=" active":h.done?h.crit?V=" doneCrit":V=" done":h.crit&&(V+=" crit"),V.length===0&&(V=" task"),h.milestone&&(V=" milestone "+V),V+=O,V+=" "+P,o+V}),m.append("text").attr("id",function(h){return h.id+"-text"}).text(function(h){return h.task}).attr("font-size",a.fontSize).attr("x",function(h){let o=M(h.startTime),P=M(h.renderEndTime||h.endTime);h.milestone&&(o+=.5*(M(h.endTime)-M(h.startTime))-.5*x),h.milestone&&(P=o+x);const O=this.getBBox().width;return O>P-o?P+O+1.5*a.leftPadding>u?o+Y-5:P+Y+5:(P-o)/2+o+Y}).attr("y",function(h,o){return o=h.order,o*F+a.barHeight/2+(a.fontSize/2-2)+_}).attr("text-height",x).attr("class",function(h){const o=M(h.startTime);let P=M(h.endTime);h.milestone&&(P=o+x);const O=this.getBBox().width;let V="";h.classes.length>0&&(V=h.classes.join(" "));let ee=0;for(const[X,oe]of S.entries())h.type===oe&&(ee=X%a.numberSectionStyles);let q="";return h.active&&(h.crit?q="activeCritText"+ee:q="activeText"+ee),h.done?h.crit?q=q+" doneCritText"+ee:q=q+" doneText"+ee:h.crit&&(q=q+" critText"+ee),h.milestone&&(q+=" milestoneText"),O>P-o?P+O+1.5*a.leftPadding>u?V+" taskTextOutsideLeft taskTextOutside"+ee+" "+q:V+" taskTextOutsideRight taskTextOutside"+ee+" "+q+" width-"+O:V+" taskText taskText"+ee+" "+q+" width-"+O}),Ye().securityLevel==="sandbox"){let h;h=je("#i"+t);const o=h.nodes()[0].contentDocument;m.filter(function(P){return E.has(P.id)}).each(function(P){var O=o.querySelector("#"+P.id),V=o.querySelector("#"+P.id+"-text");const ee=O.parentNode;var q=o.createElement("a");q.setAttribute("xlink:href",E.get(P.id)),q.setAttribute("target","_top"),ee.appendChild(q),q.appendChild(O),q.appendChild(V)})}}f(K,"drawRects");function R(D,F,_,Y,x,A,u,d){if(u.length===0&&d.length===0)return;let b,m;for(const{startTime:O,endTime:V}of A)(b===void 0||Om)&&(m=V);if(!b||!m)return;if(ae(m).diff(ae(b),"year")>5){tt.warn("The difference between the min and max time is more than 5 years. This will cause performance issues. Skipping drawing exclude days.");return}const E=n.db.getDateFormat(),c=[];let h=null,o=ae(b);for(;o.valueOf()<=m;)n.db.isInvalidDate(o,E,u,d)?h?h.end=o:h={start:o,end:o}:h&&(c.push(h),h=null),o=o.add(1,"d");N.append("g").selectAll("rect").data(c).enter().append("rect").attr("id",function(O){return"exclude-"+O.start.format("YYYY-MM-DD")}).attr("x",function(O){return M(O.start)+_}).attr("y",a.gridLineStartPadding).attr("width",function(O){const V=O.end.add(1,"day");return M(V)-M(O.start)}).attr("height",x-F-a.gridLineStartPadding).attr("transform-origin",function(O,V){return(M(O.start)+_+.5*(M(O.end)-M(O.start))).toString()+"px "+(V*D+.5*x).toString()+"px"}).attr("class","exclude-range")}f(R,"drawExcludeDays");function Z(D,F,_,Y){let x=un(M).tickSize(-Y+F+a.gridLineStartPadding).tickFormat(at(n.db.getAxisFormat()||a.axisFormat||"%Y-%m-%d"));const u=/^([1-9]\d*)(millisecond|second|minute|hour|day|week|month)$/.exec(n.db.getTickInterval()||a.tickInterval);if(u!==null){const d=u[1],b=u[2],m=n.db.getWeekday()||a.weekday;switch(b){case"millisecond":x.ticks(Ee.every(d));break;case"second":x.ticks(Te.every(d));break;case"minute":x.ticks(Ve.every(d));break;case"hour":x.ticks(Pe.every(d));break;case"day":x.ticks(xe.every(d));break;case"week":x.ticks(ar[m].every(d));break;case"month":x.ticks(Re.every(d));break}}if(N.append("g").attr("class","grid").attr("transform","translate("+D+", "+(Y-50)+")").call(x).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10).attr("dy","1em"),n.db.topAxisEnabled()||a.topAxis){let d=ln(M).tickSize(-Y+F+a.gridLineStartPadding).tickFormat(at(n.db.getAxisFormat()||a.axisFormat||"%Y-%m-%d"));if(u!==null){const b=u[1],m=u[2],E=n.db.getWeekday()||a.weekday;switch(m){case"millisecond":d.ticks(Ee.every(b));break;case"second":d.ticks(Te.every(b));break;case"minute":d.ticks(Ve.every(b));break;case"hour":d.ticks(Pe.every(b));break;case"day":d.ticks(xe.every(b));break;case"week":d.ticks(ar[E].every(b));break;case"month":d.ticks(Re.every(b));break}}N.append("g").attr("class","grid").attr("transform","translate("+D+", "+F+")").call(d).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10)}}f(Z,"makeGrid");function j(D,F){let _=0;const Y=Object.keys(C).map(x=>[x,C[x]]);N.append("g").selectAll("text").data(Y).enter().append(function(x){const A=x[0].split(Xr.lineBreakRegex),u=-(A.length-1)/2,d=k.createElementNS("http://www.w3.org/2000/svg","text");d.setAttribute("dy",u+"em");for(const[b,m]of A.entries()){const E=k.createElementNS("http://www.w3.org/2000/svg","tspan");E.setAttribute("alignment-baseline","central"),E.setAttribute("x","10"),b>0&&E.setAttribute("dy","1em"),E.textContent=m,d.appendChild(E)}return d}).attr("x",10).attr("y",function(x,A){if(A>0)for(let u=0;u` + .mermaid-main-font { + font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); + } + + .exclude-range { + fill: ${e.excludeBkgColor}; + } + + .section { + stroke: none; + opacity: 0.2; + } + + .section0 { + fill: ${e.sectionBkgColor}; + } + + .section2 { + fill: ${e.sectionBkgColor2}; + } + + .section1, + .section3 { + fill: ${e.altSectionBkgColor}; + opacity: 0.2; + } + + .sectionTitle0 { + fill: ${e.titleColor}; + } + + .sectionTitle1 { + fill: ${e.titleColor}; + } + + .sectionTitle2 { + fill: ${e.titleColor}; + } + + .sectionTitle3 { + fill: ${e.titleColor}; + } + + .sectionTitle { + text-anchor: start; + font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); + } + + + /* Grid and axis */ + + .grid .tick { + stroke: ${e.gridColor}; + opacity: 0.8; + shape-rendering: crispEdges; + } + + .grid .tick text { + font-family: ${e.fontFamily}; + fill: ${e.textColor}; + } + + .grid path { + stroke-width: 0; + } + + + /* Today line */ + + .today { + fill: none; + stroke: ${e.todayLineColor}; + stroke-width: 2px; + } + + + /* Task styling */ + + /* Default task */ + + .task { + stroke-width: 2; + } + + .taskText { + text-anchor: middle; + font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); + } + + .taskTextOutsideRight { + fill: ${e.taskTextDarkColor}; + text-anchor: start; + font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); + } + + .taskTextOutsideLeft { + fill: ${e.taskTextDarkColor}; + text-anchor: end; + } + + + /* Special case clickable */ + + .task.clickable { + cursor: pointer; + } + + .taskText.clickable { + cursor: pointer; + fill: ${e.taskTextClickableColor} !important; + font-weight: bold; + } + + .taskTextOutsideLeft.clickable { + cursor: pointer; + fill: ${e.taskTextClickableColor} !important; + font-weight: bold; + } + + .taskTextOutsideRight.clickable { + cursor: pointer; + fill: ${e.taskTextClickableColor} !important; + font-weight: bold; + } + + + /* Specific task settings for the sections*/ + + .taskText0, + .taskText1, + .taskText2, + .taskText3 { + fill: ${e.taskTextColor}; + } + + .task0, + .task1, + .task2, + .task3 { + fill: ${e.taskBkgColor}; + stroke: ${e.taskBorderColor}; + } + + .taskTextOutside0, + .taskTextOutside2 + { + fill: ${e.taskTextOutsideColor}; + } + + .taskTextOutside1, + .taskTextOutside3 { + fill: ${e.taskTextOutsideColor}; + } + + + /* Active task */ + + .active0, + .active1, + .active2, + .active3 { + fill: ${e.activeTaskBkgColor}; + stroke: ${e.activeTaskBorderColor}; + } + + .activeText0, + .activeText1, + .activeText2, + .activeText3 { + fill: ${e.taskTextDarkColor} !important; + } + + + /* Completed task */ + + .done0, + .done1, + .done2, + .done3 { + stroke: ${e.doneTaskBorderColor}; + fill: ${e.doneTaskBkgColor}; + stroke-width: 2; + } + + .doneText0, + .doneText1, + .doneText2, + .doneText3 { + fill: ${e.taskTextDarkColor} !important; + } + + + /* Tasks on the critical line */ + + .crit0, + .crit1, + .crit2, + .crit3 { + stroke: ${e.critBorderColor}; + fill: ${e.critBkgColor}; + stroke-width: 2; + } + + .activeCrit0, + .activeCrit1, + .activeCrit2, + .activeCrit3 { + stroke: ${e.critBorderColor}; + fill: ${e.activeTaskBkgColor}; + stroke-width: 2; + } + + .doneCrit0, + .doneCrit1, + .doneCrit2, + .doneCrit3 { + stroke: ${e.critBorderColor}; + fill: ${e.doneTaskBkgColor}; + stroke-width: 2; + cursor: pointer; + shape-rendering: crispEdges; + } + + .milestone { + transform: rotate(45deg) scale(0.8,0.8); + } + + .milestoneText { + font-style: italic; + } + .doneCritText0, + .doneCritText1, + .doneCritText2, + .doneCritText3 { + fill: ${e.taskTextDarkColor} !important; + } + + .activeCritText0, + .activeCritText1, + .activeCritText2, + .activeCritText3 { + fill: ${e.taskTextDarkColor} !important; + } + + .titleText { + text-anchor: middle; + font-size: 18px; + fill: ${e.titleColor||e.textColor}; + font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); + } +`,"getStyles"),zi=Pi,Gi={parser:ei,db:Wi,renderer:Vi,styles:zi};export{Gi as diagram}; diff --git a/assets/chunks/gitGraph-YCYPL57B.CgYFJ7dL.js b/assets/chunks/gitGraph-YCYPL57B.CgYFJ7dL.js new file mode 100644 index 000000000..9846bfb51 --- /dev/null +++ b/assets/chunks/gitGraph-YCYPL57B.CgYFJ7dL.js @@ -0,0 +1,127 @@ +var Fl=Object.defineProperty;var Gl=(n,e,t)=>e in n?Fl(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var Je=(n,e,t)=>Gl(n,typeof e!="symbol"?e+"":e,t);import{V as tn}from"./framework.B1keMFNq.js";import{by as Ul,bz as Bl,aP as so,bi as Vl,aT as Wl,aQ as Z,aq as jl,ar as Ji,b8 as Hl,bb as ao,bc as oo,bn as Qi,b9 as Kl,at as mt,au as D,aR as Zi,aL as zl}from"../app.D0Wo8w0i.js";import{k as Mt,j as Ti,g as Kt,S as ql,w as Yl,x as Xl,c as co,v as K,y as lo,l as Jl,z as Ql,A as Zl,B as eu,C as tu,a as uo,d as C,i as ze,r as oe,f as ve,D as q}from"./baseUniq.DoVpE4hx.js";import{j as Ri,m as S,d as nu,f as Ne,g as Dt,i as Ai,h as _,l as Ft,e as ru}from"./basePickBy.BafM5tVf.js";import{c as te}from"./clone.CgQKvgpz.js";var iu=Object.prototype,su=iu.hasOwnProperty,Ae=Ul(function(n,e){if(Bl(e)||so(e)){Vl(e,Mt(e),n);return}for(var t in e)su.call(e,t)&&Wl(n,t,e[t])});function fo(n,e,t){var r=-1,i=n.length;e<0&&(e=-e>i?0:i+e),t=t>i?i:t,t<0&&(t+=i),i=e>t?0:t-e>>>0,e>>>=0;for(var s=Array(i);++r=lu&&(s=Xl,a=!1,e=new ql(e));e:for(;++i-1:!!i&&lo(n,e,t)>-1}function es(n,e,t){var r=n==null?0:n.length;if(!r)return-1;var i=0;return lo(n,e,i)}var Tu="[object RegExp]";function Ru(n){return ao(n)&&oo(n)==Tu}var ts=Qi&&Qi.isRegExp,qe=ts?Kl(ts):Ru,Au="Expected a function";function vu(n){if(typeof n!="function")throw new TypeError(Au);return function(){var e=arguments;switch(e.length){case 0:return!n.call(this);case 1:return!n.call(this,e[0]);case 2:return!n.call(this,e[0],e[1]);case 3:return!n.call(this,e[0],e[1],e[2])}return!n.apply(this,e)}}function Pe(n,e){if(n==null)return{};var t=Jl(Ql(n),function(r){return[r]});return e=Kt(e),nu(n,t,function(r,i){return e(r,i[0])})}function rr(n,e){var t=Z(n)?Zl:eu;return t(n,vu(Kt(e)))}function Eu(n,e){var t;return Ti(n,function(r,i,s){return t=e(r,i,s),!t}),!!t}function ho(n,e,t){var r=Z(n)?tu:Eu;return r(n,Kt(e))}function vi(n){return n&&n.length?uo(n):[]}function ku(n,e){return n&&n.length?uo(n,Kt(e)):[]}function ae(n){return typeof n=="object"&&n!==null&&typeof n.$type=="string"}function Ge(n){return typeof n=="object"&&n!==null&&typeof n.$refText=="string"}function Su(n){return typeof n=="object"&&n!==null&&typeof n.name=="string"&&typeof n.type=="string"&&typeof n.path=="string"}function xn(n){return typeof n=="object"&&n!==null&&ae(n.container)&&Ge(n.reference)&&typeof n.message=="string"}class po{constructor(){this.subtypes={},this.allSubtypes={}}isInstance(e,t){return ae(e)&&this.isSubtype(e.$type,t)}isSubtype(e,t){if(e===t)return!0;let r=this.subtypes[e];r||(r=this.subtypes[e]={});const i=r[t];if(i!==void 0)return i;{const s=this.computeIsSubtype(e,t);return r[t]=s,s}}getAllSubTypes(e){const t=this.allSubtypes[e];if(t)return t;{const r=this.getAllTypes(),i=[];for(const s of r)this.isSubtype(s,e)&&i.push(s);return this.allSubtypes[e]=i,i}}}function Gt(n){return typeof n=="object"&&n!==null&&Array.isArray(n.content)}function mo(n){return typeof n=="object"&&n!==null&&typeof n.tokenType=="object"}function go(n){return Gt(n)&&typeof n.fullText=="string"}class ie{constructor(e,t){this.startFn=e,this.nextFn=t}iterator(){const e={state:this.startFn(),next:()=>this.nextFn(e.state),[Symbol.iterator]:()=>e};return e}[Symbol.iterator](){return this.iterator()}isEmpty(){return!!this.iterator().next().done}count(){const e=this.iterator();let t=0,r=e.next();for(;!r.done;)t++,r=e.next();return t}toArray(){const e=[],t=this.iterator();let r;do r=t.next(),r.value!==void 0&&e.push(r.value);while(!r.done);return e}toSet(){return new Set(this)}toMap(e,t){const r=this.map(i=>[e?e(i):i,t?t(i):i]);return new Map(r)}toString(){return this.join()}concat(e){const t=e[Symbol.iterator]();return new ie(()=>({first:this.startFn(),firstDone:!1}),r=>{let i;if(!r.firstDone){do if(i=this.nextFn(r.first),!i.done)return i;while(!i.done);r.firstDone=!0}do if(i=t.next(),!i.done)return i;while(!i.done);return xe})}join(e=","){const t=this.iterator();let r="",i,s=!1;do i=t.next(),i.done||(s&&(r+=e),r+=Iu(i.value)),s=!0;while(!i.done);return r}indexOf(e,t=0){const r=this.iterator();let i=0,s=r.next();for(;!s.done;){if(i>=t&&s.value===e)return i;s=r.next(),i++}return-1}every(e){const t=this.iterator();let r=t.next();for(;!r.done;){if(!e(r.value))return!1;r=t.next()}return!0}some(e){const t=this.iterator();let r=t.next();for(;!r.done;){if(e(r.value))return!0;r=t.next()}return!1}forEach(e){const t=this.iterator();let r=0,i=t.next();for(;!i.done;)e(i.value,r),i=t.next(),r++}map(e){return new ie(this.startFn,t=>{const{done:r,value:i}=this.nextFn(t);return r?xe:{done:!1,value:e(i)}})}filter(e){return new ie(this.startFn,t=>{let r;do if(r=this.nextFn(t),!r.done&&e(r.value))return r;while(!r.done);return xe})}nonNullable(){return this.filter(e=>e!=null)}reduce(e,t){const r=this.iterator();let i=t,s=r.next();for(;!s.done;)i===void 0?i=s.value:i=e(i,s.value),s=r.next();return i}reduceRight(e,t){return this.recursiveReduce(this.iterator(),e,t)}recursiveReduce(e,t,r){const i=e.next();if(i.done)return r;const s=this.recursiveReduce(e,t,r);return s===void 0?i.value:t(s,i.value)}find(e){const t=this.iterator();let r=t.next();for(;!r.done;){if(e(r.value))return r.value;r=t.next()}}findIndex(e){const t=this.iterator();let r=0,i=t.next();for(;!i.done;){if(e(i.value))return r;i=t.next(),r++}return-1}includes(e){const t=this.iterator();let r=t.next();for(;!r.done;){if(r.value===e)return!0;r=t.next()}return!1}flatMap(e){return new ie(()=>({this:this.startFn()}),t=>{do{if(t.iterator){const s=t.iterator.next();if(s.done)t.iterator=void 0;else return s}const{done:r,value:i}=this.nextFn(t.this);if(!r){const s=e(i);if($n(s))t.iterator=s[Symbol.iterator]();else return{done:!1,value:s}}}while(t.iterator);return xe})}flat(e){if(e===void 0&&(e=1),e<=0)return this;const t=e>1?this.flat(e-1):this;return new ie(()=>({this:t.startFn()}),r=>{do{if(r.iterator){const a=r.iterator.next();if(a.done)r.iterator=void 0;else return a}const{done:i,value:s}=t.nextFn(r.this);if(!i)if($n(s))r.iterator=s[Symbol.iterator]();else return{done:!1,value:s}}while(r.iterator);return xe})}head(){const t=this.iterator().next();if(!t.done)return t.value}tail(e=1){return new ie(()=>{const t=this.startFn();for(let r=0;r({size:0,state:this.startFn()}),t=>(t.size++,t.size>e?xe:this.nextFn(t.state)))}distinct(e){const t=new Set;return this.filter(r=>{const i=e?e(r):r;return t.has(i)?!1:(t.add(i),!0)})}exclude(e,t){const r=new Set;for(const i of e){const s=t?t(i):i;r.add(s)}return this.filter(i=>{const s=t?t(i):i;return!r.has(s)})}}function Iu(n){return typeof n=="string"?n:typeof n>"u"?"undefined":typeof n.toString=="function"?n.toString():Object.prototype.toString.call(n)}function $n(n){return!!n&&typeof n[Symbol.iterator]=="function"}const xu=new ie(()=>{},()=>xe),xe=Object.freeze({done:!0,value:void 0});function Q(...n){if(n.length===1){const e=n[0];if(e instanceof ie)return e;if($n(e))return new ie(()=>e[Symbol.iterator](),t=>t.next());if(typeof e.length=="number")return new ie(()=>({index:0}),t=>t.index1?new ie(()=>({collIndex:0,arrIndex:0}),e=>{do{if(e.iterator){const t=e.iterator.next();if(!t.done)return t;e.iterator=void 0}if(e.array){if(e.arrIndex({iterators:r!=null&&r.includeRoot?[[e][Symbol.iterator]()]:[t(e)[Symbol.iterator]()],pruned:!1}),i=>{for(i.pruned&&(i.iterators.pop(),i.pruned=!1);i.iterators.length>0;){const a=i.iterators[i.iterators.length-1].next();if(a.done)i.iterators.pop();else return i.iterators.push(t(a.value)[Symbol.iterator]()),a}return xe})}iterator(){const e={state:this.startFn(),next:()=>this.nextFn(e.state),prune:()=>{e.state.pruned=!0},[Symbol.iterator]:()=>e};return e}}var br;(function(n){function e(s){return s.reduce((a,o)=>a+o,0)}n.sum=e;function t(s){return s.reduce((a,o)=>a*o,0)}n.product=t;function r(s){return s.reduce((a,o)=>Math.min(a,o))}n.min=r;function i(s){return s.reduce((a,o)=>Math.max(a,o))}n.max=i})(br||(br={}));function Pr(n){return new Ei(n,e=>Gt(e)?e.content:[],{includeRoot:!0})}function Nu(n,e){for(;n.container;)if(n=n.container,n===e)return!0;return!1}function Mr(n){return{start:{character:n.startColumn-1,line:n.startLine-1},end:{character:n.endColumn,line:n.endLine-1}}}function On(n){if(!n)return;const{offset:e,end:t,range:r}=n;return{range:r,offset:e,end:t,length:t-e}}var Ze;(function(n){n[n.Before=0]="Before",n[n.After=1]="After",n[n.OverlapFront=2]="OverlapFront",n[n.OverlapBack=3]="OverlapBack",n[n.Inside=4]="Inside"})(Ze||(Ze={}));function Cu(n,e){if(n.end.linee.end.line||n.start.line===e.end.line&&n.start.character>e.end.character)return Ze.After;const t=n.start.line>e.start.line||n.start.line===e.start.line&&n.start.character>=e.start.character,r=n.end.lineZe.After}const wu=/^[\w\p{L}]$/u;function Lu(n,e){if(n){const t=$u(n,!0);if(t&&ns(t,e))return t;if(go(n)){const r=n.content.findIndex(i=>!i.hidden);for(let i=r-1;i>=0;i--){const s=n.content[i];if(ns(s,e))return s}}}}function ns(n,e){return mo(n)&&e.includes(n.tokenType.name)}function $u(n,e=!0){for(;n.container;){const t=n.container;let r=t.content.indexOf(n);for(;r>0;){r--;const i=t.content[r];if(e||!i.hidden)return i}n=t}}class yo extends Error{constructor(e,t){super(e?`${t} at ${e.range.start.line}:${e.range.start.character}`:t)}}function ir(n){throw new Error("Error! The input value was not handled.")}const Ar="AbstractRule",vr="AbstractType",rs="Condition",Ou="TypeDefinition",is="ValueLiteral",To="AbstractElement";function bu(n){return M.isInstance(n,To)}const Pu="ArrayLiteral",Mu="ArrayType",Ro="BooleanLiteral";function Du(n){return M.isInstance(n,Ro)}const Ao="Conjunction";function Fu(n){return M.isInstance(n,Ao)}const vo="Disjunction";function Gu(n){return M.isInstance(n,vo)}const Uu="Grammar",Eo="InferredType";function ko(n){return M.isInstance(n,Eo)}const So="Interface";function Io(n){return M.isInstance(n,So)}const xo="Negation";function Bu(n){return M.isInstance(n,xo)}const Vu="NumberLiteral",Wu="Parameter",No="ParameterReference";function ju(n){return M.isInstance(n,No)}const Co="ParserRule";function Ce(n){return M.isInstance(n,Co)}const Hu="ReferenceType",Ku="ReturnType";function zu(n){return M.isInstance(n,Ku)}const _o="SimpleType";function qu(n){return M.isInstance(n,_o)}const Yu="StringLiteral",Dr="TerminalRule";function gt(n){return M.isInstance(n,Dr)}const wo="Type";function Lo(n){return M.isInstance(n,wo)}const Xu="UnionType",$o="Action";function sr(n){return M.isInstance(n,$o)}const Oo="Alternatives";function bo(n){return M.isInstance(n,Oo)}const Po="Assignment";function ut(n){return M.isInstance(n,Po)}const Mo="CharacterRange";function Ju(n){return M.isInstance(n,Mo)}const Do="CrossReference";function ki(n){return M.isInstance(n,Do)}const Fo="EndOfFile";function Qu(n){return M.isInstance(n,Fo)}const Go="Group";function Si(n){return M.isInstance(n,Go)}const Uo="Keyword";function dt(n){return M.isInstance(n,Uo)}const Bo="NegatedToken";function Zu(n){return M.isInstance(n,Bo)}const Vo="RegexToken";function ed(n){return M.isInstance(n,Vo)}const Wo="RuleCall";function ft(n){return M.isInstance(n,Wo)}const jo="TerminalAlternatives";function td(n){return M.isInstance(n,jo)}const Ho="TerminalGroup";function nd(n){return M.isInstance(n,Ho)}const Ko="TerminalRuleCall";function rd(n){return M.isInstance(n,Ko)}const zo="UnorderedGroup";function qo(n){return M.isInstance(n,zo)}const Yo="UntilToken";function id(n){return M.isInstance(n,Yo)}const Xo="Wildcard";function sd(n){return M.isInstance(n,Xo)}class Jo extends po{getAllTypes(){return["AbstractElement","AbstractRule","AbstractType","Action","Alternatives","ArrayLiteral","ArrayType","Assignment","BooleanLiteral","CharacterRange","Condition","Conjunction","CrossReference","Disjunction","EndOfFile","Grammar","GrammarImport","Group","InferredType","Interface","Keyword","NamedArgument","NegatedToken","Negation","NumberLiteral","Parameter","ParameterReference","ParserRule","ReferenceType","RegexToken","ReturnType","RuleCall","SimpleType","StringLiteral","TerminalAlternatives","TerminalGroup","TerminalRule","TerminalRuleCall","Type","TypeAttribute","TypeDefinition","UnionType","UnorderedGroup","UntilToken","ValueLiteral","Wildcard"]}computeIsSubtype(e,t){switch(e){case $o:case Oo:case Po:case Mo:case Do:case Fo:case Go:case Uo:case Bo:case Vo:case Wo:case jo:case Ho:case Ko:case zo:case Yo:case Xo:return this.isSubtype(To,t);case Pu:case Vu:case Yu:return this.isSubtype(is,t);case Mu:case Hu:case _o:case Xu:return this.isSubtype(Ou,t);case Ro:return this.isSubtype(rs,t)||this.isSubtype(is,t);case Ao:case vo:case xo:case No:return this.isSubtype(rs,t);case Eo:case So:case wo:return this.isSubtype(vr,t);case Co:return this.isSubtype(Ar,t)||this.isSubtype(vr,t);case Dr:return this.isSubtype(Ar,t);default:return!1}}getReferenceType(e){const t=`${e.container.$type}:${e.property}`;switch(t){case"Action:type":case"CrossReference:type":case"Interface:superTypes":case"ParserRule:returnType":case"SimpleType:typeRef":return vr;case"Grammar:hiddenTokens":case"ParserRule:hiddenTokens":case"RuleCall:rule":return Ar;case"Grammar:usedGrammars":return Uu;case"NamedArgument:parameter":case"ParameterReference:parameter":return Wu;case"TerminalRuleCall:rule":return Dr;default:throw new Error(`${t} is not a valid reference id.`)}}getTypeMetaData(e){switch(e){case"AbstractElement":return{name:"AbstractElement",properties:[{name:"cardinality"},{name:"lookahead"}]};case"ArrayLiteral":return{name:"ArrayLiteral",properties:[{name:"elements",defaultValue:[]}]};case"ArrayType":return{name:"ArrayType",properties:[{name:"elementType"}]};case"BooleanLiteral":return{name:"BooleanLiteral",properties:[{name:"true",defaultValue:!1}]};case"Conjunction":return{name:"Conjunction",properties:[{name:"left"},{name:"right"}]};case"Disjunction":return{name:"Disjunction",properties:[{name:"left"},{name:"right"}]};case"Grammar":return{name:"Grammar",properties:[{name:"definesHiddenTokens",defaultValue:!1},{name:"hiddenTokens",defaultValue:[]},{name:"imports",defaultValue:[]},{name:"interfaces",defaultValue:[]},{name:"isDeclared",defaultValue:!1},{name:"name"},{name:"rules",defaultValue:[]},{name:"types",defaultValue:[]},{name:"usedGrammars",defaultValue:[]}]};case"GrammarImport":return{name:"GrammarImport",properties:[{name:"path"}]};case"InferredType":return{name:"InferredType",properties:[{name:"name"}]};case"Interface":return{name:"Interface",properties:[{name:"attributes",defaultValue:[]},{name:"name"},{name:"superTypes",defaultValue:[]}]};case"NamedArgument":return{name:"NamedArgument",properties:[{name:"calledByName",defaultValue:!1},{name:"parameter"},{name:"value"}]};case"Negation":return{name:"Negation",properties:[{name:"value"}]};case"NumberLiteral":return{name:"NumberLiteral",properties:[{name:"value"}]};case"Parameter":return{name:"Parameter",properties:[{name:"name"}]};case"ParameterReference":return{name:"ParameterReference",properties:[{name:"parameter"}]};case"ParserRule":return{name:"ParserRule",properties:[{name:"dataType"},{name:"definesHiddenTokens",defaultValue:!1},{name:"definition"},{name:"entry",defaultValue:!1},{name:"fragment",defaultValue:!1},{name:"hiddenTokens",defaultValue:[]},{name:"inferredType"},{name:"name"},{name:"parameters",defaultValue:[]},{name:"returnType"},{name:"wildcard",defaultValue:!1}]};case"ReferenceType":return{name:"ReferenceType",properties:[{name:"referenceType"}]};case"ReturnType":return{name:"ReturnType",properties:[{name:"name"}]};case"SimpleType":return{name:"SimpleType",properties:[{name:"primitiveType"},{name:"stringType"},{name:"typeRef"}]};case"StringLiteral":return{name:"StringLiteral",properties:[{name:"value"}]};case"TerminalRule":return{name:"TerminalRule",properties:[{name:"definition"},{name:"fragment",defaultValue:!1},{name:"hidden",defaultValue:!1},{name:"name"},{name:"type"}]};case"Type":return{name:"Type",properties:[{name:"name"},{name:"type"}]};case"TypeAttribute":return{name:"TypeAttribute",properties:[{name:"defaultValue"},{name:"isOptional",defaultValue:!1},{name:"name"},{name:"type"}]};case"UnionType":return{name:"UnionType",properties:[{name:"types",defaultValue:[]}]};case"Action":return{name:"Action",properties:[{name:"cardinality"},{name:"feature"},{name:"inferredType"},{name:"lookahead"},{name:"operator"},{name:"type"}]};case"Alternatives":return{name:"Alternatives",properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case"Assignment":return{name:"Assignment",properties:[{name:"cardinality"},{name:"feature"},{name:"lookahead"},{name:"operator"},{name:"terminal"}]};case"CharacterRange":return{name:"CharacterRange",properties:[{name:"cardinality"},{name:"left"},{name:"lookahead"},{name:"right"}]};case"CrossReference":return{name:"CrossReference",properties:[{name:"cardinality"},{name:"deprecatedSyntax",defaultValue:!1},{name:"lookahead"},{name:"terminal"},{name:"type"}]};case"EndOfFile":return{name:"EndOfFile",properties:[{name:"cardinality"},{name:"lookahead"}]};case"Group":return{name:"Group",properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"guardCondition"},{name:"lookahead"}]};case"Keyword":return{name:"Keyword",properties:[{name:"cardinality"},{name:"lookahead"},{name:"value"}]};case"NegatedToken":return{name:"NegatedToken",properties:[{name:"cardinality"},{name:"lookahead"},{name:"terminal"}]};case"RegexToken":return{name:"RegexToken",properties:[{name:"cardinality"},{name:"lookahead"},{name:"regex"}]};case"RuleCall":return{name:"RuleCall",properties:[{name:"arguments",defaultValue:[]},{name:"cardinality"},{name:"lookahead"},{name:"rule"}]};case"TerminalAlternatives":return{name:"TerminalAlternatives",properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case"TerminalGroup":return{name:"TerminalGroup",properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case"TerminalRuleCall":return{name:"TerminalRuleCall",properties:[{name:"cardinality"},{name:"lookahead"},{name:"rule"}]};case"UnorderedGroup":return{name:"UnorderedGroup",properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case"UntilToken":return{name:"UntilToken",properties:[{name:"cardinality"},{name:"lookahead"},{name:"terminal"}]};case"Wildcard":return{name:"Wildcard",properties:[{name:"cardinality"},{name:"lookahead"}]};default:return{name:e,properties:[]}}}}const M=new Jo;function ad(n){for(const[e,t]of Object.entries(n))e.startsWith("$")||(Array.isArray(t)?t.forEach((r,i)=>{ae(r)&&(r.$container=n,r.$containerProperty=e,r.$containerIndex=i)}):ae(t)&&(t.$container=n,t.$containerProperty=e))}function ar(n,e){let t=n;for(;t;){if(e(t))return t;t=t.$container}}function Ue(n){const t=od(n).$document;if(!t)throw new Error("AST node has no document.");return t}function od(n){for(;n.$container;)n=n.$container;return n}function Ii(n,e){if(!n)throw new Error("Node must be an AstNode.");const t=e==null?void 0:e.range;return new ie(()=>({keys:Object.keys(n),keyIndex:0,arrayIndex:0}),r=>{for(;r.keyIndexIi(t,e))}function vt(n,e){if(!n)throw new Error("Root node must be an AstNode.");return new Ei(n,t=>Ii(t,e),{includeRoot:!0})}function ss(n,e){var t;if(!e)return!0;const r=(t=n.$cstNode)===null||t===void 0?void 0:t.range;return r?_u(r,e):!1}function Qo(n){return new ie(()=>({keys:Object.keys(n),keyIndex:0,arrayIndex:0}),e=>{for(;e.keyIndex=this.input.length)throw Error("Unexpected end of input");this.idx++}loc(e){return{begin:e,end:this.idx}}}class or{visitChildren(e){for(const t in e){const r=e[t];e.hasOwnProperty(t)&&(r.type!==void 0?this.visit(r):Array.isArray(r)&&r.forEach(i=>{this.visit(i)},this))}}visit(e){switch(e.type){case"Pattern":this.visitPattern(e);break;case"Flags":this.visitFlags(e);break;case"Disjunction":this.visitDisjunction(e);break;case"Alternative":this.visitAlternative(e);break;case"StartAnchor":this.visitStartAnchor(e);break;case"EndAnchor":this.visitEndAnchor(e);break;case"WordBoundary":this.visitWordBoundary(e);break;case"NonWordBoundary":this.visitNonWordBoundary(e);break;case"Lookahead":this.visitLookahead(e);break;case"NegativeLookahead":this.visitNegativeLookahead(e);break;case"Character":this.visitCharacter(e);break;case"Set":this.visitSet(e);break;case"Group":this.visitGroup(e);break;case"GroupBackReference":this.visitGroupBackReference(e);break;case"Quantifier":this.visitQuantifier(e);break}this.visitChildren(e)}visitPattern(e){}visitFlags(e){}visitDisjunction(e){}visitAlternative(e){}visitStartAnchor(e){}visitEndAnchor(e){}visitWordBoundary(e){}visitNonWordBoundary(e){}visitLookahead(e){}visitNegativeLookahead(e){}visitCharacter(e){}visitSet(e){}visitGroup(e){}visitGroupBackReference(e){}visitQuantifier(e){}}const fd=/\r?\n/gm,hd=new ec;class pd extends or{constructor(){super(...arguments),this.isStarting=!0,this.endRegexpStack=[],this.multiline=!1}get endRegex(){return this.endRegexpStack.join("")}reset(e){this.multiline=!1,this.regex=e,this.startRegexp="",this.isStarting=!0,this.endRegexpStack=[]}visitGroup(e){e.quantifier&&(this.isStarting=!1,this.endRegexpStack=[])}visitCharacter(e){const t=String.fromCharCode(e.value);if(!this.multiline&&t===` +`&&(this.multiline=!0),e.quantifier)this.isStarting=!1,this.endRegexpStack=[];else{const r=cr(t);this.endRegexpStack.push(r),this.isStarting&&(this.startRegexp+=r)}}visitSet(e){if(!this.multiline){const t=this.regex.substring(e.loc.begin,e.loc.end),r=new RegExp(t);this.multiline=!!` +`.match(r)}if(e.quantifier)this.isStarting=!1,this.endRegexpStack=[];else{const t=this.regex.substring(e.loc.begin,e.loc.end);this.endRegexpStack.push(t),this.isStarting&&(this.startRegexp+=t)}}visitChildren(e){e.type==="Group"&&e.quantifier||super.visitChildren(e)}}const kr=new pd;function md(n){try{return typeof n=="string"&&(n=new RegExp(n)),n=n.toString(),kr.reset(n),kr.visit(hd.pattern(n)),kr.multiline}catch{return!1}}function cs(n){return(typeof n=="string"?new RegExp(n):n).test(" ")}function cr(n){return n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function gd(n){return Array.prototype.map.call(n,e=>/\w/.test(e)?`[${e.toLowerCase()}${e.toUpperCase()}]`:cr(e)).join("")}function yd(n,e){const t=Td(n),r=e.match(t);return!!r&&r[0].length>0}function Td(n){typeof n=="string"&&(n=new RegExp(n));const e=n,t=n.source;let r=0;function i(){let s="",a;function o(l){s+=t.substr(r,l),r+=l}function c(l){s+="(?:"+t.substr(r,l)+"|$)",r+=l}for(;r",r)-r+1);break;default:c(2);break}break;case"[":a=/\[(?:\\.|.)*?\]/g,a.lastIndex=r,a=a.exec(t)||[],c(a[0].length);break;case"|":case"^":case"$":case"*":case"+":case"?":o(1);break;case"{":a=/\{\d+,?\d*\}/g,a.lastIndex=r,a=a.exec(t),a?o(a[0].length):c(1);break;case"(":if(t[r+1]==="?")switch(t[r+2]){case":":s+="(?:",r+=3,s+=i()+"|$)";break;case"=":s+="(?=",r+=3,s+=i()+")";break;case"!":a=r,r+=3,i(),s+=t.substr(a,r-a);break;case"<":switch(t[r+3]){case"=":case"!":a=r,r+=4,i(),s+=t.substr(a,r-a);break;default:o(t.indexOf(">",r)-r+1),s+=i()+"|$)";break}break}else o(1),s+=i()+"|$)";break;case")":return++r,s;default:c(1);break}return s}return new RegExp(i(),n.flags)}function Rd(n){return n.rules.find(e=>Ce(e)&&e.entry)}function Ad(n){return n.rules.filter(e=>gt(e)&&e.hidden)}function tc(n,e){const t=new Set,r=Rd(n);if(!r)return new Set(n.rules);const i=[r].concat(Ad(n));for(const a of i)nc(a,t,e);const s=new Set;for(const a of n.rules)(t.has(a.name)||gt(a)&&a.hidden)&&s.add(a);return s}function nc(n,e,t){e.add(n.name),pn(n).forEach(r=>{if(ft(r)||t){const i=r.rule.ref;i&&!e.has(i.name)&&nc(i,e,t)}})}function vd(n){if(n.terminal)return n.terminal;if(n.type.ref){const e=ic(n.type.ref);return e==null?void 0:e.terminal}}function Ed(n){return n.hidden&&!Ci(n).test(" ")}function kd(n,e){return!n||!e?[]:xi(n,e,n.astNode,!0)}function rc(n,e,t){if(!n||!e)return;const r=xi(n,e,n.astNode,!0);if(r.length!==0)return t!==void 0?t=Math.max(0,Math.min(t,r.length-1)):t=0,r[t]}function xi(n,e,t,r){if(!r){const i=ar(n.grammarSource,ut);if(i&&i.feature===e)return[n]}return Gt(n)&&n.astNode===t?n.content.flatMap(i=>xi(i,e,t,!1)):[]}function Sd(n,e,t){if(!n)return;const r=Id(n,e,n==null?void 0:n.astNode);if(r.length!==0)return t!==void 0?t=Math.max(0,Math.min(t,r.length-1)):t=0,r[t]}function Id(n,e,t){if(n.astNode!==t)return[];if(dt(n.grammarSource)&&n.grammarSource.value===e)return[n];const r=Pr(n).iterator();let i;const s=[];do if(i=r.next(),!i.done){const a=i.value;a.astNode===t?dt(a.grammarSource)&&a.grammarSource.value===e&&s.push(a):r.prune()}while(!i.done);return s}function xd(n){var e;const t=n.astNode;for(;t===((e=n.container)===null||e===void 0?void 0:e.astNode);){const r=ar(n.grammarSource,ut);if(r)return r;n=n.container}}function ic(n){let e=n;return ko(e)&&(sr(e.$container)?e=e.$container.$container:Ce(e.$container)?e=e.$container:ir(e.$container)),sc(n,e,new Map)}function sc(n,e,t){var r;function i(s,a){let o;return ar(s,ut)||(o=sc(a,a,t)),t.set(n,o),o}if(t.has(n))return t.get(n);t.set(n,void 0);for(const s of pn(e)){if(ut(s)&&s.feature.toLowerCase()==="name")return t.set(n,s),s;if(ft(s)&&Ce(s.rule.ref))return i(s,s.rule.ref);if(qu(s)&&(!((r=s.typeRef)===null||r===void 0)&&r.ref))return i(s,s.typeRef.ref)}}function Ni(n){return ac(n,new Set)}function ac(n,e){if(e.has(n))return!0;e.add(n);for(const t of pn(n))if(ft(t)){if(!t.rule.ref||Ce(t.rule.ref)&&!ac(t.rule.ref,e))return!1}else{if(ut(t))return!1;if(sr(t))return!1}return!!n.definition}function oc(n){if(n.inferredType)return n.inferredType.name;if(n.dataType)return n.dataType;if(n.returnType){const e=n.returnType.ref;if(e){if(Ce(e))return e.name;if(Io(e)||Lo(e))return e.name}}}function lr(n){var e;if(Ce(n))return Ni(n)?n.name:(e=oc(n))!==null&&e!==void 0?e:n.name;if(Io(n)||Lo(n)||zu(n))return n.name;if(sr(n)){const t=Nd(n);if(t)return t}else if(ko(n))return n.name;throw new Error("Cannot get name of Unknown Type")}function Nd(n){var e;if(n.inferredType)return n.inferredType.name;if(!((e=n.type)===null||e===void 0)&&e.ref)return lr(n.type.ref)}function Cd(n){var e,t,r;return gt(n)?(t=(e=n.type)===null||e===void 0?void 0:e.name)!==null&&t!==void 0?t:"string":Ni(n)?n.name:(r=oc(n))!==null&&r!==void 0?r:n.name}function Ci(n){const e={s:!1,i:!1,u:!1},t=zt(n.definition,e),r=Object.entries(e).filter(([,i])=>i).map(([i])=>i).join("");return new RegExp(t,r)}const _i=/[\s\S]/.source;function zt(n,e){if(td(n))return _d(n);if(nd(n))return wd(n);if(Ju(n))return Od(n);if(rd(n)){const t=n.rule.ref;if(!t)throw new Error("Missing rule reference.");return Ke(zt(t.definition),{cardinality:n.cardinality,lookahead:n.lookahead})}else{if(Zu(n))return $d(n);if(id(n))return Ld(n);if(ed(n)){const t=n.regex.lastIndexOf("/"),r=n.regex.substring(1,t),i=n.regex.substring(t+1);return e&&(e.i=i.includes("i"),e.s=i.includes("s"),e.u=i.includes("u")),Ke(r,{cardinality:n.cardinality,lookahead:n.lookahead,wrap:!1})}else{if(sd(n))return Ke(_i,{cardinality:n.cardinality,lookahead:n.lookahead});throw new Error(`Invalid terminal element: ${n==null?void 0:n.$type}`)}}}function _d(n){return Ke(n.elements.map(e=>zt(e)).join("|"),{cardinality:n.cardinality,lookahead:n.lookahead})}function wd(n){return Ke(n.elements.map(e=>zt(e)).join(""),{cardinality:n.cardinality,lookahead:n.lookahead})}function Ld(n){return Ke(`${_i}*?${zt(n.terminal)}`,{cardinality:n.cardinality,lookahead:n.lookahead})}function $d(n){return Ke(`(?!${zt(n.terminal)})${_i}*?`,{cardinality:n.cardinality,lookahead:n.lookahead})}function Od(n){return n.right?Ke(`[${Sr(n.left)}-${Sr(n.right)}]`,{cardinality:n.cardinality,lookahead:n.lookahead,wrap:!1}):Ke(Sr(n.left),{cardinality:n.cardinality,lookahead:n.lookahead,wrap:!1})}function Sr(n){return cr(n.value)}function Ke(n,e){var t;return(e.wrap!==!1||e.lookahead)&&(n=`(${(t=e.lookahead)!==null&&t!==void 0?t:""}${n})`),e.cardinality?`${n}${e.cardinality}`:n}function bd(n){const e=[],t=n.Grammar;for(const r of t.rules)gt(r)&&Ed(r)&&md(Ci(r))&&e.push(r.name);return{multilineCommentRules:e,nameRegexp:wu}}function Fr(n){console&&console.error&&console.error(`Error: ${n}`)}function cc(n){console&&console.warn&&console.warn(`Warning: ${n}`)}function lc(n){const e=new Date().getTime(),t=n();return{time:new Date().getTime()-e,value:t}}function uc(n){function e(){}e.prototype=n;const t=new e;function r(){return typeof t.bar}return r(),r(),n}function Pd(n){return Md(n)?n.LABEL:n.name}function Md(n){return fe(n.LABEL)&&n.LABEL!==""}class Be{get definition(){return this._definition}set definition(e){this._definition=e}constructor(e){this._definition=e}accept(e){e.visit(this),C(this.definition,t=>{t.accept(e)})}}class ce extends Be{constructor(e){super([]),this.idx=1,Ae(this,Pe(e,t=>t!==void 0))}set definition(e){}get definition(){return this.referencedRule!==void 0?this.referencedRule.definition:[]}accept(e){e.visit(this)}}class qt extends Be{constructor(e){super(e.definition),this.orgText="",Ae(this,Pe(e,t=>t!==void 0))}}class he extends Be{constructor(e){super(e.definition),this.ignoreAmbiguities=!1,Ae(this,Pe(e,t=>t!==void 0))}}class ee extends Be{constructor(e){super(e.definition),this.idx=1,Ae(this,Pe(e,t=>t!==void 0))}}class Ee extends Be{constructor(e){super(e.definition),this.idx=1,Ae(this,Pe(e,t=>t!==void 0))}}class ke extends Be{constructor(e){super(e.definition),this.idx=1,Ae(this,Pe(e,t=>t!==void 0))}}class W extends Be{constructor(e){super(e.definition),this.idx=1,Ae(this,Pe(e,t=>t!==void 0))}}class pe extends Be{constructor(e){super(e.definition),this.idx=1,Ae(this,Pe(e,t=>t!==void 0))}}class me extends Be{get definition(){return this._definition}set definition(e){this._definition=e}constructor(e){super(e.definition),this.idx=1,this.ignoreAmbiguities=!1,this.hasPredicates=!1,Ae(this,Pe(e,t=>t!==void 0))}}class G{constructor(e){this.idx=1,Ae(this,Pe(e,t=>t!==void 0))}accept(e){e.visit(this)}}function Dd(n){return S(n,Nn)}function Nn(n){function e(t){return S(t,Nn)}if(n instanceof ce){const t={type:"NonTerminal",name:n.nonTerminalName,idx:n.idx};return fe(n.label)&&(t.label=n.label),t}else{if(n instanceof he)return{type:"Alternative",definition:e(n.definition)};if(n instanceof ee)return{type:"Option",idx:n.idx,definition:e(n.definition)};if(n instanceof Ee)return{type:"RepetitionMandatory",idx:n.idx,definition:e(n.definition)};if(n instanceof ke)return{type:"RepetitionMandatoryWithSeparator",idx:n.idx,separator:Nn(new G({terminalType:n.separator})),definition:e(n.definition)};if(n instanceof pe)return{type:"RepetitionWithSeparator",idx:n.idx,separator:Nn(new G({terminalType:n.separator})),definition:e(n.definition)};if(n instanceof W)return{type:"Repetition",idx:n.idx,definition:e(n.definition)};if(n instanceof me)return{type:"Alternation",idx:n.idx,definition:e(n.definition)};if(n instanceof G){const t={type:"Terminal",name:n.terminalType.name,label:Pd(n.terminalType),idx:n.idx};fe(n.label)&&(t.terminalLabel=n.label);const r=n.terminalType.PATTERN;return n.terminalType.PATTERN&&(t.pattern=qe(r)?r.source:r),t}else{if(n instanceof qt)return{type:"Rule",name:n.name,orgText:n.orgText,definition:e(n.definition)};throw Error("non exhaustive match")}}}class Yt{visit(e){const t=e;switch(t.constructor){case ce:return this.visitNonTerminal(t);case he:return this.visitAlternative(t);case ee:return this.visitOption(t);case Ee:return this.visitRepetitionMandatory(t);case ke:return this.visitRepetitionMandatoryWithSeparator(t);case pe:return this.visitRepetitionWithSeparator(t);case W:return this.visitRepetition(t);case me:return this.visitAlternation(t);case G:return this.visitTerminal(t);case qt:return this.visitRule(t);default:throw Error("non exhaustive match")}}visitNonTerminal(e){}visitAlternative(e){}visitOption(e){}visitRepetition(e){}visitRepetitionMandatory(e){}visitRepetitionMandatoryWithSeparator(e){}visitRepetitionWithSeparator(e){}visitAlternation(e){}visitTerminal(e){}visitRule(e){}}function Fd(n){return n instanceof he||n instanceof ee||n instanceof W||n instanceof Ee||n instanceof ke||n instanceof pe||n instanceof G||n instanceof qt}function Mn(n,e=[]){return n instanceof ee||n instanceof W||n instanceof pe?!0:n instanceof me?ho(n.definition,r=>Mn(r,e)):n instanceof ce&&ue(e,n)?!1:n instanceof Be?(n instanceof ce&&e.push(n),$e(n.definition,r=>Mn(r,e))):!1}function Gd(n){return n instanceof me}function Fe(n){if(n instanceof ce)return"SUBRULE";if(n instanceof ee)return"OPTION";if(n instanceof me)return"OR";if(n instanceof Ee)return"AT_LEAST_ONE";if(n instanceof ke)return"AT_LEAST_ONE_SEP";if(n instanceof pe)return"MANY_SEP";if(n instanceof W)return"MANY";if(n instanceof G)return"CONSUME";throw Error("non exhaustive match")}class ur{walk(e,t=[]){C(e.definition,(r,i)=>{const s=J(e.definition,i+1);if(r instanceof ce)this.walkProdRef(r,s,t);else if(r instanceof G)this.walkTerminal(r,s,t);else if(r instanceof he)this.walkFlat(r,s,t);else if(r instanceof ee)this.walkOption(r,s,t);else if(r instanceof Ee)this.walkAtLeastOne(r,s,t);else if(r instanceof ke)this.walkAtLeastOneSep(r,s,t);else if(r instanceof pe)this.walkManySep(r,s,t);else if(r instanceof W)this.walkMany(r,s,t);else if(r instanceof me)this.walkOr(r,s,t);else throw Error("non exhaustive match")})}walkTerminal(e,t,r){}walkProdRef(e,t,r){}walkFlat(e,t,r){const i=t.concat(r);this.walk(e,i)}walkOption(e,t,r){const i=t.concat(r);this.walk(e,i)}walkAtLeastOne(e,t,r){const i=[new ee({definition:e.definition})].concat(t,r);this.walk(e,i)}walkAtLeastOneSep(e,t,r){const i=ls(e,t,r);this.walk(e,i)}walkMany(e,t,r){const i=[new ee({definition:e.definition})].concat(t,r);this.walk(e,i)}walkManySep(e,t,r){const i=ls(e,t,r);this.walk(e,i)}walkOr(e,t,r){const i=t.concat(r);C(e.definition,s=>{const a=new he({definition:[s]});this.walk(a,i)})}}function ls(n,e,t){return[new ee({definition:[new G({terminalType:n.separator})].concat(n.definition)})].concat(e,t)}function mn(n){if(n instanceof ce)return mn(n.referencedRule);if(n instanceof G)return Vd(n);if(Fd(n))return Ud(n);if(Gd(n))return Bd(n);throw Error("non exhaustive match")}function Ud(n){let e=[];const t=n.definition;let r=0,i=t.length>r,s,a=!0;for(;i&&a;)s=t[r],a=Mn(s),e=e.concat(mn(s)),r=r+1,i=t.length>r;return vi(e)}function Bd(n){const e=S(n.definition,t=>mn(t));return vi(Ne(e))}function Vd(n){return[n.terminalType]}const dc="_~IN~_";class Wd extends ur{constructor(e){super(),this.topProd=e,this.follows={}}startWalking(){return this.walk(this.topProd),this.follows}walkTerminal(e,t,r){}walkProdRef(e,t,r){const i=Hd(e.referencedRule,e.idx)+this.topProd.name,s=t.concat(r),a=new he({definition:s}),o=mn(a);this.follows[i]=o}}function jd(n){const e={};return C(n,t=>{const r=new Wd(t).startWalking();Ae(e,r)}),e}function Hd(n,e){return n.name+e+dc}let Cn={};const Kd=new ec;function dr(n){const e=n.toString();if(Cn.hasOwnProperty(e))return Cn[e];{const t=Kd.pattern(e);return Cn[e]=t,t}}function zd(){Cn={}}const fc="Complement Sets are not supported for first char optimization",Dn=`Unable to use "first char" lexer optimizations: +`;function qd(n,e=!1){try{const t=dr(n);return Gr(t.value,{},t.flags.ignoreCase)}catch(t){if(t.message===fc)e&&cc(`${Dn} Unable to optimize: < ${n.toString()} > + Complement Sets cannot be automatically optimized. + This will disable the lexer's first char optimizations. + See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#COMPLEMENT for details.`);else{let r="";e&&(r=` + This will disable the lexer's first char optimizations. + See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#REGEXP_PARSING for details.`),Fr(`${Dn} + Failed parsing: < ${n.toString()} > + Using the @chevrotain/regexp-to-ast library + Please open an issue at: https://github.com/chevrotain/chevrotain/issues`+r)}}return[]}function Gr(n,e,t){switch(n.type){case"Disjunction":for(let i=0;i{if(typeof c=="number")kn(c,e,t);else{const l=c;if(t===!0)for(let u=l.from;u<=l.to;u++)kn(u,e,t);else{for(let u=l.from;u<=l.to&&u=on){const u=l.from>=on?l.from:on,d=l.to,f=et(u),h=et(d);for(let m=f;m<=h;m++)e[m]=m}}}});break;case"Group":Gr(a.value,e,t);break;default:throw Error("Non Exhaustive Match")}const o=a.quantifier!==void 0&&a.quantifier.atLeast===0;if(a.type==="Group"&&Ur(a)===!1||a.type!=="Group"&&o===!1)break}break;default:throw Error("non exhaustive match!")}return K(e)}function kn(n,e,t){const r=et(n);e[r]=r,t===!0&&Yd(n,e)}function Yd(n,e){const t=String.fromCharCode(n),r=t.toUpperCase();if(r!==t){const i=et(r.charCodeAt(0));e[i]=i}else{const i=t.toLowerCase();if(i!==t){const s=et(i.charCodeAt(0));e[s]=s}}}function us(n,e){return Dt(n.value,t=>{if(typeof t=="number")return ue(e,t);{const r=t;return Dt(e,i=>r.from<=i&&i<=r.to)!==void 0}})}function Ur(n){const e=n.quantifier;return e&&e.atLeast===0?!0:n.value?Z(n.value)?$e(n.value,Ur):Ur(n.value):!1}class Xd extends or{constructor(e){super(),this.targetCharCodes=e,this.found=!1}visitChildren(e){if(this.found!==!0){switch(e.type){case"Lookahead":this.visitLookahead(e);return;case"NegativeLookahead":this.visitNegativeLookahead(e);return}super.visitChildren(e)}}visitCharacter(e){ue(this.targetCharCodes,e.value)&&(this.found=!0)}visitSet(e){e.complement?us(e,this.targetCharCodes)===void 0&&(this.found=!0):us(e,this.targetCharCodes)!==void 0&&(this.found=!0)}}function wi(n,e){if(e instanceof RegExp){const t=dr(e),r=new Xd(n);return r.visit(t),r.found}else return Dt(e,t=>ue(n,t.charCodeAt(0)))!==void 0}const ht="PATTERN",an="defaultMode",Sn="modes";let hc=typeof new RegExp("(?:)").sticky=="boolean";function Jd(n,e){e=Ai(e,{useSticky:hc,debug:!1,safeMode:!1,positionTracking:"full",lineTerminatorCharacters:["\r",` +`],tracer:(v,R)=>R()});const t=e.tracer;t("initCharCodeToOptimizedIndexMap",()=>{vf()});let r;t("Reject Lexer.NA",()=>{r=rr(n,v=>v[ht]===de.NA)});let i=!1,s;t("Transform Patterns",()=>{i=!1,s=S(r,v=>{const R=v[ht];if(qe(R)){const N=R.source;return N.length===1&&N!=="^"&&N!=="$"&&N!=="."&&!R.ignoreCase?N:N.length===2&&N[0]==="\\"&&!ue(["d","D","s","S","t","r","n","t","0","c","b","B","f","v","w","W"],N[1])?N[1]:e.useSticky?fs(R):ds(R)}else{if(mt(R))return i=!0,{exec:R};if(typeof R=="object")return i=!0,R;if(typeof R=="string"){if(R.length===1)return R;{const N=R.replace(/[\\^$.*+?()[\]{}|]/g,"\\$&"),F=new RegExp(N);return e.useSticky?fs(F):ds(F)}}else throw Error("non exhaustive match")}})});let a,o,c,l,u;t("misc mapping",()=>{a=S(r,v=>v.tokenTypeIdx),o=S(r,v=>{const R=v.GROUP;if(R!==de.SKIPPED){if(fe(R))return R;if(ze(R))return!1;throw Error("non exhaustive match")}}),c=S(r,v=>{const R=v.LONGER_ALT;if(R)return Z(R)?S(R,F=>es(r,F)):[es(r,R)]}),l=S(r,v=>v.PUSH_MODE),u=S(r,v=>_(v,"POP_MODE"))});let d;t("Line Terminator Handling",()=>{const v=gc(e.lineTerminatorCharacters);d=S(r,R=>!1),e.positionTracking!=="onlyOffset"&&(d=S(r,R=>_(R,"LINE_BREAKS")?!!R.LINE_BREAKS:mc(R,v)===!1&&wi(v,R.PATTERN)))});let f,h,m,g;t("Misc Mapping #2",()=>{f=S(r,pc),h=S(s,Tf),m=oe(r,(v,R)=>{const N=R.GROUP;return fe(N)&&N!==de.SKIPPED&&(v[N]=[]),v},{}),g=S(s,(v,R)=>({pattern:s[R],longerAlt:c[R],canLineTerminator:d[R],isCustom:f[R],short:h[R],group:o[R],push:l[R],pop:u[R],tokenTypeIdx:a[R],tokenType:r[R]}))});let A=!0,y=[];return e.safeMode||t("First Char Optimization",()=>{y=oe(r,(v,R,N)=>{if(typeof R.PATTERN=="string"){const F=R.PATTERN.charCodeAt(0),ne=et(F);Ir(v,ne,g[N])}else if(Z(R.START_CHARS_HINT)){let F;C(R.START_CHARS_HINT,ne=>{const we=typeof ne=="string"?ne.charCodeAt(0):ne,ge=et(we);F!==ge&&(F=ge,Ir(v,ge,g[N]))})}else if(qe(R.PATTERN))if(R.PATTERN.unicode)A=!1,e.ensureOptimizations&&Fr(`${Dn} Unable to analyze < ${R.PATTERN.toString()} > pattern. + The regexp unicode flag is not currently supported by the regexp-to-ast library. + This will disable the lexer's first char optimizations. + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNICODE_OPTIMIZE`);else{const F=qd(R.PATTERN,e.ensureOptimizations);D(F)&&(A=!1),C(F,ne=>{Ir(v,ne,g[N])})}else e.ensureOptimizations&&Fr(`${Dn} TokenType: <${R.name}> is using a custom token pattern without providing parameter. + This will disable the lexer's first char optimizations. + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_OPTIMIZE`),A=!1;return v},[])}),{emptyGroups:m,patternIdxToConfig:g,charCodeToPatternIdxToConfig:y,hasCustom:i,canBeOptimized:A}}function Qd(n,e){let t=[];const r=ef(n);t=t.concat(r.errors);const i=tf(r.valid),s=i.valid;return t=t.concat(i.errors),t=t.concat(Zd(s)),t=t.concat(uf(s)),t=t.concat(df(s,e)),t=t.concat(ff(s)),t}function Zd(n){let e=[];const t=ve(n,r=>qe(r[ht]));return e=e.concat(rf(t)),e=e.concat(of(t)),e=e.concat(cf(t)),e=e.concat(lf(t)),e=e.concat(sf(t)),e}function ef(n){const e=ve(n,i=>!_(i,ht)),t=S(e,i=>({message:"Token Type: ->"+i.name+"<- missing static 'PATTERN' property",type:j.MISSING_PATTERN,tokenTypes:[i]})),r=nr(n,e);return{errors:t,valid:r}}function tf(n){const e=ve(n,i=>{const s=i[ht];return!qe(s)&&!mt(s)&&!_(s,"exec")&&!fe(s)}),t=S(e,i=>({message:"Token Type: ->"+i.name+"<- static 'PATTERN' can only be a RegExp, a Function matching the {CustomPatternMatcherFunc} type or an Object matching the {ICustomPattern} interface.",type:j.INVALID_PATTERN,tokenTypes:[i]})),r=nr(n,e);return{errors:t,valid:r}}const nf=/[^\\][$]/;function rf(n){class e extends or{constructor(){super(...arguments),this.found=!1}visitEndAnchor(s){this.found=!0}}const t=ve(n,i=>{const s=i.PATTERN;try{const a=dr(s),o=new e;return o.visit(a),o.found}catch{return nf.test(s.source)}});return S(t,i=>({message:`Unexpected RegExp Anchor Error: + Token Type: ->`+i.name+`<- static 'PATTERN' cannot contain end of input anchor '$' + See chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.`,type:j.EOI_ANCHOR_FOUND,tokenTypes:[i]}))}function sf(n){const e=ve(n,r=>r.PATTERN.test(""));return S(e,r=>({message:"Token Type: ->"+r.name+"<- static 'PATTERN' must not match an empty string",type:j.EMPTY_MATCH_PATTERN,tokenTypes:[r]}))}const af=/[^\\[][\^]|^\^/;function of(n){class e extends or{constructor(){super(...arguments),this.found=!1}visitStartAnchor(s){this.found=!0}}const t=ve(n,i=>{const s=i.PATTERN;try{const a=dr(s),o=new e;return o.visit(a),o.found}catch{return af.test(s.source)}});return S(t,i=>({message:`Unexpected RegExp Anchor Error: + Token Type: ->`+i.name+`<- static 'PATTERN' cannot contain start of input anchor '^' + See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.`,type:j.SOI_ANCHOR_FOUND,tokenTypes:[i]}))}function cf(n){const e=ve(n,r=>{const i=r[ht];return i instanceof RegExp&&(i.multiline||i.global)});return S(e,r=>({message:"Token Type: ->"+r.name+"<- static 'PATTERN' may NOT contain global('g') or multiline('m')",type:j.UNSUPPORTED_FLAGS_FOUND,tokenTypes:[r]}))}function lf(n){const e=[];let t=S(n,s=>oe(n,(a,o)=>(s.PATTERN.source===o.PATTERN.source&&!ue(e,o)&&o.PATTERN!==de.NA&&(e.push(o),a.push(o)),a),[]));t=hn(t);const r=ve(t,s=>s.length>1);return S(r,s=>{const a=S(s,c=>c.name);return{message:`The same RegExp pattern ->${be(s).PATTERN}<-has been used in all of the following Token Types: ${a.join(", ")} <-`,type:j.DUPLICATE_PATTERNS_FOUND,tokenTypes:s}})}function uf(n){const e=ve(n,r=>{if(!_(r,"GROUP"))return!1;const i=r.GROUP;return i!==de.SKIPPED&&i!==de.NA&&!fe(i)});return S(e,r=>({message:"Token Type: ->"+r.name+"<- static 'GROUP' can only be Lexer.SKIPPED/Lexer.NA/A String",type:j.INVALID_GROUP_TYPE_FOUND,tokenTypes:[r]}))}function df(n,e){const t=ve(n,i=>i.PUSH_MODE!==void 0&&!ue(e,i.PUSH_MODE));return S(t,i=>({message:`Token Type: ->${i.name}<- static 'PUSH_MODE' value cannot refer to a Lexer Mode ->${i.PUSH_MODE}<-which does not exist`,type:j.PUSH_MODE_DOES_NOT_EXIST,tokenTypes:[i]}))}function ff(n){const e=[],t=oe(n,(r,i,s)=>{const a=i.PATTERN;return a===de.NA||(fe(a)?r.push({str:a,idx:s,tokenType:i}):qe(a)&&pf(a)&&r.push({str:a.source,idx:s,tokenType:i})),r},[]);return C(n,(r,i)=>{C(t,({str:s,idx:a,tokenType:o})=>{if(i${o.name}<- can never be matched. +Because it appears AFTER the Token Type ->${r.name}<-in the lexer's definition. +See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNREACHABLE`;e.push({message:c,type:j.UNREACHABLE_PATTERN,tokenTypes:[r,o]})}})}),e}function hf(n,e){if(qe(e)){const t=e.exec(n);return t!==null&&t.index===0}else{if(mt(e))return e(n,0,[],{});if(_(e,"exec"))return e.exec(n,0,[],{});if(typeof e=="string")return e===n;throw Error("non exhaustive match")}}function pf(n){return Dt([".","\\","[","]","|","^","$","(",")","?","*","+","{"],t=>n.source.indexOf(t)!==-1)===void 0}function ds(n){const e=n.ignoreCase?"i":"";return new RegExp(`^(?:${n.source})`,e)}function fs(n){const e=n.ignoreCase?"iy":"y";return new RegExp(`${n.source}`,e)}function mf(n,e,t){const r=[];return _(n,an)||r.push({message:"A MultiMode Lexer cannot be initialized without a <"+an+`> property in its definition +`,type:j.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE}),_(n,Sn)||r.push({message:"A MultiMode Lexer cannot be initialized without a <"+Sn+`> property in its definition +`,type:j.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY}),_(n,Sn)&&_(n,an)&&!_(n.modes,n.defaultMode)&&r.push({message:`A MultiMode Lexer cannot be initialized with a ${an}: <${n.defaultMode}>which does not exist +`,type:j.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST}),_(n,Sn)&&C(n.modes,(i,s)=>{C(i,(a,o)=>{if(ze(a))r.push({message:`A Lexer cannot be initialized using an undefined Token Type. Mode:<${s}> at index: <${o}> +`,type:j.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED});else if(_(a,"LONGER_ALT")){const c=Z(a.LONGER_ALT)?a.LONGER_ALT:[a.LONGER_ALT];C(c,l=>{!ze(l)&&!ue(i,l)&&r.push({message:`A MultiMode Lexer cannot be initialized with a longer_alt <${l.name}> on token <${a.name}> outside of mode <${s}> +`,type:j.MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE})})}})}),r}function gf(n,e,t){const r=[];let i=!1;const s=hn(Ne(K(n.modes))),a=rr(s,c=>c[ht]===de.NA),o=gc(t);return e&&C(a,c=>{const l=mc(c,o);if(l!==!1){const d={message:Af(c,l),type:l.issue,tokenType:c};r.push(d)}else _(c,"LINE_BREAKS")?c.LINE_BREAKS===!0&&(i=!0):wi(o,c.PATTERN)&&(i=!0)}),e&&!i&&r.push({message:`Warning: No LINE_BREAKS Found. + This Lexer has been defined to track line and column information, + But none of the Token Types can be identified as matching a line terminator. + See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#LINE_BREAKS + for details.`,type:j.NO_LINE_BREAKS_FLAGS}),r}function yf(n){const e={},t=Mt(n);return C(t,r=>{const i=n[r];if(Z(i))e[r]=[];else throw Error("non exhaustive match")}),e}function pc(n){const e=n.PATTERN;if(qe(e))return!1;if(mt(e))return!0;if(_(e,"exec"))return!0;if(fe(e))return!1;throw Error("non exhaustive match")}function Tf(n){return fe(n)&&n.length===1?n.charCodeAt(0):!1}const Rf={test:function(n){const e=n.length;for(let t=this.lastIndex;t Token Type + Root cause: ${e.errMsg}. + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#IDENTIFY_TERMINATOR`;if(e.issue===j.CUSTOM_LINE_BREAK)return`Warning: A Custom Token Pattern should specify the option. + The problem is in the <${n.name}> Token Type + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_LINE_BREAK`;throw Error("non exhaustive match")}function gc(n){return S(n,t=>fe(t)?t.charCodeAt(0):t)}function Ir(n,e,t){n[e]===void 0?n[e]=[t]:n[e].push(t)}const on=256;let _n=[];function et(n){return n255?255+~~(n/255):n}}function gn(n,e){const t=n.tokenTypeIdx;return t===e.tokenTypeIdx?!0:e.isParent===!0&&e.categoryMatchesMap[t]===!0}function Fn(n,e){return n.tokenTypeIdx===e.tokenTypeIdx}let hs=1;const yc={};function yn(n){const e=Ef(n);kf(e),If(e),Sf(e),C(e,t=>{t.isParent=t.categoryMatches.length>0})}function Ef(n){let e=te(n),t=n,r=!0;for(;r;){t=hn(Ne(S(t,s=>s.CATEGORIES)));const i=nr(t,e);e=e.concat(i),D(i)?r=!1:t=i}return e}function kf(n){C(n,e=>{Rc(e)||(yc[hs]=e,e.tokenTypeIdx=hs++),ps(e)&&!Z(e.CATEGORIES)&&(e.CATEGORIES=[e.CATEGORIES]),ps(e)||(e.CATEGORIES=[]),xf(e)||(e.categoryMatches=[]),Nf(e)||(e.categoryMatchesMap={})})}function Sf(n){C(n,e=>{e.categoryMatches=[],C(e.categoryMatchesMap,(t,r)=>{e.categoryMatches.push(yc[r].tokenTypeIdx)})})}function If(n){C(n,e=>{Tc([],e)})}function Tc(n,e){C(n,t=>{e.categoryMatchesMap[t.tokenTypeIdx]=!0}),C(e.CATEGORIES,t=>{const r=n.concat(e);ue(r,t)||Tc(r,t)})}function Rc(n){return _(n,"tokenTypeIdx")}function ps(n){return _(n,"CATEGORIES")}function xf(n){return _(n,"categoryMatches")}function Nf(n){return _(n,"categoryMatchesMap")}function Cf(n){return _(n,"tokenTypeIdx")}const _f={buildUnableToPopLexerModeMessage(n){return`Unable to pop Lexer Mode after encountering Token ->${n.image}<- The Mode Stack is empty`},buildUnexpectedCharactersMessage(n,e,t,r,i){return`unexpected character: ->${n.charAt(e)}<- at offset: ${e}, skipped ${t} characters.`}};var j;(function(n){n[n.MISSING_PATTERN=0]="MISSING_PATTERN",n[n.INVALID_PATTERN=1]="INVALID_PATTERN",n[n.EOI_ANCHOR_FOUND=2]="EOI_ANCHOR_FOUND",n[n.UNSUPPORTED_FLAGS_FOUND=3]="UNSUPPORTED_FLAGS_FOUND",n[n.DUPLICATE_PATTERNS_FOUND=4]="DUPLICATE_PATTERNS_FOUND",n[n.INVALID_GROUP_TYPE_FOUND=5]="INVALID_GROUP_TYPE_FOUND",n[n.PUSH_MODE_DOES_NOT_EXIST=6]="PUSH_MODE_DOES_NOT_EXIST",n[n.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE=7]="MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE",n[n.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY=8]="MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY",n[n.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST=9]="MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST",n[n.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED=10]="LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED",n[n.SOI_ANCHOR_FOUND=11]="SOI_ANCHOR_FOUND",n[n.EMPTY_MATCH_PATTERN=12]="EMPTY_MATCH_PATTERN",n[n.NO_LINE_BREAKS_FLAGS=13]="NO_LINE_BREAKS_FLAGS",n[n.UNREACHABLE_PATTERN=14]="UNREACHABLE_PATTERN",n[n.IDENTIFY_TERMINATOR=15]="IDENTIFY_TERMINATOR",n[n.CUSTOM_LINE_BREAK=16]="CUSTOM_LINE_BREAK",n[n.MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE=17]="MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE"})(j||(j={}));const cn={deferDefinitionErrorsHandling:!1,positionTracking:"full",lineTerminatorsPattern:/\n|\r\n?/g,lineTerminatorCharacters:[` +`,"\r"],ensureOptimizations:!1,safeMode:!1,errorMessageProvider:_f,traceInitPerf:!1,skipValidations:!1,recoveryEnabled:!0};Object.freeze(cn);class de{constructor(e,t=cn){if(this.lexerDefinition=e,this.lexerDefinitionErrors=[],this.lexerDefinitionWarning=[],this.patternIdxToConfig={},this.charCodeToPatternIdxToConfig={},this.modes=[],this.emptyGroups={},this.trackStartLines=!0,this.trackEndLines=!0,this.hasCustom=!1,this.canModeBeOptimized={},this.TRACE_INIT=(i,s)=>{if(this.traceInitPerf===!0){this.traceInitIndent++;const a=new Array(this.traceInitIndent+1).join(" ");this.traceInitIndent <${i}>`);const{time:o,value:c}=lc(s),l=o>10?console.warn:console.log;return this.traceInitIndent time: ${o}ms`),this.traceInitIndent--,c}else return s()},typeof t=="boolean")throw Error(`The second argument to the Lexer constructor is now an ILexerConfig Object. +a boolean 2nd argument is no longer supported`);this.config=Ae({},cn,t);const r=this.config.traceInitPerf;r===!0?(this.traceInitMaxIdent=1/0,this.traceInitPerf=!0):typeof r=="number"&&(this.traceInitMaxIdent=r,this.traceInitPerf=!0),this.traceInitIndent=-1,this.TRACE_INIT("Lexer Constructor",()=>{let i,s=!0;this.TRACE_INIT("Lexer Config handling",()=>{if(this.config.lineTerminatorsPattern===cn.lineTerminatorsPattern)this.config.lineTerminatorsPattern=Rf;else if(this.config.lineTerminatorCharacters===cn.lineTerminatorCharacters)throw Error(`Error: Missing property on the Lexer config. + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#MISSING_LINE_TERM_CHARS`);if(t.safeMode&&t.ensureOptimizations)throw Error('"safeMode" and "ensureOptimizations" flags are mutually exclusive.');this.trackStartLines=/full|onlyStart/i.test(this.config.positionTracking),this.trackEndLines=/full/i.test(this.config.positionTracking),Z(e)?i={modes:{defaultMode:te(e)},defaultMode:an}:(s=!1,i=te(e))}),this.config.skipValidations===!1&&(this.TRACE_INIT("performRuntimeChecks",()=>{this.lexerDefinitionErrors=this.lexerDefinitionErrors.concat(mf(i,this.trackStartLines,this.config.lineTerminatorCharacters))}),this.TRACE_INIT("performWarningRuntimeChecks",()=>{this.lexerDefinitionWarning=this.lexerDefinitionWarning.concat(gf(i,this.trackStartLines,this.config.lineTerminatorCharacters))})),i.modes=i.modes?i.modes:{},C(i.modes,(o,c)=>{i.modes[c]=rr(o,l=>ze(l))});const a=Mt(i.modes);if(C(i.modes,(o,c)=>{this.TRACE_INIT(`Mode: <${c}> processing`,()=>{if(this.modes.push(c),this.config.skipValidations===!1&&this.TRACE_INIT("validatePatterns",()=>{this.lexerDefinitionErrors=this.lexerDefinitionErrors.concat(Qd(o,a))}),D(this.lexerDefinitionErrors)){yn(o);let l;this.TRACE_INIT("analyzeTokenTypes",()=>{l=Jd(o,{lineTerminatorCharacters:this.config.lineTerminatorCharacters,positionTracking:t.positionTracking,ensureOptimizations:t.ensureOptimizations,safeMode:t.safeMode,tracer:this.TRACE_INIT})}),this.patternIdxToConfig[c]=l.patternIdxToConfig,this.charCodeToPatternIdxToConfig[c]=l.charCodeToPatternIdxToConfig,this.emptyGroups=Ae({},this.emptyGroups,l.emptyGroups),this.hasCustom=l.hasCustom||this.hasCustom,this.canModeBeOptimized[c]=l.canBeOptimized}})}),this.defaultMode=i.defaultMode,!D(this.lexerDefinitionErrors)&&!this.config.deferDefinitionErrorsHandling){const c=S(this.lexerDefinitionErrors,l=>l.message).join(`----------------------- +`);throw new Error(`Errors detected in definition of Lexer: +`+c)}C(this.lexerDefinitionWarning,o=>{cc(o.message)}),this.TRACE_INIT("Choosing sub-methods implementations",()=>{if(hc?(this.chopInput=Zi,this.match=this.matchWithTest):(this.updateLastIndex=q,this.match=this.matchWithExec),s&&(this.handleModes=q),this.trackStartLines===!1&&(this.computeNewColumn=Zi),this.trackEndLines===!1&&(this.updateTokenEndLineColumnLocation=q),/full/i.test(this.config.positionTracking))this.createTokenInstance=this.createFullToken;else if(/onlyStart/i.test(this.config.positionTracking))this.createTokenInstance=this.createStartOnlyToken;else if(/onlyOffset/i.test(this.config.positionTracking))this.createTokenInstance=this.createOffsetOnlyToken;else throw Error(`Invalid config option: "${this.config.positionTracking}"`);this.hasCustom?(this.addToken=this.addTokenUsingPush,this.handlePayload=this.handlePayloadWithCustom):(this.addToken=this.addTokenUsingMemberAccess,this.handlePayload=this.handlePayloadNoCustom)}),this.TRACE_INIT("Failed Optimization Warnings",()=>{const o=oe(this.canModeBeOptimized,(c,l,u)=>(l===!1&&c.push(u),c),[]);if(t.ensureOptimizations&&!D(o))throw Error(`Lexer Modes: < ${o.join(", ")} > cannot be optimized. + Disable the "ensureOptimizations" lexer config flag to silently ignore this and run the lexer in an un-optimized mode. + Or inspect the console log for details on how to resolve these issues.`)}),this.TRACE_INIT("clearRegExpParserCache",()=>{zd()}),this.TRACE_INIT("toFastProperties",()=>{uc(this)})})}tokenize(e,t=this.defaultMode){if(!D(this.lexerDefinitionErrors)){const i=S(this.lexerDefinitionErrors,s=>s.message).join(`----------------------- +`);throw new Error(`Unable to Tokenize because Errors detected in definition of Lexer: +`+i)}return this.tokenizeInternal(e,t)}tokenizeInternal(e,t){let r,i,s,a,o,c,l,u,d,f,h,m,g,A,y;const v=e,R=v.length;let N=0,F=0;const ne=this.hasCustom?0:Math.floor(e.length/10),we=new Array(ne),ge=[];let De=this.trackStartLines?1:void 0,Se=this.trackStartLines?1:void 0;const k=yf(this.emptyGroups),T=this.trackStartLines,E=this.config.lineTerminatorsPattern;let I=0,O=[],$=[];const L=[],ye=[];Object.freeze(ye);let z;function V(){return O}function at(re){const Ie=et(re),Tt=$[Ie];return Tt===void 0?ye:Tt}const Dl=re=>{if(L.length===1&&re.tokenType.PUSH_MODE===void 0){const Ie=this.config.errorMessageProvider.buildUnableToPopLexerModeMessage(re);ge.push({offset:re.startOffset,line:re.startLine,column:re.startColumn,length:re.image.length,message:Ie})}else{L.pop();const Ie=Ft(L);O=this.patternIdxToConfig[Ie],$=this.charCodeToPatternIdxToConfig[Ie],I=O.length;const Tt=this.canModeBeOptimized[Ie]&&this.config.safeMode===!1;$&&Tt?z=at:z=V}};function qi(re){L.push(re),$=this.charCodeToPatternIdxToConfig[re],O=this.patternIdxToConfig[re],I=O.length,I=O.length;const Ie=this.canModeBeOptimized[re]&&this.config.safeMode===!1;$&&Ie?z=at:z=V}qi.call(this,t);let Le;const Yi=this.config.recoveryEnabled;for(;Nc.length){c=a,l=u,Le=We;break}}}break}}if(c!==null){if(d=c.length,f=Le.group,f!==void 0&&(h=Le.tokenTypeIdx,m=this.createTokenInstance(c,N,h,Le.tokenType,De,Se,d),this.handlePayload(m,l),f===!1?F=this.addToken(we,F,m):k[f].push(m)),e=this.chopInput(e,d),N=N+d,Se=this.computeNewColumn(Se,d),T===!0&&Le.canLineTerminator===!0){let Te=0,Ve,Xe;E.lastIndex=0;do Ve=E.test(c),Ve===!0&&(Xe=E.lastIndex-1,Te++);while(Ve===!0);Te!==0&&(De=De+Te,Se=d-Xe,this.updateTokenEndLineColumnLocation(m,f,Xe,Te,De,Se,d))}this.handleModes(Le,Dl,qi,m)}else{const Te=N,Ve=De,Xe=Se;let We=Yi===!1;for(;We===!1&&N ${Et(n)} <--`:`token of type --> ${n.name} <--`} but found --> '${e.image}' <--`},buildNotAllInputParsedMessage({firstRedundant:n,ruleName:e}){return"Redundant input, expecting EOF but found: "+n.image},buildNoViableAltMessage({expectedPathsPerAlt:n,actual:e,previous:t,customUserDescription:r,ruleName:i}){const s="Expecting: ",o=` +but found: '`+be(e).image+"'";if(r)return s+r+o;{const c=oe(n,(f,h)=>f.concat(h),[]),l=S(c,f=>`[${S(f,h=>Et(h)).join(", ")}]`),d=`one of these possible Token sequences: +${S(l,(f,h)=>` ${h+1}. ${f}`).join(` +`)}`;return s+d+o}},buildEarlyExitMessage({expectedIterationPaths:n,actual:e,customUserDescription:t,ruleName:r}){const i="Expecting: ",a=` +but found: '`+be(e).image+"'";if(t)return i+t+a;{const c=`expecting at least one iteration which starts with one of these possible Token sequences:: + <${S(n,l=>`[${S(l,u=>Et(u)).join(",")}]`).join(" ,")}>`;return i+c+a}}};Object.freeze(At);const $f={buildRuleNotFoundError(n,e){return"Invalid grammar, reference to a rule which is not defined: ->"+e.nonTerminalName+`<- +inside top level rule: ->`+n.name+"<-"}},lt={buildDuplicateFoundError(n,e){function t(u){return u instanceof G?u.terminalType.name:u instanceof ce?u.nonTerminalName:""}const r=n.name,i=be(e),s=i.idx,a=Fe(i),o=t(i),c=s>0;let l=`->${a}${c?s:""}<- ${o?`with argument: ->${o}<-`:""} + appears more than once (${e.length} times) in the top level rule: ->${r}<-. + For further details see: https://chevrotain.io/docs/FAQ.html#NUMERICAL_SUFFIXES + `;return l=l.replace(/[ \t]+/g," "),l=l.replace(/\s\s+/g,` +`),l},buildNamespaceConflictError(n){return`Namespace conflict found in grammar. +The grammar has both a Terminal(Token) and a Non-Terminal(Rule) named: <${n.name}>. +To resolve this make sure each Terminal and Non-Terminal names are unique +This is easy to accomplish by using the convention that Terminal names start with an uppercase letter +and Non-Terminal names start with a lower case letter.`},buildAlternationPrefixAmbiguityError(n){const e=S(n.prefixPath,i=>Et(i)).join(", "),t=n.alternation.idx===0?"":n.alternation.idx;return`Ambiguous alternatives: <${n.ambiguityIndices.join(" ,")}> due to common lookahead prefix +in inside <${n.topLevelRule.name}> Rule, +<${e}> may appears as a prefix path in all these alternatives. +See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#COMMON_PREFIX +For Further details.`},buildAlternationAmbiguityError(n){const e=S(n.prefixPath,i=>Et(i)).join(", "),t=n.alternation.idx===0?"":n.alternation.idx;let r=`Ambiguous Alternatives Detected: <${n.ambiguityIndices.join(" ,")}> in inside <${n.topLevelRule.name}> Rule, +<${e}> may appears as a prefix path in all these alternatives. +`;return r=r+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES +For Further details.`,r},buildEmptyRepetitionError(n){let e=Fe(n.repetition);return n.repetition.idx!==0&&(e+=n.repetition.idx),`The repetition <${e}> within Rule <${n.topLevelRule.name}> can never consume any tokens. +This could lead to an infinite loop.`},buildTokenNameError(n){return"deprecated"},buildEmptyAlternationError(n){return`Ambiguous empty alternative: <${n.emptyChoiceIdx+1}> in inside <${n.topLevelRule.name}> Rule. +Only the last alternative may be an empty alternative.`},buildTooManyAlternativesError(n){return`An Alternation cannot have more than 256 alternatives: + inside <${n.topLevelRule.name}> Rule. + has ${n.alternation.definition.length+1} alternatives.`},buildLeftRecursionError(n){const e=n.topLevelRule.name,t=S(n.leftRecursionPath,s=>s.name),r=`${e} --> ${t.concat([e]).join(" --> ")}`;return`Left Recursion found in grammar. +rule: <${e}> can be invoked from itself (directly or indirectly) +without consuming any Tokens. The grammar path that causes this is: + ${r} + To fix this refactor your grammar to remove the left recursion. +see: https://en.wikipedia.org/wiki/LL_parser#Left_factoring.`},buildInvalidRuleNameError(n){return"deprecated"},buildDuplicateRuleNameError(n){let e;return n.topLevelRule instanceof qt?e=n.topLevelRule.name:e=n.topLevelRule,`Duplicate definition, rule: ->${e}<- is already defined in the grammar: ->${n.grammarName}<-`}};function Of(n,e){const t=new bf(n,e);return t.resolveRefs(),t.errors}class bf extends Yt{constructor(e,t){super(),this.nameToTopRule=e,this.errMsgProvider=t,this.errors=[]}resolveRefs(){C(K(this.nameToTopRule),e=>{this.currTopLevel=e,e.accept(this)})}visitNonTerminal(e){const t=this.nameToTopRule[e.nonTerminalName];if(t)e.referencedRule=t;else{const r=this.errMsgProvider.buildRuleNotFoundError(this.currTopLevel,e);this.errors.push({message:r,type:le.UNRESOLVED_SUBRULE_REF,ruleName:this.currTopLevel.name,unresolvedRefName:e.nonTerminalName})}}}class Pf extends ur{constructor(e,t){super(),this.topProd=e,this.path=t,this.possibleTokTypes=[],this.nextProductionName="",this.nextProductionOccurrence=0,this.found=!1,this.isAtEndOfPath=!1}startWalking(){if(this.found=!1,this.path.ruleStack[0]!==this.topProd.name)throw Error("The path does not start with the walker's top Rule!");return this.ruleStack=te(this.path.ruleStack).reverse(),this.occurrenceStack=te(this.path.occurrenceStack).reverse(),this.ruleStack.pop(),this.occurrenceStack.pop(),this.updateExpectedNext(),this.walk(this.topProd),this.possibleTokTypes}walk(e,t=[]){this.found||super.walk(e,t)}walkProdRef(e,t,r){if(e.referencedRule.name===this.nextProductionName&&e.idx===this.nextProductionOccurrence){const i=t.concat(r);this.updateExpectedNext(),this.walk(e.referencedRule,i)}}updateExpectedNext(){D(this.ruleStack)?(this.nextProductionName="",this.nextProductionOccurrence=0,this.isAtEndOfPath=!0):(this.nextProductionName=this.ruleStack.pop(),this.nextProductionOccurrence=this.occurrenceStack.pop())}}class Mf extends Pf{constructor(e,t){super(e,t),this.path=t,this.nextTerminalName="",this.nextTerminalOccurrence=0,this.nextTerminalName=this.path.lastTok.name,this.nextTerminalOccurrence=this.path.lastTokOccurrence}walkTerminal(e,t,r){if(this.isAtEndOfPath&&e.terminalType.name===this.nextTerminalName&&e.idx===this.nextTerminalOccurrence&&!this.found){const i=t.concat(r),s=new he({definition:i});this.possibleTokTypes=mn(s),this.found=!0}}}class fr extends ur{constructor(e,t){super(),this.topRule=e,this.occurrence=t,this.result={token:void 0,occurrence:void 0,isEndOfRule:void 0}}startWalking(){return this.walk(this.topRule),this.result}}class Df extends fr{walkMany(e,t,r){if(e.idx===this.occurrence){const i=be(t.concat(r));this.result.isEndOfRule=i===void 0,i instanceof G&&(this.result.token=i.terminalType,this.result.occurrence=i.idx)}else super.walkMany(e,t,r)}}class ks extends fr{walkManySep(e,t,r){if(e.idx===this.occurrence){const i=be(t.concat(r));this.result.isEndOfRule=i===void 0,i instanceof G&&(this.result.token=i.terminalType,this.result.occurrence=i.idx)}else super.walkManySep(e,t,r)}}class Ff extends fr{walkAtLeastOne(e,t,r){if(e.idx===this.occurrence){const i=be(t.concat(r));this.result.isEndOfRule=i===void 0,i instanceof G&&(this.result.token=i.terminalType,this.result.occurrence=i.idx)}else super.walkAtLeastOne(e,t,r)}}class Ss extends fr{walkAtLeastOneSep(e,t,r){if(e.idx===this.occurrence){const i=be(t.concat(r));this.result.isEndOfRule=i===void 0,i instanceof G&&(this.result.token=i.terminalType,this.result.occurrence=i.idx)}else super.walkAtLeastOneSep(e,t,r)}}function Br(n,e,t=[]){t=te(t);let r=[],i=0;function s(o){return o.concat(J(n,i+1))}function a(o){const c=Br(s(o),e,t);return r.concat(c)}for(;t.length{D(c.definition)===!1&&(r=a(c.definition))}),r;if(o instanceof G)t.push(o.terminalType);else throw Error("non exhaustive match")}i++}return r.push({partialPath:t,suffixDef:J(n,i)}),r}function kc(n,e,t,r){const i="EXIT_NONE_TERMINAL",s=[i],a="EXIT_ALTERNATIVE";let o=!1;const c=e.length,l=c-r-1,u=[],d=[];for(d.push({idx:-1,def:n,ruleStack:[],occurrenceStack:[]});!D(d);){const f=d.pop();if(f===a){o&&Ft(d).idx<=l&&d.pop();continue}const h=f.def,m=f.idx,g=f.ruleStack,A=f.occurrenceStack;if(D(h))continue;const y=h[0];if(y===i){const v={idx:m,def:J(h),ruleStack:ln(g),occurrenceStack:ln(A)};d.push(v)}else if(y instanceof G)if(m=0;v--){const R=y.definition[v],N={idx:m,def:R.definition.concat(J(h)),ruleStack:g,occurrenceStack:A};d.push(N),d.push(a)}else if(y instanceof he)d.push({idx:m,def:y.definition.concat(J(h)),ruleStack:g,occurrenceStack:A});else if(y instanceof qt)d.push(Gf(y,m,g,A));else throw Error("non exhaustive match")}return u}function Gf(n,e,t,r){const i=te(t);i.push(n.name);const s=te(r);return s.push(1),{idx:e,def:n.definition,ruleStack:i,occurrenceStack:s}}var B;(function(n){n[n.OPTION=0]="OPTION",n[n.REPETITION=1]="REPETITION",n[n.REPETITION_MANDATORY=2]="REPETITION_MANDATORY",n[n.REPETITION_MANDATORY_WITH_SEPARATOR=3]="REPETITION_MANDATORY_WITH_SEPARATOR",n[n.REPETITION_WITH_SEPARATOR=4]="REPETITION_WITH_SEPARATOR",n[n.ALTERNATION=5]="ALTERNATION"})(B||(B={}));function $i(n){if(n instanceof ee||n==="Option")return B.OPTION;if(n instanceof W||n==="Repetition")return B.REPETITION;if(n instanceof Ee||n==="RepetitionMandatory")return B.REPETITION_MANDATORY;if(n instanceof ke||n==="RepetitionMandatoryWithSeparator")return B.REPETITION_MANDATORY_WITH_SEPARATOR;if(n instanceof pe||n==="RepetitionWithSeparator")return B.REPETITION_WITH_SEPARATOR;if(n instanceof me||n==="Alternation")return B.ALTERNATION;throw Error("non exhaustive match")}function Is(n){const{occurrence:e,rule:t,prodType:r,maxLookahead:i}=n,s=$i(r);return s===B.ALTERNATION?hr(e,t,i):pr(e,t,s,i)}function Uf(n,e,t,r,i,s){const a=hr(n,e,t),o=xc(a)?Fn:gn;return s(a,r,o,i)}function Bf(n,e,t,r,i,s){const a=pr(n,e,i,t),o=xc(a)?Fn:gn;return s(a[0],o,r)}function Vf(n,e,t,r){const i=n.length,s=$e(n,a=>$e(a,o=>o.length===1));if(e)return function(a){const o=S(a,c=>c.GATE);for(let c=0;cNe(c)),o=oe(a,(c,l,u)=>(C(l,d=>{_(c,d.tokenTypeIdx)||(c[d.tokenTypeIdx]=u),C(d.categoryMatches,f=>{_(c,f)||(c[f]=u)})}),c),{});return function(){const c=this.LA(1);return o[c.tokenTypeIdx]}}else return function(){for(let a=0;as.length===1),i=n.length;if(r&&!t){const s=Ne(n);if(s.length===1&&D(s[0].categoryMatches)){const o=s[0].tokenTypeIdx;return function(){return this.LA(1).tokenTypeIdx===o}}else{const a=oe(s,(o,c,l)=>(o[c.tokenTypeIdx]=!0,C(c.categoryMatches,u=>{o[u]=!0}),o),[]);return function(){const o=this.LA(1);return a[o.tokenTypeIdx]===!0}}}else return function(){e:for(let s=0;sBr([a],1)),r=xs(t.length),i=S(t,a=>{const o={};return C(a,c=>{const l=xr(c.partialPath);C(l,u=>{o[u]=!0})}),o});let s=t;for(let a=1;a<=e;a++){const o=s;s=xs(o.length);for(let c=0;c{const y=xr(A.partialPath);C(y,v=>{i[c][v]=!0})})}}}}return r}function hr(n,e,t,r){const i=new Sc(n,B.ALTERNATION,r);return e.accept(i),Ic(i.result,t)}function pr(n,e,t,r){const i=new Sc(n,t);e.accept(i);const s=i.result,o=new jf(e,n,t).startWalking(),c=new he({definition:s}),l=new he({definition:o});return Ic([c,l],r)}function Vr(n,e){e:for(let t=0;t{const i=e[r];return t===i||i.categoryMatchesMap[t.tokenTypeIdx]})}function xc(n){return $e(n,e=>$e(e,t=>$e(t,r=>D(r.categoryMatches))))}function zf(n){const e=n.lookaheadStrategy.validate({rules:n.rules,tokenTypes:n.tokenTypes,grammarName:n.grammarName});return S(e,t=>Object.assign({type:le.CUSTOM_LOOKAHEAD_VALIDATION},t))}function qf(n,e,t,r){const i=Re(n,c=>Yf(c,t)),s=oh(n,e,t),a=Re(n,c=>rh(c,t)),o=Re(n,c=>Qf(c,n,r,t));return i.concat(s,a,o)}function Yf(n,e){const t=new Jf;n.accept(t);const r=t.allProductions,i=mu(r,Xf),s=Pe(i,o=>o.length>1);return S(K(s),o=>{const c=be(o),l=e.buildDuplicateFoundError(n,o),u=Fe(c),d={message:l,type:le.DUPLICATE_PRODUCTIONS,ruleName:n.name,dslName:u,occurrence:c.idx},f=Nc(c);return f&&(d.parameter=f),d})}function Xf(n){return`${Fe(n)}_#_${n.idx}_#_${Nc(n)}`}function Nc(n){return n instanceof G?n.terminalType.name:n instanceof ce?n.nonTerminalName:""}class Jf extends Yt{constructor(){super(...arguments),this.allProductions=[]}visitNonTerminal(e){this.allProductions.push(e)}visitOption(e){this.allProductions.push(e)}visitRepetitionWithSeparator(e){this.allProductions.push(e)}visitRepetitionMandatory(e){this.allProductions.push(e)}visitRepetitionMandatoryWithSeparator(e){this.allProductions.push(e)}visitRepetition(e){this.allProductions.push(e)}visitAlternation(e){this.allProductions.push(e)}visitTerminal(e){this.allProductions.push(e)}}function Qf(n,e,t,r){const i=[];if(oe(e,(a,o)=>o.name===n.name?a+1:a,0)>1){const a=r.buildDuplicateRuleNameError({topLevelRule:n,grammarName:t});i.push({message:a,type:le.DUPLICATE_RULE_NAME,ruleName:n.name})}return i}function Zf(n,e,t){const r=[];let i;return ue(e,n)||(i=`Invalid rule override, rule: ->${n}<- cannot be overridden in the grammar: ->${t}<-as it is not defined in any of the super grammars `,r.push({message:i,type:le.INVALID_RULE_OVERRIDE,ruleName:n})),r}function Cc(n,e,t,r=[]){const i=[],s=wn(e.definition);if(D(s))return[];{const a=n.name;ue(s,n)&&i.push({message:t.buildLeftRecursionError({topLevelRule:n,leftRecursionPath:r}),type:le.LEFT_RECURSION,ruleName:a});const c=nr(s,r.concat([n])),l=Re(c,u=>{const d=te(r);return d.push(u),Cc(n,u,t,d)});return i.concat(l)}}function wn(n){let e=[];if(D(n))return e;const t=be(n);if(t instanceof ce)e.push(t.referencedRule);else if(t instanceof he||t instanceof ee||t instanceof Ee||t instanceof ke||t instanceof pe||t instanceof W)e=e.concat(wn(t.definition));else if(t instanceof me)e=Ne(S(t.definition,s=>wn(s.definition)));else if(!(t instanceof G))throw Error("non exhaustive match");const r=Mn(t),i=n.length>1;if(r&&i){const s=J(n);return e.concat(wn(s))}else return e}class Oi extends Yt{constructor(){super(...arguments),this.alternations=[]}visitAlternation(e){this.alternations.push(e)}}function eh(n,e){const t=new Oi;n.accept(t);const r=t.alternations;return Re(r,s=>{const a=ln(s.definition);return Re(a,(o,c)=>{const l=kc([o],[],gn,1);return D(l)?[{message:e.buildEmptyAlternationError({topLevelRule:n,alternation:s,emptyChoiceIdx:c}),type:le.NONE_LAST_EMPTY_ALT,ruleName:n.name,occurrence:s.idx,alternative:c+1}]:[]})})}function th(n,e,t){const r=new Oi;n.accept(r);let i=r.alternations;return i=rr(i,a=>a.ignoreAmbiguities===!0),Re(i,a=>{const o=a.idx,c=a.maxLookahead||e,l=hr(o,n,c,a),u=sh(l,a,n,t),d=ah(l,a,n,t);return u.concat(d)})}class nh extends Yt{constructor(){super(...arguments),this.allProductions=[]}visitRepetitionWithSeparator(e){this.allProductions.push(e)}visitRepetitionMandatory(e){this.allProductions.push(e)}visitRepetitionMandatoryWithSeparator(e){this.allProductions.push(e)}visitRepetition(e){this.allProductions.push(e)}}function rh(n,e){const t=new Oi;n.accept(t);const r=t.alternations;return Re(r,s=>s.definition.length>255?[{message:e.buildTooManyAlternativesError({topLevelRule:n,alternation:s}),type:le.TOO_MANY_ALTS,ruleName:n.name,occurrence:s.idx}]:[])}function ih(n,e,t){const r=[];return C(n,i=>{const s=new nh;i.accept(s);const a=s.allProductions;C(a,o=>{const c=$i(o),l=o.maxLookahead||e,u=o.idx,f=pr(u,i,c,l)[0];if(D(Ne(f))){const h=t.buildEmptyRepetitionError({topLevelRule:i,repetition:o});r.push({message:h,type:le.NO_NON_EMPTY_LOOKAHEAD,ruleName:i.name})}})}),r}function sh(n,e,t,r){const i=[],s=oe(n,(o,c,l)=>(e.definition[l].ignoreAmbiguities===!0||C(c,u=>{const d=[l];C(n,(f,h)=>{l!==h&&Vr(f,u)&&e.definition[h].ignoreAmbiguities!==!0&&d.push(h)}),d.length>1&&!Vr(i,u)&&(i.push(u),o.push({alts:d,path:u}))}),o),[]);return S(s,o=>{const c=S(o.alts,u=>u+1);return{message:r.buildAlternationAmbiguityError({topLevelRule:t,alternation:e,ambiguityIndices:c,prefixPath:o.path}),type:le.AMBIGUOUS_ALTS,ruleName:t.name,occurrence:e.idx,alternatives:o.alts}})}function ah(n,e,t,r){const i=oe(n,(a,o,c)=>{const l=S(o,u=>({idx:c,path:u}));return a.concat(l)},[]);return hn(Re(i,a=>{if(e.definition[a.idx].ignoreAmbiguities===!0)return[];const c=a.idx,l=a.path,u=ve(i,f=>e.definition[f.idx].ignoreAmbiguities!==!0&&f.idx{const h=[f.idx+1,c+1],m=e.idx===0?"":e.idx;return{message:r.buildAlternationPrefixAmbiguityError({topLevelRule:t,alternation:e,ambiguityIndices:h,prefixPath:f.path}),type:le.AMBIGUOUS_PREFIX_ALTS,ruleName:t.name,occurrence:m,alternatives:h}})}))}function oh(n,e,t){const r=[],i=S(e,s=>s.name);return C(n,s=>{const a=s.name;if(ue(i,a)){const o=t.buildNamespaceConflictError(s);r.push({message:o,type:le.CONFLICT_TOKENS_RULES_NAMESPACE,ruleName:a})}}),r}function ch(n){const e=Ai(n,{errMsgProvider:$f}),t={};return C(n.rules,r=>{t[r.name]=r}),Of(t,e.errMsgProvider)}function lh(n){return n=Ai(n,{errMsgProvider:lt}),qf(n.rules,n.tokenTypes,n.errMsgProvider,n.grammarName)}const _c="MismatchedTokenException",wc="NoViableAltException",Lc="EarlyExitException",$c="NotAllInputParsedException",Oc=[_c,wc,Lc,$c];Object.freeze(Oc);function Gn(n){return ue(Oc,n.name)}class mr extends Error{constructor(e,t){super(e),this.token=t,this.resyncedTokens=[],Object.setPrototypeOf(this,new.target.prototype),Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}}class bc extends mr{constructor(e,t,r){super(e,t),this.previousToken=r,this.name=_c}}class uh extends mr{constructor(e,t,r){super(e,t),this.previousToken=r,this.name=wc}}class dh extends mr{constructor(e,t){super(e,t),this.name=$c}}class fh extends mr{constructor(e,t,r){super(e,t),this.previousToken=r,this.name=Lc}}const Nr={},Pc="InRuleRecoveryException";class hh extends Error{constructor(e){super(e),this.name=Pc}}class ph{initRecoverable(e){this.firstAfterRepMap={},this.resyncFollows={},this.recoveryEnabled=_(e,"recoveryEnabled")?e.recoveryEnabled:Ye.recoveryEnabled,this.recoveryEnabled&&(this.attemptInRepetitionRecovery=mh)}getTokenToInsert(e){const t=Li(e,"",NaN,NaN,NaN,NaN,NaN,NaN);return t.isInsertedInRecovery=!0,t}canTokenTypeBeInsertedInRecovery(e){return!0}canTokenTypeBeDeletedInRecovery(e){return!0}tryInRepetitionRecovery(e,t,r,i){const s=this.findReSyncTokenType(),a=this.exportLexerState(),o=[];let c=!1;const l=this.LA(1);let u=this.LA(1);const d=()=>{const f=this.LA(0),h=this.errorMessageProvider.buildMismatchTokenMessage({expected:i,actual:l,previous:f,ruleName:this.getCurrRuleFullName()}),m=new bc(h,l,this.LA(0));m.resyncedTokens=ln(o),this.SAVE_ERROR(m)};for(;!c;)if(this.tokenMatcher(u,i)){d();return}else if(r.call(this)){d(),e.apply(this,t);return}else this.tokenMatcher(u,s)?c=!0:(u=this.SKIP_TOKEN(),this.addToResyncTokens(u,o));this.importLexerState(a)}shouldInRepetitionRecoveryBeTried(e,t,r){return!(r===!1||this.tokenMatcher(this.LA(1),e)||this.isBackTracking()||this.canPerformInRuleRecovery(e,this.getFollowsForInRuleRecovery(e,t)))}getFollowsForInRuleRecovery(e,t){const r=this.getCurrentGrammarPath(e,t);return this.getNextPossibleTokenTypes(r)}tryInRuleRecovery(e,t){if(this.canRecoverWithSingleTokenInsertion(e,t))return this.getTokenToInsert(e);if(this.canRecoverWithSingleTokenDeletion(e)){const r=this.SKIP_TOKEN();return this.consumeToken(),r}throw new hh("sad sad panda")}canPerformInRuleRecovery(e,t){return this.canRecoverWithSingleTokenInsertion(e,t)||this.canRecoverWithSingleTokenDeletion(e)}canRecoverWithSingleTokenInsertion(e,t){if(!this.canTokenTypeBeInsertedInRecovery(e)||D(t))return!1;const r=this.LA(1);return Dt(t,s=>this.tokenMatcher(r,s))!==void 0}canRecoverWithSingleTokenDeletion(e){return this.canTokenTypeBeDeletedInRecovery(e)?this.tokenMatcher(this.LA(2),e):!1}isInCurrentRuleReSyncSet(e){const t=this.getCurrFollowKey(),r=this.getFollowSetFromFollowKey(t);return ue(r,e)}findReSyncTokenType(){const e=this.flattenFollowSet();let t=this.LA(1),r=2;for(;;){const i=Dt(e,s=>Ec(t,s));if(i!==void 0)return i;t=this.LA(r),r++}}getCurrFollowKey(){if(this.RULE_STACK.length===1)return Nr;const e=this.getLastExplicitRuleShortName(),t=this.getLastExplicitRuleOccurrenceIndex(),r=this.getPreviousExplicitRuleShortName();return{ruleName:this.shortRuleNameToFullName(e),idxInCallingRule:t,inRule:this.shortRuleNameToFullName(r)}}buildFullFollowKeyStack(){const e=this.RULE_STACK,t=this.RULE_OCCURRENCE_STACK;return S(e,(r,i)=>i===0?Nr:{ruleName:this.shortRuleNameToFullName(r),idxInCallingRule:t[i],inRule:this.shortRuleNameToFullName(e[i-1])})}flattenFollowSet(){const e=S(this.buildFullFollowKeyStack(),t=>this.getFollowSetFromFollowKey(t));return Ne(e)}getFollowSetFromFollowKey(e){if(e===Nr)return[tt];const t=e.ruleName+e.idxInCallingRule+dc+e.inRule;return this.resyncFollows[t]}addToResyncTokens(e,t){return this.tokenMatcher(e,tt)||t.push(e),t}reSyncTo(e){const t=[];let r=this.LA(1);for(;this.tokenMatcher(r,e)===!1;)r=this.SKIP_TOKEN(),this.addToResyncTokens(r,t);return ln(t)}attemptInRepetitionRecovery(e,t,r,i,s,a,o){}getCurrentGrammarPath(e,t){const r=this.getHumanReadableRuleStack(),i=te(this.RULE_OCCURRENCE_STACK);return{ruleStack:r,occurrenceStack:i,lastTok:e,lastTokOccurrence:t}}getHumanReadableRuleStack(){return S(this.RULE_STACK,e=>this.shortRuleNameToFullName(e))}}function mh(n,e,t,r,i,s,a){const o=this.getKeyForAutomaticLookahead(r,i);let c=this.firstAfterRepMap[o];if(c===void 0){const f=this.getCurrRuleFullName(),h=this.getGAstProductions()[f];c=new s(h,i).startWalking(),this.firstAfterRepMap[o]=c}let l=c.token,u=c.occurrence;const d=c.isEndOfRule;this.RULE_STACK.length===1&&d&&l===void 0&&(l=tt,u=1),!(l===void 0||u===void 0)&&this.shouldInRepetitionRecoveryBeTried(l,u,a)&&this.tryInRepetitionRecovery(n,e,t,l)}const gh=4,it=8,Mc=1<Cc(t,t,lt))}validateEmptyOrAlternatives(e){return Re(e,t=>eh(t,lt))}validateAmbiguousAlternationAlternatives(e,t){return Re(e,r=>th(r,t,lt))}validateSomeNonEmptyLookaheadPath(e,t){return ih(e,t,lt)}buildLookaheadForAlternation(e){return Uf(e.prodOccurrence,e.rule,e.maxLookahead,e.hasPredicates,e.dynamicTokensEnabled,Vf)}buildLookaheadForOptional(e){return Bf(e.prodOccurrence,e.rule,e.maxLookahead,e.dynamicTokensEnabled,$i(e.prodType),Wf)}}class yh{initLooksAhead(e){this.dynamicTokensEnabled=_(e,"dynamicTokensEnabled")?e.dynamicTokensEnabled:Ye.dynamicTokensEnabled,this.maxLookahead=_(e,"maxLookahead")?e.maxLookahead:Ye.maxLookahead,this.lookaheadStrategy=_(e,"lookaheadStrategy")?e.lookaheadStrategy:new bi({maxLookahead:this.maxLookahead}),this.lookAheadFuncsCache=new Map}preComputeLookaheadFunctions(e){C(e,t=>{this.TRACE_INIT(`${t.name} Rule Lookahead`,()=>{const{alternation:r,repetition:i,option:s,repetitionMandatory:a,repetitionMandatoryWithSeparator:o,repetitionWithSeparator:c}=Rh(t);C(r,l=>{const u=l.idx===0?"":l.idx;this.TRACE_INIT(`${Fe(l)}${u}`,()=>{const d=this.lookaheadStrategy.buildLookaheadForAlternation({prodOccurrence:l.idx,rule:t,maxLookahead:l.maxLookahead||this.maxLookahead,hasPredicates:l.hasPredicates,dynamicTokensEnabled:this.dynamicTokensEnabled}),f=Cr(this.fullRuleNameToShort[t.name],Mc,l.idx);this.setLaFuncCache(f,d)})}),C(i,l=>{this.computeLookaheadFunc(t,l.idx,Wr,"Repetition",l.maxLookahead,Fe(l))}),C(s,l=>{this.computeLookaheadFunc(t,l.idx,Dc,"Option",l.maxLookahead,Fe(l))}),C(a,l=>{this.computeLookaheadFunc(t,l.idx,jr,"RepetitionMandatory",l.maxLookahead,Fe(l))}),C(o,l=>{this.computeLookaheadFunc(t,l.idx,Ln,"RepetitionMandatoryWithSeparator",l.maxLookahead,Fe(l))}),C(c,l=>{this.computeLookaheadFunc(t,l.idx,Hr,"RepetitionWithSeparator",l.maxLookahead,Fe(l))})})})}computeLookaheadFunc(e,t,r,i,s,a){this.TRACE_INIT(`${a}${t===0?"":t}`,()=>{const o=this.lookaheadStrategy.buildLookaheadForOptional({prodOccurrence:t,rule:e,maxLookahead:s||this.maxLookahead,dynamicTokensEnabled:this.dynamicTokensEnabled,prodType:i}),c=Cr(this.fullRuleNameToShort[e.name],r,t);this.setLaFuncCache(c,o)})}getKeyForAutomaticLookahead(e,t){const r=this.getLastExplicitRuleShortName();return Cr(r,e,t)}getLaFuncFromCache(e){return this.lookAheadFuncsCache.get(e)}setLaFuncCache(e,t){this.lookAheadFuncsCache.set(e,t)}}class Th extends Yt{constructor(){super(...arguments),this.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]}}reset(){this.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]}}visitOption(e){this.dslMethods.option.push(e)}visitRepetitionWithSeparator(e){this.dslMethods.repetitionWithSeparator.push(e)}visitRepetitionMandatory(e){this.dslMethods.repetitionMandatory.push(e)}visitRepetitionMandatoryWithSeparator(e){this.dslMethods.repetitionMandatoryWithSeparator.push(e)}visitRepetition(e){this.dslMethods.repetition.push(e)}visitAlternation(e){this.dslMethods.alternation.push(e)}}const In=new Th;function Rh(n){In.reset(),n.accept(In);const e=In.dslMethods;return In.reset(),e}function Ns(n,e){isNaN(n.startOffset)===!0?(n.startOffset=e.startOffset,n.endOffset=e.endOffset):n.endOffseta.msg);throw Error(`Errors Detected in CST Visitor <${this.constructor.name}>: + ${s.join(` + +`).replace(/\n/g,` + `)}`)}}};return t.prototype=r,t.prototype.constructor=t,t._RULE_NAMES=e,t}function Ih(n,e,t){const r=function(){};Fc(r,n+"BaseSemanticsWithDefaults");const i=Object.create(t.prototype);return C(e,s=>{i[s]=kh}),r.prototype=i,r.prototype.constructor=r,r}var Kr;(function(n){n[n.REDUNDANT_METHOD=0]="REDUNDANT_METHOD",n[n.MISSING_METHOD=1]="MISSING_METHOD"})(Kr||(Kr={}));function xh(n,e){return Nh(n,e)}function Nh(n,e){const t=ve(e,i=>mt(n[i])===!1),r=S(t,i=>({msg:`Missing visitor method: <${i}> on ${n.constructor.name} CST Visitor.`,type:Kr.MISSING_METHOD,methodName:i}));return hn(r)}class Ch{initTreeBuilder(e){if(this.CST_STACK=[],this.outputCst=e.outputCst,this.nodeLocationTracking=_(e,"nodeLocationTracking")?e.nodeLocationTracking:Ye.nodeLocationTracking,!this.outputCst)this.cstInvocationStateUpdate=q,this.cstFinallyStateUpdate=q,this.cstPostTerminal=q,this.cstPostNonTerminal=q,this.cstPostRule=q;else if(/full/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=Cs,this.setNodeLocationFromNode=Cs,this.cstPostRule=q,this.setInitialNodeLocation=this.setInitialNodeLocationFullRecovery):(this.setNodeLocationFromToken=q,this.setNodeLocationFromNode=q,this.cstPostRule=this.cstPostRuleFull,this.setInitialNodeLocation=this.setInitialNodeLocationFullRegular);else if(/onlyOffset/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=Ns,this.setNodeLocationFromNode=Ns,this.cstPostRule=q,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRecovery):(this.setNodeLocationFromToken=q,this.setNodeLocationFromNode=q,this.cstPostRule=this.cstPostRuleOnlyOffset,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRegular);else if(/none/i.test(this.nodeLocationTracking))this.setNodeLocationFromToken=q,this.setNodeLocationFromNode=q,this.cstPostRule=q,this.setInitialNodeLocation=q;else throw Error(`Invalid config option: "${e.nodeLocationTracking}"`)}setInitialNodeLocationOnlyOffsetRecovery(e){e.location={startOffset:NaN,endOffset:NaN}}setInitialNodeLocationOnlyOffsetRegular(e){e.location={startOffset:this.LA(1).startOffset,endOffset:NaN}}setInitialNodeLocationFullRecovery(e){e.location={startOffset:NaN,startLine:NaN,startColumn:NaN,endOffset:NaN,endLine:NaN,endColumn:NaN}}setInitialNodeLocationFullRegular(e){const t=this.LA(1);e.location={startOffset:t.startOffset,startLine:t.startLine,startColumn:t.startColumn,endOffset:NaN,endLine:NaN,endColumn:NaN}}cstInvocationStateUpdate(e){const t={name:e,children:Object.create(null)};this.setInitialNodeLocation(t),this.CST_STACK.push(t)}cstFinallyStateUpdate(){this.CST_STACK.pop()}cstPostRuleFull(e){const t=this.LA(0),r=e.location;r.startOffset<=t.startOffset?(r.endOffset=t.endOffset,r.endLine=t.endLine,r.endColumn=t.endColumn):(r.startOffset=NaN,r.startLine=NaN,r.startColumn=NaN)}cstPostRuleOnlyOffset(e){const t=this.LA(0),r=e.location;r.startOffset<=t.startOffset?r.endOffset=t.endOffset:r.startOffset=NaN}cstPostTerminal(e,t){const r=this.CST_STACK[this.CST_STACK.length-1];Ah(r,t,e),this.setNodeLocationFromToken(r.location,t)}cstPostNonTerminal(e,t){const r=this.CST_STACK[this.CST_STACK.length-1];vh(r,t,e),this.setNodeLocationFromNode(r.location,e.location)}getBaseCstVisitorConstructor(){if(ze(this.baseCstVisitorConstructor)){const e=Sh(this.className,Mt(this.gastProductionsCache));return this.baseCstVisitorConstructor=e,e}return this.baseCstVisitorConstructor}getBaseCstVisitorConstructorWithDefaults(){if(ze(this.baseCstVisitorWithDefaultsConstructor)){const e=Ih(this.className,Mt(this.gastProductionsCache),this.getBaseCstVisitorConstructor());return this.baseCstVisitorWithDefaultsConstructor=e,e}return this.baseCstVisitorWithDefaultsConstructor}getLastExplicitRuleShortName(){const e=this.RULE_STACK;return e[e.length-1]}getPreviousExplicitRuleShortName(){const e=this.RULE_STACK;return e[e.length-2]}getLastExplicitRuleOccurrenceIndex(){const e=this.RULE_OCCURRENCE_STACK;return e[e.length-1]}}class _h{initLexerAdapter(){this.tokVector=[],this.tokVectorLength=0,this.currIdx=-1}set input(e){if(this.selfAnalysisDone!==!0)throw Error("Missing invocation at the end of the Parser's constructor.");this.reset(),this.tokVector=e,this.tokVectorLength=e.length}get input(){return this.tokVector}SKIP_TOKEN(){return this.currIdx<=this.tokVector.length-2?(this.consumeToken(),this.LA(1)):Bn}LA(e){const t=this.currIdx+e;return t<0||this.tokVectorLength<=t?Bn:this.tokVector[t]}consumeToken(){this.currIdx++}exportLexerState(){return this.currIdx}importLexerState(e){this.currIdx=e}resetLexerState(){this.currIdx=-1}moveToTerminatedState(){this.currIdx=this.tokVector.length-1}getLexerPosition(){return this.exportLexerState()}}class wh{ACTION(e){return e.call(this)}consume(e,t,r){return this.consumeInternal(t,e,r)}subrule(e,t,r){return this.subruleInternal(t,e,r)}option(e,t){return this.optionInternal(t,e)}or(e,t){return this.orInternal(t,e)}many(e,t){return this.manyInternal(e,t)}atLeastOne(e,t){return this.atLeastOneInternal(e,t)}CONSUME(e,t){return this.consumeInternal(e,0,t)}CONSUME1(e,t){return this.consumeInternal(e,1,t)}CONSUME2(e,t){return this.consumeInternal(e,2,t)}CONSUME3(e,t){return this.consumeInternal(e,3,t)}CONSUME4(e,t){return this.consumeInternal(e,4,t)}CONSUME5(e,t){return this.consumeInternal(e,5,t)}CONSUME6(e,t){return this.consumeInternal(e,6,t)}CONSUME7(e,t){return this.consumeInternal(e,7,t)}CONSUME8(e,t){return this.consumeInternal(e,8,t)}CONSUME9(e,t){return this.consumeInternal(e,9,t)}SUBRULE(e,t){return this.subruleInternal(e,0,t)}SUBRULE1(e,t){return this.subruleInternal(e,1,t)}SUBRULE2(e,t){return this.subruleInternal(e,2,t)}SUBRULE3(e,t){return this.subruleInternal(e,3,t)}SUBRULE4(e,t){return this.subruleInternal(e,4,t)}SUBRULE5(e,t){return this.subruleInternal(e,5,t)}SUBRULE6(e,t){return this.subruleInternal(e,6,t)}SUBRULE7(e,t){return this.subruleInternal(e,7,t)}SUBRULE8(e,t){return this.subruleInternal(e,8,t)}SUBRULE9(e,t){return this.subruleInternal(e,9,t)}OPTION(e){return this.optionInternal(e,0)}OPTION1(e){return this.optionInternal(e,1)}OPTION2(e){return this.optionInternal(e,2)}OPTION3(e){return this.optionInternal(e,3)}OPTION4(e){return this.optionInternal(e,4)}OPTION5(e){return this.optionInternal(e,5)}OPTION6(e){return this.optionInternal(e,6)}OPTION7(e){return this.optionInternal(e,7)}OPTION8(e){return this.optionInternal(e,8)}OPTION9(e){return this.optionInternal(e,9)}OR(e){return this.orInternal(e,0)}OR1(e){return this.orInternal(e,1)}OR2(e){return this.orInternal(e,2)}OR3(e){return this.orInternal(e,3)}OR4(e){return this.orInternal(e,4)}OR5(e){return this.orInternal(e,5)}OR6(e){return this.orInternal(e,6)}OR7(e){return this.orInternal(e,7)}OR8(e){return this.orInternal(e,8)}OR9(e){return this.orInternal(e,9)}MANY(e){this.manyInternal(0,e)}MANY1(e){this.manyInternal(1,e)}MANY2(e){this.manyInternal(2,e)}MANY3(e){this.manyInternal(3,e)}MANY4(e){this.manyInternal(4,e)}MANY5(e){this.manyInternal(5,e)}MANY6(e){this.manyInternal(6,e)}MANY7(e){this.manyInternal(7,e)}MANY8(e){this.manyInternal(8,e)}MANY9(e){this.manyInternal(9,e)}MANY_SEP(e){this.manySepFirstInternal(0,e)}MANY_SEP1(e){this.manySepFirstInternal(1,e)}MANY_SEP2(e){this.manySepFirstInternal(2,e)}MANY_SEP3(e){this.manySepFirstInternal(3,e)}MANY_SEP4(e){this.manySepFirstInternal(4,e)}MANY_SEP5(e){this.manySepFirstInternal(5,e)}MANY_SEP6(e){this.manySepFirstInternal(6,e)}MANY_SEP7(e){this.manySepFirstInternal(7,e)}MANY_SEP8(e){this.manySepFirstInternal(8,e)}MANY_SEP9(e){this.manySepFirstInternal(9,e)}AT_LEAST_ONE(e){this.atLeastOneInternal(0,e)}AT_LEAST_ONE1(e){return this.atLeastOneInternal(1,e)}AT_LEAST_ONE2(e){this.atLeastOneInternal(2,e)}AT_LEAST_ONE3(e){this.atLeastOneInternal(3,e)}AT_LEAST_ONE4(e){this.atLeastOneInternal(4,e)}AT_LEAST_ONE5(e){this.atLeastOneInternal(5,e)}AT_LEAST_ONE6(e){this.atLeastOneInternal(6,e)}AT_LEAST_ONE7(e){this.atLeastOneInternal(7,e)}AT_LEAST_ONE8(e){this.atLeastOneInternal(8,e)}AT_LEAST_ONE9(e){this.atLeastOneInternal(9,e)}AT_LEAST_ONE_SEP(e){this.atLeastOneSepFirstInternal(0,e)}AT_LEAST_ONE_SEP1(e){this.atLeastOneSepFirstInternal(1,e)}AT_LEAST_ONE_SEP2(e){this.atLeastOneSepFirstInternal(2,e)}AT_LEAST_ONE_SEP3(e){this.atLeastOneSepFirstInternal(3,e)}AT_LEAST_ONE_SEP4(e){this.atLeastOneSepFirstInternal(4,e)}AT_LEAST_ONE_SEP5(e){this.atLeastOneSepFirstInternal(5,e)}AT_LEAST_ONE_SEP6(e){this.atLeastOneSepFirstInternal(6,e)}AT_LEAST_ONE_SEP7(e){this.atLeastOneSepFirstInternal(7,e)}AT_LEAST_ONE_SEP8(e){this.atLeastOneSepFirstInternal(8,e)}AT_LEAST_ONE_SEP9(e){this.atLeastOneSepFirstInternal(9,e)}RULE(e,t,r=Vn){if(ue(this.definedRulesNames,e)){const a={message:lt.buildDuplicateRuleNameError({topLevelRule:e,grammarName:this.className}),type:le.DUPLICATE_RULE_NAME,ruleName:e};this.definitionErrors.push(a)}this.definedRulesNames.push(e);const i=this.defineRule(e,t,r);return this[e]=i,i}OVERRIDE_RULE(e,t,r=Vn){const i=Zf(e,this.definedRulesNames,this.className);this.definitionErrors=this.definitionErrors.concat(i);const s=this.defineRule(e,t,r);return this[e]=s,s}BACKTRACK(e,t){return function(){this.isBackTrackingStack.push(1);const r=this.saveRecogState();try{return e.apply(this,t),!0}catch(i){if(Gn(i))return!1;throw i}finally{this.reloadRecogState(r),this.isBackTrackingStack.pop()}}}getGAstProductions(){return this.gastProductionsCache}getSerializedGastProductions(){return Dd(K(this.gastProductionsCache))}}class Lh{initRecognizerEngine(e,t){if(this.className=this.constructor.name,this.shortRuleNameToFull={},this.fullRuleNameToShort={},this.ruleShortNameIdx=256,this.tokenMatcher=Fn,this.subruleIdx=0,this.definedRulesNames=[],this.tokensMap={},this.isBackTrackingStack=[],this.RULE_STACK=[],this.RULE_OCCURRENCE_STACK=[],this.gastProductionsCache={},_(t,"serializedGrammar"))throw Error(`The Parser's configuration can no longer contain a property. + See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_6-0-0 + For Further details.`);if(Z(e)){if(D(e))throw Error(`A Token Vocabulary cannot be empty. + Note that the first argument for the parser constructor + is no longer a Token vector (since v4.0).`);if(typeof e[0].startOffset=="number")throw Error(`The Parser constructor no longer accepts a token vector as the first argument. + See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_4-0-0 + For Further details.`)}if(Z(e))this.tokensMap=oe(e,(s,a)=>(s[a.name]=a,s),{});else if(_(e,"modes")&&$e(Ne(K(e.modes)),Cf)){const s=Ne(K(e.modes)),a=vi(s);this.tokensMap=oe(a,(o,c)=>(o[c.name]=c,o),{})}else if(zl(e))this.tokensMap=te(e);else throw new Error(" argument must be An Array of Token constructors, A dictionary of Token constructors or an IMultiModeLexerDefinition");this.tokensMap.EOF=tt;const r=_(e,"modes")?Ne(K(e.modes)):K(e),i=$e(r,s=>D(s.categoryMatches));this.tokenMatcher=i?Fn:gn,yn(K(this.tokensMap))}defineRule(e,t,r){if(this.selfAnalysisDone)throw Error(`Grammar rule <${e}> may not be defined after the 'performSelfAnalysis' method has been called' +Make sure that all grammar rule definitions are done before 'performSelfAnalysis' is called.`);const i=_(r,"resyncEnabled")?r.resyncEnabled:Vn.resyncEnabled,s=_(r,"recoveryValueFunc")?r.recoveryValueFunc:Vn.recoveryValueFunc,a=this.ruleShortNameIdx<a.call(this)&&o.call(this)}}else s=e;if(i.call(this)===!0)return s.call(this)}atLeastOneInternal(e,t){const r=this.getKeyForAutomaticLookahead(jr,e);return this.atLeastOneInternalLogic(e,t,r)}atLeastOneInternalLogic(e,t,r){let i=this.getLaFuncFromCache(r),s;if(typeof t!="function"){s=t.DEF;const a=t.GATE;if(a!==void 0){const o=i;i=()=>a.call(this)&&o.call(this)}}else s=t;if(i.call(this)===!0){let a=this.doSingleRepetition(s);for(;i.call(this)===!0&&a===!0;)a=this.doSingleRepetition(s)}else throw this.raiseEarlyExitException(e,B.REPETITION_MANDATORY,t.ERR_MSG);this.attemptInRepetitionRecovery(this.atLeastOneInternal,[e,t],i,jr,e,Ff)}atLeastOneSepFirstInternal(e,t){const r=this.getKeyForAutomaticLookahead(Ln,e);this.atLeastOneSepFirstInternalLogic(e,t,r)}atLeastOneSepFirstInternalLogic(e,t,r){const i=t.DEF,s=t.SEP;if(this.getLaFuncFromCache(r).call(this)===!0){i.call(this);const o=()=>this.tokenMatcher(this.LA(1),s);for(;this.tokenMatcher(this.LA(1),s)===!0;)this.CONSUME(s),i.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,s,o,i,Ss],o,Ln,e,Ss)}else throw this.raiseEarlyExitException(e,B.REPETITION_MANDATORY_WITH_SEPARATOR,t.ERR_MSG)}manyInternal(e,t){const r=this.getKeyForAutomaticLookahead(Wr,e);return this.manyInternalLogic(e,t,r)}manyInternalLogic(e,t,r){let i=this.getLaFuncFromCache(r),s;if(typeof t!="function"){s=t.DEF;const o=t.GATE;if(o!==void 0){const c=i;i=()=>o.call(this)&&c.call(this)}}else s=t;let a=!0;for(;i.call(this)===!0&&a===!0;)a=this.doSingleRepetition(s);this.attemptInRepetitionRecovery(this.manyInternal,[e,t],i,Wr,e,Df,a)}manySepFirstInternal(e,t){const r=this.getKeyForAutomaticLookahead(Hr,e);this.manySepFirstInternalLogic(e,t,r)}manySepFirstInternalLogic(e,t,r){const i=t.DEF,s=t.SEP;if(this.getLaFuncFromCache(r).call(this)===!0){i.call(this);const o=()=>this.tokenMatcher(this.LA(1),s);for(;this.tokenMatcher(this.LA(1),s)===!0;)this.CONSUME(s),i.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,s,o,i,ks],o,Hr,e,ks)}}repetitionSepSecondInternal(e,t,r,i,s){for(;r();)this.CONSUME(t),i.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,t,r,i,s],r,Ln,e,s)}doSingleRepetition(e){const t=this.getLexerPosition();return e.call(this),this.getLexerPosition()>t}orInternal(e,t){const r=this.getKeyForAutomaticLookahead(Mc,t),i=Z(e)?e:e.DEF,a=this.getLaFuncFromCache(r).call(this,i);if(a!==void 0)return i[a].ALT.call(this);this.raiseNoAltException(t,e.ERR_MSG)}ruleFinallyStateUpdate(){if(this.RULE_STACK.pop(),this.RULE_OCCURRENCE_STACK.pop(),this.cstFinallyStateUpdate(),this.RULE_STACK.length===0&&this.isAtEndOfInput()===!1){const e=this.LA(1),t=this.errorMessageProvider.buildNotAllInputParsedMessage({firstRedundant:e,ruleName:this.getCurrRuleFullName()});this.SAVE_ERROR(new dh(t,e))}}subruleInternal(e,t,r){let i;try{const s=r!==void 0?r.ARGS:void 0;return this.subruleIdx=t,i=e.apply(this,s),this.cstPostNonTerminal(i,r!==void 0&&r.LABEL!==void 0?r.LABEL:e.ruleName),i}catch(s){throw this.subruleInternalError(s,r,e.ruleName)}}subruleInternalError(e,t,r){throw Gn(e)&&e.partialCstResult!==void 0&&(this.cstPostNonTerminal(e.partialCstResult,t!==void 0&&t.LABEL!==void 0?t.LABEL:r),delete e.partialCstResult),e}consumeInternal(e,t,r){let i;try{const s=this.LA(1);this.tokenMatcher(s,e)===!0?(this.consumeToken(),i=s):this.consumeInternalError(e,s,r)}catch(s){i=this.consumeInternalRecovery(e,t,s)}return this.cstPostTerminal(r!==void 0&&r.LABEL!==void 0?r.LABEL:e.name,i),i}consumeInternalError(e,t,r){let i;const s=this.LA(0);throw r!==void 0&&r.ERR_MSG?i=r.ERR_MSG:i=this.errorMessageProvider.buildMismatchTokenMessage({expected:e,actual:t,previous:s,ruleName:this.getCurrRuleFullName()}),this.SAVE_ERROR(new bc(i,t,s))}consumeInternalRecovery(e,t,r){if(this.recoveryEnabled&&r.name==="MismatchedTokenException"&&!this.isBackTracking()){const i=this.getFollowsForInRuleRecovery(e,t);try{return this.tryInRuleRecovery(e,i)}catch(s){throw s.name===Pc?r:s}}else throw r}saveRecogState(){const e=this.errors,t=te(this.RULE_STACK);return{errors:e,lexerState:this.exportLexerState(),RULE_STACK:t,CST_STACK:this.CST_STACK}}reloadRecogState(e){this.errors=e.errors,this.importLexerState(e.lexerState),this.RULE_STACK=e.RULE_STACK}ruleInvocationStateUpdate(e,t,r){this.RULE_OCCURRENCE_STACK.push(r),this.RULE_STACK.push(e),this.cstInvocationStateUpdate(t)}isBackTracking(){return this.isBackTrackingStack.length!==0}getCurrRuleFullName(){const e=this.getLastExplicitRuleShortName();return this.shortRuleNameToFull[e]}shortRuleNameToFullName(e){return this.shortRuleNameToFull[e]}isAtEndOfInput(){return this.tokenMatcher(this.LA(1),tt)}reset(){this.resetLexerState(),this.subruleIdx=0,this.isBackTrackingStack=[],this.errors=[],this.RULE_STACK=[],this.CST_STACK=[],this.RULE_OCCURRENCE_STACK=[]}}class $h{initErrorHandler(e){this._errors=[],this.errorMessageProvider=_(e,"errorMessageProvider")?e.errorMessageProvider:Ye.errorMessageProvider}SAVE_ERROR(e){if(Gn(e))return e.context={ruleStack:this.getHumanReadableRuleStack(),ruleOccurrenceStack:te(this.RULE_OCCURRENCE_STACK)},this._errors.push(e),e;throw Error("Trying to save an Error which is not a RecognitionException")}get errors(){return te(this._errors)}set errors(e){this._errors=e}raiseEarlyExitException(e,t,r){const i=this.getCurrRuleFullName(),s=this.getGAstProductions()[i],o=pr(e,s,t,this.maxLookahead)[0],c=[];for(let u=1;u<=this.maxLookahead;u++)c.push(this.LA(u));const l=this.errorMessageProvider.buildEarlyExitMessage({expectedIterationPaths:o,actual:c,previous:this.LA(0),customUserDescription:r,ruleName:i});throw this.SAVE_ERROR(new fh(l,this.LA(1),this.LA(0)))}raiseNoAltException(e,t){const r=this.getCurrRuleFullName(),i=this.getGAstProductions()[r],s=hr(e,i,this.maxLookahead),a=[];for(let l=1;l<=this.maxLookahead;l++)a.push(this.LA(l));const o=this.LA(0),c=this.errorMessageProvider.buildNoViableAltMessage({expectedPathsPerAlt:s,actual:a,previous:o,customUserDescription:t,ruleName:this.getCurrRuleFullName()});throw this.SAVE_ERROR(new uh(c,this.LA(1),o))}}class Oh{initContentAssist(){}computeContentAssist(e,t){const r=this.gastProductionsCache[e];if(ze(r))throw Error(`Rule ->${e}<- does not exist in this grammar.`);return kc([r],t,this.tokenMatcher,this.maxLookahead)}getNextPossibleTokenTypes(e){const t=be(e.ruleStack),i=this.getGAstProductions()[t];return new Mf(i,e).startWalking()}}const gr={description:"This Object indicates the Parser is during Recording Phase"};Object.freeze(gr);const _s=!0,ws=Math.pow(2,it)-1,Gc=vc({name:"RECORDING_PHASE_TOKEN",pattern:de.NA});yn([Gc]);const Uc=Li(Gc,`This IToken indicates the Parser is in Recording Phase + See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,-1,-1,-1,-1,-1,-1);Object.freeze(Uc);const bh={name:`This CSTNode indicates the Parser is in Recording Phase + See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,children:{}};class Ph{initGastRecorder(e){this.recordingProdStack=[],this.RECORDING_PHASE=!1}enableRecording(){this.RECORDING_PHASE=!0,this.TRACE_INIT("Enable Recording",()=>{for(let e=0;e<10;e++){const t=e>0?e:"";this[`CONSUME${t}`]=function(r,i){return this.consumeInternalRecord(r,e,i)},this[`SUBRULE${t}`]=function(r,i){return this.subruleInternalRecord(r,e,i)},this[`OPTION${t}`]=function(r){return this.optionInternalRecord(r,e)},this[`OR${t}`]=function(r){return this.orInternalRecord(r,e)},this[`MANY${t}`]=function(r){this.manyInternalRecord(e,r)},this[`MANY_SEP${t}`]=function(r){this.manySepFirstInternalRecord(e,r)},this[`AT_LEAST_ONE${t}`]=function(r){this.atLeastOneInternalRecord(e,r)},this[`AT_LEAST_ONE_SEP${t}`]=function(r){this.atLeastOneSepFirstInternalRecord(e,r)}}this.consume=function(e,t,r){return this.consumeInternalRecord(t,e,r)},this.subrule=function(e,t,r){return this.subruleInternalRecord(t,e,r)},this.option=function(e,t){return this.optionInternalRecord(t,e)},this.or=function(e,t){return this.orInternalRecord(t,e)},this.many=function(e,t){this.manyInternalRecord(e,t)},this.atLeastOne=function(e,t){this.atLeastOneInternalRecord(e,t)},this.ACTION=this.ACTION_RECORD,this.BACKTRACK=this.BACKTRACK_RECORD,this.LA=this.LA_RECORD})}disableRecording(){this.RECORDING_PHASE=!1,this.TRACE_INIT("Deleting Recording methods",()=>{const e=this;for(let t=0;t<10;t++){const r=t>0?t:"";delete e[`CONSUME${r}`],delete e[`SUBRULE${r}`],delete e[`OPTION${r}`],delete e[`OR${r}`],delete e[`MANY${r}`],delete e[`MANY_SEP${r}`],delete e[`AT_LEAST_ONE${r}`],delete e[`AT_LEAST_ONE_SEP${r}`]}delete e.consume,delete e.subrule,delete e.option,delete e.or,delete e.many,delete e.atLeastOne,delete e.ACTION,delete e.BACKTRACK,delete e.LA})}ACTION_RECORD(e){}BACKTRACK_RECORD(e,t){return()=>!0}LA_RECORD(e){return Bn}topLevelRuleRecord(e,t){try{const r=new qt({definition:[],name:e});return r.name=e,this.recordingProdStack.push(r),t.call(this),this.recordingProdStack.pop(),r}catch(r){if(r.KNOWN_RECORDER_ERROR!==!0)try{r.message=r.message+` + This error was thrown during the "grammar recording phase" For more info see: + https://chevrotain.io/docs/guide/internals.html#grammar-recording`}catch{throw r}throw r}}optionInternalRecord(e,t){return rn.call(this,ee,e,t)}atLeastOneInternalRecord(e,t){rn.call(this,Ee,t,e)}atLeastOneSepFirstInternalRecord(e,t){rn.call(this,ke,t,e,_s)}manyInternalRecord(e,t){rn.call(this,W,t,e)}manySepFirstInternalRecord(e,t){rn.call(this,pe,t,e,_s)}orInternalRecord(e,t){return Mh.call(this,e,t)}subruleInternalRecord(e,t,r){if(Un(t),!e||_(e,"ruleName")===!1){const o=new Error(` argument is invalid expecting a Parser method reference but got: <${JSON.stringify(e)}> + inside top level rule: <${this.recordingProdStack[0].name}>`);throw o.KNOWN_RECORDER_ERROR=!0,o}const i=Ft(this.recordingProdStack),s=e.ruleName,a=new ce({idx:t,nonTerminalName:s,label:r==null?void 0:r.LABEL,referencedRule:void 0});return i.definition.push(a),this.outputCst?bh:gr}consumeInternalRecord(e,t,r){if(Un(t),!Rc(e)){const a=new Error(` argument is invalid expecting a TokenType reference but got: <${JSON.stringify(e)}> + inside top level rule: <${this.recordingProdStack[0].name}>`);throw a.KNOWN_RECORDER_ERROR=!0,a}const i=Ft(this.recordingProdStack),s=new G({idx:t,terminalType:e,label:r==null?void 0:r.LABEL});return i.definition.push(s),Uc}}function rn(n,e,t,r=!1){Un(t);const i=Ft(this.recordingProdStack),s=mt(e)?e:e.DEF,a=new n({definition:[],idx:t});return r&&(a.separator=e.SEP),_(e,"MAX_LOOKAHEAD")&&(a.maxLookahead=e.MAX_LOOKAHEAD),this.recordingProdStack.push(a),s.call(this),i.definition.push(a),this.recordingProdStack.pop(),gr}function Mh(n,e){Un(e);const t=Ft(this.recordingProdStack),r=Z(n)===!1,i=r===!1?n:n.DEF,s=new me({definition:[],idx:e,ignoreAmbiguities:r&&n.IGNORE_AMBIGUITIES===!0});_(n,"MAX_LOOKAHEAD")&&(s.maxLookahead=n.MAX_LOOKAHEAD);const a=ho(i,o=>mt(o.GATE));return s.hasPredicates=a,t.definition.push(s),C(i,o=>{const c=new he({definition:[]});s.definition.push(c),_(o,"IGNORE_AMBIGUITIES")?c.ignoreAmbiguities=o.IGNORE_AMBIGUITIES:_(o,"GATE")&&(c.ignoreAmbiguities=!0),this.recordingProdStack.push(c),o.ALT.call(this),this.recordingProdStack.pop()}),gr}function Ls(n){return n===0?"":`${n}`}function Un(n){if(n<0||n>ws){const e=new Error(`Invalid DSL Method idx value: <${n}> + Idx value must be a none negative value smaller than ${ws+1}`);throw e.KNOWN_RECORDER_ERROR=!0,e}}class Dh{initPerformanceTracer(e){if(_(e,"traceInitPerf")){const t=e.traceInitPerf,r=typeof t=="number";this.traceInitMaxIdent=r?t:1/0,this.traceInitPerf=r?t>0:t}else this.traceInitMaxIdent=0,this.traceInitPerf=Ye.traceInitPerf;this.traceInitIndent=-1}TRACE_INIT(e,t){if(this.traceInitPerf===!0){this.traceInitIndent++;const r=new Array(this.traceInitIndent+1).join(" ");this.traceInitIndent <${e}>`);const{time:i,value:s}=lc(t),a=i>10?console.warn:console.log;return this.traceInitIndent time: ${i}ms`),this.traceInitIndent--,s}else return t()}}function Fh(n,e){e.forEach(t=>{const r=t.prototype;Object.getOwnPropertyNames(r).forEach(i=>{if(i==="constructor")return;const s=Object.getOwnPropertyDescriptor(r,i);s&&(s.get||s.set)?Object.defineProperty(n.prototype,i,s):n.prototype[i]=t.prototype[i]})})}const Bn=Li(tt,"",NaN,NaN,NaN,NaN,NaN,NaN);Object.freeze(Bn);const Ye=Object.freeze({recoveryEnabled:!1,maxLookahead:3,dynamicTokensEnabled:!1,outputCst:!0,errorMessageProvider:At,nodeLocationTracking:"none",traceInitPerf:!1,skipValidations:!1}),Vn=Object.freeze({recoveryValueFunc:()=>{},resyncEnabled:!0});var le;(function(n){n[n.INVALID_RULE_NAME=0]="INVALID_RULE_NAME",n[n.DUPLICATE_RULE_NAME=1]="DUPLICATE_RULE_NAME",n[n.INVALID_RULE_OVERRIDE=2]="INVALID_RULE_OVERRIDE",n[n.DUPLICATE_PRODUCTIONS=3]="DUPLICATE_PRODUCTIONS",n[n.UNRESOLVED_SUBRULE_REF=4]="UNRESOLVED_SUBRULE_REF",n[n.LEFT_RECURSION=5]="LEFT_RECURSION",n[n.NONE_LAST_EMPTY_ALT=6]="NONE_LAST_EMPTY_ALT",n[n.AMBIGUOUS_ALTS=7]="AMBIGUOUS_ALTS",n[n.CONFLICT_TOKENS_RULES_NAMESPACE=8]="CONFLICT_TOKENS_RULES_NAMESPACE",n[n.INVALID_TOKEN_NAME=9]="INVALID_TOKEN_NAME",n[n.NO_NON_EMPTY_LOOKAHEAD=10]="NO_NON_EMPTY_LOOKAHEAD",n[n.AMBIGUOUS_PREFIX_ALTS=11]="AMBIGUOUS_PREFIX_ALTS",n[n.TOO_MANY_ALTS=12]="TOO_MANY_ALTS",n[n.CUSTOM_LOOKAHEAD_VALIDATION=13]="CUSTOM_LOOKAHEAD_VALIDATION"})(le||(le={}));function $s(n=void 0){return function(){return n}}class Tn{static performSelfAnalysis(e){throw Error("The **static** `performSelfAnalysis` method has been deprecated. \nUse the **instance** method with the same name instead.")}performSelfAnalysis(){this.TRACE_INIT("performSelfAnalysis",()=>{let e;this.selfAnalysisDone=!0;const t=this.className;this.TRACE_INIT("toFastProps",()=>{uc(this)}),this.TRACE_INIT("Grammar Recording",()=>{try{this.enableRecording(),C(this.definedRulesNames,i=>{const a=this[i].originalGrammarAction;let o;this.TRACE_INIT(`${i} Rule`,()=>{o=this.topLevelRuleRecord(i,a)}),this.gastProductionsCache[i]=o})}finally{this.disableRecording()}});let r=[];if(this.TRACE_INIT("Grammar Resolving",()=>{r=ch({rules:K(this.gastProductionsCache)}),this.definitionErrors=this.definitionErrors.concat(r)}),this.TRACE_INIT("Grammar Validations",()=>{if(D(r)&&this.skipValidations===!1){const i=lh({rules:K(this.gastProductionsCache),tokenTypes:K(this.tokensMap),errMsgProvider:lt,grammarName:t}),s=zf({lookaheadStrategy:this.lookaheadStrategy,rules:K(this.gastProductionsCache),tokenTypes:K(this.tokensMap),grammarName:t});this.definitionErrors=this.definitionErrors.concat(i,s)}}),D(this.definitionErrors)&&(this.recoveryEnabled&&this.TRACE_INIT("computeAllProdsFollows",()=>{const i=jd(K(this.gastProductionsCache));this.resyncFollows=i}),this.TRACE_INIT("ComputeLookaheadFunctions",()=>{var i,s;(s=(i=this.lookaheadStrategy).initialize)===null||s===void 0||s.call(i,{rules:K(this.gastProductionsCache)}),this.preComputeLookaheadFunctions(K(this.gastProductionsCache))})),!Tn.DEFER_DEFINITION_ERRORS_HANDLING&&!D(this.definitionErrors))throw e=S(this.definitionErrors,i=>i.message),new Error(`Parser Definition Errors detected: + ${e.join(` +------------------------------- +`)}`)})}constructor(e,t){this.definitionErrors=[],this.selfAnalysisDone=!1;const r=this;if(r.initErrorHandler(t),r.initLexerAdapter(),r.initLooksAhead(t),r.initRecognizerEngine(e,t),r.initRecoverable(t),r.initTreeBuilder(t),r.initContentAssist(),r.initGastRecorder(t),r.initPerformanceTracer(t),_(t,"ignoredIssues"))throw new Error(`The IParserConfig property has been deprecated. + Please use the flag on the relevant DSL method instead. + See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#IGNORING_AMBIGUITIES + For further details.`);this.skipValidations=_(t,"skipValidations")?t.skipValidations:Ye.skipValidations}}Tn.DEFER_DEFINITION_ERRORS_HANDLING=!1;Fh(Tn,[ph,yh,Ch,_h,Lh,wh,$h,Oh,Ph,Dh]);class Gh extends Tn{constructor(e,t=Ye){const r=te(t);r.outputCst=!1,super(e,r)}}function Ut(n,e,t){return`${n.name}_${e}_${t}`}const nt=1,Uh=2,Bc=4,Vc=5,Rn=7,Bh=8,Vh=9,Wh=10,jh=11,Wc=12;class Pi{constructor(e){this.target=e}isEpsilon(){return!1}}class Mi extends Pi{constructor(e,t){super(e),this.tokenType=t}}class jc extends Pi{constructor(e){super(e)}isEpsilon(){return!0}}class Di extends Pi{constructor(e,t,r){super(e),this.rule=t,this.followState=r}isEpsilon(){return!0}}function Hh(n){const e={decisionMap:{},decisionStates:[],ruleToStartState:new Map,ruleToStopState:new Map,states:[]};Kh(e,n);const t=n.length;for(let r=0;rHc(n,e,a));return Xt(n,e,r,t,...i)}function Qh(n,e,t){const r=Y(n,e,t,{type:nt});st(n,r);const i=Xt(n,e,r,t,yt(n,e,t));return Zh(n,e,t,i)}function yt(n,e,t){const r=ve(S(t.definition,i=>Hc(n,e,i)),i=>i!==void 0);return r.length===1?r[0]:r.length===0?void 0:tp(n,r)}function Kc(n,e,t,r,i){const s=r.left,a=r.right,o=Y(n,e,t,{type:jh});st(n,o);const c=Y(n,e,t,{type:Wc});return s.loopback=o,c.loopback=o,n.decisionMap[Ut(e,i?"RepetitionMandatoryWithSeparator":"RepetitionMandatory",t.idx)]=o,H(a,o),i===void 0?(H(o,s),H(o,c)):(H(o,c),H(o,i.left),H(i.right,s)),{left:s,right:c}}function zc(n,e,t,r,i){const s=r.left,a=r.right,o=Y(n,e,t,{type:Wh});st(n,o);const c=Y(n,e,t,{type:Wc}),l=Y(n,e,t,{type:Vh});return o.loopback=l,c.loopback=l,H(o,s),H(o,c),H(a,l),i!==void 0?(H(l,c),H(l,i.left),H(i.right,s)):H(l,o),n.decisionMap[Ut(e,i?"RepetitionWithSeparator":"Repetition",t.idx)]=o,{left:o,right:c}}function Zh(n,e,t,r){const i=r.left,s=r.right;return H(i,s),n.decisionMap[Ut(e,"Option",t.idx)]=i,r}function st(n,e){return n.decisionStates.push(e),e.decision=n.decisionStates.length-1,e.decision}function Xt(n,e,t,r,...i){const s=Y(n,e,r,{type:Bh,start:t});t.end=s;for(const o of i)o!==void 0?(H(t,o.left),H(o.right,s)):H(t,s);const a={left:t,right:s};return n.decisionMap[Ut(e,ep(r),r.idx)]=t,a}function ep(n){if(n instanceof me)return"Alternation";if(n instanceof ee)return"Option";if(n instanceof W)return"Repetition";if(n instanceof pe)return"RepetitionWithSeparator";if(n instanceof Ee)return"RepetitionMandatory";if(n instanceof ke)return"RepetitionMandatoryWithSeparator";throw new Error("Invalid production type encountered")}function tp(n,e){const t=e.length;for(let s=0;se.alt)}get key(){let e="";for(const t in this.map)e+=t+":";return e}}function qc(n,e=!0){return`${e?`a${n.alt}`:""}s${n.state.stateNumber}:${n.stack.map(t=>t.stateNumber.toString()).join("_")}`}function sp(n,e){const t={};return r=>{const i=r.toString();let s=t[i];return s!==void 0||(s={atnStartState:n,decision:e,states:{}},t[i]=s),s}}class Yc{constructor(){this.predicates=[]}is(e){return e>=this.predicates.length||this.predicates[e]}set(e,t){this.predicates[e]=t}toString(){let e="";const t=this.predicates.length;for(let r=0;rconsole.log(r)}initialize(e){this.atn=Hh(e.rules),this.dfas=op(this.atn)}validateAmbiguousAlternationAlternatives(){return[]}validateEmptyOrAlternatives(){return[]}buildLookaheadForAlternation(e){const{prodOccurrence:t,rule:r,hasPredicates:i,dynamicTokensEnabled:s}=e,a=this.dfas,o=this.logging,c=Ut(r,"Alternation",t),u=this.atn.decisionMap[c].decision,d=S(Is({maxLookahead:1,occurrence:t,prodType:"Alternation",rule:r}),f=>S(f,h=>h[0]));if(bs(d,!1)&&!s){const f=oe(d,(h,m,g)=>(C(m,A=>{A&&(h[A.tokenTypeIdx]=g,C(A.categoryMatches,y=>{h[y]=g}))}),h),{});return i?function(h){var m;const g=this.LA(1),A=f[g.tokenTypeIdx];if(h!==void 0&&A!==void 0){const y=(m=h[A])===null||m===void 0?void 0:m.GATE;if(y!==void 0&&y.call(this)===!1)return}return A}:function(){const h=this.LA(1);return f[h.tokenTypeIdx]}}else return i?function(f){const h=new Yc,m=f===void 0?0:f.length;for(let A=0;AS(f,h=>h[0]));if(bs(d)&&d[0][0]&&!s){const f=d[0],h=Ne(f);if(h.length===1&&D(h[0].categoryMatches)){const g=h[0].tokenTypeIdx;return function(){return this.LA(1).tokenTypeIdx===g}}else{const m=oe(h,(g,A)=>(A!==void 0&&(g[A.tokenTypeIdx]=!0,C(A.categoryMatches,y=>{g[y]=!0})),g),{});return function(){const g=this.LA(1);return m[g.tokenTypeIdx]===!0}}}return function(){const f=_r.call(this,a,u,Os,o);return typeof f=="object"?!1:f===0}}}function bs(n,e=!0){const t=new Set;for(const r of n){const i=new Set;for(const s of r){if(s===void 0){if(e)break;return!1}const a=[s.tokenTypeIdx].concat(s.categoryMatches);for(const o of a)if(t.has(o)){if(!i.has(o))return!1}else t.add(o),i.add(o)}}return!0}function op(n){const e=n.decisionStates.length,t=Array(e);for(let r=0;rEt(i)).join(", "),t=n.production.idx===0?"":n.production.idx;let r=`Ambiguous Alternatives Detected: <${n.ambiguityIndices.join(", ")}> in <${fp(n.production)}${t}> inside <${n.topLevelRule.name}> Rule, +<${e}> may appears as a prefix path in all these alternatives. +`;return r=r+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES +For Further details.`,r}function fp(n){if(n instanceof ce)return"SUBRULE";if(n instanceof ee)return"OPTION";if(n instanceof me)return"OR";if(n instanceof Ee)return"AT_LEAST_ONE";if(n instanceof ke)return"AT_LEAST_ONE_SEP";if(n instanceof pe)return"MANY_SEP";if(n instanceof W)return"MANY";if(n instanceof G)return"CONSUME";throw Error("non exhaustive match")}function hp(n,e,t){const r=Re(e.configs.elements,s=>s.state.transitions),i=ku(r.filter(s=>s instanceof Mi).map(s=>s.tokenType),s=>s.tokenTypeIdx);return{actualToken:t,possibleTokenTypes:i,tokenPath:n}}function pp(n,e){return n.edges[e.tokenTypeIdx]}function mp(n,e,t){const r=new zr,i=[];for(const a of n.elements){if(t.is(a.alt)===!1)continue;if(a.state.type===Rn){i.push(a);continue}const o=a.state.transitions.length;for(let c=0;c0&&!Ap(s))for(const a of i)s.add(a);return s}function gp(n,e){if(n instanceof Mi&&Ec(e,n.tokenType))return n.target}function yp(n,e){let t;for(const r of n.elements)if(e.is(r.alt)===!0){if(t===void 0)t=r.alt;else if(t!==r.alt)return}return t}function Xc(n){return{configs:n,edges:{},isAcceptState:!1,prediction:-1}}function Ps(n,e,t,r){return r=Jc(n,r),e.edges[t.tokenTypeIdx]=r,r}function Jc(n,e){if(e===Wn)return e;const t=e.configs.key,r=n.states[t];return r!==void 0?r:(e.configs.finalize(),n.states[t]=e,e)}function Tp(n){const e=new zr,t=n.transitions.length;for(let r=0;r0){const i=[...n.stack],a={state:i.pop(),alt:n.alt,stack:i};jn(a,e)}else e.add(n);return}t.epsilonOnlyTransitions||e.add(n);const r=t.transitions.length;for(let i=0;i1)return!0;return!1}function Ip(n){for(const e of Array.from(n.values()))if(Object.keys(e).length===1)return!0;return!1}var Ms;(function(n){function e(t){return typeof t=="string"}n.is=e})(Ms||(Ms={}));var qr;(function(n){function e(t){return typeof t=="string"}n.is=e})(qr||(qr={}));var Ds;(function(n){n.MIN_VALUE=-2147483648,n.MAX_VALUE=2147483647;function e(t){return typeof t=="number"&&n.MIN_VALUE<=t&&t<=n.MAX_VALUE}n.is=e})(Ds||(Ds={}));var Hn;(function(n){n.MIN_VALUE=0,n.MAX_VALUE=2147483647;function e(t){return typeof t=="number"&&n.MIN_VALUE<=t&&t<=n.MAX_VALUE}n.is=e})(Hn||(Hn={}));var P;(function(n){function e(r,i){return r===Number.MAX_VALUE&&(r=Hn.MAX_VALUE),i===Number.MAX_VALUE&&(i=Hn.MAX_VALUE),{line:r,character:i}}n.create=e;function t(r){let i=r;return p.objectLiteral(i)&&p.uinteger(i.line)&&p.uinteger(i.character)}n.is=t})(P||(P={}));var b;(function(n){function e(r,i,s,a){if(p.uinteger(r)&&p.uinteger(i)&&p.uinteger(s)&&p.uinteger(a))return{start:P.create(r,i),end:P.create(s,a)};if(P.is(r)&&P.is(i))return{start:r,end:i};throw new Error(`Range#create called with invalid arguments[${r}, ${i}, ${s}, ${a}]`)}n.create=e;function t(r){let i=r;return p.objectLiteral(i)&&P.is(i.start)&&P.is(i.end)}n.is=t})(b||(b={}));var Kn;(function(n){function e(r,i){return{uri:r,range:i}}n.create=e;function t(r){let i=r;return p.objectLiteral(i)&&b.is(i.range)&&(p.string(i.uri)||p.undefined(i.uri))}n.is=t})(Kn||(Kn={}));var Fs;(function(n){function e(r,i,s,a){return{targetUri:r,targetRange:i,targetSelectionRange:s,originSelectionRange:a}}n.create=e;function t(r){let i=r;return p.objectLiteral(i)&&b.is(i.targetRange)&&p.string(i.targetUri)&&b.is(i.targetSelectionRange)&&(b.is(i.originSelectionRange)||p.undefined(i.originSelectionRange))}n.is=t})(Fs||(Fs={}));var Yr;(function(n){function e(r,i,s,a){return{red:r,green:i,blue:s,alpha:a}}n.create=e;function t(r){const i=r;return p.objectLiteral(i)&&p.numberRange(i.red,0,1)&&p.numberRange(i.green,0,1)&&p.numberRange(i.blue,0,1)&&p.numberRange(i.alpha,0,1)}n.is=t})(Yr||(Yr={}));var Gs;(function(n){function e(r,i){return{range:r,color:i}}n.create=e;function t(r){const i=r;return p.objectLiteral(i)&&b.is(i.range)&&Yr.is(i.color)}n.is=t})(Gs||(Gs={}));var Us;(function(n){function e(r,i,s){return{label:r,textEdit:i,additionalTextEdits:s}}n.create=e;function t(r){const i=r;return p.objectLiteral(i)&&p.string(i.label)&&(p.undefined(i.textEdit)||Vt.is(i))&&(p.undefined(i.additionalTextEdits)||p.typedArray(i.additionalTextEdits,Vt.is))}n.is=t})(Us||(Us={}));var Bs;(function(n){n.Comment="comment",n.Imports="imports",n.Region="region"})(Bs||(Bs={}));var Vs;(function(n){function e(r,i,s,a,o,c){const l={startLine:r,endLine:i};return p.defined(s)&&(l.startCharacter=s),p.defined(a)&&(l.endCharacter=a),p.defined(o)&&(l.kind=o),p.defined(c)&&(l.collapsedText=c),l}n.create=e;function t(r){const i=r;return p.objectLiteral(i)&&p.uinteger(i.startLine)&&p.uinteger(i.startLine)&&(p.undefined(i.startCharacter)||p.uinteger(i.startCharacter))&&(p.undefined(i.endCharacter)||p.uinteger(i.endCharacter))&&(p.undefined(i.kind)||p.string(i.kind))}n.is=t})(Vs||(Vs={}));var Xr;(function(n){function e(r,i){return{location:r,message:i}}n.create=e;function t(r){let i=r;return p.defined(i)&&Kn.is(i.location)&&p.string(i.message)}n.is=t})(Xr||(Xr={}));var Ws;(function(n){n.Error=1,n.Warning=2,n.Information=3,n.Hint=4})(Ws||(Ws={}));var js;(function(n){n.Unnecessary=1,n.Deprecated=2})(js||(js={}));var Hs;(function(n){function e(t){const r=t;return p.objectLiteral(r)&&p.string(r.href)}n.is=e})(Hs||(Hs={}));var zn;(function(n){function e(r,i,s,a,o,c){let l={range:r,message:i};return p.defined(s)&&(l.severity=s),p.defined(a)&&(l.code=a),p.defined(o)&&(l.source=o),p.defined(c)&&(l.relatedInformation=c),l}n.create=e;function t(r){var i;let s=r;return p.defined(s)&&b.is(s.range)&&p.string(s.message)&&(p.number(s.severity)||p.undefined(s.severity))&&(p.integer(s.code)||p.string(s.code)||p.undefined(s.code))&&(p.undefined(s.codeDescription)||p.string((i=s.codeDescription)===null||i===void 0?void 0:i.href))&&(p.string(s.source)||p.undefined(s.source))&&(p.undefined(s.relatedInformation)||p.typedArray(s.relatedInformation,Xr.is))}n.is=t})(zn||(zn={}));var Bt;(function(n){function e(r,i,...s){let a={title:r,command:i};return p.defined(s)&&s.length>0&&(a.arguments=s),a}n.create=e;function t(r){let i=r;return p.defined(i)&&p.string(i.title)&&p.string(i.command)}n.is=t})(Bt||(Bt={}));var Vt;(function(n){function e(s,a){return{range:s,newText:a}}n.replace=e;function t(s,a){return{range:{start:s,end:s},newText:a}}n.insert=t;function r(s){return{range:s,newText:""}}n.del=r;function i(s){const a=s;return p.objectLiteral(a)&&p.string(a.newText)&&b.is(a.range)}n.is=i})(Vt||(Vt={}));var Jr;(function(n){function e(r,i,s){const a={label:r};return i!==void 0&&(a.needsConfirmation=i),s!==void 0&&(a.description=s),a}n.create=e;function t(r){const i=r;return p.objectLiteral(i)&&p.string(i.label)&&(p.boolean(i.needsConfirmation)||i.needsConfirmation===void 0)&&(p.string(i.description)||i.description===void 0)}n.is=t})(Jr||(Jr={}));var Wt;(function(n){function e(t){const r=t;return p.string(r)}n.is=e})(Wt||(Wt={}));var Ks;(function(n){function e(s,a,o){return{range:s,newText:a,annotationId:o}}n.replace=e;function t(s,a,o){return{range:{start:s,end:s},newText:a,annotationId:o}}n.insert=t;function r(s,a){return{range:s,newText:"",annotationId:a}}n.del=r;function i(s){const a=s;return Vt.is(a)&&(Jr.is(a.annotationId)||Wt.is(a.annotationId))}n.is=i})(Ks||(Ks={}));var Qr;(function(n){function e(r,i){return{textDocument:r,edits:i}}n.create=e;function t(r){let i=r;return p.defined(i)&&ri.is(i.textDocument)&&Array.isArray(i.edits)}n.is=t})(Qr||(Qr={}));var Zr;(function(n){function e(r,i,s){let a={kind:"create",uri:r};return i!==void 0&&(i.overwrite!==void 0||i.ignoreIfExists!==void 0)&&(a.options=i),s!==void 0&&(a.annotationId=s),a}n.create=e;function t(r){let i=r;return i&&i.kind==="create"&&p.string(i.uri)&&(i.options===void 0||(i.options.overwrite===void 0||p.boolean(i.options.overwrite))&&(i.options.ignoreIfExists===void 0||p.boolean(i.options.ignoreIfExists)))&&(i.annotationId===void 0||Wt.is(i.annotationId))}n.is=t})(Zr||(Zr={}));var ei;(function(n){function e(r,i,s,a){let o={kind:"rename",oldUri:r,newUri:i};return s!==void 0&&(s.overwrite!==void 0||s.ignoreIfExists!==void 0)&&(o.options=s),a!==void 0&&(o.annotationId=a),o}n.create=e;function t(r){let i=r;return i&&i.kind==="rename"&&p.string(i.oldUri)&&p.string(i.newUri)&&(i.options===void 0||(i.options.overwrite===void 0||p.boolean(i.options.overwrite))&&(i.options.ignoreIfExists===void 0||p.boolean(i.options.ignoreIfExists)))&&(i.annotationId===void 0||Wt.is(i.annotationId))}n.is=t})(ei||(ei={}));var ti;(function(n){function e(r,i,s){let a={kind:"delete",uri:r};return i!==void 0&&(i.recursive!==void 0||i.ignoreIfNotExists!==void 0)&&(a.options=i),s!==void 0&&(a.annotationId=s),a}n.create=e;function t(r){let i=r;return i&&i.kind==="delete"&&p.string(i.uri)&&(i.options===void 0||(i.options.recursive===void 0||p.boolean(i.options.recursive))&&(i.options.ignoreIfNotExists===void 0||p.boolean(i.options.ignoreIfNotExists)))&&(i.annotationId===void 0||Wt.is(i.annotationId))}n.is=t})(ti||(ti={}));var ni;(function(n){function e(t){let r=t;return r&&(r.changes!==void 0||r.documentChanges!==void 0)&&(r.documentChanges===void 0||r.documentChanges.every(i=>p.string(i.kind)?Zr.is(i)||ei.is(i)||ti.is(i):Qr.is(i)))}n.is=e})(ni||(ni={}));var zs;(function(n){function e(r){return{uri:r}}n.create=e;function t(r){let i=r;return p.defined(i)&&p.string(i.uri)}n.is=t})(zs||(zs={}));var qs;(function(n){function e(r,i){return{uri:r,version:i}}n.create=e;function t(r){let i=r;return p.defined(i)&&p.string(i.uri)&&p.integer(i.version)}n.is=t})(qs||(qs={}));var ri;(function(n){function e(r,i){return{uri:r,version:i}}n.create=e;function t(r){let i=r;return p.defined(i)&&p.string(i.uri)&&(i.version===null||p.integer(i.version))}n.is=t})(ri||(ri={}));var Ys;(function(n){function e(r,i,s,a){return{uri:r,languageId:i,version:s,text:a}}n.create=e;function t(r){let i=r;return p.defined(i)&&p.string(i.uri)&&p.string(i.languageId)&&p.integer(i.version)&&p.string(i.text)}n.is=t})(Ys||(Ys={}));var ii;(function(n){n.PlainText="plaintext",n.Markdown="markdown";function e(t){const r=t;return r===n.PlainText||r===n.Markdown}n.is=e})(ii||(ii={}));var un;(function(n){function e(t){const r=t;return p.objectLiteral(t)&&ii.is(r.kind)&&p.string(r.value)}n.is=e})(un||(un={}));var Xs;(function(n){n.Text=1,n.Method=2,n.Function=3,n.Constructor=4,n.Field=5,n.Variable=6,n.Class=7,n.Interface=8,n.Module=9,n.Property=10,n.Unit=11,n.Value=12,n.Enum=13,n.Keyword=14,n.Snippet=15,n.Color=16,n.File=17,n.Reference=18,n.Folder=19,n.EnumMember=20,n.Constant=21,n.Struct=22,n.Event=23,n.Operator=24,n.TypeParameter=25})(Xs||(Xs={}));var Js;(function(n){n.PlainText=1,n.Snippet=2})(Js||(Js={}));var Qs;(function(n){n.Deprecated=1})(Qs||(Qs={}));var Zs;(function(n){function e(r,i,s){return{newText:r,insert:i,replace:s}}n.create=e;function t(r){const i=r;return i&&p.string(i.newText)&&b.is(i.insert)&&b.is(i.replace)}n.is=t})(Zs||(Zs={}));var ea;(function(n){n.asIs=1,n.adjustIndentation=2})(ea||(ea={}));var ta;(function(n){function e(t){const r=t;return r&&(p.string(r.detail)||r.detail===void 0)&&(p.string(r.description)||r.description===void 0)}n.is=e})(ta||(ta={}));var na;(function(n){function e(t){return{label:t}}n.create=e})(na||(na={}));var ra;(function(n){function e(t,r){return{items:t||[],isIncomplete:!!r}}n.create=e})(ra||(ra={}));var qn;(function(n){function e(r){return r.replace(/[\\`*_{}[\]()#+\-.!]/g,"\\$&")}n.fromPlainText=e;function t(r){const i=r;return p.string(i)||p.objectLiteral(i)&&p.string(i.language)&&p.string(i.value)}n.is=t})(qn||(qn={}));var ia;(function(n){function e(t){let r=t;return!!r&&p.objectLiteral(r)&&(un.is(r.contents)||qn.is(r.contents)||p.typedArray(r.contents,qn.is))&&(t.range===void 0||b.is(t.range))}n.is=e})(ia||(ia={}));var sa;(function(n){function e(t,r){return r?{label:t,documentation:r}:{label:t}}n.create=e})(sa||(sa={}));var aa;(function(n){function e(t,r,...i){let s={label:t};return p.defined(r)&&(s.documentation=r),p.defined(i)?s.parameters=i:s.parameters=[],s}n.create=e})(aa||(aa={}));var oa;(function(n){n.Text=1,n.Read=2,n.Write=3})(oa||(oa={}));var ca;(function(n){function e(t,r){let i={range:t};return p.number(r)&&(i.kind=r),i}n.create=e})(ca||(ca={}));var la;(function(n){n.File=1,n.Module=2,n.Namespace=3,n.Package=4,n.Class=5,n.Method=6,n.Property=7,n.Field=8,n.Constructor=9,n.Enum=10,n.Interface=11,n.Function=12,n.Variable=13,n.Constant=14,n.String=15,n.Number=16,n.Boolean=17,n.Array=18,n.Object=19,n.Key=20,n.Null=21,n.EnumMember=22,n.Struct=23,n.Event=24,n.Operator=25,n.TypeParameter=26})(la||(la={}));var ua;(function(n){n.Deprecated=1})(ua||(ua={}));var da;(function(n){function e(t,r,i,s,a){let o={name:t,kind:r,location:{uri:s,range:i}};return a&&(o.containerName=a),o}n.create=e})(da||(da={}));var fa;(function(n){function e(t,r,i,s){return s!==void 0?{name:t,kind:r,location:{uri:i,range:s}}:{name:t,kind:r,location:{uri:i}}}n.create=e})(fa||(fa={}));var ha;(function(n){function e(r,i,s,a,o,c){let l={name:r,detail:i,kind:s,range:a,selectionRange:o};return c!==void 0&&(l.children=c),l}n.create=e;function t(r){let i=r;return i&&p.string(i.name)&&p.number(i.kind)&&b.is(i.range)&&b.is(i.selectionRange)&&(i.detail===void 0||p.string(i.detail))&&(i.deprecated===void 0||p.boolean(i.deprecated))&&(i.children===void 0||Array.isArray(i.children))&&(i.tags===void 0||Array.isArray(i.tags))}n.is=t})(ha||(ha={}));var pa;(function(n){n.Empty="",n.QuickFix="quickfix",n.Refactor="refactor",n.RefactorExtract="refactor.extract",n.RefactorInline="refactor.inline",n.RefactorRewrite="refactor.rewrite",n.Source="source",n.SourceOrganizeImports="source.organizeImports",n.SourceFixAll="source.fixAll"})(pa||(pa={}));var Yn;(function(n){n.Invoked=1,n.Automatic=2})(Yn||(Yn={}));var ma;(function(n){function e(r,i,s){let a={diagnostics:r};return i!=null&&(a.only=i),s!=null&&(a.triggerKind=s),a}n.create=e;function t(r){let i=r;return p.defined(i)&&p.typedArray(i.diagnostics,zn.is)&&(i.only===void 0||p.typedArray(i.only,p.string))&&(i.triggerKind===void 0||i.triggerKind===Yn.Invoked||i.triggerKind===Yn.Automatic)}n.is=t})(ma||(ma={}));var ga;(function(n){function e(r,i,s){let a={title:r},o=!0;return typeof i=="string"?(o=!1,a.kind=i):Bt.is(i)?a.command=i:a.edit=i,o&&s!==void 0&&(a.kind=s),a}n.create=e;function t(r){let i=r;return i&&p.string(i.title)&&(i.diagnostics===void 0||p.typedArray(i.diagnostics,zn.is))&&(i.kind===void 0||p.string(i.kind))&&(i.edit!==void 0||i.command!==void 0)&&(i.command===void 0||Bt.is(i.command))&&(i.isPreferred===void 0||p.boolean(i.isPreferred))&&(i.edit===void 0||ni.is(i.edit))}n.is=t})(ga||(ga={}));var ya;(function(n){function e(r,i){let s={range:r};return p.defined(i)&&(s.data=i),s}n.create=e;function t(r){let i=r;return p.defined(i)&&b.is(i.range)&&(p.undefined(i.command)||Bt.is(i.command))}n.is=t})(ya||(ya={}));var Ta;(function(n){function e(r,i){return{tabSize:r,insertSpaces:i}}n.create=e;function t(r){let i=r;return p.defined(i)&&p.uinteger(i.tabSize)&&p.boolean(i.insertSpaces)}n.is=t})(Ta||(Ta={}));var Ra;(function(n){function e(r,i,s){return{range:r,target:i,data:s}}n.create=e;function t(r){let i=r;return p.defined(i)&&b.is(i.range)&&(p.undefined(i.target)||p.string(i.target))}n.is=t})(Ra||(Ra={}));var Aa;(function(n){function e(r,i){return{range:r,parent:i}}n.create=e;function t(r){let i=r;return p.objectLiteral(i)&&b.is(i.range)&&(i.parent===void 0||n.is(i.parent))}n.is=t})(Aa||(Aa={}));var va;(function(n){n.namespace="namespace",n.type="type",n.class="class",n.enum="enum",n.interface="interface",n.struct="struct",n.typeParameter="typeParameter",n.parameter="parameter",n.variable="variable",n.property="property",n.enumMember="enumMember",n.event="event",n.function="function",n.method="method",n.macro="macro",n.keyword="keyword",n.modifier="modifier",n.comment="comment",n.string="string",n.number="number",n.regexp="regexp",n.operator="operator",n.decorator="decorator"})(va||(va={}));var Ea;(function(n){n.declaration="declaration",n.definition="definition",n.readonly="readonly",n.static="static",n.deprecated="deprecated",n.abstract="abstract",n.async="async",n.modification="modification",n.documentation="documentation",n.defaultLibrary="defaultLibrary"})(Ea||(Ea={}));var ka;(function(n){function e(t){const r=t;return p.objectLiteral(r)&&(r.resultId===void 0||typeof r.resultId=="string")&&Array.isArray(r.data)&&(r.data.length===0||typeof r.data[0]=="number")}n.is=e})(ka||(ka={}));var Sa;(function(n){function e(r,i){return{range:r,text:i}}n.create=e;function t(r){const i=r;return i!=null&&b.is(i.range)&&p.string(i.text)}n.is=t})(Sa||(Sa={}));var Ia;(function(n){function e(r,i,s){return{range:r,variableName:i,caseSensitiveLookup:s}}n.create=e;function t(r){const i=r;return i!=null&&b.is(i.range)&&p.boolean(i.caseSensitiveLookup)&&(p.string(i.variableName)||i.variableName===void 0)}n.is=t})(Ia||(Ia={}));var xa;(function(n){function e(r,i){return{range:r,expression:i}}n.create=e;function t(r){const i=r;return i!=null&&b.is(i.range)&&(p.string(i.expression)||i.expression===void 0)}n.is=t})(xa||(xa={}));var Na;(function(n){function e(r,i){return{frameId:r,stoppedLocation:i}}n.create=e;function t(r){const i=r;return p.defined(i)&&b.is(r.stoppedLocation)}n.is=t})(Na||(Na={}));var si;(function(n){n.Type=1,n.Parameter=2;function e(t){return t===1||t===2}n.is=e})(si||(si={}));var ai;(function(n){function e(r){return{value:r}}n.create=e;function t(r){const i=r;return p.objectLiteral(i)&&(i.tooltip===void 0||p.string(i.tooltip)||un.is(i.tooltip))&&(i.location===void 0||Kn.is(i.location))&&(i.command===void 0||Bt.is(i.command))}n.is=t})(ai||(ai={}));var Ca;(function(n){function e(r,i,s){const a={position:r,label:i};return s!==void 0&&(a.kind=s),a}n.create=e;function t(r){const i=r;return p.objectLiteral(i)&&P.is(i.position)&&(p.string(i.label)||p.typedArray(i.label,ai.is))&&(i.kind===void 0||si.is(i.kind))&&i.textEdits===void 0||p.typedArray(i.textEdits,Vt.is)&&(i.tooltip===void 0||p.string(i.tooltip)||un.is(i.tooltip))&&(i.paddingLeft===void 0||p.boolean(i.paddingLeft))&&(i.paddingRight===void 0||p.boolean(i.paddingRight))}n.is=t})(Ca||(Ca={}));var _a;(function(n){function e(t){return{kind:"snippet",value:t}}n.createSnippet=e})(_a||(_a={}));var wa;(function(n){function e(t,r,i,s){return{insertText:t,filterText:r,range:i,command:s}}n.create=e})(wa||(wa={}));var La;(function(n){function e(t){return{items:t}}n.create=e})(La||(La={}));var $a;(function(n){n.Invoked=0,n.Automatic=1})($a||($a={}));var Oa;(function(n){function e(t,r){return{range:t,text:r}}n.create=e})(Oa||(Oa={}));var ba;(function(n){function e(t,r){return{triggerKind:t,selectedCompletionInfo:r}}n.create=e})(ba||(ba={}));var Pa;(function(n){function e(t){const r=t;return p.objectLiteral(r)&&qr.is(r.uri)&&p.string(r.name)}n.is=e})(Pa||(Pa={}));var Ma;(function(n){function e(s,a,o,c){return new xp(s,a,o,c)}n.create=e;function t(s){let a=s;return!!(p.defined(a)&&p.string(a.uri)&&(p.undefined(a.languageId)||p.string(a.languageId))&&p.uinteger(a.lineCount)&&p.func(a.getText)&&p.func(a.positionAt)&&p.func(a.offsetAt))}n.is=t;function r(s,a){let o=s.getText(),c=i(a,(u,d)=>{let f=u.range.start.line-d.range.start.line;return f===0?u.range.start.character-d.range.start.character:f}),l=o.length;for(let u=c.length-1;u>=0;u--){let d=c[u],f=s.offsetAt(d.range.start),h=s.offsetAt(d.range.end);if(h<=l)o=o.substring(0,f)+d.newText+o.substring(h,o.length);else throw new Error("Overlapping edit");l=f}return o}n.applyEdits=r;function i(s,a){if(s.length<=1)return s;const o=s.length/2|0,c=s.slice(0,o),l=s.slice(o);i(c,a),i(l,a);let u=0,d=0,f=0;for(;u0&&e.push(t.length),this._lineOffsets=e}return this._lineOffsets}positionAt(e){e=Math.max(Math.min(e,this._content.length),0);let t=this.getLineOffsets(),r=0,i=t.length;if(i===0)return P.create(0,e);for(;re?i=a:r=a+1}let s=r-1;return P.create(s,e-t[s])}offsetAt(e){let t=this.getLineOffsets();if(e.line>=t.length)return this._content.length;if(e.line<0)return 0;let r=t[e.line],i=e.line+1"u"}n.undefined=r;function i(h){return h===!0||h===!1}n.boolean=i;function s(h){return e.call(h)==="[object String]"}n.string=s;function a(h){return e.call(h)==="[object Number]"}n.number=a;function o(h,m,g){return e.call(h)==="[object Number]"&&m<=h&&h<=g}n.numberRange=o;function c(h){return e.call(h)==="[object Number]"&&-2147483648<=h&&h<=2147483647}n.integer=c;function l(h){return e.call(h)==="[object Number]"&&0<=h&&h<=2147483647}n.uinteger=l;function u(h){return e.call(h)==="[object Function]"}n.func=u;function d(h){return h!==null&&typeof h=="object"}n.objectLiteral=d;function f(h,m){return Array.isArray(h)&&h.every(m)}n.typedArray=f})(p||(p={}));class Np{constructor(){this.nodeStack=[]}get current(){return this.nodeStack[this.nodeStack.length-1]}buildRootNode(e){return this.rootNode=new Zc(e),this.rootNode.root=this.rootNode,this.nodeStack=[this.rootNode],this.rootNode}buildCompositeNode(e){const t=new Ui;return t.grammarSource=e,t.root=this.rootNode,this.current.content.push(t),this.nodeStack.push(t),t}buildLeafNode(e,t){const r=new oi(e.startOffset,e.image.length,Mr(e),e.tokenType,!1);return r.grammarSource=t,r.root=this.rootNode,this.current.content.push(r),r}removeNode(e){const t=e.container;if(t){const r=t.content.indexOf(e);r>=0&&t.content.splice(r,1)}}construct(e){const t=this.current;typeof e.$type=="string"&&(this.current.astNode=e),e.$cstNode=t;const r=this.nodeStack.pop();(r==null?void 0:r.content.length)===0&&this.removeNode(r)}addHiddenTokens(e){for(const t of e){const r=new oi(t.startOffset,t.image.length,Mr(t),t.tokenType,!0);r.root=this.rootNode,this.addHiddenToken(this.rootNode,r)}}addHiddenToken(e,t){const{offset:r,end:i}=t;for(let s=0;so&&i=0;e--){const t=this.content[e];if(!t.hidden)return t}return this.content[this.content.length-1]}}class Bi extends Array{constructor(e){super(),this.parent=e,Object.setPrototypeOf(this,Bi.prototype)}push(...e){return this.addParents(e),super.push(...e)}unshift(...e){return this.addParents(e),super.unshift(...e)}splice(e,t,...r){return this.addParents(r),super.splice(e,t,...r)}addParents(e){for(const t of e)t.container=this.parent}}class Zc extends Ui{get text(){return this._text.substring(this.offset,this.end)}get fullText(){return this._text}constructor(e){super(),this._text="",this._text=e??""}}const ci=Symbol("Datatype");function wr(n){return n.$type===ci}const Da="​",el=n=>n.endsWith(Da)?n:n+Da;class tl{constructor(e){this._unorderedGroups=new Map,this.lexer=e.parser.Lexer;const t=this.lexer.definition;this.wrapper=new $p(t,Object.assign(Object.assign({},e.parser.ParserConfig),{errorMessageProvider:e.parser.ParserErrorMessageProvider}))}alternatives(e,t){this.wrapper.wrapOr(e,t)}optional(e,t){this.wrapper.wrapOption(e,t)}many(e,t){this.wrapper.wrapMany(e,t)}atLeastOne(e,t){this.wrapper.wrapAtLeastOne(e,t)}isRecording(){return this.wrapper.IS_RECORDING}get unorderedGroups(){return this._unorderedGroups}getRuleStack(){return this.wrapper.RULE_STACK}finalize(){this.wrapper.wrapSelfAnalysis()}}class Cp extends tl{get current(){return this.stack[this.stack.length-1]}constructor(e){super(e),this.nodeBuilder=new Np,this.stack=[],this.assignmentMap=new Map,this.linker=e.references.Linker,this.converter=e.parser.ValueConverter,this.astReflection=e.shared.AstReflection}rule(e,t){const r=e.fragment?void 0:Ni(e)?ci:lr(e),i=this.wrapper.DEFINE_RULE(el(e.name),this.startImplementation(r,t).bind(this));return e.entry&&(this.mainRule=i),i}parse(e){this.nodeBuilder.buildRootNode(e);const t=this.lexer.tokenize(e);this.wrapper.input=t.tokens;const r=this.mainRule.call(this.wrapper,{});return this.nodeBuilder.addHiddenTokens(t.hidden),this.unorderedGroups.clear(),{value:r,lexerErrors:t.errors,parserErrors:this.wrapper.errors}}startImplementation(e,t){return r=>{if(!this.isRecording()){const s={$type:e};this.stack.push(s),e===ci&&(s.value="")}let i;try{i=t(r)}catch{i=void 0}return!this.isRecording()&&i===void 0&&(i=this.construct()),i}}consume(e,t,r){const i=this.wrapper.wrapConsume(e,t);if(!this.isRecording()&&this.isValidToken(i)){const s=this.nodeBuilder.buildLeafNode(i,r),{assignment:a,isCrossRef:o}=this.getAssignment(r),c=this.current;if(a){const l=dt(r)?i.image:this.converter.convert(i.image,s);this.assign(a.operator,a.feature,l,s,o)}else if(wr(c)){let l=i.image;dt(r)||(l=this.converter.convert(l,s).toString()),c.value+=l}}}isValidToken(e){return!e.isInsertedInRecovery&&!isNaN(e.startOffset)&&typeof e.endOffset=="number"&&!isNaN(e.endOffset)}subrule(e,t,r,i){let s;this.isRecording()||(s=this.nodeBuilder.buildCompositeNode(r));const a=this.wrapper.wrapSubrule(e,t,i);!this.isRecording()&&s&&s.length>0&&this.performSubruleAssignment(a,r,s)}performSubruleAssignment(e,t,r){const{assignment:i,isCrossRef:s}=this.getAssignment(t);if(i)this.assign(i.operator,i.feature,e,r,s);else if(!i){const a=this.current;if(wr(a))a.value+=e.toString();else if(typeof e=="object"&&e){const o=e.$type,c=this.assignWithoutOverride(e,a);o&&(c.$type=o);const l=c;this.stack.pop(),this.stack.push(l)}}}action(e,t){if(!this.isRecording()){let r=this.current;if(!r.$cstNode&&t.feature&&t.operator){r=this.construct(!1);const s=r.$cstNode.feature;this.nodeBuilder.buildCompositeNode(s)}const i={$type:e};this.stack.pop(),this.stack.push(i),t.feature&&t.operator&&this.assign(t.operator,t.feature,r,r.$cstNode,!1)}}construct(e=!0){if(this.isRecording())return;const t=this.current;return ad(t),this.nodeBuilder.construct(t),e&&this.stack.pop(),wr(t)?this.converter.convert(t.value,t.$cstNode):(cd(this.astReflection,t),t)}getAssignment(e){if(!this.assignmentMap.has(e)){const t=ar(e,ut);this.assignmentMap.set(e,{assignment:t,isCrossRef:t?ki(t.terminal):!1})}return this.assignmentMap.get(e)}assign(e,t,r,i,s){const a=this.current;let o;switch(s&&typeof r=="string"?o=this.linker.buildReference(a,t,i,r):o=r,e){case"=":{a[t]=o;break}case"?=":{a[t]=!0;break}case"+=":Array.isArray(a[t])||(a[t]=[]),a[t].push(o)}}assignWithoutOverride(e,t){for(const[r,i]of Object.entries(t)){const s=e[r];s===void 0?e[r]=i:Array.isArray(s)&&Array.isArray(i)&&(i.push(...s),e[r]=i)}return e}get definitionErrors(){return this.wrapper.definitionErrors}}class _p{buildMismatchTokenMessage(e){return At.buildMismatchTokenMessage(e)}buildNotAllInputParsedMessage(e){return At.buildNotAllInputParsedMessage(e)}buildNoViableAltMessage(e){return At.buildNoViableAltMessage(e)}buildEarlyExitMessage(e){return At.buildEarlyExitMessage(e)}}class nl extends _p{buildMismatchTokenMessage({expected:e,actual:t}){return`Expecting ${e.LABEL?"`"+e.LABEL+"`":e.name.endsWith(":KW")?`keyword '${e.name.substring(0,e.name.length-3)}'`:`token of type '${e.name}'`} but found \`${t.image}\`.`}buildNotAllInputParsedMessage({firstRedundant:e}){return`Expecting end of file but found \`${e.image}\`.`}}class wp extends tl{constructor(){super(...arguments),this.tokens=[],this.elementStack=[],this.lastElementStack=[],this.nextTokenIndex=0,this.stackSize=0}action(){}construct(){}parse(e){this.resetState();const t=this.lexer.tokenize(e);return this.tokens=t.tokens,this.wrapper.input=[...this.tokens],this.mainRule.call(this.wrapper,{}),this.unorderedGroups.clear(),{tokens:this.tokens,elementStack:[...this.lastElementStack],tokenIndex:this.nextTokenIndex}}rule(e,t){const r=this.wrapper.DEFINE_RULE(el(e.name),this.startImplementation(t).bind(this));return e.entry&&(this.mainRule=r),r}resetState(){this.elementStack=[],this.lastElementStack=[],this.nextTokenIndex=0,this.stackSize=0}startImplementation(e){return t=>{const r=this.keepStackSize();try{e(t)}finally{this.resetStackSize(r)}}}removeUnexpectedElements(){this.elementStack.splice(this.stackSize)}keepStackSize(){const e=this.elementStack.length;return this.stackSize=e,e}resetStackSize(e){this.removeUnexpectedElements(),this.stackSize=e}consume(e,t,r){this.wrapper.wrapConsume(e,t),this.isRecording()||(this.lastElementStack=[...this.elementStack,r],this.nextTokenIndex=this.currIdx+1)}subrule(e,t,r,i){this.before(r),this.wrapper.wrapSubrule(e,t,i),this.after(r)}before(e){this.isRecording()||this.elementStack.push(e)}after(e){if(!this.isRecording()){const t=this.elementStack.lastIndexOf(e);t>=0&&this.elementStack.splice(t)}}get currIdx(){return this.wrapper.currIdx}}const Lp={recoveryEnabled:!0,nodeLocationTracking:"full",skipValidations:!0,errorMessageProvider:new nl};class $p extends Gh{constructor(e,t){const r=t&&"maxLookahead"in t;super(e,Object.assign(Object.assign(Object.assign({},Lp),{lookaheadStrategy:r?new bi({maxLookahead:t.maxLookahead}):new ap}),t))}get IS_RECORDING(){return this.RECORDING_PHASE}DEFINE_RULE(e,t){return this.RULE(e,t)}wrapSelfAnalysis(){this.performSelfAnalysis()}wrapConsume(e,t){return this.consume(e,t)}wrapSubrule(e,t,r){return this.subrule(e,t,{ARGS:[r]})}wrapOr(e,t){this.or(e,t)}wrapOption(e,t){this.option(e,t)}wrapMany(e,t){this.many(e,t)}wrapAtLeastOne(e,t){this.atLeastOne(e,t)}}function rl(n,e,t){return Op({parser:e,tokens:t,rules:new Map,ruleNames:new Map},n),e}function Op(n,e){const t=tc(e,!1),r=Q(e.rules).filter(Ce).filter(i=>t.has(i));for(const i of r){const s=Object.assign(Object.assign({},n),{consume:1,optional:1,subrule:1,many:1,or:1});s.rules.set(i.name,n.parser.rule(i,pt(s,i.definition)))}}function pt(n,e,t=!1){let r;if(dt(e))r=Up(n,e);else if(sr(e))r=bp(n,e);else if(ut(e))r=pt(n,e.terminal);else if(ki(e))r=il(n,e);else if(ft(e))r=Pp(n,e);else if(bo(e))r=Dp(n,e);else if(qo(e))r=Fp(n,e);else if(Si(e))r=Gp(n,e);else if(Qu(e)){const i=n.consume++;r=()=>n.parser.consume(i,tt,e)}else throw new yo(e.$cstNode,`Unexpected element type: ${e.$type}`);return sl(n,t?void 0:Xn(e),r,e.cardinality)}function bp(n,e){const t=lr(e);return()=>n.parser.action(t,e)}function Pp(n,e){const t=e.rule.ref;if(Ce(t)){const r=n.subrule++,i=e.arguments.length>0?Mp(t,e.arguments):()=>({});return s=>n.parser.subrule(r,al(n,t),e,i(s))}else if(gt(t)){const r=n.consume++,i=li(n,t.name);return()=>n.parser.consume(r,i,e)}else if(t)ir();else throw new yo(e.$cstNode,`Undefined rule type: ${e.$type}`)}function Mp(n,e){const t=e.map(r=>He(r.value));return r=>{const i={};for(let s=0;se(r)||t(r)}else if(Fu(n)){const e=He(n.left),t=He(n.right);return r=>e(r)&&t(r)}else if(Bu(n)){const e=He(n.value);return t=>!e(t)}else if(ju(n)){const e=n.parameter.ref.name;return t=>t!==void 0&&t[e]===!0}else if(Du(n)){const e=!!n.true;return()=>e}ir()}function Dp(n,e){if(e.elements.length===1)return pt(n,e.elements[0]);{const t=[];for(const i of e.elements){const s={ALT:pt(n,i,!0)},a=Xn(i);a&&(s.GATE=He(a)),t.push(s)}const r=n.or++;return i=>n.parser.alternatives(r,t.map(s=>{const a={ALT:()=>s.ALT(i)},o=s.GATE;return o&&(a.GATE=()=>o(i)),a}))}}function Fp(n,e){if(e.elements.length===1)return pt(n,e.elements[0]);const t=[];for(const o of e.elements){const c={ALT:pt(n,o,!0)},l=Xn(o);l&&(c.GATE=He(l)),t.push(c)}const r=n.or++,i=(o,c)=>{const l=c.getRuleStack().join("-");return`uGroup_${o}_${l}`},s=o=>n.parser.alternatives(r,t.map((c,l)=>{const u={ALT:()=>!0},d=n.parser;u.ALT=()=>{if(c.ALT(o),!d.isRecording()){const h=i(r,d);d.unorderedGroups.get(h)||d.unorderedGroups.set(h,[]);const m=d.unorderedGroups.get(h);typeof(m==null?void 0:m[l])>"u"&&(m[l]=!0)}};const f=c.GATE;return f?u.GATE=()=>f(o):u.GATE=()=>{const h=d.unorderedGroups.get(i(r,d));return!(h!=null&&h[l])},u})),a=sl(n,Xn(e),s,"*");return o=>{a(o),n.parser.isRecording()||n.parser.unorderedGroups.delete(i(r,n.parser))}}function Gp(n,e){const t=e.elements.map(r=>pt(n,r));return r=>t.forEach(i=>i(r))}function Xn(n){if(Si(n))return n.guardCondition}function il(n,e,t=e.terminal){if(t)if(ft(t)&&Ce(t.rule.ref)){const r=n.subrule++;return i=>n.parser.subrule(r,al(n,t.rule.ref),e,i)}else if(ft(t)&>(t.rule.ref)){const r=n.consume++,i=li(n,t.rule.ref.name);return()=>n.parser.consume(r,i,e)}else if(dt(t)){const r=n.consume++,i=li(n,t.value);return()=>n.parser.consume(r,i,e)}else throw new Error("Could not build cross reference parser");else{if(!e.type.ref)throw new Error("Could not resolve reference to type: "+e.type.$refText);const r=ic(e.type.ref),i=r==null?void 0:r.terminal;if(!i)throw new Error("Could not find name assignment for type: "+lr(e.type.ref));return il(n,e,i)}}function Up(n,e){const t=n.consume++,r=n.tokens[e.value];if(!r)throw new Error("Could not find token for keyword: "+e.value);return()=>n.parser.consume(t,r,e)}function sl(n,e,t,r){const i=e&&He(e);if(!r)if(i){const s=n.or++;return a=>n.parser.alternatives(s,[{ALT:()=>t(a),GATE:()=>i(a)},{ALT:$s(),GATE:()=>!i(a)}])}else return t;if(r==="*"){const s=n.many++;return a=>n.parser.many(s,{DEF:()=>t(a),GATE:i?()=>i(a):void 0})}else if(r==="+"){const s=n.many++;if(i){const a=n.or++;return o=>n.parser.alternatives(a,[{ALT:()=>n.parser.atLeastOne(s,{DEF:()=>t(o)}),GATE:()=>i(o)},{ALT:$s(),GATE:()=>!i(o)}])}else return a=>n.parser.atLeastOne(s,{DEF:()=>t(a)})}else if(r==="?"){const s=n.optional++;return a=>n.parser.optional(s,{DEF:()=>t(a),GATE:i?()=>i(a):void 0})}else ir()}function al(n,e){const t=Bp(n,e),r=n.rules.get(t);if(!r)throw new Error(`Rule "${t}" not found."`);return r}function Bp(n,e){if(Ce(e))return e.name;if(n.ruleNames.has(e))return n.ruleNames.get(e);{let t=e,r=t.$container,i=e.$type;for(;!Ce(r);)(Si(r)||bo(r)||qo(r))&&(i=r.elements.indexOf(t).toString()+":"+i),t=r,r=r.$container;return i=r.name+":"+i,n.ruleNames.set(e,i),i}}function li(n,e){const t=n.tokens[e];if(!t)throw new Error(`Token "${e}" not found."`);return t}function Vp(n){const e=n.Grammar,t=n.parser.Lexer,r=new wp(n);return rl(e,r,t.definition),r.finalize(),r}function Wp(n){const e=jp(n);return e.finalize(),e}function jp(n){const e=n.Grammar,t=n.parser.Lexer,r=new Cp(n);return rl(e,r,t.definition)}class ol{buildTokens(e,t){const r=Q(tc(e,!1)),i=this.buildTerminalTokens(r),s=this.buildKeywordTokens(r,i,t);return i.forEach(a=>{const o=a.PATTERN;typeof o=="object"&&o&&"test"in o&&cs(o)?s.unshift(a):s.push(a)}),s}buildTerminalTokens(e){return e.filter(gt).filter(t=>!t.fragment).map(t=>this.buildTerminalToken(t)).toArray()}buildTerminalToken(e){const t=Ci(e),r=this.requiresCustomPattern(t)?this.regexPatternFunction(t):t,i={name:e.name,PATTERN:r,LINE_BREAKS:!0};return e.hidden&&(i.GROUP=cs(t)?de.SKIPPED:"hidden"),i}requiresCustomPattern(e){return e.flags.includes("u")?!0:!!(e.source.includes("?<=")||e.source.includes("?(t.lastIndex=i,t.exec(r))}buildKeywordTokens(e,t,r){return e.filter(Ce).flatMap(i=>pn(i).filter(dt)).distinct(i=>i.value).toArray().sort((i,s)=>s.value.length-i.value.length).map(i=>this.buildKeywordToken(i,t,!!(r!=null&&r.caseInsensitive)))}buildKeywordToken(e,t,r){return{name:e.value,PATTERN:this.buildKeywordPattern(e,r),LONGER_ALT:this.findLongerAlt(e,t)}}buildKeywordPattern(e,t){return t?new RegExp(gd(e.value)):e.value}findLongerAlt(e,t){return t.reduce((r,i)=>{const s=i==null?void 0:i.PATTERN;return s!=null&&s.source&&yd("^"+s.source+"$",e.value)&&r.push(i),r},[])}}class cl{convert(e,t){let r=t.grammarSource;if(ki(r)&&(r=vd(r)),ft(r)){const i=r.rule.ref;if(!i)throw new Error("This cst node was not parsed by a rule.");return this.runConverter(i,e,t)}return e}runConverter(e,t,r){var i;switch(e.name.toUpperCase()){case"INT":return je.convertInt(t);case"STRING":return je.convertString(t);case"ID":return je.convertID(t)}switch((i=Cd(e))===null||i===void 0?void 0:i.toLowerCase()){case"number":return je.convertNumber(t);case"boolean":return je.convertBoolean(t);case"bigint":return je.convertBigint(t);case"date":return je.convertDate(t);default:return t}}}var je;(function(n){function e(l){let u="";for(let d=1;dll(e))}se.stringArray=Yp;var jt={};Object.defineProperty(jt,"__esModule",{value:!0});jt.Emitter=jt.Event=void 0;const Xp=yr;var Fa;(function(n){const e={dispose(){}};n.None=function(){return e}})(Fa||(jt.Event=Fa={}));class Jp{add(e,t=null,r){this._callbacks||(this._callbacks=[],this._contexts=[]),this._callbacks.push(e),this._contexts.push(t),Array.isArray(r)&&r.push({dispose:()=>this.remove(e,t)})}remove(e,t=null){if(!this._callbacks)return;let r=!1;for(let i=0,s=this._callbacks.length;i{this._callbacks||(this._callbacks=new Jp),this._options&&this._options.onFirstListenerAdd&&this._callbacks.isEmpty()&&this._options.onFirstListenerAdd(this),this._callbacks.add(e,t);const i={dispose:()=>{this._callbacks&&(this._callbacks.remove(e,t),i.dispose=Tr._noop,this._options&&this._options.onLastListenerRemove&&this._callbacks.isEmpty()&&this._options.onLastListenerRemove(this))}};return Array.isArray(r)&&r.push(i),i}),this._event}fire(e){this._callbacks&&this._callbacks.invoke.call(this._callbacks,e)}dispose(){this._callbacks&&(this._callbacks.dispose(),this._callbacks=void 0)}}jt.Emitter=Tr;Tr._noop=function(){};var X;Object.defineProperty(dn,"__esModule",{value:!0});var fi=dn.CancellationTokenSource=X=dn.CancellationToken=void 0;const Qp=yr,Zp=se,hi=jt;var Jn;(function(n){n.None=Object.freeze({isCancellationRequested:!1,onCancellationRequested:hi.Event.None}),n.Cancelled=Object.freeze({isCancellationRequested:!0,onCancellationRequested:hi.Event.None});function e(t){const r=t;return r&&(r===n.None||r===n.Cancelled||Zp.boolean(r.isCancellationRequested)&&!!r.onCancellationRequested)}n.is=e})(Jn||(X=dn.CancellationToken=Jn={}));const em=Object.freeze(function(n,e){const t=(0,Qp.default)().timer.setTimeout(n.bind(e),0);return{dispose(){t.dispose()}}});class Ga{constructor(){this._isCancelled=!1}cancel(){this._isCancelled||(this._isCancelled=!0,this._emitter&&(this._emitter.fire(void 0),this.dispose()))}get isCancellationRequested(){return this._isCancelled}get onCancellationRequested(){return this._isCancelled?em:(this._emitter||(this._emitter=new hi.Emitter),this._emitter.event)}dispose(){this._emitter&&(this._emitter.dispose(),this._emitter=void 0)}}class tm{get token(){return this._token||(this._token=new Ga),this._token}cancel(){this._token?this._token.cancel():this._token=Jn.Cancelled}dispose(){this._token?this._token instanceof Ga&&this._token.dispose():this._token=Jn.None}}fi=dn.CancellationTokenSource=tm;function nm(){return new Promise(n=>{typeof setImmediate>"u"?setTimeout(n,0):setImmediate(n)})}let Ua=0,rm=10;const Qn=Symbol("OperationCancelled");function Vi(n){return n===Qn}async function Oe(n){if(n===X.None)return;const e=Date.now();if(e-Ua>=rm&&(Ua=e,await nm()),n.isCancellationRequested)throw Qn}class Wi{constructor(){this.promise=new Promise((e,t)=>{this.resolve=r=>(e(r),this),this.reject=r=>(t(r),this)})}}class fn{constructor(e,t,r,i){this._uri=e,this._languageId=t,this._version=r,this._content=i,this._lineOffsets=void 0}get uri(){return this._uri}get languageId(){return this._languageId}get version(){return this._version}getText(e){if(e){const t=this.offsetAt(e.start),r=this.offsetAt(e.end);return this._content.substring(t,r)}return this._content}update(e,t){for(const r of e)if(fn.isIncremental(r)){const i=fl(r.range),s=this.offsetAt(i.start),a=this.offsetAt(i.end);this._content=this._content.substring(0,s)+r.text+this._content.substring(a,this._content.length);const o=Math.max(i.start.line,0),c=Math.max(i.end.line,0);let l=this._lineOffsets;const u=Ba(r.text,!1,s);if(c-o===u.length)for(let f=0,h=u.length;fe?i=a:r=a+1}const s=r-1;return e=this.ensureBeforeEOL(e,t[s]),{line:s,character:e-t[s]}}offsetAt(e){const t=this.getLineOffsets();if(e.line>=t.length)return this._content.length;if(e.line<0)return 0;const r=t[e.line];if(e.character<=0)return r;const i=e.line+1t&&dl(this._content.charCodeAt(e-1));)e--;return e}get lineCount(){return this.getLineOffsets().length}static isIncremental(e){const t=e;return t!=null&&typeof t.text=="string"&&t.range!==void 0&&(t.rangeLength===void 0||typeof t.rangeLength=="number")}static isFull(e){const t=e;return t!=null&&typeof t.text=="string"&&t.range===void 0&&t.rangeLength===void 0}}var pi;(function(n){function e(i,s,a,o){return new fn(i,s,a,o)}n.create=e;function t(i,s,a){if(i instanceof fn)return i.update(s,a),i;throw new Error("TextDocument.update: document must be created by TextDocument.create")}n.update=t;function r(i,s){const a=i.getText(),o=mi(s.map(im),(u,d)=>{const f=u.range.start.line-d.range.start.line;return f===0?u.range.start.character-d.range.start.character:f});let c=0;const l=[];for(const u of o){const d=i.offsetAt(u.range.start);if(dc&&l.push(a.substring(c,d)),u.newText.length&&l.push(u.newText),c=i.offsetAt(u.range.end)}return l.push(a.substr(c)),l.join("")}n.applyEdits=r})(pi||(pi={}));function mi(n,e){if(n.length<=1)return n;const t=n.length/2|0,r=n.slice(0,t),i=n.slice(t);mi(r,e),mi(i,e);let s=0,a=0,o=0;for(;st.line||e.line===t.line&&e.character>t.character?{start:t,end:e}:n}function im(n){const e=fl(n.range);return e!==n.range?{newText:n.newText,range:e}:n}var hl;(()=>{var n={470:i=>{function s(c){if(typeof c!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(c))}function a(c,l){for(var u,d="",f=0,h=-1,m=0,g=0;g<=c.length;++g){if(g2){var A=d.lastIndexOf("/");if(A!==d.length-1){A===-1?(d="",f=0):f=(d=d.slice(0,A)).length-1-d.lastIndexOf("/"),h=g,m=0;continue}}else if(d.length===2||d.length===1){d="",f=0,h=g,m=0;continue}}l&&(d.length>0?d+="/..":d="..",f=2)}else d.length>0?d+="/"+c.slice(h+1,g):d=c.slice(h+1,g),f=g-h-1;h=g,m=0}else u===46&&m!==-1?++m:m=-1}return d}var o={resolve:function(){for(var c,l="",u=!1,d=arguments.length-1;d>=-1&&!u;d--){var f;d>=0?f=arguments[d]:(c===void 0&&(c=process.cwd()),f=c),s(f),f.length!==0&&(l=f+"/"+l,u=f.charCodeAt(0)===47)}return l=a(l,!u),u?l.length>0?"/"+l:"/":l.length>0?l:"."},normalize:function(c){if(s(c),c.length===0)return".";var l=c.charCodeAt(0)===47,u=c.charCodeAt(c.length-1)===47;return(c=a(c,!l)).length!==0||l||(c="."),c.length>0&&u&&(c+="/"),l?"/"+c:c},isAbsolute:function(c){return s(c),c.length>0&&c.charCodeAt(0)===47},join:function(){if(arguments.length===0)return".";for(var c,l=0;l0&&(c===void 0?c=u:c+="/"+u)}return c===void 0?".":o.normalize(c)},relative:function(c,l){if(s(c),s(l),c===l||(c=o.resolve(c))===(l=o.resolve(l)))return"";for(var u=1;ug){if(l.charCodeAt(h+y)===47)return l.slice(h+y+1);if(y===0)return l.slice(h+y)}else f>g&&(c.charCodeAt(u+y)===47?A=y:y===0&&(A=0));break}var v=c.charCodeAt(u+y);if(v!==l.charCodeAt(h+y))break;v===47&&(A=y)}var R="";for(y=u+A+1;y<=d;++y)y!==d&&c.charCodeAt(y)!==47||(R.length===0?R+="..":R+="/..");return R.length>0?R+l.slice(h+A):(h+=A,l.charCodeAt(h)===47&&++h,l.slice(h))},_makeLong:function(c){return c},dirname:function(c){if(s(c),c.length===0)return".";for(var l=c.charCodeAt(0),u=l===47,d=-1,f=!0,h=c.length-1;h>=1;--h)if((l=c.charCodeAt(h))===47){if(!f){d=h;break}}else f=!1;return d===-1?u?"/":".":u&&d===1?"//":c.slice(0,d)},basename:function(c,l){if(l!==void 0&&typeof l!="string")throw new TypeError('"ext" argument must be a string');s(c);var u,d=0,f=-1,h=!0;if(l!==void 0&&l.length>0&&l.length<=c.length){if(l.length===c.length&&l===c)return"";var m=l.length-1,g=-1;for(u=c.length-1;u>=0;--u){var A=c.charCodeAt(u);if(A===47){if(!h){d=u+1;break}}else g===-1&&(h=!1,g=u+1),m>=0&&(A===l.charCodeAt(m)?--m==-1&&(f=u):(m=-1,f=g))}return d===f?f=g:f===-1&&(f=c.length),c.slice(d,f)}for(u=c.length-1;u>=0;--u)if(c.charCodeAt(u)===47){if(!h){d=u+1;break}}else f===-1&&(h=!1,f=u+1);return f===-1?"":c.slice(d,f)},extname:function(c){s(c);for(var l=-1,u=0,d=-1,f=!0,h=0,m=c.length-1;m>=0;--m){var g=c.charCodeAt(m);if(g!==47)d===-1&&(f=!1,d=m+1),g===46?l===-1?l=m:h!==1&&(h=1):l!==-1&&(h=-1);else if(!f){u=m+1;break}}return l===-1||d===-1||h===0||h===1&&l===d-1&&l===u+1?"":c.slice(l,d)},format:function(c){if(c===null||typeof c!="object")throw new TypeError('The "pathObject" argument must be of type Object. Received type '+typeof c);return function(l,u){var d=u.dir||u.root,f=u.base||(u.name||"")+(u.ext||"");return d?d===u.root?d+f:d+"/"+f:f}(0,c)},parse:function(c){s(c);var l={root:"",dir:"",base:"",ext:"",name:""};if(c.length===0)return l;var u,d=c.charCodeAt(0),f=d===47;f?(l.root="/",u=1):u=0;for(var h=-1,m=0,g=-1,A=!0,y=c.length-1,v=0;y>=u;--y)if((d=c.charCodeAt(y))!==47)g===-1&&(A=!1,g=y+1),d===46?h===-1?h=y:v!==1&&(v=1):h!==-1&&(v=-1);else if(!A){m=y+1;break}return h===-1||g===-1||v===0||v===1&&h===g-1&&h===m+1?g!==-1&&(l.base=l.name=m===0&&f?c.slice(1,g):c.slice(m,g)):(m===0&&f?(l.name=c.slice(1,h),l.base=c.slice(1,g)):(l.name=c.slice(m,h),l.base=c.slice(m,g)),l.ext=c.slice(h,g)),m>0?l.dir=c.slice(0,m-1):f&&(l.dir="/"),l},sep:"/",delimiter:":",win32:null,posix:null};o.posix=o,i.exports=o}},e={};function t(i){var s=e[i];if(s!==void 0)return s.exports;var a=e[i]={exports:{}};return n[i](a,a.exports,t),a.exports}t.d=(i,s)=>{for(var a in s)t.o(s,a)&&!t.o(i,a)&&Object.defineProperty(i,a,{enumerable:!0,get:s[a]})},t.o=(i,s)=>Object.prototype.hasOwnProperty.call(i,s),t.r=i=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(i,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(i,"__esModule",{value:!0})};var r={};(()=>{let i;t.r(r),t.d(r,{URI:()=>f,Utils:()=>Se}),typeof process=="object"?i=process.platform==="win32":typeof navigator=="object"&&(i=navigator.userAgent.indexOf("Windows")>=0);const s=/^\w[\w\d+.-]*$/,a=/^\//,o=/^\/\//;function c(k,T){if(!k.scheme&&T)throw new Error(`[UriError]: Scheme is missing: {scheme: "", authority: "${k.authority}", path: "${k.path}", query: "${k.query}", fragment: "${k.fragment}"}`);if(k.scheme&&!s.test(k.scheme))throw new Error("[UriError]: Scheme contains illegal characters.");if(k.path){if(k.authority){if(!a.test(k.path))throw new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash ("/") character')}else if(o.test(k.path))throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters ("//")')}}const l="",u="/",d=/^(([^:/?#]+?):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/;class f{constructor(T,E,I,O,$,L=!1){Je(this,"scheme");Je(this,"authority");Je(this,"path");Je(this,"query");Je(this,"fragment");typeof T=="object"?(this.scheme=T.scheme||l,this.authority=T.authority||l,this.path=T.path||l,this.query=T.query||l,this.fragment=T.fragment||l):(this.scheme=function(ye,z){return ye||z?ye:"file"}(T,L),this.authority=E||l,this.path=function(ye,z){switch(ye){case"https":case"http":case"file":z?z[0]!==u&&(z=u+z):z=u}return z}(this.scheme,I||l),this.query=O||l,this.fragment=$||l,c(this,L))}static isUri(T){return T instanceof f||!!T&&typeof T.authority=="string"&&typeof T.fragment=="string"&&typeof T.path=="string"&&typeof T.query=="string"&&typeof T.scheme=="string"&&typeof T.fsPath=="string"&&typeof T.with=="function"&&typeof T.toString=="function"}get fsPath(){return v(this)}with(T){if(!T)return this;let{scheme:E,authority:I,path:O,query:$,fragment:L}=T;return E===void 0?E=this.scheme:E===null&&(E=l),I===void 0?I=this.authority:I===null&&(I=l),O===void 0?O=this.path:O===null&&(O=l),$===void 0?$=this.query:$===null&&($=l),L===void 0?L=this.fragment:L===null&&(L=l),E===this.scheme&&I===this.authority&&O===this.path&&$===this.query&&L===this.fragment?this:new m(E,I,O,$,L)}static parse(T,E=!1){const I=d.exec(T);return I?new m(I[2]||l,ne(I[4]||l),ne(I[5]||l),ne(I[7]||l),ne(I[9]||l),E):new m(l,l,l,l,l)}static file(T){let E=l;if(i&&(T=T.replace(/\\/g,u)),T[0]===u&&T[1]===u){const I=T.indexOf(u,2);I===-1?(E=T.substring(2),T=u):(E=T.substring(2,I),T=T.substring(I)||u)}return new m("file",E,T,l,l)}static from(T){const E=new m(T.scheme,T.authority,T.path,T.query,T.fragment);return c(E,!0),E}toString(T=!1){return R(this,T)}toJSON(){return this}static revive(T){if(T){if(T instanceof f)return T;{const E=new m(T);return E._formatted=T.external,E._fsPath=T._sep===h?T.fsPath:null,E}}return T}}const h=i?1:void 0;class m extends f{constructor(){super(...arguments);Je(this,"_formatted",null);Je(this,"_fsPath",null)}get fsPath(){return this._fsPath||(this._fsPath=v(this)),this._fsPath}toString(E=!1){return E?R(this,!0):(this._formatted||(this._formatted=R(this,!1)),this._formatted)}toJSON(){const E={$mid:1};return this._fsPath&&(E.fsPath=this._fsPath,E._sep=h),this._formatted&&(E.external=this._formatted),this.path&&(E.path=this.path),this.scheme&&(E.scheme=this.scheme),this.authority&&(E.authority=this.authority),this.query&&(E.query=this.query),this.fragment&&(E.fragment=this.fragment),E}}const g={58:"%3A",47:"%2F",63:"%3F",35:"%23",91:"%5B",93:"%5D",64:"%40",33:"%21",36:"%24",38:"%26",39:"%27",40:"%28",41:"%29",42:"%2A",43:"%2B",44:"%2C",59:"%3B",61:"%3D",32:"%20"};function A(k,T,E){let I,O=-1;for(let $=0;$=97&&L<=122||L>=65&&L<=90||L>=48&&L<=57||L===45||L===46||L===95||L===126||T&&L===47||E&&L===91||E&&L===93||E&&L===58)O!==-1&&(I+=encodeURIComponent(k.substring(O,$)),O=-1),I!==void 0&&(I+=k.charAt($));else{I===void 0&&(I=k.substr(0,$));const ye=g[L];ye!==void 0?(O!==-1&&(I+=encodeURIComponent(k.substring(O,$)),O=-1),I+=ye):O===-1&&(O=$)}}return O!==-1&&(I+=encodeURIComponent(k.substring(O))),I!==void 0?I:k}function y(k){let T;for(let E=0;E1&&k.scheme==="file"?`//${k.authority}${k.path}`:k.path.charCodeAt(0)===47&&(k.path.charCodeAt(1)>=65&&k.path.charCodeAt(1)<=90||k.path.charCodeAt(1)>=97&&k.path.charCodeAt(1)<=122)&&k.path.charCodeAt(2)===58?k.path[1].toLowerCase()+k.path.substr(2):k.path,i&&(E=E.replace(/\//g,"\\")),E}function R(k,T){const E=T?y:A;let I="",{scheme:O,authority:$,path:L,query:ye,fragment:z}=k;if(O&&(I+=O,I+=":"),($||O==="file")&&(I+=u,I+=u),$){let V=$.indexOf("@");if(V!==-1){const at=$.substr(0,V);$=$.substr(V+1),V=at.lastIndexOf(":"),V===-1?I+=E(at,!1,!1):(I+=E(at.substr(0,V),!1,!1),I+=":",I+=E(at.substr(V+1),!1,!0)),I+="@"}$=$.toLowerCase(),V=$.lastIndexOf(":"),V===-1?I+=E($,!1,!0):(I+=E($.substr(0,V),!1,!0),I+=$.substr(V))}if(L){if(L.length>=3&&L.charCodeAt(0)===47&&L.charCodeAt(2)===58){const V=L.charCodeAt(1);V>=65&&V<=90&&(L=`/${String.fromCharCode(V+32)}:${L.substr(3)}`)}else if(L.length>=2&&L.charCodeAt(1)===58){const V=L.charCodeAt(0);V>=65&&V<=90&&(L=`${String.fromCharCode(V+32)}:${L.substr(2)}`)}I+=E(L,!0,!1)}return ye&&(I+="?",I+=E(ye,!1,!1)),z&&(I+="#",I+=T?z:A(z,!1,!1)),I}function N(k){try{return decodeURIComponent(k)}catch{return k.length>3?k.substr(0,3)+N(k.substr(3)):k}}const F=/(%[0-9A-Za-z][0-9A-Za-z])+/g;function ne(k){return k.match(F)?k.replace(F,T=>N(T)):k}var we=t(470);const ge=we.posix||we,De="/";var Se;(function(k){k.joinPath=function(T,...E){return T.with({path:ge.join(T.path,...E)})},k.resolvePath=function(T,...E){let I=T.path,O=!1;I[0]!==De&&(I=De+I,O=!0);let $=ge.resolve(I,...E);return O&&$[0]===De&&!T.authority&&($=$.substring(1)),T.with({path:$})},k.dirname=function(T){if(T.path.length===0||T.path===De)return T;let E=ge.dirname(T.path);return E.length===1&&E.charCodeAt(0)===46&&(E=""),T.with({path:E})},k.basename=function(T){return ge.basename(T.path)},k.extname=function(T){return ge.extname(T.path)}})(Se||(Se={}))})(),hl=r})();const{URI:Ht,Utils:sn}=hl;var rt;(function(n){n.basename=sn.basename,n.dirname=sn.dirname,n.extname=sn.extname,n.joinPath=sn.joinPath,n.resolvePath=sn.resolvePath;function e(r,i){return(r==null?void 0:r.toString())===(i==null?void 0:i.toString())}n.equals=e;function t(r,i){const s=typeof r=="string"?r:r.path,a=typeof i=="string"?i:i.path,o=s.split("/").filter(f=>f.length>0),c=a.split("/").filter(f=>f.length>0);let l=0;for(;li??(i=pi.create(e.toString(),r.getServices(e).LanguageMetaData.languageId,0,t??""))}}class am{constructor(e){this.documentMap=new Map,this.langiumDocumentFactory=e.workspace.LangiumDocumentFactory}get all(){return Q(this.documentMap.values())}addDocument(e){const t=e.uri.toString();if(this.documentMap.has(t))throw new Error(`A document with the URI '${t}' is already present.`);this.documentMap.set(t,e)}getDocument(e){const t=e.toString();return this.documentMap.get(t)}async getOrCreateDocument(e,t){let r=this.getDocument(e);return r||(r=await this.langiumDocumentFactory.fromUri(e,t),this.addDocument(r),r)}createDocument(e,t,r){if(r)return this.langiumDocumentFactory.fromString(t,e,r).then(i=>(this.addDocument(i),i));{const i=this.langiumDocumentFactory.fromString(t,e);return this.addDocument(i),i}}hasDocument(e){return this.documentMap.has(e.toString())}invalidateDocument(e){const t=e.toString(),r=this.documentMap.get(t);return r&&(r.state=U.Changed,r.precomputedScopes=void 0,r.references=[],r.diagnostics=void 0),r}deleteDocument(e){const t=e.toString(),r=this.documentMap.get(t);return r&&(r.state=U.Changed,this.documentMap.delete(t)),r}}class om{constructor(e){this.reflection=e.shared.AstReflection,this.langiumDocuments=()=>e.shared.workspace.LangiumDocuments,this.scopeProvider=e.references.ScopeProvider,this.astNodeLocator=e.workspace.AstNodeLocator}async link(e,t=X.None){for(const r of vt(e.parseResult.value))await Oe(t),Qo(r).forEach(i=>this.doLink(i,e))}doLink(e,t){const r=e.reference;if(r._ref===void 0)try{const i=this.getCandidate(e);if(xn(i))r._ref=i;else if(r._nodeDescription=i,this.langiumDocuments().hasDocument(i.documentUri)){const s=this.loadAstNode(i);r._ref=s??this.createLinkingError(e,i)}}catch(i){r._ref=Object.assign(Object.assign({},e),{message:`An error occurred while resolving reference to '${r.$refText}': ${i}`})}t.references.push(r)}unlink(e){for(const t of e.references)delete t._ref,delete t._nodeDescription;e.references=[]}getCandidate(e){const r=this.scopeProvider.getScope(e).getElement(e.reference.$refText);return r??this.createLinkingError(e)}buildReference(e,t,r,i){const s=this,a={$refNode:r,$refText:i,get ref(){var o;if(ae(this._ref))return this._ref;if(Su(this._nodeDescription)){const c=s.loadAstNode(this._nodeDescription);this._ref=c??s.createLinkingError({reference:a,container:e,property:t},this._nodeDescription)}else if(this._ref===void 0){const c=s.getLinkedNode({reference:a,container:e,property:t});if(c.error&&Ue(e).state=e.end)return s.ref}}if(r){const i=this.nameProvider.getNameNode(r);if(i&&(i===e||Nu(e,i)))return r}}}findDeclarationNode(e){const t=this.findDeclaration(e);if(t!=null&&t.$cstNode){const r=this.nameProvider.getNameNode(t);return r??t.$cstNode}}findReferences(e,t){const r=[];if(t.includeDeclaration){const s=this.getReferenceToSelf(e);s&&r.push(s)}let i=this.index.findAllReferences(e,this.nodeLocator.getAstNodePath(e));return t.documentUri&&(i=i.filter(s=>rt.equals(s.sourceUri,t.documentUri))),r.push(...i),Q(r)}getReferenceToSelf(e){const t=this.nameProvider.getNameNode(e);if(t){const r=Ue(e),i=this.nodeLocator.getAstNodePath(e);return{sourceUri:r.uri,sourcePath:i,targetUri:r.uri,targetPath:i,segment:On(t),local:!0}}}}class ji{constructor(e){if(this.map=new Map,e)for(const[t,r]of e)this.add(t,r)}get size(){return br.sum(Q(this.map.values()).map(e=>e.length))}clear(){this.map.clear()}delete(e,t){if(t===void 0)return this.map.delete(e);{const r=this.map.get(e);if(r){const i=r.indexOf(t);if(i>=0)return r.length===1?this.map.delete(e):r.splice(i,1),!0}return!1}}get(e){var t;return(t=this.map.get(e))!==null&&t!==void 0?t:[]}has(e,t){if(t===void 0)return this.map.has(e);{const r=this.map.get(e);return r?r.indexOf(t)>=0:!1}}add(e,t){return this.map.has(e)?this.map.get(e).push(t):this.map.set(e,[t]),this}addAll(e,t){return this.map.has(e)?this.map.get(e).push(...t):this.map.set(e,Array.from(t)),this}forEach(e){this.map.forEach((t,r)=>t.forEach(i=>e(i,r,this)))}[Symbol.iterator](){return this.entries().iterator()}entries(){return Q(this.map.entries()).flatMap(([e,t])=>t.map(r=>[e,r]))}keys(){return Q(this.map.keys())}values(){return Q(this.map.values()).flat()}entriesGroupedByKey(){return Q(this.map.entries())}}class Va{get size(){return this.map.size}constructor(e){if(this.map=new Map,this.inverse=new Map,e)for(const[t,r]of e)this.set(t,r)}clear(){this.map.clear(),this.inverse.clear()}set(e,t){return this.map.set(e,t),this.inverse.set(t,e),this}get(e){return this.map.get(e)}getKey(e){return this.inverse.get(e)}delete(e){const t=this.map.get(e);return t!==void 0?(this.map.delete(e),this.inverse.delete(t),!0):!1}}class dm{constructor(e){this.nameProvider=e.references.NameProvider,this.descriptions=e.workspace.AstNodeDescriptionProvider}async computeExports(e,t=X.None){return this.computeExportsForNode(e.parseResult.value,e,void 0,t)}async computeExportsForNode(e,t,r=Ii,i=X.None){const s=[];this.exportNode(e,s,t);for(const a of r(e))await Oe(i),this.exportNode(a,s,t);return s}exportNode(e,t,r){const i=this.nameProvider.getName(e);i&&t.push(this.descriptions.createDescription(e,i,r))}async computeLocalScopes(e,t=X.None){const r=e.parseResult.value,i=new ji;for(const s of pn(r))await Oe(t),this.processNode(s,e,i);return i}processNode(e,t,r){const i=e.$container;if(i){const s=this.nameProvider.getName(e);s&&r.add(i,this.descriptions.createDescription(e,s,t))}}}class Wa{constructor(e,t,r){var i;this.elements=e,this.outerScope=t,this.caseInsensitive=(i=r==null?void 0:r.caseInsensitive)!==null&&i!==void 0?i:!1}getAllElements(){return this.outerScope?this.elements.concat(this.outerScope.getAllElements()):this.elements}getElement(e){const t=this.caseInsensitive?this.elements.find(r=>r.name.toLowerCase()===e.toLowerCase()):this.elements.find(r=>r.name===e);if(t)return t;if(this.outerScope)return this.outerScope.getElement(e)}}class fm{constructor(e,t,r){var i;this.elements=new Map,this.caseInsensitive=(i=r==null?void 0:r.caseInsensitive)!==null&&i!==void 0?i:!1;for(const s of e){const a=this.caseInsensitive?s.name.toLowerCase():s.name;this.elements.set(a,s)}this.outerScope=t}getElement(e){const t=this.caseInsensitive?e.toLowerCase():e,r=this.elements.get(t);if(r)return r;if(this.outerScope)return this.outerScope.getElement(e)}getAllElements(){let e=Q(this.elements.values());return this.outerScope&&(e=e.concat(this.outerScope.getAllElements())),e}}class pl{constructor(){this.toDispose=[],this.isDisposed=!1}onDispose(e){this.toDispose.push(e)}dispose(){this.throwIfDisposed(),this.clear(),this.isDisposed=!0,this.toDispose.forEach(e=>e.dispose())}throwIfDisposed(){if(this.isDisposed)throw new Error("This cache has already been disposed")}}class hm extends pl{constructor(){super(...arguments),this.cache=new Map}has(e){return this.throwIfDisposed(),this.cache.has(e)}set(e,t){this.throwIfDisposed(),this.cache.set(e,t)}get(e,t){if(this.throwIfDisposed(),this.cache.has(e))return this.cache.get(e);if(t){const r=t();return this.cache.set(e,r),r}else return}delete(e){return this.throwIfDisposed(),this.cache.delete(e)}clear(){this.throwIfDisposed(),this.cache.clear()}}class pm extends pl{constructor(e){super(),this.cache=new Map,this.converter=e??(t=>t)}has(e,t){return this.throwIfDisposed(),this.cacheForContext(e).has(t)}set(e,t,r){this.throwIfDisposed(),this.cacheForContext(e).set(t,r)}get(e,t,r){this.throwIfDisposed();const i=this.cacheForContext(e);if(i.has(t))return i.get(t);if(r){const s=r();return i.set(t,s),s}else return}delete(e,t){return this.throwIfDisposed(),this.cacheForContext(e).delete(t)}clear(e){if(this.throwIfDisposed(),e){const t=this.converter(e);this.cache.delete(t)}else this.cache.clear()}cacheForContext(e){const t=this.converter(e);let r=this.cache.get(t);return r||(r=new Map,this.cache.set(t,r)),r}}class mm extends hm{constructor(e){super(),this.onDispose(e.workspace.DocumentBuilder.onUpdate(()=>{this.clear()}))}}class gm{constructor(e){this.reflection=e.shared.AstReflection,this.nameProvider=e.references.NameProvider,this.descriptions=e.workspace.AstNodeDescriptionProvider,this.indexManager=e.shared.workspace.IndexManager,this.globalScopeCache=new mm(e.shared)}getScope(e){const t=[],r=this.reflection.getReferenceType(e),i=Ue(e.container).precomputedScopes;if(i){let a=e.container;do{const o=i.get(a);o.length>0&&t.push(Q(o).filter(c=>this.reflection.isSubtype(c.type,r))),a=a.$container}while(a)}let s=this.getGlobalScope(r,e);for(let a=t.length-1;a>=0;a--)s=this.createScope(t[a],s);return s}createScope(e,t,r){return new Wa(Q(e),t,r)}createScopeForNodes(e,t,r){const i=Q(e).map(s=>{const a=this.nameProvider.getName(s);if(a)return this.descriptions.createDescription(s,a)}).nonNullable();return new Wa(i,t,r)}getGlobalScope(e,t){return this.globalScopeCache.get(e,()=>new fm(this.indexManager.allElements(e)))}}function ym(n){return typeof n.$comment=="string"}function ja(n){return typeof n=="object"&&!!n&&("$ref"in n||"$error"in n)}class Tm{constructor(e){this.ignoreProperties=new Set(["$container","$containerProperty","$containerIndex","$document","$cstNode"]),this.langiumDocuments=e.shared.workspace.LangiumDocuments,this.astNodeLocator=e.workspace.AstNodeLocator,this.nameProvider=e.references.NameProvider,this.commentProvider=e.documentation.CommentProvider}serialize(e,t={}){const r=t==null?void 0:t.replacer,i=(a,o)=>this.replacer(a,o,t),s=r?(a,o)=>r(a,o,i):i;try{return this.currentDocument=Ue(e),JSON.stringify(e,s,t==null?void 0:t.space)}finally{this.currentDocument=void 0}}deserialize(e,t={}){const r=JSON.parse(e);return this.linkNode(r,r,t),r}replacer(e,t,{refText:r,sourceText:i,textRegions:s,comments:a,uriConverter:o}){var c,l,u,d;if(!this.ignoreProperties.has(e))if(Ge(t)){const f=t.ref,h=r?t.$refText:void 0;if(f){const m=Ue(f);let g="";this.currentDocument&&this.currentDocument!==m&&(o?g=o(m.uri,t):g=m.uri.toString());const A=this.astNodeLocator.getAstNodePath(f);return{$ref:`${g}#${A}`,$refText:h}}else return{$error:(l=(c=t.error)===null||c===void 0?void 0:c.message)!==null&&l!==void 0?l:"Could not resolve reference",$refText:h}}else if(ae(t)){let f;if(s&&(f=this.addAstNodeRegionWithAssignmentsTo(Object.assign({},t)),(!e||t.$document)&&(f!=null&&f.$textRegion)&&(f.$textRegion.documentURI=(u=this.currentDocument)===null||u===void 0?void 0:u.uri.toString())),i&&!e&&(f??(f=Object.assign({},t)),f.$sourceText=(d=t.$cstNode)===null||d===void 0?void 0:d.text),a){f??(f=Object.assign({},t));const h=this.commentProvider.getComment(t);h&&(f.$comment=h.replace(/\r/g,""))}return f??t}else return t}addAstNodeRegionWithAssignmentsTo(e){const t=r=>({offset:r.offset,end:r.end,length:r.length,range:r.range});if(e.$cstNode){const r=e.$textRegion=t(e.$cstNode),i=r.assignments={};return Object.keys(e).filter(s=>!s.startsWith("$")).forEach(s=>{const a=kd(e.$cstNode,s).map(t);a.length!==0&&(i[s]=a)}),e}}linkNode(e,t,r,i,s,a){for(const[c,l]of Object.entries(e))if(Array.isArray(l))for(let u=0;u{try{await e.call(t,r,i,s)}catch(a){if(Vi(a))throw a;console.error("An error occurred during validation:",a);const o=a instanceof Error?a.message:String(a);a instanceof Error&&a.stack&&console.error(a.stack),i("error","An error occurred during validation: "+o,{node:r})}}}addEntry(e,t){if(e==="AstNode"){this.entries.add("AstNode",t);return}for(const r of this.reflection.getAllSubTypes(e))this.entries.add(r,t)}getChecks(e,t){let r=Q(this.entries.get(e)).concat(this.entries.get("AstNode"));return t&&(r=r.filter(i=>t.includes(i.category))),r.map(i=>i.check)}}class vm{constructor(e){this.validationRegistry=e.validation.ValidationRegistry,this.metadata=e.LanguageMetaData}async validateDocument(e,t={},r=X.None){const i=e.parseResult,s=[];if(await Oe(r),(!t.categories||t.categories.includes("built-in"))&&(this.processLexingErrors(i,s,t),t.stopAfterLexingErrors&&s.some(a=>{var o;return((o=a.data)===null||o===void 0?void 0:o.code)===Qe.LexingError})||(this.processParsingErrors(i,s,t),t.stopAfterParsingErrors&&s.some(a=>{var o;return((o=a.data)===null||o===void 0?void 0:o.code)===Qe.ParsingError}))||(this.processLinkingErrors(e,s,t),t.stopAfterLinkingErrors&&s.some(a=>{var o;return((o=a.data)===null||o===void 0?void 0:o.code)===Qe.LinkingError}))))return s;try{s.push(...await this.validateAst(i.value,t,r))}catch(a){if(Vi(a))throw a;console.error("An error occurred during validation:",a)}return await Oe(r),s}processLexingErrors(e,t,r){for(const i of e.lexerErrors){const s={severity:Lr("error"),range:{start:{line:i.line-1,character:i.column-1},end:{line:i.line-1,character:i.column+i.length-1}},message:i.message,data:Ha(Qe.LexingError),source:this.getSource()};t.push(s)}}processParsingErrors(e,t,r){for(const i of e.parserErrors){let s;if(isNaN(i.token.startOffset)){if("previousToken"in i){const a=i.previousToken;if(isNaN(a.startOffset)){const o={line:0,character:0};s={start:o,end:o}}else{const o={line:a.endLine-1,character:a.endColumn};s={start:o,end:o}}}}else s=Mr(i.token);if(s){const a={severity:Lr("error"),range:s,message:i.message,data:Ha(Qe.ParsingError),source:this.getSource()};t.push(a)}}}processLinkingErrors(e,t,r){for(const i of e.references){const s=i.error;if(s){const a={node:s.container,property:s.property,index:s.index,data:{code:Qe.LinkingError,containerType:s.container.$type,property:s.property,refText:s.reference.$refText}};t.push(this.toDiagnostic("error",s.message,a))}}}async validateAst(e,t,r=X.None){const i=[],s=(a,o,c)=>{i.push(this.toDiagnostic(a,o,c))};return await Promise.all(vt(e).map(async a=>{await Oe(r);const o=this.validationRegistry.getChecks(a.$type,t.categories);for(const c of o)await c(a,s,r)})),i}toDiagnostic(e,t,r){return{message:t,range:Em(r),severity:Lr(e),code:r.code,codeDescription:r.codeDescription,tags:r.tags,relatedInformation:r.relatedInformation,data:r.data,source:this.getSource()}}getSource(){return this.metadata.languageId}}function Em(n){if(n.range)return n.range;let e;return typeof n.property=="string"?e=rc(n.node.$cstNode,n.property,n.index):typeof n.keyword=="string"&&(e=Sd(n.node.$cstNode,n.keyword,n.index)),e??(e=n.node.$cstNode),e?e.range:{start:{line:0,character:0},end:{line:0,character:0}}}function Lr(n){switch(n){case"error":return 1;case"warning":return 2;case"info":return 3;case"hint":return 4;default:throw new Error("Invalid diagnostic severity: "+n)}}var Qe;(function(n){n.LexingError="lexing-error",n.ParsingError="parsing-error",n.LinkingError="linking-error"})(Qe||(Qe={}));class km{constructor(e){this.astNodeLocator=e.workspace.AstNodeLocator,this.nameProvider=e.references.NameProvider}createDescription(e,t,r=Ue(e)){t??(t=this.nameProvider.getName(e));const i=this.astNodeLocator.getAstNodePath(e);if(!t)throw new Error(`Node at path ${i} has no name.`);let s;const a=()=>{var o;return s??(s=On((o=this.nameProvider.getNameNode(e))!==null&&o!==void 0?o:e.$cstNode))};return{node:e,name:t,get nameSegment(){return a()},selectionSegment:On(e.$cstNode),type:e.$type,documentUri:r.uri,path:i}}}class Sm{constructor(e){this.nodeLocator=e.workspace.AstNodeLocator}async createDescriptions(e,t=X.None){const r=[],i=e.parseResult.value;for(const s of vt(i))await Oe(t),Qo(s).filter(a=>!xn(a)).forEach(a=>{const o=this.createDescription(a);o&&r.push(o)});return r}createDescription(e){const t=e.reference.$nodeDescription,r=e.reference.$refNode;if(!t||!r)return;const i=Ue(e.container).uri;return{sourceUri:i,sourcePath:this.nodeLocator.getAstNodePath(e.container),targetUri:t.documentUri,targetPath:t.path,segment:On(r),local:rt.equals(t.documentUri,i)}}}class Im{constructor(){this.segmentSeparator="/",this.indexSeparator="@"}getAstNodePath(e){if(e.$container){const t=this.getAstNodePath(e.$container),r=this.getPathSegment(e);return t+this.segmentSeparator+r}return""}getPathSegment({$containerProperty:e,$containerIndex:t}){if(!e)throw new Error("Missing '$containerProperty' in AST node.");return t!==void 0?e+this.indexSeparator+t:e}getAstNode(e,t){return t.split(this.segmentSeparator).reduce((i,s)=>{if(!i||s.length===0)return i;const a=s.indexOf(this.indexSeparator);if(a>0){const o=s.substring(0,a),c=parseInt(s.substring(a+1)),l=i[o];return l==null?void 0:l[c]}return i[s]},e)}}class xm{constructor(e){this._ready=new Wi,this.settings={},this.workspaceConfig=!1,this.serviceRegistry=e.ServiceRegistry}get ready(){return this._ready.promise}initialize(e){var t,r;this.workspaceConfig=(r=(t=e.capabilities.workspace)===null||t===void 0?void 0:t.configuration)!==null&&r!==void 0?r:!1}async initialized(e){if(this.workspaceConfig){if(e.register){const t=this.serviceRegistry.all;e.register({section:t.map(r=>this.toSectionName(r.LanguageMetaData.languageId))})}if(e.fetchConfiguration){const t=this.serviceRegistry.all.map(i=>({section:this.toSectionName(i.LanguageMetaData.languageId)})),r=await e.fetchConfiguration(t);t.forEach((i,s)=>{this.updateSectionConfiguration(i.section,r[s])})}}this._ready.resolve()}updateConfiguration(e){e.settings&&Object.keys(e.settings).forEach(t=>{this.updateSectionConfiguration(t,e.settings[t])})}updateSectionConfiguration(e,t){this.settings[e]=t}async getConfiguration(e,t){await this.ready;const r=this.toSectionName(e);if(this.settings[r])return this.settings[r][t]}toSectionName(e){return`${e}`}}var er;(function(n){function e(t){return{dispose:async()=>await t()}}n.create=e})(er||(er={}));class Nm{constructor(e){this.updateBuildOptions={validation:{categories:["built-in","fast"]}},this.updateListeners=[],this.buildPhaseListeners=new ji,this.buildState=new Map,this.documentBuildWaiters=new Map,this.currentState=U.Changed,this.langiumDocuments=e.workspace.LangiumDocuments,this.langiumDocumentFactory=e.workspace.LangiumDocumentFactory,this.indexManager=e.workspace.IndexManager,this.serviceRegistry=e.ServiceRegistry}async build(e,t={},r=X.None){var i,s;for(const a of e){const o=a.uri.toString();if(a.state===U.Validated){if(typeof t.validation=="boolean"&&t.validation)a.state=U.IndexedReferences,a.diagnostics=void 0,this.buildState.delete(o);else if(typeof t.validation=="object"){const c=this.buildState.get(o),l=(i=c==null?void 0:c.result)===null||i===void 0?void 0:i.validationChecks;if(l){const d=((s=t.validation.categories)!==null&&s!==void 0?s:Zn.all).filter(f=>!l.includes(f));d.length>0&&(this.buildState.set(o,{completed:!1,options:{validation:Object.assign(Object.assign({},t.validation),{categories:d})},result:c.result}),a.state=U.IndexedReferences)}}}else this.buildState.delete(o)}this.currentState=U.Changed,await this.emitUpdate(e.map(a=>a.uri),[]),await this.buildDocuments(e,t,r)}async update(e,t,r=X.None){this.currentState=U.Changed;for(const a of t)this.langiumDocuments.deleteDocument(a),this.buildState.delete(a.toString()),this.indexManager.remove(a);for(const a of e){if(!this.langiumDocuments.invalidateDocument(a)){const c=this.langiumDocumentFactory.fromModel({$type:"INVALID"},a);c.state=U.Changed,this.langiumDocuments.addDocument(c)}this.buildState.delete(a.toString())}const i=Q(e).concat(t).map(a=>a.toString()).toSet();this.langiumDocuments.all.filter(a=>!i.has(a.uri.toString())&&this.shouldRelink(a,i)).forEach(a=>{this.serviceRegistry.getServices(a.uri).references.Linker.unlink(a),a.state=Math.min(a.state,U.ComputedScopes),a.diagnostics=void 0}),await this.emitUpdate(e,t),await Oe(r);const s=this.langiumDocuments.all.filter(a=>{var o;return a.stater(e,t)))}shouldRelink(e,t){return e.references.some(r=>r.error!==void 0)?!0:this.indexManager.isAffected(e,t)}onUpdate(e){return this.updateListeners.push(e),er.create(()=>{const t=this.updateListeners.indexOf(e);t>=0&&this.updateListeners.splice(t,1)})}async buildDocuments(e,t,r){this.prepareBuild(e,t),await this.runCancelable(e,U.Parsed,r,s=>this.langiumDocumentFactory.update(s,r)),await this.runCancelable(e,U.IndexedContent,r,s=>this.indexManager.updateContent(s,r)),await this.runCancelable(e,U.ComputedScopes,r,async s=>{const a=this.serviceRegistry.getServices(s.uri).references.ScopeComputation;s.precomputedScopes=await a.computeLocalScopes(s,r)}),await this.runCancelable(e,U.Linked,r,s=>this.serviceRegistry.getServices(s.uri).references.Linker.link(s,r)),await this.runCancelable(e,U.IndexedReferences,r,s=>this.indexManager.updateReferences(s,r));const i=e.filter(s=>this.shouldValidate(s));await this.runCancelable(i,U.Validated,r,s=>this.validate(s,r));for(const s of e){const a=this.buildState.get(s.uri.toString());a&&(a.completed=!0)}}prepareBuild(e,t){for(const r of e){const i=r.uri.toString(),s=this.buildState.get(i);(!s||s.completed)&&this.buildState.set(i,{completed:!1,options:t,result:s==null?void 0:s.result})}}async runCancelable(e,t,r,i){const s=e.filter(a=>a.state{this.buildPhaseListeners.delete(e,t)})}waitUntil(e,t,r){let i;if(t&&"path"in t?i=t:r=t,r??(r=X.None),i){const s=this.langiumDocuments.getDocument(i);if(s&&s.state>e)return Promise.resolve(i)}return this.currentState>=e?Promise.resolve(void 0):r.isCancellationRequested?Promise.reject(Qn):new Promise((s,a)=>{const o=this.onBuildPhase(e,()=>{if(o.dispose(),c.dispose(),i){const l=this.langiumDocuments.getDocument(i);s(l==null?void 0:l.uri)}else s(void 0)}),c=r.onCancellationRequested(()=>{o.dispose(),c.dispose(),a(Qn)})})}async notifyBuildPhase(e,t,r){if(e.length===0)return;const i=this.buildPhaseListeners.get(t);for(const s of i)await Oe(r),await s(e,r)}shouldValidate(e){return!!this.getBuildOptions(e).validation}async validate(e,t){var r,i;const s=this.serviceRegistry.getServices(e.uri).validation.DocumentValidator,a=this.getBuildOptions(e).validation,o=typeof a=="object"?a:void 0,c=await s.validateDocument(e,o,t);e.diagnostics?e.diagnostics.push(...c):e.diagnostics=c;const l=this.buildState.get(e.uri.toString());if(l){(r=l.result)!==null&&r!==void 0||(l.result={});const u=(i=o==null?void 0:o.categories)!==null&&i!==void 0?i:Zn.all;l.result.validationChecks?l.result.validationChecks.push(...u):l.result.validationChecks=[...u]}}getBuildOptions(e){var t,r;return(r=(t=this.buildState.get(e.uri.toString()))===null||t===void 0?void 0:t.options)!==null&&r!==void 0?r:{}}}class Cm{constructor(e){this.symbolIndex=new Map,this.symbolByTypeIndex=new pm,this.referenceIndex=new Map,this.documents=e.workspace.LangiumDocuments,this.serviceRegistry=e.ServiceRegistry,this.astReflection=e.AstReflection}findAllReferences(e,t){const r=Ue(e).uri,i=[];return this.referenceIndex.forEach(s=>{s.forEach(a=>{rt.equals(a.targetUri,r)&&a.targetPath===t&&i.push(a)})}),Q(i)}allElements(e,t){let r=Q(this.symbolIndex.keys());return t&&(r=r.filter(i=>!t||t.has(i))),r.map(i=>this.getFileDescriptions(i,e)).flat()}getFileDescriptions(e,t){var r;return t?this.symbolByTypeIndex.get(e,t,()=>{var s;return((s=this.symbolIndex.get(e))!==null&&s!==void 0?s:[]).filter(o=>this.astReflection.isSubtype(o.type,t))}):(r=this.symbolIndex.get(e))!==null&&r!==void 0?r:[]}remove(e){const t=e.toString();this.symbolIndex.delete(t),this.symbolByTypeIndex.clear(t),this.referenceIndex.delete(t)}async updateContent(e,t=X.None){const i=await this.serviceRegistry.getServices(e.uri).references.ScopeComputation.computeExports(e,t),s=e.uri.toString();this.symbolIndex.set(s,i),this.symbolByTypeIndex.clear(s)}async updateReferences(e,t=X.None){const i=await this.serviceRegistry.getServices(e.uri).workspace.ReferenceDescriptionProvider.createDescriptions(e,t);this.referenceIndex.set(e.uri.toString(),i)}isAffected(e,t){const r=this.referenceIndex.get(e.uri.toString());return r?r.some(i=>!i.local&&t.has(i.targetUri.toString())):!1}}class _m{constructor(e){this.initialBuildOptions={},this._ready=new Wi,this.serviceRegistry=e.ServiceRegistry,this.langiumDocuments=e.workspace.LangiumDocuments,this.documentBuilder=e.workspace.DocumentBuilder,this.fileSystemProvider=e.workspace.FileSystemProvider,this.mutex=e.workspace.WorkspaceLock}get ready(){return this._ready.promise}initialize(e){var t;this.folders=(t=e.workspaceFolders)!==null&&t!==void 0?t:void 0}initialized(e){return this.mutex.write(t=>{var r;return this.initializeWorkspace((r=this.folders)!==null&&r!==void 0?r:[],t)})}async initializeWorkspace(e,t=X.None){const r=await this.performStartup(e);await Oe(t),await this.documentBuilder.build(r,this.initialBuildOptions,t)}async performStartup(e){const t=this.serviceRegistry.all.flatMap(s=>s.LanguageMetaData.fileExtensions),r=[],i=s=>{r.push(s),this.langiumDocuments.hasDocument(s.uri)||this.langiumDocuments.addDocument(s)};return await this.loadAdditionalDocuments(e,i),await Promise.all(e.map(s=>[s,this.getRootFolder(s)]).map(async s=>this.traverseFolder(...s,t,i))),this._ready.resolve(),r}loadAdditionalDocuments(e,t){return Promise.resolve()}getRootFolder(e){return Ht.parse(e.uri)}async traverseFolder(e,t,r,i){const s=await this.fileSystemProvider.readDirectory(t);await Promise.all(s.map(async a=>{if(this.includeEntry(e,a,r)){if(a.isDirectory)await this.traverseFolder(e,a.uri,r,i);else if(a.isFile){const o=await this.langiumDocuments.getOrCreateDocument(a.uri);i(o)}}}))}includeEntry(e,t,r){const i=rt.basename(t.uri);if(i.startsWith("."))return!1;if(t.isDirectory)return i!=="node_modules"&&i!=="out";if(t.isFile){const s=rt.extname(t.uri);return r.includes(s)}return!1}}class wm{constructor(e){const t=e.parser.TokenBuilder.buildTokens(e.Grammar,{caseInsensitive:e.LanguageMetaData.caseInsensitive});this.tokenTypes=this.toTokenTypeDictionary(t);const r=Ka(t)?Object.values(t):t;this.chevrotainLexer=new de(r,{positionTracking:"full"})}get definition(){return this.tokenTypes}tokenize(e){var t;const r=this.chevrotainLexer.tokenize(e);return{tokens:r.tokens,errors:r.errors,hidden:(t=r.groups.hidden)!==null&&t!==void 0?t:[]}}toTokenTypeDictionary(e){if(Ka(e))return e;const t=ml(e)?Object.values(e.modes).flat():e,r={};return t.forEach(i=>r[i.name]=i),r}}function Lm(n){return Array.isArray(n)&&(n.length===0||"name"in n[0])}function ml(n){return n&&"modes"in n&&"defaultMode"in n}function Ka(n){return!Lm(n)&&!ml(n)}function $m(n,e,t){let r,i;typeof n=="string"?(i=e,r=t):(i=n.range.start,r=e),i||(i=P.create(0,0));const s=gl(n),a=Hi(r),o=Pm({lines:s,position:i,options:a});return Um({index:0,tokens:o,position:i})}function Om(n,e){const t=Hi(e),r=gl(n);if(r.length===0)return!1;const i=r[0],s=r[r.length-1],a=t.start,o=t.end;return!!(a!=null&&a.exec(i))&&!!(o!=null&&o.exec(s))}function gl(n){let e="";return typeof n=="string"?e=n:e=n.text,e.split(fd)}const za=/\s*(@([\p{L}][\p{L}\p{N}]*)?)/uy,bm=/\{(@[\p{L}][\p{L}\p{N}]*)(\s*)([^\r\n}]+)?\}/gu;function Pm(n){var e,t,r;const i=[];let s=n.position.line,a=n.position.character;for(let o=0;o=u.length){if(i.length>0){const h=P.create(s,a);i.push({type:"break",content:"",range:b.create(h,h)})}}else{za.lastIndex=d;const h=za.exec(u);if(h){const m=h[0],g=h[1],A=P.create(s,a+d),y=P.create(s,a+d+m.length);i.push({type:"tag",content:g,range:b.create(A,y)}),d+=m.length,d=gi(u,d)}if(d0&&i[i.length-1].type==="break"?i.slice(0,-1):i}function Mm(n,e,t,r){const i=[];if(n.length===0){const s=P.create(t,r),a=P.create(t,r+e.length);i.push({type:"text",content:e,range:b.create(s,a)})}else{let s=0;for(const o of n){const c=o.index,l=e.substring(s,c);l.length>0&&i.push({type:"text",content:e.substring(s,c),range:b.create(P.create(t,s+r),P.create(t,c+r))});let u=l.length+1;const d=o[1];if(i.push({type:"inline-tag",content:d,range:b.create(P.create(t,s+u+r),P.create(t,s+u+d.length+r))}),u+=d.length,o.length===4){u+=o[2].length;const f=o[3];i.push({type:"text",content:f,range:b.create(P.create(t,s+u+r),P.create(t,s+u+f.length+r))})}else i.push({type:"text",content:"",range:b.create(P.create(t,s+u+r),P.create(t,s+u+r))});s=c+o[0].length}const a=e.substring(s);a.length>0&&i.push({type:"text",content:a,range:b.create(P.create(t,s+r),P.create(t,s+r+a.length))})}return i}const Dm=/\S/,Fm=/\s*$/;function gi(n,e){const t=n.substring(e).match(Dm);return t?e+t.index:n.length}function Gm(n){const e=n.match(Fm);if(e&&typeof e.index=="number")return e.index}function Um(n){var e,t,r,i;const s=P.create(n.position.line,n.position.character);if(n.tokens.length===0)return new qa([],b.create(s,s));const a=[];for(;n.indext.name===e)}getTags(e){return this.getAllTags().filter(t=>t.name===e)}getAllTags(){return this.elements.filter(e=>"name"in e)}toString(){let e="";for(const t of this.elements)if(e.length===0)e=t.toString();else{const r=t.toString();e+=Ya(e)+r}return e.trim()}toMarkdown(e){let t="";for(const r of this.elements)if(t.length===0)t=r.toMarkdown(e);else{const i=r.toMarkdown(e);t+=Ya(t)+i}return t.trim()}}class Or{constructor(e,t,r,i){this.name=e,this.content=t,this.inline=r,this.range=i}toString(){let e=`@${this.name}`;const t=this.content.toString();return this.content.inlines.length===1?e=`${e} ${t}`:this.content.inlines.length>1&&(e=`${e} +${t}`),this.inline?`{${e}}`:e}toMarkdown(e){var t,r;return(r=(t=e==null?void 0:e.renderTag)===null||t===void 0?void 0:t.call(e,this))!==null&&r!==void 0?r:this.toMarkdownDefault(e)}toMarkdownDefault(e){const t=this.content.toMarkdown(e);if(this.inline){const s=jm(this.name,t,e??{});if(typeof s=="string")return s}let r="";(e==null?void 0:e.tag)==="italic"||(e==null?void 0:e.tag)===void 0?r="*":(e==null?void 0:e.tag)==="bold"?r="**":(e==null?void 0:e.tag)==="bold-italic"&&(r="***");let i=`${r}@${this.name}${r}`;return this.content.inlines.length===1?i=`${i} — ${t}`:this.content.inlines.length>1&&(i=`${i} +${t}`),this.inline?`{${i}}`:i}}function jm(n,e,t){var r,i;if(n==="linkplain"||n==="linkcode"||n==="link"){const s=e.indexOf(" ");let a=e;if(s>0){const c=gi(e,s);a=e.substring(c),e=e.substring(0,s)}return(n==="linkcode"||n==="link"&&t.link==="code")&&(a=`\`${a}\``),(i=(r=t.renderLink)===null||r===void 0?void 0:r.call(t,e,a))!==null&&i!==void 0?i:Hm(e,a)}}function Hm(n,e){try{return Ht.parse(n,!0),`[${e}](${n})`}catch{return n}}class yi{constructor(e,t){this.inlines=e,this.range=t}toString(){let e="";for(let t=0;tr.range.start.line&&(e+=` +`)}return e}toMarkdown(e){let t="";for(let r=0;ri.range.start.line&&(t+=` +`)}return t}}class Al{constructor(e,t){this.text=e,this.range=t}toString(){return this.text}toMarkdown(){return this.text}}function Ya(n){return n.endsWith(` +`)?` +`:` + +`}class Km{constructor(e){this.indexManager=e.shared.workspace.IndexManager,this.commentProvider=e.documentation.CommentProvider}getDocumentation(e){const t=this.commentProvider.getComment(e);if(t&&Om(t))return $m(t).toMarkdown({renderLink:(i,s)=>this.documentationLinkRenderer(e,i,s),renderTag:i=>this.documentationTagRenderer(e,i)})}documentationLinkRenderer(e,t,r){var i;const s=(i=this.findNameInPrecomputedScopes(e,t))!==null&&i!==void 0?i:this.findNameInGlobalScope(e,t);if(s&&s.nameSegment){const a=s.nameSegment.range.start.line+1,o=s.nameSegment.range.start.character+1,c=s.documentUri.with({fragment:`L${a},${o}`});return`[${r}](${c.toString()})`}else return}documentationTagRenderer(e,t){}findNameInPrecomputedScopes(e,t){const i=Ue(e).precomputedScopes;if(!i)return;let s=e;do{const o=i.get(s).find(c=>c.name===t);if(o)return o;s=s.$container}while(s)}findNameInGlobalScope(e,t){return this.indexManager.allElements().find(i=>i.name===t)}}class zm{constructor(e){this.grammarConfig=()=>e.parser.GrammarConfig}getComment(e){var t;return ym(e)?e.$comment:(t=Lu(e.$cstNode,this.grammarConfig().multilineCommentRules))===null||t===void 0?void 0:t.text}}class qm{constructor(e){this.syncParser=e.parser.LangiumParser}parse(e){return Promise.resolve(this.syncParser.parse(e))}}class Ym{constructor(){this.previousTokenSource=new fi,this.writeQueue=[],this.readQueue=[],this.done=!0}write(e){this.cancelWrite();const t=new fi;return this.previousTokenSource=t,this.enqueue(this.writeQueue,e,t.token)}read(e){return this.enqueue(this.readQueue,e)}enqueue(e,t,r){const i=new Wi,s={action:t,deferred:i,cancellationToken:r??X.None};return e.push(s),this.performNextOperation(),i.promise}async performNextOperation(){if(!this.done)return;const e=[];if(this.writeQueue.length>0)e.push(this.writeQueue.shift());else if(this.readQueue.length>0)e.push(...this.readQueue.splice(0,this.readQueue.length));else return;this.done=!1,await Promise.all(e.map(async({action:t,deferred:r,cancellationToken:i})=>{try{const s=await Promise.resolve().then(()=>t(i));r.resolve(s)}catch(s){Vi(s)?r.resolve(void 0):r.reject(s)}})),this.done=!0,this.performNextOperation()}cancelWrite(){this.previousTokenSource.cancel()}}class Xm{constructor(e){this.grammarElementIdMap=new Va,this.tokenTypeIdMap=new Va,this.grammar=e.Grammar,this.lexer=e.parser.Lexer,this.linker=e.references.Linker}dehydrate(e){return{lexerErrors:e.lexerErrors.map(t=>Object.assign({},t)),parserErrors:e.parserErrors.map(t=>Object.assign({},t)),value:this.dehydrateAstNode(e.value,this.createDehyrationContext(e.value))}}createDehyrationContext(e){const t=new Map,r=new Map;for(const i of vt(e))t.set(i,{});if(e.$cstNode)for(const i of Pr(e.$cstNode))r.set(i,{});return{astNodes:t,cstNodes:r}}dehydrateAstNode(e,t){const r=t.astNodes.get(e);r.$type=e.$type,r.$containerIndex=e.$containerIndex,r.$containerProperty=e.$containerProperty,e.$cstNode!==void 0&&(r.$cstNode=this.dehydrateCstNode(e.$cstNode,t));for(const[i,s]of Object.entries(e))if(!i.startsWith("$"))if(Array.isArray(s)){const a=[];r[i]=a;for(const o of s)ae(o)?a.push(this.dehydrateAstNode(o,t)):Ge(o)?a.push(this.dehydrateReference(o,t)):a.push(o)}else ae(s)?r[i]=this.dehydrateAstNode(s,t):Ge(s)?r[i]=this.dehydrateReference(s,t):s!==void 0&&(r[i]=s);return r}dehydrateReference(e,t){const r={};return r.$refText=e.$refText,e.$refNode&&(r.$refNode=t.cstNodes.get(e.$refNode)),r}dehydrateCstNode(e,t){const r=t.cstNodes.get(e);return go(e)?r.fullText=e.fullText:r.grammarSource=this.getGrammarElementId(e.grammarSource),r.hidden=e.hidden,r.astNode=t.astNodes.get(e.astNode),Gt(e)?r.content=e.content.map(i=>this.dehydrateCstNode(i,t)):mo(e)&&(r.tokenType=e.tokenType.name,r.offset=e.offset,r.length=e.length,r.startLine=e.range.start.line,r.startColumn=e.range.start.character,r.endLine=e.range.end.line,r.endColumn=e.range.end.character),r}hydrate(e){const t=e.value,r=this.createHydrationContext(t);return"$cstNode"in t&&this.hydrateCstNode(t.$cstNode,r),{lexerErrors:e.lexerErrors,parserErrors:e.parserErrors,value:this.hydrateAstNode(t,r)}}createHydrationContext(e){const t=new Map,r=new Map;for(const s of vt(e))t.set(s,{});let i;if(e.$cstNode)for(const s of Pr(e.$cstNode)){let a;"fullText"in s?(a=new Zc(s.fullText),i=a):"content"in s?a=new Ui:"tokenType"in s&&(a=this.hydrateCstLeafNode(s)),a&&(r.set(s,a),a.root=i)}return{astNodes:t,cstNodes:r}}hydrateAstNode(e,t){const r=t.astNodes.get(e);r.$type=e.$type,r.$containerIndex=e.$containerIndex,r.$containerProperty=e.$containerProperty,e.$cstNode&&(r.$cstNode=t.cstNodes.get(e.$cstNode));for(const[i,s]of Object.entries(e))if(!i.startsWith("$"))if(Array.isArray(s)){const a=[];r[i]=a;for(const o of s)ae(o)?a.push(this.setParent(this.hydrateAstNode(o,t),r)):Ge(o)?a.push(this.hydrateReference(o,r,i,t)):a.push(o)}else ae(s)?r[i]=this.setParent(this.hydrateAstNode(s,t),r):Ge(s)?r[i]=this.hydrateReference(s,r,i,t):s!==void 0&&(r[i]=s);return r}setParent(e,t){return e.$container=t,e}hydrateReference(e,t,r,i){return this.linker.buildReference(t,r,i.cstNodes.get(e.$refNode),e.$refText)}hydrateCstNode(e,t,r=0){const i=t.cstNodes.get(e);if(typeof e.grammarSource=="number"&&(i.grammarSource=this.getGrammarElement(e.grammarSource)),i.astNode=t.astNodes.get(e.astNode),Gt(i))for(const s of e.content){const a=this.hydrateCstNode(s,t,r++);i.content.push(a)}return i}hydrateCstLeafNode(e){const t=this.getTokenType(e.tokenType),r=e.offset,i=e.length,s=e.startLine,a=e.startColumn,o=e.endLine,c=e.endColumn,l=e.hidden;return new oi(r,i,{start:{line:s,character:a},end:{line:o,character:c}},t,l)}getTokenType(e){return this.lexer.definition[e]}getGrammarElementId(e){return this.grammarElementIdMap.size===0&&this.createGrammarElementIdMap(),this.grammarElementIdMap.get(e)}getGrammarElement(e){this.grammarElementIdMap.size===0&&this.createGrammarElementIdMap();const t=this.grammarElementIdMap.getKey(e);if(t)return t;throw new Error("Invalid grammar element id: "+e)}createGrammarElementIdMap(){let e=0;for(const t of vt(this.grammar))bu(t)&&this.grammarElementIdMap.set(t,e++)}}function Jt(n){return{documentation:{CommentProvider:e=>new zm(e),DocumentationProvider:e=>new Km(e)},parser:{AsyncParser:e=>new qm(e),GrammarConfig:e=>bd(e),LangiumParser:e=>Wp(e),CompletionParser:e=>Vp(e),ValueConverter:()=>new cl,TokenBuilder:()=>new ol,Lexer:e=>new wm(e),ParserErrorMessageProvider:()=>new nl},workspace:{AstNodeLocator:()=>new Im,AstNodeDescriptionProvider:e=>new km(e),ReferenceDescriptionProvider:e=>new Sm(e)},references:{Linker:e=>new om(e),NameProvider:()=>new lm,ScopeProvider:e=>new gm(e),ScopeComputation:e=>new dm(e),References:e=>new um(e)},serializer:{Hydrator:e=>new Xm(e),JsonSerializer:e=>new Tm(e)},validation:{DocumentValidator:e=>new vm(e),ValidationRegistry:e=>new Am(e)},shared:()=>n.shared}}function Qt(n){return{ServiceRegistry:()=>new Rm,workspace:{LangiumDocuments:e=>new am(e),LangiumDocumentFactory:e=>new sm(e),DocumentBuilder:e=>new Nm(e),IndexManager:e=>new Cm(e),WorkspaceManager:e=>new _m(e),FileSystemProvider:e=>n.fileSystemProvider(e),WorkspaceLock:()=>new Ym,ConfigurationProvider:e=>new xm(e)}}}var Xa;(function(n){n.merge=(e,t)=>tr(tr({},e),t)})(Xa||(Xa={}));function _e(n,e,t,r,i,s,a,o,c){const l=[n,e,t,r,i,s,a,o,c].reduce(tr,{});return vl(l)}const Ja=Symbol("isProxy");function vl(n,e){const t=new Proxy({},{deleteProperty:()=>!1,get:(r,i)=>Za(r,i,n,e||t),getOwnPropertyDescriptor:(r,i)=>(Za(r,i,n,e||t),Object.getOwnPropertyDescriptor(r,i)),has:(r,i)=>i in n,ownKeys:()=>[...Reflect.ownKeys(n),Ja]});return t[Ja]=!0,t}const Qa=Symbol();function Za(n,e,t,r){if(e in n){if(n[e]instanceof Error)throw new Error("Construction failure. Please make sure that your dependencies are constructable.",{cause:n[e]});if(n[e]===Qa)throw new Error('Cycle detected. Please make "'+String(e)+'" lazy. See https://langium.org/docs/configuration-services/#resolving-cyclic-dependencies');return n[e]}else if(e in t){const i=t[e];n[e]=Qa;try{n[e]=typeof i=="function"?i(r):vl(i,r)}catch(s){throw n[e]=s instanceof Error?s:void 0,s}return n[e]}else return}function tr(n,e){if(e){for(const[t,r]of Object.entries(e))if(r!==void 0){const i=n[t];i!==null&&r!==null&&typeof i=="object"&&typeof r=="object"?n[t]=tr(i,r):n[t]=r}}return n}class Jm{readFile(){throw new Error("No file system is available.")}async readDirectory(){return[]}}const Zt={fileSystemProvider:()=>new Jm},Qm={Grammar:()=>{},LanguageMetaData:()=>({caseInsensitive:!1,fileExtensions:[".langium"],languageId:"langium"})},Zm={AstReflection:()=>new Jo};function eg(){const n=_e(Qt(Zt),Zm),e=_e(Jt({shared:n}),Qm);return n.ServiceRegistry.register(e),e}function An(n){var e;const t=eg(),r=t.serializer.JsonSerializer.deserialize(n);return t.shared.workspace.LangiumDocumentFactory.fromModel(r,Ht.parse(`memory://${(e=r.name)!==null&&e!==void 0?e:"grammar"}.langium`)),r}var tg=Object.defineProperty,x=(n,e)=>tg(n,"name",{value:e,configurable:!0}),ng="Statement",rg="Architecture";function ig(n){return Me.isInstance(n,rg)}x(ig,"isArchitecture");var El="Branch";function sg(n){return Me.isInstance(n,El)}x(sg,"isBranch");var ag="Checkout",og="CherryPicking",kl="Commit";function cg(n){return Me.isInstance(n,kl)}x(cg,"isCommit");var lg="Common";function ug(n){return Me.isInstance(n,lg)}x(ug,"isCommon");var Sl="GitGraph";function dg(n){return Me.isInstance(n,Sl)}x(dg,"isGitGraph");var fg="Info";function hg(n){return Me.isInstance(n,fg)}x(hg,"isInfo");var Il="Merge";function pg(n){return Me.isInstance(n,Il)}x(pg,"isMerge");var mg="Packet";function gg(n){return Me.isInstance(n,mg)}x(gg,"isPacket");var yg="PacketBlock";function Tg(n){return Me.isInstance(n,yg)}x(Tg,"isPacketBlock");var Rg="Pie";function Ag(n){return Me.isInstance(n,Rg)}x(Ag,"isPie");var vg="PieSection";function Eg(n){return Me.isInstance(n,vg)}x(Eg,"isPieSection");var kg="Direction",kt,xl=(kt=class extends po{getAllTypes(){return["Architecture","Branch","Checkout","CherryPicking","Commit","Common","Direction","Edge","GitGraph","Group","Info","Junction","Merge","Packet","PacketBlock","Pie","PieSection","Service","Statement"]}computeIsSubtype(e,t){switch(e){case El:case ag:case og:case kl:case Il:return this.isSubtype(ng,t);case kg:return this.isSubtype(Sl,t);default:return!1}}getReferenceType(e){const t=`${e.container.$type}:${e.property}`;switch(t){default:throw new Error(`${t} is not a valid reference id.`)}}getTypeMetaData(e){switch(e){case"Architecture":return{name:"Architecture",properties:[{name:"accDescr"},{name:"accTitle"},{name:"edges",defaultValue:[]},{name:"groups",defaultValue:[]},{name:"junctions",defaultValue:[]},{name:"services",defaultValue:[]},{name:"title"}]};case"Branch":return{name:"Branch",properties:[{name:"name"},{name:"order"}]};case"Checkout":return{name:"Checkout",properties:[{name:"branch"}]};case"CherryPicking":return{name:"CherryPicking",properties:[{name:"id"},{name:"parent"},{name:"tags",defaultValue:[]}]};case"Commit":return{name:"Commit",properties:[{name:"id"},{name:"message"},{name:"tags",defaultValue:[]},{name:"type"}]};case"Common":return{name:"Common",properties:[{name:"accDescr"},{name:"accTitle"},{name:"title"}]};case"Edge":return{name:"Edge",properties:[{name:"lhsDir"},{name:"lhsGroup",defaultValue:!1},{name:"lhsId"},{name:"lhsInto",defaultValue:!1},{name:"rhsDir"},{name:"rhsGroup",defaultValue:!1},{name:"rhsId"},{name:"rhsInto",defaultValue:!1},{name:"title"}]};case"GitGraph":return{name:"GitGraph",properties:[{name:"accDescr"},{name:"accTitle"},{name:"statements",defaultValue:[]},{name:"title"}]};case"Group":return{name:"Group",properties:[{name:"icon"},{name:"id"},{name:"in"},{name:"title"}]};case"Info":return{name:"Info",properties:[{name:"accDescr"},{name:"accTitle"},{name:"title"}]};case"Junction":return{name:"Junction",properties:[{name:"id"},{name:"in"}]};case"Merge":return{name:"Merge",properties:[{name:"branch"},{name:"id"},{name:"tags",defaultValue:[]},{name:"type"}]};case"Packet":return{name:"Packet",properties:[{name:"accDescr"},{name:"accTitle"},{name:"blocks",defaultValue:[]},{name:"title"}]};case"PacketBlock":return{name:"PacketBlock",properties:[{name:"end"},{name:"label"},{name:"start"}]};case"Pie":return{name:"Pie",properties:[{name:"accDescr"},{name:"accTitle"},{name:"sections",defaultValue:[]},{name:"showData",defaultValue:!1},{name:"title"}]};case"PieSection":return{name:"PieSection",properties:[{name:"label"},{name:"value"}]};case"Service":return{name:"Service",properties:[{name:"icon"},{name:"iconText"},{name:"id"},{name:"in"},{name:"title"}]};case"Direction":return{name:"Direction",properties:[{name:"accDescr"},{name:"accTitle"},{name:"dir"},{name:"statements",defaultValue:[]},{name:"title"}]};default:return{name:e,properties:[]}}}},x(kt,"MermaidAstReflection"),kt),Me=new xl,eo,Sg=x(()=>eo??(eo=An('{"$type":"Grammar","isDeclared":true,"name":"Info","imports":[],"rules":[{"$type":"ParserRule","name":"Info","entry":true,"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"info"},{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[],"cardinality":"*"},{"$type":"Group","elements":[{"$type":"Keyword","value":"showInfo"},{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[],"cardinality":"*"}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[],"cardinality":"?"}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"TitleAndAccessibilities","fragment":true,"definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"EOL","fragment":true,"dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[{"$type":"Interface","name":"Common","attributes":[{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"types":[],"usedGrammars":[]}')),"InfoGrammar"),to,Ig=x(()=>to??(to=An(`{"$type":"Grammar","isDeclared":true,"name":"Packet","imports":[],"rules":[{"$type":"ParserRule","name":"Packet","entry":true,"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"packet-beta"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"Assignment","feature":"blocks","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]},"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"+"},{"$type":"Assignment","feature":"blocks","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]},"cardinality":"+"}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"}]}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"PacketBlock","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"start","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"-"},{"$type":"Assignment","feature":"end","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}}],"cardinality":"?"},{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","definition":{"$type":"RegexToken","regex":"/\\"[^\\"]*\\"|'[^']*'/"},"fragment":false,"hidden":false},{"$type":"ParserRule","name":"TitleAndAccessibilities","fragment":true,"definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"EOL","fragment":true,"dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[{"$type":"Interface","name":"Common","attributes":[{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"types":[],"usedGrammars":[]}`)),"PacketGrammar"),no,xg=x(()=>no??(no=An('{"$type":"Grammar","isDeclared":true,"name":"Pie","imports":[],"rules":[{"$type":"ParserRule","name":"Pie","entry":true,"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"pie"},{"$type":"Assignment","feature":"showData","operator":"?=","terminal":{"$type":"Keyword","value":"showData"},"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"Assignment","feature":"sections","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]},"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"+"},{"$type":"Assignment","feature":"sections","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]},"cardinality":"+"}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"}]}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"PieSection","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}},{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"PIE_SECTION_LABEL","definition":{"$type":"RegexToken","regex":"/\\"[^\\"]+\\"/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"PIE_SECTION_VALUE","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/(0|[1-9][0-9]*)(\\\\.[0-9]+)?/"},"fragment":false,"hidden":false},{"$type":"ParserRule","name":"TitleAndAccessibilities","fragment":true,"definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"EOL","fragment":true,"dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[{"$type":"Interface","name":"Common","attributes":[{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"types":[],"usedGrammars":[]}')),"PieGrammar"),ro,Ng=x(()=>ro??(ro=An('{"$type":"Grammar","isDeclared":true,"name":"Architecture","imports":[],"rules":[{"$type":"ParserRule","name":"Architecture","entry":true,"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"architecture-beta"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}]},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[],"cardinality":"*"}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[],"cardinality":"*"}]}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Statement","fragment":true,"definition":{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"groups","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Assignment","feature":"services","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}},{"$type":"Assignment","feature":"junctions","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}},{"$type":"Assignment","feature":"edges","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"LeftPort","fragment":true,"definition":{"$type":"Group","elements":[{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"lhsDir","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"RightPort","fragment":true,"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"rhsDir","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}},{"$type":"Keyword","value":":"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Arrow","fragment":true,"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]},{"$type":"Assignment","feature":"lhsInto","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]},"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"--"},{"$type":"Group","elements":[{"$type":"Keyword","value":"-"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}},{"$type":"Keyword","value":"-"}]}]},{"$type":"Assignment","feature":"rhsInto","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Group","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"group"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Assignment","feature":"icon","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]},"cardinality":"?"},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Service","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"service"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"iconText","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}},{"$type":"Assignment","feature":"icon","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}}],"cardinality":"?"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]},"cardinality":"?"},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Junction","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"junction"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Edge","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"lhsId","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Assignment","feature":"lhsGroup","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"Assignment","feature":"rhsId","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Assignment","feature":"rhsGroup","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"ARROW_DIRECTION","definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"L"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"R"}}]},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"T"}}]},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"B"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARCH_ID","definition":{"$type":"RegexToken","regex":"/[\\\\w]+/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARCH_TEXT_ICON","definition":{"$type":"RegexToken","regex":"/\\\\(\\"[^\\"]+\\"\\\\)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARCH_ICON","definition":{"$type":"RegexToken","regex":"/\\\\([\\\\w-:]+\\\\)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARCH_TITLE","definition":{"$type":"RegexToken","regex":"/\\\\[[\\\\w ]+\\\\]/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARROW_GROUP","definition":{"$type":"RegexToken","regex":"/\\\\{group\\\\}/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARROW_INTO","definition":{"$type":"RegexToken","regex":"/<|>/"},"fragment":false,"hidden":false},{"$type":"ParserRule","name":"TitleAndAccessibilities","fragment":true,"definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"EOL","fragment":true,"dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[{"$type":"Interface","name":"Common","attributes":[{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"types":[],"usedGrammars":[]}')),"ArchitectureGrammar"),io,Cg=x(()=>io??(io=An(`{"$type":"Grammar","isDeclared":true,"name":"GitGraph","interfaces":[{"$type":"Interface","name":"Common","attributes":[{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"rules":[{"$type":"ParserRule","name":"TitleAndAccessibilities","fragment":true,"definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"EOL","fragment":true,"dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false},{"$type":"ParserRule","name":"GitGraph","entry":true,"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"Group","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"Keyword","value":":"}]},{"$type":"Keyword","value":"gitGraph:"},{"$type":"Group","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]},{"$type":"Keyword","value":":"}]}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@0"},"arguments":[]},{"$type":"Assignment","feature":"statements","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}],"cardinality":"*"}]}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Statement","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Direction","definition":{"$type":"Assignment","feature":"dir","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"LR"},{"$type":"Keyword","value":"TB"},{"$type":"Keyword","value":"BT"}]}},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Commit","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"commit"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"msg:","cardinality":"?"},{"$type":"Assignment","feature":"message","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"type:"},{"$type":"Assignment","feature":"type","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"NORMAL"},{"$type":"Keyword","value":"REVERSE"},{"$type":"Keyword","value":"HIGHLIGHT"}]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Branch","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"branch"},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"order:"},{"$type":"Assignment","feature":"order","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Merge","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"merge"},{"$type":"Assignment","feature":"branch","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}]}},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"type:"},{"$type":"Assignment","feature":"type","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"NORMAL"},{"$type":"Keyword","value":"REVERSE"},{"$type":"Keyword","value":"HIGHLIGHT"}]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Checkout","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"checkout"},{"$type":"Keyword","value":"switch"}]},{"$type":"Assignment","feature":"branch","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"CherryPicking","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"cherry-pick"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"parent:"},{"$type":"Assignment","feature":"parent","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+(?=\\\\s)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\\\w([-\\\\./\\\\w]*[-\\\\w])?/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","definition":{"$type":"RegexToken","regex":"/\\"[^\\"]*\\"|'[^']*'/"},"fragment":false,"hidden":false}],"definesHiddenTokens":false,"hiddenTokens":[],"imports":[],"types":[],"usedGrammars":[]}`)),"GitGraphGrammar"),_g={languageId:"info",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1},wg={languageId:"packet",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1},Lg={languageId:"pie",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1},$g={languageId:"architecture",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1},Og={languageId:"gitGraph",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1},vn={AstReflection:x(()=>new xl,"AstReflection")},bg={Grammar:x(()=>Sg(),"Grammar"),LanguageMetaData:x(()=>_g,"LanguageMetaData"),parser:{}},Pg={Grammar:x(()=>Ig(),"Grammar"),LanguageMetaData:x(()=>wg,"LanguageMetaData"),parser:{}},Mg={Grammar:x(()=>xg(),"Grammar"),LanguageMetaData:x(()=>Lg,"LanguageMetaData"),parser:{}},Dg={Grammar:x(()=>Ng(),"Grammar"),LanguageMetaData:x(()=>$g,"LanguageMetaData"),parser:{}},Fg={Grammar:x(()=>Cg(),"Grammar"),LanguageMetaData:x(()=>Og,"LanguageMetaData"),parser:{}},Gg=/accDescr(?:[\t ]*:([^\n\r]*)|\s*{([^}]*)})/,Ug=/accTitle[\t ]*:([^\n\r]*)/,Bg=/title([\t ][^\n\r]*|)/,Vg={ACC_DESCR:Gg,ACC_TITLE:Ug,TITLE:Bg},St,Ki=(St=class extends cl{runConverter(e,t,r){let i=this.runCommonConverter(e,t,r);return i===void 0&&(i=this.runCustomConverter(e,t,r)),i===void 0?super.runConverter(e,t,r):i}runCommonConverter(e,t,r){const i=Vg[e.name];if(i===void 0)return;const s=i.exec(t);if(s!==null){if(s[1]!==void 0)return s[1].trim().replace(/[\t ]{2,}/gm," ");if(s[2]!==void 0)return s[2].replace(/^\s*/gm,"").replace(/\s+$/gm,"").replace(/[\t ]{2,}/gm," ").replace(/[\n\r]{2,}/gm,` +`)}}},x(St,"AbstractMermaidValueConverter"),St),It,zi=(It=class extends Ki{runCustomConverter(e,t,r){}},x(It,"CommonValueConverter"),It),xt,en=(xt=class extends ol{constructor(e){super(),this.keywords=new Set(e)}buildKeywordTokens(e,t,r){const i=super.buildKeywordTokens(e,t,r);return i.forEach(s=>{this.keywords.has(s.name)&&s.PATTERN!==void 0&&(s.PATTERN=new RegExp(s.PATTERN.toString()+"(?:(?=%%)|(?!\\S))"))}),i}},x(xt,"AbstractMermaidTokenBuilder"),xt),Nt;Nt=class extends en{},x(Nt,"CommonTokenBuilder");var Ct,Wg=(Ct=class extends en{constructor(){super(["gitGraph"])}},x(Ct,"GitGraphTokenBuilder"),Ct),Nl={parser:{TokenBuilder:x(()=>new Wg,"TokenBuilder"),ValueConverter:x(()=>new zi,"ValueConverter")}};function Cl(n=Zt){const e=_e(Qt(n),vn),t=_e(Jt({shared:e}),Fg,Nl);return e.ServiceRegistry.register(t),{shared:e,GitGraph:t}}x(Cl,"createGitGraphServices");var _t,jg=(_t=class extends en{constructor(){super(["info","showInfo"])}},x(_t,"InfoTokenBuilder"),_t),_l={parser:{TokenBuilder:x(()=>new jg,"TokenBuilder"),ValueConverter:x(()=>new zi,"ValueConverter")}};function wl(n=Zt){const e=_e(Qt(n),vn),t=_e(Jt({shared:e}),bg,_l);return e.ServiceRegistry.register(t),{shared:e,Info:t}}x(wl,"createInfoServices");var wt,Hg=(wt=class extends en{constructor(){super(["packet-beta"])}},x(wt,"PacketTokenBuilder"),wt),Ll={parser:{TokenBuilder:x(()=>new Hg,"TokenBuilder"),ValueConverter:x(()=>new zi,"ValueConverter")}};function $l(n=Zt){const e=_e(Qt(n),vn),t=_e(Jt({shared:e}),Pg,Ll);return e.ServiceRegistry.register(t),{shared:e,Packet:t}}x($l,"createPacketServices");var Lt,Kg=(Lt=class extends en{constructor(){super(["pie","showData"])}},x(Lt,"PieTokenBuilder"),Lt),$t,zg=($t=class extends Ki{runCustomConverter(e,t,r){if(e.name==="PIE_SECTION_LABEL")return t.replace(/"/g,"").trim()}},x($t,"PieValueConverter"),$t),Ol={parser:{TokenBuilder:x(()=>new Kg,"TokenBuilder"),ValueConverter:x(()=>new zg,"ValueConverter")}};function bl(n=Zt){const e=_e(Qt(n),vn),t=_e(Jt({shared:e}),Mg,Ol);return e.ServiceRegistry.register(t),{shared:e,Pie:t}}x(bl,"createPieServices");var Ot,qg=(Ot=class extends en{constructor(){super(["architecture"])}},x(Ot,"ArchitectureTokenBuilder"),Ot),bt,Yg=(bt=class extends Ki{runCustomConverter(e,t,r){if(e.name==="ARCH_ICON")return t.replace(/[()]/g,"").trim();if(e.name==="ARCH_TEXT_ICON")return t.replace(/["()]/g,"");if(e.name==="ARCH_TITLE")return t.replace(/[[\]]/g,"").trim()}},x(bt,"ArchitectureValueConverter"),bt),Pl={parser:{TokenBuilder:x(()=>new qg,"TokenBuilder"),ValueConverter:x(()=>new Yg,"ValueConverter")}};function Ml(n=Zt){const e=_e(Qt(n),vn),t=_e(Jt({shared:e}),Dg,Pl);return e.ServiceRegistry.register(t),{shared:e,Architecture:t}}x(Ml,"createArchitectureServices");var ct={},Xg={info:x(async()=>{const{createInfoServices:n}=await tn(async()=>{const{createInfoServices:t}=await Promise.resolve().then(()=>Zg);return{createInfoServices:t}},void 0),e=n().Info.parser.LangiumParser;ct.info=e},"info"),packet:x(async()=>{const{createPacketServices:n}=await tn(async()=>{const{createPacketServices:t}=await Promise.resolve().then(()=>ey);return{createPacketServices:t}},void 0),e=n().Packet.parser.LangiumParser;ct.packet=e},"packet"),pie:x(async()=>{const{createPieServices:n}=await tn(async()=>{const{createPieServices:t}=await Promise.resolve().then(()=>ty);return{createPieServices:t}},void 0),e=n().Pie.parser.LangiumParser;ct.pie=e},"pie"),architecture:x(async()=>{const{createArchitectureServices:n}=await tn(async()=>{const{createArchitectureServices:t}=await Promise.resolve().then(()=>ny);return{createArchitectureServices:t}},void 0),e=n().Architecture.parser.LangiumParser;ct.architecture=e},"architecture"),gitGraph:x(async()=>{const{createGitGraphServices:n}=await tn(async()=>{const{createGitGraphServices:t}=await Promise.resolve().then(()=>ry);return{createGitGraphServices:t}},void 0),e=n().GitGraph.parser.LangiumParser;ct.gitGraph=e},"gitGraph")};async function Jg(n,e){const t=Xg[n];if(!t)throw new Error(`Unknown diagram type: ${n}`);ct[n]||await t();const i=ct[n].parse(e);if(i.lexerErrors.length>0||i.parserErrors.length>0)throw new Qg(i);return i.value}x(Jg,"parse");var Pt,Qg=(Pt=class extends Error{constructor(e){const t=e.lexerErrors.map(i=>i.message).join(` +`),r=e.parserErrors.map(i=>i.message).join(` +`);super(`Parsing failed: ${t} ${r}`),this.result=e}},x(Pt,"MermaidParseError"),Pt);const Zg=Object.freeze(Object.defineProperty({__proto__:null,InfoModule:_l,createInfoServices:wl},Symbol.toStringTag,{value:"Module"})),ey=Object.freeze(Object.defineProperty({__proto__:null,PacketModule:Ll,createPacketServices:$l},Symbol.toStringTag,{value:"Module"})),ty=Object.freeze(Object.defineProperty({__proto__:null,PieModule:Ol,createPieServices:bl},Symbol.toStringTag,{value:"Module"})),ny=Object.freeze(Object.defineProperty({__proto__:null,ArchitectureModule:Pl,createArchitectureServices:Ml},Symbol.toStringTag,{value:"Module"})),ry=Object.freeze(Object.defineProperty({__proto__:null,GitGraphModule:Nl,createGitGraphServices:Cl},Symbol.toStringTag,{value:"Module"}));export{Jg as p}; diff --git a/assets/chunks/gitGraphDiagram-5C7YHVU6.u_0S5-QH.js b/assets/chunks/gitGraphDiagram-5C7YHVU6.u_0S5-QH.js new file mode 100644 index 000000000..44a3f9d9d --- /dev/null +++ b/assets/chunks/gitGraphDiagram-5C7YHVU6.u_0S5-QH.js @@ -0,0 +1,65 @@ +import{p as Z}from"./chunk-BAOP5US2.FIn-rUo8.js";import{I as F}from"./chunk-RGXPSUNZ.e_30X0ct.js";import{D as U,_ as h,d as rr,E as er,F as tr,G as ar,l as w,s as nr,g as sr,b as or,c as cr,q as ir,r as dr,e as B,x as hr,j as lr,v as $r,H as fr}from"../app.D0Wo8w0i.js";import{p as gr}from"./gitGraph-YCYPL57B.CgYFJ7dL.js";import"./framework.B1keMFNq.js";import"./theme.8WvZWF-M.js";import"./baseUniq.DoVpE4hx.js";import"./basePickBy.BafM5tVf.js";import"./clone.CgQKvgpz.js";var p={NORMAL:0,REVERSE:1,HIGHLIGHT:2,MERGE:3,CHERRY_PICK:4},yr=U.gitGraph,z=h(()=>er({...yr,...tr().gitGraph}),"getConfig"),i=new F(()=>{const t=z(),r=t.mainBranchName,a=t.mainBranchOrder;return{mainBranchName:r,commits:new Map,head:null,branchConfig:new Map([[r,{name:r,order:a}]]),branches:new Map([[r,null]]),currBranch:r,direction:"LR",seq:0,options:{}}});function j(){return ar({length:7})}h(j,"getID");function N(t,r){const a=Object.create(null);return t.reduce((s,e)=>{const n=r(e);return a[n]||(a[n]=!0,s.push(e)),s},[])}h(N,"uniqBy");var xr=h(function(t){i.records.direction=t},"setDirection"),pr=h(function(t){w.debug("options str",t),t=t==null?void 0:t.trim(),t=t||"{}";try{i.records.options=JSON.parse(t)}catch(r){w.error("error while parsing gitGraph options",r.message)}},"setOptions"),ur=h(function(){return i.records.options},"getOptions"),br=h(function(t){let r=t.msg,a=t.id;const s=t.type;let e=t.tags;w.info("commit",r,a,s,e),w.debug("Entering commit:",r,a,s,e);const n=z();a=B.sanitizeText(a,n),r=B.sanitizeText(r,n),e=e==null?void 0:e.map(o=>B.sanitizeText(o,n));const c={id:a||i.records.seq+"-"+j(),message:r,seq:i.records.seq++,type:s??p.NORMAL,tags:e??[],parents:i.records.head==null?[]:[i.records.head.id],branch:i.records.currBranch};i.records.head=c,w.info("main branch",n.mainBranchName),i.records.commits.set(c.id,c),i.records.branches.set(i.records.currBranch,c.id),w.debug("in pushCommit "+c.id)},"commit"),mr=h(function(t){let r=t.name;const a=t.order;if(r=B.sanitizeText(r,z()),i.records.branches.has(r))throw new Error(`Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using "checkout ${r}")`);i.records.branches.set(r,i.records.head!=null?i.records.head.id:null),i.records.branchConfig.set(r,{name:r,order:a}),_(r),w.debug("in createBranch")},"branch"),wr=h(t=>{let r=t.branch,a=t.id;const s=t.type,e=t.tags,n=z();r=B.sanitizeText(r,n),a&&(a=B.sanitizeText(a,n));const c=i.records.branches.get(i.records.currBranch),o=i.records.branches.get(r),$=c?i.records.commits.get(c):void 0,l=o?i.records.commits.get(o):void 0;if($&&l&&$.branch===r)throw new Error(`Cannot merge branch '${r}' into itself.`);if(i.records.currBranch===r){const d=new Error('Incorrect usage of "merge". Cannot merge a branch to itself');throw d.hash={text:`merge ${r}`,token:`merge ${r}`,expected:["branch abc"]},d}if($===void 0||!$){const d=new Error(`Incorrect usage of "merge". Current branch (${i.records.currBranch})has no commits`);throw d.hash={text:`merge ${r}`,token:`merge ${r}`,expected:["commit"]},d}if(!i.records.branches.has(r)){const d=new Error('Incorrect usage of "merge". Branch to be merged ('+r+") does not exist");throw d.hash={text:`merge ${r}`,token:`merge ${r}`,expected:[`branch ${r}`]},d}if(l===void 0||!l){const d=new Error('Incorrect usage of "merge". Branch to be merged ('+r+") has no commits");throw d.hash={text:`merge ${r}`,token:`merge ${r}`,expected:['"commit"']},d}if($===l){const d=new Error('Incorrect usage of "merge". Both branches have same head');throw d.hash={text:`merge ${r}`,token:`merge ${r}`,expected:["branch abc"]},d}if(a&&i.records.commits.has(a)){const d=new Error('Incorrect usage of "merge". Commit with id:'+a+" already exists, use different custom Id");throw d.hash={text:`merge ${r} ${a} ${s} ${e==null?void 0:e.join(" ")}`,token:`merge ${r} ${a} ${s} ${e==null?void 0:e.join(" ")}`,expected:[`merge ${r} ${a}_UNIQUE ${s} ${e==null?void 0:e.join(" ")}`]},d}const f=o||"",g={id:a||`${i.records.seq}-${j()}`,message:`merged branch ${r} into ${i.records.currBranch}`,seq:i.records.seq++,parents:i.records.head==null?[]:[i.records.head.id,f],branch:i.records.currBranch,type:p.MERGE,customType:s,customId:!!a,tags:e??[]};i.records.head=g,i.records.commits.set(g.id,g),i.records.branches.set(i.records.currBranch,g.id),w.debug(i.records.branches),w.debug("in mergeBranch")},"merge"),vr=h(function(t){let r=t.id,a=t.targetId,s=t.tags,e=t.parent;w.debug("Entering cherryPick:",r,a,s);const n=z();if(r=B.sanitizeText(r,n),a=B.sanitizeText(a,n),s=s==null?void 0:s.map($=>B.sanitizeText($,n)),e=B.sanitizeText(e,n),!r||!i.records.commits.has(r)){const $=new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');throw $.hash={text:`cherryPick ${r} ${a}`,token:`cherryPick ${r} ${a}`,expected:["cherry-pick abc"]},$}const c=i.records.commits.get(r);if(c===void 0||!c)throw new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');if(e&&!(Array.isArray(c.parents)&&c.parents.includes(e)))throw new Error("Invalid operation: The specified parent commit is not an immediate parent of the cherry-picked commit.");const o=c.branch;if(c.type===p.MERGE&&!e)throw new Error("Incorrect usage of cherry-pick: If the source commit is a merge commit, an immediate parent commit must be specified.");if(!a||!i.records.commits.has(a)){if(o===i.records.currBranch){const g=new Error('Incorrect usage of "cherryPick". Source commit is already on current branch');throw g.hash={text:`cherryPick ${r} ${a}`,token:`cherryPick ${r} ${a}`,expected:["cherry-pick abc"]},g}const $=i.records.branches.get(i.records.currBranch);if($===void 0||!$){const g=new Error(`Incorrect usage of "cherry-pick". Current branch (${i.records.currBranch})has no commits`);throw g.hash={text:`cherryPick ${r} ${a}`,token:`cherryPick ${r} ${a}`,expected:["cherry-pick abc"]},g}const l=i.records.commits.get($);if(l===void 0||!l){const g=new Error(`Incorrect usage of "cherry-pick". Current branch (${i.records.currBranch})has no commits`);throw g.hash={text:`cherryPick ${r} ${a}`,token:`cherryPick ${r} ${a}`,expected:["cherry-pick abc"]},g}const f={id:i.records.seq+"-"+j(),message:`cherry-picked ${c==null?void 0:c.message} into ${i.records.currBranch}`,seq:i.records.seq++,parents:i.records.head==null?[]:[i.records.head.id,c.id],branch:i.records.currBranch,type:p.CHERRY_PICK,tags:s?s.filter(Boolean):[`cherry-pick:${c.id}${c.type===p.MERGE?`|parent:${e}`:""}`]};i.records.head=f,i.records.commits.set(f.id,f),i.records.branches.set(i.records.currBranch,f.id),w.debug(i.records.branches),w.debug("in cherryPick")}},"cherryPick"),_=h(function(t){if(t=B.sanitizeText(t,z()),i.records.branches.has(t)){i.records.currBranch=t;const r=i.records.branches.get(i.records.currBranch);r===void 0||!r?i.records.head=null:i.records.head=i.records.commits.get(r)??null}else{const r=new Error(`Trying to checkout branch which is not yet created. (Help try using "branch ${t}")`);throw r.hash={text:`checkout ${t}`,token:`checkout ${t}`,expected:[`branch ${t}`]},r}},"checkout");function A(t,r,a){const s=t.indexOf(r);s===-1?t.push(a):t.splice(s,1,a)}h(A,"upsert");function D(t){const r=t.reduce((e,n)=>e.seq>n.seq?e:n,t[0]);let a="";t.forEach(function(e){e===r?a+=" *":a+=" |"});const s=[a,r.id,r.seq];for(const e in i.records.branches)i.records.branches.get(e)===r.id&&s.push(e);if(w.debug(s.join(" ")),r.parents&&r.parents.length==2&&r.parents[0]&&r.parents[1]){const e=i.records.commits.get(r.parents[0]);A(t,r,e),r.parents[1]&&t.push(i.records.commits.get(r.parents[1]))}else{if(r.parents.length==0)return;if(r.parents[0]){const e=i.records.commits.get(r.parents[0]);A(t,r,e)}}t=N(t,e=>e.id),D(t)}h(D,"prettyPrintCommitHistory");var Cr=h(function(){w.debug(i.records.commits);const t=V()[0];D([t])},"prettyPrint"),Er=h(function(){i.reset(),hr()},"clear"),Br=h(function(){return[...i.records.branchConfig.values()].map((r,a)=>r.order!==null&&r.order!==void 0?r:{...r,order:parseFloat(`0.${a}`)}).sort((r,a)=>(r.order??0)-(a.order??0)).map(({name:r})=>({name:r}))},"getBranchesAsObjArray"),kr=h(function(){return i.records.branches},"getBranches"),Lr=h(function(){return i.records.commits},"getCommits"),V=h(function(){const t=[...i.records.commits.values()];return t.forEach(function(r){w.debug(r.id)}),t.sort((r,a)=>r.seq-a.seq),t},"getCommitsArray"),Tr=h(function(){return i.records.currBranch},"getCurrentBranch"),Mr=h(function(){return i.records.direction},"getDirection"),Rr=h(function(){return i.records.head},"getHead"),X={commitType:p,getConfig:z,setDirection:xr,setOptions:pr,getOptions:ur,commit:br,branch:mr,merge:wr,cherryPick:vr,checkout:_,prettyPrint:Cr,clear:Er,getBranchesAsObjArray:Br,getBranches:kr,getCommits:Lr,getCommitsArray:V,getCurrentBranch:Tr,getDirection:Mr,getHead:Rr,setAccTitle:nr,getAccTitle:sr,getAccDescription:or,setAccDescription:cr,setDiagramTitle:ir,getDiagramTitle:dr},Ir=h((t,r)=>{Z(t,r),t.dir&&r.setDirection(t.dir);for(const a of t.statements)qr(a,r)},"populate"),qr=h((t,r)=>{const s={Commit:h(e=>r.commit(Or(e)),"Commit"),Branch:h(e=>r.branch(zr(e)),"Branch"),Merge:h(e=>r.merge(Gr(e)),"Merge"),Checkout:h(e=>r.checkout(Hr(e)),"Checkout"),CherryPicking:h(e=>r.cherryPick(Pr(e)),"CherryPicking")}[t.$type];s?s(t):w.error(`Unknown statement type: ${t.$type}`)},"parseStatement"),Or=h(t=>({id:t.id,msg:t.message??"",type:t.type!==void 0?p[t.type]:p.NORMAL,tags:t.tags??void 0}),"parseCommit"),zr=h(t=>({name:t.name,order:t.order??0}),"parseBranch"),Gr=h(t=>({branch:t.branch,id:t.id??"",type:t.type!==void 0?p[t.type]:void 0,tags:t.tags??void 0}),"parseMerge"),Hr=h(t=>t.branch,"parseCheckout"),Pr=h(t=>{var a;return{id:t.id,targetId:"",tags:((a=t.tags)==null?void 0:a.length)===0?void 0:t.tags,parent:t.parent}},"parseCherryPicking"),Wr={parse:h(async t=>{const r=await gr("gitGraph",t);w.debug(r),Ir(r,X)},"parse")},S=rr(),b=S==null?void 0:S.gitGraph,R=10,I=40,k=4,L=2,O=8,C=new Map,E=new Map,P=30,G=new Map,W=[],M=0,x="LR",jr=h(()=>{C.clear(),E.clear(),G.clear(),M=0,W=[],x="LR"},"clear"),J=h(t=>{const r=document.createElementNS("http://www.w3.org/2000/svg","text");return(typeof t=="string"?t.split(/\\n|\n|/gi):t).forEach(s=>{const e=document.createElementNS("http://www.w3.org/2000/svg","tspan");e.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),e.setAttribute("dy","1em"),e.setAttribute("x","0"),e.setAttribute("class","row"),e.textContent=s.trim(),r.appendChild(e)}),r},"drawText"),Q=h(t=>{let r,a,s;return x==="BT"?(a=h((e,n)=>e<=n,"comparisonFunc"),s=1/0):(a=h((e,n)=>e>=n,"comparisonFunc"),s=0),t.forEach(e=>{var c,o;const n=x==="TB"||x=="BT"?(c=E.get(e))==null?void 0:c.y:(o=E.get(e))==null?void 0:o.x;n!==void 0&&a(n,s)&&(r=e,s=n)}),r},"findClosestParent"),Sr=h(t=>{let r="",a=1/0;return t.forEach(s=>{const e=E.get(s).y;e<=a&&(r=s,a=e)}),r||void 0},"findClosestParentBT"),Ar=h((t,r,a)=>{let s=a,e=a;const n=[];t.forEach(c=>{const o=r.get(c);if(!o)throw new Error(`Commit not found for key ${c}`);o.parents.length?(s=Yr(o),e=Math.max(s,e)):n.push(o),Kr(o,s)}),s=e,n.forEach(c=>{Nr(c,s,a)}),t.forEach(c=>{const o=r.get(c);if(o!=null&&o.parents.length){const $=Sr(o.parents);s=E.get($).y-I,s<=e&&(e=s);const l=C.get(o.branch).pos,f=s-R;E.set(o.id,{x:l,y:f})}})},"setParallelBTPos"),Dr=h(t=>{var s;const r=Q(t.parents.filter(e=>e!==null));if(!r)throw new Error(`Closest parent not found for commit ${t.id}`);const a=(s=E.get(r))==null?void 0:s.y;if(a===void 0)throw new Error(`Closest parent position not found for commit ${t.id}`);return a},"findClosestParentPos"),Yr=h(t=>Dr(t)+I,"calculateCommitPosition"),Kr=h((t,r)=>{const a=C.get(t.branch);if(!a)throw new Error(`Branch not found for commit ${t.id}`);const s=a.pos,e=r+R;return E.set(t.id,{x:s,y:e}),{x:s,y:e}},"setCommitPosition"),Nr=h((t,r,a)=>{const s=C.get(t.branch);if(!s)throw new Error(`Branch not found for commit ${t.id}`);const e=r+a,n=s.pos;E.set(t.id,{x:n,y:e})},"setRootPosition"),_r=h((t,r,a,s,e,n)=>{if(n===p.HIGHLIGHT)t.append("rect").attr("x",a.x-10).attr("y",a.y-10).attr("width",20).attr("height",20).attr("class",`commit ${r.id} commit-highlight${e%O} ${s}-outer`),t.append("rect").attr("x",a.x-6).attr("y",a.y-6).attr("width",12).attr("height",12).attr("class",`commit ${r.id} commit${e%O} ${s}-inner`);else if(n===p.CHERRY_PICK)t.append("circle").attr("cx",a.x).attr("cy",a.y).attr("r",10).attr("class",`commit ${r.id} ${s}`),t.append("circle").attr("cx",a.x-3).attr("cy",a.y+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${r.id} ${s}`),t.append("circle").attr("cx",a.x+3).attr("cy",a.y+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${r.id} ${s}`),t.append("line").attr("x1",a.x+3).attr("y1",a.y+1).attr("x2",a.x).attr("y2",a.y-5).attr("stroke","#fff").attr("class",`commit ${r.id} ${s}`),t.append("line").attr("x1",a.x-3).attr("y1",a.y+1).attr("x2",a.x).attr("y2",a.y-5).attr("stroke","#fff").attr("class",`commit ${r.id} ${s}`);else{const c=t.append("circle");if(c.attr("cx",a.x),c.attr("cy",a.y),c.attr("r",r.type===p.MERGE?9:10),c.attr("class",`commit ${r.id} commit${e%O}`),n===p.MERGE){const o=t.append("circle");o.attr("cx",a.x),o.attr("cy",a.y),o.attr("r",6),o.attr("class",`commit ${s} ${r.id} commit${e%O}`)}n===p.REVERSE&&t.append("path").attr("d",`M ${a.x-5},${a.y-5}L${a.x+5},${a.y+5}M${a.x-5},${a.y+5}L${a.x+5},${a.y-5}`).attr("class",`commit ${s} ${r.id} commit${e%O}`)}},"drawCommitBullet"),Vr=h((t,r,a,s)=>{var e;if(r.type!==p.CHERRY_PICK&&(r.customId&&r.type===p.MERGE||r.type!==p.MERGE)&&(b!=null&&b.showCommitLabel)){const n=t.append("g"),c=n.insert("rect").attr("class","commit-label-bkg"),o=n.append("text").attr("x",s).attr("y",a.y+25).attr("class","commit-label").text(r.id),$=(e=o.node())==null?void 0:e.getBBox();if($&&(c.attr("x",a.posWithOffset-$.width/2-L).attr("y",a.y+13.5).attr("width",$.width+2*L).attr("height",$.height+2*L),x==="TB"||x==="BT"?(c.attr("x",a.x-($.width+4*k+5)).attr("y",a.y-12),o.attr("x",a.x-($.width+4*k)).attr("y",a.y+$.height-12)):o.attr("x",a.posWithOffset-$.width/2),b.rotateCommitLabel))if(x==="TB"||x==="BT")o.attr("transform","rotate(-45, "+a.x+", "+a.y+")"),c.attr("transform","rotate(-45, "+a.x+", "+a.y+")");else{const l=-7.5-($.width+10)/25*9.5,f=10+$.width/25*8.5;n.attr("transform","translate("+l+", "+f+") rotate(-45, "+s+", "+a.y+")")}}},"drawCommitLabel"),Xr=h((t,r,a,s)=>{var e;if(r.tags.length>0){let n=0,c=0,o=0;const $=[];for(const l of r.tags.reverse()){const f=t.insert("polygon"),g=t.append("circle"),d=t.append("text").attr("y",a.y-16-n).attr("class","tag-label").text(l),y=(e=d.node())==null?void 0:e.getBBox();if(!y)throw new Error("Tag bbox not found");c=Math.max(c,y.width),o=Math.max(o,y.height),d.attr("x",a.posWithOffset-y.width/2),$.push({tag:d,hole:g,rect:f,yOffset:n}),n+=20}for(const{tag:l,hole:f,rect:g,yOffset:d}of $){const y=o/2,u=a.y-19.2-d;if(g.attr("class","tag-label-bkg").attr("points",` + ${s-c/2-k/2},${u+L} + ${s-c/2-k/2},${u-L} + ${a.posWithOffset-c/2-k},${u-y-L} + ${a.posWithOffset+c/2+k},${u-y-L} + ${a.posWithOffset+c/2+k},${u+y+L} + ${a.posWithOffset-c/2-k},${u+y+L}`),f.attr("cy",u).attr("cx",s-c/2+k/2).attr("r",1.5).attr("class","tag-hole"),x==="TB"||x==="BT"){const m=s+d;g.attr("class","tag-label-bkg").attr("points",` + ${a.x},${m+2} + ${a.x},${m-2} + ${a.x+R},${m-y-2} + ${a.x+R+c+4},${m-y-2} + ${a.x+R+c+4},${m+y+2} + ${a.x+R},${m+y+2}`).attr("transform","translate(12,12) rotate(45, "+a.x+","+s+")"),f.attr("cx",a.x+k/2).attr("cy",m).attr("transform","translate(12,12) rotate(45, "+a.x+","+s+")"),l.attr("x",a.x+5).attr("y",m+3).attr("transform","translate(14,14) rotate(45, "+a.x+","+s+")")}}}},"drawCommitTags"),Jr=h(t=>{switch(t.customType??t.type){case p.NORMAL:return"commit-normal";case p.REVERSE:return"commit-reverse";case p.HIGHLIGHT:return"commit-highlight";case p.MERGE:return"commit-merge";case p.CHERRY_PICK:return"commit-cherry-pick";default:return"commit-normal"}},"getCommitClassType"),Qr=h((t,r,a,s)=>{const e={x:0,y:0};if(t.parents.length>0){const n=Q(t.parents);if(n){const c=s.get(n)??e;return r==="TB"?c.y+I:r==="BT"?(s.get(t.id)??e).y-I:c.x+I}}else return r==="TB"?P:r==="BT"?(s.get(t.id)??e).y-I:0;return 0},"calculatePosition"),Zr=h((t,r,a)=>{var c,o;const s=x==="BT"&&a?r:r+R,e=x==="TB"||x==="BT"?s:(c=C.get(t.branch))==null?void 0:c.pos,n=x==="TB"||x==="BT"?(o=C.get(t.branch))==null?void 0:o.pos:s;if(n===void 0||e===void 0)throw new Error(`Position were undefined for commit ${t.id}`);return{x:n,y:e,posWithOffset:s}},"getCommitPosition"),K=h((t,r,a)=>{if(!b)throw new Error("GitGraph config not found");const s=t.append("g").attr("class","commit-bullets"),e=t.append("g").attr("class","commit-labels");let n=x==="TB"||x==="BT"?P:0;const c=[...r.keys()],o=(b==null?void 0:b.parallelCommits)??!1,$=h((f,g)=>{var u,m;const d=(u=r.get(f))==null?void 0:u.seq,y=(m=r.get(g))==null?void 0:m.seq;return d!==void 0&&y!==void 0?d-y:0},"sortKeys");let l=c.sort($);x==="BT"&&(o&&Ar(l,r,n),l=l.reverse()),l.forEach(f=>{var y;const g=r.get(f);if(!g)throw new Error(`Commit not found for key ${f}`);o&&(n=Qr(g,x,n,E));const d=Zr(g,n,o);if(a){const u=Jr(g),m=g.customType??g.type,q=((y=C.get(g.branch))==null?void 0:y.index)??0;_r(s,g,d,u,q,m),Vr(e,g,d,n),Xr(e,g,d,n)}x==="TB"||x==="BT"?E.set(g.id,{x:d.x,y:d.posWithOffset}):E.set(g.id,{x:d.posWithOffset,y:d.y}),n=x==="BT"&&o?n+I:n+I+R,n>M&&(M=n)})},"drawCommits"),Fr=h((t,r,a,s,e)=>{const c=(x==="TB"||x==="BT"?a.xl.branch===c,"isOnBranchToGetCurve"),$=h(l=>l.seq>t.seq&&l.seq$(l)&&o(l))},"shouldRerouteArrow"),H=h((t,r,a=0)=>{const s=t+Math.abs(t-r)/2;if(a>5)return s;if(W.every(c=>Math.abs(c-s)>=10))return W.push(s),s;const n=Math.abs(t-r);return H(t,r-n/5,a+1)},"findLane"),Ur=h((t,r,a,s)=>{var y,u,m,q,Y;const e=E.get(r.id),n=E.get(a.id);if(e===void 0||n===void 0)throw new Error(`Commit positions not found for commits ${r.id} and ${a.id}`);const c=Fr(r,a,e,n,s);let o="",$="",l=0,f=0,g=(y=C.get(a.branch))==null?void 0:y.index;a.type===p.MERGE&&r.id!==a.parents[0]&&(g=(u=C.get(r.branch))==null?void 0:u.index);let d;if(c){o="A 10 10, 0, 0, 0,",$="A 10 10, 0, 0, 1,",l=10,f=10;const T=e.yn.x&&(o="A 20 20, 0, 0, 0,",$="A 20 20, 0, 0, 1,",l=20,f=20,a.type===p.MERGE&&r.id!==a.parents[0]?d=`M ${e.x} ${e.y} L ${e.x} ${n.y-l} ${$} ${e.x-f} ${n.y} L ${n.x} ${n.y}`:d=`M ${e.x} ${e.y} L ${n.x+l} ${e.y} ${o} ${n.x} ${e.y+f} L ${n.x} ${n.y}`),e.x===n.x&&(d=`M ${e.x} ${e.y} L ${n.x} ${n.y}`)):x==="BT"?(e.xn.x&&(o="A 20 20, 0, 0, 0,",$="A 20 20, 0, 0, 1,",l=20,f=20,a.type===p.MERGE&&r.id!==a.parents[0]?d=`M ${e.x} ${e.y} L ${e.x} ${n.y+l} ${o} ${e.x-f} ${n.y} L ${n.x} ${n.y}`:d=`M ${e.x} ${e.y} L ${n.x-l} ${e.y} ${o} ${n.x} ${e.y-f} L ${n.x} ${n.y}`),e.x===n.x&&(d=`M ${e.x} ${e.y} L ${n.x} ${n.y}`)):(e.yn.y&&(a.type===p.MERGE&&r.id!==a.parents[0]?d=`M ${e.x} ${e.y} L ${n.x-l} ${e.y} ${o} ${n.x} ${e.y-f} L ${n.x} ${n.y}`:d=`M ${e.x} ${e.y} L ${e.x} ${n.y+l} ${$} ${e.x+f} ${n.y} L ${n.x} ${n.y}`),e.y===n.y&&(d=`M ${e.x} ${e.y} L ${n.x} ${n.y}`));if(d===void 0)throw new Error("Line definition not found");t.append("path").attr("d",d).attr("class","arrow arrow"+g%O)},"drawArrow"),re=h((t,r)=>{const a=t.append("g").attr("class","commit-arrows");[...r.keys()].forEach(s=>{const e=r.get(s);e.parents&&e.parents.length>0&&e.parents.forEach(n=>{Ur(a,r.get(n),e,r)})})},"drawArrows"),ee=h((t,r)=>{const a=t.append("g");r.forEach((s,e)=>{var u;const n=e%O,c=(u=C.get(s.name))==null?void 0:u.pos;if(c===void 0)throw new Error(`Position not found for branch ${s.name}`);const o=a.append("line");o.attr("x1",0),o.attr("y1",c),o.attr("x2",M),o.attr("y2",c),o.attr("class","branch branch"+n),x==="TB"?(o.attr("y1",P),o.attr("x1",c),o.attr("y2",M),o.attr("x2",c)):x==="BT"&&(o.attr("y1",M),o.attr("x1",c),o.attr("y2",P),o.attr("x2",c)),W.push(c);const $=s.name,l=J($),f=a.insert("rect"),d=a.insert("g").attr("class","branchLabel").insert("g").attr("class","label branch-label"+n);d.node().appendChild(l);const y=l.getBBox();f.attr("class","branchLabelBkg label"+n).attr("rx",4).attr("ry",4).attr("x",-y.width-4-((b==null?void 0:b.rotateCommitLabel)===!0?30:0)).attr("y",-y.height/2+8).attr("width",y.width+18).attr("height",y.height+4),d.attr("transform","translate("+(-y.width-14-((b==null?void 0:b.rotateCommitLabel)===!0?30:0))+", "+(c-y.height/2-1)+")"),x==="TB"?(f.attr("x",c-y.width/2-10).attr("y",0),d.attr("transform","translate("+(c-y.width/2-5)+", 0)")):x==="BT"?(f.attr("x",c-y.width/2-10).attr("y",M),d.attr("transform","translate("+(c-y.width/2-5)+", "+M+")")):f.attr("transform","translate(-19, "+(c-y.height/2)+")")})},"drawBranches"),te=h(function(t,r,a,s,e){return C.set(t,{pos:r,index:a}),r+=50+(e?40:0)+(x==="TB"||x==="BT"?s.width/2:0),r},"setBranchPosition"),ae=h(function(t,r,a,s){if(jr(),w.debug("in gitgraph renderer",t+` +`,"id:",r,a),!b)throw new Error("GitGraph config not found");const e=b.rotateCommitLabel??!1,n=s.db;G=n.getCommits();const c=n.getBranchesAsObjArray();x=n.getDirection();const o=lr(`[id="${r}"]`);let $=0;c.forEach((l,f)=>{var q;const g=J(l.name),d=o.append("g"),y=d.insert("g").attr("class","branchLabel"),u=y.insert("g").attr("class","label branch-label");(q=u.node())==null||q.appendChild(g);const m=g.getBBox();$=te(l.name,$,f,m,e),u.remove(),y.remove(),d.remove()}),K(o,G,!1),b.showBranches&&ee(o,c),re(o,G),K(o,G,!0),$r.insertTitle(o,"gitTitleText",b.titleTopMargin??0,n.getDiagramTitle()),fr(void 0,o,b.diagramPadding,b.useMaxWidth)},"draw"),ne={draw:ae},se=h(t=>` + .commit-id, + .commit-msg, + .branch-label { + fill: lightgrey; + color: lightgrey; + font-family: 'trebuchet ms', verdana, arial, sans-serif; + font-family: var(--mermaid-font-family); + } + ${[0,1,2,3,4,5,6,7].map(r=>` + .branch-label${r} { fill: ${t["gitBranchLabel"+r]}; } + .commit${r} { stroke: ${t["git"+r]}; fill: ${t["git"+r]}; } + .commit-highlight${r} { stroke: ${t["gitInv"+r]}; fill: ${t["gitInv"+r]}; } + .label${r} { fill: ${t["git"+r]}; } + .arrow${r} { stroke: ${t["git"+r]}; } + `).join(` +`)} + + .branch { + stroke-width: 1; + stroke: ${t.lineColor}; + stroke-dasharray: 2; + } + .commit-label { font-size: ${t.commitLabelFontSize}; fill: ${t.commitLabelColor};} + .commit-label-bkg { font-size: ${t.commitLabelFontSize}; fill: ${t.commitLabelBackground}; opacity: 0.5; } + .tag-label { font-size: ${t.tagLabelFontSize}; fill: ${t.tagLabelColor};} + .tag-label-bkg { fill: ${t.tagLabelBackground}; stroke: ${t.tagLabelBorder}; } + .tag-hole { fill: ${t.textColor}; } + + .commit-merge { + stroke: ${t.primaryColor}; + fill: ${t.primaryColor}; + } + .commit-reverse { + stroke: ${t.primaryColor}; + fill: ${t.primaryColor}; + stroke-width: 3; + } + .commit-highlight-outer { + } + .commit-highlight-inner { + stroke: ${t.primaryColor}; + fill: ${t.primaryColor}; + } + + .arrow { stroke-width: 8; stroke-linecap: round; fill: none} + .gitTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${t.textColor}; + } +`,"getStyles"),oe=se,xe={parser:Wr,db:X,renderer:ne,styles:oe};export{xe as diagram}; diff --git a/assets/chunks/graph.Bl1hHz-h.js b/assets/chunks/graph.Bl1hHz-h.js new file mode 100644 index 000000000..1befdbd4a --- /dev/null +++ b/assets/chunks/graph.Bl1hHz-h.js @@ -0,0 +1 @@ +import{aq as N,ar as j,as as f,at as b,au as E}from"../app.D0Wo8w0i.js";import{a as v,c as P,k as _,f as g,d,i as l,v as p,r as D}from"./baseUniq.DoVpE4hx.js";var w=N(function(o){return v(P(o,1,j,!0))}),F="\0",a="\0",O="";class L{constructor(e={}){this._isDirected=Object.prototype.hasOwnProperty.call(e,"directed")?e.directed:!0,this._isMultigraph=Object.prototype.hasOwnProperty.call(e,"multigraph")?e.multigraph:!1,this._isCompound=Object.prototype.hasOwnProperty.call(e,"compound")?e.compound:!1,this._label=void 0,this._defaultNodeLabelFn=f(void 0),this._defaultEdgeLabelFn=f(void 0),this._nodes={},this._isCompound&&(this._parent={},this._children={},this._children[a]={}),this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={}}isDirected(){return this._isDirected}isMultigraph(){return this._isMultigraph}isCompound(){return this._isCompound}setGraph(e){return this._label=e,this}graph(){return this._label}setDefaultNodeLabel(e){return b(e)||(e=f(e)),this._defaultNodeLabelFn=e,this}nodeCount(){return this._nodeCount}nodes(){return _(this._nodes)}sources(){var e=this;return g(this.nodes(),function(t){return E(e._in[t])})}sinks(){var e=this;return g(this.nodes(),function(t){return E(e._out[t])})}setNodes(e,t){var s=arguments,i=this;return d(e,function(r){s.length>1?i.setNode(r,t):i.setNode(r)}),this}setNode(e,t){return Object.prototype.hasOwnProperty.call(this._nodes,e)?(arguments.length>1&&(this._nodes[e]=t),this):(this._nodes[e]=arguments.length>1?t:this._defaultNodeLabelFn(e),this._isCompound&&(this._parent[e]=a,this._children[e]={},this._children[a][e]=!0),this._in[e]={},this._preds[e]={},this._out[e]={},this._sucs[e]={},++this._nodeCount,this)}node(e){return this._nodes[e]}hasNode(e){return Object.prototype.hasOwnProperty.call(this._nodes,e)}removeNode(e){if(Object.prototype.hasOwnProperty.call(this._nodes,e)){var t=s=>this.removeEdge(this._edgeObjs[s]);delete this._nodes[e],this._isCompound&&(this._removeFromParentsChildList(e),delete this._parent[e],d(this.children(e),s=>{this.setParent(s)}),delete this._children[e]),d(_(this._in[e]),t),delete this._in[e],delete this._preds[e],d(_(this._out[e]),t),delete this._out[e],delete this._sucs[e],--this._nodeCount}return this}setParent(e,t){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(l(t))t=a;else{t+="";for(var s=t;!l(s);s=this.parent(s))if(s===e)throw new Error("Setting "+t+" as parent of "+e+" would create a cycle");this.setNode(t)}return this.setNode(e),this._removeFromParentsChildList(e),this._parent[e]=t,this._children[t][e]=!0,this}_removeFromParentsChildList(e){delete this._children[this._parent[e]][e]}parent(e){if(this._isCompound){var t=this._parent[e];if(t!==a)return t}}children(e){if(l(e)&&(e=a),this._isCompound){var t=this._children[e];if(t)return _(t)}else{if(e===a)return this.nodes();if(this.hasNode(e))return[]}}predecessors(e){var t=this._preds[e];if(t)return _(t)}successors(e){var t=this._sucs[e];if(t)return _(t)}neighbors(e){var t=this.predecessors(e);if(t)return w(t,this.successors(e))}isLeaf(e){var t;return this.isDirected()?t=this.successors(e):t=this.neighbors(e),t.length===0}filterNodes(e){var t=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});t.setGraph(this.graph());var s=this;d(this._nodes,function(n,h){e(h)&&t.setNode(h,n)}),d(this._edgeObjs,function(n){t.hasNode(n.v)&&t.hasNode(n.w)&&t.setEdge(n,s.edge(n))});var i={};function r(n){var h=s.parent(n);return h===void 0||t.hasNode(h)?(i[n]=h,h):h in i?i[h]:r(h)}return this._isCompound&&d(t.nodes(),function(n){t.setParent(n,r(n))}),t}setDefaultEdgeLabel(e){return b(e)||(e=f(e)),this._defaultEdgeLabelFn=e,this}edgeCount(){return this._edgeCount}edges(){return p(this._edgeObjs)}setPath(e,t){var s=this,i=arguments;return D(e,function(r,n){return i.length>1?s.setEdge(r,n,t):s.setEdge(r,n),n}),this}setEdge(){var e,t,s,i,r=!1,n=arguments[0];typeof n=="object"&&n!==null&&"v"in n?(e=n.v,t=n.w,s=n.name,arguments.length===2&&(i=arguments[1],r=!0)):(e=n,t=arguments[1],s=arguments[3],arguments.length>2&&(i=arguments[2],r=!0)),e=""+e,t=""+t,l(s)||(s=""+s);var h=c(this._isDirected,e,t,s);if(Object.prototype.hasOwnProperty.call(this._edgeLabels,h))return r&&(this._edgeLabels[h]=i),this;if(!l(s)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(e),this.setNode(t),this._edgeLabels[h]=r?i:this._defaultEdgeLabelFn(e,t,s);var u=M(this._isDirected,e,t,s);return e=u.v,t=u.w,Object.freeze(u),this._edgeObjs[h]=u,y(this._preds[t],e),y(this._sucs[e],t),this._in[t][h]=u,this._out[e][h]=u,this._edgeCount++,this}edge(e,t,s){var i=arguments.length===1?m(this._isDirected,arguments[0]):c(this._isDirected,e,t,s);return this._edgeLabels[i]}hasEdge(e,t,s){var i=arguments.length===1?m(this._isDirected,arguments[0]):c(this._isDirected,e,t,s);return Object.prototype.hasOwnProperty.call(this._edgeLabels,i)}removeEdge(e,t,s){var i=arguments.length===1?m(this._isDirected,arguments[0]):c(this._isDirected,e,t,s),r=this._edgeObjs[i];return r&&(e=r.v,t=r.w,delete this._edgeLabels[i],delete this._edgeObjs[i],C(this._preds[t],e),C(this._sucs[e],t),delete this._in[t][i],delete this._out[e][i],this._edgeCount--),this}inEdges(e,t){var s=this._in[e];if(s){var i=p(s);return t?g(i,function(r){return r.v===t}):i}}outEdges(e,t){var s=this._out[e];if(s){var i=p(s);return t?g(i,function(r){return r.w===t}):i}}nodeEdges(e,t){var s=this.inEdges(e,t);if(s)return s.concat(this.outEdges(e,t))}}L.prototype._nodeCount=0;L.prototype._edgeCount=0;function y(o,e){o[e]?o[e]++:o[e]=1}function C(o,e){--o[e]||delete o[e]}function c(o,e,t,s){var i=""+e,r=""+t;if(!o&&i>r){var n=i;i=r,r=n}return i+O+r+O+(l(s)?F:s)}function M(o,e,t,s){var i=""+e,r=""+t;if(!o&&i>r){var n=i;i=r,r=n}var h={v:i,w:r};return s&&(h.name=s),h}function m(o,e){return c(o,e.v,e.w,e.name)}export{L as G}; diff --git a/assets/chunks/infoDiagram-P5D6MX3V.DP1qtp8R.js b/assets/chunks/infoDiagram-P5D6MX3V.DP1qtp8R.js new file mode 100644 index 000000000..ff5f2b1b8 --- /dev/null +++ b/assets/chunks/infoDiagram-P5D6MX3V.DP1qtp8R.js @@ -0,0 +1,2 @@ +import{_ as e,l as o,I as i,k as n,K as p}from"../app.D0Wo8w0i.js";import{p as g}from"./gitGraph-YCYPL57B.CgYFJ7dL.js";import"./framework.B1keMFNq.js";import"./theme.8WvZWF-M.js";import"./baseUniq.DoVpE4hx.js";import"./basePickBy.BafM5tVf.js";import"./clone.CgQKvgpz.js";var m={parse:e(async r=>{const a=await g("info",r);o.debug(a)},"parse")},v={version:p},d=e(()=>v.version,"getVersion"),c={getVersion:d},l=e((r,a,s)=>{o.debug(`rendering info diagram +`+r);const t=i(a);n(t,100,400,!0),t.append("g").append("text").attr("x",100).attr("y",40).attr("class","version").attr("font-size",32).style("text-anchor","middle").text(`v${s}`)},"draw"),f={draw:l},D={parser:m,db:c,renderer:f};export{D as diagram}; diff --git a/assets/chunks/init.Gi6I4Gst.js b/assets/chunks/init.Gi6I4Gst.js new file mode 100644 index 000000000..d44de9416 --- /dev/null +++ b/assets/chunks/init.Gi6I4Gst.js @@ -0,0 +1 @@ +function t(e,a){switch(arguments.length){case 0:break;case 1:this.range(e);break;default:this.range(a).domain(e);break}return this}export{t as i}; diff --git a/assets/chunks/journeyDiagram-UIGPPNLY.DUlHwSYt.js b/assets/chunks/journeyDiagram-UIGPPNLY.DUlHwSYt.js new file mode 100644 index 000000000..b4f32c03e --- /dev/null +++ b/assets/chunks/journeyDiagram-UIGPPNLY.DUlHwSYt.js @@ -0,0 +1,139 @@ +import{d as ft,f as gt,g as at,b as mt}from"./chunk-VCFP4HPQ.DyTG-ln4.js";import{_ as i,d as A,q as xt,r as kt,s as _t,g as vt,c as bt,b as wt,x as Tt,j as W,k as St}from"../app.D0Wo8w0i.js";import{d as tt}from"./arc.DjT8Zpi0.js";import"./framework.B1keMFNq.js";import"./theme.8WvZWF-M.js";var H=function(){var t=i(function(g,r,a,l){for(a=a||{},l=g.length;l--;a[g[l]]=r);return a},"o"),e=[6,8,10,11,12,14,16,17,18],n=[1,9],c=[1,10],s=[1,11],u=[1,12],h=[1,13],p=[1,14],d={trace:i(function(){},"trace"),yy:{},symbols_:{error:2,start:3,journey:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,taskName:18,taskData:19,$accept:0,$end:1},terminals_:{2:"error",4:"journey",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",18:"taskName",19:"taskData"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,2]],performAction:i(function(r,a,l,y,f,o,S){var _=o.length-1;switch(f){case 1:return o[_-1];case 2:this.$=[];break;case 3:o[_-1].push(o[_]),this.$=o[_-1];break;case 4:case 5:this.$=o[_];break;case 6:case 7:this.$=[];break;case 8:y.setDiagramTitle(o[_].substr(6)),this.$=o[_].substr(6);break;case 9:this.$=o[_].trim(),y.setAccTitle(this.$);break;case 10:case 11:this.$=o[_].trim(),y.setAccDescription(this.$);break;case 12:y.addSection(o[_].substr(8)),this.$=o[_].substr(8);break;case 13:y.addTask(o[_-1],o[_]),this.$="task";break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:n,12:c,14:s,16:u,17:h,18:p},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:15,11:n,12:c,14:s,16:u,17:h,18:p},t(e,[2,5]),t(e,[2,6]),t(e,[2,8]),{13:[1,16]},{15:[1,17]},t(e,[2,11]),t(e,[2,12]),{19:[1,18]},t(e,[2,4]),t(e,[2,9]),t(e,[2,10]),t(e,[2,13])],defaultActions:{},parseError:i(function(r,a){if(a.recoverable)this.trace(r);else{var l=new Error(r);throw l.hash=a,l}},"parseError"),parse:i(function(r){var a=this,l=[0],y=[],f=[null],o=[],S=this.table,_="",B=0,J=0,ut=2,K=1,yt=o.slice.call(arguments,1),k=Object.create(this.lexer),E={yy:{}};for(var O in this.yy)Object.prototype.hasOwnProperty.call(this.yy,O)&&(E.yy[O]=this.yy[O]);k.setInput(r,E.yy),E.yy.lexer=k,E.yy.parser=this,typeof k.yylloc>"u"&&(k.yylloc={});var Y=k.yylloc;o.push(Y);var dt=k.options&&k.options.ranges;typeof E.yy.parseError=="function"?this.parseError=E.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function pt(b){l.length=l.length-2*b,f.length=f.length-b,o.length=o.length-b}i(pt,"popStack");function Q(){var b;return b=y.pop()||k.lex()||K,typeof b!="number"&&(b instanceof Array&&(y=b,b=y.pop()),b=a.symbols_[b]||b),b}i(Q,"lex");for(var v,P,w,q,C={},j,M,D,N;;){if(P=l[l.length-1],this.defaultActions[P]?w=this.defaultActions[P]:((v===null||typeof v>"u")&&(v=Q()),w=S[P]&&S[P][v]),typeof w>"u"||!w.length||!w[0]){var G="";N=[];for(j in S[P])this.terminals_[j]&&j>ut&&N.push("'"+this.terminals_[j]+"'");k.showPosition?G="Parse error on line "+(B+1)+`: +`+k.showPosition()+` +Expecting `+N.join(", ")+", got '"+(this.terminals_[v]||v)+"'":G="Parse error on line "+(B+1)+": Unexpected "+(v==K?"end of input":"'"+(this.terminals_[v]||v)+"'"),this.parseError(G,{text:k.match,token:this.terminals_[v]||v,line:k.yylineno,loc:Y,expected:N})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+P+", token: "+v);switch(w[0]){case 1:l.push(v),f.push(k.yytext),o.push(k.yylloc),l.push(w[1]),v=null,J=k.yyleng,_=k.yytext,B=k.yylineno,Y=k.yylloc;break;case 2:if(M=this.productions_[w[1]][1],C.$=f[f.length-M],C._$={first_line:o[o.length-(M||1)].first_line,last_line:o[o.length-1].last_line,first_column:o[o.length-(M||1)].first_column,last_column:o[o.length-1].last_column},dt&&(C._$.range=[o[o.length-(M||1)].range[0],o[o.length-1].range[1]]),q=this.performAction.apply(C,[_,J,B,E.yy,w[1],f,o].concat(yt)),typeof q<"u")return q;M&&(l=l.slice(0,-1*M*2),f=f.slice(0,-1*M),o=o.slice(0,-1*M)),l.push(this.productions_[w[1]][0]),f.push(C.$),o.push(C._$),D=S[l[l.length-2]][l[l.length-1]],l.push(D);break;case 3:return!0}}return!0},"parse")},x=function(){var g={EOF:1,parseError:i(function(a,l){if(this.yy.parser)this.yy.parser.parseError(a,l);else throw new Error(a)},"parseError"),setInput:i(function(r,a){return this.yy=a||this.yy||{},this._input=r,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:i(function(){var r=this._input[0];this.yytext+=r,this.yyleng++,this.offset++,this.match+=r,this.matched+=r;var a=r.match(/(?:\r\n?|\n).*/g);return a?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),r},"input"),unput:i(function(r){var a=r.length,l=r.split(/(?:\r\n?|\n)/g);this._input=r+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-a),this.offset-=a;var y=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),l.length-1&&(this.yylineno-=l.length-1);var f=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:l?(l.length===y.length?this.yylloc.first_column:0)+y[y.length-l.length].length-l[0].length:this.yylloc.first_column-a},this.options.ranges&&(this.yylloc.range=[f[0],f[0]+this.yyleng-a]),this.yyleng=this.yytext.length,this},"unput"),more:i(function(){return this._more=!0,this},"more"),reject:i(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:i(function(r){this.unput(this.match.slice(r))},"less"),pastInput:i(function(){var r=this.matched.substr(0,this.matched.length-this.match.length);return(r.length>20?"...":"")+r.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:i(function(){var r=this.match;return r.length<20&&(r+=this._input.substr(0,20-r.length)),(r.substr(0,20)+(r.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:i(function(){var r=this.pastInput(),a=new Array(r.length+1).join("-");return r+this.upcomingInput()+` +`+a+"^"},"showPosition"),test_match:i(function(r,a){var l,y,f;if(this.options.backtrack_lexer&&(f={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(f.yylloc.range=this.yylloc.range.slice(0))),y=r[0].match(/(?:\r\n?|\n).*/g),y&&(this.yylineno+=y.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:y?y[y.length-1].length-y[y.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+r[0].length},this.yytext+=r[0],this.match+=r[0],this.matches=r,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(r[0].length),this.matched+=r[0],l=this.performAction.call(this,this.yy,this,a,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),l)return l;if(this._backtrack){for(var o in f)this[o]=f[o];return!1}return!1},"test_match"),next:i(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var r,a,l,y;this._more||(this.yytext="",this.match="");for(var f=this._currentRules(),o=0;oa[0].length)){if(a=l,y=o,this.options.backtrack_lexer){if(r=this.test_match(l,f[o]),r!==!1)return r;if(this._backtrack){a=!1;continue}else return!1}else if(!this.options.flex)break}return a?(r=this.test_match(a,f[y]),r!==!1?r:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:i(function(){var a=this.next();return a||this.lex()},"lex"),begin:i(function(a){this.conditionStack.push(a)},"begin"),popState:i(function(){var a=this.conditionStack.length-1;return a>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:i(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:i(function(a){return a=this.conditionStack.length-1-Math.abs(a||0),a>=0?this.conditionStack[a]:"INITIAL"},"topState"),pushState:i(function(a){this.begin(a)},"pushState"),stateStackSize:i(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:i(function(a,l,y,f){switch(y){case 0:break;case 1:break;case 2:return 10;case 3:break;case 4:break;case 5:return 4;case 6:return 11;case 7:return this.begin("acc_title"),12;case 8:return this.popState(),"acc_title_value";case 9:return this.begin("acc_descr"),14;case 10:return this.popState(),"acc_descr_value";case 11:this.begin("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 17;case 15:return 18;case 16:return 19;case 17:return":";case 18:return 6;case 19:return"INVALID"}},"anonymous"),rules:[/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:journey\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,9,11,14,15,16,17,18,19],inclusive:!0}}};return g}();d.lexer=x;function m(){this.yy={}}return i(m,"Parser"),m.prototype=d,d.Parser=m,new m}();H.parser=H;var Mt=H,V="",U=[],R=[],F=[],$t=i(function(){U.length=0,R.length=0,V="",F.length=0,Tt()},"clear"),Et=i(function(t){V=t,U.push(t)},"addSection"),Pt=i(function(){return U},"getSections"),It=i(function(){let t=et();const e=100;let n=0;for(;!t&&n{n.people&&t.push(...n.people)}),[...new Set(t)].sort()},"updateActors"),Ct=i(function(t,e){const n=e.substr(1).split(":");let c=0,s=[];n.length===1?(c=Number(n[0]),s=[]):(c=Number(n[0]),s=n[1].split(","));const u=s.map(p=>p.trim()),h={section:V,type:V,people:u,task:t,score:c};F.push(h)},"addTask"),Vt=i(function(t){const e={section:V,type:V,description:t,task:t,classes:[]};R.push(e)},"addTaskOrg"),et=i(function(){const t=i(function(n){return F[n].processed},"compileTask");let e=!0;for(const[n,c]of F.entries())t(n),e=e&&c.processed;return e},"compileTasks"),Rt=i(function(){return At()},"getActors"),rt={getConfig:i(()=>A().journey,"getConfig"),clear:$t,setDiagramTitle:xt,getDiagramTitle:kt,setAccTitle:_t,getAccTitle:vt,setAccDescription:bt,getAccDescription:wt,addSection:Et,getSections:Pt,getTasks:It,addTask:Ct,addTaskOrg:Vt,getActors:Rt},Ft=i(t=>`.label { + font-family: 'trebuchet ms', verdana, arial, sans-serif; + font-family: var(--mermaid-font-family); + color: ${t.textColor}; + } + .mouth { + stroke: #666; + } + + line { + stroke: ${t.textColor} + } + + .legend { + fill: ${t.textColor}; + } + + .label text { + fill: #333; + } + .label { + color: ${t.textColor} + } + + .face { + ${t.faceColor?`fill: ${t.faceColor}`:"fill: #FFF8DC"}; + stroke: #999; + } + + .node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${t.mainBkg}; + stroke: ${t.nodeBorder}; + stroke-width: 1px; + } + + .node .label { + text-align: center; + } + .node.clickable { + cursor: pointer; + } + + .arrowheadPath { + fill: ${t.arrowheadColor}; + } + + .edgePath .path { + stroke: ${t.lineColor}; + stroke-width: 1.5px; + } + + .flowchart-link { + stroke: ${t.lineColor}; + fill: none; + } + + .edgeLabel { + background-color: ${t.edgeLabelBackground}; + rect { + opacity: 0.5; + } + text-align: center; + } + + .cluster rect { + } + + .cluster text { + fill: ${t.titleColor}; + } + + div.mermaidTooltip { + position: absolute; + text-align: center; + max-width: 200px; + padding: 2px; + font-family: 'trebuchet ms', verdana, arial, sans-serif; + font-family: var(--mermaid-font-family); + font-size: 12px; + background: ${t.tertiaryColor}; + border: 1px solid ${t.border2}; + border-radius: 2px; + pointer-events: none; + z-index: 100; + } + + .task-type-0, .section-type-0 { + ${t.fillType0?`fill: ${t.fillType0}`:""}; + } + .task-type-1, .section-type-1 { + ${t.fillType0?`fill: ${t.fillType1}`:""}; + } + .task-type-2, .section-type-2 { + ${t.fillType0?`fill: ${t.fillType2}`:""}; + } + .task-type-3, .section-type-3 { + ${t.fillType0?`fill: ${t.fillType3}`:""}; + } + .task-type-4, .section-type-4 { + ${t.fillType0?`fill: ${t.fillType4}`:""}; + } + .task-type-5, .section-type-5 { + ${t.fillType0?`fill: ${t.fillType5}`:""}; + } + .task-type-6, .section-type-6 { + ${t.fillType0?`fill: ${t.fillType6}`:""}; + } + .task-type-7, .section-type-7 { + ${t.fillType0?`fill: ${t.fillType7}`:""}; + } + + .actor-0 { + ${t.actor0?`fill: ${t.actor0}`:""}; + } + .actor-1 { + ${t.actor1?`fill: ${t.actor1}`:""}; + } + .actor-2 { + ${t.actor2?`fill: ${t.actor2}`:""}; + } + .actor-3 { + ${t.actor3?`fill: ${t.actor3}`:""}; + } + .actor-4 { + ${t.actor4?`fill: ${t.actor4}`:""}; + } + .actor-5 { + ${t.actor5?`fill: ${t.actor5}`:""}; + } +`,"getStyles"),Lt=Ft,Z=i(function(t,e){return ft(t,e)},"drawRect"),Bt=i(function(t,e){const c=t.append("circle").attr("cx",e.cx).attr("cy",e.cy).attr("class","face").attr("r",15).attr("stroke-width",2).attr("overflow","visible"),s=t.append("g");s.append("circle").attr("cx",e.cx-15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),s.append("circle").attr("cx",e.cx+15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666");function u(d){const x=tt().startAngle(Math.PI/2).endAngle(3*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);d.append("path").attr("class","mouth").attr("d",x).attr("transform","translate("+e.cx+","+(e.cy+2)+")")}i(u,"smile");function h(d){const x=tt().startAngle(3*Math.PI/2).endAngle(5*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);d.append("path").attr("class","mouth").attr("d",x).attr("transform","translate("+e.cx+","+(e.cy+7)+")")}i(h,"sad");function p(d){d.append("line").attr("class","mouth").attr("stroke",2).attr("x1",e.cx-5).attr("y1",e.cy+7).attr("x2",e.cx+5).attr("y2",e.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}return i(p,"ambivalent"),e.score>3?u(s):e.score<3?h(s):p(s),c},"drawFace"),lt=i(function(t,e){const n=t.append("circle");return n.attr("cx",e.cx),n.attr("cy",e.cy),n.attr("class","actor-"+e.pos),n.attr("fill",e.fill),n.attr("stroke",e.stroke),n.attr("r",e.r),n.class!==void 0&&n.attr("class",n.class),e.title!==void 0&&n.append("title").text(e.title),n},"drawCircle"),ot=i(function(t,e){return gt(t,e)},"drawText"),jt=i(function(t,e){function n(s,u,h,p,d){return s+","+u+" "+(s+h)+","+u+" "+(s+h)+","+(u+p-d)+" "+(s+h-d*1.2)+","+(u+p)+" "+s+","+(u+p)}i(n,"genPoints");const c=t.append("polygon");c.attr("points",n(e.x,e.y,50,20,7)),c.attr("class","labelBox"),e.y=e.y+e.labelMargin,e.x=e.x+.5*e.labelMargin,ot(t,e)},"drawLabel"),Nt=i(function(t,e,n){const c=t.append("g"),s=at();s.x=e.x,s.y=e.y,s.fill=e.fill,s.width=n.width*e.taskCount+n.diagramMarginX*(e.taskCount-1),s.height=n.height,s.class="journey-section section-type-"+e.num,s.rx=3,s.ry=3,Z(c,s),ct(n)(e.text,c,s.x,s.y,s.width,s.height,{class:"journey-section section-type-"+e.num},n,e.colour)},"drawSection"),st=-1,zt=i(function(t,e,n){const c=e.x+n.width/2,s=t.append("g");st++;const u=300+5*30;s.append("line").attr("id","task"+st).attr("x1",c).attr("y1",e.y).attr("x2",c).attr("y2",u).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),Bt(s,{cx:c,cy:300+(5-e.score)*30,score:e.score});const h=at();h.x=e.x,h.y=e.y,h.fill=e.fill,h.width=n.width,h.height=n.height,h.class="task task-type-"+e.num,h.rx=3,h.ry=3,Z(s,h);let p=e.x+14;e.people.forEach(d=>{const x=e.actors[d].color,m={cx:p,cy:e.y,r:7,fill:x,stroke:"#000",title:d,pos:e.actors[d].position};lt(s,m),p+=10}),ct(n)(e.task,s,h.x,h.y,h.width,h.height,{class:"task"},n,e.colour)},"drawTask"),Ot=i(function(t,e){mt(t,e)},"drawBackgroundRect"),ct=function(){function t(s,u,h,p,d,x,m,g){const r=u.append("text").attr("x",h+d/2).attr("y",p+x/2+5).style("font-color",g).style("text-anchor","middle").text(s);c(r,m)}i(t,"byText");function e(s,u,h,p,d,x,m,g,r){const{taskFontSize:a,taskFontFamily:l}=g,y=s.split(//gi);for(let f=0;f{const s=$[c].color,u={cx:20,cy:n,r:7,fill:s,stroke:"#000",pos:$[c].position};L.drawCircle(t,u);const h={x:40,y:n+7,fill:"#666",text:c,textMargin:e.boxTextMargin|5};L.drawText(t,h),n+=20})}i(ht,"drawActorLegend");var z=A().journey,I=z.leftMargin,Gt=i(function(t,e,n,c){const s=A().journey,u=A().securityLevel;let h;u==="sandbox"&&(h=W("#i"+e));const p=u==="sandbox"?W(h.nodes()[0].contentDocument.body):W("body");T.init();const d=p.select("#"+e);L.initGraphics(d);const x=c.db.getTasks(),m=c.db.getDiagramTitle(),g=c.db.getActors();for(const o in $)delete $[o];let r=0;g.forEach(o=>{$[o]={color:s.actorColours[r%s.actorColours.length],position:r},r++}),ht(d),T.insert(0,0,I,Object.keys($).length*50),Wt(d,x,0);const a=T.getBounds();m&&d.append("text").text(m).attr("x",I).attr("font-size","4ex").attr("font-weight","bold").attr("y",25);const l=a.stopy-a.starty+2*s.diagramMarginY,y=I+a.stopx+2*s.diagramMarginX;St(d,l,y,s.useMaxWidth),d.append("line").attr("x1",I).attr("y1",s.height*4).attr("x2",y-I-4).attr("y2",s.height*4).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)");const f=m?70:0;d.attr("viewBox",`${a.startx} -25 ${y} ${l+f}`),d.attr("preserveAspectRatio","xMinYMin meet"),d.attr("height",l+f+25)},"draw"),T={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],init:i(function(){this.sequenceItems=[],this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0},"init"),updateVal:i(function(t,e,n,c){t[e]===void 0?t[e]=n:t[e]=c(n,t[e])},"updateVal"),updateBounds:i(function(t,e,n,c){const s=A().journey,u=this;let h=0;function p(d){return i(function(m){h++;const g=u.sequenceItems.length-h+1;u.updateVal(m,"starty",e-g*s.boxMargin,Math.min),u.updateVal(m,"stopy",c+g*s.boxMargin,Math.max),u.updateVal(T.data,"startx",t-g*s.boxMargin,Math.min),u.updateVal(T.data,"stopx",n+g*s.boxMargin,Math.max),d!=="activation"&&(u.updateVal(m,"startx",t-g*s.boxMargin,Math.min),u.updateVal(m,"stopx",n+g*s.boxMargin,Math.max),u.updateVal(T.data,"starty",e-g*s.boxMargin,Math.min),u.updateVal(T.data,"stopy",c+g*s.boxMargin,Math.max))},"updateItemBounds")}i(p,"updateFn"),this.sequenceItems.forEach(p())},"updateBounds"),insert:i(function(t,e,n,c){const s=Math.min(t,n),u=Math.max(t,n),h=Math.min(e,c),p=Math.max(e,c);this.updateVal(T.data,"startx",s,Math.min),this.updateVal(T.data,"starty",h,Math.min),this.updateVal(T.data,"stopx",u,Math.max),this.updateVal(T.data,"stopy",p,Math.max),this.updateBounds(s,h,u,p)},"insert"),bumpVerticalPos:i(function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=this.verticalPos},"bumpVerticalPos"),getVerticalPos:i(function(){return this.verticalPos},"getVerticalPos"),getBounds:i(function(){return this.data},"getBounds")},X=z.sectionFills,it=z.sectionColours,Wt=i(function(t,e,n){const c=A().journey;let s="";const u=c.height*2+c.diagramMarginY,h=n+u;let p=0,d="#CCC",x="black",m=0;for(const[g,r]of e.entries()){if(s!==r.section){d=X[p%X.length],m=p%X.length,x=it[p%it.length];let l=0;const y=r.section;for(let o=g;o($[y]&&(l[y]=$[y]),l),{});r.x=g*c.taskMargin+g*c.width+I,r.y=h,r.width=c.diagramMarginX,r.height=c.diagramMarginY,r.colour=x,r.fill=d,r.num=m,r.actors=a,L.drawTask(t,r,c),T.insert(r.x,r.y,r.x+r.width+c.taskMargin,300+5*30)}},"drawTasks"),nt={setConf:qt,draw:Gt},Kt={parser:Mt,db:rt,renderer:nt,styles:Lt,init:i(t=>{nt.setConf(t.journey),rt.clear()},"init")};export{Kt as diagram}; diff --git a/assets/chunks/kanban-definition-KMT3NSR2.DtNpbUem.js b/assets/chunks/kanban-definition-KMT3NSR2.DtNpbUem.js new file mode 100644 index 000000000..3a35cc2ff --- /dev/null +++ b/assets/chunks/kanban-definition-KMT3NSR2.DtNpbUem.js @@ -0,0 +1,88 @@ +import{_ as c,l as te,d as W,I as fe,ag as ye,ah as be,ai as me,ac as _e,D as Y,i as G,t as Ee,J as ke,ad as Se,ae as le,af as ce}from"../app.D0Wo8w0i.js";import"./framework.B1keMFNq.js";import"./theme.8WvZWF-M.js";var $=function(){var t=c(function(_,s,n,a){for(n=n||{},a=_.length;a--;n[_[a]]=s);return n},"o"),g=[1,4],d=[1,13],r=[1,12],p=[1,15],E=[1,16],f=[1,20],h=[1,19],L=[6,7,8],C=[1,26],w=[1,24],N=[1,25],i=[6,7,11],M=[1,31],x=[6,7,11,24],P=[1,6,13,16,17,20,23],U=[1,35],j=[1,36],A=[1,6,7,11,13,16,17,20,23],H=[1,38],V={trace:c(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mindMap:4,spaceLines:5,SPACELINE:6,NL:7,KANBAN:8,document:9,stop:10,EOF:11,statement:12,SPACELIST:13,node:14,shapeData:15,ICON:16,CLASS:17,nodeWithId:18,nodeWithoutId:19,NODE_DSTART:20,NODE_DESCR:21,NODE_DEND:22,NODE_ID:23,SHAPE_DATA:24,$accept:0,$end:1},terminals_:{2:"error",6:"SPACELINE",7:"NL",8:"KANBAN",11:"EOF",13:"SPACELIST",16:"ICON",17:"CLASS",20:"NODE_DSTART",21:"NODE_DESCR",22:"NODE_DEND",23:"NODE_ID",24:"SHAPE_DATA"},productions_:[0,[3,1],[3,2],[5,1],[5,2],[5,2],[4,2],[4,3],[10,1],[10,1],[10,1],[10,2],[10,2],[9,3],[9,2],[12,3],[12,2],[12,2],[12,2],[12,1],[12,2],[12,1],[12,1],[12,1],[12,1],[14,1],[14,1],[19,3],[18,1],[18,4],[15,2],[15,1]],performAction:c(function(s,n,a,o,u,e,B){var l=e.length-1;switch(u){case 6:case 7:return o;case 8:o.getLogger().trace("Stop NL ");break;case 9:o.getLogger().trace("Stop EOF ");break;case 11:o.getLogger().trace("Stop NL2 ");break;case 12:o.getLogger().trace("Stop EOF2 ");break;case 15:o.getLogger().info("Node: ",e[l-1].id),o.addNode(e[l-2].length,e[l-1].id,e[l-1].descr,e[l-1].type,e[l]);break;case 16:o.getLogger().info("Node: ",e[l].id),o.addNode(e[l-1].length,e[l].id,e[l].descr,e[l].type);break;case 17:o.getLogger().trace("Icon: ",e[l]),o.decorateNode({icon:e[l]});break;case 18:case 23:o.decorateNode({class:e[l]});break;case 19:o.getLogger().trace("SPACELIST");break;case 20:o.getLogger().trace("Node: ",e[l-1].id),o.addNode(0,e[l-1].id,e[l-1].descr,e[l-1].type,e[l]);break;case 21:o.getLogger().trace("Node: ",e[l].id),o.addNode(0,e[l].id,e[l].descr,e[l].type);break;case 22:o.decorateNode({icon:e[l]});break;case 27:o.getLogger().trace("node found ..",e[l-2]),this.$={id:e[l-1],descr:e[l-1],type:o.getType(e[l-2],e[l])};break;case 28:this.$={id:e[l],descr:e[l],type:0};break;case 29:o.getLogger().trace("node found ..",e[l-3]),this.$={id:e[l-3],descr:e[l-1],type:o.getType(e[l-2],e[l])};break;case 30:this.$=e[l-1]+e[l];break;case 31:this.$=e[l];break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],8:g},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:g},{6:d,7:[1,10],9:9,12:11,13:r,14:14,16:p,17:E,18:17,19:18,20:f,23:h},t(L,[2,3]),{1:[2,2]},t(L,[2,4]),t(L,[2,5]),{1:[2,6],6:d,12:21,13:r,14:14,16:p,17:E,18:17,19:18,20:f,23:h},{6:d,9:22,12:11,13:r,14:14,16:p,17:E,18:17,19:18,20:f,23:h},{6:C,7:w,10:23,11:N},t(i,[2,24],{18:17,19:18,14:27,16:[1,28],17:[1,29],20:f,23:h}),t(i,[2,19]),t(i,[2,21],{15:30,24:M}),t(i,[2,22]),t(i,[2,23]),t(x,[2,25]),t(x,[2,26]),t(x,[2,28],{20:[1,32]}),{21:[1,33]},{6:C,7:w,10:34,11:N},{1:[2,7],6:d,12:21,13:r,14:14,16:p,17:E,18:17,19:18,20:f,23:h},t(P,[2,14],{7:U,11:j}),t(A,[2,8]),t(A,[2,9]),t(A,[2,10]),t(i,[2,16],{15:37,24:M}),t(i,[2,17]),t(i,[2,18]),t(i,[2,20],{24:H}),t(x,[2,31]),{21:[1,39]},{22:[1,40]},t(P,[2,13],{7:U,11:j}),t(A,[2,11]),t(A,[2,12]),t(i,[2,15],{24:H}),t(x,[2,30]),{22:[1,41]},t(x,[2,27]),t(x,[2,29])],defaultActions:{2:[2,1],6:[2,2]},parseError:c(function(s,n){if(n.recoverable)this.trace(s);else{var a=new Error(s);throw a.hash=n,a}},"parseError"),parse:c(function(s){var n=this,a=[0],o=[],u=[null],e=[],B=this.table,l="",z=0,ie=0,ue=2,re=1,ge=e.slice.call(arguments,1),b=Object.create(this.lexer),T={yy:{}};for(var J in this.yy)Object.prototype.hasOwnProperty.call(this.yy,J)&&(T.yy[J]=this.yy[J]);b.setInput(s,T.yy),T.yy.lexer=b,T.yy.parser=this,typeof b.yylloc>"u"&&(b.yylloc={});var q=b.yylloc;e.push(q);var de=b.options&&b.options.ranges;typeof T.yy.parseError=="function"?this.parseError=T.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function pe(S){a.length=a.length-2*S,u.length=u.length-S,e.length=e.length-S}c(pe,"popStack");function ae(){var S;return S=o.pop()||b.lex()||re,typeof S!="number"&&(S instanceof Array&&(o=S,S=o.pop()),S=n.symbols_[S]||S),S}c(ae,"lex");for(var k,R,v,Q,F={},X,I,oe,K;;){if(R=a[a.length-1],this.defaultActions[R]?v=this.defaultActions[R]:((k===null||typeof k>"u")&&(k=ae()),v=B[R]&&B[R][k]),typeof v>"u"||!v.length||!v[0]){var Z="";K=[];for(X in B[R])this.terminals_[X]&&X>ue&&K.push("'"+this.terminals_[X]+"'");b.showPosition?Z="Parse error on line "+(z+1)+`: +`+b.showPosition()+` +Expecting `+K.join(", ")+", got '"+(this.terminals_[k]||k)+"'":Z="Parse error on line "+(z+1)+": Unexpected "+(k==re?"end of input":"'"+(this.terminals_[k]||k)+"'"),this.parseError(Z,{text:b.match,token:this.terminals_[k]||k,line:b.yylineno,loc:q,expected:K})}if(v[0]instanceof Array&&v.length>1)throw new Error("Parse Error: multiple actions possible at state: "+R+", token: "+k);switch(v[0]){case 1:a.push(k),u.push(b.yytext),e.push(b.yylloc),a.push(v[1]),k=null,ie=b.yyleng,l=b.yytext,z=b.yylineno,q=b.yylloc;break;case 2:if(I=this.productions_[v[1]][1],F.$=u[u.length-I],F._$={first_line:e[e.length-(I||1)].first_line,last_line:e[e.length-1].last_line,first_column:e[e.length-(I||1)].first_column,last_column:e[e.length-1].last_column},de&&(F._$.range=[e[e.length-(I||1)].range[0],e[e.length-1].range[1]]),Q=this.performAction.apply(F,[l,ie,z,T.yy,v[1],u,e].concat(ge)),typeof Q<"u")return Q;I&&(a=a.slice(0,-1*I*2),u=u.slice(0,-1*I),e=e.slice(0,-1*I)),a.push(this.productions_[v[1]][0]),u.push(F.$),e.push(F._$),oe=B[a[a.length-2]][a[a.length-1]],a.push(oe);break;case 3:return!0}}return!0},"parse")},m=function(){var _={EOF:1,parseError:c(function(n,a){if(this.yy.parser)this.yy.parser.parseError(n,a);else throw new Error(n)},"parseError"),setInput:c(function(s,n){return this.yy=n||this.yy||{},this._input=s,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:c(function(){var s=this._input[0];this.yytext+=s,this.yyleng++,this.offset++,this.match+=s,this.matched+=s;var n=s.match(/(?:\r\n?|\n).*/g);return n?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),s},"input"),unput:c(function(s){var n=s.length,a=s.split(/(?:\r\n?|\n)/g);this._input=s+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-n),this.offset-=n;var o=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),a.length-1&&(this.yylineno-=a.length-1);var u=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:a?(a.length===o.length?this.yylloc.first_column:0)+o[o.length-a.length].length-a[0].length:this.yylloc.first_column-n},this.options.ranges&&(this.yylloc.range=[u[0],u[0]+this.yyleng-n]),this.yyleng=this.yytext.length,this},"unput"),more:c(function(){return this._more=!0,this},"more"),reject:c(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:c(function(s){this.unput(this.match.slice(s))},"less"),pastInput:c(function(){var s=this.matched.substr(0,this.matched.length-this.match.length);return(s.length>20?"...":"")+s.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:c(function(){var s=this.match;return s.length<20&&(s+=this._input.substr(0,20-s.length)),(s.substr(0,20)+(s.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:c(function(){var s=this.pastInput(),n=new Array(s.length+1).join("-");return s+this.upcomingInput()+` +`+n+"^"},"showPosition"),test_match:c(function(s,n){var a,o,u;if(this.options.backtrack_lexer&&(u={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(u.yylloc.range=this.yylloc.range.slice(0))),o=s[0].match(/(?:\r\n?|\n).*/g),o&&(this.yylineno+=o.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:o?o[o.length-1].length-o[o.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+s[0].length},this.yytext+=s[0],this.match+=s[0],this.matches=s,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(s[0].length),this.matched+=s[0],a=this.performAction.call(this,this.yy,this,n,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),a)return a;if(this._backtrack){for(var e in u)this[e]=u[e];return!1}return!1},"test_match"),next:c(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var s,n,a,o;this._more||(this.yytext="",this.match="");for(var u=this._currentRules(),e=0;en[0].length)){if(n=a,o=e,this.options.backtrack_lexer){if(s=this.test_match(a,u[e]),s!==!1)return s;if(this._backtrack){n=!1;continue}else return!1}else if(!this.options.flex)break}return n?(s=this.test_match(n,u[o]),s!==!1?s:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:c(function(){var n=this.next();return n||this.lex()},"lex"),begin:c(function(n){this.conditionStack.push(n)},"begin"),popState:c(function(){var n=this.conditionStack.length-1;return n>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:c(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:c(function(n){return n=this.conditionStack.length-1-Math.abs(n||0),n>=0?this.conditionStack[n]:"INITIAL"},"topState"),pushState:c(function(n){this.begin(n)},"pushState"),stateStackSize:c(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:c(function(n,a,o,u){switch(o){case 0:return this.pushState("shapeData"),a.yytext="",24;case 1:return this.pushState("shapeDataStr"),24;case 2:return this.popState(),24;case 3:const e=/\n\s*/g;return a.yytext=a.yytext.replace(e,"
    "),24;case 4:return 24;case 5:this.popState();break;case 6:return n.getLogger().trace("Found comment",a.yytext),6;case 7:return 8;case 8:this.begin("CLASS");break;case 9:return this.popState(),17;case 10:this.popState();break;case 11:n.getLogger().trace("Begin icon"),this.begin("ICON");break;case 12:return n.getLogger().trace("SPACELINE"),6;case 13:return 7;case 14:return 16;case 15:n.getLogger().trace("end icon"),this.popState();break;case 16:return n.getLogger().trace("Exploding node"),this.begin("NODE"),20;case 17:return n.getLogger().trace("Cloud"),this.begin("NODE"),20;case 18:return n.getLogger().trace("Explosion Bang"),this.begin("NODE"),20;case 19:return n.getLogger().trace("Cloud Bang"),this.begin("NODE"),20;case 20:return this.begin("NODE"),20;case 21:return this.begin("NODE"),20;case 22:return this.begin("NODE"),20;case 23:return this.begin("NODE"),20;case 24:return 13;case 25:return 23;case 26:return 11;case 27:this.begin("NSTR2");break;case 28:return"NODE_DESCR";case 29:this.popState();break;case 30:n.getLogger().trace("Starting NSTR"),this.begin("NSTR");break;case 31:return n.getLogger().trace("description:",a.yytext),"NODE_DESCR";case 32:this.popState();break;case 33:return this.popState(),n.getLogger().trace("node end ))"),"NODE_DEND";case 34:return this.popState(),n.getLogger().trace("node end )"),"NODE_DEND";case 35:return this.popState(),n.getLogger().trace("node end ...",a.yytext),"NODE_DEND";case 36:return this.popState(),n.getLogger().trace("node end (("),"NODE_DEND";case 37:return this.popState(),n.getLogger().trace("node end (-"),"NODE_DEND";case 38:return this.popState(),n.getLogger().trace("node end (-"),"NODE_DEND";case 39:return this.popState(),n.getLogger().trace("node end (("),"NODE_DEND";case 40:return this.popState(),n.getLogger().trace("node end (("),"NODE_DEND";case 41:return n.getLogger().trace("Long description:",a.yytext),21;case 42:return n.getLogger().trace("Long description:",a.yytext),21}},"anonymous"),rules:[/^(?:@\{)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^\"]+)/i,/^(?:[^}^"]+)/i,/^(?:\})/i,/^(?:\s*%%.*)/i,/^(?:kanban\b)/i,/^(?::::)/i,/^(?:.+)/i,/^(?:\n)/i,/^(?:::icon\()/i,/^(?:[\s]+[\n])/i,/^(?:[\n]+)/i,/^(?:[^\)]+)/i,/^(?:\))/i,/^(?:-\))/i,/^(?:\(-)/i,/^(?:\)\))/i,/^(?:\))/i,/^(?:\(\()/i,/^(?:\{\{)/i,/^(?:\()/i,/^(?:\[)/i,/^(?:[\s]+)/i,/^(?:[^\(\[\n\)\{\}@]+)/i,/^(?:$)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:[^"]+)/i,/^(?:["])/i,/^(?:[\)]\))/i,/^(?:[\)])/i,/^(?:[\]])/i,/^(?:\}\})/i,/^(?:\(-)/i,/^(?:-\))/i,/^(?:\(\()/i,/^(?:\()/i,/^(?:[^\)\]\(\}]+)/i,/^(?:.+(?!\(\())/i],conditions:{shapeDataEndBracket:{rules:[],inclusive:!1},shapeDataStr:{rules:[2,3],inclusive:!1},shapeData:{rules:[1,4,5],inclusive:!1},CLASS:{rules:[9,10],inclusive:!1},ICON:{rules:[14,15],inclusive:!1},NSTR2:{rules:[28,29],inclusive:!1},NSTR:{rules:[31,32],inclusive:!1},NODE:{rules:[27,30,33,34,35,36,37,38,39,40,41,42],inclusive:!1},INITIAL:{rules:[0,6,7,8,11,12,13,16,17,18,19,20,21,22,23,24,25,26],inclusive:!0}}};return _}();V.lexer=m;function O(){this.yy={}}return c(O,"Parser"),O.prototype=V,V.Parser=O,new O}();$.parser=$;var Ne=$,D=[],ne=[],ee=0,se={},xe=c(()=>{D=[],ne=[],ee=0,se={}},"clear"),ve=c(t=>{if(D.length===0)return null;const g=D[0].level;let d=null;for(let r=D.length-1;r>=0;r--)if(D[r].level===g&&!d&&(d=D[r]),D[r].levelh.parentId===p.id);for(const h of f){const L={id:h.id,parentId:p.id,label:G(h.label??"",r),isGroup:!1,ticket:h==null?void 0:h.ticket,priority:h==null?void 0:h.priority,assigned:h==null?void 0:h.assigned,icon:h==null?void 0:h.icon,shape:"kanbanItem",level:h.level,rx:5,ry:5,cssStyles:["text-align: left"]};g.push(L)}}return{nodes:g,edges:t,other:{},config:W()}},"getData"),Le=c((t,g,d,r,p)=>{var C,w;const E=W();let f=((C=E.mindmap)==null?void 0:C.padding)??Y.mindmap.padding;switch(r){case y.ROUNDED_RECT:case y.RECT:case y.HEXAGON:f*=2}const h={id:G(g,E)||"kbn"+ee++,level:t,label:G(d,E),width:((w=E.mindmap)==null?void 0:w.maxNodeWidth)??Y.mindmap.maxNodeWidth,padding:f,isGroup:!1};if(p!==void 0){let N;p.includes(` +`)?N=p+` +`:N=`{ +`+p+` +}`;const i=Ee(N,{schema:ke});if(i.shape&&(i.shape!==i.shape.toLowerCase()||i.shape.includes("_")))throw new Error(`No such shape: ${i.shape}. Shape names should be lowercase.`);i!=null&&i.shape&&i.shape==="kanbanItem"&&(h.shape=i==null?void 0:i.shape),i!=null&&i.label&&(h.label=i==null?void 0:i.label),i!=null&&i.icon&&(h.icon=i==null?void 0:i.icon),i!=null&&i.assigned&&(h.assigned=i==null?void 0:i.assigned),i!=null&&i.ticket&&(h.ticket=i==null?void 0:i.ticket),i!=null&&i.priority&&(h.priority=i==null?void 0:i.priority)}const L=ve(t);L?h.parentId=L.id||"kbn"+ee++:ne.push(h),D.push(h)},"addNode"),y={DEFAULT:0,NO_BORDER:0,ROUNDED_RECT:1,RECT:2,CIRCLE:3,CLOUD:4,BANG:5,HEXAGON:6},Oe=c((t,g)=>{switch(te.debug("In get type",t,g),t){case"[":return y.RECT;case"(":return g===")"?y.ROUNDED_RECT:y.CLOUD;case"((":return y.CIRCLE;case")":return y.CLOUD;case"))":return y.BANG;case"{{":return y.HEXAGON;default:return y.DEFAULT}},"getType"),Ie=c((t,g)=>{se[t]=g},"setElementForId"),Ce=c(t=>{if(!t)return;const g=W(),d=D[D.length-1];t.icon&&(d.icon=G(t.icon,g)),t.class&&(d.cssClasses=G(t.class,g))},"decorateNode"),we=c(t=>{switch(t){case y.DEFAULT:return"no-border";case y.RECT:return"rect";case y.ROUNDED_RECT:return"rounded-rect";case y.CIRCLE:return"circle";case y.CLOUD:return"cloud";case y.BANG:return"bang";case y.HEXAGON:return"hexgon";default:return"no-border"}},"type2Str"),Ae=c(()=>te,"getLogger"),Te=c(t=>se[t],"getElementById"),Re={clear:xe,addNode:Le,getSections:he,getData:De,nodeType:y,getType:Oe,setElementForId:Ie,decorateNode:Ce,type2Str:we,getLogger:Ae,getElementById:Te},Pe=Re,Ve=c(async(t,g,d,r)=>{var U,j,A,H,V;te.debug(`Rendering kanban diagram +`+t);const E=r.db.getData(),f=W();f.htmlLabels=!1;const h=fe(g),L=h.append("g");L.attr("class","sections");const C=h.append("g");C.attr("class","items");const w=E.nodes.filter(m=>m.isGroup);let N=0;const i=10,M=[];let x=25;for(const m of w){const O=((U=f==null?void 0:f.kanban)==null?void 0:U.sectionWidth)||200;N=N+1,m.x=O*N+(N-1)*i/2,m.width=O,m.y=0,m.height=O*3,m.rx=5,m.ry=5,m.cssClasses=m.cssClasses+" section-"+N;const _=await ye(L,m);x=Math.max(x,(j=_==null?void 0:_.labelBBox)==null?void 0:j.height),M.push(_)}let P=0;for(const m of w){const O=M[P];P=P+1;const _=((A=f==null?void 0:f.kanban)==null?void 0:A.sectionWidth)||200,s=-_*3/2+x;let n=s;const a=E.nodes.filter(e=>e.parentId===m.id);for(const e of a){if(e.isGroup)throw new Error("Groups within groups are not allowed in Kanban diagrams");e.x=m.x,e.width=_-1.5*i;const l=(await be(C,e,{config:f})).node().getBBox();e.y=n+l.height/2,await me(e),n=e.y+l.height/2+i/2}const o=O.cluster.select("rect"),u=Math.max(n-s+3*i,50)+(x-25);o.attr("height",u)}_e(void 0,h,((H=f.mindmap)==null?void 0:H.padding)??Y.kanban.padding,((V=f.mindmap)==null?void 0:V.useMaxWidth)??Y.kanban.useMaxWidth)},"draw"),Be={draw:Ve},Fe=c(t=>{let g="";for(let r=0;rt.darkMode?ce(r,p):le(r,p),"adjuster");for(let r=0;r` + .edge { + stroke-width: 3; + } + ${Fe(t)} + .section-root rect, .section-root path, .section-root circle, .section-root polygon { + fill: ${t.git0}; + } + .section-root text { + fill: ${t.gitBranchLabel0}; + } + .icon-container { + height:100%; + display: flex; + justify-content: center; + align-items: center; + } + .edge { + fill: none; + } + .cluster-label, .label { + color: ${t.textColor}; + fill: ${t.textColor}; + } + .kanban-label { + dy: 1em; + alignment-baseline: middle; + text-anchor: middle; + dominant-baseline: middle; + text-align: center; + } +`,"getStyles"),Me=Ge,We={db:Pe,renderer:Be,parser:Ne,styles:Me};export{We as diagram}; diff --git a/assets/chunks/katex.CvgdMzdh.js b/assets/chunks/katex.CvgdMzdh.js new file mode 100644 index 000000000..b7fdcb9e7 --- /dev/null +++ b/assets/chunks/katex.CvgdMzdh.js @@ -0,0 +1,261 @@ +class u0{constructor(e,t,a){this.lexer=void 0,this.start=void 0,this.end=void 0,this.lexer=e,this.start=t,this.end=a}static range(e,t){return t?!e||!e.loc||!t.loc||e.loc.lexer!==t.loc.lexer?null:new u0(e.loc.lexer,e.loc.start,t.loc.end):e&&e.loc}}class f0{constructor(e,t){this.text=void 0,this.loc=void 0,this.noexpand=void 0,this.treatAsRelax=void 0,this.text=e,this.loc=t}range(e,t){return new f0(t,u0.range(this,e))}}class M{constructor(e,t){this.name=void 0,this.position=void 0,this.length=void 0,this.rawMessage=void 0;var a="KaTeX parse error: "+e,n,s,o=t&&t.loc;if(o&&o.start<=o.end){var h=o.lexer.input;n=o.start,s=o.end,n===h.length?a+=" at end of input: ":a+=" at position "+(n+1)+": ";var c=h.slice(n,s).replace(/[^]/g,"$&̲"),p;n>15?p="…"+h.slice(n-15,n):p=h.slice(0,n);var g;s+15":">","<":"<",'"':""","'":"'"},ba=/[&><"']/g;function ya(r){return String(r).replace(ba,e=>ga[e])}var pr=function r(e){return e.type==="ordgroup"||e.type==="color"?e.body.length===1?r(e.body[0]):e:e.type==="font"?r(e.body):e},xa=function(e){var t=pr(e);return t.type==="mathord"||t.type==="textord"||t.type==="atom"},wa=function(e){if(!e)throw new Error("Expected non-null, but got "+String(e));return e},ka=function(e){var t=/^[\x00-\x20]*([^\\/#?]*?)(:|�*58|�*3a|&colon)/i.exec(e);return t?t[2]!==":"||!/^[a-zA-Z][a-zA-Z0-9+\-.]*$/.test(t[1])?null:t[1].toLowerCase():"_relative"},q={contains:da,deflt:fa,escape:ya,hyphenate:va,getBaseElem:pr,isCharacterBox:xa,protocolFromUrl:ka},ze={displayMode:{type:"boolean",description:"Render math in display mode, which puts the math in display style (so \\int and \\sum are large, for example), and centers the math on the page on its own line.",cli:"-d, --display-mode"},output:{type:{enum:["htmlAndMathml","html","mathml"]},description:"Determines the markup language of the output.",cli:"-F, --format "},leqno:{type:"boolean",description:"Render display math in leqno style (left-justified tags)."},fleqn:{type:"boolean",description:"Render display math flush left."},throwOnError:{type:"boolean",default:!0,cli:"-t, --no-throw-on-error",cliDescription:"Render errors (in the color given by --error-color) instead of throwing a ParseError exception when encountering an error."},errorColor:{type:"string",default:"#cc0000",cli:"-c, --error-color ",cliDescription:"A color string given in the format 'rgb' or 'rrggbb' (no #). This option determines the color of errors rendered by the -t option.",cliProcessor:r=>"#"+r},macros:{type:"object",cli:"-m, --macro ",cliDescription:"Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).",cliDefault:[],cliProcessor:(r,e)=>(e.push(r),e)},minRuleThickness:{type:"number",description:"Specifies a minimum thickness, in ems, for fraction lines, `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, `\\hdashline`, `\\underline`, `\\overline`, and the borders of `\\fbox`, `\\boxed`, and `\\fcolorbox`.",processor:r=>Math.max(0,r),cli:"--min-rule-thickness ",cliProcessor:parseFloat},colorIsTextColor:{type:"boolean",description:"Makes \\color behave like LaTeX's 2-argument \\textcolor, instead of LaTeX's one-argument \\color mode change.",cli:"-b, --color-is-text-color"},strict:{type:[{enum:["warn","ignore","error"]},"boolean","function"],description:"Turn on strict / LaTeX faithfulness mode, which throws an error if the input uses features that are not supported by LaTeX.",cli:"-S, --strict",cliDefault:!1},trust:{type:["boolean","function"],description:"Trust the input, enabling all HTML features such as \\url.",cli:"-T, --trust"},maxSize:{type:"number",default:1/0,description:"If non-zero, all user-specified sizes, e.g. in \\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, elements and spaces can be arbitrarily large",processor:r=>Math.max(0,r),cli:"-s, --max-size ",cliProcessor:parseInt},maxExpand:{type:"number",default:1e3,description:"Limit the number of macro expansions to the specified number, to prevent e.g. infinite macro loops. If set to Infinity, the macro expander will try to fully expand as in LaTeX.",processor:r=>Math.max(0,r),cli:"-e, --max-expand ",cliProcessor:r=>r==="Infinity"?1/0:parseInt(r)},globalGroup:{type:"boolean",cli:!1}};function Sa(r){if(r.default)return r.default;var e=r.type,t=Array.isArray(e)?e[0]:e;if(typeof t!="string")return t.enum[0];switch(t){case"boolean":return!1;case"string":return"";case"number":return 0;case"object":return{}}}class ct{constructor(e){this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.minRuleThickness=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.trust=void 0,this.maxSize=void 0,this.maxExpand=void 0,this.globalGroup=void 0,e=e||{};for(var t in ze)if(ze.hasOwnProperty(t)){var a=ze[t];this[t]=e[t]!==void 0?a.processor?a.processor(e[t]):e[t]:Sa(a)}}reportNonstrict(e,t,a){var n=this.strict;if(typeof n=="function"&&(n=n(e,t,a)),!(!n||n==="ignore")){if(n===!0||n==="error")throw new M("LaTeX-incompatible input and strict mode is set to 'error': "+(t+" ["+e+"]"),a);n==="warn"?typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(t+" ["+e+"]")):typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+n+"': "+t+" ["+e+"]"))}}useStrictBehavior(e,t,a){var n=this.strict;if(typeof n=="function")try{n=n(e,t,a)}catch{n="error"}return!n||n==="ignore"?!1:n===!0||n==="error"?!0:n==="warn"?(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(t+" ["+e+"]")),!1):(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+n+"': "+t+" ["+e+"]")),!1)}isTrusted(e){if(e.url&&!e.protocol){var t=q.protocolFromUrl(e.url);if(t==null)return!1;e.protocol=t}var a=typeof this.trust=="function"?this.trust(e):this.trust;return!!a}}class O0{constructor(e,t,a){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=e,this.size=t,this.cramped=a}sup(){return y0[Ma[this.id]]}sub(){return y0[za[this.id]]}fracNum(){return y0[Aa[this.id]]}fracDen(){return y0[Ta[this.id]]}cramp(){return y0[Ba[this.id]]}text(){return y0[Da[this.id]]}isTight(){return this.size>=2}}var dt=0,Te=1,_0=2,T0=3,le=4,d0=5,ee=6,n0=7,y0=[new O0(dt,0,!1),new O0(Te,0,!0),new O0(_0,1,!1),new O0(T0,1,!0),new O0(le,2,!1),new O0(d0,2,!0),new O0(ee,3,!1),new O0(n0,3,!0)],Ma=[le,d0,le,d0,ee,n0,ee,n0],za=[d0,d0,d0,d0,n0,n0,n0,n0],Aa=[_0,T0,le,d0,ee,n0,ee,n0],Ta=[T0,T0,d0,d0,n0,n0,n0,n0],Ba=[Te,Te,T0,T0,d0,d0,n0,n0],Da=[dt,Te,_0,T0,_0,T0,_0,T0],R={DISPLAY:y0[dt],TEXT:y0[_0],SCRIPT:y0[le],SCRIPTSCRIPT:y0[ee]},at=[{name:"latin",blocks:[[256,591],[768,879]]},{name:"cyrillic",blocks:[[1024,1279]]},{name:"armenian",blocks:[[1328,1423]]},{name:"brahmic",blocks:[[2304,4255]]},{name:"georgian",blocks:[[4256,4351]]},{name:"cjk",blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:"hangul",blocks:[[44032,55215]]}];function Ca(r){for(var e=0;e=n[0]&&r<=n[1])return t.name}return null}var Ae=[];at.forEach(r=>r.blocks.forEach(e=>Ae.push(...e)));function vr(r){for(var e=0;e=Ae[e]&&r<=Ae[e+1])return!0;return!1}var Q0=80,Na=function(e,t){return"M95,"+(622+e+t)+` +c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14 +c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54 +c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10 +s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429 +c69,-144,104.5,-217.7,106.5,-221 +l`+e/2.075+" -"+e+` +c5.3,-9.3,12,-14,20,-14 +H400000v`+(40+e)+`H845.2724 +s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7 +c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z +M`+(834+e)+" "+t+"h400000v"+(40+e)+"h-400000z"},qa=function(e,t){return"M263,"+(601+e+t)+`c0.7,0,18,39.7,52,119 +c34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120 +c340,-704.7,510.7,-1060.3,512,-1067 +l`+e/2.084+" -"+e+` +c4.7,-7.3,11,-11,19,-11 +H40000v`+(40+e)+`H1012.3 +s-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232 +c-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1 +s-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26 +c-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z +M`+(1001+e)+" "+t+"h400000v"+(40+e)+"h-400000z"},Ea=function(e,t){return"M983 "+(10+e+t)+` +l`+e/3.13+" -"+e+` +c4,-6.7,10,-10,18,-10 H400000v`+(40+e)+` +H1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7 +s-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744 +c-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30 +c26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722 +c56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5 +c53.7,-170.3,84.5,-266.8,92.5,-289.5z +M`+(1001+e)+" "+t+"h400000v"+(40+e)+"h-400000z"},Ra=function(e,t){return"M424,"+(2398+e+t)+` +c-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514 +c0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20 +s-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121 +s209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081 +l`+e/4.223+" -"+e+`c4,-6.7,10,-10,18,-10 H400000 +v`+(40+e)+`H1014.6 +s-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185 +c-2,6,-10,9,-24,9 +c-8,0,-12,-0.7,-12,-2z M`+(1001+e)+" "+t+` +h400000v`+(40+e)+"h-400000z"},Ia=function(e,t){return"M473,"+(2713+e+t)+` +c339.3,-1799.3,509.3,-2700,510,-2702 l`+e/5.298+" -"+e+` +c3.3,-7.3,9.3,-11,18,-11 H400000v`+(40+e)+`H1017.7 +s-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9 +c-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200 +c0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26 +s76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104, +606zM`+(1001+e)+" "+t+"h400000v"+(40+e)+"H1017.7z"},Oa=function(e){var t=e/2;return"M400000 "+e+" H0 L"+t+" 0 l65 45 L145 "+(e-80)+" H400000z"},Fa=function(e,t,a){var n=a-54-t-e;return"M702 "+(e+t)+"H400000"+(40+e)+` +H742v`+n+`l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1 +h-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170 +c-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667 +219 661 l218 661zM702 `+t+"H400000v"+(40+e)+"H742z"},Ha=function(e,t,a){t=1e3*t;var n="";switch(e){case"sqrtMain":n=Na(t,Q0);break;case"sqrtSize1":n=qa(t,Q0);break;case"sqrtSize2":n=Ea(t,Q0);break;case"sqrtSize3":n=Ra(t,Q0);break;case"sqrtSize4":n=Ia(t,Q0);break;case"sqrtTall":n=Fa(t,Q0,a)}return n},La=function(e,t){switch(e){case"⎜":return"M291 0 H417 V"+t+" H291z M291 0 H417 V"+t+" H291z";case"∣":return"M145 0 H188 V"+t+" H145z M145 0 H188 V"+t+" H145z";case"∥":return"M145 0 H188 V"+t+" H145z M145 0 H188 V"+t+" H145z"+("M367 0 H410 V"+t+" H367z M367 0 H410 V"+t+" H367z");case"⎟":return"M457 0 H583 V"+t+" H457z M457 0 H583 V"+t+" H457z";case"⎢":return"M319 0 H403 V"+t+" H319z M319 0 H403 V"+t+" H319z";case"⎥":return"M263 0 H347 V"+t+" H263z M263 0 H347 V"+t+" H263z";case"⎪":return"M384 0 H504 V"+t+" H384z M384 0 H504 V"+t+" H384z";case"⏐":return"M312 0 H355 V"+t+" H312z M312 0 H355 V"+t+" H312z";case"‖":return"M257 0 H300 V"+t+" H257z M257 0 H300 V"+t+" H257z"+("M478 0 H521 V"+t+" H478z M478 0 H521 V"+t+" H478z");default:return""}},It={doubleleftarrow:`M262 157 +l10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3 + 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28 + 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5 +c2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5 + 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87 +-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7 +-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z +m8 0v40h399730v-40zm0 194v40h399730v-40z`,doublerightarrow:`M399738 392l +-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5 + 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88 +-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68 +-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18 +-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782 +c-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3 +-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z`,leftarrow:`M400000 241H110l3-3c68.7-52.7 113.7-120 + 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8 +-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247 +c-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208 + 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3 + 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202 + l-3-3h399890zM100 241v40h399900v-40z`,leftbrace:`M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117 +-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7 + 5-6 9-10 13-.7 1-7.3 1-20 1H6z`,leftbraceunder:`M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13 + 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688 + 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7 +-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z`,leftgroup:`M400000 80 +H435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0 + 435 0h399565z`,leftgroupunder:`M400000 262 +H435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219 + 435 219h399565z`,leftharpoon:`M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3 +-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5 +-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7 +-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z`,leftharpoonplus:`M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5 + 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3 +-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7 +-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z +m0 0v40h400000v-40z`,leftharpoondown:`M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333 + 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5 + 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667 +-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z`,leftharpoondownplus:`M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12 + 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7 +-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0 +v40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z`,lefthook:`M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5 +-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3 +-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21 + 71.5 23h399859zM103 281v-40h399897v40z`,leftlinesegment:`M40 281 V428 H0 V94 H40 V241 H400000 v40z +M40 281 V428 H0 V94 H40 V241 H400000 v40z`,leftmapsto:`M40 281 V448H0V74H40V241H400000v40z +M40 281 V448H0V74H40V241H400000v40z`,leftToFrom:`M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23 +-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8 +c28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3 + 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z`,longequal:`M0 50 h400000 v40H0z m0 194h40000v40H0z +M0 50 h400000 v40H0z m0 194h40000v40H0z`,midbrace:`M200428 334 +c-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14 +-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7 + 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11 + 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z`,midbraceunder:`M199572 214 +c100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14 + 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3 + 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0 +-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z`,oiintSize1:`M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6 +-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z +m368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8 +60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z`,oiintSize2:`M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8 +-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z +m502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2 +c0 110 84 276 504 276s502.4-166 502.4-276z`,oiiintSize1:`M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6 +-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z +m525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0 +85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z`,oiiintSize2:`M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8 +-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z +m770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1 +c0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z`,rightarrow:`M0 241v40h399891c-47.3 35.3-84 78-110 128 +-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 + 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 + 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85 +-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5 +-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 + 151.7 139 205zm0 0v40h399900v-40z`,rightbrace:`M400000 542l +-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5 +s-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1 +c124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z`,rightbraceunder:`M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3 + 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237 +-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z`,rightgroup:`M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0 + 3-1 3-3v-38c-76-158-257-219-435-219H0z`,rightgroupunder:`M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18 + 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z`,rightharpoon:`M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3 +-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2 +-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 + 69.2 92 94.5zm0 0v40h399900v-40z`,rightharpoonplus:`M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11 +-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7 + 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z +m0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z`,rightharpoondown:`M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8 + 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5 +-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95 +-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z`,rightharpoondownplus:`M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8 + 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 + 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3 +-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z +m0-194v40h400000v-40zm0 0v40h400000v-40z`,righthook:`M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3 + 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0 +-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21 + 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z`,rightlinesegment:`M399960 241 V94 h40 V428 h-40 V281 H0 v-40z +M399960 241 V94 h40 V428 h-40 V281 H0 v-40z`,rightToFrom:`M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23 + 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32 +-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142 +-167z M100 147v40h399900v-40zM0 341v40h399900v-40z`,twoheadleftarrow:`M0 167c68 40 + 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69 +-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3 +-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19 +-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101 + 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z`,twoheadrightarrow:`M400000 167 +c-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3 + 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42 + 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333 +-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70 + 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z`,tilde1:`M200 55.538c-77 0-168 73.953-177 73.953-3 0-7 +-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0 + 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0 + 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128 +-68.267.847-113-73.952-191-73.952z`,tilde2:`M344 55.266c-142 0-300.638 81.316-311.5 86.418 +-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9 + 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114 +c1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751 + 181.476 676 181.476c-149 0-189-126.21-332-126.21z`,tilde3:`M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457 +-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0 + 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697 + 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696 + -338 0-409-156.573-744-156.573z`,tilde4:`M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345 +-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409 + 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9 + 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409 + -175.236-744-175.236z`,vec:`M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5 +3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11 +10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63 +-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1 +-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59 +H213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359 +c-16-25.333-24-45-24-59z`,widehat1:`M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22 +c-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z`,widehat2:`M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10 +-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widehat3:`M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10 +-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widehat4:`M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10 +-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widecheck1:`M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1, +-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z`,widecheck2:`M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, +-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,widecheck3:`M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, +-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,widecheck4:`M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, +-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,baraboveleftarrow:`M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202 +c4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5 +c-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130 +s-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47 +121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6 +s2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11 +c0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z +M100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z`,rightarrowabovebar:`M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32 +-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0 +13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39 +-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5 +-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5 +-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 +151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z`,baraboveshortleftharpoon:`M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11 +c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17 +c2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21 +c-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40 +c-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z +M0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z`,rightharpoonaboveshortbar:`M0,241 l0,40c399126,0,399993,0,399993,0 +c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199, +-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6 +c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z +M0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z`,shortbaraboveleftharpoon:`M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11 +c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9, +1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7, +-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z +M93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z`,shortrightharpoonabovebar:`M53,241l0,40c398570,0,399437,0,399437,0 +c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199, +-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6 +c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z +M500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z`},Pa=function(e,t){switch(e){case"lbrack":return"M403 1759 V84 H666 V0 H319 V1759 v"+t+` v1759 h347 v-84 +H403z M403 1759 V0 H319 V1759 v`+t+" v1759 h84z";case"rbrack":return"M347 1759 V0 H0 V84 H263 V1759 v"+t+` v1759 H0 v84 H347z +M347 1759 V0 H263 V1759 v`+t+" v1759 h84z";case"vert":return"M145 15 v585 v"+t+` v585 c2.667,10,9.667,15,21,15 +c10,0,16.667,-5,20,-15 v-585 v`+-t+` v-585 c-2.667,-10,-9.667,-15,-21,-15 +c-10,0,-16.667,5,-20,15z M188 15 H145 v585 v`+t+" v585 h43z";case"doublevert":return"M145 15 v585 v"+t+` v585 c2.667,10,9.667,15,21,15 +c10,0,16.667,-5,20,-15 v-585 v`+-t+` v-585 c-2.667,-10,-9.667,-15,-21,-15 +c-10,0,-16.667,5,-20,15z M188 15 H145 v585 v`+t+` v585 h43z +M367 15 v585 v`+t+` v585 c2.667,10,9.667,15,21,15 +c10,0,16.667,-5,20,-15 v-585 v`+-t+` v-585 c-2.667,-10,-9.667,-15,-21,-15 +c-10,0,-16.667,5,-20,15z M410 15 H367 v585 v`+t+" v585 h43z";case"lfloor":return"M319 602 V0 H403 V602 v"+t+` v1715 h263 v84 H319z +MM319 602 V0 H403 V602 v`+t+" v1715 H319z";case"rfloor":return"M319 602 V0 H403 V602 v"+t+` v1799 H0 v-84 H319z +MM319 602 V0 H403 V602 v`+t+" v1715 H319z";case"lceil":return"M403 1759 V84 H666 V0 H319 V1759 v"+t+` v602 h84z +M403 1759 V0 H319 V1759 v`+t+" v602 h84z";case"rceil":return"M347 1759 V0 H0 V84 H263 V1759 v"+t+` v602 h84z +M347 1759 V0 h-84 V1759 v`+t+" v602 h84z";case"lparen":return`M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1 +c-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349, +-36,557 l0,`+(t+84)+`c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210, +949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9 +c0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5, +-544.7,-112.5,-882c-2,-104,-3,-167,-3,-189 +l0,-`+(t+92)+`c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3, +-210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z`;case"rparen":return`M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3, +63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5 +c11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0,`+(t+9)+` +c-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664 +c-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11 +c0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17 +c242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558 +l0,-`+(t+144)+`c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7, +-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z`;default:throw new Error("Unknown stretchy delimiter.")}};class ue{constructor(e){this.children=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.children=e,this.classes=[],this.height=0,this.depth=0,this.maxFontSize=0,this.style={}}hasClass(e){return q.contains(this.classes,e)}toNode(){for(var e=document.createDocumentFragment(),t=0;tt.toText();return this.children.map(e).join("")}}var x0={"AMS-Regular":{32:[0,0,0,0,.25],65:[0,.68889,0,0,.72222],66:[0,.68889,0,0,.66667],67:[0,.68889,0,0,.72222],68:[0,.68889,0,0,.72222],69:[0,.68889,0,0,.66667],70:[0,.68889,0,0,.61111],71:[0,.68889,0,0,.77778],72:[0,.68889,0,0,.77778],73:[0,.68889,0,0,.38889],74:[.16667,.68889,0,0,.5],75:[0,.68889,0,0,.77778],76:[0,.68889,0,0,.66667],77:[0,.68889,0,0,.94445],78:[0,.68889,0,0,.72222],79:[.16667,.68889,0,0,.77778],80:[0,.68889,0,0,.61111],81:[.16667,.68889,0,0,.77778],82:[0,.68889,0,0,.72222],83:[0,.68889,0,0,.55556],84:[0,.68889,0,0,.66667],85:[0,.68889,0,0,.72222],86:[0,.68889,0,0,.72222],87:[0,.68889,0,0,1],88:[0,.68889,0,0,.72222],89:[0,.68889,0,0,.72222],90:[0,.68889,0,0,.66667],107:[0,.68889,0,0,.55556],160:[0,0,0,0,.25],165:[0,.675,.025,0,.75],174:[.15559,.69224,0,0,.94666],240:[0,.68889,0,0,.55556],295:[0,.68889,0,0,.54028],710:[0,.825,0,0,2.33334],732:[0,.9,0,0,2.33334],770:[0,.825,0,0,2.33334],771:[0,.9,0,0,2.33334],989:[.08167,.58167,0,0,.77778],1008:[0,.43056,.04028,0,.66667],8245:[0,.54986,0,0,.275],8463:[0,.68889,0,0,.54028],8487:[0,.68889,0,0,.72222],8498:[0,.68889,0,0,.55556],8502:[0,.68889,0,0,.66667],8503:[0,.68889,0,0,.44445],8504:[0,.68889,0,0,.66667],8513:[0,.68889,0,0,.63889],8592:[-.03598,.46402,0,0,.5],8594:[-.03598,.46402,0,0,.5],8602:[-.13313,.36687,0,0,1],8603:[-.13313,.36687,0,0,1],8606:[.01354,.52239,0,0,1],8608:[.01354,.52239,0,0,1],8610:[.01354,.52239,0,0,1.11111],8611:[.01354,.52239,0,0,1.11111],8619:[0,.54986,0,0,1],8620:[0,.54986,0,0,1],8621:[-.13313,.37788,0,0,1.38889],8622:[-.13313,.36687,0,0,1],8624:[0,.69224,0,0,.5],8625:[0,.69224,0,0,.5],8630:[0,.43056,0,0,1],8631:[0,.43056,0,0,1],8634:[.08198,.58198,0,0,.77778],8635:[.08198,.58198,0,0,.77778],8638:[.19444,.69224,0,0,.41667],8639:[.19444,.69224,0,0,.41667],8642:[.19444,.69224,0,0,.41667],8643:[.19444,.69224,0,0,.41667],8644:[.1808,.675,0,0,1],8646:[.1808,.675,0,0,1],8647:[.1808,.675,0,0,1],8648:[.19444,.69224,0,0,.83334],8649:[.1808,.675,0,0,1],8650:[.19444,.69224,0,0,.83334],8651:[.01354,.52239,0,0,1],8652:[.01354,.52239,0,0,1],8653:[-.13313,.36687,0,0,1],8654:[-.13313,.36687,0,0,1],8655:[-.13313,.36687,0,0,1],8666:[.13667,.63667,0,0,1],8667:[.13667,.63667,0,0,1],8669:[-.13313,.37788,0,0,1],8672:[-.064,.437,0,0,1.334],8674:[-.064,.437,0,0,1.334],8705:[0,.825,0,0,.5],8708:[0,.68889,0,0,.55556],8709:[.08167,.58167,0,0,.77778],8717:[0,.43056,0,0,.42917],8722:[-.03598,.46402,0,0,.5],8724:[.08198,.69224,0,0,.77778],8726:[.08167,.58167,0,0,.77778],8733:[0,.69224,0,0,.77778],8736:[0,.69224,0,0,.72222],8737:[0,.69224,0,0,.72222],8738:[.03517,.52239,0,0,.72222],8739:[.08167,.58167,0,0,.22222],8740:[.25142,.74111,0,0,.27778],8741:[.08167,.58167,0,0,.38889],8742:[.25142,.74111,0,0,.5],8756:[0,.69224,0,0,.66667],8757:[0,.69224,0,0,.66667],8764:[-.13313,.36687,0,0,.77778],8765:[-.13313,.37788,0,0,.77778],8769:[-.13313,.36687,0,0,.77778],8770:[-.03625,.46375,0,0,.77778],8774:[.30274,.79383,0,0,.77778],8776:[-.01688,.48312,0,0,.77778],8778:[.08167,.58167,0,0,.77778],8782:[.06062,.54986,0,0,.77778],8783:[.06062,.54986,0,0,.77778],8785:[.08198,.58198,0,0,.77778],8786:[.08198,.58198,0,0,.77778],8787:[.08198,.58198,0,0,.77778],8790:[0,.69224,0,0,.77778],8791:[.22958,.72958,0,0,.77778],8796:[.08198,.91667,0,0,.77778],8806:[.25583,.75583,0,0,.77778],8807:[.25583,.75583,0,0,.77778],8808:[.25142,.75726,0,0,.77778],8809:[.25142,.75726,0,0,.77778],8812:[.25583,.75583,0,0,.5],8814:[.20576,.70576,0,0,.77778],8815:[.20576,.70576,0,0,.77778],8816:[.30274,.79383,0,0,.77778],8817:[.30274,.79383,0,0,.77778],8818:[.22958,.72958,0,0,.77778],8819:[.22958,.72958,0,0,.77778],8822:[.1808,.675,0,0,.77778],8823:[.1808,.675,0,0,.77778],8828:[.13667,.63667,0,0,.77778],8829:[.13667,.63667,0,0,.77778],8830:[.22958,.72958,0,0,.77778],8831:[.22958,.72958,0,0,.77778],8832:[.20576,.70576,0,0,.77778],8833:[.20576,.70576,0,0,.77778],8840:[.30274,.79383,0,0,.77778],8841:[.30274,.79383,0,0,.77778],8842:[.13597,.63597,0,0,.77778],8843:[.13597,.63597,0,0,.77778],8847:[.03517,.54986,0,0,.77778],8848:[.03517,.54986,0,0,.77778],8858:[.08198,.58198,0,0,.77778],8859:[.08198,.58198,0,0,.77778],8861:[.08198,.58198,0,0,.77778],8862:[0,.675,0,0,.77778],8863:[0,.675,0,0,.77778],8864:[0,.675,0,0,.77778],8865:[0,.675,0,0,.77778],8872:[0,.69224,0,0,.61111],8873:[0,.69224,0,0,.72222],8874:[0,.69224,0,0,.88889],8876:[0,.68889,0,0,.61111],8877:[0,.68889,0,0,.61111],8878:[0,.68889,0,0,.72222],8879:[0,.68889,0,0,.72222],8882:[.03517,.54986,0,0,.77778],8883:[.03517,.54986,0,0,.77778],8884:[.13667,.63667,0,0,.77778],8885:[.13667,.63667,0,0,.77778],8888:[0,.54986,0,0,1.11111],8890:[.19444,.43056,0,0,.55556],8891:[.19444,.69224,0,0,.61111],8892:[.19444,.69224,0,0,.61111],8901:[0,.54986,0,0,.27778],8903:[.08167,.58167,0,0,.77778],8905:[.08167,.58167,0,0,.77778],8906:[.08167,.58167,0,0,.77778],8907:[0,.69224,0,0,.77778],8908:[0,.69224,0,0,.77778],8909:[-.03598,.46402,0,0,.77778],8910:[0,.54986,0,0,.76042],8911:[0,.54986,0,0,.76042],8912:[.03517,.54986,0,0,.77778],8913:[.03517,.54986,0,0,.77778],8914:[0,.54986,0,0,.66667],8915:[0,.54986,0,0,.66667],8916:[0,.69224,0,0,.66667],8918:[.0391,.5391,0,0,.77778],8919:[.0391,.5391,0,0,.77778],8920:[.03517,.54986,0,0,1.33334],8921:[.03517,.54986,0,0,1.33334],8922:[.38569,.88569,0,0,.77778],8923:[.38569,.88569,0,0,.77778],8926:[.13667,.63667,0,0,.77778],8927:[.13667,.63667,0,0,.77778],8928:[.30274,.79383,0,0,.77778],8929:[.30274,.79383,0,0,.77778],8934:[.23222,.74111,0,0,.77778],8935:[.23222,.74111,0,0,.77778],8936:[.23222,.74111,0,0,.77778],8937:[.23222,.74111,0,0,.77778],8938:[.20576,.70576,0,0,.77778],8939:[.20576,.70576,0,0,.77778],8940:[.30274,.79383,0,0,.77778],8941:[.30274,.79383,0,0,.77778],8994:[.19444,.69224,0,0,.77778],8995:[.19444,.69224,0,0,.77778],9416:[.15559,.69224,0,0,.90222],9484:[0,.69224,0,0,.5],9488:[0,.69224,0,0,.5],9492:[0,.37788,0,0,.5],9496:[0,.37788,0,0,.5],9585:[.19444,.68889,0,0,.88889],9586:[.19444,.74111,0,0,.88889],9632:[0,.675,0,0,.77778],9633:[0,.675,0,0,.77778],9650:[0,.54986,0,0,.72222],9651:[0,.54986,0,0,.72222],9654:[.03517,.54986,0,0,.77778],9660:[0,.54986,0,0,.72222],9661:[0,.54986,0,0,.72222],9664:[.03517,.54986,0,0,.77778],9674:[.11111,.69224,0,0,.66667],9733:[.19444,.69224,0,0,.94445],10003:[0,.69224,0,0,.83334],10016:[0,.69224,0,0,.83334],10731:[.11111,.69224,0,0,.66667],10846:[.19444,.75583,0,0,.61111],10877:[.13667,.63667,0,0,.77778],10878:[.13667,.63667,0,0,.77778],10885:[.25583,.75583,0,0,.77778],10886:[.25583,.75583,0,0,.77778],10887:[.13597,.63597,0,0,.77778],10888:[.13597,.63597,0,0,.77778],10889:[.26167,.75726,0,0,.77778],10890:[.26167,.75726,0,0,.77778],10891:[.48256,.98256,0,0,.77778],10892:[.48256,.98256,0,0,.77778],10901:[.13667,.63667,0,0,.77778],10902:[.13667,.63667,0,0,.77778],10933:[.25142,.75726,0,0,.77778],10934:[.25142,.75726,0,0,.77778],10935:[.26167,.75726,0,0,.77778],10936:[.26167,.75726,0,0,.77778],10937:[.26167,.75726,0,0,.77778],10938:[.26167,.75726,0,0,.77778],10949:[.25583,.75583,0,0,.77778],10950:[.25583,.75583,0,0,.77778],10955:[.28481,.79383,0,0,.77778],10956:[.28481,.79383,0,0,.77778],57350:[.08167,.58167,0,0,.22222],57351:[.08167,.58167,0,0,.38889],57352:[.08167,.58167,0,0,.77778],57353:[0,.43056,.04028,0,.66667],57356:[.25142,.75726,0,0,.77778],57357:[.25142,.75726,0,0,.77778],57358:[.41951,.91951,0,0,.77778],57359:[.30274,.79383,0,0,.77778],57360:[.30274,.79383,0,0,.77778],57361:[.41951,.91951,0,0,.77778],57366:[.25142,.75726,0,0,.77778],57367:[.25142,.75726,0,0,.77778],57368:[.25142,.75726,0,0,.77778],57369:[.25142,.75726,0,0,.77778],57370:[.13597,.63597,0,0,.77778],57371:[.13597,.63597,0,0,.77778]},"Caligraphic-Regular":{32:[0,0,0,0,.25],65:[0,.68333,0,.19445,.79847],66:[0,.68333,.03041,.13889,.65681],67:[0,.68333,.05834,.13889,.52653],68:[0,.68333,.02778,.08334,.77139],69:[0,.68333,.08944,.11111,.52778],70:[0,.68333,.09931,.11111,.71875],71:[.09722,.68333,.0593,.11111,.59487],72:[0,.68333,.00965,.11111,.84452],73:[0,.68333,.07382,0,.54452],74:[.09722,.68333,.18472,.16667,.67778],75:[0,.68333,.01445,.05556,.76195],76:[0,.68333,0,.13889,.68972],77:[0,.68333,0,.13889,1.2009],78:[0,.68333,.14736,.08334,.82049],79:[0,.68333,.02778,.11111,.79611],80:[0,.68333,.08222,.08334,.69556],81:[.09722,.68333,0,.11111,.81667],82:[0,.68333,0,.08334,.8475],83:[0,.68333,.075,.13889,.60556],84:[0,.68333,.25417,0,.54464],85:[0,.68333,.09931,.08334,.62583],86:[0,.68333,.08222,0,.61278],87:[0,.68333,.08222,.08334,.98778],88:[0,.68333,.14643,.13889,.7133],89:[.09722,.68333,.08222,.08334,.66834],90:[0,.68333,.07944,.13889,.72473],160:[0,0,0,0,.25]},"Fraktur-Regular":{32:[0,0,0,0,.25],33:[0,.69141,0,0,.29574],34:[0,.69141,0,0,.21471],38:[0,.69141,0,0,.73786],39:[0,.69141,0,0,.21201],40:[.24982,.74947,0,0,.38865],41:[.24982,.74947,0,0,.38865],42:[0,.62119,0,0,.27764],43:[.08319,.58283,0,0,.75623],44:[0,.10803,0,0,.27764],45:[.08319,.58283,0,0,.75623],46:[0,.10803,0,0,.27764],47:[.24982,.74947,0,0,.50181],48:[0,.47534,0,0,.50181],49:[0,.47534,0,0,.50181],50:[0,.47534,0,0,.50181],51:[.18906,.47534,0,0,.50181],52:[.18906,.47534,0,0,.50181],53:[.18906,.47534,0,0,.50181],54:[0,.69141,0,0,.50181],55:[.18906,.47534,0,0,.50181],56:[0,.69141,0,0,.50181],57:[.18906,.47534,0,0,.50181],58:[0,.47534,0,0,.21606],59:[.12604,.47534,0,0,.21606],61:[-.13099,.36866,0,0,.75623],63:[0,.69141,0,0,.36245],65:[0,.69141,0,0,.7176],66:[0,.69141,0,0,.88397],67:[0,.69141,0,0,.61254],68:[0,.69141,0,0,.83158],69:[0,.69141,0,0,.66278],70:[.12604,.69141,0,0,.61119],71:[0,.69141,0,0,.78539],72:[.06302,.69141,0,0,.7203],73:[0,.69141,0,0,.55448],74:[.12604,.69141,0,0,.55231],75:[0,.69141,0,0,.66845],76:[0,.69141,0,0,.66602],77:[0,.69141,0,0,1.04953],78:[0,.69141,0,0,.83212],79:[0,.69141,0,0,.82699],80:[.18906,.69141,0,0,.82753],81:[.03781,.69141,0,0,.82699],82:[0,.69141,0,0,.82807],83:[0,.69141,0,0,.82861],84:[0,.69141,0,0,.66899],85:[0,.69141,0,0,.64576],86:[0,.69141,0,0,.83131],87:[0,.69141,0,0,1.04602],88:[0,.69141,0,0,.71922],89:[.18906,.69141,0,0,.83293],90:[.12604,.69141,0,0,.60201],91:[.24982,.74947,0,0,.27764],93:[.24982,.74947,0,0,.27764],94:[0,.69141,0,0,.49965],97:[0,.47534,0,0,.50046],98:[0,.69141,0,0,.51315],99:[0,.47534,0,0,.38946],100:[0,.62119,0,0,.49857],101:[0,.47534,0,0,.40053],102:[.18906,.69141,0,0,.32626],103:[.18906,.47534,0,0,.5037],104:[.18906,.69141,0,0,.52126],105:[0,.69141,0,0,.27899],106:[0,.69141,0,0,.28088],107:[0,.69141,0,0,.38946],108:[0,.69141,0,0,.27953],109:[0,.47534,0,0,.76676],110:[0,.47534,0,0,.52666],111:[0,.47534,0,0,.48885],112:[.18906,.52396,0,0,.50046],113:[.18906,.47534,0,0,.48912],114:[0,.47534,0,0,.38919],115:[0,.47534,0,0,.44266],116:[0,.62119,0,0,.33301],117:[0,.47534,0,0,.5172],118:[0,.52396,0,0,.5118],119:[0,.52396,0,0,.77351],120:[.18906,.47534,0,0,.38865],121:[.18906,.47534,0,0,.49884],122:[.18906,.47534,0,0,.39054],160:[0,0,0,0,.25],8216:[0,.69141,0,0,.21471],8217:[0,.69141,0,0,.21471],58112:[0,.62119,0,0,.49749],58113:[0,.62119,0,0,.4983],58114:[.18906,.69141,0,0,.33328],58115:[.18906,.69141,0,0,.32923],58116:[.18906,.47534,0,0,.50343],58117:[0,.69141,0,0,.33301],58118:[0,.62119,0,0,.33409],58119:[0,.47534,0,0,.50073]},"Main-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.35],34:[0,.69444,0,0,.60278],35:[.19444,.69444,0,0,.95833],36:[.05556,.75,0,0,.575],37:[.05556,.75,0,0,.95833],38:[0,.69444,0,0,.89444],39:[0,.69444,0,0,.31944],40:[.25,.75,0,0,.44722],41:[.25,.75,0,0,.44722],42:[0,.75,0,0,.575],43:[.13333,.63333,0,0,.89444],44:[.19444,.15556,0,0,.31944],45:[0,.44444,0,0,.38333],46:[0,.15556,0,0,.31944],47:[.25,.75,0,0,.575],48:[0,.64444,0,0,.575],49:[0,.64444,0,0,.575],50:[0,.64444,0,0,.575],51:[0,.64444,0,0,.575],52:[0,.64444,0,0,.575],53:[0,.64444,0,0,.575],54:[0,.64444,0,0,.575],55:[0,.64444,0,0,.575],56:[0,.64444,0,0,.575],57:[0,.64444,0,0,.575],58:[0,.44444,0,0,.31944],59:[.19444,.44444,0,0,.31944],60:[.08556,.58556,0,0,.89444],61:[-.10889,.39111,0,0,.89444],62:[.08556,.58556,0,0,.89444],63:[0,.69444,0,0,.54305],64:[0,.69444,0,0,.89444],65:[0,.68611,0,0,.86944],66:[0,.68611,0,0,.81805],67:[0,.68611,0,0,.83055],68:[0,.68611,0,0,.88194],69:[0,.68611,0,0,.75555],70:[0,.68611,0,0,.72361],71:[0,.68611,0,0,.90416],72:[0,.68611,0,0,.9],73:[0,.68611,0,0,.43611],74:[0,.68611,0,0,.59444],75:[0,.68611,0,0,.90138],76:[0,.68611,0,0,.69166],77:[0,.68611,0,0,1.09166],78:[0,.68611,0,0,.9],79:[0,.68611,0,0,.86388],80:[0,.68611,0,0,.78611],81:[.19444,.68611,0,0,.86388],82:[0,.68611,0,0,.8625],83:[0,.68611,0,0,.63889],84:[0,.68611,0,0,.8],85:[0,.68611,0,0,.88472],86:[0,.68611,.01597,0,.86944],87:[0,.68611,.01597,0,1.18888],88:[0,.68611,0,0,.86944],89:[0,.68611,.02875,0,.86944],90:[0,.68611,0,0,.70277],91:[.25,.75,0,0,.31944],92:[.25,.75,0,0,.575],93:[.25,.75,0,0,.31944],94:[0,.69444,0,0,.575],95:[.31,.13444,.03194,0,.575],97:[0,.44444,0,0,.55902],98:[0,.69444,0,0,.63889],99:[0,.44444,0,0,.51111],100:[0,.69444,0,0,.63889],101:[0,.44444,0,0,.52708],102:[0,.69444,.10903,0,.35139],103:[.19444,.44444,.01597,0,.575],104:[0,.69444,0,0,.63889],105:[0,.69444,0,0,.31944],106:[.19444,.69444,0,0,.35139],107:[0,.69444,0,0,.60694],108:[0,.69444,0,0,.31944],109:[0,.44444,0,0,.95833],110:[0,.44444,0,0,.63889],111:[0,.44444,0,0,.575],112:[.19444,.44444,0,0,.63889],113:[.19444,.44444,0,0,.60694],114:[0,.44444,0,0,.47361],115:[0,.44444,0,0,.45361],116:[0,.63492,0,0,.44722],117:[0,.44444,0,0,.63889],118:[0,.44444,.01597,0,.60694],119:[0,.44444,.01597,0,.83055],120:[0,.44444,0,0,.60694],121:[.19444,.44444,.01597,0,.60694],122:[0,.44444,0,0,.51111],123:[.25,.75,0,0,.575],124:[.25,.75,0,0,.31944],125:[.25,.75,0,0,.575],126:[.35,.34444,0,0,.575],160:[0,0,0,0,.25],163:[0,.69444,0,0,.86853],168:[0,.69444,0,0,.575],172:[0,.44444,0,0,.76666],176:[0,.69444,0,0,.86944],177:[.13333,.63333,0,0,.89444],184:[.17014,0,0,0,.51111],198:[0,.68611,0,0,1.04166],215:[.13333,.63333,0,0,.89444],216:[.04861,.73472,0,0,.89444],223:[0,.69444,0,0,.59722],230:[0,.44444,0,0,.83055],247:[.13333,.63333,0,0,.89444],248:[.09722,.54167,0,0,.575],305:[0,.44444,0,0,.31944],338:[0,.68611,0,0,1.16944],339:[0,.44444,0,0,.89444],567:[.19444,.44444,0,0,.35139],710:[0,.69444,0,0,.575],711:[0,.63194,0,0,.575],713:[0,.59611,0,0,.575],714:[0,.69444,0,0,.575],715:[0,.69444,0,0,.575],728:[0,.69444,0,0,.575],729:[0,.69444,0,0,.31944],730:[0,.69444,0,0,.86944],732:[0,.69444,0,0,.575],733:[0,.69444,0,0,.575],915:[0,.68611,0,0,.69166],916:[0,.68611,0,0,.95833],920:[0,.68611,0,0,.89444],923:[0,.68611,0,0,.80555],926:[0,.68611,0,0,.76666],928:[0,.68611,0,0,.9],931:[0,.68611,0,0,.83055],933:[0,.68611,0,0,.89444],934:[0,.68611,0,0,.83055],936:[0,.68611,0,0,.89444],937:[0,.68611,0,0,.83055],8211:[0,.44444,.03194,0,.575],8212:[0,.44444,.03194,0,1.14999],8216:[0,.69444,0,0,.31944],8217:[0,.69444,0,0,.31944],8220:[0,.69444,0,0,.60278],8221:[0,.69444,0,0,.60278],8224:[.19444,.69444,0,0,.51111],8225:[.19444,.69444,0,0,.51111],8242:[0,.55556,0,0,.34444],8407:[0,.72444,.15486,0,.575],8463:[0,.69444,0,0,.66759],8465:[0,.69444,0,0,.83055],8467:[0,.69444,0,0,.47361],8472:[.19444,.44444,0,0,.74027],8476:[0,.69444,0,0,.83055],8501:[0,.69444,0,0,.70277],8592:[-.10889,.39111,0,0,1.14999],8593:[.19444,.69444,0,0,.575],8594:[-.10889,.39111,0,0,1.14999],8595:[.19444,.69444,0,0,.575],8596:[-.10889,.39111,0,0,1.14999],8597:[.25,.75,0,0,.575],8598:[.19444,.69444,0,0,1.14999],8599:[.19444,.69444,0,0,1.14999],8600:[.19444,.69444,0,0,1.14999],8601:[.19444,.69444,0,0,1.14999],8636:[-.10889,.39111,0,0,1.14999],8637:[-.10889,.39111,0,0,1.14999],8640:[-.10889,.39111,0,0,1.14999],8641:[-.10889,.39111,0,0,1.14999],8656:[-.10889,.39111,0,0,1.14999],8657:[.19444,.69444,0,0,.70277],8658:[-.10889,.39111,0,0,1.14999],8659:[.19444,.69444,0,0,.70277],8660:[-.10889,.39111,0,0,1.14999],8661:[.25,.75,0,0,.70277],8704:[0,.69444,0,0,.63889],8706:[0,.69444,.06389,0,.62847],8707:[0,.69444,0,0,.63889],8709:[.05556,.75,0,0,.575],8711:[0,.68611,0,0,.95833],8712:[.08556,.58556,0,0,.76666],8715:[.08556,.58556,0,0,.76666],8722:[.13333,.63333,0,0,.89444],8723:[.13333,.63333,0,0,.89444],8725:[.25,.75,0,0,.575],8726:[.25,.75,0,0,.575],8727:[-.02778,.47222,0,0,.575],8728:[-.02639,.47361,0,0,.575],8729:[-.02639,.47361,0,0,.575],8730:[.18,.82,0,0,.95833],8733:[0,.44444,0,0,.89444],8734:[0,.44444,0,0,1.14999],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.31944],8741:[.25,.75,0,0,.575],8743:[0,.55556,0,0,.76666],8744:[0,.55556,0,0,.76666],8745:[0,.55556,0,0,.76666],8746:[0,.55556,0,0,.76666],8747:[.19444,.69444,.12778,0,.56875],8764:[-.10889,.39111,0,0,.89444],8768:[.19444,.69444,0,0,.31944],8771:[.00222,.50222,0,0,.89444],8773:[.027,.638,0,0,.894],8776:[.02444,.52444,0,0,.89444],8781:[.00222,.50222,0,0,.89444],8801:[.00222,.50222,0,0,.89444],8804:[.19667,.69667,0,0,.89444],8805:[.19667,.69667,0,0,.89444],8810:[.08556,.58556,0,0,1.14999],8811:[.08556,.58556,0,0,1.14999],8826:[.08556,.58556,0,0,.89444],8827:[.08556,.58556,0,0,.89444],8834:[.08556,.58556,0,0,.89444],8835:[.08556,.58556,0,0,.89444],8838:[.19667,.69667,0,0,.89444],8839:[.19667,.69667,0,0,.89444],8846:[0,.55556,0,0,.76666],8849:[.19667,.69667,0,0,.89444],8850:[.19667,.69667,0,0,.89444],8851:[0,.55556,0,0,.76666],8852:[0,.55556,0,0,.76666],8853:[.13333,.63333,0,0,.89444],8854:[.13333,.63333,0,0,.89444],8855:[.13333,.63333,0,0,.89444],8856:[.13333,.63333,0,0,.89444],8857:[.13333,.63333,0,0,.89444],8866:[0,.69444,0,0,.70277],8867:[0,.69444,0,0,.70277],8868:[0,.69444,0,0,.89444],8869:[0,.69444,0,0,.89444],8900:[-.02639,.47361,0,0,.575],8901:[-.02639,.47361,0,0,.31944],8902:[-.02778,.47222,0,0,.575],8968:[.25,.75,0,0,.51111],8969:[.25,.75,0,0,.51111],8970:[.25,.75,0,0,.51111],8971:[.25,.75,0,0,.51111],8994:[-.13889,.36111,0,0,1.14999],8995:[-.13889,.36111,0,0,1.14999],9651:[.19444,.69444,0,0,1.02222],9657:[-.02778,.47222,0,0,.575],9661:[.19444,.69444,0,0,1.02222],9667:[-.02778,.47222,0,0,.575],9711:[.19444,.69444,0,0,1.14999],9824:[.12963,.69444,0,0,.89444],9825:[.12963,.69444,0,0,.89444],9826:[.12963,.69444,0,0,.89444],9827:[.12963,.69444,0,0,.89444],9837:[0,.75,0,0,.44722],9838:[.19444,.69444,0,0,.44722],9839:[.19444,.69444,0,0,.44722],10216:[.25,.75,0,0,.44722],10217:[.25,.75,0,0,.44722],10815:[0,.68611,0,0,.9],10927:[.19667,.69667,0,0,.89444],10928:[.19667,.69667,0,0,.89444],57376:[.19444,.69444,0,0,0]},"Main-BoldItalic":{32:[0,0,0,0,.25],33:[0,.69444,.11417,0,.38611],34:[0,.69444,.07939,0,.62055],35:[.19444,.69444,.06833,0,.94444],37:[.05556,.75,.12861,0,.94444],38:[0,.69444,.08528,0,.88555],39:[0,.69444,.12945,0,.35555],40:[.25,.75,.15806,0,.47333],41:[.25,.75,.03306,0,.47333],42:[0,.75,.14333,0,.59111],43:[.10333,.60333,.03306,0,.88555],44:[.19444,.14722,0,0,.35555],45:[0,.44444,.02611,0,.41444],46:[0,.14722,0,0,.35555],47:[.25,.75,.15806,0,.59111],48:[0,.64444,.13167,0,.59111],49:[0,.64444,.13167,0,.59111],50:[0,.64444,.13167,0,.59111],51:[0,.64444,.13167,0,.59111],52:[.19444,.64444,.13167,0,.59111],53:[0,.64444,.13167,0,.59111],54:[0,.64444,.13167,0,.59111],55:[.19444,.64444,.13167,0,.59111],56:[0,.64444,.13167,0,.59111],57:[0,.64444,.13167,0,.59111],58:[0,.44444,.06695,0,.35555],59:[.19444,.44444,.06695,0,.35555],61:[-.10889,.39111,.06833,0,.88555],63:[0,.69444,.11472,0,.59111],64:[0,.69444,.09208,0,.88555],65:[0,.68611,0,0,.86555],66:[0,.68611,.0992,0,.81666],67:[0,.68611,.14208,0,.82666],68:[0,.68611,.09062,0,.87555],69:[0,.68611,.11431,0,.75666],70:[0,.68611,.12903,0,.72722],71:[0,.68611,.07347,0,.89527],72:[0,.68611,.17208,0,.8961],73:[0,.68611,.15681,0,.47166],74:[0,.68611,.145,0,.61055],75:[0,.68611,.14208,0,.89499],76:[0,.68611,0,0,.69777],77:[0,.68611,.17208,0,1.07277],78:[0,.68611,.17208,0,.8961],79:[0,.68611,.09062,0,.85499],80:[0,.68611,.0992,0,.78721],81:[.19444,.68611,.09062,0,.85499],82:[0,.68611,.02559,0,.85944],83:[0,.68611,.11264,0,.64999],84:[0,.68611,.12903,0,.7961],85:[0,.68611,.17208,0,.88083],86:[0,.68611,.18625,0,.86555],87:[0,.68611,.18625,0,1.15999],88:[0,.68611,.15681,0,.86555],89:[0,.68611,.19803,0,.86555],90:[0,.68611,.14208,0,.70888],91:[.25,.75,.1875,0,.35611],93:[.25,.75,.09972,0,.35611],94:[0,.69444,.06709,0,.59111],95:[.31,.13444,.09811,0,.59111],97:[0,.44444,.09426,0,.59111],98:[0,.69444,.07861,0,.53222],99:[0,.44444,.05222,0,.53222],100:[0,.69444,.10861,0,.59111],101:[0,.44444,.085,0,.53222],102:[.19444,.69444,.21778,0,.4],103:[.19444,.44444,.105,0,.53222],104:[0,.69444,.09426,0,.59111],105:[0,.69326,.11387,0,.35555],106:[.19444,.69326,.1672,0,.35555],107:[0,.69444,.11111,0,.53222],108:[0,.69444,.10861,0,.29666],109:[0,.44444,.09426,0,.94444],110:[0,.44444,.09426,0,.64999],111:[0,.44444,.07861,0,.59111],112:[.19444,.44444,.07861,0,.59111],113:[.19444,.44444,.105,0,.53222],114:[0,.44444,.11111,0,.50167],115:[0,.44444,.08167,0,.48694],116:[0,.63492,.09639,0,.385],117:[0,.44444,.09426,0,.62055],118:[0,.44444,.11111,0,.53222],119:[0,.44444,.11111,0,.76777],120:[0,.44444,.12583,0,.56055],121:[.19444,.44444,.105,0,.56166],122:[0,.44444,.13889,0,.49055],126:[.35,.34444,.11472,0,.59111],160:[0,0,0,0,.25],168:[0,.69444,.11473,0,.59111],176:[0,.69444,0,0,.94888],184:[.17014,0,0,0,.53222],198:[0,.68611,.11431,0,1.02277],216:[.04861,.73472,.09062,0,.88555],223:[.19444,.69444,.09736,0,.665],230:[0,.44444,.085,0,.82666],248:[.09722,.54167,.09458,0,.59111],305:[0,.44444,.09426,0,.35555],338:[0,.68611,.11431,0,1.14054],339:[0,.44444,.085,0,.82666],567:[.19444,.44444,.04611,0,.385],710:[0,.69444,.06709,0,.59111],711:[0,.63194,.08271,0,.59111],713:[0,.59444,.10444,0,.59111],714:[0,.69444,.08528,0,.59111],715:[0,.69444,0,0,.59111],728:[0,.69444,.10333,0,.59111],729:[0,.69444,.12945,0,.35555],730:[0,.69444,0,0,.94888],732:[0,.69444,.11472,0,.59111],733:[0,.69444,.11472,0,.59111],915:[0,.68611,.12903,0,.69777],916:[0,.68611,0,0,.94444],920:[0,.68611,.09062,0,.88555],923:[0,.68611,0,0,.80666],926:[0,.68611,.15092,0,.76777],928:[0,.68611,.17208,0,.8961],931:[0,.68611,.11431,0,.82666],933:[0,.68611,.10778,0,.88555],934:[0,.68611,.05632,0,.82666],936:[0,.68611,.10778,0,.88555],937:[0,.68611,.0992,0,.82666],8211:[0,.44444,.09811,0,.59111],8212:[0,.44444,.09811,0,1.18221],8216:[0,.69444,.12945,0,.35555],8217:[0,.69444,.12945,0,.35555],8220:[0,.69444,.16772,0,.62055],8221:[0,.69444,.07939,0,.62055]},"Main-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.12417,0,.30667],34:[0,.69444,.06961,0,.51444],35:[.19444,.69444,.06616,0,.81777],37:[.05556,.75,.13639,0,.81777],38:[0,.69444,.09694,0,.76666],39:[0,.69444,.12417,0,.30667],40:[.25,.75,.16194,0,.40889],41:[.25,.75,.03694,0,.40889],42:[0,.75,.14917,0,.51111],43:[.05667,.56167,.03694,0,.76666],44:[.19444,.10556,0,0,.30667],45:[0,.43056,.02826,0,.35778],46:[0,.10556,0,0,.30667],47:[.25,.75,.16194,0,.51111],48:[0,.64444,.13556,0,.51111],49:[0,.64444,.13556,0,.51111],50:[0,.64444,.13556,0,.51111],51:[0,.64444,.13556,0,.51111],52:[.19444,.64444,.13556,0,.51111],53:[0,.64444,.13556,0,.51111],54:[0,.64444,.13556,0,.51111],55:[.19444,.64444,.13556,0,.51111],56:[0,.64444,.13556,0,.51111],57:[0,.64444,.13556,0,.51111],58:[0,.43056,.0582,0,.30667],59:[.19444,.43056,.0582,0,.30667],61:[-.13313,.36687,.06616,0,.76666],63:[0,.69444,.1225,0,.51111],64:[0,.69444,.09597,0,.76666],65:[0,.68333,0,0,.74333],66:[0,.68333,.10257,0,.70389],67:[0,.68333,.14528,0,.71555],68:[0,.68333,.09403,0,.755],69:[0,.68333,.12028,0,.67833],70:[0,.68333,.13305,0,.65277],71:[0,.68333,.08722,0,.77361],72:[0,.68333,.16389,0,.74333],73:[0,.68333,.15806,0,.38555],74:[0,.68333,.14028,0,.525],75:[0,.68333,.14528,0,.76888],76:[0,.68333,0,0,.62722],77:[0,.68333,.16389,0,.89666],78:[0,.68333,.16389,0,.74333],79:[0,.68333,.09403,0,.76666],80:[0,.68333,.10257,0,.67833],81:[.19444,.68333,.09403,0,.76666],82:[0,.68333,.03868,0,.72944],83:[0,.68333,.11972,0,.56222],84:[0,.68333,.13305,0,.71555],85:[0,.68333,.16389,0,.74333],86:[0,.68333,.18361,0,.74333],87:[0,.68333,.18361,0,.99888],88:[0,.68333,.15806,0,.74333],89:[0,.68333,.19383,0,.74333],90:[0,.68333,.14528,0,.61333],91:[.25,.75,.1875,0,.30667],93:[.25,.75,.10528,0,.30667],94:[0,.69444,.06646,0,.51111],95:[.31,.12056,.09208,0,.51111],97:[0,.43056,.07671,0,.51111],98:[0,.69444,.06312,0,.46],99:[0,.43056,.05653,0,.46],100:[0,.69444,.10333,0,.51111],101:[0,.43056,.07514,0,.46],102:[.19444,.69444,.21194,0,.30667],103:[.19444,.43056,.08847,0,.46],104:[0,.69444,.07671,0,.51111],105:[0,.65536,.1019,0,.30667],106:[.19444,.65536,.14467,0,.30667],107:[0,.69444,.10764,0,.46],108:[0,.69444,.10333,0,.25555],109:[0,.43056,.07671,0,.81777],110:[0,.43056,.07671,0,.56222],111:[0,.43056,.06312,0,.51111],112:[.19444,.43056,.06312,0,.51111],113:[.19444,.43056,.08847,0,.46],114:[0,.43056,.10764,0,.42166],115:[0,.43056,.08208,0,.40889],116:[0,.61508,.09486,0,.33222],117:[0,.43056,.07671,0,.53666],118:[0,.43056,.10764,0,.46],119:[0,.43056,.10764,0,.66444],120:[0,.43056,.12042,0,.46389],121:[.19444,.43056,.08847,0,.48555],122:[0,.43056,.12292,0,.40889],126:[.35,.31786,.11585,0,.51111],160:[0,0,0,0,.25],168:[0,.66786,.10474,0,.51111],176:[0,.69444,0,0,.83129],184:[.17014,0,0,0,.46],198:[0,.68333,.12028,0,.88277],216:[.04861,.73194,.09403,0,.76666],223:[.19444,.69444,.10514,0,.53666],230:[0,.43056,.07514,0,.71555],248:[.09722,.52778,.09194,0,.51111],338:[0,.68333,.12028,0,.98499],339:[0,.43056,.07514,0,.71555],710:[0,.69444,.06646,0,.51111],711:[0,.62847,.08295,0,.51111],713:[0,.56167,.10333,0,.51111],714:[0,.69444,.09694,0,.51111],715:[0,.69444,0,0,.51111],728:[0,.69444,.10806,0,.51111],729:[0,.66786,.11752,0,.30667],730:[0,.69444,0,0,.83129],732:[0,.66786,.11585,0,.51111],733:[0,.69444,.1225,0,.51111],915:[0,.68333,.13305,0,.62722],916:[0,.68333,0,0,.81777],920:[0,.68333,.09403,0,.76666],923:[0,.68333,0,0,.69222],926:[0,.68333,.15294,0,.66444],928:[0,.68333,.16389,0,.74333],931:[0,.68333,.12028,0,.71555],933:[0,.68333,.11111,0,.76666],934:[0,.68333,.05986,0,.71555],936:[0,.68333,.11111,0,.76666],937:[0,.68333,.10257,0,.71555],8211:[0,.43056,.09208,0,.51111],8212:[0,.43056,.09208,0,1.02222],8216:[0,.69444,.12417,0,.30667],8217:[0,.69444,.12417,0,.30667],8220:[0,.69444,.1685,0,.51444],8221:[0,.69444,.06961,0,.51444],8463:[0,.68889,0,0,.54028]},"Main-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.27778],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.77778],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.19444,.10556,0,0,.27778],45:[0,.43056,0,0,.33333],46:[0,.10556,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.64444,0,0,.5],49:[0,.64444,0,0,.5],50:[0,.64444,0,0,.5],51:[0,.64444,0,0,.5],52:[0,.64444,0,0,.5],53:[0,.64444,0,0,.5],54:[0,.64444,0,0,.5],55:[0,.64444,0,0,.5],56:[0,.64444,0,0,.5],57:[0,.64444,0,0,.5],58:[0,.43056,0,0,.27778],59:[.19444,.43056,0,0,.27778],60:[.0391,.5391,0,0,.77778],61:[-.13313,.36687,0,0,.77778],62:[.0391,.5391,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.77778],65:[0,.68333,0,0,.75],66:[0,.68333,0,0,.70834],67:[0,.68333,0,0,.72222],68:[0,.68333,0,0,.76389],69:[0,.68333,0,0,.68056],70:[0,.68333,0,0,.65278],71:[0,.68333,0,0,.78472],72:[0,.68333,0,0,.75],73:[0,.68333,0,0,.36111],74:[0,.68333,0,0,.51389],75:[0,.68333,0,0,.77778],76:[0,.68333,0,0,.625],77:[0,.68333,0,0,.91667],78:[0,.68333,0,0,.75],79:[0,.68333,0,0,.77778],80:[0,.68333,0,0,.68056],81:[.19444,.68333,0,0,.77778],82:[0,.68333,0,0,.73611],83:[0,.68333,0,0,.55556],84:[0,.68333,0,0,.72222],85:[0,.68333,0,0,.75],86:[0,.68333,.01389,0,.75],87:[0,.68333,.01389,0,1.02778],88:[0,.68333,0,0,.75],89:[0,.68333,.025,0,.75],90:[0,.68333,0,0,.61111],91:[.25,.75,0,0,.27778],92:[.25,.75,0,0,.5],93:[.25,.75,0,0,.27778],94:[0,.69444,0,0,.5],95:[.31,.12056,.02778,0,.5],97:[0,.43056,0,0,.5],98:[0,.69444,0,0,.55556],99:[0,.43056,0,0,.44445],100:[0,.69444,0,0,.55556],101:[0,.43056,0,0,.44445],102:[0,.69444,.07778,0,.30556],103:[.19444,.43056,.01389,0,.5],104:[0,.69444,0,0,.55556],105:[0,.66786,0,0,.27778],106:[.19444,.66786,0,0,.30556],107:[0,.69444,0,0,.52778],108:[0,.69444,0,0,.27778],109:[0,.43056,0,0,.83334],110:[0,.43056,0,0,.55556],111:[0,.43056,0,0,.5],112:[.19444,.43056,0,0,.55556],113:[.19444,.43056,0,0,.52778],114:[0,.43056,0,0,.39167],115:[0,.43056,0,0,.39445],116:[0,.61508,0,0,.38889],117:[0,.43056,0,0,.55556],118:[0,.43056,.01389,0,.52778],119:[0,.43056,.01389,0,.72222],120:[0,.43056,0,0,.52778],121:[.19444,.43056,.01389,0,.52778],122:[0,.43056,0,0,.44445],123:[.25,.75,0,0,.5],124:[.25,.75,0,0,.27778],125:[.25,.75,0,0,.5],126:[.35,.31786,0,0,.5],160:[0,0,0,0,.25],163:[0,.69444,0,0,.76909],167:[.19444,.69444,0,0,.44445],168:[0,.66786,0,0,.5],172:[0,.43056,0,0,.66667],176:[0,.69444,0,0,.75],177:[.08333,.58333,0,0,.77778],182:[.19444,.69444,0,0,.61111],184:[.17014,0,0,0,.44445],198:[0,.68333,0,0,.90278],215:[.08333,.58333,0,0,.77778],216:[.04861,.73194,0,0,.77778],223:[0,.69444,0,0,.5],230:[0,.43056,0,0,.72222],247:[.08333,.58333,0,0,.77778],248:[.09722,.52778,0,0,.5],305:[0,.43056,0,0,.27778],338:[0,.68333,0,0,1.01389],339:[0,.43056,0,0,.77778],567:[.19444,.43056,0,0,.30556],710:[0,.69444,0,0,.5],711:[0,.62847,0,0,.5],713:[0,.56778,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.66786,0,0,.27778],730:[0,.69444,0,0,.75],732:[0,.66786,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.68333,0,0,.625],916:[0,.68333,0,0,.83334],920:[0,.68333,0,0,.77778],923:[0,.68333,0,0,.69445],926:[0,.68333,0,0,.66667],928:[0,.68333,0,0,.75],931:[0,.68333,0,0,.72222],933:[0,.68333,0,0,.77778],934:[0,.68333,0,0,.72222],936:[0,.68333,0,0,.77778],937:[0,.68333,0,0,.72222],8211:[0,.43056,.02778,0,.5],8212:[0,.43056,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5],8224:[.19444,.69444,0,0,.44445],8225:[.19444,.69444,0,0,.44445],8230:[0,.123,0,0,1.172],8242:[0,.55556,0,0,.275],8407:[0,.71444,.15382,0,.5],8463:[0,.68889,0,0,.54028],8465:[0,.69444,0,0,.72222],8467:[0,.69444,0,.11111,.41667],8472:[.19444,.43056,0,.11111,.63646],8476:[0,.69444,0,0,.72222],8501:[0,.69444,0,0,.61111],8592:[-.13313,.36687,0,0,1],8593:[.19444,.69444,0,0,.5],8594:[-.13313,.36687,0,0,1],8595:[.19444,.69444,0,0,.5],8596:[-.13313,.36687,0,0,1],8597:[.25,.75,0,0,.5],8598:[.19444,.69444,0,0,1],8599:[.19444,.69444,0,0,1],8600:[.19444,.69444,0,0,1],8601:[.19444,.69444,0,0,1],8614:[.011,.511,0,0,1],8617:[.011,.511,0,0,1.126],8618:[.011,.511,0,0,1.126],8636:[-.13313,.36687,0,0,1],8637:[-.13313,.36687,0,0,1],8640:[-.13313,.36687,0,0,1],8641:[-.13313,.36687,0,0,1],8652:[.011,.671,0,0,1],8656:[-.13313,.36687,0,0,1],8657:[.19444,.69444,0,0,.61111],8658:[-.13313,.36687,0,0,1],8659:[.19444,.69444,0,0,.61111],8660:[-.13313,.36687,0,0,1],8661:[.25,.75,0,0,.61111],8704:[0,.69444,0,0,.55556],8706:[0,.69444,.05556,.08334,.5309],8707:[0,.69444,0,0,.55556],8709:[.05556,.75,0,0,.5],8711:[0,.68333,0,0,.83334],8712:[.0391,.5391,0,0,.66667],8715:[.0391,.5391,0,0,.66667],8722:[.08333,.58333,0,0,.77778],8723:[.08333,.58333,0,0,.77778],8725:[.25,.75,0,0,.5],8726:[.25,.75,0,0,.5],8727:[-.03472,.46528,0,0,.5],8728:[-.05555,.44445,0,0,.5],8729:[-.05555,.44445,0,0,.5],8730:[.2,.8,0,0,.83334],8733:[0,.43056,0,0,.77778],8734:[0,.43056,0,0,1],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.27778],8741:[.25,.75,0,0,.5],8743:[0,.55556,0,0,.66667],8744:[0,.55556,0,0,.66667],8745:[0,.55556,0,0,.66667],8746:[0,.55556,0,0,.66667],8747:[.19444,.69444,.11111,0,.41667],8764:[-.13313,.36687,0,0,.77778],8768:[.19444,.69444,0,0,.27778],8771:[-.03625,.46375,0,0,.77778],8773:[-.022,.589,0,0,.778],8776:[-.01688,.48312,0,0,.77778],8781:[-.03625,.46375,0,0,.77778],8784:[-.133,.673,0,0,.778],8801:[-.03625,.46375,0,0,.77778],8804:[.13597,.63597,0,0,.77778],8805:[.13597,.63597,0,0,.77778],8810:[.0391,.5391,0,0,1],8811:[.0391,.5391,0,0,1],8826:[.0391,.5391,0,0,.77778],8827:[.0391,.5391,0,0,.77778],8834:[.0391,.5391,0,0,.77778],8835:[.0391,.5391,0,0,.77778],8838:[.13597,.63597,0,0,.77778],8839:[.13597,.63597,0,0,.77778],8846:[0,.55556,0,0,.66667],8849:[.13597,.63597,0,0,.77778],8850:[.13597,.63597,0,0,.77778],8851:[0,.55556,0,0,.66667],8852:[0,.55556,0,0,.66667],8853:[.08333,.58333,0,0,.77778],8854:[.08333,.58333,0,0,.77778],8855:[.08333,.58333,0,0,.77778],8856:[.08333,.58333,0,0,.77778],8857:[.08333,.58333,0,0,.77778],8866:[0,.69444,0,0,.61111],8867:[0,.69444,0,0,.61111],8868:[0,.69444,0,0,.77778],8869:[0,.69444,0,0,.77778],8872:[.249,.75,0,0,.867],8900:[-.05555,.44445,0,0,.5],8901:[-.05555,.44445,0,0,.27778],8902:[-.03472,.46528,0,0,.5],8904:[.005,.505,0,0,.9],8942:[.03,.903,0,0,.278],8943:[-.19,.313,0,0,1.172],8945:[-.1,.823,0,0,1.282],8968:[.25,.75,0,0,.44445],8969:[.25,.75,0,0,.44445],8970:[.25,.75,0,0,.44445],8971:[.25,.75,0,0,.44445],8994:[-.14236,.35764,0,0,1],8995:[-.14236,.35764,0,0,1],9136:[.244,.744,0,0,.412],9137:[.244,.745,0,0,.412],9651:[.19444,.69444,0,0,.88889],9657:[-.03472,.46528,0,0,.5],9661:[.19444,.69444,0,0,.88889],9667:[-.03472,.46528,0,0,.5],9711:[.19444,.69444,0,0,1],9824:[.12963,.69444,0,0,.77778],9825:[.12963,.69444,0,0,.77778],9826:[.12963,.69444,0,0,.77778],9827:[.12963,.69444,0,0,.77778],9837:[0,.75,0,0,.38889],9838:[.19444,.69444,0,0,.38889],9839:[.19444,.69444,0,0,.38889],10216:[.25,.75,0,0,.38889],10217:[.25,.75,0,0,.38889],10222:[.244,.744,0,0,.412],10223:[.244,.745,0,0,.412],10229:[.011,.511,0,0,1.609],10230:[.011,.511,0,0,1.638],10231:[.011,.511,0,0,1.859],10232:[.024,.525,0,0,1.609],10233:[.024,.525,0,0,1.638],10234:[.024,.525,0,0,1.858],10236:[.011,.511,0,0,1.638],10815:[0,.68333,0,0,.75],10927:[.13597,.63597,0,0,.77778],10928:[.13597,.63597,0,0,.77778],57376:[.19444,.69444,0,0,0]},"Math-BoldItalic":{32:[0,0,0,0,.25],48:[0,.44444,0,0,.575],49:[0,.44444,0,0,.575],50:[0,.44444,0,0,.575],51:[.19444,.44444,0,0,.575],52:[.19444,.44444,0,0,.575],53:[.19444,.44444,0,0,.575],54:[0,.64444,0,0,.575],55:[.19444,.44444,0,0,.575],56:[0,.64444,0,0,.575],57:[.19444,.44444,0,0,.575],65:[0,.68611,0,0,.86944],66:[0,.68611,.04835,0,.8664],67:[0,.68611,.06979,0,.81694],68:[0,.68611,.03194,0,.93812],69:[0,.68611,.05451,0,.81007],70:[0,.68611,.15972,0,.68889],71:[0,.68611,0,0,.88673],72:[0,.68611,.08229,0,.98229],73:[0,.68611,.07778,0,.51111],74:[0,.68611,.10069,0,.63125],75:[0,.68611,.06979,0,.97118],76:[0,.68611,0,0,.75555],77:[0,.68611,.11424,0,1.14201],78:[0,.68611,.11424,0,.95034],79:[0,.68611,.03194,0,.83666],80:[0,.68611,.15972,0,.72309],81:[.19444,.68611,0,0,.86861],82:[0,.68611,.00421,0,.87235],83:[0,.68611,.05382,0,.69271],84:[0,.68611,.15972,0,.63663],85:[0,.68611,.11424,0,.80027],86:[0,.68611,.25555,0,.67778],87:[0,.68611,.15972,0,1.09305],88:[0,.68611,.07778,0,.94722],89:[0,.68611,.25555,0,.67458],90:[0,.68611,.06979,0,.77257],97:[0,.44444,0,0,.63287],98:[0,.69444,0,0,.52083],99:[0,.44444,0,0,.51342],100:[0,.69444,0,0,.60972],101:[0,.44444,0,0,.55361],102:[.19444,.69444,.11042,0,.56806],103:[.19444,.44444,.03704,0,.5449],104:[0,.69444,0,0,.66759],105:[0,.69326,0,0,.4048],106:[.19444,.69326,.0622,0,.47083],107:[0,.69444,.01852,0,.6037],108:[0,.69444,.0088,0,.34815],109:[0,.44444,0,0,1.0324],110:[0,.44444,0,0,.71296],111:[0,.44444,0,0,.58472],112:[.19444,.44444,0,0,.60092],113:[.19444,.44444,.03704,0,.54213],114:[0,.44444,.03194,0,.5287],115:[0,.44444,0,0,.53125],116:[0,.63492,0,0,.41528],117:[0,.44444,0,0,.68102],118:[0,.44444,.03704,0,.56666],119:[0,.44444,.02778,0,.83148],120:[0,.44444,0,0,.65903],121:[.19444,.44444,.03704,0,.59028],122:[0,.44444,.04213,0,.55509],160:[0,0,0,0,.25],915:[0,.68611,.15972,0,.65694],916:[0,.68611,0,0,.95833],920:[0,.68611,.03194,0,.86722],923:[0,.68611,0,0,.80555],926:[0,.68611,.07458,0,.84125],928:[0,.68611,.08229,0,.98229],931:[0,.68611,.05451,0,.88507],933:[0,.68611,.15972,0,.67083],934:[0,.68611,0,0,.76666],936:[0,.68611,.11653,0,.71402],937:[0,.68611,.04835,0,.8789],945:[0,.44444,0,0,.76064],946:[.19444,.69444,.03403,0,.65972],947:[.19444,.44444,.06389,0,.59003],948:[0,.69444,.03819,0,.52222],949:[0,.44444,0,0,.52882],950:[.19444,.69444,.06215,0,.50833],951:[.19444,.44444,.03704,0,.6],952:[0,.69444,.03194,0,.5618],953:[0,.44444,0,0,.41204],954:[0,.44444,0,0,.66759],955:[0,.69444,0,0,.67083],956:[.19444,.44444,0,0,.70787],957:[0,.44444,.06898,0,.57685],958:[.19444,.69444,.03021,0,.50833],959:[0,.44444,0,0,.58472],960:[0,.44444,.03704,0,.68241],961:[.19444,.44444,0,0,.6118],962:[.09722,.44444,.07917,0,.42361],963:[0,.44444,.03704,0,.68588],964:[0,.44444,.13472,0,.52083],965:[0,.44444,.03704,0,.63055],966:[.19444,.44444,0,0,.74722],967:[.19444,.44444,0,0,.71805],968:[.19444,.69444,.03704,0,.75833],969:[0,.44444,.03704,0,.71782],977:[0,.69444,0,0,.69155],981:[.19444,.69444,0,0,.7125],982:[0,.44444,.03194,0,.975],1009:[.19444,.44444,0,0,.6118],1013:[0,.44444,0,0,.48333],57649:[0,.44444,0,0,.39352],57911:[.19444,.44444,0,0,.43889]},"Math-Italic":{32:[0,0,0,0,.25],48:[0,.43056,0,0,.5],49:[0,.43056,0,0,.5],50:[0,.43056,0,0,.5],51:[.19444,.43056,0,0,.5],52:[.19444,.43056,0,0,.5],53:[.19444,.43056,0,0,.5],54:[0,.64444,0,0,.5],55:[.19444,.43056,0,0,.5],56:[0,.64444,0,0,.5],57:[.19444,.43056,0,0,.5],65:[0,.68333,0,.13889,.75],66:[0,.68333,.05017,.08334,.75851],67:[0,.68333,.07153,.08334,.71472],68:[0,.68333,.02778,.05556,.82792],69:[0,.68333,.05764,.08334,.7382],70:[0,.68333,.13889,.08334,.64306],71:[0,.68333,0,.08334,.78625],72:[0,.68333,.08125,.05556,.83125],73:[0,.68333,.07847,.11111,.43958],74:[0,.68333,.09618,.16667,.55451],75:[0,.68333,.07153,.05556,.84931],76:[0,.68333,0,.02778,.68056],77:[0,.68333,.10903,.08334,.97014],78:[0,.68333,.10903,.08334,.80347],79:[0,.68333,.02778,.08334,.76278],80:[0,.68333,.13889,.08334,.64201],81:[.19444,.68333,0,.08334,.79056],82:[0,.68333,.00773,.08334,.75929],83:[0,.68333,.05764,.08334,.6132],84:[0,.68333,.13889,.08334,.58438],85:[0,.68333,.10903,.02778,.68278],86:[0,.68333,.22222,0,.58333],87:[0,.68333,.13889,0,.94445],88:[0,.68333,.07847,.08334,.82847],89:[0,.68333,.22222,0,.58056],90:[0,.68333,.07153,.08334,.68264],97:[0,.43056,0,0,.52859],98:[0,.69444,0,0,.42917],99:[0,.43056,0,.05556,.43276],100:[0,.69444,0,.16667,.52049],101:[0,.43056,0,.05556,.46563],102:[.19444,.69444,.10764,.16667,.48959],103:[.19444,.43056,.03588,.02778,.47697],104:[0,.69444,0,0,.57616],105:[0,.65952,0,0,.34451],106:[.19444,.65952,.05724,0,.41181],107:[0,.69444,.03148,0,.5206],108:[0,.69444,.01968,.08334,.29838],109:[0,.43056,0,0,.87801],110:[0,.43056,0,0,.60023],111:[0,.43056,0,.05556,.48472],112:[.19444,.43056,0,.08334,.50313],113:[.19444,.43056,.03588,.08334,.44641],114:[0,.43056,.02778,.05556,.45116],115:[0,.43056,0,.05556,.46875],116:[0,.61508,0,.08334,.36111],117:[0,.43056,0,.02778,.57246],118:[0,.43056,.03588,.02778,.48472],119:[0,.43056,.02691,.08334,.71592],120:[0,.43056,0,.02778,.57153],121:[.19444,.43056,.03588,.05556,.49028],122:[0,.43056,.04398,.05556,.46505],160:[0,0,0,0,.25],915:[0,.68333,.13889,.08334,.61528],916:[0,.68333,0,.16667,.83334],920:[0,.68333,.02778,.08334,.76278],923:[0,.68333,0,.16667,.69445],926:[0,.68333,.07569,.08334,.74236],928:[0,.68333,.08125,.05556,.83125],931:[0,.68333,.05764,.08334,.77986],933:[0,.68333,.13889,.05556,.58333],934:[0,.68333,0,.08334,.66667],936:[0,.68333,.11,.05556,.61222],937:[0,.68333,.05017,.08334,.7724],945:[0,.43056,.0037,.02778,.6397],946:[.19444,.69444,.05278,.08334,.56563],947:[.19444,.43056,.05556,0,.51773],948:[0,.69444,.03785,.05556,.44444],949:[0,.43056,0,.08334,.46632],950:[.19444,.69444,.07378,.08334,.4375],951:[.19444,.43056,.03588,.05556,.49653],952:[0,.69444,.02778,.08334,.46944],953:[0,.43056,0,.05556,.35394],954:[0,.43056,0,0,.57616],955:[0,.69444,0,0,.58334],956:[.19444,.43056,0,.02778,.60255],957:[0,.43056,.06366,.02778,.49398],958:[.19444,.69444,.04601,.11111,.4375],959:[0,.43056,0,.05556,.48472],960:[0,.43056,.03588,0,.57003],961:[.19444,.43056,0,.08334,.51702],962:[.09722,.43056,.07986,.08334,.36285],963:[0,.43056,.03588,0,.57141],964:[0,.43056,.1132,.02778,.43715],965:[0,.43056,.03588,.02778,.54028],966:[.19444,.43056,0,.08334,.65417],967:[.19444,.43056,0,.05556,.62569],968:[.19444,.69444,.03588,.11111,.65139],969:[0,.43056,.03588,0,.62245],977:[0,.69444,0,.08334,.59144],981:[.19444,.69444,0,.08334,.59583],982:[0,.43056,.02778,0,.82813],1009:[.19444,.43056,0,.08334,.51702],1013:[0,.43056,0,.05556,.4059],57649:[0,.43056,0,.02778,.32246],57911:[.19444,.43056,0,.08334,.38403]},"SansSerif-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.36667],34:[0,.69444,0,0,.55834],35:[.19444,.69444,0,0,.91667],36:[.05556,.75,0,0,.55],37:[.05556,.75,0,0,1.02912],38:[0,.69444,0,0,.83056],39:[0,.69444,0,0,.30556],40:[.25,.75,0,0,.42778],41:[.25,.75,0,0,.42778],42:[0,.75,0,0,.55],43:[.11667,.61667,0,0,.85556],44:[.10556,.13056,0,0,.30556],45:[0,.45833,0,0,.36667],46:[0,.13056,0,0,.30556],47:[.25,.75,0,0,.55],48:[0,.69444,0,0,.55],49:[0,.69444,0,0,.55],50:[0,.69444,0,0,.55],51:[0,.69444,0,0,.55],52:[0,.69444,0,0,.55],53:[0,.69444,0,0,.55],54:[0,.69444,0,0,.55],55:[0,.69444,0,0,.55],56:[0,.69444,0,0,.55],57:[0,.69444,0,0,.55],58:[0,.45833,0,0,.30556],59:[.10556,.45833,0,0,.30556],61:[-.09375,.40625,0,0,.85556],63:[0,.69444,0,0,.51945],64:[0,.69444,0,0,.73334],65:[0,.69444,0,0,.73334],66:[0,.69444,0,0,.73334],67:[0,.69444,0,0,.70278],68:[0,.69444,0,0,.79445],69:[0,.69444,0,0,.64167],70:[0,.69444,0,0,.61111],71:[0,.69444,0,0,.73334],72:[0,.69444,0,0,.79445],73:[0,.69444,0,0,.33056],74:[0,.69444,0,0,.51945],75:[0,.69444,0,0,.76389],76:[0,.69444,0,0,.58056],77:[0,.69444,0,0,.97778],78:[0,.69444,0,0,.79445],79:[0,.69444,0,0,.79445],80:[0,.69444,0,0,.70278],81:[.10556,.69444,0,0,.79445],82:[0,.69444,0,0,.70278],83:[0,.69444,0,0,.61111],84:[0,.69444,0,0,.73334],85:[0,.69444,0,0,.76389],86:[0,.69444,.01528,0,.73334],87:[0,.69444,.01528,0,1.03889],88:[0,.69444,0,0,.73334],89:[0,.69444,.0275,0,.73334],90:[0,.69444,0,0,.67223],91:[.25,.75,0,0,.34306],93:[.25,.75,0,0,.34306],94:[0,.69444,0,0,.55],95:[.35,.10833,.03056,0,.55],97:[0,.45833,0,0,.525],98:[0,.69444,0,0,.56111],99:[0,.45833,0,0,.48889],100:[0,.69444,0,0,.56111],101:[0,.45833,0,0,.51111],102:[0,.69444,.07639,0,.33611],103:[.19444,.45833,.01528,0,.55],104:[0,.69444,0,0,.56111],105:[0,.69444,0,0,.25556],106:[.19444,.69444,0,0,.28611],107:[0,.69444,0,0,.53056],108:[0,.69444,0,0,.25556],109:[0,.45833,0,0,.86667],110:[0,.45833,0,0,.56111],111:[0,.45833,0,0,.55],112:[.19444,.45833,0,0,.56111],113:[.19444,.45833,0,0,.56111],114:[0,.45833,.01528,0,.37222],115:[0,.45833,0,0,.42167],116:[0,.58929,0,0,.40417],117:[0,.45833,0,0,.56111],118:[0,.45833,.01528,0,.5],119:[0,.45833,.01528,0,.74445],120:[0,.45833,0,0,.5],121:[.19444,.45833,.01528,0,.5],122:[0,.45833,0,0,.47639],126:[.35,.34444,0,0,.55],160:[0,0,0,0,.25],168:[0,.69444,0,0,.55],176:[0,.69444,0,0,.73334],180:[0,.69444,0,0,.55],184:[.17014,0,0,0,.48889],305:[0,.45833,0,0,.25556],567:[.19444,.45833,0,0,.28611],710:[0,.69444,0,0,.55],711:[0,.63542,0,0,.55],713:[0,.63778,0,0,.55],728:[0,.69444,0,0,.55],729:[0,.69444,0,0,.30556],730:[0,.69444,0,0,.73334],732:[0,.69444,0,0,.55],733:[0,.69444,0,0,.55],915:[0,.69444,0,0,.58056],916:[0,.69444,0,0,.91667],920:[0,.69444,0,0,.85556],923:[0,.69444,0,0,.67223],926:[0,.69444,0,0,.73334],928:[0,.69444,0,0,.79445],931:[0,.69444,0,0,.79445],933:[0,.69444,0,0,.85556],934:[0,.69444,0,0,.79445],936:[0,.69444,0,0,.85556],937:[0,.69444,0,0,.79445],8211:[0,.45833,.03056,0,.55],8212:[0,.45833,.03056,0,1.10001],8216:[0,.69444,0,0,.30556],8217:[0,.69444,0,0,.30556],8220:[0,.69444,0,0,.55834],8221:[0,.69444,0,0,.55834]},"SansSerif-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.05733,0,.31945],34:[0,.69444,.00316,0,.5],35:[.19444,.69444,.05087,0,.83334],36:[.05556,.75,.11156,0,.5],37:[.05556,.75,.03126,0,.83334],38:[0,.69444,.03058,0,.75834],39:[0,.69444,.07816,0,.27778],40:[.25,.75,.13164,0,.38889],41:[.25,.75,.02536,0,.38889],42:[0,.75,.11775,0,.5],43:[.08333,.58333,.02536,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,.01946,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,.13164,0,.5],48:[0,.65556,.11156,0,.5],49:[0,.65556,.11156,0,.5],50:[0,.65556,.11156,0,.5],51:[0,.65556,.11156,0,.5],52:[0,.65556,.11156,0,.5],53:[0,.65556,.11156,0,.5],54:[0,.65556,.11156,0,.5],55:[0,.65556,.11156,0,.5],56:[0,.65556,.11156,0,.5],57:[0,.65556,.11156,0,.5],58:[0,.44444,.02502,0,.27778],59:[.125,.44444,.02502,0,.27778],61:[-.13,.37,.05087,0,.77778],63:[0,.69444,.11809,0,.47222],64:[0,.69444,.07555,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,.08293,0,.66667],67:[0,.69444,.11983,0,.63889],68:[0,.69444,.07555,0,.72223],69:[0,.69444,.11983,0,.59722],70:[0,.69444,.13372,0,.56945],71:[0,.69444,.11983,0,.66667],72:[0,.69444,.08094,0,.70834],73:[0,.69444,.13372,0,.27778],74:[0,.69444,.08094,0,.47222],75:[0,.69444,.11983,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,.08094,0,.875],78:[0,.69444,.08094,0,.70834],79:[0,.69444,.07555,0,.73611],80:[0,.69444,.08293,0,.63889],81:[.125,.69444,.07555,0,.73611],82:[0,.69444,.08293,0,.64584],83:[0,.69444,.09205,0,.55556],84:[0,.69444,.13372,0,.68056],85:[0,.69444,.08094,0,.6875],86:[0,.69444,.1615,0,.66667],87:[0,.69444,.1615,0,.94445],88:[0,.69444,.13372,0,.66667],89:[0,.69444,.17261,0,.66667],90:[0,.69444,.11983,0,.61111],91:[.25,.75,.15942,0,.28889],93:[.25,.75,.08719,0,.28889],94:[0,.69444,.0799,0,.5],95:[.35,.09444,.08616,0,.5],97:[0,.44444,.00981,0,.48056],98:[0,.69444,.03057,0,.51667],99:[0,.44444,.08336,0,.44445],100:[0,.69444,.09483,0,.51667],101:[0,.44444,.06778,0,.44445],102:[0,.69444,.21705,0,.30556],103:[.19444,.44444,.10836,0,.5],104:[0,.69444,.01778,0,.51667],105:[0,.67937,.09718,0,.23889],106:[.19444,.67937,.09162,0,.26667],107:[0,.69444,.08336,0,.48889],108:[0,.69444,.09483,0,.23889],109:[0,.44444,.01778,0,.79445],110:[0,.44444,.01778,0,.51667],111:[0,.44444,.06613,0,.5],112:[.19444,.44444,.0389,0,.51667],113:[.19444,.44444,.04169,0,.51667],114:[0,.44444,.10836,0,.34167],115:[0,.44444,.0778,0,.38333],116:[0,.57143,.07225,0,.36111],117:[0,.44444,.04169,0,.51667],118:[0,.44444,.10836,0,.46111],119:[0,.44444,.10836,0,.68334],120:[0,.44444,.09169,0,.46111],121:[.19444,.44444,.10836,0,.46111],122:[0,.44444,.08752,0,.43472],126:[.35,.32659,.08826,0,.5],160:[0,0,0,0,.25],168:[0,.67937,.06385,0,.5],176:[0,.69444,0,0,.73752],184:[.17014,0,0,0,.44445],305:[0,.44444,.04169,0,.23889],567:[.19444,.44444,.04169,0,.26667],710:[0,.69444,.0799,0,.5],711:[0,.63194,.08432,0,.5],713:[0,.60889,.08776,0,.5],714:[0,.69444,.09205,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,.09483,0,.5],729:[0,.67937,.07774,0,.27778],730:[0,.69444,0,0,.73752],732:[0,.67659,.08826,0,.5],733:[0,.69444,.09205,0,.5],915:[0,.69444,.13372,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,.07555,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,.12816,0,.66667],928:[0,.69444,.08094,0,.70834],931:[0,.69444,.11983,0,.72222],933:[0,.69444,.09031,0,.77778],934:[0,.69444,.04603,0,.72222],936:[0,.69444,.09031,0,.77778],937:[0,.69444,.08293,0,.72222],8211:[0,.44444,.08616,0,.5],8212:[0,.44444,.08616,0,1],8216:[0,.69444,.07816,0,.27778],8217:[0,.69444,.07816,0,.27778],8220:[0,.69444,.14205,0,.5],8221:[0,.69444,.00316,0,.5]},"SansSerif-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.31945],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.75834],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,0,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.65556,0,0,.5],49:[0,.65556,0,0,.5],50:[0,.65556,0,0,.5],51:[0,.65556,0,0,.5],52:[0,.65556,0,0,.5],53:[0,.65556,0,0,.5],54:[0,.65556,0,0,.5],55:[0,.65556,0,0,.5],56:[0,.65556,0,0,.5],57:[0,.65556,0,0,.5],58:[0,.44444,0,0,.27778],59:[.125,.44444,0,0,.27778],61:[-.13,.37,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,0,0,.66667],67:[0,.69444,0,0,.63889],68:[0,.69444,0,0,.72223],69:[0,.69444,0,0,.59722],70:[0,.69444,0,0,.56945],71:[0,.69444,0,0,.66667],72:[0,.69444,0,0,.70834],73:[0,.69444,0,0,.27778],74:[0,.69444,0,0,.47222],75:[0,.69444,0,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,0,0,.875],78:[0,.69444,0,0,.70834],79:[0,.69444,0,0,.73611],80:[0,.69444,0,0,.63889],81:[.125,.69444,0,0,.73611],82:[0,.69444,0,0,.64584],83:[0,.69444,0,0,.55556],84:[0,.69444,0,0,.68056],85:[0,.69444,0,0,.6875],86:[0,.69444,.01389,0,.66667],87:[0,.69444,.01389,0,.94445],88:[0,.69444,0,0,.66667],89:[0,.69444,.025,0,.66667],90:[0,.69444,0,0,.61111],91:[.25,.75,0,0,.28889],93:[.25,.75,0,0,.28889],94:[0,.69444,0,0,.5],95:[.35,.09444,.02778,0,.5],97:[0,.44444,0,0,.48056],98:[0,.69444,0,0,.51667],99:[0,.44444,0,0,.44445],100:[0,.69444,0,0,.51667],101:[0,.44444,0,0,.44445],102:[0,.69444,.06944,0,.30556],103:[.19444,.44444,.01389,0,.5],104:[0,.69444,0,0,.51667],105:[0,.67937,0,0,.23889],106:[.19444,.67937,0,0,.26667],107:[0,.69444,0,0,.48889],108:[0,.69444,0,0,.23889],109:[0,.44444,0,0,.79445],110:[0,.44444,0,0,.51667],111:[0,.44444,0,0,.5],112:[.19444,.44444,0,0,.51667],113:[.19444,.44444,0,0,.51667],114:[0,.44444,.01389,0,.34167],115:[0,.44444,0,0,.38333],116:[0,.57143,0,0,.36111],117:[0,.44444,0,0,.51667],118:[0,.44444,.01389,0,.46111],119:[0,.44444,.01389,0,.68334],120:[0,.44444,0,0,.46111],121:[.19444,.44444,.01389,0,.46111],122:[0,.44444,0,0,.43472],126:[.35,.32659,0,0,.5],160:[0,0,0,0,.25],168:[0,.67937,0,0,.5],176:[0,.69444,0,0,.66667],184:[.17014,0,0,0,.44445],305:[0,.44444,0,0,.23889],567:[.19444,.44444,0,0,.26667],710:[0,.69444,0,0,.5],711:[0,.63194,0,0,.5],713:[0,.60889,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.67937,0,0,.27778],730:[0,.69444,0,0,.66667],732:[0,.67659,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.69444,0,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,0,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,0,0,.66667],928:[0,.69444,0,0,.70834],931:[0,.69444,0,0,.72222],933:[0,.69444,0,0,.77778],934:[0,.69444,0,0,.72222],936:[0,.69444,0,0,.77778],937:[0,.69444,0,0,.72222],8211:[0,.44444,.02778,0,.5],8212:[0,.44444,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5]},"Script-Regular":{32:[0,0,0,0,.25],65:[0,.7,.22925,0,.80253],66:[0,.7,.04087,0,.90757],67:[0,.7,.1689,0,.66619],68:[0,.7,.09371,0,.77443],69:[0,.7,.18583,0,.56162],70:[0,.7,.13634,0,.89544],71:[0,.7,.17322,0,.60961],72:[0,.7,.29694,0,.96919],73:[0,.7,.19189,0,.80907],74:[.27778,.7,.19189,0,1.05159],75:[0,.7,.31259,0,.91364],76:[0,.7,.19189,0,.87373],77:[0,.7,.15981,0,1.08031],78:[0,.7,.3525,0,.9015],79:[0,.7,.08078,0,.73787],80:[0,.7,.08078,0,1.01262],81:[0,.7,.03305,0,.88282],82:[0,.7,.06259,0,.85],83:[0,.7,.19189,0,.86767],84:[0,.7,.29087,0,.74697],85:[0,.7,.25815,0,.79996],86:[0,.7,.27523,0,.62204],87:[0,.7,.27523,0,.80532],88:[0,.7,.26006,0,.94445],89:[0,.7,.2939,0,.70961],90:[0,.7,.24037,0,.8212],160:[0,0,0,0,.25]},"Size1-Regular":{32:[0,0,0,0,.25],40:[.35001,.85,0,0,.45834],41:[.35001,.85,0,0,.45834],47:[.35001,.85,0,0,.57778],91:[.35001,.85,0,0,.41667],92:[.35001,.85,0,0,.57778],93:[.35001,.85,0,0,.41667],123:[.35001,.85,0,0,.58334],125:[.35001,.85,0,0,.58334],160:[0,0,0,0,.25],710:[0,.72222,0,0,.55556],732:[0,.72222,0,0,.55556],770:[0,.72222,0,0,.55556],771:[0,.72222,0,0,.55556],8214:[-99e-5,.601,0,0,.77778],8593:[1e-5,.6,0,0,.66667],8595:[1e-5,.6,0,0,.66667],8657:[1e-5,.6,0,0,.77778],8659:[1e-5,.6,0,0,.77778],8719:[.25001,.75,0,0,.94445],8720:[.25001,.75,0,0,.94445],8721:[.25001,.75,0,0,1.05556],8730:[.35001,.85,0,0,1],8739:[-.00599,.606,0,0,.33333],8741:[-.00599,.606,0,0,.55556],8747:[.30612,.805,.19445,0,.47222],8748:[.306,.805,.19445,0,.47222],8749:[.306,.805,.19445,0,.47222],8750:[.30612,.805,.19445,0,.47222],8896:[.25001,.75,0,0,.83334],8897:[.25001,.75,0,0,.83334],8898:[.25001,.75,0,0,.83334],8899:[.25001,.75,0,0,.83334],8968:[.35001,.85,0,0,.47222],8969:[.35001,.85,0,0,.47222],8970:[.35001,.85,0,0,.47222],8971:[.35001,.85,0,0,.47222],9168:[-99e-5,.601,0,0,.66667],10216:[.35001,.85,0,0,.47222],10217:[.35001,.85,0,0,.47222],10752:[.25001,.75,0,0,1.11111],10753:[.25001,.75,0,0,1.11111],10754:[.25001,.75,0,0,1.11111],10756:[.25001,.75,0,0,.83334],10758:[.25001,.75,0,0,.83334]},"Size2-Regular":{32:[0,0,0,0,.25],40:[.65002,1.15,0,0,.59722],41:[.65002,1.15,0,0,.59722],47:[.65002,1.15,0,0,.81111],91:[.65002,1.15,0,0,.47222],92:[.65002,1.15,0,0,.81111],93:[.65002,1.15,0,0,.47222],123:[.65002,1.15,0,0,.66667],125:[.65002,1.15,0,0,.66667],160:[0,0,0,0,.25],710:[0,.75,0,0,1],732:[0,.75,0,0,1],770:[0,.75,0,0,1],771:[0,.75,0,0,1],8719:[.55001,1.05,0,0,1.27778],8720:[.55001,1.05,0,0,1.27778],8721:[.55001,1.05,0,0,1.44445],8730:[.65002,1.15,0,0,1],8747:[.86225,1.36,.44445,0,.55556],8748:[.862,1.36,.44445,0,.55556],8749:[.862,1.36,.44445,0,.55556],8750:[.86225,1.36,.44445,0,.55556],8896:[.55001,1.05,0,0,1.11111],8897:[.55001,1.05,0,0,1.11111],8898:[.55001,1.05,0,0,1.11111],8899:[.55001,1.05,0,0,1.11111],8968:[.65002,1.15,0,0,.52778],8969:[.65002,1.15,0,0,.52778],8970:[.65002,1.15,0,0,.52778],8971:[.65002,1.15,0,0,.52778],10216:[.65002,1.15,0,0,.61111],10217:[.65002,1.15,0,0,.61111],10752:[.55001,1.05,0,0,1.51112],10753:[.55001,1.05,0,0,1.51112],10754:[.55001,1.05,0,0,1.51112],10756:[.55001,1.05,0,0,1.11111],10758:[.55001,1.05,0,0,1.11111]},"Size3-Regular":{32:[0,0,0,0,.25],40:[.95003,1.45,0,0,.73611],41:[.95003,1.45,0,0,.73611],47:[.95003,1.45,0,0,1.04445],91:[.95003,1.45,0,0,.52778],92:[.95003,1.45,0,0,1.04445],93:[.95003,1.45,0,0,.52778],123:[.95003,1.45,0,0,.75],125:[.95003,1.45,0,0,.75],160:[0,0,0,0,.25],710:[0,.75,0,0,1.44445],732:[0,.75,0,0,1.44445],770:[0,.75,0,0,1.44445],771:[0,.75,0,0,1.44445],8730:[.95003,1.45,0,0,1],8968:[.95003,1.45,0,0,.58334],8969:[.95003,1.45,0,0,.58334],8970:[.95003,1.45,0,0,.58334],8971:[.95003,1.45,0,0,.58334],10216:[.95003,1.45,0,0,.75],10217:[.95003,1.45,0,0,.75]},"Size4-Regular":{32:[0,0,0,0,.25],40:[1.25003,1.75,0,0,.79167],41:[1.25003,1.75,0,0,.79167],47:[1.25003,1.75,0,0,1.27778],91:[1.25003,1.75,0,0,.58334],92:[1.25003,1.75,0,0,1.27778],93:[1.25003,1.75,0,0,.58334],123:[1.25003,1.75,0,0,.80556],125:[1.25003,1.75,0,0,.80556],160:[0,0,0,0,.25],710:[0,.825,0,0,1.8889],732:[0,.825,0,0,1.8889],770:[0,.825,0,0,1.8889],771:[0,.825,0,0,1.8889],8730:[1.25003,1.75,0,0,1],8968:[1.25003,1.75,0,0,.63889],8969:[1.25003,1.75,0,0,.63889],8970:[1.25003,1.75,0,0,.63889],8971:[1.25003,1.75,0,0,.63889],9115:[.64502,1.155,0,0,.875],9116:[1e-5,.6,0,0,.875],9117:[.64502,1.155,0,0,.875],9118:[.64502,1.155,0,0,.875],9119:[1e-5,.6,0,0,.875],9120:[.64502,1.155,0,0,.875],9121:[.64502,1.155,0,0,.66667],9122:[-99e-5,.601,0,0,.66667],9123:[.64502,1.155,0,0,.66667],9124:[.64502,1.155,0,0,.66667],9125:[-99e-5,.601,0,0,.66667],9126:[.64502,1.155,0,0,.66667],9127:[1e-5,.9,0,0,.88889],9128:[.65002,1.15,0,0,.88889],9129:[.90001,0,0,0,.88889],9130:[0,.3,0,0,.88889],9131:[1e-5,.9,0,0,.88889],9132:[.65002,1.15,0,0,.88889],9133:[.90001,0,0,0,.88889],9143:[.88502,.915,0,0,1.05556],10216:[1.25003,1.75,0,0,.80556],10217:[1.25003,1.75,0,0,.80556],57344:[-.00499,.605,0,0,1.05556],57345:[-.00499,.605,0,0,1.05556],57680:[0,.12,0,0,.45],57681:[0,.12,0,0,.45],57682:[0,.12,0,0,.45],57683:[0,.12,0,0,.45]},"Typewriter-Regular":{32:[0,0,0,0,.525],33:[0,.61111,0,0,.525],34:[0,.61111,0,0,.525],35:[0,.61111,0,0,.525],36:[.08333,.69444,0,0,.525],37:[.08333,.69444,0,0,.525],38:[0,.61111,0,0,.525],39:[0,.61111,0,0,.525],40:[.08333,.69444,0,0,.525],41:[.08333,.69444,0,0,.525],42:[0,.52083,0,0,.525],43:[-.08056,.53055,0,0,.525],44:[.13889,.125,0,0,.525],45:[-.08056,.53055,0,0,.525],46:[0,.125,0,0,.525],47:[.08333,.69444,0,0,.525],48:[0,.61111,0,0,.525],49:[0,.61111,0,0,.525],50:[0,.61111,0,0,.525],51:[0,.61111,0,0,.525],52:[0,.61111,0,0,.525],53:[0,.61111,0,0,.525],54:[0,.61111,0,0,.525],55:[0,.61111,0,0,.525],56:[0,.61111,0,0,.525],57:[0,.61111,0,0,.525],58:[0,.43056,0,0,.525],59:[.13889,.43056,0,0,.525],60:[-.05556,.55556,0,0,.525],61:[-.19549,.41562,0,0,.525],62:[-.05556,.55556,0,0,.525],63:[0,.61111,0,0,.525],64:[0,.61111,0,0,.525],65:[0,.61111,0,0,.525],66:[0,.61111,0,0,.525],67:[0,.61111,0,0,.525],68:[0,.61111,0,0,.525],69:[0,.61111,0,0,.525],70:[0,.61111,0,0,.525],71:[0,.61111,0,0,.525],72:[0,.61111,0,0,.525],73:[0,.61111,0,0,.525],74:[0,.61111,0,0,.525],75:[0,.61111,0,0,.525],76:[0,.61111,0,0,.525],77:[0,.61111,0,0,.525],78:[0,.61111,0,0,.525],79:[0,.61111,0,0,.525],80:[0,.61111,0,0,.525],81:[.13889,.61111,0,0,.525],82:[0,.61111,0,0,.525],83:[0,.61111,0,0,.525],84:[0,.61111,0,0,.525],85:[0,.61111,0,0,.525],86:[0,.61111,0,0,.525],87:[0,.61111,0,0,.525],88:[0,.61111,0,0,.525],89:[0,.61111,0,0,.525],90:[0,.61111,0,0,.525],91:[.08333,.69444,0,0,.525],92:[.08333,.69444,0,0,.525],93:[.08333,.69444,0,0,.525],94:[0,.61111,0,0,.525],95:[.09514,0,0,0,.525],96:[0,.61111,0,0,.525],97:[0,.43056,0,0,.525],98:[0,.61111,0,0,.525],99:[0,.43056,0,0,.525],100:[0,.61111,0,0,.525],101:[0,.43056,0,0,.525],102:[0,.61111,0,0,.525],103:[.22222,.43056,0,0,.525],104:[0,.61111,0,0,.525],105:[0,.61111,0,0,.525],106:[.22222,.61111,0,0,.525],107:[0,.61111,0,0,.525],108:[0,.61111,0,0,.525],109:[0,.43056,0,0,.525],110:[0,.43056,0,0,.525],111:[0,.43056,0,0,.525],112:[.22222,.43056,0,0,.525],113:[.22222,.43056,0,0,.525],114:[0,.43056,0,0,.525],115:[0,.43056,0,0,.525],116:[0,.55358,0,0,.525],117:[0,.43056,0,0,.525],118:[0,.43056,0,0,.525],119:[0,.43056,0,0,.525],120:[0,.43056,0,0,.525],121:[.22222,.43056,0,0,.525],122:[0,.43056,0,0,.525],123:[.08333,.69444,0,0,.525],124:[.08333,.69444,0,0,.525],125:[.08333,.69444,0,0,.525],126:[0,.61111,0,0,.525],127:[0,.61111,0,0,.525],160:[0,0,0,0,.525],176:[0,.61111,0,0,.525],184:[.19445,0,0,0,.525],305:[0,.43056,0,0,.525],567:[.22222,.43056,0,0,.525],711:[0,.56597,0,0,.525],713:[0,.56555,0,0,.525],714:[0,.61111,0,0,.525],715:[0,.61111,0,0,.525],728:[0,.61111,0,0,.525],730:[0,.61111,0,0,.525],770:[0,.61111,0,0,.525],771:[0,.61111,0,0,.525],776:[0,.61111,0,0,.525],915:[0,.61111,0,0,.525],916:[0,.61111,0,0,.525],920:[0,.61111,0,0,.525],923:[0,.61111,0,0,.525],926:[0,.61111,0,0,.525],928:[0,.61111,0,0,.525],931:[0,.61111,0,0,.525],933:[0,.61111,0,0,.525],934:[0,.61111,0,0,.525],936:[0,.61111,0,0,.525],937:[0,.61111,0,0,.525],8216:[0,.61111,0,0,.525],8217:[0,.61111,0,0,.525],8242:[0,.61111,0,0,.525],9251:[.11111,.21944,0,0,.525]}},ve={slant:[.25,.25,.25],space:[0,0,0],stretch:[0,0,0],shrink:[0,0,0],xHeight:[.431,.431,.431],quad:[1,1.171,1.472],extraSpace:[0,0,0],num1:[.677,.732,.925],num2:[.394,.384,.387],num3:[.444,.471,.504],denom1:[.686,.752,1.025],denom2:[.345,.344,.532],sup1:[.413,.503,.504],sup2:[.363,.431,.404],sup3:[.289,.286,.294],sub1:[.15,.143,.2],sub2:[.247,.286,.4],supDrop:[.386,.353,.494],subDrop:[.05,.071,.1],delim1:[2.39,1.7,1.98],delim2:[1.01,1.157,1.42],axisHeight:[.25,.25,.25],defaultRuleThickness:[.04,.049,.049],bigOpSpacing1:[.111,.111,.111],bigOpSpacing2:[.166,.166,.166],bigOpSpacing3:[.2,.2,.2],bigOpSpacing4:[.6,.611,.611],bigOpSpacing5:[.1,.143,.143],sqrtRuleThickness:[.04,.04,.04],ptPerEm:[10,10,10],doubleRuleSep:[.2,.2,.2],arrayRuleWidth:[.04,.04,.04],fboxsep:[.3,.3,.3],fboxrule:[.04,.04,.04]},Ot={Å:"A",Ð:"D",Þ:"o",å:"a",ð:"d",þ:"o",А:"A",Б:"B",В:"B",Г:"F",Д:"A",Е:"E",Ж:"K",З:"3",И:"N",Й:"N",К:"K",Л:"N",М:"M",Н:"H",О:"O",П:"N",Р:"P",С:"C",Т:"T",У:"y",Ф:"O",Х:"X",Ц:"U",Ч:"h",Ш:"W",Щ:"W",Ъ:"B",Ы:"X",Ь:"B",Э:"3",Ю:"X",Я:"R",а:"a",б:"b",в:"a",г:"r",д:"y",е:"e",ж:"m",з:"e",и:"n",й:"n",к:"n",л:"n",м:"m",н:"n",о:"o",п:"n",р:"p",с:"c",т:"o",у:"y",ф:"b",х:"x",ц:"n",ч:"n",ш:"w",щ:"w",ъ:"a",ы:"m",ь:"a",э:"e",ю:"m",я:"r"};function Ga(r,e){x0[r]=e}function ft(r,e,t){if(!x0[e])throw new Error("Font metrics not found for font: "+e+".");var a=r.charCodeAt(0),n=x0[e][a];if(!n&&r[0]in Ot&&(a=Ot[r[0]].charCodeAt(0),n=x0[e][a]),!n&&t==="text"&&vr(a)&&(n=x0[e][77]),n)return{depth:n[0],height:n[1],italic:n[2],skew:n[3],width:n[4]}}var Ue={};function Va(r){var e;if(r>=5?e=0:r>=3?e=1:e=2,!Ue[e]){var t=Ue[e]={cssEmPerMu:ve.quad[e]/18};for(var a in ve)ve.hasOwnProperty(a)&&(t[a]=ve[a][e])}return Ue[e]}var Ua=[[1,1,1],[2,1,1],[3,1,1],[4,2,1],[5,2,1],[6,3,1],[7,4,2],[8,6,3],[9,7,6],[10,8,7],[11,10,9]],Ft=[.5,.6,.7,.8,.9,1,1.2,1.44,1.728,2.074,2.488],Ht=function(e,t){return t.size<2?e:Ua[e-1][t.size-1]};class A0{constructor(e){this.style=void 0,this.color=void 0,this.size=void 0,this.textSize=void 0,this.phantom=void 0,this.font=void 0,this.fontFamily=void 0,this.fontWeight=void 0,this.fontShape=void 0,this.sizeMultiplier=void 0,this.maxSize=void 0,this.minRuleThickness=void 0,this._fontMetrics=void 0,this.style=e.style,this.color=e.color,this.size=e.size||A0.BASESIZE,this.textSize=e.textSize||this.size,this.phantom=!!e.phantom,this.font=e.font||"",this.fontFamily=e.fontFamily||"",this.fontWeight=e.fontWeight||"",this.fontShape=e.fontShape||"",this.sizeMultiplier=Ft[this.size-1],this.maxSize=e.maxSize,this.minRuleThickness=e.minRuleThickness,this._fontMetrics=void 0}extend(e){var t={style:this.style,size:this.size,textSize:this.textSize,color:this.color,phantom:this.phantom,font:this.font,fontFamily:this.fontFamily,fontWeight:this.fontWeight,fontShape:this.fontShape,maxSize:this.maxSize,minRuleThickness:this.minRuleThickness};for(var a in e)e.hasOwnProperty(a)&&(t[a]=e[a]);return new A0(t)}havingStyle(e){return this.style===e?this:this.extend({style:e,size:Ht(this.textSize,e)})}havingCrampedStyle(){return this.havingStyle(this.style.cramp())}havingSize(e){return this.size===e&&this.textSize===e?this:this.extend({style:this.style.text(),size:e,textSize:e,sizeMultiplier:Ft[e-1]})}havingBaseStyle(e){e=e||this.style.text();var t=Ht(A0.BASESIZE,e);return this.size===t&&this.textSize===A0.BASESIZE&&this.style===e?this:this.extend({style:e,size:t})}havingBaseSizing(){var e;switch(this.style.id){case 4:case 5:e=3;break;case 6:case 7:e=1;break;default:e=6}return this.extend({style:this.style.text(),size:e})}withColor(e){return this.extend({color:e})}withPhantom(){return this.extend({phantom:!0})}withFont(e){return this.extend({font:e})}withTextFontFamily(e){return this.extend({fontFamily:e,font:""})}withTextFontWeight(e){return this.extend({fontWeight:e,font:""})}withTextFontShape(e){return this.extend({fontShape:e,font:""})}sizingClasses(e){return e.size!==this.size?["sizing","reset-size"+e.size,"size"+this.size]:[]}baseSizingClasses(){return this.size!==A0.BASESIZE?["sizing","reset-size"+this.size,"size"+A0.BASESIZE]:[]}fontMetrics(){return this._fontMetrics||(this._fontMetrics=Va(this.size)),this._fontMetrics}getColor(){return this.phantom?"transparent":this.color}}A0.BASESIZE=6;var nt={pt:1,mm:7227/2540,cm:7227/254,in:72.27,bp:803/800,pc:12,dd:1238/1157,cc:14856/1157,nd:685/642,nc:1370/107,sp:1/65536,px:803/800},Ya={ex:!0,em:!0,mu:!0},gr=function(e){return typeof e!="string"&&(e=e.unit),e in nt||e in Ya||e==="ex"},K=function(e,t){var a;if(e.unit in nt)a=nt[e.unit]/t.fontMetrics().ptPerEm/t.sizeMultiplier;else if(e.unit==="mu")a=t.fontMetrics().cssEmPerMu;else{var n;if(t.style.isTight()?n=t.havingStyle(t.style.text()):n=t,e.unit==="ex")a=n.fontMetrics().xHeight;else if(e.unit==="em")a=n.fontMetrics().quad;else throw new M("Invalid unit: '"+e.unit+"'");n!==t&&(a*=n.sizeMultiplier/t.sizeMultiplier)}return Math.min(e.number*a,t.maxSize)},A=function(e){return+e.toFixed(4)+"em"},L0=function(e){return e.filter(t=>t).join(" ")},br=function(e,t,a){if(this.classes=e||[],this.attributes={},this.height=0,this.depth=0,this.maxFontSize=0,this.style=a||{},t){t.style.isTight()&&this.classes.push("mtight");var n=t.getColor();n&&(this.style.color=n)}},yr=function(e){var t=document.createElement(e);t.className=L0(this.classes);for(var a in this.style)this.style.hasOwnProperty(a)&&(t.style[a]=this.style[a]);for(var n in this.attributes)this.attributes.hasOwnProperty(n)&&t.setAttribute(n,this.attributes[n]);for(var s=0;s",t};class he{constructor(e,t,a,n){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.width=void 0,this.maxFontSize=void 0,this.style=void 0,br.call(this,e,a,n),this.children=t||[]}setAttribute(e,t){this.attributes[e]=t}hasClass(e){return q.contains(this.classes,e)}toNode(){return yr.call(this,"span")}toMarkup(){return xr.call(this,"span")}}class pt{constructor(e,t,a,n){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,br.call(this,t,n),this.children=a||[],this.setAttribute("href",e)}setAttribute(e,t){this.attributes[e]=t}hasClass(e){return q.contains(this.classes,e)}toNode(){return yr.call(this,"a")}toMarkup(){return xr.call(this,"a")}}class Xa{constructor(e,t,a){this.src=void 0,this.alt=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.alt=t,this.src=e,this.classes=["mord"],this.style=a}hasClass(e){return q.contains(this.classes,e)}toNode(){var e=document.createElement("img");e.src=this.src,e.alt=this.alt,e.className="mord";for(var t in this.style)this.style.hasOwnProperty(t)&&(e.style[t]=this.style[t]);return e}toMarkup(){var e=''+q.escape(this.alt)+'0&&(t=document.createElement("span"),t.style.marginRight=A(this.italic)),this.classes.length>0&&(t=t||document.createElement("span"),t.className=L0(this.classes));for(var a in this.style)this.style.hasOwnProperty(a)&&(t=t||document.createElement("span"),t.style[a]=this.style[a]);return t?(t.appendChild(e),t):e}toMarkup(){var e=!1,t="0&&(a+="margin-right:"+this.italic+"em;");for(var n in this.style)this.style.hasOwnProperty(n)&&(a+=q.hyphenate(n)+":"+this.style[n]+";");a&&(e=!0,t+=' style="'+q.escape(a)+'"');var s=q.escape(this.text);return e?(t+=">",t+=s,t+="",t):s}}class D0{constructor(e,t){this.children=void 0,this.attributes=void 0,this.children=e||[],this.attributes=t||{}}toNode(){var e="http://www.w3.org/2000/svg",t=document.createElementNS(e,"svg");for(var a in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,a)&&t.setAttribute(a,this.attributes[a]);for(var n=0;n':''}}class it{constructor(e){this.attributes=void 0,this.attributes=e||{}}toNode(){var e="http://www.w3.org/2000/svg",t=document.createElementNS(e,"line");for(var a in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,a)&&t.setAttribute(a,this.attributes[a]);return t}toMarkup(){var e=" but got "+String(r)+".")}var ja={bin:1,close:1,inner:1,open:1,punct:1,rel:1},Za={"accent-token":1,mathord:1,"op-token":1,spacing:1,textord:1},$={math:{},text:{}};function i(r,e,t,a,n,s){$[r][n]={font:e,group:t,replace:a},s&&a&&($[r][a]=$[r][n])}var l="math",k="text",u="main",d="ams",W="accent-token",D="bin",i0="close",te="inner",E="mathord",_="op-token",h0="open",qe="punct",f="rel",q0="spacing",v="textord";i(l,u,f,"≡","\\equiv",!0);i(l,u,f,"≺","\\prec",!0);i(l,u,f,"≻","\\succ",!0);i(l,u,f,"∼","\\sim",!0);i(l,u,f,"⊥","\\perp");i(l,u,f,"⪯","\\preceq",!0);i(l,u,f,"⪰","\\succeq",!0);i(l,u,f,"≃","\\simeq",!0);i(l,u,f,"∣","\\mid",!0);i(l,u,f,"≪","\\ll",!0);i(l,u,f,"≫","\\gg",!0);i(l,u,f,"≍","\\asymp",!0);i(l,u,f,"∥","\\parallel");i(l,u,f,"⋈","\\bowtie",!0);i(l,u,f,"⌣","\\smile",!0);i(l,u,f,"⊑","\\sqsubseteq",!0);i(l,u,f,"⊒","\\sqsupseteq",!0);i(l,u,f,"≐","\\doteq",!0);i(l,u,f,"⌢","\\frown",!0);i(l,u,f,"∋","\\ni",!0);i(l,u,f,"∝","\\propto",!0);i(l,u,f,"⊢","\\vdash",!0);i(l,u,f,"⊣","\\dashv",!0);i(l,u,f,"∋","\\owns");i(l,u,qe,".","\\ldotp");i(l,u,qe,"⋅","\\cdotp");i(l,u,v,"#","\\#");i(k,u,v,"#","\\#");i(l,u,v,"&","\\&");i(k,u,v,"&","\\&");i(l,u,v,"ℵ","\\aleph",!0);i(l,u,v,"∀","\\forall",!0);i(l,u,v,"ℏ","\\hbar",!0);i(l,u,v,"∃","\\exists",!0);i(l,u,v,"∇","\\nabla",!0);i(l,u,v,"♭","\\flat",!0);i(l,u,v,"ℓ","\\ell",!0);i(l,u,v,"♮","\\natural",!0);i(l,u,v,"♣","\\clubsuit",!0);i(l,u,v,"℘","\\wp",!0);i(l,u,v,"♯","\\sharp",!0);i(l,u,v,"♢","\\diamondsuit",!0);i(l,u,v,"ℜ","\\Re",!0);i(l,u,v,"♡","\\heartsuit",!0);i(l,u,v,"ℑ","\\Im",!0);i(l,u,v,"♠","\\spadesuit",!0);i(l,u,v,"§","\\S",!0);i(k,u,v,"§","\\S");i(l,u,v,"¶","\\P",!0);i(k,u,v,"¶","\\P");i(l,u,v,"†","\\dag");i(k,u,v,"†","\\dag");i(k,u,v,"†","\\textdagger");i(l,u,v,"‡","\\ddag");i(k,u,v,"‡","\\ddag");i(k,u,v,"‡","\\textdaggerdbl");i(l,u,i0,"⎱","\\rmoustache",!0);i(l,u,h0,"⎰","\\lmoustache",!0);i(l,u,i0,"⟯","\\rgroup",!0);i(l,u,h0,"⟮","\\lgroup",!0);i(l,u,D,"∓","\\mp",!0);i(l,u,D,"⊖","\\ominus",!0);i(l,u,D,"⊎","\\uplus",!0);i(l,u,D,"⊓","\\sqcap",!0);i(l,u,D,"∗","\\ast");i(l,u,D,"⊔","\\sqcup",!0);i(l,u,D,"◯","\\bigcirc",!0);i(l,u,D,"∙","\\bullet",!0);i(l,u,D,"‡","\\ddagger");i(l,u,D,"≀","\\wr",!0);i(l,u,D,"⨿","\\amalg");i(l,u,D,"&","\\And");i(l,u,f,"⟵","\\longleftarrow",!0);i(l,u,f,"⇐","\\Leftarrow",!0);i(l,u,f,"⟸","\\Longleftarrow",!0);i(l,u,f,"⟶","\\longrightarrow",!0);i(l,u,f,"⇒","\\Rightarrow",!0);i(l,u,f,"⟹","\\Longrightarrow",!0);i(l,u,f,"↔","\\leftrightarrow",!0);i(l,u,f,"⟷","\\longleftrightarrow",!0);i(l,u,f,"⇔","\\Leftrightarrow",!0);i(l,u,f,"⟺","\\Longleftrightarrow",!0);i(l,u,f,"↦","\\mapsto",!0);i(l,u,f,"⟼","\\longmapsto",!0);i(l,u,f,"↗","\\nearrow",!0);i(l,u,f,"↩","\\hookleftarrow",!0);i(l,u,f,"↪","\\hookrightarrow",!0);i(l,u,f,"↘","\\searrow",!0);i(l,u,f,"↼","\\leftharpoonup",!0);i(l,u,f,"⇀","\\rightharpoonup",!0);i(l,u,f,"↙","\\swarrow",!0);i(l,u,f,"↽","\\leftharpoondown",!0);i(l,u,f,"⇁","\\rightharpoondown",!0);i(l,u,f,"↖","\\nwarrow",!0);i(l,u,f,"⇌","\\rightleftharpoons",!0);i(l,d,f,"≮","\\nless",!0);i(l,d,f,"","\\@nleqslant");i(l,d,f,"","\\@nleqq");i(l,d,f,"⪇","\\lneq",!0);i(l,d,f,"≨","\\lneqq",!0);i(l,d,f,"","\\@lvertneqq");i(l,d,f,"⋦","\\lnsim",!0);i(l,d,f,"⪉","\\lnapprox",!0);i(l,d,f,"⊀","\\nprec",!0);i(l,d,f,"⋠","\\npreceq",!0);i(l,d,f,"⋨","\\precnsim",!0);i(l,d,f,"⪹","\\precnapprox",!0);i(l,d,f,"≁","\\nsim",!0);i(l,d,f,"","\\@nshortmid");i(l,d,f,"∤","\\nmid",!0);i(l,d,f,"⊬","\\nvdash",!0);i(l,d,f,"⊭","\\nvDash",!0);i(l,d,f,"⋪","\\ntriangleleft");i(l,d,f,"⋬","\\ntrianglelefteq",!0);i(l,d,f,"⊊","\\subsetneq",!0);i(l,d,f,"","\\@varsubsetneq");i(l,d,f,"⫋","\\subsetneqq",!0);i(l,d,f,"","\\@varsubsetneqq");i(l,d,f,"≯","\\ngtr",!0);i(l,d,f,"","\\@ngeqslant");i(l,d,f,"","\\@ngeqq");i(l,d,f,"⪈","\\gneq",!0);i(l,d,f,"≩","\\gneqq",!0);i(l,d,f,"","\\@gvertneqq");i(l,d,f,"⋧","\\gnsim",!0);i(l,d,f,"⪊","\\gnapprox",!0);i(l,d,f,"⊁","\\nsucc",!0);i(l,d,f,"⋡","\\nsucceq",!0);i(l,d,f,"⋩","\\succnsim",!0);i(l,d,f,"⪺","\\succnapprox",!0);i(l,d,f,"≆","\\ncong",!0);i(l,d,f,"","\\@nshortparallel");i(l,d,f,"∦","\\nparallel",!0);i(l,d,f,"⊯","\\nVDash",!0);i(l,d,f,"⋫","\\ntriangleright");i(l,d,f,"⋭","\\ntrianglerighteq",!0);i(l,d,f,"","\\@nsupseteqq");i(l,d,f,"⊋","\\supsetneq",!0);i(l,d,f,"","\\@varsupsetneq");i(l,d,f,"⫌","\\supsetneqq",!0);i(l,d,f,"","\\@varsupsetneqq");i(l,d,f,"⊮","\\nVdash",!0);i(l,d,f,"⪵","\\precneqq",!0);i(l,d,f,"⪶","\\succneqq",!0);i(l,d,f,"","\\@nsubseteqq");i(l,d,D,"⊴","\\unlhd");i(l,d,D,"⊵","\\unrhd");i(l,d,f,"↚","\\nleftarrow",!0);i(l,d,f,"↛","\\nrightarrow",!0);i(l,d,f,"⇍","\\nLeftarrow",!0);i(l,d,f,"⇏","\\nRightarrow",!0);i(l,d,f,"↮","\\nleftrightarrow",!0);i(l,d,f,"⇎","\\nLeftrightarrow",!0);i(l,d,f,"△","\\vartriangle");i(l,d,v,"ℏ","\\hslash");i(l,d,v,"▽","\\triangledown");i(l,d,v,"◊","\\lozenge");i(l,d,v,"Ⓢ","\\circledS");i(l,d,v,"®","\\circledR");i(k,d,v,"®","\\circledR");i(l,d,v,"∡","\\measuredangle",!0);i(l,d,v,"∄","\\nexists");i(l,d,v,"℧","\\mho");i(l,d,v,"Ⅎ","\\Finv",!0);i(l,d,v,"⅁","\\Game",!0);i(l,d,v,"‵","\\backprime");i(l,d,v,"▲","\\blacktriangle");i(l,d,v,"▼","\\blacktriangledown");i(l,d,v,"■","\\blacksquare");i(l,d,v,"⧫","\\blacklozenge");i(l,d,v,"★","\\bigstar");i(l,d,v,"∢","\\sphericalangle",!0);i(l,d,v,"∁","\\complement",!0);i(l,d,v,"ð","\\eth",!0);i(k,u,v,"ð","ð");i(l,d,v,"╱","\\diagup");i(l,d,v,"╲","\\diagdown");i(l,d,v,"□","\\square");i(l,d,v,"□","\\Box");i(l,d,v,"◊","\\Diamond");i(l,d,v,"¥","\\yen",!0);i(k,d,v,"¥","\\yen",!0);i(l,d,v,"✓","\\checkmark",!0);i(k,d,v,"✓","\\checkmark");i(l,d,v,"ℶ","\\beth",!0);i(l,d,v,"ℸ","\\daleth",!0);i(l,d,v,"ℷ","\\gimel",!0);i(l,d,v,"ϝ","\\digamma",!0);i(l,d,v,"ϰ","\\varkappa");i(l,d,h0,"┌","\\@ulcorner",!0);i(l,d,i0,"┐","\\@urcorner",!0);i(l,d,h0,"└","\\@llcorner",!0);i(l,d,i0,"┘","\\@lrcorner",!0);i(l,d,f,"≦","\\leqq",!0);i(l,d,f,"⩽","\\leqslant",!0);i(l,d,f,"⪕","\\eqslantless",!0);i(l,d,f,"≲","\\lesssim",!0);i(l,d,f,"⪅","\\lessapprox",!0);i(l,d,f,"≊","\\approxeq",!0);i(l,d,D,"⋖","\\lessdot");i(l,d,f,"⋘","\\lll",!0);i(l,d,f,"≶","\\lessgtr",!0);i(l,d,f,"⋚","\\lesseqgtr",!0);i(l,d,f,"⪋","\\lesseqqgtr",!0);i(l,d,f,"≑","\\doteqdot");i(l,d,f,"≓","\\risingdotseq",!0);i(l,d,f,"≒","\\fallingdotseq",!0);i(l,d,f,"∽","\\backsim",!0);i(l,d,f,"⋍","\\backsimeq",!0);i(l,d,f,"⫅","\\subseteqq",!0);i(l,d,f,"⋐","\\Subset",!0);i(l,d,f,"⊏","\\sqsubset",!0);i(l,d,f,"≼","\\preccurlyeq",!0);i(l,d,f,"⋞","\\curlyeqprec",!0);i(l,d,f,"≾","\\precsim",!0);i(l,d,f,"⪷","\\precapprox",!0);i(l,d,f,"⊲","\\vartriangleleft");i(l,d,f,"⊴","\\trianglelefteq");i(l,d,f,"⊨","\\vDash",!0);i(l,d,f,"⊪","\\Vvdash",!0);i(l,d,f,"⌣","\\smallsmile");i(l,d,f,"⌢","\\smallfrown");i(l,d,f,"≏","\\bumpeq",!0);i(l,d,f,"≎","\\Bumpeq",!0);i(l,d,f,"≧","\\geqq",!0);i(l,d,f,"⩾","\\geqslant",!0);i(l,d,f,"⪖","\\eqslantgtr",!0);i(l,d,f,"≳","\\gtrsim",!0);i(l,d,f,"⪆","\\gtrapprox",!0);i(l,d,D,"⋗","\\gtrdot");i(l,d,f,"⋙","\\ggg",!0);i(l,d,f,"≷","\\gtrless",!0);i(l,d,f,"⋛","\\gtreqless",!0);i(l,d,f,"⪌","\\gtreqqless",!0);i(l,d,f,"≖","\\eqcirc",!0);i(l,d,f,"≗","\\circeq",!0);i(l,d,f,"≜","\\triangleq",!0);i(l,d,f,"∼","\\thicksim");i(l,d,f,"≈","\\thickapprox");i(l,d,f,"⫆","\\supseteqq",!0);i(l,d,f,"⋑","\\Supset",!0);i(l,d,f,"⊐","\\sqsupset",!0);i(l,d,f,"≽","\\succcurlyeq",!0);i(l,d,f,"⋟","\\curlyeqsucc",!0);i(l,d,f,"≿","\\succsim",!0);i(l,d,f,"⪸","\\succapprox",!0);i(l,d,f,"⊳","\\vartriangleright");i(l,d,f,"⊵","\\trianglerighteq");i(l,d,f,"⊩","\\Vdash",!0);i(l,d,f,"∣","\\shortmid");i(l,d,f,"∥","\\shortparallel");i(l,d,f,"≬","\\between",!0);i(l,d,f,"⋔","\\pitchfork",!0);i(l,d,f,"∝","\\varpropto");i(l,d,f,"◀","\\blacktriangleleft");i(l,d,f,"∴","\\therefore",!0);i(l,d,f,"∍","\\backepsilon");i(l,d,f,"▶","\\blacktriangleright");i(l,d,f,"∵","\\because",!0);i(l,d,f,"⋘","\\llless");i(l,d,f,"⋙","\\gggtr");i(l,d,D,"⊲","\\lhd");i(l,d,D,"⊳","\\rhd");i(l,d,f,"≂","\\eqsim",!0);i(l,u,f,"⋈","\\Join");i(l,d,f,"≑","\\Doteq",!0);i(l,d,D,"∔","\\dotplus",!0);i(l,d,D,"∖","\\smallsetminus");i(l,d,D,"⋒","\\Cap",!0);i(l,d,D,"⋓","\\Cup",!0);i(l,d,D,"⩞","\\doublebarwedge",!0);i(l,d,D,"⊟","\\boxminus",!0);i(l,d,D,"⊞","\\boxplus",!0);i(l,d,D,"⋇","\\divideontimes",!0);i(l,d,D,"⋉","\\ltimes",!0);i(l,d,D,"⋊","\\rtimes",!0);i(l,d,D,"⋋","\\leftthreetimes",!0);i(l,d,D,"⋌","\\rightthreetimes",!0);i(l,d,D,"⋏","\\curlywedge",!0);i(l,d,D,"⋎","\\curlyvee",!0);i(l,d,D,"⊝","\\circleddash",!0);i(l,d,D,"⊛","\\circledast",!0);i(l,d,D,"⋅","\\centerdot");i(l,d,D,"⊺","\\intercal",!0);i(l,d,D,"⋒","\\doublecap");i(l,d,D,"⋓","\\doublecup");i(l,d,D,"⊠","\\boxtimes",!0);i(l,d,f,"⇢","\\dashrightarrow",!0);i(l,d,f,"⇠","\\dashleftarrow",!0);i(l,d,f,"⇇","\\leftleftarrows",!0);i(l,d,f,"⇆","\\leftrightarrows",!0);i(l,d,f,"⇚","\\Lleftarrow",!0);i(l,d,f,"↞","\\twoheadleftarrow",!0);i(l,d,f,"↢","\\leftarrowtail",!0);i(l,d,f,"↫","\\looparrowleft",!0);i(l,d,f,"⇋","\\leftrightharpoons",!0);i(l,d,f,"↶","\\curvearrowleft",!0);i(l,d,f,"↺","\\circlearrowleft",!0);i(l,d,f,"↰","\\Lsh",!0);i(l,d,f,"⇈","\\upuparrows",!0);i(l,d,f,"↿","\\upharpoonleft",!0);i(l,d,f,"⇃","\\downharpoonleft",!0);i(l,u,f,"⊶","\\origof",!0);i(l,u,f,"⊷","\\imageof",!0);i(l,d,f,"⊸","\\multimap",!0);i(l,d,f,"↭","\\leftrightsquigarrow",!0);i(l,d,f,"⇉","\\rightrightarrows",!0);i(l,d,f,"⇄","\\rightleftarrows",!0);i(l,d,f,"↠","\\twoheadrightarrow",!0);i(l,d,f,"↣","\\rightarrowtail",!0);i(l,d,f,"↬","\\looparrowright",!0);i(l,d,f,"↷","\\curvearrowright",!0);i(l,d,f,"↻","\\circlearrowright",!0);i(l,d,f,"↱","\\Rsh",!0);i(l,d,f,"⇊","\\downdownarrows",!0);i(l,d,f,"↾","\\upharpoonright",!0);i(l,d,f,"⇂","\\downharpoonright",!0);i(l,d,f,"⇝","\\rightsquigarrow",!0);i(l,d,f,"⇝","\\leadsto");i(l,d,f,"⇛","\\Rrightarrow",!0);i(l,d,f,"↾","\\restriction");i(l,u,v,"‘","`");i(l,u,v,"$","\\$");i(k,u,v,"$","\\$");i(k,u,v,"$","\\textdollar");i(l,u,v,"%","\\%");i(k,u,v,"%","\\%");i(l,u,v,"_","\\_");i(k,u,v,"_","\\_");i(k,u,v,"_","\\textunderscore");i(l,u,v,"∠","\\angle",!0);i(l,u,v,"∞","\\infty",!0);i(l,u,v,"′","\\prime");i(l,u,v,"△","\\triangle");i(l,u,v,"Γ","\\Gamma",!0);i(l,u,v,"Δ","\\Delta",!0);i(l,u,v,"Θ","\\Theta",!0);i(l,u,v,"Λ","\\Lambda",!0);i(l,u,v,"Ξ","\\Xi",!0);i(l,u,v,"Π","\\Pi",!0);i(l,u,v,"Σ","\\Sigma",!0);i(l,u,v,"Υ","\\Upsilon",!0);i(l,u,v,"Φ","\\Phi",!0);i(l,u,v,"Ψ","\\Psi",!0);i(l,u,v,"Ω","\\Omega",!0);i(l,u,v,"A","Α");i(l,u,v,"B","Β");i(l,u,v,"E","Ε");i(l,u,v,"Z","Ζ");i(l,u,v,"H","Η");i(l,u,v,"I","Ι");i(l,u,v,"K","Κ");i(l,u,v,"M","Μ");i(l,u,v,"N","Ν");i(l,u,v,"O","Ο");i(l,u,v,"P","Ρ");i(l,u,v,"T","Τ");i(l,u,v,"X","Χ");i(l,u,v,"¬","\\neg",!0);i(l,u,v,"¬","\\lnot");i(l,u,v,"⊤","\\top");i(l,u,v,"⊥","\\bot");i(l,u,v,"∅","\\emptyset");i(l,d,v,"∅","\\varnothing");i(l,u,E,"α","\\alpha",!0);i(l,u,E,"β","\\beta",!0);i(l,u,E,"γ","\\gamma",!0);i(l,u,E,"δ","\\delta",!0);i(l,u,E,"ϵ","\\epsilon",!0);i(l,u,E,"ζ","\\zeta",!0);i(l,u,E,"η","\\eta",!0);i(l,u,E,"θ","\\theta",!0);i(l,u,E,"ι","\\iota",!0);i(l,u,E,"κ","\\kappa",!0);i(l,u,E,"λ","\\lambda",!0);i(l,u,E,"μ","\\mu",!0);i(l,u,E,"ν","\\nu",!0);i(l,u,E,"ξ","\\xi",!0);i(l,u,E,"ο","\\omicron",!0);i(l,u,E,"π","\\pi",!0);i(l,u,E,"ρ","\\rho",!0);i(l,u,E,"σ","\\sigma",!0);i(l,u,E,"τ","\\tau",!0);i(l,u,E,"υ","\\upsilon",!0);i(l,u,E,"ϕ","\\phi",!0);i(l,u,E,"χ","\\chi",!0);i(l,u,E,"ψ","\\psi",!0);i(l,u,E,"ω","\\omega",!0);i(l,u,E,"ε","\\varepsilon",!0);i(l,u,E,"ϑ","\\vartheta",!0);i(l,u,E,"ϖ","\\varpi",!0);i(l,u,E,"ϱ","\\varrho",!0);i(l,u,E,"ς","\\varsigma",!0);i(l,u,E,"φ","\\varphi",!0);i(l,u,D,"∗","*",!0);i(l,u,D,"+","+");i(l,u,D,"−","-",!0);i(l,u,D,"⋅","\\cdot",!0);i(l,u,D,"∘","\\circ",!0);i(l,u,D,"÷","\\div",!0);i(l,u,D,"±","\\pm",!0);i(l,u,D,"×","\\times",!0);i(l,u,D,"∩","\\cap",!0);i(l,u,D,"∪","\\cup",!0);i(l,u,D,"∖","\\setminus",!0);i(l,u,D,"∧","\\land");i(l,u,D,"∨","\\lor");i(l,u,D,"∧","\\wedge",!0);i(l,u,D,"∨","\\vee",!0);i(l,u,v,"√","\\surd");i(l,u,h0,"⟨","\\langle",!0);i(l,u,h0,"∣","\\lvert");i(l,u,h0,"∥","\\lVert");i(l,u,i0,"?","?");i(l,u,i0,"!","!");i(l,u,i0,"⟩","\\rangle",!0);i(l,u,i0,"∣","\\rvert");i(l,u,i0,"∥","\\rVert");i(l,u,f,"=","=");i(l,u,f,":",":");i(l,u,f,"≈","\\approx",!0);i(l,u,f,"≅","\\cong",!0);i(l,u,f,"≥","\\ge");i(l,u,f,"≥","\\geq",!0);i(l,u,f,"←","\\gets");i(l,u,f,">","\\gt",!0);i(l,u,f,"∈","\\in",!0);i(l,u,f,"","\\@not");i(l,u,f,"⊂","\\subset",!0);i(l,u,f,"⊃","\\supset",!0);i(l,u,f,"⊆","\\subseteq",!0);i(l,u,f,"⊇","\\supseteq",!0);i(l,d,f,"⊈","\\nsubseteq",!0);i(l,d,f,"⊉","\\nsupseteq",!0);i(l,u,f,"⊨","\\models");i(l,u,f,"←","\\leftarrow",!0);i(l,u,f,"≤","\\le");i(l,u,f,"≤","\\leq",!0);i(l,u,f,"<","\\lt",!0);i(l,u,f,"→","\\rightarrow",!0);i(l,u,f,"→","\\to");i(l,d,f,"≱","\\ngeq",!0);i(l,d,f,"≰","\\nleq",!0);i(l,u,q0," ","\\ ");i(l,u,q0," ","\\space");i(l,u,q0," ","\\nobreakspace");i(k,u,q0," ","\\ ");i(k,u,q0," "," ");i(k,u,q0," ","\\space");i(k,u,q0," ","\\nobreakspace");i(l,u,q0,null,"\\nobreak");i(l,u,q0,null,"\\allowbreak");i(l,u,qe,",",",");i(l,u,qe,";",";");i(l,d,D,"⊼","\\barwedge",!0);i(l,d,D,"⊻","\\veebar",!0);i(l,u,D,"⊙","\\odot",!0);i(l,u,D,"⊕","\\oplus",!0);i(l,u,D,"⊗","\\otimes",!0);i(l,u,v,"∂","\\partial",!0);i(l,u,D,"⊘","\\oslash",!0);i(l,d,D,"⊚","\\circledcirc",!0);i(l,d,D,"⊡","\\boxdot",!0);i(l,u,D,"△","\\bigtriangleup");i(l,u,D,"▽","\\bigtriangledown");i(l,u,D,"†","\\dagger");i(l,u,D,"⋄","\\diamond");i(l,u,D,"⋆","\\star");i(l,u,D,"◃","\\triangleleft");i(l,u,D,"▹","\\triangleright");i(l,u,h0,"{","\\{");i(k,u,v,"{","\\{");i(k,u,v,"{","\\textbraceleft");i(l,u,i0,"}","\\}");i(k,u,v,"}","\\}");i(k,u,v,"}","\\textbraceright");i(l,u,h0,"{","\\lbrace");i(l,u,i0,"}","\\rbrace");i(l,u,h0,"[","\\lbrack",!0);i(k,u,v,"[","\\lbrack",!0);i(l,u,i0,"]","\\rbrack",!0);i(k,u,v,"]","\\rbrack",!0);i(l,u,h0,"(","\\lparen",!0);i(l,u,i0,")","\\rparen",!0);i(k,u,v,"<","\\textless",!0);i(k,u,v,">","\\textgreater",!0);i(l,u,h0,"⌊","\\lfloor",!0);i(l,u,i0,"⌋","\\rfloor",!0);i(l,u,h0,"⌈","\\lceil",!0);i(l,u,i0,"⌉","\\rceil",!0);i(l,u,v,"\\","\\backslash");i(l,u,v,"∣","|");i(l,u,v,"∣","\\vert");i(k,u,v,"|","\\textbar",!0);i(l,u,v,"∥","\\|");i(l,u,v,"∥","\\Vert");i(k,u,v,"∥","\\textbardbl");i(k,u,v,"~","\\textasciitilde");i(k,u,v,"\\","\\textbackslash");i(k,u,v,"^","\\textasciicircum");i(l,u,f,"↑","\\uparrow",!0);i(l,u,f,"⇑","\\Uparrow",!0);i(l,u,f,"↓","\\downarrow",!0);i(l,u,f,"⇓","\\Downarrow",!0);i(l,u,f,"↕","\\updownarrow",!0);i(l,u,f,"⇕","\\Updownarrow",!0);i(l,u,_,"∐","\\coprod");i(l,u,_,"⋁","\\bigvee");i(l,u,_,"⋀","\\bigwedge");i(l,u,_,"⨄","\\biguplus");i(l,u,_,"⋂","\\bigcap");i(l,u,_,"⋃","\\bigcup");i(l,u,_,"∫","\\int");i(l,u,_,"∫","\\intop");i(l,u,_,"∬","\\iint");i(l,u,_,"∭","\\iiint");i(l,u,_,"∏","\\prod");i(l,u,_,"∑","\\sum");i(l,u,_,"⨂","\\bigotimes");i(l,u,_,"⨁","\\bigoplus");i(l,u,_,"⨀","\\bigodot");i(l,u,_,"∮","\\oint");i(l,u,_,"∯","\\oiint");i(l,u,_,"∰","\\oiiint");i(l,u,_,"⨆","\\bigsqcup");i(l,u,_,"∫","\\smallint");i(k,u,te,"…","\\textellipsis");i(l,u,te,"…","\\mathellipsis");i(k,u,te,"…","\\ldots",!0);i(l,u,te,"…","\\ldots",!0);i(l,u,te,"⋯","\\@cdots",!0);i(l,u,te,"⋱","\\ddots",!0);i(l,u,v,"⋮","\\varvdots");i(l,u,W,"ˊ","\\acute");i(l,u,W,"ˋ","\\grave");i(l,u,W,"¨","\\ddot");i(l,u,W,"~","\\tilde");i(l,u,W,"ˉ","\\bar");i(l,u,W,"˘","\\breve");i(l,u,W,"ˇ","\\check");i(l,u,W,"^","\\hat");i(l,u,W,"⃗","\\vec");i(l,u,W,"˙","\\dot");i(l,u,W,"˚","\\mathring");i(l,u,E,"","\\@imath");i(l,u,E,"","\\@jmath");i(l,u,v,"ı","ı");i(l,u,v,"ȷ","ȷ");i(k,u,v,"ı","\\i",!0);i(k,u,v,"ȷ","\\j",!0);i(k,u,v,"ß","\\ss",!0);i(k,u,v,"æ","\\ae",!0);i(k,u,v,"œ","\\oe",!0);i(k,u,v,"ø","\\o",!0);i(k,u,v,"Æ","\\AE",!0);i(k,u,v,"Œ","\\OE",!0);i(k,u,v,"Ø","\\O",!0);i(k,u,W,"ˊ","\\'");i(k,u,W,"ˋ","\\`");i(k,u,W,"ˆ","\\^");i(k,u,W,"˜","\\~");i(k,u,W,"ˉ","\\=");i(k,u,W,"˘","\\u");i(k,u,W,"˙","\\.");i(k,u,W,"¸","\\c");i(k,u,W,"˚","\\r");i(k,u,W,"ˇ","\\v");i(k,u,W,"¨",'\\"');i(k,u,W,"˝","\\H");i(k,u,W,"◯","\\textcircled");var wr={"--":!0,"---":!0,"``":!0,"''":!0};i(k,u,v,"–","--",!0);i(k,u,v,"–","\\textendash");i(k,u,v,"—","---",!0);i(k,u,v,"—","\\textemdash");i(k,u,v,"‘","`",!0);i(k,u,v,"‘","\\textquoteleft");i(k,u,v,"’","'",!0);i(k,u,v,"’","\\textquoteright");i(k,u,v,"“","``",!0);i(k,u,v,"“","\\textquotedblleft");i(k,u,v,"”","''",!0);i(k,u,v,"”","\\textquotedblright");i(l,u,v,"°","\\degree",!0);i(k,u,v,"°","\\degree");i(k,u,v,"°","\\textdegree",!0);i(l,u,v,"£","\\pounds");i(l,u,v,"£","\\mathsterling",!0);i(k,u,v,"£","\\pounds");i(k,u,v,"£","\\textsterling",!0);i(l,d,v,"✠","\\maltese");i(k,d,v,"✠","\\maltese");var Pt='0123456789/@."';for(var Ye=0;Ye0)return b0(s,p,n,t,o.concat(g));if(c){var y,w;if(c==="boldsymbol"){var x=Qa(s,n,t,o,a);y=x.fontName,w=[x.fontClass]}else h?(y=Mr[c].fontName,w=[c]):(y=xe(c,t.fontWeight,t.fontShape),w=[c,t.fontWeight,t.fontShape]);if(Ee(s,y,n).metrics)return b0(s,y,n,t,o.concat(w));if(wr.hasOwnProperty(s)&&y.slice(0,10)==="Typewriter"){for(var z=[],T=0;T{if(L0(r.classes)!==L0(e.classes)||r.skew!==e.skew||r.maxFontSize!==e.maxFontSize)return!1;if(r.classes.length===1){var t=r.classes[0];if(t==="mbin"||t==="mord")return!1}for(var a in r.style)if(r.style.hasOwnProperty(a)&&r.style[a]!==e.style[a])return!1;for(var n in e.style)if(e.style.hasOwnProperty(n)&&r.style[n]!==e.style[n])return!1;return!0},t1=r=>{for(var e=0;et&&(t=o.height),o.depth>a&&(a=o.depth),o.maxFontSize>n&&(n=o.maxFontSize)}e.height=t,e.depth=a,e.maxFontSize=n},l0=function(e,t,a,n){var s=new he(e,t,a,n);return vt(s),s},kr=(r,e,t,a)=>new he(r,e,t,a),r1=function(e,t,a){var n=l0([e],[],t);return n.height=Math.max(a||t.fontMetrics().defaultRuleThickness,t.minRuleThickness),n.style.borderBottomWidth=A(n.height),n.maxFontSize=1,n},a1=function(e,t,a,n){var s=new pt(e,t,a,n);return vt(s),s},Sr=function(e){var t=new ue(e);return vt(t),t},n1=function(e,t){return e instanceof ue?l0([],[e],t):e},i1=function(e){if(e.positionType==="individualShift"){for(var t=e.children,a=[t[0]],n=-t[0].shift-t[0].elem.depth,s=n,o=1;o{var t=l0(["mspace"],[],e),a=K(r,e);return t.style.marginRight=A(a),t},xe=function(e,t,a){var n="";switch(e){case"amsrm":n="AMS";break;case"textrm":n="Main";break;case"textsf":n="SansSerif";break;case"texttt":n="Typewriter";break;default:n=e}var s;return t==="textbf"&&a==="textit"?s="BoldItalic":t==="textbf"?s="Bold":t==="textit"?s="Italic":s="Regular",n+"-"+s},Mr={mathbf:{variant:"bold",fontName:"Main-Bold"},mathrm:{variant:"normal",fontName:"Main-Regular"},textit:{variant:"italic",fontName:"Main-Italic"},mathit:{variant:"italic",fontName:"Main-Italic"},mathnormal:{variant:"italic",fontName:"Math-Italic"},mathbb:{variant:"double-struck",fontName:"AMS-Regular"},mathcal:{variant:"script",fontName:"Caligraphic-Regular"},mathfrak:{variant:"fraktur",fontName:"Fraktur-Regular"},mathscr:{variant:"script",fontName:"Script-Regular"},mathsf:{variant:"sans-serif",fontName:"SansSerif-Regular"},mathtt:{variant:"monospace",fontName:"Typewriter-Regular"}},zr={vec:["vec",.471,.714],oiintSize1:["oiintSize1",.957,.499],oiintSize2:["oiintSize2",1.472,.659],oiiintSize1:["oiiintSize1",1.304,.499],oiiintSize2:["oiiintSize2",1.98,.659]},o1=function(e,t){var[a,n,s]=zr[e],o=new P0(a),h=new D0([o],{width:A(n),height:A(s),style:"width:"+A(n),viewBox:"0 0 "+1e3*n+" "+1e3*s,preserveAspectRatio:"xMinYMin"}),c=kr(["overlay"],[h],t);return c.height=s,c.style.height=A(s),c.style.width=A(n),c},b={fontMap:Mr,makeSymbol:b0,mathsym:Ja,makeSpan:l0,makeSvgSpan:kr,makeLineSpan:r1,makeAnchor:a1,makeFragment:Sr,wrapFragment:n1,makeVList:s1,makeOrd:_a,makeGlue:l1,staticSvg:o1,svgData:zr,tryCombineChars:t1},Z={number:3,unit:"mu"},X0={number:4,unit:"mu"},z0={number:5,unit:"mu"},u1={mord:{mop:Z,mbin:X0,mrel:z0,minner:Z},mop:{mord:Z,mop:Z,mrel:z0,minner:Z},mbin:{mord:X0,mop:X0,mopen:X0,minner:X0},mrel:{mord:z0,mop:z0,mopen:z0,minner:z0},mopen:{},mclose:{mop:Z,mbin:X0,mrel:z0,minner:Z},mpunct:{mord:Z,mop:Z,mrel:z0,mopen:Z,mclose:Z,mpunct:Z,minner:Z},minner:{mord:Z,mop:Z,mbin:X0,mrel:z0,mopen:Z,mpunct:Z,minner:Z}},h1={mord:{mop:Z},mop:{mord:Z,mop:Z},mbin:{},mrel:{},mopen:{},mclose:{mop:Z},mpunct:{},minner:{mop:Z}},Ar={},De={},Ce={};function B(r){for(var{type:e,names:t,props:a,handler:n,htmlBuilder:s,mathmlBuilder:o}=r,h={type:e,numArgs:a.numArgs,argTypes:a.argTypes,allowedInArgument:!!a.allowedInArgument,allowedInText:!!a.allowedInText,allowedInMath:a.allowedInMath===void 0?!0:a.allowedInMath,numOptionalArgs:a.numOptionalArgs||0,infix:!!a.infix,primitive:!!a.primitive,handler:n},c=0;c{var C=T.classes[0],N=z.classes[0];C==="mbin"&&q.contains(c1,N)?T.classes[0]="mord":N==="mbin"&&q.contains(m1,C)&&(z.classes[0]="mord")},{node:y},w,x),Xt(s,(z,T)=>{var C=lt(T),N=lt(z),O=C&&N?z.hasClass("mtight")?h1[C][N]:u1[C][N]:null;if(O)return b.makeGlue(O,p)},{node:y},w,x),s},Xt=function r(e,t,a,n,s){n&&e.push(n);for(var o=0;ow=>{e.splice(y+1,0,w),o++})(o)}n&&e.pop()},Tr=function(e){return e instanceof ue||e instanceof pt||e instanceof he&&e.hasClass("enclosing")?e:null},p1=function r(e,t){var a=Tr(e);if(a){var n=a.children;if(n.length){if(t==="right")return r(n[n.length-1],"right");if(t==="left")return r(n[0],"left")}}return e},lt=function(e,t){return e?(t&&(e=p1(e,t)),f1[e.classes[0]]||null):null},oe=function(e,t){var a=["nulldelimiter"].concat(e.baseSizingClasses());return C0(t.concat(a))},P=function(e,t,a){if(!e)return C0();if(De[e.type]){var n=De[e.type](e,t);if(a&&t.size!==a.size){n=C0(t.sizingClasses(a),[n],t);var s=t.sizeMultiplier/a.sizeMultiplier;n.height*=s,n.depth*=s}return n}else throw new M("Got group of unknown type: '"+e.type+"'")};function we(r,e){var t=C0(["base"],r,e),a=C0(["strut"]);return a.style.height=A(t.height+t.depth),t.depth&&(a.style.verticalAlign=A(-t.depth)),t.children.unshift(a),t}function ot(r,e){var t=null;r.length===1&&r[0].type==="tag"&&(t=r[0].tag,r=r[0].body);var a=t0(r,e,"root"),n;a.length===2&&a[1].hasClass("tag")&&(n=a.pop());for(var s=[],o=[],h=0;h0&&(s.push(we(o,e)),o=[]),s.push(a[h]));o.length>0&&s.push(we(o,e));var p;t?(p=we(t0(t,e,!0)),p.classes=["tag"],s.push(p)):n&&s.push(n);var g=C0(["katex-html"],s);if(g.setAttribute("aria-hidden","true"),p){var y=p.children[0];y.style.height=A(g.height+g.depth),g.depth&&(y.style.verticalAlign=A(-g.depth))}return g}function Br(r){return new ue(r)}class c0{constructor(e,t,a){this.type=void 0,this.attributes=void 0,this.children=void 0,this.classes=void 0,this.type=e,this.attributes={},this.children=t||[],this.classes=a||[]}setAttribute(e,t){this.attributes[e]=t}getAttribute(e){return this.attributes[e]}toNode(){var e=document.createElementNS("http://www.w3.org/1998/Math/MathML",this.type);for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);this.classes.length>0&&(e.className=L0(this.classes));for(var a=0;a0&&(e+=' class ="'+q.escape(L0(this.classes))+'"'),e+=">";for(var a=0;a",e}toText(){return this.children.map(e=>e.toText()).join("")}}class ie{constructor(e){this.text=void 0,this.text=e}toNode(){return document.createTextNode(this.text)}toMarkup(){return q.escape(this.toText())}toText(){return this.text}}class v1{constructor(e){this.width=void 0,this.character=void 0,this.width=e,e>=.05555&&e<=.05556?this.character=" ":e>=.1666&&e<=.1667?this.character=" ":e>=.2222&&e<=.2223?this.character=" ":e>=.2777&&e<=.2778?this.character="  ":e>=-.05556&&e<=-.05555?this.character=" ⁣":e>=-.1667&&e<=-.1666?this.character=" ⁣":e>=-.2223&&e<=-.2222?this.character=" ⁣":e>=-.2778&&e<=-.2777?this.character=" ⁣":this.character=null}toNode(){if(this.character)return document.createTextNode(this.character);var e=document.createElementNS("http://www.w3.org/1998/Math/MathML","mspace");return e.setAttribute("width",A(this.width)),e}toMarkup(){return this.character?""+this.character+"":''}toText(){return this.character?this.character:" "}}var S={MathNode:c0,TextNode:ie,SpaceNode:v1,newDocumentFragment:Br},v0=function(e,t,a){return $[t][e]&&$[t][e].replace&&e.charCodeAt(0)!==55349&&!(wr.hasOwnProperty(e)&&a&&(a.fontFamily&&a.fontFamily.slice(4,6)==="tt"||a.font&&a.font.slice(4,6)==="tt"))&&(e=$[t][e].replace),new S.TextNode(e)},gt=function(e){return e.length===1?e[0]:new S.MathNode("mrow",e)},bt=function(e,t){if(t.fontFamily==="texttt")return"monospace";if(t.fontFamily==="textsf")return t.fontShape==="textit"&&t.fontWeight==="textbf"?"sans-serif-bold-italic":t.fontShape==="textit"?"sans-serif-italic":t.fontWeight==="textbf"?"bold-sans-serif":"sans-serif";if(t.fontShape==="textit"&&t.fontWeight==="textbf")return"bold-italic";if(t.fontShape==="textit")return"italic";if(t.fontWeight==="textbf")return"bold";var a=t.font;if(!a||a==="mathnormal")return null;var n=e.mode;if(a==="mathit")return"italic";if(a==="boldsymbol")return e.type==="textord"?"bold":"bold-italic";if(a==="mathbf")return"bold";if(a==="mathbb")return"double-struck";if(a==="mathfrak")return"fraktur";if(a==="mathscr"||a==="mathcal")return"script";if(a==="mathsf")return"sans-serif";if(a==="mathtt")return"monospace";var s=e.text;if(q.contains(["\\imath","\\jmath"],s))return null;$[n][s]&&$[n][s].replace&&(s=$[n][s].replace);var o=b.fontMap[a].fontName;return ft(s,o,n)?b.fontMap[a].variant:null},o0=function(e,t,a){if(e.length===1){var n=X(e[0],t);return a&&n instanceof c0&&n.type==="mo"&&(n.setAttribute("lspace","0em"),n.setAttribute("rspace","0em")),[n]}for(var s=[],o,h=0;h0&&(y.text=y.text.slice(0,1)+"̸"+y.text.slice(1),s.pop())}}}s.push(c),o=c}return s},G0=function(e,t,a){return gt(o0(e,t,a))},X=function(e,t){if(!e)return new S.MathNode("mrow");if(Ce[e.type]){var a=Ce[e.type](e,t);return a}else throw new M("Got group of unknown type: '"+e.type+"'")};function $t(r,e,t,a,n){var s=o0(r,t),o;s.length===1&&s[0]instanceof c0&&q.contains(["mrow","mtable"],s[0].type)?o=s[0]:o=new S.MathNode("mrow",s);var h=new S.MathNode("annotation",[new S.TextNode(e)]);h.setAttribute("encoding","application/x-tex");var c=new S.MathNode("semantics",[o,h]),p=new S.MathNode("math",[c]);p.setAttribute("xmlns","http://www.w3.org/1998/Math/MathML"),a&&p.setAttribute("display","block");var g=n?"katex":"katex-mathml";return b.makeSpan([g],[p])}var Dr=function(e){return new A0({style:e.displayMode?R.DISPLAY:R.TEXT,maxSize:e.maxSize,minRuleThickness:e.minRuleThickness})},Cr=function(e,t){if(t.displayMode){var a=["katex-display"];t.leqno&&a.push("leqno"),t.fleqn&&a.push("fleqn"),e=b.makeSpan(a,[e])}return e},g1=function(e,t,a){var n=Dr(a),s;if(a.output==="mathml")return $t(e,t,n,a.displayMode,!0);if(a.output==="html"){var o=ot(e,n);s=b.makeSpan(["katex"],[o])}else{var h=$t(e,t,n,a.displayMode,!1),c=ot(e,n);s=b.makeSpan(["katex"],[h,c])}return Cr(s,a)},b1=function(e,t,a){var n=Dr(a),s=ot(e,n),o=b.makeSpan(["katex"],[s]);return Cr(o,a)},y1={widehat:"^",widecheck:"ˇ",widetilde:"~",utilde:"~",overleftarrow:"←",underleftarrow:"←",xleftarrow:"←",overrightarrow:"→",underrightarrow:"→",xrightarrow:"→",underbrace:"⏟",overbrace:"⏞",overgroup:"⏠",undergroup:"⏡",overleftrightarrow:"↔",underleftrightarrow:"↔",xleftrightarrow:"↔",Overrightarrow:"⇒",xRightarrow:"⇒",overleftharpoon:"↼",xleftharpoonup:"↼",overrightharpoon:"⇀",xrightharpoonup:"⇀",xLeftarrow:"⇐",xLeftrightarrow:"⇔",xhookleftarrow:"↩",xhookrightarrow:"↪",xmapsto:"↦",xrightharpoondown:"⇁",xleftharpoondown:"↽",xrightleftharpoons:"⇌",xleftrightharpoons:"⇋",xtwoheadleftarrow:"↞",xtwoheadrightarrow:"↠",xlongequal:"=",xtofrom:"⇄",xrightleftarrows:"⇄",xrightequilibrium:"⇌",xleftequilibrium:"⇋","\\cdrightarrow":"→","\\cdleftarrow":"←","\\cdlongequal":"="},x1=function(e){var t=new S.MathNode("mo",[new S.TextNode(y1[e.replace(/^\\/,"")])]);return t.setAttribute("stretchy","true"),t},w1={overrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],overleftarrow:[["leftarrow"],.888,522,"xMinYMin"],underrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],underleftarrow:[["leftarrow"],.888,522,"xMinYMin"],xrightarrow:[["rightarrow"],1.469,522,"xMaxYMin"],"\\cdrightarrow":[["rightarrow"],3,522,"xMaxYMin"],xleftarrow:[["leftarrow"],1.469,522,"xMinYMin"],"\\cdleftarrow":[["leftarrow"],3,522,"xMinYMin"],Overrightarrow:[["doublerightarrow"],.888,560,"xMaxYMin"],xRightarrow:[["doublerightarrow"],1.526,560,"xMaxYMin"],xLeftarrow:[["doubleleftarrow"],1.526,560,"xMinYMin"],overleftharpoon:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoonup:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoondown:[["leftharpoondown"],.888,522,"xMinYMin"],overrightharpoon:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoonup:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoondown:[["rightharpoondown"],.888,522,"xMaxYMin"],xlongequal:[["longequal"],.888,334,"xMinYMin"],"\\cdlongequal":[["longequal"],3,334,"xMinYMin"],xtwoheadleftarrow:[["twoheadleftarrow"],.888,334,"xMinYMin"],xtwoheadrightarrow:[["twoheadrightarrow"],.888,334,"xMaxYMin"],overleftrightarrow:[["leftarrow","rightarrow"],.888,522],overbrace:[["leftbrace","midbrace","rightbrace"],1.6,548],underbrace:[["leftbraceunder","midbraceunder","rightbraceunder"],1.6,548],underleftrightarrow:[["leftarrow","rightarrow"],.888,522],xleftrightarrow:[["leftarrow","rightarrow"],1.75,522],xLeftrightarrow:[["doubleleftarrow","doublerightarrow"],1.75,560],xrightleftharpoons:[["leftharpoondownplus","rightharpoonplus"],1.75,716],xleftrightharpoons:[["leftharpoonplus","rightharpoondownplus"],1.75,716],xhookleftarrow:[["leftarrow","righthook"],1.08,522],xhookrightarrow:[["lefthook","rightarrow"],1.08,522],overlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],underlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],overgroup:[["leftgroup","rightgroup"],.888,342],undergroup:[["leftgroupunder","rightgroupunder"],.888,342],xmapsto:[["leftmapsto","rightarrow"],1.5,522],xtofrom:[["leftToFrom","rightToFrom"],1.75,528],xrightleftarrows:[["baraboveleftarrow","rightarrowabovebar"],1.75,901],xrightequilibrium:[["baraboveshortleftharpoon","rightharpoonaboveshortbar"],1.75,716],xleftequilibrium:[["shortbaraboveleftharpoon","shortrightharpoonabovebar"],1.75,716]},k1=function(e){return e.type==="ordgroup"?e.body.length:1},S1=function(e,t){function a(){var h=4e5,c=e.label.slice(1);if(q.contains(["widehat","widecheck","widetilde","utilde"],c)){var p=e,g=k1(p.base),y,w,x;if(g>5)c==="widehat"||c==="widecheck"?(y=420,h=2364,x=.42,w=c+"4"):(y=312,h=2340,x=.34,w="tilde4");else{var z=[1,1,2,2,3,3][g];c==="widehat"||c==="widecheck"?(h=[0,1062,2364,2364,2364][z],y=[0,239,300,360,420][z],x=[0,.24,.3,.3,.36,.42][z],w=c+z):(h=[0,600,1033,2339,2340][z],y=[0,260,286,306,312][z],x=[0,.26,.286,.3,.306,.34][z],w="tilde"+z)}var T=new P0(w),C=new D0([T],{width:"100%",height:A(x),viewBox:"0 0 "+h+" "+y,preserveAspectRatio:"none"});return{span:b.makeSvgSpan([],[C],t),minWidth:0,height:x}}else{var N=[],O=w1[c],[F,V,L]=O,U=L/1e3,G=F.length,j,Y;if(G===1){var M0=O[3];j=["hide-tail"],Y=[M0]}else if(G===2)j=["halfarrow-left","halfarrow-right"],Y=["xMinYMin","xMaxYMin"];else if(G===3)j=["brace-left","brace-center","brace-right"],Y=["xMinYMin","xMidYMin","xMaxYMin"];else throw new Error(`Correct katexImagesData or update code here to support + `+G+" children.");for(var r0=0;r00&&(n.style.minWidth=A(s)),n},M1=function(e,t,a,n,s){var o,h=e.height+e.depth+a+n;if(/fbox|color|angl/.test(t)){if(o=b.makeSpan(["stretchy",t],[],s),t==="fbox"){var c=s.color&&s.getColor();c&&(o.style.borderColor=c)}}else{var p=[];/^[bx]cancel$/.test(t)&&p.push(new it({x1:"0",y1:"0",x2:"100%",y2:"100%","stroke-width":"0.046em"})),/^x?cancel$/.test(t)&&p.push(new it({x1:"0",y1:"100%",x2:"100%",y2:"0","stroke-width":"0.046em"}));var g=new D0(p,{width:"100%",height:A(h)});o=b.makeSvgSpan([],[g],s)}return o.height=h,o.style.height=A(h),o},N0={encloseSpan:M1,mathMLnode:x1,svgSpan:S1};function H(r,e){if(!r||r.type!==e)throw new Error("Expected node of type "+e+", but got "+(r?"node of type "+r.type:String(r)));return r}function yt(r){var e=Re(r);if(!e)throw new Error("Expected node of symbol group type, but got "+(r?"node of type "+r.type:String(r)));return e}function Re(r){return r&&(r.type==="atom"||Za.hasOwnProperty(r.type))?r:null}var xt=(r,e)=>{var t,a,n;r&&r.type==="supsub"?(a=H(r.base,"accent"),t=a.base,r.base=t,n=Wa(P(r,e)),r.base=a):(a=H(r,"accent"),t=a.base);var s=P(t,e.havingCrampedStyle()),o=a.isShifty&&q.isCharacterBox(t),h=0;if(o){var c=q.getBaseElem(t),p=P(c,e.havingCrampedStyle());h=Lt(p).skew}var g=a.label==="\\c",y=g?s.height+s.depth:Math.min(s.height,e.fontMetrics().xHeight),w;if(a.isStretchy)w=N0.svgSpan(a,e),w=b.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:s},{type:"elem",elem:w,wrapperClasses:["svg-align"],wrapperStyle:h>0?{width:"calc(100% - "+A(2*h)+")",marginLeft:A(2*h)}:void 0}]},e);else{var x,z;a.label==="\\vec"?(x=b.staticSvg("vec",e),z=b.svgData.vec[1]):(x=b.makeOrd({mode:a.mode,text:a.label},e,"textord"),x=Lt(x),x.italic=0,z=x.width,g&&(y+=x.depth)),w=b.makeSpan(["accent-body"],[x]);var T=a.label==="\\textcircled";T&&(w.classes.push("accent-full"),y=s.height);var C=h;T||(C-=z/2),w.style.left=A(C),a.label==="\\textcircled"&&(w.style.top=".2em"),w=b.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:s},{type:"kern",size:-y},{type:"elem",elem:w}]},e)}var N=b.makeSpan(["mord","accent"],[w],e);return n?(n.children[0]=N,n.height=Math.max(N.height,n.height),n.classes[0]="mord",n):N},Nr=(r,e)=>{var t=r.isStretchy?N0.mathMLnode(r.label):new S.MathNode("mo",[v0(r.label,r.mode)]),a=new S.MathNode("mover",[X(r.base,e),t]);return a.setAttribute("accent","true"),a},z1=new RegExp(["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring"].map(r=>"\\"+r).join("|"));B({type:"accent",names:["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring","\\widecheck","\\widehat","\\widetilde","\\overrightarrow","\\overleftarrow","\\Overrightarrow","\\overleftrightarrow","\\overgroup","\\overlinesegment","\\overleftharpoon","\\overrightharpoon"],props:{numArgs:1},handler:(r,e)=>{var t=Ne(e[0]),a=!z1.test(r.funcName),n=!a||r.funcName==="\\widehat"||r.funcName==="\\widetilde"||r.funcName==="\\widecheck";return{type:"accent",mode:r.parser.mode,label:r.funcName,isStretchy:a,isShifty:n,base:t}},htmlBuilder:xt,mathmlBuilder:Nr});B({type:"accent",names:["\\'","\\`","\\^","\\~","\\=","\\u","\\.",'\\"',"\\c","\\r","\\H","\\v","\\textcircled"],props:{numArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["primitive"]},handler:(r,e)=>{var t=e[0],a=r.parser.mode;return a==="math"&&(r.parser.settings.reportNonstrict("mathVsTextAccents","LaTeX's accent "+r.funcName+" works only in text mode"),a="text"),{type:"accent",mode:a,label:r.funcName,isStretchy:!1,isShifty:!0,base:t}},htmlBuilder:xt,mathmlBuilder:Nr});B({type:"accentUnder",names:["\\underleftarrow","\\underrightarrow","\\underleftrightarrow","\\undergroup","\\underlinesegment","\\utilde"],props:{numArgs:1},handler:(r,e)=>{var{parser:t,funcName:a}=r,n=e[0];return{type:"accentUnder",mode:t.mode,label:a,base:n}},htmlBuilder:(r,e)=>{var t=P(r.base,e),a=N0.svgSpan(r,e),n=r.label==="\\utilde"?.12:0,s=b.makeVList({positionType:"top",positionData:t.height,children:[{type:"elem",elem:a,wrapperClasses:["svg-align"]},{type:"kern",size:n},{type:"elem",elem:t}]},e);return b.makeSpan(["mord","accentunder"],[s],e)},mathmlBuilder:(r,e)=>{var t=N0.mathMLnode(r.label),a=new S.MathNode("munder",[X(r.base,e),t]);return a.setAttribute("accentunder","true"),a}});var ke=r=>{var e=new S.MathNode("mpadded",r?[r]:[]);return e.setAttribute("width","+0.6em"),e.setAttribute("lspace","0.3em"),e};B({type:"xArrow",names:["\\xleftarrow","\\xrightarrow","\\xLeftarrow","\\xRightarrow","\\xleftrightarrow","\\xLeftrightarrow","\\xhookleftarrow","\\xhookrightarrow","\\xmapsto","\\xrightharpoondown","\\xrightharpoonup","\\xleftharpoondown","\\xleftharpoonup","\\xrightleftharpoons","\\xleftrightharpoons","\\xlongequal","\\xtwoheadrightarrow","\\xtwoheadleftarrow","\\xtofrom","\\xrightleftarrows","\\xrightequilibrium","\\xleftequilibrium","\\\\cdrightarrow","\\\\cdleftarrow","\\\\cdlongequal"],props:{numArgs:1,numOptionalArgs:1},handler(r,e,t){var{parser:a,funcName:n}=r;return{type:"xArrow",mode:a.mode,label:n,body:e[0],below:t[0]}},htmlBuilder(r,e){var t=e.style,a=e.havingStyle(t.sup()),n=b.wrapFragment(P(r.body,a,e),e),s=r.label.slice(0,2)==="\\x"?"x":"cd";n.classes.push(s+"-arrow-pad");var o;r.below&&(a=e.havingStyle(t.sub()),o=b.wrapFragment(P(r.below,a,e),e),o.classes.push(s+"-arrow-pad"));var h=N0.svgSpan(r,e),c=-e.fontMetrics().axisHeight+.5*h.height,p=-e.fontMetrics().axisHeight-.5*h.height-.111;(n.depth>.25||r.label==="\\xleftequilibrium")&&(p-=n.depth);var g;if(o){var y=-e.fontMetrics().axisHeight+o.height+.5*h.height+.111;g=b.makeVList({positionType:"individualShift",children:[{type:"elem",elem:n,shift:p},{type:"elem",elem:h,shift:c},{type:"elem",elem:o,shift:y}]},e)}else g=b.makeVList({positionType:"individualShift",children:[{type:"elem",elem:n,shift:p},{type:"elem",elem:h,shift:c}]},e);return g.children[0].children[0].children[1].classes.push("svg-align"),b.makeSpan(["mrel","x-arrow"],[g],e)},mathmlBuilder(r,e){var t=N0.mathMLnode(r.label);t.setAttribute("minsize",r.label.charAt(0)==="x"?"1.75em":"3.0em");var a;if(r.body){var n=ke(X(r.body,e));if(r.below){var s=ke(X(r.below,e));a=new S.MathNode("munderover",[t,s,n])}else a=new S.MathNode("mover",[t,n])}else if(r.below){var o=ke(X(r.below,e));a=new S.MathNode("munder",[t,o])}else a=ke(),a=new S.MathNode("mover",[t,a]);return a}});var A1=b.makeSpan;function qr(r,e){var t=t0(r.body,e,!0);return A1([r.mclass],t,e)}function Er(r,e){var t,a=o0(r.body,e);return r.mclass==="minner"?t=new S.MathNode("mpadded",a):r.mclass==="mord"?r.isCharacterBox?(t=a[0],t.type="mi"):t=new S.MathNode("mi",a):(r.isCharacterBox?(t=a[0],t.type="mo"):t=new S.MathNode("mo",a),r.mclass==="mbin"?(t.attributes.lspace="0.22em",t.attributes.rspace="0.22em"):r.mclass==="mpunct"?(t.attributes.lspace="0em",t.attributes.rspace="0.17em"):r.mclass==="mopen"||r.mclass==="mclose"?(t.attributes.lspace="0em",t.attributes.rspace="0em"):r.mclass==="minner"&&(t.attributes.lspace="0.0556em",t.attributes.width="+0.1111em")),t}B({type:"mclass",names:["\\mathord","\\mathbin","\\mathrel","\\mathopen","\\mathclose","\\mathpunct","\\mathinner"],props:{numArgs:1,primitive:!0},handler(r,e){var{parser:t,funcName:a}=r,n=e[0];return{type:"mclass",mode:t.mode,mclass:"m"+a.slice(5),body:Q(n),isCharacterBox:q.isCharacterBox(n)}},htmlBuilder:qr,mathmlBuilder:Er});var Ie=r=>{var e=r.type==="ordgroup"&&r.body.length?r.body[0]:r;return e.type==="atom"&&(e.family==="bin"||e.family==="rel")?"m"+e.family:"mord"};B({type:"mclass",names:["\\@binrel"],props:{numArgs:2},handler(r,e){var{parser:t}=r;return{type:"mclass",mode:t.mode,mclass:Ie(e[0]),body:Q(e[1]),isCharacterBox:q.isCharacterBox(e[1])}}});B({type:"mclass",names:["\\stackrel","\\overset","\\underset"],props:{numArgs:2},handler(r,e){var{parser:t,funcName:a}=r,n=e[1],s=e[0],o;a!=="\\stackrel"?o=Ie(n):o="mrel";var h={type:"op",mode:n.mode,limits:!0,alwaysHandleSupSub:!0,parentIsSupSub:!1,symbol:!1,suppressBaseShift:a!=="\\stackrel",body:Q(n)},c={type:"supsub",mode:s.mode,base:h,sup:a==="\\underset"?null:s,sub:a==="\\underset"?s:null};return{type:"mclass",mode:t.mode,mclass:o,body:[c],isCharacterBox:q.isCharacterBox(c)}},htmlBuilder:qr,mathmlBuilder:Er});B({type:"pmb",names:["\\pmb"],props:{numArgs:1,allowedInText:!0},handler(r,e){var{parser:t}=r;return{type:"pmb",mode:t.mode,mclass:Ie(e[0]),body:Q(e[0])}},htmlBuilder(r,e){var t=t0(r.body,e,!0),a=b.makeSpan([r.mclass],t,e);return a.style.textShadow="0.02em 0.01em 0.04px",a},mathmlBuilder(r,e){var t=o0(r.body,e),a=new S.MathNode("mstyle",t);return a.setAttribute("style","text-shadow: 0.02em 0.01em 0.04px"),a}});var T1={">":"\\\\cdrightarrow","<":"\\\\cdleftarrow","=":"\\\\cdlongequal",A:"\\uparrow",V:"\\downarrow","|":"\\Vert",".":"no arrow"},Wt=()=>({type:"styling",body:[],mode:"math",style:"display"}),jt=r=>r.type==="textord"&&r.text==="@",B1=(r,e)=>(r.type==="mathord"||r.type==="atom")&&r.text===e;function D1(r,e,t){var a=T1[r];switch(a){case"\\\\cdrightarrow":case"\\\\cdleftarrow":return t.callFunction(a,[e[0]],[e[1]]);case"\\uparrow":case"\\downarrow":{var n=t.callFunction("\\\\cdleft",[e[0]],[]),s={type:"atom",text:a,mode:"math",family:"rel"},o=t.callFunction("\\Big",[s],[]),h=t.callFunction("\\\\cdright",[e[1]],[]),c={type:"ordgroup",mode:"math",body:[n,o,h]};return t.callFunction("\\\\cdparent",[c],[])}case"\\\\cdlongequal":return t.callFunction("\\\\cdlongequal",[],[]);case"\\Vert":{var p={type:"textord",text:"\\Vert",mode:"math"};return t.callFunction("\\Big",[p],[])}default:return{type:"textord",text:" ",mode:"math"}}}function C1(r){var e=[];for(r.gullet.beginGroup(),r.gullet.macros.set("\\cr","\\\\\\relax"),r.gullet.beginGroup();;){e.push(r.parseExpression(!1,"\\\\")),r.gullet.endGroup(),r.gullet.beginGroup();var t=r.fetch().text;if(t==="&"||t==="\\\\")r.consume();else if(t==="\\end"){e[e.length-1].length===0&&e.pop();break}else throw new M("Expected \\\\ or \\cr or \\end",r.nextToken)}for(var a=[],n=[a],s=0;s-1))if("<>AV".indexOf(p)>-1)for(var y=0;y<2;y++){for(var w=!0,x=c+1;xAV=|." after @',o[c]);var z=D1(p,g,r),T={type:"styling",body:[z],mode:"math",style:"display"};a.push(T),h=Wt()}s%2===0?a.push(h):a.shift(),a=[],n.push(a)}r.gullet.endGroup(),r.gullet.endGroup();var C=new Array(n[0].length).fill({type:"align",align:"c",pregap:.25,postgap:.25});return{type:"array",mode:"math",body:n,arraystretch:1,addJot:!0,rowGaps:[null],cols:C,colSeparationType:"CD",hLinesBeforeRow:new Array(n.length+1).fill([])}}B({type:"cdlabel",names:["\\\\cdleft","\\\\cdright"],props:{numArgs:1},handler(r,e){var{parser:t,funcName:a}=r;return{type:"cdlabel",mode:t.mode,side:a.slice(4),label:e[0]}},htmlBuilder(r,e){var t=e.havingStyle(e.style.sup()),a=b.wrapFragment(P(r.label,t,e),e);return a.classes.push("cd-label-"+r.side),a.style.bottom=A(.8-a.depth),a.height=0,a.depth=0,a},mathmlBuilder(r,e){var t=new S.MathNode("mrow",[X(r.label,e)]);return t=new S.MathNode("mpadded",[t]),t.setAttribute("width","0"),r.side==="left"&&t.setAttribute("lspace","-1width"),t.setAttribute("voffset","0.7em"),t=new S.MathNode("mstyle",[t]),t.setAttribute("displaystyle","false"),t.setAttribute("scriptlevel","1"),t}});B({type:"cdlabelparent",names:["\\\\cdparent"],props:{numArgs:1},handler(r,e){var{parser:t}=r;return{type:"cdlabelparent",mode:t.mode,fragment:e[0]}},htmlBuilder(r,e){var t=b.wrapFragment(P(r.fragment,e),e);return t.classes.push("cd-vert-arrow"),t},mathmlBuilder(r,e){return new S.MathNode("mrow",[X(r.fragment,e)])}});B({type:"textord",names:["\\@char"],props:{numArgs:1,allowedInText:!0},handler(r,e){for(var{parser:t}=r,a=H(e[0],"ordgroup"),n=a.body,s="",o=0;o=1114111)throw new M("\\@char with invalid code point "+s);return c<=65535?p=String.fromCharCode(c):(c-=65536,p=String.fromCharCode((c>>10)+55296,(c&1023)+56320)),{type:"textord",mode:t.mode,text:p}}});var Rr=(r,e)=>{var t=t0(r.body,e.withColor(r.color),!1);return b.makeFragment(t)},Ir=(r,e)=>{var t=o0(r.body,e.withColor(r.color)),a=new S.MathNode("mstyle",t);return a.setAttribute("mathcolor",r.color),a};B({type:"color",names:["\\textcolor"],props:{numArgs:2,allowedInText:!0,argTypes:["color","original"]},handler(r,e){var{parser:t}=r,a=H(e[0],"color-token").color,n=e[1];return{type:"color",mode:t.mode,color:a,body:Q(n)}},htmlBuilder:Rr,mathmlBuilder:Ir});B({type:"color",names:["\\color"],props:{numArgs:1,allowedInText:!0,argTypes:["color"]},handler(r,e){var{parser:t,breakOnTokenText:a}=r,n=H(e[0],"color-token").color;t.gullet.macros.set("\\current@color",n);var s=t.parseExpression(!0,a);return{type:"color",mode:t.mode,color:n,body:s}},htmlBuilder:Rr,mathmlBuilder:Ir});B({type:"cr",names:["\\\\"],props:{numArgs:0,numOptionalArgs:0,allowedInText:!0},handler(r,e,t){var{parser:a}=r,n=a.gullet.future().text==="["?a.parseSizeGroup(!0):null,s=!a.settings.displayMode||!a.settings.useStrictBehavior("newLineInDisplayMode","In LaTeX, \\\\ or \\newline does nothing in display mode");return{type:"cr",mode:a.mode,newLine:s,size:n&&H(n,"size").value}},htmlBuilder(r,e){var t=b.makeSpan(["mspace"],[],e);return r.newLine&&(t.classes.push("newline"),r.size&&(t.style.marginTop=A(K(r.size,e)))),t},mathmlBuilder(r,e){var t=new S.MathNode("mspace");return r.newLine&&(t.setAttribute("linebreak","newline"),r.size&&t.setAttribute("height",A(K(r.size,e)))),t}});var ut={"\\global":"\\global","\\long":"\\\\globallong","\\\\globallong":"\\\\globallong","\\def":"\\gdef","\\gdef":"\\gdef","\\edef":"\\xdef","\\xdef":"\\xdef","\\let":"\\\\globallet","\\futurelet":"\\\\globalfuture"},Or=r=>{var e=r.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(e))throw new M("Expected a control sequence",r);return e},N1=r=>{var e=r.gullet.popToken();return e.text==="="&&(e=r.gullet.popToken(),e.text===" "&&(e=r.gullet.popToken())),e},Fr=(r,e,t,a)=>{var n=r.gullet.macros.get(t.text);n==null&&(t.noexpand=!0,n={tokens:[t],numArgs:0,unexpandable:!r.gullet.isExpandable(t.text)}),r.gullet.macros.set(e,n,a)};B({type:"internal",names:["\\global","\\long","\\\\globallong"],props:{numArgs:0,allowedInText:!0},handler(r){var{parser:e,funcName:t}=r;e.consumeSpaces();var a=e.fetch();if(ut[a.text])return(t==="\\global"||t==="\\\\globallong")&&(a.text=ut[a.text]),H(e.parseFunction(),"internal");throw new M("Invalid token after macro prefix",a)}});B({type:"internal",names:["\\def","\\gdef","\\edef","\\xdef"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(r){var{parser:e,funcName:t}=r,a=e.gullet.popToken(),n=a.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(n))throw new M("Expected a control sequence",a);for(var s=0,o,h=[[]];e.gullet.future().text!=="{";)if(a=e.gullet.popToken(),a.text==="#"){if(e.gullet.future().text==="{"){o=e.gullet.future(),h[s].push("{");break}if(a=e.gullet.popToken(),!/^[1-9]$/.test(a.text))throw new M('Invalid argument number "'+a.text+'"');if(parseInt(a.text)!==s+1)throw new M('Argument number "'+a.text+'" out of order');s++,h.push([])}else{if(a.text==="EOF")throw new M("Expected a macro definition");h[s].push(a.text)}var{tokens:c}=e.gullet.consumeArg();return o&&c.unshift(o),(t==="\\edef"||t==="\\xdef")&&(c=e.gullet.expandTokens(c),c.reverse()),e.gullet.macros.set(n,{tokens:c,numArgs:s,delimiters:h},t===ut[t]),{type:"internal",mode:e.mode}}});B({type:"internal",names:["\\let","\\\\globallet"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(r){var{parser:e,funcName:t}=r,a=Or(e.gullet.popToken());e.gullet.consumeSpaces();var n=N1(e);return Fr(e,a,n,t==="\\\\globallet"),{type:"internal",mode:e.mode}}});B({type:"internal",names:["\\futurelet","\\\\globalfuture"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(r){var{parser:e,funcName:t}=r,a=Or(e.gullet.popToken()),n=e.gullet.popToken(),s=e.gullet.popToken();return Fr(e,a,s,t==="\\\\globalfuture"),e.gullet.pushToken(s),e.gullet.pushToken(n),{type:"internal",mode:e.mode}}});var ne=function(e,t,a){var n=$.math[e]&&$.math[e].replace,s=ft(n||e,t,a);if(!s)throw new Error("Unsupported symbol "+e+" and font size "+t+".");return s},wt=function(e,t,a,n){var s=a.havingBaseStyle(t),o=b.makeSpan(n.concat(s.sizingClasses(a)),[e],a),h=s.sizeMultiplier/a.sizeMultiplier;return o.height*=h,o.depth*=h,o.maxFontSize=s.sizeMultiplier,o},Hr=function(e,t,a){var n=t.havingBaseStyle(a),s=(1-t.sizeMultiplier/n.sizeMultiplier)*t.fontMetrics().axisHeight;e.classes.push("delimcenter"),e.style.top=A(s),e.height-=s,e.depth+=s},q1=function(e,t,a,n,s,o){var h=b.makeSymbol(e,"Main-Regular",s,n),c=wt(h,t,n,o);return a&&Hr(c,n,t),c},E1=function(e,t,a,n){return b.makeSymbol(e,"Size"+t+"-Regular",a,n)},Lr=function(e,t,a,n,s,o){var h=E1(e,t,s,n),c=wt(b.makeSpan(["delimsizing","size"+t],[h],n),R.TEXT,n,o);return a&&Hr(c,n,R.TEXT),c},je=function(e,t,a){var n;t==="Size1-Regular"?n="delim-size1":n="delim-size4";var s=b.makeSpan(["delimsizinginner",n],[b.makeSpan([],[b.makeSymbol(e,t,a)])]);return{type:"elem",elem:s}},Ze=function(e,t,a){var n=x0["Size4-Regular"][e.charCodeAt(0)]?x0["Size4-Regular"][e.charCodeAt(0)][4]:x0["Size1-Regular"][e.charCodeAt(0)][4],s=new P0("inner",La(e,Math.round(1e3*t))),o=new D0([s],{width:A(n),height:A(t),style:"width:"+A(n),viewBox:"0 0 "+1e3*n+" "+Math.round(1e3*t),preserveAspectRatio:"xMinYMin"}),h=b.makeSvgSpan([],[o],a);return h.height=t,h.style.height=A(t),h.style.width=A(n),{type:"elem",elem:h}},ht=.008,Se={type:"kern",size:-1*ht},R1=["|","\\lvert","\\rvert","\\vert"],I1=["\\|","\\lVert","\\rVert","\\Vert"],Pr=function(e,t,a,n,s,o){var h,c,p,g,y="",w=0;h=p=g=e,c=null;var x="Size1-Regular";e==="\\uparrow"?p=g="⏐":e==="\\Uparrow"?p=g="‖":e==="\\downarrow"?h=p="⏐":e==="\\Downarrow"?h=p="‖":e==="\\updownarrow"?(h="\\uparrow",p="⏐",g="\\downarrow"):e==="\\Updownarrow"?(h="\\Uparrow",p="‖",g="\\Downarrow"):q.contains(R1,e)?(p="∣",y="vert",w=333):q.contains(I1,e)?(p="∥",y="doublevert",w=556):e==="["||e==="\\lbrack"?(h="⎡",p="⎢",g="⎣",x="Size4-Regular",y="lbrack",w=667):e==="]"||e==="\\rbrack"?(h="⎤",p="⎥",g="⎦",x="Size4-Regular",y="rbrack",w=667):e==="\\lfloor"||e==="⌊"?(p=h="⎢",g="⎣",x="Size4-Regular",y="lfloor",w=667):e==="\\lceil"||e==="⌈"?(h="⎡",p=g="⎢",x="Size4-Regular",y="lceil",w=667):e==="\\rfloor"||e==="⌋"?(p=h="⎥",g="⎦",x="Size4-Regular",y="rfloor",w=667):e==="\\rceil"||e==="⌉"?(h="⎤",p=g="⎥",x="Size4-Regular",y="rceil",w=667):e==="("||e==="\\lparen"?(h="⎛",p="⎜",g="⎝",x="Size4-Regular",y="lparen",w=875):e===")"||e==="\\rparen"?(h="⎞",p="⎟",g="⎠",x="Size4-Regular",y="rparen",w=875):e==="\\{"||e==="\\lbrace"?(h="⎧",c="⎨",g="⎩",p="⎪",x="Size4-Regular"):e==="\\}"||e==="\\rbrace"?(h="⎫",c="⎬",g="⎭",p="⎪",x="Size4-Regular"):e==="\\lgroup"||e==="⟮"?(h="⎧",g="⎩",p="⎪",x="Size4-Regular"):e==="\\rgroup"||e==="⟯"?(h="⎫",g="⎭",p="⎪",x="Size4-Regular"):e==="\\lmoustache"||e==="⎰"?(h="⎧",g="⎭",p="⎪",x="Size4-Regular"):(e==="\\rmoustache"||e==="⎱")&&(h="⎫",g="⎩",p="⎪",x="Size4-Regular");var z=ne(h,x,s),T=z.height+z.depth,C=ne(p,x,s),N=C.height+C.depth,O=ne(g,x,s),F=O.height+O.depth,V=0,L=1;if(c!==null){var U=ne(c,x,s);V=U.height+U.depth,L=2}var G=T+F+V,j=Math.max(0,Math.ceil((t-G)/(L*N))),Y=G+j*L*N,M0=n.fontMetrics().axisHeight;a&&(M0*=n.sizeMultiplier);var r0=Y/2-M0,e0=[];if(y.length>0){var U0=Y-T-F,s0=Math.round(Y*1e3),g0=Pa(y,Math.round(U0*1e3)),E0=new P0(y,g0),W0=(w/1e3).toFixed(3)+"em",j0=(s0/1e3).toFixed(3)+"em",Le=new D0([E0],{width:W0,height:j0,viewBox:"0 0 "+w+" "+s0}),R0=b.makeSvgSpan([],[Le],n);R0.height=s0/1e3,R0.style.width=W0,R0.style.height=j0,e0.push({type:"elem",elem:R0})}else{if(e0.push(je(g,x,s)),e0.push(Se),c===null){var I0=Y-T-F+2*ht;e0.push(Ze(p,I0,n))}else{var m0=(Y-T-F-V)/2+2*ht;e0.push(Ze(p,m0,n)),e0.push(Se),e0.push(je(c,x,s)),e0.push(Se),e0.push(Ze(p,m0,n))}e0.push(Se),e0.push(je(h,x,s))}var ae=n.havingBaseStyle(R.TEXT),Pe=b.makeVList({positionType:"bottom",positionData:r0,children:e0},ae);return wt(b.makeSpan(["delimsizing","mult"],[Pe],ae),R.TEXT,n,o)},Ke=80,Je=.08,Qe=function(e,t,a,n,s){var o=Ha(e,n,a),h=new P0(e,o),c=new D0([h],{width:"400em",height:A(t),viewBox:"0 0 400000 "+a,preserveAspectRatio:"xMinYMin slice"});return b.makeSvgSpan(["hide-tail"],[c],s)},O1=function(e,t){var a=t.havingBaseSizing(),n=Yr("\\surd",e*a.sizeMultiplier,Ur,a),s=a.sizeMultiplier,o=Math.max(0,t.minRuleThickness-t.fontMetrics().sqrtRuleThickness),h,c=0,p=0,g=0,y;return n.type==="small"?(g=1e3+1e3*o+Ke,e<1?s=1:e<1.4&&(s=.7),c=(1+o+Je)/s,p=(1+o)/s,h=Qe("sqrtMain",c,g,o,t),h.style.minWidth="0.853em",y=.833/s):n.type==="large"?(g=(1e3+Ke)*se[n.size],p=(se[n.size]+o)/s,c=(se[n.size]+o+Je)/s,h=Qe("sqrtSize"+n.size,c,g,o,t),h.style.minWidth="1.02em",y=1/s):(c=e+o+Je,p=e+o,g=Math.floor(1e3*e+o)+Ke,h=Qe("sqrtTall",c,g,o,t),h.style.minWidth="0.742em",y=1.056),h.height=p,h.style.height=A(c),{span:h,advanceWidth:y,ruleWidth:(t.fontMetrics().sqrtRuleThickness+o)*s}},Gr=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","⌊","⌋","\\lceil","\\rceil","⌈","⌉","\\surd"],F1=["\\uparrow","\\downarrow","\\updownarrow","\\Uparrow","\\Downarrow","\\Updownarrow","|","\\|","\\vert","\\Vert","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","⟮","⟯","\\lmoustache","\\rmoustache","⎰","⎱"],Vr=["<",">","\\langle","\\rangle","/","\\backslash","\\lt","\\gt"],se=[0,1.2,1.8,2.4,3],H1=function(e,t,a,n,s){if(e==="<"||e==="\\lt"||e==="⟨"?e="\\langle":(e===">"||e==="\\gt"||e==="⟩")&&(e="\\rangle"),q.contains(Gr,e)||q.contains(Vr,e))return Lr(e,t,!1,a,n,s);if(q.contains(F1,e))return Pr(e,se[t],!1,a,n,s);throw new M("Illegal delimiter: '"+e+"'")},L1=[{type:"small",style:R.SCRIPTSCRIPT},{type:"small",style:R.SCRIPT},{type:"small",style:R.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4}],P1=[{type:"small",style:R.SCRIPTSCRIPT},{type:"small",style:R.SCRIPT},{type:"small",style:R.TEXT},{type:"stack"}],Ur=[{type:"small",style:R.SCRIPTSCRIPT},{type:"small",style:R.SCRIPT},{type:"small",style:R.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4},{type:"stack"}],G1=function(e){if(e.type==="small")return"Main-Regular";if(e.type==="large")return"Size"+e.size+"-Regular";if(e.type==="stack")return"Size4-Regular";throw new Error("Add support for delim type '"+e.type+"' here.")},Yr=function(e,t,a,n){for(var s=Math.min(2,3-n.style.size),o=s;ot)return a[o]}return a[a.length-1]},Xr=function(e,t,a,n,s,o){e==="<"||e==="\\lt"||e==="⟨"?e="\\langle":(e===">"||e==="\\gt"||e==="⟩")&&(e="\\rangle");var h;q.contains(Vr,e)?h=L1:q.contains(Gr,e)?h=Ur:h=P1;var c=Yr(e,t,h,n);return c.type==="small"?q1(e,c.style,a,n,s,o):c.type==="large"?Lr(e,c.size,a,n,s,o):Pr(e,t,a,n,s,o)},V1=function(e,t,a,n,s,o){var h=n.fontMetrics().axisHeight*n.sizeMultiplier,c=901,p=5/n.fontMetrics().ptPerEm,g=Math.max(t-h,a+h),y=Math.max(g/500*c,2*g-p);return Xr(e,y,!0,n,s,o)},B0={sqrtImage:O1,sizedDelim:H1,sizeToMaxHeight:se,customSizedDelim:Xr,leftRightDelim:V1},Zt={"\\bigl":{mclass:"mopen",size:1},"\\Bigl":{mclass:"mopen",size:2},"\\biggl":{mclass:"mopen",size:3},"\\Biggl":{mclass:"mopen",size:4},"\\bigr":{mclass:"mclose",size:1},"\\Bigr":{mclass:"mclose",size:2},"\\biggr":{mclass:"mclose",size:3},"\\Biggr":{mclass:"mclose",size:4},"\\bigm":{mclass:"mrel",size:1},"\\Bigm":{mclass:"mrel",size:2},"\\biggm":{mclass:"mrel",size:3},"\\Biggm":{mclass:"mrel",size:4},"\\big":{mclass:"mord",size:1},"\\Big":{mclass:"mord",size:2},"\\bigg":{mclass:"mord",size:3},"\\Bigg":{mclass:"mord",size:4}},U1=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","⌊","⌋","\\lceil","\\rceil","⌈","⌉","<",">","\\langle","⟨","\\rangle","⟩","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","⟮","⟯","\\lmoustache","\\rmoustache","⎰","⎱","/","\\backslash","|","\\vert","\\|","\\Vert","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."];function Oe(r,e){var t=Re(r);if(t&&q.contains(U1,t.text))return t;throw t?new M("Invalid delimiter '"+t.text+"' after '"+e.funcName+"'",r):new M("Invalid delimiter type '"+r.type+"'",r)}B({type:"delimsizing",names:["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg"],props:{numArgs:1,argTypes:["primitive"]},handler:(r,e)=>{var t=Oe(e[0],r);return{type:"delimsizing",mode:r.parser.mode,size:Zt[r.funcName].size,mclass:Zt[r.funcName].mclass,delim:t.text}},htmlBuilder:(r,e)=>r.delim==="."?b.makeSpan([r.mclass]):B0.sizedDelim(r.delim,r.size,e,r.mode,[r.mclass]),mathmlBuilder:r=>{var e=[];r.delim!=="."&&e.push(v0(r.delim,r.mode));var t=new S.MathNode("mo",e);r.mclass==="mopen"||r.mclass==="mclose"?t.setAttribute("fence","true"):t.setAttribute("fence","false"),t.setAttribute("stretchy","true");var a=A(B0.sizeToMaxHeight[r.size]);return t.setAttribute("minsize",a),t.setAttribute("maxsize",a),t}});function Kt(r){if(!r.body)throw new Error("Bug: The leftright ParseNode wasn't fully parsed.")}B({type:"leftright-right",names:["\\right"],props:{numArgs:1,primitive:!0},handler:(r,e)=>{var t=r.parser.gullet.macros.get("\\current@color");if(t&&typeof t!="string")throw new M("\\current@color set to non-string in \\right");return{type:"leftright-right",mode:r.parser.mode,delim:Oe(e[0],r).text,color:t}}});B({type:"leftright",names:["\\left"],props:{numArgs:1,primitive:!0},handler:(r,e)=>{var t=Oe(e[0],r),a=r.parser;++a.leftrightDepth;var n=a.parseExpression(!1);--a.leftrightDepth,a.expect("\\right",!1);var s=H(a.parseFunction(),"leftright-right");return{type:"leftright",mode:a.mode,body:n,left:t.text,right:s.delim,rightColor:s.color}},htmlBuilder:(r,e)=>{Kt(r);for(var t=t0(r.body,e,!0,["mopen","mclose"]),a=0,n=0,s=!1,o=0;o{Kt(r);var t=o0(r.body,e);if(r.left!=="."){var a=new S.MathNode("mo",[v0(r.left,r.mode)]);a.setAttribute("fence","true"),t.unshift(a)}if(r.right!=="."){var n=new S.MathNode("mo",[v0(r.right,r.mode)]);n.setAttribute("fence","true"),r.rightColor&&n.setAttribute("mathcolor",r.rightColor),t.push(n)}return gt(t)}});B({type:"middle",names:["\\middle"],props:{numArgs:1,primitive:!0},handler:(r,e)=>{var t=Oe(e[0],r);if(!r.parser.leftrightDepth)throw new M("\\middle without preceding \\left",t);return{type:"middle",mode:r.parser.mode,delim:t.text}},htmlBuilder:(r,e)=>{var t;if(r.delim===".")t=oe(e,[]);else{t=B0.sizedDelim(r.delim,1,e,r.mode,[]);var a={delim:r.delim,options:e};t.isMiddle=a}return t},mathmlBuilder:(r,e)=>{var t=r.delim==="\\vert"||r.delim==="|"?v0("|","text"):v0(r.delim,r.mode),a=new S.MathNode("mo",[t]);return a.setAttribute("fence","true"),a.setAttribute("lspace","0.05em"),a.setAttribute("rspace","0.05em"),a}});var kt=(r,e)=>{var t=b.wrapFragment(P(r.body,e),e),a=r.label.slice(1),n=e.sizeMultiplier,s,o=0,h=q.isCharacterBox(r.body);if(a==="sout")s=b.makeSpan(["stretchy","sout"]),s.height=e.fontMetrics().defaultRuleThickness/n,o=-.5*e.fontMetrics().xHeight;else if(a==="phase"){var c=K({number:.6,unit:"pt"},e),p=K({number:.35,unit:"ex"},e),g=e.havingBaseSizing();n=n/g.sizeMultiplier;var y=t.height+t.depth+c+p;t.style.paddingLeft=A(y/2+c);var w=Math.floor(1e3*y*n),x=Oa(w),z=new D0([new P0("phase",x)],{width:"400em",height:A(w/1e3),viewBox:"0 0 400000 "+w,preserveAspectRatio:"xMinYMin slice"});s=b.makeSvgSpan(["hide-tail"],[z],e),s.style.height=A(y),o=t.depth+c+p}else{/cancel/.test(a)?h||t.classes.push("cancel-pad"):a==="angl"?t.classes.push("anglpad"):t.classes.push("boxpad");var T=0,C=0,N=0;/box/.test(a)?(N=Math.max(e.fontMetrics().fboxrule,e.minRuleThickness),T=e.fontMetrics().fboxsep+(a==="colorbox"?0:N),C=T):a==="angl"?(N=Math.max(e.fontMetrics().defaultRuleThickness,e.minRuleThickness),T=4*N,C=Math.max(0,.25-t.depth)):(T=h?.2:0,C=T),s=N0.encloseSpan(t,a,T,C,e),/fbox|boxed|fcolorbox/.test(a)?(s.style.borderStyle="solid",s.style.borderWidth=A(N)):a==="angl"&&N!==.049&&(s.style.borderTopWidth=A(N),s.style.borderRightWidth=A(N)),o=t.depth+C,r.backgroundColor&&(s.style.backgroundColor=r.backgroundColor,r.borderColor&&(s.style.borderColor=r.borderColor))}var O;if(r.backgroundColor)O=b.makeVList({positionType:"individualShift",children:[{type:"elem",elem:s,shift:o},{type:"elem",elem:t,shift:0}]},e);else{var F=/cancel|phase/.test(a)?["svg-align"]:[];O=b.makeVList({positionType:"individualShift",children:[{type:"elem",elem:t,shift:0},{type:"elem",elem:s,shift:o,wrapperClasses:F}]},e)}return/cancel/.test(a)&&(O.height=t.height,O.depth=t.depth),/cancel/.test(a)&&!h?b.makeSpan(["mord","cancel-lap"],[O],e):b.makeSpan(["mord"],[O],e)},St=(r,e)=>{var t=0,a=new S.MathNode(r.label.indexOf("colorbox")>-1?"mpadded":"menclose",[X(r.body,e)]);switch(r.label){case"\\cancel":a.setAttribute("notation","updiagonalstrike");break;case"\\bcancel":a.setAttribute("notation","downdiagonalstrike");break;case"\\phase":a.setAttribute("notation","phasorangle");break;case"\\sout":a.setAttribute("notation","horizontalstrike");break;case"\\fbox":a.setAttribute("notation","box");break;case"\\angl":a.setAttribute("notation","actuarial");break;case"\\fcolorbox":case"\\colorbox":if(t=e.fontMetrics().fboxsep*e.fontMetrics().ptPerEm,a.setAttribute("width","+"+2*t+"pt"),a.setAttribute("height","+"+2*t+"pt"),a.setAttribute("lspace",t+"pt"),a.setAttribute("voffset",t+"pt"),r.label==="\\fcolorbox"){var n=Math.max(e.fontMetrics().fboxrule,e.minRuleThickness);a.setAttribute("style","border: "+n+"em solid "+String(r.borderColor))}break;case"\\xcancel":a.setAttribute("notation","updiagonalstrike downdiagonalstrike");break}return r.backgroundColor&&a.setAttribute("mathbackground",r.backgroundColor),a};B({type:"enclose",names:["\\colorbox"],props:{numArgs:2,allowedInText:!0,argTypes:["color","text"]},handler(r,e,t){var{parser:a,funcName:n}=r,s=H(e[0],"color-token").color,o=e[1];return{type:"enclose",mode:a.mode,label:n,backgroundColor:s,body:o}},htmlBuilder:kt,mathmlBuilder:St});B({type:"enclose",names:["\\fcolorbox"],props:{numArgs:3,allowedInText:!0,argTypes:["color","color","text"]},handler(r,e,t){var{parser:a,funcName:n}=r,s=H(e[0],"color-token").color,o=H(e[1],"color-token").color,h=e[2];return{type:"enclose",mode:a.mode,label:n,backgroundColor:o,borderColor:s,body:h}},htmlBuilder:kt,mathmlBuilder:St});B({type:"enclose",names:["\\fbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler(r,e){var{parser:t}=r;return{type:"enclose",mode:t.mode,label:"\\fbox",body:e[0]}}});B({type:"enclose",names:["\\cancel","\\bcancel","\\xcancel","\\sout","\\phase"],props:{numArgs:1},handler(r,e){var{parser:t,funcName:a}=r,n=e[0];return{type:"enclose",mode:t.mode,label:a,body:n}},htmlBuilder:kt,mathmlBuilder:St});B({type:"enclose",names:["\\angl"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!1},handler(r,e){var{parser:t}=r;return{type:"enclose",mode:t.mode,label:"\\angl",body:e[0]}}});var $r={};function w0(r){for(var{type:e,names:t,props:a,handler:n,htmlBuilder:s,mathmlBuilder:o}=r,h={type:e,numArgs:a.numArgs||0,allowedInText:!1,numOptionalArgs:0,handler:n},c=0;c{var e=r.parser.settings;if(!e.displayMode)throw new M("{"+r.envName+"} can be used only in display mode.")};function Mt(r){if(r.indexOf("ed")===-1)return r.indexOf("*")===-1}function V0(r,e,t){var{hskipBeforeAndAfter:a,addJot:n,cols:s,arraystretch:o,colSeparationType:h,autoTag:c,singleRow:p,emptySingleRow:g,maxNumCols:y,leqno:w}=e;if(r.gullet.beginGroup(),p||r.gullet.macros.set("\\cr","\\\\\\relax"),!o){var x=r.gullet.expandMacroAsText("\\arraystretch");if(x==null)o=1;else if(o=parseFloat(x),!o||o<0)throw new M("Invalid \\arraystretch: "+x)}r.gullet.beginGroup();var z=[],T=[z],C=[],N=[],O=c!=null?[]:void 0;function F(){c&&r.gullet.macros.set("\\@eqnsw","1",!0)}function V(){O&&(r.gullet.macros.get("\\df@tag")?(O.push(r.subparse([new f0("\\df@tag")])),r.gullet.macros.set("\\df@tag",void 0,!0)):O.push(!!c&&r.gullet.macros.get("\\@eqnsw")==="1"))}for(F(),N.push(Jt(r));;){var L=r.parseExpression(!1,p?"\\end":"\\\\");r.gullet.endGroup(),r.gullet.beginGroup(),L={type:"ordgroup",mode:r.mode,body:L},t&&(L={type:"styling",mode:r.mode,style:t,body:[L]}),z.push(L);var U=r.fetch().text;if(U==="&"){if(y&&z.length===y){if(p||h)throw new M("Too many tab characters: &",r.nextToken);r.settings.reportNonstrict("textEnv","Too few columns specified in the {array} column argument.")}r.consume()}else if(U==="\\end"){V(),z.length===1&&L.type==="styling"&&L.body[0].body.length===0&&(T.length>1||!g)&&T.pop(),N.length0&&(F+=.25),p.push({pos:F,isDashed:fe[pe]})}for(V(o[0]),a=0;a0&&(r0+=O,Gfe))for(a=0;a=h)){var K0=void 0;(n>0||e.hskipBeforeAndAfter)&&(K0=q.deflt(m0.pregap,w),K0!==0&&(g0=b.makeSpan(["arraycolsep"],[]),g0.style.width=A(K0),s0.push(g0)));var J0=[];for(a=0;a0){for(var ma=b.makeLineSpan("hline",t,g),ca=b.makeLineSpan("hdashline",t,g),Ge=[{type:"elem",elem:c,shift:0}];p.length>0;){var Et=p.pop(),Rt=Et.pos-e0;Et.isDashed?Ge.push({type:"elem",elem:ca,shift:Rt}):Ge.push({type:"elem",elem:ma,shift:Rt})}c=b.makeVList({positionType:"individualShift",children:Ge},t)}if(W0.length===0)return b.makeSpan(["mord"],[c],t);var Ve=b.makeVList({positionType:"individualShift",children:W0},t);return Ve=b.makeSpan(["tag"],[Ve],t),b.makeFragment([c,Ve])},Y1={c:"center ",l:"left ",r:"right "},S0=function(e,t){for(var a=[],n=new S.MathNode("mtd",[],["mtr-glue"]),s=new S.MathNode("mtd",[],["mml-eqn-num"]),o=0;o0){var z=e.cols,T="",C=!1,N=0,O=z.length;z[0].type==="separator"&&(w+="top ",N=1),z[z.length-1].type==="separator"&&(w+="bottom ",O-=1);for(var F=N;F0?"left ":"",w+=j[j.length-1].length>0?"right ":"";for(var Y=1;Y-1?"alignat":"align",s=e.envName==="split",o=V0(e.parser,{cols:a,addJot:!0,autoTag:s?void 0:Mt(e.envName),emptySingleRow:!0,colSeparationType:n,maxNumCols:s?2:void 0,leqno:e.parser.settings.leqno},"display"),h,c=0,p={type:"ordgroup",mode:e.mode,body:[]};if(t[0]&&t[0].type==="ordgroup"){for(var g="",y=0;y0&&x&&(C=1),a[z]={type:"align",align:T,pregap:C,postgap:0}}return o.colSeparationType=x?"align":"alignat",o};w0({type:"array",names:["array","darray"],props:{numArgs:1},handler(r,e){var t=Re(e[0]),a=t?[e[0]]:H(e[0],"ordgroup").body,n=a.map(function(o){var h=yt(o),c=h.text;if("lcr".indexOf(c)!==-1)return{type:"align",align:c};if(c==="|")return{type:"separator",separator:"|"};if(c===":")return{type:"separator",separator:":"};throw new M("Unknown column alignment: "+c,o)}),s={cols:n,hskipBeforeAndAfter:!0,maxNumCols:n.length};return V0(r.parser,s,zt(r.envName))},htmlBuilder:k0,mathmlBuilder:S0});w0({type:"array",names:["matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix","matrix*","pmatrix*","bmatrix*","Bmatrix*","vmatrix*","Vmatrix*"],props:{numArgs:0},handler(r){var e={matrix:null,pmatrix:["(",")"],bmatrix:["[","]"],Bmatrix:["\\{","\\}"],vmatrix:["|","|"],Vmatrix:["\\Vert","\\Vert"]}[r.envName.replace("*","")],t="c",a={hskipBeforeAndAfter:!1,cols:[{type:"align",align:t}]};if(r.envName.charAt(r.envName.length-1)==="*"){var n=r.parser;if(n.consumeSpaces(),n.fetch().text==="["){if(n.consume(),n.consumeSpaces(),t=n.fetch().text,"lcr".indexOf(t)===-1)throw new M("Expected l or c or r",n.nextToken);n.consume(),n.consumeSpaces(),n.expect("]"),n.consume(),a.cols=[{type:"align",align:t}]}}var s=V0(r.parser,a,zt(r.envName)),o=Math.max(0,...s.body.map(h=>h.length));return s.cols=new Array(o).fill({type:"align",align:t}),e?{type:"leftright",mode:r.mode,body:[s],left:e[0],right:e[1],rightColor:void 0}:s},htmlBuilder:k0,mathmlBuilder:S0});w0({type:"array",names:["smallmatrix"],props:{numArgs:0},handler(r){var e={arraystretch:.5},t=V0(r.parser,e,"script");return t.colSeparationType="small",t},htmlBuilder:k0,mathmlBuilder:S0});w0({type:"array",names:["subarray"],props:{numArgs:1},handler(r,e){var t=Re(e[0]),a=t?[e[0]]:H(e[0],"ordgroup").body,n=a.map(function(o){var h=yt(o),c=h.text;if("lc".indexOf(c)!==-1)return{type:"align",align:c};throw new M("Unknown column alignment: "+c,o)});if(n.length>1)throw new M("{subarray} can contain only one column");var s={cols:n,hskipBeforeAndAfter:!1,arraystretch:.5};if(s=V0(r.parser,s,"script"),s.body.length>0&&s.body[0].length>1)throw new M("{subarray} can contain only one column");return s},htmlBuilder:k0,mathmlBuilder:S0});w0({type:"array",names:["cases","dcases","rcases","drcases"],props:{numArgs:0},handler(r){var e={arraystretch:1.2,cols:[{type:"align",align:"l",pregap:0,postgap:1},{type:"align",align:"l",pregap:0,postgap:0}]},t=V0(r.parser,e,zt(r.envName));return{type:"leftright",mode:r.mode,body:[t],left:r.envName.indexOf("r")>-1?".":"\\{",right:r.envName.indexOf("r")>-1?"\\}":".",rightColor:void 0}},htmlBuilder:k0,mathmlBuilder:S0});w0({type:"array",names:["align","align*","aligned","split"],props:{numArgs:0},handler:jr,htmlBuilder:k0,mathmlBuilder:S0});w0({type:"array",names:["gathered","gather","gather*"],props:{numArgs:0},handler(r){q.contains(["gather","gather*"],r.envName)&&Fe(r);var e={cols:[{type:"align",align:"c"}],addJot:!0,colSeparationType:"gather",autoTag:Mt(r.envName),emptySingleRow:!0,leqno:r.parser.settings.leqno};return V0(r.parser,e,"display")},htmlBuilder:k0,mathmlBuilder:S0});w0({type:"array",names:["alignat","alignat*","alignedat"],props:{numArgs:1},handler:jr,htmlBuilder:k0,mathmlBuilder:S0});w0({type:"array",names:["equation","equation*"],props:{numArgs:0},handler(r){Fe(r);var e={autoTag:Mt(r.envName),emptySingleRow:!0,singleRow:!0,maxNumCols:1,leqno:r.parser.settings.leqno};return V0(r.parser,e,"display")},htmlBuilder:k0,mathmlBuilder:S0});w0({type:"array",names:["CD"],props:{numArgs:0},handler(r){return Fe(r),C1(r.parser)},htmlBuilder:k0,mathmlBuilder:S0});m("\\nonumber","\\gdef\\@eqnsw{0}");m("\\notag","\\nonumber");B({type:"text",names:["\\hline","\\hdashline"],props:{numArgs:0,allowedInText:!0,allowedInMath:!0},handler(r,e){throw new M(r.funcName+" valid only within array environment")}});var Qt=$r;B({type:"environment",names:["\\begin","\\end"],props:{numArgs:1,argTypes:["text"]},handler(r,e){var{parser:t,funcName:a}=r,n=e[0];if(n.type!=="ordgroup")throw new M("Invalid environment name",n);for(var s="",o=0;o{var t=r.font,a=e.withFont(t);return P(r.body,a)},Kr=(r,e)=>{var t=r.font,a=e.withFont(t);return X(r.body,a)},_t={"\\Bbb":"\\mathbb","\\bold":"\\mathbf","\\frak":"\\mathfrak","\\bm":"\\boldsymbol"};B({type:"font",names:["\\mathrm","\\mathit","\\mathbf","\\mathnormal","\\mathbb","\\mathcal","\\mathfrak","\\mathscr","\\mathsf","\\mathtt","\\Bbb","\\bold","\\frak"],props:{numArgs:1,allowedInArgument:!0},handler:(r,e)=>{var{parser:t,funcName:a}=r,n=Ne(e[0]),s=a;return s in _t&&(s=_t[s]),{type:"font",mode:t.mode,font:s.slice(1),body:n}},htmlBuilder:Zr,mathmlBuilder:Kr});B({type:"mclass",names:["\\boldsymbol","\\bm"],props:{numArgs:1},handler:(r,e)=>{var{parser:t}=r,a=e[0],n=q.isCharacterBox(a);return{type:"mclass",mode:t.mode,mclass:Ie(a),body:[{type:"font",mode:t.mode,font:"boldsymbol",body:a}],isCharacterBox:n}}});B({type:"font",names:["\\rm","\\sf","\\tt","\\bf","\\it","\\cal"],props:{numArgs:0,allowedInText:!0},handler:(r,e)=>{var{parser:t,funcName:a,breakOnTokenText:n}=r,{mode:s}=t,o=t.parseExpression(!0,n),h="math"+a.slice(1);return{type:"font",mode:s,font:h,body:{type:"ordgroup",mode:t.mode,body:o}}},htmlBuilder:Zr,mathmlBuilder:Kr});var Jr=(r,e)=>{var t=e;return r==="display"?t=t.id>=R.SCRIPT.id?t.text():R.DISPLAY:r==="text"&&t.size===R.DISPLAY.size?t=R.TEXT:r==="script"?t=R.SCRIPT:r==="scriptscript"&&(t=R.SCRIPTSCRIPT),t},At=(r,e)=>{var t=Jr(r.size,e.style),a=t.fracNum(),n=t.fracDen(),s;s=e.havingStyle(a);var o=P(r.numer,s,e);if(r.continued){var h=8.5/e.fontMetrics().ptPerEm,c=3.5/e.fontMetrics().ptPerEm;o.height=o.height0?z=3*w:z=7*w,T=e.fontMetrics().denom1):(y>0?(x=e.fontMetrics().num2,z=w):(x=e.fontMetrics().num3,z=3*w),T=e.fontMetrics().denom2);var C;if(g){var O=e.fontMetrics().axisHeight;x-o.depth-(O+.5*y){var t=new S.MathNode("mfrac",[X(r.numer,e),X(r.denom,e)]);if(!r.hasBarLine)t.setAttribute("linethickness","0px");else if(r.barSize){var a=K(r.barSize,e);t.setAttribute("linethickness",A(a))}var n=Jr(r.size,e.style);if(n.size!==e.style.size){t=new S.MathNode("mstyle",[t]);var s=n.size===R.DISPLAY.size?"true":"false";t.setAttribute("displaystyle",s),t.setAttribute("scriptlevel","0")}if(r.leftDelim!=null||r.rightDelim!=null){var o=[];if(r.leftDelim!=null){var h=new S.MathNode("mo",[new S.TextNode(r.leftDelim.replace("\\",""))]);h.setAttribute("fence","true"),o.push(h)}if(o.push(t),r.rightDelim!=null){var c=new S.MathNode("mo",[new S.TextNode(r.rightDelim.replace("\\",""))]);c.setAttribute("fence","true"),o.push(c)}return gt(o)}return t};B({type:"genfrac",names:["\\dfrac","\\frac","\\tfrac","\\dbinom","\\binom","\\tbinom","\\\\atopfrac","\\\\bracefrac","\\\\brackfrac"],props:{numArgs:2,allowedInArgument:!0},handler:(r,e)=>{var{parser:t,funcName:a}=r,n=e[0],s=e[1],o,h=null,c=null,p="auto";switch(a){case"\\dfrac":case"\\frac":case"\\tfrac":o=!0;break;case"\\\\atopfrac":o=!1;break;case"\\dbinom":case"\\binom":case"\\tbinom":o=!1,h="(",c=")";break;case"\\\\bracefrac":o=!1,h="\\{",c="\\}";break;case"\\\\brackfrac":o=!1,h="[",c="]";break;default:throw new Error("Unrecognized genfrac command")}switch(a){case"\\dfrac":case"\\dbinom":p="display";break;case"\\tfrac":case"\\tbinom":p="text";break}return{type:"genfrac",mode:t.mode,continued:!1,numer:n,denom:s,hasBarLine:o,leftDelim:h,rightDelim:c,size:p,barSize:null}},htmlBuilder:At,mathmlBuilder:Tt});B({type:"genfrac",names:["\\cfrac"],props:{numArgs:2},handler:(r,e)=>{var{parser:t,funcName:a}=r,n=e[0],s=e[1];return{type:"genfrac",mode:t.mode,continued:!0,numer:n,denom:s,hasBarLine:!0,leftDelim:null,rightDelim:null,size:"display",barSize:null}}});B({type:"infix",names:["\\over","\\choose","\\atop","\\brace","\\brack"],props:{numArgs:0,infix:!0},handler(r){var{parser:e,funcName:t,token:a}=r,n;switch(t){case"\\over":n="\\frac";break;case"\\choose":n="\\binom";break;case"\\atop":n="\\\\atopfrac";break;case"\\brace":n="\\\\bracefrac";break;case"\\brack":n="\\\\brackfrac";break;default:throw new Error("Unrecognized infix genfrac command")}return{type:"infix",mode:e.mode,replaceWith:n,token:a}}});var er=["display","text","script","scriptscript"],tr=function(e){var t=null;return e.length>0&&(t=e,t=t==="."?null:t),t};B({type:"genfrac",names:["\\genfrac"],props:{numArgs:6,allowedInArgument:!0,argTypes:["math","math","size","text","math","math"]},handler(r,e){var{parser:t}=r,a=e[4],n=e[5],s=Ne(e[0]),o=s.type==="atom"&&s.family==="open"?tr(s.text):null,h=Ne(e[1]),c=h.type==="atom"&&h.family==="close"?tr(h.text):null,p=H(e[2],"size"),g,y=null;p.isBlank?g=!0:(y=p.value,g=y.number>0);var w="auto",x=e[3];if(x.type==="ordgroup"){if(x.body.length>0){var z=H(x.body[0],"textord");w=er[Number(z.text)]}}else x=H(x,"textord"),w=er[Number(x.text)];return{type:"genfrac",mode:t.mode,numer:a,denom:n,continued:!1,hasBarLine:g,barSize:y,leftDelim:o,rightDelim:c,size:w}},htmlBuilder:At,mathmlBuilder:Tt});B({type:"infix",names:["\\above"],props:{numArgs:1,argTypes:["size"],infix:!0},handler(r,e){var{parser:t,funcName:a,token:n}=r;return{type:"infix",mode:t.mode,replaceWith:"\\\\abovefrac",size:H(e[0],"size").value,token:n}}});B({type:"genfrac",names:["\\\\abovefrac"],props:{numArgs:3,argTypes:["math","size","math"]},handler:(r,e)=>{var{parser:t,funcName:a}=r,n=e[0],s=wa(H(e[1],"infix").size),o=e[2],h=s.number>0;return{type:"genfrac",mode:t.mode,numer:n,denom:o,continued:!1,hasBarLine:h,barSize:s,leftDelim:null,rightDelim:null,size:"auto"}},htmlBuilder:At,mathmlBuilder:Tt});var Qr=(r,e)=>{var t=e.style,a,n;r.type==="supsub"?(a=r.sup?P(r.sup,e.havingStyle(t.sup()),e):P(r.sub,e.havingStyle(t.sub()),e),n=H(r.base,"horizBrace")):n=H(r,"horizBrace");var s=P(n.base,e.havingBaseStyle(R.DISPLAY)),o=N0.svgSpan(n,e),h;if(n.isOver?(h=b.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:s},{type:"kern",size:.1},{type:"elem",elem:o}]},e),h.children[0].children[0].children[1].classes.push("svg-align")):(h=b.makeVList({positionType:"bottom",positionData:s.depth+.1+o.height,children:[{type:"elem",elem:o},{type:"kern",size:.1},{type:"elem",elem:s}]},e),h.children[0].children[0].children[0].classes.push("svg-align")),a){var c=b.makeSpan(["mord",n.isOver?"mover":"munder"],[h],e);n.isOver?h=b.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:c},{type:"kern",size:.2},{type:"elem",elem:a}]},e):h=b.makeVList({positionType:"bottom",positionData:c.depth+.2+a.height+a.depth,children:[{type:"elem",elem:a},{type:"kern",size:.2},{type:"elem",elem:c}]},e)}return b.makeSpan(["mord",n.isOver?"mover":"munder"],[h],e)},X1=(r,e)=>{var t=N0.mathMLnode(r.label);return new S.MathNode(r.isOver?"mover":"munder",[X(r.base,e),t])};B({type:"horizBrace",names:["\\overbrace","\\underbrace"],props:{numArgs:1},handler(r,e){var{parser:t,funcName:a}=r;return{type:"horizBrace",mode:t.mode,label:a,isOver:/^\\over/.test(a),base:e[0]}},htmlBuilder:Qr,mathmlBuilder:X1});B({type:"href",names:["\\href"],props:{numArgs:2,argTypes:["url","original"],allowedInText:!0},handler:(r,e)=>{var{parser:t}=r,a=e[1],n=H(e[0],"url").url;return t.settings.isTrusted({command:"\\href",url:n})?{type:"href",mode:t.mode,href:n,body:Q(a)}:t.formatUnsupportedCmd("\\href")},htmlBuilder:(r,e)=>{var t=t0(r.body,e,!1);return b.makeAnchor(r.href,[],t,e)},mathmlBuilder:(r,e)=>{var t=G0(r.body,e);return t instanceof c0||(t=new c0("mrow",[t])),t.setAttribute("href",r.href),t}});B({type:"href",names:["\\url"],props:{numArgs:1,argTypes:["url"],allowedInText:!0},handler:(r,e)=>{var{parser:t}=r,a=H(e[0],"url").url;if(!t.settings.isTrusted({command:"\\url",url:a}))return t.formatUnsupportedCmd("\\url");for(var n=[],s=0;s{var{parser:t,funcName:a,token:n}=r,s=H(e[0],"raw").string,o=e[1];t.settings.strict&&t.settings.reportNonstrict("htmlExtension","HTML extension is disabled on strict mode");var h,c={};switch(a){case"\\htmlClass":c.class=s,h={command:"\\htmlClass",class:s};break;case"\\htmlId":c.id=s,h={command:"\\htmlId",id:s};break;case"\\htmlStyle":c.style=s,h={command:"\\htmlStyle",style:s};break;case"\\htmlData":{for(var p=s.split(","),g=0;g{var t=t0(r.body,e,!1),a=["enclosing"];r.attributes.class&&a.push(...r.attributes.class.trim().split(/\s+/));var n=b.makeSpan(a,t,e);for(var s in r.attributes)s!=="class"&&r.attributes.hasOwnProperty(s)&&n.setAttribute(s,r.attributes[s]);return n},mathmlBuilder:(r,e)=>G0(r.body,e)});B({type:"htmlmathml",names:["\\html@mathml"],props:{numArgs:2,allowedInText:!0},handler:(r,e)=>{var{parser:t}=r;return{type:"htmlmathml",mode:t.mode,html:Q(e[0]),mathml:Q(e[1])}},htmlBuilder:(r,e)=>{var t=t0(r.html,e,!1);return b.makeFragment(t)},mathmlBuilder:(r,e)=>G0(r.mathml,e)});var _e=function(e){if(/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(e))return{number:+e,unit:"bp"};var t=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(e);if(!t)throw new M("Invalid size: '"+e+"' in \\includegraphics");var a={number:+(t[1]+t[2]),unit:t[3]};if(!gr(a))throw new M("Invalid unit: '"+a.unit+"' in \\includegraphics.");return a};B({type:"includegraphics",names:["\\includegraphics"],props:{numArgs:1,numOptionalArgs:1,argTypes:["raw","url"],allowedInText:!1},handler:(r,e,t)=>{var{parser:a}=r,n={number:0,unit:"em"},s={number:.9,unit:"em"},o={number:0,unit:"em"},h="";if(t[0])for(var c=H(t[0],"raw").string,p=c.split(","),g=0;g{var t=K(r.height,e),a=0;r.totalheight.number>0&&(a=K(r.totalheight,e)-t);var n=0;r.width.number>0&&(n=K(r.width,e));var s={height:A(t+a)};n>0&&(s.width=A(n)),a>0&&(s.verticalAlign=A(-a));var o=new Xa(r.src,r.alt,s);return o.height=t,o.depth=a,o},mathmlBuilder:(r,e)=>{var t=new S.MathNode("mglyph",[]);t.setAttribute("alt",r.alt);var a=K(r.height,e),n=0;if(r.totalheight.number>0&&(n=K(r.totalheight,e)-a,t.setAttribute("valign",A(-n))),t.setAttribute("height",A(a+n)),r.width.number>0){var s=K(r.width,e);t.setAttribute("width",A(s))}return t.setAttribute("src",r.src),t}});B({type:"kern",names:["\\kern","\\mkern","\\hskip","\\mskip"],props:{numArgs:1,argTypes:["size"],primitive:!0,allowedInText:!0},handler(r,e){var{parser:t,funcName:a}=r,n=H(e[0],"size");if(t.settings.strict){var s=a[1]==="m",o=n.value.unit==="mu";s?(o||t.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+a+" supports only mu units, "+("not "+n.value.unit+" units")),t.mode!=="math"&&t.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+a+" works only in math mode")):o&&t.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+a+" doesn't support mu units")}return{type:"kern",mode:t.mode,dimension:n.value}},htmlBuilder(r,e){return b.makeGlue(r.dimension,e)},mathmlBuilder(r,e){var t=K(r.dimension,e);return new S.SpaceNode(t)}});B({type:"lap",names:["\\mathllap","\\mathrlap","\\mathclap"],props:{numArgs:1,allowedInText:!0},handler:(r,e)=>{var{parser:t,funcName:a}=r,n=e[0];return{type:"lap",mode:t.mode,alignment:a.slice(5),body:n}},htmlBuilder:(r,e)=>{var t;r.alignment==="clap"?(t=b.makeSpan([],[P(r.body,e)]),t=b.makeSpan(["inner"],[t],e)):t=b.makeSpan(["inner"],[P(r.body,e)]);var a=b.makeSpan(["fix"],[]),n=b.makeSpan([r.alignment],[t,a],e),s=b.makeSpan(["strut"]);return s.style.height=A(n.height+n.depth),n.depth&&(s.style.verticalAlign=A(-n.depth)),n.children.unshift(s),n=b.makeSpan(["thinbox"],[n],e),b.makeSpan(["mord","vbox"],[n],e)},mathmlBuilder:(r,e)=>{var t=new S.MathNode("mpadded",[X(r.body,e)]);if(r.alignment!=="rlap"){var a=r.alignment==="llap"?"-1":"-0.5";t.setAttribute("lspace",a+"width")}return t.setAttribute("width","0px"),t}});B({type:"styling",names:["\\(","$"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(r,e){var{funcName:t,parser:a}=r,n=a.mode;a.switchMode("math");var s=t==="\\("?"\\)":"$",o=a.parseExpression(!1,s);return a.expect(s),a.switchMode(n),{type:"styling",mode:a.mode,style:"text",body:o}}});B({type:"text",names:["\\)","\\]"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(r,e){throw new M("Mismatched "+r.funcName)}});var rr=(r,e)=>{switch(e.style.size){case R.DISPLAY.size:return r.display;case R.TEXT.size:return r.text;case R.SCRIPT.size:return r.script;case R.SCRIPTSCRIPT.size:return r.scriptscript;default:return r.text}};B({type:"mathchoice",names:["\\mathchoice"],props:{numArgs:4,primitive:!0},handler:(r,e)=>{var{parser:t}=r;return{type:"mathchoice",mode:t.mode,display:Q(e[0]),text:Q(e[1]),script:Q(e[2]),scriptscript:Q(e[3])}},htmlBuilder:(r,e)=>{var t=rr(r,e),a=t0(t,e,!1);return b.makeFragment(a)},mathmlBuilder:(r,e)=>{var t=rr(r,e);return G0(t,e)}});var _r=(r,e,t,a,n,s,o)=>{r=b.makeSpan([],[r]);var h=t&&q.isCharacterBox(t),c,p;if(e){var g=P(e,a.havingStyle(n.sup()),a);p={elem:g,kern:Math.max(a.fontMetrics().bigOpSpacing1,a.fontMetrics().bigOpSpacing3-g.depth)}}if(t){var y=P(t,a.havingStyle(n.sub()),a);c={elem:y,kern:Math.max(a.fontMetrics().bigOpSpacing2,a.fontMetrics().bigOpSpacing4-y.height)}}var w;if(p&&c){var x=a.fontMetrics().bigOpSpacing5+c.elem.height+c.elem.depth+c.kern+r.depth+o;w=b.makeVList({positionType:"bottom",positionData:x,children:[{type:"kern",size:a.fontMetrics().bigOpSpacing5},{type:"elem",elem:c.elem,marginLeft:A(-s)},{type:"kern",size:c.kern},{type:"elem",elem:r},{type:"kern",size:p.kern},{type:"elem",elem:p.elem,marginLeft:A(s)},{type:"kern",size:a.fontMetrics().bigOpSpacing5}]},a)}else if(c){var z=r.height-o;w=b.makeVList({positionType:"top",positionData:z,children:[{type:"kern",size:a.fontMetrics().bigOpSpacing5},{type:"elem",elem:c.elem,marginLeft:A(-s)},{type:"kern",size:c.kern},{type:"elem",elem:r}]},a)}else if(p){var T=r.depth+o;w=b.makeVList({positionType:"bottom",positionData:T,children:[{type:"elem",elem:r},{type:"kern",size:p.kern},{type:"elem",elem:p.elem,marginLeft:A(s)},{type:"kern",size:a.fontMetrics().bigOpSpacing5}]},a)}else return r;var C=[w];if(c&&s!==0&&!h){var N=b.makeSpan(["mspace"],[],a);N.style.marginRight=A(s),C.unshift(N)}return b.makeSpan(["mop","op-limits"],C,a)},ea=["\\smallint"],re=(r,e)=>{var t,a,n=!1,s;r.type==="supsub"?(t=r.sup,a=r.sub,s=H(r.base,"op"),n=!0):s=H(r,"op");var o=e.style,h=!1;o.size===R.DISPLAY.size&&s.symbol&&!q.contains(ea,s.name)&&(h=!0);var c;if(s.symbol){var p=h?"Size2-Regular":"Size1-Regular",g="";if((s.name==="\\oiint"||s.name==="\\oiiint")&&(g=s.name.slice(1),s.name=g==="oiint"?"\\iint":"\\iiint"),c=b.makeSymbol(s.name,p,"math",e,["mop","op-symbol",h?"large-op":"small-op"]),g.length>0){var y=c.italic,w=b.staticSvg(g+"Size"+(h?"2":"1"),e);c=b.makeVList({positionType:"individualShift",children:[{type:"elem",elem:c,shift:0},{type:"elem",elem:w,shift:h?.08:0}]},e),s.name="\\"+g,c.classes.unshift("mop"),c.italic=y}}else if(s.body){var x=t0(s.body,e,!0);x.length===1&&x[0]instanceof p0?(c=x[0],c.classes[0]="mop"):c=b.makeSpan(["mop"],x,e)}else{for(var z=[],T=1;T{var t;if(r.symbol)t=new c0("mo",[v0(r.name,r.mode)]),q.contains(ea,r.name)&&t.setAttribute("largeop","false");else if(r.body)t=new c0("mo",o0(r.body,e));else{t=new c0("mi",[new ie(r.name.slice(1))]);var a=new c0("mo",[v0("⁡","text")]);r.parentIsSupSub?t=new c0("mrow",[t,a]):t=Br([t,a])}return t},$1={"∏":"\\prod","∐":"\\coprod","∑":"\\sum","⋀":"\\bigwedge","⋁":"\\bigvee","⋂":"\\bigcap","⋃":"\\bigcup","⨀":"\\bigodot","⨁":"\\bigoplus","⨂":"\\bigotimes","⨄":"\\biguplus","⨆":"\\bigsqcup"};B({type:"op",names:["\\coprod","\\bigvee","\\bigwedge","\\biguplus","\\bigcap","\\bigcup","\\intop","\\prod","\\sum","\\bigotimes","\\bigoplus","\\bigodot","\\bigsqcup","\\smallint","∏","∐","∑","⋀","⋁","⋂","⋃","⨀","⨁","⨂","⨄","⨆"],props:{numArgs:0},handler:(r,e)=>{var{parser:t,funcName:a}=r,n=a;return n.length===1&&(n=$1[n]),{type:"op",mode:t.mode,limits:!0,parentIsSupSub:!1,symbol:!0,name:n}},htmlBuilder:re,mathmlBuilder:me});B({type:"op",names:["\\mathop"],props:{numArgs:1,primitive:!0},handler:(r,e)=>{var{parser:t}=r,a=e[0];return{type:"op",mode:t.mode,limits:!1,parentIsSupSub:!1,symbol:!1,body:Q(a)}},htmlBuilder:re,mathmlBuilder:me});var W1={"∫":"\\int","∬":"\\iint","∭":"\\iiint","∮":"\\oint","∯":"\\oiint","∰":"\\oiiint"};B({type:"op",names:["\\arcsin","\\arccos","\\arctan","\\arctg","\\arcctg","\\arg","\\ch","\\cos","\\cosec","\\cosh","\\cot","\\cotg","\\coth","\\csc","\\ctg","\\cth","\\deg","\\dim","\\exp","\\hom","\\ker","\\lg","\\ln","\\log","\\sec","\\sin","\\sinh","\\sh","\\tan","\\tanh","\\tg","\\th"],props:{numArgs:0},handler(r){var{parser:e,funcName:t}=r;return{type:"op",mode:e.mode,limits:!1,parentIsSupSub:!1,symbol:!1,name:t}},htmlBuilder:re,mathmlBuilder:me});B({type:"op",names:["\\det","\\gcd","\\inf","\\lim","\\max","\\min","\\Pr","\\sup"],props:{numArgs:0},handler(r){var{parser:e,funcName:t}=r;return{type:"op",mode:e.mode,limits:!0,parentIsSupSub:!1,symbol:!1,name:t}},htmlBuilder:re,mathmlBuilder:me});B({type:"op",names:["\\int","\\iint","\\iiint","\\oint","\\oiint","\\oiiint","∫","∬","∭","∮","∯","∰"],props:{numArgs:0},handler(r){var{parser:e,funcName:t}=r,a=t;return a.length===1&&(a=W1[a]),{type:"op",mode:e.mode,limits:!1,parentIsSupSub:!1,symbol:!0,name:a}},htmlBuilder:re,mathmlBuilder:me});var ta=(r,e)=>{var t,a,n=!1,s;r.type==="supsub"?(t=r.sup,a=r.sub,s=H(r.base,"operatorname"),n=!0):s=H(r,"operatorname");var o;if(s.body.length>0){for(var h=s.body.map(y=>{var w=y.text;return typeof w=="string"?{type:"textord",mode:y.mode,text:w}:y}),c=t0(h,e.withFont("mathrm"),!0),p=0;p{for(var t=o0(r.body,e.withFont("mathrm")),a=!0,n=0;ng.toText()).join("");t=[new S.TextNode(h)]}var c=new S.MathNode("mi",t);c.setAttribute("mathvariant","normal");var p=new S.MathNode("mo",[v0("⁡","text")]);return r.parentIsSupSub?new S.MathNode("mrow",[c,p]):S.newDocumentFragment([c,p])};B({type:"operatorname",names:["\\operatorname@","\\operatornamewithlimits"],props:{numArgs:1},handler:(r,e)=>{var{parser:t,funcName:a}=r,n=e[0];return{type:"operatorname",mode:t.mode,body:Q(n),alwaysHandleSupSub:a==="\\operatornamewithlimits",limits:!1,parentIsSupSub:!1}},htmlBuilder:ta,mathmlBuilder:j1});m("\\operatorname","\\@ifstar\\operatornamewithlimits\\operatorname@");$0({type:"ordgroup",htmlBuilder(r,e){return r.semisimple?b.makeFragment(t0(r.body,e,!1)):b.makeSpan(["mord"],t0(r.body,e,!0),e)},mathmlBuilder(r,e){return G0(r.body,e,!0)}});B({type:"overline",names:["\\overline"],props:{numArgs:1},handler(r,e){var{parser:t}=r,a=e[0];return{type:"overline",mode:t.mode,body:a}},htmlBuilder(r,e){var t=P(r.body,e.havingCrampedStyle()),a=b.makeLineSpan("overline-line",e),n=e.fontMetrics().defaultRuleThickness,s=b.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:t},{type:"kern",size:3*n},{type:"elem",elem:a},{type:"kern",size:n}]},e);return b.makeSpan(["mord","overline"],[s],e)},mathmlBuilder(r,e){var t=new S.MathNode("mo",[new S.TextNode("‾")]);t.setAttribute("stretchy","true");var a=new S.MathNode("mover",[X(r.body,e),t]);return a.setAttribute("accent","true"),a}});B({type:"phantom",names:["\\phantom"],props:{numArgs:1,allowedInText:!0},handler:(r,e)=>{var{parser:t}=r,a=e[0];return{type:"phantom",mode:t.mode,body:Q(a)}},htmlBuilder:(r,e)=>{var t=t0(r.body,e.withPhantom(),!1);return b.makeFragment(t)},mathmlBuilder:(r,e)=>{var t=o0(r.body,e);return new S.MathNode("mphantom",t)}});B({type:"hphantom",names:["\\hphantom"],props:{numArgs:1,allowedInText:!0},handler:(r,e)=>{var{parser:t}=r,a=e[0];return{type:"hphantom",mode:t.mode,body:a}},htmlBuilder:(r,e)=>{var t=b.makeSpan([],[P(r.body,e.withPhantom())]);if(t.height=0,t.depth=0,t.children)for(var a=0;a{var t=o0(Q(r.body),e),a=new S.MathNode("mphantom",t),n=new S.MathNode("mpadded",[a]);return n.setAttribute("height","0px"),n.setAttribute("depth","0px"),n}});B({type:"vphantom",names:["\\vphantom"],props:{numArgs:1,allowedInText:!0},handler:(r,e)=>{var{parser:t}=r,a=e[0];return{type:"vphantom",mode:t.mode,body:a}},htmlBuilder:(r,e)=>{var t=b.makeSpan(["inner"],[P(r.body,e.withPhantom())]),a=b.makeSpan(["fix"],[]);return b.makeSpan(["mord","rlap"],[t,a],e)},mathmlBuilder:(r,e)=>{var t=o0(Q(r.body),e),a=new S.MathNode("mphantom",t),n=new S.MathNode("mpadded",[a]);return n.setAttribute("width","0px"),n}});B({type:"raisebox",names:["\\raisebox"],props:{numArgs:2,argTypes:["size","hbox"],allowedInText:!0},handler(r,e){var{parser:t}=r,a=H(e[0],"size").value,n=e[1];return{type:"raisebox",mode:t.mode,dy:a,body:n}},htmlBuilder(r,e){var t=P(r.body,e),a=K(r.dy,e);return b.makeVList({positionType:"shift",positionData:-a,children:[{type:"elem",elem:t}]},e)},mathmlBuilder(r,e){var t=new S.MathNode("mpadded",[X(r.body,e)]),a=r.dy.number+r.dy.unit;return t.setAttribute("voffset",a),t}});B({type:"internal",names:["\\relax"],props:{numArgs:0,allowedInText:!0},handler(r){var{parser:e}=r;return{type:"internal",mode:e.mode}}});B({type:"rule",names:["\\rule"],props:{numArgs:2,numOptionalArgs:1,argTypes:["size","size","size"]},handler(r,e,t){var{parser:a}=r,n=t[0],s=H(e[0],"size"),o=H(e[1],"size");return{type:"rule",mode:a.mode,shift:n&&H(n,"size").value,width:s.value,height:o.value}},htmlBuilder(r,e){var t=b.makeSpan(["mord","rule"],[],e),a=K(r.width,e),n=K(r.height,e),s=r.shift?K(r.shift,e):0;return t.style.borderRightWidth=A(a),t.style.borderTopWidth=A(n),t.style.bottom=A(s),t.width=a,t.height=n+s,t.depth=-s,t.maxFontSize=n*1.125*e.sizeMultiplier,t},mathmlBuilder(r,e){var t=K(r.width,e),a=K(r.height,e),n=r.shift?K(r.shift,e):0,s=e.color&&e.getColor()||"black",o=new S.MathNode("mspace");o.setAttribute("mathbackground",s),o.setAttribute("width",A(t)),o.setAttribute("height",A(a));var h=new S.MathNode("mpadded",[o]);return n>=0?h.setAttribute("height",A(n)):(h.setAttribute("height",A(n)),h.setAttribute("depth",A(-n))),h.setAttribute("voffset",A(n)),h}});function ra(r,e,t){for(var a=t0(r,e,!1),n=e.sizeMultiplier/t.sizeMultiplier,s=0;s{var t=e.havingSize(r.size);return ra(r.body,t,e)};B({type:"sizing",names:ar,props:{numArgs:0,allowedInText:!0},handler:(r,e)=>{var{breakOnTokenText:t,funcName:a,parser:n}=r,s=n.parseExpression(!1,t);return{type:"sizing",mode:n.mode,size:ar.indexOf(a)+1,body:s}},htmlBuilder:Z1,mathmlBuilder:(r,e)=>{var t=e.havingSize(r.size),a=o0(r.body,t),n=new S.MathNode("mstyle",a);return n.setAttribute("mathsize",A(t.sizeMultiplier)),n}});B({type:"smash",names:["\\smash"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0},handler:(r,e,t)=>{var{parser:a}=r,n=!1,s=!1,o=t[0]&&H(t[0],"ordgroup");if(o)for(var h="",c=0;c{var t=b.makeSpan([],[P(r.body,e)]);if(!r.smashHeight&&!r.smashDepth)return t;if(r.smashHeight&&(t.height=0,t.children))for(var a=0;a{var t=new S.MathNode("mpadded",[X(r.body,e)]);return r.smashHeight&&t.setAttribute("height","0px"),r.smashDepth&&t.setAttribute("depth","0px"),t}});B({type:"sqrt",names:["\\sqrt"],props:{numArgs:1,numOptionalArgs:1},handler(r,e,t){var{parser:a}=r,n=t[0],s=e[0];return{type:"sqrt",mode:a.mode,body:s,index:n}},htmlBuilder(r,e){var t=P(r.body,e.havingCrampedStyle());t.height===0&&(t.height=e.fontMetrics().xHeight),t=b.wrapFragment(t,e);var a=e.fontMetrics(),n=a.defaultRuleThickness,s=n;e.style.idt.height+t.depth+o&&(o=(o+y-t.height-t.depth)/2);var w=c.height-t.height-o-p;t.style.paddingLeft=A(g);var x=b.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:t,wrapperClasses:["svg-align"]},{type:"kern",size:-(t.height+w)},{type:"elem",elem:c},{type:"kern",size:p}]},e);if(r.index){var z=e.havingStyle(R.SCRIPTSCRIPT),T=P(r.index,z,e),C=.6*(x.height-x.depth),N=b.makeVList({positionType:"shift",positionData:-C,children:[{type:"elem",elem:T}]},e),O=b.makeSpan(["root"],[N]);return b.makeSpan(["mord","sqrt"],[O,x],e)}else return b.makeSpan(["mord","sqrt"],[x],e)},mathmlBuilder(r,e){var{body:t,index:a}=r;return a?new S.MathNode("mroot",[X(t,e),X(a,e)]):new S.MathNode("msqrt",[X(t,e)])}});var nr={display:R.DISPLAY,text:R.TEXT,script:R.SCRIPT,scriptscript:R.SCRIPTSCRIPT};B({type:"styling",names:["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(r,e){var{breakOnTokenText:t,funcName:a,parser:n}=r,s=n.parseExpression(!0,t),o=a.slice(1,a.length-5);return{type:"styling",mode:n.mode,style:o,body:s}},htmlBuilder(r,e){var t=nr[r.style],a=e.havingStyle(t).withFont("");return ra(r.body,a,e)},mathmlBuilder(r,e){var t=nr[r.style],a=e.havingStyle(t),n=o0(r.body,a),s=new S.MathNode("mstyle",n),o={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]},h=o[r.style];return s.setAttribute("scriptlevel",h[0]),s.setAttribute("displaystyle",h[1]),s}});var K1=function(e,t){var a=e.base;if(a)if(a.type==="op"){var n=a.limits&&(t.style.size===R.DISPLAY.size||a.alwaysHandleSupSub);return n?re:null}else if(a.type==="operatorname"){var s=a.alwaysHandleSupSub&&(t.style.size===R.DISPLAY.size||a.limits);return s?ta:null}else{if(a.type==="accent")return q.isCharacterBox(a.base)?xt:null;if(a.type==="horizBrace"){var o=!e.sub;return o===a.isOver?Qr:null}else return null}else return null};$0({type:"supsub",htmlBuilder(r,e){var t=K1(r,e);if(t)return t(r,e);var{base:a,sup:n,sub:s}=r,o=P(a,e),h,c,p=e.fontMetrics(),g=0,y=0,w=a&&q.isCharacterBox(a);if(n){var x=e.havingStyle(e.style.sup());h=P(n,x,e),w||(g=o.height-x.fontMetrics().supDrop*x.sizeMultiplier/e.sizeMultiplier)}if(s){var z=e.havingStyle(e.style.sub());c=P(s,z,e),w||(y=o.depth+z.fontMetrics().subDrop*z.sizeMultiplier/e.sizeMultiplier)}var T;e.style===R.DISPLAY?T=p.sup1:e.style.cramped?T=p.sup3:T=p.sup2;var C=e.sizeMultiplier,N=A(.5/p.ptPerEm/C),O=null;if(c){var F=r.base&&r.base.type==="op"&&r.base.name&&(r.base.name==="\\oiint"||r.base.name==="\\oiiint");(o instanceof p0||F)&&(O=A(-o.italic))}var V;if(h&&c){g=Math.max(g,T,h.depth+.25*p.xHeight),y=Math.max(y,p.sub2);var L=p.defaultRuleThickness,U=4*L;if(g-h.depth-(c.height-y)0&&(g+=G,y-=G)}var j=[{type:"elem",elem:c,shift:y,marginRight:N,marginLeft:O},{type:"elem",elem:h,shift:-g,marginRight:N}];V=b.makeVList({positionType:"individualShift",children:j},e)}else if(c){y=Math.max(y,p.sub1,c.height-.8*p.xHeight);var Y=[{type:"elem",elem:c,marginLeft:O,marginRight:N}];V=b.makeVList({positionType:"shift",positionData:y,children:Y},e)}else if(h)g=Math.max(g,T,h.depth+.25*p.xHeight),V=b.makeVList({positionType:"shift",positionData:-g,children:[{type:"elem",elem:h,marginRight:N}]},e);else throw new Error("supsub must have either sup or sub.");var M0=lt(o,"right")||"mord";return b.makeSpan([M0],[o,b.makeSpan(["msupsub"],[V])],e)},mathmlBuilder(r,e){var t=!1,a,n;r.base&&r.base.type==="horizBrace"&&(n=!!r.sup,n===r.base.isOver&&(t=!0,a=r.base.isOver)),r.base&&(r.base.type==="op"||r.base.type==="operatorname")&&(r.base.parentIsSupSub=!0);var s=[X(r.base,e)];r.sub&&s.push(X(r.sub,e)),r.sup&&s.push(X(r.sup,e));var o;if(t)o=a?"mover":"munder";else if(r.sub)if(r.sup){var p=r.base;p&&p.type==="op"&&p.limits&&e.style===R.DISPLAY||p&&p.type==="operatorname"&&p.alwaysHandleSupSub&&(e.style===R.DISPLAY||p.limits)?o="munderover":o="msubsup"}else{var c=r.base;c&&c.type==="op"&&c.limits&&(e.style===R.DISPLAY||c.alwaysHandleSupSub)||c&&c.type==="operatorname"&&c.alwaysHandleSupSub&&(c.limits||e.style===R.DISPLAY)?o="munder":o="msub"}else{var h=r.base;h&&h.type==="op"&&h.limits&&(e.style===R.DISPLAY||h.alwaysHandleSupSub)||h&&h.type==="operatorname"&&h.alwaysHandleSupSub&&(h.limits||e.style===R.DISPLAY)?o="mover":o="msup"}return new S.MathNode(o,s)}});$0({type:"atom",htmlBuilder(r,e){return b.mathsym(r.text,r.mode,e,["m"+r.family])},mathmlBuilder(r,e){var t=new S.MathNode("mo",[v0(r.text,r.mode)]);if(r.family==="bin"){var a=bt(r,e);a==="bold-italic"&&t.setAttribute("mathvariant",a)}else r.family==="punct"?t.setAttribute("separator","true"):(r.family==="open"||r.family==="close")&&t.setAttribute("stretchy","false");return t}});var aa={mi:"italic",mn:"normal",mtext:"normal"};$0({type:"mathord",htmlBuilder(r,e){return b.makeOrd(r,e,"mathord")},mathmlBuilder(r,e){var t=new S.MathNode("mi",[v0(r.text,r.mode,e)]),a=bt(r,e)||"italic";return a!==aa[t.type]&&t.setAttribute("mathvariant",a),t}});$0({type:"textord",htmlBuilder(r,e){return b.makeOrd(r,e,"textord")},mathmlBuilder(r,e){var t=v0(r.text,r.mode,e),a=bt(r,e)||"normal",n;return r.mode==="text"?n=new S.MathNode("mtext",[t]):/[0-9]/.test(r.text)?n=new S.MathNode("mn",[t]):r.text==="\\prime"?n=new S.MathNode("mo",[t]):n=new S.MathNode("mi",[t]),a!==aa[n.type]&&n.setAttribute("mathvariant",a),n}});var et={"\\nobreak":"nobreak","\\allowbreak":"allowbreak"},tt={" ":{},"\\ ":{},"~":{className:"nobreak"},"\\space":{},"\\nobreakspace":{className:"nobreak"}};$0({type:"spacing",htmlBuilder(r,e){if(tt.hasOwnProperty(r.text)){var t=tt[r.text].className||"";if(r.mode==="text"){var a=b.makeOrd(r,e,"textord");return a.classes.push(t),a}else return b.makeSpan(["mspace",t],[b.mathsym(r.text,r.mode,e)],e)}else{if(et.hasOwnProperty(r.text))return b.makeSpan(["mspace",et[r.text]],[],e);throw new M('Unknown type of space "'+r.text+'"')}},mathmlBuilder(r,e){var t;if(tt.hasOwnProperty(r.text))t=new S.MathNode("mtext",[new S.TextNode(" ")]);else{if(et.hasOwnProperty(r.text))return new S.MathNode("mspace");throw new M('Unknown type of space "'+r.text+'"')}return t}});var ir=()=>{var r=new S.MathNode("mtd",[]);return r.setAttribute("width","50%"),r};$0({type:"tag",mathmlBuilder(r,e){var t=new S.MathNode("mtable",[new S.MathNode("mtr",[ir(),new S.MathNode("mtd",[G0(r.body,e)]),ir(),new S.MathNode("mtd",[G0(r.tag,e)])])]);return t.setAttribute("width","100%"),t}});var sr={"\\text":void 0,"\\textrm":"textrm","\\textsf":"textsf","\\texttt":"texttt","\\textnormal":"textrm"},lr={"\\textbf":"textbf","\\textmd":"textmd"},J1={"\\textit":"textit","\\textup":"textup"},or=(r,e)=>{var t=r.font;if(t){if(sr[t])return e.withTextFontFamily(sr[t]);if(lr[t])return e.withTextFontWeight(lr[t]);if(t==="\\emph")return e.fontShape==="textit"?e.withTextFontShape("textup"):e.withTextFontShape("textit")}else return e;return e.withTextFontShape(J1[t])};B({type:"text",names:["\\text","\\textrm","\\textsf","\\texttt","\\textnormal","\\textbf","\\textmd","\\textit","\\textup","\\emph"],props:{numArgs:1,argTypes:["text"],allowedInArgument:!0,allowedInText:!0},handler(r,e){var{parser:t,funcName:a}=r,n=e[0];return{type:"text",mode:t.mode,body:Q(n),font:a}},htmlBuilder(r,e){var t=or(r,e),a=t0(r.body,t,!0);return b.makeSpan(["mord","text"],a,t)},mathmlBuilder(r,e){var t=or(r,e);return G0(r.body,t)}});B({type:"underline",names:["\\underline"],props:{numArgs:1,allowedInText:!0},handler(r,e){var{parser:t}=r;return{type:"underline",mode:t.mode,body:e[0]}},htmlBuilder(r,e){var t=P(r.body,e),a=b.makeLineSpan("underline-line",e),n=e.fontMetrics().defaultRuleThickness,s=b.makeVList({positionType:"top",positionData:t.height,children:[{type:"kern",size:n},{type:"elem",elem:a},{type:"kern",size:3*n},{type:"elem",elem:t}]},e);return b.makeSpan(["mord","underline"],[s],e)},mathmlBuilder(r,e){var t=new S.MathNode("mo",[new S.TextNode("‾")]);t.setAttribute("stretchy","true");var a=new S.MathNode("munder",[X(r.body,e),t]);return a.setAttribute("accentunder","true"),a}});B({type:"vcenter",names:["\\vcenter"],props:{numArgs:1,argTypes:["original"],allowedInText:!1},handler(r,e){var{parser:t}=r;return{type:"vcenter",mode:t.mode,body:e[0]}},htmlBuilder(r,e){var t=P(r.body,e),a=e.fontMetrics().axisHeight,n=.5*(t.height-a-(t.depth+a));return b.makeVList({positionType:"shift",positionData:n,children:[{type:"elem",elem:t}]},e)},mathmlBuilder(r,e){return new S.MathNode("mpadded",[X(r.body,e)],["vcenter"])}});B({type:"verb",names:["\\verb"],props:{numArgs:0,allowedInText:!0},handler(r,e,t){throw new M("\\verb ended by end of line instead of matching delimiter")},htmlBuilder(r,e){for(var t=ur(r),a=[],n=e.havingStyle(e.style.text()),s=0;sr.body.replace(/ /g,r.star?"␣":" "),H0=Ar,na=`[ \r + ]`,Q1="\\\\[a-zA-Z@]+",_1="\\\\[^\uD800-\uDFFF]",e4="("+Q1+")"+na+"*",t4=`\\\\( +|[ \r ]+ +?)[ \r ]*`,mt="[̀-ͯ]",r4=new RegExp(mt+"+$"),a4="("+na+"+)|"+(t4+"|")+"([!-\\[\\]-‧‪-퟿豈-￿]"+(mt+"*")+"|[\uD800-\uDBFF][\uDC00-\uDFFF]"+(mt+"*")+"|\\\\verb\\*([^]).*?\\4|\\\\verb([^*a-zA-Z]).*?\\5"+("|"+e4)+("|"+_1+")");class hr{constructor(e,t){this.input=void 0,this.settings=void 0,this.tokenRegex=void 0,this.catcodes=void 0,this.input=e,this.settings=t,this.tokenRegex=new RegExp(a4,"g"),this.catcodes={"%":14,"~":13}}setCatcode(e,t){this.catcodes[e]=t}lex(){var e=this.input,t=this.tokenRegex.lastIndex;if(t===e.length)return new f0("EOF",new u0(this,t,t));var a=this.tokenRegex.exec(e);if(a===null||a.index!==t)throw new M("Unexpected character: '"+e[t]+"'",new f0(e[t],new u0(this,t,t+1)));var n=a[6]||a[3]||(a[2]?"\\ ":" ");if(this.catcodes[n]===14){var s=e.indexOf(` +`,this.tokenRegex.lastIndex);return s===-1?(this.tokenRegex.lastIndex=e.length,this.settings.reportNonstrict("commentAtEnd","% comment has no terminating newline; LaTeX would fail because of commenting the end of math mode (e.g. $)")):this.tokenRegex.lastIndex=s+1,this.lex()}return new f0(n,new u0(this,t,this.tokenRegex.lastIndex))}}class n4{constructor(e,t){e===void 0&&(e={}),t===void 0&&(t={}),this.current=void 0,this.builtins=void 0,this.undefStack=void 0,this.current=t,this.builtins=e,this.undefStack=[]}beginGroup(){this.undefStack.push({})}endGroup(){if(this.undefStack.length===0)throw new M("Unbalanced namespace destruction: attempt to pop global namespace; please report this as a bug");var e=this.undefStack.pop();for(var t in e)e.hasOwnProperty(t)&&(e[t]==null?delete this.current[t]:this.current[t]=e[t])}endGroups(){for(;this.undefStack.length>0;)this.endGroup()}has(e){return this.current.hasOwnProperty(e)||this.builtins.hasOwnProperty(e)}get(e){return this.current.hasOwnProperty(e)?this.current[e]:this.builtins[e]}set(e,t,a){if(a===void 0&&(a=!1),a){for(var n=0;n0&&(this.undefStack[this.undefStack.length-1][e]=t)}else{var s=this.undefStack[this.undefStack.length-1];s&&!s.hasOwnProperty(e)&&(s[e]=this.current[e])}t==null?delete this.current[e]:this.current[e]=t}}var i4=Wr;m("\\noexpand",function(r){var e=r.popToken();return r.isExpandable(e.text)&&(e.noexpand=!0,e.treatAsRelax=!0),{tokens:[e],numArgs:0}});m("\\expandafter",function(r){var e=r.popToken();return r.expandOnce(!0),{tokens:[e],numArgs:0}});m("\\@firstoftwo",function(r){var e=r.consumeArgs(2);return{tokens:e[0],numArgs:0}});m("\\@secondoftwo",function(r){var e=r.consumeArgs(2);return{tokens:e[1],numArgs:0}});m("\\@ifnextchar",function(r){var e=r.consumeArgs(3);r.consumeSpaces();var t=r.future();return e[0].length===1&&e[0][0].text===t.text?{tokens:e[1],numArgs:0}:{tokens:e[2],numArgs:0}});m("\\@ifstar","\\@ifnextchar *{\\@firstoftwo{#1}}");m("\\TextOrMath",function(r){var e=r.consumeArgs(2);return r.mode==="text"?{tokens:e[0],numArgs:0}:{tokens:e[1],numArgs:0}});var mr={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15};m("\\char",function(r){var e=r.popToken(),t,a="";if(e.text==="'")t=8,e=r.popToken();else if(e.text==='"')t=16,e=r.popToken();else if(e.text==="`")if(e=r.popToken(),e.text[0]==="\\")a=e.text.charCodeAt(1);else{if(e.text==="EOF")throw new M("\\char` missing argument");a=e.text.charCodeAt(0)}else t=10;if(t){if(a=mr[e.text],a==null||a>=t)throw new M("Invalid base-"+t+" digit "+e.text);for(var n;(n=mr[r.future().text])!=null&&n{var a=r.consumeArg().tokens;if(a.length!==1)throw new M("\\newcommand's first argument must be a macro name");var n=a[0].text,s=r.isDefined(n);if(s&&!e)throw new M("\\newcommand{"+n+"} attempting to redefine "+(n+"; use \\renewcommand"));if(!s&&!t)throw new M("\\renewcommand{"+n+"} when command "+n+" does not yet exist; use \\newcommand");var o=0;if(a=r.consumeArg().tokens,a.length===1&&a[0].text==="["){for(var h="",c=r.expandNextToken();c.text!=="]"&&c.text!=="EOF";)h+=c.text,c=r.expandNextToken();if(!h.match(/^\s*[0-9]+\s*$/))throw new M("Invalid number of arguments: "+h);o=parseInt(h),a=r.consumeArg().tokens}return r.macros.set(n,{tokens:a,numArgs:o}),""};m("\\newcommand",r=>Bt(r,!1,!0));m("\\renewcommand",r=>Bt(r,!0,!1));m("\\providecommand",r=>Bt(r,!0,!0));m("\\message",r=>{var e=r.consumeArgs(1)[0];return console.log(e.reverse().map(t=>t.text).join("")),""});m("\\errmessage",r=>{var e=r.consumeArgs(1)[0];return console.error(e.reverse().map(t=>t.text).join("")),""});m("\\show",r=>{var e=r.popToken(),t=e.text;return console.log(e,r.macros.get(t),H0[t],$.math[t],$.text[t]),""});m("\\bgroup","{");m("\\egroup","}");m("~","\\nobreakspace");m("\\lq","`");m("\\rq","'");m("\\aa","\\r a");m("\\AA","\\r A");m("\\textcopyright","\\html@mathml{\\textcircled{c}}{\\char`©}");m("\\copyright","\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}");m("\\textregistered","\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`®}");m("ℬ","\\mathscr{B}");m("ℰ","\\mathscr{E}");m("ℱ","\\mathscr{F}");m("ℋ","\\mathscr{H}");m("ℐ","\\mathscr{I}");m("ℒ","\\mathscr{L}");m("ℳ","\\mathscr{M}");m("ℛ","\\mathscr{R}");m("ℭ","\\mathfrak{C}");m("ℌ","\\mathfrak{H}");m("ℨ","\\mathfrak{Z}");m("\\Bbbk","\\Bbb{k}");m("·","\\cdotp");m("\\llap","\\mathllap{\\textrm{#1}}");m("\\rlap","\\mathrlap{\\textrm{#1}}");m("\\clap","\\mathclap{\\textrm{#1}}");m("\\mathstrut","\\vphantom{(}");m("\\underbar","\\underline{\\text{#1}}");m("\\not",'\\html@mathml{\\mathrel{\\mathrlap\\@not}}{\\char"338}');m("\\neq","\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`≠}}");m("\\ne","\\neq");m("≠","\\neq");m("\\notin","\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}{\\mathrel{\\char`∉}}");m("∉","\\notin");m("≘","\\html@mathml{\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}}{\\mathrel{\\char`≘}}");m("≙","\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`≘}}");m("≚","\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`≚}}");m("≛","\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}{\\mathrel{\\char`≛}}");m("≝","\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}{\\mathrel{\\char`≝}}");m("≞","\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}{\\mathrel{\\char`≞}}");m("≟","\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`≟}}");m("⟂","\\perp");m("‼","\\mathclose{!\\mkern-0.8mu!}");m("∌","\\notni");m("⌜","\\ulcorner");m("⌝","\\urcorner");m("⌞","\\llcorner");m("⌟","\\lrcorner");m("©","\\copyright");m("®","\\textregistered");m("️","\\textregistered");m("\\ulcorner",'\\html@mathml{\\@ulcorner}{\\mathop{\\char"231c}}');m("\\urcorner",'\\html@mathml{\\@urcorner}{\\mathop{\\char"231d}}');m("\\llcorner",'\\html@mathml{\\@llcorner}{\\mathop{\\char"231e}}');m("\\lrcorner",'\\html@mathml{\\@lrcorner}{\\mathop{\\char"231f}}');m("\\vdots","\\mathord{\\varvdots\\rule{0pt}{15pt}}");m("⋮","\\vdots");m("\\varGamma","\\mathit{\\Gamma}");m("\\varDelta","\\mathit{\\Delta}");m("\\varTheta","\\mathit{\\Theta}");m("\\varLambda","\\mathit{\\Lambda}");m("\\varXi","\\mathit{\\Xi}");m("\\varPi","\\mathit{\\Pi}");m("\\varSigma","\\mathit{\\Sigma}");m("\\varUpsilon","\\mathit{\\Upsilon}");m("\\varPhi","\\mathit{\\Phi}");m("\\varPsi","\\mathit{\\Psi}");m("\\varOmega","\\mathit{\\Omega}");m("\\substack","\\begin{subarray}{c}#1\\end{subarray}");m("\\colon","\\nobreak\\mskip2mu\\mathpunct{}\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu\\relax");m("\\boxed","\\fbox{$\\displaystyle{#1}$}");m("\\iff","\\DOTSB\\;\\Longleftrightarrow\\;");m("\\implies","\\DOTSB\\;\\Longrightarrow\\;");m("\\impliedby","\\DOTSB\\;\\Longleftarrow\\;");var cr={",":"\\dotsc","\\not":"\\dotsb","+":"\\dotsb","=":"\\dotsb","<":"\\dotsb",">":"\\dotsb","-":"\\dotsb","*":"\\dotsb",":":"\\dotsb","\\DOTSB":"\\dotsb","\\coprod":"\\dotsb","\\bigvee":"\\dotsb","\\bigwedge":"\\dotsb","\\biguplus":"\\dotsb","\\bigcap":"\\dotsb","\\bigcup":"\\dotsb","\\prod":"\\dotsb","\\sum":"\\dotsb","\\bigotimes":"\\dotsb","\\bigoplus":"\\dotsb","\\bigodot":"\\dotsb","\\bigsqcup":"\\dotsb","\\And":"\\dotsb","\\longrightarrow":"\\dotsb","\\Longrightarrow":"\\dotsb","\\longleftarrow":"\\dotsb","\\Longleftarrow":"\\dotsb","\\longleftrightarrow":"\\dotsb","\\Longleftrightarrow":"\\dotsb","\\mapsto":"\\dotsb","\\longmapsto":"\\dotsb","\\hookrightarrow":"\\dotsb","\\doteq":"\\dotsb","\\mathbin":"\\dotsb","\\mathrel":"\\dotsb","\\relbar":"\\dotsb","\\Relbar":"\\dotsb","\\xrightarrow":"\\dotsb","\\xleftarrow":"\\dotsb","\\DOTSI":"\\dotsi","\\int":"\\dotsi","\\oint":"\\dotsi","\\iint":"\\dotsi","\\iiint":"\\dotsi","\\iiiint":"\\dotsi","\\idotsint":"\\dotsi","\\DOTSX":"\\dotsx"};m("\\dots",function(r){var e="\\dotso",t=r.expandAfterFuture().text;return t in cr?e=cr[t]:(t.slice(0,4)==="\\not"||t in $.math&&q.contains(["bin","rel"],$.math[t].group))&&(e="\\dotsb"),e});var Dt={")":!0,"]":!0,"\\rbrack":!0,"\\}":!0,"\\rbrace":!0,"\\rangle":!0,"\\rceil":!0,"\\rfloor":!0,"\\rgroup":!0,"\\rmoustache":!0,"\\right":!0,"\\bigr":!0,"\\biggr":!0,"\\Bigr":!0,"\\Biggr":!0,$:!0,";":!0,".":!0,",":!0};m("\\dotso",function(r){var e=r.future().text;return e in Dt?"\\ldots\\,":"\\ldots"});m("\\dotsc",function(r){var e=r.future().text;return e in Dt&&e!==","?"\\ldots\\,":"\\ldots"});m("\\cdots",function(r){var e=r.future().text;return e in Dt?"\\@cdots\\,":"\\@cdots"});m("\\dotsb","\\cdots");m("\\dotsm","\\cdots");m("\\dotsi","\\!\\cdots");m("\\dotsx","\\ldots\\,");m("\\DOTSI","\\relax");m("\\DOTSB","\\relax");m("\\DOTSX","\\relax");m("\\tmspace","\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax");m("\\,","\\tmspace+{3mu}{.1667em}");m("\\thinspace","\\,");m("\\>","\\mskip{4mu}");m("\\:","\\tmspace+{4mu}{.2222em}");m("\\medspace","\\:");m("\\;","\\tmspace+{5mu}{.2777em}");m("\\thickspace","\\;");m("\\!","\\tmspace-{3mu}{.1667em}");m("\\negthinspace","\\!");m("\\negmedspace","\\tmspace-{4mu}{.2222em}");m("\\negthickspace","\\tmspace-{5mu}{.277em}");m("\\enspace","\\kern.5em ");m("\\enskip","\\hskip.5em\\relax");m("\\quad","\\hskip1em\\relax");m("\\qquad","\\hskip2em\\relax");m("\\tag","\\@ifstar\\tag@literal\\tag@paren");m("\\tag@paren","\\tag@literal{({#1})}");m("\\tag@literal",r=>{if(r.macros.get("\\df@tag"))throw new M("Multiple \\tag");return"\\gdef\\df@tag{\\text{#1}}"});m("\\bmod","\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}\\mathbin{\\rm mod}\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}");m("\\pod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)");m("\\pmod","\\pod{{\\rm mod}\\mkern6mu#1}");m("\\mod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1");m("\\newline","\\\\\\relax");m("\\TeX","\\textrm{\\html@mathml{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}{TeX}}");var ia=A(x0["Main-Regular"][84][1]-.7*x0["Main-Regular"][65][1]);m("\\LaTeX","\\textrm{\\html@mathml{"+("L\\kern-.36em\\raisebox{"+ia+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{LaTeX}}");m("\\KaTeX","\\textrm{\\html@mathml{"+("K\\kern-.17em\\raisebox{"+ia+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{KaTeX}}");m("\\hspace","\\@ifstar\\@hspacer\\@hspace");m("\\@hspace","\\hskip #1\\relax");m("\\@hspacer","\\rule{0pt}{0pt}\\hskip #1\\relax");m("\\ordinarycolon",":");m("\\vcentcolon","\\mathrel{\\mathop\\ordinarycolon}");m("\\dblcolon",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}{\\mathop{\\char"2237}}');m("\\coloneqq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2254}}');m("\\Coloneqq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2237\\char"3d}}');m("\\coloneq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"3a\\char"2212}}');m("\\Coloneq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"2237\\char"2212}}');m("\\eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2255}}');m("\\Eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"3d\\char"2237}}');m("\\eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2239}}');m("\\Eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"2212\\char"2237}}');m("\\colonapprox",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"3a\\char"2248}}');m("\\Colonapprox",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"2237\\char"2248}}');m("\\colonsim",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"3a\\char"223c}}');m("\\Colonsim",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"2237\\char"223c}}');m("∷","\\dblcolon");m("∹","\\eqcolon");m("≔","\\coloneqq");m("≕","\\eqqcolon");m("⩴","\\Coloneqq");m("\\ratio","\\vcentcolon");m("\\coloncolon","\\dblcolon");m("\\colonequals","\\coloneqq");m("\\coloncolonequals","\\Coloneqq");m("\\equalscolon","\\eqqcolon");m("\\equalscoloncolon","\\Eqqcolon");m("\\colonminus","\\coloneq");m("\\coloncolonminus","\\Coloneq");m("\\minuscolon","\\eqcolon");m("\\minuscoloncolon","\\Eqcolon");m("\\coloncolonapprox","\\Colonapprox");m("\\coloncolonsim","\\Colonsim");m("\\simcolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}");m("\\simcoloncolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}");m("\\approxcolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}");m("\\approxcoloncolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}");m("\\notni","\\html@mathml{\\not\\ni}{\\mathrel{\\char`∌}}");m("\\limsup","\\DOTSB\\operatorname*{lim\\,sup}");m("\\liminf","\\DOTSB\\operatorname*{lim\\,inf}");m("\\injlim","\\DOTSB\\operatorname*{inj\\,lim}");m("\\projlim","\\DOTSB\\operatorname*{proj\\,lim}");m("\\varlimsup","\\DOTSB\\operatorname*{\\overline{lim}}");m("\\varliminf","\\DOTSB\\operatorname*{\\underline{lim}}");m("\\varinjlim","\\DOTSB\\operatorname*{\\underrightarrow{lim}}");m("\\varprojlim","\\DOTSB\\operatorname*{\\underleftarrow{lim}}");m("\\gvertneqq","\\html@mathml{\\@gvertneqq}{≩}");m("\\lvertneqq","\\html@mathml{\\@lvertneqq}{≨}");m("\\ngeqq","\\html@mathml{\\@ngeqq}{≱}");m("\\ngeqslant","\\html@mathml{\\@ngeqslant}{≱}");m("\\nleqq","\\html@mathml{\\@nleqq}{≰}");m("\\nleqslant","\\html@mathml{\\@nleqslant}{≰}");m("\\nshortmid","\\html@mathml{\\@nshortmid}{∤}");m("\\nshortparallel","\\html@mathml{\\@nshortparallel}{∦}");m("\\nsubseteqq","\\html@mathml{\\@nsubseteqq}{⊈}");m("\\nsupseteqq","\\html@mathml{\\@nsupseteqq}{⊉}");m("\\varsubsetneq","\\html@mathml{\\@varsubsetneq}{⊊}");m("\\varsubsetneqq","\\html@mathml{\\@varsubsetneqq}{⫋}");m("\\varsupsetneq","\\html@mathml{\\@varsupsetneq}{⊋}");m("\\varsupsetneqq","\\html@mathml{\\@varsupsetneqq}{⫌}");m("\\imath","\\html@mathml{\\@imath}{ı}");m("\\jmath","\\html@mathml{\\@jmath}{ȷ}");m("\\llbracket","\\html@mathml{\\mathopen{[\\mkern-3.2mu[}}{\\mathopen{\\char`⟦}}");m("\\rrbracket","\\html@mathml{\\mathclose{]\\mkern-3.2mu]}}{\\mathclose{\\char`⟧}}");m("⟦","\\llbracket");m("⟧","\\rrbracket");m("\\lBrace","\\html@mathml{\\mathopen{\\{\\mkern-3.2mu[}}{\\mathopen{\\char`⦃}}");m("\\rBrace","\\html@mathml{\\mathclose{]\\mkern-3.2mu\\}}}{\\mathclose{\\char`⦄}}");m("⦃","\\lBrace");m("⦄","\\rBrace");m("\\minuso","\\mathbin{\\html@mathml{{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}{\\char`⦵}}");m("⦵","\\minuso");m("\\darr","\\downarrow");m("\\dArr","\\Downarrow");m("\\Darr","\\Downarrow");m("\\lang","\\langle");m("\\rang","\\rangle");m("\\uarr","\\uparrow");m("\\uArr","\\Uparrow");m("\\Uarr","\\Uparrow");m("\\N","\\mathbb{N}");m("\\R","\\mathbb{R}");m("\\Z","\\mathbb{Z}");m("\\alef","\\aleph");m("\\alefsym","\\aleph");m("\\Alpha","\\mathrm{A}");m("\\Beta","\\mathrm{B}");m("\\bull","\\bullet");m("\\Chi","\\mathrm{X}");m("\\clubs","\\clubsuit");m("\\cnums","\\mathbb{C}");m("\\Complex","\\mathbb{C}");m("\\Dagger","\\ddagger");m("\\diamonds","\\diamondsuit");m("\\empty","\\emptyset");m("\\Epsilon","\\mathrm{E}");m("\\Eta","\\mathrm{H}");m("\\exist","\\exists");m("\\harr","\\leftrightarrow");m("\\hArr","\\Leftrightarrow");m("\\Harr","\\Leftrightarrow");m("\\hearts","\\heartsuit");m("\\image","\\Im");m("\\infin","\\infty");m("\\Iota","\\mathrm{I}");m("\\isin","\\in");m("\\Kappa","\\mathrm{K}");m("\\larr","\\leftarrow");m("\\lArr","\\Leftarrow");m("\\Larr","\\Leftarrow");m("\\lrarr","\\leftrightarrow");m("\\lrArr","\\Leftrightarrow");m("\\Lrarr","\\Leftrightarrow");m("\\Mu","\\mathrm{M}");m("\\natnums","\\mathbb{N}");m("\\Nu","\\mathrm{N}");m("\\Omicron","\\mathrm{O}");m("\\plusmn","\\pm");m("\\rarr","\\rightarrow");m("\\rArr","\\Rightarrow");m("\\Rarr","\\Rightarrow");m("\\real","\\Re");m("\\reals","\\mathbb{R}");m("\\Reals","\\mathbb{R}");m("\\Rho","\\mathrm{P}");m("\\sdot","\\cdot");m("\\sect","\\S");m("\\spades","\\spadesuit");m("\\sub","\\subset");m("\\sube","\\subseteq");m("\\supe","\\supseteq");m("\\Tau","\\mathrm{T}");m("\\thetasym","\\vartheta");m("\\weierp","\\wp");m("\\Zeta","\\mathrm{Z}");m("\\argmin","\\DOTSB\\operatorname*{arg\\,min}");m("\\argmax","\\DOTSB\\operatorname*{arg\\,max}");m("\\plim","\\DOTSB\\mathop{\\operatorname{plim}}\\limits");m("\\bra","\\mathinner{\\langle{#1}|}");m("\\ket","\\mathinner{|{#1}\\rangle}");m("\\braket","\\mathinner{\\langle{#1}\\rangle}");m("\\Bra","\\left\\langle#1\\right|");m("\\Ket","\\left|#1\\right\\rangle");var sa=r=>e=>{var t=e.consumeArg().tokens,a=e.consumeArg().tokens,n=e.consumeArg().tokens,s=e.consumeArg().tokens,o=e.macros.get("|"),h=e.macros.get("\\|");e.macros.beginGroup();var c=y=>w=>{r&&(w.macros.set("|",o),n.length&&w.macros.set("\\|",h));var x=y;if(!y&&n.length){var z=w.future();z.text==="|"&&(w.popToken(),x=!0)}return{tokens:x?n:a,numArgs:0}};e.macros.set("|",c(!1)),n.length&&e.macros.set("\\|",c(!0));var p=e.consumeArg().tokens,g=e.expandTokens([...s,...p,...t]);return e.macros.endGroup(),{tokens:g.reverse(),numArgs:0}};m("\\bra@ket",sa(!1));m("\\bra@set",sa(!0));m("\\Braket","\\bra@ket{\\left\\langle}{\\,\\middle\\vert\\,}{\\,\\middle\\vert\\,}{\\right\\rangle}");m("\\Set","\\bra@set{\\left\\{\\:}{\\;\\middle\\vert\\;}{\\;\\middle\\Vert\\;}{\\:\\right\\}}");m("\\set","\\bra@set{\\{\\,}{\\mid}{}{\\,\\}}");m("\\angln","{\\angl n}");m("\\blue","\\textcolor{##6495ed}{#1}");m("\\orange","\\textcolor{##ffa500}{#1}");m("\\pink","\\textcolor{##ff00af}{#1}");m("\\red","\\textcolor{##df0030}{#1}");m("\\green","\\textcolor{##28ae7b}{#1}");m("\\gray","\\textcolor{gray}{#1}");m("\\purple","\\textcolor{##9d38bd}{#1}");m("\\blueA","\\textcolor{##ccfaff}{#1}");m("\\blueB","\\textcolor{##80f6ff}{#1}");m("\\blueC","\\textcolor{##63d9ea}{#1}");m("\\blueD","\\textcolor{##11accd}{#1}");m("\\blueE","\\textcolor{##0c7f99}{#1}");m("\\tealA","\\textcolor{##94fff5}{#1}");m("\\tealB","\\textcolor{##26edd5}{#1}");m("\\tealC","\\textcolor{##01d1c1}{#1}");m("\\tealD","\\textcolor{##01a995}{#1}");m("\\tealE","\\textcolor{##208170}{#1}");m("\\greenA","\\textcolor{##b6ffb0}{#1}");m("\\greenB","\\textcolor{##8af281}{#1}");m("\\greenC","\\textcolor{##74cf70}{#1}");m("\\greenD","\\textcolor{##1fab54}{#1}");m("\\greenE","\\textcolor{##0d923f}{#1}");m("\\goldA","\\textcolor{##ffd0a9}{#1}");m("\\goldB","\\textcolor{##ffbb71}{#1}");m("\\goldC","\\textcolor{##ff9c39}{#1}");m("\\goldD","\\textcolor{##e07d10}{#1}");m("\\goldE","\\textcolor{##a75a05}{#1}");m("\\redA","\\textcolor{##fca9a9}{#1}");m("\\redB","\\textcolor{##ff8482}{#1}");m("\\redC","\\textcolor{##f9685d}{#1}");m("\\redD","\\textcolor{##e84d39}{#1}");m("\\redE","\\textcolor{##bc2612}{#1}");m("\\maroonA","\\textcolor{##ffbde0}{#1}");m("\\maroonB","\\textcolor{##ff92c6}{#1}");m("\\maroonC","\\textcolor{##ed5fa6}{#1}");m("\\maroonD","\\textcolor{##ca337c}{#1}");m("\\maroonE","\\textcolor{##9e034e}{#1}");m("\\purpleA","\\textcolor{##ddd7ff}{#1}");m("\\purpleB","\\textcolor{##c6b9fc}{#1}");m("\\purpleC","\\textcolor{##aa87ff}{#1}");m("\\purpleD","\\textcolor{##7854ab}{#1}");m("\\purpleE","\\textcolor{##543b78}{#1}");m("\\mintA","\\textcolor{##f5f9e8}{#1}");m("\\mintB","\\textcolor{##edf2df}{#1}");m("\\mintC","\\textcolor{##e0e5cc}{#1}");m("\\grayA","\\textcolor{##f6f7f7}{#1}");m("\\grayB","\\textcolor{##f0f1f2}{#1}");m("\\grayC","\\textcolor{##e3e5e6}{#1}");m("\\grayD","\\textcolor{##d6d8da}{#1}");m("\\grayE","\\textcolor{##babec2}{#1}");m("\\grayF","\\textcolor{##888d93}{#1}");m("\\grayG","\\textcolor{##626569}{#1}");m("\\grayH","\\textcolor{##3b3e40}{#1}");m("\\grayI","\\textcolor{##21242c}{#1}");m("\\kaBlue","\\textcolor{##314453}{#1}");m("\\kaGreen","\\textcolor{##71B307}{#1}");var la={"^":!0,_:!0,"\\limits":!0,"\\nolimits":!0};class s4{constructor(e,t,a){this.settings=void 0,this.expansionCount=void 0,this.lexer=void 0,this.macros=void 0,this.stack=void 0,this.mode=void 0,this.settings=t,this.expansionCount=0,this.feed(e),this.macros=new n4(i4,t.macros),this.mode=a,this.stack=[]}feed(e){this.lexer=new hr(e,this.settings)}switchMode(e){this.mode=e}beginGroup(){this.macros.beginGroup()}endGroup(){this.macros.endGroup()}endGroups(){this.macros.endGroups()}future(){return this.stack.length===0&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]}popToken(){return this.future(),this.stack.pop()}pushToken(e){this.stack.push(e)}pushTokens(e){this.stack.push(...e)}scanArgument(e){var t,a,n;if(e){if(this.consumeSpaces(),this.future().text!=="[")return null;t=this.popToken(),{tokens:n,end:a}=this.consumeArg(["]"])}else({tokens:n,start:t,end:a}=this.consumeArg());return this.pushToken(new f0("EOF",a.loc)),this.pushTokens(n),t.range(a,"")}consumeSpaces(){for(;;){var e=this.future();if(e.text===" ")this.stack.pop();else break}}consumeArg(e){var t=[],a=e&&e.length>0;a||this.consumeSpaces();var n=this.future(),s,o=0,h=0;do{if(s=this.popToken(),t.push(s),s.text==="{")++o;else if(s.text==="}"){if(--o,o===-1)throw new M("Extra }",s)}else if(s.text==="EOF")throw new M("Unexpected end of input in a macro argument, expected '"+(e&&a?e[h]:"}")+"'",s);if(e&&a)if((o===0||o===1&&e[h]==="{")&&s.text===e[h]){if(++h,h===e.length){t.splice(-h,h);break}}else h=0}while(o!==0||a);return n.text==="{"&&t[t.length-1].text==="}"&&(t.pop(),t.shift()),t.reverse(),{tokens:t,start:n,end:s}}consumeArgs(e,t){if(t){if(t.length!==e+1)throw new M("The length of delimiters doesn't match the number of args!");for(var a=t[0],n=0;nthis.settings.maxExpand)throw new M("Too many expansions: infinite loop or need to increase maxExpand setting")}expandOnce(e){var t=this.popToken(),a=t.text,n=t.noexpand?null:this._getExpansion(a);if(n==null||e&&n.unexpandable){if(e&&n==null&&a[0]==="\\"&&!this.isDefined(a))throw new M("Undefined control sequence: "+a);return this.pushToken(t),!1}this.countExpansion(1);var s=n.tokens,o=this.consumeArgs(n.numArgs,n.delimiters);if(n.numArgs){s=s.slice();for(var h=s.length-1;h>=0;--h){var c=s[h];if(c.text==="#"){if(h===0)throw new M("Incomplete placeholder at end of macro body",c);if(c=s[--h],c.text==="#")s.splice(h+1,1);else if(/^[1-9]$/.test(c.text))s.splice(h,2,...o[+c.text-1]);else throw new M("Not a valid argument number",c)}}}return this.pushTokens(s),s.length}expandAfterFuture(){return this.expandOnce(),this.future()}expandNextToken(){for(;;)if(this.expandOnce()===!1){var e=this.stack.pop();return e.treatAsRelax&&(e.text="\\relax"),e}throw new Error}expandMacro(e){return this.macros.has(e)?this.expandTokens([new f0(e)]):void 0}expandTokens(e){var t=[],a=this.stack.length;for(this.pushTokens(e);this.stack.length>a;)if(this.expandOnce(!0)===!1){var n=this.stack.pop();n.treatAsRelax&&(n.noexpand=!1,n.treatAsRelax=!1),t.push(n)}return this.countExpansion(t.length),t}expandMacroAsText(e){var t=this.expandMacro(e);return t&&t.map(a=>a.text).join("")}_getExpansion(e){var t=this.macros.get(e);if(t==null)return t;if(e.length===1){var a=this.lexer.catcodes[e];if(a!=null&&a!==13)return}var n=typeof t=="function"?t(this):t;if(typeof n=="string"){var s=0;if(n.indexOf("#")!==-1)for(var o=n.replace(/##/g,"");o.indexOf("#"+(s+1))!==-1;)++s;for(var h=new hr(n,this.settings),c=[],p=h.lex();p.text!=="EOF";)c.push(p),p=h.lex();c.reverse();var g={tokens:c,numArgs:s};return g}return n}isDefined(e){return this.macros.has(e)||H0.hasOwnProperty(e)||$.math.hasOwnProperty(e)||$.text.hasOwnProperty(e)||la.hasOwnProperty(e)}isExpandable(e){var t=this.macros.get(e);return t!=null?typeof t=="string"||typeof t=="function"||!t.unexpandable:H0.hasOwnProperty(e)&&!H0[e].primitive}}var dr=/^[₊₋₌₍₎₀₁₂₃₄₅₆₇₈₉ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪ]/,Me=Object.freeze({"₊":"+","₋":"-","₌":"=","₍":"(","₎":")","₀":"0","₁":"1","₂":"2","₃":"3","₄":"4","₅":"5","₆":"6","₇":"7","₈":"8","₉":"9","ₐ":"a","ₑ":"e","ₕ":"h","ᵢ":"i","ⱼ":"j","ₖ":"k","ₗ":"l","ₘ":"m","ₙ":"n","ₒ":"o","ₚ":"p","ᵣ":"r","ₛ":"s","ₜ":"t","ᵤ":"u","ᵥ":"v","ₓ":"x","ᵦ":"β","ᵧ":"γ","ᵨ":"ρ","ᵩ":"ϕ","ᵪ":"χ","⁺":"+","⁻":"-","⁼":"=","⁽":"(","⁾":")","⁰":"0","¹":"1","²":"2","³":"3","⁴":"4","⁵":"5","⁶":"6","⁷":"7","⁸":"8","⁹":"9","ᴬ":"A","ᴮ":"B","ᴰ":"D","ᴱ":"E","ᴳ":"G","ᴴ":"H","ᴵ":"I","ᴶ":"J","ᴷ":"K","ᴸ":"L","ᴹ":"M","ᴺ":"N","ᴼ":"O","ᴾ":"P","ᴿ":"R","ᵀ":"T","ᵁ":"U","ⱽ":"V","ᵂ":"W","ᵃ":"a","ᵇ":"b","ᶜ":"c","ᵈ":"d","ᵉ":"e","ᶠ":"f","ᵍ":"g",ʰ:"h","ⁱ":"i",ʲ:"j","ᵏ":"k",ˡ:"l","ᵐ":"m",ⁿ:"n","ᵒ":"o","ᵖ":"p",ʳ:"r",ˢ:"s","ᵗ":"t","ᵘ":"u","ᵛ":"v",ʷ:"w",ˣ:"x",ʸ:"y","ᶻ":"z","ᵝ":"β","ᵞ":"γ","ᵟ":"δ","ᵠ":"ϕ","ᵡ":"χ","ᶿ":"θ"}),rt={"́":{text:"\\'",math:"\\acute"},"̀":{text:"\\`",math:"\\grave"},"̈":{text:'\\"',math:"\\ddot"},"̃":{text:"\\~",math:"\\tilde"},"̄":{text:"\\=",math:"\\bar"},"̆":{text:"\\u",math:"\\breve"},"̌":{text:"\\v",math:"\\check"},"̂":{text:"\\^",math:"\\hat"},"̇":{text:"\\.",math:"\\dot"},"̊":{text:"\\r",math:"\\mathring"},"̋":{text:"\\H"},"̧":{text:"\\c"}},fr={á:"á",à:"à",ä:"ä",ǟ:"ǟ",ã:"ã",ā:"ā",ă:"ă",ắ:"ắ",ằ:"ằ",ẵ:"ẵ",ǎ:"ǎ",â:"â",ấ:"ấ",ầ:"ầ",ẫ:"ẫ",ȧ:"ȧ",ǡ:"ǡ",å:"å",ǻ:"ǻ",ḃ:"ḃ",ć:"ć",ḉ:"ḉ",č:"č",ĉ:"ĉ",ċ:"ċ",ç:"ç",ď:"ď",ḋ:"ḋ",ḑ:"ḑ",é:"é",è:"è",ë:"ë",ẽ:"ẽ",ē:"ē",ḗ:"ḗ",ḕ:"ḕ",ĕ:"ĕ",ḝ:"ḝ",ě:"ě",ê:"ê",ế:"ế",ề:"ề",ễ:"ễ",ė:"ė",ȩ:"ȩ",ḟ:"ḟ",ǵ:"ǵ",ḡ:"ḡ",ğ:"ğ",ǧ:"ǧ",ĝ:"ĝ",ġ:"ġ",ģ:"ģ",ḧ:"ḧ",ȟ:"ȟ",ĥ:"ĥ",ḣ:"ḣ",ḩ:"ḩ",í:"í",ì:"ì",ï:"ï",ḯ:"ḯ",ĩ:"ĩ",ī:"ī",ĭ:"ĭ",ǐ:"ǐ",î:"î",ǰ:"ǰ",ĵ:"ĵ",ḱ:"ḱ",ǩ:"ǩ",ķ:"ķ",ĺ:"ĺ",ľ:"ľ",ļ:"ļ",ḿ:"ḿ",ṁ:"ṁ",ń:"ń",ǹ:"ǹ",ñ:"ñ",ň:"ň",ṅ:"ṅ",ņ:"ņ",ó:"ó",ò:"ò",ö:"ö",ȫ:"ȫ",õ:"õ",ṍ:"ṍ",ṏ:"ṏ",ȭ:"ȭ",ō:"ō",ṓ:"ṓ",ṑ:"ṑ",ŏ:"ŏ",ǒ:"ǒ",ô:"ô",ố:"ố",ồ:"ồ",ỗ:"ỗ",ȯ:"ȯ",ȱ:"ȱ",ő:"ő",ṕ:"ṕ",ṗ:"ṗ",ŕ:"ŕ",ř:"ř",ṙ:"ṙ",ŗ:"ŗ",ś:"ś",ṥ:"ṥ",š:"š",ṧ:"ṧ",ŝ:"ŝ",ṡ:"ṡ",ş:"ş",ẗ:"ẗ",ť:"ť",ṫ:"ṫ",ţ:"ţ",ú:"ú",ù:"ù",ü:"ü",ǘ:"ǘ",ǜ:"ǜ",ǖ:"ǖ",ǚ:"ǚ",ũ:"ũ",ṹ:"ṹ",ū:"ū",ṻ:"ṻ",ŭ:"ŭ",ǔ:"ǔ",û:"û",ů:"ů",ű:"ű",ṽ:"ṽ",ẃ:"ẃ",ẁ:"ẁ",ẅ:"ẅ",ŵ:"ŵ",ẇ:"ẇ",ẘ:"ẘ",ẍ:"ẍ",ẋ:"ẋ",ý:"ý",ỳ:"ỳ",ÿ:"ÿ",ỹ:"ỹ",ȳ:"ȳ",ŷ:"ŷ",ẏ:"ẏ",ẙ:"ẙ",ź:"ź",ž:"ž",ẑ:"ẑ",ż:"ż",Á:"Á",À:"À",Ä:"Ä",Ǟ:"Ǟ",Ã:"Ã",Ā:"Ā",Ă:"Ă",Ắ:"Ắ",Ằ:"Ằ",Ẵ:"Ẵ",Ǎ:"Ǎ",Â:"Â",Ấ:"Ấ",Ầ:"Ầ",Ẫ:"Ẫ",Ȧ:"Ȧ",Ǡ:"Ǡ",Å:"Å",Ǻ:"Ǻ",Ḃ:"Ḃ",Ć:"Ć",Ḉ:"Ḉ",Č:"Č",Ĉ:"Ĉ",Ċ:"Ċ",Ç:"Ç",Ď:"Ď",Ḋ:"Ḋ",Ḑ:"Ḑ",É:"É",È:"È",Ë:"Ë",Ẽ:"Ẽ",Ē:"Ē",Ḗ:"Ḗ",Ḕ:"Ḕ",Ĕ:"Ĕ",Ḝ:"Ḝ",Ě:"Ě",Ê:"Ê",Ế:"Ế",Ề:"Ề",Ễ:"Ễ",Ė:"Ė",Ȩ:"Ȩ",Ḟ:"Ḟ",Ǵ:"Ǵ",Ḡ:"Ḡ",Ğ:"Ğ",Ǧ:"Ǧ",Ĝ:"Ĝ",Ġ:"Ġ",Ģ:"Ģ",Ḧ:"Ḧ",Ȟ:"Ȟ",Ĥ:"Ĥ",Ḣ:"Ḣ",Ḩ:"Ḩ",Í:"Í",Ì:"Ì",Ï:"Ï",Ḯ:"Ḯ",Ĩ:"Ĩ",Ī:"Ī",Ĭ:"Ĭ",Ǐ:"Ǐ",Î:"Î",İ:"İ",Ĵ:"Ĵ",Ḱ:"Ḱ",Ǩ:"Ǩ",Ķ:"Ķ",Ĺ:"Ĺ",Ľ:"Ľ",Ļ:"Ļ",Ḿ:"Ḿ",Ṁ:"Ṁ",Ń:"Ń",Ǹ:"Ǹ",Ñ:"Ñ",Ň:"Ň",Ṅ:"Ṅ",Ņ:"Ņ",Ó:"Ó",Ò:"Ò",Ö:"Ö",Ȫ:"Ȫ",Õ:"Õ",Ṍ:"Ṍ",Ṏ:"Ṏ",Ȭ:"Ȭ",Ō:"Ō",Ṓ:"Ṓ",Ṑ:"Ṑ",Ŏ:"Ŏ",Ǒ:"Ǒ",Ô:"Ô",Ố:"Ố",Ồ:"Ồ",Ỗ:"Ỗ",Ȯ:"Ȯ",Ȱ:"Ȱ",Ő:"Ő",Ṕ:"Ṕ",Ṗ:"Ṗ",Ŕ:"Ŕ",Ř:"Ř",Ṙ:"Ṙ",Ŗ:"Ŗ",Ś:"Ś",Ṥ:"Ṥ",Š:"Š",Ṧ:"Ṧ",Ŝ:"Ŝ",Ṡ:"Ṡ",Ş:"Ş",Ť:"Ť",Ṫ:"Ṫ",Ţ:"Ţ",Ú:"Ú",Ù:"Ù",Ü:"Ü",Ǘ:"Ǘ",Ǜ:"Ǜ",Ǖ:"Ǖ",Ǚ:"Ǚ",Ũ:"Ũ",Ṹ:"Ṹ",Ū:"Ū",Ṻ:"Ṻ",Ŭ:"Ŭ",Ǔ:"Ǔ",Û:"Û",Ů:"Ů",Ű:"Ű",Ṽ:"Ṽ",Ẃ:"Ẃ",Ẁ:"Ẁ",Ẅ:"Ẅ",Ŵ:"Ŵ",Ẇ:"Ẇ",Ẍ:"Ẍ",Ẋ:"Ẋ",Ý:"Ý",Ỳ:"Ỳ",Ÿ:"Ÿ",Ỹ:"Ỹ",Ȳ:"Ȳ",Ŷ:"Ŷ",Ẏ:"Ẏ",Ź:"Ź",Ž:"Ž",Ẑ:"Ẑ",Ż:"Ż",ά:"ά",ὰ:"ὰ",ᾱ:"ᾱ",ᾰ:"ᾰ",έ:"έ",ὲ:"ὲ",ή:"ή",ὴ:"ὴ",ί:"ί",ὶ:"ὶ",ϊ:"ϊ",ΐ:"ΐ",ῒ:"ῒ",ῑ:"ῑ",ῐ:"ῐ",ό:"ό",ὸ:"ὸ",ύ:"ύ",ὺ:"ὺ",ϋ:"ϋ",ΰ:"ΰ",ῢ:"ῢ",ῡ:"ῡ",ῠ:"ῠ",ώ:"ώ",ὼ:"ὼ",Ύ:"Ύ",Ὺ:"Ὺ",Ϋ:"Ϋ",Ῡ:"Ῡ",Ῠ:"Ῠ",Ώ:"Ώ",Ὼ:"Ὼ"};class He{constructor(e,t){this.mode=void 0,this.gullet=void 0,this.settings=void 0,this.leftrightDepth=void 0,this.nextToken=void 0,this.mode="math",this.gullet=new s4(e,t,this.mode),this.settings=t,this.leftrightDepth=0}expect(e,t){if(t===void 0&&(t=!0),this.fetch().text!==e)throw new M("Expected '"+e+"', got '"+this.fetch().text+"'",this.fetch());t&&this.consume()}consume(){this.nextToken=null}fetch(){return this.nextToken==null&&(this.nextToken=this.gullet.expandNextToken()),this.nextToken}switchMode(e){this.mode=e,this.gullet.switchMode(e)}parse(){this.settings.globalGroup||this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set("\\color","\\textcolor");try{var e=this.parseExpression(!1);return this.expect("EOF"),this.settings.globalGroup||this.gullet.endGroup(),e}finally{this.gullet.endGroups()}}subparse(e){var t=this.nextToken;this.consume(),this.gullet.pushToken(new f0("}")),this.gullet.pushTokens(e);var a=this.parseExpression(!1);return this.expect("}"),this.nextToken=t,a}parseExpression(e,t){for(var a=[];;){this.mode==="math"&&this.consumeSpaces();var n=this.fetch();if(He.endOfExpression.indexOf(n.text)!==-1||t&&n.text===t||e&&H0[n.text]&&H0[n.text].infix)break;var s=this.parseAtom(t);if(s){if(s.type==="internal")continue}else break;a.push(s)}return this.mode==="text"&&this.formLigatures(a),this.handleInfixNodes(a)}handleInfixNodes(e){for(var t=-1,a,n=0;n=0&&this.settings.reportNonstrict("unicodeTextInMathMode",'Latin-1/Unicode text character "'+t[0]+'" used in math mode',e);var h=$[this.mode][t].group,c=u0.range(e),p;if(ja.hasOwnProperty(h)){var g=h;p={type:"atom",mode:this.mode,family:g,loc:c,text:t}}else p={type:h,mode:this.mode,loc:c,text:t};o=p}else if(t.charCodeAt(0)>=128)this.settings.strict&&(vr(t.charCodeAt(0))?this.mode==="math"&&this.settings.reportNonstrict("unicodeTextInMathMode",'Unicode text character "'+t[0]+'" used in math mode',e):this.settings.reportNonstrict("unknownSymbol",'Unrecognized Unicode character "'+t[0]+'"'+(" ("+t.charCodeAt(0)+")"),e)),o={type:"textord",mode:"text",loc:u0.range(e),text:t};else return null;if(this.consume(),s)for(var y=0;yn}function S(e,n){var r={};return n=z(n),le(e,function(t,a,i){$e(r,a,n(t,a,i))}),r}function y(e){return e&&e.length?he(e,pe,nn):void 0}function U(e,n){return e&&e.length?he(e,z(n),je):void 0}function rn(e,n){var r=e.length;for(e.sort(n);r--;)e[r]=e[r].value;return e}function tn(e,n){if(e!==n){var r=e!==void 0,t=e===null,a=e===e,i=ee(e),o=n!==void 0,u=n===null,d=n===n,s=ee(n);if(!u&&!s&&!i&&e>n||i&&o&&d&&!u&&!s||t&&o&&d||!r&&d||!a)return 1;if(!t&&!i&&!s&&e=u)return d;var s=r[t];return d*(s=="desc"?-1:1)}}return e.index-n.index}function on(e,n,r){n.length?n=j(n,function(i){return we(i)?function(o){return Me(o,i.length===1?i[0]:i)}:i}):n=[pe];var t=-1;n=j(n,We(z));var a=Ve(e,function(i,o,u){var d=j(n,function(s){return s(i)});return{criteria:d,index:++t,value:i}});return rn(a,function(i,o){return an(i,o,r)})}function un(e,n){return Ae(e,n,function(r,t){return Ie(e,t)})}var M=He(function(e,n){return e==null?{}:un(e,n)}),dn=Math.ceil,sn=Math.max;function fn(e,n,r,t){for(var a=-1,i=sn(dn((n-e)/(r||1)),0),o=Array(i);i--;)o[++a]=e,e+=r;return o}function cn(e){return function(n,r,t){return t&&typeof t!="number"&&q(n,r,t)&&(r=t=void 0),n=V(n),r===void 0?(r=n,n=0):r=V(r),t=t===void 0?n1&&q(e,n[0],n[1])?n=[]:r>2&&q(n[0],n[1],n[2])&&(n=[n[0]]),on(e,Se(n),[])}),ln=0;function H(e){var n=++ln;return Fe(e)+n}function hn(e,n,r){for(var t=-1,a=e.length,i=n.length,o={};++t0;--u)if(o=n[u].dequeue(),o){t=t.concat(A(e,n,r,o,!0));break}}}return t}function A(e,n,r,t,a){var i=a?[]:void 0;return f(e.inEdges(t.v),function(o){var u=e.edge(o),d=e.node(o.v);a&&i.push({v:o.v,w:o.w}),d.out-=u,W(n,r,d)}),f(e.outEdges(t.v),function(o){var u=e.edge(o),d=o.w,s=e.node(d);s.in-=u,W(n,r,s)}),e.removeNode(t.v),i}function yn(e,n){var r=new g,t=0,a=0;f(e.nodes(),function(u){r.setNode(u,{v:u,in:0,out:0})}),f(e.edges(),function(u){var d=r.edge(u.v,u.w)||0,s=n(u),c=d+s;r.setEdge(u.v,u.w,c),a=Math.max(a,r.node(u.v).out+=s),t=Math.max(t,r.node(u.w).in+=s)});var i=E(a+t+3).map(function(){return new pn}),o=t+1;return f(r.nodes(),function(u){W(i,o,r.node(u))}),{graph:r,buckets:i,zeroIdx:o}}function W(e,n,r){r.out?r.in?e[r.out-r.in+n].enqueue(r):e[e.length-1].enqueue(r):e[0].enqueue(r)}function kn(e){var n=e.graph().acyclicer==="greedy"?mn(e,r(e)):xn(e);f(n,function(t){var a=e.edge(t);e.removeEdge(t),a.forwardName=t.name,a.reversed=!0,e.setEdge(t.w,t.v,a,H("rev"))});function r(t){return function(a){return t.edge(a).weight}}}function xn(e){var n=[],r={},t={};function a(i){Object.prototype.hasOwnProperty.call(t,i)||(t[i]=!0,r[i]=!0,f(e.outEdges(i),function(o){Object.prototype.hasOwnProperty.call(r,o.w)?n.push(o):a(o.w)}),delete r[i])}return f(e.nodes(),a),n}function En(e){f(e.edges(),function(n){var r=e.edge(n);if(r.reversed){e.removeEdge(n);var t=r.forwardName;delete r.reversed,delete r.forwardName,e.setEdge(n.w,n.v,r,t)}})}function L(e,n,r,t){var a;do a=H(t);while(e.hasNode(a));return r.dummy=n,e.setNode(a,r),a}function On(e){var n=new g().setGraph(e.graph());return f(e.nodes(),function(r){n.setNode(r,e.node(r))}),f(e.edges(),function(r){var t=n.edge(r.v,r.w)||{weight:0,minlen:1},a=e.edge(r);n.setEdge(r.v,r.w,{weight:t.weight+a.weight,minlen:Math.max(t.minlen,a.minlen)})}),n}function be(e){var n=new g({multigraph:e.isMultigraph()}).setGraph(e.graph());return f(e.nodes(),function(r){e.children(r).length||n.setNode(r,e.node(r))}),f(e.edges(),function(r){n.setEdge(r,e.edge(r))}),n}function re(e,n){var r=e.x,t=e.y,a=n.x-r,i=n.y-t,o=e.width/2,u=e.height/2;if(!a&&!i)throw new Error("Not possible to find intersection inside of the rectangle");var d,s;return Math.abs(i)*o>Math.abs(a)*u?(i<0&&(u=-u),d=u*a/i,s=u):(a<0&&(o=-o),d=o,s=o*i/a),{x:r+d,y:t+s}}function F(e){var n=w(E(me(e)+1),function(){return[]});return f(e.nodes(),function(r){var t=e.node(r),a=t.rank;m(a)||(n[a][t.order]=r)}),n}function Ln(e){var n=P(w(e.nodes(),function(r){return e.node(r).rank}));f(e.nodes(),function(r){var t=e.node(r);ve(t,"rank")&&(t.rank-=n)})}function Nn(e){var n=P(w(e.nodes(),function(i){return e.node(i).rank})),r=[];f(e.nodes(),function(i){var o=e.node(i).rank-n;r[o]||(r[o]=[]),r[o].push(i)});var t=0,a=e.graph().nodeRankFactor;f(r,function(i,o){m(i)&&o%a!==0?--t:t&&f(i,function(u){e.node(u).rank+=t})})}function te(e,n,r,t){var a={width:0,height:0};return arguments.length>=4&&(a.rank=r,a.order=t),L(e,"border",a,n)}function me(e){return y(w(e.nodes(),function(n){var r=e.node(n).rank;if(!m(r))return r}))}function Pn(e,n){var r={lhs:[],rhs:[]};return f(e,function(t){n(t)?r.lhs.push(t):r.rhs.push(t)}),r}function Cn(e,n){return n()}function _n(e){function n(r){var t=e.children(r),a=e.node(r);if(t.length&&f(t,n),Object.prototype.hasOwnProperty.call(a,"minRank")){a.borderLeft=[],a.borderRight=[];for(var i=a.minRank,o=a.maxRank+1;io.lim&&(u=o,d=!0);var s=_(n.edges(),function(c){return d===oe(e,e.node(c.v),u)&&d!==oe(e,e.node(c.w),u)});return U(s,function(c){return C(n,c)})}function Pe(e,n,r,t){var a=r.v,i=r.w;e.removeEdge(a,i),e.setEdge(t.v,t.w,{}),Z(e),Q(e,n),$n(e,n)}function $n(e,n){var r=X(e.nodes(),function(a){return!n.node(a).parent}),t=Dn(e,r);t=t.slice(1),f(t,function(a){var i=e.node(a).parent,o=n.edge(a,i),u=!1;o||(o=n.edge(i,a),u=!0),n.node(a).rank=n.node(i).rank+(u?o.minlen:-o.minlen)})}function Wn(e,n,r){return e.hasEdge(n,r)}function oe(e,n,r){return r.low<=n.lim&&n.lim<=r.lim}function zn(e){switch(e.graph().ranker){case"network-simplex":ue(e);break;case"tight-tree":Un(e);break;case"longest-path":Xn(e);break;default:ue(e)}}var Xn=J;function Un(e){J(e),ye(e)}function ue(e){k(e)}function Hn(e){var n=L(e,"root",{},"_root"),r=Jn(e),t=y(x(r))-1,a=2*t+1;e.graph().nestingRoot=n,f(e.edges(),function(o){e.edge(o).minlen*=a});var i=Qn(e)+1;f(e.children(),function(o){Ce(e,n,a,i,t,r,o)}),e.graph().nodeRankFactor=a}function Ce(e,n,r,t,a,i,o){var u=e.children(o);if(!u.length){o!==n&&e.setEdge(n,o,{weight:0,minlen:r});return}var d=te(e,"_bt"),s=te(e,"_bb"),c=e.node(o);e.setParent(d,o),c.borderTop=d,e.setParent(s,o),c.borderBottom=s,f(u,function(l){Ce(e,n,r,t,a,i,l);var h=e.node(l),v=h.borderTop?h.borderTop:l,p=h.borderBottom?h.borderBottom:l,b=h.borderTop?t:2*t,N=v!==p?1:a-i[o]+1;e.setEdge(d,v,{weight:b,minlen:N,nestingEdge:!0}),e.setEdge(p,s,{weight:b,minlen:N,nestingEdge:!0})}),e.parent(o)||e.setEdge(n,d,{weight:0,minlen:a+i[o]})}function Jn(e){var n={};function r(t,a){var i=e.children(t);i&&i.length&&f(i,function(o){r(o,a+1)}),n[t]=a}return f(e.children(),function(t){r(t,1)}),n}function Qn(e){return I(e.edges(),function(n,r){return n+e.edge(r).weight},0)}function Zn(e){var n=e.graph();e.removeNode(n.nestingRoot),delete n.nestingRoot,f(e.edges(),function(r){var t=e.edge(r);t.nestingEdge&&e.removeEdge(r)})}function Kn(e,n,r){var t={},a;f(r,function(i){for(var o=e.parent(i),u,d;o;){if(u=e.parent(o),u?(d=t[u],t[u]=o):(d=a,a=o),d&&d!==o){n.setEdge(d,o);return}o=u}})}function er(e,n,r){var t=nr(e),a=new g({compound:!0}).setGraph({root:t}).setDefaultNodeLabel(function(i){return e.node(i)});return f(e.nodes(),function(i){var o=e.node(i),u=e.parent(i);(o.rank===n||o.minRank<=n&&n<=o.maxRank)&&(a.setNode(i),a.setParent(i,u||t),f(e[r](i),function(d){var s=d.v===i?d.w:d.v,c=a.edge(s,i),l=m(c)?0:c.weight;a.setEdge(s,i,{weight:e.edge(d).weight+l})}),Object.prototype.hasOwnProperty.call(o,"minRank")&&a.setNode(i,{borderLeft:o.borderLeft[n],borderRight:o.borderRight[n]}))}),a}function nr(e){for(var n;e.hasNode(n=H("_root")););return n}function rr(e,n){for(var r=0,t=1;t0;)c%2&&(l+=u[c+1]),c=c-1>>1,u[c]+=s.weight;d+=s.weight*l})),d}function ar(e){var n={},r=_(e.nodes(),function(u){return!e.children(u).length}),t=y(w(r,function(u){return e.node(u).rank})),a=w(E(t+1),function(){return[]});function i(u){if(!ve(n,u)){n[u]=!0;var d=e.node(u);a[d.rank].push(u),f(e.successors(u),i)}}var o=R(r,function(u){return e.node(u).rank});return f(o,i),a}function ir(e,n){return w(n,function(r){var t=e.inEdges(r);if(t.length){var a=I(t,function(i,o){var u=e.edge(o),d=e.node(o.v);return{sum:i.sum+u.weight*d.order,weight:i.weight+u.weight}},{sum:0,weight:0});return{v:r,barycenter:a.sum/a.weight,weight:a.weight}}else return{v:r}})}function or(e,n){var r={};f(e,function(a,i){var o=r[a.v]={indegree:0,in:[],out:[],vs:[a.v],i};m(a.barycenter)||(o.barycenter=a.barycenter,o.weight=a.weight)}),f(n.edges(),function(a){var i=r[a.v],o=r[a.w];!m(i)&&!m(o)&&(o.indegree++,i.out.push(r[a.w]))});var t=_(r,function(a){return!a.indegree});return ur(t)}function ur(e){var n=[];function r(i){return function(o){o.merged||(m(o.barycenter)||m(i.barycenter)||o.barycenter>=i.barycenter)&&dr(i,o)}}function t(i){return function(o){o.in.push(i),--o.indegree===0&&e.push(o)}}for(;e.length;){var a=e.pop();n.push(a),f(a.in.reverse(),r(a)),f(a.out,t(a))}return w(_(n,function(i){return!i.merged}),function(i){return M(i,["vs","i","barycenter","weight"])})}function dr(e,n){var r=0,t=0;e.weight&&(r+=e.barycenter*e.weight,t+=e.weight),n.weight&&(r+=n.barycenter*n.weight,t+=n.weight),e.vs=n.vs.concat(e.vs),e.barycenter=r/t,e.weight=t,e.i=Math.min(n.i,e.i),n.merged=!0}function sr(e,n){var r=Pn(e,function(c){return Object.prototype.hasOwnProperty.call(c,"barycenter")}),t=r.lhs,a=R(r.rhs,function(c){return-c.i}),i=[],o=0,u=0,d=0;t.sort(fr(!!n)),d=de(i,a,d),f(t,function(c){d+=c.vs.length,i.push(c.vs),o+=c.barycenter*c.weight,u+=c.weight,d=de(i,a,d)});var s={vs:O(i)};return u&&(s.barycenter=o/u,s.weight=u),s}function de(e,n,r){for(var t;n.length&&(t=T(n)).i<=r;)n.pop(),e.push(t.vs),r++;return r}function fr(e){return function(n,r){return n.barycenterr.barycenter?1:e?r.i-n.i:n.i-r.i}}function _e(e,n,r,t){var a=e.children(n),i=e.node(n),o=i?i.borderLeft:void 0,u=i?i.borderRight:void 0,d={};o&&(a=_(a,function(p){return p!==o&&p!==u}));var s=ir(e,a);f(s,function(p){if(e.children(p.v).length){var b=_e(e,p.v,r,t);d[p.v]=b,Object.prototype.hasOwnProperty.call(b,"barycenter")&&lr(p,b)}});var c=or(s,r);cr(c,d);var l=sr(c,t);if(o&&(l.vs=O([o,l.vs,u]),e.predecessors(o).length)){var h=e.node(e.predecessors(o)[0]),v=e.node(e.predecessors(u)[0]);Object.prototype.hasOwnProperty.call(l,"barycenter")||(l.barycenter=0,l.weight=0),l.barycenter=(l.barycenter*l.weight+h.order+v.order)/(l.weight+2),l.weight+=2}return l}function cr(e,n){f(e,function(r){r.vs=O(r.vs.map(function(t){return n[t]?n[t].vs:t}))})}function lr(e,n){m(e.barycenter)?(e.barycenter=n.barycenter,e.weight=n.weight):(e.barycenter=(e.barycenter*e.weight+n.barycenter*n.weight)/(e.weight+n.weight),e.weight+=n.weight)}function hr(e){var n=me(e),r=se(e,E(1,n+1),"inEdges"),t=se(e,E(n-1,-1,-1),"outEdges"),a=ar(e);fe(e,a);for(var i=Number.POSITIVE_INFINITY,o,u=0,d=0;d<4;++u,++d){vr(u%2?r:t,u%4>=2),a=F(e);var s=rr(e,a);so||u>n[d].lim));for(s=d,d=t;(d=e.parent(d))!==s;)i.push(d);return{path:a.concat(i.reverse()),lca:s}}function br(e){var n={},r=0;function t(a){var i=r;f(e.children(a),t),n[a]={low:i,lim:r++}}return f(e.children(),t),n}function mr(e,n){var r={};function t(a,i){var o=0,u=0,d=a.length,s=T(i);return f(i,function(c,l){var h=yr(e,c),v=h?e.node(h).order:d;(h||c===s)&&(f(i.slice(u,l+1),function(p){f(e.predecessors(p),function(b){var N=e.node(b),K=N.order;(Ks)&&Re(r,h,c)})})}function a(i,o){var u=-1,d,s=0;return f(o,function(c,l){if(e.node(c).dummy==="border"){var h=e.predecessors(c);h.length&&(d=e.node(h[0]).order,t(o,s,l,u,d),s=l,u=d)}t(o,s,o.length,d,i.length)}),o}return I(n,a),r}function yr(e,n){if(e.node(n).dummy)return X(e.predecessors(n),function(r){return e.node(r).dummy})}function Re(e,n,r){if(n>r){var t=n;n=r,r=t}var a=e[n];a||(e[n]=a={}),a[r]=!0}function kr(e,n,r){if(n>r){var t=n;n=r,r=t}return!!e[n]&&Object.prototype.hasOwnProperty.call(e[n],r)}function xr(e,n,r,t){var a={},i={},o={};return f(n,function(u){f(u,function(d,s){a[d]=d,i[d]=d,o[d]=s})}),f(n,function(u){var d=-1;f(u,function(s){var c=t(s);if(c.length){c=R(c,function(b){return o[b]});for(var l=(c.length-1)/2,h=Math.floor(l),v=Math.ceil(l);h<=v;++h){var p=c[h];i[s]===s&&d{var t=r(" buildLayoutGraph",()=>qr(e));r(" runLayout",()=>Ir(t,r)),r(" updateInputGraph",()=>Sr(e,t))})}function Ir(e,n){n(" makeSpaceForEdgeLabels",()=>$r(e)),n(" removeSelfEdges",()=>Kr(e)),n(" acyclic",()=>kn(e)),n(" nestingGraph.run",()=>Hn(e)),n(" rank",()=>zn(be(e))),n(" injectEdgeLabelProxies",()=>Wr(e)),n(" removeEmptyRanks",()=>Nn(e)),n(" nestingGraph.cleanup",()=>Zn(e)),n(" normalizeRanks",()=>Ln(e)),n(" assignRankMinMax",()=>zr(e)),n(" removeEdgeLabelProxies",()=>Xr(e)),n(" normalize.run",()=>Sn(e)),n(" parentDummyChains",()=>pr(e)),n(" addBorderSegments",()=>_n(e)),n(" order",()=>hr(e)),n(" insertSelfEdges",()=>et(e)),n(" adjustCoordinateSystem",()=>Rn(e)),n(" position",()=>Tr(e)),n(" positionSelfEdges",()=>nt(e)),n(" removeBorderNodes",()=>Zr(e)),n(" normalize.undo",()=>jn(e)),n(" fixupEdgeLabelCoords",()=>Jr(e)),n(" undoCoordinateSystem",()=>Tn(e)),n(" translateGraph",()=>Ur(e)),n(" assignNodeIntersects",()=>Hr(e)),n(" reversePoints",()=>Qr(e)),n(" acyclic.undo",()=>En(e))}function Sr(e,n){f(e.nodes(),function(r){var t=e.node(r),a=n.node(r);t&&(t.x=a.x,t.y=a.y,n.children(r).length&&(t.width=a.width,t.height=a.height))}),f(e.edges(),function(r){var t=e.edge(r),a=n.edge(r);t.points=a.points,Object.prototype.hasOwnProperty.call(a,"x")&&(t.x=a.x,t.y=a.y)}),e.graph().width=n.graph().width,e.graph().height=n.graph().height}var Fr=["nodesep","edgesep","ranksep","marginx","marginy"],jr={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb"},Vr=["acyclicer","ranker","rankdir","align"],Ar=["width","height"],Br={width:0,height:0},Gr=["minlen","weight","width","height","labeloffset"],Yr={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},Dr=["labelpos"];function qr(e){var n=new g({multigraph:!0,compound:!0}),r=D(e.graph());return n.setGraph($({},jr,Y(r,Fr),M(r,Vr))),f(e.nodes(),function(t){var a=D(e.node(t));n.setNode(t,Be(Y(a,Ar),Br)),n.setParent(t,e.parent(t))}),f(e.edges(),function(t){var a=D(e.edge(t));n.setEdge(t,$({},Yr,Y(a,Gr),M(a,Dr)))}),n}function $r(e){var n=e.graph();n.ranksep/=2,f(e.edges(),function(r){var t=e.edge(r);t.minlen*=2,t.labelpos.toLowerCase()!=="c"&&(n.rankdir==="TB"||n.rankdir==="BT"?t.width+=t.labeloffset:t.height+=t.labeloffset)})}function Wr(e){f(e.edges(),function(n){var r=e.edge(n);if(r.width&&r.height){var t=e.node(n.v),a=e.node(n.w),i={rank:(a.rank-t.rank)/2+t.rank,e:n};L(e,"edge-proxy",i,"_ep")}})}function zr(e){var n=0;f(e.nodes(),function(r){var t=e.node(r);t.borderTop&&(t.minRank=e.node(t.borderTop).rank,t.maxRank=e.node(t.borderBottom).rank,n=y(n,t.maxRank))}),e.graph().maxRank=n}function Xr(e){f(e.nodes(),function(n){var r=e.node(n);r.dummy==="edge-proxy"&&(e.edge(r.e).labelRank=r.rank,e.removeNode(n))})}function Ur(e){var n=Number.POSITIVE_INFINITY,r=0,t=Number.POSITIVE_INFINITY,a=0,i=e.graph(),o=i.marginx||0,u=i.marginy||0;function d(s){var c=s.x,l=s.y,h=s.width,v=s.height;n=Math.min(n,c-h/2),r=Math.max(r,c+h/2),t=Math.min(t,l-v/2),a=Math.max(a,l+v/2)}f(e.nodes(),function(s){d(e.node(s))}),f(e.edges(),function(s){var c=e.edge(s);Object.prototype.hasOwnProperty.call(c,"x")&&d(c)}),n-=o,t-=u,f(e.nodes(),function(s){var c=e.node(s);c.x-=n,c.y-=t}),f(e.edges(),function(s){var c=e.edge(s);f(c.points,function(l){l.x-=n,l.y-=t}),Object.prototype.hasOwnProperty.call(c,"x")&&(c.x-=n),Object.prototype.hasOwnProperty.call(c,"y")&&(c.y-=t)}),i.width=r-n+o,i.height=a-t+u}function Hr(e){f(e.edges(),function(n){var r=e.edge(n),t=e.node(n.v),a=e.node(n.w),i,o;r.points?(i=r.points[0],o=r.points[r.points.length-1]):(r.points=[],i=a,o=t),r.points.unshift(re(t,i)),r.points.push(re(a,o))})}function Jr(e){f(e.edges(),function(n){var r=e.edge(n);if(Object.prototype.hasOwnProperty.call(r,"x"))switch((r.labelpos==="l"||r.labelpos==="r")&&(r.width-=r.labeloffset),r.labelpos){case"l":r.x-=r.width/2+r.labeloffset;break;case"r":r.x+=r.width/2+r.labeloffset;break}})}function Qr(e){f(e.edges(),function(n){var r=e.edge(n);r.reversed&&r.points.reverse()})}function Zr(e){f(e.nodes(),function(n){if(e.children(n).length){var r=e.node(n),t=e.node(r.borderTop),a=e.node(r.borderBottom),i=e.node(T(r.borderLeft)),o=e.node(T(r.borderRight));r.width=Math.abs(o.x-i.x),r.height=Math.abs(a.y-t.y),r.x=i.x+r.width/2,r.y=t.y+r.height/2}}),f(e.nodes(),function(n){e.node(n).dummy==="border"&&e.removeNode(n)})}function Kr(e){f(e.edges(),function(n){if(n.v===n.w){var r=e.node(n.v);r.selfEdges||(r.selfEdges=[]),r.selfEdges.push({e:n,label:e.edge(n)}),e.removeEdge(n)}})}function et(e){var n=F(e);f(n,function(r){var t=0;f(r,function(a,i){var o=e.node(a);o.order=i+t,f(o.selfEdges,function(u){L(e,"selfedge",{width:u.label.width,height:u.label.height,rank:o.rank,order:i+ ++t,e:u.e,label:u.label},"_se")}),delete o.selfEdges})})}function nt(e){f(e.nodes(),function(n){var r=e.node(n);if(r.dummy==="selfedge"){var t=e.node(r.e.v),a=t.x+t.width/2,i=t.y,o=r.x-a,u=t.height/2;e.setEdge(r.e,r.label),e.removeNode(n),r.label.points=[{x:a+2*o/3,y:i-u},{x:a+5*o/6,y:i-u},{x:a+o,y:i},{x:a+5*o/6,y:i+u},{x:a+2*o/3,y:i+u}],r.label.x=r.x,r.label.y=r.y}})}function Y(e,n){return S(M(e,n),Number)}function D(e){var n={};return f(e,function(r,t){n[t.toLowerCase()]=r}),n}export{ot as l}; diff --git a/assets/chunks/linear.QGmzl4if.js b/assets/chunks/linear.QGmzl4if.js new file mode 100644 index 000000000..f4cde299b --- /dev/null +++ b/assets/chunks/linear.QGmzl4if.js @@ -0,0 +1 @@ +import{b0 as un,b1 as I,b2 as U,b3 as Y,b4 as fn}from"../app.D0Wo8w0i.js";import{i as cn}from"./init.Gi6I4Gst.js";function F(n,t){return n==null||t==null?NaN:nt?1:n>=t?0:NaN}function hn(n,t){return n==null||t==null?NaN:tn?1:t>=n?0:NaN}function _(n){let t,e,r;n.length!==2?(t=F,e=(u,c)=>F(n(u),c),r=(u,c)=>n(u)-c):(t=n===F||n===hn?n:mn,e=n,r=n);function i(u,c,o=0,s=u.length){if(o>>1;e(u[h],c)<0?o=h+1:s=h}while(o>>1;e(u[h],c)<=0?o=h+1:s=h}while(oo&&r(u[h-1],c)>-r(u[h],c)?h-1:h}return{left:i,center:a,right:f}}function mn(){return 0}function ln(n){return n===null?NaN:+n}const sn=_(F),dn=sn.right;_(ln).center;const gn=Math.sqrt(50),yn=Math.sqrt(10),Mn=Math.sqrt(2);function R(n,t,e){const r=(t-n)/Math.max(0,e),i=Math.floor(Math.log10(r)),f=r/Math.pow(10,i),a=f>=gn?10:f>=yn?5:f>=Mn?2:1;let u,c,o;return i<0?(o=Math.pow(10,-i)/a,u=Math.round(n*o),c=Math.round(t*o),u/ot&&--c,o=-o):(o=Math.pow(10,i)*a,u=Math.round(n/o),c=Math.round(t/o),u*ot&&--c),c0))return[];if(n===t)return[n];const r=t=i))return[];const u=f-i+1,c=new Array(u);if(r)if(a<0)for(let o=0;o=1e21?n.toLocaleString("en").replace(/,/g,""):n.toString(10)}function E(n,t){if((e=(n=t?n.toExponential(t-1):n.toExponential()).indexOf("e"))<0)return null;var e,r=n.slice(0,e);return[r.length>1?r[0]+r.slice(2):r,+n.slice(e+1)]}function v(n){return n=E(Math.abs(n)),n?n[1]:NaN}function jn(n,t){return function(e,r){for(var i=e.length,f=[],a=0,u=n[0],c=0;i>0&&u>0&&(c+u+1>r&&(u=Math.max(1,r-c)),f.push(e.substring(i-=u,i+u)),!((c+=u+1)>r));)u=n[a=(a+1)%n.length];return f.reverse().join(t)}}function Pn(n){return function(t){return t.replace(/[0-9]/g,function(e){return n[+e]})}}var zn=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function D(n){if(!(t=zn.exec(n)))throw new Error("invalid format: "+n);var t;return new B({fill:t[1],align:t[2],sign:t[3],symbol:t[4],zero:t[5],width:t[6],comma:t[7],precision:t[8]&&t[8].slice(1),trim:t[9],type:t[10]})}D.prototype=B.prototype;function B(n){this.fill=n.fill===void 0?" ":n.fill+"",this.align=n.align===void 0?">":n.align+"",this.sign=n.sign===void 0?"-":n.sign+"",this.symbol=n.symbol===void 0?"":n.symbol+"",this.zero=!!n.zero,this.width=n.width===void 0?void 0:+n.width,this.comma=!!n.comma,this.precision=n.precision===void 0?void 0:+n.precision,this.trim=!!n.trim,this.type=n.type===void 0?"":n.type+""}B.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function $n(n){n:for(var t=n.length,e=1,r=-1,i;e0&&(r=0);break}return r>0?n.slice(0,r)+n.slice(i+1):n}var nn;function Fn(n,t){var e=E(n,t);if(!e)return n+"";var r=e[0],i=e[1],f=i-(nn=Math.max(-8,Math.min(8,Math.floor(i/3)))*3)+1,a=r.length;return f===a?r:f>a?r+new Array(f-a+1).join("0"):f>0?r.slice(0,f)+"."+r.slice(f):"0."+new Array(1-f).join("0")+E(n,Math.max(0,t+f-1))[0]}function Z(n,t){var e=E(n,t);if(!e)return n+"";var r=e[0],i=e[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")}const H={"%":(n,t)=>(n*100).toFixed(t),b:n=>Math.round(n).toString(2),c:n=>n+"",d:Sn,e:(n,t)=>n.toExponential(t),f:(n,t)=>n.toFixed(t),g:(n,t)=>n.toPrecision(t),o:n=>Math.round(n).toString(8),p:(n,t)=>Z(n*100,t),r:Z,s:Fn,X:n=>Math.round(n).toString(16).toUpperCase(),x:n=>Math.round(n).toString(16)};function J(n){return n}var K=Array.prototype.map,Q=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function Rn(n){var t=n.grouping===void 0||n.thousands===void 0?J:jn(K.call(n.grouping,Number),n.thousands+""),e=n.currency===void 0?"":n.currency[0]+"",r=n.currency===void 0?"":n.currency[1]+"",i=n.decimal===void 0?".":n.decimal+"",f=n.numerals===void 0?J:Pn(K.call(n.numerals,String)),a=n.percent===void 0?"%":n.percent+"",u=n.minus===void 0?"−":n.minus+"",c=n.nan===void 0?"NaN":n.nan+"";function o(h){h=D(h);var l=h.fill,p=h.align,y=h.sign,b=h.symbol,k=h.zero,S=h.width,T=h.comma,w=h.precision,G=h.trim,d=h.type;d==="n"?(T=!0,d="g"):H[d]||(w===void 0&&(w=12),G=!0,d="g"),(k||l==="0"&&p==="=")&&(k=!0,l="0",p="=");var en=b==="$"?e:b==="#"&&/[boxX]/.test(d)?"0"+d.toLowerCase():"",on=b==="$"?r:/[%p]/.test(d)?a:"",O=H[d],an=/[defgprs%]/.test(d);w=w===void 0?6:/[gprs]/.test(d)?Math.max(1,Math.min(21,w)):Math.max(0,Math.min(20,w));function V(m){var N=en,g=on,x,X,j;if(d==="c")g=O(m)+g,m="";else{m=+m;var P=m<0||1/m<0;if(m=isNaN(m)?c:O(Math.abs(m),w),G&&(m=$n(m)),P&&+m==0&&y!=="+"&&(P=!1),N=(P?y==="("?y:u:y==="-"||y==="("?"":y)+N,g=(d==="s"?Q[8+nn/3]:"")+g+(P&&y==="("?")":""),an){for(x=-1,X=m.length;++xj||j>57){g=(j===46?i+m.slice(x+1):m.slice(x))+g,m=m.slice(0,x);break}}}T&&!k&&(m=t(m,1/0));var z=N.length+m.length+g.length,M=z>1)+N+m+g+M.slice(z);break;default:m=M+N+m+g;break}return f(m)}return V.toString=function(){return h+""},V}function s(h,l){var p=o((h=D(h),h.type="f",h)),y=Math.max(-8,Math.min(8,Math.floor(v(l)/3)))*3,b=Math.pow(10,-y),k=Q[8+y/3];return function(S){return p(b*S)+k}}return{format:o,formatPrefix:s}}var $,tn,rn;En({thousands:",",grouping:[3],currency:["$",""]});function En(n){return $=Rn(n),tn=$.format,rn=$.formatPrefix,$}function Dn(n){return Math.max(0,-v(Math.abs(n)))}function Tn(n,t){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(v(t)/3)))*3-v(Math.abs(n)))}function In(n,t){return n=Math.abs(n),t=Math.abs(t)-n,Math.max(0,v(t)-v(n))+1}function Ln(n){return function(){return n}}function qn(n){return+n}var W=[0,1];function A(n){return n}function q(n,t){return(t-=n=+n)?function(e){return(e-n)/t}:Ln(isNaN(t)?NaN:.5)}function Cn(n,t){var e;return n>t&&(e=n,n=t,t=e),function(r){return Math.max(n,Math.min(t,r))}}function Bn(n,t,e){var r=n[0],i=n[1],f=t[0],a=t[1];return i2?Gn:Bn,c=o=null,h}function h(l){return l==null||isNaN(l=+l)?f:(c||(c=u(n.map(r),t,e)))(r(a(l)))}return h.invert=function(l){return a(i((o||(o=u(t,n.map(r),I)))(l)))},h.domain=function(l){return arguments.length?(n=Array.from(l,qn),s()):n.slice()},h.range=function(l){return arguments.length?(t=Array.from(l),s()):t.slice()},h.rangeRound=function(l){return t=Array.from(l),e=bn,s()},h.clamp=function(l){return arguments.length?(a=l?!0:A,s()):a!==A},h.interpolate=function(l){return arguments.length?(e=l,s()):e},h.unknown=function(l){return arguments.length?(f=l,h):f},function(l,p){return r=l,i=p,s()}}function Xn(){return Vn()(A,A)}function Un(n,t,e,r){var i=wn(n,t,e),f;switch(r=D(r??",f"),r.type){case"s":{var a=Math.max(Math.abs(n),Math.abs(t));return r.precision==null&&!isNaN(f=Tn(i,a))&&(r.precision=f),rn(r,a)}case"":case"e":case"g":case"p":case"r":{r.precision==null&&!isNaN(f=In(i,Math.max(Math.abs(n),Math.abs(t))))&&(r.precision=f-(r.type==="e"));break}case"f":case"%":{r.precision==null&&!isNaN(f=Dn(i))&&(r.precision=f-(r.type==="%")*2);break}}return tn(r)}function Yn(n){var t=n.domain;return n.ticks=function(e){var r=t();return pn(r[0],r[r.length-1],e??10)},n.tickFormat=function(e,r){var i=t();return Un(i[0],i[i.length-1],e??10,r)},n.nice=function(e){e==null&&(e=10);var r=t(),i=0,f=r.length-1,a=r[i],u=r[f],c,o,s=10;for(u0;){if(o=L(a,u,e),o===c)return r[i]=a,r[f]=u,t(r);if(o>0)a=Math.floor(a/o)*o,u=Math.ceil(u/o)*o;else if(o<0)a=Math.ceil(a*o)/o,u=Math.floor(u*o)/o;else break;c=o}return n},n}function Zn(){var n=Xn();return n.copy=function(){return On(n,Zn())},cn.apply(n,arguments),Yn(n)}export{On as a,_ as b,Xn as c,Zn as l,wn as t}; diff --git a/assets/chunks/mindmap-definition-R7LC4OIY.CO700ovJ.js b/assets/chunks/mindmap-definition-R7LC4OIY.CO700ovJ.js new file mode 100644 index 000000000..251dfd3bb --- /dev/null +++ b/assets/chunks/mindmap-definition-R7LC4OIY.CO700ovJ.js @@ -0,0 +1,95 @@ +import{aG as at,aH as Nt,_ as S,l as z,j as Dt,al as mt,a5 as Ot,d as ot,I as At,ac as It,D as tt,i as et,ad as Ct,ae as Rt,af as xt}from"../app.D0Wo8w0i.js";import{c as pt}from"./cytoscape.esm.YXkLVt_w.js";import"./framework.B1keMFNq.js";import"./theme.8WvZWF-M.js";var dt={exports:{}},it={exports:{}},nt={exports:{}},ut;function Mt(){return ut||(ut=1,function(I,w){(function(m,y){I.exports=y()})(at,function(){return function(f){var m={};function y(r){if(m[r])return m[r].exports;var t=m[r]={i:r,l:!1,exports:{}};return f[r].call(t.exports,t,t.exports,y),t.l=!0,t.exports}return y.m=f,y.c=m,y.i=function(r){return r},y.d=function(r,t,e){y.o(r,t)||Object.defineProperty(r,t,{configurable:!1,enumerable:!0,get:e})},y.n=function(r){var t=r&&r.__esModule?function(){return r.default}:function(){return r};return y.d(t,"a",t),t},y.o=function(r,t){return Object.prototype.hasOwnProperty.call(r,t)},y.p="",y(y.s=26)}([function(f,m,y){function r(){}r.QUALITY=1,r.DEFAULT_CREATE_BENDS_AS_NEEDED=!1,r.DEFAULT_INCREMENTAL=!1,r.DEFAULT_ANIMATION_ON_LAYOUT=!0,r.DEFAULT_ANIMATION_DURING_LAYOUT=!1,r.DEFAULT_ANIMATION_PERIOD=50,r.DEFAULT_UNIFORM_LEAF_NODE_SIZES=!1,r.DEFAULT_GRAPH_MARGIN=15,r.NODE_DIMENSIONS_INCLUDE_LABELS=!1,r.SIMPLE_NODE_SIZE=40,r.SIMPLE_NODE_HALF_SIZE=r.SIMPLE_NODE_SIZE/2,r.EMPTY_COMPOUND_NODE_SIZE=40,r.MIN_EDGE_LENGTH=1,r.WORLD_BOUNDARY=1e6,r.INITIAL_WORLD_BOUNDARY=r.WORLD_BOUNDARY/1e3,r.WORLD_CENTER_X=1200,r.WORLD_CENTER_Y=900,f.exports=r},function(f,m,y){var r=y(2),t=y(8),e=y(9);function i(g,a,v){r.call(this,v),this.isOverlapingSourceAndTarget=!1,this.vGraphObject=v,this.bendpoints=[],this.source=g,this.target=a}i.prototype=Object.create(r.prototype);for(var o in r)i[o]=r[o];i.prototype.getSource=function(){return this.source},i.prototype.getTarget=function(){return this.target},i.prototype.isInterGraph=function(){return this.isInterGraph},i.prototype.getLength=function(){return this.length},i.prototype.isOverlapingSourceAndTarget=function(){return this.isOverlapingSourceAndTarget},i.prototype.getBendpoints=function(){return this.bendpoints},i.prototype.getLca=function(){return this.lca},i.prototype.getSourceInLca=function(){return this.sourceInLca},i.prototype.getTargetInLca=function(){return this.targetInLca},i.prototype.getOtherEnd=function(g){if(this.source===g)return this.target;if(this.target===g)return this.source;throw"Node is not incident with this edge"},i.prototype.getOtherEndInGraph=function(g,a){for(var v=this.getOtherEnd(g),n=a.getGraphManager().getRoot();;){if(v.getOwner()==a)return v;if(v.getOwner()==n)break;v=v.getOwner().getParent()}return null},i.prototype.updateLength=function(){var g=new Array(4);this.isOverlapingSourceAndTarget=t.getIntersection(this.target.getRect(),this.source.getRect(),g),this.isOverlapingSourceAndTarget||(this.lengthX=g[0]-g[2],this.lengthY=g[1]-g[3],Math.abs(this.lengthX)<1&&(this.lengthX=e.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=e.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY))},i.prototype.updateLengthSimple=function(){this.lengthX=this.target.getCenterX()-this.source.getCenterX(),this.lengthY=this.target.getCenterY()-this.source.getCenterY(),Math.abs(this.lengthX)<1&&(this.lengthX=e.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=e.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY)},f.exports=i},function(f,m,y){function r(t){this.vGraphObject=t}f.exports=r},function(f,m,y){var r=y(2),t=y(10),e=y(13),i=y(0),o=y(16),g=y(4);function a(n,c,l,E){l==null&&E==null&&(E=c),r.call(this,E),n.graphManager!=null&&(n=n.graphManager),this.estimatedSize=t.MIN_VALUE,this.inclusionTreeDepth=t.MAX_VALUE,this.vGraphObject=E,this.edges=[],this.graphManager=n,l!=null&&c!=null?this.rect=new e(c.x,c.y,l.width,l.height):this.rect=new e}a.prototype=Object.create(r.prototype);for(var v in r)a[v]=r[v];a.prototype.getEdges=function(){return this.edges},a.prototype.getChild=function(){return this.child},a.prototype.getOwner=function(){return this.owner},a.prototype.getWidth=function(){return this.rect.width},a.prototype.setWidth=function(n){this.rect.width=n},a.prototype.getHeight=function(){return this.rect.height},a.prototype.setHeight=function(n){this.rect.height=n},a.prototype.getCenterX=function(){return this.rect.x+this.rect.width/2},a.prototype.getCenterY=function(){return this.rect.y+this.rect.height/2},a.prototype.getCenter=function(){return new g(this.rect.x+this.rect.width/2,this.rect.y+this.rect.height/2)},a.prototype.getLocation=function(){return new g(this.rect.x,this.rect.y)},a.prototype.getRect=function(){return this.rect},a.prototype.getDiagonal=function(){return Math.sqrt(this.rect.width*this.rect.width+this.rect.height*this.rect.height)},a.prototype.getHalfTheDiagonal=function(){return Math.sqrt(this.rect.height*this.rect.height+this.rect.width*this.rect.width)/2},a.prototype.setRect=function(n,c){this.rect.x=n.x,this.rect.y=n.y,this.rect.width=c.width,this.rect.height=c.height},a.prototype.setCenter=function(n,c){this.rect.x=n-this.rect.width/2,this.rect.y=c-this.rect.height/2},a.prototype.setLocation=function(n,c){this.rect.x=n,this.rect.y=c},a.prototype.moveBy=function(n,c){this.rect.x+=n,this.rect.y+=c},a.prototype.getEdgeListToNode=function(n){var c=[],l=this;return l.edges.forEach(function(E){if(E.target==n){if(E.source!=l)throw"Incorrect edge source!";c.push(E)}}),c},a.prototype.getEdgesBetween=function(n){var c=[],l=this;return l.edges.forEach(function(E){if(!(E.source==l||E.target==l))throw"Incorrect edge source and/or target";(E.target==n||E.source==n)&&c.push(E)}),c},a.prototype.getNeighborsList=function(){var n=new Set,c=this;return c.edges.forEach(function(l){if(l.source==c)n.add(l.target);else{if(l.target!=c)throw"Incorrect incidency!";n.add(l.source)}}),n},a.prototype.withChildren=function(){var n=new Set,c,l;if(n.add(this),this.child!=null)for(var E=this.child.getNodes(),T=0;Tc&&(this.rect.x-=(this.labelWidth-c)/2,this.setWidth(this.labelWidth)),this.labelHeight>l&&(this.labelPos=="center"?this.rect.y-=(this.labelHeight-l)/2:this.labelPos=="top"&&(this.rect.y-=this.labelHeight-l),this.setHeight(this.labelHeight))}}},a.prototype.getInclusionTreeDepth=function(){if(this.inclusionTreeDepth==t.MAX_VALUE)throw"assert failed";return this.inclusionTreeDepth},a.prototype.transform=function(n){var c=this.rect.x;c>i.WORLD_BOUNDARY?c=i.WORLD_BOUNDARY:c<-i.WORLD_BOUNDARY&&(c=-i.WORLD_BOUNDARY);var l=this.rect.y;l>i.WORLD_BOUNDARY?l=i.WORLD_BOUNDARY:l<-i.WORLD_BOUNDARY&&(l=-i.WORLD_BOUNDARY);var E=new g(c,l),T=n.inverseTransformPoint(E);this.setLocation(T.x,T.y)},a.prototype.getLeft=function(){return this.rect.x},a.prototype.getRight=function(){return this.rect.x+this.rect.width},a.prototype.getTop=function(){return this.rect.y},a.prototype.getBottom=function(){return this.rect.y+this.rect.height},a.prototype.getParent=function(){return this.owner==null?null:this.owner.getParent()},f.exports=a},function(f,m,y){function r(t,e){t==null&&e==null?(this.x=0,this.y=0):(this.x=t,this.y=e)}r.prototype.getX=function(){return this.x},r.prototype.getY=function(){return this.y},r.prototype.setX=function(t){this.x=t},r.prototype.setY=function(t){this.y=t},r.prototype.getDifference=function(t){return new DimensionD(this.x-t.x,this.y-t.y)},r.prototype.getCopy=function(){return new r(this.x,this.y)},r.prototype.translate=function(t){return this.x+=t.width,this.y+=t.height,this},f.exports=r},function(f,m,y){var r=y(2),t=y(10),e=y(0),i=y(6),o=y(3),g=y(1),a=y(13),v=y(12),n=y(11);function c(E,T,D){r.call(this,D),this.estimatedSize=t.MIN_VALUE,this.margin=e.DEFAULT_GRAPH_MARGIN,this.edges=[],this.nodes=[],this.isConnected=!1,this.parent=E,T!=null&&T instanceof i?this.graphManager=T:T!=null&&T instanceof Layout&&(this.graphManager=T.graphManager)}c.prototype=Object.create(r.prototype);for(var l in r)c[l]=r[l];c.prototype.getNodes=function(){return this.nodes},c.prototype.getEdges=function(){return this.edges},c.prototype.getGraphManager=function(){return this.graphManager},c.prototype.getParent=function(){return this.parent},c.prototype.getLeft=function(){return this.left},c.prototype.getRight=function(){return this.right},c.prototype.getTop=function(){return this.top},c.prototype.getBottom=function(){return this.bottom},c.prototype.isConnected=function(){return this.isConnected},c.prototype.add=function(E,T,D){if(T==null&&D==null){var L=E;if(this.graphManager==null)throw"Graph has no graph mgr!";if(this.getNodes().indexOf(L)>-1)throw"Node already in graph!";return L.owner=this,this.getNodes().push(L),L}else{var O=E;if(!(this.getNodes().indexOf(T)>-1&&this.getNodes().indexOf(D)>-1))throw"Source or target not in graph!";if(!(T.owner==D.owner&&T.owner==this))throw"Both owners must be this graph!";return T.owner!=D.owner?null:(O.source=T,O.target=D,O.isInterGraph=!1,this.getEdges().push(O),T.edges.push(O),D!=T&&D.edges.push(O),O)}},c.prototype.remove=function(E){var T=E;if(E instanceof o){if(T==null)throw"Node is null!";if(!(T.owner!=null&&T.owner==this))throw"Owner graph is invalid!";if(this.graphManager==null)throw"Owner graph manager is invalid!";for(var D=T.edges.slice(),L,O=D.length,d=0;d-1&&h>-1))throw"Source and/or target doesn't know this edge!";L.source.edges.splice(s,1),L.target!=L.source&&L.target.edges.splice(h,1);var N=L.source.owner.getEdges().indexOf(L);if(N==-1)throw"Not in owner's edge list!";L.source.owner.getEdges().splice(N,1)}},c.prototype.updateLeftTop=function(){for(var E=t.MAX_VALUE,T=t.MAX_VALUE,D,L,O,d=this.getNodes(),N=d.length,s=0;sD&&(E=D),T>L&&(T=L)}return E==t.MAX_VALUE?null:(d[0].getParent().paddingLeft!=null?O=d[0].getParent().paddingLeft:O=this.margin,this.left=T-O,this.top=E-O,new v(this.left,this.top))},c.prototype.updateBounds=function(E){for(var T=t.MAX_VALUE,D=-t.MAX_VALUE,L=t.MAX_VALUE,O=-t.MAX_VALUE,d,N,s,h,u,p=this.nodes,A=p.length,C=0;Cd&&(T=d),Ds&&(L=s),Od&&(T=d),Ds&&(L=s),O=this.nodes.length){var A=0;D.forEach(function(C){C.owner==E&&A++}),A==this.nodes.length&&(this.isConnected=!0)}},f.exports=c},function(f,m,y){var r,t=y(1);function e(i){r=y(5),this.layout=i,this.graphs=[],this.edges=[]}e.prototype.addRoot=function(){var i=this.layout.newGraph(),o=this.layout.newNode(null),g=this.add(i,o);return this.setRootGraph(g),this.rootGraph},e.prototype.add=function(i,o,g,a,v){if(g==null&&a==null&&v==null){if(i==null)throw"Graph is null!";if(o==null)throw"Parent node is null!";if(this.graphs.indexOf(i)>-1)throw"Graph already in this graph mgr!";if(this.graphs.push(i),i.parent!=null)throw"Already has a parent!";if(o.child!=null)throw"Already has a child!";return i.parent=o,o.child=i,i}else{v=g,a=o,g=i;var n=a.getOwner(),c=v.getOwner();if(!(n!=null&&n.getGraphManager()==this))throw"Source not in this graph mgr!";if(!(c!=null&&c.getGraphManager()==this))throw"Target not in this graph mgr!";if(n==c)return g.isInterGraph=!1,n.add(g,a,v);if(g.isInterGraph=!0,g.source=a,g.target=v,this.edges.indexOf(g)>-1)throw"Edge already in inter-graph edge list!";if(this.edges.push(g),!(g.source!=null&&g.target!=null))throw"Edge source and/or target is null!";if(!(g.source.edges.indexOf(g)==-1&&g.target.edges.indexOf(g)==-1))throw"Edge already in source and/or target incidency list!";return g.source.edges.push(g),g.target.edges.push(g),g}},e.prototype.remove=function(i){if(i instanceof r){var o=i;if(o.getGraphManager()!=this)throw"Graph not in this graph mgr";if(!(o==this.rootGraph||o.parent!=null&&o.parent.graphManager==this))throw"Invalid parent node!";var g=[];g=g.concat(o.getEdges());for(var a,v=g.length,n=0;n=i.getRight()?o[0]+=Math.min(i.getX()-e.getX(),e.getRight()-i.getRight()):i.getX()<=e.getX()&&i.getRight()>=e.getRight()&&(o[0]+=Math.min(e.getX()-i.getX(),i.getRight()-e.getRight())),e.getY()<=i.getY()&&e.getBottom()>=i.getBottom()?o[1]+=Math.min(i.getY()-e.getY(),e.getBottom()-i.getBottom()):i.getY()<=e.getY()&&i.getBottom()>=e.getBottom()&&(o[1]+=Math.min(e.getY()-i.getY(),i.getBottom()-e.getBottom()));var v=Math.abs((i.getCenterY()-e.getCenterY())/(i.getCenterX()-e.getCenterX()));i.getCenterY()===e.getCenterY()&&i.getCenterX()===e.getCenterX()&&(v=1);var n=v*o[0],c=o[1]/v;o[0]n)return o[0]=g,o[1]=l,o[2]=v,o[3]=p,!1;if(av)return o[0]=c,o[1]=a,o[2]=h,o[3]=n,!1;if(gv?(o[0]=T,o[1]=D,x=!0):(o[0]=E,o[1]=l,x=!0):U===M&&(g>v?(o[0]=c,o[1]=l,x=!0):(o[0]=L,o[1]=D,x=!0)),-X===M?v>g?(o[2]=u,o[3]=p,_=!0):(o[2]=h,o[3]=s,_=!0):X===M&&(v>g?(o[2]=N,o[3]=s,_=!0):(o[2]=A,o[3]=p,_=!0)),x&&_)return!1;if(g>v?a>n?(G=this.getCardinalDirection(U,M,4),F=this.getCardinalDirection(X,M,2)):(G=this.getCardinalDirection(-U,M,3),F=this.getCardinalDirection(-X,M,1)):a>n?(G=this.getCardinalDirection(-U,M,1),F=this.getCardinalDirection(-X,M,3)):(G=this.getCardinalDirection(U,M,2),F=this.getCardinalDirection(X,M,4)),!x)switch(G){case 1:Y=l,b=g+-d/M,o[0]=b,o[1]=Y;break;case 2:b=L,Y=a+O*M,o[0]=b,o[1]=Y;break;case 3:Y=D,b=g+d/M,o[0]=b,o[1]=Y;break;case 4:b=T,Y=a+-O*M,o[0]=b,o[1]=Y;break}if(!_)switch(F){case 1:H=s,k=v+-R/M,o[2]=k,o[3]=H;break;case 2:k=A,H=n+C*M,o[2]=k,o[3]=H;break;case 3:H=p,k=v+R/M,o[2]=k,o[3]=H;break;case 4:k=u,H=n+-C*M,o[2]=k,o[3]=H;break}}return!1},t.getCardinalDirection=function(e,i,o){return e>i?o:1+o%4},t.getIntersection=function(e,i,o,g){if(g==null)return this.getIntersection2(e,i,o);var a=e.x,v=e.y,n=i.x,c=i.y,l=o.x,E=o.y,T=g.x,D=g.y,L=void 0,O=void 0,d=void 0,N=void 0,s=void 0,h=void 0,u=void 0,p=void 0,A=void 0;return d=c-v,s=a-n,u=n*v-a*c,N=D-E,h=l-T,p=T*E-l*D,A=d*h-N*s,A===0?null:(L=(s*p-h*u)/A,O=(N*u-d*p)/A,new r(L,O))},t.angleOfVector=function(e,i,o,g){var a=void 0;return e!==o?(a=Math.atan((g-i)/(o-e)),o0?1:t<0?-1:0},r.floor=function(t){return t<0?Math.ceil(t):Math.floor(t)},r.ceil=function(t){return t<0?Math.floor(t):Math.ceil(t)},f.exports=r},function(f,m,y){function r(){}r.MAX_VALUE=2147483647,r.MIN_VALUE=-2147483648,f.exports=r},function(f,m,y){var r=function(){function a(v,n){for(var c=0;c"u"?"undefined":r(e);return e==null||i!="object"&&i!="function"},f.exports=t},function(f,m,y){function r(l){if(Array.isArray(l)){for(var E=0,T=Array(l.length);E0&&E;){for(d.push(s[0]);d.length>0&&E;){var h=d[0];d.splice(0,1),O.add(h);for(var u=h.getEdges(),L=0;L-1&&s.splice(R,1)}O=new Set,N=new Map}}return l},c.prototype.createDummyNodesForBendpoints=function(l){for(var E=[],T=l.source,D=this.graphManager.calcLowestCommonAncestor(l.source,l.target),L=0;L0){for(var D=this.edgeToDummyNodes.get(T),L=0;L=0&&E.splice(p,1);var A=N.getNeighborsList();A.forEach(function(x){if(T.indexOf(x)<0){var _=D.get(x),U=_-1;U==1&&h.push(x),D.set(x,U)}})}T=T.concat(h),(E.length==1||E.length==2)&&(L=!0,O=E[0])}return O},c.prototype.setGraphManager=function(l){this.graphManager=l},f.exports=c},function(f,m,y){function r(){}r.seed=1,r.x=0,r.nextDouble=function(){return r.x=Math.sin(r.seed++)*1e4,r.x-Math.floor(r.x)},f.exports=r},function(f,m,y){var r=y(4);function t(e,i){this.lworldOrgX=0,this.lworldOrgY=0,this.ldeviceOrgX=0,this.ldeviceOrgY=0,this.lworldExtX=1,this.lworldExtY=1,this.ldeviceExtX=1,this.ldeviceExtY=1}t.prototype.getWorldOrgX=function(){return this.lworldOrgX},t.prototype.setWorldOrgX=function(e){this.lworldOrgX=e},t.prototype.getWorldOrgY=function(){return this.lworldOrgY},t.prototype.setWorldOrgY=function(e){this.lworldOrgY=e},t.prototype.getWorldExtX=function(){return this.lworldExtX},t.prototype.setWorldExtX=function(e){this.lworldExtX=e},t.prototype.getWorldExtY=function(){return this.lworldExtY},t.prototype.setWorldExtY=function(e){this.lworldExtY=e},t.prototype.getDeviceOrgX=function(){return this.ldeviceOrgX},t.prototype.setDeviceOrgX=function(e){this.ldeviceOrgX=e},t.prototype.getDeviceOrgY=function(){return this.ldeviceOrgY},t.prototype.setDeviceOrgY=function(e){this.ldeviceOrgY=e},t.prototype.getDeviceExtX=function(){return this.ldeviceExtX},t.prototype.setDeviceExtX=function(e){this.ldeviceExtX=e},t.prototype.getDeviceExtY=function(){return this.ldeviceExtY},t.prototype.setDeviceExtY=function(e){this.ldeviceExtY=e},t.prototype.transformX=function(e){var i=0,o=this.lworldExtX;return o!=0&&(i=this.ldeviceOrgX+(e-this.lworldOrgX)*this.ldeviceExtX/o),i},t.prototype.transformY=function(e){var i=0,o=this.lworldExtY;return o!=0&&(i=this.ldeviceOrgY+(e-this.lworldOrgY)*this.ldeviceExtY/o),i},t.prototype.inverseTransformX=function(e){var i=0,o=this.ldeviceExtX;return o!=0&&(i=this.lworldOrgX+(e-this.ldeviceOrgX)*this.lworldExtX/o),i},t.prototype.inverseTransformY=function(e){var i=0,o=this.ldeviceExtY;return o!=0&&(i=this.lworldOrgY+(e-this.ldeviceOrgY)*this.lworldExtY/o),i},t.prototype.inverseTransformPoint=function(e){var i=new r(this.inverseTransformX(e.x),this.inverseTransformY(e.y));return i},f.exports=t},function(f,m,y){function r(n){if(Array.isArray(n)){for(var c=0,l=Array(n.length);ce.ADAPTATION_LOWER_NODE_LIMIT&&(this.coolingFactor=Math.max(this.coolingFactor*e.COOLING_ADAPTATION_FACTOR,this.coolingFactor-(n-e.ADAPTATION_LOWER_NODE_LIMIT)/(e.ADAPTATION_UPPER_NODE_LIMIT-e.ADAPTATION_LOWER_NODE_LIMIT)*this.coolingFactor*(1-e.COOLING_ADAPTATION_FACTOR))),this.maxNodeDisplacement=e.MAX_NODE_DISPLACEMENT_INCREMENTAL):(n>e.ADAPTATION_LOWER_NODE_LIMIT?this.coolingFactor=Math.max(e.COOLING_ADAPTATION_FACTOR,1-(n-e.ADAPTATION_LOWER_NODE_LIMIT)/(e.ADAPTATION_UPPER_NODE_LIMIT-e.ADAPTATION_LOWER_NODE_LIMIT)*(1-e.COOLING_ADAPTATION_FACTOR)):this.coolingFactor=1,this.initialCoolingFactor=this.coolingFactor,this.maxNodeDisplacement=e.MAX_NODE_DISPLACEMENT),this.maxIterations=Math.max(this.getAllNodes().length*5,this.maxIterations),this.totalDisplacementThreshold=this.displacementThresholdPerNode*this.getAllNodes().length,this.repulsionRange=this.calcRepulsionRange()},a.prototype.calcSpringForces=function(){for(var n=this.getAllEdges(),c,l=0;l0&&arguments[0]!==void 0?arguments[0]:!0,c=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,l,E,T,D,L=this.getAllNodes(),O;if(this.useFRGridVariant)for(this.totalIterations%e.GRID_CALCULATION_CHECK_PERIOD==1&&n&&this.updateGrid(),O=new Set,l=0;ld||O>d)&&(n.gravitationForceX=-this.gravityConstant*T,n.gravitationForceY=-this.gravityConstant*D)):(d=c.getEstimatedSize()*this.compoundGravityRangeFactor,(L>d||O>d)&&(n.gravitationForceX=-this.gravityConstant*T*this.compoundGravityConstant,n.gravitationForceY=-this.gravityConstant*D*this.compoundGravityConstant))},a.prototype.isConverged=function(){var n,c=!1;return this.totalIterations>this.maxIterations/3&&(c=Math.abs(this.totalDisplacement-this.oldTotalDisplacement)<2),n=this.totalDisplacement=L.length||d>=L[0].length)){for(var N=0;Na}}]),o}();f.exports=i},function(f,m,y){var r=function(){function i(o,g){for(var a=0;a2&&arguments[2]!==void 0?arguments[2]:1,v=arguments.length>3&&arguments[3]!==void 0?arguments[3]:-1,n=arguments.length>4&&arguments[4]!==void 0?arguments[4]:-1;t(this,i),this.sequence1=o,this.sequence2=g,this.match_score=a,this.mismatch_penalty=v,this.gap_penalty=n,this.iMax=o.length+1,this.jMax=g.length+1,this.grid=new Array(this.iMax);for(var c=0;c=0;o--){var g=this.listeners[o];g.event===e&&g.callback===i&&this.listeners.splice(o,1)}},t.emit=function(e,i){for(var o=0;og.coolingFactor*g.maxNodeDisplacement&&(this.displacementX=g.coolingFactor*g.maxNodeDisplacement*e.sign(this.displacementX)),Math.abs(this.displacementY)>g.coolingFactor*g.maxNodeDisplacement&&(this.displacementY=g.coolingFactor*g.maxNodeDisplacement*e.sign(this.displacementY)),this.child==null?this.moveBy(this.displacementX,this.displacementY):this.child.getNodes().length==0?this.moveBy(this.displacementX,this.displacementY):this.propogateDisplacementToChildren(this.displacementX,this.displacementY),g.totalDisplacement+=Math.abs(this.displacementX)+Math.abs(this.displacementY),this.springForceX=0,this.springForceY=0,this.repulsionForceX=0,this.repulsionForceY=0,this.gravitationForceX=0,this.gravitationForceY=0,this.displacementX=0,this.displacementY=0},i.prototype.propogateDisplacementToChildren=function(g,a){for(var v=this.getChild().getNodes(),n,c=0;c0)this.positionNodesRadially(s);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var h=new Set(this.getAllNodes()),u=this.nodesWithGravity.filter(function(p){return h.has(p)});this.graphManager.setAllNodesToApplyGravitation(u),this.positionNodesRandomly()}}return this.initSpringEmbedder(),this.runSpringEmbedder(),!0},d.prototype.tick=function(){if(this.totalIterations++,this.totalIterations===this.maxIterations&&!this.isTreeGrowing&&!this.isGrowthFinished)if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;if(this.totalIterations%v.CONVERGENCE_CHECK_PERIOD==0&&!this.isTreeGrowing&&!this.isGrowthFinished){if(this.isConverged())if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;this.coolingCycle++,this.layoutQuality==0?this.coolingAdjuster=this.coolingCycle:this.layoutQuality==1&&(this.coolingAdjuster=this.coolingCycle/3),this.coolingFactor=Math.max(this.initialCoolingFactor-Math.pow(this.coolingCycle,Math.log(100*(this.initialCoolingFactor-this.finalTemperature))/Math.log(this.maxCoolingCycle))/100*this.coolingAdjuster,this.finalTemperature),this.animationPeriod=Math.ceil(this.initialAnimationPeriod*Math.sqrt(this.coolingFactor))}if(this.isTreeGrowing){if(this.growTreeIterations%10==0)if(this.prunedNodesAll.length>0){this.graphManager.updateBounds(),this.updateGrid(),this.growTree(this.prunedNodesAll),this.graphManager.resetAllNodesToApplyGravitation();var s=new Set(this.getAllNodes()),h=this.nodesWithGravity.filter(function(A){return s.has(A)});this.graphManager.setAllNodesToApplyGravitation(h),this.graphManager.updateBounds(),this.updateGrid(),this.coolingFactor=v.DEFAULT_COOLING_FACTOR_INCREMENTAL}else this.isTreeGrowing=!1,this.isGrowthFinished=!0;this.growTreeIterations++}if(this.isGrowthFinished){if(this.isConverged())return!0;this.afterGrowthIterations%10==0&&(this.graphManager.updateBounds(),this.updateGrid()),this.coolingFactor=v.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var u=!this.isTreeGrowing&&!this.isGrowthFinished,p=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(u,p),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},d.prototype.getPositionsData=function(){for(var s=this.graphManager.getAllNodes(),h={},u=0;u1){var x;for(x=0;xp&&(p=Math.floor(R.y)),C=Math.floor(R.x+a.DEFAULT_COMPONENT_SEPERATION)}this.transform(new l(n.WORLD_CENTER_X-R.x/2,n.WORLD_CENTER_Y-R.y/2))},d.radialLayout=function(s,h,u){var p=Math.max(this.maxDiagonalInTree(s),a.DEFAULT_RADIAL_SEPARATION);d.branchRadialLayout(h,null,0,359,0,p);var A=L.calculateBounds(s),C=new O;C.setDeviceOrgX(A.getMinX()),C.setDeviceOrgY(A.getMinY()),C.setWorldOrgX(u.x),C.setWorldOrgY(u.y);for(var R=0;R1;){var H=k[0];k.splice(0,1);var P=M.indexOf(H);P>=0&&M.splice(P,1),b--,G--}h!=null?Y=(M.indexOf(k[0])+1)%b:Y=0;for(var B=Math.abs(p-u)/G,$=Y;F!=G;$=++$%b){var K=M[$].getOtherEnd(s);if(K!=h){var Q=(u+F*B)%360,J=(Q+B)%360;d.branchRadialLayout(K,s,Q,J,A+C,C),F++}}},d.maxDiagonalInTree=function(s){for(var h=T.MIN_VALUE,u=0;uh&&(h=A)}return h},d.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},d.prototype.groupZeroDegreeMembers=function(){var s=this,h={};this.memberGroups={},this.idToDummyNode={};for(var u=[],p=this.graphManager.getAllNodes(),A=0;A"u"&&(h[x]=[]),h[x]=h[x].concat(C)}Object.keys(h).forEach(function(_){if(h[_].length>1){var U="DummyCompound_"+_;s.memberGroups[U]=h[_];var X=h[_][0].getParent(),M=new o(s.graphManager);M.id=U,M.paddingLeft=X.paddingLeft||0,M.paddingRight=X.paddingRight||0,M.paddingBottom=X.paddingBottom||0,M.paddingTop=X.paddingTop||0,s.idToDummyNode[U]=M;var G=s.getGraphManager().add(s.newGraph(),M),F=X.getChild();F.add(M);for(var b=0;b=0;s--){var h=this.compoundOrder[s],u=h.id,p=h.paddingLeft,A=h.paddingTop;this.adjustLocations(this.tiledMemberPack[u],h.rect.x,h.rect.y,p,A)}},d.prototype.repopulateZeroDegreeMembers=function(){var s=this,h=this.tiledZeroDegreePack;Object.keys(h).forEach(function(u){var p=s.idToDummyNode[u],A=p.paddingLeft,C=p.paddingTop;s.adjustLocations(h[u],p.rect.x,p.rect.y,A,C)})},d.prototype.getToBeTiled=function(s){var h=s.id;if(this.toBeTiled[h]!=null)return this.toBeTiled[h];var u=s.getChild();if(u==null)return this.toBeTiled[h]=!1,!1;for(var p=u.getNodes(),A=0;A0)return this.toBeTiled[h]=!1,!1;if(C.getChild()==null){this.toBeTiled[C.id]=!1;continue}if(!this.getToBeTiled(C))return this.toBeTiled[h]=!1,!1}return this.toBeTiled[h]=!0,!0},d.prototype.getNodeDegree=function(s){s.id;for(var h=s.getEdges(),u=0,p=0;p_&&(_=X.rect.height)}u+=_+s.verticalPadding}},d.prototype.tileCompoundMembers=function(s,h){var u=this;this.tiledMemberPack=[],Object.keys(s).forEach(function(p){var A=h[p];u.tiledMemberPack[p]=u.tileNodes(s[p],A.paddingLeft+A.paddingRight),A.rect.width=u.tiledMemberPack[p].width,A.rect.height=u.tiledMemberPack[p].height})},d.prototype.tileNodes=function(s,h){var u=a.TILING_PADDING_VERTICAL,p=a.TILING_PADDING_HORIZONTAL,A={rows:[],rowWidth:[],rowHeight:[],width:0,height:h,verticalPadding:u,horizontalPadding:p};s.sort(function(x,_){return x.rect.width*x.rect.height>_.rect.width*_.rect.height?-1:x.rect.width*x.rect.height<_.rect.width*_.rect.height?1:0});for(var C=0;C0&&(R+=s.horizontalPadding),s.rowWidth[u]=R,s.width0&&(x+=s.verticalPadding);var _=0;x>s.rowHeight[u]&&(_=s.rowHeight[u],s.rowHeight[u]=x,_=s.rowHeight[u]-_),s.height+=_,s.rows[u].push(h)},d.prototype.getShortestRowIndex=function(s){for(var h=-1,u=Number.MAX_VALUE,p=0;pu&&(h=p,u=s.rowWidth[p]);return h},d.prototype.canAddHorizontal=function(s,h,u){var p=this.getShortestRowIndex(s);if(p<0)return!0;var A=s.rowWidth[p];if(A+s.horizontalPadding+h<=s.width)return!0;var C=0;s.rowHeight[p]0&&(C=u+s.verticalPadding-s.rowHeight[p]);var R;s.width-A>=h+s.horizontalPadding?R=(s.height+C)/(A+h+s.horizontalPadding):R=(s.height+C)/s.width,C=u+s.verticalPadding;var x;return s.widthC&&h!=u){p.splice(-1,1),s.rows[u].push(A),s.rowWidth[h]=s.rowWidth[h]-C,s.rowWidth[u]=s.rowWidth[u]+C,s.width=s.rowWidth[instance.getLongestRowIndex(s)];for(var R=Number.MIN_VALUE,x=0;xR&&(R=p[x].height);h>0&&(R+=s.verticalPadding);var _=s.rowHeight[h]+s.rowHeight[u];s.rowHeight[h]=R,s.rowHeight[u]0)for(var F=A;F<=C;F++)G[0]+=this.grid[F][R-1].length+this.grid[F][R].length-1;if(C0)for(var F=R;F<=x;F++)G[3]+=this.grid[A-1][F].length+this.grid[A][F].length-1;for(var b=T.MAX_VALUE,Y,k,H=0;H0){var x;x=O.getGraphManager().add(O.newGraph(),u),this.processChildrenList(x,h,O)}}},l.prototype.stop=function(){return this.stopped=!0,this};var T=function(L){L("layout","cose-bilkent",l)};typeof cytoscape<"u"&&T(cytoscape),m.exports=T}])})})(dt);var St=dt.exports;const Gt=Nt(St);var st=function(){var I=S(function(O,d,N,s){for(N=N||{},s=O.length;s--;N[O[s]]=d);return N},"o"),w=[1,4],f=[1,13],m=[1,12],y=[1,15],r=[1,16],t=[1,20],e=[1,19],i=[6,7,8],o=[1,26],g=[1,24],a=[1,25],v=[6,7,11],n=[1,6,13,15,16,19,22],c=[1,33],l=[1,34],E=[1,6,7,11,13,15,16,19,22],T={trace:S(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mindMap:4,spaceLines:5,SPACELINE:6,NL:7,MINDMAP:8,document:9,stop:10,EOF:11,statement:12,SPACELIST:13,node:14,ICON:15,CLASS:16,nodeWithId:17,nodeWithoutId:18,NODE_DSTART:19,NODE_DESCR:20,NODE_DEND:21,NODE_ID:22,$accept:0,$end:1},terminals_:{2:"error",6:"SPACELINE",7:"NL",8:"MINDMAP",11:"EOF",13:"SPACELIST",15:"ICON",16:"CLASS",19:"NODE_DSTART",20:"NODE_DESCR",21:"NODE_DEND",22:"NODE_ID"},productions_:[0,[3,1],[3,2],[5,1],[5,2],[5,2],[4,2],[4,3],[10,1],[10,1],[10,1],[10,2],[10,2],[9,3],[9,2],[12,2],[12,2],[12,2],[12,1],[12,1],[12,1],[12,1],[12,1],[14,1],[14,1],[18,3],[17,1],[17,4]],performAction:S(function(d,N,s,h,u,p,A){var C=p.length-1;switch(u){case 6:case 7:return h;case 8:h.getLogger().trace("Stop NL ");break;case 9:h.getLogger().trace("Stop EOF ");break;case 11:h.getLogger().trace("Stop NL2 ");break;case 12:h.getLogger().trace("Stop EOF2 ");break;case 15:h.getLogger().info("Node: ",p[C].id),h.addNode(p[C-1].length,p[C].id,p[C].descr,p[C].type);break;case 16:h.getLogger().trace("Icon: ",p[C]),h.decorateNode({icon:p[C]});break;case 17:case 21:h.decorateNode({class:p[C]});break;case 18:h.getLogger().trace("SPACELIST");break;case 19:h.getLogger().trace("Node: ",p[C].id),h.addNode(0,p[C].id,p[C].descr,p[C].type);break;case 20:h.decorateNode({icon:p[C]});break;case 25:h.getLogger().trace("node found ..",p[C-2]),this.$={id:p[C-1],descr:p[C-1],type:h.getType(p[C-2],p[C])};break;case 26:this.$={id:p[C],descr:p[C],type:h.nodeType.DEFAULT};break;case 27:h.getLogger().trace("node found ..",p[C-3]),this.$={id:p[C-3],descr:p[C-1],type:h.getType(p[C-2],p[C])};break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],8:w},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:w},{6:f,7:[1,10],9:9,12:11,13:m,14:14,15:y,16:r,17:17,18:18,19:t,22:e},I(i,[2,3]),{1:[2,2]},I(i,[2,4]),I(i,[2,5]),{1:[2,6],6:f,12:21,13:m,14:14,15:y,16:r,17:17,18:18,19:t,22:e},{6:f,9:22,12:11,13:m,14:14,15:y,16:r,17:17,18:18,19:t,22:e},{6:o,7:g,10:23,11:a},I(v,[2,22],{17:17,18:18,14:27,15:[1,28],16:[1,29],19:t,22:e}),I(v,[2,18]),I(v,[2,19]),I(v,[2,20]),I(v,[2,21]),I(v,[2,23]),I(v,[2,24]),I(v,[2,26],{19:[1,30]}),{20:[1,31]},{6:o,7:g,10:32,11:a},{1:[2,7],6:f,12:21,13:m,14:14,15:y,16:r,17:17,18:18,19:t,22:e},I(n,[2,14],{7:c,11:l}),I(E,[2,8]),I(E,[2,9]),I(E,[2,10]),I(v,[2,15]),I(v,[2,16]),I(v,[2,17]),{20:[1,35]},{21:[1,36]},I(n,[2,13],{7:c,11:l}),I(E,[2,11]),I(E,[2,12]),{21:[1,37]},I(v,[2,25]),I(v,[2,27])],defaultActions:{2:[2,1],6:[2,2]},parseError:S(function(d,N){if(N.recoverable)this.trace(d);else{var s=new Error(d);throw s.hash=N,s}},"parseError"),parse:S(function(d){var N=this,s=[0],h=[],u=[null],p=[],A=this.table,C="",R=0,x=0,_=2,U=1,X=p.slice.call(arguments,1),M=Object.create(this.lexer),G={yy:{}};for(var F in this.yy)Object.prototype.hasOwnProperty.call(this.yy,F)&&(G.yy[F]=this.yy[F]);M.setInput(d,G.yy),G.yy.lexer=M,G.yy.parser=this,typeof M.yylloc>"u"&&(M.yylloc={});var b=M.yylloc;p.push(b);var Y=M.options&&M.options.ranges;typeof G.yy.parseError=="function"?this.parseError=G.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function k(V){s.length=s.length-2*V,u.length=u.length-V,p.length=p.length-V}S(k,"popStack");function H(){var V;return V=h.pop()||M.lex()||U,typeof V!="number"&&(V instanceof Array&&(h=V,V=h.pop()),V=N.symbols_[V]||V),V}S(H,"lex");for(var P,B,$,K,Q={},J,j,gt,q;;){if(B=s[s.length-1],this.defaultActions[B]?$=this.defaultActions[B]:((P===null||typeof P>"u")&&(P=H()),$=A[B]&&A[B][P]),typeof $>"u"||!$.length||!$[0]){var rt="";q=[];for(J in A[B])this.terminals_[J]&&J>_&&q.push("'"+this.terminals_[J]+"'");M.showPosition?rt="Parse error on line "+(R+1)+`: +`+M.showPosition()+` +Expecting `+q.join(", ")+", got '"+(this.terminals_[P]||P)+"'":rt="Parse error on line "+(R+1)+": Unexpected "+(P==U?"end of input":"'"+(this.terminals_[P]||P)+"'"),this.parseError(rt,{text:M.match,token:this.terminals_[P]||P,line:M.yylineno,loc:b,expected:q})}if($[0]instanceof Array&&$.length>1)throw new Error("Parse Error: multiple actions possible at state: "+B+", token: "+P);switch($[0]){case 1:s.push(P),u.push(M.yytext),p.push(M.yylloc),s.push($[1]),P=null,x=M.yyleng,C=M.yytext,R=M.yylineno,b=M.yylloc;break;case 2:if(j=this.productions_[$[1]][1],Q.$=u[u.length-j],Q._$={first_line:p[p.length-(j||1)].first_line,last_line:p[p.length-1].last_line,first_column:p[p.length-(j||1)].first_column,last_column:p[p.length-1].last_column},Y&&(Q._$.range=[p[p.length-(j||1)].range[0],p[p.length-1].range[1]]),K=this.performAction.apply(Q,[C,x,R,G.yy,$[1],u,p].concat(X)),typeof K<"u")return K;j&&(s=s.slice(0,-1*j*2),u=u.slice(0,-1*j),p=p.slice(0,-1*j)),s.push(this.productions_[$[1]][0]),u.push(Q.$),p.push(Q._$),gt=A[s[s.length-2]][s[s.length-1]],s.push(gt);break;case 3:return!0}}return!0},"parse")},D=function(){var O={EOF:1,parseError:S(function(N,s){if(this.yy.parser)this.yy.parser.parseError(N,s);else throw new Error(N)},"parseError"),setInput:S(function(d,N){return this.yy=N||this.yy||{},this._input=d,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:S(function(){var d=this._input[0];this.yytext+=d,this.yyleng++,this.offset++,this.match+=d,this.matched+=d;var N=d.match(/(?:\r\n?|\n).*/g);return N?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),d},"input"),unput:S(function(d){var N=d.length,s=d.split(/(?:\r\n?|\n)/g);this._input=d+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-N),this.offset-=N;var h=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),s.length-1&&(this.yylineno-=s.length-1);var u=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:s?(s.length===h.length?this.yylloc.first_column:0)+h[h.length-s.length].length-s[0].length:this.yylloc.first_column-N},this.options.ranges&&(this.yylloc.range=[u[0],u[0]+this.yyleng-N]),this.yyleng=this.yytext.length,this},"unput"),more:S(function(){return this._more=!0,this},"more"),reject:S(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:S(function(d){this.unput(this.match.slice(d))},"less"),pastInput:S(function(){var d=this.matched.substr(0,this.matched.length-this.match.length);return(d.length>20?"...":"")+d.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:S(function(){var d=this.match;return d.length<20&&(d+=this._input.substr(0,20-d.length)),(d.substr(0,20)+(d.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:S(function(){var d=this.pastInput(),N=new Array(d.length+1).join("-");return d+this.upcomingInput()+` +`+N+"^"},"showPosition"),test_match:S(function(d,N){var s,h,u;if(this.options.backtrack_lexer&&(u={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(u.yylloc.range=this.yylloc.range.slice(0))),h=d[0].match(/(?:\r\n?|\n).*/g),h&&(this.yylineno+=h.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:h?h[h.length-1].length-h[h.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+d[0].length},this.yytext+=d[0],this.match+=d[0],this.matches=d,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(d[0].length),this.matched+=d[0],s=this.performAction.call(this,this.yy,this,N,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),s)return s;if(this._backtrack){for(var p in u)this[p]=u[p];return!1}return!1},"test_match"),next:S(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var d,N,s,h;this._more||(this.yytext="",this.match="");for(var u=this._currentRules(),p=0;pN[0].length)){if(N=s,h=p,this.options.backtrack_lexer){if(d=this.test_match(s,u[p]),d!==!1)return d;if(this._backtrack){N=!1;continue}else return!1}else if(!this.options.flex)break}return N?(d=this.test_match(N,u[h]),d!==!1?d:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:S(function(){var N=this.next();return N||this.lex()},"lex"),begin:S(function(N){this.conditionStack.push(N)},"begin"),popState:S(function(){var N=this.conditionStack.length-1;return N>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:S(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:S(function(N){return N=this.conditionStack.length-1-Math.abs(N||0),N>=0?this.conditionStack[N]:"INITIAL"},"topState"),pushState:S(function(N){this.begin(N)},"pushState"),stateStackSize:S(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:S(function(N,s,h,u){switch(h){case 0:return N.getLogger().trace("Found comment",s.yytext),6;case 1:return 8;case 2:this.begin("CLASS");break;case 3:return this.popState(),16;case 4:this.popState();break;case 5:N.getLogger().trace("Begin icon"),this.begin("ICON");break;case 6:return N.getLogger().trace("SPACELINE"),6;case 7:return 7;case 8:return 15;case 9:N.getLogger().trace("end icon"),this.popState();break;case 10:return N.getLogger().trace("Exploding node"),this.begin("NODE"),19;case 11:return N.getLogger().trace("Cloud"),this.begin("NODE"),19;case 12:return N.getLogger().trace("Explosion Bang"),this.begin("NODE"),19;case 13:return N.getLogger().trace("Cloud Bang"),this.begin("NODE"),19;case 14:return this.begin("NODE"),19;case 15:return this.begin("NODE"),19;case 16:return this.begin("NODE"),19;case 17:return this.begin("NODE"),19;case 18:return 13;case 19:return 22;case 20:return 11;case 21:this.begin("NSTR2");break;case 22:return"NODE_DESCR";case 23:this.popState();break;case 24:N.getLogger().trace("Starting NSTR"),this.begin("NSTR");break;case 25:return N.getLogger().trace("description:",s.yytext),"NODE_DESCR";case 26:this.popState();break;case 27:return this.popState(),N.getLogger().trace("node end ))"),"NODE_DEND";case 28:return this.popState(),N.getLogger().trace("node end )"),"NODE_DEND";case 29:return this.popState(),N.getLogger().trace("node end ...",s.yytext),"NODE_DEND";case 30:return this.popState(),N.getLogger().trace("node end (("),"NODE_DEND";case 31:return this.popState(),N.getLogger().trace("node end (-"),"NODE_DEND";case 32:return this.popState(),N.getLogger().trace("node end (-"),"NODE_DEND";case 33:return this.popState(),N.getLogger().trace("node end (("),"NODE_DEND";case 34:return this.popState(),N.getLogger().trace("node end (("),"NODE_DEND";case 35:return N.getLogger().trace("Long description:",s.yytext),20;case 36:return N.getLogger().trace("Long description:",s.yytext),20}},"anonymous"),rules:[/^(?:\s*%%.*)/i,/^(?:mindmap\b)/i,/^(?::::)/i,/^(?:.+)/i,/^(?:\n)/i,/^(?:::icon\()/i,/^(?:[\s]+[\n])/i,/^(?:[\n]+)/i,/^(?:[^\)]+)/i,/^(?:\))/i,/^(?:-\))/i,/^(?:\(-)/i,/^(?:\)\))/i,/^(?:\))/i,/^(?:\(\()/i,/^(?:\{\{)/i,/^(?:\()/i,/^(?:\[)/i,/^(?:[\s]+)/i,/^(?:[^\(\[\n\)\{\}]+)/i,/^(?:$)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:[^"]+)/i,/^(?:["])/i,/^(?:[\)]\))/i,/^(?:[\)])/i,/^(?:[\]])/i,/^(?:\}\})/i,/^(?:\(-)/i,/^(?:-\))/i,/^(?:\(\()/i,/^(?:\()/i,/^(?:[^\)\]\(\}]+)/i,/^(?:.+(?!\(\())/i],conditions:{CLASS:{rules:[3,4],inclusive:!1},ICON:{rules:[8,9],inclusive:!1},NSTR2:{rules:[22,23],inclusive:!1},NSTR:{rules:[25,26],inclusive:!1},NODE:{rules:[21,24,27,28,29,30,31,32,33,34,35,36],inclusive:!1},INITIAL:{rules:[0,1,2,5,6,7,10,11,12,13,14,15,16,17,18,19,20],inclusive:!0}}};return O}();T.lexer=D;function L(){this.yy={}}return S(L,"Parser"),L.prototype=T,T.Parser=L,new L}();st.parser=st;var _t=st,Z=[],vt=0,ht={},Ft=S(()=>{Z=[],vt=0,ht={}},"clear"),bt=S(function(I){for(let w=Z.length-1;w>=0;w--)if(Z[w].levelZ.length>0?Z[0]:null,"getMindmap"),Pt=S((I,w,f,m)=>{var i,o;z.info("addNode",I,w,f,m);const y=ot();let r=((i=y.mindmap)==null?void 0:i.padding)??tt.mindmap.padding;switch(m){case W.ROUNDED_RECT:case W.RECT:case W.HEXAGON:r*=2}const t={id:vt++,nodeId:et(w,y),level:I,descr:et(f,y),type:m,children:[],width:((o=y.mindmap)==null?void 0:o.maxNodeWidth)??tt.mindmap.maxNodeWidth,padding:r},e=bt(I);if(e)e.children.push(t),Z.push(t);else if(Z.length===0)Z.push(t);else throw new Error('There can be only one root. No parent could be found for ("'+t.descr+'")')},"addNode"),W={DEFAULT:0,NO_BORDER:0,ROUNDED_RECT:1,RECT:2,CIRCLE:3,CLOUD:4,BANG:5,HEXAGON:6},Yt=S((I,w)=>{switch(z.debug("In get type",I,w),I){case"[":return W.RECT;case"(":return w===")"?W.ROUNDED_RECT:W.CLOUD;case"((":return W.CIRCLE;case")":return W.CLOUD;case"))":return W.BANG;case"{{":return W.HEXAGON;default:return W.DEFAULT}},"getType"),Xt=S((I,w)=>{ht[I]=w},"setElementForId"),kt=S(I=>{if(!I)return;const w=ot(),f=Z[Z.length-1];I.icon&&(f.icon=et(I.icon,w)),I.class&&(f.class=et(I.class,w))},"decorateNode"),Ht=S(I=>{switch(I){case W.DEFAULT:return"no-border";case W.RECT:return"rect";case W.ROUNDED_RECT:return"rounded-rect";case W.CIRCLE:return"circle";case W.CLOUD:return"cloud";case W.BANG:return"bang";case W.HEXAGON:return"hexgon";default:return"no-border"}},"type2Str"),$t=S(()=>z,"getLogger"),Wt=S(I=>ht[I],"getElementById"),Bt={clear:Ft,addNode:Pt,getMindmap:Ut,nodeType:W,getType:Yt,setElementForId:Xt,decorateNode:kt,type2Str:Ht,getLogger:$t,getElementById:Wt},Vt=Bt,Zt=12,Qt=S(function(I,w,f,m){w.append("path").attr("id","node-"+f.id).attr("class","node-bkg node-"+I.type2Str(f.type)).attr("d",`M0 ${f.height-5} v${-f.height+2*5} q0,-5 5,-5 h${f.width-2*5} q5,0 5,5 v${f.height-5} H0 Z`),w.append("line").attr("class","node-line-"+m).attr("x1",0).attr("y1",f.height).attr("x2",f.width).attr("y2",f.height)},"defaultBkg"),jt=S(function(I,w,f){w.append("rect").attr("id","node-"+f.id).attr("class","node-bkg node-"+I.type2Str(f.type)).attr("height",f.height).attr("width",f.width)},"rectBkg"),zt=S(function(I,w,f){const m=f.width,y=f.height,r=.15*m,t=.25*m,e=.35*m,i=.2*m;w.append("path").attr("id","node-"+f.id).attr("class","node-bkg node-"+I.type2Str(f.type)).attr("d",`M0 0 a${r},${r} 0 0,1 ${m*.25},${-1*m*.1} + a${e},${e} 1 0,1 ${m*.4},${-1*m*.1} + a${t},${t} 1 0,1 ${m*.35},${1*m*.2} + + a${r},${r} 1 0,1 ${m*.15},${1*y*.35} + a${i},${i} 1 0,1 ${-1*m*.15},${1*y*.65} + + a${t},${r} 1 0,1 ${-1*m*.25},${m*.15} + a${e},${e} 1 0,1 ${-1*m*.5},0 + a${r},${r} 1 0,1 ${-1*m*.25},${-1*m*.15} + + a${r},${r} 1 0,1 ${-1*m*.1},${-1*y*.35} + a${i},${i} 1 0,1 ${m*.1},${-1*y*.65} + + H0 V0 Z`)},"cloudBkg"),Kt=S(function(I,w,f){const m=f.width,y=f.height,r=.15*m;w.append("path").attr("id","node-"+f.id).attr("class","node-bkg node-"+I.type2Str(f.type)).attr("d",`M0 0 a${r},${r} 1 0,0 ${m*.25},${-1*y*.1} + a${r},${r} 1 0,0 ${m*.25},0 + a${r},${r} 1 0,0 ${m*.25},0 + a${r},${r} 1 0,0 ${m*.25},${1*y*.1} + + a${r},${r} 1 0,0 ${m*.15},${1*y*.33} + a${r*.8},${r*.8} 1 0,0 0,${1*y*.34} + a${r},${r} 1 0,0 ${-1*m*.15},${1*y*.33} + + a${r},${r} 1 0,0 ${-1*m*.25},${y*.15} + a${r},${r} 1 0,0 ${-1*m*.25},0 + a${r},${r} 1 0,0 ${-1*m*.25},0 + a${r},${r} 1 0,0 ${-1*m*.25},${-1*y*.15} + + a${r},${r} 1 0,0 ${-1*m*.1},${-1*y*.33} + a${r*.8},${r*.8} 1 0,0 0,${-1*y*.34} + a${r},${r} 1 0,0 ${m*.1},${-1*y*.33} + + H0 V0 Z`)},"bangBkg"),Jt=S(function(I,w,f){w.append("circle").attr("id","node-"+f.id).attr("class","node-bkg node-"+I.type2Str(f.type)).attr("r",f.width/2)},"circleBkg");function yt(I,w,f,m,y){return I.insert("polygon",":first-child").attr("points",m.map(function(r){return r.x+","+r.y}).join(" ")).attr("transform","translate("+(y.width-w)/2+", "+f+")")}S(yt,"insertPolygonShape");var qt=S(function(I,w,f){const m=f.height,r=m/4,t=f.width-f.padding+2*r,e=[{x:r,y:0},{x:t-r,y:0},{x:t,y:-m/2},{x:t-r,y:-m},{x:r,y:-m},{x:0,y:-m/2}];yt(w,t,m,e,f)},"hexagonBkg"),te=S(function(I,w,f){w.append("rect").attr("id","node-"+f.id).attr("class","node-bkg node-"+I.type2Str(f.type)).attr("height",f.height).attr("rx",f.padding).attr("ry",f.padding).attr("width",f.width)},"roundedRectBkg"),ee=S(async function(I,w,f,m,y){const r=y.htmlLabels,t=m%(Zt-1),e=w.append("g");f.section=t;let i="section-"+t;t<0&&(i+=" section-root"),e.attr("class",(f.class?f.class+" ":"")+"mindmap-node "+i);const o=e.append("g"),g=e.append("g"),a=f.descr.replace(/()/g,` +`);await mt(g,a,{useHtmlLabels:r,width:f.width,classes:"mindmap-node-label"},y),r||g.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle");const v=g.node().getBBox(),[n]=Ot(y.fontSize);if(f.height=v.height+n*1.1*.5+f.padding,f.width=v.width+2*f.padding,f.icon)if(f.type===I.nodeType.CIRCLE)f.height+=50,f.width+=50,e.append("foreignObject").attr("height","50px").attr("width",f.width).attr("style","text-align: center;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+t+" "+f.icon),g.attr("transform","translate("+f.width/2+", "+(f.height/2-1.5*f.padding)+")");else{f.width+=50;const c=f.height;f.height=Math.max(c,60);const l=Math.abs(f.height-c);e.append("foreignObject").attr("width","60px").attr("height",f.height).attr("style","text-align: center;margin-top:"+l/2+"px;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+t+" "+f.icon),g.attr("transform","translate("+(25+f.width/2)+", "+(l/2+f.padding/2)+")")}else if(r){const c=(f.width-v.width)/2,l=(f.height-v.height)/2;g.attr("transform","translate("+c+", "+l+")")}else{const c=f.width/2,l=f.padding/2;g.attr("transform","translate("+c+", "+l+")")}switch(f.type){case I.nodeType.DEFAULT:Qt(I,o,f,t);break;case I.nodeType.ROUNDED_RECT:te(I,o,f,t);break;case I.nodeType.RECT:jt(I,o,f,t);break;case I.nodeType.CIRCLE:o.attr("transform","translate("+f.width/2+", "+ +f.height/2+")"),Jt(I,o,f,t);break;case I.nodeType.CLOUD:zt(I,o,f,t);break;case I.nodeType.BANG:Kt(I,o,f,t);break;case I.nodeType.HEXAGON:qt(I,o,f,t);break}return I.setElementForId(f.id,e),f.height},"drawNode"),re=S(function(I,w){const f=I.getElementById(w.id),m=w.x||0,y=w.y||0;f.attr("transform","translate("+m+","+y+")")},"positionNode");pt.use(Gt);async function lt(I,w,f,m,y){await ee(I,w,f,m,y),f.children&&await Promise.all(f.children.map((r,t)=>lt(I,w,r,m<0?t:m,y)))}S(lt,"drawNodes");function Et(I,w){w.edges().map((f,m)=>{const y=f.data();if(f[0]._private.bodyBounds){const r=f[0]._private.rscratch;z.trace("Edge: ",m,y),I.insert("path").attr("d",`M ${r.startX},${r.startY} L ${r.midX},${r.midY} L${r.endX},${r.endY} `).attr("class","edge section-edge-"+y.section+" edge-depth-"+y.depth)}})}S(Et,"drawEdges");function ct(I,w,f,m){w.add({group:"nodes",data:{id:I.id.toString(),labelText:I.descr,height:I.height,width:I.width,level:m,nodeId:I.id,padding:I.padding,type:I.type},position:{x:I.x,y:I.y}}),I.children&&I.children.forEach(y=>{ct(y,w,f,m+1),w.add({group:"edges",data:{id:`${I.id}_${y.id}`,source:I.id,target:y.id,depth:m,section:y.section}})})}S(ct,"addNodes");function Lt(I,w){return new Promise(f=>{const m=Dt("body").append("div").attr("id","cy").attr("style","display:none"),y=pt({container:document.getElementById("cy"),style:[{selector:"edge",style:{"curve-style":"bezier"}}]});m.remove(),ct(I,y,w,0),y.nodes().forEach(function(r){r.layoutDimensions=()=>{const t=r.data();return{w:t.width,h:t.height}}}),y.layout({name:"cose-bilkent",quality:"proof",styleEnabled:!1,animate:!1}).run(),y.ready(r=>{z.info("Ready",r),f(y)})})}S(Lt,"layoutMindmap");function Tt(I,w){w.nodes().map((f,m)=>{const y=f.data();y.x=f.position().x,y.y=f.position().y,re(I,y);const r=I.getElementById(y.nodeId);z.info("Id:",m,"Position: (",f.position().x,", ",f.position().y,")",y),r.attr("transform",`translate(${f.position().x-y.width/2}, ${f.position().y-y.height/2})`),r.attr("attr",`apa-${m})`)})}S(Tt,"positionNodes");var ie=S(async(I,w,f,m)=>{var a,v;z.debug(`Rendering mindmap diagram +`+I);const y=m.db,r=y.getMindmap();if(!r)return;const t=ot();t.htmlLabels=!1;const e=At(w),i=e.append("g");i.attr("class","mindmap-edges");const o=e.append("g");o.attr("class","mindmap-nodes"),await lt(y,o,r,-1,t);const g=await Lt(r,t);Et(i,g),Tt(y,g),It(void 0,e,((a=t.mindmap)==null?void 0:a.padding)??tt.mindmap.padding,((v=t.mindmap)==null?void 0:v.useMaxWidth)??tt.mindmap.useMaxWidth)},"draw"),ne={draw:ie},se=S(I=>{let w="";for(let f=0;f` + .edge { + stroke-width: 3; + } + ${se(I)} + .section-root rect, .section-root path, .section-root circle, .section-root polygon { + fill: ${I.git0}; + } + .section-root text { + fill: ${I.gitBranchLabel0}; + } + .icon-container { + height:100%; + display: flex; + justify-content: center; + align-items: center; + } + .edge { + fill: none; + } + .mindmap-node-label { + dy: 1em; + alignment-baseline: middle; + text-anchor: middle; + dominant-baseline: middle; + text-align: center; + } +`,"getStyles"),oe=ae,ue={db:Vt,renderer:ne,parser:_t,styles:oe};export{ue as diagram}; diff --git a/assets/chunks/ordinal.BYWQX77i.js b/assets/chunks/ordinal.BYWQX77i.js new file mode 100644 index 000000000..1f7977b7f --- /dev/null +++ b/assets/chunks/ordinal.BYWQX77i.js @@ -0,0 +1 @@ +import{i as a}from"./init.Gi6I4Gst.js";class o extends Map{constructor(n,t=g){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:t}}),n!=null)for(const[r,s]of n)this.set(r,s)}get(n){return super.get(c(this,n))}has(n){return super.has(c(this,n))}set(n,t){return super.set(l(this,n),t)}delete(n){return super.delete(p(this,n))}}function c({_intern:e,_key:n},t){const r=n(t);return e.has(r)?e.get(r):t}function l({_intern:e,_key:n},t){const r=n(t);return e.has(r)?e.get(r):(e.set(r,t),t)}function p({_intern:e,_key:n},t){const r=n(t);return e.has(r)&&(t=e.get(r),e.delete(r)),t}function g(e){return e!==null&&typeof e=="object"?e.valueOf():e}const f=Symbol("implicit");function h(){var e=new o,n=[],t=[],r=f;function s(u){let i=e.get(u);if(i===void 0){if(r!==f)return r;e.set(u,i=n.push(u)-1)}return t[i%t.length]}return s.domain=function(u){if(!arguments.length)return n.slice();n=[],e=new o;for(const i of u)e.has(i)||e.set(i,n.push(i)-1);return s},s.range=function(u){return arguments.length?(t=Array.from(u),s):t.slice()},s.unknown=function(u){return arguments.length?(r=u,s):r},s.copy=function(){return h(n,t).unknown(r)},a.apply(s,arguments),s}export{h as o}; diff --git a/assets/chunks/pieDiagram-BLWKPB35.DfxLKqjS.js b/assets/chunks/pieDiagram-BLWKPB35.DfxLKqjS.js new file mode 100644 index 000000000..635e18350 --- /dev/null +++ b/assets/chunks/pieDiagram-BLWKPB35.DfxLKqjS.js @@ -0,0 +1,30 @@ +import{p as U}from"./chunk-BAOP5US2.FIn-rUo8.js";import{X as x,O as z,aF as j,D as q,q as X,r as Z,s as H,g as J,c as K,b as Q,_ as p,l as F,x as Y,d as tt,E as et,I as at,a5 as rt,k as nt}from"../app.D0Wo8w0i.js";import{p as it}from"./gitGraph-YCYPL57B.CgYFJ7dL.js";import{d as N}from"./arc.DjT8Zpi0.js";import{o as st}from"./ordinal.BYWQX77i.js";import"./framework.B1keMFNq.js";import"./theme.8WvZWF-M.js";import"./baseUniq.DoVpE4hx.js";import"./basePickBy.BafM5tVf.js";import"./clone.CgQKvgpz.js";import"./init.Gi6I4Gst.js";function ot(t,a){return at?1:a>=t?0:NaN}function lt(t){return t}function ct(){var t=lt,a=ot,m=null,o=x(0),g=x(z),y=x(0);function i(e){var r,l=(e=j(e)).length,c,A,h=0,u=new Array(l),n=new Array(l),v=+o.apply(this,arguments),w=Math.min(z,Math.max(-z,g.apply(this,arguments)-v)),f,T=Math.min(Math.abs(w)/l,y.apply(this,arguments)),$=T*(w<0?-1:1),d;for(r=0;r0&&(h+=d);for(a!=null?u.sort(function(S,D){return a(n[S],n[D])}):m!=null&&u.sort(function(S,D){return m(e[S],e[D])}),r=0,A=h?(w-l*$)/h:0;r0?d*A:0)+$,n[c]={data:e[c],index:r,value:d,startAngle:v,endAngle:f,padAngle:T};return n}return i.value=function(e){return arguments.length?(t=typeof e=="function"?e:x(+e),i):t},i.sortValues=function(e){return arguments.length?(a=e,m=null,i):a},i.sort=function(e){return arguments.length?(m=e,a=null,i):m},i.startAngle=function(e){return arguments.length?(o=typeof e=="function"?e:x(+e),i):o},i.endAngle=function(e){return arguments.length?(g=typeof e=="function"?e:x(+e),i):g},i.padAngle=function(e){return arguments.length?(y=typeof e=="function"?e:x(+e),i):y},i}var P=q.pie,G={sections:new Map,showData:!1,config:P},b=G.sections,O=G.showData,ut=structuredClone(P),pt=p(()=>structuredClone(ut),"getConfig"),gt=p(()=>{b=new Map,O=G.showData,Y()},"clear"),dt=p(({label:t,value:a})=>{b.has(t)||(b.set(t,a),F.debug(`added new section: ${t}, with value: ${a}`))},"addSection"),ft=p(()=>b,"getSections"),mt=p(t=>{O=t},"setShowData"),ht=p(()=>O,"getShowData"),R={getConfig:pt,clear:gt,setDiagramTitle:X,getDiagramTitle:Z,setAccTitle:H,getAccTitle:J,setAccDescription:K,getAccDescription:Q,addSection:dt,getSections:ft,setShowData:mt,getShowData:ht},vt=p((t,a)=>{U(t,a),a.setShowData(t.showData),t.sections.map(a.addSection)},"populateDb"),St={parse:p(async t=>{const a=await it("pie",t);F.debug(a),vt(a,R)},"parse")},xt=p(t=>` + .pieCircle{ + stroke: ${t.pieStrokeColor}; + stroke-width : ${t.pieStrokeWidth}; + opacity : ${t.pieOpacity}; + } + .pieOuterCircle{ + stroke: ${t.pieOuterStrokeColor}; + stroke-width: ${t.pieOuterStrokeWidth}; + fill: none; + } + .pieTitleText { + text-anchor: middle; + font-size: ${t.pieTitleTextSize}; + fill: ${t.pieTitleTextColor}; + font-family: ${t.fontFamily}; + } + .slice { + font-family: ${t.fontFamily}; + fill: ${t.pieSectionTextColor}; + font-size:${t.pieSectionTextSize}; + // fill: white; + } + .legend text { + fill: ${t.pieLegendTextColor}; + font-family: ${t.fontFamily}; + font-size: ${t.pieLegendTextSize}; + } +`,"getStyles"),yt=xt,At=p(t=>{const a=[...t.entries()].map(o=>({label:o[0],value:o[1]})).sort((o,g)=>g.value-o.value);return ct().value(o=>o.value)(a)},"createPieArcs"),wt=p((t,a,m,o)=>{F.debug(`rendering pie chart +`+t);const g=o.db,y=tt(),i=et(g.getConfig(),y.pie),e=40,r=18,l=4,c=450,A=c,h=at(a),u=h.append("g");u.attr("transform","translate("+A/2+","+c/2+")");const{themeVariables:n}=y;let[v]=rt(n.pieOuterStrokeWidth);v??(v=2);const w=i.textPosition,f=Math.min(A,c)/2-e,T=N().innerRadius(0).outerRadius(f),$=N().innerRadius(f*w).outerRadius(f*w);u.append("circle").attr("cx",0).attr("cy",0).attr("r",f+v/2).attr("class","pieOuterCircle");const d=g.getSections(),S=At(d),D=[n.pie1,n.pie2,n.pie3,n.pie4,n.pie5,n.pie6,n.pie7,n.pie8,n.pie9,n.pie10,n.pie11,n.pie12],C=st(D);u.selectAll("mySlices").data(S).enter().append("path").attr("d",T).attr("fill",s=>C(s.data.label)).attr("class","pieCircle");let W=0;d.forEach(s=>{W+=s}),u.selectAll("mySlices").data(S).enter().append("text").text(s=>(s.data.value/W*100).toFixed(0)+"%").attr("transform",s=>"translate("+$.centroid(s)+")").style("text-anchor","middle").attr("class","slice"),u.append("text").text(g.getDiagramTitle()).attr("x",0).attr("y",-(c-50)/2).attr("class","pieTitleText");const M=u.selectAll(".legend").data(C.domain()).enter().append("g").attr("class","legend").attr("transform",(s,k)=>{const E=r+l,_=E*C.domain().length/2,B=12*r,V=k*E-_;return"translate("+B+","+V+")"});M.append("rect").attr("width",r).attr("height",r).style("fill",C).style("stroke",C),M.data(S).append("text").attr("x",r+l).attr("y",r-l).text(s=>{const{label:k,value:E}=s.data;return g.getShowData()?`${k} [${E}]`:k});const L=Math.max(...M.selectAll("text").nodes().map(s=>(s==null?void 0:s.getBoundingClientRect().width)??0)),I=A+e+r+l+L;h.attr("viewBox",`0 0 ${I} ${c}`),nt(h,c,I,i.useMaxWidth)},"draw"),Dt={draw:wt},Wt={parser:St,db:R,renderer:Dt,styles:yt};export{Wt as diagram}; diff --git a/assets/chunks/quadrantDiagram-QXWEEFXS.CKQNlX2Z.js b/assets/chunks/quadrantDiagram-QXWEEFXS.CKQNlX2Z.js new file mode 100644 index 000000000..5f0696ab6 --- /dev/null +++ b/assets/chunks/quadrantDiagram-QXWEEFXS.CKQNlX2Z.js @@ -0,0 +1,7 @@ +import{_ as o,a0 as _e,D,l as At,d as wt,i as Ae,r as ie,s as ke,g as Fe,q as Pe,b as ve,c as Ce,x as Le,j as zt,k as Ee}from"../app.D0Wo8w0i.js";import{l as ee}from"./linear.QGmzl4if.js";import"./framework.B1keMFNq.js";import"./theme.8WvZWF-M.js";import"./init.Gi6I4Gst.js";var Vt=function(){var t=o(function(j,r,l,g){for(l=l||{},g=j.length;g--;l[j[g]]=r);return l},"o"),n=[1,3],u=[1,4],c=[1,5],h=[1,6],p=[1,7],y=[1,4,5,10,12,13,14,18,25,35,37,39,41,42,48,50,51,52,53,54,55,56,57,60,61,63,64,65,66,67],S=[1,4,5,10,12,13,14,18,25,28,35,37,39,41,42,48,50,51,52,53,54,55,56,57,60,61,63,64,65,66,67],a=[55,56,57],A=[2,36],d=[1,37],T=[1,36],q=[1,38],m=[1,35],b=[1,43],x=[1,41],O=[1,14],Y=[1,23],G=[1,18],yt=[1,19],Tt=[1,20],dt=[1,21],Ft=[1,22],ut=[1,24],xt=[1,25],ft=[1,26],gt=[1,27],i=[1,28],Bt=[1,29],W=[1,32],U=[1,33],k=[1,34],F=[1,39],P=[1,40],v=[1,42],C=[1,44],H=[1,62],X=[1,61],L=[4,5,8,10,12,13,14,18,44,47,49,55,56,57,63,64,65,66,67],Rt=[1,65],Nt=[1,66],Wt=[1,67],Ut=[1,68],Qt=[1,69],Ot=[1,70],Ht=[1,71],Xt=[1,72],Mt=[1,73],Yt=[1,74],jt=[1,75],Gt=[1,76],I=[4,5,6,7,8,9,10,11,12,13,14,15,18],J=[1,90],$=[1,91],tt=[1,92],et=[1,99],it=[1,93],at=[1,96],nt=[1,94],st=[1,95],rt=[1,97],ot=[1,98],Pt=[1,102],Kt=[10,55,56,57],R=[4,5,6,8,10,11,13,17,18,19,20,55,56,57],vt={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,idStringToken:3,ALPHA:4,NUM:5,NODE_STRING:6,DOWN:7,MINUS:8,DEFAULT:9,COMMA:10,COLON:11,AMP:12,BRKT:13,MULT:14,UNICODE_TEXT:15,styleComponent:16,UNIT:17,SPACE:18,STYLE:19,PCT:20,idString:21,style:22,stylesOpt:23,classDefStatement:24,CLASSDEF:25,start:26,eol:27,QUADRANT:28,document:29,line:30,statement:31,axisDetails:32,quadrantDetails:33,points:34,title:35,title_value:36,acc_title:37,acc_title_value:38,acc_descr:39,acc_descr_value:40,acc_descr_multiline_value:41,section:42,text:43,point_start:44,point_x:45,point_y:46,class_name:47,"X-AXIS":48,"AXIS-TEXT-DELIMITER":49,"Y-AXIS":50,QUADRANT_1:51,QUADRANT_2:52,QUADRANT_3:53,QUADRANT_4:54,NEWLINE:55,SEMI:56,EOF:57,alphaNumToken:58,textNoTagsToken:59,STR:60,MD_STR:61,alphaNum:62,PUNCTUATION:63,PLUS:64,EQUALS:65,DOT:66,UNDERSCORE:67,$accept:0,$end:1},terminals_:{2:"error",4:"ALPHA",5:"NUM",6:"NODE_STRING",7:"DOWN",8:"MINUS",9:"DEFAULT",10:"COMMA",11:"COLON",12:"AMP",13:"BRKT",14:"MULT",15:"UNICODE_TEXT",17:"UNIT",18:"SPACE",19:"STYLE",20:"PCT",25:"CLASSDEF",28:"QUADRANT",35:"title",36:"title_value",37:"acc_title",38:"acc_title_value",39:"acc_descr",40:"acc_descr_value",41:"acc_descr_multiline_value",42:"section",44:"point_start",45:"point_x",46:"point_y",47:"class_name",48:"X-AXIS",49:"AXIS-TEXT-DELIMITER",50:"Y-AXIS",51:"QUADRANT_1",52:"QUADRANT_2",53:"QUADRANT_3",54:"QUADRANT_4",55:"NEWLINE",56:"SEMI",57:"EOF",60:"STR",61:"MD_STR",63:"PUNCTUATION",64:"PLUS",65:"EQUALS",66:"DOT",67:"UNDERSCORE"},productions_:[0,[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[21,1],[21,2],[22,1],[22,2],[23,1],[23,3],[24,5],[26,2],[26,2],[26,2],[29,0],[29,2],[30,2],[31,0],[31,1],[31,2],[31,1],[31,1],[31,1],[31,2],[31,2],[31,2],[31,1],[31,1],[34,4],[34,5],[34,5],[34,6],[32,4],[32,3],[32,2],[32,4],[32,3],[32,2],[33,2],[33,2],[33,2],[33,2],[27,1],[27,1],[27,1],[43,1],[43,2],[43,1],[43,1],[62,1],[62,2],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[59,1],[59,1],[59,1]],performAction:o(function(r,l,g,f,_,e,pt){var s=e.length-1;switch(_){case 23:this.$=e[s];break;case 24:this.$=e[s-1]+""+e[s];break;case 26:this.$=e[s-1]+e[s];break;case 27:this.$=[e[s].trim()];break;case 28:e[s-2].push(e[s].trim()),this.$=e[s-2];break;case 29:this.$=e[s-4],f.addClass(e[s-2],e[s]);break;case 37:this.$=[];break;case 42:this.$=e[s].trim(),f.setDiagramTitle(this.$);break;case 43:this.$=e[s].trim(),f.setAccTitle(this.$);break;case 44:case 45:this.$=e[s].trim(),f.setAccDescription(this.$);break;case 46:f.addSection(e[s].substr(8)),this.$=e[s].substr(8);break;case 47:f.addPoint(e[s-3],"",e[s-1],e[s],[]);break;case 48:f.addPoint(e[s-4],e[s-3],e[s-1],e[s],[]);break;case 49:f.addPoint(e[s-4],"",e[s-2],e[s-1],e[s]);break;case 50:f.addPoint(e[s-5],e[s-4],e[s-2],e[s-1],e[s]);break;case 51:f.setXAxisLeftText(e[s-2]),f.setXAxisRightText(e[s]);break;case 52:e[s-1].text+=" ⟶ ",f.setXAxisLeftText(e[s-1]);break;case 53:f.setXAxisLeftText(e[s]);break;case 54:f.setYAxisBottomText(e[s-2]),f.setYAxisTopText(e[s]);break;case 55:e[s-1].text+=" ⟶ ",f.setYAxisBottomText(e[s-1]);break;case 56:f.setYAxisBottomText(e[s]);break;case 57:f.setQuadrant1Text(e[s]);break;case 58:f.setQuadrant2Text(e[s]);break;case 59:f.setQuadrant3Text(e[s]);break;case 60:f.setQuadrant4Text(e[s]);break;case 64:this.$={text:e[s],type:"text"};break;case 65:this.$={text:e[s-1].text+""+e[s],type:e[s-1].type};break;case 66:this.$={text:e[s],type:"text"};break;case 67:this.$={text:e[s],type:"markdown"};break;case 68:this.$=e[s];break;case 69:this.$=e[s-1]+""+e[s];break}},"anonymous"),table:[{18:n,26:1,27:2,28:u,55:c,56:h,57:p},{1:[3]},{18:n,26:8,27:2,28:u,55:c,56:h,57:p},{18:n,26:9,27:2,28:u,55:c,56:h,57:p},t(y,[2,33],{29:10}),t(S,[2,61]),t(S,[2,62]),t(S,[2,63]),{1:[2,30]},{1:[2,31]},t(a,A,{30:11,31:12,24:13,32:15,33:16,34:17,43:30,58:31,1:[2,32],4:d,5:T,10:q,12:m,13:b,14:x,18:O,25:Y,35:G,37:yt,39:Tt,41:dt,42:Ft,48:ut,50:xt,51:ft,52:gt,53:i,54:Bt,60:W,61:U,63:k,64:F,65:P,66:v,67:C}),t(y,[2,34]),{27:45,55:c,56:h,57:p},t(a,[2,37]),t(a,A,{24:13,32:15,33:16,34:17,43:30,58:31,31:46,4:d,5:T,10:q,12:m,13:b,14:x,18:O,25:Y,35:G,37:yt,39:Tt,41:dt,42:Ft,48:ut,50:xt,51:ft,52:gt,53:i,54:Bt,60:W,61:U,63:k,64:F,65:P,66:v,67:C}),t(a,[2,39]),t(a,[2,40]),t(a,[2,41]),{36:[1,47]},{38:[1,48]},{40:[1,49]},t(a,[2,45]),t(a,[2,46]),{18:[1,50]},{4:d,5:T,10:q,12:m,13:b,14:x,43:51,58:31,60:W,61:U,63:k,64:F,65:P,66:v,67:C},{4:d,5:T,10:q,12:m,13:b,14:x,43:52,58:31,60:W,61:U,63:k,64:F,65:P,66:v,67:C},{4:d,5:T,10:q,12:m,13:b,14:x,43:53,58:31,60:W,61:U,63:k,64:F,65:P,66:v,67:C},{4:d,5:T,10:q,12:m,13:b,14:x,43:54,58:31,60:W,61:U,63:k,64:F,65:P,66:v,67:C},{4:d,5:T,10:q,12:m,13:b,14:x,43:55,58:31,60:W,61:U,63:k,64:F,65:P,66:v,67:C},{4:d,5:T,10:q,12:m,13:b,14:x,43:56,58:31,60:W,61:U,63:k,64:F,65:P,66:v,67:C},{4:d,5:T,8:H,10:q,12:m,13:b,14:x,18:X,44:[1,57],47:[1,58],58:60,59:59,63:k,64:F,65:P,66:v,67:C},t(L,[2,64]),t(L,[2,66]),t(L,[2,67]),t(L,[2,70]),t(L,[2,71]),t(L,[2,72]),t(L,[2,73]),t(L,[2,74]),t(L,[2,75]),t(L,[2,76]),t(L,[2,77]),t(L,[2,78]),t(L,[2,79]),t(L,[2,80]),t(y,[2,35]),t(a,[2,38]),t(a,[2,42]),t(a,[2,43]),t(a,[2,44]),{3:64,4:Rt,5:Nt,6:Wt,7:Ut,8:Qt,9:Ot,10:Ht,11:Xt,12:Mt,13:Yt,14:jt,15:Gt,21:63},t(a,[2,53],{59:59,58:60,4:d,5:T,8:H,10:q,12:m,13:b,14:x,18:X,49:[1,77],63:k,64:F,65:P,66:v,67:C}),t(a,[2,56],{59:59,58:60,4:d,5:T,8:H,10:q,12:m,13:b,14:x,18:X,49:[1,78],63:k,64:F,65:P,66:v,67:C}),t(a,[2,57],{59:59,58:60,4:d,5:T,8:H,10:q,12:m,13:b,14:x,18:X,63:k,64:F,65:P,66:v,67:C}),t(a,[2,58],{59:59,58:60,4:d,5:T,8:H,10:q,12:m,13:b,14:x,18:X,63:k,64:F,65:P,66:v,67:C}),t(a,[2,59],{59:59,58:60,4:d,5:T,8:H,10:q,12:m,13:b,14:x,18:X,63:k,64:F,65:P,66:v,67:C}),t(a,[2,60],{59:59,58:60,4:d,5:T,8:H,10:q,12:m,13:b,14:x,18:X,63:k,64:F,65:P,66:v,67:C}),{45:[1,79]},{44:[1,80]},t(L,[2,65]),t(L,[2,81]),t(L,[2,82]),t(L,[2,83]),{3:82,4:Rt,5:Nt,6:Wt,7:Ut,8:Qt,9:Ot,10:Ht,11:Xt,12:Mt,13:Yt,14:jt,15:Gt,18:[1,81]},t(I,[2,23]),t(I,[2,1]),t(I,[2,2]),t(I,[2,3]),t(I,[2,4]),t(I,[2,5]),t(I,[2,6]),t(I,[2,7]),t(I,[2,8]),t(I,[2,9]),t(I,[2,10]),t(I,[2,11]),t(I,[2,12]),t(a,[2,52],{58:31,43:83,4:d,5:T,10:q,12:m,13:b,14:x,60:W,61:U,63:k,64:F,65:P,66:v,67:C}),t(a,[2,55],{58:31,43:84,4:d,5:T,10:q,12:m,13:b,14:x,60:W,61:U,63:k,64:F,65:P,66:v,67:C}),{46:[1,85]},{45:[1,86]},{4:J,5:$,6:tt,8:et,11:it,13:at,16:89,17:nt,18:st,19:rt,20:ot,22:88,23:87},t(I,[2,24]),t(a,[2,51],{59:59,58:60,4:d,5:T,8:H,10:q,12:m,13:b,14:x,18:X,63:k,64:F,65:P,66:v,67:C}),t(a,[2,54],{59:59,58:60,4:d,5:T,8:H,10:q,12:m,13:b,14:x,18:X,63:k,64:F,65:P,66:v,67:C}),t(a,[2,47],{22:88,16:89,23:100,4:J,5:$,6:tt,8:et,11:it,13:at,17:nt,18:st,19:rt,20:ot}),{46:[1,101]},t(a,[2,29],{10:Pt}),t(Kt,[2,27],{16:103,4:J,5:$,6:tt,8:et,11:it,13:at,17:nt,18:st,19:rt,20:ot}),t(R,[2,25]),t(R,[2,13]),t(R,[2,14]),t(R,[2,15]),t(R,[2,16]),t(R,[2,17]),t(R,[2,18]),t(R,[2,19]),t(R,[2,20]),t(R,[2,21]),t(R,[2,22]),t(a,[2,49],{10:Pt}),t(a,[2,48],{22:88,16:89,23:104,4:J,5:$,6:tt,8:et,11:it,13:at,17:nt,18:st,19:rt,20:ot}),{4:J,5:$,6:tt,8:et,11:it,13:at,16:89,17:nt,18:st,19:rt,20:ot,22:105},t(R,[2,26]),t(a,[2,50],{10:Pt}),t(Kt,[2,28],{16:103,4:J,5:$,6:tt,8:et,11:it,13:at,17:nt,18:st,19:rt,20:ot})],defaultActions:{8:[2,30],9:[2,31]},parseError:o(function(r,l){if(l.recoverable)this.trace(r);else{var g=new Error(r);throw g.hash=l,g}},"parseError"),parse:o(function(r){var l=this,g=[0],f=[],_=[null],e=[],pt=this.table,s="",mt=0,Zt=0,qe=2,Jt=1,me=e.slice.call(arguments,1),E=Object.create(this.lexer),K={yy:{}};for(var Ct in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Ct)&&(K.yy[Ct]=this.yy[Ct]);E.setInput(r,K.yy),K.yy.lexer=E,K.yy.parser=this,typeof E.yylloc>"u"&&(E.yylloc={});var Lt=E.yylloc;e.push(Lt);var be=E.options&&E.options.ranges;typeof K.yy.parseError=="function"?this.parseError=K.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Se(B){g.length=g.length-2*B,_.length=_.length-B,e.length=e.length-B}o(Se,"popStack");function $t(){var B;return B=f.pop()||E.lex()||Jt,typeof B!="number"&&(B instanceof Array&&(f=B,B=f.pop()),B=l.symbols_[B]||B),B}o($t,"lex");for(var w,Z,N,Et,lt={},bt,M,te,St;;){if(Z=g[g.length-1],this.defaultActions[Z]?N=this.defaultActions[Z]:((w===null||typeof w>"u")&&(w=$t()),N=pt[Z]&&pt[Z][w]),typeof N>"u"||!N.length||!N[0]){var Dt="";St=[];for(bt in pt[Z])this.terminals_[bt]&&bt>qe&&St.push("'"+this.terminals_[bt]+"'");E.showPosition?Dt="Parse error on line "+(mt+1)+`: +`+E.showPosition()+` +Expecting `+St.join(", ")+", got '"+(this.terminals_[w]||w)+"'":Dt="Parse error on line "+(mt+1)+": Unexpected "+(w==Jt?"end of input":"'"+(this.terminals_[w]||w)+"'"),this.parseError(Dt,{text:E.match,token:this.terminals_[w]||w,line:E.yylineno,loc:Lt,expected:St})}if(N[0]instanceof Array&&N.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Z+", token: "+w);switch(N[0]){case 1:g.push(w),_.push(E.yytext),e.push(E.yylloc),g.push(N[1]),w=null,Zt=E.yyleng,s=E.yytext,mt=E.yylineno,Lt=E.yylloc;break;case 2:if(M=this.productions_[N[1]][1],lt.$=_[_.length-M],lt._$={first_line:e[e.length-(M||1)].first_line,last_line:e[e.length-1].last_line,first_column:e[e.length-(M||1)].first_column,last_column:e[e.length-1].last_column},be&&(lt._$.range=[e[e.length-(M||1)].range[0],e[e.length-1].range[1]]),Et=this.performAction.apply(lt,[s,Zt,mt,K.yy,N[1],_,e].concat(me)),typeof Et<"u")return Et;M&&(g=g.slice(0,-1*M*2),_=_.slice(0,-1*M),e=e.slice(0,-1*M)),g.push(this.productions_[N[1]][0]),_.push(lt.$),e.push(lt._$),te=pt[g[g.length-2]][g[g.length-1]],g.push(te);break;case 3:return!0}}return!0},"parse")},Te=function(){var j={EOF:1,parseError:o(function(l,g){if(this.yy.parser)this.yy.parser.parseError(l,g);else throw new Error(l)},"parseError"),setInput:o(function(r,l){return this.yy=l||this.yy||{},this._input=r,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var r=this._input[0];this.yytext+=r,this.yyleng++,this.offset++,this.match+=r,this.matched+=r;var l=r.match(/(?:\r\n?|\n).*/g);return l?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),r},"input"),unput:o(function(r){var l=r.length,g=r.split(/(?:\r\n?|\n)/g);this._input=r+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-l),this.offset-=l;var f=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),g.length-1&&(this.yylineno-=g.length-1);var _=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:g?(g.length===f.length?this.yylloc.first_column:0)+f[f.length-g.length].length-g[0].length:this.yylloc.first_column-l},this.options.ranges&&(this.yylloc.range=[_[0],_[0]+this.yyleng-l]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(r){this.unput(this.match.slice(r))},"less"),pastInput:o(function(){var r=this.matched.substr(0,this.matched.length-this.match.length);return(r.length>20?"...":"")+r.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var r=this.match;return r.length<20&&(r+=this._input.substr(0,20-r.length)),(r.substr(0,20)+(r.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var r=this.pastInput(),l=new Array(r.length+1).join("-");return r+this.upcomingInput()+` +`+l+"^"},"showPosition"),test_match:o(function(r,l){var g,f,_;if(this.options.backtrack_lexer&&(_={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(_.yylloc.range=this.yylloc.range.slice(0))),f=r[0].match(/(?:\r\n?|\n).*/g),f&&(this.yylineno+=f.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:f?f[f.length-1].length-f[f.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+r[0].length},this.yytext+=r[0],this.match+=r[0],this.matches=r,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(r[0].length),this.matched+=r[0],g=this.performAction.call(this,this.yy,this,l,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),g)return g;if(this._backtrack){for(var e in _)this[e]=_[e];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var r,l,g,f;this._more||(this.yytext="",this.match="");for(var _=this._currentRules(),e=0;e<_.length;e++)if(g=this._input.match(this.rules[_[e]]),g&&(!l||g[0].length>l[0].length)){if(l=g,f=e,this.options.backtrack_lexer){if(r=this.test_match(g,_[e]),r!==!1)return r;if(this._backtrack){l=!1;continue}else return!1}else if(!this.options.flex)break}return l?(r=this.test_match(l,_[f]),r!==!1?r:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var l=this.next();return l||this.lex()},"lex"),begin:o(function(l){this.conditionStack.push(l)},"begin"),popState:o(function(){var l=this.conditionStack.length-1;return l>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(l){return l=this.conditionStack.length-1-Math.abs(l||0),l>=0?this.conditionStack[l]:"INITIAL"},"topState"),pushState:o(function(l){this.begin(l)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(l,g,f,_){switch(f){case 0:break;case 1:break;case 2:return 55;case 3:break;case 4:return this.begin("title"),35;case 5:return this.popState(),"title_value";case 6:return this.begin("acc_title"),37;case 7:return this.popState(),"acc_title_value";case 8:return this.begin("acc_descr"),39;case 9:return this.popState(),"acc_descr_value";case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:return 48;case 14:return 50;case 15:return 49;case 16:return 51;case 17:return 52;case 18:return 53;case 19:return 54;case 20:return 25;case 21:this.begin("md_string");break;case 22:return"MD_STR";case 23:this.popState();break;case 24:this.begin("string");break;case 25:this.popState();break;case 26:return"STR";case 27:this.begin("class_name");break;case 28:return this.popState(),47;case 29:return this.begin("point_start"),44;case 30:return this.begin("point_x"),45;case 31:this.popState();break;case 32:this.popState(),this.begin("point_y");break;case 33:return this.popState(),46;case 34:return 28;case 35:return 4;case 36:return 11;case 37:return 64;case 38:return 10;case 39:return 65;case 40:return 65;case 41:return 14;case 42:return 13;case 43:return 67;case 44:return 66;case 45:return 12;case 46:return 8;case 47:return 5;case 48:return 18;case 49:return 56;case 50:return 63;case 51:return 57}},"anonymous"),rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:title\b)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?: *x-axis *)/i,/^(?: *y-axis *)/i,/^(?: *--+> *)/i,/^(?: *quadrant-1 *)/i,/^(?: *quadrant-2 *)/i,/^(?: *quadrant-3 *)/i,/^(?: *quadrant-4 *)/i,/^(?:classDef\b)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?::::)/i,/^(?:^\w+)/i,/^(?:\s*:\s*\[\s*)/i,/^(?:(1)|(0(.\d+)?))/i,/^(?:\s*\] *)/i,/^(?:\s*,\s*)/i,/^(?:(1)|(0(.\d+)?))/i,/^(?: *quadrantChart *)/i,/^(?:[A-Za-z]+)/i,/^(?::)/i,/^(?:\+)/i,/^(?:,)/i,/^(?:=)/i,/^(?:=)/i,/^(?:\*)/i,/^(?:#)/i,/^(?:[\_])/i,/^(?:\.)/i,/^(?:&)/i,/^(?:-)/i,/^(?:[0-9]+)/i,/^(?:\s)/i,/^(?:;)/i,/^(?:[!"#$%&'*+,-.`?\\_/])/i,/^(?:$)/i],conditions:{class_name:{rules:[28],inclusive:!1},point_y:{rules:[33],inclusive:!1},point_x:{rules:[32],inclusive:!1},point_start:{rules:[30,31],inclusive:!1},acc_descr_multiline:{rules:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},title:{rules:[5],inclusive:!1},md_string:{rules:[22,23],inclusive:!1},string:{rules:[25,26],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,6,8,10,13,14,15,16,17,18,19,20,21,24,27,29,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51],inclusive:!0}}};return j}();vt.lexer=Te;function qt(){this.yy={}}return o(qt,"Parser"),qt.prototype=vt,vt.Parser=qt,new qt}();Vt.parser=Vt;var De=Vt,V=_e(),ht,ze=(ht=class{constructor(){this.classes=new Map,this.config=this.getDefaultConfig(),this.themeConfig=this.getDefaultThemeConfig(),this.data=this.getDefaultData()}getDefaultData(){return{titleText:"",quadrant1Text:"",quadrant2Text:"",quadrant3Text:"",quadrant4Text:"",xAxisLeftText:"",xAxisRightText:"",yAxisBottomText:"",yAxisTopText:"",points:[]}}getDefaultConfig(){var n,u,c,h,p,y,S,a,A,d,T,q,m,b,x,O,Y,G;return{showXAxis:!0,showYAxis:!0,showTitle:!0,chartHeight:((n=D.quadrantChart)==null?void 0:n.chartWidth)||500,chartWidth:((u=D.quadrantChart)==null?void 0:u.chartHeight)||500,titlePadding:((c=D.quadrantChart)==null?void 0:c.titlePadding)||10,titleFontSize:((h=D.quadrantChart)==null?void 0:h.titleFontSize)||20,quadrantPadding:((p=D.quadrantChart)==null?void 0:p.quadrantPadding)||5,xAxisLabelPadding:((y=D.quadrantChart)==null?void 0:y.xAxisLabelPadding)||5,yAxisLabelPadding:((S=D.quadrantChart)==null?void 0:S.yAxisLabelPadding)||5,xAxisLabelFontSize:((a=D.quadrantChart)==null?void 0:a.xAxisLabelFontSize)||16,yAxisLabelFontSize:((A=D.quadrantChart)==null?void 0:A.yAxisLabelFontSize)||16,quadrantLabelFontSize:((d=D.quadrantChart)==null?void 0:d.quadrantLabelFontSize)||16,quadrantTextTopPadding:((T=D.quadrantChart)==null?void 0:T.quadrantTextTopPadding)||5,pointTextPadding:((q=D.quadrantChart)==null?void 0:q.pointTextPadding)||5,pointLabelFontSize:((m=D.quadrantChart)==null?void 0:m.pointLabelFontSize)||12,pointRadius:((b=D.quadrantChart)==null?void 0:b.pointRadius)||5,xAxisPosition:((x=D.quadrantChart)==null?void 0:x.xAxisPosition)||"top",yAxisPosition:((O=D.quadrantChart)==null?void 0:O.yAxisPosition)||"left",quadrantInternalBorderStrokeWidth:((Y=D.quadrantChart)==null?void 0:Y.quadrantInternalBorderStrokeWidth)||1,quadrantExternalBorderStrokeWidth:((G=D.quadrantChart)==null?void 0:G.quadrantExternalBorderStrokeWidth)||2}}getDefaultThemeConfig(){return{quadrant1Fill:V.quadrant1Fill,quadrant2Fill:V.quadrant2Fill,quadrant3Fill:V.quadrant3Fill,quadrant4Fill:V.quadrant4Fill,quadrant1TextFill:V.quadrant1TextFill,quadrant2TextFill:V.quadrant2TextFill,quadrant3TextFill:V.quadrant3TextFill,quadrant4TextFill:V.quadrant4TextFill,quadrantPointFill:V.quadrantPointFill,quadrantPointTextFill:V.quadrantPointTextFill,quadrantXAxisTextFill:V.quadrantXAxisTextFill,quadrantYAxisTextFill:V.quadrantYAxisTextFill,quadrantTitleFill:V.quadrantTitleFill,quadrantInternalBorderStrokeFill:V.quadrantInternalBorderStrokeFill,quadrantExternalBorderStrokeFill:V.quadrantExternalBorderStrokeFill}}clear(){this.config=this.getDefaultConfig(),this.themeConfig=this.getDefaultThemeConfig(),this.data=this.getDefaultData(),this.classes=new Map,At.info("clear called")}setData(n){this.data={...this.data,...n}}addPoints(n){this.data.points=[...n,...this.data.points]}addClass(n,u){this.classes.set(n,u)}setConfig(n){At.trace("setConfig called with: ",n),this.config={...this.config,...n}}setThemeConfig(n){At.trace("setThemeConfig called with: ",n),this.themeConfig={...this.themeConfig,...n}}calculateSpace(n,u,c,h){const p=this.config.xAxisLabelPadding*2+this.config.xAxisLabelFontSize,y={top:n==="top"&&u?p:0,bottom:n==="bottom"&&u?p:0},S=this.config.yAxisLabelPadding*2+this.config.yAxisLabelFontSize,a={left:this.config.yAxisPosition==="left"&&c?S:0,right:this.config.yAxisPosition==="right"&&c?S:0},A=this.config.titleFontSize+this.config.titlePadding*2,d={top:h?A:0},T=this.config.quadrantPadding+a.left,q=this.config.quadrantPadding+y.top+d.top,m=this.config.chartWidth-this.config.quadrantPadding*2-a.left-a.right,b=this.config.chartHeight-this.config.quadrantPadding*2-y.top-y.bottom-d.top,x=m/2,O=b/2;return{xAxisSpace:y,yAxisSpace:a,titleSpace:d,quadrantSpace:{quadrantLeft:T,quadrantTop:q,quadrantWidth:m,quadrantHalfWidth:x,quadrantHeight:b,quadrantHalfHeight:O}}}getAxisLabels(n,u,c,h){const{quadrantSpace:p,titleSpace:y}=h,{quadrantHalfHeight:S,quadrantHeight:a,quadrantLeft:A,quadrantHalfWidth:d,quadrantTop:T,quadrantWidth:q}=p,m=!!this.data.xAxisRightText,b=!!this.data.yAxisTopText,x=[];return this.data.xAxisLeftText&&u&&x.push({text:this.data.xAxisLeftText,fill:this.themeConfig.quadrantXAxisTextFill,x:A+(m?d/2:0),y:n==="top"?this.config.xAxisLabelPadding+y.top:this.config.xAxisLabelPadding+T+a+this.config.quadrantPadding,fontSize:this.config.xAxisLabelFontSize,verticalPos:m?"center":"left",horizontalPos:"top",rotation:0}),this.data.xAxisRightText&&u&&x.push({text:this.data.xAxisRightText,fill:this.themeConfig.quadrantXAxisTextFill,x:A+d+(m?d/2:0),y:n==="top"?this.config.xAxisLabelPadding+y.top:this.config.xAxisLabelPadding+T+a+this.config.quadrantPadding,fontSize:this.config.xAxisLabelFontSize,verticalPos:m?"center":"left",horizontalPos:"top",rotation:0}),this.data.yAxisBottomText&&c&&x.push({text:this.data.yAxisBottomText,fill:this.themeConfig.quadrantYAxisTextFill,x:this.config.yAxisPosition==="left"?this.config.yAxisLabelPadding:this.config.yAxisLabelPadding+A+q+this.config.quadrantPadding,y:T+a-(b?S/2:0),fontSize:this.config.yAxisLabelFontSize,verticalPos:b?"center":"left",horizontalPos:"top",rotation:-90}),this.data.yAxisTopText&&c&&x.push({text:this.data.yAxisTopText,fill:this.themeConfig.quadrantYAxisTextFill,x:this.config.yAxisPosition==="left"?this.config.yAxisLabelPadding:this.config.yAxisLabelPadding+A+q+this.config.quadrantPadding,y:T+S-(b?S/2:0),fontSize:this.config.yAxisLabelFontSize,verticalPos:b?"center":"left",horizontalPos:"top",rotation:-90}),x}getQuadrants(n){const{quadrantSpace:u}=n,{quadrantHalfHeight:c,quadrantLeft:h,quadrantHalfWidth:p,quadrantTop:y}=u,S=[{text:{text:this.data.quadrant1Text,fill:this.themeConfig.quadrant1TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:h+p,y,width:p,height:c,fill:this.themeConfig.quadrant1Fill},{text:{text:this.data.quadrant2Text,fill:this.themeConfig.quadrant2TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:h,y,width:p,height:c,fill:this.themeConfig.quadrant2Fill},{text:{text:this.data.quadrant3Text,fill:this.themeConfig.quadrant3TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:h,y:y+c,width:p,height:c,fill:this.themeConfig.quadrant3Fill},{text:{text:this.data.quadrant4Text,fill:this.themeConfig.quadrant4TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:h+p,y:y+c,width:p,height:c,fill:this.themeConfig.quadrant4Fill}];for(const a of S)a.text.x=a.x+a.width/2,this.data.points.length===0?(a.text.y=a.y+a.height/2,a.text.horizontalPos="middle"):(a.text.y=a.y+this.config.quadrantTextTopPadding,a.text.horizontalPos="top");return S}getQuadrantPoints(n){const{quadrantSpace:u}=n,{quadrantHeight:c,quadrantLeft:h,quadrantTop:p,quadrantWidth:y}=u,S=ee().domain([0,1]).range([h,y+h]),a=ee().domain([0,1]).range([c+p,p]);return this.data.points.map(d=>{const T=this.classes.get(d.className);return T&&(d={...T,...d}),{x:S(d.x),y:a(d.y),fill:d.color??this.themeConfig.quadrantPointFill,radius:d.radius??this.config.pointRadius,text:{text:d.text,fill:this.themeConfig.quadrantPointTextFill,x:S(d.x),y:a(d.y)+this.config.pointTextPadding,verticalPos:"center",horizontalPos:"top",fontSize:this.config.pointLabelFontSize,rotation:0},strokeColor:d.strokeColor??this.themeConfig.quadrantPointFill,strokeWidth:d.strokeWidth??"0px"}})}getBorders(n){const u=this.config.quadrantExternalBorderStrokeWidth/2,{quadrantSpace:c}=n,{quadrantHalfHeight:h,quadrantHeight:p,quadrantLeft:y,quadrantHalfWidth:S,quadrantTop:a,quadrantWidth:A}=c;return[{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:y-u,y1:a,x2:y+A+u,y2:a},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:y+A,y1:a+u,x2:y+A,y2:a+p-u},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:y-u,y1:a+p,x2:y+A+u,y2:a+p},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:y,y1:a+u,x2:y,y2:a+p-u},{strokeFill:this.themeConfig.quadrantInternalBorderStrokeFill,strokeWidth:this.config.quadrantInternalBorderStrokeWidth,x1:y+S,y1:a+u,x2:y+S,y2:a+p-u},{strokeFill:this.themeConfig.quadrantInternalBorderStrokeFill,strokeWidth:this.config.quadrantInternalBorderStrokeWidth,x1:y+u,y1:a+h,x2:y+A-u,y2:a+h}]}getTitle(n){if(n)return{text:this.data.titleText,fill:this.themeConfig.quadrantTitleFill,fontSize:this.config.titleFontSize,horizontalPos:"top",verticalPos:"center",rotation:0,y:this.config.titlePadding,x:this.config.chartWidth/2}}build(){const n=this.config.showXAxis&&!!(this.data.xAxisLeftText||this.data.xAxisRightText),u=this.config.showYAxis&&!!(this.data.yAxisTopText||this.data.yAxisBottomText),c=this.config.showTitle&&!!this.data.titleText,h=this.data.points.length>0?"bottom":this.config.xAxisPosition,p=this.calculateSpace(h,n,u,c);return{points:this.getQuadrantPoints(p),quadrants:this.getQuadrants(p),axisLabels:this.getAxisLabels(h,n,u,p),borderLines:this.getBorders(p),title:this.getTitle(c)}}},o(ht,"QuadrantBuilder"),ht),ct,_t=(ct=class extends Error{constructor(n,u,c){super(`value for ${n} ${u} is invalid, please use a valid ${c}`),this.name="InvalidStyleError"}},o(ct,"InvalidStyleError"),ct);function It(t){return!/^#?([\dA-Fa-f]{6}|[\dA-Fa-f]{3})$/.test(t)}o(It,"validateHexCode");function ae(t){return!/^\d+$/.test(t)}o(ae,"validateNumber");function ne(t){return!/^\d+px$/.test(t)}o(ne,"validateSizeInPixels");var Ve=wt();function Q(t){return Ae(t.trim(),Ve)}o(Q,"textSanitizer");var z=new ze;function se(t){z.setData({quadrant1Text:Q(t.text)})}o(se,"setQuadrant1Text");function re(t){z.setData({quadrant2Text:Q(t.text)})}o(re,"setQuadrant2Text");function oe(t){z.setData({quadrant3Text:Q(t.text)})}o(oe,"setQuadrant3Text");function le(t){z.setData({quadrant4Text:Q(t.text)})}o(le,"setQuadrant4Text");function he(t){z.setData({xAxisLeftText:Q(t.text)})}o(he,"setXAxisLeftText");function ce(t){z.setData({xAxisRightText:Q(t.text)})}o(ce,"setXAxisRightText");function de(t){z.setData({yAxisTopText:Q(t.text)})}o(de,"setYAxisTopText");function ue(t){z.setData({yAxisBottomText:Q(t.text)})}o(ue,"setYAxisBottomText");function kt(t){const n={};for(const u of t){const[c,h]=u.trim().split(/\s*:\s*/);if(c==="radius"){if(ae(h))throw new _t(c,h,"number");n.radius=parseInt(h)}else if(c==="color"){if(It(h))throw new _t(c,h,"hex code");n.color=h}else if(c==="stroke-color"){if(It(h))throw new _t(c,h,"hex code");n.strokeColor=h}else if(c==="stroke-width"){if(ne(h))throw new _t(c,h,"number of pixels (eg. 10px)");n.strokeWidth=h}else throw new Error(`style named ${c} is not supported.`)}return n}o(kt,"parseStyles");function xe(t,n,u,c,h){const p=kt(h);z.addPoints([{x:u,y:c,text:Q(t.text),className:n,...p}])}o(xe,"addPoint");function fe(t,n){z.addClass(t,kt(n))}o(fe,"addClass");function ge(t){z.setConfig({chartWidth:t})}o(ge,"setWidth");function pe(t){z.setConfig({chartHeight:t})}o(pe,"setHeight");function ye(){const t=wt(),{themeVariables:n,quadrantChart:u}=t;return u&&z.setConfig(u),z.setThemeConfig({quadrant1Fill:n.quadrant1Fill,quadrant2Fill:n.quadrant2Fill,quadrant3Fill:n.quadrant3Fill,quadrant4Fill:n.quadrant4Fill,quadrant1TextFill:n.quadrant1TextFill,quadrant2TextFill:n.quadrant2TextFill,quadrant3TextFill:n.quadrant3TextFill,quadrant4TextFill:n.quadrant4TextFill,quadrantPointFill:n.quadrantPointFill,quadrantPointTextFill:n.quadrantPointTextFill,quadrantXAxisTextFill:n.quadrantXAxisTextFill,quadrantYAxisTextFill:n.quadrantYAxisTextFill,quadrantExternalBorderStrokeFill:n.quadrantExternalBorderStrokeFill,quadrantInternalBorderStrokeFill:n.quadrantInternalBorderStrokeFill,quadrantTitleFill:n.quadrantTitleFill}),z.setData({titleText:ie()}),z.build()}o(ye,"getQuadrantData");var Ie=o(function(){z.clear(),Le()},"clear"),we={setWidth:ge,setHeight:pe,setQuadrant1Text:se,setQuadrant2Text:re,setQuadrant3Text:oe,setQuadrant4Text:le,setXAxisLeftText:he,setXAxisRightText:ce,setYAxisTopText:de,setYAxisBottomText:ue,parseStyles:kt,addPoint:xe,addClass:fe,getQuadrantData:ye,clear:Ie,setAccTitle:ke,getAccTitle:Fe,setDiagramTitle:Pe,getDiagramTitle:ie,getAccDescription:ve,setAccDescription:Ce},Be=o((t,n,u,c)=>{var xt,ft,gt;function h(i){return i==="top"?"hanging":"middle"}o(h,"getDominantBaseLine");function p(i){return i==="left"?"start":"middle"}o(p,"getTextAnchor");function y(i){return`translate(${i.x}, ${i.y}) rotate(${i.rotation||0})`}o(y,"getTransformation");const S=wt();At.debug(`Rendering quadrant chart +`+t);const a=S.securityLevel;let A;a==="sandbox"&&(A=zt("#i"+n));const T=(a==="sandbox"?zt(A.nodes()[0].contentDocument.body):zt("body")).select(`[id="${n}"]`),q=T.append("g").attr("class","main"),m=((xt=S.quadrantChart)==null?void 0:xt.chartWidth)??500,b=((ft=S.quadrantChart)==null?void 0:ft.chartHeight)??500;Ee(T,b,m,((gt=S.quadrantChart)==null?void 0:gt.useMaxWidth)??!0),T.attr("viewBox","0 0 "+m+" "+b),c.db.setHeight(b),c.db.setWidth(m);const x=c.db.getQuadrantData(),O=q.append("g").attr("class","quadrants"),Y=q.append("g").attr("class","border"),G=q.append("g").attr("class","data-points"),yt=q.append("g").attr("class","labels"),Tt=q.append("g").attr("class","title");x.title&&Tt.append("text").attr("x",0).attr("y",0).attr("fill",x.title.fill).attr("font-size",x.title.fontSize).attr("dominant-baseline",h(x.title.horizontalPos)).attr("text-anchor",p(x.title.verticalPos)).attr("transform",y(x.title)).text(x.title.text),x.borderLines&&Y.selectAll("line").data(x.borderLines).enter().append("line").attr("x1",i=>i.x1).attr("y1",i=>i.y1).attr("x2",i=>i.x2).attr("y2",i=>i.y2).style("stroke",i=>i.strokeFill).style("stroke-width",i=>i.strokeWidth);const dt=O.selectAll("g.quadrant").data(x.quadrants).enter().append("g").attr("class","quadrant");dt.append("rect").attr("x",i=>i.x).attr("y",i=>i.y).attr("width",i=>i.width).attr("height",i=>i.height).attr("fill",i=>i.fill),dt.append("text").attr("x",0).attr("y",0).attr("fill",i=>i.text.fill).attr("font-size",i=>i.text.fontSize).attr("dominant-baseline",i=>h(i.text.horizontalPos)).attr("text-anchor",i=>p(i.text.verticalPos)).attr("transform",i=>y(i.text)).text(i=>i.text.text),yt.selectAll("g.label").data(x.axisLabels).enter().append("g").attr("class","label").append("text").attr("x",0).attr("y",0).text(i=>i.text).attr("fill",i=>i.fill).attr("font-size",i=>i.fontSize).attr("dominant-baseline",i=>h(i.horizontalPos)).attr("text-anchor",i=>p(i.verticalPos)).attr("transform",i=>y(i));const ut=G.selectAll("g.data-point").data(x.points).enter().append("g").attr("class","data-point");ut.append("circle").attr("cx",i=>i.x).attr("cy",i=>i.y).attr("r",i=>i.radius).attr("fill",i=>i.fill).attr("stroke",i=>i.strokeColor).attr("stroke-width",i=>i.strokeWidth),ut.append("text").attr("x",0).attr("y",0).text(i=>i.text.text).attr("fill",i=>i.text.fill).attr("font-size",i=>i.text.fontSize).attr("dominant-baseline",i=>h(i.text.horizontalPos)).attr("text-anchor",i=>p(i.text.verticalPos)).attr("transform",i=>y(i.text))},"draw"),Re={draw:Be},He={parser:De,db:we,renderer:Re,styles:o(()=>"","styles")};export{He as diagram}; diff --git a/assets/chunks/requirementDiagram-XAUNFCZY.DQkbBFDI.js b/assets/chunks/requirementDiagram-XAUNFCZY.DQkbBFDI.js new file mode 100644 index 000000000..eebeff9b0 --- /dev/null +++ b/assets/chunks/requirementDiagram-XAUNFCZY.DQkbBFDI.js @@ -0,0 +1,52 @@ +import{_ as r,d as ve,s as Fe,g as De,c as Pe,b as Ye,l as xe,x as Ue,j as ce,k as Be,a1 as Qe,e as Te}from"../app.D0Wo8w0i.js";import{G as He}from"./graph.Bl1hHz-h.js";import{l as We}from"./layout.BQOWCxFK.js";import"./framework.B1keMFNq.js";import"./theme.8WvZWF-M.js";import"./baseUniq.DoVpE4hx.js";import"./basePickBy.BafM5tVf.js";var he=function(){var e=r(function($,i,a,l){for(a=a||{},l=$.length;l--;a[$[l]]=i);return a},"o"),t=[1,3],c=[1,4],d=[1,5],u=[1,6],p=[5,6,8,9,11,13,31,32,33,34,35,36,44,62,63],y=[1,18],h=[2,7],o=[1,22],g=[1,23],R=[1,24],I=[1,25],b=[1,26],w=[1,27],q=[1,20],v=[1,28],A=[1,29],F=[62,63],pe=[5,8,9,11,13,31,32,33,34,35,36,44,51,53,62,63],fe=[1,47],ye=[1,48],_e=[1,49],ge=[1,50],Ee=[1,51],Re=[1,52],me=[1,53],O=[53,54],D=[1,64],P=[1,60],Y=[1,61],U=[1,62],B=[1,63],Q=[1,65],j=[1,69],X=[1,70],J=[1,67],Z=[1,68],S=[5,8,9,11,13,31,32,33,34,35,36,44,62,63],ne={trace:r(function(){},"trace"),yy:{},symbols_:{error:2,start:3,directive:4,NEWLINE:5,RD:6,diagram:7,EOF:8,acc_title:9,acc_title_value:10,acc_descr:11,acc_descr_value:12,acc_descr_multiline_value:13,requirementDef:14,elementDef:15,relationshipDef:16,requirementType:17,requirementName:18,STRUCT_START:19,requirementBody:20,ID:21,COLONSEP:22,id:23,TEXT:24,text:25,RISK:26,riskLevel:27,VERIFYMTHD:28,verifyType:29,STRUCT_STOP:30,REQUIREMENT:31,FUNCTIONAL_REQUIREMENT:32,INTERFACE_REQUIREMENT:33,PERFORMANCE_REQUIREMENT:34,PHYSICAL_REQUIREMENT:35,DESIGN_CONSTRAINT:36,LOW_RISK:37,MED_RISK:38,HIGH_RISK:39,VERIFY_ANALYSIS:40,VERIFY_DEMONSTRATION:41,VERIFY_INSPECTION:42,VERIFY_TEST:43,ELEMENT:44,elementName:45,elementBody:46,TYPE:47,type:48,DOCREF:49,ref:50,END_ARROW_L:51,relationship:52,LINE:53,END_ARROW_R:54,CONTAINS:55,COPIES:56,DERIVES:57,SATISFIES:58,VERIFIES:59,REFINES:60,TRACES:61,unqString:62,qString:63,$accept:0,$end:1},terminals_:{2:"error",5:"NEWLINE",6:"RD",8:"EOF",9:"acc_title",10:"acc_title_value",11:"acc_descr",12:"acc_descr_value",13:"acc_descr_multiline_value",19:"STRUCT_START",21:"ID",22:"COLONSEP",24:"TEXT",26:"RISK",28:"VERIFYMTHD",30:"STRUCT_STOP",31:"REQUIREMENT",32:"FUNCTIONAL_REQUIREMENT",33:"INTERFACE_REQUIREMENT",34:"PERFORMANCE_REQUIREMENT",35:"PHYSICAL_REQUIREMENT",36:"DESIGN_CONSTRAINT",37:"LOW_RISK",38:"MED_RISK",39:"HIGH_RISK",40:"VERIFY_ANALYSIS",41:"VERIFY_DEMONSTRATION",42:"VERIFY_INSPECTION",43:"VERIFY_TEST",44:"ELEMENT",47:"TYPE",49:"DOCREF",51:"END_ARROW_L",53:"LINE",54:"END_ARROW_R",55:"CONTAINS",56:"COPIES",57:"DERIVES",58:"SATISFIES",59:"VERIFIES",60:"REFINES",61:"TRACES",62:"unqString",63:"qString"},productions_:[0,[3,3],[3,2],[3,4],[4,2],[4,2],[4,1],[7,0],[7,2],[7,2],[7,2],[7,2],[7,2],[14,5],[20,5],[20,5],[20,5],[20,5],[20,2],[20,1],[17,1],[17,1],[17,1],[17,1],[17,1],[17,1],[27,1],[27,1],[27,1],[29,1],[29,1],[29,1],[29,1],[15,5],[46,5],[46,5],[46,2],[46,1],[16,5],[16,5],[52,1],[52,1],[52,1],[52,1],[52,1],[52,1],[52,1],[18,1],[18,1],[23,1],[23,1],[25,1],[25,1],[45,1],[45,1],[48,1],[48,1],[50,1],[50,1]],performAction:r(function(i,a,l,n,f,s,K){var E=s.length-1;switch(f){case 4:this.$=s[E].trim(),n.setAccTitle(this.$);break;case 5:case 6:this.$=s[E].trim(),n.setAccDescription(this.$);break;case 7:this.$=[];break;case 13:n.addRequirement(s[E-3],s[E-4]);break;case 14:n.setNewReqId(s[E-2]);break;case 15:n.setNewReqText(s[E-2]);break;case 16:n.setNewReqRisk(s[E-2]);break;case 17:n.setNewReqVerifyMethod(s[E-2]);break;case 20:this.$=n.RequirementType.REQUIREMENT;break;case 21:this.$=n.RequirementType.FUNCTIONAL_REQUIREMENT;break;case 22:this.$=n.RequirementType.INTERFACE_REQUIREMENT;break;case 23:this.$=n.RequirementType.PERFORMANCE_REQUIREMENT;break;case 24:this.$=n.RequirementType.PHYSICAL_REQUIREMENT;break;case 25:this.$=n.RequirementType.DESIGN_CONSTRAINT;break;case 26:this.$=n.RiskLevel.LOW_RISK;break;case 27:this.$=n.RiskLevel.MED_RISK;break;case 28:this.$=n.RiskLevel.HIGH_RISK;break;case 29:this.$=n.VerifyType.VERIFY_ANALYSIS;break;case 30:this.$=n.VerifyType.VERIFY_DEMONSTRATION;break;case 31:this.$=n.VerifyType.VERIFY_INSPECTION;break;case 32:this.$=n.VerifyType.VERIFY_TEST;break;case 33:n.addElement(s[E-3]);break;case 34:n.setNewElementType(s[E-2]);break;case 35:n.setNewElementDocRef(s[E-2]);break;case 38:n.addRelationship(s[E-2],s[E],s[E-4]);break;case 39:n.addRelationship(s[E-2],s[E-4],s[E]);break;case 40:this.$=n.Relationships.CONTAINS;break;case 41:this.$=n.Relationships.COPIES;break;case 42:this.$=n.Relationships.DERIVES;break;case 43:this.$=n.Relationships.SATISFIES;break;case 44:this.$=n.Relationships.VERIFIES;break;case 45:this.$=n.Relationships.REFINES;break;case 46:this.$=n.Relationships.TRACES;break}},"anonymous"),table:[{3:1,4:2,6:t,9:c,11:d,13:u},{1:[3]},{3:8,4:2,5:[1,7],6:t,9:c,11:d,13:u},{5:[1,9]},{10:[1,10]},{12:[1,11]},e(p,[2,6]),{3:12,4:2,6:t,9:c,11:d,13:u},{1:[2,2]},{4:17,5:y,7:13,8:h,9:c,11:d,13:u,14:14,15:15,16:16,17:19,23:21,31:o,32:g,33:R,34:I,35:b,36:w,44:q,62:v,63:A},e(p,[2,4]),e(p,[2,5]),{1:[2,1]},{8:[1,30]},{4:17,5:y,7:31,8:h,9:c,11:d,13:u,14:14,15:15,16:16,17:19,23:21,31:o,32:g,33:R,34:I,35:b,36:w,44:q,62:v,63:A},{4:17,5:y,7:32,8:h,9:c,11:d,13:u,14:14,15:15,16:16,17:19,23:21,31:o,32:g,33:R,34:I,35:b,36:w,44:q,62:v,63:A},{4:17,5:y,7:33,8:h,9:c,11:d,13:u,14:14,15:15,16:16,17:19,23:21,31:o,32:g,33:R,34:I,35:b,36:w,44:q,62:v,63:A},{4:17,5:y,7:34,8:h,9:c,11:d,13:u,14:14,15:15,16:16,17:19,23:21,31:o,32:g,33:R,34:I,35:b,36:w,44:q,62:v,63:A},{4:17,5:y,7:35,8:h,9:c,11:d,13:u,14:14,15:15,16:16,17:19,23:21,31:o,32:g,33:R,34:I,35:b,36:w,44:q,62:v,63:A},{18:36,62:[1,37],63:[1,38]},{45:39,62:[1,40],63:[1,41]},{51:[1,42],53:[1,43]},e(F,[2,20]),e(F,[2,21]),e(F,[2,22]),e(F,[2,23]),e(F,[2,24]),e(F,[2,25]),e(pe,[2,49]),e(pe,[2,50]),{1:[2,3]},{8:[2,8]},{8:[2,9]},{8:[2,10]},{8:[2,11]},{8:[2,12]},{19:[1,44]},{19:[2,47]},{19:[2,48]},{19:[1,45]},{19:[2,53]},{19:[2,54]},{52:46,55:fe,56:ye,57:_e,58:ge,59:Ee,60:Re,61:me},{52:54,55:fe,56:ye,57:_e,58:ge,59:Ee,60:Re,61:me},{5:[1,55]},{5:[1,56]},{53:[1,57]},e(O,[2,40]),e(O,[2,41]),e(O,[2,42]),e(O,[2,43]),e(O,[2,44]),e(O,[2,45]),e(O,[2,46]),{54:[1,58]},{5:D,20:59,21:P,24:Y,26:U,28:B,30:Q},{5:j,30:X,46:66,47:J,49:Z},{23:71,62:v,63:A},{23:72,62:v,63:A},e(S,[2,13]),{22:[1,73]},{22:[1,74]},{22:[1,75]},{22:[1,76]},{5:D,20:77,21:P,24:Y,26:U,28:B,30:Q},e(S,[2,19]),e(S,[2,33]),{22:[1,78]},{22:[1,79]},{5:j,30:X,46:80,47:J,49:Z},e(S,[2,37]),e(S,[2,38]),e(S,[2,39]),{23:81,62:v,63:A},{25:82,62:[1,83],63:[1,84]},{27:85,37:[1,86],38:[1,87],39:[1,88]},{29:89,40:[1,90],41:[1,91],42:[1,92],43:[1,93]},e(S,[2,18]),{48:94,62:[1,95],63:[1,96]},{50:97,62:[1,98],63:[1,99]},e(S,[2,36]),{5:[1,100]},{5:[1,101]},{5:[2,51]},{5:[2,52]},{5:[1,102]},{5:[2,26]},{5:[2,27]},{5:[2,28]},{5:[1,103]},{5:[2,29]},{5:[2,30]},{5:[2,31]},{5:[2,32]},{5:[1,104]},{5:[2,55]},{5:[2,56]},{5:[1,105]},{5:[2,57]},{5:[2,58]},{5:D,20:106,21:P,24:Y,26:U,28:B,30:Q},{5:D,20:107,21:P,24:Y,26:U,28:B,30:Q},{5:D,20:108,21:P,24:Y,26:U,28:B,30:Q},{5:D,20:109,21:P,24:Y,26:U,28:B,30:Q},{5:j,30:X,46:110,47:J,49:Z},{5:j,30:X,46:111,47:J,49:Z},e(S,[2,14]),e(S,[2,15]),e(S,[2,16]),e(S,[2,17]),e(S,[2,34]),e(S,[2,35])],defaultActions:{8:[2,2],12:[2,1],30:[2,3],31:[2,8],32:[2,9],33:[2,10],34:[2,11],35:[2,12],37:[2,47],38:[2,48],40:[2,53],41:[2,54],83:[2,51],84:[2,52],86:[2,26],87:[2,27],88:[2,28],90:[2,29],91:[2,30],92:[2,31],93:[2,32],95:[2,55],96:[2,56],98:[2,57],99:[2,58]},parseError:r(function(i,a){if(a.recoverable)this.trace(i);else{var l=new Error(i);throw l.hash=a,l}},"parseError"),parse:r(function(i){var a=this,l=[0],n=[],f=[null],s=[],K=this.table,E="",te=0,Ie=0,Le=2,be=1,Oe=s.slice.call(arguments,1),m=Object.create(this.lexer),C={yy:{}};for(var se in this.yy)Object.prototype.hasOwnProperty.call(this.yy,se)&&(C.yy[se]=this.yy[se]);m.setInput(i,C.yy),C.yy.lexer=m,C.yy.parser=this,typeof m.yylloc>"u"&&(m.yylloc={});var ae=m.yylloc;s.push(ae);var Ce=m.options&&m.options.ranges;typeof C.yy.parseError=="function"?this.parseError=C.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Me(N){l.length=l.length-2*N,f.length=f.length-N,s.length=s.length-N}r(Me,"popStack");function Se(){var N;return N=n.pop()||m.lex()||be,typeof N!="number"&&(N instanceof Array&&(n=N,N=n.pop()),N=a.symbols_[N]||N),N}r(Se,"lex");for(var k,M,x,le,H={},ie,V,ke,re;;){if(M=l[l.length-1],this.defaultActions[M]?x=this.defaultActions[M]:((k===null||typeof k>"u")&&(k=Se()),x=K[M]&&K[M][k]),typeof x>"u"||!x.length||!x[0]){var oe="";re=[];for(ie in K[M])this.terminals_[ie]&&ie>Le&&re.push("'"+this.terminals_[ie]+"'");m.showPosition?oe="Parse error on line "+(te+1)+`: +`+m.showPosition()+` +Expecting `+re.join(", ")+", got '"+(this.terminals_[k]||k)+"'":oe="Parse error on line "+(te+1)+": Unexpected "+(k==be?"end of input":"'"+(this.terminals_[k]||k)+"'"),this.parseError(oe,{text:m.match,token:this.terminals_[k]||k,line:m.yylineno,loc:ae,expected:re})}if(x[0]instanceof Array&&x.length>1)throw new Error("Parse Error: multiple actions possible at state: "+M+", token: "+k);switch(x[0]){case 1:l.push(k),f.push(m.yytext),s.push(m.yylloc),l.push(x[1]),k=null,Ie=m.yyleng,E=m.yytext,te=m.yylineno,ae=m.yylloc;break;case 2:if(V=this.productions_[x[1]][1],H.$=f[f.length-V],H._$={first_line:s[s.length-(V||1)].first_line,last_line:s[s.length-1].last_line,first_column:s[s.length-(V||1)].first_column,last_column:s[s.length-1].last_column},Ce&&(H._$.range=[s[s.length-(V||1)].range[0],s[s.length-1].range[1]]),le=this.performAction.apply(H,[E,Ie,te,C.yy,x[1],f,s].concat(Oe)),typeof le<"u")return le;V&&(l=l.slice(0,-1*V*2),f=f.slice(0,-1*V),s=s.slice(0,-1*V)),l.push(this.productions_[x[1]][0]),f.push(H.$),s.push(H._$),ke=K[l[l.length-2]][l[l.length-1]],l.push(ke);break;case 3:return!0}}return!0},"parse")},$e=function(){var $={EOF:1,parseError:r(function(a,l){if(this.yy.parser)this.yy.parser.parseError(a,l);else throw new Error(a)},"parseError"),setInput:r(function(i,a){return this.yy=a||this.yy||{},this._input=i,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:r(function(){var i=this._input[0];this.yytext+=i,this.yyleng++,this.offset++,this.match+=i,this.matched+=i;var a=i.match(/(?:\r\n?|\n).*/g);return a?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),i},"input"),unput:r(function(i){var a=i.length,l=i.split(/(?:\r\n?|\n)/g);this._input=i+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-a),this.offset-=a;var n=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),l.length-1&&(this.yylineno-=l.length-1);var f=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:l?(l.length===n.length?this.yylloc.first_column:0)+n[n.length-l.length].length-l[0].length:this.yylloc.first_column-a},this.options.ranges&&(this.yylloc.range=[f[0],f[0]+this.yyleng-a]),this.yyleng=this.yytext.length,this},"unput"),more:r(function(){return this._more=!0,this},"more"),reject:r(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:r(function(i){this.unput(this.match.slice(i))},"less"),pastInput:r(function(){var i=this.matched.substr(0,this.matched.length-this.match.length);return(i.length>20?"...":"")+i.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:r(function(){var i=this.match;return i.length<20&&(i+=this._input.substr(0,20-i.length)),(i.substr(0,20)+(i.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:r(function(){var i=this.pastInput(),a=new Array(i.length+1).join("-");return i+this.upcomingInput()+` +`+a+"^"},"showPosition"),test_match:r(function(i,a){var l,n,f;if(this.options.backtrack_lexer&&(f={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(f.yylloc.range=this.yylloc.range.slice(0))),n=i[0].match(/(?:\r\n?|\n).*/g),n&&(this.yylineno+=n.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:n?n[n.length-1].length-n[n.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+i[0].length},this.yytext+=i[0],this.match+=i[0],this.matches=i,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(i[0].length),this.matched+=i[0],l=this.performAction.call(this,this.yy,this,a,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),l)return l;if(this._backtrack){for(var s in f)this[s]=f[s];return!1}return!1},"test_match"),next:r(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var i,a,l,n;this._more||(this.yytext="",this.match="");for(var f=this._currentRules(),s=0;sa[0].length)){if(a=l,n=s,this.options.backtrack_lexer){if(i=this.test_match(l,f[s]),i!==!1)return i;if(this._backtrack){a=!1;continue}else return!1}else if(!this.options.flex)break}return a?(i=this.test_match(a,f[n]),i!==!1?i:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:r(function(){var a=this.next();return a||this.lex()},"lex"),begin:r(function(a){this.conditionStack.push(a)},"begin"),popState:r(function(){var a=this.conditionStack.length-1;return a>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:r(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:r(function(a){return a=this.conditionStack.length-1-Math.abs(a||0),a>=0?this.conditionStack[a]:"INITIAL"},"topState"),pushState:r(function(a){this.begin(a)},"pushState"),stateStackSize:r(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:r(function(a,l,n,f){switch(n){case 0:return"title";case 1:return this.begin("acc_title"),9;case 2:return this.popState(),"acc_title_value";case 3:return this.begin("acc_descr"),11;case 4:return this.popState(),"acc_descr_value";case 5:this.begin("acc_descr_multiline");break;case 6:this.popState();break;case 7:return"acc_descr_multiline_value";case 8:return 5;case 9:break;case 10:break;case 11:break;case 12:return 8;case 13:return 6;case 14:return 19;case 15:return 30;case 16:return 22;case 17:return 21;case 18:return 24;case 19:return 26;case 20:return 28;case 21:return 31;case 22:return 32;case 23:return 33;case 24:return 34;case 25:return 35;case 26:return 36;case 27:return 37;case 28:return 38;case 29:return 39;case 30:return 40;case 31:return 41;case 32:return 42;case 33:return 43;case 34:return 44;case 35:return 55;case 36:return 56;case 37:return 57;case 38:return 58;case 39:return 59;case 40:return 60;case 41:return 61;case 42:return 47;case 43:return 49;case 44:return 51;case 45:return 54;case 46:return 53;case 47:this.begin("string");break;case 48:this.popState();break;case 49:return"qString";case 50:return l.yytext=l.yytext.trim(),62}},"anonymous"),rules:[/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:(\r?\n)+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:$)/i,/^(?:requirementDiagram\b)/i,/^(?:\{)/i,/^(?:\})/i,/^(?::)/i,/^(?:id\b)/i,/^(?:text\b)/i,/^(?:risk\b)/i,/^(?:verifyMethod\b)/i,/^(?:requirement\b)/i,/^(?:functionalRequirement\b)/i,/^(?:interfaceRequirement\b)/i,/^(?:performanceRequirement\b)/i,/^(?:physicalRequirement\b)/i,/^(?:designConstraint\b)/i,/^(?:low\b)/i,/^(?:medium\b)/i,/^(?:high\b)/i,/^(?:analysis\b)/i,/^(?:demonstration\b)/i,/^(?:inspection\b)/i,/^(?:test\b)/i,/^(?:element\b)/i,/^(?:contains\b)/i,/^(?:copies\b)/i,/^(?:derives\b)/i,/^(?:satisfies\b)/i,/^(?:verifies\b)/i,/^(?:refines\b)/i,/^(?:traces\b)/i,/^(?:type\b)/i,/^(?:docref\b)/i,/^(?:<-)/i,/^(?:->)/i,/^(?:-)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[\w][^\r\n\{\<\>\-\=]*)/i],conditions:{acc_descr_multiline:{rules:[6,7],inclusive:!1},acc_descr:{rules:[4],inclusive:!1},acc_title:{rules:[2],inclusive:!1},unqString:{rules:[],inclusive:!1},token:{rules:[],inclusive:!1},string:{rules:[48,49],inclusive:!1},INITIAL:{rules:[0,1,3,5,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,50],inclusive:!0}}};return $}();ne.lexer=$e;function ee(){this.yy={}}return r(ee,"Parser"),ee.prototype=ne,ne.Parser=ee,new ee}();he.parser=he;var Ke=he,de=[],T={},G=new Map,L={},z=new Map,Ge={REQUIREMENT:"Requirement",FUNCTIONAL_REQUIREMENT:"Functional Requirement",INTERFACE_REQUIREMENT:"Interface Requirement",PERFORMANCE_REQUIREMENT:"Performance Requirement",PHYSICAL_REQUIREMENT:"Physical Requirement",DESIGN_CONSTRAINT:"Design Constraint"},ze={LOW_RISK:"Low",MED_RISK:"Medium",HIGH_RISK:"High"},je={VERIFY_ANALYSIS:"Analysis",VERIFY_DEMONSTRATION:"Demonstration",VERIFY_INSPECTION:"Inspection",VERIFY_TEST:"Test"},Xe={CONTAINS:"contains",COPIES:"copies",DERIVES:"derives",SATISFIES:"satisfies",VERIFIES:"verifies",REFINES:"refines",TRACES:"traces"},Je=r((e,t)=>(G.has(e)||G.set(e,{name:e,type:t,id:T.id,text:T.text,risk:T.risk,verifyMethod:T.verifyMethod}),T={},G.get(e)),"addRequirement"),Ze=r(()=>G,"getRequirements"),et=r(e=>{T!==void 0&&(T.id=e)},"setNewReqId"),tt=r(e=>{T!==void 0&&(T.text=e)},"setNewReqText"),it=r(e=>{T!==void 0&&(T.risk=e)},"setNewReqRisk"),rt=r(e=>{T!==void 0&&(T.verifyMethod=e)},"setNewReqVerifyMethod"),nt=r(e=>(z.has(e)||(z.set(e,{name:e,type:L.type,docRef:L.docRef}),xe.info("Added new requirement: ",e)),L={},z.get(e)),"addElement"),st=r(()=>z,"getElements"),at=r(e=>{L!==void 0&&(L.type=e)},"setNewElementType"),lt=r(e=>{L!==void 0&&(L.docRef=e)},"setNewElementDocRef"),ot=r((e,t,c)=>{de.push({type:e,src:t,dst:c})},"addRelationship"),ct=r(()=>de,"getRelationships"),ht=r(()=>{de=[],T={},G=new Map,L={},z=new Map,Ue()},"clear"),ut={RequirementType:Ge,RiskLevel:ze,VerifyType:je,Relationships:Xe,getConfig:r(()=>ve().req,"getConfig"),addRequirement:Je,getRequirements:Ze,setNewReqId:et,setNewReqText:tt,setNewReqRisk:it,setNewReqVerifyMethod:rt,setAccTitle:Fe,getAccTitle:De,setAccDescription:Pe,getAccDescription:Ye,addElement:nt,getElements:st,setNewElementType:at,setNewElementDocRef:lt,addRelationship:ot,getRelationships:ct,clear:ht},dt=r(e=>` + + marker { + fill: ${e.relationColor}; + stroke: ${e.relationColor}; + } + + marker.cross { + stroke: ${e.lineColor}; + } + + svg { + font-family: ${e.fontFamily}; + font-size: ${e.fontSize}; + } + + .reqBox { + fill: ${e.requirementBackground}; + fill-opacity: 1.0; + stroke: ${e.requirementBorderColor}; + stroke-width: ${e.requirementBorderSize}; + } + + .reqTitle, .reqLabel{ + fill: ${e.requirementTextColor}; + } + .reqLabelBox { + fill: ${e.relationLabelBackground}; + fill-opacity: 1.0; + } + + .req-title-line { + stroke: ${e.requirementBorderColor}; + stroke-width: ${e.requirementBorderSize}; + } + .relationshipLine { + stroke: ${e.relationColor}; + stroke-width: 1; + } + .relationshipLabel { + fill: ${e.relationLabelColor}; + } + +`,"getStyles"),pt=dt,ue={CONTAINS:"contains",ARROW:"arrow"},ft=r((e,t)=>{let c=e.append("defs").append("marker").attr("id",ue.CONTAINS+"_line_ending").attr("refX",0).attr("refY",t.line_height/2).attr("markerWidth",t.line_height).attr("markerHeight",t.line_height).attr("orient","auto").append("g");c.append("circle").attr("cx",t.line_height/2).attr("cy",t.line_height/2).attr("r",t.line_height/2).attr("fill","none"),c.append("line").attr("x1",0).attr("x2",t.line_height).attr("y1",t.line_height/2).attr("y2",t.line_height/2).attr("stroke-width",1),c.append("line").attr("y1",0).attr("y2",t.line_height).attr("x1",t.line_height/2).attr("x2",t.line_height/2).attr("stroke-width",1),e.append("defs").append("marker").attr("id",ue.ARROW+"_line_ending").attr("refX",t.line_height).attr("refY",.5*t.line_height).attr("markerWidth",t.line_height).attr("markerHeight",t.line_height).attr("orient","auto").append("path").attr("d",`M0,0 + L${t.line_height},${t.line_height/2} + M${t.line_height},${t.line_height/2} + L0,${t.line_height}`).attr("stroke-width",1)},"insertLineEndings"),we={ReqMarkers:ue,insertLineEndings:ft},_={},Ne=0,Ae=r((e,t)=>e.insert("rect","#"+t).attr("class","req reqBox").attr("x",0).attr("y",0).attr("width",_.rect_min_width+"px").attr("height",_.rect_min_height+"px"),"newRectNode"),qe=r((e,t,c)=>{let d=_.rect_min_width/2,u=e.append("text").attr("class","req reqLabel reqTitle").attr("id",t).attr("x",d).attr("y",_.rect_padding).attr("dominant-baseline","hanging"),p=0;c.forEach(g=>{p==0?u.append("tspan").attr("text-anchor","middle").attr("x",_.rect_min_width/2).attr("dy",0).text(g):u.append("tspan").attr("text-anchor","middle").attr("x",_.rect_min_width/2).attr("dy",_.line_height*.75).text(g),p++});let y=1.5*_.rect_padding,h=p*_.line_height*.75,o=y+h;return e.append("line").attr("class","req-title-line").attr("x1","0").attr("x2",_.rect_min_width).attr("y1",o).attr("y2",o),{titleNode:u,y:o}},"newTitleNode"),Ve=r((e,t,c,d)=>{let u=e.append("text").attr("class","req reqLabel").attr("id",t).attr("x",_.rect_padding).attr("y",d).attr("dominant-baseline","hanging"),p=0;const y=30;let h=[];return c.forEach(o=>{let g=o.length;for(;g>y&&p<3;){let R=o.substring(0,y);o=o.substring(y,o.length),g=o.length,h[h.length]=R,p++}if(p==3){let R=h[h.length-1];h[h.length-1]=R.substring(0,R.length-4)+"..."}else h[h.length]=o;p=0}),h.forEach(o=>{u.append("tspan").attr("x",_.rect_padding).attr("dy",_.line_height).text(o)}),u},"newBodyNode"),yt=r((e,t,c,d)=>{const u=t.node().getTotalLength(),p=t.node().getPointAtLength(u*.5),y="rel"+Ne;Ne++;const o=e.append("text").attr("class","req relationshipLabel").attr("id",y).attr("x",p.x).attr("y",p.y).attr("text-anchor","middle").attr("dominant-baseline","middle").text(d).node().getBBox();e.insert("rect","#"+y).attr("class","req reqLabelBox").attr("x",p.x-o.width/2).attr("y",p.y-o.height/2).attr("width",o.width).attr("height",o.height).attr("fill","white").attr("fill-opacity","85%")},"addEdgeLabel"),_t=r(function(e,t,c,d,u){const p=c.edge(W(t.src),W(t.dst)),y=Qe().x(function(o){return o.x}).y(function(o){return o.y}),h=e.insert("path","#"+d).attr("class","er relationshipLine").attr("d",y(p.points)).attr("fill","none");t.type==u.db.Relationships.CONTAINS?h.attr("marker-start","url("+Te.getUrl(_.arrowMarkerAbsolute)+"#"+t.type+"_line_ending)"):(h.attr("stroke-dasharray","10,7"),h.attr("marker-end","url("+Te.getUrl(_.arrowMarkerAbsolute)+"#"+we.ReqMarkers.ARROW+"_line_ending)")),yt(e,h,_,`<<${t.type}>>`)},"drawRelationshipFromLayout"),gt=r((e,t,c)=>{e.forEach((d,u)=>{u=W(u),xe.info("Added new requirement: ",u);const p=c.append("g").attr("id",u),y="req-"+u,h=Ae(p,y);let o=[],g=qe(p,u+"_title",[`<<${d.type}>>`,`${d.name}`]);o.push(g.titleNode);let R=Ve(p,u+"_body",[`Id: ${d.id}`,`Text: ${d.text}`,`Risk: ${d.risk}`,`Verification: ${d.verifyMethod}`],g.y);o.push(R);const I=h.node().getBBox();t.setNode(u,{width:I.width,height:I.height,shape:"rect",id:u})})},"drawReqs"),Et=r((e,t,c)=>{e.forEach((d,u)=>{const p=W(u),y=c.append("g").attr("id",p),h="element-"+p,o=Ae(y,h);let g=[],R=qe(y,h+"_title",["<>",`${u}`]);g.push(R.titleNode);let I=Ve(y,h+"_body",[`Type: ${d.type||"Not Specified"}`,`Doc Ref: ${d.docRef||"None"}`],R.y);g.push(I);const b=o.node().getBBox();t.setNode(p,{width:b.width,height:b.height,shape:"rect",id:p})})},"drawElements"),Rt=r((e,t)=>(e.forEach(function(c){let d=W(c.src),u=W(c.dst);t.setEdge(d,u,{relationship:c})}),e),"addRelationships"),mt=r(function(e,t){t.nodes().forEach(function(c){c!==void 0&&t.node(c)!==void 0&&(e.select("#"+c),e.select("#"+c).attr("transform","translate("+(t.node(c).x-t.node(c).width/2)+","+(t.node(c).y-t.node(c).height/2)+" )"))})},"adjustEntities"),W=r(e=>e.replace(/\s/g,"").replace(/\./g,"_"),"elementString"),It=r((e,t,c,d)=>{_=ve().requirement;const u=_.securityLevel;let p;u==="sandbox"&&(p=ce("#i"+t));const h=(u==="sandbox"?ce(p.nodes()[0].contentDocument.body):ce("body")).select(`[id='${t}']`);we.insertLineEndings(h,_);const o=new He({multigraph:!1,compound:!1,directed:!0}).setGraph({rankdir:_.layoutDirection,marginx:20,marginy:20,nodesep:100,edgesep:100,ranksep:100}).setDefaultEdgeLabel(function(){return{}});let g=d.db.getRequirements(),R=d.db.getElements(),I=d.db.getRelationships();gt(g,o,h),Et(R,o,h),Rt(I,o),We(o),mt(h,o),I.forEach(function(A){_t(h,A,o,t,d)});const b=_.rect_padding,w=h.node().getBBox(),q=w.width+b*2,v=w.height+b*2;Be(h,v,q,_.useMaxWidth),h.attr("viewBox",`${w.x-b} ${w.y-b} ${q} ${v}`)},"draw"),bt={draw:It},At={parser:Ke,db:ut,renderer:bt,styles:pt};export{At as diagram}; diff --git a/assets/chunks/sankeyDiagram-LVV36NHA.GcX7eeA_.js b/assets/chunks/sankeyDiagram-LVV36NHA.GcX7eeA_.js new file mode 100644 index 000000000..fa9cc788f --- /dev/null +++ b/assets/chunks/sankeyDiagram-LVV36NHA.GcX7eeA_.js @@ -0,0 +1,8 @@ +import{_ as m,d as lt,g as _t,s as xt,b as vt,c as bt,r as wt,q as St,x as Lt,e as Et,p as At,j as H,ac as Tt}from"../app.D0Wo8w0i.js";import{o as Mt}from"./ordinal.BYWQX77i.js";import"./framework.B1keMFNq.js";import"./theme.8WvZWF-M.js";import"./init.Gi6I4Gst.js";function Nt(t){for(var e=t.length/6|0,i=new Array(e),a=0;a=a)&&(i=a);else{let a=-1;for(let h of t)(h=e(h,++a,t))!=null&&(i=h)&&(i=h)}return i}function pt(t,e){let i;if(e===void 0)for(const a of t)a!=null&&(i>a||i===void 0&&a>=a)&&(i=a);else{let a=-1;for(let h of t)(h=e(h,++a,t))!=null&&(i>h||i===void 0&&h>=h)&&(i=h)}return i}function nt(t,e){let i=0;if(e===void 0)for(let a of t)(a=+a)&&(i+=a);else{let a=-1;for(let h of t)(h=+e(h,++a,t))&&(i+=h)}return i}function Pt(t){return t.target.depth}function Ct(t){return t.depth}function Ot(t,e){return e-1-t.height}function mt(t,e){return t.sourceLinks.length?t.depth:e-1}function Dt(t){return t.targetLinks.length?t.depth:t.sourceLinks.length?pt(t.sourceLinks,Pt)-1:0}function X(t){return function(){return t}}function ut(t,e){return Q(t.source,e.source)||t.index-e.index}function ht(t,e){return Q(t.target,e.target)||t.index-e.index}function Q(t,e){return t.y0-e.y0}function it(t){return t.value}function jt(t){return t.index}function zt(t){return t.nodes}function $t(t){return t.links}function ft(t,e){const i=t.get(e);if(!i)throw new Error("missing: "+e);return i}function yt({nodes:t}){for(const e of t){let i=e.y0,a=i;for(const h of e.sourceLinks)h.y0=i+h.width/2,i+=h.width;for(const h of e.targetLinks)h.y1=a+h.width/2,a+=h.width}}function Bt(){let t=0,e=0,i=1,a=1,h=24,d=8,p,_=jt,s=mt,o,l,x=zt,v=$t,y=6;function b(){const n={nodes:x.apply(null,arguments),links:v.apply(null,arguments)};return M(n),T(n),N(n),C(n),S(n),yt(n),n}b.update=function(n){return yt(n),n},b.nodeId=function(n){return arguments.length?(_=typeof n=="function"?n:X(n),b):_},b.nodeAlign=function(n){return arguments.length?(s=typeof n=="function"?n:X(n),b):s},b.nodeSort=function(n){return arguments.length?(o=n,b):o},b.nodeWidth=function(n){return arguments.length?(h=+n,b):h},b.nodePadding=function(n){return arguments.length?(d=p=+n,b):d},b.nodes=function(n){return arguments.length?(x=typeof n=="function"?n:X(n),b):x},b.links=function(n){return arguments.length?(v=typeof n=="function"?n:X(n),b):v},b.linkSort=function(n){return arguments.length?(l=n,b):l},b.size=function(n){return arguments.length?(t=e=0,i=+n[0],a=+n[1],b):[i-t,a-e]},b.extent=function(n){return arguments.length?(t=+n[0][0],i=+n[1][0],e=+n[0][1],a=+n[1][1],b):[[t,e],[i,a]]},b.iterations=function(n){return arguments.length?(y=+n,b):y};function M({nodes:n,links:f}){for(const[c,r]of n.entries())r.index=c,r.sourceLinks=[],r.targetLinks=[];const u=new Map(n.map((c,r)=>[_(c,r,n),c]));for(const[c,r]of f.entries()){r.index=c;let{source:k,target:w}=r;typeof k!="object"&&(k=r.source=ft(u,k)),typeof w!="object"&&(w=r.target=ft(u,w)),k.sourceLinks.push(r),w.targetLinks.push(r)}if(l!=null)for(const{sourceLinks:c,targetLinks:r}of n)c.sort(l),r.sort(l)}function T({nodes:n}){for(const f of n)f.value=f.fixedValue===void 0?Math.max(nt(f.sourceLinks,it),nt(f.targetLinks,it)):f.fixedValue}function N({nodes:n}){const f=n.length;let u=new Set(n),c=new Set,r=0;for(;u.size;){for(const k of u){k.depth=r;for(const{target:w}of k.sourceLinks)c.add(w)}if(++r>f)throw new Error("circular link");u=c,c=new Set}}function C({nodes:n}){const f=n.length;let u=new Set(n),c=new Set,r=0;for(;u.size;){for(const k of u){k.height=r;for(const{source:w}of k.targetLinks)c.add(w)}if(++r>f)throw new Error("circular link");u=c,c=new Set}}function j({nodes:n}){const f=ct(n,r=>r.depth)+1,u=(i-t-h)/(f-1),c=new Array(f);for(const r of n){const k=Math.max(0,Math.min(f-1,Math.floor(s.call(null,r,f))));r.layer=k,r.x0=t+k*u,r.x1=r.x0+h,c[k]?c[k].push(r):c[k]=[r]}if(o)for(const r of c)r.sort(o);return c}function R(n){const f=pt(n,u=>(a-e-(u.length-1)*p)/nt(u,it));for(const u of n){let c=e;for(const r of u){r.y0=c,r.y1=c+r.value*f,c=r.y1+p;for(const k of r.sourceLinks)k.width=k.value*f}c=(a-c+p)/(u.length+1);for(let r=0;ru.length)-1)),R(f);for(let u=0;u0))continue;let G=(L/V-w.y0)*f;w.y0+=G,w.y1+=G,E(w)}o===void 0&&k.sort(Q),O(k,u)}}function B(n,f,u){for(let c=n.length,r=c-2;r>=0;--r){const k=n[r];for(const w of k){let L=0,V=0;for(const{target:Y,value:et}of w.sourceLinks){let q=et*(Y.layer-w.layer);L+=I(w,Y)*q,V+=q}if(!(V>0))continue;let G=(L/V-w.y0)*f;w.y0+=G,w.y1+=G,E(w)}o===void 0&&k.sort(Q),O(k,u)}}function O(n,f){const u=n.length>>1,c=n[u];g(n,c.y0-p,u-1,f),D(n,c.y1+p,u+1,f),g(n,a,n.length-1,f),D(n,e,0,f)}function D(n,f,u,c){for(;u1e-6&&(r.y0+=k,r.y1+=k),f=r.y1+p}}function g(n,f,u,c){for(;u>=0;--u){const r=n[u],k=(r.y1-f)*c;k>1e-6&&(r.y0-=k,r.y1-=k),f=r.y0-p}}function E({sourceLinks:n,targetLinks:f}){if(l===void 0){for(const{source:{sourceLinks:u}}of f)u.sort(ht);for(const{target:{targetLinks:u}}of n)u.sort(ut)}}function A(n){if(l===void 0)for(const{sourceLinks:f,targetLinks:u}of n)f.sort(ht),u.sort(ut)}function z(n,f){let u=n.y0-(n.sourceLinks.length-1)*p/2;for(const{target:c,width:r}of n.sourceLinks){if(c===f)break;u+=r+p}for(const{source:c,width:r}of f.targetLinks){if(c===n)break;u-=r}return u}function I(n,f){let u=f.y0-(f.targetLinks.length-1)*p/2;for(const{source:c,width:r}of f.targetLinks){if(c===n)break;u+=r+p}for(const{target:c,width:r}of n.sourceLinks){if(c===f)break;u-=r}return u}return b}var st=Math.PI,rt=2*st,F=1e-6,Rt=rt-F;function ot(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function kt(){return new ot}ot.prototype=kt.prototype={constructor:ot,moveTo:function(t,e){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)},closePath:function(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function(t,e){this._+="L"+(this._x1=+t)+","+(this._y1=+e)},quadraticCurveTo:function(t,e,i,a){this._+="Q"+ +t+","+ +e+","+(this._x1=+i)+","+(this._y1=+a)},bezierCurveTo:function(t,e,i,a,h,d){this._+="C"+ +t+","+ +e+","+ +i+","+ +a+","+(this._x1=+h)+","+(this._y1=+d)},arcTo:function(t,e,i,a,h){t=+t,e=+e,i=+i,a=+a,h=+h;var d=this._x1,p=this._y1,_=i-t,s=a-e,o=d-t,l=p-e,x=o*o+l*l;if(h<0)throw new Error("negative radius: "+h);if(this._x1===null)this._+="M"+(this._x1=t)+","+(this._y1=e);else if(x>F)if(!(Math.abs(l*_-s*o)>F)||!h)this._+="L"+(this._x1=t)+","+(this._y1=e);else{var v=i-d,y=a-p,b=_*_+s*s,M=v*v+y*y,T=Math.sqrt(b),N=Math.sqrt(x),C=h*Math.tan((st-Math.acos((b+x-M)/(2*T*N)))/2),j=C/N,R=C/T;Math.abs(j-1)>F&&(this._+="L"+(t+j*o)+","+(e+j*l)),this._+="A"+h+","+h+",0,0,"+ +(l*v>o*y)+","+(this._x1=t+R*_)+","+(this._y1=e+R*s)}},arc:function(t,e,i,a,h,d){t=+t,e=+e,i=+i,d=!!d;var p=i*Math.cos(a),_=i*Math.sin(a),s=t+p,o=e+_,l=1^d,x=d?a-h:h-a;if(i<0)throw new Error("negative radius: "+i);this._x1===null?this._+="M"+s+","+o:(Math.abs(this._x1-s)>F||Math.abs(this._y1-o)>F)&&(this._+="L"+s+","+o),i&&(x<0&&(x=x%rt+rt),x>Rt?this._+="A"+i+","+i+",0,1,"+l+","+(t-p)+","+(e-_)+"A"+i+","+i+",0,1,"+l+","+(this._x1=s)+","+(this._y1=o):x>F&&(this._+="A"+i+","+i+",0,"+ +(x>=st)+","+l+","+(this._x1=t+i*Math.cos(h))+","+(this._y1=e+i*Math.sin(h))))},rect:function(t,e,i,a){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)+"h"+ +i+"v"+ +a+"h"+-i+"Z"},toString:function(){return this._}};function dt(t){return function(){return t}}function Vt(t){return t[0]}function Ft(t){return t[1]}var Wt=Array.prototype.slice;function Ut(t){return t.source}function Gt(t){return t.target}function Yt(t){var e=Ut,i=Gt,a=Vt,h=Ft,d=null;function p(){var _,s=Wt.call(arguments),o=e.apply(this,s),l=i.apply(this,s);if(d||(d=_=kt()),t(d,+a.apply(this,(s[0]=o,s)),+h.apply(this,s),+a.apply(this,(s[0]=l,s)),+h.apply(this,s)),_)return d=null,_+""||null}return p.source=function(_){return arguments.length?(e=_,p):e},p.target=function(_){return arguments.length?(i=_,p):i},p.x=function(_){return arguments.length?(a=typeof _=="function"?_:dt(+_),p):a},p.y=function(_){return arguments.length?(h=typeof _=="function"?_:dt(+_),p):h},p.context=function(_){return arguments.length?(d=_??null,p):d},p}function qt(t,e,i,a,h){t.moveTo(e,i),t.bezierCurveTo(e=(e+a)/2,i,e,h,a,h)}function Ht(){return Yt(qt)}function Xt(t){return[t.source.x1,t.y0]}function Qt(t){return[t.target.x0,t.y1]}function Kt(){return Ht().source(Xt).target(Qt)}var at=function(){var t=m(function(_,s,o,l){for(o=o||{},l=_.length;l--;o[_[l]]=s);return o},"o"),e=[1,9],i=[1,10],a=[1,5,10,12],h={trace:m(function(){},"trace"),yy:{},symbols_:{error:2,start:3,SANKEY:4,NEWLINE:5,csv:6,opt_eof:7,record:8,csv_tail:9,EOF:10,"field[source]":11,COMMA:12,"field[target]":13,"field[value]":14,field:15,escaped:16,non_escaped:17,DQUOTE:18,ESCAPED_TEXT:19,NON_ESCAPED_TEXT:20,$accept:0,$end:1},terminals_:{2:"error",4:"SANKEY",5:"NEWLINE",10:"EOF",11:"field[source]",12:"COMMA",13:"field[target]",14:"field[value]",18:"DQUOTE",19:"ESCAPED_TEXT",20:"NON_ESCAPED_TEXT"},productions_:[0,[3,4],[6,2],[9,2],[9,0],[7,1],[7,0],[8,5],[15,1],[15,1],[16,3],[17,1]],performAction:m(function(s,o,l,x,v,y,b){var M=y.length-1;switch(v){case 7:const T=x.findOrCreateNode(y[M-4].trim().replaceAll('""','"')),N=x.findOrCreateNode(y[M-2].trim().replaceAll('""','"')),C=parseFloat(y[M].trim());x.addLink(T,N,C);break;case 8:case 9:case 11:this.$=y[M];break;case 10:this.$=y[M-1];break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},{5:[1,3]},{6:4,8:5,15:6,16:7,17:8,18:e,20:i},{1:[2,6],7:11,10:[1,12]},t(i,[2,4],{9:13,5:[1,14]}),{12:[1,15]},t(a,[2,8]),t(a,[2,9]),{19:[1,16]},t(a,[2,11]),{1:[2,1]},{1:[2,5]},t(i,[2,2]),{6:17,8:5,15:6,16:7,17:8,18:e,20:i},{15:18,16:7,17:8,18:e,20:i},{18:[1,19]},t(i,[2,3]),{12:[1,20]},t(a,[2,10]),{15:21,16:7,17:8,18:e,20:i},t([1,5,10],[2,7])],defaultActions:{11:[2,1],12:[2,5]},parseError:m(function(s,o){if(o.recoverable)this.trace(s);else{var l=new Error(s);throw l.hash=o,l}},"parseError"),parse:m(function(s){var o=this,l=[0],x=[],v=[null],y=[],b=this.table,M="",T=0,N=0,C=2,j=1,R=y.slice.call(arguments,1),S=Object.create(this.lexer),P={yy:{}};for(var B in this.yy)Object.prototype.hasOwnProperty.call(this.yy,B)&&(P.yy[B]=this.yy[B]);S.setInput(s,P.yy),P.yy.lexer=S,P.yy.parser=this,typeof S.yylloc>"u"&&(S.yylloc={});var O=S.yylloc;y.push(O);var D=S.options&&S.options.ranges;typeof P.yy.parseError=="function"?this.parseError=P.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function g(L){l.length=l.length-2*L,v.length=v.length-L,y.length=y.length-L}m(g,"popStack");function E(){var L;return L=x.pop()||S.lex()||j,typeof L!="number"&&(L instanceof Array&&(x=L,L=x.pop()),L=o.symbols_[L]||L),L}m(E,"lex");for(var A,z,I,n,f={},u,c,r,k;;){if(z=l[l.length-1],this.defaultActions[z]?I=this.defaultActions[z]:((A===null||typeof A>"u")&&(A=E()),I=b[z]&&b[z][A]),typeof I>"u"||!I.length||!I[0]){var w="";k=[];for(u in b[z])this.terminals_[u]&&u>C&&k.push("'"+this.terminals_[u]+"'");S.showPosition?w="Parse error on line "+(T+1)+`: +`+S.showPosition()+` +Expecting `+k.join(", ")+", got '"+(this.terminals_[A]||A)+"'":w="Parse error on line "+(T+1)+": Unexpected "+(A==j?"end of input":"'"+(this.terminals_[A]||A)+"'"),this.parseError(w,{text:S.match,token:this.terminals_[A]||A,line:S.yylineno,loc:O,expected:k})}if(I[0]instanceof Array&&I.length>1)throw new Error("Parse Error: multiple actions possible at state: "+z+", token: "+A);switch(I[0]){case 1:l.push(A),v.push(S.yytext),y.push(S.yylloc),l.push(I[1]),A=null,N=S.yyleng,M=S.yytext,T=S.yylineno,O=S.yylloc;break;case 2:if(c=this.productions_[I[1]][1],f.$=v[v.length-c],f._$={first_line:y[y.length-(c||1)].first_line,last_line:y[y.length-1].last_line,first_column:y[y.length-(c||1)].first_column,last_column:y[y.length-1].last_column},D&&(f._$.range=[y[y.length-(c||1)].range[0],y[y.length-1].range[1]]),n=this.performAction.apply(f,[M,N,T,P.yy,I[1],v,y].concat(R)),typeof n<"u")return n;c&&(l=l.slice(0,-1*c*2),v=v.slice(0,-1*c),y=y.slice(0,-1*c)),l.push(this.productions_[I[1]][0]),v.push(f.$),y.push(f._$),r=b[l[l.length-2]][l[l.length-1]],l.push(r);break;case 3:return!0}}return!0},"parse")},d=function(){var _={EOF:1,parseError:m(function(o,l){if(this.yy.parser)this.yy.parser.parseError(o,l);else throw new Error(o)},"parseError"),setInput:m(function(s,o){return this.yy=o||this.yy||{},this._input=s,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:m(function(){var s=this._input[0];this.yytext+=s,this.yyleng++,this.offset++,this.match+=s,this.matched+=s;var o=s.match(/(?:\r\n?|\n).*/g);return o?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),s},"input"),unput:m(function(s){var o=s.length,l=s.split(/(?:\r\n?|\n)/g);this._input=s+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-o),this.offset-=o;var x=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),l.length-1&&(this.yylineno-=l.length-1);var v=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:l?(l.length===x.length?this.yylloc.first_column:0)+x[x.length-l.length].length-l[0].length:this.yylloc.first_column-o},this.options.ranges&&(this.yylloc.range=[v[0],v[0]+this.yyleng-o]),this.yyleng=this.yytext.length,this},"unput"),more:m(function(){return this._more=!0,this},"more"),reject:m(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:m(function(s){this.unput(this.match.slice(s))},"less"),pastInput:m(function(){var s=this.matched.substr(0,this.matched.length-this.match.length);return(s.length>20?"...":"")+s.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:m(function(){var s=this.match;return s.length<20&&(s+=this._input.substr(0,20-s.length)),(s.substr(0,20)+(s.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:m(function(){var s=this.pastInput(),o=new Array(s.length+1).join("-");return s+this.upcomingInput()+` +`+o+"^"},"showPosition"),test_match:m(function(s,o){var l,x,v;if(this.options.backtrack_lexer&&(v={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(v.yylloc.range=this.yylloc.range.slice(0))),x=s[0].match(/(?:\r\n?|\n).*/g),x&&(this.yylineno+=x.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:x?x[x.length-1].length-x[x.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+s[0].length},this.yytext+=s[0],this.match+=s[0],this.matches=s,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(s[0].length),this.matched+=s[0],l=this.performAction.call(this,this.yy,this,o,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),l)return l;if(this._backtrack){for(var y in v)this[y]=v[y];return!1}return!1},"test_match"),next:m(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var s,o,l,x;this._more||(this.yytext="",this.match="");for(var v=this._currentRules(),y=0;yo[0].length)){if(o=l,x=y,this.options.backtrack_lexer){if(s=this.test_match(l,v[y]),s!==!1)return s;if(this._backtrack){o=!1;continue}else return!1}else if(!this.options.flex)break}return o?(s=this.test_match(o,v[x]),s!==!1?s:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:m(function(){var o=this.next();return o||this.lex()},"lex"),begin:m(function(o){this.conditionStack.push(o)},"begin"),popState:m(function(){var o=this.conditionStack.length-1;return o>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:m(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:m(function(o){return o=this.conditionStack.length-1-Math.abs(o||0),o>=0?this.conditionStack[o]:"INITIAL"},"topState"),pushState:m(function(o){this.begin(o)},"pushState"),stateStackSize:m(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:m(function(o,l,x,v){switch(x){case 0:return this.pushState("csv"),4;case 1:return 10;case 2:return 5;case 3:return 12;case 4:return this.pushState("escaped_text"),18;case 5:return 20;case 6:return this.popState("escaped_text"),18;case 7:return 19}},"anonymous"),rules:[/^(?:sankey-beta\b)/i,/^(?:$)/i,/^(?:((\u000D\u000A)|(\u000A)))/i,/^(?:(\u002C))/i,/^(?:(\u0022))/i,/^(?:([\u0020-\u0021\u0023-\u002B\u002D-\u007E])*)/i,/^(?:(\u0022)(?!(\u0022)))/i,/^(?:(([\u0020-\u0021\u0023-\u002B\u002D-\u007E])|(\u002C)|(\u000D)|(\u000A)|(\u0022)(\u0022))*)/i],conditions:{csv:{rules:[1,2,3,4,5,6,7],inclusive:!1},escaped_text:{rules:[6,7],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7],inclusive:!0}}};return _}();h.lexer=d;function p(){this.yy={}}return m(p,"Parser"),p.prototype=h,h.Parser=p,new p}();at.parser=at;var K=at,J=[],tt=[],Z=new Map,Zt=m(()=>{J=[],tt=[],Z=new Map,Lt()},"clear"),W,Jt=(W=class{constructor(e,i,a=0){this.source=e,this.target=i,this.value=a}},m(W,"SankeyLink"),W),te=m((t,e,i)=>{J.push(new Jt(t,e,i))},"addLink"),U,ee=(U=class{constructor(e){this.ID=e}},m(U,"SankeyNode"),U),ne=m(t=>{t=Et.sanitizeText(t,lt());let e=Z.get(t);return e===void 0&&(e=new ee(t),Z.set(t,e),tt.push(e)),e},"findOrCreateNode"),ie=m(()=>tt,"getNodes"),se=m(()=>J,"getLinks"),re=m(()=>({nodes:tt.map(t=>({id:t.ID})),links:J.map(t=>({source:t.source.ID,target:t.target.ID,value:t.value}))}),"getGraph"),oe={nodesMap:Z,getConfig:m(()=>lt().sankey,"getConfig"),getNodes:ie,getLinks:se,getGraph:re,addLink:te,findOrCreateNode:ne,getAccTitle:_t,setAccTitle:xt,getAccDescription:vt,setAccDescription:bt,getDiagramTitle:wt,setDiagramTitle:St,clear:Zt},$,gt=($=class{static next(e){return new $(e+ ++$.count)}constructor(e){this.id=e,this.href=`#${e}`}toString(){return"url("+this.href+")"}},m($,"Uid"),$.count=0,$),ae={left:Ct,right:Ot,center:Dt,justify:mt},le=m(function(t,e,i,a){const{securityLevel:h,sankey:d}=lt(),p=At.sankey;let _;h==="sandbox"&&(_=H("#i"+e));const s=h==="sandbox"?H(_.nodes()[0].contentDocument.body):H("body"),o=h==="sandbox"?s.select(`[id="${e}"]`):H(`[id="${e}"]`),l=(d==null?void 0:d.width)??p.width,x=(d==null?void 0:d.height)??p.width,v=(d==null?void 0:d.useMaxWidth)??p.useMaxWidth,y=(d==null?void 0:d.nodeAlignment)??p.nodeAlignment,b=(d==null?void 0:d.prefix)??p.prefix,M=(d==null?void 0:d.suffix)??p.suffix,T=(d==null?void 0:d.showValues)??p.showValues,N=a.db.getGraph(),C=ae[y];Bt().nodeId(g=>g.id).nodeWidth(10).nodePadding(10+(T?15:0)).nodeAlign(C).extent([[0,0],[l,x]])(N);const S=Mt(It);o.append("g").attr("class","nodes").selectAll(".node").data(N.nodes).join("g").attr("class","node").attr("id",g=>(g.uid=gt.next("node-")).id).attr("transform",function(g){return"translate("+g.x0+","+g.y0+")"}).attr("x",g=>g.x0).attr("y",g=>g.y0).append("rect").attr("height",g=>g.y1-g.y0).attr("width",g=>g.x1-g.x0).attr("fill",g=>S(g.id));const P=m(({id:g,value:E})=>T?`${g} +${b}${Math.round(E*100)/100}${M}`:g,"getText");o.append("g").attr("class","node-labels").attr("font-family","sans-serif").attr("font-size",14).selectAll("text").data(N.nodes).join("text").attr("x",g=>g.x0(g.y1+g.y0)/2).attr("dy",`${T?"0":"0.35"}em`).attr("text-anchor",g=>g.x0(E.uid=gt.next("linearGradient-")).id).attr("gradientUnits","userSpaceOnUse").attr("x1",E=>E.source.x1).attr("x2",E=>E.target.x0);g.append("stop").attr("offset","0%").attr("stop-color",E=>S(E.source.id)),g.append("stop").attr("offset","100%").attr("stop-color",E=>S(E.target.id))}let D;switch(O){case"gradient":D=m(g=>g.uid,"coloring");break;case"source":D=m(g=>S(g.source.id),"coloring");break;case"target":D=m(g=>S(g.target.id),"coloring");break;default:D=O}B.append("path").attr("d",Kt()).attr("stroke",D).attr("stroke-width",g=>Math.max(1,g.width)),Tt(void 0,o,0,v)},"draw"),ce={draw:le},ue=m(t=>t.replaceAll(/^[^\S\n\r]+|[^\S\n\r]+$/g,"").replaceAll(/([\n\r])+/g,` +`).trim(),"prepareTextForParsing"),he=K.parse.bind(K);K.parse=t=>he(ue(t));var me={parser:K,db:oe,renderer:ce};export{me as diagram}; diff --git a/assets/chunks/sequenceDiagram-D25TJ2OB.CrCvzD1l.js b/assets/chunks/sequenceDiagram-D25TJ2OB.CrCvzD1l.js new file mode 100644 index 000000000..fed3931e5 --- /dev/null +++ b/assets/chunks/sequenceDiagram-D25TJ2OB.CrCvzD1l.js @@ -0,0 +1,122 @@ +import{g as St,a as Kt,d as Se,b as Me,c as Re,e as De}from"./chunk-VCFP4HPQ.DyTG-ln4.js";import{I as Ce}from"./chunk-RGXPSUNZ.e_30X0ct.js";import{_ as d,g as Oe,r as Be,q as Ve,d as at,s as se,c as Ye,b as Fe,e as _,a2 as lt,a3 as wt,v as F,l as J,x as We,i as Mt,a as qe,j as kt,k as ze,m as ae,a4 as ie,F as Ft,a5 as ne,a6 as He}from"../app.D0Wo8w0i.js";import"./framework.B1keMFNq.js";import"./theme.8WvZWF-M.js";var Wt=function(){var t=d(function(pt,I,L,A){for(L=L||{},A=pt.length;A--;L[pt[A]]=I);return L},"o"),e=[1,2],o=[1,3],r=[1,4],a=[2,4],i=[1,9],c=[1,11],h=[1,13],p=[1,14],s=[1,16],f=[1,17],E=[1,18],g=[1,24],T=[1,25],m=[1,26],w=[1,27],k=[1,28],V=[1,29],M=[1,30],Y=[1,31],C=[1,32],z=[1,33],H=[1,34],Z=[1,35],et=[1,36],K=[1,37],U=[1,38],q=[1,39],R=[1,41],Q=[1,42],G=[1,43],j=[1,44],rt=[1,45],S=[1,46],y=[1,4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,47,48,49,50,52,53,54,59,60,61,62,70],P=[4,5,16,50,52,53],$=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,50,52,53,54,59,60,61,62,70],it=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,49,50,52,53,54,59,60,61,62,70],N=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,48,50,52,53,54,59,60,61,62,70],Jt=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,47,50,52,53,54,59,60,61,62,70],ot=[68,69,70],dt=[1,122],Ct={trace:d(function(){},"trace"),yy:{},symbols_:{error:2,start:3,SPACE:4,NEWLINE:5,SD:6,document:7,line:8,statement:9,box_section:10,box_line:11,participant_statement:12,create:13,box:14,restOfLine:15,end:16,signal:17,autonumber:18,NUM:19,off:20,activate:21,actor:22,deactivate:23,note_statement:24,links_statement:25,link_statement:26,properties_statement:27,details_statement:28,title:29,legacy_title:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,loop:36,rect:37,opt:38,alt:39,else_sections:40,par:41,par_sections:42,par_over:43,critical:44,option_sections:45,break:46,option:47,and:48,else:49,participant:50,AS:51,participant_actor:52,destroy:53,note:54,placement:55,text2:56,over:57,actor_pair:58,links:59,link:60,properties:61,details:62,spaceList:63,",":64,left_of:65,right_of:66,signaltype:67,"+":68,"-":69,ACTOR:70,SOLID_OPEN_ARROW:71,DOTTED_OPEN_ARROW:72,SOLID_ARROW:73,BIDIRECTIONAL_SOLID_ARROW:74,DOTTED_ARROW:75,BIDIRECTIONAL_DOTTED_ARROW:76,SOLID_CROSS:77,DOTTED_CROSS:78,SOLID_POINT:79,DOTTED_POINT:80,TXT:81,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NEWLINE",6:"SD",13:"create",14:"box",15:"restOfLine",16:"end",18:"autonumber",19:"NUM",20:"off",21:"activate",23:"deactivate",29:"title",30:"legacy_title",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",36:"loop",37:"rect",38:"opt",39:"alt",41:"par",43:"par_over",44:"critical",46:"break",47:"option",48:"and",49:"else",50:"participant",51:"AS",52:"participant_actor",53:"destroy",54:"note",57:"over",59:"links",60:"link",61:"properties",62:"details",64:",",65:"left_of",66:"right_of",68:"+",69:"-",70:"ACTOR",71:"SOLID_OPEN_ARROW",72:"DOTTED_OPEN_ARROW",73:"SOLID_ARROW",74:"BIDIRECTIONAL_SOLID_ARROW",75:"DOTTED_ARROW",76:"BIDIRECTIONAL_DOTTED_ARROW",77:"SOLID_CROSS",78:"DOTTED_CROSS",79:"SOLID_POINT",80:"DOTTED_POINT",81:"TXT"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[10,0],[10,2],[11,2],[11,1],[11,1],[9,1],[9,2],[9,4],[9,2],[9,4],[9,3],[9,3],[9,2],[9,3],[9,3],[9,2],[9,2],[9,2],[9,2],[9,2],[9,1],[9,1],[9,2],[9,2],[9,1],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[45,1],[45,4],[42,1],[42,4],[40,1],[40,4],[12,5],[12,3],[12,5],[12,3],[12,3],[24,4],[24,4],[25,3],[26,3],[27,3],[28,3],[63,2],[63,1],[58,3],[58,1],[55,1],[55,1],[17,5],[17,5],[17,4],[22,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[56,1]],performAction:d(function(I,L,A,b,D,l,mt){var u=l.length-1;switch(D){case 3:return b.apply(l[u]),l[u];case 4:case 9:this.$=[];break;case 5:case 10:l[u-1].push(l[u]),this.$=l[u-1];break;case 6:case 7:case 11:case 12:this.$=l[u];break;case 8:case 13:this.$=[];break;case 15:l[u].type="createParticipant",this.$=l[u];break;case 16:l[u-1].unshift({type:"boxStart",boxData:b.parseBoxData(l[u-2])}),l[u-1].push({type:"boxEnd",boxText:l[u-2]}),this.$=l[u-1];break;case 18:this.$={type:"sequenceIndex",sequenceIndex:Number(l[u-2]),sequenceIndexStep:Number(l[u-1]),sequenceVisible:!0,signalType:b.LINETYPE.AUTONUMBER};break;case 19:this.$={type:"sequenceIndex",sequenceIndex:Number(l[u-1]),sequenceIndexStep:1,sequenceVisible:!0,signalType:b.LINETYPE.AUTONUMBER};break;case 20:this.$={type:"sequenceIndex",sequenceVisible:!1,signalType:b.LINETYPE.AUTONUMBER};break;case 21:this.$={type:"sequenceIndex",sequenceVisible:!0,signalType:b.LINETYPE.AUTONUMBER};break;case 22:this.$={type:"activeStart",signalType:b.LINETYPE.ACTIVE_START,actor:l[u-1].actor};break;case 23:this.$={type:"activeEnd",signalType:b.LINETYPE.ACTIVE_END,actor:l[u-1].actor};break;case 29:b.setDiagramTitle(l[u].substring(6)),this.$=l[u].substring(6);break;case 30:b.setDiagramTitle(l[u].substring(7)),this.$=l[u].substring(7);break;case 31:this.$=l[u].trim(),b.setAccTitle(this.$);break;case 32:case 33:this.$=l[u].trim(),b.setAccDescription(this.$);break;case 34:l[u-1].unshift({type:"loopStart",loopText:b.parseMessage(l[u-2]),signalType:b.LINETYPE.LOOP_START}),l[u-1].push({type:"loopEnd",loopText:l[u-2],signalType:b.LINETYPE.LOOP_END}),this.$=l[u-1];break;case 35:l[u-1].unshift({type:"rectStart",color:b.parseMessage(l[u-2]),signalType:b.LINETYPE.RECT_START}),l[u-1].push({type:"rectEnd",color:b.parseMessage(l[u-2]),signalType:b.LINETYPE.RECT_END}),this.$=l[u-1];break;case 36:l[u-1].unshift({type:"optStart",optText:b.parseMessage(l[u-2]),signalType:b.LINETYPE.OPT_START}),l[u-1].push({type:"optEnd",optText:b.parseMessage(l[u-2]),signalType:b.LINETYPE.OPT_END}),this.$=l[u-1];break;case 37:l[u-1].unshift({type:"altStart",altText:b.parseMessage(l[u-2]),signalType:b.LINETYPE.ALT_START}),l[u-1].push({type:"altEnd",signalType:b.LINETYPE.ALT_END}),this.$=l[u-1];break;case 38:l[u-1].unshift({type:"parStart",parText:b.parseMessage(l[u-2]),signalType:b.LINETYPE.PAR_START}),l[u-1].push({type:"parEnd",signalType:b.LINETYPE.PAR_END}),this.$=l[u-1];break;case 39:l[u-1].unshift({type:"parStart",parText:b.parseMessage(l[u-2]),signalType:b.LINETYPE.PAR_OVER_START}),l[u-1].push({type:"parEnd",signalType:b.LINETYPE.PAR_END}),this.$=l[u-1];break;case 40:l[u-1].unshift({type:"criticalStart",criticalText:b.parseMessage(l[u-2]),signalType:b.LINETYPE.CRITICAL_START}),l[u-1].push({type:"criticalEnd",signalType:b.LINETYPE.CRITICAL_END}),this.$=l[u-1];break;case 41:l[u-1].unshift({type:"breakStart",breakText:b.parseMessage(l[u-2]),signalType:b.LINETYPE.BREAK_START}),l[u-1].push({type:"breakEnd",optText:b.parseMessage(l[u-2]),signalType:b.LINETYPE.BREAK_END}),this.$=l[u-1];break;case 43:this.$=l[u-3].concat([{type:"option",optionText:b.parseMessage(l[u-1]),signalType:b.LINETYPE.CRITICAL_OPTION},l[u]]);break;case 45:this.$=l[u-3].concat([{type:"and",parText:b.parseMessage(l[u-1]),signalType:b.LINETYPE.PAR_AND},l[u]]);break;case 47:this.$=l[u-3].concat([{type:"else",altText:b.parseMessage(l[u-1]),signalType:b.LINETYPE.ALT_ELSE},l[u]]);break;case 48:l[u-3].draw="participant",l[u-3].type="addParticipant",l[u-3].description=b.parseMessage(l[u-1]),this.$=l[u-3];break;case 49:l[u-1].draw="participant",l[u-1].type="addParticipant",this.$=l[u-1];break;case 50:l[u-3].draw="actor",l[u-3].type="addParticipant",l[u-3].description=b.parseMessage(l[u-1]),this.$=l[u-3];break;case 51:l[u-1].draw="actor",l[u-1].type="addParticipant",this.$=l[u-1];break;case 52:l[u-1].type="destroyParticipant",this.$=l[u-1];break;case 53:this.$=[l[u-1],{type:"addNote",placement:l[u-2],actor:l[u-1].actor,text:l[u]}];break;case 54:l[u-2]=[].concat(l[u-1],l[u-1]).slice(0,2),l[u-2][0]=l[u-2][0].actor,l[u-2][1]=l[u-2][1].actor,this.$=[l[u-1],{type:"addNote",placement:b.PLACEMENT.OVER,actor:l[u-2].slice(0,2),text:l[u]}];break;case 55:this.$=[l[u-1],{type:"addLinks",actor:l[u-1].actor,text:l[u]}];break;case 56:this.$=[l[u-1],{type:"addALink",actor:l[u-1].actor,text:l[u]}];break;case 57:this.$=[l[u-1],{type:"addProperties",actor:l[u-1].actor,text:l[u]}];break;case 58:this.$=[l[u-1],{type:"addDetails",actor:l[u-1].actor,text:l[u]}];break;case 61:this.$=[l[u-2],l[u]];break;case 62:this.$=l[u];break;case 63:this.$=b.PLACEMENT.LEFTOF;break;case 64:this.$=b.PLACEMENT.RIGHTOF;break;case 65:this.$=[l[u-4],l[u-1],{type:"addMessage",from:l[u-4].actor,to:l[u-1].actor,signalType:l[u-3],msg:l[u],activate:!0},{type:"activeStart",signalType:b.LINETYPE.ACTIVE_START,actor:l[u-1].actor}];break;case 66:this.$=[l[u-4],l[u-1],{type:"addMessage",from:l[u-4].actor,to:l[u-1].actor,signalType:l[u-3],msg:l[u]},{type:"activeEnd",signalType:b.LINETYPE.ACTIVE_END,actor:l[u-4].actor}];break;case 67:this.$=[l[u-3],l[u-1],{type:"addMessage",from:l[u-3].actor,to:l[u-1].actor,signalType:l[u-2],msg:l[u]}];break;case 68:this.$={type:"addParticipant",actor:l[u]};break;case 69:this.$=b.LINETYPE.SOLID_OPEN;break;case 70:this.$=b.LINETYPE.DOTTED_OPEN;break;case 71:this.$=b.LINETYPE.SOLID;break;case 72:this.$=b.LINETYPE.BIDIRECTIONAL_SOLID;break;case 73:this.$=b.LINETYPE.DOTTED;break;case 74:this.$=b.LINETYPE.BIDIRECTIONAL_DOTTED;break;case 75:this.$=b.LINETYPE.SOLID_CROSS;break;case 76:this.$=b.LINETYPE.DOTTED_CROSS;break;case 77:this.$=b.LINETYPE.SOLID_POINT;break;case 78:this.$=b.LINETYPE.DOTTED_POINT;break;case 79:this.$=b.parseMessage(l[u].trim().substring(1));break}},"anonymous"),table:[{3:1,4:e,5:o,6:r},{1:[3]},{3:5,4:e,5:o,6:r},{3:6,4:e,5:o,6:r},t([1,4,5,13,14,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,50,52,53,54,59,60,61,62,70],a,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:i,5:c,8:8,9:10,12:12,13:h,14:p,17:15,18:s,21:f,22:40,23:E,24:19,25:20,26:21,27:22,28:23,29:g,30:T,31:m,33:w,35:k,36:V,37:M,38:Y,39:C,41:z,43:H,44:Z,46:et,50:K,52:U,53:q,54:R,59:Q,60:G,61:j,62:rt,70:S},t(y,[2,5]),{9:47,12:12,13:h,14:p,17:15,18:s,21:f,22:40,23:E,24:19,25:20,26:21,27:22,28:23,29:g,30:T,31:m,33:w,35:k,36:V,37:M,38:Y,39:C,41:z,43:H,44:Z,46:et,50:K,52:U,53:q,54:R,59:Q,60:G,61:j,62:rt,70:S},t(y,[2,7]),t(y,[2,8]),t(y,[2,14]),{12:48,50:K,52:U,53:q},{15:[1,49]},{5:[1,50]},{5:[1,53],19:[1,51],20:[1,52]},{22:54,70:S},{22:55,70:S},{5:[1,56]},{5:[1,57]},{5:[1,58]},{5:[1,59]},{5:[1,60]},t(y,[2,29]),t(y,[2,30]),{32:[1,61]},{34:[1,62]},t(y,[2,33]),{15:[1,63]},{15:[1,64]},{15:[1,65]},{15:[1,66]},{15:[1,67]},{15:[1,68]},{15:[1,69]},{15:[1,70]},{22:71,70:S},{22:72,70:S},{22:73,70:S},{67:74,71:[1,75],72:[1,76],73:[1,77],74:[1,78],75:[1,79],76:[1,80],77:[1,81],78:[1,82],79:[1,83],80:[1,84]},{55:85,57:[1,86],65:[1,87],66:[1,88]},{22:89,70:S},{22:90,70:S},{22:91,70:S},{22:92,70:S},t([5,51,64,71,72,73,74,75,76,77,78,79,80,81],[2,68]),t(y,[2,6]),t(y,[2,15]),t(P,[2,9],{10:93}),t(y,[2,17]),{5:[1,95],19:[1,94]},{5:[1,96]},t(y,[2,21]),{5:[1,97]},{5:[1,98]},t(y,[2,24]),t(y,[2,25]),t(y,[2,26]),t(y,[2,27]),t(y,[2,28]),t(y,[2,31]),t(y,[2,32]),t($,a,{7:99}),t($,a,{7:100}),t($,a,{7:101}),t(it,a,{40:102,7:103}),t(N,a,{42:104,7:105}),t(N,a,{7:105,42:106}),t(Jt,a,{45:107,7:108}),t($,a,{7:109}),{5:[1,111],51:[1,110]},{5:[1,113],51:[1,112]},{5:[1,114]},{22:117,68:[1,115],69:[1,116],70:S},t(ot,[2,69]),t(ot,[2,70]),t(ot,[2,71]),t(ot,[2,72]),t(ot,[2,73]),t(ot,[2,74]),t(ot,[2,75]),t(ot,[2,76]),t(ot,[2,77]),t(ot,[2,78]),{22:118,70:S},{22:120,58:119,70:S},{70:[2,63]},{70:[2,64]},{56:121,81:dt},{56:123,81:dt},{56:124,81:dt},{56:125,81:dt},{4:[1,128],5:[1,130],11:127,12:129,16:[1,126],50:K,52:U,53:q},{5:[1,131]},t(y,[2,19]),t(y,[2,20]),t(y,[2,22]),t(y,[2,23]),{4:i,5:c,8:8,9:10,12:12,13:h,14:p,16:[1,132],17:15,18:s,21:f,22:40,23:E,24:19,25:20,26:21,27:22,28:23,29:g,30:T,31:m,33:w,35:k,36:V,37:M,38:Y,39:C,41:z,43:H,44:Z,46:et,50:K,52:U,53:q,54:R,59:Q,60:G,61:j,62:rt,70:S},{4:i,5:c,8:8,9:10,12:12,13:h,14:p,16:[1,133],17:15,18:s,21:f,22:40,23:E,24:19,25:20,26:21,27:22,28:23,29:g,30:T,31:m,33:w,35:k,36:V,37:M,38:Y,39:C,41:z,43:H,44:Z,46:et,50:K,52:U,53:q,54:R,59:Q,60:G,61:j,62:rt,70:S},{4:i,5:c,8:8,9:10,12:12,13:h,14:p,16:[1,134],17:15,18:s,21:f,22:40,23:E,24:19,25:20,26:21,27:22,28:23,29:g,30:T,31:m,33:w,35:k,36:V,37:M,38:Y,39:C,41:z,43:H,44:Z,46:et,50:K,52:U,53:q,54:R,59:Q,60:G,61:j,62:rt,70:S},{16:[1,135]},{4:i,5:c,8:8,9:10,12:12,13:h,14:p,16:[2,46],17:15,18:s,21:f,22:40,23:E,24:19,25:20,26:21,27:22,28:23,29:g,30:T,31:m,33:w,35:k,36:V,37:M,38:Y,39:C,41:z,43:H,44:Z,46:et,49:[1,136],50:K,52:U,53:q,54:R,59:Q,60:G,61:j,62:rt,70:S},{16:[1,137]},{4:i,5:c,8:8,9:10,12:12,13:h,14:p,16:[2,44],17:15,18:s,21:f,22:40,23:E,24:19,25:20,26:21,27:22,28:23,29:g,30:T,31:m,33:w,35:k,36:V,37:M,38:Y,39:C,41:z,43:H,44:Z,46:et,48:[1,138],50:K,52:U,53:q,54:R,59:Q,60:G,61:j,62:rt,70:S},{16:[1,139]},{16:[1,140]},{4:i,5:c,8:8,9:10,12:12,13:h,14:p,16:[2,42],17:15,18:s,21:f,22:40,23:E,24:19,25:20,26:21,27:22,28:23,29:g,30:T,31:m,33:w,35:k,36:V,37:M,38:Y,39:C,41:z,43:H,44:Z,46:et,47:[1,141],50:K,52:U,53:q,54:R,59:Q,60:G,61:j,62:rt,70:S},{4:i,5:c,8:8,9:10,12:12,13:h,14:p,16:[1,142],17:15,18:s,21:f,22:40,23:E,24:19,25:20,26:21,27:22,28:23,29:g,30:T,31:m,33:w,35:k,36:V,37:M,38:Y,39:C,41:z,43:H,44:Z,46:et,50:K,52:U,53:q,54:R,59:Q,60:G,61:j,62:rt,70:S},{15:[1,143]},t(y,[2,49]),{15:[1,144]},t(y,[2,51]),t(y,[2,52]),{22:145,70:S},{22:146,70:S},{56:147,81:dt},{56:148,81:dt},{56:149,81:dt},{64:[1,150],81:[2,62]},{5:[2,55]},{5:[2,79]},{5:[2,56]},{5:[2,57]},{5:[2,58]},t(y,[2,16]),t(P,[2,10]),{12:151,50:K,52:U,53:q},t(P,[2,12]),t(P,[2,13]),t(y,[2,18]),t(y,[2,34]),t(y,[2,35]),t(y,[2,36]),t(y,[2,37]),{15:[1,152]},t(y,[2,38]),{15:[1,153]},t(y,[2,39]),t(y,[2,40]),{15:[1,154]},t(y,[2,41]),{5:[1,155]},{5:[1,156]},{56:157,81:dt},{56:158,81:dt},{5:[2,67]},{5:[2,53]},{5:[2,54]},{22:159,70:S},t(P,[2,11]),t(it,a,{7:103,40:160}),t(N,a,{7:105,42:161}),t(Jt,a,{7:108,45:162}),t(y,[2,48]),t(y,[2,50]),{5:[2,65]},{5:[2,66]},{81:[2,61]},{16:[2,47]},{16:[2,45]},{16:[2,43]}],defaultActions:{5:[2,1],6:[2,2],87:[2,63],88:[2,64],121:[2,55],122:[2,79],123:[2,56],124:[2,57],125:[2,58],147:[2,67],148:[2,53],149:[2,54],157:[2,65],158:[2,66],159:[2,61],160:[2,47],161:[2,45],162:[2,43]},parseError:d(function(I,L){if(L.recoverable)this.trace(I);else{var A=new Error(I);throw A.hash=L,A}},"parseError"),parse:d(function(I){var L=this,A=[0],b=[],D=[null],l=[],mt=this.table,u="",Lt=0,Zt=0,Pe=2,Qt=1,Ae=l.slice.call(arguments,1),W=Object.create(this.lexer),ut={yy:{}};for(var Ot in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Ot)&&(ut.yy[Ot]=this.yy[Ot]);W.setInput(I,ut.yy),ut.yy.lexer=W,ut.yy.parser=this,typeof W.yylloc>"u"&&(W.yylloc={});var Bt=W.yylloc;l.push(Bt);var ke=W.options&&W.options.ranges;typeof ut.yy.parseError=="function"?this.parseError=ut.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Ne(tt){A.length=A.length-2*tt,D.length=D.length-tt,l.length=l.length-tt}d(Ne,"popStack");function jt(){var tt;return tt=b.pop()||W.lex()||Qt,typeof tt!="number"&&(tt instanceof Array&&(b=tt,tt=b.pop()),tt=L.symbols_[tt]||tt),tt}d(jt,"lex");for(var X,gt,st,Vt,yt={},Pt,ht,$t,At;;){if(gt=A[A.length-1],this.defaultActions[gt]?st=this.defaultActions[gt]:((X===null||typeof X>"u")&&(X=jt()),st=mt[gt]&&mt[gt][X]),typeof st>"u"||!st.length||!st[0]){var Yt="";At=[];for(Pt in mt[gt])this.terminals_[Pt]&&Pt>Pe&&At.push("'"+this.terminals_[Pt]+"'");W.showPosition?Yt="Parse error on line "+(Lt+1)+`: +`+W.showPosition()+` +Expecting `+At.join(", ")+", got '"+(this.terminals_[X]||X)+"'":Yt="Parse error on line "+(Lt+1)+": Unexpected "+(X==Qt?"end of input":"'"+(this.terminals_[X]||X)+"'"),this.parseError(Yt,{text:W.match,token:this.terminals_[X]||X,line:W.yylineno,loc:Bt,expected:At})}if(st[0]instanceof Array&&st.length>1)throw new Error("Parse Error: multiple actions possible at state: "+gt+", token: "+X);switch(st[0]){case 1:A.push(X),D.push(W.yytext),l.push(W.yylloc),A.push(st[1]),X=null,Zt=W.yyleng,u=W.yytext,Lt=W.yylineno,Bt=W.yylloc;break;case 2:if(ht=this.productions_[st[1]][1],yt.$=D[D.length-ht],yt._$={first_line:l[l.length-(ht||1)].first_line,last_line:l[l.length-1].last_line,first_column:l[l.length-(ht||1)].first_column,last_column:l[l.length-1].last_column},ke&&(yt._$.range=[l[l.length-(ht||1)].range[0],l[l.length-1].range[1]]),Vt=this.performAction.apply(yt,[u,Zt,Lt,ut.yy,st[1],D,l].concat(Ae)),typeof Vt<"u")return Vt;ht&&(A=A.slice(0,-1*ht*2),D=D.slice(0,-1*ht),l=l.slice(0,-1*ht)),A.push(this.productions_[st[1]][0]),D.push(yt.$),l.push(yt._$),$t=mt[A[A.length-2]][A[A.length-1]],A.push($t);break;case 3:return!0}}return!0},"parse")},Le=function(){var pt={EOF:1,parseError:d(function(L,A){if(this.yy.parser)this.yy.parser.parseError(L,A);else throw new Error(L)},"parseError"),setInput:d(function(I,L){return this.yy=L||this.yy||{},this._input=I,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:d(function(){var I=this._input[0];this.yytext+=I,this.yyleng++,this.offset++,this.match+=I,this.matched+=I;var L=I.match(/(?:\r\n?|\n).*/g);return L?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),I},"input"),unput:d(function(I){var L=I.length,A=I.split(/(?:\r\n?|\n)/g);this._input=I+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-L),this.offset-=L;var b=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),A.length-1&&(this.yylineno-=A.length-1);var D=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:A?(A.length===b.length?this.yylloc.first_column:0)+b[b.length-A.length].length-A[0].length:this.yylloc.first_column-L},this.options.ranges&&(this.yylloc.range=[D[0],D[0]+this.yyleng-L]),this.yyleng=this.yytext.length,this},"unput"),more:d(function(){return this._more=!0,this},"more"),reject:d(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:d(function(I){this.unput(this.match.slice(I))},"less"),pastInput:d(function(){var I=this.matched.substr(0,this.matched.length-this.match.length);return(I.length>20?"...":"")+I.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:d(function(){var I=this.match;return I.length<20&&(I+=this._input.substr(0,20-I.length)),(I.substr(0,20)+(I.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:d(function(){var I=this.pastInput(),L=new Array(I.length+1).join("-");return I+this.upcomingInput()+` +`+L+"^"},"showPosition"),test_match:d(function(I,L){var A,b,D;if(this.options.backtrack_lexer&&(D={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(D.yylloc.range=this.yylloc.range.slice(0))),b=I[0].match(/(?:\r\n?|\n).*/g),b&&(this.yylineno+=b.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:b?b[b.length-1].length-b[b.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+I[0].length},this.yytext+=I[0],this.match+=I[0],this.matches=I,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(I[0].length),this.matched+=I[0],A=this.performAction.call(this,this.yy,this,L,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),A)return A;if(this._backtrack){for(var l in D)this[l]=D[l];return!1}return!1},"test_match"),next:d(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var I,L,A,b;this._more||(this.yytext="",this.match="");for(var D=this._currentRules(),l=0;lL[0].length)){if(L=A,b=l,this.options.backtrack_lexer){if(I=this.test_match(A,D[l]),I!==!1)return I;if(this._backtrack){L=!1;continue}else return!1}else if(!this.options.flex)break}return L?(I=this.test_match(L,D[b]),I!==!1?I:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:d(function(){var L=this.next();return L||this.lex()},"lex"),begin:d(function(L){this.conditionStack.push(L)},"begin"),popState:d(function(){var L=this.conditionStack.length-1;return L>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:d(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:d(function(L){return L=this.conditionStack.length-1-Math.abs(L||0),L>=0?this.conditionStack[L]:"INITIAL"},"topState"),pushState:d(function(L){this.begin(L)},"pushState"),stateStackSize:d(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:d(function(L,A,b,D){switch(b){case 0:return 5;case 1:break;case 2:break;case 3:break;case 4:break;case 5:break;case 6:return 19;case 7:return this.begin("LINE"),14;case 8:return this.begin("ID"),50;case 9:return this.begin("ID"),52;case 10:return 13;case 11:return this.begin("ID"),53;case 12:return A.yytext=A.yytext.trim(),this.begin("ALIAS"),70;case 13:return this.popState(),this.popState(),this.begin("LINE"),51;case 14:return this.popState(),this.popState(),5;case 15:return this.begin("LINE"),36;case 16:return this.begin("LINE"),37;case 17:return this.begin("LINE"),38;case 18:return this.begin("LINE"),39;case 19:return this.begin("LINE"),49;case 20:return this.begin("LINE"),41;case 21:return this.begin("LINE"),43;case 22:return this.begin("LINE"),48;case 23:return this.begin("LINE"),44;case 24:return this.begin("LINE"),47;case 25:return this.begin("LINE"),46;case 26:return this.popState(),15;case 27:return 16;case 28:return 65;case 29:return 66;case 30:return 59;case 31:return 60;case 32:return 61;case 33:return 62;case 34:return 57;case 35:return 54;case 36:return this.begin("ID"),21;case 37:return this.begin("ID"),23;case 38:return 29;case 39:return 30;case 40:return this.begin("acc_title"),31;case 41:return this.popState(),"acc_title_value";case 42:return this.begin("acc_descr"),33;case 43:return this.popState(),"acc_descr_value";case 44:this.begin("acc_descr_multiline");break;case 45:this.popState();break;case 46:return"acc_descr_multiline_value";case 47:return 6;case 48:return 18;case 49:return 20;case 50:return 64;case 51:return 5;case 52:return A.yytext=A.yytext.trim(),70;case 53:return 73;case 54:return 74;case 55:return 75;case 56:return 76;case 57:return 71;case 58:return 72;case 59:return 77;case 60:return 78;case 61:return 79;case 62:return 80;case 63:return 81;case 64:return 68;case 65:return 69;case 66:return 5;case 67:return"INVALID"}},"anonymous"),rules:[/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[0-9]+(?=[ \n]+))/i,/^(?:box\b)/i,/^(?:participant\b)/i,/^(?:actor\b)/i,/^(?:create\b)/i,/^(?:destroy\b)/i,/^(?:[^\<->\->:\n,;]+?([\-]*[^\<->\->:\n,;]+?)*?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i,/^(?:as\b)/i,/^(?:(?:))/i,/^(?:loop\b)/i,/^(?:rect\b)/i,/^(?:opt\b)/i,/^(?:alt\b)/i,/^(?:else\b)/i,/^(?:par\b)/i,/^(?:par_over\b)/i,/^(?:and\b)/i,/^(?:critical\b)/i,/^(?:option\b)/i,/^(?:break\b)/i,/^(?:(?:[:]?(?:no)?wrap)?[^#\n;]*)/i,/^(?:end\b)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:links\b)/i,/^(?:link\b)/i,/^(?:properties\b)/i,/^(?:details\b)/i,/^(?:over\b)/i,/^(?:note\b)/i,/^(?:activate\b)/i,/^(?:deactivate\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:title:\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:sequenceDiagram\b)/i,/^(?:autonumber\b)/i,/^(?:off\b)/i,/^(?:,)/i,/^(?:;)/i,/^(?:[^\+\<->\->:\n,;]+((?!(-x|--x|-\)|--\)))[\-]*[^\+\<->\->:\n,;]+)*)/i,/^(?:->>)/i,/^(?:<<->>)/i,/^(?:-->>)/i,/^(?:<<-->>)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?:-[\)])/i,/^(?:--[\)])/i,/^(?::(?:(?:no)?wrap)?[^#\n;]+)/i,/^(?:\+)/i,/^(?:-)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[45,46],inclusive:!1},acc_descr:{rules:[43],inclusive:!1},acc_title:{rules:[41],inclusive:!1},ID:{rules:[2,3,12],inclusive:!1},ALIAS:{rules:[2,3,13,14],inclusive:!1},LINE:{rules:[2,3,26],inclusive:!1},INITIAL:{rules:[0,1,3,4,5,6,7,8,9,10,11,15,16,17,18,19,20,21,22,23,24,25,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,44,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67],inclusive:!0}}};return pt}();Ct.lexer=Le;function _t(){this.yy={}}return d(_t,"Parser"),_t.prototype=Ct,Ct.Parser=_t,new _t}();Wt.parser=Wt;var Ke=Wt,v=new Ce(()=>({prevActor:void 0,actors:new Map,createdActors:new Map,destroyedActors:new Map,boxes:[],messages:[],notes:[],sequenceNumbersEnabled:!1,wrapEnabled:void 0,currentBox:void 0,lastCreated:void 0,lastDestroyed:void 0})),Ue=d(function(t){v.records.boxes.push({name:t.text,wrap:t.wrap??xt(),fill:t.color,actorKeys:[]}),v.records.currentBox=v.records.boxes.slice(-1)[0]},"addBox"),qt=d(function(t,e,o,r){let a=v.records.currentBox;const i=v.records.actors.get(t);if(i){if(v.records.currentBox&&i.box&&v.records.currentBox!==i.box)throw new Error(`A same participant should only be defined in one Box: ${i.name} can't be in '${i.box.name}' and in '${v.records.currentBox.name}' at the same time.`);if(a=i.box?i.box:v.records.currentBox,i.box=a,i&&e===i.name&&o==null)return}if((o==null?void 0:o.text)==null&&(o={text:e,type:r}),(r==null||o.text==null)&&(o={text:e,type:r}),v.records.actors.set(t,{box:a,name:e,description:o.text,wrap:o.wrap??xt(),prevActor:v.records.prevActor,links:{},properties:{},actorCnt:null,rectData:null,type:r??"participant"}),v.records.prevActor){const c=v.records.actors.get(v.records.prevActor);c&&(c.nextActor=t)}v.records.currentBox&&v.records.currentBox.actorKeys.push(t),v.records.prevActor=t},"addActor"),Ge=d(t=>{let e,o=0;if(!t)return 0;for(e=0;e>-",token:"->>-",line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["'ACTIVE_PARTICIPANT'"]},c}return v.records.messages.push({from:t,to:e,message:(o==null?void 0:o.text)??"",wrap:(o==null?void 0:o.wrap)??xt(),type:r,activate:a}),!0},"addSignal"),Je=d(function(){return v.records.boxes.length>0},"hasAtLeastOneBox"),Ze=d(function(){return v.records.boxes.some(t=>t.name)},"hasAtLeastOneBoxWithTitle"),Qe=d(function(){return v.records.messages},"getMessages"),je=d(function(){return v.records.boxes},"getBoxes"),$e=d(function(){return v.records.actors},"getActors"),t0=d(function(){return v.records.createdActors},"getCreatedActors"),e0=d(function(){return v.records.destroyedActors},"getDestroyedActors"),It=d(function(t){return v.records.actors.get(t)},"getActor"),r0=d(function(){return[...v.records.actors.keys()]},"getActorKeys"),s0=d(function(){v.records.sequenceNumbersEnabled=!0},"enableSequenceNumbers"),a0=d(function(){v.records.sequenceNumbersEnabled=!1},"disableSequenceNumbers"),i0=d(()=>v.records.sequenceNumbersEnabled,"showSequenceNumbers"),n0=d(function(t){v.records.wrapEnabled=t},"setWrap"),oe=d(t=>{if(t===void 0)return{};t=t.trim();const e=/^:?wrap:/.exec(t)!==null?!0:/^:?nowrap:/.exec(t)!==null?!1:void 0;return{cleanedText:(e===void 0?t:t.replace(/^:?(?:no)?wrap:/,"")).trim(),wrap:e}},"extractWrap"),xt=d(()=>{var t;return v.records.wrapEnabled!==void 0?v.records.wrapEnabled:((t=at().sequence)==null?void 0:t.wrap)??!1},"autoWrap"),o0=d(function(){v.reset(),We()},"clear"),c0=d(function(t){const e=t.trim(),{wrap:o,cleanedText:r}=oe(e),a={text:r,wrap:o};return J.debug(`parseMessage: ${JSON.stringify(a)}`),a},"parseMessage"),l0=d(function(t){const e=/^((?:rgba?|hsla?)\s*\(.*\)|\w*)(.*)$/.exec(t);let o=e!=null&&e[1]?e[1].trim():"transparent",r=e!=null&&e[2]?e[2].trim():void 0;if(window!=null&&window.CSS)window.CSS.supports("color",o)||(o="transparent",r=t.trim());else{const c=new Option().style;c.color=o,c.color!==o&&(o="transparent",r=t.trim())}const{wrap:a,cleanedText:i}=oe(r);return{text:i?Mt(i,at()):void 0,color:o,wrap:a}},"parseBoxData"),vt={SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25,AUTONUMBER:26,CRITICAL_START:27,CRITICAL_OPTION:28,CRITICAL_END:29,BREAK_START:30,BREAK_END:31,PAR_OVER_START:32,BIDIRECTIONAL_SOLID:33,BIDIRECTIONAL_DOTTED:34},d0={FILLED:0,OPEN:1},h0={LEFTOF:0,RIGHTOF:1,OVER:2},ce=d(function(t,e,o){const r={actor:t,placement:e,message:o.text,wrap:o.wrap??xt()},a=[].concat(t,t);v.records.notes.push(r),v.records.messages.push({from:a[0],to:a[1],message:o.text,wrap:o.wrap??xt(),type:vt.NOTE,placement:e})},"addNote"),le=d(function(t,e){const o=It(t);try{let r=Mt(e.text,at());r=r.replace(/&/g,"&"),r=r.replace(/=/g,"=");const a=JSON.parse(r);Rt(o,a)}catch(r){J.error("error while parsing actor link text",r)}},"addLinks"),p0=d(function(t,e){const o=It(t);try{const r={};let a=Mt(e.text,at());const i=a.indexOf("@");a=a.replace(/&/g,"&"),a=a.replace(/=/g,"=");const c=a.slice(0,i-1).trim(),h=a.slice(i+1).trim();r[c]=h,Rt(o,r)}catch(r){J.error("error while parsing actor link text",r)}},"addALink");function Rt(t,e){if(t.links==null)t.links=e;else for(const o in e)t.links[o]=e[o]}d(Rt,"insertLinks");var de=d(function(t,e){const o=It(t);try{const r=Mt(e.text,at()),a=JSON.parse(r);Ut(o,a)}catch(r){J.error("error while parsing actor properties text",r)}},"addProperties");function Ut(t,e){if(t.properties==null)t.properties=e;else for(const o in e)t.properties[o]=e[o]}d(Ut,"insertProperties");function he(){v.records.currentBox=void 0}d(he,"boxEnd");var pe=d(function(t,e){const o=It(t),r=document.getElementById(e.text);try{const a=r.innerHTML,i=JSON.parse(a);i.properties&&Ut(o,i.properties),i.links&&Rt(o,i.links)}catch(a){J.error("error while parsing actor details text",a)}},"addDetails"),u0=d(function(t,e){if((t==null?void 0:t.properties)!==void 0)return t.properties[e]},"getActorProperty"),ue=d(function(t){if(Array.isArray(t))t.forEach(function(e){ue(e)});else switch(t.type){case"sequenceIndex":v.records.messages.push({from:void 0,to:void 0,message:{start:t.sequenceIndex,step:t.sequenceIndexStep,visible:t.sequenceVisible},wrap:!1,type:t.signalType});break;case"addParticipant":qt(t.actor,t.actor,t.description,t.draw);break;case"createParticipant":if(v.records.actors.has(t.actor))throw new Error("It is not possible to have actors with the same id, even if one is destroyed before the next is created. Use 'AS' aliases to simulate the behavior");v.records.lastCreated=t.actor,qt(t.actor,t.actor,t.description,t.draw),v.records.createdActors.set(t.actor,v.records.messages.length);break;case"destroyParticipant":v.records.lastDestroyed=t.actor,v.records.destroyedActors.set(t.actor,v.records.messages.length);break;case"activeStart":O(t.actor,void 0,void 0,t.signalType);break;case"activeEnd":O(t.actor,void 0,void 0,t.signalType);break;case"addNote":ce(t.actor,t.placement,t.text);break;case"addLinks":le(t.actor,t.text);break;case"addALink":p0(t.actor,t.text);break;case"addProperties":de(t.actor,t.text);break;case"addDetails":pe(t.actor,t.text);break;case"addMessage":if(v.records.lastCreated){if(t.to!==v.records.lastCreated)throw new Error("The created participant "+v.records.lastCreated.name+" does not have an associated creating message after its declaration. Please check the sequence diagram.");v.records.lastCreated=void 0}else if(v.records.lastDestroyed){if(t.to!==v.records.lastDestroyed&&t.from!==v.records.lastDestroyed)throw new Error("The destroyed participant "+v.records.lastDestroyed.name+" does not have an associated destroying message after its declaration. Please check the sequence diagram.");v.records.lastDestroyed=void 0}O(t.from,t.to,t.msg,t.signalType,t.activate);break;case"boxStart":Ue(t.boxData);break;case"boxEnd":he();break;case"loopStart":O(void 0,void 0,t.loopText,t.signalType);break;case"loopEnd":O(void 0,void 0,void 0,t.signalType);break;case"rectStart":O(void 0,void 0,t.color,t.signalType);break;case"rectEnd":O(void 0,void 0,void 0,t.signalType);break;case"optStart":O(void 0,void 0,t.optText,t.signalType);break;case"optEnd":O(void 0,void 0,void 0,t.signalType);break;case"altStart":O(void 0,void 0,t.altText,t.signalType);break;case"else":O(void 0,void 0,t.altText,t.signalType);break;case"altEnd":O(void 0,void 0,void 0,t.signalType);break;case"setAccTitle":se(t.text);break;case"parStart":O(void 0,void 0,t.parText,t.signalType);break;case"and":O(void 0,void 0,t.parText,t.signalType);break;case"parEnd":O(void 0,void 0,void 0,t.signalType);break;case"criticalStart":O(void 0,void 0,t.criticalText,t.signalType);break;case"option":O(void 0,void 0,t.optionText,t.signalType);break;case"criticalEnd":O(void 0,void 0,void 0,t.signalType);break;case"breakStart":O(void 0,void 0,t.breakText,t.signalType);break;case"breakEnd":O(void 0,void 0,void 0,t.signalType);break}},"apply"),te={addActor:qt,addMessage:Xe,addSignal:O,addLinks:le,addDetails:pe,addProperties:de,autoWrap:xt,setWrap:n0,enableSequenceNumbers:s0,disableSequenceNumbers:a0,showSequenceNumbers:i0,getMessages:Qe,getActors:$e,getCreatedActors:t0,getDestroyedActors:e0,getActor:It,getActorKeys:r0,getActorProperty:u0,getAccTitle:Oe,getBoxes:je,getDiagramTitle:Be,setDiagramTitle:Ve,getConfig:d(()=>at().sequence,"getConfig"),clear:o0,parseMessage:c0,parseBoxData:l0,LINETYPE:vt,ARROWTYPE:d0,PLACEMENT:h0,addNote:ce,setAccTitle:se,apply:ue,setAccDescription:Ye,getAccDescription:Fe,hasAtLeastOneBox:Je,hasAtLeastOneBoxWithTitle:Ze},g0=d(t=>`.actor { + stroke: ${t.actorBorder}; + fill: ${t.actorBkg}; + } + + text.actor > tspan { + fill: ${t.actorTextColor}; + stroke: none; + } + + .actor-line { + stroke: ${t.actorLineColor}; + } + + .messageLine0 { + stroke-width: 1.5; + stroke-dasharray: none; + stroke: ${t.signalColor}; + } + + .messageLine1 { + stroke-width: 1.5; + stroke-dasharray: 2, 2; + stroke: ${t.signalColor}; + } + + #arrowhead path { + fill: ${t.signalColor}; + stroke: ${t.signalColor}; + } + + .sequenceNumber { + fill: ${t.sequenceNumberColor}; + } + + #sequencenumber { + fill: ${t.signalColor}; + } + + #crosshead path { + fill: ${t.signalColor}; + stroke: ${t.signalColor}; + } + + .messageText { + fill: ${t.signalTextColor}; + stroke: none; + } + + .labelBox { + stroke: ${t.labelBoxBorderColor}; + fill: ${t.labelBoxBkgColor}; + } + + .labelText, .labelText > tspan { + fill: ${t.labelTextColor}; + stroke: none; + } + + .loopText, .loopText > tspan { + fill: ${t.loopTextColor}; + stroke: none; + } + + .loopLine { + stroke-width: 2px; + stroke-dasharray: 2, 2; + stroke: ${t.labelBoxBorderColor}; + fill: ${t.labelBoxBorderColor}; + } + + .note { + //stroke: #decc93; + stroke: ${t.noteBorderColor}; + fill: ${t.noteBkgColor}; + } + + .noteText, .noteText > tspan { + fill: ${t.noteTextColor}; + stroke: none; + } + + .activation0 { + fill: ${t.activationBkgColor}; + stroke: ${t.activationBorderColor}; + } + + .activation1 { + fill: ${t.activationBkgColor}; + stroke: ${t.activationBorderColor}; + } + + .activation2 { + fill: ${t.activationBkgColor}; + stroke: ${t.activationBorderColor}; + } + + .actorPopupMenu { + position: absolute; + } + + .actorPopupMenuPanel { + position: absolute; + fill: ${t.actorBkg}; + box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); + filter: drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4)); +} + .actor-man line { + stroke: ${t.actorBorder}; + fill: ${t.actorBkg}; + } + .actor-man circle, line { + stroke: ${t.actorBorder}; + fill: ${t.actorBkg}; + stroke-width: 2px; + } +`,"getStyles"),f0=g0,ft=18*2,ge="actor-top",fe="actor-bottom",x0="actor-box",ee="actor-man",Gt=d(function(t,e){return Se(t,e)},"drawRect"),T0=d(function(t,e,o,r,a){if(e.links===void 0||e.links===null||Object.keys(e.links).length===0)return{height:0,width:0};const i=e.links,c=e.actorCnt,h=e.rectData;var p="none";a&&(p="block !important");const s=t.append("g");s.attr("id","actor"+c+"_popup"),s.attr("class","actorPopupMenu"),s.attr("display",p);var f="";h.class!==void 0&&(f=" "+h.class);let E=h.width>o?h.width:o;const g=s.append("rect");if(g.attr("class","actorPopupMenuPanel"+f),g.attr("x",h.x),g.attr("y",h.height),g.attr("fill",h.fill),g.attr("stroke",h.stroke),g.attr("width",E),g.attr("height",h.height),g.attr("rx",h.rx),g.attr("ry",h.ry),i!=null){var T=20;for(let k in i){var m=s.append("a"),w=ae(i[k]);m.attr("xlink:href",w),m.attr("target","_blank"),D0(r)(k,m,h.x+10,h.height+T,E,20,{class:"actor"},r),T+=30}}return g.attr("height",T),{height:h.height+T,width:E}},"drawPopup"),y0=d(function(t){return"var pu = document.getElementById('"+t+"'); if (pu != null) { pu.style.display = pu.style.display == 'block' ? 'none' : 'block'; }"},"popupMenuToggle"),Nt=d(async function(t,e,o=null){let r=t.append("foreignObject");const a=await ie(e.text,Ft()),c=r.append("xhtml:div").attr("style","width: fit-content;").attr("xmlns","http://www.w3.org/1999/xhtml").html(a).node().getBoundingClientRect();if(r.attr("height",Math.round(c.height)).attr("width",Math.round(c.width)),e.class==="noteText"){const h=t.node().firstChild;h.setAttribute("height",c.height+2*e.textMargin);const p=h.getBBox();r.attr("x",Math.round(p.x+p.width/2-c.width/2)).attr("y",Math.round(p.y+p.height/2-c.height/2))}else if(o){let{startx:h,stopx:p,starty:s}=o;if(h>p){const f=h;h=p,p=f}r.attr("x",Math.round(h+Math.abs(h-p)/2-c.width/2)),e.class==="loopText"?r.attr("y",Math.round(s)):r.attr("y",Math.round(s-c.height))}return[r]},"drawKatex"),bt=d(function(t,e){let o=0,r=0;const a=e.text.split(_.lineBreakRegex),[i,c]=ne(e.fontSize);let h=[],p=0,s=d(()=>e.y,"yfunc");if(e.valign!==void 0&&e.textMargin!==void 0&&e.textMargin>0)switch(e.valign){case"top":case"start":s=d(()=>Math.round(e.y+e.textMargin),"yfunc");break;case"middle":case"center":s=d(()=>Math.round(e.y+(o+r+e.textMargin)/2),"yfunc");break;case"bottom":case"end":s=d(()=>Math.round(e.y+(o+r+2*e.textMargin)-e.textMargin),"yfunc");break}if(e.anchor!==void 0&&e.textMargin!==void 0&&e.width!==void 0)switch(e.anchor){case"left":case"start":e.x=Math.round(e.x+e.textMargin),e.anchor="start",e.dominantBaseline="middle",e.alignmentBaseline="middle";break;case"middle":case"center":e.x=Math.round(e.x+e.width/2),e.anchor="middle",e.dominantBaseline="middle",e.alignmentBaseline="middle";break;case"right":case"end":e.x=Math.round(e.x+e.width-e.textMargin),e.anchor="end",e.dominantBaseline="middle",e.alignmentBaseline="middle";break}for(let[f,E]of a.entries()){e.textMargin!==void 0&&e.textMargin===0&&i!==void 0&&(p=f*i);const g=t.append("text");g.attr("x",e.x),g.attr("y",s()),e.anchor!==void 0&&g.attr("text-anchor",e.anchor).attr("dominant-baseline",e.dominantBaseline).attr("alignment-baseline",e.alignmentBaseline),e.fontFamily!==void 0&&g.style("font-family",e.fontFamily),c!==void 0&&g.style("font-size",c),e.fontWeight!==void 0&&g.style("font-weight",e.fontWeight),e.fill!==void 0&&g.attr("fill",e.fill),e.class!==void 0&&g.attr("class",e.class),e.dy!==void 0?g.attr("dy",e.dy):p!==0&&g.attr("dy",p);const T=E||He;if(e.tspan){const m=g.append("tspan");m.attr("x",e.x),e.fill!==void 0&&m.attr("fill",e.fill),m.text(T)}else g.text(T);e.valign!==void 0&&e.textMargin!==void 0&&e.textMargin>0&&(r+=(g._groups||g)[0][0].getBBox().height,o=r),h.push(g)}return h},"drawText"),xe=d(function(t,e){function o(a,i,c,h,p){return a+","+i+" "+(a+c)+","+i+" "+(a+c)+","+(i+h-p)+" "+(a+c-p*1.2)+","+(i+h)+" "+a+","+(i+h)}d(o,"genPoints");const r=t.append("polygon");return r.attr("points",o(e.x,e.y,e.width,e.height,7)),r.attr("class","labelBox"),e.y=e.y+e.height/2,bt(t,e),r},"drawLabel"),ct=-1,Te=d((t,e,o,r)=>{t.select&&o.forEach(a=>{const i=e.get(a),c=t.select("#actor"+i.actorCnt);!r.mirrorActors&&i.stopy?c.attr("y2",i.stopy+i.height/2):r.mirrorActors&&c.attr("y2",i.stopy)})},"fixLifeLineHeights"),E0=d(function(t,e,o,r){var T,m;const a=r?e.stopy:e.starty,i=e.x+e.width/2,c=a+e.height,h=t.append("g").lower();var p=h;r||(ct++,Object.keys(e.links||{}).length&&!o.forceMenus&&p.attr("onclick",y0(`actor${ct}_popup`)).attr("cursor","pointer"),p.append("line").attr("id","actor"+ct).attr("x1",i).attr("y1",c).attr("x2",i).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",e.name),p=h.append("g"),e.actorCnt=ct,e.links!=null&&p.attr("id","root-"+ct));const s=St();var f="actor";(T=e.properties)!=null&&T.class?f=e.properties.class:s.fill="#eaeaea",r?f+=` ${fe}`:f+=` ${ge}`,s.x=e.x,s.y=a,s.width=e.width,s.height=e.height,s.class=f,s.rx=3,s.ry=3,s.name=e.name;const E=Gt(p,s);if(e.rectData=s,(m=e.properties)!=null&&m.icon){const w=e.properties.icon.trim();w.charAt(0)==="@"?Re(p,s.x+s.width-20,s.y+10,w.substr(1)):De(p,s.x+s.width-20,s.y+10,w)}Xt(o,lt(e.description))(e.description,p,s.x,s.y,s.width,s.height,{class:`actor ${x0}`},o);let g=e.height;if(E.node){const w=E.node().getBBox();e.height=w.height,g=w.height}return g},"drawActorTypeParticipant"),b0=d(function(t,e,o,r){const a=r?e.stopy:e.starty,i=e.x+e.width/2,c=a+80,h=t.append("g").lower();r||(ct++,h.append("line").attr("id","actor"+ct).attr("x1",i).attr("y1",c).attr("x2",i).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",e.name),e.actorCnt=ct);const p=t.append("g");let s=ee;r?s+=` ${fe}`:s+=` ${ge}`,p.attr("class",s),p.attr("name",e.name);const f=St();f.x=e.x,f.y=a,f.fill="#eaeaea",f.width=e.width,f.height=e.height,f.class="actor",f.rx=3,f.ry=3,p.append("line").attr("id","actor-man-torso"+ct).attr("x1",i).attr("y1",a+25).attr("x2",i).attr("y2",a+45),p.append("line").attr("id","actor-man-arms"+ct).attr("x1",i-ft/2).attr("y1",a+33).attr("x2",i+ft/2).attr("y2",a+33),p.append("line").attr("x1",i-ft/2).attr("y1",a+60).attr("x2",i).attr("y2",a+45),p.append("line").attr("x1",i).attr("y1",a+45).attr("x2",i+ft/2-2).attr("y2",a+60);const E=p.append("circle");E.attr("cx",e.x+e.width/2),E.attr("cy",a+10),E.attr("r",15),E.attr("width",e.width),E.attr("height",e.height);const g=p.node().getBBox();return e.height=g.height,Xt(o,lt(e.description))(e.description,p,f.x,f.y+35,f.width,f.height,{class:`actor ${ee}`},o),e.height},"drawActorTypeActor"),m0=d(async function(t,e,o,r){switch(e.type){case"actor":return await b0(t,e,o,r);case"participant":return await E0(t,e,o,r)}},"drawActor"),v0=d(function(t,e,o){const a=t.append("g");ye(a,e),e.name&&Xt(o)(e.name,a,e.x,e.y+(e.textMaxHeight||0)/2,e.width,0,{class:"text"},o),a.lower()},"drawBox"),w0=d(function(t){return t.append("g")},"anchorElement"),I0=d(function(t,e,o,r,a){const i=St(),c=e.anchored;i.x=e.startx,i.y=e.starty,i.class="activation"+a%3,i.width=e.stopx-e.startx,i.height=o-e.starty,Gt(c,i)},"drawActivation"),_0=d(async function(t,e,o,r){const{boxMargin:a,boxTextMargin:i,labelBoxHeight:c,labelBoxWidth:h,messageFontFamily:p,messageFontSize:s,messageFontWeight:f}=r,E=t.append("g"),g=d(function(w,k,V,M){return E.append("line").attr("x1",w).attr("y1",k).attr("x2",V).attr("y2",M).attr("class","loopLine")},"drawLoopLine");g(e.startx,e.starty,e.stopx,e.starty),g(e.stopx,e.starty,e.stopx,e.stopy),g(e.startx,e.stopy,e.stopx,e.stopy),g(e.startx,e.starty,e.startx,e.stopy),e.sections!==void 0&&e.sections.forEach(function(w){g(e.startx,w.y,e.stopx,w.y).style("stroke-dasharray","3, 3")});let T=Kt();T.text=o,T.x=e.startx,T.y=e.starty,T.fontFamily=p,T.fontSize=s,T.fontWeight=f,T.anchor="middle",T.valign="middle",T.tspan=!1,T.width=h||50,T.height=c||20,T.textMargin=i,T.class="labelText",xe(E,T),T=Ee(),T.text=e.title,T.x=e.startx+h/2+(e.stopx-e.startx)/2,T.y=e.starty+a+i,T.anchor="middle",T.valign="middle",T.textMargin=i,T.class="loopText",T.fontFamily=p,T.fontSize=s,T.fontWeight=f,T.wrap=!0;let m=lt(T.text)?await Nt(E,T,e):bt(E,T);if(e.sectionTitles!==void 0){for(const[w,k]of Object.entries(e.sectionTitles))if(k.message){T.text=k.message,T.x=e.startx+(e.stopx-e.startx)/2,T.y=e.sections[w].y+a+i,T.class="loopText",T.anchor="middle",T.valign="middle",T.tspan=!1,T.fontFamily=p,T.fontSize=s,T.fontWeight=f,T.wrap=e.wrap,lt(T.text)?(e.starty=e.sections[w].y,await Nt(E,T,e)):bt(E,T);let V=Math.round(m.map(M=>(M._groups||M)[0][0].getBBox().height).reduce((M,Y)=>M+Y));e.sections[w].height+=V-(a+i)}}return e.height=Math.round(e.stopy-e.starty),E},"drawLoop"),ye=d(function(t,e){Me(t,e)},"drawBackgroundRect"),L0=d(function(t){t.append("defs").append("symbol").attr("id","database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")},"insertDatabaseIcon"),P0=d(function(t){t.append("defs").append("symbol").attr("id","computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z")},"insertComputerIcon"),A0=d(function(t){t.append("defs").append("symbol").attr("id","clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")},"insertClockIcon"),k0=d(function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",7.9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto-start-reverse").append("path").attr("d","M -1 0 L 10 5 L 0 10 z")},"insertArrowHead"),N0=d(function(t){t.append("defs").append("marker").attr("id","filled-head").attr("refX",15.5).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"insertArrowFilledHead"),S0=d(function(t){t.append("defs").append("marker").attr("id","sequencenumber").attr("refX",15).attr("refY",15).attr("markerWidth",60).attr("markerHeight",40).attr("orient","auto").append("circle").attr("cx",15).attr("cy",15).attr("r",6)},"insertSequenceNumber"),M0=d(function(t){t.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",4).attr("refY",4.5).append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1pt").attr("d","M 1,2 L 6,7 M 6,2 L 1,7")},"insertArrowCrossHead"),Ee=d(function(){return{x:0,y:0,fill:void 0,anchor:void 0,style:"#666",width:void 0,height:void 0,textMargin:0,rx:0,ry:0,tspan:!0,valign:void 0}},"getTextObj"),R0=d(function(){return{x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0}},"getNoteRect"),Xt=function(){function t(i,c,h,p,s,f,E){const g=c.append("text").attr("x",h+s/2).attr("y",p+f/2+5).style("text-anchor","middle").text(i);a(g,E)}d(t,"byText");function e(i,c,h,p,s,f,E,g){const{actorFontSize:T,actorFontFamily:m,actorFontWeight:w}=g,[k,V]=ne(T),M=i.split(_.lineBreakRegex);for(let Y=0;Yt.height||0))+(this.loops.length===0?0:this.loops.map(t=>t.height||0).reduce((t,e)=>t+e))+(this.messages.length===0?0:this.messages.map(t=>t.height||0).reduce((t,e)=>t+e))+(this.notes.length===0?0:this.notes.map(t=>t.height||0).reduce((t,e)=>t+e))},"getHeight"),clear:d(function(){this.actors=[],this.boxes=[],this.loops=[],this.messages=[],this.notes=[]},"clear"),addBox:d(function(t){this.boxes.push(t)},"addBox"),addActor:d(function(t){this.actors.push(t)},"addActor"),addLoop:d(function(t){this.loops.push(t)},"addLoop"),addMessage:d(function(t){this.messages.push(t)},"addMessage"),addNote:d(function(t){this.notes.push(t)},"addNote"),lastActor:d(function(){return this.actors[this.actors.length-1]},"lastActor"),lastLoop:d(function(){return this.loops[this.loops.length-1]},"lastLoop"),lastMessage:d(function(){return this.messages[this.messages.length-1]},"lastMessage"),lastNote:d(function(){return this.notes[this.notes.length-1]},"lastNote"),actors:[],boxes:[],loops:[],messages:[],notes:[]},init:d(function(){this.sequenceItems=[],this.activations=[],this.models.clear(),this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0,ve(at())},"init"),updateVal:d(function(t,e,o,r){t[e]===void 0?t[e]=o:t[e]=r(o,t[e])},"updateVal"),updateBounds:d(function(t,e,o,r){const a=this;let i=0;function c(h){return d(function(s){i++;const f=a.sequenceItems.length-i+1;a.updateVal(s,"starty",e-f*n.boxMargin,Math.min),a.updateVal(s,"stopy",r+f*n.boxMargin,Math.max),a.updateVal(x.data,"startx",t-f*n.boxMargin,Math.min),a.updateVal(x.data,"stopx",o+f*n.boxMargin,Math.max),h!=="activation"&&(a.updateVal(s,"startx",t-f*n.boxMargin,Math.min),a.updateVal(s,"stopx",o+f*n.boxMargin,Math.max),a.updateVal(x.data,"starty",e-f*n.boxMargin,Math.min),a.updateVal(x.data,"stopy",r+f*n.boxMargin,Math.max))},"updateItemBounds")}d(c,"updateFn"),this.sequenceItems.forEach(c()),this.activations.forEach(c("activation"))},"updateBounds"),insert:d(function(t,e,o,r){const a=_.getMin(t,o),i=_.getMax(t,o),c=_.getMin(e,r),h=_.getMax(e,r);this.updateVal(x.data,"startx",a,Math.min),this.updateVal(x.data,"starty",c,Math.min),this.updateVal(x.data,"stopx",i,Math.max),this.updateVal(x.data,"stopy",h,Math.max),this.updateBounds(a,c,i,h)},"insert"),newActivation:d(function(t,e,o){const r=o.get(t.from),a=Dt(t.from).length||0,i=r.x+r.width/2+(a-1)*n.activationWidth/2;this.activations.push({startx:i,starty:this.verticalPos+2,stopx:i+n.activationWidth,stopy:void 0,actor:t.from,anchored:B.anchorElement(e)})},"newActivation"),endActivation:d(function(t){const e=this.activations.map(function(o){return o.actor}).lastIndexOf(t.from);return this.activations.splice(e,1)[0]},"endActivation"),createLoop:d(function(t={message:void 0,wrap:!1,width:void 0},e){return{startx:void 0,starty:this.verticalPos,stopx:void 0,stopy:void 0,title:t.message,wrap:t.wrap,width:t.width,height:0,fill:e}},"createLoop"),newLoop:d(function(t={message:void 0,wrap:!1,width:void 0},e){this.sequenceItems.push(this.createLoop(t,e))},"newLoop"),endLoop:d(function(){return this.sequenceItems.pop()},"endLoop"),isLoopOverlap:d(function(){return this.sequenceItems.length?this.sequenceItems[this.sequenceItems.length-1].overlap:!1},"isLoopOverlap"),addSectionToLoop:d(function(t){const e=this.sequenceItems.pop();e.sections=e.sections||[],e.sectionTitles=e.sectionTitles||[],e.sections.push({y:x.getVerticalPos(),height:0}),e.sectionTitles.push(t),this.sequenceItems.push(e)},"addSectionToLoop"),saveVerticalPos:d(function(){this.isLoopOverlap()&&(this.savedVerticalPos=this.verticalPos)},"saveVerticalPos"),resetVerticalPos:d(function(){this.isLoopOverlap()&&(this.verticalPos=this.savedVerticalPos)},"resetVerticalPos"),bumpVerticalPos:d(function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=_.getMax(this.data.stopy,this.verticalPos)},"bumpVerticalPos"),getVerticalPos:d(function(){return this.verticalPos},"getVerticalPos"),getBounds:d(function(){return{bounds:this.data,models:this.models}},"getBounds")},C0=d(async function(t,e){x.bumpVerticalPos(n.boxMargin),e.height=n.boxMargin,e.starty=x.getVerticalPos();const o=St();o.x=e.startx,o.y=e.starty,o.width=e.width||n.width,o.class="note";const r=t.append("g"),a=B.drawRect(r,o),i=Kt();i.x=e.startx,i.y=e.starty,i.width=o.width,i.dy="1em",i.text=e.message,i.class="noteText",i.fontFamily=n.noteFontFamily,i.fontSize=n.noteFontSize,i.fontWeight=n.noteFontWeight,i.anchor=n.noteAlign,i.textMargin=n.noteMargin,i.valign="center";const c=lt(i.text)?await Nt(r,i):bt(r,i),h=Math.round(c.map(p=>(p._groups||p)[0][0].getBBox().height).reduce((p,s)=>p+s));a.attr("height",h+2*n.noteMargin),e.height+=h+2*n.noteMargin,x.bumpVerticalPos(h+2*n.noteMargin),e.stopy=e.starty+h+2*n.noteMargin,e.stopx=e.startx+o.width,x.insert(e.startx,e.starty,e.stopx,e.stopy),x.models.addNote(e)},"drawNote"),Tt=d(t=>({fontFamily:t.messageFontFamily,fontSize:t.messageFontSize,fontWeight:t.messageFontWeight}),"messageFont"),Et=d(t=>({fontFamily:t.noteFontFamily,fontSize:t.noteFontSize,fontWeight:t.noteFontWeight}),"noteFont"),zt=d(t=>({fontFamily:t.actorFontFamily,fontSize:t.actorFontSize,fontWeight:t.actorFontWeight}),"actorFont");async function be(t,e){x.bumpVerticalPos(10);const{startx:o,stopx:r,message:a}=e,i=_.splitBreaks(a).length,c=lt(a),h=c?await wt(a,at()):F.calculateTextDimensions(a,Tt(n));if(!c){const E=h.height/i;e.height+=E,x.bumpVerticalPos(E)}let p,s=h.height-10;const f=h.width;if(o===r){p=x.getVerticalPos()+s,n.rightAngles||(s+=n.boxMargin,p=x.getVerticalPos()+s),s+=30;const E=_.getMax(f/2,n.width/2);x.insert(o-E,x.getVerticalPos()-10+s,r+E,x.getVerticalPos()+30+s)}else s+=n.boxMargin,p=x.getVerticalPos()+s,x.insert(o,p-10,r,p);return x.bumpVerticalPos(s),e.height+=s,e.stopy=e.starty+e.height,x.insert(e.fromBounds,e.starty,e.toBounds,e.stopy),p}d(be,"boundMessage");var O0=d(async function(t,e,o,r){const{startx:a,stopx:i,starty:c,message:h,type:p,sequenceIndex:s,sequenceVisible:f}=e,E=F.calculateTextDimensions(h,Tt(n)),g=Kt();g.x=a,g.y=c+10,g.width=i-a,g.class="messageText",g.dy="1em",g.text=h,g.fontFamily=n.messageFontFamily,g.fontSize=n.messageFontSize,g.fontWeight=n.messageFontWeight,g.anchor=n.messageAlign,g.valign="center",g.textMargin=n.wrapPadding,g.tspan=!1,lt(g.text)?await Nt(t,g,{startx:a,stopx:i,starty:o}):bt(t,g);const T=E.width;let m;a===i?n.rightAngles?m=t.append("path").attr("d",`M ${a},${o} H ${a+_.getMax(n.width/2,T/2)} V ${o+25} H ${a}`):m=t.append("path").attr("d","M "+a+","+o+" C "+(a+60)+","+(o-10)+" "+(a+60)+","+(o+30)+" "+a+","+(o+20)):(m=t.append("line"),m.attr("x1",a),m.attr("y1",o),m.attr("x2",i),m.attr("y2",o)),p===r.db.LINETYPE.DOTTED||p===r.db.LINETYPE.DOTTED_CROSS||p===r.db.LINETYPE.DOTTED_POINT||p===r.db.LINETYPE.DOTTED_OPEN||p===r.db.LINETYPE.BIDIRECTIONAL_DOTTED?(m.style("stroke-dasharray","3, 3"),m.attr("class","messageLine1")):m.attr("class","messageLine0");let w="";n.arrowMarkerAbsolute&&(w=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,w=w.replace(/\(/g,"\\("),w=w.replace(/\)/g,"\\)")),m.attr("stroke-width",2),m.attr("stroke","none"),m.style("fill","none"),(p===r.db.LINETYPE.SOLID||p===r.db.LINETYPE.DOTTED)&&m.attr("marker-end","url("+w+"#arrowhead)"),(p===r.db.LINETYPE.BIDIRECTIONAL_SOLID||p===r.db.LINETYPE.BIDIRECTIONAL_DOTTED)&&(m.attr("marker-start","url("+w+"#arrowhead)"),m.attr("marker-end","url("+w+"#arrowhead)")),(p===r.db.LINETYPE.SOLID_POINT||p===r.db.LINETYPE.DOTTED_POINT)&&m.attr("marker-end","url("+w+"#filled-head)"),(p===r.db.LINETYPE.SOLID_CROSS||p===r.db.LINETYPE.DOTTED_CROSS)&&m.attr("marker-end","url("+w+"#crosshead)"),(f||n.showSequenceNumbers)&&(m.attr("marker-start","url("+w+"#sequencenumber)"),t.append("text").attr("x",a).attr("y",o+4).attr("font-family","sans-serif").attr("font-size","12px").attr("text-anchor","middle").attr("class","sequenceNumber").text(s))},"drawMessage"),B0=d(function(t,e,o,r,a,i,c){let h=0,p=0,s,f=0;for(const E of r){const g=e.get(E),T=g.box;s&&s!=T&&(c||x.models.addBox(s),p+=n.boxMargin+s.margin),T&&T!=s&&(c||(T.x=h+p,T.y=a),p+=T.margin),g.width=g.width||n.width,g.height=_.getMax(g.height||n.height,n.height),g.margin=g.margin||n.actorMargin,f=_.getMax(f,g.height),o.get(g.name)&&(p+=g.width/2),g.x=h+p,g.starty=x.getVerticalPos(),x.insert(g.x,a,g.x+g.width,g.height),h+=g.width+p,g.box&&(g.box.width=h+T.margin-g.box.x),p=g.margin,s=g.box,x.models.addActor(g)}s&&!c&&x.models.addBox(s),x.bumpVerticalPos(f)},"addActorRenderingData"),Ht=d(async function(t,e,o,r){if(r){let a=0;x.bumpVerticalPos(n.boxMargin*2);for(const i of o){const c=e.get(i);c.stopy||(c.stopy=x.getVerticalPos());const h=await B.drawActor(t,c,n,!0);a=_.getMax(a,h)}x.bumpVerticalPos(a+n.boxMargin)}else for(const a of o){const i=e.get(a);await B.drawActor(t,i,n,!1)}},"drawActors"),me=d(function(t,e,o,r){let a=0,i=0;for(const c of o){const h=e.get(c),p=Y0(h),s=B.drawPopup(t,h,p,n,n.forceMenus,r);s.height>a&&(a=s.height),s.width+h.x>i&&(i=s.width+h.x)}return{maxHeight:a,maxWidth:i}},"drawActorsPopup"),ve=d(function(t){qe(n,t),t.fontFamily&&(n.actorFontFamily=n.noteFontFamily=n.messageFontFamily=t.fontFamily),t.fontSize&&(n.actorFontSize=n.noteFontSize=n.messageFontSize=t.fontSize),t.fontWeight&&(n.actorFontWeight=n.noteFontWeight=n.messageFontWeight=t.fontWeight)},"setConf"),Dt=d(function(t){return x.activations.filter(function(e){return e.actor===t})},"actorActivations"),re=d(function(t,e){const o=e.get(t),r=Dt(t),a=r.reduce(function(c,h){return _.getMin(c,h.startx)},o.x+o.width/2-1),i=r.reduce(function(c,h){return _.getMax(c,h.stopx)},o.x+o.width/2+1);return[a,i]},"activationBounds");function nt(t,e,o,r,a){x.bumpVerticalPos(o);let i=r;if(e.id&&e.message&&t[e.id]){const c=t[e.id].width,h=Tt(n);e.message=F.wrapLabel(`[${e.message}]`,c-2*n.wrapPadding,h),e.width=c,e.wrap=!0;const p=F.calculateTextDimensions(e.message,h),s=_.getMax(p.height,n.labelBoxHeight);i=r+s,J.debug(`${s} - ${e.message}`)}a(e),x.bumpVerticalPos(i)}d(nt,"adjustLoopHeightForWrap");function we(t,e,o,r,a,i,c){function h(s,f){s.x{y.add(P.from),y.add(P.to)}),m=m.filter(P=>y.has(P))}B0(s,f,E,m,0,w,!1);const C=await q0(w,f,Y,r);B.insertArrowHead(s),B.insertArrowCrossHead(s),B.insertArrowFilledHead(s),B.insertSequenceNumber(s);function z(y,P){const $=x.endActivation(y);$.starty+18>P&&($.starty=P-6,P+=12),B.drawActivation(s,$,P,n,Dt(y.from).length),x.insert($.startx,P-10,$.stopx,P)}d(z,"activeEnd");let H=1,Z=1;const et=[],K=[];let U=0;for(const y of w){let P,$,it;switch(y.type){case r.db.LINETYPE.NOTE:x.resetVerticalPos(),$=y.noteModel,await C0(s,$);break;case r.db.LINETYPE.ACTIVE_START:x.newActivation(y,s,f);break;case r.db.LINETYPE.ACTIVE_END:z(y,x.getVerticalPos());break;case r.db.LINETYPE.LOOP_START:nt(C,y,n.boxMargin,n.boxMargin+n.boxTextMargin,N=>x.newLoop(N));break;case r.db.LINETYPE.LOOP_END:P=x.endLoop(),await B.drawLoop(s,P,"loop",n),x.bumpVerticalPos(P.stopy-x.getVerticalPos()),x.models.addLoop(P);break;case r.db.LINETYPE.RECT_START:nt(C,y,n.boxMargin,n.boxMargin,N=>x.newLoop(void 0,N.message));break;case r.db.LINETYPE.RECT_END:P=x.endLoop(),K.push(P),x.models.addLoop(P),x.bumpVerticalPos(P.stopy-x.getVerticalPos());break;case r.db.LINETYPE.OPT_START:nt(C,y,n.boxMargin,n.boxMargin+n.boxTextMargin,N=>x.newLoop(N));break;case r.db.LINETYPE.OPT_END:P=x.endLoop(),await B.drawLoop(s,P,"opt",n),x.bumpVerticalPos(P.stopy-x.getVerticalPos()),x.models.addLoop(P);break;case r.db.LINETYPE.ALT_START:nt(C,y,n.boxMargin,n.boxMargin+n.boxTextMargin,N=>x.newLoop(N));break;case r.db.LINETYPE.ALT_ELSE:nt(C,y,n.boxMargin+n.boxTextMargin,n.boxMargin,N=>x.addSectionToLoop(N));break;case r.db.LINETYPE.ALT_END:P=x.endLoop(),await B.drawLoop(s,P,"alt",n),x.bumpVerticalPos(P.stopy-x.getVerticalPos()),x.models.addLoop(P);break;case r.db.LINETYPE.PAR_START:case r.db.LINETYPE.PAR_OVER_START:nt(C,y,n.boxMargin,n.boxMargin+n.boxTextMargin,N=>x.newLoop(N)),x.saveVerticalPos();break;case r.db.LINETYPE.PAR_AND:nt(C,y,n.boxMargin+n.boxTextMargin,n.boxMargin,N=>x.addSectionToLoop(N));break;case r.db.LINETYPE.PAR_END:P=x.endLoop(),await B.drawLoop(s,P,"par",n),x.bumpVerticalPos(P.stopy-x.getVerticalPos()),x.models.addLoop(P);break;case r.db.LINETYPE.AUTONUMBER:H=y.message.start||H,Z=y.message.step||Z,y.message.visible?r.db.enableSequenceNumbers():r.db.disableSequenceNumbers();break;case r.db.LINETYPE.CRITICAL_START:nt(C,y,n.boxMargin,n.boxMargin+n.boxTextMargin,N=>x.newLoop(N));break;case r.db.LINETYPE.CRITICAL_OPTION:nt(C,y,n.boxMargin+n.boxTextMargin,n.boxMargin,N=>x.addSectionToLoop(N));break;case r.db.LINETYPE.CRITICAL_END:P=x.endLoop(),await B.drawLoop(s,P,"critical",n),x.bumpVerticalPos(P.stopy-x.getVerticalPos()),x.models.addLoop(P);break;case r.db.LINETYPE.BREAK_START:nt(C,y,n.boxMargin,n.boxMargin+n.boxTextMargin,N=>x.newLoop(N));break;case r.db.LINETYPE.BREAK_END:P=x.endLoop(),await B.drawLoop(s,P,"break",n),x.bumpVerticalPos(P.stopy-x.getVerticalPos()),x.models.addLoop(P);break;default:try{it=y.msgModel,it.starty=x.getVerticalPos(),it.sequenceIndex=H,it.sequenceVisible=r.db.showSequenceNumbers();const N=await be(s,it);we(y,it,N,U,f,E,g),et.push({messageModel:it,lineStartY:N}),x.models.addMessage(it)}catch(N){J.error("error while drawing message",N)}}[r.db.LINETYPE.SOLID_OPEN,r.db.LINETYPE.DOTTED_OPEN,r.db.LINETYPE.SOLID,r.db.LINETYPE.DOTTED,r.db.LINETYPE.SOLID_CROSS,r.db.LINETYPE.DOTTED_CROSS,r.db.LINETYPE.SOLID_POINT,r.db.LINETYPE.DOTTED_POINT,r.db.LINETYPE.BIDIRECTIONAL_SOLID,r.db.LINETYPE.BIDIRECTIONAL_DOTTED].includes(y.type)&&(H=H+Z),U++}J.debug("createdActors",E),J.debug("destroyedActors",g),await Ht(s,f,m,!1);for(const y of et)await O0(s,y.messageModel,y.lineStartY,r);n.mirrorActors&&await Ht(s,f,m,!0),K.forEach(y=>B.drawBackgroundRect(s,y)),Te(s,f,m,n);for(const y of x.models.boxes)y.height=x.getVerticalPos()-y.y,x.insert(y.x,y.y,y.x+y.width,y.height),y.startx=y.x,y.starty=y.y,y.stopx=y.startx+y.width,y.stopy=y.starty+y.height,y.stroke="rgb(0,0,0, 0.5)",B.drawBox(s,y,n);V&&x.bumpVerticalPos(n.boxMargin);const q=me(s,f,m,p),{bounds:R}=x.getBounds();R.startx===void 0&&(R.startx=0),R.starty===void 0&&(R.starty=0),R.stopx===void 0&&(R.stopx=0),R.stopy===void 0&&(R.stopy=0);let Q=R.stopy-R.starty;Q{const c=Tt(n);let h=i.actorKeys.reduce((f,E)=>f+=t.get(E).width+(t.get(E).margin||0),0);h-=2*n.boxTextMargin,i.wrap&&(i.name=F.wrapLabel(i.name,h-2*n.wrapPadding,c));const p=F.calculateTextDimensions(i.name,c);a=_.getMax(p.height,a);const s=_.getMax(h,p.width+2*n.wrapPadding);if(i.margin=n.boxTextMargin,hi.textMaxHeight=a),_.getMax(r,n.height)}d(_e,"calculateActorMargins");var F0=d(async function(t,e,o){const r=e.get(t.from),a=e.get(t.to),i=r.x,c=a.x,h=t.wrap&&t.message;let p=lt(t.message)?await wt(t.message,at()):F.calculateTextDimensions(h?F.wrapLabel(t.message,n.width,Et(n)):t.message,Et(n));const s={width:h?n.width:_.getMax(n.width,p.width+2*n.noteMargin),height:0,startx:r.x,stopx:0,starty:0,stopy:0,message:t.message};return t.placement===o.db.PLACEMENT.RIGHTOF?(s.width=h?_.getMax(n.width,p.width):_.getMax(r.width/2+a.width/2,p.width+2*n.noteMargin),s.startx=i+(r.width+n.actorMargin)/2):t.placement===o.db.PLACEMENT.LEFTOF?(s.width=h?_.getMax(n.width,p.width+2*n.noteMargin):_.getMax(r.width/2+a.width/2,p.width+2*n.noteMargin),s.startx=i-s.width+(r.width-n.actorMargin)/2):t.to===t.from?(p=F.calculateTextDimensions(h?F.wrapLabel(t.message,_.getMax(n.width,r.width),Et(n)):t.message,Et(n)),s.width=h?_.getMax(n.width,r.width):_.getMax(r.width,n.width,p.width+2*n.noteMargin),s.startx=i+(r.width-s.width)/2):(s.width=Math.abs(i+r.width/2-(c+a.width/2))+n.actorMargin,s.startx=i2,E=d(w=>h?-w:w,"adjustValue");t.from===t.to?s=p:(t.activate&&!f&&(s+=E(n.activationWidth/2-1)),[o.db.LINETYPE.SOLID_OPEN,o.db.LINETYPE.DOTTED_OPEN].includes(t.type)||(s+=E(3)),[o.db.LINETYPE.BIDIRECTIONAL_SOLID,o.db.LINETYPE.BIDIRECTIONAL_DOTTED].includes(t.type)&&(p-=E(3)));const g=[r,a,i,c],T=Math.abs(p-s);t.wrap&&t.message&&(t.message=F.wrapLabel(t.message,_.getMax(T+2*n.wrapPadding,n.width),Tt(n)));const m=F.calculateTextDimensions(t.message,Tt(n));return{width:_.getMax(t.wrap?0:m.width+2*n.wrapPadding,T+2*n.wrapPadding,n.width),height:0,startx:p,stopx:s,starty:0,stopy:0,message:t.message,type:t.type,wrap:t.wrap,fromBounds:Math.min.apply(null,g),toBounds:Math.max.apply(null,g)}},"buildMessageModel"),q0=d(async function(t,e,o,r){const a={},i=[];let c,h,p;for(const s of t){switch(s.id=F.random({length:10}),s.type){case r.db.LINETYPE.LOOP_START:case r.db.LINETYPE.ALT_START:case r.db.LINETYPE.OPT_START:case r.db.LINETYPE.PAR_START:case r.db.LINETYPE.PAR_OVER_START:case r.db.LINETYPE.CRITICAL_START:case r.db.LINETYPE.BREAK_START:i.push({id:s.id,msg:s.message,from:Number.MAX_SAFE_INTEGER,to:Number.MIN_SAFE_INTEGER,width:0});break;case r.db.LINETYPE.ALT_ELSE:case r.db.LINETYPE.PAR_AND:case r.db.LINETYPE.CRITICAL_OPTION:s.message&&(c=i.pop(),a[c.id]=c,a[s.id]=c,i.push(c));break;case r.db.LINETYPE.LOOP_END:case r.db.LINETYPE.ALT_END:case r.db.LINETYPE.OPT_END:case r.db.LINETYPE.PAR_END:case r.db.LINETYPE.CRITICAL_END:case r.db.LINETYPE.BREAK_END:c=i.pop(),a[c.id]=c;break;case r.db.LINETYPE.ACTIVE_START:{const E=e.get(s.from?s.from:s.to.actor),g=Dt(s.from?s.from:s.to.actor).length,T=E.x+E.width/2+(g-1)*n.activationWidth/2,m={startx:T,stopx:T+n.activationWidth,actor:s.from,enabled:!0};x.activations.push(m)}break;case r.db.LINETYPE.ACTIVE_END:{const E=x.activations.map(g=>g.actor).lastIndexOf(s.from);x.activations.splice(E,1).splice(0,1)}break}s.placement!==void 0?(h=await F0(s,e,r),s.noteModel=h,i.forEach(E=>{c=E,c.from=_.getMin(c.from,h.startx),c.to=_.getMax(c.to,h.startx+h.width),c.width=_.getMax(c.width,Math.abs(c.from-c.to))-n.labelBoxWidth})):(p=W0(s,e,r),s.msgModel=p,p.startx&&p.stopx&&i.length>0&&i.forEach(E=>{if(c=E,p.startx===p.stopx){const g=e.get(s.from),T=e.get(s.to);c.from=_.getMin(g.x-p.width/2,g.x-g.width/2,c.from),c.to=_.getMax(T.x+p.width/2,T.x+g.width/2,c.to),c.width=_.getMax(c.width,Math.abs(c.to-c.from))-n.labelBoxWidth}else c.from=_.getMin(p.startx,c.from),c.to=_.getMax(p.stopx,c.to),c.width=_.getMax(c.width,p.width)-n.labelBoxWidth}))}return x.activations=[],J.debug("Loop type widths:",a),a},"calculateLoopBounds"),z0={bounds:x,drawActors:Ht,drawActorsPopup:me,setConf:ve,draw:V0},J0={parser:Ke,db:te,renderer:z0,styles:f0,init:d(({wrap:t})=>{te.setWrap(t)},"init")};export{J0 as diagram}; diff --git a/assets/chunks/stateDiagram-GNSP7T6Y.DgWAPd02.js b/assets/chunks/stateDiagram-GNSP7T6Y.DgWAPd02.js new file mode 100644 index 000000000..0f89cf220 --- /dev/null +++ b/assets/chunks/stateDiagram-GNSP7T6Y.DgWAPd02.js @@ -0,0 +1 @@ +import{s as W,a as N,b as P}from"./chunk-JZAHL7AJ.Ca2Vb27U.js";import{_ as u,d as t,j as H,l as S,k as C,e as z,a1 as U,a8 as F,v as O}from"../app.D0Wo8w0i.js";import{G as J}from"./graph.Bl1hHz-h.js";import{l as X}from"./layout.BQOWCxFK.js";import"./chunk-EICJXIV7.Cx-DrDyu.js";import"./framework.B1keMFNq.js";import"./theme.8WvZWF-M.js";import"./baseUniq.DoVpE4hx.js";import"./basePickBy.BafM5tVf.js";var L={},D=u((e,i)=>{L[e]=i},"set"),Y=u(e=>L[e],"get"),G=u(()=>Object.keys(L),"keys"),I=u(()=>G().length,"size"),$={get:Y,set:D,keys:G,size:I},j=u(e=>e.append("circle").attr("class","start-state").attr("r",t().state.sizeUnit).attr("cx",t().state.padding+t().state.sizeUnit).attr("cy",t().state.padding+t().state.sizeUnit),"drawStartState"),q=u(e=>e.append("line").style("stroke","grey").style("stroke-dasharray","3").attr("x1",t().state.textHeight).attr("class","divider").attr("x2",t().state.textHeight*2).attr("y1",0).attr("y2",0),"drawDivider"),Z=u((e,i)=>{const d=e.append("text").attr("x",2*t().state.padding).attr("y",t().state.textHeight+2*t().state.padding).attr("font-size",t().state.fontSize).attr("class","state-title").text(i.id),o=d.node().getBBox();return e.insert("rect",":first-child").attr("x",t().state.padding).attr("y",t().state.padding).attr("width",o.width+2*t().state.padding).attr("height",o.height+2*t().state.padding).attr("rx",t().state.radius),d},"drawSimpleState"),K=u((e,i)=>{const d=u(function(l,B,m){const k=l.append("tspan").attr("x",2*t().state.padding).text(B);m||k.attr("dy",t().state.textHeight)},"addTspan"),n=e.append("text").attr("x",2*t().state.padding).attr("y",t().state.textHeight+1.3*t().state.padding).attr("font-size",t().state.fontSize).attr("class","state-title").text(i.descriptions[0]).node().getBBox(),g=n.height,p=e.append("text").attr("x",t().state.padding).attr("y",g+t().state.padding*.4+t().state.dividerMargin+t().state.textHeight).attr("class","state-description");let a=!0,s=!0;i.descriptions.forEach(function(l){a||(d(p,l,s),s=!1),a=!1});const y=e.append("line").attr("x1",t().state.padding).attr("y1",t().state.padding+g+t().state.dividerMargin/2).attr("y2",t().state.padding+g+t().state.dividerMargin/2).attr("class","descr-divider"),x=p.node().getBBox(),c=Math.max(x.width,n.width);return y.attr("x2",c+3*t().state.padding),e.insert("rect",":first-child").attr("x",t().state.padding).attr("y",t().state.padding).attr("width",c+2*t().state.padding).attr("height",x.height+g+2*t().state.padding).attr("rx",t().state.radius),e},"drawDescrState"),Q=u((e,i,d)=>{const o=t().state.padding,n=2*t().state.padding,g=e.node().getBBox(),p=g.width,a=g.x,s=e.append("text").attr("x",0).attr("y",t().state.titleShift).attr("font-size",t().state.fontSize).attr("class","state-title").text(i.id),x=s.node().getBBox().width+n;let c=Math.max(x,p);c===p&&(c=c+n);let l;const B=e.node().getBBox();i.doc,l=a-o,x>p&&(l=(p-c)/2+o),Math.abs(a-B.x)p&&(l=a-(x-p)/2);const m=1-t().state.textHeight;return e.insert("rect",":first-child").attr("x",l).attr("y",m).attr("class",d?"alt-composit":"composit").attr("width",c).attr("height",B.height+t().state.textHeight+t().state.titleShift+1).attr("rx","0"),s.attr("x",l+o),x<=p&&s.attr("x",a+(c-n)/2-x/2+o),e.insert("rect",":first-child").attr("x",l).attr("y",t().state.titleShift-t().state.textHeight-t().state.padding).attr("width",c).attr("height",t().state.textHeight*3).attr("rx",t().state.radius),e.insert("rect",":first-child").attr("x",l).attr("y",t().state.titleShift-t().state.textHeight-t().state.padding).attr("width",c).attr("height",B.height+3+2*t().state.textHeight).attr("rx",t().state.radius),e},"addTitleAndBox"),V=u(e=>(e.append("circle").attr("class","end-state-outer").attr("r",t().state.sizeUnit+t().state.miniPadding).attr("cx",t().state.padding+t().state.sizeUnit+t().state.miniPadding).attr("cy",t().state.padding+t().state.sizeUnit+t().state.miniPadding),e.append("circle").attr("class","end-state-inner").attr("r",t().state.sizeUnit).attr("cx",t().state.padding+t().state.sizeUnit+2).attr("cy",t().state.padding+t().state.sizeUnit+2)),"drawEndState"),tt=u((e,i)=>{let d=t().state.forkWidth,o=t().state.forkHeight;if(i.parentId){let n=d;d=o,o=n}return e.append("rect").style("stroke","black").style("fill","black").attr("width",d).attr("height",o).attr("x",t().state.padding).attr("y",t().state.padding)},"drawForkJoinState"),et=u((e,i,d,o)=>{let n=0;const g=o.append("text");g.style("text-anchor","start"),g.attr("class","noteText");let p=e.replace(/\r\n/g,"
    ");p=p.replace(/\n/g,"
    ");const a=p.split(z.lineBreakRegex);let s=1.25*t().state.noteMargin;for(const y of a){const x=y.trim();if(x.length>0){const c=g.append("tspan");if(c.text(x),s===0){const l=c.node().getBBox();s+=l.height}n+=s,c.attr("x",i+t().state.noteMargin),c.attr("y",d+n+1.25*t().state.noteMargin)}}return{textWidth:g.node().getBBox().width,textHeight:n}},"_drawLongText"),at=u((e,i)=>{i.attr("class","state-note");const d=i.append("rect").attr("x",0).attr("y",t().state.padding),o=i.append("g"),{textWidth:n,textHeight:g}=et(e,0,0,o);return d.attr("height",g+2*t().state.noteMargin),d.attr("width",n+t().state.noteMargin*2),d},"drawNote"),_=u(function(e,i){const d=i.id,o={id:d,label:i.id,width:0,height:0},n=e.append("g").attr("id",d).attr("class","stateGroup");i.type==="start"&&j(n),i.type==="end"&&V(n),(i.type==="fork"||i.type==="join")&&tt(n,i),i.type==="note"&&at(i.note.text,n),i.type==="divider"&&q(n),i.type==="default"&&i.descriptions.length===0&&Z(n,i),i.type==="default"&&i.descriptions.length>0&&K(n,i);const g=n.node().getBBox();return o.width=g.width+2*t().state.padding,o.height=g.height+2*t().state.padding,$.set(d,o),o},"drawState"),A=0,it=u(function(e,i,d){const o=u(function(s){switch(s){case N.relationType.AGGREGATION:return"aggregation";case N.relationType.EXTENSION:return"extension";case N.relationType.COMPOSITION:return"composition";case N.relationType.DEPENDENCY:return"dependency"}},"getRelationType");i.points=i.points.filter(s=>!Number.isNaN(s.y));const n=i.points,g=U().x(function(s){return s.x}).y(function(s){return s.y}).curve(F),p=e.append("path").attr("d",g(n)).attr("id","edge"+A).attr("class","transition");let a="";if(t().state.arrowMarkerAbsolute&&(a=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,a=a.replace(/\(/g,"\\("),a=a.replace(/\)/g,"\\)")),p.attr("marker-end","url("+a+"#"+o(N.relationType.DEPENDENCY)+"End)"),d.title!==void 0){const s=e.append("g").attr("class","stateLabel"),{x:y,y:x}=O.calcLabelPosition(i.points),c=z.getRows(d.title);let l=0;const B=[];let m=0,k=0;for(let f=0;f<=c.length;f++){const h=s.append("text").attr("text-anchor","middle").text(c[f]).attr("x",y).attr("y",x+l),w=h.node().getBBox();m=Math.max(m,w.width),k=Math.min(k,w.x),S.info(w.x,y,x+l),l===0&&(l=h.node().getBBox().height,S.info("Title height",l,x)),B.push(h)}let E=l*c.length;if(c.length>1){const f=(c.length-1)*l*.5;B.forEach((h,w)=>h.attr("y",x+w*l-f)),E=l*c.length}const r=s.node().getBBox();s.insert("rect",":first-child").attr("class","box").attr("x",y-m/2-t().state.padding/2).attr("y",x-E/2-t().state.padding/2-3.5).attr("width",m+t().state.padding).attr("height",E+t().state.padding),S.info(r)}A++},"drawEdge"),b,T={},rt=u(function(){},"setConf"),nt=u(function(e){e.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},"insertMarkers"),st=u(function(e,i,d,o){b=t().state;const n=t().securityLevel;let g;n==="sandbox"&&(g=H("#i"+i));const p=n==="sandbox"?H(g.nodes()[0].contentDocument.body):H("body"),a=n==="sandbox"?g.nodes()[0].contentDocument:document;S.debug("Rendering diagram "+e);const s=p.select(`[id='${i}']`);nt(s);const y=o.db.getRootDoc();R(y,s,void 0,!1,p,a,o);const x=b.padding,c=s.node().getBBox(),l=c.width+x*2,B=c.height+x*2,m=l*1.75;C(s,B,m,b.useMaxWidth),s.attr("viewBox",`${c.x-b.padding} ${c.y-b.padding} `+l+" "+B)},"draw"),dt=u(e=>e?e.length*b.fontSizeFactor:1,"getLabelWidth"),R=u((e,i,d,o,n,g,p)=>{const a=new J({compound:!0,multigraph:!0});let s,y=!0;for(s=0;s{const w=h.parentElement;let v=0,M=0;w&&(w.parentElement&&(v=w.parentElement.getBBox().width),M=parseInt(w.getAttribute("data-x-shift"),10),Number.isNaN(M)&&(M=0)),h.setAttribute("x1",0-M+8),h.setAttribute("x2",v-M-8)})):S.debug("No Node "+r+": "+JSON.stringify(a.node(r)))});let k=m.getBBox();a.edges().forEach(function(r){r!==void 0&&a.edge(r)!==void 0&&(S.debug("Edge "+r.v+" -> "+r.w+": "+JSON.stringify(a.edge(r))),it(i,a.edge(r),a.edge(r).relation))}),k=m.getBBox();const E={id:d||"root",label:d||"root",width:0,height:0};return E.width=k.width+2*b.padding,E.height=k.height+2*b.padding,S.debug("Doc rendered",E,a),E},"renderDoc"),ot={setConf:rt,draw:st},yt={parser:W,db:N,renderer:ot,styles:P,init:u(e=>{e.state||(e.state={}),e.state.arrowMarkerAbsolute=e.arrowMarkerAbsolute,N.clear()},"init")};export{yt as diagram}; diff --git a/assets/chunks/stateDiagram-v2-HP6YRVRG.CIXWXK7i.js b/assets/chunks/stateDiagram-v2-HP6YRVRG.CIXWXK7i.js new file mode 100644 index 000000000..6ddb9e22f --- /dev/null +++ b/assets/chunks/stateDiagram-v2-HP6YRVRG.CIXWXK7i.js @@ -0,0 +1 @@ +import{s as e,a as t,c as r,b as s}from"./chunk-JZAHL7AJ.Ca2Vb27U.js";import{_ as i}from"../app.D0Wo8w0i.js";import"./chunk-EICJXIV7.Cx-DrDyu.js";import"./framework.B1keMFNq.js";import"./theme.8WvZWF-M.js";var p={parser:e,db:t,renderer:r,styles:s,init:i(a=>{a.state||(a.state={}),a.state.arrowMarkerAbsolute=a.arrowMarkerAbsolute,t.clear()},"init")};export{p as diagram}; diff --git a/assets/chunks/theme.8WvZWF-M.js b/assets/chunks/theme.8WvZWF-M.js new file mode 100644 index 000000000..702dff86e --- /dev/null +++ b/assets/chunks/theme.8WvZWF-M.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/chunks/VPLocalSearchBox.B3c5Vn6E.js","assets/chunks/framework.B1keMFNq.js"])))=>i.map(i=>d[i]); +import{d as m,o as a,c,r as d,n as I,a as K,t as w,b as $,w as f,e as h,T as pe,_ as y,u as je,i as Ge,f as ze,g as z,h as P,j as p,k as i,l as R,m as ie,p as T,q as F,s as x,v as O,x as ve,y as fe,z as Ke,A as Re,B as W,F as M,C as H,D as Ve,E as ee,G as k,H as E,I as Te,J as te,K as G,L as J,M as We,N as we,O as le,P as he,Q as Ne,R as ne,S as qe,U as Je,V as Ye,W as Me,X as me,Y as Xe,Z as Qe,$ as Ze,a0 as xe,a1 as Ie,a2 as et,a3 as tt,a4 as nt,a5 as st}from"./framework.B1keMFNq.js";const ot=m({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(o){return(e,t)=>(a(),c("span",{class:I(["VPBadge",e.type])},[d(e.$slots,"default",{},()=>[K(w(e.text),1)])],2))}}),at={key:0,class:"VPBackdrop"},rt=m({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(o){return(e,t)=>(a(),$(pe,{name:"fade"},{default:f(()=>[e.show?(a(),c("div",at)):h("",!0)]),_:1}))}}),it=y(rt,[["__scopeId","data-v-ea76d448"]]),V=je;function lt(o,e){let t,s=!1;return()=>{t&&clearTimeout(t),s?t=setTimeout(o,e):(o(),(s=!0)&&setTimeout(()=>s=!1,e))}}function ce(o){return/^\//.test(o)?o:`/${o}`}function _e(o){const{pathname:e,search:t,hash:s,protocol:n}=new URL(o,"http://a.com");if(Ge(o)||o.startsWith("#")||!n.startsWith("http")||!ze(e))return o;const{site:r}=V(),l=e.endsWith("/")||e.endsWith(".html")?o:o.replace(/(?:(^\.+)\/)?.*$/,`$1${e.replace(/(\.md)?$/,r.value.cleanUrls?"":".html")}${t}${s}`);return z(l)}function X({correspondingLink:o=!1}={}){const{site:e,localeIndex:t,page:s,theme:n,hash:r}=V(),l=P(()=>{var u,b;return{label:(u=e.value.locales[t.value])==null?void 0:u.label,link:((b=e.value.locales[t.value])==null?void 0:b.link)||(t.value==="root"?"/":`/${t.value}/`)}});return{localeLinks:P(()=>Object.entries(e.value.locales).flatMap(([u,b])=>l.value.label===b.label?[]:{text:b.label,link:ct(b.link||(u==="root"?"/":`/${u}/`),n.value.i18nRouting!==!1&&o,s.value.relativePath.slice(l.value.link.length-1),!e.value.cleanUrls)+r.value})),currentLang:l}}function ct(o,e,t,s){return e?o.replace(/\/$/,"")+ce(t.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,s?".html":"")):o}const ut={class:"NotFound"},dt={class:"code"},pt={class:"title"},vt={class:"quote"},ft={class:"action"},ht=["href","aria-label"],mt=m({__name:"NotFound",setup(o){const{theme:e}=V(),{currentLang:t}=X();return(s,n)=>{var r,l,v,u,b;return a(),c("div",ut,[p("p",dt,w(((r=i(e).notFound)==null?void 0:r.code)??"404"),1),p("h1",pt,w(((l=i(e).notFound)==null?void 0:l.title)??"PAGE NOT FOUND"),1),n[0]||(n[0]=p("div",{class:"divider"},null,-1)),p("blockquote",vt,w(((v=i(e).notFound)==null?void 0:v.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),p("div",ft,[p("a",{class:"link",href:i(z)(i(t).link),"aria-label":((u=i(e).notFound)==null?void 0:u.linkLabel)??"go to home"},w(((b=i(e).notFound)==null?void 0:b.linkText)??"Take me home"),9,ht)])])}}}),_t=y(mt,[["__scopeId","data-v-0a2c3220"]]);function Ce(o,e){if(Array.isArray(o))return Q(o);if(o==null)return[];e=ce(e);const t=Object.keys(o).sort((n,r)=>r.split("/").length-n.split("/").length).find(n=>e.startsWith(ce(n))),s=t?o[t]:[];return Array.isArray(s)?Q(s):Q(s.items,s.base)}function bt(o){const e=[];let t=0;for(const s in o){const n=o[s];if(n.items){t=e.push(n);continue}e[t]||e.push({items:[]}),e[t].items.push(n)}return e}function kt(o){const e=[];function t(s){for(const n of s)n.text&&n.link&&e.push({text:n.text,link:n.link,docFooterText:n.docFooterText}),n.items&&t(n.items)}return t(o),e}function ue(o,e){return Array.isArray(e)?e.some(t=>ue(o,t)):R(o,e.link)?!0:e.items?ue(o,e.items):!1}function Q(o,e){return[...o].map(t=>{const s={...t},n=s.base||e;return n&&s.link&&(s.link=n+s.link),s.items&&(s.items=Q(s.items,n)),s})}function U(){const{frontmatter:o,page:e,theme:t}=V(),s=ie("(min-width: 960px)"),n=T(!1),r=P(()=>{const A=t.value.sidebar,N=e.value.relativePath;return A?Ce(A,N):[]}),l=T(r.value);F(r,(A,N)=>{JSON.stringify(A)!==JSON.stringify(N)&&(l.value=r.value)});const v=P(()=>o.value.sidebar!==!1&&l.value.length>0&&o.value.layout!=="home"),u=P(()=>b?o.value.aside==null?t.value.aside==="left":o.value.aside==="left":!1),b=P(()=>o.value.layout==="home"?!1:o.value.aside!=null?!!o.value.aside:t.value.aside!==!1),g=P(()=>v.value&&s.value),_=P(()=>v.value?bt(l.value):[]);function S(){n.value=!0}function L(){n.value=!1}function C(){n.value?L():S()}return{isOpen:n,sidebar:l,sidebarGroups:_,hasSidebar:v,hasAside:b,leftAside:u,isSidebarEnabled:g,open:S,close:L,toggle:C}}function gt(o,e){let t;x(()=>{t=o.value?document.activeElement:void 0}),O(()=>{window.addEventListener("keyup",s)}),ve(()=>{window.removeEventListener("keyup",s)});function s(n){n.key==="Escape"&&o.value&&(e(),t==null||t.focus())}}function $t(o){const{page:e,hash:t}=V(),s=T(!1),n=P(()=>o.value.collapsed!=null),r=P(()=>!!o.value.link),l=T(!1),v=()=>{l.value=R(e.value.relativePath,o.value.link)};F([e,o,t],v),O(v);const u=P(()=>l.value?!0:o.value.items?ue(e.value.relativePath,o.value.items):!1),b=P(()=>!!(o.value.items&&o.value.items.length));x(()=>{s.value=!!(n.value&&o.value.collapsed)}),fe(()=>{(l.value||u.value)&&(s.value=!1)});function g(){n.value&&(s.value=!s.value)}return{collapsed:s,collapsible:n,isLink:r,isActiveLink:l,hasActiveLink:u,hasChildren:b,toggle:g}}function yt(){const{hasSidebar:o}=U(),e=ie("(min-width: 960px)"),t=ie("(min-width: 1280px)");return{isAsideEnabled:P(()=>!t.value&&!e.value?!1:o.value?t.value:e.value)}}const de=[];function Ae(o){return typeof o.outline=="object"&&!Array.isArray(o.outline)&&o.outline.label||o.outlineTitle||"On this page"}function be(o){const e=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(t=>t.id&&t.hasChildNodes()).map(t=>{const s=Number(t.tagName[1]);return{element:t,title:Pt(t),link:"#"+t.id,level:s}});return St(e,o)}function Pt(o){let e="";for(const t of o.childNodes)if(t.nodeType===1){if(t.classList.contains("VPBadge")||t.classList.contains("header-anchor")||t.classList.contains("ignore-header"))continue;e+=t.textContent}else t.nodeType===3&&(e+=t.textContent);return e.trim()}function St(o,e){if(e===!1)return[];const t=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[s,n]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;return Tt(o,s,n)}function Lt(o,e){const{isAsideEnabled:t}=yt(),s=lt(r,100);let n=null;O(()=>{requestAnimationFrame(r),window.addEventListener("scroll",s)}),Ke(()=>{l(location.hash)}),ve(()=>{window.removeEventListener("scroll",s)});function r(){if(!t.value)return;const v=window.scrollY,u=window.innerHeight,b=document.body.offsetHeight,g=Math.abs(v+u-b)<1,_=de.map(({element:L,link:C})=>({link:C,top:Vt(L)})).filter(({top:L})=>!Number.isNaN(L)).sort((L,C)=>L.top-C.top);if(!_.length){l(null);return}if(v<1){l(null);return}if(g){l(_[_.length-1].link);return}let S=null;for(const{link:L,top:C}of _){if(C>v+Re()+4)break;S=L}l(S)}function l(v){n&&n.classList.remove("active"),v==null?n=null:n=o.value.querySelector(`a[href="${decodeURIComponent(v)}"]`);const u=n;u?(u.classList.add("active"),e.value.style.top=u.offsetTop+39+"px",e.value.style.opacity="1"):(e.value.style.top="33px",e.value.style.opacity="0")}}function Vt(o){let e=0;for(;o!==document.body;){if(o===null)return NaN;e+=o.offsetTop,o=o.offsetParent}return e}function Tt(o,e,t){de.length=0;const s=[],n=[];return o.forEach(r=>{const l={...r,children:[]};let v=n[n.length-1];for(;v&&v.level>=l.level;)n.pop(),v=n[n.length-1];if(l.element.classList.contains("ignore-header")||v&&"shouldIgnore"in v){n.push({level:l.level,shouldIgnore:!0});return}l.level>t||l.level{const n=W("VPDocOutlineItem",!0);return a(),c("ul",{class:I(["VPDocOutlineItem",t.root?"root":"nested"])},[(a(!0),c(M,null,H(t.headers,({children:r,link:l,title:v})=>(a(),c("li",null,[p("a",{class:"outline-link",href:l,onClick:e,title:v},w(v),9,wt),r!=null&&r.length?(a(),$(n,{key:0,headers:r},null,8,["headers"])):h("",!0)]))),256))],2)}}}),He=y(Nt,[["__scopeId","data-v-3142f465"]]),Mt={class:"content"},It={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},Ct=m({__name:"VPDocAsideOutline",setup(o){const{frontmatter:e,theme:t}=V(),s=Ve([]);ee(()=>{s.value=be(e.value.outline??t.value.outline)});const n=T(),r=T();return Lt(n,r),(l,v)=>(a(),c("nav",{"aria-labelledby":"doc-outline-aria-label",class:I(["VPDocAsideOutline",{"has-outline":s.value.length>0}]),ref_key:"container",ref:n},[p("div",Mt,[p("div",{class:"outline-marker",ref_key:"marker",ref:r},null,512),p("div",It,w(i(Ae)(i(t))),1),k(He,{headers:s.value,root:!0},null,8,["headers"])])],2))}}),At=y(Ct,[["__scopeId","data-v-47bf134a"]]),Ht={class:"VPDocAsideCarbonAds"},Bt=m({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(o){const e=()=>null;return(t,s)=>(a(),c("div",Ht,[k(i(e),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),Et={class:"VPDocAside"},Dt=m({__name:"VPDocAside",setup(o){const{theme:e}=V();return(t,s)=>(a(),c("div",Et,[d(t.$slots,"aside-top",{},void 0,!0),d(t.$slots,"aside-outline-before",{},void 0,!0),k(At),d(t.$slots,"aside-outline-after",{},void 0,!0),s[0]||(s[0]=p("div",{class:"spacer"},null,-1)),d(t.$slots,"aside-ads-before",{},void 0,!0),i(e).carbonAds?(a(),$(Bt,{key:0,"carbon-ads":i(e).carbonAds},null,8,["carbon-ads"])):h("",!0),d(t.$slots,"aside-ads-after",{},void 0,!0),d(t.$slots,"aside-bottom",{},void 0,!0)]))}}),Ft=y(Dt,[["__scopeId","data-v-07237113"]]);function Ot(){const{theme:o,page:e}=V();return P(()=>{const{text:t="Edit this page",pattern:s=""}=o.value.editLink||{};let n;return typeof s=="function"?n=s(e.value):n=s.replace(/:path/g,e.value.filePath),{url:n,text:t}})}function Ut(){const{page:o,theme:e,frontmatter:t}=V();return P(()=>{var b,g,_,S,L,C,A,N;const s=Ce(e.value.sidebar,o.value.relativePath),n=kt(s),r=jt(n,B=>B.link.replace(/[?#].*$/,"")),l=r.findIndex(B=>R(o.value.relativePath,B.link)),v=((b=e.value.docFooter)==null?void 0:b.prev)===!1&&!t.value.prev||t.value.prev===!1,u=((g=e.value.docFooter)==null?void 0:g.next)===!1&&!t.value.next||t.value.next===!1;return{prev:v?void 0:{text:(typeof t.value.prev=="string"?t.value.prev:typeof t.value.prev=="object"?t.value.prev.text:void 0)??((_=r[l-1])==null?void 0:_.docFooterText)??((S=r[l-1])==null?void 0:S.text),link:(typeof t.value.prev=="object"?t.value.prev.link:void 0)??((L=r[l-1])==null?void 0:L.link)},next:u?void 0:{text:(typeof t.value.next=="string"?t.value.next:typeof t.value.next=="object"?t.value.next.text:void 0)??((C=r[l+1])==null?void 0:C.docFooterText)??((A=r[l+1])==null?void 0:A.text),link:(typeof t.value.next=="object"?t.value.next.link:void 0)??((N=r[l+1])==null?void 0:N.link)}}})}function jt(o,e){const t=new Set;return o.filter(s=>{const n=e(s);return t.has(n)?!1:t.add(n)})}const D=m({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(o){const e=o,t=P(()=>e.tag??(e.href?"a":"span")),s=P(()=>e.href&&Te.test(e.href)||e.target==="_blank");return(n,r)=>(a(),$(E(t.value),{class:I(["VPLink",{link:n.href,"vp-external-link-icon":s.value,"no-icon":n.noIcon}]),href:n.href?i(_e)(n.href):void 0,target:n.target??(s.value?"_blank":void 0),rel:n.rel??(s.value?"noreferrer":void 0)},{default:f(()=>[d(n.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),Gt={class:"VPLastUpdated"},zt=["datetime"],Kt=m({__name:"VPDocFooterLastUpdated",setup(o){const{theme:e,page:t,lang:s}=V(),n=P(()=>new Date(t.value.lastUpdated)),r=P(()=>n.value.toISOString()),l=T("");return O(()=>{x(()=>{var v,u,b;l.value=new Intl.DateTimeFormat((u=(v=e.value.lastUpdated)==null?void 0:v.formatOptions)!=null&&u.forceLocale?s.value:void 0,((b=e.value.lastUpdated)==null?void 0:b.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(n.value)})}),(v,u)=>{var b;return a(),c("p",Gt,[K(w(((b=i(e).lastUpdated)==null?void 0:b.text)||i(e).lastUpdatedText||"Last updated")+": ",1),p("time",{datetime:r.value},w(l.value),9,zt)])}}}),Rt=y(Kt,[["__scopeId","data-v-f5ff4982"]]),Wt={key:0,class:"VPDocFooter"},qt={key:0,class:"edit-info"},Jt={key:0,class:"edit-link"},Yt={key:1,class:"last-updated"},Xt={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},Qt={class:"pager"},Zt=["innerHTML"],xt=["innerHTML"],en={class:"pager"},tn=["innerHTML"],nn=["innerHTML"],sn=m({__name:"VPDocFooter",setup(o){const{theme:e,page:t,frontmatter:s}=V(),n=Ot(),r=Ut(),l=P(()=>e.value.editLink&&s.value.editLink!==!1),v=P(()=>t.value.lastUpdated),u=P(()=>l.value||v.value||r.value.prev||r.value.next);return(b,g)=>{var _,S,L,C;return u.value?(a(),c("footer",Wt,[d(b.$slots,"doc-footer-before",{},void 0,!0),l.value||v.value?(a(),c("div",qt,[l.value?(a(),c("div",Jt,[k(D,{class:"edit-link-button",href:i(n).url,"no-icon":!0},{default:f(()=>[g[0]||(g[0]=p("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),K(" "+w(i(n).text),1)]),_:1},8,["href"])])):h("",!0),v.value?(a(),c("div",Yt,[k(Rt)])):h("",!0)])):h("",!0),(_=i(r).prev)!=null&&_.link||(S=i(r).next)!=null&&S.link?(a(),c("nav",Xt,[g[1]||(g[1]=p("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),p("div",Qt,[(L=i(r).prev)!=null&&L.link?(a(),$(D,{key:0,class:"pager-link prev",href:i(r).prev.link},{default:f(()=>{var A;return[p("span",{class:"desc",innerHTML:((A=i(e).docFooter)==null?void 0:A.prev)||"Previous page"},null,8,Zt),p("span",{class:"title",innerHTML:i(r).prev.text},null,8,xt)]}),_:1},8,["href"])):h("",!0)]),p("div",en,[(C=i(r).next)!=null&&C.link?(a(),$(D,{key:0,class:"pager-link next",href:i(r).next.link},{default:f(()=>{var A;return[p("span",{class:"desc",innerHTML:((A=i(e).docFooter)==null?void 0:A.next)||"Next page"},null,8,tn),p("span",{class:"title",innerHTML:i(r).next.text},null,8,nn)]}),_:1},8,["href"])):h("",!0)])])):h("",!0)])):h("",!0)}}}),on=y(sn,[["__scopeId","data-v-d48b34f2"]]),an={class:"container"},rn={class:"aside-container"},ln={class:"aside-content"},cn={class:"content"},un={class:"content-container"},dn={class:"main"},pn=m({__name:"VPDoc",setup(o){const{theme:e}=V(),t=te(),{hasSidebar:s,hasAside:n,leftAside:r}=U(),l=P(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(v,u)=>{const b=W("Content");return a(),c("div",{class:I(["VPDoc",{"has-sidebar":i(s),"has-aside":i(n)}])},[d(v.$slots,"doc-top",{},void 0,!0),p("div",an,[i(n)?(a(),c("div",{key:0,class:I(["aside",{"left-aside":i(r)}])},[u[0]||(u[0]=p("div",{class:"aside-curtain"},null,-1)),p("div",rn,[p("div",ln,[k(Ft,null,{"aside-top":f(()=>[d(v.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":f(()=>[d(v.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":f(()=>[d(v.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[d(v.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[d(v.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[d(v.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):h("",!0),p("div",cn,[p("div",un,[d(v.$slots,"doc-before",{},void 0,!0),p("main",dn,[k(b,{class:I(["vp-doc",[l.value,i(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),k(on,null,{"doc-footer-before":f(()=>[d(v.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),d(v.$slots,"doc-after",{},void 0,!0)])])]),d(v.$slots,"doc-bottom",{},void 0,!0)],2)}}}),vn=y(pn,[["__scopeId","data-v-39f3916c"]]),fn=m({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(o){const e=o,t=P(()=>e.href&&Te.test(e.href)),s=P(()=>e.tag||(e.href?"a":"button"));return(n,r)=>(a(),$(E(s.value),{class:I(["VPButton",[n.size,n.theme]]),href:n.href?i(_e)(n.href):void 0,target:e.target??(t.value?"_blank":void 0),rel:e.rel??(t.value?"noreferrer":void 0)},{default:f(()=>[K(w(n.text),1)]),_:1},8,["class","href","target","rel"]))}}),hn=y(fn,[["__scopeId","data-v-ff79a9eb"]]),mn=["src","alt"],_n=m({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(o){return(e,t)=>{const s=W("VPImage",!0);return e.image?(a(),c(M,{key:0},[typeof e.image=="string"||"src"in e.image?(a(),c("img",G({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:i(z)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,mn)):(a(),c(M,{key:1},[k(s,G({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),k(s,G({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):h("",!0)}}}),Z=y(_n,[["__scopeId","data-v-710ef822"]]),bn={class:"container"},kn={class:"main"},gn={key:0,class:"name"},$n=["innerHTML"],yn=["innerHTML"],Pn=["innerHTML"],Sn={key:0,class:"actions"},Ln={key:0,class:"image"},Vn={class:"image-container"},Tn=m({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(o){const e=J("hero-image-slot-exists");return(t,s)=>(a(),c("div",{class:I(["VPHero",{"has-image":t.image||i(e)}])},[p("div",bn,[p("div",kn,[d(t.$slots,"home-hero-info-before",{},void 0,!0),d(t.$slots,"home-hero-info",{},()=>[t.name?(a(),c("h1",gn,[p("span",{innerHTML:t.name,class:"clip"},null,8,$n)])):h("",!0),t.text?(a(),c("p",{key:1,innerHTML:t.text,class:"text"},null,8,yn)):h("",!0),t.tagline?(a(),c("p",{key:2,innerHTML:t.tagline,class:"tagline"},null,8,Pn)):h("",!0)],!0),d(t.$slots,"home-hero-info-after",{},void 0,!0),t.actions?(a(),c("div",Sn,[(a(!0),c(M,null,H(t.actions,n=>(a(),c("div",{key:n.link,class:"action"},[k(hn,{tag:"a",size:"medium",theme:n.theme,text:n.text,href:n.link,target:n.target,rel:n.rel},null,8,["theme","text","href","target","rel"])]))),128))])):h("",!0),d(t.$slots,"home-hero-actions-after",{},void 0,!0)]),t.image||i(e)?(a(),c("div",Ln,[p("div",Vn,[s[0]||(s[0]=p("div",{class:"image-bg"},null,-1)),d(t.$slots,"home-hero-image",{},()=>[t.image?(a(),$(Z,{key:0,class:"image-src",image:t.image},null,8,["image"])):h("",!0)],!0)])])):h("",!0)])],2))}}),wn=y(Tn,[["__scopeId","data-v-c67fc491"]]),Nn=m({__name:"VPHomeHero",setup(o){const{frontmatter:e}=V();return(t,s)=>i(e).hero?(a(),$(wn,{key:0,class:"VPHomeHero",name:i(e).hero.name,text:i(e).hero.text,tagline:i(e).hero.tagline,image:i(e).hero.image,actions:i(e).hero.actions},{"home-hero-info-before":f(()=>[d(t.$slots,"home-hero-info-before")]),"home-hero-info":f(()=>[d(t.$slots,"home-hero-info")]),"home-hero-info-after":f(()=>[d(t.$slots,"home-hero-info-after")]),"home-hero-actions-after":f(()=>[d(t.$slots,"home-hero-actions-after")]),"home-hero-image":f(()=>[d(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):h("",!0)}}),Mn={class:"box"},In={key:0,class:"icon"},Cn=["innerHTML"],An=["innerHTML"],Hn=["innerHTML"],Bn={key:4,class:"link-text"},En={class:"link-text-value"},Dn=m({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(o){return(e,t)=>(a(),$(D,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:f(()=>[p("article",Mn,[typeof e.icon=="object"&&e.icon.wrap?(a(),c("div",In,[k(Z,{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(),$(Z,{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(),c("div",{key:2,class:"icon",innerHTML:e.icon},null,8,Cn)):h("",!0),p("h2",{class:"title",innerHTML:e.title},null,8,An),e.details?(a(),c("p",{key:3,class:"details",innerHTML:e.details},null,8,Hn)):h("",!0),e.linkText?(a(),c("div",Bn,[p("p",En,[K(w(e.linkText)+" ",1),t[0]||(t[0]=p("span",{class:"vpi-arrow-right link-text-icon"},null,-1))])])):h("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),Fn=y(Dn,[["__scopeId","data-v-e0e29367"]]),On={key:0,class:"VPFeatures"},Un={class:"container"},jn={class:"items"},Gn=m({__name:"VPFeatures",props:{features:{}},setup(o){const e=o,t=P(()=>{const s=e.features.length;if(s){if(s===2)return"grid-2";if(s===3)return"grid-3";if(s%3===0)return"grid-6";if(s>3)return"grid-4"}else return});return(s,n)=>s.features?(a(),c("div",On,[p("div",Un,[p("div",jn,[(a(!0),c(M,null,H(s.features,r=>(a(),c("div",{key:r.title,class:I(["item",[t.value]])},[k(Fn,{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))])])])):h("",!0)}}),zn=y(Gn,[["__scopeId","data-v-faef1530"]]),Kn=m({__name:"VPHomeFeatures",setup(o){const{frontmatter:e}=V();return(t,s)=>i(e).features?(a(),$(zn,{key:0,class:"VPHomeFeatures",features:i(e).features},null,8,["features"])):h("",!0)}}),Rn=m({__name:"VPHomeContent",setup(o){const{width:e}=We({initialWidth:0,includeScrollbar:!1});return(t,s)=>(a(),c("div",{class:"vp-doc container",style:we(i(e)?{"--vp-offset":`calc(50% - ${i(e)/2}px)`}:{})},[d(t.$slots,"default",{},void 0,!0)],4))}}),Wn=y(Rn,[["__scopeId","data-v-eade2db2"]]),qn={class:"VPHome"},Jn=m({__name:"VPHome",setup(o){const{frontmatter:e}=V();return(t,s)=>{const n=W("Content");return a(),c("div",qn,[d(t.$slots,"home-hero-before",{},void 0,!0),k(Nn,null,{"home-hero-info-before":f(()=>[d(t.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[d(t.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[d(t.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[d(t.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[d(t.$slots,"home-hero-image",{},void 0,!0)]),_:3}),d(t.$slots,"home-hero-after",{},void 0,!0),d(t.$slots,"home-features-before",{},void 0,!0),k(Kn),d(t.$slots,"home-features-after",{},void 0,!0),i(e).markdownStyles!==!1?(a(),$(Wn,{key:0},{default:f(()=>[k(n)]),_:1})):(a(),$(n,{key:1}))])}}}),Yn=y(Jn,[["__scopeId","data-v-bc91500b"]]),Xn={},Qn={class:"VPPage"};function Zn(o,e){const t=W("Content");return a(),c("div",Qn,[d(o.$slots,"page-top"),k(t),d(o.$slots,"page-bottom")])}const xn=y(Xn,[["render",Zn]]),es=m({__name:"VPContent",setup(o){const{page:e,frontmatter:t}=V(),{hasSidebar:s}=U();return(n,r)=>(a(),c("div",{class:I(["VPContent",{"has-sidebar":i(s),"is-home":i(t).layout==="home"}]),id:"VPContent"},[i(e).isNotFound?d(n.$slots,"not-found",{key:0},()=>[k(_t)],!0):i(t).layout==="page"?(a(),$(xn,{key:1},{"page-top":f(()=>[d(n.$slots,"page-top",{},void 0,!0)]),"page-bottom":f(()=>[d(n.$slots,"page-bottom",{},void 0,!0)]),_:3})):i(t).layout==="home"?(a(),$(Yn,{key:2},{"home-hero-before":f(()=>[d(n.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":f(()=>[d(n.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[d(n.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[d(n.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[d(n.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[d(n.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":f(()=>[d(n.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":f(()=>[d(n.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":f(()=>[d(n.$slots,"home-features-after",{},void 0,!0)]),_:3})):i(t).layout&&i(t).layout!=="doc"?(a(),$(E(i(t).layout),{key:3})):(a(),$(vn,{key:4},{"doc-top":f(()=>[d(n.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":f(()=>[d(n.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":f(()=>[d(n.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":f(()=>[d(n.$slots,"doc-before",{},void 0,!0)]),"doc-after":f(()=>[d(n.$slots,"doc-after",{},void 0,!0)]),"aside-top":f(()=>[d(n.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":f(()=>[d(n.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[d(n.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[d(n.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[d(n.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":f(()=>[d(n.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),ts=y(es,[["__scopeId","data-v-7c429c6d"]]),ns={class:"container"},ss=["innerHTML"],os=["innerHTML"],as=m({__name:"VPFooter",setup(o){const{theme:e,frontmatter:t}=V(),{hasSidebar:s}=U();return(n,r)=>i(e).footer&&i(t).footer!==!1?(a(),c("footer",{key:0,class:I(["VPFooter",{"has-sidebar":i(s)}])},[p("div",ns,[i(e).footer.message?(a(),c("p",{key:0,class:"message",innerHTML:i(e).footer.message},null,8,ss)):h("",!0),i(e).footer.copyright?(a(),c("p",{key:1,class:"copyright",innerHTML:i(e).footer.copyright},null,8,os)):h("",!0)])],2)):h("",!0)}}),rs=y(as,[["__scopeId","data-v-00622169"]]);function is(){const{theme:o,frontmatter:e}=V(),t=Ve([]),s=P(()=>t.value.length>0);return ee(()=>{t.value=be(e.value.outline??o.value.outline)}),{headers:t,hasLocalNav:s}}const ls={class:"menu-text"},cs={class:"header"},us={class:"outline"},ds=m({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(o){const e=o,{theme:t}=V(),s=T(!1),n=T(0),r=T(),l=T();function v(_){var S;(S=r.value)!=null&&S.contains(_.target)||(s.value=!1)}F(s,_=>{if(_){document.addEventListener("click",v);return}document.removeEventListener("click",v)}),le("Escape",()=>{s.value=!1}),ee(()=>{s.value=!1});function u(){s.value=!s.value,n.value=window.innerHeight+Math.min(window.scrollY-e.navHeight,0)}function b(_){_.target.classList.contains("outline-link")&&(l.value&&(l.value.style.transition="none"),he(()=>{s.value=!1}))}function g(){s.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(_,S)=>(a(),c("div",{class:"VPLocalNavOutlineDropdown",style:we({"--vp-vh":n.value+"px"}),ref_key:"main",ref:r},[_.headers.length>0?(a(),c("button",{key:0,onClick:u,class:I({open:s.value})},[p("span",ls,w(i(Ae)(i(t))),1),S[0]||(S[0]=p("span",{class:"vpi-chevron-right icon"},null,-1))],2)):(a(),c("button",{key:1,onClick:g},w(i(t).returnToTopLabel||"Return to top"),1)),k(pe,{name:"flyout"},{default:f(()=>[s.value?(a(),c("div",{key:0,ref_key:"items",ref:l,class:"items",onClick:b},[p("div",cs,[p("a",{class:"top-link",href:"#",onClick:g},w(i(t).returnToTopLabel||"Return to top"),1)]),p("div",us,[k(He,{headers:_.headers},null,8,["headers"])])],512)):h("",!0)]),_:1})],4))}}),ps=y(ds,[["__scopeId","data-v-b5135c91"]]),vs={class:"container"},fs=["aria-expanded"],hs={class:"menu-text"},ms=m({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(o){const{theme:e,frontmatter:t}=V(),{hasSidebar:s}=U(),{headers:n}=is(),{y:r}=Ne(),l=T(0);O(()=>{l.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),ee(()=>{n.value=be(t.value.outline??e.value.outline)});const v=P(()=>n.value.length===0),u=P(()=>v.value&&!s.value),b=P(()=>({VPLocalNav:!0,"has-sidebar":s.value,empty:v.value,fixed:u.value}));return(g,_)=>i(t).layout!=="home"&&(!u.value||i(r)>=l.value)?(a(),c("div",{key:0,class:I(b.value)},[p("div",vs,[i(s)?(a(),c("button",{key:0,class:"menu","aria-expanded":g.open,"aria-controls":"VPSidebarNav",onClick:_[0]||(_[0]=S=>g.$emit("open-menu"))},[_[1]||(_[1]=p("span",{class:"vpi-align-left menu-icon"},null,-1)),p("span",hs,w(i(e).sidebarMenuLabel||"Menu"),1)],8,fs)):h("",!0),k(ps,{headers:i(n),navHeight:l.value},null,8,["headers","navHeight"])])],2)):h("",!0)}}),_s=y(ms,[["__scopeId","data-v-302e12c4"]]);function bs(){const o=T(!1);function e(){o.value=!0,window.addEventListener("resize",n)}function t(){o.value=!1,window.removeEventListener("resize",n)}function s(){o.value?t():e()}function n(){window.outerWidth>=768&&t()}const r=te();return F(()=>r.path,t),{isScreenOpen:o,openScreen:e,closeScreen:t,toggleScreen:s}}const ks={},gs={class:"VPSwitch",type:"button",role:"switch"},$s={class:"check"},ys={key:0,class:"icon"};function Ps(o,e){return a(),c("button",gs,[p("span",$s,[o.$slots.default?(a(),c("span",ys,[d(o.$slots,"default",{},void 0,!0)])):h("",!0)])])}const Ss=y(ks,[["render",Ps],["__scopeId","data-v-5f089da5"]]),Ls=m({__name:"VPSwitchAppearance",setup(o){const{isDark:e,theme:t}=V(),s=J("toggle-appearance",()=>{e.value=!e.value}),n=T("");return fe(()=>{n.value=e.value?t.value.lightModeSwitchTitle||"Switch to light theme":t.value.darkModeSwitchTitle||"Switch to dark theme"}),(r,l)=>(a(),$(Ss,{title:n.value,class:"VPSwitchAppearance","aria-checked":i(e),onClick:i(s)},{default:f(()=>l[0]||(l[0]=[p("span",{class:"vpi-sun sun"},null,-1),p("span",{class:"vpi-moon moon"},null,-1)])),_:1},8,["title","aria-checked","onClick"]))}}),ke=y(Ls,[["__scopeId","data-v-feed2a55"]]),Vs={key:0,class:"VPNavBarAppearance"},Ts=m({__name:"VPNavBarAppearance",setup(o){const{site:e}=V();return(t,s)=>i(e).appearance&&i(e).appearance!=="force-dark"&&i(e).appearance!=="force-auto"?(a(),c("div",Vs,[k(ke)])):h("",!0)}}),ws=y(Ts,[["__scopeId","data-v-df1ef46c"]]),ge=T();let Be=!1,re=0;function Ns(o){const e=T(!1);if(ne){!Be&&Ms(),re++;const t=F(ge,s=>{var n,r,l;s===o.el.value||(n=o.el.value)!=null&&n.contains(s)?(e.value=!0,(r=o.onFocus)==null||r.call(o)):(e.value=!1,(l=o.onBlur)==null||l.call(o))});ve(()=>{t(),re--,re||Is()})}return qe(e)}function Ms(){document.addEventListener("focusin",Ee),Be=!0,ge.value=document.activeElement}function Is(){document.removeEventListener("focusin",Ee)}function Ee(){ge.value=document.activeElement}const Cs={class:"VPMenuLink"},As=["innerHTML"],Hs=m({__name:"VPMenuLink",props:{item:{}},setup(o){const{page:e}=V();return(t,s)=>(a(),c("div",Cs,[k(D,{class:I({active:i(R)(i(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon},{default:f(()=>[p("span",{innerHTML:t.item.text},null,8,As)]),_:1},8,["class","href","target","rel","no-icon"])]))}}),se=y(Hs,[["__scopeId","data-v-f235725e"]]),Bs={class:"VPMenuGroup"},Es={key:0,class:"title"},Ds=m({__name:"VPMenuGroup",props:{text:{},items:{}},setup(o){return(e,t)=>(a(),c("div",Bs,[e.text?(a(),c("p",Es,w(e.text),1)):h("",!0),(a(!0),c(M,null,H(e.items,s=>(a(),c(M,null,["link"in s?(a(),$(se,{key:0,item:s},null,8,["item"])):h("",!0)],64))),256))]))}}),Fs=y(Ds,[["__scopeId","data-v-383e02c9"]]),Os={class:"VPMenu"},Us={key:0,class:"items"},js=m({__name:"VPMenu",props:{items:{}},setup(o){return(e,t)=>(a(),c("div",Os,[e.items?(a(),c("div",Us,[(a(!0),c(M,null,H(e.items,s=>(a(),c(M,{key:JSON.stringify(s)},["link"in s?(a(),$(se,{key:0,item:s},null,8,["item"])):"component"in s?(a(),$(E(s.component),G({key:1,ref_for:!0},s.props),null,16)):(a(),$(Fs,{key:2,text:s.text,items:s.items},null,8,["text","items"]))],64))),128))])):h("",!0),d(e.$slots,"default",{},void 0,!0)]))}}),Gs=y(js,[["__scopeId","data-v-cc1be4f9"]]),zs=["aria-expanded","aria-label"],Ks={key:0,class:"text"},Rs=["innerHTML"],Ws={key:1,class:"vpi-more-horizontal icon"},qs={class:"menu"},Js=m({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(o){const e=T(!1),t=T();Ns({el:t,onBlur:s});function s(){e.value=!1}return(n,r)=>(a(),c("div",{class:"VPFlyout",ref_key:"el",ref:t,onMouseenter:r[1]||(r[1]=l=>e.value=!0),onMouseleave:r[2]||(r[2]=l=>e.value=!1)},[p("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":e.value,"aria-label":n.label,onClick:r[0]||(r[0]=l=>e.value=!e.value)},[n.button||n.icon?(a(),c("span",Ks,[n.icon?(a(),c("span",{key:0,class:I([n.icon,"option-icon"])},null,2)):h("",!0),n.button?(a(),c("span",{key:1,innerHTML:n.button},null,8,Rs)):h("",!0),r[3]||(r[3]=p("span",{class:"vpi-chevron-down text-icon"},null,-1))])):(a(),c("span",Ws))],8,zs),p("div",qs,[k(Gs,{items:n.items},{default:f(()=>[d(n.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),$e=y(Js,[["__scopeId","data-v-6fdb53fb"]]),Ys=["href","aria-label","innerHTML"],Xs=m({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(o){const e=o,t=T();O(async()=>{var r;await he();const n=(r=t.value)==null?void 0:r.children[0];n instanceof HTMLElement&&n.className.startsWith("vpi-social-")&&(getComputedStyle(n).maskImage||getComputedStyle(n).webkitMaskImage)==="none"&&n.style.setProperty("--icon",`url('https://api.iconify.design/simple-icons/${e.icon}.svg')`)});const s=P(()=>typeof e.icon=="object"?e.icon.svg:``);return(n,r)=>(a(),c("a",{ref_key:"el",ref:t,class:"VPSocialLink no-icon",href:n.link,"aria-label":n.ariaLabel??(typeof n.icon=="string"?n.icon:""),target:"_blank",rel:"noopener",innerHTML:s.value},null,8,Ys))}}),Qs=y(Xs,[["__scopeId","data-v-90618787"]]),Zs={class:"VPSocialLinks"},xs=m({__name:"VPSocialLinks",props:{links:{}},setup(o){return(e,t)=>(a(),c("div",Zs,[(a(!0),c(M,null,H(e.links,({link:s,icon:n,ariaLabel:r})=>(a(),$(Qs,{key:s,icon:n,link:s,ariaLabel:r},null,8,["icon","link","ariaLabel"]))),128))]))}}),ye=y(xs,[["__scopeId","data-v-ca397b59"]]),eo={key:0,class:"group translations"},to={class:"trans-title"},no={key:1,class:"group"},so={class:"item appearance"},oo={class:"label"},ao={class:"appearance-action"},ro={key:2,class:"group"},io={class:"item social-links"},lo=m({__name:"VPNavBarExtra",setup(o){const{site:e,theme:t}=V(),{localeLinks:s,currentLang:n}=X({correspondingLink:!0}),r=P(()=>s.value.length&&n.value.label||e.value.appearance||t.value.socialLinks);return(l,v)=>r.value?(a(),$($e,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:f(()=>[i(s).length&&i(n).label?(a(),c("div",eo,[p("p",to,w(i(n).label),1),(a(!0),c(M,null,H(i(s),u=>(a(),$(se,{key:u.link,item:u},null,8,["item"]))),128))])):h("",!0),i(e).appearance&&i(e).appearance!=="force-dark"&&i(e).appearance!=="force-auto"?(a(),c("div",no,[p("div",so,[p("p",oo,w(i(t).darkModeSwitchLabel||"Appearance"),1),p("div",ao,[k(ke)])])])):h("",!0),i(t).socialLinks?(a(),c("div",ro,[p("div",io,[k(ye,{class:"social-links-list",links:i(t).socialLinks},null,8,["links"])])])):h("",!0)]),_:1})):h("",!0)}}),co=y(lo,[["__scopeId","data-v-de417752"]]),uo=["aria-expanded"],po=m({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(o){return(e,t)=>(a(),c("button",{type:"button",class:I(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:t[0]||(t[0]=s=>e.$emit("click"))},t[1]||(t[1]=[p("span",{class:"container"},[p("span",{class:"top"}),p("span",{class:"middle"}),p("span",{class:"bottom"})],-1)]),10,uo))}}),vo=y(po,[["__scopeId","data-v-bed00f9b"]]),fo=["innerHTML"],ho=m({__name:"VPNavBarMenuLink",props:{item:{}},setup(o){const{page:e}=V();return(t,s)=>(a(),$(D,{class:I({VPNavBarMenuLink:!0,active:i(R)(i(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon,tabindex:"0"},{default:f(()=>[p("span",{innerHTML:t.item.text},null,8,fo)]),_:1},8,["class","href","target","rel","no-icon"]))}}),mo=y(ho,[["__scopeId","data-v-a1b6385d"]]),_o=m({__name:"VPNavBarMenuGroup",props:{item:{}},setup(o){const e=o,{page:t}=V(),s=r=>"component"in r?!1:"link"in r?R(t.value.relativePath,r.link,!!e.item.activeMatch):r.items.some(s),n=P(()=>s(e.item));return(r,l)=>(a(),$($e,{class:I({VPNavBarMenuGroup:!0,active:i(R)(i(t).relativePath,r.item.activeMatch,!!r.item.activeMatch)||n.value}),button:r.item.text,items:r.item.items},null,8,["class","button","items"]))}}),bo={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},ko=m({__name:"VPNavBarMenu",setup(o){const{theme:e}=V();return(t,s)=>i(e).nav?(a(),c("nav",bo,[s[0]||(s[0]=p("span",{id:"main-nav-aria-label",class:"visually-hidden"}," Main Navigation ",-1)),(a(!0),c(M,null,H(i(e).nav,n=>(a(),c(M,{key:JSON.stringify(n)},["link"in n?(a(),$(mo,{key:0,item:n},null,8,["item"])):"component"in n?(a(),$(E(n.component),G({key:1,ref_for:!0},n.props),null,16)):(a(),$(_o,{key:2,item:n},null,8,["item"]))],64))),128))])):h("",!0)}}),go=y(ko,[["__scopeId","data-v-bdd1a0e8"]]);function $o(o){const{localeIndex:e,theme:t}=V();function s(n){var C,A,N;const r=n.split("."),l=(C=t.value.search)==null?void 0:C.options,v=l&&typeof l=="object",u=v&&((N=(A=l.locales)==null?void 0:A[e.value])==null?void 0:N.translations)||null,b=v&&l.translations||null;let g=u,_=b,S=o;const L=r.pop();for(const B of r){let j=null;const q=S==null?void 0:S[B];q&&(j=S=q);const oe=_==null?void 0:_[B];oe&&(j=_=oe);const ae=g==null?void 0:g[B];ae&&(j=g=ae),q||(S=j),oe||(_=j),ae||(g=j)}return(g==null?void 0:g[L])??(_==null?void 0:_[L])??(S==null?void 0:S[L])??""}return s}const yo=["aria-label"],Po={class:"DocSearch-Button-Container"},So={class:"DocSearch-Button-Placeholder"},Pe=m({__name:"VPNavBarSearchButton",setup(o){const t=$o({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(s,n)=>(a(),c("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":i(t)("button.buttonAriaLabel")},[p("span",Po,[n[0]||(n[0]=p("span",{class:"vp-icon DocSearch-Search-Icon"},null,-1)),p("span",So,w(i(t)("button.buttonText")),1)]),n[1]||(n[1]=p("span",{class:"DocSearch-Button-Keys"},[p("kbd",{class:"DocSearch-Button-Key"}),p("kbd",{class:"DocSearch-Button-Key"},"K")],-1))],8,yo))}}),Lo={class:"VPNavBarSearch"},Vo={id:"local-search"},To={key:1,id:"docsearch"},wo=m({__name:"VPNavBarSearch",setup(o){const e=Je(()=>Ye(()=>import("./VPLocalSearchBox.B3c5Vn6E.js"),__vite__mapDeps([0,1]))),t=()=>null,{theme:s}=V(),n=T(!1),r=T(!1);O(()=>{});function l(){n.value||(n.value=!0,setTimeout(v,16))}function v(){const _=new Event("keydown");_.key="k",_.metaKey=!0,window.dispatchEvent(_),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||v()},16)}function u(_){const S=_.target,L=S.tagName;return S.isContentEditable||L==="INPUT"||L==="SELECT"||L==="TEXTAREA"}const b=T(!1);le("k",_=>{(_.ctrlKey||_.metaKey)&&(_.preventDefault(),b.value=!0)}),le("/",_=>{u(_)||(_.preventDefault(),b.value=!0)});const g="local";return(_,S)=>{var L;return a(),c("div",Lo,[i(g)==="local"?(a(),c(M,{key:0},[b.value?(a(),$(i(e),{key:0,onClose:S[0]||(S[0]=C=>b.value=!1)})):h("",!0),p("div",Vo,[k(Pe,{onClick:S[1]||(S[1]=C=>b.value=!0)})])],64)):i(g)==="algolia"?(a(),c(M,{key:1},[n.value?(a(),$(i(t),{key:0,algolia:((L=i(s).search)==null?void 0:L.options)??i(s).algolia,onVnodeBeforeMount:S[2]||(S[2]=C=>r.value=!0)},null,8,["algolia"])):h("",!0),r.value?h("",!0):(a(),c("div",To,[k(Pe,{onClick:l})]))],64)):h("",!0)])}}}),No=m({__name:"VPNavBarSocialLinks",setup(o){const{theme:e}=V();return(t,s)=>i(e).socialLinks?(a(),$(ye,{key:0,class:"VPNavBarSocialLinks",links:i(e).socialLinks},null,8,["links"])):h("",!0)}}),Mo=y(No,[["__scopeId","data-v-53af0b4f"]]),Io=["href","rel","target"],Co=["innerHTML"],Ao={key:2},Ho=m({__name:"VPNavBarTitle",setup(o){const{site:e,theme:t}=V(),{hasSidebar:s}=U(),{currentLang:n}=X(),r=P(()=>{var u;return typeof t.value.logoLink=="string"?t.value.logoLink:(u=t.value.logoLink)==null?void 0:u.link}),l=P(()=>{var u;return typeof t.value.logoLink=="string"||(u=t.value.logoLink)==null?void 0:u.rel}),v=P(()=>{var u;return typeof t.value.logoLink=="string"||(u=t.value.logoLink)==null?void 0:u.target});return(u,b)=>(a(),c("div",{class:I(["VPNavBarTitle",{"has-sidebar":i(s)}])},[p("a",{class:"title",href:r.value??i(_e)(i(n).link),rel:l.value,target:v.value},[d(u.$slots,"nav-bar-title-before",{},void 0,!0),i(t).logo?(a(),$(Z,{key:0,class:"logo",image:i(t).logo},null,8,["image"])):h("",!0),i(t).siteTitle?(a(),c("span",{key:1,innerHTML:i(t).siteTitle},null,8,Co)):i(t).siteTitle===void 0?(a(),c("span",Ao,w(i(e).title),1)):h("",!0),d(u.$slots,"nav-bar-title-after",{},void 0,!0)],8,Io)],2))}}),Bo=y(Ho,[["__scopeId","data-v-e6758039"]]),Eo={class:"items"},Do={class:"title"},Fo=m({__name:"VPNavBarTranslations",setup(o){const{theme:e}=V(),{localeLinks:t,currentLang:s}=X({correspondingLink:!0});return(n,r)=>i(t).length&&i(s).label?(a(),$($e,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:i(e).langMenuLabel||"Change language"},{default:f(()=>[p("div",Eo,[p("p",Do,w(i(s).label),1),(a(!0),c(M,null,H(i(t),l=>(a(),$(se,{key:l.link,item:l},null,8,["item"]))),128))])]),_:1},8,["label"])):h("",!0)}}),Oo=y(Fo,[["__scopeId","data-v-74e47c9d"]]),Uo={class:"wrapper"},jo={class:"container"},Go={class:"title"},zo={class:"content"},Ko={class:"content-body"},Ro=m({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(o){const e=o,{y:t}=Ne(),{hasSidebar:s}=U(),{frontmatter:n}=V(),r=T({});return fe(()=>{r.value={"has-sidebar":s.value,home:n.value.layout==="home",top:t.value===0,"screen-open":e.isScreenOpen}}),(l,v)=>(a(),c("div",{class:I(["VPNavBar",r.value])},[p("div",Uo,[p("div",jo,[p("div",Go,[k(Bo,null,{"nav-bar-title-before":f(()=>[d(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[d(l.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),p("div",zo,[p("div",Ko,[d(l.$slots,"nav-bar-content-before",{},void 0,!0),k(wo,{class:"search"}),k(go,{class:"menu"}),k(Oo,{class:"translations"}),k(ws,{class:"appearance"}),k(Mo,{class:"social-links"}),k(co,{class:"extra"}),d(l.$slots,"nav-bar-content-after",{},void 0,!0),k(vo,{class:"hamburger",active:l.isScreenOpen,onClick:v[0]||(v[0]=u=>l.$emit("toggle-screen"))},null,8,["active"])])])])]),v[1]||(v[1]=p("div",{class:"divider"},[p("div",{class:"divider-line"})],-1))],2))}}),Wo=y(Ro,[["__scopeId","data-v-de8dc9f0"]]),qo={key:0,class:"VPNavScreenAppearance"},Jo={class:"text"},Yo=m({__name:"VPNavScreenAppearance",setup(o){const{site:e,theme:t}=V();return(s,n)=>i(e).appearance&&i(e).appearance!=="force-dark"&&i(e).appearance!=="force-auto"?(a(),c("div",qo,[p("p",Jo,w(i(t).darkModeSwitchLabel||"Appearance"),1),k(ke)])):h("",!0)}}),Xo=y(Yo,[["__scopeId","data-v-366d16fc"]]),Qo=["innerHTML"],Zo=m({__name:"VPNavScreenMenuLink",props:{item:{}},setup(o){const e=J("close-screen");return(t,s)=>(a(),$(D,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon,onClick:i(e)},{default:f(()=>[p("span",{innerHTML:t.item.text},null,8,Qo)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),xo=y(Zo,[["__scopeId","data-v-6e744a18"]]),ea=["innerHTML"],ta=m({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(o){const e=J("close-screen");return(t,s)=>(a(),$(D,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon,onClick:i(e)},{default:f(()=>[p("span",{innerHTML:t.item.text},null,8,ea)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),De=y(ta,[["__scopeId","data-v-584175f4"]]),na={class:"VPNavScreenMenuGroupSection"},sa={key:0,class:"title"},oa=m({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(o){return(e,t)=>(a(),c("div",na,[e.text?(a(),c("p",sa,w(e.text),1)):h("",!0),(a(!0),c(M,null,H(e.items,s=>(a(),$(De,{key:s.text,item:s},null,8,["item"]))),128))]))}}),aa=y(oa,[["__scopeId","data-v-a4bf30cc"]]),ra=["aria-controls","aria-expanded"],ia=["innerHTML"],la=["id"],ca={key:0,class:"item"},ua={key:1,class:"item"},da={key:2,class:"group"},pa=m({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(o){const e=o,t=T(!1),s=P(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function n(){t.value=!t.value}return(r,l)=>(a(),c("div",{class:I(["VPNavScreenMenuGroup",{open:t.value}])},[p("button",{class:"button","aria-controls":s.value,"aria-expanded":t.value,onClick:n},[p("span",{class:"button-text",innerHTML:r.text},null,8,ia),l[0]||(l[0]=p("span",{class:"vpi-plus button-icon"},null,-1))],8,ra),p("div",{id:s.value,class:"items"},[(a(!0),c(M,null,H(r.items,v=>(a(),c(M,{key:JSON.stringify(v)},["link"in v?(a(),c("div",ca,[k(De,{item:v},null,8,["item"])])):"component"in v?(a(),c("div",ua,[(a(),$(E(v.component),G({ref_for:!0},v.props,{"screen-menu":""}),null,16))])):(a(),c("div",da,[k(aa,{text:v.text,items:v.items},null,8,["text","items"])]))],64))),128))],8,la)],2))}}),va=y(pa,[["__scopeId","data-v-4c4e6736"]]),fa={key:0,class:"VPNavScreenMenu"},ha=m({__name:"VPNavScreenMenu",setup(o){const{theme:e}=V();return(t,s)=>i(e).nav?(a(),c("nav",fa,[(a(!0),c(M,null,H(i(e).nav,n=>(a(),c(M,{key:JSON.stringify(n)},["link"in n?(a(),$(xo,{key:0,item:n},null,8,["item"])):"component"in n?(a(),$(E(n.component),G({key:1,ref_for:!0},n.props,{"screen-menu":""}),null,16)):(a(),$(va,{key:2,text:n.text||"",items:n.items},null,8,["text","items"]))],64))),128))])):h("",!0)}}),ma=m({__name:"VPNavScreenSocialLinks",setup(o){const{theme:e}=V();return(t,s)=>i(e).socialLinks?(a(),$(ye,{key:0,class:"VPNavScreenSocialLinks",links:i(e).socialLinks},null,8,["links"])):h("",!0)}}),_a={class:"list"},ba=m({__name:"VPNavScreenTranslations",setup(o){const{localeLinks:e,currentLang:t}=X({correspondingLink:!0}),s=T(!1);function n(){s.value=!s.value}return(r,l)=>i(e).length&&i(t).label?(a(),c("div",{key:0,class:I(["VPNavScreenTranslations",{open:s.value}])},[p("button",{class:"title",onClick:n},[l[0]||(l[0]=p("span",{class:"vpi-languages icon lang"},null,-1)),K(" "+w(i(t).label)+" ",1),l[1]||(l[1]=p("span",{class:"vpi-chevron-down icon chevron"},null,-1))]),p("ul",_a,[(a(!0),c(M,null,H(i(e),v=>(a(),c("li",{key:v.link,class:"item"},[k(D,{class:"link",href:v.link},{default:f(()=>[K(w(v.text),1)]),_:2},1032,["href"])]))),128))])],2)):h("",!0)}}),ka=y(ba,[["__scopeId","data-v-2ae0c1dd"]]),ga={class:"container"},$a=m({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(o){const e=T(null),t=Me(ne?document.body:null);return(s,n)=>(a(),$(pe,{name:"fade",onEnter:n[0]||(n[0]=r=>t.value=!0),onAfterLeave:n[1]||(n[1]=r=>t.value=!1)},{default:f(()=>[s.open?(a(),c("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e,id:"VPNavScreen"},[p("div",ga,[d(s.$slots,"nav-screen-content-before",{},void 0,!0),k(ha,{class:"menu"}),k(ka,{class:"translations"}),k(Xo,{class:"appearance"}),k(ma,{class:"social-links"}),d(s.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):h("",!0)]),_:3}))}}),ya=y($a,[["__scopeId","data-v-56ce9e49"]]),Pa={key:0,class:"VPNav"},Sa=m({__name:"VPNav",setup(o){const{isScreenOpen:e,closeScreen:t,toggleScreen:s}=bs(),{frontmatter:n}=V(),r=P(()=>n.value.navbar!==!1);return me("close-screen",t),x(()=>{ne&&document.documentElement.classList.toggle("hide-nav",!r.value)}),(l,v)=>r.value?(a(),c("header",Pa,[k(Wo,{"is-screen-open":i(e),onToggleScreen:i(s)},{"nav-bar-title-before":f(()=>[d(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[d(l.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":f(()=>[d(l.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":f(()=>[d(l.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),k(ya,{open:i(e)},{"nav-screen-content-before":f(()=>[d(l.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":f(()=>[d(l.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):h("",!0)}}),La=y(Sa,[["__scopeId","data-v-19a3c1e3"]]),Va=["role","tabindex"],Ta={key:1,class:"items"},wa=m({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(o){const e=o,{collapsed:t,collapsible:s,isLink:n,isActiveLink:r,hasActiveLink:l,hasChildren:v,toggle:u}=$t(P(()=>e.item)),b=P(()=>v.value?"section":"div"),g=P(()=>n.value?"a":"div"),_=P(()=>v.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),S=P(()=>n.value?void 0:"button"),L=P(()=>[[`level-${e.depth}`],{collapsible:s.value},{collapsed:t.value},{"is-link":n.value},{"is-active":r.value},{"has-active":l.value}]);function C(N){"key"in N&&N.key!=="Enter"||!e.item.link&&u()}function A(){e.item.link&&u()}return(N,B)=>{const j=W("VPSidebarItem",!0);return a(),$(E(b.value),{class:I(["VPSidebarItem",L.value])},{default:f(()=>[N.item.text?(a(),c("div",G({key:0,class:"item",role:S.value},Xe(N.item.items?{click:C,keydown:C}:{},!0),{tabindex:N.item.items&&0}),[B[1]||(B[1]=p("div",{class:"indicator"},null,-1)),N.item.link?(a(),$(D,{key:0,tag:g.value,class:"link",href:N.item.link,rel:N.item.rel,target:N.item.target},{default:f(()=>[(a(),$(E(_.value),{class:"text",innerHTML:N.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(a(),$(E(_.value),{key:1,class:"text",innerHTML:N.item.text},null,8,["innerHTML"])),N.item.collapsed!=null&&N.item.items&&N.item.items.length?(a(),c("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:A,onKeydown:Qe(A,["enter"]),tabindex:"0"},B[0]||(B[0]=[p("span",{class:"vpi-chevron-right caret-icon"},null,-1)]),32)):h("",!0)],16,Va)):h("",!0),N.item.items&&N.item.items.length?(a(),c("div",Ta,[N.depth<5?(a(!0),c(M,{key:0},H(N.item.items,q=>(a(),$(j,{key:q.text,item:q,depth:N.depth+1},null,8,["item","depth"]))),128)):h("",!0)])):h("",!0)]),_:1},8,["class"])}}}),Na=y(wa,[["__scopeId","data-v-670081f0"]]),Ma=m({__name:"VPSidebarGroup",props:{items:{}},setup(o){const e=T(!0);let t=null;return O(()=>{t=setTimeout(()=>{t=null,e.value=!1},300)}),Ze(()=>{t!=null&&(clearTimeout(t),t=null)}),(s,n)=>(a(!0),c(M,null,H(s.items,r=>(a(),c("div",{key:r.text,class:I(["group",{"no-transition":e.value}])},[k(Na,{item:r,depth:0},null,8,["item"])],2))),128))}}),Ia=y(Ma,[["__scopeId","data-v-55d905db"]]),Ca={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},Aa=m({__name:"VPSidebar",props:{open:{type:Boolean}},setup(o){const{sidebarGroups:e,hasSidebar:t}=U(),s=o,n=T(null),r=Me(ne?document.body:null);F([s,n],()=>{var v;s.open?(r.value=!0,(v=n.value)==null||v.focus()):r.value=!1},{immediate:!0,flush:"post"});const l=T(0);return F(e,()=>{l.value+=1},{deep:!0}),(v,u)=>i(t)?(a(),c("aside",{key:0,class:I(["VPSidebar",{open:v.open}]),ref_key:"navEl",ref:n,onClick:u[0]||(u[0]=xe(()=>{},["stop"]))},[u[2]||(u[2]=p("div",{class:"curtain"},null,-1)),p("nav",Ca,[u[1]||(u[1]=p("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),d(v.$slots,"sidebar-nav-before",{},void 0,!0),(a(),$(Ia,{items:i(e),key:l.value},null,8,["items"])),d(v.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):h("",!0)}}),Ha=y(Aa,[["__scopeId","data-v-94be1d22"]]),Ba=m({__name:"VPSkipLink",setup(o){const e=te(),t=T();F(()=>e.path,()=>t.value.focus());function s({target:n}){const r=document.getElementById(decodeURIComponent(n.hash).slice(1));if(r){const l=()=>{r.removeAttribute("tabindex"),r.removeEventListener("blur",l)};r.setAttribute("tabindex","-1"),r.addEventListener("blur",l),r.focus(),window.scrollTo(0,0)}}return(n,r)=>(a(),c(M,null,[p("span",{ref_key:"backToTop",ref:t,tabindex:"-1"},null,512),p("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:s}," Skip to content ")],64))}}),Ea=y(Ba,[["__scopeId","data-v-2cbb4704"]]),Da=m({__name:"Layout",setup(o){const{isOpen:e,open:t,close:s}=U(),n=te();F(()=>n.path,s),gt(e,s);const{frontmatter:r}=V(),l=Ie(),v=P(()=>!!l["home-hero-image"]);return me("hero-image-slot-exists",v),(u,b)=>{const g=W("Content");return i(r).layout!==!1?(a(),c("div",{key:0,class:I(["Layout",i(r).pageClass])},[d(u.$slots,"layout-top",{},void 0,!0),k(Ea),k(it,{class:"backdrop",show:i(e),onClick:i(s)},null,8,["show","onClick"]),k(La,null,{"nav-bar-title-before":f(()=>[d(u.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[d(u.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":f(()=>[d(u.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":f(()=>[d(u.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":f(()=>[d(u.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":f(()=>[d(u.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),k(_s,{open:i(e),onOpenMenu:i(t)},null,8,["open","onOpenMenu"]),k(Ha,{open:i(e)},{"sidebar-nav-before":f(()=>[d(u.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":f(()=>[d(u.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),k(ts,null,{"page-top":f(()=>[d(u.$slots,"page-top",{},void 0,!0)]),"page-bottom":f(()=>[d(u.$slots,"page-bottom",{},void 0,!0)]),"not-found":f(()=>[d(u.$slots,"not-found",{},void 0,!0)]),"home-hero-before":f(()=>[d(u.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":f(()=>[d(u.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[d(u.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[d(u.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[d(u.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[d(u.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":f(()=>[d(u.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":f(()=>[d(u.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":f(()=>[d(u.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":f(()=>[d(u.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":f(()=>[d(u.$slots,"doc-before",{},void 0,!0)]),"doc-after":f(()=>[d(u.$slots,"doc-after",{},void 0,!0)]),"doc-top":f(()=>[d(u.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":f(()=>[d(u.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":f(()=>[d(u.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":f(()=>[d(u.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":f(()=>[d(u.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[d(u.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[d(u.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[d(u.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),k(rs),d(u.$slots,"layout-bottom",{},void 0,!0)],2)):(a(),$(g,{key:1}))}}}),Fa=y(Da,[["__scopeId","data-v-6ceee570"]]),Se={Layout:Fa,enhanceApp:({app:o})=>{o.component("Badge",ot)}},Oa=o=>{if(typeof document>"u")return{stabilizeScrollPosition:n=>async(...r)=>n(...r)};const e=document.documentElement;return{stabilizeScrollPosition:s=>async(...n)=>{const r=s(...n),l=o.value;if(!l)return r;const v=l.offsetTop-e.scrollTop;return await he(),e.scrollTop=l.offsetTop-v,r}}},Fe="vitepress:tabSharedState",Y=typeof localStorage<"u"?localStorage:null,Oe="vitepress:tabsSharedState",Ua=()=>{const o=Y==null?void 0:Y.getItem(Oe);if(o)try{return JSON.parse(o)}catch{}return{}},ja=o=>{Y&&Y.setItem(Oe,JSON.stringify(o))},Ga=o=>{const e=et({});F(()=>e.content,(t,s)=>{t&&s&&ja(t)},{deep:!0}),o.provide(Fe,e)},za=(o,e)=>{const t=J(Fe);if(!t)throw new Error("[vitepress-plugin-tabs] TabsSharedState should be injected");O(()=>{t.content||(t.content=Ua())});const s=T(),n=P({get(){var u;const l=e.value,v=o.value;if(l){const b=(u=t.content)==null?void 0:u[l];if(b&&v.includes(b))return b}else{const b=s.value;if(b)return b}return v[0]},set(l){const v=e.value;v?t.content&&(t.content[v]=l):s.value=l}});return{selected:n,select:l=>{n.value=l}}};let Le=0;const Ka=()=>(Le++,""+Le);function Ra(){const o=Ie();return P(()=>{var s;const t=(s=o.default)==null?void 0:s.call(o);return t?t.filter(n=>typeof n.type=="object"&&"__name"in n.type&&n.type.__name==="PluginTabsTab"&&n.props).map(n=>{var r;return(r=n.props)==null?void 0:r.label}):[]})}const Ue="vitepress:tabSingleState",Wa=o=>{me(Ue,o)},qa=()=>{const o=J(Ue);if(!o)throw new Error("[vitepress-plugin-tabs] TabsSingleState should be injected");return o},Ja={class:"plugin-tabs"},Ya=["id","aria-selected","aria-controls","tabindex","onClick"],Xa=m({__name:"PluginTabs",props:{sharedStateKey:{}},setup(o){const e=o,t=Ra(),{selected:s,select:n}=za(t,tt(e,"sharedStateKey")),r=T(),{stabilizeScrollPosition:l}=Oa(r),v=l(n),u=T([]),b=_=>{var C;const S=t.value.indexOf(s.value);let L;_.key==="ArrowLeft"?L=S>=1?S-1:t.value.length-1:_.key==="ArrowRight"&&(L=S(a(),c("div",Ja,[p("div",{ref_key:"tablist",ref:r,class:"plugin-tabs--tab-list",role:"tablist",onKeydown:b},[(a(!0),c(M,null,H(i(t),L=>(a(),c("button",{id:`tab-${L}-${i(g)}`,ref_for:!0,ref_key:"buttonRefs",ref:u,key:L,role:"tab",class:"plugin-tabs--tab","aria-selected":L===i(s),"aria-controls":`panel-${L}-${i(g)}`,tabindex:L===i(s)?0:-1,onClick:()=>i(v)(L)},w(L),9,Ya))),128))],544),d(_.$slots,"default")]))}}),Qa=["id","aria-labelledby"],Za=m({__name:"PluginTabsTab",props:{label:{}},setup(o){const{uid:e,selected:t}=qa();return(s,n)=>i(t)===s.label?(a(),c("div",{key:0,id:`panel-${s.label}-${i(e)}`,class:"plugin-tabs--content",role:"tabpanel",tabindex:"0","aria-labelledby":`tab-${s.label}-${i(e)}`},[d(s.$slots,"default",{},void 0,!0)],8,Qa)):h("",!0)}}),xa=y(Za,[["__scopeId","data-v-2855cb06"]]),er=o=>{Ga(o),o.component("PluginTabs",Xa),o.component("PluginTabsTab",xa)},tr={class:"chat-box"},nr={key:0,class:"chat-message-left"},sr={class:"chat-avatar"},or=["src"],ar={class:"chat-info-left"},rr={class:"chat-title"},ir={class:"name"},lr={class:"bubble-left"},cr=["innerHTML"],ur={key:1,style:{"white-space":"pre-wrap"}},dr={key:1,class:"chat-message-right"},pr={class:"chat-info-right"},vr={class:"chat-title"},fr={class:"name"},hr={class:"bubble-right"},mr=["innerHTML"],_r={key:1,style:{"white-space":"pre-wrap"}},br={class:"chat-avatar"},kr=["src"],gr=m({__name:"ChatBox",props:{title:{},messages:{},noShadow:{type:Boolean},lType:{},rType:{}},setup(o){nt(u=>({"3861e4ab":v.value,cc4e36f8:r.value,cf2870f2:l.value}));const e=o,t=u=>{switch(u){case"tip":return"var(--vp-c-tip-soft)";case"warning":return"var(--vp-c-warning-soft)";case"danger":return"var(--vp-c-danger-soft)";case"info":default:return"var(--vp-c-default-soft)"}},s=u=>u.avatar?u.avatar==="dice"?z("/images/avatar/dice.svg"):z(`/images/avatar/${u.avatar}.jpg`):u.send?z("/images/avatar/user1.jpg"):z("/images/avatar/dice.svg"),n=u=>u.username&&u.username!==""?u.username:u.send?"木落":"海豹核心",r=P(()=>t(e.rType??"info")),l=P(()=>t(e.lType??"tip")),v=P(()=>e.noShadow?.99:.95);return(u,b)=>(a(),c("div",tr,[(a(!0),c(M,null,H(e.messages,g=>(a(),c(M,{key:g.username+g.content},[g.send?(a(),c("div",dr,[p("div",pr,[p("span",vr,[p("span",fr,w(n(g)),1)]),p("div",hr,[g.html?(a(),c("span",{key:0,innerHTML:g.content},null,8,mr)):(a(),c("span",_r,w(g.content),1))])]),p("div",br,[p("img",{src:s(g),alt:"头像",width:"40",height:"40"},null,8,kr)])])):(a(),c("div",nr,[p("div",sr,[p("img",{src:s(g),alt:"头像",width:"40",height:"40"},null,8,or)]),p("div",ar,[p("span",rr,[p("span",ir,w(n(g)),1)]),p("div",lr,[g.html?(a(),c("span",{key:0,innerHTML:g.content},null,8,cr)):(a(),c("span",ur,w(g.content),1))])])]))],64))),128))]))}}),$r=y(gr,[["__scopeId","data-v-5dc73542"]]),Pr={extends:Se,Layout:()=>st(Se.Layout,null,{}),enhanceApp({app:o,router:e,siteData:t}){er(o),o.component("ChatBox",$r)}};export{Pr as R,$o as c,V as u}; diff --git a/assets/chunks/timeline-definition-27KQCCZ3.HS8QNxBM.js b/assets/chunks/timeline-definition-27KQCCZ3.HS8QNxBM.js new file mode 100644 index 000000000..f996be655 --- /dev/null +++ b/assets/chunks/timeline-definition-27KQCCZ3.HS8QNxBM.js @@ -0,0 +1,61 @@ +import{_ as s,aa as xt,ab as kt,x as vt,j as q,d as _t,l as T,ac as bt,ad as wt,ae as St,af as Et}from"../app.D0Wo8w0i.js";import{d as nt}from"./arc.DjT8Zpi0.js";import"./framework.B1keMFNq.js";import"./theme.8WvZWF-M.js";var X=function(){var n=s(function(f,i,a,d){for(a=a||{},d=f.length;d--;a[f[d]]=i);return a},"o"),t=[6,8,10,11,12,14,16,17,20,21],e=[1,9],l=[1,10],r=[1,11],h=[1,12],c=[1,13],g=[1,16],m=[1,17],p={trace:s(function(){},"trace"),yy:{},symbols_:{error:2,start:3,timeline:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,period_statement:18,event_statement:19,period:20,event:21,$accept:0,$end:1},terminals_:{2:"error",4:"timeline",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",20:"period",21:"event"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,1],[18,1],[19,1]],performAction:s(function(i,a,d,u,y,o,S){var k=o.length-1;switch(y){case 1:return o[k-1];case 2:this.$=[];break;case 3:o[k-1].push(o[k]),this.$=o[k-1];break;case 4:case 5:this.$=o[k];break;case 6:case 7:this.$=[];break;case 8:u.getCommonDb().setDiagramTitle(o[k].substr(6)),this.$=o[k].substr(6);break;case 9:this.$=o[k].trim(),u.getCommonDb().setAccTitle(this.$);break;case 10:case 11:this.$=o[k].trim(),u.getCommonDb().setAccDescription(this.$);break;case 12:u.addSection(o[k].substr(8)),this.$=o[k].substr(8);break;case 15:u.addTask(o[k],0,""),this.$=o[k];break;case 16:u.addEvent(o[k].substr(2)),this.$=o[k];break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},n(t,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:e,12:l,14:r,16:h,17:c,18:14,19:15,20:g,21:m},n(t,[2,7],{1:[2,1]}),n(t,[2,3]),{9:18,11:e,12:l,14:r,16:h,17:c,18:14,19:15,20:g,21:m},n(t,[2,5]),n(t,[2,6]),n(t,[2,8]),{13:[1,19]},{15:[1,20]},n(t,[2,11]),n(t,[2,12]),n(t,[2,13]),n(t,[2,14]),n(t,[2,15]),n(t,[2,16]),n(t,[2,4]),n(t,[2,9]),n(t,[2,10])],defaultActions:{},parseError:s(function(i,a){if(a.recoverable)this.trace(i);else{var d=new Error(i);throw d.hash=a,d}},"parseError"),parse:s(function(i){var a=this,d=[0],u=[],y=[null],o=[],S=this.table,k="",M=0,P=0,B=2,J=1,O=o.slice.call(arguments,1),v=Object.create(this.lexer),E={yy:{}};for(var b in this.yy)Object.prototype.hasOwnProperty.call(this.yy,b)&&(E.yy[b]=this.yy[b]);v.setInput(i,E.yy),E.yy.lexer=v,E.yy.parser=this,typeof v.yylloc>"u"&&(v.yylloc={});var L=v.yylloc;o.push(L);var A=v.options&&v.options.ranges;typeof E.yy.parseError=="function"?this.parseError=E.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function R(I){d.length=d.length-2*I,y.length=y.length-I,o.length=o.length-I}s(R,"popStack");function F(){var I;return I=u.pop()||v.lex()||J,typeof I!="number"&&(I instanceof Array&&(u=I,I=u.pop()),I=a.symbols_[I]||I),I}s(F,"lex");for(var w,C,N,K,z={},j,$,et,G;;){if(C=d[d.length-1],this.defaultActions[C]?N=this.defaultActions[C]:((w===null||typeof w>"u")&&(w=F()),N=S[C]&&S[C][w]),typeof N>"u"||!N.length||!N[0]){var Q="";G=[];for(j in S[C])this.terminals_[j]&&j>B&&G.push("'"+this.terminals_[j]+"'");v.showPosition?Q="Parse error on line "+(M+1)+`: +`+v.showPosition()+` +Expecting `+G.join(", ")+", got '"+(this.terminals_[w]||w)+"'":Q="Parse error on line "+(M+1)+": Unexpected "+(w==J?"end of input":"'"+(this.terminals_[w]||w)+"'"),this.parseError(Q,{text:v.match,token:this.terminals_[w]||w,line:v.yylineno,loc:L,expected:G})}if(N[0]instanceof Array&&N.length>1)throw new Error("Parse Error: multiple actions possible at state: "+C+", token: "+w);switch(N[0]){case 1:d.push(w),y.push(v.yytext),o.push(v.yylloc),d.push(N[1]),w=null,P=v.yyleng,k=v.yytext,M=v.yylineno,L=v.yylloc;break;case 2:if($=this.productions_[N[1]][1],z.$=y[y.length-$],z._$={first_line:o[o.length-($||1)].first_line,last_line:o[o.length-1].last_line,first_column:o[o.length-($||1)].first_column,last_column:o[o.length-1].last_column},A&&(z._$.range=[o[o.length-($||1)].range[0],o[o.length-1].range[1]]),K=this.performAction.apply(z,[k,P,M,E.yy,N[1],y,o].concat(O)),typeof K<"u")return K;$&&(d=d.slice(0,-1*$*2),y=y.slice(0,-1*$),o=o.slice(0,-1*$)),d.push(this.productions_[N[1]][0]),y.push(z.$),o.push(z._$),et=S[d[d.length-2]][d[d.length-1]],d.push(et);break;case 3:return!0}}return!0},"parse")},x=function(){var f={EOF:1,parseError:s(function(a,d){if(this.yy.parser)this.yy.parser.parseError(a,d);else throw new Error(a)},"parseError"),setInput:s(function(i,a){return this.yy=a||this.yy||{},this._input=i,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:s(function(){var i=this._input[0];this.yytext+=i,this.yyleng++,this.offset++,this.match+=i,this.matched+=i;var a=i.match(/(?:\r\n?|\n).*/g);return a?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),i},"input"),unput:s(function(i){var a=i.length,d=i.split(/(?:\r\n?|\n)/g);this._input=i+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-a),this.offset-=a;var u=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),d.length-1&&(this.yylineno-=d.length-1);var y=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:d?(d.length===u.length?this.yylloc.first_column:0)+u[u.length-d.length].length-d[0].length:this.yylloc.first_column-a},this.options.ranges&&(this.yylloc.range=[y[0],y[0]+this.yyleng-a]),this.yyleng=this.yytext.length,this},"unput"),more:s(function(){return this._more=!0,this},"more"),reject:s(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:s(function(i){this.unput(this.match.slice(i))},"less"),pastInput:s(function(){var i=this.matched.substr(0,this.matched.length-this.match.length);return(i.length>20?"...":"")+i.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:s(function(){var i=this.match;return i.length<20&&(i+=this._input.substr(0,20-i.length)),(i.substr(0,20)+(i.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:s(function(){var i=this.pastInput(),a=new Array(i.length+1).join("-");return i+this.upcomingInput()+` +`+a+"^"},"showPosition"),test_match:s(function(i,a){var d,u,y;if(this.options.backtrack_lexer&&(y={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(y.yylloc.range=this.yylloc.range.slice(0))),u=i[0].match(/(?:\r\n?|\n).*/g),u&&(this.yylineno+=u.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:u?u[u.length-1].length-u[u.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+i[0].length},this.yytext+=i[0],this.match+=i[0],this.matches=i,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(i[0].length),this.matched+=i[0],d=this.performAction.call(this,this.yy,this,a,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),d)return d;if(this._backtrack){for(var o in y)this[o]=y[o];return!1}return!1},"test_match"),next:s(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var i,a,d,u;this._more||(this.yytext="",this.match="");for(var y=this._currentRules(),o=0;oa[0].length)){if(a=d,u=o,this.options.backtrack_lexer){if(i=this.test_match(d,y[o]),i!==!1)return i;if(this._backtrack){a=!1;continue}else return!1}else if(!this.options.flex)break}return a?(i=this.test_match(a,y[u]),i!==!1?i:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:s(function(){var a=this.next();return a||this.lex()},"lex"),begin:s(function(a){this.conditionStack.push(a)},"begin"),popState:s(function(){var a=this.conditionStack.length-1;return a>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:s(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:s(function(a){return a=this.conditionStack.length-1-Math.abs(a||0),a>=0?this.conditionStack[a]:"INITIAL"},"topState"),pushState:s(function(a){this.begin(a)},"pushState"),stateStackSize:s(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:s(function(a,d,u,y){switch(u){case 0:break;case 1:break;case 2:return 10;case 3:break;case 4:break;case 5:return 4;case 6:return 11;case 7:return this.begin("acc_title"),12;case 8:return this.popState(),"acc_title_value";case 9:return this.begin("acc_descr"),14;case 10:return this.popState(),"acc_descr_value";case 11:this.begin("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 17;case 15:return 21;case 16:return 20;case 17:return 6;case 18:return"INVALID"}},"anonymous"),rules:[/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:timeline\b)/i,/^(?:title\s[^\n]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^:\n]+)/i,/^(?::\s[^:\n]+)/i,/^(?:[^#:\n]+)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,9,11,14,15,16,17,18],inclusive:!0}}};return f}();p.lexer=x;function _(){this.yy={}}return s(_,"Parser"),_.prototype=p,p.Parser=_,new _}();X.parser=X;var Tt=X,at={};xt(at,{addEvent:()=>yt,addSection:()=>ht,addTask:()=>pt,addTaskOrg:()=>gt,clear:()=>ct,default:()=>It,getCommonDb:()=>ot,getSections:()=>dt,getTasks:()=>ut});var V="",lt=0,Y=[],U=[],W=[],ot=s(()=>kt,"getCommonDb"),ct=s(function(){Y.length=0,U.length=0,V="",W.length=0,vt()},"clear"),ht=s(function(n){V=n,Y.push(n)},"addSection"),dt=s(function(){return Y},"getSections"),ut=s(function(){let n=rt();const t=100;let e=0;for(;!n&&ee.id===lt-1).events.push(n)},"addEvent"),gt=s(function(n){const t={section:V,type:V,description:n,task:n,classes:[]};U.push(t)},"addTaskOrg"),rt=s(function(){const n=s(function(e){return W[e].processed},"compileTask");let t=!0;for(const[e,l]of W.entries())n(e),t=t&&l.processed;return t},"compileTasks"),It={clear:ct,getCommonDb:ot,addSection:ht,getSections:dt,getTasks:ut,addTask:pt,addTaskOrg:gt,addEvent:yt},Nt=12,Z=s(function(n,t){const e=n.append("rect");return e.attr("x",t.x),e.attr("y",t.y),e.attr("fill",t.fill),e.attr("stroke",t.stroke),e.attr("width",t.width),e.attr("height",t.height),e.attr("rx",t.rx),e.attr("ry",t.ry),t.class!==void 0&&e.attr("class",t.class),e},"drawRect"),Lt=s(function(n,t){const l=n.append("circle").attr("cx",t.cx).attr("cy",t.cy).attr("class","face").attr("r",15).attr("stroke-width",2).attr("overflow","visible"),r=n.append("g");r.append("circle").attr("cx",t.cx-15/3).attr("cy",t.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),r.append("circle").attr("cx",t.cx+15/3).attr("cy",t.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666");function h(m){const p=nt().startAngle(Math.PI/2).endAngle(3*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);m.append("path").attr("class","mouth").attr("d",p).attr("transform","translate("+t.cx+","+(t.cy+2)+")")}s(h,"smile");function c(m){const p=nt().startAngle(3*Math.PI/2).endAngle(5*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);m.append("path").attr("class","mouth").attr("d",p).attr("transform","translate("+t.cx+","+(t.cy+7)+")")}s(c,"sad");function g(m){m.append("line").attr("class","mouth").attr("stroke",2).attr("x1",t.cx-5).attr("y1",t.cy+7).attr("x2",t.cx+5).attr("y2",t.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}return s(g,"ambivalent"),t.score>3?h(r):t.score<3?c(r):g(r),l},"drawFace"),Mt=s(function(n,t){const e=n.append("circle");return e.attr("cx",t.cx),e.attr("cy",t.cy),e.attr("class","actor-"+t.pos),e.attr("fill",t.fill),e.attr("stroke",t.stroke),e.attr("r",t.r),e.class!==void 0&&e.attr("class",e.class),t.title!==void 0&&e.append("title").text(t.title),e},"drawCircle"),ft=s(function(n,t){const e=t.text.replace(//gi," "),l=n.append("text");l.attr("x",t.x),l.attr("y",t.y),l.attr("class","legend"),l.style("text-anchor",t.anchor),t.class!==void 0&&l.attr("class",t.class);const r=l.append("tspan");return r.attr("x",t.x+t.textMargin*2),r.text(e),l},"drawText"),$t=s(function(n,t){function e(r,h,c,g,m){return r+","+h+" "+(r+c)+","+h+" "+(r+c)+","+(h+g-m)+" "+(r+c-m*1.2)+","+(h+g)+" "+r+","+(h+g)}s(e,"genPoints");const l=n.append("polygon");l.attr("points",e(t.x,t.y,50,20,7)),l.attr("class","labelBox"),t.y=t.y+t.labelMargin,t.x=t.x+.5*t.labelMargin,ft(n,t)},"drawLabel"),Pt=s(function(n,t,e){const l=n.append("g"),r=D();r.x=t.x,r.y=t.y,r.fill=t.fill,r.width=e.width,r.height=e.height,r.class="journey-section section-type-"+t.num,r.rx=3,r.ry=3,Z(l,r),mt(e)(t.text,l,r.x,r.y,r.width,r.height,{class:"journey-section section-type-"+t.num},e,t.colour)},"drawSection"),it=-1,At=s(function(n,t,e){const l=t.x+e.width/2,r=n.append("g");it++;const h=300+5*30;r.append("line").attr("id","task"+it).attr("x1",l).attr("y1",t.y).attr("x2",l).attr("y2",h).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),Lt(r,{cx:l,cy:300+(5-t.score)*30,score:t.score});const c=D();c.x=t.x,c.y=t.y,c.fill=t.fill,c.width=e.width,c.height=e.height,c.class="task task-type-"+t.num,c.rx=3,c.ry=3,Z(r,c),mt(e)(t.task,r,c.x,c.y,c.width,c.height,{class:"task"},e,t.colour)},"drawTask"),Ct=s(function(n,t){Z(n,{x:t.startx,y:t.starty,width:t.stopx-t.startx,height:t.stopy-t.starty,fill:t.fill,class:"rect"}).lower()},"drawBackgroundRect"),Ht=s(function(){return{x:0,y:0,fill:void 0,"text-anchor":"start",width:100,height:100,textMargin:0,rx:0,ry:0}},"getTextObj"),D=s(function(){return{x:0,y:0,width:100,anchor:"start",height:100,rx:0,ry:0}},"getNoteRect"),mt=function(){function n(r,h,c,g,m,p,x,_){const f=h.append("text").attr("x",c+m/2).attr("y",g+p/2+5).style("font-color",_).style("text-anchor","middle").text(r);l(f,x)}s(n,"byText");function t(r,h,c,g,m,p,x,_,f){const{taskFontSize:i,taskFontFamily:a}=_,d=r.split(//gi);for(let u=0;u)/).reverse(),r,h=[],c=1.1,g=e.attr("y"),m=parseFloat(e.attr("dy")),p=e.text(null).append("tspan").attr("x",0).attr("y",g).attr("dy",m+"em");for(let x=0;xt||r==="
    ")&&(h.pop(),p.text(h.join(" ").trim()),r==="
    "?h=[""]:h=[r],p=e.append("tspan").attr("x",0).attr("y",g).attr("dy",c+"em").text(r))})}s(tt,"wrap");var Ft=s(function(n,t,e,l){var _;const r=e%Nt-1,h=n.append("g");t.section=r,h.attr("class",(t.class?t.class+" ":"")+"timeline-node "+("section-"+r));const c=h.append("g"),g=h.append("g"),p=g.append("text").text(t.descr).attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle").call(tt,t.width).node().getBBox(),x=(_=l.fontSize)!=null&&_.replace?l.fontSize.replace("px",""):l.fontSize;return t.height=p.height+x*1.1*.5+t.padding,t.height=Math.max(t.height,t.maxHeight),t.width=t.width+2*t.padding,g.attr("transform","translate("+t.width/2+", "+t.padding/2+")"),Vt(c,t,r,l),t},"drawNode"),zt=s(function(n,t,e){var g;const l=n.append("g"),h=l.append("text").text(t.descr).attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle").call(tt,t.width).node().getBBox(),c=(g=e.fontSize)!=null&&g.replace?e.fontSize.replace("px",""):e.fontSize;return l.remove(),h.height+c*1.1*.5+t.padding},"getVirtualNodeHeight"),Vt=s(function(n,t,e){n.append("path").attr("id","node-"+t.id).attr("class","node-bkg node-"+t.type).attr("d",`M0 ${t.height-5} v${-t.height+2*5} q0,-5 5,-5 h${t.width-2*5} q5,0 5,5 v${t.height-5} H0 Z`),n.append("line").attr("class","node-line-"+e).attr("x1",0).attr("y1",t.height).attr("x2",t.width).attr("y2",t.height)},"defaultBkg"),H={drawRect:Z,drawCircle:Mt,drawSection:Pt,drawText:ft,drawLabel:$t,drawTask:At,drawBackgroundRect:Ct,getTextObj:Ht,getNoteRect:D,initGraphics:Rt,drawNode:Ft,getVirtualNodeHeight:zt},Wt=s(function(n,t,e,l){var O,v;const r=_t(),h=r.leftMargin??50;T.debug("timeline",l.db);const c=r.securityLevel;let g;c==="sandbox"&&(g=q("#i"+t));const p=(c==="sandbox"?q(g.nodes()[0].contentDocument.body):q("body")).select("#"+t);p.append("g");const x=l.db.getTasks(),_=l.db.getCommonDb().getDiagramTitle();T.debug("task",x),H.initGraphics(p);const f=l.db.getSections();T.debug("sections",f);let i=0,a=0,d=0,u=0,y=50+h,o=50;u=50;let S=0,k=!0;f.forEach(function(E){const b={number:S,descr:E,section:S,width:150,padding:20,maxHeight:i},L=H.getVirtualNodeHeight(p,b,r);T.debug("sectionHeight before draw",L),i=Math.max(i,L+20)});let M=0,P=0;T.debug("tasks.length",x.length);for(const[E,b]of x.entries()){const L={number:E,descr:b,section:b.section,width:150,padding:20,maxHeight:a},A=H.getVirtualNodeHeight(p,L,r);T.debug("taskHeight before draw",A),a=Math.max(a,A+20),M=Math.max(M,b.events.length);let R=0;for(const F of b.events){const w={descr:F,section:b.section,number:b.section,width:150,padding:20,maxHeight:50};R+=H.getVirtualNodeHeight(p,w,r)}P=Math.max(P,R)}T.debug("maxSectionHeight before draw",i),T.debug("maxTaskHeight before draw",a),f&&f.length>0?f.forEach(E=>{const b=x.filter(F=>F.section===E),L={number:S,descr:E,section:S,width:200*Math.max(b.length,1)-50,padding:20,maxHeight:i};T.debug("sectionNode",L);const A=p.append("g"),R=H.drawNode(A,L,S,r);T.debug("sectionNode output",R),A.attr("transform",`translate(${y}, ${u})`),o+=i+50,b.length>0&&st(p,b,S,y,o,a,r,M,P,i,!1),y+=200*Math.max(b.length,1),o=u,S++}):(k=!1,st(p,x,S,y,o,a,r,M,P,i,!0));const B=p.node().getBBox();T.debug("bounds",B),_&&p.append("text").text(_).attr("x",B.width/2-h).attr("font-size","4ex").attr("font-weight","bold").attr("y",20),d=k?i+a+150:a+100,p.append("g").attr("class","lineWrapper").append("line").attr("x1",h).attr("y1",d).attr("x2",B.width+3*h).attr("y2",d).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)"),bt(void 0,p,((O=r.timeline)==null?void 0:O.padding)??50,((v=r.timeline)==null?void 0:v.useMaxWidth)??!1)},"draw"),st=s(function(n,t,e,l,r,h,c,g,m,p,x){var _;for(const f of t){const i={descr:f.task,section:e,number:e,width:150,padding:20,maxHeight:h};T.debug("taskNode",i);const a=n.append("g").attr("class","taskWrapper"),u=H.drawNode(a,i,e,c).height;if(T.debug("taskHeight after draw",u),a.attr("transform",`translate(${l}, ${r})`),h=Math.max(h,u),f.events){const y=n.append("g").attr("class","lineWrapper");let o=h;r+=100,o=o+Bt(n,f.events,e,l,r,c),r-=100,y.append("line").attr("x1",l+190/2).attr("y1",r+h).attr("x2",l+190/2).attr("y2",r+h+(x?h:p)+m+120).attr("stroke-width",2).attr("stroke","black").attr("marker-end","url(#arrowhead)").attr("stroke-dasharray","5,5")}l=l+200,x&&!((_=c.timeline)!=null&&_.disableMulticolor)&&e++}r=r-10},"drawTasks"),Bt=s(function(n,t,e,l,r,h){let c=0;const g=r;r=r+100;for(const m of t){const p={descr:m,section:e,number:e,width:150,padding:20,maxHeight:50};T.debug("eventNode",p);const x=n.append("g").attr("class","eventWrapper"),f=H.drawNode(x,p,e,h).height;c=c+f,x.attr("transform",`translate(${l}, ${r})`),r=r+10+f}return r=g,c},"drawEvents"),Ot={setConf:s(()=>{},"setConf"),draw:Wt},jt=s(n=>{let t="";for(let e=0;e` + .edge { + stroke-width: 3; + } + ${jt(n)} + .section-root rect, .section-root path, .section-root circle { + fill: ${n.git0}; + } + .section-root text { + fill: ${n.gitBranchLabel0}; + } + .icon-container { + height:100%; + display: flex; + justify-content: center; + align-items: center; + } + .edge { + fill: none; + } + .eventWrapper { + filter: brightness(120%); + } +`,"getStyles"),qt=Gt,Qt={db:at,renderer:Ot,parser:Tt,styles:qt};export{Qt as diagram}; diff --git a/assets/chunks/virtual_mermaid-config.DDnGl6nM.js b/assets/chunks/virtual_mermaid-config.DDnGl6nM.js new file mode 100644 index 000000000..effcb9650 --- /dev/null +++ b/assets/chunks/virtual_mermaid-config.DDnGl6nM.js @@ -0,0 +1 @@ +const e={securityLevel:"loose",startOnLoad:!1};export{e as default}; diff --git a/assets/chunks/xychartDiagram-MYLB5AYS.BVZhzQBy.js b/assets/chunks/xychartDiagram-MYLB5AYS.BVZhzQBy.js new file mode 100644 index 000000000..b585d17dd --- /dev/null +++ b/assets/chunks/xychartDiagram-MYLB5AYS.BVZhzQBy.js @@ -0,0 +1,7 @@ +import{_ as a,aE as ui,l as Ft,a1 as Bt,a0 as gi,F as At,E as Xt,D as xi,i as di,r as Nt,s as pi,g as fi,q as mi,b as yi,c as bi,x as Ai,I as wi,k as Ci}from"../app.D0Wo8w0i.js";import{i as Si}from"./init.Gi6I4Gst.js";import{o as _i}from"./ordinal.BYWQX77i.js";import{l as Wt}from"./linear.QGmzl4if.js";import"./framework.B1keMFNq.js";import"./theme.8WvZWF-M.js";function ki(e,t,i){e=+e,t=+t,i=(n=arguments.length)<2?(t=e,e=0,1):n<3?1:+i;for(var s=-1,n=Math.max(0,Math.ceil((t-e)/i))|0,o=new Array(n);++s"u"&&(T.yylloc={});var gt=T.yylloc;r.push(gt);var li=T.options&&T.options.ranges;typeof W.yy.parseError=="function"?this.parseError=W.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ci(L){g.length=g.length-2*L,A.length=A.length-L,r.length=r.length-L}a(ci,"popStack");function Mt(){var L;return L=x.pop()||T.lex()||It,typeof L!="number"&&(L instanceof Array&&(x=L,L=x.pop()),L=c.symbols_[L]||L),L}a(Mt,"lex");for(var P,O,M,xt,z={},at,V,Vt,rt;;){if(O=g[g.length-1],this.defaultActions[O]?M=this.defaultActions[O]:((P===null||typeof P>"u")&&(P=Mt()),M=Z[O]&&Z[O][P]),typeof M>"u"||!M.length||!M[0]){var dt="";rt=[];for(at in Z[O])this.terminals_[at]&&at>oi&&rt.push("'"+this.terminals_[at]+"'");T.showPosition?dt="Parse error on line "+(nt+1)+`: +`+T.showPosition()+` +Expecting `+rt.join(", ")+", got '"+(this.terminals_[P]||P)+"'":dt="Parse error on line "+(nt+1)+": Unexpected "+(P==It?"end of input":"'"+(this.terminals_[P]||P)+"'"),this.parseError(dt,{text:T.match,token:this.terminals_[P]||P,line:T.yylineno,loc:gt,expected:rt})}if(M[0]instanceof Array&&M.length>1)throw new Error("Parse Error: multiple actions possible at state: "+O+", token: "+P);switch(M[0]){case 1:g.push(P),A.push(T.yytext),r.push(T.yylloc),g.push(M[1]),P=null,Et=T.yyleng,d=T.yytext,nt=T.yylineno,gt=T.yylloc;break;case 2:if(V=this.productions_[M[1]][1],z.$=A[A.length-V],z._$={first_line:r[r.length-(V||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(V||1)].first_column,last_column:r[r.length-1].last_column},li&&(z._$.range=[r[r.length-(V||1)].range[0],r[r.length-1].range[1]]),xt=this.performAction.apply(z,[d,Et,nt,W.yy,M[1],A,r].concat(hi)),typeof xt<"u")return xt;V&&(g=g.slice(0,-1*V*2),A=A.slice(0,-1*V),r=r.slice(0,-1*V)),g.push(this.productions_[M[1]][0]),A.push(z.$),r.push(z._$),Vt=Z[g[g.length-2]][g[g.length-1]],g.push(Vt);break;case 3:return!0}}return!0},"parse")},ri=function(){var B={EOF:1,parseError:a(function(c,g){if(this.yy.parser)this.yy.parser.parseError(c,g);else throw new Error(c)},"parseError"),setInput:a(function(h,c){return this.yy=c||this.yy||{},this._input=h,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:a(function(){var h=this._input[0];this.yytext+=h,this.yyleng++,this.offset++,this.match+=h,this.matched+=h;var c=h.match(/(?:\r\n?|\n).*/g);return c?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),h},"input"),unput:a(function(h){var c=h.length,g=h.split(/(?:\r\n?|\n)/g);this._input=h+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-c),this.offset-=c;var x=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),g.length-1&&(this.yylineno-=g.length-1);var A=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:g?(g.length===x.length?this.yylloc.first_column:0)+x[x.length-g.length].length-g[0].length:this.yylloc.first_column-c},this.options.ranges&&(this.yylloc.range=[A[0],A[0]+this.yyleng-c]),this.yyleng=this.yytext.length,this},"unput"),more:a(function(){return this._more=!0,this},"more"),reject:a(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:a(function(h){this.unput(this.match.slice(h))},"less"),pastInput:a(function(){var h=this.matched.substr(0,this.matched.length-this.match.length);return(h.length>20?"...":"")+h.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:a(function(){var h=this.match;return h.length<20&&(h+=this._input.substr(0,20-h.length)),(h.substr(0,20)+(h.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:a(function(){var h=this.pastInput(),c=new Array(h.length+1).join("-");return h+this.upcomingInput()+` +`+c+"^"},"showPosition"),test_match:a(function(h,c){var g,x,A;if(this.options.backtrack_lexer&&(A={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(A.yylloc.range=this.yylloc.range.slice(0))),x=h[0].match(/(?:\r\n?|\n).*/g),x&&(this.yylineno+=x.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:x?x[x.length-1].length-x[x.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+h[0].length},this.yytext+=h[0],this.match+=h[0],this.matches=h,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(h[0].length),this.matched+=h[0],g=this.performAction.call(this,this.yy,this,c,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),g)return g;if(this._backtrack){for(var r in A)this[r]=A[r];return!1}return!1},"test_match"),next:a(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var h,c,g,x;this._more||(this.yytext="",this.match="");for(var A=this._currentRules(),r=0;rc[0].length)){if(c=g,x=r,this.options.backtrack_lexer){if(h=this.test_match(g,A[r]),h!==!1)return h;if(this._backtrack){c=!1;continue}else return!1}else if(!this.options.flex)break}return c?(h=this.test_match(c,A[x]),h!==!1?h:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:a(function(){var c=this.next();return c||this.lex()},"lex"),begin:a(function(c){this.conditionStack.push(c)},"begin"),popState:a(function(){var c=this.conditionStack.length-1;return c>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:a(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:a(function(c){return c=this.conditionStack.length-1-Math.abs(c||0),c>=0?this.conditionStack[c]:"INITIAL"},"topState"),pushState:a(function(c){this.begin(c)},"pushState"),stateStackSize:a(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:a(function(c,g,x,A){switch(x){case 0:break;case 1:break;case 2:return this.popState(),34;case 3:return this.popState(),34;case 4:return 34;case 5:break;case 6:return 10;case 7:return this.pushState("acc_title"),19;case 8:return this.popState(),"acc_title_value";case 9:return this.pushState("acc_descr"),21;case 10:return this.popState(),"acc_descr_value";case 11:this.pushState("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 5;case 15:return 8;case 16:return this.pushState("axis_data"),"X_AXIS";case 17:return this.pushState("axis_data"),"Y_AXIS";case 18:return this.pushState("axis_band_data"),24;case 19:return 31;case 20:return this.pushState("data"),16;case 21:return this.pushState("data"),18;case 22:return this.pushState("data_inner"),24;case 23:return 27;case 24:return this.popState(),26;case 25:this.popState();break;case 26:this.pushState("string");break;case 27:this.popState();break;case 28:return"STR";case 29:return 24;case 30:return 26;case 31:return 43;case 32:return"COLON";case 33:return 44;case 34:return 28;case 35:return 45;case 36:return 46;case 37:return 48;case 38:return 50;case 39:return 47;case 40:return 41;case 41:return 49;case 42:return 42;case 43:break;case 44:return 35;case 45:return 36}},"anonymous"),rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:(\r?\n))/i,/^(?:(\r?\n))/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:title\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:\{)/i,/^(?:[^\}]*)/i,/^(?:xychart-beta\b)/i,/^(?:(?:vertical|horizontal))/i,/^(?:x-axis\b)/i,/^(?:y-axis\b)/i,/^(?:\[)/i,/^(?:-->)/i,/^(?:line\b)/i,/^(?:bar\b)/i,/^(?:\[)/i,/^(?:[+-]?(?:\d+(?:\.\d+)?|\.\d+))/i,/^(?:\])/i,/^(?:(?:`\) \{ this\.pushState\(md_string\); \}\n\(\?:\(\?!`"\)\.\)\+ \{ return MD_STR; \}\n\(\?:`))/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:\[)/i,/^(?:\])/i,/^(?:[A-Za-z]+)/i,/^(?::)/i,/^(?:\+)/i,/^(?:,)/i,/^(?:=)/i,/^(?:\*)/i,/^(?:#)/i,/^(?:[\_])/i,/^(?:\.)/i,/^(?:&)/i,/^(?:-)/i,/^(?:[0-9]+)/i,/^(?:\s+)/i,/^(?:;)/i,/^(?:$)/i],conditions:{data_inner:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,23,24,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},data:{rules:[0,1,3,4,5,6,7,9,11,14,15,16,17,20,21,22,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},axis_band_data:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,24,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},axis_data:{rules:[0,1,2,4,5,6,7,9,11,14,15,16,17,18,19,20,21,23,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},title:{rules:[],inclusive:!1},md_string:{rules:[],inclusive:!1},string:{rules:[27,28],inclusive:!1},INITIAL:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0}}};return B}();ct.lexer=ri;function st(){this.yy={}}return a(st,"Parser"),st.prototype=ct,ct.Parser=st,new st}();ft.parser=ft;var Ri=ft;function mt(e){return e.type==="bar"}a(mt,"isBarPlot");function wt(e){return e.type==="band"}a(wt,"isBandAxisData");function F(e){return e.type==="linear"}a(F,"isLinearAxisData");var X,Yt=(X=class{constructor(t){this.parentGroup=t}getMaxDimension(t,i){if(!this.parentGroup)return{width:t.reduce((o,u)=>Math.max(u.length,o),0)*i,height:i};const s={width:0,height:0},n=this.parentGroup.append("g").attr("visibility","hidden").attr("font-size",i);for(const o of t){const u=ui(n,1,o),f=u?u.width:o.length*i,p=u?u.height:i;s.width=Math.max(s.width,f),s.height=Math.max(s.height,p)}return n.remove(),s}},a(X,"TextDimensionCalculatorWithFont"),X),Ot=.7,zt=.2,N,Ht=(N=class{constructor(t,i,s,n){this.axisConfig=t,this.title=i,this.textDimensionCalculator=s,this.axisThemeConfig=n,this.boundingRect={x:0,y:0,width:0,height:0},this.axisPosition="left",this.showTitle=!1,this.showLabel=!1,this.showTick=!1,this.showAxisLine=!1,this.outerPadding=0,this.titleTextHeight=0,this.labelTextHeight=0,this.range=[0,10],this.boundingRect={x:0,y:0,width:0,height:0},this.axisPosition="left"}setRange(t){this.range=t,this.axisPosition==="left"||this.axisPosition==="right"?this.boundingRect.height=t[1]-t[0]:this.boundingRect.width=t[1]-t[0],this.recalculateScale()}getRange(){return[this.range[0]+this.outerPadding,this.range[1]-this.outerPadding]}setAxisPosition(t){this.axisPosition=t,this.setRange(this.range)}getTickDistance(){const t=this.getRange();return Math.abs(t[0]-t[1])/this.getTickValues().length}getAxisOuterPadding(){return this.outerPadding}getLabelDimension(){return this.textDimensionCalculator.getMaxDimension(this.getTickValues().map(t=>t.toString()),this.axisConfig.labelFontSize)}recalculateOuterPaddingToDrawBar(){Ot*this.getTickDistance()>this.outerPadding*2&&(this.outerPadding=Math.floor(Ot*this.getTickDistance()/2)),this.recalculateScale()}calculateSpaceIfDrawnHorizontally(t){let i=t.height;if(this.axisConfig.showAxisLine&&i>this.axisConfig.axisLineWidth&&(i-=this.axisConfig.axisLineWidth,this.showAxisLine=!0),this.axisConfig.showLabel){const s=this.getLabelDimension(),n=zt*t.width;this.outerPadding=Math.min(s.width/2,n);const o=s.height+this.axisConfig.labelPadding*2;this.labelTextHeight=s.height,o<=i&&(i-=o,this.showLabel=!0)}if(this.axisConfig.showTick&&i>=this.axisConfig.tickLength&&(this.showTick=!0,i-=this.axisConfig.tickLength),this.axisConfig.showTitle&&this.title){const s=this.textDimensionCalculator.getMaxDimension([this.title],this.axisConfig.titleFontSize),n=s.height+this.axisConfig.titlePadding*2;this.titleTextHeight=s.height,n<=i&&(i-=n,this.showTitle=!0)}this.boundingRect.width=t.width,this.boundingRect.height=t.height-i}calculateSpaceIfDrawnVertical(t){let i=t.width;if(this.axisConfig.showAxisLine&&i>this.axisConfig.axisLineWidth&&(i-=this.axisConfig.axisLineWidth,this.showAxisLine=!0),this.axisConfig.showLabel){const s=this.getLabelDimension(),n=zt*t.height;this.outerPadding=Math.min(s.height/2,n);const o=s.width+this.axisConfig.labelPadding*2;o<=i&&(i-=o,this.showLabel=!0)}if(this.axisConfig.showTick&&i>=this.axisConfig.tickLength&&(this.showTick=!0,i-=this.axisConfig.tickLength),this.axisConfig.showTitle&&this.title){const s=this.textDimensionCalculator.getMaxDimension([this.title],this.axisConfig.titleFontSize),n=s.height+this.axisConfig.titlePadding*2;this.titleTextHeight=s.height,n<=i&&(i-=n,this.showTitle=!0)}this.boundingRect.width=t.width-i,this.boundingRect.height=t.height}calculateSpace(t){return this.axisPosition==="left"||this.axisPosition==="right"?this.calculateSpaceIfDrawnVertical(t):this.calculateSpaceIfDrawnHorizontally(t),this.recalculateScale(),{width:this.boundingRect.width,height:this.boundingRect.height}}setBoundingBoxXY(t){this.boundingRect.x=t.x,this.boundingRect.y=t.y}getDrawableElementsForLeftAxis(){const t=[];if(this.showAxisLine){const i=this.boundingRect.x+this.boundingRect.width-this.axisConfig.axisLineWidth/2;t.push({type:"path",groupTexts:["left-axis","axisl-line"],data:[{path:`M ${i},${this.boundingRect.y} L ${i},${this.boundingRect.y+this.boundingRect.height} `,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&t.push({type:"text",groupTexts:["left-axis","label"],data:this.getTickValues().map(i=>({text:i.toString(),x:this.boundingRect.x+this.boundingRect.width-(this.showLabel?this.axisConfig.labelPadding:0)-(this.showTick?this.axisConfig.tickLength:0)-(this.showAxisLine?this.axisConfig.axisLineWidth:0),y:this.getScaleValue(i),fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"middle",horizontalPos:"right"}))}),this.showTick){const i=this.boundingRect.x+this.boundingRect.width-(this.showAxisLine?this.axisConfig.axisLineWidth:0);t.push({type:"path",groupTexts:["left-axis","ticks"],data:this.getTickValues().map(s=>({path:`M ${i},${this.getScaleValue(s)} L ${i-this.axisConfig.tickLength},${this.getScaleValue(s)}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&t.push({type:"text",groupTexts:["left-axis","title"],data:[{text:this.title,x:this.boundingRect.x+this.axisConfig.titlePadding,y:this.boundingRect.y+this.boundingRect.height/2,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:270,verticalPos:"top",horizontalPos:"center"}]}),t}getDrawableElementsForBottomAxis(){const t=[];if(this.showAxisLine){const i=this.boundingRect.y+this.axisConfig.axisLineWidth/2;t.push({type:"path",groupTexts:["bottom-axis","axis-line"],data:[{path:`M ${this.boundingRect.x},${i} L ${this.boundingRect.x+this.boundingRect.width},${i}`,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&t.push({type:"text",groupTexts:["bottom-axis","label"],data:this.getTickValues().map(i=>({text:i.toString(),x:this.getScaleValue(i),y:this.boundingRect.y+this.axisConfig.labelPadding+(this.showTick?this.axisConfig.tickLength:0)+(this.showAxisLine?this.axisConfig.axisLineWidth:0),fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}))}),this.showTick){const i=this.boundingRect.y+(this.showAxisLine?this.axisConfig.axisLineWidth:0);t.push({type:"path",groupTexts:["bottom-axis","ticks"],data:this.getTickValues().map(s=>({path:`M ${this.getScaleValue(s)},${i} L ${this.getScaleValue(s)},${i+this.axisConfig.tickLength}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&t.push({type:"text",groupTexts:["bottom-axis","title"],data:[{text:this.title,x:this.range[0]+(this.range[1]-this.range[0])/2,y:this.boundingRect.y+this.boundingRect.height-this.axisConfig.titlePadding-this.titleTextHeight,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}]}),t}getDrawableElementsForTopAxis(){const t=[];if(this.showAxisLine){const i=this.boundingRect.y+this.boundingRect.height-this.axisConfig.axisLineWidth/2;t.push({type:"path",groupTexts:["top-axis","axis-line"],data:[{path:`M ${this.boundingRect.x},${i} L ${this.boundingRect.x+this.boundingRect.width},${i}`,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&t.push({type:"text",groupTexts:["top-axis","label"],data:this.getTickValues().map(i=>({text:i.toString(),x:this.getScaleValue(i),y:this.boundingRect.y+(this.showTitle?this.titleTextHeight+this.axisConfig.titlePadding*2:0)+this.axisConfig.labelPadding,fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}))}),this.showTick){const i=this.boundingRect.y;t.push({type:"path",groupTexts:["top-axis","ticks"],data:this.getTickValues().map(s=>({path:`M ${this.getScaleValue(s)},${i+this.boundingRect.height-(this.showAxisLine?this.axisConfig.axisLineWidth:0)} L ${this.getScaleValue(s)},${i+this.boundingRect.height-this.axisConfig.tickLength-(this.showAxisLine?this.axisConfig.axisLineWidth:0)}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&t.push({type:"text",groupTexts:["top-axis","title"],data:[{text:this.title,x:this.boundingRect.x+this.boundingRect.width/2,y:this.boundingRect.y+this.axisConfig.titlePadding,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}]}),t}getDrawableElements(){if(this.axisPosition==="left")return this.getDrawableElementsForLeftAxis();if(this.axisPosition==="right")throw Error("Drawing of right axis is not implemented");return this.axisPosition==="bottom"?this.getDrawableElementsForBottomAxis():this.axisPosition==="top"?this.getDrawableElementsForTopAxis():[]}},a(N,"BaseAxis"),N),Y,Ti=(Y=class extends Ht{constructor(t,i,s,n,o){super(t,n,o,i),this.categories=s,this.scale=pt().domain(this.categories).range(this.getRange())}setRange(t){super.setRange(t)}recalculateScale(){this.scale=pt().domain(this.categories).range(this.getRange()).paddingInner(1).paddingOuter(0).align(.5),Ft.trace("BandAxis axis final categories, range: ",this.categories,this.getRange())}getTickValues(){return this.categories}getScaleValue(t){return this.scale(t)??this.getRange()[0]}},a(Y,"BandAxis"),Y),H,Di=(H=class extends Ht{constructor(t,i,s,n,o){super(t,n,o,i),this.domain=s,this.scale=Wt().domain(this.domain).range(this.getRange())}getTickValues(){return this.scale.ticks()}recalculateScale(){const t=[...this.domain];this.axisPosition==="left"&&t.reverse(),this.scale=Wt().domain(t).range(this.getRange())}getScaleValue(t){return this.scale(t)}},a(H,"LinearAxis"),H);function yt(e,t,i,s){const n=new Yt(s);return wt(e)?new Ti(t,i,e.categories,e.title,n):new Di(t,i,[e.min,e.max],e.title,n)}a(yt,"getAxis");var U,vi=(U=class{constructor(t,i,s,n){this.textDimensionCalculator=t,this.chartConfig=i,this.chartData=s,this.chartThemeConfig=n,this.boundingRect={x:0,y:0,width:0,height:0},this.showChartTitle=!1}setBoundingBoxXY(t){this.boundingRect.x=t.x,this.boundingRect.y=t.y}calculateSpace(t){const i=this.textDimensionCalculator.getMaxDimension([this.chartData.title],this.chartConfig.titleFontSize),s=Math.max(i.width,t.width),n=i.height+2*this.chartConfig.titlePadding;return i.width<=s&&i.height<=n&&this.chartConfig.showTitle&&this.chartData.title&&(this.boundingRect.width=s,this.boundingRect.height=n,this.showChartTitle=!0),{width:this.boundingRect.width,height:this.boundingRect.height}}getDrawableElements(){const t=[];return this.showChartTitle&&t.push({groupTexts:["chart-title"],type:"text",data:[{fontSize:this.chartConfig.titleFontSize,text:this.chartData.title,verticalPos:"middle",horizontalPos:"center",x:this.boundingRect.x+this.boundingRect.width/2,y:this.boundingRect.y+this.boundingRect.height/2,fill:this.chartThemeConfig.titleColor,rotation:0}]}),t}},a(U,"ChartTitle"),U);function Ut(e,t,i,s){const n=new Yt(s);return new vi(n,e,t,i)}a(Ut,"getChartTitleComponent");var $,Pi=($=class{constructor(t,i,s,n,o){this.plotData=t,this.xAxis=i,this.yAxis=s,this.orientation=n,this.plotIndex=o}getDrawableElement(){const t=this.plotData.data.map(s=>[this.xAxis.getScaleValue(s[0]),this.yAxis.getScaleValue(s[1])]);let i;return this.orientation==="horizontal"?i=Bt().y(s=>s[0]).x(s=>s[1])(t):i=Bt().x(s=>s[0]).y(s=>s[1])(t),i?[{groupTexts:["plot",`line-plot-${this.plotIndex}`],type:"path",data:[{path:i,strokeFill:this.plotData.strokeFill,strokeWidth:this.plotData.strokeWidth}]}]:[]}},a($,"LinePlot"),$),q,Li=(q=class{constructor(t,i,s,n,o,u){this.barData=t,this.boundingRect=i,this.xAxis=s,this.yAxis=n,this.orientation=o,this.plotIndex=u}getDrawableElement(){const t=this.barData.data.map(o=>[this.xAxis.getScaleValue(o[0]),this.yAxis.getScaleValue(o[1])]),s=Math.min(this.xAxis.getAxisOuterPadding()*2,this.xAxis.getTickDistance())*(1-.05),n=s/2;return this.orientation==="horizontal"?[{groupTexts:["plot",`bar-plot-${this.plotIndex}`],type:"rect",data:t.map(o=>({x:this.boundingRect.x,y:o[0]-n,height:s,width:o[1]-this.boundingRect.x,fill:this.barData.fill,strokeWidth:0,strokeFill:this.barData.fill}))}]:[{groupTexts:["plot",`bar-plot-${this.plotIndex}`],type:"rect",data:t.map(o=>({x:o[0]-n,y:o[1],width:s,height:this.boundingRect.y+this.boundingRect.height-o[1],fill:this.barData.fill,strokeWidth:0,strokeFill:this.barData.fill}))}]}},a(q,"BarPlot"),q),G,Ei=(G=class{constructor(t,i,s){this.chartConfig=t,this.chartData=i,this.chartThemeConfig=s,this.boundingRect={x:0,y:0,width:0,height:0}}setAxes(t,i){this.xAxis=t,this.yAxis=i}setBoundingBoxXY(t){this.boundingRect.x=t.x,this.boundingRect.y=t.y}calculateSpace(t){return this.boundingRect.width=t.width,this.boundingRect.height=t.height,{width:this.boundingRect.width,height:this.boundingRect.height}}getDrawableElements(){if(!(this.xAxis&&this.yAxis))throw Error("Axes must be passed to render Plots");const t=[];for(const[i,s]of this.chartData.plots.entries())switch(s.type){case"line":{const n=new Pi(s,this.xAxis,this.yAxis,this.chartConfig.chartOrientation,i);t.push(...n.getDrawableElement())}break;case"bar":{const n=new Li(s,this.boundingRect,this.xAxis,this.yAxis,this.chartConfig.chartOrientation,i);t.push(...n.getDrawableElement())}break}return t}},a(G,"BasePlot"),G);function $t(e,t,i){return new Ei(e,t,i)}a($t,"getPlotComponent");var j,Ii=(j=class{constructor(t,i,s,n){this.chartConfig=t,this.chartData=i,this.componentStore={title:Ut(t,i,s,n),plot:$t(t,i,s),xAxis:yt(i.xAxis,t.xAxis,{titleColor:s.xAxisTitleColor,labelColor:s.xAxisLabelColor,tickColor:s.xAxisTickColor,axisLineColor:s.xAxisLineColor},n),yAxis:yt(i.yAxis,t.yAxis,{titleColor:s.yAxisTitleColor,labelColor:s.yAxisLabelColor,tickColor:s.yAxisTickColor,axisLineColor:s.yAxisLineColor},n)}}calculateVerticalSpace(){let t=this.chartConfig.width,i=this.chartConfig.height,s=0,n=0,o=Math.floor(t*this.chartConfig.plotReservedSpacePercent/100),u=Math.floor(i*this.chartConfig.plotReservedSpacePercent/100),f=this.componentStore.plot.calculateSpace({width:o,height:u});t-=f.width,i-=f.height,f=this.componentStore.title.calculateSpace({width:this.chartConfig.width,height:i}),n=f.height,i-=f.height,this.componentStore.xAxis.setAxisPosition("bottom"),f=this.componentStore.xAxis.calculateSpace({width:t,height:i}),i-=f.height,this.componentStore.yAxis.setAxisPosition("left"),f=this.componentStore.yAxis.calculateSpace({width:t,height:i}),s=f.width,t-=f.width,t>0&&(o+=t,t=0),i>0&&(u+=i,i=0),this.componentStore.plot.calculateSpace({width:o,height:u}),this.componentStore.plot.setBoundingBoxXY({x:s,y:n}),this.componentStore.xAxis.setRange([s,s+o]),this.componentStore.xAxis.setBoundingBoxXY({x:s,y:n+u}),this.componentStore.yAxis.setRange([n,n+u]),this.componentStore.yAxis.setBoundingBoxXY({x:0,y:n}),this.chartData.plots.some(p=>mt(p))&&this.componentStore.xAxis.recalculateOuterPaddingToDrawBar()}calculateHorizontalSpace(){let t=this.chartConfig.width,i=this.chartConfig.height,s=0,n=0,o=0,u=Math.floor(t*this.chartConfig.plotReservedSpacePercent/100),f=Math.floor(i*this.chartConfig.plotReservedSpacePercent/100),p=this.componentStore.plot.calculateSpace({width:u,height:f});t-=p.width,i-=p.height,p=this.componentStore.title.calculateSpace({width:this.chartConfig.width,height:i}),s=p.height,i-=p.height,this.componentStore.xAxis.setAxisPosition("left"),p=this.componentStore.xAxis.calculateSpace({width:t,height:i}),t-=p.width,n=p.width,this.componentStore.yAxis.setAxisPosition("top"),p=this.componentStore.yAxis.calculateSpace({width:t,height:i}),i-=p.height,o=s+p.height,t>0&&(u+=t,t=0),i>0&&(f+=i,i=0),this.componentStore.plot.calculateSpace({width:u,height:f}),this.componentStore.plot.setBoundingBoxXY({x:n,y:o}),this.componentStore.yAxis.setRange([n,n+u]),this.componentStore.yAxis.setBoundingBoxXY({x:n,y:s}),this.componentStore.xAxis.setRange([o,o+f]),this.componentStore.xAxis.setBoundingBoxXY({x:0,y:o}),this.chartData.plots.some(k=>mt(k))&&this.componentStore.xAxis.recalculateOuterPaddingToDrawBar()}calculateSpace(){this.chartConfig.chartOrientation==="horizontal"?this.calculateHorizontalSpace():this.calculateVerticalSpace()}getDrawableElement(){this.calculateSpace();const t=[];this.componentStore.plot.setAxes(this.componentStore.xAxis,this.componentStore.yAxis);for(const i of Object.values(this.componentStore))t.push(...i.getDrawableElements());return t}},a(j,"Orchestrator"),j),Q,Mi=(Q=class{static build(t,i,s,n){return new Ii(t,i,s,n).getDrawableElement()}},a(Q,"XYChartBuilder"),Q),J=0,qt,tt=_t(),it=St(),b=kt(),bt=it.plotColorPalette.split(",").map(e=>e.trim()),ot=!1,Ct=!1;function St(){const e=gi(),t=At();return Xt(e.xyChart,t.themeVariables.xyChart)}a(St,"getChartDefaultThemeConfig");function _t(){const e=At();return Xt(xi.xyChart,e.xyChart)}a(_t,"getChartDefaultConfig");function kt(){return{yAxis:{type:"linear",title:"",min:1/0,max:-1/0},xAxis:{type:"band",title:"",categories:[]},title:"",plots:[]}}a(kt,"getChartDefaultData");function ht(e){const t=At();return di(e.trim(),t)}a(ht,"textSanitizer");function Gt(e){qt=e}a(Gt,"setTmpSVGG");function jt(e){e==="horizontal"?tt.chartOrientation="horizontal":tt.chartOrientation="vertical"}a(jt,"setOrientation");function Qt(e){b.xAxis.title=ht(e.text)}a(Qt,"setXAxisTitle");function Rt(e,t){b.xAxis={type:"linear",title:b.xAxis.title,min:e,max:t},ot=!0}a(Rt,"setXAxisRangeData");function Kt(e){b.xAxis={type:"band",title:b.xAxis.title,categories:e.map(t=>ht(t.text))},ot=!0}a(Kt,"setXAxisBand");function Zt(e){b.yAxis.title=ht(e.text)}a(Zt,"setYAxisTitle");function Jt(e,t){b.yAxis={type:"linear",title:b.yAxis.title,min:e,max:t},Ct=!0}a(Jt,"setYAxisRangeData");function ti(e){const t=Math.min(...e),i=Math.max(...e),s=F(b.yAxis)?b.yAxis.min:1/0,n=F(b.yAxis)?b.yAxis.max:-1/0;b.yAxis={type:"linear",title:b.yAxis.title,min:Math.min(s,t),max:Math.max(n,i)}}a(ti,"setYAxisRangeFromPlotData");function Tt(e){let t=[];if(e.length===0)return t;if(!ot){const i=F(b.xAxis)?b.xAxis.min:1/0,s=F(b.xAxis)?b.xAxis.max:-1/0;Rt(Math.min(i,1),Math.max(s,e.length))}if(Ct||ti(e),wt(b.xAxis)&&(t=b.xAxis.categories.map((i,s)=>[i,e[s]])),F(b.xAxis)){const i=b.xAxis.min,s=b.xAxis.max,n=(s-i)/(e.length-1),o=[];for(let u=i;u<=s;u+=n)o.push(`${u}`);t=o.map((u,f)=>[u,e[f]])}return t}a(Tt,"transformDataWithoutCategory");function Dt(e){return bt[e===0?0:e%bt.length]}a(Dt,"getPlotColorFromPalette");function ii(e,t){const i=Tt(t);b.plots.push({type:"line",strokeFill:Dt(J),strokeWidth:2,data:i}),J++}a(ii,"setLineData");function ei(e,t){const i=Tt(t);b.plots.push({type:"bar",fill:Dt(J),data:i}),J++}a(ei,"setBarData");function si(){if(b.plots.length===0)throw Error("No Plot to render, please provide a plot with some data");return b.title=Nt(),Mi.build(tt,b,it,qt)}a(si,"getDrawableElem");function ni(){return it}a(ni,"getChartThemeConfig");function ai(){return tt}a(ai,"getChartConfig");var Vi=a(function(){Ai(),J=0,tt=_t(),b=kt(),it=St(),bt=it.plotColorPalette.split(",").map(e=>e.trim()),ot=!1,Ct=!1},"clear"),Bi={getDrawableElem:si,clear:Vi,setAccTitle:pi,getAccTitle:fi,setDiagramTitle:mi,getDiagramTitle:Nt,getAccDescription:yi,setAccDescription:bi,setOrientation:jt,setXAxisTitle:Qt,setXAxisRangeData:Rt,setXAxisBand:Kt,setYAxisTitle:Zt,setYAxisRangeData:Jt,setLineData:ii,setBarData:ei,setTmpSVGG:Gt,getChartThemeConfig:ni,getChartConfig:ai},Wi=a((e,t,i,s)=>{const n=s.db,o=n.getChartThemeConfig(),u=n.getChartConfig();function f(m){return m==="top"?"text-before-edge":"middle"}a(f,"getDominantBaseLine");function p(m){return m==="left"?"start":m==="right"?"end":"middle"}a(p,"getTextAnchor");function k(m){return`translate(${m.x}, ${m.y}) rotate(${m.rotation||0})`}a(k,"getTextTransformation"),Ft.debug(`Rendering xychart chart +`+e);const R=wi(t),w=R.append("g").attr("class","main"),y=w.append("rect").attr("width",u.width).attr("height",u.height).attr("class","background");Ci(R,u.height,u.width,!0),R.attr("viewBox",`0 0 ${u.width} ${u.height}`),y.attr("fill",o.backgroundColor),n.setTmpSVGG(R.append("g").attr("class","mermaid-tmp-group"));const D=n.getDrawableElem(),S={};function v(m){let _=w,l="";for(const[E]of m.entries()){let K=w;E>0&&S[l]&&(K=S[l]),l+=m[E],_=S[l],_||(_=S[l]=K.append("g").attr("class",m[E]))}return _}a(v,"getGroup");for(const m of D){if(m.data.length===0)continue;const _=v(m.groupTexts);switch(m.type){case"rect":_.selectAll("rect").data(m.data).enter().append("rect").attr("x",l=>l.x).attr("y",l=>l.y).attr("width",l=>l.width).attr("height",l=>l.height).attr("fill",l=>l.fill).attr("stroke",l=>l.strokeFill).attr("stroke-width",l=>l.strokeWidth);break;case"text":_.selectAll("text").data(m.data).enter().append("text").attr("x",0).attr("y",0).attr("fill",l=>l.fill).attr("font-size",l=>l.fontSize).attr("dominant-baseline",l=>f(l.verticalPos)).attr("text-anchor",l=>p(l.horizontalPos)).attr("transform",l=>k(l)).text(l=>l.text);break;case"path":_.selectAll("path").data(m.data).enter().append("path").attr("d",l=>l.path).attr("fill",l=>l.fill?l.fill:"none").attr("stroke",l=>l.strokeFill).attr("stroke-width",l=>l.strokeWidth);break}}},"draw"),Oi={draw:Wi},Ui={parser:Ri,db:Bi,renderer:Oi};export{Ui as diagram}; diff --git a/assets/config_README.md.BsXcC8Zr.js b/assets/config_README.md.BsXcC8Zr.js new file mode 100644 index 000000000..9d2e89ea8 --- /dev/null +++ b/assets/config_README.md.BsXcC8Zr.js @@ -0,0 +1 @@ +import{_ as a,c as t,a6 as e,o as i}from"./chunks/framework.B1keMFNq.js";const p=JSON.parse('{"title":"配置","description":"","frontmatter":{"title":"配置","index":false},"headers":[],"relativePath":"config/README.md","filePath":"config/README.md","lastUpdated":1718342287000}'),r={name:"config/README.md"};function s(c,l,o,h,f,n){return i(),t("div",null,l[0]||(l[0]=[e('',1)]))}const d=a(r,[["render",s]]);export{p as __pageData,d as default}; diff --git a/assets/config_README.md.BsXcC8Zr.lean.js b/assets/config_README.md.BsXcC8Zr.lean.js new file mode 100644 index 000000000..9d2e89ea8 --- /dev/null +++ b/assets/config_README.md.BsXcC8Zr.lean.js @@ -0,0 +1 @@ +import{_ as a,c as t,a6 as e,o as i}from"./chunks/framework.B1keMFNq.js";const p=JSON.parse('{"title":"配置","description":"","frontmatter":{"title":"配置","index":false},"headers":[],"relativePath":"config/README.md","filePath":"config/README.md","lastUpdated":1718342287000}'),r={name:"config/README.md"};function s(c,l,o,h,f,n){return i(),t("div",null,l[0]||(l[0]=[e('',1)]))}const d=a(r,[["render",s]]);export{p as __pageData,d as default}; diff --git a/assets/config_backup.md.DOjbghb9.js b/assets/config_backup.md.DOjbghb9.js new file mode 100644 index 000000000..9666ad49e --- /dev/null +++ b/assets/config_backup.md.DOjbghb9.js @@ -0,0 +1 @@ +import{_ as e,c as p,a6 as n,j as a,a as r,G as l,B as i,o as s}from"./chunks/framework.B1keMFNq.js";const q=JSON.parse('{"title":"备份","description":"","frontmatter":{"lang":"zh-cn","title":"备份"},"headers":[],"relativePath":"config/backup.md","filePath":"config/backup.md","lastUpdated":1723442587000}'),d={name:"config/backup.md"};function u(b,t,f,m,k,x){const o=i("Badge");return s(),p("div",null,[t[12]||(t[12]=n('

    备份

    本节内容

    本节将介绍关于备份、自动备份、自动清理旧备份的相关设置。

    在本节中的一些部分,你将使用到 cron 表达式。这是一种表达一个或一系列时间点的语法。你可以参考以下内容以学习 cron 表达式。

    请注意,海豹核心使用不含秒数、由 5 个部分组成的 cron 格式,这也是 Linux 系统中使用的格式;而不是包含秒数、由 6 个部分组成的格式。

    关于备份

    经常备份是避免数据损失的最佳手段。海豹核心默认提供每 12 小时一次的自动备份。海豹核心产生的所有备份都位于 backups/ 目录下。

    ',4)),a("p",null,[t[0]||(t[0]=r("从 ")),l(o,{type:"tip",text:"v1.4.6"}),t[1]||(t[1]=r(" 起,备份文件的命名遵循以下格式:")),t[2]||(t[2]=a("code",null,"bak_年月日_时分秒[_auto]_rXX_XXXXXXXX.zip",-1)),t[3]||(t[3]=r("。"))]),a("p",null,[t[4]||(t[4]=r("如果你使用的是 ")),l(o,{type:"tip",text:"v1.4.5"}),t[5]||(t[5]=r(" 或之前版本,文件名格式是:")),t[6]||(t[6]=a("code",null,"bak-年月日_时分秒[_auto]_随机数.zip",-1)),t[7]||(t[7]=r("。"))]),t[13]||(t[13]=a("p",null,[r("文件名中含有 "),a("code",null,"auto"),r(" 字样的是自动生成的备份。")],-1)),t[14]||(t[14]=a("p",null,"你也可以对备份行为进行设置。相关设置均位于 WebUI 的「综合设置 - 备份」页面。",-1)),t[15]||(t[15]=a("p",null,"在此页面上,你将看到:自动备份设置、自动清理设置、当前备份文件列表。在更改任何设置后,你需要点击右上角的「保存设置」使之生效。",-1)),t[16]||(t[16]=a("h2",{id:"手动备份",tabindex:"-1"},[r("手动备份 "),a("a",{class:"header-anchor",href:"#手动备份","aria-label":'Permalink to "手动备份"'},"​")],-1)),t[17]||(t[17]=a("p",null,"点击页面右上角的「立即备份」按钮,可以立即生成一份备份。",-1)),a("p",null,[t[8]||(t[8]=r("从 ")),l(o,{type:"tip",text:"v1.4.6"}),t[9]||(t[9]=r(" 起,你可以在手动备份时调整备份范围。"))]),t[18]||(t[18]=a("h2",{id:"自动备份",tabindex:"-1"},[r("自动备份 "),a("a",{class:"header-anchor",href:"#自动备份","aria-label":'Permalink to "自动备份"'},"​")],-1)),t[19]||(t[19]=a("p",null,"勾选「开启」启用自动备份。",-1)),t[20]||(t[20]=a("p",null,"在「备份间隔」项可以通过 cron 表达式规定自动备份的时机。",-1)),a("p",null,[t[10]||(t[10]=r("从 ")),l(o,{type:"tip",text:"v1.4.6"}),t[11]||(t[11]=r(" 起,在「备份范围」项,你可选择每次自动备份的范围。"))]),t[21]||(t[21]=n('

    自动清理

    在「清理模式」中选择「保留一定数量」或「保留一定时间内」启用自动清理。

    配置清理范围

    在「保留一定数量」模式下,自动清理时将保留最新的指定数量的备份文件,更老的文件将被删除。

    在「保留一定时间内」模式下,自动清理时将保留创建时间在指定时间范围内的备份文件,更老的文件将被删除。

    配置清理时机

    勾选「触发方式」中的「自动备份后」和/或「定时」以设置自动清理时机。两种触发方式可以同时使用。

    如果勾选了「自动备份后」,在每次自动备份完成后将执行一次自动清理。

    如果勾选了「定时」,按输入的 cron 表达式指定自动清理的时机。

    备份列表

    在「已备份文件」中按时间从新到旧列出了当前存在的备份文件。

    你可通过「进入批量删除页面」进行手动批量删除。

    点击每一个备份文件右边的「下载」以下载对应文件,点击垃圾桶图标按钮以删除单个备份文件。

    ',13))])}const P=e(d,[["render",u]]);export{q as __pageData,P as default}; diff --git a/assets/config_backup.md.DOjbghb9.lean.js b/assets/config_backup.md.DOjbghb9.lean.js new file mode 100644 index 000000000..9666ad49e --- /dev/null +++ b/assets/config_backup.md.DOjbghb9.lean.js @@ -0,0 +1 @@ +import{_ as e,c as p,a6 as n,j as a,a as r,G as l,B as i,o as s}from"./chunks/framework.B1keMFNq.js";const q=JSON.parse('{"title":"备份","description":"","frontmatter":{"lang":"zh-cn","title":"备份"},"headers":[],"relativePath":"config/backup.md","filePath":"config/backup.md","lastUpdated":1723442587000}'),d={name:"config/backup.md"};function u(b,t,f,m,k,x){const o=i("Badge");return s(),p("div",null,[t[12]||(t[12]=n('

    备份

    本节内容

    本节将介绍关于备份、自动备份、自动清理旧备份的相关设置。

    在本节中的一些部分,你将使用到 cron 表达式。这是一种表达一个或一系列时间点的语法。你可以参考以下内容以学习 cron 表达式。

    请注意,海豹核心使用不含秒数、由 5 个部分组成的 cron 格式,这也是 Linux 系统中使用的格式;而不是包含秒数、由 6 个部分组成的格式。

    关于备份

    经常备份是避免数据损失的最佳手段。海豹核心默认提供每 12 小时一次的自动备份。海豹核心产生的所有备份都位于 backups/ 目录下。

    ',4)),a("p",null,[t[0]||(t[0]=r("从 ")),l(o,{type:"tip",text:"v1.4.6"}),t[1]||(t[1]=r(" 起,备份文件的命名遵循以下格式:")),t[2]||(t[2]=a("code",null,"bak_年月日_时分秒[_auto]_rXX_XXXXXXXX.zip",-1)),t[3]||(t[3]=r("。"))]),a("p",null,[t[4]||(t[4]=r("如果你使用的是 ")),l(o,{type:"tip",text:"v1.4.5"}),t[5]||(t[5]=r(" 或之前版本,文件名格式是:")),t[6]||(t[6]=a("code",null,"bak-年月日_时分秒[_auto]_随机数.zip",-1)),t[7]||(t[7]=r("。"))]),t[13]||(t[13]=a("p",null,[r("文件名中含有 "),a("code",null,"auto"),r(" 字样的是自动生成的备份。")],-1)),t[14]||(t[14]=a("p",null,"你也可以对备份行为进行设置。相关设置均位于 WebUI 的「综合设置 - 备份」页面。",-1)),t[15]||(t[15]=a("p",null,"在此页面上,你将看到:自动备份设置、自动清理设置、当前备份文件列表。在更改任何设置后,你需要点击右上角的「保存设置」使之生效。",-1)),t[16]||(t[16]=a("h2",{id:"手动备份",tabindex:"-1"},[r("手动备份 "),a("a",{class:"header-anchor",href:"#手动备份","aria-label":'Permalink to "手动备份"'},"​")],-1)),t[17]||(t[17]=a("p",null,"点击页面右上角的「立即备份」按钮,可以立即生成一份备份。",-1)),a("p",null,[t[8]||(t[8]=r("从 ")),l(o,{type:"tip",text:"v1.4.6"}),t[9]||(t[9]=r(" 起,你可以在手动备份时调整备份范围。"))]),t[18]||(t[18]=a("h2",{id:"自动备份",tabindex:"-1"},[r("自动备份 "),a("a",{class:"header-anchor",href:"#自动备份","aria-label":'Permalink to "自动备份"'},"​")],-1)),t[19]||(t[19]=a("p",null,"勾选「开启」启用自动备份。",-1)),t[20]||(t[20]=a("p",null,"在「备份间隔」项可以通过 cron 表达式规定自动备份的时机。",-1)),a("p",null,[t[10]||(t[10]=r("从 ")),l(o,{type:"tip",text:"v1.4.6"}),t[11]||(t[11]=r(" 起,在「备份范围」项,你可选择每次自动备份的范围。"))]),t[21]||(t[21]=n('

    自动清理

    在「清理模式」中选择「保留一定数量」或「保留一定时间内」启用自动清理。

    配置清理范围

    在「保留一定数量」模式下,自动清理时将保留最新的指定数量的备份文件,更老的文件将被删除。

    在「保留一定时间内」模式下,自动清理时将保留创建时间在指定时间范围内的备份文件,更老的文件将被删除。

    配置清理时机

    勾选「触发方式」中的「自动备份后」和/或「定时」以设置自动清理时机。两种触发方式可以同时使用。

    如果勾选了「自动备份后」,在每次自动备份完成后将执行一次自动清理。

    如果勾选了「定时」,按输入的 cron 表达式指定自动清理的时机。

    备份列表

    在「已备份文件」中按时间从新到旧列出了当前存在的备份文件。

    你可通过「进入批量删除页面」进行手动批量删除。

    点击每一个备份文件右边的「下载」以下载对应文件,点击垃圾桶图标按钮以删除单个备份文件。

    ',13))])}const P=e(d,[["render",u]]);export{q as __pageData,P as default}; diff --git a/assets/config_ban.md.tQubpXbn.js b/assets/config_ban.md.tQubpXbn.js new file mode 100644 index 000000000..d26a68fb8 --- /dev/null +++ b/assets/config_ban.md.tQubpXbn.js @@ -0,0 +1 @@ +import{_ as e,c as t,a6 as i,o as l}from"./chunks/framework.B1keMFNq.js";const r="/sealdice-manual-next/assets/ban-ui.Dhue1cR0.png",n="/sealdice-manual-next/assets/ban-add-in-ui.DHyGW49r.png",o="/sealdice-manual-next/assets/ban-config.SLkrj0Hg.png",f=JSON.parse('{"title":"黑白名单","description":"","frontmatter":{"lang":"zh-cn","title":"黑白名单"},"headers":[],"relativePath":"config/ban.md","filePath":"config/ban.md","lastUpdated":1712309998000}'),s={name:"config/ban.md"};function c(h,a,d,p,u,m){return l(),t("div",null,a[0]||(a[0]=[i('

    黑白名单

    本节内容

    本节将介绍黑白名单的设置,请善用侧边栏和搜索,按需阅读文档。

    如何设置黑白名单?

    黑白名单是骰子拉黑/豁免的用户/群的列表。来源可能是骰主在后台设置的,也可能是因为触发了某些自动规则添加的。

    黑白名单

    点击海豹 UI 界面的「综合设置 - 黑白名单」选项,你就可以进入黑白名单管理页面。

    添加黑白名单

    UI 手动添加

    点击「添加」按钮,可在后台手动添加黑(白)名单。

    UI 手动添加黑白名单

    指令添加

    使用 - 核心指令

    自动添加

    触发某些自动规则时,可能会自动添加用户进黑名单,如:

    黑白名单设置

    点开「设置选项」,可以对黑白名单进行一些设置。

    黑白名单设置

    黑名单惩罚:

    • 拒绝回复:骰子不回复黑名单用户;
    • 拒绝邀请:骰子自动拒绝黑名单用户的邀请;
    • 退出事发群:比如禁言骰子触发了黑名单事件,会退出禁言的事发群;
    • 使用时立即退出群:有黑名单用户在其他群尝试使用骰子时,骰子会立即退群。

    连带责任:当有用户触发黑名单事件时,对应的群组和邀请人会按 设置的比例 增加怒气值。

    ',21)]))}const g=e(s,[["render",c]]);export{f as __pageData,g as default}; diff --git a/assets/config_ban.md.tQubpXbn.lean.js b/assets/config_ban.md.tQubpXbn.lean.js new file mode 100644 index 000000000..d26a68fb8 --- /dev/null +++ b/assets/config_ban.md.tQubpXbn.lean.js @@ -0,0 +1 @@ +import{_ as e,c as t,a6 as i,o as l}from"./chunks/framework.B1keMFNq.js";const r="/sealdice-manual-next/assets/ban-ui.Dhue1cR0.png",n="/sealdice-manual-next/assets/ban-add-in-ui.DHyGW49r.png",o="/sealdice-manual-next/assets/ban-config.SLkrj0Hg.png",f=JSON.parse('{"title":"黑白名单","description":"","frontmatter":{"lang":"zh-cn","title":"黑白名单"},"headers":[],"relativePath":"config/ban.md","filePath":"config/ban.md","lastUpdated":1712309998000}'),s={name:"config/ban.md"};function c(h,a,d,p,u,m){return l(),t("div",null,a[0]||(a[0]=[i('

    黑白名单

    本节内容

    本节将介绍黑白名单的设置,请善用侧边栏和搜索,按需阅读文档。

    如何设置黑白名单?

    黑白名单是骰子拉黑/豁免的用户/群的列表。来源可能是骰主在后台设置的,也可能是因为触发了某些自动规则添加的。

    黑白名单

    点击海豹 UI 界面的「综合设置 - 黑白名单」选项,你就可以进入黑白名单管理页面。

    添加黑白名单

    UI 手动添加

    点击「添加」按钮,可在后台手动添加黑(白)名单。

    UI 手动添加黑白名单

    指令添加

    使用 - 核心指令

    自动添加

    触发某些自动规则时,可能会自动添加用户进黑名单,如:

    黑白名单设置

    点开「设置选项」,可以对黑白名单进行一些设置。

    黑白名单设置

    黑名单惩罚:

    • 拒绝回复:骰子不回复黑名单用户;
    • 拒绝邀请:骰子自动拒绝黑名单用户的邀请;
    • 退出事发群:比如禁言骰子触发了黑名单事件,会退出禁言的事发群;
    • 使用时立即退出群:有黑名单用户在其他群尝试使用骰子时,骰子会立即退群。

    连带责任:当有用户触发黑名单事件时,对应的群组和邀请人会按 设置的比例 增加怒气值。

    ',21)]))}const g=e(s,[["render",c]]);export{f as __pageData,g as default}; diff --git a/assets/config_basic.md.CWjjuw8f.js b/assets/config_basic.md.CWjjuw8f.js new file mode 100644 index 000000000..803a459f1 --- /dev/null +++ b/assets/config_basic.md.CWjjuw8f.js @@ -0,0 +1 @@ +import{_ as i,c as s,a6 as l,j as t,a as e,G as r,B as n,o as p}from"./chunks/framework.B1keMFNq.js";const Q=JSON.parse('{"title":"基础设置","description":"","frontmatter":{"lang":"zh-cn","title":"基础设置"},"headers":[],"relativePath":"config/basic.md","filePath":"config/basic.md","lastUpdated":1723442587000}'),d={name:"config/basic.md"},u={class:"warning custom-block"},h={id:"自动退出不活跃群组",tabindex:"-1"};function b(m,a,c,f,q,k){const o=n("Badge");return p(),s("div",null,[a[17]||(a[17]=l('

    基础设置

    本节内容

    本节将介绍基础设置内的内容。

    Master 管理

    在这里你可以管理你的骰娘的 Master 列表。

    Master 解锁码

    获取 Master 解锁码。Master 解锁码的用法参见 骰主指令。每次获取有效期 20 分钟。

    Master 列表

    在这里你可以添加、删除或更改 Master。请使用统一 ID,可使用 .userid 指令查看你的账号 ID。

    你也可添加群组 ID,在指定的群中所有人均视为有 Master 权限

    消息通知列表

    会对以下消息进行通知:加群邀请、好友邀请、进入群组、被踢出群、被禁言、自动激活、指令退群。

    此处应使用统一 ID。在你开启「邮箱通知」后,给通知列表中的 QQ 号发送通知时会自动转换成对应邮箱。

    好友邀请

    由于 QQ 的限制,当你 QQ 的「加我为好友时需要的验证方式」设置为「允许任何人」时,添加的好友为单向好友,此时不会发送 骰子成为好友 文案和 好友邀请 通过。

    请你按自己的需求选择其他的验证方式,若设置为「需要验证消息」或「需要回答问题并由我确认」,海豹会按照加好友验证设置自动通过或拒绝。

    邮箱通知

    为处理某些平台通知频繁引起的问题,开启此功能后只会通过邮件进行通知。请慎重决定是否开启,避免出现 为什么我的骰娘不发通知了? 的情况。

    发件邮箱

    填写你希望的发件邮箱,你指定的邮箱需支持通过 SMTP 协议发信,特别提醒:QQ 号被冻结后对应账号的邮箱也无法使用。

    邮箱密钥

    填写邮箱密钥。

    对于一些邮箱,密钥并不是登陆密码;例如:QQ 邮箱的 SMTP 功能需使用单独生成的授权码。

    SMTP 地址

    填写你邮箱服务提供商的 SMTP 地址。例如:QQ 邮箱为 smtp.qq.com

    私骰模式

    因 QQ 的实现变更,此功能暂无实际作用。

    允许自由开关

    允许任何人执行 bot on/off 和 ext on/off,否则只有邀请者、管理员和 Master 进行操作。

    启用戳一戳

    仅 QQ 平台,关闭后不回应戳一戳。

    ',30)),t("div",u,[a[6]||(a[6]=t("p",{class:"custom-block-title"},[e("注意:对接基于 NTQQ PC 端协议的 QQ 方案时,注意对方是否支持 "),t("code",null,"戳一戳"),e(" 功能")],-1)),a[7]||(a[7]=t("p",null,"内置客户端/Lagrange、LLOneBot 和 Napcat 等基于 NTQQ PC 的 QQ 方案,在旧版本中由于 NTQQ 旧协议本身不支持的原因,缺失该功能。",-1)),a[8]||(a[8]=t("p",null,"请使用:",-1)),t("ul",null,[t("li",null,[a[0]||(a[0]=e("海豹版本 ")),r(o,{type:"tip",text:"v1.4.6"}),a[1]||(a[1]=e(" 之前的内置客户端"))]),t("li",null,[r(o,{type:"tip",text:"6e350b0"}),a[2]||(a[2]=e(" 之前的 Lagrange"))]),t("li",null,[r(o,{type:"tip",text:"v3.27.0"}),a[3]||(a[3]=e(" 之前的 LLOneBot"))]),t("li",null,[r(o,{type:"tip",text:"v1.6.7"}),a[4]||(a[4]=e(" 之前的 Napcat"))]),a[5]||(a[5]=t("li",null,"……",-1))]),a[9]||(a[9]=t("p",null,[e("等方案的用户及时更新或"),t("strong",null,"关闭此开关"),e("(位于 "),t("code",null,"综合设置"),e(" - "),t("code",null,"基本设置"),e("),以免产生不必要的报错信息。")],-1))]),a[18]||(a[18]=l('

    限制 .text 指令

    默认开启。开启后只有 Master 和信任用户可使用 .text 指令。如果你不了解这个指令,一定要开启。

    忽略 .bot 裸指令

    默认关闭。开启后在群聊中只有 AT 骰子才会响应 .bot 指令。

    存活确认

    定期向通知列表发送消息,以便于骰主知晓存活状态。

    存活消息间隔写法:@every 1h30m10s 表示 1 小时 30 分 10 秒。更多请参阅 cron 文档

    注意:重启骰子后重新计时。

    日志记录提示

    开启后,每记录 N 条文本后,主动发送一条提醒信息,避免忘记 .log off

    刷屏警告

    默认关闭。开启后会对使用指令过快的用户和群组进行警告,警告后继续使用指令会增加怒气值,只对 QQ 平台有效。

    刷屏警告工作原理为令牌桶算法,具体请看 wiki

    注意

    如果您感觉难以理解,为了稳定性还是不要更改比较好!

    对速率限制的所有更改 重启后生效

    速率设置支持以下格式:

    @every 3s 每 3 秒一个;

    3 每秒 3 个。

    访问控制

    对于 UI 界面地址由 {Host:Port} 两部分组成。

    Host 可分为两种,0.0.0.0 主要用于服务器,代表可以在公网中用你的手机和电脑访问;127.0.0.1 主要用于自己的电脑/手机,只能在当前设备上管理海豹。

    Port 为海豹核心运行的端口,默认为 3211,想开多个海豹必须修改端口号!

    注意:重启骰子后生效!

    当你的海豹核心运行在公网时可设置密码,避免他人访问。

    登录后会自动记住一段时间。如果忘记密码请看 我忘了 WebUI 密码

    QQ 频道设置

    开启后将回应频道消息。基于 NTQQ 的连接方案暂不支持 QQ 频道。

    加好友验证

    仅当 QQ 账号选用「回答问题并由我确认」方式时有效。

    如果留空,则海豹核心将通过所有好友请求。

    你设定的答案不应含有空格。如果设置了多个问题,将所有答案用空格连接起来。例如:

    问题 1:以 dis 开头的退群指令是什么

    问题 2:你是否已阅读使用说明

    则在 WebUI 应填写为:dismiss 是

    ',31)),t("h2",h,[a[10]||(a[10]=e("自动退出不活跃群组 ")),r(o,{type:"tip",text:"v1.4.2"}),a[11]||(a[11]=e()),a[12]||(a[12]=t("a",{class:"header-anchor",href:"#自动退出不活跃群组","aria-label":'Permalink to "自动退出不活跃群组 "'},"​",-1))]),t("p",null,[a[13]||(a[13]=e("这是 ")),r(o,{type:"tip",text:"v1.4.2"}),a[14]||(a[14]=e(" 版本新增的功能。"))]),a[19]||(a[19]=t("p",null,"你可以设定一个时间线,单位是 天。",-1)),a[20]||(a[20]=t("p",null,"每天凌晨 4 时,海豹核心会检查在每个 QQ 群组中最后一次发送消息的时间。如果未发送消息的天数超过了你的设定,海豹核心会自动从该群组中退出。",-1)),a[21]||(a[21]=t("p",null,"退出前,海豹会向通知列表发送一条通知。",-1)),a[22]||(a[22]=t("p",null,"将时间线设置为 0 即可关闭自动退群功能。",-1)),t("p",null,[a[15]||(a[15]=e("在 ")),r(o,{type:"tip",text:"v1.4.4"}),a[16]||(a[16]=e(" 版本做了优化调整。"))]),a[23]||(a[23]=t("p",null,"自动退群将会按批次执行。你可以在 WebUI 中设置每个批次的数量和批次间隔时间。每两批之间将会间隔你所指定的分钟数。每批次内退出两个群将间隔 10 秒。",-1))])}const P=i(d,[["render",b]]);export{Q as __pageData,P as default}; diff --git a/assets/config_basic.md.CWjjuw8f.lean.js b/assets/config_basic.md.CWjjuw8f.lean.js new file mode 100644 index 000000000..803a459f1 --- /dev/null +++ b/assets/config_basic.md.CWjjuw8f.lean.js @@ -0,0 +1 @@ +import{_ as i,c as s,a6 as l,j as t,a as e,G as r,B as n,o as p}from"./chunks/framework.B1keMFNq.js";const Q=JSON.parse('{"title":"基础设置","description":"","frontmatter":{"lang":"zh-cn","title":"基础设置"},"headers":[],"relativePath":"config/basic.md","filePath":"config/basic.md","lastUpdated":1723442587000}'),d={name:"config/basic.md"},u={class:"warning custom-block"},h={id:"自动退出不活跃群组",tabindex:"-1"};function b(m,a,c,f,q,k){const o=n("Badge");return p(),s("div",null,[a[17]||(a[17]=l('

    基础设置

    本节内容

    本节将介绍基础设置内的内容。

    Master 管理

    在这里你可以管理你的骰娘的 Master 列表。

    Master 解锁码

    获取 Master 解锁码。Master 解锁码的用法参见 骰主指令。每次获取有效期 20 分钟。

    Master 列表

    在这里你可以添加、删除或更改 Master。请使用统一 ID,可使用 .userid 指令查看你的账号 ID。

    你也可添加群组 ID,在指定的群中所有人均视为有 Master 权限

    消息通知列表

    会对以下消息进行通知:加群邀请、好友邀请、进入群组、被踢出群、被禁言、自动激活、指令退群。

    此处应使用统一 ID。在你开启「邮箱通知」后,给通知列表中的 QQ 号发送通知时会自动转换成对应邮箱。

    好友邀请

    由于 QQ 的限制,当你 QQ 的「加我为好友时需要的验证方式」设置为「允许任何人」时,添加的好友为单向好友,此时不会发送 骰子成为好友 文案和 好友邀请 通过。

    请你按自己的需求选择其他的验证方式,若设置为「需要验证消息」或「需要回答问题并由我确认」,海豹会按照加好友验证设置自动通过或拒绝。

    邮箱通知

    为处理某些平台通知频繁引起的问题,开启此功能后只会通过邮件进行通知。请慎重决定是否开启,避免出现 为什么我的骰娘不发通知了? 的情况。

    发件邮箱

    填写你希望的发件邮箱,你指定的邮箱需支持通过 SMTP 协议发信,特别提醒:QQ 号被冻结后对应账号的邮箱也无法使用。

    邮箱密钥

    填写邮箱密钥。

    对于一些邮箱,密钥并不是登陆密码;例如:QQ 邮箱的 SMTP 功能需使用单独生成的授权码。

    SMTP 地址

    填写你邮箱服务提供商的 SMTP 地址。例如:QQ 邮箱为 smtp.qq.com

    私骰模式

    因 QQ 的实现变更,此功能暂无实际作用。

    允许自由开关

    允许任何人执行 bot on/off 和 ext on/off,否则只有邀请者、管理员和 Master 进行操作。

    启用戳一戳

    仅 QQ 平台,关闭后不回应戳一戳。

    ',30)),t("div",u,[a[6]||(a[6]=t("p",{class:"custom-block-title"},[e("注意:对接基于 NTQQ PC 端协议的 QQ 方案时,注意对方是否支持 "),t("code",null,"戳一戳"),e(" 功能")],-1)),a[7]||(a[7]=t("p",null,"内置客户端/Lagrange、LLOneBot 和 Napcat 等基于 NTQQ PC 的 QQ 方案,在旧版本中由于 NTQQ 旧协议本身不支持的原因,缺失该功能。",-1)),a[8]||(a[8]=t("p",null,"请使用:",-1)),t("ul",null,[t("li",null,[a[0]||(a[0]=e("海豹版本 ")),r(o,{type:"tip",text:"v1.4.6"}),a[1]||(a[1]=e(" 之前的内置客户端"))]),t("li",null,[r(o,{type:"tip",text:"6e350b0"}),a[2]||(a[2]=e(" 之前的 Lagrange"))]),t("li",null,[r(o,{type:"tip",text:"v3.27.0"}),a[3]||(a[3]=e(" 之前的 LLOneBot"))]),t("li",null,[r(o,{type:"tip",text:"v1.6.7"}),a[4]||(a[4]=e(" 之前的 Napcat"))]),a[5]||(a[5]=t("li",null,"……",-1))]),a[9]||(a[9]=t("p",null,[e("等方案的用户及时更新或"),t("strong",null,"关闭此开关"),e("(位于 "),t("code",null,"综合设置"),e(" - "),t("code",null,"基本设置"),e("),以免产生不必要的报错信息。")],-1))]),a[18]||(a[18]=l('

    限制 .text 指令

    默认开启。开启后只有 Master 和信任用户可使用 .text 指令。如果你不了解这个指令,一定要开启。

    忽略 .bot 裸指令

    默认关闭。开启后在群聊中只有 AT 骰子才会响应 .bot 指令。

    存活确认

    定期向通知列表发送消息,以便于骰主知晓存活状态。

    存活消息间隔写法:@every 1h30m10s 表示 1 小时 30 分 10 秒。更多请参阅 cron 文档

    注意:重启骰子后重新计时。

    日志记录提示

    开启后,每记录 N 条文本后,主动发送一条提醒信息,避免忘记 .log off

    刷屏警告

    默认关闭。开启后会对使用指令过快的用户和群组进行警告,警告后继续使用指令会增加怒气值,只对 QQ 平台有效。

    刷屏警告工作原理为令牌桶算法,具体请看 wiki

    注意

    如果您感觉难以理解,为了稳定性还是不要更改比较好!

    对速率限制的所有更改 重启后生效

    速率设置支持以下格式:

    @every 3s 每 3 秒一个;

    3 每秒 3 个。

    访问控制

    对于 UI 界面地址由 {Host:Port} 两部分组成。

    Host 可分为两种,0.0.0.0 主要用于服务器,代表可以在公网中用你的手机和电脑访问;127.0.0.1 主要用于自己的电脑/手机,只能在当前设备上管理海豹。

    Port 为海豹核心运行的端口,默认为 3211,想开多个海豹必须修改端口号!

    注意:重启骰子后生效!

    当你的海豹核心运行在公网时可设置密码,避免他人访问。

    登录后会自动记住一段时间。如果忘记密码请看 我忘了 WebUI 密码

    QQ 频道设置

    开启后将回应频道消息。基于 NTQQ 的连接方案暂不支持 QQ 频道。

    加好友验证

    仅当 QQ 账号选用「回答问题并由我确认」方式时有效。

    如果留空,则海豹核心将通过所有好友请求。

    你设定的答案不应含有空格。如果设置了多个问题,将所有答案用空格连接起来。例如:

    问题 1:以 dis 开头的退群指令是什么

    问题 2:你是否已阅读使用说明

    则在 WebUI 应填写为:dismiss 是

    ',31)),t("h2",h,[a[10]||(a[10]=e("自动退出不活跃群组 ")),r(o,{type:"tip",text:"v1.4.2"}),a[11]||(a[11]=e()),a[12]||(a[12]=t("a",{class:"header-anchor",href:"#自动退出不活跃群组","aria-label":'Permalink to "自动退出不活跃群组 "'},"​",-1))]),t("p",null,[a[13]||(a[13]=e("这是 ")),r(o,{type:"tip",text:"v1.4.2"}),a[14]||(a[14]=e(" 版本新增的功能。"))]),a[19]||(a[19]=t("p",null,"你可以设定一个时间线,单位是 天。",-1)),a[20]||(a[20]=t("p",null,"每天凌晨 4 时,海豹核心会检查在每个 QQ 群组中最后一次发送消息的时间。如果未发送消息的天数超过了你的设定,海豹核心会自动从该群组中退出。",-1)),a[21]||(a[21]=t("p",null,"退出前,海豹会向通知列表发送一条通知。",-1)),a[22]||(a[22]=t("p",null,"将时间线设置为 0 即可关闭自动退群功能。",-1)),t("p",null,[a[15]||(a[15]=e("在 ")),r(o,{type:"tip",text:"v1.4.4"}),a[16]||(a[16]=e(" 版本做了优化调整。"))]),a[23]||(a[23]=t("p",null,"自动退群将会按批次执行。你可以在 WebUI 中设置每个批次的数量和批次间隔时间。每两批之间将会间隔你所指定的分钟数。每批次内退出两个群将间隔 10 秒。",-1))])}const P=i(d,[["render",b]]);export{Q as __pageData,P as default}; diff --git a/assets/config_censor.md.eWdyucuW.js b/assets/config_censor.md.eWdyucuW.js new file mode 100644 index 000000000..0f0d7a643 --- /dev/null +++ b/assets/config_censor.md.eWdyucuW.js @@ -0,0 +1 @@ +import{_ as e,c as t,a6 as o,o as l}from"./chunks/framework.B1keMFNq.js";const s="/sealdice-manual-next/assets/censor-ui.DLNYMxtg.png",i="/sealdice-manual-next/assets/censor-config1.Bip8x8md.png",r="/sealdice-manual-next/assets/censor-config2.DGoTrdv-.png",c="/sealdice-manual-next/assets/censor-words.Dn7Hjhhz.png",n="/sealdice-manual-next/assets/censor-log.BUJg4eNS.png",q=JSON.parse('{"title":"拦截","description":"","frontmatter":{"lang":"zh-cn","title":"拦截"},"headers":[],"relativePath":"config/censor.md","filePath":"config/censor.md","lastUpdated":1714442589000}'),p={name:"config/censor.md"};function d(h,a,m,u,b,f){return l(),t("div",null,a[0]||(a[0]=[o('

    拦截

    本节内容

    本节将介绍拦截功能和相关设置,请善用侧边栏和搜索,按需阅读文档。

    什么是拦截功能?

    • 我不希望我的骰子被用来跑粉红团,如何避免?

    • 发生了超过普通人类认知的离谱事情,如何设置骰子收到了某些词语时自动拦截掉这些用户?

    • ……

    「拦截管理」提供检查骰子收到的消息内容中是否有敏感词汇,命中时进行相应处理的能力。

    点击海豹 UI 界面的「扩展功能 - 拦截管理」选项,你就可以进入拦截管理页面。

    拦截管理

    如果显示未启用的话,点击左上角开关来启用拦截。

    配置拦截

    拦截设置主要分为两部分:「匹配选项」,即设置拦截什么样的消息;「响应设置」,即命中敏感词后要如何处理。下面我们将一一介绍。

    匹配选项

    匹配选项

    匹配选项中最重要的设置就是 「拦截范围」,这个选项决定了什么范围的内容会进行拦截检查。

    • 发出的消息:拦截骰子发出的消息文本(包括指令回复和自定义回复,总之所有骰子发的内容)进行检查
    • 收到的指令:拦截骰子收到的命令文本进行检查,如收到「.rd 进行一次骰点」时,会检查其中的「进行一次骰点」,不受 bot off 影响
    • 收到的所有消息:拦截骰子收到的所有消息进行检查,包括不以 . 等开头的消息,不受 bot off 影响

    其余选项可以参看对应的提示,悬浮在问号上即可看见对应帮助。

    响应设置

    海豹核心的敏感词主要分为四个等级:提醒 注意 警告 危险,程度依次升高。你可以对不同等级的处理方式做不同的设置。

    当消息命中敏感词的时候,将取命中词汇中的 最高等级 作为处理等级。当同一个用户触发同一等级的次数超过对应设置时,将进行对应等级配置的操作,同时清空用户该等级的计数,重新计算。

    匹配设置

    • 发送警告:会向触发用户发送警告信息;
    • 通知 Master:会通知骰主;
    • 拉黑用户/群/邀请人,增加怒气值:拉黑和怒气值机制,见 黑白名单

    敏感词管理

    将标签页切换到「敏感词管理」,可以看到如下的两个列表:「词库列表」和「敏感词列表」。

    页面中也提供了相应的帮助信息,可以点开查看。

    敏感词管理

    敏感词库通常为 txttoml 格式的文件,通过「导入」按钮可以导入多个词库,词库同时生效,其中重复的词取设置的最高等级。导入后点击「重载拦截」按钮以生效变更。

    提示:为什么没有默认的敏感词库?

    「当你在凝视深渊的时候,深渊也正在凝视着你。」

    敏感词库本身属于敏感信息,故海豹官方不提供默认的敏感词库。

    下方的敏感词列表会展示当前加载的敏感词,如果设置中勾选了「匹配拼音」,也会将实际去匹配的拼音展示出来。

    查看拦截日志

    在「拦截日志」标签页,你可以看到在何时、何地、哪个用户触发了什么等级的敏感词,具体的内容是什么。

    拦截日志

    如何让用户/群豁免检查?

    给用户/群配置白名单,即可豁免检查。设置白名单见 黑白名单

    如何编写敏感词库?

    在「敏感词管理」标签页,提供了词库模板的下载。

    具体的编写帮助见 进阶 - 编写敏感词库

    ',35)]))}const _=e(p,[["render",d]]);export{q as __pageData,_ as default}; diff --git a/assets/config_censor.md.eWdyucuW.lean.js b/assets/config_censor.md.eWdyucuW.lean.js new file mode 100644 index 000000000..0f0d7a643 --- /dev/null +++ b/assets/config_censor.md.eWdyucuW.lean.js @@ -0,0 +1 @@ +import{_ as e,c as t,a6 as o,o as l}from"./chunks/framework.B1keMFNq.js";const s="/sealdice-manual-next/assets/censor-ui.DLNYMxtg.png",i="/sealdice-manual-next/assets/censor-config1.Bip8x8md.png",r="/sealdice-manual-next/assets/censor-config2.DGoTrdv-.png",c="/sealdice-manual-next/assets/censor-words.Dn7Hjhhz.png",n="/sealdice-manual-next/assets/censor-log.BUJg4eNS.png",q=JSON.parse('{"title":"拦截","description":"","frontmatter":{"lang":"zh-cn","title":"拦截"},"headers":[],"relativePath":"config/censor.md","filePath":"config/censor.md","lastUpdated":1714442589000}'),p={name:"config/censor.md"};function d(h,a,m,u,b,f){return l(),t("div",null,a[0]||(a[0]=[o('

    拦截

    本节内容

    本节将介绍拦截功能和相关设置,请善用侧边栏和搜索,按需阅读文档。

    什么是拦截功能?

    • 我不希望我的骰子被用来跑粉红团,如何避免?

    • 发生了超过普通人类认知的离谱事情,如何设置骰子收到了某些词语时自动拦截掉这些用户?

    • ……

    「拦截管理」提供检查骰子收到的消息内容中是否有敏感词汇,命中时进行相应处理的能力。

    点击海豹 UI 界面的「扩展功能 - 拦截管理」选项,你就可以进入拦截管理页面。

    拦截管理

    如果显示未启用的话,点击左上角开关来启用拦截。

    配置拦截

    拦截设置主要分为两部分:「匹配选项」,即设置拦截什么样的消息;「响应设置」,即命中敏感词后要如何处理。下面我们将一一介绍。

    匹配选项

    匹配选项

    匹配选项中最重要的设置就是 「拦截范围」,这个选项决定了什么范围的内容会进行拦截检查。

    • 发出的消息:拦截骰子发出的消息文本(包括指令回复和自定义回复,总之所有骰子发的内容)进行检查
    • 收到的指令:拦截骰子收到的命令文本进行检查,如收到「.rd 进行一次骰点」时,会检查其中的「进行一次骰点」,不受 bot off 影响
    • 收到的所有消息:拦截骰子收到的所有消息进行检查,包括不以 . 等开头的消息,不受 bot off 影响

    其余选项可以参看对应的提示,悬浮在问号上即可看见对应帮助。

    响应设置

    海豹核心的敏感词主要分为四个等级:提醒 注意 警告 危险,程度依次升高。你可以对不同等级的处理方式做不同的设置。

    当消息命中敏感词的时候,将取命中词汇中的 最高等级 作为处理等级。当同一个用户触发同一等级的次数超过对应设置时,将进行对应等级配置的操作,同时清空用户该等级的计数,重新计算。

    匹配设置

    • 发送警告:会向触发用户发送警告信息;
    • 通知 Master:会通知骰主;
    • 拉黑用户/群/邀请人,增加怒气值:拉黑和怒气值机制,见 黑白名单

    敏感词管理

    将标签页切换到「敏感词管理」,可以看到如下的两个列表:「词库列表」和「敏感词列表」。

    页面中也提供了相应的帮助信息,可以点开查看。

    敏感词管理

    敏感词库通常为 txttoml 格式的文件,通过「导入」按钮可以导入多个词库,词库同时生效,其中重复的词取设置的最高等级。导入后点击「重载拦截」按钮以生效变更。

    提示:为什么没有默认的敏感词库?

    「当你在凝视深渊的时候,深渊也正在凝视着你。」

    敏感词库本身属于敏感信息,故海豹官方不提供默认的敏感词库。

    下方的敏感词列表会展示当前加载的敏感词,如果设置中勾选了「匹配拼音」,也会将实际去匹配的拼音展示出来。

    查看拦截日志

    在「拦截日志」标签页,你可以看到在何时、何地、哪个用户触发了什么等级的敏感词,具体的内容是什么。

    拦截日志

    如何让用户/群豁免检查?

    给用户/群配置白名单,即可豁免检查。设置白名单见 黑白名单

    如何编写敏感词库?

    在「敏感词管理」标签页,提供了词库模板的下载。

    具体的编写帮助见 进阶 - 编写敏感词库

    ',35)]))}const _=e(p,[["render",d]]);export{q as __pageData,_ as default}; diff --git a/assets/config_custom_text.md.6xz1Pbb7.js b/assets/config_custom_text.md.6xz1Pbb7.js new file mode 100644 index 000000000..892d3e08c --- /dev/null +++ b/assets/config_custom_text.md.6xz1Pbb7.js @@ -0,0 +1 @@ +import{_ as c,c as d,a6 as a,j as o,G as s,B as l,o as i}from"./chunks/framework.B1keMFNq.js";const p="/sealdice-manual-next/assets/custom-text-main.B9CfQdSx.png",n="/sealdice-manual-next/assets/custom-text-great-success.CACLVCIO.png",r="/sealdice-manual-next/assets/custom-text-add-option.0FNaSzlW.png",h="/sealdice-manual-next/assets/custom-text-delete-option.Crh9iJ_Z.png",u="/sealdice-manual-next/assets/custom-text-waiting-save.77cjoXk7.png",m="/sealdice-manual-next/assets/custom-text-reset.BrJxXN0J.png",_="/sealdice-manual-next/assets/custom-text-filter.DRwGwfAH.png",b="/sealdice-manual-next/assets/custom-text-pic-example.mEfPZlG7.png",g="/sealdice-manual-next/assets/custom-text-pic-show.BzD0TJEe.png",x="/sealdice-manual-next/assets/custom-text-with-var.cb258LWG.png",B=JSON.parse('{"title":"自定义文案","description":"","frontmatter":{"lang":"zh-cn","title":"自定义文案"},"headers":[],"relativePath":"config/custom_text.md","filePath":"config/custom_text.md","lastUpdated":1728702230000}'),k={name:"config/custom_text.md"},q={class:"info custom-block"};function f(v,e,C,P,$,w){const t=l("ChatBox");return i(),d("div",null,[e[1]||(e[1]=a('

    自定义文案

    本节内容

    本节将介绍自定义文案的设置,请善用侧边栏和搜索,按需阅读文档。

    什么是自定义文案?

    • 骰子的回复内容太过单调,要怎样让它丰富起来呢?

    • 骰子的回复内容太过繁琐,要怎样让它简洁起来呢?

    • 我的骰子有自己的人设,怎么修改那些固定的回复词,让 TA 符合人设呢?

    • ……

    如果你想要修改骰子向用户回复的提示词,那么你就需要修改自定义文案。

    海豹骰子的回复内容几乎可以进行完全的自定义,绝大部分指令的文案都可以进行修改。修改的文案内容还支持插入图片和 CQ 码。

    如何修改文案?

    在海豹 UI 界面的「自定义文案」选项中,你可以看见文案被按照几个大类放置在一起。

    自定义文案设置页

    左侧是分类,可以看见,文案目前被分为以下几个大类:

    • CoC:内置的 CoC 支持相关的文案;
    • DND:内置的 DND 支持相关的文案;
    • 其它:一些杂项文案设置;
    • 功能:内置 功能 的相关文案,如 .jrrp 的文案;
    • 日志:跑团日志 功能相关的文案;
    • 核心:海豹核心功能的文案。

    在每一个分类中,都可以在右侧看见当前分类的「文案列表」与上方的「筛选」,接下来将依次介绍它们。

    文案列表

    在「文案列表」中,每一个文案都以类似下图的格式展示,我们以「大成功」的文案来举例:

    大成功文案

    可以看见,对于「大成功」文案,它归属于 判定-常规 这个小类中,结果有两行文案,这意味着骰子会 随机抽取 其中的一行文案来使用。例如:

    ',16)),o("div",q,[e[0]||(e[0]=o("p",{class:"custom-block-title"},"示例",-1)),s(t,{messages:[{content:".ra 力量",send:!0},{content:"<木落>的力量检定结果为:D100=3/30=([1d100=3]) 大成功!"},{content:".ra 力量",send:!0},{content:"<木落>的力量检定结果为:D100=2/30=([1d100=3]) 运气不错,大成功!"}]})]),e[2]||(e[2]=a('

    如果想要添加一行,那么点击左侧「加号」按钮:

    增加文案选项

    如果你觉得某一行不满意,点左侧「删除」按钮。当然,至少需要保留一个选项。

    删除文案选项

    修改好之后,不要忘记保存!

    等待保存

    注意:尽早保存!

    对文案的修改建议及时保存,同时注意 保存前不要切换左侧的分类,否则未保存的修改将丢失!

    最后,如果你想回到初始设置,点击右上角的「刷子」图标。

    重置为初始设置

    随后会弹出确认框,点击确定后,一切就是刚开始的样子了。

    筛选文案

    我们可以看见,为了方便在本组中查找到对应的条目,在文案列表的上方都有着对应的「筛选」功能。

    文案筛选

    • 搜索:搜索文案的小类和具体文案名。
    • 指定类别:
      • 全部:显示全部文案;
      • 默认文案:显示当前大类下未修改过的文案;
      • 修改过:已修改过的文案;
      • 指定分组:选中后会多出一个「分组」下拉框,用于筛选出指定小类下的文案条目;
      • 旧版文案:海豹的更新有时会调整和删除部分文案条目,但旧的数据不会删除。海豹从旧版升级后,可以通过此项筛选出那些不用的条目。

    文案的导入/导出

    • 我不想自己一条条修改文案,如何快速导入?

    • 我想给我的小伙伴分享我的文案,他们要如何导入进去?

    如果需要导入/导出文案内容,可以点击右上角的「导入/导出」按钮进入页面复制粘贴,就能快速分享相关设置了。

    注意:确认内容完整再导入

    粘贴文案内容时,注意检查自己导入的内容是不是完整复制进来的。

    请不要在新版本导入旧版本的文案,这种做法会绕过文案版本的迁移变更,导致缺少条目,并且很难处理。

    自定义文案组合

    在「自定义文案」中你可以经常看见一个文案调用其他文案的情况,下面将简单介绍他们之间的关系。

    COC

    以下为 COC 扩展的文案介绍。

    .ra/rc 检定

    检定 中的 {$t结果文本} 即调用 检定_单项结果文本

    检定_多轮 中的 {$t结果文本} 即调用 n 次 检定_单项结果文本

    检定_单项结果文本 中的 {$t判定结果} 即调用 判定-常规 对应的回复词,当你的检定为多轮检定时,将调用 判定-简短

    对于 判定_必须_困难_失败 此类必须判定的回复词,使用于指定检定难度的情况,如 .ra 困难侦察

    检定_暗中_群内 即进行暗骰时发在群里的回复词。

    检定_暗中_私聊_前缀 即进行暗骰时发送到私聊的回复词的前缀,实际发送内容为前缀 + 射击检定

    .st 属性设置

    属性设置_增减 中的 {$t变更列表} 即调用 属性设置_增减_单项,当你的增减表达式错误时,则调用 属性设置_增减_错误的值

    .sc 理智检定

    理智检定 中的 {$t结果文本} 即调用 理智检定_单项结果文本{$t附加语} 即调用 理智检定_附加语_大失败 等对应的回复词;{$t提示_角色疯狂} 即调用 提示_临时疯狂,当理智归零时则调用 提示_永久疯狂

    .en 技能成长

    技能成长中{$t结果文本} 即调用 技能成长_结果_成功,当成长失败且没有失败成长值时则调用 技能成长_结果_失败,当成长失败且有失败成长值时则调用 技能成长_结果_失败变更

    技能成长_批量 中的 {$t总结果文本} 即调用 n 次 技能成长_批量_单条技能成长_批量_分隔符 为每一单条中间的分隔符。

    技能成长_批量_单条 中的 {$t结果文本} 即调用 技能成长_结果_成功_无后缀,当成长失败且没有失败成长值时则调用 技能成长_结果_失败_无后缀,当成长失败且有失败成长值时则调用 技能成长_结果_失败变更_无后缀

    对于 技能成长_属性未录入 等回复语,你可以参考上面的内容自行对比理解。

    注意:无前缀/无后缀

    此处内容较为复杂,你可以看出很多回复语都有普通无前缀/无后缀两条区分,这主要是为了批量成长时便于引用无前缀/无后缀的回复,使前缀/后缀不会反复出现在批量成长中。

    核心

    .r 骰点

    暗骰_群内 为暗骰时发送到群内的回复语,暗骰_私聊_前缀 为私聊发指令者的回复语的前缀,实际内容为 暗骰_私聊_前缀 + 骰点

    骰点{$t原因句子} 即调用 骰点_原因{$t结果文本} 即调用 骰点_单项结果文本

    进行多轮骰点时 骰点_多轮 将替换 骰点 进行回复,{$t结果文本} 即调用 n 条 骰点_单项结果文本

    .alias 快捷指令

    快捷指令_列表 中的 {$t列表内容} 即调用 快捷指令_列表_单行,当有多条指令时以 快捷指令_列表_分隔符 为分隔符,若没有快捷指令则调用 快捷指令_列表_空

    快捷指令触发_前缀 中的 {$t指令来源}群/个人{$t目标指令} 即快捷指令指向的原指令。

    文案插入图片和 CQ 码

    将图片放在骰子的适当目录(建议放在 data/images),再按照相应图片的路径插入这样一段文本即可。以图片 data/images/sealdice.png 为例:

    插入文本为 [图:data/images/sealdice.png]

    例如修改骰子进群的文案:

    文案图片示例

    全文案为:

    text
    <{核心:骰子名字}> 已经就绪。可通过.help 查看指令列表\\n[图:data/images/sealdice.png]

    效果如下:

    文案回复图片效果

    文案变量标签

    你可能注意到,有些词条下面有这样的内容,如下图的 $t群组骰子面数

    有变量标签的文案

    文案下方的标签代表了被默认文案所使用的特殊变量,你可以使用 {变量名} 来插入他们,例如 {$t群组骰子面数}

    除此之外,有些变量可以在所有文案中使用,具体列表可以见 进阶 - 内置脚本语言

    在一个文案中使用另一个文案

    所有的自定义文案都可以嵌套使用,例如:

    text
    这里是{核心:骰子名字},我是一个示例

    默认会被解析为:

    text
    这里是海豹,我是一个示例

    危险:禁止递归嵌套!

    千万不要递归嵌套,会发生很糟糕的事情!

    自定义文案引用牌堆

    对于想要在自定义文案或自定义回复中引用牌堆的骰主,可使用 #{DRAW-关键词} 进行调用。

    文案常见问题

    骰子进群和成为好友的问候语是哪个?

    核心:骰子进群

    核心:骰子成为好友

    更复杂的文案设置

    • 我希望能根据骰点结果显示不同的文案,要怎么实现?

    • 我希望骰子能有多套回复词,要如何设置?

    • ……

    更复杂的文案设置涉及到逻辑的编写,见 进阶 - 编写复杂文案

    ',76))])}const N=c(k,[["render",f]]);export{B as __pageData,N as default}; diff --git a/assets/config_custom_text.md.6xz1Pbb7.lean.js b/assets/config_custom_text.md.6xz1Pbb7.lean.js new file mode 100644 index 000000000..892d3e08c --- /dev/null +++ b/assets/config_custom_text.md.6xz1Pbb7.lean.js @@ -0,0 +1 @@ +import{_ as c,c as d,a6 as a,j as o,G as s,B as l,o as i}from"./chunks/framework.B1keMFNq.js";const p="/sealdice-manual-next/assets/custom-text-main.B9CfQdSx.png",n="/sealdice-manual-next/assets/custom-text-great-success.CACLVCIO.png",r="/sealdice-manual-next/assets/custom-text-add-option.0FNaSzlW.png",h="/sealdice-manual-next/assets/custom-text-delete-option.Crh9iJ_Z.png",u="/sealdice-manual-next/assets/custom-text-waiting-save.77cjoXk7.png",m="/sealdice-manual-next/assets/custom-text-reset.BrJxXN0J.png",_="/sealdice-manual-next/assets/custom-text-filter.DRwGwfAH.png",b="/sealdice-manual-next/assets/custom-text-pic-example.mEfPZlG7.png",g="/sealdice-manual-next/assets/custom-text-pic-show.BzD0TJEe.png",x="/sealdice-manual-next/assets/custom-text-with-var.cb258LWG.png",B=JSON.parse('{"title":"自定义文案","description":"","frontmatter":{"lang":"zh-cn","title":"自定义文案"},"headers":[],"relativePath":"config/custom_text.md","filePath":"config/custom_text.md","lastUpdated":1728702230000}'),k={name:"config/custom_text.md"},q={class:"info custom-block"};function f(v,e,C,P,$,w){const t=l("ChatBox");return i(),d("div",null,[e[1]||(e[1]=a('

    自定义文案

    本节内容

    本节将介绍自定义文案的设置,请善用侧边栏和搜索,按需阅读文档。

    什么是自定义文案?

    • 骰子的回复内容太过单调,要怎样让它丰富起来呢?

    • 骰子的回复内容太过繁琐,要怎样让它简洁起来呢?

    • 我的骰子有自己的人设,怎么修改那些固定的回复词,让 TA 符合人设呢?

    • ……

    如果你想要修改骰子向用户回复的提示词,那么你就需要修改自定义文案。

    海豹骰子的回复内容几乎可以进行完全的自定义,绝大部分指令的文案都可以进行修改。修改的文案内容还支持插入图片和 CQ 码。

    如何修改文案?

    在海豹 UI 界面的「自定义文案」选项中,你可以看见文案被按照几个大类放置在一起。

    自定义文案设置页

    左侧是分类,可以看见,文案目前被分为以下几个大类:

    • CoC:内置的 CoC 支持相关的文案;
    • DND:内置的 DND 支持相关的文案;
    • 其它:一些杂项文案设置;
    • 功能:内置 功能 的相关文案,如 .jrrp 的文案;
    • 日志:跑团日志 功能相关的文案;
    • 核心:海豹核心功能的文案。

    在每一个分类中,都可以在右侧看见当前分类的「文案列表」与上方的「筛选」,接下来将依次介绍它们。

    文案列表

    在「文案列表」中,每一个文案都以类似下图的格式展示,我们以「大成功」的文案来举例:

    大成功文案

    可以看见,对于「大成功」文案,它归属于 判定-常规 这个小类中,结果有两行文案,这意味着骰子会 随机抽取 其中的一行文案来使用。例如:

    ',16)),o("div",q,[e[0]||(e[0]=o("p",{class:"custom-block-title"},"示例",-1)),s(t,{messages:[{content:".ra 力量",send:!0},{content:"<木落>的力量检定结果为:D100=3/30=([1d100=3]) 大成功!"},{content:".ra 力量",send:!0},{content:"<木落>的力量检定结果为:D100=2/30=([1d100=3]) 运气不错,大成功!"}]})]),e[2]||(e[2]=a('

    如果想要添加一行,那么点击左侧「加号」按钮:

    增加文案选项

    如果你觉得某一行不满意,点左侧「删除」按钮。当然,至少需要保留一个选项。

    删除文案选项

    修改好之后,不要忘记保存!

    等待保存

    注意:尽早保存!

    对文案的修改建议及时保存,同时注意 保存前不要切换左侧的分类,否则未保存的修改将丢失!

    最后,如果你想回到初始设置,点击右上角的「刷子」图标。

    重置为初始设置

    随后会弹出确认框,点击确定后,一切就是刚开始的样子了。

    筛选文案

    我们可以看见,为了方便在本组中查找到对应的条目,在文案列表的上方都有着对应的「筛选」功能。

    文案筛选

    • 搜索:搜索文案的小类和具体文案名。
    • 指定类别:
      • 全部:显示全部文案;
      • 默认文案:显示当前大类下未修改过的文案;
      • 修改过:已修改过的文案;
      • 指定分组:选中后会多出一个「分组」下拉框,用于筛选出指定小类下的文案条目;
      • 旧版文案:海豹的更新有时会调整和删除部分文案条目,但旧的数据不会删除。海豹从旧版升级后,可以通过此项筛选出那些不用的条目。

    文案的导入/导出

    • 我不想自己一条条修改文案,如何快速导入?

    • 我想给我的小伙伴分享我的文案,他们要如何导入进去?

    如果需要导入/导出文案内容,可以点击右上角的「导入/导出」按钮进入页面复制粘贴,就能快速分享相关设置了。

    注意:确认内容完整再导入

    粘贴文案内容时,注意检查自己导入的内容是不是完整复制进来的。

    请不要在新版本导入旧版本的文案,这种做法会绕过文案版本的迁移变更,导致缺少条目,并且很难处理。

    自定义文案组合

    在「自定义文案」中你可以经常看见一个文案调用其他文案的情况,下面将简单介绍他们之间的关系。

    COC

    以下为 COC 扩展的文案介绍。

    .ra/rc 检定

    检定 中的 {$t结果文本} 即调用 检定_单项结果文本

    检定_多轮 中的 {$t结果文本} 即调用 n 次 检定_单项结果文本

    检定_单项结果文本 中的 {$t判定结果} 即调用 判定-常规 对应的回复词,当你的检定为多轮检定时,将调用 判定-简短

    对于 判定_必须_困难_失败 此类必须判定的回复词,使用于指定检定难度的情况,如 .ra 困难侦察

    检定_暗中_群内 即进行暗骰时发在群里的回复词。

    检定_暗中_私聊_前缀 即进行暗骰时发送到私聊的回复词的前缀,实际发送内容为前缀 + 射击检定

    .st 属性设置

    属性设置_增减 中的 {$t变更列表} 即调用 属性设置_增减_单项,当你的增减表达式错误时,则调用 属性设置_增减_错误的值

    .sc 理智检定

    理智检定 中的 {$t结果文本} 即调用 理智检定_单项结果文本{$t附加语} 即调用 理智检定_附加语_大失败 等对应的回复词;{$t提示_角色疯狂} 即调用 提示_临时疯狂,当理智归零时则调用 提示_永久疯狂

    .en 技能成长

    技能成长中{$t结果文本} 即调用 技能成长_结果_成功,当成长失败且没有失败成长值时则调用 技能成长_结果_失败,当成长失败且有失败成长值时则调用 技能成长_结果_失败变更

    技能成长_批量 中的 {$t总结果文本} 即调用 n 次 技能成长_批量_单条技能成长_批量_分隔符 为每一单条中间的分隔符。

    技能成长_批量_单条 中的 {$t结果文本} 即调用 技能成长_结果_成功_无后缀,当成长失败且没有失败成长值时则调用 技能成长_结果_失败_无后缀,当成长失败且有失败成长值时则调用 技能成长_结果_失败变更_无后缀

    对于 技能成长_属性未录入 等回复语,你可以参考上面的内容自行对比理解。

    注意:无前缀/无后缀

    此处内容较为复杂,你可以看出很多回复语都有普通无前缀/无后缀两条区分,这主要是为了批量成长时便于引用无前缀/无后缀的回复,使前缀/后缀不会反复出现在批量成长中。

    核心

    .r 骰点

    暗骰_群内 为暗骰时发送到群内的回复语,暗骰_私聊_前缀 为私聊发指令者的回复语的前缀,实际内容为 暗骰_私聊_前缀 + 骰点

    骰点{$t原因句子} 即调用 骰点_原因{$t结果文本} 即调用 骰点_单项结果文本

    进行多轮骰点时 骰点_多轮 将替换 骰点 进行回复,{$t结果文本} 即调用 n 条 骰点_单项结果文本

    .alias 快捷指令

    快捷指令_列表 中的 {$t列表内容} 即调用 快捷指令_列表_单行,当有多条指令时以 快捷指令_列表_分隔符 为分隔符,若没有快捷指令则调用 快捷指令_列表_空

    快捷指令触发_前缀 中的 {$t指令来源}群/个人{$t目标指令} 即快捷指令指向的原指令。

    文案插入图片和 CQ 码

    将图片放在骰子的适当目录(建议放在 data/images),再按照相应图片的路径插入这样一段文本即可。以图片 data/images/sealdice.png 为例:

    插入文本为 [图:data/images/sealdice.png]

    例如修改骰子进群的文案:

    文案图片示例

    全文案为:

    text
    <{核心:骰子名字}> 已经就绪。可通过.help 查看指令列表\\n[图:data/images/sealdice.png]

    效果如下:

    文案回复图片效果

    文案变量标签

    你可能注意到,有些词条下面有这样的内容,如下图的 $t群组骰子面数

    有变量标签的文案

    文案下方的标签代表了被默认文案所使用的特殊变量,你可以使用 {变量名} 来插入他们,例如 {$t群组骰子面数}

    除此之外,有些变量可以在所有文案中使用,具体列表可以见 进阶 - 内置脚本语言

    在一个文案中使用另一个文案

    所有的自定义文案都可以嵌套使用,例如:

    text
    这里是{核心:骰子名字},我是一个示例

    默认会被解析为:

    text
    这里是海豹,我是一个示例

    危险:禁止递归嵌套!

    千万不要递归嵌套,会发生很糟糕的事情!

    自定义文案引用牌堆

    对于想要在自定义文案或自定义回复中引用牌堆的骰主,可使用 #{DRAW-关键词} 进行调用。

    文案常见问题

    骰子进群和成为好友的问候语是哪个?

    核心:骰子进群

    核心:骰子成为好友

    更复杂的文案设置

    • 我希望能根据骰点结果显示不同的文案,要怎么实现?

    • 我希望骰子能有多套回复词,要如何设置?

    • ……

    更复杂的文案设置涉及到逻辑的编写,见 进阶 - 编写复杂文案

    ',76))])}const N=c(k,[["render",f]]);export{B as __pageData,N as default}; diff --git a/assets/config_deck.md.tcM1vhGg.js b/assets/config_deck.md.tcM1vhGg.js new file mode 100644 index 000000000..af113c7eb --- /dev/null +++ b/assets/config_deck.md.tcM1vhGg.js @@ -0,0 +1,2 @@ +import{_ as e,c as t,a6 as s,o}from"./chunks/framework.B1keMFNq.js";const c="/sealdice-manual-next/assets/deck-ui.DKzN0h-f.png",l="/sealdice-manual-next/assets/deck-new-features.vhmgDyTa.png",d="/sealdice-manual-next/assets/deck-diff.C0GgnssI.png",k=JSON.parse('{"title":"牌堆","description":"","frontmatter":{"lang":"zh-cn","title":"牌堆"},"headers":[],"relativePath":"config/deck.md","filePath":"config/deck.md","lastUpdated":1722215116000}'),i={name:"config/deck.md"};function p(r,a,n,h,u,m){return o(),t("div",null,a[0]||(a[0]=[s('

    牌堆

    本节内容

    本节将介绍牌堆功能,请善用侧边栏和搜索,按需阅读文档。

    牌堆是什么?

    「牌堆」是一组有名字的文本,你可以把它想象成一组扑克牌,通过 .draw 命令来随机抽取其中的内容发送。为了便于骰子读取增加相应的说明内容,牌堆以某种结构化的格式保存成文件。

    提示:牌堆

    牌堆以 json yamltoml 格式组织起来,但其本质只是一段文本,只是编写需要遵循对应的结构方便读取。

    获取牌堆

    你可以在 牌堆仓库 或官方群的群文件中找到其他骰主分享的牌堆。

    提示:无法访问仓库?

    仓库位于 GitHub,访问时请确认你的网络状况。

    怎么上传牌堆到骰子?怎么管理牌堆?

    点击海豹 UI 界面的「扩展功能 - 牌堆管理」选项,你就可以进入牌堆的管理页面。

    牌堆管理

    可以看见有一个「上传牌堆」按钮,点击它选择本地的牌堆文件上传后即可读取牌堆。

    在上图中已经有一个名为「常规抽取与放回抽取示例」牌堆被读取到了,它的版本号是 1.1,格式是 json,其他信息也相应展示。

    你可以通过「删除」按钮来删掉对应的牌堆。

    提示:重载牌堆

    新增/删除牌堆通常会自动重载,但如果出现牌堆未更新等情况时,可以手动点击「重载牌堆」按钮进行刷新。

    怎么使用牌堆?

    在上面的「常规抽取与放回抽取示例」中,我们可以看见有名为 常规抽取 放回抽取 的两个牌组。可以使用 .draw 命令来抽取它们。

    text
    .draw 常规抽取
    +.draw 放回抽取

    对于想要在自定义文案或自定义回复中引用牌堆的骰主,可使用 #{DRAW-常规抽取} 进行调用。

    更多牌堆命令,见 使用 - 扩展:牌堆 自定义回复

    牌堆更新与云牌堆

    在加载某些牌堆之后,你可能会发现一些牌堆拥有特殊的功能:

    带有更新和云内容的牌堆示例

    牌堆更新

    一些牌堆作者为牌堆提供了更新链接,方便你快速获取最新的牌堆内容。

    点击「更新」按钮后会取获取最新的牌堆,随后弹出获取到的新牌堆与当前牌堆的对比:

    牌堆对比

    对比弹窗的右上角可以控制显示的样式,如勾选「折叠无变更」可以收起过长的内容。

    确认牌堆的更新内容之后,点击「确认更新」即可升级到最新的牌堆。

    牌堆云端内容

    一些牌堆作者为牌堆提供了云端内容,这意味着这个牌堆在抽取时,可能会去拉取远程内容作为牌堆项。

    所有含有云端内容的牌堆,海豹 UI 都会给出「提供云端内容」的提示。

    注意:云端内容

    牌堆作者可以实时调整云端内容,可能存在风险,请自行考虑是否使用这样的牌堆。

    如何编写牌堆?

    进阶 - 编写牌堆

    ',35)]))}const f=e(i,[["render",p]]);export{k as __pageData,f as default}; diff --git a/assets/config_deck.md.tcM1vhGg.lean.js b/assets/config_deck.md.tcM1vhGg.lean.js new file mode 100644 index 000000000..af113c7eb --- /dev/null +++ b/assets/config_deck.md.tcM1vhGg.lean.js @@ -0,0 +1,2 @@ +import{_ as e,c as t,a6 as s,o}from"./chunks/framework.B1keMFNq.js";const c="/sealdice-manual-next/assets/deck-ui.DKzN0h-f.png",l="/sealdice-manual-next/assets/deck-new-features.vhmgDyTa.png",d="/sealdice-manual-next/assets/deck-diff.C0GgnssI.png",k=JSON.parse('{"title":"牌堆","description":"","frontmatter":{"lang":"zh-cn","title":"牌堆"},"headers":[],"relativePath":"config/deck.md","filePath":"config/deck.md","lastUpdated":1722215116000}'),i={name:"config/deck.md"};function p(r,a,n,h,u,m){return o(),t("div",null,a[0]||(a[0]=[s('

    牌堆

    本节内容

    本节将介绍牌堆功能,请善用侧边栏和搜索,按需阅读文档。

    牌堆是什么?

    「牌堆」是一组有名字的文本,你可以把它想象成一组扑克牌,通过 .draw 命令来随机抽取其中的内容发送。为了便于骰子读取增加相应的说明内容,牌堆以某种结构化的格式保存成文件。

    提示:牌堆

    牌堆以 json yamltoml 格式组织起来,但其本质只是一段文本,只是编写需要遵循对应的结构方便读取。

    获取牌堆

    你可以在 牌堆仓库 或官方群的群文件中找到其他骰主分享的牌堆。

    提示:无法访问仓库?

    仓库位于 GitHub,访问时请确认你的网络状况。

    怎么上传牌堆到骰子?怎么管理牌堆?

    点击海豹 UI 界面的「扩展功能 - 牌堆管理」选项,你就可以进入牌堆的管理页面。

    牌堆管理

    可以看见有一个「上传牌堆」按钮,点击它选择本地的牌堆文件上传后即可读取牌堆。

    在上图中已经有一个名为「常规抽取与放回抽取示例」牌堆被读取到了,它的版本号是 1.1,格式是 json,其他信息也相应展示。

    你可以通过「删除」按钮来删掉对应的牌堆。

    提示:重载牌堆

    新增/删除牌堆通常会自动重载,但如果出现牌堆未更新等情况时,可以手动点击「重载牌堆」按钮进行刷新。

    怎么使用牌堆?

    在上面的「常规抽取与放回抽取示例」中,我们可以看见有名为 常规抽取 放回抽取 的两个牌组。可以使用 .draw 命令来抽取它们。

    text
    .draw 常规抽取
    +.draw 放回抽取

    对于想要在自定义文案或自定义回复中引用牌堆的骰主,可使用 #{DRAW-常规抽取} 进行调用。

    更多牌堆命令,见 使用 - 扩展:牌堆 自定义回复

    牌堆更新与云牌堆

    在加载某些牌堆之后,你可能会发现一些牌堆拥有特殊的功能:

    带有更新和云内容的牌堆示例

    牌堆更新

    一些牌堆作者为牌堆提供了更新链接,方便你快速获取最新的牌堆内容。

    点击「更新」按钮后会取获取最新的牌堆,随后弹出获取到的新牌堆与当前牌堆的对比:

    牌堆对比

    对比弹窗的右上角可以控制显示的样式,如勾选「折叠无变更」可以收起过长的内容。

    确认牌堆的更新内容之后,点击「确认更新」即可升级到最新的牌堆。

    牌堆云端内容

    一些牌堆作者为牌堆提供了云端内容,这意味着这个牌堆在抽取时,可能会去拉取远程内容作为牌堆项。

    所有含有云端内容的牌堆,海豹 UI 都会给出「提供云端内容」的提示。

    注意:云端内容

    牌堆作者可以实时调整云端内容,可能存在风险,请自行考虑是否使用这样的牌堆。

    如何编写牌堆?

    进阶 - 编写牌堆

    ',35)]))}const f=e(i,[["render",p]]);export{k as __pageData,f as default}; diff --git a/assets/config_helpdoc.md.Ci5_xXiq.js b/assets/config_helpdoc.md.Ci5_xXiq.js new file mode 100644 index 000000000..6556725bb --- /dev/null +++ b/assets/config_helpdoc.md.Ci5_xXiq.js @@ -0,0 +1 @@ +import{_ as l,c as i,a6 as p,j as t,a as e,G as s,B as r,o as d}from"./chunks/framework.B1keMFNq.js";const n="/sealdice-manual-next/assets/helpdoc-ui.BSAvcQ-L.png",c="/sealdice-manual-next/assets/helpdoc-upload.vCwM61uF.png",h="/sealdice-manual-next/assets/helpdoc-edit-group.0i3M9SvD.png",m="/sealdice-manual-next/assets/helpdoc-delete.YxqErX-u.png",u="/sealdice-manual-next/assets/helpdoc-itemlist.lVEcsDO6.png",D=JSON.parse('{"title":"帮助文档","description":"","frontmatter":{"lang":"zh-cn","title":"帮助文档"},"headers":[],"relativePath":"config/helpdoc.md","filePath":"config/helpdoc.md","lastUpdated":1712309998000}'),b={name:"config/helpdoc.md"},f={id:"为分组添加别名",tabindex:"-1"};function x(g,a,k,q,v,P){const o=r("Badge");return d(),i("div",null,[a[7]||(a[7]=p('

    帮助文档

    本节内容

    本节将介绍帮助文档功能,请善用侧边栏和搜索,按需阅读文档。

    什么是帮助文档?

    「帮助文档」是提供给骰子使用的查询资料,一般用于各种规则的资料查询,也可用于编写骰子的使用帮助。

    获取帮助文档

    你可以在 帮助文档仓库 或官方群的群文件中找到其他骰主分享的帮助文档。

    提示:无法访问仓库?

    仓库位于 GitHub,访问时请确认你的网络状况。

    海豹目前可以健康食用的 helpdoc 格式为 json 以及 xlsx,其中更多使用后者来编写资料查询文档。

    海豹官方安装包中也默认提供了 CoC 和 D&D 的资料查询文档,无需额外下载即可使用相关内容搜索。

    如何使用帮助文档?

    当你在帮助文档中写下 词条A 后,通过 .help 词条A 即可返回对应词条内容。

    对于资料查询,更建议使用 .find 来搜索词条内容。

    使用 - 核心指令

    如何管理帮助文档?

    点击海豹 UI 界面的「扩展功能 - 帮助文档」选项,你就可以进入帮助文档的管理页面。

    帮助文档管理

    我们可以看到默认置入的 CoC 与 D&D 的资料文档已经在列表中展示出来了。

    帮助文档列表以文件树的形式展示。文件夹内部的文档在一级文件夹下平铺展示,最外层的 一级文件夹名将作为其中所有文档的分组名,用于精确控制查询范围的分组。

    ',18)),t("p",null,[a[0]||(a[0]=e("从 ")),s(o,{type:"tip",text:"v1.4.2"}),a[1]||(a[1]=e(" 版本起,支持通过指令在每个群组中设置默认搜索分组。"))]),a[8]||(a[8]=p('

    详见 使用 - 核心指令

    修改帮助文档后,需要点击「重载帮助文档」来刷新。

    提示:重载帮助文档

    帮助文档的文本量较大,重载过程需要一定时间(通常为几分钟,与文档数量、机器性能有关)。在重载期间,搜索功能会暂时不可用,所以建议在骰子使用的低峰期进行重载。

    上传帮助文档

    点击「上传」按钮,即可弹出帮助文档的上传框:

    帮助文档的上传

    「分组」即是一级文件夹,可以选择已有的分组,也可手动填写新的分组名来创建文件夹。

    选择分组和相应文档后,点击「上传」即可将文档上传至骰子。

    提示:默认分组

    分组选择中存在一个「默认」分组,代表位于文档根目录的帮助文档位置,和一级文件夹同级。

    非常不建议你将文档放在这个文件夹中进行管理。 对指定分组的搜索需要有意义的分组名。

    ',9)),t("h3",f,[a[2]||(a[2]=e("为分组添加别名 ")),s(o,{type:"tip",text:"v1.4.2"}),a[3]||(a[3]=e()),a[4]||(a[4]=t("a",{class:"header-anchor",href:"#为分组添加别名","aria-label":'Permalink to "为分组添加别名 "'},"​",-1))]),t("p",null,[a[5]||(a[5]=e("从 ")),s(o,{type:"tip",text:"v1.4.2"}),a[6]||(a[6]=e(" 版本起,你可以为每个分组添加若干别名。"))]),a[9]||(a[9]=p('

    帮助文档分组别名

    点击页面上的「设置」按钮,将列出现有的所有分组和它们的别名,你可按需要进行编辑。

    删除帮助文档

    如需删除某些帮助文档,勾选对应文档前的选框后点击「删除所选」,即可批量删除帮助文档。

    尝试删除帮助文档

    查看帮助文档词条

    切换标签页到「词条」,即可浏览当前已经加载的帮助文档词条。

    帮助文档词条

    通过筛选可以快速查找到相应的词条内容。

    如何编写帮助文档?

    进阶 - 编写帮助文档

    ',11))])}const _=l(b,[["render",x]]);export{D as __pageData,_ as default}; diff --git a/assets/config_helpdoc.md.Ci5_xXiq.lean.js b/assets/config_helpdoc.md.Ci5_xXiq.lean.js new file mode 100644 index 000000000..6556725bb --- /dev/null +++ b/assets/config_helpdoc.md.Ci5_xXiq.lean.js @@ -0,0 +1 @@ +import{_ as l,c as i,a6 as p,j as t,a as e,G as s,B as r,o as d}from"./chunks/framework.B1keMFNq.js";const n="/sealdice-manual-next/assets/helpdoc-ui.BSAvcQ-L.png",c="/sealdice-manual-next/assets/helpdoc-upload.vCwM61uF.png",h="/sealdice-manual-next/assets/helpdoc-edit-group.0i3M9SvD.png",m="/sealdice-manual-next/assets/helpdoc-delete.YxqErX-u.png",u="/sealdice-manual-next/assets/helpdoc-itemlist.lVEcsDO6.png",D=JSON.parse('{"title":"帮助文档","description":"","frontmatter":{"lang":"zh-cn","title":"帮助文档"},"headers":[],"relativePath":"config/helpdoc.md","filePath":"config/helpdoc.md","lastUpdated":1712309998000}'),b={name:"config/helpdoc.md"},f={id:"为分组添加别名",tabindex:"-1"};function x(g,a,k,q,v,P){const o=r("Badge");return d(),i("div",null,[a[7]||(a[7]=p('

    帮助文档

    本节内容

    本节将介绍帮助文档功能,请善用侧边栏和搜索,按需阅读文档。

    什么是帮助文档?

    「帮助文档」是提供给骰子使用的查询资料,一般用于各种规则的资料查询,也可用于编写骰子的使用帮助。

    获取帮助文档

    你可以在 帮助文档仓库 或官方群的群文件中找到其他骰主分享的帮助文档。

    提示:无法访问仓库?

    仓库位于 GitHub,访问时请确认你的网络状况。

    海豹目前可以健康食用的 helpdoc 格式为 json 以及 xlsx,其中更多使用后者来编写资料查询文档。

    海豹官方安装包中也默认提供了 CoC 和 D&D 的资料查询文档,无需额外下载即可使用相关内容搜索。

    如何使用帮助文档?

    当你在帮助文档中写下 词条A 后,通过 .help 词条A 即可返回对应词条内容。

    对于资料查询,更建议使用 .find 来搜索词条内容。

    使用 - 核心指令

    如何管理帮助文档?

    点击海豹 UI 界面的「扩展功能 - 帮助文档」选项,你就可以进入帮助文档的管理页面。

    帮助文档管理

    我们可以看到默认置入的 CoC 与 D&D 的资料文档已经在列表中展示出来了。

    帮助文档列表以文件树的形式展示。文件夹内部的文档在一级文件夹下平铺展示,最外层的 一级文件夹名将作为其中所有文档的分组名,用于精确控制查询范围的分组。

    ',18)),t("p",null,[a[0]||(a[0]=e("从 ")),s(o,{type:"tip",text:"v1.4.2"}),a[1]||(a[1]=e(" 版本起,支持通过指令在每个群组中设置默认搜索分组。"))]),a[8]||(a[8]=p('

    详见 使用 - 核心指令

    修改帮助文档后,需要点击「重载帮助文档」来刷新。

    提示:重载帮助文档

    帮助文档的文本量较大,重载过程需要一定时间(通常为几分钟,与文档数量、机器性能有关)。在重载期间,搜索功能会暂时不可用,所以建议在骰子使用的低峰期进行重载。

    上传帮助文档

    点击「上传」按钮,即可弹出帮助文档的上传框:

    帮助文档的上传

    「分组」即是一级文件夹,可以选择已有的分组,也可手动填写新的分组名来创建文件夹。

    选择分组和相应文档后,点击「上传」即可将文档上传至骰子。

    提示:默认分组

    分组选择中存在一个「默认」分组,代表位于文档根目录的帮助文档位置,和一级文件夹同级。

    非常不建议你将文档放在这个文件夹中进行管理。 对指定分组的搜索需要有意义的分组名。

    ',9)),t("h3",f,[a[2]||(a[2]=e("为分组添加别名 ")),s(o,{type:"tip",text:"v1.4.2"}),a[3]||(a[3]=e()),a[4]||(a[4]=t("a",{class:"header-anchor",href:"#为分组添加别名","aria-label":'Permalink to "为分组添加别名 "'},"​",-1))]),t("p",null,[a[5]||(a[5]=e("从 ")),s(o,{type:"tip",text:"v1.4.2"}),a[6]||(a[6]=e(" 版本起,你可以为每个分组添加若干别名。"))]),a[9]||(a[9]=p('

    帮助文档分组别名

    点击页面上的「设置」按钮,将列出现有的所有分组和它们的别名,你可按需要进行编辑。

    删除帮助文档

    如需删除某些帮助文档,勾选对应文档前的选框后点击「删除所选」,即可批量删除帮助文档。

    尝试删除帮助文档

    查看帮助文档词条

    切换标签页到「词条」,即可浏览当前已经加载的帮助文档词条。

    帮助文档词条

    通过筛选可以快速查找到相应的词条内容。

    如何编写帮助文档?

    进阶 - 编写帮助文档

    ',11))])}const _=l(b,[["render",x]]);export{D as __pageData,_ as default}; diff --git a/assets/config_jsscript.md.CpPpN3dT.js b/assets/config_jsscript.md.CpPpN3dT.js new file mode 100644 index 000000000..140119834 --- /dev/null +++ b/assets/config_jsscript.md.CpPpN3dT.js @@ -0,0 +1 @@ +import{_ as t,c as e,a6 as r,o as s}from"./chunks/framework.B1keMFNq.js";const i="/sealdice-manual-next/assets/jsscript-ui.QtQ8fMZh.png",p="/sealdice-manual-next/assets/jsscript-list.BWWdfHUL.png",c="/sealdice-manual-next/assets/jsscrpit-console.CRzrpQ_X.png",J=JSON.parse('{"title":"JavaScript 插件","description":"","frontmatter":{"lang":"zh-cn","title":"JavaScript 插件"},"headers":[],"relativePath":"config/jsscript.md","filePath":"config/jsscript.md","lastUpdated":1715601883000}'),o={name:"config/jsscript.md"};function l(n,a,h,d,m,u){return s(),e("div",null,a[0]||(a[0]=[r('

    JavaScript 插件

    本节内容

    本节将介绍 JavaScript 插件功能,请善用侧边栏和搜索,按需阅读文档。

    JavaScript 插件是什么

    为了给有能力的用户提供更大的自定义空间,海豹核心支持使用 JavaScript 语言编写扩展插件。

    JavaScript

    JavaScript(JS)是一门基于原型和头等函数的多范式高级解释型编程语言,它支持面向对象程序设计、指令式编程和函数式编程。它提供方法来操控文本、数组、日期以及正则表达式等。

    —— WIKI

    获取 JS 插件

    你可以在 JS 插件仓库 或官方群的群文件中找到其他骰主分享的 JS 插件。

    提示:无法访问仓库?

    仓库位于 GitHub,访问时请确认你的网络状况。

    如何安装和管理 JS 插件?

    点击海豹 UI 界面的「扩展功能-JS 扩展」选项,你就可以进入 JS 插件的管理页面。

    JS 扩展

    如果左上角的开关未打开,可以点击启用 JS 插件的支持。可以看见,在管理界面中有多个标签页,下面将一一介绍。

    插件列表

    在「插件列表」页,可以查看当前的 JS 插件列表并进行管理。

    JS 插件列表

    在每一个插件名前都有一个开关,用来单独控制这个插件是否开启。

    点击「上传插件」,选择获取的插件文件,即可上传到海豹核心。在插件的右侧有「删除」按钮来删除不想要的插件。

    在对插件进行调整后,需要点击「重载 JS」来使修改生效。

    插件的更新

    一些插件作者为扩展提供了更新链接,方便你快速获取最新的插件。

    点击「更新」按钮后会取获取最新的插件数据,随后弹出获取到的新数据与当前插件数据的对比:

    对比弹窗的右上角可以控制显示的样式,如勾选「折叠无变更」可以收起过长的内容。

    确认插件的更新内容之后,点击「确认更新」即可升级到最新。

    控制台

    为了方便插件作者编写插件,海豹核心提供了「控制台」,方便直接测试代码。

    JS 插件控制台

    在代码框中编写代码,点击「执行代码」即可运行,运行结果将显示在下方。

    插件设置

    进阶 - 编写 JS 插件 - 注册插件配置项

    如何使用 JS 插件?

    不同的 JS 插件的使用方法不同,不过一般都是提供了一些 . 开头的命令,可以查看相应扩展的说明来获取使用帮助。

    如何编写 JS 插件?

    进阶 - 编写 JS 插件

    ',33)]))}const f=t(o,[["render",l]]);export{J as __pageData,f as default}; diff --git a/assets/config_jsscript.md.CpPpN3dT.lean.js b/assets/config_jsscript.md.CpPpN3dT.lean.js new file mode 100644 index 000000000..140119834 --- /dev/null +++ b/assets/config_jsscript.md.CpPpN3dT.lean.js @@ -0,0 +1 @@ +import{_ as t,c as e,a6 as r,o as s}from"./chunks/framework.B1keMFNq.js";const i="/sealdice-manual-next/assets/jsscript-ui.QtQ8fMZh.png",p="/sealdice-manual-next/assets/jsscript-list.BWWdfHUL.png",c="/sealdice-manual-next/assets/jsscrpit-console.CRzrpQ_X.png",J=JSON.parse('{"title":"JavaScript 插件","description":"","frontmatter":{"lang":"zh-cn","title":"JavaScript 插件"},"headers":[],"relativePath":"config/jsscript.md","filePath":"config/jsscript.md","lastUpdated":1715601883000}'),o={name:"config/jsscript.md"};function l(n,a,h,d,m,u){return s(),e("div",null,a[0]||(a[0]=[r('

    JavaScript 插件

    本节内容

    本节将介绍 JavaScript 插件功能,请善用侧边栏和搜索,按需阅读文档。

    JavaScript 插件是什么

    为了给有能力的用户提供更大的自定义空间,海豹核心支持使用 JavaScript 语言编写扩展插件。

    JavaScript

    JavaScript(JS)是一门基于原型和头等函数的多范式高级解释型编程语言,它支持面向对象程序设计、指令式编程和函数式编程。它提供方法来操控文本、数组、日期以及正则表达式等。

    —— WIKI

    获取 JS 插件

    你可以在 JS 插件仓库 或官方群的群文件中找到其他骰主分享的 JS 插件。

    提示:无法访问仓库?

    仓库位于 GitHub,访问时请确认你的网络状况。

    如何安装和管理 JS 插件?

    点击海豹 UI 界面的「扩展功能-JS 扩展」选项,你就可以进入 JS 插件的管理页面。

    JS 扩展

    如果左上角的开关未打开,可以点击启用 JS 插件的支持。可以看见,在管理界面中有多个标签页,下面将一一介绍。

    插件列表

    在「插件列表」页,可以查看当前的 JS 插件列表并进行管理。

    JS 插件列表

    在每一个插件名前都有一个开关,用来单独控制这个插件是否开启。

    点击「上传插件」,选择获取的插件文件,即可上传到海豹核心。在插件的右侧有「删除」按钮来删除不想要的插件。

    在对插件进行调整后,需要点击「重载 JS」来使修改生效。

    插件的更新

    一些插件作者为扩展提供了更新链接,方便你快速获取最新的插件。

    点击「更新」按钮后会取获取最新的插件数据,随后弹出获取到的新数据与当前插件数据的对比:

    对比弹窗的右上角可以控制显示的样式,如勾选「折叠无变更」可以收起过长的内容。

    确认插件的更新内容之后,点击「确认更新」即可升级到最新。

    控制台

    为了方便插件作者编写插件,海豹核心提供了「控制台」,方便直接测试代码。

    JS 插件控制台

    在代码框中编写代码,点击「执行代码」即可运行,运行结果将显示在下方。

    插件设置

    进阶 - 编写 JS 插件 - 注册插件配置项

    如何使用 JS 插件?

    不同的 JS 插件的使用方法不同,不过一般都是提供了一些 . 开头的命令,可以查看相应扩展的说明来获取使用帮助。

    如何编写 JS 插件?

    进阶 - 编写 JS 插件

    ',33)]))}const f=t(o,[["render",l]]);export{J as __pageData,f as default}; diff --git a/assets/config_reply.md.DzvDRyaw.js b/assets/config_reply.md.DzvDRyaw.js new file mode 100644 index 000000000..98b37f1f6 --- /dev/null +++ b/assets/config_reply.md.DzvDRyaw.js @@ -0,0 +1 @@ +import{_ as d,c as u,a6 as n,j as e,G as t,a as l,w as s,B as p,o as b}from"./chunks/framework.B1keMFNq.js";const m="/sealdice-manual-next/assets/reply-ui.Bzrt8V8e.png",h="/sealdice-manual-next/assets/reply-config.BhGYKmT-.png",g="/sealdice-manual-next/assets/reply-file.C6hW1cv0.png",k="/sealdice-manual-next/assets/reply-file-disable.DQsCnOPj.png",f="/sealdice-manual-next/assets/reply-add.GiF4xI17.png",w=JSON.parse('{"title":"自定义回复","description":"","frontmatter":{"lang":"zh-cn","title":"自定义回复"},"headers":[],"relativePath":"config/reply.md","filePath":"config/reply.md","lastUpdated":1728702230000}'),q={name:"config/reply.md"},v={class:"info custom-block"},x={id:"公共条件",tabindex:"-1"},P={class:"info custom-block"};function _(y,a,B,T,C,N){const o=p("ChatBox"),r=p("Badge"),i=p("PluginTabsTab"),c=p("PluginTabs");return b(),u("div",null,[a[8]||(a[8]=n('

    自定义回复

    本节内容

    本节将介绍自定义回复功能,请善用侧边栏和搜索,按需阅读文档。

    什么是自定义回复?

    • 我希望让骰子能回复用户发送的早安、午安、晚安,应该怎么做?
    • 我不会 JavaScript,有没有更简单的方式给骰子编写功能呢?
    • ……

    如果希望骰子能对某些关键词做出响应,最简单的方式就是使用「自定义回复」功能。

    ',5)),e("div",v,[a[0]||(a[0]=e("p",{class:"custom-block-title"},"示例",-1)),t(o,{messages:[{content:"v我50",send:!0},{content:"¥50"}]})]),a[9]||(a[9]=n('

    「自定义回复」是海豹核心提供的一种功能扩展方式。它能够在收到的消息符合一定条件时,做出灵活的回应。

    自定义回复的形式自由,触发机制多样(关键字、正则表达式等),并且能配合海豹核心的变量系统与牌堆功能使用。无论你只是想增加简单的回复,还是需要复杂的判断和响应,都可以尝试使用自定义回复。

    在哪编写自定义回复?

    点击海豹 UI 界面的「扩展功能 - 自定义回复」选项,你就可以进入「自定义回复」的设置页面。

    自定义回复页

    默认情况下,自定义回复功能是被关闭的,你可以点击 页面左上角的开关 打开这一功能,在同意许可协议后,你就可以看到自定义回复的设置页面,下面我们将一一介绍其中的功能。

    自定义回复设置页

    在页面的上半部分,你可以看见一些帮助信息,阅读它们也能为编写自定义回复带来帮助。

    当前回复文件

    自定义回复文件

    「自定义回复」支持多个设置文件,你可以在下拉框选择进行切换。默认状态下,会有一个名为 reply.yaml 的初始自定义回复文件,可以直接在该文件中进行自定义回复的编写。

    你可以分别控制回复文件的启用与否。启用了的回复文件会显示「已启用」,如果显示「未启用」,可以点击它启用该文件。

    未启用的自定义回复文件

    对于每一个自定义回复文件,都可以进行「删除」和「下载」操作,方便你管理和分享它们。

    在编写过程中,可以勾选「开启回复调试日志」项,来为你编写回复提供更多有用信息。

    危险:谨慎删除!

    点击「删除」时,会弹出二次确认框。一旦点击确认,删除的文件将无法找回,务必在删除时小心确认。

    可以选择点击「已启用」按钮禁用它来代替删除。

    新建/导入自定义回复文件

    在当前文件的右侧有几个按钮,它们是快速创建新自定义回复的不同方式:

    • 新建:创建一个新的自定义回复文件。在你想要将不同的回复区分开,方便管理的时候,可以新建一个文件;
    • 上传:直接上传 .yaml 格式的自定义回复文件,通常来说这是其他人分享给你的。

    获取自定义回复文件

    你可以在 自定义回复仓库 或官方群的群文件中找到其他骰主分享的文件,使用「上传」功能导入它们。

    提示:无法访问仓库?

    仓库位于 GitHub,访问时请确认你的网络状况。

    ',22)),e("h3",x,[a[1]||(a[1]=l("公共条件 ")),t(r,{type:"tip",text:"v1.4.6"}),a[2]||(a[2]=l()),a[3]||(a[3]=e("a",{class:"header-anchor",href:"#公共条件","aria-label":'Permalink to "公共条件 "'},"​",-1))]),e("p",null,[a[4]||(a[4]=l("从 ")),t(r,{type:"tip",text:"v1.4.6"}),a[5]||(a[5]=l(" 版本开始,在当前文件信息的下面、本文件所有回复项目上方新增了「公共条件」选项。"))]),a[10]||(a[10]=n('

    公共条件属于当前自定义回复文件,而不属于任何一个回复项。每一项公共条件是一个逻辑判断,它的含义与 单个回复项的条件 相同。

    在判定一个自定义回复是否能执行时,会首先判断文件的公共条件是否全部满足;如果全部满足,才会依次判断每个回复项的条件;否则,将跳过本文件内的所有回复项。

    设置回复项

    在自定义回复页的左下角有一个「添加一项」按钮,点击可以向当前文件中添加一条回复项。

    添加回复项

    每一个自定义回复项都包括两个部分:「条件」「结果」,分别对应着该回复项的触发条件和骰子的回复动作。

    在回复项的左上角可以控制该项的启用与否,右上角可以删除这一条回复项。当回复项较多的时候,可以点击「收缩」来将不重要的项折叠起来。

    提示:随时保存修改

    记得随时保存自己的修改,防止改动内容丢失。

    回复项的条件

    在回复项的左上角是该项的匹配模式,可以理解为当什么情况下会触发这一条回复项。目前提供了三种匹配模式:

    • 文本匹配:即设置什么样的内容会触发这条回复项;
    • 文本长度:即当回复内容的长度满足什么条件时会触发这条回复项;
    • 表达式为真:此处不介绍,见 更复杂的回复

    回复项的条件支持多个,点击「增加」即可为该回复项增加一个条件。当回复项有多个条件时,必须同时满足所有条件 才会触发该回复项。

    提示:如何实现多个内容中任意一个均可触发回复项?

    • 我希望 v我50vme50 任意一个都能触发同样的回复,我该不会需要编写两条相同的回复项吧?

    当然不用!你可以使用文本匹配中的「任意相符」方式来实现,或者直接使用「正则匹配」方式。见 文本匹配

    文本匹配

    文本匹配支持多种方式,在内容中填写要匹配的内容,即可按设置的方式匹配触发回复项。

    • 精准匹配:当骰子收到和内容 完全一致 的消息时,触发该回复项;
    • 任意相符:收到符合任意一个内容的消息时,都能触发该回复项,如 aa|bb,则 aa 或 bb 均可触发;
    • 包含文本:消息包含此内容时触发;
    • 不含文本:消息不包含此内容时触发;
    • 模糊匹配:消息与内容相似时触发该回复项;(普通用户无需纠结什么叫相似)
    • 正则匹配:消息匹配正则表达式时触发,此处不介绍,见 更复杂的回复
    • 前缀匹配:消息以内容为开头时触发;
    • 后缀匹配:消息以此内容为结尾时触发。
    ',16)),e("div",P,[a[6]||(a[6]=e("p",{class:"custom-block-title"},"「任意相符」示例",-1)),a[7]||(a[7]=e("p",null,[l("设置:任意相符,文本 "),e("code",null,"a|b"),l(",回复 "),e("code",null,"c"),l("。")],-1)),t(c,null,{default:s(()=>[t(i,{label:"输入:a"},{default:s(()=>[t(o,{messages:[{content:"a",send:!0},{content:"c"}]})]),_:1}),t(i,{label:"输入:b"},{default:s(()=>[t(o,{messages:[{content:"b",send:!0},{content:"c"}]})]),_:1}),t(i,{label:"输入:ab(不回复)"},{default:s(()=>[t(o,{messages:[{content:"ab",send:!0}]})]),_:1}),t(i,{label:"输入:a|b(不回复)"},{default:s(()=>[t(o,{messages:[{content:"a|b",send:!0}]})]),_:1}),t(i,{label:"输入:其它(不回复)"},{default:s(()=>[t(o,{messages:[{content:"114514",send:!0}]})]),_:1})]),_:1})]),a[11]||(a[11]=n('

    提示:常用方式

    「精准匹配」与「任意相符」是最常用的模式。当然,对于了解正则表达式的用户,「正则匹配」也是经常被使用的。

    文本长度

    指定字数,当消息长度「大于等于」或「小于等于」给定的字数时触发对应回复项。

    注意:注意汉字的长度

    在文本长度匹配中,一个汉字算作两个字符。如 你好 两字可以触发大于等于 4 的文本长度匹配。

    回复项的结果

    每一个回复项可以有一个或者多个「回复结果」,多个回复结果将 从上到下依次执行。点击「增加」可以新增一条结果,也可以通过「删除结果」按钮去掉对应结果。

    每一个回复结果可以有多条回复文本,结果会在这些文本中 随机抽取 一条作为结果。

    回复可以是直接的回复,也可以指定是「私聊回复」或者「群内回复」。

    提示

    回复项有几个结果,该回复项就会发送几条消息。

    回复结果延迟

    可以给回复结果设置延迟,消息将在此延迟后发送,单位是秒,可以是小数。

    注意

    QQ 消息的随机延迟仍会被加入,如果你希望保证发言顺序,记得考虑这点。

    自定义回复引用牌堆

    对于想要在自定义文案或自定义回复中引用牌堆的骰主,可使用 #{DRAW-关键词} 进行调用。

    更复杂的回复

    • 自定义回复要怎么抽取牌堆?
    • 我想控制只有私聊才触发回复,要怎样设置?
    • 我希望编写有一定逻辑的自定义回复,我要怎么做?
    • 前缀/后缀/包含等文本匹配方式不够用/出现误判,听说可以用正则匹配解决?要怎样使用呢?
    • ……

    更复杂的自定义回复编写,会涉及到海豹提供的其他系统,如牌堆、内置脚本语法、变量机制等。也有可能要求你有其它知识的了解,如正则表达式等。

    如果你有复杂回复编写的需要,或想了解更多细节,可以跳转到 进阶 - 编写自定义回复 进行阅读。

    ',18))])}const G=d(q,[["render",_]]);export{w as __pageData,G as default}; diff --git a/assets/config_reply.md.DzvDRyaw.lean.js b/assets/config_reply.md.DzvDRyaw.lean.js new file mode 100644 index 000000000..98b37f1f6 --- /dev/null +++ b/assets/config_reply.md.DzvDRyaw.lean.js @@ -0,0 +1 @@ +import{_ as d,c as u,a6 as n,j as e,G as t,a as l,w as s,B as p,o as b}from"./chunks/framework.B1keMFNq.js";const m="/sealdice-manual-next/assets/reply-ui.Bzrt8V8e.png",h="/sealdice-manual-next/assets/reply-config.BhGYKmT-.png",g="/sealdice-manual-next/assets/reply-file.C6hW1cv0.png",k="/sealdice-manual-next/assets/reply-file-disable.DQsCnOPj.png",f="/sealdice-manual-next/assets/reply-add.GiF4xI17.png",w=JSON.parse('{"title":"自定义回复","description":"","frontmatter":{"lang":"zh-cn","title":"自定义回复"},"headers":[],"relativePath":"config/reply.md","filePath":"config/reply.md","lastUpdated":1728702230000}'),q={name:"config/reply.md"},v={class:"info custom-block"},x={id:"公共条件",tabindex:"-1"},P={class:"info custom-block"};function _(y,a,B,T,C,N){const o=p("ChatBox"),r=p("Badge"),i=p("PluginTabsTab"),c=p("PluginTabs");return b(),u("div",null,[a[8]||(a[8]=n('

    自定义回复

    本节内容

    本节将介绍自定义回复功能,请善用侧边栏和搜索,按需阅读文档。

    什么是自定义回复?

    • 我希望让骰子能回复用户发送的早安、午安、晚安,应该怎么做?
    • 我不会 JavaScript,有没有更简单的方式给骰子编写功能呢?
    • ……

    如果希望骰子能对某些关键词做出响应,最简单的方式就是使用「自定义回复」功能。

    ',5)),e("div",v,[a[0]||(a[0]=e("p",{class:"custom-block-title"},"示例",-1)),t(o,{messages:[{content:"v我50",send:!0},{content:"¥50"}]})]),a[9]||(a[9]=n('

    「自定义回复」是海豹核心提供的一种功能扩展方式。它能够在收到的消息符合一定条件时,做出灵活的回应。

    自定义回复的形式自由,触发机制多样(关键字、正则表达式等),并且能配合海豹核心的变量系统与牌堆功能使用。无论你只是想增加简单的回复,还是需要复杂的判断和响应,都可以尝试使用自定义回复。

    在哪编写自定义回复?

    点击海豹 UI 界面的「扩展功能 - 自定义回复」选项,你就可以进入「自定义回复」的设置页面。

    自定义回复页

    默认情况下,自定义回复功能是被关闭的,你可以点击 页面左上角的开关 打开这一功能,在同意许可协议后,你就可以看到自定义回复的设置页面,下面我们将一一介绍其中的功能。

    自定义回复设置页

    在页面的上半部分,你可以看见一些帮助信息,阅读它们也能为编写自定义回复带来帮助。

    当前回复文件

    自定义回复文件

    「自定义回复」支持多个设置文件,你可以在下拉框选择进行切换。默认状态下,会有一个名为 reply.yaml 的初始自定义回复文件,可以直接在该文件中进行自定义回复的编写。

    你可以分别控制回复文件的启用与否。启用了的回复文件会显示「已启用」,如果显示「未启用」,可以点击它启用该文件。

    未启用的自定义回复文件

    对于每一个自定义回复文件,都可以进行「删除」和「下载」操作,方便你管理和分享它们。

    在编写过程中,可以勾选「开启回复调试日志」项,来为你编写回复提供更多有用信息。

    危险:谨慎删除!

    点击「删除」时,会弹出二次确认框。一旦点击确认,删除的文件将无法找回,务必在删除时小心确认。

    可以选择点击「已启用」按钮禁用它来代替删除。

    新建/导入自定义回复文件

    在当前文件的右侧有几个按钮,它们是快速创建新自定义回复的不同方式:

    • 新建:创建一个新的自定义回复文件。在你想要将不同的回复区分开,方便管理的时候,可以新建一个文件;
    • 上传:直接上传 .yaml 格式的自定义回复文件,通常来说这是其他人分享给你的。

    获取自定义回复文件

    你可以在 自定义回复仓库 或官方群的群文件中找到其他骰主分享的文件,使用「上传」功能导入它们。

    提示:无法访问仓库?

    仓库位于 GitHub,访问时请确认你的网络状况。

    ',22)),e("h3",x,[a[1]||(a[1]=l("公共条件 ")),t(r,{type:"tip",text:"v1.4.6"}),a[2]||(a[2]=l()),a[3]||(a[3]=e("a",{class:"header-anchor",href:"#公共条件","aria-label":'Permalink to "公共条件 "'},"​",-1))]),e("p",null,[a[4]||(a[4]=l("从 ")),t(r,{type:"tip",text:"v1.4.6"}),a[5]||(a[5]=l(" 版本开始,在当前文件信息的下面、本文件所有回复项目上方新增了「公共条件」选项。"))]),a[10]||(a[10]=n('

    公共条件属于当前自定义回复文件,而不属于任何一个回复项。每一项公共条件是一个逻辑判断,它的含义与 单个回复项的条件 相同。

    在判定一个自定义回复是否能执行时,会首先判断文件的公共条件是否全部满足;如果全部满足,才会依次判断每个回复项的条件;否则,将跳过本文件内的所有回复项。

    设置回复项

    在自定义回复页的左下角有一个「添加一项」按钮,点击可以向当前文件中添加一条回复项。

    添加回复项

    每一个自定义回复项都包括两个部分:「条件」「结果」,分别对应着该回复项的触发条件和骰子的回复动作。

    在回复项的左上角可以控制该项的启用与否,右上角可以删除这一条回复项。当回复项较多的时候,可以点击「收缩」来将不重要的项折叠起来。

    提示:随时保存修改

    记得随时保存自己的修改,防止改动内容丢失。

    回复项的条件

    在回复项的左上角是该项的匹配模式,可以理解为当什么情况下会触发这一条回复项。目前提供了三种匹配模式:

    • 文本匹配:即设置什么样的内容会触发这条回复项;
    • 文本长度:即当回复内容的长度满足什么条件时会触发这条回复项;
    • 表达式为真:此处不介绍,见 更复杂的回复

    回复项的条件支持多个,点击「增加」即可为该回复项增加一个条件。当回复项有多个条件时,必须同时满足所有条件 才会触发该回复项。

    提示:如何实现多个内容中任意一个均可触发回复项?

    • 我希望 v我50vme50 任意一个都能触发同样的回复,我该不会需要编写两条相同的回复项吧?

    当然不用!你可以使用文本匹配中的「任意相符」方式来实现,或者直接使用「正则匹配」方式。见 文本匹配

    文本匹配

    文本匹配支持多种方式,在内容中填写要匹配的内容,即可按设置的方式匹配触发回复项。

    • 精准匹配:当骰子收到和内容 完全一致 的消息时,触发该回复项;
    • 任意相符:收到符合任意一个内容的消息时,都能触发该回复项,如 aa|bb,则 aa 或 bb 均可触发;
    • 包含文本:消息包含此内容时触发;
    • 不含文本:消息不包含此内容时触发;
    • 模糊匹配:消息与内容相似时触发该回复项;(普通用户无需纠结什么叫相似)
    • 正则匹配:消息匹配正则表达式时触发,此处不介绍,见 更复杂的回复
    • 前缀匹配:消息以内容为开头时触发;
    • 后缀匹配:消息以此内容为结尾时触发。
    ',16)),e("div",P,[a[6]||(a[6]=e("p",{class:"custom-block-title"},"「任意相符」示例",-1)),a[7]||(a[7]=e("p",null,[l("设置:任意相符,文本 "),e("code",null,"a|b"),l(",回复 "),e("code",null,"c"),l("。")],-1)),t(c,null,{default:s(()=>[t(i,{label:"输入:a"},{default:s(()=>[t(o,{messages:[{content:"a",send:!0},{content:"c"}]})]),_:1}),t(i,{label:"输入:b"},{default:s(()=>[t(o,{messages:[{content:"b",send:!0},{content:"c"}]})]),_:1}),t(i,{label:"输入:ab(不回复)"},{default:s(()=>[t(o,{messages:[{content:"ab",send:!0}]})]),_:1}),t(i,{label:"输入:a|b(不回复)"},{default:s(()=>[t(o,{messages:[{content:"a|b",send:!0}]})]),_:1}),t(i,{label:"输入:其它(不回复)"},{default:s(()=>[t(o,{messages:[{content:"114514",send:!0}]})]),_:1})]),_:1})]),a[11]||(a[11]=n('

    提示:常用方式

    「精准匹配」与「任意相符」是最常用的模式。当然,对于了解正则表达式的用户,「正则匹配」也是经常被使用的。

    文本长度

    指定字数,当消息长度「大于等于」或「小于等于」给定的字数时触发对应回复项。

    注意:注意汉字的长度

    在文本长度匹配中,一个汉字算作两个字符。如 你好 两字可以触发大于等于 4 的文本长度匹配。

    回复项的结果

    每一个回复项可以有一个或者多个「回复结果」,多个回复结果将 从上到下依次执行。点击「增加」可以新增一条结果,也可以通过「删除结果」按钮去掉对应结果。

    每一个回复结果可以有多条回复文本,结果会在这些文本中 随机抽取 一条作为结果。

    回复可以是直接的回复,也可以指定是「私聊回复」或者「群内回复」。

    提示

    回复项有几个结果,该回复项就会发送几条消息。

    回复结果延迟

    可以给回复结果设置延迟,消息将在此延迟后发送,单位是秒,可以是小数。

    注意

    QQ 消息的随机延迟仍会被加入,如果你希望保证发言顺序,记得考虑这点。

    自定义回复引用牌堆

    对于想要在自定义文案或自定义回复中引用牌堆的骰主,可使用 #{DRAW-关键词} 进行调用。

    更复杂的回复

    • 自定义回复要怎么抽取牌堆?
    • 我想控制只有私聊才触发回复,要怎样设置?
    • 我希望编写有一定逻辑的自定义回复,我要怎么做?
    • 前缀/后缀/包含等文本匹配方式不够用/出现误判,听说可以用正则匹配解决?要怎样使用呢?
    • ……

    更复杂的自定义回复编写,会涉及到海豹提供的其他系统,如牌堆、内置脚本语法、变量机制等。也有可能要求你有其它知识的了解,如正则表达式等。

    如果你有复杂回复编写的需要,或想了解更多细节,可以跳转到 进阶 - 编写自定义回复 进行阅读。

    ',18))])}const G=d(q,[["render",_]]);export{w as __pageData,G as default}; diff --git a/assets/config_utilities.md.DVJfYX0b.js b/assets/config_utilities.md.DVJfYX0b.js new file mode 100644 index 000000000..151bd96ea --- /dev/null +++ b/assets/config_utilities.md.DVJfYX0b.js @@ -0,0 +1 @@ +import{_ as e,c as s,j as l,a as n,G as o,B as p,o as r}from"./chunks/framework.B1keMFNq.js";const U=JSON.parse('{"title":"辅助工具","description":"","frontmatter":{"lang":"zh-cn","title":"辅助工具"},"headers":[],"relativePath":"config/utilities.md","filePath":"config/utilities.md","lastUpdated":1723442587000}'),d={name:"config/utilities.md"},u={class:"info custom-block"},a={id:"资源管理",tabindex:"-1"};function m(f,t,x,b,v,I){const i=p("Badge");return r(),s("div",null,[t[15]||(t[15]=l("h1",{id:"辅助工具",tabindex:"-1"},[n("辅助工具 "),l("a",{class:"header-anchor",href:"#辅助工具","aria-label":'Permalink to "辅助工具"'},"​")],-1)),l("div",u,[t[4]||(t[4]=l("p",{class:"custom-block-title"},"本节内容",-1)),t[5]||(t[5]=l("p",null,"本节将介绍 WebUI 中提供的一些辅助工具。",-1)),l("p",null,[t[0]||(t[0]=n("从 ")),o(i,{type:"tip",text:"v1.4.6"}),t[1]||(t[1]=n(" 起,海豹核心添加了「资源管理」功能,与「指令测试」在 WebUI 共同归于「辅助工具」类目下。"))]),l("p",null,[t[2]||(t[2]=n("如果你使用的是 ")),o(i,{type:"tip",text:"v1.4.5"}),t[3]||(t[3]=n(" 或之前版本,你在 WebUI 只会看到单独的「指令测试」。"))])]),t[16]||(t[16]=l("h2",{id:"指令测试",tabindex:"-1"},[n("指令测试 "),l("a",{class:"header-anchor",href:"#指令测试","aria-label":'Permalink to "指令测试"'},"​")],-1)),t[17]||(t[17]=l("p",null,"你可通过指令测试功能测试你的海豹核心对于消息的反应。在指令测试中产生的角色卡等数据都会被保留,但是消息记录会随页面刷新而丢失。",-1)),l("p",null,[t[6]||(t[6]=n("从 ")),o(i,{type:"tip",text:"v1.4.6"}),t[7]||(t[7]=n(" 版本开始,指令测试界面的右上角提供一个切换开关,可以选择「私聊」或「群」模式。"))]),l("p",null,[t[8]||(t[8]=n("如果你使用的是 ")),o(i,{type:"tip",text:"v1.4.5"}),t[9]||(t[9]=n(" 或之前版本,你的指令测试只能模拟私聊。"))]),t[18]||(t[18]=l("p",null,[n("在私聊模式下,你的用户 ID 是 "),l("code",null,"UI:1001"),n("。")],-1)),t[19]||(t[19]=l("p",null,[n("在群聊模式下,群的 ID 是 "),l("code",null,"UI-Group:2001"),n(",你的用户 ID 是 "),l("code",null,"UI:1002"),n(",你在该虚拟群聊中拥有群主权限。")],-1)),l("h2",a,[t[10]||(t[10]=n("资源管理 ")),o(i,{type:"tip",text:"v1.4.6"}),t[11]||(t[11]=n()),t[12]||(t[12]=l("a",{class:"header-anchor",href:"#资源管理","aria-label":'Permalink to "资源管理 "'},"​",-1))]),l("p",null,[t[13]||(t[13]=n("从 ")),o(i,{type:"tip",text:"v1.4.6"}),t[14]||(t[14]=n(" 版本开始,海豹核心 WebUI 提供资源管理功能。"))]),t[20]||(t[20]=l("p",null,[n("你可在这个页面查看目前在 "),l("code",null,"data/images"),n(" 目录下的图片资源,在每个图片右侧提供三个按钮,供你查看大图、下载原图和删除图片文件。")],-1)),t[21]||(t[21]=l("p",null,"你也可以通过这个功能上传本地图片到海豹核心。",-1)),t[22]||(t[22]=l("p",null,"在引用图片时,请使用该页面展示的路径。",-1))])}const k=e(d,[["render",m]]);export{U as __pageData,k as default}; diff --git a/assets/config_utilities.md.DVJfYX0b.lean.js b/assets/config_utilities.md.DVJfYX0b.lean.js new file mode 100644 index 000000000..151bd96ea --- /dev/null +++ b/assets/config_utilities.md.DVJfYX0b.lean.js @@ -0,0 +1 @@ +import{_ as e,c as s,j as l,a as n,G as o,B as p,o as r}from"./chunks/framework.B1keMFNq.js";const U=JSON.parse('{"title":"辅助工具","description":"","frontmatter":{"lang":"zh-cn","title":"辅助工具"},"headers":[],"relativePath":"config/utilities.md","filePath":"config/utilities.md","lastUpdated":1723442587000}'),d={name:"config/utilities.md"},u={class:"info custom-block"},a={id:"资源管理",tabindex:"-1"};function m(f,t,x,b,v,I){const i=p("Badge");return r(),s("div",null,[t[15]||(t[15]=l("h1",{id:"辅助工具",tabindex:"-1"},[n("辅助工具 "),l("a",{class:"header-anchor",href:"#辅助工具","aria-label":'Permalink to "辅助工具"'},"​")],-1)),l("div",u,[t[4]||(t[4]=l("p",{class:"custom-block-title"},"本节内容",-1)),t[5]||(t[5]=l("p",null,"本节将介绍 WebUI 中提供的一些辅助工具。",-1)),l("p",null,[t[0]||(t[0]=n("从 ")),o(i,{type:"tip",text:"v1.4.6"}),t[1]||(t[1]=n(" 起,海豹核心添加了「资源管理」功能,与「指令测试」在 WebUI 共同归于「辅助工具」类目下。"))]),l("p",null,[t[2]||(t[2]=n("如果你使用的是 ")),o(i,{type:"tip",text:"v1.4.5"}),t[3]||(t[3]=n(" 或之前版本,你在 WebUI 只会看到单独的「指令测试」。"))])]),t[16]||(t[16]=l("h2",{id:"指令测试",tabindex:"-1"},[n("指令测试 "),l("a",{class:"header-anchor",href:"#指令测试","aria-label":'Permalink to "指令测试"'},"​")],-1)),t[17]||(t[17]=l("p",null,"你可通过指令测试功能测试你的海豹核心对于消息的反应。在指令测试中产生的角色卡等数据都会被保留,但是消息记录会随页面刷新而丢失。",-1)),l("p",null,[t[6]||(t[6]=n("从 ")),o(i,{type:"tip",text:"v1.4.6"}),t[7]||(t[7]=n(" 版本开始,指令测试界面的右上角提供一个切换开关,可以选择「私聊」或「群」模式。"))]),l("p",null,[t[8]||(t[8]=n("如果你使用的是 ")),o(i,{type:"tip",text:"v1.4.5"}),t[9]||(t[9]=n(" 或之前版本,你的指令测试只能模拟私聊。"))]),t[18]||(t[18]=l("p",null,[n("在私聊模式下,你的用户 ID 是 "),l("code",null,"UI:1001"),n("。")],-1)),t[19]||(t[19]=l("p",null,[n("在群聊模式下,群的 ID 是 "),l("code",null,"UI-Group:2001"),n(",你的用户 ID 是 "),l("code",null,"UI:1002"),n(",你在该虚拟群聊中拥有群主权限。")],-1)),l("h2",a,[t[10]||(t[10]=n("资源管理 ")),o(i,{type:"tip",text:"v1.4.6"}),t[11]||(t[11]=n()),t[12]||(t[12]=l("a",{class:"header-anchor",href:"#资源管理","aria-label":'Permalink to "资源管理 "'},"​",-1))]),l("p",null,[t[13]||(t[13]=n("从 ")),o(i,{type:"tip",text:"v1.4.6"}),t[14]||(t[14]=n(" 版本开始,海豹核心 WebUI 提供资源管理功能。"))]),t[20]||(t[20]=l("p",null,[n("你可在这个页面查看目前在 "),l("code",null,"data/images"),n(" 目录下的图片资源,在每个图片右侧提供三个按钮,供你查看大图、下载原图和删除图片文件。")],-1)),t[21]||(t[21]=l("p",null,"你也可以通过这个功能上传本地图片到海豹核心。",-1)),t[22]||(t[22]=l("p",null,"在引用图片时,请使用该页面展示的路径。",-1))])}const k=e(d,[["render",m]]);export{U as __pageData,k as default}; diff --git a/assets/custom-text-add-option.0FNaSzlW.png b/assets/custom-text-add-option.0FNaSzlW.png new file mode 100644 index 000000000..58e1a4682 Binary files /dev/null and b/assets/custom-text-add-option.0FNaSzlW.png differ diff --git a/assets/custom-text-delete-option.Crh9iJ_Z.png b/assets/custom-text-delete-option.Crh9iJ_Z.png new file mode 100644 index 000000000..3e2d1fb81 Binary files /dev/null and b/assets/custom-text-delete-option.Crh9iJ_Z.png differ diff --git a/assets/custom-text-filter.DRwGwfAH.png b/assets/custom-text-filter.DRwGwfAH.png new file mode 100644 index 000000000..2a20eb952 Binary files /dev/null and b/assets/custom-text-filter.DRwGwfAH.png differ diff --git a/assets/custom-text-great-success.CACLVCIO.png b/assets/custom-text-great-success.CACLVCIO.png new file mode 100644 index 000000000..643e4c270 Binary files /dev/null and b/assets/custom-text-great-success.CACLVCIO.png differ diff --git a/assets/custom-text-main.B9CfQdSx.png b/assets/custom-text-main.B9CfQdSx.png new file mode 100644 index 000000000..d494a19fe Binary files /dev/null and b/assets/custom-text-main.B9CfQdSx.png differ diff --git a/assets/custom-text-pic-example.mEfPZlG7.png b/assets/custom-text-pic-example.mEfPZlG7.png new file mode 100644 index 000000000..43a7db043 Binary files /dev/null and b/assets/custom-text-pic-example.mEfPZlG7.png differ diff --git a/assets/custom-text-pic-show.BzD0TJEe.png b/assets/custom-text-pic-show.BzD0TJEe.png new file mode 100644 index 000000000..d83912f36 Binary files /dev/null and b/assets/custom-text-pic-show.BzD0TJEe.png differ diff --git a/assets/custom-text-reset.BrJxXN0J.png b/assets/custom-text-reset.BrJxXN0J.png new file mode 100644 index 000000000..50ef30265 Binary files /dev/null and b/assets/custom-text-reset.BrJxXN0J.png differ diff --git a/assets/custom-text-waiting-save.77cjoXk7.png b/assets/custom-text-waiting-save.77cjoXk7.png new file mode 100644 index 000000000..b282f434b Binary files /dev/null and b/assets/custom-text-waiting-save.77cjoXk7.png differ diff --git a/assets/custom-text-with-var.cb258LWG.png b/assets/custom-text-with-var.cb258LWG.png new file mode 100644 index 000000000..d4453610b Binary files /dev/null and b/assets/custom-text-with-var.cb258LWG.png differ diff --git a/assets/deck-diff.C0GgnssI.png b/assets/deck-diff.C0GgnssI.png new file mode 100644 index 000000000..26080ad69 Binary files /dev/null and b/assets/deck-diff.C0GgnssI.png differ diff --git a/assets/deck-new-features.vhmgDyTa.png b/assets/deck-new-features.vhmgDyTa.png new file mode 100644 index 000000000..5ff5dbfa9 Binary files /dev/null and b/assets/deck-new-features.vhmgDyTa.png differ diff --git a/assets/deck-ui.DKzN0h-f.png b/assets/deck-ui.DKzN0h-f.png new file mode 100644 index 000000000..45523cc51 Binary files /dev/null and b/assets/deck-ui.DKzN0h-f.png differ diff --git a/assets/deploy_README.md.DsiyvSn7.js b/assets/deploy_README.md.DsiyvSn7.js new file mode 100644 index 000000000..945b0543a --- /dev/null +++ b/assets/deploy_README.md.DsiyvSn7.js @@ -0,0 +1 @@ +import{_ as a,c as e,a6 as t,o as i}from"./chunks/framework.B1keMFNq.js";const c=JSON.parse('{"title":"部署","description":"","frontmatter":{"title":"部署","index":false},"headers":[],"relativePath":"deploy/README.md","filePath":"deploy/README.md","lastUpdated":1723441920000}'),r={name:"deploy/README.md"};function o(f,l,m,h,d,p){return i(),e("div",null,l[0]||(l[0]=[t('',1)]))}const n=a(r,[["render",o]]);export{c as __pageData,n as default}; diff --git a/assets/deploy_README.md.DsiyvSn7.lean.js b/assets/deploy_README.md.DsiyvSn7.lean.js new file mode 100644 index 000000000..945b0543a --- /dev/null +++ b/assets/deploy_README.md.DsiyvSn7.lean.js @@ -0,0 +1 @@ +import{_ as a,c as e,a6 as t,o as i}from"./chunks/framework.B1keMFNq.js";const c=JSON.parse('{"title":"部署","description":"","frontmatter":{"title":"部署","index":false},"headers":[],"relativePath":"deploy/README.md","filePath":"deploy/README.md","lastUpdated":1723441920000}'),r={name:"deploy/README.md"};function o(f,l,m,h,d,p){return i(),e("div",null,l[0]||(l[0]=[t('',1)]))}const n=a(r,[["render",o]]);export{c as __pageData,n as default}; diff --git a/assets/deploy_about_file.md.CUJ6Ltla.js b/assets/deploy_about_file.md.CUJ6Ltla.js new file mode 100644 index 000000000..7b3f61241 --- /dev/null +++ b/assets/deploy_about_file.md.CUJ6Ltla.js @@ -0,0 +1,19 @@ +import{_ as s,c as e,a6 as n,o as l}from"./chunks/framework.B1keMFNq.js";const u=JSON.parse('{"title":"海豹的本地文件","description":"","frontmatter":{"lang":"zh-cn","title":"海豹的本地文件"},"headers":[],"relativePath":"deploy/about_file.md","filePath":"deploy/about_file.md","lastUpdated":1728704327000}'),p={name:"deploy/about_file.md"};function t(i,a,d,o,c,r){return l(),e("div",null,a[0]||(a[0]=[n(`

    海豹的本地文件

    本节内容

    本节将介绍海豹核心主要的本地文件和它们的作用,以及一些与文件相关的问题。

    SealDice 文件目录树

    text
    ├─backups                    // 备份文件目录,里面是备份的压缩包
    +├─data                       // 数据目录
    +│  ├─censor                  // 敏感词库文件
    +|  ├─decks                   // 牌堆文件
    +|  ├─default
    +│  │  ├─configs              // 自定义骰点回执
    +|  |  ├─extensions           // 各个模块的特化文件放在这里,也是插件的数据目录
    +|  |  |  ├─coc7
    +|  |  |  ├─dnd5e
    +|  |  |  └─reply             // 比如你的自定义回复文件
    +|  |  ├─extra                // 放置你使用的QQ客户端配置文件
    +|  |  |  └─lagrange-qq123456 // 此处 123456 代指你骰子的QQ,是内置客户端的配置文件夹。
    +|  |  ├─log-exports          // log end 后导出的 log 文件
    +|  |  └─scripts              // 插件脚本
    +|  ├─helpdoc                 // 查询文档放置位置
    +|  ├─images                  // 放置图片资源的文件夹,海豹为了安全不允许调用非海豹文件夹内的图片
    +|  └─names                   // 姓名文件 . name 指令无法使用可以看看
    +├─_help_cache                // 全文搜索索引缓存
    +└─lagrange                   // 内置客户端的二进制文件

    常用文件

    • ./data/dice.yaml 配置核心文件。

    • ./data/main.log 核心日志,可以查看报错消息。

    • ./data/default/serve.yaml 账号协议配置文件。

    • ./data/default/record.log 运行日志文件,可以查看报错信息。

    • ./data/default/data.db 数据库文件,存有人物卡、群组状态等信息。

    • ./data/default/data-logs.db log 数据库文件,存有 log 日志。

    • ./data/default/data-censor.db 敏感词数据库文件,存有拦截日志等信息。

    • ./data/default/configs/text-temple.yaml 自定义文案的本体。

    • ./data/default/extra/lagrange-qq[骰子QQ] 内置客户端的配置文件夹。

    安卓端文件路径

    请查看安卓端文件路径一节。

    数据库检查和修复

    请查看数据库检查和修复一节。

    数据迁移

    请看迁移一节。

    `,12)]))}const f=s(p,[["render",t]]);export{u as __pageData,f as default}; diff --git a/assets/deploy_about_file.md.CUJ6Ltla.lean.js b/assets/deploy_about_file.md.CUJ6Ltla.lean.js new file mode 100644 index 000000000..7b3f61241 --- /dev/null +++ b/assets/deploy_about_file.md.CUJ6Ltla.lean.js @@ -0,0 +1,19 @@ +import{_ as s,c as e,a6 as n,o as l}from"./chunks/framework.B1keMFNq.js";const u=JSON.parse('{"title":"海豹的本地文件","description":"","frontmatter":{"lang":"zh-cn","title":"海豹的本地文件"},"headers":[],"relativePath":"deploy/about_file.md","filePath":"deploy/about_file.md","lastUpdated":1728704327000}'),p={name:"deploy/about_file.md"};function t(i,a,d,o,c,r){return l(),e("div",null,a[0]||(a[0]=[n(`

    海豹的本地文件

    本节内容

    本节将介绍海豹核心主要的本地文件和它们的作用,以及一些与文件相关的问题。

    SealDice 文件目录树

    text
    ├─backups                    // 备份文件目录,里面是备份的压缩包
    +├─data                       // 数据目录
    +│  ├─censor                  // 敏感词库文件
    +|  ├─decks                   // 牌堆文件
    +|  ├─default
    +│  │  ├─configs              // 自定义骰点回执
    +|  |  ├─extensions           // 各个模块的特化文件放在这里,也是插件的数据目录
    +|  |  |  ├─coc7
    +|  |  |  ├─dnd5e
    +|  |  |  └─reply             // 比如你的自定义回复文件
    +|  |  ├─extra                // 放置你使用的QQ客户端配置文件
    +|  |  |  └─lagrange-qq123456 // 此处 123456 代指你骰子的QQ,是内置客户端的配置文件夹。
    +|  |  ├─log-exports          // log end 后导出的 log 文件
    +|  |  └─scripts              // 插件脚本
    +|  ├─helpdoc                 // 查询文档放置位置
    +|  ├─images                  // 放置图片资源的文件夹,海豹为了安全不允许调用非海豹文件夹内的图片
    +|  └─names                   // 姓名文件 . name 指令无法使用可以看看
    +├─_help_cache                // 全文搜索索引缓存
    +└─lagrange                   // 内置客户端的二进制文件

    常用文件

    • ./data/dice.yaml 配置核心文件。

    • ./data/main.log 核心日志,可以查看报错消息。

    • ./data/default/serve.yaml 账号协议配置文件。

    • ./data/default/record.log 运行日志文件,可以查看报错信息。

    • ./data/default/data.db 数据库文件,存有人物卡、群组状态等信息。

    • ./data/default/data-logs.db log 数据库文件,存有 log 日志。

    • ./data/default/data-censor.db 敏感词数据库文件,存有拦截日志等信息。

    • ./data/default/configs/text-temple.yaml 自定义文案的本体。

    • ./data/default/extra/lagrange-qq[骰子QQ] 内置客户端的配置文件夹。

    安卓端文件路径

    请查看安卓端文件路径一节。

    数据库检查和修复

    请查看数据库检查和修复一节。

    数据迁移

    请看迁移一节。

    `,12)]))}const f=s(p,[["render",t]]);export{u as __pageData,f as default}; diff --git a/assets/deploy_android.md.541vn--J.js b/assets/deploy_android.md.541vn--J.js new file mode 100644 index 000000000..61c6f114a --- /dev/null +++ b/assets/deploy_android.md.541vn--J.js @@ -0,0 +1 @@ +import{_ as e,c as t,a6 as r,o}from"./chunks/framework.B1keMFNq.js";const l="/sealdice-manual-next/assets/android_np_manager.FuLqh54f.jpg",i="/sealdice-manual-next/assets/android_sealdice_port.CCn6iS6b.jpg",b=JSON.parse('{"title":"安卓海豹常见问题","description":"","frontmatter":{"lang":"zh-cn","title":"安卓海豹常见问题"},"headers":[],"relativePath":"deploy/android.md","filePath":"deploy/android.md","lastUpdated":1714442589000}'),d={name:"deploy/android.md"};function n(s,a,p,c,h,m){return o(),t("div",null,a[0]||(a[0]=[r('

    安卓海豹常见问题

    本节内容

    本节将介绍安卓端海豹核心常见问题和解决方法。

    安卓端登录

    安装下载的 APK 包,给予适当的权限并配置安卓端保活

    只有一个设备,但登录需要扫码

    使用 TIM 可以从相册扫码。

    经常掉线

    为了使海豹在后台运行,请查看配置安卓端保活对应系统修改系统设置,确保海豹核心能够在后台存活。

    同时开启两个海豹实例

    方法一:使用系统的双开功能

    如果你的手机系统支持「应用双开」(或「应用分身」等,不同系统可能名称不同),可以直接使用系统的双开功能。

    方法二:使用 NP 管理器等软件

    下载「NP 管理器」修改海豹核心安装包。

    信息

    1.下载 NP 管理器并安装。

    2.打开 NP 管理器,找到海豹核心安装包。

    3.选择「功能」-「APK 共存」。

    APK 共存

    4.安装改过的安装包,打开海豹核心。

    5.选择右上角小齿轮,修改 UI 界面地址和启动参数,将里面的 3211 改成 3212。

    修改 UI 界面地址和启动参数

    6.启动核心。

    海豹文件路径

    安卓端海豹文件无法直接被读取,需要先停止核心,点击「导出数据」按钮,数据导出路径为 /storage/emulated/0/Documents/com.sealdice.dice/sealdice/

    修改完文件后需要点击「导入数据」按钮才可被海豹核心读取。

    注意

    在安卓端海豹上,每次导入数据前都进行一次导出,导出后不要再运行海豹核心。

    这是因为,安卓端海豹不会实时更新导出的文件,它们是海豹数据在导出时的一份快照。

    如果在上次导出后产生了新数据,而再次进行导入,会导致新产生的数据被之前导出的数据覆盖,丢失这段时间以来录入的角色卡、Log、修改的自定义文案等海豹内部的数据。

    发送图片

    引用图片正确格式示例:[图:data/images/1.jpg],涉及到的符号均是英文符号,不要使用 \\

    添加图片的方法

    1. 利用导入导出功能将图片放入海豹的导出文件夹,然后导入。

    2. 使用 MT 管理器的「APK 一键注入文件提供器功能」,配合「添加本地储存」这两个功能访问海豹的私有目录。

    如何更新

    手机版不能通过指令或 WebUI 操作更新。你需要下载新版 APK 替换安装。

    安卓端尚在公测,以防万一最好导出一次保留数据。

    电脑海豹转安卓端海豹

    查看迁移数据到手机,手机转电脑同理。

    ',26)]))}const f=e(d,[["render",n]]);export{b as __pageData,f as default}; diff --git a/assets/deploy_android.md.541vn--J.lean.js b/assets/deploy_android.md.541vn--J.lean.js new file mode 100644 index 000000000..61c6f114a --- /dev/null +++ b/assets/deploy_android.md.541vn--J.lean.js @@ -0,0 +1 @@ +import{_ as e,c as t,a6 as r,o}from"./chunks/framework.B1keMFNq.js";const l="/sealdice-manual-next/assets/android_np_manager.FuLqh54f.jpg",i="/sealdice-manual-next/assets/android_sealdice_port.CCn6iS6b.jpg",b=JSON.parse('{"title":"安卓海豹常见问题","description":"","frontmatter":{"lang":"zh-cn","title":"安卓海豹常见问题"},"headers":[],"relativePath":"deploy/android.md","filePath":"deploy/android.md","lastUpdated":1714442589000}'),d={name:"deploy/android.md"};function n(s,a,p,c,h,m){return o(),t("div",null,a[0]||(a[0]=[r('

    安卓海豹常见问题

    本节内容

    本节将介绍安卓端海豹核心常见问题和解决方法。

    安卓端登录

    安装下载的 APK 包,给予适当的权限并配置安卓端保活

    只有一个设备,但登录需要扫码

    使用 TIM 可以从相册扫码。

    经常掉线

    为了使海豹在后台运行,请查看配置安卓端保活对应系统修改系统设置,确保海豹核心能够在后台存活。

    同时开启两个海豹实例

    方法一:使用系统的双开功能

    如果你的手机系统支持「应用双开」(或「应用分身」等,不同系统可能名称不同),可以直接使用系统的双开功能。

    方法二:使用 NP 管理器等软件

    下载「NP 管理器」修改海豹核心安装包。

    信息

    1.下载 NP 管理器并安装。

    2.打开 NP 管理器,找到海豹核心安装包。

    3.选择「功能」-「APK 共存」。

    APK 共存

    4.安装改过的安装包,打开海豹核心。

    5.选择右上角小齿轮,修改 UI 界面地址和启动参数,将里面的 3211 改成 3212。

    修改 UI 界面地址和启动参数

    6.启动核心。

    海豹文件路径

    安卓端海豹文件无法直接被读取,需要先停止核心,点击「导出数据」按钮,数据导出路径为 /storage/emulated/0/Documents/com.sealdice.dice/sealdice/

    修改完文件后需要点击「导入数据」按钮才可被海豹核心读取。

    注意

    在安卓端海豹上,每次导入数据前都进行一次导出,导出后不要再运行海豹核心。

    这是因为,安卓端海豹不会实时更新导出的文件,它们是海豹数据在导出时的一份快照。

    如果在上次导出后产生了新数据,而再次进行导入,会导致新产生的数据被之前导出的数据覆盖,丢失这段时间以来录入的角色卡、Log、修改的自定义文案等海豹内部的数据。

    发送图片

    引用图片正确格式示例:[图:data/images/1.jpg],涉及到的符号均是英文符号,不要使用 \\

    添加图片的方法

    1. 利用导入导出功能将图片放入海豹的导出文件夹,然后导入。

    2. 使用 MT 管理器的「APK 一键注入文件提供器功能」,配合「添加本地储存」这两个功能访问海豹的私有目录。

    如何更新

    手机版不能通过指令或 WebUI 操作更新。你需要下载新版 APK 替换安装。

    安卓端尚在公测,以防万一最好导出一次保留数据。

    电脑海豹转安卓端海豹

    查看迁移数据到手机,手机转电脑同理。

    ',26)]))}const f=e(d,[["render",n]]);export{b as __pageData,f as default}; diff --git a/assets/deploy_android_keepalive.md.BEgmqgLY.js b/assets/deploy_android_keepalive.md.BEgmqgLY.js new file mode 100644 index 000000000..d06561ccc --- /dev/null +++ b/assets/deploy_android_keepalive.md.BEgmqgLY.js @@ -0,0 +1 @@ +import{_ as s,c as i,a6 as l,o}from"./chunks/framework.B1keMFNq.js";const p="/sealdice-manual-next/assets/keepalive_hyperos_storage.DLTisrS0.jpg",r="/sealdice-manual-next/assets/keepalive_hyperos_additional.CZQRRSrJ.jpg",e="/sealdice-manual-next/assets/keepalive_miui_multitask.C0T94Cld.jpg",n="/sealdice-manual-next/assets/keepalive_hyperos_selflaunch.H3gMxdjM.jpg",t="/sealdice-manual-next/assets/keepalive_miui_permdialog.Dqk-e0Wk.png",c="/sealdice-manual-next/assets/keepalive_miui_unlimit.B4FzIaKH.jpg",d="/sealdice-manual-next/assets/keepalive_harmonyos_applaunch.CiGVQ3Zv.jpg",m="/sealdice-manual-next/assets/keepalive_harmonyos_battery.DQWH3UGx.jpg",h="/sealdice-manual-next/assets/keepalive_harmonyos_batterymore.CNFIGq83.jpg",_="/sealdice-manual-next/assets/keepalive_harmonyos_batteryoptimization.DOqAUyHu.jpg",u="/sealdice-manual-next/assets/keepalive_harmonyos_multitask.CmAGO103.jpg",g="/sealdice-manual-next/assets/keepalive_coloros_launch.ux0hgdFj.jpg",k="/sealdice-manual-next/assets/keepalive_coloros_nightshift.DbBl1G84.jpg",b="/sealdice-manual-next/assets/keepalive_coloros_multitask.UHiBdlRk.jpg",x="/sealdice-manual-next/assets/keepalive_inapp.iDubXtQV.jpg",S=JSON.parse('{"title":"配置安卓端保活","description":"","frontmatter":{"lang":"zh-cn","title":"配置安卓端保活"},"headers":[],"relativePath":"deploy/android_keepalive.md","filePath":"deploy/android_keepalive.md","lastUpdated":1722077148000}'),v={name:"deploy/android_keepalive.md"};function y(f,a,q,O,w,j){return o(),i("div",null,a[0]||(a[0]=[l('

    配置安卓端保活

    本节内容

    本节包含在主流安卓操作系统上允许海豹核心在后台运行,以便顺畅使用的方法。

    为了应付流氓软件,大部分系统往往会限制应用程序在后台的活动,甚至强制使它们退出。遗憾的是,手机版海豹核心也往往遭到误杀。为了确保海豹核心不会在使用其他应用程序或手机熄屏时掉线,需要调整一些系统设置来确保其能够在后台存活。

    提示:不断尝试

    你的操作系统会不断调整各个程序的活动策略,因此本节中介绍的手段并不总是万无一失。同样地,你也不一定需要诉诸所有方法才能保证海豹核心的存活。如果条件允许的话,你可以选择性地采用本节介绍的方法,或发掘一些新的手段,多试验几次来找到最适合你设备的策略。

    当然,如果你并不确定该怎么做,遵循下面介绍的步骤总是最保险的。

    在继续之前,你应该先从官网下载安卓版海豹核心,并将其安装到你的设备上。

    授予海豹核心必要权限

    海豹核心需要必要的权限来正常运行。在安装后或首次启动时,你应当确保应用程序已经拥有充足的权限。

    提示:「应用信息」界面

    在授予海豹核心权限或允许一些行为时,你需要访问系统设置的「应用信息」界面(在一些系统上可能也称作「应用详情」)。通常而言,你可以通过以下方法访问这个界面:

    1. 在桌面长按海豹核心图标,在弹出的菜单里选择「应用信息」或是类似小写字母 i 的图标。

    2. 或者,打开系统设置,找到「应用管理」(一些系统也称「应用和服务」)选项。进入应用管理后,你通常会看到展示设备上所有应用的列表。请在列表中选择「海豹核心」。

    你可以在应用信息界面管理海豹核心的权限、后台行为、数据使用等。

    对于以下未提及的系统/品牌手机,请参考以下内容自行配置保活。

    HyperOS(小米/红米)

    在 HyperOS(澎湃系统)中,启动核心前请全部允许这些权限。「访问存储空间」被拆分为三个权限:「照片和视频」「音乐和音频」「文件和文档」。

    HyperOS 步骤 1

    请始终开启「锁屏显示」「后台弹出界面」「显示悬浮窗」「动态壁纸服务」四项权限。

    HyperOS 步骤 2

    长按海豹核心的任务卡片,并点击锁图标。

    HyperOS 步骤 3

    如果保活仍然失效,请尝试在应用信息界面中开启「自启动」。

    HyperOS 步骤 4

    MIUI(小米/红米)

    初次启动时提示是否运行“海豹核心”发送通知,选择「始终允许」。

    MIUI 步骤 1

    第二步,在海豹核心的后台配置中选择「无限制」。

    MIUI 步骤 2

    第三步,长按海豹核心的任务卡片,并点击锁图标。

    MIUI 步骤 3

    鸿蒙系统(华为)

    在「应用和服务」中,选择「应用启动管理」,找到海豹核心,关闭其「自动管理」开关,并允许自启动、关联启动和后台活动。

    鸿蒙系统步骤 1

    回到「设置」主页,选择「电池」项目,开启性能模式,并进入「更多电池设置」,在新界面中开启「休眠时始终保持网络连接」。

    鸿蒙系统步骤 2
    鸿蒙系统步骤 3

    在「设置」>「隐私」>「权限管理」>「特殊访问权限」>「电池优化」项目找到海豹核心,选择「不允许」。

    鸿蒙系统步骤 4

    将海豹核心的任务卡片下拉并释放,见到卡片右上角出现锁图标即可。

    鸿蒙系统步骤 5

    ColorOS(OPPO/一加)

    选择「耗电管理」,优先开启所有选项。

    ColorOS 步骤 1

    已知护眼模式可能会导致海豹核心意外关闭,请不要开启。

    ColorOS 步骤 2

    选择海豹核心任务卡片右上角的三个点,并选择「锁定」。

    ColorOS 步骤 3

    ::::

    为了海豹持续运行,请不要将海豹从任务列表中划除。或者,你可以在海豹核心的设置中选择「从任务列表隐藏」。

    通用设置

    存储权限

    初次启动海豹核心前,你必须允许海豹核心访问存储空间,这通常在安装应用时就已经默认开启。没有相关权限,海豹核心将无法正常运行。

    如果你的系统没有自动允许海豹核心访问存储空间,请在「应用信息」中选择「权限管理」(你可能需要选择「显示所有权限」),并允许「访问存储空间」权限。

    通知权限

    首次启动海豹核心时,你可能会收到「是否允许海豹核心发送通知」的对话框。请始终允许海豹核心发送通知,此后你可能会在通知栏看到「海豹核心正在运行」的消息,这是保活策略的一部分。

    通知权限

    如果你不慎拒绝通知权限,可以稍后在系统设置中授予海豹核心相关权限。

    应用内设置

    在海豹核心应用中,选择右上角的设置图标,可以看到一些保活策略。通常来说,启用上面的系统设置已经足够,但如果你发现海豹核心仍然时常掉线,可以考虑这里的额外手段。

    应用内设置

    前三个策略可能需要相应权限才能生效。

    ',57)]))}const H=s(v,[["render",y]]);export{S as __pageData,H as default}; diff --git a/assets/deploy_android_keepalive.md.BEgmqgLY.lean.js b/assets/deploy_android_keepalive.md.BEgmqgLY.lean.js new file mode 100644 index 000000000..d06561ccc --- /dev/null +++ b/assets/deploy_android_keepalive.md.BEgmqgLY.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,a6 as l,o}from"./chunks/framework.B1keMFNq.js";const p="/sealdice-manual-next/assets/keepalive_hyperos_storage.DLTisrS0.jpg",r="/sealdice-manual-next/assets/keepalive_hyperos_additional.CZQRRSrJ.jpg",e="/sealdice-manual-next/assets/keepalive_miui_multitask.C0T94Cld.jpg",n="/sealdice-manual-next/assets/keepalive_hyperos_selflaunch.H3gMxdjM.jpg",t="/sealdice-manual-next/assets/keepalive_miui_permdialog.Dqk-e0Wk.png",c="/sealdice-manual-next/assets/keepalive_miui_unlimit.B4FzIaKH.jpg",d="/sealdice-manual-next/assets/keepalive_harmonyos_applaunch.CiGVQ3Zv.jpg",m="/sealdice-manual-next/assets/keepalive_harmonyos_battery.DQWH3UGx.jpg",h="/sealdice-manual-next/assets/keepalive_harmonyos_batterymore.CNFIGq83.jpg",_="/sealdice-manual-next/assets/keepalive_harmonyos_batteryoptimization.DOqAUyHu.jpg",u="/sealdice-manual-next/assets/keepalive_harmonyos_multitask.CmAGO103.jpg",g="/sealdice-manual-next/assets/keepalive_coloros_launch.ux0hgdFj.jpg",k="/sealdice-manual-next/assets/keepalive_coloros_nightshift.DbBl1G84.jpg",b="/sealdice-manual-next/assets/keepalive_coloros_multitask.UHiBdlRk.jpg",x="/sealdice-manual-next/assets/keepalive_inapp.iDubXtQV.jpg",S=JSON.parse('{"title":"配置安卓端保活","description":"","frontmatter":{"lang":"zh-cn","title":"配置安卓端保活"},"headers":[],"relativePath":"deploy/android_keepalive.md","filePath":"deploy/android_keepalive.md","lastUpdated":1722077148000}'),v={name:"deploy/android_keepalive.md"};function y(f,a,q,O,w,j){return o(),i("div",null,a[0]||(a[0]=[l('

    配置安卓端保活

    本节内容

    本节包含在主流安卓操作系统上允许海豹核心在后台运行,以便顺畅使用的方法。

    为了应付流氓软件,大部分系统往往会限制应用程序在后台的活动,甚至强制使它们退出。遗憾的是,手机版海豹核心也往往遭到误杀。为了确保海豹核心不会在使用其他应用程序或手机熄屏时掉线,需要调整一些系统设置来确保其能够在后台存活。

    提示:不断尝试

    你的操作系统会不断调整各个程序的活动策略,因此本节中介绍的手段并不总是万无一失。同样地,你也不一定需要诉诸所有方法才能保证海豹核心的存活。如果条件允许的话,你可以选择性地采用本节介绍的方法,或发掘一些新的手段,多试验几次来找到最适合你设备的策略。

    当然,如果你并不确定该怎么做,遵循下面介绍的步骤总是最保险的。

    在继续之前,你应该先从官网下载安卓版海豹核心,并将其安装到你的设备上。

    授予海豹核心必要权限

    海豹核心需要必要的权限来正常运行。在安装后或首次启动时,你应当确保应用程序已经拥有充足的权限。

    提示:「应用信息」界面

    在授予海豹核心权限或允许一些行为时,你需要访问系统设置的「应用信息」界面(在一些系统上可能也称作「应用详情」)。通常而言,你可以通过以下方法访问这个界面:

    1. 在桌面长按海豹核心图标,在弹出的菜单里选择「应用信息」或是类似小写字母 i 的图标。

    2. 或者,打开系统设置,找到「应用管理」(一些系统也称「应用和服务」)选项。进入应用管理后,你通常会看到展示设备上所有应用的列表。请在列表中选择「海豹核心」。

    你可以在应用信息界面管理海豹核心的权限、后台行为、数据使用等。

    对于以下未提及的系统/品牌手机,请参考以下内容自行配置保活。

    HyperOS(小米/红米)

    在 HyperOS(澎湃系统)中,启动核心前请全部允许这些权限。「访问存储空间」被拆分为三个权限:「照片和视频」「音乐和音频」「文件和文档」。

    HyperOS 步骤 1

    请始终开启「锁屏显示」「后台弹出界面」「显示悬浮窗」「动态壁纸服务」四项权限。

    HyperOS 步骤 2

    长按海豹核心的任务卡片,并点击锁图标。

    HyperOS 步骤 3

    如果保活仍然失效,请尝试在应用信息界面中开启「自启动」。

    HyperOS 步骤 4

    MIUI(小米/红米)

    初次启动时提示是否运行“海豹核心”发送通知,选择「始终允许」。

    MIUI 步骤 1

    第二步,在海豹核心的后台配置中选择「无限制」。

    MIUI 步骤 2

    第三步,长按海豹核心的任务卡片,并点击锁图标。

    MIUI 步骤 3

    鸿蒙系统(华为)

    在「应用和服务」中,选择「应用启动管理」,找到海豹核心,关闭其「自动管理」开关,并允许自启动、关联启动和后台活动。

    鸿蒙系统步骤 1

    回到「设置」主页,选择「电池」项目,开启性能模式,并进入「更多电池设置」,在新界面中开启「休眠时始终保持网络连接」。

    鸿蒙系统步骤 2
    鸿蒙系统步骤 3

    在「设置」>「隐私」>「权限管理」>「特殊访问权限」>「电池优化」项目找到海豹核心,选择「不允许」。

    鸿蒙系统步骤 4

    将海豹核心的任务卡片下拉并释放,见到卡片右上角出现锁图标即可。

    鸿蒙系统步骤 5

    ColorOS(OPPO/一加)

    选择「耗电管理」,优先开启所有选项。

    ColorOS 步骤 1

    已知护眼模式可能会导致海豹核心意外关闭,请不要开启。

    ColorOS 步骤 2

    选择海豹核心任务卡片右上角的三个点,并选择「锁定」。

    ColorOS 步骤 3

    ::::

    为了海豹持续运行,请不要将海豹从任务列表中划除。或者,你可以在海豹核心的设置中选择「从任务列表隐藏」。

    通用设置

    存储权限

    初次启动海豹核心前,你必须允许海豹核心访问存储空间,这通常在安装应用时就已经默认开启。没有相关权限,海豹核心将无法正常运行。

    如果你的系统没有自动允许海豹核心访问存储空间,请在「应用信息」中选择「权限管理」(你可能需要选择「显示所有权限」),并允许「访问存储空间」权限。

    通知权限

    首次启动海豹核心时,你可能会收到「是否允许海豹核心发送通知」的对话框。请始终允许海豹核心发送通知,此后你可能会在通知栏看到「海豹核心正在运行」的消息,这是保活策略的一部分。

    通知权限

    如果你不慎拒绝通知权限,可以稍后在系统设置中授予海豹核心相关权限。

    应用内设置

    在海豹核心应用中,选择右上角的设置图标,可以看到一些保活策略。通常来说,启用上面的系统设置已经足够,但如果你发现海豹核心仍然时常掉线,可以考虑这里的额外手段。

    应用内设置

    前三个策略可能需要相应权限才能生效。

    ',57)]))}const H=s(v,[["render",y]]);export{S as __pageData,H as default}; diff --git a/assets/deploy_db-repair.md.OT0HZBST.js b/assets/deploy_db-repair.md.OT0HZBST.js new file mode 100644 index 000000000..767c62d0e --- /dev/null +++ b/assets/deploy_db-repair.md.OT0HZBST.js @@ -0,0 +1,16 @@ +import{_ as h,c as k,a6 as t,G as a,w as e,B as n,o as d,j as s}from"./chunks/framework.B1keMFNq.js";const b=JSON.parse('{"title":"数据库检查和修复","description":"","frontmatter":{"lang":"zh-cn","title":"数据库检查和修复"},"headers":[],"relativePath":"deploy/db-repair.md","filePath":"deploy/db-repair.md","lastUpdated":1728702230000}'),r={name:"deploy/db-repair.md"};function F(o,i,c,g,y,u){const l=n("PluginTabsTab"),p=n("PluginTabs");return d(),k("div",null,[i[2]||(i[2]=t('

    数据库检查和修复

    本节内容

    本节包括两项内容:如何判断海豹的数据库是否损坏,在损坏时如何修复。

    数据库损坏发生的原因很多,包括但不限于突发断电、硬盘受到物理损坏、或硬盘空间占满。

    确定问题

    如果你发现角色卡或 Log 会在重启海豹后丢失,或数据库文件变得很大(通常在 200MB 以上),建议对数据库进行完整性检查。

    首先,停止海豹运行。在 Windows 系统上,你可以右键点击托盘图标并选择退出;在其他系统上,通常是在执行海豹核心的终端使用 ctrl+c 组合键;如果你注册了系统服务,通常是使用 systemctl stop sealdice 命令。

    稍作等待,以确保数据被写入硬盘。

    随后,使用命令行程序进入海豹的目录,执行以下命令。如果对使用命令行感到困难,后面有一个简化的替代方案。

    ',7)),a(p,{sharedStateKey:"shell"},{default:e(()=>[a(l,{label:"Windows-命令提示符(cmd)"},{default:e(()=>i[0]||(i[0]=[s("div",{class:"language-shell vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"shell"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"sealdice-core"),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," /db-check")])])])],-1)])),_:1}),a(l,{label:"其他 Shell"},{default:e(()=>i[1]||(i[1]=[s("div",{class:"language-shell vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"shell"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"./sealdice-core"),s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," --db-check")])])])],-1)])),_:1})]),_:1}),i[3]||(i[3]=t(`

    你将看到类似的输出

    text
    数据库检查结果:
    +data.db: true
    +data-logs.db: true
    +data-censor.db: true

    这代表数据库是正常的。列出的是海豹核心使用的 3 个数据库文件:

    • data.db - 人物卡和群内临时卡
    • data-logs.db - 跑团日志
    • data-censor.db - 敏感词库

    如果有某个数据库文件后输出了 false,说明该文件内容损坏。

    无法使用命令行

    如果你对使用命令行感到困难,可以这样做:

    打开记事本,将以下内容复制进去:

    shell
    sealdice-core /db-check
    +pause

    将它命名为 检查.cmd,保存在海豹的主程序所在目录,或者保存完复制过去。

    双击 检查.cmd 执行,之后同上。

    修复数据库 - 通过回滚备份

    对于大多数情况,我们推荐直接回滚到备份文件的状态。这种方法简便、容易成功。代价是损失从备份时间点到当前时间的数据。

    海豹核心默认每 12 小时进行一次备份,你可在 backups/ 目录下找到所有的备份文件。备份的时间可以直接查看文件创建时间,也可以从文件名中确定。

    将你损坏的数据库文件另外保存一份以防万一,并且确保你的硬盘有适当的空闲空间。

    在备份文件中找到最新的一份(如果你能确定导致你数据库出问题的事件,也可以找到该时间点前的最后一份),从中解压出数据库文件,替换掉你发现损坏的数据库。

    替换完成后,再进行一次完整性检查。如果仍然提示损坏,则使用更早的一份备份重新替换,直到数据库文件正常。

    修复数据库 - 通过数据库修复指令

    如果你熟悉 SQLite 3,或者没有可用的备份文件,尝试以下方案。

    这种办法有一定的操作难度,酌情进行使用。这里我们以 Windows 系统为例。

    首先,你需要安装或下载一个 SQLite 3 程序。

    你可以从其官网下载页,找到 Precompiled Binaries for Windows,下载其中的 sqlite-tools。确保你下载的是 3.40 以上版本,通常来说,直接下载最新版即可。

    下载完成后,找出 sqlite.exe 放到空目录备用。

    将损坏的数据文件(如 data.db)从海豹的 data/default/ 目录中复制出来,放在和 sqlite.exe 同一个目录。

    使用命令行工具打开这个目录,在此目录下,执行下面的指令:

    导出数据:

    shell
    sqlite3.exe data.db
    +.output 1.sql
    +.recover
    +.exit

    恢复数据到 a.db,并删除无效数据。

    shell
    sqlite3.exe a.db
    +.read 1.sql
    +delete from attrs_group where id is null;
    +delete from attrs_user where id is null;
    +delete from group_info where id is null;
    +delete from attrs_group_user where id is null;
    +delete from ban_info where id is null;
    +delete from group_player_info where id is null;
    +.exit

    接下来这个 a.db 就是修好的数据库了,将其复制回海豹的原路径,并改名回 data.db。

    `,30))])}const E=h(r,[["render",F]]);export{b as __pageData,E as default}; diff --git a/assets/deploy_db-repair.md.OT0HZBST.lean.js b/assets/deploy_db-repair.md.OT0HZBST.lean.js new file mode 100644 index 000000000..767c62d0e --- /dev/null +++ b/assets/deploy_db-repair.md.OT0HZBST.lean.js @@ -0,0 +1,16 @@ +import{_ as h,c as k,a6 as t,G as a,w as e,B as n,o as d,j as s}from"./chunks/framework.B1keMFNq.js";const b=JSON.parse('{"title":"数据库检查和修复","description":"","frontmatter":{"lang":"zh-cn","title":"数据库检查和修复"},"headers":[],"relativePath":"deploy/db-repair.md","filePath":"deploy/db-repair.md","lastUpdated":1728702230000}'),r={name:"deploy/db-repair.md"};function F(o,i,c,g,y,u){const l=n("PluginTabsTab"),p=n("PluginTabs");return d(),k("div",null,[i[2]||(i[2]=t('

    数据库检查和修复

    本节内容

    本节包括两项内容:如何判断海豹的数据库是否损坏,在损坏时如何修复。

    数据库损坏发生的原因很多,包括但不限于突发断电、硬盘受到物理损坏、或硬盘空间占满。

    确定问题

    如果你发现角色卡或 Log 会在重启海豹后丢失,或数据库文件变得很大(通常在 200MB 以上),建议对数据库进行完整性检查。

    首先,停止海豹运行。在 Windows 系统上,你可以右键点击托盘图标并选择退出;在其他系统上,通常是在执行海豹核心的终端使用 ctrl+c 组合键;如果你注册了系统服务,通常是使用 systemctl stop sealdice 命令。

    稍作等待,以确保数据被写入硬盘。

    随后,使用命令行程序进入海豹的目录,执行以下命令。如果对使用命令行感到困难,后面有一个简化的替代方案。

    ',7)),a(p,{sharedStateKey:"shell"},{default:e(()=>[a(l,{label:"Windows-命令提示符(cmd)"},{default:e(()=>i[0]||(i[0]=[s("div",{class:"language-shell vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"shell"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"sealdice-core"),s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," /db-check")])])])],-1)])),_:1}),a(l,{label:"其他 Shell"},{default:e(()=>i[1]||(i[1]=[s("div",{class:"language-shell vp-adaptive-theme"},[s("button",{title:"Copy Code",class:"copy"}),s("span",{class:"lang"},"shell"),s("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[s("code",null,[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"./sealdice-core"),s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," --db-check")])])])],-1)])),_:1})]),_:1}),i[3]||(i[3]=t(`

    你将看到类似的输出

    text
    数据库检查结果:
    +data.db: true
    +data-logs.db: true
    +data-censor.db: true

    这代表数据库是正常的。列出的是海豹核心使用的 3 个数据库文件:

    • data.db - 人物卡和群内临时卡
    • data-logs.db - 跑团日志
    • data-censor.db - 敏感词库

    如果有某个数据库文件后输出了 false,说明该文件内容损坏。

    无法使用命令行

    如果你对使用命令行感到困难,可以这样做:

    打开记事本,将以下内容复制进去:

    shell
    sealdice-core /db-check
    +pause

    将它命名为 检查.cmd,保存在海豹的主程序所在目录,或者保存完复制过去。

    双击 检查.cmd 执行,之后同上。

    修复数据库 - 通过回滚备份

    对于大多数情况,我们推荐直接回滚到备份文件的状态。这种方法简便、容易成功。代价是损失从备份时间点到当前时间的数据。

    海豹核心默认每 12 小时进行一次备份,你可在 backups/ 目录下找到所有的备份文件。备份的时间可以直接查看文件创建时间,也可以从文件名中确定。

    将你损坏的数据库文件另外保存一份以防万一,并且确保你的硬盘有适当的空闲空间。

    在备份文件中找到最新的一份(如果你能确定导致你数据库出问题的事件,也可以找到该时间点前的最后一份),从中解压出数据库文件,替换掉你发现损坏的数据库。

    替换完成后,再进行一次完整性检查。如果仍然提示损坏,则使用更早的一份备份重新替换,直到数据库文件正常。

    修复数据库 - 通过数据库修复指令

    如果你熟悉 SQLite 3,或者没有可用的备份文件,尝试以下方案。

    这种办法有一定的操作难度,酌情进行使用。这里我们以 Windows 系统为例。

    首先,你需要安装或下载一个 SQLite 3 程序。

    你可以从其官网下载页,找到 Precompiled Binaries for Windows,下载其中的 sqlite-tools。确保你下载的是 3.40 以上版本,通常来说,直接下载最新版即可。

    下载完成后,找出 sqlite.exe 放到空目录备用。

    将损坏的数据文件(如 data.db)从海豹的 data/default/ 目录中复制出来,放在和 sqlite.exe 同一个目录。

    使用命令行工具打开这个目录,在此目录下,执行下面的指令:

    导出数据:

    shell
    sqlite3.exe data.db
    +.output 1.sql
    +.recover
    +.exit

    恢复数据到 a.db,并删除无效数据。

    shell
    sqlite3.exe a.db
    +.read 1.sql
    +delete from attrs_group where id is null;
    +delete from attrs_user where id is null;
    +delete from group_info where id is null;
    +delete from attrs_group_user where id is null;
    +delete from ban_info where id is null;
    +delete from group_player_info where id is null;
    +.exit

    接下来这个 a.db 就是修好的数据库了,将其复制回海豹的原路径,并改名回 data.db。

    `,30))])}const E=h(r,[["render",F]]);export{b as __pageData,E as default}; diff --git a/assets/deploy_platform-dingtalk.md.BpeARkl1.js b/assets/deploy_platform-dingtalk.md.BpeARkl1.js new file mode 100644 index 000000000..877826e5c --- /dev/null +++ b/assets/deploy_platform-dingtalk.md.BpeARkl1.js @@ -0,0 +1 @@ +import{_ as s,c as n,j as e,a,G as l,B as r,o as d}from"./chunks/framework.B1keMFNq.js";const v=JSON.parse('{"title":"钉钉","description":"","frontmatter":{"lang":"zh-cn","title":"钉钉"},"headers":[],"relativePath":"deploy/platform-dingtalk.md","filePath":"deploy/platform-dingtalk.md","lastUpdated":1712309998000}'),i={name:"deploy/platform-dingtalk.md"},p={id:"钉钉支持",tabindex:"-1"};function m(f,t,k,u,g,x){const o=r("Badge");return d(),n("div",null,[t[5]||(t[5]=e("h1",{id:"钉钉",tabindex:"-1"},[a("钉钉 "),e("a",{class:"header-anchor",href:"#钉钉","aria-label":'Permalink to "钉钉"'},"​")],-1)),t[6]||(t[6]=e("div",{class:"info custom-block"},[e("p",{class:"custom-block-title"},"本节内容"),e("p",null,"本节将包含你在钉钉平台接入海豹核心需要了解的特定内容。")],-1)),e("h2",p,[t[0]||(t[0]=a("钉钉支持 ")),l(o,{type:"tip",text:"v1.4.2"}),t[1]||(t[1]=a()),t[2]||(t[2]=e("a",{class:"header-anchor",href:"#钉钉支持","aria-label":'Permalink to "钉钉支持 "'},"​",-1))]),e("p",null,[t[3]||(t[3]=a("海豹从 ")),l(o,{type:"tip",text:"v1.4.2"}),t[4]||(t[4]=a(" 开始支持对接钉钉。"))]),t[7]||(t[7]=e("div",{class:"info custom-block"},[e("p",{class:"custom-block-title"},"信息"),e("p",null,"施工中……")],-1))])}const B=s(i,[["render",m]]);export{v as __pageData,B as default}; diff --git a/assets/deploy_platform-dingtalk.md.BpeARkl1.lean.js b/assets/deploy_platform-dingtalk.md.BpeARkl1.lean.js new file mode 100644 index 000000000..877826e5c --- /dev/null +++ b/assets/deploy_platform-dingtalk.md.BpeARkl1.lean.js @@ -0,0 +1 @@ +import{_ as s,c as n,j as e,a,G as l,B as r,o as d}from"./chunks/framework.B1keMFNq.js";const v=JSON.parse('{"title":"钉钉","description":"","frontmatter":{"lang":"zh-cn","title":"钉钉"},"headers":[],"relativePath":"deploy/platform-dingtalk.md","filePath":"deploy/platform-dingtalk.md","lastUpdated":1712309998000}'),i={name:"deploy/platform-dingtalk.md"},p={id:"钉钉支持",tabindex:"-1"};function m(f,t,k,u,g,x){const o=r("Badge");return d(),n("div",null,[t[5]||(t[5]=e("h1",{id:"钉钉",tabindex:"-1"},[a("钉钉 "),e("a",{class:"header-anchor",href:"#钉钉","aria-label":'Permalink to "钉钉"'},"​")],-1)),t[6]||(t[6]=e("div",{class:"info custom-block"},[e("p",{class:"custom-block-title"},"本节内容"),e("p",null,"本节将包含你在钉钉平台接入海豹核心需要了解的特定内容。")],-1)),e("h2",p,[t[0]||(t[0]=a("钉钉支持 ")),l(o,{type:"tip",text:"v1.4.2"}),t[1]||(t[1]=a()),t[2]||(t[2]=e("a",{class:"header-anchor",href:"#钉钉支持","aria-label":'Permalink to "钉钉支持 "'},"​",-1))]),e("p",null,[t[3]||(t[3]=a("海豹从 ")),l(o,{type:"tip",text:"v1.4.2"}),t[4]||(t[4]=a(" 开始支持对接钉钉。"))]),t[7]||(t[7]=e("div",{class:"info custom-block"},[e("p",{class:"custom-block-title"},"信息"),e("p",null,"施工中……")],-1))])}const B=s(i,[["render",m]]);export{v as __pageData,B as default}; diff --git a/assets/deploy_platform-discord.md.DU_wr0Ve.js b/assets/deploy_platform-discord.md.DU_wr0Ve.js new file mode 100644 index 000000000..dee4d7ce3 --- /dev/null +++ b/assets/deploy_platform-discord.md.DU_wr0Ve.js @@ -0,0 +1 @@ +import{_ as o,c as t,a6 as a,o as c}from"./chunks/framework.B1keMFNq.js";const m=JSON.parse('{"title":"Discord","description":"","frontmatter":{"lang":"zh-cn","title":"Discord"},"headers":[],"relativePath":"deploy/platform-discord.md","filePath":"deploy/platform-discord.md","lastUpdated":1712824762000}'),d={name:"deploy/platform-discord.md"};function r(s,e,i,n,l,p){return c(),t("div",null,e[0]||(e[0]=[a('

    Discord

    本节内容

    本节将包含你在 Discord 平台接入海豹核心需要了解的特定内容。

    获取 Token

    要获取用于连接海豹的 Token 之前,你需要建立好一个应用。登录 Discord 开发者平台,点击「New application」,按照要求填写应用名字并确认创建。完成后,点击侧边导航栏「bot」,打开「Privileged Gateway Intents」目录下全部三个开关:Presence IntentServer Members IntentMessage Content Intent。完成后点击「Save Changes」。

    建立好应用后上滑,点击 Reset Token,确认后点击 Copy 复制。

    连接海豹

    提示:代理模式

    如果你海豹所处的位置直接访问 Discord 服务有困难,我们提供了通过 HTTP 代理访问的途径。

    登录海豹并添加账号,选择「Discord账号」。在 Token 处粘贴你得到的 Token,点击连接。你的海豹应该可以正常在 Discord 运作了!

    邀请海豹

    你需要在侧边栏「Installation」选项卡中的「Authorization Methods」选项中选中 Guild Install 才能将你的机器人邀请至服务器中。

    要申请用于邀请海豹至 Discord 服务器的邀请链接,前往侧边导航栏「OAuth2」下方的子目录「URL Generator」,在 Scope 中选择 Bot 后在下方 Bot Permissions 中选择你希望海豹拥有的权限。完成后复制下方生成的 URL,复制到浏览器打开。

    注意:权限不足

    如果给予海豹的权限不充分,可能会导致无法发送消息或图片。若你不确定具体应该添加哪些权限,可直接添加 Administrator(管理员)权限。

    ',12)]))}const u=o(d,[["render",r]]);export{m as __pageData,u as default}; diff --git a/assets/deploy_platform-discord.md.DU_wr0Ve.lean.js b/assets/deploy_platform-discord.md.DU_wr0Ve.lean.js new file mode 100644 index 000000000..dee4d7ce3 --- /dev/null +++ b/assets/deploy_platform-discord.md.DU_wr0Ve.lean.js @@ -0,0 +1 @@ +import{_ as o,c as t,a6 as a,o as c}from"./chunks/framework.B1keMFNq.js";const m=JSON.parse('{"title":"Discord","description":"","frontmatter":{"lang":"zh-cn","title":"Discord"},"headers":[],"relativePath":"deploy/platform-discord.md","filePath":"deploy/platform-discord.md","lastUpdated":1712824762000}'),d={name:"deploy/platform-discord.md"};function r(s,e,i,n,l,p){return c(),t("div",null,e[0]||(e[0]=[a('

    Discord

    本节内容

    本节将包含你在 Discord 平台接入海豹核心需要了解的特定内容。

    获取 Token

    要获取用于连接海豹的 Token 之前,你需要建立好一个应用。登录 Discord 开发者平台,点击「New application」,按照要求填写应用名字并确认创建。完成后,点击侧边导航栏「bot」,打开「Privileged Gateway Intents」目录下全部三个开关:Presence IntentServer Members IntentMessage Content Intent。完成后点击「Save Changes」。

    建立好应用后上滑,点击 Reset Token,确认后点击 Copy 复制。

    连接海豹

    提示:代理模式

    如果你海豹所处的位置直接访问 Discord 服务有困难,我们提供了通过 HTTP 代理访问的途径。

    登录海豹并添加账号,选择「Discord账号」。在 Token 处粘贴你得到的 Token,点击连接。你的海豹应该可以正常在 Discord 运作了!

    邀请海豹

    你需要在侧边栏「Installation」选项卡中的「Authorization Methods」选项中选中 Guild Install 才能将你的机器人邀请至服务器中。

    要申请用于邀请海豹至 Discord 服务器的邀请链接,前往侧边导航栏「OAuth2」下方的子目录「URL Generator」,在 Scope 中选择 Bot 后在下方 Bot Permissions 中选择你希望海豹拥有的权限。完成后复制下方生成的 URL,复制到浏览器打开。

    注意:权限不足

    如果给予海豹的权限不充分,可能会导致无法发送消息或图片。若你不确定具体应该添加哪些权限,可直接添加 Administrator(管理员)权限。

    ',12)]))}const u=o(d,[["render",r]]);export{m as __pageData,u as default}; diff --git a/assets/deploy_platform-dodo.md.DMO1jstz.js b/assets/deploy_platform-dodo.md.DMO1jstz.js new file mode 100644 index 000000000..ec4c67976 --- /dev/null +++ b/assets/deploy_platform-dodo.md.DMO1jstz.js @@ -0,0 +1 @@ +import{_ as e,c as a,a6 as t,o as d}from"./chunks/framework.B1keMFNq.js";const h=JSON.parse('{"title":"DoDo","description":"","frontmatter":{"lang":"zh-cn","title":"DoDo"},"headers":[],"relativePath":"deploy/platform-dodo.md","filePath":"deploy/platform-dodo.md","lastUpdated":1714442589000}'),l={name:"deploy/platform-dodo.md"};function r(c,o,i,n,s,p){return d(),a("div",null,o[0]||(o[0]=[t('

    DoDo

    本节内容

    本节将包含你在 DoDo 平台接入海豹核心需要了解的特定内容。

    建立应用

    要在 DoDo 开发用于连接海豹的应用前,你需要前往 DoDo 开放平台注册账号并申请个人开发者。

    获取 Client ID 和 Bot Token

    成为开发者后你即可建立一个应用并获取 Client IDBot Token。在 DoDo 开放平台点击「创建应用」并选择开发应用,按照要求填写应用名字。完成后,点击应用卡片可在「凭证和基础信息」下找到 Client IDBot Token,复制并保存。

    连接海豹

    登录海豹并添加账号,选择「DoDo语音」。在 Client IDBot Token 下填写对应的信息,点击连接。你的海豹应该可以正常在 DoDo 运作了!

    邀请海豹

    要申请用于邀请海豹至 DoDo 超级群的邀请链接,前往侧边导航栏「机器人管理」,在下方「需要权限」下选择你希望海豹拥有的权限。完成后复制下方生成的 URL,复制到浏览器打开。

    注意:权限不足

    如果给予海豹的权限不充分,可能会导致无法发送消息或图片。若你不确定具体应该添加哪些权限,可直接添加 超级管理员权限。

    注意

    由于 DoDo 平台本身的问题,导致海豹无法响应直接发起的私聊。从群聊中触发的私聊,也即各种暗骰指令不受影响。

    如果 DoDo 平台做出适当的修正,海豹核心会第一时间跟进以解决这一问题。

    ',12)]))}const m=e(l,[["render",r]]);export{h as __pageData,m as default}; diff --git a/assets/deploy_platform-dodo.md.DMO1jstz.lean.js b/assets/deploy_platform-dodo.md.DMO1jstz.lean.js new file mode 100644 index 000000000..ec4c67976 --- /dev/null +++ b/assets/deploy_platform-dodo.md.DMO1jstz.lean.js @@ -0,0 +1 @@ +import{_ as e,c as a,a6 as t,o as d}from"./chunks/framework.B1keMFNq.js";const h=JSON.parse('{"title":"DoDo","description":"","frontmatter":{"lang":"zh-cn","title":"DoDo"},"headers":[],"relativePath":"deploy/platform-dodo.md","filePath":"deploy/platform-dodo.md","lastUpdated":1714442589000}'),l={name:"deploy/platform-dodo.md"};function r(c,o,i,n,s,p){return d(),a("div",null,o[0]||(o[0]=[t('

    DoDo

    本节内容

    本节将包含你在 DoDo 平台接入海豹核心需要了解的特定内容。

    建立应用

    要在 DoDo 开发用于连接海豹的应用前,你需要前往 DoDo 开放平台注册账号并申请个人开发者。

    获取 Client ID 和 Bot Token

    成为开发者后你即可建立一个应用并获取 Client IDBot Token。在 DoDo 开放平台点击「创建应用」并选择开发应用,按照要求填写应用名字。完成后,点击应用卡片可在「凭证和基础信息」下找到 Client IDBot Token,复制并保存。

    连接海豹

    登录海豹并添加账号,选择「DoDo语音」。在 Client IDBot Token 下填写对应的信息,点击连接。你的海豹应该可以正常在 DoDo 运作了!

    邀请海豹

    要申请用于邀请海豹至 DoDo 超级群的邀请链接,前往侧边导航栏「机器人管理」,在下方「需要权限」下选择你希望海豹拥有的权限。完成后复制下方生成的 URL,复制到浏览器打开。

    注意:权限不足

    如果给予海豹的权限不充分,可能会导致无法发送消息或图片。若你不确定具体应该添加哪些权限,可直接添加 超级管理员权限。

    注意

    由于 DoDo 平台本身的问题,导致海豹无法响应直接发起的私聊。从群聊中触发的私聊,也即各种暗骰指令不受影响。

    如果 DoDo 平台做出适当的修正,海豹核心会第一时间跟进以解决这一问题。

    ',12)]))}const m=e(l,[["render",r]]);export{h as __pageData,m as default}; diff --git a/assets/deploy_platform-kook.md.WlSEF7VQ.js b/assets/deploy_platform-kook.md.WlSEF7VQ.js new file mode 100644 index 000000000..add62db74 --- /dev/null +++ b/assets/deploy_platform-kook.md.WlSEF7VQ.js @@ -0,0 +1 @@ +import{_ as e,c as a,a6 as t,o as l}from"./chunks/framework.B1keMFNq.js";const h=JSON.parse('{"title":"KOOK","description":"","frontmatter":{"lang":"zh-cn","title":"KOOK"},"headers":[],"relativePath":"deploy/platform-kook.md","filePath":"deploy/platform-kook.md","lastUpdated":1712309998000}'),r={name:"deploy/platform-kook.md"};function n(c,o,p,s,d,i){return l(),a("div",null,o[0]||(o[0]=[t('

    KOOK

    本节内容

    本节将包含你在 KOOK(开黑啦)平台接入海豹核心需要了解的特定内容。

    获取 Token

    要获取用于连接海豹的 Token 之前,你需要建立好一个应用。登录 KOOK 开发者平台,点击「创建应用」,按照要求填写应用名字并确认创建。

    建立好应用后点击侧边导航栏「机器人」,在 Token 下找到 Token 并复制。

    连接海豹

    登录海豹并添加账号,选择「KOOK(开黑啦)账号」。在 Token 处粘贴你得到的 Token,点击连接。你的海豹应该可以正常在 KOOK 运作了!

    注意:几率性断连

    第一次接入 KOOK 的海豹有几率在显示连接后仍然离线。若你遇见这种情况,请尝试重新刷新 Token 并删除海豹 KOOK 账号使用新的 Token 重新添加。

    邀请海豹

    要申请用于邀请海豹至 KOOK 服务器的邀请链接,前往侧边导航栏「机器人」下方的子目录「邀请链接」,选择你希望海豹拥有的权限。完成后复制下方生成的 URL,复制到浏览器打开。

    注意:权限不足

    如果给予海豹的权限不充分,可能会导致无法发送消息或图片。若你不确定具体应该添加哪些权限,可直接添加管理员权限。

    ',11)]))}const m=e(r,[["render",n]]);export{h as __pageData,m as default}; diff --git a/assets/deploy_platform-kook.md.WlSEF7VQ.lean.js b/assets/deploy_platform-kook.md.WlSEF7VQ.lean.js new file mode 100644 index 000000000..add62db74 --- /dev/null +++ b/assets/deploy_platform-kook.md.WlSEF7VQ.lean.js @@ -0,0 +1 @@ +import{_ as e,c as a,a6 as t,o as l}from"./chunks/framework.B1keMFNq.js";const h=JSON.parse('{"title":"KOOK","description":"","frontmatter":{"lang":"zh-cn","title":"KOOK"},"headers":[],"relativePath":"deploy/platform-kook.md","filePath":"deploy/platform-kook.md","lastUpdated":1712309998000}'),r={name:"deploy/platform-kook.md"};function n(c,o,p,s,d,i){return l(),a("div",null,o[0]||(o[0]=[t('

    KOOK

    本节内容

    本节将包含你在 KOOK(开黑啦)平台接入海豹核心需要了解的特定内容。

    获取 Token

    要获取用于连接海豹的 Token 之前,你需要建立好一个应用。登录 KOOK 开发者平台,点击「创建应用」,按照要求填写应用名字并确认创建。

    建立好应用后点击侧边导航栏「机器人」,在 Token 下找到 Token 并复制。

    连接海豹

    登录海豹并添加账号,选择「KOOK(开黑啦)账号」。在 Token 处粘贴你得到的 Token,点击连接。你的海豹应该可以正常在 KOOK 运作了!

    注意:几率性断连

    第一次接入 KOOK 的海豹有几率在显示连接后仍然离线。若你遇见这种情况,请尝试重新刷新 Token 并删除海豹 KOOK 账号使用新的 Token 重新添加。

    邀请海豹

    要申请用于邀请海豹至 KOOK 服务器的邀请链接,前往侧边导航栏「机器人」下方的子目录「邀请链接」,选择你希望海豹拥有的权限。完成后复制下方生成的 URL,复制到浏览器打开。

    注意:权限不足

    如果给予海豹的权限不充分,可能会导致无法发送消息或图片。若你不确定具体应该添加哪些权限,可直接添加管理员权限。

    ',11)]))}const m=e(r,[["render",n]]);export{h as __pageData,m as default}; diff --git a/assets/deploy_platform-minecraft.md.BqGJAHax.js b/assets/deploy_platform-minecraft.md.BqGJAHax.js new file mode 100644 index 000000000..105dfdde2 --- /dev/null +++ b/assets/deploy_platform-minecraft.md.BqGJAHax.js @@ -0,0 +1,8 @@ +import{_ as c,c as o,a6 as l,G as e,w as s,B as p,o as d,j as a,a as i}from"./chunks/framework.B1keMFNq.js";const r="/sealdice-manual-next/assets/platform-minecraft_1.D8ohrEt5.png",h="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wgARCABRALMDASIAAhEBAxEB/8QAGgABAAMBAQEAAAAAAAAAAAAAAAIEBQMGAf/EABUBAQEAAAAAAAAAAAAAAAAAAAAB/9oADAMBAAIQAxAAAAH35EkwO1myzdKAUAAACNa2AAAEZCjK4SraFAAAAAAAAAArxl8LLMqRuSwVm885sraZOYepYlFPTyxeC+hRkAAAAVvtaRZq6HMr8tHmc7HMfONsV+0hm2+4AAAAAy+lr6ZVX0iPLXdxZ5a1vlAAAAAAAAAAAAAAAAAAA//EACYQAAICAQQBAwUBAAAAAAAAAAIDAQQAERITFDAgIUAFECIyUEP/2gAIAQEAAQUC+AWu0BaM+otdvN+bjZDkGyS+HMQUDXIQ644tO3+ZvOcW7eX2ghmfXuHd4l/r/vbc1WMtO17JckW3TjG2SP3blEhCiQaLVCa1vn3/AFM7MC0blggjXTwbDjBAuRiVNzqK7DkQxaai1p66eLOJegVa6iGukAkRmQqDEihQR4lSUNwWCR4LBIwYLM5B5PPMa4r2bfQTcOsYmqkfGtHWs9IxGvV47XnlS5kVgE/yv//EABYRAAMAAAAAAAAAAAAAAAAAAAARYP/aAAgBAwEBPwEcP//EABYRAAMAAAAAAAAAAAAAAAAAAAARYP/aAAgBAgEBPwEUP//EADUQAAIBAwICBQsDBQAAAAAAAAECEQADEhMhMWEEIjJBURAwQEJScXKBkbHBFCBQI2LR4fD/2gAIAQEABj8C9AMCTUl857XL3fvOMTzpl/VQ88ZXGlAaRjI60fYUF1FcDiY3+/okMAR4GsRfcDkB/ih8OJ51LQWmZG38Zsq8faoqdmHPykAgkceXmMZGXh5s/EfvS/CfxS4QEgl2K5R8prpDI1nCyAesO1tPyplRERnu45Ef2zv41pzaz1tIPG3CaRBcQFb2JYKYbafGnRrdxB7WUT7oNWQSBMgVd6R0ZNK3pHrDi/OmW3ilrTWfCZ2qy7rdXtKqm22wq6U0+wmLgTMk/WscUFzW0txynx/NCePLzJh1iZ7P+6yZgYEbChqW0eOGQmnvOqOxIIlezRUC2JMnJMgffTW3CuGMsMer9K0tJNP2cdvIBgsLw24VlbsWkPiqAVgtpAszAXvoEgSOFXNQIwYBcMIUAcqhbSKAZ2XzXrHc+sfGsfVMkT5GUHdePkZQd140cTMGDWnPWiY9A4d57uZ5Uu3c34pGW1qlZhTiV+YP4rpJToyE3MdxG/iKCNbOnr5Ytj2Y5bVea10RetjBWBt306WbAtXNUst4RsP+2q3c/Shf6cTt1T6BJtr9KlUUe4fxf//EACgQAQEAAgEDAgYCAwAAAAAAAAERACExQVFhcZEQMECBocFQ8CDR8f/aAAgBAQABPyH6BBCjoWVwX2SdV+nj+v8AlwhdNayfPjS+lL9v+4b5tli6i/sY4wR7wF2eVv0j9i5CjnIYIQmOo3+g/wBcZRetBpfF/jClmEbXRnbAHFGius+KqxgHl5+QMzIVvYfL/oe7P7vnCqiISZOkM8lwwpvJQ+T3bwi6p4eti7dOTK2x2CZul55JcM5/eh0uHkr0yxc60fdWPxmqLisu3RhR4E0O+/W4u9+9y+wGVQvV/OdVgRCHNk3z4JlanJLZA1w7H5y0F24pzQW/H4ZK0Z2iC+nySdYWyeW4GLYBHmeXtnIs2GPfBkIyawBp+2OqCE/RtXp16GaSu5OiB0BDNLTNJR9vh1PlM+z3c1AmUE+2JF/TA8p3xWqlJxceg8AUUOXdwvFCER4vr8pXbOwd12xolQoN0nf1+FNzgZxS/Cm5wM4pcCcj6upzlXxbx04+g2Hf1X5mCDTxTr4maA1BqZzD3VyvU0pGusN5Y6euS3xsE0uu90MV+D02aA7+eN5V7AhN04bxwnXC3NLFo21tadff6BYivKnKxPFA/i//2gAMAwEAAgADAAAAEPPN/PPPPPPPPPH/ALzzzzzzzzzzTdnzTVDzzzzwxhhBwyzzzzzxS42zzzzzzzzzzzzzzzzzzzz/xAAjEQACAQIFBQEAAAAAAAAAAAABEQAh8DAxQEHBEGGBodHh/9oACAEDAQE/EOgF4aEAWIqqMJ3v8MyKvMjiCfnusNL7PRuK/JPMNXe70n//xAAjEQABAwMCBwAAAAAAAAAAAAABABEhMMHwYdEQMUBBobHh/9oACAECAQE/EE6EQ1NyiXqPDrTO24QkOMgG/D7tmiExnNrigFfPVJlngCyEZo3Sf//EACUQAQEAAgIBBAEFAQAAAAAAAAERITEAUUEwQGFxgRBQkaHBIP/aAAgBAQABPxD2AYkmY8AuZ98P0FRR4n+Ir7tv/ZBJDFCvlBZxAjapgzYTCSW0y54ctaiTC9CqT6DFAoQbQSDiU5gYdY9oZ04AD5HfNKUCyVYCmZ75fOQ8KTCWOvxNfmhKk6RAEKYgYVyD4P2whgTSLSoPrvmbrbWlPAmZs0n4/Qmsj6oDAaYjHwnoIJjMbFBTYKOfh9NcnXBzQzeKmIatVuBMkaR4J1kYoSshFXWMvRY5miQY0nR1lhq0EYEs64E8srMzEPxaDWgGLRqmuIVqjCLtEsG6j9nC5sB0HybYLDwPI9VapBuVQLLKcGeJEiSfoJPF3BvHBEyQygWrLyRgUmeb5joAIdoCCFWgaGh8WAWSeCmCs3WCUeA75hEqHxX7fRnBBDhSKC765SVM+5Kr1f54SSYFz2Qx+uO/Q0ecK1Q0nE/jSEA2rAhhHJCLv7JaYMmAIFXFq8orz49bSYNbrfNc8qpgiRFEwoGO3vj5RWYDZQM4SHKXQiSJCGd4OuAD8CrKMfFN8ZU6sZXIUWXBqBOBPAMxIAGIxdzHpLWW5whACFDAcor4KcDUTBNuvu8yDWIWAykcI4/TINYhYDKRwjjlmoaiPBk8PnXAEx1jDUNk2OLfYfDGv9x/t+O/Ky0/qP8AL88ZYGakxSTGACuEUehmjRkLkmB8xqMZQVptkwNiUa0arqI3TG4hEZwjdeKCkespBTk0g+JxC1rlam0ARV6ewXDyolXy44gTylidUPj9r//Z",E="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wgARCABLAJEDASIAAhEBAxEB/8QAGgABAAMBAQEAAAAAAAAAAAAAAAMEBQIGAf/EABUBAQEAAAAAAAAAAAAAAAAAAAAB/9oADAMBAAIQAxAAAAH35SLnGRXs9GoX4BQAAAIUwAcditJKPn0AAAAAAAEckJx9liLDDoR6eTy6vTQY15NCtzmLu85UJuy+Uum8AB8+1CTvGupoRwVls2qVeNZnRWaznpXPQilAABBOKElsmbT3kudDrqx4d4nPQoAAAH//xAAnEAADAAECBQIHAAAAAAAAAAABAgMEERMABRASIBQwIiMxMjNAUP/aAAgBAQABBQLoCCC6A+5Se4EmEPTJKick7XC/FjfT32UOvp4gmasANB/CodJsr9smZh0m+5PjuHdW8oB3WaerjtzotUS06PN9weNvw8T+4945jitR1+btKWZJSqMvKSpwb5DSAAUz3lliiuNVnq8cdbUp4EBhsrwqBOk0WSVxpWIGg8WXuWc1knjdFpxtQ1nOaWOTMUlnTfGOZAEZW9y6OXKi05hJJA9w9miseDNzwiMHOKTlnl7mWPi7BXEouP6OjBeXaKNdP2//xAAXEQADAQAAAAAAAAAAAAAAAAABEEAx/9oACAEDAQE/AUL9h//EABkRAAIDAQAAAAAAAAAAAAAAAAABESBAMf/aAAgBAgEBPwEgelW5h//EADYQAAIBAwIDBAcGBwAAAAAAAAECEQADEiExIkFREBMyYQQgQnFygcEUMEBDkqEjM1BikbHh/9oACAEBAAY/AuyQZFQWE9J+9xJOPMdaOPhPs9vFnHRedK1z0YIZgYhacS2GUgCBOlNq06aE7fgCrCQaBFpAR0FMNeLeDUD+hsRyFGLjT8qOQ1BjtV8WWRs247MZGW8UDdcLO3nRZtqzyMTjGJmfdvQdDINOitLJo3lU4suscQ9Z/hPZd+L6CvzXBP8AcAgj9JqwyH0hrn5hacY/102q33/2n+SMcMvFzn9t6sm+fSChsribWW/OYpXuZ961kcWpXLzjSnUw76eBY50+Np2IA9nTWkv/AMV4uZXD3RB2jQVcW2hFy6WdCw0X31ezscPD4CWn9qCzd8dzjXI+1oOGrJvG7pZUkSRxeqQdjW7/AKzRjn1PYEQQo2rjB2jRiJ99QNvWKmdehigiCFHrW1YSMvoak2+H50vdiJU/SinGSN8UJpbxV1y5YE/SgMixZcgFUtp8qf0hAUOBOoocXFjlqpE+dM4DkqQCuDA6/KgevX7pSsaGdanBJ+P/AJQJCgAEaGaF4OFHPFYLe886S2bqMqSIa3I/xO9JxzjaFvbpXcd+MMWXwVx+kaqhRCi4x571d40BuY+G3A0Pv1oTv5fjP//EACkQAQABBAECBQQDAQAAAAAAAAERACExQVFhcRAgkaHwMECBwVCx0eH/2gAIAQEAAT8h8AQkwjmoXcZldH1QMCVrTjtUiIucB6eOQ+4+7/tQtiQInlhmgZys8AGWATmZ96Zs0lzhqVtn7DH0SUOukiI08CCmST6UBBAEH8GlvKpQJJCxGXpRmxnI4HXfwWCa2AKKO4eHR5kvHNT4RAc9hunTQcCvoZq7tHtKtu/FcnNRHtqgNJANkmpWyKECwxPbzfGceHttV2iwjrx/rD3pBMlTjvNzplzuhFgjfLdO/wAPvTlKkKY9TOM2qJ+FhBMwXot0pGV7ErNS0YP4IlSjUtstqIwqqlmJUmCxaabDTEFJHQ7iKl9mmVE2m4nKrRWgdBoiCDjlChKyGCzZmN9PKZUhDXxH90UJ3SyM+vhDcMCZqRNyWVxBud6AgAWA15gYAEMi9S5WiiDzXhm8oItyjcz58xTAIxt3p0JuctMSETGq4dUq9pJ1xRKIHYvdjanEaISyHUvRhOEyQNhSE7UyNEASzDKM/wBUYswJsR9H6SJE2yjSfunWFyFS5bCKZTocVNEkjAoiSB3KAaQOUcLYRz1xUo7Jp5VPCW0hnC3yX7zXVIkp7XS2MRSlj2kLMpJlu9RTRjdEC9vvP//aAAwDAQACAAMAAAAQ8S/88888888O88888888oUrWTgwc88obg3/8s8888ffcv88888//xAAjEQACAQIEBwAAAAAAAAAAAAABEQAh8CAwQVEQMWGBkbHR/9oACAEDAQE/EIzCYeSsvWDS9vvuO+0N+OBo71WBzpAGA3gLDxoc46uClRaiosX/xAAiEQACAQIGAwEAAAAAAAAAAAABEQAh8CAwMUFR0WGx4ZH/2gAIAQIBAT8QiQEVks5ZNHd8w6nx969RUvkiC/2Ct7/NJVfg9esLhKE8QhFXxje0QShrrbfcJZeL/8QAJRABAQADAAIBAgcBAAAAAAAAAREAITFBUWEQIDBAcYGRofBQ/9oACAEBAAE/EPobSbWB7ExSfXACpZbLq/iszFJnbd7TLOycXKfcgHvPpfJy76t+m6UUXeJFIG/IHjTWCXWHF6GWvgIXzpHgvp6cIoMI2hSios2pPJikKat+JR/IHCBXxMJBQ+k+QHCJAKmgDqE0BDJXGD0HP+GuFSSxBTEk61osaP35Rgt0dBaSwc/rn0owsLDrnLKd/ePA/H0HQgKlKYR2US/Gb2HJWoaKxSw0bdZAKdqlYACpUABVYYNDhbEuT1BGbTfN5viYKIRRFAoREQREcJeszwBZHXqzPkd/oQPaUfIj9yj/AOqxduK4CjwYaCb0KC3UK+hNzErqEj1PI0wXGi1IW3+7+ThcuWpab3vn5vNxBKRcIABCOwWuzcRMHCC2muju3mM15fy6SmsBMnvHE8ji7FlAoFVWuKRlkgqxXGVXRiOQAidlpcO+Bb047D5UqBPKCKGxhG7LbggxQdWm7GE+yhYDsokcpjT57dFQLUvAP2+nVnhQfqq5ZWYyt+gjc6o2+2hfUCgDgHg+5uFEMD6QT5EcD8WAq9qq7Vaq1VV392wgtiWMbN9MFAawISse78ahN7aifi1S6Cd/3cJSGtlm08aHatNbLFUHX86hA01NmW5Q5VKSERx3xS9Kaoha6iSnmwjz3ifMJhoQgSm2mz2YVro6QFA0hkUhrhEkABQ+wEfhKfhWFWLKecD/AEypKbx3dQZrW63cOI4EBtb7n84BNF7BI0noKnhMWzVVYYGExU8Bno3zzC+bLeePeIITbyEGLX0IeAmRyjBIIKUj0E3rYh+EYuSLEElNM76JR4DvmESofFf1fzn/2Q==",k="/sealdice-manual-next/assets/platform-minecraft_4.CXIn9Ufb.jpg",g="/sealdice-manual-next/assets/platform-minecraft_5.1vLiGW8n.jpg",B="/sealdice-manual-next/assets/platform-minecraft_6.BVAQbR-9.jpg",b=JSON.parse('{"title":"Minecraft","description":"","frontmatter":{"lang":"zh-cn","title":"Minecraft"},"headers":[],"relativePath":"deploy/platform-minecraft.md","filePath":"deploy/platform-minecraft.md","lastUpdated":1728702230000}'),C={name:"deploy/platform-minecraft.md"};function u(m,A,y,f,Q,M){const t=p("PluginTabsTab"),n=p("PluginTabs");return d(),o("div",null,[A[6]||(A[6]=l('

    Minecraft

    本节内容

    本节将包含你在 Minecraft 服务端接入海豹核心需要了解的特定内容。

    Minecraft 支持

    海豹核心支持与安装了 sealdice-minecraft 插件的 Minecraft 服务器(如 Paper、Purpur)进行对接。

    架设 Minecraft 服务端

    下面以 Windows 平台为例,简单介绍 Minecraft 服务端的架设。

    架设 Minecraft 服务器首先需要根据选定对应的 Java 版本。

    • 服务端版本 1.0 - 1.11.x 可以使用 Java 6Java 7,但推荐使用 Java 8
    • 服务端版本 1.12(17w13a) - 1.16.5(1.17-21w18a),需要使用 Java 8
    • 服务端版本 1.17(21w19a) - 1.17.1 需要使用 Java 16
    • 服务端版本 1.18(1.18-pre2) 及以上版本需要使用 Java 17 及以上。
    • 此为一般情况,部分服务端会推荐对应 Java 版本,请按需安装对应 Java 版本。

    注意

    sealdice-minecraft 插件需要 Java 18 及以上的 Java 版本,如需要在低版本运行请自行验证服务端与 Java 版本是否匹配。

    获取服务端核心

    ',10)),e(n,{sharedStateKey:"mc-server-core"},{default:s(()=>[e(t,{label:"Paper"},{default:s(()=>A[0]||(A[0]=[a("p",null,[i("前往 "),a("a",{href:"https://papermc.io",target:"_blank",rel:"noreferrer"},"Paper MC"),i(" 下载对应版本的服务端核心文件。")],-1)])),_:1}),e(t,{label:"Purpur"},{default:s(()=>A[1]||(A[1]=[a("p",null,[i("前往 "),a("a",{href:"https://purpurmc.org",target:"_blank",rel:"noreferrer"},"Purpur MC"),i(" 下载对应版本的服务端核心文件。")],-1)])),_:1}),e(t,{label:"Spigot(插件不兼容)"},{default:s(()=>A[2]||(A[2]=[a("div",{class:"danger custom-block"},[a("p",{class:"custom-block-title"},"危险"),a("p",null,[a("code",null,"sealdice-minecraft"),i(" 插件不兼容 Spigot/Bukkit 服务端。")])],-1),a("p",null,[i("前往 "),a("a",{href:"https://www.spigotmc.org",target:"_blank",rel:"noreferrer"},"Spigot MC"),i(" 寻找最新的 BulidTools,选择要构建的版本进行编译,获得服务端核心文件。")],-1),a("p",null,[a("img",{src:r,alt:"BuildToolsUI"})],-1),a("p",null,[i("在 UI 左上角的 "),a("code",null,"Select Version"),i(" 选择版本。")],-1),a("p",null,[i("在 "),a("code",null,"Output Directory(Optional)"),i(" 选择编译文件输出位置。")],-1),a("p",null,[i("点击右下角的 "),a("code",null,"Compile"),i(" 进行编译。")],-1)])),_:1}),e(t,{label:"Bukkit(插件不兼容)"},{default:s(()=>A[3]||(A[3]=[a("div",{class:"danger custom-block"},[a("p",{class:"custom-block-title"},"危险"),a("p",null,[a("code",null,"sealdice-minecraft"),i(" 插件不兼容 Spigot/Bukkit 服务端。")])],-1),a("p",null,[i("在 "),a("a",{href:"https://www.getbukkit.org",target:"_blank",rel:"noreferrer"},"Get Bukkit"),i(" 直接下载对应版本的服务端核心文件。")],-1)])),_:1})]),_:1}),A[7]||(A[7]=l('

    启动服务端

    新建一个空白文件夹,放入服务端核心,编写一个简单的 bat 启动脚本(可新建一个 txt 文件后,修改文件后缀)。

    Create Bat 1

    启动脚本内容如下:

    cmd
    @echo
    +java -Xms2G -Xmx2G -jar spigot-1.20.4.jar nogui
    • -Xms2G -Xmx2G:此项设定服务器占用的内存,按照需求更换数字,例如 1024m6G
    • -jarnogui 之间的 spigot-1.20.4.jar 更改为文件夹内对应的服务端核心文件文件名。

    退出并保存文件,将该文件后缀改为 .bat。修改后文件夹如下所示:

    Create Bat 2

    启动 start.bat 文件,即可开始运行服务端。

    提示

    首次打开 start.bat 启动脚本,会下载 mojang_1.20.4.jar 等一系列的文件并创建文件夹,在下载和创建完成后会首次启动会自行关闭。

    打开在文件夹内新创建的 eula.txt,将 eula=false 改为 eula=true

    text
    ...
    +#By changing the setting below to TRUE you are indicating your agreement to our EULA (https://aka.ms/MinecraftEULA).
    +#Fri Feb 30 00:00:01 HKT 2024
    +eula=true  # 请把该项修改为 true
    +...

    再次启动脚本 start.bat

    当出现 Done (7.837s)! For help, type "help" 时,服务器首次启动完毕。

    在 CMD 内键入 stop,等待服务器保存并关闭,即可进入下一个步骤。

    放入 sealdice-minecraft 插件

    前往 Sealdice Minecraft GitHub Release 下载 jar 文件放进 plugins 文件夹。

    再次运行脚本 start.bat 以启动服务器。

    在服务器日志中出现:

    cmd
    [00:00:07 INFO]: [SealDicePlugin] Enabling SealDicePlugin v1.0.2*
    +[00:00:07 INFO]: [SealDicePlugin] ChatServer started on port: 8887
    +[00:00:07 INFO]: [SealDicePlugin] Server started!

    证明 sealdice-minecraft 插件已经正确安装,并且插件将会开启一个端口 8887 供海豹使用。

    使用在控制台使用 sealport [端口] 或在游戏中使用 /sealport [端口] 可以修改连接端口。

    至此,Minecraft 服务端的准备工作已经完毕。

    海豹核心与 Minecraft 服务端连接

    账号设置 页,选择 账号类型Minecraft(Paper)

    SealDice UI

    URL 的填写请根据下列情况选择:

    ',27)),e(n,null,{default:s(()=>[e(t,{label:"部署在同一台服务器"},{default:s(()=>A[4]||(A[4]=[a("p",null,"海豹核心与 Minecraft 服务端部署在同一台服务器:",-1),a("p",null,[a("img",{src:g,alt:"SealDice UI"})],-1),a("p",null,[i("此时输入使用 "),a("code",null,"localhost:[端口]"),i(" 即可完成连接,默认端口为 "),a("code",null,"8887"),i("。")],-1)])),_:1}),e(t,{label:"部署在不同的服务器"},{default:s(()=>A[5]||(A[5]=[a("p",null,"海豹核心与 Minecraft 服务端部署在不同的服务器:",-1),a("p",null,[a("img",{src:B,alt:"SealDice UI"})],-1),a("p",null,[i("此时输入 "),a("code",null,"IP:[端口]"),i(",IP 为 Minecraft 服务端所在服务器的 IP 地址。")],-1),a("div",{class:"tip custom-block"},[a("p",{class:"custom-block-title"},"提示"),a("p",null,"请注意,大多数服务器不会默认开放所需要的端口,需要自行开放。")],-1)])),_:1})]),_:1}),A[8]||(A[8]=l('

    当服务器后台日志中出现:

    cmd
    [00:00:10 INFO]: [SealDicePlugin] 0:0:0:0:0:0:0:1 entered the room!

    证明海豹核心已和 Minecraft 服务端连接完毕。

    sealdice-minecraft 插件的使用

    指令

    提供两个插件指令:

    sealdice [文本]

    使用该指令的玩家视为向海豹私聊发送了一条消息。

    但是命令方块和控制台使用该指令会被视为公屏发送。

    sealport [端口]

    使用该指令需要 OP 权限。该指令用于设置与海豹连接的端口。

    权限

    提供一个权限:

    sealdice.admin

    该权限允许/禁止玩家设置与海豹连接的端口,默认为 false

    ',15))])}const F=c(C,[["render",u]]);export{b as __pageData,F as default}; diff --git a/assets/deploy_platform-minecraft.md.BqGJAHax.lean.js b/assets/deploy_platform-minecraft.md.BqGJAHax.lean.js new file mode 100644 index 000000000..105dfdde2 --- /dev/null +++ b/assets/deploy_platform-minecraft.md.BqGJAHax.lean.js @@ -0,0 +1,8 @@ +import{_ as c,c as o,a6 as l,G as e,w as s,B as p,o as d,j as a,a as i}from"./chunks/framework.B1keMFNq.js";const r="/sealdice-manual-next/assets/platform-minecraft_1.D8ohrEt5.png",h="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wgARCABRALMDASIAAhEBAxEB/8QAGgABAAMBAQEAAAAAAAAAAAAAAAIEBQMGAf/EABUBAQEAAAAAAAAAAAAAAAAAAAAB/9oADAMBAAIQAxAAAAH35EkwO1myzdKAUAAACNa2AAAEZCjK4SraFAAAAAAAAAArxl8LLMqRuSwVm885sraZOYepYlFPTyxeC+hRkAAAAVvtaRZq6HMr8tHmc7HMfONsV+0hm2+4AAAAAy+lr6ZVX0iPLXdxZ5a1vlAAAAAAAAAAAAAAAAAAA//EACYQAAICAQQBAwUBAAAAAAAAAAIDAQQAERITFDAgIUAFECIyUEP/2gAIAQEAAQUC+AWu0BaM+otdvN+bjZDkGyS+HMQUDXIQ644tO3+ZvOcW7eX2ghmfXuHd4l/r/vbc1WMtO17JckW3TjG2SP3blEhCiQaLVCa1vn3/AFM7MC0blggjXTwbDjBAuRiVNzqK7DkQxaai1p66eLOJegVa6iGukAkRmQqDEihQR4lSUNwWCR4LBIwYLM5B5PPMa4r2bfQTcOsYmqkfGtHWs9IxGvV47XnlS5kVgE/yv//EABYRAAMAAAAAAAAAAAAAAAAAAAARYP/aAAgBAwEBPwEcP//EABYRAAMAAAAAAAAAAAAAAAAAAAARYP/aAAgBAgEBPwEUP//EADUQAAIBAwICBQsDBQAAAAAAAAECEQADEhMhMWEEIjJBURAwQEJScXKBkbHBFCBQI2LR4fD/2gAIAQEABj8C9AMCTUl857XL3fvOMTzpl/VQ88ZXGlAaRjI60fYUF1FcDiY3+/okMAR4GsRfcDkB/ih8OJ51LQWmZG38Zsq8faoqdmHPykAgkceXmMZGXh5s/EfvS/CfxS4QEgl2K5R8prpDI1nCyAesO1tPyplRERnu45Ef2zv41pzaz1tIPG3CaRBcQFb2JYKYbafGnRrdxB7WUT7oNWQSBMgVd6R0ZNK3pHrDi/OmW3ilrTWfCZ2qy7rdXtKqm22wq6U0+wmLgTMk/WscUFzW0txynx/NCePLzJh1iZ7P+6yZgYEbChqW0eOGQmnvOqOxIIlezRUC2JMnJMgffTW3CuGMsMer9K0tJNP2cdvIBgsLw24VlbsWkPiqAVgtpAszAXvoEgSOFXNQIwYBcMIUAcqhbSKAZ2XzXrHc+sfGsfVMkT5GUHdePkZQd140cTMGDWnPWiY9A4d57uZ5Uu3c34pGW1qlZhTiV+YP4rpJToyE3MdxG/iKCNbOnr5Ytj2Y5bVea10RetjBWBt306WbAtXNUst4RsP+2q3c/Shf6cTt1T6BJtr9KlUUe4fxf//EACgQAQEAAgEDAgYCAwAAAAAAAAERACExQVFhcZEQMECBocFQ8CDR8f/aAAgBAQABPyH6BBCjoWVwX2SdV+nj+v8AlwhdNayfPjS+lL9v+4b5tli6i/sY4wR7wF2eVv0j9i5CjnIYIQmOo3+g/wBcZRetBpfF/jClmEbXRnbAHFGius+KqxgHl5+QMzIVvYfL/oe7P7vnCqiISZOkM8lwwpvJQ+T3bwi6p4eti7dOTK2x2CZul55JcM5/eh0uHkr0yxc60fdWPxmqLisu3RhR4E0O+/W4u9+9y+wGVQvV/OdVgRCHNk3z4JlanJLZA1w7H5y0F24pzQW/H4ZK0Z2iC+nySdYWyeW4GLYBHmeXtnIs2GPfBkIyawBp+2OqCE/RtXp16GaSu5OiB0BDNLTNJR9vh1PlM+z3c1AmUE+2JF/TA8p3xWqlJxceg8AUUOXdwvFCER4vr8pXbOwd12xolQoN0nf1+FNzgZxS/Cm5wM4pcCcj6upzlXxbx04+g2Hf1X5mCDTxTr4maA1BqZzD3VyvU0pGusN5Y6euS3xsE0uu90MV+D02aA7+eN5V7AhN04bxwnXC3NLFo21tadff6BYivKnKxPFA/i//2gAMAwEAAgADAAAAEPPN/PPPPPPPPPH/ALzzzzzzzzzzTdnzTVDzzzzwxhhBwyzzzzzxS42zzzzzzzzzzzzzzzzzzzz/xAAjEQACAQIFBQEAAAAAAAAAAAABEQAh8DAxQEHBEGGBodHh/9oACAEDAQE/EOgF4aEAWIqqMJ3v8MyKvMjiCfnusNL7PRuK/JPMNXe70n//xAAjEQABAwMCBwAAAAAAAAAAAAABABEhMMHwYdEQMUBBobHh/9oACAECAQE/EE6EQ1NyiXqPDrTO24QkOMgG/D7tmiExnNrigFfPVJlngCyEZo3Sf//EACUQAQEAAgIBBAEFAQAAAAAAAAERITEAUUEwQGFxgRBQkaHBIP/aAAgBAQABPxD2AYkmY8AuZ98P0FRR4n+Ir7tv/ZBJDFCvlBZxAjapgzYTCSW0y54ctaiTC9CqT6DFAoQbQSDiU5gYdY9oZ04AD5HfNKUCyVYCmZ75fOQ8KTCWOvxNfmhKk6RAEKYgYVyD4P2whgTSLSoPrvmbrbWlPAmZs0n4/Qmsj6oDAaYjHwnoIJjMbFBTYKOfh9NcnXBzQzeKmIatVuBMkaR4J1kYoSshFXWMvRY5miQY0nR1lhq0EYEs64E8srMzEPxaDWgGLRqmuIVqjCLtEsG6j9nC5sB0HybYLDwPI9VapBuVQLLKcGeJEiSfoJPF3BvHBEyQygWrLyRgUmeb5joAIdoCCFWgaGh8WAWSeCmCs3WCUeA75hEqHxX7fRnBBDhSKC765SVM+5Kr1f54SSYFz2Qx+uO/Q0ecK1Q0nE/jSEA2rAhhHJCLv7JaYMmAIFXFq8orz49bSYNbrfNc8qpgiRFEwoGO3vj5RWYDZQM4SHKXQiSJCGd4OuAD8CrKMfFN8ZU6sZXIUWXBqBOBPAMxIAGIxdzHpLWW5whACFDAcor4KcDUTBNuvu8yDWIWAykcI4/TINYhYDKRwjjlmoaiPBk8PnXAEx1jDUNk2OLfYfDGv9x/t+O/Ky0/qP8AL88ZYGakxSTGACuEUehmjRkLkmB8xqMZQVptkwNiUa0arqI3TG4hEZwjdeKCkespBTk0g+JxC1rlam0ARV6ewXDyolXy44gTylidUPj9r//Z",E="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wgARCABLAJEDASIAAhEBAxEB/8QAGgABAAMBAQEAAAAAAAAAAAAAAAMEBQIGAf/EABUBAQEAAAAAAAAAAAAAAAAAAAAB/9oADAMBAAIQAxAAAAH35SLnGRXs9GoX4BQAAAIUwAcditJKPn0AAAAAAAEckJx9liLDDoR6eTy6vTQY15NCtzmLu85UJuy+Uum8AB8+1CTvGupoRwVls2qVeNZnRWaznpXPQilAABBOKElsmbT3kudDrqx4d4nPQoAAAH//xAAnEAADAAECBQIHAAAAAAAAAAABAgMEERMABRASIBQwIiMxMjNAUP/aAAgBAQABBQLoCCC6A+5Se4EmEPTJKick7XC/FjfT32UOvp4gmasANB/CodJsr9smZh0m+5PjuHdW8oB3WaerjtzotUS06PN9weNvw8T+4945jitR1+btKWZJSqMvKSpwb5DSAAUz3lliiuNVnq8cdbUp4EBhsrwqBOk0WSVxpWIGg8WXuWc1knjdFpxtQ1nOaWOTMUlnTfGOZAEZW9y6OXKi05hJJA9w9miseDNzwiMHOKTlnl7mWPi7BXEouP6OjBeXaKNdP2//xAAXEQADAQAAAAAAAAAAAAAAAAABEEAx/9oACAEDAQE/AUL9h//EABkRAAIDAQAAAAAAAAAAAAAAAAABESBAMf/aAAgBAgEBPwEgelW5h//EADYQAAIBAwIDBAcGBwAAAAAAAAECEQADEiExIkFREBMyYQQgQnFygcEUMEBDkqEjM1BikbHh/9oACAEBAAY/AuyQZFQWE9J+9xJOPMdaOPhPs9vFnHRedK1z0YIZgYhacS2GUgCBOlNq06aE7fgCrCQaBFpAR0FMNeLeDUD+hsRyFGLjT8qOQ1BjtV8WWRs247MZGW8UDdcLO3nRZtqzyMTjGJmfdvQdDINOitLJo3lU4suscQ9Z/hPZd+L6CvzXBP8AcAgj9JqwyH0hrn5hacY/102q33/2n+SMcMvFzn9t6sm+fSChsribWW/OYpXuZ961kcWpXLzjSnUw76eBY50+Np2IA9nTWkv/AMV4uZXD3RB2jQVcW2hFy6WdCw0X31ezscPD4CWn9qCzd8dzjXI+1oOGrJvG7pZUkSRxeqQdjW7/AKzRjn1PYEQQo2rjB2jRiJ99QNvWKmdehigiCFHrW1YSMvoak2+H50vdiJU/SinGSN8UJpbxV1y5YE/SgMixZcgFUtp8qf0hAUOBOoocXFjlqpE+dM4DkqQCuDA6/KgevX7pSsaGdanBJ+P/AJQJCgAEaGaF4OFHPFYLe886S2bqMqSIa3I/xO9JxzjaFvbpXcd+MMWXwVx+kaqhRCi4x571d40BuY+G3A0Pv1oTv5fjP//EACkQAQABBAECBQQDAQAAAAAAAAERACExQVFhcRAgkaHwMECBwVCx0eH/2gAIAQEAAT8h8AQkwjmoXcZldH1QMCVrTjtUiIucB6eOQ+4+7/tQtiQInlhmgZys8AGWATmZ96Zs0lzhqVtn7DH0SUOukiI08CCmST6UBBAEH8GlvKpQJJCxGXpRmxnI4HXfwWCa2AKKO4eHR5kvHNT4RAc9hunTQcCvoZq7tHtKtu/FcnNRHtqgNJANkmpWyKECwxPbzfGceHttV2iwjrx/rD3pBMlTjvNzplzuhFgjfLdO/wAPvTlKkKY9TOM2qJ+FhBMwXot0pGV7ErNS0YP4IlSjUtstqIwqqlmJUmCxaabDTEFJHQ7iKl9mmVE2m4nKrRWgdBoiCDjlChKyGCzZmN9PKZUhDXxH90UJ3SyM+vhDcMCZqRNyWVxBud6AgAWA15gYAEMi9S5WiiDzXhm8oItyjcz58xTAIxt3p0JuctMSETGq4dUq9pJ1xRKIHYvdjanEaISyHUvRhOEyQNhSE7UyNEASzDKM/wBUYswJsR9H6SJE2yjSfunWFyFS5bCKZTocVNEkjAoiSB3KAaQOUcLYRz1xUo7Jp5VPCW0hnC3yX7zXVIkp7XS2MRSlj2kLMpJlu9RTRjdEC9vvP//aAAwDAQACAAMAAAAQ8S/88888888O88888888oUrWTgwc88obg3/8s8888ffcv88888//xAAjEQACAQIEBwAAAAAAAAAAAAABEQAh8CAwQVEQMWGBkbHR/9oACAEDAQE/EIzCYeSsvWDS9vvuO+0N+OBo71WBzpAGA3gLDxoc46uClRaiosX/xAAiEQACAQIGAwEAAAAAAAAAAAABEQAh8CAwMUFR0WGx4ZH/2gAIAQIBAT8QiQEVks5ZNHd8w6nx969RUvkiC/2Ct7/NJVfg9esLhKE8QhFXxje0QShrrbfcJZeL/8QAJRABAQADAAIBAgcBAAAAAAAAAREAITFBUWEQIDBAcYGRofBQ/9oACAEBAAE/EPobSbWB7ExSfXACpZbLq/iszFJnbd7TLOycXKfcgHvPpfJy76t+m6UUXeJFIG/IHjTWCXWHF6GWvgIXzpHgvp6cIoMI2hSios2pPJikKat+JR/IHCBXxMJBQ+k+QHCJAKmgDqE0BDJXGD0HP+GuFSSxBTEk61osaP35Rgt0dBaSwc/rn0owsLDrnLKd/ePA/H0HQgKlKYR2US/Gb2HJWoaKxSw0bdZAKdqlYACpUABVYYNDhbEuT1BGbTfN5viYKIRRFAoREQREcJeszwBZHXqzPkd/oQPaUfIj9yj/AOqxduK4CjwYaCb0KC3UK+hNzErqEj1PI0wXGi1IW3+7+ThcuWpab3vn5vNxBKRcIABCOwWuzcRMHCC2muju3mM15fy6SmsBMnvHE8ji7FlAoFVWuKRlkgqxXGVXRiOQAidlpcO+Bb047D5UqBPKCKGxhG7LbggxQdWm7GE+yhYDsokcpjT57dFQLUvAP2+nVnhQfqq5ZWYyt+gjc6o2+2hfUCgDgHg+5uFEMD6QT5EcD8WAq9qq7Vaq1VV392wgtiWMbN9MFAawISse78ahN7aifi1S6Cd/3cJSGtlm08aHatNbLFUHX86hA01NmW5Q5VKSERx3xS9Kaoha6iSnmwjz3ifMJhoQgSm2mz2YVro6QFA0hkUhrhEkABQ+wEfhKfhWFWLKecD/AEypKbx3dQZrW63cOI4EBtb7n84BNF7BI0noKnhMWzVVYYGExU8Bno3zzC+bLeePeIITbyEGLX0IeAmRyjBIIKUj0E3rYh+EYuSLEElNM76JR4DvmESofFf1fzn/2Q==",k="/sealdice-manual-next/assets/platform-minecraft_4.CXIn9Ufb.jpg",g="/sealdice-manual-next/assets/platform-minecraft_5.1vLiGW8n.jpg",B="/sealdice-manual-next/assets/platform-minecraft_6.BVAQbR-9.jpg",b=JSON.parse('{"title":"Minecraft","description":"","frontmatter":{"lang":"zh-cn","title":"Minecraft"},"headers":[],"relativePath":"deploy/platform-minecraft.md","filePath":"deploy/platform-minecraft.md","lastUpdated":1728702230000}'),C={name:"deploy/platform-minecraft.md"};function u(m,A,y,f,Q,M){const t=p("PluginTabsTab"),n=p("PluginTabs");return d(),o("div",null,[A[6]||(A[6]=l('

    Minecraft

    本节内容

    本节将包含你在 Minecraft 服务端接入海豹核心需要了解的特定内容。

    Minecraft 支持

    海豹核心支持与安装了 sealdice-minecraft 插件的 Minecraft 服务器(如 Paper、Purpur)进行对接。

    架设 Minecraft 服务端

    下面以 Windows 平台为例,简单介绍 Minecraft 服务端的架设。

    架设 Minecraft 服务器首先需要根据选定对应的 Java 版本。

    • 服务端版本 1.0 - 1.11.x 可以使用 Java 6Java 7,但推荐使用 Java 8
    • 服务端版本 1.12(17w13a) - 1.16.5(1.17-21w18a),需要使用 Java 8
    • 服务端版本 1.17(21w19a) - 1.17.1 需要使用 Java 16
    • 服务端版本 1.18(1.18-pre2) 及以上版本需要使用 Java 17 及以上。
    • 此为一般情况,部分服务端会推荐对应 Java 版本,请按需安装对应 Java 版本。

    注意

    sealdice-minecraft 插件需要 Java 18 及以上的 Java 版本,如需要在低版本运行请自行验证服务端与 Java 版本是否匹配。

    获取服务端核心

    ',10)),e(n,{sharedStateKey:"mc-server-core"},{default:s(()=>[e(t,{label:"Paper"},{default:s(()=>A[0]||(A[0]=[a("p",null,[i("前往 "),a("a",{href:"https://papermc.io",target:"_blank",rel:"noreferrer"},"Paper MC"),i(" 下载对应版本的服务端核心文件。")],-1)])),_:1}),e(t,{label:"Purpur"},{default:s(()=>A[1]||(A[1]=[a("p",null,[i("前往 "),a("a",{href:"https://purpurmc.org",target:"_blank",rel:"noreferrer"},"Purpur MC"),i(" 下载对应版本的服务端核心文件。")],-1)])),_:1}),e(t,{label:"Spigot(插件不兼容)"},{default:s(()=>A[2]||(A[2]=[a("div",{class:"danger custom-block"},[a("p",{class:"custom-block-title"},"危险"),a("p",null,[a("code",null,"sealdice-minecraft"),i(" 插件不兼容 Spigot/Bukkit 服务端。")])],-1),a("p",null,[i("前往 "),a("a",{href:"https://www.spigotmc.org",target:"_blank",rel:"noreferrer"},"Spigot MC"),i(" 寻找最新的 BulidTools,选择要构建的版本进行编译,获得服务端核心文件。")],-1),a("p",null,[a("img",{src:r,alt:"BuildToolsUI"})],-1),a("p",null,[i("在 UI 左上角的 "),a("code",null,"Select Version"),i(" 选择版本。")],-1),a("p",null,[i("在 "),a("code",null,"Output Directory(Optional)"),i(" 选择编译文件输出位置。")],-1),a("p",null,[i("点击右下角的 "),a("code",null,"Compile"),i(" 进行编译。")],-1)])),_:1}),e(t,{label:"Bukkit(插件不兼容)"},{default:s(()=>A[3]||(A[3]=[a("div",{class:"danger custom-block"},[a("p",{class:"custom-block-title"},"危险"),a("p",null,[a("code",null,"sealdice-minecraft"),i(" 插件不兼容 Spigot/Bukkit 服务端。")])],-1),a("p",null,[i("在 "),a("a",{href:"https://www.getbukkit.org",target:"_blank",rel:"noreferrer"},"Get Bukkit"),i(" 直接下载对应版本的服务端核心文件。")],-1)])),_:1})]),_:1}),A[7]||(A[7]=l('

    启动服务端

    新建一个空白文件夹,放入服务端核心,编写一个简单的 bat 启动脚本(可新建一个 txt 文件后,修改文件后缀)。

    Create Bat 1

    启动脚本内容如下:

    cmd
    @echo
    +java -Xms2G -Xmx2G -jar spigot-1.20.4.jar nogui
    • -Xms2G -Xmx2G:此项设定服务器占用的内存,按照需求更换数字,例如 1024m6G
    • -jarnogui 之间的 spigot-1.20.4.jar 更改为文件夹内对应的服务端核心文件文件名。

    退出并保存文件,将该文件后缀改为 .bat。修改后文件夹如下所示:

    Create Bat 2

    启动 start.bat 文件,即可开始运行服务端。

    提示

    首次打开 start.bat 启动脚本,会下载 mojang_1.20.4.jar 等一系列的文件并创建文件夹,在下载和创建完成后会首次启动会自行关闭。

    打开在文件夹内新创建的 eula.txt,将 eula=false 改为 eula=true

    text
    ...
    +#By changing the setting below to TRUE you are indicating your agreement to our EULA (https://aka.ms/MinecraftEULA).
    +#Fri Feb 30 00:00:01 HKT 2024
    +eula=true  # 请把该项修改为 true
    +...

    再次启动脚本 start.bat

    当出现 Done (7.837s)! For help, type "help" 时,服务器首次启动完毕。

    在 CMD 内键入 stop,等待服务器保存并关闭,即可进入下一个步骤。

    放入 sealdice-minecraft 插件

    前往 Sealdice Minecraft GitHub Release 下载 jar 文件放进 plugins 文件夹。

    再次运行脚本 start.bat 以启动服务器。

    在服务器日志中出现:

    cmd
    [00:00:07 INFO]: [SealDicePlugin] Enabling SealDicePlugin v1.0.2*
    +[00:00:07 INFO]: [SealDicePlugin] ChatServer started on port: 8887
    +[00:00:07 INFO]: [SealDicePlugin] Server started!

    证明 sealdice-minecraft 插件已经正确安装,并且插件将会开启一个端口 8887 供海豹使用。

    使用在控制台使用 sealport [端口] 或在游戏中使用 /sealport [端口] 可以修改连接端口。

    至此,Minecraft 服务端的准备工作已经完毕。

    海豹核心与 Minecraft 服务端连接

    账号设置 页,选择 账号类型Minecraft(Paper)

    SealDice UI

    URL 的填写请根据下列情况选择:

    ',27)),e(n,null,{default:s(()=>[e(t,{label:"部署在同一台服务器"},{default:s(()=>A[4]||(A[4]=[a("p",null,"海豹核心与 Minecraft 服务端部署在同一台服务器:",-1),a("p",null,[a("img",{src:g,alt:"SealDice UI"})],-1),a("p",null,[i("此时输入使用 "),a("code",null,"localhost:[端口]"),i(" 即可完成连接,默认端口为 "),a("code",null,"8887"),i("。")],-1)])),_:1}),e(t,{label:"部署在不同的服务器"},{default:s(()=>A[5]||(A[5]=[a("p",null,"海豹核心与 Minecraft 服务端部署在不同的服务器:",-1),a("p",null,[a("img",{src:B,alt:"SealDice UI"})],-1),a("p",null,[i("此时输入 "),a("code",null,"IP:[端口]"),i(",IP 为 Minecraft 服务端所在服务器的 IP 地址。")],-1),a("div",{class:"tip custom-block"},[a("p",{class:"custom-block-title"},"提示"),a("p",null,"请注意,大多数服务器不会默认开放所需要的端口,需要自行开放。")],-1)])),_:1})]),_:1}),A[8]||(A[8]=l('

    当服务器后台日志中出现:

    cmd
    [00:00:10 INFO]: [SealDicePlugin] 0:0:0:0:0:0:0:1 entered the room!

    证明海豹核心已和 Minecraft 服务端连接完毕。

    sealdice-minecraft 插件的使用

    指令

    提供两个插件指令:

    sealdice [文本]

    使用该指令的玩家视为向海豹私聊发送了一条消息。

    但是命令方块和控制台使用该指令会被视为公屏发送。

    sealport [端口]

    使用该指令需要 OP 权限。该指令用于设置与海豹连接的端口。

    权限

    提供一个权限:

    sealdice.admin

    该权限允许/禁止玩家设置与海豹连接的端口,默认为 false

    ',15))])}const F=c(C,[["render",u]]);export{b as __pageData,F as default}; diff --git a/assets/deploy_platform-qq-docker.md.Hpy2Ym1Z.js b/assets/deploy_platform-qq-docker.md.Hpy2Ym1Z.js new file mode 100644 index 000000000..d96d06c69 --- /dev/null +++ b/assets/deploy_platform-qq-docker.md.Hpy2Ym1Z.js @@ -0,0 +1,61 @@ +import{_ as a,c as i,a6 as n,o as e}from"./chunks/framework.B1keMFNq.js";const c=JSON.parse('{"title":"QQ - Docker 中的海豹","description":"","frontmatter":{"lang":"zh-cn","title":"QQ - Docker 中的海豹"},"headers":[],"relativePath":"deploy/platform-qq-docker.md","filePath":"deploy/platform-qq-docker.md","lastUpdated":1719148816000}'),l={name:"deploy/platform-qq-docker.md"};function p(t,s,h,k,d,r){return e(),i("div",null,s[0]||(s[0]=[n(`

    QQ - Docker 中的海豹

    本节内容

    本节将包含通过 docker 部署海豹时,你在 QQ 平台接入海豹核心需要了解的特定内容。

    请至少完成 QQ 一节中,前言部分的阅读。

    本节假定你对 dockerdocker compose 有足够的了解。

    通过 docker compose 同时部署海豹与 Lagrange

    通过此方式部署的海豹与 Lagrange 容器共同构成一个服务栈,可以方便地进行集中管理。请首先阅读 QQ 一节中,Lagrange 部分,大致了解 Lagrange 的部署过程。

    创建 docker-compose.yml

    首先,在工作目录下创建 docker-compose.yml 文件,并填入以下内容:

    yaml
    name: sealdice
    +
    +services:
    +  sealdice:
    +    image: ghcr.io/sealdice/sealdice:edge
    +    ports:
    +      - 3211:3211
    +    volumes:
    +      - ./seal_data:/data
    +      - ./seal_backups:/backups
    +    restart: unless-stopped
    +
    +  lagrange:
    +    image: ghcr.io/lagrangedev/lagrange.onebot:edge
    +    volumes:
    +      - ./lagrange_data:/app/data
    +      - ./seal_data:/data
    +    restart: unless-stopped

    此文件参考了通过 docker 部署海豹通过 docker 部署 Lagrange 相关内容。

    此文件将宿主机 3211 端口映射到海豹容器的 3211 端口,如有需要,请根据实际情况自行调整端口映射。

    此文件将工作目录下 seal_dataseal_backups 目录分别挂载到海豹容器的 /data/backups 目录,并将 lagrange_dataseal_data 目录分别挂载到 Lagrange 容器的 /app/data/data 目录。由于通过 QQ 后端发送本地图片时,海豹会将图片在容器内的绝对路径传递给 QQ 后端,所以需要将海豹数据也挂载到 Lagrange 容器以使 Lagrange 得以访问图片。如有需要,请根据实际情况自行调整挂载的目录。

    注意:在容器内以非 root 用户执行海豹进程可能会导致一些权限问题。

    因此,示例文件以 root 用户生成容器进程。后续需要修改 seal_dataseal_backupslagrange_data 目录中的内容(包括 Lagrange 配置文件、海豹数据等)时,需要 root 权限。

    补充:登录多个 QQ 账号

    只需简单修改 docker-compose.yml 即可登录到多个 QQ 号:

    yaml
    name: sealdice
    +
    +services:
    +  sealdice:
    +    image: ghcr.io/sealdice/sealdice:edge
    +    ports:
    +      - 3211:3211
    +    volumes:
    +      - ./seal_data:/data
    +      - ./seal_backups:/backups
    +    restart: unless-stopped
    +
    +  lagrange-1:
    +    image: ghcr.io/lagrangedev/lagrange.onebot:edge
    +    volumes:
    +      - ./lagrange_data_1:/app/data
    +      - ./seal_data:/data
    +    restart: unless-stopped
    +
    +  lagrange-2:
    +    image: ghcr.io/lagrangedev/lagrange.onebot:edge
    +    volumes:
    +      - ./lagrange_data_2:/app/data
    +      - ./seal_data:/data
    +    restart: unless-stopped

    分别对每个 Lagrange 容器完成下述配置文件修改及扫码登录过程,并在下述海豹连接 Lagrange 填写 WS 地址时,将 {Host} 分别填入 lagrange-1lagrange-2 即可。

    首次启动容器

    在工作目录下使用以下命令启动容器:

    bash
    docker compose up -d

    首次启动容器后,docker compose 会自动创建 seal_dataseal_backups 以及 lagrange_data 目录。

    Lagrange 容器配置

    首先使用以下命令停止容器运行:

    bash
    docker compose stop

    随后,按照 QQ 一节中运行 Lagrange 部分修改 lagrange_data/appsettings.json 文件。需要特别注意的是,为了允许海豹容器正常访问 Lagrange 端口,需要将监听地址修改为 0.0.0.0

    appsettings.json

    json
    {
    +  "Implementations": [
    +    {
    +      "Type": "ForwardWebSocket",
    +      "Host": "0.0.0.0",
    +      "Port": 8081,
    +      "HeartBeatInterval": 5000,
    +      "AccessToken": ""
    +    }
    +  ]
    +}

    随后,通过 docker compose up -d 重新启动容器。通过 docker compose logs lagrange 访问 Lagrange 容器的日志,在日志中即可看到 QQ 登录二维码。同时 lagrange_data/qr-0.png 也是登录二维码。选择任一方式,尽快使用手机 QQ 扫码连接。

    海豹连接 Lagrange

    请参见 QQ 一节中海豹连接 Lagrange 部分。在填写 WS 正向服务地址 ws://{Host}:{Port} 时,{Host} 填写为 lagrange 即可,如果配置了多个 Lagrange 容器,填入对应服务的名称,docker compose 会自动处理主机名解析。{Port} 正常填写配置文件中设定的监听地址,在上文的例子中为 8081。

    更新海豹容器或 Lagrange 容器

    运行以下命令:

    bash
    docker compose pull
    +docker compose up -d

    当任一镜像有更新时,以上命令会完成容器更新。

    连接到宿主机上的 QQ 后端

    注意:此种部署方式可能不能正常发送本地图片。

    由于通过 QQ 后端发送本地图片时,海豹会将图片在容器内的绝对路径传递给 QQ 后端。宿主机上的 QQ 后端无法正确解析海豹数据目录的路径,因此可能无法正常发送图片。

    首先按照 QQ 一节中的介绍,完成 QQ 后端的配置。

    Docker 自动为容器构建了一个子网,容器默认接入此网络,并通过端口映射将容器端口暴露在宿主机。因此,容器中的海豹不能直接访问宿主机监听本地端口的 QQ 后端。需要连接时,有两种解决方案。

    保持容器与宿主机网络隔离

    Docker 为宿主机也分配了子网中的 IP,可以通过 ip a 等命令查看。例如:

    bash
    $ ip a
    +...
    +9: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    +    link/ether 02:42:33:50:ca:2d brd ff:ff:ff:ff:ff:ff
    +    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
    +       valid_lft forever preferred_lft forever
    +    inet6 fe80::42:33ff:fe50:ca2d/64 scope link proto kernel_ll
    +       valid_lft forever preferred_lft forever
    +...

    其中 172.17.0.1 为宿主机在 docker 子网中的 IP。

    此时,首先修改 QQ 后端的监听设置,以确保其接受任何来源的连接(例如将 127.0.0.1 修改为 0.0.0.0),然后在配置海豹时,{Host} 填入宿主机在 docker 子网中的 IP(本例中为 172.17.0.1)。

    配置容器使用宿主机网络

    通过将 docker run 命令中的 -p ... 替换为 --network host,或在 docker-compose.yml 文件中将 ports: ... 替换为 network_mode: host,即可令容器使用宿主机网络。此时,在配置海豹时,{Host} 写为类似 127.0.0.1localhost 即可正常访问监听本地端口的 QQ 后端。

    `,40)]))}const g=a(l,[["render",p]]);export{c as __pageData,g as default}; diff --git a/assets/deploy_platform-qq-docker.md.Hpy2Ym1Z.lean.js b/assets/deploy_platform-qq-docker.md.Hpy2Ym1Z.lean.js new file mode 100644 index 000000000..d96d06c69 --- /dev/null +++ b/assets/deploy_platform-qq-docker.md.Hpy2Ym1Z.lean.js @@ -0,0 +1,61 @@ +import{_ as a,c as i,a6 as n,o as e}from"./chunks/framework.B1keMFNq.js";const c=JSON.parse('{"title":"QQ - Docker 中的海豹","description":"","frontmatter":{"lang":"zh-cn","title":"QQ - Docker 中的海豹"},"headers":[],"relativePath":"deploy/platform-qq-docker.md","filePath":"deploy/platform-qq-docker.md","lastUpdated":1719148816000}'),l={name:"deploy/platform-qq-docker.md"};function p(t,s,h,k,d,r){return e(),i("div",null,s[0]||(s[0]=[n(`

    QQ - Docker 中的海豹

    本节内容

    本节将包含通过 docker 部署海豹时,你在 QQ 平台接入海豹核心需要了解的特定内容。

    请至少完成 QQ 一节中,前言部分的阅读。

    本节假定你对 dockerdocker compose 有足够的了解。

    通过 docker compose 同时部署海豹与 Lagrange

    通过此方式部署的海豹与 Lagrange 容器共同构成一个服务栈,可以方便地进行集中管理。请首先阅读 QQ 一节中,Lagrange 部分,大致了解 Lagrange 的部署过程。

    创建 docker-compose.yml

    首先,在工作目录下创建 docker-compose.yml 文件,并填入以下内容:

    yaml
    name: sealdice
    +
    +services:
    +  sealdice:
    +    image: ghcr.io/sealdice/sealdice:edge
    +    ports:
    +      - 3211:3211
    +    volumes:
    +      - ./seal_data:/data
    +      - ./seal_backups:/backups
    +    restart: unless-stopped
    +
    +  lagrange:
    +    image: ghcr.io/lagrangedev/lagrange.onebot:edge
    +    volumes:
    +      - ./lagrange_data:/app/data
    +      - ./seal_data:/data
    +    restart: unless-stopped

    此文件参考了通过 docker 部署海豹通过 docker 部署 Lagrange 相关内容。

    此文件将宿主机 3211 端口映射到海豹容器的 3211 端口,如有需要,请根据实际情况自行调整端口映射。

    此文件将工作目录下 seal_dataseal_backups 目录分别挂载到海豹容器的 /data/backups 目录,并将 lagrange_dataseal_data 目录分别挂载到 Lagrange 容器的 /app/data/data 目录。由于通过 QQ 后端发送本地图片时,海豹会将图片在容器内的绝对路径传递给 QQ 后端,所以需要将海豹数据也挂载到 Lagrange 容器以使 Lagrange 得以访问图片。如有需要,请根据实际情况自行调整挂载的目录。

    注意:在容器内以非 root 用户执行海豹进程可能会导致一些权限问题。

    因此,示例文件以 root 用户生成容器进程。后续需要修改 seal_dataseal_backupslagrange_data 目录中的内容(包括 Lagrange 配置文件、海豹数据等)时,需要 root 权限。

    补充:登录多个 QQ 账号

    只需简单修改 docker-compose.yml 即可登录到多个 QQ 号:

    yaml
    name: sealdice
    +
    +services:
    +  sealdice:
    +    image: ghcr.io/sealdice/sealdice:edge
    +    ports:
    +      - 3211:3211
    +    volumes:
    +      - ./seal_data:/data
    +      - ./seal_backups:/backups
    +    restart: unless-stopped
    +
    +  lagrange-1:
    +    image: ghcr.io/lagrangedev/lagrange.onebot:edge
    +    volumes:
    +      - ./lagrange_data_1:/app/data
    +      - ./seal_data:/data
    +    restart: unless-stopped
    +
    +  lagrange-2:
    +    image: ghcr.io/lagrangedev/lagrange.onebot:edge
    +    volumes:
    +      - ./lagrange_data_2:/app/data
    +      - ./seal_data:/data
    +    restart: unless-stopped

    分别对每个 Lagrange 容器完成下述配置文件修改及扫码登录过程,并在下述海豹连接 Lagrange 填写 WS 地址时,将 {Host} 分别填入 lagrange-1lagrange-2 即可。

    首次启动容器

    在工作目录下使用以下命令启动容器:

    bash
    docker compose up -d

    首次启动容器后,docker compose 会自动创建 seal_dataseal_backups 以及 lagrange_data 目录。

    Lagrange 容器配置

    首先使用以下命令停止容器运行:

    bash
    docker compose stop

    随后,按照 QQ 一节中运行 Lagrange 部分修改 lagrange_data/appsettings.json 文件。需要特别注意的是,为了允许海豹容器正常访问 Lagrange 端口,需要将监听地址修改为 0.0.0.0

    appsettings.json

    json
    {
    +  "Implementations": [
    +    {
    +      "Type": "ForwardWebSocket",
    +      "Host": "0.0.0.0",
    +      "Port": 8081,
    +      "HeartBeatInterval": 5000,
    +      "AccessToken": ""
    +    }
    +  ]
    +}

    随后,通过 docker compose up -d 重新启动容器。通过 docker compose logs lagrange 访问 Lagrange 容器的日志,在日志中即可看到 QQ 登录二维码。同时 lagrange_data/qr-0.png 也是登录二维码。选择任一方式,尽快使用手机 QQ 扫码连接。

    海豹连接 Lagrange

    请参见 QQ 一节中海豹连接 Lagrange 部分。在填写 WS 正向服务地址 ws://{Host}:{Port} 时,{Host} 填写为 lagrange 即可,如果配置了多个 Lagrange 容器,填入对应服务的名称,docker compose 会自动处理主机名解析。{Port} 正常填写配置文件中设定的监听地址,在上文的例子中为 8081。

    更新海豹容器或 Lagrange 容器

    运行以下命令:

    bash
    docker compose pull
    +docker compose up -d

    当任一镜像有更新时,以上命令会完成容器更新。

    连接到宿主机上的 QQ 后端

    注意:此种部署方式可能不能正常发送本地图片。

    由于通过 QQ 后端发送本地图片时,海豹会将图片在容器内的绝对路径传递给 QQ 后端。宿主机上的 QQ 后端无法正确解析海豹数据目录的路径,因此可能无法正常发送图片。

    首先按照 QQ 一节中的介绍,完成 QQ 后端的配置。

    Docker 自动为容器构建了一个子网,容器默认接入此网络,并通过端口映射将容器端口暴露在宿主机。因此,容器中的海豹不能直接访问宿主机监听本地端口的 QQ 后端。需要连接时,有两种解决方案。

    保持容器与宿主机网络隔离

    Docker 为宿主机也分配了子网中的 IP,可以通过 ip a 等命令查看。例如:

    bash
    $ ip a
    +...
    +9: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    +    link/ether 02:42:33:50:ca:2d brd ff:ff:ff:ff:ff:ff
    +    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
    +       valid_lft forever preferred_lft forever
    +    inet6 fe80::42:33ff:fe50:ca2d/64 scope link proto kernel_ll
    +       valid_lft forever preferred_lft forever
    +...

    其中 172.17.0.1 为宿主机在 docker 子网中的 IP。

    此时,首先修改 QQ 后端的监听设置,以确保其接受任何来源的连接(例如将 127.0.0.1 修改为 0.0.0.0),然后在配置海豹时,{Host} 填入宿主机在 docker 子网中的 IP(本例中为 172.17.0.1)。

    配置容器使用宿主机网络

    通过将 docker run 命令中的 -p ... 替换为 --network host,或在 docker-compose.yml 文件中将 ports: ... 替换为 network_mode: host,即可令容器使用宿主机网络。此时,在配置海豹时,{Host} 写为类似 127.0.0.1localhost 即可正常访问监听本地端口的 QQ 后端。

    `,40)]))}const g=a(l,[["render",p]]);export{c as __pageData,g as default}; diff --git a/assets/deploy_platform-qq-official.md.XETUaTnY.js b/assets/deploy_platform-qq-official.md.XETUaTnY.js new file mode 100644 index 000000000..ffd70c846 --- /dev/null +++ b/assets/deploy_platform-qq-official.md.XETUaTnY.js @@ -0,0 +1 @@ +import{_ as l,c as i,j as e,a as t,G as o,a6 as r,B as p,o as c}from"./chunks/framework.B1keMFNq.js";const n="/sealdice-manual-next/assets/platform-qq-bot-qrcode.CZVWW4Rf.jpg",d="/sealdice-manual-next/assets/platform-qq-official-1.xvYBQLAg.png",m="/sealdice-manual-next/assets/platform-qq-official-2.BG1tRARH.png",f="/sealdice-manual-next/assets/platform-qq-official-4.DeNeyeyZ.png",h="/sealdice-manual-next/assets/platform-qq-official-3.DhHb4kkJ.png",q="/sealdice-manual-next/assets/platform-qq-official-11.CAwk7sBV.png",u="/sealdice-manual-next/assets/platform-qq-official-12.CdZ1iKI7.png",Q="/sealdice-manual-next/assets/platform-qq-official-7.B2ZAvwsL.png",g="/sealdice-manual-next/assets/platform-qq-official-8.DhuF29we.png",b="/sealdice-manual-next/assets/platform-qq-official-6.D_U8yZ10.png",x="/sealdice-manual-next/assets/platform-qq-official-5.CdDG8A97.png",k="/sealdice-manual-next/assets/platform-qq-official-9.DBxQzTd1.png",D=JSON.parse('{"title":"QQ 官方机器人","description":"","frontmatter":{"lang":"zh-cn","title":"QQ 官方机器人"},"headers":[],"relativePath":"deploy/platform-qq-official.md","filePath":"deploy/platform-qq-official.md","lastUpdated":1728702230000}'),_={name:"deploy/platform-qq-official.md"},B={id:"qq-官方机器人",tabindex:"-1"};function A(E,a,P,v,w,y){const s=p("Badge");return c(),i("div",null,[e("h1",B,[a[0]||(a[0]=t("QQ 官方机器人 ")),o(s,{type:"tip",text:"v1.4.2"}),a[1]||(a[1]=t()),a[2]||(a[2]=e("a",{class:"header-anchor",href:"#qq-官方机器人","aria-label":'Permalink to "QQ 官方机器人 "'},"​",-1))]),e("p",null,[a[3]||(a[3]=t("海豹从 ")),o(s,{type:"tip",text:"v1.4.2"}),a[4]||(a[4]=t(" 开始支持对接 QQ 官方的机器人服务。"))]),a[5]||(a[5]=r('

    本节内容

    本节将包含你在 QQ 官方机器人平台接入海豹核心需要了解的特定内容。

    提示:QQ 机器人

    QQ 官方目前已开放了机器人功能,可进入 QQ 开放平台 进行申请。

    搭建机器人官方请参考 QQ 机器人文档

    目前, QQ 官方机器人已开放个体使用权限。但官方文档没有及时更新

    同时,由于 QQ 官方对机器人能力的严格限制(包括获取 QQ 号、昵称,非 @ 时响应,私聊,群控、发送本地图片等大量功能目前不支持),目前对接官方接口的骰子很多功能无法支持(如跑团 Log,暗骰,对抗等)。

    QQ 官方机器人的优点,就是不用担心被风控。

    尝试一下

    如果你想尝试一下这样的机器人,非常欢迎你使用海豹官方的骰子:

    海豹机器人二维码

    获取连接所需信息

    要获取用于连接海豹的信息之前,你需要建立好一个 QQ 机器人应用。可前往 QQ 开放平台 进行申请,实名注册后,创建一个机器人应用。

    创建完成后,进入机器人管理后台,切换到「开发设置」页面:

    切换到开发设置

    在页面中你可以看到这样的信息,其中「机器人 ID」「机器人令牌」「机器人密钥」这三项是海豹进行连接所需要的。

    开发设置

    然后在「开发设置 IP 白名单」一栏中,填写你骰子所在电脑的 公网 IP。(使用云服务器时,请填写对应云服务商在控制台提供的 IP)

    连接官方 Bot

    注意:家庭网络的 IP 变动

    如果你使用的是家用网络,在本地电脑运行海豹,要注意家庭网络的 IP 通常是不固定的,运营商随时可能会更换你的 IP,遇到问题时请先检查。

    连接海豹

    登录海豹并添加账号,选择「QQ(官方机器人)」。填写对应的信息点击连接。你的海豹应该可以正常连接官方机器人运作了!

    连接官方 Bot

    指令配置

    1. 进入「发布配置」页面;
    2. 点击「功能配置」;
    3. 点击「指令配置」;
    4. 再点击右上角的「重新配置」开始编辑;
    5. 点开「指令」页添加指令,「指令名」里面输入对应指令(例如 rraen),/ 是 QQ 官方机器人默认的指令前缀(海豹也支持使用 /);
    6. 然后在「指令介绍」一栏填写指令的简介;
    7. 然后在「使用场景」一栏点击「QQ 频道」、「频道私信」、「QQ 群」,切记不能选中「消息列表」;
    8. 确认配置完成后,扫码确认修改,就可以完成指令配置。
    进入指令配置页进行指令配置
    推荐指令列表模版推荐指令列表模版1推荐指令列表模版2

    机器人上线

    点开「使用范围和人员页面」,进入「编辑」页,参考下面图片中编辑使用范围与人员。

    连接官方 Bot

    配置完成后,点击「发布配置」页面,上传「自测报告」与「隐私协议」。

    「隐私协议」与「自测报告」模板

    这里提供了海豹骰的机器人「隐私协议」与「自测报告」模版。

    强烈建议你按自身情况进行修改,绝对不要原样上传,这涉及到你的机器人是否能被 QQ 官方的工作人员审核通过。

    机器人自测报告.xlsx

    第三方机器人隐私保护指引.docx

    如果你对「指令列表」的指令进行了修改,或者新增了其他功能,请自行修改,需要在「预期输出」一栏填「指令简介」。

    点击「提交审核」后,等待 QQ 官方人员测试并审核(时间不定)。审核通过后,在「发布设置」页面中点击「上线机器人」。

    提示:关于 QQ 审核

    目前 QQ 审核主要是测试机器人能否在所选支持的场景下,正常回应指令列表里的指令(在没有添加任何其他内容前提下),为人工审核。

    在提交审核前,请善用沙盒群,测试你提交的自测报告中,所提到的指令是否都能正常工作,机器人需要正常发出回应。

    如果你的指令包含一些需要填写的参数,请务必在「自测报告」表格「特殊说明」一栏里补充说明。(你可以参考模板中对 .ra .sc .en 指令的特殊说明。)

    如果审核未通过,点击右上角的「通知」查看原因,解决后再次提交。 如果实在无法解决,可加入「QQ 机器人官方频道」,在「寻求||审核和及 bug 」一栏里,发帖询问。

    使用海豹

    点击「使用人员与范围」页面,查看你的机器人对应的邀请二维码,扫码添加即可。

    注意

    目前官方机器人只响应包含 @ 的消息,操作时请注意。

    同时,官方机器人一次只能发一条消息,一次性发送消息太多,官方机器人会因为消息发送过于频繁而报错。

    此外,官方机器人目前无法发送本地图片。

    注意事项

    大部分事项 QQ 机器人文档 都有说明,这里补充一些文档中没有说明的其他事项:

    企业账号的开发者资质审核

    如果你使用企业账号进行了注册,请记得在资料一栏中进行开发者资质状态审核。该审核需要将对应企业的银行卡号上传至腾讯审核,期间的等待时间可能较久。在开发者资质状态通过后,你才能将官方机器人送审。

    开发者资质状态审核

    机器人官方频道跳转

    机器人「资料卡」页面中资料卡设置一栏中,「机器人官方频道跳转」不能是骰子的「沙盒频道」。

    机器人官方频道跳转

    功能审核未通过

    有时候「功能配置」页面中,「功能配置与提审」旁显示审核通过,但实际并没有通过,这时点击「机器人上线」的会显示发送错误。

    遇见这种情况请点击「通知」,看机器人哪方面没过审,修改后再次提交审核。

    ',43))])}const I=l(_,[["render",A]]);export{D as __pageData,I as default}; diff --git a/assets/deploy_platform-qq-official.md.XETUaTnY.lean.js b/assets/deploy_platform-qq-official.md.XETUaTnY.lean.js new file mode 100644 index 000000000..ffd70c846 --- /dev/null +++ b/assets/deploy_platform-qq-official.md.XETUaTnY.lean.js @@ -0,0 +1 @@ +import{_ as l,c as i,j as e,a as t,G as o,a6 as r,B as p,o as c}from"./chunks/framework.B1keMFNq.js";const n="/sealdice-manual-next/assets/platform-qq-bot-qrcode.CZVWW4Rf.jpg",d="/sealdice-manual-next/assets/platform-qq-official-1.xvYBQLAg.png",m="/sealdice-manual-next/assets/platform-qq-official-2.BG1tRARH.png",f="/sealdice-manual-next/assets/platform-qq-official-4.DeNeyeyZ.png",h="/sealdice-manual-next/assets/platform-qq-official-3.DhHb4kkJ.png",q="/sealdice-manual-next/assets/platform-qq-official-11.CAwk7sBV.png",u="/sealdice-manual-next/assets/platform-qq-official-12.CdZ1iKI7.png",Q="/sealdice-manual-next/assets/platform-qq-official-7.B2ZAvwsL.png",g="/sealdice-manual-next/assets/platform-qq-official-8.DhuF29we.png",b="/sealdice-manual-next/assets/platform-qq-official-6.D_U8yZ10.png",x="/sealdice-manual-next/assets/platform-qq-official-5.CdDG8A97.png",k="/sealdice-manual-next/assets/platform-qq-official-9.DBxQzTd1.png",D=JSON.parse('{"title":"QQ 官方机器人","description":"","frontmatter":{"lang":"zh-cn","title":"QQ 官方机器人"},"headers":[],"relativePath":"deploy/platform-qq-official.md","filePath":"deploy/platform-qq-official.md","lastUpdated":1728702230000}'),_={name:"deploy/platform-qq-official.md"},B={id:"qq-官方机器人",tabindex:"-1"};function A(E,a,P,v,w,y){const s=p("Badge");return c(),i("div",null,[e("h1",B,[a[0]||(a[0]=t("QQ 官方机器人 ")),o(s,{type:"tip",text:"v1.4.2"}),a[1]||(a[1]=t()),a[2]||(a[2]=e("a",{class:"header-anchor",href:"#qq-官方机器人","aria-label":'Permalink to "QQ 官方机器人 "'},"​",-1))]),e("p",null,[a[3]||(a[3]=t("海豹从 ")),o(s,{type:"tip",text:"v1.4.2"}),a[4]||(a[4]=t(" 开始支持对接 QQ 官方的机器人服务。"))]),a[5]||(a[5]=r('

    本节内容

    本节将包含你在 QQ 官方机器人平台接入海豹核心需要了解的特定内容。

    提示:QQ 机器人

    QQ 官方目前已开放了机器人功能,可进入 QQ 开放平台 进行申请。

    搭建机器人官方请参考 QQ 机器人文档

    目前, QQ 官方机器人已开放个体使用权限。但官方文档没有及时更新

    同时,由于 QQ 官方对机器人能力的严格限制(包括获取 QQ 号、昵称,非 @ 时响应,私聊,群控、发送本地图片等大量功能目前不支持),目前对接官方接口的骰子很多功能无法支持(如跑团 Log,暗骰,对抗等)。

    QQ 官方机器人的优点,就是不用担心被风控。

    尝试一下

    如果你想尝试一下这样的机器人,非常欢迎你使用海豹官方的骰子:

    海豹机器人二维码

    获取连接所需信息

    要获取用于连接海豹的信息之前,你需要建立好一个 QQ 机器人应用。可前往 QQ 开放平台 进行申请,实名注册后,创建一个机器人应用。

    创建完成后,进入机器人管理后台,切换到「开发设置」页面:

    切换到开发设置

    在页面中你可以看到这样的信息,其中「机器人 ID」「机器人令牌」「机器人密钥」这三项是海豹进行连接所需要的。

    开发设置

    然后在「开发设置 IP 白名单」一栏中,填写你骰子所在电脑的 公网 IP。(使用云服务器时,请填写对应云服务商在控制台提供的 IP)

    连接官方 Bot

    注意:家庭网络的 IP 变动

    如果你使用的是家用网络,在本地电脑运行海豹,要注意家庭网络的 IP 通常是不固定的,运营商随时可能会更换你的 IP,遇到问题时请先检查。

    连接海豹

    登录海豹并添加账号,选择「QQ(官方机器人)」。填写对应的信息点击连接。你的海豹应该可以正常连接官方机器人运作了!

    连接官方 Bot

    指令配置

    1. 进入「发布配置」页面;
    2. 点击「功能配置」;
    3. 点击「指令配置」;
    4. 再点击右上角的「重新配置」开始编辑;
    5. 点开「指令」页添加指令,「指令名」里面输入对应指令(例如 rraen),/ 是 QQ 官方机器人默认的指令前缀(海豹也支持使用 /);
    6. 然后在「指令介绍」一栏填写指令的简介;
    7. 然后在「使用场景」一栏点击「QQ 频道」、「频道私信」、「QQ 群」,切记不能选中「消息列表」;
    8. 确认配置完成后,扫码确认修改,就可以完成指令配置。
    进入指令配置页进行指令配置
    推荐指令列表模版推荐指令列表模版1推荐指令列表模版2

    机器人上线

    点开「使用范围和人员页面」,进入「编辑」页,参考下面图片中编辑使用范围与人员。

    连接官方 Bot

    配置完成后,点击「发布配置」页面,上传「自测报告」与「隐私协议」。

    「隐私协议」与「自测报告」模板

    这里提供了海豹骰的机器人「隐私协议」与「自测报告」模版。

    强烈建议你按自身情况进行修改,绝对不要原样上传,这涉及到你的机器人是否能被 QQ 官方的工作人员审核通过。

    机器人自测报告.xlsx

    第三方机器人隐私保护指引.docx

    如果你对「指令列表」的指令进行了修改,或者新增了其他功能,请自行修改,需要在「预期输出」一栏填「指令简介」。

    点击「提交审核」后,等待 QQ 官方人员测试并审核(时间不定)。审核通过后,在「发布设置」页面中点击「上线机器人」。

    提示:关于 QQ 审核

    目前 QQ 审核主要是测试机器人能否在所选支持的场景下,正常回应指令列表里的指令(在没有添加任何其他内容前提下),为人工审核。

    在提交审核前,请善用沙盒群,测试你提交的自测报告中,所提到的指令是否都能正常工作,机器人需要正常发出回应。

    如果你的指令包含一些需要填写的参数,请务必在「自测报告」表格「特殊说明」一栏里补充说明。(你可以参考模板中对 .ra .sc .en 指令的特殊说明。)

    如果审核未通过,点击右上角的「通知」查看原因,解决后再次提交。 如果实在无法解决,可加入「QQ 机器人官方频道」,在「寻求||审核和及 bug 」一栏里,发帖询问。

    使用海豹

    点击「使用人员与范围」页面,查看你的机器人对应的邀请二维码,扫码添加即可。

    注意

    目前官方机器人只响应包含 @ 的消息,操作时请注意。

    同时,官方机器人一次只能发一条消息,一次性发送消息太多,官方机器人会因为消息发送过于频繁而报错。

    此外,官方机器人目前无法发送本地图片。

    注意事项

    大部分事项 QQ 机器人文档 都有说明,这里补充一些文档中没有说明的其他事项:

    企业账号的开发者资质审核

    如果你使用企业账号进行了注册,请记得在资料一栏中进行开发者资质状态审核。该审核需要将对应企业的银行卡号上传至腾讯审核,期间的等待时间可能较久。在开发者资质状态通过后,你才能将官方机器人送审。

    开发者资质状态审核

    机器人官方频道跳转

    机器人「资料卡」页面中资料卡设置一栏中,「机器人官方频道跳转」不能是骰子的「沙盒频道」。

    机器人官方频道跳转

    功能审核未通过

    有时候「功能配置」页面中,「功能配置与提审」旁显示审核通过,但实际并没有通过,这时点击「机器人上线」的会显示发送错误。

    遇见这种情况请点击「通知」,看机器人哪方面没过审,修改后再次提交审核。

    ',43))])}const I=l(_,[["render",A]]);export{D as __pageData,I as default}; diff --git a/assets/deploy_platform-qq.md.Ca-yLypu.js b/assets/deploy_platform-qq.md.Ca-yLypu.js new file mode 100644 index 000000000..d6ace9fe8 --- /dev/null +++ b/assets/deploy_platform-qq.md.Ca-yLypu.js @@ -0,0 +1 @@ +import{_ as n,c as i,a6 as r,j as o,a,G as e,B as s,o as p}from"./chunks/framework.B1keMFNq.js";const d="/sealdice-manual-next/assets/platform-qq-turnoff.BeOWAmaj.png",Q="/sealdice-manual-next/assets/platform-qq-builtin-1.CrwUIyAe.png",g="/sealdice-manual-next/assets/platform-qq-builtin-2.CsxwmFcJ.png",u="/sealdice-manual-next/assets/platform-qq-llonebot-2.CRkT2vLu.png",w=JSON.parse('{"title":"QQ","description":"","frontmatter":{"lang":"zh-cn","title":"QQ"},"headers":[],"relativePath":"deploy/platform-qq.md","filePath":"deploy/platform-qq.md","lastUpdated":1729330013000}'),b={name:"deploy/platform-qq.md"},m={class:"warning custom-block"},f={id:"内置客户端",tabindex:"-1"},L={class:"warning custom-block"},k={id:"lagrange",tabindex:"-1"},q={id:"llonebot",tabindex:"-1"},v={id:"chronocat",tabindex:"-1"},x={id:"chronocat-satori-协议",tabindex:"-1"};function h(B,t,C,P,N,O){const l=s("Badge");return p(),i("div",null,[t[53]||(t[53]=r('

    QQ

    本节内容

    本节将包含你在 QQ 平台接入海豹核心需要了解的特定内容。

    前言

    有关 QQ 平台机器人的说明

    直至目前,绝大部分群聊中的 QQ 机器人采用「假用户」方式,即通过第三方软件接入注册的另一个 QQ。QQ 官方一直在对第三方实现进行技术与非技术层面的多重打击。

    从目前的表现看来,QQ 官方会对账号行为进行检测,来区分出账号是否是正常用户(如不正常的登录方式,以不合理的速度在多地区登录等等)。我们无法得知具体的检测细节,但已证实的是,当 QQ 账号用作机器人并被检测到时,该 QQ 会视为风险账号,被官方予以警告,封禁,临时甚至 永久冻结 的惩罚。

    尽管不同方案之间的差异很大(比如基于 Android QQ 协议的 Go-Cqhttp 已经基本不可用,而 LagrangeLLOneBot 等基于 NTQQ 的方案目前比较稳定),但需要明白的是,这些方案都由社区第三方软件提供,实质上以 QQ 官方角度等同于「外挂软件」,并不受到官方支持(甚至是被打击的目标)。

    因此,是否在 QQ 平台搭建这样的非官方机器人取决于你的慎重考虑。同时,第三方方案的可用性也可能会随时间推移而存在变化,海豹官方无法做出任何保证。

    目前,仅有 官方机器人服务 是被 QQ 官方认可的机器人方案。该方案可用性由 QQ 官方保证,但目前 仅对企业用户和部分受邀个人用户开放,同时在功能上非常受限。

    如果有可能,建议迁移到其它平台,在 QQ 平台选择何种方式取决于你自己的选择。

    危险

    倘若出现账号被封禁等情况,海豹官方无力解决此类问题,也不对相应后果负责。

    对接引导

    所有支持的途径参见目录,本节提供了多种对接途径的引导。

    ',13)),o("p",null,[t[0]||(t[0]=a("从 ")),e(l,{type:"tip",text:"v1.4.5"}),t[1]||(t[1]=a(" 开始,我们推荐使用 ")),t[2]||(t[2]=o("a",{href:"#内置客户端"},"内置客户端",-1)),t[3]||(t[3]=a(" 进行连接,这是面向一般用户提供的简单对接方式,对于")),t[4]||(t[4]=o("em",null,"有能力",-1)),t[5]||(t[5]=a("的骰主,我们")),t[6]||(t[6]=o("em",null,"更推荐",-1)),t[7]||(t[7]=a("其他的分离部署方案。"))]),t[54]||(t[54]=r('

    对于需要使用更加灵活的方案的用户,我们推荐如下:

    • 需要比较简单的部署流程,希望资源占用低的,见 Lagrange
    • 需要比较简单的部署流程,不是特别在意资源占用的,见 LLOneBot
    • 通过 docker 部署海豹的,见 QQ - Docker 中的海豹
    • 如果你有 QQ 官方机器人权限,见 官方机器人
    • Go-cqhttp 与 QSign 方案因可用性原因已被弃用。我们不建议任何用户再使用此方式部署 QQ 接入,同时强烈建议正在使用该方案的用户迁移

    不同的对接方式适应不同的情况,可能会存在途径特有的功能缺失和其它问题,请根据自己的情况选择适合的方式。

    ',3)),o("div",m,[t[14]||(t[14]=o("p",{class:"custom-block-title"},[a("注意:对接基于 NTQQ PC 端协议的 QQ 方案时,注意对方是否支持 "),o("code",null,"戳一戳"),a(" 功能")],-1)),t[15]||(t[15]=o("p",null,"内置客户端/Lagrange、LLOneBot 和 Napcat 等基于 NTQQ PC 的 QQ 方案,在旧版本中由于 NTQQ 旧协议本身不支持的原因,缺失该功能。",-1)),t[16]||(t[16]=o("p",null,"请使用:",-1)),o("ul",null,[o("li",null,[t[8]||(t[8]=a("海豹版本 ")),e(l,{type:"tip",text:"v1.4.6"}),t[9]||(t[9]=a(" 之前的内置客户端"))]),o("li",null,[e(l,{type:"tip",text:"6e350b0"}),t[10]||(t[10]=a(" 之前的 Lagrange"))]),o("li",null,[e(l,{type:"tip",text:"v3.27.0"}),t[11]||(t[11]=a(" 之前的 LLOneBot"))]),o("li",null,[e(l,{type:"tip",text:"v1.6.7"}),t[12]||(t[12]=a(" 之前的 Napcat"))]),t[13]||(t[13]=o("li",null,"……",-1))]),t[17]||(t[17]=o("p",null,[a("等方案的用户及时更新或"),o("strong",null,"关闭"),a("位于 "),o("code",null,"综合设置"),a(" - "),o("code",null,"基本设置"),a(" 的 "),o("code",null,"启用戳一戳"),a(" 开关,以免产生不必要的报错信息。")],-1)),t[18]||(t[18]=o("img",{src:d,alt:"关闭戳一戳开关",width:"80%"},null,-1))]),t[55]||(t[55]=o("div",{class:"warning custom-block"},[o("p",{class:"custom-block-title"},"注意"),o("p",null,"内置客户端、Lagrange、LLOneBot 和 Napcat 都占用 PC 端协议。在使用这些连接方式时,不可同时登录 PC 端 QQ,否则将导致挤占下线。"),o("p",null,"由于官方 QQ 设定,PC 端协议(即以上四种登录方式)每隔 30 天需要重新登录。")],-1)),o("h2",f,[t[19]||(t[19]=a("内置客户端 ")),e(l,{type:"tip",text:"v1.4.5"}),t[20]||(t[20]=a()),t[21]||(t[21]=o("a",{class:"header-anchor",href:"#内置客户端","aria-label":'Permalink to "内置客户端 "'},"​",-1))]),o("p",null,[t[22]||(t[22]=a("海豹从 ")),e(l,{type:"tip",text:"v1.4.5"}),t[23]||(t[23]=a(" 开始提供了内置客户端的连接方式。"))]),t[56]||(t[56]=r('

    注意

    需要知道的是,该方案也是前言中提到的非官方机器人,并不受到 QQ 官方认可。

    危险:部分过时系统不支持

    内置客户端暂不支持 Windows 7,Windows Server 2008,32 位 Windows 也不可用。

    Windows Server 2012 可能会缺少部分运行库,需要自行下载安装。

    进入海豹 Web UI 的「账号设置」新增连接,选择账号类型「QQ(内置客户端)」,这也是默认选项,填写 QQ 号,其余内容无需修改:

    内置客户端

    随后使用登录了目标账号的手机 QQ 尽快扫码登录(二维码会在十秒左右出现,请耐心等待):

    内置客户端扫码登录

    在手机上确认登录以后,等待状态变为「已连接」即可。

    登录的账号由扫码的账号决定,请不要询问 为什么登录的是我自己的账号 之类的问题。

    安卓端海豹扫码

    由于 QQ 的安全策略并不支持图片识别或长按扫描二维码登录,你需要两个手机(一个运行海豹,一个扫码)或下载 TIM 软件扫码登录。

    ',9)),o("div",L,[t[34]||(t[34]=o("p",{class:"custom-block-title"},"内置客户端版本",-1)),o("p",null,[t[24]||(t[24]=a("使用此方案应当尽快更新到 ")),e(l,{type:"tip",text:"v1.4.6"}),t[25]||(t[25]=a(" 及以上版本的海豹,当遇到登录失败、无法回复等情况请先 ")),t[26]||(t[26]=o("code",null,"尝试删除账号重新添加",-1)),t[27]||(t[27]=a("、")),t[28]||(t[28]=o("code",null,"在「账号设置」界面切换签名服务",-1)),t[29]||(t[29]=a(" 等方法。"))]),o("p",null,[t[30]||(t[30]=a("对于 ")),e(l,{type:"tip",text:"v1.4.6"}),t[31]||(t[31]=a(" 及以上版本的海豹,修改签名时")),t[32]||(t[32]=o("em",null,"请勿随意修改签名版本",-1)),t[33]||(t[33]=a(",除非你知道自己在干什么。"))])]),t[57]||(t[57]=r('

    分离部署

    分离部署

    不同于内置客户端,分离部署为海豹核心和 QQ 登录框架分别启动,然后按照各个框架的连接协议将海豹核心和 QQ 登录框架连接起来。

    相比之下分离部署有更强的稳定性,但操作难度也有一定程度的增加。

    提示:不同的对接方式

    使用此方法你可能需要对「QQ(onebot11正向WS)」、「QQ(onebot11反向WS)」、「[WIP]Satori」的区别有一定了解。

    • 「QQ(onebot11正向WS)」为 onebot11 标准的连接方式之一,由海豹核心主动连接 QQ 登录框架。在 UI 界面添加「连接地址」格式应当为 ws://{Host}:{Port}
    • 「QQ(onebot11反向WS)」为 onebot11 标准的连接方式之二,由 QQ 登录框架主动连接海豹核心。在 UI 界面添加「连接地址」格式应当为 {Host}:{Port}
    • 「[WIP]Satori」为 Satori 标准的连接方式,由海豹核心主动连接 QQ 登录框架。WIP 代表该对接方式为实验性的,可能会在未来发生变化。
    ',3)),o("h3",k,[t[35]||(t[35]=a("Lagrange ")),e(l,{type:"tip",text:"v1.4.2"}),t[36]||(t[36]=a()),t[37]||(t[37]=o("a",{class:"header-anchor",href:"#lagrange","aria-label":'Permalink to "Lagrange "'},"​",-1))]),o("p",null,[t[38]||(t[38]=a("海豹从 ")),e(l,{type:"tip",text:"v1.4.2"}),t[39]||(t[39]=a(" 开始适配了 Lagrange(拉格兰)的连接。"))]),t[58]||(t[58]=r('

    Lagrange

    Lagrange(拉格兰)是一个 NTQQ 协议相关的开源项目。其包括目前实现了 Linux NTQQ 协议的 Lagrange.Core,和提供 OneBot-V11 API 的 Lagrange.Onebot 两部分。

    与 GoCqhttp 类似,Lagrange 可以很方便的在多个平台(Windows、Linux、Mac)部署,海豹核心可以对接其提供的 OneBot-V11 API 来提供 QQ 骰子服务。

    登录 Lagrange

    请按照 Lagrange 手册自行部署 Lagrange,并按照手册和自己的需求填写配置文件。

    海豹连接 Lagrange

    进入海豹 Web UI 的「账号设置」新增链接,按照自己的 Lagrange 配置文件选择 onebot11 账号类型,填写 QQ 号和「连接地址」。

    成功连接后即可使用。

    ',6)),o("h3",q,[t[40]||(t[40]=a("LLOneBot ")),e(l,{type:"tip",text:"v1.4.2"}),t[41]||(t[41]=a()),t[42]||(t[42]=o("a",{class:"header-anchor",href:"#llonebot","aria-label":'Permalink to "LLOneBot "'},"​",-1))]),o("p",null,[t[43]||(t[43]=a("海豹从 ")),e(l,{type:"tip",text:"v1.4.2"}),t[44]||(t[44]=a(" 版本开始支持通过 OneBot 协议连接 LLOneBot。"))]),t[59]||(t[59]=r('

    LLOneBot

    LiteLoaderQQNT(LiteLoader)是 NTQQ 的插件加载器,允许通过插件注入 QQ 实现某些特定的功能。

    LLOneBot 则是 Liteloader 的插件之一,可以实现劫持客户端对外开放 API,可以理解为装在 PC 上的 Shamrock。

    使用此方案的用户请注意不要随意更新 QQ 客户端。

    由于 QQ 客户端检测机制的变化,更新 QQ 客户端后可能导致方案不可用,并且更新后需要重新安装登录框架,所以不建议用户随意更新 QQ 客户端。

    安装 LLOneBot

    请参考 官方文档 中的说明。

    配置 LLOneBot

    安装完成后重新登录 QQ,在 QQ 设置中 LLOneBot 的设置页:

    LLOneBot 设置页

    支持两种方式与海豹对接:

    • 正向连接:默认开放的正向 ws 端口为 3001,在海豹的新添账号选择「QQ(onebot11正向WS)」,账号处随便填写,连接地址填 ws://localhost:3001
    • 反向连接:关闭 LLOneBot 的正向连接开关,打开 LLOneBot 的反向连接开关,在「反向WebSocket监听地址」里点击「添加」,输入 ws://127.0.0.1:4001/ws,然后在海豹的新添账号选择「QQ(onebot11反向WS)」,输入账号。

    提示

    • 如若想修改端口请在 LLOneBot 的设置 UI 自行修改。
    • 请注意设置中的正向连接和反向连接请 不要同时打开,否则会发不出消息。
    • 如果你是在服务器上部署,可能需要使用 Mem Reduct 之类的工具定时清理过高的内存占用。

    NapCatQQ

    NapCatQQ

    NapCatQQ 是在后台低占用运行的无头(没有界面)的 NTQQ,具体占用会因人而异,QQ 群、好友越多占用越高。

    NapCat 官方文档

    使用此方案的用户请注意不要随意 更新 QQ 客户端。

    由于 QQ 客户端检测机制的变化,更新 QQ 客户端后可能导致方案不可用,并且更新后需要重新安装登录框架,所以不建议用户随意更新 QQ 客户端。

    NapCat 是基于官方 NTQQ 实现的 Bot 框架,因此在开始前,你需要根据 NapCatQQ 的手册安装官方 QQ,若 QQ 版本过低会导致程序无法正常启动。

    下载 NapCatQQ

    请按照 NapCat 官方手册 下载安装,然后按照 基础配置 和自己的需求修改配置文件。

    海豹连接

    进入海豹 Web UI 的「账号设置」新增链接,按照自己的配置文件选择 onebot11 账号类型,填写 QQ 号和「连接地址」。

    成功连接后即可使用。

    ',19)),o("h3",v,[t[45]||(t[45]=a("Chronocat ")),e(l,{type:"tip",text:"v1.4.2"}),t[46]||(t[46]=a()),t[47]||(t[47]=o("a",{class:"header-anchor",href:"#chronocat","aria-label":'Permalink to "Chronocat "'},"​",-1))]),o("p",null,[t[48]||(t[48]=a("从 ")),e(l,{type:"tip",text:"v1.4.5"}),t[49]||(t[49]=a(" 开始适配了与 Chronocat 的 Satori 协议连接。"))]),t[60]||(t[60]=o("h4",{id:"安装-chronocat",tabindex:"-1"},[a("安装 Chronocat "),o("a",{class:"header-anchor",href:"#安装-chronocat","aria-label":'Permalink to "安装 Chronocat"'},"​")],-1)),t[61]||(t[61]=o("p",null,[a("请按照 "),o("a",{href:"https://chronocat.vercel.app/guide/install/shell",target:"_blank",rel:"noreferrer"},"官方手册"),a(" 安装 Chronocat。")],-1)),o("h4",x,[t[50]||(t[50]=a("Chronocat Satori 协议 ")),e(l,{type:"tip",text:"v1.4.5"}),t[51]||(t[51]=a()),t[52]||(t[52]=o("a",{class:"header-anchor",href:"#chronocat-satori-协议","aria-label":'Permalink to "Chronocat Satori 协议 "'},"​",-1))]),t[62]||(t[62]=o("p",null,"在账号添加中,选择「[WIP]Satori」,填写相应信息进行连接。",-1))])}const S=n(b,[["render",h]]);export{w as __pageData,S as default}; diff --git a/assets/deploy_platform-qq.md.Ca-yLypu.lean.js b/assets/deploy_platform-qq.md.Ca-yLypu.lean.js new file mode 100644 index 000000000..d6ace9fe8 --- /dev/null +++ b/assets/deploy_platform-qq.md.Ca-yLypu.lean.js @@ -0,0 +1 @@ +import{_ as n,c as i,a6 as r,j as o,a,G as e,B as s,o as p}from"./chunks/framework.B1keMFNq.js";const d="/sealdice-manual-next/assets/platform-qq-turnoff.BeOWAmaj.png",Q="/sealdice-manual-next/assets/platform-qq-builtin-1.CrwUIyAe.png",g="/sealdice-manual-next/assets/platform-qq-builtin-2.CsxwmFcJ.png",u="/sealdice-manual-next/assets/platform-qq-llonebot-2.CRkT2vLu.png",w=JSON.parse('{"title":"QQ","description":"","frontmatter":{"lang":"zh-cn","title":"QQ"},"headers":[],"relativePath":"deploy/platform-qq.md","filePath":"deploy/platform-qq.md","lastUpdated":1729330013000}'),b={name:"deploy/platform-qq.md"},m={class:"warning custom-block"},f={id:"内置客户端",tabindex:"-1"},L={class:"warning custom-block"},k={id:"lagrange",tabindex:"-1"},q={id:"llonebot",tabindex:"-1"},v={id:"chronocat",tabindex:"-1"},x={id:"chronocat-satori-协议",tabindex:"-1"};function h(B,t,C,P,N,O){const l=s("Badge");return p(),i("div",null,[t[53]||(t[53]=r('

    QQ

    本节内容

    本节将包含你在 QQ 平台接入海豹核心需要了解的特定内容。

    前言

    有关 QQ 平台机器人的说明

    直至目前,绝大部分群聊中的 QQ 机器人采用「假用户」方式,即通过第三方软件接入注册的另一个 QQ。QQ 官方一直在对第三方实现进行技术与非技术层面的多重打击。

    从目前的表现看来,QQ 官方会对账号行为进行检测,来区分出账号是否是正常用户(如不正常的登录方式,以不合理的速度在多地区登录等等)。我们无法得知具体的检测细节,但已证实的是,当 QQ 账号用作机器人并被检测到时,该 QQ 会视为风险账号,被官方予以警告,封禁,临时甚至 永久冻结 的惩罚。

    尽管不同方案之间的差异很大(比如基于 Android QQ 协议的 Go-Cqhttp 已经基本不可用,而 LagrangeLLOneBot 等基于 NTQQ 的方案目前比较稳定),但需要明白的是,这些方案都由社区第三方软件提供,实质上以 QQ 官方角度等同于「外挂软件」,并不受到官方支持(甚至是被打击的目标)。

    因此,是否在 QQ 平台搭建这样的非官方机器人取决于你的慎重考虑。同时,第三方方案的可用性也可能会随时间推移而存在变化,海豹官方无法做出任何保证。

    目前,仅有 官方机器人服务 是被 QQ 官方认可的机器人方案。该方案可用性由 QQ 官方保证,但目前 仅对企业用户和部分受邀个人用户开放,同时在功能上非常受限。

    如果有可能,建议迁移到其它平台,在 QQ 平台选择何种方式取决于你自己的选择。

    危险

    倘若出现账号被封禁等情况,海豹官方无力解决此类问题,也不对相应后果负责。

    对接引导

    所有支持的途径参见目录,本节提供了多种对接途径的引导。

    ',13)),o("p",null,[t[0]||(t[0]=a("从 ")),e(l,{type:"tip",text:"v1.4.5"}),t[1]||(t[1]=a(" 开始,我们推荐使用 ")),t[2]||(t[2]=o("a",{href:"#内置客户端"},"内置客户端",-1)),t[3]||(t[3]=a(" 进行连接,这是面向一般用户提供的简单对接方式,对于")),t[4]||(t[4]=o("em",null,"有能力",-1)),t[5]||(t[5]=a("的骰主,我们")),t[6]||(t[6]=o("em",null,"更推荐",-1)),t[7]||(t[7]=a("其他的分离部署方案。"))]),t[54]||(t[54]=r('

    对于需要使用更加灵活的方案的用户,我们推荐如下:

    • 需要比较简单的部署流程,希望资源占用低的,见 Lagrange
    • 需要比较简单的部署流程,不是特别在意资源占用的,见 LLOneBot
    • 通过 docker 部署海豹的,见 QQ - Docker 中的海豹
    • 如果你有 QQ 官方机器人权限,见 官方机器人
    • Go-cqhttp 与 QSign 方案因可用性原因已被弃用。我们不建议任何用户再使用此方式部署 QQ 接入,同时强烈建议正在使用该方案的用户迁移

    不同的对接方式适应不同的情况,可能会存在途径特有的功能缺失和其它问题,请根据自己的情况选择适合的方式。

    ',3)),o("div",m,[t[14]||(t[14]=o("p",{class:"custom-block-title"},[a("注意:对接基于 NTQQ PC 端协议的 QQ 方案时,注意对方是否支持 "),o("code",null,"戳一戳"),a(" 功能")],-1)),t[15]||(t[15]=o("p",null,"内置客户端/Lagrange、LLOneBot 和 Napcat 等基于 NTQQ PC 的 QQ 方案,在旧版本中由于 NTQQ 旧协议本身不支持的原因,缺失该功能。",-1)),t[16]||(t[16]=o("p",null,"请使用:",-1)),o("ul",null,[o("li",null,[t[8]||(t[8]=a("海豹版本 ")),e(l,{type:"tip",text:"v1.4.6"}),t[9]||(t[9]=a(" 之前的内置客户端"))]),o("li",null,[e(l,{type:"tip",text:"6e350b0"}),t[10]||(t[10]=a(" 之前的 Lagrange"))]),o("li",null,[e(l,{type:"tip",text:"v3.27.0"}),t[11]||(t[11]=a(" 之前的 LLOneBot"))]),o("li",null,[e(l,{type:"tip",text:"v1.6.7"}),t[12]||(t[12]=a(" 之前的 Napcat"))]),t[13]||(t[13]=o("li",null,"……",-1))]),t[17]||(t[17]=o("p",null,[a("等方案的用户及时更新或"),o("strong",null,"关闭"),a("位于 "),o("code",null,"综合设置"),a(" - "),o("code",null,"基本设置"),a(" 的 "),o("code",null,"启用戳一戳"),a(" 开关,以免产生不必要的报错信息。")],-1)),t[18]||(t[18]=o("img",{src:d,alt:"关闭戳一戳开关",width:"80%"},null,-1))]),t[55]||(t[55]=o("div",{class:"warning custom-block"},[o("p",{class:"custom-block-title"},"注意"),o("p",null,"内置客户端、Lagrange、LLOneBot 和 Napcat 都占用 PC 端协议。在使用这些连接方式时,不可同时登录 PC 端 QQ,否则将导致挤占下线。"),o("p",null,"由于官方 QQ 设定,PC 端协议(即以上四种登录方式)每隔 30 天需要重新登录。")],-1)),o("h2",f,[t[19]||(t[19]=a("内置客户端 ")),e(l,{type:"tip",text:"v1.4.5"}),t[20]||(t[20]=a()),t[21]||(t[21]=o("a",{class:"header-anchor",href:"#内置客户端","aria-label":'Permalink to "内置客户端 "'},"​",-1))]),o("p",null,[t[22]||(t[22]=a("海豹从 ")),e(l,{type:"tip",text:"v1.4.5"}),t[23]||(t[23]=a(" 开始提供了内置客户端的连接方式。"))]),t[56]||(t[56]=r('

    注意

    需要知道的是,该方案也是前言中提到的非官方机器人,并不受到 QQ 官方认可。

    危险:部分过时系统不支持

    内置客户端暂不支持 Windows 7,Windows Server 2008,32 位 Windows 也不可用。

    Windows Server 2012 可能会缺少部分运行库,需要自行下载安装。

    进入海豹 Web UI 的「账号设置」新增连接,选择账号类型「QQ(内置客户端)」,这也是默认选项,填写 QQ 号,其余内容无需修改:

    内置客户端

    随后使用登录了目标账号的手机 QQ 尽快扫码登录(二维码会在十秒左右出现,请耐心等待):

    内置客户端扫码登录

    在手机上确认登录以后,等待状态变为「已连接」即可。

    登录的账号由扫码的账号决定,请不要询问 为什么登录的是我自己的账号 之类的问题。

    安卓端海豹扫码

    由于 QQ 的安全策略并不支持图片识别或长按扫描二维码登录,你需要两个手机(一个运行海豹,一个扫码)或下载 TIM 软件扫码登录。

    ',9)),o("div",L,[t[34]||(t[34]=o("p",{class:"custom-block-title"},"内置客户端版本",-1)),o("p",null,[t[24]||(t[24]=a("使用此方案应当尽快更新到 ")),e(l,{type:"tip",text:"v1.4.6"}),t[25]||(t[25]=a(" 及以上版本的海豹,当遇到登录失败、无法回复等情况请先 ")),t[26]||(t[26]=o("code",null,"尝试删除账号重新添加",-1)),t[27]||(t[27]=a("、")),t[28]||(t[28]=o("code",null,"在「账号设置」界面切换签名服务",-1)),t[29]||(t[29]=a(" 等方法。"))]),o("p",null,[t[30]||(t[30]=a("对于 ")),e(l,{type:"tip",text:"v1.4.6"}),t[31]||(t[31]=a(" 及以上版本的海豹,修改签名时")),t[32]||(t[32]=o("em",null,"请勿随意修改签名版本",-1)),t[33]||(t[33]=a(",除非你知道自己在干什么。"))])]),t[57]||(t[57]=r('

    分离部署

    分离部署

    不同于内置客户端,分离部署为海豹核心和 QQ 登录框架分别启动,然后按照各个框架的连接协议将海豹核心和 QQ 登录框架连接起来。

    相比之下分离部署有更强的稳定性,但操作难度也有一定程度的增加。

    提示:不同的对接方式

    使用此方法你可能需要对「QQ(onebot11正向WS)」、「QQ(onebot11反向WS)」、「[WIP]Satori」的区别有一定了解。

    • 「QQ(onebot11正向WS)」为 onebot11 标准的连接方式之一,由海豹核心主动连接 QQ 登录框架。在 UI 界面添加「连接地址」格式应当为 ws://{Host}:{Port}
    • 「QQ(onebot11反向WS)」为 onebot11 标准的连接方式之二,由 QQ 登录框架主动连接海豹核心。在 UI 界面添加「连接地址」格式应当为 {Host}:{Port}
    • 「[WIP]Satori」为 Satori 标准的连接方式,由海豹核心主动连接 QQ 登录框架。WIP 代表该对接方式为实验性的,可能会在未来发生变化。
    ',3)),o("h3",k,[t[35]||(t[35]=a("Lagrange ")),e(l,{type:"tip",text:"v1.4.2"}),t[36]||(t[36]=a()),t[37]||(t[37]=o("a",{class:"header-anchor",href:"#lagrange","aria-label":'Permalink to "Lagrange "'},"​",-1))]),o("p",null,[t[38]||(t[38]=a("海豹从 ")),e(l,{type:"tip",text:"v1.4.2"}),t[39]||(t[39]=a(" 开始适配了 Lagrange(拉格兰)的连接。"))]),t[58]||(t[58]=r('

    Lagrange

    Lagrange(拉格兰)是一个 NTQQ 协议相关的开源项目。其包括目前实现了 Linux NTQQ 协议的 Lagrange.Core,和提供 OneBot-V11 API 的 Lagrange.Onebot 两部分。

    与 GoCqhttp 类似,Lagrange 可以很方便的在多个平台(Windows、Linux、Mac)部署,海豹核心可以对接其提供的 OneBot-V11 API 来提供 QQ 骰子服务。

    登录 Lagrange

    请按照 Lagrange 手册自行部署 Lagrange,并按照手册和自己的需求填写配置文件。

    海豹连接 Lagrange

    进入海豹 Web UI 的「账号设置」新增链接,按照自己的 Lagrange 配置文件选择 onebot11 账号类型,填写 QQ 号和「连接地址」。

    成功连接后即可使用。

    ',6)),o("h3",q,[t[40]||(t[40]=a("LLOneBot ")),e(l,{type:"tip",text:"v1.4.2"}),t[41]||(t[41]=a()),t[42]||(t[42]=o("a",{class:"header-anchor",href:"#llonebot","aria-label":'Permalink to "LLOneBot "'},"​",-1))]),o("p",null,[t[43]||(t[43]=a("海豹从 ")),e(l,{type:"tip",text:"v1.4.2"}),t[44]||(t[44]=a(" 版本开始支持通过 OneBot 协议连接 LLOneBot。"))]),t[59]||(t[59]=r('

    LLOneBot

    LiteLoaderQQNT(LiteLoader)是 NTQQ 的插件加载器,允许通过插件注入 QQ 实现某些特定的功能。

    LLOneBot 则是 Liteloader 的插件之一,可以实现劫持客户端对外开放 API,可以理解为装在 PC 上的 Shamrock。

    使用此方案的用户请注意不要随意更新 QQ 客户端。

    由于 QQ 客户端检测机制的变化,更新 QQ 客户端后可能导致方案不可用,并且更新后需要重新安装登录框架,所以不建议用户随意更新 QQ 客户端。

    安装 LLOneBot

    请参考 官方文档 中的说明。

    配置 LLOneBot

    安装完成后重新登录 QQ,在 QQ 设置中 LLOneBot 的设置页:

    LLOneBot 设置页

    支持两种方式与海豹对接:

    • 正向连接:默认开放的正向 ws 端口为 3001,在海豹的新添账号选择「QQ(onebot11正向WS)」,账号处随便填写,连接地址填 ws://localhost:3001
    • 反向连接:关闭 LLOneBot 的正向连接开关,打开 LLOneBot 的反向连接开关,在「反向WebSocket监听地址」里点击「添加」,输入 ws://127.0.0.1:4001/ws,然后在海豹的新添账号选择「QQ(onebot11反向WS)」,输入账号。

    提示

    • 如若想修改端口请在 LLOneBot 的设置 UI 自行修改。
    • 请注意设置中的正向连接和反向连接请 不要同时打开,否则会发不出消息。
    • 如果你是在服务器上部署,可能需要使用 Mem Reduct 之类的工具定时清理过高的内存占用。

    NapCatQQ

    NapCatQQ

    NapCatQQ 是在后台低占用运行的无头(没有界面)的 NTQQ,具体占用会因人而异,QQ 群、好友越多占用越高。

    NapCat 官方文档

    使用此方案的用户请注意不要随意 更新 QQ 客户端。

    由于 QQ 客户端检测机制的变化,更新 QQ 客户端后可能导致方案不可用,并且更新后需要重新安装登录框架,所以不建议用户随意更新 QQ 客户端。

    NapCat 是基于官方 NTQQ 实现的 Bot 框架,因此在开始前,你需要根据 NapCatQQ 的手册安装官方 QQ,若 QQ 版本过低会导致程序无法正常启动。

    下载 NapCatQQ

    请按照 NapCat 官方手册 下载安装,然后按照 基础配置 和自己的需求修改配置文件。

    海豹连接

    进入海豹 Web UI 的「账号设置」新增链接,按照自己的配置文件选择 onebot11 账号类型,填写 QQ 号和「连接地址」。

    成功连接后即可使用。

    ',19)),o("h3",v,[t[45]||(t[45]=a("Chronocat ")),e(l,{type:"tip",text:"v1.4.2"}),t[46]||(t[46]=a()),t[47]||(t[47]=o("a",{class:"header-anchor",href:"#chronocat","aria-label":'Permalink to "Chronocat "'},"​",-1))]),o("p",null,[t[48]||(t[48]=a("从 ")),e(l,{type:"tip",text:"v1.4.5"}),t[49]||(t[49]=a(" 开始适配了与 Chronocat 的 Satori 协议连接。"))]),t[60]||(t[60]=o("h4",{id:"安装-chronocat",tabindex:"-1"},[a("安装 Chronocat "),o("a",{class:"header-anchor",href:"#安装-chronocat","aria-label":'Permalink to "安装 Chronocat"'},"​")],-1)),t[61]||(t[61]=o("p",null,[a("请按照 "),o("a",{href:"https://chronocat.vercel.app/guide/install/shell",target:"_blank",rel:"noreferrer"},"官方手册"),a(" 安装 Chronocat。")],-1)),o("h4",x,[t[50]||(t[50]=a("Chronocat Satori 协议 ")),e(l,{type:"tip",text:"v1.4.5"}),t[51]||(t[51]=a()),t[52]||(t[52]=o("a",{class:"header-anchor",href:"#chronocat-satori-协议","aria-label":'Permalink to "Chronocat Satori 协议 "'},"​",-1))]),t[62]||(t[62]=o("p",null,"在账号添加中,选择「[WIP]Satori」,填写相应信息进行连接。",-1))])}const S=n(b,[["render",h]]);export{w as __pageData,S as default}; diff --git a/assets/deploy_platform-slack.md.G-cegqt7.js b/assets/deploy_platform-slack.md.G-cegqt7.js new file mode 100644 index 000000000..5649a4114 --- /dev/null +++ b/assets/deploy_platform-slack.md.G-cegqt7.js @@ -0,0 +1 @@ +import{_ as i,c,j as o,a,G as l,a6 as s,B as r,o as d}from"./chunks/framework.B1keMFNq.js";const P=JSON.parse('{"title":"Slack","description":"","frontmatter":{"lang":"zh-cn","title":"Slack"},"headers":[],"relativePath":"deploy/platform-slack.md","filePath":"deploy/platform-slack.md","lastUpdated":1728702230000}'),n={name:"deploy/platform-slack.md"},p={id:"slack-支持",tabindex:"-1"};function k(m,e,h,u,b,f){const t=r("Badge");return d(),c("div",null,[e[5]||(e[5]=o("h1",{id:"slack",tabindex:"-1"},[a("Slack "),o("a",{class:"header-anchor",href:"#slack","aria-label":'Permalink to "Slack"'},"​")],-1)),e[6]||(e[6]=o("div",{class:"info custom-block"},[o("p",{class:"custom-block-title"},"本节内容"),o("p",null,"本节将包含你在 Slack 平台接入海豹核心需要了解的特定内容。")],-1)),o("h2",p,[e[0]||(e[0]=a("Slack 支持 ")),l(t,{type:"tip",text:"v1.4.2"}),e[1]||(e[1]=a()),e[2]||(e[2]=o("a",{class:"header-anchor",href:"#slack-支持","aria-label":'Permalink to "Slack 支持 "'},"​",-1))]),o("p",null,[e[3]||(e[3]=a("海豹从 ")),l(t,{type:"tip",text:"v1.4.2"}),e[4]||(e[4]=a(" 开始支持对接 Slack。"))]),e[7]||(e[7]=s('

    获取 Token

    要获取用于连接海豹的 Token 之前,你需要建立好一个应用。登录 Slack API 平台,点击「Create New App」,再点击「From Scratch」。按照要求填写应用名字,并选择你想要海豹被部署到的工作区后点击「Create App」。

    提示:私骰模式

    Slack 平台的机制使没有公开发布的应用无法加入被指定的单个工作区之外的地方。如有需求,可查看 Slack 提供的发布指引

    APP Token

    在侧边栏点击「Socket Mode」,打开「Enable Socket Mode」的开关。此处会弹出一个窗口,这将会是你的 APP Token。按需填写名字,并复制保存。 确认后点击下方「Enable Events」,打开开关后在「Subscribe to bot events」下添加如下事件:

    1. message.channels
    2. message.groups
    3. message.im
    4. message.mpim

    注意

    如果这不是你期望的情况,请不要添加 app_mention。这个权限会让海豹只接收被 @ 到的指令和消息,导致 log 等功能无法正常工作。

    Bot Token

    在侧边栏点击「OAuth & Permissions」,下滑在「Bot Token Scopes」下,添加海豹运作需要的权限:

    1. channels:history
    2. channels:read
    3. chat:write
    4. chat:write.customize
    5. files:write
    6. groups:history
    7. groups:read
    8. im:history
    9. im:read
    10. im:write
    11. mpim:history
    12. mpim:read
    13. links.embed:write
    14. links:write

    点击侧边栏前往「Basic Information」页面,在「Install Your App」下点击「Install to Workplace」。完成后回到「OAuth & Permissions」页面,在「OAuth Tokens for Your Workspace」下找到「Bot User OAuth Token」。这是你的 Bot Token。复制并保存。

    连接海豹

    登录海豹并添加账号,选择「Slack」。在对应的区域填入 APP TokenBot Token,点击连接。你的海豹应该可以正常在 Slack 平台运作了!

    ',13))])}const g=i(n,[["render",k]]);export{P as __pageData,g as default}; diff --git a/assets/deploy_platform-slack.md.G-cegqt7.lean.js b/assets/deploy_platform-slack.md.G-cegqt7.lean.js new file mode 100644 index 000000000..5649a4114 --- /dev/null +++ b/assets/deploy_platform-slack.md.G-cegqt7.lean.js @@ -0,0 +1 @@ +import{_ as i,c,j as o,a,G as l,a6 as s,B as r,o as d}from"./chunks/framework.B1keMFNq.js";const P=JSON.parse('{"title":"Slack","description":"","frontmatter":{"lang":"zh-cn","title":"Slack"},"headers":[],"relativePath":"deploy/platform-slack.md","filePath":"deploy/platform-slack.md","lastUpdated":1728702230000}'),n={name:"deploy/platform-slack.md"},p={id:"slack-支持",tabindex:"-1"};function k(m,e,h,u,b,f){const t=r("Badge");return d(),c("div",null,[e[5]||(e[5]=o("h1",{id:"slack",tabindex:"-1"},[a("Slack "),o("a",{class:"header-anchor",href:"#slack","aria-label":'Permalink to "Slack"'},"​")],-1)),e[6]||(e[6]=o("div",{class:"info custom-block"},[o("p",{class:"custom-block-title"},"本节内容"),o("p",null,"本节将包含你在 Slack 平台接入海豹核心需要了解的特定内容。")],-1)),o("h2",p,[e[0]||(e[0]=a("Slack 支持 ")),l(t,{type:"tip",text:"v1.4.2"}),e[1]||(e[1]=a()),e[2]||(e[2]=o("a",{class:"header-anchor",href:"#slack-支持","aria-label":'Permalink to "Slack 支持 "'},"​",-1))]),o("p",null,[e[3]||(e[3]=a("海豹从 ")),l(t,{type:"tip",text:"v1.4.2"}),e[4]||(e[4]=a(" 开始支持对接 Slack。"))]),e[7]||(e[7]=s('

    获取 Token

    要获取用于连接海豹的 Token 之前,你需要建立好一个应用。登录 Slack API 平台,点击「Create New App」,再点击「From Scratch」。按照要求填写应用名字,并选择你想要海豹被部署到的工作区后点击「Create App」。

    提示:私骰模式

    Slack 平台的机制使没有公开发布的应用无法加入被指定的单个工作区之外的地方。如有需求,可查看 Slack 提供的发布指引

    APP Token

    在侧边栏点击「Socket Mode」,打开「Enable Socket Mode」的开关。此处会弹出一个窗口,这将会是你的 APP Token。按需填写名字,并复制保存。 确认后点击下方「Enable Events」,打开开关后在「Subscribe to bot events」下添加如下事件:

    1. message.channels
    2. message.groups
    3. message.im
    4. message.mpim

    注意

    如果这不是你期望的情况,请不要添加 app_mention。这个权限会让海豹只接收被 @ 到的指令和消息,导致 log 等功能无法正常工作。

    Bot Token

    在侧边栏点击「OAuth & Permissions」,下滑在「Bot Token Scopes」下,添加海豹运作需要的权限:

    1. channels:history
    2. channels:read
    3. chat:write
    4. chat:write.customize
    5. files:write
    6. groups:history
    7. groups:read
    8. im:history
    9. im:read
    10. im:write
    11. mpim:history
    12. mpim:read
    13. links.embed:write
    14. links:write

    点击侧边栏前往「Basic Information」页面,在「Install Your App」下点击「Install to Workplace」。完成后回到「OAuth & Permissions」页面,在「OAuth Tokens for Your Workspace」下找到「Bot User OAuth Token」。这是你的 Bot Token。复制并保存。

    连接海豹

    登录海豹并添加账号,选择「Slack」。在对应的区域填入 APP TokenBot Token,点击连接。你的海豹应该可以正常在 Slack 平台运作了!

    ',13))])}const g=i(n,[["render",k]]);export{P as __pageData,g as default}; diff --git a/assets/deploy_platform-telegram.md.D-T9EMEM.js b/assets/deploy_platform-telegram.md.D-T9EMEM.js new file mode 100644 index 000000000..614d1ae6f --- /dev/null +++ b/assets/deploy_platform-telegram.md.D-T9EMEM.js @@ -0,0 +1 @@ +import{_ as a,c as t,a6 as o,o as l}from"./chunks/framework.B1keMFNq.js";const h=JSON.parse('{"title":"Telegram","description":"","frontmatter":{"lang":"zh-cn","title":"Telegram"},"headers":[],"relativePath":"deploy/platform-telegram.md","filePath":"deploy/platform-telegram.md","lastUpdated":1714442589000}'),r={name:"deploy/platform-telegram.md"};function c(s,e,i,n,p,d){return l(),t("div",null,e[0]||(e[0]=[o('

    Telegram

    本节内容

    本节将包含你在 Telegram 平台接入海豹核心需要了解的特定内容。

    获取 Token

    要获取用于连接海豹的 Token 之前,你需要建立好一个机器人。在 Telegram 私信 BotFather,输入指令 /start 后使用 /newbot 创建按照要求创建一个机器人。

    提示:具体步骤

    /newbot 指令下有两个步骤:

    • 输入机器人的显示名
    • 输入机器人的账号名(需以 bot 结尾)

    完成后,BotFather 会发送一条含有 Token 的消息。这是连接机器人所需要的凭证,将它复制保存。

    连接海豹

    提示:代理模式

    如果你海豹所处的位置直接访问 Telegram 服务有困难,我们提供了通过 HTTP 代理访问的途径。

    登录海豹并添加账号,选择「Telegram账号」。在 Token 处粘贴你得到的 Token,点击连接。你的海豹应该可以正常在 Telegram 运作了!

    ',9)]))}const k=a(r,[["render",c]]);export{h as __pageData,k as default}; diff --git a/assets/deploy_platform-telegram.md.D-T9EMEM.lean.js b/assets/deploy_platform-telegram.md.D-T9EMEM.lean.js new file mode 100644 index 000000000..614d1ae6f --- /dev/null +++ b/assets/deploy_platform-telegram.md.D-T9EMEM.lean.js @@ -0,0 +1 @@ +import{_ as a,c as t,a6 as o,o as l}from"./chunks/framework.B1keMFNq.js";const h=JSON.parse('{"title":"Telegram","description":"","frontmatter":{"lang":"zh-cn","title":"Telegram"},"headers":[],"relativePath":"deploy/platform-telegram.md","filePath":"deploy/platform-telegram.md","lastUpdated":1714442589000}'),r={name:"deploy/platform-telegram.md"};function c(s,e,i,n,p,d){return l(),t("div",null,e[0]||(e[0]=[o('

    Telegram

    本节内容

    本节将包含你在 Telegram 平台接入海豹核心需要了解的特定内容。

    获取 Token

    要获取用于连接海豹的 Token 之前,你需要建立好一个机器人。在 Telegram 私信 BotFather,输入指令 /start 后使用 /newbot 创建按照要求创建一个机器人。

    提示:具体步骤

    /newbot 指令下有两个步骤:

    • 输入机器人的显示名
    • 输入机器人的账号名(需以 bot 结尾)

    完成后,BotFather 会发送一条含有 Token 的消息。这是连接机器人所需要的凭证,将它复制保存。

    连接海豹

    提示:代理模式

    如果你海豹所处的位置直接访问 Telegram 服务有困难,我们提供了通过 HTTP 代理访问的途径。

    登录海豹并添加账号,选择「Telegram账号」。在 Token 处粘贴你得到的 Token,点击连接。你的海豹应该可以正常在 Telegram 运作了!

    ',9)]))}const k=a(r,[["render",c]]);export{h as __pageData,k as default}; diff --git a/assets/deploy_quick-start.md.FpFxN0Au.js b/assets/deploy_quick-start.md.FpFxN0Au.js new file mode 100644 index 000000000..e11c78765 --- /dev/null +++ b/assets/deploy_quick-start.md.FpFxN0Au.js @@ -0,0 +1,10 @@ +import{_ as o,c as p,a6 as h,G as a,w as e,j as i,a as l,B as d,o as k}from"./chunks/framework.B1keMFNq.js";const f=JSON.parse('{"title":"快速开始","description":"","frontmatter":{"lang":"zh-cn","title":"快速开始"},"headers":[],"relativePath":"deploy/quick-start.md","filePath":"deploy/quick-start.md","lastUpdated":1728702230000}'),u={name:"deploy/quick-start.md"},c={id:"上传固件",tabindex:"-1"};function g(F,s,m,b,y,C){const t=d("PluginTabsTab"),n=d("PluginTabs"),r=d("Badge");return k(),p("div",null,[s[13]||(s[13]=h('

    快速开始

    本节内容

    本节将会指导你如何在你的 PC、服务器、甚至安卓手机上搭建和部署海豹核心。

    如果你对计算机、服务器等相关知识没有任何了解,或者在阅读本节时,对内容中的一些名词完全不理解,我们非常建议你先自行学习,对基本计算机知识有所了解之后,再阅读本节进行部署。

    获取海豹

    可以从以下两个渠道获取海豹核心安装包:

    • 官网:从 官网下载页 获取最新的正式版海豹核心安装包。

    • GitHub:从 GitHub Release 获取海豹核心安装包。

      这一渠道提供两个版本:以 版本号+发布日期 命名的正式版,与官网一致;以 Latest Dev Build+日期 命名的最新构建,可能有各种 Bug,不推荐一般用户使用。

    提示:我该选择从哪里获取?

    我们非常建议你使用从官网获取的正式版海豹。对于绝大多数用户来说,官网的下载最顺畅和便捷,所提供的正式版也适合绝大多数用户使用。

    海豹提供了多个平台的安装包,请确认你的操作系统并选择对应版本的安装包。提供的平台如下:

    • Windows:普通用户首选,适用于 Windows 7 或者更高,同样可以部署在 Windows 云服务器。
      • 64 位:适合绝大多数用户使用。
      • 32 位:只在你明确知道为何要使用 32 位版本的情况下使用 32 位版本。
    • Linux: 提供给更专业的用户使用,需要使用终端启动。适用于服务器、树莓派等设备。
      • x64:绝大多数使用 Intel 或 AMD CPU 的服务器都应使用此版本。
      • arm64:树莓派等 arm 设备请使用 arm64 版。
    • macOS:提供给 Mac 用户使用,需要使用终端启动。
      • arm64:Apple Silicon 芯片(M1、M2 等)请使用 arm64 版。
      • x64:Intel 芯片请使用 x64 版。
    • Docker:提供对应 Docker 镜像,支持多种架构。
      • amd64
      • arm64
    • Android:提供 Android 的 apk 安装包。

    启动

    注意

    永远不要直接运行压缩包中的海豹核心,也不要在临时目录中运行海豹核心。

    将安装包解压到合适的目录。考虑到后续升级,将目录名中的版本号删去或许是更好的做法。

    根据系统不同,用以下方法即可启动海豹:

    ',12)),a(n,{sharedStateKey:"os"},{default:e(()=>[a(t,{label:"Windows"},{default:e(()=>s[0]||(s[0]=[i("p",null,[l("双击运行 "),i("code",null,"sealdice-core.exe"),l("。数秒钟后,海豹核心将会在后台运行并弹出提示。")],-1),i("p",null,"在任务栏中找到海豹图标,点击即可打开后台(WebUI)。",-1)])),_:1}),a(t,{label:"Linux"},{default:e(()=>s[1]||(s[1]=[i("p",null,[l("在 "),i("code",null,"sealdice-core"),l(" 所在的目录启动终端,输入以下命令:")],-1),i("div",{class:"language-bash vp-adaptive-theme"},[i("button",{title:"Copy Code",class:"copy"}),i("span",{class:"lang"},"bash"),i("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[i("code",null,[i("span",{class:"line"},[i("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"chmod"),i("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," +x"),i("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," ./sealdice-core")])])])],-1),i("p",null,[l("给予其足够的运行权限。随后,运行 "),i("code",null,"./sealdice-core"),l(" 来启动海豹。在浏览器中输入 "),i("code",null,"localhost:3211"),l(" 来访问后台(WebUI)。")],-1)])),_:1}),a(t,{label:"macOS"},{default:e(()=>s[2]||(s[2]=[i("p",null,[l("在 "),i("code",null,"sealdice-core"),l(" 所在的目录启动终端,输入以下命令:")],-1),i("div",{class:"language-zsh vp-adaptive-theme"},[i("button",{title:"Copy Code",class:"copy"}),i("span",{class:"lang"},"zsh"),i("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[i("code",null,[i("span",{class:"line"},[i("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"chmod"),i("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," +x"),i("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," ./sealdice-core"),i("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," && "),i("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"xattr"),i("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," -rd"),i("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," com.apple.quarantine"),i("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," ./sealdice-core")]),l(` +`),i("span",{class:"line"},[i("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"chmod"),i("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," +x"),i("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," ./lagrange/Lagrange.OneBot"),i("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," && "),i("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"xattr"),i("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," -rd"),i("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," com.apple.quarantine"),i("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," ./lagrange/Lagrange.OneBot")])])])],-1),i("p",null,[l("这两条命令移除海豹核心程序和 Lagrange 的 "),i("a",{href:"https://zhuanlan.zhihu.com/p/611471192",target:"_blank",rel:"noreferrer"},"隔离属性"),l(",并给予其足够的运行权限。")],-1),i("p",null,[l("随后,运行 "),i("code",null,"./sealdice-core"),l(" 来启动海豹。在浏览器中输入 "),i("code",null,"localhost:3211"),l(" 来访问后台(WebUI)。")],-1),i("div",{class:"info custom-block"},[i("p",{class:"custom-block-title"},"macOS 启动海豹失败问题排查"),i("ol",null,[i("li",null,[l("启动时若出现 "),i("code",null,"Bad CPU type in executable"),l(",请确认你是否下载的是正确版本的海豹。"),i("strong",null,[l("Intel 芯片的 Mac 请下载 "),i("code",null,"darwin x64"),l(" ,Apple Silicon 芯片请下载 "),i("code",null,"darwin arm64"),l("。")])]),i("li",null,"请确认 macOS 版本高于 10.12,低版本 macOS 不支持运行,建议尽量将 macOS 更新至最新稳定版本。")])],-1)])),_:1}),a(t,{label:"Docker"},{default:e(()=>s[3]||(s[3]=[i("p",null,[l("海豹提供了官方的 Docker 镜像,支持 amd64 和 arm64 两种架构。你可以在 "),i("a",{href:"https://github.com/sealdice/sealdice-build/pkgs/container/sealdice",target:"_blank",rel:"noreferrer"},"此处"),l(" 找到各个版本的镜像。")],-1),i("p",null,[l("标签为 edge 的镜像与名为 "),i("code",null,"Latest Dev Build"),l(" 的最新构建二进制发布内容一致。")],-1),i("p",null,[l("标签为 beta 的镜像与名为 "),i("code",null,"Latest Beta Build"),l(" 的最新构建二进制发布内容一致。")],-1),i("p",null,[l("参考以下命令运行镜像。你可能需要自行通过 "),i("code",null,"-v"),l(" 选项来指定目录挂载、修改 "),i("code",null,"-p"),l(" 调整端口暴露等:")],-1),i("div",{class:"language-bash vp-adaptive-theme"},[i("button",{title:"Copy Code",class:"copy"}),i("span",{class:"lang"},"bash"),i("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[i("code",null,[i("span",{class:"line"},[i("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"docker"),i("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," run"),i("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," -d"),i("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," --name"),i("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," sealdice"),i("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," -p"),i("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," 3211:3211"),i("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," ghcr.io/sealdice/sealdice:edge")])])])],-1),i("p",null,[l("在挂载目录时请注意:海豹核心在容器中的工作目录是根目录,对应的数据目录路径是:"),i("code",null,"/data"),l(" 和 "),i("code",null,"/backups"),l("。参考 "),i("a",{href:"./about_file.html"},"海豹的本地文件"),l("。")],-1),i("p",null,[l("如果你需要访问宿主机上监听 localhost 的服务(通常 QQ 连接服务和代理服务的默认配置皆是如此),你需要指定 "),i("code",null,"--network host"),l(" 而不是 "),i("code",null,"-p"),l(",使容器和宿主机位于同一网络中。")],-1),i("div",{class:"warning custom-block"},[i("p",{class:"custom-block-title"},"注意:容器模式下功能受限"),i("p",null,"Docker 部署的海豹功能有所限制,如无法使用内置客户端登录、无法在线更新等。")],-1)])),_:1}),a(t,{label:"Android"},{default:e(()=>s[4]||(s[4]=[i("p",null,[l("请查看"),i("a",{href:"./android.html"},"安卓端登录"),l("。")],-1)])),_:1})]),_:1}),s[14]||(s[14]=h('

    连接平台

    在完成上面的步骤后,你已经成功启动了海豹核心。接下来请根据你所需要对接平台的接入手册,来连接海豹和对应平台。

    见「连接平台」一章,包括:

    安装为系统服务(可选)

    如果你使用远程 Linux 服务器部署,或者使用终端启动海豹核心,那么,随着终端关闭,通常海豹核心也会一同关闭。

    海豹核心提供了一种自动安装为系统服务(systemd 服务项)的功能,可以免去手动配置。

    服务名称和服务的启动用户均可以通过提供命令行参数自定义,请运行 ./sealdice-core -h 查阅详细说明。

    默认情况下,海豹核心将尝试安装一个由 root 用户运行的,名为 sealdice.service 的服务。这要求海豹核心拥有 root 权限(通常由 sudo 运行得到)。

    ',9)),a(n,{sharedStateKey:"os"},{default:e(()=>[a(t,{label:"Linux"},{default:e(()=>s[5]||(s[5]=[i("div",{class:"language-bash vp-adaptive-theme"},[i("button",{title:"Copy Code",class:"copy"}),i("span",{class:"lang"},"bash"),i("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[i("code",null,[i("span",{class:"line"},[i("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"$"),i("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," ./sealdice-core"),i("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," -i")]),l(` +`),i("span",{class:"line"},[i("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"正在安装系统服务,安装完成后,SealDice将自动随系统启动")]),l(` +`),i("span",{class:"line"},[i("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"安装完成,正在启动……")])])])],-1)])),_:1})]),_:1}),s[15]||(s[15]=i("p",null,"也提供自动卸载:",-1)),a(n,{sharedStateKey:"os"},{default:e(()=>[a(t,{label:"Linux"},{default:e(()=>s[6]||(s[6]=[i("div",{class:"language-bash vp-adaptive-theme"},[i("button",{title:"Copy Code",class:"copy"}),i("span",{class:"lang"},"bash"),i("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[i("code",null,[i("span",{class:"line"},[i("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"$"),i("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," ./sealdice-core"),i("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," --uninstall")]),l(` +`),i("span",{class:"line"},[i("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"正在卸载系统服务……")]),l(` +`),i("span",{class:"line"},[i("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"系统服务已删除")])])])],-1)])),_:1})]),_:1}),s[16]||(s[16]=i("p",null,"安装完成后,可以使用 systemctl 来管理服务:",-1)),a(n,{sharedStateKey:"os"},{default:e(()=>[a(t,{label:"Linux"},{default:e(()=>s[7]||(s[7]=[i("div",{class:"language-shell vp-adaptive-theme"},[i("button",{title:"Copy Code",class:"copy"}),i("span",{class:"lang"},"shell"),i("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[i("code",null,[i("span",{class:"line"},[i("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"systemctl"),i("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," status"),i("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," sealdice"),i("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}}," # 查看运行状态")]),l(` +`),i("span",{class:"line"},[i("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"systemctl"),i("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," start"),i("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," sealdice"),i("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}}," # 启动海豹核心")]),l(` +`),i("span",{class:"line"},[i("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"systemctl"),i("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," restart"),i("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," sealdice"),i("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}}," # 启动或重启海豹核心")]),l(` +`),i("span",{class:"line"},[i("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"systemctl"),i("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," stop"),i("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," sealdice"),i("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}}," # 停止海豹核心")]),l(` +`),i("span",{class:"line"},[i("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"journalctl"),i("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," -xe"),i("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," -u"),i("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," sealdice.service"),i("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}}," # 查看日志")])])])],-1),i("p",null,[l("以上命令的详细用法,请查阅你系统的 "),i("code",null,"systemd"),l(" 文档。")],-1)])),_:1})]),_:1}),s[17]||(s[17]=h('

    更新海豹

    当有新版本海豹核心时,你可以从 WebUI 或 .bot 回复语中看见新版本提示。

    目前海豹有三种更新方法,用户可以自行选择自己喜欢的方式,对于安卓端用户请看安卓豹更新

    请骰主进行更新时确保自己可以接触海豹后台,以免更新失败。同时更新前请做好备份,以免数据丢失。

    自动更新

    若有新版本,后台(WebUI)的「主页」会显示一个较为显眼的更新按钮,可以直接点击按钮更新。

    你还可以使用命令更新:执行 .master checkupdate,此指令需要 Master 权限,具体请看 Master 管理

    如果你采用了任何自动拉起进程的手段,包括但不限于 Linux 系统的 systemd 等,切勿使用自动更新。请稳妥地停止进程后进行手动替换更新。

    手动更新

    从海豹官网下载全新的安装包,解压后请勿运行,直接覆盖替换旧版本海豹,然后启动海豹即可。

    ',10)),i("h3",c,[s[8]||(s[8]=l("上传固件 ")),a(r,{type:"tip",text:"v1.4.0"}),s[9]||(s[9]=l()),s[10]||(s[10]=i("a",{class:"header-anchor",href:"#上传固件","aria-label":'Permalink to "上传固件 "'},"​",-1))]),i("p",null,[s[11]||(s[11]=l("从 ")),a(r,{type:"tip",text:"v1.4.0"}),s[12]||(s[12]=l(" 起,海豹支持后台固件升级功能,你可以在「综合设置」-「基本设置」-「海豹」找到这项功能。"))]),s[18]||(s[18]=i("p",null,"你可以使用指定的压缩包对当前海豹进行覆盖,上传完成后会自动重启海豹。",-1)),s[19]||(s[19]=i("h3",{id:"安卓豹更新",tabindex:"-1"},[l("安卓豹更新 "),i("a",{class:"header-anchor",href:"#安卓豹更新","aria-label":'Permalink to "安卓豹更新"'},"​")],-1)),s[20]||(s[20]=i("p",null,"安卓端海豹核心无法使用以上方法进行更新,你可以直接下载新版本海豹进行安装,会自动替换旧版本海豹核心。",-1)),s[21]||(s[21]=i("p",null,"更新前请「导出数据」以备份数据。",-1))])}const v=o(u,[["render",g]]);export{f as __pageData,v as default}; diff --git a/assets/deploy_quick-start.md.FpFxN0Au.lean.js b/assets/deploy_quick-start.md.FpFxN0Au.lean.js new file mode 100644 index 000000000..e11c78765 --- /dev/null +++ b/assets/deploy_quick-start.md.FpFxN0Au.lean.js @@ -0,0 +1,10 @@ +import{_ as o,c as p,a6 as h,G as a,w as e,j as i,a as l,B as d,o as k}from"./chunks/framework.B1keMFNq.js";const f=JSON.parse('{"title":"快速开始","description":"","frontmatter":{"lang":"zh-cn","title":"快速开始"},"headers":[],"relativePath":"deploy/quick-start.md","filePath":"deploy/quick-start.md","lastUpdated":1728702230000}'),u={name:"deploy/quick-start.md"},c={id:"上传固件",tabindex:"-1"};function g(F,s,m,b,y,C){const t=d("PluginTabsTab"),n=d("PluginTabs"),r=d("Badge");return k(),p("div",null,[s[13]||(s[13]=h('

    快速开始

    本节内容

    本节将会指导你如何在你的 PC、服务器、甚至安卓手机上搭建和部署海豹核心。

    如果你对计算机、服务器等相关知识没有任何了解,或者在阅读本节时,对内容中的一些名词完全不理解,我们非常建议你先自行学习,对基本计算机知识有所了解之后,再阅读本节进行部署。

    获取海豹

    可以从以下两个渠道获取海豹核心安装包:

    • 官网:从 官网下载页 获取最新的正式版海豹核心安装包。

    • GitHub:从 GitHub Release 获取海豹核心安装包。

      这一渠道提供两个版本:以 版本号+发布日期 命名的正式版,与官网一致;以 Latest Dev Build+日期 命名的最新构建,可能有各种 Bug,不推荐一般用户使用。

    提示:我该选择从哪里获取?

    我们非常建议你使用从官网获取的正式版海豹。对于绝大多数用户来说,官网的下载最顺畅和便捷,所提供的正式版也适合绝大多数用户使用。

    海豹提供了多个平台的安装包,请确认你的操作系统并选择对应版本的安装包。提供的平台如下:

    • Windows:普通用户首选,适用于 Windows 7 或者更高,同样可以部署在 Windows 云服务器。
      • 64 位:适合绝大多数用户使用。
      • 32 位:只在你明确知道为何要使用 32 位版本的情况下使用 32 位版本。
    • Linux: 提供给更专业的用户使用,需要使用终端启动。适用于服务器、树莓派等设备。
      • x64:绝大多数使用 Intel 或 AMD CPU 的服务器都应使用此版本。
      • arm64:树莓派等 arm 设备请使用 arm64 版。
    • macOS:提供给 Mac 用户使用,需要使用终端启动。
      • arm64:Apple Silicon 芯片(M1、M2 等)请使用 arm64 版。
      • x64:Intel 芯片请使用 x64 版。
    • Docker:提供对应 Docker 镜像,支持多种架构。
      • amd64
      • arm64
    • Android:提供 Android 的 apk 安装包。

    启动

    注意

    永远不要直接运行压缩包中的海豹核心,也不要在临时目录中运行海豹核心。

    将安装包解压到合适的目录。考虑到后续升级,将目录名中的版本号删去或许是更好的做法。

    根据系统不同,用以下方法即可启动海豹:

    ',12)),a(n,{sharedStateKey:"os"},{default:e(()=>[a(t,{label:"Windows"},{default:e(()=>s[0]||(s[0]=[i("p",null,[l("双击运行 "),i("code",null,"sealdice-core.exe"),l("。数秒钟后,海豹核心将会在后台运行并弹出提示。")],-1),i("p",null,"在任务栏中找到海豹图标,点击即可打开后台(WebUI)。",-1)])),_:1}),a(t,{label:"Linux"},{default:e(()=>s[1]||(s[1]=[i("p",null,[l("在 "),i("code",null,"sealdice-core"),l(" 所在的目录启动终端,输入以下命令:")],-1),i("div",{class:"language-bash vp-adaptive-theme"},[i("button",{title:"Copy Code",class:"copy"}),i("span",{class:"lang"},"bash"),i("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[i("code",null,[i("span",{class:"line"},[i("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"chmod"),i("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," +x"),i("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," ./sealdice-core")])])])],-1),i("p",null,[l("给予其足够的运行权限。随后,运行 "),i("code",null,"./sealdice-core"),l(" 来启动海豹。在浏览器中输入 "),i("code",null,"localhost:3211"),l(" 来访问后台(WebUI)。")],-1)])),_:1}),a(t,{label:"macOS"},{default:e(()=>s[2]||(s[2]=[i("p",null,[l("在 "),i("code",null,"sealdice-core"),l(" 所在的目录启动终端,输入以下命令:")],-1),i("div",{class:"language-zsh vp-adaptive-theme"},[i("button",{title:"Copy Code",class:"copy"}),i("span",{class:"lang"},"zsh"),i("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[i("code",null,[i("span",{class:"line"},[i("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"chmod"),i("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," +x"),i("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," ./sealdice-core"),i("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," && "),i("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"xattr"),i("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," -rd"),i("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," com.apple.quarantine"),i("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," ./sealdice-core")]),l(` +`),i("span",{class:"line"},[i("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"chmod"),i("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," +x"),i("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," ./lagrange/Lagrange.OneBot"),i("span",{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}}," && "),i("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"xattr"),i("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," -rd"),i("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," com.apple.quarantine"),i("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," ./lagrange/Lagrange.OneBot")])])])],-1),i("p",null,[l("这两条命令移除海豹核心程序和 Lagrange 的 "),i("a",{href:"https://zhuanlan.zhihu.com/p/611471192",target:"_blank",rel:"noreferrer"},"隔离属性"),l(",并给予其足够的运行权限。")],-1),i("p",null,[l("随后,运行 "),i("code",null,"./sealdice-core"),l(" 来启动海豹。在浏览器中输入 "),i("code",null,"localhost:3211"),l(" 来访问后台(WebUI)。")],-1),i("div",{class:"info custom-block"},[i("p",{class:"custom-block-title"},"macOS 启动海豹失败问题排查"),i("ol",null,[i("li",null,[l("启动时若出现 "),i("code",null,"Bad CPU type in executable"),l(",请确认你是否下载的是正确版本的海豹。"),i("strong",null,[l("Intel 芯片的 Mac 请下载 "),i("code",null,"darwin x64"),l(" ,Apple Silicon 芯片请下载 "),i("code",null,"darwin arm64"),l("。")])]),i("li",null,"请确认 macOS 版本高于 10.12,低版本 macOS 不支持运行,建议尽量将 macOS 更新至最新稳定版本。")])],-1)])),_:1}),a(t,{label:"Docker"},{default:e(()=>s[3]||(s[3]=[i("p",null,[l("海豹提供了官方的 Docker 镜像,支持 amd64 和 arm64 两种架构。你可以在 "),i("a",{href:"https://github.com/sealdice/sealdice-build/pkgs/container/sealdice",target:"_blank",rel:"noreferrer"},"此处"),l(" 找到各个版本的镜像。")],-1),i("p",null,[l("标签为 edge 的镜像与名为 "),i("code",null,"Latest Dev Build"),l(" 的最新构建二进制发布内容一致。")],-1),i("p",null,[l("标签为 beta 的镜像与名为 "),i("code",null,"Latest Beta Build"),l(" 的最新构建二进制发布内容一致。")],-1),i("p",null,[l("参考以下命令运行镜像。你可能需要自行通过 "),i("code",null,"-v"),l(" 选项来指定目录挂载、修改 "),i("code",null,"-p"),l(" 调整端口暴露等:")],-1),i("div",{class:"language-bash vp-adaptive-theme"},[i("button",{title:"Copy Code",class:"copy"}),i("span",{class:"lang"},"bash"),i("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[i("code",null,[i("span",{class:"line"},[i("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"docker"),i("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," run"),i("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," -d"),i("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," --name"),i("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," sealdice"),i("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," -p"),i("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," 3211:3211"),i("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," ghcr.io/sealdice/sealdice:edge")])])])],-1),i("p",null,[l("在挂载目录时请注意:海豹核心在容器中的工作目录是根目录,对应的数据目录路径是:"),i("code",null,"/data"),l(" 和 "),i("code",null,"/backups"),l("。参考 "),i("a",{href:"./about_file.html"},"海豹的本地文件"),l("。")],-1),i("p",null,[l("如果你需要访问宿主机上监听 localhost 的服务(通常 QQ 连接服务和代理服务的默认配置皆是如此),你需要指定 "),i("code",null,"--network host"),l(" 而不是 "),i("code",null,"-p"),l(",使容器和宿主机位于同一网络中。")],-1),i("div",{class:"warning custom-block"},[i("p",{class:"custom-block-title"},"注意:容器模式下功能受限"),i("p",null,"Docker 部署的海豹功能有所限制,如无法使用内置客户端登录、无法在线更新等。")],-1)])),_:1}),a(t,{label:"Android"},{default:e(()=>s[4]||(s[4]=[i("p",null,[l("请查看"),i("a",{href:"./android.html"},"安卓端登录"),l("。")],-1)])),_:1})]),_:1}),s[14]||(s[14]=h('

    连接平台

    在完成上面的步骤后,你已经成功启动了海豹核心。接下来请根据你所需要对接平台的接入手册,来连接海豹和对应平台。

    见「连接平台」一章,包括:

    安装为系统服务(可选)

    如果你使用远程 Linux 服务器部署,或者使用终端启动海豹核心,那么,随着终端关闭,通常海豹核心也会一同关闭。

    海豹核心提供了一种自动安装为系统服务(systemd 服务项)的功能,可以免去手动配置。

    服务名称和服务的启动用户均可以通过提供命令行参数自定义,请运行 ./sealdice-core -h 查阅详细说明。

    默认情况下,海豹核心将尝试安装一个由 root 用户运行的,名为 sealdice.service 的服务。这要求海豹核心拥有 root 权限(通常由 sudo 运行得到)。

    ',9)),a(n,{sharedStateKey:"os"},{default:e(()=>[a(t,{label:"Linux"},{default:e(()=>s[5]||(s[5]=[i("div",{class:"language-bash vp-adaptive-theme"},[i("button",{title:"Copy Code",class:"copy"}),i("span",{class:"lang"},"bash"),i("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[i("code",null,[i("span",{class:"line"},[i("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"$"),i("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," ./sealdice-core"),i("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," -i")]),l(` +`),i("span",{class:"line"},[i("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"正在安装系统服务,安装完成后,SealDice将自动随系统启动")]),l(` +`),i("span",{class:"line"},[i("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"安装完成,正在启动……")])])])],-1)])),_:1})]),_:1}),s[15]||(s[15]=i("p",null,"也提供自动卸载:",-1)),a(n,{sharedStateKey:"os"},{default:e(()=>[a(t,{label:"Linux"},{default:e(()=>s[6]||(s[6]=[i("div",{class:"language-bash vp-adaptive-theme"},[i("button",{title:"Copy Code",class:"copy"}),i("span",{class:"lang"},"bash"),i("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[i("code",null,[i("span",{class:"line"},[i("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"$"),i("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," ./sealdice-core"),i("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," --uninstall")]),l(` +`),i("span",{class:"line"},[i("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"正在卸载系统服务……")]),l(` +`),i("span",{class:"line"},[i("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"系统服务已删除")])])])],-1)])),_:1})]),_:1}),s[16]||(s[16]=i("p",null,"安装完成后,可以使用 systemctl 来管理服务:",-1)),a(n,{sharedStateKey:"os"},{default:e(()=>[a(t,{label:"Linux"},{default:e(()=>s[7]||(s[7]=[i("div",{class:"language-shell vp-adaptive-theme"},[i("button",{title:"Copy Code",class:"copy"}),i("span",{class:"lang"},"shell"),i("pre",{class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},[i("code",null,[i("span",{class:"line"},[i("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"systemctl"),i("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," status"),i("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," sealdice"),i("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}}," # 查看运行状态")]),l(` +`),i("span",{class:"line"},[i("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"systemctl"),i("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," start"),i("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," sealdice"),i("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}}," # 启动海豹核心")]),l(` +`),i("span",{class:"line"},[i("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"systemctl"),i("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," restart"),i("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," sealdice"),i("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}}," # 启动或重启海豹核心")]),l(` +`),i("span",{class:"line"},[i("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"systemctl"),i("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," stop"),i("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," sealdice"),i("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}}," # 停止海豹核心")]),l(` +`),i("span",{class:"line"},[i("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"journalctl"),i("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," -xe"),i("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," -u"),i("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," sealdice.service"),i("span",{style:{"--shiki-light":"#6A737D","--shiki-dark":"#6A737D"}}," # 查看日志")])])])],-1),i("p",null,[l("以上命令的详细用法,请查阅你系统的 "),i("code",null,"systemd"),l(" 文档。")],-1)])),_:1})]),_:1}),s[17]||(s[17]=h('

    更新海豹

    当有新版本海豹核心时,你可以从 WebUI 或 .bot 回复语中看见新版本提示。

    目前海豹有三种更新方法,用户可以自行选择自己喜欢的方式,对于安卓端用户请看安卓豹更新

    请骰主进行更新时确保自己可以接触海豹后台,以免更新失败。同时更新前请做好备份,以免数据丢失。

    自动更新

    若有新版本,后台(WebUI)的「主页」会显示一个较为显眼的更新按钮,可以直接点击按钮更新。

    你还可以使用命令更新:执行 .master checkupdate,此指令需要 Master 权限,具体请看 Master 管理

    如果你采用了任何自动拉起进程的手段,包括但不限于 Linux 系统的 systemd 等,切勿使用自动更新。请稳妥地停止进程后进行手动替换更新。

    手动更新

    从海豹官网下载全新的安装包,解压后请勿运行,直接覆盖替换旧版本海豹,然后启动海豹即可。

    ',10)),i("h3",c,[s[8]||(s[8]=l("上传固件 ")),a(r,{type:"tip",text:"v1.4.0"}),s[9]||(s[9]=l()),s[10]||(s[10]=i("a",{class:"header-anchor",href:"#上传固件","aria-label":'Permalink to "上传固件 "'},"​",-1))]),i("p",null,[s[11]||(s[11]=l("从 ")),a(r,{type:"tip",text:"v1.4.0"}),s[12]||(s[12]=l(" 起,海豹支持后台固件升级功能,你可以在「综合设置」-「基本设置」-「海豹」找到这项功能。"))]),s[18]||(s[18]=i("p",null,"你可以使用指定的压缩包对当前海豹进行覆盖,上传完成后会自动重启海豹。",-1)),s[19]||(s[19]=i("h3",{id:"安卓豹更新",tabindex:"-1"},[l("安卓豹更新 "),i("a",{class:"header-anchor",href:"#安卓豹更新","aria-label":'Permalink to "安卓豹更新"'},"​")],-1)),s[20]||(s[20]=i("p",null,"安卓端海豹核心无法使用以上方法进行更新,你可以直接下载新版本海豹进行安装,会自动替换旧版本海豹核心。",-1)),s[21]||(s[21]=i("p",null,"更新前请「导出数据」以备份数据。",-1))])}const v=o(u,[["render",g]]);export{f as __pageData,v as default}; diff --git a/assets/deploy_special_feature.md.CqsAxWzE.js b/assets/deploy_special_feature.md.CqsAxWzE.js new file mode 100644 index 000000000..b5c6e10fa --- /dev/null +++ b/assets/deploy_special_feature.md.CqsAxWzE.js @@ -0,0 +1,37 @@ +import{_ as r,c,a6 as t,j as n,G as s,w as p,B as l,o as d}from"./chunks/framework.B1keMFNq.js";const v=JSON.parse('{"title":"特色功能","description":"","frontmatter":{"lang":"zh-cn","title":"特色功能"},"headers":[],"relativePath":"deploy/special_feature.md","filePath":"deploy/special_feature.md","lastUpdated":1728702230000}'),h={name:"deploy/special_feature.md"},u={class:"info custom-block"},b={class:"info custom-block"};function m(g,a,f,k,x,q){const e=l("ChatBox"),o=l("PluginTabsTab"),i=l("PluginTabs");return d(),c("div",null,[a[2]||(a[2]=t('

    特色功能

    本节内容

    本节将会介绍海豹的特色功能。

    指令兼容性

    海豹核心兼容了溯洄核心、赵骰核心和塔骰核心的绝大部分主流指令,无论之前用过哪一个都可以轻松上手。

    海豹核心对指令格式不敏感,你可以使用 .r1d20 +1.r d20+1.stshow力量 敏捷。st hp - 1 等等各种写法。

    提示

    虽然海豹尽可能提高兼容性,我们仍推荐适当使用空格,以避免预期外结果。

    易于部署和使用

    海豹的设计初衷是 「能被任何 TRPG 玩家喜爱和使用」,同时秉持 「没有提供 UI 的功能等于不存在」 的理念。

    只需一个不到 25 MB 的安装包、一个可用的机器人账号、和一小段空闲时间,任何人都可以搭建一个 TRPG 骰子。

    提示

    如果你希望在 QQ 平台上搭建骰子,由于 QQ 原则上不允许机器人账号,你会需要使用一些特殊技术,这可能花费你更多时间和精力。

    极少的资源占用

    由于 Golang 的高效,海豹核心只占用大概 40 MB 内存,以及极少的 CPU 资源。

    自带的《CoC 7th 怪物之锤》和《D&D 系列资料》会另外占用 50 - 70 MB 内存,但能提供极为强大的资料查询功能。

    内存占用会随着持续运行而稍稍增长并有所波动。根据我们的观察,即使是持续运行数月的大型公骰,内存占用也不会超过数百 MB。

    强自定义

    提供了友好的 WebUI 界面,可以自定义大部分指令的回复语句。

    同时对于自定义回复功能进行了强化,你可以编写一些复杂逻辑,使你的骰子更加鲜活。

    人工智能鸽子

    让你想咕就咕。

    ',19)),n("div",u,[a[0]||(a[0]=n("p",{class:"custom-block-title"},"示例",-1)),s(i,null,{default:p(()=>[s(o,{label:".gugu"},{default:p(()=>[s(e,{messages:[{content:".gugu",send:!0},{content:"🕊️: <木落>在来开团的路上被巨龙叼走了!"}]})]),_:1}),s(o,{label:"查看鸽子背后的故事"},{default:p(()=>[s(e,{messages:[{content:".gugu 来源",send:!0},{content:`🕊️: 前往了一个以前捕鲸的小岛度假~这里人很亲切!但是吃了这里的鱼肉料理之后有点晕晕的诶...想到前几天<木落>的短信,还是别追究他为什么不在了。 + ——鹊鹊结合实际经历创作`}]})]),_:1})]),_:1})]),a[3]||(a[3]=t('

    强大的查询功能

    海豹搭载了全文搜索技术(仅限 PC 版),可以看作是一个微型搜索引擎。

    text
    .find 30尺 法术

    细节可参见 查询指令 一节。

    通用特化支持

    代替他人检定 / 操作他人属性

    CoC 特化支持

    属性同义词

    各种旧版翻译、俗称、简繁汉字的属性被视为同一属性。

    默认技能等级

    内置部分人物卡上没有的默认技能等级。

    包括不限于速记、园艺、攀爬、各种武器等等。

    支持 .scb 指令

    用于在 sc 时附加一个奖励骰。

    适用于规则书中的关键连接自救规则。

    D&D 特化支持

    属性同义词

    各种旧版翻译、俗称、简繁汉字的属性被视为同一属性。

    优势骰劣势骰

    ',19)),n("div",b,[a[1]||(a[1]=n("p",{class:"custom-block-title"},"示例",-1)),s(e,{messages:[{content:".set 20",send:!0},{content:"设定默认骰子面数为 20"},{content:".r d20优势",send:!0},{content:"<木落>掷出了 d20优势=[{7 | 6 }]=7"},{content:".r d劣势",send:!0},{content:"<木落>掷出了 d劣势=[{16 | 18 }]=16"}]})]),a[4]||(a[4]=t(`

    属性调整值和熟练自动计算

    临时属性

    法术位支持

    死亡豁免

    休息

    可以实时编辑的跑团日志

    海豹开发了 日志在线染色器

    在海豹中记录的日志会自动上传,省去你一一发送日志文件的麻烦。

    除了海豹 Log 自用之外,支持 QQ 格式和塔骰格式,将你的 Log 全文粘贴到文本框里即可。

    是纯净骰,也是娱乐骰

    海豹除了核心指令之外,都被设计为可插拔的,目前有 7 个内置扩展。

    关闭对应扩展会连同扩展带来的指令一块关闭。

    因此在跑团时,如果你不想要任何娱乐功能,你可以(以 CoC 团为例):

    text
    .ext fun off // 关闭.jrrp和.gugu
    +.ext reply off // 关闭关键字回复
    +.ext deck off // 关闭抽牌 .draw
    +.ext dnd5e off // 关闭dnd5e系列指令
    +.ext story off // 关闭.name[随机指令]/.modu[魔都查询]/.who[排序]等
    +
    +也可以写成一行:
    +.ext fun reply deck dnd5e story off

    这样一来,就只剩下 coc 系列指令和 log 指令了。

    这个改动在当前群聊持续生效。你也可以再打开相应扩展:

    text
    .ext fun on

    如果你是骰主,你也可以在 WebUI 中设置各个扩展是否默认开启。这配置对于海豹核心新加入的群聊生效。

    更强的指令支持

    海豹核心将表达式翻译成字节码,丢进指令虚拟机里执行,同时也做了很强的兼容性处理。

    可以在不同骰系下测试一下这些指令:

    text
    .r 30 + (-1d20) + 49
    +.r d20 + (3 + 1d4)
    +.r 1 + (3+2)d(4+2d10)
    +
    +.sc 0/-1
    +.sc (1+2)/0
    +.sc 0/1d4+(3*2)
    +.sc 1 / 2
    +.sc 1/2 + 3
    +
    +.ra b 测试50
    +.ra b 50 测试

    彩蛋:

    text
    .r 1+d10-3*4 --asm
    +<木落>掷出了 1+d10-3*4=1 + 3[1d10=3] - 12=-8
    +=== VM Code ===
    +push 1
    +mark.left
    +push 1
    +mark.left
    +push 10
    +dice
    +add
    +mark.left
    +push 3
    +mark.left
    +push 4
    +mul
    +sub
    +halt
    +=== VM Code End===

    跨平台

    海豹核心的底层架构,支持单进程多号,也支持很方便地多开

    多号指每个骰子上连接多个帐号,并且支持同时连接不同平台。

    多开指同时运行多个海豹核心,以提供各自不同的服务内容。

    TRPG 规则支持列表

    • COC7
    • COC - DeltaGreen (.setcoc dg)
    • DND5e
    • 暗影狂奔 (.rsr)
    • WOD/无限团 (.ww)
    • 双十字 DoubleCross (.dx)
    • 共鸣性怪异 Emoklore (.ek .ekgen)
    • 剑世界 2.5 (插件)
    • 明日方舟跑团规则 (插件)
    • 其它插件由海豹社区提供,欢迎前去 插件仓库 查看

    如果你不跑这些规则,或者觉得并无必要,可以在后台关闭对应的指令。

    如果你喜欢的规则这里没有,那么可以去插件仓库看一看,或者自己编写规则模板插件!

    `,32))])}const C=r(h,[["render",m]]);export{v as __pageData,C as default}; diff --git a/assets/deploy_special_feature.md.CqsAxWzE.lean.js b/assets/deploy_special_feature.md.CqsAxWzE.lean.js new file mode 100644 index 000000000..b5c6e10fa --- /dev/null +++ b/assets/deploy_special_feature.md.CqsAxWzE.lean.js @@ -0,0 +1,37 @@ +import{_ as r,c,a6 as t,j as n,G as s,w as p,B as l,o as d}from"./chunks/framework.B1keMFNq.js";const v=JSON.parse('{"title":"特色功能","description":"","frontmatter":{"lang":"zh-cn","title":"特色功能"},"headers":[],"relativePath":"deploy/special_feature.md","filePath":"deploy/special_feature.md","lastUpdated":1728702230000}'),h={name:"deploy/special_feature.md"},u={class:"info custom-block"},b={class:"info custom-block"};function m(g,a,f,k,x,q){const e=l("ChatBox"),o=l("PluginTabsTab"),i=l("PluginTabs");return d(),c("div",null,[a[2]||(a[2]=t('

    特色功能

    本节内容

    本节将会介绍海豹的特色功能。

    指令兼容性

    海豹核心兼容了溯洄核心、赵骰核心和塔骰核心的绝大部分主流指令,无论之前用过哪一个都可以轻松上手。

    海豹核心对指令格式不敏感,你可以使用 .r1d20 +1.r d20+1.stshow力量 敏捷。st hp - 1 等等各种写法。

    提示

    虽然海豹尽可能提高兼容性,我们仍推荐适当使用空格,以避免预期外结果。

    易于部署和使用

    海豹的设计初衷是 「能被任何 TRPG 玩家喜爱和使用」,同时秉持 「没有提供 UI 的功能等于不存在」 的理念。

    只需一个不到 25 MB 的安装包、一个可用的机器人账号、和一小段空闲时间,任何人都可以搭建一个 TRPG 骰子。

    提示

    如果你希望在 QQ 平台上搭建骰子,由于 QQ 原则上不允许机器人账号,你会需要使用一些特殊技术,这可能花费你更多时间和精力。

    极少的资源占用

    由于 Golang 的高效,海豹核心只占用大概 40 MB 内存,以及极少的 CPU 资源。

    自带的《CoC 7th 怪物之锤》和《D&D 系列资料》会另外占用 50 - 70 MB 内存,但能提供极为强大的资料查询功能。

    内存占用会随着持续运行而稍稍增长并有所波动。根据我们的观察,即使是持续运行数月的大型公骰,内存占用也不会超过数百 MB。

    强自定义

    提供了友好的 WebUI 界面,可以自定义大部分指令的回复语句。

    同时对于自定义回复功能进行了强化,你可以编写一些复杂逻辑,使你的骰子更加鲜活。

    人工智能鸽子

    让你想咕就咕。

    ',19)),n("div",u,[a[0]||(a[0]=n("p",{class:"custom-block-title"},"示例",-1)),s(i,null,{default:p(()=>[s(o,{label:".gugu"},{default:p(()=>[s(e,{messages:[{content:".gugu",send:!0},{content:"🕊️: <木落>在来开团的路上被巨龙叼走了!"}]})]),_:1}),s(o,{label:"查看鸽子背后的故事"},{default:p(()=>[s(e,{messages:[{content:".gugu 来源",send:!0},{content:`🕊️: 前往了一个以前捕鲸的小岛度假~这里人很亲切!但是吃了这里的鱼肉料理之后有点晕晕的诶...想到前几天<木落>的短信,还是别追究他为什么不在了。 + ——鹊鹊结合实际经历创作`}]})]),_:1})]),_:1})]),a[3]||(a[3]=t('

    强大的查询功能

    海豹搭载了全文搜索技术(仅限 PC 版),可以看作是一个微型搜索引擎。

    text
    .find 30尺 法术

    细节可参见 查询指令 一节。

    通用特化支持

    代替他人检定 / 操作他人属性

    CoC 特化支持

    属性同义词

    各种旧版翻译、俗称、简繁汉字的属性被视为同一属性。

    默认技能等级

    内置部分人物卡上没有的默认技能等级。

    包括不限于速记、园艺、攀爬、各种武器等等。

    支持 .scb 指令

    用于在 sc 时附加一个奖励骰。

    适用于规则书中的关键连接自救规则。

    D&D 特化支持

    属性同义词

    各种旧版翻译、俗称、简繁汉字的属性被视为同一属性。

    优势骰劣势骰

    ',19)),n("div",b,[a[1]||(a[1]=n("p",{class:"custom-block-title"},"示例",-1)),s(e,{messages:[{content:".set 20",send:!0},{content:"设定默认骰子面数为 20"},{content:".r d20优势",send:!0},{content:"<木落>掷出了 d20优势=[{7 | 6 }]=7"},{content:".r d劣势",send:!0},{content:"<木落>掷出了 d劣势=[{16 | 18 }]=16"}]})]),a[4]||(a[4]=t(`

    属性调整值和熟练自动计算

    临时属性

    法术位支持

    死亡豁免

    休息

    可以实时编辑的跑团日志

    海豹开发了 日志在线染色器

    在海豹中记录的日志会自动上传,省去你一一发送日志文件的麻烦。

    除了海豹 Log 自用之外,支持 QQ 格式和塔骰格式,将你的 Log 全文粘贴到文本框里即可。

    是纯净骰,也是娱乐骰

    海豹除了核心指令之外,都被设计为可插拔的,目前有 7 个内置扩展。

    关闭对应扩展会连同扩展带来的指令一块关闭。

    因此在跑团时,如果你不想要任何娱乐功能,你可以(以 CoC 团为例):

    text
    .ext fun off // 关闭.jrrp和.gugu
    +.ext reply off // 关闭关键字回复
    +.ext deck off // 关闭抽牌 .draw
    +.ext dnd5e off // 关闭dnd5e系列指令
    +.ext story off // 关闭.name[随机指令]/.modu[魔都查询]/.who[排序]等
    +
    +也可以写成一行:
    +.ext fun reply deck dnd5e story off

    这样一来,就只剩下 coc 系列指令和 log 指令了。

    这个改动在当前群聊持续生效。你也可以再打开相应扩展:

    text
    .ext fun on

    如果你是骰主,你也可以在 WebUI 中设置各个扩展是否默认开启。这配置对于海豹核心新加入的群聊生效。

    更强的指令支持

    海豹核心将表达式翻译成字节码,丢进指令虚拟机里执行,同时也做了很强的兼容性处理。

    可以在不同骰系下测试一下这些指令:

    text
    .r 30 + (-1d20) + 49
    +.r d20 + (3 + 1d4)
    +.r 1 + (3+2)d(4+2d10)
    +
    +.sc 0/-1
    +.sc (1+2)/0
    +.sc 0/1d4+(3*2)
    +.sc 1 / 2
    +.sc 1/2 + 3
    +
    +.ra b 测试50
    +.ra b 50 测试

    彩蛋:

    text
    .r 1+d10-3*4 --asm
    +<木落>掷出了 1+d10-3*4=1 + 3[1d10=3] - 12=-8
    +=== VM Code ===
    +push 1
    +mark.left
    +push 1
    +mark.left
    +push 10
    +dice
    +add
    +mark.left
    +push 3
    +mark.left
    +push 4
    +mul
    +sub
    +halt
    +=== VM Code End===

    跨平台

    海豹核心的底层架构,支持单进程多号,也支持很方便地多开

    多号指每个骰子上连接多个帐号,并且支持同时连接不同平台。

    多开指同时运行多个海豹核心,以提供各自不同的服务内容。

    TRPG 规则支持列表

    • COC7
    • COC - DeltaGreen (.setcoc dg)
    • DND5e
    • 暗影狂奔 (.rsr)
    • WOD/无限团 (.ww)
    • 双十字 DoubleCross (.dx)
    • 共鸣性怪异 Emoklore (.ek .ekgen)
    • 剑世界 2.5 (插件)
    • 明日方舟跑团规则 (插件)
    • 其它插件由海豹社区提供,欢迎前去 插件仓库 查看

    如果你不跑这些规则,或者觉得并无必要,可以在后台关闭对应的指令。

    如果你喜欢的规则这里没有,那么可以去插件仓库看一看,或者自己编写规则模板插件!

    `,32))])}const C=r(h,[["render",m]]);export{v as __pageData,C as default}; diff --git a/assets/deploy_transfer.md.1pMbDwz9.js b/assets/deploy_transfer.md.1pMbDwz9.js new file mode 100644 index 000000000..32a6bda60 --- /dev/null +++ b/assets/deploy_transfer.md.1pMbDwz9.js @@ -0,0 +1,2 @@ +import{_ as s,c as i,a6 as t,o as e}from"./chunks/framework.B1keMFNq.js";const k=JSON.parse('{"title":"迁移","description":"","frontmatter":{"lang":"zh-cn","title":"迁移"},"headers":[],"relativePath":"deploy/transfer.md","filePath":"deploy/transfer.md","lastUpdated":1712309998000}'),l={name:"deploy/transfer.md"};function n(p,a,o,d,r,h){return e(),i("div",null,a[0]||(a[0]=[t(`

    迁移

    本节内容

    本节将会指导你如何迁移现有的海豹核心。

    海豹核心的数据文件全平台通用。因此,在不同平台间迁移时,你只需要准备每个平台的可执行文件。

    注意

    在进行任何迁移时,你都应确保迁出和迁入的海豹核心都未在运行,否则可能造成不可逆的数据损坏。

    相同平台间迁移

    将整个海豹核心目录复制到新的位置即可。

    如果目录体积较大,你可以自行删除 backups/ 下的备份文件。这不会造成数据损失。

    跨平台迁移

    跨平台迁移时不能使用旧的可执行文件,而只迁移数据部分。

    将迁出海豹核心中的 data/ 目录以你习惯的任何方式打包。

    在迁入平台准备一份全新的海豹核心,用打包的数据覆盖迁入海豹的对应目录。

    如果你希望保留旧的备份文件,你可以复制迁出海豹 backups/ 目录中的内容,放置于迁入海豹的对应目录。备份文件也是通用的。

    Linux 服务器间跨架构迁移(arm64 → amd64)

    步骤与普通跨平台迁移一致。在运行新海豹核心时,如果文件权限不正确,可以在海豹核心目录下执行以下两条命令:

    bash
    find . -type f | xargs chmod 644
    +find . -type d | xargs chmod 755

    迁移数据到手机

    如果你需要把电脑海豹的数据迁移到手机海豹上,同样是迁移海豹的 data/ 目录。步骤如下:

    1. 关闭你的电脑海豹,复制电脑海豹的 data/ 目录发送到手机上。
    2. 点击手机海豹的 导出数据 按钮,在设置中勾选 文件同步模式。(平时推荐关闭这个选项,这里是为了替换数据库特别地需要开启)
    3. 在你习惯的手机文件管理软件中找到 根目录/document/com.sealdice.dice/sealdice,用迁出海豹的 data 目录替换这里面的 data 目录。
    4. 回到手机海豹的界面中点击 导入数据。导入完成后再点击启动核心,这时你的手机海豹里就应该是旧海豹的数据了。导入完成后也可以把「文件同步模式」关闭了。

    注意

    在手机海豹上,每次导入数据前都进行一次导出,导出后不要再运行海豹核心。

    这是因为,手机海豹不会实时更新导出的文件,它们是海豹数据在导出时的一份快照。

    如果在上次导出后产生了新数据,而再次进行导入,会导致新产生的数据被之前导出的数据覆盖,丢失这段时间以来录入的角色卡、Log、修改的自定义文案等海豹内部的数据。

    `,19)]))}const g=s(l,[["render",n]]);export{k as __pageData,g as default}; diff --git a/assets/deploy_transfer.md.1pMbDwz9.lean.js b/assets/deploy_transfer.md.1pMbDwz9.lean.js new file mode 100644 index 000000000..32a6bda60 --- /dev/null +++ b/assets/deploy_transfer.md.1pMbDwz9.lean.js @@ -0,0 +1,2 @@ +import{_ as s,c as i,a6 as t,o as e}from"./chunks/framework.B1keMFNq.js";const k=JSON.parse('{"title":"迁移","description":"","frontmatter":{"lang":"zh-cn","title":"迁移"},"headers":[],"relativePath":"deploy/transfer.md","filePath":"deploy/transfer.md","lastUpdated":1712309998000}'),l={name:"deploy/transfer.md"};function n(p,a,o,d,r,h){return e(),i("div",null,a[0]||(a[0]=[t(`

    迁移

    本节内容

    本节将会指导你如何迁移现有的海豹核心。

    海豹核心的数据文件全平台通用。因此,在不同平台间迁移时,你只需要准备每个平台的可执行文件。

    注意

    在进行任何迁移时,你都应确保迁出和迁入的海豹核心都未在运行,否则可能造成不可逆的数据损坏。

    相同平台间迁移

    将整个海豹核心目录复制到新的位置即可。

    如果目录体积较大,你可以自行删除 backups/ 下的备份文件。这不会造成数据损失。

    跨平台迁移

    跨平台迁移时不能使用旧的可执行文件,而只迁移数据部分。

    将迁出海豹核心中的 data/ 目录以你习惯的任何方式打包。

    在迁入平台准备一份全新的海豹核心,用打包的数据覆盖迁入海豹的对应目录。

    如果你希望保留旧的备份文件,你可以复制迁出海豹 backups/ 目录中的内容,放置于迁入海豹的对应目录。备份文件也是通用的。

    Linux 服务器间跨架构迁移(arm64 → amd64)

    步骤与普通跨平台迁移一致。在运行新海豹核心时,如果文件权限不正确,可以在海豹核心目录下执行以下两条命令:

    bash
    find . -type f | xargs chmod 644
    +find . -type d | xargs chmod 755

    迁移数据到手机

    如果你需要把电脑海豹的数据迁移到手机海豹上,同样是迁移海豹的 data/ 目录。步骤如下:

    1. 关闭你的电脑海豹,复制电脑海豹的 data/ 目录发送到手机上。
    2. 点击手机海豹的 导出数据 按钮,在设置中勾选 文件同步模式。(平时推荐关闭这个选项,这里是为了替换数据库特别地需要开启)
    3. 在你习惯的手机文件管理软件中找到 根目录/document/com.sealdice.dice/sealdice,用迁出海豹的 data 目录替换这里面的 data 目录。
    4. 回到手机海豹的界面中点击 导入数据。导入完成后再点击启动核心,这时你的手机海豹里就应该是旧海豹的数据了。导入完成后也可以把「文件同步模式」关闭了。

    注意

    在手机海豹上,每次导入数据前都进行一次导出,导出后不要再运行海豹核心。

    这是因为,手机海豹不会实时更新导出的文件,它们是海豹数据在导出时的一份快照。

    如果在上次导出后产生了新数据,而再次进行导入,会导致新产生的数据被之前导出的数据覆盖,丢失这段时间以来录入的角色卡、Log、修改的自定义文案等海豹内部的数据。

    `,19)]))}const g=s(l,[["render",n]]);export{k as __pageData,g as default}; diff --git a/assets/develop-fork-1.BZOKPa8J.png b/assets/develop-fork-1.BZOKPa8J.png new file mode 100644 index 000000000..30c1d0023 Binary files /dev/null and b/assets/develop-fork-1.BZOKPa8J.png differ diff --git a/assets/develop-fork-2.X58VX0eS.png b/assets/develop-fork-2.X58VX0eS.png new file mode 100644 index 000000000..7995b87ad Binary files /dev/null and b/assets/develop-fork-2.X58VX0eS.png differ diff --git a/assets/develop-new-branch-1.BqKBsG0R.png b/assets/develop-new-branch-1.BqKBsG0R.png new file mode 100644 index 000000000..94ecaa3d3 Binary files /dev/null and b/assets/develop-new-branch-1.BqKBsG0R.png differ diff --git a/assets/develop-new-branch-2.zhLwB2Rj.png b/assets/develop-new-branch-2.zhLwB2Rj.png new file mode 100644 index 000000000..bf9787235 Binary files /dev/null and b/assets/develop-new-branch-2.zhLwB2Rj.png differ diff --git a/assets/develop-new-branch-3.C0fRBlWq.png b/assets/develop-new-branch-3.C0fRBlWq.png new file mode 100644 index 000000000..ab5979eae Binary files /dev/null and b/assets/develop-new-branch-3.C0fRBlWq.png differ diff --git a/assets/develop-new-branch-4.ijy4i49c.png b/assets/develop-new-branch-4.ijy4i49c.png new file mode 100644 index 000000000..2d51a58f6 Binary files /dev/null and b/assets/develop-new-branch-4.ijy4i49c.png differ diff --git a/assets/develop-new-branch-5.CeOz2UDa.png b/assets/develop-new-branch-5.CeOz2UDa.png new file mode 100644 index 000000000..f8b587288 Binary files /dev/null and b/assets/develop-new-branch-5.CeOz2UDa.png differ diff --git a/assets/develop-new-branch-6.BBHexEzw.png b/assets/develop-new-branch-6.BBHexEzw.png new file mode 100644 index 000000000..619b65a79 Binary files /dev/null and b/assets/develop-new-branch-6.BBHexEzw.png differ diff --git a/assets/develop-new-branch-7.C2-9Q-ZS.png b/assets/develop-new-branch-7.C2-9Q-ZS.png new file mode 100644 index 000000000..72c866089 Binary files /dev/null and b/assets/develop-new-branch-7.C2-9Q-ZS.png differ diff --git a/assets/develop-open-pr-1.DAADwrkm.png b/assets/develop-open-pr-1.DAADwrkm.png new file mode 100644 index 000000000..49a1055e5 Binary files /dev/null and b/assets/develop-open-pr-1.DAADwrkm.png differ diff --git a/assets/develop-pr-1.BVBX_RTc.png b/assets/develop-pr-1.BVBX_RTc.png new file mode 100644 index 000000000..04fbb5cb2 Binary files /dev/null and b/assets/develop-pr-1.BVBX_RTc.png differ diff --git a/assets/develop-pr-2.C-dKwDzw.png b/assets/develop-pr-2.C-dKwDzw.png new file mode 100644 index 000000000..099c40184 Binary files /dev/null and b/assets/develop-pr-2.C-dKwDzw.png differ diff --git a/assets/develop-sync-fork.BZF0daO6.png b/assets/develop-sync-fork.BZF0daO6.png new file mode 100644 index 000000000..d2e438170 Binary files /dev/null and b/assets/develop-sync-fork.BZF0daO6.png differ diff --git a/assets/edit-deck-hide-key.Bk59lgX8.png b/assets/edit-deck-hide-key.Bk59lgX8.png new file mode 100644 index 000000000..a950e855f Binary files /dev/null and b/assets/edit-deck-hide-key.Bk59lgX8.png differ diff --git a/assets/edit-deck-pkg.8jg4vDyc.png b/assets/edit-deck-pkg.8jg4vDyc.png new file mode 100644 index 000000000..e7019fe0c Binary files /dev/null and b/assets/edit-deck-pkg.8jg4vDyc.png differ diff --git a/assets/edit-jsscript-dts.j849kmdb.png b/assets/edit-jsscript-dts.j849kmdb.png new file mode 100644 index 000000000..f9c9d4a88 Binary files /dev/null and b/assets/edit-jsscript-dts.j849kmdb.png differ diff --git a/assets/edit-reply-random-pic.BERq9XNC.png b/assets/edit-reply-random-pic.BERq9XNC.png new file mode 100644 index 000000000..e9541b22d Binary files /dev/null and b/assets/edit-reply-random-pic.BERq9XNC.png differ diff --git a/assets/edit-reply-single-person-mod1.CcMT0-k7.png b/assets/edit-reply-single-person-mod1.CcMT0-k7.png new file mode 100644 index 000000000..0add85e4f Binary files /dev/null and b/assets/edit-reply-single-person-mod1.CcMT0-k7.png differ diff --git a/assets/edit-reply-single-person-mod2.RQYejdzJ.png b/assets/edit-reply-single-person-mod2.RQYejdzJ.png new file mode 100644 index 000000000..c0f4274ef Binary files /dev/null and b/assets/edit-reply-single-person-mod2.RQYejdzJ.png differ diff --git a/assets/edit-reply-single-person-mod3.a_KOIlqv.png b/assets/edit-reply-single-person-mod3.a_KOIlqv.png new file mode 100644 index 000000000..79041713f Binary files /dev/null and b/assets/edit-reply-single-person-mod3.a_KOIlqv.png differ diff --git a/assets/gocq-folder.BqYrXyGR.png b/assets/gocq-folder.BqYrXyGR.png new file mode 100644 index 000000000..f10dd8844 Binary files /dev/null and b/assets/gocq-folder.BqYrXyGR.png differ diff --git a/assets/gocq-step1.pboT6Yxb.png b/assets/gocq-step1.pboT6Yxb.png new file mode 100644 index 000000000..25771fd91 Binary files /dev/null and b/assets/gocq-step1.pboT6Yxb.png differ diff --git a/assets/gocq-step2.-UlYTUsA.png b/assets/gocq-step2.-UlYTUsA.png new file mode 100644 index 000000000..428598e3f Binary files /dev/null and b/assets/gocq-step2.-UlYTUsA.png differ diff --git a/assets/gocq-success.DvcHSdvM.png b/assets/gocq-success.DvcHSdvM.png new file mode 100644 index 000000000..741ed92d9 Binary files /dev/null and b/assets/gocq-success.DvcHSdvM.png differ diff --git a/assets/gocq-warn1.DnQT2Y8j.png b/assets/gocq-warn1.DnQT2Y8j.png new file mode 100644 index 000000000..884e9a904 Binary files /dev/null and b/assets/gocq-warn1.DnQT2Y8j.png differ diff --git a/assets/gocq-warn2.Be6mD1Aa.png b/assets/gocq-warn2.Be6mD1Aa.png new file mode 100644 index 000000000..7b86e1a9b Binary files /dev/null and b/assets/gocq-warn2.Be6mD1Aa.png differ diff --git a/assets/helpdoc-delete.YxqErX-u.png b/assets/helpdoc-delete.YxqErX-u.png new file mode 100644 index 000000000..6ead6fc3f Binary files /dev/null and b/assets/helpdoc-delete.YxqErX-u.png differ diff --git a/assets/helpdoc-edit-group.0i3M9SvD.png b/assets/helpdoc-edit-group.0i3M9SvD.png new file mode 100644 index 000000000..773858f10 Binary files /dev/null and b/assets/helpdoc-edit-group.0i3M9SvD.png differ diff --git a/assets/helpdoc-itemlist.lVEcsDO6.png b/assets/helpdoc-itemlist.lVEcsDO6.png new file mode 100644 index 000000000..5f43bf602 Binary files /dev/null and b/assets/helpdoc-itemlist.lVEcsDO6.png differ diff --git a/assets/helpdoc-ui.BSAvcQ-L.png b/assets/helpdoc-ui.BSAvcQ-L.png new file mode 100644 index 000000000..9db7b7eed Binary files /dev/null and b/assets/helpdoc-ui.BSAvcQ-L.png differ diff --git a/assets/helpdoc-upload.vCwM61uF.png b/assets/helpdoc-upload.vCwM61uF.png new file mode 100644 index 000000000..deab011b5 Binary files /dev/null and b/assets/helpdoc-upload.vCwM61uF.png differ diff --git a/assets/image-016.McE9_BqK.png b/assets/image-016.McE9_BqK.png new file mode 100644 index 000000000..17ba321d7 Binary files /dev/null and b/assets/image-016.McE9_BqK.png differ diff --git a/assets/image-017.h2f0ACoz.png b/assets/image-017.h2f0ACoz.png new file mode 100644 index 000000000..60c66a80a Binary files /dev/null and b/assets/image-017.h2f0ACoz.png differ diff --git a/assets/image-018.DTqSvbQG.png b/assets/image-018.DTqSvbQG.png new file mode 100644 index 000000000..185257e7e Binary files /dev/null and b/assets/image-018.DTqSvbQG.png differ diff --git a/assets/image-20221009003612068.Wt604XDQ.png b/assets/image-20221009003612068.Wt604XDQ.png new file mode 100644 index 000000000..a8716dbe2 Binary files /dev/null and b/assets/image-20221009003612068.Wt604XDQ.png differ diff --git a/assets/image-20221009004030395.3916Tv_z.png b/assets/image-20221009004030395.3916Tv_z.png new file mode 100644 index 000000000..10c7ab961 Binary files /dev/null and b/assets/image-20221009004030395.3916Tv_z.png differ diff --git a/assets/image-20230109202133901.DO1uTTAZ.png b/assets/image-20230109202133901.DO1uTTAZ.png new file mode 100644 index 000000000..f2171649a Binary files /dev/null and b/assets/image-20230109202133901.DO1uTTAZ.png differ diff --git a/assets/image-20230109203431758.TT_W720a.png b/assets/image-20230109203431758.TT_W720a.png new file mode 100644 index 000000000..fa55218cd Binary files /dev/null and b/assets/image-20230109203431758.TT_W720a.png differ diff --git a/assets/image-20230109205906109.D-KrjuYJ.png b/assets/image-20230109205906109.D-KrjuYJ.png new file mode 100644 index 000000000..c3a666145 Binary files /dev/null and b/assets/image-20230109205906109.D-KrjuYJ.png differ diff --git a/assets/image-20230109210448115.DDApTHsW.png b/assets/image-20230109210448115.DDApTHsW.png new file mode 100644 index 000000000..f48128701 Binary files /dev/null and b/assets/image-20230109210448115.DDApTHsW.png differ diff --git a/assets/index.md.15m1L-vS.js b/assets/index.md.15m1L-vS.js new file mode 100644 index 000000000..4f4cd871a --- /dev/null +++ b/assets/index.md.15m1L-vS.js @@ -0,0 +1 @@ +import{_ as a,c as t,a6 as l,o as i}from"./chunks/framework.B1keMFNq.js";const r="/sealdice-manual-next/images/seal.png",m=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"海豹手册","tagline":"✨海豹骰官方使用手册","image":{"src":"/images/sealdice.svg","alt":"SealDice"},"actions":[{"theme":"brand","text":"从零开始","link":"/about/start-from-zero"},{"theme":"alt","text":"了解指令","link":"./use/quick-start"},{"theme":"alt","text":"特色功能","link":"/deploy/special_feature"}]},"features":[{"title":"常用指令","details":"实现了跑团常用的绝大部分指令,用你熟悉的指令跑团","link":"/use/quick-start"},{"title":"多规则支持","details":"CoC、D&D、SR、WOD 等规则都有专门支持","link":"/use/coc7"},{"title":"同义词表","details":"属性兼容中文简体、繁体、英文缩写和其他常见别名","link":"/use/attribute_alias"},{"title":"全文搜索","details":"使用全文搜索技术,小型的搜索引擎帮助你快速查询各种资料","link":"/use/core#find-词条查询指令"},{"title":"指令代骰","details":"通过 @ 指名代替其他玩家进行检定,愉快规避掉鸽子带来的麻烦事","link":"/use/coc7#代骰"},{"title":"自定义扩展","details":"提供牌堆等或实用或娱乐的扩展能力","link":"/use/deck_and_reply"}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1723441920000}'),s={name:"index.md"};function o(n,e,d,c,h,u){return i(),t("div",null,e[0]||(e[0]=[l('

    海豹核心

    海豹核心

    一个简单易用的跑团骰子系统。可以被叫做 海豹骰、豹骰,豹子骰。

    前往官网的 在线试用 中快速尝试——

    开始使用

    更多……

    使用有问题?对功能有新想法?想认识更多骰主?欢迎加入官方群!

    群列表:

    ',10)]))}const f=a(s,[["render",o]]);export{m as __pageData,f as default}; diff --git a/assets/index.md.15m1L-vS.lean.js b/assets/index.md.15m1L-vS.lean.js new file mode 100644 index 000000000..4f4cd871a --- /dev/null +++ b/assets/index.md.15m1L-vS.lean.js @@ -0,0 +1 @@ +import{_ as a,c as t,a6 as l,o as i}from"./chunks/framework.B1keMFNq.js";const r="/sealdice-manual-next/images/seal.png",m=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"海豹手册","tagline":"✨海豹骰官方使用手册","image":{"src":"/images/sealdice.svg","alt":"SealDice"},"actions":[{"theme":"brand","text":"从零开始","link":"/about/start-from-zero"},{"theme":"alt","text":"了解指令","link":"./use/quick-start"},{"theme":"alt","text":"特色功能","link":"/deploy/special_feature"}]},"features":[{"title":"常用指令","details":"实现了跑团常用的绝大部分指令,用你熟悉的指令跑团","link":"/use/quick-start"},{"title":"多规则支持","details":"CoC、D&D、SR、WOD 等规则都有专门支持","link":"/use/coc7"},{"title":"同义词表","details":"属性兼容中文简体、繁体、英文缩写和其他常见别名","link":"/use/attribute_alias"},{"title":"全文搜索","details":"使用全文搜索技术,小型的搜索引擎帮助你快速查询各种资料","link":"/use/core#find-词条查询指令"},{"title":"指令代骰","details":"通过 @ 指名代替其他玩家进行检定,愉快规避掉鸽子带来的麻烦事","link":"/use/coc7#代骰"},{"title":"自定义扩展","details":"提供牌堆等或实用或娱乐的扩展能力","link":"/use/deck_and_reply"}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1723441920000}'),s={name:"index.md"};function o(n,e,d,c,h,u){return i(),t("div",null,e[0]||(e[0]=[l('

    海豹核心

    海豹核心

    一个简单易用的跑团骰子系统。可以被叫做 海豹骰、豹骰,豹子骰。

    前往官网的 在线试用 中快速尝试——

    开始使用

    更多……

    使用有问题?对功能有新想法?想认识更多骰主?欢迎加入官方群!

    群列表:

    ',10)]))}const f=a(s,[["render",o]]);export{m as __pageData,f as default}; diff --git a/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 b/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 new file mode 100644 index 000000000..b6b603d59 Binary files /dev/null and b/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 differ diff --git a/assets/inter-italic-cyrillic.By2_1cv3.woff2 b/assets/inter-italic-cyrillic.By2_1cv3.woff2 new file mode 100644 index 000000000..def40a4f6 Binary files /dev/null and b/assets/inter-italic-cyrillic.By2_1cv3.woff2 differ diff --git a/assets/inter-italic-greek-ext.1u6EdAuj.woff2 b/assets/inter-italic-greek-ext.1u6EdAuj.woff2 new file mode 100644 index 000000000..e070c3d30 Binary files /dev/null and b/assets/inter-italic-greek-ext.1u6EdAuj.woff2 differ diff --git a/assets/inter-italic-greek.DJ8dCoTZ.woff2 b/assets/inter-italic-greek.DJ8dCoTZ.woff2 new file mode 100644 index 000000000..a3c16ca40 Binary files /dev/null and b/assets/inter-italic-greek.DJ8dCoTZ.woff2 differ diff --git a/assets/inter-italic-latin-ext.CN1xVJS-.woff2 b/assets/inter-italic-latin-ext.CN1xVJS-.woff2 new file mode 100644 index 000000000..2210a899e Binary files /dev/null and b/assets/inter-italic-latin-ext.CN1xVJS-.woff2 differ diff --git a/assets/inter-italic-latin.C2AdPX0b.woff2 b/assets/inter-italic-latin.C2AdPX0b.woff2 new file mode 100644 index 000000000..790d62dc7 Binary files /dev/null and b/assets/inter-italic-latin.C2AdPX0b.woff2 differ diff --git a/assets/inter-italic-vietnamese.BSbpV94h.woff2 b/assets/inter-italic-vietnamese.BSbpV94h.woff2 new file mode 100644 index 000000000..1eec0775a Binary files /dev/null and b/assets/inter-italic-vietnamese.BSbpV94h.woff2 differ diff --git a/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 b/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 new file mode 100644 index 000000000..2cfe61536 Binary files /dev/null and b/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 differ diff --git a/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 b/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 new file mode 100644 index 000000000..e3886dd14 Binary files /dev/null and b/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 differ diff --git a/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 b/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 new file mode 100644 index 000000000..36d67487d Binary files /dev/null and b/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 differ diff --git a/assets/inter-roman-greek.BBVDIX6e.woff2 b/assets/inter-roman-greek.BBVDIX6e.woff2 new file mode 100644 index 000000000..2bed1e85e Binary files /dev/null and b/assets/inter-roman-greek.BBVDIX6e.woff2 differ diff --git a/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 b/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 new file mode 100644 index 000000000..9a8d1e2b5 Binary files /dev/null and b/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 differ diff --git a/assets/inter-roman-latin.Di8DUHzh.woff2 b/assets/inter-roman-latin.Di8DUHzh.woff2 new file mode 100644 index 000000000..07d3c53ae Binary files /dev/null and b/assets/inter-roman-latin.Di8DUHzh.woff2 differ diff --git a/assets/inter-roman-vietnamese.BjW4sHH5.woff2 b/assets/inter-roman-vietnamese.BjW4sHH5.woff2 new file mode 100644 index 000000000..57bdc22ae Binary files /dev/null and b/assets/inter-roman-vietnamese.BjW4sHH5.woff2 differ diff --git a/assets/js-config-example.Ctkb00mX.png b/assets/js-config-example.Ctkb00mX.png new file mode 100644 index 000000000..859f1b6df Binary files /dev/null and b/assets/js-config-example.Ctkb00mX.png differ diff --git a/assets/jsscript-list.BWWdfHUL.png b/assets/jsscript-list.BWWdfHUL.png new file mode 100644 index 000000000..8589267dc Binary files /dev/null and b/assets/jsscript-list.BWWdfHUL.png differ diff --git a/assets/jsscript-ui.QtQ8fMZh.png b/assets/jsscript-ui.QtQ8fMZh.png new file mode 100644 index 000000000..ba38abda9 Binary files /dev/null and b/assets/jsscript-ui.QtQ8fMZh.png differ diff --git a/assets/jsscrpit-console.CRzrpQ_X.png b/assets/jsscrpit-console.CRzrpQ_X.png new file mode 100644 index 000000000..e97c63baf Binary files /dev/null and b/assets/jsscrpit-console.CRzrpQ_X.png differ diff --git a/assets/keepalive_coloros_launch.ux0hgdFj.jpg b/assets/keepalive_coloros_launch.ux0hgdFj.jpg new file mode 100644 index 000000000..47a19b01a Binary files /dev/null and b/assets/keepalive_coloros_launch.ux0hgdFj.jpg differ diff --git a/assets/keepalive_coloros_multitask.UHiBdlRk.jpg b/assets/keepalive_coloros_multitask.UHiBdlRk.jpg new file mode 100644 index 000000000..a4a635b6f Binary files /dev/null and b/assets/keepalive_coloros_multitask.UHiBdlRk.jpg differ diff --git a/assets/keepalive_coloros_nightshift.DbBl1G84.jpg b/assets/keepalive_coloros_nightshift.DbBl1G84.jpg new file mode 100644 index 000000000..25f7e0f3e Binary files /dev/null and b/assets/keepalive_coloros_nightshift.DbBl1G84.jpg differ diff --git a/assets/keepalive_harmonyos_applaunch.CiGVQ3Zv.jpg b/assets/keepalive_harmonyos_applaunch.CiGVQ3Zv.jpg new file mode 100644 index 000000000..364a558b8 Binary files /dev/null and b/assets/keepalive_harmonyos_applaunch.CiGVQ3Zv.jpg differ diff --git a/assets/keepalive_harmonyos_battery.DQWH3UGx.jpg b/assets/keepalive_harmonyos_battery.DQWH3UGx.jpg new file mode 100644 index 000000000..aee963ae4 Binary files /dev/null and b/assets/keepalive_harmonyos_battery.DQWH3UGx.jpg differ diff --git a/assets/keepalive_harmonyos_batterymore.CNFIGq83.jpg b/assets/keepalive_harmonyos_batterymore.CNFIGq83.jpg new file mode 100644 index 000000000..7f3fbb513 Binary files /dev/null and b/assets/keepalive_harmonyos_batterymore.CNFIGq83.jpg differ diff --git a/assets/keepalive_harmonyos_batteryoptimization.DOqAUyHu.jpg b/assets/keepalive_harmonyos_batteryoptimization.DOqAUyHu.jpg new file mode 100644 index 000000000..204f03efd Binary files /dev/null and b/assets/keepalive_harmonyos_batteryoptimization.DOqAUyHu.jpg differ diff --git a/assets/keepalive_harmonyos_multitask.CmAGO103.jpg b/assets/keepalive_harmonyos_multitask.CmAGO103.jpg new file mode 100644 index 000000000..6ec1b7ae7 Binary files /dev/null and b/assets/keepalive_harmonyos_multitask.CmAGO103.jpg differ diff --git a/assets/keepalive_hyperos_additional.CZQRRSrJ.jpg b/assets/keepalive_hyperos_additional.CZQRRSrJ.jpg new file mode 100644 index 000000000..ff2734325 Binary files /dev/null and b/assets/keepalive_hyperos_additional.CZQRRSrJ.jpg differ diff --git a/assets/keepalive_hyperos_selflaunch.H3gMxdjM.jpg b/assets/keepalive_hyperos_selflaunch.H3gMxdjM.jpg new file mode 100644 index 000000000..f429397d1 Binary files /dev/null and b/assets/keepalive_hyperos_selflaunch.H3gMxdjM.jpg differ diff --git a/assets/keepalive_hyperos_storage.DLTisrS0.jpg b/assets/keepalive_hyperos_storage.DLTisrS0.jpg new file mode 100644 index 000000000..036c711da Binary files /dev/null and b/assets/keepalive_hyperos_storage.DLTisrS0.jpg differ diff --git a/assets/keepalive_inapp.iDubXtQV.jpg b/assets/keepalive_inapp.iDubXtQV.jpg new file mode 100644 index 000000000..a8f4cbd67 Binary files /dev/null and b/assets/keepalive_inapp.iDubXtQV.jpg differ diff --git a/assets/keepalive_miui_multitask.C0T94Cld.jpg b/assets/keepalive_miui_multitask.C0T94Cld.jpg new file mode 100644 index 000000000..509f6936c Binary files /dev/null and b/assets/keepalive_miui_multitask.C0T94Cld.jpg differ diff --git a/assets/keepalive_miui_permdialog.Dqk-e0Wk.png b/assets/keepalive_miui_permdialog.Dqk-e0Wk.png new file mode 100644 index 000000000..7d8f40a0f Binary files /dev/null and b/assets/keepalive_miui_permdialog.Dqk-e0Wk.png differ diff --git a/assets/keepalive_miui_unlimit.B4FzIaKH.jpg b/assets/keepalive_miui_unlimit.B4FzIaKH.jpg new file mode 100644 index 000000000..dfa215750 Binary files /dev/null and b/assets/keepalive_miui_unlimit.B4FzIaKH.jpg differ diff --git a/assets/newbie_terms_windows_terminal_icon.CtB6BvsL.svg b/assets/newbie_terms_windows_terminal_icon.CtB6BvsL.svg new file mode 100644 index 000000000..2a50f0f14 --- /dev/null +++ b/assets/newbie_terms_windows_terminal_icon.CtB6BvsL.svg @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/onebot11-success.B8KhG_3g.png b/assets/onebot11-success.B8KhG_3g.png new file mode 100644 index 000000000..e0d7eabc0 Binary files /dev/null and b/assets/onebot11-success.B8KhG_3g.png differ diff --git a/assets/onebot11.hPU3-IW2.png b/assets/onebot11.hPU3-IW2.png new file mode 100644 index 000000000..3955d11f8 Binary files /dev/null and b/assets/onebot11.hPU3-IW2.png differ diff --git a/assets/platform-minecraft_1.D8ohrEt5.png b/assets/platform-minecraft_1.D8ohrEt5.png new file mode 100644 index 000000000..5f6c26e83 Binary files /dev/null and b/assets/platform-minecraft_1.D8ohrEt5.png differ diff --git a/assets/platform-minecraft_4.CXIn9Ufb.jpg b/assets/platform-minecraft_4.CXIn9Ufb.jpg new file mode 100644 index 000000000..031f5f0bc Binary files /dev/null and b/assets/platform-minecraft_4.CXIn9Ufb.jpg differ diff --git a/assets/platform-minecraft_5.1vLiGW8n.jpg b/assets/platform-minecraft_5.1vLiGW8n.jpg new file mode 100644 index 000000000..8073e75ed Binary files /dev/null and b/assets/platform-minecraft_5.1vLiGW8n.jpg differ diff --git a/assets/platform-minecraft_6.BVAQbR-9.jpg b/assets/platform-minecraft_6.BVAQbR-9.jpg new file mode 100644 index 000000000..b61ed57b4 Binary files /dev/null and b/assets/platform-minecraft_6.BVAQbR-9.jpg differ diff --git a/assets/platform-qq-bot-qrcode.CZVWW4Rf.jpg b/assets/platform-qq-bot-qrcode.CZVWW4Rf.jpg new file mode 100644 index 000000000..133d4b5e8 Binary files /dev/null and b/assets/platform-qq-bot-qrcode.CZVWW4Rf.jpg differ diff --git a/assets/platform-qq-builtin-1.CrwUIyAe.png b/assets/platform-qq-builtin-1.CrwUIyAe.png new file mode 100644 index 000000000..13e861e52 Binary files /dev/null and b/assets/platform-qq-builtin-1.CrwUIyAe.png differ diff --git a/assets/platform-qq-builtin-2.CsxwmFcJ.png b/assets/platform-qq-builtin-2.CsxwmFcJ.png new file mode 100644 index 000000000..f1d733396 Binary files /dev/null and b/assets/platform-qq-builtin-2.CsxwmFcJ.png differ diff --git a/assets/platform-qq-llonebot-2.CRkT2vLu.png b/assets/platform-qq-llonebot-2.CRkT2vLu.png new file mode 100644 index 000000000..d5437621f Binary files /dev/null and b/assets/platform-qq-llonebot-2.CRkT2vLu.png differ diff --git a/assets/platform-qq-official-1.xvYBQLAg.png b/assets/platform-qq-official-1.xvYBQLAg.png new file mode 100644 index 000000000..6d4070b59 Binary files /dev/null and b/assets/platform-qq-official-1.xvYBQLAg.png differ diff --git a/assets/platform-qq-official-11.CAwk7sBV.png b/assets/platform-qq-official-11.CAwk7sBV.png new file mode 100644 index 000000000..bb829b92f Binary files /dev/null and b/assets/platform-qq-official-11.CAwk7sBV.png differ diff --git a/assets/platform-qq-official-12.CdZ1iKI7.png b/assets/platform-qq-official-12.CdZ1iKI7.png new file mode 100644 index 000000000..359391729 Binary files /dev/null and b/assets/platform-qq-official-12.CdZ1iKI7.png differ diff --git a/assets/platform-qq-official-2.BG1tRARH.png b/assets/platform-qq-official-2.BG1tRARH.png new file mode 100644 index 000000000..a5700aa96 Binary files /dev/null and b/assets/platform-qq-official-2.BG1tRARH.png differ diff --git a/assets/platform-qq-official-3.DhHb4kkJ.png b/assets/platform-qq-official-3.DhHb4kkJ.png new file mode 100644 index 000000000..3652a68e8 Binary files /dev/null and b/assets/platform-qq-official-3.DhHb4kkJ.png differ diff --git a/assets/platform-qq-official-4.DeNeyeyZ.png b/assets/platform-qq-official-4.DeNeyeyZ.png new file mode 100644 index 000000000..6b0972731 Binary files /dev/null and b/assets/platform-qq-official-4.DeNeyeyZ.png differ diff --git a/assets/platform-qq-official-5.CdDG8A97.png b/assets/platform-qq-official-5.CdDG8A97.png new file mode 100644 index 000000000..0990a4fd2 Binary files /dev/null and b/assets/platform-qq-official-5.CdDG8A97.png differ diff --git a/assets/platform-qq-official-6.D_U8yZ10.png b/assets/platform-qq-official-6.D_U8yZ10.png new file mode 100644 index 000000000..ecf72ba28 Binary files /dev/null and b/assets/platform-qq-official-6.D_U8yZ10.png differ diff --git a/assets/platform-qq-official-7.B2ZAvwsL.png b/assets/platform-qq-official-7.B2ZAvwsL.png new file mode 100644 index 000000000..78064f2a8 Binary files /dev/null and b/assets/platform-qq-official-7.B2ZAvwsL.png differ diff --git a/assets/platform-qq-official-8.DhuF29we.png b/assets/platform-qq-official-8.DhuF29we.png new file mode 100644 index 000000000..26c774ef2 Binary files /dev/null and b/assets/platform-qq-official-8.DhuF29we.png differ diff --git a/assets/platform-qq-official-9.DBxQzTd1.png b/assets/platform-qq-official-9.DBxQzTd1.png new file mode 100644 index 000000000..a40c4e86f Binary files /dev/null and b/assets/platform-qq-official-9.DBxQzTd1.png differ diff --git a/assets/platform-qq-qsign-1.DewZ-7A7.png b/assets/platform-qq-qsign-1.DewZ-7A7.png new file mode 100644 index 000000000..5c68b4782 Binary files /dev/null and b/assets/platform-qq-qsign-1.DewZ-7A7.png differ diff --git a/assets/platform-qq-qsign-2.Cv0YuS6C.png b/assets/platform-qq-qsign-2.Cv0YuS6C.png new file mode 100644 index 000000000..53ae88b54 Binary files /dev/null and b/assets/platform-qq-qsign-2.Cv0YuS6C.png differ diff --git a/assets/platform-qq-shamrock-1.DJ7tSnjn.png b/assets/platform-qq-shamrock-1.DJ7tSnjn.png new file mode 100644 index 000000000..938d9bcde Binary files /dev/null and b/assets/platform-qq-shamrock-1.DJ7tSnjn.png differ diff --git a/assets/platform-qq-shamrock-2.BojvCHzi.png b/assets/platform-qq-shamrock-2.BojvCHzi.png new file mode 100644 index 000000000..92dd06c3d Binary files /dev/null and b/assets/platform-qq-shamrock-2.BojvCHzi.png differ diff --git a/assets/platform-qq-shamrock-3.BlEqBGNz.png b/assets/platform-qq-shamrock-3.BlEqBGNz.png new file mode 100644 index 000000000..48cc163f6 Binary files /dev/null and b/assets/platform-qq-shamrock-3.BlEqBGNz.png differ diff --git a/assets/platform-qq-shamrock-4.FmFC-9a8.png b/assets/platform-qq-shamrock-4.FmFC-9a8.png new file mode 100644 index 000000000..8ed2c3028 Binary files /dev/null and b/assets/platform-qq-shamrock-4.FmFC-9a8.png differ diff --git a/assets/platform-qq-shamrock-5.BMm24yfS.png b/assets/platform-qq-shamrock-5.BMm24yfS.png new file mode 100644 index 000000000..90a18392c Binary files /dev/null and b/assets/platform-qq-shamrock-5.BMm24yfS.png differ diff --git a/assets/platform-qq-shamrock-6.Bf1yZXSr.png b/assets/platform-qq-shamrock-6.Bf1yZXSr.png new file mode 100644 index 000000000..2d1a11afb Binary files /dev/null and b/assets/platform-qq-shamrock-6.Bf1yZXSr.png differ diff --git a/assets/platform-qq-shamrock-7.DfAmZJ9X.png b/assets/platform-qq-shamrock-7.DfAmZJ9X.png new file mode 100644 index 000000000..368bbc4eb Binary files /dev/null and b/assets/platform-qq-shamrock-7.DfAmZJ9X.png differ diff --git a/assets/platform-qq-shamrock-8.BJqlFaWq.png b/assets/platform-qq-shamrock-8.BJqlFaWq.png new file mode 100644 index 000000000..8c5e1fc39 Binary files /dev/null and b/assets/platform-qq-shamrock-8.BJqlFaWq.png differ diff --git a/assets/platform-qq-shamrock-9.CRgE7lL1.png b/assets/platform-qq-shamrock-9.CRgE7lL1.png new file mode 100644 index 000000000..dedc7b1d7 Binary files /dev/null and b/assets/platform-qq-shamrock-9.CRgE7lL1.png differ diff --git a/assets/platform-qq-turnoff.BeOWAmaj.png b/assets/platform-qq-turnoff.BeOWAmaj.png new file mode 100644 index 000000000..8edafecfc Binary files /dev/null and b/assets/platform-qq-turnoff.BeOWAmaj.png differ diff --git a/assets/qsign-config.C7X6Y-jY.png b/assets/qsign-config.C7X6Y-jY.png new file mode 100644 index 000000000..10e2195df Binary files /dev/null and b/assets/qsign-config.C7X6Y-jY.png differ diff --git a/assets/reply-add.GiF4xI17.png b/assets/reply-add.GiF4xI17.png new file mode 100644 index 000000000..ae463b9b7 Binary files /dev/null and b/assets/reply-add.GiF4xI17.png differ diff --git a/assets/reply-config.BhGYKmT-.png b/assets/reply-config.BhGYKmT-.png new file mode 100644 index 000000000..ca6b38030 Binary files /dev/null and b/assets/reply-config.BhGYKmT-.png differ diff --git a/assets/reply-file-disable.DQsCnOPj.png b/assets/reply-file-disable.DQsCnOPj.png new file mode 100644 index 000000000..a15f96fa1 Binary files /dev/null and b/assets/reply-file-disable.DQsCnOPj.png differ diff --git a/assets/reply-file.C6hW1cv0.png b/assets/reply-file.C6hW1cv0.png new file mode 100644 index 000000000..ac9f83bf6 Binary files /dev/null and b/assets/reply-file.C6hW1cv0.png differ diff --git a/assets/reply-ui.Bzrt8V8e.png b/assets/reply-ui.Bzrt8V8e.png new file mode 100644 index 000000000..90095356d Binary files /dev/null and b/assets/reply-ui.Bzrt8V8e.png differ diff --git a/assets/select-account.BQuutaYp.png b/assets/select-account.BQuutaYp.png new file mode 100644 index 000000000..fefd343a9 Binary files /dev/null and b/assets/select-account.BQuutaYp.png differ diff --git a/assets/style.CNBrsCa4.css b/assets/style.CNBrsCa4.css new file mode 100644 index 000000000..9b4c73697 --- /dev/null +++ b/assets/style.CNBrsCa4.css @@ -0,0 +1 @@ +@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/sealdice-manual-next/assets/inter-roman-cyrillic-ext.BBPuwvHQ.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;font-style:normal;font-weight:100 900;font-display:swap;src:url(/sealdice-manual-next/assets/inter-roman-cyrillic.C5lxZ8CY.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/sealdice-manual-next/assets/inter-roman-greek-ext.CqjqNYQ-.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/sealdice-manual-next/assets/inter-roman-greek.BBVDIX6e.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/sealdice-manual-next/assets/inter-roman-vietnamese.BjW4sHH5.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/sealdice-manual-next/assets/inter-roman-latin-ext.4ZJIpNVo.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/sealdice-manual-next/assets/inter-roman-latin.Di8DUHzh.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,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;font-style:italic;font-weight:100 900;font-display:swap;src:url(/sealdice-manual-next/assets/inter-italic-cyrillic-ext.r48I6akx.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;font-style:italic;font-weight:100 900;font-display:swap;src:url(/sealdice-manual-next/assets/inter-italic-cyrillic.By2_1cv3.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/sealdice-manual-next/assets/inter-italic-greek-ext.1u6EdAuj.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/sealdice-manual-next/assets/inter-italic-greek.DJ8dCoTZ.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/sealdice-manual-next/assets/inter-italic-vietnamese.BSbpV94h.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/sealdice-manual-next/assets/inter-italic-latin-ext.CN1xVJS-.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/sealdice-manual-next/assets/inter-italic-latin.C2AdPX0b.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,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:Punctuation SC;font-weight:400;src:local("PingFang SC Regular"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:500;src:local("PingFang SC Medium"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:600;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:700;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}: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-purple-1: #6f42c1;--vp-c-purple-2: #7e4cc9;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .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-purple-1: #c8abfa;--vp-c-purple-2: #a879e6;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .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-note-1: var(--vp-c-brand-1);--vp-c-note-2: var(--vp-c-brand-2);--vp-c-note-3: var(--vp-c-brand-3);--vp-c-note-soft: var(--vp-c-brand-soft);--vp-c-success-1: var(--vp-c-green-1);--vp-c-success-2: var(--vp-c-green-2);--vp-c-success-3: var(--vp-c-green-3);--vp-c-success-soft: var(--vp-c-green-soft);--vp-c-important-1: var(--vp-c-purple-1);--vp-c-important-2: var(--vp-c-purple-2);--vp-c-important-3: var(--vp-c-purple-3);--vp-c-important-soft: var(--vp-c-purple-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);--vp-c-caution-1: var(--vp-c-red-1);--vp-c-caution-2: var(--vp-c-red-2);--vp-c-caution-3: var(--vp-c-red-3);--vp-c-caution-soft: var(--vp-c-red-soft)}:root{--vp-font-family-base: "Inter", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--vp-font-family-mono: ui-monospace, "Menlo", "Monaco", "Consolas", "Liberation Mono", "Courier New", monospace;font-optical-sizing:auto}:root:where(:lang(zh)){--vp-font-family-base: "Punctuation SC", "Inter", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"}: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}@media (min-width: 960px){:root{--vp-z-index-sidebar: 25}}: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-success-soft);--vp-code-line-diff-add-symbol-color: var(--vp-c-success-1);--vp-code-line-diff-remove-color: var(--vp-c-danger-soft);--vp-code-line-diff-remove-symbol-color: var(--vp-c-danger-1);--vp-code-line-warning-color: var(--vp-c-warning-soft);--vp-code-line-error-color: var(--vp-c-danger-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-note-border: transparent;--vp-custom-block-note-text: var(--vp-c-text-1);--vp-custom-block-note-bg: var(--vp-c-default-soft);--vp-custom-block-note-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-tip-soft);--vp-custom-block-tip-code-bg: var(--vp-c-tip-soft);--vp-custom-block-important-border: transparent;--vp-custom-block-important-text: var(--vp-c-text-1);--vp-custom-block-important-bg: var(--vp-c-important-soft);--vp-custom-block-important-code-bg: var(--vp-c-important-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-caution-border: transparent;--vp-custom-block-caution-text: var(--vp-c-text-1);--vp-custom-block-caution-bg: var(--vp-c-caution-soft);--vp-custom-block-caution-code-bg: var(--vp-c-caution-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-default-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-tip-1);--vp-badge-tip-bg: var(--vp-c-tip-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);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{overflow-x:auto}mjx-container>svg{display:inline-block;margin:auto}[class^=vpi-],[class*=" vpi-"],.vp-icon{width:1em;height:1em}[class^=vpi-].bg,[class*=" vpi-"].bg,.vp-icon.bg{background-size:100% 100%;background-color:transparent}[class^=vpi-]:not(.bg),[class*=" vpi-"]:not(.bg),.vp-icon:not(.bg){-webkit-mask:var(--icon) no-repeat;mask:var(--icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit}.vpi-align-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M21 6H3M15 12H3M17 18H3'/%3E%3C/svg%3E")}.vpi-arrow-right,.vpi-arrow-down,.vpi-arrow-left,.vpi-arrow-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5l7 7-7 7'/%3E%3C/svg%3E")}.vpi-chevron-right,.vpi-chevron-down,.vpi-chevron-left,.vpi-chevron-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 18 6-6-6-6'/%3E%3C/svg%3E")}.vpi-chevron-down,.vpi-arrow-down{transform:rotate(90deg)}.vpi-chevron-left,.vpi-arrow-left{transform:rotate(180deg)}.vpi-chevron-up,.vpi-arrow-up{transform:rotate(-90deg)}.vpi-square-pen{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7'/%3E%3Cpath d='M18.375 2.625a2.121 2.121 0 1 1 3 3L12 15l-4 1 1-4Z'/%3E%3C/svg%3E")}.vpi-plus{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5v14'/%3E%3C/svg%3E")}.vpi-sun{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='4'/%3E%3Cpath d='M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41'/%3E%3C/svg%3E")}.vpi-moon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z'/%3E%3C/svg%3E")}.vpi-more-horizontal{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='1'/%3E%3Ccircle cx='19' cy='12' r='1'/%3E%3Ccircle cx='5' cy='12' r='1'/%3E%3C/svg%3E")}.vpi-languages{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m5 8 6 6M4 14l6-6 2-3M2 5h12M7 2h1M22 22l-5-10-5 10M14 18h6'/%3E%3C/svg%3E")}.vpi-heart{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z'/%3E%3C/svg%3E")}.vpi-search{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cpath d='m21 21-4.3-4.3'/%3E%3C/svg%3E")}.vpi-layout-list{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='7' height='7' x='3' y='3' rx='1'/%3E%3Crect width='7' height='7' x='3' y='14' rx='1'/%3E%3Cpath d='M14 4h7M14 9h7M14 15h7M14 20h7'/%3E%3C/svg%3E")}.vpi-delete{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M20 5H9l-7 7 7 7h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2ZM18 9l-6 6M12 9l6 6'/%3E%3C/svg%3E")}.vpi-corner-down-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 10-5 5 5 5'/%3E%3Cpath d='M20 4v7a4 4 0 0 1-4 4H4'/%3E%3C/svg%3E")}:root{--vp-icon-copy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3C/svg%3E");--vp-icon-copied: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3Cpath d='m9 14 2 2 4-4'/%3E%3C/svg%3E")}.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,.custom-block.info a:hover>code{color:var(--vp-c-brand-2)}.custom-block.info code{background-color:var(--vp-custom-block-info-code-bg)}.custom-block.note{border-color:var(--vp-custom-block-note-border);color:var(--vp-custom-block-note-text);background-color:var(--vp-custom-block-note-bg)}.custom-block.note a,.custom-block.note code{color:var(--vp-c-brand-1)}.custom-block.note a:hover,.custom-block.note a:hover>code{color:var(--vp-c-brand-2)}.custom-block.note code{background-color:var(--vp-custom-block-note-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-tip-1)}.custom-block.tip a:hover,.custom-block.tip a:hover>code{color:var(--vp-c-tip-2)}.custom-block.tip code{background-color:var(--vp-custom-block-tip-code-bg)}.custom-block.important{border-color:var(--vp-custom-block-important-border);color:var(--vp-custom-block-important-text);background-color:var(--vp-custom-block-important-bg)}.custom-block.important a,.custom-block.important code{color:var(--vp-c-important-1)}.custom-block.important a:hover,.custom-block.important a:hover>code{color:var(--vp-c-important-2)}.custom-block.important code{background-color:var(--vp-custom-block-important-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,.custom-block.warning a:hover>code{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,.custom-block.danger a:hover>code{color:var(--vp-c-danger-2)}.custom-block.danger code{background-color:var(--vp-custom-block-danger-code-bg)}.custom-block.caution{border-color:var(--vp-custom-block-caution-border);color:var(--vp-custom-block-caution-text);background-color:var(--vp-custom-block-caution-bg)}.custom-block.caution a,.custom-block.caution code{color:var(--vp-c-caution-1)}.custom-block.caution a:hover,.custom-block.caution a:hover>code{color:var(--vp-c-caution-2)}.custom-block.caution code{background-color:var(--vp-custom-block-caution-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,.custom-block.details a:hover>code{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;-webkit-user-select:none;user-select:none}.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 span{color:var(--shiki-dark, inherit)}html:not(.dark) .vp-code span{color:var(--shiki-light, inherit)}.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 h4{margin:24px 0 0;letter-spacing:-.01em;line-height:24px;font-size:18px}.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;color:var(--vp-c-text-2)}.vp-doc blockquote>p{margin:0;font-size:16px;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{background-color:var(--vp-c-bg);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,.vp-doc h4>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;-webkit-user-select:none;user-select:none;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:""}.external-link-icon-enabled :is(.vp-doc a[href*="://"],.vp-doc a[target=_blank]):after{content:"";color:currentColor}.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:0 0 4px!important;text-align:center;letter-spacing:1px!important;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{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)}.VPBadge.small{padding:0 6px;line-height:18px;font-size:10px;transform:translateY(-8px)}.VPDocFooter .VPBadge{display:none}.vp-doc h1>.VPBadge{margin-top:4px;vertical-align:top}.vp-doc h2>.VPBadge{margin-top:3px;padding:0 8px;vertical-align:top}.vp-doc h3>.VPBadge{vertical-align:middle}.vp-doc h4>.VPBadge,.vp-doc h5>.VPBadge,.vp-doc h6>.VPBadge{vertical-align:middle;line-height:18px}.VPBadge.info{border-color:var(--vp-badge-info-border);color:var(--vp-badge-info-text);background-color:var(--vp-badge-info-bg)}.VPBadge.tip{border-color:var(--vp-badge-tip-border);color:var(--vp-badge-tip-text);background-color:var(--vp-badge-tip-bg)}.VPBadge.warning{border-color:var(--vp-badge-warning-border);color:var(--vp-badge-warning-text);background-color:var(--vp-badge-warning-bg)}.VPBadge.danger{border-color:var(--vp-badge-danger-border);color:var(--vp-badge-danger-text);background-color:var(--vp-badge-danger-bg)}.VPBackdrop[data-v-ea76d448]{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-ea76d448],.VPBackdrop.fade-leave-to[data-v-ea76d448]{opacity:0}.VPBackdrop.fade-leave-active[data-v-ea76d448]{transition-duration:.25s}@media (min-width: 1280px){.VPBackdrop[data-v-ea76d448]{display:none}}.NotFound[data-v-0a2c3220]{padding:64px 24px 96px;text-align:center}@media (min-width: 768px){.NotFound[data-v-0a2c3220]{padding:96px 32px 168px}}.code[data-v-0a2c3220]{line-height:64px;font-size:64px;font-weight:600}.title[data-v-0a2c3220]{padding-top:12px;letter-spacing:2px;line-height:20px;font-size:20px;font-weight:700}.divider[data-v-0a2c3220]{margin:24px auto 18px;width:64px;height:1px;background-color:var(--vp-c-divider)}.quote[data-v-0a2c3220]{margin:0 auto;max-width:256px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.action[data-v-0a2c3220]{padding-top:20px}.link[data-v-0a2c3220]{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-0a2c3220]:hover{border-color:var(--vp-c-brand-2);color:var(--vp-c-brand-2)}.root[data-v-3142f465]{position:relative;z-index:1}.nested[data-v-3142f465]{padding-right:16px;padding-left:16px}.outline-link[data-v-3142f465]{display:block;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .5s}.outline-link[data-v-3142f465]:hover,.outline-link.active[data-v-3142f465]{color:var(--vp-c-text-1);transition:color .25s}.outline-link.nested[data-v-3142f465]{padding-left:13px}.VPDocAsideOutline[data-v-47bf134a]{display:none}.VPDocAsideOutline.has-outline[data-v-47bf134a]{display:block}.content[data-v-47bf134a]{position:relative;border-left:1px solid var(--vp-c-divider);padding-left:16px;font-size:13px;font-weight:500}.outline-marker[data-v-47bf134a]{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-47bf134a]{line-height:32px;font-size:14px;font-weight:600}.VPDocAside[data-v-07237113]{display:flex;flex-direction:column;flex-grow:1}.spacer[data-v-07237113]{flex-grow:1}.VPDocAside[data-v-07237113] .spacer+.VPDocAsideSponsors,.VPDocAside[data-v-07237113] .spacer+.VPDocAsideCarbonAds{margin-top:24px}.VPDocAside[data-v-07237113] .VPDocAsideSponsors+.VPDocAsideCarbonAds{margin-top:16px}.VPLastUpdated[data-v-f5ff4982]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 640px){.VPLastUpdated[data-v-f5ff4982]{line-height:32px;font-size:14px;font-weight:500}}.VPDocFooter[data-v-d48b34f2]{margin-top:64px}.edit-info[data-v-d48b34f2]{padding-bottom:18px}@media (min-width: 640px){.edit-info[data-v-d48b34f2]{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px}}.edit-link-button[data-v-d48b34f2]{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-d48b34f2]:hover{color:var(--vp-c-brand-2)}.edit-link-icon[data-v-d48b34f2]{margin-right:8px}.prev-next[data-v-d48b34f2]{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-d48b34f2]{grid-template-columns:repeat(2,1fr);grid-column-gap:16px}}.pager-link[data-v-d48b34f2]{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-d48b34f2]:hover{border-color:var(--vp-c-brand-1)}.pager-link.next[data-v-d48b34f2]{margin-left:auto;text-align:right}.desc[data-v-d48b34f2]{display:block;line-height:20px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.title[data-v-d48b34f2]{display:block;line-height:20px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.VPDoc[data-v-39f3916c]{padding:32px 24px 96px;width:100%}@media (min-width: 768px){.VPDoc[data-v-39f3916c]{padding:48px 32px 128px}}@media (min-width: 960px){.VPDoc[data-v-39f3916c]{padding:48px 32px 0}.VPDoc:not(.has-sidebar) .container[data-v-39f3916c]{display:flex;justify-content:center;max-width:992px}.VPDoc:not(.has-sidebar) .content[data-v-39f3916c]{max-width:752px}}@media (min-width: 1280px){.VPDoc .container[data-v-39f3916c]{display:flex;justify-content:center}.VPDoc .aside[data-v-39f3916c]{display:block}}@media (min-width: 1440px){.VPDoc:not(.has-sidebar) .content[data-v-39f3916c]{max-width:784px}.VPDoc:not(.has-sidebar) .container[data-v-39f3916c]{max-width:1104px}}.container[data-v-39f3916c]{margin:0 auto;width:100%}.aside[data-v-39f3916c]{position:relative;display:none;order:2;flex-grow:1;padding-left:32px;width:100%;max-width:256px}.left-aside[data-v-39f3916c]{order:1;padding-left:unset;padding-right:32px}.aside-container[data-v-39f3916c]{position:fixed;top:0;padding-top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + var(--vp-doc-top-height, 0px) + 48px);width:224px;height:100vh;overflow-x:hidden;overflow-y:auto;scrollbar-width:none}.aside-container[data-v-39f3916c]::-webkit-scrollbar{display:none}.aside-curtain[data-v-39f3916c]{position:fixed;bottom:0;z-index:10;width:224px;height:32px;background:linear-gradient(transparent,var(--vp-c-bg) 70%)}.aside-content[data-v-39f3916c]{display:flex;flex-direction:column;min-height:calc(100vh - (var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px));padding-bottom:32px}.content[data-v-39f3916c]{position:relative;margin:0 auto;width:100%}@media (min-width: 960px){.content[data-v-39f3916c]{padding:0 32px 128px}}@media (min-width: 1280px){.content[data-v-39f3916c]{order:1;margin:0;min-width:640px}}.content-container[data-v-39f3916c]{margin:0 auto}.VPDoc.has-aside .content-container[data-v-39f3916c]{max-width:688px}.VPButton[data-v-ff79a9eb]{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-ff79a9eb]:active{transition:color .1s,border-color .1s,background-color .1s}.VPButton.medium[data-v-ff79a9eb]{border-radius:20px;padding:0 20px;line-height:38px;font-size:14px}.VPButton.big[data-v-ff79a9eb]{border-radius:24px;padding:0 24px;line-height:46px;font-size:16px}.VPButton.brand[data-v-ff79a9eb]{border-color:var(--vp-button-brand-border);color:var(--vp-button-brand-text);background-color:var(--vp-button-brand-bg)}.VPButton.brand[data-v-ff79a9eb]: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-ff79a9eb]: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-ff79a9eb]{border-color:var(--vp-button-alt-border);color:var(--vp-button-alt-text);background-color:var(--vp-button-alt-bg)}.VPButton.alt[data-v-ff79a9eb]: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-ff79a9eb]: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-ff79a9eb]{border-color:var(--vp-button-sponsor-border);color:var(--vp-button-sponsor-text);background-color:var(--vp-button-sponsor-bg)}.VPButton.sponsor[data-v-ff79a9eb]: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-ff79a9eb]: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-710ef822]{display:none}.dark .VPImage.light[data-v-710ef822]{display:none}.VPHero[data-v-c67fc491]{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-c67fc491]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 48px 64px}}@media (min-width: 960px){.VPHero[data-v-c67fc491]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 64px 64px}}.container[data-v-c67fc491]{display:flex;flex-direction:column;margin:0 auto;max-width:1152px}@media (min-width: 960px){.container[data-v-c67fc491]{flex-direction:row}}.main[data-v-c67fc491]{position:relative;z-index:10;order:2;flex-grow:1;flex-shrink:0}.VPHero.has-image .container[data-v-c67fc491]{text-align:center}@media (min-width: 960px){.VPHero.has-image .container[data-v-c67fc491]{text-align:left}}@media (min-width: 960px){.main[data-v-c67fc491]{order:1;width:calc((100% / 3) * 2)}.VPHero.has-image .main[data-v-c67fc491]{max-width:592px}}.name[data-v-c67fc491],.text[data-v-c67fc491]{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-c67fc491],.VPHero.has-image .text[data-v-c67fc491]{margin:0 auto}.name[data-v-c67fc491]{color:var(--vp-home-hero-name-color)}.clip[data-v-c67fc491]{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-c67fc491],.text[data-v-c67fc491]{max-width:576px;line-height:56px;font-size:48px}}@media (min-width: 960px){.name[data-v-c67fc491],.text[data-v-c67fc491]{line-height:64px;font-size:56px}.VPHero.has-image .name[data-v-c67fc491],.VPHero.has-image .text[data-v-c67fc491]{margin:0}}.tagline[data-v-c67fc491]{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-c67fc491]{margin:0 auto}@media (min-width: 640px){.tagline[data-v-c67fc491]{padding-top:12px;max-width:576px;line-height:32px;font-size:20px}}@media (min-width: 960px){.tagline[data-v-c67fc491]{line-height:36px;font-size:24px}.VPHero.has-image .tagline[data-v-c67fc491]{margin:0}}.actions[data-v-c67fc491]{display:flex;flex-wrap:wrap;margin:-6px;padding-top:24px}.VPHero.has-image .actions[data-v-c67fc491]{justify-content:center}@media (min-width: 640px){.actions[data-v-c67fc491]{padding-top:32px}}@media (min-width: 960px){.VPHero.has-image .actions[data-v-c67fc491]{justify-content:flex-start}}.action[data-v-c67fc491]{flex-shrink:0;padding:6px}.image[data-v-c67fc491]{order:1;margin:-76px -24px -48px}@media (min-width: 640px){.image[data-v-c67fc491]{margin:-108px -24px -48px}}@media (min-width: 960px){.image[data-v-c67fc491]{flex-grow:1;order:2;margin:0;min-height:100%}}.image-container[data-v-c67fc491]{position:relative;margin:0 auto;width:320px;height:320px}@media (min-width: 640px){.image-container[data-v-c67fc491]{width:392px;height:392px}}@media (min-width: 960px){.image-container[data-v-c67fc491]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;transform:translate(-32px,-32px)}}.image-bg[data-v-c67fc491]{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-c67fc491]{width:256px;height:256px}}@media (min-width: 960px){.image-bg[data-v-c67fc491]{width:320px;height:320px}}[data-v-c67fc491] .image-src{position:absolute;top:50%;left:50%;max-width:192px;max-height:192px;transform:translate(-50%,-50%)}@media (min-width: 640px){[data-v-c67fc491] .image-src{max-width:256px;max-height:256px}}@media (min-width: 960px){[data-v-c67fc491] .image-src{max-width:320px;max-height:320px}}.VPFeature[data-v-e0e29367]{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-e0e29367]:hover{border-color:var(--vp-c-brand-1)}.box[data-v-e0e29367]{display:flex;flex-direction:column;padding:24px;height:100%}.box[data-v-e0e29367]>.VPImage{margin-bottom:20px}.icon[data-v-e0e29367]{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-e0e29367]{line-height:24px;font-size:16px;font-weight:600}.details[data-v-e0e29367]{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-e0e29367]{padding-top:8px}.link-text-value[data-v-e0e29367]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.link-text-icon[data-v-e0e29367]{margin-left:6px}.VPFeatures[data-v-faef1530]{position:relative;padding:0 24px}@media (min-width: 640px){.VPFeatures[data-v-faef1530]{padding:0 48px}}@media (min-width: 960px){.VPFeatures[data-v-faef1530]{padding:0 64px}}.container[data-v-faef1530]{margin:0 auto;max-width:1152px}.items[data-v-faef1530]{display:flex;flex-wrap:wrap;margin:-8px}.item[data-v-faef1530]{padding:8px;width:100%}@media (min-width: 640px){.item.grid-2[data-v-faef1530],.item.grid-4[data-v-faef1530],.item.grid-6[data-v-faef1530]{width:50%}}@media (min-width: 768px){.item.grid-2[data-v-faef1530],.item.grid-4[data-v-faef1530]{width:50%}.item.grid-3[data-v-faef1530],.item.grid-6[data-v-faef1530]{width:calc(100% / 3)}}@media (min-width: 960px){.item.grid-4[data-v-faef1530]{width:25%}}.container[data-v-eade2db2]{margin:auto;width:100%;max-width:1280px;padding:0 24px}@media (min-width: 640px){.container[data-v-eade2db2]{padding:0 48px}}@media (min-width: 960px){.container[data-v-eade2db2]{width:100%;padding:0 64px}}.vp-doc[data-v-eade2db2] .VPHomeSponsors,.vp-doc[data-v-eade2db2] .VPTeamPage{margin-left:var(--vp-offset, calc(50% - 50vw) );margin-right:var(--vp-offset, calc(50% - 50vw) )}.vp-doc[data-v-eade2db2] .VPHomeSponsors h2{border-top:none;letter-spacing:normal}.vp-doc[data-v-eade2db2] .VPHomeSponsors a,.vp-doc[data-v-eade2db2] .VPTeamPage a{text-decoration:none}.VPHome[data-v-bc91500b]{margin-bottom:96px}@media (min-width: 768px){.VPHome[data-v-bc91500b]{margin-bottom:128px}}.VPContent[data-v-7c429c6d]{flex-grow:1;flex-shrink:0;margin:var(--vp-layout-top-height, 0px) auto 0;width:100%}.VPContent.is-home[data-v-7c429c6d]{width:100%;max-width:100%}.VPContent.has-sidebar[data-v-7c429c6d]{margin:0}@media (min-width: 960px){.VPContent[data-v-7c429c6d]{padding-top:var(--vp-nav-height)}.VPContent.has-sidebar[data-v-7c429c6d]{margin:var(--vp-layout-top-height, 0px) 0 0;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPContent.has-sidebar[data-v-7c429c6d]{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-00622169]{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-00622169]{display:none}.VPFooter[data-v-00622169] a{text-decoration-line:underline;text-underline-offset:2px;transition:color .25s}.VPFooter[data-v-00622169] a:hover{color:var(--vp-c-text-1)}@media (min-width: 768px){.VPFooter[data-v-00622169]{padding:32px}}.container[data-v-00622169]{margin:0 auto;max-width:var(--vp-layout-max-width);text-align:center}.message[data-v-00622169],.copyright[data-v-00622169]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.VPLocalNavOutlineDropdown[data-v-b5135c91]{padding:12px 20px 11px}@media (min-width: 960px){.VPLocalNavOutlineDropdown[data-v-b5135c91]{padding:12px 36px 11px}}.VPLocalNavOutlineDropdown button[data-v-b5135c91]{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-b5135c91]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPLocalNavOutlineDropdown button.open[data-v-b5135c91]{color:var(--vp-c-text-1)}.icon[data-v-b5135c91]{display:inline-block;vertical-align:middle;margin-left:2px;font-size:14px;transform:rotate(0);transition:transform .25s}@media (min-width: 960px){.VPLocalNavOutlineDropdown button[data-v-b5135c91]{font-size:14px}.icon[data-v-b5135c91]{font-size:16px}}.open>.icon[data-v-b5135c91]{transform:rotate(90deg)}.items[data-v-b5135c91]{position:absolute;top:40px;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)}@media (min-width: 960px){.items[data-v-b5135c91]{right:auto;left:calc(var(--vp-sidebar-width) + 32px);width:320px}}.header[data-v-b5135c91]{background-color:var(--vp-c-bg-soft)}.top-link[data-v-b5135c91]{display:block;padding:0 16px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.outline[data-v-b5135c91]{padding:8px 0;background-color:var(--vp-c-bg-soft)}.flyout-enter-active[data-v-b5135c91]{transition:all .2s ease-out}.flyout-leave-active[data-v-b5135c91]{transition:all .15s ease-in}.flyout-enter-from[data-v-b5135c91],.flyout-leave-to[data-v-b5135c91]{opacity:0;transform:translateY(-16px)}.VPLocalNav[data-v-302e12c4]{position:sticky;top:0;left:0;z-index:var(--vp-z-index-local-nav);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-302e12c4]{position:fixed}@media (min-width: 960px){.VPLocalNav[data-v-302e12c4]{top:var(--vp-nav-height)}.VPLocalNav.has-sidebar[data-v-302e12c4]{padding-left:var(--vp-sidebar-width)}.VPLocalNav.empty[data-v-302e12c4]{display:none}}@media (min-width: 1280px){.VPLocalNav[data-v-302e12c4]{display:none}}@media (min-width: 1440px){.VPLocalNav.has-sidebar[data-v-302e12c4]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.container[data-v-302e12c4]{display:flex;justify-content:space-between;align-items:center}.menu[data-v-302e12c4]{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-302e12c4]:hover{color:var(--vp-c-text-1);transition:color .25s}@media (min-width: 768px){.menu[data-v-302e12c4]{padding:0 32px}}@media (min-width: 960px){.menu[data-v-302e12c4]{display:none}}.menu-icon[data-v-302e12c4]{margin-right:8px;font-size:14px}.VPOutlineDropdown[data-v-302e12c4]{padding:12px 24px 11px}@media (min-width: 768px){.VPOutlineDropdown[data-v-302e12c4]{padding:12px 32px 11px}}.VPSwitch[data-v-5f089da5]{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-5f089da5]:hover{border-color:var(--vp-c-brand-1)}.check[data-v-5f089da5]{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-5f089da5]{position:relative;display:block;width:18px;height:18px;border-radius:50%;overflow:hidden}.icon[data-v-5f089da5] [class^=vpi-]{position:absolute;top:3px;left:3px;width:12px;height:12px;color:var(--vp-c-text-2)}.dark .icon[data-v-5f089da5] [class^=vpi-]{color:var(--vp-c-text-1);transition:opacity .25s!important}.sun[data-v-feed2a55]{opacity:1}.moon[data-v-feed2a55],.dark .sun[data-v-feed2a55]{opacity:0}.dark .moon[data-v-feed2a55]{opacity:1}.dark .VPSwitchAppearance[data-v-feed2a55] .check{transform:translate(18px)}.VPNavBarAppearance[data-v-df1ef46c]{display:none}@media (min-width: 1280px){.VPNavBarAppearance[data-v-df1ef46c]{display:flex;align-items:center}}.VPMenuGroup+.VPMenuLink[data-v-f235725e]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.link[data-v-f235725e]{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-f235725e]:hover{color:var(--vp-c-brand-1);background-color:var(--vp-c-default-soft)}.link.active[data-v-f235725e]{color:var(--vp-c-brand-1)}.VPMenuGroup[data-v-383e02c9]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.VPMenuGroup[data-v-383e02c9]:first-child{margin-top:0;border-top:0;padding-top:0}.VPMenuGroup+.VPMenuGroup[data-v-383e02c9]{margin-top:12px;border-top:1px solid var(--vp-c-divider)}.title[data-v-383e02c9]{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-cc1be4f9]{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-cc1be4f9] .group{margin:0 -12px;padding:0 12px 12px}.VPMenu[data-v-cc1be4f9] .group+.group{border-top:1px solid var(--vp-c-divider);padding:11px 12px 12px}.VPMenu[data-v-cc1be4f9] .group:last-child{padding-bottom:0}.VPMenu[data-v-cc1be4f9] .group+.item{border-top:1px solid var(--vp-c-divider);padding:11px 16px 0}.VPMenu[data-v-cc1be4f9] .item{padding:0 16px;white-space:nowrap}.VPMenu[data-v-cc1be4f9] .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-cc1be4f9] .action{padding-left:24px}.VPFlyout[data-v-6fdb53fb]{position:relative}.VPFlyout[data-v-6fdb53fb]:hover{color:var(--vp-c-brand-1);transition:color .25s}.VPFlyout:hover .text[data-v-6fdb53fb]{color:var(--vp-c-text-2)}.VPFlyout:hover .icon[data-v-6fdb53fb]{fill:var(--vp-c-text-2)}.VPFlyout.active .text[data-v-6fdb53fb]{color:var(--vp-c-brand-1)}.VPFlyout.active:hover .text[data-v-6fdb53fb]{color:var(--vp-c-brand-2)}.button[aria-expanded=false]+.menu[data-v-6fdb53fb]{opacity:0;visibility:hidden;transform:translateY(0)}.VPFlyout:hover .menu[data-v-6fdb53fb],.button[aria-expanded=true]+.menu[data-v-6fdb53fb]{opacity:1;visibility:visible;transform:translateY(0)}.button[data-v-6fdb53fb]{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-6fdb53fb]{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-6fdb53fb]{margin-right:0;font-size:16px}.text-icon[data-v-6fdb53fb]{margin-left:4px;font-size:14px}.icon[data-v-6fdb53fb]{font-size:20px;transition:fill .25s}.menu[data-v-6fdb53fb]{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-90618787]{display:flex;justify-content:center;align-items:center;width:36px;height:36px;color:var(--vp-c-text-2);transition:color .5s}.VPSocialLink[data-v-90618787]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPSocialLink[data-v-90618787]>svg,.VPSocialLink[data-v-90618787]>[class^=vpi-social-]{width:20px;height:20px;fill:currentColor}.VPSocialLinks[data-v-ca397b59]{display:flex;justify-content:center}.VPNavBarExtra[data-v-de417752]{display:none;margin-right:-12px}@media (min-width: 768px){.VPNavBarExtra[data-v-de417752]{display:block}}@media (min-width: 1280px){.VPNavBarExtra[data-v-de417752]{display:none}}.trans-title[data-v-de417752]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.item.appearance[data-v-de417752],.item.social-links[data-v-de417752]{display:flex;align-items:center;padding:0 12px}.item.appearance[data-v-de417752]{min-width:176px}.appearance-action[data-v-de417752]{margin-right:-2px}.social-links-list[data-v-de417752]{margin:-4px -8px}.VPNavBarHamburger[data-v-bed00f9b]{display:flex;justify-content:center;align-items:center;width:48px;height:var(--vp-nav-height)}@media (min-width: 768px){.VPNavBarHamburger[data-v-bed00f9b]{display:none}}.container[data-v-bed00f9b]{position:relative;width:16px;height:14px;overflow:hidden}.VPNavBarHamburger:hover .top[data-v-bed00f9b]{top:0;left:0;transform:translate(4px)}.VPNavBarHamburger:hover .middle[data-v-bed00f9b]{top:6px;left:0;transform:translate(0)}.VPNavBarHamburger:hover .bottom[data-v-bed00f9b]{top:12px;left:0;transform:translate(8px)}.VPNavBarHamburger.active .top[data-v-bed00f9b]{top:6px;transform:translate(0) rotate(225deg)}.VPNavBarHamburger.active .middle[data-v-bed00f9b]{top:6px;transform:translate(16px)}.VPNavBarHamburger.active .bottom[data-v-bed00f9b]{top:6px;transform:translate(0) rotate(135deg)}.VPNavBarHamburger.active:hover .top[data-v-bed00f9b],.VPNavBarHamburger.active:hover .middle[data-v-bed00f9b],.VPNavBarHamburger.active:hover .bottom[data-v-bed00f9b]{background-color:var(--vp-c-text-2);transition:top .25s,background-color .25s,transform .25s}.top[data-v-bed00f9b],.middle[data-v-bed00f9b],.bottom[data-v-bed00f9b]{position:absolute;width:16px;height:2px;background-color:var(--vp-c-text-1);transition:top .25s,background-color .5s,transform .25s}.top[data-v-bed00f9b]{top:0;left:0;transform:translate(0)}.middle[data-v-bed00f9b]{top:6px;left:0;transform:translate(8px)}.bottom[data-v-bed00f9b]{top:12px;left:0;transform:translate(4px)}.VPNavBarMenuLink[data-v-a1b6385d]{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-a1b6385d],.VPNavBarMenuLink[data-v-a1b6385d]:hover{color:var(--vp-c-brand-1)}.VPNavBarMenu[data-v-bdd1a0e8]{display:none}@media (min-width: 768px){.VPNavBarMenu[data-v-bdd1a0e8]{display:flex}}/*! @docsearch/css 3.6.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-key-pressed-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 1px 0 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-key-pressed-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 1px 1px 0 rgba(3,4,9,.30196078431372547);--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}.DocSearch-Button-Key--pressed{transform:translate3d(0,1px,0);box-shadow:var(--docsearch-key-pressed-shadow)}@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:#0003;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:#0003;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}.DocSearch-VisuallyHiddenForAccessibility{clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}@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-Key--pressed{transform:none;box-shadow:none}.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}.DocSearch-Search-Icon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' stroke-width='1.6' viewBox='0 0 20 20'%3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='m14.386 14.386 4.088 4.088-4.088-4.088A7.533 7.533 0 1 1 3.733 3.733a7.533 7.533 0 0 1 10.653 10.653z'/%3E%3C/svg%3E")}.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-53af0b4f]{display:none}@media (min-width: 1280px){.VPNavBarSocialLinks[data-v-53af0b4f]{display:flex;align-items:center}}.title[data-v-e6758039]{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-e6758039]{flex-shrink:0}.VPNavBarTitle.has-sidebar .title[data-v-e6758039]{border-bottom-color:var(--vp-c-divider)}}[data-v-e6758039] .logo{margin-right:8px;height:var(--vp-nav-logo-height)}.VPNavBarTranslations[data-v-74e47c9d]{display:none}@media (min-width: 1280px){.VPNavBarTranslations[data-v-74e47c9d]{display:flex;align-items:center}}.title[data-v-74e47c9d]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.VPNavBar[data-v-de8dc9f0]{position:relative;height:var(--vp-nav-height);pointer-events:none;white-space:nowrap;transition:background-color .25s}.VPNavBar.screen-open[data-v-de8dc9f0]{transition:none;background-color:var(--vp-nav-bg-color);border-bottom:1px solid var(--vp-c-divider)}.VPNavBar[data-v-de8dc9f0]:not(.home){background-color:var(--vp-nav-bg-color)}@media (min-width: 960px){.VPNavBar[data-v-de8dc9f0]:not(.home){background-color:transparent}.VPNavBar[data-v-de8dc9f0]:not(.has-sidebar):not(.home.top){background-color:var(--vp-nav-bg-color)}}.wrapper[data-v-de8dc9f0]{padding:0 8px 0 24px}@media (min-width: 768px){.wrapper[data-v-de8dc9f0]{padding:0 32px}}@media (min-width: 960px){.VPNavBar.has-sidebar .wrapper[data-v-de8dc9f0]{padding:0}}.container[data-v-de8dc9f0]{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-de8dc9f0],.container>.content[data-v-de8dc9f0]{pointer-events:none}.container[data-v-de8dc9f0] *{pointer-events:auto}@media (min-width: 960px){.VPNavBar.has-sidebar .container[data-v-de8dc9f0]{max-width:100%}}.title[data-v-de8dc9f0]{flex-shrink:0;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar.has-sidebar .title[data-v-de8dc9f0]{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-de8dc9f0]{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-de8dc9f0]{flex-grow:1}@media (min-width: 960px){.VPNavBar.has-sidebar .content[data-v-de8dc9f0]{position:relative;z-index:1;padding-right:32px;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .content[data-v-de8dc9f0]{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-de8dc9f0]{display:flex;justify-content:flex-end;align-items:center;height:var(--vp-nav-height);transition:background-color .5s}@media (min-width: 960px){.VPNavBar:not(.home.top) .content-body[data-v-de8dc9f0]{position:relative;background-color:var(--vp-nav-bg-color)}.VPNavBar:not(.has-sidebar):not(.home.top) .content-body[data-v-de8dc9f0]{background-color:transparent}}@media (max-width: 767px){.content-body[data-v-de8dc9f0]{column-gap:.5rem}}.menu+.translations[data-v-de8dc9f0]:before,.menu+.appearance[data-v-de8dc9f0]:before,.menu+.social-links[data-v-de8dc9f0]:before,.translations+.appearance[data-v-de8dc9f0]:before,.appearance+.social-links[data-v-de8dc9f0]:before{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--vp-c-divider);content:""}.menu+.appearance[data-v-de8dc9f0]:before,.translations+.appearance[data-v-de8dc9f0]:before{margin-right:16px}.appearance+.social-links[data-v-de8dc9f0]:before{margin-left:16px}.social-links[data-v-de8dc9f0]{margin-right:-8px}.divider[data-v-de8dc9f0]{width:100%;height:1px}@media (min-width: 960px){.VPNavBar.has-sidebar .divider[data-v-de8dc9f0]{padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .divider[data-v-de8dc9f0]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.divider-line[data-v-de8dc9f0]{width:100%;height:1px;transition:background-color .5s}.VPNavBar:not(.home) .divider-line[data-v-de8dc9f0]{background-color:var(--vp-c-gutter)}@media (min-width: 960px){.VPNavBar:not(.home.top) .divider-line[data-v-de8dc9f0]{background-color:var(--vp-c-gutter)}.VPNavBar:not(.has-sidebar):not(.home.top) .divider[data-v-de8dc9f0]{background-color:var(--vp-c-gutter)}}.VPNavScreenAppearance[data-v-366d16fc]{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-366d16fc]{line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.VPNavScreenMenuLink[data-v-6e744a18]{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-6e744a18]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupLink[data-v-584175f4]{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-584175f4]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupSection[data-v-a4bf30cc]{display:block}.title[data-v-a4bf30cc]{line-height:32px;font-size:13px;font-weight:700;color:var(--vp-c-text-2);transition:color .25s}.VPNavScreenMenuGroup[data-v-4c4e6736]{border-bottom:1px solid var(--vp-c-divider);height:48px;overflow:hidden;transition:border-color .5s}.VPNavScreenMenuGroup .items[data-v-4c4e6736]{visibility:hidden}.VPNavScreenMenuGroup.open .items[data-v-4c4e6736]{visibility:visible}.VPNavScreenMenuGroup.open[data-v-4c4e6736]{padding-bottom:10px;height:auto}.VPNavScreenMenuGroup.open .button[data-v-4c4e6736]{padding-bottom:6px;color:var(--vp-c-brand-1)}.VPNavScreenMenuGroup.open .button-icon[data-v-4c4e6736]{transform:rotate(45deg)}.button[data-v-4c4e6736]{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-4c4e6736]:hover{color:var(--vp-c-brand-1)}.button-icon[data-v-4c4e6736]{transition:transform .25s}.group[data-v-4c4e6736]:first-child{padding-top:0}.group+.group[data-v-4c4e6736],.group+.item[data-v-4c4e6736]{padding-top:4px}.VPNavScreenTranslations[data-v-2ae0c1dd]{height:24px;overflow:hidden}.VPNavScreenTranslations.open[data-v-2ae0c1dd]{height:auto}.title[data-v-2ae0c1dd]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-text-1)}.icon[data-v-2ae0c1dd]{font-size:16px}.icon.lang[data-v-2ae0c1dd]{margin-right:8px}.icon.chevron[data-v-2ae0c1dd]{margin-left:4px}.list[data-v-2ae0c1dd]{padding:4px 0 0 24px}.link[data-v-2ae0c1dd]{line-height:32px;font-size:13px;color:var(--vp-c-text-1)}.VPNavScreen[data-v-56ce9e49]{position:fixed;top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px));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 .25s;pointer-events:auto}.VPNavScreen.fade-enter-active[data-v-56ce9e49],.VPNavScreen.fade-leave-active[data-v-56ce9e49]{transition:opacity .25s}.VPNavScreen.fade-enter-active .container[data-v-56ce9e49],.VPNavScreen.fade-leave-active .container[data-v-56ce9e49]{transition:transform .25s ease}.VPNavScreen.fade-enter-from[data-v-56ce9e49],.VPNavScreen.fade-leave-to[data-v-56ce9e49]{opacity:0}.VPNavScreen.fade-enter-from .container[data-v-56ce9e49],.VPNavScreen.fade-leave-to .container[data-v-56ce9e49]{transform:translateY(-8px)}@media (min-width: 768px){.VPNavScreen[data-v-56ce9e49]{display:none}}.container[data-v-56ce9e49]{margin:0 auto;padding:24px 0 96px;max-width:288px}.menu+.translations[data-v-56ce9e49],.menu+.appearance[data-v-56ce9e49],.translations+.appearance[data-v-56ce9e49]{margin-top:24px}.menu+.social-links[data-v-56ce9e49]{margin-top:16px}.appearance+.social-links[data-v-56ce9e49]{margin-top:16px}.VPNav[data-v-19a3c1e3]{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-19a3c1e3]{position:fixed}}.VPSidebarItem.level-0[data-v-670081f0]{padding-bottom:24px}.VPSidebarItem.collapsed.level-0[data-v-670081f0]{padding-bottom:10px}.item[data-v-670081f0]{position:relative;display:flex;width:100%}.VPSidebarItem.collapsible>.item[data-v-670081f0]{cursor:pointer}.indicator[data-v-670081f0]{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-670081f0],.VPSidebarItem.level-3.is-active>.item>.indicator[data-v-670081f0],.VPSidebarItem.level-4.is-active>.item>.indicator[data-v-670081f0],.VPSidebarItem.level-5.is-active>.item>.indicator[data-v-670081f0]{background-color:var(--vp-c-brand-1)}.link[data-v-670081f0]{display:flex;align-items:center;flex-grow:1}.text[data-v-670081f0]{flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;transition:color .25s}.VPSidebarItem.level-0 .text[data-v-670081f0]{font-weight:700;color:var(--vp-c-text-1)}.VPSidebarItem.level-1 .text[data-v-670081f0],.VPSidebarItem.level-2 .text[data-v-670081f0],.VPSidebarItem.level-3 .text[data-v-670081f0],.VPSidebarItem.level-4 .text[data-v-670081f0],.VPSidebarItem.level-5 .text[data-v-670081f0]{font-weight:500;color:var(--vp-c-text-2)}.VPSidebarItem.level-0.is-link>.item>.link:hover .text[data-v-670081f0],.VPSidebarItem.level-1.is-link>.item>.link:hover .text[data-v-670081f0],.VPSidebarItem.level-2.is-link>.item>.link:hover .text[data-v-670081f0],.VPSidebarItem.level-3.is-link>.item>.link:hover .text[data-v-670081f0],.VPSidebarItem.level-4.is-link>.item>.link:hover .text[data-v-670081f0],.VPSidebarItem.level-5.is-link>.item>.link:hover .text[data-v-670081f0]{color:var(--vp-c-brand-1)}.VPSidebarItem.level-0.has-active>.item>.text[data-v-670081f0],.VPSidebarItem.level-1.has-active>.item>.text[data-v-670081f0],.VPSidebarItem.level-2.has-active>.item>.text[data-v-670081f0],.VPSidebarItem.level-3.has-active>.item>.text[data-v-670081f0],.VPSidebarItem.level-4.has-active>.item>.text[data-v-670081f0],.VPSidebarItem.level-5.has-active>.item>.text[data-v-670081f0],.VPSidebarItem.level-0.has-active>.item>.link>.text[data-v-670081f0],.VPSidebarItem.level-1.has-active>.item>.link>.text[data-v-670081f0],.VPSidebarItem.level-2.has-active>.item>.link>.text[data-v-670081f0],.VPSidebarItem.level-3.has-active>.item>.link>.text[data-v-670081f0],.VPSidebarItem.level-4.has-active>.item>.link>.text[data-v-670081f0],.VPSidebarItem.level-5.has-active>.item>.link>.text[data-v-670081f0]{color:var(--vp-c-text-1)}.VPSidebarItem.level-0.is-active>.item .link>.text[data-v-670081f0],.VPSidebarItem.level-1.is-active>.item .link>.text[data-v-670081f0],.VPSidebarItem.level-2.is-active>.item .link>.text[data-v-670081f0],.VPSidebarItem.level-3.is-active>.item .link>.text[data-v-670081f0],.VPSidebarItem.level-4.is-active>.item .link>.text[data-v-670081f0],.VPSidebarItem.level-5.is-active>.item .link>.text[data-v-670081f0]{color:var(--vp-c-brand-1)}.caret[data-v-670081f0]{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-670081f0]{color:var(--vp-c-text-2)}.item:hover .caret[data-v-670081f0]:hover{color:var(--vp-c-text-1)}.caret-icon[data-v-670081f0]{font-size:18px;transform:rotate(90deg);transition:transform .25s}.VPSidebarItem.collapsed .caret-icon[data-v-670081f0]{transform:rotate(0)}.VPSidebarItem.level-1 .items[data-v-670081f0],.VPSidebarItem.level-2 .items[data-v-670081f0],.VPSidebarItem.level-3 .items[data-v-670081f0],.VPSidebarItem.level-4 .items[data-v-670081f0],.VPSidebarItem.level-5 .items[data-v-670081f0]{border-left:1px solid var(--vp-c-divider);padding-left:16px}.VPSidebarItem.collapsed .items[data-v-670081f0]{display:none}.no-transition[data-v-55d905db] .caret-icon{transition:none}.group+.group[data-v-55d905db]{border-top:1px solid var(--vp-c-divider);padding-top:10px}@media (min-width: 960px){.group[data-v-55d905db]{padding-top:10px;width:calc(var(--vp-sidebar-width) - 64px)}}.VPSidebar[data-v-94be1d22]{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-94be1d22]{opacity:1;visibility:visible;transform:translate(0);transition:opacity .25s,transform .5s cubic-bezier(.19,1,.22,1)}.dark .VPSidebar[data-v-94be1d22]{box-shadow:var(--vp-shadow-1)}@media (min-width: 960px){.VPSidebar[data-v-94be1d22]{padding-top:var(--vp-nav-height);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-94be1d22]{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-94be1d22]{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-94be1d22]{outline:0}.VPSkipLink[data-v-2cbb4704]{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-2cbb4704]:focus{height:auto;width:auto;clip:auto;clip-path:none}@media (min-width: 1280px){.VPSkipLink[data-v-2cbb4704]{top:14px;left:16px}}.Layout[data-v-6ceee570]{display:flex;flex-direction:column;min-height:100vh}.VPHomeSponsors[data-v-7001f571]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPHomeSponsors[data-v-7001f571]{margin:96px 0}@media (min-width: 768px){.VPHomeSponsors[data-v-7001f571]{margin:128px 0}}.VPHomeSponsors[data-v-7001f571]{padding:0 24px}@media (min-width: 768px){.VPHomeSponsors[data-v-7001f571]{padding:0 48px}}@media (min-width: 960px){.VPHomeSponsors[data-v-7001f571]{padding:0 64px}}.container[data-v-7001f571]{margin:0 auto;max-width:1152px}.love[data-v-7001f571]{margin:0 auto;width:fit-content;font-size:28px;color:var(--vp-c-text-3)}.icon[data-v-7001f571]{display:inline-block}.message[data-v-7001f571]{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-7001f571]{padding-top:32px}.action[data-v-7001f571]{padding-top:40px;text-align:center}.VPTeamPage[data-v-85ae4443]{margin:96px 0}@media (min-width: 768px){.VPTeamPage[data-v-85ae4443]{margin:128px 0}}.VPHome .VPTeamPageTitle[data-v-85ae4443-s]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPTeamPageSection+.VPTeamPageSection[data-v-85ae4443-s],.VPTeamMembers+.VPTeamPageSection[data-v-85ae4443-s]{margin-top:64px}.VPTeamMembers+.VPTeamMembers[data-v-85ae4443-s]{margin-top:24px}@media (min-width: 768px){.VPTeamPageTitle+.VPTeamPageSection[data-v-85ae4443-s]{margin-top:16px}.VPTeamPageSection+.VPTeamPageSection[data-v-85ae4443-s],.VPTeamMembers+.VPTeamPageSection[data-v-85ae4443-s]{margin-top:96px}}.VPTeamMembers[data-v-85ae4443-s]{padding:0 24px}@media (min-width: 768px){.VPTeamMembers[data-v-85ae4443-s]{padding:0 48px}}@media (min-width: 960px){.VPTeamMembers[data-v-85ae4443-s]{padding:0 64px}}.VPTeamPageTitle[data-v-36d63b9d]{padding:48px 32px;text-align:center}@media (min-width: 768px){.VPTeamPageTitle[data-v-36d63b9d]{padding:64px 48px 48px}}@media (min-width: 960px){.VPTeamPageTitle[data-v-36d63b9d]{padding:80px 64px 48px}}.title[data-v-36d63b9d]{letter-spacing:0;line-height:44px;font-size:36px;font-weight:500}@media (min-width: 768px){.title[data-v-36d63b9d]{letter-spacing:-.5px;line-height:56px;font-size:48px}}.lead[data-v-36d63b9d]{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-36d63b9d]{max-width:592px;letter-spacing:.15px;line-height:28px;font-size:20px}}.VPTeamPageSection[data-v-a60d16f8]{padding:0 32px}@media (min-width: 768px){.VPTeamPageSection[data-v-a60d16f8]{padding:0 48px}}@media (min-width: 960px){.VPTeamPageSection[data-v-a60d16f8]{padding:0 64px}}.title[data-v-a60d16f8]{position:relative;margin:0 auto;max-width:1152px;text-align:center;color:var(--vp-c-text-2)}.title-line[data-v-a60d16f8]{position:absolute;top:16px;left:0;width:100%;height:1px;background-color:var(--vp-c-divider)}.title-text[data-v-a60d16f8]{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-a60d16f8]{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-a60d16f8]{padding-top:40px}.VPTeamMembersItem[data-v-6309a21b]{display:flex;flex-direction:column;gap:2px;border-radius:12px;width:100%;height:100%;overflow:hidden}.VPTeamMembersItem.small .profile[data-v-6309a21b]{padding:32px}.VPTeamMembersItem.small .data[data-v-6309a21b]{padding-top:20px}.VPTeamMembersItem.small .avatar[data-v-6309a21b]{width:64px;height:64px}.VPTeamMembersItem.small .name[data-v-6309a21b]{line-height:24px;font-size:16px}.VPTeamMembersItem.small .affiliation[data-v-6309a21b]{padding-top:4px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .desc[data-v-6309a21b]{padding-top:12px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .links[data-v-6309a21b]{margin:0 -16px -20px;padding:10px 0 0}.VPTeamMembersItem.medium .profile[data-v-6309a21b]{padding:48px 32px}.VPTeamMembersItem.medium .data[data-v-6309a21b]{padding-top:24px;text-align:center}.VPTeamMembersItem.medium .avatar[data-v-6309a21b]{width:96px;height:96px}.VPTeamMembersItem.medium .name[data-v-6309a21b]{letter-spacing:.15px;line-height:28px;font-size:20px}.VPTeamMembersItem.medium .affiliation[data-v-6309a21b]{padding-top:4px;font-size:16px}.VPTeamMembersItem.medium .desc[data-v-6309a21b]{padding-top:16px;max-width:288px;font-size:16px}.VPTeamMembersItem.medium .links[data-v-6309a21b]{margin:0 -16px -12px;padding:16px 12px 0}.profile[data-v-6309a21b]{flex-grow:1;background-color:var(--vp-c-bg-soft)}.data[data-v-6309a21b]{text-align:center}.avatar[data-v-6309a21b]{position:relative;flex-shrink:0;margin:0 auto;border-radius:50%;box-shadow:var(--vp-shadow-3)}.avatar-img[data-v-6309a21b]{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;object-fit:cover}.name[data-v-6309a21b]{margin:0;font-weight:600}.affiliation[data-v-6309a21b]{margin:0;font-weight:500;color:var(--vp-c-text-2)}.org.link[data-v-6309a21b]{color:var(--vp-c-text-2);transition:color .25s}.org.link[data-v-6309a21b]:hover{color:var(--vp-c-brand-1)}.desc[data-v-6309a21b]{margin:0 auto}.desc[data-v-6309a21b] a{font-weight:500;color:var(--vp-c-brand-1);text-decoration-style:dotted;transition:color .25s}.links[data-v-6309a21b]{display:flex;justify-content:center;height:56px}.sp-link[data-v-6309a21b]{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-6309a21b]:hover,.sp .sp-link.link[data-v-6309a21b]:focus{outline:none;color:var(--vp-c-white);background-color:var(--vp-c-sponsor)}.sp-icon[data-v-6309a21b]{margin-right:8px;font-size:16px}.VPTeamMembers.small .container[data-v-1321ea85]{grid-template-columns:repeat(auto-fit,minmax(224px,1fr))}.VPTeamMembers.small.count-1 .container[data-v-1321ea85]{max-width:276px}.VPTeamMembers.small.count-2 .container[data-v-1321ea85]{max-width:576px}.VPTeamMembers.small.count-3 .container[data-v-1321ea85]{max-width:876px}.VPTeamMembers.medium .container[data-v-1321ea85]{grid-template-columns:repeat(auto-fit,minmax(256px,1fr))}@media (min-width: 375px){.VPTeamMembers.medium .container[data-v-1321ea85]{grid-template-columns:repeat(auto-fit,minmax(288px,1fr))}}.VPTeamMembers.medium.count-1 .container[data-v-1321ea85]{max-width:368px}.VPTeamMembers.medium.count-2 .container[data-v-1321ea85]{max-width:760px}.container[data-v-1321ea85]{display:grid;gap:24px;margin:0 auto;max-width:1152px}: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-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-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)}:root{--vp-home-hero-name-color: transparent;--vp-home-hero-name-background: -webkit-linear-gradient( 120deg, #5EFCE8 30%, #736EFE );--vp-home-hero-image-background-image: linear-gradient( -45deg, #5EFCE8 30%, #736EFE );--vp-home-hero-image-filter: blur(44px)}@media (min-width: 640px){:root{--vp-home-hero-image-filter: blur(56px)}}@media (min-width: 960px){:root{--vp-home-hero-image-filter: blur(68px)}}:root{--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)}.DocSearch{--docsearch-primary-color: var(--vp-c-brand-1) !important}:root{--font-family: -apple-system, BlinkMacSystemFont, Inter, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", "PingFang SC", "Noto Sans SC", "Noto Sans CJK SC", STHeiti, "Microsoft YaHei", SimSun, sans-serif;--font-family-heading: -apple-system, BlinkMacSystemFont, Inter, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", "PingFang SC", "Noto Sans SC", "Noto Sans CJK SC", STHeiti, "Microsoft YaHei", SimSun, sans-serif}:root{--vp-plugin-tabs-tab-text-color: var(--vp-c-text-2);--vp-plugin-tabs-tab-active-text-color: var(--vp-c-text-1);--vp-plugin-tabs-tab-hover-text-color: var(--vp-c-text-1);--vp-plugin-tabs-tab-bg: var(--vp-c-bg-soft);--vp-plugin-tabs-tab-divider: var(--vp-c-divider);--vp-plugin-tabs-tab-active-bar-color: var(--vp-c-brand-1)}.plugin-tabs{margin:16px 0;background-color:var(--vp-plugin-tabs-tab-bg);border-radius:8px}.plugin-tabs--tab-list{position:relative;padding:0 12px;overflow-x:auto;overflow-y:hidden}.plugin-tabs--tab-list:after{content:"";position:absolute;bottom:0;left:0;right:0;height:2px;background-color:var(--vp-plugin-tabs-tab-divider)}.plugin-tabs--tab{position:relative;padding:0 12px;line-height:48px;border-bottom:2px solid transparent;color:var(--vp-plugin-tabs-tab-text-color);font-size:14px;font-weight:500;white-space:nowrap;transition:color .25s}.plugin-tabs--tab[aria-selected=true]{color:var(--vp-plugin-tabs-tab-active-text-color)}.plugin-tabs--tab:hover{color:var(--vp-plugin-tabs-tab-hover-text-color)}.plugin-tabs--tab:after{content:"";position:absolute;bottom:-2px;left:8px;right:8px;height:2px;background-color:transparent;transition:background-color .25s;z-index:1}.plugin-tabs--tab[aria-selected=true]:after{background-color:var(--vp-plugin-tabs-tab-active-bar-color)}.plugin-tabs--content[data-v-2855cb06]{padding:16px}.plugin-tabs--content[data-v-2855cb06]>:first-child:first-child{margin-top:0}.plugin-tabs--content[data-v-2855cb06]>:last-child:last-child{margin-bottom:0}.plugin-tabs--content[data-v-2855cb06]>div[class*=language-]{border-radius:8px;margin:16px 0}:root:not(.dark) .plugin-tabs--content[data-v-2855cb06] div[class*=language-]{background-color:var(--vp-c-bg)}.chat-box[data-v-5dc73542]{display:flex;flex-direction:column}.chat-message-left[data-v-5dc73542],.chat-message-right[data-v-5dc73542]{display:flex;margin:.5rem 0}.chat-message-right[data-v-5dc73542]{justify-content:right}.chat-avatar[data-v-5dc73542]{display:flex;justify-content:center;margin:1px;border-radius:.25rem}.chat-avatar img[data-v-5dc73542]{width:40px;height:40px;border-radius:.25rem}.chat-info-left[data-v-5dc73542],.chat-info-right[data-v-5dc73542]{width:70%;display:flex;flex-direction:column}.chat-info-left .chat-title[data-v-5dc73542],.chat-info-right .chat-title[data-v-5dc73542]{margin:0 .5rem}.chat-info-right[data-v-5dc73542]{align-items:flex-end}.bubble-left[data-v-5dc73542],.bubble-right[data-v-5dc73542]{width:fit-content;max-width:80%;margin:.1rem 0;padding:.5rem 1rem;filter:brightness(var(--3861e4ab));position:relative;word-break:break-all}.bubble-left span[data-v-5dc73542],.bubble-right span[data-v-5dc73542]{line-height:1.5}.bubble-left[data-v-5dc73542]:before,.bubble-right[data-v-5dc73542]:after{position:absolute;content:"";width:0;height:0}.bubble-left[data-v-5dc73542]{background-color:var(--cc4e36f8);border-radius:0 .5rem .5rem;margin-left:.5rem}.bubble-left[data-v-5dc73542]:before{top:0;left:-1rem;border-top:0;border-right:.5rem solid var(--cc4e36f8);border-bottom:1rem solid transparent;border-left:.5rem solid transparent}.bubble-right[data-v-5dc73542]{background-color:var(--cf2870f2);border-radius:.5rem 0 .5rem .5rem;margin-right:.5rem}.bubble-right[data-v-5dc73542]:after{top:0;right:-1rem;border-top:0;border-right:.5rem solid transparent;border-bottom:1rem solid transparent;border-left:.5rem solid var(--cf2870f2)}.VPLocalSearchBox[data-v-d42b7272]{position:fixed;z-index:100;top:0;right:0;bottom:0;left:0;display:flex}.backdrop[data-v-d42b7272]{position:absolute;top:0;right:0;bottom:0;left:0;background:var(--vp-backdrop-bg-color);transition:opacity .5s}.shell[data-v-d42b7272]{position:relative;padding:12px;margin:64px auto;display:flex;flex-direction:column;gap:16px;background:var(--vp-local-search-bg);width:min(100vw - 60px,900px);height:min-content;max-height:min(100vh - 128px,900px);border-radius:6px}@media (max-width: 767px){.shell[data-v-d42b7272]{margin:0;width:100vw;height:100vh;max-height:none;border-radius:0}}.search-bar[data-v-d42b7272]{border:1px solid var(--vp-c-divider);border-radius:4px;display:flex;align-items:center;padding:0 12px;cursor:text}@media (max-width: 767px){.search-bar[data-v-d42b7272]{padding:0 8px}}.search-bar[data-v-d42b7272]:focus-within{border-color:var(--vp-c-brand-1)}.local-search-icon[data-v-d42b7272]{display:block;font-size:18px}.navigate-icon[data-v-d42b7272]{display:block;font-size:14px}.search-icon[data-v-d42b7272]{margin:8px}@media (max-width: 767px){.search-icon[data-v-d42b7272]{display:none}}.search-input[data-v-d42b7272]{padding:6px 12px;font-size:inherit;width:100%}@media (max-width: 767px){.search-input[data-v-d42b7272]{padding:6px 4px}}.search-actions[data-v-d42b7272]{display:flex;gap:4px}@media (any-pointer: coarse){.search-actions[data-v-d42b7272]{gap:8px}}@media (min-width: 769px){.search-actions.before[data-v-d42b7272]{display:none}}.search-actions button[data-v-d42b7272]{padding:8px}.search-actions button[data-v-d42b7272]:not([disabled]):hover,.toggle-layout-button.detailed-list[data-v-d42b7272]{color:var(--vp-c-brand-1)}.search-actions button.clear-button[data-v-d42b7272]:disabled{opacity:.37}.search-keyboard-shortcuts[data-v-d42b7272]{font-size:.8rem;opacity:75%;display:flex;flex-wrap:wrap;gap:16px;line-height:14px}.search-keyboard-shortcuts span[data-v-d42b7272]{display:flex;align-items:center;gap:4px}@media (max-width: 767px){.search-keyboard-shortcuts[data-v-d42b7272]{display:none}}.search-keyboard-shortcuts kbd[data-v-d42b7272]{background:#8080801a;border-radius:4px;padding:3px 6px;min-width:24px;display:inline-block;text-align:center;vertical-align:middle;border:1px solid rgba(128,128,128,.15);box-shadow:0 2px 2px #0000001a}.results[data-v-d42b7272]{display:flex;flex-direction:column;gap:6px;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain}.result[data-v-d42b7272]{display:flex;align-items:center;gap:8px;border-radius:4px;transition:none;line-height:1rem;border:solid 2px var(--vp-local-search-result-border);outline:none}.result>div[data-v-d42b7272]{margin:12px;width:100%;overflow:hidden}@media (max-width: 767px){.result>div[data-v-d42b7272]{margin:8px}}.titles[data-v-d42b7272]{display:flex;flex-wrap:wrap;gap:4px;position:relative;z-index:1001;padding:2px 0}.title[data-v-d42b7272]{display:flex;align-items:center;gap:4px}.title.main[data-v-d42b7272]{font-weight:500}.title-icon[data-v-d42b7272]{opacity:.5;font-weight:500;color:var(--vp-c-brand-1)}.title svg[data-v-d42b7272]{opacity:.5}.result.selected[data-v-d42b7272]{--vp-local-search-result-bg: var(--vp-local-search-result-selected-bg);border-color:var(--vp-local-search-result-selected-border)}.excerpt-wrapper[data-v-d42b7272]{position:relative}.excerpt[data-v-d42b7272]{opacity:50%;pointer-events:none;max-height:140px;overflow:hidden;position:relative;margin-top:4px}.result.selected .excerpt[data-v-d42b7272]{opacity:1}.excerpt[data-v-d42b7272] *{font-size:.8rem!important;line-height:130%!important}.titles[data-v-d42b7272] mark,.excerpt[data-v-d42b7272] mark{background-color:var(--vp-local-search-highlight-bg);color:var(--vp-local-search-highlight-text);border-radius:2px;padding:0 2px}.excerpt[data-v-d42b7272] .vp-code-group .tabs{display:none}.excerpt[data-v-d42b7272] .vp-code-group div[class*=language-]{border-radius:8px!important}.excerpt-gradient-bottom[data-v-d42b7272]{position:absolute;bottom:-1px;left:0;width:100%;height:8px;background:linear-gradient(transparent,var(--vp-local-search-result-bg));z-index:1000}.excerpt-gradient-top[data-v-d42b7272]{position:absolute;top:-1px;left:0;width:100%;height:8px;background:linear-gradient(var(--vp-local-search-result-bg),transparent);z-index:1000}.result.selected .titles[data-v-d42b7272],.result.selected .title-icon[data-v-d42b7272]{color:var(--vp-c-brand-1)!important}.no-results[data-v-d42b7272]{font-size:.9rem;text-align:center;padding:12px}svg[data-v-d42b7272]{flex:none} diff --git a/assets/use_README.md.DiyY5kVI.js b/assets/use_README.md.DiyY5kVI.js new file mode 100644 index 000000000..fb9453e52 --- /dev/null +++ b/assets/use_README.md.DiyY5kVI.js @@ -0,0 +1 @@ +import{_ as a,c as e,a6 as t,o as i}from"./chunks/framework.B1keMFNq.js";const c=JSON.parse('{"title":"使用","description":"","frontmatter":{"title":"使用","index":false},"headers":[],"relativePath":"use/README.md","filePath":"use/README.md","lastUpdated":1715446720000}'),r={name:"use/README.md"};function h(s,l,o,f,u,m){return i(),e("div",null,l[0]||(l[0]=[t('',1)]))}const d=a(r,[["render",h]]);export{c as __pageData,d as default}; diff --git a/assets/use_README.md.DiyY5kVI.lean.js b/assets/use_README.md.DiyY5kVI.lean.js new file mode 100644 index 000000000..fb9453e52 --- /dev/null +++ b/assets/use_README.md.DiyY5kVI.lean.js @@ -0,0 +1 @@ +import{_ as a,c as e,a6 as t,o as i}from"./chunks/framework.B1keMFNq.js";const c=JSON.parse('{"title":"使用","description":"","frontmatter":{"title":"使用","index":false},"headers":[],"relativePath":"use/README.md","filePath":"use/README.md","lastUpdated":1715446720000}'),r={name:"use/README.md"};function h(s,l,o,f,u,m){return i(),e("div",null,l[0]||(l[0]=[t('',1)]))}const d=a(r,[["render",h]]);export{c as __pageData,d as default}; diff --git a/assets/use_attribute_alias.md.DrXrL3FF.js b/assets/use_attribute_alias.md.DrXrL3FF.js new file mode 100644 index 000000000..153131d78 --- /dev/null +++ b/assets/use_attribute_alias.md.DrXrL3FF.js @@ -0,0 +1,29 @@ +import{_ as a,c as n,a6 as i,o as e}from"./chunks/framework.B1keMFNq.js";const k=JSON.parse('{"title":"属性同义词","description":"","frontmatter":{"lang":"zh-cn","title":"属性同义词"},"headers":[],"relativePath":"use/attribute_alias.md","filePath":"use/attribute_alias.md","lastUpdated":1714442589000}'),p={name:"use/attribute_alias.md"};function l(t,s,c,o,d,h){return e(),n("div",null,s[0]||(s[0]=[i(`

    属性同义词

    本节内容

    本节将介绍海豹在 CoC 和 D&D 规则中默认使用的同义词。

    概念说明

    属性同义词是在录入和存储角色数据时,将若干个属性名视为同一个属性、互相可以替代使用。

    这一设计是为了解决下面这样的问题:(由于笔者的游戏栈,使用 CoC 举例)

    场景举例

    用户可能使用某些自动工具创建了一名调查员,由工具生成了录入数据的指令。这指令可能包含了类似这样的内容:

    text
    .st 力量50str50

    我们知道,「str」是「力量」属性的英文缩写法,它们完全指代的是同一属性。

    因此,我们期待这样的指令实际只录入一条属性,但是用户仍然可以用「力量」或「str」的任何一个名字使用这一属性。

    text
    $ .st 力量50str50
    +<木落>的属性录入完成,本次共记录了2条数据 (其中1条为同义词)
    +
    +# 实际上只有一条属性
    +$ .st show
    +<木落>的个人属性为:力量: 50
    +
    +# 可以用各种名字使用
    +$ .ra 力量
    +<木落>尝试使用"力量"技能:D100=64/50 失败
    +$ .ra STR
    +<木落>尝试使用"力量"技能:D100=78/50 失败
    +
    +# 可以用各种名字修改
    +$ .st str+10
    +<木落>的属性变化:
    +力量: 50 ➯ 60 (增加10=10)
    +$ .ra 力量
    +<木落>尝试使用"力量"技能:D100=90/60 失败

    类似地,在 CoC 中,「智力」与「灵感」是规则书规定的同一属性的两个名字。它们也被视为同义词。

    一些分支专精技能的名字,如「冲锋枪」,我们将「射击:冲锋枪」作为它的同义词,以适配尽量多的用法。

    我们在选择同义词时遵循以下几条原则:

    1. 规定的同义词等价,如 智力灵感教育知识
    2. 中文和英文缩写等价,如 力量str
    3. 同一概念的不同常用称呼等价,如 理智理智值,根据原则 2,sansan值 也指向同一属性;
    4. 日常用语中基本等价且易混淆的词汇等价,如 侦查侦察
    5. 不同版本规则之间的同一技能更换了用词,或翻译有变化,这些名字等价;如 CoC 6 版的 快速交谈 与 7 版的 话术;又如 7 版的 魅惑取悦
    6. 简体与繁体字等价,如 体质體質
    7. 在玩家中广泛使用的简称、别称与其正式名称等价,如 克苏鲁神话克苏鲁克苏鲁神话知识

    同义词表

    为了确保你不会获取到过时内容,我们决定不将列表放在手册中,敬请理解。

    这些同义词都是符合直觉的,你通常也无需专门查阅列表。如果你确实想了解,请参考以下内容。

    • CoC 规则的同义词,请自行理解 此源文件 的内容。

    • D&D 规则的同义词可在骰子启动后,在本地文件 data/default/extensions/dnd5e/attribute.yaml 中查看。

      这个文件遵守以下格式。其中,ac 位置上的名字是海豹核心选用的主要名字,后续列出的是它的同义词。

      yaml
      alias:
      +    ac:
      +        - AC
      +        - 护甲等级
      +        - 护甲值
      +        - 护甲
      +        - 護甲等級
      +        - 護甲值
      +        - 護甲
      +        - 装甲
      +        - 裝甲
    `,12)]))}const E=a(p,[["render",l]]);export{k as __pageData,E as default}; diff --git a/assets/use_attribute_alias.md.DrXrL3FF.lean.js b/assets/use_attribute_alias.md.DrXrL3FF.lean.js new file mode 100644 index 000000000..153131d78 --- /dev/null +++ b/assets/use_attribute_alias.md.DrXrL3FF.lean.js @@ -0,0 +1,29 @@ +import{_ as a,c as n,a6 as i,o as e}from"./chunks/framework.B1keMFNq.js";const k=JSON.parse('{"title":"属性同义词","description":"","frontmatter":{"lang":"zh-cn","title":"属性同义词"},"headers":[],"relativePath":"use/attribute_alias.md","filePath":"use/attribute_alias.md","lastUpdated":1714442589000}'),p={name:"use/attribute_alias.md"};function l(t,s,c,o,d,h){return e(),n("div",null,s[0]||(s[0]=[i(`

    属性同义词

    本节内容

    本节将介绍海豹在 CoC 和 D&D 规则中默认使用的同义词。

    概念说明

    属性同义词是在录入和存储角色数据时,将若干个属性名视为同一个属性、互相可以替代使用。

    这一设计是为了解决下面这样的问题:(由于笔者的游戏栈,使用 CoC 举例)

    场景举例

    用户可能使用某些自动工具创建了一名调查员,由工具生成了录入数据的指令。这指令可能包含了类似这样的内容:

    text
    .st 力量50str50

    我们知道,「str」是「力量」属性的英文缩写法,它们完全指代的是同一属性。

    因此,我们期待这样的指令实际只录入一条属性,但是用户仍然可以用「力量」或「str」的任何一个名字使用这一属性。

    text
    $ .st 力量50str50
    +<木落>的属性录入完成,本次共记录了2条数据 (其中1条为同义词)
    +
    +# 实际上只有一条属性
    +$ .st show
    +<木落>的个人属性为:力量: 50
    +
    +# 可以用各种名字使用
    +$ .ra 力量
    +<木落>尝试使用"力量"技能:D100=64/50 失败
    +$ .ra STR
    +<木落>尝试使用"力量"技能:D100=78/50 失败
    +
    +# 可以用各种名字修改
    +$ .st str+10
    +<木落>的属性变化:
    +力量: 50 ➯ 60 (增加10=10)
    +$ .ra 力量
    +<木落>尝试使用"力量"技能:D100=90/60 失败

    类似地,在 CoC 中,「智力」与「灵感」是规则书规定的同一属性的两个名字。它们也被视为同义词。

    一些分支专精技能的名字,如「冲锋枪」,我们将「射击:冲锋枪」作为它的同义词,以适配尽量多的用法。

    我们在选择同义词时遵循以下几条原则:

    1. 规定的同义词等价,如 智力灵感教育知识
    2. 中文和英文缩写等价,如 力量str
    3. 同一概念的不同常用称呼等价,如 理智理智值,根据原则 2,sansan值 也指向同一属性;
    4. 日常用语中基本等价且易混淆的词汇等价,如 侦查侦察
    5. 不同版本规则之间的同一技能更换了用词,或翻译有变化,这些名字等价;如 CoC 6 版的 快速交谈 与 7 版的 话术;又如 7 版的 魅惑取悦
    6. 简体与繁体字等价,如 体质體質
    7. 在玩家中广泛使用的简称、别称与其正式名称等价,如 克苏鲁神话克苏鲁克苏鲁神话知识

    同义词表

    为了确保你不会获取到过时内容,我们决定不将列表放在手册中,敬请理解。

    这些同义词都是符合直觉的,你通常也无需专门查阅列表。如果你确实想了解,请参考以下内容。

    • CoC 规则的同义词,请自行理解 此源文件 的内容。

    • D&D 规则的同义词可在骰子启动后,在本地文件 data/default/extensions/dnd5e/attribute.yaml 中查看。

      这个文件遵守以下格式。其中,ac 位置上的名字是海豹核心选用的主要名字,后续列出的是它的同义词。

      yaml
      alias:
      +    ac:
      +        - AC
      +        - 护甲等级
      +        - 护甲值
      +        - 护甲
      +        - 護甲等級
      +        - 護甲值
      +        - 護甲
      +        - 装甲
      +        - 裝甲
    `,12)]))}const E=a(p,[["render",l]]);export{k as __pageData,E as default}; diff --git a/assets/use_coc7.md.ee9mbEM1.js b/assets/use_coc7.md.ee9mbEM1.js new file mode 100644 index 000000000..10eb43b52 --- /dev/null +++ b/assets/use_coc7.md.ee9mbEM1.js @@ -0,0 +1,36 @@ +import{_ as p,c as u,a6 as s,j as o,a as e,G as a,w as d,B as n,o as b}from"./chunks/framework.B1keMFNq.js";const $=JSON.parse('{"title":"克苏鲁的呼唤 7 版","description":"","frontmatter":{"lang":"zh-cn","title":"克苏鲁的呼唤 7 版"},"headers":[],"relativePath":"use/coc7.md","filePath":"use/coc7.md","lastUpdated":1728702230000}'),h={name:"use/coc7.md"},m={class:"info custom-block"},k={class:"info custom-block"},g={class:"info custom-block"},f={class:"info custom-block"},q={class:"info custom-block"},P={class:"info custom-block"},v={class:"info custom-block"},x={class:"info custom-block"},z={class:"info custom-block"},S={class:"info custom-block"},C={class:"info custom-block"},D={class:"info custom-block"},B={class:"info custom-block"},T={class:"info custom-block"};function N(y,t,A,K,L,w){const i=n("Badge"),l=n("ChatBox"),r=n("PluginTabsTab"),c=n("PluginTabs");return b(),u("div",null,[t[23]||(t[23]=s('

    克苏鲁的呼唤 7 版

    本节内容

    本节将展示 CoC 7th 玩家所需指令,请善用侧边栏和搜索,按需阅读文档。

    我们假定你已对 CoC 规则有适当了解,本节只涉及如何使用海豹核心完成规则中指定的操作。

    克苏鲁的呼唤

    「克苏鲁的呼唤」(Call of Cthulhu)是一个充满了秘密、神秘和恐怖的游戏。你将扮演一位坚定的侦探,奔波在奇怪而危险的场所之间,揭开邪恶的阴谋,对抗暗夜的恐怖。你将面对令人 SAN 值直葬(令人理智崩溃)的存在、怪物们,还有疯魔的邪教徒们。在被人遗忘的奇异书卷中,你会发现不应当为人类所知晓的秘密。

    .st 操作人物卡

    在克苏鲁的呼唤中,每位玩家都需要创造一位调查员。这是一群发掘深层秘密的人,这是一群搜索遗忘之地的人,这是一群用禁忌知识武装自己头脑,正面应对克苏鲁神话中那些毛骨悚然之物的人。

    此指令用来操作骰子程序模拟的人物卡。

    属性与技能

    由于属性和技能在检定时基本不做区分,表述时不以 <属性/技能> 的形式表明这里既可以使用技能名又可以使用属性名,而是统一使用 <属性> 来代指。

    .st help 获取帮助信息

    请以海豹核心最新帮助信息为准。列出几个常用功能供参考。

    列出属性

    .st show [<属性>]

    不提供参数则列出所有属性数值;提供属性名则列出特定属性数值。

    删除属性

    .st clr 删除所有属性数值;

    .st del <属性>... 删除指定属性。

    设定属性值

    .st <属性><表达式> <属性><表达式>...

    将指定属性设定为指定表达式的计算结果。如 .st 敏捷50 力量3d6*5

    ',18)),o("p",null,[t[0]||(t[0]=e("从 ")),a(i,{type:"tip",text:"v1.4.2"}),t[1]||(t[1]=e(" 开始,海豹核心兼容了简化卡格式 ")),t[2]||(t[2]=o("code",null,".st <角色名>-<属性><表达式>",-1)),t[3]||(t[3]=e(",这相当于分别使用 ")),t[4]||(t[4]=o("code",null,".nn",-1)),t[5]||(t[5]=e(" 指令设置角色名,然后设定属性值。"))]),t[24]||(t[24]=s('

    更新属性值

    .st <属性>±<表达式>

    将指定属性增加或减去表达式的计算结果。表达式中可以包含骰点。如 .st 敏捷+2 hp+1d3

    设定计算表达式

    .st &<属性>=<表达式>

    保存计算表达式,以更方便地计算某些固定骰点。例如

    ',6)),o("div",m,[t[6]||(t[6]=o("p",{class:"custom-block-title"},"示例",-1)),a(l,{messages:[{content:".st &手枪伤害=1d6+1",send:!0},{content:"<木落>的coc7属性录入完成,本次录入了1条数据"},{content:".r 手枪伤害",send:!0},{content:"<木落>掷出了 手枪伤害=[手枪伤害=5[1d6=5] + 1]=6"}]})]),t[25]||(t[25]=o("h3",{id:"导出属性值",tabindex:"-1"},[e("导出属性值 "),o("a",{class:"header-anchor",href:"#导出属性值","aria-label":'Permalink to "导出属性值"'},"​")],-1)),t[26]||(t[26]=o("p",null,[o("code",null,".st export")],-1)),t[27]||(t[27]=o("p",null,"将保存的属性数值以 st 指令格式列出,可以直接复制到其他骰子使用。",-1)),t[28]||(t[28]=o("h3",{id:"代骰",tabindex:"-1"},[e("代骰 "),o("a",{class:"header-anchor",href:"#代骰","aria-label":'Permalink to "代骰"'},"​")],-1)),t[29]||(t[29]=o("p",null,"以上功能均可以通过附加 @其他人 来操作对方的属性值。",-1)),o("div",k,[t[7]||(t[7]=o("p",{class:"custom-block-title"},"示例",-1)),a(l,{messages:[{content:".st 侦查80 @Szz",send:!0},{content:`由<木落>代骰: +的coc7属性录入完成,本次录入了1条数据`},{content:".st hp-1 @Szz",send:!0},{content:`由<木落>代骰: +的属性变化: +生命值: 10 ➯ 9 (扣除-1=-1)`},{content:".st show hp @Szz",send:!0},{content:`由<木落>代骰: +的个人属性为: +生命值:9/10`}]})]),t[30]||(t[30]=s('

    .ra/.rc 检定

    检定一词要与恰当的技能或属性一起使用;也就是说,比如说,守秘人会要求进行一个「攀爬检定」或一个「力量检定」。

    rc 还是 ra?

    rc 是规则书检定。而 ra 是房规检定。区别主要在于对大成功/大失败的判定方式。

    当房规设定为规则书标准(.setcoc 0)时,ra 和 rc 等价。

    进行检定

    .ra <属性表达式>

    使用指定的属性或技能进行检定。其中,属性可以被包含在表达式中进行调整。

    另外,直接指明技能名和数值,将以给出的数值进行检定。

    ',7)),o("div",g,[t[8]||(t[8]=o("p",{class:"custom-block-title"},"示例",-1)),t[9]||(t[9]=o("p",null,"假设角色的侦查技能是40",-1)),a(l,{messages:[{content:".ra 侦查",send:!0},{content:'<木落>的"侦查"检定结果为: D100=64/40 失败'},{content:".ra 侦查+10",send:!0},{content:'<木落>的"侦查"检定结果为: D100=15/50 困难成功'},{content:".ra 侦查99",send:!0},{content:'<木落>的"侦查"检定结果为: D100=30/99 困难成功'}]})]),t[31]||(t[31]=o("h3",{id:"多轮检定",tabindex:"-1"},[e("多轮检定 "),o("a",{class:"header-anchor",href:"#多轮检定","aria-label":'Permalink to "多轮检定"'},"​")],-1)),t[32]||(t[32]=o("p",null,[o("code",null,".ra <次数># <属性表达式>")],-1)),t[33]||(t[33]=o("p",null,"重复进行指定次数的相同检定。",-1)),o("div",f,[t[10]||(t[10]=o("p",{class:"custom-block-title"},"示例",-1)),a(l,{messages:[{content:".ra 3# 侦查",send:!0},{content:`对<木落>的"侦查"进行了3次检定,结果为: +D100=87/40 失败 +D100=24/40 成功 +D100=1/40 大成功`}]})]),t[34]||(t[34]=o("h3",{id:"要求一定难度的检定",tabindex:"-1"},[e("要求一定难度的检定 "),o("a",{class:"header-anchor",href:"#要求一定难度的检定","aria-label":'Permalink to "要求一定难度的检定"'},"​")],-1)),t[35]||(t[35]=o("p",null,[o("code",null,".ra <难度><属性表达式>")],-1)),t[36]||(t[36]=o("p",null,[e("进行检定,但只有成功等级达到要求的难度才判定为成功。可以指定的难度有 "),o("code",null,"困难"),e("(当前判定线的二分之一)、"),o("code",null,"极难"),e("(当前判定线的五分之一)、"),o("code",null,"大成功"),e("(根据当前房规确定)")],-1)),o("div",q,[t[11]||(t[11]=o("p",{class:"custom-block-title"},"示例",-1)),t[12]||(t[12]=o("p",null,"假设角色的侦查技能是40",-1)),a(l,{messages:[{content:".ra 困难侦查+10",send:!0},{content:'<木落>的"困难侦查+10"检定结果为: D100=30/25 失败'}]})]),t[37]||(t[37]=o("h3",{id:"奖励骰和惩罚骰",tabindex:"-1"},[e("奖励骰和惩罚骰 "),o("a",{class:"header-anchor",href:"#奖励骰和惩罚骰","aria-label":'Permalink to "奖励骰和惩罚骰"'},"​")],-1)),t[38]||(t[38]=o("p",null,[o("code",null,".ra (b|p)[<个数>] <属性表达式>")],-1)),t[39]||(t[39]=o("p",null,[e("进行检定,并且使用指定个数(如果不指定,为 1 个)的奖励骰("),o("code",null,"b"),e(")或惩罚骰("),o("code",null,"p"),e(")。")],-1)),o("div",P,[t[13]||(t[13]=o("p",{class:"custom-block-title"},"示例",-1)),a(l,{messages:[{content:".ra b2 侦查",send:!0},{content:'<木落>的"侦查"检定结果为: b2=1/40, ([D100=51, 奖励 0 2]) 大成功!'}]})]),t[40]||(t[40]=o("h3",{id:"代骰-1",tabindex:"-1"},[e("代骰 "),o("a",{class:"header-anchor",href:"#代骰-1","aria-label":'Permalink to "代骰"'},"​")],-1)),t[41]||(t[41]=o("p",null,[e("以上功能均可以通过附加 "),o("code",null,"@其他人"),e(" 来使用对方的技能进行检定。")],-1)),o("div",v,[t[14]||(t[14]=o("p",{class:"custom-block-title"},"示例",-1)),t[15]||(t[15]=o("p",null,"假定 Szz 的侦查技能是80",-1)),a(l,{messages:[{content:".ra 侦查 @Szz",send:!0},{content:`由<木落>代骰: +的"侦查"检定结果为: D100=65/80 成功`}]})]),t[42]||(t[42]=o("h3",{id:"以上功能可以组合使用",tabindex:"-1"},[e("以上功能可以组合使用 "),o("a",{class:"header-anchor",href:"#以上功能可以组合使用","aria-label":'Permalink to "以上功能可以组合使用"'},"​")],-1)),o("div",x,[t[16]||(t[16]=o("p",{class:"custom-block-title"},"示例",-1)),a(l,{messages:[{content:".ra 3# p 困难侦查+10 @Szz",send:!0},{content:`由<木落>代骰: +对的"困难侦查+10"进行了3次检定,结果为: +p=36/45, ([D100=16, 惩罚 3]) 成功 +p=91/45, ([D100=91, 惩罚 8]) 失败 +p=75/45, ([D100=5, 惩罚 7]) 失败`}]})]),t[43]||(t[43]=s('

    .rah/.rch 暗中检定

    .ra/.rc 功能相同。区别是,检定结果将不会发送到使用指令的群聊,而是私聊发送给指令发起者。

    为什么没有结果?

    暗中检定只在群聊中可用。

    由于要私聊发送检定结果,你可能需要先将骰子加为好友

    代骰

    此功能同样支持通过附加 @其他人 以使用对方的技能进行检定。

    一个较为常见的用法是,PL 要求使用心理学技能,由 KP 进行暗中代骰。

    ',6)),o("div",z,[t[17]||(t[17]=o("p",{class:"custom-block-title"},"示例",-1)),a(c,null,{default:d(()=>[a(r,{label:"跑团群"},{default:d(()=>[a(l,{messages:[{username:"PL",avatar:"user1",content:"我要对这个 NPC 使用心理学"},{username:"KP",avatar:"user3",content:"可以",send:!0},{username:"KP",avatar:"user3",content:".rah 心理学 @PL",send:!0},{content:`由代骰: +悄悄进行了一项心理学检定`}]})]),_:1}),a(r,{label:"KP 收到的私聊信息"},{default:d(()=>[a(l,{messages:[{content:`来自群<跑团群>(群号)的暗中检定: +的"心理学"检定结果为:D100=70/70 成功`}]})]),_:1})]),_:1})]),t[44]||(t[44]=s('

    .rav/.rcv 对抗检定

    有些情况,例如两位调查员相互对抗时,你会希望双方都进行掷骰来决出胜者。 此外,对抗检定也是近战的标准处理方式。

    在对抗检定中应用调整

    在对抗检定这一节中,所述的「属性表达式」除了使用 技能名技能名+指定数值 外,可以进行以下调整:

    1. 在前面附加难度等级,如 困难侦查
    2. 进行运算,如 侦查+10
    3. 在后面附加奖励骰与惩罚骰,如 侦查,b2

    使用相同技能对抗

    .rav <属性表达式> @对手

    自己与对手均使用相同属性/技能(如果有调整值,也相同应用)进行一次检定,然后比较成功等级。

    ',6)),o("div",S,[t[18]||(t[18]=o("p",{class:"custom-block-title"},"示例",-1)),a(l,{messages:[{content:".rav 侦查+10 @Szz",send:!0},{content:`对抗检定: +木落 侦查+10-> 属性值:35 判定值:3 极难成功 +Szz 侦查+10-> 属性值:90 判定值:23 困难成功 +木落胜出!`}]})]),t[45]||(t[45]=o("h3",{id:"使用不同技能对抗",tabindex:"-1"},[e("使用不同技能对抗 "),o("a",{class:"header-anchor",href:"#使用不同技能对抗","aria-label":'Permalink to "使用不同技能对抗"'},"​")],-1)),t[46]||(t[46]=o("p",null,[o("code",null,".rav <自己的属性表达式> <对手的属性表达式> @对手")],-1)),t[47]||(t[47]=o("p",null,"使用自己的一个属性/技能对抗对手的另一属性/技能,或者相同属性/技能应用不同调整值。",-1)),o("div",C,[t[19]||(t[19]=o("p",{class:"custom-block-title"},"示例",-1)),a(l,{messages:[{content:".rav 潜行,b 侦查 @Szz",send:!0},{content:`对抗检定: +木落 潜行-> 属性值:20 判定值:7[[D100=97, 奖励 0]] 困难成功 +Szz 侦查-> 属性值:80 判定值:28 困难成功 +平手!请自行根据场景(如属性比较、攻击对反击,攻击对闪避)做出判断`}]})]),t[48]||(t[48]=s('

    指定两个其他人对抗

    通过 at 两个其他玩家,可用让 TA 们进行对抗,而不包括自己。

    .rav <共用属性表达式> @A @B

    .rav <A属性表达式> <B属性表达式> @A @B

    .sc 理智检定

    在令人不安或恐怖的情景中,守秘人将考验调查员的心智。这会要求场景中每位调查员进行一次理智检定。在较短的时间内失去过多理智值,会使调查员陷入临时性或不定性疯狂。

    指定损失的理智

    .sc <成功时理智损失>/<失败时理智损失>

    其中,理智损失均可以是包含骰点的表达式。

    ',9)),o("div",D,[t[20]||(t[20]=o("p",{class:"custom-block-title"},"示例",-1)),a(l,{messages:[{content:".sc 1/1D4+1",send:!0},{content:`<木落>的理智检定: +d100=9/60 极难成功 +理智变化: 60 ➯ 59 (扣除1=1点)`}]})]),t[49]||(t[49]=s('

    简略写法

    .sc <失败时理智损失>(完全等价于 .sc 0/<失败时理智损失>

    如果检定成功时不失去理智,可以只指定失败时的理智损失。

    奖励骰和惩罚骰

    .sc (b|p)[<数量>] <成功时理智损失>/<失败时理智损失>

    在进行理智检定时使用指定数量的奖励骰或惩罚骰。

    代骰

    此指令支持附加 @其他人,使目标进行指定的理智检定。

    ',8)),o("div",B,[t[21]||(t[21]=o("p",{class:"custom-block-title"},"示例",-1)),a(l,{messages:[{content:".sc 0/1 @Szz",send:!0},{content:`由<木落>代骰: +的理智检定: +d100=82/60 失败! +理智变化: 60 ➯ 59 (扣除1=1点)`}]})]),t[50]||(t[50]=s('

    .ti/.li 疯狂发作症状

    在《克苏鲁的呼唤》中,与克苏鲁神话相关的痛苦经历和可怖领悟都会诱发疯狂。

    疯狂状态的持续时间取决于失去的理智值的数量和比例。

    ti 还是 li?

    通常的疯狂发作应该使用 ti 抽取即时症状

    但是,如果疯狂发作时调查员周围没有其他调查员陪伴,或在场的所有调查员同时疯狂发作, 则守秘人可以快速推进行动,只陈述结果。这被称为疯狂发作的总结症状。使用 li 来抽取。

    .ti

    使用该指令以抽取疯狂发作的即时症状与发作时间。如果抽到的是恐惧症与躁狂症,也会同时抽取具体条目。

    .li

    使用该指令以抽取疯狂发作的总结症状与消耗时间。如果抽到的是恐惧症与躁狂症,也会同时抽取具体条目。

    .en 技能成长

    当调查员在游戏中成功使用了技能,玩家应该勾上角色卡上该技能旁的方框。这提供了调查员从经验中学习的机会。

    • 若使用了奖励骰则不能获得技能成长标记。
    • 对于对抗检定,双方可能都实现某种程度的成功,但只有一方获胜,也只有胜者可以获得技能成长标记。

    进行技能成长

    .en <技能名称> [<更多技能名称>...]

    对指定的技能分别进行一次成长检定。

    相同技能不能被反复列出。如果需要对一个技能进行多次成长,请多次使用成长指令。

    text
    .en 侦查 聆听 图书馆使用

    .en <技能名称><技能点数>

    也可以强制指定一个技能的数值。注意,不论成功与否,这都将使用新的技能值覆盖现有的技能值。

    指定成长值

    .en <技能名称>[<技能点数>] +<失败成长值>/<成功成长值>

    指定当成长检定成功与失败时的技能成长点数。两个点数都可以是包含骰点的表达式。

    .en <技能名称>[<技能点数>] +<成功成长值>

    如果检定失败时成长为 0,也可以略去不写。

    指定的成长值

    指定值前面的加号 + 是必须的。

    成长值可以是负数,如果命中,则会失去相应的技能点数。

    .coc 生成随机属性(制卡)

    .coc [<数量>]

    随机生成指定数量的调查员属性。如果省略数量,将生成 1 个。生成的属性包括 8 项基础属性与幸运,同时会计算 HP 点数。

    此外,也会计算属性的总值供用户参考。总值包括两个,其一是 8 项基础属性的总值,其二是前者与幸运的总值。

    ',26)),o("div",T,[t[22]||(t[22]=o("p",{class:"custom-block-title"},"示例",-1)),a(l,{messages:[{content:".coc 2",send:!0},{content:`<木落>的七版COC人物作成: +力量:65 敏捷:80 意志:55 +体质:50 外貌:45 教育:90 +体型:70 智力:75 +HP:12 幸运:45 [530/575] + +力量:40 敏捷:60 意志:65 +体质:60 外貌:75 教育:60 +体型:50 智力:75 +HP:11 幸运:55 [485/540]`}]})]),t[51]||(t[51]=s('

    .setcoc 设置房规

    改变海豹核心判定大成功与大失败的方式。

    显示当前房规

    .setcoc

    不加参数的使用,即显示当前设定的房规。

    列出可用房规

    .setcoc details

    列出所有内置或通过扩展加入的房规。海豹核心内置的房规列出如下:

    序号规则
    0(默认)出 1 大成功,不满 50 出 96-100 大失败,满 50 出 100 大失败 (CoC7th 规则书)
    1不满 50 出 1 大成功,不满 50 出 96-100 大失败,满 50 出 100 大失败
    2(常用)出 1-5 且判定成功为大成功,出 96-100 且判定失败为大失败
    3出 1-5 大成功,出 96-100 大失败 (即大成功/大失败时无视判定结果)
    4出 1-5 且≤(成功率/10) 为大成功,不满 50 出>=96+(成功率/10) 为大失败,满 50 出 100 大失败
    5出 1-2 且≤(成功率/5) 为大成功,不满 50 出 96-100 大失败,满 50 出 99-100 大失败
    dg出 1 或检定成功基础上个位十位相同为大成功,出 100 或检定失败基础上个位十位相同为大失败,此规则无困难成功或极难成功

    设定房规

    .setcoc <房规序号>

    使用指定的房规。

    ',12))])}const H=p(h,[["render",N]]);export{$ as __pageData,H as default}; diff --git a/assets/use_coc7.md.ee9mbEM1.lean.js b/assets/use_coc7.md.ee9mbEM1.lean.js new file mode 100644 index 000000000..10eb43b52 --- /dev/null +++ b/assets/use_coc7.md.ee9mbEM1.lean.js @@ -0,0 +1,36 @@ +import{_ as p,c as u,a6 as s,j as o,a as e,G as a,w as d,B as n,o as b}from"./chunks/framework.B1keMFNq.js";const $=JSON.parse('{"title":"克苏鲁的呼唤 7 版","description":"","frontmatter":{"lang":"zh-cn","title":"克苏鲁的呼唤 7 版"},"headers":[],"relativePath":"use/coc7.md","filePath":"use/coc7.md","lastUpdated":1728702230000}'),h={name:"use/coc7.md"},m={class:"info custom-block"},k={class:"info custom-block"},g={class:"info custom-block"},f={class:"info custom-block"},q={class:"info custom-block"},P={class:"info custom-block"},v={class:"info custom-block"},x={class:"info custom-block"},z={class:"info custom-block"},S={class:"info custom-block"},C={class:"info custom-block"},D={class:"info custom-block"},B={class:"info custom-block"},T={class:"info custom-block"};function N(y,t,A,K,L,w){const i=n("Badge"),l=n("ChatBox"),r=n("PluginTabsTab"),c=n("PluginTabs");return b(),u("div",null,[t[23]||(t[23]=s('

    克苏鲁的呼唤 7 版

    本节内容

    本节将展示 CoC 7th 玩家所需指令,请善用侧边栏和搜索,按需阅读文档。

    我们假定你已对 CoC 规则有适当了解,本节只涉及如何使用海豹核心完成规则中指定的操作。

    克苏鲁的呼唤

    「克苏鲁的呼唤」(Call of Cthulhu)是一个充满了秘密、神秘和恐怖的游戏。你将扮演一位坚定的侦探,奔波在奇怪而危险的场所之间,揭开邪恶的阴谋,对抗暗夜的恐怖。你将面对令人 SAN 值直葬(令人理智崩溃)的存在、怪物们,还有疯魔的邪教徒们。在被人遗忘的奇异书卷中,你会发现不应当为人类所知晓的秘密。

    .st 操作人物卡

    在克苏鲁的呼唤中,每位玩家都需要创造一位调查员。这是一群发掘深层秘密的人,这是一群搜索遗忘之地的人,这是一群用禁忌知识武装自己头脑,正面应对克苏鲁神话中那些毛骨悚然之物的人。

    此指令用来操作骰子程序模拟的人物卡。

    属性与技能

    由于属性和技能在检定时基本不做区分,表述时不以 <属性/技能> 的形式表明这里既可以使用技能名又可以使用属性名,而是统一使用 <属性> 来代指。

    .st help 获取帮助信息

    请以海豹核心最新帮助信息为准。列出几个常用功能供参考。

    列出属性

    .st show [<属性>]

    不提供参数则列出所有属性数值;提供属性名则列出特定属性数值。

    删除属性

    .st clr 删除所有属性数值;

    .st del <属性>... 删除指定属性。

    设定属性值

    .st <属性><表达式> <属性><表达式>...

    将指定属性设定为指定表达式的计算结果。如 .st 敏捷50 力量3d6*5

    ',18)),o("p",null,[t[0]||(t[0]=e("从 ")),a(i,{type:"tip",text:"v1.4.2"}),t[1]||(t[1]=e(" 开始,海豹核心兼容了简化卡格式 ")),t[2]||(t[2]=o("code",null,".st <角色名>-<属性><表达式>",-1)),t[3]||(t[3]=e(",这相当于分别使用 ")),t[4]||(t[4]=o("code",null,".nn",-1)),t[5]||(t[5]=e(" 指令设置角色名,然后设定属性值。"))]),t[24]||(t[24]=s('

    更新属性值

    .st <属性>±<表达式>

    将指定属性增加或减去表达式的计算结果。表达式中可以包含骰点。如 .st 敏捷+2 hp+1d3

    设定计算表达式

    .st &<属性>=<表达式>

    保存计算表达式,以更方便地计算某些固定骰点。例如

    ',6)),o("div",m,[t[6]||(t[6]=o("p",{class:"custom-block-title"},"示例",-1)),a(l,{messages:[{content:".st &手枪伤害=1d6+1",send:!0},{content:"<木落>的coc7属性录入完成,本次录入了1条数据"},{content:".r 手枪伤害",send:!0},{content:"<木落>掷出了 手枪伤害=[手枪伤害=5[1d6=5] + 1]=6"}]})]),t[25]||(t[25]=o("h3",{id:"导出属性值",tabindex:"-1"},[e("导出属性值 "),o("a",{class:"header-anchor",href:"#导出属性值","aria-label":'Permalink to "导出属性值"'},"​")],-1)),t[26]||(t[26]=o("p",null,[o("code",null,".st export")],-1)),t[27]||(t[27]=o("p",null,"将保存的属性数值以 st 指令格式列出,可以直接复制到其他骰子使用。",-1)),t[28]||(t[28]=o("h3",{id:"代骰",tabindex:"-1"},[e("代骰 "),o("a",{class:"header-anchor",href:"#代骰","aria-label":'Permalink to "代骰"'},"​")],-1)),t[29]||(t[29]=o("p",null,"以上功能均可以通过附加 @其他人 来操作对方的属性值。",-1)),o("div",k,[t[7]||(t[7]=o("p",{class:"custom-block-title"},"示例",-1)),a(l,{messages:[{content:".st 侦查80 @Szz",send:!0},{content:`由<木落>代骰: +的coc7属性录入完成,本次录入了1条数据`},{content:".st hp-1 @Szz",send:!0},{content:`由<木落>代骰: +的属性变化: +生命值: 10 ➯ 9 (扣除-1=-1)`},{content:".st show hp @Szz",send:!0},{content:`由<木落>代骰: +的个人属性为: +生命值:9/10`}]})]),t[30]||(t[30]=s('

    .ra/.rc 检定

    检定一词要与恰当的技能或属性一起使用;也就是说,比如说,守秘人会要求进行一个「攀爬检定」或一个「力量检定」。

    rc 还是 ra?

    rc 是规则书检定。而 ra 是房规检定。区别主要在于对大成功/大失败的判定方式。

    当房规设定为规则书标准(.setcoc 0)时,ra 和 rc 等价。

    进行检定

    .ra <属性表达式>

    使用指定的属性或技能进行检定。其中,属性可以被包含在表达式中进行调整。

    另外,直接指明技能名和数值,将以给出的数值进行检定。

    ',7)),o("div",g,[t[8]||(t[8]=o("p",{class:"custom-block-title"},"示例",-1)),t[9]||(t[9]=o("p",null,"假设角色的侦查技能是40",-1)),a(l,{messages:[{content:".ra 侦查",send:!0},{content:'<木落>的"侦查"检定结果为: D100=64/40 失败'},{content:".ra 侦查+10",send:!0},{content:'<木落>的"侦查"检定结果为: D100=15/50 困难成功'},{content:".ra 侦查99",send:!0},{content:'<木落>的"侦查"检定结果为: D100=30/99 困难成功'}]})]),t[31]||(t[31]=o("h3",{id:"多轮检定",tabindex:"-1"},[e("多轮检定 "),o("a",{class:"header-anchor",href:"#多轮检定","aria-label":'Permalink to "多轮检定"'},"​")],-1)),t[32]||(t[32]=o("p",null,[o("code",null,".ra <次数># <属性表达式>")],-1)),t[33]||(t[33]=o("p",null,"重复进行指定次数的相同检定。",-1)),o("div",f,[t[10]||(t[10]=o("p",{class:"custom-block-title"},"示例",-1)),a(l,{messages:[{content:".ra 3# 侦查",send:!0},{content:`对<木落>的"侦查"进行了3次检定,结果为: +D100=87/40 失败 +D100=24/40 成功 +D100=1/40 大成功`}]})]),t[34]||(t[34]=o("h3",{id:"要求一定难度的检定",tabindex:"-1"},[e("要求一定难度的检定 "),o("a",{class:"header-anchor",href:"#要求一定难度的检定","aria-label":'Permalink to "要求一定难度的检定"'},"​")],-1)),t[35]||(t[35]=o("p",null,[o("code",null,".ra <难度><属性表达式>")],-1)),t[36]||(t[36]=o("p",null,[e("进行检定,但只有成功等级达到要求的难度才判定为成功。可以指定的难度有 "),o("code",null,"困难"),e("(当前判定线的二分之一)、"),o("code",null,"极难"),e("(当前判定线的五分之一)、"),o("code",null,"大成功"),e("(根据当前房规确定)")],-1)),o("div",q,[t[11]||(t[11]=o("p",{class:"custom-block-title"},"示例",-1)),t[12]||(t[12]=o("p",null,"假设角色的侦查技能是40",-1)),a(l,{messages:[{content:".ra 困难侦查+10",send:!0},{content:'<木落>的"困难侦查+10"检定结果为: D100=30/25 失败'}]})]),t[37]||(t[37]=o("h3",{id:"奖励骰和惩罚骰",tabindex:"-1"},[e("奖励骰和惩罚骰 "),o("a",{class:"header-anchor",href:"#奖励骰和惩罚骰","aria-label":'Permalink to "奖励骰和惩罚骰"'},"​")],-1)),t[38]||(t[38]=o("p",null,[o("code",null,".ra (b|p)[<个数>] <属性表达式>")],-1)),t[39]||(t[39]=o("p",null,[e("进行检定,并且使用指定个数(如果不指定,为 1 个)的奖励骰("),o("code",null,"b"),e(")或惩罚骰("),o("code",null,"p"),e(")。")],-1)),o("div",P,[t[13]||(t[13]=o("p",{class:"custom-block-title"},"示例",-1)),a(l,{messages:[{content:".ra b2 侦查",send:!0},{content:'<木落>的"侦查"检定结果为: b2=1/40, ([D100=51, 奖励 0 2]) 大成功!'}]})]),t[40]||(t[40]=o("h3",{id:"代骰-1",tabindex:"-1"},[e("代骰 "),o("a",{class:"header-anchor",href:"#代骰-1","aria-label":'Permalink to "代骰"'},"​")],-1)),t[41]||(t[41]=o("p",null,[e("以上功能均可以通过附加 "),o("code",null,"@其他人"),e(" 来使用对方的技能进行检定。")],-1)),o("div",v,[t[14]||(t[14]=o("p",{class:"custom-block-title"},"示例",-1)),t[15]||(t[15]=o("p",null,"假定 Szz 的侦查技能是80",-1)),a(l,{messages:[{content:".ra 侦查 @Szz",send:!0},{content:`由<木落>代骰: +的"侦查"检定结果为: D100=65/80 成功`}]})]),t[42]||(t[42]=o("h3",{id:"以上功能可以组合使用",tabindex:"-1"},[e("以上功能可以组合使用 "),o("a",{class:"header-anchor",href:"#以上功能可以组合使用","aria-label":'Permalink to "以上功能可以组合使用"'},"​")],-1)),o("div",x,[t[16]||(t[16]=o("p",{class:"custom-block-title"},"示例",-1)),a(l,{messages:[{content:".ra 3# p 困难侦查+10 @Szz",send:!0},{content:`由<木落>代骰: +对的"困难侦查+10"进行了3次检定,结果为: +p=36/45, ([D100=16, 惩罚 3]) 成功 +p=91/45, ([D100=91, 惩罚 8]) 失败 +p=75/45, ([D100=5, 惩罚 7]) 失败`}]})]),t[43]||(t[43]=s('

    .rah/.rch 暗中检定

    .ra/.rc 功能相同。区别是,检定结果将不会发送到使用指令的群聊,而是私聊发送给指令发起者。

    为什么没有结果?

    暗中检定只在群聊中可用。

    由于要私聊发送检定结果,你可能需要先将骰子加为好友

    代骰

    此功能同样支持通过附加 @其他人 以使用对方的技能进行检定。

    一个较为常见的用法是,PL 要求使用心理学技能,由 KP 进行暗中代骰。

    ',6)),o("div",z,[t[17]||(t[17]=o("p",{class:"custom-block-title"},"示例",-1)),a(c,null,{default:d(()=>[a(r,{label:"跑团群"},{default:d(()=>[a(l,{messages:[{username:"PL",avatar:"user1",content:"我要对这个 NPC 使用心理学"},{username:"KP",avatar:"user3",content:"可以",send:!0},{username:"KP",avatar:"user3",content:".rah 心理学 @PL",send:!0},{content:`由代骰: +悄悄进行了一项心理学检定`}]})]),_:1}),a(r,{label:"KP 收到的私聊信息"},{default:d(()=>[a(l,{messages:[{content:`来自群<跑团群>(群号)的暗中检定: +的"心理学"检定结果为:D100=70/70 成功`}]})]),_:1})]),_:1})]),t[44]||(t[44]=s('

    .rav/.rcv 对抗检定

    有些情况,例如两位调查员相互对抗时,你会希望双方都进行掷骰来决出胜者。 此外,对抗检定也是近战的标准处理方式。

    在对抗检定中应用调整

    在对抗检定这一节中,所述的「属性表达式」除了使用 技能名技能名+指定数值 外,可以进行以下调整:

    1. 在前面附加难度等级,如 困难侦查
    2. 进行运算,如 侦查+10
    3. 在后面附加奖励骰与惩罚骰,如 侦查,b2

    使用相同技能对抗

    .rav <属性表达式> @对手

    自己与对手均使用相同属性/技能(如果有调整值,也相同应用)进行一次检定,然后比较成功等级。

    ',6)),o("div",S,[t[18]||(t[18]=o("p",{class:"custom-block-title"},"示例",-1)),a(l,{messages:[{content:".rav 侦查+10 @Szz",send:!0},{content:`对抗检定: +木落 侦查+10-> 属性值:35 判定值:3 极难成功 +Szz 侦查+10-> 属性值:90 判定值:23 困难成功 +木落胜出!`}]})]),t[45]||(t[45]=o("h3",{id:"使用不同技能对抗",tabindex:"-1"},[e("使用不同技能对抗 "),o("a",{class:"header-anchor",href:"#使用不同技能对抗","aria-label":'Permalink to "使用不同技能对抗"'},"​")],-1)),t[46]||(t[46]=o("p",null,[o("code",null,".rav <自己的属性表达式> <对手的属性表达式> @对手")],-1)),t[47]||(t[47]=o("p",null,"使用自己的一个属性/技能对抗对手的另一属性/技能,或者相同属性/技能应用不同调整值。",-1)),o("div",C,[t[19]||(t[19]=o("p",{class:"custom-block-title"},"示例",-1)),a(l,{messages:[{content:".rav 潜行,b 侦查 @Szz",send:!0},{content:`对抗检定: +木落 潜行-> 属性值:20 判定值:7[[D100=97, 奖励 0]] 困难成功 +Szz 侦查-> 属性值:80 判定值:28 困难成功 +平手!请自行根据场景(如属性比较、攻击对反击,攻击对闪避)做出判断`}]})]),t[48]||(t[48]=s('

    指定两个其他人对抗

    通过 at 两个其他玩家,可用让 TA 们进行对抗,而不包括自己。

    .rav <共用属性表达式> @A @B

    .rav <A属性表达式> <B属性表达式> @A @B

    .sc 理智检定

    在令人不安或恐怖的情景中,守秘人将考验调查员的心智。这会要求场景中每位调查员进行一次理智检定。在较短的时间内失去过多理智值,会使调查员陷入临时性或不定性疯狂。

    指定损失的理智

    .sc <成功时理智损失>/<失败时理智损失>

    其中,理智损失均可以是包含骰点的表达式。

    ',9)),o("div",D,[t[20]||(t[20]=o("p",{class:"custom-block-title"},"示例",-1)),a(l,{messages:[{content:".sc 1/1D4+1",send:!0},{content:`<木落>的理智检定: +d100=9/60 极难成功 +理智变化: 60 ➯ 59 (扣除1=1点)`}]})]),t[49]||(t[49]=s('

    简略写法

    .sc <失败时理智损失>(完全等价于 .sc 0/<失败时理智损失>

    如果检定成功时不失去理智,可以只指定失败时的理智损失。

    奖励骰和惩罚骰

    .sc (b|p)[<数量>] <成功时理智损失>/<失败时理智损失>

    在进行理智检定时使用指定数量的奖励骰或惩罚骰。

    代骰

    此指令支持附加 @其他人,使目标进行指定的理智检定。

    ',8)),o("div",B,[t[21]||(t[21]=o("p",{class:"custom-block-title"},"示例",-1)),a(l,{messages:[{content:".sc 0/1 @Szz",send:!0},{content:`由<木落>代骰: +的理智检定: +d100=82/60 失败! +理智变化: 60 ➯ 59 (扣除1=1点)`}]})]),t[50]||(t[50]=s('

    .ti/.li 疯狂发作症状

    在《克苏鲁的呼唤》中,与克苏鲁神话相关的痛苦经历和可怖领悟都会诱发疯狂。

    疯狂状态的持续时间取决于失去的理智值的数量和比例。

    ti 还是 li?

    通常的疯狂发作应该使用 ti 抽取即时症状

    但是,如果疯狂发作时调查员周围没有其他调查员陪伴,或在场的所有调查员同时疯狂发作, 则守秘人可以快速推进行动,只陈述结果。这被称为疯狂发作的总结症状。使用 li 来抽取。

    .ti

    使用该指令以抽取疯狂发作的即时症状与发作时间。如果抽到的是恐惧症与躁狂症,也会同时抽取具体条目。

    .li

    使用该指令以抽取疯狂发作的总结症状与消耗时间。如果抽到的是恐惧症与躁狂症,也会同时抽取具体条目。

    .en 技能成长

    当调查员在游戏中成功使用了技能,玩家应该勾上角色卡上该技能旁的方框。这提供了调查员从经验中学习的机会。

    • 若使用了奖励骰则不能获得技能成长标记。
    • 对于对抗检定,双方可能都实现某种程度的成功,但只有一方获胜,也只有胜者可以获得技能成长标记。

    进行技能成长

    .en <技能名称> [<更多技能名称>...]

    对指定的技能分别进行一次成长检定。

    相同技能不能被反复列出。如果需要对一个技能进行多次成长,请多次使用成长指令。

    text
    .en 侦查 聆听 图书馆使用

    .en <技能名称><技能点数>

    也可以强制指定一个技能的数值。注意,不论成功与否,这都将使用新的技能值覆盖现有的技能值。

    指定成长值

    .en <技能名称>[<技能点数>] +<失败成长值>/<成功成长值>

    指定当成长检定成功与失败时的技能成长点数。两个点数都可以是包含骰点的表达式。

    .en <技能名称>[<技能点数>] +<成功成长值>

    如果检定失败时成长为 0,也可以略去不写。

    指定的成长值

    指定值前面的加号 + 是必须的。

    成长值可以是负数,如果命中,则会失去相应的技能点数。

    .coc 生成随机属性(制卡)

    .coc [<数量>]

    随机生成指定数量的调查员属性。如果省略数量,将生成 1 个。生成的属性包括 8 项基础属性与幸运,同时会计算 HP 点数。

    此外,也会计算属性的总值供用户参考。总值包括两个,其一是 8 项基础属性的总值,其二是前者与幸运的总值。

    ',26)),o("div",T,[t[22]||(t[22]=o("p",{class:"custom-block-title"},"示例",-1)),a(l,{messages:[{content:".coc 2",send:!0},{content:`<木落>的七版COC人物作成: +力量:65 敏捷:80 意志:55 +体质:50 外貌:45 教育:90 +体型:70 智力:75 +HP:12 幸运:45 [530/575] + +力量:40 敏捷:60 意志:65 +体质:60 外貌:75 教育:60 +体型:50 智力:75 +HP:11 幸运:55 [485/540]`}]})]),t[51]||(t[51]=s('

    .setcoc 设置房规

    改变海豹核心判定大成功与大失败的方式。

    显示当前房规

    .setcoc

    不加参数的使用,即显示当前设定的房规。

    列出可用房规

    .setcoc details

    列出所有内置或通过扩展加入的房规。海豹核心内置的房规列出如下:

    序号规则
    0(默认)出 1 大成功,不满 50 出 96-100 大失败,满 50 出 100 大失败 (CoC7th 规则书)
    1不满 50 出 1 大成功,不满 50 出 96-100 大失败,满 50 出 100 大失败
    2(常用)出 1-5 且判定成功为大成功,出 96-100 且判定失败为大失败
    3出 1-5 大成功,出 96-100 大失败 (即大成功/大失败时无视判定结果)
    4出 1-5 且≤(成功率/10) 为大成功,不满 50 出>=96+(成功率/10) 为大失败,满 50 出 100 大失败
    5出 1-2 且≤(成功率/5) 为大成功,不满 50 出 96-100 大失败,满 50 出 99-100 大失败
    dg出 1 或检定成功基础上个位十位相同为大成功,出 100 或检定失败基础上个位十位相同为大失败,此规则无困难成功或极难成功

    设定房规

    .setcoc <房规序号>

    使用指定的房规。

    ',12))])}const H=p(h,[["render",N]]);export{$ as __pageData,H as default}; diff --git a/assets/use_core.md.C2uANgf3.js b/assets/use_core.md.C2uANgf3.js new file mode 100644 index 000000000..1cde73008 --- /dev/null +++ b/assets/use_core.md.C2uANgf3.js @@ -0,0 +1,47 @@ +import{_ as i,c as u,a6 as s,j as e,G as o,a as n,w as l,B as a,o as b}from"./chunks/framework.B1keMFNq.js";const G=JSON.parse('{"title":"核心指令","description":"","frontmatter":{"lang":"zh-cn","title":"核心指令"},"headers":[],"relativePath":"use/core.md","filePath":"use/core.md","lastUpdated":1728702230000}'),m={name:"use/core.md"},g={class:"info custom-block"},f={class:"info custom-block"},k={class:"info custom-block"},x={class:"info custom-block"},v={class:"info custom-block"},h={class:"info custom-block"},q={class:"info custom-block"},P={class:"info custom-block"},D={class:"info custom-block"},C={class:"info custom-block"},I={class:"info custom-block"},A={class:"info custom-block"},B={class:"info custom-block"},M={class:"info custom-block"},y={class:"info custom-block"},T={class:"info custom-block"},N={class:"info custom-block"},O={class:"info custom-block"},Y={id:"指定默认查询分组",tabindex:"-1"},w={class:"info custom-block"},W={class:"info custom-block"},Z={class:"info custom-block"},S={class:"info custom-block"},U={class:"info custom-block"};function X(z,t,Q,V,$,j){const d=a("ChatBox"),r=a("PluginTabsTab"),c=a("PluginTabs"),p=a("Badge");return b(),u("div",null,[t[34]||(t[34]=s('

    核心指令

    本节内容

    本节将介绍海豹核心的核心指令。

    核心指令是无法被关闭的指令。与之相对的概念是扩展指令,扩展指令可以被关闭。

    .master 骰主指令

    此指令只能由具有 Master 权限的用户使用。

    .master add @A 为 A 添加 Master 权限。

    .master del @A 移除 A 的 Master 权限。

    .master list 查看当前 Master 权限列表。

    .master relogin 30 秒后重新登录,有可能使骰子失联。

    .master reboot 重新启动海豹核心(需要二次确认)。

    .master checkupdate 检查并进行远程更新(需要二次确认)。

    .master unlock <解锁码> 清空 Master 权限列表,并给自己重新添加 Master 权限。

    .master backup 做一次备份。

    .master reload (deck|js|helpdoc) 重新加载牌堆/js/帮助文档。

    .master quitgroup <群组 ID> [<理由>] 从指定群组中退出,必须在同一平台使用。

    注意:保护好你的骰子

    我们认为,拥有海豹核心的最终判定方式是可以接触到 WebUI。因此,该解锁码仅能通过 WebUI 的「综合设置 - 基本设置」获取。

    你可以将 Master 权限授予若干位维护人员。但是,确保只有你完全信任的人能够接触到你骰子的 WebUI 与本地文件。

    如果你的 WebUI 可以通过公开互联网访问,确保你设置了合适的密码。

    .ban 黑白名单指令

    注意:统一 ID

    在海豹核心的指令和后台设置中,你会经常用到统一 ID。这是海豹核心用于标识不同平台的用户和群组的通用格式。对于每个用户,其形式为 平台:序列号;对于群组,其形式为 平台-Group:序列号

    使用 .userid 指令查看自己和所在群聊的统一 ID。

    在 QQ 平台,序列号即为 QQ 号与群号。

    此指令只能由具有 Master 权限的用户使用。

    .ban help 查看帮助。

    .ban add <统一 ID> [<原因>] 使用统一 ID,将指定用户拉入黑名单,理由可不填。

    .ban trust <统一 ID> 使用统一 ID,将指定用户添加至信任列表。

    .ban rm <统一 ID> 使用统一 ID,将指定用户移出黑名单/信任列表。

    .ban list 展示列表。

    .ban list (ban|warn|trust) 只显示被禁用/被警告/信任用户。

    .ban query <统一 ID> 查看指定用户黑白名单情况。

    .bot 骰子管理

    你必须 AT 骰子账号,才能使用 bot 命令。为了简单,在以下示例中略去 AT 的部分。

    ',27)),e("div",g,[t[0]||(t[0]=e("p",{class:"custom-block-title"},"示例",-1)),o(d,{messages:[{content:".bot on",send:!0},{content:"<海豹bot> 已启用 SealDice <版本号>"},{content:".bot off",send:!0},{content:"<海豹bot> 停止服务"},{content:".bot bye",send:!0},{content:"收到指令,5s后将退出当前群组"},{content:".bot",send:!0},{content:"SealDice <版本号>"}]})]),t[35]||(t[35]=s('

    .ext 扩展管理

    除了本节所述的「核心指令」之外,海豹的其他功能都作为「扩展」提供。每一个扩展提供若干指令和其他功能,并可以单独开关。你可在每个群聊中启用不同的扩展。

    .ext list 查看扩展列表和开启情况。

    .ext <扩展名> 查询指定扩展的信息。

    .ext <扩展名> (on|off) 开启、关闭指定扩展。

    目前,海豹提供 7 个内置扩展,它们的详细信息在本章的后续内容中逐一介绍。同时,海豹核心也支持通过装载 JavaScript 脚本添加第三方扩展。

    ',6)),e("div",f,[t[1]||(t[1]=e("p",{class:"custom-block-title"},"示例",-1)),o(d,{messages:[{content:".ext",send:!0},{content:`检测到以下扩展: +1. [开]coc7 - 版本:1.0.0 作者:木落 +2. [开]log - 版本:1.0.0 作者:木落 +3. [开]fun - 版本:1.0.0 作者:木落 +4. [开]deck - 版本:1.0.0 作者:木落 +5. [关]reply - 版本:1.0.0 作者:木落 +6. [开]dnd5e - 版本:1.0.0 作者:木落 +7. [开]story - 版本:1.0.0 作者:木落 +使用命令: .ext <扩展名> on/off 可以在当前群开启或关闭某扩展。 +命令: .ext <扩展名> 可以查看扩展介绍及帮助`},{content:".ext coc7 on",send:!0},{content:"打开扩展 coc7"},{content:".ext reply",send:!0},{content:`> [reply] 版本1.2.0 作者木落 +> 自定义回复模块,支持各种文本匹配和简易脚本`},{content:".ext reply off",send:!0},{content:"关闭扩展 reply"}]})]),t[36]||(t[36]=s('

    可以在 UI 界面中「综合设置 - 基本设置」的最底下,设置各个扩展及其指令的默认开启状态。

    .set 骰子面数管理

    海豹默认骰子面数为100,你可以通过以下指令在 coc/dnd 规则中切换,更多规则请看其它规则支持

    .set info 查看当前面数设置。

    .set <面数> 设置群内骰子面数。

    .set dnd 设置群内骰子面数为20,并自动开启对应扩展。

    .set (coc|coc7) 设置群内骰子面数为100,并自动开启对应扩展。

    .set clr 清除群内骰子面数设置。

    .r 骰点

    .r <表达式> [<原因>]

    别名:.roll

    常用示例

    ',12)),e("div",k,[t[2]||(t[2]=e("p",{class:"custom-block-title"},"示例",-1)),o(d,{messages:[{content:".r",send:!0},{content:"<木落>掷出了 D100=69"},{content:".r d50",send:!0},{content:"<木落>掷出了 d50=[1d50=48]=48"},{content:".r d50 天气不错",send:!0},{content:"由于天气不错,<木落>掷出了 d50=[1d50=4]=4"},{content:".r 5d24 骰5个24面骰",send:!0},{content:"由于骰5个24面骰,<木落>掷出了 5d24=[5d24=60, 7+20+15+1+17]=60"},{content:".r 4d6k3 骰4个6面骰,选3个最大的",send:!0},{content:"由于骰4个6面骰,选3个最大的,<木落>掷出了 4d6k3=[{6 5 3 | 1 }]=14"},{content:".r 100 + 3 * 2",send:!0},{content:"<木落>掷出了 100 + 3 * 2=100 + 6=106"}]})]),t[37]||(t[37]=e("p",null,[n("或许你已注意到,"),e("code",null,".r"),n(" 指令的表达式在不包含骰子算符时,相当于计算器。海豹的计算只支持整数,出现的小数被立即舍弃。")],-1)),t[38]||(t[38]=e("h3",{id:"多轮骰点",tabindex:"-1"},[n("多轮骰点 "),e("a",{class:"header-anchor",href:"#多轮骰点","aria-label":'Permalink to "多轮骰点"'},"​")],-1)),e("div",x,[t[3]||(t[3]=e("p",{class:"custom-block-title"},"示例",-1)),o(d,{messages:[{content:".r 2#d10",send:!0},{content:`<木落>掷骰2次: +d10=[1d10=7]=7 +d10=[1d10=8]=8`}]})]),t[39]||(t[39]=e("h3",{id:"在骰点中使用属性值",tabindex:"-1"},[n("在骰点中使用属性值 "),e("a",{class:"header-anchor",href:"#在骰点中使用属性值","aria-label":'Permalink to "在骰点中使用属性值"'},"​")],-1)),t[40]||(t[40]=e("p",null,"你可在表达式中包含属性值或其他变量。",-1)),e("div",v,[t[4]||(t[4]=e("p",{class:"custom-block-title"},"示例",-1)),t[5]||(t[5]=e("p",null,"此时木落的侦查技能点是 53",-1)),o(d,{messages:[{content:".r 侦查+10",send:!0},{content:"<木落>掷出了 侦查+10=53[侦查=53] + 10=63"}]})]),t[41]||(t[41]=e("h3",{id:"奖励骰与惩罚骰",tabindex:"-1"},[n("奖励骰与惩罚骰 "),e("a",{class:"header-anchor",href:"#奖励骰与惩罚骰","aria-label":'Permalink to "奖励骰与惩罚骰"'},"​")],-1)),t[42]||(t[42]=e("p",null,"CoC 规则中,对于百分骰的一种补偿骰法,通过额外骰一定数量的十位骰,选择组成的最好结果或最坏结果。",-1)),e("div",h,[t[6]||(t[6]=e("p",{class:"custom-block-title"},"示例",-1)),o(d,{messages:[{content:".r b",send:!0},{content:"<木落>掷出了 b=[D100=72, 奖励 4]=42"},{content:".r b3",send:!0},{content:"<木落>掷出了 b3=[D100=96, 奖励 4 6 3]=36"},{content:".r p4 惩罚骰",send:!0},{content:"由于惩罚骰,<木落>掷出了 p4=[D100=27, 惩罚 5 6 8 7]=87"}]})]),t[43]||(t[43]=e("h3",{id:"优势骰与劣势骰",tabindex:"-1"},[n("优势骰与劣势骰 "),e("a",{class:"header-anchor",href:"#优势骰与劣势骰","aria-label":'Permalink to "优势骰与劣势骰"'},"​")],-1)),t[44]||(t[44]=e("p",null,"D&D 规则中对 20 面骰的一种补偿骰法。额外骰一次,取较高或较低结果。",-1)),e("div",q,[t[7]||(t[7]=e("p",{class:"custom-block-title"},"示例",-1)),o(d,{messages:[{content:".set 20",send:!0},{content:"设定默认骰子面数为 20"},{content:".r d20优势",send:!0},{content:"<木落>掷出了 d20优势=[{7 | 6 }]=7"},{content:".r d劣势",send:!0},{content:"<木落>掷出了 d劣势=[{16 | 18 }]=16"}]})]),t[45]||(t[45]=e("p",null,"优势骰与劣势骰也可使用通用的表达式表达",-1)),e("div",P,[t[8]||(t[8]=e("p",{class:"custom-block-title"},"示例",-1)),o(d,{messages:[{content:".r 2d20k1 等于优势骰",send:!0},{content:"由于等于优势骰,<木落>掷出了 2d20k1=[{19 | 17 }]=19"},{content:".r 2d20q1 等于劣势骰",send:!0},{content:"由于等于劣势骰,<木落>掷出了 2d20k1=[{19 | 17 }]=17"}]})]),t[46]||(t[46]=e("h3",{id:"fvtt-骰点兼容",tabindex:"-1"},[n("fvtt 骰点兼容 "),e("a",{class:"header-anchor",href:"#fvtt-骰点兼容","aria-label":'Permalink to "fvtt 骰点兼容"'},"​")],-1)),e("div",D,[t[11]||(t[11]=e("p",{class:"custom-block-title"},"示例",-1)),o(c,null,{default:l(()=>[o(r,{label:"优势骰"},{default:l(()=>[o(d,{messages:[{content:".r d20kh",send:!0},{content:"<木落>掷出了 d20kh=[{10 | 3 }]=10"}]})]),_:1}),o(r,{label:"劣势骰"},{default:l(()=>[o(d,{messages:[{content:".r d20kl",send:!0},{content:"<木落>掷出了 d20kl=[{6 | 15 }]=6"}]})]),_:1}),o(r,{label:"排除低值"},{default:l(()=>[t[9]||(t[9]=e("p",null,"骰 4 个排除 1 个最低值:",-1)),o(d,{messages:[{content:".r 4d6dl1",send:!0},{content:"<木落>掷出了 4d6dl1=[{5 3 2 | 1 }]=10"}]})]),_:1}),o(r,{label:"排除高值"},{default:l(()=>[t[10]||(t[10]=e("p",null,"骰 4 个排除 1 个最高值:",-1)),o(d,{messages:[{content:".r 4d6dh1",send:!0},{content:"<木落>掷出了 4d6dh1=[{3 3 5 | 6 }]=11"}]})]),_:1})]),_:1})]),t[47]||(t[47]=e("h3",{id:"fate-命运骰",tabindex:"-1"},[n("fate 命运骰 "),e("a",{class:"header-anchor",href:"#fate-命运骰","aria-label":'Permalink to "fate 命运骰"'},"​")],-1)),t[48]||(t[48]=e("p",null,"一种特殊的六面骰,六个面分别为 -、-、0、0、+、+,分别代表 -1、0、1。",-1)),t[49]||(t[49]=e("p",null,"骰点时投掷 4 次,加在一起为结果。",-1)),e("div",C,[t[12]||(t[12]=e("p",{class:"custom-block-title"},"示例",-1)),o(c,null,{default:l(()=>[o(r,{label:"一般使用"},{default:l(()=>[o(d,{messages:[{content:".r f",send:!0},{content:"<木落>掷出了 f=[---+]=-2"}]})]),_:1}),o(r,{label:"带补正的情况"},{default:l(()=>[o(d,{messages:[{content:".r f+1",send:!0},{content:"<木落>掷出了 f+1=0[+0-0] + 1=1"}]})]),_:1})]),_:1})]),t[50]||(t[50]=s('

    WOD 骰点

    WOD 骰点规则是一个多轮骰点规则,国内多见于无限团。

    进行 WOD 骰点需要设定以下参数:骰池数量 X、加骰线 Y、骰子面数 Z、成功线 N,其中 X Y 是必须的,成功线默认为 8,骰子面数默认为 10。

    骰 X 个 Z 面骰,每有一个大于等于成功线 N 的骰,成功数加 1,每有一个大于等于加骰线 Y 的骰,加骰数加 1,进入下一轮。

    在第二轮中,骰上一轮中加骰数个 Z 面骰,重复进行计算。以此类推。

    最后计算总计成功数。

    表达式形如 <X>a<Y>[m<Z>][k<N>]。其中的大写字母用相应参数替换。

    ',7)),e("div",I,[t[13]||(t[13]=e("p",{class:"custom-block-title"},"示例",-1)),o(d,{messages:[{content:".r 5a6",send:!0},{content:"<木落>掷出了 5a6=[成功2/8 轮数:3 {4,<10*>,<10*>,5,1},{5,<6>},{1}]=2"},{content:".r 10a6k4m9",send:!0},{content:"<木落>掷出了 10a6k4m9=[成功11/16 轮数:3 {1,<6*>,5*,3,<8*>,5*,<8*>,<6*>,2,<8*>},{5*,2,<9*>,1,4*},{5*}]=11"}]})]),t[51]||(t[51]=s("

    在计算过程中,每一轮骰点被包含在一对花括号 {} 中;达到加骰线 Y 的骰点用 <> 标记;达到成功线 N 的骰点用 * 标记。

    你可指定 Y = 0,这时不进行加骰而只骰一轮。

    你可将 k<N> 替换成 q<M>,这时,最终计算的是小于等于 M的骰子总数。

    ",3)),e("div",A,[t[14]||(t[14]=e("p",{class:"custom-block-title"},"示例",-1)),o(d,{messages:[{content:".r 5a6q4",send:!0},{content:"<木落>掷出了 5a6q4=[成功4/9 轮数:3 {<9>,5,<9>,3*,<9>},{<10>,3*,2*},{2*}]=4"}]})]),t[52]||(t[52]=s('

    双十字骰点

    双十字规则是一种多轮的骰点规则。

    进行双十字骰点需要设定以下参数:骰池数量 X、暴击线 Y、骰子面数 Z,其中 X Y 是必须的,骰子面数 Z 默认为 10。

    骰 X 个 Z 面骰,出目大于等于暴击线的骰子称为此骰子「暴击」。只要存在暴击的骰子,就称本轮暴击,进入下一轮;否则计算最终骰点。

    第二轮中,骰 上一轮中暴击的骰子数 个 Z 面骰,统计暴击数,判断进入下一轮或结束。以此类推。

    最终的骰点结果为:暴击轮数 * 10 + 最后一轮中最大点数。

    表达式形如 <X>c<Y>[m<Z>]。其中的大写字母用相应参数替换。

    ',7)),e("div",B,[t[15]||(t[15]=e("p",{class:"custom-block-title"},"示例",-1)),o(d,{messages:[{content:".r 4c3m7",send:!0},{content:"<木落>掷出了 4c3m7=[出目32/9 轮数:4 {<4>,2,<4>,<5>},{<7>,1,2},{<7>},{2}]=32"}]})]),t[53]||(t[53]=e("p",null,[n("在计算过程中,每一轮骰点被包含在一对花括号 "),e("code",null,"{}"),n(" 中;达到暴击线 Y 的骰点用 "),e("code",null,"<>"),n(" 标记。")],-1)),t[54]||(t[54]=e("h3",{id:"混合运算",tabindex:"-1"},[n("混合运算 "),e("a",{class:"header-anchor",href:"#混合运算","aria-label":'Permalink to "混合运算"'},"​")],-1)),t[55]||(t[55]=e("p",null,[n("以上所有骰法,加、减、乘、除、乘方等 5 个数学运算,以及括号 "),e("code",null,"()"),n(" 可以被组合使用,以进行更复杂的运算。")],-1)),e("div",M,[t[16]||(t[16]=e("p",{class:"custom-block-title"},"示例",-1)),o(d,{messages:[{content:".r 30 + (-1d20) + 49",send:!0},{content:"<木落>掷出了 30 + (-1d20) + 49=30 + -1[1d20=1] + 49=78"},{content:".r d50 * 3 + 2",send:!0},{content:"<木落>掷出了 d50 * 3 + 2=21[1d50=21] * 3 + 2=65"},{content:".r d50 * 3 + (2 - p2) 多项式",send:!0},{content:"由于多项式,<木落>掷出了 d50 * 3 + (2 - p2)=25[1d50=25] * 3 + -64[D100=6, 惩罚 6 5]=11"}]})]),t[56]||(t[56]=s("

    特别地,上文所述的「骰法」d b p f a c 均可作为运算符使用。

    ",1)),e("div",y,[t[17]||(t[17]=e("p",{class:"custom-block-title"},"示例",-1)),o(d,{messages:[{content:".r 1d1d1d1d1d1d1d1d1d1d1d1d1d1d(20+1d3*4)",send:!0},{content:"<木落>掷出了 1d1d1d1d1d1d1d1d1d1d1d1d1d1d(20+1d3*4)=13"},{content:".r 1d10+(1+32)d(4*6)d20",send:!0},{content:"<木落>掷出了 1d10+(1+32)d(4*6)d20=1[1d10=1] + 3941[33d24=384,384d20=3941]=3942"}]})]),t[57]||(t[57]=s('

    .rh 暗骰

    这个指令的格式与普通骰点 .r 完全相同,区别在于发送骰点结果的方式。

    在发送指令的群聊中,海豹核心会进行提示,但提示不包含骰点结果。

    骰点结果将由海豹核心私聊给指令发送者。

    收不到结果?

    在 QQ 平台上,如果你不是海豹账号的好友,将无法进行私聊。也就无法收到暗骰结果。

    ',5)),e("div",T,[t[18]||(t[18]=e("p",{class:"custom-block-title"},"示例",-1)),o(c,null,{default:l(()=>[o(r,{label:"群聊"},{default:l(()=>[o(d,{messages:[{content:".rh d50",send:!0},{content:"命运正在低语!"}]})]),_:1}),o(r,{label:"收到的私聊"},{default:l(()=>[o(d,{messages:[{content:`来自群<群名>(群号)的暗骰: +<木落>掷出了 d10=[1d10=3]=3`}]})]),_:1})]),_:1})]),t[58]||(t[58]=e("h2",{id:"rx-rxh-特殊骰点",tabindex:"-1"},[e("code",null,".rx"),n(" / "),e("code",null,".rxh"),n(" 特殊骰点 "),e("a",{class:"header-anchor",href:"#rx-rxh-特殊骰点","aria-label":'Permalink to "`.rx` / `.rxh` 特殊骰点"'},"​")],-1)),t[59]||(t[59]=e("p",null,[n("这个指令的格式与普通骰点 "),e("code",null,".r"),n(" 完全相同,区别在于允许额外 AT 其他人,以使用对方的属性。")],-1)),t[60]||(t[60]=e("p",null,"这种操作称为「代骰」,你会在许多其他指令中看到代骰用法。",-1)),e("div",N,[t[19]||(t[19]=e("p",{class:"custom-block-title"},"示例",-1)),t[20]||(t[20]=e("p",null,"此时木落的侦查是 75,Szz 的侦查是 80",-1)),o(d,{messages:[{content:".rx 侦查+1d20**2",send:!0},{content:"<木落>掷出了 侦查+1d20**2=75[侦查=75] + 324[1d20=18]=399"},{content:".rx 侦查+1d20**2 @Szz",send:!0},{content:`由<木落>代骰: +掷出了 侦查+1d20**2=80[侦查=80] + 144[1d20=12]=224`}]})]),t[61]||(t[61]=s('

    .nn 角色名设定

    .nn 查看当前角色名。

    .nn <角色名> 修改角色名,角色名中不能带有空格。

    .nn clr 重置角色名,即,将角色名设置为 IM 平台的昵称。

    角色名被用于在进行各种操作和记录 Log 时显示。

    ',5)),e("div",O,[t[21]||(t[21]=e("p",{class:"custom-block-title"},"示例",-1)),o(d,{messages:[{content:".nn 简·拉基·茨德",send:!0},{content:"<木落>(IM 账号)的昵称被设定为<简·拉基·茨德>"},{content:".r",send:!0},{content:"<简·拉基·茨德>掷出了 D100=16"},{content:".nn",send:!0},{content:"玩家的当前昵称为: <简·拉基·茨德>"},{content:".nn clr",send:!0},{content:"<简·拉基·茨德>(IM 账号)的昵称已重置为<木落>"}]})]),t[62]||(t[62]=s('

    .pc 角色卡管理

    信息

    为了使用这个指令,需要先介绍海豹核心管理你角色卡的方式。

    在每个群聊(对于这里,私聊也被认为是一个特殊的群聊)中,你都自动拥有一张独立的角色卡。这些角色卡互相无任何影响。

    你还可以拥有若干与特定群聊无关的角色卡,这些角色卡可以被绑定到任意数量的群聊。这时,绑定的群聊中角色数据互相同步,在一处的修改就会影响其他各处。

    pc 指令的作用是管理上述第二种群聊无关角色卡。

    .pc new <角色名> 新建一张角色卡,并绑定到当前群聊。

    .pc save [<角色名>] 将你当前群聊中的独立卡数据保存为个人角色卡。你可指定保存的角色名,如不指定,将使用当前群聊中你的角色名。

    .pc list 列出你所保存的所有角色。

    .pc tag (<角色名>|<角色序号>) 将指定角色卡绑定到当前群聊。

    .pc tag 不带有角色名参数,将本群的绑定关系解除。你在本群的角色将会恢复为独立卡的数据。

    .pc untagAll (<角色名>|<角色序号>) 将指定角色卡从其绑定的所有群解绑。

    .pc load (<角色名>|<角色序号>) 使用指定角色卡的数据覆盖当前群聊的独立卡。这不会将角色卡绑定到当前群聊。

    .pc del/rm (<角色名>|<角色序号>) 删除指定角色卡。

    .find 词条查询指令

    海豹核心默认搭载了 CoC 的《怪物之锤》、《魔法大典》和 D&D 规则的一系列资料。这些资料在海豹的 data/helpdpc 目录下的不同文件中被整理成词条,并支持使用此指令进行查询。

    .find [#<分组名>] <关键字> [--num=<页大小>] [--page=<页码>] 用关键字进行词条查询;如果提供了分组名,则只在指定分组中进行查询;可指定每页大小和页码,默认为每页 4 条,显示第 1 页。

    「分组名」是指海豹 data/helpdoc 目录下的子目录名。对于内置的帮助文档,分组名分别是「COC」和「DND」。

    .find <数字ID> 显示该 ID 的词条。

    .find --rand 显示随机词条。

    别名:.查询

    查询功能在不同设备上的实现是不同的。在 x86 设备上,海豹核心使用稍微更多的内存使用全文搜索,这赋予了查询指令强大的获取能力。在其他平台上,由于搜索库的限制,海豹核心使用词条标题模糊搜索。

    ',18)),e("p",null,[t[22]||(t[22]=n("从 ")),o(p,{type:"tip",text:"v1.4.2"}),t[23]||(t[23]=n(" 版本起,你可以在 WebUI 的「扩展功能 - 帮助文档」中设置分组的别名。"))]),e("h3",Y,[t[24]||(t[24]=n("指定默认查询分组 ")),o(p,{type:"tip",text:"v1.4.2"}),t[25]||(t[25]=n()),t[26]||(t[26]=e("a",{class:"header-anchor",href:"#指定默认查询分组","aria-label":'Permalink to "指定默认查询分组 "'},"​",-1))]),e("p",null,[t[27]||(t[27]=n("从 ")),o(p,{type:"tip",text:"v1.4.2"}),t[28]||(t[28]=n(" 版本起,海豹支持在每个群组中分别设置默认的查询分组。"))]),t[63]||(t[63]=e("p",null,[e("code",null,".find config --group"),n(" 查看当前群组的默认查询分组。")],-1)),t[64]||(t[64]=e("p",null,[e("code",null,".find config --group=<分组名>"),n(" 设置当前群组的默认查询分组。")],-1)),t[65]||(t[65]=e("p",null,[e("code",null,".find config --groupclr"),n(" 清除当前群组的默认查询分组。")],-1)),e("div",w,[t[29]||(t[29]=e("p",{class:"custom-block-title"},"示例",-1)),o(d,{messages:[{content:".find config --group=COC",send:!0},{content:"指定默认搜索分组为COC"},{content:".find 火球术",send:!0},{content:"未找到搜索结果"},{content:".find config --groupclr",send:!0},{content:"已清空默认搜索分组,原分组为COC"},{content:".find 火球术",send:!0},{content:`[全文搜索]最优先结果: +词条: PHB法术:火球术`}]})]),t[66]||(t[66]=e("h3",{id:"全文搜索",tabindex:"-1"},[n("全文搜索 "),e("a",{class:"header-anchor",href:"#全文搜索","aria-label":'Permalink to "全文搜索"'},"​")],-1)),e("div",W,[t[30]||(t[30]=e("p",{class:"custom-block-title"},"示例",-1)),o(d,{messages:[{content:".find 30尺 法术",send:!0},{content:`全部结果: +[序号3066]【术士:超魔法:远程法术】 匹配度 0.16 +[序号3015]【游侠:驯兽师:法术共享】 匹配度 0.13 +[序号2396]【法术详述:迷踪步】 匹配度 0.12 +[序号1319]【法术详述:阿迦纳萨喷火术】 匹配度 0.12 +[序号507]【法术详述:智能堡垒/智力堡垒/智慧堡垒/智能壁垒/心智堡垒/心智壁垒】 匹配度 0.12 +[序号2514]【法术详述:水下呼吸/水中呼吸】 匹配度 0.11 +[序号2212]【法术详述:原力法阵】 匹配度 0.11 +[序号1403]【法术详述:众星冠冕/星辰冠冕/星之冠冕】 匹配度 0.11 +[序号2243]【法术详述:造水/枯水术/造水术/枯水术】 匹配度 0.11 +[序号2176]【法术详述:秘法眼】 匹配度 0.11 + +(本次搜索由全文搜索完成)`}]})]),t[67]||(t[67]=e("p",null,"因为多个文本匹配度相近,因此没有列出最佳匹配条目的正文内容。用这条指令可以查看:",-1)),e("div",Z,[t[31]||(t[31]=e("p",{class:"custom-block-title"},"示例",-1)),o(d,{messages:[{content:".find 2212",send:!0},{content:`词条: 法术详述:原力法阵 +原力法阵 Circle of Power +圣武士 +5环 防护 +施法时间:1动作 +施法距离:自身(30尺半径) +法术成分:V +持续时间:专注,至多10分钟 +你身上发出神圣能量并以扭曲散溢的魔法能量构成一个半径30尺的球状力场。法术持续时间内力场将以你为中心随你移动。力场范围内的友方生物(包括你自己)为对抗法术或其他魔法效应而进行的豁免检定具有优势。此外,受本法术效应影响的生物在对抗豁免成功则伤害减半的法术或魔法效应时,若成功则不受伤害。`}]})]),t[68]||(t[68]=e("p",null,[e("strong",null,"这么好用,那代价是什么呢?")],-1)),t[69]||(t[69]=e("p",null,"更多的内存占用和变慢的启动速度。",-1)),t[70]||(t[70]=e("p",null,[n("大致来说,"),e("strong",null,"每 1 MB 帮助文本会产生约 15 MB 额外内存占用"),n("。")],-1)),t[71]||(t[71]=e("h3",{id:"快速文档查找",tabindex:"-1"},[n("快速文档查找 "),e("a",{class:"header-anchor",href:"#快速文档查找","aria-label":'Permalink to "快速文档查找"'},"​")],-1)),e("div",S,[t[32]||(t[32]=e("p",{class:"custom-block-title"},"示例",-1)),o(d,{messages:[{content:".find 测试词条",send:!0},{content:`最优先结果: +词条: 测试:测试词条 +他在命运的沉浮中随波逐流, 扮演着受害与加害者的双重角色 + +全部结果: +[序号2]【测试:测试词条】 匹配度 67.00 + +(本次搜索由快速文档查找完成)`}]})]),t[72]||(t[72]=s('

    致谢

    CoC《怪物之锤》的整理者为:蜜瓜包October

    CoC 魔法大典的整理者为:魔骨NULLDr.Amber

    D&D 系列资料的整理者主要为 DicePP 项目组成员,包括Farevell梨子花作噫邪恶惠惠赵小安等。

    这些资料的原始出处和译者很多已经不可考,此处无法一一列出,甚为遗憾。

    也在此感谢一代又一代无名作者和译者做出的工作。

    .help 帮助指令

    .help [<词条名>] 显示指定词条的帮助文档。

    .help reload 重新装载帮助文档。仅 Master 可用。

    .set 设定默认骰子面数 / 设定游戏系统

    .set info 查看当前默认骰子面数。如果从未设置过,将显示为「0」。

    .set dnd 设置群内骰子面数为 20,并自动开启 D&D 扩展。

    .set (coc|coc7) 设置群内骰子面数为 100,并自动开启 CoC 扩展。

    .set <面数> 设定群内默认骰子面数。

    .set <面数> --my 设定个人专属默认骰子面数。

    .set clr 清除群内骰子面数设置。

    .set clr --my 清除个人骰子面数设置。

    如果通过「规则模板」机制添加了自设规则,并有相关配置,可以使用 .set <规则名> 切换为对应规则的默认骰面数。你可以通过 .set help 来查看当前可用的关键字。

    ',18)),e("div",U,[t[33]||(t[33]=e("p",{class:"custom-block-title"},"示例",-1)),o(d,{messages:[{content:".set 20",send:!0},{content:"设定默认骰子面数为 20"},{content:".set coc",send:!0},{content:`设定群组默认骰子面数为 100 +提示:已切换至100面骰,并自动开启coc7扩展`},{content:".set dnd",send:!0},{content:`设定群组默认骰子面数为 20 +提示:已切换至20面骰,并自动开启dnd5e扩展。`},{content:".set info",send:!0},{content:`个人骰子面数: 0 +群组骰子面数: 20 +当前骰子面数: 20`}]})]),t[73]||(t[73]=s('

    .botlist 机器人列表

    这个指令用于标记同一群聊内的其他机器人。

    当一个账号被标记后,对于与 TA 相关的消息,海豹核心会按以下规则进行忽略:

    1. 如果 TA 被 AT,忽略;
    2. 如果是 TA 发出的消息,忽略。

    这可避免机器人互相响应造成的危险的循环。

    .botlist add @A @B @C 标记 A、B、C 为机器人。

    .botlist add @A @B --s 同上,不过骰子不会做出回复。

    .botlist del @A @B @C 去除 A、B、C 的标记。

    .botlist list 查看当前标记列表。

    ',9))])}const J=i(m,[["render",X]]);export{G as __pageData,J as default}; diff --git a/assets/use_core.md.C2uANgf3.lean.js b/assets/use_core.md.C2uANgf3.lean.js new file mode 100644 index 000000000..1cde73008 --- /dev/null +++ b/assets/use_core.md.C2uANgf3.lean.js @@ -0,0 +1,47 @@ +import{_ as i,c as u,a6 as s,j as e,G as o,a as n,w as l,B as a,o as b}from"./chunks/framework.B1keMFNq.js";const G=JSON.parse('{"title":"核心指令","description":"","frontmatter":{"lang":"zh-cn","title":"核心指令"},"headers":[],"relativePath":"use/core.md","filePath":"use/core.md","lastUpdated":1728702230000}'),m={name:"use/core.md"},g={class:"info custom-block"},f={class:"info custom-block"},k={class:"info custom-block"},x={class:"info custom-block"},v={class:"info custom-block"},h={class:"info custom-block"},q={class:"info custom-block"},P={class:"info custom-block"},D={class:"info custom-block"},C={class:"info custom-block"},I={class:"info custom-block"},A={class:"info custom-block"},B={class:"info custom-block"},M={class:"info custom-block"},y={class:"info custom-block"},T={class:"info custom-block"},N={class:"info custom-block"},O={class:"info custom-block"},Y={id:"指定默认查询分组",tabindex:"-1"},w={class:"info custom-block"},W={class:"info custom-block"},Z={class:"info custom-block"},S={class:"info custom-block"},U={class:"info custom-block"};function X(z,t,Q,V,$,j){const d=a("ChatBox"),r=a("PluginTabsTab"),c=a("PluginTabs"),p=a("Badge");return b(),u("div",null,[t[34]||(t[34]=s('

    核心指令

    本节内容

    本节将介绍海豹核心的核心指令。

    核心指令是无法被关闭的指令。与之相对的概念是扩展指令,扩展指令可以被关闭。

    .master 骰主指令

    此指令只能由具有 Master 权限的用户使用。

    .master add @A 为 A 添加 Master 权限。

    .master del @A 移除 A 的 Master 权限。

    .master list 查看当前 Master 权限列表。

    .master relogin 30 秒后重新登录,有可能使骰子失联。

    .master reboot 重新启动海豹核心(需要二次确认)。

    .master checkupdate 检查并进行远程更新(需要二次确认)。

    .master unlock <解锁码> 清空 Master 权限列表,并给自己重新添加 Master 权限。

    .master backup 做一次备份。

    .master reload (deck|js|helpdoc) 重新加载牌堆/js/帮助文档。

    .master quitgroup <群组 ID> [<理由>] 从指定群组中退出,必须在同一平台使用。

    注意:保护好你的骰子

    我们认为,拥有海豹核心的最终判定方式是可以接触到 WebUI。因此,该解锁码仅能通过 WebUI 的「综合设置 - 基本设置」获取。

    你可以将 Master 权限授予若干位维护人员。但是,确保只有你完全信任的人能够接触到你骰子的 WebUI 与本地文件。

    如果你的 WebUI 可以通过公开互联网访问,确保你设置了合适的密码。

    .ban 黑白名单指令

    注意:统一 ID

    在海豹核心的指令和后台设置中,你会经常用到统一 ID。这是海豹核心用于标识不同平台的用户和群组的通用格式。对于每个用户,其形式为 平台:序列号;对于群组,其形式为 平台-Group:序列号

    使用 .userid 指令查看自己和所在群聊的统一 ID。

    在 QQ 平台,序列号即为 QQ 号与群号。

    此指令只能由具有 Master 权限的用户使用。

    .ban help 查看帮助。

    .ban add <统一 ID> [<原因>] 使用统一 ID,将指定用户拉入黑名单,理由可不填。

    .ban trust <统一 ID> 使用统一 ID,将指定用户添加至信任列表。

    .ban rm <统一 ID> 使用统一 ID,将指定用户移出黑名单/信任列表。

    .ban list 展示列表。

    .ban list (ban|warn|trust) 只显示被禁用/被警告/信任用户。

    .ban query <统一 ID> 查看指定用户黑白名单情况。

    .bot 骰子管理

    你必须 AT 骰子账号,才能使用 bot 命令。为了简单,在以下示例中略去 AT 的部分。

    ',27)),e("div",g,[t[0]||(t[0]=e("p",{class:"custom-block-title"},"示例",-1)),o(d,{messages:[{content:".bot on",send:!0},{content:"<海豹bot> 已启用 SealDice <版本号>"},{content:".bot off",send:!0},{content:"<海豹bot> 停止服务"},{content:".bot bye",send:!0},{content:"收到指令,5s后将退出当前群组"},{content:".bot",send:!0},{content:"SealDice <版本号>"}]})]),t[35]||(t[35]=s('

    .ext 扩展管理

    除了本节所述的「核心指令」之外,海豹的其他功能都作为「扩展」提供。每一个扩展提供若干指令和其他功能,并可以单独开关。你可在每个群聊中启用不同的扩展。

    .ext list 查看扩展列表和开启情况。

    .ext <扩展名> 查询指定扩展的信息。

    .ext <扩展名> (on|off) 开启、关闭指定扩展。

    目前,海豹提供 7 个内置扩展,它们的详细信息在本章的后续内容中逐一介绍。同时,海豹核心也支持通过装载 JavaScript 脚本添加第三方扩展。

    ',6)),e("div",f,[t[1]||(t[1]=e("p",{class:"custom-block-title"},"示例",-1)),o(d,{messages:[{content:".ext",send:!0},{content:`检测到以下扩展: +1. [开]coc7 - 版本:1.0.0 作者:木落 +2. [开]log - 版本:1.0.0 作者:木落 +3. [开]fun - 版本:1.0.0 作者:木落 +4. [开]deck - 版本:1.0.0 作者:木落 +5. [关]reply - 版本:1.0.0 作者:木落 +6. [开]dnd5e - 版本:1.0.0 作者:木落 +7. [开]story - 版本:1.0.0 作者:木落 +使用命令: .ext <扩展名> on/off 可以在当前群开启或关闭某扩展。 +命令: .ext <扩展名> 可以查看扩展介绍及帮助`},{content:".ext coc7 on",send:!0},{content:"打开扩展 coc7"},{content:".ext reply",send:!0},{content:`> [reply] 版本1.2.0 作者木落 +> 自定义回复模块,支持各种文本匹配和简易脚本`},{content:".ext reply off",send:!0},{content:"关闭扩展 reply"}]})]),t[36]||(t[36]=s('

    可以在 UI 界面中「综合设置 - 基本设置」的最底下,设置各个扩展及其指令的默认开启状态。

    .set 骰子面数管理

    海豹默认骰子面数为100,你可以通过以下指令在 coc/dnd 规则中切换,更多规则请看其它规则支持

    .set info 查看当前面数设置。

    .set <面数> 设置群内骰子面数。

    .set dnd 设置群内骰子面数为20,并自动开启对应扩展。

    .set (coc|coc7) 设置群内骰子面数为100,并自动开启对应扩展。

    .set clr 清除群内骰子面数设置。

    .r 骰点

    .r <表达式> [<原因>]

    别名:.roll

    常用示例

    ',12)),e("div",k,[t[2]||(t[2]=e("p",{class:"custom-block-title"},"示例",-1)),o(d,{messages:[{content:".r",send:!0},{content:"<木落>掷出了 D100=69"},{content:".r d50",send:!0},{content:"<木落>掷出了 d50=[1d50=48]=48"},{content:".r d50 天气不错",send:!0},{content:"由于天气不错,<木落>掷出了 d50=[1d50=4]=4"},{content:".r 5d24 骰5个24面骰",send:!0},{content:"由于骰5个24面骰,<木落>掷出了 5d24=[5d24=60, 7+20+15+1+17]=60"},{content:".r 4d6k3 骰4个6面骰,选3个最大的",send:!0},{content:"由于骰4个6面骰,选3个最大的,<木落>掷出了 4d6k3=[{6 5 3 | 1 }]=14"},{content:".r 100 + 3 * 2",send:!0},{content:"<木落>掷出了 100 + 3 * 2=100 + 6=106"}]})]),t[37]||(t[37]=e("p",null,[n("或许你已注意到,"),e("code",null,".r"),n(" 指令的表达式在不包含骰子算符时,相当于计算器。海豹的计算只支持整数,出现的小数被立即舍弃。")],-1)),t[38]||(t[38]=e("h3",{id:"多轮骰点",tabindex:"-1"},[n("多轮骰点 "),e("a",{class:"header-anchor",href:"#多轮骰点","aria-label":'Permalink to "多轮骰点"'},"​")],-1)),e("div",x,[t[3]||(t[3]=e("p",{class:"custom-block-title"},"示例",-1)),o(d,{messages:[{content:".r 2#d10",send:!0},{content:`<木落>掷骰2次: +d10=[1d10=7]=7 +d10=[1d10=8]=8`}]})]),t[39]||(t[39]=e("h3",{id:"在骰点中使用属性值",tabindex:"-1"},[n("在骰点中使用属性值 "),e("a",{class:"header-anchor",href:"#在骰点中使用属性值","aria-label":'Permalink to "在骰点中使用属性值"'},"​")],-1)),t[40]||(t[40]=e("p",null,"你可在表达式中包含属性值或其他变量。",-1)),e("div",v,[t[4]||(t[4]=e("p",{class:"custom-block-title"},"示例",-1)),t[5]||(t[5]=e("p",null,"此时木落的侦查技能点是 53",-1)),o(d,{messages:[{content:".r 侦查+10",send:!0},{content:"<木落>掷出了 侦查+10=53[侦查=53] + 10=63"}]})]),t[41]||(t[41]=e("h3",{id:"奖励骰与惩罚骰",tabindex:"-1"},[n("奖励骰与惩罚骰 "),e("a",{class:"header-anchor",href:"#奖励骰与惩罚骰","aria-label":'Permalink to "奖励骰与惩罚骰"'},"​")],-1)),t[42]||(t[42]=e("p",null,"CoC 规则中,对于百分骰的一种补偿骰法,通过额外骰一定数量的十位骰,选择组成的最好结果或最坏结果。",-1)),e("div",h,[t[6]||(t[6]=e("p",{class:"custom-block-title"},"示例",-1)),o(d,{messages:[{content:".r b",send:!0},{content:"<木落>掷出了 b=[D100=72, 奖励 4]=42"},{content:".r b3",send:!0},{content:"<木落>掷出了 b3=[D100=96, 奖励 4 6 3]=36"},{content:".r p4 惩罚骰",send:!0},{content:"由于惩罚骰,<木落>掷出了 p4=[D100=27, 惩罚 5 6 8 7]=87"}]})]),t[43]||(t[43]=e("h3",{id:"优势骰与劣势骰",tabindex:"-1"},[n("优势骰与劣势骰 "),e("a",{class:"header-anchor",href:"#优势骰与劣势骰","aria-label":'Permalink to "优势骰与劣势骰"'},"​")],-1)),t[44]||(t[44]=e("p",null,"D&D 规则中对 20 面骰的一种补偿骰法。额外骰一次,取较高或较低结果。",-1)),e("div",q,[t[7]||(t[7]=e("p",{class:"custom-block-title"},"示例",-1)),o(d,{messages:[{content:".set 20",send:!0},{content:"设定默认骰子面数为 20"},{content:".r d20优势",send:!0},{content:"<木落>掷出了 d20优势=[{7 | 6 }]=7"},{content:".r d劣势",send:!0},{content:"<木落>掷出了 d劣势=[{16 | 18 }]=16"}]})]),t[45]||(t[45]=e("p",null,"优势骰与劣势骰也可使用通用的表达式表达",-1)),e("div",P,[t[8]||(t[8]=e("p",{class:"custom-block-title"},"示例",-1)),o(d,{messages:[{content:".r 2d20k1 等于优势骰",send:!0},{content:"由于等于优势骰,<木落>掷出了 2d20k1=[{19 | 17 }]=19"},{content:".r 2d20q1 等于劣势骰",send:!0},{content:"由于等于劣势骰,<木落>掷出了 2d20k1=[{19 | 17 }]=17"}]})]),t[46]||(t[46]=e("h3",{id:"fvtt-骰点兼容",tabindex:"-1"},[n("fvtt 骰点兼容 "),e("a",{class:"header-anchor",href:"#fvtt-骰点兼容","aria-label":'Permalink to "fvtt 骰点兼容"'},"​")],-1)),e("div",D,[t[11]||(t[11]=e("p",{class:"custom-block-title"},"示例",-1)),o(c,null,{default:l(()=>[o(r,{label:"优势骰"},{default:l(()=>[o(d,{messages:[{content:".r d20kh",send:!0},{content:"<木落>掷出了 d20kh=[{10 | 3 }]=10"}]})]),_:1}),o(r,{label:"劣势骰"},{default:l(()=>[o(d,{messages:[{content:".r d20kl",send:!0},{content:"<木落>掷出了 d20kl=[{6 | 15 }]=6"}]})]),_:1}),o(r,{label:"排除低值"},{default:l(()=>[t[9]||(t[9]=e("p",null,"骰 4 个排除 1 个最低值:",-1)),o(d,{messages:[{content:".r 4d6dl1",send:!0},{content:"<木落>掷出了 4d6dl1=[{5 3 2 | 1 }]=10"}]})]),_:1}),o(r,{label:"排除高值"},{default:l(()=>[t[10]||(t[10]=e("p",null,"骰 4 个排除 1 个最高值:",-1)),o(d,{messages:[{content:".r 4d6dh1",send:!0},{content:"<木落>掷出了 4d6dh1=[{3 3 5 | 6 }]=11"}]})]),_:1})]),_:1})]),t[47]||(t[47]=e("h3",{id:"fate-命运骰",tabindex:"-1"},[n("fate 命运骰 "),e("a",{class:"header-anchor",href:"#fate-命运骰","aria-label":'Permalink to "fate 命运骰"'},"​")],-1)),t[48]||(t[48]=e("p",null,"一种特殊的六面骰,六个面分别为 -、-、0、0、+、+,分别代表 -1、0、1。",-1)),t[49]||(t[49]=e("p",null,"骰点时投掷 4 次,加在一起为结果。",-1)),e("div",C,[t[12]||(t[12]=e("p",{class:"custom-block-title"},"示例",-1)),o(c,null,{default:l(()=>[o(r,{label:"一般使用"},{default:l(()=>[o(d,{messages:[{content:".r f",send:!0},{content:"<木落>掷出了 f=[---+]=-2"}]})]),_:1}),o(r,{label:"带补正的情况"},{default:l(()=>[o(d,{messages:[{content:".r f+1",send:!0},{content:"<木落>掷出了 f+1=0[+0-0] + 1=1"}]})]),_:1})]),_:1})]),t[50]||(t[50]=s('

    WOD 骰点

    WOD 骰点规则是一个多轮骰点规则,国内多见于无限团。

    进行 WOD 骰点需要设定以下参数:骰池数量 X、加骰线 Y、骰子面数 Z、成功线 N,其中 X Y 是必须的,成功线默认为 8,骰子面数默认为 10。

    骰 X 个 Z 面骰,每有一个大于等于成功线 N 的骰,成功数加 1,每有一个大于等于加骰线 Y 的骰,加骰数加 1,进入下一轮。

    在第二轮中,骰上一轮中加骰数个 Z 面骰,重复进行计算。以此类推。

    最后计算总计成功数。

    表达式形如 <X>a<Y>[m<Z>][k<N>]。其中的大写字母用相应参数替换。

    ',7)),e("div",I,[t[13]||(t[13]=e("p",{class:"custom-block-title"},"示例",-1)),o(d,{messages:[{content:".r 5a6",send:!0},{content:"<木落>掷出了 5a6=[成功2/8 轮数:3 {4,<10*>,<10*>,5,1},{5,<6>},{1}]=2"},{content:".r 10a6k4m9",send:!0},{content:"<木落>掷出了 10a6k4m9=[成功11/16 轮数:3 {1,<6*>,5*,3,<8*>,5*,<8*>,<6*>,2,<8*>},{5*,2,<9*>,1,4*},{5*}]=11"}]})]),t[51]||(t[51]=s("

    在计算过程中,每一轮骰点被包含在一对花括号 {} 中;达到加骰线 Y 的骰点用 <> 标记;达到成功线 N 的骰点用 * 标记。

    你可指定 Y = 0,这时不进行加骰而只骰一轮。

    你可将 k<N> 替换成 q<M>,这时,最终计算的是小于等于 M的骰子总数。

    ",3)),e("div",A,[t[14]||(t[14]=e("p",{class:"custom-block-title"},"示例",-1)),o(d,{messages:[{content:".r 5a6q4",send:!0},{content:"<木落>掷出了 5a6q4=[成功4/9 轮数:3 {<9>,5,<9>,3*,<9>},{<10>,3*,2*},{2*}]=4"}]})]),t[52]||(t[52]=s('

    双十字骰点

    双十字规则是一种多轮的骰点规则。

    进行双十字骰点需要设定以下参数:骰池数量 X、暴击线 Y、骰子面数 Z,其中 X Y 是必须的,骰子面数 Z 默认为 10。

    骰 X 个 Z 面骰,出目大于等于暴击线的骰子称为此骰子「暴击」。只要存在暴击的骰子,就称本轮暴击,进入下一轮;否则计算最终骰点。

    第二轮中,骰 上一轮中暴击的骰子数 个 Z 面骰,统计暴击数,判断进入下一轮或结束。以此类推。

    最终的骰点结果为:暴击轮数 * 10 + 最后一轮中最大点数。

    表达式形如 <X>c<Y>[m<Z>]。其中的大写字母用相应参数替换。

    ',7)),e("div",B,[t[15]||(t[15]=e("p",{class:"custom-block-title"},"示例",-1)),o(d,{messages:[{content:".r 4c3m7",send:!0},{content:"<木落>掷出了 4c3m7=[出目32/9 轮数:4 {<4>,2,<4>,<5>},{<7>,1,2},{<7>},{2}]=32"}]})]),t[53]||(t[53]=e("p",null,[n("在计算过程中,每一轮骰点被包含在一对花括号 "),e("code",null,"{}"),n(" 中;达到暴击线 Y 的骰点用 "),e("code",null,"<>"),n(" 标记。")],-1)),t[54]||(t[54]=e("h3",{id:"混合运算",tabindex:"-1"},[n("混合运算 "),e("a",{class:"header-anchor",href:"#混合运算","aria-label":'Permalink to "混合运算"'},"​")],-1)),t[55]||(t[55]=e("p",null,[n("以上所有骰法,加、减、乘、除、乘方等 5 个数学运算,以及括号 "),e("code",null,"()"),n(" 可以被组合使用,以进行更复杂的运算。")],-1)),e("div",M,[t[16]||(t[16]=e("p",{class:"custom-block-title"},"示例",-1)),o(d,{messages:[{content:".r 30 + (-1d20) + 49",send:!0},{content:"<木落>掷出了 30 + (-1d20) + 49=30 + -1[1d20=1] + 49=78"},{content:".r d50 * 3 + 2",send:!0},{content:"<木落>掷出了 d50 * 3 + 2=21[1d50=21] * 3 + 2=65"},{content:".r d50 * 3 + (2 - p2) 多项式",send:!0},{content:"由于多项式,<木落>掷出了 d50 * 3 + (2 - p2)=25[1d50=25] * 3 + -64[D100=6, 惩罚 6 5]=11"}]})]),t[56]||(t[56]=s("

    特别地,上文所述的「骰法」d b p f a c 均可作为运算符使用。

    ",1)),e("div",y,[t[17]||(t[17]=e("p",{class:"custom-block-title"},"示例",-1)),o(d,{messages:[{content:".r 1d1d1d1d1d1d1d1d1d1d1d1d1d1d(20+1d3*4)",send:!0},{content:"<木落>掷出了 1d1d1d1d1d1d1d1d1d1d1d1d1d1d(20+1d3*4)=13"},{content:".r 1d10+(1+32)d(4*6)d20",send:!0},{content:"<木落>掷出了 1d10+(1+32)d(4*6)d20=1[1d10=1] + 3941[33d24=384,384d20=3941]=3942"}]})]),t[57]||(t[57]=s('

    .rh 暗骰

    这个指令的格式与普通骰点 .r 完全相同,区别在于发送骰点结果的方式。

    在发送指令的群聊中,海豹核心会进行提示,但提示不包含骰点结果。

    骰点结果将由海豹核心私聊给指令发送者。

    收不到结果?

    在 QQ 平台上,如果你不是海豹账号的好友,将无法进行私聊。也就无法收到暗骰结果。

    ',5)),e("div",T,[t[18]||(t[18]=e("p",{class:"custom-block-title"},"示例",-1)),o(c,null,{default:l(()=>[o(r,{label:"群聊"},{default:l(()=>[o(d,{messages:[{content:".rh d50",send:!0},{content:"命运正在低语!"}]})]),_:1}),o(r,{label:"收到的私聊"},{default:l(()=>[o(d,{messages:[{content:`来自群<群名>(群号)的暗骰: +<木落>掷出了 d10=[1d10=3]=3`}]})]),_:1})]),_:1})]),t[58]||(t[58]=e("h2",{id:"rx-rxh-特殊骰点",tabindex:"-1"},[e("code",null,".rx"),n(" / "),e("code",null,".rxh"),n(" 特殊骰点 "),e("a",{class:"header-anchor",href:"#rx-rxh-特殊骰点","aria-label":'Permalink to "`.rx` / `.rxh` 特殊骰点"'},"​")],-1)),t[59]||(t[59]=e("p",null,[n("这个指令的格式与普通骰点 "),e("code",null,".r"),n(" 完全相同,区别在于允许额外 AT 其他人,以使用对方的属性。")],-1)),t[60]||(t[60]=e("p",null,"这种操作称为「代骰」,你会在许多其他指令中看到代骰用法。",-1)),e("div",N,[t[19]||(t[19]=e("p",{class:"custom-block-title"},"示例",-1)),t[20]||(t[20]=e("p",null,"此时木落的侦查是 75,Szz 的侦查是 80",-1)),o(d,{messages:[{content:".rx 侦查+1d20**2",send:!0},{content:"<木落>掷出了 侦查+1d20**2=75[侦查=75] + 324[1d20=18]=399"},{content:".rx 侦查+1d20**2 @Szz",send:!0},{content:`由<木落>代骰: +掷出了 侦查+1d20**2=80[侦查=80] + 144[1d20=12]=224`}]})]),t[61]||(t[61]=s('

    .nn 角色名设定

    .nn 查看当前角色名。

    .nn <角色名> 修改角色名,角色名中不能带有空格。

    .nn clr 重置角色名,即,将角色名设置为 IM 平台的昵称。

    角色名被用于在进行各种操作和记录 Log 时显示。

    ',5)),e("div",O,[t[21]||(t[21]=e("p",{class:"custom-block-title"},"示例",-1)),o(d,{messages:[{content:".nn 简·拉基·茨德",send:!0},{content:"<木落>(IM 账号)的昵称被设定为<简·拉基·茨德>"},{content:".r",send:!0},{content:"<简·拉基·茨德>掷出了 D100=16"},{content:".nn",send:!0},{content:"玩家的当前昵称为: <简·拉基·茨德>"},{content:".nn clr",send:!0},{content:"<简·拉基·茨德>(IM 账号)的昵称已重置为<木落>"}]})]),t[62]||(t[62]=s('

    .pc 角色卡管理

    信息

    为了使用这个指令,需要先介绍海豹核心管理你角色卡的方式。

    在每个群聊(对于这里,私聊也被认为是一个特殊的群聊)中,你都自动拥有一张独立的角色卡。这些角色卡互相无任何影响。

    你还可以拥有若干与特定群聊无关的角色卡,这些角色卡可以被绑定到任意数量的群聊。这时,绑定的群聊中角色数据互相同步,在一处的修改就会影响其他各处。

    pc 指令的作用是管理上述第二种群聊无关角色卡。

    .pc new <角色名> 新建一张角色卡,并绑定到当前群聊。

    .pc save [<角色名>] 将你当前群聊中的独立卡数据保存为个人角色卡。你可指定保存的角色名,如不指定,将使用当前群聊中你的角色名。

    .pc list 列出你所保存的所有角色。

    .pc tag (<角色名>|<角色序号>) 将指定角色卡绑定到当前群聊。

    .pc tag 不带有角色名参数,将本群的绑定关系解除。你在本群的角色将会恢复为独立卡的数据。

    .pc untagAll (<角色名>|<角色序号>) 将指定角色卡从其绑定的所有群解绑。

    .pc load (<角色名>|<角色序号>) 使用指定角色卡的数据覆盖当前群聊的独立卡。这不会将角色卡绑定到当前群聊。

    .pc del/rm (<角色名>|<角色序号>) 删除指定角色卡。

    .find 词条查询指令

    海豹核心默认搭载了 CoC 的《怪物之锤》、《魔法大典》和 D&D 规则的一系列资料。这些资料在海豹的 data/helpdpc 目录下的不同文件中被整理成词条,并支持使用此指令进行查询。

    .find [#<分组名>] <关键字> [--num=<页大小>] [--page=<页码>] 用关键字进行词条查询;如果提供了分组名,则只在指定分组中进行查询;可指定每页大小和页码,默认为每页 4 条,显示第 1 页。

    「分组名」是指海豹 data/helpdoc 目录下的子目录名。对于内置的帮助文档,分组名分别是「COC」和「DND」。

    .find <数字ID> 显示该 ID 的词条。

    .find --rand 显示随机词条。

    别名:.查询

    查询功能在不同设备上的实现是不同的。在 x86 设备上,海豹核心使用稍微更多的内存使用全文搜索,这赋予了查询指令强大的获取能力。在其他平台上,由于搜索库的限制,海豹核心使用词条标题模糊搜索。

    ',18)),e("p",null,[t[22]||(t[22]=n("从 ")),o(p,{type:"tip",text:"v1.4.2"}),t[23]||(t[23]=n(" 版本起,你可以在 WebUI 的「扩展功能 - 帮助文档」中设置分组的别名。"))]),e("h3",Y,[t[24]||(t[24]=n("指定默认查询分组 ")),o(p,{type:"tip",text:"v1.4.2"}),t[25]||(t[25]=n()),t[26]||(t[26]=e("a",{class:"header-anchor",href:"#指定默认查询分组","aria-label":'Permalink to "指定默认查询分组 "'},"​",-1))]),e("p",null,[t[27]||(t[27]=n("从 ")),o(p,{type:"tip",text:"v1.4.2"}),t[28]||(t[28]=n(" 版本起,海豹支持在每个群组中分别设置默认的查询分组。"))]),t[63]||(t[63]=e("p",null,[e("code",null,".find config --group"),n(" 查看当前群组的默认查询分组。")],-1)),t[64]||(t[64]=e("p",null,[e("code",null,".find config --group=<分组名>"),n(" 设置当前群组的默认查询分组。")],-1)),t[65]||(t[65]=e("p",null,[e("code",null,".find config --groupclr"),n(" 清除当前群组的默认查询分组。")],-1)),e("div",w,[t[29]||(t[29]=e("p",{class:"custom-block-title"},"示例",-1)),o(d,{messages:[{content:".find config --group=COC",send:!0},{content:"指定默认搜索分组为COC"},{content:".find 火球术",send:!0},{content:"未找到搜索结果"},{content:".find config --groupclr",send:!0},{content:"已清空默认搜索分组,原分组为COC"},{content:".find 火球术",send:!0},{content:`[全文搜索]最优先结果: +词条: PHB法术:火球术`}]})]),t[66]||(t[66]=e("h3",{id:"全文搜索",tabindex:"-1"},[n("全文搜索 "),e("a",{class:"header-anchor",href:"#全文搜索","aria-label":'Permalink to "全文搜索"'},"​")],-1)),e("div",W,[t[30]||(t[30]=e("p",{class:"custom-block-title"},"示例",-1)),o(d,{messages:[{content:".find 30尺 法术",send:!0},{content:`全部结果: +[序号3066]【术士:超魔法:远程法术】 匹配度 0.16 +[序号3015]【游侠:驯兽师:法术共享】 匹配度 0.13 +[序号2396]【法术详述:迷踪步】 匹配度 0.12 +[序号1319]【法术详述:阿迦纳萨喷火术】 匹配度 0.12 +[序号507]【法术详述:智能堡垒/智力堡垒/智慧堡垒/智能壁垒/心智堡垒/心智壁垒】 匹配度 0.12 +[序号2514]【法术详述:水下呼吸/水中呼吸】 匹配度 0.11 +[序号2212]【法术详述:原力法阵】 匹配度 0.11 +[序号1403]【法术详述:众星冠冕/星辰冠冕/星之冠冕】 匹配度 0.11 +[序号2243]【法术详述:造水/枯水术/造水术/枯水术】 匹配度 0.11 +[序号2176]【法术详述:秘法眼】 匹配度 0.11 + +(本次搜索由全文搜索完成)`}]})]),t[67]||(t[67]=e("p",null,"因为多个文本匹配度相近,因此没有列出最佳匹配条目的正文内容。用这条指令可以查看:",-1)),e("div",Z,[t[31]||(t[31]=e("p",{class:"custom-block-title"},"示例",-1)),o(d,{messages:[{content:".find 2212",send:!0},{content:`词条: 法术详述:原力法阵 +原力法阵 Circle of Power +圣武士 +5环 防护 +施法时间:1动作 +施法距离:自身(30尺半径) +法术成分:V +持续时间:专注,至多10分钟 +你身上发出神圣能量并以扭曲散溢的魔法能量构成一个半径30尺的球状力场。法术持续时间内力场将以你为中心随你移动。力场范围内的友方生物(包括你自己)为对抗法术或其他魔法效应而进行的豁免检定具有优势。此外,受本法术效应影响的生物在对抗豁免成功则伤害减半的法术或魔法效应时,若成功则不受伤害。`}]})]),t[68]||(t[68]=e("p",null,[e("strong",null,"这么好用,那代价是什么呢?")],-1)),t[69]||(t[69]=e("p",null,"更多的内存占用和变慢的启动速度。",-1)),t[70]||(t[70]=e("p",null,[n("大致来说,"),e("strong",null,"每 1 MB 帮助文本会产生约 15 MB 额外内存占用"),n("。")],-1)),t[71]||(t[71]=e("h3",{id:"快速文档查找",tabindex:"-1"},[n("快速文档查找 "),e("a",{class:"header-anchor",href:"#快速文档查找","aria-label":'Permalink to "快速文档查找"'},"​")],-1)),e("div",S,[t[32]||(t[32]=e("p",{class:"custom-block-title"},"示例",-1)),o(d,{messages:[{content:".find 测试词条",send:!0},{content:`最优先结果: +词条: 测试:测试词条 +他在命运的沉浮中随波逐流, 扮演着受害与加害者的双重角色 + +全部结果: +[序号2]【测试:测试词条】 匹配度 67.00 + +(本次搜索由快速文档查找完成)`}]})]),t[72]||(t[72]=s('

    致谢

    CoC《怪物之锤》的整理者为:蜜瓜包October

    CoC 魔法大典的整理者为:魔骨NULLDr.Amber

    D&D 系列资料的整理者主要为 DicePP 项目组成员,包括Farevell梨子花作噫邪恶惠惠赵小安等。

    这些资料的原始出处和译者很多已经不可考,此处无法一一列出,甚为遗憾。

    也在此感谢一代又一代无名作者和译者做出的工作。

    .help 帮助指令

    .help [<词条名>] 显示指定词条的帮助文档。

    .help reload 重新装载帮助文档。仅 Master 可用。

    .set 设定默认骰子面数 / 设定游戏系统

    .set info 查看当前默认骰子面数。如果从未设置过,将显示为「0」。

    .set dnd 设置群内骰子面数为 20,并自动开启 D&D 扩展。

    .set (coc|coc7) 设置群内骰子面数为 100,并自动开启 CoC 扩展。

    .set <面数> 设定群内默认骰子面数。

    .set <面数> --my 设定个人专属默认骰子面数。

    .set clr 清除群内骰子面数设置。

    .set clr --my 清除个人骰子面数设置。

    如果通过「规则模板」机制添加了自设规则,并有相关配置,可以使用 .set <规则名> 切换为对应规则的默认骰面数。你可以通过 .set help 来查看当前可用的关键字。

    ',18)),e("div",U,[t[33]||(t[33]=e("p",{class:"custom-block-title"},"示例",-1)),o(d,{messages:[{content:".set 20",send:!0},{content:"设定默认骰子面数为 20"},{content:".set coc",send:!0},{content:`设定群组默认骰子面数为 100 +提示:已切换至100面骰,并自动开启coc7扩展`},{content:".set dnd",send:!0},{content:`设定群组默认骰子面数为 20 +提示:已切换至20面骰,并自动开启dnd5e扩展。`},{content:".set info",send:!0},{content:`个人骰子面数: 0 +群组骰子面数: 20 +当前骰子面数: 20`}]})]),t[73]||(t[73]=s('

    .botlist 机器人列表

    这个指令用于标记同一群聊内的其他机器人。

    当一个账号被标记后,对于与 TA 相关的消息,海豹核心会按以下规则进行忽略:

    1. 如果 TA 被 AT,忽略;
    2. 如果是 TA 发出的消息,忽略。

    这可避免机器人互相响应造成的危险的循环。

    .botlist add @A @B @C 标记 A、B、C 为机器人。

    .botlist add @A @B --s 同上,不过骰子不会做出回复。

    .botlist del @A @B @C 去除 A、B、C 的标记。

    .botlist list 查看当前标记列表。

    ',9))])}const J=i(m,[["render",X]]);export{G as __pageData,J as default}; diff --git a/assets/use_deck_and_reply.md.B3BngUpU.js b/assets/use_deck_and_reply.md.B3BngUpU.js new file mode 100644 index 000000000..36f247a54 --- /dev/null +++ b/assets/use_deck_and_reply.md.B3BngUpU.js @@ -0,0 +1,29 @@ +import{_ as c,c as s,a6 as o,j as t,G as n,a as d,B as r,o as l}from"./chunks/framework.B1keMFNq.js";const y=JSON.parse('{"title":"牌堆 自定义回复","description":"","frontmatter":{"lang":"zh-cn","title":"牌堆 自定义回复"},"headers":[],"relativePath":"use/deck_and_reply.md","filePath":"use/deck_and_reply.md","lastUpdated":1728702230000}'),i={name:"use/deck_and_reply.md"},p={class:"info custom-block"},u={class:"info custom-block"},h={class:"info custom-block"};function m(k,e,f,b,w,E){const a=r("ChatBox");return l(),s("div",null,[e[3]||(e[3]=o('

    牌堆 自定义回复

    本节内容

    本节将展示牌堆和自定义回复相关的指令,请善用侧边栏和搜索,按需阅读文档。

    提示:如何自定义?

    牌堆和自定义回复都是海豹提供的扩展性功能,此处只展示相关控制指令,如果你想知道如何进行自定义,请转到 进阶介绍

    .draw 抽牌 / 管理牌堆

    关于牌堆功能的一般性介绍,请参阅 配置 - 牌堆

    .draw help 显示帮助信息。

    信息查询

    .draw list 列出当前装载的牌堆列表。

    .draw keys <牌堆> 查看特定牌堆可抽取的牌组列表。

    .draw search <牌组名称> 模糊搜索指定牌组。

    .draw desc <牌组名称> 查看牌组所属牌堆的详细信息。

    ',11)),t("div",p,[e[0]||(e[0]=t("p",{class:"custom-block-title"},"示例",-1)),n(a,{messages:[{content:".draw list",send:!0},{content:`载入并开启的牌堆: +- GRE单词 格式: Dice! 作者:于言诺 版本:1.0.1 牌组数量: 1 +- IELTS单词 格式: Dice! 作者:于言诺 版本:1.0.1 牌组数量: 1 +- TOEFL单词 格式: Dice! 作者:于言诺 版本:1.0.1 牌组数量: 1 +- SealDice内置牌堆 格式: Dice! 作者:<因过长略去> 版本:1.2.0 牌组数量: 8`},{content:".draw keys GRE单词",send:!0},{content:`牌组关键字列表: +GRE单词`},{content:".draw search 单词",send:!0},{content:`找到以下牌组: +- GRE单词 +- TOEFL单词 +- IELTS单词`},{content:".draw desc GRE单词",send:!0},{content:`牌堆信息: +牌堆: GRE单词 +格式: Dice! +作者: 于言诺 +版本: 1.0.1 +牌组数量: 1 +时间: 2022/5/23 +更新时间: 2022/8/16 +牌组: GRE单词`}]})]),e[4]||(e[4]=o('

    需要说明,在以上的例子中,「GRE单词」同时是牌堆名与牌组名。在 .draw keys GRE单词 中,它作为牌堆名出现;在 .draw desc GRE单词 中,它作为牌组名出现。

    .draw keys 列出所有可抽取的牌组列表。

    注意:谨慎使用

    这一指令会将所有可抽取的牌组列出,在牌组较多时造成刷屏。

    抽牌

    .draw <牌组名称> (<数量>#) 在指定牌组抽指定数量的牌,默认为抽 1 张。

    ',5)),t("div",u,[e[1]||(e[1]=t("p",{class:"custom-block-title"},"示例",-1)),n(a,{messages:[{content:".draw GRE单词 3#",send:!0},{content:`<木落>抽出了: +GRE3178 +invoice n. +发票, 发货单, 货物。`},{content:`<木落>抽出了: +GRE4889 +rig n. +索具装备, 钻探设备, 钻探平台, 钻塔。`},{content:`<木落>抽出了: +GRE5421 +austerity n. +严峻, 严厉, 朴素, 节俭, 苦行。`}]})]),e[5]||(e[5]=t("p",null,[d("当指定的牌组名称不存在时,将会进行模糊搜索,效果与 "),t("code",null,"draw search"),d(" 类似。")],-1)),t("div",h,[e[2]||(e[2]=t("p",{class:"custom-block-title"},"示例",-1)),n(a,{messages:[{content:".draw 单词",send:!0},{content:`找不到这个牌组,但发现一些相似的: +- GRE单词 +- TOEFL单词 +- IELTS单词`}]})]),e[6]||(e[6]=o('

    自定义回复引用牌堆

    对于想要在自定义文案或自定义回复中引用牌堆的骰主,可使用 #{DRAW-关键词} 进行调用。

    牌堆管理

    .draw reload 重新加载牌堆,仅限 Master 使用。

    .reply 管理自定义回复

    关于自定义回复功能的一般性介绍,请参阅 配置 - 自定义回复

    .reply (on|off) 开启、关闭本群的自定义回复功能。

    以上指令等价于 .ext reply (on|off)

    ',8))])}const G=c(i,[["render",m]]);export{y as __pageData,G as default}; diff --git a/assets/use_deck_and_reply.md.B3BngUpU.lean.js b/assets/use_deck_and_reply.md.B3BngUpU.lean.js new file mode 100644 index 000000000..36f247a54 --- /dev/null +++ b/assets/use_deck_and_reply.md.B3BngUpU.lean.js @@ -0,0 +1,29 @@ +import{_ as c,c as s,a6 as o,j as t,G as n,a as d,B as r,o as l}from"./chunks/framework.B1keMFNq.js";const y=JSON.parse('{"title":"牌堆 自定义回复","description":"","frontmatter":{"lang":"zh-cn","title":"牌堆 自定义回复"},"headers":[],"relativePath":"use/deck_and_reply.md","filePath":"use/deck_and_reply.md","lastUpdated":1728702230000}'),i={name:"use/deck_and_reply.md"},p={class:"info custom-block"},u={class:"info custom-block"},h={class:"info custom-block"};function m(k,e,f,b,w,E){const a=r("ChatBox");return l(),s("div",null,[e[3]||(e[3]=o('

    牌堆 自定义回复

    本节内容

    本节将展示牌堆和自定义回复相关的指令,请善用侧边栏和搜索,按需阅读文档。

    提示:如何自定义?

    牌堆和自定义回复都是海豹提供的扩展性功能,此处只展示相关控制指令,如果你想知道如何进行自定义,请转到 进阶介绍

    .draw 抽牌 / 管理牌堆

    关于牌堆功能的一般性介绍,请参阅 配置 - 牌堆

    .draw help 显示帮助信息。

    信息查询

    .draw list 列出当前装载的牌堆列表。

    .draw keys <牌堆> 查看特定牌堆可抽取的牌组列表。

    .draw search <牌组名称> 模糊搜索指定牌组。

    .draw desc <牌组名称> 查看牌组所属牌堆的详细信息。

    ',11)),t("div",p,[e[0]||(e[0]=t("p",{class:"custom-block-title"},"示例",-1)),n(a,{messages:[{content:".draw list",send:!0},{content:`载入并开启的牌堆: +- GRE单词 格式: Dice! 作者:于言诺 版本:1.0.1 牌组数量: 1 +- IELTS单词 格式: Dice! 作者:于言诺 版本:1.0.1 牌组数量: 1 +- TOEFL单词 格式: Dice! 作者:于言诺 版本:1.0.1 牌组数量: 1 +- SealDice内置牌堆 格式: Dice! 作者:<因过长略去> 版本:1.2.0 牌组数量: 8`},{content:".draw keys GRE单词",send:!0},{content:`牌组关键字列表: +GRE单词`},{content:".draw search 单词",send:!0},{content:`找到以下牌组: +- GRE单词 +- TOEFL单词 +- IELTS单词`},{content:".draw desc GRE单词",send:!0},{content:`牌堆信息: +牌堆: GRE单词 +格式: Dice! +作者: 于言诺 +版本: 1.0.1 +牌组数量: 1 +时间: 2022/5/23 +更新时间: 2022/8/16 +牌组: GRE单词`}]})]),e[4]||(e[4]=o('

    需要说明,在以上的例子中,「GRE单词」同时是牌堆名与牌组名。在 .draw keys GRE单词 中,它作为牌堆名出现;在 .draw desc GRE单词 中,它作为牌组名出现。

    .draw keys 列出所有可抽取的牌组列表。

    注意:谨慎使用

    这一指令会将所有可抽取的牌组列出,在牌组较多时造成刷屏。

    抽牌

    .draw <牌组名称> (<数量>#) 在指定牌组抽指定数量的牌,默认为抽 1 张。

    ',5)),t("div",u,[e[1]||(e[1]=t("p",{class:"custom-block-title"},"示例",-1)),n(a,{messages:[{content:".draw GRE单词 3#",send:!0},{content:`<木落>抽出了: +GRE3178 +invoice n. +发票, 发货单, 货物。`},{content:`<木落>抽出了: +GRE4889 +rig n. +索具装备, 钻探设备, 钻探平台, 钻塔。`},{content:`<木落>抽出了: +GRE5421 +austerity n. +严峻, 严厉, 朴素, 节俭, 苦行。`}]})]),e[5]||(e[5]=t("p",null,[d("当指定的牌组名称不存在时,将会进行模糊搜索,效果与 "),t("code",null,"draw search"),d(" 类似。")],-1)),t("div",h,[e[2]||(e[2]=t("p",{class:"custom-block-title"},"示例",-1)),n(a,{messages:[{content:".draw 单词",send:!0},{content:`找不到这个牌组,但发现一些相似的: +- GRE单词 +- TOEFL单词 +- IELTS单词`}]})]),e[6]||(e[6]=o('

    自定义回复引用牌堆

    对于想要在自定义文案或自定义回复中引用牌堆的骰主,可使用 #{DRAW-关键词} 进行调用。

    牌堆管理

    .draw reload 重新加载牌堆,仅限 Master 使用。

    .reply 管理自定义回复

    关于自定义回复功能的一般性介绍,请参阅 配置 - 自定义回复

    .reply (on|off) 开启、关闭本群的自定义回复功能。

    以上指令等价于 .ext reply (on|off)

    ',8))])}const G=c(i,[["render",m]]);export{y as __pageData,G as default}; diff --git a/assets/use_dnd5e.md.D7hbdL__.js b/assets/use_dnd5e.md.D7hbdL__.js new file mode 100644 index 000000000..d14bcca5e --- /dev/null +++ b/assets/use_dnd5e.md.D7hbdL__.js @@ -0,0 +1,60 @@ +import{_ as l,c,a6 as d,j as e,G as o,a as s,B as a,o as i}from"./chunks/framework.B1keMFNq.js";const S=JSON.parse('{"title":"龙与地下城 5E","description":"","frontmatter":{"lang":"zh-cn","title":"龙与地下城 5E"},"headers":[],"relativePath":"use/dnd5e.md","filePath":"use/dnd5e.md","lastUpdated":1728702230000}'),r={name:"use/dnd5e.md"},p={class:"info custom-block"},u={class:"info custom-block"},b={class:"info custom-block"},h={class:"info custom-block"},f={class:"info custom-block"},m={class:"info custom-block"},g={class:"info custom-block"},k={class:"info custom-block"},x={class:"info custom-block"},q={class:"info custom-block"},v={class:"info custom-block"},P={class:"info custom-block"},D={class:"info custom-block"},B={class:"info custom-block"},w={class:"info custom-block"};function E(C,t,N,V,$,y){const n=a("ChatBox");return i(),c("div",null,[t[20]||(t[20]=d('

    龙与地下城 5E

    本节内容

    本节将展示 D&D 5E 玩家所需指令,请善用侧边栏和搜索,按需阅读文档。

    我们假定你已对 D&D 规则有适当了解,本节只涉及如何使用海豹核心完成规则中指定的操作。

    龙与地下城

    「龙与地下城」(Dungeons & Dragons, D&D, DnD)是一款剑与魔法奇幻背景的叙事性角色扮演游戏。与孩提时代的过家家扮演游戏相似,D&D 依靠的是玩家无穷的想象力。

    你所需要做的,即是描述场景如暴风骤雨里,夜空下的某座高耸古堡。然后想象奇幻世界中的冒险者们会如何迎接即将到来的挑战。

    .dnd / .dndx 生成随机属性(制卡)

    .dnd [<数量>] 随机生成指定组数的待分配属性,如果省略数量将生成 1 组。

    .dndx [<数量>] 随机生成带属性名的结果。

    ',6)),e("div",p,[t[0]||(t[0]=e("p",{class:"custom-block-title"},"示例",-1)),o(n,{messages:[{content:".dnd 5",send:!0},{content:`<木落>的DnD5e人物作成(自由分配模式): +[16, 16, 14, 11, 10, 9] = 76 +[16, 15, 15, 12, 9, 9] = 76 +[16, 15, 14, 13, 13, 12] = 83 +[18, 17, 15, 14, 13, 8] = 85 +[15, 14, 13, 13, 10, 8] = 73 +获取带属性名的预设请用.dndx`},{content:".dndx 5",send:!0},{content:`<木落>的DnD5e人物作成(预设模式): +力量:16 体质:9 敏捷:14 智力:10 感知:13 魅力:10 共计:72 +力量:13 体质:12 敏捷:8 智力:8 感知:14 魅力:9 共计:64 +力量:16 体质:10 敏捷:11 智力:14 感知:12 魅力:10 共计:73 +力量:9 体质:17 敏捷:15 智力:9 感知:10 魅力:13 共计:73 +力量:12 体质:6 敏捷:8 智力:13 感知:10 魅力:8 共计:57 +自由分配模式请用.dnd`}]})]),t[21]||(t[21]=d('

    .ri 先攻设置

    .ri <先攻值> [<角色名>] 为指定角色设定先攻值。如果省略角色名则默认为当前角色,以下的角色名部分相同。

    其中,先攻值部分支持以下四种写法

    1. .ri 12 固定值 12;
    2. .ri +2 掷骰 D20+2;
    3. .ri =D20+3 掷骰 D20+3;
    4. .ri +1D8 掷骰 D20+1D8。

    .ri <单项>, <单项>, ... 批量设定多个角色的先攻值,每个单项都是 <先攻值> <角色名> 形式。

    ',5)),e("div",u,[t[1]||(t[1]=e("p",{class:"custom-block-title"},"示例",-1)),o(n,{messages:[{content:".ri +2",send:!0},{content:`<木落>对先攻点数设置如下: +1. 木落: 15[1d20=15] + 2=17`},{content:".ri +3 狗头人1",send:!0},{content:`<木落>对先攻点数设置如下: +1. 狗头人1: 15[1d20=15] + 3=18`},{content:".ri =D20+2 狗头人1",send:!0},{content:`<木落>对先攻点数设置如下: +1. 狗头人1: 13`},{content:".ri 30 狗头人1",send:!0},{content:`<木落>对先攻点数设置如下: +1. 狗头人1: 30`},{content:".ri 优势+2 狗头人2",send:!0},{content:`<木落>对先攻点数设置如下: +1. 狗头人2: 13[{13 | 11 }] + 2=15`},{content:".ri +2 狗头人1, 3 狗头人2, =d30 狗头人3, +3",send:!0},{content:`<木落>对先攻点数设置如下: +1. 木落: 19[1d20=19] + 3=22 +2. 狗头人3: 17 +3. 狗头人1: 15[1d20=15] + 2=17 +4. 狗头人2: 3`}]})]),t[22]||(t[22]=d('

    .init 先攻列表

    .init 查看先攻列表。

    .init del <单位1> <单位2> ... 从先攻列表中删除指定单位。

    .init set <单位名称> <先攻表达式> 为指定单位设定先攻值。

    .init clr 清除先攻列表。

    .init end 结束当前的回合,并开始下一回合;如果轮到玩家行动,会 at 将要行动的玩家。

    .init help 显示帮助。

    ',7)),e("div",b,[t[2]||(t[2]=e("p",{class:"custom-block-title"},"示例",-1)),t[3]||(t[3]=e("p",null,"已经设置了先攻列表的情况",-1)),o(n,{messages:[{content:".init",send:!0},{content:`当前先攻列表为: +1. 木落: 22 +2. 狗头人3: 17 +3. 狗头人1: 17 +4. 狗头人2: 3 +当前回合:木落`},{content:".init del 狗头人2",send:!0},{content:`<木落>将以下单位从先攻列表中移除: +1. 狗头人2`},{content:".init set 狗头人3 16",send:!0},{content:"<木落>已设置 狗头人3 的先攻点为16 16"},{content:".init end",send:!0},{content:"【木落】戏份结束了,下面该【狗头人1】出场了!"}]})]),t[23]||(t[23]=d('

    .st 操作角色卡

    .st help 获取帮助信息

    列出属性

    .st show 列出角色卡所有属性。

    .st show <属性1> <属性2> ... 列出指定的属性数值。

    .st show <数值> 列出高于指定数值的属性。

    .st export 导出属性值和法术位。

    删除属性

    .st (clr|clear) 删除所有属性数值和法术位。

    .st del <属性1> <属性2> ... 删除指定属性。

    更新属性值

    .st 模板 获取角色卡录入模板。

    .st <属性>:<值> 设置指定属性,技能加值会自动计算。

    .st <属性>=<值> 与前一用法相同,可避免中英文冒号的识别问题。

    .st <属性>±<表达式> 将指定属性增加或减去表达式的计算结果。表达式中可以包含骰点。如 .st 生命+1d4

    .st hp-1d6 --over 前一用法的特殊情况,不计算临时生命扣血。

    ',16)),e("div",h,[t[4]||(t[4]=e("p",{class:"custom-block-title"},"示例",-1)),o(n,{messages:[{content:".st 模板",send:!0},{content:`人物卡模板(第二行文本): +.dst 力量:10 体质:10 敏捷:10 智力:10 感知:10 魅力:10 hp:10 hpmax: 10 熟练:2 运动:0 特技:0 巧手:0 隐匿:0 调查:0 奥秘:0 历史:0 自然:0 宗教:0 察觉:0 洞悉:0 驯养:0 医疗:0 生存:0 说服:0 欺诈:0 威吓:0 表演:0 +注意: 技能只填写修正值即可,属性调整值会自动计算。熟练写为“运动*:0”`},{content:".st 力量:12 体质:10 敏捷:10 智力:10 感知:10 魅力:10 hp:10 hpmax: 10 熟练:2 运动*:3 特技:1 巧手:0 隐匿:0 调查:0 奥秘:0 历史:0 自然:0 宗教:0 察觉:0 洞悉:0 驯养:0 医疗:0 生存:0 说服:0 欺诈:0 威吓:0 表演:0",send:!0},{content:`<木落>的dnd5e人物属性设置如下: +读入: 力量:12, 体质:10, 敏捷:10, 智力:10, 感知:10, 魅力:10, hp:10, hpmax:10, 熟练:2, 运动:3[技能, 熟练], 特技:1[技能], 巧手:0[技能], 隐匿:0[技能], 调查:0[技能], 奥秘:0[技能], 历史:0[技能], 自然:0[技能], 宗教:0[技能], 察觉:0[技能], 洞悉:0[技能], 驯养:0[技能], 医疗:0[技能], 生存:0[技能], 说服:0[技能], 欺诈:0[技能], 威吓:0[技能], 表演:0[技能]`},{content:".st show",send:!0},{content:`<木落>的个人属性为: +力量: 12 敏捷: 10 体质: 10 智力: 10 +感知: 10 魅力: 10 hp: 10 hpmax: 10 +EXP: 0 熟练: 2 特技: 1[基础值1] 运动: 6[基础值3] +(下略)`},{content:".st show 力量 运动 熟练",send:!0},{content:`<木落>的个人属性为: +力量: 12 熟练: 2 运动: 6[基础值3]`},{content:".st 力量 + 2",send:!0},{content:`人物属性设置如下: +修改: 力量(12 ➯ 14)`}]})]),t[24]||(t[24]=e("p",null,"属性修改后,属性调整值会自动变更。不用再行关注。",-1)),e("div",f,[t[5]||(t[5]=e("p",{class:"custom-block-title"},"对生命值的特殊支持",-1)),t[6]||(t[6]=e("ul",null,[e("li",null,"当存在临时生命 (buff 血量),自动优先消耗。若临时生命不足以抵挡伤害,剩余会扣减血量;"),e("li",null,"当生命值归零,若伤害大于等于血量上限,判定人物死亡;"),e("li",null,"当生命值归零,若伤害小于血量上限,人物昏迷;"),e("li",null,"当人物已经昏迷,不足致死的伤害自动折算为死亡豁免失败。")],-1)),o(n,{messages:[{content:".st hp-3 hp-3 hp-3",send:!0},{content:`<木落>的dnd5e人物属性设置如下: +修改: hp(2 ➯ 0), hp(0 ➯ 0), hp(0 ➯ 0) +<木落>遭受了1点过量伤害,生命值降至0,陷入了昏迷! +<木落>在昏迷状态下遭受了3点过量伤害,死亡豁免失败+1! +<木落>在昏迷状态下遭受了3点过量伤害,死亡豁免失败+1!`}]})]),t[25]||(t[25]=d('

    退游小技巧,黑暗录卡:

    text
    .st 力量:4d6k3 体质:4d6k3 敏捷:4d6k3 智力:4d6k3 感知:4d6k3 魅力:4d6k3 hp:10 hpmax: 10 熟练:2 运动:0 特技:0 巧手:0 隐匿:0 调查:0 奥秘:0 历史:0 自然:0 宗教:0 察觉:0 洞悉:0 驯养:0 医疗:0 生存:0 说服:0 欺诈:0 威吓:0 表演:0

    代骰

    以上功能均可以通过附加 @其他人 来操作对方的属性值。

    .rc 检定

    .rc <属性> 进行检定。

    .rc <属性>豁免 进行豁免检定。

    .rc <表达式> 使用可带调整值的表达式进行检定,如 力量+3

    .rc (优势|劣势) <表达式> 进行优势或劣势检定。

    ',9)),e("div",m,[t[7]||(t[7]=e("p",{class:"custom-block-title"},"示例",-1)),o(n,{messages:[{content:".rc 运动",send:!0},{content:`<木落>的“运动”检定结果为: +8[1d20=8] + 6[运动=6] = 14`},{content:".rc 优势 力量+4",send:!0},{content:`<木落>的“力量+4”检定结果为: +17[{17 | 11 }] + 12[力量=12] + 4 = 33`},{content:".rc 劣势 力量+4 推一下试试",send:!0},{content:`<木落>的“推一下试试”检定结果为: +17[{17 | 18 }] + 12[力量=12] + 4 = 33`}]})]),t[26]||(t[26]=e("h3",{id:"代骰-1",tabindex:"-1"},[s("代骰 "),e("a",{class:"header-anchor",href:"#代骰-1","aria-label":'Permalink to "代骰"'},"​")],-1)),t[27]||(t[27]=e("p",null,[s("以上功能均可以通过附加 "),e("code",null,"@其他人"),s(" 来使用对方的技能进行检定。")],-1)),t[28]||(t[28]=e("h3",{id:"奇妙运用",tabindex:"-1"},[s("奇妙运用 "),e("a",{class:"header-anchor",href:"#奇妙运用","aria-label":'Permalink to "奇妙运用"'},"​")],-1)),t[29]||(t[29]=e("p",null,"你可以通过如下方式记录武器的熟练项。",-1)),e("div",g,[t[8]||(t[8]=e("p",{class:"custom-block-title"},"示例",-1)),o(n,{messages:[{content:".st 长剑=4",send:!0},{content:"<木落>的属性录入完成,本次录入了1条数据。"},{content:".rc 长剑",send:!0},{content:`<木落>的“长剑”检定(dnd5e)结果为: +16[1d20=16] + 4[长剑=4] = 20`}]})]),t[30]||(t[30]=d('

    .buff 临时属性

    .buff help 显示帮助。

    .buff 展示当前 buff。

    .buff clr 清除 buff。

    .buff del <属性1> <属性2> ... 删除指定属性的 buff。

    .buff <属性>:<值> 为指定属性设定 buff。

    .buff <属性>±<表达式> 修改指定属性的 buff。

    用于设置临时属性,例如虚假生命:

    ',8)),e("div",k,[t[9]||(t[9]=e("p",{class:"custom-block-title"},"示例",-1)),o(n,{messages:[{content:".st hp:10",send:!0},{content:`<木落>的dnd5e人物属性设置如下: +读入: hp:10`},{content:".buff hp : 1d4+4",send:!0},{content:`<木落>的dnd5e人物Buff属性设置如下: +读入: hp:7`},{content:".st show hp",send:!0},{content:`<木落>的个人属性为: +hp:17[10]`}]})]),t[31]||(t[31]=e("p",null,"也可以用来设置其他属性:",-1)),e("div",x,[t[10]||(t[10]=e("p",{class:"custom-block-title"},"示例",-1)),o(n,{messages:[{content:".st 力量:10 运动:0",send:!0},{content:`<木落>的dnd5e人物属性设置如下: +读入: 力量:10, 运动:0[技能]`},{content:".buff 力量:6",send:!0},{content:`<木落>的dnd5e人物Buff属性设置如下: +读入: 力量:6`},{content:".st show 力量 运动",send:!0},{content:`<木落>的个人属性为: +力量:16[10] 运动:3[0]`}]})]),t[32]||(t[32]=e("p",null,"临时的技能熟练(装备或法术效果):",-1)),e("div",q,[t[11]||(t[11]=e("p",{class:"custom-block-title"},"示例",-1)),o(n,{messages:[{content:".st 力量:10 运动:0 熟练:3",send:!0},{content:`<木落>的dnd5e人物属性设置如下: +读入: 力量:10, 运动:0[技能], 熟练:3`},{content:".buff 运动*:0",send:!0},{content:`<木落>的dnd5e人物Buff属性设置如下: +读入: 运动:0[技能, 熟练*]`},{content:".st show 力量 运动",send:!0},{content:`<木落>的个人属性为: +力量:16[10] 运动:6[0]`}]})]),t[33]||(t[33]=e("p",null,"删除和清空",-1)),e("div",v,[t[12]||(t[12]=e("p",{class:"custom-block-title"},"示例",-1)),o(n,{messages:[{content:".buff del hp",send:!0},{content:"<木落>的如下buff属性被成功删除:hp,失败0项"},{content:".buff clr",send:!0},{content:"<木落>的BUFF数据已经清除,共计0条"}]})]),t[34]||(t[34]=d('

    代骰

    以上功能均可以通过附加 @其他人 来操作对方的 buff。

    .ss 法术位 (spell slots)

    .ss 查看当前法术位状况。

    .ss init 4 3 2 设置 1 2 3 环的法术位上限,以此类推,上不封顶。

    .ss set 2环 4 单独设置某一环的法术位上限,可用逗号分隔地连写多组。

    .ss clr 清除法术位设置。

    .ss rest 恢复所有法术位 (不回复 hp)。

    .ss 3环 +1 增加一个 3 环法术位(不会超过上限)。

    .ss lv3 +1 同上,另一种写法。

    .ss 3环 -1 消耗一个 3 环法术位。

    ',11)),e("div",P,[t[13]||(t[13]=e("p",{class:"custom-block-title"},"示例",-1)),o(n,{messages:[{content:".ss init 3 4 5",send:!0},{content:"为<木落>设置法术位: 1环3个, 2环4个, 3环5个"},{content:".ss 1环 -1",send:!0},{content:"<木落>的1环法术位消耗至2个,上限3个"},{content:".ss",send:!0},{content:"<木落>的法术位状况: 1环:2/3, 2环:4/4, 3环:5/5"},{content:".ss rest",send:!0},{content:"<木落>的法术位已经完全恢复"},{content:".ss set 4环 3",send:!0},{content:"为<木落>设置法术位: 4环3个"}]})]),t[35]||(t[35]=e("h3",{id:"代骰-3",tabindex:"-1"},[s("代骰 "),e("a",{class:"header-anchor",href:"#代骰-3","aria-label":'Permalink to "代骰"'},"​")],-1)),t[36]||(t[36]=e("p",null,[s("以上功能均可以通过附加 "),e("code",null,"@其他人"),s(" 来操作对方的法术位。")],-1)),t[37]||(t[37]=e("h2",{id:"cast-使用法术位",tabindex:"-1"},[e("code",null,".cast"),s(" 使用法术位 "),e("a",{class:"header-anchor",href:"#cast-使用法术位","aria-label":'Permalink to "`.cast` 使用法术位"'},"​")],-1)),t[38]||(t[38]=e("p",null,[e("code",null,".cast <环数> [<消耗数量>]"),s(" 消耗指定数量的指定法术位,省略消耗数量时,消耗 1 个。")],-1)),e("div",D,[t[14]||(t[14]=e("p",{class:"custom-block-title"},"示例",-1)),o(n,{messages:[{content:".cast 2",send:!0},{content:"<木落>的2环法术位消耗至3个,上限4个"}]})]),t[39]||(t[39]=d('

    代骰

    以上功能均可以通过附加 @其他人 来消耗对方的法术位。

    .longrest / .长休

    .longrest 恢复生命值和法术位。当前角色需已设定最大生命值且当前生命值大于 0。

    ',4)),e("div",B,[t[15]||(t[15]=e("p",{class:"custom-block-title"},"示例",-1)),o(n,{messages:[{content:".长休",send:!0},{content:"<木落>的长休: hp得到了恢复,现为12 法术位得到了恢复"},{content:".长休",send:!0},{content:"<木落>的长休: 没有设置hpmax,无法回复hp"}]})]),t[40]||(t[40]=d('

    代骰

    以上功能均可以通过附加 @其他人 来令对方进行长休。

    .ds / .死亡豁免

    .ds help 查看帮助。

    .ds 进行一次死亡豁免检定,此时角色 hp 必须为 0。

    .ds +1d4 检定时添加 1d4 的加值。

    .ds (成功|失败)±<变化值> 死亡豁免的成功或失败数量增加或减少指定值。成功和失败可分别简写为 sf

    .ds stat 查看当前死亡豁免情况。

    st 指令对 hp 的操作也会自动触发死亡豁免。

    ',9)),e("div",w,[t[16]||(t[16]=e("p",{class:"custom-block-title"},"示例",-1)),o(n,{messages:[{content:".st hp:3 hpmax:12",send:!0},{content:`<木落>的dnd5e人物属性设置如下: +读入: hp:3, hpmax:12`},{content:".st hp-10",send:!0},{content:`<木落>的dnd5e人物属性设置如下: +修改: hp(3 ➯ 0) +<木落>遭受了7点过量伤害,生命值降至0,陷入了昏迷!`}]}),t[17]||(t[17]=e("p",null,"昏迷后被攻击:",-1)),o(n,{messages:[{content:`<木落>的dnd5e人物属性设置如下: +修改: hp(0 ➯ 0) +<木落>在昏迷状态下遭受了1点过量伤害,死亡豁免失败+1!`}]}),t[18]||(t[18]=e("p",null,"死亡:",-1)),o(n,{messages:[{content:`<木落>的死亡豁免检定: [1d20=3]=3 有些不妙!死亡豁免失败+1 +你获得了3次死亡豁免检定失败,不幸去世了!`}]}),t[19]||(t[19]=e("p",null,"医学奇迹:",-1)),o(n,{messages:[{content:"<木落>的死亡豁免检定: [1d20=20]=20 你觉得你还可以抢救一下!HP回复1点!"}]})]),t[41]||(t[41]=e("h3",{id:"代骰-6",tabindex:"-1"},[s("代骰 "),e("a",{class:"header-anchor",href:"#代骰-6","aria-label":'Permalink to "代骰"'},"​")],-1)),t[42]||(t[42]=e("p",null,[s("以上功能均可以通过附加 "),e("code",null,"@其他人"),s(" 来令对方进行死亡豁免。")],-1))])}const U=l(r,[["render",E]]);export{S as __pageData,U as default}; diff --git a/assets/use_dnd5e.md.D7hbdL__.lean.js b/assets/use_dnd5e.md.D7hbdL__.lean.js new file mode 100644 index 000000000..d14bcca5e --- /dev/null +++ b/assets/use_dnd5e.md.D7hbdL__.lean.js @@ -0,0 +1,60 @@ +import{_ as l,c,a6 as d,j as e,G as o,a as s,B as a,o as i}from"./chunks/framework.B1keMFNq.js";const S=JSON.parse('{"title":"龙与地下城 5E","description":"","frontmatter":{"lang":"zh-cn","title":"龙与地下城 5E"},"headers":[],"relativePath":"use/dnd5e.md","filePath":"use/dnd5e.md","lastUpdated":1728702230000}'),r={name:"use/dnd5e.md"},p={class:"info custom-block"},u={class:"info custom-block"},b={class:"info custom-block"},h={class:"info custom-block"},f={class:"info custom-block"},m={class:"info custom-block"},g={class:"info custom-block"},k={class:"info custom-block"},x={class:"info custom-block"},q={class:"info custom-block"},v={class:"info custom-block"},P={class:"info custom-block"},D={class:"info custom-block"},B={class:"info custom-block"},w={class:"info custom-block"};function E(C,t,N,V,$,y){const n=a("ChatBox");return i(),c("div",null,[t[20]||(t[20]=d('

    龙与地下城 5E

    本节内容

    本节将展示 D&D 5E 玩家所需指令,请善用侧边栏和搜索,按需阅读文档。

    我们假定你已对 D&D 规则有适当了解,本节只涉及如何使用海豹核心完成规则中指定的操作。

    龙与地下城

    「龙与地下城」(Dungeons & Dragons, D&D, DnD)是一款剑与魔法奇幻背景的叙事性角色扮演游戏。与孩提时代的过家家扮演游戏相似,D&D 依靠的是玩家无穷的想象力。

    你所需要做的,即是描述场景如暴风骤雨里,夜空下的某座高耸古堡。然后想象奇幻世界中的冒险者们会如何迎接即将到来的挑战。

    .dnd / .dndx 生成随机属性(制卡)

    .dnd [<数量>] 随机生成指定组数的待分配属性,如果省略数量将生成 1 组。

    .dndx [<数量>] 随机生成带属性名的结果。

    ',6)),e("div",p,[t[0]||(t[0]=e("p",{class:"custom-block-title"},"示例",-1)),o(n,{messages:[{content:".dnd 5",send:!0},{content:`<木落>的DnD5e人物作成(自由分配模式): +[16, 16, 14, 11, 10, 9] = 76 +[16, 15, 15, 12, 9, 9] = 76 +[16, 15, 14, 13, 13, 12] = 83 +[18, 17, 15, 14, 13, 8] = 85 +[15, 14, 13, 13, 10, 8] = 73 +获取带属性名的预设请用.dndx`},{content:".dndx 5",send:!0},{content:`<木落>的DnD5e人物作成(预设模式): +力量:16 体质:9 敏捷:14 智力:10 感知:13 魅力:10 共计:72 +力量:13 体质:12 敏捷:8 智力:8 感知:14 魅力:9 共计:64 +力量:16 体质:10 敏捷:11 智力:14 感知:12 魅力:10 共计:73 +力量:9 体质:17 敏捷:15 智力:9 感知:10 魅力:13 共计:73 +力量:12 体质:6 敏捷:8 智力:13 感知:10 魅力:8 共计:57 +自由分配模式请用.dnd`}]})]),t[21]||(t[21]=d('

    .ri 先攻设置

    .ri <先攻值> [<角色名>] 为指定角色设定先攻值。如果省略角色名则默认为当前角色,以下的角色名部分相同。

    其中,先攻值部分支持以下四种写法

    1. .ri 12 固定值 12;
    2. .ri +2 掷骰 D20+2;
    3. .ri =D20+3 掷骰 D20+3;
    4. .ri +1D8 掷骰 D20+1D8。

    .ri <单项>, <单项>, ... 批量设定多个角色的先攻值,每个单项都是 <先攻值> <角色名> 形式。

    ',5)),e("div",u,[t[1]||(t[1]=e("p",{class:"custom-block-title"},"示例",-1)),o(n,{messages:[{content:".ri +2",send:!0},{content:`<木落>对先攻点数设置如下: +1. 木落: 15[1d20=15] + 2=17`},{content:".ri +3 狗头人1",send:!0},{content:`<木落>对先攻点数设置如下: +1. 狗头人1: 15[1d20=15] + 3=18`},{content:".ri =D20+2 狗头人1",send:!0},{content:`<木落>对先攻点数设置如下: +1. 狗头人1: 13`},{content:".ri 30 狗头人1",send:!0},{content:`<木落>对先攻点数设置如下: +1. 狗头人1: 30`},{content:".ri 优势+2 狗头人2",send:!0},{content:`<木落>对先攻点数设置如下: +1. 狗头人2: 13[{13 | 11 }] + 2=15`},{content:".ri +2 狗头人1, 3 狗头人2, =d30 狗头人3, +3",send:!0},{content:`<木落>对先攻点数设置如下: +1. 木落: 19[1d20=19] + 3=22 +2. 狗头人3: 17 +3. 狗头人1: 15[1d20=15] + 2=17 +4. 狗头人2: 3`}]})]),t[22]||(t[22]=d('

    .init 先攻列表

    .init 查看先攻列表。

    .init del <单位1> <单位2> ... 从先攻列表中删除指定单位。

    .init set <单位名称> <先攻表达式> 为指定单位设定先攻值。

    .init clr 清除先攻列表。

    .init end 结束当前的回合,并开始下一回合;如果轮到玩家行动,会 at 将要行动的玩家。

    .init help 显示帮助。

    ',7)),e("div",b,[t[2]||(t[2]=e("p",{class:"custom-block-title"},"示例",-1)),t[3]||(t[3]=e("p",null,"已经设置了先攻列表的情况",-1)),o(n,{messages:[{content:".init",send:!0},{content:`当前先攻列表为: +1. 木落: 22 +2. 狗头人3: 17 +3. 狗头人1: 17 +4. 狗头人2: 3 +当前回合:木落`},{content:".init del 狗头人2",send:!0},{content:`<木落>将以下单位从先攻列表中移除: +1. 狗头人2`},{content:".init set 狗头人3 16",send:!0},{content:"<木落>已设置 狗头人3 的先攻点为16 16"},{content:".init end",send:!0},{content:"【木落】戏份结束了,下面该【狗头人1】出场了!"}]})]),t[23]||(t[23]=d('

    .st 操作角色卡

    .st help 获取帮助信息

    列出属性

    .st show 列出角色卡所有属性。

    .st show <属性1> <属性2> ... 列出指定的属性数值。

    .st show <数值> 列出高于指定数值的属性。

    .st export 导出属性值和法术位。

    删除属性

    .st (clr|clear) 删除所有属性数值和法术位。

    .st del <属性1> <属性2> ... 删除指定属性。

    更新属性值

    .st 模板 获取角色卡录入模板。

    .st <属性>:<值> 设置指定属性,技能加值会自动计算。

    .st <属性>=<值> 与前一用法相同,可避免中英文冒号的识别问题。

    .st <属性>±<表达式> 将指定属性增加或减去表达式的计算结果。表达式中可以包含骰点。如 .st 生命+1d4

    .st hp-1d6 --over 前一用法的特殊情况,不计算临时生命扣血。

    ',16)),e("div",h,[t[4]||(t[4]=e("p",{class:"custom-block-title"},"示例",-1)),o(n,{messages:[{content:".st 模板",send:!0},{content:`人物卡模板(第二行文本): +.dst 力量:10 体质:10 敏捷:10 智力:10 感知:10 魅力:10 hp:10 hpmax: 10 熟练:2 运动:0 特技:0 巧手:0 隐匿:0 调查:0 奥秘:0 历史:0 自然:0 宗教:0 察觉:0 洞悉:0 驯养:0 医疗:0 生存:0 说服:0 欺诈:0 威吓:0 表演:0 +注意: 技能只填写修正值即可,属性调整值会自动计算。熟练写为“运动*:0”`},{content:".st 力量:12 体质:10 敏捷:10 智力:10 感知:10 魅力:10 hp:10 hpmax: 10 熟练:2 运动*:3 特技:1 巧手:0 隐匿:0 调查:0 奥秘:0 历史:0 自然:0 宗教:0 察觉:0 洞悉:0 驯养:0 医疗:0 生存:0 说服:0 欺诈:0 威吓:0 表演:0",send:!0},{content:`<木落>的dnd5e人物属性设置如下: +读入: 力量:12, 体质:10, 敏捷:10, 智力:10, 感知:10, 魅力:10, hp:10, hpmax:10, 熟练:2, 运动:3[技能, 熟练], 特技:1[技能], 巧手:0[技能], 隐匿:0[技能], 调查:0[技能], 奥秘:0[技能], 历史:0[技能], 自然:0[技能], 宗教:0[技能], 察觉:0[技能], 洞悉:0[技能], 驯养:0[技能], 医疗:0[技能], 生存:0[技能], 说服:0[技能], 欺诈:0[技能], 威吓:0[技能], 表演:0[技能]`},{content:".st show",send:!0},{content:`<木落>的个人属性为: +力量: 12 敏捷: 10 体质: 10 智力: 10 +感知: 10 魅力: 10 hp: 10 hpmax: 10 +EXP: 0 熟练: 2 特技: 1[基础值1] 运动: 6[基础值3] +(下略)`},{content:".st show 力量 运动 熟练",send:!0},{content:`<木落>的个人属性为: +力量: 12 熟练: 2 运动: 6[基础值3]`},{content:".st 力量 + 2",send:!0},{content:`人物属性设置如下: +修改: 力量(12 ➯ 14)`}]})]),t[24]||(t[24]=e("p",null,"属性修改后,属性调整值会自动变更。不用再行关注。",-1)),e("div",f,[t[5]||(t[5]=e("p",{class:"custom-block-title"},"对生命值的特殊支持",-1)),t[6]||(t[6]=e("ul",null,[e("li",null,"当存在临时生命 (buff 血量),自动优先消耗。若临时生命不足以抵挡伤害,剩余会扣减血量;"),e("li",null,"当生命值归零,若伤害大于等于血量上限,判定人物死亡;"),e("li",null,"当生命值归零,若伤害小于血量上限,人物昏迷;"),e("li",null,"当人物已经昏迷,不足致死的伤害自动折算为死亡豁免失败。")],-1)),o(n,{messages:[{content:".st hp-3 hp-3 hp-3",send:!0},{content:`<木落>的dnd5e人物属性设置如下: +修改: hp(2 ➯ 0), hp(0 ➯ 0), hp(0 ➯ 0) +<木落>遭受了1点过量伤害,生命值降至0,陷入了昏迷! +<木落>在昏迷状态下遭受了3点过量伤害,死亡豁免失败+1! +<木落>在昏迷状态下遭受了3点过量伤害,死亡豁免失败+1!`}]})]),t[25]||(t[25]=d('

    退游小技巧,黑暗录卡:

    text
    .st 力量:4d6k3 体质:4d6k3 敏捷:4d6k3 智力:4d6k3 感知:4d6k3 魅力:4d6k3 hp:10 hpmax: 10 熟练:2 运动:0 特技:0 巧手:0 隐匿:0 调查:0 奥秘:0 历史:0 自然:0 宗教:0 察觉:0 洞悉:0 驯养:0 医疗:0 生存:0 说服:0 欺诈:0 威吓:0 表演:0

    代骰

    以上功能均可以通过附加 @其他人 来操作对方的属性值。

    .rc 检定

    .rc <属性> 进行检定。

    .rc <属性>豁免 进行豁免检定。

    .rc <表达式> 使用可带调整值的表达式进行检定,如 力量+3

    .rc (优势|劣势) <表达式> 进行优势或劣势检定。

    ',9)),e("div",m,[t[7]||(t[7]=e("p",{class:"custom-block-title"},"示例",-1)),o(n,{messages:[{content:".rc 运动",send:!0},{content:`<木落>的“运动”检定结果为: +8[1d20=8] + 6[运动=6] = 14`},{content:".rc 优势 力量+4",send:!0},{content:`<木落>的“力量+4”检定结果为: +17[{17 | 11 }] + 12[力量=12] + 4 = 33`},{content:".rc 劣势 力量+4 推一下试试",send:!0},{content:`<木落>的“推一下试试”检定结果为: +17[{17 | 18 }] + 12[力量=12] + 4 = 33`}]})]),t[26]||(t[26]=e("h3",{id:"代骰-1",tabindex:"-1"},[s("代骰 "),e("a",{class:"header-anchor",href:"#代骰-1","aria-label":'Permalink to "代骰"'},"​")],-1)),t[27]||(t[27]=e("p",null,[s("以上功能均可以通过附加 "),e("code",null,"@其他人"),s(" 来使用对方的技能进行检定。")],-1)),t[28]||(t[28]=e("h3",{id:"奇妙运用",tabindex:"-1"},[s("奇妙运用 "),e("a",{class:"header-anchor",href:"#奇妙运用","aria-label":'Permalink to "奇妙运用"'},"​")],-1)),t[29]||(t[29]=e("p",null,"你可以通过如下方式记录武器的熟练项。",-1)),e("div",g,[t[8]||(t[8]=e("p",{class:"custom-block-title"},"示例",-1)),o(n,{messages:[{content:".st 长剑=4",send:!0},{content:"<木落>的属性录入完成,本次录入了1条数据。"},{content:".rc 长剑",send:!0},{content:`<木落>的“长剑”检定(dnd5e)结果为: +16[1d20=16] + 4[长剑=4] = 20`}]})]),t[30]||(t[30]=d('

    .buff 临时属性

    .buff help 显示帮助。

    .buff 展示当前 buff。

    .buff clr 清除 buff。

    .buff del <属性1> <属性2> ... 删除指定属性的 buff。

    .buff <属性>:<值> 为指定属性设定 buff。

    .buff <属性>±<表达式> 修改指定属性的 buff。

    用于设置临时属性,例如虚假生命:

    ',8)),e("div",k,[t[9]||(t[9]=e("p",{class:"custom-block-title"},"示例",-1)),o(n,{messages:[{content:".st hp:10",send:!0},{content:`<木落>的dnd5e人物属性设置如下: +读入: hp:10`},{content:".buff hp : 1d4+4",send:!0},{content:`<木落>的dnd5e人物Buff属性设置如下: +读入: hp:7`},{content:".st show hp",send:!0},{content:`<木落>的个人属性为: +hp:17[10]`}]})]),t[31]||(t[31]=e("p",null,"也可以用来设置其他属性:",-1)),e("div",x,[t[10]||(t[10]=e("p",{class:"custom-block-title"},"示例",-1)),o(n,{messages:[{content:".st 力量:10 运动:0",send:!0},{content:`<木落>的dnd5e人物属性设置如下: +读入: 力量:10, 运动:0[技能]`},{content:".buff 力量:6",send:!0},{content:`<木落>的dnd5e人物Buff属性设置如下: +读入: 力量:6`},{content:".st show 力量 运动",send:!0},{content:`<木落>的个人属性为: +力量:16[10] 运动:3[0]`}]})]),t[32]||(t[32]=e("p",null,"临时的技能熟练(装备或法术效果):",-1)),e("div",q,[t[11]||(t[11]=e("p",{class:"custom-block-title"},"示例",-1)),o(n,{messages:[{content:".st 力量:10 运动:0 熟练:3",send:!0},{content:`<木落>的dnd5e人物属性设置如下: +读入: 力量:10, 运动:0[技能], 熟练:3`},{content:".buff 运动*:0",send:!0},{content:`<木落>的dnd5e人物Buff属性设置如下: +读入: 运动:0[技能, 熟练*]`},{content:".st show 力量 运动",send:!0},{content:`<木落>的个人属性为: +力量:16[10] 运动:6[0]`}]})]),t[33]||(t[33]=e("p",null,"删除和清空",-1)),e("div",v,[t[12]||(t[12]=e("p",{class:"custom-block-title"},"示例",-1)),o(n,{messages:[{content:".buff del hp",send:!0},{content:"<木落>的如下buff属性被成功删除:hp,失败0项"},{content:".buff clr",send:!0},{content:"<木落>的BUFF数据已经清除,共计0条"}]})]),t[34]||(t[34]=d('

    代骰

    以上功能均可以通过附加 @其他人 来操作对方的 buff。

    .ss 法术位 (spell slots)

    .ss 查看当前法术位状况。

    .ss init 4 3 2 设置 1 2 3 环的法术位上限,以此类推,上不封顶。

    .ss set 2环 4 单独设置某一环的法术位上限,可用逗号分隔地连写多组。

    .ss clr 清除法术位设置。

    .ss rest 恢复所有法术位 (不回复 hp)。

    .ss 3环 +1 增加一个 3 环法术位(不会超过上限)。

    .ss lv3 +1 同上,另一种写法。

    .ss 3环 -1 消耗一个 3 环法术位。

    ',11)),e("div",P,[t[13]||(t[13]=e("p",{class:"custom-block-title"},"示例",-1)),o(n,{messages:[{content:".ss init 3 4 5",send:!0},{content:"为<木落>设置法术位: 1环3个, 2环4个, 3环5个"},{content:".ss 1环 -1",send:!0},{content:"<木落>的1环法术位消耗至2个,上限3个"},{content:".ss",send:!0},{content:"<木落>的法术位状况: 1环:2/3, 2环:4/4, 3环:5/5"},{content:".ss rest",send:!0},{content:"<木落>的法术位已经完全恢复"},{content:".ss set 4环 3",send:!0},{content:"为<木落>设置法术位: 4环3个"}]})]),t[35]||(t[35]=e("h3",{id:"代骰-3",tabindex:"-1"},[s("代骰 "),e("a",{class:"header-anchor",href:"#代骰-3","aria-label":'Permalink to "代骰"'},"​")],-1)),t[36]||(t[36]=e("p",null,[s("以上功能均可以通过附加 "),e("code",null,"@其他人"),s(" 来操作对方的法术位。")],-1)),t[37]||(t[37]=e("h2",{id:"cast-使用法术位",tabindex:"-1"},[e("code",null,".cast"),s(" 使用法术位 "),e("a",{class:"header-anchor",href:"#cast-使用法术位","aria-label":'Permalink to "`.cast` 使用法术位"'},"​")],-1)),t[38]||(t[38]=e("p",null,[e("code",null,".cast <环数> [<消耗数量>]"),s(" 消耗指定数量的指定法术位,省略消耗数量时,消耗 1 个。")],-1)),e("div",D,[t[14]||(t[14]=e("p",{class:"custom-block-title"},"示例",-1)),o(n,{messages:[{content:".cast 2",send:!0},{content:"<木落>的2环法术位消耗至3个,上限4个"}]})]),t[39]||(t[39]=d('

    代骰

    以上功能均可以通过附加 @其他人 来消耗对方的法术位。

    .longrest / .长休

    .longrest 恢复生命值和法术位。当前角色需已设定最大生命值且当前生命值大于 0。

    ',4)),e("div",B,[t[15]||(t[15]=e("p",{class:"custom-block-title"},"示例",-1)),o(n,{messages:[{content:".长休",send:!0},{content:"<木落>的长休: hp得到了恢复,现为12 法术位得到了恢复"},{content:".长休",send:!0},{content:"<木落>的长休: 没有设置hpmax,无法回复hp"}]})]),t[40]||(t[40]=d('

    代骰

    以上功能均可以通过附加 @其他人 来令对方进行长休。

    .ds / .死亡豁免

    .ds help 查看帮助。

    .ds 进行一次死亡豁免检定,此时角色 hp 必须为 0。

    .ds +1d4 检定时添加 1d4 的加值。

    .ds (成功|失败)±<变化值> 死亡豁免的成功或失败数量增加或减少指定值。成功和失败可分别简写为 sf

    .ds stat 查看当前死亡豁免情况。

    st 指令对 hp 的操作也会自动触发死亡豁免。

    ',9)),e("div",w,[t[16]||(t[16]=e("p",{class:"custom-block-title"},"示例",-1)),o(n,{messages:[{content:".st hp:3 hpmax:12",send:!0},{content:`<木落>的dnd5e人物属性设置如下: +读入: hp:3, hpmax:12`},{content:".st hp-10",send:!0},{content:`<木落>的dnd5e人物属性设置如下: +修改: hp(3 ➯ 0) +<木落>遭受了7点过量伤害,生命值降至0,陷入了昏迷!`}]}),t[17]||(t[17]=e("p",null,"昏迷后被攻击:",-1)),o(n,{messages:[{content:`<木落>的dnd5e人物属性设置如下: +修改: hp(0 ➯ 0) +<木落>在昏迷状态下遭受了1点过量伤害,死亡豁免失败+1!`}]}),t[18]||(t[18]=e("p",null,"死亡:",-1)),o(n,{messages:[{content:`<木落>的死亡豁免检定: [1d20=3]=3 有些不妙!死亡豁免失败+1 +你获得了3次死亡豁免检定失败,不幸去世了!`}]}),t[19]||(t[19]=e("p",null,"医学奇迹:",-1)),o(n,{messages:[{content:"<木落>的死亡豁免检定: [1d20=20]=20 你觉得你还可以抢救一下!HP回复1点!"}]})]),t[41]||(t[41]=e("h3",{id:"代骰-6",tabindex:"-1"},[s("代骰 "),e("a",{class:"header-anchor",href:"#代骰-6","aria-label":'Permalink to "代骰"'},"​")],-1)),t[42]||(t[42]=e("p",null,[s("以上功能均可以通过附加 "),e("code",null,"@其他人"),s(" 来令对方进行死亡豁免。")],-1))])}const U=l(r,[["render",E]]);export{S as __pageData,U as default}; diff --git a/assets/use_faq.md.Dlbwr4Wn.js b/assets/use_faq.md.Dlbwr4Wn.js new file mode 100644 index 000000000..63867688a --- /dev/null +++ b/assets/use_faq.md.Dlbwr4Wn.js @@ -0,0 +1,12 @@ +import{_ as s,c as e,a6 as i,o as t}from"./chunks/framework.B1keMFNq.js";const p="/sealdice-manual-next/assets/image-20221009004030395.3916Tv_z.png",n="/sealdice-manual-next/assets/image-20221009003612068.Wt604XDQ.png",l="/sealdice-manual-next/assets/image-20230109202133901.DO1uTTAZ.png",o="/sealdice-manual-next/assets/image-20230109203431758.TT_W720a.png",r="/sealdice-manual-next/assets/image-20230109205906109.D-KrjuYJ.png",h="/sealdice-manual-next/assets/image-20230109210448115.DDApTHsW.png",F=JSON.parse('{"title":"常见问题","description":"","frontmatter":{"lang":"zh-cn","title":"常见问题"},"headers":[],"relativePath":"use/faq.md","filePath":"use/faq.md","lastUpdated":1728702230000}'),d={name:"use/faq.md"};function c(g,a,k,b,u,m){return t(),e("div",null,a[0]||(a[0]=[i(`

    常见问题

    本节内容

    本节将提供一些常见问题的解决方式,方便快速解决。如果你的问题并没有在这里得到答案,欢迎加入官方群寻求帮助。

    为啥海豹不理我?

    可能性一:你尝试私聊海豹核心,但并非是海豹账号的好友;

    可能性二:如果是 QQ 平台,骰子账号遭到了风控;

    可能性三:你使用的指令/扩展被关闭了。例如当 coc7 扩展关闭时,sc 等指令是不会回应的;这时需要执行 .ext coc7 on 开启对应扩展。

    如果你是骰主,可以在 WebUI 查看日志,以确定海豹核心是否收到了指令、是否正确做出了响应。

    如果你无法理解发生了什么,或者需要更多帮助,欢迎加入官方答疑群。

    可以关闭暗骰吗?

    海豹核心不支持关闭暗骰。但是,海豹不会与非好友帐号私聊,所以不必担心暗骰会影响帐号安全。

    退群指令?

    以下指令均可:

    text
    .bot bye
    +.bot exit
    +.dismiss

    骰主也可以 WebUI 的群组管理中操作退群。

    登录服务器开浏览器使用好麻烦!能远程直接访问 WebUI 吗?

    对于大部分有公网 IP 的服务器都可以,但是需要你进行一些配置。

    1. 在 WebUI 修改配置,让海豹 WebUI 运行在公开端口而不是本地端口;

    2. 在基本设置中设置 WebUI 访问密码;

    3. 修改你服务器的防火墙(根据服务提供商,也可能称为「安全组」等),以允许远程 TCP 访问海豹端口。

      1. 如果你使用的是 Oracle Linux 或类似服务器,还需要在服务器系统中放行端口:

        bash
        sudo iptables -I INPUT -s 0.0.0.0/0 -p tcp --dport 3211  -j ACCEPT
      2. 如果你使用 Windows 服务器,需要关闭系统内置防火墙或设置端口放行。

    4. 使用 http://<服务器IP地址>:3211 访问 WebUI。

    在服务器上登录时说「需要在同一 WIFI 下扫码」怎么办

    首先确认使用安卓协议,并且输入密码登录(不要使用无密码的扫码登录,现在已经很不好用了)。

    有几种办法:

    1. [首选] 让手机跟服务器真的处于同一个网络

    1. 配置防火墙

      配置你的服务器,允许外部访问 13325 端口。

      补充

      以腾讯云轻量服务器为例,点入「服务器」,再点击卡片。

      服务器配置

      进入后点击「防火墙」,随后「添加规则」,这里选择 TCP 协议,端口输入 13325(演示图片中为 13326),点击确定。

      放通防火墙

      搞定,其他服务商大同小异。

      特别的,如果是 Windows Server 2012R2 及以上系统,请再额外关闭系统防火墙或设置规则放行。具体做法搜索关键字 Windows server 关闭防火墙

    2. 服务器端运行工具

      在海豹骰中集成了 socks 工具,点击图中「辅助工具 -13325 端口」按钮。

      登录弹窗

      稍等片刻后,出现如下窗口。

      辅助工具弹窗

      点击 OK。

      运行起来之后,显示一串这样的文本:

      text
      http/socks5简易工具©sealdice.com
      +将在服务器上开启一个 socks5 服务,端口 13325,默认持续时长为 25 分钟
      +将在服务器上开启一个 HTTP 代理服务,端口 13326,默认持续时长为 25 分钟
      +
      +可能的公网 IP:  12.34.56.78
      +请于服务器管理面板放行你要用的端口 (一般为 13325 即 socks),协议 TCP
      +如果是 Windows Server 2012R2 及以上系统,请再额外关闭系统防火墙或设置规则放行
      +
      +正在启动服务:0.0.0.0:13326
      +正在启动服务:0.0.0.0:13325
    3. 手机端连接

    你需要一个代理软件,比如 postern,如果可能的话你可以从 Google Play 下载,你也可以在用户群里找到它。

    然后在你将要扫码的手机上启动它,弹出的窗口都点击确定

    点击默认存在在的代理,将他删除,然后点击添加代理服务器,按照下图填写。

    postern 配置代理服务器

    保存后点击左上角 Postern 的图标,点击配置规则,类似前文删除代理,删除掉默认的规则 1 和规则 2,然后点击添加规则。如图选择匹配类型和动作,之后会自动填入代理/代理组。

    postern 配置规则

    保存后重启软件。

    现在就配置完成了。手机上打开浏览器进入 https://ip138.com/,如果显示的 IP 地址和服务器一样,那么配置正确。

    如果打不开网页或提示「当前 WiFi 不能访问网络」,可能是防火墙没配置好。如果 IP 不一样,可能是代理没配置上。

    如果你使用 iOS 手机,可以使用 Potatso 替代 Postern。

    现在可以进入海豹 WebUI,重新进行登录流程了。如果以后再出类似情况,直接重复步骤 2、3 即可。

    2. 本机上完成扫码登录,然后将登录过的配置文件覆盖到服务器上

    具体目录是 data/default/extra/go-cqhttp-qq12345

    当然如果你没做过自定义配置,可以整个复制。

    使用密码登录,重试 3 次左右,有概率直接上号

    AT 其他骰子做检定的时候,海豹也会回应,怎么办

    使用这个指令将其他骰子进行标记:

    text
    .botlist add @骰子A @骰子B

    会有如下效果:

    1. 当有人@该骰发指令,海豹不会做出回应
    2. 该骰发出的指令和消息,海豹不会回应,这可以有效避免关键词触发的无限复读

    为啥好像反应慢一拍

    首先确定是否为网络问题。如果你是骰主,可在后台的日志中检查收到指令的实际时间和发出响应的实际时间。

    对于 QQ 平台,发送消息会有随机延迟,这是为了防止引起企鹅的警惕。随机延迟间隔 0.4 - 0.9 秒,可以在设置中调整。

    我希望在我的骰子进群或者被踢出时通知我

    在 WebUI 的「综合设置 - 基本设置」页面。在「消息通知列表」中可以添加消息通知的接收者。支持个人、群聊、电子邮箱作为接收者。

    在海豹核心发生 收到加群邀请、收到好友邀请、进入群组、被踢出群、被禁言、自动激活、指令退群 时,会给消息通知列表的各个接收者发送通知。

    支持 QQ 频道吗?

    支持,默认不记录频道消息,也不自动开启。邀请入频道后 @骰子 .bot on 即可开启。

    在 WebUI 的「综合设置 - 基本设置」可以进行配置。特别的,骰子不会自动同意频道邀请,需要骰主上号同意。

    怎么同时运行多个海豹?

    Windows 系统

    在 Windows 系统运行两个是很简单的:

    我们假设你的第一只海豹已经配置好了,当前正在运行,端口为默认的 3211。

    现在,你需要使用安装包,在另一个目录再解压一份海豹核心。

    进入新的目录,像运行第一只海豹一样直接双击执行。它会自动检测端口,因为 3211 端口已经被占用,会弹窗询问是否更换端口,直接点是就可以了。

    如果你想在 Windows 系统指定端口,需要一点操作

    在每一个你需要指定端口的海豹核心目录下创建一个 启动.cmd,用文本编辑器编辑,内容为:

    bash
    sealdice-core --address=0.0.0.0:<端口号> -m

    其中的 <端口号> 替换成你希望指定的端口号。然后双击 启动.cmd 运行。

    你只需在第一次启动时这样做,这个端口号会被写入配置中供后续启动使用。

    除 Android 外的其他系统

    通常来说,你在这些系统上是通过命令行(终端)来启动海豹核心。

    将安装包解压到你为新海豹准备的目录,在初次启动海豹时,使用以下命令:

    bash
    ./sealdice-core --address=127.0.0.1:<端口号>

    将在你系统上,占用指定的端口号,启动一个不向互联网公开的新海豹核心。

    我机器上启动非常慢,而且托盘点不出来右键菜单?

    请确认你的硬盘状态是否还好,一般来说是磁盘 I/O 性能过低导致的,常见于软路由设备。

    这种情况可以删除 data/helpdoc/ 目录来提速,代价是无法使用查询指令。

    能在手机上搭建吗?

    手机海豹已经公测啦!详见 搭建 章节。

    我是 Master,怎么帮人取出 Log?

    详见 这一章节

    骰主具有很大的权限,所以还请各位选择自己信任的骰主,也请各位骰主谨慎对待大家的信任!

    我忘了 WebUI 密码

    首先彻底关闭海豹。

    用文本编辑器打开 dice/dice.yaml,删除 uiPasswordHash 一行,保存。

    重新启动海豹。

    ',79)]))}const C=s(d,[["render",c]]);export{F as __pageData,C as default}; diff --git a/assets/use_faq.md.Dlbwr4Wn.lean.js b/assets/use_faq.md.Dlbwr4Wn.lean.js new file mode 100644 index 000000000..63867688a --- /dev/null +++ b/assets/use_faq.md.Dlbwr4Wn.lean.js @@ -0,0 +1,12 @@ +import{_ as s,c as e,a6 as i,o as t}from"./chunks/framework.B1keMFNq.js";const p="/sealdice-manual-next/assets/image-20221009004030395.3916Tv_z.png",n="/sealdice-manual-next/assets/image-20221009003612068.Wt604XDQ.png",l="/sealdice-manual-next/assets/image-20230109202133901.DO1uTTAZ.png",o="/sealdice-manual-next/assets/image-20230109203431758.TT_W720a.png",r="/sealdice-manual-next/assets/image-20230109205906109.D-KrjuYJ.png",h="/sealdice-manual-next/assets/image-20230109210448115.DDApTHsW.png",F=JSON.parse('{"title":"常见问题","description":"","frontmatter":{"lang":"zh-cn","title":"常见问题"},"headers":[],"relativePath":"use/faq.md","filePath":"use/faq.md","lastUpdated":1728702230000}'),d={name:"use/faq.md"};function c(g,a,k,b,u,m){return t(),e("div",null,a[0]||(a[0]=[i(`

    常见问题

    本节内容

    本节将提供一些常见问题的解决方式,方便快速解决。如果你的问题并没有在这里得到答案,欢迎加入官方群寻求帮助。

    为啥海豹不理我?

    可能性一:你尝试私聊海豹核心,但并非是海豹账号的好友;

    可能性二:如果是 QQ 平台,骰子账号遭到了风控;

    可能性三:你使用的指令/扩展被关闭了。例如当 coc7 扩展关闭时,sc 等指令是不会回应的;这时需要执行 .ext coc7 on 开启对应扩展。

    如果你是骰主,可以在 WebUI 查看日志,以确定海豹核心是否收到了指令、是否正确做出了响应。

    如果你无法理解发生了什么,或者需要更多帮助,欢迎加入官方答疑群。

    可以关闭暗骰吗?

    海豹核心不支持关闭暗骰。但是,海豹不会与非好友帐号私聊,所以不必担心暗骰会影响帐号安全。

    退群指令?

    以下指令均可:

    text
    .bot bye
    +.bot exit
    +.dismiss

    骰主也可以 WebUI 的群组管理中操作退群。

    登录服务器开浏览器使用好麻烦!能远程直接访问 WebUI 吗?

    对于大部分有公网 IP 的服务器都可以,但是需要你进行一些配置。

    1. 在 WebUI 修改配置,让海豹 WebUI 运行在公开端口而不是本地端口;

    2. 在基本设置中设置 WebUI 访问密码;

    3. 修改你服务器的防火墙(根据服务提供商,也可能称为「安全组」等),以允许远程 TCP 访问海豹端口。

      1. 如果你使用的是 Oracle Linux 或类似服务器,还需要在服务器系统中放行端口:

        bash
        sudo iptables -I INPUT -s 0.0.0.0/0 -p tcp --dport 3211  -j ACCEPT
      2. 如果你使用 Windows 服务器,需要关闭系统内置防火墙或设置端口放行。

    4. 使用 http://<服务器IP地址>:3211 访问 WebUI。

    在服务器上登录时说「需要在同一 WIFI 下扫码」怎么办

    首先确认使用安卓协议,并且输入密码登录(不要使用无密码的扫码登录,现在已经很不好用了)。

    有几种办法:

    1. [首选] 让手机跟服务器真的处于同一个网络

    1. 配置防火墙

      配置你的服务器,允许外部访问 13325 端口。

      补充

      以腾讯云轻量服务器为例,点入「服务器」,再点击卡片。

      服务器配置

      进入后点击「防火墙」,随后「添加规则」,这里选择 TCP 协议,端口输入 13325(演示图片中为 13326),点击确定。

      放通防火墙

      搞定,其他服务商大同小异。

      特别的,如果是 Windows Server 2012R2 及以上系统,请再额外关闭系统防火墙或设置规则放行。具体做法搜索关键字 Windows server 关闭防火墙

    2. 服务器端运行工具

      在海豹骰中集成了 socks 工具,点击图中「辅助工具 -13325 端口」按钮。

      登录弹窗

      稍等片刻后,出现如下窗口。

      辅助工具弹窗

      点击 OK。

      运行起来之后,显示一串这样的文本:

      text
      http/socks5简易工具©sealdice.com
      +将在服务器上开启一个 socks5 服务,端口 13325,默认持续时长为 25 分钟
      +将在服务器上开启一个 HTTP 代理服务,端口 13326,默认持续时长为 25 分钟
      +
      +可能的公网 IP:  12.34.56.78
      +请于服务器管理面板放行你要用的端口 (一般为 13325 即 socks),协议 TCP
      +如果是 Windows Server 2012R2 及以上系统,请再额外关闭系统防火墙或设置规则放行
      +
      +正在启动服务:0.0.0.0:13326
      +正在启动服务:0.0.0.0:13325
    3. 手机端连接

    你需要一个代理软件,比如 postern,如果可能的话你可以从 Google Play 下载,你也可以在用户群里找到它。

    然后在你将要扫码的手机上启动它,弹出的窗口都点击确定

    点击默认存在在的代理,将他删除,然后点击添加代理服务器,按照下图填写。

    postern 配置代理服务器

    保存后点击左上角 Postern 的图标,点击配置规则,类似前文删除代理,删除掉默认的规则 1 和规则 2,然后点击添加规则。如图选择匹配类型和动作,之后会自动填入代理/代理组。

    postern 配置规则

    保存后重启软件。

    现在就配置完成了。手机上打开浏览器进入 https://ip138.com/,如果显示的 IP 地址和服务器一样,那么配置正确。

    如果打不开网页或提示「当前 WiFi 不能访问网络」,可能是防火墙没配置好。如果 IP 不一样,可能是代理没配置上。

    如果你使用 iOS 手机,可以使用 Potatso 替代 Postern。

    现在可以进入海豹 WebUI,重新进行登录流程了。如果以后再出类似情况,直接重复步骤 2、3 即可。

    2. 本机上完成扫码登录,然后将登录过的配置文件覆盖到服务器上

    具体目录是 data/default/extra/go-cqhttp-qq12345

    当然如果你没做过自定义配置,可以整个复制。

    使用密码登录,重试 3 次左右,有概率直接上号

    AT 其他骰子做检定的时候,海豹也会回应,怎么办

    使用这个指令将其他骰子进行标记:

    text
    .botlist add @骰子A @骰子B

    会有如下效果:

    1. 当有人@该骰发指令,海豹不会做出回应
    2. 该骰发出的指令和消息,海豹不会回应,这可以有效避免关键词触发的无限复读

    为啥好像反应慢一拍

    首先确定是否为网络问题。如果你是骰主,可在后台的日志中检查收到指令的实际时间和发出响应的实际时间。

    对于 QQ 平台,发送消息会有随机延迟,这是为了防止引起企鹅的警惕。随机延迟间隔 0.4 - 0.9 秒,可以在设置中调整。

    我希望在我的骰子进群或者被踢出时通知我

    在 WebUI 的「综合设置 - 基本设置」页面。在「消息通知列表」中可以添加消息通知的接收者。支持个人、群聊、电子邮箱作为接收者。

    在海豹核心发生 收到加群邀请、收到好友邀请、进入群组、被踢出群、被禁言、自动激活、指令退群 时,会给消息通知列表的各个接收者发送通知。

    支持 QQ 频道吗?

    支持,默认不记录频道消息,也不自动开启。邀请入频道后 @骰子 .bot on 即可开启。

    在 WebUI 的「综合设置 - 基本设置」可以进行配置。特别的,骰子不会自动同意频道邀请,需要骰主上号同意。

    怎么同时运行多个海豹?

    Windows 系统

    在 Windows 系统运行两个是很简单的:

    我们假设你的第一只海豹已经配置好了,当前正在运行,端口为默认的 3211。

    现在,你需要使用安装包,在另一个目录再解压一份海豹核心。

    进入新的目录,像运行第一只海豹一样直接双击执行。它会自动检测端口,因为 3211 端口已经被占用,会弹窗询问是否更换端口,直接点是就可以了。

    如果你想在 Windows 系统指定端口,需要一点操作

    在每一个你需要指定端口的海豹核心目录下创建一个 启动.cmd,用文本编辑器编辑,内容为:

    bash
    sealdice-core --address=0.0.0.0:<端口号> -m

    其中的 <端口号> 替换成你希望指定的端口号。然后双击 启动.cmd 运行。

    你只需在第一次启动时这样做,这个端口号会被写入配置中供后续启动使用。

    除 Android 外的其他系统

    通常来说,你在这些系统上是通过命令行(终端)来启动海豹核心。

    将安装包解压到你为新海豹准备的目录,在初次启动海豹时,使用以下命令:

    bash
    ./sealdice-core --address=127.0.0.1:<端口号>

    将在你系统上,占用指定的端口号,启动一个不向互联网公开的新海豹核心。

    我机器上启动非常慢,而且托盘点不出来右键菜单?

    请确认你的硬盘状态是否还好,一般来说是磁盘 I/O 性能过低导致的,常见于软路由设备。

    这种情况可以删除 data/helpdoc/ 目录来提速,代价是无法使用查询指令。

    能在手机上搭建吗?

    手机海豹已经公测啦!详见 搭建 章节。

    我是 Master,怎么帮人取出 Log?

    详见 这一章节

    骰主具有很大的权限,所以还请各位选择自己信任的骰主,也请各位骰主谨慎对待大家的信任!

    我忘了 WebUI 密码

    首先彻底关闭海豹。

    用文本编辑器打开 dice/dice.yaml,删除 uiPasswordHash 一行,保存。

    重新启动海豹。

    ',79)]))}const C=s(d,[["render",c]]);export{F as __pageData,C as default}; diff --git a/assets/use_fun.md.DR7CK6H2.js b/assets/use_fun.md.DR7CK6H2.js new file mode 100644 index 000000000..4c6d3cf2d --- /dev/null +++ b/assets/use_fun.md.DR7CK6H2.js @@ -0,0 +1,16 @@ +import{_ as p,c as m,a6 as a,j as e,G as o,a as l,w as s,B as u,o as g}from"./chunks/framework.B1keMFNq.js";const V=JSON.parse('{"title":"功能","description":"","frontmatter":{"lang":"zh-cn","title":"功能"},"headers":[],"relativePath":"use/fun.md","filePath":"use/fun.md","lastUpdated":1728702230000}'),b={name:"use/fun.md"},f={class:"info custom-block"},k={class:"info custom-block"},c={class:"info custom-block"},x={class:"info custom-block"},w={class:"info custom-block"},v={class:"info custom-block"},P={class:"info custom-block"},q={id:"ping-指令响应测试",tabindex:"-1"},D={class:"info custom-block"},j={id:"alias-定义快捷指令-使用快捷指令",tabindex:"-1"},y={class:"info custom-block"},B={class:"info custom-block"},z={class:"info custom-block"};function T(M,t,I,N,S,C){const n=u("ChatBox"),d=u("Badge"),r=u("PluginTabsTab"),i=u("PluginTabs");return g(),m("div",null,[t[40]||(t[40]=a('

    功能

    本节内容

    本节将展示海豹的「功能」扩展提供的指令,主要为快捷指令、ping、welcome 等额外指令,同时也包括今日人品、智能鸽子等娱乐相关指令。

    此外,小众规则指令暂时也放在本扩展中。请善用侧边栏和搜索,按需阅读文档。

    .jrrp 今日人品

    .jrrp

    今日人品是一个每个用户独立、每天刷新的 D100 随机数。你可通过 自定义文案 编写对它的解读。

    .gugu 人工智能鸽子

    .gugu.咕咕

    ',7)),e("div",f,[t[0]||(t[0]=e("p",{class:"custom-block-title"},"示例",-1)),o(n,{messages:[{content:".gugu",send:!0},{content:"🕊️:今天发版本,领导说发不完不让走"}]})]),t[41]||(t[41]=e("p",null,[e("code",null,".gugu 来源"),l(" 查看鸽子背后的故事。")],-1)),e("div",k,[t[1]||(t[1]=e("p",{class:"custom-block-title"},"示例",-1)),o(n,{messages:[{content:".gugu 来源",send:!0},{content:`🕊️: 前往了一个以前捕鲸的小岛度假~这里人很亲切!但是吃了这里的鱼肉料理之后有点晕晕的诶...想到前几天<木落>的短信,还是别追究他为什么不在了。 + ——鹊鹊结合实际经历创作`}]})]),t[42]||(t[42]=e("h2",{id:"jsr-不重复骰点",tabindex:"-1"},[e("code",null,".jsr"),l(" 不重复骰点 "),e("a",{class:"header-anchor",href:"#jsr-不重复骰点","aria-label":'Permalink to "`.jsr` 不重复骰点"'},"​")],-1)),t[43]||(t[43]=e("p",null,[e("code",null,".jsr <次数># <面数> [<原因>]"),l(" 投掷指定面数的骰子指定次数,使每一次的结果都不相同。")],-1)),e("div",c,[t[2]||(t[2]=e("p",{class:"custom-block-title"},"示例",-1)),o(n,{messages:[{content:".jsr 5# 100",send:!0},{content:`<木落>掷骰5次: +D100=6 +D100=71 +D100=53 +D100=31 +D100=2`}]})]),t[44]||(t[44]=a('

    以这种方式骰出的点数会自动成为一个骰池,供 drl 指令使用。

    .drl 骰池抽取

    骰池(Draw Lot)是一组来自相同面数骰子、出目互不相同的骰点,支持每次抽取一个。骰池是每个群组共用的。

    .drl new <个数># <面数> 创建一个指定数量、指定面数的骰池。

    .drl / .drlh 从当前骰池抽取一个数值,后者将结果私聊发送。

    ',5)),e("div",x,[t[3]||(t[3]=e("p",{class:"custom-block-title"},"示例",-1)),o(n,{messages:[{content:".drl",send:!0},{content:"当前群组无骰池,请使用.drl new创建一个。"},{content:".drl new 10# 1000",send:!0},{content:"创建骰池成功,骰子面数1000,可抽取10次。"},{content:".drl",send:!0},{content:"<木落>掷出了 D1000=568"},{content:".drl # 第 10 次",send:!0},{content:`<木落>掷出了 D1000=539 +骰池已经抽空,现在关闭。`}]})]),t[45]||(t[45]=e("h2",{id:"text-文本模板测试",tabindex:"-1"},[e("code",null,".text"),l(" 文本模板测试 "),e("a",{class:"header-anchor",href:"#text-文本模板测试","aria-label":'Permalink to "`.text` 文本模板测试"'},"​")],-1)),t[46]||(t[46]=e("p",null,[e("code",null,".text <文本模板>")],-1)),t[47]||(t[47]=e("p",null,"骰子会将模板内容解析后返回,其中含有的表达式和变量都将被求值。",-1)),e("div",w,[t[4]||(t[4]=e("p",{class:"custom-block-title"},"示例",-1)),o(n,{messages:[{content:".text 看看手气 {1d16}",send:!0},{content:"看看手气 2"}]})]),t[48]||(t[48]=e("h2",{id:"send-向骰主发送消息-回复消息",tabindex:"-1"},[e("code",null,".send"),l(" 向骰主发送消息 / 回复消息 "),e("a",{class:"header-anchor",href:"#send-向骰主发送消息-回复消息","aria-label":'Permalink to "`.send` 向骰主发送消息 / 回复消息"'},"​")],-1)),e("p",null,[t[5]||(t[5]=l("从 ")),o(d,{type:"tip",text:"v1.4.6"}),t[6]||(t[6]=l(" 起,海豹将此指令迁移至「功能」扩展。"))]),t[49]||(t[49]=e("p",null,[e("code",null,".send <消息内容>")],-1)),t[50]||(t[50]=e("p",null,"拥有 Master 权限的用户将看到消息内容和发送者的 IM 账号,如果是来自群组,也能看到群号。",-1)),e("div",v,[t[7]||(t[7]=e("p",{class:"custom-block-title"},"示例",-1)),o(i,null,{default:s(()=>[o(r,{label:"群聊"},{default:s(()=>[o(n,{messages:[{username:"Szz",avatar:"user2",content:".send 骰主你好!"}]})]),_:1}),o(r,{label:"Master 收到的消息"},{default:s(()=>[o(n,{messages:[{content:`一条来自群组<群名>(群号),作者(用户 IM 账号)的留言: +骰主你好!`}]})]),_:1})]),_:1})]),t[51]||(t[51]=e("p",null,[e("code",null,".send to <对方ID> <消息内容>")],-1)),t[52]||(t[52]=e("p",null,"Master 可以通过这个指令进行回复。目标 ID 可以是群号,也可以是个人的 IM 账号。将收到的消息中的对应 ID 复制到此处即可。",-1)),e("div",P,[t[8]||(t[8]=e("p",{class:"custom-block-title"},"示例",-1)),o(i,null,{default:s(()=>[o(r,{label:"Master 回复"},{default:s(()=>[o(n,{messages:[{content:`一条来自群组<群名>(群号),作者(用户 IM 账号)的留言: +骰主你好!`},{content:".send to <群号> 我收到了!",send:!0}]})]),_:1}),o(r,{label:"群聊"},{default:s(()=>[o(n,{messages:[{username:"Szz",avatar:"user2",content:".send 骰主你好!"},{content:`本消息由骰主<木落>通过指令发送: +我收到了!`}]})]),_:1})]),_:1})]),t[53]||(t[53]=e("h2",{id:"welcome-新人入群欢迎",tabindex:"-1"},[e("code",null,".welcome"),l(" 新人入群欢迎 "),e("a",{class:"header-anchor",href:"#welcome-新人入群欢迎","aria-label":'Permalink to "`.welcome` 新人入群欢迎"'},"​")],-1)),e("p",null,[t[9]||(t[9]=l("从 ")),o(d,{type:"tip",text:"v1.4.6"}),t[10]||(t[10]=l(" 起,海豹将此指令迁移至「功能」扩展。"))]),t[54]||(t[54]=e("p",null,[e("code",null,".welcome (on|off)"),l(" 开启、关闭功能")],-1)),t[55]||(t[55]=e("p",null,[e("code",null,".welcome show"),l(" 查看当前欢迎语")],-1)),t[56]||(t[56]=e("p",null,[e("code",null,".welcome set <欢迎语>"),l(" 设定欢迎语")],-1)),e("h2",q,[t[11]||(t[11]=e("code",null,".ping",-1)),t[12]||(t[12]=l(" 指令响应测试 ")),o(d,{type:"tip",text:"v1.4.2"}),t[13]||(t[13]=l()),t[14]||(t[14]=e("a",{class:"header-anchor",href:"#ping-指令响应测试","aria-label":'Permalink to "`.ping` 指令响应测试 "'},"​",-1))]),e("p",null,[t[15]||(t[15]=l("从 ")),o(d,{type:"tip",text:"v1.4.2"}),t[16]||(t[16]=l(" 版本起,海豹支持 ")),t[17]||(t[17]=e("code",null,".ping",-1)),t[18]||(t[18]=l(" 指令,用于指示海豹回复你一条消息。"))]),e("p",null,[t[19]||(t[19]=l("从 ")),o(d,{type:"tip",text:"v1.4.6"}),t[20]||(t[20]=l(" 起,海豹将此指令迁移至「功能」扩展。"))]),t[57]||(t[57]=e("p",null,[e("code",null,".ping"),l(" 海豹回复你一条消息。")],-1)),e("div",D,[t[22]||(t[22]=a('

    为什么要有这个指令?

    对于绝大多数情况,这个指令似乎都没有实际作用。事实上,这个指令的存在是为了解决 QQ 官方 Bot 在频道私聊中的以下问题:

    如果你向机器人连续发送 3 条频道私聊消息而没有收到回复,在机器人回复你之前,你将无法继续发送频道私聊消息。 而机器人并不会主动向你发送消息,这就造成了死锁。

    此时,你可以在频道中向海豹核心发送 .ping 指令,海豹核心会在频道私聊中回复你,以打破死锁。

    ',4)),o(i,null,{default:s(()=>[o(r,{label:"频道私聊"},{default:s(()=>[o(n,{messages:[{content:"我发出第一条消息。",send:!0},{content:"我发出第二条消息。",send:!0},{content:"我发出第三条消息,机器人怎么还不理我?",send:!0}]}),t[21]||(t[21]=e("div",{class:"tip custom-block"},[e("p",{class:"custom-block-title"},"提示"),e("p",null,"如果出现类似场景,可以发现 QQ 会提示你已经禁止再向骰子发送私聊消息,要求在骰子回应后才能再次发送。"),e("p",null,"但用户已经无法再通过私聊发送正确的指令,触发骰子的回应了。"),e("p",null,[l("此时,用户可以去频道公屏发送一个 "),e("code",null,".ping"),l(" 指令。")])],-1)),o(n,{messages:[{content:"pong!这里是海豹核心!"},{content:"好耶,我又可以发私信给骰子了!",send:!0}]})]),_:1}),o(r,{label:"频道公屏"},{default:s(()=>[o(n,{messages:[{content:"@海豹核心 .ping",send:!0}]})]),_:1})]),_:1})]),e("h2",j,[t[23]||(t[23]=e("code",null,".alias",-1)),t[24]||(t[24]=l(" 定义快捷指令 & ")),t[25]||(t[25]=e("code",null,".&",-1)),t[26]||(t[26]=l(" 使用快捷指令 ")),o(d,{type:"tip",text:"v1.4.3"}),t[27]||(t[27]=l()),t[28]||(t[28]=e("a",{class:"header-anchor",href:"#alias-定义快捷指令-使用快捷指令","aria-label":'Permalink to "`.alias` 定义快捷指令 & `.&` 使用快捷指令 "'},"​",-1))]),e("p",null,[t[29]||(t[29]=l("从 ")),o(d,{type:"tip",text:"v1.4.3"}),t[30]||(t[30]=l(" 版本起,海豹支持使用")),t[31]||(t[31]=e("code",null,".alias",-1)),t[32]||(t[32]=l(" 定义快捷指令。同时使用 ")),t[33]||(t[33]=e("code",null,".&/.a <快捷指令>",-1)),t[34]||(t[34]=l(" 触发快捷指令。"))]),e("p",null,[t[35]||(t[35]=l("从 ")),o(d,{type:"tip",text:"v1.4.6"}),t[36]||(t[36]=l(" 起,海豹将此指令迁移至「功能」扩展。"))]),t[58]||(t[58]=a("

    .alias <别名> <指令>.&<别名> 定义为指定指令的快捷触发方式。在群聊中默认定义群快捷指令。

    .alias --my <别名> <指令>.&<别名> 定义为个人快捷指令。

    .alias del/rm <别名> 删除快捷指令。在群聊中默认删除群快捷指令。

    .alias del/rm --my <别名> 删除个人快捷指令。

    .alias show/list 显示目前可用的快捷指令。

    使用快捷指令的方式如下,支持携带参数:

    .& <别名> [可能的参数].a <别名> [可能的参数]

    海豹支持 个人快捷指令群快捷指令 两种模式:

    • 个人快捷指令:与用户关联,定义后用户可以在私聊、骰子所在的所有群进行使用。
    • 群快捷指令:与群关联,定义后该群内所有人都可以使用。
    ",9)),e("div",y,[t[37]||(t[37]=e("p",{class:"custom-block-title"},"快捷指令示例",-1)),o(i,null,{default:s(()=>[o(r,{label:"私聊"},{default:s(()=>[o(n,{messages:[{content:".alias 终极答案 .r 11+45-14 计算生命、宇宙以及一切的问题的答案",send:!0},{content:`已成功定义指令「.r 11+45-14 计算生命、宇宙以及一切的问题的答案」的个人快捷方式「终极答案」,触发方式: +.&终极答案 或 +.a 终极答案`},{content:".&终极答案",send:!0},{content:`※ 个人快捷指令 .r 11+45-14 计算生命、宇宙以及一切的问题的答案 +由于计算生命、宇宙以及一切的问题的答案,<木落>掷出了 11+45-14=11+45-14=42`}]})]),_:1})]),_:1})]),t[59]||(t[59]=a('

    额外 TRPG 规则支持

    .ww WOD 规则骰点

    .ww <表达式> 骰点,表达式用法请参考 核心指令 节。

    特别地,使用 ww 指令时允许省略加骰线 aY,这时将使用默认值进行骰点。

    ',4)),e("div",B,[t[38]||(t[38]=e("p",{class:"custom-block-title"},"示例",-1)),o(n,{messages:[{content:".ww 5",send:!0},{content:"<木落>掷出了 5a10=[成功0/5 {6,2,2,7,4}]=0"}]})]),t[60]||(t[60]=a("

    .ww set <默认值> 设定默认值,默认值可以由 加骰线 aY、骰子面数 mZ、成功线 kN 中的部分任意组合。默认值的生效范围是当前群组。

    .ww set clr 重置默认值为:加骰线 10、面数 10、成功线 8,即 a10m10k8

    ",2)),e("div",z,[t[39]||(t[39]=e("p",{class:"custom-block-title"},"示例",-1)),o(n,{messages:[{content:".ww set a6m10k9",send:!0},{content:`成功线k: 已修改为9 +骰子面数m: 已修改为10 +加骰线a: 已修改为6`},{content:".ww 5",send:!0},{content:"<木落>掷出了 5a6=[成功1/11 轮数:4 {<9*>,5,<6>,3,3},{<6>,<6>},{<6>,<7>},{5,4}]=1"},{content:".ww set clr",send:!0},{content:"骰池设定已恢复默认"}]})]),t[61]||(t[61]=a('

    .dx 双重十字规则骰点

    .dx <表达式> 骰点,表达式用法请参考 核心指令 节。

    .ek 共鸣性怪异规则骰点

    .ek <技能名>(+<奖励骰>) (<判定线>)

    .ekgen 共鸣性怪异规则属性生成

    .ekgen [<数量>] 生成指定数量的共鸣性怪异角色属性。

    .rsr 暗影狂奔规则骰点

    .rsr <骰数> 骰点。

    骰指定数量的 D6。每有一个骰子骰出 5 或 6 称为 1 成功度。

    如果超过半数的骰子骰出 1,称为这次骰点「失误」;失误的同时成功度为 0,称为「严重失误」。

    ',10))])}const $=p(b,[["render",T]]);export{V as __pageData,$ as default}; diff --git a/assets/use_fun.md.DR7CK6H2.lean.js b/assets/use_fun.md.DR7CK6H2.lean.js new file mode 100644 index 000000000..4c6d3cf2d --- /dev/null +++ b/assets/use_fun.md.DR7CK6H2.lean.js @@ -0,0 +1,16 @@ +import{_ as p,c as m,a6 as a,j as e,G as o,a as l,w as s,B as u,o as g}from"./chunks/framework.B1keMFNq.js";const V=JSON.parse('{"title":"功能","description":"","frontmatter":{"lang":"zh-cn","title":"功能"},"headers":[],"relativePath":"use/fun.md","filePath":"use/fun.md","lastUpdated":1728702230000}'),b={name:"use/fun.md"},f={class:"info custom-block"},k={class:"info custom-block"},c={class:"info custom-block"},x={class:"info custom-block"},w={class:"info custom-block"},v={class:"info custom-block"},P={class:"info custom-block"},q={id:"ping-指令响应测试",tabindex:"-1"},D={class:"info custom-block"},j={id:"alias-定义快捷指令-使用快捷指令",tabindex:"-1"},y={class:"info custom-block"},B={class:"info custom-block"},z={class:"info custom-block"};function T(M,t,I,N,S,C){const n=u("ChatBox"),d=u("Badge"),r=u("PluginTabsTab"),i=u("PluginTabs");return g(),m("div",null,[t[40]||(t[40]=a('

    功能

    本节内容

    本节将展示海豹的「功能」扩展提供的指令,主要为快捷指令、ping、welcome 等额外指令,同时也包括今日人品、智能鸽子等娱乐相关指令。

    此外,小众规则指令暂时也放在本扩展中。请善用侧边栏和搜索,按需阅读文档。

    .jrrp 今日人品

    .jrrp

    今日人品是一个每个用户独立、每天刷新的 D100 随机数。你可通过 自定义文案 编写对它的解读。

    .gugu 人工智能鸽子

    .gugu.咕咕

    ',7)),e("div",f,[t[0]||(t[0]=e("p",{class:"custom-block-title"},"示例",-1)),o(n,{messages:[{content:".gugu",send:!0},{content:"🕊️:今天发版本,领导说发不完不让走"}]})]),t[41]||(t[41]=e("p",null,[e("code",null,".gugu 来源"),l(" 查看鸽子背后的故事。")],-1)),e("div",k,[t[1]||(t[1]=e("p",{class:"custom-block-title"},"示例",-1)),o(n,{messages:[{content:".gugu 来源",send:!0},{content:`🕊️: 前往了一个以前捕鲸的小岛度假~这里人很亲切!但是吃了这里的鱼肉料理之后有点晕晕的诶...想到前几天<木落>的短信,还是别追究他为什么不在了。 + ——鹊鹊结合实际经历创作`}]})]),t[42]||(t[42]=e("h2",{id:"jsr-不重复骰点",tabindex:"-1"},[e("code",null,".jsr"),l(" 不重复骰点 "),e("a",{class:"header-anchor",href:"#jsr-不重复骰点","aria-label":'Permalink to "`.jsr` 不重复骰点"'},"​")],-1)),t[43]||(t[43]=e("p",null,[e("code",null,".jsr <次数># <面数> [<原因>]"),l(" 投掷指定面数的骰子指定次数,使每一次的结果都不相同。")],-1)),e("div",c,[t[2]||(t[2]=e("p",{class:"custom-block-title"},"示例",-1)),o(n,{messages:[{content:".jsr 5# 100",send:!0},{content:`<木落>掷骰5次: +D100=6 +D100=71 +D100=53 +D100=31 +D100=2`}]})]),t[44]||(t[44]=a('

    以这种方式骰出的点数会自动成为一个骰池,供 drl 指令使用。

    .drl 骰池抽取

    骰池(Draw Lot)是一组来自相同面数骰子、出目互不相同的骰点,支持每次抽取一个。骰池是每个群组共用的。

    .drl new <个数># <面数> 创建一个指定数量、指定面数的骰池。

    .drl / .drlh 从当前骰池抽取一个数值,后者将结果私聊发送。

    ',5)),e("div",x,[t[3]||(t[3]=e("p",{class:"custom-block-title"},"示例",-1)),o(n,{messages:[{content:".drl",send:!0},{content:"当前群组无骰池,请使用.drl new创建一个。"},{content:".drl new 10# 1000",send:!0},{content:"创建骰池成功,骰子面数1000,可抽取10次。"},{content:".drl",send:!0},{content:"<木落>掷出了 D1000=568"},{content:".drl # 第 10 次",send:!0},{content:`<木落>掷出了 D1000=539 +骰池已经抽空,现在关闭。`}]})]),t[45]||(t[45]=e("h2",{id:"text-文本模板测试",tabindex:"-1"},[e("code",null,".text"),l(" 文本模板测试 "),e("a",{class:"header-anchor",href:"#text-文本模板测试","aria-label":'Permalink to "`.text` 文本模板测试"'},"​")],-1)),t[46]||(t[46]=e("p",null,[e("code",null,".text <文本模板>")],-1)),t[47]||(t[47]=e("p",null,"骰子会将模板内容解析后返回,其中含有的表达式和变量都将被求值。",-1)),e("div",w,[t[4]||(t[4]=e("p",{class:"custom-block-title"},"示例",-1)),o(n,{messages:[{content:".text 看看手气 {1d16}",send:!0},{content:"看看手气 2"}]})]),t[48]||(t[48]=e("h2",{id:"send-向骰主发送消息-回复消息",tabindex:"-1"},[e("code",null,".send"),l(" 向骰主发送消息 / 回复消息 "),e("a",{class:"header-anchor",href:"#send-向骰主发送消息-回复消息","aria-label":'Permalink to "`.send` 向骰主发送消息 / 回复消息"'},"​")],-1)),e("p",null,[t[5]||(t[5]=l("从 ")),o(d,{type:"tip",text:"v1.4.6"}),t[6]||(t[6]=l(" 起,海豹将此指令迁移至「功能」扩展。"))]),t[49]||(t[49]=e("p",null,[e("code",null,".send <消息内容>")],-1)),t[50]||(t[50]=e("p",null,"拥有 Master 权限的用户将看到消息内容和发送者的 IM 账号,如果是来自群组,也能看到群号。",-1)),e("div",v,[t[7]||(t[7]=e("p",{class:"custom-block-title"},"示例",-1)),o(i,null,{default:s(()=>[o(r,{label:"群聊"},{default:s(()=>[o(n,{messages:[{username:"Szz",avatar:"user2",content:".send 骰主你好!"}]})]),_:1}),o(r,{label:"Master 收到的消息"},{default:s(()=>[o(n,{messages:[{content:`一条来自群组<群名>(群号),作者(用户 IM 账号)的留言: +骰主你好!`}]})]),_:1})]),_:1})]),t[51]||(t[51]=e("p",null,[e("code",null,".send to <对方ID> <消息内容>")],-1)),t[52]||(t[52]=e("p",null,"Master 可以通过这个指令进行回复。目标 ID 可以是群号,也可以是个人的 IM 账号。将收到的消息中的对应 ID 复制到此处即可。",-1)),e("div",P,[t[8]||(t[8]=e("p",{class:"custom-block-title"},"示例",-1)),o(i,null,{default:s(()=>[o(r,{label:"Master 回复"},{default:s(()=>[o(n,{messages:[{content:`一条来自群组<群名>(群号),作者(用户 IM 账号)的留言: +骰主你好!`},{content:".send to <群号> 我收到了!",send:!0}]})]),_:1}),o(r,{label:"群聊"},{default:s(()=>[o(n,{messages:[{username:"Szz",avatar:"user2",content:".send 骰主你好!"},{content:`本消息由骰主<木落>通过指令发送: +我收到了!`}]})]),_:1})]),_:1})]),t[53]||(t[53]=e("h2",{id:"welcome-新人入群欢迎",tabindex:"-1"},[e("code",null,".welcome"),l(" 新人入群欢迎 "),e("a",{class:"header-anchor",href:"#welcome-新人入群欢迎","aria-label":'Permalink to "`.welcome` 新人入群欢迎"'},"​")],-1)),e("p",null,[t[9]||(t[9]=l("从 ")),o(d,{type:"tip",text:"v1.4.6"}),t[10]||(t[10]=l(" 起,海豹将此指令迁移至「功能」扩展。"))]),t[54]||(t[54]=e("p",null,[e("code",null,".welcome (on|off)"),l(" 开启、关闭功能")],-1)),t[55]||(t[55]=e("p",null,[e("code",null,".welcome show"),l(" 查看当前欢迎语")],-1)),t[56]||(t[56]=e("p",null,[e("code",null,".welcome set <欢迎语>"),l(" 设定欢迎语")],-1)),e("h2",q,[t[11]||(t[11]=e("code",null,".ping",-1)),t[12]||(t[12]=l(" 指令响应测试 ")),o(d,{type:"tip",text:"v1.4.2"}),t[13]||(t[13]=l()),t[14]||(t[14]=e("a",{class:"header-anchor",href:"#ping-指令响应测试","aria-label":'Permalink to "`.ping` 指令响应测试 "'},"​",-1))]),e("p",null,[t[15]||(t[15]=l("从 ")),o(d,{type:"tip",text:"v1.4.2"}),t[16]||(t[16]=l(" 版本起,海豹支持 ")),t[17]||(t[17]=e("code",null,".ping",-1)),t[18]||(t[18]=l(" 指令,用于指示海豹回复你一条消息。"))]),e("p",null,[t[19]||(t[19]=l("从 ")),o(d,{type:"tip",text:"v1.4.6"}),t[20]||(t[20]=l(" 起,海豹将此指令迁移至「功能」扩展。"))]),t[57]||(t[57]=e("p",null,[e("code",null,".ping"),l(" 海豹回复你一条消息。")],-1)),e("div",D,[t[22]||(t[22]=a('

    为什么要有这个指令?

    对于绝大多数情况,这个指令似乎都没有实际作用。事实上,这个指令的存在是为了解决 QQ 官方 Bot 在频道私聊中的以下问题:

    如果你向机器人连续发送 3 条频道私聊消息而没有收到回复,在机器人回复你之前,你将无法继续发送频道私聊消息。 而机器人并不会主动向你发送消息,这就造成了死锁。

    此时,你可以在频道中向海豹核心发送 .ping 指令,海豹核心会在频道私聊中回复你,以打破死锁。

    ',4)),o(i,null,{default:s(()=>[o(r,{label:"频道私聊"},{default:s(()=>[o(n,{messages:[{content:"我发出第一条消息。",send:!0},{content:"我发出第二条消息。",send:!0},{content:"我发出第三条消息,机器人怎么还不理我?",send:!0}]}),t[21]||(t[21]=e("div",{class:"tip custom-block"},[e("p",{class:"custom-block-title"},"提示"),e("p",null,"如果出现类似场景,可以发现 QQ 会提示你已经禁止再向骰子发送私聊消息,要求在骰子回应后才能再次发送。"),e("p",null,"但用户已经无法再通过私聊发送正确的指令,触发骰子的回应了。"),e("p",null,[l("此时,用户可以去频道公屏发送一个 "),e("code",null,".ping"),l(" 指令。")])],-1)),o(n,{messages:[{content:"pong!这里是海豹核心!"},{content:"好耶,我又可以发私信给骰子了!",send:!0}]})]),_:1}),o(r,{label:"频道公屏"},{default:s(()=>[o(n,{messages:[{content:"@海豹核心 .ping",send:!0}]})]),_:1})]),_:1})]),e("h2",j,[t[23]||(t[23]=e("code",null,".alias",-1)),t[24]||(t[24]=l(" 定义快捷指令 & ")),t[25]||(t[25]=e("code",null,".&",-1)),t[26]||(t[26]=l(" 使用快捷指令 ")),o(d,{type:"tip",text:"v1.4.3"}),t[27]||(t[27]=l()),t[28]||(t[28]=e("a",{class:"header-anchor",href:"#alias-定义快捷指令-使用快捷指令","aria-label":'Permalink to "`.alias` 定义快捷指令 & `.&` 使用快捷指令 "'},"​",-1))]),e("p",null,[t[29]||(t[29]=l("从 ")),o(d,{type:"tip",text:"v1.4.3"}),t[30]||(t[30]=l(" 版本起,海豹支持使用")),t[31]||(t[31]=e("code",null,".alias",-1)),t[32]||(t[32]=l(" 定义快捷指令。同时使用 ")),t[33]||(t[33]=e("code",null,".&/.a <快捷指令>",-1)),t[34]||(t[34]=l(" 触发快捷指令。"))]),e("p",null,[t[35]||(t[35]=l("从 ")),o(d,{type:"tip",text:"v1.4.6"}),t[36]||(t[36]=l(" 起,海豹将此指令迁移至「功能」扩展。"))]),t[58]||(t[58]=a("

    .alias <别名> <指令>.&<别名> 定义为指定指令的快捷触发方式。在群聊中默认定义群快捷指令。

    .alias --my <别名> <指令>.&<别名> 定义为个人快捷指令。

    .alias del/rm <别名> 删除快捷指令。在群聊中默认删除群快捷指令。

    .alias del/rm --my <别名> 删除个人快捷指令。

    .alias show/list 显示目前可用的快捷指令。

    使用快捷指令的方式如下,支持携带参数:

    .& <别名> [可能的参数].a <别名> [可能的参数]

    海豹支持 个人快捷指令群快捷指令 两种模式:

    • 个人快捷指令:与用户关联,定义后用户可以在私聊、骰子所在的所有群进行使用。
    • 群快捷指令:与群关联,定义后该群内所有人都可以使用。
    ",9)),e("div",y,[t[37]||(t[37]=e("p",{class:"custom-block-title"},"快捷指令示例",-1)),o(i,null,{default:s(()=>[o(r,{label:"私聊"},{default:s(()=>[o(n,{messages:[{content:".alias 终极答案 .r 11+45-14 计算生命、宇宙以及一切的问题的答案",send:!0},{content:`已成功定义指令「.r 11+45-14 计算生命、宇宙以及一切的问题的答案」的个人快捷方式「终极答案」,触发方式: +.&终极答案 或 +.a 终极答案`},{content:".&终极答案",send:!0},{content:`※ 个人快捷指令 .r 11+45-14 计算生命、宇宙以及一切的问题的答案 +由于计算生命、宇宙以及一切的问题的答案,<木落>掷出了 11+45-14=11+45-14=42`}]})]),_:1})]),_:1})]),t[59]||(t[59]=a('

    额外 TRPG 规则支持

    .ww WOD 规则骰点

    .ww <表达式> 骰点,表达式用法请参考 核心指令 节。

    特别地,使用 ww 指令时允许省略加骰线 aY,这时将使用默认值进行骰点。

    ',4)),e("div",B,[t[38]||(t[38]=e("p",{class:"custom-block-title"},"示例",-1)),o(n,{messages:[{content:".ww 5",send:!0},{content:"<木落>掷出了 5a10=[成功0/5 {6,2,2,7,4}]=0"}]})]),t[60]||(t[60]=a("

    .ww set <默认值> 设定默认值,默认值可以由 加骰线 aY、骰子面数 mZ、成功线 kN 中的部分任意组合。默认值的生效范围是当前群组。

    .ww set clr 重置默认值为:加骰线 10、面数 10、成功线 8,即 a10m10k8

    ",2)),e("div",z,[t[39]||(t[39]=e("p",{class:"custom-block-title"},"示例",-1)),o(n,{messages:[{content:".ww set a6m10k9",send:!0},{content:`成功线k: 已修改为9 +骰子面数m: 已修改为10 +加骰线a: 已修改为6`},{content:".ww 5",send:!0},{content:"<木落>掷出了 5a6=[成功1/11 轮数:4 {<9*>,5,<6>,3,3},{<6>,<6>},{<6>,<7>},{5,4}]=1"},{content:".ww set clr",send:!0},{content:"骰池设定已恢复默认"}]})]),t[61]||(t[61]=a('

    .dx 双重十字规则骰点

    .dx <表达式> 骰点,表达式用法请参考 核心指令 节。

    .ek 共鸣性怪异规则骰点

    .ek <技能名>(+<奖励骰>) (<判定线>)

    .ekgen 共鸣性怪异规则属性生成

    .ekgen [<数量>] 生成指定数量的共鸣性怪异角色属性。

    .rsr 暗影狂奔规则骰点

    .rsr <骰数> 骰点。

    骰指定数量的 D6。每有一个骰子骰出 5 或 6 称为 1 成功度。

    如果超过半数的骰子骰出 1,称为这次骰点「失误」;失误的同时成功度为 0,称为「严重失误」。

    ',10))])}const $=p(b,[["render",T]]);export{V as __pageData,$ as default}; diff --git a/assets/use_introduce.md.BS9907qJ.js b/assets/use_introduce.md.BS9907qJ.js new file mode 100644 index 000000000..2664976e9 --- /dev/null +++ b/assets/use_introduce.md.BS9907qJ.js @@ -0,0 +1,6 @@ +import{_ as a,c as o,a6 as c,o as t}from"./chunks/framework.B1keMFNq.js";const u=JSON.parse('{"title":"基础概念","description":"","frontmatter":{"lang":"zh-cn","title":"基础概念"},"headers":[],"relativePath":"use/introduce.md","filePath":"use/introduce.md","lastUpdated":1718381802000}'),d={name:"use/introduce.md"};function s(l,e,p,n,i,r){return t(),o("div",null,e[0]||(e[0]=[c(`

    基础概念

    本节内容

    这里讲的是使用海豹核心的相关事项,如果要了解如何搭建和部署骰子,请参考 部署 - 快速开始

    以下内容针对从未接触过骰子的用户准备。如果你已经有使用其他骰系的经验,可以 跳过本节

    什么是骰子?

    骰子这里特指在即时聊天软件(如 QQ、KOOK、Discord)中为 TRPG(跑团)玩家提供方便的机器人。顾名思义,骰子提供各种基于各种跑团规则(如 CoC、D&D)的骰点服务, 同时还包括技能检定、日志记录(Log)等功能。一些骰子服务,包括 SealDice,还提供一系列的自定义和娱乐功能。

    获取和使用

    最简单的方法就是自己 搭建 一个海豹骰自用(私骰),也可以从 SealDice 公骰列表 中寻找一个面向公众提供服务的骰子(公骰)。

    一般而言,公骰是免费的。但他们的维护者(骰主)一般都要求用户严格遵循使用协议,使用前请使用 .help 协议 指令了解你需要注意哪些事项。

    危险:QQ 骰子的使用注意项

    QQ 并未提供公开的机器人接口,因此机器人只能使用第三方软件作为假用户接入。QQ 可能会检测到这些机器人,将它们视为诈骗而予以警告、封禁,甚至永久冻结。

    因此,在 QQ 使用骰子有许多约定俗成的规则,例如必须使用指令使骰子退群,而严禁直接移出群聊。为了尊重骰主的劳动成果,你应该遵守这些规则。

    在 QQ 上,你需要和骰子成为好友,然后拉入群组使用;在其他平台,一般使用邀请链接或者其他方式(详细操作请查看对应平台的相关使用文档)将机器人邀请进服务器、频道,或群组。之后,你可以通过触发 指令回复自定义回复 来使用骰子机器人了。

    指令回复

    指令是和骰子互动的基本方式。一个指令由指令前缀、指令名、指令参数、指令标志组成。

    指令前缀

    为了避免意外触发,指令前面都带有前缀,如 .help 协议 中的 .。按照习惯,指令前缀一般是便于输入的中英文句号,通常是 .

    海豹核心提供了自定义指令前缀功能,因此,其他符号如 /,甚至一段话 哦,我的骰子, 都可以被用作前缀。如果你使用公骰,请注意查阅它的使用说明。

    指令名

    .help 协议 为例,其中的 help 就是指令名。指令可以有别名,例如 查询 就是 find 的别名。

    指令的行为与预期不符?

    海豹通过 扩展 来组织功能和指令,指令名只要求在同一扩展内不重复。

    如果你发现指令的回复与预期不符合,有可能是没有开启正确的扩展,从而执行了来自其他扩展的指令。

    例如,CoC 和 D&D 都存在掷骰检定指令 rc,你需要通过扩展管理指令 ext 来开启其中一个、关闭另一个,以控制指令的行为。

    指令参数

    .help 协议 为例,其中 协议 就是指令参数,参数提供指令所需要的信息。

    虽然海豹在一定程度上可以兼容 .help协议 这种情况,但是在指令名与参数、参数与参数之间添加空格能保证海豹骰识别指令时准确无误,避免出现预期外情况。

    提示:获取指令帮助

    多数情况下,第一个参数为 help,或者没有正确提供指令所需参数时会返回指令的帮助信息。例如,下面是 find 指令返回的帮助信息:

    text
    查询指令,通常使用全文搜索(x86 版)或快速查询(arm, 移动版)
    +.find/查询 <关键字>      // 查找文档。关键字可以多个,用空格分割
    +.find#<分组> <关键字>    // 查找指定分组下的文档。关键字可以多个,用空格分割
    +.find <数字 ID>          // 显示该 ID 的词条
    +.find --rand           // 显示随机词条
    +.find <关键字> --num=10 // 需要更多结果

    依照惯例,帮助说明中的的一些符号有特定含义,说明如下:

    1. <关键字> 的尖括号 <> 表示你应以相应内容替换此处内容。

      正常的用例:.find 火球术 错误的用例:.find <火球术>

    2. 不带有尖括号的内容是字面量,你应该原样输入这里的内容。

    3. [关键字] 的括号 [] 表示此参数可以被省略。

    4. (关键字1|关键字2) 的圆括号 () 搭配竖线 | 表示必须在所列各项中选择一个。

    5. [关键字1|关键字2] 的方括号 [] 搭配竖线 | 表示可以在所列各项中选择一个,或不选择此项。

    指令标志

    标志(flag)和参数相似,但不同于参数往往需要处于按照一定的顺序出现,标志可以无序排列。标志通过特定的关键字(key)来辅助识别,一般形式为 --key=value 或者 --key

    注意

    一些系统(如 iOS)会将两个连字符(hyphen)-- 自动转换为短画线(en dash),输入 flag 时请注意辨别。

    自定义回复

    自定义回复 形式自由,触发机制多样(关键字、正则表达式等),并且能配合海豹核心独特的变量系统使用。

    海豹核心没有预置的自定义回复,完全由骰主自行设定。因此每个骰子使用自定义回复的方法可能完全不同。

    如果你使用公骰,请参阅相应的使用文档以了解骰主设定的自定义回复。

    `,28)]))}const m=a(d,[["render",s]]);export{u as __pageData,m as default}; diff --git a/assets/use_introduce.md.BS9907qJ.lean.js b/assets/use_introduce.md.BS9907qJ.lean.js new file mode 100644 index 000000000..2664976e9 --- /dev/null +++ b/assets/use_introduce.md.BS9907qJ.lean.js @@ -0,0 +1,6 @@ +import{_ as a,c as o,a6 as c,o as t}from"./chunks/framework.B1keMFNq.js";const u=JSON.parse('{"title":"基础概念","description":"","frontmatter":{"lang":"zh-cn","title":"基础概念"},"headers":[],"relativePath":"use/introduce.md","filePath":"use/introduce.md","lastUpdated":1718381802000}'),d={name:"use/introduce.md"};function s(l,e,p,n,i,r){return t(),o("div",null,e[0]||(e[0]=[c(`

    基础概念

    本节内容

    这里讲的是使用海豹核心的相关事项,如果要了解如何搭建和部署骰子,请参考 部署 - 快速开始

    以下内容针对从未接触过骰子的用户准备。如果你已经有使用其他骰系的经验,可以 跳过本节

    什么是骰子?

    骰子这里特指在即时聊天软件(如 QQ、KOOK、Discord)中为 TRPG(跑团)玩家提供方便的机器人。顾名思义,骰子提供各种基于各种跑团规则(如 CoC、D&D)的骰点服务, 同时还包括技能检定、日志记录(Log)等功能。一些骰子服务,包括 SealDice,还提供一系列的自定义和娱乐功能。

    获取和使用

    最简单的方法就是自己 搭建 一个海豹骰自用(私骰),也可以从 SealDice 公骰列表 中寻找一个面向公众提供服务的骰子(公骰)。

    一般而言,公骰是免费的。但他们的维护者(骰主)一般都要求用户严格遵循使用协议,使用前请使用 .help 协议 指令了解你需要注意哪些事项。

    危险:QQ 骰子的使用注意项

    QQ 并未提供公开的机器人接口,因此机器人只能使用第三方软件作为假用户接入。QQ 可能会检测到这些机器人,将它们视为诈骗而予以警告、封禁,甚至永久冻结。

    因此,在 QQ 使用骰子有许多约定俗成的规则,例如必须使用指令使骰子退群,而严禁直接移出群聊。为了尊重骰主的劳动成果,你应该遵守这些规则。

    在 QQ 上,你需要和骰子成为好友,然后拉入群组使用;在其他平台,一般使用邀请链接或者其他方式(详细操作请查看对应平台的相关使用文档)将机器人邀请进服务器、频道,或群组。之后,你可以通过触发 指令回复自定义回复 来使用骰子机器人了。

    指令回复

    指令是和骰子互动的基本方式。一个指令由指令前缀、指令名、指令参数、指令标志组成。

    指令前缀

    为了避免意外触发,指令前面都带有前缀,如 .help 协议 中的 .。按照习惯,指令前缀一般是便于输入的中英文句号,通常是 .

    海豹核心提供了自定义指令前缀功能,因此,其他符号如 /,甚至一段话 哦,我的骰子, 都可以被用作前缀。如果你使用公骰,请注意查阅它的使用说明。

    指令名

    .help 协议 为例,其中的 help 就是指令名。指令可以有别名,例如 查询 就是 find 的别名。

    指令的行为与预期不符?

    海豹通过 扩展 来组织功能和指令,指令名只要求在同一扩展内不重复。

    如果你发现指令的回复与预期不符合,有可能是没有开启正确的扩展,从而执行了来自其他扩展的指令。

    例如,CoC 和 D&D 都存在掷骰检定指令 rc,你需要通过扩展管理指令 ext 来开启其中一个、关闭另一个,以控制指令的行为。

    指令参数

    .help 协议 为例,其中 协议 就是指令参数,参数提供指令所需要的信息。

    虽然海豹在一定程度上可以兼容 .help协议 这种情况,但是在指令名与参数、参数与参数之间添加空格能保证海豹骰识别指令时准确无误,避免出现预期外情况。

    提示:获取指令帮助

    多数情况下,第一个参数为 help,或者没有正确提供指令所需参数时会返回指令的帮助信息。例如,下面是 find 指令返回的帮助信息:

    text
    查询指令,通常使用全文搜索(x86 版)或快速查询(arm, 移动版)
    +.find/查询 <关键字>      // 查找文档。关键字可以多个,用空格分割
    +.find#<分组> <关键字>    // 查找指定分组下的文档。关键字可以多个,用空格分割
    +.find <数字 ID>          // 显示该 ID 的词条
    +.find --rand           // 显示随机词条
    +.find <关键字> --num=10 // 需要更多结果

    依照惯例,帮助说明中的的一些符号有特定含义,说明如下:

    1. <关键字> 的尖括号 <> 表示你应以相应内容替换此处内容。

      正常的用例:.find 火球术 错误的用例:.find <火球术>

    2. 不带有尖括号的内容是字面量,你应该原样输入这里的内容。

    3. [关键字] 的括号 [] 表示此参数可以被省略。

    4. (关键字1|关键字2) 的圆括号 () 搭配竖线 | 表示必须在所列各项中选择一个。

    5. [关键字1|关键字2] 的方括号 [] 搭配竖线 | 表示可以在所列各项中选择一个,或不选择此项。

    指令标志

    标志(flag)和参数相似,但不同于参数往往需要处于按照一定的顺序出现,标志可以无序排列。标志通过特定的关键字(key)来辅助识别,一般形式为 --key=value 或者 --key

    注意

    一些系统(如 iOS)会将两个连字符(hyphen)-- 自动转换为短画线(en dash),输入 flag 时请注意辨别。

    自定义回复

    自定义回复 形式自由,触发机制多样(关键字、正则表达式等),并且能配合海豹核心独特的变量系统使用。

    海豹核心没有预置的自定义回复,完全由骰主自行设定。因此每个骰子使用自定义回复的方法可能完全不同。

    如果你使用公骰,请参阅相应的使用文档以了解骰主设定的自定义回复。

    `,28)]))}const m=a(d,[["render",s]]);export{u as __pageData,m as default}; diff --git a/assets/use_log.md.B5tCfvi7.js b/assets/use_log.md.B5tCfvi7.js new file mode 100644 index 000000000..af9c7ec20 --- /dev/null +++ b/assets/use_log.md.B5tCfvi7.js @@ -0,0 +1 @@ +import{_ as e,c as a,a6 as t,o as c}from"./chunks/framework.B1keMFNq.js";const g=JSON.parse('{"title":"日志","description":"","frontmatter":{"lang":"zh-cn","title":"日志"},"headers":[],"relativePath":"use/log.md","filePath":"use/log.md","lastUpdated":1718381802000}'),d={name:"use/log.md"};function p(l,o,s,r,i,n){return c(),a("div",null,o[0]||(o[0]=[t('

    日志

    本节内容

    本节将展示记录跑团日志相关的指令,请善用侧边栏和搜索,按需阅读文档。

    .log 跑团日志

    记录日志

    对于每个群组,有若干个日志记录和一个当前日志。日志记录是本群记录过的所有日志。当前日志指向本群的其中一个日志记录,可以为空,但不会存在多个。

    注意

    海豹核心的日志记录只在骰子启用时进行。

    即,如果你在一个群中通过 .bot off 关闭了骰子,即使有记录中的日志,也会暂停。

    .log new <日志名>

    新建一份日志,并且开始记录。

    如果本群的当前日志不为空,则不能创建。如果创建成功,将本群的当前日志设定成新日志。

    .log on [<日志名>]

    如果不指定日志名,如果当前日志存在,则开始记录本群的当前日志。

    如果指定日志名,则开始记录指定的日志,当前日志设定为指定的日志。

    .log off

    暂停记录当前日志。

    .log halt / .log end

    停止记录当前日志,将本群的当前日志设定为空。

    如果使用的是 .log end,还会向海豹日志染色器上传日志,并返回一个获取链接。

    停止的日志并不会丢失,仍然存在于本群的日志记录中,可以使用 .log on <日志名> 继续记录。

    数据统计

    .log stat [<日志名>] / .stat log [<日志名>]

    统计指定日志中检定的成功失败数量,与角色的属性数值变化。

    如果本群的当前日志不为空,可以省略日志名,统计当前日志。

    管理日志

    .log list

    列出本群的所有日志记录。

    .log get <日志名>

    重新获取指定日志的染色器链接。

    .log del <日志名>

    删除指定日志。

    注意

    删除的日志在海豹核心中永远失去,无法再继续记录。

    如果已经上传到染色器,该链接仍然可以使用。你也可以在海豹核心中的 data/default/log-exports/ 目录寻找日志的文件快照。

    .log export <日志名>

    如果平台支持发送文件,海豹核心将以 txt 文本文件的形式发送指定日志的全文。

    .log export <日志名> <邮箱地址> [<更多邮箱地址>...]

    如果骰子配置了发件邮箱(见 UI「综合设置 - 基本设置」),海豹核心可以以 txt 文件附件的形式,向每个指定的邮箱地址发送指定日志的全文。

    多个收件邮箱用空格隔开。

    骰主代取 Log

    对于已经解散/退出的群聊,如果还想要取出其中的日志,需要知道对应的群号。

    你可在任意有 Master 权限的交互平台做以下操作:

    首先使用 .log list <群号> 列出该群的所有日志记录。

    然后,使用 .log masterget <群号> <日志名> 获取指定日志记录的染色器链接。

    UI 中管理跑团 Log

    作为骰主,你也可以在管理后台的 扩展功能 - 跑团日志 界面,管理所有群的所有日志。

    .ob 旁观

    .ob

    让使用者成为观众。

    这个指令的作用实际是给使用者的名字上前缀 ob。不会造成其他的效果。

    对于海豹日志染色器,名字前缀有 ob 的用户发言可以被一键去除。

    .ob exit

    如果使用者的名字有ob前缀,这个指令将其去除。

    .sn 自动群名片

    开启后,当用户角色卡的数值变化时,自动更新用户的群名片。

    更改其他玩家的名片,需要骰子账号有适当的权限。

    对于 QQ,这个权限是群主或群管理员。

    预设模板

    .sn coc / .sn cocL角色名 SAN70 HP14/14 DEX60

    克苏鲁的呼唤常用格式,使用 cocL 以在名片中使用小写字母。

    .sn dnd角色名 HP10/10 AC8 DC6 PP8

    龙与地下城常用格式。

    .sn none角色名

    空白名片,当角色名变化时也会自动更新。

    扩展规则

    有些插件提供的扩展规则也定义了名片模板。对于这样的扩展规则,可以使用 .sn <规则名> 使用其模板。

    自定义模板

    .sn expr <模板>

    在模板中使用变量以自动更新。

    例如,CoC 模板的等价写法是 .sn expr {$t玩家_RAW} SAN{san} HP{hp}/{hpmax} DEX{dex}

    关闭自动修改

    .sn off

    .hiy 数据统计

    海豹核心不提供统计整体成功率的功能。

    ',68)]))}const b=e(d,[["render",p]]);export{g as __pageData,b as default}; diff --git a/assets/use_log.md.B5tCfvi7.lean.js b/assets/use_log.md.B5tCfvi7.lean.js new file mode 100644 index 000000000..af9c7ec20 --- /dev/null +++ b/assets/use_log.md.B5tCfvi7.lean.js @@ -0,0 +1 @@ +import{_ as e,c as a,a6 as t,o as c}from"./chunks/framework.B1keMFNq.js";const g=JSON.parse('{"title":"日志","description":"","frontmatter":{"lang":"zh-cn","title":"日志"},"headers":[],"relativePath":"use/log.md","filePath":"use/log.md","lastUpdated":1718381802000}'),d={name:"use/log.md"};function p(l,o,s,r,i,n){return c(),a("div",null,o[0]||(o[0]=[t('

    日志

    本节内容

    本节将展示记录跑团日志相关的指令,请善用侧边栏和搜索,按需阅读文档。

    .log 跑团日志

    记录日志

    对于每个群组,有若干个日志记录和一个当前日志。日志记录是本群记录过的所有日志。当前日志指向本群的其中一个日志记录,可以为空,但不会存在多个。

    注意

    海豹核心的日志记录只在骰子启用时进行。

    即,如果你在一个群中通过 .bot off 关闭了骰子,即使有记录中的日志,也会暂停。

    .log new <日志名>

    新建一份日志,并且开始记录。

    如果本群的当前日志不为空,则不能创建。如果创建成功,将本群的当前日志设定成新日志。

    .log on [<日志名>]

    如果不指定日志名,如果当前日志存在,则开始记录本群的当前日志。

    如果指定日志名,则开始记录指定的日志,当前日志设定为指定的日志。

    .log off

    暂停记录当前日志。

    .log halt / .log end

    停止记录当前日志,将本群的当前日志设定为空。

    如果使用的是 .log end,还会向海豹日志染色器上传日志,并返回一个获取链接。

    停止的日志并不会丢失,仍然存在于本群的日志记录中,可以使用 .log on <日志名> 继续记录。

    数据统计

    .log stat [<日志名>] / .stat log [<日志名>]

    统计指定日志中检定的成功失败数量,与角色的属性数值变化。

    如果本群的当前日志不为空,可以省略日志名,统计当前日志。

    管理日志

    .log list

    列出本群的所有日志记录。

    .log get <日志名>

    重新获取指定日志的染色器链接。

    .log del <日志名>

    删除指定日志。

    注意

    删除的日志在海豹核心中永远失去,无法再继续记录。

    如果已经上传到染色器,该链接仍然可以使用。你也可以在海豹核心中的 data/default/log-exports/ 目录寻找日志的文件快照。

    .log export <日志名>

    如果平台支持发送文件,海豹核心将以 txt 文本文件的形式发送指定日志的全文。

    .log export <日志名> <邮箱地址> [<更多邮箱地址>...]

    如果骰子配置了发件邮箱(见 UI「综合设置 - 基本设置」),海豹核心可以以 txt 文件附件的形式,向每个指定的邮箱地址发送指定日志的全文。

    多个收件邮箱用空格隔开。

    骰主代取 Log

    对于已经解散/退出的群聊,如果还想要取出其中的日志,需要知道对应的群号。

    你可在任意有 Master 权限的交互平台做以下操作:

    首先使用 .log list <群号> 列出该群的所有日志记录。

    然后,使用 .log masterget <群号> <日志名> 获取指定日志记录的染色器链接。

    UI 中管理跑团 Log

    作为骰主,你也可以在管理后台的 扩展功能 - 跑团日志 界面,管理所有群的所有日志。

    .ob 旁观

    .ob

    让使用者成为观众。

    这个指令的作用实际是给使用者的名字上前缀 ob。不会造成其他的效果。

    对于海豹日志染色器,名字前缀有 ob 的用户发言可以被一键去除。

    .ob exit

    如果使用者的名字有ob前缀,这个指令将其去除。

    .sn 自动群名片

    开启后,当用户角色卡的数值变化时,自动更新用户的群名片。

    更改其他玩家的名片,需要骰子账号有适当的权限。

    对于 QQ,这个权限是群主或群管理员。

    预设模板

    .sn coc / .sn cocL角色名 SAN70 HP14/14 DEX60

    克苏鲁的呼唤常用格式,使用 cocL 以在名片中使用小写字母。

    .sn dnd角色名 HP10/10 AC8 DC6 PP8

    龙与地下城常用格式。

    .sn none角色名

    空白名片,当角色名变化时也会自动更新。

    扩展规则

    有些插件提供的扩展规则也定义了名片模板。对于这样的扩展规则,可以使用 .sn <规则名> 使用其模板。

    自定义模板

    .sn expr <模板>

    在模板中使用变量以自动更新。

    例如,CoC 模板的等价写法是 .sn expr {$t玩家_RAW} SAN{san} HP{hp}/{hpmax} DEX{dex}

    关闭自动修改

    .sn off

    .hiy 数据统计

    海豹核心不提供统计整体成功率的功能。

    ',68)]))}const b=e(d,[["render",p]]);export{g as __pageData,b as default}; diff --git a/assets/use_other_rules.md.D9cDnbAa.js b/assets/use_other_rules.md.D9cDnbAa.js new file mode 100644 index 000000000..ef76fb3c2 --- /dev/null +++ b/assets/use_other_rules.md.D9cDnbAa.js @@ -0,0 +1 @@ +import{_ as e,c as r,a6 as o,o as t}from"./chunks/framework.B1keMFNq.js";const u=JSON.parse('{"title":"其它规则支持","description":"","frontmatter":{"lang":"zh-cn","title":"其它规则支持"},"headers":[],"relativePath":"use/other_rules.md","filePath":"use/other_rules.md","lastUpdated":1715446720000}'),s={name:"use/other_rules.md"};function l(n,a,h,d,p,c){return t(),r("div",null,a[0]||(a[0]=[o('

    其它规则支持

    本节内容

    本节是海豹支持的其他 TRPG 规则的索引。

    这些规则因指令数量少或仍在预览阶段的原因,未被单独作为扩展。下面将引导你跳转到对应规则的具体命令支持页。

    绿色三角洲 Delta Green

    「绿色三角洲」(Delta Green,简称 DG)是克苏鲁的呼唤(CoC)的拓展规则,同时也是作为游戏核心的秘密组织的名字。绿色三角洲是保护人类免遭旧日支配者威胁的「抗神组织」,其队员(特工)大多在政府部门工作,组织本身是非官方且非法的存在。他们的敌人不仅是旧日支配者的眷族或崇拜者,同时也包括操弄禁忌知识的人类势力。

    参阅 克苏鲁的呼唤 7 版 # 设置房规,使用 .setcoc dg 切换到 DG 支持。

    黑暗世界 World of Darkness

    「黑暗世界」(World of Darkness,简称 WOD)是一款超自然题材的 TRPG 游戏。在这个世界中,所有阴谋论都是真的,都市传说不再是什么可以轻松无视的「故事」。你可能会从镜子里召唤出血腥玛丽,也可能登上电梯后不慎消失在超市的某个漆黑楼层中。

    参阅 功能 # WOD 规则骰点

    双重十字 Double Cross

    「双重十字」(Double Cross,简称 DX)是一款日系超能力战斗 TRPG 游戏。在病毒感染了绝大多数人类使得他们进化为超能力者的时代,PL 在 GM 的指引下为了守护重要的人或者日常生活而战斗。

    参阅 功能 # 双重十字规则骰点

    暗影狂奔 Shadowrun

    「暗影狂奔」(Shadowrun,简称 SR)是一款科学奇幻 TRPG 游戏,背景设定在近未来的灵气复苏赛博朋克虚构世界中。

    参阅 功能 # 暗影狂奔规则骰点

    共鸣性怪异 Emoklore

    与我们所生活的现实颇为相似的另一个世界。

    超常的存在——「怪异」——确确实实地存在于人们身边的世界。

    这就是《共鸣性怪异 TRPG》的舞台。

    参阅 功能 # 共鸣性怪异规则骰点

    更多规则

    除了上述由官方提供支持的规则之外,海豹社区还通过插件的形式为其它规则提供了支持,向你所使用的骰子主人请求安装相应插件吧。

    参阅 配置 - JavaScript 插件,在插件仓库中获取相应插件。

    ',22)]))}const f=e(s,[["render",l]]);export{u as __pageData,f as default}; diff --git a/assets/use_other_rules.md.D9cDnbAa.lean.js b/assets/use_other_rules.md.D9cDnbAa.lean.js new file mode 100644 index 000000000..ef76fb3c2 --- /dev/null +++ b/assets/use_other_rules.md.D9cDnbAa.lean.js @@ -0,0 +1 @@ +import{_ as e,c as r,a6 as o,o as t}from"./chunks/framework.B1keMFNq.js";const u=JSON.parse('{"title":"其它规则支持","description":"","frontmatter":{"lang":"zh-cn","title":"其它规则支持"},"headers":[],"relativePath":"use/other_rules.md","filePath":"use/other_rules.md","lastUpdated":1715446720000}'),s={name:"use/other_rules.md"};function l(n,a,h,d,p,c){return t(),r("div",null,a[0]||(a[0]=[o('

    其它规则支持

    本节内容

    本节是海豹支持的其他 TRPG 规则的索引。

    这些规则因指令数量少或仍在预览阶段的原因,未被单独作为扩展。下面将引导你跳转到对应规则的具体命令支持页。

    绿色三角洲 Delta Green

    「绿色三角洲」(Delta Green,简称 DG)是克苏鲁的呼唤(CoC)的拓展规则,同时也是作为游戏核心的秘密组织的名字。绿色三角洲是保护人类免遭旧日支配者威胁的「抗神组织」,其队员(特工)大多在政府部门工作,组织本身是非官方且非法的存在。他们的敌人不仅是旧日支配者的眷族或崇拜者,同时也包括操弄禁忌知识的人类势力。

    参阅 克苏鲁的呼唤 7 版 # 设置房规,使用 .setcoc dg 切换到 DG 支持。

    黑暗世界 World of Darkness

    「黑暗世界」(World of Darkness,简称 WOD)是一款超自然题材的 TRPG 游戏。在这个世界中,所有阴谋论都是真的,都市传说不再是什么可以轻松无视的「故事」。你可能会从镜子里召唤出血腥玛丽,也可能登上电梯后不慎消失在超市的某个漆黑楼层中。

    参阅 功能 # WOD 规则骰点

    双重十字 Double Cross

    「双重十字」(Double Cross,简称 DX)是一款日系超能力战斗 TRPG 游戏。在病毒感染了绝大多数人类使得他们进化为超能力者的时代,PL 在 GM 的指引下为了守护重要的人或者日常生活而战斗。

    参阅 功能 # 双重十字规则骰点

    暗影狂奔 Shadowrun

    「暗影狂奔」(Shadowrun,简称 SR)是一款科学奇幻 TRPG 游戏,背景设定在近未来的灵气复苏赛博朋克虚构世界中。

    参阅 功能 # 暗影狂奔规则骰点

    共鸣性怪异 Emoklore

    与我们所生活的现实颇为相似的另一个世界。

    超常的存在——「怪异」——确确实实地存在于人们身边的世界。

    这就是《共鸣性怪异 TRPG》的舞台。

    参阅 功能 # 共鸣性怪异规则骰点

    更多规则

    除了上述由官方提供支持的规则之外,海豹社区还通过插件的形式为其它规则提供了支持,向你所使用的骰子主人请求安装相应插件吧。

    参阅 配置 - JavaScript 插件,在插件仓库中获取相应插件。

    ',22)]))}const f=e(s,[["render",l]]);export{u as __pageData,f as default}; diff --git a/assets/use_quick-start.md.Dv-jaOy9.js b/assets/use_quick-start.md.Dv-jaOy9.js new file mode 100644 index 000000000..acb31a93e --- /dev/null +++ b/assets/use_quick-start.md.Dv-jaOy9.js @@ -0,0 +1 @@ +import{_ as d,c as e,a6 as o,o as a}from"./chunks/framework.B1keMFNq.js";const b=JSON.parse('{"title":"快速上手","description":"","frontmatter":{"lang":"zh-cn","title":"快速上手"},"headers":[],"relativePath":"use/quick-start.md","filePath":"use/quick-start.md","lastUpdated":1718381802000}'),c={name:"use/quick-start.md"};function r(l,t,s,i,h,n){return a(),e("div",null,t[0]||(t[0]=[o('

    快速上手

    本节内容

    本节将展示 TRPG 跑团过程玩家使用海豹骰的常用指令和一般流程,请善用搜索,按需阅读文档。

    常用指令速查

    核心指令
    动作指令
    移出骰子.bot bye / .dismiss
    开关骰子.bot on/off
    开关自定义回复.reply on/off
    新建日志.log new <日志名>
    暂停/恢复日志记录.log off/on
    结束并获取日志.log end
    重新获取日志.log get <日志名>
    掷骰
    动作指令
    掷骰.r <x>d<y>,并有诸多扩展写法
    检定.ra <技能>
    暗骰 / 暗中检定.rh <x>d<y> / .rah <技能>
    代替检定.ra <技能> @代替目标
    设定默认骰子面数.set <面数>
    角色卡
    动作指令
    新建空白卡.pc new <角色名>
    修改角色名.nn <角色名>
    录入数据.st <属性><值>
    列出数据.st show [<属性>]
    列出角色卡.pc list
    绑定角色卡.pc tag <角色名>
    删除角色卡.pc del <角色名>
    自动名片.sn (参考说明)
    CoC 7th
    动作指令
    切换到 CoC 规则.set coc
    生成随机属性数值.coc <数量>
    理智检定.sc <成功时失去理智>/<失败时失去理智>
    对抗检定.rav <自身技能> <对手技能> @对手
    奖励骰与惩罚骰.ra (b|p)<数量> <技能>
    疯狂症状.ti 即时疯狂症状,.li 总结性疯狂症状
    技能成长.en <技能>
    切换房规.setcoc details 列出房规,.setcoc <序号> 设定房规
    D&D 5E
    动作指令
    切换到 D&D 规则.set dnd
    生成随机属性值.dnd <数量>
    优势/劣势掷骰.r d(优势|劣势)
    检定.rc [优势|劣势] <技能>[+<调整值>]
    先攻.ri (<角色名>)
    先攻列表.init
    随机 D&D 名字.namednd <种族> <数量>
    其它
    动作指令
    给骰主发送消息.send <消息>
    获取帮助.help <指令名称>
    搜索词条.find <关键字>
    暗影狂奔掷骰.rsr
    WoD 掷骰.ww
    双十字掷骰.dx
    共鸣性怪异掷骰 / 生成属性.ek / .ekgen

    通常流程

    玩家视角

    这一段落是以玩家视角而非主持人视角编写的。

    如果你想主持游戏,我们推荐你较为完整地了解海豹核心提供的各种指令,尤其是 CoC 指令与 D&D 指令相冲突的部分。

    游戏主持人邀请你进入群聊(根据平台不同,也可能是频道、服务器等,本节以群聊代称)。

    提示:尊重主持人与其他玩家

    如果你对于玩法还不熟悉,在主持人要求你使用骰子时才动作,或者在动作前请求主持人的许可。

    你可能用到以下指令:

    • nn 命名角色卡
    • st 设置和修改角色卡属性
    • sn 设置自动名片
    • r 掷骰:需要产生一个随机数的时候,例如伤害值
    • ra/rc 检定:你使用一个技能
    • 根据你使用的规则,你还可能用到其他指令,请参考下面的段落。

    如果还需要使用这张人物卡,并且不在这个群聊使用:

    • pc save 保存到角色卡列表
    • 你还会用到其他指令才能在其他群聊使用这张角色卡。参考 .pc help

    秘密团

    按照主持人的要求,你需要在不同群聊中使用同一角色卡,并且需要数据互相同步。

    • pc new <角色名> 创建一张可以跨群聊使用的角色卡并绑定到当前群聊
    • pc tag <角色名> 将指定角色卡绑定到当前群聊

    通过这种方式,你可在不同群聊之间使用同一角色卡。在任意群聊产生的数据修改都会自动同步到其他绑定的群聊。

    进行 CoC 游戏

    创作角色卡

    .coc <数量> 生成指定数量的随机属性。

    理智检定 San Check

    .sc <成功时失去理智>/<失败时失去理智>

    例如:.sc 0/1 .sc 1/1d4 .sc 1d10/1d100

    抽取疯狂症状

    .ti 抽取即时疯狂症状;

    或者,在主持人要求时 .li 抽取总结性疯狂症状。

    技能成长

    .en <技能> 对技能进行一次成长。

    进行 D&D 游戏

    创作角色卡

    .dnd <数量> 生成指定数量的随机属性。

    设定先攻值

    .ri <先攻值> 设定自己的先攻值。

    先攻值支持以下三种写法:

    1. 12 直接写数值
    2. +2 写调整值,表示 D20+2
    3. =D20+2 写骰点式

    设定临时属性

    .buff <参数> 设定临时属性。参数的写法参考角色数据录入的 st 指令。

    法术位

    .ss 指令设定角色的法术位。请使用 .ss help 查看用法。

    .cast 指令使用法术。请使用 .cast help 查看用法。

    长休

    .longrest 指令使角色进行长休。

    死亡豁免

    .ds 指令进行死亡豁免。请使用 .ds help 查看用法。

    ',48)]))}const u=d(c,[["render",r]]);export{b as __pageData,u as default}; diff --git a/assets/use_quick-start.md.Dv-jaOy9.lean.js b/assets/use_quick-start.md.Dv-jaOy9.lean.js new file mode 100644 index 000000000..acb31a93e --- /dev/null +++ b/assets/use_quick-start.md.Dv-jaOy9.lean.js @@ -0,0 +1 @@ +import{_ as d,c as e,a6 as o,o as a}from"./chunks/framework.B1keMFNq.js";const b=JSON.parse('{"title":"快速上手","description":"","frontmatter":{"lang":"zh-cn","title":"快速上手"},"headers":[],"relativePath":"use/quick-start.md","filePath":"use/quick-start.md","lastUpdated":1718381802000}'),c={name:"use/quick-start.md"};function r(l,t,s,i,h,n){return a(),e("div",null,t[0]||(t[0]=[o('

    快速上手

    本节内容

    本节将展示 TRPG 跑团过程玩家使用海豹骰的常用指令和一般流程,请善用搜索,按需阅读文档。

    常用指令速查

    核心指令
    动作指令
    移出骰子.bot bye / .dismiss
    开关骰子.bot on/off
    开关自定义回复.reply on/off
    新建日志.log new <日志名>
    暂停/恢复日志记录.log off/on
    结束并获取日志.log end
    重新获取日志.log get <日志名>
    掷骰
    动作指令
    掷骰.r <x>d<y>,并有诸多扩展写法
    检定.ra <技能>
    暗骰 / 暗中检定.rh <x>d<y> / .rah <技能>
    代替检定.ra <技能> @代替目标
    设定默认骰子面数.set <面数>
    角色卡
    动作指令
    新建空白卡.pc new <角色名>
    修改角色名.nn <角色名>
    录入数据.st <属性><值>
    列出数据.st show [<属性>]
    列出角色卡.pc list
    绑定角色卡.pc tag <角色名>
    删除角色卡.pc del <角色名>
    自动名片.sn (参考说明)
    CoC 7th
    动作指令
    切换到 CoC 规则.set coc
    生成随机属性数值.coc <数量>
    理智检定.sc <成功时失去理智>/<失败时失去理智>
    对抗检定.rav <自身技能> <对手技能> @对手
    奖励骰与惩罚骰.ra (b|p)<数量> <技能>
    疯狂症状.ti 即时疯狂症状,.li 总结性疯狂症状
    技能成长.en <技能>
    切换房规.setcoc details 列出房规,.setcoc <序号> 设定房规
    D&D 5E
    动作指令
    切换到 D&D 规则.set dnd
    生成随机属性值.dnd <数量>
    优势/劣势掷骰.r d(优势|劣势)
    检定.rc [优势|劣势] <技能>[+<调整值>]
    先攻.ri (<角色名>)
    先攻列表.init
    随机 D&D 名字.namednd <种族> <数量>
    其它
    动作指令
    给骰主发送消息.send <消息>
    获取帮助.help <指令名称>
    搜索词条.find <关键字>
    暗影狂奔掷骰.rsr
    WoD 掷骰.ww
    双十字掷骰.dx
    共鸣性怪异掷骰 / 生成属性.ek / .ekgen

    通常流程

    玩家视角

    这一段落是以玩家视角而非主持人视角编写的。

    如果你想主持游戏,我们推荐你较为完整地了解海豹核心提供的各种指令,尤其是 CoC 指令与 D&D 指令相冲突的部分。

    游戏主持人邀请你进入群聊(根据平台不同,也可能是频道、服务器等,本节以群聊代称)。

    提示:尊重主持人与其他玩家

    如果你对于玩法还不熟悉,在主持人要求你使用骰子时才动作,或者在动作前请求主持人的许可。

    你可能用到以下指令:

    • nn 命名角色卡
    • st 设置和修改角色卡属性
    • sn 设置自动名片
    • r 掷骰:需要产生一个随机数的时候,例如伤害值
    • ra/rc 检定:你使用一个技能
    • 根据你使用的规则,你还可能用到其他指令,请参考下面的段落。

    如果还需要使用这张人物卡,并且不在这个群聊使用:

    • pc save 保存到角色卡列表
    • 你还会用到其他指令才能在其他群聊使用这张角色卡。参考 .pc help

    秘密团

    按照主持人的要求,你需要在不同群聊中使用同一角色卡,并且需要数据互相同步。

    • pc new <角色名> 创建一张可以跨群聊使用的角色卡并绑定到当前群聊
    • pc tag <角色名> 将指定角色卡绑定到当前群聊

    通过这种方式,你可在不同群聊之间使用同一角色卡。在任意群聊产生的数据修改都会自动同步到其他绑定的群聊。

    进行 CoC 游戏

    创作角色卡

    .coc <数量> 生成指定数量的随机属性。

    理智检定 San Check

    .sc <成功时失去理智>/<失败时失去理智>

    例如:.sc 0/1 .sc 1/1d4 .sc 1d10/1d100

    抽取疯狂症状

    .ti 抽取即时疯狂症状;

    或者,在主持人要求时 .li 抽取总结性疯狂症状。

    技能成长

    .en <技能> 对技能进行一次成长。

    进行 D&D 游戏

    创作角色卡

    .dnd <数量> 生成指定数量的随机属性。

    设定先攻值

    .ri <先攻值> 设定自己的先攻值。

    先攻值支持以下三种写法:

    1. 12 直接写数值
    2. +2 写调整值,表示 D20+2
    3. =D20+2 写骰点式

    设定临时属性

    .buff <参数> 设定临时属性。参数的写法参考角色数据录入的 st 指令。

    法术位

    .ss 指令设定角色的法术位。请使用 .ss help 查看用法。

    .cast 指令使用法术。请使用 .cast help 查看用法。

    长休

    .longrest 指令使角色进行长休。

    死亡豁免

    .ds 指令进行死亡豁免。请使用 .ds help 查看用法。

    ',48)]))}const u=d(c,[["render",r]]);export{b as __pageData,u as default}; diff --git a/assets/use_story.md.B5avqG25.js b/assets/use_story.md.B5avqG25.js new file mode 100644 index 000000000..16c7b2e7a --- /dev/null +++ b/assets/use_story.md.B5avqG25.js @@ -0,0 +1 @@ +import{_ as d,c as l,a6 as o,j as t,G as c,B as s,o as n}from"./chunks/framework.B1keMFNq.js";const k=JSON.parse('{"title":"故事","description":"","frontmatter":{"lang":"zh-cn","title":"故事"},"headers":[],"relativePath":"use/story.md","filePath":"use/story.md","lastUpdated":1728702230000}'),i={name:"use/story.md"},p={class:"info custom-block"};function r(m,e,u,h,g,b){const a=s("ChatBox");return n(),l("div",null,[e[1]||(e[1]=o('

    故事

    本节内容

    本节将展示对故事发展有帮助的一些指令,请善用侧边栏和搜索,按需阅读文档。

    .name 随机名字

    .name [cn|en|jp] [<数量>] [男|女]

    抽取随机名字。

    可以指定语言,如果不指定,默认是中文。可以指定数量,如果不指定,默认是 5 个。可以指定性别,如果不指定,默认随机生成。

    .namednd 随机 DND 名字

    .namednd <种族> [<数量>]

    抽取指定种族的随机名字。可以指定数量,默认是 5 个。

    补充:可以选用的种族
    • 达马拉人
    • 卡林珊人
    • 莱瑟曼人
    • 受国人
    • 精灵
    • 矮人
    • 兽人
    • 海族
    • 地精

    .who 随机排列顺序

    .who <排列元素>...

    随机打乱提供的元素。

    ',13)),t("div",p,[e[0]||(e[0]=t("p",{class:"custom-block-title"},"示例",-1)),c(a,{messages:[{content:".who 1 2 3 4 5 6 7 8 9",send:!0},{content:"打乱顺序: 9, 7, 6, 3, 1, 4, 8, 5, 2"}]})]),e[2]||(e[2]=o('

    .modu 魔都模组查询

    感谢魔都的章鱼站长给予的许可和支持!

    .modu search <关键字> [<页码>]

    使用关键字进行搜索。

    .modu rec <关键字> [<页码>]

    使用关键字对编辑推荐模组进行搜索。

    .modu author <关键字> [<页码>]

    搜索作者符合关键字的模组。

    .modu luck [<页码>]

    查看编辑推荐。

    .modu get <编号>

    查看指定模组的详细内容。

    .modu roll

    随机抽取一个模组。

    .modu help

    显示帮助。

    ',16))])}const q=d(i,[["render",r]]);export{k as __pageData,q as default}; diff --git a/assets/use_story.md.B5avqG25.lean.js b/assets/use_story.md.B5avqG25.lean.js new file mode 100644 index 000000000..16c7b2e7a --- /dev/null +++ b/assets/use_story.md.B5avqG25.lean.js @@ -0,0 +1 @@ +import{_ as d,c as l,a6 as o,j as t,G as c,B as s,o as n}from"./chunks/framework.B1keMFNq.js";const k=JSON.parse('{"title":"故事","description":"","frontmatter":{"lang":"zh-cn","title":"故事"},"headers":[],"relativePath":"use/story.md","filePath":"use/story.md","lastUpdated":1728702230000}'),i={name:"use/story.md"},p={class:"info custom-block"};function r(m,e,u,h,g,b){const a=s("ChatBox");return n(),l("div",null,[e[1]||(e[1]=o('

    故事

    本节内容

    本节将展示对故事发展有帮助的一些指令,请善用侧边栏和搜索,按需阅读文档。

    .name 随机名字

    .name [cn|en|jp] [<数量>] [男|女]

    抽取随机名字。

    可以指定语言,如果不指定,默认是中文。可以指定数量,如果不指定,默认是 5 个。可以指定性别,如果不指定,默认随机生成。

    .namednd 随机 DND 名字

    .namednd <种族> [<数量>]

    抽取指定种族的随机名字。可以指定数量,默认是 5 个。

    补充:可以选用的种族
    • 达马拉人
    • 卡林珊人
    • 莱瑟曼人
    • 受国人
    • 精灵
    • 矮人
    • 兽人
    • 海族
    • 地精

    .who 随机排列顺序

    .who <排列元素>...

    随机打乱提供的元素。

    ',13)),t("div",p,[e[0]||(e[0]=t("p",{class:"custom-block-title"},"示例",-1)),c(a,{messages:[{content:".who 1 2 3 4 5 6 7 8 9",send:!0},{content:"打乱顺序: 9, 7, 6, 3, 1, 4, 8, 5, 2"}]})]),e[2]||(e[2]=o('

    .modu 魔都模组查询

    感谢魔都的章鱼站长给予的许可和支持!

    .modu search <关键字> [<页码>]

    使用关键字进行搜索。

    .modu rec <关键字> [<页码>]

    使用关键字对编辑推荐模组进行搜索。

    .modu author <关键字> [<页码>]

    搜索作者符合关键字的模组。

    .modu luck [<页码>]

    查看编辑推荐。

    .modu get <编号>

    查看指定模组的详细内容。

    .modu roll

    随机抽取一个模组。

    .modu help

    显示帮助。

    ',16))])}const q=d(i,[["render",r]]);export{k as __pageData,q as default}; diff --git a/config/README.html b/config/README.html new file mode 100644 index 000000000..ab8e6487e --- /dev/null +++ b/config/README.html @@ -0,0 +1,52 @@ + + + + + + 配置 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/config/backup.html b/config/backup.html new file mode 100644 index 000000000..59ae017e4 --- /dev/null +++ b/config/backup.html @@ -0,0 +1,52 @@ + + + + + + 备份 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Skip to content

    备份

    本节内容

    本节将介绍关于备份、自动备份、自动清理旧备份的相关设置。

    在本节中的一些部分,你将使用到 cron 表达式。这是一种表达一个或一系列时间点的语法。你可以参考以下内容以学习 cron 表达式。

    请注意,海豹核心使用不含秒数、由 5 个部分组成的 cron 格式,这也是 Linux 系统中使用的格式;而不是包含秒数、由 6 个部分组成的格式。

    关于备份

    经常备份是避免数据损失的最佳手段。海豹核心默认提供每 12 小时一次的自动备份。海豹核心产生的所有备份都位于 backups/ 目录下。

    v1.4.6 起,备份文件的命名遵循以下格式:bak_年月日_时分秒[_auto]_rXX_XXXXXXXX.zip

    如果你使用的是 v1.4.5 或之前版本,文件名格式是:bak-年月日_时分秒[_auto]_随机数.zip

    文件名中含有 auto 字样的是自动生成的备份。

    你也可以对备份行为进行设置。相关设置均位于 WebUI 的「综合设置 - 备份」页面。

    在此页面上,你将看到:自动备份设置、自动清理设置、当前备份文件列表。在更改任何设置后,你需要点击右上角的「保存设置」使之生效。

    手动备份

    点击页面右上角的「立即备份」按钮,可以立即生成一份备份。

    v1.4.6 起,你可以在手动备份时调整备份范围。

    自动备份

    勾选「开启」启用自动备份。

    在「备份间隔」项可以通过 cron 表达式规定自动备份的时机。

    v1.4.6 起,在「备份范围」项,你可选择每次自动备份的范围。

    自动清理

    在「清理模式」中选择「保留一定数量」或「保留一定时间内」启用自动清理。

    配置清理范围

    在「保留一定数量」模式下,自动清理时将保留最新的指定数量的备份文件,更老的文件将被删除。

    在「保留一定时间内」模式下,自动清理时将保留创建时间在指定时间范围内的备份文件,更老的文件将被删除。

    配置清理时机

    勾选「触发方式」中的「自动备份后」和/或「定时」以设置自动清理时机。两种触发方式可以同时使用。

    如果勾选了「自动备份后」,在每次自动备份完成后将执行一次自动清理。

    如果勾选了「定时」,按输入的 cron 表达式指定自动清理的时机。

    备份列表

    在「已备份文件」中按时间从新到旧列出了当前存在的备份文件。

    你可通过「进入批量删除页面」进行手动批量删除。

    点击每一个备份文件右边的「下载」以下载对应文件,点击垃圾桶图标按钮以删除单个备份文件。

    + + + + \ No newline at end of file diff --git a/config/ban.html b/config/ban.html new file mode 100644 index 000000000..b46f816fa --- /dev/null +++ b/config/ban.html @@ -0,0 +1,52 @@ + + + + + + 黑白名单 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Skip to content

    黑白名单

    本节内容

    本节将介绍黑白名单的设置,请善用侧边栏和搜索,按需阅读文档。

    如何设置黑白名单?

    黑白名单是骰子拉黑/豁免的用户/群的列表。来源可能是骰主在后台设置的,也可能是因为触发了某些自动规则添加的。

    黑白名单

    点击海豹 UI 界面的「综合设置 - 黑白名单」选项,你就可以进入黑白名单管理页面。

    添加黑白名单

    UI 手动添加

    点击「添加」按钮,可在后台手动添加黑(白)名单。

    UI 手动添加黑白名单

    指令添加

    使用 - 核心指令

    自动添加

    触发某些自动规则时,可能会自动添加用户进黑名单,如:

    黑白名单设置

    点开「设置选项」,可以对黑白名单进行一些设置。

    黑白名单设置

    黑名单惩罚:

    • 拒绝回复:骰子不回复黑名单用户;
    • 拒绝邀请:骰子自动拒绝黑名单用户的邀请;
    • 退出事发群:比如禁言骰子触发了黑名单事件,会退出禁言的事发群;
    • 使用时立即退出群:有黑名单用户在其他群尝试使用骰子时,骰子会立即退群。

    连带责任:当有用户触发黑名单事件时,对应的群组和邀请人会按 设置的比例 增加怒气值。

    + + + + \ No newline at end of file diff --git a/config/basic.html b/config/basic.html new file mode 100644 index 000000000..e58bd78f6 --- /dev/null +++ b/config/basic.html @@ -0,0 +1,52 @@ + + + + + + 基础设置 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Skip to content

    基础设置

    本节内容

    本节将介绍基础设置内的内容。

    Master 管理

    在这里你可以管理你的骰娘的 Master 列表。

    Master 解锁码

    获取 Master 解锁码。Master 解锁码的用法参见 骰主指令。每次获取有效期 20 分钟。

    Master 列表

    在这里你可以添加、删除或更改 Master。请使用统一 ID,可使用 .userid 指令查看你的账号 ID。

    你也可添加群组 ID,在指定的群中所有人均视为有 Master 权限

    消息通知列表

    会对以下消息进行通知:加群邀请、好友邀请、进入群组、被踢出群、被禁言、自动激活、指令退群。

    此处应使用统一 ID。在你开启「邮箱通知」后,给通知列表中的 QQ 号发送通知时会自动转换成对应邮箱。

    好友邀请

    由于 QQ 的限制,当你 QQ 的「加我为好友时需要的验证方式」设置为「允许任何人」时,添加的好友为单向好友,此时不会发送 骰子成为好友 文案和 好友邀请 通过。

    请你按自己的需求选择其他的验证方式,若设置为「需要验证消息」或「需要回答问题并由我确认」,海豹会按照加好友验证设置自动通过或拒绝。

    邮箱通知

    为处理某些平台通知频繁引起的问题,开启此功能后只会通过邮件进行通知。请慎重决定是否开启,避免出现 为什么我的骰娘不发通知了? 的情况。

    发件邮箱

    填写你希望的发件邮箱,你指定的邮箱需支持通过 SMTP 协议发信,特别提醒:QQ 号被冻结后对应账号的邮箱也无法使用。

    邮箱密钥

    填写邮箱密钥。

    对于一些邮箱,密钥并不是登陆密码;例如:QQ 邮箱的 SMTP 功能需使用单独生成的授权码。

    SMTP 地址

    填写你邮箱服务提供商的 SMTP 地址。例如:QQ 邮箱为 smtp.qq.com

    私骰模式

    因 QQ 的实现变更,此功能暂无实际作用。

    允许自由开关

    允许任何人执行 bot on/off 和 ext on/off,否则只有邀请者、管理员和 Master 进行操作。

    启用戳一戳

    仅 QQ 平台,关闭后不回应戳一戳。

    注意:对接基于 NTQQ PC 端协议的 QQ 方案时,注意对方是否支持 戳一戳 功能

    内置客户端/Lagrange、LLOneBot 和 Napcat 等基于 NTQQ PC 的 QQ 方案,在旧版本中由于 NTQQ 旧协议本身不支持的原因,缺失该功能。

    请使用:

    • 海豹版本 v1.4.6 之前的内置客户端
    • 6e350b0 之前的 Lagrange
    • v3.27.0 之前的 LLOneBot
    • v1.6.7 之前的 Napcat
    • ……

    等方案的用户及时更新或关闭此开关(位于 综合设置 - 基本设置),以免产生不必要的报错信息。

    限制 .text 指令

    默认开启。开启后只有 Master 和信任用户可使用 .text 指令。如果你不了解这个指令,一定要开启。

    忽略 .bot 裸指令

    默认关闭。开启后在群聊中只有 AT 骰子才会响应 .bot 指令。

    存活确认

    定期向通知列表发送消息,以便于骰主知晓存活状态。

    存活消息间隔写法:@every 1h30m10s 表示 1 小时 30 分 10 秒。更多请参阅 cron 文档

    注意:重启骰子后重新计时。

    日志记录提示

    开启后,每记录 N 条文本后,主动发送一条提醒信息,避免忘记 .log off

    刷屏警告

    默认关闭。开启后会对使用指令过快的用户和群组进行警告,警告后继续使用指令会增加怒气值,只对 QQ 平台有效。

    刷屏警告工作原理为令牌桶算法,具体请看 wiki

    注意

    如果您感觉难以理解,为了稳定性还是不要更改比较好!

    对速率限制的所有更改 重启后生效

    速率设置支持以下格式:

    @every 3s 每 3 秒一个;

    3 每秒 3 个。

    访问控制

    对于 UI 界面地址由 {Host:Port} 两部分组成。

    Host 可分为两种,0.0.0.0 主要用于服务器,代表可以在公网中用你的手机和电脑访问;127.0.0.1 主要用于自己的电脑/手机,只能在当前设备上管理海豹。

    Port 为海豹核心运行的端口,默认为 3211,想开多个海豹必须修改端口号!

    注意:重启骰子后生效!

    当你的海豹核心运行在公网时可设置密码,避免他人访问。

    登录后会自动记住一段时间。如果忘记密码请看 我忘了 WebUI 密码

    QQ 频道设置

    开启后将回应频道消息。基于 NTQQ 的连接方案暂不支持 QQ 频道。

    加好友验证

    仅当 QQ 账号选用「回答问题并由我确认」方式时有效。

    如果留空,则海豹核心将通过所有好友请求。

    你设定的答案不应含有空格。如果设置了多个问题,将所有答案用空格连接起来。例如:

    问题 1:以 dis 开头的退群指令是什么

    问题 2:你是否已阅读使用说明

    则在 WebUI 应填写为:dismiss 是

    自动退出不活跃群组 v1.4.2

    这是 v1.4.2 版本新增的功能。

    你可以设定一个时间线,单位是 天。

    每天凌晨 4 时,海豹核心会检查在每个 QQ 群组中最后一次发送消息的时间。如果未发送消息的天数超过了你的设定,海豹核心会自动从该群组中退出。

    退出前,海豹会向通知列表发送一条通知。

    将时间线设置为 0 即可关闭自动退群功能。

    v1.4.4 版本做了优化调整。

    自动退群将会按批次执行。你可以在 WebUI 中设置每个批次的数量和批次间隔时间。每两批之间将会间隔你所指定的分钟数。每批次内退出两个群将间隔 10 秒。

    + + + + \ No newline at end of file diff --git a/config/censor.html b/config/censor.html new file mode 100644 index 000000000..ac3337295 --- /dev/null +++ b/config/censor.html @@ -0,0 +1,52 @@ + + + + + + 拦截 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Skip to content

    拦截

    本节内容

    本节将介绍拦截功能和相关设置,请善用侧边栏和搜索,按需阅读文档。

    什么是拦截功能?

    • 我不希望我的骰子被用来跑粉红团,如何避免?

    • 发生了超过普通人类认知的离谱事情,如何设置骰子收到了某些词语时自动拦截掉这些用户?

    • ……

    「拦截管理」提供检查骰子收到的消息内容中是否有敏感词汇,命中时进行相应处理的能力。

    点击海豹 UI 界面的「扩展功能 - 拦截管理」选项,你就可以进入拦截管理页面。

    拦截管理

    如果显示未启用的话,点击左上角开关来启用拦截。

    配置拦截

    拦截设置主要分为两部分:「匹配选项」,即设置拦截什么样的消息;「响应设置」,即命中敏感词后要如何处理。下面我们将一一介绍。

    匹配选项

    匹配选项

    匹配选项中最重要的设置就是 「拦截范围」,这个选项决定了什么范围的内容会进行拦截检查。

    • 发出的消息:拦截骰子发出的消息文本(包括指令回复和自定义回复,总之所有骰子发的内容)进行检查
    • 收到的指令:拦截骰子收到的命令文本进行检查,如收到「.rd 进行一次骰点」时,会检查其中的「进行一次骰点」,不受 bot off 影响
    • 收到的所有消息:拦截骰子收到的所有消息进行检查,包括不以 . 等开头的消息,不受 bot off 影响

    其余选项可以参看对应的提示,悬浮在问号上即可看见对应帮助。

    响应设置

    海豹核心的敏感词主要分为四个等级:提醒 注意 警告 危险,程度依次升高。你可以对不同等级的处理方式做不同的设置。

    当消息命中敏感词的时候,将取命中词汇中的 最高等级 作为处理等级。当同一个用户触发同一等级的次数超过对应设置时,将进行对应等级配置的操作,同时清空用户该等级的计数,重新计算。

    匹配设置

    • 发送警告:会向触发用户发送警告信息;
    • 通知 Master:会通知骰主;
    • 拉黑用户/群/邀请人,增加怒气值:拉黑和怒气值机制,见 黑白名单

    敏感词管理

    将标签页切换到「敏感词管理」,可以看到如下的两个列表:「词库列表」和「敏感词列表」。

    页面中也提供了相应的帮助信息,可以点开查看。

    敏感词管理

    敏感词库通常为 txttoml 格式的文件,通过「导入」按钮可以导入多个词库,词库同时生效,其中重复的词取设置的最高等级。导入后点击「重载拦截」按钮以生效变更。

    提示:为什么没有默认的敏感词库?

    「当你在凝视深渊的时候,深渊也正在凝视着你。」

    敏感词库本身属于敏感信息,故海豹官方不提供默认的敏感词库。

    下方的敏感词列表会展示当前加载的敏感词,如果设置中勾选了「匹配拼音」,也会将实际去匹配的拼音展示出来。

    查看拦截日志

    在「拦截日志」标签页,你可以看到在何时、何地、哪个用户触发了什么等级的敏感词,具体的内容是什么。

    拦截日志

    如何让用户/群豁免检查?

    给用户/群配置白名单,即可豁免检查。设置白名单见 黑白名单

    如何编写敏感词库?

    在「敏感词管理」标签页,提供了词库模板的下载。

    具体的编写帮助见 进阶 - 编写敏感词库

    + + + + \ No newline at end of file diff --git a/config/custom_text.html b/config/custom_text.html new file mode 100644 index 000000000..6c998dae9 --- /dev/null +++ b/config/custom_text.html @@ -0,0 +1,52 @@ + + + + + + 自定义文案 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Skip to content

    自定义文案

    本节内容

    本节将介绍自定义文案的设置,请善用侧边栏和搜索,按需阅读文档。

    什么是自定义文案?

    • 骰子的回复内容太过单调,要怎样让它丰富起来呢?

    • 骰子的回复内容太过繁琐,要怎样让它简洁起来呢?

    • 我的骰子有自己的人设,怎么修改那些固定的回复词,让 TA 符合人设呢?

    • ……

    如果你想要修改骰子向用户回复的提示词,那么你就需要修改自定义文案。

    海豹骰子的回复内容几乎可以进行完全的自定义,绝大部分指令的文案都可以进行修改。修改的文案内容还支持插入图片和 CQ 码。

    如何修改文案?

    在海豹 UI 界面的「自定义文案」选项中,你可以看见文案被按照几个大类放置在一起。

    自定义文案设置页

    左侧是分类,可以看见,文案目前被分为以下几个大类:

    • CoC:内置的 CoC 支持相关的文案;
    • DND:内置的 DND 支持相关的文案;
    • 其它:一些杂项文案设置;
    • 功能:内置 功能 的相关文案,如 .jrrp 的文案;
    • 日志:跑团日志 功能相关的文案;
    • 核心:海豹核心功能的文案。

    在每一个分类中,都可以在右侧看见当前分类的「文案列表」与上方的「筛选」,接下来将依次介绍它们。

    文案列表

    在「文案列表」中,每一个文案都以类似下图的格式展示,我们以「大成功」的文案来举例:

    大成功文案

    可以看见,对于「大成功」文案,它归属于 判定-常规 这个小类中,结果有两行文案,这意味着骰子会 随机抽取 其中的一行文案来使用。例如:

    示例

    木落
    .ra 力量
    头像
    头像
    海豹核心
    <木落>的力量检定结果为:D100=3/30=([1d100=3]) 大成功!
    木落
    .ra 力量
    头像
    头像
    海豹核心
    <木落>的力量检定结果为:D100=2/30=([1d100=3]) 运气不错,大成功!

    如果想要添加一行,那么点击左侧「加号」按钮:

    增加文案选项

    如果你觉得某一行不满意,点左侧「删除」按钮。当然,至少需要保留一个选项。

    删除文案选项

    修改好之后,不要忘记保存!

    等待保存

    注意:尽早保存!

    对文案的修改建议及时保存,同时注意 保存前不要切换左侧的分类,否则未保存的修改将丢失!

    最后,如果你想回到初始设置,点击右上角的「刷子」图标。

    重置为初始设置

    随后会弹出确认框,点击确定后,一切就是刚开始的样子了。

    筛选文案

    我们可以看见,为了方便在本组中查找到对应的条目,在文案列表的上方都有着对应的「筛选」功能。

    文案筛选

    • 搜索:搜索文案的小类和具体文案名。
    • 指定类别:
      • 全部:显示全部文案;
      • 默认文案:显示当前大类下未修改过的文案;
      • 修改过:已修改过的文案;
      • 指定分组:选中后会多出一个「分组」下拉框,用于筛选出指定小类下的文案条目;
      • 旧版文案:海豹的更新有时会调整和删除部分文案条目,但旧的数据不会删除。海豹从旧版升级后,可以通过此项筛选出那些不用的条目。

    文案的导入/导出

    • 我不想自己一条条修改文案,如何快速导入?

    • 我想给我的小伙伴分享我的文案,他们要如何导入进去?

    如果需要导入/导出文案内容,可以点击右上角的「导入/导出」按钮进入页面复制粘贴,就能快速分享相关设置了。

    注意:确认内容完整再导入

    粘贴文案内容时,注意检查自己导入的内容是不是完整复制进来的。

    请不要在新版本导入旧版本的文案,这种做法会绕过文案版本的迁移变更,导致缺少条目,并且很难处理。

    自定义文案组合

    在「自定义文案」中你可以经常看见一个文案调用其他文案的情况,下面将简单介绍他们之间的关系。

    COC

    以下为 COC 扩展的文案介绍。

    .ra/rc 检定

    检定 中的 {$t结果文本} 即调用 检定_单项结果文本

    检定_多轮 中的 {$t结果文本} 即调用 n 次 检定_单项结果文本

    检定_单项结果文本 中的 {$t判定结果} 即调用 判定-常规 对应的回复词,当你的检定为多轮检定时,将调用 判定-简短

    对于 判定_必须_困难_失败 此类必须判定的回复词,使用于指定检定难度的情况,如 .ra 困难侦察

    检定_暗中_群内 即进行暗骰时发在群里的回复词。

    检定_暗中_私聊_前缀 即进行暗骰时发送到私聊的回复词的前缀,实际发送内容为前缀 + 射击检定

    .st 属性设置

    属性设置_增减 中的 {$t变更列表} 即调用 属性设置_增减_单项,当你的增减表达式错误时,则调用 属性设置_增减_错误的值

    .sc 理智检定

    理智检定 中的 {$t结果文本} 即调用 理智检定_单项结果文本{$t附加语} 即调用 理智检定_附加语_大失败 等对应的回复词;{$t提示_角色疯狂} 即调用 提示_临时疯狂,当理智归零时则调用 提示_永久疯狂

    .en 技能成长

    技能成长中{$t结果文本} 即调用 技能成长_结果_成功,当成长失败且没有失败成长值时则调用 技能成长_结果_失败,当成长失败且有失败成长值时则调用 技能成长_结果_失败变更

    技能成长_批量 中的 {$t总结果文本} 即调用 n 次 技能成长_批量_单条技能成长_批量_分隔符 为每一单条中间的分隔符。

    技能成长_批量_单条 中的 {$t结果文本} 即调用 技能成长_结果_成功_无后缀,当成长失败且没有失败成长值时则调用 技能成长_结果_失败_无后缀,当成长失败且有失败成长值时则调用 技能成长_结果_失败变更_无后缀

    对于 技能成长_属性未录入 等回复语,你可以参考上面的内容自行对比理解。

    注意:无前缀/无后缀

    此处内容较为复杂,你可以看出很多回复语都有普通无前缀/无后缀两条区分,这主要是为了批量成长时便于引用无前缀/无后缀的回复,使前缀/后缀不会反复出现在批量成长中。

    核心

    .r 骰点

    暗骰_群内 为暗骰时发送到群内的回复语,暗骰_私聊_前缀 为私聊发指令者的回复语的前缀,实际内容为 暗骰_私聊_前缀 + 骰点

    骰点{$t原因句子} 即调用 骰点_原因{$t结果文本} 即调用 骰点_单项结果文本

    进行多轮骰点时 骰点_多轮 将替换 骰点 进行回复,{$t结果文本} 即调用 n 条 骰点_单项结果文本

    .alias 快捷指令

    快捷指令_列表 中的 {$t列表内容} 即调用 快捷指令_列表_单行,当有多条指令时以 快捷指令_列表_分隔符 为分隔符,若没有快捷指令则调用 快捷指令_列表_空

    快捷指令触发_前缀 中的 {$t指令来源}群/个人{$t目标指令} 即快捷指令指向的原指令。

    文案插入图片和 CQ 码

    将图片放在骰子的适当目录(建议放在 data/images),再按照相应图片的路径插入这样一段文本即可。以图片 data/images/sealdice.png 为例:

    插入文本为 [图:data/images/sealdice.png]

    例如修改骰子进群的文案:

    文案图片示例

    全文案为:

    text
    <{核心:骰子名字}> 已经就绪。可通过.help 查看指令列表\n[图:data/images/sealdice.png]

    效果如下:

    文案回复图片效果

    文案变量标签

    你可能注意到,有些词条下面有这样的内容,如下图的 $t群组骰子面数

    有变量标签的文案

    文案下方的标签代表了被默认文案所使用的特殊变量,你可以使用 {变量名} 来插入他们,例如 {$t群组骰子面数}

    除此之外,有些变量可以在所有文案中使用,具体列表可以见 进阶 - 内置脚本语言

    在一个文案中使用另一个文案

    所有的自定义文案都可以嵌套使用,例如:

    text
    这里是{核心:骰子名字},我是一个示例

    默认会被解析为:

    text
    这里是海豹,我是一个示例

    危险:禁止递归嵌套!

    千万不要递归嵌套,会发生很糟糕的事情!

    自定义文案引用牌堆

    对于想要在自定义文案或自定义回复中引用牌堆的骰主,可使用 #{DRAW-关键词} 进行调用。

    文案常见问题

    骰子进群和成为好友的问候语是哪个?

    核心:骰子进群

    核心:骰子成为好友

    更复杂的文案设置

    • 我希望能根据骰点结果显示不同的文案,要怎么实现?

    • 我希望骰子能有多套回复词,要如何设置?

    • ……

    更复杂的文案设置涉及到逻辑的编写,见 进阶 - 编写复杂文案

    + + + + \ No newline at end of file diff --git a/config/deck.html b/config/deck.html new file mode 100644 index 000000000..f3e4c0241 --- /dev/null +++ b/config/deck.html @@ -0,0 +1,53 @@ + + + + + + 牌堆 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Skip to content

    牌堆

    本节内容

    本节将介绍牌堆功能,请善用侧边栏和搜索,按需阅读文档。

    牌堆是什么?

    「牌堆」是一组有名字的文本,你可以把它想象成一组扑克牌,通过 .draw 命令来随机抽取其中的内容发送。为了便于骰子读取增加相应的说明内容,牌堆以某种结构化的格式保存成文件。

    提示:牌堆

    牌堆以 json yamltoml 格式组织起来,但其本质只是一段文本,只是编写需要遵循对应的结构方便读取。

    获取牌堆

    你可以在 牌堆仓库 或官方群的群文件中找到其他骰主分享的牌堆。

    提示:无法访问仓库?

    仓库位于 GitHub,访问时请确认你的网络状况。

    怎么上传牌堆到骰子?怎么管理牌堆?

    点击海豹 UI 界面的「扩展功能 - 牌堆管理」选项,你就可以进入牌堆的管理页面。

    牌堆管理

    可以看见有一个「上传牌堆」按钮,点击它选择本地的牌堆文件上传后即可读取牌堆。

    在上图中已经有一个名为「常规抽取与放回抽取示例」牌堆被读取到了,它的版本号是 1.1,格式是 json,其他信息也相应展示。

    你可以通过「删除」按钮来删掉对应的牌堆。

    提示:重载牌堆

    新增/删除牌堆通常会自动重载,但如果出现牌堆未更新等情况时,可以手动点击「重载牌堆」按钮进行刷新。

    怎么使用牌堆?

    在上面的「常规抽取与放回抽取示例」中,我们可以看见有名为 常规抽取 放回抽取 的两个牌组。可以使用 .draw 命令来抽取它们。

    text
    .draw 常规抽取
    +.draw 放回抽取

    对于想要在自定义文案或自定义回复中引用牌堆的骰主,可使用 #{DRAW-常规抽取} 进行调用。

    更多牌堆命令,见 使用 - 扩展:牌堆 自定义回复

    牌堆更新与云牌堆

    在加载某些牌堆之后,你可能会发现一些牌堆拥有特殊的功能:

    带有更新和云内容的牌堆示例

    牌堆更新

    一些牌堆作者为牌堆提供了更新链接,方便你快速获取最新的牌堆内容。

    点击「更新」按钮后会取获取最新的牌堆,随后弹出获取到的新牌堆与当前牌堆的对比:

    牌堆对比

    对比弹窗的右上角可以控制显示的样式,如勾选「折叠无变更」可以收起过长的内容。

    确认牌堆的更新内容之后,点击「确认更新」即可升级到最新的牌堆。

    牌堆云端内容

    一些牌堆作者为牌堆提供了云端内容,这意味着这个牌堆在抽取时,可能会去拉取远程内容作为牌堆项。

    所有含有云端内容的牌堆,海豹 UI 都会给出「提供云端内容」的提示。

    注意:云端内容

    牌堆作者可以实时调整云端内容,可能存在风险,请自行考虑是否使用这样的牌堆。

    如何编写牌堆?

    进阶 - 编写牌堆

    + + + + \ No newline at end of file diff --git a/config/helpdoc.html b/config/helpdoc.html new file mode 100644 index 000000000..31e552ebf --- /dev/null +++ b/config/helpdoc.html @@ -0,0 +1,52 @@ + + + + + + 帮助文档 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Skip to content

    帮助文档

    本节内容

    本节将介绍帮助文档功能,请善用侧边栏和搜索,按需阅读文档。

    什么是帮助文档?

    「帮助文档」是提供给骰子使用的查询资料,一般用于各种规则的资料查询,也可用于编写骰子的使用帮助。

    获取帮助文档

    你可以在 帮助文档仓库 或官方群的群文件中找到其他骰主分享的帮助文档。

    提示:无法访问仓库?

    仓库位于 GitHub,访问时请确认你的网络状况。

    海豹目前可以健康食用的 helpdoc 格式为 json 以及 xlsx,其中更多使用后者来编写资料查询文档。

    海豹官方安装包中也默认提供了 CoC 和 D&D 的资料查询文档,无需额外下载即可使用相关内容搜索。

    如何使用帮助文档?

    当你在帮助文档中写下 词条A 后,通过 .help 词条A 即可返回对应词条内容。

    对于资料查询,更建议使用 .find 来搜索词条内容。

    使用 - 核心指令

    如何管理帮助文档?

    点击海豹 UI 界面的「扩展功能 - 帮助文档」选项,你就可以进入帮助文档的管理页面。

    帮助文档管理

    我们可以看到默认置入的 CoC 与 D&D 的资料文档已经在列表中展示出来了。

    帮助文档列表以文件树的形式展示。文件夹内部的文档在一级文件夹下平铺展示,最外层的 一级文件夹名将作为其中所有文档的分组名,用于精确控制查询范围的分组。

    v1.4.2 版本起,支持通过指令在每个群组中设置默认搜索分组。

    详见 使用 - 核心指令

    修改帮助文档后,需要点击「重载帮助文档」来刷新。

    提示:重载帮助文档

    帮助文档的文本量较大,重载过程需要一定时间(通常为几分钟,与文档数量、机器性能有关)。在重载期间,搜索功能会暂时不可用,所以建议在骰子使用的低峰期进行重载。

    上传帮助文档

    点击「上传」按钮,即可弹出帮助文档的上传框:

    帮助文档的上传

    「分组」即是一级文件夹,可以选择已有的分组,也可手动填写新的分组名来创建文件夹。

    选择分组和相应文档后,点击「上传」即可将文档上传至骰子。

    提示:默认分组

    分组选择中存在一个「默认」分组,代表位于文档根目录的帮助文档位置,和一级文件夹同级。

    非常不建议你将文档放在这个文件夹中进行管理。 对指定分组的搜索需要有意义的分组名。

    为分组添加别名 v1.4.2

    v1.4.2 版本起,你可以为每个分组添加若干别名。

    帮助文档分组别名

    点击页面上的「设置」按钮,将列出现有的所有分组和它们的别名,你可按需要进行编辑。

    删除帮助文档

    如需删除某些帮助文档,勾选对应文档前的选框后点击「删除所选」,即可批量删除帮助文档。

    尝试删除帮助文档

    查看帮助文档词条

    切换标签页到「词条」,即可浏览当前已经加载的帮助文档词条。

    帮助文档词条

    通过筛选可以快速查找到相应的词条内容。

    如何编写帮助文档?

    进阶 - 编写帮助文档

    + + + + \ No newline at end of file diff --git a/config/jsscript.html b/config/jsscript.html new file mode 100644 index 000000000..1e22cc34f --- /dev/null +++ b/config/jsscript.html @@ -0,0 +1,52 @@ + + + + + + JavaScript 插件 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Skip to content

    JavaScript 插件

    本节内容

    本节将介绍 JavaScript 插件功能,请善用侧边栏和搜索,按需阅读文档。

    JavaScript 插件是什么

    为了给有能力的用户提供更大的自定义空间,海豹核心支持使用 JavaScript 语言编写扩展插件。

    JavaScript

    JavaScript(JS)是一门基于原型和头等函数的多范式高级解释型编程语言,它支持面向对象程序设计、指令式编程和函数式编程。它提供方法来操控文本、数组、日期以及正则表达式等。

    —— WIKI

    获取 JS 插件

    你可以在 JS 插件仓库 或官方群的群文件中找到其他骰主分享的 JS 插件。

    提示:无法访问仓库?

    仓库位于 GitHub,访问时请确认你的网络状况。

    如何安装和管理 JS 插件?

    点击海豹 UI 界面的「扩展功能-JS 扩展」选项,你就可以进入 JS 插件的管理页面。

    JS 扩展

    如果左上角的开关未打开,可以点击启用 JS 插件的支持。可以看见,在管理界面中有多个标签页,下面将一一介绍。

    插件列表

    在「插件列表」页,可以查看当前的 JS 插件列表并进行管理。

    JS 插件列表

    在每一个插件名前都有一个开关,用来单独控制这个插件是否开启。

    点击「上传插件」,选择获取的插件文件,即可上传到海豹核心。在插件的右侧有「删除」按钮来删除不想要的插件。

    在对插件进行调整后,需要点击「重载 JS」来使修改生效。

    插件的更新

    一些插件作者为扩展提供了更新链接,方便你快速获取最新的插件。

    点击「更新」按钮后会取获取最新的插件数据,随后弹出获取到的新数据与当前插件数据的对比:

    对比弹窗的右上角可以控制显示的样式,如勾选「折叠无变更」可以收起过长的内容。

    确认插件的更新内容之后,点击「确认更新」即可升级到最新。

    控制台

    为了方便插件作者编写插件,海豹核心提供了「控制台」,方便直接测试代码。

    JS 插件控制台

    在代码框中编写代码,点击「执行代码」即可运行,运行结果将显示在下方。

    插件设置

    进阶 - 编写 JS 插件 - 注册插件配置项

    如何使用 JS 插件?

    不同的 JS 插件的使用方法不同,不过一般都是提供了一些 . 开头的命令,可以查看相应扩展的说明来获取使用帮助。

    如何编写 JS 插件?

    进阶 - 编写 JS 插件

    + + + + \ No newline at end of file diff --git a/config/reply.html b/config/reply.html new file mode 100644 index 000000000..87cc967a9 --- /dev/null +++ b/config/reply.html @@ -0,0 +1,52 @@ + + + + + + 自定义回复 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Skip to content

    自定义回复

    本节内容

    本节将介绍自定义回复功能,请善用侧边栏和搜索,按需阅读文档。

    什么是自定义回复?

    • 我希望让骰子能回复用户发送的早安、午安、晚安,应该怎么做?
    • 我不会 JavaScript,有没有更简单的方式给骰子编写功能呢?
    • ……

    如果希望骰子能对某些关键词做出响应,最简单的方式就是使用「自定义回复」功能。

    示例

    木落
    v我50
    头像
    头像
    海豹核心
    ¥50

    「自定义回复」是海豹核心提供的一种功能扩展方式。它能够在收到的消息符合一定条件时,做出灵活的回应。

    自定义回复的形式自由,触发机制多样(关键字、正则表达式等),并且能配合海豹核心的变量系统与牌堆功能使用。无论你只是想增加简单的回复,还是需要复杂的判断和响应,都可以尝试使用自定义回复。

    在哪编写自定义回复?

    点击海豹 UI 界面的「扩展功能 - 自定义回复」选项,你就可以进入「自定义回复」的设置页面。

    自定义回复页

    默认情况下,自定义回复功能是被关闭的,你可以点击 页面左上角的开关 打开这一功能,在同意许可协议后,你就可以看到自定义回复的设置页面,下面我们将一一介绍其中的功能。

    自定义回复设置页

    在页面的上半部分,你可以看见一些帮助信息,阅读它们也能为编写自定义回复带来帮助。

    当前回复文件

    自定义回复文件

    「自定义回复」支持多个设置文件,你可以在下拉框选择进行切换。默认状态下,会有一个名为 reply.yaml 的初始自定义回复文件,可以直接在该文件中进行自定义回复的编写。

    你可以分别控制回复文件的启用与否。启用了的回复文件会显示「已启用」,如果显示「未启用」,可以点击它启用该文件。

    未启用的自定义回复文件

    对于每一个自定义回复文件,都可以进行「删除」和「下载」操作,方便你管理和分享它们。

    在编写过程中,可以勾选「开启回复调试日志」项,来为你编写回复提供更多有用信息。

    危险:谨慎删除!

    点击「删除」时,会弹出二次确认框。一旦点击确认,删除的文件将无法找回,务必在删除时小心确认。

    可以选择点击「已启用」按钮禁用它来代替删除。

    新建/导入自定义回复文件

    在当前文件的右侧有几个按钮,它们是快速创建新自定义回复的不同方式:

    • 新建:创建一个新的自定义回复文件。在你想要将不同的回复区分开,方便管理的时候,可以新建一个文件;
    • 上传:直接上传 .yaml 格式的自定义回复文件,通常来说这是其他人分享给你的。

    获取自定义回复文件

    你可以在 自定义回复仓库 或官方群的群文件中找到其他骰主分享的文件,使用「上传」功能导入它们。

    提示:无法访问仓库?

    仓库位于 GitHub,访问时请确认你的网络状况。

    公共条件 v1.4.6

    v1.4.6 版本开始,在当前文件信息的下面、本文件所有回复项目上方新增了「公共条件」选项。

    公共条件属于当前自定义回复文件,而不属于任何一个回复项。每一项公共条件是一个逻辑判断,它的含义与 单个回复项的条件 相同。

    在判定一个自定义回复是否能执行时,会首先判断文件的公共条件是否全部满足;如果全部满足,才会依次判断每个回复项的条件;否则,将跳过本文件内的所有回复项。

    设置回复项

    在自定义回复页的左下角有一个「添加一项」按钮,点击可以向当前文件中添加一条回复项。

    添加回复项

    每一个自定义回复项都包括两个部分:「条件」「结果」,分别对应着该回复项的触发条件和骰子的回复动作。

    在回复项的左上角可以控制该项的启用与否,右上角可以删除这一条回复项。当回复项较多的时候,可以点击「收缩」来将不重要的项折叠起来。

    提示:随时保存修改

    记得随时保存自己的修改,防止改动内容丢失。

    回复项的条件

    在回复项的左上角是该项的匹配模式,可以理解为当什么情况下会触发这一条回复项。目前提供了三种匹配模式:

    • 文本匹配:即设置什么样的内容会触发这条回复项;
    • 文本长度:即当回复内容的长度满足什么条件时会触发这条回复项;
    • 表达式为真:此处不介绍,见 更复杂的回复

    回复项的条件支持多个,点击「增加」即可为该回复项增加一个条件。当回复项有多个条件时,必须同时满足所有条件 才会触发该回复项。

    提示:如何实现多个内容中任意一个均可触发回复项?

    • 我希望 v我50vme50 任意一个都能触发同样的回复,我该不会需要编写两条相同的回复项吧?

    当然不用!你可以使用文本匹配中的「任意相符」方式来实现,或者直接使用「正则匹配」方式。见 文本匹配

    文本匹配

    文本匹配支持多种方式,在内容中填写要匹配的内容,即可按设置的方式匹配触发回复项。

    • 精准匹配:当骰子收到和内容 完全一致 的消息时,触发该回复项;
    • 任意相符:收到符合任意一个内容的消息时,都能触发该回复项,如 aa|bb,则 aa 或 bb 均可触发;
    • 包含文本:消息包含此内容时触发;
    • 不含文本:消息不包含此内容时触发;
    • 模糊匹配:消息与内容相似时触发该回复项;(普通用户无需纠结什么叫相似)
    • 正则匹配:消息匹配正则表达式时触发,此处不介绍,见 更复杂的回复
    • 前缀匹配:消息以内容为开头时触发;
    • 后缀匹配:消息以此内容为结尾时触发。

    「任意相符」示例

    设置:任意相符,文本 a|b,回复 c

    木落
    a
    头像
    头像
    海豹核心
    c

    提示:常用方式

    「精准匹配」与「任意相符」是最常用的模式。当然,对于了解正则表达式的用户,「正则匹配」也是经常被使用的。

    文本长度

    指定字数,当消息长度「大于等于」或「小于等于」给定的字数时触发对应回复项。

    注意:注意汉字的长度

    在文本长度匹配中,一个汉字算作两个字符。如 你好 两字可以触发大于等于 4 的文本长度匹配。

    回复项的结果

    每一个回复项可以有一个或者多个「回复结果」,多个回复结果将 从上到下依次执行。点击「增加」可以新增一条结果,也可以通过「删除结果」按钮去掉对应结果。

    每一个回复结果可以有多条回复文本,结果会在这些文本中 随机抽取 一条作为结果。

    回复可以是直接的回复,也可以指定是「私聊回复」或者「群内回复」。

    提示

    回复项有几个结果,该回复项就会发送几条消息。

    回复结果延迟

    可以给回复结果设置延迟,消息将在此延迟后发送,单位是秒,可以是小数。

    注意

    QQ 消息的随机延迟仍会被加入,如果你希望保证发言顺序,记得考虑这点。

    自定义回复引用牌堆

    对于想要在自定义文案或自定义回复中引用牌堆的骰主,可使用 #{DRAW-关键词} 进行调用。

    更复杂的回复

    • 自定义回复要怎么抽取牌堆?
    • 我想控制只有私聊才触发回复,要怎样设置?
    • 我希望编写有一定逻辑的自定义回复,我要怎么做?
    • 前缀/后缀/包含等文本匹配方式不够用/出现误判,听说可以用正则匹配解决?要怎样使用呢?
    • ……

    更复杂的自定义回复编写,会涉及到海豹提供的其他系统,如牌堆、内置脚本语法、变量机制等。也有可能要求你有其它知识的了解,如正则表达式等。

    如果你有复杂回复编写的需要,或想了解更多细节,可以跳转到 进阶 - 编写自定义回复 进行阅读。

    + + + + \ No newline at end of file diff --git a/config/utilities.html b/config/utilities.html new file mode 100644 index 000000000..61bd3987a --- /dev/null +++ b/config/utilities.html @@ -0,0 +1,52 @@ + + + + + + 辅助工具 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Skip to content

    辅助工具

    本节内容

    本节将介绍 WebUI 中提供的一些辅助工具。

    v1.4.6 起,海豹核心添加了「资源管理」功能,与「指令测试」在 WebUI 共同归于「辅助工具」类目下。

    如果你使用的是 v1.4.5 或之前版本,你在 WebUI 只会看到单独的「指令测试」。

    指令测试

    你可通过指令测试功能测试你的海豹核心对于消息的反应。在指令测试中产生的角色卡等数据都会被保留,但是消息记录会随页面刷新而丢失。

    v1.4.6 版本开始,指令测试界面的右上角提供一个切换开关,可以选择「私聊」或「群」模式。

    如果你使用的是 v1.4.5 或之前版本,你的指令测试只能模拟私聊。

    在私聊模式下,你的用户 ID 是 UI:1001

    在群聊模式下,群的 ID 是 UI-Group:2001,你的用户 ID 是 UI:1002,你在该虚拟群聊中拥有群主权限。

    资源管理 v1.4.6

    v1.4.6 版本开始,海豹核心 WebUI 提供资源管理功能。

    你可在这个页面查看目前在 data/images 目录下的图片资源,在每个图片右侧提供三个按钮,供你查看大图、下载原图和删除图片文件。

    你也可以通过这个功能上传本地图片到海豹核心。

    在引用图片时,请使用该页面展示的路径。

    + + + + \ No newline at end of file diff --git a/deploy/README.html b/deploy/README.html new file mode 100644 index 000000000..662d98bb8 --- /dev/null +++ b/deploy/README.html @@ -0,0 +1,52 @@ + + + + + + 部署 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Skip to content
    + + + + \ No newline at end of file diff --git a/deploy/about_file.html b/deploy/about_file.html new file mode 100644 index 000000000..d7fd3c6d4 --- /dev/null +++ b/deploy/about_file.html @@ -0,0 +1,70 @@ + + + + + + 海豹的本地文件 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Skip to content

    海豹的本地文件

    本节内容

    本节将介绍海豹核心主要的本地文件和它们的作用,以及一些与文件相关的问题。

    SealDice 文件目录树

    text
    ├─backups                    // 备份文件目录,里面是备份的压缩包
    +├─data                       // 数据目录
    +│  ├─censor                  // 敏感词库文件
    +|  ├─decks                   // 牌堆文件
    +|  ├─default
    +│  │  ├─configs              // 自定义骰点回执
    +|  |  ├─extensions           // 各个模块的特化文件放在这里,也是插件的数据目录
    +|  |  |  ├─coc7
    +|  |  |  ├─dnd5e
    +|  |  |  └─reply             // 比如你的自定义回复文件
    +|  |  ├─extra                // 放置你使用的QQ客户端配置文件
    +|  |  |  └─lagrange-qq123456 // 此处 123456 代指你骰子的QQ,是内置客户端的配置文件夹。
    +|  |  ├─log-exports          // log end 后导出的 log 文件
    +|  |  └─scripts              // 插件脚本
    +|  ├─helpdoc                 // 查询文档放置位置
    +|  ├─images                  // 放置图片资源的文件夹,海豹为了安全不允许调用非海豹文件夹内的图片
    +|  └─names                   // 姓名文件 . name 指令无法使用可以看看
    +├─_help_cache                // 全文搜索索引缓存
    +└─lagrange                   // 内置客户端的二进制文件

    常用文件

    • ./data/dice.yaml 配置核心文件。

    • ./data/main.log 核心日志,可以查看报错消息。

    • ./data/default/serve.yaml 账号协议配置文件。

    • ./data/default/record.log 运行日志文件,可以查看报错信息。

    • ./data/default/data.db 数据库文件,存有人物卡、群组状态等信息。

    • ./data/default/data-logs.db log 数据库文件,存有 log 日志。

    • ./data/default/data-censor.db 敏感词数据库文件,存有拦截日志等信息。

    • ./data/default/configs/text-temple.yaml 自定义文案的本体。

    • ./data/default/extra/lagrange-qq[骰子QQ] 内置客户端的配置文件夹。

    安卓端文件路径

    请查看安卓端文件路径一节。

    数据库检查和修复

    请查看数据库检查和修复一节。

    数据迁移

    请看迁移一节。

    + + + + \ No newline at end of file diff --git a/deploy/android.html b/deploy/android.html new file mode 100644 index 000000000..e3b3efd09 --- /dev/null +++ b/deploy/android.html @@ -0,0 +1,52 @@ + + + + + + 安卓海豹常见问题 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Skip to content

    安卓海豹常见问题

    本节内容

    本节将介绍安卓端海豹核心常见问题和解决方法。

    安卓端登录

    安装下载的 APK 包,给予适当的权限并配置安卓端保活

    只有一个设备,但登录需要扫码

    使用 TIM 可以从相册扫码。

    经常掉线

    为了使海豹在后台运行,请查看配置安卓端保活对应系统修改系统设置,确保海豹核心能够在后台存活。

    同时开启两个海豹实例

    方法一:使用系统的双开功能

    如果你的手机系统支持「应用双开」(或「应用分身」等,不同系统可能名称不同),可以直接使用系统的双开功能。

    方法二:使用 NP 管理器等软件

    下载「NP 管理器」修改海豹核心安装包。

    信息

    1.下载 NP 管理器并安装。

    2.打开 NP 管理器,找到海豹核心安装包。

    3.选择「功能」-「APK 共存」。

    APK 共存

    4.安装改过的安装包,打开海豹核心。

    5.选择右上角小齿轮,修改 UI 界面地址和启动参数,将里面的 3211 改成 3212。

    修改 UI 界面地址和启动参数

    6.启动核心。

    海豹文件路径

    安卓端海豹文件无法直接被读取,需要先停止核心,点击「导出数据」按钮,数据导出路径为 /storage/emulated/0/Documents/com.sealdice.dice/sealdice/

    修改完文件后需要点击「导入数据」按钮才可被海豹核心读取。

    注意

    在安卓端海豹上,每次导入数据前都进行一次导出,导出后不要再运行海豹核心。

    这是因为,安卓端海豹不会实时更新导出的文件,它们是海豹数据在导出时的一份快照。

    如果在上次导出后产生了新数据,而再次进行导入,会导致新产生的数据被之前导出的数据覆盖,丢失这段时间以来录入的角色卡、Log、修改的自定义文案等海豹内部的数据。

    发送图片

    引用图片正确格式示例:[图:data/images/1.jpg],涉及到的符号均是英文符号,不要使用 \

    添加图片的方法

    1. 利用导入导出功能将图片放入海豹的导出文件夹,然后导入。

    2. 使用 MT 管理器的「APK 一键注入文件提供器功能」,配合「添加本地储存」这两个功能访问海豹的私有目录。

    如何更新

    手机版不能通过指令或 WebUI 操作更新。你需要下载新版 APK 替换安装。

    安卓端尚在公测,以防万一最好导出一次保留数据。

    电脑海豹转安卓端海豹

    查看迁移数据到手机,手机转电脑同理。

    + + + + \ No newline at end of file diff --git a/deploy/android_keepalive.html b/deploy/android_keepalive.html new file mode 100644 index 000000000..57e2aef83 --- /dev/null +++ b/deploy/android_keepalive.html @@ -0,0 +1,52 @@ + + + + + + 配置安卓端保活 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Skip to content

    配置安卓端保活

    本节内容

    本节包含在主流安卓操作系统上允许海豹核心在后台运行,以便顺畅使用的方法。

    为了应付流氓软件,大部分系统往往会限制应用程序在后台的活动,甚至强制使它们退出。遗憾的是,手机版海豹核心也往往遭到误杀。为了确保海豹核心不会在使用其他应用程序或手机熄屏时掉线,需要调整一些系统设置来确保其能够在后台存活。

    提示:不断尝试

    你的操作系统会不断调整各个程序的活动策略,因此本节中介绍的手段并不总是万无一失。同样地,你也不一定需要诉诸所有方法才能保证海豹核心的存活。如果条件允许的话,你可以选择性地采用本节介绍的方法,或发掘一些新的手段,多试验几次来找到最适合你设备的策略。

    当然,如果你并不确定该怎么做,遵循下面介绍的步骤总是最保险的。

    在继续之前,你应该先从官网下载安卓版海豹核心,并将其安装到你的设备上。

    授予海豹核心必要权限

    海豹核心需要必要的权限来正常运行。在安装后或首次启动时,你应当确保应用程序已经拥有充足的权限。

    提示:「应用信息」界面

    在授予海豹核心权限或允许一些行为时,你需要访问系统设置的「应用信息」界面(在一些系统上可能也称作「应用详情」)。通常而言,你可以通过以下方法访问这个界面:

    1. 在桌面长按海豹核心图标,在弹出的菜单里选择「应用信息」或是类似小写字母 i 的图标。

    2. 或者,打开系统设置,找到「应用管理」(一些系统也称「应用和服务」)选项。进入应用管理后,你通常会看到展示设备上所有应用的列表。请在列表中选择「海豹核心」。

    你可以在应用信息界面管理海豹核心的权限、后台行为、数据使用等。

    对于以下未提及的系统/品牌手机,请参考以下内容自行配置保活。

    HyperOS(小米/红米)

    在 HyperOS(澎湃系统)中,启动核心前请全部允许这些权限。「访问存储空间」被拆分为三个权限:「照片和视频」「音乐和音频」「文件和文档」。

    HyperOS 步骤 1

    请始终开启「锁屏显示」「后台弹出界面」「显示悬浮窗」「动态壁纸服务」四项权限。

    HyperOS 步骤 2

    长按海豹核心的任务卡片,并点击锁图标。

    HyperOS 步骤 3

    如果保活仍然失效,请尝试在应用信息界面中开启「自启动」。

    HyperOS 步骤 4

    MIUI(小米/红米)

    初次启动时提示是否运行“海豹核心”发送通知,选择「始终允许」。

    MIUI 步骤 1

    第二步,在海豹核心的后台配置中选择「无限制」。

    MIUI 步骤 2

    第三步,长按海豹核心的任务卡片,并点击锁图标。

    MIUI 步骤 3

    鸿蒙系统(华为)

    在「应用和服务」中,选择「应用启动管理」,找到海豹核心,关闭其「自动管理」开关,并允许自启动、关联启动和后台活动。

    鸿蒙系统步骤 1

    回到「设置」主页,选择「电池」项目,开启性能模式,并进入「更多电池设置」,在新界面中开启「休眠时始终保持网络连接」。

    鸿蒙系统步骤 2
    鸿蒙系统步骤 3

    在「设置」>「隐私」>「权限管理」>「特殊访问权限」>「电池优化」项目找到海豹核心,选择「不允许」。

    鸿蒙系统步骤 4

    将海豹核心的任务卡片下拉并释放,见到卡片右上角出现锁图标即可。

    鸿蒙系统步骤 5

    ColorOS(OPPO/一加)

    选择「耗电管理」,优先开启所有选项。

    ColorOS 步骤 1

    已知护眼模式可能会导致海豹核心意外关闭,请不要开启。

    ColorOS 步骤 2

    选择海豹核心任务卡片右上角的三个点,并选择「锁定」。

    ColorOS 步骤 3

    ::::

    为了海豹持续运行,请不要将海豹从任务列表中划除。或者,你可以在海豹核心的设置中选择「从任务列表隐藏」。

    通用设置

    存储权限

    初次启动海豹核心前,你必须允许海豹核心访问存储空间,这通常在安装应用时就已经默认开启。没有相关权限,海豹核心将无法正常运行。

    如果你的系统没有自动允许海豹核心访问存储空间,请在「应用信息」中选择「权限管理」(你可能需要选择「显示所有权限」),并允许「访问存储空间」权限。

    通知权限

    首次启动海豹核心时,你可能会收到「是否允许海豹核心发送通知」的对话框。请始终允许海豹核心发送通知,此后你可能会在通知栏看到「海豹核心正在运行」的消息,这是保活策略的一部分。

    通知权限

    如果你不慎拒绝通知权限,可以稍后在系统设置中授予海豹核心相关权限。

    应用内设置

    在海豹核心应用中,选择右上角的设置图标,可以看到一些保活策略。通常来说,启用上面的系统设置已经足够,但如果你发现海豹核心仍然时常掉线,可以考虑这里的额外手段。

    应用内设置

    前三个策略可能需要相应权限才能生效。

    + + + + \ No newline at end of file diff --git a/deploy/db-repair.html b/deploy/db-repair.html new file mode 100644 index 000000000..591c477f4 --- /dev/null +++ b/deploy/db-repair.html @@ -0,0 +1,67 @@ + + + + + + 数据库检查和修复 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Skip to content

    数据库检查和修复

    本节内容

    本节包括两项内容:如何判断海豹的数据库是否损坏,在损坏时如何修复。

    数据库损坏发生的原因很多,包括但不限于突发断电、硬盘受到物理损坏、或硬盘空间占满。

    确定问题

    如果你发现角色卡或 Log 会在重启海豹后丢失,或数据库文件变得很大(通常在 200MB 以上),建议对数据库进行完整性检查。

    首先,停止海豹运行。在 Windows 系统上,你可以右键点击托盘图标并选择退出;在其他系统上,通常是在执行海豹核心的终端使用 ctrl+c 组合键;如果你注册了系统服务,通常是使用 systemctl stop sealdice 命令。

    稍作等待,以确保数据被写入硬盘。

    随后,使用命令行程序进入海豹的目录,执行以下命令。如果对使用命令行感到困难,后面有一个简化的替代方案。

    shell
    sealdice-core /db-check

    你将看到类似的输出

    text
    数据库检查结果:
    +data.db: true
    +data-logs.db: true
    +data-censor.db: true

    这代表数据库是正常的。列出的是海豹核心使用的 3 个数据库文件:

    • data.db - 人物卡和群内临时卡
    • data-logs.db - 跑团日志
    • data-censor.db - 敏感词库

    如果有某个数据库文件后输出了 false,说明该文件内容损坏。

    无法使用命令行

    如果你对使用命令行感到困难,可以这样做:

    打开记事本,将以下内容复制进去:

    shell
    sealdice-core /db-check
    +pause

    将它命名为 检查.cmd,保存在海豹的主程序所在目录,或者保存完复制过去。

    双击 检查.cmd 执行,之后同上。

    修复数据库 - 通过回滚备份

    对于大多数情况,我们推荐直接回滚到备份文件的状态。这种方法简便、容易成功。代价是损失从备份时间点到当前时间的数据。

    海豹核心默认每 12 小时进行一次备份,你可在 backups/ 目录下找到所有的备份文件。备份的时间可以直接查看文件创建时间,也可以从文件名中确定。

    将你损坏的数据库文件另外保存一份以防万一,并且确保你的硬盘有适当的空闲空间。

    在备份文件中找到最新的一份(如果你能确定导致你数据库出问题的事件,也可以找到该时间点前的最后一份),从中解压出数据库文件,替换掉你发现损坏的数据库。

    替换完成后,再进行一次完整性检查。如果仍然提示损坏,则使用更早的一份备份重新替换,直到数据库文件正常。

    修复数据库 - 通过数据库修复指令

    如果你熟悉 SQLite 3,或者没有可用的备份文件,尝试以下方案。

    这种办法有一定的操作难度,酌情进行使用。这里我们以 Windows 系统为例。

    首先,你需要安装或下载一个 SQLite 3 程序。

    你可以从其官网下载页,找到 Precompiled Binaries for Windows,下载其中的 sqlite-tools。确保你下载的是 3.40 以上版本,通常来说,直接下载最新版即可。

    下载完成后,找出 sqlite.exe 放到空目录备用。

    将损坏的数据文件(如 data.db)从海豹的 data/default/ 目录中复制出来,放在和 sqlite.exe 同一个目录。

    使用命令行工具打开这个目录,在此目录下,执行下面的指令:

    导出数据:

    shell
    sqlite3.exe data.db
    +.output 1.sql
    +.recover
    +.exit

    恢复数据到 a.db,并删除无效数据。

    shell
    sqlite3.exe a.db
    +.read 1.sql
    +delete from attrs_group where id is null;
    +delete from attrs_user where id is null;
    +delete from group_info where id is null;
    +delete from attrs_group_user where id is null;
    +delete from ban_info where id is null;
    +delete from group_player_info where id is null;
    +.exit

    接下来这个 a.db 就是修好的数据库了,将其复制回海豹的原路径,并改名回 data.db。

    + + + + \ No newline at end of file diff --git a/deploy/platform-dingtalk.html b/deploy/platform-dingtalk.html new file mode 100644 index 000000000..fe780a035 --- /dev/null +++ b/deploy/platform-dingtalk.html @@ -0,0 +1,52 @@ + + + + + + 钉钉 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Skip to content

    钉钉

    本节内容

    本节将包含你在钉钉平台接入海豹核心需要了解的特定内容。

    钉钉支持 v1.4.2

    海豹从 v1.4.2 开始支持对接钉钉。

    信息

    施工中……

    + + + + \ No newline at end of file diff --git a/deploy/platform-discord.html b/deploy/platform-discord.html new file mode 100644 index 000000000..7b8d2f3eb --- /dev/null +++ b/deploy/platform-discord.html @@ -0,0 +1,52 @@ + + + + + + Discord | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Skip to content

    Discord

    本节内容

    本节将包含你在 Discord 平台接入海豹核心需要了解的特定内容。

    获取 Token

    要获取用于连接海豹的 Token 之前,你需要建立好一个应用。登录 Discord 开发者平台,点击「New application」,按照要求填写应用名字并确认创建。完成后,点击侧边导航栏「bot」,打开「Privileged Gateway Intents」目录下全部三个开关:Presence IntentServer Members IntentMessage Content Intent。完成后点击「Save Changes」。

    建立好应用后上滑,点击 Reset Token,确认后点击 Copy 复制。

    连接海豹

    提示:代理模式

    如果你海豹所处的位置直接访问 Discord 服务有困难,我们提供了通过 HTTP 代理访问的途径。

    登录海豹并添加账号,选择「Discord账号」。在 Token 处粘贴你得到的 Token,点击连接。你的海豹应该可以正常在 Discord 运作了!

    邀请海豹

    你需要在侧边栏「Installation」选项卡中的「Authorization Methods」选项中选中 Guild Install 才能将你的机器人邀请至服务器中。

    要申请用于邀请海豹至 Discord 服务器的邀请链接,前往侧边导航栏「OAuth2」下方的子目录「URL Generator」,在 Scope 中选择 Bot 后在下方 Bot Permissions 中选择你希望海豹拥有的权限。完成后复制下方生成的 URL,复制到浏览器打开。

    注意:权限不足

    如果给予海豹的权限不充分,可能会导致无法发送消息或图片。若你不确定具体应该添加哪些权限,可直接添加 Administrator(管理员)权限。

    + + + + \ No newline at end of file diff --git a/deploy/platform-dodo.html b/deploy/platform-dodo.html new file mode 100644 index 000000000..f5207ec48 --- /dev/null +++ b/deploy/platform-dodo.html @@ -0,0 +1,52 @@ + + + + + + DoDo | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Skip to content

    DoDo

    本节内容

    本节将包含你在 DoDo 平台接入海豹核心需要了解的特定内容。

    建立应用

    要在 DoDo 开发用于连接海豹的应用前,你需要前往 DoDo 开放平台注册账号并申请个人开发者。

    获取 Client ID 和 Bot Token

    成为开发者后你即可建立一个应用并获取 Client IDBot Token。在 DoDo 开放平台点击「创建应用」并选择开发应用,按照要求填写应用名字。完成后,点击应用卡片可在「凭证和基础信息」下找到 Client IDBot Token,复制并保存。

    连接海豹

    登录海豹并添加账号,选择「DoDo语音」。在 Client IDBot Token 下填写对应的信息,点击连接。你的海豹应该可以正常在 DoDo 运作了!

    邀请海豹

    要申请用于邀请海豹至 DoDo 超级群的邀请链接,前往侧边导航栏「机器人管理」,在下方「需要权限」下选择你希望海豹拥有的权限。完成后复制下方生成的 URL,复制到浏览器打开。

    注意:权限不足

    如果给予海豹的权限不充分,可能会导致无法发送消息或图片。若你不确定具体应该添加哪些权限,可直接添加 超级管理员权限。

    注意

    由于 DoDo 平台本身的问题,导致海豹无法响应直接发起的私聊。从群聊中触发的私聊,也即各种暗骰指令不受影响。

    如果 DoDo 平台做出适当的修正,海豹核心会第一时间跟进以解决这一问题。

    + + + + \ No newline at end of file diff --git a/deploy/platform-kook.html b/deploy/platform-kook.html new file mode 100644 index 000000000..a3d255262 --- /dev/null +++ b/deploy/platform-kook.html @@ -0,0 +1,52 @@ + + + + + + KOOK | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Skip to content

    KOOK

    本节内容

    本节将包含你在 KOOK(开黑啦)平台接入海豹核心需要了解的特定内容。

    获取 Token

    要获取用于连接海豹的 Token 之前,你需要建立好一个应用。登录 KOOK 开发者平台,点击「创建应用」,按照要求填写应用名字并确认创建。

    建立好应用后点击侧边导航栏「机器人」,在 Token 下找到 Token 并复制。

    连接海豹

    登录海豹并添加账号,选择「KOOK(开黑啦)账号」。在 Token 处粘贴你得到的 Token,点击连接。你的海豹应该可以正常在 KOOK 运作了!

    注意:几率性断连

    第一次接入 KOOK 的海豹有几率在显示连接后仍然离线。若你遇见这种情况,请尝试重新刷新 Token 并删除海豹 KOOK 账号使用新的 Token 重新添加。

    邀请海豹

    要申请用于邀请海豹至 KOOK 服务器的邀请链接,前往侧边导航栏「机器人」下方的子目录「邀请链接」,选择你希望海豹拥有的权限。完成后复制下方生成的 URL,复制到浏览器打开。

    注意:权限不足

    如果给予海豹的权限不充分,可能会导致无法发送消息或图片。若你不确定具体应该添加哪些权限,可直接添加管理员权限。

    + + + + \ No newline at end of file diff --git a/deploy/platform-minecraft.html b/deploy/platform-minecraft.html new file mode 100644 index 000000000..6727fd593 --- /dev/null +++ b/deploy/platform-minecraft.html @@ -0,0 +1,59 @@ + + + + + + Minecraft | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Skip to content

    Minecraft

    本节内容

    本节将包含你在 Minecraft 服务端接入海豹核心需要了解的特定内容。

    Minecraft 支持

    海豹核心支持与安装了 sealdice-minecraft 插件的 Minecraft 服务器(如 Paper、Purpur)进行对接。

    架设 Minecraft 服务端

    下面以 Windows 平台为例,简单介绍 Minecraft 服务端的架设。

    架设 Minecraft 服务器首先需要根据选定对应的 Java 版本。

    • 服务端版本 1.0 - 1.11.x 可以使用 Java 6Java 7,但推荐使用 Java 8
    • 服务端版本 1.12(17w13a) - 1.16.5(1.17-21w18a),需要使用 Java 8
    • 服务端版本 1.17(21w19a) - 1.17.1 需要使用 Java 16
    • 服务端版本 1.18(1.18-pre2) 及以上版本需要使用 Java 17 及以上。
    • 此为一般情况,部分服务端会推荐对应 Java 版本,请按需安装对应 Java 版本。

    注意

    sealdice-minecraft 插件需要 Java 18 及以上的 Java 版本,如需要在低版本运行请自行验证服务端与 Java 版本是否匹配。

    获取服务端核心

    前往 Paper MC 下载对应版本的服务端核心文件。

    启动服务端

    新建一个空白文件夹,放入服务端核心,编写一个简单的 bat 启动脚本(可新建一个 txt 文件后,修改文件后缀)。

    Create Bat 1

    启动脚本内容如下:

    cmd
    @echo
    +java -Xms2G -Xmx2G -jar spigot-1.20.4.jar nogui
    • -Xms2G -Xmx2G:此项设定服务器占用的内存,按照需求更换数字,例如 1024m6G
    • -jarnogui 之间的 spigot-1.20.4.jar 更改为文件夹内对应的服务端核心文件文件名。

    退出并保存文件,将该文件后缀改为 .bat。修改后文件夹如下所示:

    Create Bat 2

    启动 start.bat 文件,即可开始运行服务端。

    提示

    首次打开 start.bat 启动脚本,会下载 mojang_1.20.4.jar 等一系列的文件并创建文件夹,在下载和创建完成后会首次启动会自行关闭。

    打开在文件夹内新创建的 eula.txt,将 eula=false 改为 eula=true

    text
    ...
    +#By changing the setting below to TRUE you are indicating your agreement to our EULA (https://aka.ms/MinecraftEULA).
    +#Fri Feb 30 00:00:01 HKT 2024
    +eula=true  # 请把该项修改为 true
    +...

    再次启动脚本 start.bat

    当出现 Done (7.837s)! For help, type "help" 时,服务器首次启动完毕。

    在 CMD 内键入 stop,等待服务器保存并关闭,即可进入下一个步骤。

    放入 sealdice-minecraft 插件

    前往 Sealdice Minecraft GitHub Release 下载 jar 文件放进 plugins 文件夹。

    再次运行脚本 start.bat 以启动服务器。

    在服务器日志中出现:

    cmd
    [00:00:07 INFO]: [SealDicePlugin] Enabling SealDicePlugin v1.0.2*
    +[00:00:07 INFO]: [SealDicePlugin] ChatServer started on port: 8887
    +[00:00:07 INFO]: [SealDicePlugin] Server started!

    证明 sealdice-minecraft 插件已经正确安装,并且插件将会开启一个端口 8887 供海豹使用。

    使用在控制台使用 sealport [端口] 或在游戏中使用 /sealport [端口] 可以修改连接端口。

    至此,Minecraft 服务端的准备工作已经完毕。

    海豹核心与 Minecraft 服务端连接

    账号设置 页,选择 账号类型Minecraft(Paper)

    SealDice UI

    URL 的填写请根据下列情况选择:

    海豹核心与 Minecraft 服务端部署在同一台服务器:

    SealDice UI

    此时输入使用 localhost:[端口] 即可完成连接,默认端口为 8887

    当服务器后台日志中出现:

    cmd
    [00:00:10 INFO]: [SealDicePlugin] 0:0:0:0:0:0:0:1 entered the room!

    证明海豹核心已和 Minecraft 服务端连接完毕。

    sealdice-minecraft 插件的使用

    指令

    提供两个插件指令:

    sealdice [文本]

    使用该指令的玩家视为向海豹私聊发送了一条消息。

    但是命令方块和控制台使用该指令会被视为公屏发送。

    sealport [端口]

    使用该指令需要 OP 权限。该指令用于设置与海豹连接的端口。

    权限

    提供一个权限:

    sealdice.admin

    该权限允许/禁止玩家设置与海豹连接的端口,默认为 false

    + + + + \ No newline at end of file diff --git a/deploy/platform-qq-docker.html b/deploy/platform-qq-docker.html new file mode 100644 index 000000000..34c742a30 --- /dev/null +++ b/deploy/platform-qq-docker.html @@ -0,0 +1,112 @@ + + + + + + QQ - Docker 中的海豹 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Skip to content

    QQ - Docker 中的海豹

    本节内容

    本节将包含通过 docker 部署海豹时,你在 QQ 平台接入海豹核心需要了解的特定内容。

    请至少完成 QQ 一节中,前言部分的阅读。

    本节假定你对 dockerdocker compose 有足够的了解。

    通过 docker compose 同时部署海豹与 Lagrange

    通过此方式部署的海豹与 Lagrange 容器共同构成一个服务栈,可以方便地进行集中管理。请首先阅读 QQ 一节中,Lagrange 部分,大致了解 Lagrange 的部署过程。

    创建 docker-compose.yml

    首先,在工作目录下创建 docker-compose.yml 文件,并填入以下内容:

    yaml
    name: sealdice
    +
    +services:
    +  sealdice:
    +    image: ghcr.io/sealdice/sealdice:edge
    +    ports:
    +      - 3211:3211
    +    volumes:
    +      - ./seal_data:/data
    +      - ./seal_backups:/backups
    +    restart: unless-stopped
    +
    +  lagrange:
    +    image: ghcr.io/lagrangedev/lagrange.onebot:edge
    +    volumes:
    +      - ./lagrange_data:/app/data
    +      - ./seal_data:/data
    +    restart: unless-stopped

    此文件参考了通过 docker 部署海豹通过 docker 部署 Lagrange 相关内容。

    此文件将宿主机 3211 端口映射到海豹容器的 3211 端口,如有需要,请根据实际情况自行调整端口映射。

    此文件将工作目录下 seal_dataseal_backups 目录分别挂载到海豹容器的 /data/backups 目录,并将 lagrange_dataseal_data 目录分别挂载到 Lagrange 容器的 /app/data/data 目录。由于通过 QQ 后端发送本地图片时,海豹会将图片在容器内的绝对路径传递给 QQ 后端,所以需要将海豹数据也挂载到 Lagrange 容器以使 Lagrange 得以访问图片。如有需要,请根据实际情况自行调整挂载的目录。

    注意:在容器内以非 root 用户执行海豹进程可能会导致一些权限问题。

    因此,示例文件以 root 用户生成容器进程。后续需要修改 seal_dataseal_backupslagrange_data 目录中的内容(包括 Lagrange 配置文件、海豹数据等)时,需要 root 权限。

    补充:登录多个 QQ 账号

    只需简单修改 docker-compose.yml 即可登录到多个 QQ 号:

    yaml
    name: sealdice
    +
    +services:
    +  sealdice:
    +    image: ghcr.io/sealdice/sealdice:edge
    +    ports:
    +      - 3211:3211
    +    volumes:
    +      - ./seal_data:/data
    +      - ./seal_backups:/backups
    +    restart: unless-stopped
    +
    +  lagrange-1:
    +    image: ghcr.io/lagrangedev/lagrange.onebot:edge
    +    volumes:
    +      - ./lagrange_data_1:/app/data
    +      - ./seal_data:/data
    +    restart: unless-stopped
    +
    +  lagrange-2:
    +    image: ghcr.io/lagrangedev/lagrange.onebot:edge
    +    volumes:
    +      - ./lagrange_data_2:/app/data
    +      - ./seal_data:/data
    +    restart: unless-stopped

    分别对每个 Lagrange 容器完成下述配置文件修改及扫码登录过程,并在下述海豹连接 Lagrange 填写 WS 地址时,将 {Host} 分别填入 lagrange-1lagrange-2 即可。

    首次启动容器

    在工作目录下使用以下命令启动容器:

    bash
    docker compose up -d

    首次启动容器后,docker compose 会自动创建 seal_dataseal_backups 以及 lagrange_data 目录。

    Lagrange 容器配置

    首先使用以下命令停止容器运行:

    bash
    docker compose stop

    随后,按照 QQ 一节中运行 Lagrange 部分修改 lagrange_data/appsettings.json 文件。需要特别注意的是,为了允许海豹容器正常访问 Lagrange 端口,需要将监听地址修改为 0.0.0.0

    appsettings.json

    json
    {
    +  "Implementations": [
    +    {
    +      "Type": "ForwardWebSocket",
    +      "Host": "0.0.0.0",
    +      "Port": 8081,
    +      "HeartBeatInterval": 5000,
    +      "AccessToken": ""
    +    }
    +  ]
    +}

    随后,通过 docker compose up -d 重新启动容器。通过 docker compose logs lagrange 访问 Lagrange 容器的日志,在日志中即可看到 QQ 登录二维码。同时 lagrange_data/qr-0.png 也是登录二维码。选择任一方式,尽快使用手机 QQ 扫码连接。

    海豹连接 Lagrange

    请参见 QQ 一节中海豹连接 Lagrange 部分。在填写 WS 正向服务地址 ws://{Host}:{Port} 时,{Host} 填写为 lagrange 即可,如果配置了多个 Lagrange 容器,填入对应服务的名称,docker compose 会自动处理主机名解析。{Port} 正常填写配置文件中设定的监听地址,在上文的例子中为 8081。

    更新海豹容器或 Lagrange 容器

    运行以下命令:

    bash
    docker compose pull
    +docker compose up -d

    当任一镜像有更新时,以上命令会完成容器更新。

    连接到宿主机上的 QQ 后端

    注意:此种部署方式可能不能正常发送本地图片。

    由于通过 QQ 后端发送本地图片时,海豹会将图片在容器内的绝对路径传递给 QQ 后端。宿主机上的 QQ 后端无法正确解析海豹数据目录的路径,因此可能无法正常发送图片。

    首先按照 QQ 一节中的介绍,完成 QQ 后端的配置。

    Docker 自动为容器构建了一个子网,容器默认接入此网络,并通过端口映射将容器端口暴露在宿主机。因此,容器中的海豹不能直接访问宿主机监听本地端口的 QQ 后端。需要连接时,有两种解决方案。

    保持容器与宿主机网络隔离

    Docker 为宿主机也分配了子网中的 IP,可以通过 ip a 等命令查看。例如:

    bash
    $ ip a
    +...
    +9: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    +    link/ether 02:42:33:50:ca:2d brd ff:ff:ff:ff:ff:ff
    +    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
    +       valid_lft forever preferred_lft forever
    +    inet6 fe80::42:33ff:fe50:ca2d/64 scope link proto kernel_ll
    +       valid_lft forever preferred_lft forever
    +...

    其中 172.17.0.1 为宿主机在 docker 子网中的 IP。

    此时,首先修改 QQ 后端的监听设置,以确保其接受任何来源的连接(例如将 127.0.0.1 修改为 0.0.0.0),然后在配置海豹时,{Host} 填入宿主机在 docker 子网中的 IP(本例中为 172.17.0.1)。

    配置容器使用宿主机网络

    通过将 docker run 命令中的 -p ... 替换为 --network host,或在 docker-compose.yml 文件中将 ports: ... 替换为 network_mode: host,即可令容器使用宿主机网络。此时,在配置海豹时,{Host} 写为类似 127.0.0.1localhost 即可正常访问监听本地端口的 QQ 后端。

    + + + + \ No newline at end of file diff --git a/deploy/platform-qq-official.html b/deploy/platform-qq-official.html new file mode 100644 index 000000000..bb6ab5f2d --- /dev/null +++ b/deploy/platform-qq-official.html @@ -0,0 +1,52 @@ + + + + + + QQ 官方机器人 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Skip to content

    QQ 官方机器人 v1.4.2

    海豹从 v1.4.2 开始支持对接 QQ 官方的机器人服务。

    本节内容

    本节将包含你在 QQ 官方机器人平台接入海豹核心需要了解的特定内容。

    提示:QQ 机器人

    QQ 官方目前已开放了机器人功能,可进入 QQ 开放平台 进行申请。

    搭建机器人官方请参考 QQ 机器人文档

    目前, QQ 官方机器人已开放个体使用权限。但官方文档没有及时更新

    同时,由于 QQ 官方对机器人能力的严格限制(包括获取 QQ 号、昵称,非 @ 时响应,私聊,群控、发送本地图片等大量功能目前不支持),目前对接官方接口的骰子很多功能无法支持(如跑团 Log,暗骰,对抗等)。

    QQ 官方机器人的优点,就是不用担心被风控。

    尝试一下

    如果你想尝试一下这样的机器人,非常欢迎你使用海豹官方的骰子:

    海豹机器人二维码

    获取连接所需信息

    要获取用于连接海豹的信息之前,你需要建立好一个 QQ 机器人应用。可前往 QQ 开放平台 进行申请,实名注册后,创建一个机器人应用。

    创建完成后,进入机器人管理后台,切换到「开发设置」页面:

    切换到开发设置

    在页面中你可以看到这样的信息,其中「机器人 ID」「机器人令牌」「机器人密钥」这三项是海豹进行连接所需要的。

    开发设置

    然后在「开发设置 IP 白名单」一栏中,填写你骰子所在电脑的 公网 IP。(使用云服务器时,请填写对应云服务商在控制台提供的 IP)

    连接官方 Bot

    注意:家庭网络的 IP 变动

    如果你使用的是家用网络,在本地电脑运行海豹,要注意家庭网络的 IP 通常是不固定的,运营商随时可能会更换你的 IP,遇到问题时请先检查。

    连接海豹

    登录海豹并添加账号,选择「QQ(官方机器人)」。填写对应的信息点击连接。你的海豹应该可以正常连接官方机器人运作了!

    连接官方 Bot

    指令配置

    1. 进入「发布配置」页面;
    2. 点击「功能配置」;
    3. 点击「指令配置」;
    4. 再点击右上角的「重新配置」开始编辑;
    5. 点开「指令」页添加指令,「指令名」里面输入对应指令(例如 rraen),/ 是 QQ 官方机器人默认的指令前缀(海豹也支持使用 /);
    6. 然后在「指令介绍」一栏填写指令的简介;
    7. 然后在「使用场景」一栏点击「QQ 频道」、「频道私信」、「QQ 群」,切记不能选中「消息列表」;
    8. 确认配置完成后,扫码确认修改,就可以完成指令配置。
    进入指令配置页进行指令配置
    推荐指令列表模版推荐指令列表模版1推荐指令列表模版2

    机器人上线

    点开「使用范围和人员页面」,进入「编辑」页,参考下面图片中编辑使用范围与人员。

    连接官方 Bot

    配置完成后,点击「发布配置」页面,上传「自测报告」与「隐私协议」。

    「隐私协议」与「自测报告」模板

    这里提供了海豹骰的机器人「隐私协议」与「自测报告」模版。

    强烈建议你按自身情况进行修改,绝对不要原样上传,这涉及到你的机器人是否能被 QQ 官方的工作人员审核通过。

    机器人自测报告.xlsx

    第三方机器人隐私保护指引.docx

    如果你对「指令列表」的指令进行了修改,或者新增了其他功能,请自行修改,需要在「预期输出」一栏填「指令简介」。

    点击「提交审核」后,等待 QQ 官方人员测试并审核(时间不定)。审核通过后,在「发布设置」页面中点击「上线机器人」。

    提示:关于 QQ 审核

    目前 QQ 审核主要是测试机器人能否在所选支持的场景下,正常回应指令列表里的指令(在没有添加任何其他内容前提下),为人工审核。

    在提交审核前,请善用沙盒群,测试你提交的自测报告中,所提到的指令是否都能正常工作,机器人需要正常发出回应。

    如果你的指令包含一些需要填写的参数,请务必在「自测报告」表格「特殊说明」一栏里补充说明。(你可以参考模板中对 .ra .sc .en 指令的特殊说明。)

    如果审核未通过,点击右上角的「通知」查看原因,解决后再次提交。 如果实在无法解决,可加入「QQ 机器人官方频道」,在「寻求||审核和及 bug 」一栏里,发帖询问。

    使用海豹

    点击「使用人员与范围」页面,查看你的机器人对应的邀请二维码,扫码添加即可。

    注意

    目前官方机器人只响应包含 @ 的消息,操作时请注意。

    同时,官方机器人一次只能发一条消息,一次性发送消息太多,官方机器人会因为消息发送过于频繁而报错。

    此外,官方机器人目前无法发送本地图片。

    注意事项

    大部分事项 QQ 机器人文档 都有说明,这里补充一些文档中没有说明的其他事项:

    企业账号的开发者资质审核

    如果你使用企业账号进行了注册,请记得在资料一栏中进行开发者资质状态审核。该审核需要将对应企业的银行卡号上传至腾讯审核,期间的等待时间可能较久。在开发者资质状态通过后,你才能将官方机器人送审。

    开发者资质状态审核

    机器人官方频道跳转

    机器人「资料卡」页面中资料卡设置一栏中,「机器人官方频道跳转」不能是骰子的「沙盒频道」。

    机器人官方频道跳转

    功能审核未通过

    有时候「功能配置」页面中,「功能配置与提审」旁显示审核通过,但实际并没有通过,这时点击「机器人上线」的会显示发送错误。

    遇见这种情况请点击「通知」,看机器人哪方面没过审,修改后再次提交审核。

    + + + + \ No newline at end of file diff --git a/deploy/platform-qq.html b/deploy/platform-qq.html new file mode 100644 index 000000000..bad29c2a8 --- /dev/null +++ b/deploy/platform-qq.html @@ -0,0 +1,52 @@ + + + + + + QQ | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Skip to content

    QQ

    本节内容

    本节将包含你在 QQ 平台接入海豹核心需要了解的特定内容。

    前言

    有关 QQ 平台机器人的说明

    直至目前,绝大部分群聊中的 QQ 机器人采用「假用户」方式,即通过第三方软件接入注册的另一个 QQ。QQ 官方一直在对第三方实现进行技术与非技术层面的多重打击。

    从目前的表现看来,QQ 官方会对账号行为进行检测,来区分出账号是否是正常用户(如不正常的登录方式,以不合理的速度在多地区登录等等)。我们无法得知具体的检测细节,但已证实的是,当 QQ 账号用作机器人并被检测到时,该 QQ 会视为风险账号,被官方予以警告,封禁,临时甚至 永久冻结 的惩罚。

    尽管不同方案之间的差异很大(比如基于 Android QQ 协议的 Go-Cqhttp 已经基本不可用,而 LagrangeLLOneBot 等基于 NTQQ 的方案目前比较稳定),但需要明白的是,这些方案都由社区第三方软件提供,实质上以 QQ 官方角度等同于「外挂软件」,并不受到官方支持(甚至是被打击的目标)。

    因此,是否在 QQ 平台搭建这样的非官方机器人取决于你的慎重考虑。同时,第三方方案的可用性也可能会随时间推移而存在变化,海豹官方无法做出任何保证。

    目前,仅有 官方机器人服务 是被 QQ 官方认可的机器人方案。该方案可用性由 QQ 官方保证,但目前 仅对企业用户和部分受邀个人用户开放,同时在功能上非常受限。

    如果有可能,建议迁移到其它平台,在 QQ 平台选择何种方式取决于你自己的选择。

    危险

    倘若出现账号被封禁等情况,海豹官方无力解决此类问题,也不对相应后果负责。

    对接引导

    所有支持的途径参见目录,本节提供了多种对接途径的引导。

    v1.4.5 开始,我们推荐使用 内置客户端 进行连接,这是面向一般用户提供的简单对接方式,对于有能力的骰主,我们更推荐其他的分离部署方案。

    对于需要使用更加灵活的方案的用户,我们推荐如下:

    • 需要比较简单的部署流程,希望资源占用低的,见 Lagrange
    • 需要比较简单的部署流程,不是特别在意资源占用的,见 LLOneBot
    • 通过 docker 部署海豹的,见 QQ - Docker 中的海豹
    • 如果你有 QQ 官方机器人权限,见 官方机器人
    • Go-cqhttp 与 QSign 方案因可用性原因已被弃用。我们不建议任何用户再使用此方式部署 QQ 接入,同时强烈建议正在使用该方案的用户迁移

    不同的对接方式适应不同的情况,可能会存在途径特有的功能缺失和其它问题,请根据自己的情况选择适合的方式。

    注意:对接基于 NTQQ PC 端协议的 QQ 方案时,注意对方是否支持 戳一戳 功能

    内置客户端/Lagrange、LLOneBot 和 Napcat 等基于 NTQQ PC 的 QQ 方案,在旧版本中由于 NTQQ 旧协议本身不支持的原因,缺失该功能。

    请使用:

    • 海豹版本 v1.4.6 之前的内置客户端
    • 6e350b0 之前的 Lagrange
    • v3.27.0 之前的 LLOneBot
    • v1.6.7 之前的 Napcat
    • ……

    等方案的用户及时更新或关闭位于 综合设置 - 基本设置启用戳一戳 开关,以免产生不必要的报错信息。

    关闭戳一戳开关

    注意

    内置客户端、Lagrange、LLOneBot 和 Napcat 都占用 PC 端协议。在使用这些连接方式时,不可同时登录 PC 端 QQ,否则将导致挤占下线。

    由于官方 QQ 设定,PC 端协议(即以上四种登录方式)每隔 30 天需要重新登录。

    内置客户端 v1.4.5

    海豹从 v1.4.5 开始提供了内置客户端的连接方式。

    注意

    需要知道的是,该方案也是前言中提到的非官方机器人,并不受到 QQ 官方认可。

    危险:部分过时系统不支持

    内置客户端暂不支持 Windows 7,Windows Server 2008,32 位 Windows 也不可用。

    Windows Server 2012 可能会缺少部分运行库,需要自行下载安装。

    进入海豹 Web UI 的「账号设置」新增连接,选择账号类型「QQ(内置客户端)」,这也是默认选项,填写 QQ 号,其余内容无需修改:

    内置客户端

    随后使用登录了目标账号的手机 QQ 尽快扫码登录(二维码会在十秒左右出现,请耐心等待):

    内置客户端扫码登录

    在手机上确认登录以后,等待状态变为「已连接」即可。

    登录的账号由扫码的账号决定,请不要询问 为什么登录的是我自己的账号 之类的问题。

    安卓端海豹扫码

    由于 QQ 的安全策略并不支持图片识别或长按扫描二维码登录,你需要两个手机(一个运行海豹,一个扫码)或下载 TIM 软件扫码登录。

    内置客户端版本

    使用此方案应当尽快更新到 v1.4.6 及以上版本的海豹,当遇到登录失败、无法回复等情况请先 尝试删除账号重新添加在「账号设置」界面切换签名服务 等方法。

    对于 v1.4.6 及以上版本的海豹,修改签名时请勿随意修改签名版本,除非你知道自己在干什么。

    分离部署

    分离部署

    不同于内置客户端,分离部署为海豹核心和 QQ 登录框架分别启动,然后按照各个框架的连接协议将海豹核心和 QQ 登录框架连接起来。

    相比之下分离部署有更强的稳定性,但操作难度也有一定程度的增加。

    提示:不同的对接方式

    使用此方法你可能需要对「QQ(onebot11正向WS)」、「QQ(onebot11反向WS)」、「[WIP]Satori」的区别有一定了解。

    • 「QQ(onebot11正向WS)」为 onebot11 标准的连接方式之一,由海豹核心主动连接 QQ 登录框架。在 UI 界面添加「连接地址」格式应当为 ws://{Host}:{Port}
    • 「QQ(onebot11反向WS)」为 onebot11 标准的连接方式之二,由 QQ 登录框架主动连接海豹核心。在 UI 界面添加「连接地址」格式应当为 {Host}:{Port}
    • 「[WIP]Satori」为 Satori 标准的连接方式,由海豹核心主动连接 QQ 登录框架。WIP 代表该对接方式为实验性的,可能会在未来发生变化。

    Lagrange v1.4.2

    海豹从 v1.4.2 开始适配了 Lagrange(拉格兰)的连接。

    Lagrange

    Lagrange(拉格兰)是一个 NTQQ 协议相关的开源项目。其包括目前实现了 Linux NTQQ 协议的 Lagrange.Core,和提供 OneBot-V11 API 的 Lagrange.Onebot 两部分。

    与 GoCqhttp 类似,Lagrange 可以很方便的在多个平台(Windows、Linux、Mac)部署,海豹核心可以对接其提供的 OneBot-V11 API 来提供 QQ 骰子服务。

    登录 Lagrange

    请按照 Lagrange 手册自行部署 Lagrange,并按照手册和自己的需求填写配置文件。

    海豹连接 Lagrange

    进入海豹 Web UI 的「账号设置」新增链接,按照自己的 Lagrange 配置文件选择 onebot11 账号类型,填写 QQ 号和「连接地址」。

    成功连接后即可使用。

    LLOneBot v1.4.2

    海豹从 v1.4.2 版本开始支持通过 OneBot 协议连接 LLOneBot。

    LLOneBot

    LiteLoaderQQNT(LiteLoader)是 NTQQ 的插件加载器,允许通过插件注入 QQ 实现某些特定的功能。

    LLOneBot 则是 Liteloader 的插件之一,可以实现劫持客户端对外开放 API,可以理解为装在 PC 上的 Shamrock。

    使用此方案的用户请注意不要随意更新 QQ 客户端。

    由于 QQ 客户端检测机制的变化,更新 QQ 客户端后可能导致方案不可用,并且更新后需要重新安装登录框架,所以不建议用户随意更新 QQ 客户端。

    安装 LLOneBot

    请参考 官方文档 中的说明。

    配置 LLOneBot

    安装完成后重新登录 QQ,在 QQ 设置中 LLOneBot 的设置页:

    LLOneBot 设置页

    支持两种方式与海豹对接:

    • 正向连接:默认开放的正向 ws 端口为 3001,在海豹的新添账号选择「QQ(onebot11正向WS)」,账号处随便填写,连接地址填 ws://localhost:3001
    • 反向连接:关闭 LLOneBot 的正向连接开关,打开 LLOneBot 的反向连接开关,在「反向WebSocket监听地址」里点击「添加」,输入 ws://127.0.0.1:4001/ws,然后在海豹的新添账号选择「QQ(onebot11反向WS)」,输入账号。

    提示

    • 如若想修改端口请在 LLOneBot 的设置 UI 自行修改。
    • 请注意设置中的正向连接和反向连接请 不要同时打开,否则会发不出消息。
    • 如果你是在服务器上部署,可能需要使用 Mem Reduct 之类的工具定时清理过高的内存占用。

    NapCatQQ

    NapCatQQ

    NapCatQQ 是在后台低占用运行的无头(没有界面)的 NTQQ,具体占用会因人而异,QQ 群、好友越多占用越高。

    NapCat 官方文档

    使用此方案的用户请注意不要随意 更新 QQ 客户端。

    由于 QQ 客户端检测机制的变化,更新 QQ 客户端后可能导致方案不可用,并且更新后需要重新安装登录框架,所以不建议用户随意更新 QQ 客户端。

    NapCat 是基于官方 NTQQ 实现的 Bot 框架,因此在开始前,你需要根据 NapCatQQ 的手册安装官方 QQ,若 QQ 版本过低会导致程序无法正常启动。

    下载 NapCatQQ

    请按照 NapCat 官方手册 下载安装,然后按照 基础配置 和自己的需求修改配置文件。

    海豹连接

    进入海豹 Web UI 的「账号设置」新增链接,按照自己的配置文件选择 onebot11 账号类型,填写 QQ 号和「连接地址」。

    成功连接后即可使用。

    Chronocat v1.4.2

    v1.4.5 开始适配了与 Chronocat 的 Satori 协议连接。

    安装 Chronocat

    请按照 官方手册 安装 Chronocat。

    Chronocat Satori 协议 v1.4.5

    在账号添加中,选择「[WIP]Satori」,填写相应信息进行连接。

    + + + + \ No newline at end of file diff --git a/deploy/platform-slack.html b/deploy/platform-slack.html new file mode 100644 index 000000000..cd8a58e9c --- /dev/null +++ b/deploy/platform-slack.html @@ -0,0 +1,52 @@ + + + + + + Slack | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Skip to content

    Slack

    本节内容

    本节将包含你在 Slack 平台接入海豹核心需要了解的特定内容。

    Slack 支持 v1.4.2

    海豹从 v1.4.2 开始支持对接 Slack。

    获取 Token

    要获取用于连接海豹的 Token 之前,你需要建立好一个应用。登录 Slack API 平台,点击「Create New App」,再点击「From Scratch」。按照要求填写应用名字,并选择你想要海豹被部署到的工作区后点击「Create App」。

    提示:私骰模式

    Slack 平台的机制使没有公开发布的应用无法加入被指定的单个工作区之外的地方。如有需求,可查看 Slack 提供的发布指引

    APP Token

    在侧边栏点击「Socket Mode」,打开「Enable Socket Mode」的开关。此处会弹出一个窗口,这将会是你的 APP Token。按需填写名字,并复制保存。 确认后点击下方「Enable Events」,打开开关后在「Subscribe to bot events」下添加如下事件:

    1. message.channels
    2. message.groups
    3. message.im
    4. message.mpim

    注意

    如果这不是你期望的情况,请不要添加 app_mention。这个权限会让海豹只接收被 @ 到的指令和消息,导致 log 等功能无法正常工作。

    Bot Token

    在侧边栏点击「OAuth & Permissions」,下滑在「Bot Token Scopes」下,添加海豹运作需要的权限:

    1. channels:history
    2. channels:read
    3. chat:write
    4. chat:write.customize
    5. files:write
    6. groups:history
    7. groups:read
    8. im:history
    9. im:read
    10. im:write
    11. mpim:history
    12. mpim:read
    13. links.embed:write
    14. links:write

    点击侧边栏前往「Basic Information」页面,在「Install Your App」下点击「Install to Workplace」。完成后回到「OAuth & Permissions」页面,在「OAuth Tokens for Your Workspace」下找到「Bot User OAuth Token」。这是你的 Bot Token。复制并保存。

    连接海豹

    登录海豹并添加账号,选择「Slack」。在对应的区域填入 APP TokenBot Token,点击连接。你的海豹应该可以正常在 Slack 平台运作了!

    + + + + \ No newline at end of file diff --git a/deploy/platform-telegram.html b/deploy/platform-telegram.html new file mode 100644 index 000000000..5f3fb1078 --- /dev/null +++ b/deploy/platform-telegram.html @@ -0,0 +1,52 @@ + + + + + + Telegram | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Skip to content

    Telegram

    本节内容

    本节将包含你在 Telegram 平台接入海豹核心需要了解的特定内容。

    获取 Token

    要获取用于连接海豹的 Token 之前,你需要建立好一个机器人。在 Telegram 私信 BotFather,输入指令 /start 后使用 /newbot 创建按照要求创建一个机器人。

    提示:具体步骤

    /newbot 指令下有两个步骤:

    • 输入机器人的显示名
    • 输入机器人的账号名(需以 bot 结尾)

    完成后,BotFather 会发送一条含有 Token 的消息。这是连接机器人所需要的凭证,将它复制保存。

    连接海豹

    提示:代理模式

    如果你海豹所处的位置直接访问 Telegram 服务有困难,我们提供了通过 HTTP 代理访问的途径。

    登录海豹并添加账号,选择「Telegram账号」。在 Token 处粘贴你得到的 Token,点击连接。你的海豹应该可以正常在 Telegram 运作了!

    + + + + \ No newline at end of file diff --git a/deploy/quick-start.html b/deploy/quick-start.html new file mode 100644 index 000000000..cdeb5a192 --- /dev/null +++ b/deploy/quick-start.html @@ -0,0 +1,60 @@ + + + + + + 快速开始 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Skip to content

    快速开始

    本节内容

    本节将会指导你如何在你的 PC、服务器、甚至安卓手机上搭建和部署海豹核心。

    如果你对计算机、服务器等相关知识没有任何了解,或者在阅读本节时,对内容中的一些名词完全不理解,我们非常建议你先自行学习,对基本计算机知识有所了解之后,再阅读本节进行部署。

    获取海豹

    可以从以下两个渠道获取海豹核心安装包:

    • 官网:从 官网下载页 获取最新的正式版海豹核心安装包。

    • GitHub:从 GitHub Release 获取海豹核心安装包。

      这一渠道提供两个版本:以 版本号+发布日期 命名的正式版,与官网一致;以 Latest Dev Build+日期 命名的最新构建,可能有各种 Bug,不推荐一般用户使用。

    提示:我该选择从哪里获取?

    我们非常建议你使用从官网获取的正式版海豹。对于绝大多数用户来说,官网的下载最顺畅和便捷,所提供的正式版也适合绝大多数用户使用。

    海豹提供了多个平台的安装包,请确认你的操作系统并选择对应版本的安装包。提供的平台如下:

    • Windows:普通用户首选,适用于 Windows 7 或者更高,同样可以部署在 Windows 云服务器。
      • 64 位:适合绝大多数用户使用。
      • 32 位:只在你明确知道为何要使用 32 位版本的情况下使用 32 位版本。
    • Linux: 提供给更专业的用户使用,需要使用终端启动。适用于服务器、树莓派等设备。
      • x64:绝大多数使用 Intel 或 AMD CPU 的服务器都应使用此版本。
      • arm64:树莓派等 arm 设备请使用 arm64 版。
    • macOS:提供给 Mac 用户使用,需要使用终端启动。
      • arm64:Apple Silicon 芯片(M1、M2 等)请使用 arm64 版。
      • x64:Intel 芯片请使用 x64 版。
    • Docker:提供对应 Docker 镜像,支持多种架构。
      • amd64
      • arm64
    • Android:提供 Android 的 apk 安装包。

    启动

    注意

    永远不要直接运行压缩包中的海豹核心,也不要在临时目录中运行海豹核心。

    将安装包解压到合适的目录。考虑到后续升级,将目录名中的版本号删去或许是更好的做法。

    根据系统不同,用以下方法即可启动海豹:

    双击运行 sealdice-core.exe。数秒钟后,海豹核心将会在后台运行并弹出提示。

    在任务栏中找到海豹图标,点击即可打开后台(WebUI)。

    连接平台

    在完成上面的步骤后,你已经成功启动了海豹核心。接下来请根据你所需要对接平台的接入手册,来连接海豹和对应平台。

    见「连接平台」一章,包括:

    安装为系统服务(可选)

    如果你使用远程 Linux 服务器部署,或者使用终端启动海豹核心,那么,随着终端关闭,通常海豹核心也会一同关闭。

    海豹核心提供了一种自动安装为系统服务(systemd 服务项)的功能,可以免去手动配置。

    服务名称和服务的启动用户均可以通过提供命令行参数自定义,请运行 ./sealdice-core -h 查阅详细说明。

    默认情况下,海豹核心将尝试安装一个由 root 用户运行的,名为 sealdice.service 的服务。这要求海豹核心拥有 root 权限(通常由 sudo 运行得到)。

    bash
    $ ./sealdice-core -i
    +正在安装系统服务,安装完成后,SealDice将自动随系统启动
    +安装完成,正在启动……

    也提供自动卸载:

    bash
    $ ./sealdice-core --uninstall
    +正在卸载系统服务……
    +系统服务已删除

    安装完成后,可以使用 systemctl 来管理服务:

    shell
    systemctl status sealdice   # 查看运行状态
    +systemctl start sealdice    # 启动海豹核心
    +systemctl restart sealdice  # 启动或重启海豹核心
    +systemctl stop sealdice     # 停止海豹核心
    +journalctl -xe -u sealdice.service # 查看日志

    以上命令的详细用法,请查阅你系统的 systemd 文档。

    更新海豹

    当有新版本海豹核心时,你可以从 WebUI 或 .bot 回复语中看见新版本提示。

    目前海豹有三种更新方法,用户可以自行选择自己喜欢的方式,对于安卓端用户请看安卓豹更新

    请骰主进行更新时确保自己可以接触海豹后台,以免更新失败。同时更新前请做好备份,以免数据丢失。

    自动更新

    若有新版本,后台(WebUI)的「主页」会显示一个较为显眼的更新按钮,可以直接点击按钮更新。

    你还可以使用命令更新:执行 .master checkupdate,此指令需要 Master 权限,具体请看 Master 管理

    如果你采用了任何自动拉起进程的手段,包括但不限于 Linux 系统的 systemd 等,切勿使用自动更新。请稳妥地停止进程后进行手动替换更新。

    手动更新

    从海豹官网下载全新的安装包,解压后请勿运行,直接覆盖替换旧版本海豹,然后启动海豹即可。

    上传固件 v1.4.0

    v1.4.0 起,海豹支持后台固件升级功能,你可以在「综合设置」-「基本设置」-「海豹」找到这项功能。

    你可以使用指定的压缩包对当前海豹进行覆盖,上传完成后会自动重启海豹。

    安卓豹更新

    安卓端海豹核心无法使用以上方法进行更新,你可以直接下载新版本海豹进行安装,会自动替换旧版本海豹核心。

    更新前请「导出数据」以备份数据。

    + + + + \ No newline at end of file diff --git a/deploy/special_feature.html b/deploy/special_feature.html new file mode 100644 index 000000000..4c36109b4 --- /dev/null +++ b/deploy/special_feature.html @@ -0,0 +1,87 @@ + + + + + + 特色功能 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Skip to content

    特色功能

    本节内容

    本节将会介绍海豹的特色功能。

    指令兼容性

    海豹核心兼容了溯洄核心、赵骰核心和塔骰核心的绝大部分主流指令,无论之前用过哪一个都可以轻松上手。

    海豹核心对指令格式不敏感,你可以使用 .r1d20 +1.r d20+1.stshow力量 敏捷。st hp - 1 等等各种写法。

    提示

    虽然海豹尽可能提高兼容性,我们仍推荐适当使用空格,以避免预期外结果。

    易于部署和使用

    海豹的设计初衷是 「能被任何 TRPG 玩家喜爱和使用」,同时秉持 「没有提供 UI 的功能等于不存在」 的理念。

    只需一个不到 25 MB 的安装包、一个可用的机器人账号、和一小段空闲时间,任何人都可以搭建一个 TRPG 骰子。

    提示

    如果你希望在 QQ 平台上搭建骰子,由于 QQ 原则上不允许机器人账号,你会需要使用一些特殊技术,这可能花费你更多时间和精力。

    极少的资源占用

    由于 Golang 的高效,海豹核心只占用大概 40 MB 内存,以及极少的 CPU 资源。

    自带的《CoC 7th 怪物之锤》和《D&D 系列资料》会另外占用 50 - 70 MB 内存,但能提供极为强大的资料查询功能。

    内存占用会随着持续运行而稍稍增长并有所波动。根据我们的观察,即使是持续运行数月的大型公骰,内存占用也不会超过数百 MB。

    强自定义

    提供了友好的 WebUI 界面,可以自定义大部分指令的回复语句。

    同时对于自定义回复功能进行了强化,你可以编写一些复杂逻辑,使你的骰子更加鲜活。

    人工智能鸽子

    让你想咕就咕。

    示例

    木落
    .gugu
    头像
    头像
    海豹核心
    🕊️: <木落>在来开团的路上被巨龙叼走了!

    强大的查询功能

    海豹搭载了全文搜索技术(仅限 PC 版),可以看作是一个微型搜索引擎。

    text
    .find 30尺 法术

    细节可参见 查询指令 一节。

    通用特化支持

    代替他人检定 / 操作他人属性

    CoC 特化支持

    属性同义词

    各种旧版翻译、俗称、简繁汉字的属性被视为同一属性。

    默认技能等级

    内置部分人物卡上没有的默认技能等级。

    包括不限于速记、园艺、攀爬、各种武器等等。

    支持 .scb 指令

    用于在 sc 时附加一个奖励骰。

    适用于规则书中的关键连接自救规则。

    D&D 特化支持

    属性同义词

    各种旧版翻译、俗称、简繁汉字的属性被视为同一属性。

    优势骰劣势骰

    示例

    木落
    .set 20
    头像
    头像
    海豹核心
    设定默认骰子面数为 20
    木落
    .r d20优势
    头像
    头像
    海豹核心
    <木落>掷出了 d20优势=[{7 | 6 }]=7
    木落
    .r d劣势
    头像
    头像
    海豹核心
    <木落>掷出了 d劣势=[{16 | 18 }]=16

    属性调整值和熟练自动计算

    临时属性

    法术位支持

    死亡豁免

    休息

    可以实时编辑的跑团日志

    海豹开发了 日志在线染色器

    在海豹中记录的日志会自动上传,省去你一一发送日志文件的麻烦。

    除了海豹 Log 自用之外,支持 QQ 格式和塔骰格式,将你的 Log 全文粘贴到文本框里即可。

    是纯净骰,也是娱乐骰

    海豹除了核心指令之外,都被设计为可插拔的,目前有 7 个内置扩展。

    关闭对应扩展会连同扩展带来的指令一块关闭。

    因此在跑团时,如果你不想要任何娱乐功能,你可以(以 CoC 团为例):

    text
    .ext fun off // 关闭.jrrp和.gugu
    +.ext reply off // 关闭关键字回复
    +.ext deck off // 关闭抽牌 .draw
    +.ext dnd5e off // 关闭dnd5e系列指令
    +.ext story off // 关闭.name[随机指令]/.modu[魔都查询]/.who[排序]等
    +
    +也可以写成一行:
    +.ext fun reply deck dnd5e story off

    这样一来,就只剩下 coc 系列指令和 log 指令了。

    这个改动在当前群聊持续生效。你也可以再打开相应扩展:

    text
    .ext fun on

    如果你是骰主,你也可以在 WebUI 中设置各个扩展是否默认开启。这配置对于海豹核心新加入的群聊生效。

    更强的指令支持

    海豹核心将表达式翻译成字节码,丢进指令虚拟机里执行,同时也做了很强的兼容性处理。

    可以在不同骰系下测试一下这些指令:

    text
    .r 30 + (-1d20) + 49
    +.r d20 + (3 + 1d4)
    +.r 1 + (3+2)d(4+2d10)
    +
    +.sc 0/-1
    +.sc (1+2)/0
    +.sc 0/1d4+(3*2)
    +.sc 1 / 2
    +.sc 1/2 + 3
    +
    +.ra b 测试50
    +.ra b 50 测试

    彩蛋:

    text
    .r 1+d10-3*4 --asm
    +<木落>掷出了 1+d10-3*4=1 + 3[1d10=3] - 12=-8
    +=== VM Code ===
    +push 1
    +mark.left
    +push 1
    +mark.left
    +push 10
    +dice
    +add
    +mark.left
    +push 3
    +mark.left
    +push 4
    +mul
    +sub
    +halt
    +=== VM Code End===

    跨平台

    海豹核心的底层架构,支持单进程多号,也支持很方便地多开

    多号指每个骰子上连接多个帐号,并且支持同时连接不同平台。

    多开指同时运行多个海豹核心,以提供各自不同的服务内容。

    TRPG 规则支持列表

    • COC7
    • COC - DeltaGreen (.setcoc dg)
    • DND5e
    • 暗影狂奔 (.rsr)
    • WOD/无限团 (.ww)
    • 双十字 DoubleCross (.dx)
    • 共鸣性怪异 Emoklore (.ek .ekgen)
    • 剑世界 2.5 (插件)
    • 明日方舟跑团规则 (插件)
    • 其它插件由海豹社区提供,欢迎前去 插件仓库 查看

    如果你不跑这些规则,或者觉得并无必要,可以在后台关闭对应的指令。

    如果你喜欢的规则这里没有,那么可以去插件仓库看一看,或者自己编写规则模板插件!

    + + + + \ No newline at end of file diff --git a/deploy/transfer.html b/deploy/transfer.html new file mode 100644 index 000000000..ded833507 --- /dev/null +++ b/deploy/transfer.html @@ -0,0 +1,53 @@ + + + + + + 迁移 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Skip to content

    迁移

    本节内容

    本节将会指导你如何迁移现有的海豹核心。

    海豹核心的数据文件全平台通用。因此,在不同平台间迁移时,你只需要准备每个平台的可执行文件。

    注意

    在进行任何迁移时,你都应确保迁出和迁入的海豹核心都未在运行,否则可能造成不可逆的数据损坏。

    相同平台间迁移

    将整个海豹核心目录复制到新的位置即可。

    如果目录体积较大,你可以自行删除 backups/ 下的备份文件。这不会造成数据损失。

    跨平台迁移

    跨平台迁移时不能使用旧的可执行文件,而只迁移数据部分。

    将迁出海豹核心中的 data/ 目录以你习惯的任何方式打包。

    在迁入平台准备一份全新的海豹核心,用打包的数据覆盖迁入海豹的对应目录。

    如果你希望保留旧的备份文件,你可以复制迁出海豹 backups/ 目录中的内容,放置于迁入海豹的对应目录。备份文件也是通用的。

    Linux 服务器间跨架构迁移(arm64 → amd64)

    步骤与普通跨平台迁移一致。在运行新海豹核心时,如果文件权限不正确,可以在海豹核心目录下执行以下两条命令:

    bash
    find . -type f | xargs chmod 644
    +find . -type d | xargs chmod 755

    迁移数据到手机

    如果你需要把电脑海豹的数据迁移到手机海豹上,同样是迁移海豹的 data/ 目录。步骤如下:

    1. 关闭你的电脑海豹,复制电脑海豹的 data/ 目录发送到手机上。
    2. 点击手机海豹的 导出数据 按钮,在设置中勾选 文件同步模式。(平时推荐关闭这个选项,这里是为了替换数据库特别地需要开启)
    3. 在你习惯的手机文件管理软件中找到 根目录/document/com.sealdice.dice/sealdice,用迁出海豹的 data 目录替换这里面的 data 目录。
    4. 回到手机海豹的界面中点击 导入数据。导入完成后再点击启动核心,这时你的手机海豹里就应该是旧海豹的数据了。导入完成后也可以把「文件同步模式」关闭了。

    注意

    在手机海豹上,每次导入数据前都进行一次导出,导出后不要再运行海豹核心。

    这是因为,手机海豹不会实时更新导出的文件,它们是海豹数据在导出时的一份快照。

    如果在上次导出后产生了新数据,而再次进行导入,会导致新产生的数据被之前导出的数据覆盖,丢失这段时间以来录入的角色卡、Log、修改的自定义文案等海豹内部的数据。

    + + + + \ No newline at end of file diff --git a/hashmap.json b/hashmap.json new file mode 100644 index 000000000..53d14d530 --- /dev/null +++ b/hashmap.json @@ -0,0 +1 @@ +{"about_about.md":"CV_qhwQQ","about_develop.md":"av-vH3VY","about_license.md":"DdpdFMxu","about_readme.md":"E_W2JKSa","about_start-from-zero.md":"BTAFBcyH","advanced_edit_complex_custom_text.md":"38X_Lm4p","advanced_edit_deck.md":"DO1s6ASO","advanced_edit_helpdoc.md":"ZRyFlmN1","advanced_edit_reply.md":"DYzHFtyI","advanced_edit_sensitive_words.md":"My54GHHp","advanced_introduce.md":"DQF6vKSf","advanced_js_api_list.md":"CA_tvSu7","advanced_js_example.md":"BjLC5-Pm","advanced_js_gamesystem.md":"ChCyDGWM","advanced_js_project.md":"DQF_PqQ6","advanced_js_start.md":"B95XU9oj","advanced_readme.md":"CTnVKI7J","advanced_script.md":"CSAoGEHA","archive_archive-about-opensource.md":"wJ2bE4SD","archive_archive-guide.md":"DJne-GJ-","archive_archive-other.md":"D8Q2HrYQ","archive_archive-terms.md":"dpYrRNEw","archive_readme.md":"1yM4fdoN","config_backup.md":"DOjbghb9","config_ban.md":"tQubpXbn","config_basic.md":"CWjjuw8f","config_censor.md":"eWdyucuW","config_custom_text.md":"6xz1Pbb7","config_deck.md":"tcM1vhGg","config_helpdoc.md":"Ci5_xXiq","config_jsscript.md":"CpPpN3dT","config_readme.md":"BsXcC8Zr","config_reply.md":"DzvDRyaw","config_utilities.md":"DVJfYX0b","deploy_about_file.md":"CUJ6Ltla","deploy_android.md":"541vn--J","deploy_android_keepalive.md":"BEgmqgLY","deploy_db-repair.md":"OT0HZBST","deploy_platform-dingtalk.md":"BpeARkl1","deploy_platform-discord.md":"DU_wr0Ve","deploy_platform-dodo.md":"DMO1jstz","deploy_platform-kook.md":"WlSEF7VQ","deploy_platform-minecraft.md":"BqGJAHax","deploy_platform-qq-docker.md":"Hpy2Ym1Z","deploy_platform-qq-official.md":"XETUaTnY","deploy_platform-qq.md":"Ca-yLypu","deploy_platform-slack.md":"G-cegqt7","deploy_platform-telegram.md":"D-T9EMEM","deploy_quick-start.md":"FpFxN0Au","deploy_readme.md":"DsiyvSn7","deploy_special_feature.md":"CqsAxWzE","deploy_transfer.md":"1pMbDwz9","index.md":"15m1L-vS","use_attribute_alias.md":"DrXrL3FF","use_coc7.md":"ee9mbEM1","use_core.md":"C2uANgf3","use_deck_and_reply.md":"B3BngUpU","use_dnd5e.md":"D7hbdL__","use_faq.md":"Dlbwr4Wn","use_fun.md":"DR7CK6H2","use_introduce.md":"BS9907qJ","use_log.md":"B5tCfvi7","use_other_rules.md":"D9cDnbAa","use_quick-start.md":"Dv-jaOy9","use_readme.md":"DiyY5kVI","use_story.md":"B5avqG25"} diff --git a/images/avatar/dice.svg b/images/avatar/dice.svg new file mode 100644 index 000000000..70c50a4cb --- /dev/null +++ b/images/avatar/dice.svg @@ -0,0 +1,20 @@ + + + icon-s + + Layer 1 + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/images/avatar/user1.jpg b/images/avatar/user1.jpg new file mode 100644 index 000000000..f376fe8e5 Binary files /dev/null and b/images/avatar/user1.jpg differ diff --git a/images/avatar/user2.jpg b/images/avatar/user2.jpg new file mode 100644 index 000000000..2083f4f61 Binary files /dev/null and b/images/avatar/user2.jpg differ diff --git a/images/avatar/user3.jpg b/images/avatar/user3.jpg new file mode 100644 index 000000000..39d54519a Binary files /dev/null and b/images/avatar/user3.jpg differ diff --git a/images/bg/1-dark.svg b/images/bg/1-dark.svg new file mode 100644 index 000000000..7eb0b37ca --- /dev/null +++ b/images/bg/1-dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/bg/1-light.svg b/images/bg/1-light.svg new file mode 100644 index 000000000..e06f5f0a1 --- /dev/null +++ b/images/bg/1-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/bg/2-dark.svg b/images/bg/2-dark.svg new file mode 100644 index 000000000..89a11fa94 --- /dev/null +++ b/images/bg/2-dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/bg/2-light.svg b/images/bg/2-light.svg new file mode 100644 index 000000000..255c99b83 --- /dev/null +++ b/images/bg/2-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/bg/3-dark.svg b/images/bg/3-dark.svg new file mode 100644 index 000000000..2267dc929 --- /dev/null +++ b/images/bg/3-dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/bg/3-light.svg b/images/bg/3-light.svg new file mode 100644 index 000000000..e7b024819 --- /dev/null +++ b/images/bg/3-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/bg/4-dark.svg b/images/bg/4-dark.svg new file mode 100644 index 000000000..6dd25f94e --- /dev/null +++ b/images/bg/4-dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/bg/4-light.svg b/images/bg/4-light.svg new file mode 100644 index 000000000..14c7f38cc --- /dev/null +++ b/images/bg/4-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/bg/5-dark.svg b/images/bg/5-dark.svg new file mode 100644 index 000000000..f185663b5 --- /dev/null +++ b/images/bg/5-dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/bg/5-light.svg b/images/bg/5-light.svg new file mode 100644 index 000000000..e3b5a1c52 --- /dev/null +++ b/images/bg/5-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/bg/6-dark.svg b/images/bg/6-dark.svg new file mode 100644 index 000000000..c5144d657 --- /dev/null +++ b/images/bg/6-dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/bg/6-light.svg b/images/bg/6-light.svg new file mode 100644 index 000000000..e724d2914 --- /dev/null +++ b/images/bg/6-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/seal.png b/images/seal.png new file mode 100644 index 000000000..78f07a939 Binary files /dev/null and b/images/seal.png differ diff --git a/images/seal2.png b/images/seal2.png new file mode 100644 index 000000000..7052fa757 Binary files /dev/null and b/images/seal2.png differ diff --git a/images/sealdice-dark.svg b/images/sealdice-dark.svg new file mode 100644 index 000000000..a980c5ee0 --- /dev/null +++ b/images/sealdice-dark.svg @@ -0,0 +1,24 @@ + + + + + icon-s + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/images/sealdice.svg b/images/sealdice.svg new file mode 100644 index 000000000..a516c34ff --- /dev/null +++ b/images/sealdice.svg @@ -0,0 +1 @@ +icon-s \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 000000000..160d39742 --- /dev/null +++ b/index.html @@ -0,0 +1,52 @@ + + + + + + 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Skip to content

    海豹手册

    ✨海豹骰官方使用手册

    SealDice

    海豹核心

    海豹核心

    一个简单易用的跑团骰子系统。可以被叫做 海豹骰、豹骰,豹子骰。

    前往官网的 在线试用 中快速尝试——

    开始使用

    更多……

    使用有问题?对功能有新想法?想认识更多骰主?欢迎加入官方群!

    群列表:

    + + + + \ No newline at end of file diff --git a/use/README.html b/use/README.html new file mode 100644 index 000000000..ff9666c3a --- /dev/null +++ b/use/README.html @@ -0,0 +1,52 @@ + + + + + + 使用 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Skip to content
    + + + + \ No newline at end of file diff --git a/use/attribute_alias.html b/use/attribute_alias.html new file mode 100644 index 000000000..5fc0cf5dd --- /dev/null +++ b/use/attribute_alias.html @@ -0,0 +1,80 @@ + + + + + + 属性同义词 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Skip to content

    属性同义词

    本节内容

    本节将介绍海豹在 CoC 和 D&D 规则中默认使用的同义词。

    概念说明

    属性同义词是在录入和存储角色数据时,将若干个属性名视为同一个属性、互相可以替代使用。

    这一设计是为了解决下面这样的问题:(由于笔者的游戏栈,使用 CoC 举例)

    场景举例

    用户可能使用某些自动工具创建了一名调查员,由工具生成了录入数据的指令。这指令可能包含了类似这样的内容:

    text
    .st 力量50str50

    我们知道,「str」是「力量」属性的英文缩写法,它们完全指代的是同一属性。

    因此,我们期待这样的指令实际只录入一条属性,但是用户仍然可以用「力量」或「str」的任何一个名字使用这一属性。

    text
    $ .st 力量50str50
    +<木落>的属性录入完成,本次共记录了2条数据 (其中1条为同义词)
    +
    +# 实际上只有一条属性
    +$ .st show
    +<木落>的个人属性为:力量: 50
    +
    +# 可以用各种名字使用
    +$ .ra 力量
    +<木落>尝试使用"力量"技能:D100=64/50 失败
    +$ .ra STR
    +<木落>尝试使用"力量"技能:D100=78/50 失败
    +
    +# 可以用各种名字修改
    +$ .st str+10
    +<木落>的属性变化:
    +力量: 50 ➯ 60 (增加10=10)
    +$ .ra 力量
    +<木落>尝试使用"力量"技能:D100=90/60 失败

    类似地,在 CoC 中,「智力」与「灵感」是规则书规定的同一属性的两个名字。它们也被视为同义词。

    一些分支专精技能的名字,如「冲锋枪」,我们将「射击:冲锋枪」作为它的同义词,以适配尽量多的用法。

    我们在选择同义词时遵循以下几条原则:

    1. 规定的同义词等价,如 智力灵感教育知识
    2. 中文和英文缩写等价,如 力量str
    3. 同一概念的不同常用称呼等价,如 理智理智值,根据原则 2,sansan值 也指向同一属性;
    4. 日常用语中基本等价且易混淆的词汇等价,如 侦查侦察
    5. 不同版本规则之间的同一技能更换了用词,或翻译有变化,这些名字等价;如 CoC 6 版的 快速交谈 与 7 版的 话术;又如 7 版的 魅惑取悦
    6. 简体与繁体字等价,如 体质體質
    7. 在玩家中广泛使用的简称、别称与其正式名称等价,如 克苏鲁神话克苏鲁克苏鲁神话知识

    同义词表

    为了确保你不会获取到过时内容,我们决定不将列表放在手册中,敬请理解。

    这些同义词都是符合直觉的,你通常也无需专门查阅列表。如果你确实想了解,请参考以下内容。

    • CoC 规则的同义词,请自行理解 此源文件 的内容。

    • D&D 规则的同义词可在骰子启动后,在本地文件 data/default/extensions/dnd5e/attribute.yaml 中查看。

      这个文件遵守以下格式。其中,ac 位置上的名字是海豹核心选用的主要名字,后续列出的是它的同义词。

      yaml
      alias:
      +    ac:
      +        - AC
      +        - 护甲等级
      +        - 护甲值
      +        - 护甲
      +        - 護甲等級
      +        - 護甲值
      +        - 護甲
      +        - 装甲
      +        - 裝甲
    + + + + \ No newline at end of file diff --git a/use/coc7.html b/use/coc7.html new file mode 100644 index 000000000..e72d71e88 --- /dev/null +++ b/use/coc7.html @@ -0,0 +1,86 @@ + + + + + + 克苏鲁的呼唤 7 版 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Skip to content

    克苏鲁的呼唤 7 版

    本节内容

    本节将展示 CoC 7th 玩家所需指令,请善用侧边栏和搜索,按需阅读文档。

    我们假定你已对 CoC 规则有适当了解,本节只涉及如何使用海豹核心完成规则中指定的操作。

    克苏鲁的呼唤

    「克苏鲁的呼唤」(Call of Cthulhu)是一个充满了秘密、神秘和恐怖的游戏。你将扮演一位坚定的侦探,奔波在奇怪而危险的场所之间,揭开邪恶的阴谋,对抗暗夜的恐怖。你将面对令人 SAN 值直葬(令人理智崩溃)的存在、怪物们,还有疯魔的邪教徒们。在被人遗忘的奇异书卷中,你会发现不应当为人类所知晓的秘密。

    .st 操作人物卡

    在克苏鲁的呼唤中,每位玩家都需要创造一位调查员。这是一群发掘深层秘密的人,这是一群搜索遗忘之地的人,这是一群用禁忌知识武装自己头脑,正面应对克苏鲁神话中那些毛骨悚然之物的人。

    此指令用来操作骰子程序模拟的人物卡。

    属性与技能

    由于属性和技能在检定时基本不做区分,表述时不以 <属性/技能> 的形式表明这里既可以使用技能名又可以使用属性名,而是统一使用 <属性> 来代指。

    .st help 获取帮助信息

    请以海豹核心最新帮助信息为准。列出几个常用功能供参考。

    列出属性

    .st show [<属性>]

    不提供参数则列出所有属性数值;提供属性名则列出特定属性数值。

    删除属性

    .st clr 删除所有属性数值;

    .st del <属性>... 删除指定属性。

    设定属性值

    .st <属性><表达式> <属性><表达式>...

    将指定属性设定为指定表达式的计算结果。如 .st 敏捷50 力量3d6*5

    v1.4.2 开始,海豹核心兼容了简化卡格式 .st <角色名>-<属性><表达式>,这相当于分别使用 .nn 指令设置角色名,然后设定属性值。

    更新属性值

    .st <属性>±<表达式>

    将指定属性增加或减去表达式的计算结果。表达式中可以包含骰点。如 .st 敏捷+2 hp+1d3

    设定计算表达式

    .st &<属性>=<表达式>

    保存计算表达式,以更方便地计算某些固定骰点。例如

    示例

    木落
    .st &手枪伤害=1d6+1
    头像
    头像
    海豹核心
    <木落>的coc7属性录入完成,本次录入了1条数据
    木落
    .r 手枪伤害
    头像
    头像
    海豹核心
    <木落>掷出了 手枪伤害=[手枪伤害=5[1d6=5] + 1]=6

    导出属性值

    .st export

    将保存的属性数值以 st 指令格式列出,可以直接复制到其他骰子使用。

    代骰

    以上功能均可以通过附加 @其他人 来操作对方的属性值。

    示例

    木落
    .st 侦查80 @Szz
    头像
    头像
    海豹核心
    由<木落>代骰: +<Szz>的coc7属性录入完成,本次录入了1条数据
    木落
    .st hp-1 @Szz
    头像
    头像
    海豹核心
    由<木落>代骰: +<Szz>的属性变化: +生命值: 10 ➯ 9 (扣除-1=-1)
    木落
    .st show hp @Szz
    头像
    头像
    海豹核心
    由<木落>代骰: +<Szz>的个人属性为: +生命值:9/10

    .ra/.rc 检定

    检定一词要与恰当的技能或属性一起使用;也就是说,比如说,守秘人会要求进行一个「攀爬检定」或一个「力量检定」。

    rc 还是 ra?

    rc 是规则书检定。而 ra 是房规检定。区别主要在于对大成功/大失败的判定方式。

    当房规设定为规则书标准(.setcoc 0)时,ra 和 rc 等价。

    进行检定

    .ra <属性表达式>

    使用指定的属性或技能进行检定。其中,属性可以被包含在表达式中进行调整。

    另外,直接指明技能名和数值,将以给出的数值进行检定。

    示例

    假设角色的侦查技能是40

    木落
    .ra 侦查
    头像
    头像
    海豹核心
    <木落>的"侦查"检定结果为: D100=64/40 失败
    木落
    .ra 侦查+10
    头像
    头像
    海豹核心
    <木落>的"侦查"检定结果为: D100=15/50 困难成功
    木落
    .ra 侦查99
    头像
    头像
    海豹核心
    <木落>的"侦查"检定结果为: D100=30/99 困难成功

    多轮检定

    .ra <次数># <属性表达式>

    重复进行指定次数的相同检定。

    示例

    木落
    .ra 3# 侦查
    头像
    头像
    海豹核心
    对<木落>的"侦查"进行了3次检定,结果为: +D100=87/40 失败 +D100=24/40 成功 +D100=1/40 大成功

    要求一定难度的检定

    .ra <难度><属性表达式>

    进行检定,但只有成功等级达到要求的难度才判定为成功。可以指定的难度有 困难(当前判定线的二分之一)、极难(当前判定线的五分之一)、大成功(根据当前房规确定)

    示例

    假设角色的侦查技能是40

    木落
    .ra 困难侦查+10
    头像
    头像
    海豹核心
    <木落>的"困难侦查+10"检定结果为: D100=30/25 失败

    奖励骰和惩罚骰

    .ra (b|p)[<个数>] <属性表达式>

    进行检定,并且使用指定个数(如果不指定,为 1 个)的奖励骰(b)或惩罚骰(p)。

    示例

    木落
    .ra b2 侦查
    头像
    头像
    海豹核心
    <木落>的"侦查"检定结果为: b2=1/40, ([D100=51, 奖励 0 2]) 大成功!

    代骰

    以上功能均可以通过附加 @其他人 来使用对方的技能进行检定。

    示例

    假定 Szz 的侦查技能是80

    木落
    .ra 侦查 @Szz
    头像
    头像
    海豹核心
    由<木落>代骰: +<Szz>的"侦查"检定结果为: D100=65/80 成功

    以上功能可以组合使用

    示例

    木落
    .ra 3# p 困难侦查+10 @Szz
    头像
    头像
    海豹核心
    由<木落>代骰: +对<Szz>的"困难侦查+10"进行了3次检定,结果为: +p=36/45, ([D100=16, 惩罚 3]) 成功 +p=91/45, ([D100=91, 惩罚 8]) 失败 +p=75/45, ([D100=5, 惩罚 7]) 失败

    .rah/.rch 暗中检定

    .ra/.rc 功能相同。区别是,检定结果将不会发送到使用指令的群聊,而是私聊发送给指令发起者。

    为什么没有结果?

    暗中检定只在群聊中可用。

    由于要私聊发送检定结果,你可能需要先将骰子加为好友

    代骰

    此功能同样支持通过附加 @其他人 以使用对方的技能进行检定。

    一个较为常见的用法是,PL 要求使用心理学技能,由 KP 进行暗中代骰。

    示例

    头像
    PL
    我要对这个 NPC 使用心理学
    KP
    可以
    头像
    KP
    .rah 心理学 @PL
    头像
    头像
    海豹核心
    由<KP>代骰: +<PL>悄悄进行了一项心理学检定

    .rav/.rcv 对抗检定

    有些情况,例如两位调查员相互对抗时,你会希望双方都进行掷骰来决出胜者。 此外,对抗检定也是近战的标准处理方式。

    在对抗检定中应用调整

    在对抗检定这一节中,所述的「属性表达式」除了使用 技能名技能名+指定数值 外,可以进行以下调整:

    1. 在前面附加难度等级,如 困难侦查
    2. 进行运算,如 侦查+10
    3. 在后面附加奖励骰与惩罚骰,如 侦查,b2

    使用相同技能对抗

    .rav <属性表达式> @对手

    自己与对手均使用相同属性/技能(如果有调整值,也相同应用)进行一次检定,然后比较成功等级。

    示例

    木落
    .rav 侦查+10 @Szz
    头像
    头像
    海豹核心
    对抗检定: +木落 侦查+10-> 属性值:35 判定值:3 极难成功 +Szz 侦查+10-> 属性值:90 判定值:23 困难成功 +木落胜出!

    使用不同技能对抗

    .rav <自己的属性表达式> <对手的属性表达式> @对手

    使用自己的一个属性/技能对抗对手的另一属性/技能,或者相同属性/技能应用不同调整值。

    示例

    木落
    .rav 潜行,b 侦查 @Szz
    头像
    头像
    海豹核心
    对抗检定: +木落 潜行-> 属性值:20 判定值:7[[D100=97, 奖励 0]] 困难成功 +Szz 侦查-> 属性值:80 判定值:28 困难成功 +平手!请自行根据场景(如属性比较、攻击对反击,攻击对闪避)做出判断

    指定两个其他人对抗

    通过 at 两个其他玩家,可用让 TA 们进行对抗,而不包括自己。

    .rav <共用属性表达式> @A @B

    .rav <A属性表达式> <B属性表达式> @A @B

    .sc 理智检定

    在令人不安或恐怖的情景中,守秘人将考验调查员的心智。这会要求场景中每位调查员进行一次理智检定。在较短的时间内失去过多理智值,会使调查员陷入临时性或不定性疯狂。

    指定损失的理智

    .sc <成功时理智损失>/<失败时理智损失>

    其中,理智损失均可以是包含骰点的表达式。

    示例

    木落
    .sc 1/1D4+1
    头像
    头像
    海豹核心
    <木落>的理智检定: +d100=9/60 极难成功 +理智变化: 60 ➯ 59 (扣除1=1点)

    简略写法

    .sc <失败时理智损失>(完全等价于 .sc 0/<失败时理智损失>

    如果检定成功时不失去理智,可以只指定失败时的理智损失。

    奖励骰和惩罚骰

    .sc (b|p)[<数量>] <成功时理智损失>/<失败时理智损失>

    在进行理智检定时使用指定数量的奖励骰或惩罚骰。

    代骰

    此指令支持附加 @其他人,使目标进行指定的理智检定。

    示例

    木落
    .sc 0/1 @Szz
    头像
    头像
    海豹核心
    由<木落>代骰: +<Szz>的理智检定: +d100=82/60 失败! +理智变化: 60 ➯ 59 (扣除1=1点)

    .ti/.li 疯狂发作症状

    在《克苏鲁的呼唤》中,与克苏鲁神话相关的痛苦经历和可怖领悟都会诱发疯狂。

    疯狂状态的持续时间取决于失去的理智值的数量和比例。

    ti 还是 li?

    通常的疯狂发作应该使用 ti 抽取即时症状

    但是,如果疯狂发作时调查员周围没有其他调查员陪伴,或在场的所有调查员同时疯狂发作, 则守秘人可以快速推进行动,只陈述结果。这被称为疯狂发作的总结症状。使用 li 来抽取。

    .ti

    使用该指令以抽取疯狂发作的即时症状与发作时间。如果抽到的是恐惧症与躁狂症,也会同时抽取具体条目。

    .li

    使用该指令以抽取疯狂发作的总结症状与消耗时间。如果抽到的是恐惧症与躁狂症,也会同时抽取具体条目。

    .en 技能成长

    当调查员在游戏中成功使用了技能,玩家应该勾上角色卡上该技能旁的方框。这提供了调查员从经验中学习的机会。

    • 若使用了奖励骰则不能获得技能成长标记。
    • 对于对抗检定,双方可能都实现某种程度的成功,但只有一方获胜,也只有胜者可以获得技能成长标记。

    进行技能成长

    .en <技能名称> [<更多技能名称>...]

    对指定的技能分别进行一次成长检定。

    相同技能不能被反复列出。如果需要对一个技能进行多次成长,请多次使用成长指令。

    text
    .en 侦查 聆听 图书馆使用

    .en <技能名称><技能点数>

    也可以强制指定一个技能的数值。注意,不论成功与否,这都将使用新的技能值覆盖现有的技能值。

    指定成长值

    .en <技能名称>[<技能点数>] +<失败成长值>/<成功成长值>

    指定当成长检定成功与失败时的技能成长点数。两个点数都可以是包含骰点的表达式。

    .en <技能名称>[<技能点数>] +<成功成长值>

    如果检定失败时成长为 0,也可以略去不写。

    指定的成长值

    指定值前面的加号 + 是必须的。

    成长值可以是负数,如果命中,则会失去相应的技能点数。

    .coc 生成随机属性(制卡)

    .coc [<数量>]

    随机生成指定数量的调查员属性。如果省略数量,将生成 1 个。生成的属性包括 8 项基础属性与幸运,同时会计算 HP 点数。

    此外,也会计算属性的总值供用户参考。总值包括两个,其一是 8 项基础属性的总值,其二是前者与幸运的总值。

    示例

    木落
    .coc 2
    头像
    头像
    海豹核心
    <木落>的七版COC人物作成: +力量:65 敏捷:80 意志:55 +体质:50 外貌:45 教育:90 +体型:70 智力:75 +HP:12 幸运:45 [530/575] + +力量:40 敏捷:60 意志:65 +体质:60 外貌:75 教育:60 +体型:50 智力:75 +HP:11 幸运:55 [485/540]

    .setcoc 设置房规

    改变海豹核心判定大成功与大失败的方式。

    显示当前房规

    .setcoc

    不加参数的使用,即显示当前设定的房规。

    列出可用房规

    .setcoc details

    列出所有内置或通过扩展加入的房规。海豹核心内置的房规列出如下:

    序号规则
    0(默认)出 1 大成功,不满 50 出 96-100 大失败,满 50 出 100 大失败 (CoC7th 规则书)
    1不满 50 出 1 大成功,不满 50 出 96-100 大失败,满 50 出 100 大失败
    2(常用)出 1-5 且判定成功为大成功,出 96-100 且判定失败为大失败
    3出 1-5 大成功,出 96-100 大失败 (即大成功/大失败时无视判定结果)
    4出 1-5 且≤(成功率/10) 为大成功,不满 50 出>=96+(成功率/10) 为大失败,满 50 出 100 大失败
    5出 1-2 且≤(成功率/5) 为大成功,不满 50 出 96-100 大失败,满 50 出 99-100 大失败
    dg出 1 或检定成功基础上个位十位相同为大成功,出 100 或检定失败基础上个位十位相同为大失败,此规则无困难成功或极难成功

    设定房规

    .setcoc <房规序号>

    使用指定的房规。

    + + + + \ No newline at end of file diff --git a/use/core.html b/use/core.html new file mode 100644 index 000000000..6fd216edd --- /dev/null +++ b/use/core.html @@ -0,0 +1,97 @@ + + + + + + 核心指令 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Skip to content

    核心指令

    本节内容

    本节将介绍海豹核心的核心指令。

    核心指令是无法被关闭的指令。与之相对的概念是扩展指令,扩展指令可以被关闭。

    .master 骰主指令

    此指令只能由具有 Master 权限的用户使用。

    .master add @A 为 A 添加 Master 权限。

    .master del @A 移除 A 的 Master 权限。

    .master list 查看当前 Master 权限列表。

    .master relogin 30 秒后重新登录,有可能使骰子失联。

    .master reboot 重新启动海豹核心(需要二次确认)。

    .master checkupdate 检查并进行远程更新(需要二次确认)。

    .master unlock <解锁码> 清空 Master 权限列表,并给自己重新添加 Master 权限。

    .master backup 做一次备份。

    .master reload (deck|js|helpdoc) 重新加载牌堆/js/帮助文档。

    .master quitgroup <群组 ID> [<理由>] 从指定群组中退出,必须在同一平台使用。

    注意:保护好你的骰子

    我们认为,拥有海豹核心的最终判定方式是可以接触到 WebUI。因此,该解锁码仅能通过 WebUI 的「综合设置 - 基本设置」获取。

    你可以将 Master 权限授予若干位维护人员。但是,确保只有你完全信任的人能够接触到你骰子的 WebUI 与本地文件。

    如果你的 WebUI 可以通过公开互联网访问,确保你设置了合适的密码。

    .ban 黑白名单指令

    注意:统一 ID

    在海豹核心的指令和后台设置中,你会经常用到统一 ID。这是海豹核心用于标识不同平台的用户和群组的通用格式。对于每个用户,其形式为 平台:序列号;对于群组,其形式为 平台-Group:序列号

    使用 .userid 指令查看自己和所在群聊的统一 ID。

    在 QQ 平台,序列号即为 QQ 号与群号。

    此指令只能由具有 Master 权限的用户使用。

    .ban help 查看帮助。

    .ban add <统一 ID> [<原因>] 使用统一 ID,将指定用户拉入黑名单,理由可不填。

    .ban trust <统一 ID> 使用统一 ID,将指定用户添加至信任列表。

    .ban rm <统一 ID> 使用统一 ID,将指定用户移出黑名单/信任列表。

    .ban list 展示列表。

    .ban list (ban|warn|trust) 只显示被禁用/被警告/信任用户。

    .ban query <统一 ID> 查看指定用户黑白名单情况。

    .bot 骰子管理

    你必须 AT 骰子账号,才能使用 bot 命令。为了简单,在以下示例中略去 AT 的部分。

    示例

    木落
    .bot on
    头像
    头像
    海豹核心
    <海豹bot> 已启用 SealDice <版本号>
    木落
    .bot off
    头像
    头像
    海豹核心
    <海豹bot> 停止服务
    木落
    .bot bye
    头像
    头像
    海豹核心
    收到指令,5s后将退出当前群组
    木落
    .bot
    头像
    头像
    海豹核心
    SealDice <版本号>

    .ext 扩展管理

    除了本节所述的「核心指令」之外,海豹的其他功能都作为「扩展」提供。每一个扩展提供若干指令和其他功能,并可以单独开关。你可在每个群聊中启用不同的扩展。

    .ext list 查看扩展列表和开启情况。

    .ext <扩展名> 查询指定扩展的信息。

    .ext <扩展名> (on|off) 开启、关闭指定扩展。

    目前,海豹提供 7 个内置扩展,它们的详细信息在本章的后续内容中逐一介绍。同时,海豹核心也支持通过装载 JavaScript 脚本添加第三方扩展。

    示例

    木落
    .ext
    头像
    头像
    海豹核心
    检测到以下扩展: +1. [开]coc7 - 版本:1.0.0 作者:木落 +2. [开]log - 版本:1.0.0 作者:木落 +3. [开]fun - 版本:1.0.0 作者:木落 +4. [开]deck - 版本:1.0.0 作者:木落 +5. [关]reply - 版本:1.0.0 作者:木落 +6. [开]dnd5e - 版本:1.0.0 作者:木落 +7. [开]story - 版本:1.0.0 作者:木落 +使用命令: .ext <扩展名> on/off 可以在当前群开启或关闭某扩展。 +命令: .ext <扩展名> 可以查看扩展介绍及帮助
    木落
    .ext coc7 on
    头像
    头像
    海豹核心
    打开扩展 coc7
    木落
    .ext reply
    头像
    头像
    海豹核心
    > [reply] 版本1.2.0 作者木落 +> 自定义回复模块,支持各种文本匹配和简易脚本
    木落
    .ext reply off
    头像
    头像
    海豹核心
    关闭扩展 reply

    可以在 UI 界面中「综合设置 - 基本设置」的最底下,设置各个扩展及其指令的默认开启状态。

    .set 骰子面数管理

    海豹默认骰子面数为100,你可以通过以下指令在 coc/dnd 规则中切换,更多规则请看其它规则支持

    .set info 查看当前面数设置。

    .set <面数> 设置群内骰子面数。

    .set dnd 设置群内骰子面数为20,并自动开启对应扩展。

    .set (coc|coc7) 设置群内骰子面数为100,并自动开启对应扩展。

    .set clr 清除群内骰子面数设置。

    .r 骰点

    .r <表达式> [<原因>]

    别名:.roll

    常用示例

    示例

    木落
    .r
    头像
    头像
    海豹核心
    <木落>掷出了 D100=69
    木落
    .r d50
    头像
    头像
    海豹核心
    <木落>掷出了 d50=[1d50=48]=48
    木落
    .r d50 天气不错
    头像
    头像
    海豹核心
    由于天气不错,<木落>掷出了 d50=[1d50=4]=4
    木落
    .r 5d24 骰5个24面骰
    头像
    头像
    海豹核心
    由于骰5个24面骰,<木落>掷出了 5d24=[5d24=60, 7+20+15+1+17]=60
    木落
    .r 4d6k3 骰4个6面骰,选3个最大的
    头像
    头像
    海豹核心
    由于骰4个6面骰,选3个最大的,<木落>掷出了 4d6k3=[{6 5 3 | 1 }]=14
    木落
    .r 100 + 3 * 2
    头像
    头像
    海豹核心
    <木落>掷出了 100 + 3 * 2=100 + 6=106

    或许你已注意到,.r 指令的表达式在不包含骰子算符时,相当于计算器。海豹的计算只支持整数,出现的小数被立即舍弃。

    多轮骰点

    示例

    木落
    .r 2#d10
    头像
    头像
    海豹核心
    <木落>掷骰2次: +d10=[1d10=7]=7 +d10=[1d10=8]=8

    在骰点中使用属性值

    你可在表达式中包含属性值或其他变量。

    示例

    此时木落的侦查技能点是 53

    木落
    .r 侦查+10
    头像
    头像
    海豹核心
    <木落>掷出了 侦查+10=53[侦查=53] + 10=63

    奖励骰与惩罚骰

    CoC 规则中,对于百分骰的一种补偿骰法,通过额外骰一定数量的十位骰,选择组成的最好结果或最坏结果。

    示例

    木落
    .r b
    头像
    头像
    海豹核心
    <木落>掷出了 b=[D100=72, 奖励 4]=42
    木落
    .r b3
    头像
    头像
    海豹核心
    <木落>掷出了 b3=[D100=96, 奖励 4 6 3]=36
    木落
    .r p4 惩罚骰
    头像
    头像
    海豹核心
    由于惩罚骰,<木落>掷出了 p4=[D100=27, 惩罚 5 6 8 7]=87

    优势骰与劣势骰

    D&D 规则中对 20 面骰的一种补偿骰法。额外骰一次,取较高或较低结果。

    示例

    木落
    .set 20
    头像
    头像
    海豹核心
    设定默认骰子面数为 20
    木落
    .r d20优势
    头像
    头像
    海豹核心
    <木落>掷出了 d20优势=[{7 | 6 }]=7
    木落
    .r d劣势
    头像
    头像
    海豹核心
    <木落>掷出了 d劣势=[{16 | 18 }]=16

    优势骰与劣势骰也可使用通用的表达式表达

    示例

    木落
    .r 2d20k1 等于优势骰
    头像
    头像
    海豹核心
    由于等于优势骰,<木落>掷出了 2d20k1=[{19 | 17 }]=19
    木落
    .r 2d20q1 等于劣势骰
    头像
    头像
    海豹核心
    由于等于劣势骰,<木落>掷出了 2d20k1=[{19 | 17 }]=17

    fvtt 骰点兼容

    示例

    木落
    .r d20kh
    头像
    头像
    海豹核心
    <木落>掷出了 d20kh=[{10 | 3 }]=10

    fate 命运骰

    一种特殊的六面骰,六个面分别为 -、-、0、0、+、+,分别代表 -1、0、1。

    骰点时投掷 4 次,加在一起为结果。

    示例

    木落
    .r f
    头像
    头像
    海豹核心
    <木落>掷出了 f=[---+]=-2

    WOD 骰点

    WOD 骰点规则是一个多轮骰点规则,国内多见于无限团。

    进行 WOD 骰点需要设定以下参数:骰池数量 X、加骰线 Y、骰子面数 Z、成功线 N,其中 X Y 是必须的,成功线默认为 8,骰子面数默认为 10。

    骰 X 个 Z 面骰,每有一个大于等于成功线 N 的骰,成功数加 1,每有一个大于等于加骰线 Y 的骰,加骰数加 1,进入下一轮。

    在第二轮中,骰上一轮中加骰数个 Z 面骰,重复进行计算。以此类推。

    最后计算总计成功数。

    表达式形如 <X>a<Y>[m<Z>][k<N>]。其中的大写字母用相应参数替换。

    示例

    木落
    .r 5a6
    头像
    头像
    海豹核心
    <木落>掷出了 5a6=[成功2/8 轮数:3 {4,<10*>,<10*>,5,1},{5,<6>},{1}]=2
    木落
    .r 10a6k4m9
    头像
    头像
    海豹核心
    <木落>掷出了 10a6k4m9=[成功11/16 轮数:3 {1,<6*>,5*,3,<8*>,5*,<8*>,<6*>,2,<8*>},{5*,2,<9*>,1,4*},{5*}]=11

    在计算过程中,每一轮骰点被包含在一对花括号 {} 中;达到加骰线 Y 的骰点用 <> 标记;达到成功线 N 的骰点用 * 标记。

    你可指定 Y = 0,这时不进行加骰而只骰一轮。

    你可将 k<N> 替换成 q<M>,这时,最终计算的是小于等于 M的骰子总数。

    示例

    木落
    .r 5a6q4
    头像
    头像
    海豹核心
    <木落>掷出了 5a6q4=[成功4/9 轮数:3 {<9>,5,<9>,3*,<9>},{<10>,3*,2*},{2*}]=4

    双十字骰点

    双十字规则是一种多轮的骰点规则。

    进行双十字骰点需要设定以下参数:骰池数量 X、暴击线 Y、骰子面数 Z,其中 X Y 是必须的,骰子面数 Z 默认为 10。

    骰 X 个 Z 面骰,出目大于等于暴击线的骰子称为此骰子「暴击」。只要存在暴击的骰子,就称本轮暴击,进入下一轮;否则计算最终骰点。

    第二轮中,骰 上一轮中暴击的骰子数 个 Z 面骰,统计暴击数,判断进入下一轮或结束。以此类推。

    最终的骰点结果为:暴击轮数 * 10 + 最后一轮中最大点数。

    表达式形如 <X>c<Y>[m<Z>]。其中的大写字母用相应参数替换。

    示例

    木落
    .r 4c3m7
    头像
    头像
    海豹核心
    <木落>掷出了 4c3m7=[出目32/9 轮数:4 {<4>,2,<4>,<5>},{<7>,1,2},{<7>},{2}]=32

    在计算过程中,每一轮骰点被包含在一对花括号 {} 中;达到暴击线 Y 的骰点用 <> 标记。

    混合运算

    以上所有骰法,加、减、乘、除、乘方等 5 个数学运算,以及括号 () 可以被组合使用,以进行更复杂的运算。

    示例

    木落
    .r 30 + (-1d20) + 49
    头像
    头像
    海豹核心
    <木落>掷出了 30 + (-1d20) + 49=30 + -1[1d20=1] + 49=78
    木落
    .r d50 * 3 + 2
    头像
    头像
    海豹核心
    <木落>掷出了 d50 * 3 + 2=21[1d50=21] * 3 + 2=65
    木落
    .r d50 * 3 + (2 - p2) 多项式
    头像
    头像
    海豹核心
    由于多项式,<木落>掷出了 d50 * 3 + (2 - p2)=25[1d50=25] * 3 + -64[D100=6, 惩罚 6 5]=11

    特别地,上文所述的「骰法」d b p f a c 均可作为运算符使用。

    示例

    木落
    .r 1d1d1d1d1d1d1d1d1d1d1d1d1d1d(20+1d3*4)
    头像
    头像
    海豹核心
    <木落>掷出了 1d1d1d1d1d1d1d1d1d1d1d1d1d1d(20+1d3*4)=13
    木落
    .r 1d10+(1+32)d(4*6)d20
    头像
    头像
    海豹核心
    <木落>掷出了 1d10+(1+32)d(4*6)d20=1[1d10=1] + 3941[33d24=384,384d20=3941]=3942

    .rh 暗骰

    这个指令的格式与普通骰点 .r 完全相同,区别在于发送骰点结果的方式。

    在发送指令的群聊中,海豹核心会进行提示,但提示不包含骰点结果。

    骰点结果将由海豹核心私聊给指令发送者。

    收不到结果?

    在 QQ 平台上,如果你不是海豹账号的好友,将无法进行私聊。也就无法收到暗骰结果。

    示例

    木落
    .rh d50
    头像
    头像
    海豹核心
    命运正在低语!

    .rx / .rxh 特殊骰点

    这个指令的格式与普通骰点 .r 完全相同,区别在于允许额外 AT 其他人,以使用对方的属性。

    这种操作称为「代骰」,你会在许多其他指令中看到代骰用法。

    示例

    此时木落的侦查是 75,Szz 的侦查是 80

    木落
    .rx 侦查+1d20**2
    头像
    头像
    海豹核心
    <木落>掷出了 侦查+1d20**2=75[侦查=75] + 324[1d20=18]=399
    木落
    .rx 侦查+1d20**2 @Szz
    头像
    头像
    海豹核心
    由<木落>代骰: +<Szz>掷出了 侦查+1d20**2=80[侦查=80] + 144[1d20=12]=224

    .nn 角色名设定

    .nn 查看当前角色名。

    .nn <角色名> 修改角色名,角色名中不能带有空格。

    .nn clr 重置角色名,即,将角色名设置为 IM 平台的昵称。

    角色名被用于在进行各种操作和记录 Log 时显示。

    示例

    木落
    .nn 简·拉基·茨德
    头像
    头像
    海豹核心
    <木落>(IM 账号)的昵称被设定为<简·拉基·茨德>
    木落
    .r
    头像
    头像
    海豹核心
    <简·拉基·茨德>掷出了 D100=16
    木落
    .nn
    头像
    头像
    海豹核心
    玩家的当前昵称为: <简·拉基·茨德>
    木落
    .nn clr
    头像
    头像
    海豹核心
    <简·拉基·茨德>(IM 账号)的昵称已重置为<木落>

    .pc 角色卡管理

    信息

    为了使用这个指令,需要先介绍海豹核心管理你角色卡的方式。

    在每个群聊(对于这里,私聊也被认为是一个特殊的群聊)中,你都自动拥有一张独立的角色卡。这些角色卡互相无任何影响。

    你还可以拥有若干与特定群聊无关的角色卡,这些角色卡可以被绑定到任意数量的群聊。这时,绑定的群聊中角色数据互相同步,在一处的修改就会影响其他各处。

    pc 指令的作用是管理上述第二种群聊无关角色卡。

    .pc new <角色名> 新建一张角色卡,并绑定到当前群聊。

    .pc save [<角色名>] 将你当前群聊中的独立卡数据保存为个人角色卡。你可指定保存的角色名,如不指定,将使用当前群聊中你的角色名。

    .pc list 列出你所保存的所有角色。

    .pc tag (<角色名>|<角色序号>) 将指定角色卡绑定到当前群聊。

    .pc tag 不带有角色名参数,将本群的绑定关系解除。你在本群的角色将会恢复为独立卡的数据。

    .pc untagAll (<角色名>|<角色序号>) 将指定角色卡从其绑定的所有群解绑。

    .pc load (<角色名>|<角色序号>) 使用指定角色卡的数据覆盖当前群聊的独立卡。这不会将角色卡绑定到当前群聊。

    .pc del/rm (<角色名>|<角色序号>) 删除指定角色卡。

    .find 词条查询指令

    海豹核心默认搭载了 CoC 的《怪物之锤》、《魔法大典》和 D&D 规则的一系列资料。这些资料在海豹的 data/helpdpc 目录下的不同文件中被整理成词条,并支持使用此指令进行查询。

    .find [#<分组名>] <关键字> [--num=<页大小>] [--page=<页码>] 用关键字进行词条查询;如果提供了分组名,则只在指定分组中进行查询;可指定每页大小和页码,默认为每页 4 条,显示第 1 页。

    「分组名」是指海豹 data/helpdoc 目录下的子目录名。对于内置的帮助文档,分组名分别是「COC」和「DND」。

    .find <数字ID> 显示该 ID 的词条。

    .find --rand 显示随机词条。

    别名:.查询

    查询功能在不同设备上的实现是不同的。在 x86 设备上,海豹核心使用稍微更多的内存使用全文搜索,这赋予了查询指令强大的获取能力。在其他平台上,由于搜索库的限制,海豹核心使用词条标题模糊搜索。

    v1.4.2 版本起,你可以在 WebUI 的「扩展功能 - 帮助文档」中设置分组的别名。

    指定默认查询分组 v1.4.2

    v1.4.2 版本起,海豹支持在每个群组中分别设置默认的查询分组。

    .find config --group 查看当前群组的默认查询分组。

    .find config --group=<分组名> 设置当前群组的默认查询分组。

    .find config --groupclr 清除当前群组的默认查询分组。

    示例

    木落
    .find config --group=COC
    头像
    头像
    海豹核心
    指定默认搜索分组为COC
    木落
    .find 火球术
    头像
    头像
    海豹核心
    未找到搜索结果
    木落
    .find config --groupclr
    头像
    头像
    海豹核心
    已清空默认搜索分组,原分组为COC
    木落
    .find 火球术
    头像
    头像
    海豹核心
    [全文搜索]最优先结果: +词条: PHB法术:火球术

    全文搜索

    示例

    木落
    .find 30尺 法术
    头像
    头像
    海豹核心
    全部结果: +[序号3066]【术士:超魔法:远程法术】 匹配度 0.16 +[序号3015]【游侠:驯兽师:法术共享】 匹配度 0.13 +[序号2396]【法术详述:迷踪步】 匹配度 0.12 +[序号1319]【法术详述:阿迦纳萨喷火术】 匹配度 0.12 +[序号507]【法术详述:智能堡垒/智力堡垒/智慧堡垒/智能壁垒/心智堡垒/心智壁垒】 匹配度 0.12 +[序号2514]【法术详述:水下呼吸/水中呼吸】 匹配度 0.11 +[序号2212]【法术详述:原力法阵】 匹配度 0.11 +[序号1403]【法术详述:众星冠冕/星辰冠冕/星之冠冕】 匹配度 0.11 +[序号2243]【法术详述:造水/枯水术/造水术/枯水术】 匹配度 0.11 +[序号2176]【法术详述:秘法眼】 匹配度 0.11 + +(本次搜索由全文搜索完成)

    因为多个文本匹配度相近,因此没有列出最佳匹配条目的正文内容。用这条指令可以查看:

    示例

    木落
    .find 2212
    头像
    头像
    海豹核心
    词条: 法术详述:原力法阵 +原力法阵 Circle of Power +圣武士 +5环 防护 +施法时间:1动作 +施法距离:自身(30尺半径) +法术成分:V +持续时间:专注,至多10分钟 +你身上发出神圣能量并以扭曲散溢的魔法能量构成一个半径30尺的球状力场。法术持续时间内力场将以你为中心随你移动。力场范围内的友方生物(包括你自己)为对抗法术或其他魔法效应而进行的豁免检定具有优势。此外,受本法术效应影响的生物在对抗豁免成功则伤害减半的法术或魔法效应时,若成功则不受伤害。

    这么好用,那代价是什么呢?

    更多的内存占用和变慢的启动速度。

    大致来说,每 1 MB 帮助文本会产生约 15 MB 额外内存占用

    快速文档查找

    示例

    木落
    .find 测试词条
    头像
    头像
    海豹核心
    最优先结果: +词条: 测试:测试词条 +他在命运的沉浮中随波逐流, 扮演着受害与加害者的双重角色 + +全部结果: +[序号2]【测试:测试词条】 匹配度 67.00 + +(本次搜索由快速文档查找完成)

    致谢

    CoC《怪物之锤》的整理者为:蜜瓜包October

    CoC 魔法大典的整理者为:魔骨NULLDr.Amber

    D&D 系列资料的整理者主要为 DicePP 项目组成员,包括Farevell梨子花作噫邪恶惠惠赵小安等。

    这些资料的原始出处和译者很多已经不可考,此处无法一一列出,甚为遗憾。

    也在此感谢一代又一代无名作者和译者做出的工作。

    .help 帮助指令

    .help [<词条名>] 显示指定词条的帮助文档。

    .help reload 重新装载帮助文档。仅 Master 可用。

    .set 设定默认骰子面数 / 设定游戏系统

    .set info 查看当前默认骰子面数。如果从未设置过,将显示为「0」。

    .set dnd 设置群内骰子面数为 20,并自动开启 D&D 扩展。

    .set (coc|coc7) 设置群内骰子面数为 100,并自动开启 CoC 扩展。

    .set <面数> 设定群内默认骰子面数。

    .set <面数> --my 设定个人专属默认骰子面数。

    .set clr 清除群内骰子面数设置。

    .set clr --my 清除个人骰子面数设置。

    如果通过「规则模板」机制添加了自设规则,并有相关配置,可以使用 .set <规则名> 切换为对应规则的默认骰面数。你可以通过 .set help 来查看当前可用的关键字。

    示例

    木落
    .set 20
    头像
    头像
    海豹核心
    设定默认骰子面数为 20
    木落
    .set coc
    头像
    头像
    海豹核心
    设定群组默认骰子面数为 100 +提示:已切换至100面骰,并自动开启coc7扩展
    木落
    .set dnd
    头像
    头像
    海豹核心
    设定群组默认骰子面数为 20 +提示:已切换至20面骰,并自动开启dnd5e扩展。
    木落
    .set info
    头像
    头像
    海豹核心
    个人骰子面数: 0 +群组骰子面数: 20 +当前骰子面数: 20

    .botlist 机器人列表

    这个指令用于标记同一群聊内的其他机器人。

    当一个账号被标记后,对于与 TA 相关的消息,海豹核心会按以下规则进行忽略:

    1. 如果 TA 被 AT,忽略;
    2. 如果是 TA 发出的消息,忽略。

    这可避免机器人互相响应造成的危险的循环。

    .botlist add @A @B @C 标记 A、B、C 为机器人。

    .botlist add @A @B --s 同上,不过骰子不会做出回复。

    .botlist del @A @B @C 去除 A、B、C 的标记。

    .botlist list 查看当前标记列表。

    + + + + \ No newline at end of file diff --git a/use/deck_and_reply.html b/use/deck_and_reply.html new file mode 100644 index 000000000..84f534320 --- /dev/null +++ b/use/deck_and_reply.html @@ -0,0 +1,80 @@ + + + + + + 牌堆 自定义回复 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Skip to content

    牌堆 自定义回复

    本节内容

    本节将展示牌堆和自定义回复相关的指令,请善用侧边栏和搜索,按需阅读文档。

    提示:如何自定义?

    牌堆和自定义回复都是海豹提供的扩展性功能,此处只展示相关控制指令,如果你想知道如何进行自定义,请转到 进阶介绍

    .draw 抽牌 / 管理牌堆

    关于牌堆功能的一般性介绍,请参阅 配置 - 牌堆

    .draw help 显示帮助信息。

    信息查询

    .draw list 列出当前装载的牌堆列表。

    .draw keys <牌堆> 查看特定牌堆可抽取的牌组列表。

    .draw search <牌组名称> 模糊搜索指定牌组。

    .draw desc <牌组名称> 查看牌组所属牌堆的详细信息。

    示例

    木落
    .draw list
    头像
    头像
    海豹核心
    载入并开启的牌堆: +- GRE单词 格式: Dice! 作者:于言诺 版本:1.0.1 牌组数量: 1 +- IELTS单词 格式: Dice! 作者:于言诺 版本:1.0.1 牌组数量: 1 +- TOEFL单词 格式: Dice! 作者:于言诺 版本:1.0.1 牌组数量: 1 +- SealDice内置牌堆 格式: Dice! 作者:<因过长略去> 版本:1.2.0 牌组数量: 8
    木落
    .draw keys GRE单词
    头像
    头像
    海豹核心
    牌组关键字列表: +GRE单词
    木落
    .draw search 单词
    头像
    头像
    海豹核心
    找到以下牌组: +- GRE单词 +- TOEFL单词 +- IELTS单词
    木落
    .draw desc GRE单词
    头像
    头像
    海豹核心
    牌堆信息: +牌堆: GRE单词 +格式: Dice! +作者: 于言诺 +版本: 1.0.1 +牌组数量: 1 +时间: 2022/5/23 +更新时间: 2022/8/16 +牌组: GRE单词

    需要说明,在以上的例子中,「GRE单词」同时是牌堆名与牌组名。在 .draw keys GRE单词 中,它作为牌堆名出现;在 .draw desc GRE单词 中,它作为牌组名出现。

    .draw keys 列出所有可抽取的牌组列表。

    注意:谨慎使用

    这一指令会将所有可抽取的牌组列出,在牌组较多时造成刷屏。

    抽牌

    .draw <牌组名称> (<数量>#) 在指定牌组抽指定数量的牌,默认为抽 1 张。

    示例

    木落
    .draw GRE单词 3#
    头像
    头像
    海豹核心
    <木落>抽出了: +GRE3178 +invoice n. +发票, 发货单, 货物。
    头像
    海豹核心
    <木落>抽出了: +GRE4889 +rig n. +索具装备, 钻探设备, 钻探平台, 钻塔。
    头像
    海豹核心
    <木落>抽出了: +GRE5421 +austerity n. +严峻, 严厉, 朴素, 节俭, 苦行。

    当指定的牌组名称不存在时,将会进行模糊搜索,效果与 draw search 类似。

    示例

    木落
    .draw 单词
    头像
    头像
    海豹核心
    找不到这个牌组,但发现一些相似的: +- GRE单词 +- TOEFL单词 +- IELTS单词

    自定义回复引用牌堆

    对于想要在自定义文案或自定义回复中引用牌堆的骰主,可使用 #{DRAW-关键词} 进行调用。

    牌堆管理

    .draw reload 重新加载牌堆,仅限 Master 使用。

    .reply 管理自定义回复

    关于自定义回复功能的一般性介绍,请参阅 配置 - 自定义回复

    .reply (on|off) 开启、关闭本群的自定义回复功能。

    以上指令等价于 .ext reply (on|off)

    + + + + \ No newline at end of file diff --git a/use/dnd5e.html b/use/dnd5e.html new file mode 100644 index 000000000..32e5d4611 --- /dev/null +++ b/use/dnd5e.html @@ -0,0 +1,111 @@ + + + + + + 龙与地下城 5E | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Skip to content

    龙与地下城 5E

    本节内容

    本节将展示 D&D 5E 玩家所需指令,请善用侧边栏和搜索,按需阅读文档。

    我们假定你已对 D&D 规则有适当了解,本节只涉及如何使用海豹核心完成规则中指定的操作。

    龙与地下城

    「龙与地下城」(Dungeons & Dragons, D&D, DnD)是一款剑与魔法奇幻背景的叙事性角色扮演游戏。与孩提时代的过家家扮演游戏相似,D&D 依靠的是玩家无穷的想象力。

    你所需要做的,即是描述场景如暴风骤雨里,夜空下的某座高耸古堡。然后想象奇幻世界中的冒险者们会如何迎接即将到来的挑战。

    .dnd / .dndx 生成随机属性(制卡)

    .dnd [<数量>] 随机生成指定组数的待分配属性,如果省略数量将生成 1 组。

    .dndx [<数量>] 随机生成带属性名的结果。

    示例

    木落
    .dnd 5
    头像
    头像
    海豹核心
    <木落>的DnD5e人物作成(自由分配模式): +[16, 16, 14, 11, 10, 9] = 76 +[16, 15, 15, 12, 9, 9] = 76 +[16, 15, 14, 13, 13, 12] = 83 +[18, 17, 15, 14, 13, 8] = 85 +[15, 14, 13, 13, 10, 8] = 73 +获取带属性名的预设请用.dndx
    木落
    .dndx 5
    头像
    头像
    海豹核心
    <木落>的DnD5e人物作成(预设模式): +力量:16 体质:9 敏捷:14 智力:10 感知:13 魅力:10 共计:72 +力量:13 体质:12 敏捷:8 智力:8 感知:14 魅力:9 共计:64 +力量:16 体质:10 敏捷:11 智力:14 感知:12 魅力:10 共计:73 +力量:9 体质:17 敏捷:15 智力:9 感知:10 魅力:13 共计:73 +力量:12 体质:6 敏捷:8 智力:13 感知:10 魅力:8 共计:57 +自由分配模式请用.dnd

    .ri 先攻设置

    .ri <先攻值> [<角色名>] 为指定角色设定先攻值。如果省略角色名则默认为当前角色,以下的角色名部分相同。

    其中,先攻值部分支持以下四种写法

    1. .ri 12 固定值 12;
    2. .ri +2 掷骰 D20+2;
    3. .ri =D20+3 掷骰 D20+3;
    4. .ri +1D8 掷骰 D20+1D8。

    .ri <单项>, <单项>, ... 批量设定多个角色的先攻值,每个单项都是 <先攻值> <角色名> 形式。

    示例

    木落
    .ri +2
    头像
    头像
    海豹核心
    <木落>对先攻点数设置如下: +1. 木落: 15[1d20=15] + 2=17
    木落
    .ri +3 狗头人1
    头像
    头像
    海豹核心
    <木落>对先攻点数设置如下: +1. 狗头人1: 15[1d20=15] + 3=18
    木落
    .ri =D20+2 狗头人1
    头像
    头像
    海豹核心
    <木落>对先攻点数设置如下: +1. 狗头人1: 13
    木落
    .ri 30 狗头人1
    头像
    头像
    海豹核心
    <木落>对先攻点数设置如下: +1. 狗头人1: 30
    木落
    .ri 优势+2 狗头人2
    头像
    头像
    海豹核心
    <木落>对先攻点数设置如下: +1. 狗头人2: 13[{13 | 11 }] + 2=15
    木落
    .ri +2 狗头人1, 3 狗头人2, =d30 狗头人3, +3
    头像
    头像
    海豹核心
    <木落>对先攻点数设置如下: +1. 木落: 19[1d20=19] + 3=22 +2. 狗头人3: 17 +3. 狗头人1: 15[1d20=15] + 2=17 +4. 狗头人2: 3

    .init 先攻列表

    .init 查看先攻列表。

    .init del <单位1> <单位2> ... 从先攻列表中删除指定单位。

    .init set <单位名称> <先攻表达式> 为指定单位设定先攻值。

    .init clr 清除先攻列表。

    .init end 结束当前的回合,并开始下一回合;如果轮到玩家行动,会 at 将要行动的玩家。

    .init help 显示帮助。

    示例

    已经设置了先攻列表的情况

    木落
    .init
    头像
    头像
    海豹核心
    当前先攻列表为: +1. 木落: 22 +2. 狗头人3: 17 +3. 狗头人1: 17 +4. 狗头人2: 3 +当前回合:木落
    木落
    .init del 狗头人2
    头像
    头像
    海豹核心
    <木落>将以下单位从先攻列表中移除: +1. 狗头人2
    木落
    .init set 狗头人3 16
    头像
    头像
    海豹核心
    <木落>已设置 狗头人3 的先攻点为16 16
    木落
    .init end
    头像
    头像
    海豹核心
    【木落】戏份结束了,下面该【狗头人1】出场了!

    .st 操作角色卡

    .st help 获取帮助信息

    列出属性

    .st show 列出角色卡所有属性。

    .st show <属性1> <属性2> ... 列出指定的属性数值。

    .st show <数值> 列出高于指定数值的属性。

    .st export 导出属性值和法术位。

    删除属性

    .st (clr|clear) 删除所有属性数值和法术位。

    .st del <属性1> <属性2> ... 删除指定属性。

    更新属性值

    .st 模板 获取角色卡录入模板。

    .st <属性>:<值> 设置指定属性,技能加值会自动计算。

    .st <属性>=<值> 与前一用法相同,可避免中英文冒号的识别问题。

    .st <属性>±<表达式> 将指定属性增加或减去表达式的计算结果。表达式中可以包含骰点。如 .st 生命+1d4

    .st hp-1d6 --over 前一用法的特殊情况,不计算临时生命扣血。

    示例

    木落
    .st 模板
    头像
    头像
    海豹核心
    人物卡模板(第二行文本): +.dst 力量:10 体质:10 敏捷:10 智力:10 感知:10 魅力:10 hp:10 hpmax: 10 熟练:2 运动:0 特技:0 巧手:0 隐匿:0 调查:0 奥秘:0 历史:0 自然:0 宗教:0 察觉:0 洞悉:0 驯养:0 医疗:0 生存:0 说服:0 欺诈:0 威吓:0 表演:0 +注意: 技能只填写修正值即可,属性调整值会自动计算。熟练写为“运动*:0”
    木落
    .st 力量:12 体质:10 敏捷:10 智力:10 感知:10 魅力:10 hp:10 hpmax: 10 熟练:2 运动*:3 特技:1 巧手:0 隐匿:0 调查:0 奥秘:0 历史:0 自然:0 宗教:0 察觉:0 洞悉:0 驯养:0 医疗:0 生存:0 说服:0 欺诈:0 威吓:0 表演:0
    头像
    头像
    海豹核心
    <木落>的dnd5e人物属性设置如下: +读入: 力量:12, 体质:10, 敏捷:10, 智力:10, 感知:10, 魅力:10, hp:10, hpmax:10, 熟练:2, 运动:3[技能, 熟练], 特技:1[技能], 巧手:0[技能], 隐匿:0[技能], 调查:0[技能], 奥秘:0[技能], 历史:0[技能], 自然:0[技能], 宗教:0[技能], 察觉:0[技能], 洞悉:0[技能], 驯养:0[技能], 医疗:0[技能], 生存:0[技能], 说服:0[技能], 欺诈:0[技能], 威吓:0[技能], 表演:0[技能]
    木落
    .st show
    头像
    头像
    海豹核心
    <木落>的个人属性为: +力量: 12 敏捷: 10 体质: 10 智力: 10 +感知: 10 魅力: 10 hp: 10 hpmax: 10 +EXP: 0 熟练: 2 特技: 1[基础值1] 运动: 6[基础值3] +(下略)
    木落
    .st show 力量 运动 熟练
    头像
    头像
    海豹核心
    <木落>的个人属性为: +力量: 12 熟练: 2 运动: 6[基础值3]
    木落
    .st 力量 + 2
    头像
    头像
    海豹核心
    人物属性设置如下: +修改: 力量(12 ➯ 14)

    属性修改后,属性调整值会自动变更。不用再行关注。

    对生命值的特殊支持

    • 当存在临时生命 (buff 血量),自动优先消耗。若临时生命不足以抵挡伤害,剩余会扣减血量;
    • 当生命值归零,若伤害大于等于血量上限,判定人物死亡;
    • 当生命值归零,若伤害小于血量上限,人物昏迷;
    • 当人物已经昏迷,不足致死的伤害自动折算为死亡豁免失败。
    木落
    .st hp-3 hp-3 hp-3
    头像
    头像
    海豹核心
    <木落>的dnd5e人物属性设置如下: +修改: hp(2 ➯ 0), hp(0 ➯ 0), hp(0 ➯ 0) +<木落>遭受了1点过量伤害,生命值降至0,陷入了昏迷! +<木落>在昏迷状态下遭受了3点过量伤害,死亡豁免失败+1! +<木落>在昏迷状态下遭受了3点过量伤害,死亡豁免失败+1!

    退游小技巧,黑暗录卡:

    text
    .st 力量:4d6k3 体质:4d6k3 敏捷:4d6k3 智力:4d6k3 感知:4d6k3 魅力:4d6k3 hp:10 hpmax: 10 熟练:2 运动:0 特技:0 巧手:0 隐匿:0 调查:0 奥秘:0 历史:0 自然:0 宗教:0 察觉:0 洞悉:0 驯养:0 医疗:0 生存:0 说服:0 欺诈:0 威吓:0 表演:0

    代骰

    以上功能均可以通过附加 @其他人 来操作对方的属性值。

    .rc 检定

    .rc <属性> 进行检定。

    .rc <属性>豁免 进行豁免检定。

    .rc <表达式> 使用可带调整值的表达式进行检定,如 力量+3

    .rc (优势|劣势) <表达式> 进行优势或劣势检定。

    示例

    木落
    .rc 运动
    头像
    头像
    海豹核心
    <木落>的“运动”检定结果为: +8[1d20=8] + 6[运动=6] = 14
    木落
    .rc 优势 力量+4
    头像
    头像
    海豹核心
    <木落>的“力量+4”检定结果为: +17[{17 | 11 }] + 12[力量=12] + 4 = 33
    木落
    .rc 劣势 力量+4 推一下试试
    头像
    头像
    海豹核心
    <木落>的“推一下试试”检定结果为: +17[{17 | 18 }] + 12[力量=12] + 4 = 33

    代骰

    以上功能均可以通过附加 @其他人 来使用对方的技能进行检定。

    奇妙运用

    你可以通过如下方式记录武器的熟练项。

    示例

    木落
    .st 长剑=4
    头像
    头像
    海豹核心
    <木落>的属性录入完成,本次录入了1条数据。
    木落
    .rc 长剑
    头像
    头像
    海豹核心
    <木落>的“长剑”检定(dnd5e)结果为: +16[1d20=16] + 4[长剑=4] = 20

    .buff 临时属性

    .buff help 显示帮助。

    .buff 展示当前 buff。

    .buff clr 清除 buff。

    .buff del <属性1> <属性2> ... 删除指定属性的 buff。

    .buff <属性>:<值> 为指定属性设定 buff。

    .buff <属性>±<表达式> 修改指定属性的 buff。

    用于设置临时属性,例如虚假生命:

    示例

    木落
    .st hp:10
    头像
    头像
    海豹核心
    <木落>的dnd5e人物属性设置如下: +读入: hp:10
    木落
    .buff hp : 1d4+4
    头像
    头像
    海豹核心
    <木落>的dnd5e人物Buff属性设置如下: +读入: hp:7
    木落
    .st show hp
    头像
    头像
    海豹核心
    <木落>的个人属性为: +hp:17[10]

    也可以用来设置其他属性:

    示例

    木落
    .st 力量:10 运动:0
    头像
    头像
    海豹核心
    <木落>的dnd5e人物属性设置如下: +读入: 力量:10, 运动:0[技能]
    木落
    .buff 力量:6
    头像
    头像
    海豹核心
    <木落>的dnd5e人物Buff属性设置如下: +读入: 力量:6
    木落
    .st show 力量 运动
    头像
    头像
    海豹核心
    <木落>的个人属性为: +力量:16[10] 运动:3[0]

    临时的技能熟练(装备或法术效果):

    示例

    木落
    .st 力量:10 运动:0 熟练:3
    头像
    头像
    海豹核心
    <木落>的dnd5e人物属性设置如下: +读入: 力量:10, 运动:0[技能], 熟练:3
    木落
    .buff 运动*:0
    头像
    头像
    海豹核心
    <木落>的dnd5e人物Buff属性设置如下: +读入: 运动:0[技能, 熟练*]
    木落
    .st show 力量 运动
    头像
    头像
    海豹核心
    <木落>的个人属性为: +力量:16[10] 运动:6[0]

    删除和清空

    示例

    木落
    .buff del hp
    头像
    头像
    海豹核心
    <木落>的如下buff属性被成功删除:hp,失败0项
    木落
    .buff clr
    头像
    头像
    海豹核心
    <木落>的BUFF数据已经清除,共计0条

    代骰

    以上功能均可以通过附加 @其他人 来操作对方的 buff。

    .ss 法术位 (spell slots)

    .ss 查看当前法术位状况。

    .ss init 4 3 2 设置 1 2 3 环的法术位上限,以此类推,上不封顶。

    .ss set 2环 4 单独设置某一环的法术位上限,可用逗号分隔地连写多组。

    .ss clr 清除法术位设置。

    .ss rest 恢复所有法术位 (不回复 hp)。

    .ss 3环 +1 增加一个 3 环法术位(不会超过上限)。

    .ss lv3 +1 同上,另一种写法。

    .ss 3环 -1 消耗一个 3 环法术位。

    示例

    木落
    .ss init 3 4 5
    头像
    头像
    海豹核心
    为<木落>设置法术位: 1环3个, 2环4个, 3环5个
    木落
    .ss 1环 -1
    头像
    头像
    海豹核心
    <木落>的1环法术位消耗至2个,上限3个
    木落
    .ss
    头像
    头像
    海豹核心
    <木落>的法术位状况: 1环:2/3, 2环:4/4, 3环:5/5
    木落
    .ss rest
    头像
    头像
    海豹核心
    <木落>的法术位已经完全恢复
    木落
    .ss set 4环 3
    头像
    头像
    海豹核心
    为<木落>设置法术位: 4环3个

    代骰

    以上功能均可以通过附加 @其他人 来操作对方的法术位。

    .cast 使用法术位

    .cast <环数> [<消耗数量>] 消耗指定数量的指定法术位,省略消耗数量时,消耗 1 个。

    示例

    木落
    .cast 2
    头像
    头像
    海豹核心
    <木落>的2环法术位消耗至3个,上限4个

    代骰

    以上功能均可以通过附加 @其他人 来消耗对方的法术位。

    .longrest / .长休

    .longrest 恢复生命值和法术位。当前角色需已设定最大生命值且当前生命值大于 0。

    示例

    木落
    .长休
    头像
    头像
    海豹核心
    <木落>的长休: hp得到了恢复,现为12 法术位得到了恢复
    木落
    .长休
    头像
    头像
    海豹核心
    <木落>的长休: 没有设置hpmax,无法回复hp

    代骰

    以上功能均可以通过附加 @其他人 来令对方进行长休。

    .ds / .死亡豁免

    .ds help 查看帮助。

    .ds 进行一次死亡豁免检定,此时角色 hp 必须为 0。

    .ds +1d4 检定时添加 1d4 的加值。

    .ds (成功|失败)±<变化值> 死亡豁免的成功或失败数量增加或减少指定值。成功和失败可分别简写为 sf

    .ds stat 查看当前死亡豁免情况。

    st 指令对 hp 的操作也会自动触发死亡豁免。

    示例

    木落
    .st hp:3 hpmax:12
    头像
    头像
    海豹核心
    <木落>的dnd5e人物属性设置如下: +读入: hp:3, hpmax:12
    木落
    .st hp-10
    头像
    头像
    海豹核心
    <木落>的dnd5e人物属性设置如下: +修改: hp(3 ➯ 0) +<木落>遭受了7点过量伤害,生命值降至0,陷入了昏迷!

    昏迷后被攻击:

    头像
    海豹核心
    <木落>的dnd5e人物属性设置如下: +修改: hp(0 ➯ 0) +<木落>在昏迷状态下遭受了1点过量伤害,死亡豁免失败+1!

    死亡:

    头像
    海豹核心
    <木落>的死亡豁免检定: [1d20=3]=3 有些不妙!死亡豁免失败+1 +你获得了3次死亡豁免检定失败,不幸去世了!

    医学奇迹:

    头像
    海豹核心
    <木落>的死亡豁免检定: [1d20=20]=20 你觉得你还可以抢救一下!HP回复1点!

    代骰

    以上功能均可以通过附加 @其他人 来令对方进行死亡豁免。

    + + + + \ No newline at end of file diff --git a/use/faq.html b/use/faq.html new file mode 100644 index 000000000..bc1d5165b --- /dev/null +++ b/use/faq.html @@ -0,0 +1,63 @@ + + + + + + 常见问题 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Skip to content

    常见问题

    本节内容

    本节将提供一些常见问题的解决方式,方便快速解决。如果你的问题并没有在这里得到答案,欢迎加入官方群寻求帮助。

    为啥海豹不理我?

    可能性一:你尝试私聊海豹核心,但并非是海豹账号的好友;

    可能性二:如果是 QQ 平台,骰子账号遭到了风控;

    可能性三:你使用的指令/扩展被关闭了。例如当 coc7 扩展关闭时,sc 等指令是不会回应的;这时需要执行 .ext coc7 on 开启对应扩展。

    如果你是骰主,可以在 WebUI 查看日志,以确定海豹核心是否收到了指令、是否正确做出了响应。

    如果你无法理解发生了什么,或者需要更多帮助,欢迎加入官方答疑群。

    可以关闭暗骰吗?

    海豹核心不支持关闭暗骰。但是,海豹不会与非好友帐号私聊,所以不必担心暗骰会影响帐号安全。

    退群指令?

    以下指令均可:

    text
    .bot bye
    +.bot exit
    +.dismiss

    骰主也可以 WebUI 的群组管理中操作退群。

    登录服务器开浏览器使用好麻烦!能远程直接访问 WebUI 吗?

    对于大部分有公网 IP 的服务器都可以,但是需要你进行一些配置。

    1. 在 WebUI 修改配置,让海豹 WebUI 运行在公开端口而不是本地端口;

    2. 在基本设置中设置 WebUI 访问密码;

    3. 修改你服务器的防火墙(根据服务提供商,也可能称为「安全组」等),以允许远程 TCP 访问海豹端口。

      1. 如果你使用的是 Oracle Linux 或类似服务器,还需要在服务器系统中放行端口:

        bash
        sudo iptables -I INPUT -s 0.0.0.0/0 -p tcp --dport 3211  -j ACCEPT
      2. 如果你使用 Windows 服务器,需要关闭系统内置防火墙或设置端口放行。

    4. 使用 http://<服务器IP地址>:3211 访问 WebUI。

    在服务器上登录时说「需要在同一 WIFI 下扫码」怎么办

    首先确认使用安卓协议,并且输入密码登录(不要使用无密码的扫码登录,现在已经很不好用了)。

    有几种办法:

    1. [首选] 让手机跟服务器真的处于同一个网络

    1. 配置防火墙

      配置你的服务器,允许外部访问 13325 端口。

      补充

      以腾讯云轻量服务器为例,点入「服务器」,再点击卡片。

      服务器配置

      进入后点击「防火墙」,随后「添加规则」,这里选择 TCP 协议,端口输入 13325(演示图片中为 13326),点击确定。

      放通防火墙

      搞定,其他服务商大同小异。

      特别的,如果是 Windows Server 2012R2 及以上系统,请再额外关闭系统防火墙或设置规则放行。具体做法搜索关键字 Windows server 关闭防火墙

    2. 服务器端运行工具

      在海豹骰中集成了 socks 工具,点击图中「辅助工具 -13325 端口」按钮。

      登录弹窗

      稍等片刻后,出现如下窗口。

      辅助工具弹窗

      点击 OK。

      运行起来之后,显示一串这样的文本:

      text
      http/socks5简易工具©sealdice.com
      +将在服务器上开启一个 socks5 服务,端口 13325,默认持续时长为 25 分钟
      +将在服务器上开启一个 HTTP 代理服务,端口 13326,默认持续时长为 25 分钟
      +
      +可能的公网 IP:  12.34.56.78
      +请于服务器管理面板放行你要用的端口 (一般为 13325 即 socks),协议 TCP
      +如果是 Windows Server 2012R2 及以上系统,请再额外关闭系统防火墙或设置规则放行
      +
      +正在启动服务:0.0.0.0:13326
      +正在启动服务:0.0.0.0:13325
    3. 手机端连接

    你需要一个代理软件,比如 postern,如果可能的话你可以从 Google Play 下载,你也可以在用户群里找到它。

    然后在你将要扫码的手机上启动它,弹出的窗口都点击确定

    点击默认存在在的代理,将他删除,然后点击添加代理服务器,按照下图填写。

    postern 配置代理服务器

    保存后点击左上角 Postern 的图标,点击配置规则,类似前文删除代理,删除掉默认的规则 1 和规则 2,然后点击添加规则。如图选择匹配类型和动作,之后会自动填入代理/代理组。

    postern 配置规则

    保存后重启软件。

    现在就配置完成了。手机上打开浏览器进入 https://ip138.com/,如果显示的 IP 地址和服务器一样,那么配置正确。

    如果打不开网页或提示「当前 WiFi 不能访问网络」,可能是防火墙没配置好。如果 IP 不一样,可能是代理没配置上。

    如果你使用 iOS 手机,可以使用 Potatso 替代 Postern。

    现在可以进入海豹 WebUI,重新进行登录流程了。如果以后再出类似情况,直接重复步骤 2、3 即可。

    2. 本机上完成扫码登录,然后将登录过的配置文件覆盖到服务器上

    具体目录是 data/default/extra/go-cqhttp-qq12345

    当然如果你没做过自定义配置,可以整个复制。

    使用密码登录,重试 3 次左右,有概率直接上号

    AT 其他骰子做检定的时候,海豹也会回应,怎么办

    使用这个指令将其他骰子进行标记:

    text
    .botlist add @骰子A @骰子B

    会有如下效果:

    1. 当有人@该骰发指令,海豹不会做出回应
    2. 该骰发出的指令和消息,海豹不会回应,这可以有效避免关键词触发的无限复读

    为啥好像反应慢一拍

    首先确定是否为网络问题。如果你是骰主,可在后台的日志中检查收到指令的实际时间和发出响应的实际时间。

    对于 QQ 平台,发送消息会有随机延迟,这是为了防止引起企鹅的警惕。随机延迟间隔 0.4 - 0.9 秒,可以在设置中调整。

    我希望在我的骰子进群或者被踢出时通知我

    在 WebUI 的「综合设置 - 基本设置」页面。在「消息通知列表」中可以添加消息通知的接收者。支持个人、群聊、电子邮箱作为接收者。

    在海豹核心发生 收到加群邀请、收到好友邀请、进入群组、被踢出群、被禁言、自动激活、指令退群 时,会给消息通知列表的各个接收者发送通知。

    支持 QQ 频道吗?

    支持,默认不记录频道消息,也不自动开启。邀请入频道后 @骰子 .bot on 即可开启。

    在 WebUI 的「综合设置 - 基本设置」可以进行配置。特别的,骰子不会自动同意频道邀请,需要骰主上号同意。

    怎么同时运行多个海豹?

    Windows 系统

    在 Windows 系统运行两个是很简单的:

    我们假设你的第一只海豹已经配置好了,当前正在运行,端口为默认的 3211。

    现在,你需要使用安装包,在另一个目录再解压一份海豹核心。

    进入新的目录,像运行第一只海豹一样直接双击执行。它会自动检测端口,因为 3211 端口已经被占用,会弹窗询问是否更换端口,直接点是就可以了。

    如果你想在 Windows 系统指定端口,需要一点操作

    在每一个你需要指定端口的海豹核心目录下创建一个 启动.cmd,用文本编辑器编辑,内容为:

    bash
    sealdice-core --address=0.0.0.0:<端口号> -m

    其中的 <端口号> 替换成你希望指定的端口号。然后双击 启动.cmd 运行。

    你只需在第一次启动时这样做,这个端口号会被写入配置中供后续启动使用。

    除 Android 外的其他系统

    通常来说,你在这些系统上是通过命令行(终端)来启动海豹核心。

    将安装包解压到你为新海豹准备的目录,在初次启动海豹时,使用以下命令:

    bash
    ./sealdice-core --address=127.0.0.1:<端口号>

    将在你系统上,占用指定的端口号,启动一个不向互联网公开的新海豹核心。

    我机器上启动非常慢,而且托盘点不出来右键菜单?

    请确认你的硬盘状态是否还好,一般来说是磁盘 I/O 性能过低导致的,常见于软路由设备。

    这种情况可以删除 data/helpdoc/ 目录来提速,代价是无法使用查询指令。

    能在手机上搭建吗?

    手机海豹已经公测啦!详见 搭建 章节。

    我是 Master,怎么帮人取出 Log?

    详见 这一章节

    骰主具有很大的权限,所以还请各位选择自己信任的骰主,也请各位骰主谨慎对待大家的信任!

    我忘了 WebUI 密码

    首先彻底关闭海豹。

    用文本编辑器打开 dice/dice.yaml,删除 uiPasswordHash 一行,保存。

    重新启动海豹。

    + + + + \ No newline at end of file diff --git a/use/fun.html b/use/fun.html new file mode 100644 index 000000000..43acb205c --- /dev/null +++ b/use/fun.html @@ -0,0 +1,65 @@ + + + + + + 功能 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Skip to content

    功能

    本节内容

    本节将展示海豹的「功能」扩展提供的指令,主要为快捷指令、ping、welcome 等额外指令,同时也包括今日人品、智能鸽子等娱乐相关指令。

    此外,小众规则指令暂时也放在本扩展中。请善用侧边栏和搜索,按需阅读文档。

    .jrrp 今日人品

    .jrrp

    今日人品是一个每个用户独立、每天刷新的 D100 随机数。你可通过 自定义文案 编写对它的解读。

    .gugu 人工智能鸽子

    .gugu.咕咕

    示例

    木落
    .gugu
    头像
    头像
    海豹核心
    🕊️:今天发版本,领导说发不完不让走

    .gugu 来源 查看鸽子背后的故事。

    示例

    木落
    .gugu 来源
    头像
    头像
    海豹核心
    🕊️: 前往了一个以前捕鲸的小岛度假~这里人很亲切!但是吃了这里的鱼肉料理之后有点晕晕的诶...想到前几天<木落>的短信,还是别追究他为什么不在了。 + ——鹊鹊结合实际经历创作

    .jsr 不重复骰点

    .jsr <次数># <面数> [<原因>] 投掷指定面数的骰子指定次数,使每一次的结果都不相同。

    示例

    木落
    .jsr 5# 100
    头像
    头像
    海豹核心
    <木落>掷骰5次: +D100=6 +D100=71 +D100=53 +D100=31 +D100=2

    以这种方式骰出的点数会自动成为一个骰池,供 drl 指令使用。

    .drl 骰池抽取

    骰池(Draw Lot)是一组来自相同面数骰子、出目互不相同的骰点,支持每次抽取一个。骰池是每个群组共用的。

    .drl new <个数># <面数> 创建一个指定数量、指定面数的骰池。

    .drl / .drlh 从当前骰池抽取一个数值,后者将结果私聊发送。

    示例

    木落
    .drl
    头像
    头像
    海豹核心
    当前群组无骰池,请使用.drl new创建一个。
    木落
    .drl new 10# 1000
    头像
    头像
    海豹核心
    创建骰池成功,骰子面数1000,可抽取10次。
    木落
    .drl
    头像
    头像
    海豹核心
    <木落>掷出了 D1000=568
    木落
    .drl # 第 10 次
    头像
    头像
    海豹核心
    <木落>掷出了 D1000=539 +骰池已经抽空,现在关闭。

    .text 文本模板测试

    .text <文本模板>

    骰子会将模板内容解析后返回,其中含有的表达式和变量都将被求值。

    示例

    木落
    .text 看看手气 {1d16}
    头像
    头像
    海豹核心
    看看手气 2

    .send 向骰主发送消息 / 回复消息

    v1.4.6 起,海豹将此指令迁移至「功能」扩展。

    .send <消息内容>

    拥有 Master 权限的用户将看到消息内容和发送者的 IM 账号,如果是来自群组,也能看到群号。

    示例

    头像
    Szz
    .send 骰主你好!

    .send to <对方ID> <消息内容>

    Master 可以通过这个指令进行回复。目标 ID 可以是群号,也可以是个人的 IM 账号。将收到的消息中的对应 ID 复制到此处即可。

    示例

    头像
    海豹核心
    一条来自群组<群名>(群号),作者<Szz>(用户 IM 账号)的留言: +骰主你好!
    木落
    .send to <群号> 我收到了!
    头像

    .welcome 新人入群欢迎

    v1.4.6 起,海豹将此指令迁移至「功能」扩展。

    .welcome (on|off) 开启、关闭功能

    .welcome show 查看当前欢迎语

    .welcome set <欢迎语> 设定欢迎语

    .ping 指令响应测试 v1.4.2

    v1.4.2 版本起,海豹支持 .ping 指令,用于指示海豹回复你一条消息。

    v1.4.6 起,海豹将此指令迁移至「功能」扩展。

    .ping 海豹回复你一条消息。

    为什么要有这个指令?

    对于绝大多数情况,这个指令似乎都没有实际作用。事实上,这个指令的存在是为了解决 QQ 官方 Bot 在频道私聊中的以下问题:

    如果你向机器人连续发送 3 条频道私聊消息而没有收到回复,在机器人回复你之前,你将无法继续发送频道私聊消息。 而机器人并不会主动向你发送消息,这就造成了死锁。

    此时,你可以在频道中向海豹核心发送 .ping 指令,海豹核心会在频道私聊中回复你,以打破死锁。

    木落
    我发出第一条消息。
    头像
    木落
    我发出第二条消息。
    头像
    木落
    我发出第三条消息,机器人怎么还不理我?
    头像

    提示

    如果出现类似场景,可以发现 QQ 会提示你已经禁止再向骰子发送私聊消息,要求在骰子回应后才能再次发送。

    但用户已经无法再通过私聊发送正确的指令,触发骰子的回应了。

    此时,用户可以去频道公屏发送一个 .ping 指令。

    头像
    海豹核心
    pong!这里是海豹核心!
    木落
    好耶,我又可以发私信给骰子了!
    头像

    .alias 定义快捷指令 & .& 使用快捷指令 v1.4.3

    v1.4.3 版本起,海豹支持使用.alias 定义快捷指令。同时使用 .&/.a <快捷指令> 触发快捷指令。

    v1.4.6 起,海豹将此指令迁移至「功能」扩展。

    .alias <别名> <指令>.&<别名> 定义为指定指令的快捷触发方式。在群聊中默认定义群快捷指令。

    .alias --my <别名> <指令>.&<别名> 定义为个人快捷指令。

    .alias del/rm <别名> 删除快捷指令。在群聊中默认删除群快捷指令。

    .alias del/rm --my <别名> 删除个人快捷指令。

    .alias show/list 显示目前可用的快捷指令。

    使用快捷指令的方式如下,支持携带参数:

    .& <别名> [可能的参数].a <别名> [可能的参数]

    海豹支持 个人快捷指令群快捷指令 两种模式:

    • 个人快捷指令:与用户关联,定义后用户可以在私聊、骰子所在的所有群进行使用。
    • 群快捷指令:与群关联,定义后该群内所有人都可以使用。

    快捷指令示例

    木落
    .alias 终极答案 .r 11+45-14 计算生命、宇宙以及一切的问题的答案
    头像
    头像
    海豹核心
    已成功定义指令「.r 11+45-14 计算生命、宇宙以及一切的问题的答案」的个人快捷方式「终极答案」,触发方式: +.&终极答案 或 +.a 终极答案
    木落
    .&终极答案
    头像
    头像
    海豹核心
    ※ 个人快捷指令 .r 11+45-14 计算生命、宇宙以及一切的问题的答案 +由于计算生命、宇宙以及一切的问题的答案,<木落>掷出了 11+45-14=11+45-14=42

    额外 TRPG 规则支持

    .ww WOD 规则骰点

    .ww <表达式> 骰点,表达式用法请参考 核心指令 节。

    特别地,使用 ww 指令时允许省略加骰线 aY,这时将使用默认值进行骰点。

    示例

    木落
    .ww 5
    头像
    头像
    海豹核心
    <木落>掷出了 5a10=[成功0/5 {6,2,2,7,4}]=0

    .ww set <默认值> 设定默认值,默认值可以由 加骰线 aY、骰子面数 mZ、成功线 kN 中的部分任意组合。默认值的生效范围是当前群组。

    .ww set clr 重置默认值为:加骰线 10、面数 10、成功线 8,即 a10m10k8

    示例

    木落
    .ww set a6m10k9
    头像
    头像
    海豹核心
    成功线k: 已修改为9 +骰子面数m: 已修改为10 +加骰线a: 已修改为6
    木落
    .ww 5
    头像
    头像
    海豹核心
    <木落>掷出了 5a6=[成功1/11 轮数:4 {<9*>,5,<6>,3,3},{<6>,<6>},{<6>,<7>},{5,4}]=1
    木落
    .ww set clr
    头像
    头像
    海豹核心
    骰池设定已恢复默认

    .dx 双重十字规则骰点

    .dx <表达式> 骰点,表达式用法请参考 核心指令 节。

    .ek 共鸣性怪异规则骰点

    .ek <技能名>(+<奖励骰>) (<判定线>)

    .ekgen 共鸣性怪异规则属性生成

    .ekgen [<数量>] 生成指定数量的共鸣性怪异角色属性。

    .rsr 暗影狂奔规则骰点

    .rsr <骰数> 骰点。

    骰指定数量的 D6。每有一个骰子骰出 5 或 6 称为 1 成功度。

    如果超过半数的骰子骰出 1,称为这次骰点「失误」;失误的同时成功度为 0,称为「严重失误」。

    + + + + \ No newline at end of file diff --git a/use/introduce.html b/use/introduce.html new file mode 100644 index 000000000..26872af23 --- /dev/null +++ b/use/introduce.html @@ -0,0 +1,57 @@ + + + + + + 基础概念 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Skip to content

    基础概念

    本节内容

    这里讲的是使用海豹核心的相关事项,如果要了解如何搭建和部署骰子,请参考 部署 - 快速开始

    以下内容针对从未接触过骰子的用户准备。如果你已经有使用其他骰系的经验,可以 跳过本节

    什么是骰子?

    骰子这里特指在即时聊天软件(如 QQ、KOOK、Discord)中为 TRPG(跑团)玩家提供方便的机器人。顾名思义,骰子提供各种基于各种跑团规则(如 CoC、D&D)的骰点服务, 同时还包括技能检定、日志记录(Log)等功能。一些骰子服务,包括 SealDice,还提供一系列的自定义和娱乐功能。

    获取和使用

    最简单的方法就是自己 搭建 一个海豹骰自用(私骰),也可以从 SealDice 公骰列表 中寻找一个面向公众提供服务的骰子(公骰)。

    一般而言,公骰是免费的。但他们的维护者(骰主)一般都要求用户严格遵循使用协议,使用前请使用 .help 协议 指令了解你需要注意哪些事项。

    危险:QQ 骰子的使用注意项

    QQ 并未提供公开的机器人接口,因此机器人只能使用第三方软件作为假用户接入。QQ 可能会检测到这些机器人,将它们视为诈骗而予以警告、封禁,甚至永久冻结。

    因此,在 QQ 使用骰子有许多约定俗成的规则,例如必须使用指令使骰子退群,而严禁直接移出群聊。为了尊重骰主的劳动成果,你应该遵守这些规则。

    在 QQ 上,你需要和骰子成为好友,然后拉入群组使用;在其他平台,一般使用邀请链接或者其他方式(详细操作请查看对应平台的相关使用文档)将机器人邀请进服务器、频道,或群组。之后,你可以通过触发 指令回复自定义回复 来使用骰子机器人了。

    指令回复

    指令是和骰子互动的基本方式。一个指令由指令前缀、指令名、指令参数、指令标志组成。

    指令前缀

    为了避免意外触发,指令前面都带有前缀,如 .help 协议 中的 .。按照习惯,指令前缀一般是便于输入的中英文句号,通常是 .

    海豹核心提供了自定义指令前缀功能,因此,其他符号如 /,甚至一段话 哦,我的骰子, 都可以被用作前缀。如果你使用公骰,请注意查阅它的使用说明。

    指令名

    .help 协议 为例,其中的 help 就是指令名。指令可以有别名,例如 查询 就是 find 的别名。

    指令的行为与预期不符?

    海豹通过 扩展 来组织功能和指令,指令名只要求在同一扩展内不重复。

    如果你发现指令的回复与预期不符合,有可能是没有开启正确的扩展,从而执行了来自其他扩展的指令。

    例如,CoC 和 D&D 都存在掷骰检定指令 rc,你需要通过扩展管理指令 ext 来开启其中一个、关闭另一个,以控制指令的行为。

    指令参数

    .help 协议 为例,其中 协议 就是指令参数,参数提供指令所需要的信息。

    虽然海豹在一定程度上可以兼容 .help协议 这种情况,但是在指令名与参数、参数与参数之间添加空格能保证海豹骰识别指令时准确无误,避免出现预期外情况。

    提示:获取指令帮助

    多数情况下,第一个参数为 help,或者没有正确提供指令所需参数时会返回指令的帮助信息。例如,下面是 find 指令返回的帮助信息:

    text
    查询指令,通常使用全文搜索(x86 版)或快速查询(arm, 移动版)
    +.find/查询 <关键字>      // 查找文档。关键字可以多个,用空格分割
    +.find#<分组> <关键字>    // 查找指定分组下的文档。关键字可以多个,用空格分割
    +.find <数字 ID>          // 显示该 ID 的词条
    +.find --rand           // 显示随机词条
    +.find <关键字> --num=10 // 需要更多结果

    依照惯例,帮助说明中的的一些符号有特定含义,说明如下:

    1. <关键字> 的尖括号 <> 表示你应以相应内容替换此处内容。

      正常的用例:.find 火球术 错误的用例:.find <火球术>

    2. 不带有尖括号的内容是字面量,你应该原样输入这里的内容。

    3. [关键字] 的括号 [] 表示此参数可以被省略。

    4. (关键字1|关键字2) 的圆括号 () 搭配竖线 | 表示必须在所列各项中选择一个。

    5. [关键字1|关键字2] 的方括号 [] 搭配竖线 | 表示可以在所列各项中选择一个,或不选择此项。

    指令标志

    标志(flag)和参数相似,但不同于参数往往需要处于按照一定的顺序出现,标志可以无序排列。标志通过特定的关键字(key)来辅助识别,一般形式为 --key=value 或者 --key

    注意

    一些系统(如 iOS)会将两个连字符(hyphen)-- 自动转换为短画线(en dash),输入 flag 时请注意辨别。

    自定义回复

    自定义回复 形式自由,触发机制多样(关键字、正则表达式等),并且能配合海豹核心独特的变量系统使用。

    海豹核心没有预置的自定义回复,完全由骰主自行设定。因此每个骰子使用自定义回复的方法可能完全不同。

    如果你使用公骰,请参阅相应的使用文档以了解骰主设定的自定义回复。

    + + + + \ No newline at end of file diff --git a/use/log.html b/use/log.html new file mode 100644 index 000000000..9d1f6603a --- /dev/null +++ b/use/log.html @@ -0,0 +1,52 @@ + + + + + + 日志 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Skip to content

    日志

    本节内容

    本节将展示记录跑团日志相关的指令,请善用侧边栏和搜索,按需阅读文档。

    .log 跑团日志

    记录日志

    对于每个群组,有若干个日志记录和一个当前日志。日志记录是本群记录过的所有日志。当前日志指向本群的其中一个日志记录,可以为空,但不会存在多个。

    注意

    海豹核心的日志记录只在骰子启用时进行。

    即,如果你在一个群中通过 .bot off 关闭了骰子,即使有记录中的日志,也会暂停。

    .log new <日志名>

    新建一份日志,并且开始记录。

    如果本群的当前日志不为空,则不能创建。如果创建成功,将本群的当前日志设定成新日志。

    .log on [<日志名>]

    如果不指定日志名,如果当前日志存在,则开始记录本群的当前日志。

    如果指定日志名,则开始记录指定的日志,当前日志设定为指定的日志。

    .log off

    暂停记录当前日志。

    .log halt / .log end

    停止记录当前日志,将本群的当前日志设定为空。

    如果使用的是 .log end,还会向海豹日志染色器上传日志,并返回一个获取链接。

    停止的日志并不会丢失,仍然存在于本群的日志记录中,可以使用 .log on <日志名> 继续记录。

    数据统计

    .log stat [<日志名>] / .stat log [<日志名>]

    统计指定日志中检定的成功失败数量,与角色的属性数值变化。

    如果本群的当前日志不为空,可以省略日志名,统计当前日志。

    管理日志

    .log list

    列出本群的所有日志记录。

    .log get <日志名>

    重新获取指定日志的染色器链接。

    .log del <日志名>

    删除指定日志。

    注意

    删除的日志在海豹核心中永远失去,无法再继续记录。

    如果已经上传到染色器,该链接仍然可以使用。你也可以在海豹核心中的 data/default/log-exports/ 目录寻找日志的文件快照。

    .log export <日志名>

    如果平台支持发送文件,海豹核心将以 txt 文本文件的形式发送指定日志的全文。

    .log export <日志名> <邮箱地址> [<更多邮箱地址>...]

    如果骰子配置了发件邮箱(见 UI「综合设置 - 基本设置」),海豹核心可以以 txt 文件附件的形式,向每个指定的邮箱地址发送指定日志的全文。

    多个收件邮箱用空格隔开。

    骰主代取 Log

    对于已经解散/退出的群聊,如果还想要取出其中的日志,需要知道对应的群号。

    你可在任意有 Master 权限的交互平台做以下操作:

    首先使用 .log list <群号> 列出该群的所有日志记录。

    然后,使用 .log masterget <群号> <日志名> 获取指定日志记录的染色器链接。

    UI 中管理跑团 Log

    作为骰主,你也可以在管理后台的 扩展功能 - 跑团日志 界面,管理所有群的所有日志。

    .ob 旁观

    .ob

    让使用者成为观众。

    这个指令的作用实际是给使用者的名字上前缀 ob。不会造成其他的效果。

    对于海豹日志染色器,名字前缀有 ob 的用户发言可以被一键去除。

    .ob exit

    如果使用者的名字有ob前缀,这个指令将其去除。

    .sn 自动群名片

    开启后,当用户角色卡的数值变化时,自动更新用户的群名片。

    更改其他玩家的名片,需要骰子账号有适当的权限。

    对于 QQ,这个权限是群主或群管理员。

    预设模板

    .sn coc / .sn cocL角色名 SAN70 HP14/14 DEX60

    克苏鲁的呼唤常用格式,使用 cocL 以在名片中使用小写字母。

    .sn dnd角色名 HP10/10 AC8 DC6 PP8

    龙与地下城常用格式。

    .sn none角色名

    空白名片,当角色名变化时也会自动更新。

    扩展规则

    有些插件提供的扩展规则也定义了名片模板。对于这样的扩展规则,可以使用 .sn <规则名> 使用其模板。

    自定义模板

    .sn expr <模板>

    在模板中使用变量以自动更新。

    例如,CoC 模板的等价写法是 .sn expr {$t玩家_RAW} SAN{san} HP{hp}/{hpmax} DEX{dex}

    关闭自动修改

    .sn off

    .hiy 数据统计

    海豹核心不提供统计整体成功率的功能。

    + + + + \ No newline at end of file diff --git a/use/other_rules.html b/use/other_rules.html new file mode 100644 index 000000000..ea1c3cdd6 --- /dev/null +++ b/use/other_rules.html @@ -0,0 +1,52 @@ + + + + + + 其它规则支持 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Skip to content

    其它规则支持

    本节内容

    本节是海豹支持的其他 TRPG 规则的索引。

    这些规则因指令数量少或仍在预览阶段的原因,未被单独作为扩展。下面将引导你跳转到对应规则的具体命令支持页。

    绿色三角洲 Delta Green

    「绿色三角洲」(Delta Green,简称 DG)是克苏鲁的呼唤(CoC)的拓展规则,同时也是作为游戏核心的秘密组织的名字。绿色三角洲是保护人类免遭旧日支配者威胁的「抗神组织」,其队员(特工)大多在政府部门工作,组织本身是非官方且非法的存在。他们的敌人不仅是旧日支配者的眷族或崇拜者,同时也包括操弄禁忌知识的人类势力。

    参阅 克苏鲁的呼唤 7 版 # 设置房规,使用 .setcoc dg 切换到 DG 支持。

    黑暗世界 World of Darkness

    「黑暗世界」(World of Darkness,简称 WOD)是一款超自然题材的 TRPG 游戏。在这个世界中,所有阴谋论都是真的,都市传说不再是什么可以轻松无视的「故事」。你可能会从镜子里召唤出血腥玛丽,也可能登上电梯后不慎消失在超市的某个漆黑楼层中。

    参阅 功能 # WOD 规则骰点

    双重十字 Double Cross

    「双重十字」(Double Cross,简称 DX)是一款日系超能力战斗 TRPG 游戏。在病毒感染了绝大多数人类使得他们进化为超能力者的时代,PL 在 GM 的指引下为了守护重要的人或者日常生活而战斗。

    参阅 功能 # 双重十字规则骰点

    暗影狂奔 Shadowrun

    「暗影狂奔」(Shadowrun,简称 SR)是一款科学奇幻 TRPG 游戏,背景设定在近未来的灵气复苏赛博朋克虚构世界中。

    参阅 功能 # 暗影狂奔规则骰点

    共鸣性怪异 Emoklore

    与我们所生活的现实颇为相似的另一个世界。

    超常的存在——「怪异」——确确实实地存在于人们身边的世界。

    这就是《共鸣性怪异 TRPG》的舞台。

    参阅 功能 # 共鸣性怪异规则骰点

    更多规则

    除了上述由官方提供支持的规则之外,海豹社区还通过插件的形式为其它规则提供了支持,向你所使用的骰子主人请求安装相应插件吧。

    参阅 配置 - JavaScript 插件,在插件仓库中获取相应插件。

    + + + + \ No newline at end of file diff --git a/use/quick-start.html b/use/quick-start.html new file mode 100644 index 000000000..c39ef20d6 --- /dev/null +++ b/use/quick-start.html @@ -0,0 +1,52 @@ + + + + + + 快速上手 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Skip to content

    快速上手

    本节内容

    本节将展示 TRPG 跑团过程玩家使用海豹骰的常用指令和一般流程,请善用搜索,按需阅读文档。

    常用指令速查

    核心指令
    动作指令
    移出骰子.bot bye / .dismiss
    开关骰子.bot on/off
    开关自定义回复.reply on/off
    新建日志.log new <日志名>
    暂停/恢复日志记录.log off/on
    结束并获取日志.log end
    重新获取日志.log get <日志名>
    掷骰
    动作指令
    掷骰.r <x>d<y>,并有诸多扩展写法
    检定.ra <技能>
    暗骰 / 暗中检定.rh <x>d<y> / .rah <技能>
    代替检定.ra <技能> @代替目标
    设定默认骰子面数.set <面数>
    角色卡
    动作指令
    新建空白卡.pc new <角色名>
    修改角色名.nn <角色名>
    录入数据.st <属性><值>
    列出数据.st show [<属性>]
    列出角色卡.pc list
    绑定角色卡.pc tag <角色名>
    删除角色卡.pc del <角色名>
    自动名片.sn (参考说明)
    CoC 7th
    动作指令
    切换到 CoC 规则.set coc
    生成随机属性数值.coc <数量>
    理智检定.sc <成功时失去理智>/<失败时失去理智>
    对抗检定.rav <自身技能> <对手技能> @对手
    奖励骰与惩罚骰.ra (b|p)<数量> <技能>
    疯狂症状.ti 即时疯狂症状,.li 总结性疯狂症状
    技能成长.en <技能>
    切换房规.setcoc details 列出房规,.setcoc <序号> 设定房规
    D&D 5E
    动作指令
    切换到 D&D 规则.set dnd
    生成随机属性值.dnd <数量>
    优势/劣势掷骰.r d(优势|劣势)
    检定.rc [优势|劣势] <技能>[+<调整值>]
    先攻.ri (<角色名>)
    先攻列表.init
    随机 D&D 名字.namednd <种族> <数量>
    其它
    动作指令
    给骰主发送消息.send <消息>
    获取帮助.help <指令名称>
    搜索词条.find <关键字>
    暗影狂奔掷骰.rsr
    WoD 掷骰.ww
    双十字掷骰.dx
    共鸣性怪异掷骰 / 生成属性.ek / .ekgen

    通常流程

    玩家视角

    这一段落是以玩家视角而非主持人视角编写的。

    如果你想主持游戏,我们推荐你较为完整地了解海豹核心提供的各种指令,尤其是 CoC 指令与 D&D 指令相冲突的部分。

    游戏主持人邀请你进入群聊(根据平台不同,也可能是频道、服务器等,本节以群聊代称)。

    提示:尊重主持人与其他玩家

    如果你对于玩法还不熟悉,在主持人要求你使用骰子时才动作,或者在动作前请求主持人的许可。

    你可能用到以下指令:

    • nn 命名角色卡
    • st 设置和修改角色卡属性
    • sn 设置自动名片
    • r 掷骰:需要产生一个随机数的时候,例如伤害值
    • ra/rc 检定:你使用一个技能
    • 根据你使用的规则,你还可能用到其他指令,请参考下面的段落。

    如果还需要使用这张人物卡,并且不在这个群聊使用:

    • pc save 保存到角色卡列表
    • 你还会用到其他指令才能在其他群聊使用这张角色卡。参考 .pc help

    秘密团

    按照主持人的要求,你需要在不同群聊中使用同一角色卡,并且需要数据互相同步。

    • pc new <角色名> 创建一张可以跨群聊使用的角色卡并绑定到当前群聊
    • pc tag <角色名> 将指定角色卡绑定到当前群聊

    通过这种方式,你可在不同群聊之间使用同一角色卡。在任意群聊产生的数据修改都会自动同步到其他绑定的群聊。

    进行 CoC 游戏

    创作角色卡

    .coc <数量> 生成指定数量的随机属性。

    理智检定 San Check

    .sc <成功时失去理智>/<失败时失去理智>

    例如:.sc 0/1 .sc 1/1d4 .sc 1d10/1d100

    抽取疯狂症状

    .ti 抽取即时疯狂症状;

    或者,在主持人要求时 .li 抽取总结性疯狂症状。

    技能成长

    .en <技能> 对技能进行一次成长。

    进行 D&D 游戏

    创作角色卡

    .dnd <数量> 生成指定数量的随机属性。

    设定先攻值

    .ri <先攻值> 设定自己的先攻值。

    先攻值支持以下三种写法:

    1. 12 直接写数值
    2. +2 写调整值,表示 D20+2
    3. =D20+2 写骰点式

    设定临时属性

    .buff <参数> 设定临时属性。参数的写法参考角色数据录入的 st 指令。

    法术位

    .ss 指令设定角色的法术位。请使用 .ss help 查看用法。

    .cast 指令使用法术。请使用 .cast help 查看用法。

    长休

    .longrest 指令使角色进行长休。

    死亡豁免

    .ds 指令进行死亡豁免。请使用 .ds help 查看用法。

    + + + + \ No newline at end of file diff --git a/use/story.html b/use/story.html new file mode 100644 index 000000000..8b88a4ea6 --- /dev/null +++ b/use/story.html @@ -0,0 +1,52 @@ + + + + + + 故事 | 海豹手册 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Skip to content

    故事

    本节内容

    本节将展示对故事发展有帮助的一些指令,请善用侧边栏和搜索,按需阅读文档。

    .name 随机名字

    .name [cn|en|jp] [<数量>] [男|女]

    抽取随机名字。

    可以指定语言,如果不指定,默认是中文。可以指定数量,如果不指定,默认是 5 个。可以指定性别,如果不指定,默认随机生成。

    .namednd 随机 DND 名字

    .namednd <种族> [<数量>]

    抽取指定种族的随机名字。可以指定数量,默认是 5 个。

    补充:可以选用的种族
    • 达马拉人
    • 卡林珊人
    • 莱瑟曼人
    • 受国人
    • 精灵
    • 矮人
    • 兽人
    • 海族
    • 地精

    .who 随机排列顺序

    .who <排列元素>...

    随机打乱提供的元素。

    示例

    木落
    .who 1 2 3 4 5 6 7 8 9
    头像
    头像
    海豹核心
    打乱顺序: 9, 7, 6, 3, 1, 4, 8, 5, 2

    .modu 魔都模组查询

    感谢魔都的章鱼站长给予的许可和支持!

    .modu search <关键字> [<页码>]

    使用关键字进行搜索。

    .modu rec <关键字> [<页码>]

    使用关键字对编辑推荐模组进行搜索。

    .modu author <关键字> [<页码>]

    搜索作者符合关键字的模组。

    .modu luck [<页码>]

    查看编辑推荐。

    .modu get <编号>

    查看指定模组的详细内容。

    .modu roll

    随机抽取一个模组。

    .modu help

    显示帮助。

    + + + + \ No newline at end of file diff --git a/vp-icons.css b/vp-icons.css new file mode 100644 index 000000000..ddc5bd8ed --- /dev/null +++ b/vp-icons.css @@ -0,0 +1 @@ +.vpi-social-github{--icon:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='M12 .297c-6.63 0-12 5.373-12 12c0 5.303 3.438 9.8 8.205 11.385c.6.113.82-.258.82-.577c0-.285-.01-1.04-.015-2.04c-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729c1.205.084 1.838 1.236 1.838 1.236c1.07 1.835 2.809 1.305 3.495.998c.108-.776.417-1.305.76-1.605c-2.665-.3-5.466-1.332-5.466-5.93c0-1.31.465-2.38 1.235-3.22c-.135-.303-.54-1.523.105-3.176c0 0 1.005-.322 3.3 1.23c.96-.267 1.98-.399 3-.405c1.02.006 2.04.138 3 .405c2.28-1.552 3.285-1.23 3.285-1.23c.645 1.653.24 2.873.12 3.176c.765.84 1.23 1.91 1.23 3.22c0 4.61-2.805 5.625-5.475 5.92c.42.36.81 1.096.81 2.22c0 1.606-.015 2.896-.015 3.286c0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E")} \ No newline at end of file