From 6b580d166747d2a1d460666d4259238beb851f4c Mon Sep 17 00:00:00 2001 From: Harvey Zhao Date: Wed, 16 Sep 2026 09:36:39 +0800 Subject: [PATCH] fix(site): [SITE-05] repair search interactions and align peer dependency --- docs/document/404.html | 4 +- docs/document/advanced/built-in.html | 6 +- docs/document/advanced/class.html | 6 +- docs/document/advanced/event.html | 6 +- docs/document/advanced/global.html | 6 +- docs/document/advanced/plugin.html | 6 +- docs/document/advanced/property.html | 10 +- ...W-.js => advanced_property.md.DThbIwPo.js} | 2 +- ... => advanced_property.md.DThbIwPo.lean.js} | 2 +- .../{app.CZLLzIhe.js => app.CVqqgDvz.js} | 2 +- docs/document/assets/chunks/theme.BNnkd4s0.js | 1 + docs/document/assets/chunks/theme.DyJGd-oY.js | 1 - ...js => en_advanced_property.md.CwqZcLuG.js} | 2 +- ... en_advanced_property.md.CwqZcLuG.lean.js} | 2 +- docs/document/component/contextmenu.html | 6 +- docs/document/component/controls.html | 6 +- docs/document/component/layers.html | 6 +- docs/document/component/setting.html | 6 +- docs/document/en/advanced/built-in.html | 6 +- docs/document/en/advanced/class.html | 6 +- docs/document/en/advanced/event.html | 6 +- docs/document/en/advanced/global.html | 6 +- docs/document/en/advanced/plugin.html | 6 +- docs/document/en/advanced/property.html | 10 +- docs/document/en/component/contextmenu.html | 6 +- docs/document/en/component/controls.html | 6 +- docs/document/en/component/layers.html | 6 +- docs/document/en/component/setting.html | 6 +- docs/document/en/index.html | 6 +- docs/document/en/plugin/ads.html | 6 +- docs/document/en/plugin/ambilight.html | 6 +- docs/document/en/plugin/asr.html | 6 +- docs/document/en/plugin/audio-track.html | 6 +- docs/document/en/plugin/auto-thumbnail.html | 6 +- docs/document/en/plugin/chapter.html | 6 +- docs/document/en/plugin/chromecast.html | 6 +- docs/document/en/plugin/danmuku-mask.html | 6 +- docs/document/en/plugin/danmuku.html | 6 +- docs/document/en/plugin/dash-control.html | 6 +- docs/document/en/plugin/document-pip.html | 6 +- docs/document/en/plugin/hls-control.html | 6 +- docs/document/en/plugin/jassub.html | 6 +- .../en/plugin/multiple-subtitles.html | 6 +- docs/document/en/plugin/vast.html | 6 +- docs/document/en/plugin/vtt-thumbnail.html | 6 +- docs/document/en/proxy/canvas.html | 6 +- docs/document/en/proxy/mediabunny.html | 6 +- docs/document/en/start/i18n.html | 6 +- docs/document/en/start/option.html | 6 +- docs/document/en/tool/iframe.html | 6 +- docs/document/en/tool/thumbnail.html | 6 +- docs/document/hashmap.json | 2 +- docs/document/index.html | 6 +- docs/document/plugin/ads.html | 6 +- docs/document/plugin/ambilight.html | 6 +- docs/document/plugin/asr.html | 6 +- docs/document/plugin/audio-track.html | 6 +- docs/document/plugin/auto-thumbnail.html | 6 +- docs/document/plugin/chapter.html | 6 +- docs/document/plugin/chromecast.html | 6 +- docs/document/plugin/danmuku-mask.html | 6 +- docs/document/plugin/danmuku.html | 6 +- docs/document/plugin/dash-control.html | 6 +- docs/document/plugin/document-pip.html | 6 +- docs/document/plugin/hls-control.html | 6 +- docs/document/plugin/jassub.html | 6 +- docs/document/plugin/multiple-subtitles.html | 6 +- docs/document/plugin/vast.html | 6 +- docs/document/plugin/vtt-thumbnail.html | 6 +- docs/document/proxy/canvas.html | 6 +- docs/document/proxy/mediabunny.html | 6 +- docs/document/start/i18n.html | 6 +- docs/document/start/option.html | 6 +- docs/document/tool/iframe.html | 6 +- docs/document/tool/thumbnail.html | 6 +- packages/artplayer-vitepress/README.md | 37 ++- packages/artplayer-vitepress/build/search.ts | 74 +++++ .../artplayer-vitepress/docs/vite.config.ts | 4 +- packages/artplayer-vitepress/package.json | 2 +- refactor/baselines/site-inventory.json | 276 +++++++++--------- refactor/baselines/site05-search.json | 233 +++++++++++++++ refactor/changes/2026-09-16-SITE-05-search.md | 52 ++++ refactor/execution-gates.md | 4 + refactor/plan.md | 7 +- refactor/progress.md | 10 + refactor/tasks.json | 11 +- refactor/third-party.json | 2 +- test/browser/document-search.spec.js | 63 ++++ test/site-markdown.test.js | 19 ++ yarn.lock | 8 +- 90 files changed, 859 insertions(+), 365 deletions(-) rename docs/document/assets/{advanced_property.md.DOli61W-.js => advanced_property.md.DThbIwPo.js} (99%) rename docs/document/assets/{advanced_property.md.DOli61W-.lean.js => advanced_property.md.DThbIwPo.lean.js} (97%) rename docs/document/assets/{app.CZLLzIhe.js => app.CVqqgDvz.js} (95%) create mode 100644 docs/document/assets/chunks/theme.BNnkd4s0.js delete mode 100644 docs/document/assets/chunks/theme.DyJGd-oY.js rename docs/document/assets/{en_advanced_property.md.NpFIGOXu.js => en_advanced_property.md.CwqZcLuG.js} (99%) rename docs/document/assets/{en_advanced_property.md.NpFIGOXu.lean.js => en_advanced_property.md.CwqZcLuG.lean.js} (97%) create mode 100644 packages/artplayer-vitepress/build/search.ts create mode 100644 refactor/baselines/site05-search.json create mode 100644 refactor/changes/2026-09-16-SITE-05-search.md create mode 100644 test/browser/document-search.spec.js diff --git a/docs/document/404.html b/docs/document/404.html index 229c52b42..3d357ba34 100644 --- a/docs/document/404.html +++ b/docs/document/404.html @@ -9,7 +9,7 @@ - + @@ -21,7 +21,7 @@
- + \ No newline at end of file diff --git a/docs/document/advanced/built-in.html b/docs/document/advanced/built-in.html index a6615eeb1..02cf48228 100644 --- a/docs/document/advanced/built-in.html +++ b/docs/document/advanced/built-in.html @@ -9,9 +9,9 @@ - + - + @@ -288,7 +288,7 @@ const icon: HTMLElement | undefined = art.icons.customMark; if (player && icon) player.append(icon); console.log(Artplayer.html, art.video === art.template.$video); - + \ No newline at end of file diff --git a/docs/document/advanced/class.html b/docs/document/advanced/class.html index 46c925610..205e6b401 100644 --- a/docs/document/advanced/class.html +++ b/docs/document/advanced/class.html @@ -9,9 +9,9 @@ - + - + @@ -50,7 +50,7 @@ }, 20); const returned: void = invoke.call({ value: 0 }, 1); void [missing, styled, width, returned];

scheme ​

返回播放器选项的校验方案

▶ Run Code
js
console.info(Artplayer.scheme);

Emitter ​

返回事件分发器的构造函数

▶ Run Code
js
console.info(Artplayer.Emitter);

validator ​

返回选项的校验函数

▶ Run Code
js
console.info(Artplayer.validator);

kindOf ​

返回类型检测的函数工具

▶ Run Code
js
console.info(Artplayer.kindOf);

html ​

返回播放器所需的 html 字符串

▶ Run Code
js
console.info(Artplayer.html);

这是当前版本的静态基础模板,包含播放器所需的 class 和媒体/控件节点,不是某个实例当前 DOM 的快照。通过 useSSR: true 复用预先插入的模板时,应保留完整结构并匹配版本;该选项不会让构造函数在无浏览器环境中运行。实际实例没有 template.html 属性,旧根类型为兼容保留的这个成员不能代替静态入口。

option ​

返回播放器的默认选项

▶ Run Code
js
console.info(Artplayer.option);
- + \ No newline at end of file diff --git a/docs/document/advanced/event.html b/docs/document/advanced/event.html index c79c7485b..2fff83597 100644 --- a/docs/document/advanced/event.html +++ b/docs/document/advanced/event.html @@ -9,9 +9,9 @@ - + - + @@ -397,7 +397,7 @@ art.on('keydown', (event) => { console.log(event.code); });

video:canplay ​

浏览器可以播放媒体文件了,但估计没有足够的数据来支撑播放到结束,不必停下来进一步缓冲内容

video:canplaythrough ​

浏览器估计它可以在不停止内容缓冲的情况下播放媒体直到结束

video:complete ​

历史类型保留的名称,默认视频事件清单不转发此事件。视频播放结束使用 video:ended。

video:durationchange ​

duration 属性的值改变时触发

video:emptied ​

媒体内容变为空;例如,当这个 media 已经加载完成(或者部分加载完成),则发送此事件,并调用 load() 方法重新加载它

video:ended ​

视频停止播放,因为 media 已经到达结束点

video:error ​

获取媒体数据时出错,或者资源类型不是受支持的媒体格式

video:loadeddata ​

media 中的首帧已经完成加载

video:loadedmetadata ​

已加载元数据

video:pause ​

播放已暂停

video:play ​

播放已开始

video:playing ​

由于缺乏数据而暂停或延迟后,播放准备开始

video:progress ​

在浏览器加载资源时周期性触发

video:ratechange ​

播放速率发生变化

video:seeked ​

跳帧(seek)操作完成

video:seeking ​

跳帧(seek)操作开始

video:stalled ​

用户代理(user agent)正在尝试获取媒体数据,但数据意外未出现

video:suspend ​

媒体数据加载已暂停

video:timeupdate ​

currentTime 属性指定的时间发生变化

video:volumechange ​

音量发生变化

video:waiting ​

由于暂时缺少数据,播放已停止

- + \ No newline at end of file diff --git a/docs/document/advanced/global.html b/docs/document/advanced/global.html index 008fab443..8a2d44d8b 100644 --- a/docs/document/advanced/global.html +++ b/docs/document/advanced/global.html @@ -9,9 +9,9 @@ - + - + @@ -248,7 +248,7 @@ // 正常销毁清理,但不显式重置 src art.destroy(); - + \ No newline at end of file diff --git a/docs/document/advanced/plugin.html b/docs/document/advanced/plugin.html index 2b88b992e..a5fb9f6da 100644 --- a/docs/document/advanced/plugin.html +++ b/docs/document/advanced/plugin.html @@ -9,9 +9,9 @@ - + - + @@ -139,7 +139,7 @@ }) ], }); - + \ No newline at end of file diff --git a/docs/document/advanced/property.html b/docs/document/advanced/property.html index c0ccd2279..a595ce705 100644 --- a/docs/document/advanced/property.html +++ b/docs/document/advanced/property.html @@ -9,11 +9,11 @@ - + - + - + @@ -521,8 +521,8 @@ art.on('ready', () => { art.subtitleOffset = 1; -}); - +}); + \ No newline at end of file diff --git a/docs/document/assets/advanced_property.md.DOli61W-.js b/docs/document/assets/advanced_property.md.DThbIwPo.js similarity index 99% rename from docs/document/assets/advanced_property.md.DOli61W-.js rename to docs/document/assets/advanced_property.md.DThbIwPo.js index d6f403faa..0aad7a3cf 100644 --- a/docs/document/assets/advanced_property.md.DOli61W-.js +++ b/docs/document/assets/advanced_property.md.DThbIwPo.js @@ -1,4 +1,4 @@ -import{_ as n,o as l,c as e,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"实例属性","description":"","frontmatter":{},"headers":[],"relativePath":"advanced/property.md","filePath":"advanced/property.md","lastUpdated":1789520361000}'),p={name:"advanced/property.md"};function t(h,a,k,r,d,E){return l(),e("div",null,a[0]||(a[0]=[s(`

实例属性 ​

这里的 实例属性 是指挂载在 实例 的 一级属性,比较常用

实例身份与生命周期 ​

Artplayer.instances 返回成功构造且仍在登记中的实例共享数组。构造器只在同步初始化结束后加入实例,因此构造插件执行时还不能在其中找到自己。它不是副本,也不代表所有实例已 ready。读取或复制即可,不应手动修改:登记、容器重复检查和互斥播放都依赖该数组;销毁只移除当前实例。

art.constructor 指向同一个 Artplayer 构造器,其 prototype 是实例原型。Artplayer.version 是包版本字符串,不是能力检测。历史根声明仍包含 Artplayer.env 和 Artplayer.build,但冻结的 npm 5.4.0 及当前 6.0.0 运行时都没有提供它们,读取返回 undefined;runtime 类型省略了它们。构建过程替换 NODE_ENV 不会创建这些公开字段。

art.id 是同一份已加载构造器内递增的数字,在配置校验前分配,失败构造可能留下间隔;分别加载的 bundle 有各自计数和实例表。它与播放记忆键 option.id 无关,不应用作跨页面持久唯一标识。

状态字段与内部服务 ​

下列六个字段初始为 false,是普通可写字段,不是操作命令或能力保证。直接赋值不会执行对应功能或资源清理。

字段核心含义
isReady首次 canplay 后在 ready 事件前设为 true;reset、切源和正常销毁不把它重置为 false,因此不能证明当前 URL 已就绪
isDestroy核心清理及实例移除后、destroy 事件前设为 true;内部关闭保护更早生效,清理执行中仍可能为 false
isFocus根据播放器 focusin/focusout 和文档内外 click/contextmenu 更新,不等同于 document.activeElement
isInput在上述路径记录目标是否为 INPUT,不代表所有可编辑目标;键盘过滤另行检查可编辑内容
isLock移动端锁定辅助功能与 CSS 状态一起更新;直接赋值不会创建锁定 UI 或派发 lock
isRotate记录网页自动旋转的 CSS 变换;原生屏幕方向锁定不会让它成为通用设备方向标志

可选的 flv/m3u8/hls/ts/mpd/torrent 是外部适配器的集成位置,核心不初始化这些 SDK,也不会自动调用任意对象的 destroy 方法。按适配器的资源归属规则注册清理;runtime 将这些值描述为 unknown,需要使用者检查后再使用。

art.player 是安装实例属性描述符的对象,没有公开操作方法;播放 API 位于 art 本身。info/loading/mask 是已有组件服务,提供 show 和 toggle()。show setter 修改 CSS 状态并同步派发同名事件,重复相同赋值也会派发;它不是 Promise,不负责拉取媒体或决定缓冲状态,后续原生媒体回调可能再次改变其显示状态。

info 在桌面初始化,即使隐藏也按 INFO_LOOP_TIME 轮询 data-video 字段,数字显示两位小数并写入 textContent;runtime 的 init() 会重新建立归属的轮询/监听作用域,而不是额外叠加独立循环。loading 挂载配置的加载图标。mask 挂载状态/错误图标,状态按钮点击时请求 play,销毁时切换终止呈现;用户 destroy 监听器抛错不会跳过它的最终清理。这些服务不是 layers/controls 那样的自定义条目容器。

plugins.add 仍按插件指南的规则工作:同步结果立即注册,同 realm Promise 返回最终解析为管理器的 Promise,不会统一改造成异步 API。runtime 的 Plugins.add 类型接受准确和旧版工厂,不包装实际函数。插件返回对象即使有 destroy 方法,也不会仅因此被自动释放。

Reset、销毁与失败 ​

reset() 只依次调用 video.removeAttribute('src') 和 video.load(),返回 undefined,保留 UI、实例登记、option.url、就绪标志和用户订阅;不撤销调用方 URL、不销毁 SDK,也不重建插件,原生媒体事件仍可能随后到达。需要协调切源时使用切源 API;reset 不是完整播放器重启或异步取消完成凭证。

destroy(removeHtml = true) 同步开始清理。REMOVE_SRC_WHEN_DESTROY 开启且媒体节点可用时先调用 reset,再释放归属作用域、处理模板、移除实例、设置 isDestroy、派发 destroy,并完成余下资源清理。返回不代表已经发出的浏览器异步请求全部完成。reset/destroy 都使用方法的 this,作为回调传递时应绑定实例。

true 会清空容器,但不删除调用方容器节点,也不恢复挂载前内容;false 保留生成 DOM 并添加 art-destroy,同时仍停止核心资源。重复/重入 destroy 不再执行,因此 destroy(false) 后再调用 destroy(true) 不会补删保留的 DOM。容器释放后可以创建新实例,不能把旧实例当作已复活,也不能假设销毁后的所有属性访问都统一无操作。

清理遇到异常仍继续,最后抛出第一个捕获值并记录额外异常;同步构造失败则恢复捕获的 DOM/属性并重新抛出原初始化错误。destroy 不清空所有用户事件订阅:保留实例也会保留这些回调,需自行移除。调用方创建的计时器、原生监听器和 SDK 资源需要自己的清理,核心管理器和作用域只释放登记给它们的资源。

ts
import Artplayer from 'artplayer/runtime';
+import{_ as n,o as l,c as e,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"实例属性","description":"","frontmatter":{},"headers":[],"relativePath":"advanced/property.md","filePath":"advanced/property.md","lastUpdated":1789521099000}'),p={name:"advanced/property.md"};function t(h,a,k,r,d,E){return l(),e("div",null,a[0]||(a[0]=[s(`

实例属性 ​

这里的 实例属性 是指挂载在 实例 的 一级属性,比较常用

实例身份与生命周期 ​

Artplayer.instances 返回成功构造且仍在登记中的实例共享数组。构造器只在同步初始化结束后加入实例,因此构造插件执行时还不能在其中找到自己。它不是副本,也不代表所有实例已 ready。读取或复制即可,不应手动修改:登记、容器重复检查和互斥播放都依赖该数组;销毁只移除当前实例。

art.constructor 指向同一个 Artplayer 构造器,其 prototype 是实例原型。Artplayer.version 是包版本字符串,不是能力检测。历史根声明仍包含 Artplayer.env 和 Artplayer.build,但冻结的 npm 5.4.0 及当前 6.0.0 运行时都没有提供它们,读取返回 undefined;runtime 类型省略了它们。构建过程替换 NODE_ENV 不会创建这些公开字段。

art.id 是同一份已加载构造器内递增的数字,在配置校验前分配,失败构造可能留下间隔;分别加载的 bundle 有各自计数和实例表。它与播放记忆键 option.id 无关,不应用作跨页面持久唯一标识。

状态字段与内部服务 ​

下列六个字段初始为 false,是普通可写字段,不是操作命令或能力保证。直接赋值不会执行对应功能或资源清理。

字段核心含义
isReady首次 canplay 后在 ready 事件前设为 true;reset、切源和正常销毁不把它重置为 false,因此不能证明当前 URL 已就绪
isDestroy核心清理及实例移除后、destroy 事件前设为 true;内部关闭保护更早生效,清理执行中仍可能为 false
isFocus根据播放器 focusin/focusout 和文档内外 click/contextmenu 更新,不等同于 document.activeElement
isInput在上述路径记录目标是否为 INPUT,不代表所有可编辑目标;键盘过滤另行检查可编辑内容
isLock移动端锁定辅助功能与 CSS 状态一起更新;直接赋值不会创建锁定 UI 或派发 lock
isRotate记录网页自动旋转的 CSS 变换;原生屏幕方向锁定不会让它成为通用设备方向标志

可选的 flv/m3u8/hls/ts/mpd/torrent 是外部适配器的集成位置,核心不初始化这些 SDK,也不会自动调用任意对象的 destroy 方法。按适配器的资源归属规则注册清理;runtime 将这些值描述为 unknown,需要使用者检查后再使用。

art.player 是安装实例属性描述符的对象,没有公开操作方法;播放 API 位于 art 本身。info/loading/mask 是已有组件服务,提供 show 和 toggle()。show setter 修改 CSS 状态并同步派发同名事件,重复相同赋值也会派发;它不是 Promise,不负责拉取媒体或决定缓冲状态,后续原生媒体回调可能再次改变其显示状态。

info 在桌面初始化,即使隐藏也按 INFO_LOOP_TIME 轮询 data-video 字段,数字显示两位小数并写入 textContent;runtime 的 init() 会重新建立归属的轮询/监听作用域,而不是额外叠加独立循环。loading 挂载配置的加载图标。mask 挂载状态/错误图标,状态按钮点击时请求 play,销毁时切换终止呈现;用户 destroy 监听器抛错不会跳过它的最终清理。这些服务不是 layers/controls 那样的自定义条目容器。

plugins.add 仍按插件指南的规则工作:同步结果立即注册,同 realm Promise 返回最终解析为管理器的 Promise,不会统一改造成异步 API。runtime 的 Plugins.add 类型接受准确和旧版工厂,不包装实际函数。插件返回对象即使有 destroy 方法,也不会仅因此被自动释放。

Reset、销毁与失败 ​

reset() 只依次调用 video.removeAttribute('src') 和 video.load(),返回 undefined,保留 UI、实例登记、option.url、就绪标志和用户订阅;不撤销调用方 URL、不销毁 SDK,也不重建插件,原生媒体事件仍可能随后到达。需要协调切源时使用切源 API;reset 不是完整播放器重启或异步取消完成凭证。

destroy(removeHtml = true) 同步开始清理。REMOVE_SRC_WHEN_DESTROY 开启且媒体节点可用时先调用 reset,再释放归属作用域、处理模板、移除实例、设置 isDestroy、派发 destroy,并完成余下资源清理。返回不代表已经发出的浏览器异步请求全部完成。reset/destroy 都使用方法的 this,作为回调传递时应绑定实例。

true 会清空容器,但不删除调用方容器节点,也不恢复挂载前内容;false 保留生成 DOM 并添加 art-destroy,同时仍停止核心资源。重复/重入 destroy 不再执行,因此 destroy(false) 后再调用 destroy(true) 不会补删保留的 DOM。容器释放后可以创建新实例,不能把旧实例当作已复活,也不能假设销毁后的所有属性访问都统一无操作。

清理遇到异常仍继续,最后抛出第一个捕获值并记录额外异常;同步构造失败则恢复捕获的 DOM/属性并重新抛出原初始化错误。destroy 不清空所有用户事件订阅:保留实例也会保留这些回调,需自行移除。调用方创建的计时器、原生监听器和 SDK 资源需要自己的清理,核心管理器和作用域只释放登记给它们的资源。

ts
import Artplayer from 'artplayer/runtime';
 
 const art = new Artplayer({ container: '#player' });
 const instances: Artplayer[] = [...Artplayer.instances];
