diff --git a/404.html b/404.html index 94c8469..a39db3d 100644 --- a/404.html +++ b/404.html @@ -8,7 +8,7 @@ - + @@ -16,7 +16,7 @@
Skip to content

404

PAGE NOT FOUND

But if you don't change your direction, and if you keep looking, you may end up where you are heading.
- + \ No newline at end of file diff --git a/assets/app.CenpHCDi.js b/assets/app.D2bxQPpo.js similarity index 76% rename from assets/app.CenpHCDi.js rename to assets/app.D2bxQPpo.js index 4b3d493..5bb5f4c 100644 --- a/assets/app.CenpHCDi.js +++ b/assets/app.D2bxQPpo.js @@ -1 +1 @@ -import{R as i}from"./chunks/theme.F2IToOfj.js";import{j as o,ag as u,ah as l,ai as c,aj as f,ak as d,al as m,am as h,an as g,ao as A,ap as v,d as w,u as y,l as C,z as P,aq as R,ar as b,as as j,a4 as D}from"./chunks/framework.DPHCW6-_.js";function p(e){if(e.extends){const a=p(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const s=p(i),E=w({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&&R(),b(),j(),s.setup&&s.setup(),()=>D(s.Layout)}});async function S(){const e=x(),a=T();a.provide(l,e);const t=c(e.route);return a.provide(f,t),a.component("Content",d),a.component("ClientOnly",m),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),s.enhanceApp&&await s.enhanceApp({app:a,router:e,siteData:h}),{app:a,router:e,data:t}}function T(){return g(E)}function x(){let e=o,a;return A(t=>{let n=v(t),r=null;return n&&(e&&(a=n),(e||a===n)&&(n=n.replace(/\.js$/,".lean.js")),r=import(n)),o&&(e=!1),r},s.NotFound)}o&&S().then(({app:e,router:a,data:t})=>{a.go().then(()=>{u(a.route,t.site),e.mount("#app")})});export{S as createApp}; +import{R as i}from"./chunks/theme.BqZMVUP5.js";import{j as o,ac as u,ad as c,ae as l,af as f,ag as d,ah as m,ai as h,aj as g,ak as A,al as v,d as w,u as y,l as C,z as P,am as R,an as b,ao as j,a4 as D}from"./chunks/framework.CmHn2guR.js";function p(e){if(e.extends){const a=p(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const s=p(i),E=w({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&&R(),b(),j(),s.setup&&s.setup(),()=>D(s.Layout)}});async function S(){const e=x(),a=T();a.provide(c,e);const t=l(e.route);return a.provide(f,t),a.component("Content",d),a.component("ClientOnly",m),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),s.enhanceApp&&await s.enhanceApp({app:a,router:e,siteData:h}),{app:a,router:e,data:t}}function T(){return g(E)}function x(){let e=o,a;return A(t=>{let n=v(t),r=null;return n&&(e&&(a=n),(e||a===n)&&(n=n.replace(/\.js$/,".lean.js")),r=import(n)),o&&(e=!1),r},s.NotFound)}o&&S().then(({app:e,router:a,data:t})=>{a.go().then(()=>{u(a.route,t.site),e.mount("#app")})});export{S as createApp}; diff --git a/assets/chunks/@localSearchIndexroot.BKvwyqC_.js b/assets/chunks/@localSearchIndexroot.BKvwyqC_.js new file mode 100644 index 0000000..adb3b08 --- /dev/null +++ b/assets/chunks/@localSearchIndexroot.BKvwyqC_.js @@ -0,0 +1 @@ +const t='{"documentCount":122,"nextId":122,"documentIds":{"0":"/youqu3/指南/与生俱来/JSON报告.html#json-报告","1":"/youqu3/指南/与生俱来/JSON报告.html#报告内容","2":"/youqu3/指南/与生俱来/JSON报告.html#整体结构","3":"/youqu3/指南/与生俱来/JSON报告.html#environment","4":"/youqu3/指南/与生俱来/JSON报告.html#summary","5":"/youqu3/指南/与生俱来/JSON报告.html#collectors","6":"/youqu3/指南/与生俱来/JSON报告.html#tests","7":"/youqu3/指南/与生俱来/JSON报告.html#warnings","8":"/youqu3/指南/与生俱来/全自动日志.html#全自动日志","9":"/youqu3/指南/与生俱来/全自动日志.html#背景","10":"/youqu3/指南/与生俱来/全自动日志.html#实现原理","11":"/youqu3/指南/与生俱来/全自动日志.html#日志配置","12":"/youqu3/指南/与生俱来/全自动日志.html#使用方法","13":"/youqu3/指南/与生俱来/前后钩子.html#前后钩子","14":"/youqu3/指南/与生俱来/前后钩子.html#前置钩子","15":"/youqu3/指南/与生俱来/前后钩子.html#前置脚本钩子","16":"/youqu3/指南/与生俱来/前后钩子.html#前置命令行入参钩子","17":"/youqu3/指南/与生俱来/前后钩子.html#后置钩子","18":"/youqu3/指南/与生俱来/前后钩子.html#后置脚本钩子","19":"/youqu3/指南/与生俱来/前后钩子.html#后置命令行入参钩子","20":"/youqu3/指南/与生俱来/动态等待.html#动态等待","21":"/youqu3/指南/与生俱来/动态等待.html#架构动态等待","22":"/youqu3/指南/与生俱来/动态等待.html#元素识别动态等待","23":"/youqu3/指南/与生俱来/命令行交互.html#命令行交互","24":"/youqu3/指南/与生俱来/命令行交互.html#本机命令行交互","25":"/youqu3/指南/与生俱来/命令行交互.html#普通权限执行","26":"/youqu3/指南/与生俱来/命令行交互.html#sudo权限执行","27":"/youqu3/指南/与生俱来/命令行交互.html#expect交互","28":"/youqu3/指南/与生俱来/命令行交互.html#远程命令行交互","29":"/youqu3/指南/与生俱来/命令行交互.html#普通权限执行-1","30":"/youqu3/指南/与生俱来/命令行交互.html#sudo权限执行-1","31":"/youqu3/指南/与生俱来/命令行交互.html#expect交互-1","32":"/youqu3/指南/与生俱来/断言语句.html#断言语句","33":"/youqu3/指南/与生俱来/断言语句.html#用例中使用方法","34":"/youqu3/指南/与生俱来/断言语句.html#方法明细","35":"/youqu3/指南/与生俱来/标签化管理.html#标签化管理","36":"/youqu3/指南/与生俱来/标签化管理.html#使用说明","37":"/youqu3/指南/与生俱来/标签化管理.html#csv文件与脚本对应关系","38":"/youqu3/指南/与生俱来/标签化管理.html#跳过用例","39":"/youqu3/指南/与生俱来/标签化管理.html#_1-固定跳过","40":"/youqu3/指南/与生俱来/标签化管理.html#_2-条件判断跳过","41":"/youqu3/指南/与生俱来/标签化管理.html#_3-自定义跳过","42":"/youqu3/指南/与生俱来/标签化管理.html#确认修复","43":"/youqu3/指南/与生俱来/标签化管理.html#废弃用例","44":"/youqu3/指南/与生俱来/标签化管理.html#文件格式","45":"/youqu3/指南/与生俱来/脚手架工具.html#脚手架工具","46":"/youqu3/指南/与生俱来/远程交互控制.html#远程交互式控制","47":"/youqu3/指南/与生俱来/远程交互控制.html#slaves对象提供远程机器信息","48":"/youqu3/指南/与生俱来/远程交互控制.html#ui操作远程对象","49":"/youqu3/指南/与生俱来/远程交互控制.html#rpcgui","50":"/youqu3/指南/环境管理/原生环境.html#原生环境","51":"/youqu3/指南/环境管理/虚拟环境.html#虚拟环境","52":"/youqu3/指南/环境管理/虚拟环境.html#youqu3-cargo","53":"/youqu3/指南/环境管理/虚拟环境.html#youqu3-shell","54":"/youqu3/指南/环境管理/虚拟环境.html#youqu3-rm","55":"/youqu3/指南/简介/YouQu3是什么.html#youqu3-能做什么","56":"/youqu3/指南/简介/快速开始.html#快速开始","57":"/youqu3/指南/简介/快速开始.html#安装","58":"/youqu3/指南/简介/快速开始.html#创建用例工程","59":"/youqu3/指南/驱动执行/本地执行.html#本地执行","60":"/youqu3/指南/驱动执行/本地执行.html#子命令","61":"/youqu3/指南/驱动执行/本地执行.html#用例驱动方式","62":"/youqu3/指南/驱动执行/本地执行.html#执行所有用例","63":"/youqu3/指南/驱动执行/本地执行.html#指定执行某一个用例","64":"/youqu3/指南/驱动执行/本地执行.html#指定某个目录执行","65":"/youqu3/指南/驱动执行/本地执行.html#根据关键词执行","66":"/youqu3/指南/驱动执行/本地执行.html#根据标签执行","67":"/youqu3/指南/驱动执行/本地执行.html#批量用例id驱动执行","68":"/youqu3/指南/驱动执行/本地执行.html#指定用例文件路径执行","69":"/youqu3/指南/驱动执行/自定义执行.html#自定义执行","70":"/youqu3/指南/驱动执行/自定义执行.html#youqu-tags-txt","71":"/youqu3/指南/驱动执行/自定义执行.html#youqu-keywords-txt","72":"/youqu3/指南/驱动执行/自定义执行.html#案例","73":"/youqu3/指南/驱动执行/自定义执行.html#pms用例驱动","74":"/youqu3/指南/驱动执行/远程执行.html#远程执行","75":"/youqu3/指南/驱动执行/远程执行.html#子命令","76":"/youqu3/指南/驱动执行/远程执行.html#远程测试机分组策略","77":"/youqu3/指南/驱动执行/远程执行.html#分组规则","78":"/youqu3/指南/驱动执行/远程执行.html#执行策略","79":"/youqu3/插件/插件列表.html#youqu3-插件汇总信息","80":"/youqu3/规划/UOS自动化测试方法套件.html#uos-自动化测试方法套件-umtk","81":"/youqu3/规划/UOS自动化测试方法套件.html#_1-简介","82":"/youqu3/规划/UOS自动化测试方法套件.html#_2-工程设计","83":"/youqu3/规划/UOS自动化测试方法套件.html#_2-1-工程结构","84":"/youqu3/规划/UOS自动化测试方法套件.html#_2-2-方案说明","85":"/youqu3/规划/UOS自动化测试方法套件.html#_3-套件发布","86":"/youqu3/规划/UOS自动化测试方法套件.html#_4-套件维护","87":"/youqu3/规划/UOS自动化测试方法套件.html#_5-对套件的测试","88":"/youqu3/规划/UOS自动化测试方法套件.html#_6-umtk-和-youqu2-的公共方法库-public-有何区别","89":"/youqu3/规划/UOS自动化测试用例.html#uos-自动化测试用例","90":"/youqu3/规划/UOS自动化测试用例.html#_1-简介","91":"/youqu3/规划/UOS自动化测试用例.html#_2-工程设计","92":"/youqu3/规划/UOS自动化测试用例.html#_2-1-工程结构","93":"/youqu3/规划/UOS自动化测试用例.html#_2-2-方案说明","94":"/youqu3/规划/YouQu3架构设计规划.html#youqu3-架构设计规划","95":"/youqu3/规划/YouQu3架构设计规划.html#_1-背景","96":"/youqu3/规划/YouQu3架构设计规划.html#_2-目标","97":"/youqu3/规划/YouQu3架构设计规划.html#_3-架构设计","98":"/youqu3/规划/YouQu3架构设计规划.html#_3-1-总体方案","99":"/youqu3/规划/YouQu3架构设计规划.html#_3-2-架构设计","100":"/youqu3/规划/YouQu3架构设计规划.html#_3-3-整体数据流","101":"/youqu3/规划/YouQu3架构设计规划.html#_3-4-详细设计","102":"/youqu3/规划/YouQu3架构设计规划.html#_3-4-1-驱动执行管理","103":"/youqu3/规划/YouQu3架构设计规划.html#_3-4-2-配置项管理","104":"/youqu3/规划/YouQu3架构设计规划.html#_3-4-3-框架总线接口","105":"/youqu3/规划/YouQu3架构设计规划.html#_3-4-4-按测试类型管理插件","106":"/youqu3/规划/YouQu3架构设计规划.html#_3-4-5-环境依赖管理","107":"/youqu3/规划/YouQu3架构设计规划.html#_4-用例工程设计","108":"/youqu3/规划/YouQu3架构设计规划.html#_4-1-用例工程结构","109":"/youqu3/规划/YouQu3架构设计规划.html#_4-2-各模块编写思路","110":"/youqu3/规划/YouQu3架构设计规划.html#_4-2-1-方法层","111":"/youqu3/规划/YouQu3架构设计规划.html#_4-2-2-用例层","112":"/youqu3/规划/YouQu3架构设计规划.html#_4-2-3-断言","113":"/youqu3/规划/YouQu3架构设计规划.html#_4-2-4-配置对象","114":"/youqu3/规划/YouQu3架构设计规划.html#_4-2-5-用例标签管理文件","115":"/youqu3/规划/YouQu3架构设计规划.html#_4-2-6-默认环境变量管理文件","116":"/youqu3/规划/YouQu3架构设计规划.html#_4-2-7-依赖管理文件","117":"/youqu3/规划/YouQu3架构设计规划.html#_4-2-8-调试用例驱动","118":"/youqu3/规划/YouQu3架构设计规划.html#_5-演进规划","119":"/youqu3/规划/YouQu3架构设计规划.html#可视化配置","120":"/youqu3/规划/YouQu3架构设计规划.html#非开发者下运行","121":"/youqu3/规划/YouQu3架构设计规划.html#过程钩子"},"fieldIds":{"title":0,"titles":1,"text":2},"fieldLength":{"0":[2,1,8],"1":[1,2,1],"2":[1,3,23],"3":[1,3,31],"4":[1,3,15],"5":[1,3,4],"6":[1,3,21],"7":[1,3,23],"8":[1,1,1],"9":[1,1,41],"10":[1,1,24],"11":[1,1,27],"12":[1,1,102],"13":[1,1,3],"14":[1,1,1],"15":[1,2,11],"16":[1,2,24],"17":[1,1,1],"18":[1,2,12],"19":[1,2,24],"20":[1,1,1],"21":[1,1,21],"22":[1,1,1],"23":[1,1,1],"24":[1,1,1],"25":[1,2,8],"26":[1,2,11],"27":[1,2,18],"28":[1,1,1],"29":[1,2,13],"30":[1,2,15],"31":[1,2,17],"32":[1,1,4],"33":[1,1,35],"34":[1,1,251],"35":[1,1,1],"36":[1,1,13],"37":[1,1,50],"38":[1,1,14],"39":[2,2,18],"40":[2,2,62],"41":[2,2,41],"42":[1,1,33],"43":[1,1,21],"44":[1,1,8],"45":[1,1,15],"46":[1,1,13],"47":[1,1,21],"48":[1,1,1],"49":[1,2,57],"50":[1,1,11],"51":[1,1,22],"52":[2,1,6],"53":[2,1,12],"54":[2,1,4],"55":[3,1,18],"56":[1,1,1],"57":[1,1,18],"58":[1,1,9],"59":[1,1,1],"60":[1,1,7],"61":[1,1,1],"62":[1,2,6],"63":[1,2,21],"64":[1,2,25],"65":[1,2,30],"66":[1,2,24],"67":[1,2,15],"68":[1,2,21],"69":[1,1,8],"70":[3,1,14],"71":[3,1,14],"72":[1,1,1],"73":[1,2,31],"74":[1,1,1],"75":[1,1,18],"76":[1,1,1],"77":[1,2,17],"78":[1,2,32],"79":[2,1,92],"80":[4,1,1],"81":[2,4,18],"82":[2,4,1],"83":[3,5,20],"84":[2,5,21],"85":[2,4,33],"86":[2,4,8],"87":[2,4,9],"88":[7,4,50],"89":[2,1,1],"90":[2,2,12],"91":[2,2,1],"92":[3,4,29],"93":[2,4,24],"94":[2,1,1],"95":[2,2,56],"96":[2,2,46],"97":[2,2,1],"98":[3,4,37],"99":[3,4,1],"100":[2,4,15],"101":[3,4,2],"102":[4,6,16],"103":[4,6,19],"104":[3,6,12],"105":[3,6,4],"106":[4,6,5],"107":[2,2,5],"108":[3,4,49],"109":[3,4,2],"110":[4,6,53],"111":[3,6,32],"112":[4,6,30],"113":[3,6,13],"114":[4,6,9],"115":[4,6,4],"116":[4,6,2],"117":[4,6,5],"118":[2,2,1],"119":[1,7,6],"120":[1,7,4],"121":[1,7,5]},"averageFieldLength":[1.7295081967213115,2.4508196721311477,18.90983606557377],"storedFields":{"0":{"title":"JSON 报告","titles":[]},"1":{"title":"报告内容","titles":["JSON 报告"]},"2":{"title":"整体结构","titles":["JSON 报告","报告内容"]},"3":{"title":"Environment","titles":["JSON 报告","报告内容"]},"4":{"title":"Summary","titles":["JSON 报告","报告内容"]},"5":{"title":"Collectors","titles":["JSON 报告","报告内容"]},"6":{"title":"Tests","titles":["JSON 报告","报告内容"]},"7":{"title":"Warnings","titles":["JSON 报告","报告内容"]},"8":{"title":"全自动日志","titles":[]},"9":{"title":"背景","titles":["全自动日志"]},"10":{"title":"实现原理","titles":["全自动日志"]},"11":{"title":"日志配置","titles":["全自动日志"]},"12":{"title":"使用方法","titles":["全自动日志"]},"13":{"title":"前后钩子","titles":[]},"14":{"title":"前置钩子","titles":["前后钩子"]},"15":{"title":"前置脚本钩子","titles":["前后钩子","前置钩子"]},"16":{"title":"前置命令行入参钩子","titles":["前后钩子","前置钩子"]},"17":{"title":"后置钩子","titles":["前后钩子"]},"18":{"title":"后置脚本钩子","titles":["前后钩子","后置钩子"]},"19":{"title":"后置命令行入参钩子","titles":["前后钩子","后置钩子"]},"20":{"title":"动态等待","titles":[]},"21":{"title":"架构动态等待","titles":["动态等待"]},"22":{"title":"元素识别动态等待","titles":["动态等待"]},"23":{"title":"命令行交互","titles":[]},"24":{"title":"本机命令行交互","titles":["命令行交互"]},"25":{"title":"普通权限执行","titles":["命令行交互","本机命令行交互"]},"26":{"title":"sudo权限执行","titles":["命令行交互","本机命令行交互"]},"27":{"title":"expect交互","titles":["命令行交互","本机命令行交互"]},"28":{"title":"远程命令行交互","titles":["命令行交互"]},"29":{"title":"普通权限执行","titles":["命令行交互","远程命令行交互"]},"30":{"title":"sudo权限执行","titles":["命令行交互","远程命令行交互"]},"31":{"title":"expect交互","titles":["命令行交互","远程命令行交互"]},"32":{"title":"断言语句","titles":[]},"33":{"title":"用例中使用方法","titles":["断言语句"]},"34":{"title":"方法明细","titles":["断言语句"]},"35":{"title":"标签化管理","titles":[]},"36":{"title":"使用说明","titles":["标签化管理"]},"37":{"title":"CSV文件与脚本对应关系","titles":["标签化管理"]},"38":{"title":"跳过用例","titles":["标签化管理"]},"39":{"title":"1. 固定跳过","titles":["标签化管理","跳过用例"]},"40":{"title":"2. 条件判断跳过","titles":["标签化管理","跳过用例"]},"41":{"title":"3.自定义跳过","titles":["标签化管理","跳过用例"]},"42":{"title":"确认修复","titles":["标签化管理"]},"43":{"title":"废弃用例","titles":["标签化管理"]},"44":{"title":"文件格式","titles":["标签化管理"]},"45":{"title":"脚手架工具","titles":[]},"46":{"title":"远程交互式控制","titles":[]},"47":{"title":"slaves对象提供远程机器信息","titles":["远程交互式控制"]},"48":{"title":"UI操作远程对象","titles":["远程交互式控制"]},"49":{"title":"RpcGui","titles":["远程交互式控制","UI操作远程对象"]},"50":{"title":"原生环境","titles":[]},"51":{"title":"虚拟环境","titles":[]},"52":{"title":"youqu3-cargo","titles":["虚拟环境"]},"53":{"title":"youqu3-shell","titles":["虚拟环境"]},"54":{"title":"youqu3-rm","titles":["虚拟环境"]},"55":{"title":"YouQu3 能做什么?","titles":[null]},"56":{"title":"快速开始","titles":[]},"57":{"title":"安装","titles":["快速开始"]},"58":{"title":"创建用例工程","titles":["快速开始"]},"59":{"title":"本地执行","titles":[]},"60":{"title":"子命令","titles":["本地执行"]},"61":{"title":"用例驱动方式","titles":["本地执行"]},"62":{"title":"执行所有用例","titles":["本地执行","用例驱动方式"]},"63":{"title":"指定执行某一个用例","titles":["本地执行","用例驱动方式"]},"64":{"title":"指定某个目录执行","titles":["本地执行","用例驱动方式"]},"65":{"title":"根据关键词执行","titles":["本地执行","用例驱动方式"]},"66":{"title":"根据标签执行","titles":["本地执行","用例驱动方式"]},"67":{"title":"批量用例ID驱动执行","titles":["本地执行","用例驱动方式"]},"68":{"title":"指定用例文件路径执行","titles":["本地执行","用例驱动方式"]},"69":{"title":"自定义执行","titles":[]},"70":{"title":"youqu-tags.txt","titles":["自定义执行"]},"71":{"title":"youqu-keywords.txt","titles":["自定义执行"]},"72":{"title":"案例","titles":["自定义执行"]},"73":{"title":"PMS用例驱动","titles":["自定义执行","案例"]},"74":{"title":"远程执行","titles":[]},"75":{"title":"子命令","titles":["远程执行"]},"76":{"title":"远程测试机分组策略","titles":["远程执行"]},"77":{"title":"分组规则","titles":["远程执行","远程测试机分组策略"]},"78":{"title":"执行策略","titles":["远程执行","远程测试机分组策略"]},"79":{"title":"YouQu3 插件汇总信息","titles":[null]},"80":{"title":"UOS 自动化测试方法套件(UMTK)","titles":[]},"81":{"title":"1. 简介","titles":["UOS 自动化测试方法套件(UMTK)"]},"82":{"title":"2. 工程设计","titles":["UOS 自动化测试方法套件(UMTK)"]},"83":{"title":"2.1. 工程结构","titles":["UOS 自动化测试方法套件(UMTK)","2. 工程设计"]},"84":{"title":"2.2. 方案说明","titles":["UOS 自动化测试方法套件(UMTK)","2. 工程设计"]},"85":{"title":"3. 套件发布","titles":["UOS 自动化测试方法套件(UMTK)"]},"86":{"title":"4. 套件维护","titles":["UOS 自动化测试方法套件(UMTK)"]},"87":{"title":"5. 对套件的测试","titles":["UOS 自动化测试方法套件(UMTK)"]},"88":{"title":"6. UMTK 和 YouQu2 的公共方法库(public)有何区别","titles":["UOS 自动化测试方法套件(UMTK)"]},"89":{"title":"UOS 自动化测试用例","titles":[]},"90":{"title":"1. 简介","titles":["UOS 自动化测试用例"]},"91":{"title":"2. 工程设计","titles":["UOS 自动化测试用例"]},"92":{"title":"2.1. 工程结构","titles":["UOS 自动化测试用例","2. 工程设计"]},"93":{"title":"2.2. 方案说明","titles":["UOS 自动化测试用例","2. 工程设计"]},"94":{"title":"YouQu3 架构设计规划","titles":[]},"95":{"title":"1. 背景","titles":["YouQu3 架构设计规划"]},"96":{"title":"2. 目标","titles":["YouQu3 架构设计规划"]},"97":{"title":"3. 架构设计","titles":["YouQu3 架构设计规划"]},"98":{"title":"3.1. 总体方案","titles":["YouQu3 架构设计规划","3. 架构设计"]},"99":{"title":"3.2. 架构设计","titles":["YouQu3 架构设计规划","3. 架构设计"]},"100":{"title":"3.3. 整体数据流","titles":["YouQu3 架构设计规划","3. 架构设计"]},"101":{"title":"3.4. 详细设计","titles":["YouQu3 架构设计规划","3. 架构设计"]},"102":{"title":"3.4.1. 驱动执行管理","titles":["YouQu3 架构设计规划","3. 架构设计","3.4. 详细设计"]},"103":{"title":"3.4.2. 配置项管理","titles":["YouQu3 架构设计规划","3. 架构设计","3.4. 详细设计"]},"104":{"title":"3.4.3. 框架总线接口","titles":["YouQu3 架构设计规划","3. 架构设计","3.4. 详细设计"]},"105":{"title":"3.4.4. 按测试类型管理插件","titles":["YouQu3 架构设计规划","3. 架构设计","3.4. 详细设计"]},"106":{"title":"3.4.5. 环境依赖管理","titles":["YouQu3 架构设计规划","3. 架构设计","3.4. 详细设计"]},"107":{"title":"4. 用例工程设计","titles":["YouQu3 架构设计规划"]},"108":{"title":"4.1. 用例工程结构","titles":["YouQu3 架构设计规划","4. 用例工程设计"]},"109":{"title":"4.2. 各模块编写思路","titles":["YouQu3 架构设计规划","4. 用例工程设计"]},"110":{"title":"4.2.1. 方法层","titles":["YouQu3 架构设计规划","4. 用例工程设计","4.2. 各模块编写思路"]},"111":{"title":"4.2.2. 用例层","titles":["YouQu3 架构设计规划","4. 用例工程设计","4.2. 各模块编写思路"]},"112":{"title":"4.2.3. 断言","titles":["YouQu3 架构设计规划","4. 用例工程设计","4.2. 各模块编写思路"]},"113":{"title":"4.2.4. 配置对象","titles":["YouQu3 架构设计规划","4. 用例工程设计","4.2. 各模块编写思路"]},"114":{"title":"4.2.5. 用例标签管理文件","titles":["YouQu3 架构设计规划","4. 用例工程设计","4.2. 各模块编写思路"]},"115":{"title":"4.2.6. 默认环境变量管理文件","titles":["YouQu3 架构设计规划","4. 用例工程设计","4.2. 各模块编写思路"]},"116":{"title":"4.2.7. 依赖管理文件","titles":["YouQu3 架构设计规划","4. 用例工程设计","4.2. 各模块编写思路"]},"117":{"title":"4.2.8. 调试用例驱动","titles":["YouQu3 架构设计规划","4. 用例工程设计","4.2. 各模块编写思路"]},"118":{"title":"5. 演进规划","titles":["YouQu3 架构设计规划"]},"119":{"title":"可视化配置","titles":["YouQu3 架构设计规划","5. 演进规划","4.2. 各模块编写思路"]},"120":{"title":"非开发者下运行","titles":["YouQu3 架构设计规划","5. 演进规划","4.2. 各模块编写思路"]},"121":{"title":"过程钩子","titles":["YouQu3 架构设计规划","5. 演进规划","4.2. 各模块编写思路"]}},"dirtCount":0,"index":[["即可自动被框架加载并执行",{"2":{"121":1}}],["过程钩子",{"0":{"121":1}}],["过程中如果根据需要出小版本",{"2":{"85":1}}],["减少系统自动化环境准备的难度",{"2":{"120":1}}],["非开发者下运行",{"0":{"120":1}}],["配合远程执行功能",{"2":{"119":1}}],["配置对象",{"0":{"113":1}}],["配置模块",{"2":{"108":1}}],["配置文件管理配置项",{"2":{"103":1}}],["配置类",{"2":{"103":1,"113":1}}],["配置项管理",{"0":{"103":1},"2":{"103":1}}],["页面化的配置功能",{"2":{"119":1}}],["演进规划",{"0":{"118":1},"1":{"119":1,"120":1,"121":1}}],["模式运行脚本",{"2":{"117":1}}],["模块",{"2":{"102":1}}],["模块化改造",{"2":{"96":1}}],["模块名称为应用包名",{"2":{"84":1,"93":1}}],["模块名称",{"2":{"65":1}}],["定义用例工程所需要的依赖包",{"2":{"116":1}}],["定义虚拟环境相关的一些环境变量",{"2":{"115":1}}],["运行的行为",{"2":{"115":1}}],["运行稳定性",{"2":{"96":1}}],["日常维护过程中",{"2":{"114":1}}],["日志模板语法",{"2":{"12":1}}],["日志配置",{"0":{"11":1}}],["维护标签时",{"2":{"114":1}}],["维护方法的稳定性有效性将成为一个问题",{"2":{"87":1}}],["然后",{"2":{"112":1}}],["然后将这些基础能力通过",{"2":{"46":1}}],["任务栏点击文件管理器",{"2":{"110":1}}],["\\t\\tself",{"2":{"112":1}}],["\\t",{"2":{"110":1}}],["\\tdef",{"2":{"110":1}}],["弹窗",{"2":{"110":1}}],["左边视图区域",{"2":{"110":1}}],["右边视图区域",{"2":{"110":1}}],["标题栏",{"2":{"110":1}}],["标签驱动",{"2":{"98":1}}],["标签驱动支持",{"2":{"66":1}}],["标签",{"2":{"66":1}}],["标签记录为",{"2":{"40":1}}],["标签可以无序",{"2":{"37":1}}],["标签化管理",{"0":{"35":1},"1":{"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1}}],["进行编写",{"2":{"110":1}}],["进行分割",{"2":{"41":1}}],["按照",{"2":{"110":1}}],["按测试类型管理插件",{"0":{"105":1}}],["放置在对应的类里面",{"2":{"110":1}}],["设计思想",{"2":{"110":1}}],["设计模式",{"2":{"45":1,"84":1,"98":1}}],["依赖管理文件",{"0":{"116":1},"2":{"108":1}}],["调试用例驱动",{"0":{"117":1}}],["调试用例驱动脚本",{"2":{"108":1}}],["调用所有的断言语句",{"2":{"33":1}}],["调用方法时",{"2":{"12":1}}],["图像识别方法所需要的资源",{"2":{"108":1}}],["图片路径",{"2":{"34":2}}],["上层用例就能通过框架动态调用插件提供的功能",{"2":{"104":1}}],["插槽",{"2":{"104":1}}],["插件如果已经安装",{"2":{"104":1}}],["插件",{"2":{"100":1}}],["插件汇总信息",{"0":{"79":1}}],["原则上不通过修改配置文件的方式修改",{"2":{"103":1}}],["原生环境虚拟环境",{"2":{"60":1,"62":1,"63":2,"64":1,"65":1,"66":1,"67":1,"68":3,"73":1,"75":1,"78":1}}],["原生环境",{"0":{"50":1}}],["公共配置为框架提供的一些具有默认值的配置项",{"2":{"103":1}}],["公共配置的形式",{"2":{"103":1}}],["显示的传入参数值",{"2":{"103":1}}],["采用虚拟环境管理依赖项",{"2":{"106":1}}],["采用命令行参数",{"2":{"103":1}}],["采用全新的架构设计",{"2":{"88":1}}],["解析测试策略",{"2":{"102":1}}],["解除跳过时将装饰器代码删掉",{"2":{"38":1}}],["获取命令行参数并结合配置项",{"2":{"102":1}}],["获取被装饰的类下所有函数",{"2":{"10":1}}],["驱动",{"2":{"102":1}}],["驱动命令将命令行参数传递给框架底层",{"2":{"102":1}}],["驱动执行管理",{"0":{"102":1}}],["驱动执行",{"2":{"64":1}}],["详细介绍各功能模块的设计和编写思路",{"2":{"109":1}}],["详细描述各模块工作方式",{"2":{"101":1}}],["详细设计",{"0":{"101":1},"1":{"102":1,"103":1,"104":1,"105":1,"106":1}}],["抛异常程序终止",{"2":{"100":1}}],["否则提示用户进行安装",{"2":{"100":1}}],["否则会提示无法连接",{"2":{"75":1}}],["底层功能",{"2":{"100":1}}],["让用户能专注于用例逻辑的编写和维护",{"2":{"98":1}}],["让你可以专注于用例和方法的编写维护",{"2":{"45":1}}],["管理",{"2":{"98":1}}],["资源目录",{"2":{"98":1}}],["生成的用例工程遵循完整的",{"2":{"98":1}}],["路径驱动",{"2":{"98":1}}],["三方包的形式提供",{"2":{"98":1}}],["由用例层决定使用哪些功能对应安装哪些插件",{"2":{"98":1}}],["由于虚拟环境中也安装了",{"2":{"53":1}}],["由于需求变更",{"2":{"43":1}}],["总体方案",{"0":{"98":1}}],["互不影响",{"2":{"96":1}}],["提高",{"2":{"96":1}}],["提高用例开发效率",{"2":{"96":1}}],["提供一个",{"2":{"119":1}}],["提供可调用的配置对象config",{"2":{"108":1}}],["提供的一个全局对象",{"2":{"47":1}}],["提供灵活的前后钩子机制",{"2":{"13":1}}],["安全性稳定性更好",{"2":{"96":1}}],["安装",{"0":{"57":1},"2":{"85":1}}],["降低使用门槛",{"2":{"96":1}}],["价值",{"2":{"96":1}}],["简化系统环境部署",{"2":{"96":1}}],["简介",{"0":{"81":1,"90":1}}],["搭配远程执行功能",{"2":{"96":1}}],["功能插件可插拔",{"2":{"98":1}}],["功能扩展性更好",{"2":{"96":1}}],["功能可插拔",{"2":{"96":1}}],["功能强大的自动化测试框架",{"2":{"95":1}}],["极致轻量化",{"2":{"96":1}}],["诸多亮点功能的同时解决其遇到的问题",{"2":{"96":1}}],["扩展性和兼容性更好的自动化测试框架",{"2":{"95":1}}],["更贴合大部分真实用户的使用场景",{"2":{"120":1}}],["更新",{"2":{"96":1}}],["更加纯粹",{"2":{"95":1}}],["更重要的是我们不想引入三方依赖",{"2":{"44":1}}],["甚至有些问题在现有框架结构下根本无法解决",{"2":{"95":1}}],["业务流程有一些影响",{"2":{"95":1}}],["业务不同",{"2":{"88":1}}],["势必对现有公司自动化用例",{"2":{"95":1}}],["等等",{"2":{"95":1}}],["绑定了太多公司的业务",{"2":{"95":1}}],["导致框架代码容易被用户修改",{"2":{"95":1}}],["源代码暴露在用户面前",{"2":{"95":1}}],["每次使用需要初始化框架工程及单独做环境部署",{"2":{"95":1}}],["每个应用存在一个唯一的出口文件",{"2":{"84":1}}],["每个机器执行",{"2":{"78":1}}],["每个模块建立一个",{"2":{"37":1}}],["每个用例的详细结果",{"2":{"6":1}}],["仍然存在一些不尽人意的地方",{"2":{"95":1}}],["小版本更新了数十个",{"2":{"95":1}}],["两个大版本",{"2":{"95":1}}],["两对大括号中的内容",{"2":{"12":1}}],["月在欧拉社区开源",{"2":{"95":1}}],["月正式在",{"2":{"95":1}}],["社区开源",{"2":{"95":1}}],["年",{"2":{"95":2}}],["年多的持续开发优化",{"2":{"95":1}}],["年成都测试团队开始内部孵化的项目",{"2":{"95":1}}],["经过了",{"2":{"95":1}}],["旨在成为下一代",{"2":{"96":1}}],["旨在开发一个简单易用",{"2":{"95":1}}],["旨在提供",{"2":{"90":1}}],["旨在提供系统预装应用所有的元素的操作方法",{"2":{"81":1}}],["做复杂步骤的封装",{"2":{"93":1}}],["里面导入使用",{"2":{"93":1}}],["编写的",{"2":{"90":1}}],["大量人员都可以对其进行直接修改",{"2":{"88":1}}],["稳定性",{"2":{"88":2}}],["确保操作方法的一致性",{"2":{"88":1}}],["确认修复",{"0":{"42":1},"2":{"36":1,"37":1,"42":3,"43":1}}],["代码一致性",{"2":{"88":1}}],["代表不跳过",{"2":{"41":1}}],["代表跳过",{"2":{"41":1}}],["容易受到需求变更",{"2":{"88":1}}],["仅包含自动化用例用到的少部分公共方法",{"2":{"88":1}}],["仅驱动执行这一条用例",{"2":{"63":1}}],["涵盖了",{"2":{"88":1}}],["范围覆盖很少",{"2":{"88":1}}],["范围",{"2":{"88":1}}],["内外部开发者们的认可",{"2":{"95":1}}],["内容",{"2":{"88":1}}],["内置支持的条件跳过对象",{"2":{"40":1}}],["二者属于两个时代",{"2":{"88":1}}],["有些问题处理起来必然会影响到框架的兼容性",{"2":{"95":1}}],["有效性没有保障",{"2":{"88":1}}],["有效性",{"2":{"88":1}}],["有很大差异",{"2":{"88":1}}],["有何区别",{"0":{"88":1}}],["亦各从其志也",{"2":{"88":1}}],["道",{"2":{"88":1}}],["卫灵公",{"2":{"88":1}}],["论语",{"2":{"88":1}}],["孔子",{"2":{"88":1}}],["适合有离线部署需求的用户",{"2":{"96":1}}],["适配厂商可以直接使用这些单元测试进行适配测试",{"2":{"87":1}}],["适用于气泡类的断言",{"2":{"34":1}}],["专门针对元素操作方法函数进行测试",{"2":{"87":1}}],["对象的属性值",{"2":{"103":1}}],["对纯",{"2":{"95":1}}],["对套件的测试",{"0":{"87":1}}],["对于用例规模比较大的应用",{"2":{"37":1}}],["鼓励内外部开发者贡献",{"2":{"86":1}}],["其中所有的用例步骤都应该调用方法层对应的方法",{"2":{"111":1}}],["其中有一张图片识别成功即返回结果",{"2":{"34":1}}],["其他人可以提需求",{"2":{"86":1}}],["发布",{"2":{"85":1}}],["发布一个套件版本",{"2":{"85":2}}],["阶段",{"2":{"85":1}}],["套件里面保存元素的操作方法",{"2":{"87":1}}],["套件由专人主责维护",{"2":{"86":1}}],["套件维护",{"0":{"86":1}}],["套件通过",{"2":{"85":1}}],["套件持续保持更新",{"2":{"85":1}}],["套件分大版本发布",{"2":{"85":1}}],["套件发布",{"0":{"85":1}}],["遵循",{"2":{"84":1}}],["供外部用例调用",{"2":{"84":1}}],["下划线连接单词",{"2":{"84":1,"93":1}}],["下完美的键鼠工具",{"2":{"79":1}}],["方便用例开发者以",{"2":{"117":1}}],["方便安装",{"2":{"96":1}}],["方案说明",{"0":{"84":1,"93":1}}],["方法唯一出口类",{"2":{"108":1}}],["方法基类",{"2":{"108":1}}],["方法层按需导入框架提供的底层能力",{"2":{"110":1}}],["方法层",{"0":{"110":1}}],["方法层目录",{"2":{"108":1}}],["方法层基础代码自动生成",{"2":{"98":1}}],["方法层所有的函数",{"2":{"12":1}}],["方法代码",{"2":{"98":1}}],["方法增删改的详细数据",{"2":{"79":1}}],["方法只能有一个入参",{"2":{"41":1}}],["方法必须有返回结果并且为布尔值",{"2":{"41":1}}],["方法名必须以",{"2":{"41":1}}],["方法编写规范",{"2":{"41":1}}],["方法明细",{"0":{"34":1}}],["方法库里面",{"2":{"12":1}}],["方法",{"2":{"10":1}}],["└──",{"2":{"83":4,"92":5,"108":3}}],["组装成自动化测试用例",{"2":{"81":1}}],["测试方法套件中所有的方法均为原子操作",{"2":{"84":1}}],["测试方法套件是一个独立项目",{"2":{"81":1}}],["测试单驱动插件",{"2":{"79":1}}],["测试单",{"2":{"73":1}}],["封装的",{"2":{"81":1}}],["系统中各应用在",{"2":{"93":1}}],["系统中各应用划分自己的模块",{"2":{"84":1}}],["系统所有预装应用的测试用例",{"2":{"90":1}}],["系统所有预装应用的原子操作方法",{"2":{"88":1}}],["系统级测试用例",{"2":{"90":1}}],["系统自动化测试操作方法套件",{"2":{"81":1}}],["系统显示协议跳过",{"2":{"40":1}}],["全面插件化模块化",{"2":{"96":1}}],["全面优化框架接口调用机制",{"2":{"96":1}}],["全称",{"2":{"81":1}}],["全自动日志插件",{"2":{"79":1}}],["全自动日志",{"0":{"8":1},"1":{"9":1,"10":1,"11":1,"12":1}}],["迁移工具",{"2":{"79":1}}],["相对位移元素定位方案的配置文件",{"2":{"108":1}}],["相对位移定位插件",{"2":{"79":1}}],["相册的用例文件为",{"2":{"37":1}}],["操作系统环境支持不够友好",{"2":{"95":1}}],["操作系统预装应用的元素操作方法套件",{"2":{"81":1}}],["操作较为复杂",{"2":{"95":1}}],["操作或命令行操作",{"2":{"46":1}}],["操控插件",{"2":{"79":1}}],["键鼠操作插件",{"2":{"79":1}}],["✔️",{"2":{"79":15}}],["属性定位插件",{"2":{"79":1}}],["个机器瓜分",{"2":{"78":1}}],["个测试机",{"2":{"78":1}}],["个组",{"2":{"77":1}}],["都同时执行",{"2":{"78":1}}],["都不需要再写日志代码",{"2":{"12":1}}],["条",{"2":{"78":2}}],["条用例",{"2":{"78":2}}],["条件判断组合",{"2":{"41":1}}],["条件判断跳过",{"0":{"40":1}}],["假设总共",{"2":{"78":1}}],["同事们",{"2":{"95":1}}],["同一组内瓜分执行",{"2":{"78":1}}],["同时定义一些用例工程相关的配置",{"2":{"113":1}}],["同时框架可以在中间件中对插件功能进行增强或修改",{"2":{"104":1}}],["同时对各功能进行插件化",{"2":{"96":1}}],["同时选择多个环境",{"2":{"57":1}}],["同时标记了skip",{"2":{"42":1}}],["规则概述",{"2":{"78":1}}],["一键生成用例工程模板代码",{"2":{"98":1}}],["一些底层模块或接口命名不优雅",{"2":{"95":1}}],["一对大括号表示一个组",{"2":{"77":1}}],["一个元素一个方法",{"2":{"110":1}}],["一个页面一个类",{"2":{"110":1}}],["一个应用含有大量的操作函数",{"2":{"9":1}}],["一个函数里面至少包含一条日志信息",{"2":{"9":1}}],["分组规则",{"0":{"77":1}}],["分割",{"2":{"47":1}}],["服务的测试报告生成插件",{"2":{"79":1}}],["服务的",{"2":{"79":1}}],["服务的图像识别插件",{"2":{"79":1}}],["服务的方式提供出来",{"2":{"46":1}}],["服务",{"2":{"75":1}}],["开发",{"2":{"88":1}}],["开启",{"2":{"75":1}}],["开头",{"2":{"41":1}}],["开头的",{"2":{"11":1}}],["集合写入",{"2":{"73":1}}],["将基于youqu2的用例代码修改为youqu3",{"2":{"79":1}}],["将用例",{"2":{"73":1}}],["将跳过用例操作也整合进入用例标签",{"2":{"38":1}}],["案例",{"0":{"72":1},"1":{"73":1}}],["如",{"2":{"70":1,"71":1,"98":1,"113":1}}],["如果一个页面元素操作比较多",{"2":{"110":1}}],["如果一个应用存在多个页面",{"2":{"110":1}}],["如果涉及到复杂步骤的封装",{"2":{"93":1}}],["如果你想执行这个",{"2":{"63":1}}],["如果应用受到新需求影响需要跳过",{"2":{"39":1}}],["如果不传默认截取全屏识别",{"2":{"34":1}}],["如果不传参",{"2":{"34":1}}],["如果用常规的图像识别则有可能无法识别到",{"2":{"34":1}}],["如果比较复杂操作步骤",{"2":{"9":1}}],["会自动加载并执行",{"2":{"70":1,"71":1}}],["会自动生成一个命令",{"2":{"50":1,"51":1}}],["支持对用例执行的各个阶段插入钩子",{"2":{"121":1}}],["支持对各种测试策略的驱动执行",{"2":{"119":1}}],["支持对依赖环境进行一键打包",{"2":{"106":1}}],["支持用例目录或文件路径驱动执行",{"2":{"102":1}}],["支持基于关键词驱动用例执行",{"2":{"102":1}}],["支持基于测试单驱动插件驱动用例执行",{"2":{"102":1}}],["支持基于用例标签化管理驱动用例执行",{"2":{"102":1}}],["支持本地和远程执行模式",{"2":{"102":1}}],["支持多种用例驱动模式",{"2":{"98":1}}],["支持非开发者下运行",{"2":{"96":1}}],["支持离线部署",{"2":{"96":1}}],["支持在非开发着环境下运行用例",{"2":{"120":1}}],["支持在",{"2":{"69":1}}],["支持类名包含",{"2":{"11":1}}],["支持类名以",{"2":{"11":2}}],["加引号",{"2":{"68":1}}],["加上装饰器",{"2":{"12":1}}],["批量用例id驱动执行",{"0":{"67":1}}],["特有的",{"2":{"66":1}}],["特殊标签",{"2":{"37":1}}],["表达式",{"2":{"65":1,"66":1}}],["表示用例的id",{"2":{"37":1}}],["表示识别任意一个目标字符",{"2":{"34":1}}],["表示识别所有目标字符",{"2":{"34":1}}],["关键词驱动等等",{"2":{"98":1}}],["关键词驱动支持",{"2":{"65":1}}],["关键词可以是用例对象中的任意字符",{"2":{"65":1}}],["整体数据流",{"0":{"100":1}}],["整体结构",{"0":{"2":1}}],["整个字符串中可以任意截取字符作为关键词",{"2":{"65":1}}],["且有完善的单元测试机制",{"2":{"88":1}}],["且存在较多涉及用例逻辑的复杂步骤方法",{"2":{"88":1}}],["且大小写不敏感",{"2":{"65":1}}],["且要方便能使用",{"2":{"44":1}}],["根据标签执行",{"0":{"66":1}}],["根据关键词执行",{"0":{"65":1}}],["根据不同的测试类型选择以上不同的安装命令",{"2":{"57":1}}],["根据不同的架构对等待时间进行倍数放大",{"2":{"21":1}}],["│\\t└──",{"2":{"64":1}}],["│\\t├──",{"2":{"64":1}}],["│",{"2":{"64":5,"83":5,"92":22,"108":12}}],["指定用例目录",{"2":{"68":1}}],["指定用例文件",{"2":{"68":1}}],["指定用例文件路径执行",{"0":{"68":1}}],["指定某个目录执行",{"0":{"64":1}}],["指定执行某一个用例",{"0":{"63":1}}],["本地执行子命令为",{"2":{"60":1}}],["本地执行",{"0":{"59":1},"1":{"60":1,"61":1,"62":1,"63":1,"64":1,"65":1,"66":1,"67":1,"68":1}}],["本机命令行交互",{"0":{"24":1},"1":{"25":1,"26":1,"27":1}}],["基础环境默认支持",{"2":{"57":1}}],["基础环境guiwebuihttpremote",{"2":{"57":1}}],["基于此",{"2":{"9":1}}],["基于",{"2":{"9":1,"66":1,"79":4}}],["快速开始",{"0":{"56":1},"1":{"57":1,"58":1}}],["无限可能",{"2":{"55":1}}],["🤙️",{"2":{"55":1}}],["接口自动化测试",{"2":{"55":2}}],["接口从而控制远程机器执行用例步骤",{"2":{"46":1}}],["🔥",{"2":{"79":1}}],["🚧",{"2":{"79":3}}],["🕷️",{"2":{"55":1}}],["🚀",{"2":{"55":1}}],["🚌",{"2":{"55":1}}],["💻",{"2":{"55":1}}],["🌏",{"2":{"55":1}}],["桌面应用",{"2":{"55":1}}],["☑",{"2":{"55":6}}],["能满足公司对自动化测试的业务需求",{"2":{"95":1}}],["能做什么",{"0":{"55":1}}],["能不能基于框架执行时",{"2":{"9":1}}],["$",{"2":{"53":1}}],["v25",{"2":{"85":1}}],["v20",{"2":{"85":2}}],["video",{"2":{"79":1}}],["virtualenv",{"2":{"53":1}}],["values",{"2":{"34":3}}],["删除虚拟环境",{"2":{"51":1}}],["激活虚拟环境",{"2":{"51":1}}],["命令安装使用",{"2":{"85":1}}],["命令可以将当前的虚拟环境删除",{"2":{"54":1}}],["命令",{"2":{"51":1}}],["命令行参数可以通过驱动命令提供入参选项",{"2":{"103":1}}],["命令行自动化",{"2":{"57":1}}],["命令行自动化测试",{"2":{"55":1}}],["命令行",{"2":{"47":1}}],["命令行传递参数",{"2":{"42":1}}],["命令行交互",{"0":{"23":1},"1":{"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"30":1,"31":1}}],["执行管理器接收命令行参数并读取公共配置项驱动用例执行",{"2":{"100":1}}],["执行模式支持本地驱动执行和远程驱动执行",{"2":{"98":1}}],["执行策略",{"0":{"78":1}}],["执行前确保远程机器已经开启了",{"2":{"75":1}}],["执行命令",{"2":{"73":1}}],["执行包含关键词的用例",{"2":{"65":1}}],["执行所有用例",{"0":{"62":1}}],["执行之后会自动创建一些有用的命令",{"2":{"51":1}}],["执行的时候会自动输出",{"2":{"12":1}}],["子命令",{"0":{"60":1,"75":1},"2":{"51":1}}],["还可以进行环境的管理",{"2":{"51":1}}],["虚拟环境默认在用例功能根目录下创建",{"2":{"106":1}}],["虚拟环境",{"0":{"51":1},"1":{"52":1,"53":1,"54":1}}],["你可以使用它进行用例的驱动执行和管理",{"2":{"50":1}}],["种方式传入",{"2":{"47":1}}],["机器信息有",{"2":{"47":1}}],["它不能脱离",{"2":{"88":1}}],["它除了可以驱动用例执行",{"2":{"51":1}}],["它保存了远程测试机的信息列表",{"2":{"47":1}}],["它继承了",{"2":{"33":1}}],["交互的基础能力",{"2":{"46":1}}],["远程测试机分组策略",{"0":{"76":1},"1":{"77":1,"78":1}}],["远程机器执行的用例相同",{"2":{"75":1}}],["远程执行使用子命令",{"2":{"75":1}}],["远程执行就是用本地作为服务端控制远程机器执行",{"2":{"75":1}}],["远程执行",{"0":{"74":1},"1":{"75":1,"76":1,"77":1,"78":1}}],["远程交互式控制",{"0":{"46":1},"1":{"47":1,"48":1,"49":1}}],["远程命令行交互",{"0":{"28":1},"1":{"29":1,"30":1,"31":1}}],["创建一个目录",{"2":{"45":1,"58":1}}],["创建用例工程",{"0":{"58":1},"2":{"45":1}}],["工程结构",{"0":{"83":1,"92":1}}],["工程设计",{"0":{"82":1,"91":1},"1":{"83":1,"84":1,"92":1,"93":1}}],["工程遵循完整的",{"2":{"45":1}}],["工程自有断言模块",{"2":{"33":1}}],["脚手架工具",{"0":{"45":1}}],["脚本文件id",{"2":{"36":1,"37":1,"39":1,"40":1}}],["脚本一样即可",{"2":{"16":1,"19":1}}],["打开进行编辑查看",{"2":{"44":1}}],["此配置文件需要维护大量的标签数据",{"2":{"44":1}}],["此时会抛异常",{"2":{"104":1}}],["此时",{"2":{"37":1}}],["已废弃",{"2":{"43":1}}],["已修复",{"2":{"42":2,"43":1}}],["废弃原因",{"2":{"43":1}}],["废弃用例是特殊的标签",{"2":{"37":1}}],["废弃用例",{"0":{"43":1},"2":{"36":1,"43":2}}],["该列存在",{"2":{"43":1}}],["环境依赖管理",{"0":{"106":1}}],["环境依赖管理等相关功能的目录文件也都一键生成",{"2":{"98":1}}],["环境依赖可以一键打包交付",{"2":{"96":1}}],["环境以提供",{"2":{"46":1}}],["环境影响或评估不再适用于自动化测试时",{"2":{"43":1}}],["环境信息",{"2":{"3":1}}],["针对某些用例",{"2":{"43":1}}],["针对于某些用例修复后",{"2":{"42":1}}],["yes",{"2":{"42":2}}],["youqu2",{"0":{"88":1},"2":{"79":1,"88":4,"95":3,"96":1}}],["youqu",{"0":{"70":1,"71":1},"2":{"47":1,"66":1,"69":2,"70":2,"71":2,"73":3,"79":10,"95":1}}],["youqu3",{"0":{"52":1,"53":1,"54":1,"55":1,"79":1,"94":1},"1":{"95":1,"96":1,"97":1,"98":1,"99":1,"100":1,"101":1,"102":1,"103":1,"104":1,"105":1,"106":1,"107":1,"108":1,"109":1,"110":1,"111":1,"112":1,"113":1,"114":1,"115":1,"116":1,"117":1,"118":1,"119":1,"120":1,"121":1},"2":{"9":2,"12":2,"13":1,"21":1,"25":1,"26":1,"27":1,"29":1,"30":1,"31":1,"32":1,"33":3,"34":10,"45":1,"46":1,"49":1,"50":2,"51":5,"52":1,"53":5,"54":1,"57":6,"58":1,"60":2,"62":2,"63":4,"64":2,"65":2,"66":2,"67":2,"68":6,"69":1,"70":1,"71":1,"75":2,"78":2,"79":3,"81":1,"88":2,"90":1,"93":1,"95":1,"96":1,"98":1,"100":2,"102":1,"103":1,"107":1,"110":1,"112":2,"113":1}}],["you",{"2":{"16":1,"19":1}}],["中间件",{"2":{"104":1}}],["中用例增删改",{"2":{"79":1}}],["中同时填入后",{"2":{"42":1}}],["中的任意一个",{"2":{"34":1}}],["当系统中安装了",{"2":{"50":1,"51":1}}],["当",{"2":{"42":1}}],["固定填入字段为",{"2":{"42":1}}],["固定跳过",{"0":{"39":1}}],["作为父类被",{"2":{"112":1}}],["作为标记该用例是否已经修复",{"2":{"42":1}}],["作为变量输出出来了",{"2":{"12":1}}],["新增一列标签名为",{"2":{"42":1}}],["但若用例层调用了此插件提供的功能",{"2":{"104":1}}],["但",{"2":{"95":1}}],["但仍然想要跳过用例",{"2":{"42":1}}],["但不能立即删除跳过原因",{"2":{"42":1}}],["但标签化管理的核心目的是集中化管理用例的标签",{"2":{"37":1}}],["推荐统一使用",{"2":{"41":1}}],["连接符号不可使用下划线和逗号",{"2":{"41":1}}],["连接服务器重试次数",{"2":{"34":1}}],["若插件没有被安装",{"2":{"104":1}}],["若插件已经安装",{"2":{"100":1}}],["若需要多个",{"2":{"41":1}}],["若函数需要多个参数",{"2":{"41":1}}],["若是",{"2":{"40":1}}],["重要",{"2":{"41":1}}],["重试间隔时间",{"2":{"34":1}}],["截取的左侧字符串作为函数名",{"2":{"41":1}}],["截取屏幕图片的间隔时间",{"2":{"34":1}}],["截取屏幕图片的时间",{"2":{"34":1}}],["k",{"2":{"63":4,"64":2,"65":2}}],["klvvw5821",{"2":{"40":1}}],["klvv",{"2":{"40":1}}],["keywords",{"0":{"71":1},"2":{"6":1,"69":1,"71":2}}],["符号将两个方法分开",{"2":{"41":1}}],["符号",{"2":{"40":1,"41":1}}],["剔除中横线和",{"2":{"40":1}}],["型号",{"2":{"40":1}}],["查看机器的",{"2":{"40":1}}],["查找图片",{"2":{"12":2}}],["说明",{"2":{"40":1,"51":1}}],["则正常调用",{"2":{"100":1}}],["则用例不会执行",{"2":{"43":1}}],["则用例不执行",{"2":{"41":1}}],["则新增一列标签名为",{"2":{"43":1}}],["则代码不会执行该条用例",{"2":{"42":1}}],["则执行该用例",{"2":{"41":1}}],["则跳过用例不执行",{"2":{"40":1}}],["则在此列备注具体的跳过原因",{"2":{"39":1}}],["或者",{"2":{"40":1}}],["判断当前架构是否为",{"2":{"40":1}}],["拼接",{"2":{"40":1}}],["多个用例文件",{"2":{"68":1}}],["多个机器信息用",{"2":{"47":1}}],["多个架构之间使用",{"2":{"40":1}}],["多个参数以逗号隔开",{"2":{"11":3}}],["架构设计",{"0":{"97":1,"99":1},"1":{"98":1,"99":1,"100":1,"101":1,"102":1,"103":1,"104":1,"105":1,"106":1}}],["架构设计规划",{"0":{"94":1},"1":{"95":1,"96":1,"97":1,"98":1,"99":1,"100":1,"101":1,"102":1,"103":1,"104":1,"105":1,"106":1,"107":1,"108":1,"109":1,"110":1,"111":1,"112":1,"113":1,"114":1,"115":1,"116":1,"117":1,"118":1,"119":1,"120":1,"121":1}}],["架构不跳过",{"2":{"40":1}}],["架构跳过",{"2":{"40":1}}],["架构名",{"2":{"40":1}}],["架构动态等待",{"0":{"21":1}}],["常见的场景为在不同架构上判断是否执行",{"2":{"40":1}}],["某些用例会因为不同的环境判断用例是否执行",{"2":{"40":1}}],["参数",{"2":{"40":2}}],["参数值可以传递任意命令行命令",{"2":{"16":1,"19":1}}],["最后所有的用例类均继承",{"2":{"112":1}}],["最终的用例状态会被标签为",{"2":{"39":1}}],["最大匹配次数",{"2":{"34":1}}],["最大匹配超时",{"2":{"34":1}}],["受到某新需求影响",{"2":{"39":1,"42":1,"43":1}}],["各模块编写思路",{"0":{"109":1},"1":{"110":1,"111":1,"112":1,"113":1,"114":1,"115":1,"116":1,"117":1,"119":1,"120":1,"121":1}}],["各功能以插件的方式接入",{"2":{"98":1}}],["各种代码风格不统一",{"2":{"88":1}}],["各种用例标签",{"2":{"39":1,"40":1,"42":1,"43":1}}],["各架构倍数",{"2":{"21":1}}],["示例",{"2":{"39":1,"40":1,"42":1}}],["而通过",{"2":{"38":1}}],["传统跳过用例的方式是在用例脚本里面给用例添加装饰器",{"2":{"38":1}}],["传统的日志输出方式",{"2":{"9":1}}],["跳过对象",{"2":{"40":1}}],["跳过的原因标签为",{"2":{"40":1}}],["跳过的原因统一标签开头为",{"2":{"39":1}}],["跳过用例可以直接通过修改",{"2":{"114":1}}],["跳过用例",{"0":{"38":1},"1":{"39":1,"40":1,"41":1}}],["跳过原因一栏中填写为",{"2":{"40":1}}],["跳过原因",{"2":{"36":1,"37":1,"38":1,"39":1,"40":1,"42":2,"43":1}}],["因此我们才萌生了对框架结构进行重新设计想法",{"2":{"95":1}}],["因此我们大胆的设想",{"2":{"9":1}}],["因此",{"2":{"87":1,"88":1}}],["因此你仍然可以在虚拟环境中使用命令",{"2":{"53":1}}],["因此若",{"2":{"37":1}}],["目标",{"0":{"96":1}}],["目标字符",{"2":{"34":1}}],["目录之间用空格分割",{"2":{"68":1}}],["目录组合",{"2":{"68":1}}],["目录下划分自己的用例模块",{"2":{"93":1}}],["目录下所有用例",{"2":{"64":1}}],["目录下",{"2":{"37":1}}],["所有的操作步骤都应该有一个对应的方法",{"2":{"110":1}}],["所有的方法按照",{"2":{"110":1}}],["所有的元素操作方法",{"2":{"84":1}}],["所有代码由专人维护",{"2":{"88":1}}],["所有方法以类的形式编写",{"2":{"84":1}}],["所有",{"2":{"37":1}}],["建议分模块",{"2":{"37":1}}],["比如",{"2":{"40":1,"41":1,"50":1,"65":1,"85":2,"95":1,"110":2}}],["比如文件管理器",{"2":{"37":1}}],["比如气泡在1秒内消失",{"2":{"34":1}}],["后面会详细讲到",{"2":{"37":1}}],["后置命令行入参钩子",{"0":{"19":1}}],["后置脚本钩子",{"0":{"18":1}}],["后置钩子",{"0":{"17":1},"1":{"18":1,"19":1}}],["列之后的所有列都是一个用例标签",{"2":{"37":1}}],["列为",{"2":{"37":1}}],["第",{"2":{"37":1}}],["也可以对这个页面做进一步划分",{"2":{"110":1}}],["也可以方便对虚拟环境的管理和维护",{"2":{"106":1}}],["也可以是传统的",{"2":{"66":1}}],["也可以是自定义的数字代表用例序号",{"2":{"37":1}}],["也得到了公司领导",{"2":{"95":1}}],["也会正常执行",{"2":{"42":1}}],["也就是说我们需要写大量的日志代码",{"2":{"9":1}}],["举例",{"2":{"37":1}}],["取中间的名称作为",{"2":{"37":1}}],["去掉用例序号后的字符串",{"2":{"37":1}}],["quot",{"2":{"37":2,"57":2,"65":2,"67":2}}],["以便方法或用例中能够获取到",{"2":{"113":1}}],["以此控制虚拟环境创建",{"2":{"115":1}}],["以此来获取框架已有的公共配置",{"2":{"113":1}}],["以此类推",{"2":{"85":1}}],["以插件的形式提供功能",{"2":{"96":1}}],["以下简称测试用例",{"2":{"90":1}}],["以下简称测试方法套件",{"2":{"81":1}}],["以保持套件的各方面一致性",{"2":{"86":1}}],["以上写法表示有",{"2":{"77":1}}],["以",{"2":{"37":1,"96":1}}],["使用更简单方便",{"2":{"96":1}}],["使用的框架不同",{"2":{"88":1}}],["使用框架的后置钩子触发结果回填到",{"2":{"73":1}}],["使用框架的前置钩子触发爬取动作生成",{"2":{"73":1}}],["使用逻辑表达式的时候一定要加引号",{"2":{"65":1,"67":1}}],["使用脚手架功能创建用例工程",{"2":{"45":1,"58":1}}],["使用子命令",{"2":{"45":1}}],["使用",{"2":{"40":1,"41":1,"85":1,"98":1}}],["使用说明",{"0":{"36":1}}],["使用方法很简单",{"2":{"12":1}}],["使用方法",{"0":{"12":1}}],["+",{"2":{"34":2,"40":1,"103":1}}],["`japan`",{"2":{"34":1}}],["`korean`",{"2":{"34":1}}],["`german`",{"2":{"34":1}}],["`fr`",{"2":{"34":1}}],["`en`",{"2":{"34":1}}],["`ch`",{"2":{"34":1}}],["返回",{"2":{"41":2}}],["返回识别到的所有数据",{"2":{"34":1}}],["返回图片中识别到的所有字符串",{"2":{"34":1}}],["只返回第一个",{"2":{"34":1}}],["只需要在出口文件加上类装饰器",{"2":{"12":1}}],["要识别的图片路径",{"2":{"34":1}}],["要识别的模板图片",{"2":{"34":1}}],["并提示用户安装对应插件",{"2":{"104":1}}],["并根据需要将测试结果",{"2":{"100":1}}],["并动态加载",{"2":{"100":1}}],["并在系统关键节点发布对应的版本",{"2":{"85":1}}],["并将截取的右侧作为参数传递给该函数",{"2":{"41":1}}],["并返回其在图片中的坐标",{"2":{"34":1}}],["并且所有调用的方法会以",{"2":{"12":1}}],["识别插件",{"2":{"79":1}}],["识别一个字符串或多个字符串",{"2":{"34":1}}],["识别率",{"2":{"34":1}}],["结果",{"2":{"34":2}}],["结尾的",{"2":{"11":1}}],["预期值",{"2":{"34":4}}],["不需要修改用例脚本",{"2":{"114":1}}],["不需要用户去了解和思考哪些插件适合哪种测试类型",{"2":{"105":1}}],["不再提供",{"2":{"103":1}}],["不安装插件的情况下框架也能正常运行",{"2":{"96":1}}],["不适合对外开源发布",{"2":{"88":1}}],["不涉及用例逻辑",{"2":{"88":1}}],["不受需求变更影响",{"2":{"88":1}}],["不兼容",{"2":{"88":1}}],["不相为谋",{"2":{"88":1}}],["不同",{"2":{"88":1}}],["不同组之间相同执行",{"2":{"78":1}}],["不做复杂步骤的封装",{"2":{"84":1}}],["不存在复杂步骤的堆叠封装",{"2":{"88":1}}],["不存在",{"2":{"34":2}}],["不显示",{"2":{"5":1}}],["存在跳过标签则用例也不会被执行",{"2":{"39":1}}],["存在",{"2":{"34":2}}],["应用名字",{"2":{"34":2}}],["元素不应该存在",{"2":{"34":1}}],["元素不存在",{"2":{"34":1}}],["元素识别动态等待",{"0":{"22":1}}],["匹配度",{"2":{"34":1}}],["匹配元素的格式",{"2":{"34":2}}],["匹配相似度",{"2":{"34":2}}],["是在",{"2":{"88":1}}],["是不同的测试方法套件版本",{"2":{"85":1}}],["是基于",{"2":{"81":1,"88":1,"90":1}}],["是",{"2":{"47":1,"95":1}}],["是否分模块维护取决于应用的用例复杂度",{"2":{"37":1}}],["是否递归查找",{"2":{"34":1}}],["是类装饰器",{"2":{"12":1}}],["断言",{"0":{"112":1}}],["断言方法类",{"2":{"108":1}}],["断言资源",{"2":{"108":1}}],["断言文案不存在",{"2":{"34":1}}],["断言文案存在",{"2":{"34":1}}],["断言文件不存在",{"2":{"34":1}}],["断言文件存在",{"2":{"34":1}}],["断言结果为假",{"2":{"34":1}}],["断言结果为真",{"2":{"34":1}}],["断言不相等",{"2":{"34":1}}],["断言相等",{"2":{"34":1}}],["断言应用进程不存在",{"2":{"34":1}}],["断言应用进程状态",{"2":{"34":4}}],["断言应用进程存在",{"2":{"34":1}}],["断言元素不存在",{"2":{"34":1}}],["断言元素存在",{"2":{"34":1}}],["断言语句",{"0":{"32":1},"1":{"33":1,"34":1}}],["~",{"2":{"34":2}}],["文件来控制用例是否跳过",{"2":{"114":1}}],["文件来管理跳过用例则会方便很多",{"2":{"38":1}}],["文件里面写关键词的表达式",{"2":{"71":1}}],["文件里面写标签的表达式",{"2":{"70":1}}],["文件里面跳过原因列是否存在跳过标签",{"2":{"39":1}}],["文件管理的标签",{"2":{"66":1}}],["文件管理器",{"2":{"49":1,"110":2}}],["文件几乎是唯一能满足所有的要求的文件格式",{"2":{"44":1}}],["文件格式",{"0":{"44":1}}],["文件中定义用例对象的标签",{"2":{"114":1}}],["文件中自定义用例集驱动执行",{"2":{"69":1}}],["文件中所有的用例",{"2":{"63":1}}],["文件中查找是否有同名函数",{"2":{"41":1}}],["文件中",{"2":{"40":1}}],["文件中新增一列为",{"2":{"38":1}}],["文件中写入标签",{"2":{"36":1}}],["文件太多了也是一个很糟糕的事情",{"2":{"37":1}}],["文件建议放在一个",{"2":{"37":1}}],["文件",{"2":{"37":1,"70":1,"71":1,"73":2}}],["文件的文件名",{"2":{"37":1}}],["文件去掉首字符串",{"2":{"37":1}}],["文件存在",{"2":{"34":1}}],["文件名称",{"2":{"65":1}}],["文件名就应为",{"2":{"37":1}}],["文件名",{"2":{"34":1}}],["文件全路径",{"2":{"34":1}}],["文件全路径或目录",{"2":{"34":1}}],["文件不存在",{"2":{"34":1}}],["文管方法库出口",{"2":{"12":1}}],["期望结果",{"2":{"34":2}}],["期望元素不存在",{"2":{"34":1}}],["期望元素存在",{"2":{"34":1}}],["期望不存在文件路径",{"2":{"34":1}}],["期望存在文件路径",{"2":{"34":1}}],["期望界面不存在模板图片",{"2":{"34":1}}],["期望界面存在模板图片",{"2":{"34":1}}],["屏幕上匹配不存在图片",{"2":{"34":1}}],["屏幕上匹配图片",{"2":{"34":2}}],["默认环境变量管理文件",{"0":{"115":1},"2":{"108":1}}],["默认值为",{"2":{"34":1}}],["默认为",{"2":{"34":1}}],["默认不间隔",{"2":{"34":1}}],["默认关闭",{"2":{"5":1}}],["单位秒",{"2":{"34":3}}],[">不为假",{"2":{"34":1}}],[">不为真",{"2":{"34":1}}],[">不相等",{"2":{"34":2}}],[">是否相等",{"2":{"34":2}}],[">与实际值",{"2":{"34":4}}],[">",{"2":{"34":7}}],[">=",{"2":{"34":3}}],["例",{"2":{"34":3}}],["例如",{"2":{"9":1,"34":1,"40":1}}],["on",{"2":{"110":1,"111":1}}],["only",{"2":{"34":1}}],["or",{"2":{"34":1,"65":1,"66":3,"67":9,"70":2,"71":2}}],["ocr",{"2":{"34":4,"79":1}}],["os",{"2":{"34":5}}],["outcome",{"2":{"6":1}}],["8",{"0":{"117":1},"2":{"34":1,"49":1,"79":1,"95":1}}],["继承了",{"2":{"112":1}}],["继承",{"2":{"33":1,"112":1}}],["用户只需要创建符合框架定义的文件命名规范脚本文件",{"2":{"121":1}}],["用户只需要关注用例",{"2":{"98":1}}],["用户可直接通过",{"2":{"85":1}}],["用于用例开发调试过程中",{"2":{"117":1}}],["用于统一存放用例步骤的操作方法",{"2":{"110":1}}],["用于统一管理命令行参数驱动用例执行",{"2":{"102":1}}],["用于虚拟环境安装",{"2":{"51":1}}],["用于属性定位相关操作",{"2":{"49":1}}],["用于保存用例标签",{"2":{"37":1}}],["用例标签管理文件",{"0":{"114":1},"2":{"108":1}}],["用例标签化管理插件",{"2":{"79":1}}],["用例示例",{"2":{"108":2}}],["用例工程配置对象继承",{"2":{"113":1}}],["用例工程配置模块建议继承",{"2":{"103":1}}],["用例工程的断言方法类",{"2":{"112":1}}],["用例工程名称",{"2":{"108":1}}],["用例工程结构",{"0":{"108":1}}],["用例工程支持一键创建",{"2":{"107":1}}],["用例工程设计",{"0":{"107":1},"1":{"108":1,"109":1,"110":1,"111":1,"112":1,"113":1,"114":1,"115":1,"116":1,"117":1}}],["用例层负责管理用例逻辑",{"2":{"111":1}}],["用例层目录",{"2":{"108":1}}],["用例层",{"0":{"111":1},"2":{"98":1}}],["用例层直接",{"2":{"98":1}}],["用例整体打包交付之后",{"2":{"96":1}}],["用例开发环境下更新版本不方便",{"2":{"95":1}}],["用例失败录屏插件",{"2":{"79":1}}],["用例文件",{"2":{"68":1}}],["用例驱动方式",{"0":{"61":1},"1":{"62":1,"63":1,"64":1,"65":1,"66":1,"67":1,"68":1}}],["用例执行所需要的资源",{"2":{"108":1}}],["用例执行完成后生成多种测试报告",{"2":{"100":1}}],["用例执行过程中动态调用",{"2":{"100":1}}],["用例执行驱动的命令",{"2":{"51":1}}],["用例执行时判断",{"2":{"39":1}}],["用例需要废弃",{"2":{"43":1}}],["用例id",{"2":{"42":1,"43":1}}],["用例脚本的",{"2":{"37":1}}],["用例中所需要的方法从",{"2":{"93":1}}],["用例中通过",{"2":{"33":1}}],["用例中使用方法",{"0":{"33":1}}],["用例基类",{"2":{"33":2,"108":1}}],["用两对大括号把函数的参数括起来",{"2":{"12":1}}],["几乎满足了所有的断言场景",{"2":{"32":1}}],["自定义执行",{"0":{"69":1},"1":{"70":1,"71":1,"72":1,"73":1}}],["自定义条件判断跳过的函数写在此文件中",{"2":{"41":1}}],["自定义跳过",{"0":{"41":1}}],["自定义断言类",{"2":{"34":1}}],["自带多种断言语句",{"2":{"32":1}}],["自动安装框架及改测试类型需要的插件依赖",{"2":{"105":1}}],["自动统计分析每次",{"2":{"79":1}}],["自动化插件",{"2":{"79":1}}],["自动化测试框架",{"2":{"96":1}}],["自动化测试框架操作方法封装写法",{"2":{"9":1}}],["自动化测试用例",{"0":{"89":1},"1":{"90":1,"91":1,"92":1,"93":1},"2":{"90":1}}],["自动化测试方法套件",{"0":{"80":1},"1":{"81":1,"82":1,"83":1,"84":1,"85":1,"86":1,"87":1,"88":1},"2":{"81":1}}],["自动化测试模块",{"2":{"79":1}}],["自动化测试",{"2":{"55":2}}],["自动输出的日志",{"2":{"12":1}}],["自动将函数说明打印为日志",{"2":{"11":3}}],["自动的将函数说明作为日志打印出来",{"2":{"9":1}}],["umtk",{"0":{"80":1,"88":1},"1":{"81":1,"82":1,"83":1,"84":1,"85":1,"86":1,"87":1,"88":1},"2":{"81":1,"83":1,"84":1,"85":2,"88":4,"90":1,"93":2}}],["ut001234",{"2":{"73":4}}],["utf",{"2":{"34":1}}],["ui操作远程对象",{"0":{"48":1},"1":{"49":1}}],["ui",{"2":{"46":2,"55":2,"79":1,"92":1,"108":1}}],["union",{"2":{"34":3}}],["uniontech",{"2":{"34":1}}],["usable",{"2":{"79":1}}],["usr",{"2":{"34":1}}],["user4",{"2":{"77":2,"78":2}}],["user3",{"2":{"77":2,"78":2}}],["user2",{"2":{"77":2,"78":2}}],["user1",{"2":{"77":2,"78":2}}],["user=",{"2":{"49":1}}],["user=user",{"2":{"49":1}}],["user",{"2":{"29":1,"30":1,"31":1,"49":1,"73":4}}],["username",{"2":{"27":1}}],["uos",{"0":{"80":1,"89":1},"1":{"81":1,"82":1,"83":1,"84":1,"85":1,"86":1,"87":1,"88":1,"90":1,"91":1,"92":1,"93":1},"2":{"12":1,"49":1,"81":4,"88":1,"90":3}}],["普通权限执行",{"0":{"25":1,"29":1}}],["增加了等待的日志",{"2":{"21":1}}],["优化",{"2":{"21":1}}],["可实现群控测试机执行",{"2":{"96":1}}],["可视化配置",{"0":{"119":1},"2":{"96":1}}],["可视化驱动",{"2":{"79":1}}],["可定制化依赖",{"2":{"96":1}}],["可自定义多个参数之间的连接符",{"2":{"41":1}}],["可以通过系统环境变量或修改",{"2":{"103":1}}],["可以根据测试项目类型安装对应的依赖",{"2":{"96":1}}],["可以在通过命令行快速驱动测试用例执行",{"2":{"98":1}}],["可以在无网络环境下直接运行",{"2":{"96":1}}],["可以在方法层",{"2":{"93":1}}],["可以对外开源发布",{"2":{"88":1}}],["可以调用",{"2":{"84":1}}],["可以自动安装对应的依赖集",{"2":{"57":1}}],["可以自动加载虚拟环境并驱动用例工程",{"2":{"52":1}}],["可以激活虚拟环境",{"2":{"53":1}}],["可以随意新增",{"2":{"37":1}}],["可以完全代替之前这样的写法",{"2":{"21":1}}],["可能包含多条日志信息",{"2":{"9":1}}],["group2",{"2":{"77":1,"78":1}}],["group1",{"2":{"77":1,"78":2}}],["group",{"2":{"77":1}}],["get",{"2":{"34":3}}],["getmembers",{"2":{"10":1}}],["gui",{"2":{"34":7,"49":3,"57":2,"79":1,"93":1}}],["gpl",{"2":{"34":1}}],["git",{"2":{"16":1,"19":1,"79":1,"98":1}}],["html",{"2":{"79":3}}],["http",{"2":{"55":1,"57":1}}],["htop",{"2":{"16":1,"19":1,"26":1,"30":1,"31":1}}],["h",{"2":{"50":1}}],["has",{"2":{"7":1}}],["就像写",{"2":{"16":1,"19":1}}],["就可以实现自动输出日志了",{"2":{"12":1}}],["入参",{"2":{"16":1,"19":1}}],["├──",{"2":{"15":3,"18":3,"64":4,"83":9,"92":19,"108":17}}],["框架预设一些文件接口规范",{"2":{"121":1}}],["框架的安装命令可以根据用例工程所属的测试类型",{"2":{"105":1}}],["框架的断言库",{"2":{"33":1}}],["框架可以正常运行",{"2":{"104":1}}],["框架底层对各功能插件提供",{"2":{"104":1}}],["框架总线接口",{"0":{"104":1}}],["框架提供驱动命令",{"2":{"102":1}}],["框架提供驱动执行的命令",{"2":{"98":1}}],["框架驱动命令传递命令行参数给执行管理器",{"2":{"100":1}}],["框架也提供初始化用例工程的功能",{"2":{"98":1}}],["框架源代码不直接呈现在用户面前",{"2":{"98":1}}],["框架代码及插件库以",{"2":{"98":1}}],["框架层提供总线服务",{"2":{"98":1}}],["框架和插件库独立维护更新",{"2":{"96":1}}],["框架而独立使用",{"2":{"88":1}}],["框架自动加载并执行对应标签的用例",{"2":{"73":1}}],["框架会在用例执行之前执行",{"2":{"16":1,"19":1}}],["框架会在用例执行之前自动加载并执行",{"2":{"15":1,"18":1}}],["框架支持通过",{"2":{"16":1,"19":1}}],["框架默认生成",{"2":{"0":1}}],["前置命令行入参钩子",{"0":{"16":1}}],["前置脚本钩子",{"0":{"15":1}}],["前置钩子",{"0":{"14":1},"1":{"15":1,"16":1}}],["前后钩子",{"0":{"13":1},"1":{"14":1,"15":1,"16":1,"17":1,"18":1,"19":1}}],["这些元素操作方法可以用于自动化用例调用",{"2":{"81":1}}],["这个命令可以在系统原生环境中使用",{"2":{"51":1}}],["这样在用例中能够使用统一的断言语句",{"2":{"112":1}}],["这样在日志输出的时候就能把调用函数时参数的值输出出来",{"2":{"12":1}}],["这样这条用例即使同时标记了",{"2":{"42":1}}],["这种方式需要修改用例代码",{"2":{"38":1}}],["这就是我们参考django",{"2":{"12":1}}],["job",{"2":{"15":2,"16":3,"18":2,"19":3,"73":4}}],["jinja2",{"2":{"12":1}}],["json",{"0":{"0":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1},"2":{"0":3,"2":1,"3":1,"4":1,"6":1,"7":1}}],["和上面逻辑相反",{"2":{"40":1}}],["和",{"0":{"88":1},"2":{"12":1,"42":2,"78":1,"88":2,"90":1,"95":1}}],["没错",{"2":{"12":1}}],["函数名等等都可以做为关键词",{"2":{"65":1}}],["函数名",{"2":{"40":1}}],["函数功能说明中",{"2":{"12":1}}],["函数说明以及函数操作日志",{"2":{"9":1}}],["细心的同学可能还发现了一个小细节",{"2":{"12":1}}],["展示在",{"2":{"12":1}}],["静态方法",{"2":{"12":1}}],["包的形式提供框架能力",{"2":{"96":1}}],["包含",{"2":{"78":1}}],["包含静态方法",{"2":{"10":1}}],["包括实例方法",{"2":{"12":1}}],["之后",{"2":{"12":1,"50":1,"51":1}}],["|",{"2":{"12":2}}],["md",{"2":{"83":1,"92":1}}],["movie",{"2":{"83":1}}],["mousekey",{"2":{"79":1}}],["mode",{"2":{"34":6}}],["music",{"2":{"65":5,"68":6,"83":3}}],["multiple=multiple",{"2":{"12":1,"34":2}}],["multiple=false",{"2":{"12":1}}],["multiple",{"2":{"12":1,"34":2}}],["my",{"2":{"33":1,"45":2,"53":1,"58":2,"64":1,"108":2,"110":1,"111":1}}],["mycasemethod",{"2":{"110":1,"111":2}}],["mycase",{"2":{"33":1,"64":2,"108":3,"111":2,"112":2}}],["maintainer",{"2":{"86":1}}],["main",{"2":{"49":1}}],["manage",{"2":{"42":1,"79":1,"110":1,"111":1}}],["manager",{"2":{"34":1,"49":2,"83":2,"84":2,"85":1,"92":2,"93":1,"111":1}}],["mark",{"2":{"38":1,"66":1,"79":1}}],["max",{"2":{"34":7}}],["match",{"2":{"34":11}}],["machine",{"2":{"27":1}}],["map",{"2":{"12":1}}],["mips64",{"2":{"21":1}}],["method",{"2":{"11":1,"12":3,"15":1,"18":1,"33":4,"81":1,"83":4,"92":5,"93":1,"108":4,"110":3,"111":2,"112":4}}],["metadata",{"2":{"3":1,"6":1}}],["message",{"2":{"7":1}}],["注意",{"2":{"12":1,"57":1,"65":1,"67":1,"68":1}}],["num",{"2":{"79":1}}],["number=max",{"2":{"34":2}}],["number=match",{"2":{"34":2}}],["number",{"2":{"34":9}}],["network",{"2":{"34":9}}],["not",{"2":{"34":13,"40":2,"65":1,"66":1}}],["none",{"2":{"34":26}}],["nodeid",{"2":{"6":1,"7":1}}],["n",{"2":{"27":1}}],["name",{"2":{"11":3,"40":3,"49":1,"79":1}}],["==",{"2":{"34":5,"49":1}}],["=",{"2":{"11":4,"12":1,"21":5,"34":36,"49":2}}],["终端输出的日志级别",{"2":{"11":1}}],["动态等待",{"0":{"20":1},"1":{"21":1,"22":1}}],["动态添加日志装饰器",{"2":{"10":1}}],["动态给该类下所有的函数及父类函数添加日志装饰器",{"2":{"10":1}}],["给符合条件的函数",{"2":{"10":1}}],["实际结果",{"2":{"34":2}}],["实例",{"2":{"12":1}}],["实例方法",{"2":{"10":1}}],["实现插件依赖的定制化",{"2":{"98":1}}],["实现步骤",{"2":{"10":1}}],["实现原理",{"0":{"10":1}}],["类似于单元测试",{"2":{"87":1}}],["类名",{"2":{"65":1}}],["类",{"2":{"10":1}}],["类方法",{"2":{"10":1,"12":1}}],["类里面一个函数只包含一个操作或多次调用的一系列可合并的操作",{"2":{"9":1}}],["在浏览器中输入一些配置后即可驱动测试用例执行",{"2":{"96":1}}],["在继承",{"2":{"96":1}}],["在现有框架下",{"2":{"95":1}}],["在公司的多个自动化流程中运行得很好",{"2":{"95":1}}],["在公司内部已经被大量的自动化测试项目使用",{"2":{"95":1}}],["在操作方法多了之后",{"2":{"87":1}}],["在同一个大版本中",{"2":{"85":1}}],["在不同的代码仓库中",{"2":{"85":1}}],["在根目录下定义",{"2":{"70":1,"71":1}}],["在服务端通过调用",{"2":{"46":1}}],["在远程测试机上部署一个完整的",{"2":{"46":1}}],["在用例执行过程中控制远程机器执行复杂的",{"2":{"46":1}}],["在用例收集阶段会以第一个",{"2":{"41":1}}],["在用例工程根目录下存放",{"2":{"41":1}}],["在用例工程目录下存放一个",{"2":{"15":1,"18":1}}],["在用例工程目录下生成报告文件",{"2":{"0":1}}],["在子项目目录下新建",{"2":{"37":1}}],["在",{"2":{"36":1,"38":1,"40":1,"41":1,"114":1}}],["在一段时间内截图多张图片进行识别",{"2":{"34":1}}],["在报告中更能一目了然的看到用例执行步骤",{"2":{"12":1}}],["在屏幕中相似度大于",{"2":{"12":2}}],["在应用库",{"2":{"12":1}}],["在此装饰器中我们能动态的捕获所调用函数的功能说明",{"2":{"10":1}}],["核心原理",{"2":{"10":1}}],["的路径",{"2":{"113":1}}],["的思路",{"2":{"110":1}}],["的框架下进行开发的",{"2":{"88":1}}],["的公共方法库",{"0":{"88":1},"2":{"88":1}}],["的用例",{"2":{"42":1}}],["的脚本",{"2":{"15":1,"18":1}}],["的模板语法设计出的日志模板语法",{"2":{"12":1}}],["的坐标",{"2":{"12":2}}],["的",{"2":{"11":1,"79":1,"112":1}}],["的方式",{"2":{"10":1,"12":1}}],["的日志系统",{"2":{"9":1}}],["的想法",{"2":{"9":1}}],["我们可以将界面分为四个区域",{"2":{"110":1}}],["我们想要设计开发一个更加简单易用",{"2":{"95":1}}],["我们需要建立对套件的自动化测试",{"2":{"87":1}}],["我们设计出了",{"2":{"9":1}}],["我们发现",{"2":{"9":1}}],["天真",{"2":{"9":1}}],["那真是妙啊~",{"2":{"9":1}}],["从任务栏启动文件管理器",{"2":{"111":1}}],["从而驱动测试用例执行",{"2":{"102":1}}],["从而减少大量日志代码量和重复编写",{"2":{"9":1}}],["从开源至今发布了",{"2":{"95":1}}],["从pms测试单中爬取用例集",{"2":{"73":1}}],["从第",{"2":{"37":1}}],["从上面的例子也可以看出来",{"2":{"9":1}}],["具有较高的重复度",{"2":{"9":1}}],["通过配置的接口进行数据回填",{"2":{"100":1}}],["通过命令行参数控制",{"2":{"98":1}}],["通过获取该函数返回的布尔值",{"2":{"41":1}}],["通过ocr识别到不应存在的文案",{"2":{"34":2}}],["通过ocr未识别到",{"2":{"34":3}}],["通过观察前面的例子",{"2":{"12":1}}],["通过",{"2":{"10":2}}],["通过日志输出器将其输出即可",{"2":{"10":1}}],["通过给类加上一个装饰器",{"2":{"10":1}}],["通过经验观察",{"2":{"9":1}}],["通常是这样的",{"2":{"9":1}}],["省略代码部分",{"2":{"9":1}}],["l1",{"2":{"66":3}}],["lang",{"2":{"34":1}}],["lang=lang",{"2":{"34":2}}],["lang=",{"2":{"34":2}}],["lambda",{"2":{"12":1,"34":2}}],["leftmethod",{"2":{"110":1}}],["len",{"2":{"34":4}}],["level",{"2":{"11":1}}],["list",{"2":{"34":1}}],["license",{"2":{"34":1,"83":1,"92":1}}],["lineno",{"2":{"6":1}}],["linuxdeepin",{"2":{"95":1}}],["linux",{"2":{"3":1,"55":3,"57":1,"79":1,"96":1}}],["ltd",{"2":{"34":1}}],["l",{"2":{"27":1,"29":1}}],["ls",{"2":{"25":1,"27":1,"29":1}}],["loogarch64",{"2":{"40":2}}],["loongarch64",{"2":{"21":1}}],["lower",{"2":{"34":1}}],["log",{"2":{"10":1,"11":1,"12":5,"34":2}}],["logger",{"2":{"9":1,"12":1,"34":12}}],["点击某个元素",{"2":{"9":2,"12":1}}],["dragon",{"2":{"79":1}}],["driver",{"2":{"73":5,"79":1,"102":2}}],["d",{"2":{"79":1}}],["dbus",{"2":{"55":1}}],["dmidecode",{"2":{"40":1}}],["dict",{"2":{"34":4}}],["ddefilemanagermethod",{"2":{"84":2,"85":1,"93":1}}],["dde",{"2":{"34":1,"49":3,"83":2,"84":2,"85":1,"92":4,"93":1,"110":1,"111":2}}],["during",{"2":{"34":2}}],["duration",{"2":{"2":1}}],["dogtail",{"2":{"49":1,"79":1,"110":3}}],["do",{"2":{"16":2,"19":2}}],["dock",{"2":{"49":1,"92":4,"110":1,"111":1}}],["doc",{"2":{"10":1}}],["dfm",{"2":{"12":2,"92":2}}],["deepin",{"2":{"83":4}}],["desc",{"2":{"79":1}}],["desktop",{"2":{"34":2}}],["debug",{"2":{"11":1,"108":1,"117":1}}],["def",{"2":{"9":1,"12":2,"33":1,"34":15,"49":2,"63":2,"111":1,"112":1}}],["需要在每个函数里面主动编写日志输出代码",{"2":{"9":1}}],["背景",{"0":{"9":1,"95":1}}],["id",{"2":{"73":5}}],["id4",{"2":{"67":3}}],["id3",{"2":{"67":3,"70":1,"71":1}}],["id2",{"2":{"67":3,"70":1,"71":1}}],["id1",{"2":{"67":3}}],["identifier",{"2":{"34":1}}],["issue",{"2":{"86":1}}],["isinstance",{"2":{"34":4}}],["is",{"2":{"34":6}}],["ifixed",{"2":{"42":2}}],["if",{"2":{"34":23,"49":1}}],["ip4",{"2":{"77":2,"78":2}}],["ip3",{"2":{"77":2,"78":2}}],["ip2",{"2":{"77":2,"78":2}}],["ip1",{"2":{"77":2,"78":2}}],["ip=",{"2":{"49":1}}],["ip=ip",{"2":{"49":1}}],["ip",{"2":{"27":1,"29":1,"30":1,"31":1,"49":1}}],["imagecenter",{"2":{"79":1}}],["image",{"2":{"12":4,"34":6,"108":1,"113":1}}],["import",{"2":{"11":1,"12":2,"21":2,"25":1,"26":1,"27":1,"29":1,"30":1,"31":1,"33":3,"34":12,"49":2,"84":1,"85":1,"93":2,"98":1,"110":2,"111":2,"112":3}}],["in",{"2":{"34":2}}],["int",{"2":{"34":18}}],["ini",{"2":{"92":2,"103":1,"108":1}}],["inix86",{"2":{"21":1}}],["init",{"2":{"7":1,"45":2,"49":1,"58":1,"64":1,"83":3,"92":4,"107":1,"108":2}}],["install",{"2":{"16":1,"19":1,"26":1,"30":1,"31":1,"57":6,"85":1}}],["inspect",{"2":{"10":1}}],["info",{"2":{"9":1,"11":2,"12":1,"34":11}}],["items",{"2":{"34":2}}],["it",{"2":{"7":1}}],["auto",{"2":{"49":3}}],["autotest",{"2":{"45":2,"58":2,"81":1}}],["amp",{"2":{"40":3,"41":5}}],["album",{"2":{"37":2}}],["all",{"2":{"34":5}}],["allure",{"2":{"12":2}}],["and",{"2":{"34":3,"65":4,"66":1}}],["any",{"2":{"34":3}}],["arrch64",{"2":{"40":1}}],["args",{"2":{"34":7}}],["arch",{"2":{"3":2}}],["actual",{"2":{"34":10}}],["as",{"2":{"34":3}}],["assertionerror",{"2":{"34":18}}],["assertmethod",{"2":{"33":5,"112":5}}],["assertx",{"2":{"33":1}}],["assert",{"2":{"33":6,"34":18,"92":1,"108":2,"111":1,"112":9,"113":1}}],["abspath=config",{"2":{"49":1}}],["abspath=pic",{"2":{"34":2}}],["abspath=picture",{"2":{"34":2}}],["abspath=none",{"2":{"34":2}}],["abspath",{"2":{"34":9,"49":1}}],["aarch64",{"2":{"21":1,"40":4,"41":1}}],["apt",{"2":{"16":1,"19":1,"26":1,"30":1,"31":1}}],["app",{"2":{"12":5,"33":1,"34":10,"64":1}}],["appmethod",{"2":{"9":1,"12":2}}],["attr",{"2":{"9":1,"12":1,"34":2,"49":3}}],["a",{"2":{"7":1}}],["button",{"2":{"79":1}}],["bus",{"2":{"79":1}}],["btn",{"2":{"49":1,"110":1}}],["bool",{"2":{"34":4}}],["bin",{"2":{"34":1}}],["basemethod",{"2":{"110":2}}],["base",{"2":{"33":1,"64":1,"92":2,"108":2,"110":1,"111":1,"112":2}}],["basecase",{"2":{"33":3,"111":2,"112":5}}],["bashpip",{"2":{"57":5}}],["bashpython3",{"2":{"42":1}}],["bash$",{"2":{"53":1,"60":2,"62":2,"63":4,"64":2,"65":2,"66":2,"67":2,"68":6,"75":3,"78":2}}],["bash",{"2":{"47":1}}],["bashcd",{"2":{"45":1,"58":1}}],["bashmkdir",{"2":{"45":1,"58":1}}],["bashmy",{"2":{"15":1,"18":1}}],["bashyouqu3",{"2":{"16":2,"19":2,"47":1,"50":2,"51":1,"52":1,"73":2}}],["bash>>",{"2":{"12":1}}],["bar",{"2":{"3":1,"6":1}}],["by",{"2":{"9":1,"12":1,"34":6,"49":3}}],["because",{"2":{"7":1}}],["警告信息",{"2":{"7":1}}],["收集器节点的列表",{"2":{"5":1}}],["smoke",{"2":{"64":4,"66":2}}],["slaves",{"2":{"47":3}}],["slaves对象提供远程机器信息",{"0":{"47":1}}],["sleep",{"2":{"21":3}}],["systemctl",{"2":{"75":1}}],["system",{"2":{"40":1}}],["s",{"2":{"40":1}}],["skipif",{"2":{"40":8,"41":6}}],["skiped",{"2":{"39":1}}],["skip",{"2":{"36":1,"38":1,"39":2,"42":3,"43":1}}],["skipped",{"2":{"4":1}}],["similarity=similarity",{"2":{"34":2}}],["similarity=0",{"2":{"34":2}}],["similarity",{"2":{"34":1}}],["screen",{"2":{"34":8}}],["software",{"2":{"34":1}}],["spdx",{"2":{"34":2}}],["ssh",{"2":{"27":1,"75":3}}],["sw64",{"2":{"40":4}}],["sw",{"2":{"21":1}}],["sudo权限执行",{"0":{"26":1,"30":1}}],["sudo",{"2":{"16":1,"19":1,"26":1,"30":1,"31":1,"40":1,"75":1}}],["summary",{"0":{"4":1},"2":{"2":2}}],["shell$",{"2":{"107":1}}],["shellpip",{"2":{"85":1}}],["shelluos",{"2":{"83":1,"92":1}}],["shellautotest",{"2":{"64":1,"108":1}}],["shell",{"0":{"53":1},"2":{"16":1,"19":1,"51":1,"53":2}}],["str",{"2":{"34":6}}],["step",{"2":{"12":1}}],["static",{"2":{"108":1,"113":1}}],["staticmethod",{"2":{"34":14}}],["status",{"2":{"34":2,"111":1}}],["start",{"2":{"15":2,"16":3,"18":1,"73":2}}],["startswith",{"2":{"11":1}}],["stage",{"2":{"6":3}}],["send2pms",{"2":{"73":2}}],["secret",{"2":{"27":1}}],["setting",{"2":{"11":5,"34":6,"103":2}}],["setattr",{"2":{"10":1}}],["setup",{"2":{"6":1}}],["self",{"2":{"9":1,"12":1,"33":3,"49":4,"63":2,"110":1,"111":2,"112":1}}],["false",{"2":{"34":11,"41":2}}],["fail",{"2":{"6":2}}],["failed",{"2":{"4":1,"6":1}}],["float",{"2":{"34":13}}],["fixture",{"2":{"108":1}}],["fixed",{"2":{"36":1,"42":3,"43":1}}],["filter",{"2":{"34":2}}],["file",{"2":{"34":14,"49":2,"83":2,"84":2,"85":1,"92":2,"93":1,"110":1,"111":2}}],["filecopyrighttext",{"2":{"34":1}}],["first=return",{"2":{"34":2}}],["first=false",{"2":{"34":2}}],["first",{"2":{"34":3}}],["find",{"2":{"12":4,"34":6}}],["f",{"2":{"12":1,"34":34,"68":6}}],["from",{"2":{"12":2,"33":3,"34":14,"49":2,"93":1,"110":2,"111":2,"112":3}}],["funnylog2",{"2":{"79":1}}],["funnylog",{"2":{"11":1}}],["func",{"2":{"10":1}}],["foo0",{"2":{"6":1}}],["foo",{"2":{"3":1,"6":3,"7":2}}],["汇总信息",{"2":{"4":1}}],["2024",{"2":{"95":1}}],["2021",{"2":{"95":1}}],["2023",{"2":{"34":1,"95":1}}],["28",{"2":{"12":1}}],["22",{"2":{"3":1}}],["2",{"0":{"40":1,"82":1,"83":1,"84":2,"91":1,"92":1,"93":2,"96":1,"99":1,"103":1,"109":1,"110":1,"111":2,"112":1,"113":1,"114":1,"115":1,"116":1,"117":1},"1":{"83":1,"84":1,"92":1,"93":1,"110":1,"111":1,"112":1,"113":1,"114":1,"115":1,"116":1,"117":1,"119":1,"120":1,"121":1},"2":{"3":1,"4":2,"21":3,"34":1,"37":1,"47":2,"63":1,"77":1,"78":2,"79":1,"95":2,"108":1}}],["55",{"2":{"49":1}}],["50",{"2":{"6":1,"78":1}}],["5",{"0":{"87":1,"106":1,"114":1,"118":1},"1":{"119":1,"120":1,"121":1},"2":{"3":2,"21":3,"79":1,"95":1}}],["56",{"2":{"3":1}}],["wdotool",{"2":{"79":1}}],["w5821",{"2":{"40":1}}],["widget",{"2":{"34":18,"49":1}}],["with",{"2":{"3":1}}],["web",{"2":{"55":1,"79":2,"119":1}}],["webassert",{"2":{"33":2}}],["webui",{"2":{"33":1,"57":2}}],["wayland",{"2":{"40":1,"41":1,"79":1}}],["want",{"2":{"16":1,"19":1}}],["warnings",{"0":{"7":1},"2":{"2":2}}],["what",{"2":{"16":1,"19":1}}],["x11",{"2":{"40":1}}],["xdg",{"2":{"40":1,"41":1}}],["xdist",{"2":{"3":1}}],["x3c",{"2":{"34":17}}],["x",{"2":{"12":2,"34":4}}],["xxx",{"2":{"9":1,"11":3,"12":1,"33":1,"36":3,"39":1,"42":2,"63":7}}],["xxxx",{"2":{"0":1,"73":4}}],["xpassed",{"2":{"4":1}}],["xfailed",{"2":{"4":1}}],["x86",{"2":{"3":1,"12":1,"40":2}}],["9",{"2":{"3":1,"12":2,"79":1}}],["7",{"0":{"116":1},"2":{"49":1,"79":1}}],["78",{"2":{"3":1}}],["7981803",{"2":{"2":1}}],["40",{"2":{"34":6}}],["47",{"2":{"12":1}}],["48",{"2":{"12":1}}],["4",{"0":{"86":1,"101":1,"102":1,"103":1,"104":1,"105":2,"106":1,"107":1,"108":1,"109":1,"110":1,"111":1,"112":1,"113":2,"114":1,"115":1,"116":1,"117":1},"1":{"102":1,"103":1,"104":1,"105":1,"106":1,"108":1,"109":1,"110":2,"111":2,"112":2,"113":2,"114":2,"115":2,"116":2,"117":2,"119":1,"120":1,"121":1},"2":{"3":3,"79":1}}],["679537",{"2":{"39":1,"42":1,"43":1}}],["64",{"2":{"3":1,"12":1,"21":2,"40":2}}],["6",{"0":{"88":1,"115":1},"2":{"3":2,"12":1,"34":2,"79":1}}],["3",{"0":{"41":1,"85":1,"97":1,"98":1,"99":1,"100":2,"101":1,"102":1,"103":1,"104":2,"105":1,"106":1,"112":1},"1":{"98":1,"99":1,"100":1,"101":1,"102":2,"103":2,"104":2,"105":2,"106":2},"2":{"3":2,"4":1,"79":1}}],["public",{"0":{"88":1},"2":{"88":4}}],["pr",{"2":{"86":2}}],["project",{"2":{"49":2}}],["product",{"2":{"40":1}}],["process",{"2":{"34":4,"111":1}}],["pdocr",{"2":{"79":1}}],["pms",{"2":{"73":14,"79":2}}],["pms用例驱动",{"0":{"73":1}}],["pip",{"2":{"57":1,"85":1}}],["picture",{"2":{"34":13}}],["pic",{"2":{"12":1,"34":14}}],["popmethod",{"2":{"110":1}}],["po",{"2":{"45":1,"84":1,"98":1,"110":1}}],["png",{"2":{"12":2,"34":4}}],["playwright",{"2":{"79":2}}],["platform",{"2":{"3":1,"40":5,"41":1}}],["plugins",{"2":{"3":1}}],["pluggy",{"2":{"3":1}}],["pypi",{"2":{"85":1}}],["pydbussend",{"2":{"79":1}}],["pylinuxauto",{"2":{"34":14,"79":1,"93":1}}],["py",{"2":{"3":1,"6":2,"7":2,"12":2,"15":2,"16":1,"18":2,"19":1,"33":3,"37":2,"41":2,"42":1,"49":1,"63":2,"64":4,"65":2,"68":6,"83":6,"92":12,"108":11,"110":1,"111":1,"112":4}}],["pytest",{"2":{"3":1,"38":1,"66":2,"79":3,"92":1}}],["python3",{"2":{"16":1,"19":1,"34":1}}],["pythondfmwidget",{"2":{"12":1}}],["pythonfrom",{"2":{"11":1,"21":2,"25":1,"26":1,"27":1,"29":1,"30":1,"31":1,"84":1,"85":1,"93":1}}],["pythonclass",{"2":{"9":1,"33":1}}],["python",{"2":{"3":1,"12":2,"33":2,"34":1,"49":1,"63":1,"96":1,"98":1,"110":1,"111":1,"112":3}}],["pause=pause",{"2":{"34":4}}],["pause",{"2":{"34":8}}],["pass",{"2":{"34":4}}],["password=",{"2":{"49":1}}],["password=password",{"2":{"49":1}}],["password2",{"2":{"47":1}}],["password1",{"2":{"47":2}}],["password",{"2":{"27":1,"29":1,"30":1,"31":1,"49":1,"73":4}}],["passed",{"2":{"4":1}}],["param",{"2":{"12":2,"34":32}}],["packages",{"2":{"3":1}}],["path",{"2":{"2":1,"7":2,"12":1,"34":17,"49":1}}],["cd",{"2":{"96":1}}],["ci",{"2":{"96":1}}],["center",{"2":{"79":1}}],["c",{"2":{"78":2}}],["cpu",{"2":{"40":3}}],["csv文件",{"2":{"37":1}}],["csv文件与脚本对应关系",{"0":{"37":1}}],["csv",{"2":{"36":1,"37":6,"38":2,"39":1,"40":1,"44":1,"66":1,"92":2,"108":1,"114":2}}],["ch",{"2":{"34":2}}],["cmd",{"2":{"25":3,"26":3,"27":3,"29":1,"30":1,"31":1,"34":4}}],["cli",{"2":{"95":1}}],["click",{"2":{"9":1,"12":1,"49":3,"110":2,"111":1}}],["clone",{"2":{"16":1,"19":1}}],["cls",{"2":{"12":2,"34":1}}],["classmethod",{"2":{"12":1,"34":1}}],["class",{"2":{"7":1,"11":3,"12":2,"33":2,"34":1,"49":1,"63":1,"110":1,"111":1,"112":3}}],["cargo",{"0":{"52":1},"2":{"51":1,"52":2,"60":1,"62":1,"63":2,"64":1,"65":1,"66":1,"67":1,"68":3,"73":1,"75":1,"78":1}}],["cache",{"2":{"34":5}}],["case",{"2":{"15":2,"18":2,"33":2,"64":2,"65":1,"68":8,"92":3,"93":1,"108":4,"110":1,"111":3,"112":3}}],["cannot",{"2":{"7":1}}],["call",{"2":{"6":1}}],["c1",{"2":{"7":1}}],["commit",{"2":{"79":2}}],["count",{"2":{"34":1}}],["co",{"2":{"34":1}}],["coding",{"2":{"34":1}}],["code",{"2":{"7":1}}],["contain",{"2":{"11":1}}],["conftest",{"2":{"108":1}}],["config",{"2":{"12":1,"49":2,"92":1,"108":1}}],["conf",{"2":{"11":1}}],["constructor",{"2":{"7":1}}],["collect",{"2":{"7":1}}],["collected",{"2":{"4":1}}],["collectors",{"0":{"5":1},"2":{"2":2}}],["created",{"2":{"2":1}}],["equal",{"2":{"34":2}}],["ele",{"2":{"110":1}}],["elementnotfound",{"2":{"34":1}}],["element",{"2":{"12":2,"34":8,"49":1}}],["elements",{"2":{"12":5}}],["elif",{"2":{"34":4}}],["else",{"2":{"34":8}}],["events=",{"2":{"27":1}}],["expr",{"2":{"34":10}}],["expanduser",{"2":{"34":2}}],["expect",{"2":{"27":1,"31":1,"34":18}}],["expect交互",{"0":{"27":1,"31":1}}],["excel",{"2":{"44":1}}],["except",{"2":{"34":5}}],["exceptions",{"2":{"34":10}}],["exc",{"2":{"34":6}}],["exists",{"2":{"34":2}}],["exist",{"2":{"34":11}}],["exitcode",{"2":{"2":1}}],["envx",{"2":{"51":2}}],["env",{"2":{"34":1,"92":1,"108":1}}],["environment",{"0":{"3":1},"2":{"2":2}}],["end",{"2":{"18":1,"19":3,"73":2}}],["endswith",{"2":{"11":1}}],["error",{"2":{"4":1,"11":1}}],["titlemethod",{"2":{"110":1}}],["timeout=timeout",{"2":{"34":4}}],["timeout",{"2":{"34":5}}],["time",{"2":{"21":1,"34":4}}],["task",{"2":{"73":4}}],["tags",{"0":{"70":1},"2":{"37":1,"69":1,"70":2,"73":2}}],["t",{"2":{"66":2,"67":2}}],["type",{"2":{"40":1,"41":1}}],["typing",{"2":{"34":1}}],["txtid1",{"2":{"70":1,"71":1}}],["txt",{"0":{"70":1,"71":1},"2":{"34":3,"69":3,"70":2,"71":2,"73":2,"77":1,"92":1,"108":1}}],["transfer",{"2":{"79":1}}],["trace",{"2":{"10":2}}],["true",{"2":{"34":4,"41":2,"111":1}}],["try",{"2":{"34":4}}],["tuple",{"2":{"12":1,"34":2}}],["templateelementfound",{"2":{"34":3}}],["templateelementnotfound",{"2":{"34":5}}],["technology",{"2":{"34":1}}],["teardown",{"2":{"6":1}}],["testmusic",{"2":{"65":1}}],["testmycase",{"2":{"33":1,"111":1}}],["testcase",{"2":{"63":1,"112":1}}],["testfoo",{"2":{"7":2}}],["test",{"2":{"6":8,"7":3,"33":1,"37":2,"63":7,"64":2,"65":2,"68":6,"92":2,"108":2,"111":2,"112":2}}],["tests",{"0":{"6":1},"2":{"2":3,"7":1,"83":1}}],["toolkit",{"2":{"81":1,"83":1}}],["todo",{"2":{"31":1}}],["total",{"2":{"4":1}}],["to",{"2":{"2":1,"7":1}}],["rightmethod",{"2":{"110":1}}],["rm",{"0":{"54":1},"2":{"51":1,"54":1}}],["rpcgui",{"0":{"49":1},"2":{"49":2}}],["rpc",{"2":{"46":2,"49":1,"79":6}}],["raise",{"2":{"34":19}}],["rate=rate",{"2":{"34":2}}],["rate=0",{"2":{"12":1}}],["rate",{"2":{"12":1,"34":7}}],["run",{"2":{"16":2,"19":2,"25":1,"26":1,"27":1,"29":1,"30":1,"31":1,"42":1,"47":1,"50":1,"52":1,"53":1,"60":3,"62":2,"63":4,"64":2,"65":2,"66":2,"67":2,"68":6,"73":2}}],["requirements",{"2":{"92":1,"108":1}}],["readme",{"2":{"83":1,"92":1}}],["record",{"2":{"79":1}}],["recursive",{"2":{"34":1}}],["removed",{"2":{"36":1,"43":2}}],["remotemethod",{"2":{"49":2}}],["remote",{"2":{"29":1,"30":1,"31":1,"49":1,"57":1,"75":3,"78":2}}],["remotecmd",{"2":{"29":2,"30":2,"31":2}}],["retry=network",{"2":{"34":4}}],["retry",{"2":{"34":9}}],["return",{"2":{"12":2,"34":6}}],["restart",{"2":{"49":2,"75":1}}],["restart=false",{"2":{"49":1}}],["res",{"2":{"12":1,"34":21,"108":3,"113":3}}],["report",{"2":{"0":2,"79":1}}],["rootdir",{"2":{"49":1}}],["root",{"2":{"2":1,"47":3}}],["18",{"2":{"79":1}}],["16",{"2":{"79":1}}],["168",{"2":{"47":3}}],["15",{"2":{"79":1}}],["1518371686",{"2":{"2":1}}],["14",{"2":{"79":1}}],["13",{"2":{"79":1}}],["12",{"2":{"79":1}}],["123456",{"2":{"73":4}}],["1235666275024414",{"2":{"2":1}}],["11",{"2":{"79":1}}],["192",{"2":{"47":3}}],["17",{"2":{"12":1,"79":1}}],["1071",{"2":{"85":1}}],["1070",{"2":{"85":1}}],["100",{"2":{"78":3}}],["10",{"2":{"4":2,"49":1,"79":1}}],["1",{"0":{"39":1,"81":1,"83":1,"90":1,"92":1,"95":1,"98":1,"102":1,"108":1,"110":1},"2":{"2":1,"3":4,"4":3,"21":3,"34":7,"37":1,"47":5,"49":1,"63":3,"79":1,"95":1,"108":1}}],["002",{"2":{"64":1,"68":2,"108":1}}],["001",{"2":{"12":2,"33":2,"36":1,"37":2,"40":1,"63":7,"64":1,"65":5,"68":4,"92":2,"108":1,"111":2,"112":2}}],["02",{"2":{"12":1}}],["0",{"2":{"2":1,"3":4,"12":1,"34":1,"95":2}}],["报告中",{"2":{"12":1}}],["报告内容",{"0":{"1":1},"1":{"2":1,"3":1,"4":1,"5":1,"6":1,"7":1}}],["报告",{"0":{"0":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1},"2":{"0":1}}]],"serializationVersion":2}';export{t as default}; diff --git a/assets/chunks/@localSearchIndexroot.BXd6ZsaL.js b/assets/chunks/@localSearchIndexroot.BXd6ZsaL.js deleted file mode 100644 index 843e073..0000000 --- a/assets/chunks/@localSearchIndexroot.BXd6ZsaL.js +++ /dev/null @@ -1 +0,0 @@ -const t='{"documentCount":141,"nextId":141,"documentIds":{"0":"/youqu3/指南/与生俱来/JSON报告.html#json-报告","1":"/youqu3/指南/与生俱来/JSON报告.html#报告内容","2":"/youqu3/指南/与生俱来/JSON报告.html#整体结构","3":"/youqu3/指南/与生俱来/JSON报告.html#environment","4":"/youqu3/指南/与生俱来/JSON报告.html#summary","5":"/youqu3/指南/与生俱来/JSON报告.html#collectors","6":"/youqu3/指南/与生俱来/JSON报告.html#tests","7":"/youqu3/指南/与生俱来/JSON报告.html#warnings","8":"/youqu3/指南/与生俱来/全自动日志.html#全自动日志","9":"/youqu3/指南/与生俱来/全自动日志.html#背景","10":"/youqu3/指南/与生俱来/全自动日志.html#实现原理","11":"/youqu3/指南/与生俱来/全自动日志.html#日志配置","12":"/youqu3/指南/与生俱来/全自动日志.html#使用方法","13":"/youqu3/指南/与生俱来/前后钩子.html#前后钩子","14":"/youqu3/指南/与生俱来/前后钩子.html#前置钩子","15":"/youqu3/指南/与生俱来/前后钩子.html#前置脚本钩子","16":"/youqu3/指南/与生俱来/前后钩子.html#前置命令行入参钩子","17":"/youqu3/指南/与生俱来/前后钩子.html#后置钩子","18":"/youqu3/指南/与生俱来/前后钩子.html#后置脚本钩子","19":"/youqu3/指南/与生俱来/前后钩子.html#后置命令行入参钩子","20":"/youqu3/指南/与生俱来/动态等待.html#动态等待","21":"/youqu3/指南/与生俱来/动态等待.html#架构动态等待","22":"/youqu3/指南/与生俱来/动态等待.html#元素识别动态等待","23":"/youqu3/指南/与生俱来/命令行交互.html#命令行交互","24":"/youqu3/指南/与生俱来/命令行交互.html#本机命令行交互","25":"/youqu3/指南/与生俱来/命令行交互.html#普通权限执行","26":"/youqu3/指南/与生俱来/命令行交互.html#sudo权限执行","27":"/youqu3/指南/与生俱来/命令行交互.html#expect交互","28":"/youqu3/指南/与生俱来/命令行交互.html#远程命令行交互","29":"/youqu3/指南/与生俱来/命令行交互.html#普通权限执行-1","30":"/youqu3/指南/与生俱来/命令行交互.html#sudo权限执行-1","31":"/youqu3/指南/与生俱来/命令行交互.html#expect交互-1","32":"/youqu3/指南/与生俱来/断言语句.html#断言语句","33":"/youqu3/指南/与生俱来/断言语句.html#用例中使用方法","34":"/youqu3/指南/与生俱来/断言语句.html#方法明细","35":"/youqu3/指南/与生俱来/标签化管理.html#标签化管理","36":"/youqu3/指南/与生俱来/标签化管理.html#使用说明","37":"/youqu3/指南/与生俱来/标签化管理.html#csv文件与脚本对应关系","38":"/youqu3/指南/与生俱来/标签化管理.html#跳过用例","39":"/youqu3/指南/与生俱来/标签化管理.html#_1-固定跳过","40":"/youqu3/指南/与生俱来/标签化管理.html#_2-条件判断跳过","41":"/youqu3/指南/与生俱来/标签化管理.html#_3-自定义跳过","42":"/youqu3/指南/与生俱来/标签化管理.html#确认修复","43":"/youqu3/指南/与生俱来/标签化管理.html#废弃用例","44":"/youqu3/指南/与生俱来/标签化管理.html#文件格式","45":"/youqu3/指南/与生俱来/脚手架工具.html#脚手架工具","46":"/youqu3/指南/与生俱来/远程交互控制.html#远程交互式控制","47":"/youqu3/指南/与生俱来/远程交互控制.html#slaves对象提供远程机器信息","48":"/youqu3/指南/与生俱来/远程交互控制.html#ui操作远程对象","49":"/youqu3/指南/与生俱来/远程交互控制.html#rpcgui","50":"/youqu3/指南/环境管理/原生环境.html#原生环境","51":"/youqu3/指南/环境管理/虚拟环境.html#虚拟环境","52":"/youqu3/指南/环境管理/虚拟环境.html#youqu3-cargo","53":"/youqu3/指南/环境管理/虚拟环境.html#youqu3-shell","54":"/youqu3/指南/环境管理/虚拟环境.html#youqu3-rm","55":"/youqu3/指南/简介/YouQu3是什么.html#youqu3-能做什么","56":"/youqu3/指南/简介/快速开始.html#快速开始","57":"/youqu3/指南/简介/快速开始.html#安装","58":"/youqu3/指南/简介/快速开始.html#创建用例工程","59":"/youqu3/指南/驱动执行/本地执行.html#本地执行","60":"/youqu3/指南/驱动执行/本地执行.html#子命令","61":"/youqu3/指南/驱动执行/本地执行.html#用例驱动方式","62":"/youqu3/指南/驱动执行/本地执行.html#执行所有用例","63":"/youqu3/指南/驱动执行/本地执行.html#指定执行某一个用例","64":"/youqu3/指南/驱动执行/本地执行.html#指定某个目录执行","65":"/youqu3/指南/驱动执行/本地执行.html#根据关键词执行","66":"/youqu3/指南/驱动执行/本地执行.html#根据标签执行","67":"/youqu3/指南/驱动执行/本地执行.html#批量用例id驱动执行","68":"/youqu3/指南/驱动执行/本地执行.html#指定用例文件路径执行","69":"/youqu3/指南/驱动执行/自定义执行.html#自定义执行","70":"/youqu3/指南/驱动执行/自定义执行.html#youqu-tags-txt","71":"/youqu3/指南/驱动执行/自定义执行.html#youqu-keywords-txt","72":"/youqu3/指南/驱动执行/自定义执行.html#案例","73":"/youqu3/指南/驱动执行/自定义执行.html#pms用例驱动","74":"/youqu3/指南/驱动执行/远程执行.html#远程执行","75":"/youqu3/指南/驱动执行/远程执行.html#子命令","76":"/youqu3/指南/驱动执行/远程执行.html#远程测试机分组策略","77":"/youqu3/指南/驱动执行/远程执行.html#分组规则","78":"/youqu3/指南/驱动执行/远程执行.html#执行策略","79":"/youqu3/插件/OCR识别.html#pdocr-rpc","80":"/youqu3/插件/OCR识别.html#_1、服务端","81":"/youqu3/插件/OCR识别.html#服务端安装","82":"/youqu3/插件/OCR识别.html#服务端启动服务","83":"/youqu3/插件/OCR识别.html#_2、客户端","84":"/youqu3/插件/OCR识别.html#客户端安装","85":"/youqu3/插件/OCR识别.html#客户端使用","86":"/youqu3/插件/OCR识别.html#_2-1、识别当前屏幕的所有文字内容","87":"/youqu3/插件/OCR识别.html#_2-2、指定某张图片识别的所有文字内容","88":"/youqu3/插件/OCR识别.html#_2-3、在全屏指定查找某个字符串的坐标","89":"/youqu3/插件/OCR识别.html#_2-4、指定某张图片查找某个字符串的坐标","90":"/youqu3/插件/OCR识别.html#_2-5、其他参数","91":"/youqu3/插件/全自动日志.html#funnylog","92":"/youqu3/插件/全自动日志.html#安装","93":"/youqu3/插件/全自动日志.html#使用方法","94":"/youqu3/插件/全自动日志.html#_1、自动输出日志","95":"/youqu3/插件/全自动日志.html#_2、方法中输出其他的日志","96":"/youqu3/插件/全自动日志.html#_3、在外层其他直接使用","97":"/youqu3/插件/全自动日志.html#必要配置项","98":"/youqu3/插件/插件列表.html#youqu3-插件汇总信息","99":"/youqu3/规划/UOS自动化测试方法套件.html#uos-自动化测试方法套件-umtk","100":"/youqu3/规划/UOS自动化测试方法套件.html#_1-简介","101":"/youqu3/规划/UOS自动化测试方法套件.html#_2-工程设计","102":"/youqu3/规划/UOS自动化测试方法套件.html#_2-1-工程结构","103":"/youqu3/规划/UOS自动化测试方法套件.html#_2-2-方案说明","104":"/youqu3/规划/UOS自动化测试方法套件.html#_3-套件发布","105":"/youqu3/规划/UOS自动化测试方法套件.html#_4-套件维护","106":"/youqu3/规划/UOS自动化测试方法套件.html#_5-对套件的测试","107":"/youqu3/规划/UOS自动化测试方法套件.html#_6-umtk-和-youqu2-的公共方法库-public-有何区别","108":"/youqu3/规划/UOS自动化测试用例.html#uos-自动化测试用例","109":"/youqu3/规划/UOS自动化测试用例.html#_1-简介","110":"/youqu3/规划/UOS自动化测试用例.html#_2-工程设计","111":"/youqu3/规划/UOS自动化测试用例.html#_2-1-工程结构","112":"/youqu3/规划/UOS自动化测试用例.html#_2-2-方案说明","113":"/youqu3/规划/YouQu3架构设计规划.html#youqu3-架构设计规划","114":"/youqu3/规划/YouQu3架构设计规划.html#_1-背景","115":"/youqu3/规划/YouQu3架构设计规划.html#_2-目标","116":"/youqu3/规划/YouQu3架构设计规划.html#_3-架构设计","117":"/youqu3/规划/YouQu3架构设计规划.html#_3-1-总体方案","118":"/youqu3/规划/YouQu3架构设计规划.html#_3-2-架构设计","119":"/youqu3/规划/YouQu3架构设计规划.html#_3-3-整体数据流","120":"/youqu3/规划/YouQu3架构设计规划.html#_3-4-详细设计","121":"/youqu3/规划/YouQu3架构设计规划.html#_3-4-1-驱动执行管理","122":"/youqu3/规划/YouQu3架构设计规划.html#_3-4-2-配置项管理","123":"/youqu3/规划/YouQu3架构设计规划.html#_3-4-3-框架总线接口","124":"/youqu3/规划/YouQu3架构设计规划.html#_3-4-4-按测试类型管理插件","125":"/youqu3/规划/YouQu3架构设计规划.html#_3-4-5-环境依赖管理","126":"/youqu3/规划/YouQu3架构设计规划.html#_4-用例工程设计","127":"/youqu3/规划/YouQu3架构设计规划.html#_4-1-用例工程结构","128":"/youqu3/规划/YouQu3架构设计规划.html#_4-2-各模块编写思路","129":"/youqu3/规划/YouQu3架构设计规划.html#_4-2-1-方法层","130":"/youqu3/规划/YouQu3架构设计规划.html#_4-2-2-用例层","131":"/youqu3/规划/YouQu3架构设计规划.html#_4-2-3-断言","132":"/youqu3/规划/YouQu3架构设计规划.html#_4-2-4-配置对象","133":"/youqu3/规划/YouQu3架构设计规划.html#_4-2-5-用例标签管理文件","134":"/youqu3/规划/YouQu3架构设计规划.html#_4-2-6-默认环境变量管理文件","135":"/youqu3/规划/YouQu3架构设计规划.html#_4-2-7-依赖管理文件","136":"/youqu3/规划/YouQu3架构设计规划.html#_4-2-8-调试用例驱动","137":"/youqu3/规划/YouQu3架构设计规划.html#_5-演进规划","138":"/youqu3/规划/YouQu3架构设计规划.html#可视化配置","139":"/youqu3/规划/YouQu3架构设计规划.html#非开发者下运行","140":"/youqu3/规划/YouQu3架构设计规划.html#过程钩子"},"fieldIds":{"title":0,"titles":1,"text":2},"fieldLength":{"0":[2,1,8],"1":[1,2,1],"2":[1,3,23],"3":[1,3,31],"4":[1,3,15],"5":[1,3,4],"6":[1,3,21],"7":[1,3,23],"8":[1,1,1],"9":[1,1,41],"10":[1,1,24],"11":[1,1,27],"12":[1,1,102],"13":[1,1,3],"14":[1,1,1],"15":[1,2,11],"16":[1,2,24],"17":[1,1,1],"18":[1,2,12],"19":[1,2,24],"20":[1,1,1],"21":[1,1,21],"22":[1,1,1],"23":[1,1,1],"24":[1,1,1],"25":[1,2,8],"26":[1,2,11],"27":[1,2,18],"28":[1,1,1],"29":[1,2,13],"30":[1,2,15],"31":[1,2,17],"32":[1,1,4],"33":[1,1,35],"34":[1,1,251],"35":[1,1,1],"36":[1,1,13],"37":[1,1,50],"38":[1,1,14],"39":[2,2,18],"40":[2,2,62],"41":[2,2,41],"42":[1,1,33],"43":[1,1,21],"44":[1,1,8],"45":[1,1,15],"46":[1,1,13],"47":[1,1,21],"48":[1,1,1],"49":[1,2,57],"50":[1,1,11],"51":[1,1,22],"52":[2,1,6],"53":[2,1,12],"54":[2,1,4],"55":[3,1,18],"56":[1,1,1],"57":[1,1,18],"58":[1,1,9],"59":[1,1,1],"60":[1,1,7],"61":[1,1,1],"62":[1,2,6],"63":[1,2,21],"64":[1,2,25],"65":[1,2,30],"66":[1,2,24],"67":[1,2,15],"68":[1,2,21],"69":[1,1,8],"70":[3,1,14],"71":[3,1,14],"72":[1,1,1],"73":[1,2,31],"74":[1,1,1],"75":[1,1,18],"76":[1,1,1],"77":[1,2,17],"78":[1,2,32],"79":[2,1,18],"80":[2,2,1],"81":[1,4,6],"82":[1,4,22],"83":[2,2,1],"84":[1,4,5],"85":[1,4,1],"86":[3,5,21],"87":[2,5,11],"88":[3,5,8],"89":[3,5,10],"90":[3,5,39],"91":[1,1,12],"92":[1,1,4],"93":[1,1,1],"94":[2,2,61],"95":[2,2,58],"96":[2,2,49],"97":[1,1,37],"98":[2,1,90],"99":[4,1,1],"100":[2,4,18],"101":[2,4,1],"102":[3,5,20],"103":[2,5,21],"104":[2,4,33],"105":[2,4,8],"106":[2,4,9],"107":[7,4,50],"108":[2,1,1],"109":[2,2,12],"110":[2,2,1],"111":[3,4,29],"112":[2,4,24],"113":[2,1,1],"114":[2,2,56],"115":[2,2,46],"116":[2,2,1],"117":[3,4,37],"118":[3,4,1],"119":[2,4,15],"120":[3,4,2],"121":[4,6,16],"122":[4,6,19],"123":[3,6,12],"124":[3,6,4],"125":[4,6,5],"126":[2,2,5],"127":[3,4,49],"128":[3,4,2],"129":[4,6,53],"130":[3,6,32],"131":[4,6,30],"132":[3,6,13],"133":[4,6,9],"134":[4,6,4],"135":[4,6,2],"136":[4,6,5],"137":[2,2,1],"138":[1,7,6],"139":[1,7,4],"140":[1,7,5]},"averageFieldLength":[1.7375886524822697,2.517730496453901,18.93617021276596],"storedFields":{"0":{"title":"JSON 报告","titles":[]},"1":{"title":"报告内容","titles":["JSON 报告"]},"2":{"title":"整体结构","titles":["JSON 报告","报告内容"]},"3":{"title":"Environment","titles":["JSON 报告","报告内容"]},"4":{"title":"Summary","titles":["JSON 报告","报告内容"]},"5":{"title":"Collectors","titles":["JSON 报告","报告内容"]},"6":{"title":"Tests","titles":["JSON 报告","报告内容"]},"7":{"title":"Warnings","titles":["JSON 报告","报告内容"]},"8":{"title":"全自动日志","titles":[]},"9":{"title":"背景","titles":["全自动日志"]},"10":{"title":"实现原理","titles":["全自动日志"]},"11":{"title":"日志配置","titles":["全自动日志"]},"12":{"title":"使用方法","titles":["全自动日志"]},"13":{"title":"前后钩子","titles":[]},"14":{"title":"前置钩子","titles":["前后钩子"]},"15":{"title":"前置脚本钩子","titles":["前后钩子","前置钩子"]},"16":{"title":"前置命令行入参钩子","titles":["前后钩子","前置钩子"]},"17":{"title":"后置钩子","titles":["前后钩子"]},"18":{"title":"后置脚本钩子","titles":["前后钩子","后置钩子"]},"19":{"title":"后置命令行入参钩子","titles":["前后钩子","后置钩子"]},"20":{"title":"动态等待","titles":[]},"21":{"title":"架构动态等待","titles":["动态等待"]},"22":{"title":"元素识别动态等待","titles":["动态等待"]},"23":{"title":"命令行交互","titles":[]},"24":{"title":"本机命令行交互","titles":["命令行交互"]},"25":{"title":"普通权限执行","titles":["命令行交互","本机命令行交互"]},"26":{"title":"sudo权限执行","titles":["命令行交互","本机命令行交互"]},"27":{"title":"expect交互","titles":["命令行交互","本机命令行交互"]},"28":{"title":"远程命令行交互","titles":["命令行交互"]},"29":{"title":"普通权限执行","titles":["命令行交互","远程命令行交互"]},"30":{"title":"sudo权限执行","titles":["命令行交互","远程命令行交互"]},"31":{"title":"expect交互","titles":["命令行交互","远程命令行交互"]},"32":{"title":"断言语句","titles":[]},"33":{"title":"用例中使用方法","titles":["断言语句"]},"34":{"title":"方法明细","titles":["断言语句"]},"35":{"title":"标签化管理","titles":[]},"36":{"title":"使用说明","titles":["标签化管理"]},"37":{"title":"CSV文件与脚本对应关系","titles":["标签化管理"]},"38":{"title":"跳过用例","titles":["标签化管理"]},"39":{"title":"1. 固定跳过","titles":["标签化管理","跳过用例"]},"40":{"title":"2. 条件判断跳过","titles":["标签化管理","跳过用例"]},"41":{"title":"3.自定义跳过","titles":["标签化管理","跳过用例"]},"42":{"title":"确认修复","titles":["标签化管理"]},"43":{"title":"废弃用例","titles":["标签化管理"]},"44":{"title":"文件格式","titles":["标签化管理"]},"45":{"title":"脚手架工具","titles":[]},"46":{"title":"远程交互式控制","titles":[]},"47":{"title":"slaves对象提供远程机器信息","titles":["远程交互式控制"]},"48":{"title":"UI操作远程对象","titles":["远程交互式控制"]},"49":{"title":"RpcGui","titles":["远程交互式控制","UI操作远程对象"]},"50":{"title":"原生环境","titles":[]},"51":{"title":"虚拟环境","titles":[]},"52":{"title":"youqu3-cargo","titles":["虚拟环境"]},"53":{"title":"youqu3-shell","titles":["虚拟环境"]},"54":{"title":"youqu3-rm","titles":["虚拟环境"]},"55":{"title":"YouQu3 能做什么?","titles":[null]},"56":{"title":"快速开始","titles":[]},"57":{"title":"安装","titles":["快速开始"]},"58":{"title":"创建用例工程","titles":["快速开始"]},"59":{"title":"本地执行","titles":[]},"60":{"title":"子命令","titles":["本地执行"]},"61":{"title":"用例驱动方式","titles":["本地执行"]},"62":{"title":"执行所有用例","titles":["本地执行","用例驱动方式"]},"63":{"title":"指定执行某一个用例","titles":["本地执行","用例驱动方式"]},"64":{"title":"指定某个目录执行","titles":["本地执行","用例驱动方式"]},"65":{"title":"根据关键词执行","titles":["本地执行","用例驱动方式"]},"66":{"title":"根据标签执行","titles":["本地执行","用例驱动方式"]},"67":{"title":"批量用例ID驱动执行","titles":["本地执行","用例驱动方式"]},"68":{"title":"指定用例文件路径执行","titles":["本地执行","用例驱动方式"]},"69":{"title":"自定义执行","titles":[]},"70":{"title":"youqu-tags.txt","titles":["自定义执行"]},"71":{"title":"youqu-keywords.txt","titles":["自定义执行"]},"72":{"title":"案例","titles":["自定义执行"]},"73":{"title":"PMS用例驱动","titles":["自定义执行","案例"]},"74":{"title":"远程执行","titles":[]},"75":{"title":"子命令","titles":["远程执行"]},"76":{"title":"远程测试机分组策略","titles":["远程执行"]},"77":{"title":"分组规则","titles":["远程执行","远程测试机分组策略"]},"78":{"title":"执行策略","titles":["远程执行","远程测试机分组策略"]},"79":{"title":"pdocr-rpc","titles":[]},"80":{"title":"1、服务端","titles":["pdocr-rpc"]},"81":{"title":"服务端安装","titles":["pdocr-rpc","1、服务端"]},"82":{"title":"服务端启动服务","titles":["pdocr-rpc","1、服务端"]},"83":{"title":"2、客户端","titles":["pdocr-rpc"]},"84":{"title":"客户端安装","titles":["pdocr-rpc","2、客户端"]},"85":{"title":"客户端使用","titles":["pdocr-rpc","2、客户端"]},"86":{"title":"2.1、识别当前屏幕的所有文字内容","titles":["pdocr-rpc","2、客户端","客户端使用"]},"87":{"title":"2.2、指定某张图片识别的所有文字内容","titles":["pdocr-rpc","2、客户端","客户端使用"]},"88":{"title":"2.3、在全屏指定查找某个字符串的坐标","titles":["pdocr-rpc","2、客户端","客户端使用"]},"89":{"title":"2.4、指定某张图片查找某个字符串的坐标","titles":["pdocr-rpc","2、客户端","客户端使用"]},"90":{"title":"2.5、其他参数","titles":["pdocr-rpc","2、客户端","客户端使用"]},"91":{"title":"FunnyLog","titles":[]},"92":{"title":"安装","titles":["FunnyLog"]},"93":{"title":"使用方法","titles":["FunnyLog"]},"94":{"title":"1、自动输出日志","titles":["FunnyLog","使用方法"]},"95":{"title":"2、方法中输出其他的日志","titles":["FunnyLog","使用方法"]},"96":{"title":"3、在外层其他直接使用","titles":["FunnyLog","使用方法"]},"97":{"title":"必要配置项","titles":["FunnyLog"]},"98":{"title":"YouQu3 插件汇总信息","titles":[null]},"99":{"title":"UOS 自动化测试方法套件(UMTK)","titles":[]},"100":{"title":"1. 简介","titles":["UOS 自动化测试方法套件(UMTK)"]},"101":{"title":"2. 工程设计","titles":["UOS 自动化测试方法套件(UMTK)"]},"102":{"title":"2.1. 工程结构","titles":["UOS 自动化测试方法套件(UMTK)","2. 工程设计"]},"103":{"title":"2.2. 方案说明","titles":["UOS 自动化测试方法套件(UMTK)","2. 工程设计"]},"104":{"title":"3. 套件发布","titles":["UOS 自动化测试方法套件(UMTK)"]},"105":{"title":"4. 套件维护","titles":["UOS 自动化测试方法套件(UMTK)"]},"106":{"title":"5. 对套件的测试","titles":["UOS 自动化测试方法套件(UMTK)"]},"107":{"title":"6. UMTK 和 YouQu2 的公共方法库(public)有何区别","titles":["UOS 自动化测试方法套件(UMTK)"]},"108":{"title":"UOS 自动化测试用例","titles":[]},"109":{"title":"1. 简介","titles":["UOS 自动化测试用例"]},"110":{"title":"2. 工程设计","titles":["UOS 自动化测试用例"]},"111":{"title":"2.1. 工程结构","titles":["UOS 自动化测试用例","2. 工程设计"]},"112":{"title":"2.2. 方案说明","titles":["UOS 自动化测试用例","2. 工程设计"]},"113":{"title":"YouQu3 架构设计规划","titles":[]},"114":{"title":"1. 背景","titles":["YouQu3 架构设计规划"]},"115":{"title":"2. 目标","titles":["YouQu3 架构设计规划"]},"116":{"title":"3. 架构设计","titles":["YouQu3 架构设计规划"]},"117":{"title":"3.1. 总体方案","titles":["YouQu3 架构设计规划","3. 架构设计"]},"118":{"title":"3.2. 架构设计","titles":["YouQu3 架构设计规划","3. 架构设计"]},"119":{"title":"3.3. 整体数据流","titles":["YouQu3 架构设计规划","3. 架构设计"]},"120":{"title":"3.4. 详细设计","titles":["YouQu3 架构设计规划","3. 架构设计"]},"121":{"title":"3.4.1. 驱动执行管理","titles":["YouQu3 架构设计规划","3. 架构设计","3.4. 详细设计"]},"122":{"title":"3.4.2. 配置项管理","titles":["YouQu3 架构设计规划","3. 架构设计","3.4. 详细设计"]},"123":{"title":"3.4.3. 框架总线接口","titles":["YouQu3 架构设计规划","3. 架构设计","3.4. 详细设计"]},"124":{"title":"3.4.4. 按测试类型管理插件","titles":["YouQu3 架构设计规划","3. 架构设计","3.4. 详细设计"]},"125":{"title":"3.4.5. 环境依赖管理","titles":["YouQu3 架构设计规划","3. 架构设计","3.4. 详细设计"]},"126":{"title":"4. 用例工程设计","titles":["YouQu3 架构设计规划"]},"127":{"title":"4.1. 用例工程结构","titles":["YouQu3 架构设计规划","4. 用例工程设计"]},"128":{"title":"4.2. 各模块编写思路","titles":["YouQu3 架构设计规划","4. 用例工程设计"]},"129":{"title":"4.2.1. 方法层","titles":["YouQu3 架构设计规划","4. 用例工程设计","4.2. 各模块编写思路"]},"130":{"title":"4.2.2. 用例层","titles":["YouQu3 架构设计规划","4. 用例工程设计","4.2. 各模块编写思路"]},"131":{"title":"4.2.3. 断言","titles":["YouQu3 架构设计规划","4. 用例工程设计","4.2. 各模块编写思路"]},"132":{"title":"4.2.4. 配置对象","titles":["YouQu3 架构设计规划","4. 用例工程设计","4.2. 各模块编写思路"]},"133":{"title":"4.2.5. 用例标签管理文件","titles":["YouQu3 架构设计规划","4. 用例工程设计","4.2. 各模块编写思路"]},"134":{"title":"4.2.6. 默认环境变量管理文件","titles":["YouQu3 架构设计规划","4. 用例工程设计","4.2. 各模块编写思路"]},"135":{"title":"4.2.7. 依赖管理文件","titles":["YouQu3 架构设计规划","4. 用例工程设计","4.2. 各模块编写思路"]},"136":{"title":"4.2.8. 调试用例驱动","titles":["YouQu3 架构设计规划","4. 用例工程设计","4.2. 各模块编写思路"]},"137":{"title":"5. 演进规划","titles":["YouQu3 架构设计规划"]},"138":{"title":"可视化配置","titles":["YouQu3 架构设计规划","5. 演进规划","4.2. 各模块编写思路"]},"139":{"title":"非开发者下运行","titles":["YouQu3 架构设计规划","5. 演进规划","4.2. 各模块编写思路"]},"140":{"title":"过程钩子","titles":["YouQu3 架构设计规划","5. 演进规划","4.2. 各模块编写思路"]}},"dirtCount":0,"index":[["即可自动被框架加载并执行",{"2":{"140":1}}],["即默认返回识别到字符串的中心坐标",{"2":{"90":1}}],["过程钩子",{"0":{"140":1}}],["过程中如果根据需要出小版本",{"2":{"104":1}}],["减少系统自动化环境准备的难度",{"2":{"139":1}}],["非开发者下运行",{"0":{"139":1}}],["配合远程执行功能",{"2":{"138":1}}],["配置对象",{"0":{"132":1}}],["配置模块",{"2":{"127":1}}],["配置文件管理配置项",{"2":{"122":1}}],["配置类",{"2":{"122":1,"132":1}}],["配置项管理",{"0":{"122":1},"2":{"122":1}}],["页面化的配置功能",{"2":{"138":1}}],["演进规划",{"0":{"137":1},"1":{"138":1,"139":1,"140":1}}],["模式运行脚本",{"2":{"136":1}}],["模块",{"2":{"121":1}}],["模块化改造",{"2":{"115":1}}],["模块名称为应用包名",{"2":{"103":1,"112":1}}],["模块名称",{"2":{"65":1}}],["定义用例工程所需要的依赖包",{"2":{"135":1}}],["定义虚拟环境相关的一些环境变量",{"2":{"134":1}}],["运行的行为",{"2":{"134":1}}],["运行稳定性",{"2":{"115":1}}],["日常维护过程中",{"2":{"133":1}}],["日志文件的生成路径",{"2":{"97":1}}],["日志",{"2":{"95":3}}],["日志模板语法",{"2":{"12":1}}],["日志配置",{"0":{"11":1}}],["维护标签时",{"2":{"133":1}}],["维护方法的稳定性有效性将成为一个问题",{"2":{"106":1}}],["然后",{"2":{"131":1}}],["然后将这些基础能力通过",{"2":{"46":1}}],["任务栏点击文件管理器",{"2":{"129":1}}],["\\t\\tself",{"2":{"131":1}}],["\\t",{"2":{"129":1}}],["\\tdef",{"2":{"129":1}}],["弹窗",{"2":{"129":1}}],["左边视图区域",{"2":{"129":1}}],["右边视图区域",{"2":{"129":1}}],["标题栏",{"2":{"129":1}}],["标签驱动",{"2":{"117":1}}],["标签驱动支持",{"2":{"66":1}}],["标签",{"2":{"66":1}}],["标签记录为",{"2":{"40":1}}],["标签可以无序",{"2":{"37":1}}],["标签化管理",{"0":{"35":1},"1":{"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1}}],["进行编写",{"2":{"129":1}}],["进行分割",{"2":{"41":1}}],["按照",{"2":{"129":1}}],["按测试类型管理插件",{"0":{"124":1}}],["放置在对应的类里面",{"2":{"129":1}}],["设计思想",{"2":{"129":1}}],["设计模式",{"2":{"45":1,"103":1,"117":1}}],["依赖管理文件",{"0":{"135":1},"2":{"127":1}}],["调试用例驱动",{"0":{"136":1}}],["调试用例驱动脚本",{"2":{"127":1}}],["调用所有的断言语句",{"2":{"33":1}}],["调用方法时",{"2":{"12":1}}],["图像识别方法所需要的资源",{"2":{"127":1}}],["图片路径",{"2":{"34":2}}],["上层用例就能通过框架动态调用插件提供的功能",{"2":{"123":1}}],["插槽",{"2":{"123":1}}],["插件如果已经安装",{"2":{"123":1}}],["插件",{"2":{"119":1}}],["插件汇总信息",{"0":{"98":1}}],["原则上不通过修改配置文件的方式修改",{"2":{"122":1}}],["原生环境虚拟环境",{"2":{"60":1,"62":1,"63":2,"64":1,"65":1,"66":1,"67":1,"68":3,"73":1,"75":1,"78":1}}],["原生环境",{"0":{"50":1}}],["公共配置为框架提供的一些具有默认值的配置项",{"2":{"122":1}}],["公共配置的形式",{"2":{"122":1}}],["显示的传入参数值",{"2":{"122":1}}],["采用虚拟环境管理依赖项",{"2":{"125":1}}],["采用命令行参数",{"2":{"122":1}}],["采用全新的架构设计",{"2":{"107":1}}],["解析测试策略",{"2":{"121":1}}],["解除跳过时将装饰器代码删掉",{"2":{"38":1}}],["获取命令行参数并结合配置项",{"2":{"121":1}}],["获取被装饰的类下所有函数",{"2":{"10":1}}],["驱动",{"2":{"121":1}}],["驱动命令将命令行参数传递给框架底层",{"2":{"121":1}}],["驱动执行管理",{"0":{"121":1}}],["驱动执行",{"2":{"64":1}}],["详细介绍各功能模块的设计和编写思路",{"2":{"128":1}}],["详细描述各模块工作方式",{"2":{"120":1}}],["详细设计",{"0":{"120":1},"1":{"121":1,"122":1,"123":1,"124":1,"125":1}}],["抛异常程序终止",{"2":{"119":1}}],["否则提示用户进行安装",{"2":{"119":1}}],["否则会提示无法连接",{"2":{"75":1}}],["底层功能",{"2":{"119":1}}],["让用户能专注于用例逻辑的编写和维护",{"2":{"117":1}}],["让你可以专注于用例和方法的编写维护",{"2":{"45":1}}],["管理",{"2":{"117":1}}],["资源目录",{"2":{"117":1}}],["生成的用例工程遵循完整的",{"2":{"117":1}}],["路径驱动",{"2":{"117":1}}],["三方包的形式提供",{"2":{"117":1}}],["由用例层决定使用哪些功能对应安装哪些插件",{"2":{"117":1}}],["由于虚拟环境中也安装了",{"2":{"53":1}}],["由于需求变更",{"2":{"43":1}}],["总体方案",{"0":{"117":1}}],["互不影响",{"2":{"115":1}}],["提高",{"2":{"115":1}}],["提高用例开发效率",{"2":{"115":1}}],["提供一个",{"2":{"138":1}}],["提供可调用的配置对象config",{"2":{"127":1}}],["提供的一个全局对象",{"2":{"47":1}}],["提供灵活的前后钩子机制",{"2":{"13":1}}],["安全性稳定性更好",{"2":{"115":1}}],["安装",{"0":{"57":1,"92":1},"2":{"104":1}}],["降低使用门槛",{"2":{"115":1}}],["价值",{"2":{"115":1}}],["简化系统环境部署",{"2":{"115":1}}],["简介",{"0":{"100":1,"109":1}}],["搭配远程执行功能",{"2":{"115":1}}],["功能插件可插拔",{"2":{"117":1}}],["功能扩展性更好",{"2":{"115":1}}],["功能可插拔",{"2":{"115":1}}],["功能强大的自动化测试框架",{"2":{"114":1}}],["功能强大的日志工具",{"2":{"91":1}}],["极致轻量化",{"2":{"115":1}}],["诸多亮点功能的同时解决其遇到的问题",{"2":{"115":1}}],["扩展性和兼容性更好的自动化测试框架",{"2":{"114":1}}],["更贴合大部分真实用户的使用场景",{"2":{"139":1}}],["更新",{"2":{"115":1}}],["更加纯粹",{"2":{"114":1}}],["更重要的是我们不想引入三方依赖",{"2":{"44":1}}],["甚至有些问题在现有框架结构下根本无法解决",{"2":{"114":1}}],["业务流程有一些影响",{"2":{"114":1}}],["业务不同",{"2":{"107":1}}],["势必对现有公司自动化用例",{"2":{"114":1}}],["等等",{"2":{"114":1}}],["绑定了太多公司的业务",{"2":{"114":1}}],["导致框架代码容易被用户修改",{"2":{"114":1}}],["源代码暴露在用户面前",{"2":{"114":1}}],["每次使用需要初始化框架工程及单独做环境部署",{"2":{"114":1}}],["每个应用存在一个唯一的出口文件",{"2":{"103":1}}],["每个机器执行",{"2":{"78":1}}],["每个模块建立一个",{"2":{"37":1}}],["每个用例的详细结果",{"2":{"6":1}}],["仍然存在一些不尽人意的地方",{"2":{"114":1}}],["小版本更新了数十个",{"2":{"114":1}}],["两个大版本",{"2":{"114":1}}],["两对大括号中的内容",{"2":{"12":1}}],["月在欧拉社区开源",{"2":{"114":1}}],["月正式在",{"2":{"114":1}}],["社区开源",{"2":{"114":1}}],["年",{"2":{"114":2}}],["年多的持续开发优化",{"2":{"114":1}}],["年成都测试团队开始内部孵化的项目",{"2":{"114":1}}],["经过了",{"2":{"114":1}}],["旨在成为下一代",{"2":{"115":1}}],["旨在开发一个简单易用",{"2":{"114":1}}],["旨在提供",{"2":{"109":1}}],["旨在提供系统预装应用所有的元素的操作方法",{"2":{"100":1}}],["做复杂步骤的封装",{"2":{"112":1}}],["里面导入使用",{"2":{"112":1}}],["里面的静态方法",{"2":{"94":2,"95":1}}],["里面的类方法",{"2":{"94":2}}],["里面的实例方法",{"2":{"94":2}}],["编写的",{"2":{"109":1}}],["大量人员都可以对其进行直接修改",{"2":{"107":1}}],["稳定性",{"2":{"107":2}}],["确保操作方法的一致性",{"2":{"107":1}}],["确认修复",{"0":{"42":1},"2":{"36":1,"37":1,"42":3,"43":1}}],["代码一致性",{"2":{"107":1}}],["代表不跳过",{"2":{"41":1}}],["代表跳过",{"2":{"41":1}}],["容易受到需求变更",{"2":{"107":1}}],["仅包含自动化用例用到的少部分公共方法",{"2":{"107":1}}],["仅驱动执行这一条用例",{"2":{"63":1}}],["涵盖了",{"2":{"107":1}}],["范围覆盖很少",{"2":{"107":1}}],["范围",{"2":{"107":1}}],["内外部开发者们的认可",{"2":{"114":1}}],["内容",{"2":{"107":1}}],["内置支持的条件跳过对象",{"2":{"40":1}}],["二者属于两个时代",{"2":{"107":1}}],["有些问题处理起来必然会影响到框架的兼容性",{"2":{"114":1}}],["有效性没有保障",{"2":{"107":1}}],["有效性",{"2":{"107":1}}],["有很大差异",{"2":{"107":1}}],["有何区别",{"0":{"107":1}}],["亦各从其志也",{"2":{"107":1}}],["道",{"2":{"107":1}}],["卫灵公",{"2":{"107":1}}],["论语",{"2":{"107":1}}],["孔子",{"2":{"107":1}}],["适合有离线部署需求的用户",{"2":{"115":1}}],["适配厂商可以直接使用这些单元测试进行适配测试",{"2":{"106":1}}],["适用于气泡类的断言",{"2":{"34":1}}],["专门针对元素操作方法函数进行测试",{"2":{"106":1}}],["对象的属性值",{"2":{"122":1}}],["对纯",{"2":{"114":1}}],["对套件的测试",{"0":{"106":1}}],["对于用例规模比较大的应用",{"2":{"37":1}}],["鼓励内外部开发者贡献",{"2":{"105":1}}],["发布",{"2":{"104":1}}],["发布一个套件版本",{"2":{"104":2}}],["阶段",{"2":{"104":1}}],["套件里面保存元素的操作方法",{"2":{"106":1}}],["套件由专人主责维护",{"2":{"105":1}}],["套件维护",{"0":{"105":1}}],["套件通过",{"2":{"104":1}}],["套件持续保持更新",{"2":{"104":1}}],["套件分大版本发布",{"2":{"104":1}}],["套件发布",{"0":{"104":1}}],["遵循",{"2":{"103":1}}],["供外部用例调用",{"2":{"103":1}}],["下划线连接单词",{"2":{"103":1,"112":1}}],["下完美的键鼠工具",{"2":{"98":1}}],["方便用例开发者以",{"2":{"136":1}}],["方便安装",{"2":{"115":1}}],["方案说明",{"0":{"103":1,"112":1}}],["方法唯一出口类",{"2":{"127":1}}],["方法基类",{"2":{"127":1}}],["方法层按需导入框架提供的底层能力",{"2":{"129":1}}],["方法层",{"0":{"129":1}}],["方法层目录",{"2":{"127":1}}],["方法层基础代码自动生成",{"2":{"117":1}}],["方法层所有的函数",{"2":{"12":1}}],["方法代码",{"2":{"117":1}}],["方法增删改的详细数据",{"2":{"98":1}}],["方法里面仍然可以单独打印日志",{"2":{"95":1}}],["方法中输出其他的日志",{"0":{"95":1}}],["方法只能有一个入参",{"2":{"41":1}}],["方法必须有返回结果并且为布尔值",{"2":{"41":1}}],["方法名必须以",{"2":{"41":1}}],["方法编写规范",{"2":{"41":1}}],["方法明细",{"0":{"34":1}}],["方法库里面",{"2":{"12":1}}],["方法",{"2":{"10":1}}],["└──",{"2":{"102":4,"111":5,"127":3}}],["组装成自动化测试用例",{"2":{"100":1}}],["测试方法套件中所有的方法均为原子操作",{"2":{"103":1}}],["测试方法套件是一个独立项目",{"2":{"100":1}}],["测试单驱动插件",{"2":{"98":1}}],["测试单",{"2":{"73":1}}],["系统中各应用在",{"2":{"112":1}}],["系统中各应用划分自己的模块",{"2":{"103":1}}],["系统所有预装应用的测试用例",{"2":{"109":1}}],["系统所有预装应用的原子操作方法",{"2":{"107":1}}],["系统级测试用例",{"2":{"109":1}}],["系统自动化测试操作方法套件",{"2":{"100":1}}],["系统显示协议跳过",{"2":{"40":1}}],["全面插件化模块化",{"2":{"115":1}}],["全面优化框架接口调用机制",{"2":{"115":1}}],["全称",{"2":{"100":1}}],["全自动日志插件",{"2":{"98":1}}],["全自动日志",{"0":{"8":1},"1":{"9":1,"10":1,"11":1,"12":1}}],["迁移工具",{"2":{"98":1}}],["相对位移元素定位方案的配置文件",{"2":{"127":1}}],["相对位移定位插件",{"2":{"98":1}}],["相册的用例文件为",{"2":{"37":1}}],["操作系统环境支持不够友好",{"2":{"114":1}}],["操作系统预装应用的元素操作方法套件",{"2":{"100":1}}],["操作较为复杂",{"2":{"114":1}}],["操作或命令行操作",{"2":{"46":1}}],["操控插件",{"2":{"98":1}}],["键鼠操作插件",{"2":{"98":1}}],["✔️",{"2":{"98":14}}],["属性定位插件",{"2":{"98":1}}],["级别",{"2":{"97":1}}],["你可以配置为其他位置",{"2":{"97":1}}],["你可以使用它进行用例的驱动执行和管理",{"2":{"50":1}}],["必要配置项",{"0":{"97":1}}],["终端输出",{"2":{"94":1,"95":1,"96":1}}],["终端输出的日志级别",{"2":{"11":1}}],["直接调用基类里面的方法",{"2":{"94":1}}],["我是",{"2":{"94":6,"95":1}}],["我们可以将界面分为四个区域",{"2":{"129":1}}],["我们想要设计开发一个更加简单易用",{"2":{"114":1}}],["我们需要建立对套件的自动化测试",{"2":{"106":1}}],["我们设计出了",{"2":{"9":1}}],["我们发现",{"2":{"9":1}}],["其中所有的用例步骤都应该调用方法层对应的方法",{"2":{"130":1}}],["其中有一张图片识别成功即返回结果",{"2":{"34":1}}],["其他人可以提需求",{"2":{"105":1}}],["其他参数",{"0":{"90":1}}],["天天向上",{"2":{"88":2,"89":1}}],["天真",{"2":{"9":1}}],["客户端使用",{"0":{"85":1},"1":{"86":1,"87":1,"88":1,"89":1,"90":1}}],["客户端安装",{"0":{"84":1}}],["客户端",{"0":{"83":1},"1":{"84":1,"85":1,"86":1,"87":1,"88":1,"89":1,"90":1}}],["客户端提供了一个简单易用的函数",{"2":{"79":1}}],["写入以下内容",{"2":{"82":1}}],["名称你可以自定义",{"2":{"82":1}}],["随意新建一个py文件",{"2":{"82":1}}],["封装的",{"2":{"79":1,"100":1}}],["个机器瓜分",{"2":{"78":1}}],["个测试机",{"2":{"78":1}}],["个组",{"2":{"77":1}}],["都同时执行",{"2":{"78":1}}],["都不需要再写日志代码",{"2":{"12":1}}],["条",{"2":{"78":2}}],["条用例",{"2":{"78":2}}],["条件判断组合",{"2":{"41":1}}],["条件判断跳过",{"0":{"40":1}}],["假设总共",{"2":{"78":1}}],["同事们",{"2":{"114":1}}],["同样可以进行配置修改",{"2":{"97":1}}],["同一组内瓜分执行",{"2":{"78":1}}],["同时定义一些用例工程相关的配置",{"2":{"132":1}}],["同时框架可以在中间件中对插件功能进行增强或修改",{"2":{"123":1}}],["同时对各功能进行插件化",{"2":{"115":1}}],["同时选择多个环境",{"2":{"57":1}}],["同时标记了skip",{"2":{"42":1}}],["规则概述",{"2":{"78":1}}],["一键生成用例工程模板代码",{"2":{"117":1}}],["一些底层模块或接口命名不优雅",{"2":{"114":1}}],["一对大括号表示一个组",{"2":{"77":1}}],["一个元素一个方法",{"2":{"129":1}}],["一个页面一个类",{"2":{"129":1}}],["一个简单易用",{"2":{"91":1}}],["一个应用含有大量的操作函数",{"2":{"9":1}}],["一个函数里面至少包含一条日志信息",{"2":{"9":1}}],["分组规则",{"0":{"77":1}}],["分割",{"2":{"47":1}}],["服务的",{"2":{"98":1}}],["服务的图像识别插件",{"2":{"98":1}}],["服务的方式提供出来",{"2":{"46":1}}],["服务端启动服务",{"0":{"82":1}}],["服务端安装",{"0":{"81":1}}],["服务端",{"0":{"80":1},"1":{"81":1,"82":1}}],["服务",{"2":{"75":1,"79":1}}],["开发",{"2":{"107":1}}],["开启",{"2":{"75":1}}],["开头",{"2":{"41":1}}],["开头的",{"2":{"11":1}}],["集合写入",{"2":{"73":1}}],["将基于youqu2的用例代码修改为youqu3",{"2":{"98":1}}],["将用例",{"2":{"73":1}}],["将跳过用例操作也整合进入用例标签",{"2":{"38":1}}],["案例",{"0":{"72":1},"1":{"73":1}}],["如",{"2":{"70":1,"71":1,"117":1,"132":1}}],["如果一个页面元素操作比较多",{"2":{"129":1}}],["如果一个应用存在多个页面",{"2":{"129":1}}],["如果涉及到复杂步骤的封装",{"2":{"112":1}}],["如果要修改识别语言",{"2":{"90":1}}],["如果存在多个",{"2":{"88":1}}],["如果你想修改端口",{"2":{"82":1}}],["如果你想执行这个",{"2":{"63":1}}],["如果应用受到新需求影响需要跳过",{"2":{"39":1}}],["如果不传默认截取全屏识别",{"2":{"34":1}}],["如果不传参",{"2":{"34":1}}],["如果用常规的图像识别则有可能无法识别到",{"2":{"34":1}}],["如果比较复杂操作步骤",{"2":{"9":1}}],["会自动加载并执行",{"2":{"70":1,"71":1}}],["会自动生成一个命令",{"2":{"50":1,"51":1}}],["支持对用例执行的各个阶段插入钩子",{"2":{"140":1}}],["支持对各种测试策略的驱动执行",{"2":{"138":1}}],["支持对依赖环境进行一键打包",{"2":{"125":1}}],["支持用例目录或文件路径驱动执行",{"2":{"121":1}}],["支持基于关键词驱动用例执行",{"2":{"121":1}}],["支持基于测试单驱动插件驱动用例执行",{"2":{"121":1}}],["支持基于用例标签化管理驱动用例执行",{"2":{"121":1}}],["支持本地和远程执行模式",{"2":{"121":1}}],["支持多种用例驱动模式",{"2":{"117":1}}],["支持非开发者下运行",{"2":{"115":1}}],["支持离线部署",{"2":{"115":1}}],["支持在非开发着环境下运行用例",{"2":{"139":1}}],["支持在",{"2":{"69":1}}],["支持类名包含",{"2":{"11":1}}],["支持类名以",{"2":{"11":2}}],["加引号",{"2":{"68":1}}],["加上装饰器",{"2":{"12":1}}],["批量用例id驱动执行",{"0":{"67":1}}],["特有的",{"2":{"66":1}}],["特殊标签",{"2":{"37":1}}],["表达式",{"2":{"65":1,"66":1}}],["表示返回识别到的第一个",{"2":{"90":1}}],["表示用例的id",{"2":{"37":1}}],["表示识别任意一个目标字符",{"2":{"34":1}}],["表示识别所有目标字符",{"2":{"34":1}}],["关键词驱动等等",{"2":{"117":1}}],["关键词驱动支持",{"2":{"65":1}}],["关键词可以是用例对象中的任意字符",{"2":{"65":1}}],["整体数据流",{"0":{"119":1}}],["整体结构",{"0":{"2":1}}],["整个字符串中可以任意截取字符作为关键词",{"2":{"65":1}}],["且有完善的单元测试机制",{"2":{"107":1}}],["且存在较多涉及用例逻辑的复杂步骤方法",{"2":{"107":1}}],["且大小写不敏感",{"2":{"65":1}}],["且要方便能使用",{"2":{"44":1}}],["根据标签执行",{"0":{"66":1}}],["根据关键词执行",{"0":{"65":1}}],["根据不同的测试类型选择以上不同的安装命令",{"2":{"57":1}}],["根据不同的架构对等待时间进行倍数放大",{"2":{"21":1}}],["│\\t└──",{"2":{"64":1}}],["│\\t├──",{"2":{"64":1}}],["│",{"2":{"64":5,"102":5,"111":22,"127":12}}],["指定某张图片查找某个字符串的坐标",{"0":{"89":1}}],["指定某张图片识别的所有文字内容",{"0":{"87":1}}],["指定某个目录执行",{"0":{"64":1}}],["指定用例目录",{"2":{"68":1}}],["指定用例文件",{"2":{"68":1}}],["指定用例文件路径执行",{"0":{"68":1}}],["指定执行某一个用例",{"0":{"63":1}}],["本地执行子命令为",{"2":{"60":1}}],["本地执行",{"0":{"59":1},"1":{"60":1,"61":1,"62":1,"63":1,"64":1,"65":1,"66":1,"67":1,"68":1}}],["本机命令行交互",{"0":{"24":1},"1":{"25":1,"26":1,"27":1}}],["基类",{"2":{"94":3}}],["基础环境默认支持",{"2":{"57":1}}],["基础环境guiwebuihttpremote",{"2":{"57":1}}],["基于此",{"2":{"9":1}}],["基于",{"2":{"9":1,"66":1,"79":1,"98":3}}],["快速开始",{"0":{"56":1},"1":{"57":1,"58":1}}],["无限可能",{"2":{"55":1}}],["🤙️",{"2":{"55":1}}],["接口自动化测试",{"2":{"55":2}}],["接口从而控制远程机器执行用例步骤",{"2":{"46":1}}],["🔥",{"2":{"98":1}}],["🚧",{"2":{"98":3}}],["🕷️",{"2":{"55":1}}],["🚀",{"2":{"55":1}}],["🚌",{"2":{"55":1}}],["💻",{"2":{"55":1}}],["🌏",{"2":{"55":1}}],["桌面应用",{"2":{"55":1}}],["☑",{"2":{"55":6}}],["能满足公司对自动化测试的业务需求",{"2":{"114":1}}],["能做什么",{"0":{"55":1}}],["能不能基于框架执行时",{"2":{"9":1}}],["$",{"2":{"53":1}}],["v25",{"2":{"104":1}}],["v20",{"2":{"104":2}}],["video",{"2":{"98":1}}],["virtualenv",{"2":{"53":1}}],["values",{"2":{"34":3}}],["删除虚拟环境",{"2":{"51":1}}],["激活虚拟环境",{"2":{"51":1}}],["命令安装使用",{"2":{"104":1}}],["命令可以将当前的虚拟环境删除",{"2":{"54":1}}],["命令",{"2":{"51":1}}],["命令行参数可以通过驱动命令提供入参选项",{"2":{"122":1}}],["命令行自动化",{"2":{"57":1}}],["命令行自动化测试",{"2":{"55":1}}],["命令行",{"2":{"47":1}}],["命令行传递参数",{"2":{"42":1}}],["命令行交互",{"0":{"23":1},"1":{"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"30":1,"31":1}}],["执行管理器接收命令行参数并读取公共配置项驱动用例执行",{"2":{"119":1}}],["执行模式支持本地驱动执行和远程驱动执行",{"2":{"117":1}}],["执行策略",{"0":{"78":1}}],["执行前确保远程机器已经开启了",{"2":{"75":1}}],["执行命令",{"2":{"73":1}}],["执行包含关键词的用例",{"2":{"65":1}}],["执行所有用例",{"0":{"62":1}}],["执行之后会自动创建一些有用的命令",{"2":{"51":1}}],["执行的时候会自动输出",{"2":{"12":1}}],["子命令",{"0":{"60":1,"75":1},"2":{"51":1}}],["还可以进行环境的管理",{"2":{"51":1}}],["虚拟环境默认在用例功能根目录下创建",{"2":{"125":1}}],["虚拟环境",{"0":{"51":1},"1":{"52":1,"53":1,"54":1}}],["种方式传入",{"2":{"47":1}}],["机器信息有",{"2":{"47":1}}],["它不能脱离",{"2":{"107":1}}],["它除了可以驱动用例执行",{"2":{"51":1}}],["它保存了远程测试机的信息列表",{"2":{"47":1}}],["它继承了",{"2":{"33":1}}],["交互的基础能力",{"2":{"46":1}}],["远程测试机分组策略",{"0":{"76":1},"1":{"77":1,"78":1}}],["远程机器执行的用例相同",{"2":{"75":1}}],["远程执行使用子命令",{"2":{"75":1}}],["远程执行就是用本地作为服务端控制远程机器执行",{"2":{"75":1}}],["远程执行",{"0":{"74":1},"1":{"75":1,"76":1,"77":1,"78":1}}],["远程交互式控制",{"0":{"46":1},"1":{"47":1,"48":1,"49":1}}],["远程命令行交互",{"0":{"28":1},"1":{"29":1,"30":1,"31":1}}],["创建一个目录",{"2":{"45":1,"58":1}}],["创建用例工程",{"0":{"58":1},"2":{"45":1}}],["工程结构",{"0":{"102":1,"111":1}}],["工程设计",{"0":{"101":1,"110":1},"1":{"102":1,"103":1,"111":1,"112":1}}],["工程遵循完整的",{"2":{"45":1}}],["工程自有断言模块",{"2":{"33":1}}],["脚手架工具",{"0":{"45":1}}],["脚本文件id",{"2":{"36":1,"37":1,"39":1,"40":1}}],["脚本一样即可",{"2":{"16":1,"19":1}}],["打开进行编辑查看",{"2":{"44":1}}],["此配置文件需要维护大量的标签数据",{"2":{"44":1}}],["此时会抛异常",{"2":{"123":1}}],["此时",{"2":{"37":1}}],["已废弃",{"2":{"43":1}}],["已修复",{"2":{"42":2,"43":1}}],["废弃原因",{"2":{"43":1}}],["废弃用例是特殊的标签",{"2":{"37":1}}],["废弃用例",{"0":{"43":1},"2":{"36":1,"43":2}}],["该列存在",{"2":{"43":1}}],["环境依赖管理",{"0":{"125":1}}],["环境依赖管理等相关功能的目录文件也都一键生成",{"2":{"117":1}}],["环境依赖可以一键打包交付",{"2":{"115":1}}],["环境以提供",{"2":{"46":1}}],["环境影响或评估不再适用于自动化测试时",{"2":{"43":1}}],["环境信息",{"2":{"3":1}}],["针对某些用例",{"2":{"43":1}}],["针对于某些用例修复后",{"2":{"42":1}}],["yes",{"2":{"42":2}}],["youqu2",{"0":{"107":1},"2":{"98":1,"107":4,"114":3,"115":1}}],["youqu",{"0":{"70":1,"71":1},"2":{"47":1,"66":1,"69":2,"70":2,"71":2,"73":3,"98":9,"114":1}}],["youqu3",{"0":{"52":1,"53":1,"54":1,"55":1,"98":1,"113":1},"1":{"114":1,"115":1,"116":1,"117":1,"118":1,"119":1,"120":1,"121":1,"122":1,"123":1,"124":1,"125":1,"126":1,"127":1,"128":1,"129":1,"130":1,"131":1,"132":1,"133":1,"134":1,"135":1,"136":1,"137":1,"138":1,"139":1,"140":1},"2":{"9":2,"12":2,"13":1,"21":1,"25":1,"26":1,"27":1,"29":1,"30":1,"31":1,"32":1,"33":3,"34":10,"45":1,"46":1,"49":1,"50":2,"51":5,"52":1,"53":5,"54":1,"57":6,"58":1,"60":2,"62":2,"63":4,"64":2,"65":2,"66":2,"67":2,"68":6,"69":1,"70":1,"71":1,"75":2,"78":2,"98":3,"100":1,"107":2,"109":1,"112":1,"114":1,"115":1,"117":1,"119":2,"121":1,"122":1,"126":1,"129":1,"131":2,"132":1}}],["you",{"2":{"16":1,"19":1}}],["中间件",{"2":{"123":1}}],["中用例增删改",{"2":{"98":1}}],["中文",{"2":{"90":1}}],["中同时填入后",{"2":{"42":1}}],["中的任意一个",{"2":{"34":1}}],["当传入要查找的字符串时",{"2":{"90":1}}],["当系统中安装了",{"2":{"50":1,"51":1}}],["当",{"2":{"42":1}}],["固定填入字段为",{"2":{"42":1}}],["固定跳过",{"0":{"39":1}}],["作为父类被",{"2":{"131":1}}],["作为标记该用例是否已经修复",{"2":{"42":1}}],["作为变量输出出来了",{"2":{"12":1}}],["新增一列标签名为",{"2":{"42":1}}],["但若用例层调用了此插件提供的功能",{"2":{"123":1}}],["但",{"2":{"114":1}}],["但仍然想要跳过用例",{"2":{"42":1}}],["但不能立即删除跳过原因",{"2":{"42":1}}],["但标签化管理的核心目的是集中化管理用例的标签",{"2":{"37":1}}],["推荐统一使用",{"2":{"41":1}}],["连接符号不可使用下划线和逗号",{"2":{"41":1}}],["连接服务器重试次数",{"2":{"34":1}}],["若插件没有被安装",{"2":{"123":1}}],["若插件已经安装",{"2":{"119":1}}],["若需要多个",{"2":{"41":1}}],["若函数需要多个参数",{"2":{"41":1}}],["若是",{"2":{"40":1}}],["重要",{"2":{"41":1}}],["重试间隔时间",{"2":{"34":1}}],["截取的左侧字符串作为函数名",{"2":{"41":1}}],["截取屏幕图片的间隔时间",{"2":{"34":1}}],["截取屏幕图片的时间",{"2":{"34":1}}],["korean",{"2":{"90":1}}],["k",{"2":{"63":4,"64":2,"65":2}}],["klvvw5821",{"2":{"40":1}}],["klvv",{"2":{"40":1}}],["keywords",{"0":{"71":1},"2":{"6":1,"69":1,"71":2}}],["符号将两个方法分开",{"2":{"41":1}}],["符号",{"2":{"40":1,"41":1}}],["剔除中横线和",{"2":{"40":1}}],["型号",{"2":{"40":1}}],["查看机器的",{"2":{"40":1}}],["查找图片",{"2":{"12":2}}],["说明",{"2":{"40":1,"51":1}}],["则正常调用",{"2":{"119":1}}],["则返回一个字典",{"2":{"88":1}}],["则用例不会执行",{"2":{"43":1}}],["则用例不执行",{"2":{"41":1}}],["则新增一列标签名为",{"2":{"43":1}}],["则代码不会执行该条用例",{"2":{"42":1}}],["则执行该用例",{"2":{"41":1}}],["则跳过用例不执行",{"2":{"40":1}}],["则在此列备注具体的跳过原因",{"2":{"39":1}}],["或者",{"2":{"40":1}}],["判断当前架构是否为",{"2":{"40":1}}],["拼接",{"2":{"40":1}}],["多个用例文件",{"2":{"68":1}}],["多个机器信息用",{"2":{"47":1}}],["多个架构之间使用",{"2":{"40":1}}],["多个参数以逗号隔开",{"2":{"11":3}}],["架构设计",{"0":{"116":1,"118":1},"1":{"117":1,"118":1,"119":1,"120":1,"121":1,"122":1,"123":1,"124":1,"125":1}}],["架构设计规划",{"0":{"113":1},"1":{"114":1,"115":1,"116":1,"117":1,"118":1,"119":1,"120":1,"121":1,"122":1,"123":1,"124":1,"125":1,"126":1,"127":1,"128":1,"129":1,"130":1,"131":1,"132":1,"133":1,"134":1,"135":1,"136":1,"137":1,"138":1,"139":1,"140":1}}],["架构不跳过",{"2":{"40":1}}],["架构跳过",{"2":{"40":1}}],["架构名",{"2":{"40":1}}],["架构动态等待",{"0":{"21":1}}],["常见的场景为在不同架构上判断是否执行",{"2":{"40":1}}],["某些用例会因为不同的环境判断用例是否执行",{"2":{"40":1}}],["参数",{"2":{"40":2}}],["参数值可以传递任意命令行命令",{"2":{"16":1,"19":1}}],["最后所有的用例类均继承",{"2":{"131":1}}],["最终的用例状态会被标签为",{"2":{"39":1}}],["最大匹配次数",{"2":{"34":1}}],["最大匹配超时",{"2":{"34":1}}],["受到某新需求影响",{"2":{"39":1,"42":1,"43":1}}],["各模块编写思路",{"0":{"128":1},"1":{"129":1,"130":1,"131":1,"132":1,"133":1,"134":1,"135":1,"136":1,"138":1,"139":1,"140":1}}],["各功能以插件的方式接入",{"2":{"117":1}}],["各种代码风格不统一",{"2":{"107":1}}],["各种用例标签",{"2":{"39":1,"40":1,"42":1,"43":1}}],["各架构倍数",{"2":{"21":1}}],["示例",{"2":{"39":1,"40":1,"42":1}}],["而通过",{"2":{"38":1}}],["传统跳过用例的方式是在用例脚本里面给用例添加装饰器",{"2":{"38":1}}],["传统的日志输出方式",{"2":{"9":1}}],["跳过对象",{"2":{"40":1}}],["跳过的原因标签为",{"2":{"40":1}}],["跳过的原因统一标签开头为",{"2":{"39":1}}],["跳过用例可以直接通过修改",{"2":{"133":1}}],["跳过用例",{"0":{"38":1},"1":{"39":1,"40":1,"41":1}}],["跳过原因一栏中填写为",{"2":{"40":1}}],["跳过原因",{"2":{"36":1,"37":1,"38":1,"39":1,"40":1,"42":2,"43":1}}],["因此我们才萌生了对框架结构进行重新设计想法",{"2":{"114":1}}],["因此我们大胆的设想",{"2":{"9":1}}],["因此",{"2":{"106":1,"107":1}}],["因此你仍然可以在虚拟环境中使用命令",{"2":{"53":1}}],["因此若",{"2":{"37":1}}],["目标",{"0":{"115":1}}],["目标字符",{"2":{"34":1}}],["目录之间用空格分割",{"2":{"68":1}}],["目录组合",{"2":{"68":1}}],["目录下划分自己的用例模块",{"2":{"112":1}}],["目录下所有用例",{"2":{"64":1}}],["目录下",{"2":{"37":1}}],["所有的操作步骤都应该有一个对应的方法",{"2":{"129":1}}],["所有的方法按照",{"2":{"129":1}}],["所有的元素操作方法",{"2":{"103":1}}],["所有代码由专人维护",{"2":{"107":1}}],["所有方法以类的形式编写",{"2":{"103":1}}],["所有",{"2":{"37":1}}],["建议分模块",{"2":{"37":1}}],["比如",{"2":{"40":1,"41":1,"50":1,"65":1,"82":1,"104":2,"114":1,"129":2}}],["比如文件管理器",{"2":{"37":1}}],["比如气泡在1秒内消失",{"2":{"34":1}}],["后面会详细讲到",{"2":{"37":1}}],["后置命令行入参钩子",{"0":{"19":1}}],["后置脚本钩子",{"0":{"18":1}}],["后置钩子",{"0":{"17":1},"1":{"18":1,"19":1}}],["列之后的所有列都是一个用例标签",{"2":{"37":1}}],["列为",{"2":{"37":1}}],["第",{"2":{"37":1}}],["也可以对这个页面做进一步划分",{"2":{"129":1}}],["也可以方便对虚拟环境的管理和维护",{"2":{"125":1}}],["也可以是传统的",{"2":{"66":1}}],["也可以是自定义的数字代表用例序号",{"2":{"37":1}}],["也得到了公司领导",{"2":{"114":1}}],["也能自动打印",{"2":{"94":1}}],["也会正常执行",{"2":{"42":1}}],["也就是说我们需要写大量的日志代码",{"2":{"9":1}}],["举例",{"2":{"37":1}}],["取中间的名称作为",{"2":{"37":1}}],["去掉用例序号后的字符串",{"2":{"37":1}}],["quot",{"2":{"37":2,"57":2,"65":2,"67":2}}],["以便方法或用例中能够获取到",{"2":{"132":1}}],["以此控制虚拟环境创建",{"2":{"134":1}}],["以此来获取框架已有的公共配置",{"2":{"132":1}}],["以此类推",{"2":{"104":1}}],["以插件的形式提供功能",{"2":{"115":1}}],["以下简称测试用例",{"2":{"109":1}}],["以下简称测试方法套件",{"2":{"100":1}}],["以保持套件的各方面一致性",{"2":{"105":1}}],["以上写法表示有",{"2":{"77":1}}],["以",{"2":{"37":1,"115":1}}],["使用更简单方便",{"2":{"115":1}}],["使用的框架不同",{"2":{"107":1}}],["使用框架的后置钩子触发结果回填到",{"2":{"73":1}}],["使用框架的前置钩子触发爬取动作生成",{"2":{"73":1}}],["使用逻辑表达式的时候一定要加引号",{"2":{"65":1,"67":1}}],["使用脚手架功能创建用例工程",{"2":{"45":1,"58":1}}],["使用子命令",{"2":{"45":1}}],["使用",{"2":{"40":1,"41":1,"104":1,"117":1}}],["使用说明",{"0":{"36":1}}],["使用方法很简单",{"2":{"12":1}}],["使用方法",{"0":{"12":1,"93":1},"1":{"94":1,"95":1,"96":1}}],["+",{"2":{"34":2,"40":1,"122":1}}],["`japan`",{"2":{"34":1}}],["`korean`",{"2":{"34":1}}],["`german`",{"2":{"34":1}}],["`fr`",{"2":{"34":1}}],["`en`",{"2":{"34":1}}],["`ch`",{"2":{"34":1}}],["返回原始数据",{"2":{"90":1}}],["返回当前屏幕中",{"2":{"88":1}}],["返回识别图片",{"2":{"87":1}}],["返回识别到的所有数据",{"2":{"34":1}}],["返回",{"2":{"41":2}}],["返回图片中识别到的所有字符串",{"2":{"34":1}}],["只需要在这里挂一个装饰器",{"2":{"94":1,"95":1,"96":1}}],["只需要在出口文件加上类装饰器",{"2":{"12":1}}],["只需要加一个装饰器",{"2":{"91":1}}],["只返回第一个",{"2":{"34":1,"90":1}}],["要识别的图片路径",{"2":{"34":1}}],["要识别的模板图片",{"2":{"34":1}}],["并提示用户安装对应插件",{"2":{"123":1}}],["并根据需要将测试结果",{"2":{"119":1}}],["并动态加载",{"2":{"119":1}}],["并在系统关键节点发布对应的版本",{"2":{"104":1}}],["并将截取的右侧作为参数传递给该函数",{"2":{"41":1}}],["并返回其在图片中的坐标",{"2":{"34":1}}],["并且所有调用的方法会以",{"2":{"12":1}}],["识别插件",{"2":{"98":1}}],["识别语言",{"2":{"90":1}}],["识别当前屏幕的所有文字内容",{"0":{"86":1}}],["识别一个字符串或多个字符串",{"2":{"34":1}}],["识别率",{"2":{"34":1}}],["结果",{"2":{"34":2}}],["结尾的",{"2":{"11":1}}],["预期值",{"2":{"34":4}}],["不需要修改用例脚本",{"2":{"133":1}}],["不需要用户去了解和思考哪些插件适合哪种测试类型",{"2":{"124":1}}],["不再提供",{"2":{"122":1}}],["不安装插件的情况下框架也能正常运行",{"2":{"115":1}}],["不适合对外开源发布",{"2":{"107":1}}],["不涉及用例逻辑",{"2":{"107":1}}],["不受需求变更影响",{"2":{"107":1}}],["不兼容",{"2":{"107":1}}],["不相为谋",{"2":{"107":1}}],["不同",{"2":{"107":1}}],["不同组之间相同执行",{"2":{"78":1}}],["不做复杂步骤的封装",{"2":{"103":1}}],["不存在复杂步骤的堆叠封装",{"2":{"107":1}}],["不存在",{"2":{"34":2}}],["不显示",{"2":{"5":1}}],["存在跳过标签则用例也不会被执行",{"2":{"39":1}}],["存在",{"2":{"34":2}}],["应用名字",{"2":{"34":2}}],["元素不应该存在",{"2":{"34":1}}],["元素不存在",{"2":{"34":1}}],["元素识别动态等待",{"0":{"22":1}}],["匹配度",{"2":{"34":1,"90":1}}],["匹配元素的格式",{"2":{"34":2}}],["匹配相似度",{"2":{"34":2}}],["是在",{"2":{"107":1}}],["是不同的测试方法套件版本",{"2":{"104":1}}],["是基于",{"2":{"100":1,"107":1,"109":1}}],["是",{"2":{"47":1,"114":1}}],["是否分模块维护取决于应用的用例复杂度",{"2":{"37":1}}],["是否递归查找",{"2":{"34":1}}],["是类装饰器",{"2":{"12":1}}],["断言",{"0":{"131":1}}],["断言方法类",{"2":{"127":1}}],["断言资源",{"2":{"127":1}}],["断言文案不存在",{"2":{"34":1}}],["断言文案存在",{"2":{"34":1}}],["断言文件不存在",{"2":{"34":1}}],["断言文件存在",{"2":{"34":1}}],["断言结果为假",{"2":{"34":1}}],["断言结果为真",{"2":{"34":1}}],["断言不相等",{"2":{"34":1}}],["断言相等",{"2":{"34":1}}],["断言应用进程不存在",{"2":{"34":1}}],["断言应用进程状态",{"2":{"34":4}}],["断言应用进程存在",{"2":{"34":1}}],["断言元素不存在",{"2":{"34":1}}],["断言元素存在",{"2":{"34":1}}],["断言语句",{"0":{"32":1},"1":{"33":1,"34":1}}],["~",{"2":{"34":2,"87":1,"89":1}}],["文件来控制用例是否跳过",{"2":{"133":1}}],["文件来管理跳过用例则会方便很多",{"2":{"38":1}}],["文件里面写关键词的表达式",{"2":{"71":1}}],["文件里面写标签的表达式",{"2":{"70":1}}],["文件里面跳过原因列是否存在跳过标签",{"2":{"39":1}}],["文件管理的标签",{"2":{"66":1}}],["文件管理器",{"2":{"49":1,"129":2}}],["文件几乎是唯一能满足所有的要求的文件格式",{"2":{"44":1}}],["文件格式",{"0":{"44":1}}],["文件中定义用例对象的标签",{"2":{"133":1}}],["文件中自定义用例集驱动执行",{"2":{"69":1}}],["文件中所有的用例",{"2":{"63":1}}],["文件中查找是否有同名函数",{"2":{"41":1}}],["文件中",{"2":{"40":1}}],["文件中新增一列为",{"2":{"38":1}}],["文件中写入标签",{"2":{"36":1}}],["文件太多了也是一个很糟糕的事情",{"2":{"37":1}}],["文件建议放在一个",{"2":{"37":1}}],["文件",{"2":{"37":1,"70":1,"71":1,"73":2}}],["文件的文件名",{"2":{"37":1}}],["文件去掉首字符串",{"2":{"37":1}}],["文件存在",{"2":{"34":1}}],["文件名称",{"2":{"65":1}}],["文件名就应为",{"2":{"37":1}}],["文件名",{"2":{"34":1}}],["文件全路径",{"2":{"34":1}}],["文件全路径或目录",{"2":{"34":1}}],["文件不存在",{"2":{"34":1}}],["文管方法库出口",{"2":{"12":1}}],["期望结果",{"2":{"34":2}}],["期望元素不存在",{"2":{"34":1}}],["期望元素存在",{"2":{"34":1}}],["期望不存在文件路径",{"2":{"34":1}}],["期望存在文件路径",{"2":{"34":1}}],["期望界面不存在模板图片",{"2":{"34":1}}],["期望界面存在模板图片",{"2":{"34":1}}],["屏幕上匹配不存在图片",{"2":{"34":1}}],["屏幕上匹配图片",{"2":{"34":2}}],["默认环境变量管理文件",{"0":{"134":1},"2":{"127":1}}],["默认日志输出级别为",{"2":{"97":1}}],["默认是在",{"2":{"97":1}}],["默认情况下是会将识别到的多个目标组装成字典返回",{"2":{"90":1}}],["默认端口号为",{"2":{"82":1}}],["默认值为",{"2":{"34":1}}],["默认为false",{"2":{"90":1}}],["默认为0",{"2":{"90":1}}],["默认为ch",{"2":{"90":1}}],["默认为",{"2":{"34":1}}],["默认不间隔",{"2":{"34":1}}],["默认关闭",{"2":{"5":1}}],["单位秒",{"2":{"34":3}}],[">不为假",{"2":{"34":1}}],[">不为真",{"2":{"34":1}}],[">不相等",{"2":{"34":2}}],[">是否相等",{"2":{"34":2}}],[">与实际值",{"2":{"34":4}}],[">",{"2":{"34":7}}],[">=",{"2":{"34":3}}],["例",{"2":{"34":3}}],["例如",{"2":{"9":1,"34":1,"40":1}}],["on",{"2":{"129":1,"130":1}}],["only",{"2":{"34":1}}],["or",{"2":{"34":1,"65":1,"66":3,"67":9,"70":2,"71":2}}],["ocr",{"2":{"34":4,"79":1,"82":2,"86":3,"87":1,"88":1,"89":1,"90":4,"98":1}}],["os",{"2":{"34":5}}],["outcome",{"2":{"6":1}}],["8888",{"2":{"82":1,"86":1}}],["8890",{"2":{"82":1}}],["8",{"0":{"136":1},"2":{"34":1,"49":1,"94":1,"95":1,"96":1,"98":1,"114":1}}],["继承了",{"2":{"131":1}}],["继承了基类baselog",{"2":{"94":1,"95":1,"96":1}}],["继承",{"2":{"33":1,"131":1}}],["用户只需要创建符合框架定义的文件命名规范脚本文件",{"2":{"140":1}}],["用户只需要关注用例",{"2":{"117":1}}],["用户可直接通过",{"2":{"104":1}}],["用于用例开发调试过程中",{"2":{"136":1}}],["用于统一存放用例步骤的操作方法",{"2":{"129":1}}],["用于统一管理命令行参数驱动用例执行",{"2":{"121":1}}],["用于虚拟环境安装",{"2":{"51":1}}],["用于属性定位相关操作",{"2":{"49":1}}],["用于保存用例标签",{"2":{"37":1}}],["用例标签管理文件",{"0":{"133":1},"2":{"127":1}}],["用例标签化管理插件",{"2":{"98":1}}],["用例示例",{"2":{"127":2}}],["用例工程配置对象继承",{"2":{"132":1}}],["用例工程配置模块建议继承",{"2":{"122":1}}],["用例工程的断言方法类",{"2":{"131":1}}],["用例工程名称",{"2":{"127":1}}],["用例工程结构",{"0":{"127":1}}],["用例工程支持一键创建",{"2":{"126":1}}],["用例工程设计",{"0":{"126":1},"1":{"127":1,"128":1,"129":1,"130":1,"131":1,"132":1,"133":1,"134":1,"135":1,"136":1}}],["用例层负责管理用例逻辑",{"2":{"130":1}}],["用例层目录",{"2":{"127":1}}],["用例层",{"0":{"130":1},"2":{"117":1}}],["用例层直接",{"2":{"117":1}}],["用例整体打包交付之后",{"2":{"115":1}}],["用例开发环境下更新版本不方便",{"2":{"114":1}}],["用例失败录屏插件",{"2":{"98":1}}],["用例文件",{"2":{"68":1}}],["用例驱动方式",{"0":{"61":1},"1":{"62":1,"63":1,"64":1,"65":1,"66":1,"67":1,"68":1}}],["用例执行所需要的资源",{"2":{"127":1}}],["用例执行完成后生成多种测试报告",{"2":{"119":1}}],["用例执行过程中动态调用",{"2":{"119":1}}],["用例执行驱动的命令",{"2":{"51":1}}],["用例执行时判断",{"2":{"39":1}}],["用例需要废弃",{"2":{"43":1}}],["用例id",{"2":{"42":1,"43":1}}],["用例脚本的",{"2":{"37":1}}],["用例中所需要的方法从",{"2":{"112":1}}],["用例中通过",{"2":{"33":1}}],["用例中使用方法",{"0":{"33":1}}],["用例基类",{"2":{"33":2,"127":1}}],["用两对大括号把函数的参数括起来",{"2":{"12":1}}],["几乎满足了所有的断言场景",{"2":{"32":1}}],["自定义执行",{"0":{"69":1},"1":{"70":1,"71":1,"72":1,"73":1}}],["自定义条件判断跳过的函数写在此文件中",{"2":{"41":1}}],["自定义跳过",{"0":{"41":1}}],["自定义断言类",{"2":{"34":1}}],["自带多种断言语句",{"2":{"32":1}}],["自动安装框架及改测试类型需要的插件依赖",{"2":{"124":1}}],["自动统计分析每次",{"2":{"98":1}}],["自动化插件",{"2":{"98":1}}],["自动化测试框架",{"2":{"115":1}}],["自动化测试框架操作方法封装写法",{"2":{"9":1}}],["自动化测试用例",{"0":{"108":1},"1":{"109":1,"110":1,"111":1,"112":1},"2":{"109":1}}],["自动化测试方法套件",{"0":{"99":1},"1":{"100":1,"101":1,"102":1,"103":1,"104":1,"105":1,"106":1,"107":1},"2":{"100":1}}],["自动化测试模块",{"2":{"98":1}}],["自动化测试",{"2":{"55":2}}],["自动输出日志的类名称",{"2":{"97":1}}],["自动输出日志",{"0":{"94":1}}],["自动输出的日志",{"2":{"12":1}}],["自动识别当前整个屏幕的所有内容",{"2":{"86":1}}],["自动将函数说明打印为日志",{"2":{"11":3}}],["自动的将函数说明作为日志打印出来",{"2":{"9":1}}],["umtk",{"0":{"99":1,"107":1},"1":{"100":1,"101":1,"102":1,"103":1,"104":1,"105":1,"106":1,"107":1},"2":{"100":1,"102":1,"103":1,"104":2,"107":4,"109":1,"112":2}}],["ut001234",{"2":{"73":4}}],["utf",{"2":{"34":1,"94":1,"95":1,"96":1}}],["ui操作远程对象",{"0":{"48":1},"1":{"49":1}}],["ui",{"2":{"46":2,"55":2,"98":1,"111":1,"127":1}}],["union",{"2":{"34":3}}],["uniontech",{"2":{"34":1,"94":1,"95":1,"96":1}}],["usable",{"2":{"98":1}}],["usr",{"2":{"34":1,"94":1,"95":1,"96":1}}],["user4",{"2":{"77":2,"78":2}}],["user3",{"2":{"77":2,"78":2}}],["user2",{"2":{"77":2,"78":2}}],["user1",{"2":{"77":2,"78":2}}],["user=",{"2":{"49":1}}],["user=user",{"2":{"49":1}}],["user",{"2":{"29":1,"30":1,"31":1,"49":1,"73":4,"97":1}}],["username",{"2":{"27":1}}],["uos",{"0":{"99":1,"108":1},"1":{"100":1,"101":1,"102":1,"103":1,"104":1,"105":1,"106":1,"107":1,"109":1,"110":1,"111":1,"112":1},"2":{"12":1,"49":1,"100":4,"107":1,"109":3}}],["普通权限执行",{"0":{"25":1,"29":1}}],["增加了等待的日志",{"2":{"21":1}}],["优化",{"2":{"21":1}}],["可实现群控测试机执行",{"2":{"115":1}}],["可视化配置",{"0":{"138":1},"2":{"115":1}}],["可视化驱动",{"2":{"98":1}}],["可定制化依赖",{"2":{"115":1}}],["可能存在当前屏幕中有多个目标",{"2":{"90":1}}],["可能包含多条日志信息",{"2":{"9":1}}],["可自定义多个参数之间的连接符",{"2":{"41":1}}],["可以通过系统环境变量或修改",{"2":{"122":1}}],["可以根据测试项目类型安装对应的依赖",{"2":{"115":1}}],["可以在通过命令行快速驱动测试用例执行",{"2":{"117":1}}],["可以在无网络环境下直接运行",{"2":{"115":1}}],["可以在方法层",{"2":{"112":1}}],["可以对外开源发布",{"2":{"107":1}}],["可以调用",{"2":{"103":1}}],["可以修改为从0到1的数",{"2":{"90":1}}],["可以自动安装对应的依赖集",{"2":{"57":1}}],["可以自动加载虚拟环境并驱动用例工程",{"2":{"52":1}}],["可以激活虚拟环境",{"2":{"53":1}}],["可以随意新增",{"2":{"37":1}}],["可以完全代替之前这样的写法",{"2":{"21":1}}],["german",{"2":{"90":1}}],["get",{"2":{"34":3}}],["getmembers",{"2":{"10":1}}],["group2",{"2":{"77":1,"78":1}}],["group1",{"2":{"77":1,"78":2}}],["group",{"2":{"77":1}}],["gui",{"2":{"34":7,"49":3,"57":2,"98":1,"112":1}}],["gpl",{"2":{"34":1}}],["github",{"2":{"79":1,"91":1}}],["git",{"2":{"16":1,"19":1,"98":1,"117":1}}],["home",{"2":{"97":1}}],["html",{"2":{"98":2}}],["https",{"2":{"79":1,"91":1}}],["http",{"2":{"55":1,"57":1}}],["htop",{"2":{"16":1,"19":1,"26":1,"30":1,"31":1}}],["h",{"2":{"50":1}}],["has",{"2":{"7":1}}],["就能自动日志输出类里面所有的方法的功能说明",{"2":{"91":1}}],["就像写",{"2":{"16":1,"19":1}}],["就可以实现自动输出日志了",{"2":{"12":1}}],["入参",{"2":{"16":1,"19":1}}],["├──",{"2":{"15":3,"18":3,"64":4,"102":9,"111":19,"127":17}}],["框架预设一些文件接口规范",{"2":{"140":1}}],["框架的安装命令可以根据用例工程所属的测试类型",{"2":{"124":1}}],["框架的断言库",{"2":{"33":1}}],["框架可以正常运行",{"2":{"123":1}}],["框架底层对各功能插件提供",{"2":{"123":1}}],["框架总线接口",{"0":{"123":1}}],["框架提供驱动命令",{"2":{"121":1}}],["框架提供驱动执行的命令",{"2":{"117":1}}],["框架驱动命令传递命令行参数给执行管理器",{"2":{"119":1}}],["框架也提供初始化用例工程的功能",{"2":{"117":1}}],["框架源代码不直接呈现在用户面前",{"2":{"117":1}}],["框架代码及插件库以",{"2":{"117":1}}],["框架层提供总线服务",{"2":{"117":1}}],["框架和插件库独立维护更新",{"2":{"115":1}}],["框架而独立使用",{"2":{"107":1}}],["框架自动加载并执行对应标签的用例",{"2":{"73":1}}],["框架会在用例执行之前执行",{"2":{"16":1,"19":1}}],["框架会在用例执行之前自动加载并执行",{"2":{"15":1,"18":1}}],["框架支持通过",{"2":{"16":1,"19":1}}],["框架默认生成",{"2":{"0":1}}],["前置命令行入参钩子",{"0":{"16":1}}],["前置脚本钩子",{"0":{"15":1}}],["前置钩子",{"0":{"14":1},"1":{"15":1,"16":1}}],["前后钩子",{"0":{"13":1},"1":{"14":1,"15":1,"16":1,"17":1,"18":1,"19":1}}],["这些元素操作方法可以用于自动化用例调用",{"2":{"100":1}}],["这是在类外面打",{"2":{"96":3}}],["这是我想再输出的其他",{"2":{"95":3}}],["这个命令可以在系统原生环境中使用",{"2":{"51":1}}],["这样在用例中能够使用统一的断言语句",{"2":{"131":1}}],["这样在日志输出的时候就能把调用函数时参数的值输出出来",{"2":{"12":1}}],["这样这条用例即使同时标记了",{"2":{"42":1}}],["这种方式需要修改用例代码",{"2":{"38":1}}],["这就是我们参考django",{"2":{"12":1}}],["japan",{"2":{"90":1}}],["job",{"2":{"15":2,"16":3,"18":2,"19":3,"73":4}}],["jinja2",{"2":{"12":1}}],["json",{"0":{"0":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1},"2":{"0":3,"2":1,"3":1,"4":1,"6":1,"7":1}}],["和上面逻辑相反",{"2":{"40":1}}],["和",{"0":{"107":1},"2":{"12":1,"42":2,"78":1,"107":2,"109":1,"114":1}}],["没错",{"2":{"12":1}}],["函数名等等都可以做为关键词",{"2":{"65":1}}],["函数名",{"2":{"40":1}}],["函数功能说明中",{"2":{"12":1}}],["函数说明以及函数操作日志",{"2":{"9":1}}],["细心的同学可能还发现了一个小细节",{"2":{"12":1}}],["展示在",{"2":{"12":1}}],["静态方法",{"2":{"12":1}}],["包的形式提供框架能力",{"2":{"115":1}}],["包含客户端和服务端",{"2":{"79":1}}],["包含",{"2":{"78":1}}],["包含静态方法",{"2":{"10":1}}],["包括实例方法",{"2":{"12":1}}],["之后",{"2":{"12":1,"50":1,"51":1}}],["|",{"2":{"12":2}}],["md",{"2":{"102":1,"111":1}}],["movie",{"2":{"102":1}}],["mousekey",{"2":{"98":1}}],["mode",{"2":{"34":6}}],["music",{"2":{"65":5,"68":6,"102":3}}],["multiple=multiple",{"2":{"12":1,"34":2}}],["multiple=false",{"2":{"12":1}}],["multiple",{"2":{"12":1,"34":2}}],["my",{"2":{"33":1,"45":2,"53":1,"58":2,"64":1,"127":2,"129":1,"130":1}}],["mycasemethod",{"2":{"129":1,"130":2}}],["mycase",{"2":{"33":1,"64":2,"127":3,"130":2,"131":2}}],["maintainer",{"2":{"105":1}}],["main",{"2":{"49":1,"94":1,"95":1,"96":1}}],["manage",{"2":{"42":1,"98":1,"129":1,"130":1}}],["manager",{"2":{"34":1,"49":2,"102":2,"103":2,"104":1,"111":2,"112":1,"130":1}}],["mark",{"2":{"38":1,"66":1,"98":1}}],["max",{"2":{"34":7}}],["match",{"2":{"34":11}}],["machine",{"2":{"27":1}}],["map",{"2":{"12":1}}],["mips64",{"2":{"21":1}}],["method",{"2":{"11":1,"12":3,"15":1,"18":1,"33":4,"94":12,"95":2,"100":1,"102":4,"111":5,"112":1,"127":4,"129":3,"130":2,"131":4}}],["metadata",{"2":{"3":1,"6":1}}],["message",{"2":{"7":1}}],["注意给元组类型",{"2":{"97":1}}],["注意这里",{"2":{"94":1,"95":1,"96":1}}],["注意ip和端口要和你的服务端ip对应",{"2":{"86":1}}],["注意",{"2":{"12":1,"57":1,"65":1,"67":1,"68":1}}],["num",{"2":{"98":1}}],["number=max",{"2":{"34":2}}],["number=match",{"2":{"34":2}}],["number",{"2":{"34":9}}],["network",{"2":{"34":9}}],["not",{"2":{"34":13,"40":2,"65":1,"66":1}}],["none",{"2":{"34":26}}],["nodeid",{"2":{"6":1,"7":1}}],["n",{"2":{"27":1}}],["name",{"2":{"11":3,"40":3,"49":1,"94":2,"95":2,"96":2,"97":4,"98":1}}],["==",{"2":{"34":5,"49":1,"94":1,"95":1,"96":1}}],["=",{"2":{"11":4,"12":1,"21":5,"34":36,"49":2,"82":1,"86":2,"94":1,"95":1,"96":1,"97":3}}],["动态等待",{"0":{"20":1},"1":{"21":1,"22":1}}],["动态添加日志装饰器",{"2":{"10":1}}],["动态给该类下所有的函数及父类函数添加日志装饰器",{"2":{"10":1}}],["给符合条件的函数",{"2":{"10":1}}],["实际结果",{"2":{"34":2}}],["实例",{"2":{"12":1}}],["实例方法",{"2":{"10":1}}],["实现插件依赖的定制化",{"2":{"117":1}}],["实现步骤",{"2":{"10":1}}],["实现原理",{"0":{"10":1}}],["类似于单元测试",{"2":{"106":1}}],["类名包含什么字符",{"2":{"97":1}}],["类名以什么结尾",{"2":{"97":1}}],["类名以什么开头",{"2":{"97":1}}],["类名",{"2":{"65":1}}],["类",{"2":{"10":1,"94":3,"95":1}}],["类方法",{"2":{"10":1,"12":1}}],["类里面一个函数只包含一个操作或多次调用的一系列可合并的操作",{"2":{"9":1}}],["在浏览器中输入一些配置后即可驱动测试用例执行",{"2":{"115":1}}],["在继承",{"2":{"115":1}}],["在现有框架下",{"2":{"114":1}}],["在公司的多个自动化流程中运行得很好",{"2":{"114":1}}],["在公司内部已经被大量的自动化测试项目使用",{"2":{"114":1}}],["在操作方法多了之后",{"2":{"106":1}}],["在同一个大版本中",{"2":{"104":1}}],["在不同的代码仓库中",{"2":{"104":1}}],["在外层其他直接使用",{"0":{"96":1}}],["在全屏指定查找某个字符串的坐标",{"0":{"88":1}}],["在根目录下定义",{"2":{"70":1,"71":1}}],["在服务端通过调用",{"2":{"46":1}}],["在远程测试机上部署一个完整的",{"2":{"46":1}}],["在用例执行过程中控制远程机器执行复杂的",{"2":{"46":1}}],["在用例收集阶段会以第一个",{"2":{"41":1}}],["在用例工程根目录下存放",{"2":{"41":1}}],["在用例工程目录下存放一个",{"2":{"15":1,"18":1}}],["在用例工程目录下生成报告文件",{"2":{"0":1}}],["在子项目目录下新建",{"2":{"37":1}}],["在",{"2":{"36":1,"38":1,"40":1,"41":1,"133":1}}],["在一段时间内截图多张图片进行识别",{"2":{"34":1}}],["在报告中更能一目了然的看到用例执行步骤",{"2":{"12":1}}],["在屏幕中相似度大于",{"2":{"12":2}}],["在应用库",{"2":{"12":1}}],["在此装饰器中我们能动态的捕获所调用函数的功能说明",{"2":{"10":1}}],["核心原理",{"2":{"10":1}}],["的路径",{"2":{"132":1}}],["的思路",{"2":{"129":1}}],["的框架下进行开发的",{"2":{"107":1}}],["的公共方法库",{"0":{"107":1},"2":{"107":1}}],["的内容",{"2":{"87":1}}],["的用例",{"2":{"42":1}}],["的脚本",{"2":{"15":1,"18":1}}],["的模板语法设计出的日志模板语法",{"2":{"12":1}}],["的坐标",{"2":{"12":2,"88":1}}],["的",{"2":{"11":1,"98":1,"131":1}}],["的方式",{"2":{"10":1,"12":1}}],["的日志系统",{"2":{"9":1}}],["的想法",{"2":{"9":1}}],["那真是妙啊~",{"2":{"9":1}}],["从任务栏启动文件管理器",{"2":{"130":1}}],["从而驱动测试用例执行",{"2":{"121":1}}],["从而减少大量日志代码量和重复编写",{"2":{"9":1}}],["从开源至今发布了",{"2":{"114":1}}],["从pms测试单中爬取用例集",{"2":{"73":1}}],["从第",{"2":{"37":1}}],["从上面的例子也可以看出来",{"2":{"9":1}}],["具有较高的重复度",{"2":{"9":1}}],["通过配置的接口进行数据回填",{"2":{"119":1}}],["通过命令行参数控制",{"2":{"117":1}}],["通过不同的参数控制返回不同的值",{"2":{"79":1}}],["通过获取该函数返回的布尔值",{"2":{"41":1}}],["通过ocr识别到不应存在的文案",{"2":{"34":2}}],["通过ocr未识别到",{"2":{"34":3}}],["通过观察前面的例子",{"2":{"12":1}}],["通过",{"2":{"10":2}}],["通过日志输出器将其输出即可",{"2":{"10":1}}],["通过给类加上一个装饰器",{"2":{"10":1}}],["通过经验观察",{"2":{"9":1}}],["通常是这样的",{"2":{"9":1}}],["省略代码部分",{"2":{"9":1}}],["l1",{"2":{"66":3}}],["lang",{"2":{"34":1,"90":1}}],["lang=lang",{"2":{"34":2}}],["lang=",{"2":{"34":2,"90":1}}],["lambda",{"2":{"12":1,"34":2}}],["leftmethod",{"2":{"129":1}}],["len",{"2":{"34":4}}],["level日志级别",{"2":{"97":1}}],["level",{"2":{"11":1,"97":1}}],["list",{"2":{"34":1}}],["license",{"2":{"34":1,"94":2,"95":2,"96":2,"102":1,"111":1}}],["lineno",{"2":{"6":1}}],["linuxdeepin",{"2":{"79":1,"91":1,"114":1}}],["linux",{"2":{"3":1,"55":3,"57":1,"98":1,"115":1}}],["ltd",{"2":{"34":1,"94":1,"95":1,"96":1}}],["l",{"2":{"27":1,"29":1}}],["ls",{"2":{"25":1,"27":1,"29":1}}],["loogarch64",{"2":{"40":2}}],["loongarch64",{"2":{"21":1}}],["lower",{"2":{"34":1}}],["logs",{"2":{"97":1}}],["log装饰器自动打印",{"2":{"94":1,"95":1}}],["log",{"2":{"10":1,"11":1,"12":5,"34":2,"94":3,"95":3,"96":6,"97":4}}],["logger直接调用",{"2":{"96":1}}],["logger",{"2":{"9":1,"12":1,"34":12,"94":2,"95":5,"96":5}}],["点击某个元素",{"2":{"9":2,"12":1}}],["dragon",{"2":{"98":1}}],["driver",{"2":{"73":5,"98":1,"121":2}}],["d",{"2":{"98":1}}],["dbus",{"2":{"55":1}}],["dmidecode",{"2":{"40":1}}],["dict",{"2":{"34":4}}],["ddefilemanagermethod",{"2":{"103":2,"104":1,"112":1}}],["dde",{"2":{"34":1,"49":3,"102":2,"103":2,"104":1,"111":4,"112":1,"129":1,"130":2}}],["during",{"2":{"34":2}}],["duration",{"2":{"2":1}}],["dogtail",{"2":{"49":1,"98":1,"129":3}}],["do",{"2":{"16":2,"19":2}}],["dock",{"2":{"49":1,"111":4,"129":1,"130":1}}],["doc",{"2":{"10":1}}],["dfm",{"2":{"12":2,"111":2}}],["deepin",{"2":{"102":4}}],["desc",{"2":{"98":1}}],["desktop",{"2":{"34":2,"87":1,"89":1}}],["debug",{"2":{"11":1,"94":1,"95":3,"96":3,"97":1,"127":1,"136":1}}],["default=false",{"2":{"90":1}}],["default",{"2":{"90":1}}],["def",{"2":{"9":1,"12":2,"33":1,"34":15,"49":2,"63":2,"94":6,"95":1,"130":1,"131":1}}],["需要在每个函数里面主动编写日志输出代码",{"2":{"9":1}}],["背景",{"0":{"9":1,"114":1}}],["id",{"2":{"73":5}}],["id4",{"2":{"67":3}}],["id3",{"2":{"67":3,"70":1,"71":1}}],["id2",{"2":{"67":3,"70":1,"71":1}}],["id1",{"2":{"67":3}}],["identifier",{"2":{"34":1,"94":1,"95":1,"96":1}}],["issue",{"2":{"105":1}}],["isinstance",{"2":{"34":4}}],["is",{"2":{"34":6}}],["ifixed",{"2":{"42":2}}],["if",{"2":{"34":23,"49":1,"94":1,"95":1,"96":1}}],["ip4",{"2":{"77":2,"78":2}}],["ip3",{"2":{"77":2,"78":2}}],["ip2",{"2":{"77":2,"78":2}}],["ip1",{"2":{"77":2,"78":2}}],["ip=",{"2":{"49":1}}],["ip=ip",{"2":{"49":1}}],["ip",{"2":{"27":1,"29":1,"30":1,"31":1,"49":1,"86":1}}],["imagecenter",{"2":{"98":1}}],["image",{"2":{"12":4,"34":6,"127":1,"132":1}}],["import",{"2":{"11":1,"12":2,"21":2,"25":1,"26":1,"27":1,"29":1,"30":1,"31":1,"33":3,"34":12,"49":2,"82":3,"86":2,"94":3,"95":3,"96":3,"97":3,"103":1,"104":1,"112":2,"117":1,"129":2,"130":2,"131":3}}],["in",{"2":{"34":2}}],["int",{"2":{"34":18}}],["ini",{"2":{"111":2,"122":1,"127":1}}],["inix86",{"2":{"21":1}}],["init",{"2":{"7":1,"45":2,"49":1,"58":1,"64":1,"102":3,"111":4,"126":1,"127":2}}],["install",{"2":{"16":1,"19":1,"26":1,"30":1,"31":1,"57":6,"81":1,"84":1,"92":1,"104":1}}],["inspect",{"2":{"10":1}}],["info",{"2":{"9":1,"11":2,"12":1,"34":11,"95":2,"96":2,"97":1}}],["items",{"2":{"34":2}}],["it",{"2":{"7":1}}],["auto",{"2":{"49":3}}],["autotest",{"2":{"45":2,"58":2,"100":1}}],["amp",{"2":{"40":3,"41":5}}],["album",{"2":{"37":2}}],["all",{"2":{"34":5}}],["allure",{"2":{"12":2}}],["and",{"2":{"34":3,"65":4,"66":1}}],["any",{"2":{"34":3}}],["arrch64",{"2":{"40":1}}],["args",{"2":{"34":7}}],["arch",{"2":{"3":2}}],["actual",{"2":{"34":10}}],["as",{"2":{"34":3}}],["assertionerror",{"2":{"34":18}}],["assertmethod",{"2":{"33":5,"131":5}}],["assertx",{"2":{"33":1}}],["assert",{"2":{"33":6,"34":18,"111":1,"127":2,"130":1,"131":9,"132":1}}],["abspath=",{"2":{"87":1,"89":1}}],["abspath=config",{"2":{"49":1}}],["abspath=pic",{"2":{"34":2}}],["abspath=picture",{"2":{"34":2}}],["abspath=none",{"2":{"34":2}}],["abspath",{"2":{"34":9,"49":1}}],["aarch64",{"2":{"21":1,"40":4,"41":1}}],["apache",{"2":{"94":1,"95":1,"96":1}}],["apt",{"2":{"16":1,"19":1,"26":1,"30":1,"31":1}}],["app",{"2":{"12":5,"33":1,"34":10,"64":1}}],["appmethod",{"2":{"9":1,"12":2}}],["attr",{"2":{"9":1,"12":1,"34":2,"49":3}}],["a",{"2":{"7":1}}],["button",{"2":{"98":1}}],["bus",{"2":{"98":1}}],["btn",{"2":{"49":1,"129":1}}],["bool",{"2":{"34":4,"90":2}}],["bin",{"2":{"34":1,"94":1,"95":1,"96":1}}],["basemethod",{"2":{"129":2}}],["baselog",{"2":{"94":2,"95":2,"96":2}}],["base",{"2":{"33":1,"64":1,"94":6,"111":2,"127":2,"129":1,"130":1,"131":2}}],["basecase",{"2":{"33":3,"130":2,"131":5}}],["bashpip",{"2":{"57":5}}],["bashpython3",{"2":{"42":1}}],["bash$",{"2":{"53":1,"60":2,"62":2,"63":4,"64":2,"65":2,"66":2,"67":2,"68":6,"75":3,"78":2}}],["bash",{"2":{"47":1}}],["bashcd",{"2":{"45":1,"58":1}}],["bashmkdir",{"2":{"45":1,"58":1}}],["bashmy",{"2":{"15":1,"18":1}}],["bashyouqu3",{"2":{"16":2,"19":2,"47":1,"50":2,"51":1,"52":1,"73":2}}],["bash>>",{"2":{"12":1}}],["bar",{"2":{"3":1,"6":1}}],["by",{"2":{"9":1,"12":1,"34":6,"49":3}}],["because",{"2":{"7":1}}],["警告信息",{"2":{"7":1}}],["收集器节点的列表",{"2":{"5":1}}],["source",{"2":{"79":1,"91":1}}],["software",{"2":{"34":1,"94":2,"95":2,"96":2}}],["smoke",{"2":{"64":4,"66":2}}],["slaves",{"2":{"47":3}}],["slaves对象提供远程机器信息",{"0":{"47":1}}],["sleep",{"2":{"21":3}}],["systemctl",{"2":{"75":1}}],["system",{"2":{"40":1}}],["s",{"2":{"40":1}}],["skipif",{"2":{"40":8,"41":6}}],["skiped",{"2":{"39":1}}],["skip",{"2":{"36":1,"38":1,"39":2,"42":3,"43":1}}],["skipped",{"2":{"4":1}}],["similarity=similarity",{"2":{"34":2}}],["similarity=0",{"2":{"34":2,"90":1}}],["similarity",{"2":{"34":1,"90":1}}],["screen",{"2":{"34":8}}],["spdx",{"2":{"34":2,"94":2,"95":2,"96":2}}],["ssh",{"2":{"27":1,"75":3}}],["sw64",{"2":{"40":4}}],["sw",{"2":{"21":1}}],["sudo权限执行",{"0":{"26":1,"30":1}}],["sudo",{"2":{"16":1,"19":1,"26":1,"30":1,"31":1,"40":1,"75":1}}],["summary",{"0":{"4":1},"2":{"2":2}}],["shell$",{"2":{"126":1}}],["shellpip",{"2":{"104":1}}],["shelluos",{"2":{"102":1,"111":1}}],["shellocr",{"2":{"90":1}}],["shellautotest",{"2":{"64":1,"127":1}}],["shell",{"0":{"53":1},"2":{"16":1,"19":1,"51":1,"53":2}}],["str",{"2":{"34":6}}],["step",{"2":{"12":1}}],["static",{"2":{"94":4,"95":2,"127":1,"132":1}}],["staticmethod",{"2":{"34":14,"94":2,"95":1}}],["status",{"2":{"34":2,"130":1}}],["start",{"2":{"15":2,"16":3,"18":1,"73":2}}],["startswith",{"2":{"11":1,"97":2}}],["stage",{"2":{"6":3}}],["server",{"2":{"81":1,"82":8,"86":1}}],["send2pms",{"2":{"73":2}}],["secret",{"2":{"27":1}}],["setting",{"2":{"11":5,"34":6,"82":2,"86":3,"94":2,"95":2,"96":2,"97":6,"122":2}}],["setattr",{"2":{"10":1}}],["setup",{"2":{"6":1}}],["self",{"2":{"9":1,"12":1,"33":3,"49":4,"63":2,"94":8,"129":1,"130":2,"131":1}}],["fr",{"2":{"90":1}}],["from",{"2":{"12":2,"33":3,"34":14,"49":2,"82":2,"86":1,"94":3,"95":3,"96":3,"112":1,"129":2,"130":2,"131":3}}],["false",{"2":{"34":11,"41":2}}],["fail",{"2":{"6":2}}],["failed",{"2":{"4":1,"6":1}}],["float",{"2":{"34":13,"90":1}}],["fixture",{"2":{"127":1}}],["fixed",{"2":{"36":1,"42":3,"43":1}}],["filter",{"2":{"34":2}}],["file",{"2":{"34":14,"49":2,"97":2,"102":2,"103":2,"104":1,"111":2,"112":1,"129":1,"130":2}}],["filecopyrighttext",{"2":{"34":1,"94":1,"95":1,"96":1}}],["first=true",{"2":{"90":2}}],["first=return",{"2":{"34":2}}],["first=false",{"2":{"34":2}}],["first",{"2":{"34":3,"90":1}}],["find",{"2":{"12":4,"34":6}}],["f",{"2":{"12":1,"34":34,"68":6}}],["funnylog2",{"2":{"98":1}}],["funnylog",{"0":{"91":1},"1":{"92":1,"93":1,"94":1,"95":1,"96":1,"97":1},"2":{"11":1,"91":1,"92":1,"94":3,"95":3,"96":3,"97":3}}],["func",{"2":{"10":1}}],["foo0",{"2":{"6":1}}],["foo",{"2":{"3":1,"6":3,"7":2}}],["汇总信息",{"2":{"4":1}}],["2024",{"2":{"114":1}}],["2021",{"2":{"114":1}}],["2023",{"2":{"34":1,"94":1,"95":1,"96":1,"114":1}}],["28",{"2":{"12":1}}],["22",{"2":{"3":1}}],["2",{"0":{"40":1,"83":1,"86":1,"87":2,"88":1,"89":1,"90":1,"95":1,"101":1,"102":1,"103":2,"110":1,"111":1,"112":2,"115":1,"118":1,"122":1,"128":1,"129":1,"130":2,"131":1,"132":1,"133":1,"134":1,"135":1,"136":1},"1":{"84":1,"85":1,"86":1,"87":1,"88":1,"89":1,"90":1,"102":1,"103":1,"111":1,"112":1,"129":1,"130":1,"131":1,"132":1,"133":1,"134":1,"135":1,"136":1,"138":1,"139":1,"140":1},"2":{"3":1,"4":2,"21":3,"34":1,"37":1,"47":2,"63":1,"77":1,"78":2,"98":1,"114":2,"127":1}}],["55",{"2":{"49":1}}],["50",{"2":{"6":1,"78":1}}],["5",{"0":{"90":1,"106":1,"125":1,"133":1,"137":1},"1":{"138":1,"139":1,"140":1},"2":{"3":2,"21":3,"98":1,"114":1}}],["56",{"2":{"3":1}}],["wdotool",{"2":{"98":1}}],["w5821",{"2":{"40":1}}],["widget",{"2":{"34":18,"49":1}}],["with",{"2":{"3":1}}],["web",{"2":{"55":1,"98":2,"138":1}}],["webassert",{"2":{"33":2}}],["webui",{"2":{"33":1,"57":2}}],["wayland",{"2":{"40":1,"41":1,"98":1}}],["want",{"2":{"16":1,"19":1}}],["warnings",{"0":{"7":1},"2":{"2":2}}],["what",{"2":{"16":1,"19":1}}],["x11",{"2":{"40":1}}],["xdg",{"2":{"40":1,"41":1}}],["xdist",{"2":{"3":1}}],["x3c",{"2":{"34":17}}],["x",{"2":{"12":2,"34":4}}],["xxx",{"2":{"9":1,"11":3,"12":1,"33":1,"36":3,"39":1,"42":2,"63":7,"97":1}}],["xxxx",{"2":{"0":1,"73":4}}],["xpassed",{"2":{"4":1}}],["xfailed",{"2":{"4":1}}],["x86",{"2":{"3":1,"12":1,"40":2}}],["9",{"2":{"3":1,"12":2,"98":1}}],["7",{"0":{"135":1},"2":{"49":1,"98":1}}],["78",{"2":{"3":1}}],["7981803",{"2":{"2":1}}],["40",{"2":{"34":6}}],["47",{"2":{"12":1}}],["48",{"2":{"12":1}}],["4",{"0":{"89":1,"105":1,"120":1,"121":1,"122":1,"123":1,"124":2,"125":1,"126":1,"127":1,"128":1,"129":1,"130":1,"131":1,"132":2,"133":1,"134":1,"135":1,"136":1},"1":{"121":1,"122":1,"123":1,"124":1,"125":1,"127":1,"128":1,"129":2,"130":2,"131":2,"132":2,"133":2,"134":2,"135":2,"136":2,"138":1,"139":1,"140":1},"2":{"3":3,"98":1}}],["679537",{"2":{"39":1,"42":1,"43":1}}],["64",{"2":{"3":1,"12":1,"21":2,"40":2}}],["6",{"0":{"107":1,"134":1},"2":{"3":2,"12":1,"34":2,"90":1,"98":1}}],["3",{"0":{"41":1,"88":1,"96":1,"104":1,"116":1,"117":1,"118":1,"119":2,"120":1,"121":1,"122":1,"123":2,"124":1,"125":1,"131":1},"1":{"117":1,"118":1,"119":1,"120":1,"121":2,"122":2,"123":2,"124":2,"125":2},"2":{"3":2,"4":1,"98":1}}],["public",{"0":{"107":1},"2":{"107":4}}],["pr",{"2":{"105":2}}],["project",{"2":{"49":2}}],["product",{"2":{"40":1}}],["process",{"2":{"34":4,"130":1}}],["pdocr",{"0":{"79":1},"1":{"80":1,"81":1,"82":1,"83":1,"84":1,"85":1,"86":1,"87":1,"88":1,"89":1,"90":1},"2":{"79":1,"81":1,"82":3,"84":1,"86":2,"98":1}}],["pms",{"2":{"73":14,"98":2}}],["pms用例驱动",{"0":{"73":1}}],["pip",{"2":{"57":1,"104":1}}],["picture",{"2":{"34":13,"87":1,"89":1}}],["pic",{"2":{"12":1,"34":14}}],["popmethod",{"2":{"129":1}}],["port",{"2":{"82":1,"86":1}}],["po",{"2":{"45":1,"103":1,"117":1,"129":1}}],["png",{"2":{"12":2,"34":4,"87":2,"89":1}}],["playwright",{"2":{"98":2}}],["platform",{"2":{"3":1,"40":5,"41":1}}],["plugins",{"2":{"3":1}}],["pluggy",{"2":{"3":1}}],["pypi",{"2":{"104":1}}],["pydbussend",{"2":{"98":1}}],["pylinuxauto",{"2":{"34":14,"98":1,"112":1}}],["py",{"2":{"3":1,"6":2,"7":2,"12":2,"15":2,"16":1,"18":2,"19":1,"33":3,"37":2,"41":2,"42":1,"49":1,"63":2,"64":4,"65":2,"68":6,"82":2,"94":1,"95":1,"96":1,"102":6,"111":12,"127":11,"129":1,"130":1,"131":4}}],["pytest",{"2":{"3":1,"38":1,"66":2,"98":3,"111":1}}],["pythonocr",{"2":{"87":1,"88":1,"89":1,"90":3}}],["python3",{"2":{"16":1,"19":1,"34":1,"94":1,"95":1,"96":1}}],["pythondfmwidget",{"2":{"12":1}}],["pythonfrom",{"2":{"11":1,"21":2,"25":1,"26":1,"27":1,"29":1,"30":1,"31":1,"82":1,"86":1,"97":3,"103":1,"104":1,"112":1}}],["pythonclass",{"2":{"9":1,"33":1}}],["python",{"2":{"3":1,"12":2,"33":2,"34":1,"49":1,"63":1,"82":1,"115":1,"117":1,"129":1,"130":1,"131":3}}],["paddleocr",{"2":{"79":1}}],["pause=pause",{"2":{"34":4}}],["pause",{"2":{"34":8}}],["pass",{"2":{"34":4}}],["password=",{"2":{"49":1}}],["password=password",{"2":{"49":1}}],["password2",{"2":{"47":1}}],["password1",{"2":{"47":2}}],["password",{"2":{"27":1,"29":1,"30":1,"31":1,"49":1,"73":4}}],["passed",{"2":{"4":1}}],["param",{"2":{"12":2,"34":32}}],["packages",{"2":{"3":1}}],["path",{"2":{"2":1,"7":2,"12":1,"34":17,"49":1,"97":2}}],["cd",{"2":{"115":1}}],["ci",{"2":{"115":1}}],["center",{"2":{"98":1}}],["c",{"2":{"78":2}}],["cpu",{"2":{"40":3}}],["csv文件",{"2":{"37":1}}],["csv文件与脚本对应关系",{"0":{"37":1}}],["csv",{"2":{"36":1,"37":6,"38":2,"39":1,"40":1,"44":1,"66":1,"111":2,"127":1,"133":2}}],["ch",{"2":{"34":2,"90":2}}],["cmd",{"2":{"25":3,"26":3,"27":3,"29":1,"30":1,"31":1,"34":4}}],["cli",{"2":{"114":1}}],["click",{"2":{"9":1,"12":1,"49":3,"129":2,"130":1}}],["clone",{"2":{"16":1,"19":1}}],["cls",{"2":{"12":2,"34":1,"94":4}}],["classmethod",{"2":{"12":1,"34":1,"94":2}}],["class",{"2":{"7":1,"11":3,"12":2,"33":2,"34":1,"49":1,"63":1,"94":3,"95":3,"96":3,"97":4,"129":1,"130":1,"131":3}}],["cargo",{"0":{"52":1},"2":{"51":1,"52":2,"60":1,"62":1,"63":2,"64":1,"65":1,"66":1,"67":1,"68":3,"73":1,"75":1,"78":1}}],["cache",{"2":{"34":5}}],["case",{"2":{"15":2,"18":2,"33":2,"64":2,"65":1,"68":8,"111":3,"112":1,"127":4,"129":1,"130":3,"131":3}}],["cannot",{"2":{"7":1}}],["call",{"2":{"6":1}}],["c1",{"2":{"7":1}}],["commit",{"2":{"98":2}}],["com",{"2":{"79":1,"91":1}}],["count",{"2":{"34":1}}],["co",{"2":{"34":1,"94":1,"95":1,"96":1}}],["coding",{"2":{"34":1,"94":1,"95":1,"96":1}}],["code",{"2":{"7":1,"79":1,"91":1}}],["consolepip",{"2":{"81":1,"84":1,"92":1}}],["constructor",{"2":{"7":1}}],["contain",{"2":{"11":1,"97":1}}],["conftest",{"2":{"127":1}}],["config",{"2":{"12":1,"49":2,"111":1,"127":1}}],["conf",{"2":{"11":1,"82":1,"86":1,"94":1,"95":1,"96":1,"97":3}}],["collect",{"2":{"7":1}}],["collected",{"2":{"4":1}}],["collectors",{"0":{"5":1},"2":{"2":2}}],["created",{"2":{"2":1}}],["equal",{"2":{"34":2}}],["ele",{"2":{"129":1}}],["elementnotfound",{"2":{"34":1}}],["element",{"2":{"12":2,"34":8,"49":1}}],["elements",{"2":{"12":5}}],["elif",{"2":{"34":4}}],["else",{"2":{"34":8}}],["events=",{"2":{"27":1}}],["expr",{"2":{"34":10}}],["expanduser",{"2":{"34":2}}],["expect",{"2":{"27":1,"31":1,"34":18}}],["expect交互",{"0":{"27":1,"31":1}}],["excel",{"2":{"44":1}}],["except",{"2":{"34":5}}],["exceptions",{"2":{"34":10}}],["exc",{"2":{"34":6}}],["exists",{"2":{"34":2}}],["exist",{"2":{"34":11}}],["exitcode",{"2":{"2":1}}],["en",{"2":{"90":1}}],["envx",{"2":{"51":2}}],["env",{"2":{"34":1,"94":1,"95":1,"96":1,"111":1,"127":1}}],["environment",{"0":{"3":1},"2":{"2":2}}],["end",{"2":{"18":1,"19":3,"73":2}}],["endswith",{"2":{"11":1,"94":1,"95":1,"96":1,"97":1}}],["error",{"2":{"4":1,"11":1,"95":2,"96":2}}],["titlemethod",{"2":{"129":1}}],["timeout=timeout",{"2":{"34":4}}],["timeout",{"2":{"34":5}}],["time",{"2":{"21":1,"34":4}}],["tmp",{"2":{"97":1}}],["task",{"2":{"73":4}}],["tags",{"0":{"70":1},"2":{"37":1,"69":1,"70":2,"73":2}}],["t",{"2":{"66":2,"67":2}}],["type",{"2":{"40":1,"41":1}}],["typing",{"2":{"34":1}}],["txtid1",{"2":{"70":1,"71":1}}],["txt",{"0":{"70":1,"71":1},"2":{"34":3,"69":3,"70":2,"71":2,"73":2,"77":1,"111":1,"127":1}}],["transfer",{"2":{"98":1}}],["trace",{"2":{"10":2}}],["true表示返回原始数据",{"2":{"90":1}}],["true",{"2":{"34":4,"41":2,"130":1}}],["try",{"2":{"34":4}}],["tuple",{"2":{"12":1,"34":2,"97":1}}],["templateelementfound",{"2":{"34":3}}],["templateelementnotfound",{"2":{"34":5}}],["technology",{"2":{"34":1,"94":1,"95":1,"96":1}}],["teardown",{"2":{"6":1}}],["testlog",{"2":{"94":7,"95":2,"96":1}}],["testmusic",{"2":{"65":1}}],["testmycase",{"2":{"33":1,"130":1}}],["testcase",{"2":{"63":1,"131":1}}],["testfoo",{"2":{"7":2}}],["test",{"2":{"6":8,"7":3,"33":1,"37":2,"63":7,"64":2,"65":2,"68":6,"87":2,"89":1,"97":1,"111":2,"127":2,"130":2,"131":2}}],["tests",{"0":{"6":1},"2":{"2":3,"7":1,"102":1}}],["toolkit",{"2":{"100":1,"102":1}}],["todo",{"2":{"31":1}}],["total",{"2":{"4":1}}],["to",{"2":{"2":1,"7":1}}],["rightmethod",{"2":{"129":1}}],["rm",{"0":{"54":1},"2":{"51":1,"54":1}}],["rpcgui",{"0":{"49":1},"2":{"49":2}}],["rpc",{"0":{"79":1},"1":{"80":1,"81":1,"82":1,"83":1,"84":1,"85":1,"86":1,"87":1,"88":1,"89":1,"90":1},"2":{"46":2,"49":1,"79":2,"81":1,"82":3,"84":1,"86":2,"98":4}}],["raise",{"2":{"34":19}}],["rate=rate",{"2":{"34":2}}],["rate=0",{"2":{"12":1}}],["rate",{"2":{"12":1,"34":7}}],["run",{"2":{"16":2,"19":2,"25":1,"26":1,"27":1,"29":1,"30":1,"31":1,"42":1,"47":1,"50":1,"52":1,"53":1,"60":3,"62":2,"63":4,"64":2,"65":2,"66":2,"67":2,"68":6,"73":2}}],["requirements",{"2":{"111":1,"127":1}}],["readme",{"2":{"102":1,"111":1}}],["record",{"2":{"98":1}}],["recursive",{"2":{"34":1}}],["removed",{"2":{"36":1,"43":2}}],["remotemethod",{"2":{"49":2}}],["remote",{"2":{"29":1,"30":1,"31":1,"49":1,"57":1,"75":3,"78":2}}],["remotecmd",{"2":{"29":2,"30":2,"31":2}}],["retry=network",{"2":{"34":4}}],["retry",{"2":{"34":9}}],["return",{"2":{"12":2,"34":6,"90":5}}],["restart",{"2":{"49":2,"75":1}}],["restart=false",{"2":{"49":1}}],["res",{"2":{"12":1,"34":21,"127":3,"132":3}}],["report",{"2":{"0":2,"98":1}}],["rootdir",{"2":{"49":1}}],["root",{"2":{"2":1,"47":3}}],["16",{"2":{"98":1}}],["168",{"2":{"47":3,"86":1}}],["15",{"2":{"98":1}}],["1518371686",{"2":{"2":1}}],["14",{"2":{"98":1}}],["13",{"2":{"98":1}}],["12",{"2":{"98":1}}],["123456",{"2":{"73":4}}],["1235666275024414",{"2":{"2":1}}],["11",{"2":{"98":1}}],["192",{"2":{"47":3,"86":1}}],["17",{"2":{"12":1,"98":1}}],["1071",{"2":{"104":1}}],["1070",{"2":{"104":1}}],["100",{"2":{"78":3}}],["10",{"2":{"4":2,"49":1,"98":1}}],["1",{"0":{"39":1,"80":1,"86":1,"94":1,"100":1,"102":1,"109":1,"111":1,"114":1,"117":1,"121":1,"127":1,"129":1},"1":{"81":1,"82":1},"2":{"2":1,"3":4,"4":3,"21":3,"34":7,"37":1,"47":5,"49":1,"63":3,"86":1,"90":1,"98":1,"114":1,"127":1}}],["002",{"2":{"64":1,"68":2,"127":1}}],["001",{"2":{"12":2,"33":2,"36":1,"37":2,"40":1,"63":7,"64":1,"65":5,"68":4,"111":2,"127":1,"130":2,"131":2}}],["02",{"2":{"12":1}}],["0",{"2":{"2":1,"3":4,"12":1,"34":1,"86":1,"114":2}}],["报告中",{"2":{"12":1}}],["报告内容",{"0":{"1":1},"1":{"2":1,"3":1,"4":1,"5":1,"6":1,"7":1}}],["报告",{"0":{"0":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1},"2":{"0":1}}]],"serializationVersion":2}';export{t as default}; diff --git a/assets/chunks/VPLocalSearchBox.Re7xpDUq.js b/assets/chunks/VPLocalSearchBox.DrdjI_1Y.js similarity index 94% rename from assets/chunks/VPLocalSearchBox.Re7xpDUq.js rename to assets/chunks/VPLocalSearchBox.DrdjI_1Y.js index bffe1f1..c5557bc 100644 --- a/assets/chunks/VPLocalSearchBox.Re7xpDUq.js +++ b/assets/chunks/VPLocalSearchBox.DrdjI_1Y.js @@ -1,7 +1,7 @@ -var Nt=Object.defineProperty;var kt=(o,e,t)=>e in o?Nt(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t;var Oe=(o,e,t)=>kt(o,typeof e!="symbol"?e+"":e,t);import{X as It,h as oe,y as $e,at as Dt,au as Ot,d as Rt,G as xe,av as tt,k as Fe,aw as _t,ax as Mt,z as Lt,ay as zt,l as Re,R as de,P as Ee,az as Pt,aA as Bt,Y as Vt,j as $t,aB as Wt,o as ee,b as jt,m as E,a1 as Kt,p as U,aC as Jt,aD as Ut,aE as Ht,c as re,n as rt,e as Se,E as at,F as nt,a as ve,t as pe,aF as Gt,q as qt,s as Qt,aG as it,a3 as Yt,aj as Zt,ap as Xt,aH as er,_ as tr}from"./framework.DPHCW6-_.js";import{u as rr,c as ar}from"./theme.F2IToOfj.js";const nr={root:()=>It(()=>import("./@localSearchIndexroot.BXd6ZsaL.js"),[])};/*! +var Nt=Object.defineProperty;var kt=(o,e,t)=>e in o?Nt(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t;var Oe=(o,e,t)=>kt(o,typeof e!="symbol"?e+"":e,t);import{X as It,h as oe,y as $e,ap as Dt,aq as Ot,d as Rt,G as xe,ar as tt,k as Fe,as as _t,at as Mt,z as Lt,au as zt,l as Re,R as de,P as Ee,av as Pt,aw as Bt,Y as Vt,j as $t,ax as Wt,o as ee,b as Kt,m as E,a1 as jt,p as U,ay as Jt,az as Ut,aA as Ht,c as re,n as rt,e as Se,E as at,F as nt,a as ve,t as pe,aB as Gt,q as qt,s as Qt,aC as it,a3 as Yt,af as Zt,al as Xt,aD as er,_ as tr}from"./framework.CmHn2guR.js";import{u as rr,c as ar}from"./theme.BqZMVUP5.js";const nr={root:()=>It(()=>import("./@localSearchIndexroot.BKvwyqC_.js"),[])};/*! * tabbable 6.2.0 * @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE */var mt=["input:not([inert])","select:not([inert])","textarea:not([inert])","a[href]:not([inert])","button:not([inert])","[tabindex]:not(slot):not([inert])","audio[controls]:not([inert])","video[controls]:not([inert])",'[contenteditable]:not([contenteditable="false"]):not([inert])',"details>summary:first-of-type:not([inert])","details:not([inert])"],Te=mt.join(","),yt=typeof Element>"u",ue=yt?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,Ne=!yt&&Element.prototype.getRootNode?function(o){var e;return o==null||(e=o.getRootNode)===null||e===void 0?void 0:e.call(o)}:function(o){return o==null?void 0:o.ownerDocument},ke=function o(e,t){var r;t===void 0&&(t=!0);var n=e==null||(r=e.getAttribute)===null||r===void 0?void 0:r.call(e,"inert"),a=n===""||n==="true",i=a||t&&e&&o(e.parentNode);return i},ir=function(e){var t,r=e==null||(t=e.getAttribute)===null||t===void 0?void 0:t.call(e,"contenteditable");return r===""||r==="true"},gt=function(e,t,r){if(ke(e))return[];var n=Array.prototype.slice.apply(e.querySelectorAll(Te));return t&&ue.call(e,Te)&&n.unshift(e),n=n.filter(r),n},bt=function o(e,t,r){for(var n=[],a=Array.from(e);a.length;){var i=a.shift();if(!ke(i,!1))if(i.tagName==="SLOT"){var s=i.assignedElements(),u=s.length?s:i.children,l=o(u,!0,r);r.flatten?n.push.apply(n,l):n.push({scopeParent:i,candidates:l})}else{var h=ue.call(i,Te);h&&r.filter(i)&&(t||!e.includes(i))&&n.push(i);var d=i.shadowRoot||typeof r.getShadowRoot=="function"&&r.getShadowRoot(i),v=!ke(d,!1)&&(!r.shadowRootFilter||r.shadowRootFilter(i));if(d&&v){var m=o(d===!0?i.children:d.children,!0,r);r.flatten?n.push.apply(n,m):n.push({scopeParent:i,candidates:m})}else a.unshift.apply(a,i.children)}}return n},wt=function(e){return!isNaN(parseInt(e.getAttribute("tabindex"),10))},se=function(e){if(!e)throw new Error("No node provided");return e.tabIndex<0&&(/^(AUDIO|VIDEO|DETAILS)$/.test(e.tagName)||ir(e))&&!wt(e)?0:e.tabIndex},or=function(e,t){var r=se(e);return r<0&&t&&!wt(e)?0:r},sr=function(e,t){return e.tabIndex===t.tabIndex?e.documentOrder-t.documentOrder:e.tabIndex-t.tabIndex},xt=function(e){return e.tagName==="INPUT"},ur=function(e){return xt(e)&&e.type==="hidden"},lr=function(e){var t=e.tagName==="DETAILS"&&Array.prototype.slice.apply(e.children).some(function(r){return r.tagName==="SUMMARY"});return t},cr=function(e,t){for(var r=0;rsummary:first-of-type"),i=a?e.parentElement:e;if(ue.call(i,"details:not([open]) *"))return!0;if(!r||r==="full"||r==="legacy-full"){if(typeof n=="function"){for(var s=e;e;){var u=e.parentElement,l=Ne(e);if(u&&!u.shadowRoot&&n(u)===!0)return ot(e);e.assignedSlot?e=e.assignedSlot:!u&&l!==e.ownerDocument?e=l.host:e=u}e=s}if(vr(e))return!e.getClientRects().length;if(r!=="legacy-full")return!0}else if(r==="non-zero-area")return ot(e);return!1},mr=function(e){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(e.tagName))for(var t=e.parentElement;t;){if(t.tagName==="FIELDSET"&&t.disabled){for(var r=0;r=0)},gr=function o(e){var t=[],r=[];return e.forEach(function(n,a){var i=!!n.scopeParent,s=i?n.scopeParent:n,u=or(s,i),l=i?o(n.candidates):s;u===0?i?t.push.apply(t,l):t.push(s):r.push({documentOrder:a,tabIndex:u,item:n,isScope:i,content:l})}),r.sort(sr).reduce(function(n,a){return a.isScope?n.push.apply(n,a.content):n.push(a.content),n},[]).concat(t)},br=function(e,t){t=t||{};var r;return t.getShadowRoot?r=bt([e],t.includeContainer,{filter:We.bind(null,t),flatten:!1,getShadowRoot:t.getShadowRoot,shadowRootFilter:yr}):r=gt(e,t.includeContainer,We.bind(null,t)),gr(r)},wr=function(e,t){t=t||{};var r;return t.getShadowRoot?r=bt([e],t.includeContainer,{filter:Ie.bind(null,t),flatten:!0,getShadowRoot:t.getShadowRoot}):r=gt(e,t.includeContainer,Ie.bind(null,t)),r},le=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return ue.call(e,Te)===!1?!1:We(t,e)},xr=mt.concat("iframe").join(","),_e=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return ue.call(e,xr)===!1?!1:Ie(t,e)};/*! * focus-trap 7.5.4 * @license MIT, https://github.com/focus-trap/focus-trap/blob/master/LICENSE -*/function st(o,e){var t=Object.keys(o);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(o);e&&(r=r.filter(function(n){return Object.getOwnPropertyDescriptor(o,n).enumerable})),t.push.apply(t,r)}return t}function ut(o){for(var e=1;e0){var r=e[e.length-1];r!==t&&r.pause()}var n=e.indexOf(t);n===-1||e.splice(n,1),e.push(t)},deactivateTrap:function(e,t){var r=e.indexOf(t);r!==-1&&e.splice(r,1),e.length>0&&e[e.length-1].unpause()}},Ar=function(e){return e.tagName&&e.tagName.toLowerCase()==="input"&&typeof e.select=="function"},Cr=function(e){return(e==null?void 0:e.key)==="Escape"||(e==null?void 0:e.key)==="Esc"||(e==null?void 0:e.keyCode)===27},ge=function(e){return(e==null?void 0:e.key)==="Tab"||(e==null?void 0:e.keyCode)===9},Tr=function(e){return ge(e)&&!e.shiftKey},Nr=function(e){return ge(e)&&e.shiftKey},ct=function(e){return setTimeout(e,0)},ft=function(e,t){var r=-1;return e.every(function(n,a){return t(n)?(r=a,!1):!0}),r},me=function(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n1?p-1:0),I=1;I=0)c=r.activeElement;else{var f=i.tabbableGroups[0],p=f&&f.firstTabbableNode;c=p||h("fallbackFocus")}if(!c)throw new Error("Your focus-trap needs to have at least one focusable element");return c},v=function(){if(i.containerGroups=i.containers.map(function(c){var f=br(c,a.tabbableOptions),p=wr(c,a.tabbableOptions),k=f.length>0?f[0]:void 0,I=f.length>0?f[f.length-1]:void 0,M=p.find(function(y){return le(y)}),z=p.slice().reverse().find(function(y){return le(y)}),P=!!f.find(function(y){return se(y)>0});return{container:c,tabbableNodes:f,focusableNodes:p,posTabIndexesFound:P,firstTabbableNode:k,lastTabbableNode:I,firstDomTabbableNode:M,lastDomTabbableNode:z,nextTabbableNode:function(x){var $=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,j=f.indexOf(x);return j<0?$?p.slice(p.indexOf(x)+1).find(function(G){return le(G)}):p.slice(0,p.indexOf(x)).reverse().find(function(G){return le(G)}):f[j+($?1:-1)]}}}),i.tabbableGroups=i.containerGroups.filter(function(c){return c.tabbableNodes.length>0}),i.tabbableGroups.length<=0&&!h("fallbackFocus"))throw new Error("Your focus-trap must have at least one container with at least one tabbable node in it at all times");if(i.containerGroups.find(function(c){return c.posTabIndexesFound})&&i.containerGroups.length>1)throw new Error("At least one node with a positive tabindex was found in one of your focus-trap's multiple containers. Positive tabindexes are only supported in single-container focus-traps.")},m=function w(c){var f=c.activeElement;if(f)return f.shadowRoot&&f.shadowRoot.activeElement!==null?w(f.shadowRoot):f},b=function w(c){if(c!==!1&&c!==m(document)){if(!c||!c.focus){w(d());return}c.focus({preventScroll:!!a.preventScroll}),i.mostRecentlyFocusedNode=c,Ar(c)&&c.select()}},S=function(c){var f=h("setReturnFocus",c);return f||(f===!1?!1:c)},g=function(c){var f=c.target,p=c.event,k=c.isBackward,I=k===void 0?!1:k;f=f||Ae(p),v();var M=null;if(i.tabbableGroups.length>0){var z=l(f,p),P=z>=0?i.containerGroups[z]:void 0;if(z<0)I?M=i.tabbableGroups[i.tabbableGroups.length-1].lastTabbableNode:M=i.tabbableGroups[0].firstTabbableNode;else if(I){var y=ft(i.tabbableGroups,function(B){var J=B.firstTabbableNode;return f===J});if(y<0&&(P.container===f||_e(f,a.tabbableOptions)&&!le(f,a.tabbableOptions)&&!P.nextTabbableNode(f,!1))&&(y=z),y>=0){var x=y===0?i.tabbableGroups.length-1:y-1,$=i.tabbableGroups[x];M=se(f)>=0?$.lastTabbableNode:$.lastDomTabbableNode}else ge(p)||(M=P.nextTabbableNode(f,!1))}else{var j=ft(i.tabbableGroups,function(B){var J=B.lastTabbableNode;return f===J});if(j<0&&(P.container===f||_e(f,a.tabbableOptions)&&!le(f,a.tabbableOptions)&&!P.nextTabbableNode(f))&&(j=z),j>=0){var G=j===i.tabbableGroups.length-1?0:j+1,q=i.tabbableGroups[G];M=se(f)>=0?q.firstTabbableNode:q.firstDomTabbableNode}else ge(p)||(M=P.nextTabbableNode(f))}}else M=h("fallbackFocus");return M},A=function(c){var f=Ae(c);if(!(l(f,c)>=0)){if(me(a.clickOutsideDeactivates,c)){s.deactivate({returnFocus:a.returnFocusOnDeactivate});return}me(a.allowOutsideClick,c)||c.preventDefault()}},T=function(c){var f=Ae(c),p=l(f,c)>=0;if(p||f instanceof Document)p&&(i.mostRecentlyFocusedNode=f);else{c.stopImmediatePropagation();var k,I=!0;if(i.mostRecentlyFocusedNode)if(se(i.mostRecentlyFocusedNode)>0){var M=l(i.mostRecentlyFocusedNode),z=i.containerGroups[M].tabbableNodes;if(z.length>0){var P=z.findIndex(function(y){return y===i.mostRecentlyFocusedNode});P>=0&&(a.isKeyForward(i.recentNavEvent)?P+1=0&&(k=z[P-1],I=!1))}}else i.containerGroups.some(function(y){return y.tabbableNodes.some(function(x){return se(x)>0})})||(I=!1);else I=!1;I&&(k=g({target:i.mostRecentlyFocusedNode,isBackward:a.isKeyBackward(i.recentNavEvent)})),b(k||i.mostRecentlyFocusedNode||d())}i.recentNavEvent=void 0},F=function(c){var f=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;i.recentNavEvent=c;var p=g({event:c,isBackward:f});p&&(ge(c)&&c.preventDefault(),b(p))},L=function(c){if(Cr(c)&&me(a.escapeDeactivates,c)!==!1){c.preventDefault(),s.deactivate();return}(a.isKeyForward(c)||a.isKeyBackward(c))&&F(c,a.isKeyBackward(c))},_=function(c){var f=Ae(c);l(f,c)>=0||me(a.clickOutsideDeactivates,c)||me(a.allowOutsideClick,c)||(c.preventDefault(),c.stopImmediatePropagation())},V=function(){if(i.active)return lt.activateTrap(n,s),i.delayInitialFocusTimer=a.delayInitialFocus?ct(function(){b(d())}):b(d()),r.addEventListener("focusin",T,!0),r.addEventListener("mousedown",A,{capture:!0,passive:!1}),r.addEventListener("touchstart",A,{capture:!0,passive:!1}),r.addEventListener("click",_,{capture:!0,passive:!1}),r.addEventListener("keydown",L,{capture:!0,passive:!1}),s},N=function(){if(i.active)return r.removeEventListener("focusin",T,!0),r.removeEventListener("mousedown",A,!0),r.removeEventListener("touchstart",A,!0),r.removeEventListener("click",_,!0),r.removeEventListener("keydown",L,!0),s},R=function(c){var f=c.some(function(p){var k=Array.from(p.removedNodes);return k.some(function(I){return I===i.mostRecentlyFocusedNode})});f&&b(d())},C=typeof window<"u"&&"MutationObserver"in window?new MutationObserver(R):void 0,O=function(){C&&(C.disconnect(),i.active&&!i.paused&&i.containers.map(function(c){C.observe(c,{subtree:!0,childList:!0})}))};return s={get active(){return i.active},get paused(){return i.paused},activate:function(c){if(i.active)return this;var f=u(c,"onActivate"),p=u(c,"onPostActivate"),k=u(c,"checkCanFocusTrap");k||v(),i.active=!0,i.paused=!1,i.nodeFocusedBeforeActivation=r.activeElement,f==null||f();var I=function(){k&&v(),V(),O(),p==null||p()};return k?(k(i.containers.concat()).then(I,I),this):(I(),this)},deactivate:function(c){if(!i.active)return this;var f=ut({onDeactivate:a.onDeactivate,onPostDeactivate:a.onPostDeactivate,checkCanReturnFocus:a.checkCanReturnFocus},c);clearTimeout(i.delayInitialFocusTimer),i.delayInitialFocusTimer=void 0,N(),i.active=!1,i.paused=!1,O(),lt.deactivateTrap(n,s);var p=u(f,"onDeactivate"),k=u(f,"onPostDeactivate"),I=u(f,"checkCanReturnFocus"),M=u(f,"returnFocus","returnFocusOnDeactivate");p==null||p();var z=function(){ct(function(){M&&b(S(i.nodeFocusedBeforeActivation)),k==null||k()})};return M&&I?(I(S(i.nodeFocusedBeforeActivation)).then(z,z),this):(z(),this)},pause:function(c){if(i.paused||!i.active)return this;var f=u(c,"onPause"),p=u(c,"onPostPause");return i.paused=!0,f==null||f(),N(),O(),p==null||p(),this},unpause:function(c){if(!i.paused||!i.active)return this;var f=u(c,"onUnpause"),p=u(c,"onPostUnpause");return i.paused=!1,f==null||f(),v(),V(),O(),p==null||p(),this},updateContainerElements:function(c){var f=[].concat(c).filter(Boolean);return i.containers=f.map(function(p){return typeof p=="string"?r.querySelector(p):p}),i.active&&v(),O(),this}},s.updateContainerElements(e),s};function Dr(o,e={}){let t;const{immediate:r,...n}=e,a=oe(!1),i=oe(!1),s=d=>t&&t.activate(d),u=d=>t&&t.deactivate(d),l=()=>{t&&(t.pause(),i.value=!0)},h=()=>{t&&(t.unpause(),i.value=!1)};return $e(()=>Dt(o),d=>{d&&(t=Ir(d,{...n,onActivate(){a.value=!0,e.onActivate&&e.onActivate()},onDeactivate(){a.value=!1,e.onDeactivate&&e.onDeactivate()}}),r&&s())},{flush:"post"}),Ot(()=>u()),{hasFocus:a,isPaused:i,activate:s,deactivate:u,pause:l,unpause:h}}class fe{constructor(e,t=!0,r=[],n=5e3){this.ctx=e,this.iframes=t,this.exclude=r,this.iframesTimeout=n}static matches(e,t){const r=typeof t=="string"?[t]:t,n=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector;if(n){let a=!1;return r.every(i=>n.call(e,i)?(a=!0,!1):!0),a}else return!1}getContexts(){let e,t=[];return typeof this.ctx>"u"||!this.ctx?e=[]:NodeList.prototype.isPrototypeOf(this.ctx)?e=Array.prototype.slice.call(this.ctx):Array.isArray(this.ctx)?e=this.ctx:typeof this.ctx=="string"?e=Array.prototype.slice.call(document.querySelectorAll(this.ctx)):e=[this.ctx],e.forEach(r=>{const n=t.filter(a=>a.contains(r)).length>0;t.indexOf(r)===-1&&!n&&t.push(r)}),t}getIframeContents(e,t,r=()=>{}){let n;try{const a=e.contentWindow;if(n=a.document,!a||!n)throw new Error("iframe inaccessible")}catch{r()}n&&t(n)}isIframeBlank(e){const t="about:blank",r=e.getAttribute("src").trim();return e.contentWindow.location.href===t&&r!==t&&r}observeIframeLoad(e,t,r){let n=!1,a=null;const i=()=>{if(!n){n=!0,clearTimeout(a);try{this.isIframeBlank(e)||(e.removeEventListener("load",i),this.getIframeContents(e,t,r))}catch{r()}}};e.addEventListener("load",i),a=setTimeout(i,this.iframesTimeout)}onIframeReady(e,t,r){try{e.contentWindow.document.readyState==="complete"?this.isIframeBlank(e)?this.observeIframeLoad(e,t,r):this.getIframeContents(e,t,r):this.observeIframeLoad(e,t,r)}catch{r()}}waitForIframes(e,t){let r=0;this.forEachIframe(e,()=>!0,n=>{r++,this.waitForIframes(n.querySelector("html"),()=>{--r||t()})},n=>{n||t()})}forEachIframe(e,t,r,n=()=>{}){let a=e.querySelectorAll("iframe"),i=a.length,s=0;a=Array.prototype.slice.call(a);const u=()=>{--i<=0&&n(s)};i||u(),a.forEach(l=>{fe.matches(l,this.exclude)?u():this.onIframeReady(l,h=>{t(l)&&(s++,r(h)),u()},u)})}createIterator(e,t,r){return document.createNodeIterator(e,t,r,!1)}createInstanceOnIframe(e){return new fe(e.querySelector("html"),this.iframes)}compareNodeIframe(e,t,r){const n=e.compareDocumentPosition(r),a=Node.DOCUMENT_POSITION_PRECEDING;if(n&a)if(t!==null){const i=t.compareDocumentPosition(r),s=Node.DOCUMENT_POSITION_FOLLOWING;if(i&s)return!0}else return!0;return!1}getIteratorNode(e){const t=e.previousNode();let r;return t===null?r=e.nextNode():r=e.nextNode()&&e.nextNode(),{prevNode:t,node:r}}checkIframeFilter(e,t,r,n){let a=!1,i=!1;return n.forEach((s,u)=>{s.val===r&&(a=u,i=s.handled)}),this.compareNodeIframe(e,t,r)?(a===!1&&!i?n.push({val:r,handled:!0}):a!==!1&&!i&&(n[a].handled=!0),!0):(a===!1&&n.push({val:r,handled:!1}),!1)}handleOpenIframes(e,t,r,n){e.forEach(a=>{a.handled||this.getIframeContents(a.val,i=>{this.createInstanceOnIframe(i).forEachNode(t,r,n)})})}iterateThroughNodes(e,t,r,n,a){const i=this.createIterator(t,e,n);let s=[],u=[],l,h,d=()=>({prevNode:h,node:l}=this.getIteratorNode(i),l);for(;d();)this.iframes&&this.forEachIframe(t,v=>this.checkIframeFilter(l,h,v,s),v=>{this.createInstanceOnIframe(v).forEachNode(e,m=>u.push(m),n)}),u.push(l);u.forEach(v=>{r(v)}),this.iframes&&this.handleOpenIframes(s,e,r,n),a()}forEachNode(e,t,r,n=()=>{}){const a=this.getContexts();let i=a.length;i||n(),a.forEach(s=>{const u=()=>{this.iterateThroughNodes(e,s,t,r,()=>{--i<=0&&n()})};this.iframes?this.waitForIframes(s,u):u()})}}let Or=class{constructor(e){this.ctx=e,this.ie=!1;const t=window.navigator.userAgent;(t.indexOf("MSIE")>-1||t.indexOf("Trident")>-1)&&(this.ie=!0)}set opt(e){this._opt=Object.assign({},{element:"",className:"",exclude:[],iframes:!1,iframesTimeout:5e3,separateWordSearch:!0,diacritics:!0,synonyms:{},accuracy:"partially",acrossElements:!1,caseSensitive:!1,ignoreJoiners:!1,ignoreGroups:0,ignorePunctuation:[],wildcards:"disabled",each:()=>{},noMatch:()=>{},filter:()=>!0,done:()=>{},debug:!1,log:window.console},e)}get opt(){return this._opt}get iterator(){return new fe(this.ctx,this.opt.iframes,this.opt.exclude,this.opt.iframesTimeout)}log(e,t="debug"){const r=this.opt.log;this.opt.debug&&typeof r=="object"&&typeof r[t]=="function"&&r[t](`mark.js: ${e}`)}escapeStr(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}createRegExp(e){return this.opt.wildcards!=="disabled"&&(e=this.setupWildcardsRegExp(e)),e=this.escapeStr(e),Object.keys(this.opt.synonyms).length&&(e=this.createSynonymsRegExp(e)),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),this.opt.diacritics&&(e=this.createDiacriticsRegExp(e)),e=this.createMergedBlanksRegExp(e),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.createJoinersRegExp(e)),this.opt.wildcards!=="disabled"&&(e=this.createWildcardsRegExp(e)),e=this.createAccuracyRegExp(e),e}createSynonymsRegExp(e){const t=this.opt.synonyms,r=this.opt.caseSensitive?"":"i",n=this.opt.ignoreJoiners||this.opt.ignorePunctuation.length?"\0":"";for(let a in t)if(t.hasOwnProperty(a)){const i=t[a],s=this.opt.wildcards!=="disabled"?this.setupWildcardsRegExp(a):this.escapeStr(a),u=this.opt.wildcards!=="disabled"?this.setupWildcardsRegExp(i):this.escapeStr(i);s!==""&&u!==""&&(e=e.replace(new RegExp(`(${this.escapeStr(s)}|${this.escapeStr(u)})`,`gm${r}`),n+`(${this.processSynomyms(s)}|${this.processSynomyms(u)})`+n))}return e}processSynomyms(e){return(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),e}setupWildcardsRegExp(e){return e=e.replace(/(?:\\)*\?/g,t=>t.charAt(0)==="\\"?"?":""),e.replace(/(?:\\)*\*/g,t=>t.charAt(0)==="\\"?"*":"")}createWildcardsRegExp(e){let t=this.opt.wildcards==="withSpaces";return e.replace(/\u0001/g,t?"[\\S\\s]?":"\\S?").replace(/\u0002/g,t?"[\\S\\s]*?":"\\S*")}setupIgnoreJoinersRegExp(e){return e.replace(/[^(|)\\]/g,(t,r,n)=>{let a=n.charAt(r+1);return/[(|)\\]/.test(a)||a===""?t:t+"\0"})}createJoinersRegExp(e){let t=[];const r=this.opt.ignorePunctuation;return Array.isArray(r)&&r.length&&t.push(this.escapeStr(r.join(""))),this.opt.ignoreJoiners&&t.push("\\u00ad\\u200b\\u200c\\u200d"),t.length?e.split(/\u0000+/).join(`[${t.join("")}]*`):e}createDiacriticsRegExp(e){const t=this.opt.caseSensitive?"":"i",r=this.opt.caseSensitive?["aàáảãạăằắẳẵặâầấẩẫậäåāą","AÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćč","CÇĆČ","dđď","DĐĎ","eèéẻẽẹêềếểễệëěēę","EÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïī","IÌÍỈĨỊÎÏĪ","lł","LŁ","nñňń","NÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøō","OÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rř","RŘ","sšśșş","SŠŚȘŞ","tťțţ","TŤȚŢ","uùúủũụưừứửữựûüůū","UÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿ","YÝỲỶỸỴŸ","zžżź","ZŽŻŹ"]:["aàáảãạăằắẳẵặâầấẩẫậäåāąAÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćčCÇĆČ","dđďDĐĎ","eèéẻẽẹêềếểễệëěēęEÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïīIÌÍỈĨỊÎÏĪ","lłLŁ","nñňńNÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøōOÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rřRŘ","sšśșşSŠŚȘŞ","tťțţTŤȚŢ","uùúủũụưừứửữựûüůūUÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿYÝỲỶỸỴŸ","zžżźZŽŻŹ"];let n=[];return e.split("").forEach(a=>{r.every(i=>{if(i.indexOf(a)!==-1){if(n.indexOf(i)>-1)return!1;e=e.replace(new RegExp(`[${i}]`,`gm${t}`),`[${i}]`),n.push(i)}return!0})}),e}createMergedBlanksRegExp(e){return e.replace(/[\s]+/gmi,"[\\s]+")}createAccuracyRegExp(e){const t="!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~¡¿";let r=this.opt.accuracy,n=typeof r=="string"?r:r.value,a=typeof r=="string"?[]:r.limiters,i="";switch(a.forEach(s=>{i+=`|${this.escapeStr(s)}`}),n){case"partially":default:return`()(${e})`;case"complementary":return i="\\s"+(i||this.escapeStr(t)),`()([^${i}]*${e}[^${i}]*)`;case"exactly":return`(^|\\s${i})(${e})(?=$|\\s${i})`}}getSeparatedKeywords(e){let t=[];return e.forEach(r=>{this.opt.separateWordSearch?r.split(" ").forEach(n=>{n.trim()&&t.indexOf(n)===-1&&t.push(n)}):r.trim()&&t.indexOf(r)===-1&&t.push(r)}),{keywords:t.sort((r,n)=>n.length-r.length),length:t.length}}isNumeric(e){return Number(parseFloat(e))==e}checkRanges(e){if(!Array.isArray(e)||Object.prototype.toString.call(e[0])!=="[object Object]")return this.log("markRanges() will only accept an array of objects"),this.opt.noMatch(e),[];const t=[];let r=0;return e.sort((n,a)=>n.start-a.start).forEach(n=>{let{start:a,end:i,valid:s}=this.callNoMatchOnInvalidRanges(n,r);s&&(n.start=a,n.length=i-a,t.push(n),r=i)}),t}callNoMatchOnInvalidRanges(e,t){let r,n,a=!1;return e&&typeof e.start<"u"?(r=parseInt(e.start,10),n=r+parseInt(e.length,10),this.isNumeric(e.start)&&this.isNumeric(e.length)&&n-t>0&&n-r>0?a=!0:(this.log(`Ignoring invalid or overlapping range: ${JSON.stringify(e)}`),this.opt.noMatch(e))):(this.log(`Ignoring invalid range: ${JSON.stringify(e)}`),this.opt.noMatch(e)),{start:r,end:n,valid:a}}checkWhitespaceRanges(e,t,r){let n,a=!0,i=r.length,s=t-i,u=parseInt(e.start,10)-s;return u=u>i?i:u,n=u+parseInt(e.length,10),n>i&&(n=i,this.log(`End range automatically set to the max value of ${i}`)),u<0||n-u<0||u>i||n>i?(a=!1,this.log(`Invalid range: ${JSON.stringify(e)}`),this.opt.noMatch(e)):r.substring(u,n).replace(/\s+/g,"")===""&&(a=!1,this.log("Skipping whitespace only range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:u,end:n,valid:a}}getTextNodes(e){let t="",r=[];this.iterator.forEachNode(NodeFilter.SHOW_TEXT,n=>{r.push({start:t.length,end:(t+=n.textContent).length,node:n})},n=>this.matchesExclude(n.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT,()=>{e({value:t,nodes:r})})}matchesExclude(e){return fe.matches(e,this.opt.exclude.concat(["script","style","title","head","html"]))}wrapRangeInTextNode(e,t,r){const n=this.opt.element?this.opt.element:"mark",a=e.splitText(t),i=a.splitText(r-t);let s=document.createElement(n);return s.setAttribute("data-markjs","true"),this.opt.className&&s.setAttribute("class",this.opt.className),s.textContent=a.textContent,a.parentNode.replaceChild(s,a),i}wrapRangeInMappedTextNode(e,t,r,n,a){e.nodes.every((i,s)=>{const u=e.nodes[s+1];if(typeof u>"u"||u.start>t){if(!n(i.node))return!1;const l=t-i.start,h=(r>i.end?i.end:r)-i.start,d=e.value.substr(0,i.start),v=e.value.substr(h+i.start);if(i.node=this.wrapRangeInTextNode(i.node,l,h),e.value=d+v,e.nodes.forEach((m,b)=>{b>=s&&(e.nodes[b].start>0&&b!==s&&(e.nodes[b].start-=h),e.nodes[b].end-=h)}),r-=h,a(i.node.previousSibling,i.start),r>i.end)t=i.end;else return!1}return!0})}wrapMatches(e,t,r,n,a){const i=t===0?0:t+1;this.getTextNodes(s=>{s.nodes.forEach(u=>{u=u.node;let l;for(;(l=e.exec(u.textContent))!==null&&l[i]!=="";){if(!r(l[i],u))continue;let h=l.index;if(i!==0)for(let d=1;d{let u;for(;(u=e.exec(s.value))!==null&&u[i]!=="";){let l=u.index;if(i!==0)for(let d=1;dr(u[i],d),(d,v)=>{e.lastIndex=v,n(d)})}a()})}wrapRangeFromIndex(e,t,r,n){this.getTextNodes(a=>{const i=a.value.length;e.forEach((s,u)=>{let{start:l,end:h,valid:d}=this.checkWhitespaceRanges(s,i,a.value);d&&this.wrapRangeInMappedTextNode(a,l,h,v=>t(v,s,a.value.substring(l,h),u),v=>{r(v,s)})}),n()})}unwrapMatches(e){const t=e.parentNode;let r=document.createDocumentFragment();for(;e.firstChild;)r.appendChild(e.removeChild(e.firstChild));t.replaceChild(r,e),this.ie?this.normalizeTextNode(t):t.normalize()}normalizeTextNode(e){if(e){if(e.nodeType===3)for(;e.nextSibling&&e.nextSibling.nodeType===3;)e.nodeValue+=e.nextSibling.nodeValue,e.parentNode.removeChild(e.nextSibling);else this.normalizeTextNode(e.firstChild);this.normalizeTextNode(e.nextSibling)}}markRegExp(e,t){this.opt=t,this.log(`Searching with expression "${e}"`);let r=0,n="wrapMatches";const a=i=>{r++,this.opt.each(i)};this.opt.acrossElements&&(n="wrapMatchesAcrossElements"),this[n](e,this.opt.ignoreGroups,(i,s)=>this.opt.filter(s,i,r),a,()=>{r===0&&this.opt.noMatch(e),this.opt.done(r)})}mark(e,t){this.opt=t;let r=0,n="wrapMatches";const{keywords:a,length:i}=this.getSeparatedKeywords(typeof e=="string"?[e]:e),s=this.opt.caseSensitive?"":"i",u=l=>{let h=new RegExp(this.createRegExp(l),`gm${s}`),d=0;this.log(`Searching with expression "${h}"`),this[n](h,1,(v,m)=>this.opt.filter(m,l,r,d),v=>{d++,r++,this.opt.each(v)},()=>{d===0&&this.opt.noMatch(l),a[i-1]===l?this.opt.done(r):u(a[a.indexOf(l)+1])})};this.opt.acrossElements&&(n="wrapMatchesAcrossElements"),i===0?this.opt.done(r):u(a[0])}markRanges(e,t){this.opt=t;let r=0,n=this.checkRanges(e);n&&n.length?(this.log("Starting to mark with the following ranges: "+JSON.stringify(n)),this.wrapRangeFromIndex(n,(a,i,s,u)=>this.opt.filter(a,i,s,u),(a,i)=>{r++,this.opt.each(a,i)},()=>{this.opt.done(r)})):this.opt.done(r)}unmark(e){this.opt=e;let t=this.opt.element?this.opt.element:"*";t+="[data-markjs]",this.opt.className&&(t+=`.${this.opt.className}`),this.log(`Removal selector "${t}"`),this.iterator.forEachNode(NodeFilter.SHOW_ELEMENT,r=>{this.unwrapMatches(r)},r=>{const n=fe.matches(r,t),a=this.matchesExclude(r);return!n||a?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT},this.opt.done)}};function Rr(o){const e=new Or(o);return this.mark=(t,r)=>(e.mark(t,r),this),this.markRegExp=(t,r)=>(e.markRegExp(t,r),this),this.markRanges=(t,r)=>(e.markRanges(t,r),this),this.unmark=t=>(e.unmark(t),this),this}var W=function(){return W=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0&&a[a.length-1])&&(l[0]===6||l[0]===2)){t=0;continue}if(l[0]===3&&(!a||l[1]>a[0]&&l[1]=o.length&&(o=void 0),{value:o&&o[r++],done:!o}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function K(o,e){var t=typeof Symbol=="function"&&o[Symbol.iterator];if(!t)return o;var r=t.call(o),n,a=[],i;try{for(;(e===void 0||e-- >0)&&!(n=r.next()).done;)a.push(n.value)}catch(s){i={error:s}}finally{try{n&&!n.done&&(t=r.return)&&t.call(r)}finally{if(i)throw i.error}}return a}var Lr="ENTRIES",Ft="KEYS",Et="VALUES",H="",Me=function(){function o(e,t){var r=e._tree,n=Array.from(r.keys());this.set=e,this._type=t,this._path=n.length>0?[{node:r,keys:n}]:[]}return o.prototype.next=function(){var e=this.dive();return this.backtrack(),e},o.prototype.dive=function(){if(this._path.length===0)return{done:!0,value:void 0};var e=ce(this._path),t=e.node,r=e.keys;if(ce(r)===H)return{done:!1,value:this.result()};var n=t.get(ce(r));return this._path.push({node:n,keys:Array.from(n.keys())}),this.dive()},o.prototype.backtrack=function(){if(this._path.length!==0){var e=ce(this._path).keys;e.pop(),!(e.length>0)&&(this._path.pop(),this.backtrack())}},o.prototype.key=function(){return this.set._prefix+this._path.map(function(e){var t=e.keys;return ce(t)}).filter(function(e){return e!==H}).join("")},o.prototype.value=function(){return ce(this._path).node.get(H)},o.prototype.result=function(){switch(this._type){case Et:return this.value();case Ft:return this.key();default:return[this.key(),this.value()]}},o.prototype[Symbol.iterator]=function(){return this},o}(),ce=function(o){return o[o.length-1]},zr=function(o,e,t){var r=new Map;if(e===void 0)return r;for(var n=e.length+1,a=n+t,i=new Uint8Array(a*n).fill(t+1),s=0;st)continue e}St(o.get(m),e,t,r,n,S,i,s+m)}}}catch(f){u={error:f}}finally{try{v&&!v.done&&(l=d.return)&&l.call(d)}finally{if(u)throw u.error}}},Le=function(){function o(e,t){e===void 0&&(e=new Map),t===void 0&&(t=""),this._size=void 0,this._tree=e,this._prefix=t}return o.prototype.atPrefix=function(e){var t,r;if(!e.startsWith(this._prefix))throw new Error("Mismatched prefix");var n=K(De(this._tree,e.slice(this._prefix.length)),2),a=n[0],i=n[1];if(a===void 0){var s=K(Ue(i),2),u=s[0],l=s[1];try{for(var h=D(u.keys()),d=h.next();!d.done;d=h.next()){var v=d.value;if(v!==H&&v.startsWith(l)){var m=new Map;return m.set(v.slice(l.length),u.get(v)),new o(m,e)}}}catch(b){t={error:b}}finally{try{d&&!d.done&&(r=h.return)&&r.call(h)}finally{if(t)throw t.error}}}return new o(a,e)},o.prototype.clear=function(){this._size=void 0,this._tree.clear()},o.prototype.delete=function(e){return this._size=void 0,Pr(this._tree,e)},o.prototype.entries=function(){return new Me(this,Lr)},o.prototype.forEach=function(e){var t,r;try{for(var n=D(this),a=n.next();!a.done;a=n.next()){var i=K(a.value,2),s=i[0],u=i[1];e(s,u,this)}}catch(l){t={error:l}}finally{try{a&&!a.done&&(r=n.return)&&r.call(n)}finally{if(t)throw t.error}}},o.prototype.fuzzyGet=function(e,t){return zr(this._tree,e,t)},o.prototype.get=function(e){var t=je(this._tree,e);return t!==void 0?t.get(H):void 0},o.prototype.has=function(e){var t=je(this._tree,e);return t!==void 0&&t.has(H)},o.prototype.keys=function(){return new Me(this,Ft)},o.prototype.set=function(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;var r=ze(this._tree,e);return r.set(H,t),this},Object.defineProperty(o.prototype,"size",{get:function(){if(this._size)return this._size;this._size=0;for(var e=this.entries();!e.next().done;)this._size+=1;return this._size},enumerable:!1,configurable:!0}),o.prototype.update=function(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;var r=ze(this._tree,e);return r.set(H,t(r.get(H))),this},o.prototype.fetch=function(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;var r=ze(this._tree,e),n=r.get(H);return n===void 0&&r.set(H,n=t()),n},o.prototype.values=function(){return new Me(this,Et)},o.prototype[Symbol.iterator]=function(){return this.entries()},o.from=function(e){var t,r,n=new o;try{for(var a=D(e),i=a.next();!i.done;i=a.next()){var s=K(i.value,2),u=s[0],l=s[1];n.set(u,l)}}catch(h){t={error:h}}finally{try{i&&!i.done&&(r=a.return)&&r.call(a)}finally{if(t)throw t.error}}return n},o.fromObject=function(e){return o.from(Object.entries(e))},o}(),De=function(o,e,t){var r,n;if(t===void 0&&(t=[]),e.length===0||o==null)return[o,t];try{for(var a=D(o.keys()),i=a.next();!i.done;i=a.next()){var s=i.value;if(s!==H&&e.startsWith(s))return t.push([o,s]),De(o.get(s),e.slice(s.length),t)}}catch(u){r={error:u}}finally{try{i&&!i.done&&(n=a.return)&&n.call(a)}finally{if(r)throw r.error}}return t.push([o,e]),De(void 0,"",t)},je=function(o,e){var t,r;if(e.length===0||o==null)return o;try{for(var n=D(o.keys()),a=n.next();!a.done;a=n.next()){var i=a.value;if(i!==H&&e.startsWith(i))return je(o.get(i),e.slice(i.length))}}catch(s){t={error:s}}finally{try{a&&!a.done&&(r=n.return)&&r.call(n)}finally{if(t)throw t.error}}},ze=function(o,e){var t,r,n=e.length;e:for(var a=0;o&&a0)throw new Error("Expected documents to be present. Omit the argument to remove all documents.");this._index=new Le,this._documentCount=0,this._documentIds=new Map,this._idToShortId=new Map,this._fieldLength=new Map,this._avgFieldLength=[],this._storedFields=new Map,this._nextId=0}},o.prototype.discard=function(e){var t=this,r=this._idToShortId.get(e);if(r==null)throw new Error("MiniSearch: cannot discard document with ID ".concat(e,": it is not in the index"));this._idToShortId.delete(e),this._documentIds.delete(r),this._storedFields.delete(r),(this._fieldLength.get(r)||[]).forEach(function(n,a){t.removeFieldLength(r,a,t._documentCount,n)}),this._fieldLength.delete(r),this._documentCount-=1,this._dirtCount+=1,this.maybeAutoVacuum()},o.prototype.maybeAutoVacuum=function(){if(this._options.autoVacuum!==!1){var e=this._options.autoVacuum,t=e.minDirtFactor,r=e.minDirtCount,n=e.batchSize,a=e.batchWait;this.conditionalVacuum({batchSize:n,batchWait:a},{minDirtCount:r,minDirtFactor:t})}},o.prototype.discardAll=function(e){var t,r,n=this._options.autoVacuum;try{this._options.autoVacuum=!1;try{for(var a=D(e),i=a.next();!i.done;i=a.next()){var s=i.value;this.discard(s)}}catch(u){t={error:u}}finally{try{i&&!i.done&&(r=a.return)&&r.call(a)}finally{if(t)throw t.error}}}finally{this._options.autoVacuum=n}this.maybeAutoVacuum()},o.prototype.replace=function(e){var t=this._options,r=t.idField,n=t.extractField,a=n(e,r);this.discard(a),this.add(e)},o.prototype.vacuum=function(e){return e===void 0&&(e={}),this.conditionalVacuum(e)},o.prototype.conditionalVacuum=function(e,t){var r=this;return this._currentVacuum?(this._enqueuedVacuumConditions=this._enqueuedVacuumConditions&&t,this._enqueuedVacuum!=null?this._enqueuedVacuum:(this._enqueuedVacuum=this._currentVacuum.then(function(){var n=r._enqueuedVacuumConditions;return r._enqueuedVacuumConditions=Je,r.performVacuuming(e,n)}),this._enqueuedVacuum)):this.vacuumConditionsMet(t)===!1?Promise.resolve():(this._currentVacuum=this.performVacuuming(e),this._currentVacuum)},o.prototype.performVacuuming=function(e,t){return _r(this,void 0,void 0,function(){var r,n,a,i,s,u,l,h,d,v,m,b,S,g,A,T,F,L,_,V,N,R,C,O,w;return Mr(this,function(c){switch(c.label){case 0:if(r=this._dirtCount,!this.vacuumConditionsMet(t))return[3,10];n=e.batchSize||Ke.batchSize,a=e.batchWait||Ke.batchWait,i=1,c.label=1;case 1:c.trys.push([1,7,8,9]),s=D(this._index),u=s.next(),c.label=2;case 2:if(u.done)return[3,6];l=K(u.value,2),h=l[0],d=l[1];try{for(v=(R=void 0,D(d)),m=v.next();!m.done;m=v.next()){b=K(m.value,2),S=b[0],g=b[1];try{for(A=(O=void 0,D(g)),T=A.next();!T.done;T=A.next())F=K(T.value,1),L=F[0],!this._documentIds.has(L)&&(g.size<=1?d.delete(S):g.delete(L))}catch(f){O={error:f}}finally{try{T&&!T.done&&(w=A.return)&&w.call(A)}finally{if(O)throw O.error}}}}catch(f){R={error:f}}finally{try{m&&!m.done&&(C=v.return)&&C.call(v)}finally{if(R)throw R.error}}return this._index.get(h).size===0&&this._index.delete(h),i%n!==0?[3,4]:[4,new Promise(function(f){return setTimeout(f,a)})];case 3:c.sent(),c.label=4;case 4:i+=1,c.label=5;case 5:return u=s.next(),[3,2];case 6:return[3,9];case 7:return _=c.sent(),V={error:_},[3,9];case 8:try{u&&!u.done&&(N=s.return)&&N.call(s)}finally{if(V)throw V.error}return[7];case 9:this._dirtCount-=r,c.label=10;case 10:return[4,null];case 11:return c.sent(),this._currentVacuum=this._enqueuedVacuum,this._enqueuedVacuum=null,[2]}})})},o.prototype.vacuumConditionsMet=function(e){if(e==null)return!0;var t=e.minDirtCount,r=e.minDirtFactor;return t=t||Ve.minDirtCount,r=r||Ve.minDirtFactor,this.dirtCount>=t&&this.dirtFactor>=r},Object.defineProperty(o.prototype,"isVacuuming",{get:function(){return this._currentVacuum!=null},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"dirtCount",{get:function(){return this._dirtCount},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"dirtFactor",{get:function(){return this._dirtCount/(1+this._documentCount+this._dirtCount)},enumerable:!1,configurable:!0}),o.prototype.has=function(e){return this._idToShortId.has(e)},o.prototype.getStoredFields=function(e){var t=this._idToShortId.get(e);if(t!=null)return this._storedFields.get(t)},o.prototype.search=function(e,t){var r,n;t===void 0&&(t={});var a=this.executeQuery(e,t),i=[];try{for(var s=D(a),u=s.next();!u.done;u=s.next()){var l=K(u.value,2),h=l[0],d=l[1],v=d.score,m=d.terms,b=d.match,S=m.length||1,g={id:this._documentIds.get(h),score:v*S,terms:Object.keys(b),queryTerms:m,match:b};Object.assign(g,this._storedFields.get(h)),(t.filter==null||t.filter(g))&&i.push(g)}}catch(A){r={error:A}}finally{try{u&&!u.done&&(n=s.return)&&n.call(s)}finally{if(r)throw r.error}}return e===o.wildcard&&t.boostDocument==null&&this._options.searchOptions.boostDocument==null||i.sort(vt),i},o.prototype.autoSuggest=function(e,t){var r,n,a,i;t===void 0&&(t={}),t=W(W({},this._options.autoSuggestOptions),t);var s=new Map;try{for(var u=D(this.search(e,t)),l=u.next();!l.done;l=u.next()){var h=l.value,d=h.score,v=h.terms,m=v.join(" "),b=s.get(m);b!=null?(b.score+=d,b.count+=1):s.set(m,{score:d,terms:v,count:1})}}catch(_){r={error:_}}finally{try{l&&!l.done&&(n=u.return)&&n.call(u)}finally{if(r)throw r.error}}var S=[];try{for(var g=D(s),A=g.next();!A.done;A=g.next()){var T=K(A.value,2),b=T[0],F=T[1],d=F.score,v=F.terms,L=F.count;S.push({suggestion:b,terms:v,score:d/L})}}catch(_){a={error:_}}finally{try{A&&!A.done&&(i=g.return)&&i.call(g)}finally{if(a)throw a.error}}return S.sort(vt),S},Object.defineProperty(o.prototype,"documentCount",{get:function(){return this._documentCount},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"termCount",{get:function(){return this._index.size},enumerable:!1,configurable:!0}),o.loadJSON=function(e,t){if(t==null)throw new Error("MiniSearch: loadJSON should be given the same options used when serializing the index");return this.loadJS(JSON.parse(e),t)},o.getDefault=function(e){if(Be.hasOwnProperty(e))return Pe(Be,e);throw new Error('MiniSearch: unknown option "'.concat(e,'"'))},o.loadJS=function(e,t){var r,n,a,i,s,u,l=e.index,h=e.documentCount,d=e.nextId,v=e.documentIds,m=e.fieldIds,b=e.fieldLength,S=e.averageFieldLength,g=e.storedFields,A=e.dirtCount,T=e.serializationVersion;if(T!==1&&T!==2)throw new Error("MiniSearch: cannot deserialize an index created with an incompatible version");var F=new o(t);F._documentCount=h,F._nextId=d,F._documentIds=Ce(v),F._idToShortId=new Map,F._fieldIds=m,F._fieldLength=Ce(b),F._avgFieldLength=S,F._storedFields=Ce(g),F._dirtCount=A||0,F._index=new Le;try{for(var L=D(F._documentIds),_=L.next();!_.done;_=L.next()){var V=K(_.value,2),N=V[0],R=V[1];F._idToShortId.set(R,N)}}catch(P){r={error:P}}finally{try{_&&!_.done&&(n=L.return)&&n.call(L)}finally{if(r)throw r.error}}try{for(var C=D(l),O=C.next();!O.done;O=C.next()){var w=K(O.value,2),c=w[0],f=w[1],p=new Map;try{for(var k=(s=void 0,D(Object.keys(f))),I=k.next();!I.done;I=k.next()){var M=I.value,z=f[M];T===1&&(z=z.ds),p.set(parseInt(M,10),Ce(z))}}catch(P){s={error:P}}finally{try{I&&!I.done&&(u=k.return)&&u.call(k)}finally{if(s)throw s.error}}F._index.set(c,p)}}catch(P){a={error:P}}finally{try{O&&!O.done&&(i=C.return)&&i.call(C)}finally{if(a)throw a.error}}return F},o.prototype.executeQuery=function(e,t){var r=this;if(t===void 0&&(t={}),e===o.wildcard)return this.executeWildcardQuery(t);if(typeof e!="string"){var n=W(W(W({},t),e),{queries:void 0}),a=e.queries.map(function(g){return r.executeQuery(g,n)});return this.combineResults(a,n.combineWith)}var i=this._options,s=i.tokenize,u=i.processTerm,l=i.searchOptions,h=W(W({tokenize:s,processTerm:u},l),t),d=h.tokenize,v=h.processTerm,m=d(e).flatMap(function(g){return v(g)}).filter(function(g){return!!g}),b=m.map(Kr(h)),S=b.map(function(g){return r.executeQuerySpec(g,h)});return this.combineResults(S,h.combineWith)},o.prototype.executeQuerySpec=function(e,t){var r,n,a,i,s=W(W({},this._options.searchOptions),t),u=(s.fields||this._options.fields).reduce(function(M,z){var P;return W(W({},M),(P={},P[z]=Pe(s.boost,z)||1,P))},{}),l=s.boostDocument,h=s.weights,d=s.maxFuzzy,v=s.bm25,m=W(W({},ht.weights),h),b=m.fuzzy,S=m.prefix,g=this._index.get(e.term),A=this.termResults(e.term,e.term,1,g,u,l,v),T,F;if(e.prefix&&(T=this._index.atPrefix(e.term)),e.fuzzy){var L=e.fuzzy===!0?.2:e.fuzzy,_=L<1?Math.min(d,Math.round(e.term.length*L)):L;_&&(F=this._index.fuzzyGet(e.term,_))}if(T)try{for(var V=D(T),N=V.next();!N.done;N=V.next()){var R=K(N.value,2),C=R[0],O=R[1],w=C.length-e.term.length;if(w){F==null||F.delete(C);var c=S*C.length/(C.length+.3*w);this.termResults(e.term,C,c,O,u,l,v,A)}}}catch(M){r={error:M}}finally{try{N&&!N.done&&(n=V.return)&&n.call(V)}finally{if(r)throw r.error}}if(F)try{for(var f=D(F.keys()),p=f.next();!p.done;p=f.next()){var C=p.value,k=K(F.get(C),2),I=k[0],w=k[1];if(w){var c=b*C.length/(C.length+w);this.termResults(e.term,C,c,I,u,l,v,A)}}}catch(M){a={error:M}}finally{try{p&&!p.done&&(i=f.return)&&i.call(f)}finally{if(a)throw a.error}}return A},o.prototype.executeWildcardQuery=function(e){var t,r,n=new Map,a=W(W({},this._options.searchOptions),e);try{for(var i=D(this._documentIds),s=i.next();!s.done;s=i.next()){var u=K(s.value,2),l=u[0],h=u[1],d=a.boostDocument?a.boostDocument(h,"",this._storedFields.get(l)):1;n.set(l,{score:d,terms:[],match:{}})}}catch(v){t={error:v}}finally{try{s&&!s.done&&(r=i.return)&&r.call(i)}finally{if(t)throw t.error}}return n},o.prototype.combineResults=function(e,t){if(t===void 0&&(t=He),e.length===0)return new Map;var r=t.toLowerCase();return e.reduce($r[r])||new Map},o.prototype.toJSON=function(){var e,t,r,n,a=[];try{for(var i=D(this._index),s=i.next();!s.done;s=i.next()){var u=K(s.value,2),l=u[0],h=u[1],d={};try{for(var v=(r=void 0,D(h)),m=v.next();!m.done;m=v.next()){var b=K(m.value,2),S=b[0],g=b[1];d[S]=Object.fromEntries(g)}}catch(A){r={error:A}}finally{try{m&&!m.done&&(n=v.return)&&n.call(v)}finally{if(r)throw r.error}}a.push([l,d])}}catch(A){e={error:A}}finally{try{s&&!s.done&&(t=i.return)&&t.call(i)}finally{if(e)throw e.error}}return{documentCount:this._documentCount,nextId:this._nextId,documentIds:Object.fromEntries(this._documentIds),fieldIds:this._fieldIds,fieldLength:Object.fromEntries(this._fieldLength),averageFieldLength:this._avgFieldLength,storedFields:Object.fromEntries(this._storedFields),dirtCount:this._dirtCount,index:a,serializationVersion:2}},o.prototype.termResults=function(e,t,r,n,a,i,s,u){var l,h,d,v,m;if(u===void 0&&(u=new Map),n==null)return u;try{for(var b=D(Object.keys(a)),S=b.next();!S.done;S=b.next()){var g=S.value,A=a[g],T=this._fieldIds[g],F=n.get(T);if(F!=null){var L=F.size,_=this._avgFieldLength[T];try{for(var V=(d=void 0,D(F.keys())),N=V.next();!N.done;N=V.next()){var R=N.value;if(!this._documentIds.has(R)){this.removeTerm(T,R,t),L-=1;continue}var C=i?i(this._documentIds.get(R),t,this._storedFields.get(R)):1;if(C){var O=F.get(R),w=this._fieldLength.get(R)[T],c=jr(O,L,this._documentCount,w,_,s),f=r*A*C*c,p=u.get(R);if(p){p.score+=f,Ur(p.terms,e);var k=Pe(p.match,t);k?k.push(g):p.match[t]=[g]}else u.set(R,{score:f,terms:[e],match:(m={},m[t]=[g],m)})}}}catch(I){d={error:I}}finally{try{N&&!N.done&&(v=V.return)&&v.call(V)}finally{if(d)throw d.error}}}}}catch(I){l={error:I}}finally{try{S&&!S.done&&(h=b.return)&&h.call(b)}finally{if(l)throw l.error}}return u},o.prototype.addTerm=function(e,t,r){var n=this._index.fetch(r,pt),a=n.get(e);if(a==null)a=new Map,a.set(t,1),n.set(e,a);else{var i=a.get(t);a.set(t,(i||0)+1)}},o.prototype.removeTerm=function(e,t,r){if(!this._index.has(r)){this.warnDocumentChanged(t,e,r);return}var n=this._index.fetch(r,pt),a=n.get(e);a==null||a.get(t)==null?this.warnDocumentChanged(t,e,r):a.get(t)<=1?a.size<=1?n.delete(e):a.delete(t):a.set(t,a.get(t)-1),this._index.get(r).size===0&&this._index.delete(r)},o.prototype.warnDocumentChanged=function(e,t,r){var n,a;try{for(var i=D(Object.keys(this._fieldIds)),s=i.next();!s.done;s=i.next()){var u=s.value;if(this._fieldIds[u]===t){this._options.logger("warn","MiniSearch: document with ID ".concat(this._documentIds.get(e),' has changed before removal: term "').concat(r,'" was not present in field "').concat(u,'". Removing a document after it has changed can corrupt the index!'),"version_conflict");return}}}catch(l){n={error:l}}finally{try{s&&!s.done&&(a=i.return)&&a.call(i)}finally{if(n)throw n.error}}},o.prototype.addDocumentId=function(e){var t=this._nextId;return this._idToShortId.set(e,t),this._documentIds.set(t,e),this._documentCount+=1,this._nextId+=1,t},o.prototype.addFields=function(e){for(var t=0;t(qt("data-v-bbd083ab"),o=o(),Qt(),o),qr=["aria-owns"],Qr={class:"shell"},Yr=["title"],Zr=Y(()=>E("svg",{class:"search-icon",width:"18",height:"18",viewBox:"0 0 24 24","aria-hidden":"true"},[E("g",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},[E("circle",{cx:"11",cy:"11",r:"8"}),E("path",{d:"m21 21l-4.35-4.35"})])],-1)),Xr=[Zr],ea={class:"search-actions before"},ta=["title"],ra=Y(()=>E("svg",{width:"18",height:"18",viewBox:"0 0 24 24","aria-hidden":"true"},[E("path",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M19 12H5m7 7l-7-7l7-7"})],-1)),aa=[ra],na=["placeholder"],ia={class:"search-actions"},oa=["title"],sa=Y(()=>E("svg",{width:"18",height:"18",viewBox:"0 0 24 24","aria-hidden":"true"},[E("path",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M3 14h7v7H3zM3 3h7v7H3zm11 1h7m-7 5h7m-7 6h7m-7 5h7"})],-1)),ua=[sa],la=["disabled","title"],ca=Y(()=>E("svg",{width:"18",height:"18",viewBox:"0 0 24 24","aria-hidden":"true"},[E("path",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M20 5H9l-7 7l7 7h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2Zm-2 4l-6 6m0-6l6 6"})],-1)),fa=[ca],ha=["id","role","aria-labelledby"],da=["aria-selected"],va=["href","aria-label","onMouseenter","onFocusin"],pa={class:"titles"},ma=Y(()=>E("span",{class:"title-icon"},"#",-1)),ya=["innerHTML"],ga=Y(()=>E("svg",{width:"18",height:"18",viewBox:"0 0 24 24"},[E("path",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"m9 18l6-6l-6-6"})],-1)),ba={class:"title main"},wa=["innerHTML"],xa={key:0,class:"excerpt-wrapper"},Fa={key:0,class:"excerpt",inert:""},Ea=["innerHTML"],Sa=Y(()=>E("div",{class:"excerpt-gradient-bottom"},null,-1)),Aa=Y(()=>E("div",{class:"excerpt-gradient-top"},null,-1)),Ca={key:0,class:"no-results"},Ta={class:"search-keyboard-shortcuts"},Na=["aria-label"],ka=Y(()=>E("svg",{width:"14",height:"14",viewBox:"0 0 24 24"},[E("path",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 19V5m-7 7l7-7l7 7"})],-1)),Ia=[ka],Da=["aria-label"],Oa=Y(()=>E("svg",{width:"14",height:"14",viewBox:"0 0 24 24"},[E("path",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 5v14m7-7l-7 7l-7-7"})],-1)),Ra=[Oa],_a=["aria-label"],Ma=Y(()=>E("svg",{width:"14",height:"14",viewBox:"0 0 24 24"},[E("g",{fill:"none",stroke:"currentcolor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},[E("path",{d:"m9 10l-5 5l5 5"}),E("path",{d:"M20 4v7a4 4 0 0 1-4 4H4"})])],-1)),La=[Ma],za=["aria-label"],Pa=Rt({__name:"VPLocalSearchBox",emits:["close"],setup(o,{emit:e}){var z,P;const t=e,r=xe(),n=xe(),a=xe(nr),i=rr(),{activate:s}=Dr(r,{immediate:!0,allowOutsideClick:!0,clickOutsideDeactivates:!0,escapeDeactivates:!0}),{localeIndex:u,theme:l}=i,h=tt(async()=>{var y,x,$,j,G,q,B,J,Z;return it(Vr.loadJSON(($=await((x=(y=a.value)[u.value])==null?void 0:x.call(y)))==null?void 0:$.default,{fields:["title","titles","text"],storeFields:["title","titles"],searchOptions:{fuzzy:.2,prefix:!0,boost:{title:4,text:2,titles:1},...((j=l.value.search)==null?void 0:j.provider)==="local"&&((q=(G=l.value.search.options)==null?void 0:G.miniSearch)==null?void 0:q.searchOptions)},...((B=l.value.search)==null?void 0:B.provider)==="local"&&((Z=(J=l.value.search.options)==null?void 0:J.miniSearch)==null?void 0:Z.options)}))}),v=Fe(()=>{var y,x;return((y=l.value.search)==null?void 0:y.provider)==="local"&&((x=l.value.search.options)==null?void 0:x.disableQueryPersistence)===!0}).value?oe(""):_t("vitepress:local-search-filter",""),m=Mt("vitepress:local-search-detailed-list",((z=l.value.search)==null?void 0:z.provider)==="local"&&((P=l.value.search.options)==null?void 0:P.detailedView)===!0),b=Fe(()=>{var y,x,$;return((y=l.value.search)==null?void 0:y.provider)==="local"&&(((x=l.value.search.options)==null?void 0:x.disableDetailedView)===!0||(($=l.value.search.options)==null?void 0:$.detailedView)===!1)}),S=Fe(()=>{var x,$,j,G,q,B,J;const y=((x=l.value.search)==null?void 0:x.options)??l.value.algolia;return((q=(G=(j=($=y==null?void 0:y.locales)==null?void 0:$[u.value])==null?void 0:j.translations)==null?void 0:G.button)==null?void 0:q.buttonText)||((J=(B=y==null?void 0:y.translations)==null?void 0:B.button)==null?void 0:J.buttonText)||"Search"});Lt(()=>{b.value&&(m.value=!1)});const g=xe([]),A=oe(!1);$e(v,()=>{A.value=!1});const T=tt(async()=>{if(n.value)return it(new Rr(n.value))},null),F=new Gr(16);zt(()=>[h.value,v.value,m.value],async([y,x,$],j,G)=>{var be,Ge,qe,Qe;(j==null?void 0:j[0])!==y&&F.clear();let q=!1;if(G(()=>{q=!0}),!y)return;g.value=y.search(x).slice(0,16),A.value=!0;const B=$?await Promise.all(g.value.map(Q=>L(Q.id))):[];if(q)return;for(const{id:Q,mod:ae}of B){const ne=Q.slice(0,Q.indexOf("#"));let te=F.get(ne);if(te)continue;te=new Map,F.set(ne,te);const X=ae.default??ae;if(X!=null&&X.render||X!=null&&X.setup){const ie=Yt(X);ie.config.warnHandler=()=>{},ie.provide(Zt,i),Object.defineProperties(ie.config.globalProperties,{$frontmatter:{get(){return i.frontmatter.value}},$params:{get(){return i.page.value.params}}});const Ye=document.createElement("div");ie.mount(Ye),Ye.querySelectorAll("h1, h2, h3, h4, h5, h6").forEach(he=>{var et;const we=(et=he.querySelector("a"))==null?void 0:et.getAttribute("href"),Ze=(we==null?void 0:we.startsWith("#"))&&we.slice(1);if(!Ze)return;let Xe="";for(;(he=he.nextElementSibling)&&!/^h[1-6]$/i.test(he.tagName);)Xe+=he.outerHTML;te.set(Ze,Xe)}),ie.unmount()}if(q)return}const J=new Set;if(g.value=g.value.map(Q=>{const[ae,ne]=Q.id.split("#"),te=F.get(ae),X=(te==null?void 0:te.get(ne))??"";for(const ie in Q.match)J.add(ie);return{...Q,text:X}}),await de(),q)return;await new Promise(Q=>{var ae;(ae=T.value)==null||ae.unmark({done:()=>{var ne;(ne=T.value)==null||ne.markRegExp(M(J),{done:Q})}})});const Z=((be=r.value)==null?void 0:be.querySelectorAll(".result .excerpt"))??[];for(const Q of Z)(Ge=Q.querySelector('mark[data-markjs="true"]'))==null||Ge.scrollIntoView({block:"center"});(Qe=(qe=n.value)==null?void 0:qe.firstElementChild)==null||Qe.scrollIntoView({block:"start"})},{debounce:200,immediate:!0});async function L(y){const x=Xt(y.slice(0,y.indexOf("#")));try{if(!x)throw new Error(`Cannot find file for id: ${y}`);return{id:y,mod:await import(x)}}catch($){return console.error($),{id:y,mod:{}}}}const _=oe(),V=Fe(()=>{var y;return((y=v.value)==null?void 0:y.length)<=0});function N(y=!0){var x,$;(x=_.value)==null||x.focus(),y&&(($=_.value)==null||$.select())}Re(()=>{N()});function R(y){y.pointerType==="mouse"&&N()}const C=oe(-1),O=oe(!1);$e(g,y=>{C.value=y.length?0:-1,w()});function w(){de(()=>{const y=document.querySelector(".result.selected");y&&y.scrollIntoView({block:"nearest"})})}Ee("ArrowUp",y=>{y.preventDefault(),C.value--,C.value<0&&(C.value=g.value.length-1),O.value=!0,w()}),Ee("ArrowDown",y=>{y.preventDefault(),C.value++,C.value>=g.value.length&&(C.value=0),O.value=!0,w()});const c=Pt();Ee("Enter",y=>{if(y.target instanceof HTMLButtonElement&&y.target.type!=="submit")return;const x=g.value[C.value];if(y.target instanceof HTMLInputElement&&!x){y.preventDefault();return}x&&(c.go(x.id),t("close"))}),Ee("Escape",()=>{t("close")});const p=ar({modal:{displayDetails:"Display detailed list",resetButtonTitle:"Reset search",backButtonTitle:"Close search",noResultsText:"No results for",footer:{selectText:"to select",selectKeyAriaLabel:"enter",navigateText:"to navigate",navigateUpKeyAriaLabel:"up arrow",navigateDownKeyAriaLabel:"down arrow",closeText:"to close",closeKeyAriaLabel:"escape"}}});Re(()=>{window.history.pushState(null,"",null)}),Bt("popstate",y=>{y.preventDefault(),t("close")});const k=Vt($t?document.body:null);Re(()=>{de(()=>{k.value=!0,de().then(()=>s())})}),Wt(()=>{k.value=!1});function I(){v.value="",de().then(()=>N(!1))}function M(y){return new RegExp([...y].sort((x,$)=>$.length-x.length).map(x=>`(${er(x)})`).join("|"),"gi")}return(y,x)=>{var $,j,G,q;return ee(),jt(Gt,{to:"body"},[E("div",{ref_key:"el",ref:r,role:"button","aria-owns":($=g.value)!=null&&$.length?"localsearch-list":void 0,"aria-expanded":"true","aria-haspopup":"listbox","aria-labelledby":"localsearch-label",class:"VPLocalSearchBox"},[E("div",{class:"backdrop",onClick:x[0]||(x[0]=B=>y.$emit("close"))}),E("div",Qr,[E("form",{class:"search-bar",onPointerup:x[4]||(x[4]=B=>R(B)),onSubmit:x[5]||(x[5]=Kt(()=>{},["prevent"]))},[E("label",{title:S.value,id:"localsearch-label",for:"localsearch-input"},Xr,8,Yr),E("div",ea,[E("button",{class:"back-button",title:U(p)("modal.backButtonTitle"),onClick:x[1]||(x[1]=B=>y.$emit("close"))},aa,8,ta)]),Jt(E("input",{ref_key:"searchInput",ref:_,"onUpdate:modelValue":x[2]||(x[2]=B=>Ht(v)?v.value=B:null),placeholder:S.value,id:"localsearch-input","aria-labelledby":"localsearch-label",class:"search-input"},null,8,na),[[Ut,U(v)]]),E("div",ia,[b.value?Se("",!0):(ee(),re("button",{key:0,class:rt(["toggle-layout-button",{"detailed-list":U(m)}]),type:"button",title:U(p)("modal.displayDetails"),onClick:x[3]||(x[3]=B=>C.value>-1&&(m.value=!U(m)))},ua,10,oa)),E("button",{class:"clear-button",type:"reset",disabled:V.value,title:U(p)("modal.resetButtonTitle"),onClick:I},fa,8,la)])],32),E("ul",{ref_key:"resultsEl",ref:n,id:(j=g.value)!=null&&j.length?"localsearch-list":void 0,role:(G=g.value)!=null&&G.length?"listbox":void 0,"aria-labelledby":(q=g.value)!=null&&q.length?"localsearch-label":void 0,class:"results",onMousemove:x[7]||(x[7]=B=>O.value=!1)},[(ee(!0),re(nt,null,at(g.value,(B,J)=>(ee(),re("li",{key:B.id,role:"option","aria-selected":C.value===J?"true":"false"},[E("a",{href:B.id,class:rt(["result",{selected:C.value===J}]),"aria-label":[...B.titles,B.title].join(" > "),onMouseenter:Z=>!O.value&&(C.value=J),onFocusin:Z=>C.value=J,onClick:x[6]||(x[6]=Z=>y.$emit("close"))},[E("div",null,[E("div",pa,[ma,(ee(!0),re(nt,null,at(B.titles,(Z,be)=>(ee(),re("span",{key:be,class:"title"},[E("span",{class:"text",innerHTML:Z},null,8,ya),ga]))),128)),E("span",ba,[E("span",{class:"text",innerHTML:B.title},null,8,wa)])]),U(m)?(ee(),re("div",xa,[B.text?(ee(),re("div",Fa,[E("div",{class:"vp-doc",innerHTML:B.text},null,8,Ea)])):Se("",!0),Sa,Aa])):Se("",!0)])],42,va)],8,da))),128)),U(v)&&!g.value.length&&A.value?(ee(),re("li",Ca,[ve(pe(U(p)("modal.noResultsText"))+' "',1),E("strong",null,pe(U(v)),1),ve('" ')])):Se("",!0)],40,ha),E("div",Ta,[E("span",null,[E("kbd",{"aria-label":U(p)("modal.footer.navigateUpKeyAriaLabel")},Ia,8,Na),E("kbd",{"aria-label":U(p)("modal.footer.navigateDownKeyAriaLabel")},Ra,8,Da),ve(" "+pe(U(p)("modal.footer.navigateText")),1)]),E("span",null,[E("kbd",{"aria-label":U(p)("modal.footer.selectKeyAriaLabel")},La,8,_a),ve(" "+pe(U(p)("modal.footer.selectText")),1)]),E("span",null,[E("kbd",{"aria-label":U(p)("modal.footer.closeKeyAriaLabel")},"esc",8,za),ve(" "+pe(U(p)("modal.footer.closeText")),1)])])])],8,qr)])}}}),Ka=tr(Pa,[["__scopeId","data-v-bbd083ab"]]);export{Ka as default}; +*/function st(o,e){var t=Object.keys(o);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(o);e&&(r=r.filter(function(n){return Object.getOwnPropertyDescriptor(o,n).enumerable})),t.push.apply(t,r)}return t}function ut(o){for(var e=1;e0){var r=e[e.length-1];r!==t&&r.pause()}var n=e.indexOf(t);n===-1||e.splice(n,1),e.push(t)},deactivateTrap:function(e,t){var r=e.indexOf(t);r!==-1&&e.splice(r,1),e.length>0&&e[e.length-1].unpause()}},Ar=function(e){return e.tagName&&e.tagName.toLowerCase()==="input"&&typeof e.select=="function"},Cr=function(e){return(e==null?void 0:e.key)==="Escape"||(e==null?void 0:e.key)==="Esc"||(e==null?void 0:e.keyCode)===27},ge=function(e){return(e==null?void 0:e.key)==="Tab"||(e==null?void 0:e.keyCode)===9},Tr=function(e){return ge(e)&&!e.shiftKey},Nr=function(e){return ge(e)&&e.shiftKey},ct=function(e){return setTimeout(e,0)},ft=function(e,t){var r=-1;return e.every(function(n,a){return t(n)?(r=a,!1):!0}),r},me=function(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n1?p-1:0),I=1;I=0)c=r.activeElement;else{var f=i.tabbableGroups[0],p=f&&f.firstTabbableNode;c=p||h("fallbackFocus")}if(!c)throw new Error("Your focus-trap needs to have at least one focusable element");return c},v=function(){if(i.containerGroups=i.containers.map(function(c){var f=br(c,a.tabbableOptions),p=wr(c,a.tabbableOptions),k=f.length>0?f[0]:void 0,I=f.length>0?f[f.length-1]:void 0,M=p.find(function(y){return le(y)}),z=p.slice().reverse().find(function(y){return le(y)}),P=!!f.find(function(y){return se(y)>0});return{container:c,tabbableNodes:f,focusableNodes:p,posTabIndexesFound:P,firstTabbableNode:k,lastTabbableNode:I,firstDomTabbableNode:M,lastDomTabbableNode:z,nextTabbableNode:function(x){var $=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,K=f.indexOf(x);return K<0?$?p.slice(p.indexOf(x)+1).find(function(G){return le(G)}):p.slice(0,p.indexOf(x)).reverse().find(function(G){return le(G)}):f[K+($?1:-1)]}}}),i.tabbableGroups=i.containerGroups.filter(function(c){return c.tabbableNodes.length>0}),i.tabbableGroups.length<=0&&!h("fallbackFocus"))throw new Error("Your focus-trap must have at least one container with at least one tabbable node in it at all times");if(i.containerGroups.find(function(c){return c.posTabIndexesFound})&&i.containerGroups.length>1)throw new Error("At least one node with a positive tabindex was found in one of your focus-trap's multiple containers. Positive tabindexes are only supported in single-container focus-traps.")},m=function w(c){var f=c.activeElement;if(f)return f.shadowRoot&&f.shadowRoot.activeElement!==null?w(f.shadowRoot):f},b=function w(c){if(c!==!1&&c!==m(document)){if(!c||!c.focus){w(d());return}c.focus({preventScroll:!!a.preventScroll}),i.mostRecentlyFocusedNode=c,Ar(c)&&c.select()}},S=function(c){var f=h("setReturnFocus",c);return f||(f===!1?!1:c)},g=function(c){var f=c.target,p=c.event,k=c.isBackward,I=k===void 0?!1:k;f=f||Ae(p),v();var M=null;if(i.tabbableGroups.length>0){var z=l(f,p),P=z>=0?i.containerGroups[z]:void 0;if(z<0)I?M=i.tabbableGroups[i.tabbableGroups.length-1].lastTabbableNode:M=i.tabbableGroups[0].firstTabbableNode;else if(I){var y=ft(i.tabbableGroups,function(B){var J=B.firstTabbableNode;return f===J});if(y<0&&(P.container===f||_e(f,a.tabbableOptions)&&!le(f,a.tabbableOptions)&&!P.nextTabbableNode(f,!1))&&(y=z),y>=0){var x=y===0?i.tabbableGroups.length-1:y-1,$=i.tabbableGroups[x];M=se(f)>=0?$.lastTabbableNode:$.lastDomTabbableNode}else ge(p)||(M=P.nextTabbableNode(f,!1))}else{var K=ft(i.tabbableGroups,function(B){var J=B.lastTabbableNode;return f===J});if(K<0&&(P.container===f||_e(f,a.tabbableOptions)&&!le(f,a.tabbableOptions)&&!P.nextTabbableNode(f))&&(K=z),K>=0){var G=K===i.tabbableGroups.length-1?0:K+1,q=i.tabbableGroups[G];M=se(f)>=0?q.firstTabbableNode:q.firstDomTabbableNode}else ge(p)||(M=P.nextTabbableNode(f))}}else M=h("fallbackFocus");return M},A=function(c){var f=Ae(c);if(!(l(f,c)>=0)){if(me(a.clickOutsideDeactivates,c)){s.deactivate({returnFocus:a.returnFocusOnDeactivate});return}me(a.allowOutsideClick,c)||c.preventDefault()}},T=function(c){var f=Ae(c),p=l(f,c)>=0;if(p||f instanceof Document)p&&(i.mostRecentlyFocusedNode=f);else{c.stopImmediatePropagation();var k,I=!0;if(i.mostRecentlyFocusedNode)if(se(i.mostRecentlyFocusedNode)>0){var M=l(i.mostRecentlyFocusedNode),z=i.containerGroups[M].tabbableNodes;if(z.length>0){var P=z.findIndex(function(y){return y===i.mostRecentlyFocusedNode});P>=0&&(a.isKeyForward(i.recentNavEvent)?P+1=0&&(k=z[P-1],I=!1))}}else i.containerGroups.some(function(y){return y.tabbableNodes.some(function(x){return se(x)>0})})||(I=!1);else I=!1;I&&(k=g({target:i.mostRecentlyFocusedNode,isBackward:a.isKeyBackward(i.recentNavEvent)})),b(k||i.mostRecentlyFocusedNode||d())}i.recentNavEvent=void 0},F=function(c){var f=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;i.recentNavEvent=c;var p=g({event:c,isBackward:f});p&&(ge(c)&&c.preventDefault(),b(p))},L=function(c){if(Cr(c)&&me(a.escapeDeactivates,c)!==!1){c.preventDefault(),s.deactivate();return}(a.isKeyForward(c)||a.isKeyBackward(c))&&F(c,a.isKeyBackward(c))},_=function(c){var f=Ae(c);l(f,c)>=0||me(a.clickOutsideDeactivates,c)||me(a.allowOutsideClick,c)||(c.preventDefault(),c.stopImmediatePropagation())},V=function(){if(i.active)return lt.activateTrap(n,s),i.delayInitialFocusTimer=a.delayInitialFocus?ct(function(){b(d())}):b(d()),r.addEventListener("focusin",T,!0),r.addEventListener("mousedown",A,{capture:!0,passive:!1}),r.addEventListener("touchstart",A,{capture:!0,passive:!1}),r.addEventListener("click",_,{capture:!0,passive:!1}),r.addEventListener("keydown",L,{capture:!0,passive:!1}),s},N=function(){if(i.active)return r.removeEventListener("focusin",T,!0),r.removeEventListener("mousedown",A,!0),r.removeEventListener("touchstart",A,!0),r.removeEventListener("click",_,!0),r.removeEventListener("keydown",L,!0),s},R=function(c){var f=c.some(function(p){var k=Array.from(p.removedNodes);return k.some(function(I){return I===i.mostRecentlyFocusedNode})});f&&b(d())},C=typeof window<"u"&&"MutationObserver"in window?new MutationObserver(R):void 0,O=function(){C&&(C.disconnect(),i.active&&!i.paused&&i.containers.map(function(c){C.observe(c,{subtree:!0,childList:!0})}))};return s={get active(){return i.active},get paused(){return i.paused},activate:function(c){if(i.active)return this;var f=u(c,"onActivate"),p=u(c,"onPostActivate"),k=u(c,"checkCanFocusTrap");k||v(),i.active=!0,i.paused=!1,i.nodeFocusedBeforeActivation=r.activeElement,f==null||f();var I=function(){k&&v(),V(),O(),p==null||p()};return k?(k(i.containers.concat()).then(I,I),this):(I(),this)},deactivate:function(c){if(!i.active)return this;var f=ut({onDeactivate:a.onDeactivate,onPostDeactivate:a.onPostDeactivate,checkCanReturnFocus:a.checkCanReturnFocus},c);clearTimeout(i.delayInitialFocusTimer),i.delayInitialFocusTimer=void 0,N(),i.active=!1,i.paused=!1,O(),lt.deactivateTrap(n,s);var p=u(f,"onDeactivate"),k=u(f,"onPostDeactivate"),I=u(f,"checkCanReturnFocus"),M=u(f,"returnFocus","returnFocusOnDeactivate");p==null||p();var z=function(){ct(function(){M&&b(S(i.nodeFocusedBeforeActivation)),k==null||k()})};return M&&I?(I(S(i.nodeFocusedBeforeActivation)).then(z,z),this):(z(),this)},pause:function(c){if(i.paused||!i.active)return this;var f=u(c,"onPause"),p=u(c,"onPostPause");return i.paused=!0,f==null||f(),N(),O(),p==null||p(),this},unpause:function(c){if(!i.paused||!i.active)return this;var f=u(c,"onUnpause"),p=u(c,"onPostUnpause");return i.paused=!1,f==null||f(),v(),V(),O(),p==null||p(),this},updateContainerElements:function(c){var f=[].concat(c).filter(Boolean);return i.containers=f.map(function(p){return typeof p=="string"?r.querySelector(p):p}),i.active&&v(),O(),this}},s.updateContainerElements(e),s};function Dr(o,e={}){let t;const{immediate:r,...n}=e,a=oe(!1),i=oe(!1),s=d=>t&&t.activate(d),u=d=>t&&t.deactivate(d),l=()=>{t&&(t.pause(),i.value=!0)},h=()=>{t&&(t.unpause(),i.value=!1)};return $e(()=>Dt(o),d=>{d&&(t=Ir(d,{...n,onActivate(){a.value=!0,e.onActivate&&e.onActivate()},onDeactivate(){a.value=!1,e.onDeactivate&&e.onDeactivate()}}),r&&s())},{flush:"post"}),Ot(()=>u()),{hasFocus:a,isPaused:i,activate:s,deactivate:u,pause:l,unpause:h}}class fe{constructor(e,t=!0,r=[],n=5e3){this.ctx=e,this.iframes=t,this.exclude=r,this.iframesTimeout=n}static matches(e,t){const r=typeof t=="string"?[t]:t,n=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector;if(n){let a=!1;return r.every(i=>n.call(e,i)?(a=!0,!1):!0),a}else return!1}getContexts(){let e,t=[];return typeof this.ctx>"u"||!this.ctx?e=[]:NodeList.prototype.isPrototypeOf(this.ctx)?e=Array.prototype.slice.call(this.ctx):Array.isArray(this.ctx)?e=this.ctx:typeof this.ctx=="string"?e=Array.prototype.slice.call(document.querySelectorAll(this.ctx)):e=[this.ctx],e.forEach(r=>{const n=t.filter(a=>a.contains(r)).length>0;t.indexOf(r)===-1&&!n&&t.push(r)}),t}getIframeContents(e,t,r=()=>{}){let n;try{const a=e.contentWindow;if(n=a.document,!a||!n)throw new Error("iframe inaccessible")}catch{r()}n&&t(n)}isIframeBlank(e){const t="about:blank",r=e.getAttribute("src").trim();return e.contentWindow.location.href===t&&r!==t&&r}observeIframeLoad(e,t,r){let n=!1,a=null;const i=()=>{if(!n){n=!0,clearTimeout(a);try{this.isIframeBlank(e)||(e.removeEventListener("load",i),this.getIframeContents(e,t,r))}catch{r()}}};e.addEventListener("load",i),a=setTimeout(i,this.iframesTimeout)}onIframeReady(e,t,r){try{e.contentWindow.document.readyState==="complete"?this.isIframeBlank(e)?this.observeIframeLoad(e,t,r):this.getIframeContents(e,t,r):this.observeIframeLoad(e,t,r)}catch{r()}}waitForIframes(e,t){let r=0;this.forEachIframe(e,()=>!0,n=>{r++,this.waitForIframes(n.querySelector("html"),()=>{--r||t()})},n=>{n||t()})}forEachIframe(e,t,r,n=()=>{}){let a=e.querySelectorAll("iframe"),i=a.length,s=0;a=Array.prototype.slice.call(a);const u=()=>{--i<=0&&n(s)};i||u(),a.forEach(l=>{fe.matches(l,this.exclude)?u():this.onIframeReady(l,h=>{t(l)&&(s++,r(h)),u()},u)})}createIterator(e,t,r){return document.createNodeIterator(e,t,r,!1)}createInstanceOnIframe(e){return new fe(e.querySelector("html"),this.iframes)}compareNodeIframe(e,t,r){const n=e.compareDocumentPosition(r),a=Node.DOCUMENT_POSITION_PRECEDING;if(n&a)if(t!==null){const i=t.compareDocumentPosition(r),s=Node.DOCUMENT_POSITION_FOLLOWING;if(i&s)return!0}else return!0;return!1}getIteratorNode(e){const t=e.previousNode();let r;return t===null?r=e.nextNode():r=e.nextNode()&&e.nextNode(),{prevNode:t,node:r}}checkIframeFilter(e,t,r,n){let a=!1,i=!1;return n.forEach((s,u)=>{s.val===r&&(a=u,i=s.handled)}),this.compareNodeIframe(e,t,r)?(a===!1&&!i?n.push({val:r,handled:!0}):a!==!1&&!i&&(n[a].handled=!0),!0):(a===!1&&n.push({val:r,handled:!1}),!1)}handleOpenIframes(e,t,r,n){e.forEach(a=>{a.handled||this.getIframeContents(a.val,i=>{this.createInstanceOnIframe(i).forEachNode(t,r,n)})})}iterateThroughNodes(e,t,r,n,a){const i=this.createIterator(t,e,n);let s=[],u=[],l,h,d=()=>({prevNode:h,node:l}=this.getIteratorNode(i),l);for(;d();)this.iframes&&this.forEachIframe(t,v=>this.checkIframeFilter(l,h,v,s),v=>{this.createInstanceOnIframe(v).forEachNode(e,m=>u.push(m),n)}),u.push(l);u.forEach(v=>{r(v)}),this.iframes&&this.handleOpenIframes(s,e,r,n),a()}forEachNode(e,t,r,n=()=>{}){const a=this.getContexts();let i=a.length;i||n(),a.forEach(s=>{const u=()=>{this.iterateThroughNodes(e,s,t,r,()=>{--i<=0&&n()})};this.iframes?this.waitForIframes(s,u):u()})}}let Or=class{constructor(e){this.ctx=e,this.ie=!1;const t=window.navigator.userAgent;(t.indexOf("MSIE")>-1||t.indexOf("Trident")>-1)&&(this.ie=!0)}set opt(e){this._opt=Object.assign({},{element:"",className:"",exclude:[],iframes:!1,iframesTimeout:5e3,separateWordSearch:!0,diacritics:!0,synonyms:{},accuracy:"partially",acrossElements:!1,caseSensitive:!1,ignoreJoiners:!1,ignoreGroups:0,ignorePunctuation:[],wildcards:"disabled",each:()=>{},noMatch:()=>{},filter:()=>!0,done:()=>{},debug:!1,log:window.console},e)}get opt(){return this._opt}get iterator(){return new fe(this.ctx,this.opt.iframes,this.opt.exclude,this.opt.iframesTimeout)}log(e,t="debug"){const r=this.opt.log;this.opt.debug&&typeof r=="object"&&typeof r[t]=="function"&&r[t](`mark.js: ${e}`)}escapeStr(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}createRegExp(e){return this.opt.wildcards!=="disabled"&&(e=this.setupWildcardsRegExp(e)),e=this.escapeStr(e),Object.keys(this.opt.synonyms).length&&(e=this.createSynonymsRegExp(e)),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),this.opt.diacritics&&(e=this.createDiacriticsRegExp(e)),e=this.createMergedBlanksRegExp(e),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.createJoinersRegExp(e)),this.opt.wildcards!=="disabled"&&(e=this.createWildcardsRegExp(e)),e=this.createAccuracyRegExp(e),e}createSynonymsRegExp(e){const t=this.opt.synonyms,r=this.opt.caseSensitive?"":"i",n=this.opt.ignoreJoiners||this.opt.ignorePunctuation.length?"\0":"";for(let a in t)if(t.hasOwnProperty(a)){const i=t[a],s=this.opt.wildcards!=="disabled"?this.setupWildcardsRegExp(a):this.escapeStr(a),u=this.opt.wildcards!=="disabled"?this.setupWildcardsRegExp(i):this.escapeStr(i);s!==""&&u!==""&&(e=e.replace(new RegExp(`(${this.escapeStr(s)}|${this.escapeStr(u)})`,`gm${r}`),n+`(${this.processSynomyms(s)}|${this.processSynomyms(u)})`+n))}return e}processSynomyms(e){return(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),e}setupWildcardsRegExp(e){return e=e.replace(/(?:\\)*\?/g,t=>t.charAt(0)==="\\"?"?":""),e.replace(/(?:\\)*\*/g,t=>t.charAt(0)==="\\"?"*":"")}createWildcardsRegExp(e){let t=this.opt.wildcards==="withSpaces";return e.replace(/\u0001/g,t?"[\\S\\s]?":"\\S?").replace(/\u0002/g,t?"[\\S\\s]*?":"\\S*")}setupIgnoreJoinersRegExp(e){return e.replace(/[^(|)\\]/g,(t,r,n)=>{let a=n.charAt(r+1);return/[(|)\\]/.test(a)||a===""?t:t+"\0"})}createJoinersRegExp(e){let t=[];const r=this.opt.ignorePunctuation;return Array.isArray(r)&&r.length&&t.push(this.escapeStr(r.join(""))),this.opt.ignoreJoiners&&t.push("\\u00ad\\u200b\\u200c\\u200d"),t.length?e.split(/\u0000+/).join(`[${t.join("")}]*`):e}createDiacriticsRegExp(e){const t=this.opt.caseSensitive?"":"i",r=this.opt.caseSensitive?["aàáảãạăằắẳẵặâầấẩẫậäåāą","AÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćč","CÇĆČ","dđď","DĐĎ","eèéẻẽẹêềếểễệëěēę","EÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïī","IÌÍỈĨỊÎÏĪ","lł","LŁ","nñňń","NÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøō","OÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rř","RŘ","sšśșş","SŠŚȘŞ","tťțţ","TŤȚŢ","uùúủũụưừứửữựûüůū","UÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿ","YÝỲỶỸỴŸ","zžżź","ZŽŻŹ"]:["aàáảãạăằắẳẵặâầấẩẫậäåāąAÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćčCÇĆČ","dđďDĐĎ","eèéẻẽẹêềếểễệëěēęEÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïīIÌÍỈĨỊÎÏĪ","lłLŁ","nñňńNÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøōOÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rřRŘ","sšśșşSŠŚȘŞ","tťțţTŤȚŢ","uùúủũụưừứửữựûüůūUÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿYÝỲỶỸỴŸ","zžżźZŽŻŹ"];let n=[];return e.split("").forEach(a=>{r.every(i=>{if(i.indexOf(a)!==-1){if(n.indexOf(i)>-1)return!1;e=e.replace(new RegExp(`[${i}]`,`gm${t}`),`[${i}]`),n.push(i)}return!0})}),e}createMergedBlanksRegExp(e){return e.replace(/[\s]+/gmi,"[\\s]+")}createAccuracyRegExp(e){const t="!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~¡¿";let r=this.opt.accuracy,n=typeof r=="string"?r:r.value,a=typeof r=="string"?[]:r.limiters,i="";switch(a.forEach(s=>{i+=`|${this.escapeStr(s)}`}),n){case"partially":default:return`()(${e})`;case"complementary":return i="\\s"+(i||this.escapeStr(t)),`()([^${i}]*${e}[^${i}]*)`;case"exactly":return`(^|\\s${i})(${e})(?=$|\\s${i})`}}getSeparatedKeywords(e){let t=[];return e.forEach(r=>{this.opt.separateWordSearch?r.split(" ").forEach(n=>{n.trim()&&t.indexOf(n)===-1&&t.push(n)}):r.trim()&&t.indexOf(r)===-1&&t.push(r)}),{keywords:t.sort((r,n)=>n.length-r.length),length:t.length}}isNumeric(e){return Number(parseFloat(e))==e}checkRanges(e){if(!Array.isArray(e)||Object.prototype.toString.call(e[0])!=="[object Object]")return this.log("markRanges() will only accept an array of objects"),this.opt.noMatch(e),[];const t=[];let r=0;return e.sort((n,a)=>n.start-a.start).forEach(n=>{let{start:a,end:i,valid:s}=this.callNoMatchOnInvalidRanges(n,r);s&&(n.start=a,n.length=i-a,t.push(n),r=i)}),t}callNoMatchOnInvalidRanges(e,t){let r,n,a=!1;return e&&typeof e.start<"u"?(r=parseInt(e.start,10),n=r+parseInt(e.length,10),this.isNumeric(e.start)&&this.isNumeric(e.length)&&n-t>0&&n-r>0?a=!0:(this.log(`Ignoring invalid or overlapping range: ${JSON.stringify(e)}`),this.opt.noMatch(e))):(this.log(`Ignoring invalid range: ${JSON.stringify(e)}`),this.opt.noMatch(e)),{start:r,end:n,valid:a}}checkWhitespaceRanges(e,t,r){let n,a=!0,i=r.length,s=t-i,u=parseInt(e.start,10)-s;return u=u>i?i:u,n=u+parseInt(e.length,10),n>i&&(n=i,this.log(`End range automatically set to the max value of ${i}`)),u<0||n-u<0||u>i||n>i?(a=!1,this.log(`Invalid range: ${JSON.stringify(e)}`),this.opt.noMatch(e)):r.substring(u,n).replace(/\s+/g,"")===""&&(a=!1,this.log("Skipping whitespace only range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:u,end:n,valid:a}}getTextNodes(e){let t="",r=[];this.iterator.forEachNode(NodeFilter.SHOW_TEXT,n=>{r.push({start:t.length,end:(t+=n.textContent).length,node:n})},n=>this.matchesExclude(n.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT,()=>{e({value:t,nodes:r})})}matchesExclude(e){return fe.matches(e,this.opt.exclude.concat(["script","style","title","head","html"]))}wrapRangeInTextNode(e,t,r){const n=this.opt.element?this.opt.element:"mark",a=e.splitText(t),i=a.splitText(r-t);let s=document.createElement(n);return s.setAttribute("data-markjs","true"),this.opt.className&&s.setAttribute("class",this.opt.className),s.textContent=a.textContent,a.parentNode.replaceChild(s,a),i}wrapRangeInMappedTextNode(e,t,r,n,a){e.nodes.every((i,s)=>{const u=e.nodes[s+1];if(typeof u>"u"||u.start>t){if(!n(i.node))return!1;const l=t-i.start,h=(r>i.end?i.end:r)-i.start,d=e.value.substr(0,i.start),v=e.value.substr(h+i.start);if(i.node=this.wrapRangeInTextNode(i.node,l,h),e.value=d+v,e.nodes.forEach((m,b)=>{b>=s&&(e.nodes[b].start>0&&b!==s&&(e.nodes[b].start-=h),e.nodes[b].end-=h)}),r-=h,a(i.node.previousSibling,i.start),r>i.end)t=i.end;else return!1}return!0})}wrapMatches(e,t,r,n,a){const i=t===0?0:t+1;this.getTextNodes(s=>{s.nodes.forEach(u=>{u=u.node;let l;for(;(l=e.exec(u.textContent))!==null&&l[i]!=="";){if(!r(l[i],u))continue;let h=l.index;if(i!==0)for(let d=1;d{let u;for(;(u=e.exec(s.value))!==null&&u[i]!=="";){let l=u.index;if(i!==0)for(let d=1;dr(u[i],d),(d,v)=>{e.lastIndex=v,n(d)})}a()})}wrapRangeFromIndex(e,t,r,n){this.getTextNodes(a=>{const i=a.value.length;e.forEach((s,u)=>{let{start:l,end:h,valid:d}=this.checkWhitespaceRanges(s,i,a.value);d&&this.wrapRangeInMappedTextNode(a,l,h,v=>t(v,s,a.value.substring(l,h),u),v=>{r(v,s)})}),n()})}unwrapMatches(e){const t=e.parentNode;let r=document.createDocumentFragment();for(;e.firstChild;)r.appendChild(e.removeChild(e.firstChild));t.replaceChild(r,e),this.ie?this.normalizeTextNode(t):t.normalize()}normalizeTextNode(e){if(e){if(e.nodeType===3)for(;e.nextSibling&&e.nextSibling.nodeType===3;)e.nodeValue+=e.nextSibling.nodeValue,e.parentNode.removeChild(e.nextSibling);else this.normalizeTextNode(e.firstChild);this.normalizeTextNode(e.nextSibling)}}markRegExp(e,t){this.opt=t,this.log(`Searching with expression "${e}"`);let r=0,n="wrapMatches";const a=i=>{r++,this.opt.each(i)};this.opt.acrossElements&&(n="wrapMatchesAcrossElements"),this[n](e,this.opt.ignoreGroups,(i,s)=>this.opt.filter(s,i,r),a,()=>{r===0&&this.opt.noMatch(e),this.opt.done(r)})}mark(e,t){this.opt=t;let r=0,n="wrapMatches";const{keywords:a,length:i}=this.getSeparatedKeywords(typeof e=="string"?[e]:e),s=this.opt.caseSensitive?"":"i",u=l=>{let h=new RegExp(this.createRegExp(l),`gm${s}`),d=0;this.log(`Searching with expression "${h}"`),this[n](h,1,(v,m)=>this.opt.filter(m,l,r,d),v=>{d++,r++,this.opt.each(v)},()=>{d===0&&this.opt.noMatch(l),a[i-1]===l?this.opt.done(r):u(a[a.indexOf(l)+1])})};this.opt.acrossElements&&(n="wrapMatchesAcrossElements"),i===0?this.opt.done(r):u(a[0])}markRanges(e,t){this.opt=t;let r=0,n=this.checkRanges(e);n&&n.length?(this.log("Starting to mark with the following ranges: "+JSON.stringify(n)),this.wrapRangeFromIndex(n,(a,i,s,u)=>this.opt.filter(a,i,s,u),(a,i)=>{r++,this.opt.each(a,i)},()=>{this.opt.done(r)})):this.opt.done(r)}unmark(e){this.opt=e;let t=this.opt.element?this.opt.element:"*";t+="[data-markjs]",this.opt.className&&(t+=`.${this.opt.className}`),this.log(`Removal selector "${t}"`),this.iterator.forEachNode(NodeFilter.SHOW_ELEMENT,r=>{this.unwrapMatches(r)},r=>{const n=fe.matches(r,t),a=this.matchesExclude(r);return!n||a?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT},this.opt.done)}};function Rr(o){const e=new Or(o);return this.mark=(t,r)=>(e.mark(t,r),this),this.markRegExp=(t,r)=>(e.markRegExp(t,r),this),this.markRanges=(t,r)=>(e.markRanges(t,r),this),this.unmark=t=>(e.unmark(t),this),this}var W=function(){return W=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0&&a[a.length-1])&&(l[0]===6||l[0]===2)){t=0;continue}if(l[0]===3&&(!a||l[1]>a[0]&&l[1]=o.length&&(o=void 0),{value:o&&o[r++],done:!o}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function j(o,e){var t=typeof Symbol=="function"&&o[Symbol.iterator];if(!t)return o;var r=t.call(o),n,a=[],i;try{for(;(e===void 0||e-- >0)&&!(n=r.next()).done;)a.push(n.value)}catch(s){i={error:s}}finally{try{n&&!n.done&&(t=r.return)&&t.call(r)}finally{if(i)throw i.error}}return a}var Lr="ENTRIES",Ft="KEYS",Et="VALUES",H="",Me=function(){function o(e,t){var r=e._tree,n=Array.from(r.keys());this.set=e,this._type=t,this._path=n.length>0?[{node:r,keys:n}]:[]}return o.prototype.next=function(){var e=this.dive();return this.backtrack(),e},o.prototype.dive=function(){if(this._path.length===0)return{done:!0,value:void 0};var e=ce(this._path),t=e.node,r=e.keys;if(ce(r)===H)return{done:!1,value:this.result()};var n=t.get(ce(r));return this._path.push({node:n,keys:Array.from(n.keys())}),this.dive()},o.prototype.backtrack=function(){if(this._path.length!==0){var e=ce(this._path).keys;e.pop(),!(e.length>0)&&(this._path.pop(),this.backtrack())}},o.prototype.key=function(){return this.set._prefix+this._path.map(function(e){var t=e.keys;return ce(t)}).filter(function(e){return e!==H}).join("")},o.prototype.value=function(){return ce(this._path).node.get(H)},o.prototype.result=function(){switch(this._type){case Et:return this.value();case Ft:return this.key();default:return[this.key(),this.value()]}},o.prototype[Symbol.iterator]=function(){return this},o}(),ce=function(o){return o[o.length-1]},zr=function(o,e,t){var r=new Map;if(e===void 0)return r;for(var n=e.length+1,a=n+t,i=new Uint8Array(a*n).fill(t+1),s=0;st)continue e}St(o.get(m),e,t,r,n,S,i,s+m)}}}catch(f){u={error:f}}finally{try{v&&!v.done&&(l=d.return)&&l.call(d)}finally{if(u)throw u.error}}},Le=function(){function o(e,t){e===void 0&&(e=new Map),t===void 0&&(t=""),this._size=void 0,this._tree=e,this._prefix=t}return o.prototype.atPrefix=function(e){var t,r;if(!e.startsWith(this._prefix))throw new Error("Mismatched prefix");var n=j(De(this._tree,e.slice(this._prefix.length)),2),a=n[0],i=n[1];if(a===void 0){var s=j(Ue(i),2),u=s[0],l=s[1];try{for(var h=D(u.keys()),d=h.next();!d.done;d=h.next()){var v=d.value;if(v!==H&&v.startsWith(l)){var m=new Map;return m.set(v.slice(l.length),u.get(v)),new o(m,e)}}}catch(b){t={error:b}}finally{try{d&&!d.done&&(r=h.return)&&r.call(h)}finally{if(t)throw t.error}}}return new o(a,e)},o.prototype.clear=function(){this._size=void 0,this._tree.clear()},o.prototype.delete=function(e){return this._size=void 0,Pr(this._tree,e)},o.prototype.entries=function(){return new Me(this,Lr)},o.prototype.forEach=function(e){var t,r;try{for(var n=D(this),a=n.next();!a.done;a=n.next()){var i=j(a.value,2),s=i[0],u=i[1];e(s,u,this)}}catch(l){t={error:l}}finally{try{a&&!a.done&&(r=n.return)&&r.call(n)}finally{if(t)throw t.error}}},o.prototype.fuzzyGet=function(e,t){return zr(this._tree,e,t)},o.prototype.get=function(e){var t=Ke(this._tree,e);return t!==void 0?t.get(H):void 0},o.prototype.has=function(e){var t=Ke(this._tree,e);return t!==void 0&&t.has(H)},o.prototype.keys=function(){return new Me(this,Ft)},o.prototype.set=function(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;var r=ze(this._tree,e);return r.set(H,t),this},Object.defineProperty(o.prototype,"size",{get:function(){if(this._size)return this._size;this._size=0;for(var e=this.entries();!e.next().done;)this._size+=1;return this._size},enumerable:!1,configurable:!0}),o.prototype.update=function(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;var r=ze(this._tree,e);return r.set(H,t(r.get(H))),this},o.prototype.fetch=function(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;var r=ze(this._tree,e),n=r.get(H);return n===void 0&&r.set(H,n=t()),n},o.prototype.values=function(){return new Me(this,Et)},o.prototype[Symbol.iterator]=function(){return this.entries()},o.from=function(e){var t,r,n=new o;try{for(var a=D(e),i=a.next();!i.done;i=a.next()){var s=j(i.value,2),u=s[0],l=s[1];n.set(u,l)}}catch(h){t={error:h}}finally{try{i&&!i.done&&(r=a.return)&&r.call(a)}finally{if(t)throw t.error}}return n},o.fromObject=function(e){return o.from(Object.entries(e))},o}(),De=function(o,e,t){var r,n;if(t===void 0&&(t=[]),e.length===0||o==null)return[o,t];try{for(var a=D(o.keys()),i=a.next();!i.done;i=a.next()){var s=i.value;if(s!==H&&e.startsWith(s))return t.push([o,s]),De(o.get(s),e.slice(s.length),t)}}catch(u){r={error:u}}finally{try{i&&!i.done&&(n=a.return)&&n.call(a)}finally{if(r)throw r.error}}return t.push([o,e]),De(void 0,"",t)},Ke=function(o,e){var t,r;if(e.length===0||o==null)return o;try{for(var n=D(o.keys()),a=n.next();!a.done;a=n.next()){var i=a.value;if(i!==H&&e.startsWith(i))return Ke(o.get(i),e.slice(i.length))}}catch(s){t={error:s}}finally{try{a&&!a.done&&(r=n.return)&&r.call(n)}finally{if(t)throw t.error}}},ze=function(o,e){var t,r,n=e.length;e:for(var a=0;o&&a0)throw new Error("Expected documents to be present. Omit the argument to remove all documents.");this._index=new Le,this._documentCount=0,this._documentIds=new Map,this._idToShortId=new Map,this._fieldLength=new Map,this._avgFieldLength=[],this._storedFields=new Map,this._nextId=0}},o.prototype.discard=function(e){var t=this,r=this._idToShortId.get(e);if(r==null)throw new Error("MiniSearch: cannot discard document with ID ".concat(e,": it is not in the index"));this._idToShortId.delete(e),this._documentIds.delete(r),this._storedFields.delete(r),(this._fieldLength.get(r)||[]).forEach(function(n,a){t.removeFieldLength(r,a,t._documentCount,n)}),this._fieldLength.delete(r),this._documentCount-=1,this._dirtCount+=1,this.maybeAutoVacuum()},o.prototype.maybeAutoVacuum=function(){if(this._options.autoVacuum!==!1){var e=this._options.autoVacuum,t=e.minDirtFactor,r=e.minDirtCount,n=e.batchSize,a=e.batchWait;this.conditionalVacuum({batchSize:n,batchWait:a},{minDirtCount:r,minDirtFactor:t})}},o.prototype.discardAll=function(e){var t,r,n=this._options.autoVacuum;try{this._options.autoVacuum=!1;try{for(var a=D(e),i=a.next();!i.done;i=a.next()){var s=i.value;this.discard(s)}}catch(u){t={error:u}}finally{try{i&&!i.done&&(r=a.return)&&r.call(a)}finally{if(t)throw t.error}}}finally{this._options.autoVacuum=n}this.maybeAutoVacuum()},o.prototype.replace=function(e){var t=this._options,r=t.idField,n=t.extractField,a=n(e,r);this.discard(a),this.add(e)},o.prototype.vacuum=function(e){return e===void 0&&(e={}),this.conditionalVacuum(e)},o.prototype.conditionalVacuum=function(e,t){var r=this;return this._currentVacuum?(this._enqueuedVacuumConditions=this._enqueuedVacuumConditions&&t,this._enqueuedVacuum!=null?this._enqueuedVacuum:(this._enqueuedVacuum=this._currentVacuum.then(function(){var n=r._enqueuedVacuumConditions;return r._enqueuedVacuumConditions=Je,r.performVacuuming(e,n)}),this._enqueuedVacuum)):this.vacuumConditionsMet(t)===!1?Promise.resolve():(this._currentVacuum=this.performVacuuming(e),this._currentVacuum)},o.prototype.performVacuuming=function(e,t){return _r(this,void 0,void 0,function(){var r,n,a,i,s,u,l,h,d,v,m,b,S,g,A,T,F,L,_,V,N,R,C,O,w;return Mr(this,function(c){switch(c.label){case 0:if(r=this._dirtCount,!this.vacuumConditionsMet(t))return[3,10];n=e.batchSize||je.batchSize,a=e.batchWait||je.batchWait,i=1,c.label=1;case 1:c.trys.push([1,7,8,9]),s=D(this._index),u=s.next(),c.label=2;case 2:if(u.done)return[3,6];l=j(u.value,2),h=l[0],d=l[1];try{for(v=(R=void 0,D(d)),m=v.next();!m.done;m=v.next()){b=j(m.value,2),S=b[0],g=b[1];try{for(A=(O=void 0,D(g)),T=A.next();!T.done;T=A.next())F=j(T.value,1),L=F[0],!this._documentIds.has(L)&&(g.size<=1?d.delete(S):g.delete(L))}catch(f){O={error:f}}finally{try{T&&!T.done&&(w=A.return)&&w.call(A)}finally{if(O)throw O.error}}}}catch(f){R={error:f}}finally{try{m&&!m.done&&(C=v.return)&&C.call(v)}finally{if(R)throw R.error}}return this._index.get(h).size===0&&this._index.delete(h),i%n!==0?[3,4]:[4,new Promise(function(f){return setTimeout(f,a)})];case 3:c.sent(),c.label=4;case 4:i+=1,c.label=5;case 5:return u=s.next(),[3,2];case 6:return[3,9];case 7:return _=c.sent(),V={error:_},[3,9];case 8:try{u&&!u.done&&(N=s.return)&&N.call(s)}finally{if(V)throw V.error}return[7];case 9:this._dirtCount-=r,c.label=10;case 10:return[4,null];case 11:return c.sent(),this._currentVacuum=this._enqueuedVacuum,this._enqueuedVacuum=null,[2]}})})},o.prototype.vacuumConditionsMet=function(e){if(e==null)return!0;var t=e.minDirtCount,r=e.minDirtFactor;return t=t||Ve.minDirtCount,r=r||Ve.minDirtFactor,this.dirtCount>=t&&this.dirtFactor>=r},Object.defineProperty(o.prototype,"isVacuuming",{get:function(){return this._currentVacuum!=null},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"dirtCount",{get:function(){return this._dirtCount},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"dirtFactor",{get:function(){return this._dirtCount/(1+this._documentCount+this._dirtCount)},enumerable:!1,configurable:!0}),o.prototype.has=function(e){return this._idToShortId.has(e)},o.prototype.getStoredFields=function(e){var t=this._idToShortId.get(e);if(t!=null)return this._storedFields.get(t)},o.prototype.search=function(e,t){var r,n;t===void 0&&(t={});var a=this.executeQuery(e,t),i=[];try{for(var s=D(a),u=s.next();!u.done;u=s.next()){var l=j(u.value,2),h=l[0],d=l[1],v=d.score,m=d.terms,b=d.match,S=m.length||1,g={id:this._documentIds.get(h),score:v*S,terms:Object.keys(b),queryTerms:m,match:b};Object.assign(g,this._storedFields.get(h)),(t.filter==null||t.filter(g))&&i.push(g)}}catch(A){r={error:A}}finally{try{u&&!u.done&&(n=s.return)&&n.call(s)}finally{if(r)throw r.error}}return e===o.wildcard&&t.boostDocument==null&&this._options.searchOptions.boostDocument==null||i.sort(vt),i},o.prototype.autoSuggest=function(e,t){var r,n,a,i;t===void 0&&(t={}),t=W(W({},this._options.autoSuggestOptions),t);var s=new Map;try{for(var u=D(this.search(e,t)),l=u.next();!l.done;l=u.next()){var h=l.value,d=h.score,v=h.terms,m=v.join(" "),b=s.get(m);b!=null?(b.score+=d,b.count+=1):s.set(m,{score:d,terms:v,count:1})}}catch(_){r={error:_}}finally{try{l&&!l.done&&(n=u.return)&&n.call(u)}finally{if(r)throw r.error}}var S=[];try{for(var g=D(s),A=g.next();!A.done;A=g.next()){var T=j(A.value,2),b=T[0],F=T[1],d=F.score,v=F.terms,L=F.count;S.push({suggestion:b,terms:v,score:d/L})}}catch(_){a={error:_}}finally{try{A&&!A.done&&(i=g.return)&&i.call(g)}finally{if(a)throw a.error}}return S.sort(vt),S},Object.defineProperty(o.prototype,"documentCount",{get:function(){return this._documentCount},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"termCount",{get:function(){return this._index.size},enumerable:!1,configurable:!0}),o.loadJSON=function(e,t){if(t==null)throw new Error("MiniSearch: loadJSON should be given the same options used when serializing the index");return this.loadJS(JSON.parse(e),t)},o.getDefault=function(e){if(Be.hasOwnProperty(e))return Pe(Be,e);throw new Error('MiniSearch: unknown option "'.concat(e,'"'))},o.loadJS=function(e,t){var r,n,a,i,s,u,l=e.index,h=e.documentCount,d=e.nextId,v=e.documentIds,m=e.fieldIds,b=e.fieldLength,S=e.averageFieldLength,g=e.storedFields,A=e.dirtCount,T=e.serializationVersion;if(T!==1&&T!==2)throw new Error("MiniSearch: cannot deserialize an index created with an incompatible version");var F=new o(t);F._documentCount=h,F._nextId=d,F._documentIds=Ce(v),F._idToShortId=new Map,F._fieldIds=m,F._fieldLength=Ce(b),F._avgFieldLength=S,F._storedFields=Ce(g),F._dirtCount=A||0,F._index=new Le;try{for(var L=D(F._documentIds),_=L.next();!_.done;_=L.next()){var V=j(_.value,2),N=V[0],R=V[1];F._idToShortId.set(R,N)}}catch(P){r={error:P}}finally{try{_&&!_.done&&(n=L.return)&&n.call(L)}finally{if(r)throw r.error}}try{for(var C=D(l),O=C.next();!O.done;O=C.next()){var w=j(O.value,2),c=w[0],f=w[1],p=new Map;try{for(var k=(s=void 0,D(Object.keys(f))),I=k.next();!I.done;I=k.next()){var M=I.value,z=f[M];T===1&&(z=z.ds),p.set(parseInt(M,10),Ce(z))}}catch(P){s={error:P}}finally{try{I&&!I.done&&(u=k.return)&&u.call(k)}finally{if(s)throw s.error}}F._index.set(c,p)}}catch(P){a={error:P}}finally{try{O&&!O.done&&(i=C.return)&&i.call(C)}finally{if(a)throw a.error}}return F},o.prototype.executeQuery=function(e,t){var r=this;if(t===void 0&&(t={}),e===o.wildcard)return this.executeWildcardQuery(t);if(typeof e!="string"){var n=W(W(W({},t),e),{queries:void 0}),a=e.queries.map(function(g){return r.executeQuery(g,n)});return this.combineResults(a,n.combineWith)}var i=this._options,s=i.tokenize,u=i.processTerm,l=i.searchOptions,h=W(W({tokenize:s,processTerm:u},l),t),d=h.tokenize,v=h.processTerm,m=d(e).flatMap(function(g){return v(g)}).filter(function(g){return!!g}),b=m.map(jr(h)),S=b.map(function(g){return r.executeQuerySpec(g,h)});return this.combineResults(S,h.combineWith)},o.prototype.executeQuerySpec=function(e,t){var r,n,a,i,s=W(W({},this._options.searchOptions),t),u=(s.fields||this._options.fields).reduce(function(M,z){var P;return W(W({},M),(P={},P[z]=Pe(s.boost,z)||1,P))},{}),l=s.boostDocument,h=s.weights,d=s.maxFuzzy,v=s.bm25,m=W(W({},ht.weights),h),b=m.fuzzy,S=m.prefix,g=this._index.get(e.term),A=this.termResults(e.term,e.term,1,g,u,l,v),T,F;if(e.prefix&&(T=this._index.atPrefix(e.term)),e.fuzzy){var L=e.fuzzy===!0?.2:e.fuzzy,_=L<1?Math.min(d,Math.round(e.term.length*L)):L;_&&(F=this._index.fuzzyGet(e.term,_))}if(T)try{for(var V=D(T),N=V.next();!N.done;N=V.next()){var R=j(N.value,2),C=R[0],O=R[1],w=C.length-e.term.length;if(w){F==null||F.delete(C);var c=S*C.length/(C.length+.3*w);this.termResults(e.term,C,c,O,u,l,v,A)}}}catch(M){r={error:M}}finally{try{N&&!N.done&&(n=V.return)&&n.call(V)}finally{if(r)throw r.error}}if(F)try{for(var f=D(F.keys()),p=f.next();!p.done;p=f.next()){var C=p.value,k=j(F.get(C),2),I=k[0],w=k[1];if(w){var c=b*C.length/(C.length+w);this.termResults(e.term,C,c,I,u,l,v,A)}}}catch(M){a={error:M}}finally{try{p&&!p.done&&(i=f.return)&&i.call(f)}finally{if(a)throw a.error}}return A},o.prototype.executeWildcardQuery=function(e){var t,r,n=new Map,a=W(W({},this._options.searchOptions),e);try{for(var i=D(this._documentIds),s=i.next();!s.done;s=i.next()){var u=j(s.value,2),l=u[0],h=u[1],d=a.boostDocument?a.boostDocument(h,"",this._storedFields.get(l)):1;n.set(l,{score:d,terms:[],match:{}})}}catch(v){t={error:v}}finally{try{s&&!s.done&&(r=i.return)&&r.call(i)}finally{if(t)throw t.error}}return n},o.prototype.combineResults=function(e,t){if(t===void 0&&(t=He),e.length===0)return new Map;var r=t.toLowerCase();return e.reduce($r[r])||new Map},o.prototype.toJSON=function(){var e,t,r,n,a=[];try{for(var i=D(this._index),s=i.next();!s.done;s=i.next()){var u=j(s.value,2),l=u[0],h=u[1],d={};try{for(var v=(r=void 0,D(h)),m=v.next();!m.done;m=v.next()){var b=j(m.value,2),S=b[0],g=b[1];d[S]=Object.fromEntries(g)}}catch(A){r={error:A}}finally{try{m&&!m.done&&(n=v.return)&&n.call(v)}finally{if(r)throw r.error}}a.push([l,d])}}catch(A){e={error:A}}finally{try{s&&!s.done&&(t=i.return)&&t.call(i)}finally{if(e)throw e.error}}return{documentCount:this._documentCount,nextId:this._nextId,documentIds:Object.fromEntries(this._documentIds),fieldIds:this._fieldIds,fieldLength:Object.fromEntries(this._fieldLength),averageFieldLength:this._avgFieldLength,storedFields:Object.fromEntries(this._storedFields),dirtCount:this._dirtCount,index:a,serializationVersion:2}},o.prototype.termResults=function(e,t,r,n,a,i,s,u){var l,h,d,v,m;if(u===void 0&&(u=new Map),n==null)return u;try{for(var b=D(Object.keys(a)),S=b.next();!S.done;S=b.next()){var g=S.value,A=a[g],T=this._fieldIds[g],F=n.get(T);if(F!=null){var L=F.size,_=this._avgFieldLength[T];try{for(var V=(d=void 0,D(F.keys())),N=V.next();!N.done;N=V.next()){var R=N.value;if(!this._documentIds.has(R)){this.removeTerm(T,R,t),L-=1;continue}var C=i?i(this._documentIds.get(R),t,this._storedFields.get(R)):1;if(C){var O=F.get(R),w=this._fieldLength.get(R)[T],c=Kr(O,L,this._documentCount,w,_,s),f=r*A*C*c,p=u.get(R);if(p){p.score+=f,Ur(p.terms,e);var k=Pe(p.match,t);k?k.push(g):p.match[t]=[g]}else u.set(R,{score:f,terms:[e],match:(m={},m[t]=[g],m)})}}}catch(I){d={error:I}}finally{try{N&&!N.done&&(v=V.return)&&v.call(V)}finally{if(d)throw d.error}}}}}catch(I){l={error:I}}finally{try{S&&!S.done&&(h=b.return)&&h.call(b)}finally{if(l)throw l.error}}return u},o.prototype.addTerm=function(e,t,r){var n=this._index.fetch(r,pt),a=n.get(e);if(a==null)a=new Map,a.set(t,1),n.set(e,a);else{var i=a.get(t);a.set(t,(i||0)+1)}},o.prototype.removeTerm=function(e,t,r){if(!this._index.has(r)){this.warnDocumentChanged(t,e,r);return}var n=this._index.fetch(r,pt),a=n.get(e);a==null||a.get(t)==null?this.warnDocumentChanged(t,e,r):a.get(t)<=1?a.size<=1?n.delete(e):a.delete(t):a.set(t,a.get(t)-1),this._index.get(r).size===0&&this._index.delete(r)},o.prototype.warnDocumentChanged=function(e,t,r){var n,a;try{for(var i=D(Object.keys(this._fieldIds)),s=i.next();!s.done;s=i.next()){var u=s.value;if(this._fieldIds[u]===t){this._options.logger("warn","MiniSearch: document with ID ".concat(this._documentIds.get(e),' has changed before removal: term "').concat(r,'" was not present in field "').concat(u,'". Removing a document after it has changed can corrupt the index!'),"version_conflict");return}}}catch(l){n={error:l}}finally{try{s&&!s.done&&(a=i.return)&&a.call(i)}finally{if(n)throw n.error}}},o.prototype.addDocumentId=function(e){var t=this._nextId;return this._idToShortId.set(e,t),this._documentIds.set(t,e),this._documentCount+=1,this._nextId+=1,t},o.prototype.addFields=function(e){for(var t=0;t(qt("data-v-bbd083ab"),o=o(),Qt(),o),qr=["aria-owns"],Qr={class:"shell"},Yr=["title"],Zr=Y(()=>E("svg",{class:"search-icon",width:"18",height:"18",viewBox:"0 0 24 24","aria-hidden":"true"},[E("g",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},[E("circle",{cx:"11",cy:"11",r:"8"}),E("path",{d:"m21 21l-4.35-4.35"})])],-1)),Xr=[Zr],ea={class:"search-actions before"},ta=["title"],ra=Y(()=>E("svg",{width:"18",height:"18",viewBox:"0 0 24 24","aria-hidden":"true"},[E("path",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M19 12H5m7 7l-7-7l7-7"})],-1)),aa=[ra],na=["placeholder"],ia={class:"search-actions"},oa=["title"],sa=Y(()=>E("svg",{width:"18",height:"18",viewBox:"0 0 24 24","aria-hidden":"true"},[E("path",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M3 14h7v7H3zM3 3h7v7H3zm11 1h7m-7 5h7m-7 6h7m-7 5h7"})],-1)),ua=[sa],la=["disabled","title"],ca=Y(()=>E("svg",{width:"18",height:"18",viewBox:"0 0 24 24","aria-hidden":"true"},[E("path",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M20 5H9l-7 7l7 7h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2Zm-2 4l-6 6m0-6l6 6"})],-1)),fa=[ca],ha=["id","role","aria-labelledby"],da=["aria-selected"],va=["href","aria-label","onMouseenter","onFocusin"],pa={class:"titles"},ma=Y(()=>E("span",{class:"title-icon"},"#",-1)),ya=["innerHTML"],ga=Y(()=>E("svg",{width:"18",height:"18",viewBox:"0 0 24 24"},[E("path",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"m9 18l6-6l-6-6"})],-1)),ba={class:"title main"},wa=["innerHTML"],xa={key:0,class:"excerpt-wrapper"},Fa={key:0,class:"excerpt",inert:""},Ea=["innerHTML"],Sa=Y(()=>E("div",{class:"excerpt-gradient-bottom"},null,-1)),Aa=Y(()=>E("div",{class:"excerpt-gradient-top"},null,-1)),Ca={key:0,class:"no-results"},Ta={class:"search-keyboard-shortcuts"},Na=["aria-label"],ka=Y(()=>E("svg",{width:"14",height:"14",viewBox:"0 0 24 24"},[E("path",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 19V5m-7 7l7-7l7 7"})],-1)),Ia=[ka],Da=["aria-label"],Oa=Y(()=>E("svg",{width:"14",height:"14",viewBox:"0 0 24 24"},[E("path",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 5v14m7-7l-7 7l-7-7"})],-1)),Ra=[Oa],_a=["aria-label"],Ma=Y(()=>E("svg",{width:"14",height:"14",viewBox:"0 0 24 24"},[E("g",{fill:"none",stroke:"currentcolor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},[E("path",{d:"m9 10l-5 5l5 5"}),E("path",{d:"M20 4v7a4 4 0 0 1-4 4H4"})])],-1)),La=[Ma],za=["aria-label"],Pa=Rt({__name:"VPLocalSearchBox",emits:["close"],setup(o,{emit:e}){var z,P;const t=e,r=xe(),n=xe(),a=xe(nr),i=rr(),{activate:s}=Dr(r,{immediate:!0,allowOutsideClick:!0,clickOutsideDeactivates:!0,escapeDeactivates:!0}),{localeIndex:u,theme:l}=i,h=tt(async()=>{var y,x,$,K,G,q,B,J,Z;return it(Vr.loadJSON(($=await((x=(y=a.value)[u.value])==null?void 0:x.call(y)))==null?void 0:$.default,{fields:["title","titles","text"],storeFields:["title","titles"],searchOptions:{fuzzy:.2,prefix:!0,boost:{title:4,text:2,titles:1},...((K=l.value.search)==null?void 0:K.provider)==="local"&&((q=(G=l.value.search.options)==null?void 0:G.miniSearch)==null?void 0:q.searchOptions)},...((B=l.value.search)==null?void 0:B.provider)==="local"&&((Z=(J=l.value.search.options)==null?void 0:J.miniSearch)==null?void 0:Z.options)}))}),v=Fe(()=>{var y,x;return((y=l.value.search)==null?void 0:y.provider)==="local"&&((x=l.value.search.options)==null?void 0:x.disableQueryPersistence)===!0}).value?oe(""):_t("vitepress:local-search-filter",""),m=Mt("vitepress:local-search-detailed-list",((z=l.value.search)==null?void 0:z.provider)==="local"&&((P=l.value.search.options)==null?void 0:P.detailedView)===!0),b=Fe(()=>{var y,x,$;return((y=l.value.search)==null?void 0:y.provider)==="local"&&(((x=l.value.search.options)==null?void 0:x.disableDetailedView)===!0||(($=l.value.search.options)==null?void 0:$.detailedView)===!1)}),S=Fe(()=>{var x,$,K,G,q,B,J;const y=((x=l.value.search)==null?void 0:x.options)??l.value.algolia;return((q=(G=(K=($=y==null?void 0:y.locales)==null?void 0:$[u.value])==null?void 0:K.translations)==null?void 0:G.button)==null?void 0:q.buttonText)||((J=(B=y==null?void 0:y.translations)==null?void 0:B.button)==null?void 0:J.buttonText)||"Search"});Lt(()=>{b.value&&(m.value=!1)});const g=xe([]),A=oe(!1);$e(v,()=>{A.value=!1});const T=tt(async()=>{if(n.value)return it(new Rr(n.value))},null),F=new Gr(16);zt(()=>[h.value,v.value,m.value],async([y,x,$],K,G)=>{var be,Ge,qe,Qe;(K==null?void 0:K[0])!==y&&F.clear();let q=!1;if(G(()=>{q=!0}),!y)return;g.value=y.search(x).slice(0,16),A.value=!0;const B=$?await Promise.all(g.value.map(Q=>L(Q.id))):[];if(q)return;for(const{id:Q,mod:ae}of B){const ne=Q.slice(0,Q.indexOf("#"));let te=F.get(ne);if(te)continue;te=new Map,F.set(ne,te);const X=ae.default??ae;if(X!=null&&X.render||X!=null&&X.setup){const ie=Yt(X);ie.config.warnHandler=()=>{},ie.provide(Zt,i),Object.defineProperties(ie.config.globalProperties,{$frontmatter:{get(){return i.frontmatter.value}},$params:{get(){return i.page.value.params}}});const Ye=document.createElement("div");ie.mount(Ye),Ye.querySelectorAll("h1, h2, h3, h4, h5, h6").forEach(he=>{var et;const we=(et=he.querySelector("a"))==null?void 0:et.getAttribute("href"),Ze=(we==null?void 0:we.startsWith("#"))&&we.slice(1);if(!Ze)return;let Xe="";for(;(he=he.nextElementSibling)&&!/^h[1-6]$/i.test(he.tagName);)Xe+=he.outerHTML;te.set(Ze,Xe)}),ie.unmount()}if(q)return}const J=new Set;if(g.value=g.value.map(Q=>{const[ae,ne]=Q.id.split("#"),te=F.get(ae),X=(te==null?void 0:te.get(ne))??"";for(const ie in Q.match)J.add(ie);return{...Q,text:X}}),await de(),q)return;await new Promise(Q=>{var ae;(ae=T.value)==null||ae.unmark({done:()=>{var ne;(ne=T.value)==null||ne.markRegExp(M(J),{done:Q})}})});const Z=((be=r.value)==null?void 0:be.querySelectorAll(".result .excerpt"))??[];for(const Q of Z)(Ge=Q.querySelector('mark[data-markjs="true"]'))==null||Ge.scrollIntoView({block:"center"});(Qe=(qe=n.value)==null?void 0:qe.firstElementChild)==null||Qe.scrollIntoView({block:"start"})},{debounce:200,immediate:!0});async function L(y){const x=Xt(y.slice(0,y.indexOf("#")));try{if(!x)throw new Error(`Cannot find file for id: ${y}`);return{id:y,mod:await import(x)}}catch($){return console.error($),{id:y,mod:{}}}}const _=oe(),V=Fe(()=>{var y;return((y=v.value)==null?void 0:y.length)<=0});function N(y=!0){var x,$;(x=_.value)==null||x.focus(),y&&(($=_.value)==null||$.select())}Re(()=>{N()});function R(y){y.pointerType==="mouse"&&N()}const C=oe(-1),O=oe(!1);$e(g,y=>{C.value=y.length?0:-1,w()});function w(){de(()=>{const y=document.querySelector(".result.selected");y&&y.scrollIntoView({block:"nearest"})})}Ee("ArrowUp",y=>{y.preventDefault(),C.value--,C.value<0&&(C.value=g.value.length-1),O.value=!0,w()}),Ee("ArrowDown",y=>{y.preventDefault(),C.value++,C.value>=g.value.length&&(C.value=0),O.value=!0,w()});const c=Pt();Ee("Enter",y=>{if(y.target instanceof HTMLButtonElement&&y.target.type!=="submit")return;const x=g.value[C.value];if(y.target instanceof HTMLInputElement&&!x){y.preventDefault();return}x&&(c.go(x.id),t("close"))}),Ee("Escape",()=>{t("close")});const p=ar({modal:{displayDetails:"Display detailed list",resetButtonTitle:"Reset search",backButtonTitle:"Close search",noResultsText:"No results for",footer:{selectText:"to select",selectKeyAriaLabel:"enter",navigateText:"to navigate",navigateUpKeyAriaLabel:"up arrow",navigateDownKeyAriaLabel:"down arrow",closeText:"to close",closeKeyAriaLabel:"escape"}}});Re(()=>{window.history.pushState(null,"",null)}),Bt("popstate",y=>{y.preventDefault(),t("close")});const k=Vt($t?document.body:null);Re(()=>{de(()=>{k.value=!0,de().then(()=>s())})}),Wt(()=>{k.value=!1});function I(){v.value="",de().then(()=>N(!1))}function M(y){return new RegExp([...y].sort((x,$)=>$.length-x.length).map(x=>`(${er(x)})`).join("|"),"gi")}return(y,x)=>{var $,K,G,q;return ee(),Kt(Gt,{to:"body"},[E("div",{ref_key:"el",ref:r,role:"button","aria-owns":($=g.value)!=null&&$.length?"localsearch-list":void 0,"aria-expanded":"true","aria-haspopup":"listbox","aria-labelledby":"localsearch-label",class:"VPLocalSearchBox"},[E("div",{class:"backdrop",onClick:x[0]||(x[0]=B=>y.$emit("close"))}),E("div",Qr,[E("form",{class:"search-bar",onPointerup:x[4]||(x[4]=B=>R(B)),onSubmit:x[5]||(x[5]=jt(()=>{},["prevent"]))},[E("label",{title:S.value,id:"localsearch-label",for:"localsearch-input"},Xr,8,Yr),E("div",ea,[E("button",{class:"back-button",title:U(p)("modal.backButtonTitle"),onClick:x[1]||(x[1]=B=>y.$emit("close"))},aa,8,ta)]),Jt(E("input",{ref_key:"searchInput",ref:_,"onUpdate:modelValue":x[2]||(x[2]=B=>Ht(v)?v.value=B:null),placeholder:S.value,id:"localsearch-input","aria-labelledby":"localsearch-label",class:"search-input"},null,8,na),[[Ut,U(v)]]),E("div",ia,[b.value?Se("",!0):(ee(),re("button",{key:0,class:rt(["toggle-layout-button",{"detailed-list":U(m)}]),type:"button",title:U(p)("modal.displayDetails"),onClick:x[3]||(x[3]=B=>C.value>-1&&(m.value=!U(m)))},ua,10,oa)),E("button",{class:"clear-button",type:"reset",disabled:V.value,title:U(p)("modal.resetButtonTitle"),onClick:I},fa,8,la)])],32),E("ul",{ref_key:"resultsEl",ref:n,id:(K=g.value)!=null&&K.length?"localsearch-list":void 0,role:(G=g.value)!=null&&G.length?"listbox":void 0,"aria-labelledby":(q=g.value)!=null&&q.length?"localsearch-label":void 0,class:"results",onMousemove:x[7]||(x[7]=B=>O.value=!1)},[(ee(!0),re(nt,null,at(g.value,(B,J)=>(ee(),re("li",{key:B.id,role:"option","aria-selected":C.value===J?"true":"false"},[E("a",{href:B.id,class:rt(["result",{selected:C.value===J}]),"aria-label":[...B.titles,B.title].join(" > "),onMouseenter:Z=>!O.value&&(C.value=J),onFocusin:Z=>C.value=J,onClick:x[6]||(x[6]=Z=>y.$emit("close"))},[E("div",null,[E("div",pa,[ma,(ee(!0),re(nt,null,at(B.titles,(Z,be)=>(ee(),re("span",{key:be,class:"title"},[E("span",{class:"text",innerHTML:Z},null,8,ya),ga]))),128)),E("span",ba,[E("span",{class:"text",innerHTML:B.title},null,8,wa)])]),U(m)?(ee(),re("div",xa,[B.text?(ee(),re("div",Fa,[E("div",{class:"vp-doc",innerHTML:B.text},null,8,Ea)])):Se("",!0),Sa,Aa])):Se("",!0)])],42,va)],8,da))),128)),U(v)&&!g.value.length&&A.value?(ee(),re("li",Ca,[ve(pe(U(p)("modal.noResultsText"))+' "',1),E("strong",null,pe(U(v)),1),ve('" ')])):Se("",!0)],40,ha),E("div",Ta,[E("span",null,[E("kbd",{"aria-label":U(p)("modal.footer.navigateUpKeyAriaLabel")},Ia,8,Na),E("kbd",{"aria-label":U(p)("modal.footer.navigateDownKeyAriaLabel")},Ra,8,Da),ve(" "+pe(U(p)("modal.footer.navigateText")),1)]),E("span",null,[E("kbd",{"aria-label":U(p)("modal.footer.selectKeyAriaLabel")},La,8,_a),ve(" "+pe(U(p)("modal.footer.selectText")),1)]),E("span",null,[E("kbd",{"aria-label":U(p)("modal.footer.closeKeyAriaLabel")},"esc",8,za),ve(" "+pe(U(p)("modal.footer.closeText")),1)])])])],8,qr)])}}}),ja=tr(Pa,[["__scopeId","data-v-bbd083ab"]]);export{ja as default}; diff --git a/assets/chunks/framework.DPHCW6-_.js b/assets/chunks/framework.CmHn2guR.js similarity index 82% rename from assets/chunks/framework.DPHCW6-_.js rename to assets/chunks/framework.CmHn2guR.js index c1f36c6..5b976bd 100644 --- a/assets/chunks/framework.DPHCW6-_.js +++ b/assets/chunks/framework.CmHn2guR.js @@ -2,16 +2,16 @@ * @vue/shared v3.4.33 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT -**//*! #__NO_SIDE_EFFECTS__ */function br(e,t){const n=new Set(e.split(","));return r=>n.has(r)}const ne={},vt=[],Te=()=>{},Ii=()=>!1,Wt=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),vr=e=>e.startsWith("onUpdate:"),fe=Object.assign,wr=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Fi=Object.prototype.hasOwnProperty,J=(e,t)=>Fi.call(e,t),k=Array.isArray,wt=e=>An(e)==="[object Map]",Ys=e=>An(e)==="[object Set]",K=e=>typeof e=="function",se=e=>typeof e=="string",et=e=>typeof e=="symbol",Z=e=>e!==null&&typeof e=="object",Js=e=>(Z(e)||K(e))&&K(e.then)&&K(e.catch),Xs=Object.prototype.toString,An=e=>Xs.call(e),Ni=e=>An(e).slice(8,-1),Qs=e=>An(e)==="[object Object]",Er=e=>se(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Et=br(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Rn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},$i=/-(\w)/g,Oe=Rn(e=>e.replace($i,(t,n)=>n?n.toUpperCase():"")),Hi=/\B([A-Z])/g,tt=Rn(e=>e.replace(Hi,"-$1").toLowerCase()),On=Rn(e=>e.charAt(0).toUpperCase()+e.slice(1)),dn=Rn(e=>e?`on${On(e)}`:""),Qe=(e,t)=>!Object.is(e,t),hn=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:r,value:n})},or=e=>{const t=parseFloat(e);return isNaN(t)?e:t},ji=e=>{const t=se(e)?Number(e):NaN;return isNaN(t)?e:t};let zr;const eo=()=>zr||(zr=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Cr(e){if(k(e)){const t={};for(let n=0;n{if(n){const r=n.split(Di);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t}function xr(e){let t="";if(se(e))t=e;else if(k(e))for(let n=0;n!!(e&&e.__v_isRef===!0),Wi=e=>se(e)?e:e==null?"":k(e)||Z(e)&&(e.toString===Xs||!K(e.toString))?no(e)?Wi(e.value):JSON.stringify(e,ro,2):String(e),ro=(e,t)=>no(t)?ro(e,t.value):wt(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[r,s],o)=>(n[Wn(r,o)+" =>"]=s,n),{})}:Ys(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>Wn(n))}:et(t)?Wn(t):Z(t)&&!k(t)&&!Qs(t)?String(t):t,Wn=(e,t="")=>{var n;return et(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** +**//*! #__NO_SIDE_EFFECTS__ */function br(e,t){const n=new Set(e.split(","));return r=>n.has(r)}const ne={},vt=[],Te=()=>{},Ii=()=>!1,Wt=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),vr=e=>e.startsWith("onUpdate:"),fe=Object.assign,wr=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Fi=Object.prototype.hasOwnProperty,J=(e,t)=>Fi.call(e,t),k=Array.isArray,wt=e=>An(e)==="[object Map]",Ys=e=>An(e)==="[object Set]",K=e=>typeof e=="function",se=e=>typeof e=="string",et=e=>typeof e=="symbol",Z=e=>e!==null&&typeof e=="object",Js=e=>(Z(e)||K(e))&&K(e.then)&&K(e.catch),Xs=Object.prototype.toString,An=e=>Xs.call(e),Ni=e=>An(e).slice(8,-1),Qs=e=>An(e)==="[object Object]",Er=e=>se(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Et=br(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Rn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},$i=/-(\w)/g,Oe=Rn(e=>e.replace($i,(t,n)=>n?n.toUpperCase():"")),Hi=/\B([A-Z])/g,tt=Rn(e=>e.replace(Hi,"-$1").toLowerCase()),On=Rn(e=>e.charAt(0).toUpperCase()+e.slice(1)),dn=Rn(e=>e?`on${On(e)}`:""),Qe=(e,t)=>!Object.is(e,t),hn=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:r,value:n})},or=e=>{const t=parseFloat(e);return isNaN(t)?e:t},ji=e=>{const t=se(e)?Number(e):NaN;return isNaN(t)?e:t};let zr;const eo=()=>zr||(zr=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Cr(e){if(k(e)){const t={};for(let n=0;n{if(n){const r=n.split(Vi);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t}function xr(e){let t="";if(se(e))t=e;else if(k(e))for(let n=0;n!!(e&&e.__v_isRef===!0),Wi=e=>se(e)?e:e==null?"":k(e)||Z(e)&&(e.toString===Xs||!K(e.toString))?no(e)?Wi(e.value):JSON.stringify(e,ro,2):String(e),ro=(e,t)=>no(t)?ro(e,t.value):wt(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[r,s],o)=>(n[Wn(r,o)+" =>"]=s,n),{})}:Ys(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>Wn(n))}:et(t)?Wn(t):Z(t)&&!k(t)&&!Qs(t)?String(t):t,Wn=(e,t="")=>{var n;return et(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** * @vue/reactivity v3.4.33 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT -**/let ve;class qi{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this.parent=ve,!t&&ve&&(this.index=(ve.scopes||(ve.scopes=[])).push(this)-1)}get active(){return this._active}run(t){if(this._active){const n=ve;try{return ve=this,t()}finally{ve=n}}}on(){ve=this}off(){ve=this.parent}stop(t){if(this._active){let n,r;for(n=0,r=this.effects.length;n=4))break}this._dirtyLevel===1&&(this._dirtyLevel=0),rt()}return this._dirtyLevel>=4}set dirty(t){this._dirtyLevel=t?4:0}run(){if(this._dirtyLevel=0,!this.active)return this.fn();let t=Ge,n=ut;try{return Ge=!0,ut=this,this._runnings++,Yr(this),this.fn()}finally{Jr(this),this._runnings--,ut=n,Ge=t}}stop(){this.active&&(Yr(this),Jr(this),this.onStop&&this.onStop(),this.active=!1)}}function Yi(e){return e.value}function Yr(e){e._trackId++,e._depsLength=0}function Jr(e){if(e.deps.length>e._depsLength){for(let t=e._depsLength;t{const n=new Map;return n.cleanup=e,n.computed=t,n},_n=new WeakMap,ft=Symbol(""),cr=Symbol("");function _e(e,t,n){if(Ge&&ut){let r=_n.get(e);r||_n.set(e,r=new Map);let s=r.get(n);s||r.set(n,s=ao(()=>r.delete(n))),lo(ut,s)}}function je(e,t,n,r,s,o){const i=_n.get(e);if(!i)return;let l=[];if(t==="clear")l=[...i.values()];else if(n==="length"&&k(e)){const c=Number(r);i.forEach((a,f)=>{(f==="length"||!et(f)&&f>=c)&&l.push(a)})}else switch(n!==void 0&&l.push(i.get(n)),t){case"add":k(e)?Er(n)&&l.push(i.get("length")):(l.push(i.get(ft)),wt(e)&&l.push(i.get(cr)));break;case"delete":k(e)||(l.push(i.get(ft)),wt(e)&&l.push(i.get(cr)));break;case"set":wt(e)&&l.push(i.get(ft));break}Tr();for(const c of l)c&&co(c,4);Ar()}function Ji(e,t){const n=_n.get(e);return n&&n.get(t)}const Xi=br("__proto__,__v_isRef,__isVue"),uo=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(et)),Xr=Qi();function Qi(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const r=X(this);for(let o=0,i=this.length;o{e[t]=function(...n){nt(),Tr();const r=X(this)[t].apply(this,n);return Ar(),rt(),r}}),e}function Zi(e){et(e)||(e=String(e));const t=X(this);return _e(t,"has",e),t.hasOwnProperty(e)}class fo{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,r){const s=this._isReadonly,o=this._isShallow;if(n==="__v_isReactive")return!s;if(n==="__v_isReadonly")return s;if(n==="__v_isShallow")return o;if(n==="__v_raw")return r===(s?o?dl:mo:o?go:po).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(r)?t:void 0;const i=k(t);if(!s){if(i&&J(Xr,n))return Reflect.get(Xr,n,r);if(n==="hasOwnProperty")return Zi}const l=Reflect.get(t,n,r);return(et(n)?uo.has(n):Xi(n))||(s||_e(t,"get",n),o)?l:de(l)?i&&Er(n)?l:l.value:Z(l)?s?Pn(l):Mn(l):l}}class ho extends fo{constructor(t=!1){super(!1,t)}set(t,n,r,s){let o=t[n];if(!this._isShallow){const c=pt(o);if(!At(r)&&!pt(r)&&(o=X(o),r=X(r)),!k(t)&&de(o)&&!de(r))return c?!1:(o.value=r,!0)}const i=k(t)&&Er(n)?Number(n)e,Ln=e=>Reflect.getPrototypeOf(e);function Qt(e,t,n=!1,r=!1){e=e.__v_raw;const s=X(e),o=X(t);n||(Qe(t,o)&&_e(s,"get",t),_e(s,"get",o));const{has:i}=Ln(s),l=r?Rr:n?Mr:Dt;if(i.call(s,t))return l(e.get(t));if(i.call(s,o))return l(e.get(o));e!==s&&e.get(t)}function Zt(e,t=!1){const n=this.__v_raw,r=X(n),s=X(e);return t||(Qe(e,s)&&_e(r,"has",e),_e(r,"has",s)),e===s?n.has(e):n.has(e)||n.has(s)}function en(e,t=!1){return e=e.__v_raw,!t&&_e(X(e),"iterate",ft),Reflect.get(e,"size",e)}function Qr(e,t=!1){!t&&!At(e)&&!pt(e)&&(e=X(e));const n=X(this);return Ln(n).has.call(n,e)||(n.add(e),je(n,"add",e,e)),this}function Zr(e,t,n=!1){!n&&!At(t)&&!pt(t)&&(t=X(t));const r=X(this),{has:s,get:o}=Ln(r);let i=s.call(r,e);i||(e=X(e),i=s.call(r,e));const l=o.call(r,e);return r.set(e,t),i?Qe(t,l)&&je(r,"set",e,t):je(r,"add",e,t),this}function es(e){const t=X(this),{has:n,get:r}=Ln(t);let s=n.call(t,e);s||(e=X(e),s=n.call(t,e)),r&&r.call(t,e);const o=t.delete(e);return s&&je(t,"delete",e,void 0),o}function ts(){const e=X(this),t=e.size!==0,n=e.clear();return t&&je(e,"clear",void 0,void 0),n}function tn(e,t){return function(r,s){const o=this,i=o.__v_raw,l=X(i),c=t?Rr:e?Mr:Dt;return!e&&_e(l,"iterate",ft),i.forEach((a,f)=>r.call(s,c(a),c(f),o))}}function nn(e,t,n){return function(...r){const s=this.__v_raw,o=X(s),i=wt(o),l=e==="entries"||e===Symbol.iterator&&i,c=e==="keys"&&i,a=s[e](...r),f=n?Rr:t?Mr:Dt;return!t&&_e(o,"iterate",c?cr:ft),{next(){const{value:h,done:p}=a.next();return p?{value:h,done:p}:{value:l?[f(h[0]),f(h[1])]:f(h),done:p}},[Symbol.iterator](){return this}}}}function De(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function sl(){const e={get(o){return Qt(this,o)},get size(){return en(this)},has:Zt,add:Qr,set:Zr,delete:es,clear:ts,forEach:tn(!1,!1)},t={get(o){return Qt(this,o,!1,!0)},get size(){return en(this)},has:Zt,add(o){return Qr.call(this,o,!0)},set(o,i){return Zr.call(this,o,i,!0)},delete:es,clear:ts,forEach:tn(!1,!0)},n={get(o){return Qt(this,o,!0)},get size(){return en(this,!0)},has(o){return Zt.call(this,o,!0)},add:De("add"),set:De("set"),delete:De("delete"),clear:De("clear"),forEach:tn(!0,!1)},r={get(o){return Qt(this,o,!0,!0)},get size(){return en(this,!0)},has(o){return Zt.call(this,o,!0)},add:De("add"),set:De("set"),delete:De("delete"),clear:De("clear"),forEach:tn(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(o=>{e[o]=nn(o,!1,!1),n[o]=nn(o,!0,!1),t[o]=nn(o,!1,!0),r[o]=nn(o,!0,!0)}),[e,n,t,r]}const[ol,il,ll,cl]=sl();function Or(e,t){const n=t?e?cl:ll:e?il:ol;return(r,s,o)=>s==="__v_isReactive"?!e:s==="__v_isReadonly"?e:s==="__v_raw"?r:Reflect.get(J(n,s)&&s in r?n:r,s,o)}const al={get:Or(!1,!1)},ul={get:Or(!1,!0)},fl={get:Or(!0,!1)};const po=new WeakMap,go=new WeakMap,mo=new WeakMap,dl=new WeakMap;function hl(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function pl(e){return e.__v_skip||!Object.isExtensible(e)?0:hl(Ni(e))}function Mn(e){return pt(e)?e:Lr(e,!1,tl,al,po)}function gl(e){return Lr(e,!1,rl,ul,go)}function Pn(e){return Lr(e,!0,nl,fl,mo)}function Lr(e,t,n,r,s){if(!Z(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const o=s.get(e);if(o)return o;const i=pl(e);if(i===0)return e;const l=new Proxy(e,i===2?r:n);return s.set(e,l),l}function Ct(e){return pt(e)?Ct(e.__v_raw):!!(e&&e.__v_isReactive)}function pt(e){return!!(e&&e.__v_isReadonly)}function At(e){return!!(e&&e.__v_isShallow)}function yo(e){return e?!!e.__v_raw:!1}function X(e){const t=e&&e.__v_raw;return t?X(t):e}function pn(e){return Object.isExtensible(e)&&Zs(e,"__v_skip",!0),e}const Dt=e=>Z(e)?Mn(e):e,Mr=e=>Z(e)?Pn(e):e;class _o{constructor(t,n,r,s){this.getter=t,this._setter=n,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this.effect=new Sr(()=>t(this._value),()=>It(this,this.effect._dirtyLevel===2?2:3)),this.effect.computed=this,this.effect.active=this._cacheable=!s,this.__v_isReadonly=r}get value(){const t=X(this);return(!t._cacheable||t.effect.dirty)&&Qe(t._value,t._value=t.effect.run())&&It(t,4),Pr(t),t.effect._dirtyLevel>=2&&It(t,2),t._value}set value(t){this._setter(t)}get _dirty(){return this.effect.dirty}set _dirty(t){this.effect.dirty=t}}function ml(e,t,n=!1){let r,s;const o=K(e);return o?(r=e,s=Te):(r=e.get,s=e.set),new _o(r,s,o||!s,n)}function Pr(e){var t;Ge&&ut&&(e=X(e),lo(ut,(t=e.dep)!=null?t:e.dep=ao(()=>e.dep=void 0,e instanceof _o?e:void 0)))}function It(e,t=4,n,r){e=X(e);const s=e.dep;s&&co(s,t)}function de(e){return!!(e&&e.__v_isRef===!0)}function le(e){return bo(e,!1)}function Ir(e){return bo(e,!0)}function bo(e,t){return de(e)?e:new yl(e,t)}class yl{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:X(t),this._value=n?t:Dt(t)}get value(){return Pr(this),this._value}set value(t){const n=this.__v_isShallow||At(t)||pt(t);t=n?t:X(t),Qe(t,this._rawValue)&&(this._rawValue,this._rawValue=t,this._value=n?t:Dt(t),It(this,4))}}function vo(e){return de(e)?e.value:e}const _l={get:(e,t,n)=>vo(Reflect.get(e,t,n)),set:(e,t,n,r)=>{const s=e[t];return de(s)&&!de(n)?(s.value=n,!0):Reflect.set(e,t,n,r)}};function wo(e){return Ct(e)?e:new Proxy(e,_l)}class bl{constructor(t){this.dep=void 0,this.__v_isRef=!0;const{get:n,set:r}=t(()=>Pr(this),()=>It(this));this._get=n,this._set=r}get value(){return this._get()}set value(t){this._set(t)}}function vl(e){return new bl(e)}class wl{constructor(t,n,r){this._object=t,this._key=n,this._defaultValue=r,this.__v_isRef=!0}get value(){const t=this._object[this._key];return t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return Ji(X(this._object),this._key)}}class El{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0}get value(){return this._getter()}}function Cl(e,t,n){return de(e)?e:K(e)?new El(e):Z(e)&&arguments.length>1?xl(e,t,n):le(e)}function xl(e,t,n){const r=e[t];return de(r)?r:new wl(e,t,n)}/** +**/let ve;class qi{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this.parent=ve,!t&&ve&&(this.index=(ve.scopes||(ve.scopes=[])).push(this)-1)}get active(){return this._active}run(t){if(this._active){const n=ve;try{return ve=this,t()}finally{ve=n}}}on(){ve=this}off(){ve=this.parent}stop(t){if(this._active){let n,r;for(n=0,r=this.effects.length;n=4))break}this._dirtyLevel===1&&(this._dirtyLevel=0),rt()}return this._dirtyLevel>=4}set dirty(t){this._dirtyLevel=t?4:0}run(){if(this._dirtyLevel=0,!this.active)return this.fn();let t=Ge,n=ut;try{return Ge=!0,ut=this,this._runnings++,Yr(this),this.fn()}finally{Jr(this),this._runnings--,ut=n,Ge=t}}stop(){this.active&&(Yr(this),Jr(this),this.onStop&&this.onStop(),this.active=!1)}}function Yi(e){return e.value}function Yr(e){e._trackId++,e._depsLength=0}function Jr(e){if(e.deps.length>e._depsLength){for(let t=e._depsLength;t{const n=new Map;return n.cleanup=e,n.computed=t,n},_n=new WeakMap,ft=Symbol(""),cr=Symbol("");function _e(e,t,n){if(Ge&&ut){let r=_n.get(e);r||_n.set(e,r=new Map);let s=r.get(n);s||r.set(n,s=ao(()=>r.delete(n))),lo(ut,s)}}function je(e,t,n,r,s,o){const i=_n.get(e);if(!i)return;let l=[];if(t==="clear")l=[...i.values()];else if(n==="length"&&k(e)){const c=Number(r);i.forEach((a,f)=>{(f==="length"||!et(f)&&f>=c)&&l.push(a)})}else switch(n!==void 0&&l.push(i.get(n)),t){case"add":k(e)?Er(n)&&l.push(i.get("length")):(l.push(i.get(ft)),wt(e)&&l.push(i.get(cr)));break;case"delete":k(e)||(l.push(i.get(ft)),wt(e)&&l.push(i.get(cr)));break;case"set":wt(e)&&l.push(i.get(ft));break}Tr();for(const c of l)c&&co(c,4);Ar()}function Ji(e,t){const n=_n.get(e);return n&&n.get(t)}const Xi=br("__proto__,__v_isRef,__isVue"),uo=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(et)),Xr=Qi();function Qi(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const r=X(this);for(let o=0,i=this.length;o{e[t]=function(...n){nt(),Tr();const r=X(this)[t].apply(this,n);return Ar(),rt(),r}}),e}function Zi(e){et(e)||(e=String(e));const t=X(this);return _e(t,"has",e),t.hasOwnProperty(e)}class fo{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,r){const s=this._isReadonly,o=this._isShallow;if(n==="__v_isReactive")return!s;if(n==="__v_isReadonly")return s;if(n==="__v_isShallow")return o;if(n==="__v_raw")return r===(s?o?dl:mo:o?go:po).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(r)?t:void 0;const i=k(t);if(!s){if(i&&J(Xr,n))return Reflect.get(Xr,n,r);if(n==="hasOwnProperty")return Zi}const l=Reflect.get(t,n,r);return(et(n)?uo.has(n):Xi(n))||(s||_e(t,"get",n),o)?l:de(l)?i&&Er(n)?l:l.value:Z(l)?s?Pn(l):Mn(l):l}}class ho extends fo{constructor(t=!1){super(!1,t)}set(t,n,r,s){let o=t[n];if(!this._isShallow){const c=pt(o);if(!At(r)&&!pt(r)&&(o=X(o),r=X(r)),!k(t)&&de(o)&&!de(r))return c?!1:(o.value=r,!0)}const i=k(t)&&Er(n)?Number(n)e,Ln=e=>Reflect.getPrototypeOf(e);function Qt(e,t,n=!1,r=!1){e=e.__v_raw;const s=X(e),o=X(t);n||(Qe(t,o)&&_e(s,"get",t),_e(s,"get",o));const{has:i}=Ln(s),l=r?Rr:n?Mr:Vt;if(i.call(s,t))return l(e.get(t));if(i.call(s,o))return l(e.get(o));e!==s&&e.get(t)}function Zt(e,t=!1){const n=this.__v_raw,r=X(n),s=X(e);return t||(Qe(e,s)&&_e(r,"has",e),_e(r,"has",s)),e===s?n.has(e):n.has(e)||n.has(s)}function en(e,t=!1){return e=e.__v_raw,!t&&_e(X(e),"iterate",ft),Reflect.get(e,"size",e)}function Qr(e,t=!1){!t&&!At(e)&&!pt(e)&&(e=X(e));const n=X(this);return Ln(n).has.call(n,e)||(n.add(e),je(n,"add",e,e)),this}function Zr(e,t,n=!1){!n&&!At(t)&&!pt(t)&&(t=X(t));const r=X(this),{has:s,get:o}=Ln(r);let i=s.call(r,e);i||(e=X(e),i=s.call(r,e));const l=o.call(r,e);return r.set(e,t),i?Qe(t,l)&&je(r,"set",e,t):je(r,"add",e,t),this}function es(e){const t=X(this),{has:n,get:r}=Ln(t);let s=n.call(t,e);s||(e=X(e),s=n.call(t,e)),r&&r.call(t,e);const o=t.delete(e);return s&&je(t,"delete",e,void 0),o}function ts(){const e=X(this),t=e.size!==0,n=e.clear();return t&&je(e,"clear",void 0,void 0),n}function tn(e,t){return function(r,s){const o=this,i=o.__v_raw,l=X(i),c=t?Rr:e?Mr:Vt;return!e&&_e(l,"iterate",ft),i.forEach((a,f)=>r.call(s,c(a),c(f),o))}}function nn(e,t,n){return function(...r){const s=this.__v_raw,o=X(s),i=wt(o),l=e==="entries"||e===Symbol.iterator&&i,c=e==="keys"&&i,a=s[e](...r),f=n?Rr:t?Mr:Vt;return!t&&_e(o,"iterate",c?cr:ft),{next(){const{value:h,done:p}=a.next();return p?{value:h,done:p}:{value:l?[f(h[0]),f(h[1])]:f(h),done:p}},[Symbol.iterator](){return this}}}}function Ve(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function sl(){const e={get(o){return Qt(this,o)},get size(){return en(this)},has:Zt,add:Qr,set:Zr,delete:es,clear:ts,forEach:tn(!1,!1)},t={get(o){return Qt(this,o,!1,!0)},get size(){return en(this)},has:Zt,add(o){return Qr.call(this,o,!0)},set(o,i){return Zr.call(this,o,i,!0)},delete:es,clear:ts,forEach:tn(!1,!0)},n={get(o){return Qt(this,o,!0)},get size(){return en(this,!0)},has(o){return Zt.call(this,o,!0)},add:Ve("add"),set:Ve("set"),delete:Ve("delete"),clear:Ve("clear"),forEach:tn(!0,!1)},r={get(o){return Qt(this,o,!0,!0)},get size(){return en(this,!0)},has(o){return Zt.call(this,o,!0)},add:Ve("add"),set:Ve("set"),delete:Ve("delete"),clear:Ve("clear"),forEach:tn(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(o=>{e[o]=nn(o,!1,!1),n[o]=nn(o,!0,!1),t[o]=nn(o,!1,!0),r[o]=nn(o,!0,!0)}),[e,n,t,r]}const[ol,il,ll,cl]=sl();function Or(e,t){const n=t?e?cl:ll:e?il:ol;return(r,s,o)=>s==="__v_isReactive"?!e:s==="__v_isReadonly"?e:s==="__v_raw"?r:Reflect.get(J(n,s)&&s in r?n:r,s,o)}const al={get:Or(!1,!1)},ul={get:Or(!1,!0)},fl={get:Or(!0,!1)};const po=new WeakMap,go=new WeakMap,mo=new WeakMap,dl=new WeakMap;function hl(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function pl(e){return e.__v_skip||!Object.isExtensible(e)?0:hl(Ni(e))}function Mn(e){return pt(e)?e:Lr(e,!1,tl,al,po)}function gl(e){return Lr(e,!1,rl,ul,go)}function Pn(e){return Lr(e,!0,nl,fl,mo)}function Lr(e,t,n,r,s){if(!Z(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const o=s.get(e);if(o)return o;const i=pl(e);if(i===0)return e;const l=new Proxy(e,i===2?r:n);return s.set(e,l),l}function Ct(e){return pt(e)?Ct(e.__v_raw):!!(e&&e.__v_isReactive)}function pt(e){return!!(e&&e.__v_isReadonly)}function At(e){return!!(e&&e.__v_isShallow)}function yo(e){return e?!!e.__v_raw:!1}function X(e){const t=e&&e.__v_raw;return t?X(t):e}function pn(e){return Object.isExtensible(e)&&Zs(e,"__v_skip",!0),e}const Vt=e=>Z(e)?Mn(e):e,Mr=e=>Z(e)?Pn(e):e;class _o{constructor(t,n,r,s){this.getter=t,this._setter=n,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this.effect=new Sr(()=>t(this._value),()=>It(this,this.effect._dirtyLevel===2?2:3)),this.effect.computed=this,this.effect.active=this._cacheable=!s,this.__v_isReadonly=r}get value(){const t=X(this);return(!t._cacheable||t.effect.dirty)&&Qe(t._value,t._value=t.effect.run())&&It(t,4),Pr(t),t.effect._dirtyLevel>=2&&It(t,2),t._value}set value(t){this._setter(t)}get _dirty(){return this.effect.dirty}set _dirty(t){this.effect.dirty=t}}function ml(e,t,n=!1){let r,s;const o=K(e);return o?(r=e,s=Te):(r=e.get,s=e.set),new _o(r,s,o||!s,n)}function Pr(e){var t;Ge&&ut&&(e=X(e),lo(ut,(t=e.dep)!=null?t:e.dep=ao(()=>e.dep=void 0,e instanceof _o?e:void 0)))}function It(e,t=4,n,r){e=X(e);const s=e.dep;s&&co(s,t)}function de(e){return!!(e&&e.__v_isRef===!0)}function le(e){return bo(e,!1)}function Ir(e){return bo(e,!0)}function bo(e,t){return de(e)?e:new yl(e,t)}class yl{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:X(t),this._value=n?t:Vt(t)}get value(){return Pr(this),this._value}set value(t){const n=this.__v_isShallow||At(t)||pt(t);t=n?t:X(t),Qe(t,this._rawValue)&&(this._rawValue,this._rawValue=t,this._value=n?t:Vt(t),It(this,4))}}function vo(e){return de(e)?e.value:e}const _l={get:(e,t,n)=>vo(Reflect.get(e,t,n)),set:(e,t,n,r)=>{const s=e[t];return de(s)&&!de(n)?(s.value=n,!0):Reflect.set(e,t,n,r)}};function wo(e){return Ct(e)?e:new Proxy(e,_l)}class bl{constructor(t){this.dep=void 0,this.__v_isRef=!0;const{get:n,set:r}=t(()=>Pr(this),()=>It(this));this._get=n,this._set=r}get value(){return this._get()}set value(t){this._set(t)}}function vl(e){return new bl(e)}class wl{constructor(t,n,r){this._object=t,this._key=n,this._defaultValue=r,this.__v_isRef=!0}get value(){const t=this._object[this._key];return t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return Ji(X(this._object),this._key)}}class El{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0}get value(){return this._getter()}}function Cl(e,t,n){return de(e)?e:K(e)?new El(e):Z(e)&&arguments.length>1?xl(e,t,n):le(e)}function xl(e,t,n){const r=e[t];return de(r)?r:new wl(e,t,n)}/** * @vue/runtime-core v3.4.33 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT -**/function ze(e,t,n,r){try{return r?e(...r):e()}catch(s){qt(s,t,n)}}function Ae(e,t,n,r){if(K(e)){const s=ze(e,t,n,r);return s&&Js(s)&&s.catch(o=>{qt(o,t,n)}),s}if(k(e)){const s=[];for(let o=0;o>>1,s=he[r],o=Ut(s);oFe&&he.splice(t,1)}function Rl(e){k(e)?xt.push(...e):(!ke||!ke.includes(e,e.allowRecurse?ct+1:ct))&&xt.push(e),Co()}function ns(e,t,n=Vt?Fe+1:0){for(;nUt(n)-Ut(r));if(xt.length=0,ke){ke.push(...t);return}for(ke=t,ct=0;cte.id==null?1/0:e.id,Ol=(e,t)=>{const n=Ut(e)-Ut(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function xo(e){ar=!1,Vt=!0,he.sort(Ol);try{for(Fe=0;Fe{r._d&&_s(-1);const o=vn(t);let i;try{i=e(...s)}finally{vn(o),r._d&&_s(1)}return i};return r._n=!0,r._c=!0,r._d=!0,r}function lu(e,t){if(ue===null)return e;const n=Vn(ue),r=e.dirs||(e.dirs=[]);for(let s=0;s{e.isMounted=!0}),Lo(()=>{e.isUnmounting=!0}),e}const Ee=[Function,Array],So={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Ee,onEnter:Ee,onAfterEnter:Ee,onEnterCancelled:Ee,onBeforeLeave:Ee,onLeave:Ee,onAfterLeave:Ee,onLeaveCancelled:Ee,onBeforeAppear:Ee,onAppear:Ee,onAfterAppear:Ee,onAppearCancelled:Ee},To=e=>{const t=e.subTree;return t.component?To(t.component):t},Pl={name:"BaseTransition",props:So,setup(e,{slots:t}){const n=Dn(),r=Ml();return()=>{const s=t.default&&Ro(t.default(),!0);if(!s||!s.length)return;let o=s[0];if(s.length>1){for(const p of s)if(p.type!==ge){o=p;break}}const i=X(e),{mode:l}=i;if(r.isLeaving)return qn(o);const c=rs(o);if(!c)return qn(o);let a=ur(c,i,r,n,p=>a=p);wn(c,a);const f=n.subTree,h=f&&rs(f);if(h&&h.type!==ge&&!at(c,h)&&To(n).type!==ge){const p=ur(h,i,r,n);if(wn(h,p),l==="out-in"&&c.type!==ge)return r.isLeaving=!0,p.afterLeave=()=>{r.isLeaving=!1,n.update.active!==!1&&(n.effect.dirty=!0,n.update())},qn(o);l==="in-out"&&c.type!==ge&&(p.delayLeave=(y,w,M)=>{const D=Ao(r,h);D[String(h.key)]=h,y[Ke]=()=>{w(),y[Ke]=void 0,delete a.delayedLeave},a.delayedLeave=M})}return o}}},Il=Pl;function Ao(e,t){const{leavingVNodes:n}=e;let r=n.get(t.type);return r||(r=Object.create(null),n.set(t.type,r)),r}function ur(e,t,n,r,s){const{appear:o,mode:i,persisted:l=!1,onBeforeEnter:c,onEnter:a,onAfterEnter:f,onEnterCancelled:h,onBeforeLeave:p,onLeave:y,onAfterLeave:w,onLeaveCancelled:M,onBeforeAppear:D,onAppear:W,onAfterAppear:V,onAppearCancelled:g}=t,_=String(e.key),P=Ao(n,e),T=(L,b)=>{L&&Ae(L,r,9,b)},N=(L,b)=>{const F=b[1];T(L,b),k(L)?L.every(S=>S.length<=1)&&F():L.length<=1&&F()},$={mode:i,persisted:l,beforeEnter(L){let b=c;if(!n.isMounted)if(o)b=D||c;else return;L[Ke]&&L[Ke](!0);const F=P[_];F&&at(e,F)&&F.el[Ke]&&F.el[Ke](),T(b,[L])},enter(L){let b=a,F=f,S=h;if(!n.isMounted)if(o)b=W||a,F=V||f,S=g||h;else return;let G=!1;const ee=L[rn]=re=>{G||(G=!0,re?T(S,[L]):T(F,[L]),$.delayedLeave&&$.delayedLeave(),L[rn]=void 0)};b?N(b,[L,ee]):ee()},leave(L,b){const F=String(e.key);if(L[rn]&&L[rn](!0),n.isUnmounting)return b();T(p,[L]);let S=!1;const G=L[Ke]=ee=>{S||(S=!0,b(),ee?T(M,[L]):T(w,[L]),L[Ke]=void 0,P[F]===e&&delete P[F])};P[F]=e,y?N(y,[L,G]):G()},clone(L){const b=ur(L,t,n,r,s);return s&&s(b),b}};return $}function qn(e){if(Gt(e))return e=Ze(e),e.children=null,e}function rs(e){if(!Gt(e))return e;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&K(n.default))return n.default()}}function wn(e,t){e.shapeFlag&6&&e.component?wn(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Ro(e,t=!1,n){let r=[],s=0;for(let o=0;o1)for(let o=0;o!!e.type.__asyncLoader;/*! #__NO_SIDE_EFFECTS__ */function cu(e){K(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:r,delay:s=200,timeout:o,suspensible:i=!0,onError:l}=e;let c=null,a,f=0;const h=()=>(f++,c=null,p()),p=()=>{let y;return c||(y=c=t().catch(w=>{if(w=w instanceof Error?w:new Error(String(w)),l)return new Promise((M,D)=>{l(w,()=>M(h()),()=>D(w),f+1)});throw w}).then(w=>y!==c&&c?c:(w&&(w.__esModule||w[Symbol.toStringTag]==="Module")&&(w=w.default),a=w,w)))};return Nr({name:"AsyncComponentWrapper",__asyncLoader:p,get __asyncResolved(){return a},setup(){const y=ae;if(a)return()=>Gn(a,y);const w=V=>{c=null,qt(V,y,13,!r)};if(i&&y.suspense||Yt)return p().then(V=>()=>Gn(V,y)).catch(V=>(w(V),()=>r?ie(r,{error:V}):null));const M=le(!1),D=le(),W=le(!!s);return s&&setTimeout(()=>{W.value=!1},s),o!=null&&setTimeout(()=>{if(!M.value&&!D.value){const V=new Error(`Async component timed out after ${o}ms.`);w(V),D.value=V}},o),p().then(()=>{M.value=!0,y.parent&&Gt(y.parent.vnode)&&(y.parent.effect.dirty=!0,Fn(y.parent.update))}).catch(V=>{w(V),D.value=V}),()=>{if(M.value&&a)return Gn(a,y);if(D.value&&r)return ie(r,{error:D.value});if(n&&!W.value)return ie(n)}}})}function Gn(e,t){const{ref:n,props:r,children:s,ce:o}=t.vnode,i=ie(e,r,s);return i.ref=n,i.ce=o,delete t.vnode.ce,i}const Gt=e=>e.type.__isKeepAlive;function Fl(e,t){Oo(e,"a",t)}function Nl(e,t){Oo(e,"da",t)}function Oo(e,t,n=ae){const r=e.__wdc||(e.__wdc=()=>{let s=n;for(;s;){if(s.isDeactivated)return;s=s.parent}return e()});if($n(t,r,n),n){let s=n.parent;for(;s&&s.parent;)Gt(s.parent.vnode)&&$l(r,t,n,s),s=s.parent}}function $l(e,t,n,r){const s=$n(t,e,r,!0);Hn(()=>{wr(r[t],s)},n)}function $n(e,t,n=ae,r=!1){if(n){const s=n[e]||(n[e]=[]),o=t.__weh||(t.__weh=(...i)=>{nt();const l=zt(n),c=Ae(t,n,e,i);return l(),rt(),c});return r?s.unshift(o):s.push(o),o}}const Be=e=>(t,n=ae)=>{(!Yt||e==="sp")&&$n(e,(...r)=>t(...r),n)},Hl=Be("bm"),Rt=Be("m"),jl=Be("bu"),Bl=Be("u"),Lo=Be("bum"),Hn=Be("um"),Dl=Be("sp"),Vl=Be("rtg"),Ul=Be("rtc");function kl(e,t=ae){$n("ec",e,t)}const Mo="components";function au(e,t){return Io(Mo,e,!0,t)||e}const Po=Symbol.for("v-ndc");function uu(e){return se(e)?Io(Mo,e,!1)||e:e||Po}function Io(e,t,n=!0,r=!1){const s=ue||ae;if(s){const o=s.type;{const l=Nc(o,!1);if(l&&(l===t||l===Oe(t)||l===On(Oe(t))))return o}const i=ss(s[e]||o[e],t)||ss(s.appContext[e],t);return!i&&r?o:i}}function ss(e,t){return e&&(e[t]||e[Oe(t)]||e[On(Oe(t))])}function fu(e,t,n,r){let s;const o=n;if(k(e)||se(e)){s=new Array(e.length);for(let i=0,l=e.length;it(i,l,void 0,o));else{const i=Object.keys(e);s=new Array(i.length);for(let l=0,c=i.length;lxn(t)?!(t.type===ge||t.type===ye&&!Fo(t.children)):!0)?e:null}function hu(e,t){const n={};for(const r in e)n[/[A-Z]/.test(r)?`on:${r}`:dn(r)]=e[r];return n}const fr=e=>e?ii(e)?Vn(e):fr(e.parent):null,Ft=fe(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>fr(e.parent),$root:e=>fr(e.root),$emit:e=>e.emit,$options:e=>$r(e),$forceUpdate:e=>e.f||(e.f=()=>{e.effect.dirty=!0,Fn(e.update)}),$nextTick:e=>e.n||(e.n=In.bind(e.proxy)),$watch:e=>yc.bind(e)}),zn=(e,t)=>e!==ne&&!e.__isScriptSetup&&J(e,t),Kl={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:r,data:s,props:o,accessCache:i,type:l,appContext:c}=e;let a;if(t[0]!=="$"){const y=i[t];if(y!==void 0)switch(y){case 1:return r[t];case 2:return s[t];case 4:return n[t];case 3:return o[t]}else{if(zn(r,t))return i[t]=1,r[t];if(s!==ne&&J(s,t))return i[t]=2,s[t];if((a=e.propsOptions[0])&&J(a,t))return i[t]=3,o[t];if(n!==ne&&J(n,t))return i[t]=4,n[t];dr&&(i[t]=0)}}const f=Ft[t];let h,p;if(f)return t==="$attrs"&&_e(e.attrs,"get",""),f(e);if((h=l.__cssModules)&&(h=h[t]))return h;if(n!==ne&&J(n,t))return i[t]=4,n[t];if(p=c.config.globalProperties,J(p,t))return p[t]},set({_:e},t,n){const{data:r,setupState:s,ctx:o}=e;return zn(s,t)?(s[t]=n,!0):r!==ne&&J(r,t)?(r[t]=n,!0):J(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(o[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:r,appContext:s,propsOptions:o}},i){let l;return!!n[i]||e!==ne&&J(e,i)||zn(t,i)||(l=o[0])&&J(l,i)||J(r,i)||J(Ft,i)||J(s.config.globalProperties,i)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:J(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function pu(){return Wl().slots}function Wl(){const e=Dn();return e.setupContext||(e.setupContext=ci(e))}function os(e){return k(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let dr=!0;function ql(e){const t=$r(e),n=e.proxy,r=e.ctx;dr=!1,t.beforeCreate&&is(t.beforeCreate,e,"bc");const{data:s,computed:o,methods:i,watch:l,provide:c,inject:a,created:f,beforeMount:h,mounted:p,beforeUpdate:y,updated:w,activated:M,deactivated:D,beforeDestroy:W,beforeUnmount:V,destroyed:g,unmounted:_,render:P,renderTracked:T,renderTriggered:N,errorCaptured:$,serverPrefetch:L,expose:b,inheritAttrs:F,components:S,directives:G,filters:ee}=t;if(a&&Gl(a,r,null),i)for(const Y in i){const j=i[Y];K(j)&&(r[Y]=j.bind(n))}if(s){const Y=s.call(n,n);Z(Y)&&(e.data=Mn(Y))}if(dr=!0,o)for(const Y in o){const j=o[Y],$e=K(j)?j.bind(n,n):K(j.get)?j.get.bind(n,n):Te,Jt=!K(j)&&K(j.set)?j.set.bind(n):Te,st=oe({get:$e,set:Jt});Object.defineProperty(r,Y,{enumerable:!0,configurable:!0,get:()=>st.value,set:Me=>st.value=Me})}if(l)for(const Y in l)No(l[Y],r,n,Y);if(c){const Y=K(c)?c.call(n):c;Reflect.ownKeys(Y).forEach(j=>{Zl(j,Y[j])})}f&&is(f,e,"c");function U(Y,j){k(j)?j.forEach($e=>Y($e.bind(n))):j&&Y(j.bind(n))}if(U(Hl,h),U(Rt,p),U(jl,y),U(Bl,w),U(Fl,M),U(Nl,D),U(kl,$),U(Ul,T),U(Vl,N),U(Lo,V),U(Hn,_),U(Dl,L),k(b))if(b.length){const Y=e.exposed||(e.exposed={});b.forEach(j=>{Object.defineProperty(Y,j,{get:()=>n[j],set:$e=>n[j]=$e})})}else e.exposed||(e.exposed={});P&&e.render===Te&&(e.render=P),F!=null&&(e.inheritAttrs=F),S&&(e.components=S),G&&(e.directives=G)}function Gl(e,t,n=Te){k(e)&&(e=hr(e));for(const r in e){const s=e[r];let o;Z(s)?"default"in s?o=Tt(s.from||r,s.default,!0):o=Tt(s.from||r):o=Tt(s),de(o)?Object.defineProperty(t,r,{enumerable:!0,configurable:!0,get:()=>o.value,set:i=>o.value=i}):t[r]=o}}function is(e,t,n){Ae(k(e)?e.map(r=>r.bind(t.proxy)):e.bind(t.proxy),t,n)}function No(e,t,n,r){const s=r.includes(".")?Xo(n,r):()=>n[r];if(se(e)){const o=t[e];K(o)&&Ye(s,o)}else if(K(e))Ye(s,e.bind(n));else if(Z(e))if(k(e))e.forEach(o=>No(o,t,n,r));else{const o=K(e.handler)?e.handler.bind(n):t[e.handler];K(o)&&Ye(s,o,e)}}function $r(e){const t=e.type,{mixins:n,extends:r}=t,{mixins:s,optionsCache:o,config:{optionMergeStrategies:i}}=e.appContext,l=o.get(t);let c;return l?c=l:!s.length&&!n&&!r?c=t:(c={},s.length&&s.forEach(a=>En(c,a,i,!0)),En(c,t,i)),Z(t)&&o.set(t,c),c}function En(e,t,n,r=!1){const{mixins:s,extends:o}=t;o&&En(e,o,n,!0),s&&s.forEach(i=>En(e,i,n,!0));for(const i in t)if(!(r&&i==="expose")){const l=zl[i]||n&&n[i];e[i]=l?l(e[i],t[i]):t[i]}return e}const zl={data:ls,props:cs,emits:cs,methods:Pt,computed:Pt,beforeCreate:pe,created:pe,beforeMount:pe,mounted:pe,beforeUpdate:pe,updated:pe,beforeDestroy:pe,beforeUnmount:pe,destroyed:pe,unmounted:pe,activated:pe,deactivated:pe,errorCaptured:pe,serverPrefetch:pe,components:Pt,directives:Pt,watch:Jl,provide:ls,inject:Yl};function ls(e,t){return t?e?function(){return fe(K(e)?e.call(this,this):e,K(t)?t.call(this,this):t)}:t:e}function Yl(e,t){return Pt(hr(e),hr(t))}function hr(e){if(k(e)){const t={};for(let n=0;n1)return n&&K(t)?t.call(r&&r.proxy):t}}const Ho={},jo=()=>Object.create(Ho),Bo=e=>Object.getPrototypeOf(e)===Ho;function ec(e,t,n,r=!1){const s={},o=jo();e.propsDefaults=Object.create(null),Do(e,t,s,o);for(const i in e.propsOptions[0])i in s||(s[i]=void 0);n?e.props=r?s:gl(s):e.type.props?e.props=s:e.props=o,e.attrs=o}function tc(e,t,n,r){const{props:s,attrs:o,vnode:{patchFlag:i}}=e,l=X(s),[c]=e.propsOptions;let a=!1;if((r||i>0)&&!(i&16)){if(i&8){const f=e.vnode.dynamicProps;for(let h=0;h{c=!0;const[p,y]=Vo(h,t,!0);fe(i,p),y&&l.push(...y)};!n&&t.mixins.length&&t.mixins.forEach(f),e.extends&&f(e.extends),e.mixins&&e.mixins.forEach(f)}if(!o&&!c)return Z(e)&&r.set(e,vt),vt;if(k(o))for(let f=0;f-1,y[1]=M<0||w-1||J(y,"default"))&&l.push(h)}}}const a=[i,l];return Z(e)&&r.set(e,a),a}function as(e){return e[0]!=="$"&&!Et(e)}function us(e){return e===null?"null":typeof e=="function"?e.name||"":typeof e=="object"&&e.constructor&&e.constructor.name||""}function fs(e,t){return us(e)===us(t)}function ds(e,t){return k(t)?t.findIndex(n=>fs(n,e)):K(t)&&fs(t,e)?0:-1}const Uo=e=>e[0]==="_"||e==="$stable",Hr=e=>k(e)?e.map(xe):[xe(e)],rc=(e,t,n)=>{if(t._n)return t;const r=Ll((...s)=>Hr(t(...s)),n);return r._c=!1,r},ko=(e,t,n)=>{const r=e._ctx;for(const s in e){if(Uo(s))continue;const o=e[s];if(K(o))t[s]=rc(s,o,r);else if(o!=null){const i=Hr(o);t[s]=()=>i}}},Ko=(e,t)=>{const n=Hr(t);e.slots.default=()=>n},Wo=(e,t,n)=>{for(const r in t)(n||r!=="_")&&(e[r]=t[r])},sc=(e,t,n)=>{const r=e.slots=jo();if(e.vnode.shapeFlag&32){const s=t._;s?(Wo(r,t,n),n&&Zs(r,"_",s,!0)):ko(t,r)}else t&&Ko(e,t)},oc=(e,t,n)=>{const{vnode:r,slots:s}=e;let o=!0,i=ne;if(r.shapeFlag&32){const l=t._;l?n&&l===1?o=!1:Wo(s,t,n):(o=!t.$stable,ko(t,s)),i=t}else t&&(Ko(e,t),i={default:1});if(o)for(const l in s)!Uo(l)&&i[l]==null&&delete s[l]};function Cn(e,t,n,r,s=!1){if(k(e)){e.forEach((p,y)=>Cn(p,t&&(k(t)?t[y]:t),n,r,s));return}if(St(r)&&!s)return;const o=r.shapeFlag&4?Vn(r.component):r.el,i=s?null:o,{i:l,r:c}=e,a=t&&t.r,f=l.refs===ne?l.refs={}:l.refs,h=l.setupState;if(a!=null&&a!==c&&(se(a)?(f[a]=null,J(h,a)&&(h[a]=null)):de(a)&&(a.value=null)),K(c))ze(c,l,12,[i,f]);else{const p=se(c),y=de(c);if(p||y){const w=()=>{if(e.f){const M=p?J(h,c)?h[c]:f[c]:c.value;s?k(M)&&wr(M,o):k(M)?M.includes(o)||M.push(o):p?(f[c]=[o],J(h,c)&&(h[c]=f[c])):(c.value=[o],e.k&&(f[e.k]=c.value))}else p?(f[c]=i,J(h,c)&&(h[c]=i)):y&&(c.value=i,e.k&&(f[e.k]=i))};i?(w.id=-1,me(w,n)):w()}}}const qo=Symbol("_vte"),ic=e=>e.__isTeleport,$t=e=>e&&(e.disabled||e.disabled===""),hs=e=>typeof SVGElement<"u"&&e instanceof SVGElement,ps=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,gr=(e,t)=>{const n=e&&e.to;return se(n)?t?t(n):null:n},lc={name:"Teleport",__isTeleport:!0,process(e,t,n,r,s,o,i,l,c,a){const{mc:f,pc:h,pbc:p,o:{insert:y,querySelector:w,createText:M,createComment:D}}=a,W=$t(t.props);let{shapeFlag:V,children:g,dynamicChildren:_}=t;if(e==null){const P=t.el=M(""),T=t.anchor=M(""),N=t.target=gr(t.props,w),$=t.targetStart=M(""),L=t.targetAnchor=M("");y(P,n,r),y(T,n,r),$[qo]=L,N&&(y($,N),y(L,N),i==="svg"||hs(N)?i="svg":(i==="mathml"||ps(N))&&(i="mathml"));const b=(F,S)=>{V&16&&f(g,F,S,s,o,i,l,c)};W?b(n,T):N&&b(N,L)}else{t.el=e.el,t.targetStart=e.targetStart;const P=t.anchor=e.anchor,T=t.target=e.target,N=t.targetAnchor=e.targetAnchor,$=$t(e.props),L=$?n:T,b=$?P:N;if(i==="svg"||hs(T)?i="svg":(i==="mathml"||ps(T))&&(i="mathml"),_?(p(e.dynamicChildren,_,L,s,o,i,l),jr(e,t,!0)):c||h(e,t,L,b,s,o,i,l,!1),W)$?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):sn(t,n,P,a,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const F=t.target=gr(t.props,w);F&&sn(t,F,null,a,0)}else $&&sn(t,T,N,a,1)}Go(t)},remove(e,t,n,{um:r,o:{remove:s}},o){const{shapeFlag:i,children:l,anchor:c,targetStart:a,targetAnchor:f,target:h,props:p}=e;if(h&&(s(a),s(f)),o&&s(c),i&16){const y=o||!$t(p);for(let w=0;w{gs||(console.error("Hydration completed but contains mismatches."),gs=!0)},ac=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",uc=e=>e.namespaceURI.includes("MathML"),on=e=>{if(ac(e))return"svg";if(uc(e))return"mathml"},ln=e=>e.nodeType===8;function fc(e){const{mt:t,p:n,o:{patchProp:r,createText:s,nextSibling:o,parentNode:i,remove:l,insert:c,createComment:a}}=e,f=(g,_)=>{if(!_.hasChildNodes()){n(null,g,_),bn(),_._vnode=g;return}h(_.firstChild,g,null,null,null),bn(),_._vnode=g},h=(g,_,P,T,N,$=!1)=>{$=$||!!_.dynamicChildren;const L=ln(g)&&g.data==="[",b=()=>M(g,_,P,T,N,L),{type:F,ref:S,shapeFlag:G,patchFlag:ee}=_;let re=g.nodeType;_.el=g,ee===-2&&($=!1,_.dynamicChildren=null);let U=null;switch(F){case dt:re!==3?_.children===""?(c(_.el=s(""),i(g),g),U=g):U=b():(g.data!==_.children&&(yt(),g.data=_.children),U=o(g));break;case ge:V(g)?(U=o(g),W(_.el=g.content.firstChild,g,P)):re!==8||L?U=b():U=o(g);break;case Ht:if(L&&(g=o(g),re=g.nodeType),re===1||re===3){U=g;const Y=!_.children.length;for(let j=0;j<_.staticCount;j++)Y&&(_.children+=U.nodeType===1?U.outerHTML:U.data),j===_.staticCount-1&&(_.anchor=U),U=o(U);return L?o(U):U}else b();break;case ye:L?U=w(g,_,P,T,N,$):U=b();break;default:if(G&1)(re!==1||_.type.toLowerCase()!==g.tagName.toLowerCase())&&!V(g)?U=b():U=p(g,_,P,T,N,$);else if(G&6){_.slotScopeIds=N;const Y=i(g);if(L?U=D(g):ln(g)&&g.data==="teleport start"?U=D(g,g.data,"teleport end"):U=o(g),t(_,Y,null,P,T,on(Y),$),St(_)){let j;L?(j=ie(ye),j.anchor=U?U.previousSibling:Y.lastChild):j=g.nodeType===3?oi(""):ie("div"),j.el=g,_.component.subTree=j}}else G&64?re!==8?U=b():U=_.type.hydrate(g,_,P,T,N,$,e,y):G&128&&(U=_.type.hydrate(g,_,P,T,on(i(g)),N,$,e,h))}return S!=null&&Cn(S,null,T,_),U},p=(g,_,P,T,N,$)=>{$=$||!!_.dynamicChildren;const{type:L,props:b,patchFlag:F,shapeFlag:S,dirs:G,transition:ee}=_,re=L==="input"||L==="option";if(re||F!==-1){G&&Ie(_,null,P,"created");let U=!1;if(V(g)){U=Yo(T,ee)&&P&&P.vnode.props&&P.vnode.props.appear;const j=g.content.firstChild;U&&ee.beforeEnter(j),W(j,g,P),_.el=g=j}if(S&16&&!(b&&(b.innerHTML||b.textContent))){let j=y(g.firstChild,_,g,P,T,N,$);for(;j;){yt();const $e=j;j=j.nextSibling,l($e)}}else S&8&&g.textContent!==_.children&&(yt(),g.textContent=_.children);if(b){if(re||!$||F&48)for(const j in b)(re&&(j.endsWith("value")||j==="indeterminate")||Wt(j)&&!Et(j)||j[0]===".")&&r(g,j,null,b[j],void 0,P);else if(b.onClick)r(g,"onClick",null,b.onClick,void 0,P);else if(F&4&&Ct(b.style))for(const j in b.style)b.style[j]}let Y;(Y=b&&b.onVnodeBeforeMount)&&Ce(Y,P,_),G&&Ie(_,null,P,"beforeMount"),((Y=b&&b.onVnodeMounted)||G||U)&&Zo(()=>{Y&&Ce(Y,P,_),U&&ee.enter(g),G&&Ie(_,null,P,"mounted")},T)}return g.nextSibling},y=(g,_,P,T,N,$,L)=>{L=L||!!_.dynamicChildren;const b=_.children,F=b.length;for(let S=0;S{const{slotScopeIds:L}=_;L&&(N=N?N.concat(L):L);const b=i(g),F=y(o(g),_,b,P,T,N,$);return F&&ln(F)&&F.data==="]"?o(_.anchor=F):(yt(),c(_.anchor=a("]"),b,F),F)},M=(g,_,P,T,N,$)=>{if(yt(),_.el=null,$){const F=D(g);for(;;){const S=o(g);if(S&&S!==F)l(S);else break}}const L=o(g),b=i(g);return l(g),n(null,_,b,L,P,T,on(b),N),L},D=(g,_="[",P="]")=>{let T=0;for(;g;)if(g=o(g),g&&ln(g)&&(g.data===_&&T++,g.data===P)){if(T===0)return o(g);T--}return g},W=(g,_,P)=>{const T=_.parentNode;T&&T.replaceChild(g,_);let N=P;for(;N;)N.vnode.el===_&&(N.vnode.el=N.subTree.el=g),N=N.parent},V=g=>g.nodeType===1&&g.tagName.toLowerCase()==="template";return[f,h]}const me=Zo;function dc(e){return zo(e)}function hc(e){return zo(e,fc)}function zo(e,t){const n=eo();n.__VUE__=!0;const{insert:r,remove:s,patchProp:o,createElement:i,createText:l,createComment:c,setText:a,setElementText:f,parentNode:h,nextSibling:p,setScopeId:y=Te,insertStaticContent:w}=e,M=(u,d,m,C=null,v=null,x=null,O=void 0,A=null,R=!!d.dynamicChildren)=>{if(u===d)return;u&&!at(u,d)&&(C=Xt(u),Me(u,v,x,!0),u=null),d.patchFlag===-2&&(R=!1,d.dynamicChildren=null);const{type:E,ref:I,shapeFlag:B}=d;switch(E){case dt:D(u,d,m,C);break;case ge:W(u,d,m,C);break;case Ht:u==null&&V(d,m,C,O);break;case ye:S(u,d,m,C,v,x,O,A,R);break;default:B&1?P(u,d,m,C,v,x,O,A,R):B&6?G(u,d,m,C,v,x,O,A,R):(B&64||B&128)&&E.process(u,d,m,C,v,x,O,A,R,gt)}I!=null&&v&&Cn(I,u&&u.ref,x,d||u,!d)},D=(u,d,m,C)=>{if(u==null)r(d.el=l(d.children),m,C);else{const v=d.el=u.el;d.children!==u.children&&a(v,d.children)}},W=(u,d,m,C)=>{u==null?r(d.el=c(d.children||""),m,C):d.el=u.el},V=(u,d,m,C)=>{[u.el,u.anchor]=w(u.children,d,m,C,u.el,u.anchor)},g=({el:u,anchor:d},m,C)=>{let v;for(;u&&u!==d;)v=p(u),r(u,m,C),u=v;r(d,m,C)},_=({el:u,anchor:d})=>{let m;for(;u&&u!==d;)m=p(u),s(u),u=m;s(d)},P=(u,d,m,C,v,x,O,A,R)=>{d.type==="svg"?O="svg":d.type==="math"&&(O="mathml"),u==null?T(d,m,C,v,x,O,A,R):L(u,d,v,x,O,A,R)},T=(u,d,m,C,v,x,O,A)=>{let R,E;const{props:I,shapeFlag:B,transition:H,dirs:q}=u;if(R=u.el=i(u.type,x,I&&I.is,I),B&8?f(R,u.children):B&16&&$(u.children,R,null,C,v,Yn(u,x),O,A),q&&Ie(u,null,C,"created"),N(R,u,u.scopeId,O,C),I){for(const te in I)te!=="value"&&!Et(te)&&o(R,te,null,I[te],x,C);"value"in I&&o(R,"value",null,I.value,x),(E=I.onVnodeBeforeMount)&&Ce(E,C,u)}q&&Ie(u,null,C,"beforeMount");const z=Yo(v,H);z&&H.beforeEnter(R),r(R,d,m),((E=I&&I.onVnodeMounted)||z||q)&&me(()=>{E&&Ce(E,C,u),z&&H.enter(R),q&&Ie(u,null,C,"mounted")},v)},N=(u,d,m,C,v)=>{if(m&&y(u,m),C)for(let x=0;x{for(let E=R;E{const A=d.el=u.el;let{patchFlag:R,dynamicChildren:E,dirs:I}=d;R|=u.patchFlag&16;const B=u.props||ne,H=d.props||ne;let q;if(m&&ot(m,!1),(q=H.onVnodeBeforeUpdate)&&Ce(q,m,d,u),I&&Ie(d,u,m,"beforeUpdate"),m&&ot(m,!0),(B.innerHTML&&H.innerHTML==null||B.textContent&&H.textContent==null)&&f(A,""),E?b(u.dynamicChildren,E,A,m,C,Yn(d,v),x):O||j(u,d,A,null,m,C,Yn(d,v),x,!1),R>0){if(R&16)F(A,B,H,m,v);else if(R&2&&B.class!==H.class&&o(A,"class",null,H.class,v),R&4&&o(A,"style",B.style,H.style,v),R&8){const z=d.dynamicProps;for(let te=0;te{q&&Ce(q,m,d,u),I&&Ie(d,u,m,"updated")},C)},b=(u,d,m,C,v,x,O)=>{for(let A=0;A{if(d!==m){if(d!==ne)for(const x in d)!Et(x)&&!(x in m)&&o(u,x,d[x],null,v,C);for(const x in m){if(Et(x))continue;const O=m[x],A=d[x];O!==A&&x!=="value"&&o(u,x,A,O,v,C)}"value"in m&&o(u,"value",d.value,m.value,v)}},S=(u,d,m,C,v,x,O,A,R)=>{const E=d.el=u?u.el:l(""),I=d.anchor=u?u.anchor:l("");let{patchFlag:B,dynamicChildren:H,slotScopeIds:q}=d;q&&(A=A?A.concat(q):q),u==null?(r(E,m,C),r(I,m,C),$(d.children||[],m,I,v,x,O,A,R)):B>0&&B&64&&H&&u.dynamicChildren?(b(u.dynamicChildren,H,m,v,x,O,A),(d.key!=null||v&&d===v.subTree)&&jr(u,d,!0)):j(u,d,m,I,v,x,O,A,R)},G=(u,d,m,C,v,x,O,A,R)=>{d.slotScopeIds=A,u==null?d.shapeFlag&512?v.ctx.activate(d,m,C,O,R):ee(d,m,C,v,x,O,R):re(u,d,R)},ee=(u,d,m,C,v,x,O)=>{const A=u.component=Mc(u,C,v);if(Gt(u)&&(A.ctx.renderer=gt),Pc(A,!1,O),A.asyncDep){if(v&&v.registerDep(A,U,O),!u.el){const R=A.subTree=ie(ge);W(null,R,d,m)}}else U(A,u,d,m,v,x,O)},re=(u,d,m)=>{const C=d.component=u.component;if(Ec(u,d,m))if(C.asyncDep&&!C.asyncResolved){Y(C,d,m);return}else C.next=d,Al(C.update),C.effect.dirty=!0,C.update();else d.el=u.el,C.vnode=d},U=(u,d,m,C,v,x,O)=>{const A=()=>{if(u.isMounted){let{next:I,bu:B,u:H,parent:q,vnode:z}=u;{const mt=Jo(u);if(mt){I&&(I.el=z.el,Y(u,I,O)),mt.asyncDep.then(()=>{u.isUnmounted||A()});return}}let te=I,Q;ot(u,!1),I?(I.el=z.el,Y(u,I,O)):I=z,B&&hn(B),(Q=I.props&&I.props.onVnodeBeforeUpdate)&&Ce(Q,q,I,z),ot(u,!0);const ce=Jn(u),Re=u.subTree;u.subTree=ce,M(Re,ce,h(Re.el),Xt(Re),u,v,x),I.el=ce.el,te===null&&Cc(u,ce.el),H&&me(H,v),(Q=I.props&&I.props.onVnodeUpdated)&&me(()=>Ce(Q,q,I,z),v)}else{let I;const{el:B,props:H}=d,{bm:q,m:z,parent:te}=u,Q=St(d);if(ot(u,!1),q&&hn(q),!Q&&(I=H&&H.onVnodeBeforeMount)&&Ce(I,te,d),ot(u,!0),B&&Kn){const ce=()=>{u.subTree=Jn(u),Kn(B,u.subTree,u,v,null)};Q?d.type.__asyncLoader().then(()=>!u.isUnmounted&&ce()):ce()}else{const ce=u.subTree=Jn(u);M(null,ce,m,C,u,v,x),d.el=ce.el}if(z&&me(z,v),!Q&&(I=H&&H.onVnodeMounted)){const ce=d;me(()=>Ce(I,te,ce),v)}(d.shapeFlag&256||te&&St(te.vnode)&&te.vnode.shapeFlag&256)&&u.a&&me(u.a,v),u.isMounted=!0,d=m=C=null}},R=u.effect=new Sr(A,Te,()=>Fn(E),u.scope),E=u.update=()=>{R.dirty&&R.run()};E.i=u,E.id=u.uid,ot(u,!0),E()},Y=(u,d,m)=>{d.component=u;const C=u.vnode.props;u.vnode=d,u.next=null,tc(u,d.props,C,m),oc(u,d.children,m),nt(),ns(u),rt()},j=(u,d,m,C,v,x,O,A,R=!1)=>{const E=u&&u.children,I=u?u.shapeFlag:0,B=d.children,{patchFlag:H,shapeFlag:q}=d;if(H>0){if(H&128){Jt(E,B,m,C,v,x,O,A,R);return}else if(H&256){$e(E,B,m,C,v,x,O,A,R);return}}q&8?(I&16&&Ot(E,v,x),B!==E&&f(m,B)):I&16?q&16?Jt(E,B,m,C,v,x,O,A,R):Ot(E,v,x,!0):(I&8&&f(m,""),q&16&&$(B,m,C,v,x,O,A,R))},$e=(u,d,m,C,v,x,O,A,R)=>{u=u||vt,d=d||vt;const E=u.length,I=d.length,B=Math.min(E,I);let H;for(H=0;HI?Ot(u,v,x,!0,!1,B):$(d,m,C,v,x,O,A,R,B)},Jt=(u,d,m,C,v,x,O,A,R)=>{let E=0;const I=d.length;let B=u.length-1,H=I-1;for(;E<=B&&E<=H;){const q=u[E],z=d[E]=R?We(d[E]):xe(d[E]);if(at(q,z))M(q,z,m,null,v,x,O,A,R);else break;E++}for(;E<=B&&E<=H;){const q=u[B],z=d[H]=R?We(d[H]):xe(d[H]);if(at(q,z))M(q,z,m,null,v,x,O,A,R);else break;B--,H--}if(E>B){if(E<=H){const q=H+1,z=qH)for(;E<=B;)Me(u[E],v,x,!0),E++;else{const q=E,z=E,te=new Map;for(E=z;E<=H;E++){const be=d[E]=R?We(d[E]):xe(d[E]);be.key!=null&&te.set(be.key,E)}let Q,ce=0;const Re=H-z+1;let mt=!1,Wr=0;const Lt=new Array(Re);for(E=0;E=Re){Me(be,v,x,!0);continue}let Pe;if(be.key!=null)Pe=te.get(be.key);else for(Q=z;Q<=H;Q++)if(Lt[Q-z]===0&&at(be,d[Q])){Pe=Q;break}Pe===void 0?Me(be,v,x,!0):(Lt[Pe-z]=E+1,Pe>=Wr?Wr=Pe:mt=!0,M(be,d[Pe],m,null,v,x,O,A,R),ce++)}const qr=mt?pc(Lt):vt;for(Q=qr.length-1,E=Re-1;E>=0;E--){const be=z+E,Pe=d[be],Gr=be+1{const{el:x,type:O,transition:A,children:R,shapeFlag:E}=u;if(E&6){st(u.component.subTree,d,m,C);return}if(E&128){u.suspense.move(d,m,C);return}if(E&64){O.move(u,d,m,gt);return}if(O===ye){r(x,d,m);for(let B=0;BA.enter(x),v);else{const{leave:B,delayLeave:H,afterLeave:q}=A,z=()=>r(x,d,m),te=()=>{B(x,()=>{z(),q&&q()})};H?H(x,z,te):te()}else r(x,d,m)},Me=(u,d,m,C=!1,v=!1)=>{const{type:x,props:O,ref:A,children:R,dynamicChildren:E,shapeFlag:I,patchFlag:B,dirs:H,cacheIndex:q}=u;if(B===-2&&(v=!1),A!=null&&Cn(A,null,m,u,!0),q!=null&&(d.renderCache[q]=void 0),I&256){d.ctx.deactivate(u);return}const z=I&1&&H,te=!St(u);let Q;if(te&&(Q=O&&O.onVnodeBeforeUnmount)&&Ce(Q,d,u),I&6)Pi(u.component,m,C);else{if(I&128){u.suspense.unmount(m,C);return}z&&Ie(u,null,d,"beforeUnmount"),I&64?u.type.remove(u,d,m,gt,C):E&&!E.hasOnce&&(x!==ye||B>0&&B&64)?Ot(E,d,m,!1,!0):(x===ye&&B&384||!v&&I&16)&&Ot(R,d,m),C&&kr(u)}(te&&(Q=O&&O.onVnodeUnmounted)||z)&&me(()=>{Q&&Ce(Q,d,u),z&&Ie(u,null,d,"unmounted")},m)},kr=u=>{const{type:d,el:m,anchor:C,transition:v}=u;if(d===ye){Mi(m,C);return}if(d===Ht){_(u);return}const x=()=>{s(m),v&&!v.persisted&&v.afterLeave&&v.afterLeave()};if(u.shapeFlag&1&&v&&!v.persisted){const{leave:O,delayLeave:A}=v,R=()=>O(m,x);A?A(u.el,x,R):R()}else x()},Mi=(u,d)=>{let m;for(;u!==d;)m=p(u),s(u),u=m;s(d)},Pi=(u,d,m)=>{const{bum:C,scope:v,update:x,subTree:O,um:A,m:R,a:E}=u;ms(R),ms(E),C&&hn(C),v.stop(),x&&(x.active=!1,Me(O,u,d,m)),A&&me(A,d),me(()=>{u.isUnmounted=!0},d),d&&d.pendingBranch&&!d.isUnmounted&&u.asyncDep&&!u.asyncResolved&&u.suspenseId===d.pendingId&&(d.deps--,d.deps===0&&d.resolve())},Ot=(u,d,m,C=!1,v=!1,x=0)=>{for(let O=x;O{if(u.shapeFlag&6)return Xt(u.component.subTree);if(u.shapeFlag&128)return u.suspense.next();const d=p(u.anchor||u.el),m=d&&d[qo];return m?p(m):d};let Un=!1;const Kr=(u,d,m)=>{u==null?d._vnode&&Me(d._vnode,null,null,!0):M(d._vnode||null,u,d,null,null,null,m),Un||(Un=!0,ns(),bn(),Un=!1),d._vnode=u},gt={p:M,um:Me,m:st,r:kr,mt:ee,mc:$,pc:j,pbc:b,n:Xt,o:e};let kn,Kn;return t&&([kn,Kn]=t(gt)),{render:Kr,hydrate:kn,createApp:Ql(Kr,kn)}}function Yn({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function ot({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function Yo(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function jr(e,t,n=!1){const r=e.children,s=t.children;if(k(r)&&k(s))for(let o=0;o>1,e[n[l]]0&&(t[r]=n[o-1]),n[o]=r)}}for(o=n.length,i=n[o-1];o-- >0;)n[o]=i,i=t[i];return n}function Jo(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Jo(t)}function ms(e){if(e)for(let t=0;tTt(gc);function Br(e,t){return jn(e,null,t)}function mu(e,t){return jn(e,null,{flush:"post"})}const cn={};function Ye(e,t,n){return jn(e,t,n)}function jn(e,t,{immediate:n,deep:r,flush:s,once:o,onTrack:i,onTrigger:l}=ne){if(t&&o){const T=t;t=(...N)=>{T(...N),P()}}const c=ae,a=T=>r===!0?T:qe(T,r===!1?1:void 0);let f,h=!1,p=!1;if(de(e)?(f=()=>e.value,h=At(e)):Ct(e)?(f=()=>a(e),h=!0):k(e)?(p=!0,h=e.some(T=>Ct(T)||At(T)),f=()=>e.map(T=>{if(de(T))return T.value;if(Ct(T))return a(T);if(K(T))return ze(T,c,2)})):K(e)?t?f=()=>ze(e,c,2):f=()=>(y&&y(),Ae(e,c,3,[w])):f=Te,t&&r){const T=f;f=()=>qe(T())}let y,w=T=>{y=g.onStop=()=>{ze(T,c,4),y=g.onStop=void 0}},M;if(Yt)if(w=Te,t?n&&Ae(t,c,3,[f(),p?[]:void 0,w]):f(),s==="sync"){const T=mc();M=T.__watcherHandles||(T.__watcherHandles=[])}else return Te;let D=p?new Array(e.length).fill(cn):cn;const W=()=>{if(!(!g.active||!g.dirty))if(t){const T=g.run();(r||h||(p?T.some((N,$)=>Qe(N,D[$])):Qe(T,D)))&&(y&&y(),Ae(t,c,3,[T,D===cn?void 0:p&&D[0]===cn?[]:D,w]),D=T)}else g.run()};W.allowRecurse=!!t;let V;s==="sync"?V=W:s==="post"?V=()=>me(W,c&&c.suspense):(W.pre=!0,c&&(W.id=c.uid),V=()=>Fn(W));const g=new Sr(f,Te,V),_=so(),P=()=>{g.stop(),_&&wr(_.effects,g)};return t?n?W():D=g.run():s==="post"?me(g.run.bind(g),c&&c.suspense):g.run(),M&&M.push(P),P}function yc(e,t,n){const r=this.proxy,s=se(e)?e.includes(".")?Xo(r,e):()=>r[e]:e.bind(r,r);let o;K(t)?o=t:(o=t.handler,n=t);const i=zt(this),l=jn(s,o.bind(r),n);return i(),l}function Xo(e,t){const n=t.split(".");return()=>{let r=e;for(let s=0;s{qe(r,t,n)});else if(Qs(e)){for(const r in e)qe(e[r],t,n);for(const r of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,r)&&qe(e[r],t,n)}return e}const _c=(e,t)=>t==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Oe(t)}Modifiers`]||e[`${tt(t)}Modifiers`];function bc(e,t,...n){if(e.isUnmounted)return;const r=e.vnode.props||ne;let s=n;const o=t.startsWith("update:"),i=o&&_c(r,t.slice(7));i&&(i.trim&&(s=n.map(f=>se(f)?f.trim():f)),i.number&&(s=n.map(or)));let l,c=r[l=dn(t)]||r[l=dn(Oe(t))];!c&&o&&(c=r[l=dn(tt(t))]),c&&Ae(c,e,6,s);const a=r[l+"Once"];if(a){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,Ae(a,e,6,s)}}function Qo(e,t,n=!1){const r=t.emitsCache,s=r.get(e);if(s!==void 0)return s;const o=e.emits;let i={},l=!1;if(!K(e)){const c=a=>{const f=Qo(a,t,!0);f&&(l=!0,fe(i,f))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!o&&!l?(Z(e)&&r.set(e,null),null):(k(o)?o.forEach(c=>i[c]=null):fe(i,o),Z(e)&&r.set(e,i),i)}function Bn(e,t){return!e||!Wt(t)?!1:(t=t.slice(2).replace(/Once$/,""),J(e,t[0].toLowerCase()+t.slice(1))||J(e,tt(t))||J(e,t))}function Jn(e){const{type:t,vnode:n,proxy:r,withProxy:s,propsOptions:[o],slots:i,attrs:l,emit:c,render:a,renderCache:f,props:h,data:p,setupState:y,ctx:w,inheritAttrs:M}=e,D=vn(e);let W,V;try{if(n.shapeFlag&4){const _=s||r,P=_;W=xe(a.call(P,_,f,h,y,p,w)),V=l}else{const _=t;W=xe(_.length>1?_(h,{attrs:l,slots:i,emit:c}):_(h,null)),V=t.props?l:vc(l)}}catch(_){jt.length=0,qt(_,e,1),W=ie(ge)}let g=W;if(V&&M!==!1){const _=Object.keys(V),{shapeFlag:P}=g;_.length&&P&7&&(o&&_.some(vr)&&(V=wc(V,o)),g=Ze(g,V,!1,!0))}return n.dirs&&(g=Ze(g,null,!1,!0),g.dirs=g.dirs?g.dirs.concat(n.dirs):n.dirs),n.transition&&(g.transition=n.transition),W=g,vn(D),W}const vc=e=>{let t;for(const n in e)(n==="class"||n==="style"||Wt(n))&&((t||(t={}))[n]=e[n]);return t},wc=(e,t)=>{const n={};for(const r in e)(!vr(r)||!(r.slice(9)in t))&&(n[r]=e[r]);return n};function Ec(e,t,n){const{props:r,children:s,component:o}=e,{props:i,children:l,patchFlag:c}=t,a=o.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return r?ys(r,i,a):!!i;if(c&8){const f=t.dynamicProps;for(let h=0;he.__isSuspense;function Zo(e,t){t&&t.pendingBranch?k(e)?t.effects.push(...e):t.effects.push(e):Rl(e)}const ye=Symbol.for("v-fgt"),dt=Symbol.for("v-txt"),ge=Symbol.for("v-cmt"),Ht=Symbol.for("v-stc"),jt=[];let we=null;function ei(e=!1){jt.push(we=e?null:[])}function Sc(){jt.pop(),we=jt[jt.length-1]||null}let kt=1;function _s(e){kt+=e,e<0&&we&&(we.hasOnce=!0)}function ti(e){return e.dynamicChildren=kt>0?we||vt:null,Sc(),kt>0&&we&&we.push(e),e}function yu(e,t,n,r,s,o){return ti(si(e,t,n,r,s,o,!0))}function ni(e,t,n,r,s){return ti(ie(e,t,n,r,s,!0))}function xn(e){return e?e.__v_isVNode===!0:!1}function at(e,t){return e.type===t.type&&e.key===t.key}const ri=({key:e})=>e??null,gn=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?se(e)||de(e)||K(e)?{i:ue,r:e,k:t,f:!!n}:e:null);function si(e,t=null,n=null,r=0,s=null,o=e===ye?0:1,i=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&ri(t),ref:t&&gn(t),scopeId:Nn,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:o,patchFlag:r,dynamicProps:s,dynamicChildren:null,appContext:null,ctx:ue};return l?(Dr(c,n),o&128&&e.normalize(c)):n&&(c.shapeFlag|=se(n)?8:16),kt>0&&!i&&we&&(c.patchFlag>0||o&6)&&c.patchFlag!==32&&we.push(c),c}const ie=Tc;function Tc(e,t=null,n=null,r=0,s=null,o=!1){if((!e||e===Po)&&(e=ge),xn(e)){const l=Ze(e,t,!0);return n&&Dr(l,n),kt>0&&!o&&we&&(l.shapeFlag&6?we[we.indexOf(e)]=l:we.push(l)),l.patchFlag=-2,l}if($c(e)&&(e=e.__vccOpts),t){t=Ac(t);let{class:l,style:c}=t;l&&!se(l)&&(t.class=xr(l)),Z(c)&&(yo(c)&&!k(c)&&(c=fe({},c)),t.style=Cr(c))}const i=se(e)?1:xc(e)?128:ic(e)?64:Z(e)?4:K(e)?2:0;return si(e,t,n,r,s,i,o,!0)}function Ac(e){return e?yo(e)||Bo(e)?fe({},e):e:null}function Ze(e,t,n=!1,r=!1){const{props:s,ref:o,patchFlag:i,children:l,transition:c}=e,a=t?Rc(s||{},t):s,f={__v_isVNode:!0,__v_skip:!0,type:e.type,props:a,key:a&&ri(a),ref:t&&t.ref?n&&o?k(o)?o.concat(gn(t)):[o,gn(t)]:gn(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==ye?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Ze(e.ssContent),ssFallback:e.ssFallback&&Ze(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&r&&wn(f,c.clone(f)),f}function oi(e=" ",t=0){return ie(dt,null,e,t)}function _u(e,t){const n=ie(Ht,null,e);return n.staticCount=t,n}function bu(e="",t=!1){return t?(ei(),ni(ge,null,e)):ie(ge,null,e)}function xe(e){return e==null||typeof e=="boolean"?ie(ge):k(e)?ie(ye,null,e.slice()):typeof e=="object"?We(e):ie(dt,null,String(e))}function We(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Ze(e)}function Dr(e,t){let n=0;const{shapeFlag:r}=e;if(t==null)t=null;else if(k(t))n=16;else if(typeof t=="object")if(r&65){const s=t.default;s&&(s._c&&(s._d=!1),Dr(e,s()),s._c&&(s._d=!0));return}else{n=32;const s=t._;!s&&!Bo(t)?t._ctx=ue:s===3&&ue&&(ue.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else K(t)?(t={default:t,_ctx:ue},n=32):(t=String(t),r&64?(n=16,t=[oi(t)]):n=8);e.children=t,e.shapeFlag|=n}function Rc(...e){const t={};for(let n=0;nae||ue;let Sn,mr;{const e=eo(),t=(n,r)=>{let s;return(s=e[n])||(s=e[n]=[]),s.push(r),o=>{s.length>1?s.forEach(i=>i(o)):s[0](o)}};Sn=t("__VUE_INSTANCE_SETTERS__",n=>ae=n),mr=t("__VUE_SSR_SETTERS__",n=>Yt=n)}const zt=e=>{const t=ae;return Sn(e),e.scope.on(),()=>{e.scope.off(),Sn(t)}},bs=()=>{ae&&ae.scope.off(),Sn(null)};function ii(e){return e.vnode.shapeFlag&4}let Yt=!1;function Pc(e,t=!1,n=!1){t&&mr(t);const{props:r,children:s}=e.vnode,o=ii(e);ec(e,r,o,t),sc(e,s,n);const i=o?Ic(e,t):void 0;return t&&mr(!1),i}function Ic(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Kl);const{setup:r}=n;if(r){const s=e.setupContext=r.length>1?ci(e):null,o=zt(e);nt();const i=ze(r,e,0,[e.props,s]);if(rt(),o(),Js(i)){if(i.then(bs,bs),t)return i.then(l=>{vs(e,l,t)}).catch(l=>{qt(l,e,0)});e.asyncDep=i}else vs(e,i,t)}else li(e,t)}function vs(e,t,n){K(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Z(t)&&(e.setupState=wo(t)),li(e,n)}let ws;function li(e,t,n){const r=e.type;if(!e.render){if(!t&&ws&&!r.render){const s=r.template||$r(e).template;if(s){const{isCustomElement:o,compilerOptions:i}=e.appContext.config,{delimiters:l,compilerOptions:c}=r,a=fe(fe({isCustomElement:o,delimiters:l},i),c);r.render=ws(s,a)}}e.render=r.render||Te}{const s=zt(e);nt();try{ql(e)}finally{rt(),s()}}}const Fc={get(e,t){return _e(e,"get",""),e[t]}};function ci(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,Fc),slots:e.slots,emit:e.emit,expose:t}}function Vn(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(wo(pn(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Ft)return Ft[n](e)},has(t,n){return n in t||n in Ft}})):e.proxy}function Nc(e,t=!0){return K(e)?e.displayName||e.name:e.name||t&&e.__name}function $c(e){return K(e)&&"__vccOpts"in e}const oe=(e,t)=>ml(e,t,Yt);function yr(e,t,n){const r=arguments.length;return r===2?Z(t)&&!k(t)?xn(t)?ie(e,null,[t]):ie(e,t):ie(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):r===3&&xn(n)&&(n=[n]),ie(e,t,n))}const Hc="3.4.33";/** +**/function ze(e,t,n,r){try{return r?e(...r):e()}catch(s){qt(s,t,n)}}function Ae(e,t,n,r){if(K(e)){const s=ze(e,t,n,r);return s&&Js(s)&&s.catch(o=>{qt(o,t,n)}),s}if(k(e)){const s=[];for(let o=0;o>>1,s=he[r],o=Ut(s);oFe&&he.splice(t,1)}function Rl(e){k(e)?xt.push(...e):(!ke||!ke.includes(e,e.allowRecurse?ct+1:ct))&&xt.push(e),Co()}function ns(e,t,n=Bt?Fe+1:0){for(;nUt(n)-Ut(r));if(xt.length=0,ke){ke.push(...t);return}for(ke=t,ct=0;cte.id==null?1/0:e.id,Ol=(e,t)=>{const n=Ut(e)-Ut(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function xo(e){ar=!1,Bt=!0,he.sort(Ol);try{for(Fe=0;Fe{r._d&&_s(-1);const o=vn(t);let i;try{i=e(...s)}finally{vn(o),r._d&&_s(1)}return i};return r._n=!0,r._c=!0,r._d=!0,r}function lu(e,t){if(ue===null)return e;const n=Bn(ue),r=e.dirs||(e.dirs=[]);for(let s=0;s{e.isMounted=!0}),Lo(()=>{e.isUnmounting=!0}),e}const Ee=[Function,Array],So={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Ee,onEnter:Ee,onAfterEnter:Ee,onEnterCancelled:Ee,onBeforeLeave:Ee,onLeave:Ee,onAfterLeave:Ee,onLeaveCancelled:Ee,onBeforeAppear:Ee,onAppear:Ee,onAfterAppear:Ee,onAppearCancelled:Ee},To=e=>{const t=e.subTree;return t.component?To(t.component):t},Pl={name:"BaseTransition",props:So,setup(e,{slots:t}){const n=Vn(),r=Ml();return()=>{const s=t.default&&Ro(t.default(),!0);if(!s||!s.length)return;let o=s[0];if(s.length>1){for(const p of s)if(p.type!==ge){o=p;break}}const i=X(e),{mode:l}=i;if(r.isLeaving)return qn(o);const c=rs(o);if(!c)return qn(o);let a=ur(c,i,r,n,p=>a=p);wn(c,a);const f=n.subTree,h=f&&rs(f);if(h&&h.type!==ge&&!at(c,h)&&To(n).type!==ge){const p=ur(h,i,r,n);if(wn(h,p),l==="out-in"&&c.type!==ge)return r.isLeaving=!0,p.afterLeave=()=>{r.isLeaving=!1,n.update.active!==!1&&(n.effect.dirty=!0,n.update())},qn(o);l==="in-out"&&c.type!==ge&&(p.delayLeave=(y,w,M)=>{const V=Ao(r,h);V[String(h.key)]=h,y[Ke]=()=>{w(),y[Ke]=void 0,delete a.delayedLeave},a.delayedLeave=M})}return o}}},Il=Pl;function Ao(e,t){const{leavingVNodes:n}=e;let r=n.get(t.type);return r||(r=Object.create(null),n.set(t.type,r)),r}function ur(e,t,n,r,s){const{appear:o,mode:i,persisted:l=!1,onBeforeEnter:c,onEnter:a,onAfterEnter:f,onEnterCancelled:h,onBeforeLeave:p,onLeave:y,onAfterLeave:w,onLeaveCancelled:M,onBeforeAppear:V,onAppear:W,onAfterAppear:B,onAppearCancelled:g}=t,_=String(e.key),P=Ao(n,e),T=(L,b)=>{L&&Ae(L,r,9,b)},N=(L,b)=>{const F=b[1];T(L,b),k(L)?L.every(S=>S.length<=1)&&F():L.length<=1&&F()},$={mode:i,persisted:l,beforeEnter(L){let b=c;if(!n.isMounted)if(o)b=V||c;else return;L[Ke]&&L[Ke](!0);const F=P[_];F&&at(e,F)&&F.el[Ke]&&F.el[Ke](),T(b,[L])},enter(L){let b=a,F=f,S=h;if(!n.isMounted)if(o)b=W||a,F=B||f,S=g||h;else return;let G=!1;const ee=L[rn]=re=>{G||(G=!0,re?T(S,[L]):T(F,[L]),$.delayedLeave&&$.delayedLeave(),L[rn]=void 0)};b?N(b,[L,ee]):ee()},leave(L,b){const F=String(e.key);if(L[rn]&&L[rn](!0),n.isUnmounting)return b();T(p,[L]);let S=!1;const G=L[Ke]=ee=>{S||(S=!0,b(),ee?T(M,[L]):T(w,[L]),L[Ke]=void 0,P[F]===e&&delete P[F])};P[F]=e,y?N(y,[L,G]):G()},clone(L){const b=ur(L,t,n,r,s);return s&&s(b),b}};return $}function qn(e){if(Gt(e))return e=Ze(e),e.children=null,e}function rs(e){if(!Gt(e))return e;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&K(n.default))return n.default()}}function wn(e,t){e.shapeFlag&6&&e.component?wn(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Ro(e,t=!1,n){let r=[],s=0;for(let o=0;o1)for(let o=0;o!!e.type.__asyncLoader;/*! #__NO_SIDE_EFFECTS__ */function cu(e){K(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:r,delay:s=200,timeout:o,suspensible:i=!0,onError:l}=e;let c=null,a,f=0;const h=()=>(f++,c=null,p()),p=()=>{let y;return c||(y=c=t().catch(w=>{if(w=w instanceof Error?w:new Error(String(w)),l)return new Promise((M,V)=>{l(w,()=>M(h()),()=>V(w),f+1)});throw w}).then(w=>y!==c&&c?c:(w&&(w.__esModule||w[Symbol.toStringTag]==="Module")&&(w=w.default),a=w,w)))};return Nr({name:"AsyncComponentWrapper",__asyncLoader:p,get __asyncResolved(){return a},setup(){const y=ae;if(a)return()=>Gn(a,y);const w=B=>{c=null,qt(B,y,13,!r)};if(i&&y.suspense||Yt)return p().then(B=>()=>Gn(B,y)).catch(B=>(w(B),()=>r?ie(r,{error:B}):null));const M=le(!1),V=le(),W=le(!!s);return s&&setTimeout(()=>{W.value=!1},s),o!=null&&setTimeout(()=>{if(!M.value&&!V.value){const B=new Error(`Async component timed out after ${o}ms.`);w(B),V.value=B}},o),p().then(()=>{M.value=!0,y.parent&&Gt(y.parent.vnode)&&(y.parent.effect.dirty=!0,Fn(y.parent.update))}).catch(B=>{w(B),V.value=B}),()=>{if(M.value&&a)return Gn(a,y);if(V.value&&r)return ie(r,{error:V.value});if(n&&!W.value)return ie(n)}}})}function Gn(e,t){const{ref:n,props:r,children:s,ce:o}=t.vnode,i=ie(e,r,s);return i.ref=n,i.ce=o,delete t.vnode.ce,i}const Gt=e=>e.type.__isKeepAlive;function Fl(e,t){Oo(e,"a",t)}function Nl(e,t){Oo(e,"da",t)}function Oo(e,t,n=ae){const r=e.__wdc||(e.__wdc=()=>{let s=n;for(;s;){if(s.isDeactivated)return;s=s.parent}return e()});if($n(t,r,n),n){let s=n.parent;for(;s&&s.parent;)Gt(s.parent.vnode)&&$l(r,t,n,s),s=s.parent}}function $l(e,t,n,r){const s=$n(t,e,r,!0);Hn(()=>{wr(r[t],s)},n)}function $n(e,t,n=ae,r=!1){if(n){const s=n[e]||(n[e]=[]),o=t.__weh||(t.__weh=(...i)=>{nt();const l=zt(n),c=Ae(t,n,e,i);return l(),rt(),c});return r?s.unshift(o):s.push(o),o}}const De=e=>(t,n=ae)=>{(!Yt||e==="sp")&&$n(e,(...r)=>t(...r),n)},Hl=De("bm"),Rt=De("m"),jl=De("bu"),Dl=De("u"),Lo=De("bum"),Hn=De("um"),Vl=De("sp"),Bl=De("rtg"),Ul=De("rtc");function kl(e,t=ae){$n("ec",e,t)}const Mo="components";function au(e,t){return Io(Mo,e,!0,t)||e}const Po=Symbol.for("v-ndc");function uu(e){return se(e)?Io(Mo,e,!1)||e:e||Po}function Io(e,t,n=!0,r=!1){const s=ue||ae;if(s){const o=s.type;{const l=Nc(o,!1);if(l&&(l===t||l===Oe(t)||l===On(Oe(t))))return o}const i=ss(s[e]||o[e],t)||ss(s.appContext[e],t);return!i&&r?o:i}}function ss(e,t){return e&&(e[t]||e[Oe(t)]||e[On(Oe(t))])}function fu(e,t,n,r){let s;const o=n;if(k(e)||se(e)){s=new Array(e.length);for(let i=0,l=e.length;it(i,l,void 0,o));else{const i=Object.keys(e);s=new Array(i.length);for(let l=0,c=i.length;lxn(t)?!(t.type===ge||t.type===ye&&!Fo(t.children)):!0)?e:null}function hu(e,t){const n={};for(const r in e)n[/[A-Z]/.test(r)?`on:${r}`:dn(r)]=e[r];return n}const fr=e=>e?ii(e)?Bn(e):fr(e.parent):null,Ft=fe(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>fr(e.parent),$root:e=>fr(e.root),$emit:e=>e.emit,$options:e=>$r(e),$forceUpdate:e=>e.f||(e.f=()=>{e.effect.dirty=!0,Fn(e.update)}),$nextTick:e=>e.n||(e.n=In.bind(e.proxy)),$watch:e=>yc.bind(e)}),zn=(e,t)=>e!==ne&&!e.__isScriptSetup&&J(e,t),Kl={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:r,data:s,props:o,accessCache:i,type:l,appContext:c}=e;let a;if(t[0]!=="$"){const y=i[t];if(y!==void 0)switch(y){case 1:return r[t];case 2:return s[t];case 4:return n[t];case 3:return o[t]}else{if(zn(r,t))return i[t]=1,r[t];if(s!==ne&&J(s,t))return i[t]=2,s[t];if((a=e.propsOptions[0])&&J(a,t))return i[t]=3,o[t];if(n!==ne&&J(n,t))return i[t]=4,n[t];dr&&(i[t]=0)}}const f=Ft[t];let h,p;if(f)return t==="$attrs"&&_e(e.attrs,"get",""),f(e);if((h=l.__cssModules)&&(h=h[t]))return h;if(n!==ne&&J(n,t))return i[t]=4,n[t];if(p=c.config.globalProperties,J(p,t))return p[t]},set({_:e},t,n){const{data:r,setupState:s,ctx:o}=e;return zn(s,t)?(s[t]=n,!0):r!==ne&&J(r,t)?(r[t]=n,!0):J(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(o[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:r,appContext:s,propsOptions:o}},i){let l;return!!n[i]||e!==ne&&J(e,i)||zn(t,i)||(l=o[0])&&J(l,i)||J(r,i)||J(Ft,i)||J(s.config.globalProperties,i)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:J(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function pu(){return Wl().slots}function Wl(){const e=Vn();return e.setupContext||(e.setupContext=ci(e))}function os(e){return k(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let dr=!0;function ql(e){const t=$r(e),n=e.proxy,r=e.ctx;dr=!1,t.beforeCreate&&is(t.beforeCreate,e,"bc");const{data:s,computed:o,methods:i,watch:l,provide:c,inject:a,created:f,beforeMount:h,mounted:p,beforeUpdate:y,updated:w,activated:M,deactivated:V,beforeDestroy:W,beforeUnmount:B,destroyed:g,unmounted:_,render:P,renderTracked:T,renderTriggered:N,errorCaptured:$,serverPrefetch:L,expose:b,inheritAttrs:F,components:S,directives:G,filters:ee}=t;if(a&&Gl(a,r,null),i)for(const Y in i){const j=i[Y];K(j)&&(r[Y]=j.bind(n))}if(s){const Y=s.call(n,n);Z(Y)&&(e.data=Mn(Y))}if(dr=!0,o)for(const Y in o){const j=o[Y],$e=K(j)?j.bind(n,n):K(j.get)?j.get.bind(n,n):Te,Jt=!K(j)&&K(j.set)?j.set.bind(n):Te,st=oe({get:$e,set:Jt});Object.defineProperty(r,Y,{enumerable:!0,configurable:!0,get:()=>st.value,set:Me=>st.value=Me})}if(l)for(const Y in l)No(l[Y],r,n,Y);if(c){const Y=K(c)?c.call(n):c;Reflect.ownKeys(Y).forEach(j=>{Zl(j,Y[j])})}f&&is(f,e,"c");function U(Y,j){k(j)?j.forEach($e=>Y($e.bind(n))):j&&Y(j.bind(n))}if(U(Hl,h),U(Rt,p),U(jl,y),U(Dl,w),U(Fl,M),U(Nl,V),U(kl,$),U(Ul,T),U(Bl,N),U(Lo,B),U(Hn,_),U(Vl,L),k(b))if(b.length){const Y=e.exposed||(e.exposed={});b.forEach(j=>{Object.defineProperty(Y,j,{get:()=>n[j],set:$e=>n[j]=$e})})}else e.exposed||(e.exposed={});P&&e.render===Te&&(e.render=P),F!=null&&(e.inheritAttrs=F),S&&(e.components=S),G&&(e.directives=G)}function Gl(e,t,n=Te){k(e)&&(e=hr(e));for(const r in e){const s=e[r];let o;Z(s)?"default"in s?o=Tt(s.from||r,s.default,!0):o=Tt(s.from||r):o=Tt(s),de(o)?Object.defineProperty(t,r,{enumerable:!0,configurable:!0,get:()=>o.value,set:i=>o.value=i}):t[r]=o}}function is(e,t,n){Ae(k(e)?e.map(r=>r.bind(t.proxy)):e.bind(t.proxy),t,n)}function No(e,t,n,r){const s=r.includes(".")?Xo(n,r):()=>n[r];if(se(e)){const o=t[e];K(o)&&Ye(s,o)}else if(K(e))Ye(s,e.bind(n));else if(Z(e))if(k(e))e.forEach(o=>No(o,t,n,r));else{const o=K(e.handler)?e.handler.bind(n):t[e.handler];K(o)&&Ye(s,o,e)}}function $r(e){const t=e.type,{mixins:n,extends:r}=t,{mixins:s,optionsCache:o,config:{optionMergeStrategies:i}}=e.appContext,l=o.get(t);let c;return l?c=l:!s.length&&!n&&!r?c=t:(c={},s.length&&s.forEach(a=>En(c,a,i,!0)),En(c,t,i)),Z(t)&&o.set(t,c),c}function En(e,t,n,r=!1){const{mixins:s,extends:o}=t;o&&En(e,o,n,!0),s&&s.forEach(i=>En(e,i,n,!0));for(const i in t)if(!(r&&i==="expose")){const l=zl[i]||n&&n[i];e[i]=l?l(e[i],t[i]):t[i]}return e}const zl={data:ls,props:cs,emits:cs,methods:Pt,computed:Pt,beforeCreate:pe,created:pe,beforeMount:pe,mounted:pe,beforeUpdate:pe,updated:pe,beforeDestroy:pe,beforeUnmount:pe,destroyed:pe,unmounted:pe,activated:pe,deactivated:pe,errorCaptured:pe,serverPrefetch:pe,components:Pt,directives:Pt,watch:Jl,provide:ls,inject:Yl};function ls(e,t){return t?e?function(){return fe(K(e)?e.call(this,this):e,K(t)?t.call(this,this):t)}:t:e}function Yl(e,t){return Pt(hr(e),hr(t))}function hr(e){if(k(e)){const t={};for(let n=0;n1)return n&&K(t)?t.call(r&&r.proxy):t}}const Ho={},jo=()=>Object.create(Ho),Do=e=>Object.getPrototypeOf(e)===Ho;function ec(e,t,n,r=!1){const s={},o=jo();e.propsDefaults=Object.create(null),Vo(e,t,s,o);for(const i in e.propsOptions[0])i in s||(s[i]=void 0);n?e.props=r?s:gl(s):e.type.props?e.props=s:e.props=o,e.attrs=o}function tc(e,t,n,r){const{props:s,attrs:o,vnode:{patchFlag:i}}=e,l=X(s),[c]=e.propsOptions;let a=!1;if((r||i>0)&&!(i&16)){if(i&8){const f=e.vnode.dynamicProps;for(let h=0;h{c=!0;const[p,y]=Bo(h,t,!0);fe(i,p),y&&l.push(...y)};!n&&t.mixins.length&&t.mixins.forEach(f),e.extends&&f(e.extends),e.mixins&&e.mixins.forEach(f)}if(!o&&!c)return Z(e)&&r.set(e,vt),vt;if(k(o))for(let f=0;f-1,y[1]=M<0||w-1||J(y,"default"))&&l.push(h)}}}const a=[i,l];return Z(e)&&r.set(e,a),a}function as(e){return e[0]!=="$"&&!Et(e)}function us(e){return e===null?"null":typeof e=="function"?e.name||"":typeof e=="object"&&e.constructor&&e.constructor.name||""}function fs(e,t){return us(e)===us(t)}function ds(e,t){return k(t)?t.findIndex(n=>fs(n,e)):K(t)&&fs(t,e)?0:-1}const Uo=e=>e[0]==="_"||e==="$stable",Hr=e=>k(e)?e.map(xe):[xe(e)],rc=(e,t,n)=>{if(t._n)return t;const r=Ll((...s)=>Hr(t(...s)),n);return r._c=!1,r},ko=(e,t,n)=>{const r=e._ctx;for(const s in e){if(Uo(s))continue;const o=e[s];if(K(o))t[s]=rc(s,o,r);else if(o!=null){const i=Hr(o);t[s]=()=>i}}},Ko=(e,t)=>{const n=Hr(t);e.slots.default=()=>n},Wo=(e,t,n)=>{for(const r in t)(n||r!=="_")&&(e[r]=t[r])},sc=(e,t,n)=>{const r=e.slots=jo();if(e.vnode.shapeFlag&32){const s=t._;s?(Wo(r,t,n),n&&Zs(r,"_",s,!0)):ko(t,r)}else t&&Ko(e,t)},oc=(e,t,n)=>{const{vnode:r,slots:s}=e;let o=!0,i=ne;if(r.shapeFlag&32){const l=t._;l?n&&l===1?o=!1:Wo(s,t,n):(o=!t.$stable,ko(t,s)),i=t}else t&&(Ko(e,t),i={default:1});if(o)for(const l in s)!Uo(l)&&i[l]==null&&delete s[l]};function Cn(e,t,n,r,s=!1){if(k(e)){e.forEach((p,y)=>Cn(p,t&&(k(t)?t[y]:t),n,r,s));return}if(St(r)&&!s)return;const o=r.shapeFlag&4?Bn(r.component):r.el,i=s?null:o,{i:l,r:c}=e,a=t&&t.r,f=l.refs===ne?l.refs={}:l.refs,h=l.setupState;if(a!=null&&a!==c&&(se(a)?(f[a]=null,J(h,a)&&(h[a]=null)):de(a)&&(a.value=null)),K(c))ze(c,l,12,[i,f]);else{const p=se(c),y=de(c);if(p||y){const w=()=>{if(e.f){const M=p?J(h,c)?h[c]:f[c]:c.value;s?k(M)&&wr(M,o):k(M)?M.includes(o)||M.push(o):p?(f[c]=[o],J(h,c)&&(h[c]=f[c])):(c.value=[o],e.k&&(f[e.k]=c.value))}else p?(f[c]=i,J(h,c)&&(h[c]=i)):y&&(c.value=i,e.k&&(f[e.k]=i))};i?(w.id=-1,me(w,n)):w()}}}const qo=Symbol("_vte"),ic=e=>e.__isTeleport,$t=e=>e&&(e.disabled||e.disabled===""),hs=e=>typeof SVGElement<"u"&&e instanceof SVGElement,ps=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,gr=(e,t)=>{const n=e&&e.to;return se(n)?t?t(n):null:n},lc={name:"Teleport",__isTeleport:!0,process(e,t,n,r,s,o,i,l,c,a){const{mc:f,pc:h,pbc:p,o:{insert:y,querySelector:w,createText:M,createComment:V}}=a,W=$t(t.props);let{shapeFlag:B,children:g,dynamicChildren:_}=t;if(e==null){const P=t.el=M(""),T=t.anchor=M(""),N=t.target=gr(t.props,w),$=t.targetStart=M(""),L=t.targetAnchor=M("");y(P,n,r),y(T,n,r),$[qo]=L,N&&(y($,N),y(L,N),i==="svg"||hs(N)?i="svg":(i==="mathml"||ps(N))&&(i="mathml"));const b=(F,S)=>{B&16&&f(g,F,S,s,o,i,l,c)};W?b(n,T):N&&b(N,L)}else{t.el=e.el,t.targetStart=e.targetStart;const P=t.anchor=e.anchor,T=t.target=e.target,N=t.targetAnchor=e.targetAnchor,$=$t(e.props),L=$?n:T,b=$?P:N;if(i==="svg"||hs(T)?i="svg":(i==="mathml"||ps(T))&&(i="mathml"),_?(p(e.dynamicChildren,_,L,s,o,i,l),jr(e,t,!0)):c||h(e,t,L,b,s,o,i,l,!1),W)$?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):sn(t,n,P,a,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const F=t.target=gr(t.props,w);F&&sn(t,F,null,a,0)}else $&&sn(t,T,N,a,1)}Go(t)},remove(e,t,n,{um:r,o:{remove:s}},o){const{shapeFlag:i,children:l,anchor:c,targetStart:a,targetAnchor:f,target:h,props:p}=e;if(h&&(s(a),s(f)),o&&s(c),i&16){const y=o||!$t(p);for(let w=0;w{gs||(console.error("Hydration completed but contains mismatches."),gs=!0)},ac=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",uc=e=>e.namespaceURI.includes("MathML"),on=e=>{if(ac(e))return"svg";if(uc(e))return"mathml"},ln=e=>e.nodeType===8;function fc(e){const{mt:t,p:n,o:{patchProp:r,createText:s,nextSibling:o,parentNode:i,remove:l,insert:c,createComment:a}}=e,f=(g,_)=>{if(!_.hasChildNodes()){n(null,g,_),bn(),_._vnode=g;return}h(_.firstChild,g,null,null,null),bn(),_._vnode=g},h=(g,_,P,T,N,$=!1)=>{$=$||!!_.dynamicChildren;const L=ln(g)&&g.data==="[",b=()=>M(g,_,P,T,N,L),{type:F,ref:S,shapeFlag:G,patchFlag:ee}=_;let re=g.nodeType;_.el=g,ee===-2&&($=!1,_.dynamicChildren=null);let U=null;switch(F){case dt:re!==3?_.children===""?(c(_.el=s(""),i(g),g),U=g):U=b():(g.data!==_.children&&(yt(),g.data=_.children),U=o(g));break;case ge:B(g)?(U=o(g),W(_.el=g.content.firstChild,g,P)):re!==8||L?U=b():U=o(g);break;case Ht:if(L&&(g=o(g),re=g.nodeType),re===1||re===3){U=g;const Y=!_.children.length;for(let j=0;j<_.staticCount;j++)Y&&(_.children+=U.nodeType===1?U.outerHTML:U.data),j===_.staticCount-1&&(_.anchor=U),U=o(U);return L?o(U):U}else b();break;case ye:L?U=w(g,_,P,T,N,$):U=b();break;default:if(G&1)(re!==1||_.type.toLowerCase()!==g.tagName.toLowerCase())&&!B(g)?U=b():U=p(g,_,P,T,N,$);else if(G&6){_.slotScopeIds=N;const Y=i(g);if(L?U=V(g):ln(g)&&g.data==="teleport start"?U=V(g,g.data,"teleport end"):U=o(g),t(_,Y,null,P,T,on(Y),$),St(_)){let j;L?(j=ie(ye),j.anchor=U?U.previousSibling:Y.lastChild):j=g.nodeType===3?oi(""):ie("div"),j.el=g,_.component.subTree=j}}else G&64?re!==8?U=b():U=_.type.hydrate(g,_,P,T,N,$,e,y):G&128&&(U=_.type.hydrate(g,_,P,T,on(i(g)),N,$,e,h))}return S!=null&&Cn(S,null,T,_),U},p=(g,_,P,T,N,$)=>{$=$||!!_.dynamicChildren;const{type:L,props:b,patchFlag:F,shapeFlag:S,dirs:G,transition:ee}=_,re=L==="input"||L==="option";if(re||F!==-1){G&&Ie(_,null,P,"created");let U=!1;if(B(g)){U=Yo(T,ee)&&P&&P.vnode.props&&P.vnode.props.appear;const j=g.content.firstChild;U&&ee.beforeEnter(j),W(j,g,P),_.el=g=j}if(S&16&&!(b&&(b.innerHTML||b.textContent))){let j=y(g.firstChild,_,g,P,T,N,$);for(;j;){yt();const $e=j;j=j.nextSibling,l($e)}}else S&8&&g.textContent!==_.children&&(yt(),g.textContent=_.children);if(b){if(re||!$||F&48)for(const j in b)(re&&(j.endsWith("value")||j==="indeterminate")||Wt(j)&&!Et(j)||j[0]===".")&&r(g,j,null,b[j],void 0,P);else if(b.onClick)r(g,"onClick",null,b.onClick,void 0,P);else if(F&4&&Ct(b.style))for(const j in b.style)b.style[j]}let Y;(Y=b&&b.onVnodeBeforeMount)&&Ce(Y,P,_),G&&Ie(_,null,P,"beforeMount"),((Y=b&&b.onVnodeMounted)||G||U)&&Zo(()=>{Y&&Ce(Y,P,_),U&&ee.enter(g),G&&Ie(_,null,P,"mounted")},T)}return g.nextSibling},y=(g,_,P,T,N,$,L)=>{L=L||!!_.dynamicChildren;const b=_.children,F=b.length;for(let S=0;S{const{slotScopeIds:L}=_;L&&(N=N?N.concat(L):L);const b=i(g),F=y(o(g),_,b,P,T,N,$);return F&&ln(F)&&F.data==="]"?o(_.anchor=F):(yt(),c(_.anchor=a("]"),b,F),F)},M=(g,_,P,T,N,$)=>{if(yt(),_.el=null,$){const F=V(g);for(;;){const S=o(g);if(S&&S!==F)l(S);else break}}const L=o(g),b=i(g);return l(g),n(null,_,b,L,P,T,on(b),N),L},V=(g,_="[",P="]")=>{let T=0;for(;g;)if(g=o(g),g&&ln(g)&&(g.data===_&&T++,g.data===P)){if(T===0)return o(g);T--}return g},W=(g,_,P)=>{const T=_.parentNode;T&&T.replaceChild(g,_);let N=P;for(;N;)N.vnode.el===_&&(N.vnode.el=N.subTree.el=g),N=N.parent},B=g=>g.nodeType===1&&g.tagName.toLowerCase()==="template";return[f,h]}const me=Zo;function dc(e){return zo(e)}function hc(e){return zo(e,fc)}function zo(e,t){const n=eo();n.__VUE__=!0;const{insert:r,remove:s,patchProp:o,createElement:i,createText:l,createComment:c,setText:a,setElementText:f,parentNode:h,nextSibling:p,setScopeId:y=Te,insertStaticContent:w}=e,M=(u,d,m,C=null,v=null,x=null,O=void 0,A=null,R=!!d.dynamicChildren)=>{if(u===d)return;u&&!at(u,d)&&(C=Xt(u),Me(u,v,x,!0),u=null),d.patchFlag===-2&&(R=!1,d.dynamicChildren=null);const{type:E,ref:I,shapeFlag:D}=d;switch(E){case dt:V(u,d,m,C);break;case ge:W(u,d,m,C);break;case Ht:u==null&&B(d,m,C,O);break;case ye:S(u,d,m,C,v,x,O,A,R);break;default:D&1?P(u,d,m,C,v,x,O,A,R):D&6?G(u,d,m,C,v,x,O,A,R):(D&64||D&128)&&E.process(u,d,m,C,v,x,O,A,R,gt)}I!=null&&v&&Cn(I,u&&u.ref,x,d||u,!d)},V=(u,d,m,C)=>{if(u==null)r(d.el=l(d.children),m,C);else{const v=d.el=u.el;d.children!==u.children&&a(v,d.children)}},W=(u,d,m,C)=>{u==null?r(d.el=c(d.children||""),m,C):d.el=u.el},B=(u,d,m,C)=>{[u.el,u.anchor]=w(u.children,d,m,C,u.el,u.anchor)},g=({el:u,anchor:d},m,C)=>{let v;for(;u&&u!==d;)v=p(u),r(u,m,C),u=v;r(d,m,C)},_=({el:u,anchor:d})=>{let m;for(;u&&u!==d;)m=p(u),s(u),u=m;s(d)},P=(u,d,m,C,v,x,O,A,R)=>{d.type==="svg"?O="svg":d.type==="math"&&(O="mathml"),u==null?T(d,m,C,v,x,O,A,R):L(u,d,v,x,O,A,R)},T=(u,d,m,C,v,x,O,A)=>{let R,E;const{props:I,shapeFlag:D,transition:H,dirs:q}=u;if(R=u.el=i(u.type,x,I&&I.is,I),D&8?f(R,u.children):D&16&&$(u.children,R,null,C,v,Yn(u,x),O,A),q&&Ie(u,null,C,"created"),N(R,u,u.scopeId,O,C),I){for(const te in I)te!=="value"&&!Et(te)&&o(R,te,null,I[te],x,C);"value"in I&&o(R,"value",null,I.value,x),(E=I.onVnodeBeforeMount)&&Ce(E,C,u)}q&&Ie(u,null,C,"beforeMount");const z=Yo(v,H);z&&H.beforeEnter(R),r(R,d,m),((E=I&&I.onVnodeMounted)||z||q)&&me(()=>{E&&Ce(E,C,u),z&&H.enter(R),q&&Ie(u,null,C,"mounted")},v)},N=(u,d,m,C,v)=>{if(m&&y(u,m),C)for(let x=0;x{for(let E=R;E{const A=d.el=u.el;let{patchFlag:R,dynamicChildren:E,dirs:I}=d;R|=u.patchFlag&16;const D=u.props||ne,H=d.props||ne;let q;if(m&&ot(m,!1),(q=H.onVnodeBeforeUpdate)&&Ce(q,m,d,u),I&&Ie(d,u,m,"beforeUpdate"),m&&ot(m,!0),(D.innerHTML&&H.innerHTML==null||D.textContent&&H.textContent==null)&&f(A,""),E?b(u.dynamicChildren,E,A,m,C,Yn(d,v),x):O||j(u,d,A,null,m,C,Yn(d,v),x,!1),R>0){if(R&16)F(A,D,H,m,v);else if(R&2&&D.class!==H.class&&o(A,"class",null,H.class,v),R&4&&o(A,"style",D.style,H.style,v),R&8){const z=d.dynamicProps;for(let te=0;te{q&&Ce(q,m,d,u),I&&Ie(d,u,m,"updated")},C)},b=(u,d,m,C,v,x,O)=>{for(let A=0;A{if(d!==m){if(d!==ne)for(const x in d)!Et(x)&&!(x in m)&&o(u,x,d[x],null,v,C);for(const x in m){if(Et(x))continue;const O=m[x],A=d[x];O!==A&&x!=="value"&&o(u,x,A,O,v,C)}"value"in m&&o(u,"value",d.value,m.value,v)}},S=(u,d,m,C,v,x,O,A,R)=>{const E=d.el=u?u.el:l(""),I=d.anchor=u?u.anchor:l("");let{patchFlag:D,dynamicChildren:H,slotScopeIds:q}=d;q&&(A=A?A.concat(q):q),u==null?(r(E,m,C),r(I,m,C),$(d.children||[],m,I,v,x,O,A,R)):D>0&&D&64&&H&&u.dynamicChildren?(b(u.dynamicChildren,H,m,v,x,O,A),(d.key!=null||v&&d===v.subTree)&&jr(u,d,!0)):j(u,d,m,I,v,x,O,A,R)},G=(u,d,m,C,v,x,O,A,R)=>{d.slotScopeIds=A,u==null?d.shapeFlag&512?v.ctx.activate(d,m,C,O,R):ee(d,m,C,v,x,O,R):re(u,d,R)},ee=(u,d,m,C,v,x,O)=>{const A=u.component=Mc(u,C,v);if(Gt(u)&&(A.ctx.renderer=gt),Pc(A,!1,O),A.asyncDep){if(v&&v.registerDep(A,U,O),!u.el){const R=A.subTree=ie(ge);W(null,R,d,m)}}else U(A,u,d,m,v,x,O)},re=(u,d,m)=>{const C=d.component=u.component;if(Ec(u,d,m))if(C.asyncDep&&!C.asyncResolved){Y(C,d,m);return}else C.next=d,Al(C.update),C.effect.dirty=!0,C.update();else d.el=u.el,C.vnode=d},U=(u,d,m,C,v,x,O)=>{const A=()=>{if(u.isMounted){let{next:I,bu:D,u:H,parent:q,vnode:z}=u;{const mt=Jo(u);if(mt){I&&(I.el=z.el,Y(u,I,O)),mt.asyncDep.then(()=>{u.isUnmounted||A()});return}}let te=I,Q;ot(u,!1),I?(I.el=z.el,Y(u,I,O)):I=z,D&&hn(D),(Q=I.props&&I.props.onVnodeBeforeUpdate)&&Ce(Q,q,I,z),ot(u,!0);const ce=Jn(u),Re=u.subTree;u.subTree=ce,M(Re,ce,h(Re.el),Xt(Re),u,v,x),I.el=ce.el,te===null&&Cc(u,ce.el),H&&me(H,v),(Q=I.props&&I.props.onVnodeUpdated)&&me(()=>Ce(Q,q,I,z),v)}else{let I;const{el:D,props:H}=d,{bm:q,m:z,parent:te}=u,Q=St(d);if(ot(u,!1),q&&hn(q),!Q&&(I=H&&H.onVnodeBeforeMount)&&Ce(I,te,d),ot(u,!0),D&&Kn){const ce=()=>{u.subTree=Jn(u),Kn(D,u.subTree,u,v,null)};Q?d.type.__asyncLoader().then(()=>!u.isUnmounted&&ce()):ce()}else{const ce=u.subTree=Jn(u);M(null,ce,m,C,u,v,x),d.el=ce.el}if(z&&me(z,v),!Q&&(I=H&&H.onVnodeMounted)){const ce=d;me(()=>Ce(I,te,ce),v)}(d.shapeFlag&256||te&&St(te.vnode)&&te.vnode.shapeFlag&256)&&u.a&&me(u.a,v),u.isMounted=!0,d=m=C=null}},R=u.effect=new Sr(A,Te,()=>Fn(E),u.scope),E=u.update=()=>{R.dirty&&R.run()};E.i=u,E.id=u.uid,ot(u,!0),E()},Y=(u,d,m)=>{d.component=u;const C=u.vnode.props;u.vnode=d,u.next=null,tc(u,d.props,C,m),oc(u,d.children,m),nt(),ns(u),rt()},j=(u,d,m,C,v,x,O,A,R=!1)=>{const E=u&&u.children,I=u?u.shapeFlag:0,D=d.children,{patchFlag:H,shapeFlag:q}=d;if(H>0){if(H&128){Jt(E,D,m,C,v,x,O,A,R);return}else if(H&256){$e(E,D,m,C,v,x,O,A,R);return}}q&8?(I&16&&Ot(E,v,x),D!==E&&f(m,D)):I&16?q&16?Jt(E,D,m,C,v,x,O,A,R):Ot(E,v,x,!0):(I&8&&f(m,""),q&16&&$(D,m,C,v,x,O,A,R))},$e=(u,d,m,C,v,x,O,A,R)=>{u=u||vt,d=d||vt;const E=u.length,I=d.length,D=Math.min(E,I);let H;for(H=0;HI?Ot(u,v,x,!0,!1,D):$(d,m,C,v,x,O,A,R,D)},Jt=(u,d,m,C,v,x,O,A,R)=>{let E=0;const I=d.length;let D=u.length-1,H=I-1;for(;E<=D&&E<=H;){const q=u[E],z=d[E]=R?We(d[E]):xe(d[E]);if(at(q,z))M(q,z,m,null,v,x,O,A,R);else break;E++}for(;E<=D&&E<=H;){const q=u[D],z=d[H]=R?We(d[H]):xe(d[H]);if(at(q,z))M(q,z,m,null,v,x,O,A,R);else break;D--,H--}if(E>D){if(E<=H){const q=H+1,z=qH)for(;E<=D;)Me(u[E],v,x,!0),E++;else{const q=E,z=E,te=new Map;for(E=z;E<=H;E++){const be=d[E]=R?We(d[E]):xe(d[E]);be.key!=null&&te.set(be.key,E)}let Q,ce=0;const Re=H-z+1;let mt=!1,Wr=0;const Lt=new Array(Re);for(E=0;E=Re){Me(be,v,x,!0);continue}let Pe;if(be.key!=null)Pe=te.get(be.key);else for(Q=z;Q<=H;Q++)if(Lt[Q-z]===0&&at(be,d[Q])){Pe=Q;break}Pe===void 0?Me(be,v,x,!0):(Lt[Pe-z]=E+1,Pe>=Wr?Wr=Pe:mt=!0,M(be,d[Pe],m,null,v,x,O,A,R),ce++)}const qr=mt?pc(Lt):vt;for(Q=qr.length-1,E=Re-1;E>=0;E--){const be=z+E,Pe=d[be],Gr=be+1{const{el:x,type:O,transition:A,children:R,shapeFlag:E}=u;if(E&6){st(u.component.subTree,d,m,C);return}if(E&128){u.suspense.move(d,m,C);return}if(E&64){O.move(u,d,m,gt);return}if(O===ye){r(x,d,m);for(let D=0;DA.enter(x),v);else{const{leave:D,delayLeave:H,afterLeave:q}=A,z=()=>r(x,d,m),te=()=>{D(x,()=>{z(),q&&q()})};H?H(x,z,te):te()}else r(x,d,m)},Me=(u,d,m,C=!1,v=!1)=>{const{type:x,props:O,ref:A,children:R,dynamicChildren:E,shapeFlag:I,patchFlag:D,dirs:H,cacheIndex:q}=u;if(D===-2&&(v=!1),A!=null&&Cn(A,null,m,u,!0),q!=null&&(d.renderCache[q]=void 0),I&256){d.ctx.deactivate(u);return}const z=I&1&&H,te=!St(u);let Q;if(te&&(Q=O&&O.onVnodeBeforeUnmount)&&Ce(Q,d,u),I&6)Pi(u.component,m,C);else{if(I&128){u.suspense.unmount(m,C);return}z&&Ie(u,null,d,"beforeUnmount"),I&64?u.type.remove(u,d,m,gt,C):E&&!E.hasOnce&&(x!==ye||D>0&&D&64)?Ot(E,d,m,!1,!0):(x===ye&&D&384||!v&&I&16)&&Ot(R,d,m),C&&kr(u)}(te&&(Q=O&&O.onVnodeUnmounted)||z)&&me(()=>{Q&&Ce(Q,d,u),z&&Ie(u,null,d,"unmounted")},m)},kr=u=>{const{type:d,el:m,anchor:C,transition:v}=u;if(d===ye){Mi(m,C);return}if(d===Ht){_(u);return}const x=()=>{s(m),v&&!v.persisted&&v.afterLeave&&v.afterLeave()};if(u.shapeFlag&1&&v&&!v.persisted){const{leave:O,delayLeave:A}=v,R=()=>O(m,x);A?A(u.el,x,R):R()}else x()},Mi=(u,d)=>{let m;for(;u!==d;)m=p(u),s(u),u=m;s(d)},Pi=(u,d,m)=>{const{bum:C,scope:v,update:x,subTree:O,um:A,m:R,a:E}=u;ms(R),ms(E),C&&hn(C),v.stop(),x&&(x.active=!1,Me(O,u,d,m)),A&&me(A,d),me(()=>{u.isUnmounted=!0},d),d&&d.pendingBranch&&!d.isUnmounted&&u.asyncDep&&!u.asyncResolved&&u.suspenseId===d.pendingId&&(d.deps--,d.deps===0&&d.resolve())},Ot=(u,d,m,C=!1,v=!1,x=0)=>{for(let O=x;O{if(u.shapeFlag&6)return Xt(u.component.subTree);if(u.shapeFlag&128)return u.suspense.next();const d=p(u.anchor||u.el),m=d&&d[qo];return m?p(m):d};let Un=!1;const Kr=(u,d,m)=>{u==null?d._vnode&&Me(d._vnode,null,null,!0):M(d._vnode||null,u,d,null,null,null,m),Un||(Un=!0,ns(),bn(),Un=!1),d._vnode=u},gt={p:M,um:Me,m:st,r:kr,mt:ee,mc:$,pc:j,pbc:b,n:Xt,o:e};let kn,Kn;return t&&([kn,Kn]=t(gt)),{render:Kr,hydrate:kn,createApp:Ql(Kr,kn)}}function Yn({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function ot({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function Yo(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function jr(e,t,n=!1){const r=e.children,s=t.children;if(k(r)&&k(s))for(let o=0;o>1,e[n[l]]0&&(t[r]=n[o-1]),n[o]=r)}}for(o=n.length,i=n[o-1];o-- >0;)n[o]=i,i=t[i];return n}function Jo(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Jo(t)}function ms(e){if(e)for(let t=0;tTt(gc);function Dr(e,t){return jn(e,null,t)}function mu(e,t){return jn(e,null,{flush:"post"})}const cn={};function Ye(e,t,n){return jn(e,t,n)}function jn(e,t,{immediate:n,deep:r,flush:s,once:o,onTrack:i,onTrigger:l}=ne){if(t&&o){const T=t;t=(...N)=>{T(...N),P()}}const c=ae,a=T=>r===!0?T:qe(T,r===!1?1:void 0);let f,h=!1,p=!1;if(de(e)?(f=()=>e.value,h=At(e)):Ct(e)?(f=()=>a(e),h=!0):k(e)?(p=!0,h=e.some(T=>Ct(T)||At(T)),f=()=>e.map(T=>{if(de(T))return T.value;if(Ct(T))return a(T);if(K(T))return ze(T,c,2)})):K(e)?t?f=()=>ze(e,c,2):f=()=>(y&&y(),Ae(e,c,3,[w])):f=Te,t&&r){const T=f;f=()=>qe(T())}let y,w=T=>{y=g.onStop=()=>{ze(T,c,4),y=g.onStop=void 0}},M;if(Yt)if(w=Te,t?n&&Ae(t,c,3,[f(),p?[]:void 0,w]):f(),s==="sync"){const T=mc();M=T.__watcherHandles||(T.__watcherHandles=[])}else return Te;let V=p?new Array(e.length).fill(cn):cn;const W=()=>{if(!(!g.active||!g.dirty))if(t){const T=g.run();(r||h||(p?T.some((N,$)=>Qe(N,V[$])):Qe(T,V)))&&(y&&y(),Ae(t,c,3,[T,V===cn?void 0:p&&V[0]===cn?[]:V,w]),V=T)}else g.run()};W.allowRecurse=!!t;let B;s==="sync"?B=W:s==="post"?B=()=>me(W,c&&c.suspense):(W.pre=!0,c&&(W.id=c.uid),B=()=>Fn(W));const g=new Sr(f,Te,B),_=so(),P=()=>{g.stop(),_&&wr(_.effects,g)};return t?n?W():V=g.run():s==="post"?me(g.run.bind(g),c&&c.suspense):g.run(),M&&M.push(P),P}function yc(e,t,n){const r=this.proxy,s=se(e)?e.includes(".")?Xo(r,e):()=>r[e]:e.bind(r,r);let o;K(t)?o=t:(o=t.handler,n=t);const i=zt(this),l=jn(s,o.bind(r),n);return i(),l}function Xo(e,t){const n=t.split(".");return()=>{let r=e;for(let s=0;s{qe(r,t,n)});else if(Qs(e)){for(const r in e)qe(e[r],t,n);for(const r of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,r)&&qe(e[r],t,n)}return e}const _c=(e,t)=>t==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Oe(t)}Modifiers`]||e[`${tt(t)}Modifiers`];function bc(e,t,...n){if(e.isUnmounted)return;const r=e.vnode.props||ne;let s=n;const o=t.startsWith("update:"),i=o&&_c(r,t.slice(7));i&&(i.trim&&(s=n.map(f=>se(f)?f.trim():f)),i.number&&(s=n.map(or)));let l,c=r[l=dn(t)]||r[l=dn(Oe(t))];!c&&o&&(c=r[l=dn(tt(t))]),c&&Ae(c,e,6,s);const a=r[l+"Once"];if(a){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,Ae(a,e,6,s)}}function Qo(e,t,n=!1){const r=t.emitsCache,s=r.get(e);if(s!==void 0)return s;const o=e.emits;let i={},l=!1;if(!K(e)){const c=a=>{const f=Qo(a,t,!0);f&&(l=!0,fe(i,f))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!o&&!l?(Z(e)&&r.set(e,null),null):(k(o)?o.forEach(c=>i[c]=null):fe(i,o),Z(e)&&r.set(e,i),i)}function Dn(e,t){return!e||!Wt(t)?!1:(t=t.slice(2).replace(/Once$/,""),J(e,t[0].toLowerCase()+t.slice(1))||J(e,tt(t))||J(e,t))}function Jn(e){const{type:t,vnode:n,proxy:r,withProxy:s,propsOptions:[o],slots:i,attrs:l,emit:c,render:a,renderCache:f,props:h,data:p,setupState:y,ctx:w,inheritAttrs:M}=e,V=vn(e);let W,B;try{if(n.shapeFlag&4){const _=s||r,P=_;W=xe(a.call(P,_,f,h,y,p,w)),B=l}else{const _=t;W=xe(_.length>1?_(h,{attrs:l,slots:i,emit:c}):_(h,null)),B=t.props?l:vc(l)}}catch(_){jt.length=0,qt(_,e,1),W=ie(ge)}let g=W;if(B&&M!==!1){const _=Object.keys(B),{shapeFlag:P}=g;_.length&&P&7&&(o&&_.some(vr)&&(B=wc(B,o)),g=Ze(g,B,!1,!0))}return n.dirs&&(g=Ze(g,null,!1,!0),g.dirs=g.dirs?g.dirs.concat(n.dirs):n.dirs),n.transition&&(g.transition=n.transition),W=g,vn(V),W}const vc=e=>{let t;for(const n in e)(n==="class"||n==="style"||Wt(n))&&((t||(t={}))[n]=e[n]);return t},wc=(e,t)=>{const n={};for(const r in e)(!vr(r)||!(r.slice(9)in t))&&(n[r]=e[r]);return n};function Ec(e,t,n){const{props:r,children:s,component:o}=e,{props:i,children:l,patchFlag:c}=t,a=o.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return r?ys(r,i,a):!!i;if(c&8){const f=t.dynamicProps;for(let h=0;he.__isSuspense;function Zo(e,t){t&&t.pendingBranch?k(e)?t.effects.push(...e):t.effects.push(e):Rl(e)}const ye=Symbol.for("v-fgt"),dt=Symbol.for("v-txt"),ge=Symbol.for("v-cmt"),Ht=Symbol.for("v-stc"),jt=[];let we=null;function ei(e=!1){jt.push(we=e?null:[])}function Sc(){jt.pop(),we=jt[jt.length-1]||null}let kt=1;function _s(e){kt+=e,e<0&&we&&(we.hasOnce=!0)}function ti(e){return e.dynamicChildren=kt>0?we||vt:null,Sc(),kt>0&&we&&we.push(e),e}function yu(e,t,n,r,s,o){return ti(si(e,t,n,r,s,o,!0))}function ni(e,t,n,r,s){return ti(ie(e,t,n,r,s,!0))}function xn(e){return e?e.__v_isVNode===!0:!1}function at(e,t){return e.type===t.type&&e.key===t.key}const ri=({key:e})=>e??null,gn=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?se(e)||de(e)||K(e)?{i:ue,r:e,k:t,f:!!n}:e:null);function si(e,t=null,n=null,r=0,s=null,o=e===ye?0:1,i=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&ri(t),ref:t&&gn(t),scopeId:Nn,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:o,patchFlag:r,dynamicProps:s,dynamicChildren:null,appContext:null,ctx:ue};return l?(Vr(c,n),o&128&&e.normalize(c)):n&&(c.shapeFlag|=se(n)?8:16),kt>0&&!i&&we&&(c.patchFlag>0||o&6)&&c.patchFlag!==32&&we.push(c),c}const ie=Tc;function Tc(e,t=null,n=null,r=0,s=null,o=!1){if((!e||e===Po)&&(e=ge),xn(e)){const l=Ze(e,t,!0);return n&&Vr(l,n),kt>0&&!o&&we&&(l.shapeFlag&6?we[we.indexOf(e)]=l:we.push(l)),l.patchFlag=-2,l}if($c(e)&&(e=e.__vccOpts),t){t=Ac(t);let{class:l,style:c}=t;l&&!se(l)&&(t.class=xr(l)),Z(c)&&(yo(c)&&!k(c)&&(c=fe({},c)),t.style=Cr(c))}const i=se(e)?1:xc(e)?128:ic(e)?64:Z(e)?4:K(e)?2:0;return si(e,t,n,r,s,i,o,!0)}function Ac(e){return e?yo(e)||Do(e)?fe({},e):e:null}function Ze(e,t,n=!1,r=!1){const{props:s,ref:o,patchFlag:i,children:l,transition:c}=e,a=t?Rc(s||{},t):s,f={__v_isVNode:!0,__v_skip:!0,type:e.type,props:a,key:a&&ri(a),ref:t&&t.ref?n&&o?k(o)?o.concat(gn(t)):[o,gn(t)]:gn(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==ye?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Ze(e.ssContent),ssFallback:e.ssFallback&&Ze(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&r&&wn(f,c.clone(f)),f}function oi(e=" ",t=0){return ie(dt,null,e,t)}function _u(e,t){const n=ie(Ht,null,e);return n.staticCount=t,n}function bu(e="",t=!1){return t?(ei(),ni(ge,null,e)):ie(ge,null,e)}function xe(e){return e==null||typeof e=="boolean"?ie(ge):k(e)?ie(ye,null,e.slice()):typeof e=="object"?We(e):ie(dt,null,String(e))}function We(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Ze(e)}function Vr(e,t){let n=0;const{shapeFlag:r}=e;if(t==null)t=null;else if(k(t))n=16;else if(typeof t=="object")if(r&65){const s=t.default;s&&(s._c&&(s._d=!1),Vr(e,s()),s._c&&(s._d=!0));return}else{n=32;const s=t._;!s&&!Do(t)?t._ctx=ue:s===3&&ue&&(ue.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else K(t)?(t={default:t,_ctx:ue},n=32):(t=String(t),r&64?(n=16,t=[oi(t)]):n=8);e.children=t,e.shapeFlag|=n}function Rc(...e){const t={};for(let n=0;nae||ue;let Sn,mr;{const e=eo(),t=(n,r)=>{let s;return(s=e[n])||(s=e[n]=[]),s.push(r),o=>{s.length>1?s.forEach(i=>i(o)):s[0](o)}};Sn=t("__VUE_INSTANCE_SETTERS__",n=>ae=n),mr=t("__VUE_SSR_SETTERS__",n=>Yt=n)}const zt=e=>{const t=ae;return Sn(e),e.scope.on(),()=>{e.scope.off(),Sn(t)}},bs=()=>{ae&&ae.scope.off(),Sn(null)};function ii(e){return e.vnode.shapeFlag&4}let Yt=!1;function Pc(e,t=!1,n=!1){t&&mr(t);const{props:r,children:s}=e.vnode,o=ii(e);ec(e,r,o,t),sc(e,s,n);const i=o?Ic(e,t):void 0;return t&&mr(!1),i}function Ic(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Kl);const{setup:r}=n;if(r){const s=e.setupContext=r.length>1?ci(e):null,o=zt(e);nt();const i=ze(r,e,0,[e.props,s]);if(rt(),o(),Js(i)){if(i.then(bs,bs),t)return i.then(l=>{vs(e,l,t)}).catch(l=>{qt(l,e,0)});e.asyncDep=i}else vs(e,i,t)}else li(e,t)}function vs(e,t,n){K(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Z(t)&&(e.setupState=wo(t)),li(e,n)}let ws;function li(e,t,n){const r=e.type;if(!e.render){if(!t&&ws&&!r.render){const s=r.template||$r(e).template;if(s){const{isCustomElement:o,compilerOptions:i}=e.appContext.config,{delimiters:l,compilerOptions:c}=r,a=fe(fe({isCustomElement:o,delimiters:l},i),c);r.render=ws(s,a)}}e.render=r.render||Te}{const s=zt(e);nt();try{ql(e)}finally{rt(),s()}}}const Fc={get(e,t){return _e(e,"get",""),e[t]}};function ci(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,Fc),slots:e.slots,emit:e.emit,expose:t}}function Bn(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(wo(pn(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Ft)return Ft[n](e)},has(t,n){return n in t||n in Ft}})):e.proxy}function Nc(e,t=!0){return K(e)?e.displayName||e.name:e.name||t&&e.__name}function $c(e){return K(e)&&"__vccOpts"in e}const oe=(e,t)=>ml(e,t,Yt);function yr(e,t,n){const r=arguments.length;return r===2?Z(t)&&!k(t)?xn(t)?ie(e,null,[t]):ie(e,t):ie(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):r===3&&xn(n)&&(n=[n]),ie(e,t,n))}const Hc="3.4.33";/** * @vue/runtime-dom v3.4.33 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT -**/const jc="http://www.w3.org/2000/svg",Bc="http://www.w3.org/1998/Math/MathML",He=typeof document<"u"?document:null,Es=He&&He.createElement("template"),Dc={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{const s=t==="svg"?He.createElementNS(jc,e):t==="mathml"?He.createElementNS(Bc,e):n?He.createElement(e,{is:n}):He.createElement(e);return e==="select"&&r&&r.multiple!=null&&s.setAttribute("multiple",r.multiple),s},createText:e=>He.createTextNode(e),createComment:e=>He.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>He.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,r,s,o){const i=n?n.previousSibling:t.lastChild;if(s&&(s===o||s.nextSibling))for(;t.insertBefore(s.cloneNode(!0),n),!(s===o||!(s=s.nextSibling)););else{Es.innerHTML=r==="svg"?`${e}`:r==="mathml"?`${e}`:e;const l=Es.content;if(r==="svg"||r==="mathml"){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[i?i.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Ve="transition",Mt="animation",Kt=Symbol("_vtc"),ai=(e,{slots:t})=>yr(Il,Vc(e),t);ai.displayName="Transition";const ui={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String};ai.props=fe({},So,ui);const it=(e,t=[])=>{k(e)?e.forEach(n=>n(...t)):e&&e(...t)},Cs=e=>e?k(e)?e.some(t=>t.length>1):e.length>1:!1;function Vc(e){const t={};for(const S in e)S in ui||(t[S]=e[S]);if(e.css===!1)return t;const{name:n="v",type:r,duration:s,enterFromClass:o=`${n}-enter-from`,enterActiveClass:i=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:c=o,appearActiveClass:a=i,appearToClass:f=l,leaveFromClass:h=`${n}-leave-from`,leaveActiveClass:p=`${n}-leave-active`,leaveToClass:y=`${n}-leave-to`}=e,w=Uc(s),M=w&&w[0],D=w&&w[1],{onBeforeEnter:W,onEnter:V,onEnterCancelled:g,onLeave:_,onLeaveCancelled:P,onBeforeAppear:T=W,onAppear:N=V,onAppearCancelled:$=g}=t,L=(S,G,ee)=>{lt(S,G?f:l),lt(S,G?a:i),ee&&ee()},b=(S,G)=>{S._isLeaving=!1,lt(S,h),lt(S,y),lt(S,p),G&&G()},F=S=>(G,ee)=>{const re=S?N:V,U=()=>L(G,S,ee);it(re,[G,U]),xs(()=>{lt(G,S?c:o),Ue(G,S?f:l),Cs(re)||Ss(G,r,M,U)})};return fe(t,{onBeforeEnter(S){it(W,[S]),Ue(S,o),Ue(S,i)},onBeforeAppear(S){it(T,[S]),Ue(S,c),Ue(S,a)},onEnter:F(!1),onAppear:F(!0),onLeave(S,G){S._isLeaving=!0;const ee=()=>b(S,G);Ue(S,h),Ue(S,p),Wc(),xs(()=>{S._isLeaving&&(lt(S,h),Ue(S,y),Cs(_)||Ss(S,r,D,ee))}),it(_,[S,ee])},onEnterCancelled(S){L(S,!1),it(g,[S])},onAppearCancelled(S){L(S,!0),it($,[S])},onLeaveCancelled(S){b(S),it(P,[S])}})}function Uc(e){if(e==null)return null;if(Z(e))return[Xn(e.enter),Xn(e.leave)];{const t=Xn(e);return[t,t]}}function Xn(e){return ji(e)}function Ue(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Kt]||(e[Kt]=new Set)).add(t)}function lt(e,t){t.split(/\s+/).forEach(r=>r&&e.classList.remove(r));const n=e[Kt];n&&(n.delete(t),n.size||(e[Kt]=void 0))}function xs(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let kc=0;function Ss(e,t,n,r){const s=e._endId=++kc,o=()=>{s===e._endId&&r()};if(n)return setTimeout(o,n);const{type:i,timeout:l,propCount:c}=Kc(e,t);if(!i)return r();const a=i+"end";let f=0;const h=()=>{e.removeEventListener(a,p),o()},p=y=>{y.target===e&&++f>=c&&h()};setTimeout(()=>{f(n[w]||"").split(", "),s=r(`${Ve}Delay`),o=r(`${Ve}Duration`),i=Ts(s,o),l=r(`${Mt}Delay`),c=r(`${Mt}Duration`),a=Ts(l,c);let f=null,h=0,p=0;t===Ve?i>0&&(f=Ve,h=i,p=o.length):t===Mt?a>0&&(f=Mt,h=a,p=c.length):(h=Math.max(i,a),f=h>0?i>a?Ve:Mt:null,p=f?f===Ve?o.length:c.length:0);const y=f===Ve&&/\b(transform|all)(,|$)/.test(r(`${Ve}Property`).toString());return{type:f,timeout:h,propCount:p,hasTransform:y}}function Ts(e,t){for(;e.lengthAs(n)+As(e[r])))}function As(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function Wc(){return document.body.offsetHeight}function qc(e,t,n){const r=e[Kt];r&&(t=(t?[t,...r]:[...r]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Rs=Symbol("_vod"),Gc=Symbol("_vsh"),zc=Symbol(""),Yc=/(^|;)\s*display\s*:/;function Jc(e,t,n){const r=e.style,s=se(n);let o=!1;if(n&&!s){if(t)if(se(t))for(const i of t.split(";")){const l=i.slice(0,i.indexOf(":")).trim();n[l]==null&&mn(r,l,"")}else for(const i in t)n[i]==null&&mn(r,i,"");for(const i in n)i==="display"&&(o=!0),mn(r,i,n[i])}else if(s){if(t!==n){const i=r[zc];i&&(n+=";"+i),r.cssText=n,o=Yc.test(n)}}else t&&e.removeAttribute("style");Rs in e&&(e[Rs]=o?r.display:"",e[Gc]&&(r.display="none"))}const Os=/\s*!important$/;function mn(e,t,n){if(k(n))n.forEach(r=>mn(e,t,r));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const r=Xc(e,t);Os.test(n)?e.setProperty(tt(r),n.replace(Os,""),"important"):e[r]=n}}const Ls=["Webkit","Moz","ms"],Qn={};function Xc(e,t){const n=Qn[t];if(n)return n;let r=Oe(t);if(r!=="filter"&&r in e)return Qn[t]=r;r=On(r);for(let s=0;sZn||(na.then(()=>Zn=0),Zn=Date.now());function sa(e,t){const n=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=n.attached)return;Ae(oa(r,n.value),t,5,[r])};return n.value=e,n.attached=ra(),n}function oa(e,t){if(k(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(r=>s=>!s._stopped&&r&&r(s))}else return t}const Ns=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,ia=(e,t,n,r,s,o)=>{const i=s==="svg";t==="class"?qc(e,r,i):t==="style"?Jc(e,n,r):Wt(t)?vr(t)||ea(e,t,n,r,o):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):la(e,t,r,i))?(Qc(e,t,r),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Ps(e,t,r,i,o,t!=="value")):(t==="true-value"?e._trueValue=r:t==="false-value"&&(e._falseValue=r),Ps(e,t,r,i))};function la(e,t,n,r){if(r)return!!(t==="innerHTML"||t==="textContent"||t in e&&Ns(t)&&K(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const s=e.tagName;if(s==="IMG"||s==="VIDEO"||s==="CANVAS"||s==="SOURCE")return!1}return Ns(t)&&se(n)?!1:t in e}const $s=e=>{const t=e.props["onUpdate:modelValue"]||!1;return k(t)?n=>hn(t,n):t};function ca(e){e.target.composing=!0}function Hs(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const er=Symbol("_assign"),vu={created(e,{modifiers:{lazy:t,trim:n,number:r}},s){e[er]=$s(s);const o=r||s.props&&s.props.type==="number";_t(e,t?"change":"input",i=>{if(i.target.composing)return;let l=e.value;n&&(l=l.trim()),o&&(l=or(l)),e[er](l)}),n&&_t(e,"change",()=>{e.value=e.value.trim()}),t||(_t(e,"compositionstart",ca),_t(e,"compositionend",Hs),_t(e,"change",Hs))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:r,trim:s,number:o}},i){if(e[er]=$s(i),e.composing)return;const l=(o||e.type==="number")&&!/^0\d/.test(e.value)?or(e.value):e.value,c=t??"";l!==c&&(document.activeElement===e&&e.type!=="range"&&(r&&t===n||s&&e.value.trim()===c)||(e.value=c))}},aa=["ctrl","shift","alt","meta"],ua={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>aa.some(n=>e[`${n}Key`]&&!t.includes(n))},wu=(e,t)=>{const n=e._withMods||(e._withMods={}),r=t.join(".");return n[r]||(n[r]=(s,...o)=>{for(let i=0;i{const n=e._withKeys||(e._withKeys={}),r=t.join(".");return n[r]||(n[r]=s=>{if(!("key"in s))return;const o=tt(s.key);if(t.some(i=>i===o||fa[i]===o))return e(s)})},fi=fe({patchProp:ia},Dc);let Bt,js=!1;function di(){return Bt||(Bt=dc(fi))}function da(){return Bt=js?Bt:hc(fi),js=!0,Bt}const Cu=(...e)=>{di().render(...e)},xu=(...e)=>{const t=di().createApp(...e),{mount:n}=t;return t.mount=r=>{const s=pi(r);if(!s)return;const o=t._component;!K(o)&&!o.render&&!o.template&&(o.template=s.innerHTML),s.innerHTML="";const i=n(s,!1,hi(s));return s instanceof Element&&(s.removeAttribute("v-cloak"),s.setAttribute("data-v-app","")),i},t},Su=(...e)=>{const t=da().createApp(...e),{mount:n}=t;return t.mount=r=>{const s=pi(r);if(s)return n(s,!0,hi(s))},t};function hi(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function pi(e){return se(e)?document.querySelector(e):e}const ha=window.__VP_SITE_DATA__;function Vr(e){return so()?(zi(e),!0):!1}function Ne(e){return typeof e=="function"?e():vo(e)}const gi=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const pa=Object.prototype.toString,ga=e=>pa.call(e)==="[object Object]",Je=()=>{},_r=ma();function ma(){var e,t;return gi&&((e=window==null?void 0:window.navigator)==null?void 0:e.userAgent)&&(/iP(?:ad|hone|od)/.test(window.navigator.userAgent)||((t=window==null?void 0:window.navigator)==null?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test(window==null?void 0:window.navigator.userAgent))}function ya(e,t){function n(...r){return new Promise((s,o)=>{Promise.resolve(e(()=>t.apply(this,r),{fn:t,thisArg:this,args:r})).then(s).catch(o)})}return n}const mi=e=>e();function _a(e,t={}){let n,r,s=Je;const o=l=>{clearTimeout(l),s(),s=Je};return l=>{const c=Ne(e),a=Ne(t.maxWait);return n&&o(n),c<=0||a!==void 0&&a<=0?(r&&(o(r),r=null),Promise.resolve(l())):new Promise((f,h)=>{s=t.rejectOnCancel?h:f,a&&!r&&(r=setTimeout(()=>{n&&o(n),r=null,f(l())},a)),n=setTimeout(()=>{r&&o(r),r=null,f(l())},c)})}}function ba(e=mi){const t=le(!0);function n(){t.value=!1}function r(){t.value=!0}const s=(...o)=>{t.value&&e(...o)};return{isActive:Pn(t),pause:n,resume:r,eventFilter:s}}function va(e){return Dn()}function yi(...e){if(e.length!==1)return Cl(...e);const t=e[0];return typeof t=="function"?Pn(vl(()=>({get:t,set:Je}))):le(t)}function _i(e,t,n={}){const{eventFilter:r=mi,...s}=n;return Ye(e,ya(r,t),s)}function wa(e,t,n={}){const{eventFilter:r,...s}=n,{eventFilter:o,pause:i,resume:l,isActive:c}=ba(r);return{stop:_i(e,t,{...s,eventFilter:o}),pause:i,resume:l,isActive:c}}function bi(e,t=!0,n){va()?Rt(e,n):t?e():In(e)}function Tu(e,t,n={}){const{debounce:r=0,maxWait:s=void 0,...o}=n;return _i(e,t,{...o,eventFilter:_a(r,{maxWait:s})})}function Au(e,t,n){let r;de(n)?r={evaluating:n}:r={};const{lazy:s=!1,evaluating:o=void 0,shallow:i=!0,onError:l=Je}=r,c=le(!s),a=i?Ir(t):le(t);let f=0;return Br(async h=>{if(!c.value)return;f++;const p=f;let y=!1;o&&Promise.resolve().then(()=>{o.value=!0});try{const w=await e(M=>{h(()=>{o&&(o.value=!1),y||M()})});p===f&&(a.value=w)}catch(w){l(w)}finally{o&&p===f&&(o.value=!1),y=!0}}),s?oe(()=>(c.value=!0,a.value)):a}function bt(e){var t;const n=Ne(e);return(t=n==null?void 0:n.$el)!=null?t:n}const Le=gi?window:void 0;function Xe(...e){let t,n,r,s;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,r,s]=e,t=Le):[t,n,r,s]=e,!t)return Je;Array.isArray(n)||(n=[n]),Array.isArray(r)||(r=[r]);const o=[],i=()=>{o.forEach(f=>f()),o.length=0},l=(f,h,p,y)=>(f.addEventListener(h,p,y),()=>f.removeEventListener(h,p,y)),c=Ye(()=>[bt(t),Ne(s)],([f,h])=>{if(i(),!f)return;const p=ga(h)?{...h}:h;o.push(...n.flatMap(y=>r.map(w=>l(f,y,w,p))))},{immediate:!0,flush:"post"}),a=()=>{c(),i()};return Vr(a),a}let Bs=!1;function Ru(e,t,n={}){const{window:r=Le,ignore:s=[],capture:o=!0,detectIframe:i=!1}=n;if(!r)return Je;_r&&!Bs&&(Bs=!0,Array.from(r.document.body.children).forEach(p=>p.addEventListener("click",Je)),r.document.documentElement.addEventListener("click",Je));let l=!0;const c=p=>s.some(y=>{if(typeof y=="string")return Array.from(r.document.querySelectorAll(y)).some(w=>w===p.target||p.composedPath().includes(w));{const w=bt(y);return w&&(p.target===w||p.composedPath().includes(w))}}),f=[Xe(r,"click",p=>{const y=bt(e);if(!(!y||y===p.target||p.composedPath().includes(y))){if(p.detail===0&&(l=!c(p)),!l){l=!0;return}t(p)}},{passive:!0,capture:o}),Xe(r,"pointerdown",p=>{const y=bt(e);l=!c(p)&&!!(y&&!p.composedPath().includes(y))},{passive:!0}),i&&Xe(r,"blur",p=>{setTimeout(()=>{var y;const w=bt(e);((y=r.document.activeElement)==null?void 0:y.tagName)==="IFRAME"&&!(w!=null&&w.contains(r.document.activeElement))&&t(p)},0)})].filter(Boolean);return()=>f.forEach(p=>p())}function Ea(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function Ou(...e){let t,n,r={};e.length===3?(t=e[0],n=e[1],r=e[2]):e.length===2?typeof e[1]=="object"?(t=!0,n=e[0],r=e[1]):(t=e[0],n=e[1]):(t=!0,n=e[0]);const{target:s=Le,eventName:o="keydown",passive:i=!1,dedupe:l=!1}=r,c=Ea(t);return Xe(s,o,f=>{f.repeat&&Ne(l)||c(f)&&n(f)},i)}function Ca(){const e=le(!1),t=Dn();return t&&Rt(()=>{e.value=!0},t),e}function xa(e){const t=Ca();return oe(()=>(t.value,!!e()))}function Sa(e,t={}){const{window:n=Le}=t,r=xa(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let s;const o=le(!1),i=a=>{o.value=a.matches},l=()=>{s&&("removeEventListener"in s?s.removeEventListener("change",i):s.removeListener(i))},c=Br(()=>{r.value&&(l(),s=n.matchMedia(Ne(e)),"addEventListener"in s?s.addEventListener("change",i):s.addListener(i),o.value=s.matches)});return Vr(()=>{c(),l(),s=void 0}),o}const an=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},un="__vueuse_ssr_handlers__",Ta=Aa();function Aa(){return un in an||(an[un]=an[un]||{}),an[un]}function vi(e,t){return Ta[e]||t}function Ra(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}const Oa={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},Ds="vueuse-storage";function Ur(e,t,n,r={}){var s;const{flush:o="pre",deep:i=!0,listenToStorageChanges:l=!0,writeDefaults:c=!0,mergeDefaults:a=!1,shallow:f,window:h=Le,eventFilter:p,onError:y=b=>{console.error(b)},initOnMounted:w}=r,M=(f?Ir:le)(typeof t=="function"?t():t);if(!n)try{n=vi("getDefaultStorage",()=>{var b;return(b=Le)==null?void 0:b.localStorage})()}catch(b){y(b)}if(!n)return M;const D=Ne(t),W=Ra(D),V=(s=r.serializer)!=null?s:Oa[W],{pause:g,resume:_}=wa(M,()=>T(M.value),{flush:o,deep:i,eventFilter:p});h&&l&&bi(()=>{Xe(h,"storage",$),Xe(h,Ds,L),w&&$()}),w||$();function P(b,F){h&&h.dispatchEvent(new CustomEvent(Ds,{detail:{key:e,oldValue:b,newValue:F,storageArea:n}}))}function T(b){try{const F=n.getItem(e);if(b==null)P(F,null),n.removeItem(e);else{const S=V.write(b);F!==S&&(n.setItem(e,S),P(F,S))}}catch(F){y(F)}}function N(b){const F=b?b.newValue:n.getItem(e);if(F==null)return c&&D!=null&&n.setItem(e,V.write(D)),D;if(!b&&a){const S=V.read(F);return typeof a=="function"?a(S,D):W==="object"&&!Array.isArray(S)?{...D,...S}:S}else return typeof F!="string"?F:V.read(F)}function $(b){if(!(b&&b.storageArea!==n)){if(b&&b.key==null){M.value=D;return}if(!(b&&b.key!==e)){g();try{(b==null?void 0:b.newValue)!==V.write(M.value)&&(M.value=N(b))}catch(F){y(F)}finally{b?In(_):_()}}}}function L(b){$(b.detail)}return M}function wi(e){return Sa("(prefers-color-scheme: dark)",e)}function La(e={}){const{selector:t="html",attribute:n="class",initialValue:r="auto",window:s=Le,storage:o,storageKey:i="vueuse-color-scheme",listenToStorageChanges:l=!0,storageRef:c,emitAuto:a,disableTransition:f=!0}=e,h={auto:"",light:"light",dark:"dark",...e.modes||{}},p=wi({window:s}),y=oe(()=>p.value?"dark":"light"),w=c||(i==null?yi(r):Ur(i,r,o,{window:s,listenToStorageChanges:l})),M=oe(()=>w.value==="auto"?y.value:w.value),D=vi("updateHTMLAttrs",(_,P,T)=>{const N=typeof _=="string"?s==null?void 0:s.document.querySelector(_):bt(_);if(!N)return;let $;if(f&&($=s.document.createElement("style"),$.appendChild(document.createTextNode("*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}")),s.document.head.appendChild($)),P==="class"){const L=T.split(/\s/g);Object.values(h).flatMap(b=>(b||"").split(/\s/g)).filter(Boolean).forEach(b=>{L.includes(b)?N.classList.add(b):N.classList.remove(b)})}else N.setAttribute(P,T);f&&(s.getComputedStyle($).opacity,document.head.removeChild($))});function W(_){var P;D(t,n,(P=h[_])!=null?P:_)}function V(_){e.onChanged?e.onChanged(_,W):W(_)}Ye(M,V,{flush:"post",immediate:!0}),bi(()=>V(M.value));const g=oe({get(){return a?w.value:M.value},set(_){w.value=_}});try{return Object.assign(g,{store:w,system:y,state:M})}catch{return g}}function Ma(e={}){const{valueDark:t="dark",valueLight:n="",window:r=Le}=e,s=La({...e,onChanged:(l,c)=>{var a;e.onChanged?(a=e.onChanged)==null||a.call(e,l==="dark",c,l):c(l)},modes:{dark:t,light:n}}),o=oe(()=>s.system?s.system.value:wi({window:r}).value?"dark":"light");return oe({get(){return s.value==="dark"},set(l){const c=l?"dark":"light";o.value===c?s.value="auto":s.value=c}})}function tr(e){return typeof Window<"u"&&e instanceof Window?e.document.documentElement:typeof Document<"u"&&e instanceof Document?e.documentElement:e}function Lu(e,t,n={}){const{window:r=Le}=n;return Ur(e,t,r==null?void 0:r.localStorage,n)}function Ei(e){const t=window.getComputedStyle(e);if(t.overflowX==="scroll"||t.overflowY==="scroll"||t.overflowX==="auto"&&e.clientWidth1?!0:(t.preventDefault&&t.preventDefault(),!1)}const nr=new WeakMap;function Mu(e,t=!1){const n=le(t);let r=null,s="";Ye(yi(e),l=>{const c=tr(Ne(l));if(c){const a=c;if(nr.get(a)||nr.set(a,a.style.overflow),a.style.overflow!=="hidden"&&(s=a.style.overflow),a.style.overflow==="hidden")return n.value=!0;if(n.value)return a.style.overflow="hidden"}},{immediate:!0});const o=()=>{const l=tr(Ne(e));!l||n.value||(_r&&(r=Xe(l,"touchmove",c=>{Pa(c)},{passive:!1})),l.style.overflow="hidden",n.value=!0)},i=()=>{const l=tr(Ne(e));!l||!n.value||(_r&&(r==null||r()),l.style.overflow=s,nr.delete(l),n.value=!1)};return Vr(i),oe({get(){return n.value},set(l){l?o():i()}})}function Pu(e,t,n={}){const{window:r=Le}=n;return Ur(e,t,r==null?void 0:r.sessionStorage,n)}function Iu(e={}){const{window:t=Le,behavior:n="auto"}=e;if(!t)return{x:le(0),y:le(0)};const r=le(t.scrollX),s=le(t.scrollY),o=oe({get(){return r.value},set(l){scrollTo({left:l,behavior:n})}}),i=oe({get(){return s.value},set(l){scrollTo({top:l,behavior:n})}});return Xe(t,"scroll",()=>{r.value=t.scrollX,s.value=t.scrollY},{capture:!1,passive:!0}),{x:o,y:i}}const Ci=/^(?:[a-z]+:|\/\/)/i,Ia="vitepress-theme-appearance",xi=/#.*$/,Fa=/(index)?\.(md|html)$/,Se=typeof document<"u",Si={relativePath:"",filePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0,isNotFound:!0};function Na(e,t,n=!1){if(t===void 0)return!1;if(e=Vs(`/${e}`),n)return new RegExp(t).test(e);if(Vs(t)!==e)return!1;const r=t.match(xi);return r?(Se?location.hash:"")===r[0]:!0}function Vs(e){return decodeURI(e).replace(xi,"").replace(Fa,"")}function $a(e){return Ci.test(e)}function Ha(e,t){var r,s,o,i,l,c,a;const n=Object.keys(e.locales).find(f=>f!=="root"&&!$a(f)&&Na(t,`/${f}/`,!0))||"root";return Object.assign({},e,{localeIndex:n,lang:((r=e.locales[n])==null?void 0:r.lang)??e.lang,dir:((s=e.locales[n])==null?void 0:s.dir)??e.dir,title:((o=e.locales[n])==null?void 0:o.title)??e.title,titleTemplate:((i=e.locales[n])==null?void 0:i.titleTemplate)??e.titleTemplate,description:((l=e.locales[n])==null?void 0:l.description)??e.description,head:Ai(e.head,((c=e.locales[n])==null?void 0:c.head)??[]),themeConfig:{...e.themeConfig,...(a=e.locales[n])==null?void 0:a.themeConfig}})}function Ti(e,t){const n=t.title||e.title,r=t.titleTemplate??e.titleTemplate;if(typeof r=="string"&&r.includes(":title"))return r.replace(/:title/g,n);const s=ja(e.title,r);return n===s.slice(3)?n:`${n}${s}`}function ja(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function Ba(e,t){const[n,r]=t;if(n!=="meta")return!1;const s=Object.entries(r)[0];return s==null?!1:e.some(([o,i])=>o===n&&i[s[0]]===s[1])}function Ai(e,t){return[...e.filter(n=>!Ba(t,n)),...t]}const Da=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,Va=/^[a-z]:/i;function Us(e){const t=Va.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(Da,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const Ua=new Set("3g2,3gp,7z,aac,abw,ai,aif,aifc,aiff,arc,asf,asr,asx,au,avi,avif,axs,azw,bin,bmp,bz,bz2,c,cda,cer,class,crl,crt,csh,css,csv,dcr,der,dll,doc,docx,eot,eps,epub,exe,gif,gtar,gz,gzip,ico,ics,ief,jar,jpe,jpeg,jpg,js,json,jsonld,latex,m3u,man,mdb,mht,mhtml,mid,midi,mjs,mov,mp2,mp3,mp4,mpa,mpe,mpeg,mpg,mpkg,mpp,odp,ods,odt,oga,ogv,ogx,opus,otf,p10,p12,p7b,p7c,p7m,p7r,p7s,pbm,pdf,pfx,php,png,ppt,pptx,ps,pub,qt,rar,roff,rtf,rtx,ser,sh,spc,svg,swf,t,tar,tcl,tex,texi,texinfo,tgz,tif,tiff,tr,ts,tsv,ttf,txt,ua,viv,vivo,vsd,wav,weba,webm,webp,woff,woff2,xbm,xhtml,xls,xlsx,xml,xul,zip,conf".split(","));function ka(e){const t=e.split(".").pop();return t==null||!Ua.has(t.toLowerCase())}function Fu(e){return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}const Ka=Symbol(),ht=Ir(ha);function Nu(e){const t=oe(()=>Ha(ht.value,e.data.relativePath)),n=t.value.appearance,r=n==="force-dark"?le(!0):n?Ma({storageKey:Ia,initialValue:()=>typeof n=="string"?n:"auto",...typeof n=="object"?n:{}}):le(!1);return{site:t,theme:oe(()=>t.value.themeConfig),page:oe(()=>e.data),frontmatter:oe(()=>e.data.frontmatter),params:oe(()=>e.data.params),lang:oe(()=>t.value.lang),dir:oe(()=>e.data.frontmatter.dir||t.value.dir),localeIndex:oe(()=>t.value.localeIndex||"root"),title:oe(()=>Ti(t.value,e.data)),description:oe(()=>e.data.description||t.value.description),isDark:r}}function Wa(){const e=Tt(Ka);if(!e)throw new Error("vitepress data not properly injected in app");return e}function qa(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function ks(e){return Ci.test(e)||!e.startsWith("/")?e:qa(ht.value.base,e)}function Ga(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),Se){const n="/youqu3/";t=Us(t.slice(n.length).replace(/\//g,"_")||"index")+".md";let r=__VP_HASH_MAP__[t.toLowerCase()];if(r||(t=t.endsWith("_index.md")?t.slice(0,-9)+".md":t.slice(0,-3)+"_index.md",r=__VP_HASH_MAP__[t.toLowerCase()]),!r)return null;t=`${n}assets/${t}.${r}.js`}else t=`./${Us(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}let yn=[];function $u(e){yn.push(e),Hn(()=>{yn=yn.filter(t=>t!==e)})}const za=Symbol(),Ri="http://a.com",Ya=()=>({path:"/",component:null,data:Si});function Hu(e,t){const n=Mn(Ya()),r={route:n,go:s};async function s(l=Se?location.href:"/"){var c,a;l=Tn(l),await((c=r.onBeforeRouteChange)==null?void 0:c.call(r,l))!==!1&&(qs(l),await i(l),await((a=r.onAfterRouteChanged)==null?void 0:a.call(r,l)))}let o=null;async function i(l,c=0,a=!1){var p;if(await((p=r.onBeforePageLoad)==null?void 0:p.call(r,l))===!1)return;const f=new URL(l,Ri),h=o=f.pathname;try{let y=await e(h);if(!y)throw new Error(`Page not found: ${h}`);if(o===h){o=null;const{default:w,__pageData:M}=y;if(!w)throw new Error(`Invalid route component: ${w}`);n.path=Se?h:ks(h),n.component=pn(w),n.data=pn(M),Se&&In(()=>{let D=ht.value.base+M.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");if(!ht.value.cleanUrls&&!D.endsWith("/")&&(D+=".html"),D!==f.pathname&&(f.pathname=D,l=D+f.search+f.hash,history.replaceState(null,"",l)),f.hash&&!c){let W=null;try{W=document.getElementById(decodeURIComponent(f.hash).slice(1))}catch(V){console.warn(V)}if(W){Ks(W,f.hash);return}}window.scrollTo(0,c)})}}catch(y){if(!/fetch|Page not found/.test(y.message)&&!/^\/404(\.html|\/)?$/.test(l)&&console.error(y),!a)try{const w=await fetch(ht.value.base+"hashmap.json");window.__VP_HASH_MAP__=await w.json(),await i(l,c,!0);return}catch{}o===h&&(o=null,n.path=Se?h:ks(h),n.component=t?pn(t):null,n.data=Si)}}return Se&&(window.addEventListener("click",l=>{if(l.target.closest("button"))return;const a=l.target.closest("a");if(a&&!a.closest(".vp-raw")&&(a instanceof SVGElement||!a.download)){const{target:f}=a,{href:h,origin:p,pathname:y,hash:w,search:M}=new URL(a.href instanceof SVGAnimatedString?a.href.animVal:a.href,a.baseURI),D=window.location;!l.ctrlKey&&!l.shiftKey&&!l.altKey&&!l.metaKey&&!f&&p===D.origin&&ka(y)&&(l.preventDefault(),y===D.pathname&&M===D.search?(w!==D.hash&&(history.pushState(null,"",w),window.dispatchEvent(new Event("hashchange"))),w?Ks(a,w,a.classList.contains("header-anchor")):(qs(h),window.scrollTo(0,0))):s(h))}},{capture:!0}),window.addEventListener("popstate",async l=>{var c;await i(Tn(location.href),l.state&&l.state.scrollPosition||0),(c=r.onAfterRouteChanged)==null||c.call(r,location.href)}),window.addEventListener("hashchange",l=>{l.preventDefault()})),r}function Ja(){const e=Tt(za);if(!e)throw new Error("useRouter() is called without provider.");return e}function Oi(){return Ja().route}function Ks(e,t,n=!1){let r=null;try{r=e.classList.contains("header-anchor")?e:document.getElementById(decodeURIComponent(t).slice(1))}catch(s){console.warn(s)}if(r){let s=function(){!n||Math.abs(a-window.scrollY)>window.innerHeight?window.scrollTo(0,a):window.scrollTo({left:0,top:a,behavior:"smooth"})},o=ht.value.scrollOffset,i=0,l=24;if(typeof o=="object"&&"padding"in o&&(l=o.padding,o=o.selector),typeof o=="number")i=o;else if(typeof o=="string")i=Ws(o,l);else if(Array.isArray(o))for(const f of o){const h=Ws(f,l);if(h){i=h;break}}const c=parseInt(window.getComputedStyle(r).paddingTop,10),a=window.scrollY+r.getBoundingClientRect().top-i+c;requestAnimationFrame(s)}}function Ws(e,t){const n=document.querySelector(e);if(!n)return 0;const r=n.getBoundingClientRect().bottom;return r<0?0:r+t}function qs(e){Se&&Tn(e)!==Tn(location.href)&&(history.replaceState({scrollPosition:window.scrollY},document.title),history.pushState(null,"",e))}function Tn(e){const t=new URL(e,Ri);return t.pathname=t.pathname.replace(/(^|\/)index(\.html)?$/,"$1"),ht.value.cleanUrls?t.pathname=t.pathname.replace(/\.html$/,""):!t.pathname.endsWith("/")&&!t.pathname.endsWith(".html")&&(t.pathname+=".html"),t.pathname+t.search+t.hash}const rr=()=>yn.forEach(e=>e()),ju=Nr({name:"VitePressContent",props:{as:{type:[Object,String],default:"div"}},setup(e){const t=Oi(),{site:n}=Wa();return()=>yr(e.as,n.value.contentProps??{style:{position:"relative"}},[t.component?yr(t.component,{onVnodeMounted:rr,onVnodeUpdated:rr,onVnodeUnmounted:rr}):"404 Page Not Found"])}}),Bu=(e,t)=>{const n=e.__vccOpts||e;for(const[r,s]of t)n[r]=s;return n},Xa="modulepreload",Qa=function(e){return"/youqu3/"+e},Gs={},Du=function(t,n,r){let s=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const o=document.querySelector("meta[property=csp-nonce]"),i=(o==null?void 0:o.nonce)||(o==null?void 0:o.getAttribute("nonce"));s=Promise.all(n.map(l=>{if(l=Qa(l),l in Gs)return;Gs[l]=!0;const c=l.endsWith(".css"),a=c?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${l}"]${a}`))return;const f=document.createElement("link");if(f.rel=c?"stylesheet":Xa,c||(f.as="script",f.crossOrigin=""),f.href=l,i&&f.setAttribute("nonce",i),document.head.appendChild(f),c)return new Promise((h,p)=>{f.addEventListener("load",h),f.addEventListener("error",()=>p(new Error(`Unable to preload CSS for ${l}`)))})}))}return s.then(()=>t()).catch(o=>{const i=new Event("vite:preloadError",{cancelable:!0});if(i.payload=o,window.dispatchEvent(i),!i.defaultPrevented)throw o})},Vu="/youqu3/%E6%8C%87%E5%8D%97/%E4%B8%8E%E7%94%9F%E4%BF%B1%E6%9D%A5/assert.png",Uu="/youqu3/init.gif",ku="/youqu3/%E6%8C%87%E5%8D%97/%E4%B8%8E%E7%94%9F%E4%BF%B1%E6%9D%A5/remote_control.png",Ku="/youqu3/logo.png",Wu="/youqu3/install.gif",qu="/youqu3/%E6%8F%92%E4%BB%B6/%E6%97%A5%E5%BF%97/log.png",Gu="/youqu3/%E6%8F%92%E4%BB%B6/%E6%97%A5%E5%BF%97/inside.png",zu="/youqu3/%E6%8F%92%E4%BB%B6/%E6%97%A5%E5%BF%97/outside.png",Yu="/youqu3/%E8%AE%BE%E8%AE%A1/YouQu3%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1.drawio.png",Ju="/youqu3/%E8%AE%BE%E8%AE%A1/YouQu3%E6%9E%B6%E6%9E%84%E6%80%BB%E8%A7%88.drawio.png",Xu=Nr({setup(e,{slots:t}){const n=le(!1);return Rt(()=>{n.value=!0}),()=>n.value&&t.default?t.default():null}});function Qu(){Se&&window.addEventListener("click",e=>{var n;const t=e.target;if(t.matches(".vp-code-group input")){const r=(n=t.parentElement)==null?void 0:n.parentElement;if(!r)return;const s=Array.from(r.querySelectorAll("input")).indexOf(t);if(s<0)return;const o=r.querySelector(".blocks");if(!o)return;const i=Array.from(o.children).find(a=>a.classList.contains("active"));if(!i)return;const l=o.children[s];if(!l||i===l)return;i.classList.remove("active"),l.classList.add("active");const c=r==null?void 0:r.querySelector(`label[for="${t.id}"]`);c==null||c.scrollIntoView({block:"nearest"})}})}function Zu(){if(Se){const e=new WeakMap;window.addEventListener("click",t=>{var r;const n=t.target;if(n.matches('div[class*="language-"] > button.copy')){const s=n.parentElement,o=(r=n.nextElementSibling)==null?void 0:r.nextElementSibling;if(!s||!o)return;const i=/language-(shellscript|shell|bash|sh|zsh)/.test(s.className),l=[".vp-copy-ignore",".diff.remove"],c=o.cloneNode(!0);c.querySelectorAll(l.join(",")).forEach(f=>f.remove());let a=c.textContent||"";i&&(a=a.replace(/^ *(\$|>) /gm,"").trim()),Za(a).then(()=>{n.classList.add("copied"),clearTimeout(e.get(n));const f=setTimeout(()=>{n.classList.remove("copied"),n.blur(),e.delete(n)},2e3);e.set(n,f)})}})}}async function Za(e){try{return navigator.clipboard.writeText(e)}catch{const t=document.createElement("textarea"),n=document.activeElement;t.value=e,t.setAttribute("readonly",""),t.style.contain="strict",t.style.position="absolute",t.style.left="-9999px",t.style.fontSize="12pt";const r=document.getSelection(),s=r?r.rangeCount>0&&r.getRangeAt(0):null;document.body.appendChild(t),t.select(),t.selectionStart=0,t.selectionEnd=e.length,document.execCommand("copy"),document.body.removeChild(t),s&&(r.removeAllRanges(),r.addRange(s)),n&&n.focus()}}function ef(e,t){let n=[],r=!0;const s=o=>{if(r){r=!1;return}const i=o.map(zs);n.forEach((l,c)=>{const a=i.findIndex(f=>f==null?void 0:f.isEqualNode(l??null));a!==-1?delete i[a]:(l==null||l.remove(),delete n[c])}),i.forEach(l=>l&&document.head.appendChild(l)),n=[...n,...i].filter(Boolean)};Br(()=>{const o=e.data,i=t.value,l=o&&o.description,c=o&&o.frontmatter.head||[],a=Ti(i,o);a!==document.title&&(document.title=a);const f=l||i.description;let h=document.querySelector("meta[name=description]");h?h.getAttribute("content")!==f&&h.setAttribute("content",f):zs(["meta",{name:"description",content:f}]),s(Ai(i.head,tu(c)))})}function zs([e,t,n]){const r=document.createElement(e);for(const s in t)r.setAttribute(s,t[s]);return n&&(r.innerHTML=n),e==="script"&&!t.async&&(r.async=!1),r}function eu(e){return e[0]==="meta"&&e[1]&&e[1].name==="description"}function tu(e){return e.filter(t=>!eu(t))}const sr=new Set,Li=()=>document.createElement("link"),nu=e=>{const t=Li();t.rel="prefetch",t.href=e,document.head.appendChild(t)},ru=e=>{const t=new XMLHttpRequest;t.open("GET",e,t.withCredentials=!0),t.send()};let fn;const su=Se&&(fn=Li())&&fn.relList&&fn.relList.supports&&fn.relList.supports("prefetch")?nu:ru;function tf(){if(!Se||!window.IntersectionObserver)return;let e;if((e=navigator.connection)&&(e.saveData||/2g/.test(e.effectiveType)))return;const t=window.requestIdleCallback||setTimeout;let n=null;const r=()=>{n&&n.disconnect(),n=new IntersectionObserver(o=>{o.forEach(i=>{if(i.isIntersecting){const l=i.target;n.unobserve(l);const{pathname:c}=l;if(!sr.has(c)){sr.add(c);const a=Ga(c);a&&su(a)}}})}),t(()=>{document.querySelectorAll("#app a").forEach(o=>{const{hostname:i,pathname:l}=new URL(o.href instanceof SVGAnimatedString?o.href.animVal:o.href,o.baseURI),c=l.match(/\.\w+$/);c&&c[0]!==".html"||o.target!=="_blank"&&i===location.hostname&&(l!==location.pathname?n.observe(o):sr.add(l))})})};Rt(r);const s=Oi();Ye(()=>s.path,r),Hn(()=>{n&&n.disconnect()})}export{hu as $,Hn as A,mu as B,Bl as C,au as D,fu as E,ye as F,Ir as G,$u as H,ie as I,uu as J,Ci as K,Oi as L,Rc as M,Tt as N,Ru as O,Ou as P,Cr as Q,In as R,Iu as S,ai as T,_u as U,Pn as V,cu as W,Du as X,Mu as Y,Zl as Z,Bu as _,oi as a,Eu as a0,wu as a1,pu as a2,xu as a3,yr as a4,Cu as a5,Vu as a6,Uu as a7,ku as a8,Ku as a9,Xe as aA,Lo as aB,lu as aC,vu as aD,de as aE,gu as aF,pn as aG,Fu as aH,Wu as aa,qu as ab,Gu as ac,zu as ad,Yu as ae,Ju as af,ef as ag,za as ah,Nu as ai,Ka as aj,ju as ak,Xu as al,ht as am,Su as an,Hu as ao,Ga as ap,tf as aq,Zu as ar,Qu as as,bt as at,Vr as au,Au as av,Pu as aw,Lu as ax,Tu as ay,Ja as az,ni as b,yu as c,Nr as d,bu as e,ka as f,ks as g,le as h,$a as i,Se as j,oe as k,Rt as l,si as m,xr as n,ei as o,vo as p,ou as q,du as r,iu as s,Wi as t,Wa as u,Na as v,Ll as w,Sa as x,Ye as y,Br as z}; +**/const jc="http://www.w3.org/2000/svg",Dc="http://www.w3.org/1998/Math/MathML",He=typeof document<"u"?document:null,Es=He&&He.createElement("template"),Vc={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{const s=t==="svg"?He.createElementNS(jc,e):t==="mathml"?He.createElementNS(Dc,e):n?He.createElement(e,{is:n}):He.createElement(e);return e==="select"&&r&&r.multiple!=null&&s.setAttribute("multiple",r.multiple),s},createText:e=>He.createTextNode(e),createComment:e=>He.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>He.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,r,s,o){const i=n?n.previousSibling:t.lastChild;if(s&&(s===o||s.nextSibling))for(;t.insertBefore(s.cloneNode(!0),n),!(s===o||!(s=s.nextSibling)););else{Es.innerHTML=r==="svg"?`${e}`:r==="mathml"?`${e}`:e;const l=Es.content;if(r==="svg"||r==="mathml"){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[i?i.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Be="transition",Mt="animation",Kt=Symbol("_vtc"),ai=(e,{slots:t})=>yr(Il,Bc(e),t);ai.displayName="Transition";const ui={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String};ai.props=fe({},So,ui);const it=(e,t=[])=>{k(e)?e.forEach(n=>n(...t)):e&&e(...t)},Cs=e=>e?k(e)?e.some(t=>t.length>1):e.length>1:!1;function Bc(e){const t={};for(const S in e)S in ui||(t[S]=e[S]);if(e.css===!1)return t;const{name:n="v",type:r,duration:s,enterFromClass:o=`${n}-enter-from`,enterActiveClass:i=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:c=o,appearActiveClass:a=i,appearToClass:f=l,leaveFromClass:h=`${n}-leave-from`,leaveActiveClass:p=`${n}-leave-active`,leaveToClass:y=`${n}-leave-to`}=e,w=Uc(s),M=w&&w[0],V=w&&w[1],{onBeforeEnter:W,onEnter:B,onEnterCancelled:g,onLeave:_,onLeaveCancelled:P,onBeforeAppear:T=W,onAppear:N=B,onAppearCancelled:$=g}=t,L=(S,G,ee)=>{lt(S,G?f:l),lt(S,G?a:i),ee&&ee()},b=(S,G)=>{S._isLeaving=!1,lt(S,h),lt(S,y),lt(S,p),G&&G()},F=S=>(G,ee)=>{const re=S?N:B,U=()=>L(G,S,ee);it(re,[G,U]),xs(()=>{lt(G,S?c:o),Ue(G,S?f:l),Cs(re)||Ss(G,r,M,U)})};return fe(t,{onBeforeEnter(S){it(W,[S]),Ue(S,o),Ue(S,i)},onBeforeAppear(S){it(T,[S]),Ue(S,c),Ue(S,a)},onEnter:F(!1),onAppear:F(!0),onLeave(S,G){S._isLeaving=!0;const ee=()=>b(S,G);Ue(S,h),Ue(S,p),Wc(),xs(()=>{S._isLeaving&&(lt(S,h),Ue(S,y),Cs(_)||Ss(S,r,V,ee))}),it(_,[S,ee])},onEnterCancelled(S){L(S,!1),it(g,[S])},onAppearCancelled(S){L(S,!0),it($,[S])},onLeaveCancelled(S){b(S),it(P,[S])}})}function Uc(e){if(e==null)return null;if(Z(e))return[Xn(e.enter),Xn(e.leave)];{const t=Xn(e);return[t,t]}}function Xn(e){return ji(e)}function Ue(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Kt]||(e[Kt]=new Set)).add(t)}function lt(e,t){t.split(/\s+/).forEach(r=>r&&e.classList.remove(r));const n=e[Kt];n&&(n.delete(t),n.size||(e[Kt]=void 0))}function xs(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let kc=0;function Ss(e,t,n,r){const s=e._endId=++kc,o=()=>{s===e._endId&&r()};if(n)return setTimeout(o,n);const{type:i,timeout:l,propCount:c}=Kc(e,t);if(!i)return r();const a=i+"end";let f=0;const h=()=>{e.removeEventListener(a,p),o()},p=y=>{y.target===e&&++f>=c&&h()};setTimeout(()=>{f(n[w]||"").split(", "),s=r(`${Be}Delay`),o=r(`${Be}Duration`),i=Ts(s,o),l=r(`${Mt}Delay`),c=r(`${Mt}Duration`),a=Ts(l,c);let f=null,h=0,p=0;t===Be?i>0&&(f=Be,h=i,p=o.length):t===Mt?a>0&&(f=Mt,h=a,p=c.length):(h=Math.max(i,a),f=h>0?i>a?Be:Mt:null,p=f?f===Be?o.length:c.length:0);const y=f===Be&&/\b(transform|all)(,|$)/.test(r(`${Be}Property`).toString());return{type:f,timeout:h,propCount:p,hasTransform:y}}function Ts(e,t){for(;e.lengthAs(n)+As(e[r])))}function As(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function Wc(){return document.body.offsetHeight}function qc(e,t,n){const r=e[Kt];r&&(t=(t?[t,...r]:[...r]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Rs=Symbol("_vod"),Gc=Symbol("_vsh"),zc=Symbol(""),Yc=/(^|;)\s*display\s*:/;function Jc(e,t,n){const r=e.style,s=se(n);let o=!1;if(n&&!s){if(t)if(se(t))for(const i of t.split(";")){const l=i.slice(0,i.indexOf(":")).trim();n[l]==null&&mn(r,l,"")}else for(const i in t)n[i]==null&&mn(r,i,"");for(const i in n)i==="display"&&(o=!0),mn(r,i,n[i])}else if(s){if(t!==n){const i=r[zc];i&&(n+=";"+i),r.cssText=n,o=Yc.test(n)}}else t&&e.removeAttribute("style");Rs in e&&(e[Rs]=o?r.display:"",e[Gc]&&(r.display="none"))}const Os=/\s*!important$/;function mn(e,t,n){if(k(n))n.forEach(r=>mn(e,t,r));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const r=Xc(e,t);Os.test(n)?e.setProperty(tt(r),n.replace(Os,""),"important"):e[r]=n}}const Ls=["Webkit","Moz","ms"],Qn={};function Xc(e,t){const n=Qn[t];if(n)return n;let r=Oe(t);if(r!=="filter"&&r in e)return Qn[t]=r;r=On(r);for(let s=0;sZn||(na.then(()=>Zn=0),Zn=Date.now());function sa(e,t){const n=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=n.attached)return;Ae(oa(r,n.value),t,5,[r])};return n.value=e,n.attached=ra(),n}function oa(e,t){if(k(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(r=>s=>!s._stopped&&r&&r(s))}else return t}const Ns=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,ia=(e,t,n,r,s,o)=>{const i=s==="svg";t==="class"?qc(e,r,i):t==="style"?Jc(e,n,r):Wt(t)?vr(t)||ea(e,t,n,r,o):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):la(e,t,r,i))?(Qc(e,t,r),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Ps(e,t,r,i,o,t!=="value")):(t==="true-value"?e._trueValue=r:t==="false-value"&&(e._falseValue=r),Ps(e,t,r,i))};function la(e,t,n,r){if(r)return!!(t==="innerHTML"||t==="textContent"||t in e&&Ns(t)&&K(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const s=e.tagName;if(s==="IMG"||s==="VIDEO"||s==="CANVAS"||s==="SOURCE")return!1}return Ns(t)&&se(n)?!1:t in e}const $s=e=>{const t=e.props["onUpdate:modelValue"]||!1;return k(t)?n=>hn(t,n):t};function ca(e){e.target.composing=!0}function Hs(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const er=Symbol("_assign"),vu={created(e,{modifiers:{lazy:t,trim:n,number:r}},s){e[er]=$s(s);const o=r||s.props&&s.props.type==="number";_t(e,t?"change":"input",i=>{if(i.target.composing)return;let l=e.value;n&&(l=l.trim()),o&&(l=or(l)),e[er](l)}),n&&_t(e,"change",()=>{e.value=e.value.trim()}),t||(_t(e,"compositionstart",ca),_t(e,"compositionend",Hs),_t(e,"change",Hs))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:r,trim:s,number:o}},i){if(e[er]=$s(i),e.composing)return;const l=(o||e.type==="number")&&!/^0\d/.test(e.value)?or(e.value):e.value,c=t??"";l!==c&&(document.activeElement===e&&e.type!=="range"&&(r&&t===n||s&&e.value.trim()===c)||(e.value=c))}},aa=["ctrl","shift","alt","meta"],ua={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>aa.some(n=>e[`${n}Key`]&&!t.includes(n))},wu=(e,t)=>{const n=e._withMods||(e._withMods={}),r=t.join(".");return n[r]||(n[r]=(s,...o)=>{for(let i=0;i{const n=e._withKeys||(e._withKeys={}),r=t.join(".");return n[r]||(n[r]=s=>{if(!("key"in s))return;const o=tt(s.key);if(t.some(i=>i===o||fa[i]===o))return e(s)})},fi=fe({patchProp:ia},Vc);let Dt,js=!1;function di(){return Dt||(Dt=dc(fi))}function da(){return Dt=js?Dt:hc(fi),js=!0,Dt}const Cu=(...e)=>{di().render(...e)},xu=(...e)=>{const t=di().createApp(...e),{mount:n}=t;return t.mount=r=>{const s=pi(r);if(!s)return;const o=t._component;!K(o)&&!o.render&&!o.template&&(o.template=s.innerHTML),s.innerHTML="";const i=n(s,!1,hi(s));return s instanceof Element&&(s.removeAttribute("v-cloak"),s.setAttribute("data-v-app","")),i},t},Su=(...e)=>{const t=da().createApp(...e),{mount:n}=t;return t.mount=r=>{const s=pi(r);if(s)return n(s,!0,hi(s))},t};function hi(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function pi(e){return se(e)?document.querySelector(e):e}const ha=window.__VP_SITE_DATA__;function Br(e){return so()?(zi(e),!0):!1}function Ne(e){return typeof e=="function"?e():vo(e)}const gi=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const pa=Object.prototype.toString,ga=e=>pa.call(e)==="[object Object]",Je=()=>{},_r=ma();function ma(){var e,t;return gi&&((e=window==null?void 0:window.navigator)==null?void 0:e.userAgent)&&(/iP(?:ad|hone|od)/.test(window.navigator.userAgent)||((t=window==null?void 0:window.navigator)==null?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test(window==null?void 0:window.navigator.userAgent))}function ya(e,t){function n(...r){return new Promise((s,o)=>{Promise.resolve(e(()=>t.apply(this,r),{fn:t,thisArg:this,args:r})).then(s).catch(o)})}return n}const mi=e=>e();function _a(e,t={}){let n,r,s=Je;const o=l=>{clearTimeout(l),s(),s=Je};return l=>{const c=Ne(e),a=Ne(t.maxWait);return n&&o(n),c<=0||a!==void 0&&a<=0?(r&&(o(r),r=null),Promise.resolve(l())):new Promise((f,h)=>{s=t.rejectOnCancel?h:f,a&&!r&&(r=setTimeout(()=>{n&&o(n),r=null,f(l())},a)),n=setTimeout(()=>{r&&o(r),r=null,f(l())},c)})}}function ba(e=mi){const t=le(!0);function n(){t.value=!1}function r(){t.value=!0}const s=(...o)=>{t.value&&e(...o)};return{isActive:Pn(t),pause:n,resume:r,eventFilter:s}}function va(e){return Vn()}function yi(...e){if(e.length!==1)return Cl(...e);const t=e[0];return typeof t=="function"?Pn(vl(()=>({get:t,set:Je}))):le(t)}function _i(e,t,n={}){const{eventFilter:r=mi,...s}=n;return Ye(e,ya(r,t),s)}function wa(e,t,n={}){const{eventFilter:r,...s}=n,{eventFilter:o,pause:i,resume:l,isActive:c}=ba(r);return{stop:_i(e,t,{...s,eventFilter:o}),pause:i,resume:l,isActive:c}}function bi(e,t=!0,n){va()?Rt(e,n):t?e():In(e)}function Tu(e,t,n={}){const{debounce:r=0,maxWait:s=void 0,...o}=n;return _i(e,t,{...o,eventFilter:_a(r,{maxWait:s})})}function Au(e,t,n){let r;de(n)?r={evaluating:n}:r={};const{lazy:s=!1,evaluating:o=void 0,shallow:i=!0,onError:l=Je}=r,c=le(!s),a=i?Ir(t):le(t);let f=0;return Dr(async h=>{if(!c.value)return;f++;const p=f;let y=!1;o&&Promise.resolve().then(()=>{o.value=!0});try{const w=await e(M=>{h(()=>{o&&(o.value=!1),y||M()})});p===f&&(a.value=w)}catch(w){l(w)}finally{o&&p===f&&(o.value=!1),y=!0}}),s?oe(()=>(c.value=!0,a.value)):a}function bt(e){var t;const n=Ne(e);return(t=n==null?void 0:n.$el)!=null?t:n}const Le=gi?window:void 0;function Xe(...e){let t,n,r,s;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,r,s]=e,t=Le):[t,n,r,s]=e,!t)return Je;Array.isArray(n)||(n=[n]),Array.isArray(r)||(r=[r]);const o=[],i=()=>{o.forEach(f=>f()),o.length=0},l=(f,h,p,y)=>(f.addEventListener(h,p,y),()=>f.removeEventListener(h,p,y)),c=Ye(()=>[bt(t),Ne(s)],([f,h])=>{if(i(),!f)return;const p=ga(h)?{...h}:h;o.push(...n.flatMap(y=>r.map(w=>l(f,y,w,p))))},{immediate:!0,flush:"post"}),a=()=>{c(),i()};return Br(a),a}let Ds=!1;function Ru(e,t,n={}){const{window:r=Le,ignore:s=[],capture:o=!0,detectIframe:i=!1}=n;if(!r)return Je;_r&&!Ds&&(Ds=!0,Array.from(r.document.body.children).forEach(p=>p.addEventListener("click",Je)),r.document.documentElement.addEventListener("click",Je));let l=!0;const c=p=>s.some(y=>{if(typeof y=="string")return Array.from(r.document.querySelectorAll(y)).some(w=>w===p.target||p.composedPath().includes(w));{const w=bt(y);return w&&(p.target===w||p.composedPath().includes(w))}}),f=[Xe(r,"click",p=>{const y=bt(e);if(!(!y||y===p.target||p.composedPath().includes(y))){if(p.detail===0&&(l=!c(p)),!l){l=!0;return}t(p)}},{passive:!0,capture:o}),Xe(r,"pointerdown",p=>{const y=bt(e);l=!c(p)&&!!(y&&!p.composedPath().includes(y))},{passive:!0}),i&&Xe(r,"blur",p=>{setTimeout(()=>{var y;const w=bt(e);((y=r.document.activeElement)==null?void 0:y.tagName)==="IFRAME"&&!(w!=null&&w.contains(r.document.activeElement))&&t(p)},0)})].filter(Boolean);return()=>f.forEach(p=>p())}function Ea(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function Ou(...e){let t,n,r={};e.length===3?(t=e[0],n=e[1],r=e[2]):e.length===2?typeof e[1]=="object"?(t=!0,n=e[0],r=e[1]):(t=e[0],n=e[1]):(t=!0,n=e[0]);const{target:s=Le,eventName:o="keydown",passive:i=!1,dedupe:l=!1}=r,c=Ea(t);return Xe(s,o,f=>{f.repeat&&Ne(l)||c(f)&&n(f)},i)}function Ca(){const e=le(!1),t=Vn();return t&&Rt(()=>{e.value=!0},t),e}function xa(e){const t=Ca();return oe(()=>(t.value,!!e()))}function Sa(e,t={}){const{window:n=Le}=t,r=xa(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let s;const o=le(!1),i=a=>{o.value=a.matches},l=()=>{s&&("removeEventListener"in s?s.removeEventListener("change",i):s.removeListener(i))},c=Dr(()=>{r.value&&(l(),s=n.matchMedia(Ne(e)),"addEventListener"in s?s.addEventListener("change",i):s.addListener(i),o.value=s.matches)});return Br(()=>{c(),l(),s=void 0}),o}const an=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},un="__vueuse_ssr_handlers__",Ta=Aa();function Aa(){return un in an||(an[un]=an[un]||{}),an[un]}function vi(e,t){return Ta[e]||t}function Ra(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}const Oa={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},Vs="vueuse-storage";function Ur(e,t,n,r={}){var s;const{flush:o="pre",deep:i=!0,listenToStorageChanges:l=!0,writeDefaults:c=!0,mergeDefaults:a=!1,shallow:f,window:h=Le,eventFilter:p,onError:y=b=>{console.error(b)},initOnMounted:w}=r,M=(f?Ir:le)(typeof t=="function"?t():t);if(!n)try{n=vi("getDefaultStorage",()=>{var b;return(b=Le)==null?void 0:b.localStorage})()}catch(b){y(b)}if(!n)return M;const V=Ne(t),W=Ra(V),B=(s=r.serializer)!=null?s:Oa[W],{pause:g,resume:_}=wa(M,()=>T(M.value),{flush:o,deep:i,eventFilter:p});h&&l&&bi(()=>{Xe(h,"storage",$),Xe(h,Vs,L),w&&$()}),w||$();function P(b,F){h&&h.dispatchEvent(new CustomEvent(Vs,{detail:{key:e,oldValue:b,newValue:F,storageArea:n}}))}function T(b){try{const F=n.getItem(e);if(b==null)P(F,null),n.removeItem(e);else{const S=B.write(b);F!==S&&(n.setItem(e,S),P(F,S))}}catch(F){y(F)}}function N(b){const F=b?b.newValue:n.getItem(e);if(F==null)return c&&V!=null&&n.setItem(e,B.write(V)),V;if(!b&&a){const S=B.read(F);return typeof a=="function"?a(S,V):W==="object"&&!Array.isArray(S)?{...V,...S}:S}else return typeof F!="string"?F:B.read(F)}function $(b){if(!(b&&b.storageArea!==n)){if(b&&b.key==null){M.value=V;return}if(!(b&&b.key!==e)){g();try{(b==null?void 0:b.newValue)!==B.write(M.value)&&(M.value=N(b))}catch(F){y(F)}finally{b?In(_):_()}}}}function L(b){$(b.detail)}return M}function wi(e){return Sa("(prefers-color-scheme: dark)",e)}function La(e={}){const{selector:t="html",attribute:n="class",initialValue:r="auto",window:s=Le,storage:o,storageKey:i="vueuse-color-scheme",listenToStorageChanges:l=!0,storageRef:c,emitAuto:a,disableTransition:f=!0}=e,h={auto:"",light:"light",dark:"dark",...e.modes||{}},p=wi({window:s}),y=oe(()=>p.value?"dark":"light"),w=c||(i==null?yi(r):Ur(i,r,o,{window:s,listenToStorageChanges:l})),M=oe(()=>w.value==="auto"?y.value:w.value),V=vi("updateHTMLAttrs",(_,P,T)=>{const N=typeof _=="string"?s==null?void 0:s.document.querySelector(_):bt(_);if(!N)return;let $;if(f&&($=s.document.createElement("style"),$.appendChild(document.createTextNode("*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}")),s.document.head.appendChild($)),P==="class"){const L=T.split(/\s/g);Object.values(h).flatMap(b=>(b||"").split(/\s/g)).filter(Boolean).forEach(b=>{L.includes(b)?N.classList.add(b):N.classList.remove(b)})}else N.setAttribute(P,T);f&&(s.getComputedStyle($).opacity,document.head.removeChild($))});function W(_){var P;V(t,n,(P=h[_])!=null?P:_)}function B(_){e.onChanged?e.onChanged(_,W):W(_)}Ye(M,B,{flush:"post",immediate:!0}),bi(()=>B(M.value));const g=oe({get(){return a?w.value:M.value},set(_){w.value=_}});try{return Object.assign(g,{store:w,system:y,state:M})}catch{return g}}function Ma(e={}){const{valueDark:t="dark",valueLight:n="",window:r=Le}=e,s=La({...e,onChanged:(l,c)=>{var a;e.onChanged?(a=e.onChanged)==null||a.call(e,l==="dark",c,l):c(l)},modes:{dark:t,light:n}}),o=oe(()=>s.system?s.system.value:wi({window:r}).value?"dark":"light");return oe({get(){return s.value==="dark"},set(l){const c=l?"dark":"light";o.value===c?s.value="auto":s.value=c}})}function tr(e){return typeof Window<"u"&&e instanceof Window?e.document.documentElement:typeof Document<"u"&&e instanceof Document?e.documentElement:e}function Lu(e,t,n={}){const{window:r=Le}=n;return Ur(e,t,r==null?void 0:r.localStorage,n)}function Ei(e){const t=window.getComputedStyle(e);if(t.overflowX==="scroll"||t.overflowY==="scroll"||t.overflowX==="auto"&&e.clientWidth1?!0:(t.preventDefault&&t.preventDefault(),!1)}const nr=new WeakMap;function Mu(e,t=!1){const n=le(t);let r=null,s="";Ye(yi(e),l=>{const c=tr(Ne(l));if(c){const a=c;if(nr.get(a)||nr.set(a,a.style.overflow),a.style.overflow!=="hidden"&&(s=a.style.overflow),a.style.overflow==="hidden")return n.value=!0;if(n.value)return a.style.overflow="hidden"}},{immediate:!0});const o=()=>{const l=tr(Ne(e));!l||n.value||(_r&&(r=Xe(l,"touchmove",c=>{Pa(c)},{passive:!1})),l.style.overflow="hidden",n.value=!0)},i=()=>{const l=tr(Ne(e));!l||!n.value||(_r&&(r==null||r()),l.style.overflow=s,nr.delete(l),n.value=!1)};return Br(i),oe({get(){return n.value},set(l){l?o():i()}})}function Pu(e,t,n={}){const{window:r=Le}=n;return Ur(e,t,r==null?void 0:r.sessionStorage,n)}function Iu(e={}){const{window:t=Le,behavior:n="auto"}=e;if(!t)return{x:le(0),y:le(0)};const r=le(t.scrollX),s=le(t.scrollY),o=oe({get(){return r.value},set(l){scrollTo({left:l,behavior:n})}}),i=oe({get(){return s.value},set(l){scrollTo({top:l,behavior:n})}});return Xe(t,"scroll",()=>{r.value=t.scrollX,s.value=t.scrollY},{capture:!1,passive:!0}),{x:o,y:i}}const Ci=/^(?:[a-z]+:|\/\/)/i,Ia="vitepress-theme-appearance",xi=/#.*$/,Fa=/(index)?\.(md|html)$/,Se=typeof document<"u",Si={relativePath:"",filePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0,isNotFound:!0};function Na(e,t,n=!1){if(t===void 0)return!1;if(e=Bs(`/${e}`),n)return new RegExp(t).test(e);if(Bs(t)!==e)return!1;const r=t.match(xi);return r?(Se?location.hash:"")===r[0]:!0}function Bs(e){return decodeURI(e).replace(xi,"").replace(Fa,"")}function $a(e){return Ci.test(e)}function Ha(e,t){var r,s,o,i,l,c,a;const n=Object.keys(e.locales).find(f=>f!=="root"&&!$a(f)&&Na(t,`/${f}/`,!0))||"root";return Object.assign({},e,{localeIndex:n,lang:((r=e.locales[n])==null?void 0:r.lang)??e.lang,dir:((s=e.locales[n])==null?void 0:s.dir)??e.dir,title:((o=e.locales[n])==null?void 0:o.title)??e.title,titleTemplate:((i=e.locales[n])==null?void 0:i.titleTemplate)??e.titleTemplate,description:((l=e.locales[n])==null?void 0:l.description)??e.description,head:Ai(e.head,((c=e.locales[n])==null?void 0:c.head)??[]),themeConfig:{...e.themeConfig,...(a=e.locales[n])==null?void 0:a.themeConfig}})}function Ti(e,t){const n=t.title||e.title,r=t.titleTemplate??e.titleTemplate;if(typeof r=="string"&&r.includes(":title"))return r.replace(/:title/g,n);const s=ja(e.title,r);return n===s.slice(3)?n:`${n}${s}`}function ja(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function Da(e,t){const[n,r]=t;if(n!=="meta")return!1;const s=Object.entries(r)[0];return s==null?!1:e.some(([o,i])=>o===n&&i[s[0]]===s[1])}function Ai(e,t){return[...e.filter(n=>!Da(t,n)),...t]}const Va=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,Ba=/^[a-z]:/i;function Us(e){const t=Ba.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(Va,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const Ua=new Set("3g2,3gp,7z,aac,abw,ai,aif,aifc,aiff,arc,asf,asr,asx,au,avi,avif,axs,azw,bin,bmp,bz,bz2,c,cda,cer,class,crl,crt,csh,css,csv,dcr,der,dll,doc,docx,eot,eps,epub,exe,gif,gtar,gz,gzip,ico,ics,ief,jar,jpe,jpeg,jpg,js,json,jsonld,latex,m3u,man,mdb,mht,mhtml,mid,midi,mjs,mov,mp2,mp3,mp4,mpa,mpe,mpeg,mpg,mpkg,mpp,odp,ods,odt,oga,ogv,ogx,opus,otf,p10,p12,p7b,p7c,p7m,p7r,p7s,pbm,pdf,pfx,php,png,ppt,pptx,ps,pub,qt,rar,roff,rtf,rtx,ser,sh,spc,svg,swf,t,tar,tcl,tex,texi,texinfo,tgz,tif,tiff,tr,ts,tsv,ttf,txt,ua,viv,vivo,vsd,wav,weba,webm,webp,woff,woff2,xbm,xhtml,xls,xlsx,xml,xul,zip,conf".split(","));function ka(e){const t=e.split(".").pop();return t==null||!Ua.has(t.toLowerCase())}function Fu(e){return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}const Ka=Symbol(),ht=Ir(ha);function Nu(e){const t=oe(()=>Ha(ht.value,e.data.relativePath)),n=t.value.appearance,r=n==="force-dark"?le(!0):n?Ma({storageKey:Ia,initialValue:()=>typeof n=="string"?n:"auto",...typeof n=="object"?n:{}}):le(!1);return{site:t,theme:oe(()=>t.value.themeConfig),page:oe(()=>e.data),frontmatter:oe(()=>e.data.frontmatter),params:oe(()=>e.data.params),lang:oe(()=>t.value.lang),dir:oe(()=>e.data.frontmatter.dir||t.value.dir),localeIndex:oe(()=>t.value.localeIndex||"root"),title:oe(()=>Ti(t.value,e.data)),description:oe(()=>e.data.description||t.value.description),isDark:r}}function Wa(){const e=Tt(Ka);if(!e)throw new Error("vitepress data not properly injected in app");return e}function qa(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function ks(e){return Ci.test(e)||!e.startsWith("/")?e:qa(ht.value.base,e)}function Ga(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),Se){const n="/youqu3/";t=Us(t.slice(n.length).replace(/\//g,"_")||"index")+".md";let r=__VP_HASH_MAP__[t.toLowerCase()];if(r||(t=t.endsWith("_index.md")?t.slice(0,-9)+".md":t.slice(0,-3)+"_index.md",r=__VP_HASH_MAP__[t.toLowerCase()]),!r)return null;t=`${n}assets/${t}.${r}.js`}else t=`./${Us(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}let yn=[];function $u(e){yn.push(e),Hn(()=>{yn=yn.filter(t=>t!==e)})}const za=Symbol(),Ri="http://a.com",Ya=()=>({path:"/",component:null,data:Si});function Hu(e,t){const n=Mn(Ya()),r={route:n,go:s};async function s(l=Se?location.href:"/"){var c,a;l=Tn(l),await((c=r.onBeforeRouteChange)==null?void 0:c.call(r,l))!==!1&&(qs(l),await i(l),await((a=r.onAfterRouteChanged)==null?void 0:a.call(r,l)))}let o=null;async function i(l,c=0,a=!1){var p;if(await((p=r.onBeforePageLoad)==null?void 0:p.call(r,l))===!1)return;const f=new URL(l,Ri),h=o=f.pathname;try{let y=await e(h);if(!y)throw new Error(`Page not found: ${h}`);if(o===h){o=null;const{default:w,__pageData:M}=y;if(!w)throw new Error(`Invalid route component: ${w}`);n.path=Se?h:ks(h),n.component=pn(w),n.data=pn(M),Se&&In(()=>{let V=ht.value.base+M.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");if(!ht.value.cleanUrls&&!V.endsWith("/")&&(V+=".html"),V!==f.pathname&&(f.pathname=V,l=V+f.search+f.hash,history.replaceState(null,"",l)),f.hash&&!c){let W=null;try{W=document.getElementById(decodeURIComponent(f.hash).slice(1))}catch(B){console.warn(B)}if(W){Ks(W,f.hash);return}}window.scrollTo(0,c)})}}catch(y){if(!/fetch|Page not found/.test(y.message)&&!/^\/404(\.html|\/)?$/.test(l)&&console.error(y),!a)try{const w=await fetch(ht.value.base+"hashmap.json");window.__VP_HASH_MAP__=await w.json(),await i(l,c,!0);return}catch{}o===h&&(o=null,n.path=Se?h:ks(h),n.component=t?pn(t):null,n.data=Si)}}return Se&&(window.addEventListener("click",l=>{if(l.target.closest("button"))return;const a=l.target.closest("a");if(a&&!a.closest(".vp-raw")&&(a instanceof SVGElement||!a.download)){const{target:f}=a,{href:h,origin:p,pathname:y,hash:w,search:M}=new URL(a.href instanceof SVGAnimatedString?a.href.animVal:a.href,a.baseURI),V=window.location;!l.ctrlKey&&!l.shiftKey&&!l.altKey&&!l.metaKey&&!f&&p===V.origin&&ka(y)&&(l.preventDefault(),y===V.pathname&&M===V.search?(w!==V.hash&&(history.pushState(null,"",w),window.dispatchEvent(new Event("hashchange"))),w?Ks(a,w,a.classList.contains("header-anchor")):(qs(h),window.scrollTo(0,0))):s(h))}},{capture:!0}),window.addEventListener("popstate",async l=>{var c;await i(Tn(location.href),l.state&&l.state.scrollPosition||0),(c=r.onAfterRouteChanged)==null||c.call(r,location.href)}),window.addEventListener("hashchange",l=>{l.preventDefault()})),r}function Ja(){const e=Tt(za);if(!e)throw new Error("useRouter() is called without provider.");return e}function Oi(){return Ja().route}function Ks(e,t,n=!1){let r=null;try{r=e.classList.contains("header-anchor")?e:document.getElementById(decodeURIComponent(t).slice(1))}catch(s){console.warn(s)}if(r){let s=function(){!n||Math.abs(a-window.scrollY)>window.innerHeight?window.scrollTo(0,a):window.scrollTo({left:0,top:a,behavior:"smooth"})},o=ht.value.scrollOffset,i=0,l=24;if(typeof o=="object"&&"padding"in o&&(l=o.padding,o=o.selector),typeof o=="number")i=o;else if(typeof o=="string")i=Ws(o,l);else if(Array.isArray(o))for(const f of o){const h=Ws(f,l);if(h){i=h;break}}const c=parseInt(window.getComputedStyle(r).paddingTop,10),a=window.scrollY+r.getBoundingClientRect().top-i+c;requestAnimationFrame(s)}}function Ws(e,t){const n=document.querySelector(e);if(!n)return 0;const r=n.getBoundingClientRect().bottom;return r<0?0:r+t}function qs(e){Se&&Tn(e)!==Tn(location.href)&&(history.replaceState({scrollPosition:window.scrollY},document.title),history.pushState(null,"",e))}function Tn(e){const t=new URL(e,Ri);return t.pathname=t.pathname.replace(/(^|\/)index(\.html)?$/,"$1"),ht.value.cleanUrls?t.pathname=t.pathname.replace(/\.html$/,""):!t.pathname.endsWith("/")&&!t.pathname.endsWith(".html")&&(t.pathname+=".html"),t.pathname+t.search+t.hash}const rr=()=>yn.forEach(e=>e()),ju=Nr({name:"VitePressContent",props:{as:{type:[Object,String],default:"div"}},setup(e){const t=Oi(),{site:n}=Wa();return()=>yr(e.as,n.value.contentProps??{style:{position:"relative"}},[t.component?yr(t.component,{onVnodeMounted:rr,onVnodeUpdated:rr,onVnodeUnmounted:rr}):"404 Page Not Found"])}}),Du=(e,t)=>{const n=e.__vccOpts||e;for(const[r,s]of t)n[r]=s;return n},Xa="modulepreload",Qa=function(e){return"/youqu3/"+e},Gs={},Vu=function(t,n,r){let s=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const o=document.querySelector("meta[property=csp-nonce]"),i=(o==null?void 0:o.nonce)||(o==null?void 0:o.getAttribute("nonce"));s=Promise.all(n.map(l=>{if(l=Qa(l),l in Gs)return;Gs[l]=!0;const c=l.endsWith(".css"),a=c?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${l}"]${a}`))return;const f=document.createElement("link");if(f.rel=c?"stylesheet":Xa,c||(f.as="script",f.crossOrigin=""),f.href=l,i&&f.setAttribute("nonce",i),document.head.appendChild(f),c)return new Promise((h,p)=>{f.addEventListener("load",h),f.addEventListener("error",()=>p(new Error(`Unable to preload CSS for ${l}`)))})}))}return s.then(()=>t()).catch(o=>{const i=new Event("vite:preloadError",{cancelable:!0});if(i.payload=o,window.dispatchEvent(i),!i.defaultPrevented)throw o})},Bu="/youqu3/init.gif",Uu="/youqu3/%E6%8C%87%E5%8D%97/%E4%B8%8E%E7%94%9F%E4%BF%B1%E6%9D%A5/remote_control.png",ku="/youqu3/logo.png",Ku="/youqu3/install.gif",Wu="/youqu3/%E8%AE%BE%E8%AE%A1/YouQu3%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1.drawio.png",qu="/youqu3/%E8%AE%BE%E8%AE%A1/YouQu3%E6%9E%B6%E6%9E%84%E6%80%BB%E8%A7%88.drawio.png",Gu=Nr({setup(e,{slots:t}){const n=le(!1);return Rt(()=>{n.value=!0}),()=>n.value&&t.default?t.default():null}});function zu(){Se&&window.addEventListener("click",e=>{var n;const t=e.target;if(t.matches(".vp-code-group input")){const r=(n=t.parentElement)==null?void 0:n.parentElement;if(!r)return;const s=Array.from(r.querySelectorAll("input")).indexOf(t);if(s<0)return;const o=r.querySelector(".blocks");if(!o)return;const i=Array.from(o.children).find(a=>a.classList.contains("active"));if(!i)return;const l=o.children[s];if(!l||i===l)return;i.classList.remove("active"),l.classList.add("active");const c=r==null?void 0:r.querySelector(`label[for="${t.id}"]`);c==null||c.scrollIntoView({block:"nearest"})}})}function Yu(){if(Se){const e=new WeakMap;window.addEventListener("click",t=>{var r;const n=t.target;if(n.matches('div[class*="language-"] > button.copy')){const s=n.parentElement,o=(r=n.nextElementSibling)==null?void 0:r.nextElementSibling;if(!s||!o)return;const i=/language-(shellscript|shell|bash|sh|zsh)/.test(s.className),l=[".vp-copy-ignore",".diff.remove"],c=o.cloneNode(!0);c.querySelectorAll(l.join(",")).forEach(f=>f.remove());let a=c.textContent||"";i&&(a=a.replace(/^ *(\$|>) /gm,"").trim()),Za(a).then(()=>{n.classList.add("copied"),clearTimeout(e.get(n));const f=setTimeout(()=>{n.classList.remove("copied"),n.blur(),e.delete(n)},2e3);e.set(n,f)})}})}}async function Za(e){try{return navigator.clipboard.writeText(e)}catch{const t=document.createElement("textarea"),n=document.activeElement;t.value=e,t.setAttribute("readonly",""),t.style.contain="strict",t.style.position="absolute",t.style.left="-9999px",t.style.fontSize="12pt";const r=document.getSelection(),s=r?r.rangeCount>0&&r.getRangeAt(0):null;document.body.appendChild(t),t.select(),t.selectionStart=0,t.selectionEnd=e.length,document.execCommand("copy"),document.body.removeChild(t),s&&(r.removeAllRanges(),r.addRange(s)),n&&n.focus()}}function Ju(e,t){let n=[],r=!0;const s=o=>{if(r){r=!1;return}const i=o.map(zs);n.forEach((l,c)=>{const a=i.findIndex(f=>f==null?void 0:f.isEqualNode(l??null));a!==-1?delete i[a]:(l==null||l.remove(),delete n[c])}),i.forEach(l=>l&&document.head.appendChild(l)),n=[...n,...i].filter(Boolean)};Dr(()=>{const o=e.data,i=t.value,l=o&&o.description,c=o&&o.frontmatter.head||[],a=Ti(i,o);a!==document.title&&(document.title=a);const f=l||i.description;let h=document.querySelector("meta[name=description]");h?h.getAttribute("content")!==f&&h.setAttribute("content",f):zs(["meta",{name:"description",content:f}]),s(Ai(i.head,tu(c)))})}function zs([e,t,n]){const r=document.createElement(e);for(const s in t)r.setAttribute(s,t[s]);return n&&(r.innerHTML=n),e==="script"&&!t.async&&(r.async=!1),r}function eu(e){return e[0]==="meta"&&e[1]&&e[1].name==="description"}function tu(e){return e.filter(t=>!eu(t))}const sr=new Set,Li=()=>document.createElement("link"),nu=e=>{const t=Li();t.rel="prefetch",t.href=e,document.head.appendChild(t)},ru=e=>{const t=new XMLHttpRequest;t.open("GET",e,t.withCredentials=!0),t.send()};let fn;const su=Se&&(fn=Li())&&fn.relList&&fn.relList.supports&&fn.relList.supports("prefetch")?nu:ru;function Xu(){if(!Se||!window.IntersectionObserver)return;let e;if((e=navigator.connection)&&(e.saveData||/2g/.test(e.effectiveType)))return;const t=window.requestIdleCallback||setTimeout;let n=null;const r=()=>{n&&n.disconnect(),n=new IntersectionObserver(o=>{o.forEach(i=>{if(i.isIntersecting){const l=i.target;n.unobserve(l);const{pathname:c}=l;if(!sr.has(c)){sr.add(c);const a=Ga(c);a&&su(a)}}})}),t(()=>{document.querySelectorAll("#app a").forEach(o=>{const{hostname:i,pathname:l}=new URL(o.href instanceof SVGAnimatedString?o.href.animVal:o.href,o.baseURI),c=l.match(/\.\w+$/);c&&c[0]!==".html"||o.target!=="_blank"&&i===location.hostname&&(l!==location.pathname?n.observe(o):sr.add(l))})})};Rt(r);const s=Oi();Ye(()=>s.path,r),Hn(()=>{n&&n.disconnect()})}export{hu as $,Hn as A,mu as B,Dl as C,au as D,fu as E,ye as F,Ir as G,$u as H,ie as I,uu as J,Ci as K,Oi as L,Rc as M,Tt as N,Ru as O,Ou as P,Cr as Q,In as R,Iu as S,ai as T,_u as U,Pn as V,cu as W,Vu as X,Mu as Y,Zl as Z,Du as _,oi as a,Eu as a0,wu as a1,pu as a2,xu as a3,yr as a4,Cu as a5,Bu as a6,Uu as a7,ku as a8,Ku as a9,de as aA,gu as aB,pn as aC,Fu as aD,Wu as aa,qu as ab,Ju as ac,za as ad,Nu as ae,Ka as af,ju as ag,Gu as ah,ht as ai,Su as aj,Hu as ak,Ga as al,Xu as am,Yu as an,zu as ao,bt as ap,Br as aq,Au as ar,Pu as as,Lu as at,Tu as au,Ja as av,Xe as aw,Lo as ax,lu as ay,vu as az,ni as b,yu as c,Nr as d,bu as e,ka as f,ks as g,le as h,$a as i,Se as j,oe as k,Rt as l,si as m,xr as n,ei as o,vo as p,ou as q,du as r,iu as s,Wi as t,Wa as u,Na as v,Ll as w,Sa as x,Ye as y,Dr as z}; diff --git a/assets/chunks/theme.F2IToOfj.js b/assets/chunks/theme.BqZMVUP5.js similarity index 99% rename from assets/chunks/theme.F2IToOfj.js rename to assets/chunks/theme.BqZMVUP5.js index 726d681..45fa086 100644 --- a/assets/chunks/theme.F2IToOfj.js +++ b/assets/chunks/theme.BqZMVUP5.js @@ -1,4 +1,4 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/chunks/VPLocalSearchBox.Re7xpDUq.js","assets/chunks/framework.DPHCW6-_.js"])))=>i.map(i=>d[i]); -import{d as b,o as s,c as l,r as v,n as H,a as j,t as T,b as y,w as p,e as f,T as ze,_ as g,u as Re,i as jt,f as Ut,g as qe,h as E,j as le,k as L,l as Y,m as u,p as i,q as Z,s as X,v as ie,x as Fe,y as te,z as Ce,A as Ke,B as ut,C as Gt,D as ce,F as A,E as G,G as dt,H as Te,I as _,J as re,K as mt,L as fe,M as we,N as Me,O as Rt,P as xe,Q as qt,R as We,S as vt,U as Kt,V as Wt,W as Yt,X as pt,Y as ht,Z as ft,$ as Zt,a0 as Xt,a1 as Jt,a2 as Qt,a3 as en,a4 as Ve,a5 as tn}from"./framework.DPHCW6-_.js";const nn=b({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(n){return(e,t)=>(s(),l("span",{class:H(["VPBadge",e.type])},[v(e.$slots,"default",{},()=>[j(T(e.text),1)])],2))}}),on={key:0,class:"VPBackdrop"},an=b({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(n){return(e,t)=>(s(),y(ze,{name:"fade"},{default:p(()=>[e.show?(s(),l("div",on)):f("",!0)]),_:1}))}}),sn=g(an,[["__scopeId","data-v-7400d5fd"]]),z=Re;function rn(n,e){let t,o=!1;return()=>{t&&clearTimeout(t),o?t=setTimeout(n,e):(n(),(o=!0)&&setTimeout(()=>o=!1,e))}}function je(n){return/^\//.test(n)?n:`/${n}`}function Ye(n){const{pathname:e,search:t,hash:o,protocol:a}=new URL(n,"http://a.com");if(jt(n)||n.startsWith("#")||!a.startsWith("http")||!Ut(e))return n;const{site:r}=z(),c=e.endsWith("/")||e.endsWith(".html")?n:n.replace(/(?:(^\.+)\/)?.*$/,`$1${e.replace(/(\.md)?$/,r.value.cleanUrls?"":".html")}${t}${o}`);return qe(c)}const Ze=E(le?location.hash:"");le&&window.addEventListener("hashchange",()=>{Ze.value=location.hash});function _e({removeCurrent:n=!0,correspondingLink:e=!1}={}){const{site:t,localeIndex:o,page:a,theme:r}=z(),c=L(()=>{var m,k;return{label:(m=t.value.locales[o.value])==null?void 0:m.label,link:((k=t.value.locales[o.value])==null?void 0:k.link)||(o.value==="root"?"/":`/${o.value}/`)}});return{localeLinks:L(()=>Object.entries(t.value.locales).flatMap(([m,k])=>n&&c.value.label===k.label?[]:{text:k.label,link:ln(k.link||(m==="root"?"/":`/${m}/`),r.value.i18nRouting!==!1&&e,a.value.relativePath.slice(c.value.link.length-1),!t.value.cleanUrls)+Ze.value})),currentLang:c}}function ln(n,e,t,o){return e?n.replace(/\/$/,"")+je(t.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,o?".html":"")):n}const cn=n=>(Z("data-v-922e1a30"),n=n(),X(),n),un={class:"NotFound"},dn={class:"code"},mn={class:"title"},vn=cn(()=>u("div",{class:"divider"},null,-1)),pn={class:"quote"},hn={class:"action"},fn=["href","aria-label"],_n=b({__name:"NotFound",setup(n){const{site:e,theme:t}=z(),{localeLinks:o}=_e({removeCurrent:!1}),a=E("/");return Y(()=>{var c;const r=window.location.pathname.replace(e.value.base,"").replace(/(^.*?\/).*$/,"/$1");o.value.length&&(a.value=((c=o.value.find(({link:d})=>d.startsWith(r)))==null?void 0:c.link)||o.value[0].link)}),(r,c)=>{var d,m,k,$,w;return s(),l("div",un,[u("p",dn,T(((d=i(t).notFound)==null?void 0:d.code)??"404"),1),u("h1",mn,T(((m=i(t).notFound)==null?void 0:m.title)??"PAGE NOT FOUND"),1),vn,u("blockquote",pn,T(((k=i(t).notFound)==null?void 0:k.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),u("div",hn,[u("a",{class:"link",href:i(qe)(a.value),"aria-label":(($=i(t).notFound)==null?void 0:$.linkLabel)??"go to home"},T(((w=i(t).notFound)==null?void 0:w.linkText)??"Take me home"),9,fn)])])}}}),gn=g(_n,[["__scopeId","data-v-922e1a30"]]);function _t(n,e){if(Array.isArray(n))return Le(n);if(n==null)return[];e=je(e);const t=Object.keys(n).sort((a,r)=>r.split("/").length-a.split("/").length).find(a=>e.startsWith(je(a))),o=t?n[t]:[];return Array.isArray(o)?Le(o):Le(o.items,o.base)}function bn(n){const e=[];let t=0;for(const o in n){const a=n[o];if(a.items){t=e.push(a);continue}e[t]||e.push({items:[]}),e[t].items.push(a)}return e}function kn(n){const e=[];function t(o){for(const a of o)a.text&&a.link&&e.push({text:a.text,link:a.link,docFooterText:a.docFooterText}),a.items&&t(a.items)}return t(n),e}function Ue(n,e){return Array.isArray(e)?e.some(t=>Ue(n,t)):ie(n,e.link)?!0:e.items?Ue(n,e.items):!1}function Le(n,e){return[...n].map(t=>{const o={...t},a=o.base||e;return a&&o.link&&(o.link=a+o.link),o.items&&(o.items=Le(o.items,a)),o})}function ne(){const{frontmatter:n,page:e,theme:t}=z(),o=Fe("(min-width: 960px)"),a=E(!1),r=L(()=>{const I=t.value.sidebar,N=e.value.relativePath;return I?_t(I,N):[]}),c=E(r.value);te(r,(I,N)=>{JSON.stringify(I)!==JSON.stringify(N)&&(c.value=r.value)});const d=L(()=>n.value.sidebar!==!1&&c.value.length>0&&n.value.layout!=="home"),m=L(()=>k?n.value.aside==null?t.value.aside==="left":n.value.aside==="left":!1),k=L(()=>n.value.layout==="home"?!1:n.value.aside!=null?!!n.value.aside:t.value.aside!==!1),$=L(()=>d.value&&o.value),w=L(()=>d.value?bn(c.value):[]);function S(){a.value=!0}function B(){a.value=!1}function V(){a.value?B():S()}return{isOpen:a,sidebar:c,sidebarGroups:w,hasSidebar:d,hasAside:k,leftAside:m,isSidebarEnabled:$,open:S,close:B,toggle:V}}function $n(n,e){let t;Ce(()=>{t=n.value?document.activeElement:void 0}),Y(()=>{window.addEventListener("keyup",o)}),Ke(()=>{window.removeEventListener("keyup",o)});function o(a){a.key==="Escape"&&n.value&&(e(),t==null||t.focus())}}function yn(n){const{page:e}=z(),t=E(!1),o=L(()=>n.value.collapsed!=null),a=L(()=>!!n.value.link),r=E(!1),c=()=>{r.value=ie(e.value.relativePath,n.value.link)};te([e,n,Ze],c),Y(c);const d=L(()=>r.value?!0:n.value.items?Ue(e.value.relativePath,n.value.items):!1),m=L(()=>!!(n.value.items&&n.value.items.length));Ce(()=>{t.value=!!(o.value&&n.value.collapsed)}),ut(()=>{(r.value||d.value)&&(t.value=!1)});function k(){o.value&&(t.value=!t.value)}return{collapsed:t,collapsible:o,isLink:a,isActiveLink:r,hasActiveLink:d,hasChildren:m,toggle:k}}function wn(){const{hasSidebar:n}=ne(),e=Fe("(min-width: 960px)"),t=Fe("(min-width: 1280px)");return{isAsideEnabled:L(()=>!t.value&&!e.value?!1:n.value?t.value:e.value)}}const Ge=[];function gt(n){return typeof n.outline=="object"&&!Array.isArray(n.outline)&&n.outline.label||n.outlineTitle||"On this page"}function Xe(n){const e=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(t=>t.id&&t.hasChildNodes()).map(t=>{const o=Number(t.tagName[1]);return{element:t,title:Ln(t),link:"#"+t.id,level:o}});return Pn(e,n)}function Ln(n){let e="";for(const t of n.childNodes)if(t.nodeType===1){if(t.classList.contains("VPBadge")||t.classList.contains("header-anchor")||t.classList.contains("ignore-header"))continue;e+=t.textContent}else t.nodeType===3&&(e+=t.textContent);return e.trim()}function Pn(n,e){if(e===!1)return[];const t=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[o,a]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;n=n.filter(c=>c.level>=o&&c.level<=a),Ge.length=0;for(const{element:c,link:d}of n)Ge.push({element:c,link:d});const r=[];e:for(let c=0;c=0;m--){const k=n[m];if(k.level{requestAnimationFrame(r),window.addEventListener("scroll",o)}),Gt(()=>{c(location.hash)}),Ke(()=>{window.removeEventListener("scroll",o)});function r(){if(!t.value)return;const d=(()=>{var I;const V=(I=document.querySelector("#VPContent .VPDoc"))==null?void 0:I.firstElementChild;return V?ot(V):78})(),m=window.scrollY,k=window.innerHeight,$=document.body.offsetHeight,w=Math.abs(m+k-$)<1,S=Ge.map(({element:V,link:I})=>({link:I,top:ot(V)})).filter(({top:V})=>!Number.isNaN(V)).sort((V,I)=>V.top-I.top);if(!S.length){c(null);return}if(m<1){c(null);return}if(w){c(S[S.length-1].link);return}let B=null;for(const{link:V,top:I}of S){if(I>m+d)break;B=V}c(B)}function c(d){a&&a.classList.remove("active"),d==null?a=null:a=n.value.querySelector(`a[href="${decodeURIComponent(d)}"]`);const m=a;m?(m.classList.add("active"),e.value.style.top=m.offsetTop+39+"px",e.value.style.opacity="1"):(e.value.style.top="33px",e.value.style.opacity="0")}}function ot(n){let e=0;for(;n!==document.body;){if(n===null)return NaN;e+=n.offsetTop,n=n.offsetParent}return e}const Sn=["href","title"],zn=b({__name:"VPDocOutlineItem",props:{headers:{},root:{type:Boolean}},setup(n){function e({target:t}){const o=t.href.split("#")[1],a=document.getElementById(decodeURIComponent(o));a==null||a.focus({preventScroll:!0})}return(t,o)=>{const a=ce("VPDocOutlineItem",!0);return s(),l("ul",{class:H(["VPDocOutlineItem",t.root?"root":"nested"])},[(s(!0),l(A,null,G(t.headers,({children:r,link:c,title:d})=>(s(),l("li",null,[u("a",{class:"outline-link",href:c,onClick:e,title:d},T(d),9,Sn),r!=null&&r.length?(s(),y(a,{key:0,headers:r},null,8,["headers"])):f("",!0)]))),256))],2)}}}),bt=g(zn,[["__scopeId","data-v-cf5865db"]]),Cn=n=>(Z("data-v-e2c17725"),n=n(),X(),n),Tn={class:"content"},Mn={class:"outline-title",role:"heading","aria-level":"2"},In={"aria-labelledby":"doc-outline-aria-label"},En=Cn(()=>u("span",{class:"visually-hidden",id:"doc-outline-aria-label"}," Table of Contents for current page ",-1)),Nn=b({__name:"VPDocAsideOutline",setup(n){const{frontmatter:e,theme:t}=z(),o=dt([]);Te(()=>{o.value=Xe(e.value.outline??t.value.outline)});const a=E(),r=E();return Vn(a,r),(c,d)=>(s(),l("div",{class:H(["VPDocAsideOutline",{"has-outline":o.value.length>0}]),ref_key:"container",ref:a,role:"navigation"},[u("div",Tn,[u("div",{class:"outline-marker",ref_key:"marker",ref:r},null,512),u("div",Mn,T(i(gt)(i(t))),1),u("nav",In,[En,_(bt,{headers:o.value,root:!0},null,8,["headers"])])])],2))}}),Hn=g(Nn,[["__scopeId","data-v-e2c17725"]]),An={class:"VPDocAsideCarbonAds"},Bn=b({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(n){const e=()=>null;return(t,o)=>(s(),l("div",An,[_(i(e),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),On=n=>(Z("data-v-8b9c5d2d"),n=n(),X(),n),Dn={class:"VPDocAside"},Fn=On(()=>u("div",{class:"spacer"},null,-1)),xn=b({__name:"VPDocAside",setup(n){const{theme:e}=z();return(t,o)=>(s(),l("div",Dn,[v(t.$slots,"aside-top",{},void 0,!0),v(t.$slots,"aside-outline-before",{},void 0,!0),_(Hn),v(t.$slots,"aside-outline-after",{},void 0,!0),Fn,v(t.$slots,"aside-ads-before",{},void 0,!0),i(e).carbonAds?(s(),y(Bn,{key:0,"carbon-ads":i(e).carbonAds},null,8,["carbon-ads"])):f("",!0),v(t.$slots,"aside-ads-after",{},void 0,!0),v(t.$slots,"aside-bottom",{},void 0,!0)]))}}),jn=g(xn,[["__scopeId","data-v-8b9c5d2d"]]);function Un(){const{theme:n,page:e}=z();return L(()=>{const{text:t="Edit this page",pattern:o=""}=n.value.editLink||{};let a;return typeof o=="function"?a=o(e.value):a=o.replace(/:path/g,e.value.filePath),{url:a,text:t}})}function Gn(){const{page:n,theme:e,frontmatter:t}=z();return L(()=>{var m,k,$,w,S,B,V,I;const o=_t(e.value.sidebar,n.value.relativePath),a=kn(o),r=a.findIndex(N=>ie(n.value.relativePath,N.link)),c=((m=e.value.docFooter)==null?void 0:m.prev)===!1&&!t.value.prev||t.value.prev===!1,d=((k=e.value.docFooter)==null?void 0:k.next)===!1&&!t.value.next||t.value.next===!1;return{prev:c?void 0:{text:(typeof t.value.prev=="string"?t.value.prev:typeof t.value.prev=="object"?t.value.prev.text:void 0)??(($=a[r-1])==null?void 0:$.docFooterText)??((w=a[r-1])==null?void 0:w.text),link:(typeof t.value.prev=="object"?t.value.prev.link:void 0)??((S=a[r-1])==null?void 0:S.link)},next:d?void 0:{text:(typeof t.value.next=="string"?t.value.next:typeof t.value.next=="object"?t.value.next.text:void 0)??((B=a[r+1])==null?void 0:B.docFooterText)??((V=a[r+1])==null?void 0:V.text),link:(typeof t.value.next=="object"?t.value.next.link:void 0)??((I=a[r+1])==null?void 0:I.link)}}})}const Rn={},qn={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},Kn=u("path",{d:"M18,23H4c-1.7,0-3-1.3-3-3V6c0-1.7,1.3-3,3-3h7c0.6,0,1,0.4,1,1s-0.4,1-1,1H4C3.4,5,3,5.4,3,6v14c0,0.6,0.4,1,1,1h14c0.6,0,1-0.4,1-1v-7c0-0.6,0.4-1,1-1s1,0.4,1,1v7C21,21.7,19.7,23,18,23z"},null,-1),Wn=u("path",{d:"M8,17c-0.3,0-0.5-0.1-0.7-0.3C7,16.5,6.9,16.1,7,15.8l1-4c0-0.2,0.1-0.3,0.3-0.5l9.5-9.5c1.2-1.2,3.2-1.2,4.4,0c1.2,1.2,1.2,3.2,0,4.4l-9.5,9.5c-0.1,0.1-0.3,0.2-0.5,0.3l-4,1C8.2,17,8.1,17,8,17zM9.9,12.5l-0.5,2.1l2.1-0.5l9.3-9.3c0.4-0.4,0.4-1.1,0-1.6c-0.4-0.4-1.2-0.4-1.6,0l0,0L9.9,12.5z M18.5,2.5L18.5,2.5L18.5,2.5z"},null,-1),Yn=[Kn,Wn];function Zn(n,e){return s(),l("svg",qn,Yn)}const Xn=g(Rn,[["render",Zn]]),K=b({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(n){const e=n,t=L(()=>e.tag??(e.href?"a":"span")),o=L(()=>e.href&&mt.test(e.href));return(a,r)=>(s(),y(re(t.value),{class:H(["VPLink",{link:a.href,"vp-external-link-icon":o.value,"no-icon":a.noIcon}]),href:a.href?i(Ye)(a.href):void 0,target:a.target??(o.value?"_blank":void 0),rel:a.rel??(o.value?"noreferrer":void 0)},{default:p(()=>[v(a.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),Jn={class:"VPLastUpdated"},Qn=["datetime"],eo=b({__name:"VPDocFooterLastUpdated",setup(n){const{theme:e,page:t,frontmatter:o,lang:a}=z(),r=L(()=>new Date(o.value.lastUpdated??t.value.lastUpdated)),c=L(()=>r.value.toISOString()),d=E("");return Y(()=>{Ce(()=>{var m,k,$;d.value=new Intl.DateTimeFormat((k=(m=e.value.lastUpdated)==null?void 0:m.formatOptions)!=null&&k.forceLocale?a.value:void 0,(($=e.value.lastUpdated)==null?void 0:$.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(r.value)})}),(m,k)=>{var $;return s(),l("p",Jn,[j(T((($=i(e).lastUpdated)==null?void 0:$.text)||i(e).lastUpdatedText||"Last updated")+": ",1),u("time",{datetime:c.value},T(d.value),9,Qn)])}}}),to=g(eo,[["__scopeId","data-v-42f5af39"]]),no={key:0,class:"VPDocFooter"},oo={key:0,class:"edit-info"},ao={key:0,class:"edit-link"},so={key:1,class:"last-updated"},ro={key:1,class:"prev-next"},io={class:"pager"},lo=["innerHTML"],co=["innerHTML"],uo={class:"pager"},mo=["innerHTML"],vo=["innerHTML"],po=b({__name:"VPDocFooter",setup(n){const{theme:e,page:t,frontmatter:o}=z(),a=Un(),r=Gn(),c=L(()=>e.value.editLink&&o.value.editLink!==!1),d=L(()=>t.value.lastUpdated&&o.value.lastUpdated!==!1),m=L(()=>c.value||d.value||r.value.prev||r.value.next);return(k,$)=>{var w,S,B,V;return m.value?(s(),l("footer",no,[v(k.$slots,"doc-footer-before",{},void 0,!0),c.value||d.value?(s(),l("div",oo,[c.value?(s(),l("div",ao,[_(K,{class:"edit-link-button",href:i(a).url,"no-icon":!0},{default:p(()=>[_(Xn,{class:"edit-link-icon","aria-label":"edit icon"}),j(" "+T(i(a).text),1)]),_:1},8,["href"])])):f("",!0),d.value?(s(),l("div",so,[_(to)])):f("",!0)])):f("",!0),(w=i(r).prev)!=null&&w.link||(S=i(r).next)!=null&&S.link?(s(),l("nav",ro,[u("div",io,[(B=i(r).prev)!=null&&B.link?(s(),y(K,{key:0,class:"pager-link prev",href:i(r).prev.link},{default:p(()=>{var I;return[u("span",{class:"desc",innerHTML:((I=i(e).docFooter)==null?void 0:I.prev)||"Previous page"},null,8,lo),u("span",{class:"title",innerHTML:i(r).prev.text},null,8,co)]}),_:1},8,["href"])):f("",!0)]),u("div",uo,[(V=i(r).next)!=null&&V.link?(s(),y(K,{key:0,class:"pager-link next",href:i(r).next.link},{default:p(()=>{var I;return[u("span",{class:"desc",innerHTML:((I=i(e).docFooter)==null?void 0:I.next)||"Next page"},null,8,mo),u("span",{class:"title",innerHTML:i(r).next.text},null,8,vo)]}),_:1},8,["href"])):f("",!0)])])):f("",!0)])):f("",!0)}}}),ho=g(po,[["__scopeId","data-v-c6c7078a"]]),fo=n=>(Z("data-v-c1252fdc"),n=n(),X(),n),_o={class:"container"},go=fo(()=>u("div",{class:"aside-curtain"},null,-1)),bo={class:"aside-container"},ko={class:"aside-content"},$o={class:"content"},yo={class:"content-container"},wo={class:"main"},Lo=b({__name:"VPDoc",setup(n){const{theme:e}=z(),t=fe(),{hasSidebar:o,hasAside:a,leftAside:r}=ne(),c=L(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(d,m)=>{const k=ce("Content");return s(),l("div",{class:H(["VPDoc",{"has-sidebar":i(o),"has-aside":i(a)}])},[v(d.$slots,"doc-top",{},void 0,!0),u("div",_o,[i(a)?(s(),l("div",{key:0,class:H(["aside",{"left-aside":i(r)}])},[go,u("div",bo,[u("div",ko,[_(jn,null,{"aside-top":p(()=>[v(d.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":p(()=>[v(d.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":p(()=>[v(d.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":p(()=>[v(d.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":p(()=>[v(d.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":p(()=>[v(d.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):f("",!0),u("div",$o,[u("div",yo,[v(d.$slots,"doc-before",{},void 0,!0),u("main",wo,[_(k,{class:H(["vp-doc",[c.value,i(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),_(ho,null,{"doc-footer-before":p(()=>[v(d.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),v(d.$slots,"doc-after",{},void 0,!0)])])]),v(d.$slots,"doc-bottom",{},void 0,!0)],2)}}}),Po=g(Lo,[["__scopeId","data-v-c1252fdc"]]),Vo=b({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{}},setup(n){const e=n,t=L(()=>e.href&&mt.test(e.href)),o=L(()=>e.tag||e.href?"a":"button");return(a,r)=>(s(),y(re(o.value),{class:H(["VPButton",[a.size,a.theme]]),href:a.href?i(Ye)(a.href):void 0,target:t.value?"_blank":void 0,rel:t.value?"noreferrer":void 0},{default:p(()=>[j(T(a.text),1)]),_:1},8,["class","href","target","rel"]))}}),So=g(Vo,[["__scopeId","data-v-5a0572b2"]]),zo=["src","alt"],Co=b({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(n){return(e,t)=>{const o=ce("VPImage",!0);return e.image?(s(),l(A,{key:0},[typeof e.image=="string"||"src"in e.image?(s(),l("img",we({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:i(qe)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,zo)):(s(),l(A,{key:1},[_(o,we({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),_(o,we({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):f("",!0)}}}),Se=g(Co,[["__scopeId","data-v-52554789"]]),To=n=>(Z("data-v-27e36ebe"),n=n(),X(),n),Mo={class:"container"},Io={class:"main"},Eo={key:0,class:"name"},No=["innerHTML"],Ho=["innerHTML"],Ao=["innerHTML"],Bo={key:0,class:"actions"},Oo={key:0,class:"image"},Do={class:"image-container"},Fo=To(()=>u("div",{class:"image-bg"},null,-1)),xo=b({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(n){const e=Me("hero-image-slot-exists");return(t,o)=>(s(),l("div",{class:H(["VPHero",{"has-image":t.image||i(e)}])},[u("div",Mo,[u("div",Io,[v(t.$slots,"home-hero-info",{},()=>[t.name?(s(),l("h1",Eo,[u("span",{innerHTML:t.name,class:"clip"},null,8,No)])):f("",!0),t.text?(s(),l("p",{key:1,innerHTML:t.text,class:"text"},null,8,Ho)):f("",!0),t.tagline?(s(),l("p",{key:2,innerHTML:t.tagline,class:"tagline"},null,8,Ao)):f("",!0)],!0),t.actions?(s(),l("div",Bo,[(s(!0),l(A,null,G(t.actions,a=>(s(),l("div",{key:a.link,class:"action"},[_(So,{tag:"a",size:"medium",theme:a.theme,text:a.text,href:a.link},null,8,["theme","text","href"])]))),128))])):f("",!0)]),t.image||i(e)?(s(),l("div",Oo,[u("div",Do,[Fo,v(t.$slots,"home-hero-image",{},()=>[t.image?(s(),y(Se,{key:0,class:"image-src",image:t.image},null,8,["image"])):f("",!0)],!0)])])):f("",!0)])],2))}}),jo=g(xo,[["__scopeId","data-v-27e36ebe"]]),Uo=b({__name:"VPHomeHero",setup(n){const{frontmatter:e}=z();return(t,o)=>i(e).hero?(s(),y(jo,{key:0,class:"VPHomeHero",name:i(e).hero.name,text:i(e).hero.text,tagline:i(e).hero.tagline,image:i(e).hero.image,actions:i(e).hero.actions},{"home-hero-info":p(()=>[v(t.$slots,"home-hero-info")]),"home-hero-image":p(()=>[v(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):f("",!0)}}),Go={},Ro={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},qo=u("path",{d:"M19.9,12.4c0.1-0.2,0.1-0.5,0-0.8c-0.1-0.1-0.1-0.2-0.2-0.3l-7-7c-0.4-0.4-1-0.4-1.4,0s-0.4,1,0,1.4l5.3,5.3H5c-0.6,0-1,0.4-1,1s0.4,1,1,1h11.6l-5.3,5.3c-0.4,0.4-0.4,1,0,1.4c0.2,0.2,0.5,0.3,0.7,0.3s0.5-0.1,0.7-0.3l7-7C19.8,12.6,19.9,12.5,19.9,12.4z"},null,-1),Ko=[qo];function Wo(n,e){return s(),l("svg",Ro,Ko)}const Yo=g(Go,[["render",Wo]]),Zo={class:"box"},Xo={key:0,class:"icon"},Jo=["innerHTML"],Qo=["innerHTML"],ea=["innerHTML"],ta={key:4,class:"link-text"},na={class:"link-text-value"},oa=b({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(n){return(e,t)=>(s(),y(K,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:p(()=>[u("article",Zo,[typeof e.icon=="object"&&e.icon.wrap?(s(),l("div",Xo,[_(Se,{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"?(s(),y(Se,{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?(s(),l("div",{key:2,class:"icon",innerHTML:e.icon},null,8,Jo)):f("",!0),u("h2",{class:"title",innerHTML:e.title},null,8,Qo),e.details?(s(),l("p",{key:3,class:"details",innerHTML:e.details},null,8,ea)):f("",!0),e.linkText?(s(),l("div",ta,[u("p",na,[j(T(e.linkText)+" ",1),_(Yo,{class:"link-text-icon"})])])):f("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),aa=g(oa,[["__scopeId","data-v-790a0f07"]]),sa={key:0,class:"VPFeatures"},ra={class:"container"},ia={class:"items"},la=b({__name:"VPFeatures",props:{features:{}},setup(n){const e=n,t=L(()=>{const o=e.features.length;if(o){if(o===2)return"grid-2";if(o===3)return"grid-3";if(o%3===0)return"grid-6";if(o>3)return"grid-4"}else return});return(o,a)=>o.features?(s(),l("div",sa,[u("div",ra,[u("div",ia,[(s(!0),l(A,null,G(o.features,r=>(s(),l("div",{key:r.title,class:H(["item",[t.value]])},[_(aa,{icon:r.icon,title:r.title,details:r.details,link:r.link,"link-text":r.linkText,rel:r.rel,target:r.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):f("",!0)}}),ca=g(la,[["__scopeId","data-v-8c75346a"]]),ua=b({__name:"VPHomeFeatures",setup(n){const{frontmatter:e}=z();return(t,o)=>i(e).features?(s(),y(ca,{key:0,class:"VPHomeFeatures",features:i(e).features},null,8,["features"])):f("",!0)}}),da={class:"VPHome"},ma=b({__name:"VPHome",setup(n){return(e,t)=>{const o=ce("Content");return s(),l("div",da,[v(e.$slots,"home-hero-before",{},void 0,!0),_(Uo,null,{"home-hero-info":p(()=>[v(e.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-image":p(()=>[v(e.$slots,"home-hero-image",{},void 0,!0)]),_:3}),v(e.$slots,"home-hero-after",{},void 0,!0),v(e.$slots,"home-features-before",{},void 0,!0),_(ua),v(e.$slots,"home-features-after",{},void 0,!0),_(o)])}}}),va=g(ma,[["__scopeId","data-v-f308d76d"]]),pa={},ha={class:"VPPage"};function fa(n,e){const t=ce("Content");return s(),l("div",ha,[v(n.$slots,"page-top"),_(t),v(n.$slots,"page-bottom")])}const _a=g(pa,[["render",fa]]),ga=b({__name:"VPContent",setup(n){const{page:e,frontmatter:t}=z(),{hasSidebar:o}=ne();return(a,r)=>(s(),l("div",{class:H(["VPContent",{"has-sidebar":i(o),"is-home":i(t).layout==="home"}]),id:"VPContent"},[i(e).isNotFound?v(a.$slots,"not-found",{key:0},()=>[_(gn)],!0):i(t).layout==="page"?(s(),y(_a,{key:1},{"page-top":p(()=>[v(a.$slots,"page-top",{},void 0,!0)]),"page-bottom":p(()=>[v(a.$slots,"page-bottom",{},void 0,!0)]),_:3})):i(t).layout==="home"?(s(),y(va,{key:2},{"home-hero-before":p(()=>[v(a.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info":p(()=>[v(a.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-image":p(()=>[v(a.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":p(()=>[v(a.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":p(()=>[v(a.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":p(()=>[v(a.$slots,"home-features-after",{},void 0,!0)]),_:3})):i(t).layout&&i(t).layout!=="doc"?(s(),y(re(i(t).layout),{key:3})):(s(),y(Po,{key:4},{"doc-top":p(()=>[v(a.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":p(()=>[v(a.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":p(()=>[v(a.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":p(()=>[v(a.$slots,"doc-before",{},void 0,!0)]),"doc-after":p(()=>[v(a.$slots,"doc-after",{},void 0,!0)]),"aside-top":p(()=>[v(a.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":p(()=>[v(a.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":p(()=>[v(a.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":p(()=>[v(a.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":p(()=>[v(a.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":p(()=>[v(a.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),ba=g(ga,[["__scopeId","data-v-d9b0d414"]]),ka={class:"container"},$a=["innerHTML"],ya=["innerHTML"],wa=b({__name:"VPFooter",setup(n){const{theme:e,frontmatter:t}=z(),{hasSidebar:o}=ne();return(a,r)=>i(e).footer&&i(t).footer!==!1?(s(),l("footer",{key:0,class:H(["VPFooter",{"has-sidebar":i(o)}])},[u("div",ka,[i(e).footer.message?(s(),l("p",{key:0,class:"message",innerHTML:i(e).footer.message},null,8,$a)):f("",!0),i(e).footer.copyright?(s(),l("p",{key:1,class:"copyright",innerHTML:i(e).footer.copyright},null,8,ya)):f("",!0)])],2)):f("",!0)}}),La=g(wa,[["__scopeId","data-v-83c9c484"]]);function kt(){const{theme:n,frontmatter:e}=z(),t=dt([]),o=L(()=>t.value.length>0);return Te(()=>{t.value=Xe(e.value.outline??n.value.outline)}),{headers:t,hasLocalNav:o}}const Pa={},Va={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Sa=u("path",{d:"M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"},null,-1),za=[Sa];function Ca(n,e){return s(),l("svg",Va,za)}const $t=g(Pa,[["render",Ca]]),Ta={class:"header"},Ma={class:"outline"},Ia=b({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(n){const e=n,{theme:t}=z(),o=E(!1),a=E(0),r=E(),c=E();Rt(r,()=>{o.value=!1}),xe("Escape",()=>{o.value=!1}),Te(()=>{o.value=!1});function d(){o.value=!o.value,a.value=window.innerHeight+Math.min(window.scrollY-e.navHeight,0)}function m($){$.target.classList.contains("outline-link")&&(c.value&&(c.value.style.transition="none"),We(()=>{o.value=!1}))}function k(){o.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return($,w)=>(s(),l("div",{class:"VPLocalNavOutlineDropdown",style:qt({"--vp-vh":a.value+"px"}),ref_key:"main",ref:r},[$.headers.length>0?(s(),l("button",{key:0,onClick:d,class:H({open:o.value})},[j(T(i(gt)(i(t)))+" ",1),_($t,{class:"icon"})],2)):(s(),l("button",{key:1,onClick:k},T(i(t).returnToTopLabel||"Return to top"),1)),_(ze,{name:"flyout"},{default:p(()=>[o.value?(s(),l("div",{key:0,ref_key:"items",ref:c,class:"items",onClick:m},[u("div",Ta,[u("a",{class:"top-link",href:"#",onClick:k},T(i(t).returnToTopLabel||"Return to top"),1)]),u("div",Ma,[_(bt,{headers:$.headers},null,8,["headers"])])],512)):f("",!0)]),_:1})],4))}}),Ea=g(Ia,[["__scopeId","data-v-2d2d5d54"]]),Na={},Ha={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Aa=u("path",{d:"M17,11H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h14c0.6,0,1,0.4,1,1S17.6,11,17,11z"},null,-1),Ba=u("path",{d:"M21,7H3C2.4,7,2,6.6,2,6s0.4-1,1-1h18c0.6,0,1,0.4,1,1S21.6,7,21,7z"},null,-1),Oa=u("path",{d:"M21,15H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h18c0.6,0,1,0.4,1,1S21.6,15,21,15z"},null,-1),Da=u("path",{d:"M17,19H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h14c0.6,0,1,0.4,1,1S17.6,19,17,19z"},null,-1),Fa=[Aa,Ba,Oa,Da];function xa(n,e){return s(),l("svg",Ha,Fa)}const ja=g(Na,[["render",xa]]),Ua={class:"container"},Ga=["aria-expanded"],Ra={class:"menu-text"},qa=b({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(n){const{theme:e,frontmatter:t}=z(),{hasSidebar:o}=ne(),{headers:a}=kt(),{y:r}=vt(),c=E(0);Y(()=>{c.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),Te(()=>{a.value=Xe(t.value.outline??e.value.outline)});const d=L(()=>a.value.length===0),m=L(()=>d.value&&!o.value),k=L(()=>({VPLocalNav:!0,"has-sidebar":o.value,empty:d.value,fixed:m.value}));return($,w)=>i(t).layout!=="home"&&(!m.value||i(r)>=c.value)?(s(),l("div",{key:0,class:H(k.value)},[u("div",Ua,[i(o)?(s(),l("button",{key:0,class:"menu","aria-expanded":$.open,"aria-controls":"VPSidebarNav",onClick:w[0]||(w[0]=S=>$.$emit("open-menu"))},[_(ja,{class:"menu-icon"}),u("span",Ra,T(i(e).sidebarMenuLabel||"Menu"),1)],8,Ga)):f("",!0),_(Ea,{headers:i(a),navHeight:c.value},null,8,["headers","navHeight"])])],2)):f("",!0)}}),Ka=g(qa,[["__scopeId","data-v-2158a76a"]]);function Wa(){const n=E(!1);function e(){n.value=!0,window.addEventListener("resize",a)}function t(){n.value=!1,window.removeEventListener("resize",a)}function o(){n.value?t():e()}function a(){window.outerWidth>=768&&t()}const r=fe();return te(()=>r.path,t),{isScreenOpen:n,openScreen:e,closeScreen:t,toggleScreen:o}}const Ya={},Za={class:"VPSwitch",type:"button",role:"switch"},Xa={class:"check"},Ja={key:0,class:"icon"};function Qa(n,e){return s(),l("button",Za,[u("span",Xa,[n.$slots.default?(s(),l("span",Ja,[v(n.$slots,"default",{},void 0,!0)])):f("",!0)])])}const es=g(Ya,[["render",Qa],["__scopeId","data-v-79d0ed95"]]),ts={},ns={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},os=u("path",{d:"M12.1,22c-0.3,0-0.6,0-0.9,0c-5.5-0.5-9.5-5.4-9-10.9c0.4-4.8,4.2-8.6,9-9c0.4,0,0.8,0.2,1,0.5c0.2,0.3,0.2,0.8-0.1,1.1c-2,2.7-1.4,6.4,1.3,8.4c2.1,1.6,5,1.6,7.1,0c0.3-0.2,0.7-0.3,1.1-0.1c0.3,0.2,0.5,0.6,0.5,1c-0.2,2.7-1.5,5.1-3.6,6.8C16.6,21.2,14.4,22,12.1,22zM9.3,4.4c-2.9,1-5,3.6-5.2,6.8c-0.4,4.4,2.8,8.3,7.2,8.7c2.1,0.2,4.2-0.4,5.8-1.8c1.1-0.9,1.9-2.1,2.4-3.4c-2.5,0.9-5.3,0.5-7.5-1.1C9.2,11.4,8.1,7.7,9.3,4.4z"},null,-1),as=[os];function ss(n,e){return s(),l("svg",ns,as)}const rs=g(ts,[["render",ss]]),is={},ls={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},cs=Kt('',9),us=[cs];function ds(n,e){return s(),l("svg",ls,us)}const ms=g(is,[["render",ds]]),vs=b({__name:"VPSwitchAppearance",setup(n){const{isDark:e,theme:t}=z(),o=Me("toggle-appearance",()=>{e.value=!e.value}),a=L(()=>e.value?t.value.lightModeSwitchTitle||"Switch to light theme":t.value.darkModeSwitchTitle||"Switch to dark theme");return(r,c)=>(s(),y(es,{title:a.value,class:"VPSwitchAppearance","aria-checked":i(e),onClick:i(o)},{default:p(()=>[_(ms,{class:"sun"}),_(rs,{class:"moon"})]),_:1},8,["title","aria-checked","onClick"]))}}),Je=g(vs,[["__scopeId","data-v-0298adb0"]]),ps={key:0,class:"VPNavBarAppearance"},hs=b({__name:"VPNavBarAppearance",setup(n){const{site:e}=z();return(t,o)=>i(e).appearance&&i(e).appearance!=="force-dark"?(s(),l("div",ps,[_(Je)])):f("",!0)}}),fs=g(hs,[["__scopeId","data-v-0e934124"]]),Qe=E();let yt=!1,Oe=0;function _s(n){const e=E(!1);if(le){!yt&&gs(),Oe++;const t=te(Qe,o=>{var a,r,c;o===n.el.value||(a=n.el.value)!=null&&a.contains(o)?(e.value=!0,(r=n.onFocus)==null||r.call(n)):(e.value=!1,(c=n.onBlur)==null||c.call(n))});Ke(()=>{t(),Oe--,Oe||bs()})}return Wt(e)}function gs(){document.addEventListener("focusin",wt),yt=!0,Qe.value=document.activeElement}function bs(){document.removeEventListener("focusin",wt)}function wt(){Qe.value=document.activeElement}const ks={},$s={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},ys=u("path",{d:"M12,16c-0.3,0-0.5-0.1-0.7-0.3l-6-6c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l5.3,5.3l5.3-5.3c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-6,6C12.5,15.9,12.3,16,12,16z"},null,-1),ws=[ys];function Ls(n,e){return s(),l("svg",$s,ws)}const Lt=g(ks,[["render",Ls]]),Ps={},Vs={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Ss=u("circle",{cx:"12",cy:"12",r:"2"},null,-1),zs=u("circle",{cx:"19",cy:"12",r:"2"},null,-1),Cs=u("circle",{cx:"5",cy:"12",r:"2"},null,-1),Ts=[Ss,zs,Cs];function Ms(n,e){return s(),l("svg",Vs,Ts)}const Is=g(Ps,[["render",Ms]]),Es={class:"VPMenuLink"},Ns=b({__name:"VPMenuLink",props:{item:{}},setup(n){const{page:e}=z();return(t,o)=>(s(),l("div",Es,[_(K,{class:H({active:i(ie)(i(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel},{default:p(()=>[j(T(t.item.text),1)]),_:1},8,["class","href","target","rel"])]))}}),Ie=g(Ns,[["__scopeId","data-v-9d1535a1"]]),Hs={class:"VPMenuGroup"},As={key:0,class:"title"},Bs=b({__name:"VPMenuGroup",props:{text:{},items:{}},setup(n){return(e,t)=>(s(),l("div",Hs,[e.text?(s(),l("p",As,T(e.text),1)):f("",!0),(s(!0),l(A,null,G(e.items,o=>(s(),l(A,null,["link"in o?(s(),y(Ie,{key:0,item:o},null,8,["item"])):f("",!0)],64))),256))]))}}),Os=g(Bs,[["__scopeId","data-v-c1904112"]]),Ds={class:"VPMenu"},Fs={key:0,class:"items"},xs=b({__name:"VPMenu",props:{items:{}},setup(n){return(e,t)=>(s(),l("div",Ds,[e.items?(s(),l("div",Fs,[(s(!0),l(A,null,G(e.items,o=>(s(),l(A,{key:o.text},["link"in o?(s(),y(Ie,{key:0,item:o},null,8,["item"])):(s(),y(Os,{key:1,text:o.text,items:o.items},null,8,["text","items"]))],64))),128))])):f("",!0),v(e.$slots,"default",{},void 0,!0)]))}}),js=g(xs,[["__scopeId","data-v-e699aa0c"]]),Us=["aria-expanded","aria-label"],Gs={key:0,class:"text"},Rs=["innerHTML"],qs={class:"menu"},Ks=b({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(n){const e=E(!1),t=E();_s({el:t,onBlur:o});function o(){e.value=!1}return(a,r)=>(s(),l("div",{class:"VPFlyout",ref_key:"el",ref:t,onMouseenter:r[1]||(r[1]=c=>e.value=!0),onMouseleave:r[2]||(r[2]=c=>e.value=!1)},[u("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":e.value,"aria-label":a.label,onClick:r[0]||(r[0]=c=>e.value=!e.value)},[a.button||a.icon?(s(),l("span",Gs,[a.icon?(s(),y(re(a.icon),{key:0,class:"option-icon"})):f("",!0),a.button?(s(),l("span",{key:1,innerHTML:a.button},null,8,Rs)):f("",!0),_(Lt,{class:"text-icon"})])):(s(),y(Is,{key:1,class:"icon"}))],8,Us),u("div",qs,[_(js,{items:a.items},{default:p(()=>[v(a.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),et=g(Ks,[["__scopeId","data-v-eaf183b7"]]),Ws={discord:'Discord',facebook:'Facebook',github:'GitHub',instagram:'Instagram',linkedin:'LinkedIn',mastodon:'Mastodon',slack:'Slack',twitter:'Twitter',x:'X',youtube:'YouTube'},Ys=["href","aria-label","innerHTML"],Zs=b({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(n){const e=n,t=L(()=>typeof e.icon=="object"?e.icon.svg:Ws[e.icon]);return(o,a)=>(s(),l("a",{class:"VPSocialLink no-icon",href:o.link,"aria-label":o.ariaLabel??(typeof o.icon=="string"?o.icon:""),target:"_blank",rel:"noopener",innerHTML:t.value},null,8,Ys))}}),Xs=g(Zs,[["__scopeId","data-v-f4d58015"]]),Js={class:"VPSocialLinks"},Qs=b({__name:"VPSocialLinks",props:{links:{}},setup(n){return(e,t)=>(s(),l("div",Js,[(s(!0),l(A,null,G(e.links,({link:o,icon:a,ariaLabel:r})=>(s(),y(Xs,{key:o,icon:a,link:o,ariaLabel:r},null,8,["icon","link","ariaLabel"]))),128))]))}}),Ee=g(Qs,[["__scopeId","data-v-20ea2c3a"]]),er={key:0,class:"group translations"},tr={class:"trans-title"},nr={key:1,class:"group"},or={class:"item appearance"},ar={class:"label"},sr={class:"appearance-action"},rr={key:2,class:"group"},ir={class:"item social-links"},lr=b({__name:"VPNavBarExtra",setup(n){const{site:e,theme:t}=z(),{localeLinks:o,currentLang:a}=_e({correspondingLink:!0}),r=L(()=>o.value.length&&a.value.label||e.value.appearance||t.value.socialLinks);return(c,d)=>r.value?(s(),y(et,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:p(()=>[i(o).length&&i(a).label?(s(),l("div",er,[u("p",tr,T(i(a).label),1),(s(!0),l(A,null,G(i(o),m=>(s(),y(Ie,{key:m.link,item:m},null,8,["item"]))),128))])):f("",!0),i(e).appearance&&i(e).appearance!=="force-dark"?(s(),l("div",nr,[u("div",or,[u("p",ar,T(i(t).darkModeSwitchLabel||"Appearance"),1),u("div",sr,[_(Je)])])])):f("",!0),i(t).socialLinks?(s(),l("div",rr,[u("div",ir,[_(Ee,{class:"social-links-list",links:i(t).socialLinks},null,8,["links"])])])):f("",!0)]),_:1})):f("",!0)}}),cr=g(lr,[["__scopeId","data-v-a4952b56"]]),ur=n=>(Z("data-v-5df5a4ba"),n=n(),X(),n),dr=["aria-expanded"],mr=ur(()=>u("span",{class:"container"},[u("span",{class:"top"}),u("span",{class:"middle"}),u("span",{class:"bottom"})],-1)),vr=[mr],pr=b({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(n){return(e,t)=>(s(),l("button",{type:"button",class:H(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:t[0]||(t[0]=o=>e.$emit("click"))},vr,10,dr))}}),hr=g(pr,[["__scopeId","data-v-5df5a4ba"]]),fr=["innerHTML"],_r=b({__name:"VPNavBarMenuLink",props:{item:{}},setup(n){const{page:e}=z();return(t,o)=>(s(),y(K,{class:H({VPNavBarMenuLink:!0,active:i(ie)(i(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel,tabindex:"0"},{default:p(()=>[u("span",{innerHTML:t.item.text},null,8,fr)]),_:1},8,["class","href","target","rel"]))}}),gr=g(_r,[["__scopeId","data-v-01a9a2a9"]]),br=b({__name:"VPNavBarMenuGroup",props:{item:{}},setup(n){const e=n,{page:t}=z(),o=r=>"link"in r?ie(t.value.relativePath,r.link,!!e.item.activeMatch):r.items.some(o),a=L(()=>o(e.item));return(r,c)=>(s(),y(et,{class:H({VPNavBarMenuGroup:!0,active:i(ie)(i(t).relativePath,r.item.activeMatch,!!r.item.activeMatch)||a.value}),button:r.item.text,items:r.item.items},null,8,["class","button","items"]))}}),kr=n=>(Z("data-v-10e7ffc9"),n=n(),X(),n),$r={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},yr=kr(()=>u("span",{id:"main-nav-aria-label",class:"visually-hidden"},"Main Navigation",-1)),wr=b({__name:"VPNavBarMenu",setup(n){const{theme:e}=z();return(t,o)=>i(e).nav?(s(),l("nav",$r,[yr,(s(!0),l(A,null,G(i(e).nav,a=>(s(),l(A,{key:a.text},["link"in a?(s(),y(gr,{key:0,item:a},null,8,["item"])):(s(),y(br,{key:1,item:a},null,8,["item"]))],64))),128))])):f("",!0)}}),Lr=g(wr,[["__scopeId","data-v-10e7ffc9"]]);function Pr(n){const{localeIndex:e,theme:t}=z();function o(a){var V,I,N;const r=a.split("."),c=(V=t.value.search)==null?void 0:V.options,d=c&&typeof c=="object",m=d&&((N=(I=c.locales)==null?void 0:I[e.value])==null?void 0:N.translations)||null,k=d&&c.translations||null;let $=m,w=k,S=n;const B=r.pop();for(const ue of r){let J=null;const F=S==null?void 0:S[ue];F&&(J=S=F);const oe=w==null?void 0:w[ue];oe&&(J=w=oe);const Q=$==null?void 0:$[ue];Q&&(J=$=Q),F||(S=J),oe||(w=J),Q||($=J)}return($==null?void 0:$[B])??(w==null?void 0:w[B])??(S==null?void 0:S[B])??""}return o}const Vr=["aria-label"],Sr={class:"DocSearch-Button-Container"},zr=u("svg",{class:"DocSearch-Search-Icon",width:"20",height:"20",viewBox:"0 0 20 20","aria-label":"search icon"},[u("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),Cr={class:"DocSearch-Button-Placeholder"},Tr=u("span",{class:"DocSearch-Button-Keys"},[u("kbd",{class:"DocSearch-Button-Key"}),u("kbd",{class:"DocSearch-Button-Key"},"K")],-1),at=b({__name:"VPNavBarSearchButton",setup(n){const t=Pr({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(o,a)=>(s(),l("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":i(t)("button.buttonAriaLabel")},[u("span",Sr,[zr,u("span",Cr,T(i(t)("button.buttonText")),1)]),Tr],8,Vr))}}),Mr={class:"VPNavBarSearch"},Ir={id:"local-search"},Er={key:1,id:"docsearch"},Nr=b({__name:"VPNavBarSearch",setup(n){const e=Yt(()=>pt(()=>import("./VPLocalSearchBox.Re7xpDUq.js"),__vite__mapDeps([0,1]))),t=()=>null,{theme:o}=z(),a=E(!1),r=E(!1);Y(()=>{});function c(){a.value||(a.value=!0,setTimeout(d,16))}function d(){const w=new Event("keydown");w.key="k",w.metaKey=!0,window.dispatchEvent(w),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||d()},16)}function m(w){const S=w.target,B=S.tagName;return S.isContentEditable||B==="INPUT"||B==="SELECT"||B==="TEXTAREA"}const k=E(!1);xe("k",w=>{(w.ctrlKey||w.metaKey)&&(w.preventDefault(),k.value=!0)}),xe("/",w=>{m(w)||(w.preventDefault(),k.value=!0)});const $="local";return(w,S)=>{var B;return s(),l("div",Mr,[i($)==="local"?(s(),l(A,{key:0},[k.value?(s(),y(i(e),{key:0,onClose:S[0]||(S[0]=V=>k.value=!1)})):f("",!0),u("div",Ir,[_(at,{onClick:S[1]||(S[1]=V=>k.value=!0)})])],64)):i($)==="algolia"?(s(),l(A,{key:1},[a.value?(s(),y(i(t),{key:0,algolia:((B=i(o).search)==null?void 0:B.options)??i(o).algolia,onVnodeBeforeMount:S[2]||(S[2]=V=>r.value=!0)},null,8,["algolia"])):f("",!0),r.value?f("",!0):(s(),l("div",Er,[_(at,{onClick:c})]))],64)):f("",!0)])}}}),Hr=b({__name:"VPNavBarSocialLinks",setup(n){const{theme:e}=z();return(t,o)=>i(e).socialLinks?(s(),y(Ee,{key:0,class:"VPNavBarSocialLinks",links:i(e).socialLinks},null,8,["links"])):f("",!0)}}),Ar=g(Hr,[["__scopeId","data-v-17479deb"]]),Br=["href","rel","target"],Or=b({__name:"VPNavBarTitle",setup(n){const{site:e,theme:t}=z(),{hasSidebar:o}=ne(),{currentLang:a}=_e(),r=L(()=>{var m;return typeof t.value.logoLink=="string"?t.value.logoLink:(m=t.value.logoLink)==null?void 0:m.link}),c=L(()=>{var m;return typeof t.value.logoLink=="string"||(m=t.value.logoLink)==null?void 0:m.rel}),d=L(()=>{var m;return typeof t.value.logoLink=="string"||(m=t.value.logoLink)==null?void 0:m.target});return(m,k)=>(s(),l("div",{class:H(["VPNavBarTitle",{"has-sidebar":i(o)}])},[u("a",{class:"title",href:r.value??i(Ye)(i(a).link),rel:c.value,target:d.value},[v(m.$slots,"nav-bar-title-before",{},void 0,!0),i(t).logo?(s(),y(Se,{key:0,class:"logo",image:i(t).logo},null,8,["image"])):f("",!0),i(t).siteTitle?(s(),l(A,{key:1},[j(T(i(t).siteTitle),1)],64)):i(t).siteTitle===void 0?(s(),l(A,{key:2},[j(T(i(e).title),1)],64)):f("",!0),v(m.$slots,"nav-bar-title-after",{},void 0,!0)],8,Br)],2))}}),Dr=g(Or,[["__scopeId","data-v-2256aec7"]]),Fr={},xr={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},jr=u("path",{d:"M0 0h24v24H0z",fill:"none"},null,-1),Ur=u("path",{d:" M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z ",class:"css-c4d79v"},null,-1),Gr=[jr,Ur];function Rr(n,e){return s(),l("svg",xr,Gr)}const Pt=g(Fr,[["render",Rr]]),qr={class:"items"},Kr={class:"title"},Wr=b({__name:"VPNavBarTranslations",setup(n){const{theme:e}=z(),{localeLinks:t,currentLang:o}=_e({correspondingLink:!0});return(a,r)=>i(t).length&&i(o).label?(s(),y(et,{key:0,class:"VPNavBarTranslations",icon:Pt,label:i(e).langMenuLabel||"Change language"},{default:p(()=>[u("div",qr,[u("p",Kr,T(i(o).label),1),(s(!0),l(A,null,G(i(t),c=>(s(),y(Ie,{key:c.link,item:c},null,8,["item"]))),128))])]),_:1},8,["label"])):f("",!0)}}),Yr=g(Wr,[["__scopeId","data-v-56a52592"]]),Zr=n=>(Z("data-v-9ec51abf"),n=n(),X(),n),Xr={class:"wrapper"},Jr={class:"container"},Qr={class:"title"},ei={class:"content"},ti={class:"content-body"},ni=Zr(()=>u("div",{class:"divider"},[u("div",{class:"divider-line"})],-1)),oi=b({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(n){const{y:e}=vt(),{hasSidebar:t}=ne(),{hasLocalNav:o}=kt(),{frontmatter:a}=z(),r=E({});return ut(()=>{r.value={"has-sidebar":t.value,"has-local-nav":o.value,top:a.value.layout==="home"&&e.value===0}}),(c,d)=>(s(),l("div",{class:H(["VPNavBar",r.value])},[u("div",Xr,[u("div",Jr,[u("div",Qr,[_(Dr,null,{"nav-bar-title-before":p(()=>[v(c.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":p(()=>[v(c.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),u("div",ei,[u("div",ti,[v(c.$slots,"nav-bar-content-before",{},void 0,!0),_(Nr,{class:"search"}),_(Lr,{class:"menu"}),_(Yr,{class:"translations"}),_(fs,{class:"appearance"}),_(Ar,{class:"social-links"}),_(cr,{class:"extra"}),v(c.$slots,"nav-bar-content-after",{},void 0,!0),_(hr,{class:"hamburger",active:c.isScreenOpen,onClick:d[0]||(d[0]=m=>c.$emit("toggle-screen"))},null,8,["active"])])])])]),ni],2))}}),ai=g(oi,[["__scopeId","data-v-9ec51abf"]]),si={key:0,class:"VPNavScreenAppearance"},ri={class:"text"},ii=b({__name:"VPNavScreenAppearance",setup(n){const{site:e,theme:t}=z();return(o,a)=>i(e).appearance&&i(e).appearance!=="force-dark"?(s(),l("div",si,[u("p",ri,T(i(t).darkModeSwitchLabel||"Appearance"),1),_(Je)])):f("",!0)}}),li=g(ii,[["__scopeId","data-v-2f05ca60"]]),ci=b({__name:"VPNavScreenMenuLink",props:{item:{}},setup(n){const e=Me("close-screen");return(t,o)=>(s(),y(K,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:i(e)},{default:p(()=>[j(T(t.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}}),ui=g(ci,[["__scopeId","data-v-13a0f76d"]]),di={},mi={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},vi=u("path",{d:"M18.9,10.9h-6v-6c0-0.6-0.4-1-1-1s-1,0.4-1,1v6h-6c-0.6,0-1,0.4-1,1s0.4,1,1,1h6v6c0,0.6,0.4,1,1,1s1-0.4,1-1v-6h6c0.6,0,1-0.4,1-1S19.5,10.9,18.9,10.9z"},null,-1),pi=[vi];function hi(n,e){return s(),l("svg",mi,pi)}const fi=g(di,[["render",hi]]),_i=b({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(n){const e=Me("close-screen");return(t,o)=>(s(),y(K,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:i(e)},{default:p(()=>[j(T(t.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}}),Vt=g(_i,[["__scopeId","data-v-a77909ab"]]),gi={class:"VPNavScreenMenuGroupSection"},bi={key:0,class:"title"},ki=b({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(n){return(e,t)=>(s(),l("div",gi,[e.text?(s(),l("p",bi,T(e.text),1)):f("",!0),(s(!0),l(A,null,G(e.items,o=>(s(),y(Vt,{key:o.text,item:o},null,8,["item"]))),128))]))}}),$i=g(ki,[["__scopeId","data-v-02647012"]]),yi=["aria-controls","aria-expanded"],wi=["innerHTML"],Li=["id"],Pi={key:1,class:"group"},Vi=b({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(n){const e=n,t=E(!1),o=L(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function a(){t.value=!t.value}return(r,c)=>(s(),l("div",{class:H(["VPNavScreenMenuGroup",{open:t.value}])},[u("button",{class:"button","aria-controls":o.value,"aria-expanded":t.value,onClick:a},[u("span",{class:"button-text",innerHTML:r.text},null,8,wi),_(fi,{class:"button-icon"})],8,yi),u("div",{id:o.value,class:"items"},[(s(!0),l(A,null,G(r.items,d=>(s(),l(A,{key:d.text},["link"in d?(s(),l("div",{key:d.text,class:"item"},[_(Vt,{item:d},null,8,["item"])])):(s(),l("div",Pi,[_($i,{text:d.text,items:d.items},null,8,["text","items"])]))],64))),128))],8,Li)],2))}}),Si=g(Vi,[["__scopeId","data-v-add8adf0"]]),zi={key:0,class:"VPNavScreenMenu"},Ci=b({__name:"VPNavScreenMenu",setup(n){const{theme:e}=z();return(t,o)=>i(e).nav?(s(),l("nav",zi,[(s(!0),l(A,null,G(i(e).nav,a=>(s(),l(A,{key:a.text},["link"in a?(s(),y(ui,{key:0,item:a},null,8,["item"])):(s(),y(Si,{key:1,text:a.text||"",items:a.items},null,8,["text","items"]))],64))),128))])):f("",!0)}}),Ti=b({__name:"VPNavScreenSocialLinks",setup(n){const{theme:e}=z();return(t,o)=>i(e).socialLinks?(s(),y(Ee,{key:0,class:"VPNavScreenSocialLinks",links:i(e).socialLinks},null,8,["links"])):f("",!0)}}),Mi={class:"list"},Ii=b({__name:"VPNavScreenTranslations",setup(n){const{localeLinks:e,currentLang:t}=_e({correspondingLink:!0}),o=E(!1);function a(){o.value=!o.value}return(r,c)=>i(e).length&&i(t).label?(s(),l("div",{key:0,class:H(["VPNavScreenTranslations",{open:o.value}])},[u("button",{class:"title",onClick:a},[_(Pt,{class:"icon lang"}),j(" "+T(i(t).label)+" ",1),_(Lt,{class:"icon chevron"})]),u("ul",Mi,[(s(!0),l(A,null,G(i(e),d=>(s(),l("li",{key:d.link,class:"item"},[_(K,{class:"link",href:d.link},{default:p(()=>[j(T(d.text),1)]),_:2},1032,["href"])]))),128))])],2)):f("",!0)}}),Ei=g(Ii,[["__scopeId","data-v-e924fe42"]]),Ni={class:"container"},Hi=b({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(n){const e=E(null),t=ht(le?document.body:null);return(o,a)=>(s(),y(ze,{name:"fade",onEnter:a[0]||(a[0]=r=>t.value=!0),onAfterLeave:a[1]||(a[1]=r=>t.value=!1)},{default:p(()=>[o.open?(s(),l("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e,id:"VPNavScreen"},[u("div",Ni,[v(o.$slots,"nav-screen-content-before",{},void 0,!0),_(Ci,{class:"menu"}),_(Ei,{class:"translations"}),_(li,{class:"appearance"}),_(Ti,{class:"social-links"}),v(o.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):f("",!0)]),_:3}))}}),Ai=g(Hi,[["__scopeId","data-v-b4543032"]]),Bi={key:0,class:"VPNav"},Oi=b({__name:"VPNav",setup(n){const{isScreenOpen:e,closeScreen:t,toggleScreen:o}=Wa(),{frontmatter:a}=z(),r=L(()=>a.value.navbar!==!1);return ft("close-screen",t),Ce(()=>{le&&document.documentElement.classList.toggle("hide-nav",!r.value)}),(c,d)=>r.value?(s(),l("header",Bi,[_(ai,{"is-screen-open":i(e),onToggleScreen:i(o)},{"nav-bar-title-before":p(()=>[v(c.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":p(()=>[v(c.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":p(()=>[v(c.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":p(()=>[v(c.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),_(Ai,{open:i(e)},{"nav-screen-content-before":p(()=>[v(c.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":p(()=>[v(c.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):f("",!0)}}),Di=g(Oi,[["__scopeId","data-v-ca0a69ce"]]),Fi=n=>(Z("data-v-eb64199c"),n=n(),X(),n),xi=["role","tabindex"],ji=Fi(()=>u("div",{class:"indicator"},null,-1)),Ui={key:1,class:"items"},Gi=b({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(n){const e=n,{collapsed:t,collapsible:o,isLink:a,isActiveLink:r,hasActiveLink:c,hasChildren:d,toggle:m}=yn(L(()=>e.item)),k=L(()=>d.value?"section":"div"),$=L(()=>a.value?"a":"div"),w=L(()=>d.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),S=L(()=>a.value?void 0:"button"),B=L(()=>[[`level-${e.depth}`],{collapsible:o.value},{collapsed:t.value},{"is-link":a.value},{"is-active":r.value},{"has-active":c.value}]);function V(N){"key"in N&&N.key!=="Enter"||!e.item.link&&m()}function I(){e.item.link&&m()}return(N,ue)=>{const J=ce("VPSidebarItem",!0);return s(),y(re(k.value),{class:H(["VPSidebarItem",B.value])},{default:p(()=>[N.item.text?(s(),l("div",we({key:0,class:"item",role:S.value},Zt(N.item.items?{click:V,keydown:V}:{},!0),{tabindex:N.item.items&&0}),[ji,N.item.link?(s(),y(K,{key:0,tag:$.value,class:"link",href:N.item.link,rel:N.item.rel,target:N.item.target},{default:p(()=>[(s(),y(re(w.value),{class:"text",innerHTML:N.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(s(),y(re(w.value),{key:1,class:"text",innerHTML:N.item.text},null,8,["innerHTML"])),N.item.collapsed!=null?(s(),l("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:I,onKeydown:Xt(I,["enter"]),tabindex:"0"},[_($t,{class:"caret-icon"})],32)):f("",!0)],16,xi)):f("",!0),N.item.items&&N.item.items.length?(s(),l("div",Ui,[N.depth<5?(s(!0),l(A,{key:0},G(N.item.items,F=>(s(),y(J,{key:F.text,item:F,depth:N.depth+1},null,8,["item","depth"]))),128)):f("",!0)])):f("",!0)]),_:1},8,["class"])}}}),Ri=g(Gi,[["__scopeId","data-v-eb64199c"]]),St=n=>(Z("data-v-7b6857b5"),n=n(),X(),n),qi=St(()=>u("div",{class:"curtain"},null,-1)),Ki={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},Wi=St(()=>u("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),Yi=b({__name:"VPSidebar",props:{open:{type:Boolean}},setup(n){const{sidebarGroups:e,hasSidebar:t}=ne(),o=n,a=E(null),r=ht(le?document.body:null);return te([o,a],()=>{var c;o.open?(r.value=!0,(c=a.value)==null||c.focus()):r.value=!1},{immediate:!0,flush:"post"}),(c,d)=>i(t)?(s(),l("aside",{key:0,class:H(["VPSidebar",{open:c.open}]),ref_key:"navEl",ref:a,onClick:d[0]||(d[0]=Jt(()=>{},["stop"]))},[qi,u("nav",Ki,[Wi,v(c.$slots,"sidebar-nav-before",{},void 0,!0),(s(!0),l(A,null,G(i(e),m=>(s(),l("div",{key:m.text,class:"group"},[_(Ri,{item:m,depth:0},null,8,["item"])]))),128)),v(c.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):f("",!0)}}),Zi=g(Yi,[["__scopeId","data-v-7b6857b5"]]),Xi=b({__name:"VPSkipLink",setup(n){const e=fe(),t=E();te(()=>e.path,()=>t.value.focus());function o({target:a}){const r=document.getElementById(decodeURIComponent(a.hash).slice(1));if(r){const c=()=>{r.removeAttribute("tabindex"),r.removeEventListener("blur",c)};r.setAttribute("tabindex","-1"),r.addEventListener("blur",c),r.focus(),window.scrollTo(0,0)}}return(a,r)=>(s(),l(A,null,[u("span",{ref_key:"backToTop",ref:t,tabindex:"-1"},null,512),u("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:o}," Skip to content ")],64))}}),Ji=g(Xi,[["__scopeId","data-v-2cc3dcc2"]]),Qi=b({__name:"Layout",setup(n){const{isOpen:e,open:t,close:o}=ne(),a=fe();te(()=>a.path,o),$n(e,o);const{frontmatter:r}=z(),c=Qt(),d=L(()=>!!c["home-hero-image"]);return ft("hero-image-slot-exists",d),(m,k)=>{const $=ce("Content");return i(r).layout!==!1?(s(),l("div",{key:0,class:H(["Layout",i(r).pageClass])},[v(m.$slots,"layout-top",{},void 0,!0),_(Ji),_(sn,{class:"backdrop",show:i(e),onClick:i(o)},null,8,["show","onClick"]),_(Di,null,{"nav-bar-title-before":p(()=>[v(m.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":p(()=>[v(m.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":p(()=>[v(m.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":p(()=>[v(m.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":p(()=>[v(m.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":p(()=>[v(m.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),_(Ka,{open:i(e),onOpenMenu:i(t)},null,8,["open","onOpenMenu"]),_(Zi,{open:i(e)},{"sidebar-nav-before":p(()=>[v(m.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":p(()=>[v(m.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),_(ba,null,{"page-top":p(()=>[v(m.$slots,"page-top",{},void 0,!0)]),"page-bottom":p(()=>[v(m.$slots,"page-bottom",{},void 0,!0)]),"not-found":p(()=>[v(m.$slots,"not-found",{},void 0,!0)]),"home-hero-before":p(()=>[v(m.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info":p(()=>[v(m.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-image":p(()=>[v(m.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":p(()=>[v(m.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":p(()=>[v(m.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":p(()=>[v(m.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":p(()=>[v(m.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":p(()=>[v(m.$slots,"doc-before",{},void 0,!0)]),"doc-after":p(()=>[v(m.$slots,"doc-after",{},void 0,!0)]),"doc-top":p(()=>[v(m.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":p(()=>[v(m.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":p(()=>[v(m.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":p(()=>[v(m.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":p(()=>[v(m.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":p(()=>[v(m.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":p(()=>[v(m.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":p(()=>[v(m.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),_(La),v(m.$slots,"layout-bottom",{},void 0,!0)],2)):(s(),y($,{key:1}))}}}),el=g(Qi,[["__scopeId","data-v-6b5043bc"]]),tl={},nl={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},ol=u("path",{d:"M12,22.2c-0.3,0-0.5-0.1-0.7-0.3l-8.8-8.8c-2.5-2.5-2.5-6.7,0-9.2c2.5-2.5,6.7-2.5,9.2,0L12,4.3l0.4-0.4c0,0,0,0,0,0C13.6,2.7,15.2,2,16.9,2c0,0,0,0,0,0c1.7,0,3.4,0.7,4.6,1.9l0,0c1.2,1.2,1.9,2.9,1.9,4.6c0,1.7-0.7,3.4-1.9,4.6l-8.8,8.8C12.5,22.1,12.3,22.2,12,22.2zM7,4C5.9,4,4.7,4.4,3.9,5.3c-1.8,1.8-1.8,4.6,0,6.4l8.1,8.1l8.1-8.1c0.9-0.9,1.3-2,1.3-3.2c0-1.2-0.5-2.3-1.3-3.2l0,0C19.3,4.5,18.2,4,17,4c0,0,0,0,0,0c-1.2,0-2.3,0.5-3.2,1.3c0,0,0,0,0,0l-1.1,1.1c-0.4,0.4-1,0.4-1.4,0l-1.1-1.1C9.4,4.4,8.2,4,7,4z"},null,-1),al=[ol];function sl(n,e){return s(),l("svg",nl,al)}const rl=g(tl,[["render",sl]]),il={},ll={class:"VPTeamPage"};function cl(n,e){return s(),l("div",ll,[v(n.$slots,"default")])}const oc=g(il,[["render",cl],["__scopeId","data-v-0dac1e67"]]),ul={},dl={class:"VPTeamPageTitle"},ml={key:0,class:"title"},vl={key:1,class:"lead"};function pl(n,e){return s(),l("div",dl,[n.$slots.title?(s(),l("h1",ml,[v(n.$slots,"title",{},void 0,!0)])):f("",!0),n.$slots.lead?(s(),l("p",vl,[v(n.$slots,"lead",{},void 0,!0)])):f("",!0)])}const ac=g(ul,[["render",pl],["__scopeId","data-v-867cfc0f"]]),hl={class:"profile"},fl={class:"avatar"},_l=["src","alt"],gl={class:"data"},bl={class:"name"},kl={key:0,class:"affiliation"},$l={key:0,class:"title"},yl={key:1,class:"at"},wl=["innerHTML"],Ll={key:2,class:"links"},Pl={key:0,class:"sp"},Vl=b({__name:"VPTeamMembersItem",props:{size:{default:"medium"},member:{}},setup(n){return(e,t)=>(s(),l("article",{class:H(["VPTeamMembersItem",[e.size]])},[u("div",hl,[u("figure",fl,[u("img",{class:"avatar-img",src:e.member.avatar,alt:e.member.name},null,8,_l)]),u("div",gl,[u("h1",bl,T(e.member.name),1),e.member.title||e.member.org?(s(),l("p",kl,[e.member.title?(s(),l("span",$l,T(e.member.title),1)):f("",!0),e.member.title&&e.member.org?(s(),l("span",yl," @ ")):f("",!0),e.member.org?(s(),y(K,{key:2,class:H(["org",{link:e.member.orgLink}]),href:e.member.orgLink,"no-icon":""},{default:p(()=>[j(T(e.member.org),1)]),_:1},8,["class","href"])):f("",!0)])):f("",!0),e.member.desc?(s(),l("p",{key:1,class:"desc",innerHTML:e.member.desc},null,8,wl)):f("",!0),e.member.links?(s(),l("div",Ll,[_(Ee,{links:e.member.links},null,8,["links"])])):f("",!0)])]),e.member.sponsor?(s(),l("div",Pl,[_(K,{class:"sp-link",href:e.member.sponsor,"no-icon":""},{default:p(()=>[_(rl,{class:"sp-icon"}),j(" "+T(e.member.actionText||"Sponsor"),1)]),_:1},8,["href"])])):f("",!0)],2))}}),Sl=g(Vl,[["__scopeId","data-v-c8b9bdef"]]),zl={class:"container"},Cl=b({__name:"VPTeamMembers",props:{size:{default:"medium"},members:{}},setup(n){const e=n,t=L(()=>[e.size,`count-${e.members.length}`]);return(o,a)=>(s(),l("div",{class:H(["VPTeamMembers",t.value])},[u("div",zl,[(s(!0),l(A,null,G(o.members,r=>(s(),l("div",{key:r.name,class:"item"},[_(Sl,{size:o.size,member:r},null,8,["size","member"])]))),128))])],2))}}),sc=g(Cl,[["__scopeId","data-v-130c6a1d"]]),st={Layout:el,enhanceApp:({app:n})=>{n.component("Badge",nn)}},Tl=["id","host","repo","repoid","category","categoryid","mapping","term","strict","reactionsenabled","emitmetadata","inputposition","theme","lang","loading"],Ml=b({__name:"Giscus",props:{id:{},host:{},repo:{},repoId:{},category:{},categoryId:{},mapping:{},term:{},theme:{},strict:{},reactionsEnabled:{},emitMetadata:{},inputPosition:{},lang:{},loading:{}},setup(n){const e=E(!1);return Y(()=>{e.value=!0,pt(()=>import("./giscus-aTimukGI.CKTvSCx2.js"),[])}),(t,o)=>e.value?(s(),l("giscus-widget",{key:0,id:t.id,host:t.host,repo:t.repo,repoid:t.repoId,category:t.category,categoryid:t.categoryId,mapping:t.mapping,term:t.term,strict:t.strict,reactionsenabled:t.reactionsEnabled,emitmetadata:t.emitMetadata,inputposition:t.inputPosition,theme:t.theme,lang:t.lang,loading:t.loading},null,8,Tl)):f("",!0)}}),rt=(n,e,t=!0)=>{var k;const o={id:"comment",host:"https://giscus.app",category:"General",mapping:"pathname",term:"Welcome to giscus!",reactionsEnabled:"1",inputPosition:"top",lang:"zh-CN",loading:"lazy",repo:"xxx/xxx",repoId:"",homePageShowComment:!1};if(n.locales){const w=document.querySelector("html").getAttribute("lang");w&&n.locales[w]&&(n.lang=n.locales[w])}const a=n.lightTheme||"light",r=n.darkTheme||"transparent_dark";let c=document.getElementById("giscus");if(c&&c.parentNode.removeChild(c),(e==null?void 0:e.value.comment)!==void 0){if(!(e!=null&&e.value.comment))return}else if(!t)return;if(!n.homePageShowComment&&(!location.pathname||location.pathname==="/"))return;const d=((k=document.querySelector("html"))==null?void 0:k.className.indexOf("dark"))!==-1,m=document.getElementsByClassName("content-container")[0];if(m){const $=document.createElement("div");$.setAttribute("id","giscus"),$.style.height="auto",$.style.marginTop="40px",$.style.borderTop="1px solid var(--vp-c-divider)",$.style.paddingTop="20px",m.append($),en({render:()=>Ve(Ml,{...o,theme:d?r:a,...n})}).mount("#giscus")}},Il=n=>{const e=document.querySelector("html"),t=n.lightTheme||"light",o=n.darkTheme||"transparent_dark";new MutationObserver(r=>{r.forEach(c=>{if(c.type=="attributes"){let d=document.getElementById("comment");d==null||d.setAttribute("theme",e.className.indexOf("dark")!==-1?o:t)}})}).observe(e,{attributeFilter:["class"]})},El=(n,e,t=!0)=>{Y(()=>{rt(n,e.frontmatter,t),Il(n)}),te(()=>e.route.path,()=>We(()=>{rt(n,e.frontmatter,t)}))};/*! medium-zoom 1.1.0 | MIT License | https://github.com/francoischalifour/medium-zoom */var se=Object.assign||function(n){for(var e=1;ei.map(i=>d[i]); +import{d as b,o as s,c as l,r as v,n as H,a as j,t as T,b as y,w as p,e as f,T as ze,_ as g,u as Re,i as jt,f as Ut,g as qe,h as E,j as le,k as L,l as Y,m as u,p as i,q as Z,s as X,v as ie,x as Fe,y as te,z as Ce,A as Ke,B as ut,C as Gt,D as ce,F as A,E as G,G as dt,H as Te,I as _,J as re,K as mt,L as fe,M as we,N as Me,O as Rt,P as xe,Q as qt,R as We,S as vt,U as Kt,V as Wt,W as Yt,X as pt,Y as ht,Z as ft,$ as Zt,a0 as Xt,a1 as Jt,a2 as Qt,a3 as en,a4 as Ve,a5 as tn}from"./framework.CmHn2guR.js";const nn=b({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(n){return(e,t)=>(s(),l("span",{class:H(["VPBadge",e.type])},[v(e.$slots,"default",{},()=>[j(T(e.text),1)])],2))}}),on={key:0,class:"VPBackdrop"},an=b({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(n){return(e,t)=>(s(),y(ze,{name:"fade"},{default:p(()=>[e.show?(s(),l("div",on)):f("",!0)]),_:1}))}}),sn=g(an,[["__scopeId","data-v-7400d5fd"]]),z=Re;function rn(n,e){let t,o=!1;return()=>{t&&clearTimeout(t),o?t=setTimeout(n,e):(n(),(o=!0)&&setTimeout(()=>o=!1,e))}}function je(n){return/^\//.test(n)?n:`/${n}`}function Ye(n){const{pathname:e,search:t,hash:o,protocol:a}=new URL(n,"http://a.com");if(jt(n)||n.startsWith("#")||!a.startsWith("http")||!Ut(e))return n;const{site:r}=z(),c=e.endsWith("/")||e.endsWith(".html")?n:n.replace(/(?:(^\.+)\/)?.*$/,`$1${e.replace(/(\.md)?$/,r.value.cleanUrls?"":".html")}${t}${o}`);return qe(c)}const Ze=E(le?location.hash:"");le&&window.addEventListener("hashchange",()=>{Ze.value=location.hash});function _e({removeCurrent:n=!0,correspondingLink:e=!1}={}){const{site:t,localeIndex:o,page:a,theme:r}=z(),c=L(()=>{var m,k;return{label:(m=t.value.locales[o.value])==null?void 0:m.label,link:((k=t.value.locales[o.value])==null?void 0:k.link)||(o.value==="root"?"/":`/${o.value}/`)}});return{localeLinks:L(()=>Object.entries(t.value.locales).flatMap(([m,k])=>n&&c.value.label===k.label?[]:{text:k.label,link:ln(k.link||(m==="root"?"/":`/${m}/`),r.value.i18nRouting!==!1&&e,a.value.relativePath.slice(c.value.link.length-1),!t.value.cleanUrls)+Ze.value})),currentLang:c}}function ln(n,e,t,o){return e?n.replace(/\/$/,"")+je(t.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,o?".html":"")):n}const cn=n=>(Z("data-v-922e1a30"),n=n(),X(),n),un={class:"NotFound"},dn={class:"code"},mn={class:"title"},vn=cn(()=>u("div",{class:"divider"},null,-1)),pn={class:"quote"},hn={class:"action"},fn=["href","aria-label"],_n=b({__name:"NotFound",setup(n){const{site:e,theme:t}=z(),{localeLinks:o}=_e({removeCurrent:!1}),a=E("/");return Y(()=>{var c;const r=window.location.pathname.replace(e.value.base,"").replace(/(^.*?\/).*$/,"/$1");o.value.length&&(a.value=((c=o.value.find(({link:d})=>d.startsWith(r)))==null?void 0:c.link)||o.value[0].link)}),(r,c)=>{var d,m,k,$,w;return s(),l("div",un,[u("p",dn,T(((d=i(t).notFound)==null?void 0:d.code)??"404"),1),u("h1",mn,T(((m=i(t).notFound)==null?void 0:m.title)??"PAGE NOT FOUND"),1),vn,u("blockquote",pn,T(((k=i(t).notFound)==null?void 0:k.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),u("div",hn,[u("a",{class:"link",href:i(qe)(a.value),"aria-label":(($=i(t).notFound)==null?void 0:$.linkLabel)??"go to home"},T(((w=i(t).notFound)==null?void 0:w.linkText)??"Take me home"),9,fn)])])}}}),gn=g(_n,[["__scopeId","data-v-922e1a30"]]);function _t(n,e){if(Array.isArray(n))return Le(n);if(n==null)return[];e=je(e);const t=Object.keys(n).sort((a,r)=>r.split("/").length-a.split("/").length).find(a=>e.startsWith(je(a))),o=t?n[t]:[];return Array.isArray(o)?Le(o):Le(o.items,o.base)}function bn(n){const e=[];let t=0;for(const o in n){const a=n[o];if(a.items){t=e.push(a);continue}e[t]||e.push({items:[]}),e[t].items.push(a)}return e}function kn(n){const e=[];function t(o){for(const a of o)a.text&&a.link&&e.push({text:a.text,link:a.link,docFooterText:a.docFooterText}),a.items&&t(a.items)}return t(n),e}function Ue(n,e){return Array.isArray(e)?e.some(t=>Ue(n,t)):ie(n,e.link)?!0:e.items?Ue(n,e.items):!1}function Le(n,e){return[...n].map(t=>{const o={...t},a=o.base||e;return a&&o.link&&(o.link=a+o.link),o.items&&(o.items=Le(o.items,a)),o})}function ne(){const{frontmatter:n,page:e,theme:t}=z(),o=Fe("(min-width: 960px)"),a=E(!1),r=L(()=>{const I=t.value.sidebar,N=e.value.relativePath;return I?_t(I,N):[]}),c=E(r.value);te(r,(I,N)=>{JSON.stringify(I)!==JSON.stringify(N)&&(c.value=r.value)});const d=L(()=>n.value.sidebar!==!1&&c.value.length>0&&n.value.layout!=="home"),m=L(()=>k?n.value.aside==null?t.value.aside==="left":n.value.aside==="left":!1),k=L(()=>n.value.layout==="home"?!1:n.value.aside!=null?!!n.value.aside:t.value.aside!==!1),$=L(()=>d.value&&o.value),w=L(()=>d.value?bn(c.value):[]);function S(){a.value=!0}function B(){a.value=!1}function V(){a.value?B():S()}return{isOpen:a,sidebar:c,sidebarGroups:w,hasSidebar:d,hasAside:k,leftAside:m,isSidebarEnabled:$,open:S,close:B,toggle:V}}function $n(n,e){let t;Ce(()=>{t=n.value?document.activeElement:void 0}),Y(()=>{window.addEventListener("keyup",o)}),Ke(()=>{window.removeEventListener("keyup",o)});function o(a){a.key==="Escape"&&n.value&&(e(),t==null||t.focus())}}function yn(n){const{page:e}=z(),t=E(!1),o=L(()=>n.value.collapsed!=null),a=L(()=>!!n.value.link),r=E(!1),c=()=>{r.value=ie(e.value.relativePath,n.value.link)};te([e,n,Ze],c),Y(c);const d=L(()=>r.value?!0:n.value.items?Ue(e.value.relativePath,n.value.items):!1),m=L(()=>!!(n.value.items&&n.value.items.length));Ce(()=>{t.value=!!(o.value&&n.value.collapsed)}),ut(()=>{(r.value||d.value)&&(t.value=!1)});function k(){o.value&&(t.value=!t.value)}return{collapsed:t,collapsible:o,isLink:a,isActiveLink:r,hasActiveLink:d,hasChildren:m,toggle:k}}function wn(){const{hasSidebar:n}=ne(),e=Fe("(min-width: 960px)"),t=Fe("(min-width: 1280px)");return{isAsideEnabled:L(()=>!t.value&&!e.value?!1:n.value?t.value:e.value)}}const Ge=[];function gt(n){return typeof n.outline=="object"&&!Array.isArray(n.outline)&&n.outline.label||n.outlineTitle||"On this page"}function Xe(n){const e=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(t=>t.id&&t.hasChildNodes()).map(t=>{const o=Number(t.tagName[1]);return{element:t,title:Ln(t),link:"#"+t.id,level:o}});return Pn(e,n)}function Ln(n){let e="";for(const t of n.childNodes)if(t.nodeType===1){if(t.classList.contains("VPBadge")||t.classList.contains("header-anchor")||t.classList.contains("ignore-header"))continue;e+=t.textContent}else t.nodeType===3&&(e+=t.textContent);return e.trim()}function Pn(n,e){if(e===!1)return[];const t=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[o,a]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;n=n.filter(c=>c.level>=o&&c.level<=a),Ge.length=0;for(const{element:c,link:d}of n)Ge.push({element:c,link:d});const r=[];e:for(let c=0;c=0;m--){const k=n[m];if(k.level{requestAnimationFrame(r),window.addEventListener("scroll",o)}),Gt(()=>{c(location.hash)}),Ke(()=>{window.removeEventListener("scroll",o)});function r(){if(!t.value)return;const d=(()=>{var I;const V=(I=document.querySelector("#VPContent .VPDoc"))==null?void 0:I.firstElementChild;return V?ot(V):78})(),m=window.scrollY,k=window.innerHeight,$=document.body.offsetHeight,w=Math.abs(m+k-$)<1,S=Ge.map(({element:V,link:I})=>({link:I,top:ot(V)})).filter(({top:V})=>!Number.isNaN(V)).sort((V,I)=>V.top-I.top);if(!S.length){c(null);return}if(m<1){c(null);return}if(w){c(S[S.length-1].link);return}let B=null;for(const{link:V,top:I}of S){if(I>m+d)break;B=V}c(B)}function c(d){a&&a.classList.remove("active"),d==null?a=null:a=n.value.querySelector(`a[href="${decodeURIComponent(d)}"]`);const m=a;m?(m.classList.add("active"),e.value.style.top=m.offsetTop+39+"px",e.value.style.opacity="1"):(e.value.style.top="33px",e.value.style.opacity="0")}}function ot(n){let e=0;for(;n!==document.body;){if(n===null)return NaN;e+=n.offsetTop,n=n.offsetParent}return e}const Sn=["href","title"],zn=b({__name:"VPDocOutlineItem",props:{headers:{},root:{type:Boolean}},setup(n){function e({target:t}){const o=t.href.split("#")[1],a=document.getElementById(decodeURIComponent(o));a==null||a.focus({preventScroll:!0})}return(t,o)=>{const a=ce("VPDocOutlineItem",!0);return s(),l("ul",{class:H(["VPDocOutlineItem",t.root?"root":"nested"])},[(s(!0),l(A,null,G(t.headers,({children:r,link:c,title:d})=>(s(),l("li",null,[u("a",{class:"outline-link",href:c,onClick:e,title:d},T(d),9,Sn),r!=null&&r.length?(s(),y(a,{key:0,headers:r},null,8,["headers"])):f("",!0)]))),256))],2)}}}),bt=g(zn,[["__scopeId","data-v-cf5865db"]]),Cn=n=>(Z("data-v-e2c17725"),n=n(),X(),n),Tn={class:"content"},Mn={class:"outline-title",role:"heading","aria-level":"2"},In={"aria-labelledby":"doc-outline-aria-label"},En=Cn(()=>u("span",{class:"visually-hidden",id:"doc-outline-aria-label"}," Table of Contents for current page ",-1)),Nn=b({__name:"VPDocAsideOutline",setup(n){const{frontmatter:e,theme:t}=z(),o=dt([]);Te(()=>{o.value=Xe(e.value.outline??t.value.outline)});const a=E(),r=E();return Vn(a,r),(c,d)=>(s(),l("div",{class:H(["VPDocAsideOutline",{"has-outline":o.value.length>0}]),ref_key:"container",ref:a,role:"navigation"},[u("div",Tn,[u("div",{class:"outline-marker",ref_key:"marker",ref:r},null,512),u("div",Mn,T(i(gt)(i(t))),1),u("nav",In,[En,_(bt,{headers:o.value,root:!0},null,8,["headers"])])])],2))}}),Hn=g(Nn,[["__scopeId","data-v-e2c17725"]]),An={class:"VPDocAsideCarbonAds"},Bn=b({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(n){const e=()=>null;return(t,o)=>(s(),l("div",An,[_(i(e),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),On=n=>(Z("data-v-8b9c5d2d"),n=n(),X(),n),Dn={class:"VPDocAside"},Fn=On(()=>u("div",{class:"spacer"},null,-1)),xn=b({__name:"VPDocAside",setup(n){const{theme:e}=z();return(t,o)=>(s(),l("div",Dn,[v(t.$slots,"aside-top",{},void 0,!0),v(t.$slots,"aside-outline-before",{},void 0,!0),_(Hn),v(t.$slots,"aside-outline-after",{},void 0,!0),Fn,v(t.$slots,"aside-ads-before",{},void 0,!0),i(e).carbonAds?(s(),y(Bn,{key:0,"carbon-ads":i(e).carbonAds},null,8,["carbon-ads"])):f("",!0),v(t.$slots,"aside-ads-after",{},void 0,!0),v(t.$slots,"aside-bottom",{},void 0,!0)]))}}),jn=g(xn,[["__scopeId","data-v-8b9c5d2d"]]);function Un(){const{theme:n,page:e}=z();return L(()=>{const{text:t="Edit this page",pattern:o=""}=n.value.editLink||{};let a;return typeof o=="function"?a=o(e.value):a=o.replace(/:path/g,e.value.filePath),{url:a,text:t}})}function Gn(){const{page:n,theme:e,frontmatter:t}=z();return L(()=>{var m,k,$,w,S,B,V,I;const o=_t(e.value.sidebar,n.value.relativePath),a=kn(o),r=a.findIndex(N=>ie(n.value.relativePath,N.link)),c=((m=e.value.docFooter)==null?void 0:m.prev)===!1&&!t.value.prev||t.value.prev===!1,d=((k=e.value.docFooter)==null?void 0:k.next)===!1&&!t.value.next||t.value.next===!1;return{prev:c?void 0:{text:(typeof t.value.prev=="string"?t.value.prev:typeof t.value.prev=="object"?t.value.prev.text:void 0)??(($=a[r-1])==null?void 0:$.docFooterText)??((w=a[r-1])==null?void 0:w.text),link:(typeof t.value.prev=="object"?t.value.prev.link:void 0)??((S=a[r-1])==null?void 0:S.link)},next:d?void 0:{text:(typeof t.value.next=="string"?t.value.next:typeof t.value.next=="object"?t.value.next.text:void 0)??((B=a[r+1])==null?void 0:B.docFooterText)??((V=a[r+1])==null?void 0:V.text),link:(typeof t.value.next=="object"?t.value.next.link:void 0)??((I=a[r+1])==null?void 0:I.link)}}})}const Rn={},qn={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},Kn=u("path",{d:"M18,23H4c-1.7,0-3-1.3-3-3V6c0-1.7,1.3-3,3-3h7c0.6,0,1,0.4,1,1s-0.4,1-1,1H4C3.4,5,3,5.4,3,6v14c0,0.6,0.4,1,1,1h14c0.6,0,1-0.4,1-1v-7c0-0.6,0.4-1,1-1s1,0.4,1,1v7C21,21.7,19.7,23,18,23z"},null,-1),Wn=u("path",{d:"M8,17c-0.3,0-0.5-0.1-0.7-0.3C7,16.5,6.9,16.1,7,15.8l1-4c0-0.2,0.1-0.3,0.3-0.5l9.5-9.5c1.2-1.2,3.2-1.2,4.4,0c1.2,1.2,1.2,3.2,0,4.4l-9.5,9.5c-0.1,0.1-0.3,0.2-0.5,0.3l-4,1C8.2,17,8.1,17,8,17zM9.9,12.5l-0.5,2.1l2.1-0.5l9.3-9.3c0.4-0.4,0.4-1.1,0-1.6c-0.4-0.4-1.2-0.4-1.6,0l0,0L9.9,12.5z M18.5,2.5L18.5,2.5L18.5,2.5z"},null,-1),Yn=[Kn,Wn];function Zn(n,e){return s(),l("svg",qn,Yn)}const Xn=g(Rn,[["render",Zn]]),K=b({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(n){const e=n,t=L(()=>e.tag??(e.href?"a":"span")),o=L(()=>e.href&&mt.test(e.href));return(a,r)=>(s(),y(re(t.value),{class:H(["VPLink",{link:a.href,"vp-external-link-icon":o.value,"no-icon":a.noIcon}]),href:a.href?i(Ye)(a.href):void 0,target:a.target??(o.value?"_blank":void 0),rel:a.rel??(o.value?"noreferrer":void 0)},{default:p(()=>[v(a.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),Jn={class:"VPLastUpdated"},Qn=["datetime"],eo=b({__name:"VPDocFooterLastUpdated",setup(n){const{theme:e,page:t,frontmatter:o,lang:a}=z(),r=L(()=>new Date(o.value.lastUpdated??t.value.lastUpdated)),c=L(()=>r.value.toISOString()),d=E("");return Y(()=>{Ce(()=>{var m,k,$;d.value=new Intl.DateTimeFormat((k=(m=e.value.lastUpdated)==null?void 0:m.formatOptions)!=null&&k.forceLocale?a.value:void 0,(($=e.value.lastUpdated)==null?void 0:$.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(r.value)})}),(m,k)=>{var $;return s(),l("p",Jn,[j(T((($=i(e).lastUpdated)==null?void 0:$.text)||i(e).lastUpdatedText||"Last updated")+": ",1),u("time",{datetime:c.value},T(d.value),9,Qn)])}}}),to=g(eo,[["__scopeId","data-v-42f5af39"]]),no={key:0,class:"VPDocFooter"},oo={key:0,class:"edit-info"},ao={key:0,class:"edit-link"},so={key:1,class:"last-updated"},ro={key:1,class:"prev-next"},io={class:"pager"},lo=["innerHTML"],co=["innerHTML"],uo={class:"pager"},mo=["innerHTML"],vo=["innerHTML"],po=b({__name:"VPDocFooter",setup(n){const{theme:e,page:t,frontmatter:o}=z(),a=Un(),r=Gn(),c=L(()=>e.value.editLink&&o.value.editLink!==!1),d=L(()=>t.value.lastUpdated&&o.value.lastUpdated!==!1),m=L(()=>c.value||d.value||r.value.prev||r.value.next);return(k,$)=>{var w,S,B,V;return m.value?(s(),l("footer",no,[v(k.$slots,"doc-footer-before",{},void 0,!0),c.value||d.value?(s(),l("div",oo,[c.value?(s(),l("div",ao,[_(K,{class:"edit-link-button",href:i(a).url,"no-icon":!0},{default:p(()=>[_(Xn,{class:"edit-link-icon","aria-label":"edit icon"}),j(" "+T(i(a).text),1)]),_:1},8,["href"])])):f("",!0),d.value?(s(),l("div",so,[_(to)])):f("",!0)])):f("",!0),(w=i(r).prev)!=null&&w.link||(S=i(r).next)!=null&&S.link?(s(),l("nav",ro,[u("div",io,[(B=i(r).prev)!=null&&B.link?(s(),y(K,{key:0,class:"pager-link prev",href:i(r).prev.link},{default:p(()=>{var I;return[u("span",{class:"desc",innerHTML:((I=i(e).docFooter)==null?void 0:I.prev)||"Previous page"},null,8,lo),u("span",{class:"title",innerHTML:i(r).prev.text},null,8,co)]}),_:1},8,["href"])):f("",!0)]),u("div",uo,[(V=i(r).next)!=null&&V.link?(s(),y(K,{key:0,class:"pager-link next",href:i(r).next.link},{default:p(()=>{var I;return[u("span",{class:"desc",innerHTML:((I=i(e).docFooter)==null?void 0:I.next)||"Next page"},null,8,mo),u("span",{class:"title",innerHTML:i(r).next.text},null,8,vo)]}),_:1},8,["href"])):f("",!0)])])):f("",!0)])):f("",!0)}}}),ho=g(po,[["__scopeId","data-v-c6c7078a"]]),fo=n=>(Z("data-v-c1252fdc"),n=n(),X(),n),_o={class:"container"},go=fo(()=>u("div",{class:"aside-curtain"},null,-1)),bo={class:"aside-container"},ko={class:"aside-content"},$o={class:"content"},yo={class:"content-container"},wo={class:"main"},Lo=b({__name:"VPDoc",setup(n){const{theme:e}=z(),t=fe(),{hasSidebar:o,hasAside:a,leftAside:r}=ne(),c=L(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(d,m)=>{const k=ce("Content");return s(),l("div",{class:H(["VPDoc",{"has-sidebar":i(o),"has-aside":i(a)}])},[v(d.$slots,"doc-top",{},void 0,!0),u("div",_o,[i(a)?(s(),l("div",{key:0,class:H(["aside",{"left-aside":i(r)}])},[go,u("div",bo,[u("div",ko,[_(jn,null,{"aside-top":p(()=>[v(d.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":p(()=>[v(d.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":p(()=>[v(d.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":p(()=>[v(d.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":p(()=>[v(d.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":p(()=>[v(d.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):f("",!0),u("div",$o,[u("div",yo,[v(d.$slots,"doc-before",{},void 0,!0),u("main",wo,[_(k,{class:H(["vp-doc",[c.value,i(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),_(ho,null,{"doc-footer-before":p(()=>[v(d.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),v(d.$slots,"doc-after",{},void 0,!0)])])]),v(d.$slots,"doc-bottom",{},void 0,!0)],2)}}}),Po=g(Lo,[["__scopeId","data-v-c1252fdc"]]),Vo=b({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{}},setup(n){const e=n,t=L(()=>e.href&&mt.test(e.href)),o=L(()=>e.tag||e.href?"a":"button");return(a,r)=>(s(),y(re(o.value),{class:H(["VPButton",[a.size,a.theme]]),href:a.href?i(Ye)(a.href):void 0,target:t.value?"_blank":void 0,rel:t.value?"noreferrer":void 0},{default:p(()=>[j(T(a.text),1)]),_:1},8,["class","href","target","rel"]))}}),So=g(Vo,[["__scopeId","data-v-5a0572b2"]]),zo=["src","alt"],Co=b({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(n){return(e,t)=>{const o=ce("VPImage",!0);return e.image?(s(),l(A,{key:0},[typeof e.image=="string"||"src"in e.image?(s(),l("img",we({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:i(qe)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,zo)):(s(),l(A,{key:1},[_(o,we({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),_(o,we({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):f("",!0)}}}),Se=g(Co,[["__scopeId","data-v-52554789"]]),To=n=>(Z("data-v-27e36ebe"),n=n(),X(),n),Mo={class:"container"},Io={class:"main"},Eo={key:0,class:"name"},No=["innerHTML"],Ho=["innerHTML"],Ao=["innerHTML"],Bo={key:0,class:"actions"},Oo={key:0,class:"image"},Do={class:"image-container"},Fo=To(()=>u("div",{class:"image-bg"},null,-1)),xo=b({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(n){const e=Me("hero-image-slot-exists");return(t,o)=>(s(),l("div",{class:H(["VPHero",{"has-image":t.image||i(e)}])},[u("div",Mo,[u("div",Io,[v(t.$slots,"home-hero-info",{},()=>[t.name?(s(),l("h1",Eo,[u("span",{innerHTML:t.name,class:"clip"},null,8,No)])):f("",!0),t.text?(s(),l("p",{key:1,innerHTML:t.text,class:"text"},null,8,Ho)):f("",!0),t.tagline?(s(),l("p",{key:2,innerHTML:t.tagline,class:"tagline"},null,8,Ao)):f("",!0)],!0),t.actions?(s(),l("div",Bo,[(s(!0),l(A,null,G(t.actions,a=>(s(),l("div",{key:a.link,class:"action"},[_(So,{tag:"a",size:"medium",theme:a.theme,text:a.text,href:a.link},null,8,["theme","text","href"])]))),128))])):f("",!0)]),t.image||i(e)?(s(),l("div",Oo,[u("div",Do,[Fo,v(t.$slots,"home-hero-image",{},()=>[t.image?(s(),y(Se,{key:0,class:"image-src",image:t.image},null,8,["image"])):f("",!0)],!0)])])):f("",!0)])],2))}}),jo=g(xo,[["__scopeId","data-v-27e36ebe"]]),Uo=b({__name:"VPHomeHero",setup(n){const{frontmatter:e}=z();return(t,o)=>i(e).hero?(s(),y(jo,{key:0,class:"VPHomeHero",name:i(e).hero.name,text:i(e).hero.text,tagline:i(e).hero.tagline,image:i(e).hero.image,actions:i(e).hero.actions},{"home-hero-info":p(()=>[v(t.$slots,"home-hero-info")]),"home-hero-image":p(()=>[v(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):f("",!0)}}),Go={},Ro={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},qo=u("path",{d:"M19.9,12.4c0.1-0.2,0.1-0.5,0-0.8c-0.1-0.1-0.1-0.2-0.2-0.3l-7-7c-0.4-0.4-1-0.4-1.4,0s-0.4,1,0,1.4l5.3,5.3H5c-0.6,0-1,0.4-1,1s0.4,1,1,1h11.6l-5.3,5.3c-0.4,0.4-0.4,1,0,1.4c0.2,0.2,0.5,0.3,0.7,0.3s0.5-0.1,0.7-0.3l7-7C19.8,12.6,19.9,12.5,19.9,12.4z"},null,-1),Ko=[qo];function Wo(n,e){return s(),l("svg",Ro,Ko)}const Yo=g(Go,[["render",Wo]]),Zo={class:"box"},Xo={key:0,class:"icon"},Jo=["innerHTML"],Qo=["innerHTML"],ea=["innerHTML"],ta={key:4,class:"link-text"},na={class:"link-text-value"},oa=b({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(n){return(e,t)=>(s(),y(K,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:p(()=>[u("article",Zo,[typeof e.icon=="object"&&e.icon.wrap?(s(),l("div",Xo,[_(Se,{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"?(s(),y(Se,{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?(s(),l("div",{key:2,class:"icon",innerHTML:e.icon},null,8,Jo)):f("",!0),u("h2",{class:"title",innerHTML:e.title},null,8,Qo),e.details?(s(),l("p",{key:3,class:"details",innerHTML:e.details},null,8,ea)):f("",!0),e.linkText?(s(),l("div",ta,[u("p",na,[j(T(e.linkText)+" ",1),_(Yo,{class:"link-text-icon"})])])):f("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),aa=g(oa,[["__scopeId","data-v-790a0f07"]]),sa={key:0,class:"VPFeatures"},ra={class:"container"},ia={class:"items"},la=b({__name:"VPFeatures",props:{features:{}},setup(n){const e=n,t=L(()=>{const o=e.features.length;if(o){if(o===2)return"grid-2";if(o===3)return"grid-3";if(o%3===0)return"grid-6";if(o>3)return"grid-4"}else return});return(o,a)=>o.features?(s(),l("div",sa,[u("div",ra,[u("div",ia,[(s(!0),l(A,null,G(o.features,r=>(s(),l("div",{key:r.title,class:H(["item",[t.value]])},[_(aa,{icon:r.icon,title:r.title,details:r.details,link:r.link,"link-text":r.linkText,rel:r.rel,target:r.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):f("",!0)}}),ca=g(la,[["__scopeId","data-v-8c75346a"]]),ua=b({__name:"VPHomeFeatures",setup(n){const{frontmatter:e}=z();return(t,o)=>i(e).features?(s(),y(ca,{key:0,class:"VPHomeFeatures",features:i(e).features},null,8,["features"])):f("",!0)}}),da={class:"VPHome"},ma=b({__name:"VPHome",setup(n){return(e,t)=>{const o=ce("Content");return s(),l("div",da,[v(e.$slots,"home-hero-before",{},void 0,!0),_(Uo,null,{"home-hero-info":p(()=>[v(e.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-image":p(()=>[v(e.$slots,"home-hero-image",{},void 0,!0)]),_:3}),v(e.$slots,"home-hero-after",{},void 0,!0),v(e.$slots,"home-features-before",{},void 0,!0),_(ua),v(e.$slots,"home-features-after",{},void 0,!0),_(o)])}}}),va=g(ma,[["__scopeId","data-v-f308d76d"]]),pa={},ha={class:"VPPage"};function fa(n,e){const t=ce("Content");return s(),l("div",ha,[v(n.$slots,"page-top"),_(t),v(n.$slots,"page-bottom")])}const _a=g(pa,[["render",fa]]),ga=b({__name:"VPContent",setup(n){const{page:e,frontmatter:t}=z(),{hasSidebar:o}=ne();return(a,r)=>(s(),l("div",{class:H(["VPContent",{"has-sidebar":i(o),"is-home":i(t).layout==="home"}]),id:"VPContent"},[i(e).isNotFound?v(a.$slots,"not-found",{key:0},()=>[_(gn)],!0):i(t).layout==="page"?(s(),y(_a,{key:1},{"page-top":p(()=>[v(a.$slots,"page-top",{},void 0,!0)]),"page-bottom":p(()=>[v(a.$slots,"page-bottom",{},void 0,!0)]),_:3})):i(t).layout==="home"?(s(),y(va,{key:2},{"home-hero-before":p(()=>[v(a.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info":p(()=>[v(a.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-image":p(()=>[v(a.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":p(()=>[v(a.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":p(()=>[v(a.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":p(()=>[v(a.$slots,"home-features-after",{},void 0,!0)]),_:3})):i(t).layout&&i(t).layout!=="doc"?(s(),y(re(i(t).layout),{key:3})):(s(),y(Po,{key:4},{"doc-top":p(()=>[v(a.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":p(()=>[v(a.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":p(()=>[v(a.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":p(()=>[v(a.$slots,"doc-before",{},void 0,!0)]),"doc-after":p(()=>[v(a.$slots,"doc-after",{},void 0,!0)]),"aside-top":p(()=>[v(a.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":p(()=>[v(a.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":p(()=>[v(a.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":p(()=>[v(a.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":p(()=>[v(a.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":p(()=>[v(a.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),ba=g(ga,[["__scopeId","data-v-d9b0d414"]]),ka={class:"container"},$a=["innerHTML"],ya=["innerHTML"],wa=b({__name:"VPFooter",setup(n){const{theme:e,frontmatter:t}=z(),{hasSidebar:o}=ne();return(a,r)=>i(e).footer&&i(t).footer!==!1?(s(),l("footer",{key:0,class:H(["VPFooter",{"has-sidebar":i(o)}])},[u("div",ka,[i(e).footer.message?(s(),l("p",{key:0,class:"message",innerHTML:i(e).footer.message},null,8,$a)):f("",!0),i(e).footer.copyright?(s(),l("p",{key:1,class:"copyright",innerHTML:i(e).footer.copyright},null,8,ya)):f("",!0)])],2)):f("",!0)}}),La=g(wa,[["__scopeId","data-v-83c9c484"]]);function kt(){const{theme:n,frontmatter:e}=z(),t=dt([]),o=L(()=>t.value.length>0);return Te(()=>{t.value=Xe(e.value.outline??n.value.outline)}),{headers:t,hasLocalNav:o}}const Pa={},Va={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Sa=u("path",{d:"M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"},null,-1),za=[Sa];function Ca(n,e){return s(),l("svg",Va,za)}const $t=g(Pa,[["render",Ca]]),Ta={class:"header"},Ma={class:"outline"},Ia=b({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(n){const e=n,{theme:t}=z(),o=E(!1),a=E(0),r=E(),c=E();Rt(r,()=>{o.value=!1}),xe("Escape",()=>{o.value=!1}),Te(()=>{o.value=!1});function d(){o.value=!o.value,a.value=window.innerHeight+Math.min(window.scrollY-e.navHeight,0)}function m($){$.target.classList.contains("outline-link")&&(c.value&&(c.value.style.transition="none"),We(()=>{o.value=!1}))}function k(){o.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return($,w)=>(s(),l("div",{class:"VPLocalNavOutlineDropdown",style:qt({"--vp-vh":a.value+"px"}),ref_key:"main",ref:r},[$.headers.length>0?(s(),l("button",{key:0,onClick:d,class:H({open:o.value})},[j(T(i(gt)(i(t)))+" ",1),_($t,{class:"icon"})],2)):(s(),l("button",{key:1,onClick:k},T(i(t).returnToTopLabel||"Return to top"),1)),_(ze,{name:"flyout"},{default:p(()=>[o.value?(s(),l("div",{key:0,ref_key:"items",ref:c,class:"items",onClick:m},[u("div",Ta,[u("a",{class:"top-link",href:"#",onClick:k},T(i(t).returnToTopLabel||"Return to top"),1)]),u("div",Ma,[_(bt,{headers:$.headers},null,8,["headers"])])],512)):f("",!0)]),_:1})],4))}}),Ea=g(Ia,[["__scopeId","data-v-2d2d5d54"]]),Na={},Ha={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Aa=u("path",{d:"M17,11H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h14c0.6,0,1,0.4,1,1S17.6,11,17,11z"},null,-1),Ba=u("path",{d:"M21,7H3C2.4,7,2,6.6,2,6s0.4-1,1-1h18c0.6,0,1,0.4,1,1S21.6,7,21,7z"},null,-1),Oa=u("path",{d:"M21,15H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h18c0.6,0,1,0.4,1,1S21.6,15,21,15z"},null,-1),Da=u("path",{d:"M17,19H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h14c0.6,0,1,0.4,1,1S17.6,19,17,19z"},null,-1),Fa=[Aa,Ba,Oa,Da];function xa(n,e){return s(),l("svg",Ha,Fa)}const ja=g(Na,[["render",xa]]),Ua={class:"container"},Ga=["aria-expanded"],Ra={class:"menu-text"},qa=b({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(n){const{theme:e,frontmatter:t}=z(),{hasSidebar:o}=ne(),{headers:a}=kt(),{y:r}=vt(),c=E(0);Y(()=>{c.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),Te(()=>{a.value=Xe(t.value.outline??e.value.outline)});const d=L(()=>a.value.length===0),m=L(()=>d.value&&!o.value),k=L(()=>({VPLocalNav:!0,"has-sidebar":o.value,empty:d.value,fixed:m.value}));return($,w)=>i(t).layout!=="home"&&(!m.value||i(r)>=c.value)?(s(),l("div",{key:0,class:H(k.value)},[u("div",Ua,[i(o)?(s(),l("button",{key:0,class:"menu","aria-expanded":$.open,"aria-controls":"VPSidebarNav",onClick:w[0]||(w[0]=S=>$.$emit("open-menu"))},[_(ja,{class:"menu-icon"}),u("span",Ra,T(i(e).sidebarMenuLabel||"Menu"),1)],8,Ga)):f("",!0),_(Ea,{headers:i(a),navHeight:c.value},null,8,["headers","navHeight"])])],2)):f("",!0)}}),Ka=g(qa,[["__scopeId","data-v-2158a76a"]]);function Wa(){const n=E(!1);function e(){n.value=!0,window.addEventListener("resize",a)}function t(){n.value=!1,window.removeEventListener("resize",a)}function o(){n.value?t():e()}function a(){window.outerWidth>=768&&t()}const r=fe();return te(()=>r.path,t),{isScreenOpen:n,openScreen:e,closeScreen:t,toggleScreen:o}}const Ya={},Za={class:"VPSwitch",type:"button",role:"switch"},Xa={class:"check"},Ja={key:0,class:"icon"};function Qa(n,e){return s(),l("button",Za,[u("span",Xa,[n.$slots.default?(s(),l("span",Ja,[v(n.$slots,"default",{},void 0,!0)])):f("",!0)])])}const es=g(Ya,[["render",Qa],["__scopeId","data-v-79d0ed95"]]),ts={},ns={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},os=u("path",{d:"M12.1,22c-0.3,0-0.6,0-0.9,0c-5.5-0.5-9.5-5.4-9-10.9c0.4-4.8,4.2-8.6,9-9c0.4,0,0.8,0.2,1,0.5c0.2,0.3,0.2,0.8-0.1,1.1c-2,2.7-1.4,6.4,1.3,8.4c2.1,1.6,5,1.6,7.1,0c0.3-0.2,0.7-0.3,1.1-0.1c0.3,0.2,0.5,0.6,0.5,1c-0.2,2.7-1.5,5.1-3.6,6.8C16.6,21.2,14.4,22,12.1,22zM9.3,4.4c-2.9,1-5,3.6-5.2,6.8c-0.4,4.4,2.8,8.3,7.2,8.7c2.1,0.2,4.2-0.4,5.8-1.8c1.1-0.9,1.9-2.1,2.4-3.4c-2.5,0.9-5.3,0.5-7.5-1.1C9.2,11.4,8.1,7.7,9.3,4.4z"},null,-1),as=[os];function ss(n,e){return s(),l("svg",ns,as)}const rs=g(ts,[["render",ss]]),is={},ls={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},cs=Kt('',9),us=[cs];function ds(n,e){return s(),l("svg",ls,us)}const ms=g(is,[["render",ds]]),vs=b({__name:"VPSwitchAppearance",setup(n){const{isDark:e,theme:t}=z(),o=Me("toggle-appearance",()=>{e.value=!e.value}),a=L(()=>e.value?t.value.lightModeSwitchTitle||"Switch to light theme":t.value.darkModeSwitchTitle||"Switch to dark theme");return(r,c)=>(s(),y(es,{title:a.value,class:"VPSwitchAppearance","aria-checked":i(e),onClick:i(o)},{default:p(()=>[_(ms,{class:"sun"}),_(rs,{class:"moon"})]),_:1},8,["title","aria-checked","onClick"]))}}),Je=g(vs,[["__scopeId","data-v-0298adb0"]]),ps={key:0,class:"VPNavBarAppearance"},hs=b({__name:"VPNavBarAppearance",setup(n){const{site:e}=z();return(t,o)=>i(e).appearance&&i(e).appearance!=="force-dark"?(s(),l("div",ps,[_(Je)])):f("",!0)}}),fs=g(hs,[["__scopeId","data-v-0e934124"]]),Qe=E();let yt=!1,Oe=0;function _s(n){const e=E(!1);if(le){!yt&&gs(),Oe++;const t=te(Qe,o=>{var a,r,c;o===n.el.value||(a=n.el.value)!=null&&a.contains(o)?(e.value=!0,(r=n.onFocus)==null||r.call(n)):(e.value=!1,(c=n.onBlur)==null||c.call(n))});Ke(()=>{t(),Oe--,Oe||bs()})}return Wt(e)}function gs(){document.addEventListener("focusin",wt),yt=!0,Qe.value=document.activeElement}function bs(){document.removeEventListener("focusin",wt)}function wt(){Qe.value=document.activeElement}const ks={},$s={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},ys=u("path",{d:"M12,16c-0.3,0-0.5-0.1-0.7-0.3l-6-6c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l5.3,5.3l5.3-5.3c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-6,6C12.5,15.9,12.3,16,12,16z"},null,-1),ws=[ys];function Ls(n,e){return s(),l("svg",$s,ws)}const Lt=g(ks,[["render",Ls]]),Ps={},Vs={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Ss=u("circle",{cx:"12",cy:"12",r:"2"},null,-1),zs=u("circle",{cx:"19",cy:"12",r:"2"},null,-1),Cs=u("circle",{cx:"5",cy:"12",r:"2"},null,-1),Ts=[Ss,zs,Cs];function Ms(n,e){return s(),l("svg",Vs,Ts)}const Is=g(Ps,[["render",Ms]]),Es={class:"VPMenuLink"},Ns=b({__name:"VPMenuLink",props:{item:{}},setup(n){const{page:e}=z();return(t,o)=>(s(),l("div",Es,[_(K,{class:H({active:i(ie)(i(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel},{default:p(()=>[j(T(t.item.text),1)]),_:1},8,["class","href","target","rel"])]))}}),Ie=g(Ns,[["__scopeId","data-v-9d1535a1"]]),Hs={class:"VPMenuGroup"},As={key:0,class:"title"},Bs=b({__name:"VPMenuGroup",props:{text:{},items:{}},setup(n){return(e,t)=>(s(),l("div",Hs,[e.text?(s(),l("p",As,T(e.text),1)):f("",!0),(s(!0),l(A,null,G(e.items,o=>(s(),l(A,null,["link"in o?(s(),y(Ie,{key:0,item:o},null,8,["item"])):f("",!0)],64))),256))]))}}),Os=g(Bs,[["__scopeId","data-v-c1904112"]]),Ds={class:"VPMenu"},Fs={key:0,class:"items"},xs=b({__name:"VPMenu",props:{items:{}},setup(n){return(e,t)=>(s(),l("div",Ds,[e.items?(s(),l("div",Fs,[(s(!0),l(A,null,G(e.items,o=>(s(),l(A,{key:o.text},["link"in o?(s(),y(Ie,{key:0,item:o},null,8,["item"])):(s(),y(Os,{key:1,text:o.text,items:o.items},null,8,["text","items"]))],64))),128))])):f("",!0),v(e.$slots,"default",{},void 0,!0)]))}}),js=g(xs,[["__scopeId","data-v-e699aa0c"]]),Us=["aria-expanded","aria-label"],Gs={key:0,class:"text"},Rs=["innerHTML"],qs={class:"menu"},Ks=b({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(n){const e=E(!1),t=E();_s({el:t,onBlur:o});function o(){e.value=!1}return(a,r)=>(s(),l("div",{class:"VPFlyout",ref_key:"el",ref:t,onMouseenter:r[1]||(r[1]=c=>e.value=!0),onMouseleave:r[2]||(r[2]=c=>e.value=!1)},[u("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":e.value,"aria-label":a.label,onClick:r[0]||(r[0]=c=>e.value=!e.value)},[a.button||a.icon?(s(),l("span",Gs,[a.icon?(s(),y(re(a.icon),{key:0,class:"option-icon"})):f("",!0),a.button?(s(),l("span",{key:1,innerHTML:a.button},null,8,Rs)):f("",!0),_(Lt,{class:"text-icon"})])):(s(),y(Is,{key:1,class:"icon"}))],8,Us),u("div",qs,[_(js,{items:a.items},{default:p(()=>[v(a.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),et=g(Ks,[["__scopeId","data-v-eaf183b7"]]),Ws={discord:'Discord',facebook:'Facebook',github:'GitHub',instagram:'Instagram',linkedin:'LinkedIn',mastodon:'Mastodon',slack:'Slack',twitter:'Twitter',x:'X',youtube:'YouTube'},Ys=["href","aria-label","innerHTML"],Zs=b({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(n){const e=n,t=L(()=>typeof e.icon=="object"?e.icon.svg:Ws[e.icon]);return(o,a)=>(s(),l("a",{class:"VPSocialLink no-icon",href:o.link,"aria-label":o.ariaLabel??(typeof o.icon=="string"?o.icon:""),target:"_blank",rel:"noopener",innerHTML:t.value},null,8,Ys))}}),Xs=g(Zs,[["__scopeId","data-v-f4d58015"]]),Js={class:"VPSocialLinks"},Qs=b({__name:"VPSocialLinks",props:{links:{}},setup(n){return(e,t)=>(s(),l("div",Js,[(s(!0),l(A,null,G(e.links,({link:o,icon:a,ariaLabel:r})=>(s(),y(Xs,{key:o,icon:a,link:o,ariaLabel:r},null,8,["icon","link","ariaLabel"]))),128))]))}}),Ee=g(Qs,[["__scopeId","data-v-20ea2c3a"]]),er={key:0,class:"group translations"},tr={class:"trans-title"},nr={key:1,class:"group"},or={class:"item appearance"},ar={class:"label"},sr={class:"appearance-action"},rr={key:2,class:"group"},ir={class:"item social-links"},lr=b({__name:"VPNavBarExtra",setup(n){const{site:e,theme:t}=z(),{localeLinks:o,currentLang:a}=_e({correspondingLink:!0}),r=L(()=>o.value.length&&a.value.label||e.value.appearance||t.value.socialLinks);return(c,d)=>r.value?(s(),y(et,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:p(()=>[i(o).length&&i(a).label?(s(),l("div",er,[u("p",tr,T(i(a).label),1),(s(!0),l(A,null,G(i(o),m=>(s(),y(Ie,{key:m.link,item:m},null,8,["item"]))),128))])):f("",!0),i(e).appearance&&i(e).appearance!=="force-dark"?(s(),l("div",nr,[u("div",or,[u("p",ar,T(i(t).darkModeSwitchLabel||"Appearance"),1),u("div",sr,[_(Je)])])])):f("",!0),i(t).socialLinks?(s(),l("div",rr,[u("div",ir,[_(Ee,{class:"social-links-list",links:i(t).socialLinks},null,8,["links"])])])):f("",!0)]),_:1})):f("",!0)}}),cr=g(lr,[["__scopeId","data-v-a4952b56"]]),ur=n=>(Z("data-v-5df5a4ba"),n=n(),X(),n),dr=["aria-expanded"],mr=ur(()=>u("span",{class:"container"},[u("span",{class:"top"}),u("span",{class:"middle"}),u("span",{class:"bottom"})],-1)),vr=[mr],pr=b({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(n){return(e,t)=>(s(),l("button",{type:"button",class:H(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:t[0]||(t[0]=o=>e.$emit("click"))},vr,10,dr))}}),hr=g(pr,[["__scopeId","data-v-5df5a4ba"]]),fr=["innerHTML"],_r=b({__name:"VPNavBarMenuLink",props:{item:{}},setup(n){const{page:e}=z();return(t,o)=>(s(),y(K,{class:H({VPNavBarMenuLink:!0,active:i(ie)(i(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel,tabindex:"0"},{default:p(()=>[u("span",{innerHTML:t.item.text},null,8,fr)]),_:1},8,["class","href","target","rel"]))}}),gr=g(_r,[["__scopeId","data-v-01a9a2a9"]]),br=b({__name:"VPNavBarMenuGroup",props:{item:{}},setup(n){const e=n,{page:t}=z(),o=r=>"link"in r?ie(t.value.relativePath,r.link,!!e.item.activeMatch):r.items.some(o),a=L(()=>o(e.item));return(r,c)=>(s(),y(et,{class:H({VPNavBarMenuGroup:!0,active:i(ie)(i(t).relativePath,r.item.activeMatch,!!r.item.activeMatch)||a.value}),button:r.item.text,items:r.item.items},null,8,["class","button","items"]))}}),kr=n=>(Z("data-v-10e7ffc9"),n=n(),X(),n),$r={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},yr=kr(()=>u("span",{id:"main-nav-aria-label",class:"visually-hidden"},"Main Navigation",-1)),wr=b({__name:"VPNavBarMenu",setup(n){const{theme:e}=z();return(t,o)=>i(e).nav?(s(),l("nav",$r,[yr,(s(!0),l(A,null,G(i(e).nav,a=>(s(),l(A,{key:a.text},["link"in a?(s(),y(gr,{key:0,item:a},null,8,["item"])):(s(),y(br,{key:1,item:a},null,8,["item"]))],64))),128))])):f("",!0)}}),Lr=g(wr,[["__scopeId","data-v-10e7ffc9"]]);function Pr(n){const{localeIndex:e,theme:t}=z();function o(a){var V,I,N;const r=a.split("."),c=(V=t.value.search)==null?void 0:V.options,d=c&&typeof c=="object",m=d&&((N=(I=c.locales)==null?void 0:I[e.value])==null?void 0:N.translations)||null,k=d&&c.translations||null;let $=m,w=k,S=n;const B=r.pop();for(const ue of r){let J=null;const F=S==null?void 0:S[ue];F&&(J=S=F);const oe=w==null?void 0:w[ue];oe&&(J=w=oe);const Q=$==null?void 0:$[ue];Q&&(J=$=Q),F||(S=J),oe||(w=J),Q||($=J)}return($==null?void 0:$[B])??(w==null?void 0:w[B])??(S==null?void 0:S[B])??""}return o}const Vr=["aria-label"],Sr={class:"DocSearch-Button-Container"},zr=u("svg",{class:"DocSearch-Search-Icon",width:"20",height:"20",viewBox:"0 0 20 20","aria-label":"search icon"},[u("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),Cr={class:"DocSearch-Button-Placeholder"},Tr=u("span",{class:"DocSearch-Button-Keys"},[u("kbd",{class:"DocSearch-Button-Key"}),u("kbd",{class:"DocSearch-Button-Key"},"K")],-1),at=b({__name:"VPNavBarSearchButton",setup(n){const t=Pr({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(o,a)=>(s(),l("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":i(t)("button.buttonAriaLabel")},[u("span",Sr,[zr,u("span",Cr,T(i(t)("button.buttonText")),1)]),Tr],8,Vr))}}),Mr={class:"VPNavBarSearch"},Ir={id:"local-search"},Er={key:1,id:"docsearch"},Nr=b({__name:"VPNavBarSearch",setup(n){const e=Yt(()=>pt(()=>import("./VPLocalSearchBox.DrdjI_1Y.js"),__vite__mapDeps([0,1]))),t=()=>null,{theme:o}=z(),a=E(!1),r=E(!1);Y(()=>{});function c(){a.value||(a.value=!0,setTimeout(d,16))}function d(){const w=new Event("keydown");w.key="k",w.metaKey=!0,window.dispatchEvent(w),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||d()},16)}function m(w){const S=w.target,B=S.tagName;return S.isContentEditable||B==="INPUT"||B==="SELECT"||B==="TEXTAREA"}const k=E(!1);xe("k",w=>{(w.ctrlKey||w.metaKey)&&(w.preventDefault(),k.value=!0)}),xe("/",w=>{m(w)||(w.preventDefault(),k.value=!0)});const $="local";return(w,S)=>{var B;return s(),l("div",Mr,[i($)==="local"?(s(),l(A,{key:0},[k.value?(s(),y(i(e),{key:0,onClose:S[0]||(S[0]=V=>k.value=!1)})):f("",!0),u("div",Ir,[_(at,{onClick:S[1]||(S[1]=V=>k.value=!0)})])],64)):i($)==="algolia"?(s(),l(A,{key:1},[a.value?(s(),y(i(t),{key:0,algolia:((B=i(o).search)==null?void 0:B.options)??i(o).algolia,onVnodeBeforeMount:S[2]||(S[2]=V=>r.value=!0)},null,8,["algolia"])):f("",!0),r.value?f("",!0):(s(),l("div",Er,[_(at,{onClick:c})]))],64)):f("",!0)])}}}),Hr=b({__name:"VPNavBarSocialLinks",setup(n){const{theme:e}=z();return(t,o)=>i(e).socialLinks?(s(),y(Ee,{key:0,class:"VPNavBarSocialLinks",links:i(e).socialLinks},null,8,["links"])):f("",!0)}}),Ar=g(Hr,[["__scopeId","data-v-17479deb"]]),Br=["href","rel","target"],Or=b({__name:"VPNavBarTitle",setup(n){const{site:e,theme:t}=z(),{hasSidebar:o}=ne(),{currentLang:a}=_e(),r=L(()=>{var m;return typeof t.value.logoLink=="string"?t.value.logoLink:(m=t.value.logoLink)==null?void 0:m.link}),c=L(()=>{var m;return typeof t.value.logoLink=="string"||(m=t.value.logoLink)==null?void 0:m.rel}),d=L(()=>{var m;return typeof t.value.logoLink=="string"||(m=t.value.logoLink)==null?void 0:m.target});return(m,k)=>(s(),l("div",{class:H(["VPNavBarTitle",{"has-sidebar":i(o)}])},[u("a",{class:"title",href:r.value??i(Ye)(i(a).link),rel:c.value,target:d.value},[v(m.$slots,"nav-bar-title-before",{},void 0,!0),i(t).logo?(s(),y(Se,{key:0,class:"logo",image:i(t).logo},null,8,["image"])):f("",!0),i(t).siteTitle?(s(),l(A,{key:1},[j(T(i(t).siteTitle),1)],64)):i(t).siteTitle===void 0?(s(),l(A,{key:2},[j(T(i(e).title),1)],64)):f("",!0),v(m.$slots,"nav-bar-title-after",{},void 0,!0)],8,Br)],2))}}),Dr=g(Or,[["__scopeId","data-v-2256aec7"]]),Fr={},xr={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},jr=u("path",{d:"M0 0h24v24H0z",fill:"none"},null,-1),Ur=u("path",{d:" M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z ",class:"css-c4d79v"},null,-1),Gr=[jr,Ur];function Rr(n,e){return s(),l("svg",xr,Gr)}const Pt=g(Fr,[["render",Rr]]),qr={class:"items"},Kr={class:"title"},Wr=b({__name:"VPNavBarTranslations",setup(n){const{theme:e}=z(),{localeLinks:t,currentLang:o}=_e({correspondingLink:!0});return(a,r)=>i(t).length&&i(o).label?(s(),y(et,{key:0,class:"VPNavBarTranslations",icon:Pt,label:i(e).langMenuLabel||"Change language"},{default:p(()=>[u("div",qr,[u("p",Kr,T(i(o).label),1),(s(!0),l(A,null,G(i(t),c=>(s(),y(Ie,{key:c.link,item:c},null,8,["item"]))),128))])]),_:1},8,["label"])):f("",!0)}}),Yr=g(Wr,[["__scopeId","data-v-56a52592"]]),Zr=n=>(Z("data-v-9ec51abf"),n=n(),X(),n),Xr={class:"wrapper"},Jr={class:"container"},Qr={class:"title"},ei={class:"content"},ti={class:"content-body"},ni=Zr(()=>u("div",{class:"divider"},[u("div",{class:"divider-line"})],-1)),oi=b({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(n){const{y:e}=vt(),{hasSidebar:t}=ne(),{hasLocalNav:o}=kt(),{frontmatter:a}=z(),r=E({});return ut(()=>{r.value={"has-sidebar":t.value,"has-local-nav":o.value,top:a.value.layout==="home"&&e.value===0}}),(c,d)=>(s(),l("div",{class:H(["VPNavBar",r.value])},[u("div",Xr,[u("div",Jr,[u("div",Qr,[_(Dr,null,{"nav-bar-title-before":p(()=>[v(c.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":p(()=>[v(c.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),u("div",ei,[u("div",ti,[v(c.$slots,"nav-bar-content-before",{},void 0,!0),_(Nr,{class:"search"}),_(Lr,{class:"menu"}),_(Yr,{class:"translations"}),_(fs,{class:"appearance"}),_(Ar,{class:"social-links"}),_(cr,{class:"extra"}),v(c.$slots,"nav-bar-content-after",{},void 0,!0),_(hr,{class:"hamburger",active:c.isScreenOpen,onClick:d[0]||(d[0]=m=>c.$emit("toggle-screen"))},null,8,["active"])])])])]),ni],2))}}),ai=g(oi,[["__scopeId","data-v-9ec51abf"]]),si={key:0,class:"VPNavScreenAppearance"},ri={class:"text"},ii=b({__name:"VPNavScreenAppearance",setup(n){const{site:e,theme:t}=z();return(o,a)=>i(e).appearance&&i(e).appearance!=="force-dark"?(s(),l("div",si,[u("p",ri,T(i(t).darkModeSwitchLabel||"Appearance"),1),_(Je)])):f("",!0)}}),li=g(ii,[["__scopeId","data-v-2f05ca60"]]),ci=b({__name:"VPNavScreenMenuLink",props:{item:{}},setup(n){const e=Me("close-screen");return(t,o)=>(s(),y(K,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:i(e)},{default:p(()=>[j(T(t.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}}),ui=g(ci,[["__scopeId","data-v-13a0f76d"]]),di={},mi={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},vi=u("path",{d:"M18.9,10.9h-6v-6c0-0.6-0.4-1-1-1s-1,0.4-1,1v6h-6c-0.6,0-1,0.4-1,1s0.4,1,1,1h6v6c0,0.6,0.4,1,1,1s1-0.4,1-1v-6h6c0.6,0,1-0.4,1-1S19.5,10.9,18.9,10.9z"},null,-1),pi=[vi];function hi(n,e){return s(),l("svg",mi,pi)}const fi=g(di,[["render",hi]]),_i=b({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(n){const e=Me("close-screen");return(t,o)=>(s(),y(K,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:i(e)},{default:p(()=>[j(T(t.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}}),Vt=g(_i,[["__scopeId","data-v-a77909ab"]]),gi={class:"VPNavScreenMenuGroupSection"},bi={key:0,class:"title"},ki=b({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(n){return(e,t)=>(s(),l("div",gi,[e.text?(s(),l("p",bi,T(e.text),1)):f("",!0),(s(!0),l(A,null,G(e.items,o=>(s(),y(Vt,{key:o.text,item:o},null,8,["item"]))),128))]))}}),$i=g(ki,[["__scopeId","data-v-02647012"]]),yi=["aria-controls","aria-expanded"],wi=["innerHTML"],Li=["id"],Pi={key:1,class:"group"},Vi=b({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(n){const e=n,t=E(!1),o=L(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function a(){t.value=!t.value}return(r,c)=>(s(),l("div",{class:H(["VPNavScreenMenuGroup",{open:t.value}])},[u("button",{class:"button","aria-controls":o.value,"aria-expanded":t.value,onClick:a},[u("span",{class:"button-text",innerHTML:r.text},null,8,wi),_(fi,{class:"button-icon"})],8,yi),u("div",{id:o.value,class:"items"},[(s(!0),l(A,null,G(r.items,d=>(s(),l(A,{key:d.text},["link"in d?(s(),l("div",{key:d.text,class:"item"},[_(Vt,{item:d},null,8,["item"])])):(s(),l("div",Pi,[_($i,{text:d.text,items:d.items},null,8,["text","items"])]))],64))),128))],8,Li)],2))}}),Si=g(Vi,[["__scopeId","data-v-add8adf0"]]),zi={key:0,class:"VPNavScreenMenu"},Ci=b({__name:"VPNavScreenMenu",setup(n){const{theme:e}=z();return(t,o)=>i(e).nav?(s(),l("nav",zi,[(s(!0),l(A,null,G(i(e).nav,a=>(s(),l(A,{key:a.text},["link"in a?(s(),y(ui,{key:0,item:a},null,8,["item"])):(s(),y(Si,{key:1,text:a.text||"",items:a.items},null,8,["text","items"]))],64))),128))])):f("",!0)}}),Ti=b({__name:"VPNavScreenSocialLinks",setup(n){const{theme:e}=z();return(t,o)=>i(e).socialLinks?(s(),y(Ee,{key:0,class:"VPNavScreenSocialLinks",links:i(e).socialLinks},null,8,["links"])):f("",!0)}}),Mi={class:"list"},Ii=b({__name:"VPNavScreenTranslations",setup(n){const{localeLinks:e,currentLang:t}=_e({correspondingLink:!0}),o=E(!1);function a(){o.value=!o.value}return(r,c)=>i(e).length&&i(t).label?(s(),l("div",{key:0,class:H(["VPNavScreenTranslations",{open:o.value}])},[u("button",{class:"title",onClick:a},[_(Pt,{class:"icon lang"}),j(" "+T(i(t).label)+" ",1),_(Lt,{class:"icon chevron"})]),u("ul",Mi,[(s(!0),l(A,null,G(i(e),d=>(s(),l("li",{key:d.link,class:"item"},[_(K,{class:"link",href:d.link},{default:p(()=>[j(T(d.text),1)]),_:2},1032,["href"])]))),128))])],2)):f("",!0)}}),Ei=g(Ii,[["__scopeId","data-v-e924fe42"]]),Ni={class:"container"},Hi=b({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(n){const e=E(null),t=ht(le?document.body:null);return(o,a)=>(s(),y(ze,{name:"fade",onEnter:a[0]||(a[0]=r=>t.value=!0),onAfterLeave:a[1]||(a[1]=r=>t.value=!1)},{default:p(()=>[o.open?(s(),l("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e,id:"VPNavScreen"},[u("div",Ni,[v(o.$slots,"nav-screen-content-before",{},void 0,!0),_(Ci,{class:"menu"}),_(Ei,{class:"translations"}),_(li,{class:"appearance"}),_(Ti,{class:"social-links"}),v(o.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):f("",!0)]),_:3}))}}),Ai=g(Hi,[["__scopeId","data-v-b4543032"]]),Bi={key:0,class:"VPNav"},Oi=b({__name:"VPNav",setup(n){const{isScreenOpen:e,closeScreen:t,toggleScreen:o}=Wa(),{frontmatter:a}=z(),r=L(()=>a.value.navbar!==!1);return ft("close-screen",t),Ce(()=>{le&&document.documentElement.classList.toggle("hide-nav",!r.value)}),(c,d)=>r.value?(s(),l("header",Bi,[_(ai,{"is-screen-open":i(e),onToggleScreen:i(o)},{"nav-bar-title-before":p(()=>[v(c.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":p(()=>[v(c.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":p(()=>[v(c.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":p(()=>[v(c.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),_(Ai,{open:i(e)},{"nav-screen-content-before":p(()=>[v(c.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":p(()=>[v(c.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):f("",!0)}}),Di=g(Oi,[["__scopeId","data-v-ca0a69ce"]]),Fi=n=>(Z("data-v-eb64199c"),n=n(),X(),n),xi=["role","tabindex"],ji=Fi(()=>u("div",{class:"indicator"},null,-1)),Ui={key:1,class:"items"},Gi=b({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(n){const e=n,{collapsed:t,collapsible:o,isLink:a,isActiveLink:r,hasActiveLink:c,hasChildren:d,toggle:m}=yn(L(()=>e.item)),k=L(()=>d.value?"section":"div"),$=L(()=>a.value?"a":"div"),w=L(()=>d.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),S=L(()=>a.value?void 0:"button"),B=L(()=>[[`level-${e.depth}`],{collapsible:o.value},{collapsed:t.value},{"is-link":a.value},{"is-active":r.value},{"has-active":c.value}]);function V(N){"key"in N&&N.key!=="Enter"||!e.item.link&&m()}function I(){e.item.link&&m()}return(N,ue)=>{const J=ce("VPSidebarItem",!0);return s(),y(re(k.value),{class:H(["VPSidebarItem",B.value])},{default:p(()=>[N.item.text?(s(),l("div",we({key:0,class:"item",role:S.value},Zt(N.item.items?{click:V,keydown:V}:{},!0),{tabindex:N.item.items&&0}),[ji,N.item.link?(s(),y(K,{key:0,tag:$.value,class:"link",href:N.item.link,rel:N.item.rel,target:N.item.target},{default:p(()=>[(s(),y(re(w.value),{class:"text",innerHTML:N.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(s(),y(re(w.value),{key:1,class:"text",innerHTML:N.item.text},null,8,["innerHTML"])),N.item.collapsed!=null?(s(),l("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:I,onKeydown:Xt(I,["enter"]),tabindex:"0"},[_($t,{class:"caret-icon"})],32)):f("",!0)],16,xi)):f("",!0),N.item.items&&N.item.items.length?(s(),l("div",Ui,[N.depth<5?(s(!0),l(A,{key:0},G(N.item.items,F=>(s(),y(J,{key:F.text,item:F,depth:N.depth+1},null,8,["item","depth"]))),128)):f("",!0)])):f("",!0)]),_:1},8,["class"])}}}),Ri=g(Gi,[["__scopeId","data-v-eb64199c"]]),St=n=>(Z("data-v-7b6857b5"),n=n(),X(),n),qi=St(()=>u("div",{class:"curtain"},null,-1)),Ki={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},Wi=St(()=>u("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),Yi=b({__name:"VPSidebar",props:{open:{type:Boolean}},setup(n){const{sidebarGroups:e,hasSidebar:t}=ne(),o=n,a=E(null),r=ht(le?document.body:null);return te([o,a],()=>{var c;o.open?(r.value=!0,(c=a.value)==null||c.focus()):r.value=!1},{immediate:!0,flush:"post"}),(c,d)=>i(t)?(s(),l("aside",{key:0,class:H(["VPSidebar",{open:c.open}]),ref_key:"navEl",ref:a,onClick:d[0]||(d[0]=Jt(()=>{},["stop"]))},[qi,u("nav",Ki,[Wi,v(c.$slots,"sidebar-nav-before",{},void 0,!0),(s(!0),l(A,null,G(i(e),m=>(s(),l("div",{key:m.text,class:"group"},[_(Ri,{item:m,depth:0},null,8,["item"])]))),128)),v(c.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):f("",!0)}}),Zi=g(Yi,[["__scopeId","data-v-7b6857b5"]]),Xi=b({__name:"VPSkipLink",setup(n){const e=fe(),t=E();te(()=>e.path,()=>t.value.focus());function o({target:a}){const r=document.getElementById(decodeURIComponent(a.hash).slice(1));if(r){const c=()=>{r.removeAttribute("tabindex"),r.removeEventListener("blur",c)};r.setAttribute("tabindex","-1"),r.addEventListener("blur",c),r.focus(),window.scrollTo(0,0)}}return(a,r)=>(s(),l(A,null,[u("span",{ref_key:"backToTop",ref:t,tabindex:"-1"},null,512),u("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:o}," Skip to content ")],64))}}),Ji=g(Xi,[["__scopeId","data-v-2cc3dcc2"]]),Qi=b({__name:"Layout",setup(n){const{isOpen:e,open:t,close:o}=ne(),a=fe();te(()=>a.path,o),$n(e,o);const{frontmatter:r}=z(),c=Qt(),d=L(()=>!!c["home-hero-image"]);return ft("hero-image-slot-exists",d),(m,k)=>{const $=ce("Content");return i(r).layout!==!1?(s(),l("div",{key:0,class:H(["Layout",i(r).pageClass])},[v(m.$slots,"layout-top",{},void 0,!0),_(Ji),_(sn,{class:"backdrop",show:i(e),onClick:i(o)},null,8,["show","onClick"]),_(Di,null,{"nav-bar-title-before":p(()=>[v(m.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":p(()=>[v(m.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":p(()=>[v(m.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":p(()=>[v(m.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":p(()=>[v(m.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":p(()=>[v(m.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),_(Ka,{open:i(e),onOpenMenu:i(t)},null,8,["open","onOpenMenu"]),_(Zi,{open:i(e)},{"sidebar-nav-before":p(()=>[v(m.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":p(()=>[v(m.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),_(ba,null,{"page-top":p(()=>[v(m.$slots,"page-top",{},void 0,!0)]),"page-bottom":p(()=>[v(m.$slots,"page-bottom",{},void 0,!0)]),"not-found":p(()=>[v(m.$slots,"not-found",{},void 0,!0)]),"home-hero-before":p(()=>[v(m.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info":p(()=>[v(m.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-image":p(()=>[v(m.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":p(()=>[v(m.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":p(()=>[v(m.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":p(()=>[v(m.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":p(()=>[v(m.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":p(()=>[v(m.$slots,"doc-before",{},void 0,!0)]),"doc-after":p(()=>[v(m.$slots,"doc-after",{},void 0,!0)]),"doc-top":p(()=>[v(m.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":p(()=>[v(m.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":p(()=>[v(m.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":p(()=>[v(m.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":p(()=>[v(m.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":p(()=>[v(m.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":p(()=>[v(m.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":p(()=>[v(m.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),_(La),v(m.$slots,"layout-bottom",{},void 0,!0)],2)):(s(),y($,{key:1}))}}}),el=g(Qi,[["__scopeId","data-v-6b5043bc"]]),tl={},nl={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},ol=u("path",{d:"M12,22.2c-0.3,0-0.5-0.1-0.7-0.3l-8.8-8.8c-2.5-2.5-2.5-6.7,0-9.2c2.5-2.5,6.7-2.5,9.2,0L12,4.3l0.4-0.4c0,0,0,0,0,0C13.6,2.7,15.2,2,16.9,2c0,0,0,0,0,0c1.7,0,3.4,0.7,4.6,1.9l0,0c1.2,1.2,1.9,2.9,1.9,4.6c0,1.7-0.7,3.4-1.9,4.6l-8.8,8.8C12.5,22.1,12.3,22.2,12,22.2zM7,4C5.9,4,4.7,4.4,3.9,5.3c-1.8,1.8-1.8,4.6,0,6.4l8.1,8.1l8.1-8.1c0.9-0.9,1.3-2,1.3-3.2c0-1.2-0.5-2.3-1.3-3.2l0,0C19.3,4.5,18.2,4,17,4c0,0,0,0,0,0c-1.2,0-2.3,0.5-3.2,1.3c0,0,0,0,0,0l-1.1,1.1c-0.4,0.4-1,0.4-1.4,0l-1.1-1.1C9.4,4.4,8.2,4,7,4z"},null,-1),al=[ol];function sl(n,e){return s(),l("svg",nl,al)}const rl=g(tl,[["render",sl]]),il={},ll={class:"VPTeamPage"};function cl(n,e){return s(),l("div",ll,[v(n.$slots,"default")])}const oc=g(il,[["render",cl],["__scopeId","data-v-0dac1e67"]]),ul={},dl={class:"VPTeamPageTitle"},ml={key:0,class:"title"},vl={key:1,class:"lead"};function pl(n,e){return s(),l("div",dl,[n.$slots.title?(s(),l("h1",ml,[v(n.$slots,"title",{},void 0,!0)])):f("",!0),n.$slots.lead?(s(),l("p",vl,[v(n.$slots,"lead",{},void 0,!0)])):f("",!0)])}const ac=g(ul,[["render",pl],["__scopeId","data-v-867cfc0f"]]),hl={class:"profile"},fl={class:"avatar"},_l=["src","alt"],gl={class:"data"},bl={class:"name"},kl={key:0,class:"affiliation"},$l={key:0,class:"title"},yl={key:1,class:"at"},wl=["innerHTML"],Ll={key:2,class:"links"},Pl={key:0,class:"sp"},Vl=b({__name:"VPTeamMembersItem",props:{size:{default:"medium"},member:{}},setup(n){return(e,t)=>(s(),l("article",{class:H(["VPTeamMembersItem",[e.size]])},[u("div",hl,[u("figure",fl,[u("img",{class:"avatar-img",src:e.member.avatar,alt:e.member.name},null,8,_l)]),u("div",gl,[u("h1",bl,T(e.member.name),1),e.member.title||e.member.org?(s(),l("p",kl,[e.member.title?(s(),l("span",$l,T(e.member.title),1)):f("",!0),e.member.title&&e.member.org?(s(),l("span",yl," @ ")):f("",!0),e.member.org?(s(),y(K,{key:2,class:H(["org",{link:e.member.orgLink}]),href:e.member.orgLink,"no-icon":""},{default:p(()=>[j(T(e.member.org),1)]),_:1},8,["class","href"])):f("",!0)])):f("",!0),e.member.desc?(s(),l("p",{key:1,class:"desc",innerHTML:e.member.desc},null,8,wl)):f("",!0),e.member.links?(s(),l("div",Ll,[_(Ee,{links:e.member.links},null,8,["links"])])):f("",!0)])]),e.member.sponsor?(s(),l("div",Pl,[_(K,{class:"sp-link",href:e.member.sponsor,"no-icon":""},{default:p(()=>[_(rl,{class:"sp-icon"}),j(" "+T(e.member.actionText||"Sponsor"),1)]),_:1},8,["href"])])):f("",!0)],2))}}),Sl=g(Vl,[["__scopeId","data-v-c8b9bdef"]]),zl={class:"container"},Cl=b({__name:"VPTeamMembers",props:{size:{default:"medium"},members:{}},setup(n){const e=n,t=L(()=>[e.size,`count-${e.members.length}`]);return(o,a)=>(s(),l("div",{class:H(["VPTeamMembers",t.value])},[u("div",zl,[(s(!0),l(A,null,G(o.members,r=>(s(),l("div",{key:r.name,class:"item"},[_(Sl,{size:o.size,member:r},null,8,["size","member"])]))),128))])],2))}}),sc=g(Cl,[["__scopeId","data-v-130c6a1d"]]),st={Layout:el,enhanceApp:({app:n})=>{n.component("Badge",nn)}},Tl=["id","host","repo","repoid","category","categoryid","mapping","term","strict","reactionsenabled","emitmetadata","inputposition","theme","lang","loading"],Ml=b({__name:"Giscus",props:{id:{},host:{},repo:{},repoId:{},category:{},categoryId:{},mapping:{},term:{},theme:{},strict:{},reactionsEnabled:{},emitMetadata:{},inputPosition:{},lang:{},loading:{}},setup(n){const e=E(!1);return Y(()=>{e.value=!0,pt(()=>import("./giscus-aTimukGI.CKTvSCx2.js"),[])}),(t,o)=>e.value?(s(),l("giscus-widget",{key:0,id:t.id,host:t.host,repo:t.repo,repoid:t.repoId,category:t.category,categoryid:t.categoryId,mapping:t.mapping,term:t.term,strict:t.strict,reactionsenabled:t.reactionsEnabled,emitmetadata:t.emitMetadata,inputposition:t.inputPosition,theme:t.theme,lang:t.lang,loading:t.loading},null,8,Tl)):f("",!0)}}),rt=(n,e,t=!0)=>{var k;const o={id:"comment",host:"https://giscus.app",category:"General",mapping:"pathname",term:"Welcome to giscus!",reactionsEnabled:"1",inputPosition:"top",lang:"zh-CN",loading:"lazy",repo:"xxx/xxx",repoId:"",homePageShowComment:!1};if(n.locales){const w=document.querySelector("html").getAttribute("lang");w&&n.locales[w]&&(n.lang=n.locales[w])}const a=n.lightTheme||"light",r=n.darkTheme||"transparent_dark";let c=document.getElementById("giscus");if(c&&c.parentNode.removeChild(c),(e==null?void 0:e.value.comment)!==void 0){if(!(e!=null&&e.value.comment))return}else if(!t)return;if(!n.homePageShowComment&&(!location.pathname||location.pathname==="/"))return;const d=((k=document.querySelector("html"))==null?void 0:k.className.indexOf("dark"))!==-1,m=document.getElementsByClassName("content-container")[0];if(m){const $=document.createElement("div");$.setAttribute("id","giscus"),$.style.height="auto",$.style.marginTop="40px",$.style.borderTop="1px solid var(--vp-c-divider)",$.style.paddingTop="20px",m.append($),en({render:()=>Ve(Ml,{...o,theme:d?r:a,...n})}).mount("#giscus")}},Il=n=>{const e=document.querySelector("html"),t=n.lightTheme||"light",o=n.darkTheme||"transparent_dark";new MutationObserver(r=>{r.forEach(c=>{if(c.type=="attributes"){let d=document.getElementById("comment");d==null||d.setAttribute("theme",e.className.indexOf("dark")!==-1?o:t)}})}).observe(e,{attributeFilter:["class"]})},El=(n,e,t=!0)=>{Y(()=>{rt(n,e.frontmatter,t),Il(n)}),te(()=>e.route.path,()=>We(()=>{rt(n,e.frontmatter,t)}))};/*! medium-zoom 1.1.0 | MIT License | https://github.com/francoischalifour/medium-zoom */var se=Object.assign||function(n){for(var e=1;e1&&arguments[1]!==void 0?arguments[1]:{},o=window.Promise||function(P){function C(){}P(C,C)},a=function(P){var C=P.target;if(C===ge){V();return}F.indexOf(C)!==-1&&I({target:C})},r=function(){if(!(Q||!h.original)){var P=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;Math.abs(tt-P)>O.scrollOffset&&setTimeout(V,150)}},c=function(P){var C=P.key||P.keyCode;(C==="Escape"||C==="Esc"||C===27)&&V()},d=function(){var P=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},C=P;if(P.background&&(ge.style.background=P.background),P.container&&P.container instanceof Object&&(C.container=se({},O.container,P.container)),P.template){var D=Pe(P.template)?P.template:document.querySelector(P.template);C.template=D}return O=se({},O,C),F.forEach(function(x){x.dispatchEvent(me("medium-zoom:update",{detail:{zoom:U}}))}),U},m=function(){var P=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return n(se({},O,P))},k=function(){for(var P=arguments.length,C=Array(P),D=0;D0?C.reduce(function(M,q){return[].concat(M,lt(q))},[]):F;return x.forEach(function(M){M.classList.remove("medium-zoom-image"),M.dispatchEvent(me("medium-zoom:detach",{detail:{zoom:U}}))}),F=F.filter(function(M){return x.indexOf(M)===-1}),U},w=function(P,C){var D=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return F.forEach(function(x){x.addEventListener("medium-zoom:"+P,C,D)}),oe.push({type:"medium-zoom:"+P,listener:C,options:D}),U},S=function(P,C){var D=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return F.forEach(function(x){x.removeEventListener("medium-zoom:"+P,C,D)}),oe=oe.filter(function(x){return!(x.type==="medium-zoom:"+P&&x.listener.toString()===C.toString())}),U},B=function(){var P=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},C=P.target,D=function(){var M={width:document.documentElement.clientWidth,height:document.documentElement.clientHeight,left:0,top:0,right:0,bottom:0},q=void 0,W=void 0;if(O.container)if(O.container instanceof Object)M=se({},M,O.container),q=M.width-M.left-M.right-O.margin*2,W=M.height-M.top-M.bottom-O.margin*2;else{var de=Pe(O.container)?O.container:document.querySelector(O.container),ae=de.getBoundingClientRect(),Ne=ae.width,Mt=ae.height,It=ae.left,Et=ae.top;M=se({},M,{width:Ne,height:Mt,left:It,top:Et})}q=q||M.width-O.margin*2,W=W||M.height-O.margin*2;var he=h.zoomedHd||h.original,Nt=it(he)?q:he.naturalWidth||q,Ht=it(he)?W:he.naturalHeight||W,be=he.getBoundingClientRect(),At=be.top,Bt=be.left,He=be.width,Ae=be.height,Ot=Math.min(Math.max(He,Nt),q)/He,Dt=Math.min(Math.max(Ae,Ht),W)/Ae,Be=Math.min(Ot,Dt),Ft=(-Bt+(q-He)/2+O.margin+M.left)/Be,xt=(-At+(W-Ae)/2+O.margin+M.top)/Be,nt="scale("+Be+") translate3d("+Ft+"px, "+xt+"px, 0)";h.zoomed.style.transform=nt,h.zoomedHd&&(h.zoomedHd.style.transform=nt)};return new o(function(x){if(C&&F.indexOf(C)===-1){x(U);return}var M=function Ne(){Q=!1,h.zoomed.removeEventListener("transitionend",Ne),h.original.dispatchEvent(me("medium-zoom:opened",{detail:{zoom:U}})),x(U)};if(h.zoomed){x(U);return}if(C)h.original=C;else if(F.length>0){var q=F;h.original=q[0]}else{x(U);return}if(h.original.dispatchEvent(me("medium-zoom:open",{detail:{zoom:U}})),tt=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,Q=!0,h.zoomed=Al(h.original),document.body.appendChild(ge),O.template){var W=Pe(O.template)?O.template:document.querySelector(O.template);h.template=document.createElement("div"),h.template.appendChild(W.content.cloneNode(!0)),document.body.appendChild(h.template)}if(h.original.parentElement&&h.original.parentElement.tagName==="PICTURE"&&h.original.currentSrc&&(h.zoomed.src=h.original.currentSrc),document.body.appendChild(h.zoomed),window.requestAnimationFrame(function(){document.body.classList.add("medium-zoom--opened")}),h.original.classList.add("medium-zoom-image--hidden"),h.zoomed.classList.add("medium-zoom-image--opened"),h.zoomed.addEventListener("click",V),h.zoomed.addEventListener("transitionend",M),h.original.getAttribute("data-zoom-src")){h.zoomedHd=h.zoomed.cloneNode(),h.zoomedHd.removeAttribute("srcset"),h.zoomedHd.removeAttribute("sizes"),h.zoomedHd.removeAttribute("loading"),h.zoomedHd.src=h.zoomed.getAttribute("data-zoom-src"),h.zoomedHd.onerror=function(){clearInterval(de),console.warn("Unable to reach the zoom image target "+h.zoomedHd.src),h.zoomedHd=null,D()};var de=setInterval(function(){h.zoomedHd.complete&&(clearInterval(de),h.zoomedHd.classList.add("medium-zoom-image--opened"),h.zoomedHd.addEventListener("click",V),document.body.appendChild(h.zoomedHd),D())},10)}else if(h.original.hasAttribute("srcset")){h.zoomedHd=h.zoomed.cloneNode(),h.zoomedHd.removeAttribute("sizes"),h.zoomedHd.removeAttribute("loading");var ae=h.zoomedHd.addEventListener("load",function(){h.zoomedHd.removeEventListener("load",ae),h.zoomedHd.classList.add("medium-zoom-image--opened"),h.zoomedHd.addEventListener("click",V),document.body.appendChild(h.zoomedHd),D()})}else D()})},V=function(){return new o(function(P){if(Q||!h.original){P(U);return}var C=function D(){h.original.classList.remove("medium-zoom-image--hidden"),document.body.removeChild(h.zoomed),h.zoomedHd&&document.body.removeChild(h.zoomedHd),document.body.removeChild(ge),h.zoomed.classList.remove("medium-zoom-image--opened"),h.template&&document.body.removeChild(h.template),Q=!1,h.zoomed.removeEventListener("transitionend",D),h.original.dispatchEvent(me("medium-zoom:closed",{detail:{zoom:U}})),h.original=null,h.zoomed=null,h.zoomedHd=null,h.template=null,P(U)};Q=!0,document.body.classList.remove("medium-zoom--opened"),h.zoomed.style.transform="",h.zoomedHd&&(h.zoomedHd.style.transform=""),h.template&&(h.template.style.transition="opacity 150ms",h.template.style.opacity=0),h.original.dispatchEvent(me("medium-zoom:close",{detail:{zoom:U}})),h.zoomed.addEventListener("transitionend",C)})},I=function(){var P=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},C=P.target;return h.original?V():B({target:C})},N=function(){return O},ue=function(){return F},J=function(){return h.original},F=[],oe=[],Q=!1,tt=0,O=t,h={original:null,zoomed:null,zoomedHd:null,template:null};Object.prototype.toString.call(e)==="[object Object]"?O=e:(e||typeof e=="string")&&k(e),O=se({margin:0,background:"#fff",scrollOffset:40,container:null,template:null},O);var ge=Hl(O.background);document.addEventListener("click",a),document.addEventListener("keyup",c),document.addEventListener("scroll",r),window.addEventListener("resize",V);var U={open:B,close:V,toggle:I,update:d,clone:m,attach:k,detach:$,on:w,off:S,getOptions:N,getImages:ue,getZoomedImage:J};return U};function Ol(n,e){e===void 0&&(e={});var t=e.insertAt;if(!(typeof document>"u")){var o=document.head||document.getElementsByTagName("head")[0],a=document.createElement("style");a.type="text/css",t==="top"&&o.firstChild?o.insertBefore(a,o.firstChild):o.appendChild(a),a.styleSheet?a.styleSheet.cssText=n:a.appendChild(document.createTextNode(n))}}var Dl=".medium-zoom-overlay{position:fixed;top:0;right:0;bottom:0;left:0;opacity:0;transition:opacity .3s;will-change:opacity}.medium-zoom--opened .medium-zoom-overlay{cursor:pointer;cursor:zoom-out;opacity:1}.medium-zoom-image{cursor:pointer;cursor:zoom-in;transition:transform .3s cubic-bezier(.2,0,.2,1)!important}.medium-zoom-image--hidden{visibility:hidden}.medium-zoom-image--opened{position:relative;cursor:pointer;cursor:zoom-out;will-change:transform}";Ol(Dl);const Fl=n=>(Z("data-v-09295527"),n=n(),X(),n),xl=Fl(()=>u("svg",{class:"icon-top",viewBox:"0 0 48 48",fill:"none",xmlns:"http://www.w3.org/2000/svg",stroke:"currentColor","stroke-width":"4","stroke-linecap":"butt","stroke-linejoin":"miter"},[u("path",{d:"M39.6 30.557 24.043 15 8.487 30.557"})],-1)),jl=[xl],Ul=b({__name:"back-to-top",props:{threshold:{default:300}},setup(n){const e=n,t=E(0),o=L(()=>t.value>e.threshold);Y(()=>{t.value=a(),window.addEventListener("scroll",c(()=>{t.value=a()},100))});function a(){return window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0}function r(){window.scrollTo({top:0,behavior:"smooth"}),t.value=0}function c(d,m=100){let k;return(...$)=>{clearTimeout(k),k=setTimeout(()=>{d.apply(null,$)},m)}}return(d,m)=>(s(),y(ze,{name:"fade"},{default:p(()=>[i(o)?(s(),l("div",{key:0,class:"go-to-top",onClick:r},jl)):f("",!0)]),_:1}))}}),Gl=(n,e)=>{const t=n.__vccOpts||n;for(const[o,a]of e)t[o]=a;return t},Rl=Gl(Ul,[["__scopeId","data-v-09295527"]]),ql=n=>{typeof window>"u"||window.addEventListener("load",()=>{const e=document.createElement("div");document.body.appendChild(e),tn(Ve(Rl,{threshold:n==null?void 0:n.threshold}),e)})};function Kl(n){return n&&n.__esModule&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n}var zt,pe,ee,Ct,De,ct,ve,$e=!1,ye=[];typeof document<"u"&&(Ct=function(n){return $e||document.readyState==="interactive"||document.readyState==="complete"?n.call(document):ye.push(function(){return n.call(this)}),this},ct=function(){for(var n=0,e=ye.length;n{pe&&pe.hides(),zt.fetch("//busuanzi.ibruce.info/busuanzi?jsonpCallback=BusuanziCallback",function(n){pe.texts(n),pe.shows()})};pe={bszs:["site_pv","page_pv","site_uv"],texts:function(n){this.bszs.map(function(e){var t=document.getElementById("busuanzi_value_"+e);t&&(t.innerHTML=n[e])})},hides:function(){this.bszs.map(function(n){var e=document.getElementById("busuanzi_container_"+n);e&&(e.style.display="none")})},shows:function(){this.bszs.map(function(n){var e=document.getElementById("busuanzi_container_"+n);e&&(e.style.display="inline")})}};typeof document<"u"&&Tt();var Wl={fetch:Tt},Yl=Wl;const Zl=Kl(Yl),Xl={class:"page_info"},Jl={key:0,class:"page_info_item"},Ql={key:1,class:"page_info_item"},ec=u("span",{class:"page_info_item"},[j(" 📔 "),u("span",{id:"busuanzi_container_page_pv"},[j(" 阅读量:"),u("span",{id:"busuanzi_value_page_pv"})])],-1),tc={__name:"PageInfo",setup(n){const{frontmatter:e}=Re();return(t,o)=>(s(),l("div",Xl,[i(e).Author?(s(),l("span",Jl,[j(" 🎨 "),u("span",null,"作者:"+T(i(e).Author),1)])):f("",!0),i(e).date?(s(),l("span",Ql,[j(" 🕐 "),u("span",null,"发表于:"+T(i(e).date?i(e).date.substring(0,10):""),1)])):f("",!0),ec]))}},rc={extends:st,Layout(){return Ve(st.Layout,null,{"doc-before":()=>Ve(tc)})},enhanceApp({app:n,router:e}){le&&(e.onAfterRouteChanged=()=>{Zl.fetch()}),ql({threshold:300})},setup(){const{frontmatter:n}=Re(),e=fe(),t=()=>{Bl(".main img",{background:"var(--vp-c-bg)"})};Y(()=>{t()}),te(()=>e.path,()=>We(()=>t())),El({repo:"funny-dream/youqu3",repoId:"R_kgDOMBemKg",category:"Announcements",categoryId:"DIC_kwDOMBemKs4CgATm",mapping:"pathname",inputPosition:"top",lang:"zh-CN"},{frontmatter:n,route:e},!0)}};export{rc as R,ac as V,sc as a,oc as b,Pr as c,z as u}; diff --git a/assets/index.md.DRE0EPUR.js b/assets/index.md.OOHsF2lk.js similarity index 89% rename from assets/index.md.DRE0EPUR.js rename to assets/index.md.OOHsF2lk.js index 535af0b..27c9e41 100644 --- a/assets/index.md.DRE0EPUR.js +++ b/assets/index.md.OOHsF2lk.js @@ -1 +1 @@ -import{V as n,a as s,b as r}from"./chunks/theme.F2IToOfj.js";import{c as u,I as t,w as e,p as i,o as m,a}from"./chunks/framework.DPHCW6-_.js";const k=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"YouQu3","text":"Next-Gen Linux Autotest Framework","tagline":"让 Linux 自动化测试变得更简单","actions":[{"theme":"brand","text":"GitHub","link":"https://github.com/funny-dream/youqu3"},{"theme":"alt","text":"Issues","link":"https://github.com/funny-dream/youqu3/issues"}],"image":{"src":"/logo.png","alt":"YouQu3"}},"features":[{"icon":"💪","title":"新架构","details":"全新的架构设计,插件化、模块化改造,底层全面重写,优化框架接口调用机制。"},{"icon":"💥","title":"新玩法","details":"继承YouQu2诸多亮点功能的同时解决其遇到的问题,各方面全面优化,更多玩法姿势等你来解锁。"},{"icon":"🛀","title":"新体验","details":"更加简单易用、更加纯粹、扩展性和兼容性更好,一发入魂。"}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1721730251000}'),l={name:"index.md"},b=Object.assign(l,{setup(c){const o=[{avatar:"https://www.github.com/mikigo.png",name:"mikigo",title:"Creator",org:"YouQu3",orgLink:"https://github.com/funny-dream/youqu3",links:[{icon:"github",link:"https://github.com/mikigo"},{icon:"x",link:"https://twitter.com/mikigo_"}]},{avatar:"https://www.github.com/DarkLii.png",name:"DarkLii",title:"Developer",links:[{icon:"github",link:"https://github.com/DarkLii"}]}];return(h,g)=>(m(),u("div",null,[t(i(r),null,{default:e(()=>[t(i(n),null,{title:e(()=>[a(" Contributors ")]),lead:e(()=>[a(" 感谢以下所有人的贡献与参与 ")]),_:1}),t(i(s),{size:"small",members:o})]),_:1})]))}});export{k as __pageData,b as default}; +import{V as n,a as s,b as r}from"./chunks/theme.BqZMVUP5.js";import{c as u,I as t,w as e,p as i,o as m,a}from"./chunks/framework.CmHn2guR.js";const k=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"YouQu3","text":"Next-Gen Linux Autotest Framework","tagline":"让 Linux 自动化测试变得更简单","actions":[{"theme":"brand","text":"GitHub","link":"https://github.com/funny-dream/youqu3"},{"theme":"alt","text":"Issues","link":"https://github.com/funny-dream/youqu3/issues"}],"image":{"src":"/logo.png","alt":"YouQu3"}},"features":[{"icon":"💪","title":"新架构","details":"全新的架构设计,插件化、模块化改造,底层全面重写,优化框架接口调用机制。"},{"icon":"💥","title":"新玩法","details":"继承YouQu2诸多亮点功能的同时解决其遇到的问题,各方面全面优化,更多玩法姿势等你来解锁。"},{"icon":"🛀","title":"新体验","details":"更加简单易用、更加纯粹、扩展性和兼容性更好,一发入魂。"}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1721811560000}'),l={name:"index.md"},b=Object.assign(l,{setup(c){const o=[{avatar:"https://www.github.com/mikigo.png",name:"mikigo",title:"Creator",org:"YouQu3",orgLink:"https://github.com/funny-dream/youqu3",links:[{icon:"github",link:"https://github.com/mikigo"},{icon:"x",link:"https://twitter.com/mikigo_"}]},{avatar:"https://www.github.com/DarkLii.png",name:"DarkLii",title:"Developer",links:[{icon:"github",link:"https://github.com/DarkLii"}]}];return(h,g)=>(m(),u("div",null,[t(i(r),null,{default:e(()=>[t(i(n),null,{title:e(()=>[a(" Contributors ")]),lead:e(()=>[a(" 感谢以下所有人的贡献与参与 ")]),_:1}),t(i(s),{size:"small",members:o})]),_:1})]))}});export{k as __pageData,b as default}; diff --git a/assets/index.md.DRE0EPUR.lean.js b/assets/index.md.OOHsF2lk.lean.js similarity index 89% rename from assets/index.md.DRE0EPUR.lean.js rename to assets/index.md.OOHsF2lk.lean.js index 535af0b..27c9e41 100644 --- a/assets/index.md.DRE0EPUR.lean.js +++ b/assets/index.md.OOHsF2lk.lean.js @@ -1 +1 @@ -import{V as n,a as s,b as r}from"./chunks/theme.F2IToOfj.js";import{c as u,I as t,w as e,p as i,o as m,a}from"./chunks/framework.DPHCW6-_.js";const k=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"YouQu3","text":"Next-Gen Linux Autotest Framework","tagline":"让 Linux 自动化测试变得更简单","actions":[{"theme":"brand","text":"GitHub","link":"https://github.com/funny-dream/youqu3"},{"theme":"alt","text":"Issues","link":"https://github.com/funny-dream/youqu3/issues"}],"image":{"src":"/logo.png","alt":"YouQu3"}},"features":[{"icon":"💪","title":"新架构","details":"全新的架构设计,插件化、模块化改造,底层全面重写,优化框架接口调用机制。"},{"icon":"💥","title":"新玩法","details":"继承YouQu2诸多亮点功能的同时解决其遇到的问题,各方面全面优化,更多玩法姿势等你来解锁。"},{"icon":"🛀","title":"新体验","details":"更加简单易用、更加纯粹、扩展性和兼容性更好,一发入魂。"}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1721730251000}'),l={name:"index.md"},b=Object.assign(l,{setup(c){const o=[{avatar:"https://www.github.com/mikigo.png",name:"mikigo",title:"Creator",org:"YouQu3",orgLink:"https://github.com/funny-dream/youqu3",links:[{icon:"github",link:"https://github.com/mikigo"},{icon:"x",link:"https://twitter.com/mikigo_"}]},{avatar:"https://www.github.com/DarkLii.png",name:"DarkLii",title:"Developer",links:[{icon:"github",link:"https://github.com/DarkLii"}]}];return(h,g)=>(m(),u("div",null,[t(i(r),null,{default:e(()=>[t(i(n),null,{title:e(()=>[a(" Contributors ")]),lead:e(()=>[a(" 感谢以下所有人的贡献与参与 ")]),_:1}),t(i(s),{size:"small",members:o})]),_:1})]))}});export{k as __pageData,b as default}; +import{V as n,a as s,b as r}from"./chunks/theme.BqZMVUP5.js";import{c as u,I as t,w as e,p as i,o as m,a}from"./chunks/framework.CmHn2guR.js";const k=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"YouQu3","text":"Next-Gen Linux Autotest Framework","tagline":"让 Linux 自动化测试变得更简单","actions":[{"theme":"brand","text":"GitHub","link":"https://github.com/funny-dream/youqu3"},{"theme":"alt","text":"Issues","link":"https://github.com/funny-dream/youqu3/issues"}],"image":{"src":"/logo.png","alt":"YouQu3"}},"features":[{"icon":"💪","title":"新架构","details":"全新的架构设计,插件化、模块化改造,底层全面重写,优化框架接口调用机制。"},{"icon":"💥","title":"新玩法","details":"继承YouQu2诸多亮点功能的同时解决其遇到的问题,各方面全面优化,更多玩法姿势等你来解锁。"},{"icon":"🛀","title":"新体验","details":"更加简单易用、更加纯粹、扩展性和兼容性更好,一发入魂。"}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1721811560000}'),l={name:"index.md"},b=Object.assign(l,{setup(c){const o=[{avatar:"https://www.github.com/mikigo.png",name:"mikigo",title:"Creator",org:"YouQu3",orgLink:"https://github.com/funny-dream/youqu3",links:[{icon:"github",link:"https://github.com/mikigo"},{icon:"x",link:"https://twitter.com/mikigo_"}]},{avatar:"https://www.github.com/DarkLii.png",name:"DarkLii",title:"Developer",links:[{icon:"github",link:"https://github.com/DarkLii"}]}];return(h,g)=>(m(),u("div",null,[t(i(r),null,{default:e(()=>[t(i(n),null,{title:e(()=>[a(" Contributors ")]),lead:e(()=>[a(" 感谢以下所有人的贡献与参与 ")]),_:1}),t(i(s),{size:"small",members:o})]),_:1})]))}});export{k as __pageData,b as default}; diff --git "a/assets/\345\256\236\350\267\265_\346\226\271\346\263\225\345\274\200\345\217\221.md.BWR_bq88.js" "b/assets/\345\256\236\350\267\265_\346\226\271\346\263\225\345\274\200\345\217\221.md.CmVENVCW.js" similarity index 67% rename from "assets/\345\256\236\350\267\265_\346\226\271\346\263\225\345\274\200\345\217\221.md.BWR_bq88.js" rename to "assets/\345\256\236\350\267\265_\346\226\271\346\263\225\345\274\200\345\217\221.md.CmVENVCW.js" index e7dc24b..4d67af1 100644 --- "a/assets/\345\256\236\350\267\265_\346\226\271\346\263\225\345\274\200\345\217\221.md.BWR_bq88.js" +++ "b/assets/\345\256\236\350\267\265_\346\226\271\346\263\225\345\274\200\345\217\221.md.CmVENVCW.js" @@ -1 +1 @@ -import{_ as e,c as t,o as a}from"./chunks/framework.DPHCW6-_.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"实践/方法开发.md","filePath":"实践/方法开发.md","lastUpdated":1721730251000}'),r={name:"实践/方法开发.md"};function o(s,c,n,_,d,p){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default}; +import{_ as e,c as t,o as a}from"./chunks/framework.CmHn2guR.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"实践/方法开发.md","filePath":"实践/方法开发.md","lastUpdated":1721811560000}'),r={name:"实践/方法开发.md"};function o(s,c,n,_,d,p){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default}; diff --git "a/assets/\345\256\236\350\267\265_\346\226\271\346\263\225\345\274\200\345\217\221.md.BWR_bq88.lean.js" "b/assets/\345\256\236\350\267\265_\346\226\271\346\263\225\345\274\200\345\217\221.md.CmVENVCW.lean.js" similarity index 67% rename from "assets/\345\256\236\350\267\265_\346\226\271\346\263\225\345\274\200\345\217\221.md.BWR_bq88.lean.js" rename to "assets/\345\256\236\350\267\265_\346\226\271\346\263\225\345\274\200\345\217\221.md.CmVENVCW.lean.js" index e7dc24b..4d67af1 100644 --- "a/assets/\345\256\236\350\267\265_\346\226\271\346\263\225\345\274\200\345\217\221.md.BWR_bq88.lean.js" +++ "b/assets/\345\256\236\350\267\265_\346\226\271\346\263\225\345\274\200\345\217\221.md.CmVENVCW.lean.js" @@ -1 +1 @@ -import{_ as e,c as t,o as a}from"./chunks/framework.DPHCW6-_.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"实践/方法开发.md","filePath":"实践/方法开发.md","lastUpdated":1721730251000}'),r={name:"实践/方法开发.md"};function o(s,c,n,_,d,p){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default}; +import{_ as e,c as t,o as a}from"./chunks/framework.CmHn2guR.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"实践/方法开发.md","filePath":"实践/方法开发.md","lastUpdated":1721811560000}'),r={name:"实践/方法开发.md"};function o(s,c,n,_,d,p){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default}; diff --git "a/assets/\345\256\236\350\267\265_\347\224\250\344\276\213\345\274\200\345\217\221.md.v6qenabx.js" "b/assets/\345\256\236\350\267\265_\347\224\250\344\276\213\345\274\200\345\217\221.md.PxhyBWut.js" similarity index 67% rename from "assets/\345\256\236\350\267\265_\347\224\250\344\276\213\345\274\200\345\217\221.md.v6qenabx.js" rename to "assets/\345\256\236\350\267\265_\347\224\250\344\276\213\345\274\200\345\217\221.md.PxhyBWut.js" index 334a48b..7d1a74c 100644 --- "a/assets/\345\256\236\350\267\265_\347\224\250\344\276\213\345\274\200\345\217\221.md.v6qenabx.js" +++ "b/assets/\345\256\236\350\267\265_\347\224\250\344\276\213\345\274\200\345\217\221.md.PxhyBWut.js" @@ -1 +1 @@ -import{_ as e,c as t,o as a}from"./chunks/framework.DPHCW6-_.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"实践/用例开发.md","filePath":"实践/用例开发.md","lastUpdated":1721730251000}'),r={name:"实践/用例开发.md"};function o(s,c,n,_,d,p){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default}; +import{_ as e,c as t,o as a}from"./chunks/framework.CmHn2guR.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"实践/用例开发.md","filePath":"实践/用例开发.md","lastUpdated":1721811560000}'),r={name:"实践/用例开发.md"};function o(s,c,n,_,d,p){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default}; diff --git "a/assets/\345\256\236\350\267\265_\347\224\250\344\276\213\345\274\200\345\217\221.md.v6qenabx.lean.js" "b/assets/\345\256\236\350\267\265_\347\224\250\344\276\213\345\274\200\345\217\221.md.PxhyBWut.lean.js" similarity index 67% rename from "assets/\345\256\236\350\267\265_\347\224\250\344\276\213\345\274\200\345\217\221.md.v6qenabx.lean.js" rename to "assets/\345\256\236\350\267\265_\347\224\250\344\276\213\345\274\200\345\217\221.md.PxhyBWut.lean.js" index 334a48b..7d1a74c 100644 --- "a/assets/\345\256\236\350\267\265_\347\224\250\344\276\213\345\274\200\345\217\221.md.v6qenabx.lean.js" +++ "b/assets/\345\256\236\350\267\265_\347\224\250\344\276\213\345\274\200\345\217\221.md.PxhyBWut.lean.js" @@ -1 +1 @@ -import{_ as e,c as t,o as a}from"./chunks/framework.DPHCW6-_.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"实践/用例开发.md","filePath":"实践/用例开发.md","lastUpdated":1721730251000}'),r={name:"实践/用例开发.md"};function o(s,c,n,_,d,p){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default}; +import{_ as e,c as t,o as a}from"./chunks/framework.CmHn2guR.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"实践/用例开发.md","filePath":"实践/用例开发.md","lastUpdated":1721811560000}'),r={name:"实践/用例开发.md"};function o(s,c,n,_,d,p){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default}; diff --git "a/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_JSON\346\212\245\345\221\212.md.D2vdy5GH.js" "b/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_JSON\346\212\245\345\221\212.md.Bjj89P7D.js" similarity index 98% rename from "assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_JSON\346\212\245\345\221\212.md.D2vdy5GH.js" rename to "assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_JSON\346\212\245\345\221\212.md.Bjj89P7D.js" index fc6f8f0..f96c943 100644 --- "a/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_JSON\346\212\245\345\221\212.md.D2vdy5GH.js" +++ "b/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_JSON\346\212\245\345\221\212.md.Bjj89P7D.js" @@ -1,4 +1,4 @@ -import{_ as s,c as i,o as a,U as n}from"./chunks/framework.DPHCW6-_.js";const y=JSON.parse('{"title":"JSON 报告","description":"","frontmatter":{},"headers":[],"relativePath":"指南/与生俱来/JSON报告.md","filePath":"指南/与生俱来/JSON报告.md","lastUpdated":1721730251000}'),t={name:"指南/与生俱来/JSON报告.md"},h=n(`

JSON 报告

框架默认生成 JSON 报告,在用例工程目录下生成报告文件: /report/json/report_xxxx.json

报告内容

整体结构

json
{
+import{_ as s,c as i,o as a,U as n}from"./chunks/framework.CmHn2guR.js";const y=JSON.parse('{"title":"JSON 报告","description":"","frontmatter":{},"headers":[],"relativePath":"指南/与生俱来/JSON报告.md","filePath":"指南/与生俱来/JSON报告.md","lastUpdated":1721811560000}'),t={name:"指南/与生俱来/JSON报告.md"},h=n(`

JSON 报告

框架默认生成 JSON 报告,在用例工程目录下生成报告文件: /report/json/report_xxxx.json

报告内容

整体结构

json
{
     "created": 1518371686.7981803,
     "duration": 0.1235666275024414,
     "exitcode": 1,
diff --git "a/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_JSON\346\212\245\345\221\212.md.D2vdy5GH.lean.js" "b/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_JSON\346\212\245\345\221\212.md.Bjj89P7D.lean.js"
similarity index 59%
rename from "assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_JSON\346\212\245\345\221\212.md.D2vdy5GH.lean.js"
rename to "assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_JSON\346\212\245\345\221\212.md.Bjj89P7D.lean.js"
index 86a48f6..4d7fda3 100644
--- "a/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_JSON\346\212\245\345\221\212.md.D2vdy5GH.lean.js"
+++ "b/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_JSON\346\212\245\345\221\212.md.Bjj89P7D.lean.js"
@@ -1 +1 @@
-import{_ as s,c as i,o as a,U as n}from"./chunks/framework.DPHCW6-_.js";const y=JSON.parse('{"title":"JSON 报告","description":"","frontmatter":{},"headers":[],"relativePath":"指南/与生俱来/JSON报告.md","filePath":"指南/与生俱来/JSON报告.md","lastUpdated":1721730251000}'),t={name:"指南/与生俱来/JSON报告.md"},h=n("",19),l=[h];function k(p,e,E,o,r,d){return a(),i("div",null,l)}const c=s(t,[["render",k]]);export{y as __pageData,c as default};
+import{_ as s,c as i,o as a,U as n}from"./chunks/framework.CmHn2guR.js";const y=JSON.parse('{"title":"JSON 报告","description":"","frontmatter":{},"headers":[],"relativePath":"指南/与生俱来/JSON报告.md","filePath":"指南/与生俱来/JSON报告.md","lastUpdated":1721811560000}'),t={name:"指南/与生俱来/JSON报告.md"},h=n("",19),l=[h];function k(p,e,E,o,r,d){return a(),i("div",null,l)}const c=s(t,[["render",k]]);export{y as __pageData,c as default};
diff --git "a/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\345\205\250\350\207\252\345\212\250\346\227\245\345\277\227.md.DqT5eW6S.js" "b/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\345\205\250\350\207\252\345\212\250\346\227\245\345\277\227.md.s-ehohkA.js"
similarity index 99%
rename from "assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\345\205\250\350\207\252\345\212\250\346\227\245\345\277\227.md.DqT5eW6S.js"
rename to "assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\345\205\250\350\207\252\345\212\250\346\227\245\345\277\227.md.s-ehohkA.js"
index 8f61d67..d7f3db8 100644
--- "a/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\345\205\250\350\207\252\345\212\250\346\227\245\345\277\227.md.DqT5eW6S.js"
+++ "b/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\345\205\250\350\207\252\345\212\250\346\227\245\345\277\227.md.s-ehohkA.js"
@@ -1,4 +1,4 @@
-import{_ as n,c as t,m as s,a as i,t as p,U as l,o as h}from"./chunks/framework.DPHCW6-_.js";const u=JSON.parse('{"title":"全自动日志","description":"","frontmatter":{},"headers":[],"relativePath":"指南/与生俱来/全自动日志.md","filePath":"指南/与生俱来/全自动日志.md","lastUpdated":1721730251000}'),e={name:"指南/与生俱来/全自动日志.md"},k=l(`

全自动日志

背景

基于 YouQu3 自动化测试框架操作方法封装写法,通常是这样的:类里面一个函数只包含一个操作或多次调用的一系列可合并的操作;

传统的日志输出方式,需要在每个函数里面主动编写日志输出代码 ,例如:

python
class AppMethod:
+import{_ as n,c as t,m as s,a as i,t as p,U as l,o as h}from"./chunks/framework.CmHn2guR.js";const u=JSON.parse('{"title":"全自动日志","description":"","frontmatter":{},"headers":[],"relativePath":"指南/与生俱来/全自动日志.md","filePath":"指南/与生俱来/全自动日志.md","lastUpdated":1721811560000}'),e={name:"指南/与生俱来/全自动日志.md"},k=l(`

全自动日志

背景

基于 YouQu3 自动化测试框架操作方法封装写法,通常是这样的:类里面一个函数只包含一个操作或多次调用的一系列可合并的操作;

传统的日志输出方式,需要在每个函数里面主动编写日志输出代码 ,例如:

python
class AppMethod:
     
     def click_xxx_by_attr(self):
         """点击某个元素"""
diff --git "a/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\345\205\250\350\207\252\345\212\250\346\227\245\345\277\227.md.DqT5eW6S.lean.js" "b/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\345\205\250\350\207\252\345\212\250\346\227\245\345\277\227.md.s-ehohkA.lean.js"
similarity index 88%
rename from "assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\345\205\250\350\207\252\345\212\250\346\227\245\345\277\227.md.DqT5eW6S.lean.js"
rename to "assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\345\205\250\350\207\252\345\212\250\346\227\245\345\277\227.md.s-ehohkA.lean.js"
index 6a7dff0..fa4ce74 100644
--- "a/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\345\205\250\350\207\252\345\212\250\346\227\245\345\277\227.md.DqT5eW6S.lean.js"
+++ "b/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\345\205\250\350\207\252\345\212\250\346\227\245\345\277\227.md.s-ehohkA.lean.js"
@@ -1 +1 @@
-import{_ as n,c as t,m as s,a as i,t as p,U as l,o as h}from"./chunks/framework.DPHCW6-_.js";const u=JSON.parse('{"title":"全自动日志","description":"","frontmatter":{},"headers":[],"relativePath":"指南/与生俱来/全自动日志.md","filePath":"指南/与生俱来/全自动日志.md","lastUpdated":1721730251000}'),e={name:"指南/与生俱来/全自动日志.md"},k=l("",28),d=s("p",null,[i("没错,这就是我们参考"),s("code",null,"Django"),i(" 和 "),s("code",null,"jinja2"),i(" 的模板语法设计出的"),s("strong",null,"日志模板语法"),i(",使用方法很简单,"),s("strong",null,"用两对大括号把函数的参数括起来"),i(",这样在日志输出的时候就能把调用函数时参数的值输出出来。")],-1);function r(a,o,g,E,c,y){return h(),t("div",null,[k,s("p",null,[i("通过观察前面的例子,细心的同学可能还发现了一个小细节:函数功能说明中,两对大括号中的内容 "),s("code",null,p(a.elements),1),i(" 作为变量输出出来了;")]),d])}const C=n(e,[["render",r]]);export{u as __pageData,C as default};
+import{_ as n,c as t,m as s,a as i,t as p,U as l,o as h}from"./chunks/framework.CmHn2guR.js";const u=JSON.parse('{"title":"全自动日志","description":"","frontmatter":{},"headers":[],"relativePath":"指南/与生俱来/全自动日志.md","filePath":"指南/与生俱来/全自动日志.md","lastUpdated":1721811560000}'),e={name:"指南/与生俱来/全自动日志.md"},k=l("",28),d=s("p",null,[i("没错,这就是我们参考"),s("code",null,"Django"),i(" 和 "),s("code",null,"jinja2"),i(" 的模板语法设计出的"),s("strong",null,"日志模板语法"),i(",使用方法很简单,"),s("strong",null,"用两对大括号把函数的参数括起来"),i(",这样在日志输出的时候就能把调用函数时参数的值输出出来。")],-1);function r(a,o,g,E,c,y){return h(),t("div",null,[k,s("p",null,[i("通过观察前面的例子,细心的同学可能还发现了一个小细节:函数功能说明中,两对大括号中的内容 "),s("code",null,p(a.elements),1),i(" 作为变量输出出来了;")]),d])}const C=n(e,[["render",r]]);export{u as __pageData,C as default};
diff --git "a/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\345\211\215\345\220\216\351\222\251\345\255\220.md.hQClU6uO.js" "b/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\345\211\215\345\220\216\351\222\251\345\255\220.md.ClInqwhb.js"
similarity index 97%
rename from "assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\345\211\215\345\220\216\351\222\251\345\255\220.md.hQClU6uO.js"
rename to "assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\345\211\215\345\220\216\351\222\251\345\255\220.md.ClInqwhb.js"
index e94a016..107df50 100644
--- "a/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\345\211\215\345\220\216\351\222\251\345\255\220.md.hQClU6uO.js"
+++ "b/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\345\211\215\345\220\216\351\222\251\345\255\220.md.ClInqwhb.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as a,o as i,U as t}from"./chunks/framework.DPHCW6-_.js";const F=JSON.parse('{"title":"前后钩子","description":"","frontmatter":{},"headers":[],"relativePath":"指南/与生俱来/前后钩子.md","filePath":"指南/与生俱来/前后钩子.md","lastUpdated":1721730251000}'),e={name:"指南/与生俱来/前后钩子.md"},h=t(`

前后钩子

YouQu3 提供灵活的前后钩子机制。

前置钩子

前置脚本钩子

在用例工程目录下存放一个 job_start.py 的脚本,框架会在用例执行之前自动加载并执行。

bash
my_case
+import{_ as s,c as a,o as i,U as t}from"./chunks/framework.CmHn2guR.js";const F=JSON.parse('{"title":"前后钩子","description":"","frontmatter":{},"headers":[],"relativePath":"指南/与生俱来/前后钩子.md","filePath":"指南/与生俱来/前后钩子.md","lastUpdated":1721811560000}'),e={name:"指南/与生俱来/前后钩子.md"},h=t(`

前后钩子

YouQu3 提供灵活的前后钩子机制。

前置钩子

前置脚本钩子

在用例工程目录下存放一个 job_start.py 的脚本,框架会在用例执行之前自动加载并执行。

bash
my_case
 ├── case
 ├── method
 ├── job_start.py
diff --git "a/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\345\211\215\345\220\216\351\222\251\345\255\220.md.hQClU6uO.lean.js" "b/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\345\211\215\345\220\216\351\222\251\345\255\220.md.ClInqwhb.lean.js"
similarity index 59%
rename from "assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\345\211\215\345\220\216\351\222\251\345\255\220.md.hQClU6uO.lean.js"
rename to "assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\345\211\215\345\220\216\351\222\251\345\255\220.md.ClInqwhb.lean.js"
index 61aa3da..a4b2374 100644
--- "a/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\345\211\215\345\220\216\351\222\251\345\255\220.md.hQClU6uO.lean.js"
+++ "b/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\345\211\215\345\220\216\351\222\251\345\255\220.md.ClInqwhb.lean.js"
@@ -1 +1 @@
-import{_ as s,c as a,o as i,U as t}from"./chunks/framework.DPHCW6-_.js";const F=JSON.parse('{"title":"前后钩子","description":"","frontmatter":{},"headers":[],"relativePath":"指南/与生俱来/前后钩子.md","filePath":"指南/与生俱来/前后钩子.md","lastUpdated":1721730251000}'),e={name:"指南/与生俱来/前后钩子.md"},h=t("",21),n=[h];function l(p,o,d,k,r,c){return i(),a("div",null,n)}const g=s(e,[["render",l]]);export{F as __pageData,g as default};
+import{_ as s,c as a,o as i,U as t}from"./chunks/framework.CmHn2guR.js";const F=JSON.parse('{"title":"前后钩子","description":"","frontmatter":{},"headers":[],"relativePath":"指南/与生俱来/前后钩子.md","filePath":"指南/与生俱来/前后钩子.md","lastUpdated":1721811560000}'),e={name:"指南/与生俱来/前后钩子.md"},h=t("",21),n=[h];function l(p,o,d,k,r,c){return i(),a("div",null,n)}const g=s(e,[["render",l]]);export{F as __pageData,g as default};
diff --git "a/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\345\212\250\346\200\201\347\255\211\345\276\205.md.IkHDSX71.js" "b/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\345\212\250\346\200\201\347\255\211\345\276\205.md.BqXJUEvM.js"
similarity index 94%
rename from "assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\345\212\250\346\200\201\347\255\211\345\276\205.md.IkHDSX71.js"
rename to "assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\345\212\250\346\200\201\347\255\211\345\276\205.md.BqXJUEvM.js"
index 05481d5..5e1a257 100644
--- "a/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\345\212\250\346\200\201\347\255\211\345\276\205.md.IkHDSX71.js"
+++ "b/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\345\212\250\346\200\201\347\255\211\345\276\205.md.BqXJUEvM.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as a,o as i,U as t}from"./chunks/framework.DPHCW6-_.js";const g=JSON.parse('{"title":"动态等待","description":"","frontmatter":{},"headers":[],"relativePath":"指南/与生俱来/动态等待.md","filePath":"指南/与生俱来/动态等待.md","lastUpdated":1721730251000}'),n={name:"指南/与生俱来/动态等待.md"},e=t(`

动态等待

架构动态等待

python
from youqu3 import sleep
+import{_ as s,c as a,o as i,U as t}from"./chunks/framework.CmHn2guR.js";const g=JSON.parse('{"title":"动态等待","description":"","frontmatter":{},"headers":[],"relativePath":"指南/与生俱来/动态等待.md","filePath":"指南/与生俱来/动态等待.md","lastUpdated":1721811560000}'),n={name:"指南/与生俱来/动态等待.md"},e=t(`

动态等待

架构动态等待

python
from youqu3 import sleep
 
 sleep(1)

可以完全代替之前这样的写法:

python
from time import sleep

优化:

  • 增加了等待的日志

  • 根据不同的架构对等待时间进行倍数放大,各架构倍数:

    ini
    x86_64 = 1
     aarch64 = 1.5
    diff --git "a/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\345\212\250\346\200\201\347\255\211\345\276\205.md.IkHDSX71.lean.js" "b/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\345\212\250\346\200\201\347\255\211\345\276\205.md.BqXJUEvM.lean.js"
    similarity index 59%
    rename from "assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\345\212\250\346\200\201\347\255\211\345\276\205.md.IkHDSX71.lean.js"
    rename to "assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\345\212\250\346\200\201\347\255\211\345\276\205.md.BqXJUEvM.lean.js"
    index bd47cea..bb2ba55 100644
    --- "a/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\345\212\250\346\200\201\347\255\211\345\276\205.md.IkHDSX71.lean.js"
    +++ "b/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\345\212\250\346\200\201\347\255\211\345\276\205.md.BqXJUEvM.lean.js"
    @@ -1 +1 @@
    -import{_ as s,c as a,o as i,U as t}from"./chunks/framework.DPHCW6-_.js";const g=JSON.parse('{"title":"动态等待","description":"","frontmatter":{},"headers":[],"relativePath":"指南/与生俱来/动态等待.md","filePath":"指南/与生俱来/动态等待.md","lastUpdated":1721730251000}'),n={name:"指南/与生俱来/动态等待.md"},e=t("",8),p=[e];function l(h,k,r,d,o,c){return i(),a("div",null,p)}const _=s(n,[["render",l]]);export{g as __pageData,_ as default};
    +import{_ as s,c as a,o as i,U as t}from"./chunks/framework.CmHn2guR.js";const g=JSON.parse('{"title":"动态等待","description":"","frontmatter":{},"headers":[],"relativePath":"指南/与生俱来/动态等待.md","filePath":"指南/与生俱来/动态等待.md","lastUpdated":1721811560000}'),n={name:"指南/与生俱来/动态等待.md"},e=t("",8),p=[e];function l(h,k,r,d,o,c){return i(),a("div",null,p)}const _=s(n,[["render",l]]);export{g as __pageData,_ as default};
    diff --git "a/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\345\221\275\344\273\244\350\241\214\344\272\244\344\272\222.md.BptXycay.js" "b/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\345\221\275\344\273\244\350\241\214\344\272\244\344\272\222.md.BHqK9b4n.js"
    similarity index 97%
    rename from "assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\345\221\275\344\273\244\350\241\214\344\272\244\344\272\222.md.BptXycay.js"
    rename to "assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\345\221\275\344\273\244\350\241\214\344\272\244\344\272\222.md.BHqK9b4n.js"
    index e9411cc..1ba51f4 100644
    --- "a/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\345\221\275\344\273\244\350\241\214\344\272\244\344\272\222.md.BptXycay.js"
    +++ "b/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\345\221\275\344\273\244\350\241\214\344\272\244\344\272\222.md.BHqK9b4n.js"
    @@ -1,4 +1,4 @@
    -import{_ as s,c as i,o as a,U as t}from"./chunks/framework.DPHCW6-_.js";const u=JSON.parse('{"title":"命令行交互","description":"","frontmatter":{},"headers":[],"relativePath":"指南/与生俱来/命令行交互.md","filePath":"指南/与生俱来/命令行交互.md","lastUpdated":1721730251000}'),n={name:"指南/与生俱来/命令行交互.md"},h=t(`

    命令行交互

    本机命令行交互

    普通权限执行

    python
    from youqu3.cmd import Cmd
    +import{_ as s,c as i,o as a,U as t}from"./chunks/framework.CmHn2guR.js";const u=JSON.parse('{"title":"命令行交互","description":"","frontmatter":{},"headers":[],"relativePath":"指南/与生俱来/命令行交互.md","filePath":"指南/与生俱来/命令行交互.md","lastUpdated":1721811560000}'),n={name:"指南/与生俱来/命令行交互.md"},h=t(`

    命令行交互

    本机命令行交互

    普通权限执行

    python
    from youqu3.cmd import Cmd
     
     Cmd.run("ls")

    sudo权限执行

    python
    from youqu3.cmd import Cmd
     
    diff --git "a/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\345\221\275\344\273\244\350\241\214\344\272\244\344\272\222.md.BptXycay.lean.js" "b/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\345\221\275\344\273\244\350\241\214\344\272\244\344\272\222.md.BHqK9b4n.lean.js"
    similarity index 60%
    rename from "assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\345\221\275\344\273\244\350\241\214\344\272\244\344\272\222.md.BptXycay.lean.js"
    rename to "assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\345\221\275\344\273\244\350\241\214\344\272\244\344\272\222.md.BHqK9b4n.lean.js"
    index 8431618..b4eed52 100644
    --- "a/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\345\221\275\344\273\244\350\241\214\344\272\244\344\272\222.md.BptXycay.lean.js"
    +++ "b/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\345\221\275\344\273\244\350\241\214\344\272\244\344\272\222.md.BHqK9b4n.lean.js"
    @@ -1 +1 @@
    -import{_ as s,c as i,o as a,U as t}from"./chunks/framework.DPHCW6-_.js";const u=JSON.parse('{"title":"命令行交互","description":"","frontmatter":{},"headers":[],"relativePath":"指南/与生俱来/命令行交互.md","filePath":"指南/与生俱来/命令行交互.md","lastUpdated":1721730251000}'),n={name:"指南/与生俱来/命令行交互.md"},h=t("",15),e=[h];function p(l,k,o,d,r,E){return a(),i("div",null,e)}const g=s(n,[["render",p]]);export{u as __pageData,g as default};
    +import{_ as s,c as i,o as a,U as t}from"./chunks/framework.CmHn2guR.js";const u=JSON.parse('{"title":"命令行交互","description":"","frontmatter":{},"headers":[],"relativePath":"指南/与生俱来/命令行交互.md","filePath":"指南/与生俱来/命令行交互.md","lastUpdated":1721811560000}'),n={name:"指南/与生俱来/命令行交互.md"},h=t("",15),e=[h];function p(l,k,o,d,r,E){return a(),i("div",null,e)}const g=s(n,[["render",p]]);export{u as __pageData,g as default};
    diff --git "a/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\346\226\255\350\250\200\350\257\255\345\217\245.md.Bn3HXCZW.lean.js" "b/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\346\226\255\350\250\200\350\257\255\345\217\245.md.Bn3HXCZW.lean.js"
    deleted file mode 100644
    index 7cd6729..0000000
    --- "a/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\346\226\255\350\250\200\350\257\255\345\217\245.md.Bn3HXCZW.lean.js"
    +++ /dev/null
    @@ -1 +0,0 @@
    -import{_ as s,c as i,o as a,U as n,a6 as h}from"./chunks/framework.DPHCW6-_.js";const C=JSON.parse('{"title":"断言语句","description":"","frontmatter":{},"headers":[],"relativePath":"指南/与生俱来/断言语句.md","filePath":"指南/与生俱来/断言语句.md","lastUpdated":1721730251000}'),k={name:"指南/与生俱来/断言语句.md"},p=n("",12),l=[p];function t(e,E,r,F,d,g){return a(),i("div",null,l)}const o=s(k,[["render",t]]);export{C as __pageData,o as default};
    diff --git "a/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\346\226\255\350\250\200\350\257\255\345\217\245.md.Bn3HXCZW.js" "b/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\346\226\255\350\250\200\350\257\255\345\217\245.md.M_RN9N9Z.js"
    similarity index 98%
    rename from "assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\346\226\255\350\250\200\350\257\255\345\217\245.md.Bn3HXCZW.js"
    rename to "assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\346\226\255\350\250\200\350\257\255\345\217\245.md.M_RN9N9Z.js"
    index 4885b32..3ad42de 100644
    --- "a/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\346\226\255\350\250\200\350\257\255\345\217\245.md.Bn3HXCZW.js"
    +++ "b/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\346\226\255\350\250\200\350\257\255\345\217\245.md.M_RN9N9Z.js"
    @@ -1,4 +1,4 @@
    -import{_ as s,c as i,o as a,U as n,a6 as h}from"./chunks/framework.DPHCW6-_.js";const C=JSON.parse('{"title":"断言语句","description":"","frontmatter":{},"headers":[],"relativePath":"指南/与生俱来/断言语句.md","filePath":"指南/与生俱来/断言语句.md","lastUpdated":1721730251000}'),k={name:"指南/与生俱来/断言语句.md"},p=n('

    断言语句

    YouQu3 自带多种断言语句,几乎满足了所有的断言场景;

    用例中使用方法

    APP 工程自有断言模块:assert_method.py,它继承了 YouQu3 框架的断言库:

    python
    # assert_method.py
    +import{_ as s,c as i,o as a,U as n}from"./chunks/framework.CmHn2guR.js";const y=JSON.parse('{"title":"断言语句","description":"","frontmatter":{},"headers":[],"relativePath":"指南/与生俱来/断言语句.md","filePath":"指南/与生俱来/断言语句.md","lastUpdated":1721811560000}'),h={name:"指南/与生俱来/断言语句.md"},k=n(`

    断言语句

    YouQu3 自带多种断言语句,几乎满足了所有的断言场景;

    用例中使用方法

    APP 工程自有断言模块:assert_method.py,它继承了 YouQu3 框架的断言库:

    python
    # assert_method.py
     
     from youqu3.assertx import Assert
     
    @@ -345,4 +345,4 @@ import{_ as s,c as i,o as a,U as n,a6 as h}from"./chunks/framework.DPHCW6-_.js";
                         f"通过OCR识别到不应存在的文案:{dict(res)}",
                         f"{pic if pic else setting.SCREEN_CACHE}",
                     )
    -            )
    `,12),l=[p];function t(e,E,r,F,d,g){return a(),i("div",null,l)}const o=s(k,[["render",t]]);export{C as __pageData,o as default}; + )
    `,11),p=[k];function l(t,e,E,r,F,d){return a(),i("div",null,p)}const C=s(h,[["render",l]]);export{y as __pageData,C as default}; diff --git "a/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\346\226\255\350\250\200\350\257\255\345\217\245.md.M_RN9N9Z.lean.js" "b/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\346\226\255\350\250\200\350\257\255\345\217\245.md.M_RN9N9Z.lean.js" new file mode 100644 index 0000000..48438b2 --- /dev/null +++ "b/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\346\226\255\350\250\200\350\257\255\345\217\245.md.M_RN9N9Z.lean.js" @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,U as n}from"./chunks/framework.CmHn2guR.js";const y=JSON.parse('{"title":"断言语句","description":"","frontmatter":{},"headers":[],"relativePath":"指南/与生俱来/断言语句.md","filePath":"指南/与生俱来/断言语句.md","lastUpdated":1721811560000}'),h={name:"指南/与生俱来/断言语句.md"},k=n("",11),p=[k];function l(t,e,E,r,F,d){return a(),i("div",null,p)}const C=s(h,[["render",l]]);export{y as __pageData,C as default}; diff --git "a/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\346\240\207\347\255\276\345\214\226\347\256\241\347\220\206.md.CyRzyxDN.js" "b/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\346\240\207\347\255\276\345\214\226\347\256\241\347\220\206.md.DfTspV9w.js" similarity index 98% rename from "assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\346\240\207\347\255\276\345\214\226\347\256\241\347\220\206.md.CyRzyxDN.js" rename to "assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\346\240\207\347\255\276\345\214\226\347\256\241\347\220\206.md.DfTspV9w.js" index 53b228c..c70eae8 100644 --- "a/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\346\240\207\347\255\276\345\214\226\347\256\241\347\220\206.md.CyRzyxDN.js" +++ "b/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\346\240\207\347\255\276\345\214\226\347\256\241\347\220\206.md.DfTspV9w.js" @@ -1 +1 @@ -import{_ as t,c as e,o as d,U as a}from"./chunks/framework.DPHCW6-_.js";const b=JSON.parse('{"title":"标签化管理","description":"","frontmatter":{},"headers":[],"relativePath":"指南/与生俱来/标签化管理.md","filePath":"指南/与生俱来/标签化管理.md","lastUpdated":1721730251000}'),c={name:"指南/与生俱来/标签化管理.md"},o=a('

    标签化管理

    使用说明

    在 CSV 文件中写入标签:

    脚本文件ID跳过原因确认修复废弃用例...
    001skip-xxxfixed-xxxremoved-xxx...

    CSV文件与脚本对应关系

    1. 在子项目目录下新建 CSV文件,用于保存用例标签,以 用例脚本的 py 文件去掉首字符串 "test_" ,去掉用例序号后的字符串,取中间的名称作为 csv 文件的文件名 。

    举例

    相册的用例文件为 test_album_001.py001 表示用例的ID(也可以是自定义的数字代表用例序号),此时 CSV 文件名就应为 album.csv

    1. 第 1 列脚本文件ID,从第 2 列之后的所有列都是一个用例标签,标签可以无序,可以随意新增。

    特殊标签

    跳过原因确认修复废弃用例是特殊的标签,后面会详细讲到

    对于用例规模比较大的应用,比如文件管理器,建议分模块,每个模块建立一个 CSV 文件,所有 CSV 文件建议放在一个 tags 目录下。

    是否分模块维护取决于应用的用例复杂度,但标签化管理的核心目的是集中化管理用例的标签,因此若 CSV 文件太多了也是一个很糟糕的事情。

    跳过用例

    传统跳过用例的方式是在用例脚本里面给用例添加装饰器 (@pytest.mark.skip),解除跳过时将装饰器代码删掉,这种方式需要修改用例代码,而通过 csv 文件来管理跳过用例则会方便很多;

    将跳过用例操作也整合进入用例标签,在 csv 文件中新增一列为“跳过原因”;

    1. 固定跳过

    示例:

    脚本文件ID...(各种用例标签)跳过原因
    679537...skip-受到某新需求影响
    • 如果应用受到新需求影响需要跳过,则在此列备注具体的跳过原因。跳过的原因统一标签开头为 “skip-XXX”;
    • 用例执行时判断 csv 文件里面跳过原因列是否存在跳过标签,存在跳过标签则用例也不会被执行,最终的用例状态会被标签为 SKIPED

    2. 条件判断跳过

    CSV 文件中,跳过原因一栏中填写为 “{函数名}-{参数}”。

    某些用例会因为不同的环境判断用例是否执行,常见的场景为在不同架构上判断是否执行,例如:skipif_platform-aarch64

    示例:

    脚本文件ID...(各种用例标签)跳过原因
    001...skipif_platform-aarch64&sw64
    • 跳过的原因标签为 “skipif_platform-” + 架构名,多个架构之间使用 “&” 拼接;
    • 判断当前架构是否为 arrch64 或者 sw64,若是,则跳过用例不执行;

    内置支持的条件跳过对象:

    跳过对象参数说明
    skipif_platform(x86_64aarch64loogarch64sw64)架构跳过
    skipif_not_platform(x86_64aarch64loogarch64sw64)架构不跳过
    skipif_xdg_type(waylandx11)系统显示协议跳过
    skipif_cpu_name/使用 sudo dmidecode -s system-product-name 查看机器的 cpu 型号 剔除中横线和 & 符号,
    比如:KLVV-W5821,标签记录为 KLVVW5821
    skipif_not_cpu_name/和上面逻辑相反

    3.自定义跳过

    在用例工程根目录下存放 skipif.py,自定义条件判断跳过的函数写在此文件中。

    方法编写规范:

    • 方法名必须以 skipif 开头;
    • 方法必须有返回结果并且为布尔值(True 代表跳过,False 代表不跳过);
    • 方法只能有一个入参;

    在用例收集阶段会以第一个 “-” 进行分割,截取的左侧字符串作为函数名,在 skipif.py 文件中查找是否有同名函数,并将截取的右侧作为参数传递给该函数,通过获取该函数返回的布尔值,返回 True,则用例不执行,返回 False,则执行该用例。

    重要

    • 若函数需要多个参数,可自定义多个参数之间的连接符,连接符号不可使用下划线和逗号,推荐统一使用 & 符号;

    • 若需要多个 skipif 条件判断组合,使用 && 符号将两个方法分开,比如:skipif_platform-aarch64&&skipif_xdg_type-wayland

    确认修复

    针对于某些用例修复后,但不能立即删除跳过原因(skip-XXX)的用例,新增一列标签名为 “确认修复”,作为标记该用例是否已经修复,固定填入字段为 “fixed-已修复”。这样这条用例即使同时标记了 skip-XXX 也会正常执行。

    示例:

    用例ID...(各种用例标签)跳过原因确认修复
    679537...skip-受到某新需求影响fixed-已修复

    【同时标记了skipfixed,但仍然想要跳过用例】

    当 “跳过原因” 和 “确认修复” 中同时填入后,命令行传递参数 --ifixed yes,则代码不会执行该条用例。

    bash
    python3 manage.py run --ifixed yes

    废弃用例

    针对某些用例,由于需求变更,环境影响或评估不再适用于自动化测试时,用例需要废弃,则新增一列标签名为 “废弃用例”,该列存在 “removed-{废弃原因}”,则用例不会执行。

    用例ID...(各种用例标签)跳过原因确认修复废弃用例
    679537...skip-受到某新需求影响fixed-已修复removed-已废弃

    文件格式

    此配置文件需要维护大量的标签数据,且要方便能使用 Excel 打开进行编辑查看,更重要的是我们不想引入三方依赖,CSV 文件几乎是唯一能满足所有的要求的文件格式。

    ',45),l=[o];function i(s,r,n,h,p,x){return d(),e("div",null,l)}const k=t(c,[["render",i]]);export{b as __pageData,k as default}; +import{_ as t,c as e,o as d,U as a}from"./chunks/framework.CmHn2guR.js";const b=JSON.parse('{"title":"标签化管理","description":"","frontmatter":{},"headers":[],"relativePath":"指南/与生俱来/标签化管理.md","filePath":"指南/与生俱来/标签化管理.md","lastUpdated":1721811560000}'),c={name:"指南/与生俱来/标签化管理.md"},o=a('

    标签化管理

    使用说明

    在 CSV 文件中写入标签:

    脚本文件ID跳过原因确认修复废弃用例...
    001skip-xxxfixed-xxxremoved-xxx...

    CSV文件与脚本对应关系

    1. 在子项目目录下新建 CSV文件,用于保存用例标签,以 用例脚本的 py 文件去掉首字符串 "test_" ,去掉用例序号后的字符串,取中间的名称作为 csv 文件的文件名 。

    举例

    相册的用例文件为 test_album_001.py001 表示用例的ID(也可以是自定义的数字代表用例序号),此时 CSV 文件名就应为 album.csv

    1. 第 1 列脚本文件ID,从第 2 列之后的所有列都是一个用例标签,标签可以无序,可以随意新增。

    特殊标签

    跳过原因确认修复废弃用例是特殊的标签,后面会详细讲到

    对于用例规模比较大的应用,比如文件管理器,建议分模块,每个模块建立一个 CSV 文件,所有 CSV 文件建议放在一个 tags 目录下。

    是否分模块维护取决于应用的用例复杂度,但标签化管理的核心目的是集中化管理用例的标签,因此若 CSV 文件太多了也是一个很糟糕的事情。

    跳过用例

    传统跳过用例的方式是在用例脚本里面给用例添加装饰器 (@pytest.mark.skip),解除跳过时将装饰器代码删掉,这种方式需要修改用例代码,而通过 csv 文件来管理跳过用例则会方便很多;

    将跳过用例操作也整合进入用例标签,在 csv 文件中新增一列为“跳过原因”;

    1. 固定跳过

    示例:

    脚本文件ID...(各种用例标签)跳过原因
    679537...skip-受到某新需求影响
    • 如果应用受到新需求影响需要跳过,则在此列备注具体的跳过原因。跳过的原因统一标签开头为 “skip-XXX”;
    • 用例执行时判断 csv 文件里面跳过原因列是否存在跳过标签,存在跳过标签则用例也不会被执行,最终的用例状态会被标签为 SKIPED

    2. 条件判断跳过

    CSV 文件中,跳过原因一栏中填写为 “{函数名}-{参数}”。

    某些用例会因为不同的环境判断用例是否执行,常见的场景为在不同架构上判断是否执行,例如:skipif_platform-aarch64

    示例:

    脚本文件ID...(各种用例标签)跳过原因
    001...skipif_platform-aarch64&sw64
    • 跳过的原因标签为 “skipif_platform-” + 架构名,多个架构之间使用 “&” 拼接;
    • 判断当前架构是否为 arrch64 或者 sw64,若是,则跳过用例不执行;

    内置支持的条件跳过对象:

    跳过对象参数说明
    skipif_platform(x86_64aarch64loogarch64sw64)架构跳过
    skipif_not_platform(x86_64aarch64loogarch64sw64)架构不跳过
    skipif_xdg_type(waylandx11)系统显示协议跳过
    skipif_cpu_name/使用 sudo dmidecode -s system-product-name 查看机器的 cpu 型号 剔除中横线和 & 符号,
    比如:KLVV-W5821,标签记录为 KLVVW5821
    skipif_not_cpu_name/和上面逻辑相反

    3.自定义跳过

    在用例工程根目录下存放 skipif.py,自定义条件判断跳过的函数写在此文件中。

    方法编写规范:

    • 方法名必须以 skipif 开头;
    • 方法必须有返回结果并且为布尔值(True 代表跳过,False 代表不跳过);
    • 方法只能有一个入参;

    在用例收集阶段会以第一个 “-” 进行分割,截取的左侧字符串作为函数名,在 skipif.py 文件中查找是否有同名函数,并将截取的右侧作为参数传递给该函数,通过获取该函数返回的布尔值,返回 True,则用例不执行,返回 False,则执行该用例。

    重要

    • 若函数需要多个参数,可自定义多个参数之间的连接符,连接符号不可使用下划线和逗号,推荐统一使用 & 符号;

    • 若需要多个 skipif 条件判断组合,使用 && 符号将两个方法分开,比如:skipif_platform-aarch64&&skipif_xdg_type-wayland

    确认修复

    针对于某些用例修复后,但不能立即删除跳过原因(skip-XXX)的用例,新增一列标签名为 “确认修复”,作为标记该用例是否已经修复,固定填入字段为 “fixed-已修复”。这样这条用例即使同时标记了 skip-XXX 也会正常执行。

    示例:

    用例ID...(各种用例标签)跳过原因确认修复
    679537...skip-受到某新需求影响fixed-已修复

    【同时标记了skipfixed,但仍然想要跳过用例】

    当 “跳过原因” 和 “确认修复” 中同时填入后,命令行传递参数 --ifixed yes,则代码不会执行该条用例。

    bash
    python3 manage.py run --ifixed yes

    废弃用例

    针对某些用例,由于需求变更,环境影响或评估不再适用于自动化测试时,用例需要废弃,则新增一列标签名为 “废弃用例”,该列存在 “removed-{废弃原因}”,则用例不会执行。

    用例ID...(各种用例标签)跳过原因确认修复废弃用例
    679537...skip-受到某新需求影响fixed-已修复removed-已废弃

    文件格式

    此配置文件需要维护大量的标签数据,且要方便能使用 Excel 打开进行编辑查看,更重要的是我们不想引入三方依赖,CSV 文件几乎是唯一能满足所有的要求的文件格式。

    ',45),l=[o];function i(s,r,n,h,p,x){return d(),e("div",null,l)}const k=t(c,[["render",i]]);export{b as __pageData,k as default}; diff --git "a/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\346\240\207\347\255\276\345\214\226\347\256\241\347\220\206.md.CyRzyxDN.lean.js" "b/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\346\240\207\347\255\276\345\214\226\347\256\241\347\220\206.md.DfTspV9w.lean.js" similarity index 60% rename from "assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\346\240\207\347\255\276\345\214\226\347\256\241\347\220\206.md.CyRzyxDN.lean.js" rename to "assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\346\240\207\347\255\276\345\214\226\347\256\241\347\220\206.md.DfTspV9w.lean.js" index ad5c8af..fc3c249 100644 --- "a/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\346\240\207\347\255\276\345\214\226\347\256\241\347\220\206.md.CyRzyxDN.lean.js" +++ "b/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\346\240\207\347\255\276\345\214\226\347\256\241\347\220\206.md.DfTspV9w.lean.js" @@ -1 +1 @@ -import{_ as t,c as e,o as d,U as a}from"./chunks/framework.DPHCW6-_.js";const b=JSON.parse('{"title":"标签化管理","description":"","frontmatter":{},"headers":[],"relativePath":"指南/与生俱来/标签化管理.md","filePath":"指南/与生俱来/标签化管理.md","lastUpdated":1721730251000}'),c={name:"指南/与生俱来/标签化管理.md"},o=a("",45),l=[o];function i(s,r,n,h,p,x){return d(),e("div",null,l)}const k=t(c,[["render",i]]);export{b as __pageData,k as default}; +import{_ as t,c as e,o as d,U as a}from"./chunks/framework.CmHn2guR.js";const b=JSON.parse('{"title":"标签化管理","description":"","frontmatter":{},"headers":[],"relativePath":"指南/与生俱来/标签化管理.md","filePath":"指南/与生俱来/标签化管理.md","lastUpdated":1721811560000}'),c={name:"指南/与生俱来/标签化管理.md"},o=a("",45),l=[o];function i(s,r,n,h,p,x){return d(),e("div",null,l)}const k=t(c,[["render",i]]);export{b as __pageData,k as default}; diff --git "a/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\350\204\232\346\211\213\346\236\266\345\267\245\345\205\267.md._4kYNQ0-.js" "b/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\350\204\232\346\211\213\346\236\266\345\267\245\345\205\267.md.BZG4ssK3.js" similarity index 89% rename from "assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\350\204\232\346\211\213\346\236\266\345\267\245\345\205\267.md._4kYNQ0-.js" rename to "assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\350\204\232\346\211\213\346\236\266\345\267\245\345\205\267.md.BZG4ssK3.js" index c1b81a1..349c40c 100644 --- "a/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\350\204\232\346\211\213\346\236\266\345\267\245\345\205\267.md._4kYNQ0-.js" +++ "b/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\350\204\232\346\211\213\346\236\266\345\267\245\345\205\267.md.BZG4ssK3.js" @@ -1,2 +1,2 @@ -import{_ as s,c as a,o as t,U as i,a7 as e}from"./chunks/framework.DPHCW6-_.js";const g=JSON.parse('{"title":"脚手架工具","description":"","frontmatter":{},"headers":[],"relativePath":"指南/与生俱来/脚手架工具.md","filePath":"指南/与生俱来/脚手架工具.md","lastUpdated":1721730251000}'),l={name:"指南/与生俱来/脚手架工具.md"},n=i(`

    脚手架工具

    使用子命令 init 创建用例工程,工程遵循完整的 PO 设计模式,让你可以专注于用例和方法的编写维护。

    • 创建一个目录
    bash
    mkdir my_autotest
    • 使用脚手架功能创建用例工程
    bash
    cd my_autotest/
    +import{_ as s,c as a,o as t,U as i,a6 as e}from"./chunks/framework.CmHn2guR.js";const g=JSON.parse('{"title":"脚手架工具","description":"","frontmatter":{},"headers":[],"relativePath":"指南/与生俱来/脚手架工具.md","filePath":"指南/与生俱来/脚手架工具.md","lastUpdated":1721811560000}'),l={name:"指南/与生俱来/脚手架工具.md"},n=i(`

    脚手架工具

    使用子命令 init 创建用例工程,工程遵循完整的 PO 设计模式,让你可以专注于用例和方法的编写维护。

    • 创建一个目录
    bash
    mkdir my_autotest
    • 使用脚手架功能创建用例工程
    bash
    cd my_autotest/
     youqu3 init

    ',7),p=[n];function o(h,c,d,r,_,k){return t(),a("div",null,p)}const m=s(l,[["render",o]]);export{g as __pageData,m as default}; diff --git "a/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\350\204\232\346\211\213\346\236\266\345\267\245\345\205\267.md._4kYNQ0-.lean.js" "b/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\350\204\232\346\211\213\346\236\266\345\267\245\345\205\267.md.BZG4ssK3.lean.js" similarity index 61% rename from "assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\350\204\232\346\211\213\346\236\266\345\267\245\345\205\267.md._4kYNQ0-.lean.js" rename to "assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\350\204\232\346\211\213\346\236\266\345\267\245\345\205\267.md.BZG4ssK3.lean.js" index 895cf15..c5ab70e 100644 --- "a/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\350\204\232\346\211\213\346\236\266\345\267\245\345\205\267.md._4kYNQ0-.lean.js" +++ "b/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\350\204\232\346\211\213\346\236\266\345\267\245\345\205\267.md.BZG4ssK3.lean.js" @@ -1 +1 @@ -import{_ as s,c as a,o as t,U as i,a7 as e}from"./chunks/framework.DPHCW6-_.js";const g=JSON.parse('{"title":"脚手架工具","description":"","frontmatter":{},"headers":[],"relativePath":"指南/与生俱来/脚手架工具.md","filePath":"指南/与生俱来/脚手架工具.md","lastUpdated":1721730251000}'),l={name:"指南/与生俱来/脚手架工具.md"},n=i("",7),p=[n];function o(h,c,d,r,_,k){return t(),a("div",null,p)}const m=s(l,[["render",o]]);export{g as __pageData,m as default}; +import{_ as s,c as a,o as t,U as i,a6 as e}from"./chunks/framework.CmHn2guR.js";const g=JSON.parse('{"title":"脚手架工具","description":"","frontmatter":{},"headers":[],"relativePath":"指南/与生俱来/脚手架工具.md","filePath":"指南/与生俱来/脚手架工具.md","lastUpdated":1721811560000}'),l={name:"指南/与生俱来/脚手架工具.md"},n=i("",7),p=[n];function o(h,c,d,r,_,k){return t(),a("div",null,p)}const m=s(l,[["render",o]]);export{g as __pageData,m as default}; diff --git "a/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\350\277\234\347\250\213\344\272\244\344\272\222\346\216\247\345\210\266.md.D7YR0MUZ.js" "b/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\350\277\234\347\250\213\344\272\244\344\272\222\346\216\247\345\210\266.md.5-jXcSEG.js" similarity index 97% rename from "assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\350\277\234\347\250\213\344\272\244\344\272\222\346\216\247\345\210\266.md.D7YR0MUZ.js" rename to "assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\350\277\234\347\250\213\344\272\244\344\272\222\346\216\247\345\210\266.md.5-jXcSEG.js" index 7735639..d1c558c 100644 --- "a/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\350\277\234\347\250\213\344\272\244\344\272\222\346\216\247\345\210\266.md.D7YR0MUZ.js" +++ "b/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\350\277\234\347\250\213\344\272\244\344\272\222\346\216\247\345\210\266.md.5-jXcSEG.js" @@ -1,4 +1,4 @@ -import{_ as s,c as i,o as a,U as n,a8 as p}from"./chunks/framework.DPHCW6-_.js";const y=JSON.parse('{"title":"远程交互式控制","description":"","frontmatter":{},"headers":[],"relativePath":"指南/与生俱来/远程交互控制.md","filePath":"指南/与生俱来/远程交互控制.md","lastUpdated":1721730251000}'),t={name:"指南/与生俱来/远程交互控制.md"},h=n('

    远程交互式控制

    在用例执行过程中控制远程机器执行复杂的 UI 操作或命令行操作。

    在远程测试机上部署一个完整的 YouQu3 环境以提供 UI 交互的基础能力,然后将这些基础能力通过 RPC 服务的方式提供出来,在服务端通过调用 RPC 接口从而控制远程机器执行用例步骤。

    slaves对象提供远程机器信息

    slaves 是 YouQu 提供的一个全局对象,它保存了远程测试机的信息列表;

    机器信息有 2 种方式传入:

    命令行

    bash
    youqu3 run --slaves root@192.168.1.1:password1

    多个机器信息用 / 分割:

    bash
    ... --slaves root@192.168.1.1:password1/root@192.168.1.2:password2

    UI操作远程对象

    RpcGui

    用于属性定位相关操作;

    python
    # remote_widget.py
    +import{_ as s,c as i,o as a,U as n,a7 as p}from"./chunks/framework.CmHn2guR.js";const y=JSON.parse('{"title":"远程交互式控制","description":"","frontmatter":{},"headers":[],"relativePath":"指南/与生俱来/远程交互控制.md","filePath":"指南/与生俱来/远程交互控制.md","lastUpdated":1721811560000}'),t={name:"指南/与生俱来/远程交互控制.md"},h=n('

    远程交互式控制

    在用例执行过程中控制远程机器执行复杂的 UI 操作或命令行操作。

    在远程测试机上部署一个完整的 YouQu3 环境以提供 UI 交互的基础能力,然后将这些基础能力通过 RPC 服务的方式提供出来,在服务端通过调用 RPC 接口从而控制远程机器执行用例步骤。

    slaves对象提供远程机器信息

    slaves 是 YouQu 提供的一个全局对象,它保存了远程测试机的信息列表;

    机器信息有 2 种方式传入:

    命令行

    bash
    youqu3 run --slaves root@192.168.1.1:password1

    多个机器信息用 / 分割:

    bash
    ... --slaves root@192.168.1.1:password1/root@192.168.1.2:password2

    UI操作远程对象

    RpcGui

    用于属性定位相关操作;

    python
    # remote_widget.py
     
     from youqu3.gui import RpcGui
     
    diff --git "a/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\350\277\234\347\250\213\344\272\244\344\272\222\346\216\247\345\210\266.md.D7YR0MUZ.lean.js" "b/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\350\277\234\347\250\213\344\272\244\344\272\222\346\216\247\345\210\266.md.5-jXcSEG.lean.js"
    similarity index 62%
    rename from "assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\350\277\234\347\250\213\344\272\244\344\272\222\346\216\247\345\210\266.md.D7YR0MUZ.lean.js"
    rename to "assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\350\277\234\347\250\213\344\272\244\344\272\222\346\216\247\345\210\266.md.5-jXcSEG.lean.js"
    index b724088..265dc89 100644
    --- "a/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\350\277\234\347\250\213\344\272\244\344\272\222\346\216\247\345\210\266.md.D7YR0MUZ.lean.js"
    +++ "b/assets/\346\214\207\345\215\227_\344\270\216\347\224\237\344\277\261\346\235\245_\350\277\234\347\250\213\344\272\244\344\272\222\346\216\247\345\210\266.md.5-jXcSEG.lean.js"
    @@ -1 +1 @@
    -import{_ as s,c as i,o as a,U as n,a8 as p}from"./chunks/framework.DPHCW6-_.js";const y=JSON.parse('{"title":"远程交互式控制","description":"","frontmatter":{},"headers":[],"relativePath":"指南/与生俱来/远程交互控制.md","filePath":"指南/与生俱来/远程交互控制.md","lastUpdated":1721730251000}'),t={name:"指南/与生俱来/远程交互控制.md"},h=n("",15),l=[h];function e(k,r,d,o,E,g){return a(),i("div",null,l)}const F=s(t,[["render",e]]);export{y as __pageData,F as default};
    +import{_ as s,c as i,o as a,U as n,a7 as p}from"./chunks/framework.CmHn2guR.js";const y=JSON.parse('{"title":"远程交互式控制","description":"","frontmatter":{},"headers":[],"relativePath":"指南/与生俱来/远程交互控制.md","filePath":"指南/与生俱来/远程交互控制.md","lastUpdated":1721811560000}'),t={name:"指南/与生俱来/远程交互控制.md"},h=n("",15),l=[h];function e(k,r,d,o,E,g){return a(),i("div",null,l)}const F=s(t,[["render",e]]);export{y as __pageData,F as default};
    diff --git "a/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_DBus\350\207\252\345\212\250\345\214\226.md.CRFVKGj2.js" "b/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_DBus\350\207\252\345\212\250\345\214\226.md.COtv3Lzz.js"
    similarity index 70%
    rename from "assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_DBus\350\207\252\345\212\250\345\214\226.md.CRFVKGj2.js"
    rename to "assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_DBus\350\207\252\345\212\250\345\214\226.md.COtv3Lzz.js"
    index 4b2190b..1d29aae 100644
    --- "a/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_DBus\350\207\252\345\212\250\345\214\226.md.CRFVKGj2.js"
    +++ "b/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_DBus\350\207\252\345\212\250\345\214\226.md.COtv3Lzz.js"
    @@ -1 +1 @@
    -import{_ as e,c as t,o as a}from"./chunks/framework.DPHCW6-_.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"指南/可选功能/DBus自动化.md","filePath":"指南/可选功能/DBus自动化.md","lastUpdated":1721730251000}'),s={name:"指南/可选功能/DBus自动化.md"};function r(o,c,n,_,d,p){return a(),t("div")}const f=e(s,[["render",r]]);export{m as __pageData,f as default};
    +import{_ as e,c as t,o as a}from"./chunks/framework.CmHn2guR.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"指南/可选功能/DBus自动化.md","filePath":"指南/可选功能/DBus自动化.md","lastUpdated":1721811560000}'),s={name:"指南/可选功能/DBus自动化.md"};function r(o,c,n,_,d,p){return a(),t("div")}const f=e(s,[["render",r]]);export{m as __pageData,f as default};
    diff --git "a/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_DBus\350\207\252\345\212\250\345\214\226.md.CRFVKGj2.lean.js" "b/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_DBus\350\207\252\345\212\250\345\214\226.md.COtv3Lzz.lean.js"
    similarity index 70%
    rename from "assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_DBus\350\207\252\345\212\250\345\214\226.md.CRFVKGj2.lean.js"
    rename to "assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_DBus\350\207\252\345\212\250\345\214\226.md.COtv3Lzz.lean.js"
    index 4b2190b..1d29aae 100644
    --- "a/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_DBus\350\207\252\345\212\250\345\214\226.md.CRFVKGj2.lean.js"
    +++ "b/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_DBus\350\207\252\345\212\250\345\214\226.md.COtv3Lzz.lean.js"
    @@ -1 +1 @@
    -import{_ as e,c as t,o as a}from"./chunks/framework.DPHCW6-_.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"指南/可选功能/DBus自动化.md","filePath":"指南/可选功能/DBus自动化.md","lastUpdated":1721730251000}'),s={name:"指南/可选功能/DBus自动化.md"};function r(o,c,n,_,d,p){return a(),t("div")}const f=e(s,[["render",r]]);export{m as __pageData,f as default};
    +import{_ as e,c as t,o as a}from"./chunks/framework.CmHn2guR.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"指南/可选功能/DBus自动化.md","filePath":"指南/可选功能/DBus自动化.md","lastUpdated":1721811560000}'),s={name:"指南/可选功能/DBus自动化.md"};function r(o,c,n,_,d,p){return a(),t("div")}const f=e(s,[["render",r]]);export{m as __pageData,f as default};
    diff --git "a/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_GUI\350\207\252\345\212\250\345\214\226.md.BJX_VFMT.js" "b/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_GUI\350\207\252\345\212\250\345\214\226.md.DBW6nEBC.js"
    similarity index 70%
    rename from "assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_GUI\350\207\252\345\212\250\345\214\226.md.BJX_VFMT.js"
    rename to "assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_GUI\350\207\252\345\212\250\345\214\226.md.DBW6nEBC.js"
    index 84d15c3..44298a6 100644
    --- "a/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_GUI\350\207\252\345\212\250\345\214\226.md.BJX_VFMT.js"
    +++ "b/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_GUI\350\207\252\345\212\250\345\214\226.md.DBW6nEBC.js"
    @@ -1 +1 @@
    -import{_ as e,c as t,o as a}from"./chunks/framework.DPHCW6-_.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"指南/可选功能/GUI自动化.md","filePath":"指南/可选功能/GUI自动化.md","lastUpdated":1721730251000}'),r={name:"指南/可选功能/GUI自动化.md"};function o(s,c,n,_,d,p){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default};
    +import{_ as e,c as t,o as a}from"./chunks/framework.CmHn2guR.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"指南/可选功能/GUI自动化.md","filePath":"指南/可选功能/GUI自动化.md","lastUpdated":1721811560000}'),r={name:"指南/可选功能/GUI自动化.md"};function o(s,c,n,_,d,p){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default};
    diff --git "a/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_GUI\350\207\252\345\212\250\345\214\226.md.BJX_VFMT.lean.js" "b/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_GUI\350\207\252\345\212\250\345\214\226.md.DBW6nEBC.lean.js"
    similarity index 70%
    rename from "assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_GUI\350\207\252\345\212\250\345\214\226.md.BJX_VFMT.lean.js"
    rename to "assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_GUI\350\207\252\345\212\250\345\214\226.md.DBW6nEBC.lean.js"
    index 84d15c3..44298a6 100644
    --- "a/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_GUI\350\207\252\345\212\250\345\214\226.md.BJX_VFMT.lean.js"
    +++ "b/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_GUI\350\207\252\345\212\250\345\214\226.md.DBW6nEBC.lean.js"
    @@ -1 +1 @@
    -import{_ as e,c as t,o as a}from"./chunks/framework.DPHCW6-_.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"指南/可选功能/GUI自动化.md","filePath":"指南/可选功能/GUI自动化.md","lastUpdated":1721730251000}'),r={name:"指南/可选功能/GUI自动化.md"};function o(s,c,n,_,d,p){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default};
    +import{_ as e,c as t,o as a}from"./chunks/framework.CmHn2guR.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"指南/可选功能/GUI自动化.md","filePath":"指南/可选功能/GUI自动化.md","lastUpdated":1721811560000}'),r={name:"指南/可选功能/GUI自动化.md"};function o(s,c,n,_,d,p){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default};
    diff --git "a/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_HTML\346\212\245\345\221\212.md.DCluV8mQ.js" "b/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_HTML\346\212\245\345\221\212.md.C-BYLq8N.js"
    similarity index 70%
    rename from "assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_HTML\346\212\245\345\221\212.md.DCluV8mQ.js"
    rename to "assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_HTML\346\212\245\345\221\212.md.C-BYLq8N.js"
    index 431fc80..e041b28 100644
    --- "a/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_HTML\346\212\245\345\221\212.md.DCluV8mQ.js"
    +++ "b/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_HTML\346\212\245\345\221\212.md.C-BYLq8N.js"
    @@ -1 +1 @@
    -import{_ as e,c as t,o as a}from"./chunks/framework.DPHCW6-_.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"指南/可选功能/HTML报告.md","filePath":"指南/可选功能/HTML报告.md","lastUpdated":1721730251000}'),r={name:"指南/可选功能/HTML报告.md"};function o(s,c,n,_,d,p){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default};
    +import{_ as e,c as t,o as a}from"./chunks/framework.CmHn2guR.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"指南/可选功能/HTML报告.md","filePath":"指南/可选功能/HTML报告.md","lastUpdated":1721811560000}'),r={name:"指南/可选功能/HTML报告.md"};function o(s,c,n,_,d,p){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default};
    diff --git "a/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_HTML\346\212\245\345\221\212.md.DCluV8mQ.lean.js" "b/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_HTML\346\212\245\345\221\212.md.C-BYLq8N.lean.js"
    similarity index 70%
    rename from "assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_HTML\346\212\245\345\221\212.md.DCluV8mQ.lean.js"
    rename to "assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_HTML\346\212\245\345\221\212.md.C-BYLq8N.lean.js"
    index 431fc80..e041b28 100644
    --- "a/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_HTML\346\212\245\345\221\212.md.DCluV8mQ.lean.js"
    +++ "b/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_HTML\346\212\245\345\221\212.md.C-BYLq8N.lean.js"
    @@ -1 +1 @@
    -import{_ as e,c as t,o as a}from"./chunks/framework.DPHCW6-_.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"指南/可选功能/HTML报告.md","filePath":"指南/可选功能/HTML报告.md","lastUpdated":1721730251000}'),r={name:"指南/可选功能/HTML报告.md"};function o(s,c,n,_,d,p){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default};
    +import{_ as e,c as t,o as a}from"./chunks/framework.CmHn2guR.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"指南/可选功能/HTML报告.md","filePath":"指南/可选功能/HTML报告.md","lastUpdated":1721811560000}'),r={name:"指南/可选功能/HTML报告.md"};function o(s,c,n,_,d,p){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default};
    diff --git "a/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_HTTP\350\207\252\345\212\250\345\214\226.md.DhSj0Su1.js" "b/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_HTTP\350\207\252\345\212\250\345\214\226.md.kixoRIxQ.js"
    similarity index 70%
    rename from "assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_HTTP\350\207\252\345\212\250\345\214\226.md.DhSj0Su1.js"
    rename to "assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_HTTP\350\207\252\345\212\250\345\214\226.md.kixoRIxQ.js"
    index 5fd2e86..1f0be68 100644
    --- "a/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_HTTP\350\207\252\345\212\250\345\214\226.md.DhSj0Su1.js"
    +++ "b/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_HTTP\350\207\252\345\212\250\345\214\226.md.kixoRIxQ.js"
    @@ -1 +1 @@
    -import{_ as e,c as t,o as a}from"./chunks/framework.DPHCW6-_.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"指南/可选功能/HTTP自动化.md","filePath":"指南/可选功能/HTTP自动化.md","lastUpdated":1721730251000}'),r={name:"指南/可选功能/HTTP自动化.md"};function o(s,c,n,_,d,p){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default};
    +import{_ as e,c as t,o as a}from"./chunks/framework.CmHn2guR.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"指南/可选功能/HTTP自动化.md","filePath":"指南/可选功能/HTTP自动化.md","lastUpdated":1721811560000}'),r={name:"指南/可选功能/HTTP自动化.md"};function o(s,c,n,_,d,p){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default};
    diff --git "a/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_HTTP\350\207\252\345\212\250\345\214\226.md.DhSj0Su1.lean.js" "b/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_HTTP\350\207\252\345\212\250\345\214\226.md.kixoRIxQ.lean.js"
    similarity index 70%
    rename from "assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_HTTP\350\207\252\345\212\250\345\214\226.md.DhSj0Su1.lean.js"
    rename to "assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_HTTP\350\207\252\345\212\250\345\214\226.md.kixoRIxQ.lean.js"
    index 5fd2e86..1f0be68 100644
    --- "a/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_HTTP\350\207\252\345\212\250\345\214\226.md.DhSj0Su1.lean.js"
    +++ "b/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_HTTP\350\207\252\345\212\250\345\214\226.md.kixoRIxQ.lean.js"
    @@ -1 +1 @@
    -import{_ as e,c as t,o as a}from"./chunks/framework.DPHCW6-_.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"指南/可选功能/HTTP自动化.md","filePath":"指南/可选功能/HTTP自动化.md","lastUpdated":1721730251000}'),r={name:"指南/可选功能/HTTP自动化.md"};function o(s,c,n,_,d,p){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default};
    +import{_ as e,c as t,o as a}from"./chunks/framework.CmHn2guR.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"指南/可选功能/HTTP自动化.md","filePath":"指南/可选功能/HTTP自动化.md","lastUpdated":1721811560000}'),r={name:"指南/可选功能/HTTP自动化.md"};function o(s,c,n,_,d,p){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default};
    diff --git "a/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_WebUI\350\207\252\345\212\250\345\214\226.md.CEDG81rR.js" "b/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_WebUI\350\207\252\345\212\250\345\214\226.md.DIXaDEw6.js"
    similarity index 70%
    rename from "assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_WebUI\350\207\252\345\212\250\345\214\226.md.CEDG81rR.js"
    rename to "assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_WebUI\350\207\252\345\212\250\345\214\226.md.DIXaDEw6.js"
    index 366ea3c..0964da6 100644
    --- "a/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_WebUI\350\207\252\345\212\250\345\214\226.md.CEDG81rR.js"
    +++ "b/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_WebUI\350\207\252\345\212\250\345\214\226.md.DIXaDEw6.js"
    @@ -1 +1 @@
    -import{_ as e,c as t,o as a}from"./chunks/framework.DPHCW6-_.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"指南/可选功能/WebUI自动化.md","filePath":"指南/可选功能/WebUI自动化.md","lastUpdated":1721730251000}'),r={name:"指南/可选功能/WebUI自动化.md"};function o(s,c,n,_,d,p){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default};
    +import{_ as e,c as t,o as a}from"./chunks/framework.CmHn2guR.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"指南/可选功能/WebUI自动化.md","filePath":"指南/可选功能/WebUI自动化.md","lastUpdated":1721811560000}'),r={name:"指南/可选功能/WebUI自动化.md"};function o(s,c,n,_,d,p){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default};
    diff --git "a/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_WebUI\350\207\252\345\212\250\345\214\226.md.CEDG81rR.lean.js" "b/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_WebUI\350\207\252\345\212\250\345\214\226.md.DIXaDEw6.lean.js"
    similarity index 70%
    rename from "assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_WebUI\350\207\252\345\212\250\345\214\226.md.CEDG81rR.lean.js"
    rename to "assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_WebUI\350\207\252\345\212\250\345\214\226.md.DIXaDEw6.lean.js"
    index 366ea3c..0964da6 100644
    --- "a/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_WebUI\350\207\252\345\212\250\345\214\226.md.CEDG81rR.lean.js"
    +++ "b/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_WebUI\350\207\252\345\212\250\345\214\226.md.DIXaDEw6.lean.js"
    @@ -1 +1 @@
    -import{_ as e,c as t,o as a}from"./chunks/framework.DPHCW6-_.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"指南/可选功能/WebUI自动化.md","filePath":"指南/可选功能/WebUI自动化.md","lastUpdated":1721730251000}'),r={name:"指南/可选功能/WebUI自动化.md"};function o(s,c,n,_,d,p){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default};
    +import{_ as e,c as t,o as a}from"./chunks/framework.CmHn2guR.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"指南/可选功能/WebUI自动化.md","filePath":"指南/可选功能/WebUI自动化.md","lastUpdated":1721811560000}'),r={name:"指南/可选功能/WebUI自动化.md"};function o(s,c,n,_,d,p){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default};
    diff --git "a/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_\345\205\266\344\273\226\346\217\222\344\273\266.md.CXR53JYW.js" "b/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_\345\205\266\344\273\226\346\217\222\344\273\266.md.D-HEH_ED.js"
    similarity index 70%
    rename from "assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_\345\205\266\344\273\226\346\217\222\344\273\266.md.CXR53JYW.js"
    rename to "assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_\345\205\266\344\273\226\346\217\222\344\273\266.md.D-HEH_ED.js"
    index 9268e60..d8bd677 100644
    --- "a/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_\345\205\266\344\273\226\346\217\222\344\273\266.md.CXR53JYW.js"
    +++ "b/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_\345\205\266\344\273\226\346\217\222\344\273\266.md.D-HEH_ED.js"
    @@ -1 +1 @@
    -import{_ as e,c as t,o as a}from"./chunks/framework.DPHCW6-_.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"指南/可选功能/其他插件.md","filePath":"指南/可选功能/其他插件.md","lastUpdated":1721730251000}'),r={name:"指南/可选功能/其他插件.md"};function o(s,c,n,_,d,p){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default};
    +import{_ as e,c as t,o as a}from"./chunks/framework.CmHn2guR.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"指南/可选功能/其他插件.md","filePath":"指南/可选功能/其他插件.md","lastUpdated":1721811560000}'),r={name:"指南/可选功能/其他插件.md"};function o(s,c,n,_,d,p){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default};
    diff --git "a/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_\345\205\266\344\273\226\346\217\222\344\273\266.md.CXR53JYW.lean.js" "b/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_\345\205\266\344\273\226\346\217\222\344\273\266.md.D-HEH_ED.lean.js"
    similarity index 70%
    rename from "assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_\345\205\266\344\273\226\346\217\222\344\273\266.md.CXR53JYW.lean.js"
    rename to "assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_\345\205\266\344\273\226\346\217\222\344\273\266.md.D-HEH_ED.lean.js"
    index 9268e60..d8bd677 100644
    --- "a/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_\345\205\266\344\273\226\346\217\222\344\273\266.md.CXR53JYW.lean.js"
    +++ "b/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_\345\205\266\344\273\226\346\217\222\344\273\266.md.D-HEH_ED.lean.js"
    @@ -1 +1 @@
    -import{_ as e,c as t,o as a}from"./chunks/framework.DPHCW6-_.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"指南/可选功能/其他插件.md","filePath":"指南/可选功能/其他插件.md","lastUpdated":1721730251000}'),r={name:"指南/可选功能/其他插件.md"};function o(s,c,n,_,d,p){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default};
    +import{_ as e,c as t,o as a}from"./chunks/framework.CmHn2guR.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"指南/可选功能/其他插件.md","filePath":"指南/可选功能/其他插件.md","lastUpdated":1721811560000}'),r={name:"指南/可选功能/其他插件.md"};function o(s,c,n,_,d,p){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default};
    diff --git "a/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_\347\224\250\344\276\213\345\275\225\345\261\217.md.DtHUI1fi.js" "b/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_\347\224\250\344\276\213\345\275\225\345\261\217.md.h64VCE8l.js"
    similarity index 70%
    rename from "assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_\347\224\250\344\276\213\345\275\225\345\261\217.md.DtHUI1fi.js"
    rename to "assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_\347\224\250\344\276\213\345\275\225\345\261\217.md.h64VCE8l.js"
    index bc6dccb..768380c 100644
    --- "a/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_\347\224\250\344\276\213\345\275\225\345\261\217.md.DtHUI1fi.js"
    +++ "b/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_\347\224\250\344\276\213\345\275\225\345\261\217.md.h64VCE8l.js"
    @@ -1 +1 @@
    -import{_ as e,c as t,o as a}from"./chunks/framework.DPHCW6-_.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"指南/可选功能/用例录屏.md","filePath":"指南/可选功能/用例录屏.md","lastUpdated":1721730251000}'),r={name:"指南/可选功能/用例录屏.md"};function o(s,c,n,_,d,p){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default};
    +import{_ as e,c as t,o as a}from"./chunks/framework.CmHn2guR.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"指南/可选功能/用例录屏.md","filePath":"指南/可选功能/用例录屏.md","lastUpdated":1721811560000}'),r={name:"指南/可选功能/用例录屏.md"};function o(s,c,n,_,d,p){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default};
    diff --git "a/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_\347\224\250\344\276\213\345\275\225\345\261\217.md.DtHUI1fi.lean.js" "b/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_\347\224\250\344\276\213\345\275\225\345\261\217.md.h64VCE8l.lean.js"
    similarity index 70%
    rename from "assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_\347\224\250\344\276\213\345\275\225\345\261\217.md.DtHUI1fi.lean.js"
    rename to "assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_\347\224\250\344\276\213\345\275\225\345\261\217.md.h64VCE8l.lean.js"
    index bc6dccb..768380c 100644
    --- "a/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_\347\224\250\344\276\213\345\275\225\345\261\217.md.DtHUI1fi.lean.js"
    +++ "b/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_\347\224\250\344\276\213\345\275\225\345\261\217.md.h64VCE8l.lean.js"
    @@ -1 +1 @@
    -import{_ as e,c as t,o as a}from"./chunks/framework.DPHCW6-_.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"指南/可选功能/用例录屏.md","filePath":"指南/可选功能/用例录屏.md","lastUpdated":1721730251000}'),r={name:"指南/可选功能/用例录屏.md"};function o(s,c,n,_,d,p){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default};
    +import{_ as e,c as t,o as a}from"./chunks/framework.CmHn2guR.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"指南/可选功能/用例录屏.md","filePath":"指南/可选功能/用例录屏.md","lastUpdated":1721811560000}'),r={name:"指南/可选功能/用例录屏.md"};function o(s,c,n,_,d,p){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default};
    diff --git "a/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_\350\277\234\347\250\213\344\272\244\344\272\222\346\216\247\345\210\266.md.CrJSz2qT.js" "b/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_\350\277\234\347\250\213\344\272\244\344\272\222\346\216\247\345\210\266.md.HZsgiASX.js"
    similarity index 71%
    rename from "assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_\350\277\234\347\250\213\344\272\244\344\272\222\346\216\247\345\210\266.md.CrJSz2qT.js"
    rename to "assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_\350\277\234\347\250\213\344\272\244\344\272\222\346\216\247\345\210\266.md.HZsgiASX.js"
    index cbf79d8..52daee4 100644
    --- "a/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_\350\277\234\347\250\213\344\272\244\344\272\222\346\216\247\345\210\266.md.CrJSz2qT.js"
    +++ "b/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_\350\277\234\347\250\213\344\272\244\344\272\222\346\216\247\345\210\266.md.HZsgiASX.js"
    @@ -1 +1 @@
    -import{_ as e,c as t,o as a}from"./chunks/framework.DPHCW6-_.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"指南/可选功能/远程交互控制.md","filePath":"指南/可选功能/远程交互控制.md","lastUpdated":1721730251000}'),r={name:"指南/可选功能/远程交互控制.md"};function o(s,_,c,n,d,p){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default};
    +import{_ as e,c as t,o as a}from"./chunks/framework.CmHn2guR.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"指南/可选功能/远程交互控制.md","filePath":"指南/可选功能/远程交互控制.md","lastUpdated":1721811560000}'),r={name:"指南/可选功能/远程交互控制.md"};function o(s,_,c,n,d,p){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default};
    diff --git "a/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_\350\277\234\347\250\213\344\272\244\344\272\222\346\216\247\345\210\266.md.CrJSz2qT.lean.js" "b/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_\350\277\234\347\250\213\344\272\244\344\272\222\346\216\247\345\210\266.md.HZsgiASX.lean.js"
    similarity index 71%
    rename from "assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_\350\277\234\347\250\213\344\272\244\344\272\222\346\216\247\345\210\266.md.CrJSz2qT.lean.js"
    rename to "assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_\350\277\234\347\250\213\344\272\244\344\272\222\346\216\247\345\210\266.md.HZsgiASX.lean.js"
    index cbf79d8..52daee4 100644
    --- "a/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_\350\277\234\347\250\213\344\272\244\344\272\222\346\216\247\345\210\266.md.CrJSz2qT.lean.js"
    +++ "b/assets/\346\214\207\345\215\227_\345\217\257\351\200\211\345\212\237\350\203\275_\350\277\234\347\250\213\344\272\244\344\272\222\346\216\247\345\210\266.md.HZsgiASX.lean.js"
    @@ -1 +1 @@
    -import{_ as e,c as t,o as a}from"./chunks/framework.DPHCW6-_.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"指南/可选功能/远程交互控制.md","filePath":"指南/可选功能/远程交互控制.md","lastUpdated":1721730251000}'),r={name:"指南/可选功能/远程交互控制.md"};function o(s,_,c,n,d,p){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default};
    +import{_ as e,c as t,o as a}from"./chunks/framework.CmHn2guR.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"指南/可选功能/远程交互控制.md","filePath":"指南/可选功能/远程交互控制.md","lastUpdated":1721811560000}'),r={name:"指南/可选功能/远程交互控制.md"};function o(s,_,c,n,d,p){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default};
    diff --git "a/assets/\346\214\207\345\215\227_\347\216\257\345\242\203\347\256\241\347\220\206_\345\216\237\347\224\237\347\216\257\345\242\203.md.BEjyPvIO.js" "b/assets/\346\214\207\345\215\227_\347\216\257\345\242\203\347\256\241\347\220\206_\345\216\237\347\224\237\347\216\257\345\242\203.md.DOl6di5z.js"
    similarity index 87%
    rename from "assets/\346\214\207\345\215\227_\347\216\257\345\242\203\347\256\241\347\220\206_\345\216\237\347\224\237\347\216\257\345\242\203.md.BEjyPvIO.js"
    rename to "assets/\346\214\207\345\215\227_\347\216\257\345\242\203\347\256\241\347\220\206_\345\216\237\347\224\237\347\216\257\345\242\203.md.DOl6di5z.js"
    index 5d9adc1..db4e1ac 100644
    --- "a/assets/\346\214\207\345\215\227_\347\216\257\345\242\203\347\256\241\347\220\206_\345\216\237\347\224\237\347\216\257\345\242\203.md.BEjyPvIO.js"
    +++ "b/assets/\346\214\207\345\215\227_\347\216\257\345\242\203\347\256\241\347\220\206_\345\216\237\347\224\237\347\216\257\345\242\203.md.DOl6di5z.js"
    @@ -1 +1 @@
    -import{_ as s,c as a,o as e,U as t}from"./chunks/framework.DPHCW6-_.js";const k=JSON.parse('{"title":"原生环境","description":"","frontmatter":{},"headers":[],"relativePath":"指南/环境管理/原生环境.md","filePath":"指南/环境管理/原生环境.md","lastUpdated":1721730251000}'),i={name:"指南/环境管理/原生环境.md"},n=t('

    原生环境

    当系统中安装了 YouQu3 之后,会自动生成一个命令:youqu3

    bash
    youqu3 -h

    你可以使用它进行用例的驱动执行和管理。

    比如:

    bash
    youqu3 run
    ',6),o=[n];function p(h,l,c,d,r,_){return e(),a("div",null,o)}const g=s(i,[["render",p]]);export{k as __pageData,g as default}; +import{_ as s,c as a,o as e,U as t}from"./chunks/framework.CmHn2guR.js";const k=JSON.parse('{"title":"原生环境","description":"","frontmatter":{},"headers":[],"relativePath":"指南/环境管理/原生环境.md","filePath":"指南/环境管理/原生环境.md","lastUpdated":1721811560000}'),i={name:"指南/环境管理/原生环境.md"},n=t('

    原生环境

    当系统中安装了 YouQu3 之后,会自动生成一个命令:youqu3

    bash
    youqu3 -h

    你可以使用它进行用例的驱动执行和管理。

    比如:

    bash
    youqu3 run
    ',6),o=[n];function p(h,l,c,d,r,_){return e(),a("div",null,o)}const g=s(i,[["render",p]]);export{k as __pageData,g as default}; diff --git "a/assets/\346\214\207\345\215\227_\347\216\257\345\242\203\347\256\241\347\220\206_\345\216\237\347\224\237\347\216\257\345\242\203.md.BEjyPvIO.lean.js" "b/assets/\346\214\207\345\215\227_\347\216\257\345\242\203\347\256\241\347\220\206_\345\216\237\347\224\237\347\216\257\345\242\203.md.DOl6di5z.lean.js" similarity index 59% rename from "assets/\346\214\207\345\215\227_\347\216\257\345\242\203\347\256\241\347\220\206_\345\216\237\347\224\237\347\216\257\345\242\203.md.BEjyPvIO.lean.js" rename to "assets/\346\214\207\345\215\227_\347\216\257\345\242\203\347\256\241\347\220\206_\345\216\237\347\224\237\347\216\257\345\242\203.md.DOl6di5z.lean.js" index 8d40dbc..0c0f1a8 100644 --- "a/assets/\346\214\207\345\215\227_\347\216\257\345\242\203\347\256\241\347\220\206_\345\216\237\347\224\237\347\216\257\345\242\203.md.BEjyPvIO.lean.js" +++ "b/assets/\346\214\207\345\215\227_\347\216\257\345\242\203\347\256\241\347\220\206_\345\216\237\347\224\237\347\216\257\345\242\203.md.DOl6di5z.lean.js" @@ -1 +1 @@ -import{_ as s,c as a,o as e,U as t}from"./chunks/framework.DPHCW6-_.js";const k=JSON.parse('{"title":"原生环境","description":"","frontmatter":{},"headers":[],"relativePath":"指南/环境管理/原生环境.md","filePath":"指南/环境管理/原生环境.md","lastUpdated":1721730251000}'),i={name:"指南/环境管理/原生环境.md"},n=t("",6),o=[n];function p(h,l,c,d,r,_){return e(),a("div",null,o)}const g=s(i,[["render",p]]);export{k as __pageData,g as default}; +import{_ as s,c as a,o as e,U as t}from"./chunks/framework.CmHn2guR.js";const k=JSON.parse('{"title":"原生环境","description":"","frontmatter":{},"headers":[],"relativePath":"指南/环境管理/原生环境.md","filePath":"指南/环境管理/原生环境.md","lastUpdated":1721811560000}'),i={name:"指南/环境管理/原生环境.md"},n=t("",6),o=[n];function p(h,l,c,d,r,_){return e(),a("div",null,o)}const g=s(i,[["render",p]]);export{k as __pageData,g as default}; diff --git "a/assets/\346\214\207\345\215\227_\347\216\257\345\242\203\347\256\241\347\220\206_\350\231\232\346\213\237\347\216\257\345\242\203.md.gwNWe-UA.js" "b/assets/\346\214\207\345\215\227_\347\216\257\345\242\203\347\256\241\347\220\206_\350\231\232\346\213\237\347\216\257\345\242\203.md.D91OI9qi.js" similarity index 94% rename from "assets/\346\214\207\345\215\227_\347\216\257\345\242\203\347\256\241\347\220\206_\350\231\232\346\213\237\347\216\257\345\242\203.md.gwNWe-UA.js" rename to "assets/\346\214\207\345\215\227_\347\216\257\345\242\203\347\256\241\347\220\206_\350\231\232\346\213\237\347\216\257\345\242\203.md.D91OI9qi.js" index 6da85af..2a0da0d 100644 --- "a/assets/\346\214\207\345\215\227_\347\216\257\345\242\203\347\256\241\347\220\206_\350\231\232\346\213\237\347\216\257\345\242\203.md.gwNWe-UA.js" +++ "b/assets/\346\214\207\345\215\227_\347\216\257\345\242\203\347\256\241\347\220\206_\350\231\232\346\213\237\347\216\257\345\242\203.md.D91OI9qi.js" @@ -1,2 +1,2 @@ -import{_ as a,c as s,o as e,U as t}from"./chunks/framework.DPHCW6-_.js";const y=JSON.parse('{"title":"虚拟环境","description":"","frontmatter":{},"headers":[],"relativePath":"指南/环境管理/虚拟环境.md","filePath":"指南/环境管理/虚拟环境.md","lastUpdated":1721730251000}'),o={name:"指南/环境管理/虚拟环境.md"},i=t(`

    虚拟环境

    当系统中安装了 YouQu3 之后,会自动生成一个命令:youqu3

    这个命令可以在系统原生环境中使用,它除了可以驱动用例执行,还可以进行环境的管理:

    bash
    youqu3 envx

    子命令 envx 用于虚拟环境安装,执行之后会自动创建一些有用的命令:

    命令说明
    youqu3-cargo用例执行驱动的命令
    youqu3-shell激活虚拟环境
    youqu3-rm删除虚拟环境

    youqu3-cargo

    youqu3-cargo 可以自动加载虚拟环境并驱动用例工程:

    bash
    youqu3-cargo run

    youqu3-shell

    youqu3-shell 可以激活虚拟环境,由于虚拟环境中也安装了 YouQu3 ,因此你仍然可以在虚拟环境中使用命令:youqu3

    bash
    $ youqu3-shell
    +import{_ as a,c as s,o as e,U as t}from"./chunks/framework.CmHn2guR.js";const y=JSON.parse('{"title":"虚拟环境","description":"","frontmatter":{},"headers":[],"relativePath":"指南/环境管理/虚拟环境.md","filePath":"指南/环境管理/虚拟环境.md","lastUpdated":1721811560000}'),o={name:"指南/环境管理/虚拟环境.md"},i=t(`

    虚拟环境

    当系统中安装了 YouQu3 之后,会自动生成一个命令:youqu3

    这个命令可以在系统原生环境中使用,它除了可以驱动用例执行,还可以进行环境的管理:

    bash
    youqu3 envx

    子命令 envx 用于虚拟环境安装,执行之后会自动创建一些有用的命令:

    命令说明
    youqu3-cargo用例执行驱动的命令
    youqu3-shell激活虚拟环境
    youqu3-rm删除虚拟环境

    youqu3-cargo

    youqu3-cargo 可以自动加载虚拟环境并驱动用例工程:

    bash
    youqu3-cargo run

    youqu3-shell

    youqu3-shell 可以激活虚拟环境,由于虚拟环境中也安装了 YouQu3 ,因此你仍然可以在虚拟环境中使用命令:youqu3

    bash
    $ youqu3-shell
     (my_virtualenv)$ youqu3 run

    youqu3-rm

    youqu3-rm 命令可以将当前的虚拟环境删除。

    `,14),d=[i];function h(l,n,u,r,c,p){return e(),s("div",null,d)}const g=a(o,[["render",h]]);export{y as __pageData,g as default}; diff --git "a/assets/\346\214\207\345\215\227_\347\216\257\345\242\203\347\256\241\347\220\206_\350\231\232\346\213\237\347\216\257\345\242\203.md.gwNWe-UA.lean.js" "b/assets/\346\214\207\345\215\227_\347\216\257\345\242\203\347\256\241\347\220\206_\350\231\232\346\213\237\347\216\257\345\242\203.md.D91OI9qi.lean.js" similarity index 59% rename from "assets/\346\214\207\345\215\227_\347\216\257\345\242\203\347\256\241\347\220\206_\350\231\232\346\213\237\347\216\257\345\242\203.md.gwNWe-UA.lean.js" rename to "assets/\346\214\207\345\215\227_\347\216\257\345\242\203\347\256\241\347\220\206_\350\231\232\346\213\237\347\216\257\345\242\203.md.D91OI9qi.lean.js" index add655f..0209b99 100644 --- "a/assets/\346\214\207\345\215\227_\347\216\257\345\242\203\347\256\241\347\220\206_\350\231\232\346\213\237\347\216\257\345\242\203.md.gwNWe-UA.lean.js" +++ "b/assets/\346\214\207\345\215\227_\347\216\257\345\242\203\347\256\241\347\220\206_\350\231\232\346\213\237\347\216\257\345\242\203.md.D91OI9qi.lean.js" @@ -1 +1 @@ -import{_ as a,c as s,o as e,U as t}from"./chunks/framework.DPHCW6-_.js";const y=JSON.parse('{"title":"虚拟环境","description":"","frontmatter":{},"headers":[],"relativePath":"指南/环境管理/虚拟环境.md","filePath":"指南/环境管理/虚拟环境.md","lastUpdated":1721730251000}'),o={name:"指南/环境管理/虚拟环境.md"},i=t("",14),d=[i];function h(l,n,u,r,c,p){return e(),s("div",null,d)}const g=a(o,[["render",h]]);export{y as __pageData,g as default}; +import{_ as a,c as s,o as e,U as t}from"./chunks/framework.CmHn2guR.js";const y=JSON.parse('{"title":"虚拟环境","description":"","frontmatter":{},"headers":[],"relativePath":"指南/环境管理/虚拟环境.md","filePath":"指南/环境管理/虚拟环境.md","lastUpdated":1721811560000}'),o={name:"指南/环境管理/虚拟环境.md"},i=t("",14),d=[i];function h(l,n,u,r,c,p){return e(),s("div",null,d)}const g=a(o,[["render",h]]);export{y as __pageData,g as default}; diff --git "a/assets/\346\214\207\345\215\227_\347\256\200\344\273\213_YouQu3\346\230\257\344\273\200\344\271\210.md.Do-dS-Ub.js" "b/assets/\346\214\207\345\215\227_\347\256\200\344\273\213_YouQu3\346\230\257\344\273\200\344\271\210.md.CVE7Flj2.js" similarity index 90% rename from "assets/\346\214\207\345\215\227_\347\256\200\344\273\213_YouQu3\346\230\257\344\273\200\344\271\210.md.Do-dS-Ub.js" rename to "assets/\346\214\207\345\215\227_\347\256\200\344\273\213_YouQu3\346\230\257\344\273\200\344\271\210.md.CVE7Flj2.js" index 6746a17..cd0ac7d 100644 --- "a/assets/\346\214\207\345\215\227_\347\256\200\344\273\213_YouQu3\346\230\257\344\273\200\344\271\210.md.Do-dS-Ub.js" +++ "b/assets/\346\214\207\345\215\227_\347\256\200\344\273\213_YouQu3\346\230\257\344\273\200\344\271\210.md.CVE7Flj2.js" @@ -1 +1 @@ -import{_ as e,c as t,o as a,U as o,a9 as u}from"./chunks/framework.DPHCW6-_.js";const f=JSON.parse('{"title":"","description":"","frontmatter":{"outline":false},"headers":[],"relativePath":"指南/简介/YouQu3是什么.md","filePath":"指南/简介/YouQu3是什么.md","lastUpdated":1721730251000}'),i={name:"指南/简介/YouQu3是什么.md"},n=o('

    YouQu3

    YouQu3

    YouQu3, Next generation Linux automation testing framework.


    YouQu3 旨在成为下一代 Linux 自动化测试框架,在继承 YouQu2 诸多亮点功能的同时解决其遇到的问题,同时对各功能进行插件化、模块化改造,全面优化框架接口调用机制。

    • 以包的形式提供框架能力,方便安装、更新。
    • 支持离线部署,用例整体打包交付之后,可以在无网络环境下直接运行。
    • 极致轻量化、可定制化依赖,可以根据测试项目类型安装对应的依赖。
    • 功能可插拔,以插件的形式提供功能,不安装插件的情况下框架也能正常运行。
    • 可视化配置,在浏览器中输入一些配置后即可驱动测试用例执行,搭配远程执行功能,可实现群控测试机执行。
    • 支持非开发者下运行,简化系统环境部署。

    YouQu3 能做什么?

    ☑ 💻 Linux 桌面应用 UI 自动化测试

    ☑ 🌏 Web UI 自动化测试

    ☑ 🚌 Linux DBus 接口自动化测试

    ☑ 🚀 Linux 命令行自动化测试

    ☑ 🕷️ HTTP 接口自动化测试

    ☑ 🤙️ 。。。无限可能

    ',13),r=[n];function l(s,p,_,c,h,d){return a(),t("div",null,r)}const g=e(i,[["render",l]]);export{f as __pageData,g as default}; +import{_ as e,c as t,o as a,U as o,a8 as u}from"./chunks/framework.CmHn2guR.js";const f=JSON.parse('{"title":"","description":"","frontmatter":{"outline":false},"headers":[],"relativePath":"指南/简介/YouQu3是什么.md","filePath":"指南/简介/YouQu3是什么.md","lastUpdated":1721811560000}'),i={name:"指南/简介/YouQu3是什么.md"},n=o('

    YouQu3

    YouQu3

    YouQu3, Next generation Linux automation testing framework.


    YouQu3 旨在成为下一代 Linux 自动化测试框架,在继承 YouQu2 诸多亮点功能的同时解决其遇到的问题,同时对各功能进行插件化、模块化改造,全面优化框架接口调用机制。

    • 以包的形式提供框架能力,方便安装、更新。
    • 支持离线部署,用例整体打包交付之后,可以在无网络环境下直接运行。
    • 极致轻量化、可定制化依赖,可以根据测试项目类型安装对应的依赖。
    • 功能可插拔,以插件的形式提供功能,不安装插件的情况下框架也能正常运行。
    • 可视化配置,在浏览器中输入一些配置后即可驱动测试用例执行,搭配远程执行功能,可实现群控测试机执行。
    • 支持非开发者下运行,简化系统环境部署。

    YouQu3 能做什么?

    ☑ 💻 Linux 桌面应用 UI 自动化测试

    ☑ 🌏 Web UI 自动化测试

    ☑ 🚌 Linux DBus 接口自动化测试

    ☑ 🚀 Linux 命令行自动化测试

    ☑ 🕷️ HTTP 接口自动化测试

    ☑ 🤙️ 。。。无限可能

    ',13),r=[n];function l(s,p,_,c,h,d){return a(),t("div",null,r)}const g=e(i,[["render",l]]);export{f as __pageData,g as default}; diff --git "a/assets/\346\214\207\345\215\227_\347\256\200\344\273\213_YouQu3\346\230\257\344\273\200\344\271\210.md.Do-dS-Ub.lean.js" "b/assets/\346\214\207\345\215\227_\347\256\200\344\273\213_YouQu3\346\230\257\344\273\200\344\271\210.md.CVE7Flj2.lean.js" similarity index 59% rename from "assets/\346\214\207\345\215\227_\347\256\200\344\273\213_YouQu3\346\230\257\344\273\200\344\271\210.md.Do-dS-Ub.lean.js" rename to "assets/\346\214\207\345\215\227_\347\256\200\344\273\213_YouQu3\346\230\257\344\273\200\344\271\210.md.CVE7Flj2.lean.js" index 2fe0ae5..43f3bf1 100644 --- "a/assets/\346\214\207\345\215\227_\347\256\200\344\273\213_YouQu3\346\230\257\344\273\200\344\271\210.md.Do-dS-Ub.lean.js" +++ "b/assets/\346\214\207\345\215\227_\347\256\200\344\273\213_YouQu3\346\230\257\344\273\200\344\271\210.md.CVE7Flj2.lean.js" @@ -1 +1 @@ -import{_ as e,c as t,o as a,U as o,a9 as u}from"./chunks/framework.DPHCW6-_.js";const f=JSON.parse('{"title":"","description":"","frontmatter":{"outline":false},"headers":[],"relativePath":"指南/简介/YouQu3是什么.md","filePath":"指南/简介/YouQu3是什么.md","lastUpdated":1721730251000}'),i={name:"指南/简介/YouQu3是什么.md"},n=o("",13),r=[n];function l(s,p,_,c,h,d){return a(),t("div",null,r)}const g=e(i,[["render",l]]);export{f as __pageData,g as default}; +import{_ as e,c as t,o as a,U as o,a8 as u}from"./chunks/framework.CmHn2guR.js";const f=JSON.parse('{"title":"","description":"","frontmatter":{"outline":false},"headers":[],"relativePath":"指南/简介/YouQu3是什么.md","filePath":"指南/简介/YouQu3是什么.md","lastUpdated":1721811560000}'),i={name:"指南/简介/YouQu3是什么.md"},n=o("",13),r=[n];function l(s,p,_,c,h,d){return a(),t("div",null,r)}const g=e(i,[["render",l]]);export{f as __pageData,g as default}; diff --git "a/assets/\346\214\207\345\215\227_\347\256\200\344\273\213_\345\277\253\351\200\237\345\274\200\345\247\213.md.CwwrxYav.js" "b/assets/\346\214\207\345\215\227_\347\256\200\344\273\213_\345\277\253\351\200\237\345\274\200\345\247\213.md.GAtEuFuV.js" similarity index 86% rename from "assets/\346\214\207\345\215\227_\347\256\200\344\273\213_\345\277\253\351\200\237\345\274\200\345\247\213.md.CwwrxYav.js" rename to "assets/\346\214\207\345\215\227_\347\256\200\344\273\213_\345\277\253\351\200\237\345\274\200\345\247\213.md.GAtEuFuV.js" index 8f81b99..7e26dae 100644 --- "a/assets/\346\214\207\345\215\227_\347\256\200\344\273\213_\345\277\253\351\200\237\345\274\200\345\247\213.md.CwwrxYav.js" +++ "b/assets/\346\214\207\345\215\227_\347\256\200\344\273\213_\345\277\253\351\200\237\345\274\200\345\247\213.md.GAtEuFuV.js" @@ -1,2 +1,2 @@ -import{_ as s,c as a,o as i,U as t,aa as e,a7 as l}from"./chunks/framework.DPHCW6-_.js";const F=JSON.parse('{"title":"快速开始","description":"","frontmatter":{},"headers":[],"relativePath":"指南/简介/快速开始.md","filePath":"指南/简介/快速开始.md","lastUpdated":1721730251000}'),p={name:"指南/简介/快速开始.md"},n=t('

    快速开始

    安装

    bash
    pip install youqu3
    bash
    pip install "youqu3[gui]"
    bash
    pip install "youqu3[webui]"
    bash
    pip install "youqu3[http]"
    bash
    pip install "youqu3[remote]"

    注意

    • 根据不同的测试类型选择以上不同的安装命令,可以自动安装对应的依赖集。
    • 基础环境默认支持 Linux 命令行自动化
    • 同时选择多个环境:pip install "youqu3[gui, webui]"

    创建用例工程

    创建一个目录

    bash
    mkdir my_autotest

    使用脚手架功能创建用例工程

    bash
    cd my_autotest/
    +import{_ as s,c as a,o as i,U as t,a9 as e,a6 as l}from"./chunks/framework.CmHn2guR.js";const F=JSON.parse('{"title":"快速开始","description":"","frontmatter":{},"headers":[],"relativePath":"指南/简介/快速开始.md","filePath":"指南/简介/快速开始.md","lastUpdated":1721811560000}'),p={name:"指南/简介/快速开始.md"},n=t('

    快速开始

    安装

    bash
    pip install youqu3
    bash
    pip install "youqu3[gui]"
    bash
    pip install "youqu3[webui]"
    bash
    pip install "youqu3[http]"
    bash
    pip install "youqu3[remote]"

    注意

    • 根据不同的测试类型选择以上不同的安装命令,可以自动安装对应的依赖集。
    • 基础环境默认支持 Linux 命令行自动化
    • 同时选择多个环境:pip install "youqu3[gui, webui]"

    创建用例工程

    创建一个目录

    bash
    mkdir my_autotest

    使用脚手架功能创建用例工程

    bash
    cd my_autotest/
     youqu3 init

    ',11),h=[n];function o(d,c,r,k,u,b){return i(),a("div",null,h)}const v=s(p,[["render",o]]);export{F as __pageData,v as default}; diff --git "a/assets/\346\214\207\345\215\227_\347\256\200\344\273\213_\345\277\253\351\200\237\345\274\200\345\247\213.md.CwwrxYav.lean.js" "b/assets/\346\214\207\345\215\227_\347\256\200\344\273\213_\345\277\253\351\200\237\345\274\200\345\247\213.md.GAtEuFuV.lean.js" similarity index 59% rename from "assets/\346\214\207\345\215\227_\347\256\200\344\273\213_\345\277\253\351\200\237\345\274\200\345\247\213.md.CwwrxYav.lean.js" rename to "assets/\346\214\207\345\215\227_\347\256\200\344\273\213_\345\277\253\351\200\237\345\274\200\345\247\213.md.GAtEuFuV.lean.js" index 6c20bde..1c4ac80 100644 --- "a/assets/\346\214\207\345\215\227_\347\256\200\344\273\213_\345\277\253\351\200\237\345\274\200\345\247\213.md.CwwrxYav.lean.js" +++ "b/assets/\346\214\207\345\215\227_\347\256\200\344\273\213_\345\277\253\351\200\237\345\274\200\345\247\213.md.GAtEuFuV.lean.js" @@ -1 +1 @@ -import{_ as s,c as a,o as i,U as t,aa as e,a7 as l}from"./chunks/framework.DPHCW6-_.js";const F=JSON.parse('{"title":"快速开始","description":"","frontmatter":{},"headers":[],"relativePath":"指南/简介/快速开始.md","filePath":"指南/简介/快速开始.md","lastUpdated":1721730251000}'),p={name:"指南/简介/快速开始.md"},n=t("",11),h=[n];function o(d,c,r,k,u,b){return i(),a("div",null,h)}const v=s(p,[["render",o]]);export{F as __pageData,v as default}; +import{_ as s,c as a,o as i,U as t,a9 as e,a6 as l}from"./chunks/framework.CmHn2guR.js";const F=JSON.parse('{"title":"快速开始","description":"","frontmatter":{},"headers":[],"relativePath":"指南/简介/快速开始.md","filePath":"指南/简介/快速开始.md","lastUpdated":1721811560000}'),p={name:"指南/简介/快速开始.md"},n=t("",11),h=[n];function o(d,c,r,k,u,b){return i(),a("div",null,h)}const v=s(p,[["render",o]]);export{F as __pageData,v as default}; diff --git "a/assets/\346\214\207\345\215\227_\351\251\261\345\212\250\346\211\247\350\241\214_\346\234\254\345\234\260\346\211\247\350\241\214.md.CzhByQZt.js" "b/assets/\346\214\207\345\215\227_\351\251\261\345\212\250\346\211\247\350\241\214_\346\234\254\345\234\260\346\211\247\350\241\214.md.BKUB9IwX.js" similarity index 88% rename from "assets/\346\214\207\345\215\227_\351\251\261\345\212\250\346\211\247\350\241\214_\346\234\254\345\234\260\346\211\247\350\241\214.md.CzhByQZt.js" rename to "assets/\346\214\207\345\215\227_\351\251\261\345\212\250\346\211\247\350\241\214_\346\234\254\345\234\260\346\211\247\350\241\214.md.BKUB9IwX.js" index fe2da8e..a5e1595 100644 --- "a/assets/\346\214\207\345\215\227_\351\251\261\345\212\250\346\211\247\350\241\214_\346\234\254\345\234\260\346\211\247\350\241\214.md.CzhByQZt.js" +++ "b/assets/\346\214\207\345\215\227_\351\251\261\345\212\250\346\211\247\350\241\214_\346\234\254\345\234\260\346\211\247\350\241\214.md.BKUB9IwX.js" @@ -1,4 +1,4 @@ -import{_ as s,c as a,o as i,U as t}from"./chunks/framework.DPHCW6-_.js";const g=JSON.parse('{"title":"本地执行","description":"","frontmatter":{},"headers":[],"relativePath":"指南/驱动执行/本地执行.md","filePath":"指南/驱动执行/本地执行.md","lastUpdated":1721730251000}'),e={name:"指南/驱动执行/本地执行.md"},p=t(`

    本地执行

    子命令

    本地执行子命令为:run

    bash
    $ youqu3 run
    bash
    $ youqu3-cargo run

    用例驱动方式

    执行所有用例

    bash
    $ youqu3 run
    bash
    $ youqu3-cargo run

    指定执行某一个用例

    python
    # test_xxx_001.py
    +import{_ as s,c as a,o as i,U as t}from"./chunks/framework.CmHn2guR.js";const F=JSON.parse('{"title":"本地执行","description":"","frontmatter":{},"headers":[],"relativePath":"指南/驱动执行/本地执行.md","filePath":"指南/驱动执行/本地执行.md","lastUpdated":1721811560000}'),e={name:"指南/驱动执行/本地执行.md"},p=t(`

    本地执行

    子命令

    本地执行子命令为:run

    bash
    $ youqu3 run
    bash
    $ youqu3-cargo run

    用例驱动方式

    执行所有用例

    bash
    $ youqu3 run
    bash
    $ youqu3-cargo run

    指定执行某一个用例

    python
    # test_xxx_001.py
     
     class TestCase:
         
    @@ -6,10 +6,10 @@ import{_ as s,c as a,o as i,U as t}from"./chunks/framework.DPHCW6-_.js";const g=
             ...
             
         def test_xxx_001_2(self):
    -        ...

    仅驱动执行这一条用例:

    bash
    $ youqu3 run -k test_xxx_001_1
    bash
    $ youqu3-cargo run -k test_xxx_001_1

    如果你想执行这个 py 文件中所有的用例:

    bash
    $ youqu3 run -k test_xxx_001
    bash
    $ youqu3-cargo run -k test_xxx_001

    指定某个目录执行

    shell
    autotest-my-app
    +        ...

    仅驱动执行这一条用例:

    bash
    $ youqu3 run -k test_xxx_001_1
    bash
    $ youqu3-cargo run -k test_xxx_001_1

    如果你想执行这个 py 文件中所有的用例:

    bash
    $ youqu3 run -k test_xxx_001
    bash
    $ youqu3-cargo run -k test_xxx_001

    指定某个目录执行

    shell
    autotest-my-app
     ├── case
     │   ├── base_case.py
     │   ├── __init__.py
     │   ├── smoke
     │  	├── test_mycase_001.py
    -│  	└── test_mycase_002.py

    驱动执行 smoke 目录下所有用例:

    bash
    $ youqu3 run -k smoke
    bash
    $ youqu3-cargo run -k smoke

    根据关键词执行

    执行包含关键词的用例,关键词可以是用例对象中的任意字符,且大小写不敏感

    模块名称、py 文件名称、类名、函数名等等都可以做为关键词

    比如:case/test_music_001.py::TestMusic::test_music_001

    整个字符串中可以任意截取字符作为关键词。

    关键词驱动支持 and/or/not 表达式。

    bash
    $ youqu3 run -k "music and 001"
    bash
    $ youqu3-cargo run -k "music and 001"

    注意:

    使用逻辑表达式的时候一定要加引号:"music and 001"

    根据标签执行

    基于 YouQu 特有的 CSV 文件管理的标签,也可以是传统的 Pytest 标签:@pytest.mark.L1

    标签驱动支持 and/or/not 表达式。

    bash
    $ youqu3 run -t "L1 or smoke"
    bash
    $ youqu3-cargo run -t "L1 or smoke"

    批量用例ID驱动执行

    bash
    $ youqu3 run -t "id1 or id2 or id3 or id4"
    bash
    $ youqu3-cargo run -t "id1 or id2 or id3 or id4"

    注意:

    使用逻辑表达式的时候一定要加引号:"id1 or id2 or id3 or id4"

    指定用例文件路径执行

    指定用例文件

    bash
    $ youqu3 run -f case/test_music_001.py
    bash
    $ youqu3-cargo run -f case/test_music_001.py

    指定用例目录

    bash
    $ youqu3 run -f case
    bash
    $ youqu3-cargo run -f case

    用例文件、目录组合

    bash
    $ youqu3 run -f "case/test_music_001.py case/test_music_002.py"
    bash
    $ youqu3-cargo run -f "case/test_music_001.py case/test_music_002.py"

    注意:

    多个用例文件、目录之间用空格分割,加引号

    `,40),l=[p];function h(n,d,k,o,c,r){return i(),a("div",null,l)}const u=s(e,[["render",h]]);export{g as __pageData,u as default}; +│   └── test_mycase_002.py

    驱动执行 smoke 目录下所有用例:

    bash
    $ youqu3 run -k smoke
    bash
    $ youqu3-cargo run -k smoke

    根据关键词执行

    执行包含关键词的用例,关键词可以是用例对象中的任意字符,且大小写不敏感

    模块名称、py 文件名称、类名、函数名等等都可以做为关键词

    比如:case/test_music_001.py::TestMusic::test_music_001

    整个字符串中可以任意截取字符作为关键词。

    关键词驱动支持 and/or/not 表达式。

    bash
    $ youqu3 run -k "music and 001"
    bash
    $ youqu3-cargo run -k "music and 001"

    注意:

    使用逻辑表达式的时候一定要加引号:"music and 001"

    根据标签执行

    基于 YouQu 特有的 CSV 文件管理的标签,也可以是传统的 Pytest 标签:@pytest.mark.L1

    标签驱动支持 and/or/not 表达式。

    bash
    $ youqu3 run -t "L1 or smoke"
    bash
    $ youqu3-cargo run -t "L1 or smoke"

    批量用例ID驱动执行

    bash
    $ youqu3 run -t "id1 or id2 or id3 or id4"
    bash
    $ youqu3-cargo run -t "id1 or id2 or id3 or id4"

    注意:

    使用逻辑表达式的时候一定要加引号:"id1 or id2 or id3 or id4"

    指定用例文件路径执行

    指定用例文件

    bash
    $ youqu3 run -f case/test_music_001.py
    bash
    $ youqu3-cargo run -f case/test_music_001.py

    指定用例目录

    bash
    $ youqu3 run -f case
    bash
    $ youqu3-cargo run -f case

    用例文件、目录组合

    bash
    $ youqu3 run -f "case/test_music_001.py case/test_music_002.py"
    bash
    $ youqu3-cargo run -f "case/test_music_001.py case/test_music_002.py"

    注意:

    多个用例文件、目录之间用空格分割,加引号

    `,40),l=[p];function h(n,d,k,o,c,r){return i(),a("div",null,l)}const u=s(e,[["render",h]]);export{F as __pageData,u as default}; diff --git "a/assets/\346\214\207\345\215\227_\351\251\261\345\212\250\346\211\247\350\241\214_\346\234\254\345\234\260\346\211\247\350\241\214.md.BKUB9IwX.lean.js" "b/assets/\346\214\207\345\215\227_\351\251\261\345\212\250\346\211\247\350\241\214_\346\234\254\345\234\260\346\211\247\350\241\214.md.BKUB9IwX.lean.js" new file mode 100644 index 0000000..f4c635f --- /dev/null +++ "b/assets/\346\214\207\345\215\227_\351\251\261\345\212\250\346\211\247\350\241\214_\346\234\254\345\234\260\346\211\247\350\241\214.md.BKUB9IwX.lean.js" @@ -0,0 +1 @@ +import{_ as s,c as a,o as i,U as t}from"./chunks/framework.CmHn2guR.js";const F=JSON.parse('{"title":"本地执行","description":"","frontmatter":{},"headers":[],"relativePath":"指南/驱动执行/本地执行.md","filePath":"指南/驱动执行/本地执行.md","lastUpdated":1721811560000}'),e={name:"指南/驱动执行/本地执行.md"},p=t("",40),l=[p];function h(n,d,k,o,c,r){return i(),a("div",null,l)}const u=s(e,[["render",h]]);export{F as __pageData,u as default}; diff --git "a/assets/\346\214\207\345\215\227_\351\251\261\345\212\250\346\211\247\350\241\214_\346\234\254\345\234\260\346\211\247\350\241\214.md.CzhByQZt.lean.js" "b/assets/\346\214\207\345\215\227_\351\251\261\345\212\250\346\211\247\350\241\214_\346\234\254\345\234\260\346\211\247\350\241\214.md.CzhByQZt.lean.js" deleted file mode 100644 index 4efa8d7..0000000 --- "a/assets/\346\214\207\345\215\227_\351\251\261\345\212\250\346\211\247\350\241\214_\346\234\254\345\234\260\346\211\247\350\241\214.md.CzhByQZt.lean.js" +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,c as a,o as i,U as t}from"./chunks/framework.DPHCW6-_.js";const g=JSON.parse('{"title":"本地执行","description":"","frontmatter":{},"headers":[],"relativePath":"指南/驱动执行/本地执行.md","filePath":"指南/驱动执行/本地执行.md","lastUpdated":1721730251000}'),e={name:"指南/驱动执行/本地执行.md"},p=t("",40),l=[p];function h(n,d,k,o,c,r){return i(),a("div",null,l)}const u=s(e,[["render",h]]);export{g as __pageData,u as default}; diff --git "a/assets/\346\214\207\345\215\227_\351\251\261\345\212\250\346\211\247\350\241\214_\350\207\252\345\256\232\344\271\211\346\211\247\350\241\214.md.C28GvzpJ.lean.js" "b/assets/\346\214\207\345\215\227_\351\251\261\345\212\250\346\211\247\350\241\214_\350\207\252\345\256\232\344\271\211\346\211\247\350\241\214.md.C28GvzpJ.lean.js" deleted file mode 100644 index ddb5b1c..0000000 --- "a/assets/\346\214\207\345\215\227_\351\251\261\345\212\250\346\211\247\350\241\214_\350\207\252\345\256\232\344\271\211\346\211\247\350\241\214.md.C28GvzpJ.lean.js" +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,c as a,o as t,U as e}from"./chunks/framework.DPHCW6-_.js";const g=JSON.parse('{"title":"自定义执行","description":"","frontmatter":{},"headers":[],"relativePath":"指南/驱动执行/自定义执行.md","filePath":"指南/驱动执行/自定义执行.md","lastUpdated":1721730251000}'),i={name:"指南/驱动执行/自定义执行.md"},o=e("",18),d=[o];function p(r,l,n,u,h,c){return t(),a("div",null,d)}const y=s(i,[["render",p]]);export{g as __pageData,y as default}; diff --git "a/assets/\346\214\207\345\215\227_\351\251\261\345\212\250\346\211\247\350\241\214_\350\207\252\345\256\232\344\271\211\346\211\247\350\241\214.md.C28GvzpJ.js" "b/assets/\346\214\207\345\215\227_\351\251\261\345\212\250\346\211\247\350\241\214_\350\207\252\345\256\232\344\271\211\346\211\247\350\241\214.md.Dg7pAOMa.js" similarity index 90% rename from "assets/\346\214\207\345\215\227_\351\251\261\345\212\250\346\211\247\350\241\214_\350\207\252\345\256\232\344\271\211\346\211\247\350\241\214.md.C28GvzpJ.js" rename to "assets/\346\214\207\345\215\227_\351\251\261\345\212\250\346\211\247\350\241\214_\350\207\252\345\256\232\344\271\211\346\211\247\350\241\214.md.Dg7pAOMa.js" index 536f4a8..3ef7769 100644 --- "a/assets/\346\214\207\345\215\227_\351\251\261\345\212\250\346\211\247\350\241\214_\350\207\252\345\256\232\344\271\211\346\211\247\350\241\214.md.C28GvzpJ.js" +++ "b/assets/\346\214\207\345\215\227_\351\251\261\345\212\250\346\211\247\350\241\214_\350\207\252\345\256\232\344\271\211\346\211\247\350\241\214.md.Dg7pAOMa.js" @@ -1 +1 @@ -import{_ as s,c as a,o as t,U as e}from"./chunks/framework.DPHCW6-_.js";const g=JSON.parse('{"title":"自定义执行","description":"","frontmatter":{},"headers":[],"relativePath":"指南/驱动执行/自定义执行.md","filePath":"指南/驱动执行/自定义执行.md","lastUpdated":1721730251000}'),i={name:"指南/驱动执行/自定义执行.md"},o=e('

    自定义执行

    YouQu3 支持在 txt 文件中自定义用例集驱动执行:

    • youqu-tags.txt
    • youqu-keywords.txt

    youqu-tags.txt

    在根目录下定义 youqu-tags.txt 文件,YouQu3 会自动加载并执行。

    youqu-tags.txt 文件里面写标签的表达式,如:

    txt
    id1 or id2 or id3

    youqu-keywords.txt

    在根目录下定义 youqu-keywords.txt 文件,YouQu3 会自动加载并执行。

    youqu-keywords.txt 文件里面写关键词的表达式,如:

    txt
    id1 or id2 or id3

    案例

    PMS用例驱动

    youqu-pms-driver:从PMS测试单中爬取用例集,将用例 id 集合写入 youqu-tags.txt 文件。

    使用框架的前置钩子触发爬取动作生成 youqu-tags.txt 文件,框架自动加载并执行对应标签的用例。

    使用框架的后置钩子触发结果回填到 PMS 测试单。

    执行命令:

    bash
    youqu3 run --job-start "pms-driver --task-id 123456 --pms-user ut001234 --pms-password xxxx" --job-end "pms-driver --task-id 123456 --pms-user ut001234 --pms-password xxxx --send2pms"
    bash
    youqu3-cargo run --job-start "pms-driver --task-id 123456 --pms-user ut001234 --pms-password xxxx" --job-end "pms-driver --task-id 123456 --pms-user ut001234 --pms-password xxxx --send2pms"
    ',18),d=[o];function p(r,l,n,u,h,c){return t(),a("div",null,d)}const y=s(i,[["render",p]]);export{g as __pageData,y as default}; +import{_ as a,c as s,o as t,U as e}from"./chunks/framework.CmHn2guR.js";const g=JSON.parse('{"title":"自定义执行","description":"","frontmatter":{},"headers":[],"relativePath":"指南/驱动执行/自定义执行.md","filePath":"指南/驱动执行/自定义执行.md","lastUpdated":1721811560000}'),i={name:"指南/驱动执行/自定义执行.md"},o=e('

    自定义执行

    YouQu3 支持在 txt 文件中自定义用例集驱动执行:

    • youqu-tags.txt
    • youqu-keywords.txt

    youqu-tags.txt

    在根目录下定义 youqu-tags.txt 文件,YouQu3 会自动加载并执行。

    youqu-tags.txt 文件里面写标签的表达式,如:

    txt
    id1 or id2 or id3

    youqu-keywords.txt

    在根目录下定义 youqu-keywords.txt 文件,YouQu3 会自动加载并执行。

    youqu-keywords.txt 文件里面写关键词的表达式,如:

    txt
    id1 or id2 or id3

    案例

    PMS用例驱动

    youqu-pms-driver:从PMS测试单中爬取用例集,将用例 id 集合写入 youqu-tags.txt 文件。

    使用框架的前置钩子触发爬取动作生成 youqu-tags.txt 文件,框架自动加载并执行对应标签的用例。

    使用框架的后置钩子触发结果回填到 PMS 测试单。

    执行命令:

    bash
    youqu3 run --job-start "pms-driver --task-id 123456 --pms-user ut001234 --pms-password xxxx" --job-end "pms-driver --task-id 123456 --pms-user ut001234 --pms-password xxxx --send2pms"
    bash
    youqu3-cargo run --job-start "pms-driver --task-id 123456 --pms-user ut001234 --pms-password xxxx" --job-end "pms-driver --task-id 123456 --pms-user ut001234 --pms-password xxxx --send2pms"
    ',18),d=[o];function p(r,l,n,u,h,c){return t(),s("div",null,d)}const y=a(i,[["render",p]]);export{g as __pageData,y as default}; diff --git "a/assets/\346\214\207\345\215\227_\351\251\261\345\212\250\346\211\247\350\241\214_\350\207\252\345\256\232\344\271\211\346\211\247\350\241\214.md.Dg7pAOMa.lean.js" "b/assets/\346\214\207\345\215\227_\351\251\261\345\212\250\346\211\247\350\241\214_\350\207\252\345\256\232\344\271\211\346\211\247\350\241\214.md.Dg7pAOMa.lean.js" new file mode 100644 index 0000000..5378f7c --- /dev/null +++ "b/assets/\346\214\207\345\215\227_\351\251\261\345\212\250\346\211\247\350\241\214_\350\207\252\345\256\232\344\271\211\346\211\247\350\241\214.md.Dg7pAOMa.lean.js" @@ -0,0 +1 @@ +import{_ as a,c as s,o as t,U as e}from"./chunks/framework.CmHn2guR.js";const g=JSON.parse('{"title":"自定义执行","description":"","frontmatter":{},"headers":[],"relativePath":"指南/驱动执行/自定义执行.md","filePath":"指南/驱动执行/自定义执行.md","lastUpdated":1721811560000}'),i={name:"指南/驱动执行/自定义执行.md"},o=e("",18),d=[o];function p(r,l,n,u,h,c){return t(),s("div",null,d)}const y=a(i,[["render",p]]);export{g as __pageData,y as default}; diff --git "a/assets/\346\214\207\345\215\227_\351\251\261\345\212\250\346\211\247\350\241\214_\350\277\234\347\250\213\346\211\247\350\241\214.md.nIgP-3L4.js" "b/assets/\346\214\207\345\215\227_\351\251\261\345\212\250\346\211\247\350\241\214_\350\277\234\347\250\213\346\211\247\350\241\214.md.DMezCpgw.js" similarity index 89% rename from "assets/\346\214\207\345\215\227_\351\251\261\345\212\250\346\211\247\350\241\214_\350\277\234\347\250\213\346\211\247\350\241\214.md.nIgP-3L4.js" rename to "assets/\346\214\207\345\215\227_\351\251\261\345\212\250\346\211\247\350\241\214_\350\277\234\347\250\213\346\211\247\350\241\214.md.DMezCpgw.js" index 9eb967a..4af0db4 100644 --- "a/assets/\346\214\207\345\215\227_\351\251\261\345\212\250\346\211\247\350\241\214_\350\277\234\347\250\213\346\211\247\350\241\214.md.nIgP-3L4.js" +++ "b/assets/\346\214\207\345\215\227_\351\251\261\345\212\250\346\211\247\350\241\214_\350\277\234\347\250\213\346\211\247\350\241\214.md.DMezCpgw.js" @@ -1 +1 @@ -import{_ as s,c as a,o as i,U as e}from"./chunks/framework.DPHCW6-_.js";const g=JSON.parse('{"title":"远程执行","description":"","frontmatter":{},"headers":[],"relativePath":"指南/驱动执行/远程执行.md","filePath":"指南/驱动执行/远程执行.md","lastUpdated":1721730251000}'),t={name:"指南/驱动执行/远程执行.md"},p=e('

    远程执行

    子命令

    远程执行就是用本地作为服务端控制远程机器执行,远程机器执行的用例相同;

    远程执行使用子命令: remote

    bash
    $ youqu3 remote
    bash
    $ youqu3-cargo remote
    开启 SSH

    执行前确保远程机器已经开启了 SSH 服务,否则会提示无法连接:

    bash
    $ sudo systemctl restart ssh

    远程测试机分组策略

    分组规则

    一对大括号表示一个组:

    txt
    {user1@ip1/user2@ip2}{user3@ip3/user4@ip4}

    以上写法表示有 2 个组(group):

    • group1 : user1@ip1/user2@ip2
    • group2 : user3@ip3/user4@ip4

    执行策略

    规则概述

    同一组内瓜分执行,不同组之间相同执行

    bash
    $ youqu3 remote -c "{user1@ip1/user2@ip2}{user3@ip3/user4@ip4}"
    bash
    $ youqu3-cargo remote -c "{user1@ip1/user2@ip2}{user3@ip3/user4@ip4}"

    假设总共 100 条用例:

    • group1group2同时执行 100 条
    • group1 包含 2 个测试机,2 个机器瓜分 100 条用例,每个机器执行 50 条
    ',17),l=[p];function o(d,h,c,n,r,u){return i(),a("div",null,l)}const b=s(t,[["render",o]]);export{g as __pageData,b as default}; +import{_ as s,c as a,o as i,U as e}from"./chunks/framework.CmHn2guR.js";const g=JSON.parse('{"title":"远程执行","description":"","frontmatter":{},"headers":[],"relativePath":"指南/驱动执行/远程执行.md","filePath":"指南/驱动执行/远程执行.md","lastUpdated":1721811560000}'),t={name:"指南/驱动执行/远程执行.md"},p=e('

    远程执行

    子命令

    远程执行就是用本地作为服务端控制远程机器执行,远程机器执行的用例相同;

    远程执行使用子命令: remote

    bash
    $ youqu3 remote
    bash
    $ youqu3-cargo remote
    开启 SSH

    执行前确保远程机器已经开启了 SSH 服务,否则会提示无法连接:

    bash
    $ sudo systemctl restart ssh

    远程测试机分组策略

    分组规则

    一对大括号表示一个组:

    txt
    {user1@ip1/user2@ip2}{user3@ip3/user4@ip4}

    以上写法表示有 2 个组(group):

    • group1 : user1@ip1/user2@ip2
    • group2 : user3@ip3/user4@ip4

    执行策略

    规则概述

    同一组内瓜分执行,不同组之间相同执行

    bash
    $ youqu3 remote -c "{user1@ip1/user2@ip2}{user3@ip3/user4@ip4}"
    bash
    $ youqu3-cargo remote -c "{user1@ip1/user2@ip2}{user3@ip3/user4@ip4}"

    假设总共 100 条用例:

    • group1group2同时执行 100 条
    • group1 包含 2 个测试机,2 个机器瓜分 100 条用例,每个机器执行 50 条
    ',17),l=[p];function o(d,h,c,n,r,u){return i(),a("div",null,l)}const b=s(t,[["render",o]]);export{g as __pageData,b as default}; diff --git "a/assets/\346\214\207\345\215\227_\351\251\261\345\212\250\346\211\247\350\241\214_\350\277\234\347\250\213\346\211\247\350\241\214.md.nIgP-3L4.lean.js" "b/assets/\346\214\207\345\215\227_\351\251\261\345\212\250\346\211\247\350\241\214_\350\277\234\347\250\213\346\211\247\350\241\214.md.DMezCpgw.lean.js" similarity index 59% rename from "assets/\346\214\207\345\215\227_\351\251\261\345\212\250\346\211\247\350\241\214_\350\277\234\347\250\213\346\211\247\350\241\214.md.nIgP-3L4.lean.js" rename to "assets/\346\214\207\345\215\227_\351\251\261\345\212\250\346\211\247\350\241\214_\350\277\234\347\250\213\346\211\247\350\241\214.md.DMezCpgw.lean.js" index 059ef32..bced8f6 100644 --- "a/assets/\346\214\207\345\215\227_\351\251\261\345\212\250\346\211\247\350\241\214_\350\277\234\347\250\213\346\211\247\350\241\214.md.nIgP-3L4.lean.js" +++ "b/assets/\346\214\207\345\215\227_\351\251\261\345\212\250\346\211\247\350\241\214_\350\277\234\347\250\213\346\211\247\350\241\214.md.DMezCpgw.lean.js" @@ -1 +1 @@ -import{_ as s,c as a,o as i,U as e}from"./chunks/framework.DPHCW6-_.js";const g=JSON.parse('{"title":"远程执行","description":"","frontmatter":{},"headers":[],"relativePath":"指南/驱动执行/远程执行.md","filePath":"指南/驱动执行/远程执行.md","lastUpdated":1721730251000}'),t={name:"指南/驱动执行/远程执行.md"},p=e("",17),l=[p];function o(d,h,c,n,r,u){return i(),a("div",null,l)}const b=s(t,[["render",o]]);export{g as __pageData,b as default}; +import{_ as s,c as a,o as i,U as e}from"./chunks/framework.CmHn2guR.js";const g=JSON.parse('{"title":"远程执行","description":"","frontmatter":{},"headers":[],"relativePath":"指南/驱动执行/远程执行.md","filePath":"指南/驱动执行/远程执行.md","lastUpdated":1721811560000}'),t={name:"指南/驱动执行/远程执行.md"},p=e("",17),l=[p];function o(d,h,c,n,r,u){return i(),a("div",null,l)}const b=s(t,[["render",o]]);export{g as __pageData,b as default}; diff --git "a/assets/\346\217\222\344\273\266_DBus\346\223\215\346\216\247.md.CeGraewc.js" "b/assets/\346\217\222\344\273\266_DBus\346\223\215\346\216\247.md.CeGraewc.js" deleted file mode 100644 index b699b14..0000000 --- "a/assets/\346\217\222\344\273\266_DBus\346\223\215\346\216\247.md.CeGraewc.js" +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as t,o as a}from"./chunks/framework.DPHCW6-_.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"插件/DBus操控.md","filePath":"插件/DBus操控.md","lastUpdated":1721730251000}'),s={name:"插件/DBus操控.md"};function r(o,c,n,_,d,p){return a(),t("div")}const f=e(s,[["render",r]]);export{m as __pageData,f as default}; diff --git "a/assets/\346\217\222\344\273\266_DBus\346\223\215\346\216\247.md.CeGraewc.lean.js" "b/assets/\346\217\222\344\273\266_DBus\346\223\215\346\216\247.md.CeGraewc.lean.js" deleted file mode 100644 index b699b14..0000000 --- "a/assets/\346\217\222\344\273\266_DBus\346\223\215\346\216\247.md.CeGraewc.lean.js" +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as t,o as a}from"./chunks/framework.DPHCW6-_.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"插件/DBus操控.md","filePath":"插件/DBus操控.md","lastUpdated":1721730251000}'),s={name:"插件/DBus操控.md"};function r(o,c,n,_,d,p){return a(),t("div")}const f=e(s,[["render",r]]);export{m as __pageData,f as default}; diff --git "a/assets/\346\217\222\344\273\266_Html\346\265\213\350\257\225\346\212\245\345\221\212.md.DuXpML5f.js" "b/assets/\346\217\222\344\273\266_Html\346\265\213\350\257\225\346\212\245\345\221\212.md.DuXpML5f.js" deleted file mode 100644 index 5416b48..0000000 --- "a/assets/\346\217\222\344\273\266_Html\346\265\213\350\257\225\346\212\245\345\221\212.md.DuXpML5f.js" +++ /dev/null @@ -1 +0,0 @@ -import{_ as t,c as e,o as a}from"./chunks/framework.DPHCW6-_.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"插件/Html测试报告.md","filePath":"插件/Html测试报告.md","lastUpdated":1721730251000}'),r={name:"插件/Html测试报告.md"};function o(s,c,n,_,m,d){return a(),e("div")}const i=t(r,[["render",o]]);export{p as __pageData,i as default}; diff --git "a/assets/\346\217\222\344\273\266_Html\346\265\213\350\257\225\346\212\245\345\221\212.md.DuXpML5f.lean.js" "b/assets/\346\217\222\344\273\266_Html\346\265\213\350\257\225\346\212\245\345\221\212.md.DuXpML5f.lean.js" deleted file mode 100644 index 5416b48..0000000 --- "a/assets/\346\217\222\344\273\266_Html\346\265\213\350\257\225\346\212\245\345\221\212.md.DuXpML5f.lean.js" +++ /dev/null @@ -1 +0,0 @@ -import{_ as t,c as e,o as a}from"./chunks/framework.DPHCW6-_.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"插件/Html测试报告.md","filePath":"插件/Html测试报告.md","lastUpdated":1721730251000}'),r={name:"插件/Html测试报告.md"};function o(s,c,n,_,m,d){return a(),e("div")}const i=t(r,[["render",o]]);export{p as __pageData,i as default}; diff --git "a/assets/\346\217\222\344\273\266_OCR\350\257\206\345\210\253.md.CjhymMpv.js" "b/assets/\346\217\222\344\273\266_OCR\350\257\206\345\210\253.md.CjhymMpv.js" deleted file mode 100644 index b5b84e6..0000000 --- "a/assets/\346\217\222\344\273\266_OCR\350\257\206\345\210\253.md.CjhymMpv.js" +++ /dev/null @@ -1,15 +0,0 @@ -import{_ as s,c as i,o as a,U as t}from"./chunks/framework.DPHCW6-_.js";const E=JSON.parse('{"title":"pdocr-rpc","description":"","frontmatter":{},"headers":[],"relativePath":"插件/OCR识别.md","filePath":"插件/OCR识别.md","lastUpdated":1721730251000}'),e={name:"插件/OCR识别.md"},p=t(`

    pdocr-rpc

    Source Code: https://github.com/linuxdeepin/pdocr-rpc

    基于 PaddleOCR 封装的 RPC 服务,包含客户端和服务端。

    客户端提供了一个简单易用的函数 ocr,通过不同的参数控制返回不同的值。

    1、服务端

    服务端安装

    console
    pip install pdocr-rpc[server]

    服务端启动服务

    随意新建一个py文件,名称你可以自定义,比如:ocr_server.py

    写入以下内容:

    python
    # ocr_server.py
    -from pdocr_rpc.server import server
    -
    -server()

    默认端口号为 8890 如果你想修改端口:

    python
    from pdocr_rpc.server import server
    -from pdocr_rpc.conf import setting
    -
    -setting.PORT = 8888
    -server()

    2、客户端

    客户端安装

    console
    pip install pdocr-rpc

    客户端使用

    2.1、识别当前屏幕的所有文字内容

    python
    from pdocr_rpc import OCR
    -from pdocr_rpc.conf import setting
    -
    -# 注意IP和端口要和你的服务端IP对应
    -setting.SERVER_IP = "192.168.0.1"
    -setting.PORT = 8888
    -
    -OCR.ocr()

    自动识别当前整个屏幕的所有内容。

    2.2、指定某张图片识别的所有文字内容

    python
    OCR.ocr(picture_abspath="~/Desktop/test.png")

    返回识别图片 test.png 的内容。

    2.3、在全屏指定查找某个字符串的坐标

    python
    OCR.ocr("天天向上")

    返回当前屏幕中,“天天向上”的坐标,如果存在多个,则返回一个字典。

    2.4、指定某张图片查找某个字符串的坐标

    python
    OCR.ocr("天天向上"picture_abspath="~/Desktop/test.png")

    2.5、其他参数

    • 识别语言

      lang: ch, en, fr, german, korean, japan

      默认为ch,中文,如果要修改识别语言;

      python
      OCR.ocr(lang="ch")
    • 匹配度

      similarity: float

      默认为0.6,可以修改为从0到1的数;

      shell
      OCR.ocr(similarity=0.1)
    • 返回原始数据

      return_default: bool

      默认为False,即默认返回识别到字符串的中心坐标,True表示返回原始数据;

      python
      OCR.ocr(return_default=False)
    • 只返回第一个

      return_first: bool

      当传入要查找的字符串时,可能存在当前屏幕中有多个目标;

      默认情况下是会将识别到的多个目标组装成字典返回;

      return_first=True 表示返回识别到的第一个。

      python
      OCR.ocr(return_first=True )
    `,30),n=[p];function h(l,r,k,o,d,c){return a(),i("div",null,n)}const y=s(e,[["render",h]]);export{E as __pageData,y as default}; diff --git "a/assets/\346\217\222\344\273\266_OCR\350\257\206\345\210\253.md.CjhymMpv.lean.js" "b/assets/\346\217\222\344\273\266_OCR\350\257\206\345\210\253.md.CjhymMpv.lean.js" deleted file mode 100644 index 588900f..0000000 --- "a/assets/\346\217\222\344\273\266_OCR\350\257\206\345\210\253.md.CjhymMpv.lean.js" +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,c as i,o as a,U as t}from"./chunks/framework.DPHCW6-_.js";const E=JSON.parse('{"title":"pdocr-rpc","description":"","frontmatter":{},"headers":[],"relativePath":"插件/OCR识别.md","filePath":"插件/OCR识别.md","lastUpdated":1721730251000}'),e={name:"插件/OCR识别.md"},p=t("",30),n=[p];function h(l,r,k,o,d,c){return a(),i("div",null,n)}const y=s(e,[["render",h]]);export{E as __pageData,y as default}; diff --git "a/assets/\346\217\222\344\273\266_PMS\346\265\213\350\257\225\345\215\225\351\251\261\345\212\250.md.E4mYko8B.js" "b/assets/\346\217\222\344\273\266_PMS\346\265\213\350\257\225\345\215\225\351\251\261\345\212\250.md.E4mYko8B.js" deleted file mode 100644 index 9b05806..0000000 --- "a/assets/\346\217\222\344\273\266_PMS\346\265\213\350\257\225\345\215\225\351\251\261\345\212\250.md.E4mYko8B.js" +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as t,o as a}from"./chunks/framework.DPHCW6-_.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"插件/PMS测试单驱动.md","filePath":"插件/PMS测试单驱动.md","lastUpdated":1721730251000}'),r={name:"插件/PMS测试单驱动.md"};function o(s,_,c,n,d,p){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default}; diff --git "a/assets/\346\217\222\344\273\266_PMS\346\265\213\350\257\225\345\215\225\351\251\261\345\212\250.md.E4mYko8B.lean.js" "b/assets/\346\217\222\344\273\266_PMS\346\265\213\350\257\225\345\215\225\351\251\261\345\212\250.md.E4mYko8B.lean.js" deleted file mode 100644 index 9b05806..0000000 --- "a/assets/\346\217\222\344\273\266_PMS\346\265\213\350\257\225\345\215\225\351\251\261\345\212\250.md.E4mYko8B.lean.js" +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as t,o as a}from"./chunks/framework.DPHCW6-_.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"插件/PMS测试单驱动.md","filePath":"插件/PMS测试单驱动.md","lastUpdated":1721730251000}'),r={name:"插件/PMS测试单驱动.md"};function o(s,_,c,n,d,p){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default}; diff --git "a/assets/\346\217\222\344\273\266_WebUI\350\207\252\345\212\250\345\214\226.md.CtMTpWpQ.js" "b/assets/\346\217\222\344\273\266_WebUI\350\207\252\345\212\250\345\214\226.md.CtMTpWpQ.js" deleted file mode 100644 index 821561e..0000000 --- "a/assets/\346\217\222\344\273\266_WebUI\350\207\252\345\212\250\345\214\226.md.CtMTpWpQ.js" +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as t,o as a}from"./chunks/framework.DPHCW6-_.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"插件/WebUI自动化.md","filePath":"插件/WebUI自动化.md","lastUpdated":1721730251000}'),r={name:"插件/WebUI自动化.md"};function o(s,c,n,_,d,p){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default}; diff --git "a/assets/\346\217\222\344\273\266_WebUI\350\207\252\345\212\250\345\214\226.md.CtMTpWpQ.lean.js" "b/assets/\346\217\222\344\273\266_WebUI\350\207\252\345\212\250\345\214\226.md.CtMTpWpQ.lean.js" deleted file mode 100644 index 821561e..0000000 --- "a/assets/\346\217\222\344\273\266_WebUI\350\207\252\345\212\250\345\214\226.md.CtMTpWpQ.lean.js" +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as t,o as a}from"./chunks/framework.DPHCW6-_.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"插件/WebUI自动化.md","filePath":"插件/WebUI自动化.md","lastUpdated":1721730251000}'),r={name:"插件/WebUI自动化.md"};function o(s,c,n,_,d,p){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default}; diff --git "a/assets/\346\217\222\344\273\266_\345\205\250\350\207\252\345\212\250\346\227\245\345\277\227.md.B143y16Z.js" "b/assets/\346\217\222\344\273\266_\345\205\250\350\207\252\345\212\250\346\227\245\345\277\227.md.B143y16Z.js" deleted file mode 100644 index 4ecbc74..0000000 --- "a/assets/\346\217\222\344\273\266_\345\205\250\350\207\252\345\212\250\346\227\245\345\277\227.md.B143y16Z.js" +++ /dev/null @@ -1,123 +0,0 @@ -import{_ as s,c as i,o as a,U as n,ab as l,ac as p,ad as t}from"./chunks/framework.DPHCW6-_.js";const u=JSON.parse('{"title":"FunnyLog","description":"","frontmatter":{},"headers":[],"relativePath":"插件/全自动日志.md","filePath":"插件/全自动日志.md","lastUpdated":1721730251000}'),h={name:"插件/全自动日志.md"},k=n(`

    FunnyLog

    Source Code: https://github.com/linuxdeepin/funnylog

    一个简单易用、功能强大的日志工具。

    只需要加一个装饰器,就能自动日志输出类里面所有的方法的功能说明。

    安装

    console
    pip install funnylog

    使用方法

    1、自动输出日志

    py
    #!/usr/bin/env python3
    -# _*_ coding:utf-8 _*_
    -
    -# SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
    -
    -# SPDX-License-Identifier: Apache Software License
    -from funnylog import logger
    -from funnylog import log
    -from funnylog.conf import setting
    -
    -setting.CLASS_NAME_ENDSWITH = ("Log",)
    -logger("DEBUG")
    -
    -
    -class BaseLog:
    -
    -    def base_self_method(self):
    -        """我是 基类 里面的实例方法"""
    -
    -    @classmethod
    -    def base_cls_method(self):
    -        """我是 基类 里面的类方法"""
    -
    -    @staticmethod
    -    def base_static_method():
    -        """我是 基类 里面的静态方法"""
    -
    -# 注意这里,只需要在这里挂一个装饰器
    -@log
    -class TestLog(BaseLog):
    -    """继承了基类BaseLog"""
    -
    -    def self_method(self):
    -        """我是 类 里面的实例方法"""
    -
    -    @classmethod
    -    def cls_method(self):
    -        """我是 类 里面的类方法"""
    -
    -    @staticmethod
    -    def static_method():
    -        """我是 类 里面的静态方法"""
    -
    -
    -if __name__ == '__main__':
    -    # @log装饰器自动打印
    -    TestLog().self_method()
    -    TestLog().cls_method()
    -    TestLog().static_method()
    -    # 直接调用基类里面的方法,也能自动打印
    -    TestLog().base_self_method()
    -    TestLog().base_cls_method()
    -    TestLog().base_static_method()

    终端输出:

    2、方法中输出其他的日志

    py
    #!/usr/bin/env python3
    -# _*_ coding:utf-8 _*_
    -
    -# SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
    -
    -# SPDX-License-Identifier: Apache Software License
    -from funnylog import logger
    -from funnylog import log
    -from funnylog.conf import setting
    -
    -setting.CLASS_NAME_ENDSWITH = ("Log",)
    -logger("DEBUG")
    -
    -
    -class BaseLog:
    -    ...
    -
    -# 注意这里,只需要在这里挂一个装饰器
    -@log
    -class TestLog(BaseLog):
    -    """继承了基类BaseLog"""
    -    ...
    -
    -    @staticmethod
    -    def static_method():
    -        """我是 类 里面的静态方法"""
    -
    -        # 方法里面仍然可以单独打印日志
    -        logger.debug("这是我想再输出的其他 debug 日志")
    -        logger.info("这是我想再输出的其他 info 日志")
    -        logger.error("这是我想再输出的其他 error 日志")
    -
    -
    -if __name__ == '__main__':
    -    # @log装饰器自动打印
    -    TestLog().static_method()

    终端输出:

    3、在外层其他直接使用

    py
    #!/usr/bin/env python3
    -# _*_ coding:utf-8 _*_
    -
    -# SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
    -
    -# SPDX-License-Identifier: Apache Software License
    -from funnylog import logger
    -from funnylog import log
    -from funnylog.conf import setting
    -
    -setting.CLASS_NAME_ENDSWITH = ("Log",)
    -logger("DEBUG")
    -
    -
    -class BaseLog:
    -    ...
    -
    -# 注意这里,只需要在这里挂一个装饰器
    -@log
    -class TestLog(BaseLog):
    -    """继承了基类BaseLog"""
    -    ...
    -
    -
    -if __name__ == '__main__':
    -    # logger直接调用
    -    logger.debug("这是在类外面打 debug log")
    -    logger.info("这是在类外面打 info log")
    -    logger.error("这是在类外面打 error log")

    终端输出:

    必要配置项

    • LOG_FILE_PATH 日志文件的生成路径;

      默认是在:/tmp/_logs,你可以配置为其他位置;

      python
      from funnylog.conf import setting
      -
      -setting.LOG_FILE_PATH = "/home/user/xxx"
    • LOG_LEVEL日志级别;

      默认日志输出级别为 DEBUG 级别,同样可以进行配置修改;

      python
      from funnylog.conf import setting
      -
      -setting.LOG_LEVEL = "INFO"
    • 自动输出日志的类名称;(tuple)

      • CLASS_NAME_STARTSWITH 类名以什么开头;

        python
        from funnylog.conf import setting
        -
        -setting.CLASS_NAME_STARTSWITH = ("Test",) 
        -# 注意给元组类型
      • CLASS_NAME_ENDSWITH 类名以什么结尾;

      • CLASS_NAME_CONTAIN 类名包含什么字符;

    `,21),e=[k];function o(g,r,E,d,c,y){return a(),i("div",null,e)}const _=s(h,[["render",o]]);export{u as __pageData,_ as default}; diff --git "a/assets/\346\217\222\344\273\266_\345\205\250\350\207\252\345\212\250\346\227\245\345\277\227.md.B143y16Z.lean.js" "b/assets/\346\217\222\344\273\266_\345\205\250\350\207\252\345\212\250\346\227\245\345\277\227.md.B143y16Z.lean.js" deleted file mode 100644 index 977db3e..0000000 --- "a/assets/\346\217\222\344\273\266_\345\205\250\350\207\252\345\212\250\346\227\245\345\277\227.md.B143y16Z.lean.js" +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,c as i,o as a,U as n,ab as l,ac as p,ad as t}from"./chunks/framework.DPHCW6-_.js";const u=JSON.parse('{"title":"FunnyLog","description":"","frontmatter":{},"headers":[],"relativePath":"插件/全自动日志.md","filePath":"插件/全自动日志.md","lastUpdated":1721730251000}'),h={name:"插件/全自动日志.md"},k=n("",21),e=[k];function o(g,r,E,d,c,y){return a(),i("div",null,e)}const _=s(h,[["render",o]]);export{u as __pageData,_ as default}; diff --git "a/assets/\346\217\222\344\273\266_\345\233\276\345\203\217\350\257\206\345\210\253.md.BFdlDtCe.js" "b/assets/\346\217\222\344\273\266_\345\233\276\345\203\217\350\257\206\345\210\253.md.BFdlDtCe.js" deleted file mode 100644 index df14312..0000000 --- "a/assets/\346\217\222\344\273\266_\345\233\276\345\203\217\350\257\206\345\210\253.md.BFdlDtCe.js" +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as t,o as a}from"./chunks/framework.DPHCW6-_.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"插件/图像识别.md","filePath":"插件/图像识别.md","lastUpdated":1721730251000}'),r={name:"插件/图像识别.md"};function o(s,c,n,_,d,p){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default}; diff --git "a/assets/\346\217\222\344\273\266_\345\233\276\345\203\217\350\257\206\345\210\253.md.BFdlDtCe.lean.js" "b/assets/\346\217\222\344\273\266_\345\233\276\345\203\217\350\257\206\345\210\253.md.BFdlDtCe.lean.js" deleted file mode 100644 index df14312..0000000 --- "a/assets/\346\217\222\344\273\266_\345\233\276\345\203\217\350\257\206\345\210\253.md.BFdlDtCe.lean.js" +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as t,o as a}from"./chunks/framework.DPHCW6-_.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"插件/图像识别.md","filePath":"插件/图像识别.md","lastUpdated":1721730251000}'),r={name:"插件/图像识别.md"};function o(s,c,n,_,d,p){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default}; diff --git "a/assets/\346\217\222\344\273\266_\345\261\236\346\200\247\350\257\206\345\210\253.md.D_RJIzfs.js" "b/assets/\346\217\222\344\273\266_\345\261\236\346\200\247\350\257\206\345\210\253.md.D_RJIzfs.js" deleted file mode 100644 index ec9b168..0000000 --- "a/assets/\346\217\222\344\273\266_\345\261\236\346\200\247\350\257\206\345\210\253.md.D_RJIzfs.js" +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as t,o as a}from"./chunks/framework.DPHCW6-_.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"插件/属性识别.md","filePath":"插件/属性识别.md","lastUpdated":1721730251000}'),r={name:"插件/属性识别.md"};function o(s,c,n,_,d,p){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default}; diff --git "a/assets/\346\217\222\344\273\266_\345\261\236\346\200\247\350\257\206\345\210\253.md.D_RJIzfs.lean.js" "b/assets/\346\217\222\344\273\266_\345\261\236\346\200\247\350\257\206\345\210\253.md.D_RJIzfs.lean.js" deleted file mode 100644 index ec9b168..0000000 --- "a/assets/\346\217\222\344\273\266_\345\261\236\346\200\247\350\257\206\345\210\253.md.D_RJIzfs.lean.js" +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as t,o as a}from"./chunks/framework.DPHCW6-_.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"插件/属性识别.md","filePath":"插件/属性识别.md","lastUpdated":1721730251000}'),r={name:"插件/属性识别.md"};function o(s,c,n,_,d,p){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default}; diff --git "a/assets/\346\217\222\344\273\266_\346\217\222\344\273\266\345\210\227\350\241\250.md.z7SVGVqp.js" "b/assets/\346\217\222\344\273\266_\346\217\222\344\273\266\345\210\227\350\241\250.md.CIb4ARET.js" similarity index 87% rename from "assets/\346\217\222\344\273\266_\346\217\222\344\273\266\345\210\227\350\241\250.md.z7SVGVqp.js" rename to "assets/\346\217\222\344\273\266_\346\217\222\344\273\266\345\210\227\350\241\250.md.CIb4ARET.js" index b0c42f6..f708fbf 100644 --- "a/assets/\346\217\222\344\273\266_\346\217\222\344\273\266\345\210\227\350\241\250.md.z7SVGVqp.js" +++ "b/assets/\346\217\222\344\273\266_\346\217\222\344\273\266\345\210\227\350\241\250.md.CIb4ARET.js" @@ -1 +1 @@ -import{_ as t,c as e,o as r,U as d}from"./chunks/framework.DPHCW6-_.js";const f=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"插件/插件列表.md","filePath":"插件/插件列表.md","lastUpdated":1721730251000}'),a={name:"插件/插件列表.md"},n=d('

    YouQu3 插件汇总信息

    NUMNAMEDESCUSABLE
    1youqu-dogtail属性定位插件✔️
    2youqu-imagecenter-rpc基于 RPC 服务的图像识别插件✔️
    3youqu-mousekey键鼠操作插件✔️
    4pydbussendD-Bus 操控插件✔️
    5youqu-pms-driverPMS 测试单驱动插件✔️
    6youqu-button-center相对位移定位插件✔️
    7pytest-mark-manage用例标签化管理插件✔️
    8pytest-youqu-playwright基于 Playwright 的 Web UI 自动化插件✔️
    9youqu-htmlYouQu Html Report✔️
    10pytest-record-video用例失败录屏插件✔️
    11funnylog2全自动日志插件✔️
    12pdocr-rpc基于 RPC 服务的 OCR 识别插件✔️
    13wdotoolWayland 下完美的键鼠工具🚧
    14youqu-git-commit自动统计分析每次 Commit 中用例增删改、方法增删改的详细数据🚧
    15pylinuxauto 🔥Linux GUI 自动化测试模块✔️
    16youqu2-transfer-youqu3迁移工具:将基于YouQu2的用例代码修改为YouQu3✔️
    17youqu3-dragonYouQu3 Web 可视化驱动🚧
    ',2),o=[n];function u(l,y,h,s,i,c){return r(),e("div",null,o)}const m=t(a,[["render",u]]);export{f as __pageData,m as default}; +import{_ as t,c as e,o as r,U as d}from"./chunks/framework.CmHn2guR.js";const f=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"插件/插件列表.md","filePath":"插件/插件列表.md","lastUpdated":1721811560000}'),a={name:"插件/插件列表.md"},n=d('

    YouQu3 插件汇总信息

    NUMNAMEDESCUSABLE
    1youqu-dogtail属性定位插件✔️
    2youqu-imagecenter-rpc基于 RPC 服务的图像识别插件✔️
    3youqu-mousekey键鼠操作插件✔️
    4pydbussendD-Bus 操控插件✔️
    5youqu-pms-driverPMS 测试单驱动插件✔️
    6youqu-button-center相对位移定位插件✔️
    7pytest-mark-manage用例标签化管理插件✔️
    8pytest-youqu-playwright基于 Playwright 的 Web UI 自动化插件✔️
    9youqu-htmlYouQu Html Report✔️
    10pytest-record-video用例失败录屏插件✔️
    11funnylog2全自动日志插件✔️
    12pdocr-rpc基于 RPC 服务的 OCR 识别插件✔️
    13wdotoolWayland 下完美的键鼠工具🚧
    14youqu-git-commit自动统计分析每次 Commit 中用例增删改、方法增删改的详细数据🚧
    15pylinuxauto 🔥Linux GUI 自动化测试模块✔️
    16youqu2-transfer-youqu3迁移工具:将基于YouQu2的用例代码修改为YouQu3✔️
    17youqu3-dragonYouQu3 Web 可视化驱动🚧
    18youqu-html-rpc基于 RPC 服务的测试报告生成插件✔️
    ',2),o=[n];function u(l,h,y,s,i,c){return r(),e("div",null,o)}const m=t(a,[["render",u]]);export{f as __pageData,m as default}; diff --git "a/assets/\346\217\222\344\273\266_\346\217\222\344\273\266\345\210\227\350\241\250.md.CIb4ARET.lean.js" "b/assets/\346\217\222\344\273\266_\346\217\222\344\273\266\345\210\227\350\241\250.md.CIb4ARET.lean.js" new file mode 100644 index 0000000..9ad8b55 --- /dev/null +++ "b/assets/\346\217\222\344\273\266_\346\217\222\344\273\266\345\210\227\350\241\250.md.CIb4ARET.lean.js" @@ -0,0 +1 @@ +import{_ as t,c as e,o as r,U as d}from"./chunks/framework.CmHn2guR.js";const f=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"插件/插件列表.md","filePath":"插件/插件列表.md","lastUpdated":1721811560000}'),a={name:"插件/插件列表.md"},n=d("",2),o=[n];function u(l,h,y,s,i,c){return r(),e("div",null,o)}const m=t(a,[["render",u]]);export{f as __pageData,m as default}; diff --git "a/assets/\346\217\222\344\273\266_\346\217\222\344\273\266\345\210\227\350\241\250.md.z7SVGVqp.lean.js" "b/assets/\346\217\222\344\273\266_\346\217\222\344\273\266\345\210\227\350\241\250.md.z7SVGVqp.lean.js" deleted file mode 100644 index b2aba02..0000000 --- "a/assets/\346\217\222\344\273\266_\346\217\222\344\273\266\345\210\227\350\241\250.md.z7SVGVqp.lean.js" +++ /dev/null @@ -1 +0,0 @@ -import{_ as t,c as e,o as r,U as d}from"./chunks/framework.DPHCW6-_.js";const f=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"插件/插件列表.md","filePath":"插件/插件列表.md","lastUpdated":1721730251000}'),a={name:"插件/插件列表.md"},n=d("",2),o=[n];function u(l,y,h,s,i,c){return r(),e("div",null,o)}const m=t(a,[["render",u]]);export{f as __pageData,m as default}; diff --git "a/assets/\346\217\222\344\273\266_\346\240\207\347\255\276\345\214\226\347\256\241\347\220\206.md.DM3zH1xa.js" "b/assets/\346\217\222\344\273\266_\346\240\207\347\255\276\345\214\226\347\256\241\347\220\206.md.DM3zH1xa.js" deleted file mode 100644 index 19c96f7..0000000 --- "a/assets/\346\217\222\344\273\266_\346\240\207\347\255\276\345\214\226\347\256\241\347\220\206.md.DM3zH1xa.js" +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as t,o as a}from"./chunks/framework.DPHCW6-_.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"插件/标签化管理.md","filePath":"插件/标签化管理.md","lastUpdated":1721730251000}'),r={name:"插件/标签化管理.md"};function o(s,_,c,n,d,p){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default}; diff --git "a/assets/\346\217\222\344\273\266_\346\240\207\347\255\276\345\214\226\347\256\241\347\220\206.md.DM3zH1xa.lean.js" "b/assets/\346\217\222\344\273\266_\346\240\207\347\255\276\345\214\226\347\256\241\347\220\206.md.DM3zH1xa.lean.js" deleted file mode 100644 index 19c96f7..0000000 --- "a/assets/\346\217\222\344\273\266_\346\240\207\347\255\276\345\214\226\347\256\241\347\220\206.md.DM3zH1xa.lean.js" +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as t,o as a}from"./chunks/framework.DPHCW6-_.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"插件/标签化管理.md","filePath":"插件/标签化管理.md","lastUpdated":1721730251000}'),r={name:"插件/标签化管理.md"};function o(s,_,c,n,d,p){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default}; diff --git "a/assets/\346\217\222\344\273\266_\347\224\250\344\276\213\345\275\225\345\261\217.md.C8JU1O4o.js" "b/assets/\346\217\222\344\273\266_\347\224\250\344\276\213\345\275\225\345\261\217.md.C8JU1O4o.js" deleted file mode 100644 index dd9f87b..0000000 --- "a/assets/\346\217\222\344\273\266_\347\224\250\344\276\213\345\275\225\345\261\217.md.C8JU1O4o.js" +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as t,o as a}from"./chunks/framework.DPHCW6-_.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"插件/用例录屏.md","filePath":"插件/用例录屏.md","lastUpdated":1721730251000}'),r={name:"插件/用例录屏.md"};function o(s,c,n,_,d,p){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default}; diff --git "a/assets/\346\217\222\344\273\266_\347\224\250\344\276\213\345\275\225\345\261\217.md.C8JU1O4o.lean.js" "b/assets/\346\217\222\344\273\266_\347\224\250\344\276\213\345\275\225\345\261\217.md.C8JU1O4o.lean.js" deleted file mode 100644 index dd9f87b..0000000 --- "a/assets/\346\217\222\344\273\266_\347\224\250\344\276\213\345\275\225\345\261\217.md.C8JU1O4o.lean.js" +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as t,o as a}from"./chunks/framework.DPHCW6-_.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"插件/用例录屏.md","filePath":"插件/用例录屏.md","lastUpdated":1721730251000}'),r={name:"插件/用例录屏.md"};function o(s,c,n,_,d,p){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default}; diff --git "a/assets/\346\217\222\344\273\266_\347\233\270\345\257\271\344\275\215\347\247\273\345\256\232\344\275\215.md.Bp43fL0p.js" "b/assets/\346\217\222\344\273\266_\347\233\270\345\257\271\344\275\215\347\247\273\345\256\232\344\275\215.md.Bp43fL0p.js" deleted file mode 100644 index ba707f7..0000000 --- "a/assets/\346\217\222\344\273\266_\347\233\270\345\257\271\344\275\215\347\247\273\345\256\232\344\275\215.md.Bp43fL0p.js" +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as t,o as a}from"./chunks/framework.DPHCW6-_.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"插件/相对位移定位.md","filePath":"插件/相对位移定位.md","lastUpdated":1721730251000}'),r={name:"插件/相对位移定位.md"};function o(s,_,c,n,d,p){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default}; diff --git "a/assets/\346\217\222\344\273\266_\347\233\270\345\257\271\344\275\215\347\247\273\345\256\232\344\275\215.md.Bp43fL0p.lean.js" "b/assets/\346\217\222\344\273\266_\347\233\270\345\257\271\344\275\215\347\247\273\345\256\232\344\275\215.md.Bp43fL0p.lean.js" deleted file mode 100644 index ba707f7..0000000 --- "a/assets/\346\217\222\344\273\266_\347\233\270\345\257\271\344\275\215\347\247\273\345\256\232\344\275\215.md.Bp43fL0p.lean.js" +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as t,o as a}from"./chunks/framework.DPHCW6-_.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"插件/相对位移定位.md","filePath":"插件/相对位移定位.md","lastUpdated":1721730251000}'),r={name:"插件/相对位移定位.md"};function o(s,_,c,n,d,p){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default}; diff --git "a/assets/\346\217\222\344\273\266_\351\224\256\351\274\240\346\223\215\344\275\234.md.CXtNF5Lm.js" "b/assets/\346\217\222\344\273\266_\351\224\256\351\274\240\346\223\215\344\275\234.md.CXtNF5Lm.js" deleted file mode 100644 index cc30289..0000000 --- "a/assets/\346\217\222\344\273\266_\351\224\256\351\274\240\346\223\215\344\275\234.md.CXtNF5Lm.js" +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as t,o as a}from"./chunks/framework.DPHCW6-_.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"插件/键鼠操作.md","filePath":"插件/键鼠操作.md","lastUpdated":1721730251000}'),r={name:"插件/键鼠操作.md"};function o(s,c,n,_,d,p){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default}; diff --git "a/assets/\346\217\222\344\273\266_\351\224\256\351\274\240\346\223\215\344\275\234.md.CXtNF5Lm.lean.js" "b/assets/\346\217\222\344\273\266_\351\224\256\351\274\240\346\223\215\344\275\234.md.CXtNF5Lm.lean.js" deleted file mode 100644 index cc30289..0000000 --- "a/assets/\346\217\222\344\273\266_\351\224\256\351\274\240\346\223\215\344\275\234.md.CXtNF5Lm.lean.js" +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as t,o as a}from"./chunks/framework.DPHCW6-_.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"插件/键鼠操作.md","filePath":"插件/键鼠操作.md","lastUpdated":1721730251000}'),r={name:"插件/键鼠操作.md"};function o(s,c,n,_,d,p){return a(),t("div")}const f=e(r,[["render",o]]);export{m as __pageData,f as default}; diff --git "a/assets/\350\247\204\345\210\222_UOS\350\207\252\345\212\250\345\214\226\346\265\213\350\257\225\346\226\271\346\263\225\345\245\227\344\273\266.md.CR8JYwk8.js" "b/assets/\350\247\204\345\210\222_UOS\350\207\252\345\212\250\345\214\226\346\265\213\350\257\225\346\226\271\346\263\225\345\245\227\344\273\266.md.CkgfYNEc.js" similarity index 98% rename from "assets/\350\247\204\345\210\222_UOS\350\207\252\345\212\250\345\214\226\346\265\213\350\257\225\346\226\271\346\263\225\345\245\227\344\273\266.md.CR8JYwk8.js" rename to "assets/\350\247\204\345\210\222_UOS\350\207\252\345\212\250\345\214\226\346\265\213\350\257\225\346\226\271\346\263\225\345\245\227\344\273\266.md.CkgfYNEc.js" index 2ed43f6..b103351 100644 --- "a/assets/\350\247\204\345\210\222_UOS\350\207\252\345\212\250\345\214\226\346\265\213\350\257\225\346\226\271\346\263\225\345\245\227\344\273\266.md.CR8JYwk8.js" +++ "b/assets/\350\247\204\345\210\222_UOS\350\207\252\345\212\250\345\214\226\346\265\213\350\257\225\346\226\271\346\263\225\345\245\227\344\273\266.md.CkgfYNEc.js" @@ -1,4 +1,4 @@ -import{_ as s,c as i,o as a,U as l}from"./chunks/framework.DPHCW6-_.js";const F=JSON.parse('{"title":"UOS 自动化测试方法套件(UMTK)","description":"","frontmatter":{"Author":"mikigo"},"headers":[],"relativePath":"规划/UOS自动化测试方法套件.md","filePath":"规划/UOS自动化测试方法套件.md","lastUpdated":1721730251000}'),e={name:"规划/UOS自动化测试方法套件.md"},n=l(`

    UOS 自动化测试方法套件(UMTK)

    1. 简介

    UOS 自动化测试方法套件,全称:UOS 系统自动化测试操作方法套件(UOS AutoTest Method ToolKit —— UMTK),以下简称测试方法套件,是基于 YouQu3 封装的 UOS 操作系统预装应用的元素操作方法套件。

    测试方法套件是一个独立项目,旨在提供系统预装应用所有的元素的操作方法,这些元素操作方法可以用于自动化用例调用,组装成自动化测试用例。

    2. 工程设计

    2.1. 工程结构

    shell
    uos-method-toolkit
    +import{_ as s,c as i,o as a,U as l}from"./chunks/framework.CmHn2guR.js";const F=JSON.parse('{"title":"UOS 自动化测试方法套件(UMTK)","description":"","frontmatter":{"Author":"mikigo"},"headers":[],"relativePath":"规划/UOS自动化测试方法套件.md","filePath":"规划/UOS自动化测试方法套件.md","lastUpdated":1721811560000}'),e={name:"规划/UOS自动化测试方法套件.md"},n=l(`

    UOS 自动化测试方法套件(UMTK)

    1. 简介

    UOS 自动化测试方法套件,全称:UOS 系统自动化测试操作方法套件(UOS AutoTest Method ToolKit —— UMTK),以下简称测试方法套件,是基于 YouQu3 封装的 UOS 操作系统预装应用的元素操作方法套件。

    测试方法套件是一个独立项目,旨在提供系统预装应用所有的元素的操作方法,这些元素操作方法可以用于自动化用例调用,组装成自动化测试用例。

    2. 工程设计

    2.1. 工程结构

    shell
    uos-method-toolkit
     ├── LICENSE
     ├── README.md
     ├── tests
    diff --git "a/assets/\350\247\204\345\210\222_UOS\350\207\252\345\212\250\345\214\226\346\265\213\350\257\225\346\226\271\346\263\225\345\245\227\344\273\266.md.CR8JYwk8.lean.js" "b/assets/\350\247\204\345\210\222_UOS\350\207\252\345\212\250\345\214\226\346\265\213\350\257\225\346\226\271\346\263\225\345\245\227\344\273\266.md.CkgfYNEc.lean.js"
    similarity index 64%
    rename from "assets/\350\247\204\345\210\222_UOS\350\207\252\345\212\250\345\214\226\346\265\213\350\257\225\346\226\271\346\263\225\345\245\227\344\273\266.md.CR8JYwk8.lean.js"
    rename to "assets/\350\247\204\345\210\222_UOS\350\207\252\345\212\250\345\214\226\346\265\213\350\257\225\346\226\271\346\263\225\345\245\227\344\273\266.md.CkgfYNEc.lean.js"
    index a265340..41cf737 100644
    --- "a/assets/\350\247\204\345\210\222_UOS\350\207\252\345\212\250\345\214\226\346\265\213\350\257\225\346\226\271\346\263\225\345\245\227\344\273\266.md.CR8JYwk8.lean.js"
    +++ "b/assets/\350\247\204\345\210\222_UOS\350\207\252\345\212\250\345\214\226\346\265\213\350\257\225\346\226\271\346\263\225\345\245\227\344\273\266.md.CkgfYNEc.lean.js"
    @@ -1 +1 @@
    -import{_ as s,c as i,o as a,U as l}from"./chunks/framework.DPHCW6-_.js";const F=JSON.parse('{"title":"UOS 自动化测试方法套件(UMTK)","description":"","frontmatter":{"Author":"mikigo"},"headers":[],"relativePath":"规划/UOS自动化测试方法套件.md","filePath":"规划/UOS自动化测试方法套件.md","lastUpdated":1721730251000}'),e={name:"规划/UOS自动化测试方法套件.md"},n=l("",26),t=[n];function p(h,k,d,o,r,c){return a(),i("div",null,t)}const g=s(e,[["render",p]]);export{F as __pageData,g as default};
    +import{_ as s,c as i,o as a,U as l}from"./chunks/framework.CmHn2guR.js";const F=JSON.parse('{"title":"UOS 自动化测试方法套件(UMTK)","description":"","frontmatter":{"Author":"mikigo"},"headers":[],"relativePath":"规划/UOS自动化测试方法套件.md","filePath":"规划/UOS自动化测试方法套件.md","lastUpdated":1721811560000}'),e={name:"规划/UOS自动化测试方法套件.md"},n=l("",26),t=[n];function p(h,k,d,o,r,c){return a(),i("div",null,t)}const g=s(e,[["render",p]]);export{F as __pageData,g as default};
    diff --git "a/assets/\350\247\204\345\210\222_UOS\350\207\252\345\212\250\345\214\226\346\265\213\350\257\225\347\224\250\344\276\213.md.B3_-G2V7.js" "b/assets/\350\247\204\345\210\222_UOS\350\207\252\345\212\250\345\214\226\346\265\213\350\257\225\347\224\250\344\276\213.md.BotOxGzJ.js"
    similarity index 97%
    rename from "assets/\350\247\204\345\210\222_UOS\350\207\252\345\212\250\345\214\226\346\265\213\350\257\225\347\224\250\344\276\213.md.B3_-G2V7.js"
    rename to "assets/\350\247\204\345\210\222_UOS\350\207\252\345\212\250\345\214\226\346\265\213\350\257\225\347\224\250\344\276\213.md.BotOxGzJ.js"
    index 8f3632c..9bc06bf 100644
    --- "a/assets/\350\247\204\345\210\222_UOS\350\207\252\345\212\250\345\214\226\346\265\213\350\257\225\347\224\250\344\276\213.md.B3_-G2V7.js"
    +++ "b/assets/\350\247\204\345\210\222_UOS\350\207\252\345\212\250\345\214\226\346\265\213\350\257\225\347\224\250\344\276\213.md.BotOxGzJ.js"
    @@ -1,4 +1,4 @@
    -import{_ as s,c as i,o as a,U as n}from"./chunks/framework.DPHCW6-_.js";const o=JSON.parse('{"title":"UOS 自动化测试用例","description":"","frontmatter":{"Author":"mikigo"},"headers":[],"relativePath":"规划/UOS自动化测试用例.md","filePath":"规划/UOS自动化测试用例.md","lastUpdated":1721730251000}'),h={name:"规划/UOS自动化测试用例.md"},l=n(`

    UOS 自动化测试用例

    1. 简介

    UOS 自动化测试用例,以下简称测试用例,是基于 YouQu3 和 UMTK 编写的 UOS 系统级测试用例,旨在提供 UOS 系统所有预装应用的测试用例。

    2. 工程设计

    2.1. 工程结构

    shell
    uos-case
    +import{_ as s,c as i,o as a,U as n}from"./chunks/framework.CmHn2guR.js";const o=JSON.parse('{"title":"UOS 自动化测试用例","description":"","frontmatter":{"Author":"mikigo"},"headers":[],"relativePath":"规划/UOS自动化测试用例.md","filePath":"规划/UOS自动化测试用例.md","lastUpdated":1721811560000}'),h={name:"规划/UOS自动化测试用例.md"},l=n(`

    UOS 自动化测试用例

    1. 简介

    UOS 自动化测试用例,以下简称测试用例,是基于 YouQu3 和 UMTK 编写的 UOS 系统级测试用例,旨在提供 UOS 系统所有预装应用的测试用例。

    2. 工程设计

    2.1. 工程结构

    shell
    uos-case
     ├── case 
     │   ├── base_case.py
     │   ├── dde_dock
    diff --git "a/assets/\350\247\204\345\210\222_UOS\350\207\252\345\212\250\345\214\226\346\265\213\350\257\225\347\224\250\344\276\213.md.B3_-G2V7.lean.js" "b/assets/\350\247\204\345\210\222_UOS\350\207\252\345\212\250\345\214\226\346\265\213\350\257\225\347\224\250\344\276\213.md.BotOxGzJ.lean.js"
    similarity index 61%
    rename from "assets/\350\247\204\345\210\222_UOS\350\207\252\345\212\250\345\214\226\346\265\213\350\257\225\347\224\250\344\276\213.md.B3_-G2V7.lean.js"
    rename to "assets/\350\247\204\345\210\222_UOS\350\207\252\345\212\250\345\214\226\346\265\213\350\257\225\347\224\250\344\276\213.md.BotOxGzJ.lean.js"
    index 9227fe9..c09b1ca 100644
    --- "a/assets/\350\247\204\345\210\222_UOS\350\207\252\345\212\250\345\214\226\346\265\213\350\257\225\347\224\250\344\276\213.md.B3_-G2V7.lean.js"
    +++ "b/assets/\350\247\204\345\210\222_UOS\350\207\252\345\212\250\345\214\226\346\265\213\350\257\225\347\224\250\344\276\213.md.BotOxGzJ.lean.js"
    @@ -1 +1 @@
    -import{_ as s,c as i,o as a,U as n}from"./chunks/framework.DPHCW6-_.js";const o=JSON.parse('{"title":"UOS 自动化测试用例","description":"","frontmatter":{"Author":"mikigo"},"headers":[],"relativePath":"规划/UOS自动化测试用例.md","filePath":"规划/UOS自动化测试用例.md","lastUpdated":1721730251000}'),h={name:"规划/UOS自动化测试用例.md"},l=n("",8),p=[l];function t(k,e,F,d,r,y){return a(),i("div",null,p)}const c=s(h,[["render",t]]);export{o as __pageData,c as default};
    +import{_ as s,c as i,o as a,U as n}from"./chunks/framework.CmHn2guR.js";const o=JSON.parse('{"title":"UOS 自动化测试用例","description":"","frontmatter":{"Author":"mikigo"},"headers":[],"relativePath":"规划/UOS自动化测试用例.md","filePath":"规划/UOS自动化测试用例.md","lastUpdated":1721811560000}'),h={name:"规划/UOS自动化测试用例.md"},l=n("",8),p=[l];function t(k,e,F,d,r,y){return a(),i("div",null,p)}const c=s(h,[["render",t]]);export{o as __pageData,c as default};
    diff --git "a/assets/\350\247\204\345\210\222_YouQu3\346\236\266\346\236\204\350\256\276\350\256\241\350\247\204\345\210\222.md.91yXVvWH.js" "b/assets/\350\247\204\345\210\222_YouQu3\346\236\266\346\236\204\350\256\276\350\256\241\350\247\204\345\210\222.md.CzevvL3w.js"
    similarity index 99%
    rename from "assets/\350\247\204\345\210\222_YouQu3\346\236\266\346\236\204\350\256\276\350\256\241\350\247\204\345\210\222.md.91yXVvWH.js"
    rename to "assets/\350\247\204\345\210\222_YouQu3\346\236\266\346\236\204\350\256\276\350\256\241\350\247\204\345\210\222.md.CzevvL3w.js"
    index 1c15ad0..1404283 100644
    --- "a/assets/\350\247\204\345\210\222_YouQu3\346\236\266\346\236\204\350\256\276\350\256\241\350\247\204\345\210\222.md.91yXVvWH.js"
    +++ "b/assets/\350\247\204\345\210\222_YouQu3\346\236\266\346\236\204\350\256\276\350\256\241\350\247\204\345\210\222.md.CzevvL3w.js"
    @@ -1,4 +1,4 @@
    -import{_ as s,c as i,o as a,U as l,ae as n,af as h}from"./chunks/framework.DPHCW6-_.js";const u=JSON.parse('{"title":"YouQu3 架构设计规划","description":"","frontmatter":{"Author":"mikigo"},"headers":[],"relativePath":"规划/YouQu3架构设计规划.md","filePath":"规划/YouQu3架构设计规划.md","lastUpdated":1721730251000}'),e={name:"规划/YouQu3架构设计规划.md"},t=l('

    YouQu3 架构设计规划

    1. 背景

    YouQu(YouQu2) 是 2021 年成都测试团队开始内部孵化的项目,旨在开发一个简单易用,功能强大的自动化测试框架。经过了 2 年多的持续开发优化,2023 年 8 月正式在 linuxdeepin 社区开源,2024 年 5 月在欧拉社区开源。从开源至今发布了 1.0 和 2.0 两个大版本,小版本更新了数十个。

    YouQu2 在公司内部已经被大量的自动化测试项目使用,在公司的多个自动化流程中运行得很好,能满足公司对自动化测试的业务需求,也得到了公司领导、同事们、内外部开发者们的认可。

    但 YouQu2 在现有框架下,仍然存在一些不尽人意的地方,比如:

    • 每次使用需要初始化框架工程及单独做环境部署,操作较为复杂;
    • 用例开发环境下更新版本不方便、源代码暴露在用户面前;
    • 导致框架代码容易被用户修改;
    • 绑定了太多公司的业务;
    • 一些底层模块或接口命名不优雅;
    • 对纯 CLI 操作系统环境支持不够友好;

    等等。

    有些问题处理起来必然会影响到框架的兼容性,势必对现有公司自动化用例、业务流程有一些影响,甚至有些问题在现有框架结构下根本无法解决,因此我们才萌生了对框架结构进行重新设计想法,我们想要设计开发一个更加简单易用、更加纯粹、扩展性和兼容性更好的自动化测试框架 —— YouQu3

    2. 目标

    YouQu3 旨在成为下一代 Linux 自动化测试框架,在继承 YouQu2 诸多亮点功能的同时解决其遇到的问题,同时对各功能进行插件化、模块化改造,全面优化框架接口调用机制。

    • 以 Python 包的形式提供框架能力,方便安装、更新。
    • 支持离线部署,用例整体打包交付之后,可以在无网络环境下直接运行。
    • 极致轻量化、可定制化依赖,可以根据测试项目类型安装对应的依赖。
    • 功能可插拔,以插件的形式提供功能,不安装插件的情况下框架也能正常运行。
    • 可视化配置,在浏览器中输入一些配置后即可驱动测试用例执行,搭配远程执行功能,可实现群控测试机执行。
    • 支持非开发者下运行,简化系统环境部署。

    价值:

    • 使用更简单方便,降低使用门槛。
    • 环境依赖可以一键打包交付,适合有离线部署需求的用户。
    • 安全性稳定性更好,提高用例开发效率,提高 CI/CD 运行稳定性。
    • 全面插件化模块化,功能扩展性更好。
    • 框架和插件库独立维护更新,互不影响。

    3. 架构设计

    3.1. 总体方案

    框架层提供总线服务,各功能以插件的方式接入,功能插件可插拔,由用例层决定使用哪些功能对应安装哪些插件,实现插件依赖的定制化。

    YouQu3 框架代码及插件库以 Python 三方包的形式提供,用例层直接 import 使用,框架源代码不直接呈现在用户面前,用户只需要关注用例、方法代码。

    框架提供驱动执行的命令,可以在通过命令行快速驱动测试用例执行,通过命令行参数控制,支持多种用例驱动模式,如:路径驱动、标签驱动、关键词驱动等等,执行模式支持本地驱动执行和远程驱动执行。

    框架也提供初始化用例工程的功能,一键生成用例工程模板代码,生成的用例工程遵循完整的 PO 设计模式,用例层、方法层基础代码自动生成,资源目录、Git 管理、环境依赖管理等相关功能的目录文件也都一键生成,让用户能专注于用例逻辑的编写和维护。

    3.2. 架构设计

    3.3. 整体数据流

    • 框架驱动命令传递命令行参数给执行管理器,执行管理器接收命令行参数并读取公共配置项驱动用例执行;

    • 用例执行过程中动态调用 YouQu3 底层功能,并动态加载 YouQu3 插件;

    • 若插件已经安装,则正常调用,否则提示用户进行安装,抛异常程序终止;

    • 用例执行完成后生成多种测试报告,并根据需要将测试结果,通过配置的接口进行数据回填。

    3.4. 详细设计

    详细描述各模块工作方式。

    3.4.1. 驱动执行管理

    框架提供驱动命令:youqu3,用于统一管理命令行参数驱动用例执行,驱动命令将命令行参数传递给框架底层 driver 模块(驱动),driver 获取命令行参数并结合配置项,解析测试策略,从而驱动测试用例执行。

    支持本地和远程执行模式:

    • 支持基于用例标签化管理驱动用例执行
    • 支持基于测试单驱动插件驱动用例执行
    • 支持基于关键词驱动用例执行
    • 支持用例目录或文件路径驱动执行

    3.4.2. 配置项管理

    YouQu3 配置项管理,采用命令行参数 + 公共配置的形式;

    • 命令行参数可以通过驱动命令提供入参选项,显示的传入参数值。
    • 公共配置为框架提供的一些具有默认值的配置项,原则上不通过修改配置文件的方式修改,可以通过系统环境变量或修改 setting 对象的属性值。
    • 用例工程配置模块建议继承 _Setting 配置类。
    • 不再提供 ini 配置文件管理配置项。

    3.4.3. 框架总线接口

    框架底层对各功能插件提供 插槽 中间件,插件如果已经安装,上层用例就能通过框架动态调用插件提供的功能,同时框架可以在中间件中对插件功能进行增强或修改。

    若插件没有被安装,框架可以正常运行,但若用例层调用了此插件提供的功能,此时会抛异常,并提示用户安装对应插件。

    3.4.4. 按测试类型管理插件

    框架的安装命令可以根据用例工程所属的测试类型,自动安装框架及改测试类型需要的插件依赖,不需要用户去了解和思考哪些插件适合哪种测试类型。

    3.4.5. 环境依赖管理

    采用虚拟环境管理依赖项,虚拟环境默认在用例功能根目录下创建,支持对依赖环境进行一键打包,也可以方便对虚拟环境的管理和维护。

    4. 用例工程设计

    用例工程支持一键创建:

    shell
    $ youqu3 init

    4.1. 用例工程结构

    shell
    autotest-my-case    # 用例工程名称
    +import{_ as s,c as i,o as a,U as l,aa as n,ab as h}from"./chunks/framework.CmHn2guR.js";const u=JSON.parse('{"title":"YouQu3 架构设计规划","description":"","frontmatter":{"Author":"mikigo"},"headers":[],"relativePath":"规划/YouQu3架构设计规划.md","filePath":"规划/YouQu3架构设计规划.md","lastUpdated":1721811560000}'),e={name:"规划/YouQu3架构设计规划.md"},t=l('

    YouQu3 架构设计规划

    1. 背景

    YouQu(YouQu2) 是 2021 年成都测试团队开始内部孵化的项目,旨在开发一个简单易用,功能强大的自动化测试框架。经过了 2 年多的持续开发优化,2023 年 8 月正式在 linuxdeepin 社区开源,2024 年 5 月在欧拉社区开源。从开源至今发布了 1.0 和 2.0 两个大版本,小版本更新了数十个。

    YouQu2 在公司内部已经被大量的自动化测试项目使用,在公司的多个自动化流程中运行得很好,能满足公司对自动化测试的业务需求,也得到了公司领导、同事们、内外部开发者们的认可。

    但 YouQu2 在现有框架下,仍然存在一些不尽人意的地方,比如:

    • 每次使用需要初始化框架工程及单独做环境部署,操作较为复杂;
    • 用例开发环境下更新版本不方便、源代码暴露在用户面前;
    • 导致框架代码容易被用户修改;
    • 绑定了太多公司的业务;
    • 一些底层模块或接口命名不优雅;
    • 对纯 CLI 操作系统环境支持不够友好;

    等等。

    有些问题处理起来必然会影响到框架的兼容性,势必对现有公司自动化用例、业务流程有一些影响,甚至有些问题在现有框架结构下根本无法解决,因此我们才萌生了对框架结构进行重新设计想法,我们想要设计开发一个更加简单易用、更加纯粹、扩展性和兼容性更好的自动化测试框架 —— YouQu3

    2. 目标

    YouQu3 旨在成为下一代 Linux 自动化测试框架,在继承 YouQu2 诸多亮点功能的同时解决其遇到的问题,同时对各功能进行插件化、模块化改造,全面优化框架接口调用机制。

    • 以 Python 包的形式提供框架能力,方便安装、更新。
    • 支持离线部署,用例整体打包交付之后,可以在无网络环境下直接运行。
    • 极致轻量化、可定制化依赖,可以根据测试项目类型安装对应的依赖。
    • 功能可插拔,以插件的形式提供功能,不安装插件的情况下框架也能正常运行。
    • 可视化配置,在浏览器中输入一些配置后即可驱动测试用例执行,搭配远程执行功能,可实现群控测试机执行。
    • 支持非开发者下运行,简化系统环境部署。

    价值:

    • 使用更简单方便,降低使用门槛。
    • 环境依赖可以一键打包交付,适合有离线部署需求的用户。
    • 安全性稳定性更好,提高用例开发效率,提高 CI/CD 运行稳定性。
    • 全面插件化模块化,功能扩展性更好。
    • 框架和插件库独立维护更新,互不影响。

    3. 架构设计

    3.1. 总体方案

    框架层提供总线服务,各功能以插件的方式接入,功能插件可插拔,由用例层决定使用哪些功能对应安装哪些插件,实现插件依赖的定制化。

    YouQu3 框架代码及插件库以 Python 三方包的形式提供,用例层直接 import 使用,框架源代码不直接呈现在用户面前,用户只需要关注用例、方法代码。

    框架提供驱动执行的命令,可以在通过命令行快速驱动测试用例执行,通过命令行参数控制,支持多种用例驱动模式,如:路径驱动、标签驱动、关键词驱动等等,执行模式支持本地驱动执行和远程驱动执行。

    框架也提供初始化用例工程的功能,一键生成用例工程模板代码,生成的用例工程遵循完整的 PO 设计模式,用例层、方法层基础代码自动生成,资源目录、Git 管理、环境依赖管理等相关功能的目录文件也都一键生成,让用户能专注于用例逻辑的编写和维护。

    3.2. 架构设计

    3.3. 整体数据流

    • 框架驱动命令传递命令行参数给执行管理器,执行管理器接收命令行参数并读取公共配置项驱动用例执行;

    • 用例执行过程中动态调用 YouQu3 底层功能,并动态加载 YouQu3 插件;

    • 若插件已经安装,则正常调用,否则提示用户进行安装,抛异常程序终止;

    • 用例执行完成后生成多种测试报告,并根据需要将测试结果,通过配置的接口进行数据回填。

    3.4. 详细设计

    详细描述各模块工作方式。

    3.4.1. 驱动执行管理

    框架提供驱动命令:youqu3,用于统一管理命令行参数驱动用例执行,驱动命令将命令行参数传递给框架底层 driver 模块(驱动),driver 获取命令行参数并结合配置项,解析测试策略,从而驱动测试用例执行。

    支持本地和远程执行模式:

    • 支持基于用例标签化管理驱动用例执行
    • 支持基于测试单驱动插件驱动用例执行
    • 支持基于关键词驱动用例执行
    • 支持用例目录或文件路径驱动执行

    3.4.2. 配置项管理

    YouQu3 配置项管理,采用命令行参数 + 公共配置的形式;

    • 命令行参数可以通过驱动命令提供入参选项,显示的传入参数值。
    • 公共配置为框架提供的一些具有默认值的配置项,原则上不通过修改配置文件的方式修改,可以通过系统环境变量或修改 setting 对象的属性值。
    • 用例工程配置模块建议继承 _Setting 配置类。
    • 不再提供 ini 配置文件管理配置项。

    3.4.3. 框架总线接口

    框架底层对各功能插件提供 插槽 中间件,插件如果已经安装,上层用例就能通过框架动态调用插件提供的功能,同时框架可以在中间件中对插件功能进行增强或修改。

    若插件没有被安装,框架可以正常运行,但若用例层调用了此插件提供的功能,此时会抛异常,并提示用户安装对应插件。

    3.4.4. 按测试类型管理插件

    框架的安装命令可以根据用例工程所属的测试类型,自动安装框架及改测试类型需要的插件依赖,不需要用户去了解和思考哪些插件适合哪种测试类型。

    3.4.5. 环境依赖管理

    采用虚拟环境管理依赖项,虚拟环境默认在用例功能根目录下创建,支持对依赖环境进行一键打包,也可以方便对虚拟环境的管理和维护。

    4. 用例工程设计

    用例工程支持一键创建:

    shell
    $ youqu3 init

    4.1. 用例工程结构

    shell
    autotest-my-case    # 用例工程名称
     ├── case    # 用例层目录
     │   ├── __init__.py
     │   ├── assert_res    # 断言资源
    diff --git "a/assets/\350\247\204\345\210\222_YouQu3\346\236\266\346\236\204\350\256\276\350\256\241\350\247\204\345\210\222.md.91yXVvWH.lean.js" "b/assets/\350\247\204\345\210\222_YouQu3\346\236\266\346\236\204\350\256\276\350\256\241\350\247\204\345\210\222.md.CzevvL3w.lean.js"
    similarity index 63%
    rename from "assets/\350\247\204\345\210\222_YouQu3\346\236\266\346\236\204\350\256\276\350\256\241\350\247\204\345\210\222.md.91yXVvWH.lean.js"
    rename to "assets/\350\247\204\345\210\222_YouQu3\346\236\266\346\236\204\350\256\276\350\256\241\350\247\204\345\210\222.md.CzevvL3w.lean.js"
    index ea68e8f..89046b9 100644
    --- "a/assets/\350\247\204\345\210\222_YouQu3\346\236\266\346\236\204\350\256\276\350\256\241\350\247\204\345\210\222.md.91yXVvWH.lean.js"
    +++ "b/assets/\350\247\204\345\210\222_YouQu3\346\236\266\346\236\204\350\256\276\350\256\241\350\247\204\345\210\222.md.CzevvL3w.lean.js"
    @@ -1 +1 @@
    -import{_ as s,c as i,o as a,U as l,ae as n,af as h}from"./chunks/framework.DPHCW6-_.js";const u=JSON.parse('{"title":"YouQu3 架构设计规划","description":"","frontmatter":{"Author":"mikigo"},"headers":[],"relativePath":"规划/YouQu3架构设计规划.md","filePath":"规划/YouQu3架构设计规划.md","lastUpdated":1721730251000}'),e={name:"规划/YouQu3架构设计规划.md"},t=l("",81),p=[t];function k(d,r,o,c,g,y){return a(),i("div",null,p)}const E=s(e,[["render",k]]);export{u as __pageData,E as default};
    +import{_ as s,c as i,o as a,U as l,aa as n,ab as h}from"./chunks/framework.CmHn2guR.js";const u=JSON.parse('{"title":"YouQu3 架构设计规划","description":"","frontmatter":{"Author":"mikigo"},"headers":[],"relativePath":"规划/YouQu3架构设计规划.md","filePath":"规划/YouQu3架构设计规划.md","lastUpdated":1721811560000}'),e={name:"规划/YouQu3架构设计规划.md"},t=l("",81),p=[t];function k(d,r,o,c,g,y){return a(),i("div",null,p)}const E=s(e,[["render",k]]);export{u as __pageData,E as default};
    diff --git a/hashmap.json b/hashmap.json
    index 19faf0a..0224877 100644
    --- a/hashmap.json
    +++ b/hashmap.json
    @@ -1 +1 @@
    -{"指南_与生俱来_json报告.md":"D2vdy5GH","指南_驱动执行_自定义执行.md":"C28GvzpJ","指南_与生俱来_动态等待.md":"IkHDSX71","指南_简介_快速开始.md":"CwwrxYav","实践_方法开发.md":"BWR_bq88","指南_可选功能_其他插件.md":"CXR53JYW","指南_与生俱来_命令行交互.md":"BptXycay","指南_驱动执行_本地执行.md":"CzhByQZt","插件_ocr识别.md":"CjhymMpv","指南_与生俱来_脚手架工具.md":"_4kYNQ0-","index.md":"DRE0EPUR","指南_驱动执行_远程执行.md":"nIgP-3L4","指南_可选功能_用例录屏.md":"DtHUI1fi","插件_dbus操控.md":"CeGraewc","实践_用例开发.md":"v6qenabx","指南_可选功能_gui自动化.md":"BJX_VFMT","指南_与生俱来_远程交互控制.md":"D7YR0MUZ","规划_youqu3架构设计规划.md":"91yXVvWH","指南_可选功能_webui自动化.md":"CEDG81rR","指南_简介_youqu3是什么.md":"Do-dS-Ub","指南_与生俱来_全自动日志.md":"DqT5eW6S","指南_可选功能_dbus自动化.md":"CRFVKGj2","指南_可选功能_http自动化.md":"DhSj0Su1","指南_与生俱来_前后钩子.md":"hQClU6uO","插件_全自动日志.md":"B143y16Z","插件_相对位移定位.md":"Bp43fL0p","指南_环境管理_原生环境.md":"BEjyPvIO","指南_可选功能_html报告.md":"DCluV8mQ","指南_环境管理_虚拟环境.md":"gwNWe-UA","指南_与生俱来_标签化管理.md":"CyRzyxDN","插件_用例录屏.md":"C8JU1O4o","插件_webui自动化.md":"CtMTpWpQ","插件_插件列表.md":"z7SVGVqp","规划_uos自动化测试方法套件.md":"CR8JYwk8","规划_uos自动化测试用例.md":"B3_-G2V7","插件_属性识别.md":"D_RJIzfs","插件_键鼠操作.md":"CXtNF5Lm","插件_html测试报告.md":"DuXpML5f","指南_与生俱来_断言语句.md":"Bn3HXCZW","插件_pms测试单驱动.md":"E4mYko8B","指南_可选功能_远程交互控制.md":"CrJSz2qT","插件_标签化管理.md":"DM3zH1xa","插件_图像识别.md":"BFdlDtCe"}
    +{"指南_与生俱来_命令行交互.md":"BHqK9b4n","指南_与生俱来_远程交互控制.md":"5-jXcSEG","实践_用例开发.md":"PxhyBWut","指南_与生俱来_标签化管理.md":"DfTspV9w","指南_可选功能_dbus自动化.md":"COtv3Lzz","指南_与生俱来_json报告.md":"Bjj89P7D","指南_与生俱来_前后钩子.md":"ClInqwhb","指南_可选功能_gui自动化.md":"DBW6nEBC","实践_方法开发.md":"CmVENVCW","指南_可选功能_html报告.md":"C-BYLq8N","指南_与生俱来_脚手架工具.md":"BZG4ssK3","指南_可选功能_其他插件.md":"D-HEH_ED","指南_可选功能_远程交互控制.md":"HZsgiASX","指南_简介_快速开始.md":"GAtEuFuV","指南_与生俱来_断言语句.md":"M_RN9N9Z","指南_可选功能_用例录屏.md":"h64VCE8l","index.md":"OOHsF2lk","指南_简介_youqu3是什么.md":"CVE7Flj2","插件_插件列表.md":"CIb4ARET","指南_驱动执行_远程执行.md":"DMezCpgw","规划_uos自动化测试方法套件.md":"CkgfYNEc","指南_驱动执行_自定义执行.md":"Dg7pAOMa","指南_可选功能_http自动化.md":"kixoRIxQ","指南_可选功能_webui自动化.md":"DIXaDEw6","规划_uos自动化测试用例.md":"BotOxGzJ","指南_与生俱来_动态等待.md":"BqXJUEvM","指南_环境管理_原生环境.md":"DOl6di5z","规划_youqu3架构设计规划.md":"CzevvL3w","指南_与生俱来_全自动日志.md":"s-ehohkA","指南_环境管理_虚拟环境.md":"D91OI9qi","指南_驱动执行_本地执行.md":"BKUB9IwX"}
    diff --git a/index.html b/index.html
    index b4fa558..18848d1 100644
    --- a/index.html
    +++ b/index.html
    @@ -8,18 +8,18 @@
         
         
         
    -    
    +    
         
    -    
    -    
    -    
    +    
    +    
    +    
         
         
         
       
       
         
    Skip to content

    YouQu3

    Next-Gen Linux Autotest Framework

    让 Linux 自动化测试变得更简单

    YouQu3

    Contributors

    感谢以下所有人的贡献与参与

    - + \ No newline at end of file diff --git "a/\345\256\236\350\267\265/\346\226\271\346\263\225\345\274\200\345\217\221.html" "b/\345\256\236\350\267\265/\346\226\271\346\263\225\345\274\200\345\217\221.html" index fb63e09..5a30c01 100644 --- "a/\345\256\236\350\267\265/\346\226\271\346\263\225\345\274\200\345\217\221.html" +++ "b/\345\256\236\350\267\265/\346\226\271\346\263\225\345\274\200\345\217\221.html" @@ -8,18 +8,18 @@ - + - - - + + + -
    Skip to content
    📔 阅读量:
    - +
    Skip to content
    📔 阅读量:
    + \ No newline at end of file diff --git "a/\345\256\236\350\267\265/\347\224\250\344\276\213\345\274\200\345\217\221.html" "b/\345\256\236\350\267\265/\347\224\250\344\276\213\345\274\200\345\217\221.html" index 10a7f55..3b2afb7 100644 --- "a/\345\256\236\350\267\265/\347\224\250\344\276\213\345\274\200\345\217\221.html" +++ "b/\345\256\236\350\267\265/\347\224\250\344\276\213\345\274\200\345\217\221.html" @@ -8,18 +8,18 @@ - + - - - + + + -
    Skip to content
    📔 阅读量:
    - +
    Skip to content
    📔 阅读量:
    + \ No newline at end of file diff --git "a/\346\214\207\345\215\227/\344\270\216\347\224\237\344\277\261\346\235\245/JSON\346\212\245\345\221\212.html" "b/\346\214\207\345\215\227/\344\270\216\347\224\237\344\277\261\346\235\245/JSON\346\212\245\345\221\212.html" index 235c72d..bf712fd 100644 --- "a/\346\214\207\345\215\227/\344\270\216\347\224\237\344\277\261\346\235\245/JSON\346\212\245\345\221\212.html" +++ "b/\346\214\207\345\215\227/\344\270\216\347\224\237\344\277\261\346\235\245/JSON\346\212\245\345\221\212.html" @@ -8,11 +8,11 @@ - + - - - + + + @@ -75,8 +75,8 @@ "nodeid": "test_foo.py::TestFoo", "message": "cannot collect test class 'TestFoo' because it has a __init__ constructor" } -]
    - +]
+ \ No newline at end of file diff --git "a/\346\214\207\345\215\227/\344\270\216\347\224\237\344\277\261\346\235\245/assert.png" "b/\346\214\207\345\215\227/\344\270\216\347\224\237\344\277\261\346\235\245/assert.png" deleted file mode 100644 index c0b4bb1..0000000 Binary files "a/\346\214\207\345\215\227/\344\270\216\347\224\237\344\277\261\346\235\245/assert.png" and /dev/null differ diff --git "a/\346\214\207\345\215\227/\344\270\216\347\224\237\344\277\261\346\235\245/\345\205\250\350\207\252\345\212\250\346\227\245\345\277\227.html" "b/\346\214\207\345\215\227/\344\270\216\347\224\237\344\277\261\346\235\245/\345\205\250\350\207\252\345\212\250\346\227\245\345\277\227.html" index 1875616..f37ad79 100644 --- "a/\346\214\207\345\215\227/\344\270\216\347\224\237\344\277\261\346\235\245/\345\205\250\350\207\252\345\212\250\346\227\245\345\277\227.html" +++ "b/\346\214\207\345\215\227/\344\270\216\347\224\237\344\277\261\346\235\245/\345\205\250\350\207\252\345\212\250\346\227\245\345\277\227.html" @@ -8,11 +8,11 @@ - + - - - + + + @@ -59,8 +59,8 @@ :return: """ element = tuple(map(lambda x: f"{Config.PIC_RES_PATH}/{x}", elements)) - return cls.find_image(*element, multiple=multiple)

调用方法时:

python
DfmWidget.find_app_image("dfm_001")

自动输出的日志:

bash
>> x86_64-uos-6: 02/28 17:48:47 | INFO  | logger: [find_app_image]: 查找图片 dfm_001.png 在屏幕中相似度大于 0.9 的坐标

加上装饰器 @log 之后,方法层所有的函数(包括实例方法、类方法、静态方法)都不需要再写日志代码,执行的时候会自动输出,并且所有调用的方法会以 allure.step 的方式,展示在 allure 报告中,在报告中更能一目了然的看到用例执行步骤。

日志模板语法

通过观察前面的例子,细心的同学可能还发现了一个小细节:函数功能说明中,两对大括号中的内容 作为变量输出出来了;

没错,这就是我们参考Djangojinja2 的模板语法设计出的日志模板语法,使用方法很简单,用两对大括号把函数的参数括起来,这样在日志输出的时候就能把调用函数时参数的值输出出来。

- + return cls.find_image(*element, multiple=multiple)

调用方法时:

python
DfmWidget.find_app_image("dfm_001")

自动输出的日志:

bash
>> x86_64-uos-6: 02/28 17:48:47 | INFO  | logger: [find_app_image]: 查找图片 dfm_001.png 在屏幕中相似度大于 0.9 的坐标

加上装饰器 @log 之后,方法层所有的函数(包括实例方法、类方法、静态方法)都不需要再写日志代码,执行的时候会自动输出,并且所有调用的方法会以 allure.step 的方式,展示在 allure 报告中,在报告中更能一目了然的看到用例执行步骤。

日志模板语法

通过观察前面的例子,细心的同学可能还发现了一个小细节:函数功能说明中,两对大括号中的内容 作为变量输出出来了;

没错,这就是我们参考Djangojinja2 的模板语法设计出的日志模板语法,使用方法很简单,用两对大括号把函数的参数括起来,这样在日志输出的时候就能把调用函数时参数的值输出出来。

+ \ No newline at end of file diff --git "a/\346\214\207\345\215\227/\344\270\216\347\224\237\344\277\261\346\235\245/\345\211\215\345\220\216\351\222\251\345\255\220.html" "b/\346\214\207\345\215\227/\344\270\216\347\224\237\344\277\261\346\235\245/\345\211\215\345\220\216\351\222\251\345\255\220.html" index b53ca71..bd4c2c7 100644 --- "a/\346\214\207\345\215\227/\344\270\216\347\224\237\344\277\261\346\235\245/\345\211\215\345\220\216\351\222\251\345\255\220.html" +++ "b/\346\214\207\345\215\227/\344\270\216\347\224\237\344\277\261\346\235\245/\345\211\215\345\220\216\351\222\251\345\255\220.html" @@ -8,11 +8,11 @@ - + - - - + + + @@ -26,8 +26,8 @@ ├── case ├── method ├── job_end.py -...

后置命令行入参钩子

框架支持通过 --job-end 入参,参数值可以传递任意命令行命令,框架会在用例执行之前执行。

bash
youqu3 run --job-end "python3 do_what_you_want_do.py"

就像写 Shell 脚本一样即可:

bash
youqu3 run --job-end "sudo apt install htop;git clone ..."

- +...

后置命令行入参钩子

框架支持通过 --job-end 入参,参数值可以传递任意命令行命令,框架会在用例执行之前执行。

bash
youqu3 run --job-end "python3 do_what_you_want_do.py"

就像写 Shell 脚本一样即可:

bash
youqu3 run --job-end "sudo apt install htop;git clone ..."

+ \ No newline at end of file diff --git "a/\346\214\207\345\215\227/\344\270\216\347\224\237\344\277\261\346\235\245/\345\212\250\346\200\201\347\255\211\345\276\205.html" "b/\346\214\207\345\215\227/\344\270\216\347\224\237\344\277\261\346\235\245/\345\212\250\346\200\201\347\255\211\345\276\205.html" index 840b03e..4f507e6 100644 --- "a/\346\214\207\345\215\227/\344\270\216\347\224\237\344\277\261\346\235\245/\345\212\250\346\200\201\347\255\211\345\276\205.html" +++ "b/\346\214\207\345\215\227/\344\270\216\347\224\237\344\277\261\346\235\245/\345\212\250\346\200\201\347\255\211\345\276\205.html" @@ -8,11 +8,11 @@ - + - - - + + + @@ -24,8 +24,8 @@ aarch64 = 1.5 loongarch64 = 2 mips64 = 2.5 -sw_64 = 2.5

元素识别动态等待

- +sw_64 = 2.5

元素识别动态等待

+ \ No newline at end of file diff --git "a/\346\214\207\345\215\227/\344\270\216\347\224\237\344\277\261\346\235\245/\345\221\275\344\273\244\350\241\214\344\272\244\344\272\222.html" "b/\346\214\207\345\215\227/\344\270\216\347\224\237\344\277\261\346\235\245/\345\221\275\344\273\244\350\241\214\344\272\244\344\272\222.html" index 65c6dc2..b333ebb 100644 --- "a/\346\214\207\345\215\227/\344\270\216\347\224\237\344\277\261\346\235\245/\345\221\275\344\273\244\350\241\214\344\272\244\344\272\222.html" +++ "b/\346\214\207\345\215\227/\344\270\216\347\224\237\344\277\261\346\235\245/\345\221\275\344\273\244\350\241\214\344\272\244\344\272\222.html" @@ -8,11 +8,11 @@ - + - - - + + + @@ -34,8 +34,8 @@ RemoteCmd("user", "ip", "password").remote_sudo_run("apt install htop")

expect交互

python
from youqu3.cmd import RemoteCmd
 
 # TODO
-# RemoteCmd("user", "ip", "password").remote_expect_run("sudo apt install htop")
- +# RemoteCmd("user", "ip", "password").remote_expect_run("sudo apt install htop")
+ \ No newline at end of file diff --git "a/\346\214\207\345\215\227/\344\270\216\347\224\237\344\277\261\346\235\245/\346\226\255\350\250\200\350\257\255\345\217\245.html" "b/\346\214\207\345\215\227/\344\270\216\347\224\237\344\277\261\346\235\245/\346\226\255\350\250\200\350\257\255\345\217\245.html" index 85fb8a5..63cadfe 100644 --- "a/\346\214\207\345\215\227/\344\270\216\347\224\237\344\277\261\346\235\245/\346\226\255\350\250\200\350\257\255\345\217\245.html" +++ "b/\346\214\207\345\215\227/\344\270\216\347\224\237\344\277\261\346\235\245/\346\226\255\350\250\200\350\257\255\345\217\245.html" @@ -8,17 +8,17 @@ - + - - - + + + -
Skip to content
📔 阅读量:

断言语句

YouQu3 自带多种断言语句,几乎满足了所有的断言场景;

用例中使用方法

APP 工程自有断言模块:assert_method.py,它继承了 YouQu3 框架的断言库:

python
# assert_method.py
+    
Skip to content
📔 阅读量:

断言语句

YouQu3 自带多种断言语句,几乎满足了所有的断言场景;

用例中使用方法

APP 工程自有断言模块:assert_method.py,它继承了 YouQu3 框架的断言库:

python
# assert_method.py
 
 from youqu3.assertx import Assert
 
@@ -365,8 +365,8 @@
                     f"通过OCR识别到不应存在的文案:{dict(res)}",
                     f"{pic if pic else setting.SCREEN_CACHE}",
                 )
-            )
- + )
+ \ No newline at end of file diff --git "a/\346\214\207\345\215\227/\344\270\216\347\224\237\344\277\261\346\235\245/\346\240\207\347\255\276\345\214\226\347\256\241\347\220\206.html" "b/\346\214\207\345\215\227/\344\270\216\347\224\237\344\277\261\346\235\245/\346\240\207\347\255\276\345\214\226\347\256\241\347\220\206.html" index e64d2b6..83af1f7 100644 --- "a/\346\214\207\345\215\227/\344\270\216\347\224\237\344\277\261\346\235\245/\346\240\207\347\255\276\345\214\226\347\256\241\347\220\206.html" +++ "b/\346\214\207\345\215\227/\344\270\216\347\224\237\344\277\261\346\235\245/\346\240\207\347\255\276\345\214\226\347\256\241\347\220\206.html" @@ -8,18 +8,18 @@ - + - - - + + + -
Skip to content
📔 阅读量:

标签化管理

使用说明

在 CSV 文件中写入标签:

脚本文件ID跳过原因确认修复废弃用例...
001skip-xxxfixed-xxxremoved-xxx...

CSV文件与脚本对应关系

  1. 在子项目目录下新建 CSV文件,用于保存用例标签,以 用例脚本的 py 文件去掉首字符串 "test_" ,去掉用例序号后的字符串,取中间的名称作为 csv 文件的文件名 。

举例

相册的用例文件为 test_album_001.py001 表示用例的ID(也可以是自定义的数字代表用例序号),此时 CSV 文件名就应为 album.csv

  1. 第 1 列脚本文件ID,从第 2 列之后的所有列都是一个用例标签,标签可以无序,可以随意新增。

特殊标签

跳过原因确认修复废弃用例是特殊的标签,后面会详细讲到

对于用例规模比较大的应用,比如文件管理器,建议分模块,每个模块建立一个 CSV 文件,所有 CSV 文件建议放在一个 tags 目录下。

是否分模块维护取决于应用的用例复杂度,但标签化管理的核心目的是集中化管理用例的标签,因此若 CSV 文件太多了也是一个很糟糕的事情。

跳过用例

传统跳过用例的方式是在用例脚本里面给用例添加装饰器 (@pytest.mark.skip),解除跳过时将装饰器代码删掉,这种方式需要修改用例代码,而通过 csv 文件来管理跳过用例则会方便很多;

将跳过用例操作也整合进入用例标签,在 csv 文件中新增一列为“跳过原因”;

1. 固定跳过

示例:

脚本文件ID...(各种用例标签)跳过原因
679537...skip-受到某新需求影响
  • 如果应用受到新需求影响需要跳过,则在此列备注具体的跳过原因。跳过的原因统一标签开头为 “skip-XXX”;
  • 用例执行时判断 csv 文件里面跳过原因列是否存在跳过标签,存在跳过标签则用例也不会被执行,最终的用例状态会被标签为 SKIPED

2. 条件判断跳过

CSV 文件中,跳过原因一栏中填写为 “{函数名}-{参数}”。

某些用例会因为不同的环境判断用例是否执行,常见的场景为在不同架构上判断是否执行,例如:skipif_platform-aarch64

示例:

脚本文件ID...(各种用例标签)跳过原因
001...skipif_platform-aarch64&sw64
  • 跳过的原因标签为 “skipif_platform-” + 架构名,多个架构之间使用 “&” 拼接;
  • 判断当前架构是否为 arrch64 或者 sw64,若是,则跳过用例不执行;

内置支持的条件跳过对象:

跳过对象参数说明
skipif_platform(x86_64aarch64loogarch64sw64)架构跳过
skipif_not_platform(x86_64aarch64loogarch64sw64)架构不跳过
skipif_xdg_type(waylandx11)系统显示协议跳过
skipif_cpu_name/使用 sudo dmidecode -s system-product-name 查看机器的 cpu 型号 剔除中横线和 & 符号,
比如:KLVV-W5821,标签记录为 KLVVW5821
skipif_not_cpu_name/和上面逻辑相反

3.自定义跳过

在用例工程根目录下存放 skipif.py,自定义条件判断跳过的函数写在此文件中。

方法编写规范:

  • 方法名必须以 skipif 开头;
  • 方法必须有返回结果并且为布尔值(True 代表跳过,False 代表不跳过);
  • 方法只能有一个入参;

在用例收集阶段会以第一个 “-” 进行分割,截取的左侧字符串作为函数名,在 skipif.py 文件中查找是否有同名函数,并将截取的右侧作为参数传递给该函数,通过获取该函数返回的布尔值,返回 True,则用例不执行,返回 False,则执行该用例。

重要

  • 若函数需要多个参数,可自定义多个参数之间的连接符,连接符号不可使用下划线和逗号,推荐统一使用 & 符号;

  • 若需要多个 skipif 条件判断组合,使用 && 符号将两个方法分开,比如:skipif_platform-aarch64&&skipif_xdg_type-wayland

确认修复

针对于某些用例修复后,但不能立即删除跳过原因(skip-XXX)的用例,新增一列标签名为 “确认修复”,作为标记该用例是否已经修复,固定填入字段为 “fixed-已修复”。这样这条用例即使同时标记了 skip-XXX 也会正常执行。

示例:

用例ID...(各种用例标签)跳过原因确认修复
679537...skip-受到某新需求影响fixed-已修复

【同时标记了skipfixed,但仍然想要跳过用例】

当 “跳过原因” 和 “确认修复” 中同时填入后,命令行传递参数 --ifixed yes,则代码不会执行该条用例。

bash
python3 manage.py run --ifixed yes

废弃用例

针对某些用例,由于需求变更,环境影响或评估不再适用于自动化测试时,用例需要废弃,则新增一列标签名为 “废弃用例”,该列存在 “removed-{废弃原因}”,则用例不会执行。

用例ID...(各种用例标签)跳过原因确认修复废弃用例
679537...skip-受到某新需求影响fixed-已修复removed-已废弃

文件格式

此配置文件需要维护大量的标签数据,且要方便能使用 Excel 打开进行编辑查看,更重要的是我们不想引入三方依赖,CSV 文件几乎是唯一能满足所有的要求的文件格式。

- +
Skip to content
📔 阅读量:

标签化管理

使用说明

在 CSV 文件中写入标签:

脚本文件ID跳过原因确认修复废弃用例...
001skip-xxxfixed-xxxremoved-xxx...

CSV文件与脚本对应关系

  1. 在子项目目录下新建 CSV文件,用于保存用例标签,以 用例脚本的 py 文件去掉首字符串 "test_" ,去掉用例序号后的字符串,取中间的名称作为 csv 文件的文件名 。

举例

相册的用例文件为 test_album_001.py001 表示用例的ID(也可以是自定义的数字代表用例序号),此时 CSV 文件名就应为 album.csv

  1. 第 1 列脚本文件ID,从第 2 列之后的所有列都是一个用例标签,标签可以无序,可以随意新增。

特殊标签

跳过原因确认修复废弃用例是特殊的标签,后面会详细讲到

对于用例规模比较大的应用,比如文件管理器,建议分模块,每个模块建立一个 CSV 文件,所有 CSV 文件建议放在一个 tags 目录下。

是否分模块维护取决于应用的用例复杂度,但标签化管理的核心目的是集中化管理用例的标签,因此若 CSV 文件太多了也是一个很糟糕的事情。

跳过用例

传统跳过用例的方式是在用例脚本里面给用例添加装饰器 (@pytest.mark.skip),解除跳过时将装饰器代码删掉,这种方式需要修改用例代码,而通过 csv 文件来管理跳过用例则会方便很多;

将跳过用例操作也整合进入用例标签,在 csv 文件中新增一列为“跳过原因”;

1. 固定跳过

示例:

脚本文件ID...(各种用例标签)跳过原因
679537...skip-受到某新需求影响
  • 如果应用受到新需求影响需要跳过,则在此列备注具体的跳过原因。跳过的原因统一标签开头为 “skip-XXX”;
  • 用例执行时判断 csv 文件里面跳过原因列是否存在跳过标签,存在跳过标签则用例也不会被执行,最终的用例状态会被标签为 SKIPED

2. 条件判断跳过

CSV 文件中,跳过原因一栏中填写为 “{函数名}-{参数}”。

某些用例会因为不同的环境判断用例是否执行,常见的场景为在不同架构上判断是否执行,例如:skipif_platform-aarch64

示例:

脚本文件ID...(各种用例标签)跳过原因
001...skipif_platform-aarch64&sw64
  • 跳过的原因标签为 “skipif_platform-” + 架构名,多个架构之间使用 “&” 拼接;
  • 判断当前架构是否为 arrch64 或者 sw64,若是,则跳过用例不执行;

内置支持的条件跳过对象:

跳过对象参数说明
skipif_platform(x86_64aarch64loogarch64sw64)架构跳过
skipif_not_platform(x86_64aarch64loogarch64sw64)架构不跳过
skipif_xdg_type(waylandx11)系统显示协议跳过
skipif_cpu_name/使用 sudo dmidecode -s system-product-name 查看机器的 cpu 型号 剔除中横线和 & 符号,
比如:KLVV-W5821,标签记录为 KLVVW5821
skipif_not_cpu_name/和上面逻辑相反

3.自定义跳过

在用例工程根目录下存放 skipif.py,自定义条件判断跳过的函数写在此文件中。

方法编写规范:

  • 方法名必须以 skipif 开头;
  • 方法必须有返回结果并且为布尔值(True 代表跳过,False 代表不跳过);
  • 方法只能有一个入参;

在用例收集阶段会以第一个 “-” 进行分割,截取的左侧字符串作为函数名,在 skipif.py 文件中查找是否有同名函数,并将截取的右侧作为参数传递给该函数,通过获取该函数返回的布尔值,返回 True,则用例不执行,返回 False,则执行该用例。

重要

  • 若函数需要多个参数,可自定义多个参数之间的连接符,连接符号不可使用下划线和逗号,推荐统一使用 & 符号;

  • 若需要多个 skipif 条件判断组合,使用 && 符号将两个方法分开,比如:skipif_platform-aarch64&&skipif_xdg_type-wayland

确认修复

针对于某些用例修复后,但不能立即删除跳过原因(skip-XXX)的用例,新增一列标签名为 “确认修复”,作为标记该用例是否已经修复,固定填入字段为 “fixed-已修复”。这样这条用例即使同时标记了 skip-XXX 也会正常执行。

示例:

用例ID...(各种用例标签)跳过原因确认修复
679537...skip-受到某新需求影响fixed-已修复

【同时标记了skipfixed,但仍然想要跳过用例】

当 “跳过原因” 和 “确认修复” 中同时填入后,命令行传递参数 --ifixed yes,则代码不会执行该条用例。

bash
python3 manage.py run --ifixed yes

废弃用例

针对某些用例,由于需求变更,环境影响或评估不再适用于自动化测试时,用例需要废弃,则新增一列标签名为 “废弃用例”,该列存在 “removed-{废弃原因}”,则用例不会执行。

用例ID...(各种用例标签)跳过原因确认修复废弃用例
679537...skip-受到某新需求影响fixed-已修复removed-已废弃

文件格式

此配置文件需要维护大量的标签数据,且要方便能使用 Excel 打开进行编辑查看,更重要的是我们不想引入三方依赖,CSV 文件几乎是唯一能满足所有的要求的文件格式。

+ \ No newline at end of file diff --git "a/\346\214\207\345\215\227/\344\270\216\347\224\237\344\277\261\346\235\245/\350\204\232\346\211\213\346\236\266\345\267\245\345\205\267.html" "b/\346\214\207\345\215\227/\344\270\216\347\224\237\344\277\261\346\235\245/\350\204\232\346\211\213\346\236\266\345\267\245\345\205\267.html" index c123951..04539d5 100644 --- "a/\346\214\207\345\215\227/\344\270\216\347\224\237\344\277\261\346\235\245/\350\204\232\346\211\213\346\236\266\345\267\245\345\205\267.html" +++ "b/\346\214\207\345\215\227/\344\270\216\347\224\237\344\277\261\346\235\245/\350\204\232\346\211\213\346\236\266\345\267\245\345\205\267.html" @@ -8,19 +8,19 @@ - + - - - + + +
Skip to content
📔 阅读量:

脚手架工具

使用子命令 init 创建用例工程,工程遵循完整的 PO 设计模式,让你可以专注于用例和方法的编写维护。

  • 创建一个目录
bash
mkdir my_autotest
  • 使用脚手架功能创建用例工程
bash
cd my_autotest/
-youqu3 init

- +youqu3 init

+ \ No newline at end of file diff --git "a/\346\214\207\345\215\227/\344\270\216\347\224\237\344\277\261\346\235\245/\350\277\234\347\250\213\344\272\244\344\272\222\346\216\247\345\210\266.html" "b/\346\214\207\345\215\227/\344\270\216\347\224\237\344\277\261\346\235\245/\350\277\234\347\250\213\344\272\244\344\272\222\346\216\247\345\210\266.html" index ff8df8e..b836ef3 100644 --- "a/\346\214\207\345\215\227/\344\270\216\347\224\237\344\277\261\346\235\245/\350\277\234\347\250\213\344\272\244\344\272\222\346\216\247\345\210\266.html" +++ "b/\346\214\207\345\215\227/\344\270\216\347\224\237\344\277\261\346\235\245/\350\277\234\347\250\213\344\272\244\344\272\222\346\216\247\345\210\266.html" @@ -8,11 +8,11 @@ - + - - - + + + @@ -45,8 +45,8 @@ user="uos", ip="10.8.7.55", password="1", - ).click_dde_file_manager_by_attr()
- + ).click_dde_file_manager_by_attr()
+ \ No newline at end of file diff --git "a/\346\214\207\345\215\227/\345\217\257\351\200\211\345\212\237\350\203\275/DBus\350\207\252\345\212\250\345\214\226.html" "b/\346\214\207\345\215\227/\345\217\257\351\200\211\345\212\237\350\203\275/DBus\350\207\252\345\212\250\345\214\226.html" index cc045bd..d445eb5 100644 --- "a/\346\214\207\345\215\227/\345\217\257\351\200\211\345\212\237\350\203\275/DBus\350\207\252\345\212\250\345\214\226.html" +++ "b/\346\214\207\345\215\227/\345\217\257\351\200\211\345\212\237\350\203\275/DBus\350\207\252\345\212\250\345\214\226.html" @@ -8,18 +8,18 @@ - + - - - + + + - - + + \ No newline at end of file diff --git "a/\346\214\207\345\215\227/\345\217\257\351\200\211\345\212\237\350\203\275/GUI\350\207\252\345\212\250\345\214\226.html" "b/\346\214\207\345\215\227/\345\217\257\351\200\211\345\212\237\350\203\275/GUI\350\207\252\345\212\250\345\214\226.html" index a6a2fbc..b2a1d13 100644 --- "a/\346\214\207\345\215\227/\345\217\257\351\200\211\345\212\237\350\203\275/GUI\350\207\252\345\212\250\345\214\226.html" +++ "b/\346\214\207\345\215\227/\345\217\257\351\200\211\345\212\237\350\203\275/GUI\350\207\252\345\212\250\345\214\226.html" @@ -8,18 +8,18 @@ - + - - - + + + - - + + \ No newline at end of file diff --git "a/\346\214\207\345\215\227/\345\217\257\351\200\211\345\212\237\350\203\275/HTML\346\212\245\345\221\212.html" "b/\346\214\207\345\215\227/\345\217\257\351\200\211\345\212\237\350\203\275/HTML\346\212\245\345\221\212.html" index 335de81..40c7662 100644 --- "a/\346\214\207\345\215\227/\345\217\257\351\200\211\345\212\237\350\203\275/HTML\346\212\245\345\221\212.html" +++ "b/\346\214\207\345\215\227/\345\217\257\351\200\211\345\212\237\350\203\275/HTML\346\212\245\345\221\212.html" @@ -8,18 +8,18 @@ - + - - - + + + - - + + \ No newline at end of file diff --git "a/\346\214\207\345\215\227/\345\217\257\351\200\211\345\212\237\350\203\275/HTTP\350\207\252\345\212\250\345\214\226.html" "b/\346\214\207\345\215\227/\345\217\257\351\200\211\345\212\237\350\203\275/HTTP\350\207\252\345\212\250\345\214\226.html" index e691ef7..49b0a31 100644 --- "a/\346\214\207\345\215\227/\345\217\257\351\200\211\345\212\237\350\203\275/HTTP\350\207\252\345\212\250\345\214\226.html" +++ "b/\346\214\207\345\215\227/\345\217\257\351\200\211\345\212\237\350\203\275/HTTP\350\207\252\345\212\250\345\214\226.html" @@ -8,18 +8,18 @@ - + - - - + + + - - + + \ No newline at end of file diff --git "a/\346\214\207\345\215\227/\345\217\257\351\200\211\345\212\237\350\203\275/WebUI\350\207\252\345\212\250\345\214\226.html" "b/\346\214\207\345\215\227/\345\217\257\351\200\211\345\212\237\350\203\275/WebUI\350\207\252\345\212\250\345\214\226.html" index 3b15dca..69abc2c 100644 --- "a/\346\214\207\345\215\227/\345\217\257\351\200\211\345\212\237\350\203\275/WebUI\350\207\252\345\212\250\345\214\226.html" +++ "b/\346\214\207\345\215\227/\345\217\257\351\200\211\345\212\237\350\203\275/WebUI\350\207\252\345\212\250\345\214\226.html" @@ -8,18 +8,18 @@ - + - - - + + + - - + + \ No newline at end of file diff --git "a/\346\214\207\345\215\227/\345\217\257\351\200\211\345\212\237\350\203\275/\345\205\266\344\273\226\346\217\222\344\273\266.html" "b/\346\214\207\345\215\227/\345\217\257\351\200\211\345\212\237\350\203\275/\345\205\266\344\273\226\346\217\222\344\273\266.html" index 3dc6bc3..e248371 100644 --- "a/\346\214\207\345\215\227/\345\217\257\351\200\211\345\212\237\350\203\275/\345\205\266\344\273\226\346\217\222\344\273\266.html" +++ "b/\346\214\207\345\215\227/\345\217\257\351\200\211\345\212\237\350\203\275/\345\205\266\344\273\226\346\217\222\344\273\266.html" @@ -8,18 +8,18 @@ - + - - - + + + - - + + \ No newline at end of file diff --git "a/\346\214\207\345\215\227/\345\217\257\351\200\211\345\212\237\350\203\275/\347\224\250\344\276\213\345\275\225\345\261\217.html" "b/\346\214\207\345\215\227/\345\217\257\351\200\211\345\212\237\350\203\275/\347\224\250\344\276\213\345\275\225\345\261\217.html" index b1e1097..7de4b7e 100644 --- "a/\346\214\207\345\215\227/\345\217\257\351\200\211\345\212\237\350\203\275/\347\224\250\344\276\213\345\275\225\345\261\217.html" +++ "b/\346\214\207\345\215\227/\345\217\257\351\200\211\345\212\237\350\203\275/\347\224\250\344\276\213\345\275\225\345\261\217.html" @@ -8,18 +8,18 @@ - + - - - + + + - - + + \ No newline at end of file diff --git "a/\346\214\207\345\215\227/\345\217\257\351\200\211\345\212\237\350\203\275/\350\277\234\347\250\213\344\272\244\344\272\222\346\216\247\345\210\266.html" "b/\346\214\207\345\215\227/\345\217\257\351\200\211\345\212\237\350\203\275/\350\277\234\347\250\213\344\272\244\344\272\222\346\216\247\345\210\266.html" index 9a4ffa2..ba644a2 100644 --- "a/\346\214\207\345\215\227/\345\217\257\351\200\211\345\212\237\350\203\275/\350\277\234\347\250\213\344\272\244\344\272\222\346\216\247\345\210\266.html" +++ "b/\346\214\207\345\215\227/\345\217\257\351\200\211\345\212\237\350\203\275/\350\277\234\347\250\213\344\272\244\344\272\222\346\216\247\345\210\266.html" @@ -8,18 +8,18 @@ - + - - - + + + - - + + \ No newline at end of file diff --git "a/\346\214\207\345\215\227/\347\216\257\345\242\203\347\256\241\347\220\206/\345\216\237\347\224\237\347\216\257\345\242\203.html" "b/\346\214\207\345\215\227/\347\216\257\345\242\203\347\256\241\347\220\206/\345\216\237\347\224\237\347\216\257\345\242\203.html" index 282bf45..3b14482 100644 --- "a/\346\214\207\345\215\227/\347\216\257\345\242\203\347\256\241\347\220\206/\345\216\237\347\224\237\347\216\257\345\242\203.html" +++ "b/\346\214\207\345\215\227/\347\216\257\345\242\203\347\256\241\347\220\206/\345\216\237\347\224\237\347\216\257\345\242\203.html" @@ -8,18 +8,18 @@ - + - - - + + + -
Skip to content
📔 阅读量:

原生环境

当系统中安装了 YouQu3 之后,会自动生成一个命令:youqu3

bash
youqu3 -h

你可以使用它进行用例的驱动执行和管理。

比如:

bash
youqu3 run
- +
Skip to content
📔 阅读量:

原生环境

当系统中安装了 YouQu3 之后,会自动生成一个命令:youqu3

bash
youqu3 -h

你可以使用它进行用例的驱动执行和管理。

比如:

bash
youqu3 run
+ \ No newline at end of file diff --git "a/\346\214\207\345\215\227/\347\216\257\345\242\203\347\256\241\347\220\206/\350\231\232\346\213\237\347\216\257\345\242\203.html" "b/\346\214\207\345\215\227/\347\216\257\345\242\203\347\256\241\347\220\206/\350\231\232\346\213\237\347\216\257\345\242\203.html" index 1fc3be7..db583e5 100644 --- "a/\346\214\207\345\215\227/\347\216\257\345\242\203\347\256\241\347\220\206/\350\231\232\346\213\237\347\216\257\345\242\203.html" +++ "b/\346\214\207\345\215\227/\347\216\257\345\242\203\347\256\241\347\220\206/\350\231\232\346\213\237\347\216\257\345\242\203.html" @@ -8,19 +8,19 @@ - + - - - + + +
Skip to content
📔 阅读量:

虚拟环境

当系统中安装了 YouQu3 之后,会自动生成一个命令:youqu3

这个命令可以在系统原生环境中使用,它除了可以驱动用例执行,还可以进行环境的管理:

bash
youqu3 envx

子命令 envx 用于虚拟环境安装,执行之后会自动创建一些有用的命令:

命令说明
youqu3-cargo用例执行驱动的命令
youqu3-shell激活虚拟环境
youqu3-rm删除虚拟环境

youqu3-cargo

youqu3-cargo 可以自动加载虚拟环境并驱动用例工程:

bash
youqu3-cargo run

youqu3-shell

youqu3-shell 可以激活虚拟环境,由于虚拟环境中也安装了 YouQu3 ,因此你仍然可以在虚拟环境中使用命令:youqu3

bash
$ youqu3-shell
-(my_virtualenv)$ youqu3 run

youqu3-rm

youqu3-rm 命令可以将当前的虚拟环境删除。

- +(my_virtualenv)$ youqu3 run

youqu3-rm

youqu3-rm 命令可以将当前的虚拟环境删除。

+ \ No newline at end of file diff --git "a/\346\214\207\345\215\227/\347\256\200\344\273\213/YouQu3\346\230\257\344\273\200\344\271\210.html" "b/\346\214\207\345\215\227/\347\256\200\344\273\213/YouQu3\346\230\257\344\273\200\344\271\210.html" index 9d62c48..4f67baa 100644 --- "a/\346\214\207\345\215\227/\347\256\200\344\273\213/YouQu3\346\230\257\344\273\200\344\271\210.html" +++ "b/\346\214\207\345\215\227/\347\256\200\344\273\213/YouQu3\346\230\257\344\273\200\344\271\210.html" @@ -8,18 +8,18 @@ - + - - - + + + -
Skip to content
📔 阅读量:

YouQu3

YouQu3

YouQu3, Next generation Linux automation testing framework.


YouQu3 旨在成为下一代 Linux 自动化测试框架,在继承 YouQu2 诸多亮点功能的同时解决其遇到的问题,同时对各功能进行插件化、模块化改造,全面优化框架接口调用机制。

  • 以包的形式提供框架能力,方便安装、更新。
  • 支持离线部署,用例整体打包交付之后,可以在无网络环境下直接运行。
  • 极致轻量化、可定制化依赖,可以根据测试项目类型安装对应的依赖。
  • 功能可插拔,以插件的形式提供功能,不安装插件的情况下框架也能正常运行。
  • 可视化配置,在浏览器中输入一些配置后即可驱动测试用例执行,搭配远程执行功能,可实现群控测试机执行。
  • 支持非开发者下运行,简化系统环境部署。

YouQu3 能做什么?

☑ 💻 Linux 桌面应用 UI 自动化测试

☑ 🌏 Web UI 自动化测试

☑ 🚌 Linux DBus 接口自动化测试

☑ 🚀 Linux 命令行自动化测试

☑ 🕷️ HTTP 接口自动化测试

☑ 🤙️ 。。。无限可能

- +
Skip to content
📔 阅读量:

YouQu3

YouQu3

YouQu3, Next generation Linux automation testing framework.


YouQu3 旨在成为下一代 Linux 自动化测试框架,在继承 YouQu2 诸多亮点功能的同时解决其遇到的问题,同时对各功能进行插件化、模块化改造,全面优化框架接口调用机制。

  • 以包的形式提供框架能力,方便安装、更新。
  • 支持离线部署,用例整体打包交付之后,可以在无网络环境下直接运行。
  • 极致轻量化、可定制化依赖,可以根据测试项目类型安装对应的依赖。
  • 功能可插拔,以插件的形式提供功能,不安装插件的情况下框架也能正常运行。
  • 可视化配置,在浏览器中输入一些配置后即可驱动测试用例执行,搭配远程执行功能,可实现群控测试机执行。
  • 支持非开发者下运行,简化系统环境部署。

YouQu3 能做什么?

☑ 💻 Linux 桌面应用 UI 自动化测试

☑ 🌏 Web UI 自动化测试

☑ 🚌 Linux DBus 接口自动化测试

☑ 🚀 Linux 命令行自动化测试

☑ 🕷️ HTTP 接口自动化测试

☑ 🤙️ 。。。无限可能

+ \ No newline at end of file diff --git "a/\346\214\207\345\215\227/\347\256\200\344\273\213/\345\277\253\351\200\237\345\274\200\345\247\213.html" "b/\346\214\207\345\215\227/\347\256\200\344\273\213/\345\277\253\351\200\237\345\274\200\345\247\213.html" index 9bf7374..d2c02d1 100644 --- "a/\346\214\207\345\215\227/\347\256\200\344\273\213/\345\277\253\351\200\237\345\274\200\345\247\213.html" +++ "b/\346\214\207\345\215\227/\347\256\200\344\273\213/\345\277\253\351\200\237\345\274\200\345\247\213.html" @@ -8,19 +8,19 @@ - + - - - + + + -
Skip to content
📔 阅读量:

快速开始

安装

bash
pip install youqu3
bash
pip install "youqu3[gui]"
bash
pip install "youqu3[webui]"
bash
pip install "youqu3[http]"
bash
pip install "youqu3[remote]"

注意

  • 根据不同的测试类型选择以上不同的安装命令,可以自动安装对应的依赖集。
  • 基础环境默认支持 Linux 命令行自动化
  • 同时选择多个环境:pip install "youqu3[gui, webui]"

创建用例工程

创建一个目录

bash
mkdir my_autotest

使用脚手架功能创建用例工程

bash
cd my_autotest/
-youqu3 init

- +
Skip to content
📔 阅读量:

快速开始

安装

bash
pip install youqu3
bash
pip install "youqu3[gui]"
bash
pip install "youqu3[webui]"
bash
pip install "youqu3[http]"
bash
pip install "youqu3[remote]"

注意

  • 根据不同的测试类型选择以上不同的安装命令,可以自动安装对应的依赖集。
  • 基础环境默认支持 Linux 命令行自动化
  • 同时选择多个环境:pip install "youqu3[gui, webui]"

创建用例工程

创建一个目录

bash
mkdir my_autotest

使用脚手架功能创建用例工程

bash
cd my_autotest/
+youqu3 init

+ \ No newline at end of file diff --git "a/\346\214\207\345\215\227/\351\251\261\345\212\250\346\211\247\350\241\214/\346\234\254\345\234\260\346\211\247\350\241\214.html" "b/\346\214\207\345\215\227/\351\251\261\345\212\250\346\211\247\350\241\214/\346\234\254\345\234\260\346\211\247\350\241\214.html" index bf68abe..afc4a87 100644 --- "a/\346\214\207\345\215\227/\351\251\261\345\212\250\346\211\247\350\241\214/\346\234\254\345\234\260\346\211\247\350\241\214.html" +++ "b/\346\214\207\345\215\227/\351\251\261\345\212\250\346\211\247\350\241\214/\346\234\254\345\234\260\346\211\247\350\241\214.html" @@ -8,17 +8,17 @@ - + - - - + + + -
Skip to content
📔 阅读量:

本地执行

子命令

本地执行子命令为:run

bash
$ youqu3 run
bash
$ youqu3-cargo run

用例驱动方式

执行所有用例

bash
$ youqu3 run
bash
$ youqu3-cargo run

指定执行某一个用例

python
# test_xxx_001.py
+    
Skip to content
📔 阅读量:

本地执行

子命令

本地执行子命令为:run

bash
$ youqu3 run
bash
$ youqu3-cargo run

用例驱动方式

执行所有用例

bash
$ youqu3 run
bash
$ youqu3-cargo run

指定执行某一个用例

python
# test_xxx_001.py
 
 class TestCase:
     
@@ -26,14 +26,14 @@
         ...
         
     def test_xxx_001_2(self):
-        ...

仅驱动执行这一条用例:

bash
$ youqu3 run -k test_xxx_001_1
bash
$ youqu3-cargo run -k test_xxx_001_1

如果你想执行这个 py 文件中所有的用例:

bash
$ youqu3 run -k test_xxx_001
bash
$ youqu3-cargo run -k test_xxx_001

指定某个目录执行

shell
autotest-my-app
+        ...

仅驱动执行这一条用例:

bash
$ youqu3 run -k test_xxx_001_1
bash
$ youqu3-cargo run -k test_xxx_001_1

如果你想执行这个 py 文件中所有的用例:

bash
$ youqu3 run -k test_xxx_001
bash
$ youqu3-cargo run -k test_xxx_001

指定某个目录执行

shell
autotest-my-app
 ├── case
 │   ├── base_case.py
 │   ├── __init__.py
 │   ├── smoke
 │  	├── test_mycase_001.py
-│  	└── test_mycase_002.py

驱动执行 smoke 目录下所有用例:

bash
$ youqu3 run -k smoke
bash
$ youqu3-cargo run -k smoke

根据关键词执行

执行包含关键词的用例,关键词可以是用例对象中的任意字符,且大小写不敏感

模块名称、py 文件名称、类名、函数名等等都可以做为关键词

比如:case/test_music_001.py::TestMusic::test_music_001

整个字符串中可以任意截取字符作为关键词。

关键词驱动支持 and/or/not 表达式。

bash
$ youqu3 run -k "music and 001"
bash
$ youqu3-cargo run -k "music and 001"

注意:

使用逻辑表达式的时候一定要加引号:"music and 001"

根据标签执行

基于 YouQu 特有的 CSV 文件管理的标签,也可以是传统的 Pytest 标签:@pytest.mark.L1

标签驱动支持 and/or/not 表达式。

bash
$ youqu3 run -t "L1 or smoke"
bash
$ youqu3-cargo run -t "L1 or smoke"

批量用例ID驱动执行

bash
$ youqu3 run -t "id1 or id2 or id3 or id4"
bash
$ youqu3-cargo run -t "id1 or id2 or id3 or id4"

注意:

使用逻辑表达式的时候一定要加引号:"id1 or id2 or id3 or id4"

指定用例文件路径执行

指定用例文件

bash
$ youqu3 run -f case/test_music_001.py
bash
$ youqu3-cargo run -f case/test_music_001.py

指定用例目录

bash
$ youqu3 run -f case
bash
$ youqu3-cargo run -f case

用例文件、目录组合

bash
$ youqu3 run -f "case/test_music_001.py case/test_music_002.py"
bash
$ youqu3-cargo run -f "case/test_music_001.py case/test_music_002.py"

注意:

多个用例文件、目录之间用空格分割,加引号

- +│   └── test_mycase_002.py

驱动执行 smoke 目录下所有用例:

bash
$ youqu3 run -k smoke
bash
$ youqu3-cargo run -k smoke

根据关键词执行

执行包含关键词的用例,关键词可以是用例对象中的任意字符,且大小写不敏感

模块名称、py 文件名称、类名、函数名等等都可以做为关键词

比如:case/test_music_001.py::TestMusic::test_music_001

整个字符串中可以任意截取字符作为关键词。

关键词驱动支持 and/or/not 表达式。

bash
$ youqu3 run -k "music and 001"
bash
$ youqu3-cargo run -k "music and 001"

注意:

使用逻辑表达式的时候一定要加引号:"music and 001"

根据标签执行

基于 YouQu 特有的 CSV 文件管理的标签,也可以是传统的 Pytest 标签:@pytest.mark.L1

标签驱动支持 and/or/not 表达式。

bash
$ youqu3 run -t "L1 or smoke"
bash
$ youqu3-cargo run -t "L1 or smoke"

批量用例ID驱动执行

bash
$ youqu3 run -t "id1 or id2 or id3 or id4"
bash
$ youqu3-cargo run -t "id1 or id2 or id3 or id4"

注意:

使用逻辑表达式的时候一定要加引号:"id1 or id2 or id3 or id4"

指定用例文件路径执行

指定用例文件

bash
$ youqu3 run -f case/test_music_001.py
bash
$ youqu3-cargo run -f case/test_music_001.py

指定用例目录

bash
$ youqu3 run -f case
bash
$ youqu3-cargo run -f case

用例文件、目录组合

bash
$ youqu3 run -f "case/test_music_001.py case/test_music_002.py"
bash
$ youqu3-cargo run -f "case/test_music_001.py case/test_music_002.py"

注意:

多个用例文件、目录之间用空格分割,加引号

+ \ No newline at end of file diff --git "a/\346\214\207\345\215\227/\351\251\261\345\212\250\346\211\247\350\241\214/\350\207\252\345\256\232\344\271\211\346\211\247\350\241\214.html" "b/\346\214\207\345\215\227/\351\251\261\345\212\250\346\211\247\350\241\214/\350\207\252\345\256\232\344\271\211\346\211\247\350\241\214.html" index 32b96e6..1f43987 100644 --- "a/\346\214\207\345\215\227/\351\251\261\345\212\250\346\211\247\350\241\214/\350\207\252\345\256\232\344\271\211\346\211\247\350\241\214.html" +++ "b/\346\214\207\345\215\227/\351\251\261\345\212\250\346\211\247\350\241\214/\350\207\252\345\256\232\344\271\211\346\211\247\350\241\214.html" @@ -8,18 +8,18 @@ - + - - - + + + -
Skip to content
📔 阅读量:

自定义执行

YouQu3 支持在 txt 文件中自定义用例集驱动执行:

  • youqu-tags.txt
  • youqu-keywords.txt

youqu-tags.txt

在根目录下定义 youqu-tags.txt 文件,YouQu3 会自动加载并执行。

youqu-tags.txt 文件里面写标签的表达式,如:

txt
id1 or id2 or id3

youqu-keywords.txt

在根目录下定义 youqu-keywords.txt 文件,YouQu3 会自动加载并执行。

youqu-keywords.txt 文件里面写关键词的表达式,如:

txt
id1 or id2 or id3

案例

PMS用例驱动

youqu-pms-driver:从PMS测试单中爬取用例集,将用例 id 集合写入 youqu-tags.txt 文件。

使用框架的前置钩子触发爬取动作生成 youqu-tags.txt 文件,框架自动加载并执行对应标签的用例。

使用框架的后置钩子触发结果回填到 PMS 测试单。

执行命令:

bash
youqu3 run --job-start "pms-driver --task-id 123456 --pms-user ut001234 --pms-password xxxx" --job-end "pms-driver --task-id 123456 --pms-user ut001234 --pms-password xxxx --send2pms"
bash
youqu3-cargo run --job-start "pms-driver --task-id 123456 --pms-user ut001234 --pms-password xxxx" --job-end "pms-driver --task-id 123456 --pms-user ut001234 --pms-password xxxx --send2pms"
- +
Skip to content
📔 阅读量:

自定义执行

YouQu3 支持在 txt 文件中自定义用例集驱动执行:

  • youqu-tags.txt
  • youqu-keywords.txt

youqu-tags.txt

在根目录下定义 youqu-tags.txt 文件,YouQu3 会自动加载并执行。

youqu-tags.txt 文件里面写标签的表达式,如:

txt
id1 or id2 or id3

youqu-keywords.txt

在根目录下定义 youqu-keywords.txt 文件,YouQu3 会自动加载并执行。

youqu-keywords.txt 文件里面写关键词的表达式,如:

txt
id1 or id2 or id3

案例

PMS用例驱动

youqu-pms-driver:从PMS测试单中爬取用例集,将用例 id 集合写入 youqu-tags.txt 文件。

使用框架的前置钩子触发爬取动作生成 youqu-tags.txt 文件,框架自动加载并执行对应标签的用例。

使用框架的后置钩子触发结果回填到 PMS 测试单。

执行命令:

bash
youqu3 run --job-start "pms-driver --task-id 123456 --pms-user ut001234 --pms-password xxxx" --job-end "pms-driver --task-id 123456 --pms-user ut001234 --pms-password xxxx --send2pms"
bash
youqu3-cargo run --job-start "pms-driver --task-id 123456 --pms-user ut001234 --pms-password xxxx" --job-end "pms-driver --task-id 123456 --pms-user ut001234 --pms-password xxxx --send2pms"
+ \ No newline at end of file diff --git "a/\346\214\207\345\215\227/\351\251\261\345\212\250\346\211\247\350\241\214/\350\277\234\347\250\213\346\211\247\350\241\214.html" "b/\346\214\207\345\215\227/\351\251\261\345\212\250\346\211\247\350\241\214/\350\277\234\347\250\213\346\211\247\350\241\214.html" index 7514c08..9fa0696 100644 --- "a/\346\214\207\345\215\227/\351\251\261\345\212\250\346\211\247\350\241\214/\350\277\234\347\250\213\346\211\247\350\241\214.html" +++ "b/\346\214\207\345\215\227/\351\251\261\345\212\250\346\211\247\350\241\214/\350\277\234\347\250\213\346\211\247\350\241\214.html" @@ -8,18 +8,18 @@ - + - - - + + + -
Skip to content
📔 阅读量:

远程执行

子命令

远程执行就是用本地作为服务端控制远程机器执行,远程机器执行的用例相同;

远程执行使用子命令: remote

bash
$ youqu3 remote
bash
$ youqu3-cargo remote
开启 SSH

执行前确保远程机器已经开启了 SSH 服务,否则会提示无法连接:

bash
$ sudo systemctl restart ssh

远程测试机分组策略

分组规则

一对大括号表示一个组:

txt
{user1@ip1/user2@ip2}{user3@ip3/user4@ip4}

以上写法表示有 2 个组(group):

  • group1 : user1@ip1/user2@ip2
  • group2 : user3@ip3/user4@ip4

执行策略

规则概述

同一组内瓜分执行,不同组之间相同执行

bash
$ youqu3 remote -c "{user1@ip1/user2@ip2}{user3@ip3/user4@ip4}"
bash
$ youqu3-cargo remote -c "{user1@ip1/user2@ip2}{user3@ip3/user4@ip4}"

假设总共 100 条用例:

  • group1group2同时执行 100 条
  • group1 包含 2 个测试机,2 个机器瓜分 100 条用例,每个机器执行 50 条
- +
Skip to content
📔 阅读量:

远程执行

子命令

远程执行就是用本地作为服务端控制远程机器执行,远程机器执行的用例相同;

远程执行使用子命令: remote

bash
$ youqu3 remote
bash
$ youqu3-cargo remote
开启 SSH

执行前确保远程机器已经开启了 SSH 服务,否则会提示无法连接:

bash
$ sudo systemctl restart ssh

远程测试机分组策略

分组规则

一对大括号表示一个组:

txt
{user1@ip1/user2@ip2}{user3@ip3/user4@ip4}

以上写法表示有 2 个组(group):

  • group1 : user1@ip1/user2@ip2
  • group2 : user3@ip3/user4@ip4

执行策略

规则概述

同一组内瓜分执行,不同组之间相同执行

bash
$ youqu3 remote -c "{user1@ip1/user2@ip2}{user3@ip3/user4@ip4}"
bash
$ youqu3-cargo remote -c "{user1@ip1/user2@ip2}{user3@ip3/user4@ip4}"

假设总共 100 条用例:

  • group1group2同时执行 100 条
  • group1 包含 2 个测试机,2 个机器瓜分 100 条用例,每个机器执行 50 条
+ \ No newline at end of file diff --git "a/\346\217\222\344\273\266/DBus\346\223\215\346\216\247.html" "b/\346\217\222\344\273\266/DBus\346\223\215\346\216\247.html" deleted file mode 100644 index 8e38e30..0000000 --- "a/\346\217\222\344\273\266/DBus\346\223\215\346\216\247.html" +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - YouQu3 | Next-Gen Linux Autotest Framework - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git "a/\346\217\222\344\273\266/Html\346\265\213\350\257\225\346\212\245\345\221\212.html" "b/\346\217\222\344\273\266/Html\346\265\213\350\257\225\346\212\245\345\221\212.html" deleted file mode 100644 index fc63ea4..0000000 --- "a/\346\217\222\344\273\266/Html\346\265\213\350\257\225\346\212\245\345\221\212.html" +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - YouQu3 | Next-Gen Linux Autotest Framework - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git "a/\346\217\222\344\273\266/OCR\350\257\206\345\210\253.html" "b/\346\217\222\344\273\266/OCR\350\257\206\345\210\253.html" deleted file mode 100644 index f9d9e08..0000000 --- "a/\346\217\222\344\273\266/OCR\350\257\206\345\210\253.html" +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - pdocr-rpc | YouQu3 | Next-Gen Linux Autotest Framework - - - - - - - - - - - - - - -
Skip to content
📔 阅读量:

pdocr-rpc

Source Code: https://github.com/linuxdeepin/pdocr-rpc

基于 PaddleOCR 封装的 RPC 服务,包含客户端和服务端。

客户端提供了一个简单易用的函数 ocr,通过不同的参数控制返回不同的值。

1、服务端

服务端安装

console
pip install pdocr-rpc[server]

服务端启动服务

随意新建一个py文件,名称你可以自定义,比如:ocr_server.py

写入以下内容:

python
# ocr_server.py
-from pdocr_rpc.server import server
-
-server()

默认端口号为 8890 如果你想修改端口:

python
from pdocr_rpc.server import server
-from pdocr_rpc.conf import setting
-
-setting.PORT = 8888
-server()

2、客户端

客户端安装

console
pip install pdocr-rpc

客户端使用

2.1、识别当前屏幕的所有文字内容

python
from pdocr_rpc import OCR
-from pdocr_rpc.conf import setting
-
-# 注意IP和端口要和你的服务端IP对应
-setting.SERVER_IP = "192.168.0.1"
-setting.PORT = 8888
-
-OCR.ocr()

自动识别当前整个屏幕的所有内容。

2.2、指定某张图片识别的所有文字内容

python
OCR.ocr(picture_abspath="~/Desktop/test.png")

返回识别图片 test.png 的内容。

2.3、在全屏指定查找某个字符串的坐标

python
OCR.ocr("天天向上")

返回当前屏幕中,“天天向上”的坐标,如果存在多个,则返回一个字典。

2.4、指定某张图片查找某个字符串的坐标

python
OCR.ocr("天天向上"picture_abspath="~/Desktop/test.png")

2.5、其他参数

  • 识别语言

    lang: ch, en, fr, german, korean, japan

    默认为ch,中文,如果要修改识别语言;

    python
    OCR.ocr(lang="ch")
  • 匹配度

    similarity: float

    默认为0.6,可以修改为从0到1的数;

    shell
    OCR.ocr(similarity=0.1)
  • 返回原始数据

    return_default: bool

    默认为False,即默认返回识别到字符串的中心坐标,True表示返回原始数据;

    python
    OCR.ocr(return_default=False)
  • 只返回第一个

    return_first: bool

    当传入要查找的字符串时,可能存在当前屏幕中有多个目标;

    默认情况下是会将识别到的多个目标组装成字典返回;

    return_first=True 表示返回识别到的第一个。

    python
    OCR.ocr(return_first=True )
- - - - \ No newline at end of file diff --git "a/\346\217\222\344\273\266/PMS\346\265\213\350\257\225\345\215\225\351\251\261\345\212\250.html" "b/\346\217\222\344\273\266/PMS\346\265\213\350\257\225\345\215\225\351\251\261\345\212\250.html" deleted file mode 100644 index f9021ae..0000000 --- "a/\346\217\222\344\273\266/PMS\346\265\213\350\257\225\345\215\225\351\251\261\345\212\250.html" +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - YouQu3 | Next-Gen Linux Autotest Framework - - - - - - - - - - - - - - -
Skip to content
📔 阅读量:
- - - - \ No newline at end of file diff --git "a/\346\217\222\344\273\266/WebUI\350\207\252\345\212\250\345\214\226.html" "b/\346\217\222\344\273\266/WebUI\350\207\252\345\212\250\345\214\226.html" deleted file mode 100644 index 954d6b8..0000000 --- "a/\346\217\222\344\273\266/WebUI\350\207\252\345\212\250\345\214\226.html" +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - YouQu3 | Next-Gen Linux Autotest Framework - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git "a/\346\217\222\344\273\266/\345\205\250\350\207\252\345\212\250\346\227\245\345\277\227.html" "b/\346\217\222\344\273\266/\345\205\250\350\207\252\345\212\250\346\227\245\345\277\227.html" deleted file mode 100644 index 7751e1d..0000000 --- "a/\346\217\222\344\273\266/\345\205\250\350\207\252\345\212\250\346\227\245\345\277\227.html" +++ /dev/null @@ -1,147 +0,0 @@ - - - - - - FunnyLog | YouQu3 | Next-Gen Linux Autotest Framework - - - - - - - - - - - - - - -
Skip to content
📔 阅读量:

FunnyLog

Source Code: https://github.com/linuxdeepin/funnylog

一个简单易用、功能强大的日志工具。

只需要加一个装饰器,就能自动日志输出类里面所有的方法的功能说明。

安装

console
pip install funnylog

使用方法

1、自动输出日志

py
#!/usr/bin/env python3
-# _*_ coding:utf-8 _*_
-
-# SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
-
-# SPDX-License-Identifier: Apache Software License
-from funnylog import logger
-from funnylog import log
-from funnylog.conf import setting
-
-setting.CLASS_NAME_ENDSWITH = ("Log",)
-logger("DEBUG")
-
-
-class BaseLog:
-
-    def base_self_method(self):
-        """我是 基类 里面的实例方法"""
-
-    @classmethod
-    def base_cls_method(self):
-        """我是 基类 里面的类方法"""
-
-    @staticmethod
-    def base_static_method():
-        """我是 基类 里面的静态方法"""
-
-# 注意这里,只需要在这里挂一个装饰器
-@log
-class TestLog(BaseLog):
-    """继承了基类BaseLog"""
-
-    def self_method(self):
-        """我是 类 里面的实例方法"""
-
-    @classmethod
-    def cls_method(self):
-        """我是 类 里面的类方法"""
-
-    @staticmethod
-    def static_method():
-        """我是 类 里面的静态方法"""
-
-
-if __name__ == '__main__':
-    # @log装饰器自动打印
-    TestLog().self_method()
-    TestLog().cls_method()
-    TestLog().static_method()
-    # 直接调用基类里面的方法,也能自动打印
-    TestLog().base_self_method()
-    TestLog().base_cls_method()
-    TestLog().base_static_method()

终端输出:

2、方法中输出其他的日志

py
#!/usr/bin/env python3
-# _*_ coding:utf-8 _*_
-
-# SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
-
-# SPDX-License-Identifier: Apache Software License
-from funnylog import logger
-from funnylog import log
-from funnylog.conf import setting
-
-setting.CLASS_NAME_ENDSWITH = ("Log",)
-logger("DEBUG")
-
-
-class BaseLog:
-    ...
-
-# 注意这里,只需要在这里挂一个装饰器
-@log
-class TestLog(BaseLog):
-    """继承了基类BaseLog"""
-    ...
-
-    @staticmethod
-    def static_method():
-        """我是 类 里面的静态方法"""
-
-        # 方法里面仍然可以单独打印日志
-        logger.debug("这是我想再输出的其他 debug 日志")
-        logger.info("这是我想再输出的其他 info 日志")
-        logger.error("这是我想再输出的其他 error 日志")
-
-
-if __name__ == '__main__':
-    # @log装饰器自动打印
-    TestLog().static_method()

终端输出:

3、在外层其他直接使用

py
#!/usr/bin/env python3
-# _*_ coding:utf-8 _*_
-
-# SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
-
-# SPDX-License-Identifier: Apache Software License
-from funnylog import logger
-from funnylog import log
-from funnylog.conf import setting
-
-setting.CLASS_NAME_ENDSWITH = ("Log",)
-logger("DEBUG")
-
-
-class BaseLog:
-    ...
-
-# 注意这里,只需要在这里挂一个装饰器
-@log
-class TestLog(BaseLog):
-    """继承了基类BaseLog"""
-    ...
-
-
-if __name__ == '__main__':
-    # logger直接调用
-    logger.debug("这是在类外面打 debug log")
-    logger.info("这是在类外面打 info log")
-    logger.error("这是在类外面打 error log")

终端输出:

必要配置项

  • LOG_FILE_PATH 日志文件的生成路径;

    默认是在:/tmp/_logs,你可以配置为其他位置;

    python
    from funnylog.conf import setting
    -
    -setting.LOG_FILE_PATH = "/home/user/xxx"
  • LOG_LEVEL日志级别;

    默认日志输出级别为 DEBUG 级别,同样可以进行配置修改;

    python
    from funnylog.conf import setting
    -
    -setting.LOG_LEVEL = "INFO"
  • 自动输出日志的类名称;(tuple)

    • CLASS_NAME_STARTSWITH 类名以什么开头;

      python
      from funnylog.conf import setting
      -
      -setting.CLASS_NAME_STARTSWITH = ("Test",) 
      -# 注意给元组类型
    • CLASS_NAME_ENDSWITH 类名以什么结尾;

    • CLASS_NAME_CONTAIN 类名包含什么字符;

- - - - \ No newline at end of file diff --git "a/\346\217\222\344\273\266/\345\233\276\345\203\217\350\257\206\345\210\253.html" "b/\346\217\222\344\273\266/\345\233\276\345\203\217\350\257\206\345\210\253.html" deleted file mode 100644 index 5cffc18..0000000 --- "a/\346\217\222\344\273\266/\345\233\276\345\203\217\350\257\206\345\210\253.html" +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - YouQu3 | Next-Gen Linux Autotest Framework - - - - - - - - - - - - - - -
Skip to content
📔 阅读量:
- - - - \ No newline at end of file diff --git "a/\346\217\222\344\273\266/\345\261\236\346\200\247\350\257\206\345\210\253.html" "b/\346\217\222\344\273\266/\345\261\236\346\200\247\350\257\206\345\210\253.html" deleted file mode 100644 index 725cd62..0000000 --- "a/\346\217\222\344\273\266/\345\261\236\346\200\247\350\257\206\345\210\253.html" +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - YouQu3 | Next-Gen Linux Autotest Framework - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git "a/\346\217\222\344\273\266/\346\217\222\344\273\266\345\210\227\350\241\250.html" "b/\346\217\222\344\273\266/\346\217\222\344\273\266\345\210\227\350\241\250.html" index 973c6fb..11595ea 100644 --- "a/\346\217\222\344\273\266/\346\217\222\344\273\266\345\210\227\350\241\250.html" +++ "b/\346\217\222\344\273\266/\346\217\222\344\273\266\345\210\227\350\241\250.html" @@ -8,18 +8,18 @@ - + - - - + + + -
Skip to content
📔 阅读量:

YouQu3 插件汇总信息

NUMNAMEDESCUSABLE
1youqu-dogtail属性定位插件✔️
2youqu-imagecenter-rpc基于 RPC 服务的图像识别插件✔️
3youqu-mousekey键鼠操作插件✔️
4pydbussendD-Bus 操控插件✔️
5youqu-pms-driverPMS 测试单驱动插件✔️
6youqu-button-center相对位移定位插件✔️
7pytest-mark-manage用例标签化管理插件✔️
8pytest-youqu-playwright基于 Playwright 的 Web UI 自动化插件✔️
9youqu-htmlYouQu Html Report✔️
10pytest-record-video用例失败录屏插件✔️
11funnylog2全自动日志插件✔️
12pdocr-rpc基于 RPC 服务的 OCR 识别插件✔️
13wdotoolWayland 下完美的键鼠工具🚧
14youqu-git-commit自动统计分析每次 Commit 中用例增删改、方法增删改的详细数据🚧
15pylinuxauto 🔥Linux GUI 自动化测试模块✔️
16youqu2-transfer-youqu3迁移工具:将基于YouQu2的用例代码修改为YouQu3✔️
17youqu3-dragonYouQu3 Web 可视化驱动🚧
- +
Skip to content
📔 阅读量:

YouQu3 插件汇总信息

NUMNAMEDESCUSABLE
1youqu-dogtail属性定位插件✔️
2youqu-imagecenter-rpc基于 RPC 服务的图像识别插件✔️
3youqu-mousekey键鼠操作插件✔️
4pydbussendD-Bus 操控插件✔️
5youqu-pms-driverPMS 测试单驱动插件✔️
6youqu-button-center相对位移定位插件✔️
7pytest-mark-manage用例标签化管理插件✔️
8pytest-youqu-playwright基于 Playwright 的 Web UI 自动化插件✔️
9youqu-htmlYouQu Html Report✔️
10pytest-record-video用例失败录屏插件✔️
11funnylog2全自动日志插件✔️
12pdocr-rpc基于 RPC 服务的 OCR 识别插件✔️
13wdotoolWayland 下完美的键鼠工具🚧
14youqu-git-commit自动统计分析每次 Commit 中用例增删改、方法增删改的详细数据🚧
15pylinuxauto 🔥Linux GUI 自动化测试模块✔️
16youqu2-transfer-youqu3迁移工具:将基于YouQu2的用例代码修改为YouQu3✔️
17youqu3-dragonYouQu3 Web 可视化驱动🚧
18youqu-html-rpc基于 RPC 服务的测试报告生成插件✔️

最后更新于:

+ \ No newline at end of file diff --git "a/\346\217\222\344\273\266/\346\240\207\347\255\276\345\214\226\347\256\241\347\220\206.html" "b/\346\217\222\344\273\266/\346\240\207\347\255\276\345\214\226\347\256\241\347\220\206.html" deleted file mode 100644 index e3252c6..0000000 --- "a/\346\217\222\344\273\266/\346\240\207\347\255\276\345\214\226\347\256\241\347\220\206.html" +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - YouQu3 | Next-Gen Linux Autotest Framework - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git "a/\346\217\222\344\273\266/\347\224\250\344\276\213\345\275\225\345\261\217.html" "b/\346\217\222\344\273\266/\347\224\250\344\276\213\345\275\225\345\261\217.html" deleted file mode 100644 index df52f1f..0000000 --- "a/\346\217\222\344\273\266/\347\224\250\344\276\213\345\275\225\345\261\217.html" +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - YouQu3 | Next-Gen Linux Autotest Framework - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git "a/\346\217\222\344\273\266/\347\233\270\345\257\271\344\275\215\347\247\273\345\256\232\344\275\215.html" "b/\346\217\222\344\273\266/\347\233\270\345\257\271\344\275\215\347\247\273\345\256\232\344\275\215.html" deleted file mode 100644 index eb22c58..0000000 --- "a/\346\217\222\344\273\266/\347\233\270\345\257\271\344\275\215\347\247\273\345\256\232\344\275\215.html" +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - YouQu3 | Next-Gen Linux Autotest Framework - - - - - - - - - - - - - - -
Skip to content
📔 阅读量:
- - - - \ No newline at end of file diff --git "a/\346\217\222\344\273\266/\351\224\256\351\274\240\346\223\215\344\275\234.html" "b/\346\217\222\344\273\266/\351\224\256\351\274\240\346\223\215\344\275\234.html" deleted file mode 100644 index 8d4d76f..0000000 --- "a/\346\217\222\344\273\266/\351\224\256\351\274\240\346\223\215\344\275\234.html" +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - YouQu3 | Next-Gen Linux Autotest Framework - - - - - - - - - - - - - - -
Skip to content
📔 阅读量:
- - - - \ No newline at end of file diff --git "a/\350\247\204\345\210\222/UOS\350\207\252\345\212\250\345\214\226\346\265\213\350\257\225\346\226\271\346\263\225\345\245\227\344\273\266.html" "b/\350\247\204\345\210\222/UOS\350\207\252\345\212\250\345\214\226\346\265\213\350\257\225\346\226\271\346\263\225\345\245\227\344\273\266.html" index 402ad4f..c47e152 100644 --- "a/\350\247\204\345\210\222/UOS\350\207\252\345\212\250\345\214\226\346\265\213\350\257\225\346\226\271\346\263\225\345\245\227\344\273\266.html" +++ "b/\350\247\204\345\210\222/UOS\350\207\252\345\212\250\345\214\226\346\265\213\350\257\225\346\226\271\346\263\225\345\245\227\344\273\266.html" @@ -8,11 +8,11 @@ - + - - - + + + @@ -32,8 +32,8 @@ ├── deepin_movie │   ├── deepin_music_method.py ... ... - └── __init__.py

2.2. 方案说明

  • 系统中各应用划分自己的模块,模块名称为应用包名,下划线连接单词。

  • 每个应用存在一个唯一的出口文件,供外部用例调用。

    python
    from umtk.dde_file_manager import DdeFileManagerMethod

    DdeFileManagerMethod 可以调用 dde-file-manager 所有的元素操作方法。

  • 所有方法以类的形式编写,遵循 PO 设计模式。

  • 测试方法套件中所有的方法均为原子操作,不做复杂步骤的封装。

3. 套件发布

  • 套件分大版本发布,比如 V20、V25 是不同的测试方法套件版本,在不同的代码仓库中。

  • 在同一个大版本中,套件持续保持更新,并在系统关键节点发布对应的版本;

    比如 V20 阶段,1070 发布一个套件版本,1071 发布一个套件版本,以此类推,过程中如果根据需要出小版本。

  • 套件通过 PyPI 发布,用户可直接通过 pip 命令安装使用:

    安装:

    shell
    pip install umtk

    使用:

    python
    from umtk.dde_file_manager import DdeFileManagerMethod

4. 套件维护

  • 套件由专人主责维护(maintainer),其他人可以提需求、issue、PR,以保持套件的各方面一致性。

  • 鼓励内外部开发者贡献 PR。

5. 对套件的测试

套件里面保存元素的操作方法,在操作方法多了之后,维护方法的稳定性有效性将成为一个问题。

因此,我们需要建立对套件的自动化测试,专门针对元素操作方法函数进行测试,类似于单元测试。

适配厂商可以直接使用这些单元测试进行适配测试。

6. UMTK 和 YouQu2 的公共方法库(public)有何区别

孔子《论语·卫灵公》: “道,不同,不相为谋。”

亦各从其志也。

使用的框架不同

  • YouQu2 的公共方法库(public)是在 YouQu2 的框架下进行开发的,它不能脱离 YouQu2 框架而独立使用。
  • UMTK 是基于 YouQu3 开发,YouQu3 采用全新的架构设计,和 YouQu2 有很大差异,因此 UMTK 和 public 二者属于两个时代,不兼容。

内容、范围、业务不同

  • UMTK 涵盖了 UOS 系统所有预装应用的原子操作方法,不存在复杂步骤的堆叠封装,不受需求变更影响,不涉及用例逻辑,可以对外开源发布。
  • public 仅包含自动化用例用到的少部分公共方法,范围覆盖很少,且存在较多涉及用例逻辑的复杂步骤方法,容易受到需求变更,不适合对外开源发布。

代码一致性

  • UMTK 所有代码由专人维护,且有完善的单元测试机制,确保操作方法的一致性、稳定性、有效性。
  • public 大量人员都可以对其进行直接修改,各种代码风格不统一,稳定性、有效性没有保障。
- + └── __init__.py

2.2. 方案说明

  • 系统中各应用划分自己的模块,模块名称为应用包名,下划线连接单词。

  • 每个应用存在一个唯一的出口文件,供外部用例调用。

    python
    from umtk.dde_file_manager import DdeFileManagerMethod

    DdeFileManagerMethod 可以调用 dde-file-manager 所有的元素操作方法。

  • 所有方法以类的形式编写,遵循 PO 设计模式。

  • 测试方法套件中所有的方法均为原子操作,不做复杂步骤的封装。

3. 套件发布

  • 套件分大版本发布,比如 V20、V25 是不同的测试方法套件版本,在不同的代码仓库中。

  • 在同一个大版本中,套件持续保持更新,并在系统关键节点发布对应的版本;

    比如 V20 阶段,1070 发布一个套件版本,1071 发布一个套件版本,以此类推,过程中如果根据需要出小版本。

  • 套件通过 PyPI 发布,用户可直接通过 pip 命令安装使用:

    安装:

    shell
    pip install umtk

    使用:

    python
    from umtk.dde_file_manager import DdeFileManagerMethod

4. 套件维护

  • 套件由专人主责维护(maintainer),其他人可以提需求、issue、PR,以保持套件的各方面一致性。

  • 鼓励内外部开发者贡献 PR。

5. 对套件的测试

套件里面保存元素的操作方法,在操作方法多了之后,维护方法的稳定性有效性将成为一个问题。

因此,我们需要建立对套件的自动化测试,专门针对元素操作方法函数进行测试,类似于单元测试。

适配厂商可以直接使用这些单元测试进行适配测试。

6. UMTK 和 YouQu2 的公共方法库(public)有何区别

孔子《论语·卫灵公》: “道,不同,不相为谋。”

亦各从其志也。

使用的框架不同

  • YouQu2 的公共方法库(public)是在 YouQu2 的框架下进行开发的,它不能脱离 YouQu2 框架而独立使用。
  • UMTK 是基于 YouQu3 开发,YouQu3 采用全新的架构设计,和 YouQu2 有很大差异,因此 UMTK 和 public 二者属于两个时代,不兼容。

内容、范围、业务不同

  • UMTK 涵盖了 UOS 系统所有预装应用的原子操作方法,不存在复杂步骤的堆叠封装,不受需求变更影响,不涉及用例逻辑,可以对外开源发布。
  • public 仅包含自动化用例用到的少部分公共方法,范围覆盖很少,且存在较多涉及用例逻辑的复杂步骤方法,容易受到需求变更,不适合对外开源发布。

代码一致性

  • UMTK 所有代码由专人维护,且有完善的单元测试机制,确保操作方法的一致性、稳定性、有效性。
  • public 大量人员都可以对其进行直接修改,各种代码风格不统一,稳定性、有效性没有保障。
+ \ No newline at end of file diff --git "a/\350\247\204\345\210\222/UOS\350\207\252\345\212\250\345\214\226\346\265\213\350\257\225\347\224\250\344\276\213.html" "b/\350\247\204\345\210\222/UOS\350\207\252\345\212\250\345\214\226\346\265\213\350\257\225\347\224\250\344\276\213.html" index 99ff1c7..3cba95c 100644 --- "a/\350\247\204\345\210\222/UOS\350\207\252\345\212\250\345\214\226\346\265\213\350\257\225\347\224\250\344\276\213.html" +++ "b/\350\247\204\345\210\222/UOS\350\207\252\345\212\250\345\214\226\346\265\213\350\257\225\347\224\250\344\276\213.html" @@ -8,11 +8,11 @@ - + - - - + + + @@ -43,8 +43,8 @@ ├── pytest.ini ├── README.md └── requirements.txt

2.2. 方案说明

  • 系统中各应用在 case 目录下划分自己的用例模块,模块名称为应用包名,下划线连接单词。

  • 用例中所需要的方法从 UMTK 里面导入使用,如果涉及到复杂步骤的封装,可以在方法层(method)做复杂步骤的封装。

    python
    from umtk.dde_file_manager import DdeFileManagerMethod
    -from youqu3.gui import pylinuxauto
- +from youqu3.gui import pylinuxauto
+ \ No newline at end of file diff --git "a/\350\247\204\345\210\222/YouQu3\346\236\266\346\236\204\350\256\276\350\256\241\350\247\204\345\210\222.html" "b/\350\247\204\345\210\222/YouQu3\346\236\266\346\236\204\350\256\276\350\256\241\350\247\204\345\210\222.html" index 45c6355..2d1ba54 100644 --- "a/\350\247\204\345\210\222/YouQu3\346\236\266\346\236\204\350\256\276\350\256\241\350\247\204\345\210\222.html" +++ "b/\350\247\204\345\210\222/YouQu3\346\236\266\346\236\204\350\256\276\350\256\241\350\247\204\345\210\222.html" @@ -8,11 +8,11 @@ - + - - - + + + @@ -75,8 +75,8 @@ def test_mycase_001(self): ... - self.assert_**

4.2.4. 配置对象

用例工程配置对象继承 YouQu3 配置类,以此来获取框架已有的公共配置,同时定义一些用例工程相关的配置,如:assert_resstatic_resimage_res 的路径,以便方法或用例中能够获取到。

4.2.5. 用例标签管理文件

在 CSV 文件中定义用例对象的标签:

  • 维护标签时,不需要修改用例脚本。
  • 日常维护过程中,跳过用例可以直接通过修改 CSV 文件来控制用例是否跳过。

4.2.6. 默认环境变量管理文件

定义虚拟环境相关的一些环境变量,以此控制虚拟环境创建、运行的行为。

4.2.7. 依赖管理文件

定义用例工程所需要的依赖包。

4.2.8. 调试用例驱动

用于用例开发调试过程中,方便用例开发者以 debug 模式运行脚本。

5. 演进规划

可视化配置

提供一个 Web 页面化的配置功能,配合远程执行功能,支持对各种测试策略的驱动执行。

非开发者下运行

支持在非开发着环境下运行用例:

  • 减少系统自动化环境准备的难度;
  • 更贴合大部分真实用户的使用场景;

过程钩子

支持对用例执行的各个阶段插入钩子,框架预设一些文件接口规范,用户只需要创建符合框架定义的文件命名规范脚本文件,即可自动被框架加载并执行。

- + self.assert_**

4.2.4. 配置对象

用例工程配置对象继承 YouQu3 配置类,以此来获取框架已有的公共配置,同时定义一些用例工程相关的配置,如:assert_resstatic_resimage_res 的路径,以便方法或用例中能够获取到。

4.2.5. 用例标签管理文件

在 CSV 文件中定义用例对象的标签:

  • 维护标签时,不需要修改用例脚本。
  • 日常维护过程中,跳过用例可以直接通过修改 CSV 文件来控制用例是否跳过。

4.2.6. 默认环境变量管理文件

定义虚拟环境相关的一些环境变量,以此控制虚拟环境创建、运行的行为。

4.2.7. 依赖管理文件

定义用例工程所需要的依赖包。

4.2.8. 调试用例驱动

用于用例开发调试过程中,方便用例开发者以 debug 模式运行脚本。

5. 演进规划

可视化配置

提供一个 Web 页面化的配置功能,配合远程执行功能,支持对各种测试策略的驱动执行。

非开发者下运行

支持在非开发着环境下运行用例:

  • 减少系统自动化环境准备的难度;
  • 更贴合大部分真实用户的使用场景;

过程钩子

支持对用例执行的各个阶段插入钩子,框架预设一些文件接口规范,用户只需要创建符合框架定义的文件命名规范脚本文件,即可自动被框架加载并执行。

+ \ No newline at end of file