diff --git a/docs/document/assets/advanced_property.md.DOli61W-.lean.js b/docs/document/assets/advanced_property.md.DThbIwPo.lean.js
similarity index 97%
rename from docs/document/assets/advanced_property.md.DOli61W-.lean.js
rename to docs/document/assets/advanced_property.md.DThbIwPo.lean.js
index 6368e5924..35e52e6d2 100644
--- a/docs/document/assets/advanced_property.md.DOli61W-.lean.js
+++ b/docs/document/assets/advanced_property.md.DThbIwPo.lean.js
@@ -1 +1 @@
-import{_ as n,o as l,c as e,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"实例属性","description":"","frontmatter":{},"headers":[],"relativePath":"advanced/property.md","filePath":"advanced/property.md","lastUpdated":1789520361000}'),p={name:"advanced/property.md"};function t(h,a,k,r,d,E){return l(),e("div",null,a[0]||(a[0]=[s("",63),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",6),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",10),i("div",{className:"run-code"},"▶ Run Code",-1),s("",17),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",1)]))}const y=n(p,[["render",t]]);export{g as __pageData,y as default};
+import{_ as n,o as l,c as e,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"实例属性","description":"","frontmatter":{},"headers":[],"relativePath":"advanced/property.md","filePath":"advanced/property.md","lastUpdated":1789521099000}'),p={name:"advanced/property.md"};function t(h,a,k,r,d,E){return l(),e("div",null,a[0]||(a[0]=[s("",63),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",6),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",10),i("div",{className:"run-code"},"▶ Run Code",-1),s("",17),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",1)]))}const y=n(p,[["render",t]]);export{g as __pageData,y as default};
diff --git a/docs/document/assets/app.CZLLzIhe.js b/docs/document/assets/app.CVqqgDvz.js
similarity index 95%
rename from docs/document/assets/app.CZLLzIhe.js
rename to docs/document/assets/app.CVqqgDvz.js
index d904388f5..0004ea30a 100644
--- a/docs/document/assets/app.CZLLzIhe.js
+++ b/docs/document/assets/app.CVqqgDvz.js
@@ -1 +1 @@
-import{t as p}from"./chunks/theme.DyJGd-oY.js";import{R as s,a6 as i,a7 as u,a8 as c,a9 as l,aa as f,ab as d,ac as m,ad as h,ae as g,af as A,d as v,u as y,v as C,s as P,ag as b,ah as w,ai as R,aj as E}from"./chunks/framework.xxfEszSJ.js";function r(e){if(e.extends){const a=r(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const n=r(p),S=v({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=y();return C(()=>{P(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&b(),w(),R(),n.setup&&n.setup(),()=>E(n.Layout)}});async function T(){globalThis.__VITEPRESS__=!0;const e=D(),a=j();a.provide(u,e);const t=c(e.route);return a.provide(l,t),a.component("Content",f),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),n.enhanceApp&&await n.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function j(){return A(S)}function D(){let e=s;return h(a=>{let t=g(a),o=null;return t&&(e&&(t=t.replace(/\.js$/,".lean.js")),o=import(t)),s&&(e=!1),o},n.NotFound)}s&&T().then(({app:e,router:a,data:t})=>{a.go().then(()=>{i(a.route,t.site),e.mount("#app")})});export{T as createApp};
+import{t as p}from"./chunks/theme.BNnkd4s0.js";import{R as s,a6 as i,a7 as u,a8 as c,a9 as l,aa as f,ab as d,ac as m,ad as h,ae as g,af as A,d as v,u as y,v as C,s as P,ag as b,ah as w,ai as R,aj as E}from"./chunks/framework.xxfEszSJ.js";function r(e){if(e.extends){const a=r(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const n=r(p),S=v({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=y();return C(()=>{P(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&b(),w(),R(),n.setup&&n.setup(),()=>E(n.Layout)}});async function T(){globalThis.__VITEPRESS__=!0;const e=D(),a=j();a.provide(u,e);const t=c(e.route);return a.provide(l,t),a.component("Content",f),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),n.enhanceApp&&await n.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function j(){return A(S)}function D(){let e=s;return h(a=>{let t=g(a),o=null;return t&&(e&&(t=t.replace(/\.js$/,".lean.js")),o=import(t)),s&&(e=!1),o},n.NotFound)}s&&T().then(({app:e,router:a,data:t})=>{a.go().then(()=>{i(a.route,t.site),e.mount("#app")})});export{T as createApp};
diff --git a/docs/document/assets/chunks/theme.BNnkd4s0.js b/docs/document/assets/chunks/theme.BNnkd4s0.js
new file mode 100644
index 000000000..dc9ffc7d5
--- /dev/null
+++ b/docs/document/assets/chunks/theme.BNnkd4s0.js
@@ -0,0 +1 @@
+import{d as k,c as h,r as p,n as A,o as i,a as te,t as C,b as P,w as f,T as Ne,e as g,_ as V,u as Ke,i as ut,f as dt,g as he,h as S,j as d,k as c,l as ne,m as Le,p as T,q as x,s as fe,v as Z,x as ve,y as Ie,z as pt,A as ht,F as H,B as j,C as ee,D as Je,E as me,G as $,H as K,I as xe,J as _e,K as Q,L as ge,M as ft,N as Xe,O as vt,P as Ce,Q as Ye,R as ke,S as mt,U as _t,V as gt,W as je,X as kt,Y as Ve,Z as bt,$ as $t,a0 as Qe,a1 as Ze,a2 as yt,a3 as Pt,a4 as Lt,a5 as Vt}from"./framework.xxfEszSJ.js";const St=k({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(n){return(e,t)=>(i(),h("span",{class:A(["VPBadge",e.type])},[p(e.$slots,"default",{},()=>[te(C(e.text),1)])],2))}}),wt={key:0,class:"VPBackdrop"},Tt=k({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(n){return(e,t)=>(i(),P(Ne,{name:"fade"},{default:f(()=>[e.show?(i(),h("div",wt)):g("",!0)]),_:1}))}}),Mt=V(Tt,[["__scopeId","data-v-b2600058"]]),N=Ke;function Nt(n,e){let t,s=!1;return()=>{t&&clearTimeout(t),s?t=setTimeout(n,e):(n(),(s=!0)&&setTimeout(()=>s=!1,e))}}function Se(n){return n.startsWith("/")?n:`/${n}`}function Ae(n){const{pathname:e,search:t,hash:s,protocol:o}=new URL(n,"http://a.com");if(ut(n)||n.startsWith("#")||!o.startsWith("http")||!dt(e))return n;const{site:a}=N(),r=e.endsWith("/")||e.endsWith(".html")?n:n.replace(/(?:(^\.+)\/)?.*$/,`$1${e.replace(/(\.md)?$/,a.value.cleanUrls?"":".html")}${t}${s}`);return he(r)}function oe({correspondingLink:n=!1}={}){const{site:e,localeIndex:t,page:s,theme:o,hash:a}=N(),r=S(()=>{var u,v;return{label:(u=e.value.locales[t.value])==null?void 0:u.label,link:((v=e.value.locales[t.value])==null?void 0:v.link)||(t.value==="root"?"/":`/${t.value}/`)}});return{localeLinks:S(()=>Object.entries(e.value.locales).flatMap(([u,v])=>r.value.label===v.label?[]:{text:v.label,link:It(v.link||(u==="root"?"/":`/${u}/`),o.value.i18nRouting!==!1&&n,s.value.relativePath.slice(r.value.link.length-1),!e.value.cleanUrls)+a.value})),currentLang:r}}function It(n,e,t,s){return e?n.replace(/\/$/,"")+Se(t.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,s?".html":"")):n}const Ct={class:"NotFound"},At={class:"code"},Ht={class:"title"},Bt={class:"quote"},Et={class:"action"},Ot=["href","aria-label"],Dt=k({__name:"NotFound",setup(n){const{theme:e}=N(),{currentLang:t}=oe();return(s,o)=>{var a,r,l,u,v;return i(),h("div",Ct,[d("p",At,C(((a=c(e).notFound)==null?void 0:a.code)??"404"),1),d("h1",Ht,C(((r=c(e).notFound)==null?void 0:r.title)??"PAGE NOT FOUND"),1),o[0]||(o[0]=d("div",{class:"divider"},null,-1)),d("blockquote",Bt,C(((l=c(e).notFound)==null?void 0:l.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),d("div",Et,[d("a",{class:"link",href:c(he)(c(t).link),"aria-label":((u=c(e).notFound)==null?void 0:u.linkLabel)??"go to home"},C(((v=c(e).notFound)==null?void 0:v.linkText)??"Take me home"),9,Ot)])])}}}),Ft=V(Dt,[["__scopeId","data-v-93fd8736"]]);function et(n,e){if(Array.isArray(n))return le(n);if(n==null)return[];e=Se(e);const t=Object.keys(n).sort((o,a)=>a.split("/").length-o.split("/").length).find(o=>e.startsWith(Se(o))),s=t?n[t]:[];return Array.isArray(s)?le(s):le(s.items,s.base)}function zt(n){const e=[];let t=0;for(const s in n){const o=n[s];if(o.items){t=e.push(o);continue}e[t]||e.push({items:[]}),e[t].items.push(o)}return e}function jt(n){const e=[];function t(s){for(const o of s)o.text&&o.link&&e.push({text:o.text,link:o.link,docFooterText:o.docFooterText}),o.items&&t(o.items)}return t(n),e}function we(n,e){return Array.isArray(e)?e.some(t=>we(n,t)):ne(n,e.link)?!0:e.items?we(n,e.items):!1}function le(n,e){return[...n].map(t=>{const s={...t},o=s.base||e;return o&&s.link&&(s.link=o+s.link),s.items&&(s.items=le(s.items,o)),s})}function Y(){const{frontmatter:n,page:e,theme:t}=N(),s=Le("(min-width: 960px)"),o=T(!1),a=S(()=>{const I=t.value.sidebar,M=e.value.relativePath;return I?et(I,M):[]}),r=T(a.value);x(a,(I,M)=>{JSON.stringify(I)!==JSON.stringify(M)&&(r.value=a.value)});const l=S(()=>n.value.sidebar!==!1&&r.value.length>0&&n.value.layout!=="home"),u=S(()=>v?n.value.aside==null?t.value.aside==="left":n.value.aside==="left":!1),v=S(()=>n.value.layout==="home"?!1:n.value.aside!=null?!!n.value.aside:t.value.aside!==!1),_=S(()=>l.value&&s.value),m=S(()=>l.value?zt(r.value):[]);function L(){o.value=!0}function b(){o.value=!1}function y(){o.value?b():L()}return{isOpen:o,sidebar:r,sidebarGroups:m,hasSidebar:l,hasAside:v,leftAside:u,isSidebarEnabled:_,open:L,close:b,toggle:y}}function qt(n,e){let t;fe(()=>{t=n.value?document.activeElement:void 0}),Z(()=>{window.addEventListener("keyup",s)}),ve(()=>{window.removeEventListener("keyup",s)});function s(o){o.key==="Escape"&&n.value&&(e(),t==null||t.focus())}}function Ut(n){const{page:e,hash:t}=N(),s=T(!1),o=S(()=>n.value.collapsed!=null),a=S(()=>!!n.value.link),r=T(!1),l=()=>{r.value=ne(e.value.relativePath,n.value.link)};x([e,n,t],l),Z(l);const u=S(()=>r.value?!0:n.value.items?we(e.value.relativePath,n.value.items):!1),v=S(()=>!!(n.value.items&&n.value.items.length));fe(()=>{s.value=!!(o.value&&n.value.collapsed)}),Ie(()=>{(r.value||u.value)&&(s.value=!1)});function _(){o.value&&(s.value=!s.value)}return{collapsed:s,collapsible:o,isLink:a,isActiveLink:r,hasActiveLink:u,hasChildren:v,toggle:_}}function Gt(){const{hasSidebar:n}=Y(),e=Le("(min-width: 960px)"),t=Le("(min-width: 1280px)");return{isAsideEnabled:S(()=>!t.value&&!e.value?!1:n.value?t.value:e.value)}}const Rt=/\b(?:VPBadge|header-anchor|footnote-ref|ignore-header)\b/,Te=[];function tt(n){return typeof n.outline=="object"&&!Array.isArray(n.outline)&&n.outline.label||n.outlineTitle||"On this page"}function He(n){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:Wt(t),link:"#"+t.id,level:s}});return Kt(e,n)}function Wt(n){let e="";for(const t of n.childNodes)if(t.nodeType===1){if(Rt.test(t.className))continue;e+=t.textContent}else t.nodeType===3&&(e+=t.textContent);return e.trim()}function Kt(n,e){if(e===!1)return[];const t=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[s,o]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;return Xt(n,s,o)}function Jt(n,e){const{isAsideEnabled:t}=Gt(),s=Nt(a,100);let o=null;Z(()=>{requestAnimationFrame(a),window.addEventListener("scroll",s)}),pt(()=>{r(location.hash)}),ve(()=>{window.removeEventListener("scroll",s)});function a(){if(!t.value)return;const l=window.scrollY,u=window.innerHeight,v=document.body.offsetHeight,_=Math.abs(l+u-v)<1,m=Te.map(({element:b,link:y})=>({link:y,top:xt(b)})).filter(({top:b})=>!Number.isNaN(b)).sort((b,y)=>b.top-y.top);if(!m.length){r(null);return}if(l<1){r(null);return}if(_){r(m[m.length-1].link);return}let L=null;for(const{link:b,top:y}of m){if(y>l+ht()+4)break;L=b}r(L)}function r(l){o&&o.classList.remove("active"),l==null?o=null:o=n.value.querySelector(`a[href="${decodeURIComponent(l)}"]`);const u=o;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 xt(n){let e=0;for(;n!==document.body;){if(n===null)return NaN;e+=n.offsetTop,n=n.offsetParent}return e}function Xt(n,e,t){Te.length=0;const s=[],o=[];return n.forEach(a=>{const r={...a,children:[]};let l=o[o.length-1];for(;l&&l.level>=r.level;)o.pop(),l=o[o.length-1];if(r.element.classList.contains("ignore-header")||l&&"shouldIgnore"in l){o.push({level:r.level,shouldIgnore:!0});return}r.level>t||r.level{const o=ee("VPDocOutlineItem",!0);return i(),h("ul",{class:A(["VPDocOutlineItem",t.root?"root":"nested"])},[(i(!0),h(H,null,j(t.headers,({children:a,link:r,title:l})=>(i(),h("li",null,[d("a",{class:"outline-link",href:r,onClick:e,title:l},C(l),9,Yt),a!=null&&a.length?(i(),P(o,{key:0,headers:a},null,8,["headers"])):g("",!0)]))),256))],2)}}}),nt=V(Qt,[["__scopeId","data-v-da421f78"]]),Zt={class:"content"},en={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},tn=k({__name:"VPDocAsideOutline",setup(n){const{frontmatter:e,theme:t}=N(),s=Je([]);me(()=>{s.value=He(e.value.outline??t.value.outline)});const o=T(),a=T();return Jt(o,a),(r,l)=>(i(),h("nav",{"aria-labelledby":"doc-outline-aria-label",class:A(["VPDocAsideOutline",{"has-outline":s.value.length>0}]),ref_key:"container",ref:o},[d("div",Zt,[d("div",{class:"outline-marker",ref_key:"marker",ref:a},null,512),d("div",en,C(c(tt)(c(t))),1),$(nt,{headers:s.value,root:!0},null,8,["headers"])])],2))}}),nn=V(tn,[["__scopeId","data-v-dfbd9fb8"]]),sn={class:"VPDocAsideCarbonAds"},on=k({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(n){const e=()=>null;return(t,s)=>(i(),h("div",sn,[$(c(e),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),an={class:"VPDocAside"},rn=k({__name:"VPDocAside",setup(n){const{theme:e}=N();return(t,s)=>(i(),h("div",an,[p(t.$slots,"aside-top",{},void 0,!0),p(t.$slots,"aside-outline-before",{},void 0,!0),$(nn),p(t.$slots,"aside-outline-after",{},void 0,!0),s[0]||(s[0]=d("div",{class:"spacer"},null,-1)),p(t.$slots,"aside-ads-before",{},void 0,!0),c(e).carbonAds?(i(),P(on,{key:0,"carbon-ads":c(e).carbonAds},null,8,["carbon-ads"])):g("",!0),p(t.$slots,"aside-ads-after",{},void 0,!0),p(t.$slots,"aside-bottom",{},void 0,!0)]))}}),ln=V(rn,[["__scopeId","data-v-79cae1a0"]]);function cn(){const{theme:n,page:e}=N();return S(()=>{const{text:t="Edit this page",pattern:s=""}=n.value.editLink||{};let o;return typeof s=="function"?o=s(e.value):o=s.replace(/:path/g,e.value.filePath),{url:o,text:t}})}function un(){const{page:n,theme:e,frontmatter:t}=N();return S(()=>{var v,_,m,L,b,y,I,M;const s=et(e.value.sidebar,n.value.relativePath),o=jt(s),a=dn(o,E=>E.link.replace(/[?#].*$/,"")),r=a.findIndex(E=>ne(n.value.relativePath,E.link)),l=((v=e.value.docFooter)==null?void 0:v.prev)===!1&&!t.value.prev||t.value.prev===!1,u=((_=e.value.docFooter)==null?void 0:_.next)===!1&&!t.value.next||t.value.next===!1;return{prev:l?void 0:{text:(typeof t.value.prev=="string"?t.value.prev:typeof t.value.prev=="object"?t.value.prev.text:void 0)??((m=a[r-1])==null?void 0:m.docFooterText)??((L=a[r-1])==null?void 0:L.text),link:(typeof t.value.prev=="object"?t.value.prev.link:void 0)??((b=a[r-1])==null?void 0:b.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)??((y=a[r+1])==null?void 0:y.docFooterText)??((I=a[r+1])==null?void 0:I.text),link:(typeof t.value.next=="object"?t.value.next.link:void 0)??((M=a[r+1])==null?void 0:M.link)}}})}function dn(n,e){const t=new Set;return n.filter(s=>{const o=e(s);return t.has(o)?!1:t.add(o)})}const J=k({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(n){const e=n,t=S(()=>e.tag??(e.href?"a":"span")),s=S(()=>e.href&&xe.test(e.href)||e.target==="_blank");return(o,a)=>(i(),P(K(t.value),{class:A(["VPLink",{link:o.href,"vp-external-link-icon":s.value,"no-icon":o.noIcon}]),href:o.href?c(Ae)(o.href):void 0,target:o.target??(s.value?"_blank":void 0),rel:o.rel??(s.value?"noreferrer":void 0)},{default:f(()=>[p(o.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),pn={class:"VPLastUpdated"},hn=["datetime"],fn=k({__name:"VPDocFooterLastUpdated",setup(n){const{theme:e,page:t,lang:s}=N(),o=S(()=>new Date(t.value.lastUpdated)),a=S(()=>o.value.toISOString()),r=T("");return Z(()=>{fe(()=>{var l,u,v;r.value=new Intl.DateTimeFormat((u=(l=e.value.lastUpdated)==null?void 0:l.formatOptions)!=null&&u.forceLocale?s.value:void 0,((v=e.value.lastUpdated)==null?void 0:v.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(o.value)})}),(l,u)=>{var v;return i(),h("p",pn,[te(C(((v=c(e).lastUpdated)==null?void 0:v.text)||c(e).lastUpdatedText||"Last updated")+": ",1),d("time",{datetime:a.value},C(r.value),9,hn)])}}}),vn=V(fn,[["__scopeId","data-v-e95db471"]]),mn={key:0,class:"VPDocFooter"},_n={key:0,class:"edit-info"},gn={key:0,class:"edit-link"},kn={key:1,class:"last-updated"},bn={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},$n={class:"pager"},yn=["innerHTML"],Pn=["innerHTML"],Ln={class:"pager"},Vn=["innerHTML"],Sn=["innerHTML"],wn=k({__name:"VPDocFooter",setup(n){const{theme:e,page:t,frontmatter:s}=N(),o=cn(),a=un(),r=S(()=>e.value.editLink&&s.value.editLink!==!1),l=S(()=>t.value.lastUpdated),u=S(()=>r.value||l.value||a.value.prev||a.value.next);return(v,_)=>{var m,L,b,y;return u.value?(i(),h("footer",mn,[p(v.$slots,"doc-footer-before",{},void 0,!0),r.value||l.value?(i(),h("div",_n,[r.value?(i(),h("div",gn,[$(J,{class:"edit-link-button",href:c(o).url,"no-icon":!0},{default:f(()=>[_[0]||(_[0]=d("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),te(" "+C(c(o).text),1)]),_:1},8,["href"])])):g("",!0),l.value?(i(),h("div",kn,[$(vn)])):g("",!0)])):g("",!0),(m=c(a).prev)!=null&&m.link||(L=c(a).next)!=null&&L.link?(i(),h("nav",bn,[_[1]||(_[1]=d("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),d("div",$n,[(b=c(a).prev)!=null&&b.link?(i(),P(J,{key:0,class:"pager-link prev",href:c(a).prev.link},{default:f(()=>{var I;return[d("span",{class:"desc",innerHTML:((I=c(e).docFooter)==null?void 0:I.prev)||"Previous page"},null,8,yn),d("span",{class:"title",innerHTML:c(a).prev.text},null,8,Pn)]}),_:1},8,["href"])):g("",!0)]),d("div",Ln,[(y=c(a).next)!=null&&y.link?(i(),P(J,{key:0,class:"pager-link next",href:c(a).next.link},{default:f(()=>{var I;return[d("span",{class:"desc",innerHTML:((I=c(e).docFooter)==null?void 0:I.next)||"Next page"},null,8,Vn),d("span",{class:"title",innerHTML:c(a).next.text},null,8,Sn)]}),_:1},8,["href"])):g("",!0)])])):g("",!0)])):g("",!0)}}}),Tn=V(wn,[["__scopeId","data-v-07d71ff1"]]),Mn={class:"container"},Nn={class:"aside-container"},In={class:"aside-content"},Cn={class:"content"},An={class:"content-container"},Hn={class:"main"},Bn=k({__name:"VPDoc",setup(n){const{theme:e}=N(),t=_e(),{hasSidebar:s,hasAside:o,leftAside:a}=Y(),r=S(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(l,u)=>{const v=ee("Content");return i(),h("div",{class:A(["VPDoc",{"has-sidebar":c(s),"has-aside":c(o)}])},[p(l.$slots,"doc-top",{},void 0,!0),d("div",Mn,[c(o)?(i(),h("div",{key:0,class:A(["aside",{"left-aside":c(a)}])},[u[0]||(u[0]=d("div",{class:"aside-curtain"},null,-1)),d("div",Nn,[d("div",In,[$(ln,null,{"aside-top":f(()=>[p(l.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":f(()=>[p(l.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":f(()=>[p(l.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[p(l.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[p(l.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[p(l.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):g("",!0),d("div",Cn,[d("div",An,[p(l.$slots,"doc-before",{},void 0,!0),d("main",Hn,[$(v,{class:A(["vp-doc",[r.value,c(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),$(Tn,null,{"doc-footer-before":f(()=>[p(l.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),p(l.$slots,"doc-after",{},void 0,!0)])])]),p(l.$slots,"doc-bottom",{},void 0,!0)],2)}}}),En=V(Bn,[["__scopeId","data-v-ef3a4dda"]]),On=k({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(n){const e=n,t=S(()=>e.href&&xe.test(e.href)),s=S(()=>e.tag||(e.href?"a":"button"));return(o,a)=>(i(),P(K(s.value),{class:A(["VPButton",[o.size,o.theme]]),href:o.href?c(Ae)(o.href):void 0,target:e.target??(t.value?"_blank":void 0),rel:e.rel??(t.value?"noreferrer":void 0)},{default:f(()=>[te(C(o.text),1)]),_:1},8,["class","href","target","rel"]))}}),Dn=V(On,[["__scopeId","data-v-b20c43c2"]]),Fn=["src","alt"],zn=k({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(n){return(e,t)=>{const s=ee("VPImage",!0);return e.image?(i(),h(H,{key:0},[typeof e.image=="string"||"src"in e.image?(i(),h("img",Q({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:c(he)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,Fn)):(i(),h(H,{key:1},[$(s,Q({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),$(s,Q({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):g("",!0)}}}),ue=V(zn,[["__scopeId","data-v-4d414b82"]]),jn={class:"container"},qn={class:"main"},Un={class:"heading"},Gn=["innerHTML"],Rn=["innerHTML"],Wn=["innerHTML"],Kn={key:0,class:"actions"},Jn={key:0,class:"image"},xn={class:"image-container"},Xn=k({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(n){const e=ge("hero-image-slot-exists");return(t,s)=>(i(),h("div",{class:A(["VPHero",{"has-image":t.image||c(e)}])},[d("div",jn,[d("div",qn,[p(t.$slots,"home-hero-info-before",{},void 0,!0),p(t.$slots,"home-hero-info",{},()=>[d("h1",Un,[t.name?(i(),h("span",{key:0,innerHTML:t.name,class:"name clip"},null,8,Gn)):g("",!0),t.text?(i(),h("span",{key:1,innerHTML:t.text,class:"text"},null,8,Rn)):g("",!0)]),t.tagline?(i(),h("p",{key:0,innerHTML:t.tagline,class:"tagline"},null,8,Wn)):g("",!0)],!0),p(t.$slots,"home-hero-info-after",{},void 0,!0),t.actions?(i(),h("div",Kn,[(i(!0),h(H,null,j(t.actions,o=>(i(),h("div",{key:o.link,class:"action"},[$(Dn,{tag:"a",size:"medium",theme:o.theme,text:o.text,href:o.link,target:o.target,rel:o.rel},null,8,["theme","text","href","target","rel"])]))),128))])):g("",!0),p(t.$slots,"home-hero-actions-after",{},void 0,!0)]),t.image||c(e)?(i(),h("div",Jn,[d("div",xn,[s[0]||(s[0]=d("div",{class:"image-bg"},null,-1)),p(t.$slots,"home-hero-image",{},()=>[t.image?(i(),P(ue,{key:0,class:"image-src",image:t.image},null,8,["image"])):g("",!0)],!0)])])):g("",!0)])],2))}}),Yn=V(Xn,[["__scopeId","data-v-d266baba"]]),Qn=k({__name:"VPHomeHero",setup(n){const{frontmatter:e}=N();return(t,s)=>c(e).hero?(i(),P(Yn,{key:0,class:"VPHomeHero",name:c(e).hero.name,text:c(e).hero.text,tagline:c(e).hero.tagline,image:c(e).hero.image,actions:c(e).hero.actions},{"home-hero-info-before":f(()=>[p(t.$slots,"home-hero-info-before")]),"home-hero-info":f(()=>[p(t.$slots,"home-hero-info")]),"home-hero-info-after":f(()=>[p(t.$slots,"home-hero-info-after")]),"home-hero-actions-after":f(()=>[p(t.$slots,"home-hero-actions-after")]),"home-hero-image":f(()=>[p(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):g("",!0)}}),Zn={class:"box"},es={key:0,class:"icon"},ts=["innerHTML"],ns=["innerHTML"],ss=["innerHTML"],os={key:4,class:"link-text"},as={class:"link-text-value"},rs=k({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(n){return(e,t)=>(i(),P(J,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:f(()=>[d("article",Zn,[typeof e.icon=="object"&&e.icon.wrap?(i(),h("div",es,[$(ue,{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"?(i(),P(ue,{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?(i(),h("div",{key:2,class:"icon",innerHTML:e.icon},null,8,ts)):g("",!0),d("h2",{class:"title",innerHTML:e.title},null,8,ns),e.details?(i(),h("p",{key:3,class:"details",innerHTML:e.details},null,8,ss)):g("",!0),e.linkText?(i(),h("div",os,[d("p",as,[te(C(e.linkText)+" ",1),t[0]||(t[0]=d("span",{class:"vpi-arrow-right link-text-icon"},null,-1))])])):g("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),is=V(rs,[["__scopeId","data-v-95001937"]]),ls={key:0,class:"VPFeatures"},cs={class:"container"},us={class:"items"},ds=k({__name:"VPFeatures",props:{features:{}},setup(n){const e=n,t=S(()=>{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,o)=>s.features?(i(),h("div",ls,[d("div",cs,[d("div",us,[(i(!0),h(H,null,j(s.features,a=>(i(),h("div",{key:a.title,class:A(["item",[t.value]])},[$(is,{icon:a.icon,title:a.title,details:a.details,link:a.link,"link-text":a.linkText,rel:a.rel,target:a.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):g("",!0)}}),ps=V(ds,[["__scopeId","data-v-1da4ff3d"]]),hs=k({__name:"VPHomeFeatures",setup(n){const{frontmatter:e}=N();return(t,s)=>c(e).features?(i(),P(ps,{key:0,class:"VPHomeFeatures",features:c(e).features},null,8,["features"])):g("",!0)}}),fs=k({__name:"VPHomeContent",setup(n){const{width:e}=ft({initialWidth:0,includeScrollbar:!1});return(t,s)=>(i(),h("div",{class:"vp-doc container",style:Xe(c(e)?{"--vp-offset":`calc(50% - ${c(e)/2}px)`}:{})},[p(t.$slots,"default",{},void 0,!0)],4))}}),vs=V(fs,[["__scopeId","data-v-2498cc33"]]),ms=k({__name:"VPHome",setup(n){const{frontmatter:e,theme:t}=N();return(s,o)=>{const a=ee("Content");return i(),h("div",{class:A(["VPHome",{"external-link-icon-enabled":c(t).externalLinkIcon}])},[p(s.$slots,"home-hero-before",{},void 0,!0),$(Qn,null,{"home-hero-info-before":f(()=>[p(s.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[p(s.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[p(s.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[p(s.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[p(s.$slots,"home-hero-image",{},void 0,!0)]),_:3}),p(s.$slots,"home-hero-after",{},void 0,!0),p(s.$slots,"home-features-before",{},void 0,!0),$(hs),p(s.$slots,"home-features-after",{},void 0,!0),c(e).markdownStyles!==!1?(i(),P(vs,{key:0},{default:f(()=>[$(a)]),_:1})):(i(),P(a,{key:1}))],2)}}}),_s=V(ms,[["__scopeId","data-v-8b59c434"]]),gs={},ks={class:"VPPage"};function bs(n,e){const t=ee("Content");return i(),h("div",ks,[p(n.$slots,"page-top"),$(t),p(n.$slots,"page-bottom")])}const $s=V(gs,[["render",bs]]),ys=k({__name:"VPContent",setup(n){const{page:e,frontmatter:t}=N(),{hasSidebar:s}=Y();return(o,a)=>(i(),h("div",{class:A(["VPContent",{"has-sidebar":c(s),"is-home":c(t).layout==="home"}]),id:"VPContent"},[c(e).isNotFound?p(o.$slots,"not-found",{key:0},()=>[$(Ft)],!0):c(t).layout==="page"?(i(),P($s,{key:1},{"page-top":f(()=>[p(o.$slots,"page-top",{},void 0,!0)]),"page-bottom":f(()=>[p(o.$slots,"page-bottom",{},void 0,!0)]),_:3})):c(t).layout==="home"?(i(),P(_s,{key:2},{"home-hero-before":f(()=>[p(o.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":f(()=>[p(o.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[p(o.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[p(o.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[p(o.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[p(o.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":f(()=>[p(o.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":f(()=>[p(o.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":f(()=>[p(o.$slots,"home-features-after",{},void 0,!0)]),_:3})):c(t).layout&&c(t).layout!=="doc"?(i(),P(K(c(t).layout),{key:3})):(i(),P(En,{key:4},{"doc-top":f(()=>[p(o.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":f(()=>[p(o.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":f(()=>[p(o.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":f(()=>[p(o.$slots,"doc-before",{},void 0,!0)]),"doc-after":f(()=>[p(o.$slots,"doc-after",{},void 0,!0)]),"aside-top":f(()=>[p(o.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":f(()=>[p(o.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[p(o.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[p(o.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[p(o.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":f(()=>[p(o.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),Ps=V(ys,[["__scopeId","data-v-d2aef184"]]),Ls={class:"container"},Vs=["innerHTML"],Ss=["innerHTML"],ws=k({__name:"VPFooter",setup(n){const{theme:e,frontmatter:t}=N(),{hasSidebar:s}=Y();return(o,a)=>c(e).footer&&c(t).footer!==!1?(i(),h("footer",{key:0,class:A(["VPFooter",{"has-sidebar":c(s)}])},[d("div",Ls,[c(e).footer.message?(i(),h("p",{key:0,class:"message",innerHTML:c(e).footer.message},null,8,Vs)):g("",!0),c(e).footer.copyright?(i(),h("p",{key:1,class:"copyright",innerHTML:c(e).footer.copyright},null,8,Ss)):g("",!0)])],2)):g("",!0)}}),Ts=V(ws,[["__scopeId","data-v-e3157d6d"]]);function Ms(){const{theme:n,frontmatter:e}=N(),t=Je([]),s=S(()=>t.value.length>0);return me(()=>{t.value=He(e.value.outline??n.value.outline)}),{headers:t,hasLocalNav:s}}const Ns={class:"menu-text"},Is={class:"header"},Cs={class:"outline"},As=k({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(n){const e=n,{theme:t}=N(),s=T(!1),o=T(0),a=T(),r=T();function l(m){var L;(L=a.value)!=null&&L.contains(m.target)||(s.value=!1)}x(s,m=>{if(m){document.addEventListener("click",l);return}document.removeEventListener("click",l)}),vt("Escape",()=>{s.value=!1}),me(()=>{s.value=!1});function u(){s.value=!s.value,o.value=window.innerHeight+Math.min(window.scrollY-e.navHeight,0)}function v(m){m.target.classList.contains("outline-link")&&(r.value&&(r.value.style.transition="none"),Ce(()=>{s.value=!1}))}function _(){s.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(m,L)=>(i(),h("div",{class:"VPLocalNavOutlineDropdown",style:Xe({"--vp-vh":o.value+"px"}),ref_key:"main",ref:a},[m.headers.length>0?(i(),h("button",{key:0,onClick:u,class:A({open:s.value})},[d("span",Ns,C(c(tt)(c(t))),1),L[0]||(L[0]=d("span",{class:"vpi-chevron-right icon"},null,-1))],2)):(i(),h("button",{key:1,onClick:_},C(c(t).returnToTopLabel||"Return to top"),1)),$(Ne,{name:"flyout"},{default:f(()=>[s.value?(i(),h("div",{key:0,ref_key:"items",ref:r,class:"items",onClick:v},[d("div",Is,[d("a",{class:"top-link",href:"#",onClick:_},C(c(t).returnToTopLabel||"Return to top"),1)]),d("div",Cs,[$(nt,{headers:m.headers},null,8,["headers"])])],512)):g("",!0)]),_:1})],4))}}),Hs=V(As,[["__scopeId","data-v-d61422fe"]]),Bs={class:"container"},Es=["aria-expanded"],Os={class:"menu-text"},Ds=k({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(n){const{theme:e,frontmatter:t}=N(),{hasSidebar:s}=Y(),{headers:o}=Ms(),{y:a}=Ye(),r=T(0);Z(()=>{r.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),me(()=>{o.value=He(t.value.outline??e.value.outline)});const l=S(()=>o.value.length===0),u=S(()=>l.value&&!s.value),v=S(()=>({VPLocalNav:!0,"has-sidebar":s.value,empty:l.value,fixed:u.value}));return(_,m)=>c(t).layout!=="home"&&(!u.value||c(a)>=r.value)?(i(),h("div",{key:0,class:A(v.value)},[d("div",Bs,[c(s)?(i(),h("button",{key:0,class:"menu","aria-expanded":_.open,"aria-controls":"VPSidebarNav",onClick:m[0]||(m[0]=L=>_.$emit("open-menu"))},[m[1]||(m[1]=d("span",{class:"vpi-align-left menu-icon"},null,-1)),d("span",Os,C(c(e).sidebarMenuLabel||"Menu"),1)],8,Es)):g("",!0),$(Hs,{headers:c(o),navHeight:r.value},null,8,["headers","navHeight"])])],2)):g("",!0)}}),Fs=V(Ds,[["__scopeId","data-v-9d8129cc"]]);function zs(){const n=T(!1);function e(){n.value=!0,window.addEventListener("resize",o)}function t(){n.value=!1,window.removeEventListener("resize",o)}function s(){n.value?t():e()}function o(){window.outerWidth>=768&&t()}const a=_e();return x(()=>a.path,t),{isScreenOpen:n,openScreen:e,closeScreen:t,toggleScreen:s}}const js={},qs={class:"VPSwitch",type:"button",role:"switch"},Us={class:"check"},Gs={key:0,class:"icon"};function Rs(n,e){return i(),h("button",qs,[d("span",Us,[n.$slots.default?(i(),h("span",Gs,[p(n.$slots,"default",{},void 0,!0)])):g("",!0)])])}const Ws=V(js,[["render",Rs],["__scopeId","data-v-7012e5dd"]]),Ks=k({__name:"VPSwitchAppearance",setup(n){const{isDark:e,theme:t}=N(),s=ge("toggle-appearance",()=>{e.value=!e.value}),o=T("");return Ie(()=>{o.value=e.value?t.value.lightModeSwitchTitle||"Switch to light theme":t.value.darkModeSwitchTitle||"Switch to dark theme"}),(a,r)=>(i(),P(Ws,{title:o.value,class:"VPSwitchAppearance","aria-checked":c(e),onClick:c(s)},{default:f(()=>r[0]||(r[0]=[d("span",{class:"vpi-sun sun"},null,-1),d("span",{class:"vpi-moon moon"},null,-1)])),_:1},8,["title","aria-checked","onClick"]))}}),Be=V(Ks,[["__scopeId","data-v-fa1daf57"]]),Js={key:0,class:"VPNavBarAppearance"},xs=k({__name:"VPNavBarAppearance",setup(n){const{site:e}=N();return(t,s)=>c(e).appearance&&c(e).appearance!=="force-dark"&&c(e).appearance!=="force-auto"?(i(),h("div",Js,[$(Be)])):g("",!0)}}),Xs=V(xs,[["__scopeId","data-v-123fcb2f"]]),Ee=T();let st=!1,$e=0;function Ys(n){const e=T(!1);if(ke){!st&&Qs(),$e++;const t=x(Ee,s=>{var o,a,r;s===n.el.value||(o=n.el.value)!=null&&o.contains(s)?(e.value=!0,(a=n.onFocus)==null||a.call(n)):(e.value=!1,(r=n.onBlur)==null||r.call(n))});ve(()=>{t(),$e--,$e||Zs()})}return mt(e)}function Qs(){document.addEventListener("focusin",ot),st=!0,Ee.value=document.activeElement}function Zs(){document.removeEventListener("focusin",ot)}function ot(){Ee.value=document.activeElement}const eo={class:"VPMenuLink"},to=["innerHTML"],no=k({__name:"VPMenuLink",props:{item:{}},setup(n){const{page:e}=N();return(t,s)=>(i(),h("div",eo,[$(J,{class:A({active:c(ne)(c(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(()=>[d("span",{innerHTML:t.item.text},null,8,to)]),_:1},8,["class","href","target","rel","no-icon"])]))}}),be=V(no,[["__scopeId","data-v-65e4a6b1"]]),so={class:"VPMenuGroup"},oo={key:0,class:"title"},ao=k({__name:"VPMenuGroup",props:{text:{},items:{}},setup(n){return(e,t)=>(i(),h("div",so,[e.text?(i(),h("p",oo,C(e.text),1)):g("",!0),(i(!0),h(H,null,j(e.items,s=>(i(),h(H,null,["link"in s?(i(),P(be,{key:0,item:s},null,8,["item"])):g("",!0)],64))),256))]))}}),ro=V(ao,[["__scopeId","data-v-2bec9359"]]),io={class:"VPMenu"},lo={key:0,class:"items"},co=k({__name:"VPMenu",props:{items:{}},setup(n){return(e,t)=>(i(),h("div",io,[e.items?(i(),h("div",lo,[(i(!0),h(H,null,j(e.items,s=>(i(),h(H,{key:JSON.stringify(s)},["link"in s?(i(),P(be,{key:0,item:s},null,8,["item"])):"component"in s?(i(),P(K(s.component),Q({key:1,ref_for:!0},s.props),null,16)):(i(),P(ro,{key:2,text:s.text,items:s.items},null,8,["text","items"]))],64))),128))])):g("",!0),p(e.$slots,"default",{},void 0,!0)]))}}),uo=V(co,[["__scopeId","data-v-39eca401"]]),po=["aria-expanded","aria-label"],ho={key:0,class:"text"},fo=["innerHTML"],vo={key:1,class:"vpi-more-horizontal icon"},mo={class:"menu"},_o=k({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(n){const e=T(!1),t=T();Ys({el:t,onBlur:s});function s(){e.value=!1}return(o,a)=>(i(),h("div",{class:"VPFlyout",ref_key:"el",ref:t,onMouseenter:a[1]||(a[1]=r=>e.value=!0),onMouseleave:a[2]||(a[2]=r=>e.value=!1)},[d("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":e.value,"aria-label":o.label,onClick:a[0]||(a[0]=r=>e.value=!e.value)},[o.button||o.icon?(i(),h("span",ho,[o.icon?(i(),h("span",{key:0,class:A([o.icon,"option-icon"])},null,2)):g("",!0),o.button?(i(),h("span",{key:1,innerHTML:o.button},null,8,fo)):g("",!0),a[3]||(a[3]=d("span",{class:"vpi-chevron-down text-icon"},null,-1))])):(i(),h("span",vo))],8,po),d("div",mo,[$(uo,{items:o.items},{default:f(()=>[p(o.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),Oe=V(_o,[["__scopeId","data-v-40e55da0"]]),go=["href","aria-label","innerHTML"],ko=k({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(n){const e=n,t=T();Z(async()=>{var a;await Ce();const o=(a=t.value)==null?void 0:a.children[0];o instanceof HTMLElement&&o.className.startsWith("vpi-social-")&&(getComputedStyle(o).maskImage||getComputedStyle(o).webkitMaskImage)==="none"&&o.style.setProperty("--icon",`url('https://api.iconify.design/simple-icons/${e.icon}.svg')`)});const s=S(()=>typeof e.icon=="object"?e.icon.svg:``);return(o,a)=>(i(),h("a",{ref_key:"el",ref:t,class:"VPSocialLink no-icon",href:o.link,"aria-label":o.ariaLabel??(typeof o.icon=="string"?o.icon:""),target:"_blank",rel:"noopener",innerHTML:s.value},null,8,go))}}),bo=V(ko,[["__scopeId","data-v-fbf39218"]]),$o={class:"VPSocialLinks"},yo=k({__name:"VPSocialLinks",props:{links:{}},setup(n){return(e,t)=>(i(),h("div",$o,[(i(!0),h(H,null,j(e.links,({link:s,icon:o,ariaLabel:a})=>(i(),P(bo,{key:s,icon:o,link:s,ariaLabel:a},null,8,["icon","link","ariaLabel"]))),128))]))}}),De=V(yo,[["__scopeId","data-v-f2234a39"]]),Po={key:0,class:"group translations"},Lo={class:"trans-title"},Vo={key:1,class:"group"},So={class:"item appearance"},wo={class:"label"},To={class:"appearance-action"},Mo={key:2,class:"group"},No={class:"item social-links"},Io=k({__name:"VPNavBarExtra",setup(n){const{site:e,theme:t}=N(),{localeLinks:s,currentLang:o}=oe({correspondingLink:!0}),a=S(()=>s.value.length&&o.value.label||e.value.appearance||t.value.socialLinks);return(r,l)=>a.value?(i(),P(Oe,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:f(()=>[c(s).length&&c(o).label?(i(),h("div",Po,[d("p",Lo,C(c(o).label),1),(i(!0),h(H,null,j(c(s),u=>(i(),P(be,{key:u.link,item:u},null,8,["item"]))),128))])):g("",!0),c(e).appearance&&c(e).appearance!=="force-dark"&&c(e).appearance!=="force-auto"?(i(),h("div",Vo,[d("div",So,[d("p",wo,C(c(t).darkModeSwitchLabel||"Appearance"),1),d("div",To,[$(Be)])])])):g("",!0),c(t).socialLinks?(i(),h("div",Mo,[d("div",No,[$(De,{class:"social-links-list",links:c(t).socialLinks},null,8,["links"])])])):g("",!0)]),_:1})):g("",!0)}}),Co=V(Io,[["__scopeId","data-v-0c845e5d"]]),Ao=["aria-expanded"],Ho=k({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(n){return(e,t)=>(i(),h("button",{type:"button",class:A(["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]=[d("span",{class:"container"},[d("span",{class:"top"}),d("span",{class:"middle"}),d("span",{class:"bottom"})],-1)]),10,Ao))}}),Bo=V(Ho,[["__scopeId","data-v-670493dd"]]),Eo=["innerHTML"],Oo=k({__name:"VPNavBarMenuLink",props:{item:{}},setup(n){const{page:e}=N();return(t,s)=>(i(),P(J,{class:A({VPNavBarMenuLink:!0,active:c(ne)(c(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(()=>[d("span",{innerHTML:t.item.text},null,8,Eo)]),_:1},8,["class","href","target","rel","no-icon"]))}}),Do=V(Oo,[["__scopeId","data-v-8dbce4d0"]]),Fo=k({__name:"VPNavBarMenuGroup",props:{item:{}},setup(n){const e=n,{page:t}=N(),s=a=>"component"in a?!1:"link"in a?ne(t.value.relativePath,a.link,!!e.item.activeMatch):a.items.some(s),o=S(()=>s(e.item));return(a,r)=>(i(),P(Oe,{class:A({VPNavBarMenuGroup:!0,active:c(ne)(c(t).relativePath,a.item.activeMatch,!!a.item.activeMatch)||o.value}),button:a.item.text,items:a.item.items},null,8,["class","button","items"]))}}),zo={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},jo=k({__name:"VPNavBarMenu",setup(n){const{theme:e}=N();return(t,s)=>c(e).nav?(i(),h("nav",zo,[s[0]||(s[0]=d("span",{id:"main-nav-aria-label",class:"visually-hidden"}," Main Navigation ",-1)),(i(!0),h(H,null,j(c(e).nav,o=>(i(),h(H,{key:JSON.stringify(o)},["link"in o?(i(),P(Do,{key:0,item:o},null,8,["item"])):"component"in o?(i(),P(K(o.component),Q({key:1,ref_for:!0},o.props),null,16)):(i(),P(Fo,{key:2,item:o},null,8,["item"]))],64))),128))])):g("",!0)}}),qo=V(jo,[["__scopeId","data-v-5bacfe89"]]),Uo="/document/assets/flex-logo.BJA2J7hW.svg";function ye(n,e){return typeof n>"u"?e:n}function qe(n){const e=Array(n);for(let t=0;t=this.minlength&&(l||!r[_])){let L=ie(u,o,v),b="";switch(this.tokenize){case"full":if(3y;I--)if(I-y>=this.minlength){const M=ie(u,o,v,m,y);b=_.substring(y,I),this.push_index(r,b,M,n,t)}break}case"reverse":if(2=this.minlength){const I=ie(u,o,v,m,y);this.push_index(r,b,I,n,t)}b=""}case"forward":if(1=this.minlength&&this.push_index(r,b,L,n,t);break}default:if(this.boost&&(L=Math.min(0|L/this.boost(e,_,v),u-1)),this.push_index(r,_,L,n,t),l&&1=this.minlength&&!y[_]){y[_]=1;const R=ie(I+(o/2>I?0:1),o,v,E-1,D-1),X=this.bidirectional&&_>M;this.push_index(a,X?M:_,R,n,t,X?_:M)}}}}}this.fastupdate||(this.register[n]=1)}}return this};function ie(n,e,t,s,o){return t&&1=this.minlength&&!m[b]){if(!this.optimize&&!a&&!this.map[b])return r;L[I++]=b,m[b]=1}n=L,s=n.length}if(!s)return r;e||(e=100);let u,v=this.depth&&1=t)))));b++);if(v)return o?Re(l,t,0):void(n[n.length]=l)}return!e&&l};function Re(n,e,t){return n=n.length===1?n[0]:Ro(n),t||n.length>e?n.slice(t,t+e):n}function We(n,e,t,s){if(t){const o=s&&e>t;n=n[o?e:t],n=n&&n[o?t:e]}else n=n[e];return n}U.prototype.contain=function(n){return!!this.register[n]},U.prototype.update=function(n,e){return this.remove(n).add(n,e)},U.prototype.remove=function(n,e){const t=this.register[n];if(t){if(this.fastupdate)for(let s,o=0;o{if(a.value&&m.value){for(var B=m.value.search(a.value,{enrich:!0}),w=[],F=0;F!B||!B.length?[]:B.reduce((F,z)=>(F[w(z)]||(F[w(z)]=[]),F[w(z)].push(z),F),{}),R=()=>{ae(),o.value=!0,Ce(()=>{var B;X&&o.value&&((B=l.value)==null||B.focus())})};let X=!0,Fe=()=>{};ve(()=>{X=!1,Fe()}),x(a,()=>{y.value=0},{flush:"sync"}),Z(async()=>{var z,q;const B=await gt(()=>import("./virtual_search-data.DK5dZ1YJ.js"),[]);if(!X)return;u.value=B.default.INDEX_DATA,v.value=B.default.PREVIEW_LOOKUP,_.value=B.default.Options,r.value=window.location.origin+he(t.value==="root"?"/":t.value),L.value=((z=_.value)==null?void 0:z.buttonLabel)||L.value,b.value=((q=_.value)==null?void 0:q.placeholder)||b.value;var w=new U(_.value);w.import("reg",u.value.reg),w.import("cfg",u.value.cfg),w.import("map",u.value.map),w.import("ctx",u.value.ctx),m.value=w,s.value.innerHTML=/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)?"⌘":"Ctrl";const F=O=>{var W;O.key==="k"&&(O.ctrlKey||O.metaKey)&&(O.preventDefault(),R()),O.key==="Escape"&&o.value&&(O.preventDefault(),ae(),(W=it())==null||W.focus())};window.addEventListener("keydown",F),Fe=()=>window.removeEventListener("keydown",F)});const ze=S(()=>D(E.value,B=>B.link.split("/").slice(0,-1).join("-"))),rt=S(()=>Object.values(ze.value).flat().map(B=>B.id));function ae(){o.value=!1,a.value=""}function it(){return document.querySelector("#docsearch button")}const lt=B=>{var O;if(B.isComposing||!["ArrowUp","ArrowDown","Enter"].includes(B.key))return;B.preventDefault();const w=Array.from(((O=I.value)==null?void 0:O.querySelectorAll(".search-group a"))||[]);if(!w.length)return;const F=w.findIndex(W=>W.classList.contains("link-focused"));if(B.key==="Enter"){const W=w[Math.max(F,0)].href;ae(),M.go(W);return}const z=B.key==="ArrowDown"?1:-1,q=(Math.max(F,0)+z+w.length)%w.length;y.value=rt.value[q],w[q].scrollIntoView({block:"nearest"})};return(B,w)=>{const F=ee("ClientOnly");return i(),h("div",da,[$(F,null,{default:f(()=>[(i(),P($t,{to:"body"},[je(d("div",{class:"VPPluginSearch-modal-back",onClick:w[3]||(w[3]=z=>o.value=!1),onKeydown:lt},[d("div",{class:"VPPluginSearch-modal",onClick:w[2]||(w[2]=Ve(()=>{},["stop"])),ref_key:"modal",ref:I},[d("form",{class:"DocSearch-Form",onSubmit:w[1]||(w[1]=Ve(()=>{},["prevent"]))},[w[5]||(w[5]=d("label",{class:"DocSearch-MagnifierLabel",for:"docsearch-input",id:"docsearch-label"},[d("svg",{width:"20",height:"20",class:"DocSearch-Search-Icon",viewBox:"0 0 20 20"},[d("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none","fill-rule":"evenodd","stroke-linecap":"round","stroke-linejoin":"round"})])],-1)),je(d("input",{class:"DocSearch-Input","aria-autocomplete":"both","aria-labelledby":"docsearch-label",id:"docsearch-input",autocomplete:"off",autocorrect:"off",autocapitalize:"off",enterkeyhint:"search",spellcheck:"false",autofocus:"true","onUpdate:modelValue":w[0]||(w[0]=z=>a.value=z),placeholder:b.value,maxlength:"64",type:"search",ref_key:"input",ref:l},null,8,pa),[[bt,a.value]])],32),d("div",ha,[(i(!0),h(H,null,j(ze.value,(z,q)=>(i(),h("div",{class:"search-group",key:q},[d("span",fa,C(q?q.toString()[0].toUpperCase()+q.toString().slice(1):"Home"),1),(i(!0),h(H,null,j(z,(O,W)=>(i(),h("a",{href:r.value+O.link,key:O.id,onClick:ae,onMouseenter:re=>y.value=O.id,class:A({"link-focused":y.value==O.id}),id:W.toString()},[d("div",ma,[d("span",_a,C(O.link.includes("#")?"#":"▤"),1),d("div",ga,[d("h3",null,C(O.title),1),d("p",null,[d("div",{innerHTML:O.preview},null,8,ka)])]),w[6]||(w[6]=d("span",{class:"VPPluginSearch-search-item-icon"},"↪",-1))])],42,va))),128))]))),128))]),w[7]||(w[7]=d("img",{class:"VPPluginSearch-flex-logo",src:Uo,alt:"flex logo"},null,-1))],512)],544),[[kt,o.value]])]))]),_:1}),d("div",{id:"docsearch",onClick:w[4]||(w[4]=z=>R())},[d("button",ba,[d("span",$a,[w[8]||(w[8]=d("svg",{width:"20",height:"20",class:"DocSearch-Search-Icon",viewBox:"0 0 20 20"},[d("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none","fill-rule":"evenodd","stroke-linecap":"round","stroke-linejoin":"round"})],-1)),d("span",ya,C(L.value),1)]),d("span",Pa,[d("span",{class:"DocSearch-Button-Key",ref_key:"metaKey",ref:s},"Meta",512),w[9]||(w[9]=d("span",{class:"DocSearch-Button-Key"},"K",-1))])])])])}}}),Va=k({__name:"VPNavBarSocialLinks",setup(n){const{theme:e}=N();return(t,s)=>c(e).socialLinks?(i(),P(De,{key:0,class:"VPNavBarSocialLinks",links:c(e).socialLinks},null,8,["links"])):g("",!0)}}),Sa=V(Va,[["__scopeId","data-v-08b35e6f"]]),wa=["href","rel","target"],Ta=["innerHTML"],Ma={key:2},Na=k({__name:"VPNavBarTitle",setup(n){const{site:e,theme:t}=N(),{hasSidebar:s}=Y(),{currentLang:o}=oe(),a=S(()=>{var u;return typeof t.value.logoLink=="string"?t.value.logoLink:(u=t.value.logoLink)==null?void 0:u.link}),r=S(()=>{var u;return typeof t.value.logoLink=="string"||(u=t.value.logoLink)==null?void 0:u.rel}),l=S(()=>{var u;return typeof t.value.logoLink=="string"||(u=t.value.logoLink)==null?void 0:u.target});return(u,v)=>(i(),h("div",{class:A(["VPNavBarTitle",{"has-sidebar":c(s)}])},[d("a",{class:"title",href:a.value??c(Ae)(c(o).link),rel:r.value,target:l.value},[p(u.$slots,"nav-bar-title-before",{},void 0,!0),c(t).logo?(i(),P(ue,{key:0,class:"logo",image:c(t).logo},null,8,["image"])):g("",!0),c(t).siteTitle?(i(),h("span",{key:1,innerHTML:c(t).siteTitle},null,8,Ta)):c(t).siteTitle===void 0?(i(),h("span",Ma,C(c(e).title),1)):g("",!0),p(u.$slots,"nav-bar-title-after",{},void 0,!0)],8,wa)],2))}}),Ia=V(Na,[["__scopeId","data-v-5622a072"]]),Ca={class:"items"},Aa={class:"title"},Ha=k({__name:"VPNavBarTranslations",setup(n){const{theme:e}=N(),{localeLinks:t,currentLang:s}=oe({correspondingLink:!0});return(o,a)=>c(t).length&&c(s).label?(i(),P(Oe,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:c(e).langMenuLabel||"Change language"},{default:f(()=>[d("div",Ca,[d("p",Aa,C(c(s).label),1),(i(!0),h(H,null,j(c(t),r=>(i(),P(be,{key:r.link,item:r},null,8,["item"]))),128))])]),_:1},8,["label"])):g("",!0)}}),Ba=V(Ha,[["__scopeId","data-v-dac637f3"]]),Ea={class:"wrapper"},Oa={class:"container"},Da={class:"title"},Fa={class:"content"},za={class:"content-body"},ja=k({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(n){const e=n,{y:t}=Ye(),{hasSidebar:s}=Y(),{frontmatter:o}=N(),a=T({});return Ie(()=>{a.value={"has-sidebar":s.value,home:o.value.layout==="home",top:t.value===0,"screen-open":e.isScreenOpen}}),(r,l)=>(i(),h("div",{class:A(["VPNavBar",a.value])},[d("div",Ea,[d("div",Oa,[d("div",Da,[$(Ia,null,{"nav-bar-title-before":f(()=>[p(r.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[p(r.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),d("div",Fa,[d("div",za,[p(r.$slots,"nav-bar-content-before",{},void 0,!0),$(La,{class:"search"}),$(qo,{class:"menu"}),$(Ba,{class:"translations"}),$(Xs,{class:"appearance"}),$(Sa,{class:"social-links"}),$(Co,{class:"extra"}),p(r.$slots,"nav-bar-content-after",{},void 0,!0),$(Bo,{class:"hamburger",active:r.isScreenOpen,onClick:l[0]||(l[0]=u=>r.$emit("toggle-screen"))},null,8,["active"])])])])]),l[1]||(l[1]=d("div",{class:"divider"},[d("div",{class:"divider-line"})],-1))],2))}}),qa=V(ja,[["__scopeId","data-v-bb7529ee"]]),Ua={key:0,class:"VPNavScreenAppearance"},Ga={class:"text"},Ra=k({__name:"VPNavScreenAppearance",setup(n){const{site:e,theme:t}=N();return(s,o)=>c(e).appearance&&c(e).appearance!=="force-dark"&&c(e).appearance!=="force-auto"?(i(),h("div",Ua,[d("p",Ga,C(c(t).darkModeSwitchLabel||"Appearance"),1),$(Be)])):g("",!0)}}),Wa=V(Ra,[["__scopeId","data-v-774971f8"]]),Ka=["innerHTML"],Ja=k({__name:"VPNavScreenMenuLink",props:{item:{}},setup(n){const e=ge("close-screen");return(t,s)=>(i(),P(J,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon,onClick:c(e)},{default:f(()=>[d("span",{innerHTML:t.item.text},null,8,Ka)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),xa=V(Ja,[["__scopeId","data-v-29871565"]]),Xa=["innerHTML"],Ya=k({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(n){const e=ge("close-screen");return(t,s)=>(i(),P(J,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon,onClick:c(e)},{default:f(()=>[d("span",{innerHTML:t.item.text},null,8,Xa)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),at=V(Ya,[["__scopeId","data-v-581896e9"]]),Qa={class:"VPNavScreenMenuGroupSection"},Za={key:0,class:"title"},er=k({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(n){return(e,t)=>(i(),h("div",Qa,[e.text?(i(),h("p",Za,C(e.text),1)):g("",!0),(i(!0),h(H,null,j(e.items,s=>(i(),P(at,{key:s.text,item:s},null,8,["item"]))),128))]))}}),tr=V(er,[["__scopeId","data-v-836cddb8"]]),nr=["aria-controls","aria-expanded"],sr=["innerHTML"],or=["id"],ar={key:0,class:"item"},rr={key:1,class:"item"},ir={key:2,class:"group"},lr=k({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(n){const e=n,t=T(!1),s=S(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function o(){t.value=!t.value}return(a,r)=>(i(),h("div",{class:A(["VPNavScreenMenuGroup",{open:t.value}])},[d("button",{class:"button","aria-controls":s.value,"aria-expanded":t.value,onClick:o},[d("span",{class:"button-text",innerHTML:a.text},null,8,sr),r[0]||(r[0]=d("span",{class:"vpi-plus button-icon"},null,-1))],8,nr),d("div",{id:s.value,class:"items"},[(i(!0),h(H,null,j(a.items,l=>(i(),h(H,{key:JSON.stringify(l)},["link"in l?(i(),h("div",ar,[$(at,{item:l},null,8,["item"])])):"component"in l?(i(),h("div",rr,[(i(),P(K(l.component),Q({ref_for:!0},l.props,{"screen-menu":""}),null,16))])):(i(),h("div",ir,[$(tr,{text:l.text,items:l.items},null,8,["text","items"])]))],64))),128))],8,or)],2))}}),cr=V(lr,[["__scopeId","data-v-a8d3502a"]]),ur={key:0,class:"VPNavScreenMenu"},dr=k({__name:"VPNavScreenMenu",setup(n){const{theme:e}=N();return(t,s)=>c(e).nav?(i(),h("nav",ur,[(i(!0),h(H,null,j(c(e).nav,o=>(i(),h(H,{key:JSON.stringify(o)},["link"in o?(i(),P(xa,{key:0,item:o},null,8,["item"])):"component"in o?(i(),P(K(o.component),Q({key:1,ref_for:!0},o.props,{"screen-menu":""}),null,16)):(i(),P(cr,{key:2,text:o.text||"",items:o.items},null,8,["text","items"]))],64))),128))])):g("",!0)}}),pr=k({__name:"VPNavScreenSocialLinks",setup(n){const{theme:e}=N();return(t,s)=>c(e).socialLinks?(i(),P(De,{key:0,class:"VPNavScreenSocialLinks",links:c(e).socialLinks},null,8,["links"])):g("",!0)}}),hr={class:"list"},fr=k({__name:"VPNavScreenTranslations",setup(n){const{localeLinks:e,currentLang:t}=oe({correspondingLink:!0}),s=T(!1);function o(){s.value=!s.value}return(a,r)=>c(e).length&&c(t).label?(i(),h("div",{key:0,class:A(["VPNavScreenTranslations",{open:s.value}])},[d("button",{class:"title",onClick:o},[r[0]||(r[0]=d("span",{class:"vpi-languages icon lang"},null,-1)),te(" "+C(c(t).label)+" ",1),r[1]||(r[1]=d("span",{class:"vpi-chevron-down icon chevron"},null,-1))]),d("ul",hr,[(i(!0),h(H,null,j(c(e),l=>(i(),h("li",{key:l.link,class:"item"},[$(J,{class:"link",href:l.link},{default:f(()=>[te(C(l.text),1)]),_:2},1032,["href"])]))),128))])],2)):g("",!0)}}),vr=V(fr,[["__scopeId","data-v-0d43316b"]]),mr={class:"container"},_r=k({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(n){const e=T(null),t=Qe(ke?document.body:null);return(s,o)=>(i(),P(Ne,{name:"fade",onEnter:o[0]||(o[0]=a=>t.value=!0),onAfterLeave:o[1]||(o[1]=a=>t.value=!1)},{default:f(()=>[s.open?(i(),h("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e,id:"VPNavScreen"},[d("div",mr,[p(s.$slots,"nav-screen-content-before",{},void 0,!0),$(dr,{class:"menu"}),$(vr,{class:"translations"}),$(Wa,{class:"appearance"}),$(pr,{class:"social-links"}),p(s.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):g("",!0)]),_:3}))}}),gr=V(_r,[["__scopeId","data-v-34fa79a7"]]),kr={key:0,class:"VPNav"},br=k({__name:"VPNav",setup(n){const{isScreenOpen:e,closeScreen:t,toggleScreen:s}=zs(),{frontmatter:o}=N(),a=S(()=>o.value.navbar!==!1);return Ze("close-screen",t),fe(()=>{ke&&document.documentElement.classList.toggle("hide-nav",!a.value)}),(r,l)=>a.value?(i(),h("header",kr,[$(qa,{"is-screen-open":c(e),onToggleScreen:c(s)},{"nav-bar-title-before":f(()=>[p(r.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[p(r.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":f(()=>[p(r.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":f(()=>[p(r.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),$(gr,{open:c(e)},{"nav-screen-content-before":f(()=>[p(r.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":f(()=>[p(r.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):g("",!0)}}),$r=V(br,[["__scopeId","data-v-a46e73f0"]]),yr=["role","tabindex"],Pr={key:1,class:"items"},Lr=k({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(n){const e=n,{collapsed:t,collapsible:s,isLink:o,isActiveLink:a,hasActiveLink:r,hasChildren:l,toggle:u}=Ut(S(()=>e.item)),v=S(()=>l.value?"section":"div"),_=S(()=>o.value?"a":"div"),m=S(()=>l.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),L=S(()=>o.value?void 0:"button"),b=S(()=>[[`level-${e.depth}`],{collapsible:s.value},{collapsed:t.value},{"is-link":o.value},{"is-active":a.value},{"has-active":r.value}]);function y(M){"key"in M&&M.key!=="Enter"||!e.item.link&&u()}function I(){e.item.link&&u()}return(M,E)=>{const D=ee("VPSidebarItem",!0);return i(),P(K(v.value),{class:A(["VPSidebarItem",b.value])},{default:f(()=>[M.item.text?(i(),h("div",Q({key:0,class:"item",role:L.value},yt(M.item.items?{click:y,keydown:y}:{},!0),{tabindex:M.item.items&&0}),[E[1]||(E[1]=d("div",{class:"indicator"},null,-1)),M.item.link?(i(),P(J,{key:0,tag:_.value,class:"link",href:M.item.link,rel:M.item.rel,target:M.item.target},{default:f(()=>[(i(),P(K(m.value),{class:"text",innerHTML:M.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(i(),P(K(m.value),{key:1,class:"text",innerHTML:M.item.text},null,8,["innerHTML"])),M.item.collapsed!=null&&M.item.items&&M.item.items.length?(i(),h("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:I,onKeydown:Pt(I,["enter"]),tabindex:"0"},E[0]||(E[0]=[d("span",{class:"vpi-chevron-right caret-icon"},null,-1)]),32)):g("",!0)],16,yr)):g("",!0),M.item.items&&M.item.items.length?(i(),h("div",Pr,[M.depth<5?(i(!0),h(H,{key:0},j(M.item.items,R=>(i(),P(D,{key:R.text,item:R,depth:M.depth+1},null,8,["item","depth"]))),128)):g("",!0)])):g("",!0)]),_:1},8,["class"])}}}),Vr=V(Lr,[["__scopeId","data-v-2e0476bc"]]),Sr=k({__name:"VPSidebarGroup",props:{items:{}},setup(n){const e=T(!0);let t=null;return Z(()=>{t=setTimeout(()=>{t=null,e.value=!1},300)}),Lt(()=>{t!=null&&(clearTimeout(t),t=null)}),(s,o)=>(i(!0),h(H,null,j(s.items,a=>(i(),h("div",{key:a.text,class:A(["group",{"no-transition":e.value}])},[$(Vr,{item:a,depth:0},null,8,["item"])],2))),128))}}),wr=V(Sr,[["__scopeId","data-v-ec086cd5"]]),Tr={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},Mr=k({__name:"VPSidebar",props:{open:{type:Boolean}},setup(n){const{sidebarGroups:e,hasSidebar:t}=Y(),s=n,o=T(null),a=Qe(ke?document.body:null);x([s,o],()=>{var l;s.open?(a.value=!0,(l=o.value)==null||l.focus()):a.value=!1},{immediate:!0,flush:"post"});const r=T(0);return x(e,()=>{r.value+=1},{deep:!0}),(l,u)=>c(t)?(i(),h("aside",{key:0,class:A(["VPSidebar",{open:l.open}]),ref_key:"navEl",ref:o,onClick:u[0]||(u[0]=Ve(()=>{},["stop"]))},[u[2]||(u[2]=d("div",{class:"curtain"},null,-1)),d("nav",Tr,[u[1]||(u[1]=d("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),p(l.$slots,"sidebar-nav-before",{},void 0,!0),(i(),P(wr,{items:c(e),key:r.value},null,8,["items"])),p(l.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):g("",!0)}}),Nr=V(Mr,[["__scopeId","data-v-12a40e3d"]]),Ir=k({__name:"VPSkipLink",setup(n){const{theme:e}=N(),t=_e(),s=T();x(()=>t.path,()=>s.value.focus());function o({target:a}){const r=document.getElementById(decodeURIComponent(a.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(a,r)=>(i(),h(H,null,[d("span",{ref_key:"backToTop",ref:s,tabindex:"-1"},null,512),d("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:o},C(c(e).skipToContentLabel||"Skip to content"),1)],64))}}),Cr=V(Ir,[["__scopeId","data-v-17ad389b"]]),Ar=k({__name:"Layout",setup(n){const{isOpen:e,open:t,close:s}=Y(),o=_e();x(()=>o.path,s),qt(e,s);const{frontmatter:a}=N(),r=Vt(),l=S(()=>!!r["home-hero-image"]);return Ze("hero-image-slot-exists",l),(u,v)=>{const _=ee("Content");return c(a).layout!==!1?(i(),h("div",{key:0,class:A(["Layout",c(a).pageClass])},[p(u.$slots,"layout-top",{},void 0,!0),$(Cr),$(Mt,{class:"backdrop",show:c(e),onClick:c(s)},null,8,["show","onClick"]),$($r,null,{"nav-bar-title-before":f(()=>[p(u.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[p(u.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":f(()=>[p(u.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":f(()=>[p(u.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":f(()=>[p(u.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":f(()=>[p(u.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),$(Fs,{open:c(e),onOpenMenu:c(t)},null,8,["open","onOpenMenu"]),$(Nr,{open:c(e)},{"sidebar-nav-before":f(()=>[p(u.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":f(()=>[p(u.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),$(Ps,null,{"page-top":f(()=>[p(u.$slots,"page-top",{},void 0,!0)]),"page-bottom":f(()=>[p(u.$slots,"page-bottom",{},void 0,!0)]),"not-found":f(()=>[p(u.$slots,"not-found",{},void 0,!0)]),"home-hero-before":f(()=>[p(u.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":f(()=>[p(u.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[p(u.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[p(u.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[p(u.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[p(u.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":f(()=>[p(u.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":f(()=>[p(u.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":f(()=>[p(u.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":f(()=>[p(u.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":f(()=>[p(u.$slots,"doc-before",{},void 0,!0)]),"doc-after":f(()=>[p(u.$slots,"doc-after",{},void 0,!0)]),"doc-top":f(()=>[p(u.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":f(()=>[p(u.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":f(()=>[p(u.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":f(()=>[p(u.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":f(()=>[p(u.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[p(u.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[p(u.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[p(u.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),$(Ts),p(u.$slots,"layout-bottom",{},void 0,!0)],2)):(i(),P(_,{key:1}))}}}),Hr=V(Ar,[["__scopeId","data-v-c4daae71"]]),Er={Layout:Hr,enhanceApp:({app:n})=>{n.component("Badge",St)}};export{Er as t};
diff --git a/docs/document/assets/chunks/theme.DyJGd-oY.js b/docs/document/assets/chunks/theme.DyJGd-oY.js
deleted file mode 100644
index 4f2d0592c..000000000
--- a/docs/document/assets/chunks/theme.DyJGd-oY.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as k,c as h,r as p,n as A,o as i,a as ee,t as C,b as P,w as f,T as we,e as g,_ as V,u as Re,i as it,f as lt,g as he,h as S,j as d,k as c,l as te,m as Pe,p as T,q as J,s as fe,v as Q,x as Me,y as Ne,z as ct,A as ut,F as H,B as z,C as Z,D as We,E as ve,G as y,H as W,I as Ke,J as me,K as Y,L as _e,M as dt,N as Je,O as pt,P as Ie,Q as xe,R as ge,S as ht,U as ft,V as vt,W as Fe,X as mt,Y as Xe,Z as _t,$ as gt,a0 as Ye,a1 as Qe,a2 as kt,a3 as bt,a4 as $t,a5 as yt}from"./framework.xxfEszSJ.js";const Pt=k({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(n){return(e,t)=>(i(),h("span",{class:A(["VPBadge",e.type])},[p(e.$slots,"default",{},()=>[ee(C(e.text),1)])],2))}}),Lt={key:0,class:"VPBackdrop"},Vt=k({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(n){return(e,t)=>(i(),P(we,{name:"fade"},{default:f(()=>[e.show?(i(),h("div",Lt)):g("",!0)]),_:1}))}}),St=V(Vt,[["__scopeId","data-v-b2600058"]]),M=Re;function Tt(n,e){let t,s=!1;return()=>{t&&clearTimeout(t),s?t=setTimeout(n,e):(n(),(s=!0)&&setTimeout(()=>s=!1,e))}}function Le(n){return n.startsWith("/")?n:`/${n}`}function Ce(n){const{pathname:e,search:t,hash:s,protocol:o}=new URL(n,"http://a.com");if(it(n)||n.startsWith("#")||!o.startsWith("http")||!lt(e))return n;const{site:a}=M(),r=e.endsWith("/")||e.endsWith(".html")?n:n.replace(/(?:(^\.+)\/)?.*$/,`$1${e.replace(/(\.md)?$/,a.value.cleanUrls?"":".html")}${t}${s}`);return he(r)}function ae({correspondingLink:n=!1}={}){const{site:e,localeIndex:t,page:s,theme:o,hash:a}=M(),r=S(()=>{var u,v;return{label:(u=e.value.locales[t.value])==null?void 0:u.label,link:((v=e.value.locales[t.value])==null?void 0:v.link)||(t.value==="root"?"/":`/${t.value}/`)}});return{localeLinks:S(()=>Object.entries(e.value.locales).flatMap(([u,v])=>r.value.label===v.label?[]:{text:v.label,link:wt(v.link||(u==="root"?"/":`/${u}/`),o.value.i18nRouting!==!1&&n,s.value.relativePath.slice(r.value.link.length-1),!e.value.cleanUrls)+a.value})),currentLang:r}}function wt(n,e,t,s){return e?n.replace(/\/$/,"")+Le(t.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,s?".html":"")):n}const Mt={class:"NotFound"},Nt={class:"code"},It={class:"title"},Ct={class:"quote"},At={class:"action"},Ht=["href","aria-label"],Bt=k({__name:"NotFound",setup(n){const{theme:e}=M(),{currentLang:t}=ae();return(s,o)=>{var a,r,l,u,v;return i(),h("div",Mt,[d("p",Nt,C(((a=c(e).notFound)==null?void 0:a.code)??"404"),1),d("h1",It,C(((r=c(e).notFound)==null?void 0:r.title)??"PAGE NOT FOUND"),1),o[0]||(o[0]=d("div",{class:"divider"},null,-1)),d("blockquote",Ct,C(((l=c(e).notFound)==null?void 0:l.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),d("div",At,[d("a",{class:"link",href:c(he)(c(t).link),"aria-label":((u=c(e).notFound)==null?void 0:u.linkLabel)??"go to home"},C(((v=c(e).notFound)==null?void 0:v.linkText)??"Take me home"),9,Ht)])])}}}),Et=V(Bt,[["__scopeId","data-v-93fd8736"]]);function Ze(n,e){if(Array.isArray(n))return le(n);if(n==null)return[];e=Le(e);const t=Object.keys(n).sort((o,a)=>a.split("/").length-o.split("/").length).find(o=>e.startsWith(Le(o))),s=t?n[t]:[];return Array.isArray(s)?le(s):le(s.items,s.base)}function Ot(n){const e=[];let t=0;for(const s in n){const o=n[s];if(o.items){t=e.push(o);continue}e[t]||e.push({items:[]}),e[t].items.push(o)}return e}function Dt(n){const e=[];function t(s){for(const o of s)o.text&&o.link&&e.push({text:o.text,link:o.link,docFooterText:o.docFooterText}),o.items&&t(o.items)}return t(n),e}function Ve(n,e){return Array.isArray(e)?e.some(t=>Ve(n,t)):te(n,e.link)?!0:e.items?Ve(n,e.items):!1}function le(n,e){return[...n].map(t=>{const s={...t},o=s.base||e;return o&&s.link&&(s.link=o+s.link),s.items&&(s.items=le(s.items,o)),s})}function x(){const{frontmatter:n,page:e,theme:t}=M(),s=Pe("(min-width: 960px)"),o=T(!1),a=S(()=>{const N=t.value.sidebar,w=e.value.relativePath;return N?Ze(N,w):[]}),r=T(a.value);J(a,(N,w)=>{JSON.stringify(N)!==JSON.stringify(w)&&(r.value=a.value)});const l=S(()=>n.value.sidebar!==!1&&r.value.length>0&&n.value.layout!=="home"),u=S(()=>v?n.value.aside==null?t.value.aside==="left":n.value.aside==="left":!1),v=S(()=>n.value.layout==="home"?!1:n.value.aside!=null?!!n.value.aside:t.value.aside!==!1),_=S(()=>l.value&&s.value),m=S(()=>l.value?Ot(r.value):[]);function L(){o.value=!0}function b(){o.value=!1}function $(){o.value?b():L()}return{isOpen:o,sidebar:r,sidebarGroups:m,hasSidebar:l,hasAside:v,leftAside:u,isSidebarEnabled:_,open:L,close:b,toggle:$}}function Ft(n,e){let t;fe(()=>{t=n.value?document.activeElement:void 0}),Q(()=>{window.addEventListener("keyup",s)}),Me(()=>{window.removeEventListener("keyup",s)});function s(o){o.key==="Escape"&&n.value&&(e(),t==null||t.focus())}}function zt(n){const{page:e,hash:t}=M(),s=T(!1),o=S(()=>n.value.collapsed!=null),a=S(()=>!!n.value.link),r=T(!1),l=()=>{r.value=te(e.value.relativePath,n.value.link)};J([e,n,t],l),Q(l);const u=S(()=>r.value?!0:n.value.items?Ve(e.value.relativePath,n.value.items):!1),v=S(()=>!!(n.value.items&&n.value.items.length));fe(()=>{s.value=!!(o.value&&n.value.collapsed)}),Ne(()=>{(r.value||u.value)&&(s.value=!1)});function _(){o.value&&(s.value=!s.value)}return{collapsed:s,collapsible:o,isLink:a,isActiveLink:r,hasActiveLink:u,hasChildren:v,toggle:_}}function jt(){const{hasSidebar:n}=x(),e=Pe("(min-width: 960px)"),t=Pe("(min-width: 1280px)");return{isAsideEnabled:S(()=>!t.value&&!e.value?!1:n.value?t.value:e.value)}}const Ut=/\b(?:VPBadge|header-anchor|footnote-ref|ignore-header)\b/,Se=[];function et(n){return typeof n.outline=="object"&&!Array.isArray(n.outline)&&n.outline.label||n.outlineTitle||"On this page"}function Ae(n){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:qt(t),link:"#"+t.id,level:s}});return Gt(e,n)}function qt(n){let e="";for(const t of n.childNodes)if(t.nodeType===1){if(Ut.test(t.className))continue;e+=t.textContent}else t.nodeType===3&&(e+=t.textContent);return e.trim()}function Gt(n,e){if(e===!1)return[];const t=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[s,o]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;return Kt(n,s,o)}function Rt(n,e){const{isAsideEnabled:t}=jt(),s=Tt(a,100);let o=null;Q(()=>{requestAnimationFrame(a),window.addEventListener("scroll",s)}),ct(()=>{r(location.hash)}),Me(()=>{window.removeEventListener("scroll",s)});function a(){if(!t.value)return;const l=window.scrollY,u=window.innerHeight,v=document.body.offsetHeight,_=Math.abs(l+u-v)<1,m=Se.map(({element:b,link:$})=>({link:$,top:Wt(b)})).filter(({top:b})=>!Number.isNaN(b)).sort((b,$)=>b.top-$.top);if(!m.length){r(null);return}if(l<1){r(null);return}if(_){r(m[m.length-1].link);return}let L=null;for(const{link:b,top:$}of m){if($>l+ut()+4)break;L=b}r(L)}function r(l){o&&o.classList.remove("active"),l==null?o=null:o=n.value.querySelector(`a[href="${decodeURIComponent(l)}"]`);const u=o;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 Wt(n){let e=0;for(;n!==document.body;){if(n===null)return NaN;e+=n.offsetTop,n=n.offsetParent}return e}function Kt(n,e,t){Se.length=0;const s=[],o=[];return n.forEach(a=>{const r={...a,children:[]};let l=o[o.length-1];for(;l&&l.level>=r.level;)o.pop(),l=o[o.length-1];if(r.element.classList.contains("ignore-header")||l&&"shouldIgnore"in l){o.push({level:r.level,shouldIgnore:!0});return}r.level>t||r.level{const o=Z("VPDocOutlineItem",!0);return i(),h("ul",{class:A(["VPDocOutlineItem",t.root?"root":"nested"])},[(i(!0),h(H,null,z(t.headers,({children:a,link:r,title:l})=>(i(),h("li",null,[d("a",{class:"outline-link",href:r,onClick:e,title:l},C(l),9,Jt),a!=null&&a.length?(i(),P(o,{key:0,headers:a},null,8,["headers"])):g("",!0)]))),256))],2)}}}),tt=V(xt,[["__scopeId","data-v-da421f78"]]),Xt={class:"content"},Yt={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},Qt=k({__name:"VPDocAsideOutline",setup(n){const{frontmatter:e,theme:t}=M(),s=We([]);ve(()=>{s.value=Ae(e.value.outline??t.value.outline)});const o=T(),a=T();return Rt(o,a),(r,l)=>(i(),h("nav",{"aria-labelledby":"doc-outline-aria-label",class:A(["VPDocAsideOutline",{"has-outline":s.value.length>0}]),ref_key:"container",ref:o},[d("div",Xt,[d("div",{class:"outline-marker",ref_key:"marker",ref:a},null,512),d("div",Yt,C(c(et)(c(t))),1),y(tt,{headers:s.value,root:!0},null,8,["headers"])])],2))}}),Zt=V(Qt,[["__scopeId","data-v-dfbd9fb8"]]),en={class:"VPDocAsideCarbonAds"},tn=k({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(n){const e=()=>null;return(t,s)=>(i(),h("div",en,[y(c(e),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),nn={class:"VPDocAside"},sn=k({__name:"VPDocAside",setup(n){const{theme:e}=M();return(t,s)=>(i(),h("div",nn,[p(t.$slots,"aside-top",{},void 0,!0),p(t.$slots,"aside-outline-before",{},void 0,!0),y(Zt),p(t.$slots,"aside-outline-after",{},void 0,!0),s[0]||(s[0]=d("div",{class:"spacer"},null,-1)),p(t.$slots,"aside-ads-before",{},void 0,!0),c(e).carbonAds?(i(),P(tn,{key:0,"carbon-ads":c(e).carbonAds},null,8,["carbon-ads"])):g("",!0),p(t.$slots,"aside-ads-after",{},void 0,!0),p(t.$slots,"aside-bottom",{},void 0,!0)]))}}),on=V(sn,[["__scopeId","data-v-79cae1a0"]]);function an(){const{theme:n,page:e}=M();return S(()=>{const{text:t="Edit this page",pattern:s=""}=n.value.editLink||{};let o;return typeof s=="function"?o=s(e.value):o=s.replace(/:path/g,e.value.filePath),{url:o,text:t}})}function rn(){const{page:n,theme:e,frontmatter:t}=M();return S(()=>{var v,_,m,L,b,$,N,w;const s=Ze(e.value.sidebar,n.value.relativePath),o=Dt(s),a=ln(o,O=>O.link.replace(/[?#].*$/,"")),r=a.findIndex(O=>te(n.value.relativePath,O.link)),l=((v=e.value.docFooter)==null?void 0:v.prev)===!1&&!t.value.prev||t.value.prev===!1,u=((_=e.value.docFooter)==null?void 0:_.next)===!1&&!t.value.next||t.value.next===!1;return{prev:l?void 0:{text:(typeof t.value.prev=="string"?t.value.prev:typeof t.value.prev=="object"?t.value.prev.text:void 0)??((m=a[r-1])==null?void 0:m.docFooterText)??((L=a[r-1])==null?void 0:L.text),link:(typeof t.value.prev=="object"?t.value.prev.link:void 0)??((b=a[r-1])==null?void 0:b.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)??(($=a[r+1])==null?void 0:$.docFooterText)??((N=a[r+1])==null?void 0:N.text),link:(typeof t.value.next=="object"?t.value.next.link:void 0)??((w=a[r+1])==null?void 0:w.link)}}})}function ln(n,e){const t=new Set;return n.filter(s=>{const o=e(s);return t.has(o)?!1:t.add(o)})}const K=k({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(n){const e=n,t=S(()=>e.tag??(e.href?"a":"span")),s=S(()=>e.href&&Ke.test(e.href)||e.target==="_blank");return(o,a)=>(i(),P(W(t.value),{class:A(["VPLink",{link:o.href,"vp-external-link-icon":s.value,"no-icon":o.noIcon}]),href:o.href?c(Ce)(o.href):void 0,target:o.target??(s.value?"_blank":void 0),rel:o.rel??(s.value?"noreferrer":void 0)},{default:f(()=>[p(o.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),cn={class:"VPLastUpdated"},un=["datetime"],dn=k({__name:"VPDocFooterLastUpdated",setup(n){const{theme:e,page:t,lang:s}=M(),o=S(()=>new Date(t.value.lastUpdated)),a=S(()=>o.value.toISOString()),r=T("");return Q(()=>{fe(()=>{var l,u,v;r.value=new Intl.DateTimeFormat((u=(l=e.value.lastUpdated)==null?void 0:l.formatOptions)!=null&&u.forceLocale?s.value:void 0,((v=e.value.lastUpdated)==null?void 0:v.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(o.value)})}),(l,u)=>{var v;return i(),h("p",cn,[ee(C(((v=c(e).lastUpdated)==null?void 0:v.text)||c(e).lastUpdatedText||"Last updated")+": ",1),d("time",{datetime:a.value},C(r.value),9,un)])}}}),pn=V(dn,[["__scopeId","data-v-e95db471"]]),hn={key:0,class:"VPDocFooter"},fn={key:0,class:"edit-info"},vn={key:0,class:"edit-link"},mn={key:1,class:"last-updated"},_n={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},gn={class:"pager"},kn=["innerHTML"],bn=["innerHTML"],$n={class:"pager"},yn=["innerHTML"],Pn=["innerHTML"],Ln=k({__name:"VPDocFooter",setup(n){const{theme:e,page:t,frontmatter:s}=M(),o=an(),a=rn(),r=S(()=>e.value.editLink&&s.value.editLink!==!1),l=S(()=>t.value.lastUpdated),u=S(()=>r.value||l.value||a.value.prev||a.value.next);return(v,_)=>{var m,L,b,$;return u.value?(i(),h("footer",hn,[p(v.$slots,"doc-footer-before",{},void 0,!0),r.value||l.value?(i(),h("div",fn,[r.value?(i(),h("div",vn,[y(K,{class:"edit-link-button",href:c(o).url,"no-icon":!0},{default:f(()=>[_[0]||(_[0]=d("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),ee(" "+C(c(o).text),1)]),_:1},8,["href"])])):g("",!0),l.value?(i(),h("div",mn,[y(pn)])):g("",!0)])):g("",!0),(m=c(a).prev)!=null&&m.link||(L=c(a).next)!=null&&L.link?(i(),h("nav",_n,[_[1]||(_[1]=d("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),d("div",gn,[(b=c(a).prev)!=null&&b.link?(i(),P(K,{key:0,class:"pager-link prev",href:c(a).prev.link},{default:f(()=>{var N;return[d("span",{class:"desc",innerHTML:((N=c(e).docFooter)==null?void 0:N.prev)||"Previous page"},null,8,kn),d("span",{class:"title",innerHTML:c(a).prev.text},null,8,bn)]}),_:1},8,["href"])):g("",!0)]),d("div",$n,[($=c(a).next)!=null&&$.link?(i(),P(K,{key:0,class:"pager-link next",href:c(a).next.link},{default:f(()=>{var N;return[d("span",{class:"desc",innerHTML:((N=c(e).docFooter)==null?void 0:N.next)||"Next page"},null,8,yn),d("span",{class:"title",innerHTML:c(a).next.text},null,8,Pn)]}),_:1},8,["href"])):g("",!0)])])):g("",!0)])):g("",!0)}}}),Vn=V(Ln,[["__scopeId","data-v-07d71ff1"]]),Sn={class:"container"},Tn={class:"aside-container"},wn={class:"aside-content"},Mn={class:"content"},Nn={class:"content-container"},In={class:"main"},Cn=k({__name:"VPDoc",setup(n){const{theme:e}=M(),t=me(),{hasSidebar:s,hasAside:o,leftAside:a}=x(),r=S(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(l,u)=>{const v=Z("Content");return i(),h("div",{class:A(["VPDoc",{"has-sidebar":c(s),"has-aside":c(o)}])},[p(l.$slots,"doc-top",{},void 0,!0),d("div",Sn,[c(o)?(i(),h("div",{key:0,class:A(["aside",{"left-aside":c(a)}])},[u[0]||(u[0]=d("div",{class:"aside-curtain"},null,-1)),d("div",Tn,[d("div",wn,[y(on,null,{"aside-top":f(()=>[p(l.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":f(()=>[p(l.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":f(()=>[p(l.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[p(l.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[p(l.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[p(l.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):g("",!0),d("div",Mn,[d("div",Nn,[p(l.$slots,"doc-before",{},void 0,!0),d("main",In,[y(v,{class:A(["vp-doc",[r.value,c(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),y(Vn,null,{"doc-footer-before":f(()=>[p(l.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),p(l.$slots,"doc-after",{},void 0,!0)])])]),p(l.$slots,"doc-bottom",{},void 0,!0)],2)}}}),An=V(Cn,[["__scopeId","data-v-ef3a4dda"]]),Hn=k({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(n){const e=n,t=S(()=>e.href&&Ke.test(e.href)),s=S(()=>e.tag||(e.href?"a":"button"));return(o,a)=>(i(),P(W(s.value),{class:A(["VPButton",[o.size,o.theme]]),href:o.href?c(Ce)(o.href):void 0,target:e.target??(t.value?"_blank":void 0),rel:e.rel??(t.value?"noreferrer":void 0)},{default:f(()=>[ee(C(o.text),1)]),_:1},8,["class","href","target","rel"]))}}),Bn=V(Hn,[["__scopeId","data-v-b20c43c2"]]),En=["src","alt"],On=k({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(n){return(e,t)=>{const s=Z("VPImage",!0);return e.image?(i(),h(H,{key:0},[typeof e.image=="string"||"src"in e.image?(i(),h("img",Y({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:c(he)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,En)):(i(),h(H,{key:1},[y(s,Y({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),y(s,Y({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):g("",!0)}}}),ue=V(On,[["__scopeId","data-v-4d414b82"]]),Dn={class:"container"},Fn={class:"main"},zn={class:"heading"},jn=["innerHTML"],Un=["innerHTML"],qn=["innerHTML"],Gn={key:0,class:"actions"},Rn={key:0,class:"image"},Wn={class:"image-container"},Kn=k({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(n){const e=_e("hero-image-slot-exists");return(t,s)=>(i(),h("div",{class:A(["VPHero",{"has-image":t.image||c(e)}])},[d("div",Dn,[d("div",Fn,[p(t.$slots,"home-hero-info-before",{},void 0,!0),p(t.$slots,"home-hero-info",{},()=>[d("h1",zn,[t.name?(i(),h("span",{key:0,innerHTML:t.name,class:"name clip"},null,8,jn)):g("",!0),t.text?(i(),h("span",{key:1,innerHTML:t.text,class:"text"},null,8,Un)):g("",!0)]),t.tagline?(i(),h("p",{key:0,innerHTML:t.tagline,class:"tagline"},null,8,qn)):g("",!0)],!0),p(t.$slots,"home-hero-info-after",{},void 0,!0),t.actions?(i(),h("div",Gn,[(i(!0),h(H,null,z(t.actions,o=>(i(),h("div",{key:o.link,class:"action"},[y(Bn,{tag:"a",size:"medium",theme:o.theme,text:o.text,href:o.link,target:o.target,rel:o.rel},null,8,["theme","text","href","target","rel"])]))),128))])):g("",!0),p(t.$slots,"home-hero-actions-after",{},void 0,!0)]),t.image||c(e)?(i(),h("div",Rn,[d("div",Wn,[s[0]||(s[0]=d("div",{class:"image-bg"},null,-1)),p(t.$slots,"home-hero-image",{},()=>[t.image?(i(),P(ue,{key:0,class:"image-src",image:t.image},null,8,["image"])):g("",!0)],!0)])])):g("",!0)])],2))}}),Jn=V(Kn,[["__scopeId","data-v-d266baba"]]),xn=k({__name:"VPHomeHero",setup(n){const{frontmatter:e}=M();return(t,s)=>c(e).hero?(i(),P(Jn,{key:0,class:"VPHomeHero",name:c(e).hero.name,text:c(e).hero.text,tagline:c(e).hero.tagline,image:c(e).hero.image,actions:c(e).hero.actions},{"home-hero-info-before":f(()=>[p(t.$slots,"home-hero-info-before")]),"home-hero-info":f(()=>[p(t.$slots,"home-hero-info")]),"home-hero-info-after":f(()=>[p(t.$slots,"home-hero-info-after")]),"home-hero-actions-after":f(()=>[p(t.$slots,"home-hero-actions-after")]),"home-hero-image":f(()=>[p(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):g("",!0)}}),Xn={class:"box"},Yn={key:0,class:"icon"},Qn=["innerHTML"],Zn=["innerHTML"],es=["innerHTML"],ts={key:4,class:"link-text"},ns={class:"link-text-value"},ss=k({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(n){return(e,t)=>(i(),P(K,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:f(()=>[d("article",Xn,[typeof e.icon=="object"&&e.icon.wrap?(i(),h("div",Yn,[y(ue,{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"?(i(),P(ue,{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?(i(),h("div",{key:2,class:"icon",innerHTML:e.icon},null,8,Qn)):g("",!0),d("h2",{class:"title",innerHTML:e.title},null,8,Zn),e.details?(i(),h("p",{key:3,class:"details",innerHTML:e.details},null,8,es)):g("",!0),e.linkText?(i(),h("div",ts,[d("p",ns,[ee(C(e.linkText)+" ",1),t[0]||(t[0]=d("span",{class:"vpi-arrow-right link-text-icon"},null,-1))])])):g("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),os=V(ss,[["__scopeId","data-v-95001937"]]),as={key:0,class:"VPFeatures"},rs={class:"container"},is={class:"items"},ls=k({__name:"VPFeatures",props:{features:{}},setup(n){const e=n,t=S(()=>{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,o)=>s.features?(i(),h("div",as,[d("div",rs,[d("div",is,[(i(!0),h(H,null,z(s.features,a=>(i(),h("div",{key:a.title,class:A(["item",[t.value]])},[y(os,{icon:a.icon,title:a.title,details:a.details,link:a.link,"link-text":a.linkText,rel:a.rel,target:a.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):g("",!0)}}),cs=V(ls,[["__scopeId","data-v-1da4ff3d"]]),us=k({__name:"VPHomeFeatures",setup(n){const{frontmatter:e}=M();return(t,s)=>c(e).features?(i(),P(cs,{key:0,class:"VPHomeFeatures",features:c(e).features},null,8,["features"])):g("",!0)}}),ds=k({__name:"VPHomeContent",setup(n){const{width:e}=dt({initialWidth:0,includeScrollbar:!1});return(t,s)=>(i(),h("div",{class:"vp-doc container",style:Je(c(e)?{"--vp-offset":`calc(50% - ${c(e)/2}px)`}:{})},[p(t.$slots,"default",{},void 0,!0)],4))}}),ps=V(ds,[["__scopeId","data-v-2498cc33"]]),hs=k({__name:"VPHome",setup(n){const{frontmatter:e,theme:t}=M();return(s,o)=>{const a=Z("Content");return i(),h("div",{class:A(["VPHome",{"external-link-icon-enabled":c(t).externalLinkIcon}])},[p(s.$slots,"home-hero-before",{},void 0,!0),y(xn,null,{"home-hero-info-before":f(()=>[p(s.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[p(s.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[p(s.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[p(s.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[p(s.$slots,"home-hero-image",{},void 0,!0)]),_:3}),p(s.$slots,"home-hero-after",{},void 0,!0),p(s.$slots,"home-features-before",{},void 0,!0),y(us),p(s.$slots,"home-features-after",{},void 0,!0),c(e).markdownStyles!==!1?(i(),P(ps,{key:0},{default:f(()=>[y(a)]),_:1})):(i(),P(a,{key:1}))],2)}}}),fs=V(hs,[["__scopeId","data-v-8b59c434"]]),vs={},ms={class:"VPPage"};function _s(n,e){const t=Z("Content");return i(),h("div",ms,[p(n.$slots,"page-top"),y(t),p(n.$slots,"page-bottom")])}const gs=V(vs,[["render",_s]]),ks=k({__name:"VPContent",setup(n){const{page:e,frontmatter:t}=M(),{hasSidebar:s}=x();return(o,a)=>(i(),h("div",{class:A(["VPContent",{"has-sidebar":c(s),"is-home":c(t).layout==="home"}]),id:"VPContent"},[c(e).isNotFound?p(o.$slots,"not-found",{key:0},()=>[y(Et)],!0):c(t).layout==="page"?(i(),P(gs,{key:1},{"page-top":f(()=>[p(o.$slots,"page-top",{},void 0,!0)]),"page-bottom":f(()=>[p(o.$slots,"page-bottom",{},void 0,!0)]),_:3})):c(t).layout==="home"?(i(),P(fs,{key:2},{"home-hero-before":f(()=>[p(o.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":f(()=>[p(o.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[p(o.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[p(o.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[p(o.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[p(o.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":f(()=>[p(o.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":f(()=>[p(o.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":f(()=>[p(o.$slots,"home-features-after",{},void 0,!0)]),_:3})):c(t).layout&&c(t).layout!=="doc"?(i(),P(W(c(t).layout),{key:3})):(i(),P(An,{key:4},{"doc-top":f(()=>[p(o.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":f(()=>[p(o.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":f(()=>[p(o.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":f(()=>[p(o.$slots,"doc-before",{},void 0,!0)]),"doc-after":f(()=>[p(o.$slots,"doc-after",{},void 0,!0)]),"aside-top":f(()=>[p(o.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":f(()=>[p(o.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[p(o.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[p(o.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[p(o.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":f(()=>[p(o.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),bs=V(ks,[["__scopeId","data-v-d2aef184"]]),$s={class:"container"},ys=["innerHTML"],Ps=["innerHTML"],Ls=k({__name:"VPFooter",setup(n){const{theme:e,frontmatter:t}=M(),{hasSidebar:s}=x();return(o,a)=>c(e).footer&&c(t).footer!==!1?(i(),h("footer",{key:0,class:A(["VPFooter",{"has-sidebar":c(s)}])},[d("div",$s,[c(e).footer.message?(i(),h("p",{key:0,class:"message",innerHTML:c(e).footer.message},null,8,ys)):g("",!0),c(e).footer.copyright?(i(),h("p",{key:1,class:"copyright",innerHTML:c(e).footer.copyright},null,8,Ps)):g("",!0)])],2)):g("",!0)}}),Vs=V(Ls,[["__scopeId","data-v-e3157d6d"]]);function Ss(){const{theme:n,frontmatter:e}=M(),t=We([]),s=S(()=>t.value.length>0);return ve(()=>{t.value=Ae(e.value.outline??n.value.outline)}),{headers:t,hasLocalNav:s}}const Ts={class:"menu-text"},ws={class:"header"},Ms={class:"outline"},Ns=k({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(n){const e=n,{theme:t}=M(),s=T(!1),o=T(0),a=T(),r=T();function l(m){var L;(L=a.value)!=null&&L.contains(m.target)||(s.value=!1)}J(s,m=>{if(m){document.addEventListener("click",l);return}document.removeEventListener("click",l)}),pt("Escape",()=>{s.value=!1}),ve(()=>{s.value=!1});function u(){s.value=!s.value,o.value=window.innerHeight+Math.min(window.scrollY-e.navHeight,0)}function v(m){m.target.classList.contains("outline-link")&&(r.value&&(r.value.style.transition="none"),Ie(()=>{s.value=!1}))}function _(){s.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(m,L)=>(i(),h("div",{class:"VPLocalNavOutlineDropdown",style:Je({"--vp-vh":o.value+"px"}),ref_key:"main",ref:a},[m.headers.length>0?(i(),h("button",{key:0,onClick:u,class:A({open:s.value})},[d("span",Ts,C(c(et)(c(t))),1),L[0]||(L[0]=d("span",{class:"vpi-chevron-right icon"},null,-1))],2)):(i(),h("button",{key:1,onClick:_},C(c(t).returnToTopLabel||"Return to top"),1)),y(we,{name:"flyout"},{default:f(()=>[s.value?(i(),h("div",{key:0,ref_key:"items",ref:r,class:"items",onClick:v},[d("div",ws,[d("a",{class:"top-link",href:"#",onClick:_},C(c(t).returnToTopLabel||"Return to top"),1)]),d("div",Ms,[y(tt,{headers:m.headers},null,8,["headers"])])],512)):g("",!0)]),_:1})],4))}}),Is=V(Ns,[["__scopeId","data-v-d61422fe"]]),Cs={class:"container"},As=["aria-expanded"],Hs={class:"menu-text"},Bs=k({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(n){const{theme:e,frontmatter:t}=M(),{hasSidebar:s}=x(),{headers:o}=Ss(),{y:a}=xe(),r=T(0);Q(()=>{r.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),ve(()=>{o.value=Ae(t.value.outline??e.value.outline)});const l=S(()=>o.value.length===0),u=S(()=>l.value&&!s.value),v=S(()=>({VPLocalNav:!0,"has-sidebar":s.value,empty:l.value,fixed:u.value}));return(_,m)=>c(t).layout!=="home"&&(!u.value||c(a)>=r.value)?(i(),h("div",{key:0,class:A(v.value)},[d("div",Cs,[c(s)?(i(),h("button",{key:0,class:"menu","aria-expanded":_.open,"aria-controls":"VPSidebarNav",onClick:m[0]||(m[0]=L=>_.$emit("open-menu"))},[m[1]||(m[1]=d("span",{class:"vpi-align-left menu-icon"},null,-1)),d("span",Hs,C(c(e).sidebarMenuLabel||"Menu"),1)],8,As)):g("",!0),y(Is,{headers:c(o),navHeight:r.value},null,8,["headers","navHeight"])])],2)):g("",!0)}}),Es=V(Bs,[["__scopeId","data-v-9d8129cc"]]);function Os(){const n=T(!1);function e(){n.value=!0,window.addEventListener("resize",o)}function t(){n.value=!1,window.removeEventListener("resize",o)}function s(){n.value?t():e()}function o(){window.outerWidth>=768&&t()}const a=me();return J(()=>a.path,t),{isScreenOpen:n,openScreen:e,closeScreen:t,toggleScreen:s}}const Ds={},Fs={class:"VPSwitch",type:"button",role:"switch"},zs={class:"check"},js={key:0,class:"icon"};function Us(n,e){return i(),h("button",Fs,[d("span",zs,[n.$slots.default?(i(),h("span",js,[p(n.$slots,"default",{},void 0,!0)])):g("",!0)])])}const qs=V(Ds,[["render",Us],["__scopeId","data-v-7012e5dd"]]),Gs=k({__name:"VPSwitchAppearance",setup(n){const{isDark:e,theme:t}=M(),s=_e("toggle-appearance",()=>{e.value=!e.value}),o=T("");return Ne(()=>{o.value=e.value?t.value.lightModeSwitchTitle||"Switch to light theme":t.value.darkModeSwitchTitle||"Switch to dark theme"}),(a,r)=>(i(),P(qs,{title:o.value,class:"VPSwitchAppearance","aria-checked":c(e),onClick:c(s)},{default:f(()=>r[0]||(r[0]=[d("span",{class:"vpi-sun sun"},null,-1),d("span",{class:"vpi-moon moon"},null,-1)])),_:1},8,["title","aria-checked","onClick"]))}}),He=V(Gs,[["__scopeId","data-v-fa1daf57"]]),Rs={key:0,class:"VPNavBarAppearance"},Ws=k({__name:"VPNavBarAppearance",setup(n){const{site:e}=M();return(t,s)=>c(e).appearance&&c(e).appearance!=="force-dark"&&c(e).appearance!=="force-auto"?(i(),h("div",Rs,[y(He)])):g("",!0)}}),Ks=V(Ws,[["__scopeId","data-v-123fcb2f"]]),Be=T();let nt=!1,be=0;function Js(n){const e=T(!1);if(ge){!nt&&xs(),be++;const t=J(Be,s=>{var o,a,r;s===n.el.value||(o=n.el.value)!=null&&o.contains(s)?(e.value=!0,(a=n.onFocus)==null||a.call(n)):(e.value=!1,(r=n.onBlur)==null||r.call(n))});Me(()=>{t(),be--,be||Xs()})}return ht(e)}function xs(){document.addEventListener("focusin",st),nt=!0,Be.value=document.activeElement}function Xs(){document.removeEventListener("focusin",st)}function st(){Be.value=document.activeElement}const Ys={class:"VPMenuLink"},Qs=["innerHTML"],Zs=k({__name:"VPMenuLink",props:{item:{}},setup(n){const{page:e}=M();return(t,s)=>(i(),h("div",Ys,[y(K,{class:A({active:c(te)(c(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(()=>[d("span",{innerHTML:t.item.text},null,8,Qs)]),_:1},8,["class","href","target","rel","no-icon"])]))}}),ke=V(Zs,[["__scopeId","data-v-65e4a6b1"]]),eo={class:"VPMenuGroup"},to={key:0,class:"title"},no=k({__name:"VPMenuGroup",props:{text:{},items:{}},setup(n){return(e,t)=>(i(),h("div",eo,[e.text?(i(),h("p",to,C(e.text),1)):g("",!0),(i(!0),h(H,null,z(e.items,s=>(i(),h(H,null,["link"in s?(i(),P(ke,{key:0,item:s},null,8,["item"])):g("",!0)],64))),256))]))}}),so=V(no,[["__scopeId","data-v-2bec9359"]]),oo={class:"VPMenu"},ao={key:0,class:"items"},ro=k({__name:"VPMenu",props:{items:{}},setup(n){return(e,t)=>(i(),h("div",oo,[e.items?(i(),h("div",ao,[(i(!0),h(H,null,z(e.items,s=>(i(),h(H,{key:JSON.stringify(s)},["link"in s?(i(),P(ke,{key:0,item:s},null,8,["item"])):"component"in s?(i(),P(W(s.component),Y({key:1,ref_for:!0},s.props),null,16)):(i(),P(so,{key:2,text:s.text,items:s.items},null,8,["text","items"]))],64))),128))])):g("",!0),p(e.$slots,"default",{},void 0,!0)]))}}),io=V(ro,[["__scopeId","data-v-39eca401"]]),lo=["aria-expanded","aria-label"],co={key:0,class:"text"},uo=["innerHTML"],po={key:1,class:"vpi-more-horizontal icon"},ho={class:"menu"},fo=k({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(n){const e=T(!1),t=T();Js({el:t,onBlur:s});function s(){e.value=!1}return(o,a)=>(i(),h("div",{class:"VPFlyout",ref_key:"el",ref:t,onMouseenter:a[1]||(a[1]=r=>e.value=!0),onMouseleave:a[2]||(a[2]=r=>e.value=!1)},[d("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":e.value,"aria-label":o.label,onClick:a[0]||(a[0]=r=>e.value=!e.value)},[o.button||o.icon?(i(),h("span",co,[o.icon?(i(),h("span",{key:0,class:A([o.icon,"option-icon"])},null,2)):g("",!0),o.button?(i(),h("span",{key:1,innerHTML:o.button},null,8,uo)):g("",!0),a[3]||(a[3]=d("span",{class:"vpi-chevron-down text-icon"},null,-1))])):(i(),h("span",po))],8,lo),d("div",ho,[y(io,{items:o.items},{default:f(()=>[p(o.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),Ee=V(fo,[["__scopeId","data-v-40e55da0"]]),vo=["href","aria-label","innerHTML"],mo=k({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(n){const e=n,t=T();Q(async()=>{var a;await Ie();const o=(a=t.value)==null?void 0:a.children[0];o instanceof HTMLElement&&o.className.startsWith("vpi-social-")&&(getComputedStyle(o).maskImage||getComputedStyle(o).webkitMaskImage)==="none"&&o.style.setProperty("--icon",`url('https://api.iconify.design/simple-icons/${e.icon}.svg')`)});const s=S(()=>typeof e.icon=="object"?e.icon.svg:``);return(o,a)=>(i(),h("a",{ref_key:"el",ref:t,class:"VPSocialLink no-icon",href:o.link,"aria-label":o.ariaLabel??(typeof o.icon=="string"?o.icon:""),target:"_blank",rel:"noopener",innerHTML:s.value},null,8,vo))}}),_o=V(mo,[["__scopeId","data-v-fbf39218"]]),go={class:"VPSocialLinks"},ko=k({__name:"VPSocialLinks",props:{links:{}},setup(n){return(e,t)=>(i(),h("div",go,[(i(!0),h(H,null,z(e.links,({link:s,icon:o,ariaLabel:a})=>(i(),P(_o,{key:s,icon:o,link:s,ariaLabel:a},null,8,["icon","link","ariaLabel"]))),128))]))}}),Oe=V(ko,[["__scopeId","data-v-f2234a39"]]),bo={key:0,class:"group translations"},$o={class:"trans-title"},yo={key:1,class:"group"},Po={class:"item appearance"},Lo={class:"label"},Vo={class:"appearance-action"},So={key:2,class:"group"},To={class:"item social-links"},wo=k({__name:"VPNavBarExtra",setup(n){const{site:e,theme:t}=M(),{localeLinks:s,currentLang:o}=ae({correspondingLink:!0}),a=S(()=>s.value.length&&o.value.label||e.value.appearance||t.value.socialLinks);return(r,l)=>a.value?(i(),P(Ee,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:f(()=>[c(s).length&&c(o).label?(i(),h("div",bo,[d("p",$o,C(c(o).label),1),(i(!0),h(H,null,z(c(s),u=>(i(),P(ke,{key:u.link,item:u},null,8,["item"]))),128))])):g("",!0),c(e).appearance&&c(e).appearance!=="force-dark"&&c(e).appearance!=="force-auto"?(i(),h("div",yo,[d("div",Po,[d("p",Lo,C(c(t).darkModeSwitchLabel||"Appearance"),1),d("div",Vo,[y(He)])])])):g("",!0),c(t).socialLinks?(i(),h("div",So,[d("div",To,[y(Oe,{class:"social-links-list",links:c(t).socialLinks},null,8,["links"])])])):g("",!0)]),_:1})):g("",!0)}}),Mo=V(wo,[["__scopeId","data-v-0c845e5d"]]),No=["aria-expanded"],Io=k({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(n){return(e,t)=>(i(),h("button",{type:"button",class:A(["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]=[d("span",{class:"container"},[d("span",{class:"top"}),d("span",{class:"middle"}),d("span",{class:"bottom"})],-1)]),10,No))}}),Co=V(Io,[["__scopeId","data-v-670493dd"]]),Ao=["innerHTML"],Ho=k({__name:"VPNavBarMenuLink",props:{item:{}},setup(n){const{page:e}=M();return(t,s)=>(i(),P(K,{class:A({VPNavBarMenuLink:!0,active:c(te)(c(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(()=>[d("span",{innerHTML:t.item.text},null,8,Ao)]),_:1},8,["class","href","target","rel","no-icon"]))}}),Bo=V(Ho,[["__scopeId","data-v-8dbce4d0"]]),Eo=k({__name:"VPNavBarMenuGroup",props:{item:{}},setup(n){const e=n,{page:t}=M(),s=a=>"component"in a?!1:"link"in a?te(t.value.relativePath,a.link,!!e.item.activeMatch):a.items.some(s),o=S(()=>s(e.item));return(a,r)=>(i(),P(Ee,{class:A({VPNavBarMenuGroup:!0,active:c(te)(c(t).relativePath,a.item.activeMatch,!!a.item.activeMatch)||o.value}),button:a.item.text,items:a.item.items},null,8,["class","button","items"]))}}),Oo={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},Do=k({__name:"VPNavBarMenu",setup(n){const{theme:e}=M();return(t,s)=>c(e).nav?(i(),h("nav",Oo,[s[0]||(s[0]=d("span",{id:"main-nav-aria-label",class:"visually-hidden"}," Main Navigation ",-1)),(i(!0),h(H,null,z(c(e).nav,o=>(i(),h(H,{key:JSON.stringify(o)},["link"in o?(i(),P(Bo,{key:0,item:o},null,8,["item"])):"component"in o?(i(),P(W(o.component),Y({key:1,ref_for:!0},o.props),null,16)):(i(),P(Eo,{key:2,item:o},null,8,["item"]))],64))),128))])):g("",!0)}}),Fo=V(Do,[["__scopeId","data-v-5bacfe89"]]),zo="/document/assets/flex-logo.BJA2J7hW.svg";function $e(n,e){return typeof n>"u"?e:n}function ze(n){const e=Array(n);for(let t=0;t=this.minlength&&(l||!r[_])){let L=ie(u,o,v),b="";switch(this.tokenize){case"full":if(3$;N--)if(N-$>=this.minlength){const w=ie(u,o,v,m,$);b=_.substring($,N),this.push_index(r,b,w,n,t)}break}case"reverse":if(2=this.minlength){const N=ie(u,o,v,m,$);this.push_index(r,b,N,n,t)}b=""}case"forward":if(1=this.minlength&&this.push_index(r,b,L,n,t);break}default:if(this.boost&&(L=Math.min(0|L/this.boost(e,_,v),u-1)),this.push_index(r,_,L,n,t),l&&1=this.minlength&&!$[_]){$[_]=1;const R=ie(N+(o/2>N?0:1),o,v,O-1,F-1),X=this.bidirectional&&_>w;this.push_index(a,X?w:_,R,n,t,X?_:w)}}}}}this.fastupdate||(this.register[n]=1)}}return this};function ie(n,e,t,s,o){return t&&1=this.minlength&&!m[b]){if(!this.optimize&&!a&&!this.map[b])return r;L[N++]=b,m[b]=1}n=L,s=n.length}if(!s)return r;e||(e=100);let u,v=this.depth&&1=t)))));b++);if(v)return o?qe(l,t,0):void(n[n.length]=l)}return!e&&l};function qe(n,e,t){return n=n.length===1?n[0]:Uo(n),t||n.length>e?n.slice(t,t+e):n}function Ge(n,e,t,s){if(t){const o=s&&e>t;n=n[o?e:t],n=n&&n[o?t:e]}else n=n[e];return n}q.prototype.contain=function(n){return!!this.register[n]},q.prototype.update=function(n,e){return this.remove(n).add(n,e)},q.prototype.remove=function(n,e){const t=this.register[n];if(t){if(this.fastupdate)for(let s,o=0;o{if(a.value){for(var B=m.value.search(a.value,{enrich:!0}),I=[],j=0;j!B||!B.length?[]:B.reduce((j,E)=>(j[I(E)]||(j[I(E)]=[]),j[I(E)].push(E),j),{}),R=()=>{setTimeout(()=>{l.value&&l.value.focus()},100),De(),o.value=!0};Q(async()=>{var E,D;const B=await vt(()=>import("./virtual_search-data.DK5dZ1YJ.js"),[]);u.value=B.default.INDEX_DATA,v.value=B.default.PREVIEW_LOOKUP,_.value=B.default.Options,r.value=window.location.origin+he(t.value==="root"?"/":t.value),L.value=((E=_.value)==null?void 0:E.buttonLabel)||L.value,b.value=((D=_.value)==null?void 0:D.placeholder)||b.value;var I=new q(_.value);I.import("reg",u.value.reg),I.import("cfg",u.value.cfg),I.import("map",u.value.map),I.import("ctx",u.value.ctx),m.value=I,s.value.innerHTML=/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)?"⌘":"Ctrl";const j=U=>{var se;U.key==="k"&&(U.ctrlKey||U.metaKey)&&(U.preventDefault(),R()),U.key==="Escape"&&((se=a.value)==null?void 0:se.length)==0&&o.value&&(o.value=!1)};window.addEventListener("keydown",j)});const X=S(()=>F(O.value,B=>B.link.split("/").slice(0,-1).join("-"))),ne=S(()=>Object.values(X.value).flat().map(B=>B.id));function De(){o.value=!1,a.value=""}const at=B=>{var I,j;if(document.getElementsByClassName("search-group")[0]){if(B.key=="ArrowUp"||B.key=="ArrowDown"){const E=ne.value.indexOf($.value);if(B.key=="ArrowUp"){const D=E==0?ne.value.length-1:E-1;$.value=ne.value[D]}if(B.key=="ArrowDown"){const D=E>ne.value.length-2?0:E+1;$.value=ne.value[D]}if(E<5){const D=N.value.getElementsByClassName("VPPluginSearch-search-group")[0];D==null||D.scrollIntoView(!0)}else(I=document.getElementById(ne.value[$.value]))==null||I.scrollIntoView(!0);Ie()}B.key=="Enter"&&w.go(e.site.value.base+((j=N.value.getElementsByClassName("link-focused")[0].getAttribute("href"))==null?void 0:j.replace(r.value,"")))}};return(B,I)=>{const j=Z("ClientOnly");return i(),h("div",la,[y(j,null,{default:f(()=>[(i(),P(gt,{to:"body"},[Fe(d("div",{class:"VPPluginSearch-modal-back",onClick:I[2]||(I[2]=E=>o.value=!1),onKeydown:at},[d("div",{class:"VPPluginSearch-modal",onClick:I[1]||(I[1]=Xe(()=>{},["stop"])),ref_key:"modal",ref:N},[d("form",ca,[I[4]||(I[4]=d("label",{class:"DocSearch-MagnifierLabel",for:"docsearch-input",id:"docsearch-label"},[d("svg",{width:"20",height:"20",class:"DocSearch-Search-Icon",viewBox:"0 0 20 20"},[d("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none","fill-rule":"evenodd","stroke-linecap":"round","stroke-linejoin":"round"})])],-1)),Fe(d("input",{class:"DocSearch-Input","aria-autocomplete":"both","aria-labelledby":"docsearch-label",id:"docsearch-input",autocomplete:"off",autocorrect:"off",autocapitalize:"off",enterkeyhint:"search",spellcheck:"false",autofocus:"true","onUpdate:modelValue":I[0]||(I[0]=E=>a.value=E),placeholder:b.value,maxlength:"64",type:"search",ref_key:"input",ref:l},null,8,ua),[[_t,a.value]])]),d("div",da,[(i(!0),h(H,null,z(X.value,(E,D)=>(i(),h("div",{class:"search-group",key:D},[d("span",pa,C(D?D.toString()[0].toUpperCase()+D.toString().slice(1):"Home"),1),(i(!0),h(H,null,z(E,(U,se)=>(i(),h("a",{href:r.value+U.link,key:U.id,onClick:De,onMouseenter:re=>$.value=U.id,class:A({"link-focused":$.value==U.id}),id:se.toString()},[d("div",fa,[d("span",va,C(U.link.includes("#")?"#":"▤"),1),d("div",ma,[d("h3",null,C(U.title),1),d("p",null,[d("div",{innerHTML:U.preview},null,8,_a)])]),I[5]||(I[5]=d("span",{class:"VPPluginSearch-search-item-icon"},"↪",-1))])],42,ha))),128))]))),128))]),I[6]||(I[6]=d("img",{class:"VPPluginSearch-flex-logo",src:zo,alt:"flex logo"},null,-1))],512)],544),[[mt,o.value]])]))]),_:1}),d("div",{id:"docsearch",onClick:I[3]||(I[3]=E=>R())},[d("button",ga,[d("span",ka,[I[7]||(I[7]=d("svg",{width:"20",height:"20",class:"DocSearch-Search-Icon",viewBox:"0 0 20 20"},[d("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none","fill-rule":"evenodd","stroke-linecap":"round","stroke-linejoin":"round"})],-1)),d("span",ba,C(L.value),1)]),d("span",$a,[d("span",{class:"DocSearch-Button-Key",ref_key:"metaKey",ref:s},"Meta",512),I[8]||(I[8]=d("span",{class:"DocSearch-Button-Key"},"K",-1))])])])])}}}),Pa=k({__name:"VPNavBarSocialLinks",setup(n){const{theme:e}=M();return(t,s)=>c(e).socialLinks?(i(),P(Oe,{key:0,class:"VPNavBarSocialLinks",links:c(e).socialLinks},null,8,["links"])):g("",!0)}}),La=V(Pa,[["__scopeId","data-v-08b35e6f"]]),Va=["href","rel","target"],Sa=["innerHTML"],Ta={key:2},wa=k({__name:"VPNavBarTitle",setup(n){const{site:e,theme:t}=M(),{hasSidebar:s}=x(),{currentLang:o}=ae(),a=S(()=>{var u;return typeof t.value.logoLink=="string"?t.value.logoLink:(u=t.value.logoLink)==null?void 0:u.link}),r=S(()=>{var u;return typeof t.value.logoLink=="string"||(u=t.value.logoLink)==null?void 0:u.rel}),l=S(()=>{var u;return typeof t.value.logoLink=="string"||(u=t.value.logoLink)==null?void 0:u.target});return(u,v)=>(i(),h("div",{class:A(["VPNavBarTitle",{"has-sidebar":c(s)}])},[d("a",{class:"title",href:a.value??c(Ce)(c(o).link),rel:r.value,target:l.value},[p(u.$slots,"nav-bar-title-before",{},void 0,!0),c(t).logo?(i(),P(ue,{key:0,class:"logo",image:c(t).logo},null,8,["image"])):g("",!0),c(t).siteTitle?(i(),h("span",{key:1,innerHTML:c(t).siteTitle},null,8,Sa)):c(t).siteTitle===void 0?(i(),h("span",Ta,C(c(e).title),1)):g("",!0),p(u.$slots,"nav-bar-title-after",{},void 0,!0)],8,Va)],2))}}),Ma=V(wa,[["__scopeId","data-v-5622a072"]]),Na={class:"items"},Ia={class:"title"},Ca=k({__name:"VPNavBarTranslations",setup(n){const{theme:e}=M(),{localeLinks:t,currentLang:s}=ae({correspondingLink:!0});return(o,a)=>c(t).length&&c(s).label?(i(),P(Ee,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:c(e).langMenuLabel||"Change language"},{default:f(()=>[d("div",Na,[d("p",Ia,C(c(s).label),1),(i(!0),h(H,null,z(c(t),r=>(i(),P(ke,{key:r.link,item:r},null,8,["item"]))),128))])]),_:1},8,["label"])):g("",!0)}}),Aa=V(Ca,[["__scopeId","data-v-dac637f3"]]),Ha={class:"wrapper"},Ba={class:"container"},Ea={class:"title"},Oa={class:"content"},Da={class:"content-body"},Fa=k({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(n){const e=n,{y:t}=xe(),{hasSidebar:s}=x(),{frontmatter:o}=M(),a=T({});return Ne(()=>{a.value={"has-sidebar":s.value,home:o.value.layout==="home",top:t.value===0,"screen-open":e.isScreenOpen}}),(r,l)=>(i(),h("div",{class:A(["VPNavBar",a.value])},[d("div",Ha,[d("div",Ba,[d("div",Ea,[y(Ma,null,{"nav-bar-title-before":f(()=>[p(r.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[p(r.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),d("div",Oa,[d("div",Da,[p(r.$slots,"nav-bar-content-before",{},void 0,!0),y(ya,{class:"search"}),y(Fo,{class:"menu"}),y(Aa,{class:"translations"}),y(Ks,{class:"appearance"}),y(La,{class:"social-links"}),y(Mo,{class:"extra"}),p(r.$slots,"nav-bar-content-after",{},void 0,!0),y(Co,{class:"hamburger",active:r.isScreenOpen,onClick:l[0]||(l[0]=u=>r.$emit("toggle-screen"))},null,8,["active"])])])])]),l[1]||(l[1]=d("div",{class:"divider"},[d("div",{class:"divider-line"})],-1))],2))}}),za=V(Fa,[["__scopeId","data-v-bb7529ee"]]),ja={key:0,class:"VPNavScreenAppearance"},Ua={class:"text"},qa=k({__name:"VPNavScreenAppearance",setup(n){const{site:e,theme:t}=M();return(s,o)=>c(e).appearance&&c(e).appearance!=="force-dark"&&c(e).appearance!=="force-auto"?(i(),h("div",ja,[d("p",Ua,C(c(t).darkModeSwitchLabel||"Appearance"),1),y(He)])):g("",!0)}}),Ga=V(qa,[["__scopeId","data-v-774971f8"]]),Ra=["innerHTML"],Wa=k({__name:"VPNavScreenMenuLink",props:{item:{}},setup(n){const e=_e("close-screen");return(t,s)=>(i(),P(K,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon,onClick:c(e)},{default:f(()=>[d("span",{innerHTML:t.item.text},null,8,Ra)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),Ka=V(Wa,[["__scopeId","data-v-29871565"]]),Ja=["innerHTML"],xa=k({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(n){const e=_e("close-screen");return(t,s)=>(i(),P(K,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon,onClick:c(e)},{default:f(()=>[d("span",{innerHTML:t.item.text},null,8,Ja)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),ot=V(xa,[["__scopeId","data-v-581896e9"]]),Xa={class:"VPNavScreenMenuGroupSection"},Ya={key:0,class:"title"},Qa=k({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(n){return(e,t)=>(i(),h("div",Xa,[e.text?(i(),h("p",Ya,C(e.text),1)):g("",!0),(i(!0),h(H,null,z(e.items,s=>(i(),P(ot,{key:s.text,item:s},null,8,["item"]))),128))]))}}),Za=V(Qa,[["__scopeId","data-v-836cddb8"]]),er=["aria-controls","aria-expanded"],tr=["innerHTML"],nr=["id"],sr={key:0,class:"item"},or={key:1,class:"item"},ar={key:2,class:"group"},rr=k({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(n){const e=n,t=T(!1),s=S(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function o(){t.value=!t.value}return(a,r)=>(i(),h("div",{class:A(["VPNavScreenMenuGroup",{open:t.value}])},[d("button",{class:"button","aria-controls":s.value,"aria-expanded":t.value,onClick:o},[d("span",{class:"button-text",innerHTML:a.text},null,8,tr),r[0]||(r[0]=d("span",{class:"vpi-plus button-icon"},null,-1))],8,er),d("div",{id:s.value,class:"items"},[(i(!0),h(H,null,z(a.items,l=>(i(),h(H,{key:JSON.stringify(l)},["link"in l?(i(),h("div",sr,[y(ot,{item:l},null,8,["item"])])):"component"in l?(i(),h("div",or,[(i(),P(W(l.component),Y({ref_for:!0},l.props,{"screen-menu":""}),null,16))])):(i(),h("div",ar,[y(Za,{text:l.text,items:l.items},null,8,["text","items"])]))],64))),128))],8,nr)],2))}}),ir=V(rr,[["__scopeId","data-v-a8d3502a"]]),lr={key:0,class:"VPNavScreenMenu"},cr=k({__name:"VPNavScreenMenu",setup(n){const{theme:e}=M();return(t,s)=>c(e).nav?(i(),h("nav",lr,[(i(!0),h(H,null,z(c(e).nav,o=>(i(),h(H,{key:JSON.stringify(o)},["link"in o?(i(),P(Ka,{key:0,item:o},null,8,["item"])):"component"in o?(i(),P(W(o.component),Y({key:1,ref_for:!0},o.props,{"screen-menu":""}),null,16)):(i(),P(ir,{key:2,text:o.text||"",items:o.items},null,8,["text","items"]))],64))),128))])):g("",!0)}}),ur=k({__name:"VPNavScreenSocialLinks",setup(n){const{theme:e}=M();return(t,s)=>c(e).socialLinks?(i(),P(Oe,{key:0,class:"VPNavScreenSocialLinks",links:c(e).socialLinks},null,8,["links"])):g("",!0)}}),dr={class:"list"},pr=k({__name:"VPNavScreenTranslations",setup(n){const{localeLinks:e,currentLang:t}=ae({correspondingLink:!0}),s=T(!1);function o(){s.value=!s.value}return(a,r)=>c(e).length&&c(t).label?(i(),h("div",{key:0,class:A(["VPNavScreenTranslations",{open:s.value}])},[d("button",{class:"title",onClick:o},[r[0]||(r[0]=d("span",{class:"vpi-languages icon lang"},null,-1)),ee(" "+C(c(t).label)+" ",1),r[1]||(r[1]=d("span",{class:"vpi-chevron-down icon chevron"},null,-1))]),d("ul",dr,[(i(!0),h(H,null,z(c(e),l=>(i(),h("li",{key:l.link,class:"item"},[y(K,{class:"link",href:l.link},{default:f(()=>[ee(C(l.text),1)]),_:2},1032,["href"])]))),128))])],2)):g("",!0)}}),hr=V(pr,[["__scopeId","data-v-0d43316b"]]),fr={class:"container"},vr=k({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(n){const e=T(null),t=Ye(ge?document.body:null);return(s,o)=>(i(),P(we,{name:"fade",onEnter:o[0]||(o[0]=a=>t.value=!0),onAfterLeave:o[1]||(o[1]=a=>t.value=!1)},{default:f(()=>[s.open?(i(),h("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e,id:"VPNavScreen"},[d("div",fr,[p(s.$slots,"nav-screen-content-before",{},void 0,!0),y(cr,{class:"menu"}),y(hr,{class:"translations"}),y(Ga,{class:"appearance"}),y(ur,{class:"social-links"}),p(s.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):g("",!0)]),_:3}))}}),mr=V(vr,[["__scopeId","data-v-34fa79a7"]]),_r={key:0,class:"VPNav"},gr=k({__name:"VPNav",setup(n){const{isScreenOpen:e,closeScreen:t,toggleScreen:s}=Os(),{frontmatter:o}=M(),a=S(()=>o.value.navbar!==!1);return Qe("close-screen",t),fe(()=>{ge&&document.documentElement.classList.toggle("hide-nav",!a.value)}),(r,l)=>a.value?(i(),h("header",_r,[y(za,{"is-screen-open":c(e),onToggleScreen:c(s)},{"nav-bar-title-before":f(()=>[p(r.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[p(r.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":f(()=>[p(r.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":f(()=>[p(r.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),y(mr,{open:c(e)},{"nav-screen-content-before":f(()=>[p(r.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":f(()=>[p(r.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):g("",!0)}}),kr=V(gr,[["__scopeId","data-v-a46e73f0"]]),br=["role","tabindex"],$r={key:1,class:"items"},yr=k({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(n){const e=n,{collapsed:t,collapsible:s,isLink:o,isActiveLink:a,hasActiveLink:r,hasChildren:l,toggle:u}=zt(S(()=>e.item)),v=S(()=>l.value?"section":"div"),_=S(()=>o.value?"a":"div"),m=S(()=>l.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),L=S(()=>o.value?void 0:"button"),b=S(()=>[[`level-${e.depth}`],{collapsible:s.value},{collapsed:t.value},{"is-link":o.value},{"is-active":a.value},{"has-active":r.value}]);function $(w){"key"in w&&w.key!=="Enter"||!e.item.link&&u()}function N(){e.item.link&&u()}return(w,O)=>{const F=Z("VPSidebarItem",!0);return i(),P(W(v.value),{class:A(["VPSidebarItem",b.value])},{default:f(()=>[w.item.text?(i(),h("div",Y({key:0,class:"item",role:L.value},kt(w.item.items?{click:$,keydown:$}:{},!0),{tabindex:w.item.items&&0}),[O[1]||(O[1]=d("div",{class:"indicator"},null,-1)),w.item.link?(i(),P(K,{key:0,tag:_.value,class:"link",href:w.item.link,rel:w.item.rel,target:w.item.target},{default:f(()=>[(i(),P(W(m.value),{class:"text",innerHTML:w.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(i(),P(W(m.value),{key:1,class:"text",innerHTML:w.item.text},null,8,["innerHTML"])),w.item.collapsed!=null&&w.item.items&&w.item.items.length?(i(),h("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:N,onKeydown:bt(N,["enter"]),tabindex:"0"},O[0]||(O[0]=[d("span",{class:"vpi-chevron-right caret-icon"},null,-1)]),32)):g("",!0)],16,br)):g("",!0),w.item.items&&w.item.items.length?(i(),h("div",$r,[w.depth<5?(i(!0),h(H,{key:0},z(w.item.items,R=>(i(),P(F,{key:R.text,item:R,depth:w.depth+1},null,8,["item","depth"]))),128)):g("",!0)])):g("",!0)]),_:1},8,["class"])}}}),Pr=V(yr,[["__scopeId","data-v-2e0476bc"]]),Lr=k({__name:"VPSidebarGroup",props:{items:{}},setup(n){const e=T(!0);let t=null;return Q(()=>{t=setTimeout(()=>{t=null,e.value=!1},300)}),$t(()=>{t!=null&&(clearTimeout(t),t=null)}),(s,o)=>(i(!0),h(H,null,z(s.items,a=>(i(),h("div",{key:a.text,class:A(["group",{"no-transition":e.value}])},[y(Pr,{item:a,depth:0},null,8,["item"])],2))),128))}}),Vr=V(Lr,[["__scopeId","data-v-ec086cd5"]]),Sr={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},Tr=k({__name:"VPSidebar",props:{open:{type:Boolean}},setup(n){const{sidebarGroups:e,hasSidebar:t}=x(),s=n,o=T(null),a=Ye(ge?document.body:null);J([s,o],()=>{var l;s.open?(a.value=!0,(l=o.value)==null||l.focus()):a.value=!1},{immediate:!0,flush:"post"});const r=T(0);return J(e,()=>{r.value+=1},{deep:!0}),(l,u)=>c(t)?(i(),h("aside",{key:0,class:A(["VPSidebar",{open:l.open}]),ref_key:"navEl",ref:o,onClick:u[0]||(u[0]=Xe(()=>{},["stop"]))},[u[2]||(u[2]=d("div",{class:"curtain"},null,-1)),d("nav",Sr,[u[1]||(u[1]=d("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),p(l.$slots,"sidebar-nav-before",{},void 0,!0),(i(),P(Vr,{items:c(e),key:r.value},null,8,["items"])),p(l.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):g("",!0)}}),wr=V(Tr,[["__scopeId","data-v-12a40e3d"]]),Mr=k({__name:"VPSkipLink",setup(n){const{theme:e}=M(),t=me(),s=T();J(()=>t.path,()=>s.value.focus());function o({target:a}){const r=document.getElementById(decodeURIComponent(a.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(a,r)=>(i(),h(H,null,[d("span",{ref_key:"backToTop",ref:s,tabindex:"-1"},null,512),d("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:o},C(c(e).skipToContentLabel||"Skip to content"),1)],64))}}),Nr=V(Mr,[["__scopeId","data-v-17ad389b"]]),Ir=k({__name:"Layout",setup(n){const{isOpen:e,open:t,close:s}=x(),o=me();J(()=>o.path,s),Ft(e,s);const{frontmatter:a}=M(),r=yt(),l=S(()=>!!r["home-hero-image"]);return Qe("hero-image-slot-exists",l),(u,v)=>{const _=Z("Content");return c(a).layout!==!1?(i(),h("div",{key:0,class:A(["Layout",c(a).pageClass])},[p(u.$slots,"layout-top",{},void 0,!0),y(Nr),y(St,{class:"backdrop",show:c(e),onClick:c(s)},null,8,["show","onClick"]),y(kr,null,{"nav-bar-title-before":f(()=>[p(u.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[p(u.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":f(()=>[p(u.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":f(()=>[p(u.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":f(()=>[p(u.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":f(()=>[p(u.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),y(Es,{open:c(e),onOpenMenu:c(t)},null,8,["open","onOpenMenu"]),y(wr,{open:c(e)},{"sidebar-nav-before":f(()=>[p(u.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":f(()=>[p(u.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),y(bs,null,{"page-top":f(()=>[p(u.$slots,"page-top",{},void 0,!0)]),"page-bottom":f(()=>[p(u.$slots,"page-bottom",{},void 0,!0)]),"not-found":f(()=>[p(u.$slots,"not-found",{},void 0,!0)]),"home-hero-before":f(()=>[p(u.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":f(()=>[p(u.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[p(u.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[p(u.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[p(u.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[p(u.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":f(()=>[p(u.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":f(()=>[p(u.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":f(()=>[p(u.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":f(()=>[p(u.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":f(()=>[p(u.$slots,"doc-before",{},void 0,!0)]),"doc-after":f(()=>[p(u.$slots,"doc-after",{},void 0,!0)]),"doc-top":f(()=>[p(u.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":f(()=>[p(u.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":f(()=>[p(u.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":f(()=>[p(u.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":f(()=>[p(u.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[p(u.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[p(u.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[p(u.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),y(Vs),p(u.$slots,"layout-bottom",{},void 0,!0)],2)):(i(),P(_,{key:1}))}}}),Cr=V(Ir,[["__scopeId","data-v-c4daae71"]]),Hr={Layout:Cr,enhanceApp:({app:n})=>{n.component("Badge",Pt)}};export{Hr as t};
diff --git a/docs/document/assets/en_advanced_property.md.NpFIGOXu.js b/docs/document/assets/en_advanced_property.md.CwqZcLuG.js
similarity index 99%
rename from docs/document/assets/en_advanced_property.md.NpFIGOXu.js
rename to docs/document/assets/en_advanced_property.md.CwqZcLuG.js
index 1e52682e1..3ca671398 100644
--- a/docs/document/assets/en_advanced_property.md.NpFIGOXu.js
+++ b/docs/document/assets/en_advanced_property.md.CwqZcLuG.js
@@ -1,4 +1,4 @@
-import{_ as n,o as e,c as t,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const c=JSON.parse('{"title":"Instance Properties","description":"","frontmatter":{},"headers":[],"relativePath":"en/advanced/property.md","filePath":"en/advanced/property.md","lastUpdated":1789520361000}'),l={name:"en/advanced/property.md"};function p(h,a,r,k,d,E){return e(),t("div",null,a[0]||(a[0]=[s(`

Instance Properties ​

Here, Instance Properties refer to the first-level properties mounted on the instance, which are commonly used.

Instance identity and lifecycle ​

Artplayer.instances returns the shared array of successfully constructed, still-registered instances. The constructor adds an instance only after synchronous initialization finishes; a constructor plugin does not yet find its own instance there. It is not a copy or a list of ready players. Read or copy it rather than editing it: registration, duplicate-container checks and mutex playback use this array. Destruction removes only that instance.

art.constructor is the same Artplayer constructor and its prototype is the instance prototype. Artplayer.version is the package version string, not a capability test. The historical root declarations still name Artplayer.env and Artplayer.build, but neither is supplied by the frozen npm 5.4.0 runtime or the current 6.0.0 runtime; their reads return undefined. The runtime declaration view omits them. The build process's NODE_ENV replacement does not create these public properties.

art.id is an incrementing numeric identifier within one loaded constructor, allocated before option validation. Failed construction can leave gaps; independent bundle copies have independent counters/registries. It is unrelated to option.id, which is a playback-memory key. Do not use it as a globally unique persistent identifier.

State fields and owned services ​

These six fields start as false and are ordinary writable fields, not commands or capability promises. Assigning them does not run the corresponding feature or perform cleanup.

FieldCore meaning
isReadySet before the first ready event after canplay. Not reset to false by reset, source changes or normal destruction, so it does not prove the current URL is ready
isDestroySet after core teardown and instance removal, before the destroy event. Internal closing guards start earlier; it can still be false while cleanup is executing
isFocusUpdated by player focusin/focusout and inside/outside document click/contextmenu paths. Not a direct alias of document.activeElement
isInputTracks INPUT targets in those paths, not every editable target. Keyboard filtering separately checks editable content
isLockUpdated by the mobile lock helper alongside its CSS state. Assigning this field alone does not create the lock UI or emit lock
isRotateTracks the CSS rotation used by web auto-orientation. Native screen-orientation locking does not make this a general device-orientation flag

Optional flv/m3u8/hls/ts/mpd/torrent fields are integration slots for caller-installed adapters. The core does not initialize those SDKs or automatically call arbitrary objects' destroy methods. Follow each adapter's ownership contract and register its cleanup. runtime describes unknown integration values so that consumers check them before use.

art.player is the descriptor installer object, with no public operational methods; playback APIs are installed on art itself. info/loading/mask are existing component services with show and toggle(). Their show setters update CSS state and synchronously emit their named event, including identical assignments. They are not promises and do not fetch media or control buffering. Native media handlers may subsequently change their visibility.

The info service initializes on desktop, polls data-video fields at INFO_LOOP_TIME even while hidden, formats numbers to two decimals, and updates textContent. Its runtime init() restarts the owned polling/listener scope rather than creating an independent extra loop. Loading mounts the configured loading icon. Mask mounts state/error icons, requests play on state-button click, and switches to its terminal error presentation on destruction; a thrown user destroy listener does not skip its final cleanup. These services are not custom-entry containers like layers or controls.

plugins.add remains the registry method documented in the plugin guide: a synchronous result is immediately installed, a same-realm Promise returns a Promise of the registry, and neither shape is converted into a universal async API. The runtime Plugins.add type accepts accurate and legacy factories without wrapping the actual function. Plugin result objects are not automatically disposed merely because they contain a destroy method.

Reset, destruction, and failure ​

reset() only calls video.removeAttribute('src') followed by video.load(). It returns undefined, keeps the UI, registration, option.url, readiness flag and user subscriptions, and does not revoke caller URLs, destroy SDKs or rebuild plugins. Native media events may still follow. Use the source-switch APIs for coordinated source changes; reset is not a full player restart or an asynchronous cancellation receipt.

destroy(removeHtml = true) synchronously starts teardown. When REMOVE_SRC_WHEN_DESTROY is enabled and a media node is available it first calls reset, then releases owned scopes, handles the template, removes the instance, marks isDestroy, emits destroy, and finalizes remaining resources. Browser promises already in flight are not synchronously made complete by its return. Both reset and destroy use the method receiver; keep them bound to the instance when passing them elsewhere.

With true, destruction empties the container; it does not remove the caller's container node or restore its pre-mount content. With false, it keeps the generated DOM and marks the player art-destroy while still stopping core resources. A repeated/reentrant destroy is a no-op, so destroy(false) followed by destroy(true) does not later remove the retained DOM. Reusing the released container requires a new player. The old instance must not be treated as revived, and later property access is not uniformly guaranteed to be a no-op.

Cleanup continues after a failure, then throws the first caught value and logs additional failures. A failing synchronous constructor instead restores its captured DOM/attributes and rethrows the original initialization error. User event registrations are not all erased by destroy: retaining an instance also retains those callbacks until removed. Caller-created timers, native listeners and external SDK resources need their own cleanup; the core-owned listener manager and scopes only release resources registered with them.

ts
import Artplayer from 'artplayer/runtime';
+import{_ as n,o as e,c as t,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const c=JSON.parse('{"title":"Instance Properties","description":"","frontmatter":{},"headers":[],"relativePath":"en/advanced/property.md","filePath":"en/advanced/property.md","lastUpdated":1789521099000}'),l={name:"en/advanced/property.md"};function p(h,a,r,k,d,E){return e(),t("div",null,a[0]||(a[0]=[s(`

Instance Properties ​

Here, Instance Properties refer to the first-level properties mounted on the instance, which are commonly used.

Instance identity and lifecycle ​

Artplayer.instances returns the shared array of successfully constructed, still-registered instances. The constructor adds an instance only after synchronous initialization finishes; a constructor plugin does not yet find its own instance there. It is not a copy or a list of ready players. Read or copy it rather than editing it: registration, duplicate-container checks and mutex playback use this array. Destruction removes only that instance.

art.constructor is the same Artplayer constructor and its prototype is the instance prototype. Artplayer.version is the package version string, not a capability test. The historical root declarations still name Artplayer.env and Artplayer.build, but neither is supplied by the frozen npm 5.4.0 runtime or the current 6.0.0 runtime; their reads return undefined. The runtime declaration view omits them. The build process's NODE_ENV replacement does not create these public properties.

art.id is an incrementing numeric identifier within one loaded constructor, allocated before option validation. Failed construction can leave gaps; independent bundle copies have independent counters/registries. It is unrelated to option.id, which is a playback-memory key. Do not use it as a globally unique persistent identifier.

State fields and owned services ​

These six fields start as false and are ordinary writable fields, not commands or capability promises. Assigning them does not run the corresponding feature or perform cleanup.

FieldCore meaning
isReadySet before the first ready event after canplay. Not reset to false by reset, source changes or normal destruction, so it does not prove the current URL is ready
isDestroySet after core teardown and instance removal, before the destroy event. Internal closing guards start earlier; it can still be false while cleanup is executing
isFocusUpdated by player focusin/focusout and inside/outside document click/contextmenu paths. Not a direct alias of document.activeElement
isInputTracks INPUT targets in those paths, not every editable target. Keyboard filtering separately checks editable content
isLockUpdated by the mobile lock helper alongside its CSS state. Assigning this field alone does not create the lock UI or emit lock
isRotateTracks the CSS rotation used by web auto-orientation. Native screen-orientation locking does not make this a general device-orientation flag

Optional flv/m3u8/hls/ts/mpd/torrent fields are integration slots for caller-installed adapters. The core does not initialize those SDKs or automatically call arbitrary objects' destroy methods. Follow each adapter's ownership contract and register its cleanup. runtime describes unknown integration values so that consumers check them before use.

art.player is the descriptor installer object, with no public operational methods; playback APIs are installed on art itself. info/loading/mask are existing component services with show and toggle(). Their show setters update CSS state and synchronously emit their named event, including identical assignments. They are not promises and do not fetch media or control buffering. Native media handlers may subsequently change their visibility.

The info service initializes on desktop, polls data-video fields at INFO_LOOP_TIME even while hidden, formats numbers to two decimals, and updates textContent. Its runtime init() restarts the owned polling/listener scope rather than creating an independent extra loop. Loading mounts the configured loading icon. Mask mounts state/error icons, requests play on state-button click, and switches to its terminal error presentation on destruction; a thrown user destroy listener does not skip its final cleanup. These services are not custom-entry containers like layers or controls.

plugins.add remains the registry method documented in the plugin guide: a synchronous result is immediately installed, a same-realm Promise returns a Promise of the registry, and neither shape is converted into a universal async API. The runtime Plugins.add type accepts accurate and legacy factories without wrapping the actual function. Plugin result objects are not automatically disposed merely because they contain a destroy method.

Reset, destruction, and failure ​

reset() only calls video.removeAttribute('src') followed by video.load(). It returns undefined, keeps the UI, registration, option.url, readiness flag and user subscriptions, and does not revoke caller URLs, destroy SDKs or rebuild plugins. Native media events may still follow. Use the source-switch APIs for coordinated source changes; reset is not a full player restart or an asynchronous cancellation receipt.

destroy(removeHtml = true) synchronously starts teardown. When REMOVE_SRC_WHEN_DESTROY is enabled and a media node is available it first calls reset, then releases owned scopes, handles the template, removes the instance, marks isDestroy, emits destroy, and finalizes remaining resources. Browser promises already in flight are not synchronously made complete by its return. Both reset and destroy use the method receiver; keep them bound to the instance when passing them elsewhere.

With true, destruction empties the container; it does not remove the caller's container node or restore its pre-mount content. With false, it keeps the generated DOM and marks the player art-destroy while still stopping core resources. A repeated/reentrant destroy is a no-op, so destroy(false) followed by destroy(true) does not later remove the retained DOM. Reusing the released container requires a new player. The old instance must not be treated as revived, and later property access is not uniformly guaranteed to be a no-op.

Cleanup continues after a failure, then throws the first caught value and logs additional failures. A failing synchronous constructor instead restores its captured DOM/attributes and rethrows the original initialization error. User event registrations are not all erased by destroy: retaining an instance also retains those callbacks until removed. Caller-created timers, native listeners and external SDK resources need their own cleanup; the core-owned listener manager and scopes only release resources registered with them.

ts
import Artplayer from 'artplayer/runtime';
 
 const art = new Artplayer({ container: '#player' });
 const instances: Artplayer[] = [...Artplayer.instances];
diff --git a/docs/document/assets/en_advanced_property.md.NpFIGOXu.lean.js b/docs/document/assets/en_advanced_property.md.CwqZcLuG.lean.js
similarity index 97%
rename from docs/document/assets/en_advanced_property.md.NpFIGOXu.lean.js
rename to docs/document/assets/en_advanced_property.md.CwqZcLuG.lean.js
index d572c161d..b34656986 100644
--- a/docs/document/assets/en_advanced_property.md.NpFIGOXu.lean.js
+++ b/docs/document/assets/en_advanced_property.md.CwqZcLuG.lean.js
@@ -1 +1 @@
-import{_ as n,o as e,c as t,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const c=JSON.parse('{"title":"Instance Properties","description":"","frontmatter":{},"headers":[],"relativePath":"en/advanced/property.md","filePath":"en/advanced/property.md","lastUpdated":1789520361000}'),l={name:"en/advanced/property.md"};function p(h,a,r,k,d,E){return e(),t("div",null,a[0]||(a[0]=[s("",63),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",6),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",10),i("div",{className:"run-code"},"▶ Run Code",-1),s("",17),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",1)]))}const g=n(l,[["render",p]]);export{c as __pageData,g as default};
+import{_ as n,o as e,c as t,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const c=JSON.parse('{"title":"Instance Properties","description":"","frontmatter":{},"headers":[],"relativePath":"en/advanced/property.md","filePath":"en/advanced/property.md","lastUpdated":1789521099000}'),l={name:"en/advanced/property.md"};function p(h,a,r,k,d,E){return e(),t("div",null,a[0]||(a[0]=[s("",63),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",6),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",10),i("div",{className:"run-code"},"▶ Run Code",-1),s("",17),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",1)]))}const g=n(l,[["render",p]]);export{c as __pageData,g as default};
diff --git a/docs/document/component/contextmenu.html b/docs/document/component/contextmenu.html
index 3fcc97607..bd21c3bb0 100644
--- a/docs/document/component/contextmenu.html
+++ b/docs/document/component/contextmenu.html
@@ -9,9 +9,9 @@
     
     
     
-    
+    
     
-    
+    
     
     
     
@@ -113,7 +113,7 @@
     click() { this.contextmenu.show = false; },
 });
 if (menu) art.contextmenu.remove('custom-menu');
- + \ No newline at end of file diff --git a/docs/document/component/controls.html b/docs/document/component/controls.html index 0964e3d10..779713706 100644 --- a/docs/document/component/controls.html +++ b/docs/document/component/controls.html @@ -9,9 +9,9 @@ - + - + @@ -164,7 +164,7 @@ art.controls.check(items[1]); console.log(result, art.controls.cache.get('choices')?.$ref); art.controls.remove('choices'); - + \ No newline at end of file diff --git a/docs/document/component/layers.html b/docs/document/component/layers.html index 90c1bd5b0..b40a50e14 100644 --- a/docs/document/component/layers.html +++ b/docs/document/component/layers.html @@ -9,9 +9,9 @@ - + - + @@ -135,7 +135,7 @@ art.layers.update({ name: 'counter', html: 2 }); art.layers.remove('counter'); } - + \ No newline at end of file diff --git a/docs/document/component/setting.html b/docs/document/component/setting.html index 116e6bf1b..6244100f4 100644 --- a/docs/document/component/setting.html +++ b/docs/document/component/setting.html @@ -9,9 +9,9 @@ - + - + @@ -259,7 +259,7 @@ if (found) art.setting.update({ name: found.name, html: 'New label' }); console.log(added === option); art.setting.remove('speed-label'); - + \ No newline at end of file diff --git a/docs/document/en/advanced/built-in.html b/docs/document/en/advanced/built-in.html index fdf7be674..44141476a 100644 --- a/docs/document/en/advanced/built-in.html +++ b/docs/document/en/advanced/built-in.html @@ -9,9 +9,9 @@ - + - + @@ -288,7 +288,7 @@ const icon: HTMLElement | undefined = art.icons.customMark; if (player && icon) player.append(icon); console.log(Artplayer.html, art.video === art.template.$video); - + \ No newline at end of file diff --git a/docs/document/en/advanced/class.html b/docs/document/en/advanced/class.html index 5a7cb9164..8de310bb9 100644 --- a/docs/document/en/advanced/class.html +++ b/docs/document/en/advanced/class.html @@ -9,9 +9,9 @@ - + - + @@ -50,7 +50,7 @@ }, 20); const returned: void = invoke.call({ value: 0 }, 1); void [missing, styled, width, returned];

scheme ​

Returns the validation schema for player options.

▶ Run Code
js
console.info(Artplayer.scheme);

Emitter ​

Returns the constructor of the event emitter.

▶ Run Code
js
console.info(Artplayer.Emitter);

validator ​

Returns the validation function for options.

▶ Run Code
js
console.info(Artplayer.validator);

kindOf ​

Returns the type detection utility function.

▶ Run Code
js
console.info(Artplayer.kindOf);

html ​

Returns the html string required by the player.

▶ Run Code
js
console.info(Artplayer.html);

This is the current version's static base markup, including required classes and media/control nodes, not a snapshot of an instance's current DOM. When reusing preinserted markup through useSSR: true, keep its complete structure and version aligned. The option does not make construction work outside a browser. Actual template instances have no html member; the historical root type retains that member for compatibility, but it does not replace the static entry.

option ​

Returns the default options of the player.

▶ Run Code
js
console.info(Artplayer.option);
- + \ No newline at end of file diff --git a/docs/document/en/advanced/event.html b/docs/document/en/advanced/event.html index 07c30fa0b..f37fb5612 100644 --- a/docs/document/en/advanced/event.html +++ b/docs/document/en/advanced/event.html @@ -9,9 +9,9 @@ - + - + @@ -397,7 +397,7 @@ art.on('keydown', (event) => { console.log(event.code); });

video:canplay ​

The browser can start playing the media, but estimates there is not enough data to play through to the end without stopping for further buffering.

video:canplaythrough ​

The browser estimates it can play the media through to the end without stopping for buffering.

video:complete ​

Historical declared name; not forwarded by the default video event inventory. Use video:ended for media reaching its end.

video:durationchange ​

Triggered when the value of the duration property changes.

video:emptied ​

The media has become empty; for example, this event is sent when the media has already been loaded (or partially loaded), and the load() method is called to reload it.

video:ended ​

Playback has stopped because the media has reached its end.

video:error ​

An error occurred while fetching the media data, or the resource type is not a supported media format.

video:loadeddata ​

The first frame of the media has finished loading.

video:loadedmetadata ​

Metadata has been loaded.

video:pause ​

Playback has been paused.

video:play ​

Playback has begun.

video:playing ​

Playback is ready to start after having been paused or delayed due to lack of data.

video:progress ​

Fired periodically as the browser loads the resource.

video:ratechange ​

The playback rate has changed.

video:seeked ​

A seek operation has completed.

video:seeking ​

A seek operation has begun.

video:stalled ​

The user agent is trying to fetch media data, but data is unexpectedly not forthcoming.

video:suspend ​

Media data loading has been suspended.

video:timeupdate ​

The time indicated by the currentTime property has changed.

video:volumechange ​

The volume has changed.

video:waiting ​

Playback has stopped because of a temporary lack of data.

- + \ No newline at end of file diff --git a/docs/document/en/advanced/global.html b/docs/document/en/advanced/global.html index b5dc99ab8..2ff7aefa7 100644 --- a/docs/document/en/advanced/global.html +++ b/docs/document/en/advanced/global.html @@ -9,9 +9,9 @@ - + - + @@ -248,7 +248,7 @@ // Run destroy cleanup without explicitly resetting src art.destroy(); - + \ No newline at end of file diff --git a/docs/document/en/advanced/plugin.html b/docs/document/en/advanced/plugin.html index c2545c40e..4ca7ffd97 100644 --- a/docs/document/en/advanced/plugin.html +++ b/docs/document/en/advanced/plugin.html @@ -9,9 +9,9 @@ - + - + @@ -139,7 +139,7 @@ }) ], }); - + \ No newline at end of file diff --git a/docs/document/en/advanced/property.html b/docs/document/en/advanced/property.html index 8f4dd9c07..7e462d21e 100644 --- a/docs/document/en/advanced/property.html +++ b/docs/document/en/advanced/property.html @@ -9,11 +9,11 @@ - + - + - + @@ -521,8 +521,8 @@ art.on('ready', () => { art.subtitleOffset = 1; -}); - +}); + \ No newline at end of file diff --git a/docs/document/en/component/contextmenu.html b/docs/document/en/component/contextmenu.html index 697c9f22e..7c668ed02 100644 --- a/docs/document/en/component/contextmenu.html +++ b/docs/document/en/component/contextmenu.html @@ -9,9 +9,9 @@ - + - + @@ -113,7 +113,7 @@ click() { this.contextmenu.show = false; }, }); if (menu) art.contextmenu.remove('custom-menu'); - + \ No newline at end of file diff --git a/docs/document/en/component/controls.html b/docs/document/en/component/controls.html index d42f86eeb..41786f428 100644 --- a/docs/document/en/component/controls.html +++ b/docs/document/en/component/controls.html @@ -9,9 +9,9 @@ - + - + @@ -164,7 +164,7 @@ art.controls.check(items[1]); console.log(result, art.controls.cache.get('choices')?.$ref); art.controls.remove('choices'); - + \ No newline at end of file diff --git a/docs/document/en/component/layers.html b/docs/document/en/component/layers.html index 70b129e48..b7ac7593f 100644 --- a/docs/document/en/component/layers.html +++ b/docs/document/en/component/layers.html @@ -9,9 +9,9 @@ - + - + @@ -135,7 +135,7 @@ art.layers.update({ name: 'counter', html: 2 }); art.layers.remove('counter'); } - + \ No newline at end of file diff --git a/docs/document/en/component/setting.html b/docs/document/en/component/setting.html index 2d92191f9..341edb514 100644 --- a/docs/document/en/component/setting.html +++ b/docs/document/en/component/setting.html @@ -9,9 +9,9 @@ - + - + @@ -259,7 +259,7 @@ if (found) art.setting.update({ name: found.name, html: 'New label' }); console.log(added === option); art.setting.remove('speed-label'); - + \ No newline at end of file diff --git a/docs/document/en/index.html b/docs/document/en/index.html index fd021b0f6..102ad6699 100644 --- a/docs/document/en/index.html +++ b/docs/document/en/index.html @@ -9,9 +9,9 @@ - + - + @@ -237,7 +237,7 @@ </script> </body> </html>

Note

You need to modify it before importing the Artplayer dependency for it to take effect.

- + \ No newline at end of file diff --git a/docs/document/en/plugin/ads.html b/docs/document/en/plugin/ads.html index 2f1ce1538..a65273d85 100644 --- a/docs/document/en/plugin/ads.html +++ b/docs/document/en/plugin/ads.html @@ -9,9 +9,9 @@ - + - + @@ -80,7 +80,7 @@ function pauseCountdown(plugin: Result): void { plugin.pause(); }

Public types include Translations, Option, LegacyOption, WorkspaceOption, CompatOption, Result, Callable, Factory, RuntimeCallable and RuntimeFactory. Historical option types do not add runtime aliases. CommonJS supports the function and .default(...); ESM uses the default export. The precise entry is not a second plugin implementation.

- + \ No newline at end of file diff --git a/docs/document/en/plugin/ambilight.html b/docs/document/en/plugin/ambilight.html index e8dce3cd9..cab058c72 100644 --- a/docs/document/en/plugin/ambilight.html +++ b/docs/document/en/plugin/ambilight.html @@ -9,9 +9,9 @@ - + - + @@ -45,7 +45,7 @@ const installLight = ambilight(); const installDefaultLight = ambilight.default({ opacity: 0.5 });

The root declarations export the named types Option, Result, Callable, Factory and RuntimeFactory. Version 1.0.0 used export = and required option fields, unlike 1.1.0. Earlier import = require callers can move to /runtime; reads of optional fields need a fallback. Node10 TypeScript default imports of /runtime require esModuleInterop; import = require works without it.

- + \ No newline at end of file diff --git a/docs/document/en/plugin/asr.html b/docs/document/en/plugin/asr.html index 8c9b594c2..6e3955b0f 100644 --- a/docs/document/en/plugin/asr.html +++ b/docs/document/en/plugin/asr.html @@ -9,9 +9,9 @@ - + - + @@ -105,7 +105,7 @@ async function stopAsr(plugin: RuntimeResult): Promise<void> { await plugin.stop(); }

Precise types are RuntimeOption, RuntimeResult and RuntimeFactory, with AudioChunk also exported. Some NodeNext ESM consumers retain the old root namespace shape; choose /runtime for a callable default import. CommonJS runtime supports the function itself and its .default self-alias; /runtime also supports TypeScript import = require.

- + \ No newline at end of file diff --git a/docs/document/en/plugin/audio-track.html b/docs/document/en/plugin/audio-track.html index e07bc2a9a..a1b80a984 100644 --- a/docs/document/en/plugin/audio-track.html +++ b/docs/document/en/plugin/audio-track.html @@ -9,9 +9,9 @@ - + - + @@ -52,7 +52,7 @@ return track; }], });

Named types include Option, UpdateOption, the old Result, RuntimeResult and RuntimeFactory. The online editor's default global retains legacy inference too. To select precise update typing, explicitly use artplayerPluginAudioTrack as artplayerPluginAudioTrack.RuntimeFactory. This does not create a second plugin implementation.

Actual desktop tests cover audio/video playback, pause, seeking, updates and destruction. They do not establish support for every mobile device, proxy player, audio format or long-running synchronization combination. Check browser decoding capabilities and the project's validation records for the applicable scope.

Windows WebKit MP4/AAC starvation remains an open native-media validation issue: a stalled video does not reliably emit waiting in that reproduction. Passing source-switch ordering checks does not close that separate case.

- + \ No newline at end of file diff --git a/docs/document/en/plugin/auto-thumbnail.html b/docs/document/en/plugin/auto-thumbnail.html index b794c7caa..cf101eccf 100644 --- a/docs/document/en/plugin/auto-thumbnail.html +++ b/docs/document/en/plugin/auto-thumbnail.html @@ -9,9 +9,9 @@ - + - + @@ -44,7 +44,7 @@ async function registerThumbnails(art: Artplayer): Promise<Result> { return await autoThumbnail(options)(art); // Registration only, not extraction completion. }

Runtime exports Option, Result, Factory and RuntimeFactory. Factory is a plain asynchronous factory; RuntimeFactory adds the writable .default self-alias. CommonJS runtime supports direct and .default(...) calls. Earlier 1.0.x export = and height declarations differ from 1.1.0; use the runtime import = require form when migrating those imports. Root NodeNext namespace behavior remains unchanged; use runtime for an accurate callable default import. Classic Node10 default imports need esModuleInterop.

- + \ No newline at end of file diff --git a/docs/document/en/plugin/chapter.html b/docs/document/en/plugin/chapter.html index f3e0fe1a0..111370283 100644 --- a/docs/document/en/plugin/chapter.html +++ b/docs/document/en/plugin/chapter.html @@ -9,9 +9,9 @@ - + - + @@ -61,7 +61,7 @@ const chapters: Chapters = [{ start: 0, end: Infinity, title: 'Introduction' }]; const installChapters = artplayerPluginChapter({ chapters });

Desktop tests cover chapters with quality selection, thumbnails and fullscreen. They do not establish support on every mobile device. The current Windows WebKit quality-switch tests still encounter stalls while reading browser state, so this page does not promise timing reliability on every platform.

- + \ No newline at end of file diff --git a/docs/document/en/plugin/chromecast.html b/docs/document/en/plugin/chromecast.html index 6121bd207..0372650a0 100644 --- a/docs/document/en/plugin/chromecast.html +++ b/docs/document/en/plugin/chromecast.html @@ -9,9 +9,9 @@ - + - + @@ -49,7 +49,7 @@ function readSession(plugin: RuntimeResult): boolean { return plugin.isCasting(); // Session presence, not receiver playback. }

Root/runtime named types are Option, Chromecast, Result, Factory, ConnectionState, RuntimeOption, RuntimeResult and RuntimeFactory. Historical root NodeNext namespace behavior remains. Use runtime for accurate ESM default calls or older import = require syntax. JavaScript supports direct and .default(...) factory calls; type compatibility does not establish device capabilities.

- + \ No newline at end of file diff --git a/docs/document/en/plugin/danmuku-mask.html b/docs/document/en/plugin/danmuku-mask.html index 3c5fdb5cd..80e813134 100644 --- a/docs/document/en/plugin/danmuku-mask.html +++ b/docs/document/en/plugin/danmuku-mask.html @@ -9,9 +9,9 @@ - + - + @@ -58,7 +58,7 @@ mask.stop(); await mask.start(); }

The preserved NodeNext root declaration has namespace behavior; it does not give the current runtime factory a .default property. Current CommonJS calls the function directly, and ESM runtime uses its default export. Do not infer runtime aliases from the type namespace. Historical export forms, actual segmentation and device performance remain separate checks.

- + \ No newline at end of file diff --git a/docs/document/en/plugin/danmuku.html b/docs/document/en/plugin/danmuku.html index 183e4d3e1..2e99e7677 100644 --- a/docs/document/en/plugin/danmuku.html +++ b/docs/document/en/plugin/danmuku.html @@ -9,9 +9,9 @@ - + - + @@ -125,7 +125,7 @@ const onError = (...[error]: EventMap['artplayerPluginDanmuku:error']) => console.error(error); const art = new Artplayer({ container: '#player', url: '/video.mp4', plugins: [danmuku(option)] }); art.on('artplayerPluginDanmuku:error', onError);

The explicit EventMap describes payloads; it does not augment the core's historical event declarations automatically. The factory also exposes the existing icons object for customization.

Root named types are Mode, Danmuku, Slider, Danmu, Option and Result. /runtime exposes Mode, State, Margin, Point, Danmu, NormalizedDanmu, Item, Input, SliderStep, Slider, Heatmap, NormalizedOption, RuntimeOption, Owner, RuntimeResult, Icons, RuntimeFactory and EventMap. Item adds $state/$index/$ref/$restTime/$lastStartTime; nodes are reused and $ref becomes null when recycled. A node received by a visible handler does not permanently belong to that comment.

icons contains $on/$off/$config/$style, the three pairs $mode_0_off/$mode_0_on through $mode_2_off/$mode_2_on, and $check_on/$check_off. Applications can reuse these SVG strings in their own interfaces. The built-in panel reads bundled icons directly; changing the factory icons object does not replace its icons.

Package README.md and ARCHITECTURE.md describe module ownership, maintenance commands and remaining device/combination validation.

- + \ No newline at end of file diff --git a/docs/document/en/plugin/dash-control.html b/docs/document/en/plugin/dash-control.html index a384a0b78..7f222eed1 100644 --- a/docs/document/en/plugin/dash-control.html +++ b/docs/document/en/plugin/dash-control.html @@ -9,9 +9,9 @@ - + - + @@ -104,7 +104,7 @@ getName: track => track.lang?.toUpperCase() || String(track.id ?? 'Audio'), }, });

Option, Config, QualityLevel, AudioTrack and Result are exported from the root. Root and legacy paths remain available. If using actual SDK declarations, dash.js 4.5.2 exposes BitrateInfo for quality; 5.2.1 uses Representation. Its declarations have different compiler/module-resolution requirements, so test your actual SDK and TypeScript combination. Describe the externally attached art.dash in your application's integration types.

The registered result contains only the fixed name: 'artplayerPluginDashControl' and update(). Ordinary factory calls may omit the options, while the last declaration overload keeps its parameter required: Parameters<typeof dashControl>[0] remains Option, without undefined. This package has no /runtime subpath or factory .default self-alias.

Validation scope ​

The refactor tests fixed dash.js 4.5.2 and 5.2.1 with local adaptive media and old/new core combinations. Those are tested points, not a new blanket support range. The plugin includes a targeted 4.5.2 paused-seek recovery for stale empty-buffer metrics while preserving the caller's SDK settings and media time. Windows Playwright WebKit lacks the MSE path used by these tests; it is not Safari/device playback acceptance. Test your own MPDs, DRM and target devices before adopting the unpublished refactor.

- + \ No newline at end of file diff --git a/docs/document/en/plugin/document-pip.html b/docs/document/en/plugin/document-pip.html index f18a7cb5a..324ad32d3 100644 --- a/docs/document/en/plugin/document-pip.html +++ b/docs/document/en/plugin/document-pip.html @@ -9,9 +9,9 @@ - + - + @@ -52,7 +52,7 @@ async function closePip(pip: AsyncResult): Promise<void> { await pip.close(); }

Named types are Option, Result, AsyncResult, Factory and RuntimeFactory. Apply the precise view only to the unmodified implementation, not a void-returning mock or replaced method. CommonJS runtime supports both require(package)(options) and .default(options). Historical import = require types use .default; use the precise factory view when direct calling is needed.

- + \ No newline at end of file diff --git a/docs/document/en/plugin/hls-control.html b/docs/document/en/plugin/hls-control.html index f4a0896e1..21a74ed98 100644 --- a/docs/document/en/plugin/hls-control.html +++ b/docs/document/en/plugin/hls-control.html @@ -9,9 +9,9 @@ - + - + @@ -108,7 +108,7 @@ getName: track => track.name || track.lang || 'Audio', }, });

Public Option, Config, QualityLevel, AudioTrack and Result types are exported from the root entry. The root and legacy import paths remain available. The types do not pretend every ArtPlayer instance already owns an Hls.js engine; describe art.hls in your application's integration types.

The registered result contains only the fixed name: 'artplayerPluginHlsControl' and update(). Ordinary factory calls may omit the options, while the last declaration overload keeps its parameter required: Parameters<typeof hlsControl>[0] remains Option, without undefined. This package has no /runtime subpath or factory .default self-alias.

Validation scope ​

The refactor tests Hls.js 1.5.17 and 1.7.2 with local media and real workers; these are tested points, not a newly declared supported range. Firefox grouped-stream crashes and a separate switching stall remain under investigation. Windows Playwright WebKit lacks the MSE path used in those tests; it does not establish Safari/iOS native-HLS acceptance. Verify your actual streams and target devices before adopting the unpublished refactor.

- + \ No newline at end of file diff --git a/docs/document/en/plugin/jassub.html b/docs/document/en/plugin/jassub.html index fef23b3ec..fcc588c33 100644 --- a/docs/document/en/plugin/jassub.html +++ b/docs/document/en/plugin/jassub.html @@ -9,9 +9,9 @@ - + - + @@ -68,7 +68,7 @@ }); return instance; }

Runtime exports FontSource, RuntimeOption, AssEvent, AssStyle, AssEventInput, AssStyleInput, WorkerRequestError, EventsCallback, StylesCallback, RuntimeEventMap, RuntimeInstance, RuntimeResult and RuntimeFactory. Precise instance fields include timeOffset, debug, the three sizing settings, optional busy and historical public _canvas/_ctx; _ctx may be false/null. There is no runtime factory .default self-alias. The old root's NodeNext namespace does not create one. Runtime supports an accurate ESM default and CommonJS import = require.

- + \ No newline at end of file diff --git a/docs/document/en/plugin/multiple-subtitles.html b/docs/document/en/plugin/multiple-subtitles.html index 24758b783..f87322a9f 100644 --- a/docs/document/en/plugin/multiple-subtitles.html +++ b/docs/document/en/plugin/multiple-subtitles.html @@ -9,9 +9,9 @@ - + - + @@ -150,7 +150,7 @@ result.reset(); return result; }

Root named types are TrackOption, Option, RuntimeOption, LegacyResult, Result, Factory and RuntimeFactory. Runtime exports TrackOption, RuntimeOption, Result and RuntimeFactory. RuntimeFactory also describes the writable .default self-alias; the historical Factory does not require it.

The 1.0/1.1 export-assignment declarations conflict with 1.2's default-module shape; the approved policy retains 1.2 at the root. NodeNext ESM root types expose the factory at root.default; use runtime for accurate default calls. Classic CommonJS without interop can use runtime import = require; classic default imports need esModuleInterop. Historical JavaScript .default(...) calls remain supported; an old incorrect declaration does not establish a runtime call that never worked.

- + \ No newline at end of file diff --git a/docs/document/en/plugin/vast.html b/docs/document/en/plugin/vast.html index c80713161..abe6b2068 100644 --- a/docs/document/en/plugin/vast.html +++ b/docs/document/en/plugin/vast.html @@ -9,9 +9,9 @@ - + - + @@ -62,7 +62,7 @@ function releaseAd(result: RuntimeResult): void { result.destroy(); }

Runtime exports RequestConfig, CompatibilityOptions, Context, PublishedContext, WorkspaceContext, RuntimeContext, RuntimeCallback, RuntimeResult, Registration and RuntimeFactory, plus the historical workspace aliases ArtplayerPluginVastOption and ArtplayerPluginVastInstance. Those aliases describe the workspace callback and awaited result, respectively. CommonJS without interop can use runtime import = require, supporting both direct and .default calls. These types do not modify the old root declaration.

- + \ No newline at end of file diff --git a/docs/document/en/plugin/vtt-thumbnail.html b/docs/document/en/plugin/vtt-thumbnail.html index c097e928e..40e54464f 100644 --- a/docs/document/en/plugin/vtt-thumbnail.html +++ b/docs/document/en/plugin/vtt-thumbnail.html @@ -9,9 +9,9 @@ - + - + @@ -59,7 +59,7 @@ } } void installThumbnails();

Request and format errors reject registration; format errors include a line number. Registration completion establishes that the VTT was parsed and the control created, not that every image has decoded. Images load when the browser displays them; a later image failure does not reject an already settled registration Promise.

There is no update, reload or independent destroy method. Switching the main video does not refetch the VTT. For a different video and thumbnail set, you can destroy and recreate the player. Removing a control is not a complete uninstall; repeated installation is not an update API.

Destroying the player cancels outstanding requests where AbortController is available, settles canceled registration, removes owned listeners and timers, and removes the control only if this installation still owns it. Cancellation still returns the name object, so the name alone does not prove an image is available. Late requests cannot remount the interface.

TypeScript compatibility ​

The root and /legacy entrances preserve the latest published 1.1.0 synchronous return declaration and replacement-function shape, although registration is asynchronous at runtime. The /runtime entrance above uses the same JavaScript implementation and accurately declares the Promise and runtime .default self-alias. It also exposes Option, Result, Factory and RuntimeFactory types.

The older 1.0.x export = shape cannot preserve the same type extraction as the 1.1.0 default export. TypeScript consumers relying on those earlier CommonJS declarations should migrate to /runtime. NodeNext ESM consumers should also prefer this entrance to avoid the historical namespace shape retained by the root. Legal older JavaScript calls and distribution file entrances remain available.

Browser checks cover cropping and cleanup with published and candidate cores. Complete mobile, plugin combination and release-artifact acceptance remains tracked separately.

- + \ No newline at end of file diff --git a/docs/document/en/proxy/canvas.html b/docs/document/en/proxy/canvas.html index 989d3109e..040e93530 100644 --- a/docs/document/en/proxy/canvas.html +++ b/docs/document/en/proxy/canvas.html @@ -9,9 +9,9 @@ - + - + @@ -70,7 +70,7 @@ const art = new Artplayer({ container: '#player', url: '/movie.mp4', proxy: canvas(overlay) }); const media = art.template.$video as MediaCanvas; function play(): Promise<void> { return media.play(); }

Public types are Option, Result, Factory, Callable, MediaCanvas and RuntimeFactory. MediaCanvas is an explicit view preserving native Canvas collisions; it adds no runtime capabilities and does not narrow factory return inference. The root's historical NodeNext ESM namespace remains; use runtime for accurate default calls. JavaScript root and .default reference the same factory; runtime types describe the alias as readonly. CommonJS can require the function directly, and older TS import=require callers can choose runtime.

- + \ No newline at end of file diff --git a/docs/document/en/proxy/mediabunny.html b/docs/document/en/proxy/mediabunny.html index 61ffabd64..00e32f627 100644 --- a/docs/document/en/proxy/mediabunny.html +++ b/docs/document/en/proxy/mediabunny.html @@ -9,9 +9,9 @@ - + - + @@ -76,7 +76,7 @@ const state = await shim.getM3u8State(); if (state?.levels.length) await shim.switchM3u8Quality(state.levels[0].id); }

Public types are Option, Result, HlsLevel, HlsAudio, HlsState, MediaBunnyCanvas, MediaBunnyPlayer, MediaBunnyShim, MediaListener, SyntheticFrameCallback and SyntheticFrameMetadata. The Canvas view preserves native collisions; the optional player alias is removed on host destruction. CommonJS runtime supports direct and historical .default calls while the factory type remains plain callable. The legacy build does not polyfill WebCodecs, Web Audio or other browser capabilities.

- + \ No newline at end of file diff --git a/docs/document/en/start/i18n.html b/docs/document/en/start/i18n.html index dcef455bd..f7217f989 100644 --- a/docs/document/en/start/i18n.html +++ b/docs/document/en/start/i18n.html @@ -9,9 +9,9 @@ - + - + @@ -75,7 +75,7 @@ }, }, }); - + \ No newline at end of file diff --git a/docs/document/en/start/option.html b/docs/document/en/start/option.html index 533b5ae27..48a4ee00d 100644 --- a/docs/document/en/start/option.html +++ b/docs/document/en/start/option.html @@ -9,9 +9,9 @@ - + - + @@ -438,7 +438,7 @@ url: '/assets/sample/video.mp4', proxy: () => document.createElement('video') }); - + \ No newline at end of file diff --git a/docs/document/en/tool/iframe.html b/docs/document/en/tool/iframe.html index 438f935ba..e25d20588 100644 --- a/docs/document/en/tool/iframe.html +++ b/docs/document/en/tool/iframe.html @@ -9,9 +9,9 @@ - + - + @@ -95,7 +95,7 @@ const answer = tool.commit<number>((resolve) => { resolve(42); }); return { tool, answer }; }

Public types are Option, Message, Callbacks, Notification, MessageCallback, OutboundMessage, ProtocolMessage, Resolve, ResolverCallback, RuntimeInstance, ResolverInstance and RuntimeConstructor. Views neither validate responses nor alter execution. Modern CommonJS TS can use import Iframe = require('artplayer-tool-iframe'); ESM uses the default import. The constructor has no .default self-alias. The old artplayer-plugin-iframe name, namespace and separate helper are not identical to this tool; renaming the dependency alone does not preserve every old entrypoint.

- + \ No newline at end of file diff --git a/docs/document/en/tool/thumbnail.html b/docs/document/en/tool/thumbnail.html index 74d34b03e..978b7b321 100644 --- a/docs/document/en/tool/thumbnail.html +++ b/docs/document/en/tool/thumbnail.html @@ -9,9 +9,9 @@ - + - + @@ -105,7 +105,7 @@ }); return tool; }

Types include SheetOptions, Compatibility, DefaultOptions, Option, ResolvedOption, ScreenshotPoint, Events, EventArgs, Listener and EventRegistry. Known events have precise arguments; custom protocols remain application-defined. The old workspace referenced a missing declaration, so the new types are not claimed as a recovered historical TS baseline. Missing complete old npm archives and rollback acceptance remain separately tracked.

- + \ No newline at end of file diff --git a/docs/document/hashmap.json b/docs/document/hashmap.json index 245980c65..515896e29 100644 --- a/docs/document/hashmap.json +++ b/docs/document/hashmap.json @@ -1 +1 @@ -{"advanced_built-in.md":"C21J11LW","advanced_class.md":"D2pZ5HR2","advanced_event.md":"7BJRbghf","advanced_global.md":"7lzYspte","advanced_plugin.md":"CMpg85CT","advanced_property.md":"DOli61W-","component_contextmenu.md":"q3CUq7tf","component_controls.md":"rXlEfqlM","component_layers.md":"ng2y5lRx","component_setting.md":"DzSNRgF2","en_advanced_built-in.md":"CEhu35vH","en_advanced_class.md":"t5pe4-Hy","en_advanced_event.md":"BOHBlG_Y","en_advanced_global.md":"OawZ0vlZ","en_advanced_plugin.md":"dG7U736p","en_advanced_property.md":"NpFIGOXu","en_component_contextmenu.md":"m0FODHh_","en_component_controls.md":"CDH42Jtc","en_component_layers.md":"DnWSTBIg","en_component_setting.md":"DFfOVhnI","en_index.md":"BBeGRjus","en_plugin_ads.md":"BWhlqED9","en_plugin_ambilight.md":"BIiOdZed","en_plugin_asr.md":"DRBadoM6","en_plugin_audio-track.md":"D4sy3hjB","en_plugin_auto-thumbnail.md":"B4xf1kbN","en_plugin_chapter.md":"Cj9k0GUZ","en_plugin_chromecast.md":"f3zGiPeh","en_plugin_danmuku-mask.md":"BlOM0Hxl","en_plugin_danmuku.md":"CoPuwRfR","en_plugin_dash-control.md":"By5hBqnJ","en_plugin_document-pip.md":"Dk7dXmtu","en_plugin_hls-control.md":"DI6n1NXK","en_plugin_jassub.md":"B3qYHOri","en_plugin_multiple-subtitles.md":"D13skM4m","en_plugin_vast.md":"DY-xXj0Z","en_plugin_vtt-thumbnail.md":"Y25-LZK8","en_proxy_canvas.md":"DEZ3Qm1R","en_proxy_mediabunny.md":"6_ZAU5hs","en_start_i18n.md":"DxgNQ6qb","en_start_option.md":"DcpaFLzR","en_tool_iframe.md":"vqKTz6Jn","en_tool_thumbnail.md":"CYSRU7kz","index.md":"CvYUO2aO","plugin_ads.md":"CSyEjgn0","plugin_ambilight.md":"ChmjnhB2","plugin_asr.md":"B1LNTxu0","plugin_audio-track.md":"xXnVbPG8","plugin_auto-thumbnail.md":"uVTSXyks","plugin_chapter.md":"B_wxldhK","plugin_chromecast.md":"COBfYOhI","plugin_danmuku-mask.md":"DuAZXCsK","plugin_danmuku.md":"CknGHRRA","plugin_dash-control.md":"DGIVabzn","plugin_document-pip.md":"DmibV5MD","plugin_hls-control.md":"_mbfRiWn","plugin_jassub.md":"plPiOu52","plugin_multiple-subtitles.md":"B7ssJkhA","plugin_vast.md":"DXoWKK9-","plugin_vtt-thumbnail.md":"SpQ1vygQ","proxy_canvas.md":"DZ3KjhXs","proxy_mediabunny.md":"8OVtZiO-","start_i18n.md":"D_Yw7TSy","start_option.md":"CuBDvz6i","tool_iframe.md":"gaYYO6Ds","tool_thumbnail.md":"Bpybkc36"} +{"advanced_built-in.md":"C21J11LW","advanced_class.md":"D2pZ5HR2","advanced_event.md":"7BJRbghf","advanced_global.md":"7lzYspte","advanced_plugin.md":"CMpg85CT","advanced_property.md":"DThbIwPo","component_contextmenu.md":"q3CUq7tf","component_controls.md":"rXlEfqlM","component_layers.md":"ng2y5lRx","component_setting.md":"DzSNRgF2","en_advanced_built-in.md":"CEhu35vH","en_advanced_class.md":"t5pe4-Hy","en_advanced_event.md":"BOHBlG_Y","en_advanced_global.md":"OawZ0vlZ","en_advanced_plugin.md":"dG7U736p","en_advanced_property.md":"CwqZcLuG","en_component_contextmenu.md":"m0FODHh_","en_component_controls.md":"CDH42Jtc","en_component_layers.md":"DnWSTBIg","en_component_setting.md":"DFfOVhnI","en_index.md":"BBeGRjus","en_plugin_ads.md":"BWhlqED9","en_plugin_ambilight.md":"BIiOdZed","en_plugin_asr.md":"DRBadoM6","en_plugin_audio-track.md":"D4sy3hjB","en_plugin_auto-thumbnail.md":"B4xf1kbN","en_plugin_chapter.md":"Cj9k0GUZ","en_plugin_chromecast.md":"f3zGiPeh","en_plugin_danmuku-mask.md":"BlOM0Hxl","en_plugin_danmuku.md":"CoPuwRfR","en_plugin_dash-control.md":"By5hBqnJ","en_plugin_document-pip.md":"Dk7dXmtu","en_plugin_hls-control.md":"DI6n1NXK","en_plugin_jassub.md":"B3qYHOri","en_plugin_multiple-subtitles.md":"D13skM4m","en_plugin_vast.md":"DY-xXj0Z","en_plugin_vtt-thumbnail.md":"Y25-LZK8","en_proxy_canvas.md":"DEZ3Qm1R","en_proxy_mediabunny.md":"6_ZAU5hs","en_start_i18n.md":"DxgNQ6qb","en_start_option.md":"DcpaFLzR","en_tool_iframe.md":"vqKTz6Jn","en_tool_thumbnail.md":"CYSRU7kz","index.md":"CvYUO2aO","plugin_ads.md":"CSyEjgn0","plugin_ambilight.md":"ChmjnhB2","plugin_asr.md":"B1LNTxu0","plugin_audio-track.md":"xXnVbPG8","plugin_auto-thumbnail.md":"uVTSXyks","plugin_chapter.md":"B_wxldhK","plugin_chromecast.md":"COBfYOhI","plugin_danmuku-mask.md":"DuAZXCsK","plugin_danmuku.md":"CknGHRRA","plugin_dash-control.md":"DGIVabzn","plugin_document-pip.md":"DmibV5MD","plugin_hls-control.md":"_mbfRiWn","plugin_jassub.md":"plPiOu52","plugin_multiple-subtitles.md":"B7ssJkhA","plugin_vast.md":"DXoWKK9-","plugin_vtt-thumbnail.md":"SpQ1vygQ","proxy_canvas.md":"DZ3KjhXs","proxy_mediabunny.md":"8OVtZiO-","start_i18n.md":"D_Yw7TSy","start_option.md":"CuBDvz6i","tool_iframe.md":"gaYYO6Ds","tool_thumbnail.md":"Bpybkc36"} diff --git a/docs/document/index.html b/docs/document/index.html index 4f0377ef8..9af5f226f 100644 --- a/docs/document/index.html +++ b/docs/document/index.html @@ -9,9 +9,9 @@ - + - + @@ -237,7 +237,7 @@ </script> </body> </html>

提示

你需要在引入 Artplayer 依赖前来修改它才会生效

- + \ No newline at end of file diff --git a/docs/document/plugin/ads.html b/docs/document/plugin/ads.html index 564f7aa28..ca5565b57 100644 --- a/docs/document/plugin/ads.html +++ b/docs/document/plugin/ads.html @@ -9,9 +9,9 @@ - + - + @@ -80,7 +80,7 @@ function pauseCountdown(plugin: Result): void { plugin.pause(); }

公开类型包括 Translations、Option、LegacyOption、WorkspaceOption、CompatOption、Result、Callable、Factory、RuntimeCallable、RuntimeFactory。LegacyOption/WorkspaceOption 用于明确表示历史声明,不新增运行时别名。CommonJS 支持函数本身和 .default(...),ESM 使用默认导出;精确入口不是第二套插件实现。

- + \ No newline at end of file diff --git a/docs/document/plugin/ambilight.html b/docs/document/plugin/ambilight.html index 41f445512..d157375e9 100644 --- a/docs/document/plugin/ambilight.html +++ b/docs/document/plugin/ambilight.html @@ -9,9 +9,9 @@ - + - + @@ -45,7 +45,7 @@ const installLight = ambilight(); const installDefaultLight = ambilight.default({ opacity: 0.5 });

根声明可导入的类型包括 Option、Result、Callable、Factory 和 RuntimeFactory。1.0.0 的 export = 及必填配置字段与 1.1.0 不同;旧 import = require 代码可迁到 /runtime,读取可选字段时提供默认值。Node10 TypeScript 默认导入 /runtime 需要启用 esModuleInterop,不启用时可用 import = require。

- + \ No newline at end of file diff --git a/docs/document/plugin/asr.html b/docs/document/plugin/asr.html index 74e6e4da0..d3b9f1c27 100644 --- a/docs/document/plugin/asr.html +++ b/docs/document/plugin/asr.html @@ -9,9 +9,9 @@ - + - + @@ -105,7 +105,7 @@ async function stopAsr(plugin: RuntimeResult): Promise<void> { await plugin.stop(); }

精确类型为 RuntimeOption、RuntimeResult、RuntimeFactory,并导出 AudioChunk。旧根入口在部分 NodeNext ESM 消费中保留模块命名空间形状;需要可调用默认导入时选择 /runtime。CommonJS 运行时同时支持函数本身和 .default 自引用,/runtime 也支持 TypeScript 的 import = require。

- + \ No newline at end of file diff --git a/docs/document/plugin/audio-track.html b/docs/document/plugin/audio-track.html index 0c9758a97..9014677b9 100644 --- a/docs/document/plugin/audio-track.html +++ b/docs/document/plugin/audio-track.html @@ -9,9 +9,9 @@ - + - + @@ -52,7 +52,7 @@ return track; }], });

命名类型包括 Option、UpdateOption、旧 Result、RuntimeResult 与 RuntimeFactory。在线编辑器的全局默认类型也保留旧推导;选择精确更新类型时,可显式使用 artplayerPluginAudioTrack as artplayerPluginAudioTrack.RuntimeFactory。这不会创建第二份插件实现。

真实桌面测试覆盖音频/视频播放、暂停、seek、更新和销毁;它们不证明所有移动设备、代理播放器、音频格式或长时间同步组合都通过。完整支持范围仍需结合对应浏览器的解码能力与项目验收记录。

Windows WebKit 的 MP4/AAC 耗尽缓冲仍有原生媒体验证缺口:该复现中视频停滞不可靠地触发 waiting。换源顺序检查通过不代表这一独立问题已关闭。

- + \ No newline at end of file diff --git a/docs/document/plugin/auto-thumbnail.html b/docs/document/plugin/auto-thumbnail.html index 51c1d5f67..32148de84 100644 --- a/docs/document/plugin/auto-thumbnail.html +++ b/docs/document/plugin/auto-thumbnail.html @@ -9,9 +9,9 @@ - + - + @@ -44,7 +44,7 @@ async function registerThumbnails(art: Artplayer): Promise<Result> { return await autoThumbnail(options)(art); // Registration only, not extraction completion. }

runtime 导出 Option、Result、Factory、RuntimeFactory;Factory 是普通异步工厂,RuntimeFactory 还描述可写的 .default 自引用。实际 CommonJS 支持直接调用及 .default(...)。更早 1.0.x 的 export = 和 height 声明与 1.1.0 不同,需要旧导入形式时可迁到 runtime 的 import = require。根 NodeNext 模块形状保留,准确的可调用默认导入使用 runtime;经典 Node10 默认导入需要 esModuleInterop。

- + \ No newline at end of file diff --git a/docs/document/plugin/chapter.html b/docs/document/plugin/chapter.html index f30636f32..164ace70e 100644 --- a/docs/document/plugin/chapter.html +++ b/docs/document/plugin/chapter.html @@ -9,9 +9,9 @@ - + - + @@ -61,7 +61,7 @@ const chapters: Chapters = [{ start: 0, end: Infinity, title: 'Introduction' }]; const installChapters = artplayerPluginChapter({ chapters });

章节、清晰度、缩略图和全屏的桌面组合有独立测试;这不代表全部移动设备已通过。当前 Windows WebKit 的清晰度切换测试仍存在浏览器读取停顿,不能据此承诺所有平台均无时序问题。

- + \ No newline at end of file diff --git a/docs/document/plugin/chromecast.html b/docs/document/plugin/chromecast.html index 88f752379..7aa6be72f 100644 --- a/docs/document/plugin/chromecast.html +++ b/docs/document/plugin/chromecast.html @@ -9,9 +9,9 @@ - + - + @@ -49,7 +49,7 @@ function readSession(plugin: RuntimeResult): boolean { return plugin.isCasting(); // Session presence, not receiver playback. }

根和 runtime 可导出的类型为 Option、Chromecast、Result、Factory、ConnectionState、RuntimeOption、RuntimeResult、RuntimeFactory。旧根 NodeNext 命名空间形状保持不变;准确 ESM 默认调用和较早的 import = require 用法使用 runtime。JavaScript 支持直接工厂及 .default(...);这些兼容类型不扩展实际设备能力。

- + \ No newline at end of file diff --git a/docs/document/plugin/danmuku-mask.html b/docs/document/plugin/danmuku-mask.html index 0ffb3d767..ba0a7cac7 100644 --- a/docs/document/plugin/danmuku-mask.html +++ b/docs/document/plugin/danmuku-mask.html @@ -9,9 +9,9 @@ - + - + @@ -58,7 +58,7 @@ mask.stop(); await mask.start(); }

保留的 NodeNext 根类型有模块命名空间行为;这不代表当前运行时工厂有 .default 属性。当前 CommonJS 工厂直接调用,ESM 运行时使用默认导出;不要从类型命名空间推断运行时别名。旧版导出形状、模型真实运行和真机性能各自独立验证。

- + \ No newline at end of file diff --git a/docs/document/plugin/danmuku.html b/docs/document/plugin/danmuku.html index a3375c122..a08a8532b 100644 --- a/docs/document/plugin/danmuku.html +++ b/docs/document/plugin/danmuku.html @@ -9,9 +9,9 @@ - + - + @@ -393,7 +393,7 @@ const onError = (...[error]: EventMap['artplayerPluginDanmuku:error']) => console.error(error); const art = new Artplayer({ container: '#player', url: '/video.mp4', plugins: [danmuku(option)] }); art.on('artplayerPluginDanmuku:error', onError);

EventMap 显式描述事件参数,不会自动扩展核心历史事件声明。工厂仍暴露 icons 对象供自定义图标。

根入口命名类型为 Mode、Danmuku、Slider、Danmu、Option、Result。/runtime 提供 Mode、State、Margin、Point、Danmu、NormalizedDanmu、Item、Input、SliderStep、Slider、Heatmap、NormalizedOption、RuntimeOption、Owner、RuntimeResult、Icons、RuntimeFactory、EventMap。Item 带有 $state/$index/$ref/$restTime/$lastStartTime;节点会复用,回收后 $ref 为 null,不能将 visible 时取得的节点当作永久归属该弹幕。

icons 包含 $on/$off/$config/$style、三个模式各自的 $mode_0_off/$mode_0_on 到 $mode_2_off/$mode_2_on,以及 $check_on/$check_off。这些 SVG 字符串可供应用自己的界面复用。内置面板直接读取打包的图标,修改工厂 icons 对象不会替换内置面板图标。 包内 README.md 和 ARCHITECTURE.md 维护模块职责、验证命令及尚未完成的设备和组合验收。

- + \ No newline at end of file diff --git a/docs/document/plugin/dash-control.html b/docs/document/plugin/dash-control.html index e863d635a..84c42aa9f 100644 --- a/docs/document/plugin/dash-control.html +++ b/docs/document/plugin/dash-control.html @@ -9,9 +9,9 @@ - + - + @@ -104,7 +104,7 @@ getName: track => track.lang?.toUpperCase() || String(track.id ?? 'Audio'), }, });

根入口导出 Option、Config、QualityLevel、AudioTrack 和 Result,原根入口与 legacy 路径继续保留。使用实际 SDK 声明时,dash.js 4.5.2 的画质类型为 BitrateInfo,5.2.1 使用 Representation;其编译器与模块解析要求不同,应验证实际 SDK/TypeScript 组合。在应用的集成类型中描述外部附加的 art.dash。

注册结果只有固定的 name: 'artplayerPluginDashControl' 和 update()。工厂普通调用允许省略配置;最后一个声明重载保留必填参数,因此 Parameters<typeof dashControl>[0] 仍为 Option,不包含 undefined。本包没有 /runtime 子路径,也没有工厂 .default 自引用。

验证范围 ​

重构使用固定 dash.js 4.5.2 / 5.2.1、本地自适应媒体和新旧核心组合验证;这两个版本是验证点,不是新定义的完整支持范围。插件对4.5.2暂停拖动后空缓冲指标陈旧的问题有定向恢复,保留调用方 SDK 设置和媒体时间。Windows Playwright WebKit 缺少相关 MSE 路径,不能代表 Safari 或真机播放已验收。采用未发布重构前,应验证自己的 MPD、DRM 和目标设备。

- + \ No newline at end of file diff --git a/docs/document/plugin/document-pip.html b/docs/document/plugin/document-pip.html index de41f1e03..ae8af2a3c 100644 --- a/docs/document/plugin/document-pip.html +++ b/docs/document/plugin/document-pip.html @@ -9,9 +9,9 @@ - + - + @@ -52,7 +52,7 @@ async function closePip(pip: AsyncResult): Promise<void> { await pip.close(); }

命名类型为 Option、Result、AsyncResult、Factory、RuntimeFactory。精确视图仅用于未经替换的真实实现,不能将返回 void 的 mock 或被替换方法强转为异步实现。CommonJS 运行时支持 require(package)(options) 和 .default(options);旧 import = require 类型视图使用 .default,需要直接调用时选择精确工厂视图。

- + \ No newline at end of file diff --git a/docs/document/plugin/hls-control.html b/docs/document/plugin/hls-control.html index 89b909267..da0df4e76 100644 --- a/docs/document/plugin/hls-control.html +++ b/docs/document/plugin/hls-control.html @@ -9,9 +9,9 @@ - + - + @@ -108,7 +108,7 @@ getName: track => track.name || track.lang || 'Audio', }, });

根入口导出 Option、Config、QualityLevel、AudioTrack 和 Result 类型,原根入口及 legacy 路径继续保留。声明不会假定每个 ArtPlayer 实例都有 Hls.js;请在应用的集成类型中描述 art.hls。

注册结果只有固定的 name: 'artplayerPluginHlsControl' 和 update()。工厂普通调用允许省略配置;最后一个声明重载保留必填参数,因此 Parameters<typeof hlsControl>[0] 仍为 Option,不包含 undefined。本包没有 /runtime 子路径,也没有工厂 .default 自引用。

验证范围 ​

重构使用本地媒体和真实 worker 验证 Hls.js 1.5.17 / 1.7.2;这两个版本是验证点,不是新定义的支持范围。Firefox 的分组播放崩溃和另一项切组停滞仍在排查。Windows Playwright WebKit 缺少测试所需的 MSE 路径,不能代表 Safari/iOS 原生 HLS 已验收。采用尚未发布的重构前,应验证实际媒体与目标设备。

- + \ No newline at end of file diff --git a/docs/document/plugin/jassub.html b/docs/document/plugin/jassub.html index 7dbf3f829..e3c14ebc0 100644 --- a/docs/document/plugin/jassub.html +++ b/docs/document/plugin/jassub.html @@ -9,9 +9,9 @@ - + - + @@ -68,7 +68,7 @@ }); return instance; }

runtime 导出 FontSource、RuntimeOption、AssEvent、AssStyle、AssEventInput、AssStyleInput、WorkerRequestError、EventsCallback、StylesCallback、RuntimeEventMap、RuntimeInstance、RuntimeResult、RuntimeFactory。精确实例字段包括 timeOffset、debug、三项尺寸设置、可选 busy,以及历史公开 _canvas/_ctx;_ctx 可能为 false/null。没有运行时工厂 .default 自引用;NodeNext 根类型的命名空间不能当作这种别名。runtime 支持准确 ESM 默认导入和 CommonJS import = require。

- + \ No newline at end of file diff --git a/docs/document/plugin/multiple-subtitles.html b/docs/document/plugin/multiple-subtitles.html index ce5bf3e57..3b92016f1 100644 --- a/docs/document/plugin/multiple-subtitles.html +++ b/docs/document/plugin/multiple-subtitles.html @@ -9,9 +9,9 @@ - + - + @@ -150,7 +150,7 @@ result.reset(); return result; }

根命名类型为 TrackOption、Option、RuntimeOption、LegacyResult、Result、Factory、RuntimeFactory;runtime 导出 TrackOption、RuntimeOption、Result、RuntimeFactory。RuntimeFactory 还描述可写 .default 自引用;旧 Factory 不要求该属性。

1.0/1.1 的 export-assignment 声明与 1.2 默认模块形状冲突,根按已批准规则保留 1.2。NodeNext ESM 根类型的工厂在 root.default,准确的默认调用使用 runtime。经典 CommonJS 无 interop 时可使用 runtime 的 import = require;经典默认导入需 esModuleInterop。历史 JavaScript .default(...) 调用继续支持,不将旧声明错误宣传为原来不存在的运行时调用方式。

- + \ No newline at end of file diff --git a/docs/document/plugin/vast.html b/docs/document/plugin/vast.html index 42cdcde92..a5200bee6 100644 --- a/docs/document/plugin/vast.html +++ b/docs/document/plugin/vast.html @@ -9,9 +9,9 @@ - + - + @@ -62,7 +62,7 @@ function releaseAd(result: RuntimeResult): void { result.destroy(); }

runtime 导出 RequestConfig、CompatibilityOptions、Context、PublishedContext、WorkspaceContext、RuntimeContext、RuntimeCallback、RuntimeResult、Registration、RuntimeFactory,及旧工作区别名 ArtplayerPluginVastOption/ArtplayerPluginVastInstance。前者是工作区回调类型,后者是 await 后的结果类型。CommonJS 无 interop 时可用 runtime 的 import = require,支持函数和 .default;这些类型不会更改旧根声明。

- + \ No newline at end of file diff --git a/docs/document/plugin/vtt-thumbnail.html b/docs/document/plugin/vtt-thumbnail.html index ae1299558..02096b889 100644 --- a/docs/document/plugin/vtt-thumbnail.html +++ b/docs/document/plugin/vtt-thumbnail.html @@ -9,9 +9,9 @@ - + - + @@ -59,7 +59,7 @@ } } void installThumbnails();

请求失败或格式错误会拒绝注册,格式错误包含行号。注册完成只说明 VTT 已加载解析并创建控件,不表示所有图片已解码;图片在浏览器显示时加载,图片请求失败不会变成已经完成的注册 Promise 的拒绝。

插件没有 update、reload 或独立 destroy 方法。切换主视频不会自动重新请求 VTT;切换到另一套视频和缩略图时,可销毁并重建播放器。不要把 controls.remove() 当作完整卸载,也不要用重复安装模拟一个没有提供的更新接口。

销毁播放器会取消待处理请求(环境支持 AbortController 时),结算取消的注册、移除自己的监听器和计时器,并移除仍由本次安装持有的控件。取消结算仍返回名称对象,因此名称本身不是图片可用的证明。迟到请求不会重新挂载界面。

TypeScript 兼容 ​

根入口和 /legacy 保留最新已发布 1.1.0 的旧同步返回类型与函数替换形状,实际注册始终是异步的。上面的 /runtime 使用相同 JavaScript 实现,准确声明 Promise 和运行时 .default 自引用别名,并提供 Option、Result、Factory、RuntimeFactory 类型。

1.0.x 的旧 export = 与 1.1.0 的默认导出声明无法同时保持相同类型提取。依赖较早 CommonJS 声明的 TypeScript 代码应迁移到 /runtime;NodeNext ESM 消费者也优先使用此入口,避免根入口保留的历史命名空间形状。合法旧 JavaScript 调用和历史文件入口继续保留。

浏览器验证覆盖新旧核心的进度条裁剪和清理;完整移动端、插件组合与发布产物验收仍以项目记录为准。

- + \ No newline at end of file diff --git a/docs/document/proxy/canvas.html b/docs/document/proxy/canvas.html index 1d7bc8666..9d64e6926 100644 --- a/docs/document/proxy/canvas.html +++ b/docs/document/proxy/canvas.html @@ -9,9 +9,9 @@ - + - + @@ -70,7 +70,7 @@ const art = new Artplayer({ container: '#player', url: '/movie.mp4', proxy: canvas(overlay) }); const media = art.template.$video as MediaCanvas; function play(): Promise<void> { return media.play(); }

公开类型为 Option、Result、Factory、Callable、MediaCanvas、RuntimeFactory。MediaCanvas 是显式类型视图,保留 Canvas 同名成员,不增加实际能力或收紧工厂的返回推导。根 NodeNext ESM 的历史命名空间类型仍保留,准确默认调用使用 runtime。JavaScript 根工厂和 .default 指向同一函数;runtime 类型将该别名描述为 readonly。CommonJS 可直接 require,旧 TS 的 import = require 可选择 runtime 入口。

- + \ No newline at end of file diff --git a/docs/document/proxy/mediabunny.html b/docs/document/proxy/mediabunny.html index c59d20720..8c3371357 100644 --- a/docs/document/proxy/mediabunny.html +++ b/docs/document/proxy/mediabunny.html @@ -9,9 +9,9 @@ - + - + @@ -76,7 +76,7 @@ const state = await shim.getM3u8State(); if (state?.levels.length) await shim.switchM3u8Quality(state.levels[0].id); }

公开类型为 Option、Result、HlsLevel、HlsAudio、HlsState、MediaBunnyCanvas、MediaBunnyPlayer、MediaBunnyShim、MediaListener、SyntheticFrameCallback、SyntheticFrameMetadata。Canvas 视图保留同名原生成员;Player 别名可缺省且销毁后移除。CommonJS 运行时支持直接工厂和历史 .default,默认工厂类型仍为纯可调用签名。legacy 构建不提供 WebCodecs、Web Audio 或其他浏览器能力的 polyfill。

- + \ No newline at end of file diff --git a/docs/document/start/i18n.html b/docs/document/start/i18n.html index 4bf14d9a0..8311510c9 100644 --- a/docs/document/start/i18n.html +++ b/docs/document/start/i18n.html @@ -9,9 +9,9 @@ - + - + @@ -75,7 +75,7 @@ }, }, }); - + \ No newline at end of file diff --git a/docs/document/start/option.html b/docs/document/start/option.html index 90c90bdf5..a6ecc7539 100644 --- a/docs/document/start/option.html +++ b/docs/document/start/option.html @@ -9,9 +9,9 @@ - + - + @@ -438,7 +438,7 @@ url: '/assets/sample/video.mp4', proxy: () => document.createElement('video') }); - + \ No newline at end of file diff --git a/docs/document/tool/iframe.html b/docs/document/tool/iframe.html index 893ad7b61..5eee66e42 100644 --- a/docs/document/tool/iframe.html +++ b/docs/document/tool/iframe.html @@ -9,9 +9,9 @@ - + - + @@ -95,7 +95,7 @@ const answer = tool.commit<number>((resolve) => { resolve(42); }); return { tool, answer }; }

公开类型包括 Option、Message、Callbacks、Notification、MessageCallback、OutboundMessage、ProtocolMessage、Resolve、ResolverCallback、RuntimeInstance、ResolverInstance、RuntimeConstructor。类型视图不验证响应数据,也不改变执行协议。现代 CommonJS TS 可用 import Iframe = require('artplayer-tool-iframe');ESM 使用默认导入。构造器没有 .default 自引用。旧 artplayer-plugin-iframe 的包名、命名空间和独立 helper 不等同于本工具,不能仅换依赖名就认为所有入口兼容。

- + \ No newline at end of file diff --git a/docs/document/tool/thumbnail.html b/docs/document/tool/thumbnail.html index eca98fd2b..faf220bf7 100644 --- a/docs/document/tool/thumbnail.html +++ b/docs/document/tool/thumbnail.html @@ -9,9 +9,9 @@ - + - + @@ -105,7 +105,7 @@ }); return tool; }

类型包括 SheetOptions、Compatibility、DefaultOptions、Option、ResolvedOption、ScreenshotPoint、Events、EventArgs、Listener、EventRegistry。已知事件有精确参数;自定义协议仍需应用约定。旧工作区曾指向不存在的声明,当前类型不冒充已恢复的历史 TS 基线;完整旧 npm 归档缺口与回退验收仍独立记录。

- + \ No newline at end of file diff --git a/packages/artplayer-vitepress/README.md b/packages/artplayer-vitepress/README.md index a6a08c540..f11254952 100644 --- a/packages/artplayer-vitepress/README.md +++ b/packages/artplayer-vitepress/README.md @@ -31,7 +31,7 @@ not a VitePress page. Keep both URL surfaces compatible. | `docs/proxy/canvas.md`, `docs/en/proxy/canvas.md` | Backing video, draw callbacks/events, Canvas priority, subtitles and compatible types | `/document/proxy/canvas.html`, `/document/en/proxy/canvas.html` | | `docs/proxy/mediabunny.md`, `docs/en/proxy/mediabunny.md` | Input, HLS pairing, synthetic media state, lifecycle and explicit type views | `/document/proxy/mediabunny.html`, `/document/en/proxy/mediabunny.html` | | `docs/.vitepress/config.js` | Navigation, base URL, output path, page head | Repository `docs/document/` | -| `docs/vite.config.ts` | Search plugin configuration | VitePress/Vite integration; real search acceptance remains pending | +| `docs/vite.config.ts`, `build/search.ts` | Search configuration and pinned upstream interaction adapter | Preserves the search template, CSS hooks, index and result URLs | | `docs/public/main.js` | Run Code links and first-visit language redirect | Copied into the built site | | `docs/public/style.css` | Documentation presentation | Copied into the built site | @@ -45,9 +45,38 @@ serve different purposes. Neither path check replaces browser navigation tests. The generated site lives in `docs/document/`. The current inventory contains 66 Markdown pages: 33 Chinese and 33 English. All 16 plugins, both tools and both proxies have dedicated guides and navigation in both languages. -Core member -mapping and the current cross-check of earlier guides remain in SITE-04; -navigation links alone are not complete API documentation. +SITE-04 completed the 963 core declaration mappings and cross-checked all 40 +ecosystem guides. Full site execution and delivery remain in SITE-05/SITE-06; +navigation links alone do not establish player or plugin playback compatibility. + +### Local documentation search + +`vitepress-plugin-search` 1.0.4-alpha.22 supplies the shared Chinese/English +index and existing search UI. Its FlexSearch peer is pinned to 0.7.43 in this +workspace, within the declared `^0.7.31` range. The plugin also embeds its own +index implementation, so changing this peer alone does not fix UI behavior. +Its existing token matching is retained; Chinese substring segmentation is not +promised. The Algolia/search-insights peer warnings originate from VitePress's +unused hosted-search dependencies; this site does not configure that provider. + +`build/search.ts` runs before Vue compilation. It checks the exact installed +component hash, normalizes CRLF for patch matching, and requires each replacement +to match once. It prevents Enter from submitting the HTML form, navigates the +selected result through the router, handles empty results and composition, +resets selection when queries change, and makes Escape close the modal and +restore button focus. Focus waits for Vue's DOM update rather than a timer. +The component owns its shortcut listener and removes it on unmount; a late index +import cannot attach it after unmount. Upstream HTML/CSS and third-party attribution +stay intact. Do not modify `node_modules` or simply update the hash on an upgrade: +review these interactions and the new upstream component first. + +Use `yarn test:site-build` for the pinned-component compilation and drift guard, +`yarn typecheck:docs-tools` for the adapter, and rebuild with `yarn build:docs` +before `yarn test:browser:source document-search.spec.js document-site.spec.js`. +Browser checks cover both language URLs, pointer navigation, keyboard selection, +Escape, focus, no results, and retained document identity (no form reload). +They isolate external scripts and do not validate AdSense, physical devices, +all search-index anchors or the complete online editor; those remain SITE-05 work. Tools have their own navigation group. Iframe explains the required child inject step and serialized commit body, without treating the protocol as a sandbox or diff --git a/packages/artplayer-vitepress/build/search.ts b/packages/artplayer-vitepress/build/search.ts new file mode 100644 index 000000000..82c0709f5 --- /dev/null +++ b/packages/artplayer-vitepress/build/search.ts @@ -0,0 +1,74 @@ +import type { Plugin } from 'vite' +import assert from 'node:assert/strict' +import { createHash } from 'node:crypto' + +// Keep the pinned upstream template, CSS, index and URLs; patch interaction ownership only. +const componentHash = 'c53a0d2a5b5380123f775b0852b5805a4b0a3d97248d5c296972de30c35f6f9c' + +export function patchSearchComponent(source: string): string { + assert.equal(createHash('sha256').update(source).digest('hex'), componentHash, 'Review the search interaction adapter before upgrading vitepress-plugin-search') + let result = source.replaceAll('\r\n', '\n') + const replace = (before: string, after: string) => { + assert.equal(result.split(before).length, 2, `Expected one search patch target: ${before}`) + result = result.replace(before, after) + } + replace('ref, onMounted, computed, nextTick', 'ref, onMounted, onUnmounted, computed, nextTick, watch') + replace('if (searchTerm.value) {', 'if (searchTerm.value && searchIndex.value) {') + replace(`const openSearch = () => { + setTimeout(() => { + if (input.value) input.value.focus(); + }, 100); + cleanSearch(); + open.value = true; +};`, `const openSearch = () => { + cleanSearch(); + open.value = true; + nextTick(() => { if (alive && open.value) input.value?.focus(); }); +};`) + replace('onMounted(async () => {', `let alive = true; +let removeHotKey = () => {}; +onUnmounted(() => { alive = false; removeHotKey(); }); +watch(searchTerm, () => { focused.value = 0; }, { flush: "sync" }); +onMounted(async () => {`) + replace('const data = await import("virtual:search-data");', 'const data = await import("virtual:search-data");\n if (!alive) return;') + replace('if (searchTerm.value?.length == 0 && open.value)\n open.value = false', 'if (open.value) {\n e.preventDefault();\n cleanSearch();\n documentButton()?.focus();\n }') + replace('window.addEventListener("keydown", handleSearchHotKey);', 'window.addEventListener("keydown", handleSearchHotKey);\n removeHotKey = () => window.removeEventListener("keydown", handleSearchHotKey);') + replace('
', '') + + const start = result.indexOf('const handleNavigation = (e: KeyboardEvent) => {') + const end = result.indexOf('', start) + assert(start > 0 && end > start, 'Missing pinned search keyboard handler') + result = `${result.slice(0, start)}function documentButton() { + return document.querySelector("#docsearch button"); +} +const handleNavigation = (e: KeyboardEvent) => { + if (e.isComposing || !["ArrowUp", "ArrowDown", "Enter"].includes(e.key)) return; + e.preventDefault(); + const links = Array.from(modal.value?.querySelectorAll(".search-group a") || []); + if (!links.length) return; + const current = links.findIndex(link => link.classList.contains("link-focused")); + if (e.key === "Enter") { + const href = links[Math.max(current, 0)].href; + cleanSearch(); + void router.go(href); + return; + } + const delta = e.key === "ArrowDown" ? 1 : -1; + const next = (Math.max(current, 0) + delta + links.length) % links.length; + focused.value = linksOrder.value[next]; + links[next].scrollIntoView({ block: "nearest" }); +}; +${result.slice(end)}` + return result +} + +export function searchInteractions(): Plugin { + return { + name: 'artplayer-search-interactions', + enforce: 'pre', + transform(source, id) { + if (id.replaceAll('\\', '/').endsWith('/vitepress-plugin-search/dist/Search.vue')) + return { code: patchSearchComponent(source), map: null } + }, + } +} diff --git a/packages/artplayer-vitepress/docs/vite.config.ts b/packages/artplayer-vitepress/docs/vite.config.ts index a8b0a2103..bd91bdecc 100644 --- a/packages/artplayer-vitepress/docs/vite.config.ts +++ b/packages/artplayer-vitepress/docs/vite.config.ts @@ -1,11 +1,13 @@ import { SearchPlugin } from "vitepress-plugin-search"; +import { searchInteractions } from '../build/search.ts'; export default { plugins: [ + searchInteractions(), SearchPlugin({ placeholder: "Search docs", buttonLabel: "Search", previewLength: 62, }), ], -}; \ No newline at end of file +}; diff --git a/packages/artplayer-vitepress/package.json b/packages/artplayer-vitepress/package.json index c864c8c1c..558d9bfaa 100644 --- a/packages/artplayer-vitepress/package.json +++ b/packages/artplayer-vitepress/package.json @@ -8,7 +8,7 @@ "preview": "vitepress preview docs" }, "devDependencies": { - "flexsearch": "0.8.158", + "flexsearch": "0.7.43", "markdown-it": "14.1.0", "vitepress": "1.6.3", "vitepress-plugin-search": "1.0.4-alpha.22", diff --git a/refactor/baselines/site-inventory.json b/refactor/baselines/site-inventory.json index 9327bb80d..a6cabe049 100644 --- a/refactor/baselines/site-inventory.json +++ b/refactor/baselines/site-inventory.json @@ -20005,10 +20005,10 @@ { "source": "docs/document/404.html", "route": "/document/404.html", - "sha256Lf": "3cc015bcac3ade31bcf92476a00c884a967f5a27b306226ae75e25ba46ec3266", + "sha256Lf": "8d50bad1114a18e821fd72fd144d811a11a9ac0eae8c012a9df0c6dd79e98336", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20018,10 +20018,10 @@ { "source": "docs/document/advanced/built-in.html", "route": "/document/advanced/built-in.html", - "sha256Lf": "17dabe198a19a5f9f449c2f0049cb5e2805cc43ea78d6aabae707961eb136baa", + "sha256Lf": "538e2203ccbb54cff6a3f3e86255ae134fd61f03844e03461e05aa21dc21f616", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20031,10 +20031,10 @@ { "source": "docs/document/advanced/class.html", "route": "/document/advanced/class.html", - "sha256Lf": "ce8c153d0323fc183e24728931120363459dffba052779e598bd1e172bfbf606", + "sha256Lf": "a663bfff0a46096a45d1d7441c1ac7dd3147f13244caae89c39065fb2121e8c7", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20044,10 +20044,10 @@ { "source": "docs/document/advanced/event.html", "route": "/document/advanced/event.html", - "sha256Lf": "ef4b35b13dbe124c7c21d8a9a063eb6277f92d2d4f7d5b897acba88b82eeee26", + "sha256Lf": "f6cdb194774f85716162c92f3dbedb95b7b58fb1a0bafbcf2d6be70afbd2d630", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20057,10 +20057,10 @@ { "source": "docs/document/advanced/global.html", "route": "/document/advanced/global.html", - "sha256Lf": "e4931478cabbe281fb9c1e5998c55208d9997492734b1cf48a6cd9e7701176bc", + "sha256Lf": "25a2c7749c12234cecd198c864a6243a799fd69cfcfde4999fee2e003eae5a3a", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20070,10 +20070,10 @@ { "source": "docs/document/advanced/plugin.html", "route": "/document/advanced/plugin.html", - "sha256Lf": "94f618dfa9a89926165422e01b2d174233320012e0db1a6ad0681ce2e20e3d9d", + "sha256Lf": "d32a4898b4932ddf736504cc8bba0d81a987c723f4ecb0e343434ea615aebd1c", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20083,10 +20083,10 @@ { "source": "docs/document/advanced/property.html", "route": "/document/advanced/property.html", - "sha256Lf": "2b976052d327c9271b80642804c6346bf59110f60ec1bf8ef933736d1e802310", + "sha256Lf": "d05656d5260702665debadf65135cd84e66c64d37f115324314a234d0c17d32c", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20096,10 +20096,10 @@ { "source": "docs/document/component/contextmenu.html", "route": "/document/component/contextmenu.html", - "sha256Lf": "ea64ca199861b0ae1586a2cbce8057e21dd5ea81dd431f3a66cba6d39ca74cb4", + "sha256Lf": "faa5e54467a00310ee5801ea802f17f20ae10d86f2255e9fb92575f7b4f91b89", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20109,10 +20109,10 @@ { "source": "docs/document/component/controls.html", "route": "/document/component/controls.html", - "sha256Lf": "8c286de7931df13aa4af0af785b320d9c71dbde245397e44767af3e1c3070c0e", + "sha256Lf": "808e1e1a12e492f76d0467b2aa0ba05e3c370e53949b993d428bf313f42a7687", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20122,10 +20122,10 @@ { "source": "docs/document/component/layers.html", "route": "/document/component/layers.html", - "sha256Lf": "d4466074147ff49b0307e944726ca94abf629647711fc371226d1fab1c229862", + "sha256Lf": "f42cc8be89ba6633555e5ae5a998762a00df81800a94606c17bcc37fefdaeee2", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20135,10 +20135,10 @@ { "source": "docs/document/component/setting.html", "route": "/document/component/setting.html", - "sha256Lf": "0ad67e313ce8bd3f287f317ca27f3ce928c376368f01a6da35c046b9fe188d7e", + "sha256Lf": "662c4e23f7e3034722aea24a840cf595eb1bd98fb8089303d7af1d77046d38c6", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20148,10 +20148,10 @@ { "source": "docs/document/en/advanced/built-in.html", "route": "/document/en/advanced/built-in.html", - "sha256Lf": "872e04981b6a764a197c7adc676c895faf250cf1842c44046c746f87a5b954e9", + "sha256Lf": "90c4e5933881b9bb2579b545c3a34669f22503907aab5742a30f846907968d2f", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20161,10 +20161,10 @@ { "source": "docs/document/en/advanced/class.html", "route": "/document/en/advanced/class.html", - "sha256Lf": "24f024bc650705789c98b5b190b446b40537c9726c3f9290606962b8b08e9400", + "sha256Lf": "c1e8e771e3bb6618855b9879c7a3891cc04de2248717e532438339f454e62b0d", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20174,10 +20174,10 @@ { "source": "docs/document/en/advanced/event.html", "route": "/document/en/advanced/event.html", - "sha256Lf": "33b4f981ea026eed37f7589ebfe6d0837d5a22a7bd7d1192af38a053fa261f12", + "sha256Lf": "df64d35e33d95ebc8bdba33abca14b8dc1cb3d6648242decea03d27811677f66", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20187,10 +20187,10 @@ { "source": "docs/document/en/advanced/global.html", "route": "/document/en/advanced/global.html", - "sha256Lf": "6619d13d2cb8ff5cd88761a6d9314ef8d36a683296ad85f7a28ba81d9ee536a6", + "sha256Lf": "5d3dbd976adbf4b314844d8598a1f49fb7642a5c9056cbee9f8e30f547353cf5", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20200,10 +20200,10 @@ { "source": "docs/document/en/advanced/plugin.html", "route": "/document/en/advanced/plugin.html", - "sha256Lf": "f628ce2b23e1169d7c4800a71873e6121158e1b547a91bce46295a3b30f913b1", + "sha256Lf": "7cb9ede131811d1559752af585a3ae10b261c07ca7f16f83a27b160d9f4ab984", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20213,10 +20213,10 @@ { "source": "docs/document/en/advanced/property.html", "route": "/document/en/advanced/property.html", - "sha256Lf": "790499d6e457f3751b2a649ca1afa5b15aab32f0b152340bf9d060fc6eea4611", + "sha256Lf": "20ae355db0084203a10d42b4c3f06f6068f88115a0e3cf80bbd75a82f06119d2", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20226,10 +20226,10 @@ { "source": "docs/document/en/component/contextmenu.html", "route": "/document/en/component/contextmenu.html", - "sha256Lf": "1bfe1805d0d4e075b189a9e373d49a7d176eee33d6e9ceb12d898d2fd11c8c53", + "sha256Lf": "e0a022b0b97d2ee77882846fe23eb511df3047472901b859ad20a44d083d68ce", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20239,10 +20239,10 @@ { "source": "docs/document/en/component/controls.html", "route": "/document/en/component/controls.html", - "sha256Lf": "750808eb9cb5469cb4950abb66b8e44f6e9b00b5218cfa774e7b701732f7ec20", + "sha256Lf": "f93f7d430ef39ee7bd3cce80c5f589a13a2910180a88bb0e5293e05899695898", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20252,10 +20252,10 @@ { "source": "docs/document/en/component/layers.html", "route": "/document/en/component/layers.html", - "sha256Lf": "78fc2efad0cf313f95cf1309ea24c0b63b9954432dc5c2da6ee9694c1ecf777c", + "sha256Lf": "8acec051811fb4b5ec631b9b8804a171c5e64f794cf07540554677d1ef54b47d", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20265,10 +20265,10 @@ { "source": "docs/document/en/component/setting.html", "route": "/document/en/component/setting.html", - "sha256Lf": "b2f9deafe7385b68178008f4e7a0d7942f0174bb9095556e62de399e55be636a", + "sha256Lf": "80ba061ef909eabe81f73af72646343309ad49576d5ba4cb2ec3df365011a8b8", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20278,10 +20278,10 @@ { "source": "docs/document/en/index.html", "route": "/document/en/", - "sha256Lf": "3f39f71ea7911c391b5e6f1bf02451cafbfabc64d3a7cbf6df2cf50c39480823", + "sha256Lf": "5c41fa08c23ee2aefda2433ea6686b92f1eecfc85f7f1cd97c5e9ede46d6bfc4", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20291,10 +20291,10 @@ { "source": "docs/document/en/plugin/ads.html", "route": "/document/en/plugin/ads.html", - "sha256Lf": "33455ca154e9406d17a1ae75f64c221321e9a759759eee19c96e30f8b244a396", + "sha256Lf": "3a2caef5ef9f2275141d6465b92c75d1947fbe056f2c376a6173b2448ed823b0", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20304,10 +20304,10 @@ { "source": "docs/document/en/plugin/ambilight.html", "route": "/document/en/plugin/ambilight.html", - "sha256Lf": "26ded1a3def70da7bde350fc2c35fac559c40fa98a38169ec5d0bbf2984ae85c", + "sha256Lf": "72667e59181b933c94836821c1834c87671104b9fc0abae2f6e24287c64f3e90", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20317,10 +20317,10 @@ { "source": "docs/document/en/plugin/asr.html", "route": "/document/en/plugin/asr.html", - "sha256Lf": "9b55d646ccf2e17c7fdf6dfc9d6c5eb2561241708f957fd14eb8c55f0cfdc715", + "sha256Lf": "c075a131abbfd735b9a810b6f5ff6e01a3d483fc69dc8e1310759f94b1339071", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20330,10 +20330,10 @@ { "source": "docs/document/en/plugin/audio-track.html", "route": "/document/en/plugin/audio-track.html", - "sha256Lf": "5482e7a6d942ace08beb22e62be2a686407cc1b76d220bcaad05c66f9a352e89", + "sha256Lf": "88a4ac2cb882b4d6e3759778a89d9bece5b84d9bcae76b6899123b98e26be790", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20343,10 +20343,10 @@ { "source": "docs/document/en/plugin/auto-thumbnail.html", "route": "/document/en/plugin/auto-thumbnail.html", - "sha256Lf": "87162b4267450ebf8bd0934234eb59caa0ee480ae2f28181e36837ad4c5d6d30", + "sha256Lf": "1b6d997413b898c5cfea6da24b986e2289737d942983666f7b97c584b2c3dfe3", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20356,10 +20356,10 @@ { "source": "docs/document/en/plugin/chapter.html", "route": "/document/en/plugin/chapter.html", - "sha256Lf": "70fb03d0af7e8d607750af92c224da5b075093034c7a6eef0b1ca59f47a9b7e6", + "sha256Lf": "8440769dd9f06d296db2a0ead3edfad18a4c7ce26da7f6fd8a15efa5abf81910", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20369,10 +20369,10 @@ { "source": "docs/document/en/plugin/chromecast.html", "route": "/document/en/plugin/chromecast.html", - "sha256Lf": "ef67ae6b04f9cd55d186caa1c3911cc64560ee735b20e310db5d09eec94d5ff1", + "sha256Lf": "97a063b1dad42210241ffead30f3e94fc5dce1796359c9a8ab29b69f55409b7a", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20382,10 +20382,10 @@ { "source": "docs/document/en/plugin/danmuku-mask.html", "route": "/document/en/plugin/danmuku-mask.html", - "sha256Lf": "2a19810a61a08fee00e0721c4bc43626f4bd14bc595cf647d6cdda811379e1d2", + "sha256Lf": "bbdbf61c4a02992f53d3bef15fab237023e0fa6a41b2fc89c1f464f27964c4ab", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20395,10 +20395,10 @@ { "source": "docs/document/en/plugin/danmuku.html", "route": "/document/en/plugin/danmuku.html", - "sha256Lf": "0b86f7a8e327886107e8975884f322ec8ecfdd27c5b4bb3c6264dfc43b0b971e", + "sha256Lf": "7c18687d7f4eb7a2a4a6ea945379a10e2ee6b66f6c4c2697fbc189499b854334", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20408,10 +20408,10 @@ { "source": "docs/document/en/plugin/dash-control.html", "route": "/document/en/plugin/dash-control.html", - "sha256Lf": "e45cb90fef31384958d80fc83677c7325bf3d67a77d67ad6dcb5ea147ec4c304", + "sha256Lf": "cb6bab9f9940850d2b552b3c6f7eadcb98b6df1585fd2803f1311c0972f7e01f", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20421,10 +20421,10 @@ { "source": "docs/document/en/plugin/document-pip.html", "route": "/document/en/plugin/document-pip.html", - "sha256Lf": "1315a6224f994cd7bb961f99bd23f4c6a5ed92c0d5024d33ca9106b1ee496138", + "sha256Lf": "b7340ca0eb3c40caf1f2ec14ebfd0faa4ee49fbee737cae80f82c74d92238030", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20434,10 +20434,10 @@ { "source": "docs/document/en/plugin/hls-control.html", "route": "/document/en/plugin/hls-control.html", - "sha256Lf": "a931d46432391eb8f584d6e0827027d430e21a89cba77ab2a326c4b6f22c0228", + "sha256Lf": "fda28f302d2dc634c7ff1f66b086027a951e0fd83ff91f879b521657a9fa01a6", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20447,10 +20447,10 @@ { "source": "docs/document/en/plugin/jassub.html", "route": "/document/en/plugin/jassub.html", - "sha256Lf": "e020c092c508c72cf8759470264f4cce6d6df7d04a38472287b2446139a9b3b1", + "sha256Lf": "5ee19c280e4384d8e8d66bb92a1f4f7451ebe3c7aecdb87e6697759bda733a2b", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20460,10 +20460,10 @@ { "source": "docs/document/en/plugin/multiple-subtitles.html", "route": "/document/en/plugin/multiple-subtitles.html", - "sha256Lf": "4b4c9cb1fa84709b87c588e3590b5c0bb4d8a7dea27def757a4ca43113143b8b", + "sha256Lf": "0cd2ef53476127801c1d0b2e725cdd42552eec19b607100799a7ff220b8c3f48", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20473,10 +20473,10 @@ { "source": "docs/document/en/plugin/vast.html", "route": "/document/en/plugin/vast.html", - "sha256Lf": "14de7b624933f07230f24149e46abc319bb5291b17c09a56e7852024f907d8ae", + "sha256Lf": "a89faca385c0c8801bca595e7f4d6f6501b548a52f350856237f1c656c39f9a5", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20486,10 +20486,10 @@ { "source": "docs/document/en/plugin/vtt-thumbnail.html", "route": "/document/en/plugin/vtt-thumbnail.html", - "sha256Lf": "6cfb0ed3f35c1f760d8e29f9264be9b20f4cc5f5404ca93dbd158a88819261f0", + "sha256Lf": "40a9b7fcbcbae8431bfac1a58735362c31d690b75e3b3cd18548ba7fc494a9f9", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20499,10 +20499,10 @@ { "source": "docs/document/en/proxy/canvas.html", "route": "/document/en/proxy/canvas.html", - "sha256Lf": "0ae3fe8e5ad24b231b688f4c28c9fa214873c346ac1889162008aa495de5966d", + "sha256Lf": "be6096c8e747da5088ec455b1debc991a4436319b28aebcf94a5b7d66fcd0504", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20512,10 +20512,10 @@ { "source": "docs/document/en/proxy/mediabunny.html", "route": "/document/en/proxy/mediabunny.html", - "sha256Lf": "c0d33f0908bbc9a71a5e596f24a1f5da12f0eb1755e5c9005480066cfaaff11c", + "sha256Lf": "32d5bf7367b33dda0cf09004261c76ba773073eeade67d8905d2097c5f1382e1", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20525,10 +20525,10 @@ { "source": "docs/document/en/start/i18n.html", "route": "/document/en/start/i18n.html", - "sha256Lf": "7c985dfd73287d3dfc648e65d1bc58a1295ed323edc84079bee568058eb24b93", + "sha256Lf": "cd2cde965384680b01f95051bdc27d184673f6f9ec2ef1c2b20a676186199404", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20538,10 +20538,10 @@ { "source": "docs/document/en/start/option.html", "route": "/document/en/start/option.html", - "sha256Lf": "4fc2befb619e8adec19cf2f9bf29d9cccec921a0d58c34b1dab14774ee8ae289", + "sha256Lf": "10475248f174f0a3f613e64437f6fc6a4b7c0ef6eb3837cd440945823e2c5a55", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20551,10 +20551,10 @@ { "source": "docs/document/en/tool/iframe.html", "route": "/document/en/tool/iframe.html", - "sha256Lf": "24638d6ef82c70fe78a4129d78f3d1bbc39c2c99ec873e191289ef050a3bcb0a", + "sha256Lf": "7a64156c39c80871a8a2f47b58fc3dbc1d7f715afabe989fee0eb904e9d882c3", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20564,10 +20564,10 @@ { "source": "docs/document/en/tool/thumbnail.html", "route": "/document/en/tool/thumbnail.html", - "sha256Lf": "1d39b35e876c33d03eee4af1445c629d6aa2f859716fe0635f2eb589cd6f2ec4", + "sha256Lf": "115aaa7e18a552b2a576a600ac9cda336d1736c26d50da9598fd68e026fd7e52", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20577,10 +20577,10 @@ { "source": "docs/document/index.html", "route": "/document/", - "sha256Lf": "79384958c8d8baa41d3e78e0a0f620d49d6af3052d59ee0c99937bc451b7aeb5", + "sha256Lf": "92acab062edfd132611b18d43749a671e8d34ab7f34048306e5bbfcc6fa63195", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20590,10 +20590,10 @@ { "source": "docs/document/plugin/ads.html", "route": "/document/plugin/ads.html", - "sha256Lf": "57959cef5778937e2f3ad1faf0c00c5c3b58b24de03d989b0c6a59f0c3884a9b", + "sha256Lf": "5eff399074177241f2f09b65ced7fa287d9aa37cf189f6894eff60faa826b38a", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20603,10 +20603,10 @@ { "source": "docs/document/plugin/ambilight.html", "route": "/document/plugin/ambilight.html", - "sha256Lf": "7cf67e59dfc8e304947da0f25982568f05f540498ad2d9d3f4b7ef90d6257de5", + "sha256Lf": "acbcf04abba381e185c5f5d6327c3aaa72e6700736c1d30058c125b00dd8061e", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20616,10 +20616,10 @@ { "source": "docs/document/plugin/asr.html", "route": "/document/plugin/asr.html", - "sha256Lf": "33b570897d8072277e63a61d3f3b3063ed2d191447fd7efe060866b0f70387cf", + "sha256Lf": "48815fbdbb03de046e811ad7f111bad5f97d28dc53baff04238b57359bf03b94", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20629,10 +20629,10 @@ { "source": "docs/document/plugin/audio-track.html", "route": "/document/plugin/audio-track.html", - "sha256Lf": "69d87d42359c1a6d9581eb799a7b914f6a62217f7182aa7f6dc029477b5001ae", + "sha256Lf": "088e47251be38e0cf43c0db2d916572bcc7fb29dcee40b822a134efe48f2de5a", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20642,10 +20642,10 @@ { "source": "docs/document/plugin/auto-thumbnail.html", "route": "/document/plugin/auto-thumbnail.html", - "sha256Lf": "c66d537b116a20810820616441f598855cff89c0c6271cf9c4eb5781d7dc0954", + "sha256Lf": "20aaecdfe14f1ea9945381314b7ba00904272e3de97fac97f9bd438a3471cadd", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20655,10 +20655,10 @@ { "source": "docs/document/plugin/chapter.html", "route": "/document/plugin/chapter.html", - "sha256Lf": "e5559ad8a160b5637c113dee1a2b4b486516bf4039cbd554515719e0ba09eac7", + "sha256Lf": "9c0966d9c23f5c16059348815abe3d745065863675228d137c32c4714dc17017", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20668,10 +20668,10 @@ { "source": "docs/document/plugin/chromecast.html", "route": "/document/plugin/chromecast.html", - "sha256Lf": "73140a34c25bebeb40ed6cf50b28c0ed033838b3addf171d454db2aa7b42ef87", + "sha256Lf": "f000daad6270cfa6d74316de122071ba5481c3c3805ef90e735c8ef70ef5f661", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20681,10 +20681,10 @@ { "source": "docs/document/plugin/danmuku-mask.html", "route": "/document/plugin/danmuku-mask.html", - "sha256Lf": "75d33602fc367095dfad9a2acf0bf4c8517542b3347246f6c3d7ba6042610370", + "sha256Lf": "fb223247ff42c9d2bac49350afc8318834c417be12ffde18cbe35f1680ba0914", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20694,10 +20694,10 @@ { "source": "docs/document/plugin/danmuku.html", "route": "/document/plugin/danmuku.html", - "sha256Lf": "7d831e76c42e4ce4b082d137609e23a756a901b9260d7921b34c8a7d0071671b", + "sha256Lf": "ea3c2a200dc9000426142364d971d6122738ddf3809f6892cb3b8b0d7b904e43", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20707,10 +20707,10 @@ { "source": "docs/document/plugin/dash-control.html", "route": "/document/plugin/dash-control.html", - "sha256Lf": "23dbf8340266779d0e05faee8763c1d0d6f47ae0628d7537999d97aeb744eb2e", + "sha256Lf": "1e7f83c41e4d687a15e4277edb63421c94cc8c0c6e8be4aabf7566834e99f054", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20720,10 +20720,10 @@ { "source": "docs/document/plugin/document-pip.html", "route": "/document/plugin/document-pip.html", - "sha256Lf": "5725926698cdbe54a6c7a53a55d6de71a3f27420b0ead1ae4fc5659b4837f1ec", + "sha256Lf": "18364ea43f9087cbb4966a8229aaa0b2cc47216eb62f32819af5e40954052c03", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20733,10 +20733,10 @@ { "source": "docs/document/plugin/hls-control.html", "route": "/document/plugin/hls-control.html", - "sha256Lf": "3f189bbdb762b60f30a769dd8b57834853d8dfa9178a3070034c24b92d5d2c87", + "sha256Lf": "fa908b9683f329aa45effa807b9fbcafef17f933916327d30ad2f9689c82c1f3", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20746,10 +20746,10 @@ { "source": "docs/document/plugin/jassub.html", "route": "/document/plugin/jassub.html", - "sha256Lf": "de0543b6561cfb5a251f22fc52642f318ff5ed8f6e788fa5bc14d6f5131804be", + "sha256Lf": "1cbdcb5841779d9754c330dd693f575217f2481b28707c3f3e0725a7d5a84c2c", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20759,10 +20759,10 @@ { "source": "docs/document/plugin/multiple-subtitles.html", "route": "/document/plugin/multiple-subtitles.html", - "sha256Lf": "ee3f7a8cbe34aa7517648f0f79fe6fcd9f5441fcd204f46b6faee2d0c1649dab", + "sha256Lf": "4ce94d3ab93b785ba830b92b1ba5e785c3bb1c5702a82d9bdff6ba6c0e78c0b4", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20772,10 +20772,10 @@ { "source": "docs/document/plugin/vast.html", "route": "/document/plugin/vast.html", - "sha256Lf": "ae36ddddd1b2595ef4d059fc1bb691b2883df9b461c1c3d4c39ead42f483fe0d", + "sha256Lf": "fa47d44b3ee5164e6cb8f8e358e444a1d5fe26b3e674a693669c21aeb57856a5", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20785,10 +20785,10 @@ { "source": "docs/document/plugin/vtt-thumbnail.html", "route": "/document/plugin/vtt-thumbnail.html", - "sha256Lf": "34f9413719ee1d8a41069c559e2af8c80c5dfb5ac039b9ffbbb000af596066d8", + "sha256Lf": "5e06a734eaf09da4aafdb7fdf43cf14a9ddb9740919ee93f7caea3b2a5c42e49", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20798,10 +20798,10 @@ { "source": "docs/document/proxy/canvas.html", "route": "/document/proxy/canvas.html", - "sha256Lf": "7f0a925e14b0dff65329b333a6e7402082f331f6c1bbf664d0fd0ecdfd72ab10", + "sha256Lf": "94e3d51dddf7e00894dab7c2d39fb9030b5f1e8bfbc6905387cfca7098cad68c", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20811,10 +20811,10 @@ { "source": "docs/document/proxy/mediabunny.html", "route": "/document/proxy/mediabunny.html", - "sha256Lf": "6af9a02a25e59c7d6d67881f85f8a90bd1a83c029fdc5ed7b73a82abbf209a67", + "sha256Lf": "bbfe56862cc528f9c954a1c8474ca270a74534c33883ecb0564289adc8b36e29", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20824,10 +20824,10 @@ { "source": "docs/document/start/i18n.html", "route": "/document/start/i18n.html", - "sha256Lf": "f91d71f34e3c4c2d56da8227f5fc75e777331261b95ff7b37ec9b930f54d6a9a", + "sha256Lf": "b66e1974e670715762effd4bae59f8d846587215c0f0b404c703efff6904e4cb", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20837,10 +20837,10 @@ { "source": "docs/document/start/option.html", "route": "/document/start/option.html", - "sha256Lf": "932af85f91bf5b6058fa9291bc0239b58c0e6e4e86a3ca723aada16396b1070f", + "sha256Lf": "7fa94c7defe6d6af2592d965e339b55a765fadacdbce4541718f1afcf736c134", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20850,10 +20850,10 @@ { "source": "docs/document/tool/iframe.html", "route": "/document/tool/iframe.html", - "sha256Lf": "a1a76630580a5033b85c239b53eff74a6ca2e80f07c1391afa83826d4fc39ae8", + "sha256Lf": "b523b0990f6778d3db8404571420dbb6a8191d5d34bed9925c5b49c83c6f9854", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -20863,10 +20863,10 @@ { "source": "docs/document/tool/thumbnail.html", "route": "/document/tool/thumbnail.html", - "sha256Lf": "72894c417f87307c7706f87afefe2c95cf425e961b5cc893f1a86a35893bad61", + "sha256Lf": "aa65065fb2e0c8e0d02fd85942a56e45525fb8944a978c4c4993e0d4c85e172d", "kind": "generated-docs", "scriptSources": [ - "/document/assets/app.CZLLzIhe.js", + "/document/assets/app.CVqqgDvz.js", "/document/main.js", "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8579453810848662" ], @@ -21206,7 +21206,7 @@ }, { "file": "packages/artplayer-vitepress/docs/vite.config.ts", - "sha256Lf": "c960b0ad8ebf62484b5812a389495bca0e4ff962b8f6d592d0aaff71ee7db17f" + "sha256Lf": "82eedc5d0d3049c436dc4bae56fe8c2e1643dc12029766ca509c637cbe8c134c" }, { "file": "packages/artplayer-vitepress/docs/.vitepress/config.js", @@ -21296,6 +21296,10 @@ "file": "packages/artplayer-vitepress/build/markdown.ts", "sha256Lf": "6d639e25bab97c973940661e2aac6f1034ab53ab1c016310a571ab52392819da" }, + { + "file": "packages/artplayer-vitepress/build/search.ts", + "sha256Lf": "8817ec57edb08c0d7ad867e5b8886e51a3f9dd97e0b52056c17db9b92ea64d01" + }, { "file": "packages/artplayer-vitepress/browser/bootstrap.ts", "sha256Lf": "134128a545375635a05fae4f1dc5707bcca389e7f2db27dcffb17692a1c728fa" @@ -21365,7 +21369,7 @@ "preview": "vitepress preview docs" }, "devDependencies": { - "flexsearch": "0.8.158", + "flexsearch": "0.7.43", "markdown-it": "14.1.0", "vitepress": "1.6.3", "vitepress-plugin-search": "1.0.4-alpha.22", diff --git a/refactor/baselines/site05-search.json b/refactor/baselines/site05-search.json new file mode 100644 index 000000000..b9a7ccd07 --- /dev/null +++ b/refactor/baselines/site05-search.json @@ -0,0 +1,233 @@ +{ + "schemaVersion": 1, + "task": "SITE-05", + "status": "checkpoint-not-complete", + "baseCommit": "61fe8deb5923de72740bce00e0734dcc93a05cb2", + "node": "v24.21.0", + "yarn": "1.22.22", + "peer": { + "version": "0.7.43", + "range": "^0.7.31" + }, + "inputs": [ + { + "file": "packages/artplayer-vitepress/build/search.ts", + "sha256": "8817ec57edb08c0d7ad867e5b8886e51a3f9dd97e0b52056c17db9b92ea64d01" + }, + { + "file": "packages/artplayer-vitepress/docs/vite.config.ts", + "sha256": "98a3d464871b5eae52d919e4b895c59ad1595cc4b846a38924c01eb2d3495d3b" + }, + { + "file": "packages/artplayer-vitepress/package.json", + "sha256": "4d62561b27c9ae5b7cb09c20acdc182fe4b0ed4a711dfbd65bdf78c6813f8ade" + }, + { + "file": "yarn.lock", + "sha256": "69c3e83f6e7d249914b5bdb0d176dd14ff31d6aa2cfe9d6a4a97216c201300c1" + }, + { + "file": "test/browser/document-search.spec.js", + "sha256": "3104f2bc5c1cb6044eb55386abda77765dd4f56a82de2fdf8349bfcd87cd1a36" + }, + { + "file": "test/site-markdown.test.js", + "sha256": "002dccb6f7878937bb9f0cabe86c42d12348f41274658ce436492a0a765af35a" + } + ], + "upstream": { + "file": "node_modules/vitepress-plugin-search/dist/Search.vue", + "sha256": "c53a0d2a5b5380123f775b0852b5805a4b0a3d97248d5c296972de30c35f6f9c" + }, + "browser": { + "command": "yarn test:browser:source document-search.spec.js document-site.spec.js --workers=1", + "stats": { + "startTime": "2026-09-16T01:32:28.534Z", + "duration": 52270.393, + "expected": 12, + "skipped": 0, + "unexpected": 0, + "flaky": 0 + }, + "cases": [ + { + "title": "documentation search supports mouse and keyboard without reloading (zh)", + "project": "chromium", + "runs": [ + { + "status": "passed", + "retry": 0, + "browser": "153.0.8010.12" + } + ] + }, + { + "title": "documentation search supports mouse and keyboard without reloading (en)", + "project": "chromium", + "runs": [ + { + "status": "passed", + "retry": 0, + "browser": "153.0.8010.12" + } + ] + }, + { + "title": "documentation search supports mouse and keyboard without reloading (zh)", + "project": "firefox", + "runs": [ + { + "status": "passed", + "retry": 0, + "browser": "155.0" + } + ] + }, + { + "title": "documentation search supports mouse and keyboard without reloading (en)", + "project": "firefox", + "runs": [ + { + "status": "passed", + "retry": 0, + "browser": "155.0" + } + ] + }, + { + "title": "documentation search supports mouse and keyboard without reloading (zh)", + "project": "webkit", + "runs": [ + { + "status": "passed", + "retry": 0, + "browser": "26.6" + } + ] + }, + { + "title": "documentation search supports mouse and keyboard without reloading (en)", + "project": "webkit", + "runs": [ + { + "status": "passed", + "retry": 0, + "browser": "26.6" + } + ] + }, + { + "title": "built documentation loads zh deep pages and opens Run Code with encoded source", + "project": "chromium", + "runs": [ + { + "status": "passed", + "retry": 0, + "browser": "153.0.8010.12" + } + ] + }, + { + "title": "built documentation loads en deep pages and opens Run Code with encoded source", + "project": "chromium", + "runs": [ + { + "status": "passed", + "retry": 0, + "browser": "153.0.8010.12" + } + ] + }, + { + "title": "built documentation loads zh deep pages and opens Run Code with encoded source", + "project": "firefox", + "runs": [ + { + "status": "passed", + "retry": 0, + "browser": "155.0" + } + ] + }, + { + "title": "built documentation loads en deep pages and opens Run Code with encoded source", + "project": "firefox", + "runs": [ + { + "status": "passed", + "retry": 0, + "browser": "155.0" + } + ] + }, + { + "title": "built documentation loads zh deep pages and opens Run Code with encoded source", + "project": "webkit", + "runs": [ + { + "status": "passed", + "retry": 0, + "browser": "26.6" + } + ] + }, + { + "title": "built documentation loads en deep pages and opens Run Code with encoded source", + "project": "webkit", + "runs": [ + { + "status": "passed", + "retry": 0, + "browser": "26.6" + } + ] + } + ], + "report": "refactor/.cache/site05-search-final-browser/report.json", + "reportSha256": "cb7e3e286c07a539f1c3767a3c829f31cb5b8087908e1ebd0567d00185347bb8", + "automaticRetries": 0, + "scope": "built documentation; external HTTPS isolated; no media or physical-device acceptance" + }, + "previousFailures": [ + { + "report": "refactor/.cache/site05-search-before-browser/report.json", + "cause": "upstream Enter form submission reloads the document" + }, + { + "report": "refactor/.cache/site05-search-partial-browser/report.json", + "cause": "partial implementation did not match upstream CRLF Escape block" + }, + { + "report": "refactor/.cache/site05-search-focus-browser/report.json", + "cause": "focus callback queued before Vue visibility update" + } + ], + "unit": { + "command": "yarn test:site-build", + "passed": 8, + "failed": 0, + "skipped": 0, + "durationMs": 1343.1779 + }, + "build": { + "command": "yarn build:docs", + "vitepressSeconds": 10.34, + "yarnSeconds": 12.03 + }, + "checks": [ + "frozen root Yarn install; lock unchanged", + "check:toolchain --strict", + "typecheck:docs-tools", + "targeted readonly ESLint", + "site-inventory --check", + "demos --check", + "risk-register --check" + ], + "remaining": [ + "all document links and search index anchors", + "online editor and declaration injection matrix", + "SITE-07 provenance retained at SITE-06", + "REL-02 candidate refresh after shared input changes" + ], + "publicationAuthorized": false +} diff --git a/refactor/changes/2026-09-16-SITE-05-search.md b/refactor/changes/2026-09-16-SITE-05-search.md new file mode 100644 index 000000000..df055bdbf --- /dev/null +++ b/refactor/changes/2026-09-16-SITE-05-search.md @@ -0,0 +1,52 @@ +# SITE-05 搜索交互与依赖修复 + +起点:`61fe8deb5923de72740bce00e0734dcc93a05cb2`。这是 SITE-05 的实施检查点, +尚未完成全站链接、全部搜索锚点、编辑器及声明注入验收,不进入正式复盘。 + +## 实际问题与修改 + +旧搜索能返回结果,不能把 flexsearch peer 警告写成搜索已失效。浏览器复现 Enter +导航后触发表单原生提交,URL 多出 `?` 且整页重载;有输入时 Escape 无法关闭。 +新增回归在未修复构建上中英文各失败一次。保留当前第三方插件的索引、结果 URL、 +模板和 CSS,通过包内 `build/search.ts` 在 Vue 编译前修复交互:取消表单默认提交, +按实际可见结果次序导航;无结果 Enter 不跳转;查询变化重置选择;Escape 关闭并 +恢复按钮焦点。输入法组合键不触发选择,输入框等待 Vue DOM 更新再聚焦。 +快捷键监听有卸载清理,异步索引导入有卸载守卫;加载前输入不读取未初始化索引。 +卸载守卫属于本次源码修正,当前浏览器用例没有单独模拟组件卸载,不扩大验证结论。 + +适配器校验安装包组件的完整 SHA-256,统一 CRLF/LF 后要求每项补丁恰好匹配一次。 +升级第三方必须人工复核补丁,不能只改哈希。既有第三方代码及署名留在原包,不复制 +到自有源码、不修改 node_modules。首次实现遗漏 CRLF 匹配,随后聚焦回调排在 DOM +更新之前,均被测试捕获并修复;两个失败阶段的完整报告保留。最终没有放宽断言、 +超时或加自动重试。播放器运行时、声明及公共分发 API 不变。 + +文档站 devDependency flexsearch 从 0.8.158 对齐到 0.7.43,满足插件的 ^0.7.31; +插件自身内置索引实现,peer 对齐不冒充索引或中文分词改进。原有精确 token 行为 +保留,不承诺任意中文子串匹配。VitePress 未启用的托管 Algolia/search-insights +依赖仍有 peer 警告;本地搜索验收不代表托管提供方可用,不为消除警告引入服务依赖。 + +Yarn workspace add 曾忽略根级 dom-webcodecs resolution,根级 install 恢复了已批准 +的 0.1.19;一次写锁文件出现 UNKNOWN,原命令重跑成功。最终锁 diff 仅 flexsearch +一个直接选择器,未带入无关 SDK 类型变化。唯一根 yarn.lock、根 resolution 保留。 + +## 验证与边界 + +Node 24.21.0 / Yarn 1.22.22: + +- 根级冻结安装退出 0,锁文件 SHA-256 前后一致;严格工具链检查通过。 +- `yarn build:docs` 通过:VitePress 10.34 秒、Yarn 12.03 秒,生成文件通过构建更新。 +- `yarn test:site-build`:8/8,0 失败/跳过;包含实际 Vue 编译和第三方输入漂移拒绝。 +- `yarn typecheck:docs-tools` 与修改源文件/测试的只读 ESLint 通过。 +- `yarn test:browser:source document-search.spec.js document-site.spec.js --workers=1`: + 三引擎、中英文共 12/12,52.27 秒,0 失败/跳过/重试。覆盖鼠标精确语言 URL、 + 英文 API 和中文完整 token、键盘选择/循环、Escape/焦点、无结果及无整页重载。 +- 文档 inventory、demo 路径及风险登记校验通过;外部 HTTPS 在上述浏览器测试中 + 隔离,结果不代表广告服务、真机或完整播放器验收。 + +结构化记录见 [site05-search.json](../baselines/site05-search.json)。包 README 已维护 +适配器地图、版本、升级约束和重跑命令。SITE-05 由 todo 转 doing;SITE-07 字体来源 +核实从本地功能检查的启动依赖移为 SITE-06 最终交付的直接依赖,未取消许可门槛。 +任务仍 225 done /22 doing /38 todo。共享锁和测试变更使旧候选输入指纹过期,REL-02 +需在本批站点工具工作稳定后刷新 21 库候选,不沿用旧 build 通过结论批准发布。 +下一步继续全量链接、搜索锚点、编辑器与声明验证。回退本提交恢复搜索行为、peer、 +生成文件及任务依赖。未推送、部署或发布。 diff --git a/refactor/execution-gates.md b/refactor/execution-gates.md index fa626ae88..5eaa12d80 100644 --- a/refactor/execution-gates.md +++ b/refactor/execution-gates.md @@ -30,6 +30,10 @@ ENG-10 建立有来源、有任务归属的历史失败台账:区分旧版即 SITE-04 是各包文档的最终交叉核对,包内文档仍随每次实现更新。文档静态构建和本地候选 tarball 准备不依赖 Cast 等设备验证完成。整个 demo 的 EX-03 和真实验证任务继续保留,不从完成定义中删除。 +SITE-05 的本地构建、搜索、链接、编辑器与声明注入检查可独立于 SITE-07 的字体来源核实执行。 +SITE-07 改为 SITE-06 文档站最终交付的直接前置;许可缺口仍阻止最终交付及下游发布。 +这只调整执行顺序,不将本地功能通过当作字体授权、外部服务或发布准入通过。 + BASE-08 的环境矩阵至少包含:包/能力、支持版本依据、样本与外部资源版本、自动化方法、真实设备/SDK 环境、报告位置、负责完成的任务、状态、阻塞及解除方式。尚未具备的设备记录为未知/待提供,不虚构执行者或通过结果。 ## 5. 发布按实际批次核定 diff --git a/refactor/plan.md b/refactor/plan.md index b595beb6d..22bf519de 100644 --- a/refactor/plan.md +++ b/refactor/plan.md @@ -4,7 +4,7 @@ 基线:`40fcda6a37d0049d42e49c1e64e70d4fd9ba5f7f`。总任务 285 项,范围 22 个包及工作区/示例。 -状态:todo 39 / doing 21 / blocked 0 / done 225 / deferred 0。风险 L/M/H 表示兼容风险,不表示工期。 +状态:todo 38 / doing 22 / blocked 0 / done 225 / deferred 0。风险 L/M/H 表示兼容风险,不表示工期。 前置依赖是启动条件;验收是完成条件。任务可以继续拆分,但不能复用或悄悄删除旧 ID。 @@ -417,8 +417,8 @@ | SITE-03 | artplayer-vitepress
整理 i18n/文档/LLM 生成流程 | SITE-02, SITE-LOAD-01, SITE-AI-DOCS-01, SITE-BUILD-01 | build-i18n/build-docs/build-llm/trans-docs 的任务边界和错误处理;桌面 common.js 自有 UI 的 TS 迁移与模块拆分 | 原命令兼容、生成可复现,翻译步骤不隐式运行远程服务;覆盖移动 loader 失败恢复 define、脚本依赖顺序、localhost/127.0.0.1 Run Code 目标和语言重定向;桌面剩余 UI 完成 TS 职责拆分并回归运行、导入与持久设置 | M | done | | SITE-DANMUKU-01 | artplayer-vitepress, artplayer-plugin-danmuku
核对弹幕双语指南并补齐英文入口 | SITE-03, PKG-DANMUKU-07 | 按实现修正中文调用说明,新增英文完整选项/API/热力图/类型指南和导航;同步生成站点与LLM资料,新增双语示例浏览器验收 | 旧中文URL和标题保留;实际方法返回、加载语义、回调与points边界准确;双语页面、Run Code及示例实测,完整插件组合和设备验收不冒充完成 | L | done | | SITE-04 | artplayer-vitepress
交叉核对逐包持续维护的文档 | CORE-21, SITE-03, PKG-CHAPTER-04, PKG-AMBILIGHT-04, PKG-AUDIO-04, PKG-AUTO-THUMB-04, PKG-VTT-THUMB-04, PKG-HLS-04, PKG-DASH-04, PKG-MULTI-SUB-04, PKG-JASSUB-04, PKG-MASK-04, PKG-ASR-04, PKG-ADS-04, PKG-VAST-04, PKG-CAST-04, PKG-DPIP-04, PKG-CANVAS-04, PKG-IFRAME-04, PKG-TOOL-THUMB-04, PKG-DANMUKU-06, PKG-MB-08, SITE-DANMUKU-01, SITE-HLS-01, SITE-DASH-01, SITE-AUDIO-01, SITE-VTT-01, SITE-ROUTES-01, SITE-EDITOR-VAST-01 | 已随实现更新的中文/英文 API、包内实现地图、旧 JS 示例及已知能力限制的全包核对 | 未把缺环境的能力写成已验证,静态核对不等待设备任务;最终 demo 仍由 EX-03 验收;按 SITE-01 声明成员/候选标题清单逐项语义核对,补齐缺失的双语插件说明和 Danmuku 英文入口 | M | done | -| SITE-05 | artplayer-vitepress
构建文档站和验证链接/示例 | SITE-04, EX-01, EX-02, SITE-07, SITE-VCONSOLE-01, SITE-CONSOLE-01 | VitePress 构建、链接与嵌入 demo 检查 | 文档构建、链接、嵌入路径与声明注入通过;真实完整 demo 保留 EX-03 独立门槛;核对 ENG-PM-01 登记的搜索 peer 范围和真实搜索行为 | M | todo | -| SITE-06 | artplayer-vitepress
文档站交付验收 | SITE-05 | 维护指南和站点变更记录 | 未手改 generated 目录,旧 URL 可用、部署与检查分离 | M | todo | +| SITE-05 | artplayer-vitepress
构建文档站和验证链接/示例 | SITE-04, EX-01, EX-02, SITE-VCONSOLE-01, SITE-CONSOLE-01 | VitePress 构建、链接与嵌入 demo 检查 | 文档构建、链接、嵌入路径与声明注入通过;真实完整 demo 保留 EX-03 独立门槛;核对 ENG-PM-01 登记的搜索 peer 范围和真实搜索行为 | M | doing | +| SITE-06 | artplayer-vitepress
文档站交付验收 | SITE-05, SITE-07 | 维护指南和站点变更记录 | 未手改 generated 目录,旧 URL 可用、部署与检查分离 | M | todo | | SITE-07 | artplayer-vitepress, workspace
整理站点第三方资产与来源说明 | SITE-01 | Monaco/vConsole/console bundle/字体和样本的冻结来源、可复现构建或替代与站点 notices | 接续 SITE-01 的字节与换行差异证据;完整许可随实际分发,consoleLog/global/CSS/worker 与旧 URL 兼容;缺字体/媒体使用依据明确处置;资产变更后执行编辑器/移动/字幕/示例回归,不以来源指纹替代授权或运行证据 | H | doing | | EX-01 | example/react.js, workspace
验证 React 消费者与 TS | CORE-22, ENG-07 | React 挂载/卸载/重挂载、引用和插件样例 | 真实 tarball + TS 消费通过,保留既有 React 集成 API | M | done | | EX-02 | example/vue.js, workspace
验证 Vue 消费者与更新卸载 | CORE-22, ENG-07 | Vue 实例/ref、参数更新、卸载及插件样例 | 旧 JS 组件用法无需修改,重复挂载不泄漏 | M | done | @@ -688,6 +688,7 @@ - SITE-HLS-01: [记录](changes/2026-09-15-SITE-HLS-01-guides.md) [记录](baselines/hls-docs-validation.json) - SITE-DASH-01: [记录](changes/2026-09-15-SITE-DASH-01-guides.md) [记录](baselines/dash-docs-validation.json) - SITE-04: [记录](site-content-review.md) [记录](changes/2026-09-16-SITE-04-chapter-ambilight-guides.md) [记录](baselines/site04-chapter-ambilight-guides.json) [记录](changes/2026-09-16-SITE-04-dpip-asr-guides.md) [记录](baselines/site04-dpip-asr-guides.json) [记录](changes/2026-09-16-SITE-04-auto-multi-guides.md) [记录](baselines/site04-auto-multi-guides.json) [记录](changes/2026-09-16-SITE-04-ads-vast-guides.md) [记录](baselines/site04-ads-vast-guides.json) [记录](changes/2026-09-16-SITE-04-jassub-mask-cast-guides.md) [记录](baselines/site04-jassub-mask-cast-guides.json) [记录](changes/2026-09-16-SITE-04-tools-guides.md) [记录](baselines/site04-tools-guides.json) [记录](changes/2026-09-16-SITE-04-proxies-guides.md) [记录](baselines/site04-proxies-guides.json) [记录](changes/2026-09-16-SITE-04-existing-guides.md) [记录](baselines/site04-existing-guides.json) [记录](core-content-review.json) [记录](baselines/site04-core-services.json) [记录](changes/2026-09-16-SITE-04-core-services.md) [记录](baselines/site04-template-icons.json) [记录](changes/2026-09-16-SITE-04-template-icons.md) [记录](baselines/site04-components.json) [记录](changes/2026-09-16-SITE-04-components.md) [记录](baselines/site04-setting.json) [记录](changes/2026-09-16-SITE-04-setting.md) [记录](baselines/site04-plugin-registry.json) [记录](changes/2026-09-16-SITE-04-plugin-registry.md) [记录](baselines/site04-subtitle.json) [记录](changes/2026-09-16-SITE-04-subtitle.md) [记录](baselines/site04-utils.json) [记录](changes/2026-09-16-SITE-04-utils.md) [记录](baselines/site04-globals.json) [记录](changes/2026-09-16-SITE-04-globals.md) [记录](baselines/site04-events.json) [记录](changes/2026-09-16-SITE-04-events.md) [记录](baselines/site04-options.json) [记录](changes/2026-09-16-SITE-04-options.md) [记录](baselines/site04-css.json) [记录](changes/2026-09-16-SITE-04-css.md) [记录](baselines/site04-lifecycle.json) [记录](changes/2026-09-16-SITE-04-lifecycle.md) [记录](baselines/site04-playback.json) [记录](changes/2026-09-16-SITE-04-playback.md) [记录](baselines/site04-display.json) [记录](changes/2026-09-16-SITE-04-complete.md) +- SITE-05: [记录](changes/2026-09-16-SITE-05-search.md) [记录](baselines/site05-search.json) - SITE-07: [记录](site-inventory.md) [记录](baselines/site-provenance.json) [记录](changes/2026-09-14-SITE-07-vendor-notices.md) [记录](baselines/site-notices-checkpoint.json) [记录](baselines/site-codicons-provenance.json) [记录](baselines/site-codicons-validation.json) [记录](changes/2026-09-15-SITE-07-codicons.md) [记录](baselines/vconsole-notices-provenance.json) [记录](baselines/vconsole-notices-validation.json) [记录](changes/2026-09-15-SITE-07-vconsole-notices.md) [记录](console-modernization.md) [记录](baselines/site-console-inventory.json) [记录](baselines/site-console-validation.json) [记录](changes/2026-09-15-SITE-07-console-baseline.md) [记录](baselines/console-feed-provenance.json) [记录](changes/2026-09-15-SITE-07-console-feed-source.md) [记录](baselines/console-commonjs-provenance.json) [记录](changes/2026-09-15-SITE-07-console-commonjs.md) [记录](baselines/console-esm-provenance.json) [记录](changes/2026-09-15-SITE-07-console-esm.md) [记录](baselines/console-embedded-notices.json) [记录](baselines/console-notices-validation.json) [记录](changes/2026-09-15-SITE-07-console-notices.md) [记录](baselines/console-embedded-sources.json) [记录](baselines/console-embedded-validation.json) [记录](changes/2026-09-15-SITE-07-console-embedded-sources.md) [记录](baselines/console-derived-attribution.json) [记录](baselines/console-derived-validation.json) [记录](changes/2026-09-15-SITE-07-console-derived-attribution.md) [记录](baselines/console-stackoverflow-provenance.json) [记录](baselines/console-stackoverflow-validation.json) [记录](changes/2026-09-15-SITE-07-console-stackoverflow.md) [记录](baselines/console-shallowequal-validation.json) [记录](changes/2026-09-15-SITE-07-console-shallowequal.md) [记录](console-notice-review.md) [记录](baselines/console-notice-review-validation.json) [记录](changes/2026-09-15-SITE-07-console-notice-review.md) [记录](baselines/monaco-typescript-provenance.json) [记录](baselines/monaco-typescript-validation.json) [记录](changes/2026-09-15-SITE-07-monaco-typescript.md) [记录](baselines/monaco-languages-provenance.json) [记录](baselines/monaco-languages-validation.json) [记录](changes/2026-09-15-SITE-07-monaco-languages.md) [记录](baselines/monaco-language-notices.json) [记录](baselines/monaco-language-notices-validation.json) [记录](changes/2026-09-15-SITE-07-monaco-language-notices.md) [记录](baselines/monaco-modes-provenance.json) [记录](baselines/monaco-modes-validation.json) [记录](changes/2026-09-15-SITE-07-monaco-modes.md) [记录](baselines/monaco-basic-provenance.json) [记录](baselines/monaco-basic-validation.json) [记录](changes/2026-09-15-SITE-07-monaco-basic.md) [记录](baselines/monaco-core-origins-provenance.json) [记录](baselines/monaco-core-origins-validation.json) [记录](changes/2026-09-15-SITE-07-monaco-core-origins.md) [记录](baselines/monaco-core-build-provenance.json) [记录](baselines/monaco-core-build-validation.json) [记录](changes/2026-09-15-SITE-07-monaco-core-build.md) [记录](baselines/monaco-contributions-provenance.json) [记录](baselines/monaco-contributions-validation.json) [记录](changes/2026-09-15-SITE-07-monaco-contributions.md) [记录](baselines/monaco-css-build-provenance.json) [记录](baselines/monaco-css-build-validation.json) [记录](changes/2026-09-15-SITE-07-monaco-css.md) [记录](baselines/monaco-node-path-provenance.json) [记录](baselines/monaco-node-path-validation.json) [记录](changes/2026-09-15-SITE-07-monaco-node-path.md) [记录](changes/2026-09-15-SITE-07-monaco-dom.md) [记录](baselines/monaco-dom-origins-validation.json) [记录](changes/2026-09-15-SITE-07-monaco-unicode.md) [记录](baselines/monaco-unicode-provenance.json) [记录](baselines/monaco-unicode-validation.json) [记录](changes/2026-09-15-SITE-07-font-notices.md) [记录](baselines/site-font-notices-provenance.json) [记录](baselines/site-font-notices-validation.json) - EX-01: [记录](changes/2026-09-14-EX-01-react-consumer.md) [记录](baselines/react-consumer-validation.json) [记录](scripts/react-consumer.mjs) - EX-02: [记录](changes/2026-09-14-EX-02-vue-consumer.md) [记录](baselines/vue-consumer-validation.json) [记录](scripts/vue-consumer.mjs) diff --git a/refactor/progress.md b/refactor/progress.md index b02b08b3f..583baee9f 100644 --- a/refactor/progress.md +++ b/refactor/progress.md @@ -1,5 +1,15 @@ # 进度与证据 +## SITE-05 搜索交互修复 + +修复 Enter 默认表单提交造成的整页重载、有内容时 Escape 不关闭、查询变化后选择 +残留和聚焦时序;保留第三方模板、CSS、索引与结果路径。FlexSearch dev peer 对齐 +0.7.43,锁文件没有其他依赖漂移。三引擎双语搜索/文档导航12项与8项构建测试通过, +严格工具链、类型、lint、inventory检查通过;见[记录](changes/2026-09-16-SITE-05-search.md)。 +SITE-05已开始但全量链接/搜索锚点/编辑器验收未完成,225 done /22 doing /38 todo。 +字体许可仍是SITE-06最终交付直接门槛;共享输入变化后的21库候选需重新绑定证据。 +不进入用户保留的正式复盘。 + ## SITE-04 文档内容核对完成 最后63条显示/尺寸/截图/预览声明已核对,核心963/963的唯一映射、源码/指南哈希 diff --git a/refactor/tasks.json b/refactor/tasks.json index 6cdb82723..b92a377c2 100644 --- a/refactor/tasks.json +++ b/refactor/tasks.json @@ -4615,15 +4615,17 @@ "SITE-04", "EX-01", "EX-02", - "SITE-07", "SITE-VCONSOLE-01", "SITE-CONSOLE-01" ], - "status": "todo", + "status": "doing", "risk": "M", "deliverable": "VitePress 构建、链接与嵌入 demo 检查", "acceptance": "文档构建、链接、嵌入路径与声明注入通过;真实完整 demo 保留 EX-03 独立门槛;核对 ENG-PM-01 登记的搜索 peer 范围和真实搜索行为", - "evidence": [] + "evidence": [ + "changes/2026-09-16-SITE-05-search.md", + "baselines/site05-search.json" + ] }, { "id": "SITE-06", @@ -4633,7 +4635,8 @@ "artplayer-vitepress" ], "dependsOn": [ - "SITE-05" + "SITE-05", + "SITE-07" ], "status": "todo", "risk": "M", diff --git a/refactor/third-party.json b/refactor/third-party.json index 9efb627a1..d3fc3e0df 100644 --- a/refactor/third-party.json +++ b/refactor/third-party.json @@ -234,7 +234,7 @@ "declaredRuntimeDependencies": {}, "resolvedRuntimeDependencies": [], "developmentDependencies": { - "flexsearch": "0.8.158", + "flexsearch": "0.7.43", "markdown-it": "14.1.0", "vitepress": "1.6.3", "vitepress-plugin-search": "1.0.4-alpha.22", diff --git a/test/browser/document-search.spec.js b/test/browser/document-search.spec.js new file mode 100644 index 000000000..bdd77cf21 --- /dev/null +++ b/test/browser/document-search.spec.js @@ -0,0 +1,63 @@ +import { expect, test } from './fixtures.js' + +for (const language of ['zh', 'en']) { + test(`documentation search supports mouse and keyboard without reloading (${language})`, async ({ page }) => { + await page.route('https://**/*', route => route.fulfill({ status: 200, body: '' })) + await page.addInitScript(() => localStorage.setItem('lang-init', 'true')) + const prefix = language === 'en' ? '/document/en' : '/document' + const errors = [] + page.on('pageerror', error => errors.push(error.message)) + await page.goto(`${prefix}/start/option.html`, { waitUntil: 'domcontentloaded' }) + const button = page.locator('#docsearch button') + const input = page.locator('#docsearch-input') + const modal = page.locator('.VPPluginSearch-modal-back') + const links = page.locator('.search-group a') + await button.click() + await expect(input).toBeFocused() + await input.fill('switchQuality') + await expect(links.first()).toBeVisible() + // Select the exact language URL; the shared search includes both languages. + const ownLink = page.locator(`.search-group a[href$="${prefix}/advanced/property.html#switchquality"]`) + await expect(ownLink).toHaveCount(1) + await ownLink.click() + await expect(page).toHaveURL(new RegExp(`${prefix}/advanced/property.html#switchquality$`)) + await expect(page.locator('#switchquality')).toBeVisible() + await expect(modal).toBeHidden() + + await button.click() + await input.fill('switchQuality') + await expect(links.first()).toBeVisible() + await input.press('ArrowDown') + const target = await page.locator('.search-group a.link-focused').getAttribute('href') + await page.evaluate(() => { + window.__searchDocumentIdentity = 'retained' + }) + await input.press('Enter') + await expect(page).toHaveURL(target) + await expect(modal).toBeHidden() + expect(await page.evaluate(() => window.__searchDocumentIdentity)).toBe('retained') + expect(await page.evaluate(() => Boolean(document.getElementById(decodeURIComponent(location.hash.slice(1)))))).toBe(true) + + await button.click() + await input.fill('生命周期') + await expect(links.first()).toBeVisible() + await input.press('Escape') + await expect(modal).toBeHidden() + await expect(button).toBeFocused() + await page.keyboard.press('Control+k') + await expect(input).toBeFocused() + await input.fill('switchQuality') + await expect(links.first()).toHaveClass(/link-focused/) + await input.press('ArrowUp') + await expect(links.last()).toHaveClass(/link-focused/) + await input.fill('definitely-no-artplayer-search-result-958') + await expect(links).toHaveCount(0) + const current = page.url() + await input.press('Enter') + await input.press('Escape') + await expect(modal).toBeHidden() + expect(page.url()).toBe(current) + expect(await page.evaluate(() => window.__searchDocumentIdentity)).toBe('retained') + expect(errors).toEqual([]) + }) +} diff --git a/test/site-markdown.test.js b/test/site-markdown.test.js index c256ad82c..57585b2d5 100644 --- a/test/site-markdown.test.js +++ b/test/site-markdown.test.js @@ -1,13 +1,32 @@ import assert from 'node:assert/strict' +import fs from 'node:fs' // eslint-disable-next-line test/no-import-node-test -- Verify the installed VitePress renderer, not a substitute implementation. import test from 'node:test' +import { compileScript, compileTemplate, parse } from '@vue/compiler-sfc' import { parseHTML } from 'linkedom' import { createMarkdownRenderer } from 'vitepress' import { stableCodeGroups } from '../packages/artplayer-vitepress/build/markdown.ts' +import { patchSearchComponent } from '../packages/artplayer-vitepress/build/search.ts' const group = '::: code-group\n\n```js [One]\nconsole.log(1)\n```\n\n```js [Two]\nconsole.log(2)\n```\n\n:::\n' +test('pinned search adapter compiles against the installed Vue component and rejects source drift', () => { + const source = fs.readFileSync(new URL(import.meta.resolve('vitepress-plugin-search/Search.vue')), 'utf8') + const patched = patchSearchComponent(source) + const { descriptor, errors } = parse(patched) + assert.deepEqual(errors, []) + const script = compileScript(descriptor, { id: 'search-adapter' }) + const template = compileTemplate({ + source: descriptor.template.content, + filename: 'Search.vue', + id: 'search-adapter', + compilerOptions: { bindingMetadata: script.bindings }, + }) + assert.deepEqual(template.errors, []) + assert.throws(() => patchSearchComponent(`${source}\n`), /Review the search interaction adapter/) +}) + test('installed VitePress random code-group IDs become stable, distinct and label-associated', async () => { const original = await createMarkdownRenderer(process.cwd()) const before = original.render(group, { relativePath: 'start/i18n.md' }) diff --git a/yarn.lock b/yarn.lock index 933ae83ec..6a1c346ef 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4321,10 +4321,10 @@ flexsearch@*: resolved "https://registry.npmjs.org/flexsearch/-/flexsearch-0.8.212.tgz" integrity sha512-wSyJr1GUWoOOIISRu+X2IXiOcVfg9qqBRyCPRUdLMIGJqPzMo+jMRlvE83t14v1j0dRMEaBbER/adQjp6Du2pw== -flexsearch@0.8.158: - version "0.8.158" - resolved "https://registry.npmjs.org/flexsearch/-/flexsearch-0.8.158.tgz" - integrity sha512-UBOzX2rxIrhAeSSCesTI0qB2Q+75n66rofJx5ppZm5tjXV2P6BxOS3VHKsoSdJhIPg9IMzQl3qkVeSFyq3BUdw== +flexsearch@0.7.43: + version "0.7.43" + resolved "https://registry.yarnpkg.com/flexsearch/-/flexsearch-0.7.43.tgz#34f89b36278a466ce379c5bf6fb341965ed3f16c" + integrity sha512-c5o/+Um8aqCSOXGcZoqZOm+NqtVwNsvVpWv6lfmSclU954O3wvQKxxK8zj74fPaSJbXpSLTs4PRhh+wnoCXnKg== focus-trap@^7.6.4: version "7.8.0"